aws-sdk-groundstation 1.29.0 → 1.31.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 249b713bc7971a443e010439c89d67791aefbecaad5507fd5ef44bdcf1db267a
4
- data.tar.gz: 8517de08ffa7bd876519d9fffbb63530ccf47bfa15f0404282e9a31d47f0a5cb
3
+ metadata.gz: 4f81601bf76df148196ec209a859d1ecb84fd10bc3acd806cabf79b401fe3e5d
4
+ data.tar.gz: c0b6183670ea5b39f5072350fa76e1cb31e781bc0e068be14987cc3dc6b6d8a0
5
5
  SHA512:
6
- metadata.gz: c805ded350c3b7f76ace6124eaf7f6ab07c8e88f58aefb7f2e219510cf82666d864d4b4964fac7dd2e9cb8ee30ac3fcd62e77e80c107a337628292e7e04f1ea3
7
- data.tar.gz: d85e2ddaa7a55f466546f7d4af844b7aff03b2d524a79655b895f96ce331baf0b7d2c9b182371abf91031486c816c5f6606a735eaa91c03ed50fdf0946679aa0
6
+ metadata.gz: db2b0d6362d6b7df9c64ebf4281b3eb373c22111b873b7043ddfb5322c0e00a8a3b2ce6e7c9144e78f9140994e1a4787ec3f02883693da1f88cf5d1ada9c47df
7
+ data.tar.gz: 1c7569ad6d5e1def50be9bce16b426616d8b40aecc418a66b4369054db8e248111f8ffcd924098d41f21b1952476a96b321b8bf7785126f483faa5f0bc4a0c96
data/CHANGELOG.md CHANGED
@@ -1,6 +1,18 @@
1
1
  Unreleased Changes
2
2
  ------------------
3
3
 
4
+ 1.31.0 (2023-01-19)
5
+ ------------------
6
+
7
+ * Feature - Add configurable prepass and postpass times for DataflowEndpointGroup. Add Waiter to allow customers to wait for a contact that was reserved through ReserveContact
8
+
9
+ 1.30.0 (2023-01-18)
10
+ ------------------
11
+
12
+ * Feature - Code Generated Changes, see `./build_tools` or `aws-sdk-core`'s CHANGELOG.md for details.
13
+
14
+ * Issue - Replace runtime endpoint resolution approach with generated ruby code.
15
+
4
16
  1.29.0 (2022-11-09)
5
17
  ------------------
6
18
 
@@ -155,4 +167,4 @@ Unreleased Changes
155
167
  1.0.0 (2019-05-28)
156
168
  ------------------
157
169
 
158
- * Feature - Initial release of `aws-sdk-groundstation`.
170
+ * Feature - Initial release of `aws-sdk-groundstation`.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.29.0
1
+ 1.31.0
@@ -513,6 +513,16 @@ module Aws::GroundStation
513
513
  # When a contact uses multiple `DataflowEndpointConfig` objects, each
514
514
  # `Config` must match a `DataflowEndpoint` in the same group.
515
515
  #
516
+ # @option params [Integer] :contact_post_pass_duration_seconds
517
+ # Amount of time, in seconds, after a contact ends for the contact to
518
+ # remain in a `POSTPASS` state. A CloudWatch event is emitted when the
519
+ # contact enters and exits the `POSTPASS` state.
520
+ #
521
+ # @option params [Integer] :contact_pre_pass_duration_seconds
522
+ # Amount of time, in seconds, prior to contact start for the contact to
523
+ # remain in a `PREPASS` state. A CloudWatch event is emitted when the
524
+ # contact enters and exits the `PREPASS` state.
525
+ #
516
526
  # @option params [required, Array<Types::EndpointDetails>] :endpoint_details
517
527
  # Endpoint details of each endpoint in the dataflow endpoint group.
518
528
  #
@@ -526,6 +536,8 @@ module Aws::GroundStation
526
536
  # @example Request syntax with placeholder values
527
537
  #
528
538
  # resp = client.create_dataflow_endpoint_group({
539
+ # contact_post_pass_duration_seconds: 1,
540
+ # contact_pre_pass_duration_seconds: 1,
529
541
  # endpoint_details: [ # required
530
542
  # {
531
543
  # endpoint: {
@@ -921,6 +933,11 @@ module Aws::GroundStation
921
933
  # resp.tags #=> Hash
922
934
  # resp.tags["String"] #=> String
923
935
  #
936
+ #
937
+ # The following waiters are defined for this operation (see {Client#wait_until} for detailed usage):
938
+ #
939
+ # * contact_scheduled
940
+ #
924
941
  # @see http://docs.aws.amazon.com/goto/WebAPI/groundstation-2019-05-23/DescribeContact AWS API Documentation
925
942
  #
926
943
  # @overload describe_contact(params = {})
@@ -1061,6 +1078,8 @@ module Aws::GroundStation
1061
1078
  #
1062
1079
  # @return [Types::GetDataflowEndpointGroupResponse] Returns a {Seahorse::Client::Response response} object which responds to the following methods:
1063
1080
  #
1081
+ # * {Types::GetDataflowEndpointGroupResponse#contact_post_pass_duration_seconds #contact_post_pass_duration_seconds} => Integer
1082
+ # * {Types::GetDataflowEndpointGroupResponse#contact_pre_pass_duration_seconds #contact_pre_pass_duration_seconds} => Integer
1064
1083
  # * {Types::GetDataflowEndpointGroupResponse#dataflow_endpoint_group_arn #dataflow_endpoint_group_arn} => String
1065
1084
  # * {Types::GetDataflowEndpointGroupResponse#dataflow_endpoint_group_id #dataflow_endpoint_group_id} => String
1066
1085
  # * {Types::GetDataflowEndpointGroupResponse#endpoints_details #endpoints_details} => Array&lt;Types::EndpointDetails&gt;
@@ -1074,6 +1093,8 @@ module Aws::GroundStation
1074
1093
  #
1075
1094
  # @example Response structure
1076
1095
  #
1096
+ # resp.contact_post_pass_duration_seconds #=> Integer
1097
+ # resp.contact_pre_pass_duration_seconds #=> Integer
1077
1098
  # resp.dataflow_endpoint_group_arn #=> String
1078
1099
  # resp.dataflow_endpoint_group_id #=> String
1079
1100
  # resp.endpoints_details #=> Array
@@ -1950,14 +1971,127 @@ module Aws::GroundStation
1950
1971
  params: params,
1951
1972
  config: config)
1952
1973
  context[:gem_name] = 'aws-sdk-groundstation'
1953
- context[:gem_version] = '1.29.0'
1974
+ context[:gem_version] = '1.31.0'
1954
1975
  Seahorse::Client::Request.new(handlers, context)
1955
1976
  end
1956
1977
 
1978
+ # Polls an API operation until a resource enters a desired state.
1979
+ #
1980
+ # ## Basic Usage
1981
+ #
1982
+ # A waiter will call an API operation until:
1983
+ #
1984
+ # * It is successful
1985
+ # * It enters a terminal state
1986
+ # * It makes the maximum number of attempts
1987
+ #
1988
+ # In between attempts, the waiter will sleep.
1989
+ #
1990
+ # # polls in a loop, sleeping between attempts
1991
+ # client.wait_until(waiter_name, params)
1992
+ #
1993
+ # ## Configuration
1994
+ #
1995
+ # You can configure the maximum number of polling attempts, and the
1996
+ # delay (in seconds) between each polling attempt. You can pass
1997
+ # configuration as the final arguments hash.
1998
+ #
1999
+ # # poll for ~25 seconds
2000
+ # client.wait_until(waiter_name, params, {
2001
+ # max_attempts: 5,
2002
+ # delay: 5,
2003
+ # })
2004
+ #
2005
+ # ## Callbacks
2006
+ #
2007
+ # You can be notified before each polling attempt and before each
2008
+ # delay. If you throw `:success` or `:failure` from these callbacks,
2009
+ # it will terminate the waiter.
2010
+ #
2011
+ # started_at = Time.now
2012
+ # client.wait_until(waiter_name, params, {
2013
+ #
2014
+ # # disable max attempts
2015
+ # max_attempts: nil,
2016
+ #
2017
+ # # poll for 1 hour, instead of a number of attempts
2018
+ # before_wait: -> (attempts, response) do
2019
+ # throw :failure if Time.now - started_at > 3600
2020
+ # end
2021
+ # })
2022
+ #
2023
+ # ## Handling Errors
2024
+ #
2025
+ # When a waiter is unsuccessful, it will raise an error.
2026
+ # All of the failure errors extend from
2027
+ # {Aws::Waiters::Errors::WaiterFailed}.
2028
+ #
2029
+ # begin
2030
+ # client.wait_until(...)
2031
+ # rescue Aws::Waiters::Errors::WaiterFailed
2032
+ # # resource did not enter the desired state in time
2033
+ # end
2034
+ #
2035
+ # ## Valid Waiters
2036
+ #
2037
+ # The following table lists the valid waiter names, the operations they call,
2038
+ # and the default `:delay` and `:max_attempts` values.
2039
+ #
2040
+ # | waiter_name | params | :delay | :max_attempts |
2041
+ # | ----------------- | ------------------------- | -------- | ------------- |
2042
+ # | contact_scheduled | {Client#describe_contact} | 5 | 180 |
2043
+ #
2044
+ # @raise [Errors::FailureStateError] Raised when the waiter terminates
2045
+ # because the waiter has entered a state that it will not transition
2046
+ # out of, preventing success.
2047
+ #
2048
+ # @raise [Errors::TooManyAttemptsError] Raised when the configured
2049
+ # maximum number of attempts have been made, and the waiter is not
2050
+ # yet successful.
2051
+ #
2052
+ # @raise [Errors::UnexpectedError] Raised when an error is encounted
2053
+ # while polling for a resource that is not expected.
2054
+ #
2055
+ # @raise [Errors::NoSuchWaiterError] Raised when you request to wait
2056
+ # for an unknown state.
2057
+ #
2058
+ # @return [Boolean] Returns `true` if the waiter was successful.
2059
+ # @param [Symbol] waiter_name
2060
+ # @param [Hash] params ({})
2061
+ # @param [Hash] options ({})
2062
+ # @option options [Integer] :max_attempts
2063
+ # @option options [Integer] :delay
2064
+ # @option options [Proc] :before_attempt
2065
+ # @option options [Proc] :before_wait
2066
+ def wait_until(waiter_name, params = {}, options = {})
2067
+ w = waiter(waiter_name, options)
2068
+ yield(w.waiter) if block_given? # deprecated
2069
+ w.wait(params)
2070
+ end
2071
+
1957
2072
  # @api private
1958
2073
  # @deprecated
1959
2074
  def waiter_names
1960
- []
2075
+ waiters.keys
2076
+ end
2077
+
2078
+ private
2079
+
2080
+ # @param [Symbol] waiter_name
2081
+ # @param [Hash] options ({})
2082
+ def waiter(waiter_name, options = {})
2083
+ waiter_class = waiters[waiter_name]
2084
+ if waiter_class
2085
+ waiter_class.new(options.merge(client: self))
2086
+ else
2087
+ raise Aws::Waiters::Errors::NoSuchWaiterError.new(waiter_name, waiters.keys)
2088
+ end
2089
+ end
2090
+
2091
+ def waiters
2092
+ {
2093
+ contact_scheduled: Waiters::ContactScheduled
2094
+ }
1961
2095
  end
1962
2096
 
1963
2097
  class << self
@@ -47,6 +47,7 @@ module Aws::GroundStation
47
47
  DataflowEndpoint = Shapes::StructureShape.new(name: 'DataflowEndpoint')
48
48
  DataflowEndpointConfig = Shapes::StructureShape.new(name: 'DataflowEndpointConfig')
49
49
  DataflowEndpointGroupArn = Shapes::StringShape.new(name: 'DataflowEndpointGroupArn')
50
+ DataflowEndpointGroupDurationInSeconds = Shapes::IntegerShape.new(name: 'DataflowEndpointGroupDurationInSeconds')
50
51
  DataflowEndpointGroupIdResponse = Shapes::StructureShape.new(name: 'DataflowEndpointGroupIdResponse')
51
52
  DataflowEndpointGroupList = Shapes::ListShape.new(name: 'DataflowEndpointGroupList')
52
53
  DataflowEndpointListItem = Shapes::StructureShape.new(name: 'DataflowEndpointListItem')
@@ -263,6 +264,8 @@ module Aws::GroundStation
263
264
  CreateConfigRequest.add_member(:tags, Shapes::ShapeRef.new(shape: TagsMap, location_name: "tags"))
264
265
  CreateConfigRequest.struct_class = Types::CreateConfigRequest
265
266
 
267
+ CreateDataflowEndpointGroupRequest.add_member(:contact_post_pass_duration_seconds, Shapes::ShapeRef.new(shape: DataflowEndpointGroupDurationInSeconds, location_name: "contactPostPassDurationSeconds"))
268
+ CreateDataflowEndpointGroupRequest.add_member(:contact_pre_pass_duration_seconds, Shapes::ShapeRef.new(shape: DataflowEndpointGroupDurationInSeconds, location_name: "contactPrePassDurationSeconds"))
266
269
  CreateDataflowEndpointGroupRequest.add_member(:endpoint_details, Shapes::ShapeRef.new(shape: EndpointDetailsList, required: true, location_name: "endpointDetails"))
267
270
  CreateDataflowEndpointGroupRequest.add_member(:tags, Shapes::ShapeRef.new(shape: TagsMap, location_name: "tags"))
268
271
  CreateDataflowEndpointGroupRequest.struct_class = Types::CreateDataflowEndpointGroupRequest
@@ -458,6 +461,8 @@ module Aws::GroundStation
458
461
  GetDataflowEndpointGroupRequest.add_member(:dataflow_endpoint_group_id, Shapes::ShapeRef.new(shape: Uuid, required: true, location: "uri", location_name: "dataflowEndpointGroupId"))
459
462
  GetDataflowEndpointGroupRequest.struct_class = Types::GetDataflowEndpointGroupRequest
460
463
 
464
+ GetDataflowEndpointGroupResponse.add_member(:contact_post_pass_duration_seconds, Shapes::ShapeRef.new(shape: DataflowEndpointGroupDurationInSeconds, location_name: "contactPostPassDurationSeconds"))
465
+ GetDataflowEndpointGroupResponse.add_member(:contact_pre_pass_duration_seconds, Shapes::ShapeRef.new(shape: DataflowEndpointGroupDurationInSeconds, location_name: "contactPrePassDurationSeconds"))
461
466
  GetDataflowEndpointGroupResponse.add_member(:dataflow_endpoint_group_arn, Shapes::ShapeRef.new(shape: DataflowEndpointGroupArn, location_name: "dataflowEndpointGroupArn"))
462
467
  GetDataflowEndpointGroupResponse.add_member(:dataflow_endpoint_group_id, Shapes::ShapeRef.new(shape: Uuid, location_name: "dataflowEndpointGroupId"))
463
468
  GetDataflowEndpointGroupResponse.add_member(:endpoints_details, Shapes::ShapeRef.new(shape: EndpointDetailsList, location_name: "endpointsDetails"))
@@ -50,6 +50,9 @@ module Aws::GroundStation
50
50
 
51
51
  def initialize(options = {})
52
52
  self[:region] = options[:region]
53
+ if self[:region].nil?
54
+ raise ArgumentError, "Missing required EndpointParameter: :region"
55
+ end
53
56
  self[:use_dual_stack] = options[:use_dual_stack]
54
57
  self[:use_dual_stack] = false if self[:use_dual_stack].nil?
55
58
  if self[:use_dual_stack].nil?
@@ -9,104 +9,43 @@
9
9
 
10
10
  module Aws::GroundStation
11
11
  class EndpointProvider
12
- def initialize(rule_set = nil)
13
- @@rule_set ||= begin
14
- endpoint_rules = Aws::Json.load(Base64.decode64(RULES))
15
- Aws::Endpoints::RuleSet.new(
16
- version: endpoint_rules['version'],
17
- service_id: endpoint_rules['serviceId'],
18
- parameters: endpoint_rules['parameters'],
19
- rules: endpoint_rules['rules']
20
- )
12
+ def resolve_endpoint(parameters)
13
+ region = parameters.region
14
+ use_dual_stack = parameters.use_dual_stack
15
+ use_fips = parameters.use_fips
16
+ endpoint = parameters.endpoint
17
+ if (partition_result = Aws::Endpoints::Matchers.aws_partition(region))
18
+ if Aws::Endpoints::Matchers.set?(endpoint)
19
+ if Aws::Endpoints::Matchers.boolean_equals?(use_fips, true)
20
+ raise ArgumentError, "Invalid Configuration: FIPS and custom endpoint are not supported"
21
+ end
22
+ if Aws::Endpoints::Matchers.boolean_equals?(use_dual_stack, true)
23
+ raise ArgumentError, "Invalid Configuration: Dualstack and custom endpoint are not supported"
24
+ end
25
+ return Aws::Endpoints::Endpoint.new(url: endpoint, headers: {}, properties: {})
26
+ end
27
+ if Aws::Endpoints::Matchers.boolean_equals?(use_fips, true) && Aws::Endpoints::Matchers.boolean_equals?(use_dual_stack, true)
28
+ if Aws::Endpoints::Matchers.boolean_equals?(true, Aws::Endpoints::Matchers.attr(partition_result, "supportsFIPS")) && Aws::Endpoints::Matchers.boolean_equals?(true, Aws::Endpoints::Matchers.attr(partition_result, "supportsDualStack"))
29
+ return Aws::Endpoints::Endpoint.new(url: "https://groundstation-fips.#{region}.#{partition_result['dualStackDnsSuffix']}", headers: {}, properties: {})
30
+ end
31
+ raise ArgumentError, "FIPS and DualStack are enabled, but this partition does not support one or both"
32
+ end
33
+ if Aws::Endpoints::Matchers.boolean_equals?(use_fips, true)
34
+ if Aws::Endpoints::Matchers.boolean_equals?(true, Aws::Endpoints::Matchers.attr(partition_result, "supportsFIPS"))
35
+ return Aws::Endpoints::Endpoint.new(url: "https://groundstation-fips.#{region}.#{partition_result['dnsSuffix']}", headers: {}, properties: {})
36
+ end
37
+ raise ArgumentError, "FIPS is enabled but this partition does not support FIPS"
38
+ end
39
+ if Aws::Endpoints::Matchers.boolean_equals?(use_dual_stack, true)
40
+ if Aws::Endpoints::Matchers.boolean_equals?(true, Aws::Endpoints::Matchers.attr(partition_result, "supportsDualStack"))
41
+ return Aws::Endpoints::Endpoint.new(url: "https://groundstation.#{region}.#{partition_result['dualStackDnsSuffix']}", headers: {}, properties: {})
42
+ end
43
+ raise ArgumentError, "DualStack is enabled but this partition does not support DualStack"
44
+ end
45
+ return Aws::Endpoints::Endpoint.new(url: "https://groundstation.#{region}.#{partition_result['dnsSuffix']}", headers: {}, properties: {})
21
46
  end
22
- @provider = Aws::Endpoints::RulesProvider.new(rule_set || @@rule_set)
23
- end
47
+ raise ArgumentError, 'No endpoint could be resolved'
24
48
 
25
- def resolve_endpoint(parameters)
26
- @provider.resolve_endpoint(parameters)
27
49
  end
28
-
29
- # @api private
30
- RULES = <<-JSON
31
- eyJ2ZXJzaW9uIjoiMS4wIiwicGFyYW1ldGVycyI6eyJSZWdpb24iOnsiYnVp
32
- bHRJbiI6IkFXUzo6UmVnaW9uIiwicmVxdWlyZWQiOmZhbHNlLCJkb2N1bWVu
33
- dGF0aW9uIjoiVGhlIEFXUyByZWdpb24gdXNlZCB0byBkaXNwYXRjaCB0aGUg
34
- cmVxdWVzdC4iLCJ0eXBlIjoiU3RyaW5nIn0sIlVzZUR1YWxTdGFjayI6eyJi
35
- dWlsdEluIjoiQVdTOjpVc2VEdWFsU3RhY2siLCJyZXF1aXJlZCI6dHJ1ZSwi
36
- ZGVmYXVsdCI6ZmFsc2UsImRvY3VtZW50YXRpb24iOiJXaGVuIHRydWUsIHVz
37
- ZSB0aGUgZHVhbC1zdGFjayBlbmRwb2ludC4gSWYgdGhlIGNvbmZpZ3VyZWQg
38
- ZW5kcG9pbnQgZG9lcyBub3Qgc3VwcG9ydCBkdWFsLXN0YWNrLCBkaXNwYXRj
39
- aGluZyB0aGUgcmVxdWVzdCBNQVkgcmV0dXJuIGFuIGVycm9yLiIsInR5cGUi
40
- OiJCb29sZWFuIn0sIlVzZUZJUFMiOnsiYnVpbHRJbiI6IkFXUzo6VXNlRklQ
41
- UyIsInJlcXVpcmVkIjp0cnVlLCJkZWZhdWx0IjpmYWxzZSwiZG9jdW1lbnRh
42
- dGlvbiI6IldoZW4gdHJ1ZSwgc2VuZCB0aGlzIHJlcXVlc3QgdG8gdGhlIEZJ
43
- UFMtY29tcGxpYW50IHJlZ2lvbmFsIGVuZHBvaW50LiBJZiB0aGUgY29uZmln
44
- dXJlZCBlbmRwb2ludCBkb2VzIG5vdCBoYXZlIGEgRklQUyBjb21wbGlhbnQg
45
- ZW5kcG9pbnQsIGRpc3BhdGNoaW5nIHRoZSByZXF1ZXN0IHdpbGwgcmV0dXJu
46
- IGFuIGVycm9yLiIsInR5cGUiOiJCb29sZWFuIn0sIkVuZHBvaW50Ijp7ImJ1
47
- aWx0SW4iOiJTREs6OkVuZHBvaW50IiwicmVxdWlyZWQiOmZhbHNlLCJkb2N1
48
- bWVudGF0aW9uIjoiT3ZlcnJpZGUgdGhlIGVuZHBvaW50IHVzZWQgdG8gc2Vu
49
- ZCB0aGlzIHJlcXVlc3QiLCJ0eXBlIjoiU3RyaW5nIn19LCJydWxlcyI6W3si
50
- Y29uZGl0aW9ucyI6W3siZm4iOiJhd3MucGFydGl0aW9uIiwiYXJndiI6W3si
51
- cmVmIjoiUmVnaW9uIn1dLCJhc3NpZ24iOiJQYXJ0aXRpb25SZXN1bHQifV0s
52
- InR5cGUiOiJ0cmVlIiwicnVsZXMiOlt7ImNvbmRpdGlvbnMiOlt7ImZuIjoi
53
- aXNTZXQiLCJhcmd2IjpbeyJyZWYiOiJFbmRwb2ludCJ9XX0seyJmbiI6InBh
54
- cnNlVVJMIiwiYXJndiI6W3sicmVmIjoiRW5kcG9pbnQifV0sImFzc2lnbiI6
55
- InVybCJ9XSwidHlwZSI6InRyZWUiLCJydWxlcyI6W3siY29uZGl0aW9ucyI6
56
- W3siZm4iOiJib29sZWFuRXF1YWxzIiwiYXJndiI6W3sicmVmIjoiVXNlRklQ
57
- UyJ9LHRydWVdfV0sImVycm9yIjoiSW52YWxpZCBDb25maWd1cmF0aW9uOiBG
58
- SVBTIGFuZCBjdXN0b20gZW5kcG9pbnQgYXJlIG5vdCBzdXBwb3J0ZWQiLCJ0
59
- eXBlIjoiZXJyb3IifSx7ImNvbmRpdGlvbnMiOltdLCJ0eXBlIjoidHJlZSIs
60
- InJ1bGVzIjpbeyJjb25kaXRpb25zIjpbeyJmbiI6ImJvb2xlYW5FcXVhbHMi
61
- LCJhcmd2IjpbeyJyZWYiOiJVc2VEdWFsU3RhY2sifSx0cnVlXX1dLCJlcnJv
62
- ciI6IkludmFsaWQgQ29uZmlndXJhdGlvbjogRHVhbHN0YWNrIGFuZCBjdXN0
63
- b20gZW5kcG9pbnQgYXJlIG5vdCBzdXBwb3J0ZWQiLCJ0eXBlIjoiZXJyb3Ii
64
- fSx7ImNvbmRpdGlvbnMiOltdLCJlbmRwb2ludCI6eyJ1cmwiOnsicmVmIjoi
65
- RW5kcG9pbnQifSwicHJvcGVydGllcyI6e30sImhlYWRlcnMiOnt9fSwidHlw
66
- ZSI6ImVuZHBvaW50In1dfV19LHsiY29uZGl0aW9ucyI6W3siZm4iOiJib29s
67
- ZWFuRXF1YWxzIiwiYXJndiI6W3sicmVmIjoiVXNlRklQUyJ9LHRydWVdfSx7
68
- ImZuIjoiYm9vbGVhbkVxdWFscyIsImFyZ3YiOlt7InJlZiI6IlVzZUR1YWxT
69
- dGFjayJ9LHRydWVdfV0sInR5cGUiOiJ0cmVlIiwicnVsZXMiOlt7ImNvbmRp
70
- dGlvbnMiOlt7ImZuIjoiYm9vbGVhbkVxdWFscyIsImFyZ3YiOlt0cnVlLHsi
71
- Zm4iOiJnZXRBdHRyIiwiYXJndiI6W3sicmVmIjoiUGFydGl0aW9uUmVzdWx0
72
- In0sInN1cHBvcnRzRklQUyJdfV19LHsiZm4iOiJib29sZWFuRXF1YWxzIiwi
73
- YXJndiI6W3RydWUseyJmbiI6ImdldEF0dHIiLCJhcmd2IjpbeyJyZWYiOiJQ
74
- YXJ0aXRpb25SZXN1bHQifSwic3VwcG9ydHNEdWFsU3RhY2siXX1dfV0sInR5
75
- cGUiOiJ0cmVlIiwicnVsZXMiOlt7ImNvbmRpdGlvbnMiOltdLCJlbmRwb2lu
76
- dCI6eyJ1cmwiOiJodHRwczovL2dyb3VuZHN0YXRpb24tZmlwcy57UmVnaW9u
77
- fS57UGFydGl0aW9uUmVzdWx0I2R1YWxTdGFja0Ruc1N1ZmZpeH0iLCJwcm9w
78
- ZXJ0aWVzIjp7fSwiaGVhZGVycyI6e319LCJ0eXBlIjoiZW5kcG9pbnQifV19
79
- LHsiY29uZGl0aW9ucyI6W10sImVycm9yIjoiRklQUyBhbmQgRHVhbFN0YWNr
80
- IGFyZSBlbmFibGVkLCBidXQgdGhpcyBwYXJ0aXRpb24gZG9lcyBub3Qgc3Vw
81
- cG9ydCBvbmUgb3IgYm90aCIsInR5cGUiOiJlcnJvciJ9XX0seyJjb25kaXRp
82
- b25zIjpbeyJmbiI6ImJvb2xlYW5FcXVhbHMiLCJhcmd2IjpbeyJyZWYiOiJV
83
- c2VGSVBTIn0sdHJ1ZV19XSwidHlwZSI6InRyZWUiLCJydWxlcyI6W3siY29u
84
- ZGl0aW9ucyI6W3siZm4iOiJib29sZWFuRXF1YWxzIiwiYXJndiI6W3RydWUs
85
- eyJmbiI6ImdldEF0dHIiLCJhcmd2IjpbeyJyZWYiOiJQYXJ0aXRpb25SZXN1
86
- bHQifSwic3VwcG9ydHNGSVBTIl19XX1dLCJ0eXBlIjoidHJlZSIsInJ1bGVz
87
- IjpbeyJjb25kaXRpb25zIjpbXSwidHlwZSI6InRyZWUiLCJydWxlcyI6W3si
88
- Y29uZGl0aW9ucyI6W10sImVuZHBvaW50Ijp7InVybCI6Imh0dHBzOi8vZ3Jv
89
- dW5kc3RhdGlvbi1maXBzLntSZWdpb259LntQYXJ0aXRpb25SZXN1bHQjZG5z
90
- U3VmZml4fSIsInByb3BlcnRpZXMiOnt9LCJoZWFkZXJzIjp7fX0sInR5cGUi
91
- OiJlbmRwb2ludCJ9XX1dfSx7ImNvbmRpdGlvbnMiOltdLCJlcnJvciI6IkZJ
92
- UFMgaXMgZW5hYmxlZCBidXQgdGhpcyBwYXJ0aXRpb24gZG9lcyBub3Qgc3Vw
93
- cG9ydCBGSVBTIiwidHlwZSI6ImVycm9yIn1dfSx7ImNvbmRpdGlvbnMiOlt7
94
- ImZuIjoiYm9vbGVhbkVxdWFscyIsImFyZ3YiOlt7InJlZiI6IlVzZUR1YWxT
95
- dGFjayJ9LHRydWVdfV0sInR5cGUiOiJ0cmVlIiwicnVsZXMiOlt7ImNvbmRp
96
- dGlvbnMiOlt7ImZuIjoiYm9vbGVhbkVxdWFscyIsImFyZ3YiOlt0cnVlLHsi
97
- Zm4iOiJnZXRBdHRyIiwiYXJndiI6W3sicmVmIjoiUGFydGl0aW9uUmVzdWx0
98
- In0sInN1cHBvcnRzRHVhbFN0YWNrIl19XX1dLCJ0eXBlIjoidHJlZSIsInJ1
99
- bGVzIjpbeyJjb25kaXRpb25zIjpbXSwiZW5kcG9pbnQiOnsidXJsIjoiaHR0
100
- cHM6Ly9ncm91bmRzdGF0aW9uLntSZWdpb259LntQYXJ0aXRpb25SZXN1bHQj
101
- ZHVhbFN0YWNrRG5zU3VmZml4fSIsInByb3BlcnRpZXMiOnt9LCJoZWFkZXJz
102
- Ijp7fX0sInR5cGUiOiJlbmRwb2ludCJ9XX0seyJjb25kaXRpb25zIjpbXSwi
103
- ZXJyb3IiOiJEdWFsU3RhY2sgaXMgZW5hYmxlZCBidXQgdGhpcyBwYXJ0aXRp
104
- b24gZG9lcyBub3Qgc3VwcG9ydCBEdWFsU3RhY2siLCJ0eXBlIjoiZXJyb3Ii
105
- fV19LHsiY29uZGl0aW9ucyI6W10sImVuZHBvaW50Ijp7InVybCI6Imh0dHBz
106
- Oi8vZ3JvdW5kc3RhdGlvbi57UmVnaW9ufS57UGFydGl0aW9uUmVzdWx0I2Ru
107
- c1N1ZmZpeH0iLCJwcm9wZXJ0aWVzIjp7fSwiaGVhZGVycyI6e319LCJ0eXBl
108
- IjoiZW5kcG9pbnQifV19XX0=
109
-
110
- JSON
111
50
  end
112
51
  end