// Copyright 2022 Google LLC // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.26.0 // protoc v3.12.2 // source: google/analytics/data/v1alpha/data.proto package data import ( reflect "reflect" sync "sync" protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" durationpb "google.golang.org/protobuf/types/known/durationpb" ) 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) ) // Scoping specifies which events are considered when evaluating if a user // meets a criteria. type UserCriteriaScoping int32 const ( // Unspecified criteria scoping. Do not specify. UserCriteriaScoping_USER_CRITERIA_SCOPING_UNSPECIFIED UserCriteriaScoping = 0 // If the criteria is satisfied within one event, the user matches the // criteria. UserCriteriaScoping_USER_CRITERIA_WITHIN_SAME_EVENT UserCriteriaScoping = 1 // If the criteria is satisfied within one session, the user matches the // criteria. UserCriteriaScoping_USER_CRITERIA_WITHIN_SAME_SESSION UserCriteriaScoping = 2 // If the criteria is satisfied by any events for the user, the user // matches the criteria. UserCriteriaScoping_USER_CRITERIA_ACROSS_ALL_SESSIONS UserCriteriaScoping = 3 ) // Enum value maps for UserCriteriaScoping. var ( UserCriteriaScoping_name = map[int32]string{ 0: "USER_CRITERIA_SCOPING_UNSPECIFIED", 1: "USER_CRITERIA_WITHIN_SAME_EVENT", 2: "USER_CRITERIA_WITHIN_SAME_SESSION", 3: "USER_CRITERIA_ACROSS_ALL_SESSIONS", } UserCriteriaScoping_value = map[string]int32{ "USER_CRITERIA_SCOPING_UNSPECIFIED": 0, "USER_CRITERIA_WITHIN_SAME_EVENT": 1, "USER_CRITERIA_WITHIN_SAME_SESSION": 2, "USER_CRITERIA_ACROSS_ALL_SESSIONS": 3, } ) func (x UserCriteriaScoping) Enum() *UserCriteriaScoping { p := new(UserCriteriaScoping) *p = x return p } func (x UserCriteriaScoping) String() string { return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) } func (UserCriteriaScoping) Descriptor() protoreflect.EnumDescriptor { return file_google_analytics_data_v1alpha_data_proto_enumTypes[0].Descriptor() } func (UserCriteriaScoping) Type() protoreflect.EnumType { return &file_google_analytics_data_v1alpha_data_proto_enumTypes[0] } func (x UserCriteriaScoping) Number() protoreflect.EnumNumber { return protoreflect.EnumNumber(x) } // Deprecated: Use UserCriteriaScoping.Descriptor instead. func (UserCriteriaScoping) EnumDescriptor() ([]byte, []int) { return file_google_analytics_data_v1alpha_data_proto_rawDescGZIP(), []int{0} } // Enumerates options for how long an exclusion will last if a user matches // the `userExclusionCriteria`. type UserExclusionDuration int32 const ( // Unspecified exclusion duration. Do not specify. UserExclusionDuration_USER_EXCLUSION_DURATION_UNSPECIFIED UserExclusionDuration = 0 // Temporarily exclude users from the segment during periods when the // user meets the `userExclusionCriteria` condition. UserExclusionDuration_USER_EXCLUSION_TEMPORARY UserExclusionDuration = 1 // Permanently exclude users from the segment if the user ever meets the // `userExclusionCriteria` condition. UserExclusionDuration_USER_EXCLUSION_PERMANENT UserExclusionDuration = 2 ) // Enum value maps for UserExclusionDuration. var ( UserExclusionDuration_name = map[int32]string{ 0: "USER_EXCLUSION_DURATION_UNSPECIFIED", 1: "USER_EXCLUSION_TEMPORARY", 2: "USER_EXCLUSION_PERMANENT", } UserExclusionDuration_value = map[string]int32{ "USER_EXCLUSION_DURATION_UNSPECIFIED": 0, "USER_EXCLUSION_TEMPORARY": 1, "USER_EXCLUSION_PERMANENT": 2, } ) func (x UserExclusionDuration) Enum() *UserExclusionDuration { p := new(UserExclusionDuration) *p = x return p } func (x UserExclusionDuration) String() string { return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) } func (UserExclusionDuration) Descriptor() protoreflect.EnumDescriptor { return file_google_analytics_data_v1alpha_data_proto_enumTypes[1].Descriptor() } func (UserExclusionDuration) Type() protoreflect.EnumType { return &file_google_analytics_data_v1alpha_data_proto_enumTypes[1] } func (x UserExclusionDuration) Number() protoreflect.EnumNumber { return protoreflect.EnumNumber(x) } // Deprecated: Use UserExclusionDuration.Descriptor instead. func (UserExclusionDuration) EnumDescriptor() ([]byte, []int) { return file_google_analytics_data_v1alpha_data_proto_rawDescGZIP(), []int{1} } // Scoping specifies which events are considered when evaluating if a // session meets a criteria. type SessionCriteriaScoping int32 const ( // Unspecified criteria scoping. Do not specify. SessionCriteriaScoping_SESSION_CRITERIA_SCOPING_UNSPECIFIED SessionCriteriaScoping = 0 // If the criteria is satisfied within one event, the session matches the // criteria. SessionCriteriaScoping_SESSION_CRITERIA_WITHIN_SAME_EVENT SessionCriteriaScoping = 1 // If the criteria is satisfied within one session, the session matches // the criteria. SessionCriteriaScoping_SESSION_CRITERIA_WITHIN_SAME_SESSION SessionCriteriaScoping = 2 ) // Enum value maps for SessionCriteriaScoping. var ( SessionCriteriaScoping_name = map[int32]string{ 0: "SESSION_CRITERIA_SCOPING_UNSPECIFIED", 1: "SESSION_CRITERIA_WITHIN_SAME_EVENT", 2: "SESSION_CRITERIA_WITHIN_SAME_SESSION", } SessionCriteriaScoping_value = map[string]int32{ "SESSION_CRITERIA_SCOPING_UNSPECIFIED": 0, "SESSION_CRITERIA_WITHIN_SAME_EVENT": 1, "SESSION_CRITERIA_WITHIN_SAME_SESSION": 2, } ) func (x SessionCriteriaScoping) Enum() *SessionCriteriaScoping { p := new(SessionCriteriaScoping) *p = x return p } func (x SessionCriteriaScoping) String() string { return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) } func (SessionCriteriaScoping) Descriptor() protoreflect.EnumDescriptor { return file_google_analytics_data_v1alpha_data_proto_enumTypes[2].Descriptor() } func (SessionCriteriaScoping) Type() protoreflect.EnumType { return &file_google_analytics_data_v1alpha_data_proto_enumTypes[2] } func (x SessionCriteriaScoping) Number() protoreflect.EnumNumber { return protoreflect.EnumNumber(x) } // Deprecated: Use SessionCriteriaScoping.Descriptor instead. func (SessionCriteriaScoping) EnumDescriptor() ([]byte, []int) { return file_google_analytics_data_v1alpha_data_proto_rawDescGZIP(), []int{2} } // Enumerates options for how long an exclusion will last if a session // matches the `sessionExclusionCriteria`. type SessionExclusionDuration int32 const ( // Unspecified exclusion duration. Do not specify. SessionExclusionDuration_SESSION_EXCLUSION_DURATION_UNSPECIFIED SessionExclusionDuration = 0 // Temporarily exclude sessions from the segment during periods when the // session meets the `sessionExclusionCriteria` condition. SessionExclusionDuration_SESSION_EXCLUSION_TEMPORARY SessionExclusionDuration = 1 // Permanently exclude sessions from the segment if the session ever meets // the `sessionExclusionCriteria` condition. SessionExclusionDuration_SESSION_EXCLUSION_PERMANENT SessionExclusionDuration = 2 ) // Enum value maps for SessionExclusionDuration. var ( SessionExclusionDuration_name = map[int32]string{ 0: "SESSION_EXCLUSION_DURATION_UNSPECIFIED", 1: "SESSION_EXCLUSION_TEMPORARY", 2: "SESSION_EXCLUSION_PERMANENT", } SessionExclusionDuration_value = map[string]int32{ "SESSION_EXCLUSION_DURATION_UNSPECIFIED": 0, "SESSION_EXCLUSION_TEMPORARY": 1, "SESSION_EXCLUSION_PERMANENT": 2, } ) func (x SessionExclusionDuration) Enum() *SessionExclusionDuration { p := new(SessionExclusionDuration) *p = x return p } func (x SessionExclusionDuration) String() string { return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) } func (SessionExclusionDuration) Descriptor() protoreflect.EnumDescriptor { return file_google_analytics_data_v1alpha_data_proto_enumTypes[3].Descriptor() } func (SessionExclusionDuration) Type() protoreflect.EnumType { return &file_google_analytics_data_v1alpha_data_proto_enumTypes[3] } func (x SessionExclusionDuration) Number() protoreflect.EnumNumber { return protoreflect.EnumNumber(x) } // Deprecated: Use SessionExclusionDuration.Descriptor instead. func (SessionExclusionDuration) EnumDescriptor() ([]byte, []int) { return file_google_analytics_data_v1alpha_data_proto_rawDescGZIP(), []int{3} } // Scoping specifies which events are considered when evaluating if an event // meets a criteria. type EventCriteriaScoping int32 const ( // Unspecified criteria scoping. Do not specify. EventCriteriaScoping_EVENT_CRITERIA_SCOPING_UNSPECIFIED EventCriteriaScoping = 0 // If the criteria is satisfied within one event, the event matches the // criteria. EventCriteriaScoping_EVENT_CRITERIA_WITHIN_SAME_EVENT EventCriteriaScoping = 1 ) // Enum value maps for EventCriteriaScoping. var ( EventCriteriaScoping_name = map[int32]string{ 0: "EVENT_CRITERIA_SCOPING_UNSPECIFIED", 1: "EVENT_CRITERIA_WITHIN_SAME_EVENT", } EventCriteriaScoping_value = map[string]int32{ "EVENT_CRITERIA_SCOPING_UNSPECIFIED": 0, "EVENT_CRITERIA_WITHIN_SAME_EVENT": 1, } ) func (x EventCriteriaScoping) Enum() *EventCriteriaScoping { p := new(EventCriteriaScoping) *p = x return p } func (x EventCriteriaScoping) String() string { return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) } func (EventCriteriaScoping) Descriptor() protoreflect.EnumDescriptor { return file_google_analytics_data_v1alpha_data_proto_enumTypes[4].Descriptor() } func (EventCriteriaScoping) Type() protoreflect.EnumType { return &file_google_analytics_data_v1alpha_data_proto_enumTypes[4] } func (x EventCriteriaScoping) Number() protoreflect.EnumNumber { return protoreflect.EnumNumber(x) } // Deprecated: Use EventCriteriaScoping.Descriptor instead. func (EventCriteriaScoping) EnumDescriptor() ([]byte, []int) { return file_google_analytics_data_v1alpha_data_proto_rawDescGZIP(), []int{4} } // Enumerates options for how long an exclusion will last if an event // matches the `eventExclusionCriteria`. type EventExclusionDuration int32 const ( // Unspecified exclusion duration. Do not specify. EventExclusionDuration_EVENT_EXCLUSION_DURATION_UNSPECIFIED EventExclusionDuration = 0 // Permanently exclude events from the segment if the event ever meets // the `eventExclusionCriteria` condition. EventExclusionDuration_EVENT_EXCLUSION_PERMANENT EventExclusionDuration = 1 ) // Enum value maps for EventExclusionDuration. var ( EventExclusionDuration_name = map[int32]string{ 0: "EVENT_EXCLUSION_DURATION_UNSPECIFIED", 1: "EVENT_EXCLUSION_PERMANENT", } EventExclusionDuration_value = map[string]int32{ "EVENT_EXCLUSION_DURATION_UNSPECIFIED": 0, "EVENT_EXCLUSION_PERMANENT": 1, } ) func (x EventExclusionDuration) Enum() *EventExclusionDuration { p := new(EventExclusionDuration) *p = x return p } func (x EventExclusionDuration) String() string { return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) } func (EventExclusionDuration) Descriptor() protoreflect.EnumDescriptor { return file_google_analytics_data_v1alpha_data_proto_enumTypes[5].Descriptor() } func (EventExclusionDuration) Type() protoreflect.EnumType { return &file_google_analytics_data_v1alpha_data_proto_enumTypes[5] } func (x EventExclusionDuration) Number() protoreflect.EnumNumber { return protoreflect.EnumNumber(x) } // Deprecated: Use EventExclusionDuration.Descriptor instead. func (EventExclusionDuration) EnumDescriptor() ([]byte, []int) { return file_google_analytics_data_v1alpha_data_proto_rawDescGZIP(), []int{5} } // A metric's value type. type MetricType int32 const ( // Unspecified type. MetricType_METRIC_TYPE_UNSPECIFIED MetricType = 0 // Integer type. MetricType_TYPE_INTEGER MetricType = 1 // Floating point type. MetricType_TYPE_FLOAT MetricType = 2 // A duration of seconds; a special floating point type. MetricType_TYPE_SECONDS MetricType = 4 // A duration in milliseconds; a special floating point type. MetricType_TYPE_MILLISECONDS MetricType = 5 // A duration in minutes; a special floating point type. MetricType_TYPE_MINUTES MetricType = 6 // A duration in hours; a special floating point type. MetricType_TYPE_HOURS MetricType = 7 // A custom metric of standard type; a special floating point type. MetricType_TYPE_STANDARD MetricType = 8 // An amount of money; a special floating point type. MetricType_TYPE_CURRENCY MetricType = 9 // A length in feet; a special floating point type. MetricType_TYPE_FEET MetricType = 10 // A length in miles; a special floating point type. MetricType_TYPE_MILES MetricType = 11 // A length in meters; a special floating point type. MetricType_TYPE_METERS MetricType = 12 // A length in kilometers; a special floating point type. MetricType_TYPE_KILOMETERS MetricType = 13 ) // Enum value maps for MetricType. var ( MetricType_name = map[int32]string{ 0: "METRIC_TYPE_UNSPECIFIED", 1: "TYPE_INTEGER", 2: "TYPE_FLOAT", 4: "TYPE_SECONDS", 5: "TYPE_MILLISECONDS", 6: "TYPE_MINUTES", 7: "TYPE_HOURS", 8: "TYPE_STANDARD", 9: "TYPE_CURRENCY", 10: "TYPE_FEET", 11: "TYPE_MILES", 12: "TYPE_METERS", 13: "TYPE_KILOMETERS", } MetricType_value = map[string]int32{ "METRIC_TYPE_UNSPECIFIED": 0, "TYPE_INTEGER": 1, "TYPE_FLOAT": 2, "TYPE_SECONDS": 4, "TYPE_MILLISECONDS": 5, "TYPE_MINUTES": 6, "TYPE_HOURS": 7, "TYPE_STANDARD": 8, "TYPE_CURRENCY": 9, "TYPE_FEET": 10, "TYPE_MILES": 11, "TYPE_METERS": 12, "TYPE_KILOMETERS": 13, } ) func (x MetricType) Enum() *MetricType { p := new(MetricType) *p = x return p } func (x MetricType) String() string { return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) } func (MetricType) Descriptor() protoreflect.EnumDescriptor { return file_google_analytics_data_v1alpha_data_proto_enumTypes[6].Descriptor() } func (MetricType) Type() protoreflect.EnumType { return &file_google_analytics_data_v1alpha_data_proto_enumTypes[6] } func (x MetricType) Number() protoreflect.EnumNumber { return protoreflect.EnumNumber(x) } // Deprecated: Use MetricType.Descriptor instead. func (MetricType) EnumDescriptor() ([]byte, []int) { return file_google_analytics_data_v1alpha_data_proto_rawDescGZIP(), []int{6} } // The match type of a string filter type StringFilter_MatchType int32 const ( // Unspecified StringFilter_MATCH_TYPE_UNSPECIFIED StringFilter_MatchType = 0 // Exact match of the string value. StringFilter_EXACT StringFilter_MatchType = 1 // Begins with the string value. StringFilter_BEGINS_WITH StringFilter_MatchType = 2 // Ends with the string value. StringFilter_ENDS_WITH StringFilter_MatchType = 3 // Contains the string value. StringFilter_CONTAINS StringFilter_MatchType = 4 // Full match for the regular expression with the string value. StringFilter_FULL_REGEXP StringFilter_MatchType = 5 // Partial match for the regular expression with the string value. StringFilter_PARTIAL_REGEXP StringFilter_MatchType = 6 ) // Enum value maps for StringFilter_MatchType. var ( StringFilter_MatchType_name = map[int32]string{ 0: "MATCH_TYPE_UNSPECIFIED", 1: "EXACT", 2: "BEGINS_WITH", 3: "ENDS_WITH", 4: "CONTAINS", 5: "FULL_REGEXP", 6: "PARTIAL_REGEXP", } StringFilter_MatchType_value = map[string]int32{ "MATCH_TYPE_UNSPECIFIED": 0, "EXACT": 1, "BEGINS_WITH": 2, "ENDS_WITH": 3, "CONTAINS": 4, "FULL_REGEXP": 5, "PARTIAL_REGEXP": 6, } ) func (x StringFilter_MatchType) Enum() *StringFilter_MatchType { p := new(StringFilter_MatchType) *p = x return p } func (x StringFilter_MatchType) String() string { return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) } func (StringFilter_MatchType) Descriptor() protoreflect.EnumDescriptor { return file_google_analytics_data_v1alpha_data_proto_enumTypes[7].Descriptor() } func (StringFilter_MatchType) Type() protoreflect.EnumType { return &file_google_analytics_data_v1alpha_data_proto_enumTypes[7] } func (x StringFilter_MatchType) Number() protoreflect.EnumNumber { return protoreflect.EnumNumber(x) } // Deprecated: Use StringFilter_MatchType.Descriptor instead. func (StringFilter_MatchType) EnumDescriptor() ([]byte, []int) { return file_google_analytics_data_v1alpha_data_proto_rawDescGZIP(), []int{6, 0} } // The operation applied to a numeric filter type NumericFilter_Operation int32 const ( // Unspecified. NumericFilter_OPERATION_UNSPECIFIED NumericFilter_Operation = 0 // Equal NumericFilter_EQUAL NumericFilter_Operation = 1 // Less than NumericFilter_LESS_THAN NumericFilter_Operation = 2 // Less than or equal NumericFilter_LESS_THAN_OR_EQUAL NumericFilter_Operation = 3 // Greater than NumericFilter_GREATER_THAN NumericFilter_Operation = 4 // Greater than or equal NumericFilter_GREATER_THAN_OR_EQUAL NumericFilter_Operation = 5 ) // Enum value maps for NumericFilter_Operation. var ( NumericFilter_Operation_name = map[int32]string{ 0: "OPERATION_UNSPECIFIED", 1: "EQUAL", 2: "LESS_THAN", 3: "LESS_THAN_OR_EQUAL", 4: "GREATER_THAN", 5: "GREATER_THAN_OR_EQUAL", } NumericFilter_Operation_value = map[string]int32{ "OPERATION_UNSPECIFIED": 0, "EQUAL": 1, "LESS_THAN": 2, "LESS_THAN_OR_EQUAL": 3, "GREATER_THAN": 4, "GREATER_THAN_OR_EQUAL": 5, } ) func (x NumericFilter_Operation) Enum() *NumericFilter_Operation { p := new(NumericFilter_Operation) *p = x return p } func (x NumericFilter_Operation) String() string { return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) } func (NumericFilter_Operation) Descriptor() protoreflect.EnumDescriptor { return file_google_analytics_data_v1alpha_data_proto_enumTypes[8].Descriptor() } func (NumericFilter_Operation) Type() protoreflect.EnumType { return &file_google_analytics_data_v1alpha_data_proto_enumTypes[8] } func (x NumericFilter_Operation) Number() protoreflect.EnumNumber { return protoreflect.EnumNumber(x) } // Deprecated: Use NumericFilter_Operation.Descriptor instead. func (NumericFilter_Operation) EnumDescriptor() ([]byte, []int) { return file_google_analytics_data_v1alpha_data_proto_rawDescGZIP(), []int{8, 0} } // A contiguous set of days: startDate, startDate + 1, ..., endDate. Requests // are allowed up to 4 date ranges. type DateRange struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // The inclusive start date for the query in the format `YYYY-MM-DD`. Cannot // be after `end_date`. The format `NdaysAgo`, `yesterday`, or `today` is also // accepted, and in that case, the date is inferred based on the property's // reporting time zone. StartDate string `protobuf:"bytes,1,opt,name=start_date,json=startDate,proto3" json:"start_date,omitempty"` // The inclusive end date for the query in the format `YYYY-MM-DD`. Cannot // be before `start_date`. The format `NdaysAgo`, `yesterday`, or `today` is // also accepted, and in that case, the date is inferred based on the // property's reporting time zone. EndDate string `protobuf:"bytes,2,opt,name=end_date,json=endDate,proto3" json:"end_date,omitempty"` // Assigns a name to this date range. The dimension `dateRange` is valued to // this name in a report response. If set, cannot begin with `date_range_` or // `RESERVED_`. If not set, date ranges are named by their zero based index in // the request: `date_range_0`, `date_range_1`, etc. Name string `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"` } func (x *DateRange) Reset() { *x = DateRange{} if protoimpl.UnsafeEnabled { mi := &file_google_analytics_data_v1alpha_data_proto_msgTypes[0] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *DateRange) String() string { return protoimpl.X.MessageStringOf(x) } func (*DateRange) ProtoMessage() {} func (x *DateRange) ProtoReflect() protoreflect.Message { mi := &file_google_analytics_data_v1alpha_data_proto_msgTypes[0] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use DateRange.ProtoReflect.Descriptor instead. func (*DateRange) Descriptor() ([]byte, []int) { return file_google_analytics_data_v1alpha_data_proto_rawDescGZIP(), []int{0} } func (x *DateRange) GetStartDate() string { if x != nil { return x.StartDate } return "" } func (x *DateRange) GetEndDate() string { if x != nil { return x.EndDate } return "" } func (x *DateRange) GetName() string { if x != nil { return x.Name } return "" } // Dimensions are attributes of your data. For example, the dimension city // indicates the city from which an event originates. Dimension values in report // responses are strings; for example, the city could be "Paris" or "New York". type Dimension struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // The name of the dimension. See the [API // Dimensions](https://developers.google.com/analytics/devguides/reporting/data/v1/api-schema#dimensions) // for the list of dimension names. // // If `dimensionExpression` is specified, `name` can be any string that you // would like within the allowed character set. For example if a // `dimensionExpression` concatenates `country` and `city`, you could call // that dimension `countryAndCity`. Dimension names that you choose must match // the regular expression `^[a-zA-Z0-9_]$`. // // Dimensions are referenced by `name` in `dimensionFilter`, `orderBys`, // `dimensionExpression`, and `pivots`. Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` // One dimension can be the result of an expression of multiple dimensions. // For example, dimension "country, city": concatenate(country, ", ", city). DimensionExpression *DimensionExpression `protobuf:"bytes,2,opt,name=dimension_expression,json=dimensionExpression,proto3" json:"dimension_expression,omitempty"` } func (x *Dimension) Reset() { *x = Dimension{} if protoimpl.UnsafeEnabled { mi := &file_google_analytics_data_v1alpha_data_proto_msgTypes[1] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *Dimension) String() string { return protoimpl.X.MessageStringOf(x) } func (*Dimension) ProtoMessage() {} func (x *Dimension) ProtoReflect() protoreflect.Message { mi := &file_google_analytics_data_v1alpha_data_proto_msgTypes[1] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use Dimension.ProtoReflect.Descriptor instead. func (*Dimension) Descriptor() ([]byte, []int) { return file_google_analytics_data_v1alpha_data_proto_rawDescGZIP(), []int{1} } func (x *Dimension) GetName() string { if x != nil { return x.Name } return "" } func (x *Dimension) GetDimensionExpression() *DimensionExpression { if x != nil { return x.DimensionExpression } return nil } // Used to express a dimension which is the result of a formula of multiple // dimensions. Example usages: // 1) lower_case(dimension) // 2) concatenate(dimension1, symbol, dimension2). type DimensionExpression struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // Specify one type of dimension expression for `DimensionExpression`. // // Types that are assignable to OneExpression: // *DimensionExpression_LowerCase // *DimensionExpression_UpperCase // *DimensionExpression_Concatenate OneExpression isDimensionExpression_OneExpression `protobuf_oneof:"one_expression"` } func (x *DimensionExpression) Reset() { *x = DimensionExpression{} if protoimpl.UnsafeEnabled { mi := &file_google_analytics_data_v1alpha_data_proto_msgTypes[2] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *DimensionExpression) String() string { return protoimpl.X.MessageStringOf(x) } func (*DimensionExpression) ProtoMessage() {} func (x *DimensionExpression) ProtoReflect() protoreflect.Message { mi := &file_google_analytics_data_v1alpha_data_proto_msgTypes[2] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use DimensionExpression.ProtoReflect.Descriptor instead. func (*DimensionExpression) Descriptor() ([]byte, []int) { return file_google_analytics_data_v1alpha_data_proto_rawDescGZIP(), []int{2} } func (m *DimensionExpression) GetOneExpression() isDimensionExpression_OneExpression { if m != nil { return m.OneExpression } return nil } func (x *DimensionExpression) GetLowerCase() *DimensionExpression_CaseExpression { if x, ok := x.GetOneExpression().(*DimensionExpression_LowerCase); ok { return x.LowerCase } return nil } func (x *DimensionExpression) GetUpperCase() *DimensionExpression_CaseExpression { if x, ok := x.GetOneExpression().(*DimensionExpression_UpperCase); ok { return x.UpperCase } return nil } func (x *DimensionExpression) GetConcatenate() *DimensionExpression_ConcatenateExpression { if x, ok := x.GetOneExpression().(*DimensionExpression_Concatenate); ok { return x.Concatenate } return nil } type isDimensionExpression_OneExpression interface { isDimensionExpression_OneExpression() } type DimensionExpression_LowerCase struct { // Used to convert a dimension value to lower case. LowerCase *DimensionExpression_CaseExpression `protobuf:"bytes,4,opt,name=lower_case,json=lowerCase,proto3,oneof"` } type DimensionExpression_UpperCase struct { // Used to convert a dimension value to upper case. UpperCase *DimensionExpression_CaseExpression `protobuf:"bytes,5,opt,name=upper_case,json=upperCase,proto3,oneof"` } type DimensionExpression_Concatenate struct { // Used to combine dimension values to a single dimension. // For example, dimension "country, city": concatenate(country, ", ", city). Concatenate *DimensionExpression_ConcatenateExpression `protobuf:"bytes,6,opt,name=concatenate,proto3,oneof"` } func (*DimensionExpression_LowerCase) isDimensionExpression_OneExpression() {} func (*DimensionExpression_UpperCase) isDimensionExpression_OneExpression() {} func (*DimensionExpression_Concatenate) isDimensionExpression_OneExpression() {} // To express dimension or metric filters. The fields in the same // FilterExpression need to be either all dimensions or all metrics. type FilterExpression struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // Specify one type of filter expression for `FilterExpression`. // // Types that are assignable to Expr: // *FilterExpression_AndGroup // *FilterExpression_OrGroup // *FilterExpression_NotExpression // *FilterExpression_Filter Expr isFilterExpression_Expr `protobuf_oneof:"expr"` } func (x *FilterExpression) Reset() { *x = FilterExpression{} if protoimpl.UnsafeEnabled { mi := &file_google_analytics_data_v1alpha_data_proto_msgTypes[3] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *FilterExpression) String() string { return protoimpl.X.MessageStringOf(x) } func (*FilterExpression) ProtoMessage() {} func (x *FilterExpression) ProtoReflect() protoreflect.Message { mi := &file_google_analytics_data_v1alpha_data_proto_msgTypes[3] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use FilterExpression.ProtoReflect.Descriptor instead. func (*FilterExpression) Descriptor() ([]byte, []int) { return file_google_analytics_data_v1alpha_data_proto_rawDescGZIP(), []int{3} } func (m *FilterExpression) GetExpr() isFilterExpression_Expr { if m != nil { return m.Expr } return nil } func (x *FilterExpression) GetAndGroup() *FilterExpressionList { if x, ok := x.GetExpr().(*FilterExpression_AndGroup); ok { return x.AndGroup } return nil } func (x *FilterExpression) GetOrGroup() *FilterExpressionList { if x, ok := x.GetExpr().(*FilterExpression_OrGroup); ok { return x.OrGroup } return nil } func (x *FilterExpression) GetNotExpression() *FilterExpression { if x, ok := x.GetExpr().(*FilterExpression_NotExpression); ok { return x.NotExpression } return nil } func (x *FilterExpression) GetFilter() *Filter { if x, ok := x.GetExpr().(*FilterExpression_Filter); ok { return x.Filter } return nil } type isFilterExpression_Expr interface { isFilterExpression_Expr() } type FilterExpression_AndGroup struct { // The FilterExpressions in and_group have an AND relationship. AndGroup *FilterExpressionList `protobuf:"bytes,1,opt,name=and_group,json=andGroup,proto3,oneof"` } type FilterExpression_OrGroup struct { // The FilterExpressions in or_group have an OR relationship. OrGroup *FilterExpressionList `protobuf:"bytes,2,opt,name=or_group,json=orGroup,proto3,oneof"` } type FilterExpression_NotExpression struct { // The FilterExpression is NOT of not_expression. NotExpression *FilterExpression `protobuf:"bytes,3,opt,name=not_expression,json=notExpression,proto3,oneof"` } type FilterExpression_Filter struct { // A primitive filter. In the same FilterExpression, all of the filter's // field names need to be either all dimensions or all metrics. Filter *Filter `protobuf:"bytes,4,opt,name=filter,proto3,oneof"` } func (*FilterExpression_AndGroup) isFilterExpression_Expr() {} func (*FilterExpression_OrGroup) isFilterExpression_Expr() {} func (*FilterExpression_NotExpression) isFilterExpression_Expr() {} func (*FilterExpression_Filter) isFilterExpression_Expr() {} // A list of filter expressions. type FilterExpressionList struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // A list of filter expressions. Expressions []*FilterExpression `protobuf:"bytes,1,rep,name=expressions,proto3" json:"expressions,omitempty"` } func (x *FilterExpressionList) Reset() { *x = FilterExpressionList{} if protoimpl.UnsafeEnabled { mi := &file_google_analytics_data_v1alpha_data_proto_msgTypes[4] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *FilterExpressionList) String() string { return protoimpl.X.MessageStringOf(x) } func (*FilterExpressionList) ProtoMessage() {} func (x *FilterExpressionList) ProtoReflect() protoreflect.Message { mi := &file_google_analytics_data_v1alpha_data_proto_msgTypes[4] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use FilterExpressionList.ProtoReflect.Descriptor instead. func (*FilterExpressionList) Descriptor() ([]byte, []int) { return file_google_analytics_data_v1alpha_data_proto_rawDescGZIP(), []int{4} } func (x *FilterExpressionList) GetExpressions() []*FilterExpression { if x != nil { return x.Expressions } return nil } // An expression to filter dimension or metric values. type Filter struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // The dimension name or metric name. Must be a name defined in dimensions // or metrics. FieldName string `protobuf:"bytes,1,opt,name=field_name,json=fieldName,proto3" json:"field_name,omitempty"` // Specify one type of filter for `Filter`. // // Types that are assignable to OneFilter: // *Filter_StringFilter // *Filter_InListFilter // *Filter_NumericFilter // *Filter_BetweenFilter OneFilter isFilter_OneFilter `protobuf_oneof:"one_filter"` } func (x *Filter) Reset() { *x = Filter{} if protoimpl.UnsafeEnabled { mi := &file_google_analytics_data_v1alpha_data_proto_msgTypes[5] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *Filter) String() string { return protoimpl.X.MessageStringOf(x) } func (*Filter) ProtoMessage() {} func (x *Filter) ProtoReflect() protoreflect.Message { mi := &file_google_analytics_data_v1alpha_data_proto_msgTypes[5] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use Filter.ProtoReflect.Descriptor instead. func (*Filter) Descriptor() ([]byte, []int) { return file_google_analytics_data_v1alpha_data_proto_rawDescGZIP(), []int{5} } func (x *Filter) GetFieldName() string { if x != nil { return x.FieldName } return "" } func (m *Filter) GetOneFilter() isFilter_OneFilter { if m != nil { return m.OneFilter } return nil } func (x *Filter) GetStringFilter() *StringFilter { if x, ok := x.GetOneFilter().(*Filter_StringFilter); ok { return x.StringFilter } return nil } func (x *Filter) GetInListFilter() *InListFilter { if x, ok := x.GetOneFilter().(*Filter_InListFilter); ok { return x.InListFilter } return nil } func (x *Filter) GetNumericFilter() *NumericFilter { if x, ok := x.GetOneFilter().(*Filter_NumericFilter); ok { return x.NumericFilter } return nil } func (x *Filter) GetBetweenFilter() *BetweenFilter { if x, ok := x.GetOneFilter().(*Filter_BetweenFilter); ok { return x.BetweenFilter } return nil } type isFilter_OneFilter interface { isFilter_OneFilter() } type Filter_StringFilter struct { // Strings related filter. StringFilter *StringFilter `protobuf:"bytes,2,opt,name=string_filter,json=stringFilter,proto3,oneof"` } type Filter_InListFilter struct { // A filter for in list values. InListFilter *InListFilter `protobuf:"bytes,3,opt,name=in_list_filter,json=inListFilter,proto3,oneof"` } type Filter_NumericFilter struct { // A filter for numeric or date values. NumericFilter *NumericFilter `protobuf:"bytes,4,opt,name=numeric_filter,json=numericFilter,proto3,oneof"` } type Filter_BetweenFilter struct { // A filter for between two values. BetweenFilter *BetweenFilter `protobuf:"bytes,5,opt,name=between_filter,json=betweenFilter,proto3,oneof"` } func (*Filter_StringFilter) isFilter_OneFilter() {} func (*Filter_InListFilter) isFilter_OneFilter() {} func (*Filter_NumericFilter) isFilter_OneFilter() {} func (*Filter_BetweenFilter) isFilter_OneFilter() {} // The filter for string type StringFilter struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // The match type for this filter. MatchType StringFilter_MatchType `protobuf:"varint,1,opt,name=match_type,json=matchType,proto3,enum=google.analytics.data.v1alpha.StringFilter_MatchType" json:"match_type,omitempty"` // The string value used for the matching. Value string `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"` // If true, the string value is case sensitive. CaseSensitive bool `protobuf:"varint,3,opt,name=case_sensitive,json=caseSensitive,proto3" json:"case_sensitive,omitempty"` } func (x *StringFilter) Reset() { *x = StringFilter{} if protoimpl.UnsafeEnabled { mi := &file_google_analytics_data_v1alpha_data_proto_msgTypes[6] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *StringFilter) String() string { return protoimpl.X.MessageStringOf(x) } func (*StringFilter) ProtoMessage() {} func (x *StringFilter) ProtoReflect() protoreflect.Message { mi := &file_google_analytics_data_v1alpha_data_proto_msgTypes[6] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use StringFilter.ProtoReflect.Descriptor instead. func (*StringFilter) Descriptor() ([]byte, []int) { return file_google_analytics_data_v1alpha_data_proto_rawDescGZIP(), []int{6} } func (x *StringFilter) GetMatchType() StringFilter_MatchType { if x != nil { return x.MatchType } return StringFilter_MATCH_TYPE_UNSPECIFIED } func (x *StringFilter) GetValue() string { if x != nil { return x.Value } return "" } func (x *StringFilter) GetCaseSensitive() bool { if x != nil { return x.CaseSensitive } return false } // The result needs to be in a list of string values. type InListFilter struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // The list of string values. // Must be non-empty. Values []string `protobuf:"bytes,1,rep,name=values,proto3" json:"values,omitempty"` // If true, the string value is case sensitive. CaseSensitive bool `protobuf:"varint,2,opt,name=case_sensitive,json=caseSensitive,proto3" json:"case_sensitive,omitempty"` } func (x *InListFilter) Reset() { *x = InListFilter{} if protoimpl.UnsafeEnabled { mi := &file_google_analytics_data_v1alpha_data_proto_msgTypes[7] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *InListFilter) String() string { return protoimpl.X.MessageStringOf(x) } func (*InListFilter) ProtoMessage() {} func (x *InListFilter) ProtoReflect() protoreflect.Message { mi := &file_google_analytics_data_v1alpha_data_proto_msgTypes[7] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use InListFilter.ProtoReflect.Descriptor instead. func (*InListFilter) Descriptor() ([]byte, []int) { return file_google_analytics_data_v1alpha_data_proto_rawDescGZIP(), []int{7} } func (x *InListFilter) GetValues() []string { if x != nil { return x.Values } return nil } func (x *InListFilter) GetCaseSensitive() bool { if x != nil { return x.CaseSensitive } return false } // Filters for numeric or date values. type NumericFilter struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // The operation type for this filter. Operation NumericFilter_Operation `protobuf:"varint,1,opt,name=operation,proto3,enum=google.analytics.data.v1alpha.NumericFilter_Operation" json:"operation,omitempty"` // A numeric value or a date value. Value *NumericValue `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"` } func (x *NumericFilter) Reset() { *x = NumericFilter{} if protoimpl.UnsafeEnabled { mi := &file_google_analytics_data_v1alpha_data_proto_msgTypes[8] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *NumericFilter) String() string { return protoimpl.X.MessageStringOf(x) } func (*NumericFilter) ProtoMessage() {} func (x *NumericFilter) ProtoReflect() protoreflect.Message { mi := &file_google_analytics_data_v1alpha_data_proto_msgTypes[8] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use NumericFilter.ProtoReflect.Descriptor instead. func (*NumericFilter) Descriptor() ([]byte, []int) { return file_google_analytics_data_v1alpha_data_proto_rawDescGZIP(), []int{8} } func (x *NumericFilter) GetOperation() NumericFilter_Operation { if x != nil { return x.Operation } return NumericFilter_OPERATION_UNSPECIFIED } func (x *NumericFilter) GetValue() *NumericValue { if x != nil { return x.Value } return nil } // To express that the result needs to be between two numbers (inclusive). type BetweenFilter struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // Begins with this number. FromValue *NumericValue `protobuf:"bytes,1,opt,name=from_value,json=fromValue,proto3" json:"from_value,omitempty"` // Ends with this number. ToValue *NumericValue `protobuf:"bytes,2,opt,name=to_value,json=toValue,proto3" json:"to_value,omitempty"` } func (x *BetweenFilter) Reset() { *x = BetweenFilter{} if protoimpl.UnsafeEnabled { mi := &file_google_analytics_data_v1alpha_data_proto_msgTypes[9] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *BetweenFilter) String() string { return protoimpl.X.MessageStringOf(x) } func (*BetweenFilter) ProtoMessage() {} func (x *BetweenFilter) ProtoReflect() protoreflect.Message { mi := &file_google_analytics_data_v1alpha_data_proto_msgTypes[9] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use BetweenFilter.ProtoReflect.Descriptor instead. func (*BetweenFilter) Descriptor() ([]byte, []int) { return file_google_analytics_data_v1alpha_data_proto_rawDescGZIP(), []int{9} } func (x *BetweenFilter) GetFromValue() *NumericValue { if x != nil { return x.FromValue } return nil } func (x *BetweenFilter) GetToValue() *NumericValue { if x != nil { return x.ToValue } return nil } // To represent a number. type NumericValue struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // One of a numeric value // // Types that are assignable to OneValue: // *NumericValue_Int64Value // *NumericValue_DoubleValue OneValue isNumericValue_OneValue `protobuf_oneof:"one_value"` } func (x *NumericValue) Reset() { *x = NumericValue{} if protoimpl.UnsafeEnabled { mi := &file_google_analytics_data_v1alpha_data_proto_msgTypes[10] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *NumericValue) String() string { return protoimpl.X.MessageStringOf(x) } func (*NumericValue) ProtoMessage() {} func (x *NumericValue) ProtoReflect() protoreflect.Message { mi := &file_google_analytics_data_v1alpha_data_proto_msgTypes[10] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use NumericValue.ProtoReflect.Descriptor instead. func (*NumericValue) Descriptor() ([]byte, []int) { return file_google_analytics_data_v1alpha_data_proto_rawDescGZIP(), []int{10} } func (m *NumericValue) GetOneValue() isNumericValue_OneValue { if m != nil { return m.OneValue } return nil } func (x *NumericValue) GetInt64Value() int64 { if x, ok := x.GetOneValue().(*NumericValue_Int64Value); ok { return x.Int64Value } return 0 } func (x *NumericValue) GetDoubleValue() float64 { if x, ok := x.GetOneValue().(*NumericValue_DoubleValue); ok { return x.DoubleValue } return 0 } type isNumericValue_OneValue interface { isNumericValue_OneValue() } type NumericValue_Int64Value struct { // Integer value Int64Value int64 `protobuf:"varint,1,opt,name=int64_value,json=int64Value,proto3,oneof"` } type NumericValue_DoubleValue struct { // Double value DoubleValue float64 `protobuf:"fixed64,2,opt,name=double_value,json=doubleValue,proto3,oneof"` } func (*NumericValue_Int64Value) isNumericValue_OneValue() {} func (*NumericValue_DoubleValue) isNumericValue_OneValue() {} // Describes a dimension column in the report. Dimensions requested in a report // produce column entries within rows and DimensionHeaders. However, dimensions // used exclusively within filters or expressions do not produce columns in a // report; correspondingly, those dimensions do not produce headers. type DimensionHeader struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // The dimension's name. Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` } func (x *DimensionHeader) Reset() { *x = DimensionHeader{} if protoimpl.UnsafeEnabled { mi := &file_google_analytics_data_v1alpha_data_proto_msgTypes[11] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *DimensionHeader) String() string { return protoimpl.X.MessageStringOf(x) } func (*DimensionHeader) ProtoMessage() {} func (x *DimensionHeader) ProtoReflect() protoreflect.Message { mi := &file_google_analytics_data_v1alpha_data_proto_msgTypes[11] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use DimensionHeader.ProtoReflect.Descriptor instead. func (*DimensionHeader) Descriptor() ([]byte, []int) { return file_google_analytics_data_v1alpha_data_proto_rawDescGZIP(), []int{11} } func (x *DimensionHeader) GetName() string { if x != nil { return x.Name } return "" } // Describes a metric column in the report. Visible metrics requested in a // report produce column entries within rows and MetricHeaders. However, // metrics used exclusively within filters or expressions do not produce columns // in a report; correspondingly, those metrics do not produce headers. type MetricHeader struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // The metric's name. Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` // The metric's data type. Type MetricType `protobuf:"varint,2,opt,name=type,proto3,enum=google.analytics.data.v1alpha.MetricType" json:"type,omitempty"` } func (x *MetricHeader) Reset() { *x = MetricHeader{} if protoimpl.UnsafeEnabled { mi := &file_google_analytics_data_v1alpha_data_proto_msgTypes[12] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *MetricHeader) String() string { return protoimpl.X.MessageStringOf(x) } func (*MetricHeader) ProtoMessage() {} func (x *MetricHeader) ProtoReflect() protoreflect.Message { mi := &file_google_analytics_data_v1alpha_data_proto_msgTypes[12] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use MetricHeader.ProtoReflect.Descriptor instead. func (*MetricHeader) Descriptor() ([]byte, []int) { return file_google_analytics_data_v1alpha_data_proto_rawDescGZIP(), []int{12} } func (x *MetricHeader) GetName() string { if x != nil { return x.Name } return "" } func (x *MetricHeader) GetType() MetricType { if x != nil { return x.Type } return MetricType_METRIC_TYPE_UNSPECIFIED } // Report data for each row. // For example if RunReportRequest contains: // // ```none // "dimensions": [ // // { // "name": "eventName" // }, // { // "name": "countryId" // } // // ], // "metrics": [ // // { // "name": "eventCount" // } // // ] // ``` // // One row with 'in_app_purchase' as the eventName, 'JP' as the countryId, and // 15 as the eventCount, would be: // // ```none // "dimensionValues": [ // // { // "value": "in_app_purchase" // }, // { // "value": "JP" // } // // ], // "metricValues": [ // // { // "value": "15" // } // // ] // ``` type Row struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // List of requested dimension values. In a PivotReport, dimension_values // are only listed for dimensions included in a pivot. DimensionValues []*DimensionValue `protobuf:"bytes,1,rep,name=dimension_values,json=dimensionValues,proto3" json:"dimension_values,omitempty"` // List of requested visible metric values. MetricValues []*MetricValue `protobuf:"bytes,2,rep,name=metric_values,json=metricValues,proto3" json:"metric_values,omitempty"` } func (x *Row) Reset() { *x = Row{} if protoimpl.UnsafeEnabled { mi := &file_google_analytics_data_v1alpha_data_proto_msgTypes[13] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *Row) String() string { return protoimpl.X.MessageStringOf(x) } func (*Row) ProtoMessage() {} func (x *Row) ProtoReflect() protoreflect.Message { mi := &file_google_analytics_data_v1alpha_data_proto_msgTypes[13] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use Row.ProtoReflect.Descriptor instead. func (*Row) Descriptor() ([]byte, []int) { return file_google_analytics_data_v1alpha_data_proto_rawDescGZIP(), []int{13} } func (x *Row) GetDimensionValues() []*DimensionValue { if x != nil { return x.DimensionValues } return nil } func (x *Row) GetMetricValues() []*MetricValue { if x != nil { return x.MetricValues } return nil } // The value of a dimension. type DimensionValue struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // One kind of dimension value // // Types that are assignable to OneValue: // *DimensionValue_Value OneValue isDimensionValue_OneValue `protobuf_oneof:"one_value"` } func (x *DimensionValue) Reset() { *x = DimensionValue{} if protoimpl.UnsafeEnabled { mi := &file_google_analytics_data_v1alpha_data_proto_msgTypes[14] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *DimensionValue) String() string { return protoimpl.X.MessageStringOf(x) } func (*DimensionValue) ProtoMessage() {} func (x *DimensionValue) ProtoReflect() protoreflect.Message { mi := &file_google_analytics_data_v1alpha_data_proto_msgTypes[14] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use DimensionValue.ProtoReflect.Descriptor instead. func (*DimensionValue) Descriptor() ([]byte, []int) { return file_google_analytics_data_v1alpha_data_proto_rawDescGZIP(), []int{14} } func (m *DimensionValue) GetOneValue() isDimensionValue_OneValue { if m != nil { return m.OneValue } return nil } func (x *DimensionValue) GetValue() string { if x, ok := x.GetOneValue().(*DimensionValue_Value); ok { return x.Value } return "" } type isDimensionValue_OneValue interface { isDimensionValue_OneValue() } type DimensionValue_Value struct { // Value as a string if the dimension type is a string. Value string `protobuf:"bytes,1,opt,name=value,proto3,oneof"` } func (*DimensionValue_Value) isDimensionValue_OneValue() {} // The value of a metric. type MetricValue struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // One of metric value // // Types that are assignable to OneValue: // *MetricValue_Value OneValue isMetricValue_OneValue `protobuf_oneof:"one_value"` } func (x *MetricValue) Reset() { *x = MetricValue{} if protoimpl.UnsafeEnabled { mi := &file_google_analytics_data_v1alpha_data_proto_msgTypes[15] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *MetricValue) String() string { return protoimpl.X.MessageStringOf(x) } func (*MetricValue) ProtoMessage() {} func (x *MetricValue) ProtoReflect() protoreflect.Message { mi := &file_google_analytics_data_v1alpha_data_proto_msgTypes[15] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use MetricValue.ProtoReflect.Descriptor instead. func (*MetricValue) Descriptor() ([]byte, []int) { return file_google_analytics_data_v1alpha_data_proto_rawDescGZIP(), []int{15} } func (m *MetricValue) GetOneValue() isMetricValue_OneValue { if m != nil { return m.OneValue } return nil } func (x *MetricValue) GetValue() string { if x, ok := x.GetOneValue().(*MetricValue_Value); ok { return x.Value } return "" } type isMetricValue_OneValue interface { isMetricValue_OneValue() } type MetricValue_Value struct { // Measurement value. See MetricHeader for type. Value string `protobuf:"bytes,4,opt,name=value,proto3,oneof"` } func (*MetricValue_Value) isMetricValue_OneValue() {} // Current state of all quotas for this Analytics Property. If any quota for a // property is exhausted, all requests to that property will return Resource // Exhausted errors. type PropertyQuota struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // Standard Analytics Properties can use up to 25,000 tokens per day; // Analytics 360 Properties can use 250,000 tokens per day. Most requests // consume fewer than 10 tokens. TokensPerDay *QuotaStatus `protobuf:"bytes,1,opt,name=tokens_per_day,json=tokensPerDay,proto3" json:"tokens_per_day,omitempty"` // Standard Analytics Properties can use up to 5,000 tokens per hour; // Analytics 360 Properties can use 50,000 tokens per hour. An API request // consumes a single number of tokens, and that number is deducted from both // the hourly and daily quotas. TokensPerHour *QuotaStatus `protobuf:"bytes,2,opt,name=tokens_per_hour,json=tokensPerHour,proto3" json:"tokens_per_hour,omitempty"` // Standard Analytics Properties can send up to 10 concurrent requests; // Analytics 360 Properties can use up to 50 concurrent requests. ConcurrentRequests *QuotaStatus `protobuf:"bytes,3,opt,name=concurrent_requests,json=concurrentRequests,proto3" json:"concurrent_requests,omitempty"` // Standard Analytics Properties and cloud project pairs can have up to 10 // server errors per hour; Analytics 360 Properties and cloud project pairs // can have up to 50 server errors per hour. ServerErrorsPerProjectPerHour *QuotaStatus `protobuf:"bytes,4,opt,name=server_errors_per_project_per_hour,json=serverErrorsPerProjectPerHour,proto3" json:"server_errors_per_project_per_hour,omitempty"` // Analytics Properties can send up to 120 requests with potentially // thresholded dimensions per hour. In a batch request, each report request // is individually counted for this quota if the request contains potentially // thresholded dimensions. PotentiallyThresholdedRequestsPerHour *QuotaStatus `protobuf:"bytes,5,opt,name=potentially_thresholded_requests_per_hour,json=potentiallyThresholdedRequestsPerHour,proto3" json:"potentially_thresholded_requests_per_hour,omitempty"` } func (x *PropertyQuota) Reset() { *x = PropertyQuota{} if protoimpl.UnsafeEnabled { mi := &file_google_analytics_data_v1alpha_data_proto_msgTypes[16] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *PropertyQuota) String() string { return protoimpl.X.MessageStringOf(x) } func (*PropertyQuota) ProtoMessage() {} func (x *PropertyQuota) ProtoReflect() protoreflect.Message { mi := &file_google_analytics_data_v1alpha_data_proto_msgTypes[16] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use PropertyQuota.ProtoReflect.Descriptor instead. func (*PropertyQuota) Descriptor() ([]byte, []int) { return file_google_analytics_data_v1alpha_data_proto_rawDescGZIP(), []int{16} } func (x *PropertyQuota) GetTokensPerDay() *QuotaStatus { if x != nil { return x.TokensPerDay } return nil } func (x *PropertyQuota) GetTokensPerHour() *QuotaStatus { if x != nil { return x.TokensPerHour } return nil } func (x *PropertyQuota) GetConcurrentRequests() *QuotaStatus { if x != nil { return x.ConcurrentRequests } return nil } func (x *PropertyQuota) GetServerErrorsPerProjectPerHour() *QuotaStatus { if x != nil { return x.ServerErrorsPerProjectPerHour } return nil } func (x *PropertyQuota) GetPotentiallyThresholdedRequestsPerHour() *QuotaStatus { if x != nil { return x.PotentiallyThresholdedRequestsPerHour } return nil } // Current state for a particular quota group. type QuotaStatus struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // Quota consumed by this request. Consumed int32 `protobuf:"varint,1,opt,name=consumed,proto3" json:"consumed,omitempty"` // Quota remaining after this request. Remaining int32 `protobuf:"varint,2,opt,name=remaining,proto3" json:"remaining,omitempty"` } func (x *QuotaStatus) Reset() { *x = QuotaStatus{} if protoimpl.UnsafeEnabled { mi := &file_google_analytics_data_v1alpha_data_proto_msgTypes[17] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *QuotaStatus) String() string { return protoimpl.X.MessageStringOf(x) } func (*QuotaStatus) ProtoMessage() {} func (x *QuotaStatus) ProtoReflect() protoreflect.Message { mi := &file_google_analytics_data_v1alpha_data_proto_msgTypes[17] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use QuotaStatus.ProtoReflect.Descriptor instead. func (*QuotaStatus) Descriptor() ([]byte, []int) { return file_google_analytics_data_v1alpha_data_proto_rawDescGZIP(), []int{17} } func (x *QuotaStatus) GetConsumed() int32 { if x != nil { return x.Consumed } return 0 } func (x *QuotaStatus) GetRemaining() int32 { if x != nil { return x.Remaining } return 0 } // Breakdowns add a dimension to the funnel table sub report response. type FunnelBreakdown struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // The dimension column added to the funnel table sub report response. The // breakdown dimension breaks down each funnel step. A valid // `breakdownDimension` is required if `funnelBreakdown` is specified. BreakdownDimension *Dimension `protobuf:"bytes,1,opt,name=breakdown_dimension,json=breakdownDimension,proto3" json:"breakdown_dimension,omitempty"` // The maximum number of distinct values of the breakdown dimension to return // in the response. A `limit` of `5` is used if limit is not specified. Limit // must exceed zero and cannot exceed 15. Limit *int64 `protobuf:"varint,2,opt,name=limit,proto3,oneof" json:"limit,omitempty"` } func (x *FunnelBreakdown) Reset() { *x = FunnelBreakdown{} if protoimpl.UnsafeEnabled { mi := &file_google_analytics_data_v1alpha_data_proto_msgTypes[18] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *FunnelBreakdown) String() string { return protoimpl.X.MessageStringOf(x) } func (*FunnelBreakdown) ProtoMessage() {} func (x *FunnelBreakdown) ProtoReflect() protoreflect.Message { mi := &file_google_analytics_data_v1alpha_data_proto_msgTypes[18] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use FunnelBreakdown.ProtoReflect.Descriptor instead. func (*FunnelBreakdown) Descriptor() ([]byte, []int) { return file_google_analytics_data_v1alpha_data_proto_rawDescGZIP(), []int{18} } func (x *FunnelBreakdown) GetBreakdownDimension() *Dimension { if x != nil { return x.BreakdownDimension } return nil } func (x *FunnelBreakdown) GetLimit() int64 { if x != nil && x.Limit != nil { return *x.Limit } return 0 } // Next actions state the value for a dimension after the user has achieved // a step but before the same user has achieved the next step. For example if // the `nextActionDimension` is `eventName`, then `nextActionDimension` in the // `i`th funnel step row will return first event after the event that qualified // the user into the `i`th funnel step but before the user achieved the `i+1`th // funnel step. type FunnelNextAction struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // The dimension column added to the funnel visualization sub report response. // The next action dimension returns the next dimension value of this // dimension after the user has attained the `i`th funnel step. // // `nextActionDimension` currently only supports `eventName` and most Page / // Screen dimensions like `pageTitle` and `pagePath`. `nextActionDimension` // cannot be a dimension expression. NextActionDimension *Dimension `protobuf:"bytes,1,opt,name=next_action_dimension,json=nextActionDimension,proto3" json:"next_action_dimension,omitempty"` // The maximum number of distinct values of the breakdown dimension to return // in the response. A `limit` of `5` is used if limit is not specified. Limit // must exceed zero and cannot exceed 5. Limit *int64 `protobuf:"varint,2,opt,name=limit,proto3,oneof" json:"limit,omitempty"` } func (x *FunnelNextAction) Reset() { *x = FunnelNextAction{} if protoimpl.UnsafeEnabled { mi := &file_google_analytics_data_v1alpha_data_proto_msgTypes[19] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *FunnelNextAction) String() string { return protoimpl.X.MessageStringOf(x) } func (*FunnelNextAction) ProtoMessage() {} func (x *FunnelNextAction) ProtoReflect() protoreflect.Message { mi := &file_google_analytics_data_v1alpha_data_proto_msgTypes[19] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use FunnelNextAction.ProtoReflect.Descriptor instead. func (*FunnelNextAction) Descriptor() ([]byte, []int) { return file_google_analytics_data_v1alpha_data_proto_rawDescGZIP(), []int{19} } func (x *FunnelNextAction) GetNextActionDimension() *Dimension { if x != nil { return x.NextActionDimension } return nil } func (x *FunnelNextAction) GetLimit() int64 { if x != nil && x.Limit != nil { return *x.Limit } return 0 } // Configures the funnel in a funnel report request. A funnel reports on users // as they pass through a sequence of steps. // // Funnel exploration lets you visualize the steps your users take to complete a // task and quickly see how well they are succeeding or failing at each step. // For example, how do prospects become shoppers and then become buyers? How do // one time buyers become repeat buyers? With this information, you can improve // inefficient or abandoned customer journeys. type Funnel struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // In an open funnel, users can enter the funnel in any step, and in a closed // funnel, users must enter the funnel in the first step. Optional. If // unspecified, a closed funnel is used. IsOpenFunnel bool `protobuf:"varint,1,opt,name=is_open_funnel,json=isOpenFunnel,proto3" json:"is_open_funnel,omitempty"` // The sequential steps of this funnel. Steps []*FunnelStep `protobuf:"bytes,2,rep,name=steps,proto3" json:"steps,omitempty"` } func (x *Funnel) Reset() { *x = Funnel{} if protoimpl.UnsafeEnabled { mi := &file_google_analytics_data_v1alpha_data_proto_msgTypes[20] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *Funnel) String() string { return protoimpl.X.MessageStringOf(x) } func (*Funnel) ProtoMessage() {} func (x *Funnel) ProtoReflect() protoreflect.Message { mi := &file_google_analytics_data_v1alpha_data_proto_msgTypes[20] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use Funnel.ProtoReflect.Descriptor instead. func (*Funnel) Descriptor() ([]byte, []int) { return file_google_analytics_data_v1alpha_data_proto_rawDescGZIP(), []int{20} } func (x *Funnel) GetIsOpenFunnel() bool { if x != nil { return x.IsOpenFunnel } return false } func (x *Funnel) GetSteps() []*FunnelStep { if x != nil { return x.Steps } return nil } // Steps define the user journey you want to measure. Steps contain one or // more conditions that your users must meet to be included in that step of // the funnel journey. type FunnelStep struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // The distinctive name for this step. If unspecified, steps will be named // by a 1 based indexed name (i.e. "0. ", "1. ", etc.). This name defines // string value returned by the `funnelStepName` dimension. For example, // specifying `name = Purchase` in the request's third funnel step will // produce `3. Purchase` in the funnel report response. Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` // If true, this step must directly follow the previous step. If false, // there can be events between the previous step and this step. If // unspecified, `isDirectlyFollowedBy` is treated as false. IsDirectlyFollowedBy bool `protobuf:"varint,2,opt,name=is_directly_followed_by,json=isDirectlyFollowedBy,proto3" json:"is_directly_followed_by,omitempty"` // If specified, this step must complete within this duration of the // completion of the prior step. `withinDurationFromPriorStep` is inclusive // of the endpoint at the microsecond granularity. For example a duration of // 5 seconds can be completed at 4.9 or 5.0 seconds, but not 5 seconds and 1 // microsecond. // // `withinDurationFromPriorStep` is optional, and if unspecified, steps may // be separated by any time duration. WithinDurationFromPriorStep *durationpb.Duration `protobuf:"bytes,3,opt,name=within_duration_from_prior_step,json=withinDurationFromPriorStep,proto3,oneof" json:"within_duration_from_prior_step,omitempty"` // The condition that your users must meet to be included in this step of // the funnel journey. FilterExpression *FunnelFilterExpression `protobuf:"bytes,4,opt,name=filter_expression,json=filterExpression,proto3" json:"filter_expression,omitempty"` } func (x *FunnelStep) Reset() { *x = FunnelStep{} if protoimpl.UnsafeEnabled { mi := &file_google_analytics_data_v1alpha_data_proto_msgTypes[21] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *FunnelStep) String() string { return protoimpl.X.MessageStringOf(x) } func (*FunnelStep) ProtoMessage() {} func (x *FunnelStep) ProtoReflect() protoreflect.Message { mi := &file_google_analytics_data_v1alpha_data_proto_msgTypes[21] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use FunnelStep.ProtoReflect.Descriptor instead. func (*FunnelStep) Descriptor() ([]byte, []int) { return file_google_analytics_data_v1alpha_data_proto_rawDescGZIP(), []int{21} } func (x *FunnelStep) GetName() string { if x != nil { return x.Name } return "" } func (x *FunnelStep) GetIsDirectlyFollowedBy() bool { if x != nil { return x.IsDirectlyFollowedBy } return false } func (x *FunnelStep) GetWithinDurationFromPriorStep() *durationpb.Duration { if x != nil { return x.WithinDurationFromPriorStep } return nil } func (x *FunnelStep) GetFilterExpression() *FunnelFilterExpression { if x != nil { return x.FilterExpression } return nil } // Funnel sub reports contain the dimension and metric data values. For example, // 12 users reached the second step of the funnel. type FunnelSubReport struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // Describes dimension columns. Funnel reports always include the funnel step // dimension in sub report responses. Additional dimensions like breakdowns, // dates, and next actions may be present in the response if requested. DimensionHeaders []*DimensionHeader `protobuf:"bytes,1,rep,name=dimension_headers,json=dimensionHeaders,proto3" json:"dimension_headers,omitempty"` // Describes metric columns. Funnel reports always include active users in sub // report responses. The funnel table includes additional metrics like // completion rate, abandonments, and abandonments rate. MetricHeaders []*MetricHeader `protobuf:"bytes,2,rep,name=metric_headers,json=metricHeaders,proto3" json:"metric_headers,omitempty"` // Rows of dimension value combinations and metric values in the report. Rows []*Row `protobuf:"bytes,3,rep,name=rows,proto3" json:"rows,omitempty"` // Metadata for the funnel report. Metadata *FunnelResponseMetadata `protobuf:"bytes,4,opt,name=metadata,proto3" json:"metadata,omitempty"` } func (x *FunnelSubReport) Reset() { *x = FunnelSubReport{} if protoimpl.UnsafeEnabled { mi := &file_google_analytics_data_v1alpha_data_proto_msgTypes[22] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *FunnelSubReport) String() string { return protoimpl.X.MessageStringOf(x) } func (*FunnelSubReport) ProtoMessage() {} func (x *FunnelSubReport) ProtoReflect() protoreflect.Message { mi := &file_google_analytics_data_v1alpha_data_proto_msgTypes[22] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use FunnelSubReport.ProtoReflect.Descriptor instead. func (*FunnelSubReport) Descriptor() ([]byte, []int) { return file_google_analytics_data_v1alpha_data_proto_rawDescGZIP(), []int{22} } func (x *FunnelSubReport) GetDimensionHeaders() []*DimensionHeader { if x != nil { return x.DimensionHeaders } return nil } func (x *FunnelSubReport) GetMetricHeaders() []*MetricHeader { if x != nil { return x.MetricHeaders } return nil } func (x *FunnelSubReport) GetRows() []*Row { if x != nil { return x.Rows } return nil } func (x *FunnelSubReport) GetMetadata() *FunnelResponseMetadata { if x != nil { return x.Metadata } return nil } // User segments are subsets of users who engaged with your site or app. For // example, users who have previously purchased; users who added items to their // shopping carts, but didn’t complete a purchase. type UserSegment struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // Defines which users are included in this segment. Optional. UserInclusionCriteria *UserSegmentCriteria `protobuf:"bytes,1,opt,name=user_inclusion_criteria,json=userInclusionCriteria,proto3" json:"user_inclusion_criteria,omitempty"` // Defines which users are excluded in this segment. Optional. Exclusion *UserSegmentExclusion `protobuf:"bytes,2,opt,name=exclusion,proto3" json:"exclusion,omitempty"` } func (x *UserSegment) Reset() { *x = UserSegment{} if protoimpl.UnsafeEnabled { mi := &file_google_analytics_data_v1alpha_data_proto_msgTypes[23] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *UserSegment) String() string { return protoimpl.X.MessageStringOf(x) } func (*UserSegment) ProtoMessage() {} func (x *UserSegment) ProtoReflect() protoreflect.Message { mi := &file_google_analytics_data_v1alpha_data_proto_msgTypes[23] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use UserSegment.ProtoReflect.Descriptor instead. func (*UserSegment) Descriptor() ([]byte, []int) { return file_google_analytics_data_v1alpha_data_proto_rawDescGZIP(), []int{23} } func (x *UserSegment) GetUserInclusionCriteria() *UserSegmentCriteria { if x != nil { return x.UserInclusionCriteria } return nil } func (x *UserSegment) GetExclusion() *UserSegmentExclusion { if x != nil { return x.Exclusion } return nil } // A user matches a criteria if the user's events meet the conditions in the // criteria. type UserSegmentCriteria struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // A user matches this criteria if the user matches each of these // `andConditionGroups` and each of the `andSequenceGroups`. // `andConditionGroups` may be empty if `andSequenceGroups` are specified. AndConditionGroups []*UserSegmentConditionGroup `protobuf:"bytes,1,rep,name=and_condition_groups,json=andConditionGroups,proto3" json:"and_condition_groups,omitempty"` // A user matches this criteria if the user matches each of these // `andSequenceGroups` and each of the `andConditionGroups`. // `andSequenceGroups` may be empty if `andConditionGroups` are specified. AndSequenceGroups []*UserSegmentSequenceGroup `protobuf:"bytes,2,rep,name=and_sequence_groups,json=andSequenceGroups,proto3" json:"and_sequence_groups,omitempty"` } func (x *UserSegmentCriteria) Reset() { *x = UserSegmentCriteria{} if protoimpl.UnsafeEnabled { mi := &file_google_analytics_data_v1alpha_data_proto_msgTypes[24] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *UserSegmentCriteria) String() string { return protoimpl.X.MessageStringOf(x) } func (*UserSegmentCriteria) ProtoMessage() {} func (x *UserSegmentCriteria) ProtoReflect() protoreflect.Message { mi := &file_google_analytics_data_v1alpha_data_proto_msgTypes[24] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use UserSegmentCriteria.ProtoReflect.Descriptor instead. func (*UserSegmentCriteria) Descriptor() ([]byte, []int) { return file_google_analytics_data_v1alpha_data_proto_rawDescGZIP(), []int{24} } func (x *UserSegmentCriteria) GetAndConditionGroups() []*UserSegmentConditionGroup { if x != nil { return x.AndConditionGroups } return nil } func (x *UserSegmentCriteria) GetAndSequenceGroups() []*UserSegmentSequenceGroup { if x != nil { return x.AndSequenceGroups } return nil } // Conditions tell Analytics what data to include in or exclude from the // segment. type UserSegmentConditionGroup struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // Data is included or excluded from the segment based on if it matches // the condition group. This scoping defines how many events the // `segmentFilterExpression` is evaluated on before the condition group // is determined to be matched or not. For example if `conditionScoping = // USER_CRITERIA_WITHIN_SAME_SESSION`, the expression is evaluated on all // events in a session, and then, the condition group is determined to be // matched or not for this user. For example if `conditionScoping = // USER_CRITERIA_WITHIN_SAME_EVENT`, the expression is evaluated on a single // event, and then, the condition group is determined to be matched or not for // this user. // // Optional. If unspecified, `conditionScoping = ACROSS_ALL_SESSIONS` is // used. ConditionScoping UserCriteriaScoping `protobuf:"varint,1,opt,name=condition_scoping,json=conditionScoping,proto3,enum=google.analytics.data.v1alpha.UserCriteriaScoping" json:"condition_scoping,omitempty"` // Data is included or excluded from the segment based on if it matches // this expression. Expressions express criteria on dimension, metrics, // and/or parameters. SegmentFilterExpression *SegmentFilterExpression `protobuf:"bytes,2,opt,name=segment_filter_expression,json=segmentFilterExpression,proto3" json:"segment_filter_expression,omitempty"` } func (x *UserSegmentConditionGroup) Reset() { *x = UserSegmentConditionGroup{} if protoimpl.UnsafeEnabled { mi := &file_google_analytics_data_v1alpha_data_proto_msgTypes[25] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *UserSegmentConditionGroup) String() string { return protoimpl.X.MessageStringOf(x) } func (*UserSegmentConditionGroup) ProtoMessage() {} func (x *UserSegmentConditionGroup) ProtoReflect() protoreflect.Message { mi := &file_google_analytics_data_v1alpha_data_proto_msgTypes[25] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use UserSegmentConditionGroup.ProtoReflect.Descriptor instead. func (*UserSegmentConditionGroup) Descriptor() ([]byte, []int) { return file_google_analytics_data_v1alpha_data_proto_rawDescGZIP(), []int{25} } func (x *UserSegmentConditionGroup) GetConditionScoping() UserCriteriaScoping { if x != nil { return x.ConditionScoping } return UserCriteriaScoping_USER_CRITERIA_SCOPING_UNSPECIFIED } func (x *UserSegmentConditionGroup) GetSegmentFilterExpression() *SegmentFilterExpression { if x != nil { return x.SegmentFilterExpression } return nil } // Define conditions that must occur in a specific order for the user to be // a member of the segment. type UserSegmentSequenceGroup struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // All sequence steps must be satisfied in the scoping for the user to // match the sequence. For example if `sequenceScoping = // USER_CRITERIA_WITHIN_SAME_SESSION`, all sequence steps must complete within // one session for the user to match the sequence. `sequenceScoping = // USER_CRITERIA_WITHIN_SAME_EVENT` is not supported. // // Optional. If unspecified, `conditionScoping = ACROSS_ALL_SESSIONS` is // used. SequenceScoping UserCriteriaScoping `protobuf:"varint,1,opt,name=sequence_scoping,json=sequenceScoping,proto3,enum=google.analytics.data.v1alpha.UserCriteriaScoping" json:"sequence_scoping,omitempty"` // Defines the time period in which the whole sequence must occur; for // example, 30 Minutes. `sequenceMaximumDuration` is inclusive // of the endpoint at the microsecond granularity. For example a sequence // with a maximum duration of 5 seconds can be completed at 4.9 or 5.0 // seconds, but not 5 seconds and 1 microsecond. // // `sequenceMaximumDuration` is optional, and if unspecified, sequences can // be completed in any time duration. SequenceMaximumDuration *durationpb.Duration `protobuf:"bytes,2,opt,name=sequence_maximum_duration,json=sequenceMaximumDuration,proto3" json:"sequence_maximum_duration,omitempty"` // An ordered sequence of condition steps. A user's events must complete // each step in order for the user to match the // `UserSegmentSequenceGroup`. UserSequenceSteps []*UserSequenceStep `protobuf:"bytes,3,rep,name=user_sequence_steps,json=userSequenceSteps,proto3" json:"user_sequence_steps,omitempty"` } func (x *UserSegmentSequenceGroup) Reset() { *x = UserSegmentSequenceGroup{} if protoimpl.UnsafeEnabled { mi := &file_google_analytics_data_v1alpha_data_proto_msgTypes[26] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *UserSegmentSequenceGroup) String() string { return protoimpl.X.MessageStringOf(x) } func (*UserSegmentSequenceGroup) ProtoMessage() {} func (x *UserSegmentSequenceGroup) ProtoReflect() protoreflect.Message { mi := &file_google_analytics_data_v1alpha_data_proto_msgTypes[26] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use UserSegmentSequenceGroup.ProtoReflect.Descriptor instead. func (*UserSegmentSequenceGroup) Descriptor() ([]byte, []int) { return file_google_analytics_data_v1alpha_data_proto_rawDescGZIP(), []int{26} } func (x *UserSegmentSequenceGroup) GetSequenceScoping() UserCriteriaScoping { if x != nil { return x.SequenceScoping } return UserCriteriaScoping_USER_CRITERIA_SCOPING_UNSPECIFIED } func (x *UserSegmentSequenceGroup) GetSequenceMaximumDuration() *durationpb.Duration { if x != nil { return x.SequenceMaximumDuration } return nil } func (x *UserSegmentSequenceGroup) GetUserSequenceSteps() []*UserSequenceStep { if x != nil { return x.UserSequenceSteps } return nil } // A condition that must occur in the specified step order for this user // to match the sequence. type UserSequenceStep struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // If true, the event satisfying this step must be the very next event // after the event satifying the last step. If false, this step indirectly // follows the prior step; for example, there may be events between the // prior step and this step. `isDirectlyFollowedBy` must be false for // the first step. IsDirectlyFollowedBy bool `protobuf:"varint,1,opt,name=is_directly_followed_by,json=isDirectlyFollowedBy,proto3" json:"is_directly_followed_by,omitempty"` // This sequence step must be satisfied in the scoping for the user to // match the sequence. For example if `sequenceScoping = // WITHIN_SAME_SESSION`, this sequence steps must complete within one // session for the user to match the sequence. `stepScoping = // ACROSS_ALL_SESSIONS` is only allowed if the `sequenceScoping = // ACROSS_ALL_SESSIONS`. // // Optional. If unspecified, `stepScoping` uses the same // `UserCriteriaScoping` as the `sequenceScoping`. StepScoping UserCriteriaScoping `protobuf:"varint,2,opt,name=step_scoping,json=stepScoping,proto3,enum=google.analytics.data.v1alpha.UserCriteriaScoping" json:"step_scoping,omitempty"` // A user matches this sequence step if their events match this // expression. Expressions express criteria on dimension, metrics, // and/or parameters. SegmentFilterExpression *SegmentFilterExpression `protobuf:"bytes,3,opt,name=segment_filter_expression,json=segmentFilterExpression,proto3" json:"segment_filter_expression,omitempty"` } func (x *UserSequenceStep) Reset() { *x = UserSequenceStep{} if protoimpl.UnsafeEnabled { mi := &file_google_analytics_data_v1alpha_data_proto_msgTypes[27] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *UserSequenceStep) String() string { return protoimpl.X.MessageStringOf(x) } func (*UserSequenceStep) ProtoMessage() {} func (x *UserSequenceStep) ProtoReflect() protoreflect.Message { mi := &file_google_analytics_data_v1alpha_data_proto_msgTypes[27] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use UserSequenceStep.ProtoReflect.Descriptor instead. func (*UserSequenceStep) Descriptor() ([]byte, []int) { return file_google_analytics_data_v1alpha_data_proto_rawDescGZIP(), []int{27} } func (x *UserSequenceStep) GetIsDirectlyFollowedBy() bool { if x != nil { return x.IsDirectlyFollowedBy } return false } func (x *UserSequenceStep) GetStepScoping() UserCriteriaScoping { if x != nil { return x.StepScoping } return UserCriteriaScoping_USER_CRITERIA_SCOPING_UNSPECIFIED } func (x *UserSequenceStep) GetSegmentFilterExpression() *SegmentFilterExpression { if x != nil { return x.SegmentFilterExpression } return nil } // Specifies which users are excluded in this segment. type UserSegmentExclusion struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // Specifies how long an exclusion will last if a user matches the // `userExclusionCriteria`. // // Optional. If unspecified, `userExclusionDuration` of // `USER_EXCLUSION_TEMPORARY` is used. UserExclusionDuration UserExclusionDuration `protobuf:"varint,1,opt,name=user_exclusion_duration,json=userExclusionDuration,proto3,enum=google.analytics.data.v1alpha.UserExclusionDuration" json:"user_exclusion_duration,omitempty"` // If a user meets this condition, the user is excluded from membership in // the segment for the `userExclusionDuration`. UserExclusionCriteria *UserSegmentCriteria `protobuf:"bytes,2,opt,name=user_exclusion_criteria,json=userExclusionCriteria,proto3" json:"user_exclusion_criteria,omitempty"` } func (x *UserSegmentExclusion) Reset() { *x = UserSegmentExclusion{} if protoimpl.UnsafeEnabled { mi := &file_google_analytics_data_v1alpha_data_proto_msgTypes[28] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *UserSegmentExclusion) String() string { return protoimpl.X.MessageStringOf(x) } func (*UserSegmentExclusion) ProtoMessage() {} func (x *UserSegmentExclusion) ProtoReflect() protoreflect.Message { mi := &file_google_analytics_data_v1alpha_data_proto_msgTypes[28] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use UserSegmentExclusion.ProtoReflect.Descriptor instead. func (*UserSegmentExclusion) Descriptor() ([]byte, []int) { return file_google_analytics_data_v1alpha_data_proto_rawDescGZIP(), []int{28} } func (x *UserSegmentExclusion) GetUserExclusionDuration() UserExclusionDuration { if x != nil { return x.UserExclusionDuration } return UserExclusionDuration_USER_EXCLUSION_DURATION_UNSPECIFIED } func (x *UserSegmentExclusion) GetUserExclusionCriteria() *UserSegmentCriteria { if x != nil { return x.UserExclusionCriteria } return nil } // Session segments are subsets of the sessions that occurred on your site or // app: for example, all the sessions that originated from a particular // advertising campaign. type SessionSegment struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // Defines which sessions are included in this segment. Optional. SessionInclusionCriteria *SessionSegmentCriteria `protobuf:"bytes,1,opt,name=session_inclusion_criteria,json=sessionInclusionCriteria,proto3" json:"session_inclusion_criteria,omitempty"` // Defines which sessions are excluded in this segment. Optional. Exclusion *SessionSegmentExclusion `protobuf:"bytes,2,opt,name=exclusion,proto3" json:"exclusion,omitempty"` } func (x *SessionSegment) Reset() { *x = SessionSegment{} if protoimpl.UnsafeEnabled { mi := &file_google_analytics_data_v1alpha_data_proto_msgTypes[29] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *SessionSegment) String() string { return protoimpl.X.MessageStringOf(x) } func (*SessionSegment) ProtoMessage() {} func (x *SessionSegment) ProtoReflect() protoreflect.Message { mi := &file_google_analytics_data_v1alpha_data_proto_msgTypes[29] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use SessionSegment.ProtoReflect.Descriptor instead. func (*SessionSegment) Descriptor() ([]byte, []int) { return file_google_analytics_data_v1alpha_data_proto_rawDescGZIP(), []int{29} } func (x *SessionSegment) GetSessionInclusionCriteria() *SessionSegmentCriteria { if x != nil { return x.SessionInclusionCriteria } return nil } func (x *SessionSegment) GetExclusion() *SessionSegmentExclusion { if x != nil { return x.Exclusion } return nil } // A session matches a criteria if the session's events meet the conditions in // the criteria. type SessionSegmentCriteria struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // A session matches this criteria if the session matches each of these // `andConditionGroups`. AndConditionGroups []*SessionSegmentConditionGroup `protobuf:"bytes,1,rep,name=and_condition_groups,json=andConditionGroups,proto3" json:"and_condition_groups,omitempty"` } func (x *SessionSegmentCriteria) Reset() { *x = SessionSegmentCriteria{} if protoimpl.UnsafeEnabled { mi := &file_google_analytics_data_v1alpha_data_proto_msgTypes[30] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *SessionSegmentCriteria) String() string { return protoimpl.X.MessageStringOf(x) } func (*SessionSegmentCriteria) ProtoMessage() {} func (x *SessionSegmentCriteria) ProtoReflect() protoreflect.Message { mi := &file_google_analytics_data_v1alpha_data_proto_msgTypes[30] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use SessionSegmentCriteria.ProtoReflect.Descriptor instead. func (*SessionSegmentCriteria) Descriptor() ([]byte, []int) { return file_google_analytics_data_v1alpha_data_proto_rawDescGZIP(), []int{30} } func (x *SessionSegmentCriteria) GetAndConditionGroups() []*SessionSegmentConditionGroup { if x != nil { return x.AndConditionGroups } return nil } // Conditions tell Analytics what data to include in or exclude from the // segment. type SessionSegmentConditionGroup struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // Data is included or excluded from the segment based on if it matches // the condition group. This scoping defines how many events the // `segmentFilterExpression` is evaluated on before the condition group // is determined to be matched or not. For example if `conditionScoping = // SESSION_CRITERIA_WITHIN_SAME_SESSION`, the expression is evaluated on all // events in a session, and then, the condition group is determined to be // matched or not for this session. For example if `conditionScoping = // SESSION_CRITERIA_WITHIN_SAME_EVENT`, the expression is evaluated on a // single event, and then, the condition group is determined to be matched or // not for this session. // // Optional. If unspecified, a `conditionScoping` of `WITHIN_SAME_SESSION` // is used. ConditionScoping SessionCriteriaScoping `protobuf:"varint,1,opt,name=condition_scoping,json=conditionScoping,proto3,enum=google.analytics.data.v1alpha.SessionCriteriaScoping" json:"condition_scoping,omitempty"` // Data is included or excluded from the segment based on if it matches // this expression. Expressions express criteria on dimension, metrics, // and/or parameters. SegmentFilterExpression *SegmentFilterExpression `protobuf:"bytes,2,opt,name=segment_filter_expression,json=segmentFilterExpression,proto3" json:"segment_filter_expression,omitempty"` } func (x *SessionSegmentConditionGroup) Reset() { *x = SessionSegmentConditionGroup{} if protoimpl.UnsafeEnabled { mi := &file_google_analytics_data_v1alpha_data_proto_msgTypes[31] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *SessionSegmentConditionGroup) String() string { return protoimpl.X.MessageStringOf(x) } func (*SessionSegmentConditionGroup) ProtoMessage() {} func (x *SessionSegmentConditionGroup) ProtoReflect() protoreflect.Message { mi := &file_google_analytics_data_v1alpha_data_proto_msgTypes[31] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use SessionSegmentConditionGroup.ProtoReflect.Descriptor instead. func (*SessionSegmentConditionGroup) Descriptor() ([]byte, []int) { return file_google_analytics_data_v1alpha_data_proto_rawDescGZIP(), []int{31} } func (x *SessionSegmentConditionGroup) GetConditionScoping() SessionCriteriaScoping { if x != nil { return x.ConditionScoping } return SessionCriteriaScoping_SESSION_CRITERIA_SCOPING_UNSPECIFIED } func (x *SessionSegmentConditionGroup) GetSegmentFilterExpression() *SegmentFilterExpression { if x != nil { return x.SegmentFilterExpression } return nil } // Specifies which sessions are excluded in this segment. type SessionSegmentExclusion struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // Specifies how long an exclusion will last if a session matches the // `sessionExclusionCriteria`. // // Optional. If unspecified, a `sessionExclusionDuration` of // `SESSION_EXCLUSION_TEMPORARY` is used. SessionExclusionDuration SessionExclusionDuration `protobuf:"varint,1,opt,name=session_exclusion_duration,json=sessionExclusionDuration,proto3,enum=google.analytics.data.v1alpha.SessionExclusionDuration" json:"session_exclusion_duration,omitempty"` // If a session meets this condition, the session is excluded from // membership in the segment for the `sessionExclusionDuration`. SessionExclusionCriteria *SessionSegmentCriteria `protobuf:"bytes,2,opt,name=session_exclusion_criteria,json=sessionExclusionCriteria,proto3" json:"session_exclusion_criteria,omitempty"` } func (x *SessionSegmentExclusion) Reset() { *x = SessionSegmentExclusion{} if protoimpl.UnsafeEnabled { mi := &file_google_analytics_data_v1alpha_data_proto_msgTypes[32] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *SessionSegmentExclusion) String() string { return protoimpl.X.MessageStringOf(x) } func (*SessionSegmentExclusion) ProtoMessage() {} func (x *SessionSegmentExclusion) ProtoReflect() protoreflect.Message { mi := &file_google_analytics_data_v1alpha_data_proto_msgTypes[32] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use SessionSegmentExclusion.ProtoReflect.Descriptor instead. func (*SessionSegmentExclusion) Descriptor() ([]byte, []int) { return file_google_analytics_data_v1alpha_data_proto_rawDescGZIP(), []int{32} } func (x *SessionSegmentExclusion) GetSessionExclusionDuration() SessionExclusionDuration { if x != nil { return x.SessionExclusionDuration } return SessionExclusionDuration_SESSION_EXCLUSION_DURATION_UNSPECIFIED } func (x *SessionSegmentExclusion) GetSessionExclusionCriteria() *SessionSegmentCriteria { if x != nil { return x.SessionExclusionCriteria } return nil } // Event segments are subsets of events that were triggered on your site or app. // for example, all purchase events made in a particular location; app_exception // events that occurred on a specific operating system. type EventSegment struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // Defines which events are included in this segment. Optional. EventInclusionCriteria *EventSegmentCriteria `protobuf:"bytes,1,opt,name=event_inclusion_criteria,json=eventInclusionCriteria,proto3" json:"event_inclusion_criteria,omitempty"` // Defines which events are excluded in this segment. Optional. Exclusion *EventSegmentExclusion `protobuf:"bytes,2,opt,name=exclusion,proto3" json:"exclusion,omitempty"` } func (x *EventSegment) Reset() { *x = EventSegment{} if protoimpl.UnsafeEnabled { mi := &file_google_analytics_data_v1alpha_data_proto_msgTypes[33] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *EventSegment) String() string { return protoimpl.X.MessageStringOf(x) } func (*EventSegment) ProtoMessage() {} func (x *EventSegment) ProtoReflect() protoreflect.Message { mi := &file_google_analytics_data_v1alpha_data_proto_msgTypes[33] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use EventSegment.ProtoReflect.Descriptor instead. func (*EventSegment) Descriptor() ([]byte, []int) { return file_google_analytics_data_v1alpha_data_proto_rawDescGZIP(), []int{33} } func (x *EventSegment) GetEventInclusionCriteria() *EventSegmentCriteria { if x != nil { return x.EventInclusionCriteria } return nil } func (x *EventSegment) GetExclusion() *EventSegmentExclusion { if x != nil { return x.Exclusion } return nil } // An event matches a criteria if the event meet the conditions in the // criteria. type EventSegmentCriteria struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // An event matches this criteria if the event matches each of these // `andConditionGroups`. AndConditionGroups []*EventSegmentConditionGroup `protobuf:"bytes,1,rep,name=and_condition_groups,json=andConditionGroups,proto3" json:"and_condition_groups,omitempty"` } func (x *EventSegmentCriteria) Reset() { *x = EventSegmentCriteria{} if protoimpl.UnsafeEnabled { mi := &file_google_analytics_data_v1alpha_data_proto_msgTypes[34] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *EventSegmentCriteria) String() string { return protoimpl.X.MessageStringOf(x) } func (*EventSegmentCriteria) ProtoMessage() {} func (x *EventSegmentCriteria) ProtoReflect() protoreflect.Message { mi := &file_google_analytics_data_v1alpha_data_proto_msgTypes[34] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use EventSegmentCriteria.ProtoReflect.Descriptor instead. func (*EventSegmentCriteria) Descriptor() ([]byte, []int) { return file_google_analytics_data_v1alpha_data_proto_rawDescGZIP(), []int{34} } func (x *EventSegmentCriteria) GetAndConditionGroups() []*EventSegmentConditionGroup { if x != nil { return x.AndConditionGroups } return nil } // Conditions tell Analytics what data to include in or exclude from the // segment. type EventSegmentConditionGroup struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // `conditionScoping` should always be `EVENT_CRITERIA_WITHIN_SAME_EVENT`. // // Optional. If unspecified, a `conditionScoping` of // `EVENT_CRITERIA_WITHIN_SAME_EVENT` is used. ConditionScoping EventCriteriaScoping `protobuf:"varint,1,opt,name=condition_scoping,json=conditionScoping,proto3,enum=google.analytics.data.v1alpha.EventCriteriaScoping" json:"condition_scoping,omitempty"` // Data is included or excluded from the segment based on if it matches // this expression. Expressions express criteria on dimension, metrics, // and/or parameters. SegmentFilterExpression *SegmentFilterExpression `protobuf:"bytes,2,opt,name=segment_filter_expression,json=segmentFilterExpression,proto3" json:"segment_filter_expression,omitempty"` } func (x *EventSegmentConditionGroup) Reset() { *x = EventSegmentConditionGroup{} if protoimpl.UnsafeEnabled { mi := &file_google_analytics_data_v1alpha_data_proto_msgTypes[35] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *EventSegmentConditionGroup) String() string { return protoimpl.X.MessageStringOf(x) } func (*EventSegmentConditionGroup) ProtoMessage() {} func (x *EventSegmentConditionGroup) ProtoReflect() protoreflect.Message { mi := &file_google_analytics_data_v1alpha_data_proto_msgTypes[35] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use EventSegmentConditionGroup.ProtoReflect.Descriptor instead. func (*EventSegmentConditionGroup) Descriptor() ([]byte, []int) { return file_google_analytics_data_v1alpha_data_proto_rawDescGZIP(), []int{35} } func (x *EventSegmentConditionGroup) GetConditionScoping() EventCriteriaScoping { if x != nil { return x.ConditionScoping } return EventCriteriaScoping_EVENT_CRITERIA_SCOPING_UNSPECIFIED } func (x *EventSegmentConditionGroup) GetSegmentFilterExpression() *SegmentFilterExpression { if x != nil { return x.SegmentFilterExpression } return nil } // Specifies which events are excluded in this segment. type EventSegmentExclusion struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // `eventExclusionDuration` should always be `PERMANENTLY_EXCLUDE`. // // Optional. If unspecified, an `eventExclusionDuration` of // `EVENT_EXCLUSION_PERMANENT` is used. EventExclusionDuration EventExclusionDuration `protobuf:"varint,1,opt,name=event_exclusion_duration,json=eventExclusionDuration,proto3,enum=google.analytics.data.v1alpha.EventExclusionDuration" json:"event_exclusion_duration,omitempty"` // If an event meets this condition, the event is excluded from membership // in the segment for the `eventExclusionDuration`. EventExclusionCriteria *EventSegmentCriteria `protobuf:"bytes,2,opt,name=event_exclusion_criteria,json=eventExclusionCriteria,proto3" json:"event_exclusion_criteria,omitempty"` } func (x *EventSegmentExclusion) Reset() { *x = EventSegmentExclusion{} if protoimpl.UnsafeEnabled { mi := &file_google_analytics_data_v1alpha_data_proto_msgTypes[36] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *EventSegmentExclusion) String() string { return protoimpl.X.MessageStringOf(x) } func (*EventSegmentExclusion) ProtoMessage() {} func (x *EventSegmentExclusion) ProtoReflect() protoreflect.Message { mi := &file_google_analytics_data_v1alpha_data_proto_msgTypes[36] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use EventSegmentExclusion.ProtoReflect.Descriptor instead. func (*EventSegmentExclusion) Descriptor() ([]byte, []int) { return file_google_analytics_data_v1alpha_data_proto_rawDescGZIP(), []int{36} } func (x *EventSegmentExclusion) GetEventExclusionDuration() EventExclusionDuration { if x != nil { return x.EventExclusionDuration } return EventExclusionDuration_EVENT_EXCLUSION_DURATION_UNSPECIFIED } func (x *EventSegmentExclusion) GetEventExclusionCriteria() *EventSegmentCriteria { if x != nil { return x.EventExclusionCriteria } return nil } // A segment is a subset of your Analytics data. For example, of your entire set // of users, one segment might be users from a particular country or city. // Another segment might be users who purchase a particular line of products or // who visit a specific part of your site or trigger certain events in your app. // // To learn more, see [GA4 Segment // Builder](https://support.google.com/analytics/answer/9304353). type Segment struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // The name for this segment. If unspecified, segments are named "Segment". // This name defines string value returned by the `segment` dimension. The // `segment` dimension prefixes segment names by the 1-based index number of // the segment in the request (i.e. "1. Segment", "2. Segment", etc.). Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` // A segment is specified in one scope. // // Types that are assignable to OneSegmentScope: // *Segment_UserSegment // *Segment_SessionSegment // *Segment_EventSegment OneSegmentScope isSegment_OneSegmentScope `protobuf_oneof:"one_segment_scope"` } func (x *Segment) Reset() { *x = Segment{} if protoimpl.UnsafeEnabled { mi := &file_google_analytics_data_v1alpha_data_proto_msgTypes[37] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *Segment) String() string { return protoimpl.X.MessageStringOf(x) } func (*Segment) ProtoMessage() {} func (x *Segment) ProtoReflect() protoreflect.Message { mi := &file_google_analytics_data_v1alpha_data_proto_msgTypes[37] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use Segment.ProtoReflect.Descriptor instead. func (*Segment) Descriptor() ([]byte, []int) { return file_google_analytics_data_v1alpha_data_proto_rawDescGZIP(), []int{37} } func (x *Segment) GetName() string { if x != nil { return x.Name } return "" } func (m *Segment) GetOneSegmentScope() isSegment_OneSegmentScope { if m != nil { return m.OneSegmentScope } return nil } func (x *Segment) GetUserSegment() *UserSegment { if x, ok := x.GetOneSegmentScope().(*Segment_UserSegment); ok { return x.UserSegment } return nil } func (x *Segment) GetSessionSegment() *SessionSegment { if x, ok := x.GetOneSegmentScope().(*Segment_SessionSegment); ok { return x.SessionSegment } return nil } func (x *Segment) GetEventSegment() *EventSegment { if x, ok := x.GetOneSegmentScope().(*Segment_EventSegment); ok { return x.EventSegment } return nil } type isSegment_OneSegmentScope interface { isSegment_OneSegmentScope() } type Segment_UserSegment struct { // User segments are subsets of users who engaged with your site or app. UserSegment *UserSegment `protobuf:"bytes,2,opt,name=user_segment,json=userSegment,proto3,oneof"` } type Segment_SessionSegment struct { // Session segments are subsets of the sessions that occurred on your site // or app. SessionSegment *SessionSegment `protobuf:"bytes,3,opt,name=session_segment,json=sessionSegment,proto3,oneof"` } type Segment_EventSegment struct { // Event segments are subsets of events that were triggered on your site or // app. EventSegment *EventSegment `protobuf:"bytes,4,opt,name=event_segment,json=eventSegment,proto3,oneof"` } func (*Segment_UserSegment) isSegment_OneSegmentScope() {} func (*Segment_SessionSegment) isSegment_OneSegmentScope() {} func (*Segment_EventSegment) isSegment_OneSegmentScope() {} // Expresses combinations of segment filters. type SegmentFilterExpression struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // Specify one type of filter for `SegmentFilterExpression`. // // Types that are assignable to Expr: // *SegmentFilterExpression_AndGroup // *SegmentFilterExpression_OrGroup // *SegmentFilterExpression_NotExpression // *SegmentFilterExpression_SegmentFilter // *SegmentFilterExpression_SegmentEventFilter Expr isSegmentFilterExpression_Expr `protobuf_oneof:"expr"` } func (x *SegmentFilterExpression) Reset() { *x = SegmentFilterExpression{} if protoimpl.UnsafeEnabled { mi := &file_google_analytics_data_v1alpha_data_proto_msgTypes[38] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *SegmentFilterExpression) String() string { return protoimpl.X.MessageStringOf(x) } func (*SegmentFilterExpression) ProtoMessage() {} func (x *SegmentFilterExpression) ProtoReflect() protoreflect.Message { mi := &file_google_analytics_data_v1alpha_data_proto_msgTypes[38] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use SegmentFilterExpression.ProtoReflect.Descriptor instead. func (*SegmentFilterExpression) Descriptor() ([]byte, []int) { return file_google_analytics_data_v1alpha_data_proto_rawDescGZIP(), []int{38} } func (m *SegmentFilterExpression) GetExpr() isSegmentFilterExpression_Expr { if m != nil { return m.Expr } return nil } func (x *SegmentFilterExpression) GetAndGroup() *SegmentFilterExpressionList { if x, ok := x.GetExpr().(*SegmentFilterExpression_AndGroup); ok { return x.AndGroup } return nil } func (x *SegmentFilterExpression) GetOrGroup() *SegmentFilterExpressionList { if x, ok := x.GetExpr().(*SegmentFilterExpression_OrGroup); ok { return x.OrGroup } return nil } func (x *SegmentFilterExpression) GetNotExpression() *SegmentFilterExpression { if x, ok := x.GetExpr().(*SegmentFilterExpression_NotExpression); ok { return x.NotExpression } return nil } func (x *SegmentFilterExpression) GetSegmentFilter() *SegmentFilter { if x, ok := x.GetExpr().(*SegmentFilterExpression_SegmentFilter); ok { return x.SegmentFilter } return nil } func (x *SegmentFilterExpression) GetSegmentEventFilter() *SegmentEventFilter { if x, ok := x.GetExpr().(*SegmentFilterExpression_SegmentEventFilter); ok { return x.SegmentEventFilter } return nil } type isSegmentFilterExpression_Expr interface { isSegmentFilterExpression_Expr() } type SegmentFilterExpression_AndGroup struct { // The SegmentFilterExpression in `andGroup` have an AND relationship. AndGroup *SegmentFilterExpressionList `protobuf:"bytes,1,opt,name=and_group,json=andGroup,proto3,oneof"` } type SegmentFilterExpression_OrGroup struct { // The SegmentFilterExpression in `orGroup` have an OR relationship. OrGroup *SegmentFilterExpressionList `protobuf:"bytes,2,opt,name=or_group,json=orGroup,proto3,oneof"` } type SegmentFilterExpression_NotExpression struct { // The SegmentFilterExpression is NOT of `notExpression`. NotExpression *SegmentFilterExpression `protobuf:"bytes,3,opt,name=not_expression,json=notExpression,proto3,oneof"` } type SegmentFilterExpression_SegmentFilter struct { // A primitive segment filter. SegmentFilter *SegmentFilter `protobuf:"bytes,4,opt,name=segment_filter,json=segmentFilter,proto3,oneof"` } type SegmentFilterExpression_SegmentEventFilter struct { // Creates a filter that matches events of a single event name. If a // parameter filter expression is specified, only the subset of events that // match both the single event name and the parameter filter expressions // match this event filter. SegmentEventFilter *SegmentEventFilter `protobuf:"bytes,5,opt,name=segment_event_filter,json=segmentEventFilter,proto3,oneof"` } func (*SegmentFilterExpression_AndGroup) isSegmentFilterExpression_Expr() {} func (*SegmentFilterExpression_OrGroup) isSegmentFilterExpression_Expr() {} func (*SegmentFilterExpression_NotExpression) isSegmentFilterExpression_Expr() {} func (*SegmentFilterExpression_SegmentFilter) isSegmentFilterExpression_Expr() {} func (*SegmentFilterExpression_SegmentEventFilter) isSegmentFilterExpression_Expr() {} // A list of segment filter expressions. type SegmentFilterExpressionList struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // The list of segment filter expressions Expressions []*SegmentFilterExpression `protobuf:"bytes,1,rep,name=expressions,proto3" json:"expressions,omitempty"` } func (x *SegmentFilterExpressionList) Reset() { *x = SegmentFilterExpressionList{} if protoimpl.UnsafeEnabled { mi := &file_google_analytics_data_v1alpha_data_proto_msgTypes[39] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *SegmentFilterExpressionList) String() string { return protoimpl.X.MessageStringOf(x) } func (*SegmentFilterExpressionList) ProtoMessage() {} func (x *SegmentFilterExpressionList) ProtoReflect() protoreflect.Message { mi := &file_google_analytics_data_v1alpha_data_proto_msgTypes[39] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use SegmentFilterExpressionList.ProtoReflect.Descriptor instead. func (*SegmentFilterExpressionList) Descriptor() ([]byte, []int) { return file_google_analytics_data_v1alpha_data_proto_rawDescGZIP(), []int{39} } func (x *SegmentFilterExpressionList) GetExpressions() []*SegmentFilterExpression { if x != nil { return x.Expressions } return nil } // An expression to filter dimension or metric values. type SegmentFilter struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // The dimension name or metric name. FieldName string `protobuf:"bytes,1,opt,name=field_name,json=fieldName,proto3" json:"field_name,omitempty"` // Specify one type of filter for `Filter`. // // Types that are assignable to OneFilter: // *SegmentFilter_StringFilter // *SegmentFilter_InListFilter // *SegmentFilter_NumericFilter // *SegmentFilter_BetweenFilter OneFilter isSegmentFilter_OneFilter `protobuf_oneof:"one_filter"` // Specifies the scope for the filter. FilterScoping *SegmentFilterScoping `protobuf:"bytes,8,opt,name=filter_scoping,json=filterScoping,proto3" json:"filter_scoping,omitempty"` } func (x *SegmentFilter) Reset() { *x = SegmentFilter{} if protoimpl.UnsafeEnabled { mi := &file_google_analytics_data_v1alpha_data_proto_msgTypes[40] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *SegmentFilter) String() string { return protoimpl.X.MessageStringOf(x) } func (*SegmentFilter) ProtoMessage() {} func (x *SegmentFilter) ProtoReflect() protoreflect.Message { mi := &file_google_analytics_data_v1alpha_data_proto_msgTypes[40] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use SegmentFilter.ProtoReflect.Descriptor instead. func (*SegmentFilter) Descriptor() ([]byte, []int) { return file_google_analytics_data_v1alpha_data_proto_rawDescGZIP(), []int{40} } func (x *SegmentFilter) GetFieldName() string { if x != nil { return x.FieldName } return "" } func (m *SegmentFilter) GetOneFilter() isSegmentFilter_OneFilter { if m != nil { return m.OneFilter } return nil } func (x *SegmentFilter) GetStringFilter() *StringFilter { if x, ok := x.GetOneFilter().(*SegmentFilter_StringFilter); ok { return x.StringFilter } return nil } func (x *SegmentFilter) GetInListFilter() *InListFilter { if x, ok := x.GetOneFilter().(*SegmentFilter_InListFilter); ok { return x.InListFilter } return nil } func (x *SegmentFilter) GetNumericFilter() *NumericFilter { if x, ok := x.GetOneFilter().(*SegmentFilter_NumericFilter); ok { return x.NumericFilter } return nil } func (x *SegmentFilter) GetBetweenFilter() *BetweenFilter { if x, ok := x.GetOneFilter().(*SegmentFilter_BetweenFilter); ok { return x.BetweenFilter } return nil } func (x *SegmentFilter) GetFilterScoping() *SegmentFilterScoping { if x != nil { return x.FilterScoping } return nil } type isSegmentFilter_OneFilter interface { isSegmentFilter_OneFilter() } type SegmentFilter_StringFilter struct { // Strings related filter. StringFilter *StringFilter `protobuf:"bytes,4,opt,name=string_filter,json=stringFilter,proto3,oneof"` } type SegmentFilter_InListFilter struct { // A filter for in list values. InListFilter *InListFilter `protobuf:"bytes,5,opt,name=in_list_filter,json=inListFilter,proto3,oneof"` } type SegmentFilter_NumericFilter struct { // A filter for numeric or date values. NumericFilter *NumericFilter `protobuf:"bytes,6,opt,name=numeric_filter,json=numericFilter,proto3,oneof"` } type SegmentFilter_BetweenFilter struct { // A filter for between two values. BetweenFilter *BetweenFilter `protobuf:"bytes,7,opt,name=between_filter,json=betweenFilter,proto3,oneof"` } func (*SegmentFilter_StringFilter) isSegmentFilter_OneFilter() {} func (*SegmentFilter_InListFilter) isSegmentFilter_OneFilter() {} func (*SegmentFilter_NumericFilter) isSegmentFilter_OneFilter() {} func (*SegmentFilter_BetweenFilter) isSegmentFilter_OneFilter() {} // Scopings specify how the dimensions & metrics of multiple events // should be considered when evaluating a segment filter. type SegmentFilterScoping struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // If `atAnyPointInTime` is true, this filter evaluates to true for all // events if it evaluates to true for any event in the date range of the // request. // // This `atAnyPointInTime` parameter does not extend the date range of // events in the report. If `atAnyPointInTime` is true, only events within // the report's date range are considered when evaluating this filter. // // This `atAnyPointInTime` is only able to be specified if the criteria // scoping is `ACROSS_ALL_SESSIONS` and is not able to be specified in // sequences. // // If the criteria scoping is `ACROSS_ALL_SESSIONS`, `atAnyPointInTime` = // false is used if unspecified. AtAnyPointInTime *bool `protobuf:"varint,1,opt,name=at_any_point_in_time,json=atAnyPointInTime,proto3,oneof" json:"at_any_point_in_time,omitempty"` } func (x *SegmentFilterScoping) Reset() { *x = SegmentFilterScoping{} if protoimpl.UnsafeEnabled { mi := &file_google_analytics_data_v1alpha_data_proto_msgTypes[41] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *SegmentFilterScoping) String() string { return protoimpl.X.MessageStringOf(x) } func (*SegmentFilterScoping) ProtoMessage() {} func (x *SegmentFilterScoping) ProtoReflect() protoreflect.Message { mi := &file_google_analytics_data_v1alpha_data_proto_msgTypes[41] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use SegmentFilterScoping.ProtoReflect.Descriptor instead. func (*SegmentFilterScoping) Descriptor() ([]byte, []int) { return file_google_analytics_data_v1alpha_data_proto_rawDescGZIP(), []int{41} } func (x *SegmentFilterScoping) GetAtAnyPointInTime() bool { if x != nil && x.AtAnyPointInTime != nil { return *x.AtAnyPointInTime } return false } // Creates a filter that matches events of a single event name. If a parameter // filter expression is specified, only the subset of events that match both the // single event name and the parameter filter expressions match this event // filter. type SegmentEventFilter struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // This filter matches events of this single event name. Event name is // required. EventName *string `protobuf:"bytes,1,opt,name=event_name,json=eventName,proto3,oneof" json:"event_name,omitempty"` // If specified, this filter matches events that match both the single event // name and the parameter filter expressions. // // Inside the parameter filter expression, only parameter filters are // available. SegmentParameterFilterExpression *SegmentParameterFilterExpression `protobuf:"bytes,2,opt,name=segment_parameter_filter_expression,json=segmentParameterFilterExpression,proto3,oneof" json:"segment_parameter_filter_expression,omitempty"` } func (x *SegmentEventFilter) Reset() { *x = SegmentEventFilter{} if protoimpl.UnsafeEnabled { mi := &file_google_analytics_data_v1alpha_data_proto_msgTypes[42] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *SegmentEventFilter) String() string { return protoimpl.X.MessageStringOf(x) } func (*SegmentEventFilter) ProtoMessage() {} func (x *SegmentEventFilter) ProtoReflect() protoreflect.Message { mi := &file_google_analytics_data_v1alpha_data_proto_msgTypes[42] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use SegmentEventFilter.ProtoReflect.Descriptor instead. func (*SegmentEventFilter) Descriptor() ([]byte, []int) { return file_google_analytics_data_v1alpha_data_proto_rawDescGZIP(), []int{42} } func (x *SegmentEventFilter) GetEventName() string { if x != nil && x.EventName != nil { return *x.EventName } return "" } func (x *SegmentEventFilter) GetSegmentParameterFilterExpression() *SegmentParameterFilterExpression { if x != nil { return x.SegmentParameterFilterExpression } return nil } // Expresses combinations of segment filter on parameters. type SegmentParameterFilterExpression struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // Specify one type of filter for `SegmentParameterFilterExpression`. // // Types that are assignable to Expr: // *SegmentParameterFilterExpression_AndGroup // *SegmentParameterFilterExpression_OrGroup // *SegmentParameterFilterExpression_NotExpression // *SegmentParameterFilterExpression_SegmentParameterFilter Expr isSegmentParameterFilterExpression_Expr `protobuf_oneof:"expr"` } func (x *SegmentParameterFilterExpression) Reset() { *x = SegmentParameterFilterExpression{} if protoimpl.UnsafeEnabled { mi := &file_google_analytics_data_v1alpha_data_proto_msgTypes[43] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *SegmentParameterFilterExpression) String() string { return protoimpl.X.MessageStringOf(x) } func (*SegmentParameterFilterExpression) ProtoMessage() {} func (x *SegmentParameterFilterExpression) ProtoReflect() protoreflect.Message { mi := &file_google_analytics_data_v1alpha_data_proto_msgTypes[43] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use SegmentParameterFilterExpression.ProtoReflect.Descriptor instead. func (*SegmentParameterFilterExpression) Descriptor() ([]byte, []int) { return file_google_analytics_data_v1alpha_data_proto_rawDescGZIP(), []int{43} } func (m *SegmentParameterFilterExpression) GetExpr() isSegmentParameterFilterExpression_Expr { if m != nil { return m.Expr } return nil } func (x *SegmentParameterFilterExpression) GetAndGroup() *SegmentParameterFilterExpressionList { if x, ok := x.GetExpr().(*SegmentParameterFilterExpression_AndGroup); ok { return x.AndGroup } return nil } func (x *SegmentParameterFilterExpression) GetOrGroup() *SegmentParameterFilterExpressionList { if x, ok := x.GetExpr().(*SegmentParameterFilterExpression_OrGroup); ok { return x.OrGroup } return nil } func (x *SegmentParameterFilterExpression) GetNotExpression() *SegmentParameterFilterExpression { if x, ok := x.GetExpr().(*SegmentParameterFilterExpression_NotExpression); ok { return x.NotExpression } return nil } func (x *SegmentParameterFilterExpression) GetSegmentParameterFilter() *SegmentParameterFilter { if x, ok := x.GetExpr().(*SegmentParameterFilterExpression_SegmentParameterFilter); ok { return x.SegmentParameterFilter } return nil } type isSegmentParameterFilterExpression_Expr interface { isSegmentParameterFilterExpression_Expr() } type SegmentParameterFilterExpression_AndGroup struct { // The SegmentParameterFilterExpression in `andGroup` have an AND // relationship. AndGroup *SegmentParameterFilterExpressionList `protobuf:"bytes,1,opt,name=and_group,json=andGroup,proto3,oneof"` } type SegmentParameterFilterExpression_OrGroup struct { // The SegmentParameterFilterExpression in `orGroup` have an OR // relationship. OrGroup *SegmentParameterFilterExpressionList `protobuf:"bytes,2,opt,name=or_group,json=orGroup,proto3,oneof"` } type SegmentParameterFilterExpression_NotExpression struct { // The SegmentParameterFilterExpression is NOT of `notExpression`. NotExpression *SegmentParameterFilterExpression `protobuf:"bytes,3,opt,name=not_expression,json=notExpression,proto3,oneof"` } type SegmentParameterFilterExpression_SegmentParameterFilter struct { // A primitive segment parameter filter. SegmentParameterFilter *SegmentParameterFilter `protobuf:"bytes,4,opt,name=segment_parameter_filter,json=segmentParameterFilter,proto3,oneof"` } func (*SegmentParameterFilterExpression_AndGroup) isSegmentParameterFilterExpression_Expr() {} func (*SegmentParameterFilterExpression_OrGroup) isSegmentParameterFilterExpression_Expr() {} func (*SegmentParameterFilterExpression_NotExpression) isSegmentParameterFilterExpression_Expr() {} func (*SegmentParameterFilterExpression_SegmentParameterFilter) isSegmentParameterFilterExpression_Expr() { } // A list of segment parameter filter expressions. type SegmentParameterFilterExpressionList struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // The list of segment parameter filter expressions. Expressions []*SegmentParameterFilterExpression `protobuf:"bytes,1,rep,name=expressions,proto3" json:"expressions,omitempty"` } func (x *SegmentParameterFilterExpressionList) Reset() { *x = SegmentParameterFilterExpressionList{} if protoimpl.UnsafeEnabled { mi := &file_google_analytics_data_v1alpha_data_proto_msgTypes[44] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *SegmentParameterFilterExpressionList) String() string { return protoimpl.X.MessageStringOf(x) } func (*SegmentParameterFilterExpressionList) ProtoMessage() {} func (x *SegmentParameterFilterExpressionList) ProtoReflect() protoreflect.Message { mi := &file_google_analytics_data_v1alpha_data_proto_msgTypes[44] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use SegmentParameterFilterExpressionList.ProtoReflect.Descriptor instead. func (*SegmentParameterFilterExpressionList) Descriptor() ([]byte, []int) { return file_google_analytics_data_v1alpha_data_proto_rawDescGZIP(), []int{44} } func (x *SegmentParameterFilterExpressionList) GetExpressions() []*SegmentParameterFilterExpression { if x != nil { return x.Expressions } return nil } // An expression to filter parameter values in a segment. type SegmentParameterFilter struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // The field that is being filtered. // // Types that are assignable to OneParameter: // *SegmentParameterFilter_EventParameterName // *SegmentParameterFilter_ItemParameterName OneParameter isSegmentParameterFilter_OneParameter `protobuf_oneof:"one_parameter"` // Specify one type of filter. // // Types that are assignable to OneFilter: // *SegmentParameterFilter_StringFilter // *SegmentParameterFilter_InListFilter // *SegmentParameterFilter_NumericFilter // *SegmentParameterFilter_BetweenFilter OneFilter isSegmentParameterFilter_OneFilter `protobuf_oneof:"one_filter"` // Specifies the scope for the filter. FilterScoping *SegmentParameterFilterScoping `protobuf:"bytes,8,opt,name=filter_scoping,json=filterScoping,proto3" json:"filter_scoping,omitempty"` } func (x *SegmentParameterFilter) Reset() { *x = SegmentParameterFilter{} if protoimpl.UnsafeEnabled { mi := &file_google_analytics_data_v1alpha_data_proto_msgTypes[45] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *SegmentParameterFilter) String() string { return protoimpl.X.MessageStringOf(x) } func (*SegmentParameterFilter) ProtoMessage() {} func (x *SegmentParameterFilter) ProtoReflect() protoreflect.Message { mi := &file_google_analytics_data_v1alpha_data_proto_msgTypes[45] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use SegmentParameterFilter.ProtoReflect.Descriptor instead. func (*SegmentParameterFilter) Descriptor() ([]byte, []int) { return file_google_analytics_data_v1alpha_data_proto_rawDescGZIP(), []int{45} } func (m *SegmentParameterFilter) GetOneParameter() isSegmentParameterFilter_OneParameter { if m != nil { return m.OneParameter } return nil } func (x *SegmentParameterFilter) GetEventParameterName() string { if x, ok := x.GetOneParameter().(*SegmentParameterFilter_EventParameterName); ok { return x.EventParameterName } return "" } func (x *SegmentParameterFilter) GetItemParameterName() string { if x, ok := x.GetOneParameter().(*SegmentParameterFilter_ItemParameterName); ok { return x.ItemParameterName } return "" } func (m *SegmentParameterFilter) GetOneFilter() isSegmentParameterFilter_OneFilter { if m != nil { return m.OneFilter } return nil } func (x *SegmentParameterFilter) GetStringFilter() *StringFilter { if x, ok := x.GetOneFilter().(*SegmentParameterFilter_StringFilter); ok { return x.StringFilter } return nil } func (x *SegmentParameterFilter) GetInListFilter() *InListFilter { if x, ok := x.GetOneFilter().(*SegmentParameterFilter_InListFilter); ok { return x.InListFilter } return nil } func (x *SegmentParameterFilter) GetNumericFilter() *NumericFilter { if x, ok := x.GetOneFilter().(*SegmentParameterFilter_NumericFilter); ok { return x.NumericFilter } return nil } func (x *SegmentParameterFilter) GetBetweenFilter() *BetweenFilter { if x, ok := x.GetOneFilter().(*SegmentParameterFilter_BetweenFilter); ok { return x.BetweenFilter } return nil } func (x *SegmentParameterFilter) GetFilterScoping() *SegmentParameterFilterScoping { if x != nil { return x.FilterScoping } return nil } type isSegmentParameterFilter_OneParameter interface { isSegmentParameterFilter_OneParameter() } type SegmentParameterFilter_EventParameterName struct { // This filter will be evaluated on the specified event parameter. Event // parameters are logged as parameters of the event. Event parameters // include fields like "firebase_screen" & "currency". // // Event parameters can only be used in segments & funnels and can only be // used in a descendent filter from an EventFilter. In a descendent filter // from an EventFilter either event or item parameters should be used. EventParameterName string `protobuf:"bytes,1,opt,name=event_parameter_name,json=eventParameterName,proto3,oneof"` } type SegmentParameterFilter_ItemParameterName struct { // This filter will be evaluated on the specified item parameter. Item // parameters are logged as parameters in the item array. Item parameters // include fields like "item_name" & "item_category". // // Item parameters can only be used in segments & funnels and can only be // used in a descendent filter from an EventFilter. In a descendent filter // from an EventFilter either event or item parameters should be used. // // Item parameters are only available in ecommerce events. To learn more // about ecommerce events, see the [Measure ecommerce] // (https://developers.google.com/analytics/devguides/collection/ga4/ecommerce) // guide. ItemParameterName string `protobuf:"bytes,2,opt,name=item_parameter_name,json=itemParameterName,proto3,oneof"` } func (*SegmentParameterFilter_EventParameterName) isSegmentParameterFilter_OneParameter() {} func (*SegmentParameterFilter_ItemParameterName) isSegmentParameterFilter_OneParameter() {} type isSegmentParameterFilter_OneFilter interface { isSegmentParameterFilter_OneFilter() } type SegmentParameterFilter_StringFilter struct { // Strings related filter. StringFilter *StringFilter `protobuf:"bytes,4,opt,name=string_filter,json=stringFilter,proto3,oneof"` } type SegmentParameterFilter_InListFilter struct { // A filter for in list values. InListFilter *InListFilter `protobuf:"bytes,5,opt,name=in_list_filter,json=inListFilter,proto3,oneof"` } type SegmentParameterFilter_NumericFilter struct { // A filter for numeric or date values. NumericFilter *NumericFilter `protobuf:"bytes,6,opt,name=numeric_filter,json=numericFilter,proto3,oneof"` } type SegmentParameterFilter_BetweenFilter struct { // A filter for between two values. BetweenFilter *BetweenFilter `protobuf:"bytes,7,opt,name=between_filter,json=betweenFilter,proto3,oneof"` } func (*SegmentParameterFilter_StringFilter) isSegmentParameterFilter_OneFilter() {} func (*SegmentParameterFilter_InListFilter) isSegmentParameterFilter_OneFilter() {} func (*SegmentParameterFilter_NumericFilter) isSegmentParameterFilter_OneFilter() {} func (*SegmentParameterFilter_BetweenFilter) isSegmentParameterFilter_OneFilter() {} // Scopings specify how multiple events should be considered when evaluating a // segment parameter filter. type SegmentParameterFilterScoping struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // Accumulates the parameter over the specified period of days before // applying the filter. Only supported if criteria scoping is // `ACROSS_ALL_SESSIONS` or `WITHIN_SAME_SESSION`. Only supported if the // parameter is `event_count`. // // For example if `inAnyNDayPeriod` is 3, the event_name is "purchase", // the event parameter is "event_count", and the Filter's criteria is // greater than 5, this filter will accumulate the event count of purchase // events over every 3 consecutive day period in the report's date range; a // user will pass this Filter's criteria to be included in this segment if // their count of purchase events exceeds 5 in any 3 consecutive day period. // For example, the periods 2021-11-01 to 2021-11-03, 2021-11-02 to // 2021-11-04, 2021-11-03 to 2021-11-05, and etc. will be considered. // // The date range is not extended for the purpose of having a full N day // window near the start of the date range. For example if a report is for // 2021-11-01 to 2021-11-10 and `inAnyNDayPeriod` = 3, the first two day // period will be effectively shortened because no event data outside the // report's date range will be read. For example, the first four periods // will effectively be: 2021-11-01 to 2021-11-01, 2021-11-01 to 2021-11-02, // 2021-11-01 to 2021-11-03, and 2021-11-02 to 2021-11-04. // // `inAnyNDayPeriod` is optional. If not specified, the // `segmentParameterFilter` is applied to each event individually. InAnyNDayPeriod *int64 `protobuf:"varint,1,opt,name=in_any_n_day_period,json=inAnyNDayPeriod,proto3,oneof" json:"in_any_n_day_period,omitempty"` } func (x *SegmentParameterFilterScoping) Reset() { *x = SegmentParameterFilterScoping{} if protoimpl.UnsafeEnabled { mi := &file_google_analytics_data_v1alpha_data_proto_msgTypes[46] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *SegmentParameterFilterScoping) String() string { return protoimpl.X.MessageStringOf(x) } func (*SegmentParameterFilterScoping) ProtoMessage() {} func (x *SegmentParameterFilterScoping) ProtoReflect() protoreflect.Message { mi := &file_google_analytics_data_v1alpha_data_proto_msgTypes[46] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use SegmentParameterFilterScoping.ProtoReflect.Descriptor instead. func (*SegmentParameterFilterScoping) Descriptor() ([]byte, []int) { return file_google_analytics_data_v1alpha_data_proto_rawDescGZIP(), []int{46} } func (x *SegmentParameterFilterScoping) GetInAnyNDayPeriod() int64 { if x != nil && x.InAnyNDayPeriod != nil { return *x.InAnyNDayPeriod } return 0 } // Expresses combinations of funnel filters. type FunnelFilterExpression struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // Specify one type of filter for `FunnelFilterExpression`. // // Types that are assignable to Expr: // *FunnelFilterExpression_AndGroup // *FunnelFilterExpression_OrGroup // *FunnelFilterExpression_NotExpression // *FunnelFilterExpression_FunnelFieldFilter // *FunnelFilterExpression_FunnelEventFilter Expr isFunnelFilterExpression_Expr `protobuf_oneof:"expr"` } func (x *FunnelFilterExpression) Reset() { *x = FunnelFilterExpression{} if protoimpl.UnsafeEnabled { mi := &file_google_analytics_data_v1alpha_data_proto_msgTypes[47] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *FunnelFilterExpression) String() string { return protoimpl.X.MessageStringOf(x) } func (*FunnelFilterExpression) ProtoMessage() {} func (x *FunnelFilterExpression) ProtoReflect() protoreflect.Message { mi := &file_google_analytics_data_v1alpha_data_proto_msgTypes[47] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use FunnelFilterExpression.ProtoReflect.Descriptor instead. func (*FunnelFilterExpression) Descriptor() ([]byte, []int) { return file_google_analytics_data_v1alpha_data_proto_rawDescGZIP(), []int{47} } func (m *FunnelFilterExpression) GetExpr() isFunnelFilterExpression_Expr { if m != nil { return m.Expr } return nil } func (x *FunnelFilterExpression) GetAndGroup() *FunnelFilterExpressionList { if x, ok := x.GetExpr().(*FunnelFilterExpression_AndGroup); ok { return x.AndGroup } return nil } func (x *FunnelFilterExpression) GetOrGroup() *FunnelFilterExpressionList { if x, ok := x.GetExpr().(*FunnelFilterExpression_OrGroup); ok { return x.OrGroup } return nil } func (x *FunnelFilterExpression) GetNotExpression() *FunnelFilterExpression { if x, ok := x.GetExpr().(*FunnelFilterExpression_NotExpression); ok { return x.NotExpression } return nil } func (x *FunnelFilterExpression) GetFunnelFieldFilter() *FunnelFieldFilter { if x, ok := x.GetExpr().(*FunnelFilterExpression_FunnelFieldFilter); ok { return x.FunnelFieldFilter } return nil } func (x *FunnelFilterExpression) GetFunnelEventFilter() *FunnelEventFilter { if x, ok := x.GetExpr().(*FunnelFilterExpression_FunnelEventFilter); ok { return x.FunnelEventFilter } return nil } type isFunnelFilterExpression_Expr interface { isFunnelFilterExpression_Expr() } type FunnelFilterExpression_AndGroup struct { // The FunnelFilterExpression in `andGroup` have an AND relationship. AndGroup *FunnelFilterExpressionList `protobuf:"bytes,1,opt,name=and_group,json=andGroup,proto3,oneof"` } type FunnelFilterExpression_OrGroup struct { // The FunnelFilterExpression in `orGroup` have an OR relationship. OrGroup *FunnelFilterExpressionList `protobuf:"bytes,2,opt,name=or_group,json=orGroup,proto3,oneof"` } type FunnelFilterExpression_NotExpression struct { // The FunnelFilterExpression is NOT of `notExpression`. NotExpression *FunnelFilterExpression `protobuf:"bytes,3,opt,name=not_expression,json=notExpression,proto3,oneof"` } type FunnelFilterExpression_FunnelFieldFilter struct { // A funnel filter for a dimension or metric. FunnelFieldFilter *FunnelFieldFilter `protobuf:"bytes,4,opt,name=funnel_field_filter,json=funnelFieldFilter,proto3,oneof"` } type FunnelFilterExpression_FunnelEventFilter struct { // Creates a filter that matches events of a single event name. If a // parameter filter expression is specified, only the subset of events that // match both the single event name and the parameter filter expressions // match this event filter. FunnelEventFilter *FunnelEventFilter `protobuf:"bytes,5,opt,name=funnel_event_filter,json=funnelEventFilter,proto3,oneof"` } func (*FunnelFilterExpression_AndGroup) isFunnelFilterExpression_Expr() {} func (*FunnelFilterExpression_OrGroup) isFunnelFilterExpression_Expr() {} func (*FunnelFilterExpression_NotExpression) isFunnelFilterExpression_Expr() {} func (*FunnelFilterExpression_FunnelFieldFilter) isFunnelFilterExpression_Expr() {} func (*FunnelFilterExpression_FunnelEventFilter) isFunnelFilterExpression_Expr() {} // A list of funnel filter expressions. type FunnelFilterExpressionList struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // The list of funnel filter expressions. Expressions []*FunnelFilterExpression `protobuf:"bytes,1,rep,name=expressions,proto3" json:"expressions,omitempty"` } func (x *FunnelFilterExpressionList) Reset() { *x = FunnelFilterExpressionList{} if protoimpl.UnsafeEnabled { mi := &file_google_analytics_data_v1alpha_data_proto_msgTypes[48] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *FunnelFilterExpressionList) String() string { return protoimpl.X.MessageStringOf(x) } func (*FunnelFilterExpressionList) ProtoMessage() {} func (x *FunnelFilterExpressionList) ProtoReflect() protoreflect.Message { mi := &file_google_analytics_data_v1alpha_data_proto_msgTypes[48] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use FunnelFilterExpressionList.ProtoReflect.Descriptor instead. func (*FunnelFilterExpressionList) Descriptor() ([]byte, []int) { return file_google_analytics_data_v1alpha_data_proto_rawDescGZIP(), []int{48} } func (x *FunnelFilterExpressionList) GetExpressions() []*FunnelFilterExpression { if x != nil { return x.Expressions } return nil } // An expression to filter dimension or metric values. type FunnelFieldFilter struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // The dimension name or metric name. FieldName string `protobuf:"bytes,1,opt,name=field_name,json=fieldName,proto3" json:"field_name,omitempty"` // Specify one type of filter. // // Types that are assignable to OneFilter: // *FunnelFieldFilter_StringFilter // *FunnelFieldFilter_InListFilter // *FunnelFieldFilter_NumericFilter // *FunnelFieldFilter_BetweenFilter OneFilter isFunnelFieldFilter_OneFilter `protobuf_oneof:"one_filter"` } func (x *FunnelFieldFilter) Reset() { *x = FunnelFieldFilter{} if protoimpl.UnsafeEnabled { mi := &file_google_analytics_data_v1alpha_data_proto_msgTypes[49] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *FunnelFieldFilter) String() string { return protoimpl.X.MessageStringOf(x) } func (*FunnelFieldFilter) ProtoMessage() {} func (x *FunnelFieldFilter) ProtoReflect() protoreflect.Message { mi := &file_google_analytics_data_v1alpha_data_proto_msgTypes[49] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use FunnelFieldFilter.ProtoReflect.Descriptor instead. func (*FunnelFieldFilter) Descriptor() ([]byte, []int) { return file_google_analytics_data_v1alpha_data_proto_rawDescGZIP(), []int{49} } func (x *FunnelFieldFilter) GetFieldName() string { if x != nil { return x.FieldName } return "" } func (m *FunnelFieldFilter) GetOneFilter() isFunnelFieldFilter_OneFilter { if m != nil { return m.OneFilter } return nil } func (x *FunnelFieldFilter) GetStringFilter() *StringFilter { if x, ok := x.GetOneFilter().(*FunnelFieldFilter_StringFilter); ok { return x.StringFilter } return nil } func (x *FunnelFieldFilter) GetInListFilter() *InListFilter { if x, ok := x.GetOneFilter().(*FunnelFieldFilter_InListFilter); ok { return x.InListFilter } return nil } func (x *FunnelFieldFilter) GetNumericFilter() *NumericFilter { if x, ok := x.GetOneFilter().(*FunnelFieldFilter_NumericFilter); ok { return x.NumericFilter } return nil } func (x *FunnelFieldFilter) GetBetweenFilter() *BetweenFilter { if x, ok := x.GetOneFilter().(*FunnelFieldFilter_BetweenFilter); ok { return x.BetweenFilter } return nil } type isFunnelFieldFilter_OneFilter interface { isFunnelFieldFilter_OneFilter() } type FunnelFieldFilter_StringFilter struct { // Strings related filter. StringFilter *StringFilter `protobuf:"bytes,4,opt,name=string_filter,json=stringFilter,proto3,oneof"` } type FunnelFieldFilter_InListFilter struct { // A filter for in list values. InListFilter *InListFilter `protobuf:"bytes,5,opt,name=in_list_filter,json=inListFilter,proto3,oneof"` } type FunnelFieldFilter_NumericFilter struct { // A filter for numeric or date values. NumericFilter *NumericFilter `protobuf:"bytes,6,opt,name=numeric_filter,json=numericFilter,proto3,oneof"` } type FunnelFieldFilter_BetweenFilter struct { // A filter for between two values. BetweenFilter *BetweenFilter `protobuf:"bytes,7,opt,name=between_filter,json=betweenFilter,proto3,oneof"` } func (*FunnelFieldFilter_StringFilter) isFunnelFieldFilter_OneFilter() {} func (*FunnelFieldFilter_InListFilter) isFunnelFieldFilter_OneFilter() {} func (*FunnelFieldFilter_NumericFilter) isFunnelFieldFilter_OneFilter() {} func (*FunnelFieldFilter_BetweenFilter) isFunnelFieldFilter_OneFilter() {} // Creates a filter that matches events of a single event name. If a parameter // filter expression is specified, only the subset of events that match both the // single event name and the parameter filter expressions match this event // filter. type FunnelEventFilter struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // This filter matches events of this single event name. Event name is // required. EventName *string `protobuf:"bytes,1,opt,name=event_name,json=eventName,proto3,oneof" json:"event_name,omitempty"` // If specified, this filter matches events that match both the single event // name and the parameter filter expressions. // // Inside the parameter filter expression, only parameter filters are // available. FunnelParameterFilterExpression *FunnelParameterFilterExpression `protobuf:"bytes,2,opt,name=funnel_parameter_filter_expression,json=funnelParameterFilterExpression,proto3,oneof" json:"funnel_parameter_filter_expression,omitempty"` } func (x *FunnelEventFilter) Reset() { *x = FunnelEventFilter{} if protoimpl.UnsafeEnabled { mi := &file_google_analytics_data_v1alpha_data_proto_msgTypes[50] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *FunnelEventFilter) String() string { return protoimpl.X.MessageStringOf(x) } func (*FunnelEventFilter) ProtoMessage() {} func (x *FunnelEventFilter) ProtoReflect() protoreflect.Message { mi := &file_google_analytics_data_v1alpha_data_proto_msgTypes[50] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use FunnelEventFilter.ProtoReflect.Descriptor instead. func (*FunnelEventFilter) Descriptor() ([]byte, []int) { return file_google_analytics_data_v1alpha_data_proto_rawDescGZIP(), []int{50} } func (x *FunnelEventFilter) GetEventName() string { if x != nil && x.EventName != nil { return *x.EventName } return "" } func (x *FunnelEventFilter) GetFunnelParameterFilterExpression() *FunnelParameterFilterExpression { if x != nil { return x.FunnelParameterFilterExpression } return nil } // Expresses combinations of funnel filters on parameters. type FunnelParameterFilterExpression struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // Specify one type of filter for `FunnelParameterFilterExpression`. // // Types that are assignable to Expr: // *FunnelParameterFilterExpression_AndGroup // *FunnelParameterFilterExpression_OrGroup // *FunnelParameterFilterExpression_NotExpression // *FunnelParameterFilterExpression_FunnelParameterFilter Expr isFunnelParameterFilterExpression_Expr `protobuf_oneof:"expr"` } func (x *FunnelParameterFilterExpression) Reset() { *x = FunnelParameterFilterExpression{} if protoimpl.UnsafeEnabled { mi := &file_google_analytics_data_v1alpha_data_proto_msgTypes[51] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *FunnelParameterFilterExpression) String() string { return protoimpl.X.MessageStringOf(x) } func (*FunnelParameterFilterExpression) ProtoMessage() {} func (x *FunnelParameterFilterExpression) ProtoReflect() protoreflect.Message { mi := &file_google_analytics_data_v1alpha_data_proto_msgTypes[51] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use FunnelParameterFilterExpression.ProtoReflect.Descriptor instead. func (*FunnelParameterFilterExpression) Descriptor() ([]byte, []int) { return file_google_analytics_data_v1alpha_data_proto_rawDescGZIP(), []int{51} } func (m *FunnelParameterFilterExpression) GetExpr() isFunnelParameterFilterExpression_Expr { if m != nil { return m.Expr } return nil } func (x *FunnelParameterFilterExpression) GetAndGroup() *FunnelParameterFilterExpressionList { if x, ok := x.GetExpr().(*FunnelParameterFilterExpression_AndGroup); ok { return x.AndGroup } return nil } func (x *FunnelParameterFilterExpression) GetOrGroup() *FunnelParameterFilterExpressionList { if x, ok := x.GetExpr().(*FunnelParameterFilterExpression_OrGroup); ok { return x.OrGroup } return nil } func (x *FunnelParameterFilterExpression) GetNotExpression() *FunnelParameterFilterExpression { if x, ok := x.GetExpr().(*FunnelParameterFilterExpression_NotExpression); ok { return x.NotExpression } return nil } func (x *FunnelParameterFilterExpression) GetFunnelParameterFilter() *FunnelParameterFilter { if x, ok := x.GetExpr().(*FunnelParameterFilterExpression_FunnelParameterFilter); ok { return x.FunnelParameterFilter } return nil } type isFunnelParameterFilterExpression_Expr interface { isFunnelParameterFilterExpression_Expr() } type FunnelParameterFilterExpression_AndGroup struct { // The FunnelParameterFilterExpression in `andGroup` have an AND // relationship. AndGroup *FunnelParameterFilterExpressionList `protobuf:"bytes,1,opt,name=and_group,json=andGroup,proto3,oneof"` } type FunnelParameterFilterExpression_OrGroup struct { // The FunnelParameterFilterExpression in `orGroup` have an OR // relationship. OrGroup *FunnelParameterFilterExpressionList `protobuf:"bytes,2,opt,name=or_group,json=orGroup,proto3,oneof"` } type FunnelParameterFilterExpression_NotExpression struct { // The FunnelParameterFilterExpression is NOT of `notExpression`. NotExpression *FunnelParameterFilterExpression `protobuf:"bytes,3,opt,name=not_expression,json=notExpression,proto3,oneof"` } type FunnelParameterFilterExpression_FunnelParameterFilter struct { // A primitive funnel parameter filter. FunnelParameterFilter *FunnelParameterFilter `protobuf:"bytes,4,opt,name=funnel_parameter_filter,json=funnelParameterFilter,proto3,oneof"` } func (*FunnelParameterFilterExpression_AndGroup) isFunnelParameterFilterExpression_Expr() {} func (*FunnelParameterFilterExpression_OrGroup) isFunnelParameterFilterExpression_Expr() {} func (*FunnelParameterFilterExpression_NotExpression) isFunnelParameterFilterExpression_Expr() {} func (*FunnelParameterFilterExpression_FunnelParameterFilter) isFunnelParameterFilterExpression_Expr() { } // A list of funnel parameter filter expressions. type FunnelParameterFilterExpressionList struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // The list of funnel parameter filter expressions. Expressions []*FunnelParameterFilterExpression `protobuf:"bytes,1,rep,name=expressions,proto3" json:"expressions,omitempty"` } func (x *FunnelParameterFilterExpressionList) Reset() { *x = FunnelParameterFilterExpressionList{} if protoimpl.UnsafeEnabled { mi := &file_google_analytics_data_v1alpha_data_proto_msgTypes[52] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *FunnelParameterFilterExpressionList) String() string { return protoimpl.X.MessageStringOf(x) } func (*FunnelParameterFilterExpressionList) ProtoMessage() {} func (x *FunnelParameterFilterExpressionList) ProtoReflect() protoreflect.Message { mi := &file_google_analytics_data_v1alpha_data_proto_msgTypes[52] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use FunnelParameterFilterExpressionList.ProtoReflect.Descriptor instead. func (*FunnelParameterFilterExpressionList) Descriptor() ([]byte, []int) { return file_google_analytics_data_v1alpha_data_proto_rawDescGZIP(), []int{52} } func (x *FunnelParameterFilterExpressionList) GetExpressions() []*FunnelParameterFilterExpression { if x != nil { return x.Expressions } return nil } // An expression to filter parameter values in a funnel. type FunnelParameterFilter struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // The field that is being filtered. // // Types that are assignable to OneParameter: // *FunnelParameterFilter_EventParameterName // *FunnelParameterFilter_ItemParameterName OneParameter isFunnelParameterFilter_OneParameter `protobuf_oneof:"one_parameter"` // Specify one type of filter. // // Types that are assignable to OneFilter: // *FunnelParameterFilter_StringFilter // *FunnelParameterFilter_InListFilter // *FunnelParameterFilter_NumericFilter // *FunnelParameterFilter_BetweenFilter OneFilter isFunnelParameterFilter_OneFilter `protobuf_oneof:"one_filter"` } func (x *FunnelParameterFilter) Reset() { *x = FunnelParameterFilter{} if protoimpl.UnsafeEnabled { mi := &file_google_analytics_data_v1alpha_data_proto_msgTypes[53] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *FunnelParameterFilter) String() string { return protoimpl.X.MessageStringOf(x) } func (*FunnelParameterFilter) ProtoMessage() {} func (x *FunnelParameterFilter) ProtoReflect() protoreflect.Message { mi := &file_google_analytics_data_v1alpha_data_proto_msgTypes[53] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use FunnelParameterFilter.ProtoReflect.Descriptor instead. func (*FunnelParameterFilter) Descriptor() ([]byte, []int) { return file_google_analytics_data_v1alpha_data_proto_rawDescGZIP(), []int{53} } func (m *FunnelParameterFilter) GetOneParameter() isFunnelParameterFilter_OneParameter { if m != nil { return m.OneParameter } return nil } func (x *FunnelParameterFilter) GetEventParameterName() string { if x, ok := x.GetOneParameter().(*FunnelParameterFilter_EventParameterName); ok { return x.EventParameterName } return "" } func (x *FunnelParameterFilter) GetItemParameterName() string { if x, ok := x.GetOneParameter().(*FunnelParameterFilter_ItemParameterName); ok { return x.ItemParameterName } return "" } func (m *FunnelParameterFilter) GetOneFilter() isFunnelParameterFilter_OneFilter { if m != nil { return m.OneFilter } return nil } func (x *FunnelParameterFilter) GetStringFilter() *StringFilter { if x, ok := x.GetOneFilter().(*FunnelParameterFilter_StringFilter); ok { return x.StringFilter } return nil } func (x *FunnelParameterFilter) GetInListFilter() *InListFilter { if x, ok := x.GetOneFilter().(*FunnelParameterFilter_InListFilter); ok { return x.InListFilter } return nil } func (x *FunnelParameterFilter) GetNumericFilter() *NumericFilter { if x, ok := x.GetOneFilter().(*FunnelParameterFilter_NumericFilter); ok { return x.NumericFilter } return nil } func (x *FunnelParameterFilter) GetBetweenFilter() *BetweenFilter { if x, ok := x.GetOneFilter().(*FunnelParameterFilter_BetweenFilter); ok { return x.BetweenFilter } return nil } type isFunnelParameterFilter_OneParameter interface { isFunnelParameterFilter_OneParameter() } type FunnelParameterFilter_EventParameterName struct { // This filter will be evaluated on the specified event parameter. Event // parameters are logged as parameters of the event. Event parameters // include fields like "firebase_screen" & "currency". // // Event parameters can only be used in segments & funnels and can only be // used in a descendent filter from an EventFilter. In a descendent filter // from an EventFilter either event or item parameters should be used. EventParameterName string `protobuf:"bytes,1,opt,name=event_parameter_name,json=eventParameterName,proto3,oneof"` } type FunnelParameterFilter_ItemParameterName struct { // This filter will be evaluated on the specified item parameter. Item // parameters are logged as parameters in the item array. Item parameters // include fields like "item_name" & "item_category". // // Item parameters can only be used in segments & funnels and can only be // used in a descendent filter from an EventFilter. In a descendent filter // from an EventFilter either event or item parameters should be used. // // Item parameters are only available in ecommerce events. To learn more // about ecommerce events, see the [Measure ecommerce] // (https://developers.google.com/analytics/devguides/collection/ga4/ecommerce) // guide. ItemParameterName string `protobuf:"bytes,2,opt,name=item_parameter_name,json=itemParameterName,proto3,oneof"` } func (*FunnelParameterFilter_EventParameterName) isFunnelParameterFilter_OneParameter() {} func (*FunnelParameterFilter_ItemParameterName) isFunnelParameterFilter_OneParameter() {} type isFunnelParameterFilter_OneFilter interface { isFunnelParameterFilter_OneFilter() } type FunnelParameterFilter_StringFilter struct { // Strings related filter. StringFilter *StringFilter `protobuf:"bytes,4,opt,name=string_filter,json=stringFilter,proto3,oneof"` } type FunnelParameterFilter_InListFilter struct { // A filter for in list values. InListFilter *InListFilter `protobuf:"bytes,5,opt,name=in_list_filter,json=inListFilter,proto3,oneof"` } type FunnelParameterFilter_NumericFilter struct { // A filter for numeric or date values. NumericFilter *NumericFilter `protobuf:"bytes,6,opt,name=numeric_filter,json=numericFilter,proto3,oneof"` } type FunnelParameterFilter_BetweenFilter struct { // A filter for between two values. BetweenFilter *BetweenFilter `protobuf:"bytes,7,opt,name=between_filter,json=betweenFilter,proto3,oneof"` } func (*FunnelParameterFilter_StringFilter) isFunnelParameterFilter_OneFilter() {} func (*FunnelParameterFilter_InListFilter) isFunnelParameterFilter_OneFilter() {} func (*FunnelParameterFilter_NumericFilter) isFunnelParameterFilter_OneFilter() {} func (*FunnelParameterFilter_BetweenFilter) isFunnelParameterFilter_OneFilter() {} // The funnel report's response metadata carries additional information about // the funnel report. type FunnelResponseMetadata struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // If funnel report results are // [sampled](https://support.google.com/analytics/answer/2637192), this // describes what percentage of events were used in this funnel report. One // `samplingMetadatas` is populated for each date range. Each // `samplingMetadatas` corresponds to a date range in order that date ranges // were specified in the request. // // However if the results are not sampled, this field will not be defined. SamplingMetadatas []*SamplingMetadata `protobuf:"bytes,1,rep,name=sampling_metadatas,json=samplingMetadatas,proto3" json:"sampling_metadatas,omitempty"` } func (x *FunnelResponseMetadata) Reset() { *x = FunnelResponseMetadata{} if protoimpl.UnsafeEnabled { mi := &file_google_analytics_data_v1alpha_data_proto_msgTypes[54] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *FunnelResponseMetadata) String() string { return protoimpl.X.MessageStringOf(x) } func (*FunnelResponseMetadata) ProtoMessage() {} func (x *FunnelResponseMetadata) ProtoReflect() protoreflect.Message { mi := &file_google_analytics_data_v1alpha_data_proto_msgTypes[54] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use FunnelResponseMetadata.ProtoReflect.Descriptor instead. func (*FunnelResponseMetadata) Descriptor() ([]byte, []int) { return file_google_analytics_data_v1alpha_data_proto_rawDescGZIP(), []int{54} } func (x *FunnelResponseMetadata) GetSamplingMetadatas() []*SamplingMetadata { if x != nil { return x.SamplingMetadatas } return nil } // If funnel report results are // [sampled](https://support.google.com/analytics/answer/2637192), this // metadata describes what percentage of events were used in this funnel // report for a date range. Sampling is the practice of analyzing a subset of // all data in order to uncover the meaningful information in the larger data // set. type SamplingMetadata struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // The total number of events read in this sampled report for a date range. // This is the size of the subset this property's data that was analyzed in // this funnel report. SamplesReadCount int64 `protobuf:"varint,1,opt,name=samples_read_count,json=samplesReadCount,proto3" json:"samples_read_count,omitempty"` // The total number of events present in this property's data that could // have been analyzed in this funnel report for a date range. Sampling // uncovers the meaningful information about the larger data set, and this // is the size of the larger data set. // // To calculate the percentage of available data that was used in this // funnel report, compute `samplesReadCount/samplingSpaceSize`. SamplingSpaceSize int64 `protobuf:"varint,2,opt,name=sampling_space_size,json=samplingSpaceSize,proto3" json:"sampling_space_size,omitempty"` } func (x *SamplingMetadata) Reset() { *x = SamplingMetadata{} if protoimpl.UnsafeEnabled { mi := &file_google_analytics_data_v1alpha_data_proto_msgTypes[55] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *SamplingMetadata) String() string { return protoimpl.X.MessageStringOf(x) } func (*SamplingMetadata) ProtoMessage() {} func (x *SamplingMetadata) ProtoReflect() protoreflect.Message { mi := &file_google_analytics_data_v1alpha_data_proto_msgTypes[55] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use SamplingMetadata.ProtoReflect.Descriptor instead. func (*SamplingMetadata) Descriptor() ([]byte, []int) { return file_google_analytics_data_v1alpha_data_proto_rawDescGZIP(), []int{55} } func (x *SamplingMetadata) GetSamplesReadCount() int64 { if x != nil { return x.SamplesReadCount } return 0 } func (x *SamplingMetadata) GetSamplingSpaceSize() int64 { if x != nil { return x.SamplingSpaceSize } return 0 } // Used to convert a dimension value to a single case. type DimensionExpression_CaseExpression struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // Name of a dimension. The name must refer back to a name in dimensions // field of the request. DimensionName string `protobuf:"bytes,1,opt,name=dimension_name,json=dimensionName,proto3" json:"dimension_name,omitempty"` } func (x *DimensionExpression_CaseExpression) Reset() { *x = DimensionExpression_CaseExpression{} if protoimpl.UnsafeEnabled { mi := &file_google_analytics_data_v1alpha_data_proto_msgTypes[56] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *DimensionExpression_CaseExpression) String() string { return protoimpl.X.MessageStringOf(x) } func (*DimensionExpression_CaseExpression) ProtoMessage() {} func (x *DimensionExpression_CaseExpression) ProtoReflect() protoreflect.Message { mi := &file_google_analytics_data_v1alpha_data_proto_msgTypes[56] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use DimensionExpression_CaseExpression.ProtoReflect.Descriptor instead. func (*DimensionExpression_CaseExpression) Descriptor() ([]byte, []int) { return file_google_analytics_data_v1alpha_data_proto_rawDescGZIP(), []int{2, 0} } func (x *DimensionExpression_CaseExpression) GetDimensionName() string { if x != nil { return x.DimensionName } return "" } // Used to combine dimension values to a single dimension. type DimensionExpression_ConcatenateExpression struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // Names of dimensions. The names must refer back to names in the dimensions // field of the request. DimensionNames []string `protobuf:"bytes,1,rep,name=dimension_names,json=dimensionNames,proto3" json:"dimension_names,omitempty"` // The delimiter placed between dimension names. // // Delimiters are often single characters such as "|" or "," but can be // longer strings. If a dimension value contains the delimiter, both will be // present in response with no distinction. For example if dimension 1 value // = "US,FR", dimension 2 value = "JP", and delimiter = ",", then the // response will contain "US,FR,JP". Delimiter string `protobuf:"bytes,2,opt,name=delimiter,proto3" json:"delimiter,omitempty"` } func (x *DimensionExpression_ConcatenateExpression) Reset() { *x = DimensionExpression_ConcatenateExpression{} if protoimpl.UnsafeEnabled { mi := &file_google_analytics_data_v1alpha_data_proto_msgTypes[57] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *DimensionExpression_ConcatenateExpression) String() string { return protoimpl.X.MessageStringOf(x) } func (*DimensionExpression_ConcatenateExpression) ProtoMessage() {} func (x *DimensionExpression_ConcatenateExpression) ProtoReflect() protoreflect.Message { mi := &file_google_analytics_data_v1alpha_data_proto_msgTypes[57] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use DimensionExpression_ConcatenateExpression.ProtoReflect.Descriptor instead. func (*DimensionExpression_ConcatenateExpression) Descriptor() ([]byte, []int) { return file_google_analytics_data_v1alpha_data_proto_rawDescGZIP(), []int{2, 1} } func (x *DimensionExpression_ConcatenateExpression) GetDimensionNames() []string { if x != nil { return x.DimensionNames } return nil } func (x *DimensionExpression_ConcatenateExpression) GetDelimiter() string { if x != nil { return x.Delimiter } return "" } var File_google_analytics_data_v1alpha_data_proto protoreflect.FileDescriptor var file_google_analytics_data_v1alpha_data_proto_rawDesc = []byte{ 0x0a, 0x28, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x74, 0x69, 0x63, 0x73, 0x2f, 0x64, 0x61, 0x74, 0x61, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2f, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x1d, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x74, 0x69, 0x63, 0x73, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x1a, 0x1e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x59, 0x0a, 0x09, 0x44, 0x61, 0x74, 0x65, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x44, 0x61, 0x74, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x65, 0x6e, 0x64, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x65, 0x6e, 0x64, 0x44, 0x61, 0x74, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x86, 0x01, 0x0a, 0x09, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x65, 0x0a, 0x14, 0x64, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x65, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x74, 0x69, 0x63, 0x73, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x45, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x13, 0x64, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x45, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0xf6, 0x03, 0x0a, 0x13, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x45, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x62, 0x0a, 0x0a, 0x6c, 0x6f, 0x77, 0x65, 0x72, 0x5f, 0x63, 0x61, 0x73, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x41, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x74, 0x69, 0x63, 0x73, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x45, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x43, 0x61, 0x73, 0x65, 0x45, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x09, 0x6c, 0x6f, 0x77, 0x65, 0x72, 0x43, 0x61, 0x73, 0x65, 0x12, 0x62, 0x0a, 0x0a, 0x75, 0x70, 0x70, 0x65, 0x72, 0x5f, 0x63, 0x61, 0x73, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x41, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x74, 0x69, 0x63, 0x73, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x45, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x43, 0x61, 0x73, 0x65, 0x45, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x09, 0x75, 0x70, 0x70, 0x65, 0x72, 0x43, 0x61, 0x73, 0x65, 0x12, 0x6c, 0x0a, 0x0b, 0x63, 0x6f, 0x6e, 0x63, 0x61, 0x74, 0x65, 0x6e, 0x61, 0x74, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x48, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x74, 0x69, 0x63, 0x73, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x45, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x43, 0x6f, 0x6e, 0x63, 0x61, 0x74, 0x65, 0x6e, 0x61, 0x74, 0x65, 0x45, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x0b, 0x63, 0x6f, 0x6e, 0x63, 0x61, 0x74, 0x65, 0x6e, 0x61, 0x74, 0x65, 0x1a, 0x37, 0x0a, 0x0e, 0x43, 0x61, 0x73, 0x65, 0x45, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x25, 0x0a, 0x0e, 0x64, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x64, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x1a, 0x5e, 0x0a, 0x15, 0x43, 0x6f, 0x6e, 0x63, 0x61, 0x74, 0x65, 0x6e, 0x61, 0x74, 0x65, 0x45, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x27, 0x0a, 0x0f, 0x64, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0e, 0x64, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x64, 0x65, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x64, 0x65, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x65, 0x72, 0x42, 0x10, 0x0a, 0x0e, 0x6f, 0x6e, 0x65, 0x5f, 0x65, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0xdb, 0x02, 0x0a, 0x10, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x45, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x52, 0x0a, 0x09, 0x61, 0x6e, 0x64, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x74, 0x69, 0x63, 0x73, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x45, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x48, 0x00, 0x52, 0x08, 0x61, 0x6e, 0x64, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x50, 0x0a, 0x08, 0x6f, 0x72, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x74, 0x69, 0x63, 0x73, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x45, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x48, 0x00, 0x52, 0x07, 0x6f, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x58, 0x0a, 0x0e, 0x6e, 0x6f, 0x74, 0x5f, 0x65, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x74, 0x69, 0x63, 0x73, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x45, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x0d, 0x6e, 0x6f, 0x74, 0x45, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x3f, 0x0a, 0x06, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x74, 0x69, 0x63, 0x73, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x48, 0x00, 0x52, 0x06, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x42, 0x06, 0x0a, 0x04, 0x65, 0x78, 0x70, 0x72, 0x22, 0x69, 0x0a, 0x14, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x45, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x51, 0x0a, 0x0b, 0x65, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x74, 0x69, 0x63, 0x73, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x45, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x0b, 0x65, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x8c, 0x03, 0x0a, 0x06, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x1d, 0x0a, 0x0a, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x52, 0x0a, 0x0d, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x74, 0x69, 0x63, 0x73, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x48, 0x00, 0x52, 0x0c, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x53, 0x0a, 0x0e, 0x69, 0x6e, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x74, 0x69, 0x63, 0x73, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x49, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x48, 0x00, 0x52, 0x0c, 0x69, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x55, 0x0a, 0x0e, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x5f, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x74, 0x69, 0x63, 0x73, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x48, 0x00, 0x52, 0x0d, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x55, 0x0a, 0x0e, 0x62, 0x65, 0x74, 0x77, 0x65, 0x65, 0x6e, 0x5f, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x74, 0x69, 0x63, 0x73, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x42, 0x65, 0x74, 0x77, 0x65, 0x65, 0x6e, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x48, 0x00, 0x52, 0x0d, 0x62, 0x65, 0x74, 0x77, 0x65, 0x65, 0x6e, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x42, 0x0c, 0x0a, 0x0a, 0x6f, 0x6e, 0x65, 0x5f, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x22, 0xa9, 0x02, 0x0a, 0x0c, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x54, 0x0a, 0x0a, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x35, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x74, 0x69, 0x63, 0x73, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x2e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x54, 0x79, 0x70, 0x65, 0x52, 0x09, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x54, 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x63, 0x61, 0x73, 0x65, 0x5f, 0x73, 0x65, 0x6e, 0x73, 0x69, 0x74, 0x69, 0x76, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x63, 0x61, 0x73, 0x65, 0x53, 0x65, 0x6e, 0x73, 0x69, 0x74, 0x69, 0x76, 0x65, 0x22, 0x85, 0x01, 0x0a, 0x09, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1a, 0x0a, 0x16, 0x4d, 0x41, 0x54, 0x43, 0x48, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x09, 0x0a, 0x05, 0x45, 0x58, 0x41, 0x43, 0x54, 0x10, 0x01, 0x12, 0x0f, 0x0a, 0x0b, 0x42, 0x45, 0x47, 0x49, 0x4e, 0x53, 0x5f, 0x57, 0x49, 0x54, 0x48, 0x10, 0x02, 0x12, 0x0d, 0x0a, 0x09, 0x45, 0x4e, 0x44, 0x53, 0x5f, 0x57, 0x49, 0x54, 0x48, 0x10, 0x03, 0x12, 0x0c, 0x0a, 0x08, 0x43, 0x4f, 0x4e, 0x54, 0x41, 0x49, 0x4e, 0x53, 0x10, 0x04, 0x12, 0x0f, 0x0a, 0x0b, 0x46, 0x55, 0x4c, 0x4c, 0x5f, 0x52, 0x45, 0x47, 0x45, 0x58, 0x50, 0x10, 0x05, 0x12, 0x12, 0x0a, 0x0e, 0x50, 0x41, 0x52, 0x54, 0x49, 0x41, 0x4c, 0x5f, 0x52, 0x45, 0x47, 0x45, 0x58, 0x50, 0x10, 0x06, 0x22, 0x4d, 0x0a, 0x0c, 0x49, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x63, 0x61, 0x73, 0x65, 0x5f, 0x73, 0x65, 0x6e, 0x73, 0x69, 0x74, 0x69, 0x76, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x63, 0x61, 0x73, 0x65, 0x53, 0x65, 0x6e, 0x73, 0x69, 0x74, 0x69, 0x76, 0x65, 0x22, 0xb0, 0x02, 0x0a, 0x0d, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x54, 0x0a, 0x09, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x36, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x74, 0x69, 0x63, 0x73, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x2e, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x09, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x41, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x74, 0x69, 0x63, 0x73, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x85, 0x01, 0x0a, 0x09, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x19, 0x0a, 0x15, 0x4f, 0x50, 0x45, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x09, 0x0a, 0x05, 0x45, 0x51, 0x55, 0x41, 0x4c, 0x10, 0x01, 0x12, 0x0d, 0x0a, 0x09, 0x4c, 0x45, 0x53, 0x53, 0x5f, 0x54, 0x48, 0x41, 0x4e, 0x10, 0x02, 0x12, 0x16, 0x0a, 0x12, 0x4c, 0x45, 0x53, 0x53, 0x5f, 0x54, 0x48, 0x41, 0x4e, 0x5f, 0x4f, 0x52, 0x5f, 0x45, 0x51, 0x55, 0x41, 0x4c, 0x10, 0x03, 0x12, 0x10, 0x0a, 0x0c, 0x47, 0x52, 0x45, 0x41, 0x54, 0x45, 0x52, 0x5f, 0x54, 0x48, 0x41, 0x4e, 0x10, 0x04, 0x12, 0x19, 0x0a, 0x15, 0x47, 0x52, 0x45, 0x41, 0x54, 0x45, 0x52, 0x5f, 0x54, 0x48, 0x41, 0x4e, 0x5f, 0x4f, 0x52, 0x5f, 0x45, 0x51, 0x55, 0x41, 0x4c, 0x10, 0x05, 0x22, 0xa3, 0x01, 0x0a, 0x0d, 0x42, 0x65, 0x74, 0x77, 0x65, 0x65, 0x6e, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x4a, 0x0a, 0x0a, 0x66, 0x72, 0x6f, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x74, 0x69, 0x63, 0x73, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x09, 0x66, 0x72, 0x6f, 0x6d, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x46, 0x0a, 0x08, 0x74, 0x6f, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x74, 0x69, 0x63, 0x73, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x07, 0x74, 0x6f, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x63, 0x0a, 0x0c, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x21, 0x0a, 0x0b, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x48, 0x00, 0x52, 0x0a, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x23, 0x0a, 0x0c, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x01, 0x48, 0x00, 0x52, 0x0b, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x0b, 0x0a, 0x09, 0x6f, 0x6e, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x25, 0x0a, 0x0f, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x61, 0x0a, 0x0c, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x3d, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x29, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x74, 0x69, 0x63, 0x73, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x22, 0xb0, 0x01, 0x0a, 0x03, 0x52, 0x6f, 0x77, 0x12, 0x58, 0x0a, 0x10, 0x64, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x74, 0x69, 0x63, 0x73, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0f, 0x64, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x12, 0x4f, 0x0a, 0x0d, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x74, 0x69, 0x63, 0x73, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0c, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x22, 0x35, 0x0a, 0x0e, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 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, 0x42, 0x0b, 0x0a, 0x09, 0x6f, 0x6e, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x32, 0x0a, 0x0b, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x16, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x0b, 0x0a, 0x09, 0x6f, 0x6e, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x90, 0x04, 0x0a, 0x0d, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x51, 0x75, 0x6f, 0x74, 0x61, 0x12, 0x50, 0x0a, 0x0e, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x64, 0x61, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x74, 0x69, 0x63, 0x73, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x51, 0x75, 0x6f, 0x74, 0x61, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x0c, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x50, 0x65, 0x72, 0x44, 0x61, 0x79, 0x12, 0x52, 0x0a, 0x0f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x68, 0x6f, 0x75, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x74, 0x69, 0x63, 0x73, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x51, 0x75, 0x6f, 0x74, 0x61, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x0d, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x50, 0x65, 0x72, 0x48, 0x6f, 0x75, 0x72, 0x12, 0x5b, 0x0a, 0x13, 0x63, 0x6f, 0x6e, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x74, 0x69, 0x63, 0x73, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x51, 0x75, 0x6f, 0x74, 0x61, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x12, 0x63, 0x6f, 0x6e, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x12, 0x75, 0x0a, 0x22, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x68, 0x6f, 0x75, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x74, 0x69, 0x63, 0x73, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x51, 0x75, 0x6f, 0x74, 0x61, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x1d, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x50, 0x65, 0x72, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x50, 0x65, 0x72, 0x48, 0x6f, 0x75, 0x72, 0x12, 0x84, 0x01, 0x0a, 0x29, 0x70, 0x6f, 0x74, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x6c, 0x79, 0x5f, 0x74, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x65, 0x64, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x68, 0x6f, 0x75, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x74, 0x69, 0x63, 0x73, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x51, 0x75, 0x6f, 0x74, 0x61, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x25, 0x70, 0x6f, 0x74, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x6c, 0x79, 0x54, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x50, 0x65, 0x72, 0x48, 0x6f, 0x75, 0x72, 0x22, 0x47, 0x0a, 0x0b, 0x51, 0x75, 0x6f, 0x74, 0x61, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x72, 0x65, 0x6d, 0x61, 0x69, 0x6e, 0x69, 0x6e, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x72, 0x65, 0x6d, 0x61, 0x69, 0x6e, 0x69, 0x6e, 0x67, 0x22, 0x91, 0x01, 0x0a, 0x0f, 0x46, 0x75, 0x6e, 0x6e, 0x65, 0x6c, 0x42, 0x72, 0x65, 0x61, 0x6b, 0x64, 0x6f, 0x77, 0x6e, 0x12, 0x59, 0x0a, 0x13, 0x62, 0x72, 0x65, 0x61, 0x6b, 0x64, 0x6f, 0x77, 0x6e, 0x5f, 0x64, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x74, 0x69, 0x63, 0x73, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x12, 0x62, 0x72, 0x65, 0x61, 0x6b, 0x64, 0x6f, 0x77, 0x6e, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x19, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x48, 0x00, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x88, 0x01, 0x01, 0x42, 0x08, 0x0a, 0x06, 0x5f, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x22, 0x95, 0x01, 0x0a, 0x10, 0x46, 0x75, 0x6e, 0x6e, 0x65, 0x6c, 0x4e, 0x65, 0x78, 0x74, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x5c, 0x0a, 0x15, 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x64, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x74, 0x69, 0x63, 0x73, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x13, 0x6e, 0x65, 0x78, 0x74, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x19, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x48, 0x00, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x88, 0x01, 0x01, 0x42, 0x08, 0x0a, 0x06, 0x5f, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x22, 0x6f, 0x0a, 0x06, 0x46, 0x75, 0x6e, 0x6e, 0x65, 0x6c, 0x12, 0x24, 0x0a, 0x0e, 0x69, 0x73, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x5f, 0x66, 0x75, 0x6e, 0x6e, 0x65, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x69, 0x73, 0x4f, 0x70, 0x65, 0x6e, 0x46, 0x75, 0x6e, 0x6e, 0x65, 0x6c, 0x12, 0x3f, 0x0a, 0x05, 0x73, 0x74, 0x65, 0x70, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x74, 0x69, 0x63, 0x73, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x46, 0x75, 0x6e, 0x6e, 0x65, 0x6c, 0x53, 0x74, 0x65, 0x70, 0x52, 0x05, 0x73, 0x74, 0x65, 0x70, 0x73, 0x22, 0xc5, 0x02, 0x0a, 0x0a, 0x46, 0x75, 0x6e, 0x6e, 0x65, 0x6c, 0x53, 0x74, 0x65, 0x70, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x35, 0x0a, 0x17, 0x69, 0x73, 0x5f, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6c, 0x79, 0x5f, 0x66, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x5f, 0x62, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x14, 0x69, 0x73, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6c, 0x79, 0x46, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x42, 0x79, 0x12, 0x64, 0x0a, 0x1f, 0x77, 0x69, 0x74, 0x68, 0x69, 0x6e, 0x5f, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x66, 0x72, 0x6f, 0x6d, 0x5f, 0x70, 0x72, 0x69, 0x6f, 0x72, 0x5f, 0x73, 0x74, 0x65, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x1b, 0x77, 0x69, 0x74, 0x68, 0x69, 0x6e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x46, 0x72, 0x6f, 0x6d, 0x50, 0x72, 0x69, 0x6f, 0x72, 0x53, 0x74, 0x65, 0x70, 0x88, 0x01, 0x01, 0x12, 0x62, 0x0a, 0x11, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x5f, 0x65, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x74, 0x69, 0x63, 0x73, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x46, 0x75, 0x6e, 0x6e, 0x65, 0x6c, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x45, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x10, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x45, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x22, 0x0a, 0x20, 0x5f, 0x77, 0x69, 0x74, 0x68, 0x69, 0x6e, 0x5f, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x66, 0x72, 0x6f, 0x6d, 0x5f, 0x70, 0x72, 0x69, 0x6f, 0x72, 0x5f, 0x73, 0x74, 0x65, 0x70, 0x22, 0xcd, 0x02, 0x0a, 0x0f, 0x46, 0x75, 0x6e, 0x6e, 0x65, 0x6c, 0x53, 0x75, 0x62, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x12, 0x5b, 0x0a, 0x11, 0x64, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x74, 0x69, 0x63, 0x73, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x44, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x52, 0x10, 0x64, 0x69, 0x6d, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x12, 0x52, 0x0a, 0x0e, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x5f, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x74, 0x69, 0x63, 0x73, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x52, 0x0d, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x12, 0x36, 0x0a, 0x04, 0x72, 0x6f, 0x77, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x74, 0x69, 0x63, 0x73, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x52, 0x6f, 0x77, 0x52, 0x04, 0x72, 0x6f, 0x77, 0x73, 0x12, 0x51, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x74, 0x69, 0x63, 0x73, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x46, 0x75, 0x6e, 0x6e, 0x65, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0xcc, 0x01, 0x0a, 0x0b, 0x55, 0x73, 0x65, 0x72, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x6a, 0x0a, 0x17, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x63, 0x72, 0x69, 0x74, 0x65, 0x72, 0x69, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x74, 0x69, 0x63, 0x73, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x43, 0x72, 0x69, 0x74, 0x65, 0x72, 0x69, 0x61, 0x52, 0x15, 0x75, 0x73, 0x65, 0x72, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x6f, 0x6e, 0x43, 0x72, 0x69, 0x74, 0x65, 0x72, 0x69, 0x61, 0x12, 0x51, 0x0a, 0x09, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x74, 0x69, 0x63, 0x73, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x45, 0x78, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x09, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0xea, 0x01, 0x0a, 0x13, 0x55, 0x73, 0x65, 0x72, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x43, 0x72, 0x69, 0x74, 0x65, 0x72, 0x69, 0x61, 0x12, 0x6a, 0x0a, 0x14, 0x61, 0x6e, 0x64, 0x5f, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x74, 0x69, 0x63, 0x73, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x12, 0x61, 0x6e, 0x64, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x12, 0x67, 0x0a, 0x13, 0x61, 0x6e, 0x64, 0x5f, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x74, 0x69, 0x63, 0x73, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x11, 0x61, 0x6e, 0x64, 0x53, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x22, 0xf0, 0x01, 0x0a, 0x19, 0x55, 0x73, 0x65, 0x72, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x5f, 0x0a, 0x11, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x63, 0x6f, 0x70, 0x69, 0x6e, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x32, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x74, 0x69, 0x63, 0x73, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x43, 0x72, 0x69, 0x74, 0x65, 0x72, 0x69, 0x61, 0x53, 0x63, 0x6f, 0x70, 0x69, 0x6e, 0x67, 0x52, 0x10, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x63, 0x6f, 0x70, 0x69, 0x6e, 0x67, 0x12, 0x72, 0x0a, 0x19, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x5f, 0x65, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x74, 0x69, 0x63, 0x73, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x45, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x17, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x45, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0xb1, 0x02, 0x0a, 0x18, 0x55, 0x73, 0x65, 0x72, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x5d, 0x0a, 0x10, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x5f, 0x73, 0x63, 0x6f, 0x70, 0x69, 0x6e, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x32, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x74, 0x69, 0x63, 0x73, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x43, 0x72, 0x69, 0x74, 0x65, 0x72, 0x69, 0x61, 0x53, 0x63, 0x6f, 0x70, 0x69, 0x6e, 0x67, 0x52, 0x0f, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x53, 0x63, 0x6f, 0x70, 0x69, 0x6e, 0x67, 0x12, 0x55, 0x0a, 0x19, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x5f, 0x6d, 0x61, 0x78, 0x69, 0x6d, 0x75, 0x6d, 0x5f, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x17, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x4d, 0x61, 0x78, 0x69, 0x6d, 0x75, 0x6d, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x5f, 0x0a, 0x13, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x5f, 0x73, 0x74, 0x65, 0x70, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x74, 0x69, 0x63, 0x73, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x53, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x53, 0x74, 0x65, 0x70, 0x52, 0x11, 0x75, 0x73, 0x65, 0x72, 0x53, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x53, 0x74, 0x65, 0x70, 0x73, 0x22, 0x94, 0x02, 0x0a, 0x10, 0x55, 0x73, 0x65, 0x72, 0x53, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x53, 0x74, 0x65, 0x70, 0x12, 0x35, 0x0a, 0x17, 0x69, 0x73, 0x5f, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6c, 0x79, 0x5f, 0x66, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x5f, 0x62, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x14, 0x69, 0x73, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6c, 0x79, 0x46, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x42, 0x79, 0x12, 0x55, 0x0a, 0x0c, 0x73, 0x74, 0x65, 0x70, 0x5f, 0x73, 0x63, 0x6f, 0x70, 0x69, 0x6e, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x32, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x74, 0x69, 0x63, 0x73, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x43, 0x72, 0x69, 0x74, 0x65, 0x72, 0x69, 0x61, 0x53, 0x63, 0x6f, 0x70, 0x69, 0x6e, 0x67, 0x52, 0x0b, 0x73, 0x74, 0x65, 0x70, 0x53, 0x63, 0x6f, 0x70, 0x69, 0x6e, 0x67, 0x12, 0x72, 0x0a, 0x19, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x5f, 0x65, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x74, 0x69, 0x63, 0x73, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x45, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x17, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x45, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0xf0, 0x01, 0x0a, 0x14, 0x55, 0x73, 0x65, 0x72, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x45, 0x78, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x6c, 0x0a, 0x17, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x34, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x74, 0x69, 0x63, 0x73, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x45, 0x78, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x6f, 0x6e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x15, 0x75, 0x73, 0x65, 0x72, 0x45, 0x78, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x6f, 0x6e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x6a, 0x0a, 0x17, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x63, 0x72, 0x69, 0x74, 0x65, 0x72, 0x69, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x74, 0x69, 0x63, 0x73, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x43, 0x72, 0x69, 0x74, 0x65, 0x72, 0x69, 0x61, 0x52, 0x15, 0x75, 0x73, 0x65, 0x72, 0x45, 0x78, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x6f, 0x6e, 0x43, 0x72, 0x69, 0x74, 0x65, 0x72, 0x69, 0x61, 0x22, 0xdb, 0x01, 0x0a, 0x0e, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x73, 0x0a, 0x1a, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x63, 0x72, 0x69, 0x74, 0x65, 0x72, 0x69, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x74, 0x69, 0x63, 0x73, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x43, 0x72, 0x69, 0x74, 0x65, 0x72, 0x69, 0x61, 0x52, 0x18, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x6f, 0x6e, 0x43, 0x72, 0x69, 0x74, 0x65, 0x72, 0x69, 0x61, 0x12, 0x54, 0x0a, 0x09, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x74, 0x69, 0x63, 0x73, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x45, 0x78, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x09, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x87, 0x01, 0x0a, 0x16, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x43, 0x72, 0x69, 0x74, 0x65, 0x72, 0x69, 0x61, 0x12, 0x6d, 0x0a, 0x14, 0x61, 0x6e, 0x64, 0x5f, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x74, 0x69, 0x63, 0x73, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x12, 0x61, 0x6e, 0x64, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x22, 0xf6, 0x01, 0x0a, 0x1c, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x62, 0x0a, 0x11, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x63, 0x6f, 0x70, 0x69, 0x6e, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x35, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x74, 0x69, 0x63, 0x73, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x43, 0x72, 0x69, 0x74, 0x65, 0x72, 0x69, 0x61, 0x53, 0x63, 0x6f, 0x70, 0x69, 0x6e, 0x67, 0x52, 0x10, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x63, 0x6f, 0x70, 0x69, 0x6e, 0x67, 0x12, 0x72, 0x0a, 0x19, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x5f, 0x65, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x74, 0x69, 0x63, 0x73, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x45, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x17, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x45, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x85, 0x02, 0x0a, 0x17, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x45, 0x78, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x75, 0x0a, 0x1a, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x37, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x74, 0x69, 0x63, 0x73, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x45, 0x78, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x6f, 0x6e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x18, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x45, 0x78, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x6f, 0x6e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x73, 0x0a, 0x1a, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x63, 0x72, 0x69, 0x74, 0x65, 0x72, 0x69, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x74, 0x69, 0x63, 0x73, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x43, 0x72, 0x69, 0x74, 0x65, 0x72, 0x69, 0x61, 0x52, 0x18, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x45, 0x78, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x6f, 0x6e, 0x43, 0x72, 0x69, 0x74, 0x65, 0x72, 0x69, 0x61, 0x22, 0xd1, 0x01, 0x0a, 0x0c, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x6d, 0x0a, 0x18, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x63, 0x72, 0x69, 0x74, 0x65, 0x72, 0x69, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x74, 0x69, 0x63, 0x73, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x43, 0x72, 0x69, 0x74, 0x65, 0x72, 0x69, 0x61, 0x52, 0x16, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x6f, 0x6e, 0x43, 0x72, 0x69, 0x74, 0x65, 0x72, 0x69, 0x61, 0x12, 0x52, 0x0a, 0x09, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x74, 0x69, 0x63, 0x73, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x45, 0x78, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x09, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x83, 0x01, 0x0a, 0x14, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x43, 0x72, 0x69, 0x74, 0x65, 0x72, 0x69, 0x61, 0x12, 0x6b, 0x0a, 0x14, 0x61, 0x6e, 0x64, 0x5f, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x74, 0x69, 0x63, 0x73, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x12, 0x61, 0x6e, 0x64, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x22, 0xf2, 0x01, 0x0a, 0x1a, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x60, 0x0a, 0x11, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x63, 0x6f, 0x70, 0x69, 0x6e, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x33, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x74, 0x69, 0x63, 0x73, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x43, 0x72, 0x69, 0x74, 0x65, 0x72, 0x69, 0x61, 0x53, 0x63, 0x6f, 0x70, 0x69, 0x6e, 0x67, 0x52, 0x10, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x63, 0x6f, 0x70, 0x69, 0x6e, 0x67, 0x12, 0x72, 0x0a, 0x19, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x5f, 0x65, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x74, 0x69, 0x63, 0x73, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x45, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x17, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x45, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0xf7, 0x01, 0x0a, 0x15, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x45, 0x78, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x6f, 0x0a, 0x18, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x5f, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x35, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x74, 0x69, 0x63, 0x73, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x45, 0x78, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x6f, 0x6e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x16, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x45, 0x78, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x6f, 0x6e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x6d, 0x0a, 0x18, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x5f, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x63, 0x72, 0x69, 0x74, 0x65, 0x72, 0x69, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x74, 0x69, 0x63, 0x73, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x43, 0x72, 0x69, 0x74, 0x65, 0x72, 0x69, 0x61, 0x52, 0x16, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x45, 0x78, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x6f, 0x6e, 0x43, 0x72, 0x69, 0x74, 0x65, 0x72, 0x69, 0x61, 0x22, 0xb1, 0x02, 0x0a, 0x07, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x4f, 0x0a, 0x0c, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x74, 0x69, 0x63, 0x73, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x0b, 0x75, 0x73, 0x65, 0x72, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x58, 0x0a, 0x0f, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x74, 0x69, 0x63, 0x73, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x0e, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x52, 0x0a, 0x0d, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x5f, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x74, 0x69, 0x63, 0x73, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x0c, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x42, 0x13, 0x0a, 0x11, 0x6f, 0x6e, 0x65, 0x5f, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x22, 0xf4, 0x03, 0x0a, 0x17, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x45, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x59, 0x0a, 0x09, 0x61, 0x6e, 0x64, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x74, 0x69, 0x63, 0x73, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x45, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x48, 0x00, 0x52, 0x08, 0x61, 0x6e, 0x64, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x57, 0x0a, 0x08, 0x6f, 0x72, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x74, 0x69, 0x63, 0x73, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x45, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x48, 0x00, 0x52, 0x07, 0x6f, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x5f, 0x0a, 0x0e, 0x6e, 0x6f, 0x74, 0x5f, 0x65, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x74, 0x69, 0x63, 0x73, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x45, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x0d, 0x6e, 0x6f, 0x74, 0x45, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x55, 0x0a, 0x0e, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x74, 0x69, 0x63, 0x73, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x48, 0x00, 0x52, 0x0d, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x65, 0x0a, 0x14, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x5f, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x74, 0x69, 0x63, 0x73, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x48, 0x00, 0x52, 0x12, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x42, 0x06, 0x0a, 0x04, 0x65, 0x78, 0x70, 0x72, 0x22, 0x77, 0x0a, 0x1b, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x45, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x58, 0x0a, 0x0b, 0x65, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x74, 0x69, 0x63, 0x73, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x45, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x0b, 0x65, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0xef, 0x03, 0x0a, 0x0d, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x1d, 0x0a, 0x0a, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x52, 0x0a, 0x0d, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x74, 0x69, 0x63, 0x73, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x48, 0x00, 0x52, 0x0c, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x53, 0x0a, 0x0e, 0x69, 0x6e, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x74, 0x69, 0x63, 0x73, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x49, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x48, 0x00, 0x52, 0x0c, 0x69, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x55, 0x0a, 0x0e, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x5f, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x74, 0x69, 0x63, 0x73, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x48, 0x00, 0x52, 0x0d, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x55, 0x0a, 0x0e, 0x62, 0x65, 0x74, 0x77, 0x65, 0x65, 0x6e, 0x5f, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x74, 0x69, 0x63, 0x73, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x42, 0x65, 0x74, 0x77, 0x65, 0x65, 0x6e, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x48, 0x00, 0x52, 0x0d, 0x62, 0x65, 0x74, 0x77, 0x65, 0x65, 0x6e, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x5a, 0x0a, 0x0e, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x5f, 0x73, 0x63, 0x6f, 0x70, 0x69, 0x6e, 0x67, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x74, 0x69, 0x63, 0x73, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x53, 0x63, 0x6f, 0x70, 0x69, 0x6e, 0x67, 0x52, 0x0d, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x53, 0x63, 0x6f, 0x70, 0x69, 0x6e, 0x67, 0x42, 0x0c, 0x0a, 0x0a, 0x6f, 0x6e, 0x65, 0x5f, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x22, 0x64, 0x0a, 0x14, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x53, 0x63, 0x6f, 0x70, 0x69, 0x6e, 0x67, 0x12, 0x33, 0x0a, 0x14, 0x61, 0x74, 0x5f, 0x61, 0x6e, 0x79, 0x5f, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x5f, 0x69, 0x6e, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x48, 0x00, 0x52, 0x10, 0x61, 0x74, 0x41, 0x6e, 0x79, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x49, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x88, 0x01, 0x01, 0x42, 0x17, 0x0a, 0x15, 0x5f, 0x61, 0x74, 0x5f, 0x61, 0x6e, 0x79, 0x5f, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x5f, 0x69, 0x6e, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x22, 0x85, 0x02, 0x0a, 0x12, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x22, 0x0a, 0x0a, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x09, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x88, 0x01, 0x01, 0x12, 0x93, 0x01, 0x0a, 0x23, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x5f, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x5f, 0x65, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3f, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x74, 0x69, 0x63, 0x73, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x45, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x48, 0x01, 0x52, 0x20, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x45, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x88, 0x01, 0x01, 0x42, 0x0d, 0x0a, 0x0b, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x42, 0x26, 0x0a, 0x24, 0x5f, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x5f, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x5f, 0x65, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0xcd, 0x03, 0x0a, 0x20, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x45, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x62, 0x0a, 0x09, 0x61, 0x6e, 0x64, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x43, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x74, 0x69, 0x63, 0x73, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x45, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x48, 0x00, 0x52, 0x08, 0x61, 0x6e, 0x64, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x60, 0x0a, 0x08, 0x6f, 0x72, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x43, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x74, 0x69, 0x63, 0x73, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x45, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x48, 0x00, 0x52, 0x07, 0x6f, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x68, 0x0a, 0x0e, 0x6e, 0x6f, 0x74, 0x5f, 0x65, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3f, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x74, 0x69, 0x63, 0x73, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x45, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x0d, 0x6e, 0x6f, 0x74, 0x45, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x71, 0x0a, 0x18, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x5f, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x74, 0x69, 0x63, 0x73, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x48, 0x00, 0x52, 0x16, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x42, 0x06, 0x0a, 0x04, 0x65, 0x78, 0x70, 0x72, 0x22, 0x89, 0x01, 0x0a, 0x24, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x45, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x61, 0x0a, 0x0b, 0x65, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3f, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x74, 0x69, 0x63, 0x73, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x45, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x0b, 0x65, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0xd9, 0x04, 0x0a, 0x16, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x32, 0x0a, 0x14, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x12, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x30, 0x0a, 0x13, 0x69, 0x74, 0x65, 0x6d, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x11, 0x69, 0x74, 0x65, 0x6d, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x52, 0x0a, 0x0d, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x74, 0x69, 0x63, 0x73, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x48, 0x01, 0x52, 0x0c, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x53, 0x0a, 0x0e, 0x69, 0x6e, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x74, 0x69, 0x63, 0x73, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x49, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x48, 0x01, 0x52, 0x0c, 0x69, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x55, 0x0a, 0x0e, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x5f, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x74, 0x69, 0x63, 0x73, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x48, 0x01, 0x52, 0x0d, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x55, 0x0a, 0x0e, 0x62, 0x65, 0x74, 0x77, 0x65, 0x65, 0x6e, 0x5f, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x74, 0x69, 0x63, 0x73, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x42, 0x65, 0x74, 0x77, 0x65, 0x65, 0x6e, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x48, 0x01, 0x52, 0x0d, 0x62, 0x65, 0x74, 0x77, 0x65, 0x65, 0x6e, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x63, 0x0a, 0x0e, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x5f, 0x73, 0x63, 0x6f, 0x70, 0x69, 0x6e, 0x67, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x74, 0x69, 0x63, 0x73, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x53, 0x63, 0x6f, 0x70, 0x69, 0x6e, 0x67, 0x52, 0x0d, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x53, 0x63, 0x6f, 0x70, 0x69, 0x6e, 0x67, 0x42, 0x0f, 0x0a, 0x0d, 0x6f, 0x6e, 0x65, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x42, 0x0c, 0x0a, 0x0a, 0x6f, 0x6e, 0x65, 0x5f, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x22, 0x6a, 0x0a, 0x1d, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x53, 0x63, 0x6f, 0x70, 0x69, 0x6e, 0x67, 0x12, 0x31, 0x0a, 0x13, 0x69, 0x6e, 0x5f, 0x61, 0x6e, 0x79, 0x5f, 0x6e, 0x5f, 0x64, 0x61, 0x79, 0x5f, 0x70, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x48, 0x00, 0x52, 0x0f, 0x69, 0x6e, 0x41, 0x6e, 0x79, 0x4e, 0x44, 0x61, 0x79, 0x50, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x88, 0x01, 0x01, 0x42, 0x16, 0x0a, 0x14, 0x5f, 0x69, 0x6e, 0x5f, 0x61, 0x6e, 0x79, 0x5f, 0x6e, 0x5f, 0x64, 0x61, 0x79, 0x5f, 0x70, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x22, 0xfa, 0x03, 0x0a, 0x16, 0x46, 0x75, 0x6e, 0x6e, 0x65, 0x6c, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x45, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x58, 0x0a, 0x09, 0x61, 0x6e, 0x64, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x74, 0x69, 0x63, 0x73, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x46, 0x75, 0x6e, 0x6e, 0x65, 0x6c, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x45, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x48, 0x00, 0x52, 0x08, 0x61, 0x6e, 0x64, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x56, 0x0a, 0x08, 0x6f, 0x72, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x74, 0x69, 0x63, 0x73, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x46, 0x75, 0x6e, 0x6e, 0x65, 0x6c, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x45, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x48, 0x00, 0x52, 0x07, 0x6f, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x5e, 0x0a, 0x0e, 0x6e, 0x6f, 0x74, 0x5f, 0x65, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x74, 0x69, 0x63, 0x73, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x46, 0x75, 0x6e, 0x6e, 0x65, 0x6c, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x45, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x0d, 0x6e, 0x6f, 0x74, 0x45, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x62, 0x0a, 0x13, 0x66, 0x75, 0x6e, 0x6e, 0x65, 0x6c, 0x5f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x74, 0x69, 0x63, 0x73, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x46, 0x75, 0x6e, 0x6e, 0x65, 0x6c, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x48, 0x00, 0x52, 0x11, 0x66, 0x75, 0x6e, 0x6e, 0x65, 0x6c, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x62, 0x0a, 0x13, 0x66, 0x75, 0x6e, 0x6e, 0x65, 0x6c, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x5f, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x74, 0x69, 0x63, 0x73, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x46, 0x75, 0x6e, 0x6e, 0x65, 0x6c, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x48, 0x00, 0x52, 0x11, 0x66, 0x75, 0x6e, 0x6e, 0x65, 0x6c, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x42, 0x06, 0x0a, 0x04, 0x65, 0x78, 0x70, 0x72, 0x22, 0x75, 0x0a, 0x1a, 0x46, 0x75, 0x6e, 0x6e, 0x65, 0x6c, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x45, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x57, 0x0a, 0x0b, 0x65, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x74, 0x69, 0x63, 0x73, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x46, 0x75, 0x6e, 0x6e, 0x65, 0x6c, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x45, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x0b, 0x65, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x97, 0x03, 0x0a, 0x11, 0x46, 0x75, 0x6e, 0x6e, 0x65, 0x6c, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x1d, 0x0a, 0x0a, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x52, 0x0a, 0x0d, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x74, 0x69, 0x63, 0x73, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x48, 0x00, 0x52, 0x0c, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x53, 0x0a, 0x0e, 0x69, 0x6e, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x74, 0x69, 0x63, 0x73, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x49, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x48, 0x00, 0x52, 0x0c, 0x69, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x55, 0x0a, 0x0e, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x5f, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x74, 0x69, 0x63, 0x73, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x48, 0x00, 0x52, 0x0d, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x55, 0x0a, 0x0e, 0x62, 0x65, 0x74, 0x77, 0x65, 0x65, 0x6e, 0x5f, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x74, 0x69, 0x63, 0x73, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x42, 0x65, 0x74, 0x77, 0x65, 0x65, 0x6e, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x48, 0x00, 0x52, 0x0d, 0x62, 0x65, 0x74, 0x77, 0x65, 0x65, 0x6e, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x42, 0x0c, 0x0a, 0x0a, 0x6f, 0x6e, 0x65, 0x5f, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x22, 0x80, 0x02, 0x0a, 0x11, 0x46, 0x75, 0x6e, 0x6e, 0x65, 0x6c, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x22, 0x0a, 0x0a, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x09, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x88, 0x01, 0x01, 0x12, 0x90, 0x01, 0x0a, 0x22, 0x66, 0x75, 0x6e, 0x6e, 0x65, 0x6c, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x5f, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x5f, 0x65, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3e, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x74, 0x69, 0x63, 0x73, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x46, 0x75, 0x6e, 0x6e, 0x65, 0x6c, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x45, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x48, 0x01, 0x52, 0x1f, 0x66, 0x75, 0x6e, 0x6e, 0x65, 0x6c, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x45, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x88, 0x01, 0x01, 0x42, 0x0d, 0x0a, 0x0b, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x42, 0x25, 0x0a, 0x23, 0x5f, 0x66, 0x75, 0x6e, 0x6e, 0x65, 0x6c, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x5f, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x5f, 0x65, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0xc6, 0x03, 0x0a, 0x1f, 0x46, 0x75, 0x6e, 0x6e, 0x65, 0x6c, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x45, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x61, 0x0a, 0x09, 0x61, 0x6e, 0x64, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x42, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x74, 0x69, 0x63, 0x73, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x46, 0x75, 0x6e, 0x6e, 0x65, 0x6c, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x45, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x48, 0x00, 0x52, 0x08, 0x61, 0x6e, 0x64, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x5f, 0x0a, 0x08, 0x6f, 0x72, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x42, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x74, 0x69, 0x63, 0x73, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x46, 0x75, 0x6e, 0x6e, 0x65, 0x6c, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x45, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x48, 0x00, 0x52, 0x07, 0x6f, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x67, 0x0a, 0x0e, 0x6e, 0x6f, 0x74, 0x5f, 0x65, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3e, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x74, 0x69, 0x63, 0x73, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x46, 0x75, 0x6e, 0x6e, 0x65, 0x6c, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x45, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x0d, 0x6e, 0x6f, 0x74, 0x45, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x6e, 0x0a, 0x17, 0x66, 0x75, 0x6e, 0x6e, 0x65, 0x6c, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x5f, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x74, 0x69, 0x63, 0x73, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x46, 0x75, 0x6e, 0x6e, 0x65, 0x6c, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x48, 0x00, 0x52, 0x15, 0x66, 0x75, 0x6e, 0x6e, 0x65, 0x6c, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x42, 0x06, 0x0a, 0x04, 0x65, 0x78, 0x70, 0x72, 0x22, 0x87, 0x01, 0x0a, 0x23, 0x46, 0x75, 0x6e, 0x6e, 0x65, 0x6c, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x45, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x60, 0x0a, 0x0b, 0x65, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3e, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x74, 0x69, 0x63, 0x73, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x46, 0x75, 0x6e, 0x6e, 0x65, 0x6c, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x45, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x0b, 0x65, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0xf3, 0x03, 0x0a, 0x15, 0x46, 0x75, 0x6e, 0x6e, 0x65, 0x6c, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x32, 0x0a, 0x14, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x12, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x30, 0x0a, 0x13, 0x69, 0x74, 0x65, 0x6d, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x11, 0x69, 0x74, 0x65, 0x6d, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x52, 0x0a, 0x0d, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x74, 0x69, 0x63, 0x73, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x48, 0x01, 0x52, 0x0c, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x53, 0x0a, 0x0e, 0x69, 0x6e, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x74, 0x69, 0x63, 0x73, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x49, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x48, 0x01, 0x52, 0x0c, 0x69, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x55, 0x0a, 0x0e, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x5f, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x74, 0x69, 0x63, 0x73, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x48, 0x01, 0x52, 0x0d, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x55, 0x0a, 0x0e, 0x62, 0x65, 0x74, 0x77, 0x65, 0x65, 0x6e, 0x5f, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x74, 0x69, 0x63, 0x73, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x42, 0x65, 0x74, 0x77, 0x65, 0x65, 0x6e, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x48, 0x01, 0x52, 0x0d, 0x62, 0x65, 0x74, 0x77, 0x65, 0x65, 0x6e, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x42, 0x0f, 0x0a, 0x0d, 0x6f, 0x6e, 0x65, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x42, 0x0c, 0x0a, 0x0a, 0x6f, 0x6e, 0x65, 0x5f, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x22, 0x78, 0x0a, 0x16, 0x46, 0x75, 0x6e, 0x6e, 0x65, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x5e, 0x0a, 0x12, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x69, 0x6e, 0x67, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x74, 0x69, 0x63, 0x73, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x53, 0x61, 0x6d, 0x70, 0x6c, 0x69, 0x6e, 0x67, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x11, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x69, 0x6e, 0x67, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x73, 0x22, 0x70, 0x0a, 0x10, 0x53, 0x61, 0x6d, 0x70, 0x6c, 0x69, 0x6e, 0x67, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x2c, 0x0a, 0x12, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x5f, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x10, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x61, 0x64, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x2e, 0x0a, 0x13, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x69, 0x6e, 0x67, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x11, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x69, 0x6e, 0x67, 0x53, 0x70, 0x61, 0x63, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x2a, 0xaf, 0x01, 0x0a, 0x13, 0x55, 0x73, 0x65, 0x72, 0x43, 0x72, 0x69, 0x74, 0x65, 0x72, 0x69, 0x61, 0x53, 0x63, 0x6f, 0x70, 0x69, 0x6e, 0x67, 0x12, 0x25, 0x0a, 0x21, 0x55, 0x53, 0x45, 0x52, 0x5f, 0x43, 0x52, 0x49, 0x54, 0x45, 0x52, 0x49, 0x41, 0x5f, 0x53, 0x43, 0x4f, 0x50, 0x49, 0x4e, 0x47, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x23, 0x0a, 0x1f, 0x55, 0x53, 0x45, 0x52, 0x5f, 0x43, 0x52, 0x49, 0x54, 0x45, 0x52, 0x49, 0x41, 0x5f, 0x57, 0x49, 0x54, 0x48, 0x49, 0x4e, 0x5f, 0x53, 0x41, 0x4d, 0x45, 0x5f, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x10, 0x01, 0x12, 0x25, 0x0a, 0x21, 0x55, 0x53, 0x45, 0x52, 0x5f, 0x43, 0x52, 0x49, 0x54, 0x45, 0x52, 0x49, 0x41, 0x5f, 0x57, 0x49, 0x54, 0x48, 0x49, 0x4e, 0x5f, 0x53, 0x41, 0x4d, 0x45, 0x5f, 0x53, 0x45, 0x53, 0x53, 0x49, 0x4f, 0x4e, 0x10, 0x02, 0x12, 0x25, 0x0a, 0x21, 0x55, 0x53, 0x45, 0x52, 0x5f, 0x43, 0x52, 0x49, 0x54, 0x45, 0x52, 0x49, 0x41, 0x5f, 0x41, 0x43, 0x52, 0x4f, 0x53, 0x53, 0x5f, 0x41, 0x4c, 0x4c, 0x5f, 0x53, 0x45, 0x53, 0x53, 0x49, 0x4f, 0x4e, 0x53, 0x10, 0x03, 0x2a, 0x7c, 0x0a, 0x15, 0x55, 0x73, 0x65, 0x72, 0x45, 0x78, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x6f, 0x6e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x27, 0x0a, 0x23, 0x55, 0x53, 0x45, 0x52, 0x5f, 0x45, 0x58, 0x43, 0x4c, 0x55, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x44, 0x55, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x1c, 0x0a, 0x18, 0x55, 0x53, 0x45, 0x52, 0x5f, 0x45, 0x58, 0x43, 0x4c, 0x55, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x54, 0x45, 0x4d, 0x50, 0x4f, 0x52, 0x41, 0x52, 0x59, 0x10, 0x01, 0x12, 0x1c, 0x0a, 0x18, 0x55, 0x53, 0x45, 0x52, 0x5f, 0x45, 0x58, 0x43, 0x4c, 0x55, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x50, 0x45, 0x52, 0x4d, 0x41, 0x4e, 0x45, 0x4e, 0x54, 0x10, 0x02, 0x2a, 0x94, 0x01, 0x0a, 0x16, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x43, 0x72, 0x69, 0x74, 0x65, 0x72, 0x69, 0x61, 0x53, 0x63, 0x6f, 0x70, 0x69, 0x6e, 0x67, 0x12, 0x28, 0x0a, 0x24, 0x53, 0x45, 0x53, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x43, 0x52, 0x49, 0x54, 0x45, 0x52, 0x49, 0x41, 0x5f, 0x53, 0x43, 0x4f, 0x50, 0x49, 0x4e, 0x47, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x26, 0x0a, 0x22, 0x53, 0x45, 0x53, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x43, 0x52, 0x49, 0x54, 0x45, 0x52, 0x49, 0x41, 0x5f, 0x57, 0x49, 0x54, 0x48, 0x49, 0x4e, 0x5f, 0x53, 0x41, 0x4d, 0x45, 0x5f, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x10, 0x01, 0x12, 0x28, 0x0a, 0x24, 0x53, 0x45, 0x53, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x43, 0x52, 0x49, 0x54, 0x45, 0x52, 0x49, 0x41, 0x5f, 0x57, 0x49, 0x54, 0x48, 0x49, 0x4e, 0x5f, 0x53, 0x41, 0x4d, 0x45, 0x5f, 0x53, 0x45, 0x53, 0x53, 0x49, 0x4f, 0x4e, 0x10, 0x02, 0x2a, 0x88, 0x01, 0x0a, 0x18, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x45, 0x78, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x6f, 0x6e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2a, 0x0a, 0x26, 0x53, 0x45, 0x53, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x45, 0x58, 0x43, 0x4c, 0x55, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x44, 0x55, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x1f, 0x0a, 0x1b, 0x53, 0x45, 0x53, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x45, 0x58, 0x43, 0x4c, 0x55, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x54, 0x45, 0x4d, 0x50, 0x4f, 0x52, 0x41, 0x52, 0x59, 0x10, 0x01, 0x12, 0x1f, 0x0a, 0x1b, 0x53, 0x45, 0x53, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x45, 0x58, 0x43, 0x4c, 0x55, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x50, 0x45, 0x52, 0x4d, 0x41, 0x4e, 0x45, 0x4e, 0x54, 0x10, 0x02, 0x2a, 0x64, 0x0a, 0x14, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x43, 0x72, 0x69, 0x74, 0x65, 0x72, 0x69, 0x61, 0x53, 0x63, 0x6f, 0x70, 0x69, 0x6e, 0x67, 0x12, 0x26, 0x0a, 0x22, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x5f, 0x43, 0x52, 0x49, 0x54, 0x45, 0x52, 0x49, 0x41, 0x5f, 0x53, 0x43, 0x4f, 0x50, 0x49, 0x4e, 0x47, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x24, 0x0a, 0x20, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x5f, 0x43, 0x52, 0x49, 0x54, 0x45, 0x52, 0x49, 0x41, 0x5f, 0x57, 0x49, 0x54, 0x48, 0x49, 0x4e, 0x5f, 0x53, 0x41, 0x4d, 0x45, 0x5f, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x10, 0x01, 0x2a, 0x61, 0x0a, 0x16, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x45, 0x78, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x6f, 0x6e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x28, 0x0a, 0x24, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x5f, 0x45, 0x58, 0x43, 0x4c, 0x55, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x44, 0x55, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x1d, 0x0a, 0x19, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x5f, 0x45, 0x58, 0x43, 0x4c, 0x55, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x50, 0x45, 0x52, 0x4d, 0x41, 0x4e, 0x45, 0x4e, 0x54, 0x10, 0x01, 0x2a, 0x81, 0x02, 0x0a, 0x0a, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1b, 0x0a, 0x17, 0x4d, 0x45, 0x54, 0x52, 0x49, 0x43, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x10, 0x0a, 0x0c, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x49, 0x4e, 0x54, 0x45, 0x47, 0x45, 0x52, 0x10, 0x01, 0x12, 0x0e, 0x0a, 0x0a, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x46, 0x4c, 0x4f, 0x41, 0x54, 0x10, 0x02, 0x12, 0x10, 0x0a, 0x0c, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x53, 0x45, 0x43, 0x4f, 0x4e, 0x44, 0x53, 0x10, 0x04, 0x12, 0x15, 0x0a, 0x11, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x4d, 0x49, 0x4c, 0x4c, 0x49, 0x53, 0x45, 0x43, 0x4f, 0x4e, 0x44, 0x53, 0x10, 0x05, 0x12, 0x10, 0x0a, 0x0c, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x4d, 0x49, 0x4e, 0x55, 0x54, 0x45, 0x53, 0x10, 0x06, 0x12, 0x0e, 0x0a, 0x0a, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x48, 0x4f, 0x55, 0x52, 0x53, 0x10, 0x07, 0x12, 0x11, 0x0a, 0x0d, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x4e, 0x44, 0x41, 0x52, 0x44, 0x10, 0x08, 0x12, 0x11, 0x0a, 0x0d, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x43, 0x55, 0x52, 0x52, 0x45, 0x4e, 0x43, 0x59, 0x10, 0x09, 0x12, 0x0d, 0x0a, 0x09, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x46, 0x45, 0x45, 0x54, 0x10, 0x0a, 0x12, 0x0e, 0x0a, 0x0a, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x4d, 0x49, 0x4c, 0x45, 0x53, 0x10, 0x0b, 0x12, 0x0f, 0x0a, 0x0b, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x4d, 0x45, 0x54, 0x45, 0x52, 0x53, 0x10, 0x0c, 0x12, 0x13, 0x0a, 0x0f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x4b, 0x49, 0x4c, 0x4f, 0x4d, 0x45, 0x54, 0x45, 0x52, 0x53, 0x10, 0x0d, 0x42, 0x7b, 0x0a, 0x21, 0x63, 0x6f, 0x6d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x74, 0x69, 0x63, 0x73, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x42, 0x11, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x69, 0x6e, 0x67, 0x41, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x41, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x67, 0x6f, 0x6c, 0x61, 0x6e, 0x67, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x67, 0x65, 0x6e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2f, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x74, 0x69, 0x63, 0x73, 0x2f, 0x64, 0x61, 0x74, 0x61, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x3b, 0x64, 0x61, 0x74, 0x61, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( file_google_analytics_data_v1alpha_data_proto_rawDescOnce sync.Once file_google_analytics_data_v1alpha_data_proto_rawDescData = file_google_analytics_data_v1alpha_data_proto_rawDesc ) func file_google_analytics_data_v1alpha_data_proto_rawDescGZIP() []byte { file_google_analytics_data_v1alpha_data_proto_rawDescOnce.Do(func() { file_google_analytics_data_v1alpha_data_proto_rawDescData = protoimpl.X.CompressGZIP(file_google_analytics_data_v1alpha_data_proto_rawDescData) }) return file_google_analytics_data_v1alpha_data_proto_rawDescData } var file_google_analytics_data_v1alpha_data_proto_enumTypes = make([]protoimpl.EnumInfo, 9) var file_google_analytics_data_v1alpha_data_proto_msgTypes = make([]protoimpl.MessageInfo, 58) var file_google_analytics_data_v1alpha_data_proto_goTypes = []interface{}{ (UserCriteriaScoping)(0), // 0: google.analytics.data.v1alpha.UserCriteriaScoping (UserExclusionDuration)(0), // 1: google.analytics.data.v1alpha.UserExclusionDuration (SessionCriteriaScoping)(0), // 2: google.analytics.data.v1alpha.SessionCriteriaScoping (SessionExclusionDuration)(0), // 3: google.analytics.data.v1alpha.SessionExclusionDuration (EventCriteriaScoping)(0), // 4: google.analytics.data.v1alpha.EventCriteriaScoping (EventExclusionDuration)(0), // 5: google.analytics.data.v1alpha.EventExclusionDuration (MetricType)(0), // 6: google.analytics.data.v1alpha.MetricType (StringFilter_MatchType)(0), // 7: google.analytics.data.v1alpha.StringFilter.MatchType (NumericFilter_Operation)(0), // 8: google.analytics.data.v1alpha.NumericFilter.Operation (*DateRange)(nil), // 9: google.analytics.data.v1alpha.DateRange (*Dimension)(nil), // 10: google.analytics.data.v1alpha.Dimension (*DimensionExpression)(nil), // 11: google.analytics.data.v1alpha.DimensionExpression (*FilterExpression)(nil), // 12: google.analytics.data.v1alpha.FilterExpression (*FilterExpressionList)(nil), // 13: google.analytics.data.v1alpha.FilterExpressionList (*Filter)(nil), // 14: google.analytics.data.v1alpha.Filter (*StringFilter)(nil), // 15: google.analytics.data.v1alpha.StringFilter (*InListFilter)(nil), // 16: google.analytics.data.v1alpha.InListFilter (*NumericFilter)(nil), // 17: google.analytics.data.v1alpha.NumericFilter (*BetweenFilter)(nil), // 18: google.analytics.data.v1alpha.BetweenFilter (*NumericValue)(nil), // 19: google.analytics.data.v1alpha.NumericValue (*DimensionHeader)(nil), // 20: google.analytics.data.v1alpha.DimensionHeader (*MetricHeader)(nil), // 21: google.analytics.data.v1alpha.MetricHeader (*Row)(nil), // 22: google.analytics.data.v1alpha.Row (*DimensionValue)(nil), // 23: google.analytics.data.v1alpha.DimensionValue (*MetricValue)(nil), // 24: google.analytics.data.v1alpha.MetricValue (*PropertyQuota)(nil), // 25: google.analytics.data.v1alpha.PropertyQuota (*QuotaStatus)(nil), // 26: google.analytics.data.v1alpha.QuotaStatus (*FunnelBreakdown)(nil), // 27: google.analytics.data.v1alpha.FunnelBreakdown (*FunnelNextAction)(nil), // 28: google.analytics.data.v1alpha.FunnelNextAction (*Funnel)(nil), // 29: google.analytics.data.v1alpha.Funnel (*FunnelStep)(nil), // 30: google.analytics.data.v1alpha.FunnelStep (*FunnelSubReport)(nil), // 31: google.analytics.data.v1alpha.FunnelSubReport (*UserSegment)(nil), // 32: google.analytics.data.v1alpha.UserSegment (*UserSegmentCriteria)(nil), // 33: google.analytics.data.v1alpha.UserSegmentCriteria (*UserSegmentConditionGroup)(nil), // 34: google.analytics.data.v1alpha.UserSegmentConditionGroup (*UserSegmentSequenceGroup)(nil), // 35: google.analytics.data.v1alpha.UserSegmentSequenceGroup (*UserSequenceStep)(nil), // 36: google.analytics.data.v1alpha.UserSequenceStep (*UserSegmentExclusion)(nil), // 37: google.analytics.data.v1alpha.UserSegmentExclusion (*SessionSegment)(nil), // 38: google.analytics.data.v1alpha.SessionSegment (*SessionSegmentCriteria)(nil), // 39: google.analytics.data.v1alpha.SessionSegmentCriteria (*SessionSegmentConditionGroup)(nil), // 40: google.analytics.data.v1alpha.SessionSegmentConditionGroup (*SessionSegmentExclusion)(nil), // 41: google.analytics.data.v1alpha.SessionSegmentExclusion (*EventSegment)(nil), // 42: google.analytics.data.v1alpha.EventSegment (*EventSegmentCriteria)(nil), // 43: google.analytics.data.v1alpha.EventSegmentCriteria (*EventSegmentConditionGroup)(nil), // 44: google.analytics.data.v1alpha.EventSegmentConditionGroup (*EventSegmentExclusion)(nil), // 45: google.analytics.data.v1alpha.EventSegmentExclusion (*Segment)(nil), // 46: google.analytics.data.v1alpha.Segment (*SegmentFilterExpression)(nil), // 47: google.analytics.data.v1alpha.SegmentFilterExpression (*SegmentFilterExpressionList)(nil), // 48: google.analytics.data.v1alpha.SegmentFilterExpressionList (*SegmentFilter)(nil), // 49: google.analytics.data.v1alpha.SegmentFilter (*SegmentFilterScoping)(nil), // 50: google.analytics.data.v1alpha.SegmentFilterScoping (*SegmentEventFilter)(nil), // 51: google.analytics.data.v1alpha.SegmentEventFilter (*SegmentParameterFilterExpression)(nil), // 52: google.analytics.data.v1alpha.SegmentParameterFilterExpression (*SegmentParameterFilterExpressionList)(nil), // 53: google.analytics.data.v1alpha.SegmentParameterFilterExpressionList (*SegmentParameterFilter)(nil), // 54: google.analytics.data.v1alpha.SegmentParameterFilter (*SegmentParameterFilterScoping)(nil), // 55: google.analytics.data.v1alpha.SegmentParameterFilterScoping (*FunnelFilterExpression)(nil), // 56: google.analytics.data.v1alpha.FunnelFilterExpression (*FunnelFilterExpressionList)(nil), // 57: google.analytics.data.v1alpha.FunnelFilterExpressionList (*FunnelFieldFilter)(nil), // 58: google.analytics.data.v1alpha.FunnelFieldFilter (*FunnelEventFilter)(nil), // 59: google.analytics.data.v1alpha.FunnelEventFilter (*FunnelParameterFilterExpression)(nil), // 60: google.analytics.data.v1alpha.FunnelParameterFilterExpression (*FunnelParameterFilterExpressionList)(nil), // 61: google.analytics.data.v1alpha.FunnelParameterFilterExpressionList (*FunnelParameterFilter)(nil), // 62: google.analytics.data.v1alpha.FunnelParameterFilter (*FunnelResponseMetadata)(nil), // 63: google.analytics.data.v1alpha.FunnelResponseMetadata (*SamplingMetadata)(nil), // 64: google.analytics.data.v1alpha.SamplingMetadata (*DimensionExpression_CaseExpression)(nil), // 65: google.analytics.data.v1alpha.DimensionExpression.CaseExpression (*DimensionExpression_ConcatenateExpression)(nil), // 66: google.analytics.data.v1alpha.DimensionExpression.ConcatenateExpression (*durationpb.Duration)(nil), // 67: google.protobuf.Duration } var file_google_analytics_data_v1alpha_data_proto_depIdxs = []int32{ 11, // 0: google.analytics.data.v1alpha.Dimension.dimension_expression:type_name -> google.analytics.data.v1alpha.DimensionExpression 65, // 1: google.analytics.data.v1alpha.DimensionExpression.lower_case:type_name -> google.analytics.data.v1alpha.DimensionExpression.CaseExpression 65, // 2: google.analytics.data.v1alpha.DimensionExpression.upper_case:type_name -> google.analytics.data.v1alpha.DimensionExpression.CaseExpression 66, // 3: google.analytics.data.v1alpha.DimensionExpression.concatenate:type_name -> google.analytics.data.v1alpha.DimensionExpression.ConcatenateExpression 13, // 4: google.analytics.data.v1alpha.FilterExpression.and_group:type_name -> google.analytics.data.v1alpha.FilterExpressionList 13, // 5: google.analytics.data.v1alpha.FilterExpression.or_group:type_name -> google.analytics.data.v1alpha.FilterExpressionList 12, // 6: google.analytics.data.v1alpha.FilterExpression.not_expression:type_name -> google.analytics.data.v1alpha.FilterExpression 14, // 7: google.analytics.data.v1alpha.FilterExpression.filter:type_name -> google.analytics.data.v1alpha.Filter 12, // 8: google.analytics.data.v1alpha.FilterExpressionList.expressions:type_name -> google.analytics.data.v1alpha.FilterExpression 15, // 9: google.analytics.data.v1alpha.Filter.string_filter:type_name -> google.analytics.data.v1alpha.StringFilter 16, // 10: google.analytics.data.v1alpha.Filter.in_list_filter:type_name -> google.analytics.data.v1alpha.InListFilter 17, // 11: google.analytics.data.v1alpha.Filter.numeric_filter:type_name -> google.analytics.data.v1alpha.NumericFilter 18, // 12: google.analytics.data.v1alpha.Filter.between_filter:type_name -> google.analytics.data.v1alpha.BetweenFilter 7, // 13: google.analytics.data.v1alpha.StringFilter.match_type:type_name -> google.analytics.data.v1alpha.StringFilter.MatchType 8, // 14: google.analytics.data.v1alpha.NumericFilter.operation:type_name -> google.analytics.data.v1alpha.NumericFilter.Operation 19, // 15: google.analytics.data.v1alpha.NumericFilter.value:type_name -> google.analytics.data.v1alpha.NumericValue 19, // 16: google.analytics.data.v1alpha.BetweenFilter.from_value:type_name -> google.analytics.data.v1alpha.NumericValue 19, // 17: google.analytics.data.v1alpha.BetweenFilter.to_value:type_name -> google.analytics.data.v1alpha.NumericValue 6, // 18: google.analytics.data.v1alpha.MetricHeader.type:type_name -> google.analytics.data.v1alpha.MetricType 23, // 19: google.analytics.data.v1alpha.Row.dimension_values:type_name -> google.analytics.data.v1alpha.DimensionValue 24, // 20: google.analytics.data.v1alpha.Row.metric_values:type_name -> google.analytics.data.v1alpha.MetricValue 26, // 21: google.analytics.data.v1alpha.PropertyQuota.tokens_per_day:type_name -> google.analytics.data.v1alpha.QuotaStatus 26, // 22: google.analytics.data.v1alpha.PropertyQuota.tokens_per_hour:type_name -> google.analytics.data.v1alpha.QuotaStatus 26, // 23: google.analytics.data.v1alpha.PropertyQuota.concurrent_requests:type_name -> google.analytics.data.v1alpha.QuotaStatus 26, // 24: google.analytics.data.v1alpha.PropertyQuota.server_errors_per_project_per_hour:type_name -> google.analytics.data.v1alpha.QuotaStatus 26, // 25: google.analytics.data.v1alpha.PropertyQuota.potentially_thresholded_requests_per_hour:type_name -> google.analytics.data.v1alpha.QuotaStatus 10, // 26: google.analytics.data.v1alpha.FunnelBreakdown.breakdown_dimension:type_name -> google.analytics.data.v1alpha.Dimension 10, // 27: google.analytics.data.v1alpha.FunnelNextAction.next_action_dimension:type_name -> google.analytics.data.v1alpha.Dimension 30, // 28: google.analytics.data.v1alpha.Funnel.steps:type_name -> google.analytics.data.v1alpha.FunnelStep 67, // 29: google.analytics.data.v1alpha.FunnelStep.within_duration_from_prior_step:type_name -> google.protobuf.Duration 56, // 30: google.analytics.data.v1alpha.FunnelStep.filter_expression:type_name -> google.analytics.data.v1alpha.FunnelFilterExpression 20, // 31: google.analytics.data.v1alpha.FunnelSubReport.dimension_headers:type_name -> google.analytics.data.v1alpha.DimensionHeader 21, // 32: google.analytics.data.v1alpha.FunnelSubReport.metric_headers:type_name -> google.analytics.data.v1alpha.MetricHeader 22, // 33: google.analytics.data.v1alpha.FunnelSubReport.rows:type_name -> google.analytics.data.v1alpha.Row 63, // 34: google.analytics.data.v1alpha.FunnelSubReport.metadata:type_name -> google.analytics.data.v1alpha.FunnelResponseMetadata 33, // 35: google.analytics.data.v1alpha.UserSegment.user_inclusion_criteria:type_name -> google.analytics.data.v1alpha.UserSegmentCriteria 37, // 36: google.analytics.data.v1alpha.UserSegment.exclusion:type_name -> google.analytics.data.v1alpha.UserSegmentExclusion 34, // 37: google.analytics.data.v1alpha.UserSegmentCriteria.and_condition_groups:type_name -> google.analytics.data.v1alpha.UserSegmentConditionGroup 35, // 38: google.analytics.data.v1alpha.UserSegmentCriteria.and_sequence_groups:type_name -> google.analytics.data.v1alpha.UserSegmentSequenceGroup 0, // 39: google.analytics.data.v1alpha.UserSegmentConditionGroup.condition_scoping:type_name -> google.analytics.data.v1alpha.UserCriteriaScoping 47, // 40: google.analytics.data.v1alpha.UserSegmentConditionGroup.segment_filter_expression:type_name -> google.analytics.data.v1alpha.SegmentFilterExpression 0, // 41: google.analytics.data.v1alpha.UserSegmentSequenceGroup.sequence_scoping:type_name -> google.analytics.data.v1alpha.UserCriteriaScoping 67, // 42: google.analytics.data.v1alpha.UserSegmentSequenceGroup.sequence_maximum_duration:type_name -> google.protobuf.Duration 36, // 43: google.analytics.data.v1alpha.UserSegmentSequenceGroup.user_sequence_steps:type_name -> google.analytics.data.v1alpha.UserSequenceStep 0, // 44: google.analytics.data.v1alpha.UserSequenceStep.step_scoping:type_name -> google.analytics.data.v1alpha.UserCriteriaScoping 47, // 45: google.analytics.data.v1alpha.UserSequenceStep.segment_filter_expression:type_name -> google.analytics.data.v1alpha.SegmentFilterExpression 1, // 46: google.analytics.data.v1alpha.UserSegmentExclusion.user_exclusion_duration:type_name -> google.analytics.data.v1alpha.UserExclusionDuration 33, // 47: google.analytics.data.v1alpha.UserSegmentExclusion.user_exclusion_criteria:type_name -> google.analytics.data.v1alpha.UserSegmentCriteria 39, // 48: google.analytics.data.v1alpha.SessionSegment.session_inclusion_criteria:type_name -> google.analytics.data.v1alpha.SessionSegmentCriteria 41, // 49: google.analytics.data.v1alpha.SessionSegment.exclusion:type_name -> google.analytics.data.v1alpha.SessionSegmentExclusion 40, // 50: google.analytics.data.v1alpha.SessionSegmentCriteria.and_condition_groups:type_name -> google.analytics.data.v1alpha.SessionSegmentConditionGroup 2, // 51: google.analytics.data.v1alpha.SessionSegmentConditionGroup.condition_scoping:type_name -> google.analytics.data.v1alpha.SessionCriteriaScoping 47, // 52: google.analytics.data.v1alpha.SessionSegmentConditionGroup.segment_filter_expression:type_name -> google.analytics.data.v1alpha.SegmentFilterExpression 3, // 53: google.analytics.data.v1alpha.SessionSegmentExclusion.session_exclusion_duration:type_name -> google.analytics.data.v1alpha.SessionExclusionDuration 39, // 54: google.analytics.data.v1alpha.SessionSegmentExclusion.session_exclusion_criteria:type_name -> google.analytics.data.v1alpha.SessionSegmentCriteria 43, // 55: google.analytics.data.v1alpha.EventSegment.event_inclusion_criteria:type_name -> google.analytics.data.v1alpha.EventSegmentCriteria 45, // 56: google.analytics.data.v1alpha.EventSegment.exclusion:type_name -> google.analytics.data.v1alpha.EventSegmentExclusion 44, // 57: google.analytics.data.v1alpha.EventSegmentCriteria.and_condition_groups:type_name -> google.analytics.data.v1alpha.EventSegmentConditionGroup 4, // 58: google.analytics.data.v1alpha.EventSegmentConditionGroup.condition_scoping:type_name -> google.analytics.data.v1alpha.EventCriteriaScoping 47, // 59: google.analytics.data.v1alpha.EventSegmentConditionGroup.segment_filter_expression:type_name -> google.analytics.data.v1alpha.SegmentFilterExpression 5, // 60: google.analytics.data.v1alpha.EventSegmentExclusion.event_exclusion_duration:type_name -> google.analytics.data.v1alpha.EventExclusionDuration 43, // 61: google.analytics.data.v1alpha.EventSegmentExclusion.event_exclusion_criteria:type_name -> google.analytics.data.v1alpha.EventSegmentCriteria 32, // 62: google.analytics.data.v1alpha.Segment.user_segment:type_name -> google.analytics.data.v1alpha.UserSegment 38, // 63: google.analytics.data.v1alpha.Segment.session_segment:type_name -> google.analytics.data.v1alpha.SessionSegment 42, // 64: google.analytics.data.v1alpha.Segment.event_segment:type_name -> google.analytics.data.v1alpha.EventSegment 48, // 65: google.analytics.data.v1alpha.SegmentFilterExpression.and_group:type_name -> google.analytics.data.v1alpha.SegmentFilterExpressionList 48, // 66: google.analytics.data.v1alpha.SegmentFilterExpression.or_group:type_name -> google.analytics.data.v1alpha.SegmentFilterExpressionList 47, // 67: google.analytics.data.v1alpha.SegmentFilterExpression.not_expression:type_name -> google.analytics.data.v1alpha.SegmentFilterExpression 49, // 68: google.analytics.data.v1alpha.SegmentFilterExpression.segment_filter:type_name -> google.analytics.data.v1alpha.SegmentFilter 51, // 69: google.analytics.data.v1alpha.SegmentFilterExpression.segment_event_filter:type_name -> google.analytics.data.v1alpha.SegmentEventFilter 47, // 70: google.analytics.data.v1alpha.SegmentFilterExpressionList.expressions:type_name -> google.analytics.data.v1alpha.SegmentFilterExpression 15, // 71: google.analytics.data.v1alpha.SegmentFilter.string_filter:type_name -> google.analytics.data.v1alpha.StringFilter 16, // 72: google.analytics.data.v1alpha.SegmentFilter.in_list_filter:type_name -> google.analytics.data.v1alpha.InListFilter 17, // 73: google.analytics.data.v1alpha.SegmentFilter.numeric_filter:type_name -> google.analytics.data.v1alpha.NumericFilter 18, // 74: google.analytics.data.v1alpha.SegmentFilter.between_filter:type_name -> google.analytics.data.v1alpha.BetweenFilter 50, // 75: google.analytics.data.v1alpha.SegmentFilter.filter_scoping:type_name -> google.analytics.data.v1alpha.SegmentFilterScoping 52, // 76: google.analytics.data.v1alpha.SegmentEventFilter.segment_parameter_filter_expression:type_name -> google.analytics.data.v1alpha.SegmentParameterFilterExpression 53, // 77: google.analytics.data.v1alpha.SegmentParameterFilterExpression.and_group:type_name -> google.analytics.data.v1alpha.SegmentParameterFilterExpressionList 53, // 78: google.analytics.data.v1alpha.SegmentParameterFilterExpression.or_group:type_name -> google.analytics.data.v1alpha.SegmentParameterFilterExpressionList 52, // 79: google.analytics.data.v1alpha.SegmentParameterFilterExpression.not_expression:type_name -> google.analytics.data.v1alpha.SegmentParameterFilterExpression 54, // 80: google.analytics.data.v1alpha.SegmentParameterFilterExpression.segment_parameter_filter:type_name -> google.analytics.data.v1alpha.SegmentParameterFilter 52, // 81: google.analytics.data.v1alpha.SegmentParameterFilterExpressionList.expressions:type_name -> google.analytics.data.v1alpha.SegmentParameterFilterExpression 15, // 82: google.analytics.data.v1alpha.SegmentParameterFilter.string_filter:type_name -> google.analytics.data.v1alpha.StringFilter 16, // 83: google.analytics.data.v1alpha.SegmentParameterFilter.in_list_filter:type_name -> google.analytics.data.v1alpha.InListFilter 17, // 84: google.analytics.data.v1alpha.SegmentParameterFilter.numeric_filter:type_name -> google.analytics.data.v1alpha.NumericFilter 18, // 85: google.analytics.data.v1alpha.SegmentParameterFilter.between_filter:type_name -> google.analytics.data.v1alpha.BetweenFilter 55, // 86: google.analytics.data.v1alpha.SegmentParameterFilter.filter_scoping:type_name -> google.analytics.data.v1alpha.SegmentParameterFilterScoping 57, // 87: google.analytics.data.v1alpha.FunnelFilterExpression.and_group:type_name -> google.analytics.data.v1alpha.FunnelFilterExpressionList 57, // 88: google.analytics.data.v1alpha.FunnelFilterExpression.or_group:type_name -> google.analytics.data.v1alpha.FunnelFilterExpressionList 56, // 89: google.analytics.data.v1alpha.FunnelFilterExpression.not_expression:type_name -> google.analytics.data.v1alpha.FunnelFilterExpression 58, // 90: google.analytics.data.v1alpha.FunnelFilterExpression.funnel_field_filter:type_name -> google.analytics.data.v1alpha.FunnelFieldFilter 59, // 91: google.analytics.data.v1alpha.FunnelFilterExpression.funnel_event_filter:type_name -> google.analytics.data.v1alpha.FunnelEventFilter 56, // 92: google.analytics.data.v1alpha.FunnelFilterExpressionList.expressions:type_name -> google.analytics.data.v1alpha.FunnelFilterExpression 15, // 93: google.analytics.data.v1alpha.FunnelFieldFilter.string_filter:type_name -> google.analytics.data.v1alpha.StringFilter 16, // 94: google.analytics.data.v1alpha.FunnelFieldFilter.in_list_filter:type_name -> google.analytics.data.v1alpha.InListFilter 17, // 95: google.analytics.data.v1alpha.FunnelFieldFilter.numeric_filter:type_name -> google.analytics.data.v1alpha.NumericFilter 18, // 96: google.analytics.data.v1alpha.FunnelFieldFilter.between_filter:type_name -> google.analytics.data.v1alpha.BetweenFilter 60, // 97: google.analytics.data.v1alpha.FunnelEventFilter.funnel_parameter_filter_expression:type_name -> google.analytics.data.v1alpha.FunnelParameterFilterExpression 61, // 98: google.analytics.data.v1alpha.FunnelParameterFilterExpression.and_group:type_name -> google.analytics.data.v1alpha.FunnelParameterFilterExpressionList 61, // 99: google.analytics.data.v1alpha.FunnelParameterFilterExpression.or_group:type_name -> google.analytics.data.v1alpha.FunnelParameterFilterExpressionList 60, // 100: google.analytics.data.v1alpha.FunnelParameterFilterExpression.not_expression:type_name -> google.analytics.data.v1alpha.FunnelParameterFilterExpression 62, // 101: google.analytics.data.v1alpha.FunnelParameterFilterExpression.funnel_parameter_filter:type_name -> google.analytics.data.v1alpha.FunnelParameterFilter 60, // 102: google.analytics.data.v1alpha.FunnelParameterFilterExpressionList.expressions:type_name -> google.analytics.data.v1alpha.FunnelParameterFilterExpression 15, // 103: google.analytics.data.v1alpha.FunnelParameterFilter.string_filter:type_name -> google.analytics.data.v1alpha.StringFilter 16, // 104: google.analytics.data.v1alpha.FunnelParameterFilter.in_list_filter:type_name -> google.analytics.data.v1alpha.InListFilter 17, // 105: google.analytics.data.v1alpha.FunnelParameterFilter.numeric_filter:type_name -> google.analytics.data.v1alpha.NumericFilter 18, // 106: google.analytics.data.v1alpha.FunnelParameterFilter.between_filter:type_name -> google.analytics.data.v1alpha.BetweenFilter 64, // 107: google.analytics.data.v1alpha.FunnelResponseMetadata.sampling_metadatas:type_name -> google.analytics.data.v1alpha.SamplingMetadata 108, // [108:108] is the sub-list for method output_type 108, // [108:108] is the sub-list for method input_type 108, // [108:108] is the sub-list for extension type_name 108, // [108:108] is the sub-list for extension extendee 0, // [0:108] is the sub-list for field type_name } func init() { file_google_analytics_data_v1alpha_data_proto_init() } func file_google_analytics_data_v1alpha_data_proto_init() { if File_google_analytics_data_v1alpha_data_proto != nil { return } if !protoimpl.UnsafeEnabled { file_google_analytics_data_v1alpha_data_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*DateRange); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_google_analytics_data_v1alpha_data_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Dimension); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_google_analytics_data_v1alpha_data_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*DimensionExpression); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_google_analytics_data_v1alpha_data_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*FilterExpression); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_google_analytics_data_v1alpha_data_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*FilterExpressionList); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_google_analytics_data_v1alpha_data_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Filter); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_google_analytics_data_v1alpha_data_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*StringFilter); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_google_analytics_data_v1alpha_data_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*InListFilter); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_google_analytics_data_v1alpha_data_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*NumericFilter); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_google_analytics_data_v1alpha_data_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*BetweenFilter); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_google_analytics_data_v1alpha_data_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*NumericValue); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_google_analytics_data_v1alpha_data_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*DimensionHeader); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_google_analytics_data_v1alpha_data_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*MetricHeader); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_google_analytics_data_v1alpha_data_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Row); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_google_analytics_data_v1alpha_data_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*DimensionValue); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_google_analytics_data_v1alpha_data_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*MetricValue); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_google_analytics_data_v1alpha_data_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*PropertyQuota); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_google_analytics_data_v1alpha_data_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*QuotaStatus); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_google_analytics_data_v1alpha_data_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*FunnelBreakdown); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_google_analytics_data_v1alpha_data_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*FunnelNextAction); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_google_analytics_data_v1alpha_data_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Funnel); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_google_analytics_data_v1alpha_data_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*FunnelStep); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_google_analytics_data_v1alpha_data_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*FunnelSubReport); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_google_analytics_data_v1alpha_data_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*UserSegment); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_google_analytics_data_v1alpha_data_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*UserSegmentCriteria); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_google_analytics_data_v1alpha_data_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*UserSegmentConditionGroup); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_google_analytics_data_v1alpha_data_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*UserSegmentSequenceGroup); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_google_analytics_data_v1alpha_data_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*UserSequenceStep); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_google_analytics_data_v1alpha_data_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*UserSegmentExclusion); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_google_analytics_data_v1alpha_data_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SessionSegment); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_google_analytics_data_v1alpha_data_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SessionSegmentCriteria); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_google_analytics_data_v1alpha_data_proto_msgTypes[31].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SessionSegmentConditionGroup); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_google_analytics_data_v1alpha_data_proto_msgTypes[32].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SessionSegmentExclusion); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_google_analytics_data_v1alpha_data_proto_msgTypes[33].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*EventSegment); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_google_analytics_data_v1alpha_data_proto_msgTypes[34].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*EventSegmentCriteria); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_google_analytics_data_v1alpha_data_proto_msgTypes[35].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*EventSegmentConditionGroup); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_google_analytics_data_v1alpha_data_proto_msgTypes[36].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*EventSegmentExclusion); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_google_analytics_data_v1alpha_data_proto_msgTypes[37].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Segment); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_google_analytics_data_v1alpha_data_proto_msgTypes[38].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SegmentFilterExpression); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_google_analytics_data_v1alpha_data_proto_msgTypes[39].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SegmentFilterExpressionList); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_google_analytics_data_v1alpha_data_proto_msgTypes[40].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SegmentFilter); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_google_analytics_data_v1alpha_data_proto_msgTypes[41].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SegmentFilterScoping); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_google_analytics_data_v1alpha_data_proto_msgTypes[42].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SegmentEventFilter); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_google_analytics_data_v1alpha_data_proto_msgTypes[43].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SegmentParameterFilterExpression); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_google_analytics_data_v1alpha_data_proto_msgTypes[44].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SegmentParameterFilterExpressionList); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_google_analytics_data_v1alpha_data_proto_msgTypes[45].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SegmentParameterFilter); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_google_analytics_data_v1alpha_data_proto_msgTypes[46].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SegmentParameterFilterScoping); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_google_analytics_data_v1alpha_data_proto_msgTypes[47].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*FunnelFilterExpression); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_google_analytics_data_v1alpha_data_proto_msgTypes[48].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*FunnelFilterExpressionList); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_google_analytics_data_v1alpha_data_proto_msgTypes[49].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*FunnelFieldFilter); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_google_analytics_data_v1alpha_data_proto_msgTypes[50].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*FunnelEventFilter); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_google_analytics_data_v1alpha_data_proto_msgTypes[51].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*FunnelParameterFilterExpression); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_google_analytics_data_v1alpha_data_proto_msgTypes[52].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*FunnelParameterFilterExpressionList); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_google_analytics_data_v1alpha_data_proto_msgTypes[53].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*FunnelParameterFilter); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_google_analytics_data_v1alpha_data_proto_msgTypes[54].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*FunnelResponseMetadata); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_google_analytics_data_v1alpha_data_proto_msgTypes[55].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SamplingMetadata); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_google_analytics_data_v1alpha_data_proto_msgTypes[56].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*DimensionExpression_CaseExpression); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_google_analytics_data_v1alpha_data_proto_msgTypes[57].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*DimensionExpression_ConcatenateExpression); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } } file_google_analytics_data_v1alpha_data_proto_msgTypes[2].OneofWrappers = []interface{}{ (*DimensionExpression_LowerCase)(nil), (*DimensionExpression_UpperCase)(nil), (*DimensionExpression_Concatenate)(nil), } file_google_analytics_data_v1alpha_data_proto_msgTypes[3].OneofWrappers = []interface{}{ (*FilterExpression_AndGroup)(nil), (*FilterExpression_OrGroup)(nil), (*FilterExpression_NotExpression)(nil), (*FilterExpression_Filter)(nil), } file_google_analytics_data_v1alpha_data_proto_msgTypes[5].OneofWrappers = []interface{}{ (*Filter_StringFilter)(nil), (*Filter_InListFilter)(nil), (*Filter_NumericFilter)(nil), (*Filter_BetweenFilter)(nil), } file_google_analytics_data_v1alpha_data_proto_msgTypes[10].OneofWrappers = []interface{}{ (*NumericValue_Int64Value)(nil), (*NumericValue_DoubleValue)(nil), } file_google_analytics_data_v1alpha_data_proto_msgTypes[14].OneofWrappers = []interface{}{ (*DimensionValue_Value)(nil), } file_google_analytics_data_v1alpha_data_proto_msgTypes[15].OneofWrappers = []interface{}{ (*MetricValue_Value)(nil), } file_google_analytics_data_v1alpha_data_proto_msgTypes[18].OneofWrappers = []interface{}{} file_google_analytics_data_v1alpha_data_proto_msgTypes[19].OneofWrappers = []interface{}{} file_google_analytics_data_v1alpha_data_proto_msgTypes[21].OneofWrappers = []interface{}{} file_google_analytics_data_v1alpha_data_proto_msgTypes[37].OneofWrappers = []interface{}{ (*Segment_UserSegment)(nil), (*Segment_SessionSegment)(nil), (*Segment_EventSegment)(nil), } file_google_analytics_data_v1alpha_data_proto_msgTypes[38].OneofWrappers = []interface{}{ (*SegmentFilterExpression_AndGroup)(nil), (*SegmentFilterExpression_OrGroup)(nil), (*SegmentFilterExpression_NotExpression)(nil), (*SegmentFilterExpression_SegmentFilter)(nil), (*SegmentFilterExpression_SegmentEventFilter)(nil), } file_google_analytics_data_v1alpha_data_proto_msgTypes[40].OneofWrappers = []interface{}{ (*SegmentFilter_StringFilter)(nil), (*SegmentFilter_InListFilter)(nil), (*SegmentFilter_NumericFilter)(nil), (*SegmentFilter_BetweenFilter)(nil), } file_google_analytics_data_v1alpha_data_proto_msgTypes[41].OneofWrappers = []interface{}{} file_google_analytics_data_v1alpha_data_proto_msgTypes[42].OneofWrappers = []interface{}{} file_google_analytics_data_v1alpha_data_proto_msgTypes[43].OneofWrappers = []interface{}{ (*SegmentParameterFilterExpression_AndGroup)(nil), (*SegmentParameterFilterExpression_OrGroup)(nil), (*SegmentParameterFilterExpression_NotExpression)(nil), (*SegmentParameterFilterExpression_SegmentParameterFilter)(nil), } file_google_analytics_data_v1alpha_data_proto_msgTypes[45].OneofWrappers = []interface{}{ (*SegmentParameterFilter_EventParameterName)(nil), (*SegmentParameterFilter_ItemParameterName)(nil), (*SegmentParameterFilter_StringFilter)(nil), (*SegmentParameterFilter_InListFilter)(nil), (*SegmentParameterFilter_NumericFilter)(nil), (*SegmentParameterFilter_BetweenFilter)(nil), } file_google_analytics_data_v1alpha_data_proto_msgTypes[46].OneofWrappers = []interface{}{} file_google_analytics_data_v1alpha_data_proto_msgTypes[47].OneofWrappers = []interface{}{ (*FunnelFilterExpression_AndGroup)(nil), (*FunnelFilterExpression_OrGroup)(nil), (*FunnelFilterExpression_NotExpression)(nil), (*FunnelFilterExpression_FunnelFieldFilter)(nil), (*FunnelFilterExpression_FunnelEventFilter)(nil), } file_google_analytics_data_v1alpha_data_proto_msgTypes[49].OneofWrappers = []interface{}{ (*FunnelFieldFilter_StringFilter)(nil), (*FunnelFieldFilter_InListFilter)(nil), (*FunnelFieldFilter_NumericFilter)(nil), (*FunnelFieldFilter_BetweenFilter)(nil), } file_google_analytics_data_v1alpha_data_proto_msgTypes[50].OneofWrappers = []interface{}{} file_google_analytics_data_v1alpha_data_proto_msgTypes[51].OneofWrappers = []interface{}{ (*FunnelParameterFilterExpression_AndGroup)(nil), (*FunnelParameterFilterExpression_OrGroup)(nil), (*FunnelParameterFilterExpression_NotExpression)(nil), (*FunnelParameterFilterExpression_FunnelParameterFilter)(nil), } file_google_analytics_data_v1alpha_data_proto_msgTypes[53].OneofWrappers = []interface{}{ (*FunnelParameterFilter_EventParameterName)(nil), (*FunnelParameterFilter_ItemParameterName)(nil), (*FunnelParameterFilter_StringFilter)(nil), (*FunnelParameterFilter_InListFilter)(nil), (*FunnelParameterFilter_NumericFilter)(nil), (*FunnelParameterFilter_BetweenFilter)(nil), } type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_google_analytics_data_v1alpha_data_proto_rawDesc, NumEnums: 9, NumMessages: 58, NumExtensions: 0, NumServices: 0, }, GoTypes: file_google_analytics_data_v1alpha_data_proto_goTypes, DependencyIndexes: file_google_analytics_data_v1alpha_data_proto_depIdxs, EnumInfos: file_google_analytics_data_v1alpha_data_proto_enumTypes, MessageInfos: file_google_analytics_data_v1alpha_data_proto_msgTypes, }.Build() File_google_analytics_data_v1alpha_data_proto = out.File file_google_analytics_data_v1alpha_data_proto_rawDesc = nil file_google_analytics_data_v1alpha_data_proto_goTypes = nil file_google_analytics_data_v1alpha_data_proto_depIdxs = nil }