terraconstructs 0.1.8 → 0.1.10

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.
Files changed (285) hide show
  1. package/.jsii +1514 -1279
  2. package/lib/asset-staging.js +1 -1
  3. package/lib/aws/arn.js +1 -1
  4. package/lib/aws/aws-asset-manager.js +1 -1
  5. package/lib/aws/aws-construct.js +1 -1
  6. package/lib/aws/aws-stack.d.ts +28 -4
  7. package/lib/aws/aws-stack.js +80 -22
  8. package/lib/aws/aws-tags.js +2 -2
  9. package/lib/aws/cloudwatch/actions/appscaling.js +1 -1
  10. package/lib/aws/cloudwatch/actions/ec2.js +1 -1
  11. package/lib/aws/cloudwatch/actions/lambda.js +1 -1
  12. package/lib/aws/cloudwatch/actions/sns.js +1 -1
  13. package/lib/aws/cloudwatch/actions/ssm.js +2 -2
  14. package/lib/aws/cloudwatch/alarm-base.js +1 -1
  15. package/lib/aws/cloudwatch/alarm-rule.js +1 -1
  16. package/lib/aws/cloudwatch/alarm-status-widget.js +1 -1
  17. package/lib/aws/cloudwatch/alarm.js +9 -8
  18. package/lib/aws/cloudwatch/composite-alarm.js +1 -1
  19. package/lib/aws/cloudwatch/dashboard.js +1 -1
  20. package/lib/aws/cloudwatch/data-protection-policy.js +3 -3
  21. package/lib/aws/cloudwatch/graph.js +8 -8
  22. package/lib/aws/cloudwatch/layout.js +3 -3
  23. package/lib/aws/cloudwatch/log-destinations/kinesis.js +1 -1
  24. package/lib/aws/cloudwatch/log-destinations/lambda.js +1 -1
  25. package/lib/aws/cloudwatch/log-group.js +1 -1
  26. package/lib/aws/cloudwatch/log-query.js +1 -1
  27. package/lib/aws/cloudwatch/log-stream.js +1 -1
  28. package/lib/aws/cloudwatch/metric-filter.js +1 -1
  29. package/lib/aws/cloudwatch/metric.js +2 -2
  30. package/lib/aws/cloudwatch/pattern.js +3 -3
  31. package/lib/aws/cloudwatch/policy.js +1 -1
  32. package/lib/aws/cloudwatch/query-definition.js +2 -2
  33. package/lib/aws/cloudwatch/stats.js +1 -1
  34. package/lib/aws/cloudwatch/subscription-filter.js +1 -1
  35. package/lib/aws/cloudwatch/text.js +1 -1
  36. package/lib/aws/cloudwatch/variable.js +3 -3
  37. package/lib/aws/cloudwatch/widget.js +1 -1
  38. package/lib/aws/compute/access-log.js +9 -7
  39. package/lib/aws/compute/activity.js +1 -1
  40. package/lib/aws/compute/alb/application-listener-action.js +1 -1
  41. package/lib/aws/compute/alb/application-listener-certificate.js +1 -1
  42. package/lib/aws/compute/alb/application-listener-rule.js +1 -1
  43. package/lib/aws/compute/alb/application-listener.js +1 -1
  44. package/lib/aws/compute/alb/application-load-balancer.js +1 -1
  45. package/lib/aws/compute/alb/application-target-group.js +1 -1
  46. package/lib/aws/compute/alb/conditions.js +1 -1
  47. package/lib/aws/compute/alb/trust-store-revocation.js +1 -1
  48. package/lib/aws/compute/alb/trust-store.js +1 -1
  49. package/lib/aws/compute/api-definition.d.ts +1 -1
  50. package/lib/aws/compute/api-definition.js +11 -16
  51. package/lib/aws/compute/api-key.js +7 -8
  52. package/lib/aws/compute/apigateway-util.js +10 -21
  53. package/lib/aws/compute/architecture.js +1 -1
  54. package/lib/aws/compute/aspects/require-imdsv2-aspect.js +2 -2
  55. package/lib/aws/compute/authorizer.js +1 -1
  56. package/lib/aws/compute/authorizers/identity-source.js +4 -5
  57. package/lib/aws/compute/authorizers/lambda.js +8 -11
  58. package/lib/aws/compute/autoscaling-common/interval-utils.js +7 -11
  59. package/lib/aws/compute/base-path-mapping.js +6 -8
  60. package/lib/aws/compute/base-scalable-attribute.js +1 -1
  61. package/lib/aws/compute/bastion-host.js +1 -1
  62. package/lib/aws/compute/chain.js +1 -1
  63. package/lib/aws/compute/client-vpn-authorization-rule.js +1 -1
  64. package/lib/aws/compute/client-vpn-endpoint.js +2 -2
  65. package/lib/aws/compute/client-vpn-route.js +2 -2
  66. package/lib/aws/compute/code.js +23 -40
  67. package/lib/aws/compute/condition.js +1 -1
  68. package/lib/aws/compute/connections.js +1 -1
  69. package/lib/aws/compute/cors.js +1 -1
  70. package/lib/aws/compute/deployment.js +1 -1
  71. package/lib/aws/compute/domain-name.js +9 -8
  72. package/lib/aws/compute/event-invoke-config.js +1 -1
  73. package/lib/aws/compute/event-source-filter.js +2 -2
  74. package/lib/aws/compute/event-source-mapping.js +1 -1
  75. package/lib/aws/compute/event-sources/s3-onfailure-destination.js +1 -1
  76. package/lib/aws/compute/event-sources/s3.js +1 -1
  77. package/lib/aws/compute/event-sources/sqs-dlq.js +1 -1
  78. package/lib/aws/compute/event-sources/sqs.js +1 -1
  79. package/lib/aws/compute/fields.js +4 -4
  80. package/lib/aws/compute/function-alias.js +1 -1
  81. package/lib/aws/compute/function-base.js +12 -12
  82. package/lib/aws/compute/function-destinations/event-bridge.js +1 -1
  83. package/lib/aws/compute/function-destinations/function.js +1 -1
  84. package/lib/aws/compute/function-destinations/sqs.js +1 -1
  85. package/lib/aws/compute/function-nodejs/function.js +1 -1
  86. package/lib/aws/compute/function-url.js +1 -1
  87. package/lib/aws/compute/function.js +4 -3
  88. package/lib/aws/compute/gateway-response.js +2 -2
  89. package/lib/aws/compute/handler.js +1 -1
  90. package/lib/aws/compute/instance-types.js +1 -1
  91. package/lib/aws/compute/instance.js +1 -1
  92. package/lib/aws/compute/integration.js +10 -16
  93. package/lib/aws/compute/integrations/aws.js +4 -4
  94. package/lib/aws/compute/integrations/http.js +1 -1
  95. package/lib/aws/compute/integrations/lambda.js +1 -1
  96. package/lib/aws/compute/integrations/mock.js +1 -1
  97. package/lib/aws/compute/integrations/stepfunctions.js +4 -5
  98. package/lib/aws/compute/ip-addresses.js +2 -2
  99. package/lib/aws/compute/ipam.js +1 -1
  100. package/lib/aws/compute/key-pair.js +1 -1
  101. package/lib/aws/compute/lambda-api.js +7 -10
  102. package/lib/aws/compute/launch-template.js +2 -2
  103. package/lib/aws/compute/lb-shared/base-listener.js +1 -1
  104. package/lib/aws/compute/lb-shared/base-load-balancer.js +5 -7
  105. package/lib/aws/compute/lb-shared/base-target-group.js +1 -1
  106. package/lib/aws/compute/lb-shared/listener-certificate.js +1 -1
  107. package/lib/aws/compute/lb-shared/load-balancer-targets.js +2 -2
  108. package/lib/aws/compute/lb-targets/alb-target.js +3 -3
  109. package/lib/aws/compute/lb-targets/instance-target.js +2 -2
  110. package/lib/aws/compute/lb-targets/ip-target.js +1 -1
  111. package/lib/aws/compute/lb-targets/lambda-target.js +1 -1
  112. package/lib/aws/compute/load-balancer.js +3 -3
  113. package/lib/aws/compute/machine-image/amazon-linux-2022.js +2 -2
  114. package/lib/aws/compute/machine-image/amazon-linux-2023.js +2 -2
  115. package/lib/aws/compute/machine-image/amazon-linux2.js +2 -2
  116. package/lib/aws/compute/machine-image/common.js +1 -1
  117. package/lib/aws/compute/machine-image/machine-image.js +8 -8
  118. package/lib/aws/compute/method.js +1 -1
  119. package/lib/aws/compute/model.js +3 -3
  120. package/lib/aws/compute/nat.js +5 -5
  121. package/lib/aws/compute/network-acl-types.js +2 -2
  122. package/lib/aws/compute/network-acl.js +3 -3
  123. package/lib/aws/compute/nlb/network-listener-action.js +1 -1
  124. package/lib/aws/compute/nlb/network-listener.js +1 -1
  125. package/lib/aws/compute/nlb/network-load-balancer.js +1 -1
  126. package/lib/aws/compute/nlb/network-target-group.js +1 -1
  127. package/lib/aws/compute/peer.js +1 -1
  128. package/lib/aws/compute/placement-group.js +1 -1
  129. package/lib/aws/compute/port.js +1 -1
  130. package/lib/aws/compute/prefix-list.js +1 -1
  131. package/lib/aws/compute/requestvalidator.js +1 -1
  132. package/lib/aws/compute/resource.js +3 -3
  133. package/lib/aws/compute/restapi.js +9 -10
  134. package/lib/aws/compute/route.js +8 -8
  135. package/lib/aws/compute/runtime.d.ts +0 -1
  136. package/lib/aws/compute/runtime.js +5 -36
  137. package/lib/aws/compute/scalable-target.js +1 -1
  138. package/lib/aws/compute/schedule.js +6 -12
  139. package/lib/aws/compute/security-group.js +1 -1
  140. package/lib/aws/compute/stage.js +8 -11
  141. package/lib/aws/compute/state-graph.js +1 -1
  142. package/lib/aws/compute/state-machine-fragment.js +1 -1
  143. package/lib/aws/compute/state-machine.js +4 -4
  144. package/lib/aws/compute/states/choice.js +1 -1
  145. package/lib/aws/compute/states/custom-state.js +1 -1
  146. package/lib/aws/compute/states/distributed-map/item-batcher.js +1 -1
  147. package/lib/aws/compute/states/distributed-map/item-reader.js +5 -5
  148. package/lib/aws/compute/states/distributed-map/result-writer.js +1 -1
  149. package/lib/aws/compute/states/distributed-map.js +1 -1
  150. package/lib/aws/compute/states/fail.js +1 -1
  151. package/lib/aws/compute/states/map-base.js +1 -1
  152. package/lib/aws/compute/states/map.js +1 -1
  153. package/lib/aws/compute/states/parallel.js +1 -1
  154. package/lib/aws/compute/states/pass.js +2 -2
  155. package/lib/aws/compute/states/state.js +1 -1
  156. package/lib/aws/compute/states/succeed.js +1 -1
  157. package/lib/aws/compute/states/task-base.js +2 -2
  158. package/lib/aws/compute/states/task.js +1 -1
  159. package/lib/aws/compute/states/wait.js +2 -2
  160. package/lib/aws/compute/step-scaling-action.js +1 -1
  161. package/lib/aws/compute/step-scaling-policy.js +9 -14
  162. package/lib/aws/compute/stepfunctions-api.js +5 -6
  163. package/lib/aws/compute/subnet-v2.js +2 -2
  164. package/lib/aws/compute/subnet.js +1 -1
  165. package/lib/aws/compute/target-tracking-scaling-policy.js +9 -12
  166. package/lib/aws/compute/task-credentials.js +1 -1
  167. package/lib/aws/compute/task-input.js +1 -1
  168. package/lib/aws/compute/tasks/aws-sdk/call-aws-service.js +1 -1
  169. package/lib/aws/compute/tasks/eventbridge/put-events.js +1 -1
  170. package/lib/aws/compute/tasks/http/invoke.js +1 -1
  171. package/lib/aws/compute/tasks/lambda/invoke.js +1 -1
  172. package/lib/aws/compute/tasks/sqs/send-message.js +1 -1
  173. package/lib/aws/compute/tasks/stepfunctions/invoke-activity.js +1 -1
  174. package/lib/aws/compute/tasks/stepfunctions/start-execution.js +1 -1
  175. package/lib/aws/compute/types.js +1 -1
  176. package/lib/aws/compute/usage-plan.js +1 -1
  177. package/lib/aws/compute/user-data.js +3 -3
  178. package/lib/aws/compute/volume.js +2 -2
  179. package/lib/aws/compute/vpc-endpoint-service.js +1 -1
  180. package/lib/aws/compute/vpc-endpoint.js +6 -6
  181. package/lib/aws/compute/vpc-flow-logs.js +4 -4
  182. package/lib/aws/compute/vpc-link.js +1 -1
  183. package/lib/aws/compute/vpc-v2-base.js +1 -1
  184. package/lib/aws/compute/vpc-v2.js +2 -2
  185. package/lib/aws/compute/vpc.js +4 -4
  186. package/lib/aws/compute/vpn.js +3 -3
  187. package/lib/aws/cx-api.d.ts +1 -0
  188. package/lib/aws/cx-api.js +6 -0
  189. package/lib/aws/edge/certificate.js +1 -1
  190. package/lib/aws/edge/distribution.js +3 -3
  191. package/lib/aws/edge/dns-alias-record-targets.js +6 -6
  192. package/lib/aws/edge/dns-record.js +13 -13
  193. package/lib/aws/edge/dns-zone.d.ts +1 -1
  194. package/lib/aws/edge/dns-zone.js +8 -7
  195. package/lib/aws/edge/function.js +2 -2
  196. package/lib/aws/edge/key-value-store.js +4 -4
  197. package/lib/aws/edge/origin.js +3 -3
  198. package/lib/aws/edge/response-headers-policy.js +1 -1
  199. package/lib/aws/encryption/alias.js +1 -1
  200. package/lib/aws/encryption/key.js +1 -1
  201. package/lib/aws/encryption/via-service-principal.js +1 -1
  202. package/lib/aws/iam/grant.js +2 -2
  203. package/lib/aws/iam/group.js +1 -1
  204. package/lib/aws/iam/instance-profile.js +1 -1
  205. package/lib/aws/iam/managed-policy.js +1 -1
  206. package/lib/aws/iam/oidc-provider.js +1 -1
  207. package/lib/aws/iam/policy-document.js +1 -1
  208. package/lib/aws/iam/policy-statement.js +1 -1
  209. package/lib/aws/iam/policy.js +1 -1
  210. package/lib/aws/iam/principals.js +20 -20
  211. package/lib/aws/iam/role.js +1 -1
  212. package/lib/aws/iam/saml-provider.js +2 -2
  213. package/lib/aws/iam/unknown-principal.js +1 -1
  214. package/lib/aws/iam/user.js +1 -1
  215. package/lib/aws/network/simple-ipv4-vpc.js +1 -1
  216. package/lib/aws/network/subnet-group.js +3 -3
  217. package/lib/aws/network/subnet.js +4 -4
  218. package/lib/aws/notify/archive.js +1 -1
  219. package/lib/aws/notify/connection.js +3 -3
  220. package/lib/aws/notify/event-bus.d.ts +19 -0
  221. package/lib/aws/notify/event-bus.js +22 -26
  222. package/lib/aws/notify/event-pattern.js +1 -1
  223. package/lib/aws/notify/input.js +2 -2
  224. package/lib/aws/notify/kinesis-stream.js +1 -1
  225. package/lib/aws/notify/notification-rule.js +1 -1
  226. package/lib/aws/notify/policy.js +1 -1
  227. package/lib/aws/notify/queue-policy.js +1 -1
  228. package/lib/aws/notify/queue.js +1 -1
  229. package/lib/aws/notify/resource-policy.js +1 -1
  230. package/lib/aws/notify/rule.js +1 -1
  231. package/lib/aws/notify/schedule.js +1 -1
  232. package/lib/aws/notify/subscription-filter.js +7 -8
  233. package/lib/aws/notify/subscription.js +23 -25
  234. package/lib/aws/notify/subscriptions/email.js +1 -1
  235. package/lib/aws/notify/subscriptions/lambda.js +1 -1
  236. package/lib/aws/notify/subscriptions/sms.js +1 -1
  237. package/lib/aws/notify/subscriptions/sqs.js +1 -1
  238. package/lib/aws/notify/subscriptions/url.js +1 -1
  239. package/lib/aws/notify/targets/event-bus.js +1 -1
  240. package/lib/aws/notify/targets/function.js +1 -1
  241. package/lib/aws/notify/targets/log-group.js +2 -2
  242. package/lib/aws/notify/targets/sqs.js +1 -1
  243. package/lib/aws/notify/targets/state-machine.js +1 -1
  244. package/lib/aws/notify/topic-base.js +4 -4
  245. package/lib/aws/notify/topic.js +1 -1
  246. package/lib/aws/region-lookup.d.ts +8 -0
  247. package/lib/aws/region-lookup.js +104 -0
  248. package/lib/aws/storage/assets/image-asset.js +8 -12
  249. package/lib/aws/storage/assets/s3.js +4 -4
  250. package/lib/aws/storage/auth-token.js +2 -2
  251. package/lib/aws/storage/billing.js +1 -1
  252. package/lib/aws/storage/bucket-notifications.js +1 -1
  253. package/lib/aws/storage/bucket-policy.js +1 -1
  254. package/lib/aws/storage/bucket-source.js +1 -1
  255. package/lib/aws/storage/bucket.js +27 -24
  256. package/lib/aws/storage/capacity.js +1 -1
  257. package/lib/aws/storage/ecr-repository.js +19 -32
  258. package/lib/aws/storage/encryption.js +1 -1
  259. package/lib/aws/storage/notification-targets/function.js +1 -1
  260. package/lib/aws/storage/notification-targets/queue.js +1 -1
  261. package/lib/aws/storage/origin-access-identity.js +1 -1
  262. package/lib/aws/storage/parameter.js +2 -2
  263. package/lib/aws/storage/table.js +50 -101
  264. package/lib/aws/storage/util.d.ts +0 -10
  265. package/lib/aws/storage/util.js +4 -91
  266. package/lib/bundling.js +7 -6
  267. package/lib/construct-base.js +2 -2
  268. package/lib/duration.js +1 -1
  269. package/lib/errors.js +5 -3
  270. package/lib/expiration.js +1 -1
  271. package/lib/fs/ignore.js +4 -4
  272. package/lib/fs/index.js +1 -1
  273. package/lib/index.d.ts +1 -0
  274. package/lib/index.js +2 -1
  275. package/lib/private/asset-staging.js +3 -2
  276. package/lib/size.js +1 -1
  277. package/lib/stack-base.d.ts +21 -5
  278. package/lib/stack-base.js +68 -5
  279. package/lib/terra-func.js +1 -1
  280. package/lib/time-zone.js +1 -1
  281. package/package.json +3 -1
  282. package/lib/aws/compute/lb-shared/access-logs-accounts.d.ts +0 -7
  283. package/lib/aws/compute/lb-shared/access-logs-accounts.js +0 -46
  284. package/lib/aws/partition.d.ts +0 -21
  285. package/lib/aws/partition.js +0 -42
@@ -3,13 +3,11 @@ var _a;
3
3
  Object.defineProperty(exports, "__esModule", { value: true });
4
4
  exports.Runtime = exports.RuntimeFamily = void 0;
5
5
  exports.determineLatestNodeRuntime = determineLatestNodeRuntime;
6
- exports.runtimeLookup = runtimeLookup;
7
6
  const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
8
- const cdktf_1 = require("cdktf");
7
+ const region_info_1 = require("@aws-cdk/region-info");
9
8
  // TODO: use @cdktf/provider-docker for bundling
10
9
  const bundling_1 = require("../../bundling");
11
10
  const aws_stack_1 = require("../aws-stack");
12
- const partition_1 = require("../partition");
13
11
  var RuntimeFamily;
14
12
  (function (RuntimeFamily) {
15
13
  RuntimeFamily[RuntimeFamily["NODEJS"] = 0] = "NODEJS";
@@ -49,7 +47,7 @@ class Runtime {
49
47
  }
50
48
  exports.Runtime = Runtime;
51
49
  _a = JSII_RTTI_SYMBOL_1;
52
- Runtime[_a] = { fqn: "terraconstructs.aws.compute.Runtime", version: "0.1.8" };
50
+ Runtime[_a] = { fqn: "terraconstructs.aws.compute.Runtime", version: "0.1.10" };
53
51
  /** A list of all known `Runtime`'s. */
54
52
  Runtime.ALL = new Array();
55
53
  /**
@@ -106,8 +104,7 @@ Runtime.NODEJS_20_X = new Runtime("nodejs20.x", RuntimeFamily.NODEJS, { supports
106
104
  * The latest NodeJS version currently available in ALL regions (not necessarily the latest NodeJS version
107
105
  * available in YOUR region).
108
106
  */
109
- Runtime.NODEJS_LATEST = new Runtime("nodejs22.x", // TODO: review this
110
- RuntimeFamily.NODEJS, { supportsInlineCode: true, isVariable: true });
107
+ Runtime.NODEJS_LATEST = new Runtime("nodejs22.x", RuntimeFamily.NODEJS, { supportsInlineCode: true, isVariable: true });
111
108
  /**
112
109
  * The NodeJS 22.x runtime (nodejs22.x)
113
110
  */
@@ -313,38 +310,10 @@ Runtime.FROM_IMAGE = new Runtime("FROM_IMAGE");
313
310
  function determineLatestNodeRuntime(scope) {
314
311
  // Runtime regional fact should always return a known runtime string that Runtime can index off, but for type
315
312
  // safety we also default it here.
316
- const runtimeName = runtimeLookup(aws_stack_1.AwsStack.ofAwsConstruct(scope).region, Runtime.NODEJS_18_X.name);
313
+ const runtimeName = aws_stack_1.AwsStack.ofAwsConstruct(scope).regionalFact(region_info_1.FactName.LATEST_NODE_RUNTIME, Runtime.NODEJS_22_X.name);
317
314
  return new Runtime(runtimeName, RuntimeFamily.NODEJS, {
318
315
  supportsInlineCode: true,
319
316
  isVariable: true,
320
317
  });
321
318
  }
322
- // Fact Table Mock functions
323
- // https://github.com/aws/aws-cdk/blob/main/packages/aws-cdk-lib/region-info/build-tools/fact-tables.ts
324
- function runtimeLookup(region, defaultValue) {
325
- if (cdktf_1.Token.isUnresolved(region)) {
326
- throw new Error("Cannot determine region partition for unresolved region");
327
- }
328
- const { partition } = (0, partition_1.partitionLookup)(region);
329
- const runtime = LATEST_NODE_RUNTIME_MAP[partition] ?? defaultValue;
330
- if (!runtime) {
331
- throw new Error(`No runtime found for partition ${partition} in region ${region}.`);
332
- }
333
- return runtime;
334
- }
335
- var RuntimeFact;
336
- (function (RuntimeFact) {
337
- RuntimeFact["NODE_18"] = "nodejs18.x";
338
- RuntimeFact["NODE_20"] = "nodejs20.x";
339
- RuntimeFact["NODE_22"] = "nodejs22.x";
340
- })(RuntimeFact || (RuntimeFact = {}));
341
- const LATEST_NODE_RUNTIME_MAP = {
342
- [partition_1.Partition.Default]: RuntimeFact.NODE_22,
343
- [partition_1.Partition.Cn]: RuntimeFact.NODE_22,
344
- [partition_1.Partition.UsGov]: RuntimeFact.NODE_22,
345
- [partition_1.Partition.UsIso]: RuntimeFact.NODE_22,
346
- [partition_1.Partition.UsIsoB]: RuntimeFact.NODE_22,
347
- [partition_1.Partition.UsIsoF]: RuntimeFact.NODE_22,
348
- [partition_1.Partition.EuIsoE]: RuntimeFact.NODE_22,
349
- };
350
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVudGltZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hd3MvY29tcHV0ZS9ydW50aW1lLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUEwaUJBLGdFQVdDO0FBS0Qsc0NBWUM7O0FBdGtCRCxpQ0FBOEI7QUFFOUIsZ0RBQWdEO0FBQ2hELDZDQUE2QztBQUM3Qyw0Q0FBd0M7QUFDeEMsNENBQTBEO0FBbUMxRCxJQUFZLGFBUVg7QUFSRCxXQUFZLGFBQWE7SUFDdkIscURBQU0sQ0FBQTtJQUNOLGlEQUFJLENBQUE7SUFDSixxREFBTSxDQUFBO0lBQ04sK0RBQVcsQ0FBQTtJQUNYLDZDQUFFLENBQUE7SUFDRixpREFBSSxDQUFBO0lBQ0osbURBQUssQ0FBQTtBQUNQLENBQUMsRUFSVyxhQUFhLDZCQUFiLGFBQWEsUUFReEI7QUFFRDs7Ozs7R0FLRztBQUNILE1BQWEsT0FBTztJQStjbEIsWUFDRSxJQUFZLEVBQ1osTUFBc0IsRUFDdEIsUUFBNEIsRUFBRTtRQUU5QixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztRQUNqQixJQUFJLENBQUMsa0JBQWtCLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQztRQUNyRCxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztRQUNyQixJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDO1FBRXJDLE1BQU0sU0FBUyxHQUNiLEtBQUssQ0FBQyxtQkFBbUIsSUFBSSw0QkFBNEIsSUFBSSxFQUFFLENBQUM7UUFDbEUsSUFBSSxDQUFDLGFBQWEsR0FBRyxzQkFBVyxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUN6RCxJQUFJLENBQUMseUJBQXlCLEdBQUcsS0FBSyxDQUFDLHlCQUF5QixJQUFJLEtBQUssQ0FBQztRQUMxRSxJQUFJLENBQUMsaUJBQWlCLEdBQUcsS0FBSyxDQUFDLGlCQUFpQixJQUFJLEtB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Q25DLENBQUMscUJBQVMsQ0FBQyxLQUFLLENBQUMsRUFBRSxXQUFXLENBQUMsT0FBTztJQUN0QyxDQUFDLHFCQUFTLENBQUMsS0FBSyxDQUFDLEVBQUUsV0FBVyxDQUFDLE9BQU87SUFDdEMsQ0FBQyxxQkFBUyxDQUFDLE1BQU0sQ0FBQyxFQUFFLFdBQVcsQ0FBQyxPQUFPO0lBQ3ZDLENBQUMscUJBQVMsQ0FBQyxNQUFNLENBQUMsRUFBRSxXQUFXLENBQUMsT0FBTztJQUN2QyxDQUFDLHFCQUFTLENBQUMsTUFBTSxDQUFDLEVBQUUsV0FBVyxDQUFDLE9BQU87Q0FDeEMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFRva2VuIH0gZnJvbSBcImNka3RmXCI7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuLy8gVE9ETzogdXNlIEBjZGt0Zi9wcm92aWRlci1kb2NrZXIgZm9yIGJ1bmRsaW5nXG5pbXBvcnQgeyBEb2NrZXJJbWFnZSB9IGZyb20gXCIuLi8uLi9idW5kbGluZ1wiO1xuaW1wb3J0IHsgQXdzU3RhY2sgfSBmcm9tIFwiLi4vYXdzLXN0YWNrXCI7XG5pbXBvcnQgeyBQYXJ0aXRpb24sIHBhcnRpdGlvbkxvb2t1cCB9IGZyb20gXCIuLi9wYXJ0aXRpb25cIjtcbi8vIGltcG9ydCB7IEZhY3ROYW1lIH0gZnJvbSAnLi4vLi4vcmVnaW9uLWluZm8nO1xuXG5leHBvcnQgaW50ZXJmYWNlIExhbWJkYVJ1bnRpbWVQcm9wcyB7XG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBgYFppcEZpbGVgYCAoYWthIGlubGluZSBjb2RlKSBwcm9wZXJ0eSBjYW4gYmUgdXNlZCB3aXRoIHRoaXMgcnVudGltZS5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IHN1cHBvcnRzSW5saW5lQ29kZT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIHJ1bnRpbWUgZW51bSBpcyBtZWFudCB0byBjaGFuZ2Ugb3ZlciB0aW1lLCBJRSBOT0RFSlNfTEFURVNULlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgaXNWYXJpYWJsZT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSBEb2NrZXIgaW1hZ2UgbmFtZSB0byBiZSB1c2VkIGZvciBidW5kbGluZyBpbiB0aGlzIHJ1bnRpbWUuXG4gICAqIEBkZWZhdWx0IC0gdGhlIGxhdGVzdCBkb2NrZXIgaW1hZ2UgXCJhbWF6b24vcHVibGljLmVjci5hd3Mvc2FtL2J1aWxkLTxydW50aW1lPlwiIGZyb20gaHR0cHM6Ly9nYWxsZXJ5LmVjci5hd3NcbiAgICovXG4gIHJlYWRvbmx5IGJ1bmRsaW5nRG9ja2VySW1hZ2U/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhpcyBydW50aW1lIGlzIGludGVncmF0ZWQgd2l0aCBhbmQgc3VwcG9ydGVkIGZvciBwcm9maWxpbmcgdXNpbmcgQW1hem9uIENvZGVHdXJ1IFByb2ZpbGVyLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgc3VwcG9ydHNDb2RlR3VydVByb2ZpbGluZz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhpcyBydW50aW1lIHN1cHBvcnRzIFNuYXBTdGFydC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IHN1cHBvcnRzU25hcFN0YXJ0PzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGVudW0gUnVudGltZUZhbWlseSB7XG4gIE5PREVKUyxcbiAgSkFWQSxcbiAgUFlUSE9OLFxuICBET1RORVRfQ09SRSxcbiAgR08sXG4gIFJVQlksXG4gIE9USEVSLFxufVxuXG4vKipcbiAqIExhbWJkYSBmdW5jdGlvbiBydW50aW1lIGVudmlyb25tZW50LlxuICpcbiAqIElmIHlvdSBuZWVkIHRvIHVzZSBhIHJ1bnRpbWUgbmFtZSB0aGF0IGRvZXNuJ3QgZXhpc3QgYXMgYSBzdGF0aWMgbWVtYmVyLCB5b3VcbiAqIGNhbiBpbnN0YW50aWF0ZSBhIGBSdW50aW1lYCBvYmplY3QsIGUuZzogYG5ldyBSdW50aW1lKCdub2RlanM5OS45OScpYC5cbiAqL1xuZXhwb3J0IGNsYXNzIFJ1bnRpbWUge1xuICAvKiogQSBsaXN0IG9mIGFsbCBrbm93biBgUnVudGltZWAncy4gKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBBTEwgPSBuZXcgQXJyYXk8UnVudGltZT4oKTtcblxuICAvKipcbiAgICogVGhlIE5vZGVKUyBydW50aW1lIChub2RlanMpXG4gICAqIEBkZXByZWNhdGVkIExlZ2FjeSBydW50aW1lIG5vIGxvbmdlciBzdXBwb3J0ZWQgYnkgQVdTIExhbWJkYS4gTWlncmF0ZSB0byB0aGUgbGF0ZXN0IE5vZGVKUyBydW50aW1lLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBOT0RFSlMgPSBuZXcgUnVudGltZShcIm5vZGVqc1wiLCBSdW50aW1lRmFtaWx5Lk5PREVKUywge1xuICAgIHN1cHBvcnRzSW5saW5lQ29kZTogdHJ1ZSxcbiAgfSk7XG5cbiAgLyoqXG4gICAqIFRoZSBOb2RlSlMgNC4zIHJ1bnRpbWUgKG5vZGVqczQuMylcbiAgICogQGRlcHJlY2F0ZWQgTGVnYWN5IHJ1bnRpbWUgbm8gbG9uZ2VyIHN1cHBvcnRlZCBieSBBV1MgTGFtYmRhLiBNaWdyYXRlIHRvIHRoZSBsYXRlc3QgTm9kZUpTIHJ1bnRpbWUuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IE5PREVKU180XzMgPSBuZXcgUnVudGltZShcbiAgICBcIm5vZGVqczQuM1wiLFxuICAgIFJ1bnRpbWVGYW1pbHkuTk9ERUpTLFxuICAgIHsgc3VwcG9ydHNJbmxpbmVDb2RlOiB0cnVlIH0sXG4gICk7XG5cbiAgLyoqXG4gICAqIFRoZSBOb2RlSlMgNi4xMCBydW50aW1lIChub2RlanM2LjEwKVxuICAgKiBAZGVwcmVjYXRlZCBMZWdhY3kgcnVudGltZSBubyBsb25nZXIgc3VwcG9ydGVkIGJ5IEFXUyBMYW1iZGEuIE1pZ3JhdGUgdG8gdGhlIGxhdGVzdCBOb2RlSlMgcnVudGltZS5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgTk9ERUpTXzZfMTAgPSBuZXcgUnVudGltZShcbiAgICBcIm5vZGVqczYuMTBcIixcbiAgICBSdW50aW1lRmFtaWx5Lk5PREVKUyxcbiAgICB7IHN1cHBvcnRzSW5saW5lQ29kZTogdHJ1ZSB9LFxuICApO1xuXG4gIC8qKlxuICAgKiBUaGUgTm9kZUpTIDguMTAgcnVudGltZSAobm9kZWpzOC4xMClcbiAgICogQGRlcHJlY2F0ZWQgTGVnYWN5IHJ1bnRpbWUgbm8gbG9uZ2VyIHN1cHBvcnRlZCBieSBBV1MgTGFtYmRhLiBNaWdyYXRlIHRvIHRoZSBsYXRlc3QgTm9kZUpTIHJ1bnRpbWUuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IE5PREVKU184XzEwID0gbmV3IFJ1bnRpbWUoXG4gICAgXCJub2RlanM4LjEwXCIsXG4gICAgUnVudGltZUZhbWlseS5OT0RFSlMsXG4gICAgeyBzdXBwb3J0c0lubGluZUNvZGU6IHRydWUgfSxcbiAgKTtcblxuICAvKipcbiAgICogVGhlIE5vZGVKUyAxMC54IHJ1bnRpbWUgKG5vZGVqczEwLngpXG4gICAqIEBkZXByZWNhdGVkIExlZ2FjeSBydW50aW1lIG5vIGxvbmdlciBzdXBwb3J0ZWQgYnkgQVdTIExhbWJkYS4gTWlncmF0ZSB0byB0aGUgbGF0ZXN0IE5vZGVKUyBydW50aW1lLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBOT0RFSlNfMTBfWCA9IG5ldyBSdW50aW1lKFxuICAgIFwibm9kZWpzMTAueFwiLFxuICAgIFJ1bnRpbWVGYW1pbHkuTk9ERUpTLFxuICAgIHsgc3VwcG9ydHNJbmxpbmVDb2RlOiB0cnVlIH0sXG4gICk7XG5cbiAgLyoqXG4gICAqIFRoZSBOb2RlSlMgMTIueCBydW50aW1lIChub2RlanMxMi54KVxuICAgKiBAZGVwcmVjYXRlZCBMZWdhY3kgcnVudGltZSBubyBsb25nZXIgc3VwcG9ydGVkIGJ5IEFXUyBMYW1iZGEuIE1pZ3JhdGUgdG8gdGhlIGxhdGVzdCBOb2RlSlMgcnVudGltZS5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgTk9ERUpTXzEyX1ggPSBuZXcgUnVudGltZShcbiAgICBcIm5vZGVqczEyLnhcIixcbiAgICBSdW50aW1lRmFtaWx5Lk5PREVKUyxcbiAgICB7IHN1cHBvcnRzSW5saW5lQ29kZTogdHJ1ZSB9LFxuICApO1xuXG4gIC8qKlxuICAgKiBUaGUgTm9kZUpTIDE0LnggcnVudGltZSAobm9kZWpzMTQueClcbiAgICogQGRlcHJlY2F0ZWQgTGVnYWN5IHJ1bnRpbWUgbm8gbG9uZ2VyIHN1cHBvcnRlZCBieSBBV1MgTGFtYmRhLiBNaWdyYXRlIHRvIHRoZSBsYXRlc3QgTm9kZUpTIHJ1bnRpbWUuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IE5PREVKU18xNF9YID0gbmV3IFJ1bnRpbWUoXG4gICAgXCJub2RlanMxNC54XCIsXG4gICAgUnVudGltZUZhbWlseS5OT0RFSlMsXG4gICAgeyBzdXBwb3J0c0lubGluZUNvZGU6IHRydWUgfSxcbiAgKTtcblxuICAvKipcbiAgICogVGhlIE5vZGVKUyAxNi54IHJ1bnRpbWUgKG5vZGVqczE2LngpXG4gICAqIEBkZXByZWNhdGVkIExlZ2FjeSBydW50aW1lIG5vIGxvbmdlciBzdXBwb3J0ZWQgYnkgQVdTIExhbWJkYS4gTWlncmF0ZSB0byB0aGUgbGF0ZXN0IE5vZGVKUyBydW50aW1lLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBOT0RFSlNfMTZfWCA9IG5ldyBSdW50aW1lKFxuICAgIFwibm9kZWpzMTYueFwiLFxuICAgIFJ1bnRpbWVGYW1pbHkuTk9ERUpTLFxuICAgIHsgc3VwcG9ydHNJbmxpbmVDb2RlOiB0cnVlIH0sXG4gICk7XG5cbiAgLyoqXG4gICAqIFRoZSBOb2RlSlMgMTgueCBydW50aW1lIChub2RlanMxOC54KVxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBOT0RFSlNfMThfWCA9IG5ldyBSdW50aW1lKFxuICAgIFwibm9kZWpzMTgueFwiLFxuICAgIFJ1bnRpbWVGYW1pbHkuTk9ERUpTLFxuICAgIHsgc3VwcG9ydHNJbmxpbmVDb2RlOiB0cnVlIH0sXG4gICk7XG5cbiAgLyoqXG4gICAqIFRoZSBOb2RlSlMgMjAueCBydW50aW1lIChub2RlanMyMC54KVxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBOT0RFSlNfMjBfWCA9IG5ldyBSdW50aW1lKFxuICAgIFwibm9kZWpzMjAueFwiLFxuICAgIFJ1bnRpbWVGYW1pbHkuTk9ERUpTLFxuICAgIHsgc3VwcG9ydHNJbmxpbmVDb2RlOiB0cnVlIH0sXG4gICk7XG5cbiAgLyoqXG4gICAqIFRoZSBsYXRlc3QgTm9kZUpTIHZlcnNpb24gY3VycmVudGx5IGF2YWlsYWJsZSBpbiBBTEwgcmVnaW9ucyAobm90IG5lY2Vzc2FyaWx5IHRoZSBsYXRlc3QgTm9kZUpTIHZlcnNpb25cbiAgICogYXZhaWxhYmxlIGluIFlPVVIgcmVnaW9uKS5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgTk9ERUpTX0xBVEVTVCA9IG5ldyBSdW50aW1lKFxuICAgIFwibm9kZWpzMjIueFwiLCAvLyBUT0RPOiByZXZpZXcgdGhpc1xuICAgIFJ1bnRpbWVGYW1pbHkuTk9ERUpTLFxuICAgIHsgc3VwcG9ydHNJbmxpbmVDb2RlOiB0cnVlLCBpc1ZhcmlhYmxlOiB0cnVlIH0sXG4gICk7XG5cbiAgLyoqXG4gICAqIFRoZSBOb2RlSlMgMjIueCBydW50aW1lIChub2RlanMyMi54KVxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBOT0RFSlNfMjJfWCA9IG5ldyBSdW50aW1lKFxuICAgIFwibm9kZWpzMjIueFwiLFxuICAgIFJ1bnRpbWVGYW1pbHkuTk9ERUpTLFxuICAgIHsgc3VwcG9ydHNJbmxpbmVDb2RlOiB0cnVlIH0sXG4gICk7XG5cbiAgLyoqXG4gICAqIFRoZSBOb2RlSlMgMjQueCBydW50aW1lIChub2RlanMyNC54KVxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBOT0RFSlNfMjRfWCA9IG5ldyBSdW50aW1lKFxuICAgIFwibm9kZWpzMjQueFwiLFxuICAgIFJ1bnRpbWVGYW1pbHkuTk9ERUpTLFxuICAgIHsgc3VwcG9ydHNJbmxpbmVDb2RlOiB0cnVlIH0sXG4gICk7XG5cbiAgLyoqXG4gICAqIFRoZSBQeXRob24gMi43IHJ1bnRpbWUgKHB5dGhvbjIuNylcbiAgICogQGRlcHJlY2F0ZWQgTGVnYWN5IHJ1bnRpbWUgbm8gbG9uZ2VyIHN1cHBvcnRlZCBieSBBV1MgTGFtYmRhLiBNaWdyYXRlIHRvIHRoZSBsYXRlc3QgUHl0aG9uIHJ1bnRpbWUuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFBZVEhPTl8yXzcgPSBuZXcgUnVudGltZShcbiAgICBcInB5dGhvbjIuN1wiLFxuICAgIFJ1bnRpbWVGYW1pbHkuUFlUSE9OLFxuICAgIHsgc3VwcG9ydHNJbmxpbmVDb2RlOiB0cnVlIH0sXG4gICk7XG5cbiAgLyoqXG4gICAqIFRoZSBQeXRob24gMy42IHJ1bnRpbWUgKHB5dGhvbjMuNikgKG5vdCByZWNvbW1lbmRlZClcbiAgICpcbiAgICogVGhlIFB5dGhvbiAzLjYgcnVudGltZSBpcyBkZXByZWNhdGVkIGFzIG9mIEp1bHkgMjAyMi5cbiAgICpcbiAgICogQGRlcHJlY2F0ZWQgTGVnYWN5IHJ1bnRpbWUgbm8gbG9uZ2VyIHN1cHBvcnRlZCBieSBBV1MgTGFtYmRhLiBNaWdyYXRlIHRvIHRoZSBsYXRlc3QgUHl0aG9uIHJ1bnRpbWUuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFBZVEhPTl8zXzYgPSBuZXcgUnVudGltZShcbiAgICBcInB5dGhvbjMuNlwiLFxuICAgIFJ1bnRpbWVGYW1pbHkuUFlUSE9OLFxuICAgIHtcbiAgICAgIHN1cHBvcnRzSW5saW5lQ29kZTogdHJ1ZSxcbiAgICAgIHN1cHBvcnRzQ29kZUd1cnVQcm9maWxpbmc6IHRydWUsXG4gICAgfSxcbiAgKTtcblxuICAvKipcbiAgICogVGhlIFB5dGhvbiAzLjcgcnVudGltZSAocHl0aG9uMy43KVxuICAgKiBAZGVwcmVjYXRlZCBMZWdhY3kgcnVudGltZSBubyBsb25nZXIgc3VwcG9ydGVkIGJ5IEFXUyBMYW1iZGEuIE1pZ3JhdGUgdG8gdGhlIGxhdGVzdCBQeXRob24gcnVudGltZS5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgUFlUSE9OXzNfNyA9IG5ldyBSdW50aW1lKFxuICAgIFwicHl0aG9uMy43XCIsXG4gICAgUnVudGltZUZhbWlseS5QWVRIT04sXG4gICAge1xuICAgICAgc3VwcG9ydHNJbmxpbmVDb2RlOiB0cnVlLFxuICAgICAgc3VwcG9ydHNDb2RlR3VydVByb2ZpbGluZzogdHJ1ZSxcbiAgICB9LFxuICApO1xuXG4gIC8qKlxuICAgKiBUaGUgUHl0aG9uIDMuOCBydW50aW1lIChweXRob24zLjgpXG4gICAqIEBkZXByZWNhdGVkIExlZ2FjeSBydW50aW1lIG5vIGxvbmdlciBzdXBwb3J0ZWQgYnkgQVdTIExhbWJkYS4gTWlncmF0ZSB0byB0aGUgbGF0ZXN0IFB5dGhvbiBydW50aW1lLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBQWVRIT05fM184ID0gbmV3IFJ1bnRpbWUoXG4gICAgXCJweXRob24zLjhcIixcbiAgICBSdW50aW1lRmFtaWx5LlBZVEhPTixcbiAgICB7XG4gICAgICBzdXBwb3J0c0lubGluZUNvZGU6IHRydWUsXG4gICAgICBzdXBwb3J0c0NvZGVHdXJ1UHJvZmlsaW5nOiB0cnVlLFxuICAgIH0sXG4gICk7XG5cbiAgLyoqXG4gICAqIFRoZSBQeXRob24gMy45IHJ1bnRpbWUgKHB5dGhvbjMuOSlcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgUFlUSE9OXzNfOSA9IG5ldyBSdW50aW1lKFxuICAgIFwicHl0aG9uMy45XCIsXG4gICAgUnVudGltZUZhbWlseS5QWVRIT04sXG4gICAge1xuICAgICAgc3VwcG9ydHNJbmxpbmVDb2RlOiB0cnVlLFxuICAgICAgc3VwcG9ydHNDb2RlR3VydVByb2ZpbGluZzogdHJ1ZSxcbiAgICB9LFxuICApO1xuXG4gIC8qKlxuICAgKiBUaGUgUHl0aG9uIDMuMTAgcnVudGltZSAocHl0aG9uMy4xMClcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgUFlUSE9OXzNfMTAgPSBuZXcgUnVudGltZShcbiAgICBcInB5dGhvbjMuMTBcIixcbiAgICBSdW50aW1lRmFtaWx5LlBZVEhPTixcbiAgICB7XG4gICAgICBzdXBwb3J0c0lubGluZUNvZGU6IHRydWUsXG4gICAgICBzdXBwb3J0c0NvZGVHdXJ1UHJvZmlsaW5nOiB0cnVlLFxuICAgIH0sXG4gICk7XG5cbiAgLyoqXG4gICAqIFRoZSBQeXRob24gMy4xMSBydW50aW1lIChweXRob24zLjExKVxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBQWVRIT05fM18xMSA9IG5ldyBSdW50aW1lKFxuICAgIFwicHl0aG9uMy4xMVwiLFxuICAgIFJ1bnRpbWVGYW1pbHkuUFlUSE9OLFxuICAgIHtcbiAgICAgIHN1cHBvcnRzSW5saW5lQ29kZTogdHJ1ZSxcbiAgICAgIHN1cHBvcnRzQ29kZUd1cnVQcm9maWxpbmc6IHRydWUsXG4gICAgfSxcbiAgKTtcblxuICAvKipcbiAgICogVGhlIFB5dGhvbiAzLjEyIHJ1bnRpbWUgKHB5dGhvbjMuMTIpXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFBZVEhPTl8zXzEyID0gbmV3IFJ1bnRpbWUoXG4gICAgXCJweXRob24zLjEyXCIsXG4gICAgUnVudGltZUZhbWlseS5QWVRIT04sXG4gICAge1xuICAgICAgc3VwcG9ydHNJbmxpbmVDb2RlOiB0cnVlLFxuICAgICAgc3VwcG9ydHNDb2RlR3VydVByb2ZpbGluZzogdHJ1ZSxcbiAgICAgIHN1cHBvcnRzU25hcFN0YXJ0OiB0cnVlLFxuICAgIH0sXG4gICk7XG5cbiAgLyoqXG4gICAqIFRoZSBQeXRob24gMy4xMyBydW50aW1lIChweXRob24zLjEzKVxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBQWVRIT05fM18xMyA9IG5ldyBSdW50aW1lKFxuICAgIFwicHl0aG9uMy4xM1wiLFxuICAgIFJ1bnRpbWVGYW1pbHkuUFlUSE9OLFxuICAgIHtcbiAgICAgIHN1cHBvcnRzSW5saW5lQ29kZTogdHJ1ZSxcbiAgICAgIHN1cHBvcnRzQ29kZUd1cnVQcm9maWxpbmc6IHRydWUsXG4gICAgICBzdXBwb3J0c1NuYXBTdGFydDogdHJ1ZSxcbiAgICB9LFxuICApO1xuXG4gIC8qKlxuICAgKiBUaGUgUHl0aG9uIDMuMTQgcnVudGltZSAocHl0aG9uMy4xNClcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgUFlUSE9OXzNfMTQgPSBuZXcgUnVudGltZShcbiAgICBcInB5dGhvbjMuMTRcIixcbiAgICBSdW50aW1lRmFtaWx5LlBZVEhPTixcbiAgICB7XG4gICAgICBzdXBwb3J0c0lubGluZUNvZGU6IHRydWUsXG4gICAgICBzdXBwb3J0c0NvZGVHdXJ1UHJvZmlsaW5nOiB0cnVlLFxuICAgICAgc3VwcG9ydHNTbmFwU3RhcnQ6IHRydWUsXG4gICAgfSxcbiAgKTtcblxuICAvKipcbiAgICogVGhlIEphdmEgOCBydW50aW1lIChqYXZhOClcbiAgICogQGRlcHJlY2F0ZWQgTGVnYWN5IHJ1bnRpbWUgbm8gbG9uZ2VyIHN1cHBvcnRlZCBieSBBV1MgTGFtYmRhLiBNaWdyYXRlIHRvIHRoZSBsYXRlc3QgSmF2YSBydW50aW1lLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBKQVZBXzggPSBuZXcgUnVudGltZShcImphdmE4XCIsIFJ1bnRpbWVGYW1pbHkuSkFWQSwge1xuICAgIHN1cHBvcnRzQ29kZUd1cnVQcm9maWxpbmc6IHRydWUsXG4gIH0pO1xuXG4gIC8qKlxuICAgKiBUaGUgSmF2YSA4IENvcnJldHRvIHJ1bnRpbWUgKGphdmE4LmFsMilcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgSkFWQV84X0NPUlJFVFRPID0gbmV3IFJ1bnRpbWUoXG4gICAgXCJqYXZhOC5hbDJcIixcbiAgICBSdW50aW1lRmFtaWx5LkpBVkEsXG4gICAge1xuICAgICAgc3VwcG9ydHNDb2RlR3VydVByb2ZpbGluZzogdHJ1ZSxcbiAgICB9LFxuICApO1xuXG4gIC8qKlxuICAgKiBUaGUgSmF2YSAxMSBydW50aW1lIChqYXZhMTEpXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEpBVkFfMTEgPSBuZXcgUnVudGltZShcImphdmExMVwiLCBSdW50aW1lRmFtaWx5LkpBVkEsIHtcbiAgICBzdXBwb3J0c0NvZGVHdXJ1UHJvZmlsaW5nOiB0cnVlLFxuICAgIHN1cHBvcnRzU25hcFN0YXJ0OiB0cnVlLFxuICB9KTtcblxuICAvKipcbiAgICogVGhlIEphdmEgMTcgcnVudGltZSAoamF2YTE3KVxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBKQVZBXzE3ID0gbmV3IFJ1bnRpbWUoXCJqYXZhMTdcIiwgUnVudGltZUZhbWlseS5KQVZBLCB7XG4gICAgc3VwcG9ydHNDb2RlR3VydVByb2ZpbGluZzogdHJ1ZSxcbiAgICBzdXBwb3J0c1NuYXBTdGFydDogdHJ1ZSxcbiAgfSk7XG5cbiAgLyoqXG4gICAqIFRoZSBKYXZhIDIxIHJ1bnRpbWUgKGphdmEyMSlcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgSkFWQV8yMSA9IG5ldyBSdW50aW1lKFwiamF2YTIxXCIsIFJ1bnRpbWVGYW1pbHkuSkFWQSwge1xuICAgIHN1cHBvcnRzQ29kZUd1cnVQcm9maWxpbmc6IHRydWUsXG4gICAgc3VwcG9ydHNTbmFwU3RhcnQ6IHRydWUsXG4gIH0pO1xuXG4gIC8qKlxuICAgKiBUaGUgLk5FVCA2IHJ1bnRpbWUgKGRvdG5ldDYpXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IERPVE5FVF82ID0gbmV3IFJ1bnRpbWUoXG4gICAgXCJkb3RuZXQ2XCIsXG4gICAgUnVudGltZUZhbWlseS5ET1RORVRfQ09SRSxcbiAgKTtcblxuICAvKipcbiAgICogVGhlIC5ORVQgOCBydW50aW1lIChkb3RuZXQ4KVxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBET1RORVRfOCA9IG5ldyBSdW50aW1lKFxuICAgIFwiZG90bmV0OFwiLFxuICAgIFJ1bnRpbWVGYW1pbHkuRE9UTkVUX0NPUkUsXG4gICAge1xuICAgICAgc3VwcG9ydHNTbmFwU3RhcnQ6IHRydWUsXG4gICAgfSxcbiAgKTtcblxuICAvKipcbiAgICogVGhlIC5ORVQgOSBydW50aW1lIChkb3RuZXQ5KVxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBET1RORVRfOSA9IG5ldyBSdW50aW1lKFxuICAgIFwiZG90bmV0OVwiLFxuICAgIFJ1bnRpbWVGYW1pbHkuRE9UTkVUX0NPUkUsXG4gICAge1xuICAgICAgc3VwcG9ydHNTbmFwU3RhcnQ6IHRydWUsXG4gICAgfSxcbiAgKTtcblxuICAvKipcbiAgICogVGhlIC5ORVQgQ29yZSAxLjAgcnVudGltZSAoZG90bmV0Y29yZTEuMClcbiAgICogQGRlcHJlY2F0ZWQgTGVnYWN5IHJ1bnRpbWUgbm8gbG9uZ2VyIHN1cHBvcnRlZCBieSBBV1MgTGFtYmRhLiBNaWdyYXRlIHRvIHRoZSBsYXRlc3QgLk5FVCBDb3JlIHJ1bnRpbWUuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IERPVE5FVF9DT1JFXzEgPSBuZXcgUnVudGltZShcbiAgICBcImRvdG5ldGNvcmUxLjBcIixcbiAgICBSdW50aW1lRmFtaWx5LkRPVE5FVF9DT1JFLFxuICApO1xuXG4gIC8qKlxuICAgKiBUaGUgLk5FVCBDb3JlIDIuMCBydW50aW1lIChkb3RuZXRjb3JlMi4wKVxuICAgKiBAZGVwcmVjYXRlZCBMZWdhY3kgcnVudGltZSBubyBsb25nZXIgc3VwcG9ydGVkIGJ5IEFXUyBMYW1iZGEuIE1pZ3JhdGUgdG8gdGhlIGxhdGVzdCAuTkVUIENvcmUgcnVudGltZS5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgRE9UTkVUX0NPUkVfMiA9IG5ldyBSdW50aW1lKFxuICAgIFwiZG90bmV0Y29yZTIuMFwiLFxuICAgIFJ1bnRpbWVGYW1pbHkuRE9UTkVUX0NPUkUsXG4gICk7XG5cbiAgLyoqXG4gICAqIFRoZSAuTkVUIENvcmUgMi4xIHJ1bnRpbWUgKGRvdG5ldGNvcmUyLjEpXG4gICAqIEBkZXByZWNhdGVkIExlZ2FjeSBydW50aW1lIG5vIGxvbmdlciBzdXBwb3J0ZWQgYnkgQVdTIExhbWJkYS4gTWlncmF0ZSB0byB0aGUgbGF0ZXN0IC5ORVQgQ29yZSBydW50aW1lLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBET1RORVRfQ09SRV8yXzEgPSBuZXcgUnVudGltZShcbiAgICBcImRvdG5ldGNvcmUyLjFcIixcbiAgICBSdW50aW1lRmFtaWx5LkRPVE5FVF9DT1JFLFxuICApO1xuXG4gIC8qKlxuICAgKiBUaGUgLk5FVCBDb3JlIDMuMSBydW50aW1lIChkb3RuZXRjb3JlMy4xKVxuICAgKiBAZGVwcmVjYXRlZCBMZWdhY3kgcnVudGltZSBubyBsb25nZXIgc3VwcG9ydGVkIGJ5IEFXUyBMYW1iZGEuIE1pZ3JhdGUgdG8gdGhlIGxhdGVzdCAuTkVUIENvcmUgcnVudGltZS5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgRE9UTkVUX0NPUkVfM18xID0gbmV3IFJ1bnRpbWUoXG4gICAgXCJkb3RuZXRjb3JlMy4xXCIsXG4gICAgUnVudGltZUZhbWlseS5ET1RORVRfQ09SRSxcbiAgKTtcblxuICAvKipcbiAgICogVGhlIEdvIDEueCBydW50aW1lIChnbzEueClcbiAgICogQGRlcHJlY2F0ZWQgTGVnYWN5IHJ1bnRpbWUgbm8gbG9uZ2VyIHN1cHBvcnRlZCBieSBBV1MgTGFtYmRhLiBNaWdyYXRlIHRvIHRoZSBQUk9WSURFRF9BTDIwMjMgcnVudGltZS5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgR09fMV9YID0gbmV3IFJ1bnRpbWUoXCJnbzEueFwiLCBSdW50aW1lRmFtaWx5LkdPKTtcblxuICAvKipcbiAgICogVGhlIFJ1YnkgMi41IHJ1bnRpbWUgKHJ1YnkyLjUpXG4gICAqIEBkZXByZWNhdGVkIExlZ2FjeSBydW50aW1lIG5vIGxvbmdlciBzdXBwb3J0ZWQgYnkgQVdTIExhbWJkYS4gTWlncmF0ZSB0byB0aGUgbGF0ZXN0IFJ1YnkgcnVudGltZS5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgUlVCWV8yXzUgPSBuZXcgUnVudGltZShcInJ1YnkyLjVcIiwgUnVudGltZUZhbWlseS5SVUJZKTtcblxuICAvKipcbiAgICogVGhlIFJ1YnkgMi43IHJ1bnRpbWUgKHJ1YnkyLjcpXG4gICAqIEBkZXByZWNhdGVkIExlZ2FjeSBydW50aW1lIG5vIGxvbmdlciBzdXBwb3J0ZWQgYnkgQVdTIExhbWJkYS4gTWlncmF0ZSB0byB0aGUgbGF0ZXN0IFJ1YnkgcnVudGltZS5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgUlVCWV8yXzcgPSBuZXcgUnVudGltZShcInJ1YnkyLjdcIiwgUnVudGltZUZhbWlseS5SVUJZKTtcblxuICAvKipcbiAgICogVGhlIFJ1YnkgMy4yIHJ1bnRpbWUgKHJ1YnkzLjIpXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFJVQllfM18yID0gbmV3IFJ1bnRpbWUoXCJydWJ5My4yXCIsIFJ1bnRpbWVGYW1pbHkuUlVCWSk7XG5cbiAgLyoqXG4gICAqIFRoZSBSdWJ5IDMuMyBydW50aW1lIChydWJ5My4zKVxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBSVUJZXzNfMyA9IG5ldyBSdW50aW1lKFwicnVieTMuM1wiLCBSdW50aW1lRmFtaWx5LlJVQlkpO1xuXG4gIC8qKlxuICAgKiBUaGUgUnVieSAzLjQgcnVudGltZSAocnVieTMuNClcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgUlVCWV8zXzQgPSBuZXcgUnVudGltZShcInJ1YnkzLjRcIiwgUnVudGltZUZhbWlseS5SVUJZKTtcblxuICAvKipcbiAgICogVGhlIGN1c3RvbSBwcm92aWRlZCBydW50aW1lIChwcm92aWRlZClcbiAgICogQGRlcHJlY2F0ZWQgTGVnYWN5IHJ1bnRpbWUgbm8gbG9uZ2VyIHN1cHBvcnRlZCBieSBBV1MgTGFtYmRhLiBNaWdyYXRlIHRvIHRoZSBsYXRlc3QgcHJvdmlkZWQuYWwyMDIzIHJ1bnRpbWUuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFBST1ZJREVEID0gbmV3IFJ1bnRpbWUoXG4gICAgXCJwcm92aWRlZFwiLFxuICAgIFJ1bnRpbWVGYW1pbHkuT1RIRVIsXG4gICk7XG5cbiAgLyoqXG4gICAqIFRoZSBjdXN0b20gcHJvdmlkZWQgcnVudGltZSB3aXRoIEFtYXpvbiBMaW51eCAyIChwcm92aWRlZC5hbDIpXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFBST1ZJREVEX0FMMiA9IG5ldyBSdW50aW1lKFxuICAgIFwicHJvdmlkZWQuYWwyXCIsXG4gICAgUnVudGltZUZhbWlseS5PVEhFUixcbiAgKTtcblxuICAvKipcbiAgICogVGhlIGN1c3RvbSBwcm92aWRlZCBydW50aW1lIHdpdGggQW1hem9uIExpbnV4IDIwMjMgKHByb3ZpZGVkLmFsMjAyMylcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgUFJPVklERURfQUwyMDIzID0gbmV3IFJ1bnRpbWUoXG4gICAgXCJwcm92aWRlZC5hbDIwMjNcIixcbiAgICBSdW50aW1lRmFtaWx5Lk9USEVSLFxuICApO1xuXG4gIC8qKlxuICAgKiBBIHNwZWNpYWwgcnVudGltZSBlbnRyeSB0byBiZSB1c2VkIHdoZW4gZnVuY3Rpb24gaXMgdXNpbmcgYSBkb2NrZXIgaW1hZ2UuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEZST01fSU1BR0UgPSBuZXcgUnVudGltZShcIkZST01fSU1BR0VcIik7XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoaXMgcnVudGltZSwgYXMgZXhwZWN0ZWQgYnkgdGhlIExhbWJkYSByZXNvdXJjZS5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBuYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIGBgWmlwRmlsZWBgIChha2EgaW5saW5lIGNvZGUpIHByb3BlcnR5IGNhbiBiZSB1c2VkIHdpdGggdGhpc1xuICAgKiBydW50aW1lLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHN1cHBvcnRzSW5saW5lQ29kZTogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hldGhlciB0aGlzIHJ1bnRpbWUgaXMgaW50ZWdyYXRlZCB3aXRoIGFuZCBzdXBwb3J0ZWQgZm9yIHByb2ZpbGluZyB1c2luZyBBbWF6b24gQ29kZUd1cnUgUHJvZmlsZXIuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgc3VwcG9ydHNDb2RlR3VydVByb2ZpbGluZzogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hldGhlciB0aGlzIHJ1bnRpbWUgc3VwcG9ydHMgc25hcHN0YXJ0LlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHN1cHBvcnRzU25hcFN0YXJ0OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgcnVudGltZSBmYW1pbHkuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZmFtaWx5PzogUnVudGltZUZhbWlseTtcblxuICAvKipcbiAgICogVGhlIGJ1bmRsaW5nIERvY2tlciBpbWFnZSBmb3IgdGhpcyBydW50aW1lLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGJ1bmRsaW5nSW1hZ2U6IERvY2tlckltYWdlO1xuXG4gIC8qKlxuICAgKiBFbmFibGVkIGZvciBydW50aW1lIGVudW1zIHRoYXQgYWx3YXlzIHRhcmdldCB0aGUgbGF0ZXN0IGF2YWlsYWJsZS5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBpc1ZhcmlhYmxlOiBib29sZWFuO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBmYW1pbHk/OiBSdW50aW1lRmFtaWx5LFxuICAgIHByb3BzOiBMYW1iZGFSdW50aW1lUHJvcHMgPSB7fSxcbiAgKSB7XG4gICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgICB0aGlzLnN1cHBvcnRzSW5saW5lQ29kZSA9ICEhcHJvcHMuc3VwcG9ydHNJbmxpbmVDb2RlO1xuICAgIHRoaXMuZmFtaWx5ID0gZmFtaWx5O1xuICAgIHRoaXMuaXNWYXJpYWJsZSA9ICEhcHJvcHMuaXNWYXJpYWJsZTtcblxuICAgIGNvbnN0IGltYWdlTmFtZSA9XG4gICAgICBwcm9wcy5idW5kbGluZ0RvY2tlckltYWdlID8/IGBwdWJsaWMuZWNyLmF3cy9zYW0vYnVpbGQtJHtuYW1lfWA7XG4gICAgdGhpcy5idW5kbGluZ0ltYWdlID0gRG9ja2VySW1hZ2UuZnJvbVJlZ2lzdHJ5KGltYWdlTmFtZSk7XG4gICAgdGhpcy5zdXBwb3J0c0NvZGVHdXJ1UHJvZmlsaW5nID0gcHJvcHMuc3VwcG9ydHNDb2RlR3VydVByb2ZpbGluZyA/PyBmYWxzZTtcbiAgICB0aGlzLnN1cHBvcnRzU25hcFN0YXJ0ID0gcHJvcHMuc3VwcG9ydHNTbmFwU3RhcnQgPz8gZmFsc2U7XG5cbiAgICBSdW50aW1lLkFMTC5wdXNoKHRoaXMpO1xuICB9XG5cbiAgcHVibGljIHRvU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMubmFtZTtcbiAgfVxuXG4gIHB1YmxpYyBydW50aW1lRXF1YWxzKG90aGVyOiBSdW50aW1lKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgIG90aGVyLm5hbWUgPT09IHRoaXMubmFtZSAmJlxuICAgICAgb3RoZXIuZmFtaWx5ID09PSB0aGlzLmZhbWlseSAmJlxuICAgICAgb3RoZXIuc3VwcG9ydHNJbmxpbmVDb2RlID09PSB0aGlzLnN1cHBvcnRzSW5saW5lQ29kZVxuICAgICk7XG4gIH1cbn1cblxuLyoqXG4gKiBUaGUgbGF0ZXN0IExhbWJkYSBub2RlIHJ1bnRpbWUgYXZhaWxhYmxlIGJ5IEFXUyByZWdpb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZXRlcm1pbmVMYXRlc3ROb2RlUnVudGltZShzY29wZTogQ29uc3RydWN0KTogUnVudGltZSB7XG4gIC8vIFJ1bnRpbWUgcmVnaW9uYWwgZmFjdCBzaG91bGQgYWx3YXlzIHJldHVybiBhIGtub3duIHJ1bnRpbWUgc3RyaW5nIHRoYXQgUnVudGltZSBjYW4gaW5kZXggb2ZmLCBidXQgZm9yIHR5cGVcbiAgLy8gc2FmZXR5IHdlIGFsc28gZGVmYXVsdCBpdCBoZXJlLlxuICBjb25zdCBydW50aW1lTmFtZSA9IHJ1bnRpbWVMb29rdXAoXG4gICAgQXdzU3RhY2sub2ZBd3NDb25zdHJ1Y3Qoc2NvcGUpLnJlZ2lvbixcbiAgICBSdW50aW1lLk5PREVKU18xOF9YLm5hbWUsXG4gICk7XG4gIHJldHVybiBuZXcgUnVudGltZShydW50aW1lTmFtZSwgUnVudGltZUZhbWlseS5OT0RFSlMsIHtcbiAgICBzdXBwb3J0c0lubGluZUNvZGU6IHRydWUsXG4gICAgaXNWYXJpYWJsZTogdHJ1ZSxcbiAgfSk7XG59XG5cbi8vIEZhY3QgVGFibGUgTW9jayBmdW5jdGlvbnNcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9hd3MvYXdzLWNkay9ibG9iL21haW4vcGFja2FnZXMvYXdzLWNkay1saWIvcmVnaW9uLWluZm8vYnVpbGQtdG9vbHMvZmFjdC10YWJsZXMudHNcblxuZXhwb3J0IGZ1bmN0aW9uIHJ1bnRpbWVMb29rdXAocmVnaW9uOiBzdHJpbmcsIGRlZmF1bHRWYWx1ZT86IHN0cmluZyk6IHN0cmluZyB7XG4gIGlmIChUb2tlbi5pc1VucmVzb2x2ZWQocmVnaW9uKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIkNhbm5vdCBkZXRlcm1pbmUgcmVnaW9uIHBhcnRpdGlvbiBmb3IgdW5yZXNvbHZlZCByZWdpb25cIik7XG4gIH1cbiAgY29uc3QgeyBwYXJ0aXRpb24gfSA9IHBhcnRpdGlvbkxvb2t1cChyZWdpb24pO1xuICBjb25zdCBydW50aW1lID0gTEFURVNUX05PREVfUlVOVElNRV9NQVBbcGFydGl0aW9uXSA/PyBkZWZhdWx0VmFsdWU7XG4gIGlmICghcnVudGltZSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBObyBydW50aW1lIGZvdW5kIGZvciBwYXJ0aXRpb24gJHtwYXJ0aXRpb259IGluIHJlZ2lvbiAke3JlZ2lvbn0uYCxcbiAgICApO1xuICB9XG4gIHJldHVybiBydW50aW1lO1xufVxuXG5lbnVtIFJ1bnRpbWVGYWN0IHtcbiAgTk9ERV8xOCA9IFwibm9kZWpzMTgueFwiLFxuICBOT0RFXzIwID0gXCJub2RlanMyMC54XCIsXG4gIE5PREVfMjIgPSBcIm5vZGVqczIyLnhcIixcbn1cblxuY29uc3QgTEFURVNUX05PREVfUlVOVElNRV9NQVA6IFJlY29yZDxQYXJ0aXRpb24sIHN0cmluZz4gPSB7XG4gIFtQYXJ0aXRpb24uRGVmYXVsdF06IFJ1bnRpbWVGYWN0Lk5PREVfMjIsXG4gIFtQYXJ0aXRpb24uQ25dOiBSdW50aW1lRmFjdC5OT0RFXzIyLFxuICBbUGFydGl0aW9uLlVzR292XTogUnVudGltZUZhY3QuTk9ERV8yMixcbiAgW1BhcnRpdGlvbi5Vc0lzb106IFJ1bnRpbWVGYWN0Lk5PREVfMjIsXG4gIFtQYXJ0aXRpb24uVXNJc29CXTogUnVudGltZUZhY3QuTk9ERV8yMixcbiAgW1BhcnRpdGlvbi5Vc0lzb0ZdOiBSdW50aW1lRmFjdC5OT0RFXzIyLFxuICBbUGFydGl0aW9uLkV1SXNvRV06IFJ1bnRpbWVGYWN0Lk5PREVfMjIsXG59O1xuIl19
319
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVudGltZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hd3MvY29tcHV0ZS9ydW50aW1lLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUF3aUJBLGdFQVdDOztBQW5qQkQsc0RBQWdEO0FBRWhELGdEQUFnRDtBQUNoRCw2Q0FBNkM7QUFDN0MsNENBQXdDO0FBa0N4QyxJQUFZLGFBUVg7QUFSRCxXQUFZLGFBQWE7SUFDdkIscURBQU0sQ0FBQTtJQUNOLGlEQUFJLENBQUE7SUFDSixxREFBTSxDQUFBO0lBQ04sK0RBQVcsQ0FBQTtJQUNYLDZDQUFFLENBQUE7SUFDRixpREFBSSxDQUFBO0lBQ0osbURBQUssQ0FBQTtBQUNQLENBQUMsRUFSVyxhQUFhLDZCQUFiLGFBQWEsUUFReEI7QUFFRDs7Ozs7R0FLRztBQUNILE1BQWEsT0FBTztJQStjbEIsWUFDRSxJQUFZLEVBQ1osTUFBc0IsRUFDdEIsUUFBNEIsRUFBRTtRQUU5QixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztRQUNqQixJQUFJLENBQUMsa0JBQWtCLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQztRQUNyRCxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztRQUNyQixJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDO1FBRXJDLE1BQU0sU0FBUyxHQUNiLEtBQUssQ0FBQyxtQkFBbUIsSUFBSSw0QkFBNEIsSUFBSSxFQUFFLENBQUM7UUFDbEUsSUFBSSxDQUFDLGFBQWEsR0FBRyxzQkFBVyxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUN6RCxJQUFJLENBQUMseUJBQXlCLEdBQUcsS0FBSyxDQUFDLHlCQUF5QixJQUFJLEtBQUssQ0FBQztRQUMxRSxJQUFJLENBQUMsaUJBQWlCLEdBQUcsS0FBSyxDQUFDLGlCQUFpQixJQUFJLEtBQUssQ0FBQztRQUUxRCxPQUFPLENBQUMs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Q0FBQyxDQUFDLFlBQVksQ0FDN0Qsc0JBQVEsQ0FBQyxtQkFBbUIsRUFDNUIsT0FBTyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQ3pCLENBQUM7SUFDRixPQUFPLElBQUksT0FBTyxDQUFDLFdBQVcsRUFBRSxhQUFhLENBQUMsTUFBTSxFQUFFO1FBQ3BELGtCQUFrQixFQUFFLElBQUk7UUFDeEIsVUFBVSxFQUFFLElBQUk7S0FDakIsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEZhY3ROYW1lIH0gZnJvbSBcIkBhd3MtY2RrL3JlZ2lvbi1pbmZvXCI7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuLy8gVE9ETzogdXNlIEBjZGt0Zi9wcm92aWRlci1kb2NrZXIgZm9yIGJ1bmRsaW5nXG5pbXBvcnQgeyBEb2NrZXJJbWFnZSB9IGZyb20gXCIuLi8uLi9idW5kbGluZ1wiO1xuaW1wb3J0IHsgQXdzU3RhY2sgfSBmcm9tIFwiLi4vYXdzLXN0YWNrXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTGFtYmRhUnVudGltZVByb3BzIHtcbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIGBgWmlwRmlsZWBgIChha2EgaW5saW5lIGNvZGUpIHByb3BlcnR5IGNhbiBiZSB1c2VkIHdpdGggdGhpcyBydW50aW1lLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgc3VwcG9ydHNJbmxpbmVDb2RlPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hldGhlciB0aGUgcnVudGltZSBlbnVtIGlzIG1lYW50IHRvIGNoYW5nZSBvdmVyIHRpbWUsIElFIE5PREVKU19MQVRFU1QuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSBpc1ZhcmlhYmxlPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIERvY2tlciBpbWFnZSBuYW1lIHRvIGJlIHVzZWQgZm9yIGJ1bmRsaW5nIGluIHRoaXMgcnVudGltZS5cbiAgICogQGRlZmF1bHQgLSB0aGUgbGF0ZXN0IGRvY2tlciBpbWFnZSBcImFtYXpvbi9wdWJsaWMuZWNyLmF3cy9zYW0vYnVpbGQtPHJ1bnRpbWU+XCIgZnJvbSBodHRwczovL2dhbGxlcnkuZWNyLmF3c1xuICAgKi9cbiAgcmVhZG9ubHkgYnVuZGxpbmdEb2NrZXJJbWFnZT86IHN0cmluZztcblxuICAvKipcbiAgICogV2hldGhlciB0aGlzIHJ1bnRpbWUgaXMgaW50ZWdyYXRlZCB3aXRoIGFuZCBzdXBwb3J0ZWQgZm9yIHByb2ZpbGluZyB1c2luZyBBbWF6b24gQ29kZUd1cnUgUHJvZmlsZXIuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSBzdXBwb3J0c0NvZGVHdXJ1UHJvZmlsaW5nPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hldGhlciB0aGlzIHJ1bnRpbWUgc3VwcG9ydHMgU25hcFN0YXJ0LlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgc3VwcG9ydHNTbmFwU3RhcnQ/OiBib29sZWFuO1xufVxuXG5leHBvcnQgZW51bSBSdW50aW1lRmFtaWx5IHtcbiAgTk9ERUpTLFxuICBKQVZBLFxuICBQWVRIT04sXG4gIERPVE5FVF9DT1JFLFxuICBHTyxcbiAgUlVCWSxcbiAgT1RIRVIsXG59XG5cbi8qKlxuICogTGFtYmRhIGZ1bmN0aW9uIHJ1bnRpbWUgZW52aXJvbm1lbnQuXG4gKlxuICogSWYgeW91IG5lZWQgdG8gdXNlIGEgcnVudGltZSBuYW1lIHRoYXQgZG9lc24ndCBleGlzdCBhcyBhIHN0YXRpYyBtZW1iZXIsIHlvdVxuICogY2FuIGluc3RhbnRpYXRlIGEgYFJ1bnRpbWVgIG9iamVjdCwgZS5nOiBgbmV3IFJ1bnRpbWUoJ25vZGVqczk5Ljk5JylgLlxuICovXG5leHBvcnQgY2xhc3MgUnVudGltZSB7XG4gIC8qKiBBIGxpc3Qgb2YgYWxsIGtub3duIGBSdW50aW1lYCdzLiAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEFMTCA9IG5ldyBBcnJheTxSdW50aW1lPigpO1xuXG4gIC8qKlxuICAgKiBUaGUgTm9kZUpTIHJ1bnRpbWUgKG5vZGVqcylcbiAgICogQGRlcHJlY2F0ZWQgTGVnYWN5IHJ1bnRpbWUgbm8gbG9uZ2VyIHN1cHBvcnRlZCBieSBBV1MgTGFtYmRhLiBNaWdyYXRlIHRvIHRoZSBsYXRlc3QgTm9kZUpTIHJ1bnRpbWUuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IE5PREVKUyA9IG5ldyBSdW50aW1lKFwibm9kZWpzXCIsIFJ1bnRpbWVGYW1pbHkuTk9ERUpTLCB7XG4gICAgc3VwcG9ydHNJbmxpbmVDb2RlOiB0cnVlLFxuICB9KTtcblxuICAvKipcbiAgICogVGhlIE5vZGVKUyA0LjMgcnVudGltZSAobm9kZWpzNC4zKVxuICAgKiBAZGVwcmVjYXRlZCBMZWdhY3kgcnVudGltZSBubyBsb25nZXIgc3VwcG9ydGVkIGJ5IEFXUyBMYW1iZGEuIE1pZ3JhdGUgdG8gdGhlIGxhdGVzdCBOb2RlSlMgcnVudGltZS5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgTk9ERUpTXzRfMyA9IG5ldyBSdW50aW1lKFxuICAgIFwibm9kZWpzNC4zXCIsXG4gICAgUnVudGltZUZhbWlseS5OT0RFSlMsXG4gICAgeyBzdXBwb3J0c0lubGluZUNvZGU6IHRydWUgfSxcbiAgKTtcblxuICAvKipcbiAgICogVGhlIE5vZGVKUyA2LjEwIHJ1bnRpbWUgKG5vZGVqczYuMTApXG4gICAqIEBkZXByZWNhdGVkIExlZ2FjeSBydW50aW1lIG5vIGxvbmdlciBzdXBwb3J0ZWQgYnkgQVdTIExhbWJkYS4gTWlncmF0ZSB0byB0aGUgbGF0ZXN0IE5vZGVKUyBydW50aW1lLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBOT0RFSlNfNl8xMCA9IG5ldyBSdW50aW1lKFxuICAgIFwibm9kZWpzNi4xMFwiLFxuICAgIFJ1bnRpbWVGYW1pbHkuTk9ERUpTLFxuICAgIHsgc3VwcG9ydHNJbmxpbmVDb2RlOiB0cnVlIH0sXG4gICk7XG5cbiAgLyoqXG4gICAqIFRoZSBOb2RlSlMgOC4xMCBydW50aW1lIChub2RlanM4LjEwKVxuICAgKiBAZGVwcmVjYXRlZCBMZWdhY3kgcnVudGltZSBubyBsb25nZXIgc3VwcG9ydGVkIGJ5IEFXUyBMYW1iZGEuIE1pZ3JhdGUgdG8gdGhlIGxhdGVzdCBOb2RlSlMgcnVudGltZS5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgTk9ERUpTXzhfMTAgPSBuZXcgUnVudGltZShcbiAgICBcIm5vZGVqczguMTBcIixcbiAgICBSdW50aW1lRmFtaWx5Lk5PREVKUyxcbiAgICB7IHN1cHBvcnRzSW5saW5lQ29kZTogdHJ1ZSB9LFxuICApO1xuXG4gIC8qKlxuICAgKiBUaGUgTm9kZUpTIDEwLnggcnVudGltZSAobm9kZWpzMTAueClcbiAgICogQGRlcHJlY2F0ZWQgTGVnYWN5IHJ1bnRpbWUgbm8gbG9uZ2VyIHN1cHBvcnRlZCBieSBBV1MgTGFtYmRhLiBNaWdyYXRlIHRvIHRoZSBsYXRlc3QgTm9kZUpTIHJ1bnRpbWUuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IE5PREVKU18xMF9YID0gbmV3IFJ1bnRpbWUoXG4gICAgXCJub2RlanMxMC54XCIsXG4gICAgUnVudGltZUZhbWlseS5OT0RFSlMsXG4gICAgeyBzdXBwb3J0c0lubGluZUNvZGU6IHRydWUgfSxcbiAgKTtcblxuICAvKipcbiAgICogVGhlIE5vZGVKUyAxMi54IHJ1bnRpbWUgKG5vZGVqczEyLngpXG4gICAqIEBkZXByZWNhdGVkIExlZ2FjeSBydW50aW1lIG5vIGxvbmdlciBzdXBwb3J0ZWQgYnkgQVdTIExhbWJkYS4gTWlncmF0ZSB0byB0aGUgbGF0ZXN0IE5vZGVKUyBydW50aW1lLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBOT0RFSlNfMTJfWCA9IG5ldyBSdW50aW1lKFxuICAgIFwibm9kZWpzMTIueFwiLFxuICAgIFJ1bnRpbWVGYW1pbHkuTk9ERUpTLFxuICAgIHsgc3VwcG9ydHNJbmxpbmVDb2RlOiB0cnVlIH0sXG4gICk7XG5cbiAgLyoqXG4gICAqIFRoZSBOb2RlSlMgMTQueCBydW50aW1lIChub2RlanMxNC54KVxuICAgKiBAZGVwcmVjYXRlZCBMZWdhY3kgcnVudGltZSBubyBsb25nZXIgc3VwcG9ydGVkIGJ5IEFXUyBMYW1iZGEuIE1pZ3JhdGUgdG8gdGhlIGxhdGVzdCBOb2RlSlMgcnVudGltZS5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgTk9ERUpTXzE0X1ggPSBuZXcgUnVudGltZShcbiAgICBcIm5vZGVqczE0LnhcIixcbiAgICBSdW50aW1lRmFtaWx5Lk5PREVKUyxcbiAgICB7IHN1cHBvcnRzSW5saW5lQ29kZTogdHJ1ZSB9LFxuICApO1xuXG4gIC8qKlxuICAgKiBUaGUgTm9kZUpTIDE2LnggcnVudGltZSAobm9kZWpzMTYueClcbiAgICogQGRlcHJlY2F0ZWQgTGVnYWN5IHJ1bnRpbWUgbm8gbG9uZ2VyIHN1cHBvcnRlZCBieSBBV1MgTGFtYmRhLiBNaWdyYXRlIHRvIHRoZSBsYXRlc3QgTm9kZUpTIHJ1bnRpbWUuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IE5PREVKU18xNl9YID0gbmV3IFJ1bnRpbWUoXG4gICAgXCJub2RlanMxNi54XCIsXG4gICAgUnVudGltZUZhbWlseS5OT0RFSlMsXG4gICAgeyBzdXBwb3J0c0lubGluZUNvZGU6IHRydWUgfSxcbiAgKTtcblxuICAvKipcbiAgICogVGhlIE5vZGVKUyAxOC54IHJ1bnRpbWUgKG5vZGVqczE4LngpXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IE5PREVKU18xOF9YID0gbmV3IFJ1bnRpbWUoXG4gICAgXCJub2RlanMxOC54XCIsXG4gICAgUnVudGltZUZhbWlseS5OT0RFSlMsXG4gICAgeyBzdXBwb3J0c0lubGluZUNvZGU6IHRydWUgfSxcbiAgKTtcblxuICAvKipcbiAgICogVGhlIE5vZGVKUyAyMC54IHJ1bnRpbWUgKG5vZGVqczIwLngpXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IE5PREVKU18yMF9YID0gbmV3IFJ1bnRpbWUoXG4gICAgXCJub2RlanMyMC54XCIsXG4gICAgUnVudGltZUZhbWlseS5OT0RFSlMsXG4gICAgeyBzdXBwb3J0c0lubGluZUNvZGU6IHRydWUgfSxcbiAgKTtcblxuICAvKipcbiAgICogVGhlIGxhdGVzdCBOb2RlSlMgdmVyc2lvbiBjdXJyZW50bHkgYXZhaWxhYmxlIGluIEFMTCByZWdpb25zIChub3QgbmVjZXNzYXJpbHkgdGhlIGxhdGVzdCBOb2RlSlMgdmVyc2lvblxuICAgKiBhdmFpbGFibGUgaW4gWU9VUiByZWdpb24pLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBOT0RFSlNfTEFURVNUID0gbmV3IFJ1bnRpbWUoXG4gICAgXCJub2RlanMyMi54XCIsXG4gICAgUnVudGltZUZhbWlseS5OT0RFSlMsXG4gICAgeyBzdXBwb3J0c0lubGluZUNvZGU6IHRydWUsIGlzVmFyaWFibGU6IHRydWUgfSxcbiAgKTtcblxuICAvKipcbiAgICogVGhlIE5vZGVKUyAyMi54IHJ1bnRpbWUgKG5vZGVqczIyLngpXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IE5PREVKU18yMl9YID0gbmV3IFJ1bnRpbWUoXG4gICAgXCJub2RlanMyMi54XCIsXG4gICAgUnVudGltZUZhbWlseS5OT0RFSlMsXG4gICAgeyBzdXBwb3J0c0lubGluZUNvZGU6IHRydWUgfSxcbiAgKTtcblxuICAvKipcbiAgICogVGhlIE5vZGVKUyAyNC54IHJ1bnRpbWUgKG5vZGVqczI0LngpXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IE5PREVKU18yNF9YID0gbmV3IFJ1bnRpbWUoXG4gICAgXCJub2RlanMyNC54XCIsXG4gICAgUnVudGltZUZhbWlseS5OT0RFSlMsXG4gICAgeyBzdXBwb3J0c0lubGluZUNvZGU6IHRydWUgfSxcbiAgKTtcblxuICAvKipcbiAgICogVGhlIFB5dGhvbiAyLjcgcnVudGltZSAocHl0aG9uMi43KVxuICAgKiBAZGVwcmVjYXRlZCBMZWdhY3kgcnVudGltZSBubyBsb25nZXIgc3VwcG9ydGVkIGJ5IEFXUyBMYW1iZGEuIE1pZ3JhdGUgdG8gdGhlIGxhdGVzdCBQeXRob24gcnVudGltZS5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgUFlUSE9OXzJfNyA9IG5ldyBSdW50aW1lKFxuICAgIFwicHl0aG9uMi43XCIsXG4gICAgUnVudGltZUZhbWlseS5QWVRIT04sXG4gICAgeyBzdXBwb3J0c0lubGluZUNvZGU6IHRydWUgfSxcbiAgKTtcblxuICAvKipcbiAgICogVGhlIFB5dGhvbiAzLjYgcnVudGltZSAocHl0aG9uMy42KSAobm90IHJlY29tbWVuZGVkKVxuICAgKlxuICAgKiBUaGUgUHl0aG9uIDMuNiBydW50aW1lIGlzIGRlcHJlY2F0ZWQgYXMgb2YgSnVseSAyMDIyLlxuICAgKlxuICAgKiBAZGVwcmVjYXRlZCBMZWdhY3kgcnVudGltZSBubyBsb25nZXIgc3VwcG9ydGVkIGJ5IEFXUyBMYW1iZGEuIE1pZ3JhdGUgdG8gdGhlIGxhdGVzdCBQeXRob24gcnVudGltZS5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgUFlUSE9OXzNfNiA9IG5ldyBSdW50aW1lKFxuICAgIFwicHl0aG9uMy42XCIsXG4gICAgUnVudGltZUZhbWlseS5QWVRIT04sXG4gICAge1xuICAgICAgc3VwcG9ydHNJbmxpbmVDb2RlOiB0cnVlLFxuICAgICAgc3VwcG9ydHNDb2RlR3VydVByb2ZpbGluZzogdHJ1ZSxcbiAgICB9LFxuICApO1xuXG4gIC8qKlxuICAgKiBUaGUgUHl0aG9uIDMuNyBydW50aW1lIChweXRob24zLjcpXG4gICAqIEBkZXByZWNhdGVkIExlZ2FjeSBydW50aW1lIG5vIGxvbmdlciBzdXBwb3J0ZWQgYnkgQVdTIExhbWJkYS4gTWlncmF0ZSB0byB0aGUgbGF0ZXN0IFB5dGhvbiBydW50aW1lLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBQWVRIT05fM183ID0gbmV3IFJ1bnRpbWUoXG4gICAgXCJweXRob24zLjdcIixcbiAgICBSdW50aW1lRmFtaWx5LlBZVEhPTixcbiAgICB7XG4gICAgICBzdXBwb3J0c0lubGluZUNvZGU6IHRydWUsXG4gICAgICBzdXBwb3J0c0NvZGVHdXJ1UHJvZmlsaW5nOiB0cnVlLFxuICAgIH0sXG4gICk7XG5cbiAgLyoqXG4gICAqIFRoZSBQeXRob24gMy44IHJ1bnRpbWUgKHB5dGhvbjMuOClcbiAgICogQGRlcHJlY2F0ZWQgTGVnYWN5IHJ1bnRpbWUgbm8gbG9uZ2VyIHN1cHBvcnRlZCBieSBBV1MgTGFtYmRhLiBNaWdyYXRlIHRvIHRoZSBsYXRlc3QgUHl0aG9uIHJ1bnRpbWUuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFBZVEhPTl8zXzggPSBuZXcgUnVudGltZShcbiAgICBcInB5dGhvbjMuOFwiLFxuICAgIFJ1bnRpbWVGYW1pbHkuUFlUSE9OLFxuICAgIHtcbiAgICAgIHN1cHBvcnRzSW5saW5lQ29kZTogdHJ1ZSxcbiAgICAgIHN1cHBvcnRzQ29kZUd1cnVQcm9maWxpbmc6IHRydWUsXG4gICAgfSxcbiAgKTtcblxuICAvKipcbiAgICogVGhlIFB5dGhvbiAzLjkgcnVudGltZSAocHl0aG9uMy45KVxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBQWVRIT05fM185ID0gbmV3IFJ1bnRpbWUoXG4gICAgXCJweXRob24zLjlcIixcbiAgICBSdW50aW1lRmFtaWx5LlBZVEhPTixcbiAgICB7XG4gICAgICBzdXBwb3J0c0lubGluZUNvZGU6IHRydWUsXG4gICAgICBzdXBwb3J0c0NvZGVHdXJ1UHJvZmlsaW5nOiB0cnVlLFxuICAgIH0sXG4gICk7XG5cbiAgLyoqXG4gICAqIFRoZSBQeXRob24gMy4xMCBydW50aW1lIChweXRob24zLjEwKVxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBQWVRIT05fM18xMCA9IG5ldyBSdW50aW1lKFxuICAgIFwicHl0aG9uMy4xMFwiLFxuICAgIFJ1bnRpbWVGYW1pbHkuUFlUSE9OLFxuICAgIHtcbiAgICAgIHN1cHBvcnRzSW5saW5lQ29kZTogdHJ1ZSxcbiAgICAgIHN1cHBvcnRzQ29kZUd1cnVQcm9maWxpbmc6IHRydWUsXG4gICAgfSxcbiAgKTtcblxuICAvKipcbiAgICogVGhlIFB5dGhvbiAzLjExIHJ1bnRpbWUgKHB5dGhvbjMuMTEpXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFBZVEhPTl8zXzExID0gbmV3IFJ1bnRpbWUoXG4gICAgXCJweXRob24zLjExXCIsXG4gICAgUnVudGltZUZhbWlseS5QWVRIT04sXG4gICAge1xuICAgICAgc3VwcG9ydHNJbmxpbmVDb2RlOiB0cnVlLFxuICAgICAgc3VwcG9ydHNDb2RlR3VydVByb2ZpbGluZzogdHJ1ZSxcbiAgICB9LFxuICApO1xuXG4gIC8qKlxuICAgKiBUaGUgUHl0aG9uIDMuMTIgcnVudGltZSAocHl0aG9uMy4xMilcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgUFlUSE9OXzNfMTIgPSBuZXcgUnVudGltZShcbiAgICBcInB5dGhvbjMuMTJcIixcbiAgICBSdW50aW1lRmFtaWx5LlBZVEhPTixcbiAgICB7XG4gICAgICBzdXBwb3J0c0lubGluZUNvZGU6IHRydWUsXG4gICAgICBzdXBwb3J0c0NvZGVHdXJ1UHJvZmlsaW5nOiB0cnVlLFxuICAgICAgc3VwcG9ydHNTbmFwU3RhcnQ6IHRydWUsXG4gICAgfSxcbiAgKTtcblxuICAvKipcbiAgICogVGhlIFB5dGhvbiAzLjEzIHJ1bnRpbWUgKHB5dGhvbjMuMTMpXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFBZVEhPTl8zXzEzID0gbmV3IFJ1bnRpbWUoXG4gICAgXCJweXRob24zLjEzXCIsXG4gICAgUnVudGltZUZhbWlseS5QWVRIT04sXG4gICAge1xuICAgICAgc3VwcG9ydHNJbmxpbmVDb2RlOiB0cnVlLFxuICAgICAgc3VwcG9ydHNDb2RlR3VydVByb2ZpbGluZzogdHJ1ZSxcbiAgICAgIHN1cHBvcnRzU25hcFN0YXJ0OiB0cnVlLFxuICAgIH0sXG4gICk7XG5cbiAgLyoqXG4gICAqIFRoZSBQeXRob24gMy4xNCBydW50aW1lIChweXRob24zLjE0KVxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBQWVRIT05fM18xNCA9IG5ldyBSdW50aW1lKFxuICAgIFwicHl0aG9uMy4xNFwiLFxuICAgIFJ1bnRpbWVGYW1pbHkuUFlUSE9OLFxuICAgIHtcbiAgICAgIHN1cHBvcnRzSW5saW5lQ29kZTogdHJ1ZSxcbiAgICAgIHN1cHBvcnRzQ29kZUd1cnVQcm9maWxpbmc6IHRydWUsXG4gICAgICBzdXBwb3J0c1NuYXBTdGFydDogdHJ1ZSxcbiAgICB9LFxuICApO1xuXG4gIC8qKlxuICAgKiBUaGUgSmF2YSA4IHJ1bnRpbWUgKGphdmE4KVxuICAgKiBAZGVwcmVjYXRlZCBMZWdhY3kgcnVudGltZSBubyBsb25nZXIgc3VwcG9ydGVkIGJ5IEFXUyBMYW1iZGEuIE1pZ3JhdGUgdG8gdGhlIGxhdGVzdCBKYXZhIHJ1bnRpbWUuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEpBVkFfOCA9IG5ldyBSdW50aW1lKFwiamF2YThcIiwgUnVudGltZUZhbWlseS5KQVZBLCB7XG4gICAgc3VwcG9ydHNDb2RlR3VydVByb2ZpbGluZzogdHJ1ZSxcbiAgfSk7XG5cbiAgLyoqXG4gICAqIFRoZSBKYXZhIDggQ29ycmV0dG8gcnVudGltZSAoamF2YTguYWwyKVxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBKQVZBXzhfQ09SUkVUVE8gPSBuZXcgUnVudGltZShcbiAgICBcImphdmE4LmFsMlwiLFxuICAgIFJ1bnRpbWVGYW1pbHkuSkFWQSxcbiAgICB7XG4gICAgICBzdXBwb3J0c0NvZGVHdXJ1UHJvZmlsaW5nOiB0cnVlLFxuICAgIH0sXG4gICk7XG5cbiAgLyoqXG4gICAqIFRoZSBKYXZhIDExIHJ1bnRpbWUgKGphdmExMSlcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgSkFWQV8xMSA9IG5ldyBSdW50aW1lKFwiamF2YTExXCIsIFJ1bnRpbWVGYW1pbHkuSkFWQSwge1xuICAgIHN1cHBvcnRzQ29kZUd1cnVQcm9maWxpbmc6IHRydWUsXG4gICAgc3VwcG9ydHNTbmFwU3RhcnQ6IHRydWUsXG4gIH0pO1xuXG4gIC8qKlxuICAgKiBUaGUgSmF2YSAxNyBydW50aW1lIChqYXZhMTcpXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEpBVkFfMTcgPSBuZXcgUnVudGltZShcImphdmExN1wiLCBSdW50aW1lRmFtaWx5LkpBVkEsIHtcbiAgICBzdXBwb3J0c0NvZGVHdXJ1UHJvZmlsaW5nOiB0cnVlLFxuICAgIHN1cHBvcnRzU25hcFN0YXJ0OiB0cnVlLFxuICB9KTtcblxuICAvKipcbiAgICogVGhlIEphdmEgMjEgcnVudGltZSAoamF2YTIxKVxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBKQVZBXzIxID0gbmV3IFJ1bnRpbWUoXCJqYXZhMjFcIiwgUnVudGltZUZhbWlseS5KQVZBLCB7XG4gICAgc3VwcG9ydHNDb2RlR3VydVByb2ZpbGluZzogdHJ1ZSxcbiAgICBzdXBwb3J0c1NuYXBTdGFydDogdHJ1ZSxcbiAgfSk7XG5cbiAgLyoqXG4gICAqIFRoZSAuTkVUIDYgcnVudGltZSAoZG90bmV0NilcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgRE9UTkVUXzYgPSBuZXcgUnVudGltZShcbiAgICBcImRvdG5ldDZcIixcbiAgICBSdW50aW1lRmFtaWx5LkRPVE5FVF9DT1JFLFxuICApO1xuXG4gIC8qKlxuICAgKiBUaGUgLk5FVCA4IHJ1bnRpbWUgKGRvdG5ldDgpXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IERPVE5FVF84ID0gbmV3IFJ1bnRpbWUoXG4gICAgXCJkb3RuZXQ4XCIsXG4gICAgUnVudGltZUZhbWlseS5ET1RORVRfQ09SRSxcbiAgICB7XG4gICAgICBzdXBwb3J0c1NuYXBTdGFydDogdHJ1ZSxcbiAgICB9LFxuICApO1xuXG4gIC8qKlxuICAgKiBUaGUgLk5FVCA5IHJ1bnRpbWUgKGRvdG5ldDkpXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IERPVE5FVF85ID0gbmV3IFJ1bnRpbWUoXG4gICAgXCJkb3RuZXQ5XCIsXG4gICAgUnVudGltZUZhbWlseS5ET1RORVRfQ09SRSxcbiAgICB7XG4gICAgICBzdXBwb3J0c1NuYXBTdGFydDogdHJ1ZSxcbiAgICB9LFxuICApO1xuXG4gIC8qKlxuICAgKiBUaGUgLk5FVCBDb3JlIDEuMCBydW50aW1lIChkb3RuZXRjb3JlMS4wKVxuICAgKiBAZGVwcmVjYXRlZCBMZWdhY3kgcnVudGltZSBubyBsb25nZXIgc3VwcG9ydGVkIGJ5IEFXUyBMYW1iZGEuIE1pZ3JhdGUgdG8gdGhlIGxhdGVzdCAuTkVUIENvcmUgcnVudGltZS5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgRE9UTkVUX0NPUkVfMSA9IG5ldyBSdW50aW1lKFxuICAgIFwiZG90bmV0Y29yZTEuMFwiLFxuICAgIFJ1bnRpbWVGYW1pbHkuRE9UTkVUX0NPUkUsXG4gICk7XG5cbiAgLyoqXG4gICAqIFRoZSAuTkVUIENvcmUgMi4wIHJ1bnRpbWUgKGRvdG5ldGNvcmUyLjApXG4gICAqIEBkZXByZWNhdGVkIExlZ2FjeSBydW50aW1lIG5vIGxvbmdlciBzdXBwb3J0ZWQgYnkgQVdTIExhbWJkYS4gTWlncmF0ZSB0byB0aGUgbGF0ZXN0IC5ORVQgQ29yZSBydW50aW1lLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBET1RORVRfQ09SRV8yID0gbmV3IFJ1bnRpbWUoXG4gICAgXCJkb3RuZXRjb3JlMi4wXCIsXG4gICAgUnVudGltZUZhbWlseS5ET1RORVRfQ09SRSxcbiAgKTtcblxuICAvKipcbiAgICogVGhlIC5ORVQgQ29yZSAyLjEgcnVudGltZSAoZG90bmV0Y29yZTIuMSlcbiAgICogQGRlcHJlY2F0ZWQgTGVnYWN5IHJ1bnRpbWUgbm8gbG9uZ2VyIHN1cHBvcnRlZCBieSBBV1MgTGFtYmRhLiBNaWdyYXRlIHRvIHRoZSBsYXRlc3QgLk5FVCBDb3JlIHJ1bnRpbWUuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IERPVE5FVF9DT1JFXzJfMSA9IG5ldyBSdW50aW1lKFxuICAgIFwiZG90bmV0Y29yZTIuMVwiLFxuICAgIFJ1bnRpbWVGYW1pbHkuRE9UTkVUX0NPUkUsXG4gICk7XG5cbiAgLyoqXG4gICAqIFRoZSAuTkVUIENvcmUgMy4xIHJ1bnRpbWUgKGRvdG5ldGNvcmUzLjEpXG4gICAqIEBkZXByZWNhdGVkIExlZ2FjeSBydW50aW1lIG5vIGxvbmdlciBzdXBwb3J0ZWQgYnkgQVdTIExhbWJkYS4gTWlncmF0ZSB0byB0aGUgbGF0ZXN0IC5ORVQgQ29yZSBydW50aW1lLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBET1RORVRfQ09SRV8zXzEgPSBuZXcgUnVudGltZShcbiAgICBcImRvdG5ldGNvcmUzLjFcIixcbiAgICBSdW50aW1lRmFtaWx5LkRPVE5FVF9DT1JFLFxuICApO1xuXG4gIC8qKlxuICAgKiBUaGUgR28gMS54IHJ1bnRpbWUgKGdvMS54KVxuICAgKiBAZGVwcmVjYXRlZCBMZWdhY3kgcnVudGltZSBubyBsb25nZXIgc3VwcG9ydGVkIGJ5IEFXUyBMYW1iZGEuIE1pZ3JhdGUgdG8gdGhlIFBST1ZJREVEX0FMMjAyMyBydW50aW1lLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBHT18xX1ggPSBuZXcgUnVudGltZShcImdvMS54XCIsIFJ1bnRpbWVGYW1pbHkuR08pO1xuXG4gIC8qKlxuICAgKiBUaGUgUnVieSAyLjUgcnVudGltZSAocnVieTIuNSlcbiAgICogQGRlcHJlY2F0ZWQgTGVnYWN5IHJ1bnRpbWUgbm8gbG9uZ2VyIHN1cHBvcnRlZCBieSBBV1MgTGFtYmRhLiBNaWdyYXRlIHRvIHRoZSBsYXRlc3QgUnVieSBydW50aW1lLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBSVUJZXzJfNSA9IG5ldyBSdW50aW1lKFwicnVieTIuNVwiLCBSdW50aW1lRmFtaWx5LlJVQlkpO1xuXG4gIC8qKlxuICAgKiBUaGUgUnVieSAyLjcgcnVudGltZSAocnVieTIuNylcbiAgICogQGRlcHJlY2F0ZWQgTGVnYWN5IHJ1bnRpbWUgbm8gbG9uZ2VyIHN1cHBvcnRlZCBieSBBV1MgTGFtYmRhLiBNaWdyYXRlIHRvIHRoZSBsYXRlc3QgUnVieSBydW50aW1lLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBSVUJZXzJfNyA9IG5ldyBSdW50aW1lKFwicnVieTIuN1wiLCBSdW50aW1lRmFtaWx5LlJVQlkpO1xuXG4gIC8qKlxuICAgKiBUaGUgUnVieSAzLjIgcnVudGltZSAocnVieTMuMilcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgUlVCWV8zXzIgPSBuZXcgUnVudGltZShcInJ1YnkzLjJcIiwgUnVudGltZUZhbWlseS5SVUJZKTtcblxuICAvKipcbiAgICogVGhlIFJ1YnkgMy4zIHJ1bnRpbWUgKHJ1YnkzLjMpXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFJVQllfM18zID0gbmV3IFJ1bnRpbWUoXCJydWJ5My4zXCIsIFJ1bnRpbWVGYW1pbHkuUlVCWSk7XG5cbiAgLyoqXG4gICAqIFRoZSBSdWJ5IDMuNCBydW50aW1lIChydWJ5My40KVxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBSVUJZXzNfNCA9IG5ldyBSdW50aW1lKFwicnVieTMuNFwiLCBSdW50aW1lRmFtaWx5LlJVQlkpO1xuXG4gIC8qKlxuICAgKiBUaGUgY3VzdG9tIHByb3ZpZGVkIHJ1bnRpbWUgKHByb3ZpZGVkKVxuICAgKiBAZGVwcmVjYXRlZCBMZWdhY3kgcnVudGltZSBubyBsb25nZXIgc3VwcG9ydGVkIGJ5IEFXUyBMYW1iZGEuIE1pZ3JhdGUgdG8gdGhlIGxhdGVzdCBwcm92aWRlZC5hbDIwMjMgcnVudGltZS5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgUFJPVklERUQgPSBuZXcgUnVudGltZShcbiAgICBcInByb3ZpZGVkXCIsXG4gICAgUnVudGltZUZhbWlseS5PVEhFUixcbiAgKTtcblxuICAvKipcbiAgICogVGhlIGN1c3RvbSBwcm92aWRlZCBydW50aW1lIHdpdGggQW1hem9uIExpbnV4IDIgKHByb3ZpZGVkLmFsMilcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgUFJPVklERURfQUwyID0gbmV3IFJ1bnRpbWUoXG4gICAgXCJwcm92aWRlZC5hbDJcIixcbiAgICBSdW50aW1lRmFtaWx5Lk9USEVSLFxuICApO1xuXG4gIC8qKlxuICAgKiBUaGUgY3VzdG9tIHByb3ZpZGVkIHJ1bnRpbWUgd2l0aCBBbWF6b24gTGludXggMjAyMyAocHJvdmlkZWQuYWwyMDIzKVxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBQUk9WSURFRF9BTDIwMjMgPSBuZXcgUnVudGltZShcbiAgICBcInByb3ZpZGVkLmFsMjAyM1wiLFxuICAgIFJ1bnRpbWVGYW1pbHkuT1RIRVIsXG4gICk7XG5cbiAgLyoqXG4gICAqIEEgc3BlY2lhbCBydW50aW1lIGVudHJ5IHRvIGJlIHVzZWQgd2hlbiBmdW5jdGlvbiBpcyB1c2luZyBhIGRvY2tlciBpbWFnZS5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgRlJPTV9JTUFHRSA9IG5ldyBSdW50aW1lKFwiRlJPTV9JTUFHRVwiKTtcblxuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhpcyBydW50aW1lLCBhcyBleHBlY3RlZCBieSB0aGUgTGFtYmRhIHJlc291cmNlLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogV2hldGhlciB0aGUgYGBaaXBGaWxlYGAgKGFrYSBpbmxpbmUgY29kZSkgcHJvcGVydHkgY2FuIGJlIHVzZWQgd2l0aCB0aGlzXG4gICAqIHJ1bnRpbWUuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgc3VwcG9ydHNJbmxpbmVDb2RlOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoaXMgcnVudGltZSBpcyBpbnRlZ3JhdGVkIHdpdGggYW5kIHN1cHBvcnRlZCBmb3IgcHJvZmlsaW5nIHVzaW5nIEFtYXpvbiBDb2RlR3VydSBQcm9maWxlci5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBzdXBwb3J0c0NvZGVHdXJ1UHJvZmlsaW5nOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoaXMgcnVudGltZSBzdXBwb3J0cyBzbmFwc3RhcnQuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgc3VwcG9ydHNTbmFwU3RhcnQ6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSBydW50aW1lIGZhbWlseS5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBmYW1pbHk/OiBSdW50aW1lRmFtaWx5O1xuXG4gIC8qKlxuICAgKiBUaGUgYnVuZGxpbmcgRG9ja2VyIGltYWdlIGZvciB0aGlzIHJ1bnRpbWUuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgYnVuZGxpbmdJbWFnZTogRG9ja2VySW1hZ2U7XG5cbiAgLyoqXG4gICAqIEVuYWJsZWQgZm9yIHJ1bnRpbWUgZW51bXMgdGhhdCBhbHdheXMgdGFyZ2V0IHRoZSBsYXRlc3QgYXZhaWxhYmxlLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGlzVmFyaWFibGU6IGJvb2xlYW47XG5cbiAgY29uc3RydWN0b3IoXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIGZhbWlseT86IFJ1bnRpbWVGYW1pbHksXG4gICAgcHJvcHM6IExhbWJkYVJ1bnRpbWVQcm9wcyA9IHt9LFxuICApIHtcbiAgICB0aGlzLm5hbWUgPSBuYW1lO1xuICAgIHRoaXMuc3VwcG9ydHNJbmxpbmVDb2RlID0gISFwcm9wcy5zdXBwb3J0c0lubGluZUNvZGU7XG4gICAgdGhpcy5mYW1pbHkgPSBmYW1pbHk7XG4gICAgdGhpcy5pc1ZhcmlhYmxlID0gISFwcm9wcy5pc1ZhcmlhYmxlO1xuXG4gICAgY29uc3QgaW1hZ2VOYW1lID1cbiAgICAgIHByb3BzLmJ1bmRsaW5nRG9ja2VySW1hZ2UgPz8gYHB1YmxpYy5lY3IuYXdzL3NhbS9idWlsZC0ke25hbWV9YDtcbiAgICB0aGlzLmJ1bmRsaW5nSW1hZ2UgPSBEb2NrZXJJbWFnZS5mcm9tUmVnaXN0cnkoaW1hZ2VOYW1lKTtcbiAgICB0aGlzLnN1cHBvcnRzQ29kZUd1cnVQcm9maWxpbmcgPSBwcm9wcy5zdXBwb3J0c0NvZGVHdXJ1UHJvZmlsaW5nID8/IGZhbHNlO1xuICAgIHRoaXMuc3VwcG9ydHNTbmFwU3RhcnQgPSBwcm9wcy5zdXBwb3J0c1NuYXBTdGFydCA/PyBmYWxzZTtcblxuICAgIFJ1bnRpbWUuQUxMLnB1c2godGhpcyk7XG4gIH1cblxuICBwdWJsaWMgdG9TdHJpbmcoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5uYW1lO1xuICB9XG5cbiAgcHVibGljIHJ1bnRpbWVFcXVhbHMob3RoZXI6IFJ1bnRpbWUpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgb3RoZXIubmFtZSA9PT0gdGhpcy5uYW1lICYmXG4gICAgICBvdGhlci5mYW1pbHkgPT09IHRoaXMuZmFtaWx5ICYmXG4gICAgICBvdGhlci5zdXBwb3J0c0lubGluZUNvZGUgPT09IHRoaXMuc3VwcG9ydHNJbmxpbmVDb2RlXG4gICAgKTtcbiAgfVxufVxuXG4vKipcbiAqIFRoZSBsYXRlc3QgTGFtYmRhIG5vZGUgcnVudGltZSBhdmFpbGFibGUgYnkgQVdTIHJlZ2lvbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRldGVybWluZUxhdGVzdE5vZGVSdW50aW1lKHNjb3BlOiBDb25zdHJ1Y3QpOiBSdW50aW1lIHtcbiAgLy8gUnVudGltZSByZWdpb25hbCBmYWN0IHNob3VsZCBhbHdheXMgcmV0dXJuIGEga25vd24gcnVudGltZSBzdHJpbmcgdGhhdCBSdW50aW1lIGNhbiBpbmRleCBvZmYsIGJ1dCBmb3IgdHlwZVxuICAvLyBzYWZldHkgd2UgYWxzbyBkZWZhdWx0IGl0IGhlcmUuXG4gIGNvbnN0IHJ1bnRpbWVOYW1lID0gQXdzU3RhY2sub2ZBd3NDb25zdHJ1Y3Qoc2NvcGUpLnJlZ2lvbmFsRmFjdChcbiAgICBGYWN0TmFtZS5MQVRFU1RfTk9ERV9SVU5USU1FLFxuICAgIFJ1bnRpbWUuTk9ERUpTXzIyX1gubmFtZSxcbiAgKTtcbiAgcmV0dXJuIG5ldyBSdW50aW1lKHJ1bnRpbWVOYW1lLCBSdW50aW1lRmFtaWx5Lk5PREVKUywge1xuICAgIHN1cHBvcnRzSW5saW5lQ29kZTogdHJ1ZSxcbiAgICBpc1ZhcmlhYmxlOiB0cnVlLFxuICB9KTtcbn1cbiJdfQ==
@@ -143,7 +143,7 @@ class ScalableTarget extends aws_construct_1.AwsConstructBase {
143
143
  }
144
144
  exports.ScalableTarget = ScalableTarget;
145
145
  _a = JSII_RTTI_SYMBOL_1;
146
- ScalableTarget[_a] = { fqn: "terraconstructs.aws.compute.ScalableTarget", version: "0.1.8" };
146
+ ScalableTarget[_a] = { fqn: "terraconstructs.aws.compute.ScalableTarget", version: "0.1.10" };
147
147
  /**
148
148
  * The service that supports Application AutoScaling
149
149
  */
@@ -5,10 +5,7 @@ exports.Schedule = void 0;
5
5
  const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
6
6
  // https://github.com/aws/aws-cdk/blob/v2.186.0/packages/aws-cdk-lib/aws-applicationautoscaling/lib/schedule.ts
7
7
  const cdktf_1 = require("cdktf");
8
- // TODO Adupt ValidationError is available, otherwise use standard Error
9
- // - https://github.com/aws/aws-cdk/pull/33382/
10
- // - https://github.com/aws/aws-cdk/pull/33045
11
- // import { UnscopedValidationError } from "../../errors";
8
+ const errors_1 = require("../../errors");
12
9
  /**
13
10
  * Schedule for scheduled scaling actions
14
11
  */
@@ -35,14 +32,12 @@ class Schedule {
35
32
  "days",
36
33
  ];
37
34
  if (!validDurationUnit.includes(duration.unitLabel())) {
38
- // throw new UnscopedValidationError(
39
- throw new Error("Allowed units for scheduling are: 'minute', 'minutes', 'hour', 'hours', 'day' or 'days'");
35
+ throw new errors_1.UnscopedValidationError("Allowed units for scheduling are: 'minute', 'minutes', 'hour', 'hours', 'day' or 'days'");
40
36
  }
41
37
  return new LiteralSchedule(`rate(${duration.formatTokenToNumber()})`);
42
38
  }
43
39
  if (duration.toSeconds() === 0) {
44
- // throw new UnscopedValidationError(
45
- throw new Error("Duration cannot be 0");
40
+ throw new errors_1.UnscopedValidationError("Duration cannot be 0");
46
41
  }
47
42
  let rate = maybeRate(duration.toDays({ integral: false }), "day");
48
43
  if (rate === undefined) {
@@ -64,8 +59,7 @@ class Schedule {
64
59
  */
65
60
  static cron(options) {
66
61
  if (options.weekDay !== undefined && options.day !== undefined) {
67
- // throw new UnscopedValidationError(
68
- throw new Error("Cannot supply both 'day' and 'weekDay', use at most one");
62
+ throw new errors_1.UnscopedValidationError("Cannot supply both 'day' and 'weekDay', use at most one");
69
63
  }
70
64
  const minute = fallback(options.minute, "*");
71
65
  const hour = fallback(options.hour, "*");
@@ -92,7 +86,7 @@ class Schedule {
92
86
  }
93
87
  exports.Schedule = Schedule;
94
88
  _a = JSII_RTTI_SYMBOL_1;
95
- Schedule[_a] = { fqn: "terraconstructs.aws.compute.Schedule", version: "0.1.8" };
89
+ Schedule[_a] = { fqn: "terraconstructs.aws.compute.Schedule", version: "0.1.10" };
96
90
  class LiteralSchedule extends Schedule {
97
91
  constructor(expressionString) {
98
92
  super();
@@ -142,4 +136,4 @@ function makeRate(interval, singular) {
142
136
  ? `rate(1 ${singular})`
143
137
  : `rate(${interval} ${singular}s)`;
144
138
  }
145
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZWR1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXdzL2NvbXB1dGUvc2NoZWR1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSwrR0FBK0c7QUFFL0csaUNBQW9DO0FBR3BDLHdFQUF3RTtBQUN4RSwrQ0FBK0M7QUFDL0MsOENBQThDO0FBQzlDLDBEQUEwRDtBQUUxRDs7R0FFRztBQUNILE1BQXNCLFFBQVE7SUFDNUI7Ozs7T0FJRztJQUNJLE1BQU0sQ0FBQyxVQUFVLENBQUMsVUFBa0I7UUFDekMsT0FBTyxJQUFJLGVBQWUsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUN6QyxDQUFDO0lBRUQ7O09BRUc7SUFDSSxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQWtCO1FBQ25DLElBQUksUUFBUSxDQUFDLFlBQVksRUFBRSxFQUFFLENBQUM7WUFDNUIsTUFBTSxpQkFBaUIsR0FBRztnQkFDeEIsUUFBUTtnQkFDUixTQUFTO2dCQUNULE1BQU07Z0JBQ04sT0FBTztnQkFDUCxLQUFLO2dCQUNMLE1BQU07YUFDUCxDQUFDO1lBQ0YsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsU0FBUyxFQUFFLENBQUMsRUFBRSxDQUFDO2dCQUN0RCxxQ0FBcUM7Z0JBQ3JDLE1BQU0sSUFBSSxLQUFLLENBQ2IseUZBQXlGLENBQzFGLENBQUM7WUFDSixDQUFDO1lBQ0QsT0FBTyxJQUFJLGVBQWUsQ0FBQyxRQUFRLFFBQVEsQ0FBQyxtQkFBbUIsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUN4RSxDQUFDO1FBQ0QsSUFBSSxRQUFRLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDL0IscUNBQXFDO1lBQ3JDLE1BQU0sSUFBSSxLQUFLLENBQUMsc0JBQXNCLENBQUMsQ0FBQztRQUMxQyxDQUFDO1FBRUQsSUFBSSxJQUFJLEdBQUcsU0FBUyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMs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Q3ZCLENBQUMsQ0FBQyxRQUFRLFFBQVEsSUFBSSxRQUFRLElBQUksQ0FBQztBQUN2QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cHM6Ly9naXRodWIuY29tL2F3cy9hd3MtY2RrL2Jsb2IvdjIuMTg2LjAvcGFja2FnZXMvYXdzLWNkay1saWIvYXdzLWFwcGxpY2F0aW9uYXV0b3NjYWxpbmcvbGliL3NjaGVkdWxlLnRzXG5cbmltcG9ydCB7IEFubm90YXRpb25zIH0gZnJvbSBcImNka3RmXCI7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuaW1wb3J0IHsgRHVyYXRpb24gfSBmcm9tIFwiLi4vLi4vZHVyYXRpb25cIjtcbi8vIFRPRE8gQWR1cHQgVmFsaWRhdGlvbkVycm9yIGlzIGF2YWlsYWJsZSwgb3RoZXJ3aXNlIHVzZSBzdGFuZGFyZCBFcnJvclxuLy8gLSBodHRwczovL2dpdGh1Yi5jb20vYXdzL2F3cy1jZGsvcHVsbC8zMzM4Mi9cbi8vIC0gaHR0cHM6Ly9naXRodWIuY29tL2F3cy9hd3MtY2RrL3B1bGwvMzMwNDVcbi8vIGltcG9ydCB7IFVuc2NvcGVkVmFsaWRhdGlvbkVycm9yIH0gZnJvbSBcIi4uLy4uL2Vycm9yc1wiO1xuXG4vKipcbiAqIFNjaGVkdWxlIGZvciBzY2hlZHVsZWQgc2NhbGluZyBhY3Rpb25zXG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBTY2hlZHVsZSB7XG4gIC8qKlxuICAgKiBDb25zdHJ1Y3QgYSBzY2hlZHVsZSBmcm9tIGEgbGl0ZXJhbCBzY2hlZHVsZSBleHByZXNzaW9uXG4gICAqXG4gICAqIEBwYXJhbSBleHByZXNzaW9uIFRoZSBleHByZXNzaW9uIHRvIHVzZS4gTXVzdCBiZSBpbiBhIGZvcm1hdCB0aGF0IEFwcGxpY2F0aW9uIEF1dG9TY2FsaW5nIHdpbGwgcmVjb2duaXplXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGV4cHJlc3Npb24oZXhwcmVzc2lvbjogc3RyaW5nKTogU2NoZWR1bGUge1xuICAgIHJldHVybiBuZXcgTGl0ZXJhbFNjaGVkdWxlKGV4cHJlc3Npb24pO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnN0cnVjdCBhIHNjaGVkdWxlIGZyb20gYW4gaW50ZXJ2YWwgYW5kIGEgdGltZSB1bml0XG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJhdGUoZHVyYXRpb246IER1cmF0aW9uKTogU2NoZWR1bGUge1xuICAgIGlmIChkdXJhdGlvbi5pc1VucmVzb2x2ZWQoKSkge1xuICAgICAgY29uc3QgdmFsaWREdXJhdGlvblVuaXQgPSBbXG4gICAgICAgIFwibWludXRlXCIsXG4gICAgICAgIFwibWludXRlc1wiLFxuICAgICAgICBcImhvdXJcIixcbiAgICAgICAgXCJob3Vyc1wiLFxuICAgICAgICBcImRheVwiLFxuICAgICAgICBcImRheXNcIixcbiAgICAgIF07XG4gICAgICBpZiAoIXZhbGlkRHVyYXRpb25Vbml0LmluY2x1ZGVzKGR1cmF0aW9uLnVuaXRMYWJlbCgpKSkge1xuICAgICAgICAvLyB0aHJvdyBuZXcgVW5zY29wZWRWYWxpZGF0aW9uRXJyb3IoXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBcIkFsbG93ZWQgdW5pdHMgZm9yIHNjaGVkdWxpbmcgYXJlOiAnbWludXRlJywgJ21pbnV0ZXMnLCAnaG91cicsICdob3VycycsICdkYXknIG9yICdkYXlzJ1wiLFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG5ldyBMaXRlcmFsU2NoZWR1bGUoYHJhdGUoJHtkdXJhdGlvbi5mb3JtYXRUb2tlblRvTnVtYmVyKCl9KWApO1xuICAgIH1cbiAgICBpZiAoZHVyYXRpb24udG9TZWNvbmRzKCkgPT09IDApIHtcbiAgICAgIC8vIHRocm93IG5ldyBVbnNjb3BlZFZhbGlkYXRpb25FcnJvcihcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkR1cmF0aW9uIGNhbm5vdCBiZSAwXCIpO1xuICAgIH1cblxuICAgIGxldCByYXRlID0gbWF5YmVSYXRlKGR1cmF0aW9uLnRvRGF5cyh7IGludGVncmFsOiBmYWxzZSB9KSwgXCJkYXlcIik7XG4gICAgaWYgKHJhdGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmF0ZSA9IG1heWJlUmF0ZShkdXJhdGlvbi50b0hvdXJzKHsgaW50ZWdyYWw6IGZhbHNlIH0pLCBcImhvdXJcIik7XG4gICAgfVxuICAgIGlmIChyYXRlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJhdGUgPSBtYWtlUmF0ZShkdXJhdGlvbi50b01pbnV0ZXMoeyBpbnRlZ3JhbDogdHJ1ZSB9KSwgXCJtaW51dGVcIik7XG4gICAgfVxuICAgIHJldHVybiBuZXcgTGl0ZXJhbFNjaGVkdWxlKHJhdGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnN0cnVjdCBhIFNjaGVkdWxlIGZyb20gYSBtb21lbnQgaW4gdGltZVxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBhdChtb21lbnQ6IERhdGUpOiBTY2hlZHVsZSB7XG4gICAgcmV0dXJuIG5ldyBMaXRlcmFsU2NoZWR1bGUoYGF0KCR7Zm9ybWF0SVNPKG1vbWVudCl9KWApO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIHNjaGVkdWxlIGZyb20gYSBzZXQgb2YgY3JvbiBmaWVsZHNcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgY3JvbihvcHRpb25zOiBDcm9uT3B0aW9ucyk6IFNjaGVkdWxlIHtcbiAgICBpZiAob3B0aW9ucy53ZWVrRGF5ICE9PSB1bmRlZmluZWQgJiYgb3B0aW9ucy5kYXkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gdGhyb3cgbmV3IFVuc2NvcGVkVmFsaWRhdGlvbkVycm9yKFxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBcIkNhbm5vdCBzdXBwbHkgYm90aCAnZGF5JyBhbmQgJ3dlZWtEYXknLCB1c2UgYXQgbW9zdCBvbmVcIixcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgbWludXRlID0gZmFsbGJhY2sob3B0aW9ucy5taW51dGUsIFwiKlwiKTtcbiAgICBjb25zdCBob3VyID0gZmFsbGJhY2sob3B0aW9ucy5ob3VyLCBcIipcIik7XG4gICAgY29uc3QgbW9udGggPSBmYWxsYmFjayhvcHRpb25zLm1vbnRoLCBcIipcIik7XG4gICAgY29uc3QgeWVhciA9IGZhbGxiYWNrKG9wdGlvbnMueWVhciwgXCIqXCIpO1xuXG4gICAgLy8gV2Vla2RheSBkZWZhdWx0cyB0byAnPycgaWYgbm90IHN1cHBsaWVkLiBJZiBpdCBpcyBzdXBwbGllZCwgZGF5IG11c3QgYmVjb21lICc/J1xuICAgIGNvbnN0IGRheSA9IGZhbGxiYWNrKFxuICAgICAgb3B0aW9ucy5kYXksXG4gICAgICBvcHRpb25zLndlZWtEYXkgIT09IHVuZGVmaW5lZCA/IFwiP1wiIDogXCIqXCIsXG4gICAgKTtcbiAgICBjb25zdCB3ZWVrRGF5ID0gZmFsbGJhY2sob3B0aW9ucy53ZWVrRGF5LCBcIj9cIik7XG5cbiAgICByZXR1cm4gbmV3IChjbGFzcyBleHRlbmRzIFNjaGVkdWxlIHtcbiAgICAgIHB1YmxpYyByZWFkb25seSBleHByZXNzaW9uU3RyaW5nOiBzdHJpbmcgPSBgY3Jvbigke21pbnV0ZX0gJHtob3VyfSAke2RheX0gJHttb250aH0gJHt3ZWVrRGF5fSAke3llYXJ9KWA7XG4gICAgICBwdWJsaWMgX2JpbmQoc2NvcGU6IENvbnN0cnVjdCkge1xuICAgICAgICBpZiAoIW9wdGlvbnMubWludXRlKSB7XG4gICAgICAgICAgLy8gXCJAYXdzLWNkay9hd3MtYXBwbGljYXRpb25hdXRvc2NhbGluZzpkZWZhdWx0UnVuRXZlcnlNaW51dGVcIixcbiAgICAgICAgICBBbm5vdGF0aW9ucy5vZihzY29wZSkuYWRkV2FybmluZyhcbiAgICAgICAgICAgIFwiY3JvbjogSWYgeW91IGRvbid0IHBhc3MgJ21pbnV0ZScsIGJ5IGRlZmF1bHQgdGhlIGV2ZW50IHJ1bnMgZXZlcnkgbWludXRlLiBQYXNzICdtaW51dGU6ICcqJycgaWYgdGhhdCdzIHdoYXQgeW91IGludGVuZCwgb3IgJ21pbnV0ZTogMCcgdG8gcnVuIG9uY2UgcGVyIGhvdXIgaW5zdGVhZC5cIixcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXcgTGl0ZXJhbFNjaGVkdWxlKHRoaXMuZXhwcmVzc2lvblN0cmluZyk7XG4gICAgICB9XG4gICAgfSkoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZSB0aGUgZXhwcmVzc2lvbiBmb3IgdGhpcyBzY2hlZHVsZVxuICAgKi9cbiAgcHVibGljIGFic3RyYWN0IHJlYWRvbmx5IGV4cHJlc3Npb25TdHJpbmc6IHN0cmluZztcblxuICBwcm90ZWN0ZWQgY29uc3RydWN0b3IoKSB7fVxuXG4gIC8qKlxuICAgKlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHB1YmxpYyBhYnN0cmFjdCBfYmluZChzY29wZTogQ29uc3RydWN0KTogdm9pZDtcbn1cblxuLyoqXG4gKiBPcHRpb25zIHRvIGNvbmZpZ3VyZSBhIGNyb24gZXhwcmVzc2lvblxuICpcbiAqIEFsbCBmaWVsZHMgYXJlIHN0cmluZ3Mgc28geW91IGNhbiB1c2UgY29tcGxleCBleHByZXNzaW9ucy4gQWJzZW5jZSBvZlxuICogYSBmaWVsZCBpbXBsaWVzICcqJyBvciAnPycsIHdoaWNoZXZlciBvbmUgaXMgYXBwcm9wcmlhdGUuXG4gKlxuICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRXYXRjaC9sYXRlc3QvZXZlbnRzL1NjaGVkdWxlZEV2ZW50cy5odG1sI0Nyb25FeHByZXNzaW9uc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIENyb25PcHRpb25zIHtcbiAgLyoqXG4gICAqIFRoZSBtaW51dGUgdG8gcnVuIHRoaXMgcnVsZSBhdFxuICAgKlxuICAgKiBAZGVmYXVsdCAtIEV2ZXJ5IG1pbnV0ZVxuICAgKi9cbiAgcmVhZG9ubHkgbWludXRlPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgaG91ciB0byBydW4gdGhpcyBydWxlIGF0XG4gICAqXG4gICAqIEBkZWZhdWx0IC0gRXZlcnkgaG91clxuICAgKi9cbiAgcmVhZG9ubHkgaG91cj86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGRheSBvZiB0aGUgbW9udGggdG8gcnVuIHRoaXMgcnVsZSBhdFxuICAgKlxuICAgKiBAZGVmYXVsdCAtIEV2ZXJ5IGRheSBvZiB0aGUgbW9udGhcbiAgICovXG4gIHJlYWRvbmx5IGRheT86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIG1vbnRoIHRvIHJ1biB0aGlzIHJ1bGUgYXRcbiAgICpcbiAgICogQGRlZmF1bHQgLSBFdmVyeSBtb250aFxuICAgKi9cbiAgcmVhZG9ubHkgbW9udGg/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSB5ZWFyIHRvIHJ1biB0aGlzIHJ1bGUgYXRcbiAgICpcbiAgICogQGRlZmF1bHQgLSBFdmVyeSB5ZWFyXG4gICAqL1xuICByZWFkb25seSB5ZWFyPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgZGF5IG9mIHRoZSB3ZWVrIHRvIHJ1biB0aGlzIHJ1bGUgYXRcbiAgICpcbiAgICogQGRlZmF1bHQgLSBBbnkgZGF5IG9mIHRoZSB3ZWVrXG4gICAqL1xuICByZWFkb25seSB3ZWVrRGF5Pzogc3RyaW5nO1xufVxuXG5jbGFzcyBMaXRlcmFsU2NoZWR1bGUgZXh0ZW5kcyBTY2hlZHVsZSB7XG4gIGNvbnN0cnVjdG9yKHB1YmxpYyByZWFkb25seSBleHByZXNzaW9uU3RyaW5nOiBzdHJpbmcpIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgcHVibGljIF9iaW5kKCkge31cbn1cblxuZnVuY3Rpb24gZmFsbGJhY2s8VD4oeDogVCB8IHVuZGVmaW5lZCwgZGVmOiBUKTogVCB7XG4gIHJldHVybiB4ID09PSB1bmRlZmluZWQgPyBkZWYgOiB4O1xufVxuXG5mdW5jdGlvbiBmb3JtYXRJU08oZGF0ZT86IERhdGUpIHtcbiAgaWYgKCFkYXRlKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgZGF0ZS5nZXRVVENGdWxsWWVhcigpICtcbiAgICBcIi1cIiArXG4gICAgcGFkKGRhdGUuZ2V0VVRDTW9udGgoKSArIDEpICtcbiAgICBcIi1cIiArXG4gICAgcGFkKGRhdGUuZ2V0VVRDRGF0ZSgpKSArXG4gICAgXCJUXCIgK1xuICAgIHBhZChkYXRlLmdldFVUQ0hvdXJzKCkpICtcbiAgICBcIjpcIiArXG4gICAgcGFkKGRhdGUuZ2V0VVRDTWludXRlcygpKSArXG4gICAgXCI6XCIgK1xuICAgIHBhZChkYXRlLmdldFVUQ1NlY29uZHMoKSlcbiAgKTtcblxuICBmdW5jdGlvbiBwYWQobnVtOiBudW1iZXIpIHtcbiAgICBpZiAobnVtIDwgMTApIHtcbiAgICAgIHJldHVybiBcIjBcIiArIG51bTtcbiAgICB9XG4gICAgcmV0dXJuIG51bTtcbiAgfVxufVxuXG4vKipcbiAqIFJldHVybiB0aGUgcmF0ZSBpZiB0aGUgcmF0ZSBpcyB3aG9sZSBudW1iZXJcbiAqL1xuZnVuY3Rpb24gbWF5YmVSYXRlKGludGVydmFsOiBudW1iZXIsIHNpbmd1bGFyOiBzdHJpbmcpIHtcbiAgaWYgKGludGVydmFsID09PSAwIHx8ICFOdW1iZXIuaXNJbnRlZ2VyKGludGVydmFsKSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgcmV0dXJuIG1ha2VSYXRlKGludGVydmFsLCBzaW5ndWxhcik7XG59XG5cbi8qKlxuICogUmV0dXJuICdyYXRlKCR7aW50ZXJ2YWx9ICR7c2luZ3VsYXJ9KHMpKWAgZm9yIHRoZSBpbnRlcnZhbFxuICovXG5mdW5jdGlvbiBtYWtlUmF0ZShpbnRlcnZhbDogbnVtYmVyLCBzaW5ndWxhcjogc3RyaW5nKSB7XG4gIHJldHVybiBpbnRlcnZhbCA9PT0gMVxuICAgID8gYHJhdGUoMSAke3Npbmd1bGFyfSlgXG4gICAgOiBgcmF0ZSgke2ludGVydmFsfSAke3Npbmd1bGFyfXMpYDtcbn1cbiJdfQ==
139
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZWR1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXdzL2NvbXB1dGUvc2NoZWR1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSwrR0FBK0c7QUFFL0csaUNBQW9DO0FBR3BDLHlDQUF1RDtBQUV2RDs7R0FFRztBQUNILE1BQXNCLFFBQVE7SUFDNUI7Ozs7T0FJRztJQUNJLE1BQU0sQ0FBQyxVQUFVLENBQUMsVUFBa0I7UUFDekMsT0FBTyxJQUFJLGVBQWUsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUN6QyxDQUFDO0lBRUQ7O09BRUc7SUFDSSxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQWtCO1FBQ25DLElBQUksUUFBUSxDQUFDLFlBQVksRUFBRSxFQUFFLENBQUM7WUFDNUIsTUFBTSxpQkFBaUIsR0FBRztnQkFDeEIsUUFBUTtnQkFDUixTQUFTO2dCQUNULE1BQU07Z0JBQ04sT0FBTztnQkFDUCxLQUFLO2dCQUNMLE1BQU07YUFDUCxDQUFDO1lBQ0YsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsU0FBUyxFQUFFLENBQUMsRUFBRSxDQUFDO2dCQUN0RCxNQUFNLElBQUksZ0NBQXVCLENBQy9CLHlGQUF5RixDQUMxRixDQUFDO1lBQ0osQ0FBQztZQUNELE9BQU8sSUFBSSxlQUFlLENBQUMsUUFBUSxRQUFRLENBQUMsbUJBQW1CLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDeEUsQ0FBQztRQUNELElBQUksUUFBUSxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQy9CLE1BQU0sSUFBSSxnQ0FBdUIsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO1FBQzVELENBQUM7UUFFRCxJQUFJLElBQUksR0FBRyxTQUFTLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ2xFLElBQUks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IjpbIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9hd3MvYXdzLWNkay9ibG9iL3YyLjE4Ni4wL3BhY2thZ2VzL2F3cy1jZGstbGliL2F3cy1hcHBsaWNhdGlvbmF1dG9zY2FsaW5nL2xpYi9zY2hlZHVsZS50c1xuXG5pbXBvcnQgeyBBbm5vdGF0aW9ucyB9IGZyb20gXCJjZGt0ZlwiO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcbmltcG9ydCB7IER1cmF0aW9uIH0gZnJvbSBcIi4uLy4uL2R1cmF0aW9uXCI7XG5pbXBvcnQgeyBVbnNjb3BlZFZhbGlkYXRpb25FcnJvciB9IGZyb20gXCIuLi8uLi9lcnJvcnNcIjtcblxuLyoqXG4gKiBTY2hlZHVsZSBmb3Igc2NoZWR1bGVkIHNjYWxpbmcgYWN0aW9uc1xuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgU2NoZWR1bGUge1xuICAvKipcbiAgICogQ29uc3RydWN0IGEgc2NoZWR1bGUgZnJvbSBhIGxpdGVyYWwgc2NoZWR1bGUgZXhwcmVzc2lvblxuICAgKlxuICAgKiBAcGFyYW0gZXhwcmVzc2lvbiBUaGUgZXhwcmVzc2lvbiB0byB1c2UuIE11c3QgYmUgaW4gYSBmb3JtYXQgdGhhdCBBcHBsaWNhdGlvbiBBdXRvU2NhbGluZyB3aWxsIHJlY29nbml6ZVxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBleHByZXNzaW9uKGV4cHJlc3Npb246IHN0cmluZyk6IFNjaGVkdWxlIHtcbiAgICByZXR1cm4gbmV3IExpdGVyYWxTY2hlZHVsZShleHByZXNzaW9uKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb25zdHJ1Y3QgYSBzY2hlZHVsZSBmcm9tIGFuIGludGVydmFsIGFuZCBhIHRpbWUgdW5pdFxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByYXRlKGR1cmF0aW9uOiBEdXJhdGlvbik6IFNjaGVkdWxlIHtcbiAgICBpZiAoZHVyYXRpb24uaXNVbnJlc29sdmVkKCkpIHtcbiAgICAgIGNvbnN0IHZhbGlkRHVyYXRpb25Vbml0ID0gW1xuICAgICAgICBcIm1pbnV0ZVwiLFxuICAgICAgICBcIm1pbnV0ZXNcIixcbiAgICAgICAgXCJob3VyXCIsXG4gICAgICAgIFwiaG91cnNcIixcbiAgICAgICAgXCJkYXlcIixcbiAgICAgICAgXCJkYXlzXCIsXG4gICAgICBdO1xuICAgICAgaWYgKCF2YWxpZER1cmF0aW9uVW5pdC5pbmNsdWRlcyhkdXJhdGlvbi51bml0TGFiZWwoKSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IFVuc2NvcGVkVmFsaWRhdGlvbkVycm9yKFxuICAgICAgICAgIFwiQWxsb3dlZCB1bml0cyBmb3Igc2NoZWR1bGluZyBhcmU6ICdtaW51dGUnLCAnbWludXRlcycsICdob3VyJywgJ2hvdXJzJywgJ2RheScgb3IgJ2RheXMnXCIsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbmV3IExpdGVyYWxTY2hlZHVsZShgcmF0ZSgke2R1cmF0aW9uLmZvcm1hdFRva2VuVG9OdW1iZXIoKX0pYCk7XG4gICAgfVxuICAgIGlmIChkdXJhdGlvbi50b1NlY29uZHMoKSA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IFVuc2NvcGVkVmFsaWRhdGlvbkVycm9yKFwiRHVyYXRpb24gY2Fubm90IGJlIDBcIik7XG4gICAgfVxuXG4gICAgbGV0IHJhdGUgPSBtYXliZVJhdGUoZHVyYXRpb24udG9EYXlzKHsgaW50ZWdyYWw6IGZhbHNlIH0pLCBcImRheVwiKTtcbiAgICBpZiAocmF0ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByYXRlID0gbWF5YmVSYXRlKGR1cmF0aW9uLnRvSG91cnMoeyBpbnRlZ3JhbDogZmFsc2UgfSksIFwiaG91clwiKTtcbiAgICB9XG4gICAgaWYgKHJhdGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmF0ZSA9IG1ha2VSYXRlKGR1cmF0aW9uLnRvTWludXRlcyh7IGludGVncmFsOiB0cnVlIH0pLCBcIm1pbnV0ZVwiKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBMaXRlcmFsU2NoZWR1bGUocmF0ZSk7XG4gIH1cblxuICAvKipcbiAgICogQ29uc3RydWN0IGEgU2NoZWR1bGUgZnJvbSBhIG1vbWVudCBpbiB0aW1lXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGF0KG1vbWVudDogRGF0ZSk6IFNjaGVkdWxlIHtcbiAgICByZXR1cm4gbmV3IExpdGVyYWxTY2hlZHVsZShgYXQoJHtmb3JtYXRJU08obW9tZW50KX0pYCk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgc2NoZWR1bGUgZnJvbSBhIHNldCBvZiBjcm9uIGZpZWxkc1xuICAgKi9cbiAgcHVibGljIHN0YXRpYyBjcm9uKG9wdGlvbnM6IENyb25PcHRpb25zKTogU2NoZWR1bGUge1xuICAgIGlmIChvcHRpb25zLndlZWtEYXkgIT09IHVuZGVmaW5lZCAmJiBvcHRpb25zLmRheSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgVW5zY29wZWRWYWxpZGF0aW9uRXJyb3IoXG4gICAgICAgIFwiQ2Fubm90IHN1cHBseSBib3RoICdkYXknIGFuZCAnd2Vla0RheScsIHVzZSBhdCBtb3N0IG9uZVwiLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCBtaW51dGUgPSBmYWxsYmFjayhvcHRpb25zLm1pbnV0ZSwgXCIqXCIpO1xuICAgIGNvbnN0IGhvdXIgPSBmYWxsYmFjayhvcHRpb25zLmhvdXIsIFwiKlwiKTtcbiAgICBjb25zdCBtb250aCA9IGZhbGxiYWNrKG9wdGlvbnMubW9udGgsIFwiKlwiKTtcbiAgICBjb25zdCB5ZWFyID0gZmFsbGJhY2sob3B0aW9ucy55ZWFyLCBcIipcIik7XG5cbiAgICAvLyBXZWVrZGF5IGRlZmF1bHRzIHRvICc/JyBpZiBub3Qgc3VwcGxpZWQuIElmIGl0IGlzIHN1cHBsaWVkLCBkYXkgbXVzdCBiZWNvbWUgJz8nXG4gICAgY29uc3QgZGF5ID0gZmFsbGJhY2soXG4gICAgICBvcHRpb25zLmRheSxcbiAgICAgIG9wdGlvbnMud2Vla0RheSAhPT0gdW5kZWZpbmVkID8gXCI/XCIgOiBcIipcIixcbiAgICApO1xuICAgIGNvbnN0IHdlZWtEYXkgPSBmYWxsYmFjayhvcHRpb25zLndlZWtEYXksIFwiP1wiKTtcblxuICAgIHJldHVybiBuZXcgKGNsYXNzIGV4dGVuZHMgU2NoZWR1bGUge1xuICAgICAgcHVibGljIHJlYWRvbmx5IGV4cHJlc3Npb25TdHJpbmc6IHN0cmluZyA9IGBjcm9uKCR7bWludXRlfSAke2hvdXJ9ICR7ZGF5fSAke21vbnRofSAke3dlZWtEYXl9ICR7eWVhcn0pYDtcbiAgICAgIHB1YmxpYyBfYmluZChzY29wZTogQ29uc3RydWN0KSB7XG4gICAgICAgIGlmICghb3B0aW9ucy5taW51dGUpIHtcbiAgICAgICAgICAvLyBcIkBhd3MtY2RrL2F3cy1hcHBsaWNhdGlvbmF1dG9zY2FsaW5nOmRlZmF1bHRSdW5FdmVyeU1pbnV0ZVwiLFxuICAgICAgICAgIEFubm90YXRpb25zLm9mKHNjb3BlKS5hZGRXYXJuaW5nKFxuICAgICAgICAgICAgXCJjcm9uOiBJZiB5b3UgZG9uJ3QgcGFzcyAnbWludXRlJywgYnkgZGVmYXVsdCB0aGUgZXZlbnQgcnVucyBldmVyeSBtaW51dGUuIFBhc3MgJ21pbnV0ZTogJyonJyBpZiB0aGF0J3Mgd2hhdCB5b3UgaW50ZW5kLCBvciAnbWludXRlOiAwJyB0byBydW4gb25jZSBwZXIgaG91ciBpbnN0ZWFkLlwiLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBMaXRlcmFsU2NoZWR1bGUodGhpcy5leHByZXNzaW9uU3RyaW5nKTtcbiAgICAgIH1cbiAgICB9KSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlIHRoZSBleHByZXNzaW9uIGZvciB0aGlzIHNjaGVkdWxlXG4gICAqL1xuICBwdWJsaWMgYWJzdHJhY3QgcmVhZG9ubHkgZXhwcmVzc2lvblN0cmluZzogc3RyaW5nO1xuXG4gIHByb3RlY3RlZCBjb25zdHJ1Y3RvcigpIHt9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcHVibGljIGFic3RyYWN0IF9iaW5kKHNjb3BlOiBDb25zdHJ1Y3QpOiB2b2lkO1xufVxuXG4vKipcbiAqIE9wdGlvbnMgdG8gY29uZmlndXJlIGEgY3JvbiBleHByZXNzaW9uXG4gKlxuICogQWxsIGZpZWxkcyBhcmUgc3RyaW5ncyBzbyB5b3UgY2FuIHVzZSBjb21wbGV4IGV4cHJlc3Npb25zLiBBYnNlbmNlIG9mXG4gKiBhIGZpZWxkIGltcGxpZXMgJyonIG9yICc/Jywgd2hpY2hldmVyIG9uZSBpcyBhcHByb3ByaWF0ZS5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZFdhdGNoL2xhdGVzdC9ldmVudHMvU2NoZWR1bGVkRXZlbnRzLmh0bWwjQ3JvbkV4cHJlc3Npb25zXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ3Jvbk9wdGlvbnMge1xuICAvKipcbiAgICogVGhlIG1pbnV0ZSB0byBydW4gdGhpcyBydWxlIGF0XG4gICAqXG4gICAqIEBkZWZhdWx0IC0gRXZlcnkgbWludXRlXG4gICAqL1xuICByZWFkb25seSBtaW51dGU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBob3VyIHRvIHJ1biB0aGlzIHJ1bGUgYXRcbiAgICpcbiAgICogQGRlZmF1bHQgLSBFdmVyeSBob3VyXG4gICAqL1xuICByZWFkb25seSBob3VyPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgZGF5IG9mIHRoZSBtb250aCB0byBydW4gdGhpcyBydWxlIGF0XG4gICAqXG4gICAqIEBkZWZhdWx0IC0gRXZlcnkgZGF5IG9mIHRoZSBtb250aFxuICAgKi9cbiAgcmVhZG9ubHkgZGF5Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgbW9udGggdG8gcnVuIHRoaXMgcnVsZSBhdFxuICAgKlxuICAgKiBAZGVmYXVsdCAtIEV2ZXJ5IG1vbnRoXG4gICAqL1xuICByZWFkb25seSBtb250aD86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHllYXIgdG8gcnVuIHRoaXMgcnVsZSBhdFxuICAgKlxuICAgKiBAZGVmYXVsdCAtIEV2ZXJ5IHllYXJcbiAgICovXG4gIHJlYWRvbmx5IHllYXI/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBkYXkgb2YgdGhlIHdlZWsgdG8gcnVuIHRoaXMgcnVsZSBhdFxuICAgKlxuICAgKiBAZGVmYXVsdCAtIEFueSBkYXkgb2YgdGhlIHdlZWtcbiAgICovXG4gIHJlYWRvbmx5IHdlZWtEYXk/OiBzdHJpbmc7XG59XG5cbmNsYXNzIExpdGVyYWxTY2hlZHVsZSBleHRlbmRzIFNjaGVkdWxlIHtcbiAgY29uc3RydWN0b3IocHVibGljIHJlYWRvbmx5IGV4cHJlc3Npb25TdHJpbmc6IHN0cmluZykge1xuICAgIHN1cGVyKCk7XG4gIH1cblxuICBwdWJsaWMgX2JpbmQoKSB7fVxufVxuXG5mdW5jdGlvbiBmYWxsYmFjazxUPih4OiBUIHwgdW5kZWZpbmVkLCBkZWY6IFQpOiBUIHtcbiAgcmV0dXJuIHggPT09IHVuZGVmaW5lZCA/IGRlZiA6IHg7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdElTTyhkYXRlPzogRGF0ZSkge1xuICBpZiAoIWRhdGUpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICBkYXRlLmdldFVUQ0Z1bGxZZWFyKCkgK1xuICAgIFwiLVwiICtcbiAgICBwYWQoZGF0ZS5nZXRVVENNb250aCgpICsgMSkgK1xuICAgIFwiLVwiICtcbiAgICBwYWQoZGF0ZS5nZXRVVENEYXRlKCkpICtcbiAgICBcIlRcIiArXG4gICAgcGFkKGRhdGUuZ2V0VVRDSG91cnMoKSkgK1xuICAgIFwiOlwiICtcbiAgICBwYWQoZGF0ZS5nZXRVVENNaW51dGVzKCkpICtcbiAgICBcIjpcIiArXG4gICAgcGFkKGRhdGUuZ2V0VVRDU2Vjb25kcygpKVxuICApO1xuXG4gIGZ1bmN0aW9uIHBhZChudW06IG51bWJlcikge1xuICAgIGlmIChudW0gPCAxMCkge1xuICAgICAgcmV0dXJuIFwiMFwiICsgbnVtO1xuICAgIH1cbiAgICByZXR1cm4gbnVtO1xuICB9XG59XG5cbi8qKlxuICogUmV0dXJuIHRoZSByYXRlIGlmIHRoZSByYXRlIGlzIHdob2xlIG51bWJlclxuICovXG5mdW5jdGlvbiBtYXliZVJhdGUoaW50ZXJ2YWw6IG51bWJlciwgc2luZ3VsYXI6IHN0cmluZykge1xuICBpZiAoaW50ZXJ2YWwgPT09IDAgfHwgIU51bWJlci5pc0ludGVnZXIoaW50ZXJ2YWwpKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICByZXR1cm4gbWFrZVJhdGUoaW50ZXJ2YWwsIHNpbmd1bGFyKTtcbn1cblxuLyoqXG4gKiBSZXR1cm4gJ3JhdGUoJHtpbnRlcnZhbH0gJHtzaW5ndWxhcn0ocykpYCBmb3IgdGhlIGludGVydmFsXG4gKi9cbmZ1bmN0aW9uIG1ha2VSYXRlKGludGVydmFsOiBudW1iZXIsIHNpbmd1bGFyOiBzdHJpbmcpIHtcbiAgcmV0dXJuIGludGVydmFsID09PSAxXG4gICAgPyBgcmF0ZSgxICR7c2luZ3VsYXJ9KWBcbiAgICA6IGByYXRlKCR7aW50ZXJ2YWx9ICR7c2luZ3VsYXJ9cylgO1xufVxuIl19
@@ -469,7 +469,7 @@ class SecurityGroup extends SecurityGroupBase {
469
469
  }
470
470
  exports.SecurityGroup = SecurityGroup;
471
471
  _a = JSII_RTTI_SYMBOL_1;
472
- SecurityGroup[_a] = { fqn: "terraconstructs.aws.compute.SecurityGroup", version: "0.1.8" };
472
+ SecurityGroup[_a] = { fqn: "terraconstructs.aws.compute.SecurityGroup", version: "0.1.10" };
473
473
  /**
474
474
  * Fix up a direct rule to have fromPort/toPort defined
475
475
  */
@@ -10,6 +10,7 @@ const api_key_1 = require("./api-key");
10
10
  const apigateway_canned_metrics_generated_1 = require("./apigateway-canned-metrics.generated");
11
11
  const apigateway_util_1 = require("./apigateway-util");
12
12
  const restapi_1 = require("./restapi");
13
+ const errors_1 = require("../../errors");
13
14
  const arn_1 = require("../arn");
14
15
  const aws_construct_1 = require("../aws-construct");
15
16
  const aws_stack_1 = require("../aws-stack");
@@ -49,8 +50,7 @@ class StageBase extends aws_construct_1.AwsConstructBase {
49
50
  */
50
51
  urlForPath(path = "/") {
51
52
  if (!path.startsWith("/")) {
52
- // TODO: Use ValidationError from core/lib/errors
53
- throw new Error(`Path must begin with \"/\": ${path}`);
53
+ throw new errors_1.ValidationError(`Path must begin with \"/\": ${path}`, this);
54
54
  }
55
55
  const stack = aws_stack_1.AwsStack.ofAwsConstruct(this);
56
56
  // For imported APIs, restApiId might be a token. For new APIs, it's resolved.
@@ -162,7 +162,7 @@ class StageBase extends aws_construct_1.AwsConstructBase {
162
162
  }
163
163
  exports.StageBase = StageBase;
164
164
  _a = JSII_RTTI_SYMBOL_1;
165
- StageBase[_a] = { fqn: "terraconstructs.aws.compute.StageBase", version: "0.1.8" };
165
+ StageBase[_a] = { fqn: "terraconstructs.aws.compute.StageBase", version: "0.1.10" };
166
166
  class Stage extends StageBase {
167
167
  /**
168
168
  * Import a Stage by its attributes
@@ -207,12 +207,10 @@ class Stage extends StageBase {
207
207
  if (accessLogFormat !== undefined &&
208
208
  !cdktf_1.Token.isUnresolved(accessLogFormat.toString()) &&
209
209
  !/.*\$context.(requestId|extendedRequestId)\b.*/.test(accessLogFormat.toString())) {
210
- // TODO: Use ValidationError from core/lib/errors
211
- throw new Error("Access log must include either `AccessLogFormat.contextRequestId()` or `AccessLogFormat.contextExtendedRequestId()`");
210
+ throw new errors_1.ValidationError("Access log must include either `AccessLogFormat.contextRequestId()` or `AccessLogFormat.contextExtendedRequestId()`", this);
212
211
  }
213
212
  if (accessLogFormat !== undefined && accessLogDestination === undefined) {
214
- // TODO: Use ValidationError from core/lib/errors
215
- throw new Error("Access log format is specified without a destination");
213
+ throw new errors_1.ValidationError("Access log format is specified without a destination", this);
216
214
  }
217
215
  accessLogSettings = {
218
216
  destinationArn: accessLogDestination.bind(this).destinationArn, // accessLogDestination must be defined if format is
@@ -225,8 +223,7 @@ class Stage extends StageBase {
225
223
  this.enableCacheCluster = true;
226
224
  }
227
225
  else if (this.enableCacheCluster === false) {
228
- // TODO: Use ValidationError from core/lib/errors
229
- throw new Error(`Cannot set "cacheClusterSize" to ${props.cacheClusterSize} and "cacheClusterEnabled" to "false". (${this.node.path})`);
226
+ throw new errors_1.ValidationError(`Cannot set "cacheClusterSize" to ${props.cacheClusterSize} and "cacheClusterEnabled" to "false". (${this.node.path})`, this);
230
227
  }
231
228
  }
232
229
  const cacheClusterSize = this.enableCacheCluster
@@ -300,5 +297,5 @@ class Stage extends StageBase {
300
297
  }
301
298
  exports.Stage = Stage;
302
299
  _b = JSII_RTTI_SYMBOL_1;
303
- Stage[_b] = { fqn: "terraconstructs.aws.compute.Stage", version: "0.1.8" };
304
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhZ2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXdzL2NvbXB1dGUvc3RhZ2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxzREFBZ0Y7QUFDaEYsaUNBQThCO0FBRTlCLDZDQUFzRTtBQUN0RSx1Q0FBMkQ7QUFDM0QsK0ZBQTBFO0FBQzFFLHVEQUEyRDtBQUUzRCx1Q0FBa0Q7QUFFbEQsZ0NBQW1DO0FBQ25DLG9EQUkwQjtBQUMxQiw0Q0FBd0M7QUFDeEMsNENBQTRDO0FBb001QyxJQUFZLGtCQUlYO0FBSkQsV0FBWSxrQkFBa0I7SUFDNUIsaUNBQVcsQ0FBQTtJQUNYLHFDQUFlLENBQUE7SUFDZixtQ0FBYSxDQUFBO0FBQ2YsQ0FBQyxFQUpXLGtCQUFrQixrQ0FBbEIsa0JBQWtCLFFBSTdCO0FBb0ZEOztHQUVHO0FBQ0gsTUFBc0IsU0FBVSxTQUFRLGdDQUFnQjtJQUl0RCxJQUFXLE9BQU87UUFDaEIsT0FBTztZQUNMLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUztZQUN6QixRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVE7WUFDdkIsU0FBUyxFQUFFLElBQUksQ0FBQyxVQUFVLEVBQUU7U0FDN0IsQ0FBQztJQUNKLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNJLFNBQVMsQ0FBQyxFQUFVLEVBQUUsT0FBdUI7UUFDbEQsT0FBTyxJQUFJLGdCQUFNLENBQUMsSUFBSSxFQUFFLEVBQUUsRUFBRTtZQUMxQixNQUFNLEVBQUUsQ0FBQyxJQUFJLENBQUM7WUFDZCxHQUFHLE9BQU87U0FDWCxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksVUFBVSxDQUFDLE9BQWUsR0FBRztRQUNsQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQzFCLGlEQUFpRDtZQUNqRCxNQUFNLElBQUksS0FBSyxDQUFDLCtCQUErQixJQUFJLEVBQUUsQ0FBQyxDQUFDO1FB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LGlCQUFpQixFQUFFLE9BQU8sQ0FBQyxRQUFRLEVBQUUsU0FBUyxFQUFFO2dCQUNoRCxrQkFBa0IsRUFBRSxPQUFPLENBQUMsa0JBQWtCO2FBQy9DO1NBQ0YsQ0FDRixDQUFDO0lBQ0osQ0FBQzs7QUFqTUgsc0JBa01DIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgYXBpR2F0ZXdheVN0YWdlLCBhcGlHYXRld2F5TWV0aG9kU2V0dGluZ3MgfSBmcm9tIFwiQGNka3RmL3Byb3ZpZGVyLWF3c1wiO1xuaW1wb3J0IHsgVG9rZW4gfSBmcm9tIFwiY2RrdGZcIjtcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5pbXBvcnQgeyBBY2Nlc3NMb2dGb3JtYXQsIElBY2Nlc3NMb2dEZXN0aW5hdGlvbiB9IGZyb20gXCIuL2FjY2Vzcy1sb2dcIjtcbmltcG9ydCB7IElBcGlLZXksIEFwaUtleU9wdGlvbnMsIEFwaUtleSB9IGZyb20gXCIuL2FwaS1rZXlcIjtcbmltcG9ydCB7IEFwaUdhdGV3YXlNZXRyaWNzIH0gZnJvbSBcIi4vYXBpZ2F0ZXdheS1jYW5uZWQtbWV0cmljcy5nZW5lcmF0ZWRcIjtcbmltcG9ydCB7IHBhcnNlTWV0aG9kT3B0aW9uc1BhdGggfSBmcm9tIFwiLi9hcGlnYXRld2F5LXV0aWxcIjtcbmltcG9ydCB7IERlcGxveW1lbnQgfSBmcm9tIFwiLi9kZXBsb3ltZW50XCI7XG5pbXBvcnQgeyBJUmVzdEFwaSwgUmVzdEFwaUJhc2UgfSBmcm9tIFwiLi9yZXN0YXBpXCI7XG5pbXBvcnQgeyBEdXJhdGlvbiB9IGZyb20gXCIuLi8uLi9kdXJhdGlvblwiO1xuaW1wb3J0IHsgQXJuRm9ybWF0IH0gZnJvbSBcIi4uL2FyblwiO1xuaW1wb3J0IHtcbiAgQXdzQ29uc3RydWN0QmFzZSxcbiAgQXdzQ29uc3RydWN0UHJvcHMsXG4gIElBd3NDb25zdHJ1Y3QsXG59IGZyb20gXCIuLi9hd3MtY29uc3RydWN0XCI7XG5pbXBvcnQgeyBBd3NTdGFjayB9IGZyb20gXCIuLi9hd3Mtc3RhY2tcIjtcbmltcG9ydCAqIGFzIGNsb3Vkd2F0Y2ggZnJvbSBcIi4uL2Nsb3Vkd2F0Y2hcIjtcbi8vIGltcG9ydCB7IFZhbGlkYXRpb25FcnJvciB9IGZyb20gXCIuLi8uLi9jb3JlL2xpYi9lcnJvcnNcIjsgLy8gVXNlIHRocm93IG5ldyBFcnJvcigpXG5cbi8qKlxuICogUmVwcmVzZW50cyBhbiBBUElHYXRld2F5IFN0YWdlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIElTdGFnZSBleHRlbmRzIElBd3NDb25zdHJ1Y3Qge1xuICAvKipcbiAgICogTmFtZSBvZiB0aGlzIHN0YWdlLlxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICByZWFkb25seSBzdGFnZU5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogUmVzdEFwaSB0byB3aGljaCB0aGlzIHN0YWdlIGlzIGFzc29jaWF0ZWQuXG4gICAqL1xuICByZWFkb25seSByZXN0QXBpOiBJUmVzdEFwaTtcblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgcmVzb3VyY2UgQVJOIGZvciB0aGlzIHN0YWdlLlxuICAgKlxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICByZWFkb25seSBzdGFnZUFybjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBZGQgYW4gQXBpS2V5IHRvIHRoaXMgU3RhZ2VcbiAgICovXG4gIGFkZEFwaUtleShpZDogc3RyaW5nLCBvcHRpb25zPzogQXBpS2V5T3B0aW9ucyk6IElBcGlLZXk7XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGludm9rZSBVUkwgZm9yIGEgY2VydGFpbiBwYXRoLlxuICAgKiBAcGFyYW0gcGF0aCBUaGUgcmVzb3VyY2UgcGF0aFxuICAgKi9cbiAgdXJsRm9yUGF0aChwYXRoPzogc3RyaW5nKTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBnaXZlbiBuYW1lZCBtZXRyaWMgZm9yIHRoaXMgc3RhZ2VcbiAgICovXG4gIG1ldHJpYyhcbiAgICBtZXRyaWNOYW1lOiBzdHJpbmcsXG4gICAgcHJvcHM/OiBjbG91ZHdhdGNoLk1ldHJpY09wdGlvbnMsXG4gICk6IGNsb3Vkd2F0Y2guTWV0cmljO1xuXG4gIC8qKlxuICAgKiBNZXRyaWMgZm9yIHRoZSBudW1iZXIgb2YgY2xpZW50LXNpZGUgZXJyb3JzIGNhcHR1cmVkIGluIGEgZ2l2ZW4gcGVyaW9kLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIHN1bSBvdmVyIDUgbWludXRlc1xuICAgKi9cbiAgbWV0cmljQ2xpZW50RXJyb3IocHJvcHM/OiBjbG91ZHdhdGNoLk1ldHJpY09wdGlvbnMpOiBjbG91ZHdhdGNoLk1ldHJpYztcblxuICAvKipcbiAgICogTWV0cmljIGZvciB0aGUgbnVtYmVyIG9mIHNlcnZlci1zaWRlIGVycm9ycyBjYXB0dXJlZCBpbiBhIGdpdmVuIHBlcmlvZC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBzdW0gb3ZlciA1IG1pbnV0ZXNcbiAgICovXG4gIG1ldHJpY1NlcnZlckVycm9yKHByb3BzPzogY2xvdWR3YXRjaC5NZXRyaWNPcHRpb25zKTogY2xvdWR3YXRjaC5NZXRyaWM7XG5cbiAgLyoqXG4gICAqIE1ldHJpYyBmb3IgdGhlIG51bWJlciBvZiByZXF1ZXN0cyBzZXJ2ZWQgZnJvbSB0aGUgQVBJIGNhY2hlIGluIGEgZ2l2ZW4gcGVyaW9kLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIHN1bSBvdmVyIDUgbWludXRlc1xuICAgKi9cbiAgbWV0cmljQ2FjaGVIaXRDb3VudChwcm9wcz86IGNsb3Vkd2F0Y2guTWV0cmljT3B0aW9ucyk6IGNsb3Vkd2F0Y2guTWV0cmljO1xuXG4gIC8qKlxuICAgKiBNZXRyaWMgZm9yIHRoZSBudW1iZXIgb2YgcmVxdWVzdHMgc2VydmVkIGZyb20gdGhlIGJhY2tlbmQgaW4gYSBnaXZlbiBwZXJpb2QsXG4gICAqIHdoZW4gQVBJIGNhY2hpbmcgaXMgZW5hYmxlZC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBzdW0gb3ZlciA1IG1pbnV0ZXNcbiAgICovXG4gIG1ldHJpY0NhY2hlTWlzc0NvdW50KHByb3BzPzogY2xvdWR3YXRjaC5NZXRyaWNPcHRpb25zKTogY2xvdWR3YXRjaC5NZXRyaWM7XG5cbiAgLyoqXG4gICAqIE1ldHJpYyBmb3IgdGhlIHRvdGFsIG51bWJlciBBUEkgcmVxdWVzdHMgaW4gYSBnaXZlbiBwZXJpb2QuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gc2FtcGxlIGNvdW50IG92ZXIgNSBtaW51dGVzXG4gICAqL1xuICBtZXRyaWNDb3VudChwcm9wcz86IGNsb3Vkd2F0Y2guTWV0cmljT3B0aW9ucyk6IGNsb3Vkd2F0Y2guTWV0cmljO1xuXG4gIC8qKlxuICAgKiBNZXRyaWMgZm9yIHRoZSB0aW1lIGJldHdlZW4gd2hlbiBBUEkgR2F0ZXdheSByZWxheXMgYSByZXF1ZXN0IHRvIHRoZSBiYWNrZW5kXG4gICAqIGFuZCB3aGVuIGl0IHJlY2VpdmVzIGEgcmVzcG9uc2UgZnJvbSB0aGUgYmFja2VuZC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBhdmVyYWdlIG92ZXIgNSBtaW51dGVzLlxuICAgKi9cbiAgbWV0cmljSW50ZWdyYXRpb25MYXRlbmN5KHByb3BzPzogY2xvdWR3YXRjaC5NZXRyaWNPcHRpb25zKTogY2xvdWR3YXRjaC5NZXRyaWM7XG5cbiAgLyoqXG4gICAqIFRoZSB0aW1lIGJldHdlZW4gd2hlbiBBUEkgR2F0ZXdheSByZWNlaXZlcyBhIHJlcXVlc3QgZnJvbSBhIGNsaWVudFxuICAgKiBhbmQgd2hlbiBpdCByZXR1cm5zIGEgcmVzcG9uc2UgdG8gdGhlIGNsaWVudC5cbiAgICogVGhlIGxhdGVuY3kgaW5jbHVkZXMgdGhlIGludGVncmF0aW9uIGxhdGVuY3kgYW5kIG90aGVyIEFQSSBHYXRld2F5IG92ZXJoZWFkLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGF2ZXJhZ2Ugb3ZlciA1IG1pbnV0ZXMuXG4gICAqL1xuICBtZXRyaWNMYXRlbmN5KHByb3BzPzogY2xvdWR3YXRjaC5NZXRyaWNPcHRpb25zKTogY2xvdWR3YXRjaC5NZXRyaWM7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3RhZ2VPcHRpb25zIGV4dGVuZHMgTWV0aG9kRGVwbG95bWVudE9wdGlvbnMge1xuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIHN0YWdlLCB3aGljaCBBUEkgR2F0ZXdheSB1c2VzIGFzIHRoZSBmaXJzdCBwYXRoIHNlZ21lbnRcbiAgICogaW4gdGhlIGludm9rZWQgVW5pZm9ybSBSZXNvdXJjZSBJZGVudGlmaWVyIChVUkkpLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIFwicHJvZFwiXG4gICAqL1xuICByZWFkb25seSBzdGFnZU5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBDbG91ZFdhdGNoIExvZ3MgbG9nIGdyb3VwIG9yIEZpcmVob3NlIGRlbGl2ZXJ5IHN0cmVhbSB3aGVyZSB0byB3cml0ZSBhY2Nlc3MgbG9ncy5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBObyBkZXN0aW5hdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgYWNjZXNzTG9nRGVzdGluYXRpb24/OiBJQWNjZXNzTG9nRGVzdGluYXRpb247XG5cbiAgLyoqXG4gICAqIEEgc2luZ2xlIGxpbmUgZm9ybWF0IG9mIGFjY2VzcyBsb2dzIG9mIGRhdGEsIGFzIHNwZWNpZmllZCBieSBzZWxlY3RlZCAkY29udGVudCB2YXJpYWJsZXMuXG4gICAqIFRoZSBmb3JtYXQgbXVzdCBpbmNsdWRlIGVpdGhlciBgQWNjZXNzTG9nRm9ybWF0LmNvbnRleHRSZXF1ZXN0SWQoKWBcbiAgICogb3IgYEFjY2Vzc0xvZ0Zvcm1hdC5jb250ZXh0RXh0ZW5kZWRSZXF1ZXN0SWQoKWAuXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2FwaWdhdGV3YXkvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL2FwaS1nYXRld2F5LW1hcHBpbmctdGVtcGxhdGUtcmVmZXJlbmNlLmh0bWwjY29udGV4dC12YXJpYWJsZS1yZWZlcmVuY2VcbiAgICpcbiAgICogQGRlZmF1bHQgLSBDb21tb24gTG9nIEZvcm1hdFxuICAgKi9cbiAgcmVhZG9ubHkgYWNjZXNzTG9nRm9ybWF0PzogQWNjZXNzTG9nRm9ybWF0O1xuXG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgd2hldGhlciBBbWF6b24gWC1SYXkgdHJhY2luZyBpcyBlbmFibGVkIGZvciB0aGlzIG1ldGhvZC5cbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IHRyYWNpbmdFbmFibGVkPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogSW5kaWNhdGVzIHdoZXRoZXIgY2FjaGUgY2x1c3RlcmluZyBpcyBlbmFibGVkIGZvciB0aGUgc3RhZ2UuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gRGlzYWJsZWQgZm9yIHRoZSBzdGFnZS5cbiAgICovXG4gIHJlYWRvbmx5IGNhY2hlQ2x1c3RlckVuYWJsZWQ/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgc3RhZ2UncyBjYWNoZSBjbHVzdGVyIHNpemUuXG4gICAqIEBkZWZhdWx0IDAuNVxuICAgKi9cbiAgcmVhZG9ubHkgY2FjaGVDbHVzdGVyU2l6ZT86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGlkZW50aWZpZXIgb2YgdGhlIGNsaWVudCBjZXJ0aWZpY2F0ZSB0aGF0IEFQSSBHYXRld2F5IHVzZXMgdG8gY2FsbFxuICAgKiB5b3VyIGludGVncmF0aW9uIGVuZHBvaW50cyBpbiB0aGUgc3RhZ2UuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gTm9uZS5cbiAgICovXG4gIHJlYWRvbmx5IGNsaWVudENlcnRpZmljYXRlSWQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEEgZGVzY3JpcHRpb24gb2YgdGhlIHB1cnBvc2Ugb2YgdGhlIHN0YWdlLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIE5vIGRlc2NyaXB0aW9uLlxuICAgKi9cbiAgcmVhZG9ubHkgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSB2ZXJzaW9uIGlkZW50aWZpZXIgb2YgdGhlIEFQSSBkb2N1bWVudGF0aW9uIHNuYXBzaG90LlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIE5vIGRvY3VtZW50YXRpb24gdmVyc2lvbi5cbiAgICovXG4gIHJlYWRvbmx5IGRvY3VtZW50YXRpb25WZXJzaW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBIG1hcCB0aGF0IGRlZmluZXMgdGhlIHN0YWdlIHZhcmlhYmxlcy4gVmFyaWFibGUgbmFtZXMgbXVzdCBjb25zaXN0IG9mXG4gICAqIGFscGhhbnVtZXJpYyBjaGFyYWN0ZXJzLCBhbmQgdGhlIHZhbHVlcyBtdXN0IG1hdGNoIHRoZSBmb2xsb3dpbmcgcmVndWxhclxuICAgKiBleHByZXNzaW9uOiBbQS1aYS16MC05LS5ffjovPyMmPSxdKy5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBObyBzdGFnZSB2YXJpYWJsZXMuXG4gICAqL1xuICByZWFkb25seSB2YXJpYWJsZXM/OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9O1xuXG4gIC8qKlxuICAgKiBNZXRob2QgZGVwbG95bWVudCBvcHRpb25zIGZvciBzcGVjaWZpYyByZXNvdXJjZXMvbWV0aG9kcy4gVGhlc2Ugd2lsbFxuICAgKiBvdmVycmlkZSBjb21tb24gb3B0aW9ucyBkZWZpbmVkIGluIGBTdGFnZU9wdGlvbnMjbWV0aG9kT3B0aW9uc2AuXG4gICAqXG4gICAqIEBwYXJhbSBwYXRoIGlzIHtyZXNvdXJjZV9wYXRofS97aHR0cF9tZXRob2R9IChpLmUuIC9hcGkvdG95cy9HRVQpIGZvciBhblxuICAgKiBpbmRpdmlkdWFsIG1ldGhvZCBvdmVycmlkZS4gWW91IGNhbiB1c2UgYCpgIGZvciBib3RoIHtyZXNvdXJjZV9wYXRofSBhbmQge2h0dHBfbWV0aG9kfVxuICAgKiB0byBkZWZpbmUgb3B0aW9ucyBmb3IgYWxsIG1ldGhvZHMvcmVzb3VyY2VzLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIENvbW1vbiBvcHRpb25zIHdpbGwgYmUgdXNlZC5cbiAgICovXG4gIHJlYWRvbmx5IG1ldGhvZE9wdGlvbnM/OiB7IFtwYXRoOiBzdHJpbmddOiBNZXRob2REZXBsb3ltZW50T3B0aW9ucyB9O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFN0YWdlUHJvcHMgZXh0ZW5kcyBTdGFnZU9wdGlvbnMsIEF3c0NvbnN0cnVjdFByb3BzIHtcbiAgLyoqXG4gICAqIFRoZSBkZXBsb3ltZW50IHRoYXQgdGhpcyBzdGFnZSBwb2ludHMgdG8uXG4gICAqL1xuICByZWFkb25seSBkZXBsb3ltZW50OiBEZXBsb3ltZW50O1xufVxuXG5leHBvcnQgZW51bSBNZXRob2RMb2dnaW5nTGV2ZWwge1xuICBPRkYgPSBcIk9GRlwiLFxuICBFUlJPUiA9IFwiRVJST1JcIixcbiAgSU5GTyA9IFwiSU5GT1wiLFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIE1ldGhvZERlcGxveW1lbnRPcHRpb25zIHtcbiAgLyoqXG4gICAqIFNwZWNpZmllcyB3aGV0aGVyIEFtYXpvbiBDbG91ZFdhdGNoIG1ldHJpY3MgYXJlIGVuYWJsZWQgZm9yIHRoaXMgbWV0aG9kLlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgbWV0cmljc0VuYWJsZWQ/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgdGhlIGxvZ2dpbmcgbGV2ZWwgZm9yIHRoaXMgbWV0aG9kLCB3aGljaCBlZmZlY3RzIHRoZSBsb2dcbiAgICogZW50cmllcyBwdXNoZWQgdG8gQW1hem9uIENsb3VkV2F0Y2ggTG9ncy5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBPZmZcbiAgICovXG4gIHJlYWRvbmx5IGxvZ2dpbmdMZXZlbD86IE1ldGhvZExvZ2dpbmdMZXZlbDtcblxuICAvKipcbiAgICogU3BlY2lmaWVzIHdoZXRoZXIgZGF0YSB0cmFjZSBsb2dnaW5nIGlzIGVuYWJsZWQgZm9yIHRoaXMgbWV0aG9kLlxuICAgKiBXaGVuIGVuYWJsZWQsIEFQSSBnYXRld2F5IHdpbGwgbG9nIHRoZSBmdWxsIEFQSSByZXF1ZXN0cyBhbmQgcmVzcG9uc2VzLlxuICAgKiBUaGlzIGNhbiBiZSB1c2VmdWwgdG8gdHJvdWJsZXNob290IEFQSXMsIGJ1dCBjYW4gcmVzdWx0IGluIGxvZ2dpbmcgc2Vuc2l0aXZlIGRhdGEuXG4gICAqIFdlIHJlY29tbWVuZCB0aGF0IHlvdSBkb24ndCBlbmFibGUgdGhpcyBmZWF0dXJlIGZvciBwcm9kdWN0aW9uIEFQSXMuXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSBkYXRhVHJhY2VFbmFibGVkPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogU3BlY2lmaWVzIHRoZSB0aHJvdHRsaW5nIGJ1cnN0IGxpbWl0LlxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9hcGlnYXRld2F5L2xhdGVzdC9kZXZlbG9wZXJndWlkZS9hcGktZ2F0ZXdheS1yZXF1ZXN0LXRocm90dGxpbmcuaHRtbFxuICAgKlxuICAgKiBAZGVmYXVsdCAtIE5vIGFkZGl0aW9uYWwgcmVzdHJpY3Rpb24uXG4gICAqL1xuICByZWFkb25seSB0aHJvdHRsaW5nQnVyc3RMaW1pdD86IG51bWJlcjtcblxuICAvKipcbiAgICogU3BlY2lmaWVzIHRoZSB0aHJvdHRsaW5nIHJhdGUgbGltaXQuXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2FwaWdhdGV3YXkvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL2FwaS1nYXRld2F5LXJlcXVlc3QtdGhyb3R0bGluZy5odG1sXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gTm8gYWRkaXRpb25hbCByZXN0cmljdGlvbi5cbiAgICovXG4gIHJlYWRvbmx5IHRocm90dGxpbmdSYXRlTGltaXQ/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFNwZWNpZmllcyB3aGV0aGVyIHJlc3BvbnNlcyBzaG91bGQgYmUgY2FjaGVkIGFuZCByZXR1cm5lZCBmb3IgcmVxdWVzdHMuIEFcbiAgICogY2FjaGUgY2x1c3RlciBtdXN0IGJlIGVuYWJsZWQgb24gdGhlIHN0YWdlIGZvciByZXNwb25zZXMgdG8gYmUgY2FjaGVkLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIENhY2hpbmcgaXMgRGlzYWJsZWQuXG4gICAqL1xuICByZWFkb25seSBjYWNoaW5nRW5hYmxlZD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFNwZWNpZmllcyB0aGUgdGltZSB0byBsaXZlIChUVEwpLCBpbiBzZWNvbmRzLCBmb3IgY2FjaGVkIHJlc3BvbnNlcy4gVGhlXG4gICAqIGhpZ2hlciB0aGUgVFRMLCB0aGUgbG9uZ2VyIHRoZSByZXNwb25zZSB3aWxsIGJlIGNhY2hlZC5cbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYXBpZ2F0ZXdheS9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvYXBpLWdhdGV3YXktY2FjaGluZy5odG1sXG4gICAqXG4gICAqIEBkZWZhdWx0IER1cmF0aW9uLm1pbnV0ZXMoNSlcbiAgICovXG4gIHJlYWRvbmx5IGNhY2hlVHRsPzogRHVyYXRpb247XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBjYWNoZWQgcmVzcG9uc2VzIGFyZSBlbmNyeXB0ZWQuXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSBjYWNoZURhdGFFbmNyeXB0ZWQ/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIFRoZSBhdHRyaWJ1dGVzIG9mIGFuIGltcG9ydGVkIFN0YWdlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3RhZ2VBdHRyaWJ1dGVzIHtcbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBzdGFnZVxuICAgKi9cbiAgcmVhZG9ubHkgc3RhZ2VOYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBSZXN0QXBpIHRoYXQgdGhlIHN0YWdlIGJlbG9uZ3MgdG9cbiAgICovXG4gIHJlYWRvbmx5IHJlc3RBcGk6IElSZXN0QXBpO1xufVxuXG4vKipcbiAqIEJhc2UgY2xhc3MgZm9yIGFuIEFwaUdhdGV3YXkgU3RhZ2VcbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFN0YWdlQmFzZSBleHRlbmRzIEF3c0NvbnN0cnVjdEJhc2UgaW1wbGVtZW50cyBJU3RhZ2Uge1xuICBwdWJsaWMgYWJzdHJhY3QgcmVhZG9ubHkgc3RhZ2VOYW1lOiBzdHJpbmc7XG4gIHB1YmxpYyBhYnN0cmFjdCByZWFkb25seSByZXN0QXBpOiBJUmVzdEFwaTtcblxuICBwdWJsaWMgZ2V0IG91dHB1dHMoKTogUmVjb3JkPHN0cmluZywgYW55PiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHN0YWdlTmFtZTogdGhpcy5zdGFnZU5hbWUsXG4gICAgICBzdGFnZUFybjogdGhpcy5zdGFnZUFybixcbiAgICAgIGludm9rZVVybDogdGhpcy51cmxGb3JQYXRoKCksXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgYW4gQXBpS2V5IHRvIHRoaXMgc3RhZ2VcbiAgICpcbiAgICogTm90ZTogZGlyZWN0IHN0YWdlIGFzc29jaWF0aW9uIGlzIGRlcHJlY2F0ZWQuXG4gICAqIFN0YWdlIGFzc29jaWF0aW9uIHNob3VsZCBiZSBoYW5kbGVkIHZpYSBVc2FnZSBQbGFucy5cbiAgICovXG4gIHB1YmxpYyBhZGRBcGlLZXkoaWQ6IHN0cmluZywgb3B0aW9ucz86IEFwaUtleU9wdGlvbnMpOiBJQXBpS2V5IHtcbiAgICByZXR1cm4gbmV3IEFwaUtleSh0aGlzLCBpZCwge1xuICAgICAgc3RhZ2VzOiBbdGhpc10sXG4gICAgICAuLi5vcHRpb25zLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGludm9rZSBVUkwgZm9yIGEgY2VydGFpbiBwYXRoLlxuICAgKiBAcGFyYW0gcGF0aCBUaGUgcmVzb3VyY2UgcGF0aFxuICAgKi9cbiAgcHVibGljIHVybEZvclBhdGgocGF0aDogc3RyaW5nID0gXCIvXCIpOiBzdHJpbmcge1xuICAgIGlmICghcGF0aC5zdGFydHNXaXRoKFwiL1wiKSkge1xuICAgICAgLy8gVE9ETzogVXNlIFZhbGlkYXRpb25FcnJvciBmcm9tIGNvcmUvbGliL2Vycm9yc1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBQYXRoIG11c3QgYmVnaW4gd2l0aCBcXFwiL1xcXCI6ICR7cGF0aH1gKTtcbiAgICB9XG4gICAgY29uc3Qgc3RhY2sgPSBBd3NTdGFjay5vZkF3c0NvbnN0cnVjdCh0aGlzKTtcbiAgICAvLyBGb3IgaW1wb3J0ZWQgQVBJcywgcmVzdEFwaUlkIG1pZ2h0IGJlIGEgdG9rZW4uIEZvciBuZXcgQVBJcywgaXQncyByZXNvbHZlZC5cbiAgICAvLyBUaGUgVVJMIHN0cnVjdHVyZSBpcyBodHRwczovL3tyZXN0YXBpLWlkfS5leGVjdXRlLWFwaS57cmVnaW9ufS57ZG5zLXN1ZmZpeH0ve3N0YWdlTmFtZX0ve3BhdGh9XG4gICAgcmV0dXJuIGBodHRwczovLyR7dGhpcy5yZXN0QXBpLnJlc3RBcGlJZH0uZXhlY3V0ZS1hcGkuJHtzdGFjay5yZWdpb259LiR7c3RhY2sudXJsU3VmZml4fS8ke3RoaXMuc3RhZ2VOYW1lfSR7cGF0aH1gO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIHJlc291cmNlIEFSTiBmb3IgdGhpcyBzdGFnZTpcbiAgICpcbiAgICogICBhcm46YXdzOmFwaWdhdGV3YXk6e3JlZ2lvbn06Oi9yZXN0YXBpcy97cmVzdEFwaUlkfS9zdGFnZXMve3N0YWdlTmFtZX1cbiAgICpcbiAgICogTm90ZSB0aGF0IHRoaXMgaXMgc2VwYXJhdGUgZnJvbSB0aGUgZXhlY3V0ZS1hcGkgQVJOIGZvciBtZXRob2RzIGFuZCByZXNvdXJjZXNcbiAgICogd2l0aGluIHRoaXMgc3RhZ2UuXG4gICAqXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHB1YmxpYyBnZXQgc3RhZ2VBcm4oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gQXdzU3RhY2sub2ZBd3NDb25zdHJ1Y3QodGhpcykuZm9ybWF0QXJuKHtcbiAgICAgIGFybkZvcm1hdDogQXJuRm9ybWF0LlNMQVNIX1JFU09VUkNFX1NMQVNIX1JFU09VUkNFX05BTUUsXG4gICAgICBzZXJ2aWNlOiBcImFwaWdhdGV3YXlcIixcbiAgICAgIGFjY291bnQ6IFwiXCIsIC8vIEFQSUdhdGV3YXkgQVJOcyBmb3Igc3RhZ2VzIGRvbid0IGluY2x1ZGUgYWNjb3VudCBpbiB0aGlzIHBhcnRcbiAgICAgIHJlc291cmNlOiBcInJlc3RhcGlzXCIsXG4gICAgICByZXNvdXJjZU5hbWU6IGAke3RoaXMucmVzdEFwaS5yZXN0QXBpSWR9L3N0YWdlcy8ke3RoaXMuc3RhZ2VOYW1lfWAsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgZ2l2ZW4gbmFtZWQgbWV0cmljIGZvciB0aGlzIHN0YWdlXG4gICAqL1xuICBwdWJsaWMgbWV0cmljKFxuICAgIG1ldHJpY05hbWU6IHN0cmluZyxcbiAgICBwcm9wcz86IGNsb3Vkd2F0Y2guTWV0cmljT3B0aW9ucyxcbiAgKTogY2xvdWR3YXRjaC5NZXRyaWMge1xuICAgIHJldHVybiBuZXcgY2xvdWR3YXRjaC5NZXRyaWMoe1xuICAgICAgbmFtZXNwYWNlOiBcIkFXUy9BcGlHYXRld2F5XCIsXG4gICAgICBtZXRyaWNOYW1lLFxuICAgICAgZGltZW5zaW9uc01hcDoge1xuICAgICAgICBBcGlOYW1lOiB0aGlzLnJlc3RBcGkucmVzdEFwaU5hbWUsXG4gICAgICAgIFN0YWdlOiB0aGlzLnN0YWdlTmFtZSxcbiAgICAgIH0sXG4gICAgICAuLi5wcm9wcyxcbiAgICB9KS5hdHRhY2hUbyh0aGlzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNZXRyaWMgZm9yIHRoZSBudW1iZXIgb2YgY2xpZW50LXNpZGUgZXJyb3JzIGNhcHR1cmVkIGluIGEgZ2l2ZW4gcGVyaW9kLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIHN1bSBvdmVyIDUgbWludXRlc1xuICAgKi9cbiAgcHVibGljIG1ldHJpY0NsaWVudEVycm9yKFxuICAgIHByb3BzPzogY2xvdWR3YXRjaC5NZXRyaWNPcHRpb25zLFxuICApOiBjbG91ZHdhdGNoLk1ldHJpYyB7XG4gICAgcmV0dXJuIHRoaXMuY2FubmVkTWV0cmljKEFwaUdhdGV3YXlNZXRyaWNzLl80WHhFcnJvclN1bSwgcHJvcHMpO1xuICB9XG5cbiAgLyoqXG4gICAqIE1ldHJpYyBmb3IgdGhlIG51bWJlciBvZiBzZXJ2ZXItc2lkZSBlcnJvcnMgY2FwdHVyZWQgaW4gYSBnaXZlbiBwZXJpb2QuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gc3VtIG92ZXIgNSBtaW51dGVzXG4gICAqL1xuICBwdWJsaWMgbWV0cmljU2VydmVyRXJyb3IoXG4gICAgcHJvcHM/OiBjbG91ZHdhdGNoLk1ldHJpY09wdGlvbnMsXG4gICk6IGNsb3Vkd2F0Y2guTWV0cmljIHtcbiAgICByZXR1cm4gdGhpcy5jYW5uZWRNZXRyaWMoQXBpR2F0ZXdheU1ldHJpY3MuXzVYeEVycm9yU3VtLCBwcm9wcyk7XG4gIH1cblxuICAvKipcbiAgICogTWV0cmljIGZvciB0aGUgbnVtYmVyIG9mIHJlcXVlc3RzIHNlcnZlZCBmcm9tIHRoZSBBUEkgY2FjaGUgaW4gYSBnaXZlbiBwZXJpb2QuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gc3VtIG92ZXIgNSBtaW51dGVzXG4gICAqL1xuICBwdWJsaWMgbWV0cmljQ2FjaGVIaXRDb3VudChcbiAgICBwcm9wcz86IGNsb3Vkd2F0Y2guTWV0cmljT3B0aW9ucyxcbiAgKTogY2xvdWR3YXRjaC5NZXRyaWMge1xuICAgIHJldHVybiB0aGlzLmNhbm5lZE1ldHJpYyhBcGlHYXRld2F5TWV0cmljcy5jYWNoZUhpdENvdW50U3VtLCBwcm9wcyk7XG4gIH1cblxuICAvKipcbiAgICogTWV0cmljIGZvciB0aGUgbnVtYmVyIG9mIHJlcXVlc3RzIHNlcnZlZCBmcm9tIHRoZSBiYWNrZW5kIGluIGEgZ2l2ZW4gcGVyaW9kLFxuICAgKiB3aGVuIEFQSSBjYWNoaW5nIGlzIGVuYWJsZWQuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gc3VtIG92ZXIgNSBtaW51dGVzXG4gICAqL1xuICBwdWJsaWMgbWV0cmljQ2FjaGVNaXNzQ291bnQoXG4gICAgcHJvcHM/OiBjbG91ZHdhdGNoLk1ldHJpY09wdGlvbnMsXG4gICk6IGNsb3Vkd2F0Y2guTWV0cmljIHtcbiAgICByZXR1cm4gdGhpcy5jYW5uZWRNZXRyaWMoQXBpR2F0ZXdheU1ldHJpY3MuY2FjaGVNaXNzQ291bnRTdW0sIHByb3BzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNZXRyaWMgZm9yIHRoZSB0b3RhbCBudW1iZXIgQVBJIHJlcXVlc3RzIGluIGEgZ2l2ZW4gcGVyaW9kLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIHNhbXBsZSBjb3VudCBvdmVyIDUgbWludXRlc1xuICAgKi9cbiAgcHVibGljIG1ldHJpY0NvdW50KHByb3BzPzogY2xvdWR3YXRjaC5NZXRyaWNPcHRpb25zKTogY2xvdWR3YXRjaC5NZXRyaWMge1xuICAgIHJldHVybiB0aGlzLmNhbm5lZE1ldHJpYyhBcGlHYXRld2F5TWV0cmljcy5jb3VudFN1bSwge1xuICAgICAgc3RhdGlzdGljOiBcIlNhbXBsZUNvdW50XCIsXG4gICAgICAuLi5wcm9wcyxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNZXRyaWMgZm9yIHRoZSB0aW1lIGJldHdlZW4gd2hlbiBBUEkgR2F0ZXdheSByZWxheXMgYSByZXF1ZXN0IHRvIHRoZSBiYWNrZW5kXG4gICAqIGFuZCB3aGVuIGl0IHJlY2VpdmVzIGEgcmVzcG9uc2UgZnJvbSB0aGUgYmFja2VuZC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBhdmVyYWdlIG92ZXIgNSBtaW51dGVzLlxuICAgKi9cbiAgcHVibGljIG1ldHJpY0ludGVncmF0aW9uTGF0ZW5jeShcbiAgICBwcm9wcz86IGNsb3Vkd2F0Y2guTWV0cmljT3B0aW9ucyxcbiAgKTogY2xvdWR3YXRjaC5NZXRyaWMge1xuICAgIHJldHVybiB0aGlzLmNhbm5lZE1ldHJpYyhcbiAgICAgIEFwaUdhdGV3YXlNZXRyaWNzLmludGVncmF0aW9uTGF0ZW5jeUF2ZXJhZ2UsXG4gICAgICBwcm9wcyxcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSB0aW1lIGJldHdlZW4gd2hlbiBBUEkgR2F0ZXdheSByZWNlaXZlcyBhIHJlcXVlc3QgZnJvbSBhIGNsaWVudFxuICAgKiBhbmQgd2hlbiBpdCByZXR1cm5zIGEgcmVzcG9uc2UgdG8gdGhlIGNsaWVudC5cbiAgICogVGhlIGxhdGVuY3kgaW5jbHVkZXMgdGhlIGludGVncmF0aW9uIGxhdGVuY3kgYW5kIG90aGVyIEFQSSBHYXRld2F5IG92ZXJoZWFkLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGF2ZXJhZ2Ugb3ZlciA1IG1pbnV0ZXMuXG4gICAqL1xuICBwdWJsaWMgbWV0cmljTGF0ZW5jeShwcm9wcz86IGNsb3Vkd2F0Y2guTWV0cmljT3B0aW9ucyk6IGNsb3Vkd2F0Y2guTWV0cmljIHtcbiAgICByZXR1cm4gdGhpcy5jYW5uZWRNZXRyaWMoQXBpR2F0ZXdheU1ldHJpY3MubGF0ZW5jeUF2ZXJhZ2UsIHByb3BzKTtcbiAgfVxuXG4gIHByaXZhdGUgY2FubmVkTWV0cmljKFxuICAgIGZuOiAoZGltczogeyBBcGlOYW1lOiBzdHJpbmc7IFN0YWdlOiBzdHJpbmcgfSkgPT4gY2xvdWR3YXRjaC5NZXRyaWNQcm9wcyxcbiAgICBwcm9wcz86IGNsb3Vkd2F0Y2guTWV0cmljT3B0aW9ucyxcbiAgKTogY2xvdWR3YXRjaC5NZXRyaWMge1xuICAgIHJldHVybiBuZXcgY2xvdWR3YXRjaC5NZXRyaWMoe1xuICAgICAgLi4uZm4oeyBBcGlOYW1lOiB0aGlzLnJlc3RBcGkucmVzdEFwaU5hbWUsIFN0YWdlOiB0aGlzLnN0YWdlTmFtZSB9KSxcbiAgICAgIC4uLnByb3BzLFxuICAgIH0pLmF0dGFjaFRvKHRoaXMpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTdGFnZSBleHRlbmRzIFN0YWdlQmFzZSB7XG4gIC8qKlxuICAgKiBJbXBvcnQgYSBTdGFnZSBieSBpdHMgYXR0cmlidXRlc1xuICAgKi9cbiAgcHVibGljIHN0YXRpYyBmcm9tU3RhZ2VBdHRyaWJ1dGVzKFxuICAgIHNjb3BlOiBDb25zdHJ1Y3QsXG4gICAgaWQ6IHN0cmluZyxcbiAgICBhdHRyczogU3RhZ2VBdHRyaWJ1dGVzLFxuICApOiBJU3RhZ2Uge1xuICAgIGNsYXNzIEltcG9ydCBleHRlbmRzIFN0YWdlQmFzZSB7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgc3RhZ2VOYW1lID0gYXR0cnMuc3RhZ2VOYW1lO1xuICAgICAgcHVibGljIHJlYWRvbmx5IHJlc3RBcGkgPSBhdHRycy5yZXN0QXBpO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IEltcG9ydChzY29wZSwgaWQpO1xuICB9XG5cbiAgcHVibGljIHJlYWRvbmx5IHN0YWdlTmFtZTogc3RyaW5nO1xuICBwdWJsaWMgcmVhZG9ubHkgcmVzdEFwaTogSVJlc3RBcGk7XG4gIHB1YmxpYyByZWFkb25seSByZXNvdXJjZTogYXBpR2F0ZXdheVN0YWdlLkFwaUdhdGV3YXlTdGFnZTtcblxuICBwcml2YXRlIGVuYWJsZUNhY2hlQ2x1c3Rlcj86IGJvb2xlYW47XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IFN0YWdlUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIHByb3BzKTtcblxuICAgIHRoaXMucmVzdEFwaSA9IHByb3BzLmRlcGxveW1lbnQuYXBpO1xuICAgIHRoaXMuZW5hYmxlQ2FjaGVDbHVzdGVyID0gcHJvcHMuY2FjaGVDbHVzdGVyRW5hYmxlZDtcblxuICAgIC8vIERldGVybWluZSBpZiBjYWNoZSBjbHVzdGVyIG5lZWRzIHRvIGJlIGVuYWJsZWQgYmFzZWQgb24gbWV0aG9kIG9wdGlvbnNcbiAgICBjb25zdCBjb21tb25DYWNoaW5nRW5hYmxlZCA9IHByb3BzLmNhY2hpbmdFbmFibGVkO1xuICAgIGlmIChjb21tb25DYWNoaW5nRW5hYmxlZCkge1xuICAgICAgaWYgKHRoaXMuZW5hYmxlQ2FjaGVDbHVzdGVyID09PSBmYWxzZSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgXCJDYW5ub3QgZW5hYmxlIGNhY2hpbmcgZm9yIGNvbW1vbiBtZXRob2RzIHNpbmNlIGNhY2hlIGNsdXN0ZXIgaXMgZGlzYWJsZWQgb24gc3RhZ2VcIixcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuZW5hYmxlQ2FjaGVDbHVzdGVyID0gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKHByb3BzLm1ldGhvZE9wdGlvbnMpIHtcbiAgICAgIGZvciAoY29uc3QgcGF0aCBvZiBPYmplY3Qua2V5cyhwcm9wcy5tZXRob2RPcHRpb25zKSkge1xuICAgICAgICBpZiAocHJvcHMubWV0aG9kT3B0aW9uc1twYXRoXS5jYWNoaW5nRW5hYmxlZCkge1xuICAgICAgICAgIGlmICh0aGlzLmVuYWJsZUNhY2hlQ2x1c3RlciA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgYENhbm5vdCBlbmFibGUgY2FjaGluZyBmb3IgbWV0aG9kICR7cGF0aH0gc2luY2UgY2FjaGUgY2x1c3RlciBpcyBkaXNhYmxlZCBvbiBzdGFnZWAsXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmVuYWJsZUNhY2hlQ2x1c3RlciA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBjdXN0b20gYWNjZXNzIGxvZ2dpbmdcbiAgICBsZXQgYWNjZXNzTG9nU2V0dGluZ3M6XG4gICAgICB8IGFwaUdhdGV3YXlTdGFnZS5BcGlHYXRld2F5U3RhZ2VBY2Nlc3NMb2dTZXR0aW5nc1xuICAgICAgfCB1bmRlZmluZWQ7XG4gICAgY29uc3QgYWNjZXNzTG9nRGVzdGluYXRpb24gPSBwcm9wcy5hY2Nlc3NMb2dEZXN0aW5hdGlvbjtcbiAgICBjb25zdCBhY2Nlc3NMb2dGb3JtYXQgPSBwcm9wcy5hY2Nlc3NMb2dGb3JtYXQ7XG5cbiAgICBpZiAoYWNjZXNzTG9nRGVzdGluYXRpb24gfHwgYWNjZXNzTG9nRm9ybWF0KSB7XG4gICAgICBpZiAoXG4gICAgICAgIGFjY2Vzc0xvZ0Zvcm1hdCAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICFUb2tlbi5pc1VucmVzb2x2ZWQoYWNjZXNzTG9nRm9ybWF0LnRvU3RyaW5nKCkpICYmXG4gICAgICAgICEvLipcXCRjb250ZXh0LihyZXF1ZXN0SWR8ZXh0ZW5kZWRSZXF1ZXN0SWQpXFxiLiovLnRlc3QoXG4gICAgICAgICAgYWNjZXNzTG9nRm9ybWF0LnRvU3RyaW5nKCksXG4gICAgICAgIClcbiAgICAgICkge1xuICAgICAgICAvLyBUT0RPOiBVc2UgVmFsaWRhdGlvbkVycm9yIGZyb20gY29yZS9saWIvZXJyb3JzXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBcIkFjY2VzcyBsb2cgbXVzdCBpbmNsdWRlIGVpdGhlciBgQWNjZXNzTG9nRm9ybWF0LmNvbnRleHRSZXF1ZXN0SWQoKWAgb3IgYEFjY2Vzc0xvZ0Zvcm1hdC5jb250ZXh0RXh0ZW5kZWRSZXF1ZXN0SWQoKWBcIixcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGlmIChhY2Nlc3NMb2dGb3JtYXQgIT09IHVuZGVmaW5lZCAmJiBhY2Nlc3NMb2dEZXN0aW5hdGlvbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIC8vIFRPRE86IFVzZSBWYWxpZGF0aW9uRXJyb3IgZnJvbSBjb3JlL2xpYi9lcnJvcnNcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQWNjZXNzIGxvZyBmb3JtYXQgaXMgc3BlY2lmaWVkIHdpdGhvdXQgYSBkZXN0aW5hdGlvblwiKTtcbiAgICAgIH1cblxuICAgICAgYWNjZXNzTG9nU2V0dGluZ3MgPSB7XG4gICAgICAgIGRlc3RpbmF0aW9uQXJuOiBhY2Nlc3NMb2dEZXN0aW5hdGlvbiEuYmluZCh0aGlzKS5kZXN0aW5hdGlvbkFybiwgLy8gYWNjZXNzTG9nRGVzdGluYXRpb24gbXVzdCBiZSBkZWZpbmVkIGlmIGZvcm1hdCBpc1xuICAgICAgICBmb3JtYXQ6IGFjY2Vzc0xvZ0Zvcm1hdD8udG9TdHJpbmcoKSA/PyBBY2Nlc3NMb2dGb3JtYXQuY2xmKCkudG9TdHJpbmcoKSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gZW5hYmxlIGNhY2hlIGNsdXN0ZXIgaWYgY2FjaGVDbHVzdGVyU2l6ZSBpcyBzZXRcbiAgICBpZiAocHJvcHMuY2FjaGVDbHVzdGVyU2l6ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAodGhpcy5lbmFibGVDYWNoZUNsdXN0ZXIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLmVuYWJsZUNhY2hlQ2x1c3RlciA9IHRydWU7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMuZW5hYmxlQ2FjaGVDbHVzdGVyID09PSBmYWxzZSkge1xuICAgICAgICAvLyBUT0RPOiBVc2UgVmFsaWRhdGlvbkVycm9yIGZyb20gY29yZS9saWIvZXJyb3JzXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgQ2Fubm90IHNldCBcImNhY2hlQ2x1c3RlclNpemVcIiB0byAke3Byb3BzLmNhY2hlQ2x1c3RlclNpemV9IGFuZCBcImNhY2hlQ2x1c3RlckVuYWJsZWRcIiB0byBcImZhbHNlXCIuICgke3RoaXMubm9kZS5wYXRofSlgLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGNhY2hlQ2x1c3RlclNpemUgPSB0aGlzLmVuYWJsZUNhY2hlQ2x1c3RlclxuICAgICAgPyBwcm9wcy5jYWNoZUNsdXN0ZXJTaXplIHx8IFwiMC41XCJcbiAgICAgIDogdW5kZWZpbmVkO1xuXG4gICAgdGhpcy5yZXNvdXJjZSA9IG5ldyBhcGlHYXRld2F5U3RhZ2UuQXBpR2F0ZXdheVN0YWdlKHRoaXMsIFwiUmVzb3VyY2VcIiwge1xuICAgICAgc3RhZ2VOYW1lOiBwcm9wcy5zdGFnZU5hbWUgfHwgXCJwcm9kXCIsXG4gICAgICBhY2Nlc3NMb2dTZXR0aW5ncyxcbiAgICAgIGNhY2hlQ2x1c3RlckVuYWJsZWQ6IHRoaXMuZW5hYmxlQ2FjaGVDbHVzdGVyLFxuICAgICAgY2FjaGVDbHVzdGVyU2l6ZSxcbiAgICAgIGNsaWVudENlcnRpZmljYXRlSWQ6IHByb3BzLmNsaWVudENlcnRpZmljYXRlSWQsXG4gICAgICBkZXBsb3ltZW50SWQ6IHByb3BzLmRlcGxveW1lbnQuZGVwbG95bWVudElkLFxuICAgICAgcmVzdEFwaUlkOiBwcm9wcy5kZXBsb3ltZW50LmFwaS5yZXN0QXBpSWQsXG4gICAgICBkZXNjcmlwdGlvbjogcHJvcHMuZGVzY3JpcHRpb24sXG4gICAgICBkb2N1bWVudGF0aW9uVmVyc2lvbjogcHJvcHMuZG9jdW1lbnRhdGlvblZlcnNpb24sXG4gICAgICB2YXJpYWJsZXM6IHByb3BzLnZhcmlhYmxlcyxcbiAgICAgIHhyYXlUcmFjaW5nRW5hYmxlZDogcHJvcHMudHJhY2luZ0VuYWJsZWQsXG4gICAgfSk7XG5cbiAgICB0aGlzLnN0YWdlTmFtZSA9IHRoaXMucmVzb3VyY2Uuc3RhZ2VOYW1lO1xuXG4gICAgdGhpcy5hcHBseU1ldGhvZFNldHRpbmdzKHByb3BzLCB0aGlzLnJlc291cmNlKTtcblxuICAgIGlmIChSZXN0QXBpQmFzZS5faXNSZXN0QXBpQmFzZSh0aGlzLnJlc3RBcGkpKSB7XG4gICAgICB0aGlzLnJlc3RBcGkuX2F0dGFjaFN0YWdlKHRoaXMpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXBwbHlNZXRob2RTZXR0aW5ncyhcbiAgICBwcm9wczogU3RhZ2VQcm9wcyxcbiAgICBzdGFnZVJlc291cmNlOiBhcGlHYXRld2F5U3RhZ2UuQXBpR2F0ZXdheVN0YWdlLFxuICApOiB2b2lkIHtcbiAgICBjb25zdCBjb21tb25NZXRob2RPcHRpb25zOiBNZXRob2REZXBsb3ltZW50T3B0aW9ucyA9IHtcbiAgICAgIG1ldHJpY3NFbmFibGVkOiBwcm9wcy5tZXRyaWNzRW5hYmxlZCxcbiAgICAgIGxvZ2dpbmdMZXZlbDogcHJvcHMubG9nZ2luZ0xldmVsLFxuICAgICAgZGF0YVRyYWNlRW5hYmxlZDogcHJvcHMuZGF0YVRyYWNlRW5hYmxlZCxcbiAgICAgIHRocm90dGxpbmdCdXJzdExpbWl0OiBwcm9wcy50aHJvdHRsaW5nQnVyc3RMaW1pdCxcbiAgICAgIHRocm90dGxpbmdSYXRlTGltaXQ6IHByb3BzLnRocm90dGxpbmdSYXRlTGltaXQsXG4gICAgICBjYWNoaW5nRW5hYmxlZDogcHJvcHMuY2FjaGluZ0VuYWJsZWQsXG4gICAgICBjYWNoZVR0bDogcHJvcHMuY2FjaGVUdGwsXG4gICAgICBjYWNoZURhdGFFbmNyeXB0ZWQ6IHByb3BzLmNhY2hlRGF0YUVuY3J5cHRlZCxcbiAgICB9O1xuXG4gICAgY29uc3QgaGFzQ29tbW9uT3B0aW9ucyA9IE9iamVjdC52YWx1ZXMoY29tbW9uTWV0aG9kT3B0aW9ucykuc29tZShcbiAgICAgICh2KSA9PiB2ICE9PSB1bmRlZmluZWQsXG4gICAgKTtcbiAgICBpZiAoaGFzQ29tbW9uT3B0aW9ucykge1xuICAgICAgdGhpcy5jcmVhdGVNZXRob2RTZXR0aW5nc1Jlc291cmNlKFxuICAgICAgICBcIi8qLypcIixcbiAgICAgICAgY29tbW9uTWV0aG9kT3B0aW9ucyxcbiAgICAgICAgc3RhZ2VSZXNvdXJjZSxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKHByb3BzLm1ldGhvZE9wdGlvbnMpIHtcbiAgICAgIGZvciAoY29uc3QgcGF0aCBvZiBPYmplY3Qua2V5cyhwcm9wcy5tZXRob2RPcHRpb25zKSkge1xuICAgICAgICB0aGlzLmNyZWF0ZU1ldGhvZFNldHRpbmdzUmVzb3VyY2UoXG4gICAgICAgICAgcGF0aCxcbiAgICAgICAgICBwcm9wcy5tZXRob2RPcHRpb25zW3BhdGhdLFxuICAgICAgICAgIHN0YWdlUmVzb3VyY2UsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVNZXRob2RTZXR0aW5nc1Jlc291cmNlKFxuICAgIHBhdGg6IHN0cmluZyxcbiAgICBvcHRpb25zOiBNZXRob2REZXBsb3ltZW50T3B0aW9ucyxcbiAgICBzdGFnZVJlczogYXBpR2F0ZXdheVN0YWdlLkFwaUdhdGV3YXlTdGFnZSxcbiAgKTogdm9pZCB7XG4gICAgLy8gVmFsaWRhdGlvbiBmb3IgY2FjaGluZyBhbHJlYWR5IGhhcHBlbmVkIGluIGNvbnN0cnVjdG9yIGJlZm9yZSBBcGlHYXRld2F5U3RhZ2UgY3JlYXRpb25cblxuICAgIGNvbnN0IHsgaHR0cE1ldGhvZCwgcmVzb3VyY2VQYXRoIH0gPSBwYXJzZU1ldGhvZE9wdGlvbnNQYXRoKHBhdGgpO1xuXG4gICAgLy8gU2FuaXRpemUgdGhlIElEIGZvciB0aGUgbWV0aG9kIHNldHRpbmdzIHJlc291cmNlXG4gICAgLy8gUmVwbGFjZSBub24tYWxwaGFudW1lcmljIGNoYXJhY3RlcnMgd2l0aCBoeXBoZW4sIGVuc3VyZSBpdCdzIGEgdmFsaWQgVEYgSUQgcGFydFxuICAgIGNvbnN0IHNhZmVQYXRoRm9ySWQgPSByZXNvdXJjZVBhdGhcbiAgICAgIC5yZXBsYWNlKC9bXmEtekEtWjAtOV9dL2csIFwiLVwiKVxuICAgICAgLnJlcGxhY2UoL14tK3wtKyQvZywgXCJcIik7XG4gICAgY29uc3QgbWV0aG9kU2V0dGluZ3NJZCA9IGBNZXRob2RTZXR0aW5ncy0ke3NhZmVQYXRoRm9ySWQgfHwgXCJSb290XCJ9YDtcblxuICAgIG5ldyBhcGlHYXRld2F5TWV0aG9kU2V0dGluZ3MuQXBpR2F0ZXdheU1ldGhvZFNldHRpbmdzKFxuICAgICAgdGhpcyxcbiAgICAgIG1ldGhvZFNldHRpbmdzSWQsXG4gICAgICB7XG4gICAgICAgIHJlc3RBcGlJZDogc3RhZ2VSZXMucmVzdEFwaUlkLFxuICAgICAgICBzdGFnZU5hbWU6IHN0YWdlUmVzLnN0YWdlTmFtZSxcbiAgICAgICAgbWV0aG9kUGF0aDogYCR7cmVzb3VyY2VQYXRofS8ke2h0dHBNZXRob2R9YCxcbiAgICAgICAgc2V0dGluZ3M6IHtcbiAgICAgICAgICBtZXRyaWNzRW5hYmxlZDogb3B0aW9ucy5tZXRyaWNzRW5hYmxlZCxcbiAgICAgICAgICBsb2dnaW5nTGV2ZWw6IG9wdGlvbnMubG9nZ2luZ0xldmVsLFxuICAgICAgICAgIGRhdGFUcmFjZUVuYWJsZWQ6IG9wdGlvbnMuZGF0YVRyYWNlRW5hYmxlZCxcbiAgICAgICAgICB0aHJvdHRsaW5nQnVyc3RMaW1pdDogb3B0aW9ucy50aHJvdHRsaW5nQnVyc3RMaW1pdCxcbiAgICAgICAgICB0aHJvdHRsaW5nUmF0ZUxpbWl0OiBvcHRpb25zLnRocm90dGxpbmdSYXRlTGltaXQsXG4gICAgICAgICAgY2FjaGluZ0VuYWJsZWQ6IG9wdGlvbnMuY2FjaGluZ0VuYWJsZWQsXG4gICAgICAgICAgY2FjaGVUdGxJblNlY29uZHM6IG9wdGlvbnMuY2FjaGVUdGw/LnRvU2Vjb25kcygpLFxuICAgICAgICAgIGNhY2hlRGF0YUVuY3J5cHRlZDogb3B0aW9ucy5jYWNoZURhdGFFbmNyeXB0ZWQsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICk7XG4gIH1cbn1cbiJdfQ==
300
+ Stage[_b] = { fqn: "terraconstructs.aws.compute.Stage", version: "0.1.10" };
301
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhZ2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXdzL2NvbXB1dGUvc3RhZ2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxzREFBZ0Y7QUFDaEYsaUNBQThCO0FBRTlCLDZDQUFzRTtBQUN0RSx1Q0FBMkQ7QUFDM0QsK0ZBQTBFO0FBQzFFLHVEQUEyRDtBQUUzRCx1Q0FBa0Q7QUFFbEQseUNBQStDO0FBQy9DLGdDQUFtQztBQUNuQyxvREFJMEI7QUFDMUIsNENBQXdDO0FBQ3hDLDRDQUE0QztBQW1NNUMsSUFBWSxrQkFJWDtBQUpELFdBQVksa0JBQWtCO0lBQzVCLGlDQUFXLENBQUE7SUFDWCxxQ0FBZSxDQUFBO0lBQ2YsbUNBQWEsQ0FBQTtBQUNmLENBQUMsRUFKVyxrQkFBa0Isa0NBQWxCLGtCQUFrQixRQUk3QjtBQW9GRDs7R0FFRztBQUNILE1BQXNCLFNBQVUsU0FBUSxnQ0FBZ0I7SUFJdEQsSUFBVyxPQUFPO1FBQ2hCLE9BQU87WUFDTCxTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVM7WUFDekIsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRO1lBQ3ZCLFNBQVMsRUFBRSxJQUFJLENBQUMsVUFBVSxFQUFFO1NBQzdCLENBQUM7SUFDSixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSSxTQUFTLENBQUMsRUFBVSxFQUFFLE9BQXVCO1FBQ2xELE9BQU8sSUFBSSxnQkFBTSxDQUFDLElBQUksRUFBRSxFQUFFLEVBQUU7WUFDMUIsTUFBTSxFQUFFLENBQUMsSUFBSSxDQUFDO1lBQ2QsR0FBRyxPQUFPO1NBQ1gsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOzs7T0FHRztJQUNJLFVBQVUsQ0FBQyxPQUFlLEdBQUc7UUFDbEMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUMxQixNQUFNLElBQUksd0JBQWUsQ0FBQywrQkFBK0IsSUFBSSxFQUFFLEVBQUUsSUFBSSxD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QkFDdEMsaUJBQWlCLEVBQUUsT0FBTyxDQUFDLFFBQVEsRUFBRSxTQUFTLEVBQUU7Z0JBQ2hELGtCQUFrQixFQUFFLE9BQU8sQ0FBQyxrQkFBa0I7YUFDL0M7U0FDRixDQUNGLENBQUM7SUFDSixDQUFDOztBQW5NSCxzQkFvTUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBhcGlHYXRld2F5U3RhZ2UsIGFwaUdhdGV3YXlNZXRob2RTZXR0aW5ncyB9IGZyb20gXCJAY2RrdGYvcHJvdmlkZXItYXdzXCI7XG5pbXBvcnQgeyBUb2tlbiB9IGZyb20gXCJjZGt0ZlwiO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcbmltcG9ydCB7IEFjY2Vzc0xvZ0Zvcm1hdCwgSUFjY2Vzc0xvZ0Rlc3RpbmF0aW9uIH0gZnJvbSBcIi4vYWNjZXNzLWxvZ1wiO1xuaW1wb3J0IHsgSUFwaUtleSwgQXBpS2V5T3B0aW9ucywgQXBpS2V5IH0gZnJvbSBcIi4vYXBpLWtleVwiO1xuaW1wb3J0IHsgQXBpR2F0ZXdheU1ldHJpY3MgfSBmcm9tIFwiLi9hcGlnYXRld2F5LWNhbm5lZC1tZXRyaWNzLmdlbmVyYXRlZFwiO1xuaW1wb3J0IHsgcGFyc2VNZXRob2RPcHRpb25zUGF0aCB9IGZyb20gXCIuL2FwaWdhdGV3YXktdXRpbFwiO1xuaW1wb3J0IHsgRGVwbG95bWVudCB9IGZyb20gXCIuL2RlcGxveW1lbnRcIjtcbmltcG9ydCB7IElSZXN0QXBpLCBSZXN0QXBpQmFzZSB9IGZyb20gXCIuL3Jlc3RhcGlcIjtcbmltcG9ydCB7IER1cmF0aW9uIH0gZnJvbSBcIi4uLy4uL2R1cmF0aW9uXCI7XG5pbXBvcnQgeyBWYWxpZGF0aW9uRXJyb3IgfSBmcm9tIFwiLi4vLi4vZXJyb3JzXCI7XG5pbXBvcnQgeyBBcm5Gb3JtYXQgfSBmcm9tIFwiLi4vYXJuXCI7XG5pbXBvcnQge1xuICBBd3NDb25zdHJ1Y3RCYXNlLFxuICBBd3NDb25zdHJ1Y3RQcm9wcyxcbiAgSUF3c0NvbnN0cnVjdCxcbn0gZnJvbSBcIi4uL2F3cy1jb25zdHJ1Y3RcIjtcbmltcG9ydCB7IEF3c1N0YWNrIH0gZnJvbSBcIi4uL2F3cy1zdGFja1wiO1xuaW1wb3J0ICogYXMgY2xvdWR3YXRjaCBmcm9tIFwiLi4vY2xvdWR3YXRjaFwiO1xuXG4vKipcbiAqIFJlcHJlc2VudHMgYW4gQVBJR2F0ZXdheSBTdGFnZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJU3RhZ2UgZXh0ZW5kcyBJQXdzQ29uc3RydWN0IHtcbiAgLyoqXG4gICAqIE5hbWUgb2YgdGhpcyBzdGFnZS5cbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcmVhZG9ubHkgc3RhZ2VOYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFJlc3RBcGkgdG8gd2hpY2ggdGhpcyBzdGFnZSBpcyBhc3NvY2lhdGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgcmVzdEFwaTogSVJlc3RBcGk7XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIHJlc291cmNlIEFSTiBmb3IgdGhpcyBzdGFnZS5cbiAgICpcbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcmVhZG9ubHkgc3RhZ2VBcm46IHN0cmluZztcblxuICAvKipcbiAgICogQWRkIGFuIEFwaUtleSB0byB0aGlzIFN0YWdlXG4gICAqL1xuICBhZGRBcGlLZXkoaWQ6IHN0cmluZywgb3B0aW9ucz86IEFwaUtleU9wdGlvbnMpOiBJQXBpS2V5O1xuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBpbnZva2UgVVJMIGZvciBhIGNlcnRhaW4gcGF0aC5cbiAgICogQHBhcmFtIHBhdGggVGhlIHJlc291cmNlIHBhdGhcbiAgICovXG4gIHVybEZvclBhdGgocGF0aD86IHN0cmluZyk6IHN0cmluZztcblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgZ2l2ZW4gbmFtZWQgbWV0cmljIGZvciB0aGlzIHN0YWdlXG4gICAqL1xuICBtZXRyaWMoXG4gICAgbWV0cmljTmFtZTogc3RyaW5nLFxuICAgIHByb3BzPzogY2xvdWR3YXRjaC5NZXRyaWNPcHRpb25zLFxuICApOiBjbG91ZHdhdGNoLk1ldHJpYztcblxuICAvKipcbiAgICogTWV0cmljIGZvciB0aGUgbnVtYmVyIG9mIGNsaWVudC1zaWRlIGVycm9ycyBjYXB0dXJlZCBpbiBhIGdpdmVuIHBlcmlvZC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBzdW0gb3ZlciA1IG1pbnV0ZXNcbiAgICovXG4gIG1ldHJpY0NsaWVudEVycm9yKHByb3BzPzogY2xvdWR3YXRjaC5NZXRyaWNPcHRpb25zKTogY2xvdWR3YXRjaC5NZXRyaWM7XG5cbiAgLyoqXG4gICAqIE1ldHJpYyBmb3IgdGhlIG51bWJlciBvZiBzZXJ2ZXItc2lkZSBlcnJvcnMgY2FwdHVyZWQgaW4gYSBnaXZlbiBwZXJpb2QuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gc3VtIG92ZXIgNSBtaW51dGVzXG4gICAqL1xuICBtZXRyaWNTZXJ2ZXJFcnJvcihwcm9wcz86IGNsb3Vkd2F0Y2guTWV0cmljT3B0aW9ucyk6IGNsb3Vkd2F0Y2guTWV0cmljO1xuXG4gIC8qKlxuICAgKiBNZXRyaWMgZm9yIHRoZSBudW1iZXIgb2YgcmVxdWVzdHMgc2VydmVkIGZyb20gdGhlIEFQSSBjYWNoZSBpbiBhIGdpdmVuIHBlcmlvZC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBzdW0gb3ZlciA1IG1pbnV0ZXNcbiAgICovXG4gIG1ldHJpY0NhY2hlSGl0Q291bnQocHJvcHM/OiBjbG91ZHdhdGNoLk1ldHJpY09wdGlvbnMpOiBjbG91ZHdhdGNoLk1ldHJpYztcblxuICAvKipcbiAgICogTWV0cmljIGZvciB0aGUgbnVtYmVyIG9mIHJlcXVlc3RzIHNlcnZlZCBmcm9tIHRoZSBiYWNrZW5kIGluIGEgZ2l2ZW4gcGVyaW9kLFxuICAgKiB3aGVuIEFQSSBjYWNoaW5nIGlzIGVuYWJsZWQuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gc3VtIG92ZXIgNSBtaW51dGVzXG4gICAqL1xuICBtZXRyaWNDYWNoZU1pc3NDb3VudChwcm9wcz86IGNsb3Vkd2F0Y2guTWV0cmljT3B0aW9ucyk6IGNsb3Vkd2F0Y2guTWV0cmljO1xuXG4gIC8qKlxuICAgKiBNZXRyaWMgZm9yIHRoZSB0b3RhbCBudW1iZXIgQVBJIHJlcXVlc3RzIGluIGEgZ2l2ZW4gcGVyaW9kLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIHNhbXBsZSBjb3VudCBvdmVyIDUgbWludXRlc1xuICAgKi9cbiAgbWV0cmljQ291bnQocHJvcHM/OiBjbG91ZHdhdGNoLk1ldHJpY09wdGlvbnMpOiBjbG91ZHdhdGNoLk1ldHJpYztcblxuICAvKipcbiAgICogTWV0cmljIGZvciB0aGUgdGltZSBiZXR3ZWVuIHdoZW4gQVBJIEdhdGV3YXkgcmVsYXlzIGEgcmVxdWVzdCB0byB0aGUgYmFja2VuZFxuICAgKiBhbmQgd2hlbiBpdCByZWNlaXZlcyBhIHJlc3BvbnNlIGZyb20gdGhlIGJhY2tlbmQuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gYXZlcmFnZSBvdmVyIDUgbWludXRlcy5cbiAgICovXG4gIG1ldHJpY0ludGVncmF0aW9uTGF0ZW5jeShwcm9wcz86IGNsb3Vkd2F0Y2guTWV0cmljT3B0aW9ucyk6IGNsb3Vkd2F0Y2guTWV0cmljO1xuXG4gIC8qKlxuICAgKiBUaGUgdGltZSBiZXR3ZWVuIHdoZW4gQVBJIEdhdGV3YXkgcmVjZWl2ZXMgYSByZXF1ZXN0IGZyb20gYSBjbGllbnRcbiAgICogYW5kIHdoZW4gaXQgcmV0dXJucyBhIHJlc3BvbnNlIHRvIHRoZSBjbGllbnQuXG4gICAqIFRoZSBsYXRlbmN5IGluY2x1ZGVzIHRoZSBpbnRlZ3JhdGlvbiBsYXRlbmN5IGFuZCBvdGhlciBBUEkgR2F0ZXdheSBvdmVyaGVhZC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBhdmVyYWdlIG92ZXIgNSBtaW51dGVzLlxuICAgKi9cbiAgbWV0cmljTGF0ZW5jeShwcm9wcz86IGNsb3Vkd2F0Y2guTWV0cmljT3B0aW9ucyk6IGNsb3Vkd2F0Y2guTWV0cmljO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFN0YWdlT3B0aW9ucyBleHRlbmRzIE1ldGhvZERlcGxveW1lbnRPcHRpb25zIHtcbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBzdGFnZSwgd2hpY2ggQVBJIEdhdGV3YXkgdXNlcyBhcyB0aGUgZmlyc3QgcGF0aCBzZWdtZW50XG4gICAqIGluIHRoZSBpbnZva2VkIFVuaWZvcm0gUmVzb3VyY2UgSWRlbnRpZmllciAoVVJJKS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBcInByb2RcIlxuICAgKi9cbiAgcmVhZG9ubHkgc3RhZ2VOYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgQ2xvdWRXYXRjaCBMb2dzIGxvZyBncm91cCBvciBGaXJlaG9zZSBkZWxpdmVyeSBzdHJlYW0gd2hlcmUgdG8gd3JpdGUgYWNjZXNzIGxvZ3MuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gTm8gZGVzdGluYXRpb25cbiAgICovXG4gIHJlYWRvbmx5IGFjY2Vzc0xvZ0Rlc3RpbmF0aW9uPzogSUFjY2Vzc0xvZ0Rlc3RpbmF0aW9uO1xuXG4gIC8qKlxuICAgKiBBIHNpbmdsZSBsaW5lIGZvcm1hdCBvZiBhY2Nlc3MgbG9ncyBvZiBkYXRhLCBhcyBzcGVjaWZpZWQgYnkgc2VsZWN0ZWQgJGNvbnRlbnQgdmFyaWFibGVzLlxuICAgKiBUaGUgZm9ybWF0IG11c3QgaW5jbHVkZSBlaXRoZXIgYEFjY2Vzc0xvZ0Zvcm1hdC5jb250ZXh0UmVxdWVzdElkKClgXG4gICAqIG9yIGBBY2Nlc3NMb2dGb3JtYXQuY29udGV4dEV4dGVuZGVkUmVxdWVzdElkKClgLlxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9hcGlnYXRld2F5L2xhdGVzdC9kZXZlbG9wZXJndWlkZS9hcGktZ2F0ZXdheS1tYXBwaW5nLXRlbXBsYXRlLXJlZmVyZW5jZS5odG1sI2NvbnRleHQtdmFyaWFibGUtcmVmZXJlbmNlXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gQ29tbW9uIExvZyBGb3JtYXRcbiAgICovXG4gIHJlYWRvbmx5IGFjY2Vzc0xvZ0Zvcm1hdD86IEFjY2Vzc0xvZ0Zvcm1hdDtcblxuICAvKipcbiAgICogU3BlY2lmaWVzIHdoZXRoZXIgQW1hem9uIFgtUmF5IHRyYWNpbmcgaXMgZW5hYmxlZCBmb3IgdGhpcyBtZXRob2QuXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSB0cmFjaW5nRW5hYmxlZD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyB3aGV0aGVyIGNhY2hlIGNsdXN0ZXJpbmcgaXMgZW5hYmxlZCBmb3IgdGhlIHN0YWdlLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIERpc2FibGVkIGZvciB0aGUgc3RhZ2UuXG4gICAqL1xuICByZWFkb25seSBjYWNoZUNsdXN0ZXJFbmFibGVkPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIHN0YWdlJ3MgY2FjaGUgY2x1c3RlciBzaXplLlxuICAgKiBAZGVmYXVsdCAwLjVcbiAgICovXG4gIHJlYWRvbmx5IGNhY2hlQ2x1c3RlclNpemU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBpZGVudGlmaWVyIG9mIHRoZSBjbGllbnQgY2VydGlmaWNhdGUgdGhhdCBBUEkgR2F0ZXdheSB1c2VzIHRvIGNhbGxcbiAgICogeW91ciBpbnRlZ3JhdGlvbiBlbmRwb2ludHMgaW4gdGhlIHN0YWdlLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIE5vbmUuXG4gICAqL1xuICByZWFkb25seSBjbGllbnRDZXJ0aWZpY2F0ZUlkPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBIGRlc2NyaXB0aW9uIG9mIHRoZSBwdXJwb3NlIG9mIHRoZSBzdGFnZS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBObyBkZXNjcmlwdGlvbi5cbiAgICovXG4gIHJlYWRvbmx5IGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgdmVyc2lvbiBpZGVudGlmaWVyIG9mIHRoZSBBUEkgZG9jdW1lbnRhdGlvbiBzbmFwc2hvdC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBObyBkb2N1bWVudGF0aW9uIHZlcnNpb24uXG4gICAqL1xuICByZWFkb25seSBkb2N1bWVudGF0aW9uVmVyc2lvbj86IHN0cmluZztcblxuICAvKipcbiAgICogQSBtYXAgdGhhdCBkZWZpbmVzIHRoZSBzdGFnZSB2YXJpYWJsZXMuIFZhcmlhYmxlIG5hbWVzIG11c3QgY29uc2lzdCBvZlxuICAgKiBhbHBoYW51bWVyaWMgY2hhcmFjdGVycywgYW5kIHRoZSB2YWx1ZXMgbXVzdCBtYXRjaCB0aGUgZm9sbG93aW5nIHJlZ3VsYXJcbiAgICogZXhwcmVzc2lvbjogW0EtWmEtejAtOS0uX346Lz8jJj0sXSsuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gTm8gc3RhZ2UgdmFyaWFibGVzLlxuICAgKi9cbiAgcmVhZG9ubHkgdmFyaWFibGVzPzogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfTtcblxuICAvKipcbiAgICogTWV0aG9kIGRlcGxveW1lbnQgb3B0aW9ucyBmb3Igc3BlY2lmaWMgcmVzb3VyY2VzL21ldGhvZHMuIFRoZXNlIHdpbGxcbiAgICogb3ZlcnJpZGUgY29tbW9uIG9wdGlvbnMgZGVmaW5lZCBpbiBgU3RhZ2VPcHRpb25zI21ldGhvZE9wdGlvbnNgLlxuICAgKlxuICAgKiBAcGFyYW0gcGF0aCBpcyB7cmVzb3VyY2VfcGF0aH0ve2h0dHBfbWV0aG9kfSAoaS5lLiAvYXBpL3RveXMvR0VUKSBmb3IgYW5cbiAgICogaW5kaXZpZHVhbCBtZXRob2Qgb3ZlcnJpZGUuIFlvdSBjYW4gdXNlIGAqYCBmb3IgYm90aCB7cmVzb3VyY2VfcGF0aH0gYW5kIHtodHRwX21ldGhvZH1cbiAgICogdG8gZGVmaW5lIG9wdGlvbnMgZm9yIGFsbCBtZXRob2RzL3Jlc291cmNlcy5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBDb21tb24gb3B0aW9ucyB3aWxsIGJlIHVzZWQuXG4gICAqL1xuICByZWFkb25seSBtZXRob2RPcHRpb25zPzogeyBbcGF0aDogc3RyaW5nXTogTWV0aG9kRGVwbG95bWVudE9wdGlvbnMgfTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTdGFnZVByb3BzIGV4dGVuZHMgU3RhZ2VPcHRpb25zLCBBd3NDb25zdHJ1Y3RQcm9wcyB7XG4gIC8qKlxuICAgKiBUaGUgZGVwbG95bWVudCB0aGF0IHRoaXMgc3RhZ2UgcG9pbnRzIHRvLlxuICAgKi9cbiAgcmVhZG9ubHkgZGVwbG95bWVudDogRGVwbG95bWVudDtcbn1cblxuZXhwb3J0IGVudW0gTWV0aG9kTG9nZ2luZ0xldmVsIHtcbiAgT0ZGID0gXCJPRkZcIixcbiAgRVJST1IgPSBcIkVSUk9SXCIsXG4gIElORk8gPSBcIklORk9cIixcbn1cblxuZXhwb3J0IGludGVyZmFjZSBNZXRob2REZXBsb3ltZW50T3B0aW9ucyB7XG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgd2hldGhlciBBbWF6b24gQ2xvdWRXYXRjaCBtZXRyaWNzIGFyZSBlbmFibGVkIGZvciB0aGlzIG1ldGhvZC5cbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IG1ldHJpY3NFbmFibGVkPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogU3BlY2lmaWVzIHRoZSBsb2dnaW5nIGxldmVsIGZvciB0aGlzIG1ldGhvZCwgd2hpY2ggZWZmZWN0cyB0aGUgbG9nXG4gICAqIGVudHJpZXMgcHVzaGVkIHRvIEFtYXpvbiBDbG91ZFdhdGNoIExvZ3MuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gT2ZmXG4gICAqL1xuICByZWFkb25seSBsb2dnaW5nTGV2ZWw/OiBNZXRob2RMb2dnaW5nTGV2ZWw7XG5cbiAgLyoqXG4gICAqIFNwZWNpZmllcyB3aGV0aGVyIGRhdGEgdHJhY2UgbG9nZ2luZyBpcyBlbmFibGVkIGZvciB0aGlzIG1ldGhvZC5cbiAgICogV2hlbiBlbmFibGVkLCBBUEkgZ2F0ZXdheSB3aWxsIGxvZyB0aGUgZnVsbCBBUEkgcmVxdWVzdHMgYW5kIHJlc3BvbnNlcy5cbiAgICogVGhpcyBjYW4gYmUgdXNlZnVsIHRvIHRyb3VibGVzaG9vdCBBUElzLCBidXQgY2FuIHJlc3VsdCBpbiBsb2dnaW5nIHNlbnNpdGl2ZSBkYXRhLlxuICAgKiBXZSByZWNvbW1lbmQgdGhhdCB5b3UgZG9uJ3QgZW5hYmxlIHRoaXMgZmVhdHVyZSBmb3IgcHJvZHVjdGlvbiBBUElzLlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgZGF0YVRyYWNlRW5hYmxlZD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFNwZWNpZmllcyB0aGUgdGhyb3R0bGluZyBidXJzdCBsaW1pdC5cbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYXBpZ2F0ZXdheS9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvYXBpLWdhdGV3YXktcmVxdWVzdC10aHJvdHRsaW5nLmh0bWxcbiAgICpcbiAgICogQGRlZmF1bHQgLSBObyBhZGRpdGlvbmFsIHJlc3RyaWN0aW9uLlxuICAgKi9cbiAgcmVhZG9ubHkgdGhyb3R0bGluZ0J1cnN0TGltaXQ/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFNwZWNpZmllcyB0aGUgdGhyb3R0bGluZyByYXRlIGxpbWl0LlxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9hcGlnYXRld2F5L2xhdGVzdC9kZXZlbG9wZXJndWlkZS9hcGktZ2F0ZXdheS1yZXF1ZXN0LXRocm90dGxpbmcuaHRtbFxuICAgKlxuICAgKiBAZGVmYXVsdCAtIE5vIGFkZGl0aW9uYWwgcmVzdHJpY3Rpb24uXG4gICAqL1xuICByZWFkb25seSB0aHJvdHRsaW5nUmF0ZUxpbWl0PzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgd2hldGhlciByZXNwb25zZXMgc2hvdWxkIGJlIGNhY2hlZCBhbmQgcmV0dXJuZWQgZm9yIHJlcXVlc3RzLiBBXG4gICAqIGNhY2hlIGNsdXN0ZXIgbXVzdCBiZSBlbmFibGVkIG9uIHRoZSBzdGFnZSBmb3IgcmVzcG9uc2VzIHRvIGJlIGNhY2hlZC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBDYWNoaW5nIGlzIERpc2FibGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgY2FjaGluZ0VuYWJsZWQ/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgdGhlIHRpbWUgdG8gbGl2ZSAoVFRMKSwgaW4gc2Vjb25kcywgZm9yIGNhY2hlZCByZXNwb25zZXMuIFRoZVxuICAgKiBoaWdoZXIgdGhlIFRUTCwgdGhlIGxvbmdlciB0aGUgcmVzcG9uc2Ugd2lsbCBiZSBjYWNoZWQuXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2FwaWdhdGV3YXkvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL2FwaS1nYXRld2F5LWNhY2hpbmcuaHRtbFxuICAgKlxuICAgKiBAZGVmYXVsdCBEdXJhdGlvbi5taW51dGVzKDUpXG4gICAqL1xuICByZWFkb25seSBjYWNoZVR0bD86IER1cmF0aW9uO1xuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgY2FjaGVkIHJlc3BvbnNlcyBhcmUgZW5jcnlwdGVkLlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgY2FjaGVEYXRhRW5jcnlwdGVkPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBUaGUgYXR0cmlidXRlcyBvZiBhbiBpbXBvcnRlZCBTdGFnZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFN0YWdlQXR0cmlidXRlcyB7XG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgc3RhZ2VcbiAgICovXG4gIHJlYWRvbmx5IHN0YWdlTmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgUmVzdEFwaSB0aGF0IHRoZSBzdGFnZSBiZWxvbmdzIHRvXG4gICAqL1xuICByZWFkb25seSByZXN0QXBpOiBJUmVzdEFwaTtcbn1cblxuLyoqXG4gKiBCYXNlIGNsYXNzIGZvciBhbiBBcGlHYXRld2F5IFN0YWdlXG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBTdGFnZUJhc2UgZXh0ZW5kcyBBd3NDb25zdHJ1Y3RCYXNlIGltcGxlbWVudHMgSVN0YWdlIHtcbiAgcHVibGljIGFic3RyYWN0IHJlYWRvbmx5IHN0YWdlTmFtZTogc3RyaW5nO1xuICBwdWJsaWMgYWJzdHJhY3QgcmVhZG9ubHkgcmVzdEFwaTogSVJlc3RBcGk7XG5cbiAgcHVibGljIGdldCBvdXRwdXRzKCk6IFJlY29yZDxzdHJpbmcsIGFueT4ge1xuICAgIHJldHVybiB7XG4gICAgICBzdGFnZU5hbWU6IHRoaXMuc3RhZ2VOYW1lLFxuICAgICAgc3RhZ2VBcm46IHRoaXMuc3RhZ2VBcm4sXG4gICAgICBpbnZva2VVcmw6IHRoaXMudXJsRm9yUGF0aCgpLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQWRkIGFuIEFwaUtleSB0byB0aGlzIHN0YWdlXG4gICAqXG4gICAqIE5vdGU6IGRpcmVjdCBzdGFnZSBhc3NvY2lhdGlvbiBpcyBkZXByZWNhdGVkLlxuICAgKiBTdGFnZSBhc3NvY2lhdGlvbiBzaG91bGQgYmUgaGFuZGxlZCB2aWEgVXNhZ2UgUGxhbnMuXG4gICAqL1xuICBwdWJsaWMgYWRkQXBpS2V5KGlkOiBzdHJpbmcsIG9wdGlvbnM/OiBBcGlLZXlPcHRpb25zKTogSUFwaUtleSB7XG4gICAgcmV0dXJuIG5ldyBBcGlLZXkodGhpcywgaWQsIHtcbiAgICAgIHN0YWdlczogW3RoaXNdLFxuICAgICAgLi4ub3B0aW9ucyxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBpbnZva2UgVVJMIGZvciBhIGNlcnRhaW4gcGF0aC5cbiAgICogQHBhcmFtIHBhdGggVGhlIHJlc291cmNlIHBhdGhcbiAgICovXG4gIHB1YmxpYyB1cmxGb3JQYXRoKHBhdGg6IHN0cmluZyA9IFwiL1wiKTogc3RyaW5nIHtcbiAgICBpZiAoIXBhdGguc3RhcnRzV2l0aChcIi9cIikpIHtcbiAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoYFBhdGggbXVzdCBiZWdpbiB3aXRoIFxcXCIvXFxcIjogJHtwYXRofWAsIHRoaXMpO1xuICAgIH1cbiAgICBjb25zdCBzdGFjayA9IEF3c1N0YWNrLm9mQXdzQ29uc3RydWN0KHRoaXMpO1xuICAgIC8vIEZvciBpbXBvcnRlZCBBUElzLCByZXN0QXBpSWQgbWlnaHQgYmUgYSB0b2tlbi4gRm9yIG5ldyBBUElzLCBpdCdzIHJlc29sdmVkLlxuICAgIC8vIFRoZSBVUkwgc3RydWN0dXJlIGlzIGh0dHBzOi8ve3Jlc3RhcGktaWR9LmV4ZWN1dGUtYXBpLntyZWdpb259LntkbnMtc3VmZml4fS97c3RhZ2VOYW1lfS97cGF0aH1cbiAgICByZXR1cm4gYGh0dHBzOi8vJHt0aGlzLnJlc3RBcGkucmVzdEFwaUlkfS5leGVjdXRlLWFwaS4ke3N0YWNrLnJlZ2lvbn0uJHtzdGFjay51cmxTdWZmaXh9LyR7dGhpcy5zdGFnZU5hbWV9JHtwYXRofWA7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgcmVzb3VyY2UgQVJOIGZvciB0aGlzIHN0YWdlOlxuICAgKlxuICAgKiAgIGFybjphd3M6YXBpZ2F0ZXdheTp7cmVnaW9ufTo6L3Jlc3RhcGlzL3tyZXN0QXBpSWR9L3N0YWdlcy97c3RhZ2VOYW1lfVxuICAgKlxuICAgKiBOb3RlIHRoYXQgdGhpcyBpcyBzZXBhcmF0ZSBmcm9tIHRoZSBleGVjdXRlLWFwaSBBUk4gZm9yIG1ldGhvZHMgYW5kIHJlc291cmNlc1xuICAgKiB3aXRoaW4gdGhpcyBzdGFnZS5cbiAgICpcbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcHVibGljIGdldCBzdGFnZUFybigpOiBzdHJpbmcge1xuICAgIHJldHVybiBBd3NTdGFjay5vZkF3c0NvbnN0cnVjdCh0aGlzKS5mb3JtYXRBcm4oe1xuICAgICAgYXJuRm9ybWF0OiBBcm5Gb3JtYXQuU0xBU0hfUkVTT1VSQ0VfU0xBU0hfUkVTT1VSQ0VfTkFNRSxcbiAgICAgIHNlcnZpY2U6IFwiYXBpZ2F0ZXdheVwiLFxuICAgICAgYWNjb3VudDogXCJcIiwgLy8gQVBJR2F0ZXdheSBBUk5zIGZvciBzdGFnZXMgZG9uJ3QgaW5jbHVkZSBhY2NvdW50IGluIHRoaXMgcGFydFxuICAgICAgcmVzb3VyY2U6IFwicmVzdGFwaXNcIixcbiAgICAgIHJlc291cmNlTmFtZTogYCR7dGhpcy5yZXN0QXBpLnJlc3RBcGlJZH0vc3RhZ2VzLyR7dGhpcy5zdGFnZU5hbWV9YCxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBnaXZlbiBuYW1lZCBtZXRyaWMgZm9yIHRoaXMgc3RhZ2VcbiAgICovXG4gIHB1YmxpYyBtZXRyaWMoXG4gICAgbWV0cmljTmFtZTogc3RyaW5nLFxuICAgIHByb3BzPzogY2xvdWR3YXRjaC5NZXRyaWNPcHRpb25zLFxuICApOiBjbG91ZHdhdGNoLk1ldHJpYyB7XG4gICAgcmV0dXJuIG5ldyBjbG91ZHdhdGNoLk1ldHJpYyh7XG4gICAgICBuYW1lc3BhY2U6IFwiQVdTL0FwaUdhdGV3YXlcIixcbiAgICAgIG1ldHJpY05hbWUsXG4gICAgICBkaW1lbnNpb25zTWFwOiB7XG4gICAgICAgIEFwaU5hbWU6IHRoaXMucmVzdEFwaS5yZXN0QXBpTmFtZSxcbiAgICAgICAgU3RhZ2U6IHRoaXMuc3RhZ2VOYW1lLFxuICAgICAgfSxcbiAgICAgIC4uLnByb3BzLFxuICAgIH0pLmF0dGFjaFRvKHRoaXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIE1ldHJpYyBmb3IgdGhlIG51bWJlciBvZiBjbGllbnQtc2lkZSBlcnJvcnMgY2FwdHVyZWQgaW4gYSBnaXZlbiBwZXJpb2QuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gc3VtIG92ZXIgNSBtaW51dGVzXG4gICAqL1xuICBwdWJsaWMgbWV0cmljQ2xpZW50RXJyb3IoXG4gICAgcHJvcHM/OiBjbG91ZHdhdGNoLk1ldHJpY09wdGlvbnMsXG4gICk6IGNsb3Vkd2F0Y2guTWV0cmljIHtcbiAgICByZXR1cm4gdGhpcy5jYW5uZWRNZXRyaWMoQXBpR2F0ZXdheU1ldHJpY3MuXzRYeEVycm9yU3VtLCBwcm9wcyk7XG4gIH1cblxuICAvKipcbiAgICogTWV0cmljIGZvciB0aGUgbnVtYmVyIG9mIHNlcnZlci1zaWRlIGVycm9ycyBjYXB0dXJlZCBpbiBhIGdpdmVuIHBlcmlvZC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBzdW0gb3ZlciA1IG1pbnV0ZXNcbiAgICovXG4gIHB1YmxpYyBtZXRyaWNTZXJ2ZXJFcnJvcihcbiAgICBwcm9wcz86IGNsb3Vkd2F0Y2guTWV0cmljT3B0aW9ucyxcbiAgKTogY2xvdWR3YXRjaC5NZXRyaWMge1xuICAgIHJldHVybiB0aGlzLmNhbm5lZE1ldHJpYyhBcGlHYXRld2F5TWV0cmljcy5fNVh4RXJyb3JTdW0sIHByb3BzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNZXRyaWMgZm9yIHRoZSBudW1iZXIgb2YgcmVxdWVzdHMgc2VydmVkIGZyb20gdGhlIEFQSSBjYWNoZSBpbiBhIGdpdmVuIHBlcmlvZC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBzdW0gb3ZlciA1IG1pbnV0ZXNcbiAgICovXG4gIHB1YmxpYyBtZXRyaWNDYWNoZUhpdENvdW50KFxuICAgIHByb3BzPzogY2xvdWR3YXRjaC5NZXRyaWNPcHRpb25zLFxuICApOiBjbG91ZHdhdGNoLk1ldHJpYyB7XG4gICAgcmV0dXJuIHRoaXMuY2FubmVkTWV0cmljKEFwaUdhdGV3YXlNZXRyaWNzLmNhY2hlSGl0Q291bnRTdW0sIHByb3BzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNZXRyaWMgZm9yIHRoZSBudW1iZXIgb2YgcmVxdWVzdHMgc2VydmVkIGZyb20gdGhlIGJhY2tlbmQgaW4gYSBnaXZlbiBwZXJpb2QsXG4gICAqIHdoZW4gQVBJIGNhY2hpbmcgaXMgZW5hYmxlZC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBzdW0gb3ZlciA1IG1pbnV0ZXNcbiAgICovXG4gIHB1YmxpYyBtZXRyaWNDYWNoZU1pc3NDb3VudChcbiAgICBwcm9wcz86IGNsb3Vkd2F0Y2guTWV0cmljT3B0aW9ucyxcbiAgKTogY2xvdWR3YXRjaC5NZXRyaWMge1xuICAgIHJldHVybiB0aGlzLmNhbm5lZE1ldHJpYyhBcGlHYXRld2F5TWV0cmljcy5jYWNoZU1pc3NDb3VudFN1bSwgcHJvcHMpO1xuICB9XG5cbiAgLyoqXG4gICAqIE1ldHJpYyBmb3IgdGhlIHRvdGFsIG51bWJlciBBUEkgcmVxdWVzdHMgaW4gYSBnaXZlbiBwZXJpb2QuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gc2FtcGxlIGNvdW50IG92ZXIgNSBtaW51dGVzXG4gICAqL1xuICBwdWJsaWMgbWV0cmljQ291bnQocHJvcHM/OiBjbG91ZHdhdGNoLk1ldHJpY09wdGlvbnMpOiBjbG91ZHdhdGNoLk1ldHJpYyB7XG4gICAgcmV0dXJuIHRoaXMuY2FubmVkTWV0cmljKEFwaUdhdGV3YXlNZXRyaWNzLmNvdW50U3VtLCB7XG4gICAgICBzdGF0aXN0aWM6IFwiU2FtcGxlQ291bnRcIixcbiAgICAgIC4uLnByb3BzLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIE1ldHJpYyBmb3IgdGhlIHRpbWUgYmV0d2VlbiB3aGVuIEFQSSBHYXRld2F5IHJlbGF5cyBhIHJlcXVlc3QgdG8gdGhlIGJhY2tlbmRcbiAgICogYW5kIHdoZW4gaXQgcmVjZWl2ZXMgYSByZXNwb25zZSBmcm9tIHRoZSBiYWNrZW5kLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGF2ZXJhZ2Ugb3ZlciA1IG1pbnV0ZXMuXG4gICAqL1xuICBwdWJsaWMgbWV0cmljSW50ZWdyYXRpb25MYXRlbmN5KFxuICAgIHByb3BzPzogY2xvdWR3YXRjaC5NZXRyaWNPcHRpb25zLFxuICApOiBjbG91ZHdhdGNoLk1ldHJpYyB7XG4gICAgcmV0dXJuIHRoaXMuY2FubmVkTWV0cmljKFxuICAgICAgQXBpR2F0ZXdheU1ldHJpY3MuaW50ZWdyYXRpb25MYXRlbmN5QXZlcmFnZSxcbiAgICAgIHByb3BzLFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIHRpbWUgYmV0d2VlbiB3aGVuIEFQSSBHYXRld2F5IHJlY2VpdmVzIGEgcmVxdWVzdCBmcm9tIGEgY2xpZW50XG4gICAqIGFuZCB3aGVuIGl0IHJldHVybnMgYSByZXNwb25zZSB0byB0aGUgY2xpZW50LlxuICAgKiBUaGUgbGF0ZW5jeSBpbmNsdWRlcyB0aGUgaW50ZWdyYXRpb24gbGF0ZW5jeSBhbmQgb3RoZXIgQVBJIEdhdGV3YXkgb3ZlcmhlYWQuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gYXZlcmFnZSBvdmVyIDUgbWludXRlcy5cbiAgICovXG4gIHB1YmxpYyBtZXRyaWNMYXRlbmN5KHByb3BzPzogY2xvdWR3YXRjaC5NZXRyaWNPcHRpb25zKTogY2xvdWR3YXRjaC5NZXRyaWMge1xuICAgIHJldHVybiB0aGlzLmNhbm5lZE1ldHJpYyhBcGlHYXRld2F5TWV0cmljcy5sYXRlbmN5QXZlcmFnZSwgcHJvcHMpO1xuICB9XG5cbiAgcHJpdmF0ZSBjYW5uZWRNZXRyaWMoXG4gICAgZm46IChkaW1zOiB7IEFwaU5hbWU6IHN0cmluZzsgU3RhZ2U6IHN0cmluZyB9KSA9PiBjbG91ZHdhdGNoLk1ldHJpY1Byb3BzLFxuICAgIHByb3BzPzogY2xvdWR3YXRjaC5NZXRyaWNPcHRpb25zLFxuICApOiBjbG91ZHdhdGNoLk1ldHJpYyB7XG4gICAgcmV0dXJuIG5ldyBjbG91ZHdhdGNoLk1ldHJpYyh7XG4gICAgICAuLi5mbih7IEFwaU5hbWU6IHRoaXMucmVzdEFwaS5yZXN0QXBpTmFtZSwgU3RhZ2U6IHRoaXMuc3RhZ2VOYW1lIH0pLFxuICAgICAgLi4ucHJvcHMsXG4gICAgfSkuYXR0YWNoVG8odGhpcyk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFN0YWdlIGV4dGVuZHMgU3RhZ2VCYXNlIHtcbiAgLyoqXG4gICAqIEltcG9ydCBhIFN0YWdlIGJ5IGl0cyBhdHRyaWJ1dGVzXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGZyb21TdGFnZUF0dHJpYnV0ZXMoXG4gICAgc2NvcGU6IENvbnN0cnVjdCxcbiAgICBpZDogc3RyaW5nLFxuICAgIGF0dHJzOiBTdGFnZUF0dHJpYnV0ZXMsXG4gICk6IElTdGFnZSB7XG4gICAgY2xhc3MgSW1wb3J0IGV4dGVuZHMgU3RhZ2VCYXNlIHtcbiAgICAgIHB1YmxpYyByZWFkb25seSBzdGFnZU5hbWUgPSBhdHRycy5zdGFnZU5hbWU7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgcmVzdEFwaSA9IGF0dHJzLnJlc3RBcGk7XG4gICAgfVxuICAgIHJldHVybiBuZXcgSW1wb3J0KHNjb3BlLCBpZCk7XG4gIH1cblxuICBwdWJsaWMgcmVhZG9ubHkgc3RhZ2VOYW1lOiBzdHJpbmc7XG4gIHB1YmxpYyByZWFkb25seSByZXN0QXBpOiBJUmVzdEFwaTtcbiAgcHVibGljIHJlYWRvbmx5IHJlc291cmNlOiBhcGlHYXRld2F5U3RhZ2UuQXBpR2F0ZXdheVN0YWdlO1xuXG4gIHByaXZhdGUgZW5hYmxlQ2FjaGVDbHVzdGVyPzogYm9vbGVhbjtcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogU3RhZ2VQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwgcHJvcHMpO1xuXG4gICAgdGhpcy5yZXN0QXBpID0gcHJvcHMuZGVwbG95bWVudC5hcGk7XG4gICAgdGhpcy5lbmFibGVDYWNoZUNsdXN0ZXIgPSBwcm9wcy5jYWNoZUNsdXN0ZXJFbmFibGVkO1xuXG4gICAgLy8gRGV0ZXJtaW5lIGlmIGNhY2hlIGNsdXN0ZXIgbmVlZHMgdG8gYmUgZW5hYmxlZCBiYXNlZCBvbiBtZXRob2Qgb3B0aW9uc1xuICAgIGNvbnN0IGNvbW1vbkNhY2hpbmdFbmFibGVkID0gcHJvcHMuY2FjaGluZ0VuYWJsZWQ7XG4gICAgaWYgKGNvbW1vbkNhY2hpbmdFbmFibGVkKSB7XG4gICAgICBpZiAodGhpcy5lbmFibGVDYWNoZUNsdXN0ZXIgPT09IGZhbHNlKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBcIkNhbm5vdCBlbmFibGUgY2FjaGluZyBmb3IgY29tbW9uIG1ldGhvZHMgc2luY2UgY2FjaGUgY2x1c3RlciBpcyBkaXNhYmxlZCBvbiBzdGFnZVwiLFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgdGhpcy5lbmFibGVDYWNoZUNsdXN0ZXIgPSB0cnVlO1xuICAgIH1cbiAgICBpZiAocHJvcHMubWV0aG9kT3B0aW9ucykge1xuICAgICAgZm9yIChjb25zdCBwYXRoIG9mIE9iamVjdC5rZXlzKHByb3BzLm1ldGhvZE9wdGlvbnMpKSB7XG4gICAgICAgIGlmIChwcm9wcy5tZXRob2RPcHRpb25zW3BhdGhdLmNhY2hpbmdFbmFibGVkKSB7XG4gICAgICAgICAgaWYgKHRoaXMuZW5hYmxlQ2FjaGVDbHVzdGVyID09PSBmYWxzZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgICBgQ2Fubm90IGVuYWJsZSBjYWNoaW5nIGZvciBtZXRob2QgJHtwYXRofSBzaW5jZSBjYWNoZSBjbHVzdGVyIGlzIGRpc2FibGVkIG9uIHN0YWdlYCxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuZW5hYmxlQ2FjaGVDbHVzdGVyID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIGN1c3RvbSBhY2Nlc3MgbG9nZ2luZ1xuICAgIGxldCBhY2Nlc3NMb2dTZXR0aW5nczpcbiAgICAgIHwgYXBpR2F0ZXdheVN0YWdlLkFwaUdhdGV3YXlTdGFnZUFjY2Vzc0xvZ1NldHRpbmdzXG4gICAgICB8IHVuZGVmaW5lZDtcbiAgICBjb25zdCBhY2Nlc3NMb2dEZXN0aW5hdGlvbiA9IHByb3BzLmFjY2Vzc0xvZ0Rlc3RpbmF0aW9uO1xuICAgIGNvbnN0IGFjY2Vzc0xvZ0Zvcm1hdCA9IHByb3BzLmFjY2Vzc0xvZ0Zvcm1hdDtcblxuICAgIGlmIChhY2Nlc3NMb2dEZXN0aW5hdGlvbiB8fCBhY2Nlc3NMb2dGb3JtYXQpIHtcbiAgICAgIGlmIChcbiAgICAgICAgYWNjZXNzTG9nRm9ybWF0ICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgIVRva2VuLmlzVW5yZXNvbHZlZChhY2Nlc3NMb2dGb3JtYXQudG9TdHJpbmcoKSkgJiZcbiAgICAgICAgIS8uKlxcJGNvbnRleHQuKHJlcXVlc3RJZHxleHRlbmRlZFJlcXVlc3RJZClcXGIuKi8udGVzdChcbiAgICAgICAgICBhY2Nlc3NMb2dGb3JtYXQudG9TdHJpbmcoKSxcbiAgICAgICAgKVxuICAgICAgKSB7XG4gICAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoXG4gICAgICAgICAgXCJBY2Nlc3MgbG9nIG11c3QgaW5jbHVkZSBlaXRoZXIgYEFjY2Vzc0xvZ0Zvcm1hdC5jb250ZXh0UmVxdWVzdElkKClgIG9yIGBBY2Nlc3NMb2dGb3JtYXQuY29udGV4dEV4dGVuZGVkUmVxdWVzdElkKClgXCIsXG4gICAgICAgICAgdGhpcyxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGlmIChhY2Nlc3NMb2dGb3JtYXQgIT09IHVuZGVmaW5lZCAmJiBhY2Nlc3NMb2dEZXN0aW5hdGlvbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoXG4gICAgICAgICAgXCJBY2Nlc3MgbG9nIGZvcm1hdCBpcyBzcGVjaWZpZWQgd2l0aG91dCBhIGRlc3RpbmF0aW9uXCIsXG4gICAgICAgICAgdGhpcyxcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgYWNjZXNzTG9nU2V0dGluZ3MgPSB7XG4gICAgICAgIGRlc3RpbmF0aW9uQXJuOiBhY2Nlc3NMb2dEZXN0aW5hdGlvbiEuYmluZCh0aGlzKS5kZXN0aW5hdGlvbkFybiwgLy8gYWNjZXNzTG9nRGVzdGluYXRpb24gbXVzdCBiZSBkZWZpbmVkIGlmIGZvcm1hdCBpc1xuICAgICAgICBmb3JtYXQ6IGFjY2Vzc0xvZ0Zvcm1hdD8udG9TdHJpbmcoKSA/PyBBY2Nlc3NMb2dGb3JtYXQuY2xmKCkudG9TdHJpbmcoKSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gZW5hYmxlIGNhY2hlIGNsdXN0ZXIgaWYgY2FjaGVDbHVzdGVyU2l6ZSBpcyBzZXRcbiAgICBpZiAocHJvcHMuY2FjaGVDbHVzdGVyU2l6ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAodGhpcy5lbmFibGVDYWNoZUNsdXN0ZXIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLmVuYWJsZUNhY2hlQ2x1c3RlciA9IHRydWU7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMuZW5hYmxlQ2FjaGVDbHVzdGVyID09PSBmYWxzZSkge1xuICAgICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKFxuICAgICAgICAgIGBDYW5ub3Qgc2V0IFwiY2FjaGVDbHVzdGVyU2l6ZVwiIHRvICR7cHJvcHMuY2FjaGVDbHVzdGVyU2l6ZX0gYW5kIFwiY2FjaGVDbHVzdGVyRW5hYmxlZFwiIHRvIFwiZmFsc2VcIi4gKCR7dGhpcy5ub2RlLnBhdGh9KWAsXG4gICAgICAgICAgdGhpcyxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBjYWNoZUNsdXN0ZXJTaXplID0gdGhpcy5lbmFibGVDYWNoZUNsdXN0ZXJcbiAgICAgID8gcHJvcHMuY2FjaGVDbHVzdGVyU2l6ZSB8fCBcIjAuNVwiXG4gICAgICA6IHVuZGVmaW5lZDtcblxuICAgIHRoaXMucmVzb3VyY2UgPSBuZXcgYXBpR2F0ZXdheVN0YWdlLkFwaUdhdGV3YXlTdGFnZSh0aGlzLCBcIlJlc291cmNlXCIsIHtcbiAgICAgIHN0YWdlTmFtZTogcHJvcHMuc3RhZ2VOYW1lIHx8IFwicHJvZFwiLFxuICAgICAgYWNjZXNzTG9nU2V0dGluZ3MsXG4gICAgICBjYWNoZUNsdXN0ZXJFbmFibGVkOiB0aGlzLmVuYWJsZUNhY2hlQ2x1c3RlcixcbiAgICAgIGNhY2hlQ2x1c3RlclNpemUsXG4gICAgICBjbGllbnRDZXJ0aWZpY2F0ZUlkOiBwcm9wcy5jbGllbnRDZXJ0aWZpY2F0ZUlkLFxuICAgICAgZGVwbG95bWVudElkOiBwcm9wcy5kZXBsb3ltZW50LmRlcGxveW1lbnRJZCxcbiAgICAgIHJlc3RBcGlJZDogcHJvcHMuZGVwbG95bWVudC5hcGkucmVzdEFwaUlkLFxuICAgICAgZGVzY3JpcHRpb246IHByb3BzLmRlc2NyaXB0aW9uLFxuICAgICAgZG9jdW1lbnRhdGlvblZlcnNpb246IHByb3BzLmRvY3VtZW50YXRpb25WZXJzaW9uLFxuICAgICAgdmFyaWFibGVzOiBwcm9wcy52YXJpYWJsZXMsXG4gICAgICB4cmF5VHJhY2luZ0VuYWJsZWQ6IHByb3BzLnRyYWNpbmdFbmFibGVkLFxuICAgIH0pO1xuXG4gICAgdGhpcy5zdGFnZU5hbWUgPSB0aGlzLnJlc291cmNlLnN0YWdlTmFtZTtcblxuICAgIHRoaXMuYXBwbHlNZXRob2RTZXR0aW5ncyhwcm9wcywgdGhpcy5yZXNvdXJjZSk7XG5cbiAgICBpZiAoUmVzdEFwaUJhc2UuX2lzUmVzdEFwaUJhc2UodGhpcy5yZXN0QXBpKSkge1xuICAgICAgdGhpcy5yZXN0QXBpLl9hdHRhY2hTdGFnZSh0aGlzKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFwcGx5TWV0aG9kU2V0dGluZ3MoXG4gICAgcHJvcHM6IFN0YWdlUHJvcHMsXG4gICAgc3RhZ2VSZXNvdXJjZTogYXBpR2F0ZXdheVN0YWdlLkFwaUdhdGV3YXlTdGFnZSxcbiAgKTogdm9pZCB7XG4gICAgY29uc3QgY29tbW9uTWV0aG9kT3B0aW9uczogTWV0aG9kRGVwbG95bWVudE9wdGlvbnMgPSB7XG4gICAgICBtZXRyaWNzRW5hYmxlZDogcHJvcHMubWV0cmljc0VuYWJsZWQsXG4gICAgICBsb2dnaW5nTGV2ZWw6IHByb3BzLmxvZ2dpbmdMZXZlbCxcbiAgICAgIGRhdGFUcmFjZUVuYWJsZWQ6IHByb3BzLmRhdGFUcmFjZUVuYWJsZWQsXG4gICAgICB0aHJvdHRsaW5nQnVyc3RMaW1pdDogcHJvcHMudGhyb3R0bGluZ0J1cnN0TGltaXQsXG4gICAgICB0aHJvdHRsaW5nUmF0ZUxpbWl0OiBwcm9wcy50aHJvdHRsaW5nUmF0ZUxpbWl0LFxuICAgICAgY2FjaGluZ0VuYWJsZWQ6IHByb3BzLmNhY2hpbmdFbmFibGVkLFxuICAgICAgY2FjaGVUdGw6IHByb3BzLmNhY2hlVHRsLFxuICAgICAgY2FjaGVEYXRhRW5jcnlwdGVkOiBwcm9wcy5jYWNoZURhdGFFbmNyeXB0ZWQsXG4gICAgfTtcblxuICAgIGNvbnN0IGhhc0NvbW1vbk9wdGlvbnMgPSBPYmplY3QudmFsdWVzKGNvbW1vbk1ldGhvZE9wdGlvbnMpLnNvbWUoXG4gICAgICAodikgPT4gdiAhPT0gdW5kZWZpbmVkLFxuICAgICk7XG4gICAgaWYgKGhhc0NvbW1vbk9wdGlvbnMpIHtcbiAgICAgIHRoaXMuY3JlYXRlTWV0aG9kU2V0dGluZ3NSZXNvdXJjZShcbiAgICAgICAgXCIvKi8qXCIsXG4gICAgICAgIGNvbW1vbk1ldGhvZE9wdGlvbnMsXG4gICAgICAgIHN0YWdlUmVzb3VyY2UsXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChwcm9wcy5tZXRob2RPcHRpb25zKSB7XG4gICAgICBmb3IgKGNvbnN0IHBhdGggb2YgT2JqZWN0LmtleXMocHJvcHMubWV0aG9kT3B0aW9ucykpIHtcbiAgICAgICAgdGhpcy5jcmVhdGVNZXRob2RTZXR0aW5nc1Jlc291cmNlKFxuICAgICAgICAgIHBhdGgsXG4gICAgICAgICAgcHJvcHMubWV0aG9kT3B0aW9uc1twYXRoXSxcbiAgICAgICAgICBzdGFnZVJlc291cmNlLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlTWV0aG9kU2V0dGluZ3NSZXNvdXJjZShcbiAgICBwYXRoOiBzdHJpbmcsXG4gICAgb3B0aW9uczogTWV0aG9kRGVwbG95bWVudE9wdGlvbnMsXG4gICAgc3RhZ2VSZXM6IGFwaUdhdGV3YXlTdGFnZS5BcGlHYXRld2F5U3RhZ2UsXG4gICk6IHZvaWQge1xuICAgIC8vIFZhbGlkYXRpb24gZm9yIGNhY2hpbmcgYWxyZWFkeSBoYXBwZW5lZCBpbiBjb25zdHJ1Y3RvciBiZWZvcmUgQXBpR2F0ZXdheVN0YWdlIGNyZWF0aW9uXG5cbiAgICBjb25zdCB7IGh0dHBNZXRob2QsIHJlc291cmNlUGF0aCB9ID0gcGFyc2VNZXRob2RPcHRpb25zUGF0aChwYXRoKTtcblxuICAgIC8vIFNhbml0aXplIHRoZSBJRCBmb3IgdGhlIG1ldGhvZCBzZXR0aW5ncyByZXNvdXJjZVxuICAgIC8vIFJlcGxhY2Ugbm9uLWFscGhhbnVtZXJpYyBjaGFyYWN0ZXJzIHdpdGggaHlwaGVuLCBlbnN1cmUgaXQncyBhIHZhbGlkIFRGIElEIHBhcnRcbiAgICBjb25zdCBzYWZlUGF0aEZvcklkID0gcmVzb3VyY2VQYXRoXG4gICAgICAucmVwbGFjZSgvW15hLXpBLVowLTlfXS9nLCBcIi1cIilcbiAgICAgIC5yZXBsYWNlKC9eLSt8LSskL2csIFwiXCIpO1xuICAgIGNvbnN0IG1ldGhvZFNldHRpbmdzSWQgPSBgTWV0aG9kU2V0dGluZ3MtJHtzYWZlUGF0aEZvcklkIHx8IFwiUm9vdFwifWA7XG5cbiAgICBuZXcgYXBpR2F0ZXdheU1ldGhvZFNldHRpbmdzLkFwaUdhdGV3YXlNZXRob2RTZXR0aW5ncyhcbiAgICAgIHRoaXMsXG4gICAgICBtZXRob2RTZXR0aW5nc0lkLFxuICAgICAge1xuICAgICAgICByZXN0QXBpSWQ6IHN0YWdlUmVzLnJlc3RBcGlJZCxcbiAgICAgICAgc3RhZ2VOYW1lOiBzdGFnZVJlcy5zdGFnZU5hbWUsXG4gICAgICAgIG1ldGhvZFBhdGg6IGAke3Jlc291cmNlUGF0aH0vJHtodHRwTWV0aG9kfWAsXG4gICAgICAgIHNldHRpbmdzOiB7XG4gICAgICAgICAgbWV0cmljc0VuYWJsZWQ6IG9wdGlvbnMubWV0cmljc0VuYWJsZWQsXG4gICAgICAgICAgbG9nZ2luZ0xldmVsOiBvcHRpb25zLmxvZ2dpbmdMZXZlbCxcbiAgICAgICAgICBkYXRhVHJhY2VFbmFibGVkOiBvcHRpb25zLmRhdGFUcmFjZUVuYWJsZWQsXG4gICAgICAgICAgdGhyb3R0bGluZ0J1cnN0TGltaXQ6IG9wdGlvbnMudGhyb3R0bGluZ0J1cnN0TGltaXQsXG4gICAgICAgICAgdGhyb3R0bGluZ1JhdGVMaW1pdDogb3B0aW9ucy50aHJvdHRsaW5nUmF0ZUxpbWl0LFxuICAgICAgICAgIGNhY2hpbmdFbmFibGVkOiBvcHRpb25zLmNhY2hpbmdFbmFibGVkLFxuICAgICAgICAgIGNhY2hlVHRsSW5TZWNvbmRzOiBvcHRpb25zLmNhY2hlVHRsPy50b1NlY29uZHMoKSxcbiAgICAgICAgICBjYWNoZURhdGFFbmNyeXB0ZWQ6IG9wdGlvbnMuY2FjaGVEYXRhRW5jcnlwdGVkLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICApO1xuICB9XG59XG4iXX0=