aws-sdk-greengrassv2 1.21.0 → 1.23.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 9a5674095e890e5469b3e037e8ac1c1da9fe6d609617ee3538d329e87391e825
4
- data.tar.gz: 1208c120886f0aaf9cf2a6fc95bf99e4226f5172f0ee8d099985c3efecb41985
3
+ metadata.gz: 897013abd74bc3f7aa7eb01f7a33de70f3e002cfebd601760dab423d0c227a3c
4
+ data.tar.gz: b891dcce984d1ece9bc5d873f50ee307181245e82ae7fa8f9ad9c6273f0ff0ad
5
5
  SHA512:
6
- metadata.gz: 9eed6c5953f30430276fd50297bb03b955a69e28bde5d6762d068422e15f2e24798e100679b5fc3a6b05049e973cebf3ae2ea6d6bfba2c4ecc142c7a5ab04aa0
7
- data.tar.gz: 417ee4a0cc5a3eebc8bd01f8ab52dbb33e18fa25dd9d20e77434729bc54322cbb19fa91c52114c26c1495cbeb6956c70c74ac8fe462fcb99f8bba4814fb93456
6
+ metadata.gz: 02d4468195239e462f577c3eb3f22e896b9c1b5de990b4273ed0a0592f3bf3adfceee83e11ce0c5c4374b4798eb6f208a054a639b1886bb42dfca27728a685a5
7
+ data.tar.gz: 3792d0623466925c25ab2c97487993260022f15a23504bde7abc75e8617d8e7bec9bdec77a627144d9c44fa04dbf289bfa16369ea7d050764073e36b7113f924
data/CHANGELOG.md CHANGED
@@ -1,6 +1,18 @@
1
1
  Unreleased Changes
2
2
  ------------------
3
3
 
4
+ 1.23.0 (2023-01-18)
5
+ ------------------
6
+
7
+ * Feature - Code Generated Changes, see `./build_tools` or `aws-sdk-core`'s CHANGELOG.md for details.
8
+
9
+ * Issue - Replace runtime endpoint resolution approach with generated ruby code.
10
+
11
+ 1.22.0 (2022-11-15)
12
+ ------------------
13
+
14
+ * Feature - Adds new parent target ARN paramater to CreateDeployment, GetDeployment, and ListDeployments APIs for the new subdeployments feature.
15
+
4
16
  1.21.0 (2022-10-25)
5
17
  ------------------
6
18
 
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.21.0
1
+ 1.23.0
@@ -756,7 +756,8 @@ module Aws::GreengrassV2
756
756
  # [1]: https://docs.aws.amazon.com/greengrass/v2/developerguide/create-deployments.html
757
757
  #
758
758
  # @option params [required, String] :target_arn
759
- # The [ARN][1] of the target IoT thing or thing group.
759
+ # The [ARN][1] of the target IoT thing or thing group. When creating a
760
+ # subdeployment, the targetARN can only be a thing group.
760
761
  #
761
762
  #
762
763
  #
@@ -779,6 +780,13 @@ module Aws::GreengrassV2
779
780
  # The deployment policies for the deployment. These policies define how
780
781
  # the deployment updates components and handles failure.
781
782
  #
783
+ # @option params [String] :parent_target_arn
784
+ # The parent deployment's target [ARN][1] within a subdeployment.
785
+ #
786
+ #
787
+ #
788
+ # [1]: https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html
789
+ #
782
790
  # @option params [Hash<String,String>] :tags
783
791
  # A list of key-value pairs that contain metadata for the resource. For
784
792
  # more information, see [Tag your resources][1] in the *IoT Greengrass
@@ -865,6 +873,7 @@ module Aws::GreengrassV2
865
873
  # timeout_in_seconds: 1,
866
874
  # },
867
875
  # },
876
+ # parent_target_arn: "ThingGroupARN",
868
877
  # tags: {
869
878
  # "TagKey" => "TagValue",
870
879
  # },
@@ -1293,6 +1302,7 @@ module Aws::GreengrassV2
1293
1302
  # * {Types::GetDeploymentResponse#iot_job_configuration #iot_job_configuration} => Types::DeploymentIoTJobConfiguration
1294
1303
  # * {Types::GetDeploymentResponse#creation_timestamp #creation_timestamp} => Time
1295
1304
  # * {Types::GetDeploymentResponse#is_latest_for_target #is_latest_for_target} => Boolean
1305
+ # * {Types::GetDeploymentResponse#parent_target_arn #parent_target_arn} => String
1296
1306
  # * {Types::GetDeploymentResponse#tags #tags} => Hash&lt;String,String&gt;
1297
1307
  #
1298
1308
  # @example Request syntax with placeholder values
@@ -1336,6 +1346,7 @@ module Aws::GreengrassV2
1336
1346
  # resp.iot_job_configuration.timeout_config.in_progress_timeout_in_minutes #=> Integer
1337
1347
  # resp.creation_timestamp #=> Time
1338
1348
  # resp.is_latest_for_target #=> Boolean
1349
+ # resp.parent_target_arn #=> String
1339
1350
  # resp.tags #=> Hash
1340
1351
  # resp.tags["TagKey"] #=> String
1341
1352
  #
@@ -1634,6 +1645,13 @@ module Aws::GreengrassV2
1634
1645
  #
1635
1646
  # Default: `LATEST_ONLY`
1636
1647
  #
1648
+ # @option params [String] :parent_target_arn
1649
+ # The parent deployment's target [ARN][1] within a subdeployment.
1650
+ #
1651
+ #
1652
+ #
1653
+ # [1]: https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html
1654
+ #
1637
1655
  # @option params [Integer] :max_results
1638
1656
  # The maximum number of results to be returned per paginated request.
1639
1657
  #
@@ -1652,6 +1670,7 @@ module Aws::GreengrassV2
1652
1670
  # resp = client.list_deployments({
1653
1671
  # target_arn: "TargetARN",
1654
1672
  # history_filter: "ALL", # accepts ALL, LATEST_ONLY
1673
+ # parent_target_arn: "ThingGroupARN",
1655
1674
  # max_results: 1,
1656
1675
  # next_token: "NextTokenString",
1657
1676
  # })
@@ -1666,6 +1685,7 @@ module Aws::GreengrassV2
1666
1685
  # resp.deployments[0].creation_timestamp #=> Time
1667
1686
  # resp.deployments[0].deployment_status #=> String, one of "ACTIVE", "COMPLETED", "CANCELED", "FAILED", "INACTIVE"
1668
1687
  # resp.deployments[0].is_latest_for_target #=> Boolean
1688
+ # resp.deployments[0].parent_target_arn #=> String
1669
1689
  # resp.next_token #=> String
1670
1690
  #
1671
1691
  # @see http://docs.aws.amazon.com/goto/WebAPI/greengrassv2-2020-11-30/ListDeployments AWS API Documentation
@@ -2072,7 +2092,7 @@ module Aws::GreengrassV2
2072
2092
  params: params,
2073
2093
  config: config)
2074
2094
  context[:gem_name] = 'aws-sdk-greengrassv2'
2075
- context[:gem_version] = '1.21.0'
2095
+ context[:gem_version] = '1.23.0'
2076
2096
  Seahorse::Client::Request.new(handlers, context)
2077
2097
  end
2078
2098
 
@@ -380,6 +380,7 @@ module Aws::GreengrassV2
380
380
  CreateDeploymentRequest.add_member(:components, Shapes::ShapeRef.new(shape: ComponentDeploymentSpecifications, location_name: "components"))
381
381
  CreateDeploymentRequest.add_member(:iot_job_configuration, Shapes::ShapeRef.new(shape: DeploymentIoTJobConfiguration, location_name: "iotJobConfiguration"))
382
382
  CreateDeploymentRequest.add_member(:deployment_policies, Shapes::ShapeRef.new(shape: DeploymentPolicies, location_name: "deploymentPolicies"))
383
+ CreateDeploymentRequest.add_member(:parent_target_arn, Shapes::ShapeRef.new(shape: ThingGroupARN, location_name: "parentTargetArn"))
383
384
  CreateDeploymentRequest.add_member(:tags, Shapes::ShapeRef.new(shape: TagMap, location_name: "tags"))
384
385
  CreateDeploymentRequest.add_member(:client_token, Shapes::ShapeRef.new(shape: ClientTokenString, location_name: "clientToken", metadata: {"idempotencyToken"=>true}))
385
386
  CreateDeploymentRequest.struct_class = Types::CreateDeploymentRequest
@@ -405,6 +406,7 @@ module Aws::GreengrassV2
405
406
  Deployment.add_member(:creation_timestamp, Shapes::ShapeRef.new(shape: Timestamp, location_name: "creationTimestamp"))
406
407
  Deployment.add_member(:deployment_status, Shapes::ShapeRef.new(shape: DeploymentStatus, location_name: "deploymentStatus"))
407
408
  Deployment.add_member(:is_latest_for_target, Shapes::ShapeRef.new(shape: IsLatestForTarget, location_name: "isLatestForTarget"))
409
+ Deployment.add_member(:parent_target_arn, Shapes::ShapeRef.new(shape: ThingGroupARN, location_name: "parentTargetArn"))
408
410
  Deployment.struct_class = Types::Deployment
409
411
 
410
412
  DeploymentComponentUpdatePolicy.add_member(:timeout_in_seconds, Shapes::ShapeRef.new(shape: OptionalInteger, location_name: "timeoutInSeconds", metadata: {"box"=>true}))
@@ -530,6 +532,7 @@ module Aws::GreengrassV2
530
532
  GetDeploymentResponse.add_member(:iot_job_configuration, Shapes::ShapeRef.new(shape: DeploymentIoTJobConfiguration, location_name: "iotJobConfiguration"))
531
533
  GetDeploymentResponse.add_member(:creation_timestamp, Shapes::ShapeRef.new(shape: Timestamp, location_name: "creationTimestamp"))
532
534
  GetDeploymentResponse.add_member(:is_latest_for_target, Shapes::ShapeRef.new(shape: IsLatestForTarget, location_name: "isLatestForTarget"))
535
+ GetDeploymentResponse.add_member(:parent_target_arn, Shapes::ShapeRef.new(shape: ThingGroupARN, location_name: "parentTargetArn"))
533
536
  GetDeploymentResponse.add_member(:tags, Shapes::ShapeRef.new(shape: TagMap, location_name: "tags"))
534
537
  GetDeploymentResponse.struct_class = Types::GetDeploymentResponse
535
538
 
@@ -681,6 +684,7 @@ module Aws::GreengrassV2
681
684
 
682
685
  ListDeploymentsRequest.add_member(:target_arn, Shapes::ShapeRef.new(shape: TargetARN, location: "querystring", location_name: "targetArn"))
683
686
  ListDeploymentsRequest.add_member(:history_filter, Shapes::ShapeRef.new(shape: DeploymentHistoryFilter, location: "querystring", location_name: "historyFilter"))
687
+ ListDeploymentsRequest.add_member(:parent_target_arn, Shapes::ShapeRef.new(shape: ThingGroupARN, location: "querystring", location_name: "parentTargetArn"))
684
688
  ListDeploymentsRequest.add_member(:max_results, Shapes::ShapeRef.new(shape: DefaultMaxResults, location: "querystring", location_name: "maxResults", metadata: {"box"=>true}))
685
689
  ListDeploymentsRequest.add_member(:next_token, Shapes::ShapeRef.new(shape: NextTokenString, location: "querystring", location_name: "nextToken", metadata: {"box"=>true}))
686
690
  ListDeploymentsRequest.struct_class = Types::ListDeploymentsRequest
@@ -9,114 +9,49 @@
9
9
 
10
10
  module Aws::GreengrassV2
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) && (url = Aws::Endpoints::Matchers.parse_url(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://greengrass-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://greengrass-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://greengrass.#{region}.#{partition_result['dualStackDnsSuffix']}", headers: {}, properties: {})
42
+ end
43
+ raise ArgumentError, "DualStack is enabled but this partition does not support DualStack"
44
+ end
45
+ if Aws::Endpoints::Matchers.string_equals?(region, "dataplane-us-gov-east-1")
46
+ return Aws::Endpoints::Endpoint.new(url: "https://greengrass-ats.iot.us-gov-east-1.amazonaws.com", headers: {}, properties: {})
47
+ end
48
+ if Aws::Endpoints::Matchers.string_equals?(region, "dataplane-us-gov-west-1")
49
+ return Aws::Endpoints::Endpoint.new(url: "https://greengrass-ats.iot.us-gov-west-1.amazonaws.com", headers: {}, properties: {})
50
+ end
51
+ return Aws::Endpoints::Endpoint.new(url: "https://greengrass.#{region}.#{partition_result['dnsSuffix']}", headers: {}, properties: {})
21
52
  end
22
- @provider = Aws::Endpoints::RulesProvider.new(rule_set || @@rule_set)
23
- end
53
+ raise ArgumentError, 'No endpoint could be resolved'
24
54
 
25
- def resolve_endpoint(parameters)
26
- @provider.resolve_endpoint(parameters)
27
55
  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
- dCI6eyJ1cmwiOiJodHRwczovL2dyZWVuZ3Jhc3MtZmlwcy57UmVnaW9ufS57
77
- UGFydGl0aW9uUmVzdWx0I2R1YWxTdGFja0Ruc1N1ZmZpeH0iLCJwcm9wZXJ0
78
- aWVzIjp7fSwiaGVhZGVycyI6e319LCJ0eXBlIjoiZW5kcG9pbnQifV19LHsi
79
- Y29uZGl0aW9ucyI6W10sImVycm9yIjoiRklQUyBhbmQgRHVhbFN0YWNrIGFy
80
- ZSBlbmFibGVkLCBidXQgdGhpcyBwYXJ0aXRpb24gZG9lcyBub3Qgc3VwcG9y
81
- dCBvbmUgb3IgYm90aCIsInR5cGUiOiJlcnJvciJ9XX0seyJjb25kaXRpb25z
82
- IjpbeyJmbiI6ImJvb2xlYW5FcXVhbHMiLCJhcmd2IjpbeyJyZWYiOiJVc2VG
83
- SVBTIn0sdHJ1ZV19XSwidHlwZSI6InRyZWUiLCJydWxlcyI6W3siY29uZGl0
84
- aW9ucyI6W3siZm4iOiJib29sZWFuRXF1YWxzIiwiYXJndiI6W3RydWUseyJm
85
- biI6ImdldEF0dHIiLCJhcmd2IjpbeyJyZWYiOiJQYXJ0aXRpb25SZXN1bHQi
86
- fSwic3VwcG9ydHNGSVBTIl19XX1dLCJ0eXBlIjoidHJlZSIsInJ1bGVzIjpb
87
- eyJjb25kaXRpb25zIjpbXSwidHlwZSI6InRyZWUiLCJydWxlcyI6W3siY29u
88
- ZGl0aW9ucyI6W10sImVuZHBvaW50Ijp7InVybCI6Imh0dHBzOi8vZ3JlZW5n
89
- cmFzcy1maXBzLntSZWdpb259LntQYXJ0aXRpb25SZXN1bHQjZG5zU3VmZml4
90
- fSIsInByb3BlcnRpZXMiOnt9LCJoZWFkZXJzIjp7fX0sInR5cGUiOiJlbmRw
91
- b2ludCJ9XX1dfSx7ImNvbmRpdGlvbnMiOltdLCJlcnJvciI6IkZJUFMgaXMg
92
- ZW5hYmxlZCBidXQgdGhpcyBwYXJ0aXRpb24gZG9lcyBub3Qgc3VwcG9ydCBG
93
- SVBTIiwidHlwZSI6ImVycm9yIn1dfSx7ImNvbmRpdGlvbnMiOlt7ImZuIjoi
94
- Ym9vbGVhbkVxdWFscyIsImFyZ3YiOlt7InJlZiI6IlVzZUR1YWxTdGFjayJ9
95
- LHRydWVdfV0sInR5cGUiOiJ0cmVlIiwicnVsZXMiOlt7ImNvbmRpdGlvbnMi
96
- Olt7ImZuIjoiYm9vbGVhbkVxdWFscyIsImFyZ3YiOlt0cnVlLHsiZm4iOiJn
97
- ZXRBdHRyIiwiYXJndiI6W3sicmVmIjoiUGFydGl0aW9uUmVzdWx0In0sInN1
98
- cHBvcnRzRHVhbFN0YWNrIl19XX1dLCJ0eXBlIjoidHJlZSIsInJ1bGVzIjpb
99
- eyJjb25kaXRpb25zIjpbXSwiZW5kcG9pbnQiOnsidXJsIjoiaHR0cHM6Ly9n
100
- cmVlbmdyYXNzLntSZWdpb259LntQYXJ0aXRpb25SZXN1bHQjZHVhbFN0YWNr
101
- RG5zU3VmZml4fSIsInByb3BlcnRpZXMiOnt9LCJoZWFkZXJzIjp7fX0sInR5
102
- cGUiOiJlbmRwb2ludCJ9XX0seyJjb25kaXRpb25zIjpbXSwiZXJyb3IiOiJE
103
- dWFsU3RhY2sgaXMgZW5hYmxlZCBidXQgdGhpcyBwYXJ0aXRpb24gZG9lcyBu
104
- b3Qgc3VwcG9ydCBEdWFsU3RhY2siLCJ0eXBlIjoiZXJyb3IifV19LHsiY29u
105
- ZGl0aW9ucyI6W10sInR5cGUiOiJ0cmVlIiwicnVsZXMiOlt7ImNvbmRpdGlv
106
- bnMiOlt7ImZuIjoic3RyaW5nRXF1YWxzIiwiYXJndiI6W3sicmVmIjoiUmVn
107
- aW9uIn0sImRhdGFwbGFuZS11cy1nb3Ytd2VzdC0xIl19XSwiZW5kcG9pbnQi
108
- OnsidXJsIjoiaHR0cHM6Ly9ncmVlbmdyYXNzLWF0cy5pb3QudXMtZ292LXdl
109
- c3QtMS5hbWF6b25hd3MuY29tIiwicHJvcGVydGllcyI6e30sImhlYWRlcnMi
110
- Ont9fSwidHlwZSI6ImVuZHBvaW50In0seyJjb25kaXRpb25zIjpbeyJmbiI6
111
- InN0cmluZ0VxdWFscyIsImFyZ3YiOlt7InJlZiI6IlJlZ2lvbiJ9LCJkYXRh
112
- cGxhbmUtdXMtZ292LWVhc3QtMSJdfV0sImVuZHBvaW50Ijp7InVybCI6Imh0
113
- dHBzOi8vZ3JlZW5ncmFzcy1hdHMuaW90LnVzLWdvdi1lYXN0LTEuYW1hem9u
114
- YXdzLmNvbSIsInByb3BlcnRpZXMiOnt9LCJoZWFkZXJzIjp7fX0sInR5cGUi
115
- OiJlbmRwb2ludCJ9LHsiY29uZGl0aW9ucyI6W10sImVuZHBvaW50Ijp7InVy
116
- bCI6Imh0dHBzOi8vZ3JlZW5ncmFzcy57UmVnaW9ufS57UGFydGl0aW9uUmVz
117
- dWx0I2Ruc1N1ZmZpeH0iLCJwcm9wZXJ0aWVzIjp7fSwiaGVhZGVycyI6e319
118
- LCJ0eXBlIjoiZW5kcG9pbnQifV19XX1dfQ==
119
-
120
- JSON
121
56
  end
122
57
  end