google-cloud-channel-v1 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (43) hide show
  1. checksums.yaml +7 -0
  2. data/.yardopts +12 -0
  3. data/AUTHENTICATION.md +169 -0
  4. data/LICENSE.md +203 -0
  5. data/README.md +75 -0
  6. data/lib/google-cloud-channel-v1.rb +21 -0
  7. data/lib/google/cloud/channel/v1.rb +38 -0
  8. data/lib/google/cloud/channel/v1/channel_partner_links_pb.rb +47 -0
  9. data/lib/google/cloud/channel/v1/cloud_channel_service.rb +70 -0
  10. data/lib/google/cloud/channel/v1/cloud_channel_service/client.rb +3498 -0
  11. data/lib/google/cloud/channel/v1/cloud_channel_service/credentials.rb +51 -0
  12. data/lib/google/cloud/channel/v1/cloud_channel_service/operations.rb +570 -0
  13. data/lib/google/cloud/channel/v1/cloud_channel_service/paths.rb +100 -0
  14. data/lib/google/cloud/channel/v1/common_pb.rb +76 -0
  15. data/lib/google/cloud/channel/v1/customers_pb.rb +48 -0
  16. data/lib/google/cloud/channel/v1/entitlements_pb.rb +110 -0
  17. data/lib/google/cloud/channel/v1/offers_pb.rb +142 -0
  18. data/lib/google/cloud/channel/v1/operations_pb.rb +38 -0
  19. data/lib/google/cloud/channel/v1/products_pb.rb +48 -0
  20. data/lib/google/cloud/channel/v1/service_pb.rb +331 -0
  21. data/lib/google/cloud/channel/v1/service_services_pb.rb +680 -0
  22. data/lib/google/cloud/channel/v1/version.rb +28 -0
  23. data/proto_docs/README.md +4 -0
  24. data/proto_docs/google/api/field_behavior.rb +59 -0
  25. data/proto_docs/google/api/resource.rb +283 -0
  26. data/proto_docs/google/cloud/channel/v1/channel_partner_links.rb +92 -0
  27. data/proto_docs/google/cloud/channel/v1/common.rb +155 -0
  28. data/proto_docs/google/cloud/channel/v1/customers.rb +111 -0
  29. data/proto_docs/google/cloud/channel/v1/entitlements.rb +255 -0
  30. data/proto_docs/google/cloud/channel/v1/offers.rb +344 -0
  31. data/proto_docs/google/cloud/channel/v1/operations.rb +74 -0
  32. data/proto_docs/google/cloud/channel/v1/products.rb +98 -0
  33. data/proto_docs/google/cloud/channel/v1/service.rb +1013 -0
  34. data/proto_docs/google/longrunning/operations.rb +150 -0
  35. data/proto_docs/google/protobuf/any.rb +138 -0
  36. data/proto_docs/google/protobuf/empty.rb +36 -0
  37. data/proto_docs/google/protobuf/field_mask.rb +229 -0
  38. data/proto_docs/google/protobuf/timestamp.rb +120 -0
  39. data/proto_docs/google/protobuf/wrappers.rb +121 -0
  40. data/proto_docs/google/rpc/status.rb +46 -0
  41. data/proto_docs/google/type/money.rb +43 -0
  42. data/proto_docs/google/type/postal_address.rb +135 -0
  43. metadata +225 -0
@@ -0,0 +1,344 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Copyright 2021 Google LLC
4
+ #
5
+ # Licensed under the Apache License, Version 2.0 (the "License");
6
+ # you may not use this file except in compliance with the License.
7
+ # You may obtain a copy of the License at
8
+ #
9
+ # https://www.apache.org/licenses/LICENSE-2.0
10
+ #
11
+ # Unless required by applicable law or agreed to in writing, software
12
+ # distributed under the License is distributed on an "AS IS" BASIS,
13
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ # See the License for the specific language governing permissions and
15
+ # limitations under the License.
16
+
17
+ # Auto-generated by gapic-generator-ruby. DO NOT EDIT!
18
+
19
+
20
+ module Google
21
+ module Cloud
22
+ module Channel
23
+ module V1
24
+ # Represents an offer made to resellers for purchase.
25
+ # An offer is associated with a {::Google::Cloud::Channel::V1::Sku Sku}, has a plan for payment, a price, and
26
+ # defines the constraints for buying.
27
+ # @!attribute [rw] name
28
+ # @return [::String]
29
+ # Resource Name of the Offer.
30
+ # Format: accounts/\\{account_id}/offers/\\{offer_id}
31
+ # @!attribute [rw] marketing_info
32
+ # @return [::Google::Cloud::Channel::V1::MarketingInfo]
33
+ # Marketing information for the Offer.
34
+ # @!attribute [rw] sku
35
+ # @return [::Google::Cloud::Channel::V1::Sku]
36
+ # SKU the offer is associated with.
37
+ # @!attribute [rw] plan
38
+ # @return [::Google::Cloud::Channel::V1::Plan]
39
+ # Describes the payment plan for the Offer.
40
+ # @!attribute [rw] constraints
41
+ # @return [::Google::Cloud::Channel::V1::Constraints]
42
+ # Constraints on transacting the Offer.
43
+ # @!attribute [rw] price_by_resources
44
+ # @return [::Array<::Google::Cloud::Channel::V1::PriceByResource>]
45
+ # Price for each monetizable resource type.
46
+ # @!attribute [rw] start_time
47
+ # @return [::Google::Protobuf::Timestamp]
48
+ # Start of the Offer validity time.
49
+ # @!attribute [r] end_time
50
+ # @return [::Google::Protobuf::Timestamp]
51
+ # Output only. End of the Offer validity time.
52
+ # @!attribute [rw] parameter_definitions
53
+ # @return [::Array<::Google::Cloud::Channel::V1::ParameterDefinition>]
54
+ # Parameters required to use current Offer to purchase.
55
+ class Offer
56
+ include ::Google::Protobuf::MessageExts
57
+ extend ::Google::Protobuf::MessageExts::ClassMethods
58
+ end
59
+
60
+ # Parameter's definition. Specifies what parameter is required to use the
61
+ # current Offer to purchase.
62
+ # @!attribute [rw] name
63
+ # @return [::String]
64
+ # Name of the parameter.
65
+ # @!attribute [rw] parameter_type
66
+ # @return [::Google::Cloud::Channel::V1::ParameterDefinition::ParameterType]
67
+ # Data type of the parameter. Minimal value, Maximum value and allowed values
68
+ # will use specified data type here.
69
+ # @!attribute [rw] min_value
70
+ # @return [::Google::Cloud::Channel::V1::Value]
71
+ # Minimal value of the parameter, if applicable. Inclusive. For example,
72
+ # minimal commitment when purchasing Anthos is 0.01.
73
+ # Applicable to INT64 and DOUBLE parameter types.
74
+ # @!attribute [rw] max_value
75
+ # @return [::Google::Cloud::Channel::V1::Value]
76
+ # Maximum value of the parameter, if applicable. Inclusive. For example,
77
+ # maximum seats when purchasing Google Workspace Business Standard.
78
+ # Applicable to INT64 and DOUBLE parameter types.
79
+ # @!attribute [rw] allowed_values
80
+ # @return [::Array<::Google::Cloud::Channel::V1::Value>]
81
+ # If not empty, parameter values must be drawn from this list.
82
+ # For example, [us-west1, us-west2, ...]
83
+ # Applicable to STRING parameter type.
84
+ # @!attribute [rw] optional
85
+ # @return [::Boolean]
86
+ # If set to true, parameter is optional to purchase this Offer.
87
+ class ParameterDefinition
88
+ include ::Google::Protobuf::MessageExts
89
+ extend ::Google::Protobuf::MessageExts::ClassMethods
90
+
91
+ # Data type of the parameter.
92
+ module ParameterType
93
+ # Not used.
94
+ PARAMETER_TYPE_UNSPECIFIED = 0
95
+
96
+ # Int64 type.
97
+ INT64 = 1
98
+
99
+ # String type.
100
+ STRING = 2
101
+
102
+ # Double type.
103
+ DOUBLE = 3
104
+ end
105
+ end
106
+
107
+ # Represents the constraints for buying the Offer.
108
+ # @!attribute [rw] customer_constraints
109
+ # @return [::Google::Cloud::Channel::V1::CustomerConstraints]
110
+ # Represents constraints required to purchase the Offer for a customer.
111
+ class Constraints
112
+ include ::Google::Protobuf::MessageExts
113
+ extend ::Google::Protobuf::MessageExts::ClassMethods
114
+ end
115
+
116
+ # Represents constraints required to purchase the Offer for a customer.
117
+ # @!attribute [rw] allowed_regions
118
+ # @return [::Array<::String>]
119
+ # Allowed geographical regions of the customer.
120
+ # @!attribute [rw] allowed_customer_types
121
+ # @return [::Array<::Google::Cloud::Channel::V1::CloudIdentityInfo::CustomerType>]
122
+ # Allowed Customer Type.
123
+ # @!attribute [rw] promotional_order_types
124
+ # @return [::Array<::Google::Cloud::Channel::V1::PromotionalOrderType>]
125
+ # Allowed Promotional Order Type. Present for Promotional offers.
126
+ class CustomerConstraints
127
+ include ::Google::Protobuf::MessageExts
128
+ extend ::Google::Protobuf::MessageExts::ClassMethods
129
+ end
130
+
131
+ # The payment plan for the Offer. Describes how to make a payment.
132
+ # @!attribute [rw] payment_plan
133
+ # @return [::Google::Cloud::Channel::V1::PaymentPlan]
134
+ # Describes how a reseller will be billed.
135
+ # @!attribute [rw] payment_type
136
+ # @return [::Google::Cloud::Channel::V1::PaymentType]
137
+ # Specifies when the payment needs to happen.
138
+ # @!attribute [rw] payment_cycle
139
+ # @return [::Google::Cloud::Channel::V1::Period]
140
+ # Describes how frequently the reseller will be billed, such as
141
+ # once per month.
142
+ # @!attribute [rw] trial_period
143
+ # @return [::Google::Cloud::Channel::V1::Period]
144
+ # Present for Offers with a trial period.
145
+ # For trial-only Offers, a paid service needs to start before the trial
146
+ # period ends for continued service.
147
+ # For Regular Offers with a trial period, the regular pricing goes into
148
+ # effect when trial period ends, or if paid service is started before the end
149
+ # of the trial period.
150
+ class Plan
151
+ include ::Google::Protobuf::MessageExts
152
+ extend ::Google::Protobuf::MessageExts::ClassMethods
153
+ end
154
+
155
+ # Represents price by resource type.
156
+ # @!attribute [rw] resource_type
157
+ # @return [::Google::Cloud::Channel::V1::ResourceType]
158
+ # Resource Type. Example: SEAT
159
+ # @!attribute [rw] price
160
+ # @return [::Google::Cloud::Channel::V1::Price]
161
+ # Price of the Offer. Present if there are no price phases.
162
+ # @!attribute [rw] price_phases
163
+ # @return [::Array<::Google::Cloud::Channel::V1::PricePhase>]
164
+ # Specifies the price by time range.
165
+ class PriceByResource
166
+ include ::Google::Protobuf::MessageExts
167
+ extend ::Google::Protobuf::MessageExts::ClassMethods
168
+ end
169
+
170
+ # Represents the price of the Offer.
171
+ # @!attribute [rw] base_price
172
+ # @return [::Google::Type::Money]
173
+ # Base price.
174
+ # @!attribute [rw] discount
175
+ # @return [::Float]
176
+ # Discount percentage, represented as decimal.
177
+ # For example, a 20% discount will be represent as 0.2.
178
+ # @!attribute [rw] effective_price
179
+ # @return [::Google::Type::Money]
180
+ # Effective Price after applying the discounts.
181
+ # @!attribute [rw] external_price_uri
182
+ # @return [::String]
183
+ # Link to external price list, such as link to Google Voice rate card.
184
+ class Price
185
+ include ::Google::Protobuf::MessageExts
186
+ extend ::Google::Protobuf::MessageExts::ClassMethods
187
+ end
188
+
189
+ # Specifies the price by the duration of months.
190
+ # For example, a 20% discount for the first six months, then a 10% discount
191
+ # starting on the seventh month.
192
+ # @!attribute [rw] period_type
193
+ # @return [::Google::Cloud::Channel::V1::PeriodType]
194
+ # Defines the phase period type.
195
+ # @!attribute [rw] first_period
196
+ # @return [::Integer]
197
+ # Defines first period for the phase.
198
+ # @!attribute [rw] last_period
199
+ # @return [::Integer]
200
+ # Defines first period for the phase.
201
+ # @!attribute [rw] price
202
+ # @return [::Google::Cloud::Channel::V1::Price]
203
+ # Price of the phase. Present if there are no price tiers.
204
+ # @!attribute [rw] price_tiers
205
+ # @return [::Array<::Google::Cloud::Channel::V1::PriceTier>]
206
+ # Price by the resource tiers.
207
+ class PricePhase
208
+ include ::Google::Protobuf::MessageExts
209
+ extend ::Google::Protobuf::MessageExts::ClassMethods
210
+ end
211
+
212
+ # Defines price at resource tier level.
213
+ # For example, an offer with following definition :
214
+ #
215
+ # * Tier 1: Provide 25% discount for all seats between 1 and 25.
216
+ # * Tier 2: Provide 10% discount for all seats between 26 and 100.
217
+ # * Tier 3: Provide flat 15% discount for all seats above 100.
218
+ #
219
+ # Each of these tiers is represented as a PriceTier.
220
+ # @!attribute [rw] first_resource
221
+ # @return [::Integer]
222
+ # First resource for which the tier price applies.
223
+ # @!attribute [rw] last_resource
224
+ # @return [::Integer]
225
+ # Last resource for which the tier price applies.
226
+ # @!attribute [rw] price
227
+ # @return [::Google::Cloud::Channel::V1::Price]
228
+ # Price of the tier.
229
+ class PriceTier
230
+ include ::Google::Protobuf::MessageExts
231
+ extend ::Google::Protobuf::MessageExts::ClassMethods
232
+ end
233
+
234
+ # Represents period in days/months/years.
235
+ # @!attribute [rw] duration
236
+ # @return [::Integer]
237
+ # Total duration of Period Type defined.
238
+ # @!attribute [rw] period_type
239
+ # @return [::Google::Cloud::Channel::V1::PeriodType]
240
+ # Period Type.
241
+ class Period
242
+ include ::Google::Protobuf::MessageExts
243
+ extend ::Google::Protobuf::MessageExts::ClassMethods
244
+ end
245
+
246
+ # Constraints type for Promotional offers.
247
+ module PromotionalOrderType
248
+ # Not used.
249
+ PROMOTIONAL_TYPE_UNSPECIFIED = 0
250
+
251
+ # Order used for new customers, trial conversions and upgrades.
252
+ NEW_UPGRADE = 1
253
+
254
+ # All orders for transferring an existing customer.
255
+ TRANSFER = 2
256
+
257
+ # Orders for modifying an existing customer's promotion on the same SKU.
258
+ PROMOTION_SWITCH = 3
259
+ end
260
+
261
+ # Describes how the reseller will be billed.
262
+ module PaymentPlan
263
+ # Not used.
264
+ PAYMENT_PLAN_UNSPECIFIED = 0
265
+
266
+ # Commitment.
267
+ COMMITMENT = 1
268
+
269
+ # No commitment.
270
+ FLEXIBLE = 2
271
+
272
+ # Free.
273
+ FREE = 3
274
+
275
+ # Trial.
276
+ TRIAL = 4
277
+
278
+ # Price and ordering not available through API.
279
+ OFFLINE = 5
280
+ end
281
+
282
+ # Specifies when the payment needs to happen.
283
+ module PaymentType
284
+ # Not used.
285
+ PAYMENT_TYPE_UNSPECIFIED = 0
286
+
287
+ # Prepay. Amount has to be paid before service is rendered.
288
+ PREPAY = 1
289
+
290
+ # Postpay. Reseller is charged at the end of the Payment cycle.
291
+ POSTPAY = 2
292
+ end
293
+
294
+ # Represents the type for a monetizable resource(any entity on which billing
295
+ # happens). For example, this could be MINUTES for Google Voice and GB for
296
+ # Google Drive. One SKU can map to multiple monetizable resources.
297
+ module ResourceType
298
+ # Not used.
299
+ RESOURCE_TYPE_UNSPECIFIED = 0
300
+
301
+ # Seat.
302
+ SEAT = 1
303
+
304
+ # Monthly active user.
305
+ MAU = 2
306
+
307
+ # GB (used for storage SKUs).
308
+ GB = 3
309
+
310
+ # Active licensed users(for Voice SKUs).
311
+ LICENSED_USER = 4
312
+
313
+ # Voice usage.
314
+ MINUTES = 5
315
+
316
+ # For IaaS SKUs like Google Cloud Platform, monetization is based on usage
317
+ # accrued on your billing account irrespective of the type of monetizable
318
+ # resource. This enum represents an aggregated resource/container for all
319
+ # usage SKUs on a billing account. Currently, only applicable to Google Cloud
320
+ # Platform.
321
+ IAAS_USAGE = 6
322
+
323
+ # For Google Cloud Platform subscriptions like Anthos or SAP.
324
+ SUBSCRIPTION = 7
325
+ end
326
+
327
+ # Period Type.
328
+ module PeriodType
329
+ # Not used.
330
+ PERIOD_TYPE_UNSPECIFIED = 0
331
+
332
+ # Day.
333
+ DAY = 1
334
+
335
+ # Month.
336
+ MONTH = 2
337
+
338
+ # Year.
339
+ YEAR = 3
340
+ end
341
+ end
342
+ end
343
+ end
344
+ end
@@ -0,0 +1,74 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Copyright 2021 Google LLC
4
+ #
5
+ # Licensed under the Apache License, Version 2.0 (the "License");
6
+ # you may not use this file except in compliance with the License.
7
+ # You may obtain a copy of the License at
8
+ #
9
+ # https://www.apache.org/licenses/LICENSE-2.0
10
+ #
11
+ # Unless required by applicable law or agreed to in writing, software
12
+ # distributed under the License is distributed on an "AS IS" BASIS,
13
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ # See the License for the specific language governing permissions and
15
+ # limitations under the License.
16
+
17
+ # Auto-generated by gapic-generator-ruby. DO NOT EDIT!
18
+
19
+
20
+ module Google
21
+ module Cloud
22
+ module Channel
23
+ module V1
24
+ # Provides contextual information about a {::Google::Longrunning::Operation google.longrunning.Operation}.
25
+ # @!attribute [rw] operation_type
26
+ # @return [::Google::Cloud::Channel::V1::OperationMetadata::OperationType]
27
+ # The RPC that initiated this Long Running Operation.
28
+ class OperationMetadata
29
+ include ::Google::Protobuf::MessageExts
30
+ extend ::Google::Protobuf::MessageExts::ClassMethods
31
+
32
+ # RPCs that return a Long Running Operation.
33
+ module OperationType
34
+ # Default value. This state doesn't show unless an error occurs.
35
+ OPERATION_TYPE_UNSPECIFIED = 0
36
+
37
+ # Long Running Operation was triggered by CreateEntitlement.
38
+ CREATE_ENTITLEMENT = 1
39
+
40
+ # Long Running Operation was triggered by ChangeRenewalSettings.
41
+ CHANGE_RENEWAL_SETTINGS = 3
42
+
43
+ # Long Running Operation was triggered by StartPaidService.
44
+ START_PAID_SERVICE = 5
45
+
46
+ # Long Running Operation was triggered by ActivateEntitlement.
47
+ ACTIVATE_ENTITLEMENT = 7
48
+
49
+ # Long Running Operation was triggered by SuspendEntitlement.
50
+ SUSPEND_ENTITLEMENT = 8
51
+
52
+ # Long Running Operation was triggered by CancelEntitlement.
53
+ CANCEL_ENTITLEMENT = 9
54
+
55
+ # Long Running Operation was triggered by TransferEntitlements.
56
+ TRANSFER_ENTITLEMENTS = 10
57
+
58
+ # Long Running Operation was triggered by TransferEntitlementsToGoogle.
59
+ TRANSFER_ENTITLEMENTS_TO_GOOGLE = 11
60
+
61
+ # Long Running Operation was triggered by ChangeOffer.
62
+ CHANGE_OFFER = 14
63
+
64
+ # Long Running Operation was triggered by ChangeParameters.
65
+ CHANGE_PARAMETERS = 15
66
+
67
+ # Long Running Operation was triggered by ProvisionCloudIdentity.
68
+ PROVISION_CLOUD_IDENTITY = 16
69
+ end
70
+ end
71
+ end
72
+ end
73
+ end
74
+ end
@@ -0,0 +1,98 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Copyright 2021 Google LLC
4
+ #
5
+ # Licensed under the Apache License, Version 2.0 (the "License");
6
+ # you may not use this file except in compliance with the License.
7
+ # You may obtain a copy of the License at
8
+ #
9
+ # https://www.apache.org/licenses/LICENSE-2.0
10
+ #
11
+ # Unless required by applicable law or agreed to in writing, software
12
+ # distributed under the License is distributed on an "AS IS" BASIS,
13
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ # See the License for the specific language governing permissions and
15
+ # limitations under the License.
16
+
17
+ # Auto-generated by gapic-generator-ruby. DO NOT EDIT!
18
+
19
+
20
+ module Google
21
+ module Cloud
22
+ module Channel
23
+ module V1
24
+ # A Product is the entity a customer uses when placing an order. For example,
25
+ # Google Workspace, Google Voice, etc.
26
+ # @!attribute [rw] name
27
+ # @return [::String]
28
+ # Resource Name of the Product.
29
+ # Format: products/\\{product_id}
30
+ # @!attribute [rw] marketing_info
31
+ # @return [::Google::Cloud::Channel::V1::MarketingInfo]
32
+ # Marketing information for the product.
33
+ class Product
34
+ include ::Google::Protobuf::MessageExts
35
+ extend ::Google::Protobuf::MessageExts::ClassMethods
36
+ end
37
+
38
+ # Represents a product's purchasable Stock Keeping Unit (SKU).
39
+ # SKUs represent the different variations of the product. For example, Google
40
+ # Workspace Business Standard and Google Workspace Business Plus are Google
41
+ # Workspace product SKUs.
42
+ # @!attribute [rw] name
43
+ # @return [::String]
44
+ # Resource Name of the SKU.
45
+ # Format: products/\\{product_id}/skus/\\{sku_id}
46
+ # @!attribute [rw] marketing_info
47
+ # @return [::Google::Cloud::Channel::V1::MarketingInfo]
48
+ # Marketing information for the SKU.
49
+ # @!attribute [rw] product
50
+ # @return [::Google::Cloud::Channel::V1::Product]
51
+ # Product the SKU is associated with.
52
+ class Sku
53
+ include ::Google::Protobuf::MessageExts
54
+ extend ::Google::Protobuf::MessageExts::ClassMethods
55
+ end
56
+
57
+ # Represents the marketing information for a Product, SKU or Offer.
58
+ # @!attribute [rw] display_name
59
+ # @return [::String]
60
+ # Human readable name.
61
+ # @!attribute [rw] description
62
+ # @return [::String]
63
+ # Human readable description. Description can contain HTML.
64
+ # @!attribute [rw] default_logo
65
+ # @return [::Google::Cloud::Channel::V1::Media]
66
+ # Default logo.
67
+ class MarketingInfo
68
+ include ::Google::Protobuf::MessageExts
69
+ extend ::Google::Protobuf::MessageExts::ClassMethods
70
+ end
71
+
72
+ # Represents media information.
73
+ # @!attribute [rw] title
74
+ # @return [::String]
75
+ # Title of the media.
76
+ # @!attribute [rw] content
77
+ # @return [::String]
78
+ # URL of the media.
79
+ # @!attribute [rw] type
80
+ # @return [::Google::Cloud::Channel::V1::MediaType]
81
+ # Type of the media.
82
+ class Media
83
+ include ::Google::Protobuf::MessageExts
84
+ extend ::Google::Protobuf::MessageExts::ClassMethods
85
+ end
86
+
87
+ # Type of media used.
88
+ module MediaType
89
+ # Not used.
90
+ MEDIA_TYPE_UNSPECIFIED = 0
91
+
92
+ # Type of image.
93
+ MEDIA_TYPE_IMAGE = 1
94
+ end
95
+ end
96
+ end
97
+ end
98
+ end