google-ads-googleads 0.1.0 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/ChangeLog +4 -1
- data/README.md +1 -1
- data/lib/google/ads/googleads/{v0/services/credentials.rb → credentials.rb} +6 -10
- data/lib/google/ads/googleads/path_lookup_util.rb +18 -0
- data/lib/google/ads/googleads/proto_lookup_util.rb +79 -8
- data/lib/google/ads/googleads/v0/common/ad_pb.rb +4 -0
- data/lib/google/ads/googleads/v0/common/criteria_pb.rb +71 -0
- data/lib/google/ads/googleads/v0/enums/ad_group_type_pb.rb +1 -0
- data/lib/google/ads/googleads/v0/enums/ad_type_pb.rb +1 -0
- data/lib/google/ads/googleads/v0/enums/advertising_channel_type_pb.rb +1 -0
- data/lib/google/ads/googleads/v0/enums/bidding_source_pb.rb +29 -0
- data/lib/google/ads/googleads/v0/enums/criterion_type_pb.rb +3 -0
- data/lib/google/ads/googleads/v0/enums/listing_custom_attribute_index_pb.rb +31 -0
- data/lib/google/ads/googleads/v0/enums/listing_group_type_pb.rb +28 -0
- data/lib/google/ads/googleads/v0/enums/recommendation_type_pb.rb +30 -0
- data/lib/google/ads/googleads/v0/enums/target_cpa_opt_in_recommendation_goal_pb.rb +30 -0
- data/lib/google/ads/googleads/v0/errors/ad_error_pb.rb +1 -0
- data/lib/google/ads/googleads/v0/errors/ad_group_bid_modifier_error_pb.rb +28 -0
- data/lib/google/ads/googleads/v0/errors/ad_group_criterion_error_pb.rb +9 -9
- data/lib/google/ads/googleads/v0/errors/authentication_error_pb.rb +0 -4
- data/lib/google/ads/googleads/v0/errors/authorization_error_pb.rb +1 -0
- data/lib/google/ads/googleads/v0/errors/campaign_error_pb.rb +3 -0
- data/lib/google/ads/googleads/v0/errors/context_error_pb.rb +27 -0
- data/lib/google/ads/googleads/v0/errors/criterion_error_pb.rb +2 -0
- data/lib/google/ads/googleads/v0/errors/errors_pb.rb +8 -0
- data/lib/google/ads/googleads/v0/errors/field_error_pb.rb +31 -0
- data/lib/google/ads/googleads/v0/errors/internal_error_pb.rb +1 -0
- data/lib/google/ads/googleads/v0/errors/mutate_error_pb.rb +0 -3
- data/lib/google/ads/googleads/v0/errors/query_error_pb.rb +2 -0
- data/lib/google/ads/googleads/v0/errors/recommendation_error_pb.rb +32 -0
- data/lib/google/ads/googleads/v0/resources/ad_group_bid_modifier_pb.rb +33 -0
- data/lib/google/ads/googleads/v0/resources/ad_group_criterion_pb.rb +5 -4
- data/lib/google/ads/googleads/v0/resources/campaign_criterion_pb.rb +3 -0
- data/lib/google/ads/googleads/v0/resources/campaign_pb.rb +5 -0
- data/lib/google/ads/googleads/v0/resources/customer_pb.rb +1 -0
- data/lib/google/ads/googleads/v0/resources/geo_target_constant_pb.rb +27 -0
- data/lib/google/ads/googleads/v0/resources/recommendation_pb.rb +85 -0
- data/lib/google/ads/googleads/v0/services/ad_group_ad_service_client.rb +3 -3
- data/lib/google/ads/googleads/v0/services/ad_group_bid_modifier_service_client.rb +263 -0
- data/lib/google/ads/googleads/v0/services/ad_group_bid_modifier_service_client_config.json +36 -0
- data/lib/google/ads/googleads/v0/services/ad_group_bid_modifier_service_pb.rb +47 -0
- data/lib/google/ads/googleads/v0/services/ad_group_bid_modifier_service_services_pb.rb +52 -0
- data/lib/google/ads/googleads/v0/services/ad_group_criterion_service_client.rb +3 -3
- data/lib/google/ads/googleads/v0/services/ad_group_service_client.rb +3 -3
- data/lib/google/ads/googleads/v0/services/bidding_strategy_service_client.rb +3 -3
- data/lib/google/ads/googleads/v0/services/campaign_budget_service_client.rb +3 -3
- data/lib/google/ads/googleads/v0/services/campaign_criterion_service_client.rb +3 -3
- data/lib/google/ads/googleads/v0/services/campaign_service_client.rb +3 -3
- data/lib/google/ads/googleads/v0/services/customer_service_client.rb +3 -3
- data/lib/google/ads/googleads/v0/services/geo_target_constant_service_client.rb +214 -0
- data/lib/google/ads/googleads/v0/services/geo_target_constant_service_client_config.json +31 -0
- data/lib/google/ads/googleads/v0/services/geo_target_constant_service_pb.rb +24 -0
- data/lib/google/ads/googleads/v0/services/geo_target_constant_service_services_pb.rb +49 -0
- data/lib/google/ads/googleads/v0/services/google_ads_field_service_client.rb +3 -3
- data/lib/google/ads/googleads/v0/services/google_ads_field_service_client_config.json +2 -2
- data/lib/google/ads/googleads/v0/services/google_ads_service_client.rb +3 -3
- data/lib/google/ads/googleads/v0/services/google_ads_service_client_config.json +1 -1
- data/lib/google/ads/googleads/v0/services/google_ads_service_pb.rb +6 -0
- data/lib/google/ads/googleads/v0/services/keyword_view_service_client.rb +3 -3
- data/lib/google/ads/googleads/v0/services/recommendation_service_client.rb +262 -0
- data/lib/google/ads/googleads/v0/services/recommendation_service_client_config.json +36 -0
- data/lib/google/ads/googleads/v0/services/recommendation_service_pb.rb +73 -0
- data/lib/google/ads/googleads/v0/services/recommendation_service_services_pb.rb +51 -0
- data/lib/google/ads/googleads/version.rb +1 -1
- metadata +27 -4
- data/lib/google/ads/googleads/v0/enums/bid_source_pb.rb +0 -29
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a33b93fdd95cceea595f1175a57fc7695d51da5f17d0ba565fd21886a47f055e
|
4
|
+
data.tar.gz: 3f3804d59c86d12146c3e90e5469c49c395afdab8653665572948a163a2d48d4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ddfb621c7cec0d277e208979eea51966c9e3175c29f877a4a6bc092e66d5f57ce75862bbe5d63865616078bc9a6857cc2761077a58f14add31ab532b77fab0bb
|
7
|
+
data.tar.gz: 6631c0e4d73aa32fe54d5578513d779580f8dc91edb06ad6c2d35745785b0b3c8807e07b8b3498fcae0a807549aaf499cc0eb0265aed344fc3c54e4cb6e15a52
|
data/ChangeLog
CHANGED
data/README.md
CHANGED
@@ -75,7 +75,7 @@ way:
|
|
75
75
|
You can also modify these properties after instantiation by using the
|
76
76
|
`configure` method on the `AdwordsClient`, using the same structure as above.
|
77
77
|
|
78
|
-
[Authorization guide]: https://developers.google.com/google-ads/api/docs/oauth/
|
78
|
+
[Authorization guide]: https://developers.google.com/google-ads/api/docs/oauth/overview
|
79
79
|
[Authentication example]: https://github.com/googleads/google-ads-ruby/blob/master/examples/authentication/authenticate_in_standalone_application.rb
|
80
80
|
[adwords_config.rb]: https://github.com/googleads/google-ads-ruby/blob/master/googleads_config.rb
|
81
81
|
|
@@ -17,16 +17,12 @@ require "googleauth"
|
|
17
17
|
module Google
|
18
18
|
module Ads
|
19
19
|
module Googleads
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
JSON_ENV_VARS = %w(GOOGLEADS_KEYFILE_JSON GOOGLE_CLOUD_KEYFILE_JSON GCLOUD_KEYFILE_JSON)
|
27
|
-
DEFAULT_PATHS = ["~/.config/gcloud/application_default_credentials.json"]
|
28
|
-
end
|
29
|
-
end
|
20
|
+
class Credentials < Google::Auth::Credentials
|
21
|
+
SCOPE = [
|
22
|
+
].freeze
|
23
|
+
PATH_ENV_VARS = %w(GOOGLEADS_KEYFILE GOOGLE_CLOUD_KEYFILE GCLOUD_KEYFILE)
|
24
|
+
JSON_ENV_VARS = %w(GOOGLEADS_KEYFILE_JSON GOOGLE_CLOUD_KEYFILE_JSON GCLOUD_KEYFILE_JSON)
|
25
|
+
DEFAULT_PATHS = ["~/.config/gcloud/application_default_credentials.json"]
|
30
26
|
end
|
31
27
|
end
|
32
28
|
end
|
@@ -29,6 +29,14 @@ module Google
|
|
29
29
|
customer_id.to_s, sprintf('%s_%s', ad_group_id.to_s, ad_id.to_s))
|
30
30
|
end
|
31
31
|
|
32
|
+
def ad_group_bid_modifier(customer_id, ad_group_id, criterion_id)
|
33
|
+
@proto_lookup_util.service(:AdGroupBidModifier).
|
34
|
+
ad_group_bid_modifier_path(
|
35
|
+
customer_id.to_s,
|
36
|
+
sprintf('%s_%s', ad_group_id.to_s, criterion_id.to_s)
|
37
|
+
)
|
38
|
+
end
|
39
|
+
|
32
40
|
def ad_group_criterion(customer_id, ad_group_id, criterion_id)
|
33
41
|
@proto_lookup_util.service(:AdGroupCriterion).ad_group_criteria_path(
|
34
42
|
customer_id.to_s,
|
@@ -67,6 +75,11 @@ module Google
|
|
67
75
|
@proto_lookup_util.service(:Customer).customer_path(customer_id.to_s)
|
68
76
|
end
|
69
77
|
|
78
|
+
def geo_target_constant(geo_target_constant_id)
|
79
|
+
@proto_lookup_util.service(:GeoTargetConstant).
|
80
|
+
geo_target_constant_path(geo_target_constant_id.to_s)
|
81
|
+
end
|
82
|
+
|
70
83
|
def google_ads_field(google_ads_field)
|
71
84
|
@proto_lookup_util.service(:GoogleAdsField).google_ads_field_path(
|
72
85
|
google_ads_field.to_s)
|
@@ -78,6 +91,11 @@ module Google
|
|
78
91
|
sprintf('%s_%s', ad_group_id.to_s, criterion_id.to_s)
|
79
92
|
)
|
80
93
|
end
|
94
|
+
|
95
|
+
def recommendation(customer_id, recommendation_id)
|
96
|
+
@proto_lookup_util.service(:Recommendation).recommendation_path(
|
97
|
+
customer_id.to_s, recommendation_id.to_s)
|
98
|
+
end
|
81
99
|
end
|
82
100
|
end
|
83
101
|
end
|
@@ -47,6 +47,8 @@ module Google
|
|
47
47
|
PositionEstimates: ['resources', 'ad_group_criterion_pb',
|
48
48
|
'AdGroupCriterion::PositionEstimates'],
|
49
49
|
AdGroup: ['resources', 'ad_group_pb', 'AdGroup'],
|
50
|
+
AdGroupBidModifier: ['resources', 'ad_group_bid_modifier_pb',
|
51
|
+
'AdGroupBidModifier'],
|
50
52
|
BiddingStrategy: ['resources', 'bidding_strategy_pb',
|
51
53
|
'BiddingStrategy'],
|
52
54
|
CampaignBudget: ['resources', 'campaign_budget_pb', 'CampaignBudget'],
|
@@ -55,12 +57,33 @@ module Google
|
|
55
57
|
Campaign: ['resources', 'campaign_pb', 'Campaign'],
|
56
58
|
NetworkSettings: ['resources', 'campaign_pb',
|
57
59
|
'Campaign::NetworkSettings'],
|
60
|
+
HotelSettingInfo: ['resources', 'campaign_pb',
|
61
|
+
'Campaign::HotelSettingInfo'],
|
58
62
|
DynamicSearchAdsSetting: ['resources', 'campaign_pb',
|
59
63
|
'Campaign::DynamicSearchAdsSetting'],
|
60
64
|
Customer: ['resources', 'customer_pb', 'Customer'],
|
65
|
+
GeoTargetConstant: ['resources', 'geo_target_constant_pb',
|
66
|
+
'GeoTargetConstant'],
|
61
67
|
GoogleAdsField: ['resources', 'google_ads_field_pb',
|
62
68
|
'GoogleAdsField'],
|
63
69
|
KeywordView: ['resources', 'keyword_view_pb', 'KeywordView'],
|
70
|
+
Recommendation: ['resources', 'recommendation_pb', 'Recommendation'],
|
71
|
+
RecommendationImpact: ['resources', 'recommendation_pb',
|
72
|
+
'Recommendation::RecommendationImpact'],
|
73
|
+
RecommendationMetrics: ['resources', 'recommendation_pb',
|
74
|
+
'Recommendation::RecommendationMetrics'],
|
75
|
+
CampaignBudgetRecommendation: ['resources', 'recommendation_pb',
|
76
|
+
'Recommendation::CampaignBudgetRecommendation'],
|
77
|
+
CampaignBudgetRecommendationOption: ['resources', 'recommendation_pb',
|
78
|
+
'Recommendation::CampaignBudgetRecommendation::CampaignBudgetRecommendationOption'],
|
79
|
+
KeywordRecommendation: ['resources', 'recommendation_pb',
|
80
|
+
'Recommendation::KeywordRecommendation'],
|
81
|
+
TextAdRecommendation: ['resources', 'recommendation_pb',
|
82
|
+
'Recommendation::TextAdRecommendation'],
|
83
|
+
TargetCpaOptInRecommendation: ['resources', 'recommendation_pb',
|
84
|
+
'Recommendation::TargetCpaOptInRecommendation'],
|
85
|
+
TargetCpaOptInRecommendationOption: ['resources', 'recommendation_pb',
|
86
|
+
'Recommendation::TargetCpaOptInRecommendation::TargetCpaOptInRecommendationOption'],
|
64
87
|
Ad: ['common', 'ad_pb', 'Ad'],
|
65
88
|
TextAdInfo: ['common', 'ad_pb', 'TextAdInfo'],
|
66
89
|
ExpandedTextAdInfo: ['common', 'ad_pb', 'ExpandedTextAdInfo'],
|
@@ -70,6 +93,7 @@ module Google
|
|
70
93
|
CallOnlyAdInfo: ['common', 'ad_pb', 'CallOnlyAdInfo'],
|
71
94
|
ExpandedDynamicSearchAdInfo: ['common', 'ad_pb',
|
72
95
|
'ExpandedDynamicSearchAdInfo'],
|
96
|
+
HotelAdInfo: ['common', 'ad_pb', 'HotelAdInfo'],
|
73
97
|
EnhancedCpc: ['common', 'bidding_pb', 'EnhancedCpc'],
|
74
98
|
ManualCpc: ['common', 'bidding_pb', 'ManualCpc'],
|
75
99
|
ManualCpm: ['common', 'bidding_pb', 'ManualCpm'],
|
@@ -82,10 +106,39 @@ module Google
|
|
82
106
|
TargetRoas: ['common', 'bidding_pb', 'TargetRoas'],
|
83
107
|
TargetSpend: ['common', 'bidding_pb', 'TargetSpend'],
|
84
108
|
KeywordInfo: ['common', 'criteria_pb', 'KeywordInfo'],
|
109
|
+
LocationInfo: ['common', 'criteria_pb', 'LocationInfo'],
|
110
|
+
PlatformInfo: ['common', 'criteria_pb', 'PlatformInfo'],
|
111
|
+
ListingGroupInfo: ['common', 'criteria_pb', 'ListingGroupInfo'],
|
112
|
+
ListingDimensionInfo: ['common', 'criteria_pb',
|
113
|
+
'ListingDimensionInfo'],
|
114
|
+
ListingBrandInfo: ['common', 'criteria_pb', 'ListingBrandInfo'],
|
115
|
+
HotelIdInfo: ['common', 'criteria_pb', 'HotelIdInfo'],
|
116
|
+
HotelClassInfo: ['common', 'criteria_pb', 'HotelClassInfo'],
|
117
|
+
HotelCountryRegionInfo: ['common', 'criteria_pb',
|
118
|
+
'HotelCountryRegionInfo'],
|
119
|
+
HotelStateInfo: ['common', 'criteria_pb', 'HotelStateInfo'],
|
120
|
+
HotelCityInfo: ['common', 'criteria_pb', 'HotelCityInfo'],
|
121
|
+
ListingCustomAttributeInfo: ['common', 'criteria_pb',
|
122
|
+
'ListingCustomAttributeInfo'],
|
123
|
+
HotelDateSelectionTypeInfo: ['common', 'criteria_pb',
|
124
|
+
'HotelDateSelectionTypeInfo'],
|
125
|
+
HotelAdvanceBookingWindowInfo: ['common', 'criteria_pb',
|
126
|
+
'HotelAdvanceBookingWindowInfo'],
|
127
|
+
HotelLengthOfStayInfo: ['common', 'criteria_pb',
|
128
|
+
'HotelLengthOfStayInfo'],
|
129
|
+
HotelCheckInDayInfo: ['common', 'criteria_pb', 'HotelCheckInDayInfo'],
|
85
130
|
CustomParameter: ['common', 'custom_parameter_pb', 'CustomParameter'],
|
86
131
|
Metrics: ['common', 'metrics_pb', 'Metrics'],
|
87
132
|
PolicyViolationKey: ['common', 'policy_pb', 'PolicyViolationKey'],
|
88
|
-
Value: ['common', 'value_pb', 'Value']
|
133
|
+
Value: ['common', 'value_pb', 'Value'],
|
134
|
+
CampaignBudgetParameters: ['services', 'recommendation_service_pb',
|
135
|
+
'ApplyRecommendationOperation::CampaignBudgetParameters'],
|
136
|
+
TextAdParameters: ['services', 'recommendation_service_pb',
|
137
|
+
'ApplyRecommendationOperation::TextAdParameters'],
|
138
|
+
KeywordParameters: ['services', 'recommendation_service_pb',
|
139
|
+
'ApplyRecommendationOperation::KeywordParameters'],
|
140
|
+
TargetCpaOptInParameters: ['services', 'recommendation_service_pb',
|
141
|
+
'ApplyRecommendationOperation::TargetCpaOptInParameters']
|
89
142
|
}.freeze
|
90
143
|
|
91
144
|
ENUMS = {
|
@@ -102,7 +155,7 @@ module Google
|
|
102
155
|
'AdvertisingChannelSubType'],
|
103
156
|
AdvertisingChannelType: ['advertising_channel_type_pb',
|
104
157
|
'AdvertisingChannelType'],
|
105
|
-
|
158
|
+
BiddingSource: ['bidding_source_pb', 'BiddingSource'],
|
106
159
|
BiddingStrategyType: ['bidding_strategy_type_pb',
|
107
160
|
'BiddingStrategyType'],
|
108
161
|
BudgetDeliveryMethod: ['budget_delivery_method_pb',
|
@@ -118,14 +171,23 @@ module Google
|
|
118
171
|
GoogleAdsFieldDataType: ['google_ads_field_data_type_pb',
|
119
172
|
'GoogleAdsFieldDataType'],
|
120
173
|
KeywordMatchType: ['keyword_match_type_pb', 'KeywordMatchType'],
|
174
|
+
ListingCustomAttributeIndex: ['listing_custom_attribute_index_pb',
|
175
|
+
'ListingCustomAttributeIndex'],
|
176
|
+
ListingGroupType: ['listing_group_type_pb', 'ListingGroupType'],
|
121
177
|
PageOnePromotedStrategyGoal: ['page_one_promoted_strategy_goal_pb',
|
122
178
|
'PageOnePromotedStrategyGoal'],
|
123
179
|
QualityScoreBucket: ['quality_score_bucket_pb', 'QualityScoreBucket'],
|
124
|
-
|
180
|
+
RecommendationType: ['recommendation_type_pb', 'RecommendationType'],
|
181
|
+
Slot: ['slot_pb', 'Slot'],
|
182
|
+
TargetCpaOptInRecommendationGoal: [
|
183
|
+
'target_cpa_opt_in_recommendation_goal_pb',
|
184
|
+
'TargetCpaOptInRecommendationGoal']
|
125
185
|
}.freeze
|
126
186
|
|
127
187
|
SERVICES = {
|
128
188
|
AdGroupAd: ['ad_group_ad_service_client', 'AdGroupAdServiceClient'],
|
189
|
+
AdGroupBidModifier: ['ad_group_bid_modifier_service_client',
|
190
|
+
'AdGroupBidModifierServiceClient'],
|
129
191
|
AdGroupCriterion: ['ad_group_criterion_service_client',
|
130
192
|
'AdGroupCriterionServiceClient'],
|
131
193
|
AdGroup: ['ad_group_service_client', 'AdGroupServiceClient'],
|
@@ -137,18 +199,26 @@ module Google
|
|
137
199
|
'CampaignCriterionServiceClient'],
|
138
200
|
Campaign: ['campaign_service_client', 'CampaignServiceClient'],
|
139
201
|
Customer: ['customer_service_client', 'CustomerServiceClient'],
|
202
|
+
GeoTargetConstant: ['geo_target_constant_service_client',
|
203
|
+
'GeoTargetConstantServiceClient'],
|
140
204
|
GoogleAdsField: ['google_ads_field_service_client',
|
141
205
|
'GoogleAdsFieldServiceClient'],
|
142
206
|
GoogleAds: ['google_ads_service_client', 'GoogleAdsServiceClient'],
|
143
207
|
KeywordView: ['keyword_view_service_client',
|
144
|
-
'KeywordViewServiceClient']
|
145
|
-
|
208
|
+
'KeywordViewServiceClient'],
|
209
|
+
Recommendation: ['recommendation_service_client',
|
210
|
+
'RecommendationServiceClient']
|
211
|
+
}.freeze
|
146
212
|
|
147
213
|
OPERATIONS = {
|
148
214
|
AdGroupAd: ['ad_group_ad_service_pb', 'AdGroupAdOperation'],
|
215
|
+
AdGroupBidModifier: ['ad_group_bid_modifier_service_pb',
|
216
|
+
'AdGroupBidModifierOperation'],
|
149
217
|
AdGroupCriterion: ['ad_group_criterion_service_pb',
|
150
218
|
'AdGroupCriterionOperation'],
|
151
219
|
AdGroup: ['ad_group_service_pb', 'AdGroupOperation'],
|
220
|
+
ApplyRecommendation: ['recommendation_service_pb',
|
221
|
+
'ApplyRecommendationOperation'],
|
152
222
|
BiddingStrategy: ['bidding_strategy_service_pb',
|
153
223
|
'BiddingStrategyOperation'],
|
154
224
|
CampaignBudget: ['campaign_budget_service_pb',
|
@@ -156,7 +226,7 @@ module Google
|
|
156
226
|
CampaignCriterion: ['campaign_criterion_service_pb',
|
157
227
|
'CampaignCriterionOperation'],
|
158
228
|
Campaign: ['campaign_service_pb', 'CampaignOperation'],
|
159
|
-
}
|
229
|
+
}.freeze
|
160
230
|
|
161
231
|
def initialize(version)
|
162
232
|
@version = version
|
@@ -176,8 +246,9 @@ module Google
|
|
176
246
|
resource_info[1])
|
177
247
|
require require_path
|
178
248
|
|
179
|
-
class_path =
|
180
|
-
|
249
|
+
class_path = RESOURCE_CLASS_PATH
|
250
|
+
class_path = COMMON_CLASS_PATH if resource_info.first == 'common'
|
251
|
+
class_path = SERVICE_CLASS_PATH if resource_info.first == 'services'
|
181
252
|
class_path = sprintf(class_path, @version, resource_info[2])
|
182
253
|
return class_for_path(class_path)
|
183
254
|
end
|
@@ -22,6 +22,7 @@ Google::Protobuf::DescriptorPool.generated_pool.build do
|
|
22
22
|
optional :responsive_display_ad, :message, 9, "google.ads.googleads.v0.common.ResponsiveDisplayAdInfo"
|
23
23
|
optional :call_only_ad, :message, 13, "google.ads.googleads.v0.common.CallOnlyAdInfo"
|
24
24
|
optional :expanded_dynamic_search_ad, :message, 14, "google.ads.googleads.v0.common.ExpandedDynamicSearchAdInfo"
|
25
|
+
optional :hotel_ad, :message, 15, "google.ads.googleads.v0.common.HotelAdInfo"
|
25
26
|
end
|
26
27
|
end
|
27
28
|
add_message "google.ads.googleads.v0.common.TextAdInfo" do
|
@@ -59,6 +60,8 @@ Google::Protobuf::DescriptorPool.generated_pool.build do
|
|
59
60
|
add_message "google.ads.googleads.v0.common.ExpandedDynamicSearchAdInfo" do
|
60
61
|
optional :description, :message, 1, "google.protobuf.StringValue"
|
61
62
|
end
|
63
|
+
add_message "google.ads.googleads.v0.common.HotelAdInfo" do
|
64
|
+
end
|
62
65
|
end
|
63
66
|
|
64
67
|
module Google
|
@@ -73,6 +76,7 @@ module Google
|
|
73
76
|
ResponsiveDisplayAdInfo = Google::Protobuf::DescriptorPool.generated_pool.lookup("google.ads.googleads.v0.common.ResponsiveDisplayAdInfo").msgclass
|
74
77
|
CallOnlyAdInfo = Google::Protobuf::DescriptorPool.generated_pool.lookup("google.ads.googleads.v0.common.CallOnlyAdInfo").msgclass
|
75
78
|
ExpandedDynamicSearchAdInfo = Google::Protobuf::DescriptorPool.generated_pool.lookup("google.ads.googleads.v0.common.ExpandedDynamicSearchAdInfo").msgclass
|
79
|
+
HotelAdInfo = Google::Protobuf::DescriptorPool.generated_pool.lookup("google.ads.googleads.v0.common.HotelAdInfo").msgclass
|
76
80
|
end
|
77
81
|
end
|
78
82
|
end
|
@@ -4,12 +4,68 @@
|
|
4
4
|
require 'google/protobuf'
|
5
5
|
|
6
6
|
require 'google/ads/googleads/v0/enums/keyword_match_type_pb'
|
7
|
+
require 'google/ads/googleads/v0/enums/listing_custom_attribute_index_pb'
|
8
|
+
require 'google/ads/googleads/v0/enums/listing_group_type_pb'
|
7
9
|
require 'google/protobuf/wrappers_pb'
|
8
10
|
Google::Protobuf::DescriptorPool.generated_pool.build do
|
9
11
|
add_message "google.ads.googleads.v0.common.KeywordInfo" do
|
10
12
|
optional :text, :message, 1, "google.protobuf.StringValue"
|
11
13
|
optional :match_type, :enum, 2, "google.ads.googleads.v0.enums.KeywordMatchTypeEnum.KeywordMatchType"
|
12
14
|
end
|
15
|
+
add_message "google.ads.googleads.v0.common.LocationInfo" do
|
16
|
+
end
|
17
|
+
add_message "google.ads.googleads.v0.common.PlatformInfo" do
|
18
|
+
end
|
19
|
+
add_message "google.ads.googleads.v0.common.ListingGroupInfo" do
|
20
|
+
optional :type, :enum, 1, "google.ads.googleads.v0.enums.ListingGroupTypeEnum.ListingGroupType"
|
21
|
+
optional :case_value, :message, 2, "google.ads.googleads.v0.common.ListingDimensionInfo"
|
22
|
+
optional :parent_criterion_id, :message, 3, "google.protobuf.Int64Value"
|
23
|
+
end
|
24
|
+
add_message "google.ads.googleads.v0.common.ListingDimensionInfo" do
|
25
|
+
oneof :dimension do
|
26
|
+
optional :listing_brand, :message, 1, "google.ads.googleads.v0.common.ListingBrandInfo"
|
27
|
+
optional :hotel_id, :message, 2, "google.ads.googleads.v0.common.HotelIdInfo"
|
28
|
+
optional :hotel_class, :message, 3, "google.ads.googleads.v0.common.HotelClassInfo"
|
29
|
+
optional :hotel_country_region, :message, 4, "google.ads.googleads.v0.common.HotelCountryRegionInfo"
|
30
|
+
optional :hotel_state, :message, 5, "google.ads.googleads.v0.common.HotelStateInfo"
|
31
|
+
optional :hotel_city, :message, 6, "google.ads.googleads.v0.common.HotelCityInfo"
|
32
|
+
optional :listing_custom_attribute, :message, 7, "google.ads.googleads.v0.common.ListingCustomAttributeInfo"
|
33
|
+
end
|
34
|
+
end
|
35
|
+
add_message "google.ads.googleads.v0.common.ListingBrandInfo" do
|
36
|
+
optional :value, :message, 1, "google.protobuf.StringValue"
|
37
|
+
end
|
38
|
+
add_message "google.ads.googleads.v0.common.HotelIdInfo" do
|
39
|
+
optional :value, :message, 1, "google.protobuf.StringValue"
|
40
|
+
end
|
41
|
+
add_message "google.ads.googleads.v0.common.HotelClassInfo" do
|
42
|
+
optional :value, :message, 1, "google.protobuf.Int64Value"
|
43
|
+
end
|
44
|
+
add_message "google.ads.googleads.v0.common.HotelCountryRegionInfo" do
|
45
|
+
optional :country_region_criterion, :message, 1, "google.protobuf.StringValue"
|
46
|
+
end
|
47
|
+
add_message "google.ads.googleads.v0.common.HotelStateInfo" do
|
48
|
+
optional :state_criterion, :message, 1, "google.protobuf.StringValue"
|
49
|
+
end
|
50
|
+
add_message "google.ads.googleads.v0.common.HotelCityInfo" do
|
51
|
+
optional :city_criterion, :message, 1, "google.protobuf.StringValue"
|
52
|
+
end
|
53
|
+
add_message "google.ads.googleads.v0.common.ListingCustomAttributeInfo" do
|
54
|
+
optional :value, :message, 1, "google.protobuf.StringValue"
|
55
|
+
optional :index, :enum, 2, "google.ads.googleads.v0.enums.ListingCustomAttributeIndexEnum.ListingCustomAttributeIndex"
|
56
|
+
end
|
57
|
+
add_message "google.ads.googleads.v0.common.HotelDateSelectionTypeInfo" do
|
58
|
+
end
|
59
|
+
add_message "google.ads.googleads.v0.common.HotelAdvanceBookingWindowInfo" do
|
60
|
+
optional :min_days, :message, 1, "google.protobuf.Int64Value"
|
61
|
+
optional :max_days, :message, 2, "google.protobuf.Int64Value"
|
62
|
+
end
|
63
|
+
add_message "google.ads.googleads.v0.common.HotelLengthOfStayInfo" do
|
64
|
+
optional :min_nights, :message, 1, "google.protobuf.Int64Value"
|
65
|
+
optional :max_nights, :message, 2, "google.protobuf.Int64Value"
|
66
|
+
end
|
67
|
+
add_message "google.ads.googleads.v0.common.HotelCheckInDayInfo" do
|
68
|
+
end
|
13
69
|
end
|
14
70
|
|
15
71
|
module Google
|
@@ -18,6 +74,21 @@ module Google
|
|
18
74
|
module V0
|
19
75
|
module Common
|
20
76
|
KeywordInfo = Google::Protobuf::DescriptorPool.generated_pool.lookup("google.ads.googleads.v0.common.KeywordInfo").msgclass
|
77
|
+
LocationInfo = Google::Protobuf::DescriptorPool.generated_pool.lookup("google.ads.googleads.v0.common.LocationInfo").msgclass
|
78
|
+
PlatformInfo = Google::Protobuf::DescriptorPool.generated_pool.lookup("google.ads.googleads.v0.common.PlatformInfo").msgclass
|
79
|
+
ListingGroupInfo = Google::Protobuf::DescriptorPool.generated_pool.lookup("google.ads.googleads.v0.common.ListingGroupInfo").msgclass
|
80
|
+
ListingDimensionInfo = Google::Protobuf::DescriptorPool.generated_pool.lookup("google.ads.googleads.v0.common.ListingDimensionInfo").msgclass
|
81
|
+
ListingBrandInfo = Google::Protobuf::DescriptorPool.generated_pool.lookup("google.ads.googleads.v0.common.ListingBrandInfo").msgclass
|
82
|
+
HotelIdInfo = Google::Protobuf::DescriptorPool.generated_pool.lookup("google.ads.googleads.v0.common.HotelIdInfo").msgclass
|
83
|
+
HotelClassInfo = Google::Protobuf::DescriptorPool.generated_pool.lookup("google.ads.googleads.v0.common.HotelClassInfo").msgclass
|
84
|
+
HotelCountryRegionInfo = Google::Protobuf::DescriptorPool.generated_pool.lookup("google.ads.googleads.v0.common.HotelCountryRegionInfo").msgclass
|
85
|
+
HotelStateInfo = Google::Protobuf::DescriptorPool.generated_pool.lookup("google.ads.googleads.v0.common.HotelStateInfo").msgclass
|
86
|
+
HotelCityInfo = Google::Protobuf::DescriptorPool.generated_pool.lookup("google.ads.googleads.v0.common.HotelCityInfo").msgclass
|
87
|
+
ListingCustomAttributeInfo = Google::Protobuf::DescriptorPool.generated_pool.lookup("google.ads.googleads.v0.common.ListingCustomAttributeInfo").msgclass
|
88
|
+
HotelDateSelectionTypeInfo = Google::Protobuf::DescriptorPool.generated_pool.lookup("google.ads.googleads.v0.common.HotelDateSelectionTypeInfo").msgclass
|
89
|
+
HotelAdvanceBookingWindowInfo = Google::Protobuf::DescriptorPool.generated_pool.lookup("google.ads.googleads.v0.common.HotelAdvanceBookingWindowInfo").msgclass
|
90
|
+
HotelLengthOfStayInfo = Google::Protobuf::DescriptorPool.generated_pool.lookup("google.ads.googleads.v0.common.HotelLengthOfStayInfo").msgclass
|
91
|
+
HotelCheckInDayInfo = Google::Protobuf::DescriptorPool.generated_pool.lookup("google.ads.googleads.v0.common.HotelCheckInDayInfo").msgclass
|
21
92
|
end
|
22
93
|
end
|
23
94
|
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
# Generated by the protocol buffer compiler. DO NOT EDIT!
|
2
|
+
# source: google/ads/googleads/v0/enums/bidding_source.proto
|
3
|
+
|
4
|
+
require 'google/protobuf'
|
5
|
+
|
6
|
+
Google::Protobuf::DescriptorPool.generated_pool.build do
|
7
|
+
add_message "google.ads.googleads.v0.enums.BiddingSourceEnum" do
|
8
|
+
end
|
9
|
+
add_enum "google.ads.googleads.v0.enums.BiddingSourceEnum.BiddingSource" do
|
10
|
+
value :UNSPECIFIED, 0
|
11
|
+
value :UNKNOWN, 1
|
12
|
+
value :ADGROUP, 2
|
13
|
+
value :CRITERION, 3
|
14
|
+
value :CAMPAIGN_BIDDING_STRATEGY, 5
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
module Google
|
19
|
+
module Ads
|
20
|
+
module Googleads
|
21
|
+
module V0
|
22
|
+
module Enums
|
23
|
+
BiddingSourceEnum = Google::Protobuf::DescriptorPool.generated_pool.lookup("google.ads.googleads.v0.enums.BiddingSourceEnum").msgclass
|
24
|
+
BiddingSourceEnum::BiddingSource = Google::Protobuf::DescriptorPool.generated_pool.lookup("google.ads.googleads.v0.enums.BiddingSourceEnum.BiddingSource").enummodule
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
# Generated by the protocol buffer compiler. DO NOT EDIT!
|
2
|
+
# source: google/ads/googleads/v0/enums/listing_custom_attribute_index.proto
|
3
|
+
|
4
|
+
require 'google/protobuf'
|
5
|
+
|
6
|
+
Google::Protobuf::DescriptorPool.generated_pool.build do
|
7
|
+
add_message "google.ads.googleads.v0.enums.ListingCustomAttributeIndexEnum" do
|
8
|
+
end
|
9
|
+
add_enum "google.ads.googleads.v0.enums.ListingCustomAttributeIndexEnum.ListingCustomAttributeIndex" do
|
10
|
+
value :UNSPECIFIED, 0
|
11
|
+
value :UNKNOWN, 1
|
12
|
+
value :CUSTOM_ATTRIBUTE_0, 2
|
13
|
+
value :CUSTOM_ATTRIBUTE_1, 3
|
14
|
+
value :CUSTOM_ATTRIBUTE_2, 4
|
15
|
+
value :CUSTOM_ATTRIBUTE_3, 5
|
16
|
+
value :CUSTOM_ATTRIBUTE_4, 6
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
module Google
|
21
|
+
module Ads
|
22
|
+
module Googleads
|
23
|
+
module V0
|
24
|
+
module Enums
|
25
|
+
ListingCustomAttributeIndexEnum = Google::Protobuf::DescriptorPool.generated_pool.lookup("google.ads.googleads.v0.enums.ListingCustomAttributeIndexEnum").msgclass
|
26
|
+
ListingCustomAttributeIndexEnum::ListingCustomAttributeIndex = Google::Protobuf::DescriptorPool.generated_pool.lookup("google.ads.googleads.v0.enums.ListingCustomAttributeIndexEnum.ListingCustomAttributeIndex").enummodule
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
# Generated by the protocol buffer compiler. DO NOT EDIT!
|
2
|
+
# source: google/ads/googleads/v0/enums/listing_group_type.proto
|
3
|
+
|
4
|
+
require 'google/protobuf'
|
5
|
+
|
6
|
+
Google::Protobuf::DescriptorPool.generated_pool.build do
|
7
|
+
add_message "google.ads.googleads.v0.enums.ListingGroupTypeEnum" do
|
8
|
+
end
|
9
|
+
add_enum "google.ads.googleads.v0.enums.ListingGroupTypeEnum.ListingGroupType" do
|
10
|
+
value :UNSPECIFIED, 0
|
11
|
+
value :UNKNOWN, 1
|
12
|
+
value :SUBDIVISION, 2
|
13
|
+
value :UNIT, 3
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
module Google
|
18
|
+
module Ads
|
19
|
+
module Googleads
|
20
|
+
module V0
|
21
|
+
module Enums
|
22
|
+
ListingGroupTypeEnum = Google::Protobuf::DescriptorPool.generated_pool.lookup("google.ads.googleads.v0.enums.ListingGroupTypeEnum").msgclass
|
23
|
+
ListingGroupTypeEnum::ListingGroupType = Google::Protobuf::DescriptorPool.generated_pool.lookup("google.ads.googleads.v0.enums.ListingGroupTypeEnum.ListingGroupType").enummodule
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
# Generated by the protocol buffer compiler. DO NOT EDIT!
|
2
|
+
# source: google/ads/googleads/v0/enums/recommendation_type.proto
|
3
|
+
|
4
|
+
require 'google/protobuf'
|
5
|
+
|
6
|
+
Google::Protobuf::DescriptorPool.generated_pool.build do
|
7
|
+
add_message "google.ads.googleads.v0.enums.RecommendationTypeEnum" do
|
8
|
+
end
|
9
|
+
add_enum "google.ads.googleads.v0.enums.RecommendationTypeEnum.RecommendationType" do
|
10
|
+
value :UNSPECIFIED, 0
|
11
|
+
value :UNKNOWN, 1
|
12
|
+
value :CAMPAIGN_BUDGET, 2
|
13
|
+
value :KEYWORD, 3
|
14
|
+
value :TEXT_AD, 4
|
15
|
+
value :TARGET_CPA_OPT_IN, 5
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
module Google
|
20
|
+
module Ads
|
21
|
+
module Googleads
|
22
|
+
module V0
|
23
|
+
module Enums
|
24
|
+
RecommendationTypeEnum = Google::Protobuf::DescriptorPool.generated_pool.lookup("google.ads.googleads.v0.enums.RecommendationTypeEnum").msgclass
|
25
|
+
RecommendationTypeEnum::RecommendationType = Google::Protobuf::DescriptorPool.generated_pool.lookup("google.ads.googleads.v0.enums.RecommendationTypeEnum.RecommendationType").enummodule
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
# Generated by the protocol buffer compiler. DO NOT EDIT!
|
2
|
+
# source: google/ads/googleads/v0/enums/target_cpa_opt_in_recommendation_goal.proto
|
3
|
+
|
4
|
+
require 'google/protobuf'
|
5
|
+
|
6
|
+
Google::Protobuf::DescriptorPool.generated_pool.build do
|
7
|
+
add_message "google.ads.googleads.v0.enums.TargetCpaOptInRecommendationGoalEnum" do
|
8
|
+
end
|
9
|
+
add_enum "google.ads.googleads.v0.enums.TargetCpaOptInRecommendationGoalEnum.TargetCpaOptInRecommendationGoal" do
|
10
|
+
value :UNSPECIFIED, 0
|
11
|
+
value :UNKNOWN, 1
|
12
|
+
value :SAME_COST, 2
|
13
|
+
value :SAME_CONVERSIONS, 3
|
14
|
+
value :SAME_CPA, 4
|
15
|
+
value :CLOSEST_CPA, 5
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
module Google
|
20
|
+
module Ads
|
21
|
+
module Googleads
|
22
|
+
module V0
|
23
|
+
module Enums
|
24
|
+
TargetCpaOptInRecommendationGoalEnum = Google::Protobuf::DescriptorPool.generated_pool.lookup("google.ads.googleads.v0.enums.TargetCpaOptInRecommendationGoalEnum").msgclass
|
25
|
+
TargetCpaOptInRecommendationGoalEnum::TargetCpaOptInRecommendationGoal = Google::Protobuf::DescriptorPool.generated_pool.lookup("google.ads.googleads.v0.enums.TargetCpaOptInRecommendationGoalEnum.TargetCpaOptInRecommendationGoal").enummodule
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -137,6 +137,7 @@ Google::Protobuf::DescriptorPool.generated_pool.build do
|
|
137
137
|
value :CANNOT_DISABLE_CALL_CONVERSION_AND_SET_CONVERSION_TYPE_ID, 127
|
138
138
|
value :CANNOT_SET_PATH2_WITHOUT_PATH1, 128
|
139
139
|
value :MISSING_DYNAMIC_SEARCH_ADS_SETTING_DOMAIN_NAME, 129
|
140
|
+
value :INCOMPATIBLE_WITH_RESTRICTION_TYPE, 130
|
140
141
|
end
|
141
142
|
end
|
142
143
|
|
@@ -0,0 +1,28 @@
|
|
1
|
+
# Generated by the protocol buffer compiler. DO NOT EDIT!
|
2
|
+
# source: google/ads/googleads/v0/errors/ad_group_bid_modifier_error.proto
|
3
|
+
|
4
|
+
require 'google/protobuf'
|
5
|
+
|
6
|
+
Google::Protobuf::DescriptorPool.generated_pool.build do
|
7
|
+
add_message "google.ads.googleads.v0.errors.AdGroupBidModifierErrorEnum" do
|
8
|
+
end
|
9
|
+
add_enum "google.ads.googleads.v0.errors.AdGroupBidModifierErrorEnum.AdGroupBidModifierError" do
|
10
|
+
value :UNSPECIFIED, 0
|
11
|
+
value :UNKNOWN, 1
|
12
|
+
value :CRITERION_ID_NOT_SUPPORTED, 2
|
13
|
+
value :CANNOT_OVERRIDE_OPTED_OUT_CAMPAIGN_CRITERION_BID_MODIFIER, 3
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
module Google
|
18
|
+
module Ads
|
19
|
+
module Googleads
|
20
|
+
module V0
|
21
|
+
module Errors
|
22
|
+
AdGroupBidModifierErrorEnum = Google::Protobuf::DescriptorPool.generated_pool.lookup("google.ads.googleads.v0.errors.AdGroupBidModifierErrorEnum").msgclass
|
23
|
+
AdGroupBidModifierErrorEnum::AdGroupBidModifierError = Google::Protobuf::DescriptorPool.generated_pool.lookup("google.ads.googleads.v0.errors.AdGroupBidModifierErrorEnum.AdGroupBidModifierError").enummodule
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -25,15 +25,6 @@ Google::Protobuf::DescriptorPool.generated_pool.build do
|
|
25
25
|
value :INVALID_USER_STATUS, 15
|
26
26
|
value :CANNOT_ADD_CRITERIA_TYPE, 16
|
27
27
|
value :CANNOT_EXCLUDE_CRITERIA_TYPE, 17
|
28
|
-
value :INVALID_PRODUCT_PARTITION_HIERARCHY, 18
|
29
|
-
value :PRODUCT_PARTITION_UNIT_CANNOT_HAVE_CHILDREN, 19
|
30
|
-
value :PRODUCT_PARTITION_SUBDIVISION_REQUIRES_OTHERS_CASE, 20
|
31
|
-
value :PRODUCT_PARTITION_REQUIRES_SAME_DIMENSION_TYPE_AS_SIBLINGS, 21
|
32
|
-
value :PRODUCT_PARTITION_ALREADY_EXISTS, 22
|
33
|
-
value :PRODUCT_PARTITION_DOES_NOT_EXIST, 23
|
34
|
-
value :PRODUCT_PARTITION_CANNOT_BE_REMOVED, 24
|
35
|
-
value :INVALID_PRODUCT_PARTITION_TYPE, 25
|
36
|
-
value :PRODUCT_PARTITION_ADD_MAY_ONLY_USE_TEMP_ID, 26
|
37
28
|
value :CAMPAIGN_TYPE_NOT_COMPATIBLE_WITH_PARTIAL_FAILURE, 27
|
38
29
|
value :OPERATIONS_FOR_TOO_MANY_SHOPPING_ADGROUPS, 28
|
39
30
|
value :CANNOT_MODIFY_URL_FIELDS_WITH_DUPLICATE_ELEMENTS, 29
|
@@ -46,6 +37,15 @@ Google::Protobuf::DescriptorPool.generated_pool.build do
|
|
46
37
|
value :CANNOT_SET_BOTH_DESTINATION_URL_AND_TRACKING_URL_TEMPLATE, 36
|
47
38
|
value :FINAL_URLS_NOT_SUPPORTED_FOR_CRITERION_TYPE, 37
|
48
39
|
value :FINAL_MOBILE_URLS_NOT_SUPPORTED_FOR_CRITERION_TYPE, 38
|
40
|
+
value :INVALID_LISTING_GROUP_HIERARCHY, 39
|
41
|
+
value :LISTING_GROUP_UNIT_CANNOT_HAVE_CHILDREN, 40
|
42
|
+
value :LISTING_GROUP_SUBDIVISION_REQUIRES_OTHERS_CASE, 41
|
43
|
+
value :LISTING_GROUP_REQUIRES_SAME_DIMENSION_TYPE_AS_SIBLINGS, 42
|
44
|
+
value :LISTING_GROUP_ALREADY_EXISTS, 43
|
45
|
+
value :LISTING_GROUP_DOES_NOT_EXIST, 44
|
46
|
+
value :LISTING_GROUP_CANNOT_BE_REMOVED, 45
|
47
|
+
value :INVALID_LISTING_GROUP_TYPE, 46
|
48
|
+
value :LISTING_GROUP_ADD_MAY_ONLY_USE_TEMP_ID, 47
|
49
49
|
end
|
50
50
|
end
|
51
51
|
|