// Code generated by protoc-gen-go. DO NOT EDIT.
// source: google/ads/googleads/v1/resources/recommendation.proto

package resources // import "google.golang.org/genproto/googleapis/ads/googleads/v1/resources"

import proto "github.com/golang/protobuf/proto"
import fmt "fmt"
import math "math"
import wrappers "github.com/golang/protobuf/ptypes/wrappers"
import common "google.golang.org/genproto/googleapis/ads/googleads/v1/common"
import enums "google.golang.org/genproto/googleapis/ads/googleads/v1/enums"
import _ "google.golang.org/genproto/googleapis/api/annotations"

// Reference imports to suppress errors if they are not otherwise used.
var _ = proto.Marshal
var _ = fmt.Errorf
var _ = math.Inf

// This is a compile-time assertion to ensure that this generated file
// is compatible with the proto package it is being compiled against.
// A compilation error at this line likely means your copy of the
// proto package needs to be updated.
const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package

// A recommendation.
type Recommendation struct {
	// The resource name of the recommendation.
	//
	// `customers/{customer_id}/recommendations/{recommendation_id}`
	ResourceName string `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
	// The type of recommendation.
	Type enums.RecommendationTypeEnum_RecommendationType `protobuf:"varint,2,opt,name=type,proto3,enum=google.ads.googleads.v1.enums.RecommendationTypeEnum_RecommendationType" json:"type,omitempty"`
	// The impact on account performance as a result of applying the
	// recommendation.
	Impact *Recommendation_RecommendationImpact `protobuf:"bytes,3,opt,name=impact,proto3" json:"impact,omitempty"`
	// The budget targeted by this recommendation. This will be set only when
	// the recommendation affects a single campaign budget.
	//
	// This field will be set for the following recommendation types:
	// CAMPAIGN_BUDGET
	CampaignBudget *wrappers.StringValue `protobuf:"bytes,5,opt,name=campaign_budget,json=campaignBudget,proto3" json:"campaign_budget,omitempty"`
	// The campaign targeted by this recommendation. This will be set only when
	// the recommendation affects a single campaign.
	//
	// This field will be set for the following recommendation types:
	// ENHANCED_CPC_OPT_IN, KEYWORD, MAXIMIZE_CLICKS_OPT_IN,
	// MAXIMIZE_CONVERSIONS_OPT_IN, OPTIMIZE_AD_ROTATION, SEARCH_PARTNERS_OPT_IN,
	// TARGET_CPA_OPT_IN, TEXT_AD
	Campaign *wrappers.StringValue `protobuf:"bytes,6,opt,name=campaign,proto3" json:"campaign,omitempty"`
	// The ad group targeted by this recommendation. This will be set only when
	// the recommendation affects a single ad group.
	//
	// This field will be set for the following recommendation types:
	// KEYWORD, OPTIMIZE_AD_ROTATION, TEXT_AD
	AdGroup *wrappers.StringValue `protobuf:"bytes,7,opt,name=ad_group,json=adGroup,proto3" json:"ad_group,omitempty"`
	// Whether the recommendation is dismissed or not.
	Dismissed *wrappers.BoolValue `protobuf:"bytes,13,opt,name=dismissed,proto3" json:"dismissed,omitempty"`
	// The details of recommendation.
	//
	// Types that are valid to be assigned to Recommendation:
	//	*Recommendation_CampaignBudgetRecommendation_
	//	*Recommendation_KeywordRecommendation_
	//	*Recommendation_TextAdRecommendation_
	//	*Recommendation_TargetCpaOptInRecommendation_
	//	*Recommendation_MaximizeConversionsOptInRecommendation_
	//	*Recommendation_EnhancedCpcOptInRecommendation_
	//	*Recommendation_SearchPartnersOptInRecommendation_
	//	*Recommendation_MaximizeClicksOptInRecommendation_
	//	*Recommendation_OptimizeAdRotationRecommendation_
	//	*Recommendation_KeywordMatchTypeRecommendation_
	//	*Recommendation_MoveUnusedBudgetRecommendation_
	Recommendation       isRecommendation_Recommendation `protobuf_oneof:"recommendation"`
	XXX_NoUnkeyedLiteral struct{}                        `json:"-"`
	XXX_unrecognized     []byte                          `json:"-"`
	XXX_sizecache        int32                           `json:"-"`
}

func (m *Recommendation) Reset()         { *m = Recommendation{} }
func (m *Recommendation) String() string { return proto.CompactTextString(m) }
func (*Recommendation) ProtoMessage()    {}
func (*Recommendation) Descriptor() ([]byte, []int) {
	return fileDescriptor_recommendation_e8cdb56e529506e5, []int{0}
}
func (m *Recommendation) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_Recommendation.Unmarshal(m, b)
}
func (m *Recommendation) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_Recommendation.Marshal(b, m, deterministic)
}
func (dst *Recommendation) XXX_Merge(src proto.Message) {
	xxx_messageInfo_Recommendation.Merge(dst, src)
}
func (m *Recommendation) XXX_Size() int {
	return xxx_messageInfo_Recommendation.Size(m)
}
func (m *Recommendation) XXX_DiscardUnknown() {
	xxx_messageInfo_Recommendation.DiscardUnknown(m)
}

var xxx_messageInfo_Recommendation proto.InternalMessageInfo

func (m *Recommendation) GetResourceName() string {
	if m != nil {
		return m.ResourceName
	}
	return ""
}

func (m *Recommendation) GetType() enums.RecommendationTypeEnum_RecommendationType {
	if m != nil {
		return m.Type
	}
	return enums.RecommendationTypeEnum_UNSPECIFIED
}

func (m *Recommendation) GetImpact() *Recommendation_RecommendationImpact {
	if m != nil {
		return m.Impact
	}
	return nil
}

func (m *Recommendation) GetCampaignBudget() *wrappers.StringValue {
	if m != nil {
		return m.CampaignBudget
	}
	return nil
}

func (m *Recommendation) GetCampaign() *wrappers.StringValue {
	if m != nil {
		return m.Campaign
	}
	return nil
}

func (m *Recommendation) GetAdGroup() *wrappers.StringValue {
	if m != nil {
		return m.AdGroup
	}
	return nil
}

func (m *Recommendation) GetDismissed() *wrappers.BoolValue {
	if m != nil {
		return m.Dismissed
	}
	return nil
}

type isRecommendation_Recommendation interface {
	isRecommendation_Recommendation()
}

type Recommendation_CampaignBudgetRecommendation_ struct {
	CampaignBudgetRecommendation *Recommendation_CampaignBudgetRecommendation `protobuf:"bytes,4,opt,name=campaign_budget_recommendation,json=campaignBudgetRecommendation,proto3,oneof"`
}

type Recommendation_KeywordRecommendation_ struct {
	KeywordRecommendation *Recommendation_KeywordRecommendation `protobuf:"bytes,8,opt,name=keyword_recommendation,json=keywordRecommendation,proto3,oneof"`
}

type Recommendation_TextAdRecommendation_ struct {
	TextAdRecommendation *Recommendation_TextAdRecommendation `protobuf:"bytes,9,opt,name=text_ad_recommendation,json=textAdRecommendation,proto3,oneof"`
}

type Recommendation_TargetCpaOptInRecommendation_ struct {
	TargetCpaOptInRecommendation *Recommendation_TargetCpaOptInRecommendation `protobuf:"bytes,10,opt,name=target_cpa_opt_in_recommendation,json=targetCpaOptInRecommendation,proto3,oneof"`
}

type Recommendation_MaximizeConversionsOptInRecommendation_ struct {
	MaximizeConversionsOptInRecommendation *Recommendation_MaximizeConversionsOptInRecommendation `protobuf:"bytes,11,opt,name=maximize_conversions_opt_in_recommendation,json=maximizeConversionsOptInRecommendation,proto3,oneof"`
}

type Recommendation_EnhancedCpcOptInRecommendation_ struct {
	EnhancedCpcOptInRecommendation *Recommendation_EnhancedCpcOptInRecommendation `protobuf:"bytes,12,opt,name=enhanced_cpc_opt_in_recommendation,json=enhancedCpcOptInRecommendation,proto3,oneof"`
}

type Recommendation_SearchPartnersOptInRecommendation_ struct {
	SearchPartnersOptInRecommendation *Recommendation_SearchPartnersOptInRecommendation `protobuf:"bytes,14,opt,name=search_partners_opt_in_recommendation,json=searchPartnersOptInRecommendation,proto3,oneof"`
}

type Recommendation_MaximizeClicksOptInRecommendation_ struct {
	MaximizeClicksOptInRecommendation *Recommendation_MaximizeClicksOptInRecommendation `protobuf:"bytes,15,opt,name=maximize_clicks_opt_in_recommendation,json=maximizeClicksOptInRecommendation,proto3,oneof"`
}

type Recommendation_OptimizeAdRotationRecommendation_ struct {
	OptimizeAdRotationRecommendation *Recommendation_OptimizeAdRotationRecommendation `protobuf:"bytes,16,opt,name=optimize_ad_rotation_recommendation,json=optimizeAdRotationRecommendation,proto3,oneof"`
}

type Recommendation_KeywordMatchTypeRecommendation_ struct {
	KeywordMatchTypeRecommendation *Recommendation_KeywordMatchTypeRecommendation `protobuf:"bytes,20,opt,name=keyword_match_type_recommendation,json=keywordMatchTypeRecommendation,proto3,oneof"`
}

type Recommendation_MoveUnusedBudgetRecommendation_ struct {
	MoveUnusedBudgetRecommendation *Recommendation_MoveUnusedBudgetRecommendation `protobuf:"bytes,21,opt,name=move_unused_budget_recommendation,json=moveUnusedBudgetRecommendation,proto3,oneof"`
}

func (*Recommendation_CampaignBudgetRecommendation_) isRecommendation_Recommendation() {}

func (*Recommendation_KeywordRecommendation_) isRecommendation_Recommendation() {}

func (*Recommendation_TextAdRecommendation_) isRecommendation_Recommendation() {}

func (*Recommendation_TargetCpaOptInRecommendation_) isRecommendation_Recommendation() {}

func (*Recommendation_MaximizeConversionsOptInRecommendation_) isRecommendation_Recommendation() {}

func (*Recommendation_EnhancedCpcOptInRecommendation_) isRecommendation_Recommendation() {}

func (*Recommendation_SearchPartnersOptInRecommendation_) isRecommendation_Recommendation() {}

func (*Recommendation_MaximizeClicksOptInRecommendation_) isRecommendation_Recommendation() {}

func (*Recommendation_OptimizeAdRotationRecommendation_) isRecommendation_Recommendation() {}

func (*Recommendation_KeywordMatchTypeRecommendation_) isRecommendation_Recommendation() {}

func (*Recommendation_MoveUnusedBudgetRecommendation_) isRecommendation_Recommendation() {}

func (m *Recommendation) GetRecommendation() isRecommendation_Recommendation {
	if m != nil {
		return m.Recommendation
	}
	return nil
}

func (m *Recommendation) GetCampaignBudgetRecommendation() *Recommendation_CampaignBudgetRecommendation {
	if x, ok := m.GetRecommendation().(*Recommendation_CampaignBudgetRecommendation_); ok {
		return x.CampaignBudgetRecommendation
	}
	return nil
}

func (m *Recommendation) GetKeywordRecommendation() *Recommendation_KeywordRecommendation {
	if x, ok := m.GetRecommendation().(*Recommendation_KeywordRecommendation_); ok {
		return x.KeywordRecommendation
	}
	return nil
}

func (m *Recommendation) GetTextAdRecommendation() *Recommendation_TextAdRecommendation {
	if x, ok := m.GetRecommendation().(*Recommendation_TextAdRecommendation_); ok {
		return x.TextAdRecommendation
	}
	return nil
}

func (m *Recommendation) GetTargetCpaOptInRecommendation() *Recommendation_TargetCpaOptInRecommendation {
	if x, ok := m.GetRecommendation().(*Recommendation_TargetCpaOptInRecommendation_); ok {
		return x.TargetCpaOptInRecommendation
	}
	return nil
}

func (m *Recommendation) GetMaximizeConversionsOptInRecommendation() *Recommendation_MaximizeConversionsOptInRecommendation {
	if x, ok := m.GetRecommendation().(*Recommendation_MaximizeConversionsOptInRecommendation_); ok {
		return x.MaximizeConversionsOptInRecommendation
	}
	return nil
}

func (m *Recommendation) GetEnhancedCpcOptInRecommendation() *Recommendation_EnhancedCpcOptInRecommendation {
	if x, ok := m.GetRecommendation().(*Recommendation_EnhancedCpcOptInRecommendation_); ok {
		return x.EnhancedCpcOptInRecommendation
	}
	return nil
}

func (m *Recommendation) GetSearchPartnersOptInRecommendation() *Recommendation_SearchPartnersOptInRecommendation {
	if x, ok := m.GetRecommendation().(*Recommendation_SearchPartnersOptInRecommendation_); ok {
		return x.SearchPartnersOptInRecommendation
	}
	return nil
}

func (m *Recommendation) GetMaximizeClicksOptInRecommendation() *Recommendation_MaximizeClicksOptInRecommendation {
	if x, ok := m.GetRecommendation().(*Recommendation_MaximizeClicksOptInRecommendation_); ok {
		return x.MaximizeClicksOptInRecommendation
	}
	return nil
}

func (m *Recommendation) GetOptimizeAdRotationRecommendation() *Recommendation_OptimizeAdRotationRecommendation {
	if x, ok := m.GetRecommendation().(*Recommendation_OptimizeAdRotationRecommendation_); ok {
		return x.OptimizeAdRotationRecommendation
	}
	return nil
}

func (m *Recommendation) GetKeywordMatchTypeRecommendation() *Recommendation_KeywordMatchTypeRecommendation {
	if x, ok := m.GetRecommendation().(*Recommendation_KeywordMatchTypeRecommendation_); ok {
		return x.KeywordMatchTypeRecommendation
	}
	return nil
}

func (m *Recommendation) GetMoveUnusedBudgetRecommendation() *Recommendation_MoveUnusedBudgetRecommendation {
	if x, ok := m.GetRecommendation().(*Recommendation_MoveUnusedBudgetRecommendation_); ok {
		return x.MoveUnusedBudgetRecommendation
	}
	return nil
}

// XXX_OneofFuncs is for the internal use of the proto package.
func (*Recommendation) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) {
	return _Recommendation_OneofMarshaler, _Recommendation_OneofUnmarshaler, _Recommendation_OneofSizer, []interface{}{
		(*Recommendation_CampaignBudgetRecommendation_)(nil),
		(*Recommendation_KeywordRecommendation_)(nil),
		(*Recommendation_TextAdRecommendation_)(nil),
		(*Recommendation_TargetCpaOptInRecommendation_)(nil),
		(*Recommendation_MaximizeConversionsOptInRecommendation_)(nil),
		(*Recommendation_EnhancedCpcOptInRecommendation_)(nil),
		(*Recommendation_SearchPartnersOptInRecommendation_)(nil),
		(*Recommendation_MaximizeClicksOptInRecommendation_)(nil),
		(*Recommendation_OptimizeAdRotationRecommendation_)(nil),
		(*Recommendation_KeywordMatchTypeRecommendation_)(nil),
		(*Recommendation_MoveUnusedBudgetRecommendation_)(nil),
	}
}

func _Recommendation_OneofMarshaler(msg proto.Message, b *proto.Buffer) error {
	m := msg.(*Recommendation)
	// recommendation
	switch x := m.Recommendation.(type) {
	case *Recommendation_CampaignBudgetRecommendation_:
		b.EncodeVarint(4<<3 | proto.WireBytes)
		if err := b.EncodeMessage(x.CampaignBudgetRecommendation); err != nil {
			return err
		}
	case *Recommendation_KeywordRecommendation_:
		b.EncodeVarint(8<<3 | proto.WireBytes)
		if err := b.EncodeMessage(x.KeywordRecommendation); err != nil {
			return err
		}
	case *Recommendation_TextAdRecommendation_:
		b.EncodeVarint(9<<3 | proto.WireBytes)
		if err := b.EncodeMessage(x.TextAdRecommendation); err != nil {
			return err
		}
	case *Recommendation_TargetCpaOptInRecommendation_:
		b.EncodeVarint(10<<3 | proto.WireBytes)
		if err := b.EncodeMessage(x.TargetCpaOptInRecommendation); err != nil {
			return err
		}
	case *Recommendation_MaximizeConversionsOptInRecommendation_:
		b.EncodeVarint(11<<3 | proto.WireBytes)
		if err := b.EncodeMessage(x.MaximizeConversionsOptInRecommendation); err != nil {
			return err
		}
	case *Recommendation_EnhancedCpcOptInRecommendation_:
		b.EncodeVarint(12<<3 | proto.WireBytes)
		if err := b.EncodeMessage(x.EnhancedCpcOptInRecommendation); err != nil {
			return err
		}
	case *Recommendation_SearchPartnersOptInRecommendation_:
		b.EncodeVarint(14<<3 | proto.WireBytes)
		if err := b.EncodeMessage(x.SearchPartnersOptInRecommendation); err != nil {
			return err
		}
	case *Recommendation_MaximizeClicksOptInRecommendation_:
		b.EncodeVarint(15<<3 | proto.WireBytes)
		if err := b.EncodeMessage(x.MaximizeClicksOptInRecommendation); err != nil {
			return err
		}
	case *Recommendation_OptimizeAdRotationRecommendation_:
		b.EncodeVarint(16<<3 | proto.WireBytes)
		if err := b.EncodeMessage(x.OptimizeAdRotationRecommendation); err != nil {
			return err
		}
	case *Recommendation_KeywordMatchTypeRecommendation_:
		b.EncodeVarint(20<<3 | proto.WireBytes)
		if err := b.EncodeMessage(x.KeywordMatchTypeRecommendation); err != nil {
			return err
		}
	case *Recommendation_MoveUnusedBudgetRecommendation_:
		b.EncodeVarint(21<<3 | proto.WireBytes)
		if err := b.EncodeMessage(x.MoveUnusedBudgetRecommendation); err != nil {
			return err
		}
	case nil:
	default:
		return fmt.Errorf("Recommendation.Recommendation has unexpected type %T", x)
	}
	return nil
}

func _Recommendation_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) {
	m := msg.(*Recommendation)
	switch tag {
	case 4: // recommendation.campaign_budget_recommendation
		if wire != proto.WireBytes {
			return true, proto.ErrInternalBadWireType
		}
		msg := new(Recommendation_CampaignBudgetRecommendation)
		err := b.DecodeMessage(msg)
		m.Recommendation = &Recommendation_CampaignBudgetRecommendation_{msg}
		return true, err
	case 8: // recommendation.keyword_recommendation
		if wire != proto.WireBytes {
			return true, proto.ErrInternalBadWireType
		}
		msg := new(Recommendation_KeywordRecommendation)
		err := b.DecodeMessage(msg)
		m.Recommendation = &Recommendation_KeywordRecommendation_{msg}
		return true, err
	case 9: // recommendation.text_ad_recommendation
		if wire != proto.WireBytes {
			return true, proto.ErrInternalBadWireType
		}
		msg := new(Recommendation_TextAdRecommendation)
		err := b.DecodeMessage(msg)
		m.Recommendation = &Recommendation_TextAdRecommendation_{msg}
		return true, err
	case 10: // recommendation.target_cpa_opt_in_recommendation
		if wire != proto.WireBytes {
			return true, proto.ErrInternalBadWireType
		}
		msg := new(Recommendation_TargetCpaOptInRecommendation)
		err := b.DecodeMessage(msg)
		m.Recommendation = &Recommendation_TargetCpaOptInRecommendation_{msg}
		return true, err
	case 11: // recommendation.maximize_conversions_opt_in_recommendation
		if wire != proto.WireBytes {
			return true, proto.ErrInternalBadWireType
		}
		msg := new(Recommendation_MaximizeConversionsOptInRecommendation)
		err := b.DecodeMessage(msg)
		m.Recommendation = &Recommendation_MaximizeConversionsOptInRecommendation_{msg}
		return true, err
	case 12: // recommendation.enhanced_cpc_opt_in_recommendation
		if wire != proto.WireBytes {
			return true, proto.ErrInternalBadWireType
		}
		msg := new(Recommendation_EnhancedCpcOptInRecommendation)
		err := b.DecodeMessage(msg)
		m.Recommendation = &Recommendation_EnhancedCpcOptInRecommendation_{msg}
		return true, err
	case 14: // recommendation.search_partners_opt_in_recommendation
		if wire != proto.WireBytes {
			return true, proto.ErrInternalBadWireType
		}
		msg := new(Recommendation_SearchPartnersOptInRecommendation)
		err := b.DecodeMessage(msg)
		m.Recommendation = &Recommendation_SearchPartnersOptInRecommendation_{msg}
		return true, err
	case 15: // recommendation.maximize_clicks_opt_in_recommendation
		if wire != proto.WireBytes {
			return true, proto.ErrInternalBadWireType
		}
		msg := new(Recommendation_MaximizeClicksOptInRecommendation)
		err := b.DecodeMessage(msg)
		m.Recommendation = &Recommendation_MaximizeClicksOptInRecommendation_{msg}
		return true, err
	case 16: // recommendation.optimize_ad_rotation_recommendation
		if wire != proto.WireBytes {
			return true, proto.ErrInternalBadWireType
		}
		msg := new(Recommendation_OptimizeAdRotationRecommendation)
		err := b.DecodeMessage(msg)
		m.Recommendation = &Recommendation_OptimizeAdRotationRecommendation_{msg}
		return true, err
	case 20: // recommendation.keyword_match_type_recommendation
		if wire != proto.WireBytes {
			return true, proto.ErrInternalBadWireType
		}
		msg := new(Recommendation_KeywordMatchTypeRecommendation)
		err := b.DecodeMessage(msg)
		m.Recommendation = &Recommendation_KeywordMatchTypeRecommendation_{msg}
		return true, err
	case 21: // recommendation.move_unused_budget_recommendation
		if wire != proto.WireBytes {
			return true, proto.ErrInternalBadWireType
		}
		msg := new(Recommendation_MoveUnusedBudgetRecommendation)
		err := b.DecodeMessage(msg)
		m.Recommendation = &Recommendation_MoveUnusedBudgetRecommendation_{msg}
		return true, err
	default:
		return false, nil
	}
}

func _Recommendation_OneofSizer(msg proto.Message) (n int) {
	m := msg.(*Recommendation)
	// recommendation
	switch x := m.Recommendation.(type) {
	case *Recommendation_CampaignBudgetRecommendation_:
		s := proto.Size(x.CampaignBudgetRecommendation)
		n += 1 // tag and wire
		n += proto.SizeVarint(uint64(s))
		n += s
	case *Recommendation_KeywordRecommendation_:
		s := proto.Size(x.KeywordRecommendation)
		n += 1 // tag and wire
		n += proto.SizeVarint(uint64(s))
		n += s
	case *Recommendation_TextAdRecommendation_:
		s := proto.Size(x.TextAdRecommendation)
		n += 1 // tag and wire
		n += proto.SizeVarint(uint64(s))
		n += s
	case *Recommendation_TargetCpaOptInRecommendation_:
		s := proto.Size(x.TargetCpaOptInRecommendation)
		n += 1 // tag and wire
		n += proto.SizeVarint(uint64(s))
		n += s
	case *Recommendation_MaximizeConversionsOptInRecommendation_:
		s := proto.Size(x.MaximizeConversionsOptInRecommendation)
		n += 1 // tag and wire
		n += proto.SizeVarint(uint64(s))
		n += s
	case *Recommendation_EnhancedCpcOptInRecommendation_:
		s := proto.Size(x.EnhancedCpcOptInRecommendation)
		n += 1 // tag and wire
		n += proto.SizeVarint(uint64(s))
		n += s
	case *Recommendation_SearchPartnersOptInRecommendation_:
		s := proto.Size(x.SearchPartnersOptInRecommendation)
		n += 1 // tag and wire
		n += proto.SizeVarint(uint64(s))
		n += s
	case *Recommendation_MaximizeClicksOptInRecommendation_:
		s := proto.Size(x.MaximizeClicksOptInRecommendation)
		n += 1 // tag and wire
		n += proto.SizeVarint(uint64(s))
		n += s
	case *Recommendation_OptimizeAdRotationRecommendation_:
		s := proto.Size(x.OptimizeAdRotationRecommendation)
		n += 2 // tag and wire
		n += proto.SizeVarint(uint64(s))
		n += s
	case *Recommendation_KeywordMatchTypeRecommendation_:
		s := proto.Size(x.KeywordMatchTypeRecommendation)
		n += 2 // tag and wire
		n += proto.SizeVarint(uint64(s))
		n += s
	case *Recommendation_MoveUnusedBudgetRecommendation_:
		s := proto.Size(x.MoveUnusedBudgetRecommendation)
		n += 2 // tag and wire
		n += proto.SizeVarint(uint64(s))
		n += s
	case nil:
	default:
		panic(fmt.Sprintf("proto: unexpected type %T in oneof", x))
	}
	return n
}

// The impact of making the change as described in the recommendation.
// Some types of recommendations may not have impact information.
type Recommendation_RecommendationImpact struct {
	// Base metrics at the time the recommendation was generated.
	BaseMetrics *Recommendation_RecommendationMetrics `protobuf:"bytes,1,opt,name=base_metrics,json=baseMetrics,proto3" json:"base_metrics,omitempty"`
	// Estimated metrics if the recommendation is applied.
	PotentialMetrics     *Recommendation_RecommendationMetrics `protobuf:"bytes,2,opt,name=potential_metrics,json=potentialMetrics,proto3" json:"potential_metrics,omitempty"`
	XXX_NoUnkeyedLiteral struct{}                              `json:"-"`
	XXX_unrecognized     []byte                                `json:"-"`
	XXX_sizecache        int32                                 `json:"-"`
}

func (m *Recommendation_RecommendationImpact) Reset()         { *m = Recommendation_RecommendationImpact{} }
func (m *Recommendation_RecommendationImpact) String() string { return proto.CompactTextString(m) }
func (*Recommendation_RecommendationImpact) ProtoMessage()    {}
func (*Recommendation_RecommendationImpact) Descriptor() ([]byte, []int) {
	return fileDescriptor_recommendation_e8cdb56e529506e5, []int{0, 0}
}
func (m *Recommendation_RecommendationImpact) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_Recommendation_RecommendationImpact.Unmarshal(m, b)
}
func (m *Recommendation_RecommendationImpact) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_Recommendation_RecommendationImpact.Marshal(b, m, deterministic)
}
func (dst *Recommendation_RecommendationImpact) XXX_Merge(src proto.Message) {
	xxx_messageInfo_Recommendation_RecommendationImpact.Merge(dst, src)
}
func (m *Recommendation_RecommendationImpact) XXX_Size() int {
	return xxx_messageInfo_Recommendation_RecommendationImpact.Size(m)
}
func (m *Recommendation_RecommendationImpact) XXX_DiscardUnknown() {
	xxx_messageInfo_Recommendation_RecommendationImpact.DiscardUnknown(m)
}

var xxx_messageInfo_Recommendation_RecommendationImpact proto.InternalMessageInfo

func (m *Recommendation_RecommendationImpact) GetBaseMetrics() *Recommendation_RecommendationMetrics {
	if m != nil {
		return m.BaseMetrics
	}
	return nil
}

func (m *Recommendation_RecommendationImpact) GetPotentialMetrics() *Recommendation_RecommendationMetrics {
	if m != nil {
		return m.PotentialMetrics
	}
	return nil
}

// Weekly account performance metrics. For some recommendation types, these
// are averaged over the past 90-day period and hence can be fractional.
type Recommendation_RecommendationMetrics struct {
	// Number of ad impressions.
	Impressions *wrappers.DoubleValue `protobuf:"bytes,1,opt,name=impressions,proto3" json:"impressions,omitempty"`
	// Number of ad clicks.
	Clicks *wrappers.DoubleValue `protobuf:"bytes,2,opt,name=clicks,proto3" json:"clicks,omitempty"`
	// Cost (in micros) for advertising, in the local currency for the account.
	CostMicros *wrappers.Int64Value `protobuf:"bytes,3,opt,name=cost_micros,json=costMicros,proto3" json:"cost_micros,omitempty"`
	// Number of conversions.
	Conversions *wrappers.DoubleValue `protobuf:"bytes,4,opt,name=conversions,proto3" json:"conversions,omitempty"`
	// Number of video views for a video ad campaign.
	VideoViews           *wrappers.DoubleValue `protobuf:"bytes,5,opt,name=video_views,json=videoViews,proto3" json:"video_views,omitempty"`
	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
	XXX_unrecognized     []byte                `json:"-"`
	XXX_sizecache        int32                 `json:"-"`
}

func (m *Recommendation_RecommendationMetrics) Reset()         { *m = Recommendation_RecommendationMetrics{} }
func (m *Recommendation_RecommendationMetrics) String() string { return proto.CompactTextString(m) }
func (*Recommendation_RecommendationMetrics) ProtoMessage()    {}
func (*Recommendation_RecommendationMetrics) Descriptor() ([]byte, []int) {
	return fileDescriptor_recommendation_e8cdb56e529506e5, []int{0, 1}
}
func (m *Recommendation_RecommendationMetrics) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_Recommendation_RecommendationMetrics.Unmarshal(m, b)
}
func (m *Recommendation_RecommendationMetrics) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_Recommendation_RecommendationMetrics.Marshal(b, m, deterministic)
}
func (dst *Recommendation_RecommendationMetrics) XXX_Merge(src proto.Message) {
	xxx_messageInfo_Recommendation_RecommendationMetrics.Merge(dst, src)
}
func (m *Recommendation_RecommendationMetrics) XXX_Size() int {
	return xxx_messageInfo_Recommendation_RecommendationMetrics.Size(m)
}
func (m *Recommendation_RecommendationMetrics) XXX_DiscardUnknown() {
	xxx_messageInfo_Recommendation_RecommendationMetrics.DiscardUnknown(m)
}

var xxx_messageInfo_Recommendation_RecommendationMetrics proto.InternalMessageInfo

func (m *Recommendation_RecommendationMetrics) GetImpressions() *wrappers.DoubleValue {
	if m != nil {
		return m.Impressions
	}
	return nil
}

func (m *Recommendation_RecommendationMetrics) GetClicks() *wrappers.DoubleValue {
	if m != nil {
		return m.Clicks
	}
	return nil
}

func (m *Recommendation_RecommendationMetrics) GetCostMicros() *wrappers.Int64Value {
	if m != nil {
		return m.CostMicros
	}
	return nil
}

func (m *Recommendation_RecommendationMetrics) GetConversions() *wrappers.DoubleValue {
	if m != nil {
		return m.Conversions
	}
	return nil
}

func (m *Recommendation_RecommendationMetrics) GetVideoViews() *wrappers.DoubleValue {
	if m != nil {
		return m.VideoViews
	}
	return nil
}

// The budget recommendation for budget constrained campaigns.
type Recommendation_CampaignBudgetRecommendation struct {
	// The current budget amount in micros.
	CurrentBudgetAmountMicros *wrappers.Int64Value `protobuf:"bytes,1,opt,name=current_budget_amount_micros,json=currentBudgetAmountMicros,proto3" json:"current_budget_amount_micros,omitempty"`
	// The recommended budget amount in micros.
	RecommendedBudgetAmountMicros *wrappers.Int64Value `protobuf:"bytes,2,opt,name=recommended_budget_amount_micros,json=recommendedBudgetAmountMicros,proto3" json:"recommended_budget_amount_micros,omitempty"`
	// The budget amounts and associated impact estimates for some values of
	// possible budget amounts.
	BudgetOptions        []*Recommendation_CampaignBudgetRecommendation_CampaignBudgetRecommendationOption `protobuf:"bytes,3,rep,name=budget_options,json=budgetOptions,proto3" json:"budget_options,omitempty"`
	XXX_NoUnkeyedLiteral struct{}                                                                          `json:"-"`
	XXX_unrecognized     []byte                                                                            `json:"-"`
	XXX_sizecache        int32                                                                             `json:"-"`
}

func (m *Recommendation_CampaignBudgetRecommendation) Reset() {
	*m = Recommendation_CampaignBudgetRecommendation{}
}
func (m *Recommendation_CampaignBudgetRecommendation) String() string {
	return proto.CompactTextString(m)
}
func (*Recommendation_CampaignBudgetRecommendation) ProtoMessage() {}
func (*Recommendation_CampaignBudgetRecommendation) Descriptor() ([]byte, []int) {
	return fileDescriptor_recommendation_e8cdb56e529506e5, []int{0, 2}
}
func (m *Recommendation_CampaignBudgetRecommendation) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_Recommendation_CampaignBudgetRecommendation.Unmarshal(m, b)
}
func (m *Recommendation_CampaignBudgetRecommendation) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_Recommendation_CampaignBudgetRecommendation.Marshal(b, m, deterministic)
}
func (dst *Recommendation_CampaignBudgetRecommendation) XXX_Merge(src proto.Message) {
	xxx_messageInfo_Recommendation_CampaignBudgetRecommendation.Merge(dst, src)
}
func (m *Recommendation_CampaignBudgetRecommendation) XXX_Size() int {
	return xxx_messageInfo_Recommendation_CampaignBudgetRecommendation.Size(m)
}
func (m *Recommendation_CampaignBudgetRecommendation) XXX_DiscardUnknown() {
	xxx_messageInfo_Recommendation_CampaignBudgetRecommendation.DiscardUnknown(m)
}

var xxx_messageInfo_Recommendation_CampaignBudgetRecommendation proto.InternalMessageInfo

func (m *Recommendation_CampaignBudgetRecommendation) GetCurrentBudgetAmountMicros() *wrappers.Int64Value {
	if m != nil {
		return m.CurrentBudgetAmountMicros
	}
	return nil
}

func (m *Recommendation_CampaignBudgetRecommendation) GetRecommendedBudgetAmountMicros() *wrappers.Int64Value {
	if m != nil {
		return m.RecommendedBudgetAmountMicros
	}
	return nil
}

func (m *Recommendation_CampaignBudgetRecommendation) GetBudgetOptions() []*Recommendation_CampaignBudgetRecommendation_CampaignBudgetRecommendationOption {
	if m != nil {
		return m.BudgetOptions
	}
	return nil
}

// The impact estimates for a given budget amount.
type Recommendation_CampaignBudgetRecommendation_CampaignBudgetRecommendationOption struct {
	// The budget amount for this option.
	BudgetAmountMicros *wrappers.Int64Value `protobuf:"bytes,1,opt,name=budget_amount_micros,json=budgetAmountMicros,proto3" json:"budget_amount_micros,omitempty"`
	// The impact estimate if budget is changed to amount specified in this
	// option.
	Impact               *Recommendation_RecommendationImpact `protobuf:"bytes,2,opt,name=impact,proto3" json:"impact,omitempty"`
	XXX_NoUnkeyedLiteral struct{}                             `json:"-"`
	XXX_unrecognized     []byte                               `json:"-"`
	XXX_sizecache        int32                                `json:"-"`
}

func (m *Recommendation_CampaignBudgetRecommendation_CampaignBudgetRecommendationOption) Reset() {
	*m = Recommendation_CampaignBudgetRecommendation_CampaignBudgetRecommendationOption{}
}
func (m *Recommendation_CampaignBudgetRecommendation_CampaignBudgetRecommendationOption) String() string {
	return proto.CompactTextString(m)
}
func (*Recommendation_CampaignBudgetRecommendation_CampaignBudgetRecommendationOption) ProtoMessage() {
}
func (*Recommendation_CampaignBudgetRecommendation_CampaignBudgetRecommendationOption) Descriptor() ([]byte, []int) {
	return fileDescriptor_recommendation_e8cdb56e529506e5, []int{0, 2, 0}
}
func (m *Recommendation_CampaignBudgetRecommendation_CampaignBudgetRecommendationOption) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_Recommendation_CampaignBudgetRecommendation_CampaignBudgetRecommendationOption.Unmarshal(m, b)
}
func (m *Recommendation_CampaignBudgetRecommendation_CampaignBudgetRecommendationOption) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_Recommendation_CampaignBudgetRecommendation_CampaignBudgetRecommendationOption.Marshal(b, m, deterministic)
}
func (dst *Recommendation_CampaignBudgetRecommendation_CampaignBudgetRecommendationOption) XXX_Merge(src proto.Message) {
	xxx_messageInfo_Recommendation_CampaignBudgetRecommendation_CampaignBudgetRecommendationOption.Merge(dst, src)
}
func (m *Recommendation_CampaignBudgetRecommendation_CampaignBudgetRecommendationOption) XXX_Size() int {
	return xxx_messageInfo_Recommendation_CampaignBudgetRecommendation_CampaignBudgetRecommendationOption.Size(m)
}
func (m *Recommendation_CampaignBudgetRecommendation_CampaignBudgetRecommendationOption) XXX_DiscardUnknown() {
	xxx_messageInfo_Recommendation_CampaignBudgetRecommendation_CampaignBudgetRecommendationOption.DiscardUnknown(m)
}

var xxx_messageInfo_Recommendation_CampaignBudgetRecommendation_CampaignBudgetRecommendationOption proto.InternalMessageInfo

func (m *Recommendation_CampaignBudgetRecommendation_CampaignBudgetRecommendationOption) GetBudgetAmountMicros() *wrappers.Int64Value {
	if m != nil {
		return m.BudgetAmountMicros
	}
	return nil
}

func (m *Recommendation_CampaignBudgetRecommendation_CampaignBudgetRecommendationOption) GetImpact() *Recommendation_RecommendationImpact {
	if m != nil {
		return m.Impact
	}
	return nil
}

// The keyword recommendation.
type Recommendation_KeywordRecommendation struct {
	// The recommended keyword.
	Keyword *common.KeywordInfo `protobuf:"bytes,1,opt,name=keyword,proto3" json:"keyword,omitempty"`
	// The recommended CPC (cost-per-click) bid.
	RecommendedCpcBidMicros *wrappers.Int64Value `protobuf:"bytes,2,opt,name=recommended_cpc_bid_micros,json=recommendedCpcBidMicros,proto3" json:"recommended_cpc_bid_micros,omitempty"`
	XXX_NoUnkeyedLiteral    struct{}             `json:"-"`
	XXX_unrecognized        []byte               `json:"-"`
	XXX_sizecache           int32                `json:"-"`
}

func (m *Recommendation_KeywordRecommendation) Reset()         { *m = Recommendation_KeywordRecommendation{} }
func (m *Recommendation_KeywordRecommendation) String() string { return proto.CompactTextString(m) }
func (*Recommendation_KeywordRecommendation) ProtoMessage()    {}
func (*Recommendation_KeywordRecommendation) Descriptor() ([]byte, []int) {
	return fileDescriptor_recommendation_e8cdb56e529506e5, []int{0, 3}
}
func (m *Recommendation_KeywordRecommendation) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_Recommendation_KeywordRecommendation.Unmarshal(m, b)
}
func (m *Recommendation_KeywordRecommendation) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_Recommendation_KeywordRecommendation.Marshal(b, m, deterministic)
}
func (dst *Recommendation_KeywordRecommendation) XXX_Merge(src proto.Message) {
	xxx_messageInfo_Recommendation_KeywordRecommendation.Merge(dst, src)
}
func (m *Recommendation_KeywordRecommendation) XXX_Size() int {
	return xxx_messageInfo_Recommendation_KeywordRecommendation.Size(m)
}
func (m *Recommendation_KeywordRecommendation) XXX_DiscardUnknown() {
	xxx_messageInfo_Recommendation_KeywordRecommendation.DiscardUnknown(m)
}

var xxx_messageInfo_Recommendation_KeywordRecommendation proto.InternalMessageInfo

func (m *Recommendation_KeywordRecommendation) GetKeyword() *common.KeywordInfo {
	if m != nil {
		return m.Keyword
	}
	return nil
}

func (m *Recommendation_KeywordRecommendation) GetRecommendedCpcBidMicros() *wrappers.Int64Value {
	if m != nil {
		return m.RecommendedCpcBidMicros
	}
	return nil
}

// The Target CPA opt-in recommendation.
type Recommendation_TargetCpaOptInRecommendation struct {
	// The available goals and corresponding options for Target CPA strategy.
	Options []*Recommendation_TargetCpaOptInRecommendation_TargetCpaOptInRecommendationOption `protobuf:"bytes,1,rep,name=options,proto3" json:"options,omitempty"`
	// The recommended average CPA target. See required budget amount and impact
	// of using this recommendation in options list.
	RecommendedTargetCpaMicros *wrappers.Int64Value `protobuf:"bytes,2,opt,name=recommended_target_cpa_micros,json=recommendedTargetCpaMicros,proto3" json:"recommended_target_cpa_micros,omitempty"`
	XXX_NoUnkeyedLiteral       struct{}             `json:"-"`
	XXX_unrecognized           []byte               `json:"-"`
	XXX_sizecache              int32                `json:"-"`
}

func (m *Recommendation_TargetCpaOptInRecommendation) Reset() {
	*m = Recommendation_TargetCpaOptInRecommendation{}
}
func (m *Recommendation_TargetCpaOptInRecommendation) String() string {
	return proto.CompactTextString(m)
}
func (*Recommendation_TargetCpaOptInRecommendation) ProtoMessage() {}
func (*Recommendation_TargetCpaOptInRecommendation) Descriptor() ([]byte, []int) {
	return fileDescriptor_recommendation_e8cdb56e529506e5, []int{0, 4}
}
func (m *Recommendation_TargetCpaOptInRecommendation) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_Recommendation_TargetCpaOptInRecommendation.Unmarshal(m, b)
}
func (m *Recommendation_TargetCpaOptInRecommendation) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_Recommendation_TargetCpaOptInRecommendation.Marshal(b, m, deterministic)
}
func (dst *Recommendation_TargetCpaOptInRecommendation) XXX_Merge(src proto.Message) {
	xxx_messageInfo_Recommendation_TargetCpaOptInRecommendation.Merge(dst, src)
}
func (m *Recommendation_TargetCpaOptInRecommendation) XXX_Size() int {
	return xxx_messageInfo_Recommendation_TargetCpaOptInRecommendation.Size(m)
}
func (m *Recommendation_TargetCpaOptInRecommendation) XXX_DiscardUnknown() {
	xxx_messageInfo_Recommendation_TargetCpaOptInRecommendation.DiscardUnknown(m)
}

var xxx_messageInfo_Recommendation_TargetCpaOptInRecommendation proto.InternalMessageInfo

func (m *Recommendation_TargetCpaOptInRecommendation) GetOptions() []*Recommendation_TargetCpaOptInRecommendation_TargetCpaOptInRecommendationOption {
	if m != nil {
		return m.Options
	}
	return nil
}

func (m *Recommendation_TargetCpaOptInRecommendation) GetRecommendedTargetCpaMicros() *wrappers.Int64Value {
	if m != nil {
		return m.RecommendedTargetCpaMicros
	}
	return nil
}

// The Target CPA opt-in option with impact estimate.
type Recommendation_TargetCpaOptInRecommendation_TargetCpaOptInRecommendationOption struct {
	// The goal achieved by this option.
	Goal enums.TargetCpaOptInRecommendationGoalEnum_TargetCpaOptInRecommendationGoal `protobuf:"varint,1,opt,name=goal,proto3,enum=google.ads.googleads.v1.enums.TargetCpaOptInRecommendationGoalEnum_TargetCpaOptInRecommendationGoal" json:"goal,omitempty"`
	// Average CPA target.
	TargetCpaMicros *wrappers.Int64Value `protobuf:"bytes,2,opt,name=target_cpa_micros,json=targetCpaMicros,proto3" json:"target_cpa_micros,omitempty"`
	// The minimum campaign budget, in local currency for the account,
	// required to achieve the target CPA.
	// Amount is specified in micros, where one million is equivalent to one
	// currency unit.
	RequiredCampaignBudgetAmountMicros *wrappers.Int64Value `protobuf:"bytes,3,opt,name=required_campaign_budget_amount_micros,json=requiredCampaignBudgetAmountMicros,proto3" json:"required_campaign_budget_amount_micros,omitempty"`
	// The impact estimate if this option is selected.
	Impact               *Recommendation_RecommendationImpact `protobuf:"bytes,4,opt,name=impact,proto3" json:"impact,omitempty"`
	XXX_NoUnkeyedLiteral struct{}                             `json:"-"`
	XXX_unrecognized     []byte                               `json:"-"`
	XXX_sizecache        int32                                `json:"-"`
}

func (m *Recommendation_TargetCpaOptInRecommendation_TargetCpaOptInRecommendationOption) Reset() {
	*m = Recommendation_TargetCpaOptInRecommendation_TargetCpaOptInRecommendationOption{}
}
func (m *Recommendation_TargetCpaOptInRecommendation_TargetCpaOptInRecommendationOption) String() string {
	return proto.CompactTextString(m)
}
func (*Recommendation_TargetCpaOptInRecommendation_TargetCpaOptInRecommendationOption) ProtoMessage() {
}
func (*Recommendation_TargetCpaOptInRecommendation_TargetCpaOptInRecommendationOption) Descriptor() ([]byte, []int) {
	return fileDescriptor_recommendation_e8cdb56e529506e5, []int{0, 4, 0}
}
func (m *Recommendation_TargetCpaOptInRecommendation_TargetCpaOptInRecommendationOption) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_Recommendation_TargetCpaOptInRecommendation_TargetCpaOptInRecommendationOption.Unmarshal(m, b)
}
func (m *Recommendation_TargetCpaOptInRecommendation_TargetCpaOptInRecommendationOption) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_Recommendation_TargetCpaOptInRecommendation_TargetCpaOptInRecommendationOption.Marshal(b, m, deterministic)
}
func (dst *Recommendation_TargetCpaOptInRecommendation_TargetCpaOptInRecommendationOption) XXX_Merge(src proto.Message) {
	xxx_messageInfo_Recommendation_TargetCpaOptInRecommendation_TargetCpaOptInRecommendationOption.Merge(dst, src)
}
func (m *Recommendation_TargetCpaOptInRecommendation_TargetCpaOptInRecommendationOption) XXX_Size() int {
	return xxx_messageInfo_Recommendation_TargetCpaOptInRecommendation_TargetCpaOptInRecommendationOption.Size(m)
}
func (m *Recommendation_TargetCpaOptInRecommendation_TargetCpaOptInRecommendationOption) XXX_DiscardUnknown() {
	xxx_messageInfo_Recommendation_TargetCpaOptInRecommendation_TargetCpaOptInRecommendationOption.DiscardUnknown(m)
}

var xxx_messageInfo_Recommendation_TargetCpaOptInRecommendation_TargetCpaOptInRecommendationOption proto.InternalMessageInfo

func (m *Recommendation_TargetCpaOptInRecommendation_TargetCpaOptInRecommendationOption) GetGoal() enums.TargetCpaOptInRecommendationGoalEnum_TargetCpaOptInRecommendationGoal {
	if m != nil {
		return m.Goal
	}
	return enums.TargetCpaOptInRecommendationGoalEnum_UNSPECIFIED
}

func (m *Recommendation_TargetCpaOptInRecommendation_TargetCpaOptInRecommendationOption) GetTargetCpaMicros() *wrappers.Int64Value {
	if m != nil {
		return m.TargetCpaMicros
	}
	return nil
}

func (m *Recommendation_TargetCpaOptInRecommendation_TargetCpaOptInRecommendationOption) GetRequiredCampaignBudgetAmountMicros() *wrappers.Int64Value {
	if m != nil {
		return m.RequiredCampaignBudgetAmountMicros
	}
	return nil
}

func (m *Recommendation_TargetCpaOptInRecommendation_TargetCpaOptInRecommendationOption) GetImpact() *Recommendation_RecommendationImpact {
	if m != nil {
		return m.Impact
	}
	return nil
}

// The move unused budget recommendation.
type Recommendation_MoveUnusedBudgetRecommendation struct {
	// The excess budget's resource_name.
	ExcessCampaignBudget *wrappers.StringValue `protobuf:"bytes,1,opt,name=excess_campaign_budget,json=excessCampaignBudget,proto3" json:"excess_campaign_budget,omitempty"`
	// The recommendation for the constrained budget to increase.
	BudgetRecommendation *Recommendation_CampaignBudgetRecommendation `protobuf:"bytes,2,opt,name=budget_recommendation,json=budgetRecommendation,proto3" json:"budget_recommendation,omitempty"`
	XXX_NoUnkeyedLiteral struct{}                                     `json:"-"`
	XXX_unrecognized     []byte                                       `json:"-"`
	XXX_sizecache        int32                                        `json:"-"`
}

func (m *Recommendation_MoveUnusedBudgetRecommendation) Reset() {
	*m = Recommendation_MoveUnusedBudgetRecommendation{}
}
func (m *Recommendation_MoveUnusedBudgetRecommendation) String() string {
	return proto.CompactTextString(m)
}
func (*Recommendation_MoveUnusedBudgetRecommendation) ProtoMessage() {}
func (*Recommendation_MoveUnusedBudgetRecommendation) Descriptor() ([]byte, []int) {
	return fileDescriptor_recommendation_e8cdb56e529506e5, []int{0, 5}
}
func (m *Recommendation_MoveUnusedBudgetRecommendation) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_Recommendation_MoveUnusedBudgetRecommendation.Unmarshal(m, b)
}
func (m *Recommendation_MoveUnusedBudgetRecommendation) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_Recommendation_MoveUnusedBudgetRecommendation.Marshal(b, m, deterministic)
}
func (dst *Recommendation_MoveUnusedBudgetRecommendation) XXX_Merge(src proto.Message) {
	xxx_messageInfo_Recommendation_MoveUnusedBudgetRecommendation.Merge(dst, src)
}
func (m *Recommendation_MoveUnusedBudgetRecommendation) XXX_Size() int {
	return xxx_messageInfo_Recommendation_MoveUnusedBudgetRecommendation.Size(m)
}
func (m *Recommendation_MoveUnusedBudgetRecommendation) XXX_DiscardUnknown() {
	xxx_messageInfo_Recommendation_MoveUnusedBudgetRecommendation.DiscardUnknown(m)
}

var xxx_messageInfo_Recommendation_MoveUnusedBudgetRecommendation proto.InternalMessageInfo

func (m *Recommendation_MoveUnusedBudgetRecommendation) GetExcessCampaignBudget() *wrappers.StringValue {
	if m != nil {
		return m.ExcessCampaignBudget
	}
	return nil
}

func (m *Recommendation_MoveUnusedBudgetRecommendation) GetBudgetRecommendation() *Recommendation_CampaignBudgetRecommendation {
	if m != nil {
		return m.BudgetRecommendation
	}
	return nil
}

// The text ad recommendation.
type Recommendation_TextAdRecommendation struct {
	// Recommended ad.
	Ad *Ad `protobuf:"bytes,1,opt,name=ad,proto3" json:"ad,omitempty"`
	// Creation date of the recommended ad.
	// YYYY-MM-DD format, e.g., 2018-04-17.
	CreationDate *wrappers.StringValue `protobuf:"bytes,2,opt,name=creation_date,json=creationDate,proto3" json:"creation_date,omitempty"`
	// Date, if present, is the earliest when the recommendation will be auto
	// applied.
	// YYYY-MM-DD format, e.g., 2018-04-17.
	AutoApplyDate        *wrappers.StringValue `protobuf:"bytes,3,opt,name=auto_apply_date,json=autoApplyDate,proto3" json:"auto_apply_date,omitempty"`
	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
	XXX_unrecognized     []byte                `json:"-"`
	XXX_sizecache        int32                 `json:"-"`
}

func (m *Recommendation_TextAdRecommendation) Reset()         { *m = Recommendation_TextAdRecommendation{} }
func (m *Recommendation_TextAdRecommendation) String() string { return proto.CompactTextString(m) }
func (*Recommendation_TextAdRecommendation) ProtoMessage()    {}
func (*Recommendation_TextAdRecommendation) Descriptor() ([]byte, []int) {
	return fileDescriptor_recommendation_e8cdb56e529506e5, []int{0, 6}
}
func (m *Recommendation_TextAdRecommendation) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_Recommendation_TextAdRecommendation.Unmarshal(m, b)
}
func (m *Recommendation_TextAdRecommendation) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_Recommendation_TextAdRecommendation.Marshal(b, m, deterministic)
}
func (dst *Recommendation_TextAdRecommendation) XXX_Merge(src proto.Message) {
	xxx_messageInfo_Recommendation_TextAdRecommendation.Merge(dst, src)
}
func (m *Recommendation_TextAdRecommendation) XXX_Size() int {
	return xxx_messageInfo_Recommendation_TextAdRecommendation.Size(m)
}
func (m *Recommendation_TextAdRecommendation) XXX_DiscardUnknown() {
	xxx_messageInfo_Recommendation_TextAdRecommendation.DiscardUnknown(m)
}

var xxx_messageInfo_Recommendation_TextAdRecommendation proto.InternalMessageInfo

func (m *Recommendation_TextAdRecommendation) GetAd() *Ad {
	if m != nil {
		return m.Ad
	}
	return nil
}

func (m *Recommendation_TextAdRecommendation) GetCreationDate() *wrappers.StringValue {
	if m != nil {
		return m.CreationDate
	}
	return nil
}

func (m *Recommendation_TextAdRecommendation) GetAutoApplyDate() *wrappers.StringValue {
	if m != nil {
		return m.AutoApplyDate
	}
	return nil
}

// The Maximize Conversions Opt-In recommendation.
type Recommendation_MaximizeConversionsOptInRecommendation struct {
	// The recommended new budget amount.
	RecommendedBudgetAmountMicros *wrappers.Int64Value `protobuf:"bytes,1,opt,name=recommended_budget_amount_micros,json=recommendedBudgetAmountMicros,proto3" json:"recommended_budget_amount_micros,omitempty"`
	XXX_NoUnkeyedLiteral          struct{}             `json:"-"`
	XXX_unrecognized              []byte               `json:"-"`
	XXX_sizecache                 int32                `json:"-"`
}

func (m *Recommendation_MaximizeConversionsOptInRecommendation) Reset() {
	*m = Recommendation_MaximizeConversionsOptInRecommendation{}
}
func (m *Recommendation_MaximizeConversionsOptInRecommendation) String() string {
	return proto.CompactTextString(m)
}
func (*Recommendation_MaximizeConversionsOptInRecommendation) ProtoMessage() {}
func (*Recommendation_MaximizeConversionsOptInRecommendation) Descriptor() ([]byte, []int) {
	return fileDescriptor_recommendation_e8cdb56e529506e5, []int{0, 7}
}
func (m *Recommendation_MaximizeConversionsOptInRecommendation) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_Recommendation_MaximizeConversionsOptInRecommendation.Unmarshal(m, b)
}
func (m *Recommendation_MaximizeConversionsOptInRecommendation) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_Recommendation_MaximizeConversionsOptInRecommendation.Marshal(b, m, deterministic)
}
func (dst *Recommendation_MaximizeConversionsOptInRecommendation) XXX_Merge(src proto.Message) {
	xxx_messageInfo_Recommendation_MaximizeConversionsOptInRecommendation.Merge(dst, src)
}
func (m *Recommendation_MaximizeConversionsOptInRecommendation) XXX_Size() int {
	return xxx_messageInfo_Recommendation_MaximizeConversionsOptInRecommendation.Size(m)
}
func (m *Recommendation_MaximizeConversionsOptInRecommendation) XXX_DiscardUnknown() {
	xxx_messageInfo_Recommendation_MaximizeConversionsOptInRecommendation.DiscardUnknown(m)
}

var xxx_messageInfo_Recommendation_MaximizeConversionsOptInRecommendation proto.InternalMessageInfo

func (m *Recommendation_MaximizeConversionsOptInRecommendation) GetRecommendedBudgetAmountMicros() *wrappers.Int64Value {
	if m != nil {
		return m.RecommendedBudgetAmountMicros
	}
	return nil
}

// The Enhanced Cost-Per-Click Opt-In recommendation.
type Recommendation_EnhancedCpcOptInRecommendation struct {
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *Recommendation_EnhancedCpcOptInRecommendation) Reset() {
	*m = Recommendation_EnhancedCpcOptInRecommendation{}
}
func (m *Recommendation_EnhancedCpcOptInRecommendation) String() string {
	return proto.CompactTextString(m)
}
func (*Recommendation_EnhancedCpcOptInRecommendation) ProtoMessage() {}
func (*Recommendation_EnhancedCpcOptInRecommendation) Descriptor() ([]byte, []int) {
	return fileDescriptor_recommendation_e8cdb56e529506e5, []int{0, 8}
}
func (m *Recommendation_EnhancedCpcOptInRecommendation) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_Recommendation_EnhancedCpcOptInRecommendation.Unmarshal(m, b)
}
func (m *Recommendation_EnhancedCpcOptInRecommendation) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_Recommendation_EnhancedCpcOptInRecommendation.Marshal(b, m, deterministic)
}
func (dst *Recommendation_EnhancedCpcOptInRecommendation) XXX_Merge(src proto.Message) {
	xxx_messageInfo_Recommendation_EnhancedCpcOptInRecommendation.Merge(dst, src)
}
func (m *Recommendation_EnhancedCpcOptInRecommendation) XXX_Size() int {
	return xxx_messageInfo_Recommendation_EnhancedCpcOptInRecommendation.Size(m)
}
func (m *Recommendation_EnhancedCpcOptInRecommendation) XXX_DiscardUnknown() {
	xxx_messageInfo_Recommendation_EnhancedCpcOptInRecommendation.DiscardUnknown(m)
}

var xxx_messageInfo_Recommendation_EnhancedCpcOptInRecommendation proto.InternalMessageInfo

// The Maximize Clicks opt-in recommendation.
type Recommendation_MaximizeClicksOptInRecommendation struct {
	// The recommended new budget amount.
	// Only set if the current budget is too high.
	RecommendedBudgetAmountMicros *wrappers.Int64Value `protobuf:"bytes,1,opt,name=recommended_budget_amount_micros,json=recommendedBudgetAmountMicros,proto3" json:"recommended_budget_amount_micros,omitempty"`
	XXX_NoUnkeyedLiteral          struct{}             `json:"-"`
	XXX_unrecognized              []byte               `json:"-"`
	XXX_sizecache                 int32                `json:"-"`
}

func (m *Recommendation_MaximizeClicksOptInRecommendation) Reset() {
	*m = Recommendation_MaximizeClicksOptInRecommendation{}
}
func (m *Recommendation_MaximizeClicksOptInRecommendation) String() string {
	return proto.CompactTextString(m)
}
func (*Recommendation_MaximizeClicksOptInRecommendation) ProtoMessage() {}
func (*Recommendation_MaximizeClicksOptInRecommendation) Descriptor() ([]byte, []int) {
	return fileDescriptor_recommendation_e8cdb56e529506e5, []int{0, 9}
}
func (m *Recommendation_MaximizeClicksOptInRecommendation) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_Recommendation_MaximizeClicksOptInRecommendation.Unmarshal(m, b)
}
func (m *Recommendation_MaximizeClicksOptInRecommendation) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_Recommendation_MaximizeClicksOptInRecommendation.Marshal(b, m, deterministic)
}
func (dst *Recommendation_MaximizeClicksOptInRecommendation) XXX_Merge(src proto.Message) {
	xxx_messageInfo_Recommendation_MaximizeClicksOptInRecommendation.Merge(dst, src)
}
func (m *Recommendation_MaximizeClicksOptInRecommendation) XXX_Size() int {
	return xxx_messageInfo_Recommendation_MaximizeClicksOptInRecommendation.Size(m)
}
func (m *Recommendation_MaximizeClicksOptInRecommendation) XXX_DiscardUnknown() {
	xxx_messageInfo_Recommendation_MaximizeClicksOptInRecommendation.DiscardUnknown(m)
}

var xxx_messageInfo_Recommendation_MaximizeClicksOptInRecommendation proto.InternalMessageInfo

func (m *Recommendation_MaximizeClicksOptInRecommendation) GetRecommendedBudgetAmountMicros() *wrappers.Int64Value {
	if m != nil {
		return m.RecommendedBudgetAmountMicros
	}
	return nil
}

// The Optimize Ad Rotation recommendation.
type Recommendation_OptimizeAdRotationRecommendation struct {
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *Recommendation_OptimizeAdRotationRecommendation) Reset() {
	*m = Recommendation_OptimizeAdRotationRecommendation{}
}
func (m *Recommendation_OptimizeAdRotationRecommendation) String() string {
	return proto.CompactTextString(m)
}
func (*Recommendation_OptimizeAdRotationRecommendation) ProtoMessage() {}
func (*Recommendation_OptimizeAdRotationRecommendation) Descriptor() ([]byte, []int) {
	return fileDescriptor_recommendation_e8cdb56e529506e5, []int{0, 10}
}
func (m *Recommendation_OptimizeAdRotationRecommendation) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_Recommendation_OptimizeAdRotationRecommendation.Unmarshal(m, b)
}
func (m *Recommendation_OptimizeAdRotationRecommendation) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_Recommendation_OptimizeAdRotationRecommendation.Marshal(b, m, deterministic)
}
func (dst *Recommendation_OptimizeAdRotationRecommendation) XXX_Merge(src proto.Message) {
	xxx_messageInfo_Recommendation_OptimizeAdRotationRecommendation.Merge(dst, src)
}
func (m *Recommendation_OptimizeAdRotationRecommendation) XXX_Size() int {
	return xxx_messageInfo_Recommendation_OptimizeAdRotationRecommendation.Size(m)
}
func (m *Recommendation_OptimizeAdRotationRecommendation) XXX_DiscardUnknown() {
	xxx_messageInfo_Recommendation_OptimizeAdRotationRecommendation.DiscardUnknown(m)
}

var xxx_messageInfo_Recommendation_OptimizeAdRotationRecommendation proto.InternalMessageInfo

// The Search Partners Opt-In recommendation.
type Recommendation_SearchPartnersOptInRecommendation struct {
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *Recommendation_SearchPartnersOptInRecommendation) Reset() {
	*m = Recommendation_SearchPartnersOptInRecommendation{}
}
func (m *Recommendation_SearchPartnersOptInRecommendation) String() string {
	return proto.CompactTextString(m)
}
func (*Recommendation_SearchPartnersOptInRecommendation) ProtoMessage() {}
func (*Recommendation_SearchPartnersOptInRecommendation) Descriptor() ([]byte, []int) {
	return fileDescriptor_recommendation_e8cdb56e529506e5, []int{0, 11}
}
func (m *Recommendation_SearchPartnersOptInRecommendation) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_Recommendation_SearchPartnersOptInRecommendation.Unmarshal(m, b)
}
func (m *Recommendation_SearchPartnersOptInRecommendation) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_Recommendation_SearchPartnersOptInRecommendation.Marshal(b, m, deterministic)
}
func (dst *Recommendation_SearchPartnersOptInRecommendation) XXX_Merge(src proto.Message) {
	xxx_messageInfo_Recommendation_SearchPartnersOptInRecommendation.Merge(dst, src)
}
func (m *Recommendation_SearchPartnersOptInRecommendation) XXX_Size() int {
	return xxx_messageInfo_Recommendation_SearchPartnersOptInRecommendation.Size(m)
}
func (m *Recommendation_SearchPartnersOptInRecommendation) XXX_DiscardUnknown() {
	xxx_messageInfo_Recommendation_SearchPartnersOptInRecommendation.DiscardUnknown(m)
}

var xxx_messageInfo_Recommendation_SearchPartnersOptInRecommendation proto.InternalMessageInfo

// The keyword match type recommendation.
type Recommendation_KeywordMatchTypeRecommendation struct {
	// The existing keyword where the match type should be more broad.
	Keyword *common.KeywordInfo `protobuf:"bytes,1,opt,name=keyword,proto3" json:"keyword,omitempty"`
	// The recommended new match type.
	RecommendedMatchType enums.KeywordMatchTypeEnum_KeywordMatchType `protobuf:"varint,2,opt,name=recommended_match_type,json=recommendedMatchType,proto3,enum=google.ads.googleads.v1.enums.KeywordMatchTypeEnum_KeywordMatchType" json:"recommended_match_type,omitempty"`
	XXX_NoUnkeyedLiteral struct{}                                    `json:"-"`
	XXX_unrecognized     []byte                                      `json:"-"`
	XXX_sizecache        int32                                       `json:"-"`
}

func (m *Recommendation_KeywordMatchTypeRecommendation) Reset() {
	*m = Recommendation_KeywordMatchTypeRecommendation{}
}
func (m *Recommendation_KeywordMatchTypeRecommendation) String() string {
	return proto.CompactTextString(m)
}
func (*Recommendation_KeywordMatchTypeRecommendation) ProtoMessage() {}
func (*Recommendation_KeywordMatchTypeRecommendation) Descriptor() ([]byte, []int) {
	return fileDescriptor_recommendation_e8cdb56e529506e5, []int{0, 12}
}
func (m *Recommendation_KeywordMatchTypeRecommendation) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_Recommendation_KeywordMatchTypeRecommendation.Unmarshal(m, b)
}
func (m *Recommendation_KeywordMatchTypeRecommendation) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_Recommendation_KeywordMatchTypeRecommendation.Marshal(b, m, deterministic)
}
func (dst *Recommendation_KeywordMatchTypeRecommendation) XXX_Merge(src proto.Message) {
	xxx_messageInfo_Recommendation_KeywordMatchTypeRecommendation.Merge(dst, src)
}
func (m *Recommendation_KeywordMatchTypeRecommendation) XXX_Size() int {
	return xxx_messageInfo_Recommendation_KeywordMatchTypeRecommendation.Size(m)
}
func (m *Recommendation_KeywordMatchTypeRecommendation) XXX_DiscardUnknown() {
	xxx_messageInfo_Recommendation_KeywordMatchTypeRecommendation.DiscardUnknown(m)
}

var xxx_messageInfo_Recommendation_KeywordMatchTypeRecommendation proto.InternalMessageInfo

func (m *Recommendation_KeywordMatchTypeRecommendation) GetKeyword() *common.KeywordInfo {
	if m != nil {
		return m.Keyword
	}
	return nil
}

func (m *Recommendation_KeywordMatchTypeRecommendation) GetRecommendedMatchType() enums.KeywordMatchTypeEnum_KeywordMatchType {
	if m != nil {
		return m.RecommendedMatchType
	}
	return enums.KeywordMatchTypeEnum_UNSPECIFIED
}

func init() {
	proto.RegisterType((*Recommendation)(nil), "google.ads.googleads.v1.resources.Recommendation")
	proto.RegisterType((*Recommendation_RecommendationImpact)(nil), "google.ads.googleads.v1.resources.Recommendation.RecommendationImpact")
	proto.RegisterType((*Recommendation_RecommendationMetrics)(nil), "google.ads.googleads.v1.resources.Recommendation.RecommendationMetrics")
	proto.RegisterType((*Recommendation_CampaignBudgetRecommendation)(nil), "google.ads.googleads.v1.resources.Recommendation.CampaignBudgetRecommendation")
	proto.RegisterType((*Recommendation_CampaignBudgetRecommendation_CampaignBudgetRecommendationOption)(nil), "google.ads.googleads.v1.resources.Recommendation.CampaignBudgetRecommendation.CampaignBudgetRecommendationOption")
	proto.RegisterType((*Recommendation_KeywordRecommendation)(nil), "google.ads.googleads.v1.resources.Recommendation.KeywordRecommendation")
	proto.RegisterType((*Recommendation_TargetCpaOptInRecommendation)(nil), "google.ads.googleads.v1.resources.Recommendation.TargetCpaOptInRecommendation")
	proto.RegisterType((*Recommendation_TargetCpaOptInRecommendation_TargetCpaOptInRecommendationOption)(nil), "google.ads.googleads.v1.resources.Recommendation.TargetCpaOptInRecommendation.TargetCpaOptInRecommendationOption")
	proto.RegisterType((*Recommendation_MoveUnusedBudgetRecommendation)(nil), "google.ads.googleads.v1.resources.Recommendation.MoveUnusedBudgetRecommendation")
	proto.RegisterType((*Recommendation_TextAdRecommendation)(nil), "google.ads.googleads.v1.resources.Recommendation.TextAdRecommendation")
	proto.RegisterType((*Recommendation_MaximizeConversionsOptInRecommendation)(nil), "google.ads.googleads.v1.resources.Recommendation.MaximizeConversionsOptInRecommendation")
	proto.RegisterType((*Recommendation_EnhancedCpcOptInRecommendation)(nil), "google.ads.googleads.v1.resources.Recommendation.EnhancedCpcOptInRecommendation")
	proto.RegisterType((*Recommendation_MaximizeClicksOptInRecommendation)(nil), "google.ads.googleads.v1.resources.Recommendation.MaximizeClicksOptInRecommendation")
	proto.RegisterType((*Recommendation_OptimizeAdRotationRecommendation)(nil), "google.ads.googleads.v1.resources.Recommendation.OptimizeAdRotationRecommendation")
	proto.RegisterType((*Recommendation_SearchPartnersOptInRecommendation)(nil), "google.ads.googleads.v1.resources.Recommendation.SearchPartnersOptInRecommendation")
	proto.RegisterType((*Recommendation_KeywordMatchTypeRecommendation)(nil), "google.ads.googleads.v1.resources.Recommendation.KeywordMatchTypeRecommendation")
}

func init() {
	proto.RegisterFile("google/ads/googleads/v1/resources/recommendation.proto", fileDescriptor_recommendation_e8cdb56e529506e5)
}

var fileDescriptor_recommendation_e8cdb56e529506e5 = []byte{
	// 1502 bytes of a gzipped FileDescriptorProto
	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x58, 0xcf, 0x6f, 0xdc, 0xc4,
	0x17, 0xff, 0x7a, 0x93, 0x26, 0xed, 0xdb, 0x64, 0xd3, 0xce, 0x77, 0x13, 0x16, 0x13, 0x56, 0x9b,
	0x54, 0xa9, 0xa2, 0x22, 0x76, 0x95, 0x50, 0xda, 0x6a, 0xf9, 0x21, 0x6d, 0x7e, 0x90, 0x06, 0x94,
	0x36, 0x72, 0x4b, 0x54, 0xa1, 0xa8, 0xd6, 0xac, 0x3d, 0xdd, 0x9a, 0xac, 0x3d, 0xae, 0x3d, 0xde,
	0x26, 0x3d, 0xa0, 0x4a, 0x9c, 0x10, 0x12, 0x47, 0xd4, 0x0b, 0x1c, 0xe0, 0x80, 0x04, 0x77, 0xd4,
	0xff, 0x00, 0xa9, 0xd7, 0x4a, 0xfc, 0x03, 0xdc, 0xf8, 0x0b, 0x10, 0x27, 0xe4, 0xf1, 0xd8, 0xf1,
	0xfe, 0xb0, 0xbd, 0xbb, 0xb4, 0xdc, 0x6c, 0xcf, 0xfb, 0x7c, 0xde, 0x67, 0xde, 0xbc, 0x99, 0x79,
	0xcf, 0x70, 0xb5, 0x45, 0x69, 0xab, 0x4d, 0x6a, 0x58, 0x77, 0x6b, 0xc1, 0xa3, 0xff, 0xd4, 0x59,
	0xab, 0x39, 0xc4, 0xa5, 0x9e, 0xa3, 0x11, 0xb7, 0xe6, 0x10, 0x8d, 0x9a, 0x26, 0xb1, 0x74, 0xcc,
	0x0c, 0x6a, 0x55, 0x6d, 0x87, 0x32, 0x8a, 0x96, 0x02, 0xe3, 0x2a, 0xd6, 0xdd, 0x6a, 0x84, 0xab,
	0x76, 0xd6, 0xaa, 0x11, 0x4e, 0x7e, 0x3b, 0x89, 0xda, 0xa7, 0xa3, 0x56, 0x4d, 0x73, 0x0c, 0x46,
	0x1c, 0x03, 0x07, 0x8c, 0x72, 0xa2, 0x12, 0x62, 0x79, 0xa6, 0x5b, 0x3b, 0x22, 0x27, 0x8f, 0xa8,
	0xa3, 0xab, 0x26, 0x66, 0xda, 0x03, 0x95, 0x9d, 0xd8, 0x44, 0xe0, 0xae, 0xa5, 0xe3, 0xba, 0xd5,
	0xc7, 0x81, 0xbb, 0xe9, 0x40, 0x86, 0x9d, 0x16, 0x61, 0xaa, 0x66, 0x63, 0x95, 0xda, 0x4c, 0x35,
	0x2c, 0xb5, 0x87, 0xaa, 0x45, 0x71, 0x5b, 0x50, 0x5d, 0xce, 0x8e, 0x22, 0xd6, 0x85, 0x6d, 0x59,
	0xd8, 0xf2, 0xb7, 0xa6, 0x77, 0xbf, 0xf6, 0xc8, 0xc1, 0xb6, 0x4d, 0x1c, 0x57, 0x8c, 0x2f, 0x86,
	0x5c, 0xb6, 0x51, 0xc3, 0x96, 0x45, 0x19, 0xf7, 0x26, 0x46, 0x97, 0x7f, 0xb9, 0x0c, 0x05, 0xa5,
	0x4b, 0x07, 0xba, 0x08, 0xb3, 0xa1, 0x1b, 0xd5, 0xc2, 0x26, 0x29, 0x49, 0x15, 0x69, 0xf5, 0x9c,
	0x32, 0x13, 0x7e, 0xbc, 0x89, 0x4d, 0x82, 0x0e, 0x61, 0xd2, 0x9f, 0x7a, 0x29, 0x57, 0x91, 0x56,
	0x0b, 0xeb, 0x37, 0xaa, 0x49, 0xcb, 0xc7, 0xe7, 0x5e, 0xed, 0xf6, 0x70, 0xe7, 0xc4, 0x26, 0xdb,
	0x96, 0x67, 0x0e, 0xf8, 0xac, 0x70, 0x56, 0x74, 0x0f, 0xa6, 0x0c, 0xd3, 0xc6, 0x1a, 0x2b, 0x4d,
	0x54, 0xa4, 0xd5, 0xfc, 0xfa, 0x47, 0xd5, 0xcc, 0xf4, 0xe8, 0x21, 0xeb, 0x79, 0xdd, 0xe5, 0x6c,
	0x8a, 0x60, 0x45, 0xdb, 0x30, 0xa7, 0x61, 0xd3, 0xc6, 0x46, 0xcb, 0x52, 0x9b, 0x9e, 0xde, 0x22,
	0xac, 0x74, 0x86, 0x3b, 0x5a, 0x0c, 0x1d, 0x85, 0xd1, 0xac, 0xde, 0x66, 0x8e, 0x61, 0xb5, 0x0e,
	0x70, 0xdb, 0x23, 0x4a, 0x21, 0x04, 0x6d, 0x70, 0x0c, 0xba, 0x0e, 0x67, 0xc3, 0x2f, 0xa5, 0xa9,
	0x21, 0xf0, 0x91, 0x35, 0xba, 0x06, 0x67, 0xb1, 0xae, 0xb6, 0x1c, 0xea, 0xd9, 0xa5, 0xe9, 0x21,
	0x90, 0xd3, 0x58, 0xdf, 0xf1, 0x8d, 0xd1, 0x75, 0x38, 0xa7, 0x1b, 0xae, 0x69, 0xb8, 0x2e, 0xd1,
	0x4b, 0xb3, 0x1c, 0x29, 0xf7, 0x21, 0x37, 0x28, 0x6d, 0x07, 0xb8, 0x53, 0x63, 0xf4, 0xad, 0x04,
	0xe5, 0x9e, 0x49, 0xf7, 0x64, 0x60, 0x69, 0x92, 0xf3, 0xdd, 0x1c, 0x3d, 0xd8, 0x9b, 0x5d, 0x71,
	0xe9, 0x1e, 0xbc, 0xf1, 0x3f, 0x65, 0x51, 0x4b, 0x19, 0x47, 0x4f, 0x24, 0x58, 0x08, 0x77, 0x63,
	0x8f, 0xa0, 0xb3, 0x5c, 0xd0, 0xce, 0xe8, 0x82, 0x3e, 0x09, 0xf8, 0xfa, 0x94, 0xcc, 0x1f, 0x0d,
	0x1a, 0x40, 0x5f, 0xc0, 0x02, 0x23, 0xc7, 0x4c, 0xc5, 0x7d, 0x0a, 0xce, 0x8d, 0x9b, 0x7f, 0x77,
	0xc8, 0x31, 0x6b, 0xf4, 0x0b, 0x28, 0xb2, 0x01, 0xdf, 0xd1, 0x53, 0x09, 0x2a, 0x59, 0xe7, 0x43,
	0x09, 0xc6, 0x5d, 0x9d, 0x3b, 0x9c, 0x79, 0xd3, 0xc6, 0xb7, 0x6c, 0xb6, 0x6b, 0xf5, 0xaf, 0x0e,
	0x4b, 0x19, 0x47, 0xbf, 0x4a, 0x70, 0xd9, 0xc4, 0xc7, 0x86, 0x69, 0x3c, 0x26, 0xaa, 0x46, 0xad,
	0x0e, 0x71, 0x5c, 0xff, 0xfc, 0x48, 0x10, 0x99, 0xe7, 0x22, 0xef, 0x8e, 0x2e, 0x72, 0x4f, 0xf8,
	0xd8, 0x3c, 0x75, 0x31, 0x58, 0xee, 0x25, 0x73, 0x28, 0x4b, 0xf4, 0xbd, 0x04, 0xcb, 0xc4, 0x7a,
	0x80, 0x2d, 0x8d, 0xe8, 0xaa, 0x66, 0x6b, 0x09, 0x82, 0x67, 0xb8, 0xe0, 0xfd, 0xd1, 0x05, 0x6f,
	0x0b, 0xee, 0x4d, 0x5b, 0x1b, 0x2c, 0xb4, 0x4c, 0x52, 0x2d, 0xd0, 0x4f, 0x12, 0xac, 0xb8, 0x04,
	0x3b, 0xda, 0x03, 0xd5, 0xc6, 0x0e, 0xb3, 0x88, 0x93, 0x14, 0xd4, 0x02, 0xd7, 0x78, 0x7b, 0x74,
	0x8d, 0xb7, 0x39, 0xfd, 0xbe, 0x60, 0x1f, 0x2c, 0x73, 0xc9, 0xcd, 0x32, 0xe2, 0x4a, 0x4f, 0x73,
	0xa0, 0x6d, 0x68, 0x47, 0x49, 0x4a, 0xe7, 0xc6, 0x55, 0x1a, 0x2d, 0x3f, 0x67, 0x4f, 0x50, 0x6a,
	0x66, 0x19, 0xa1, 0x1f, 0x25, 0xb8, 0x48, 0x6d, 0x16, 0x28, 0xf5, 0x77, 0xb3, 0xb8, 0xee, 0x7a,
	0x75, 0x9e, 0xe7, 0x3a, 0x95, 0xd1, 0x75, 0xde, 0x12, 0xe4, 0x0d, 0x5d, 0x11, 0xd4, 0x7d, 0x32,
	0x2b, 0x34, 0xc3, 0x06, 0x7d, 0x27, 0xc1, 0x52, 0x7f, 0xfd, 0xd1, 0xab, 0xb1, 0x38, 0x6e, 0x66,
	0x8a, 0xc3, 0x6f, 0xcf, 0x67, 0xe6, 0x97, 0x6a, 0x5f, 0x66, 0x1e, 0xa5, 0x5a, 0x70, 0x7d, 0x26,
	0xed, 0x10, 0xd5, 0xb3, 0x3c, 0x97, 0xe8, 0x09, 0xb7, 0xc5, 0xfc, 0xb8, 0xfa, 0xf6, 0x68, 0x87,
	0x7c, 0xca, 0x99, 0x13, 0xee, 0x8b, 0xb2, 0x99, 0x6a, 0x21, 0xff, 0x25, 0x41, 0x71, 0xd0, 0xfd,
	0x8e, 0x3e, 0x87, 0x99, 0x26, 0x76, 0x89, 0x6a, 0x12, 0xe6, 0x18, 0x9a, 0xcb, 0x2b, 0x97, 0xb1,
	0xee, 0x8f, 0xee, 0xd7, 0xbd, 0x80, 0x4e, 0xc9, 0xfb, 0xe4, 0xe2, 0x05, 0x31, 0xb8, 0x60, 0x53,
	0x46, 0x2c, 0x66, 0xe0, 0x76, 0xe4, 0x30, 0xf7, 0x72, 0x1d, 0x9e, 0x8f, 0x3c, 0x88, 0x2f, 0xf2,
	0xf3, 0x1c, 0xcc, 0x0f, 0xb4, 0x45, 0x1f, 0x42, 0xde, 0x30, 0x6d, 0x87, 0xb8, 0xfc, 0x44, 0x14,
	0x53, 0xef, 0xaf, 0x2a, 0xb6, 0xa8, 0xd7, 0x6c, 0x93, 0xa0, 0x3a, 0x88, 0x03, 0xd0, 0x15, 0x98,
	0x0a, 0xb6, 0xb6, 0x98, 0x44, 0x3a, 0x54, 0xd8, 0xa2, 0xf7, 0x21, 0xaf, 0x51, 0x97, 0xa9, 0xa6,
	0xa1, 0x39, 0xd4, 0x15, 0xe5, 0xda, 0x1b, 0x7d, 0xd0, 0x5d, 0x8b, 0x5d, 0xbd, 0x12, 0x20, 0xc1,
	0xb7, 0xdf, 0xe3, 0xe6, 0xbe, 0xe6, 0xd8, 0x95, 0x22, 0xea, 0x8f, 0x0c, 0xcd, 0x31, 0x00, 0xfa,
	0x00, 0xf2, 0x1d, 0x43, 0x27, 0x54, 0xed, 0x18, 0xe4, 0x91, 0x9b, 0x58, 0xc3, 0xc5, 0xf1, 0xc0,
	0x01, 0x07, 0xbe, 0xbd, 0xfc, 0x62, 0x12, 0x16, 0xd3, 0x4a, 0x17, 0x74, 0x08, 0x8b, 0x9a, 0xe7,
	0x38, 0xc4, 0x62, 0xe1, 0x1e, 0xc0, 0x26, 0xf5, 0xac, 0x68, 0xba, 0x52, 0xf6, 0x74, 0x5f, 0x17,
	0x04, 0x01, 0x7f, 0x83, 0xc3, 0xc5, 0xec, 0x75, 0xa8, 0x44, 0x5b, 0xea, 0x74, 0x97, 0x75, 0x7b,
	0xc8, 0x65, 0x7b, 0x78, 0x33, 0x46, 0x32, 0xc0, 0xcb, 0x53, 0x09, 0x0a, 0x82, 0xda, 0x3f, 0x98,
	0xfc, 0x38, 0x4f, 0x54, 0x26, 0x56, 0xf3, 0xeb, 0x0f, 0x5f, 0x6e, 0x9d, 0x97, 0x3a, 0x78, 0x8b,
	0x7b, 0x56, 0x66, 0x03, 0x21, 0xc1, 0x9b, 0x2b, 0xbf, 0x90, 0x60, 0x39, 0x1b, 0x85, 0xf6, 0xa0,
	0x38, 0x6e, 0xf4, 0x51, 0xb3, 0x3f, 0x20, 0xa7, 0xcd, 0x45, 0xee, 0x55, 0x34, 0x17, 0xf2, 0x33,
	0x09, 0xe6, 0x07, 0xd6, 0x9f, 0x68, 0x1b, 0xa6, 0xc5, 0xc9, 0x2b, 0xb4, 0xbf, 0x95, 0xe8, 0x3a,
	0xe8, 0x69, 0xc3, 0xa3, 0x7c, 0xd7, 0xba, 0x4f, 0x95, 0x10, 0x8b, 0xee, 0x82, 0x1c, 0xcf, 0x1b,
	0xbf, 0xb6, 0x69, 0x1a, 0xfa, 0x08, 0x19, 0xf3, 0x5a, 0x0c, 0xbe, 0x69, 0x6b, 0x1b, 0x86, 0x1e,
	0x84, 0x46, 0xfe, 0xed, 0x0c, 0x2c, 0xa6, 0x55, 0x8b, 0xe8, 0x6b, 0x09, 0xa6, 0xc3, 0x2c, 0x92,
	0xc6, 0xcd, 0xa2, 0x34, 0x0f, 0xa9, 0x83, 0x22, 0x8b, 0x42, 0x05, 0xe8, 0x1e, 0xc4, 0x73, 0x5f,
	0x8d, 0x55, 0xd0, 0xc3, 0xc7, 0x22, 0x1e, 0xca, 0xc8, 0xb7, 0x08, 0xc7, 0xb3, 0x09, 0x58, 0xce,
	0xd6, 0x83, 0x8e, 0x61, 0xd2, 0xef, 0xdd, 0xf9, 0x9a, 0x16, 0xd6, 0xf5, 0x8c, 0x5e, 0x38, 0x8d,
	0x70, 0x87, 0xe2, 0x36, 0xef, 0x8c, 0xb3, 0x8c, 0x14, 0xee, 0x11, 0xed, 0xc0, 0x85, 0xb1, 0x26,
	0x3d, 0xc7, 0xba, 0x67, 0x8a, 0x28, 0x5c, 0x72, 0xc8, 0x43, 0xcf, 0x70, 0xfc, 0x7c, 0xea, 0x69,
	0x12, 0xbb, 0x37, 0xdd, 0x10, 0x27, 0xfc, 0x72, 0x48, 0xd5, 0xbd, 0xb7, 0x13, 0x36, 0xe1, 0xe4,
	0x2b, 0xd9, 0x84, 0x7f, 0x4b, 0x50, 0x4e, 0xaf, 0x33, 0x90, 0x02, 0x0b, 0xe4, 0x58, 0x23, 0xae,
	0xdb, 0x3b, 0xe3, 0xc4, 0xbb, 0x33, 0xde, 0x91, 0x17, 0x03, 0x6c, 0xf7, 0x14, 0xd1, 0x97, 0x12,
	0xcc, 0x0f, 0xae, 0x96, 0x72, 0xaf, 0xa2, 0xb7, 0x56, 0xc4, 0xc1, 0xd8, 0x53, 0x1f, 0xfd, 0x2e,
	0x41, 0x71, 0x50, 0xff, 0x89, 0xde, 0x85, 0x1c, 0x0e, 0xcf, 0x9e, 0x95, 0x21, 0xa4, 0x34, 0x74,
	0x25, 0x87, 0x75, 0xd4, 0x80, 0x59, 0xcd, 0x21, 0x41, 0x21, 0xad, 0x63, 0x46, 0x12, 0x2b, 0x84,
	0x78, 0x80, 0x66, 0x42, 0xc8, 0x16, 0x66, 0x04, 0x6d, 0xc1, 0x1c, 0xf6, 0x18, 0x55, 0xb1, 0x6d,
	0xb7, 0x4f, 0x02, 0x92, 0x89, 0x21, 0x48, 0x66, 0x7d, 0x50, 0xc3, 0xc7, 0xf8, 0x2c, 0xf2, 0x37,
	0x12, 0x5c, 0x1a, 0xae, 0x51, 0x1c, 0xea, 0x72, 0x95, 0xfe, 0xed, 0xe5, 0x2a, 0x57, 0xa0, 0x9c,
	0xde, 0x07, 0xca, 0x5f, 0x49, 0xb0, 0x94, 0xd9, 0xdc, 0xfc, 0x47, 0x6a, 0x97, 0xa1, 0x92, 0xd5,
	0xbf, 0xc8, 0x17, 0x61, 0x29, 0xb3, 0x6b, 0x94, 0xff, 0x90, 0xa0, 0x9c, 0xde, 0x65, 0xbc, 0xac,
	0xbb, 0xee, 0x31, 0x2c, 0xc4, 0x03, 0x73, 0xda, 0x2d, 0x89, 0x3f, 0x8f, 0x5b, 0x19, 0xa7, 0x6d,
	0xaf, 0x4a, 0x7e, 0xba, 0xf6, 0x49, 0x2f, 0xc6, 0x7c, 0x44, 0x5f, 0x37, 0xce, 0x43, 0xa1, 0x7b,
	0x13, 0x6f, 0x3c, 0xc9, 0xc1, 0x8a, 0x46, 0xcd, 0xec, 0x9d, 0xb3, 0xf1, 0xff, 0xee, 0x70, 0xec,
	0xfb, 0x8b, 0xb5, 0x2f, 0x7d, 0xf6, 0xb1, 0x40, 0xb6, 0x68, 0x1b, 0x5b, 0xad, 0x2a, 0x75, 0x5a,
	0xb5, 0x16, 0xb1, 0xf8, 0x52, 0x86, 0x3f, 0x7a, 0x6d, 0xc3, 0x4d, 0xf9, 0xef, 0xfb, 0x5e, 0xf4,
	0xf4, 0x43, 0x6e, 0x62, 0xa7, 0xd1, 0xf8, 0x39, 0xb7, 0xb4, 0x13, 0x50, 0x36, 0x74, 0xb7, 0x1a,
	0x3c, 0xfa, 0x4f, 0x07, 0x6b, 0x55, 0x25, 0xb4, 0x7c, 0x1e, 0xda, 0x1c, 0x36, 0x74, 0xf7, 0x30,
	0xb2, 0x39, 0x3c, 0x58, 0x3b, 0x8c, 0x6c, 0xfe, 0xcc, 0xad, 0x04, 0x03, 0xf5, 0x7a, 0x43, 0x77,
	0xeb, 0xf5, 0xc8, 0xaa, 0x5e, 0x3f, 0x58, 0xab, 0xd7, 0x23, 0xbb, 0xe6, 0x14, 0x17, 0xfb, 0xce,
	0x3f, 0x01, 0x00, 0x00, 0xff, 0xff, 0x36, 0xe0, 0xbc, 0xbc, 0xe9, 0x17, 0x00, 0x00,
}
