aws-sdk-waf 1.48.0 → 1.50.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: 07f935e9517d6537a13a507abb9a2130763c1f2fde257604a01d7931077d9b67
4
- data.tar.gz: 156fa779d5ae887a075b0336dcffe3fb14aad1c03f557b8b65e71c7ba36b0681
3
+ metadata.gz: aca2e2c9c9a646a976fc856283dba8af1d6a63f4aba422e215b6d4ee21dd1e42
4
+ data.tar.gz: 266b7dda89359afde64915c9a332e8c382751aeb934a32e5b54e9b1732c44ddb
5
5
  SHA512:
6
- metadata.gz: 58f4be7eec4b107cdf0e6c44e6c3d01d565f1e32bb5be41e8c0072d9fc5d7ba0ad02ff417dc9185761f350b293a39f13a7904e7a8bf34195c993c9992e5fd2bc
7
- data.tar.gz: aab41879d6cf124e55f25a565d5f3c4b7f0fc6a91dae6c44b7b8c5a6040db82b0337360adbd4b2c1659ab888e094657fa908f5daf657d62e1b0a6f0217234a09
6
+ metadata.gz: 64c939d03f17c73178dca94f2807691d5c28488ede359e3d98c5bab6bf6afcf79d554994f58e0ca1d3bd1276292709dab584b3645939ee2bd95937a19d73d5bd
7
+ data.tar.gz: 3a1683f2b317f819c6f4012ede910bfbf31ab37af4ea3add2a7f77c49b4fe3ac5ce2cc8b0176893bc7c90ff087060a5d715dce1b32fa0930279e498339a790bb
data/CHANGELOG.md CHANGED
@@ -1,6 +1,18 @@
1
1
  Unreleased Changes
2
2
  ------------------
3
3
 
4
+ 1.50.0 (2023-05-31)
5
+ ------------------
6
+
7
+ * Feature - Code Generated Changes, see `./build_tools` or `aws-sdk-core`'s CHANGELOG.md for details.
8
+
9
+ 1.49.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.48.0 (2022-10-25)
5
17
  ------------------
6
18
 
@@ -320,4 +332,4 @@ Unreleased Changes
320
332
  1.0.0.rc1 (2016-12-05)
321
333
  ------------------
322
334
 
323
- * Feature - Initial preview release of the `aws-sdk-waf` gem.
335
+ * Feature - Initial preview release of the `aws-sdk-waf` gem.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.48.0
1
+ 1.50.0
@@ -275,6 +275,11 @@ module Aws::WAF
275
275
  # in the future.
276
276
  #
277
277
  #
278
+ # @option options [String] :sdk_ua_app_id
279
+ # A unique and opaque application ID that is appended to the
280
+ # User-Agent header as app/<sdk_ua_app_id>. It should have a
281
+ # maximum length of 50.
282
+ #
278
283
  # @option options [String] :secret_access_key
279
284
  #
280
285
  # @option options [String] :session_token
@@ -652,7 +657,7 @@ module Aws::WAF
652
657
  # If you add more than one predicate to a `RateBasedRule`, a request not
653
658
  # only must exceed the `RateLimit`, but it also must match all the
654
659
  # conditions to be counted or blocked. For example, suppose you add the
655
- # following to a `RateBasedRule`\:
660
+ # following to a `RateBasedRule`:
656
661
  #
657
662
  # * An `IPSet` that matches the IP address `192.0.2.44/32`
658
663
  #
@@ -672,7 +677,7 @@ module Aws::WAF
672
677
  #
673
678
  # As a second example, suppose you want to limit requests to a
674
679
  # particular page on your site. To do this, you could add the following
675
- # to a `RateBasedRule`\:
680
+ # to a `RateBasedRule`:
676
681
  #
677
682
  # * A `ByteMatchSet` with `FieldToMatch` of `URI`
678
683
  #
@@ -958,7 +963,7 @@ module Aws::WAF
958
963
  # objects, and other predicates that identify the requests that you want
959
964
  # to block. If you add more than one predicate to a `Rule`, a request
960
965
  # must match all of the specifications to be allowed or blocked. For
961
- # example, suppose that you add the following to a `Rule`\:
966
+ # example, suppose that you add the following to a `Rule`:
962
967
  #
963
968
  # * An `IPSet` that matches the IP address `192.0.2.44/32`
964
969
  #
@@ -2778,14 +2783,14 @@ module Aws::WAF
2778
2783
  # Returns the status of a `ChangeToken` that you got by calling
2779
2784
  # GetChangeToken. `ChangeTokenStatus` is one of the following values:
2780
2785
  #
2781
- # * `PROVISIONED`\: You requested the change token by calling
2786
+ # * `PROVISIONED`: You requested the change token by calling
2782
2787
  # `GetChangeToken`, but you haven't used it yet in a call to create,
2783
2788
  # update, or delete an AWS WAF object.
2784
2789
  #
2785
- # * `PENDING`\: AWS WAF is propagating the create, update, or delete
2790
+ # * `PENDING`: AWS WAF is propagating the create, update, or delete
2786
2791
  # request to all AWS WAF servers.
2787
2792
  #
2788
- # * `INSYNC`\: Propagation is complete.
2793
+ # * `INSYNC`: Propagation is complete.
2789
2794
  #
2790
2795
  #
2791
2796
  #
@@ -5564,7 +5569,7 @@ module Aws::WAF
5564
5569
  # If you add more than one predicate to a `RateBasedRule`, a request
5565
5570
  # must match all the predicates and exceed the `RateLimit` to be counted
5566
5571
  # or blocked. For example, suppose you add the following to a
5567
- # `RateBasedRule`\:
5572
+ # `RateBasedRule`:
5568
5573
  #
5569
5574
  # * An `IPSet` that matches the IP address `192.0.2.44/32`
5570
5575
  #
@@ -5582,7 +5587,7 @@ module Aws::WAF
5582
5587
  #
5583
5588
  # As a second example, suppose you want to limit requests to a
5584
5589
  # particular page on your site. To do this, you could add the following
5585
- # to a `RateBasedRule`\:
5590
+ # to a `RateBasedRule`:
5586
5591
  #
5587
5592
  # * A `ByteMatchSet` with `FieldToMatch` of `URI`
5588
5593
  #
@@ -5865,7 +5870,7 @@ module Aws::WAF
5865
5870
  # that specifies the web requests that you want to allow, block, or
5866
5871
  # count. If you add more than one predicate to a `Rule`, a request must
5867
5872
  # match all of the specifications to be allowed, blocked, or counted.
5868
- # For example, suppose that you add the following to a `Rule`\:
5873
+ # For example, suppose that you add the following to a `Rule`:
5869
5874
  #
5870
5875
  # * A `ByteMatchSet` that matches the value `BadBot` in the `User-Agent`
5871
5876
  # header
@@ -6251,15 +6256,15 @@ module Aws::WAF
6251
6256
  # SqlInjectionMatchSet. For each `SqlInjectionMatchTuple` object, you
6252
6257
  # specify the following values:
6253
6258
  #
6254
- # * `Action`\: Whether to insert the object into or delete the object
6259
+ # * `Action`: Whether to insert the object into or delete the object
6255
6260
  # from the array. To change a `SqlInjectionMatchTuple`, you delete the
6256
6261
  # existing object and add a new one.
6257
6262
  #
6258
- # * `FieldToMatch`\: The part of web requests that you want AWS WAF to
6263
+ # * `FieldToMatch`: The part of web requests that you want AWS WAF to
6259
6264
  # inspect and, if you want AWS WAF to inspect a header or custom query
6260
6265
  # parameter, the name of the header or parameter.
6261
6266
  #
6262
- # * `TextTransformation`\: Which text transformation, if any, to perform
6267
+ # * `TextTransformation`: Which text transformation, if any, to perform
6263
6268
  # on the web request before inspecting the request for snippets of
6264
6269
  # malicious SQL code.
6265
6270
  #
@@ -6575,15 +6580,15 @@ module Aws::WAF
6575
6580
  # Inserts or deletes XssMatchTuple objects (filters) in an XssMatchSet.
6576
6581
  # For each `XssMatchTuple` object, you specify the following values:
6577
6582
  #
6578
- # * `Action`\: Whether to insert the object into or delete the object
6583
+ # * `Action`: Whether to insert the object into or delete the object
6579
6584
  # from the array. To change an `XssMatchTuple`, you delete the
6580
6585
  # existing object and add a new one.
6581
6586
  #
6582
- # * `FieldToMatch`\: The part of web requests that you want AWS WAF to
6587
+ # * `FieldToMatch`: The part of web requests that you want AWS WAF to
6583
6588
  # inspect and, if you want AWS WAF to inspect a header or custom query
6584
6589
  # parameter, the name of the header or parameter.
6585
6590
  #
6586
- # * `TextTransformation`\: Which text transformation, if any, to perform
6591
+ # * `TextTransformation`: Which text transformation, if any, to perform
6587
6592
  # on the web request before inspecting the request for cross-site
6588
6593
  # scripting attacks.
6589
6594
  #
@@ -6711,7 +6716,7 @@ module Aws::WAF
6711
6716
  params: params,
6712
6717
  config: config)
6713
6718
  context[:gem_name] = 'aws-sdk-waf'
6714
- context[:gem_version] = '1.48.0'
6719
+ context[:gem_version] = '1.50.0'
6715
6720
  Seahorse::Client::Request.new(handlers, context)
6716
6721
  end
6717
6722
 
@@ -9,169 +9,73 @@
9
9
 
10
10
  module Aws::WAF
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.string_equals?(Aws::Endpoints::Matchers.attr(partition_result, "name"), "aws")
28
+ if Aws::Endpoints::Matchers.boolean_equals?(use_fips, true) && Aws::Endpoints::Matchers.boolean_equals?(use_dual_stack, true)
29
+ 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"))
30
+ return Aws::Endpoints::Endpoint.new(url: "https://waf-fips.#{region}.api.aws", headers: {}, properties: {"authSchemes"=>[{"name"=>"sigv4", "signingName"=>"waf", "signingRegion"=>"us-east-1"}]})
31
+ end
32
+ raise ArgumentError, "FIPS and DualStack are enabled, but this partition does not support one or both"
33
+ end
34
+ if Aws::Endpoints::Matchers.boolean_equals?(use_fips, true)
35
+ if Aws::Endpoints::Matchers.boolean_equals?(true, Aws::Endpoints::Matchers.attr(partition_result, "supportsFIPS"))
36
+ return Aws::Endpoints::Endpoint.new(url: "https://waf-fips.amazonaws.com", headers: {}, properties: {"authSchemes"=>[{"name"=>"sigv4", "signingName"=>"waf", "signingRegion"=>"us-east-1"}]})
37
+ end
38
+ raise ArgumentError, "FIPS is enabled but this partition does not support FIPS"
39
+ end
40
+ if Aws::Endpoints::Matchers.boolean_equals?(use_dual_stack, true)
41
+ if Aws::Endpoints::Matchers.boolean_equals?(true, Aws::Endpoints::Matchers.attr(partition_result, "supportsDualStack"))
42
+ return Aws::Endpoints::Endpoint.new(url: "https://waf.#{region}.api.aws", headers: {}, properties: {"authSchemes"=>[{"name"=>"sigv4", "signingName"=>"waf", "signingRegion"=>"us-east-1"}]})
43
+ end
44
+ raise ArgumentError, "DualStack is enabled but this partition does not support DualStack"
45
+ end
46
+ return Aws::Endpoints::Endpoint.new(url: "https://waf.amazonaws.com", headers: {}, properties: {"authSchemes"=>[{"name"=>"sigv4", "signingName"=>"waf", "signingRegion"=>"us-east-1"}]})
47
+ end
48
+ if Aws::Endpoints::Matchers.boolean_equals?(use_fips, true) && Aws::Endpoints::Matchers.boolean_equals?(use_dual_stack, true)
49
+ 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"))
50
+ return Aws::Endpoints::Endpoint.new(url: "https://waf-fips.#{region}.#{partition_result['dualStackDnsSuffix']}", headers: {}, properties: {})
51
+ end
52
+ raise ArgumentError, "FIPS and DualStack are enabled, but this partition does not support one or both"
53
+ end
54
+ if Aws::Endpoints::Matchers.boolean_equals?(use_fips, true)
55
+ if Aws::Endpoints::Matchers.boolean_equals?(true, Aws::Endpoints::Matchers.attr(partition_result, "supportsFIPS"))
56
+ if Aws::Endpoints::Matchers.string_equals?(region, "aws")
57
+ return Aws::Endpoints::Endpoint.new(url: "https://waf-fips.amazonaws.com", headers: {}, properties: {"authSchemes"=>[{"name"=>"sigv4", "signingName"=>"waf", "signingRegion"=>"us-east-1"}]})
58
+ end
59
+ if Aws::Endpoints::Matchers.string_equals?(region, "aws-global")
60
+ return Aws::Endpoints::Endpoint.new(url: "https://waf-fips.amazonaws.com", headers: {}, properties: {"authSchemes"=>[{"name"=>"sigv4", "signingName"=>"waf", "signingRegion"=>"us-east-1"}]})
61
+ end
62
+ return Aws::Endpoints::Endpoint.new(url: "https://waf-fips.#{region}.#{partition_result['dnsSuffix']}", headers: {}, properties: {})
63
+ end
64
+ raise ArgumentError, "FIPS is enabled but this partition does not support FIPS"
65
+ end
66
+ if Aws::Endpoints::Matchers.boolean_equals?(use_dual_stack, true)
67
+ if Aws::Endpoints::Matchers.boolean_equals?(true, Aws::Endpoints::Matchers.attr(partition_result, "supportsDualStack"))
68
+ return Aws::Endpoints::Endpoint.new(url: "https://waf.#{region}.#{partition_result['dualStackDnsSuffix']}", headers: {}, properties: {})
69
+ end
70
+ raise ArgumentError, "DualStack is enabled but this partition does not support DualStack"
71
+ end
72
+ if Aws::Endpoints::Matchers.string_equals?(region, "aws-global")
73
+ return Aws::Endpoints::Endpoint.new(url: "https://waf.amazonaws.com", headers: {}, properties: {"authSchemes"=>[{"name"=>"sigv4", "signingName"=>"waf", "signingRegion"=>"us-east-1"}]})
74
+ end
75
+ return Aws::Endpoints::Endpoint.new(url: "https://waf.#{region}.#{partition_result['dnsSuffix']}", headers: {}, properties: {})
21
76
  end
22
- @provider = Aws::Endpoints::RulesProvider.new(rule_set || @@rule_set)
23
- end
77
+ raise ArgumentError, 'No endpoint could be resolved'
24
78
 
25
- def resolve_endpoint(parameters)
26
- @provider.resolve_endpoint(parameters)
27
79
  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
- ZSI6ImVuZHBvaW50In1dfV19LHsiY29uZGl0aW9ucyI6W3siZm4iOiJzdHJp
67
- bmdFcXVhbHMiLCJhcmd2IjpbeyJmbiI6ImdldEF0dHIiLCJhcmd2IjpbeyJy
68
- ZWYiOiJQYXJ0aXRpb25SZXN1bHQifSwibmFtZSJdfSwiYXdzIl19XSwidHlw
69
- ZSI6InRyZWUiLCJydWxlcyI6W3siY29uZGl0aW9ucyI6W3siZm4iOiJib29s
70
- ZWFuRXF1YWxzIiwiYXJndiI6W3sicmVmIjoiVXNlRklQUyJ9LHRydWVdfSx7
71
- ImZuIjoiYm9vbGVhbkVxdWFscyIsImFyZ3YiOlt7InJlZiI6IlVzZUR1YWxT
72
- dGFjayJ9LHRydWVdfV0sInR5cGUiOiJ0cmVlIiwicnVsZXMiOlt7ImNvbmRp
73
- dGlvbnMiOlt7ImZuIjoiYm9vbGVhbkVxdWFscyIsImFyZ3YiOlt0cnVlLHsi
74
- Zm4iOiJnZXRBdHRyIiwiYXJndiI6W3sicmVmIjoiUGFydGl0aW9uUmVzdWx0
75
- In0sInN1cHBvcnRzRklQUyJdfV19LHsiZm4iOiJib29sZWFuRXF1YWxzIiwi
76
- YXJndiI6W3RydWUseyJmbiI6ImdldEF0dHIiLCJhcmd2IjpbeyJyZWYiOiJQ
77
- YXJ0aXRpb25SZXN1bHQifSwic3VwcG9ydHNEdWFsU3RhY2siXX1dfV0sInR5
78
- cGUiOiJ0cmVlIiwicnVsZXMiOlt7ImNvbmRpdGlvbnMiOltdLCJlbmRwb2lu
79
- dCI6eyJ1cmwiOiJodHRwczovL3dhZi1maXBzLntSZWdpb259LmFwaS5hd3Mi
80
- LCJwcm9wZXJ0aWVzIjp7ImF1dGhTY2hlbWVzIjpbeyJuYW1lIjoic2lndjQi
81
- LCJzaWduaW5nTmFtZSI6IndhZiIsInNpZ25pbmdSZWdpb24iOiJ1cy1lYXN0
82
- LTEifV19LCJoZWFkZXJzIjp7fX0sInR5cGUiOiJlbmRwb2ludCJ9XX0seyJj
83
- b25kaXRpb25zIjpbXSwiZXJyb3IiOiJGSVBTIGFuZCBEdWFsU3RhY2sgYXJl
84
- IGVuYWJsZWQsIGJ1dCB0aGlzIHBhcnRpdGlvbiBkb2VzIG5vdCBzdXBwb3J0
85
- IG9uZSBvciBib3RoIiwidHlwZSI6ImVycm9yIn1dfSx7ImNvbmRpdGlvbnMi
86
- Olt7ImZuIjoiYm9vbGVhbkVxdWFscyIsImFyZ3YiOlt7InJlZiI6IlVzZUZJ
87
- UFMifSx0cnVlXX1dLCJ0eXBlIjoidHJlZSIsInJ1bGVzIjpbeyJjb25kaXRp
88
- b25zIjpbeyJmbiI6ImJvb2xlYW5FcXVhbHMiLCJhcmd2IjpbdHJ1ZSx7ImZu
89
- IjoiZ2V0QXR0ciIsImFyZ3YiOlt7InJlZiI6IlBhcnRpdGlvblJlc3VsdCJ9
90
- LCJzdXBwb3J0c0ZJUFMiXX1dfV0sInR5cGUiOiJ0cmVlIiwicnVsZXMiOlt7
91
- ImNvbmRpdGlvbnMiOltdLCJlbmRwb2ludCI6eyJ1cmwiOiJodHRwczovL3dh
92
- Zi1maXBzLmFtYXpvbmF3cy5jb20iLCJwcm9wZXJ0aWVzIjp7ImF1dGhTY2hl
93
- bWVzIjpbeyJuYW1lIjoic2lndjQiLCJzaWduaW5nTmFtZSI6IndhZiIsInNp
94
- Z25pbmdSZWdpb24iOiJ1cy1lYXN0LTEifV19LCJoZWFkZXJzIjp7fX0sInR5
95
- cGUiOiJlbmRwb2ludCJ9XX0seyJjb25kaXRpb25zIjpbXSwiZXJyb3IiOiJG
96
- SVBTIGlzIGVuYWJsZWQgYnV0IHRoaXMgcGFydGl0aW9uIGRvZXMgbm90IHN1
97
- cHBvcnQgRklQUyIsInR5cGUiOiJlcnJvciJ9XX0seyJjb25kaXRpb25zIjpb
98
- eyJmbiI6ImJvb2xlYW5FcXVhbHMiLCJhcmd2IjpbeyJyZWYiOiJVc2VEdWFs
99
- U3RhY2sifSx0cnVlXX1dLCJ0eXBlIjoidHJlZSIsInJ1bGVzIjpbeyJjb25k
100
- aXRpb25zIjpbeyJmbiI6ImJvb2xlYW5FcXVhbHMiLCJhcmd2IjpbdHJ1ZSx7
101
- ImZuIjoiZ2V0QXR0ciIsImFyZ3YiOlt7InJlZiI6IlBhcnRpdGlvblJlc3Vs
102
- dCJ9LCJzdXBwb3J0c0R1YWxTdGFjayJdfV19XSwidHlwZSI6InRyZWUiLCJy
103
- dWxlcyI6W3siY29uZGl0aW9ucyI6W10sImVuZHBvaW50Ijp7InVybCI6Imh0
104
- dHBzOi8vd2FmLntSZWdpb259LmFwaS5hd3MiLCJwcm9wZXJ0aWVzIjp7ImF1
105
- dGhTY2hlbWVzIjpbeyJuYW1lIjoic2lndjQiLCJzaWduaW5nTmFtZSI6Indh
106
- ZiIsInNpZ25pbmdSZWdpb24iOiJ1cy1lYXN0LTEifV19LCJoZWFkZXJzIjp7
107
- fX0sInR5cGUiOiJlbmRwb2ludCJ9XX0seyJjb25kaXRpb25zIjpbXSwiZXJy
108
- b3IiOiJEdWFsU3RhY2sgaXMgZW5hYmxlZCBidXQgdGhpcyBwYXJ0aXRpb24g
109
- ZG9lcyBub3Qgc3VwcG9ydCBEdWFsU3RhY2siLCJ0eXBlIjoiZXJyb3IifV19
110
- LHsiY29uZGl0aW9ucyI6W10sImVuZHBvaW50Ijp7InVybCI6Imh0dHBzOi8v
111
- d2FmLmFtYXpvbmF3cy5jb20iLCJwcm9wZXJ0aWVzIjp7ImF1dGhTY2hlbWVz
112
- IjpbeyJuYW1lIjoic2lndjQiLCJzaWduaW5nTmFtZSI6IndhZiIsInNpZ25p
113
- bmdSZWdpb24iOiJ1cy1lYXN0LTEifV19LCJoZWFkZXJzIjp7fX0sInR5cGUi
114
- OiJlbmRwb2ludCJ9XX0seyJjb25kaXRpb25zIjpbeyJmbiI6ImJvb2xlYW5F
115
- cXVhbHMiLCJhcmd2IjpbeyJyZWYiOiJVc2VGSVBTIn0sdHJ1ZV19LHsiZm4i
116
- OiJib29sZWFuRXF1YWxzIiwiYXJndiI6W3sicmVmIjoiVXNlRHVhbFN0YWNr
117
- In0sdHJ1ZV19XSwidHlwZSI6InRyZWUiLCJydWxlcyI6W3siY29uZGl0aW9u
118
- cyI6W3siZm4iOiJib29sZWFuRXF1YWxzIiwiYXJndiI6W3RydWUseyJmbiI6
119
- ImdldEF0dHIiLCJhcmd2IjpbeyJyZWYiOiJQYXJ0aXRpb25SZXN1bHQifSwi
120
- c3VwcG9ydHNGSVBTIl19XX0seyJmbiI6ImJvb2xlYW5FcXVhbHMiLCJhcmd2
121
- IjpbdHJ1ZSx7ImZuIjoiZ2V0QXR0ciIsImFyZ3YiOlt7InJlZiI6IlBhcnRp
122
- dGlvblJlc3VsdCJ9LCJzdXBwb3J0c0R1YWxTdGFjayJdfV19XSwidHlwZSI6
123
- InRyZWUiLCJydWxlcyI6W3siY29uZGl0aW9ucyI6W10sImVuZHBvaW50Ijp7
124
- InVybCI6Imh0dHBzOi8vd2FmLWZpcHMue1JlZ2lvbn0ue1BhcnRpdGlvblJl
125
- c3VsdCNkdWFsU3RhY2tEbnNTdWZmaXh9IiwicHJvcGVydGllcyI6e30sImhl
126
- YWRlcnMiOnt9fSwidHlwZSI6ImVuZHBvaW50In1dfSx7ImNvbmRpdGlvbnMi
127
- OltdLCJlcnJvciI6IkZJUFMgYW5kIER1YWxTdGFjayBhcmUgZW5hYmxlZCwg
128
- YnV0IHRoaXMgcGFydGl0aW9uIGRvZXMgbm90IHN1cHBvcnQgb25lIG9yIGJv
129
- dGgiLCJ0eXBlIjoiZXJyb3IifV19LHsiY29uZGl0aW9ucyI6W3siZm4iOiJi
130
- b29sZWFuRXF1YWxzIiwiYXJndiI6W3sicmVmIjoiVXNlRklQUyJ9LHRydWVd
131
- fV0sInR5cGUiOiJ0cmVlIiwicnVsZXMiOlt7ImNvbmRpdGlvbnMiOlt7ImZu
132
- IjoiYm9vbGVhbkVxdWFscyIsImFyZ3YiOlt0cnVlLHsiZm4iOiJnZXRBdHRy
133
- IiwiYXJndiI6W3sicmVmIjoiUGFydGl0aW9uUmVzdWx0In0sInN1cHBvcnRz
134
- RklQUyJdfV19XSwidHlwZSI6InRyZWUiLCJydWxlcyI6W3siY29uZGl0aW9u
135
- cyI6W10sInR5cGUiOiJ0cmVlIiwicnVsZXMiOlt7ImNvbmRpdGlvbnMiOlt7
136
- ImZuIjoic3RyaW5nRXF1YWxzIiwiYXJndiI6W3sicmVmIjoiUmVnaW9uIn0s
137
- ImF3cyJdfV0sImVuZHBvaW50Ijp7InVybCI6Imh0dHBzOi8vd2FmLWZpcHMu
138
- YW1hem9uYXdzLmNvbSIsInByb3BlcnRpZXMiOnsiYXV0aFNjaGVtZXMiOlt7
139
- Im5hbWUiOiJzaWd2NCIsInNpZ25pbmdOYW1lIjoid2FmIiwic2lnbmluZ1Jl
140
- Z2lvbiI6InVzLWVhc3QtMSJ9XX0sImhlYWRlcnMiOnt9fSwidHlwZSI6ImVu
141
- ZHBvaW50In0seyJjb25kaXRpb25zIjpbeyJmbiI6InN0cmluZ0VxdWFscyIs
142
- ImFyZ3YiOlt7InJlZiI6IlJlZ2lvbiJ9LCJhd3MtZ2xvYmFsIl19XSwiZW5k
143
- cG9pbnQiOnsidXJsIjoiaHR0cHM6Ly93YWYtZmlwcy5hbWF6b25hd3MuY29t
144
- IiwicHJvcGVydGllcyI6eyJhdXRoU2NoZW1lcyI6W3sibmFtZSI6InNpZ3Y0
145
- Iiwic2lnbmluZ05hbWUiOiJ3YWYiLCJzaWduaW5nUmVnaW9uIjoidXMtZWFz
146
- dC0xIn1dfSwiaGVhZGVycyI6e319LCJ0eXBlIjoiZW5kcG9pbnQifSx7ImNv
147
- bmRpdGlvbnMiOltdLCJlbmRwb2ludCI6eyJ1cmwiOiJodHRwczovL3dhZi1m
148
- aXBzLntSZWdpb259LntQYXJ0aXRpb25SZXN1bHQjZG5zU3VmZml4fSIsInBy
149
- b3BlcnRpZXMiOnt9LCJoZWFkZXJzIjp7fX0sInR5cGUiOiJlbmRwb2ludCJ9
150
- XX1dfSx7ImNvbmRpdGlvbnMiOltdLCJlcnJvciI6IkZJUFMgaXMgZW5hYmxl
151
- ZCBidXQgdGhpcyBwYXJ0aXRpb24gZG9lcyBub3Qgc3VwcG9ydCBGSVBTIiwi
152
- dHlwZSI6ImVycm9yIn1dfSx7ImNvbmRpdGlvbnMiOlt7ImZuIjoiYm9vbGVh
153
- bkVxdWFscyIsImFyZ3YiOlt7InJlZiI6IlVzZUR1YWxTdGFjayJ9LHRydWVd
154
- fV0sInR5cGUiOiJ0cmVlIiwicnVsZXMiOlt7ImNvbmRpdGlvbnMiOlt7ImZu
155
- IjoiYm9vbGVhbkVxdWFscyIsImFyZ3YiOlt0cnVlLHsiZm4iOiJnZXRBdHRy
156
- IiwiYXJndiI6W3sicmVmIjoiUGFydGl0aW9uUmVzdWx0In0sInN1cHBvcnRz
157
- RHVhbFN0YWNrIl19XX1dLCJ0eXBlIjoidHJlZSIsInJ1bGVzIjpbeyJjb25k
158
- aXRpb25zIjpbXSwiZW5kcG9pbnQiOnsidXJsIjoiaHR0cHM6Ly93YWYue1Jl
159
- Z2lvbn0ue1BhcnRpdGlvblJlc3VsdCNkdWFsU3RhY2tEbnNTdWZmaXh9Iiwi
160
- cHJvcGVydGllcyI6e30sImhlYWRlcnMiOnt9fSwidHlwZSI6ImVuZHBvaW50
161
- In1dfSx7ImNvbmRpdGlvbnMiOltdLCJlcnJvciI6IkR1YWxTdGFjayBpcyBl
162
- bmFibGVkIGJ1dCB0aGlzIHBhcnRpdGlvbiBkb2VzIG5vdCBzdXBwb3J0IER1
163
- YWxTdGFjayIsInR5cGUiOiJlcnJvciJ9XX0seyJjb25kaXRpb25zIjpbXSwi
164
- dHlwZSI6InRyZWUiLCJydWxlcyI6W3siY29uZGl0aW9ucyI6W3siZm4iOiJz
165
- dHJpbmdFcXVhbHMiLCJhcmd2IjpbeyJyZWYiOiJSZWdpb24ifSwiYXdzLWds
166
- b2JhbCJdfV0sImVuZHBvaW50Ijp7InVybCI6Imh0dHBzOi8vd2FmLmFtYXpv
167
- bmF3cy5jb20iLCJwcm9wZXJ0aWVzIjp7ImF1dGhTY2hlbWVzIjpbeyJuYW1l
168
- Ijoic2lndjQiLCJzaWduaW5nTmFtZSI6IndhZiIsInNpZ25pbmdSZWdpb24i
169
- OiJ1cy1lYXN0LTEifV19LCJoZWFkZXJzIjp7fX0sInR5cGUiOiJlbmRwb2lu
170
- dCJ9LHsiY29uZGl0aW9ucyI6W10sImVuZHBvaW50Ijp7InVybCI6Imh0dHBz
171
- Oi8vd2FmLntSZWdpb259LntQYXJ0aXRpb25SZXN1bHQjZG5zU3VmZml4fSIs
172
- InByb3BlcnRpZXMiOnt9LCJoZWFkZXJzIjp7fX0sInR5cGUiOiJlbmRwb2lu
173
- dCJ9XX1dfV19
174
-
175
- JSON
176
80
  end
177
81
  end