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
package/lib/fs/ignore.js CHANGED
@@ -64,7 +64,7 @@ class IgnoreStrategy {
64
64
  }
65
65
  exports.IgnoreStrategy = IgnoreStrategy;
66
66
  _a = JSII_RTTI_SYMBOL_1;
67
- IgnoreStrategy[_a] = { fqn: "terraconstructs.IgnoreStrategy", version: "0.1.8" };
67
+ IgnoreStrategy[_a] = { fqn: "terraconstructs.IgnoreStrategy", version: "0.1.10" };
68
68
  /**
69
69
  * Ignores file paths based on simple glob patterns.
70
70
  */
@@ -114,7 +114,7 @@ class GlobIgnoreStrategy extends IgnoreStrategy {
114
114
  }
115
115
  exports.GlobIgnoreStrategy = GlobIgnoreStrategy;
116
116
  _b = JSII_RTTI_SYMBOL_1;
117
- GlobIgnoreStrategy[_b] = { fqn: "terraconstructs.GlobIgnoreStrategy", version: "0.1.8" };
117
+ GlobIgnoreStrategy[_b] = { fqn: "terraconstructs.GlobIgnoreStrategy", version: "0.1.10" };
118
118
  /**
119
119
  * Ignores file paths based on the [`.gitignore specification`](https://git-scm.com/docs/gitignore).
120
120
  */
@@ -150,7 +150,7 @@ class GitIgnoreStrategy extends IgnoreStrategy {
150
150
  }
151
151
  exports.GitIgnoreStrategy = GitIgnoreStrategy;
152
152
  _c = JSII_RTTI_SYMBOL_1;
153
- GitIgnoreStrategy[_c] = { fqn: "terraconstructs.GitIgnoreStrategy", version: "0.1.8" };
153
+ GitIgnoreStrategy[_c] = { fqn: "terraconstructs.GitIgnoreStrategy", version: "0.1.10" };
154
154
  /**
155
155
  * Ignores file paths based on the [`.dockerignore specification`](https://docs.docker.com/engine/reference/builder/#dockerignore-file).
156
156
  */
@@ -186,5 +186,5 @@ class DockerIgnoreStrategy extends IgnoreStrategy {
186
186
  }
187
187
  exports.DockerIgnoreStrategy = DockerIgnoreStrategy;
188
188
  _d = JSII_RTTI_SYMBOL_1;
189
- DockerIgnoreStrategy[_d] = { fqn: "terraconstructs.DockerIgnoreStrategy", version: "0.1.8" };
189
+ DockerIgnoreStrategy[_d] = { fqn: "terraconstructs.DockerIgnoreStrategy", version: "0.1.10" };
190
190
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWdub3JlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2ZzL2lnbm9yZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLDBGQUEwRjtBQUUxRiw2QkFBNkI7QUFDN0IsdURBQW1FO0FBQ25FLG1DQUErQztBQUMvQyx1Q0FBb0Q7QUFFcEQsa0VBQWtFO0FBQ2xFLGlFQUFpRTtBQUNqRSxNQUFNLFNBQVMsR0FBRyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUM7QUFFdkM7O0dBRUc7QUFDSCxNQUFzQixjQUFjO0lBQ2xDOzs7OztPQUtHO0lBQ0ksTUFBTSxDQUFDLElBQUksQ0FDaEIsZ0JBQXdCLEVBQ3hCLFFBQWtCO1FBRWxCLE9BQU8sSUFBSSxrQkFBa0IsQ0FBQyxnQkFBZ0IsRUFBRSxRQUFRLENBQUMsQ0FBQztJQUM1RCxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSSxNQUFNLENBQUMsR0FBRyxDQUNmLGdCQUF3QixFQUN4QixRQUFrQjtRQUVsQixPQUFPLElBQUksaUJBQWlCLENBQUMsZ0JBQWdCLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDM0QsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0ksTUFBTSxDQUFDLE1BQU0sQ0FDbEIsZ0JBQXdCLEVBQ3hCLFFBQWtCO1FBRWxCLE9BQU8sSUFBSSxvQkFBb0IsQ0FBQyxnQkFBZ0IsRUFBRSxRQUFRLENBQUMsQ0FBQztJQUM5RCxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ksTUFBTSxDQUFDLGVBQWUsQ0FDM0IsT0FBb0IsRUFDcEIsZ0JBQXdCO1FBRXhCLE1BQU0sVUFBVSxHQUFHLE9BQU8sQ0FBQyxVQUFVLElBQUksb0JBQVUsQ0FBQyxJQUFJLENBQUM7UUFDekQsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLE9BQU8sSUFBSSxFQUFFLENBQUM7UUFFdEMsUUFBUSxVQUFVLEVBQUUsQ0FBQztZQUNuQixLQUFLLG9CQUFVLENBQUMsSUFBSTtnQkFDbEIsT0FBTyxJQUFJLENBQUMs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LENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQzNDLENBQUM7O0FBdkNILG9EQXdDQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9hd3MvYXdzLWNkay9ibG9iL3YyLjE4Ni4wL3BhY2thZ2VzL2F3cy1jZGstbGliL2NvcmUvbGliL2ZzL2lnbm9yZS50c1xuXG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gXCJwYXRoXCI7XG5pbXBvcnQgZG9ja2VySWdub3JlLCAqIGFzIERvY2tlcklnbm9yZSBmcm9tIFwiQGJhbGVuYS9kb2NrZXJpZ25vcmVcIjtcbmltcG9ydCBnaXRJZ25vcmUsICogYXMgR2l0SWdub3JlIGZyb20gXCJpZ25vcmVcIjtcbmltcG9ydCB7IENvcHlPcHRpb25zLCBJZ25vcmVNb2RlIH0gZnJvbSBcIi4vb3B0aW9uc1wiO1xuXG4vLyBNdXN0IGJlIGEgJ3JlcXVpcmUnIHRvIG5vdCBydW4gYWZvdWwgb2YgRVNNIG1vZHVsZSBpbXBvcnQgcnVsZXNcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tcmVxdWlyZS1pbXBvcnRzXG5jb25zdCBtaW5pbWF0Y2ggPSByZXF1aXJlKFwibWluaW1hdGNoXCIpO1xuXG4vKipcbiAqIFJlcHJlc2VudHMgZmlsZSBwYXRoIGlnbm9yaW5nIGJlaGF2aW9yLlxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgSWdub3JlU3RyYXRlZ3kge1xuICAvKipcbiAgICogSWdub3JlcyBmaWxlIHBhdGhzIGJhc2VkIG9uIHNpbXBsZSBnbG9iIHBhdHRlcm5zLlxuICAgKlxuICAgKiBAcmV0dXJucyBgR2xvYklnbm9yZVBhdHRlcm5gIGFzc29jaWF0ZWQgd2l0aCB0aGUgZ2l2ZW4gcGF0dGVybnMuXG4gICAqIEBwYXJhbSBhYnNvbHV0ZVJvb3RQYXRoIHRoZSBhYnNvbHV0ZSBwYXRoIHRvIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGUgcGF0aHMgdG8gYmUgY29uc2lkZXJlZFxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBnbG9iKFxuICAgIGFic29sdXRlUm9vdFBhdGg6IHN0cmluZyxcbiAgICBwYXR0ZXJuczogc3RyaW5nW10sXG4gICk6IEdsb2JJZ25vcmVTdHJhdGVneSB7XG4gICAgcmV0dXJuIG5ldyBHbG9iSWdub3JlU3RyYXRlZ3koYWJzb2x1dGVSb290UGF0aCwgcGF0dGVybnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIElnbm9yZXMgZmlsZSBwYXRocyBiYXNlZCBvbiB0aGUgW2AuZ2l0aWdub3JlIHNwZWNpZmljYXRpb25gXShodHRwczovL2dpdC1zY20uY29tL2RvY3MvZ2l0aWdub3JlKS5cbiAgICpcbiAgICogQHJldHVybnMgYEdpdElnbm9yZVBhdHRlcm5gIGFzc29jaWF0ZWQgd2l0aCB0aGUgZ2l2ZW4gcGF0dGVybnMuXG4gICAqIEBwYXJhbSBhYnNvbHV0ZVJvb3RQYXRoIHRoZSBhYnNvbHV0ZSBwYXRoIHRvIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGUgcGF0aHMgdG8gYmUgY29uc2lkZXJlZFxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBnaXQoXG4gICAgYWJzb2x1dGVSb290UGF0aDogc3RyaW5nLFxuICAgIHBhdHRlcm5zOiBzdHJpbmdbXSxcbiAgKTogR2l0SWdub3JlU3RyYXRlZ3kge1xuICAgIHJldHVybiBuZXcgR2l0SWdub3JlU3RyYXRlZ3koYWJzb2x1dGVSb290UGF0aCwgcGF0dGVybnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIElnbm9yZXMgZmlsZSBwYXRocyBiYXNlZCBvbiB0aGUgW2AuZG9ja2VyaWdub3JlIHNwZWNpZmljYXRpb25gXShodHRwczovL2RvY3MuZG9ja2VyLmNvbS9lbmdpbmUvcmVmZXJlbmNlL2J1aWxkZXIvI2RvY2tlcmlnbm9yZS1maWxlKS5cbiAgICpcbiAgICogQHJldHVybnMgYERvY2tlcklnbm9yZVBhdHRlcm5gIGFzc29jaWF0ZWQgd2l0aCB0aGUgZ2l2ZW4gcGF0dGVybnMuXG4gICAqIEBwYXJhbSBhYnNvbHV0ZVJvb3RQYXRoIHRoZSBhYnNvbHV0ZSBwYXRoIHRvIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGUgcGF0aHMgdG8gYmUgY29uc2lkZXJlZFxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBkb2NrZXIoXG4gICAgYWJzb2x1dGVSb290UGF0aDogc3RyaW5nLFxuICAgIHBhdHRlcm5zOiBzdHJpbmdbXSxcbiAgKTogRG9ja2VySWdub3JlU3RyYXRlZ3kge1xuICAgIHJldHVybiBuZXcgRG9ja2VySWdub3JlU3RyYXRlZ3koYWJzb2x1dGVSb290UGF0aCwgcGF0dGVybnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYW4gSWdub3JlU3RyYXRlZ3kgYmFzZWQgb24gdGhlIGBpZ25vcmVNb2RlYCBhbmQgYGV4Y2x1ZGVgIGluIGEgYENvcHlPcHRpb25zYC5cbiAgICpcbiAgICogQHJldHVybnMgYElnbm9yZVN0cmF0ZWd5YCBiYXNlZCBvbiB0aGUgYENvcHlPcHRpb25zYFxuICAgKiBAcGFyYW0gYWJzb2x1dGVSb290UGF0aCB0aGUgYWJzb2x1dGUgcGF0aCB0byB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhlIHBhdGhzIHRvIGJlIGNvbnNpZGVyZWRcbiAgICogQHBhcmFtIG9wdGlvbnMgdGhlIGBDb3B5T3B0aW9uc2AgdG8gY3JlYXRlIHRoZSBgSWdub3JlU3RyYXRlZ3lgIGZyb21cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZnJvbUNvcHlPcHRpb25zKFxuICAgIG9wdGlvbnM6IENvcHlPcHRpb25zLFxuICAgIGFic29sdXRlUm9vdFBhdGg6IHN0cmluZyxcbiAgKTogSWdub3JlU3RyYXRlZ3kge1xuICAgIGNvbnN0IGlnbm9yZU1vZGUgPSBvcHRpb25zLmlnbm9yZU1vZGUgfHwgSWdub3JlTW9kZS5HTE9CO1xuICAgIGNvbnN0IGV4Y2x1ZGUgPSBvcHRpb25zLmV4Y2x1ZGUgfHwgW107XG5cbiAgICBzd2l0Y2ggKGlnbm9yZU1vZGUpIHtcbiAgICAgIGNhc2UgSWdub3JlTW9kZS5HTE9COlxuICAgICAgICByZXR1cm4gdGhpcy5nbG9iKGFic29sdXRlUm9vdFBhdGgsIGV4Y2x1ZGUpO1xuXG4gICAgICBjYXNlIElnbm9yZU1vZGUuR0lUOlxuICAgICAgICByZXR1cm4gdGhpcy5naXQoYWJzb2x1dGVSb290UGF0aCwgZXhjbHVkZSk7XG5cbiAgICAgIGNhc2UgSWdub3JlTW9kZS5ET0NLRVI6XG4gICAgICAgIHJldHVybiB0aGlzLmRvY2tlcihhYnNvbHV0ZVJvb3RQYXRoLCBleGNsdWRlKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhbm90aGVyIHBhdHRlcm4uXG4gICAqIEBwYXJhbXMgcGF0dGVybiB0aGUgcGF0dGVybiB0byBhZGRcbiAgICovXG4gIHB1YmxpYyBhYnN0cmFjdCBhZGQocGF0dGVybjogc3RyaW5nKTogdm9pZDtcblxuICAvKipcbiAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIGEgZ2l2ZW4gZmlsZSBwYXRoIHNob3VsZCBiZSBpZ25vcmVkIG9yIG5vdC5cbiAgICpcbiAgICogQHBhcmFtIGFic29sdXRlRmlsZVBhdGggYWJzb2x1dGUgZmlsZSBwYXRoIHRvIGJlIGFzc2Vzc2VkIGFnYWluc3QgdGhlIHBhdHRlcm5cbiAgICogQHJldHVybnMgYHRydWVgIGlmIHRoZSBmaWxlIHNob3VsZCBiZSBpZ25vcmVkXG4gICAqL1xuICBwdWJsaWMgYWJzdHJhY3QgaWdub3JlcyhhYnNvbHV0ZUZpbGVQYXRoOiBzdHJpbmcpOiBib29sZWFuO1xufVxuXG4vKipcbiAqIElnbm9yZXMgZmlsZSBwYXRocyBiYXNlZCBvbiBzaW1wbGUgZ2xvYiBwYXR0ZXJucy5cbiAqL1xuZXhwb3J0IGNsYXNzIEdsb2JJZ25vcmVTdHJhdGVneSBleHRlbmRzIElnbm9yZVN0cmF0ZWd5IHtcbiAgcHJpdmF0ZSByZWFkb25seSBhYnNvbHV0ZVJvb3RQYXRoOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgcGF0dGVybnM6IHN0cmluZ1tdO1xuXG4gIGNvbnN0cnVjdG9yKGFic29sdXRlUm9vdFBhdGg6IHN0cmluZywgcGF0dGVybnM6IHN0cmluZ1tdKSB7XG4gICAgc3VwZXIoKTtcblxuICAgIGlmICghcGF0aC5pc0Fic29sdXRlKGFic29sdXRlUm9vdFBhdGgpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJHbG9iSWdub3JlU3RyYXRlZ3kgZXhwZWN0cyBhbiBhYnNvbHV0ZSBmaWxlIHBhdGhcIik7XG4gICAgfVxuXG4gICAgdGhpcy5hYnNvbHV0ZVJvb3RQYXRoID0gYWJzb2x1dGVSb290UGF0aDtcbiAgICB0aGlzLnBhdHRlcm5zID0gcGF0dGVybnM7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhbm90aGVyIHBhdHRlcm4uXG4gICAqIEBwYXJhbXMgcGF0dGVybiB0aGUgcGF0dGVybiB0byBhZGRcbiAgICovXG4gIHB1YmxpYyBhZGQocGF0dGVybjogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5wYXR0ZXJucy5wdXNoKHBhdHRlcm4pO1xuICB9XG5cbiAgLyoqXG4gICAqIERldGVybWluZXMgd2hldGhlciBhIGdpdmVuIGZpbGUgcGF0aCBzaG91bGQgYmUgaWdub3JlZCBvciBub3QuXG4gICAqXG4gICAqIEBwYXJhbSBhYnNvbHV0ZUZpbGVQYXRoIGFic29sdXRlIGZpbGUgcGF0aCB0byBiZSBhc3Nlc3NlZCBhZ2FpbnN0IHRoZSBwYXR0ZXJuXG4gICAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGUgZmlsZSBzaG91bGQgYmUgaWdub3JlZFxuICAgKi9cbiAgcHVibGljIGlnbm9yZXMoYWJzb2x1dGVGaWxlUGF0aDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgaWYgKCFwYXRoLmlzQWJzb2x1dGUoYWJzb2x1dGVGaWxlUGF0aCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkdsb2JJZ25vcmVTdHJhdGVneS5pZ25vcmVzKCkgZXhwZWN0cyBhbiBhYnNvbHV0ZSBwYXRoXCIpO1xuICAgIH1cblxuICAgIGxldCByZWxhdGl2ZVBhdGggPSBwYXRoLnJlbGF0aXZlKHRoaXMuYWJzb2x1dGVSb290UGF0aCwgYWJzb2x1dGVGaWxlUGF0aCk7XG4gICAgbGV0IGV4Y2x1ZGVPdXRwdXQgPSBmYWxzZTtcblxuICAgIGZvciAoY29uc3QgcGF0dGVybiBvZiB0aGlzLnBhdHRlcm5zKSB7XG4gICAgICBjb25zdCBuZWdhdGUgPSBwYXR0ZXJuLnN0YXJ0c1dpdGgoXCIhXCIpO1xuICAgICAgY29uc3QgbWF0Y2ggPSBtaW5pbWF0Y2gocmVsYXRpdmVQYXRoLCBwYXR0ZXJuLCB7XG4gICAgICAgIG1hdGNoQmFzZTogdHJ1ZSxcbiAgICAgICAgZmxpcE5lZ2F0ZTogdHJ1ZSxcbiAgICAgIH0pO1xuXG4gICAgICBpZiAoIW5lZ2F0ZSAmJiBtYXRjaCkge1xuICAgICAgICBleGNsdWRlT3V0cHV0ID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKG5lZ2F0ZSAmJiBtYXRjaCkge1xuICAgICAgICBleGNsdWRlT3V0cHV0ID0gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGV4Y2x1ZGVPdXRwdXQ7XG4gIH1cbn1cblxuLyoqXG4gKiBJZ25vcmVzIGZpbGUgcGF0aHMgYmFzZWQgb24gdGhlIFtgLmdpdGlnbm9yZSBzcGVjaWZpY2F0aW9uYF0oaHR0cHM6Ly9naXQtc2NtLmNvbS9kb2NzL2dpdGlnbm9yZSkuXG4gKi9cbmV4cG9ydCBjbGFzcyBHaXRJZ25vcmVTdHJhdGVneSBleHRlbmRzIElnbm9yZVN0cmF0ZWd5IHtcbiAgcHJpdmF0ZSByZWFkb25seSBhYnNvbHV0ZVJvb3RQYXRoOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgaWdub3JlOiBHaXRJZ25vcmUuSWdub3JlO1xuXG4gIGNvbnN0cnVjdG9yKGFic29sdXRlUm9vdFBhdGg6IHN0cmluZywgcGF0dGVybnM6IHN0cmluZ1tdKSB7XG4gICAgc3VwZXIoKTtcblxuICAgIGlmICghcGF0aC5pc0Fic29sdXRlKGFic29sdXRlUm9vdFBhdGgpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJHaXRJZ25vcmVTdHJhdGVneSBleHBlY3RzIGFuIGFic29sdXRlIGZpbGUgcGF0aFwiKTtcbiAgICB9XG5cbiAgICB0aGlzLmFic29sdXRlUm9vdFBhdGggPSBhYnNvbHV0ZVJvb3RQYXRoO1xuICAgIHRoaXMuaWdub3JlID0gZ2l0SWdub3JlKCkuYWRkKHBhdHRlcm5zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGFub3RoZXIgcGF0dGVybi5cbiAgICogQHBhcmFtcyBwYXR0ZXJuIHRoZSBwYXR0ZXJuIHRvIGFkZFxuICAgKi9cbiAgcHVibGljIGFkZChwYXR0ZXJuOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLmlnbm9yZS5hZGQocGF0dGVybik7XG4gIH1cblxuICAvKipcbiAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIGEgZ2l2ZW4gZmlsZSBwYXRoIHNob3VsZCBiZSBpZ25vcmVkIG9yIG5vdC5cbiAgICpcbiAgICogQHBhcmFtIGFic29sdXRlRmlsZVBhdGggYWJzb2x1dGUgZmlsZSBwYXRoIHRvIGJlIGFzc2Vzc2VkIGFnYWluc3QgdGhlIHBhdHRlcm5cbiAgICogQHJldHVybnMgYHRydWVgIGlmIHRoZSBmaWxlIHNob3VsZCBiZSBpZ25vcmVkXG4gICAqL1xuICBwdWJsaWMgaWdub3JlcyhhYnNvbHV0ZUZpbGVQYXRoOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBpZiAoIXBhdGguaXNBYnNvbHV0ZShhYnNvbHV0ZUZpbGVQYXRoKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiR2l0SWdub3JlU3RyYXRlZ3kuaWdub3JlcygpIGV4cGVjdHMgYW4gYWJzb2x1dGUgcGF0aFwiKTtcbiAgICB9XG5cbiAgICBsZXQgcmVsYXRpdmVQYXRoID0gcGF0aC5yZWxhdGl2ZSh0aGlzLmFic29sdXRlUm9vdFBhdGgsIGFic29sdXRlRmlsZVBhdGgpO1xuXG4gICAgcmV0dXJuIHRoaXMuaWdub3JlLmlnbm9yZXMocmVsYXRpdmVQYXRoKTtcbiAgfVxufVxuXG4vKipcbiAqIElnbm9yZXMgZmlsZSBwYXRocyBiYXNlZCBvbiB0aGUgW2AuZG9ja2VyaWdub3JlIHNwZWNpZmljYXRpb25gXShodHRwczovL2RvY3MuZG9ja2VyLmNvbS9lbmdpbmUvcmVmZXJlbmNlL2J1aWxkZXIvI2RvY2tlcmlnbm9yZS1maWxlKS5cbiAqL1xuZXhwb3J0IGNsYXNzIERvY2tlcklnbm9yZVN0cmF0ZWd5IGV4dGVuZHMgSWdub3JlU3RyYXRlZ3kge1xuICBwcml2YXRlIHJlYWRvbmx5IGFic29sdXRlUm9vdFBhdGg6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBpZ25vcmU6IERvY2tlcklnbm9yZS5JZ25vcmU7XG5cbiAgY29uc3RydWN0b3IoYWJzb2x1dGVSb290UGF0aDogc3RyaW5nLCBwYXR0ZXJuczogc3RyaW5nW10pIHtcbiAgICBzdXBlcigpO1xuXG4gICAgaWYgKCFwYXRoLmlzQWJzb2x1dGUoYWJzb2x1dGVSb290UGF0aCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkRvY2tlcklnbm9yZVN0cmF0ZWd5IGV4cGVjdHMgYW4gYWJzb2x1dGUgZmlsZSBwYXRoXCIpO1xuICAgIH1cblxuICAgIHRoaXMuYWJzb2x1dGVSb290UGF0aCA9IGFic29sdXRlUm9vdFBhdGg7XG4gICAgdGhpcy5pZ25vcmUgPSBkb2NrZXJJZ25vcmUoKS5hZGQocGF0dGVybnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYW5vdGhlciBwYXR0ZXJuLlxuICAgKiBAcGFyYW1zIHBhdHRlcm4gdGhlIHBhdHRlcm4gdG8gYWRkXG4gICAqL1xuICBwdWJsaWMgYWRkKHBhdHRlcm46IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuaWdub3JlLmFkZChwYXR0ZXJuKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgYSBnaXZlbiBmaWxlIHBhdGggc2hvdWxkIGJlIGlnbm9yZWQgb3Igbm90LlxuICAgKlxuICAgKiBAcGFyYW0gYWJzb2x1dGVGaWxlUGF0aCBhYnNvbHV0ZSBmaWxlIHBhdGggdG8gYmUgYXNzZXNzZWQgYWdhaW5zdCB0aGUgcGF0dGVyblxuICAgKiBAcmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGZpbGUgc2hvdWxkIGJlIGlnbm9yZWRcbiAgICovXG4gIHB1YmxpYyBpZ25vcmVzKGFic29sdXRlRmlsZVBhdGg6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGlmICghcGF0aC5pc0Fic29sdXRlKGFic29sdXRlRmlsZVBhdGgpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIFwiRG9ja2VySWdub3JlU3RyYXRlZ3kuaWdub3JlcygpIGV4cGVjdHMgYW4gYWJzb2x1dGUgcGF0aFwiLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBsZXQgcmVsYXRpdmVQYXRoID0gcGF0aC5yZWxhdGl2ZSh0aGlzLmFic29sdXRlUm9vdFBhdGgsIGFic29sdXRlRmlsZVBhdGgpO1xuXG4gICAgcmV0dXJuIHRoaXMuaWdub3JlLmlnbm9yZXMocmVsYXRpdmVQYXRoKTtcbiAgfVxufVxuIl19
package/lib/fs/index.js CHANGED
@@ -84,5 +84,5 @@ class FileSystem {
84
84
  }
85
85
  exports.FileSystem = FileSystem;
86
86
  _a = JSII_RTTI_SYMBOL_1;
87
- FileSystem[_a] = { fqn: "terraconstructs.FileSystem", version: "0.1.8" };
87
+ FileSystem[_a] = { fqn: "terraconstructs.FileSystem", version: "0.1.10" };
88
88
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZnMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLHlGQUF5RjtBQUV6Rix5QkFBeUI7QUFDekIseUJBQXlCO0FBQ3pCLDZCQUE2QjtBQUM3QixpQ0FBdUM7QUFDdkMsK0NBQTRDO0FBRzVDLDJDQUF5QjtBQUN6Qiw0Q0FBMEI7QUFFMUI7O0dBRUc7QUFDSCxNQUFhLFVBQVU7SUFDckI7Ozs7OztPQU1HO0lBQ0ksTUFBTSxDQUFDLGFBQWEsQ0FDekIsTUFBYyxFQUNkLE9BQWUsRUFDZixVQUF1QixFQUFFLEVBQ3pCLE9BQWdCO1FBRWhCLE9BQU8sSUFBQSxvQkFBYSxFQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQzFELENBQUM7SUFFRDs7Ozs7Ozs7Ozs7T0FXRztJQUNJLE1BQU0sQ0FBQyxXQUFXLENBQ3ZCLGVBQXVCLEVBQ3ZCLFVBQThCLEVBQUU7UUFFaEMsT0FBTyxJQUFBLHlCQUFXLEVBQUMsZUFBZSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQy9DLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFXO1FBQy9CLE9BQU8sRUFBRSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDO0lBQzFDLENBQUM7SUFFRDs7T0FFRztJQUNJLE1BQU0sS0FBSyxNQUFNO1FBQ3RCLElBQUksVUFBVSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ3ZCLE9BQU8sVUFBVSxDQUFDLE9BQU8sQ0FBQztRQUM1QixDQUFDO1FBQ0QsVUFBVSxDQUFDLE9BQU8sR0FBRyxFQUFFLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO1FBQ2xELE9BQU8sVUFBVSxDQUFDLE9BQU8sQ0FBQztJQUM1QixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSSxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQWM7UUFDbEMsT0FBTyxFQUFFLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQzlELENBQUM7O0FBaEVILGdDQW1FQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9hd3MvYXdzLWNkay9ibG9iL3YyLjE4Ni4wL3BhY2thZ2VzL2F3cy1jZGstbGliL2NvcmUvbGliL2ZzL2luZGV4LnRzXG5cbmltcG9ydCAqIGFzIGZzIGZyb20gXCJmc1wiO1xuaW1wb3J0ICogYXMgb3MgZnJvbSBcIm9zXCI7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gXCJwYXRoXCI7XG5pbXBvcnQgeyBjb3B5RGlyZWN0b3J5IH0gZnJvbSBcIi4vY29weVwiO1xuaW1wb3J0IHsgZmluZ2VycHJpbnQgfSBmcm9tIFwiLi9maW5nZXJwcmludFwiO1xuaW1wb3J0IHsgQ29weU9wdGlvbnMsIEZpbmdlcnByaW50T3B0aW9ucyB9IGZyb20gXCIuL29wdGlvbnNcIjtcblxuZXhwb3J0ICogZnJvbSBcIi4vaWdub3JlXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9vcHRpb25zXCI7XG5cbi8qKlxuICogRmlsZSBzeXN0ZW0gdXRpbGl0aWVzLlxuICovXG5leHBvcnQgY2xhc3MgRmlsZVN5c3RlbSB7XG4gIC8qKlxuICAgKiBDb3BpZXMgYW4gZW50aXJlIGRpcmVjdG9yeSBzdHJ1Y3R1cmUuXG4gICAqIEBwYXJhbSBzcmNEaXIgU291cmNlIGRpcmVjdG9yeVxuICAgKiBAcGFyYW0gZGVzdERpciBEZXN0aW5hdGlvbiBkaXJlY3RvcnlcbiAgICogQHBhcmFtIG9wdGlvbnMgb3B0aW9uc1xuICAgKiBAcGFyYW0gcm9vdERpciBSb290IGRpcmVjdG9yeSB0byBjYWxjdWxhdGUgZXhjbHVzaW9ucyBmcm9tXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGNvcHlEaXJlY3RvcnkoXG4gICAgc3JjRGlyOiBzdHJpbmcsXG4gICAgZGVzdERpcjogc3RyaW5nLFxuICAgIG9wdGlvbnM6IENvcHlPcHRpb25zID0ge30sXG4gICAgcm9vdERpcj86IHN0cmluZyxcbiAgKSB7XG4gICAgcmV0dXJuIGNvcHlEaXJlY3Rvcnkoc3JjRGlyLCBkZXN0RGlyLCBvcHRpb25zLCByb290RGlyKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQcm9kdWNlcyBmaW5nZXJwcmludCBiYXNlZCBvbiB0aGUgY29udGVudHMgb2YgYSBzaW5nbGUgZmlsZSBvciBhbiBlbnRpcmUgZGlyZWN0b3J5IHRyZWUuXG4gICAqXG4gICAqIExpbmUgZW5kaW5ncyBhcmUgY29udmVydGVkIGZyb20gQ1JMRiB0byBMRi5cbiAgICpcbiAgICogVGhlIGZpbmdlcnByaW50IHdpbGwgYWxzbyBpbmNsdWRlOlxuICAgKiAxLiBBbiBleHRyYSBzdHJpbmcgaWYgZGVmaW5lZCBpbiBgb3B0aW9ucy5leHRyYWAuXG4gICAqIDIuIFRoZSBzeW1saW5rIGZvbGxvdyBtb2RlIHZhbHVlLlxuICAgKlxuICAgKiBAcGFyYW0gZmlsZU9yRGlyZWN0b3J5IFRoZSBkaXJlY3Rvcnkgb3IgZmlsZSB0byBmaW5nZXJwcmludFxuICAgKiBAcGFyYW0gb3B0aW9ucyBGaW5nZXJwcmludGluZyBvcHRpb25zXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGZpbmdlcnByaW50KFxuICAgIGZpbGVPckRpcmVjdG9yeTogc3RyaW5nLFxuICAgIG9wdGlvbnM6IEZpbmdlcnByaW50T3B0aW9ucyA9IHt9LFxuICApIHtcbiAgICByZXR1cm4gZmluZ2VycHJpbnQoZmlsZU9yRGlyZWN0b3J5LCBvcHRpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3Mgd2hldGhlciBhIGRpcmVjdG9yeSBpcyBlbXB0eVxuICAgKlxuICAgKiBAcGFyYW0gZGlyIFRoZSBkaXJlY3RvcnkgdG8gY2hlY2tcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgaXNFbXB0eShkaXI6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBmcy5yZWFkZGlyU3luYyhkaXIpLmxlbmd0aCA9PT0gMDtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgcmVhbCBwYXRoIG9mIHRoZSBzeXN0ZW0gdGVtcCBkaXJlY3RvcnlcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZ2V0IHRtcGRpcigpOiBzdHJpbmcge1xuICAgIGlmIChGaWxlU3lzdGVtLl90bXBkaXIpIHtcbiAgICAgIHJldHVybiBGaWxlU3lzdGVtLl90bXBkaXI7XG4gICAgfVxuICAgIEZpbGVTeXN0ZW0uX3RtcGRpciA9IGZzLnJlYWxwYXRoU3luYyhvcy50bXBkaXIoKSk7XG4gICAgcmV0dXJuIEZpbGVTeXN0ZW0uX3RtcGRpcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgdW5pcXVlIHRlbXBvcmFyeSBkaXJlY3RvcnkgaW4gdGhlICoqc3lzdGVtIHRlbXAgZGlyZWN0b3J5KiouXG4gICAqXG4gICAqIEBwYXJhbSBwcmVmaXggQSBwcmVmaXggZm9yIHRoZSBkaXJlY3RvcnkgbmFtZS4gU2l4IHJhbmRvbSBjaGFyYWN0ZXJzXG4gICAqIHdpbGwgYmUgZ2VuZXJhdGVkIGFuZCBhcHBlbmRlZCBiZWhpbmQgdGhpcyBwcmVmaXguXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIG1rZHRlbXAocHJlZml4OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBmcy5ta2R0ZW1wU3luYyhwYXRoLmpvaW4oRmlsZVN5c3RlbS50bXBkaXIsIHByZWZpeCkpO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgX3RtcGRpcj86IHN0cmluZztcbn1cbiJdfQ==
package/lib/index.d.ts CHANGED
@@ -5,6 +5,7 @@ export * from "./time-zone";
5
5
  export * from "./expiration";
6
6
  export * from "./size";
7
7
  export * from "./terra-func";
8
+ export * from "./errors";
8
9
  export * from "./assets";
9
10
  export * from "./asset-staging";
10
11
  export * from "./asset-manager";
package/lib/index.js CHANGED
@@ -22,6 +22,7 @@ __exportStar(require("./time-zone"), exports);
22
22
  __exportStar(require("./expiration"), exports);
23
23
  __exportStar(require("./size"), exports);
24
24
  __exportStar(require("./terra-func"), exports);
25
+ __exportStar(require("./errors"), exports);
25
26
  // AWS CDK Bundling
26
27
  __exportStar(require("./assets"), exports);
27
28
  __exportStar(require("./asset-staging"), exports);
@@ -30,4 +31,4 @@ __exportStar(require("./bundling"), exports);
30
31
  __exportStar(require("./fs"), exports);
31
32
  // cloud specific exports
32
33
  exports.aws = require("./aws");
33
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxtREFBaUM7QUFDakMsK0NBQTZCO0FBQzdCLDZDQUEyQjtBQUMzQiw4Q0FBNEI7QUFDNUIsK0NBQTZCO0FBQzdCLHlDQUF1QjtBQUN2QiwrQ0FBNkI7QUFFN0IsbUJBQW1CO0FBQ25CLDJDQUF5QjtBQUN6QixrREFBZ0M7QUFDaEMsa0RBQWdDO0FBQ2hDLDZDQUEyQjtBQUMzQix1Q0FBcUI7QUFFckIseUJBQXlCO0FBQ3pCLCtCQUE2QiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gXCIuL2NvbnN0cnVjdC1iYXNlXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9zdGFjay1iYXNlXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9kdXJhdGlvblwiO1xuZXhwb3J0ICogZnJvbSBcIi4vdGltZS16b25lXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9leHBpcmF0aW9uXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9zaXplXCI7XG5leHBvcnQgKiBmcm9tIFwiLi90ZXJyYS1mdW5jXCI7XG5cbi8vIEFXUyBDREsgQnVuZGxpbmdcbmV4cG9ydCAqIGZyb20gXCIuL2Fzc2V0c1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vYXNzZXQtc3RhZ2luZ1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vYXNzZXQtbWFuYWdlclwiO1xuZXhwb3J0ICogZnJvbSBcIi4vYnVuZGxpbmdcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2ZzXCI7XG5cbi8vIGNsb3VkIHNwZWNpZmljIGV4cG9ydHNcbmV4cG9ydCAqIGFzIGF3cyBmcm9tIFwiLi9hd3NcIjtcbiJdfQ==
34
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxtREFBaUM7QUFDakMsK0NBQTZCO0FBQzdCLDZDQUEyQjtBQUMzQiw4Q0FBNEI7QUFDNUIsK0NBQTZCO0FBQzdCLHlDQUF1QjtBQUN2QiwrQ0FBNkI7QUFDN0IsMkNBQXlCO0FBRXpCLG1CQUFtQjtBQUNuQiwyQ0FBeUI7QUFDekIsa0RBQWdDO0FBQ2hDLGtEQUFnQztBQUNoQyw2Q0FBMkI7QUFDM0IsdUNBQXFCO0FBRXJCLHlCQUF5QjtBQUN6QiwrQkFBNkIiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tIFwiLi9jb25zdHJ1Y3QtYmFzZVwiO1xuZXhwb3J0ICogZnJvbSBcIi4vc3RhY2stYmFzZVwiO1xuZXhwb3J0ICogZnJvbSBcIi4vZHVyYXRpb25cIjtcbmV4cG9ydCAqIGZyb20gXCIuL3RpbWUtem9uZVwiO1xuZXhwb3J0ICogZnJvbSBcIi4vZXhwaXJhdGlvblwiO1xuZXhwb3J0ICogZnJvbSBcIi4vc2l6ZVwiO1xuZXhwb3J0ICogZnJvbSBcIi4vdGVycmEtZnVuY1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vZXJyb3JzXCI7XG5cbi8vIEFXUyBDREsgQnVuZGxpbmdcbmV4cG9ydCAqIGZyb20gXCIuL2Fzc2V0c1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vYXNzZXQtc3RhZ2luZ1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vYXNzZXQtbWFuYWdlclwiO1xuZXhwb3J0ICogZnJvbSBcIi4vYnVuZGxpbmdcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2ZzXCI7XG5cbi8vIGNsb3VkIHNwZWNpZmljIGV4cG9ydHNcbmV4cG9ydCAqIGFzIGF3cyBmcm9tIFwiLi9hd3NcIjtcbiJdfQ==
@@ -8,6 +8,7 @@ const crypto = require("crypto");
8
8
  const os = require("os");
9
9
  // import { AssetStaging } from "../asset-staging";
10
10
  const asset_staging_1 = require("../asset-staging");
11
+ const errors_1 = require("../errors");
11
12
  class AssetBundlingBase {
12
13
  constructor(options) {
13
14
  this.options = options;
@@ -193,7 +194,7 @@ function dockerExec(args, options) {
193
194
  .split("\n")
194
195
  .map((line, idx) => `${idx === 0 ? firstLine : padding}${line}`);
195
196
  }
196
- throw new Error([
197
+ throw new errors_1.ExecutionError([
197
198
  `${prog} exited with ${reason}`,
198
199
  ...(prependLines("--> STDOUT: ", proc.stdout) ?? []),
199
200
  ...(prependLines("--> STDERR: ", proc.stderr) ?? []),
@@ -202,4 +203,4 @@ function dockerExec(args, options) {
202
203
  }
203
204
  return proc;
204
205
  }
205
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzZXQtc3RhZ2luZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wcml2YXRlL2Fzc2V0LXN0YWdpbmcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLHNHQUFzRzs7O0FBME10RyxnQ0F3REM7QUFoUUQsaURBQTREO0FBQzVELGlDQUFpQztBQUNqQyx5QkFBeUI7QUFDekIsbURBQW1EO0FBQ25ELG9EQUFnRDtBQWlCaEQsTUFBZSxpQkFBaUI7SUFFOUIsWUFBWSxPQUE2QjtRQUN2QyxJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztJQUN6QixDQUFDO0lBQ0Q7O09BRUc7SUFDTyxhQUFhO1FBQ3JCLElBQUksSUFBWSxDQUFDO1FBQ2pCLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUN0QixJQUFJLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7UUFDM0IsQ0FBQzthQUFNLENBQUM7WUFDTiwwQkFBMEI7WUFDMUIsTUFBTSxRQUFRLEdBQUcsRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQy9CLElBQUk7Z0JBQ0YsUUFBUSxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyx1QkFBdUI7b0JBQ3pDLENBQUMsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxHQUFHLElBQUksUUFBUSxDQUFDLEdBQUcsRUFBRTtvQkFDbkMsQ0FBQyxDQUFDLFdBQVcsQ0FBQztRQUNwQixDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0NBQ0Y7QUFFRDs7R0FFRztBQUNILE1BQWEsc0JBQXVCLFNBQVEsaUJBQWlCO0lBQzNEOztPQUVHO0lBQ0ksR0FBRztRQUNSLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQztZQUNyQixPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPO1lBQzdCLElBQUksRUFBRSxJQUFJLENBQUMsYUFBYSxFQUFFO1lBQzFC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QUMsQ0FBQyxHQUFHLENBQ3JEO1NBQ0YsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFFWixTQUFTLFlBQVksQ0FDbkIsU0FBaUIsRUFDakIsSUFBaUM7WUFFakMsSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO2dCQUMvQixPQUFPLEVBQUUsQ0FBQztZQUNaLENBQUM7WUFDRCxNQUFNLE9BQU8sR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUM3QyxPQUFPLElBQUk7aUJBQ1IsUUFBUSxDQUFDLE9BQU8sQ0FBQztpQkFDakIsS0FBSyxDQUFDLElBQUksQ0FBQztpQkFDWCxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksRUFBRSxDQUFDLENBQUM7UUFDckUsQ0FBQztRQUVELE1BQU0sSUFBSSxLQUFLLENBQ2I7WUFDRSxHQUFHLElBQUksZ0JBQWdCLE1BQU0sRUFBRTtZQUMvQixHQUFHLENBQUMsWUFBWSxDQUFDLGVBQWUsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ3JELEdBQUcsQ0FBQyxZQUFZLENBQUMsZUFBZSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDckQsZ0JBQWdCLE9BQU8sRUFBRTtTQUMxQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FDYixDQUFDO0lBQ0osQ0FBQztJQUVELE9BQU8sSUFBSSxDQUFDO0FBQ2QsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9hd3MvYXdzLWNkay9ibG9iL3YyLjE4Ni4wL3BhY2thZ2VzL2F3cy1jZGstbGliL2NvcmUvbGliL3ByaXZhdGUvYXNzZXQtc3RhZ2luZy50c1xuXG5pbXBvcnQgeyBzcGF3blN5bmMsIFNwYXduU3luY09wdGlvbnMgfSBmcm9tIFwiY2hpbGRfcHJvY2Vzc1wiO1xuaW1wb3J0ICogYXMgY3J5cHRvIGZyb20gXCJjcnlwdG9cIjtcbmltcG9ydCAqIGFzIG9zIGZyb20gXCJvc1wiO1xuLy8gaW1wb3J0IHsgQXNzZXRTdGFnaW5nIH0gZnJvbSBcIi4uL2Fzc2V0LXN0YWdpbmdcIjtcbmltcG9ydCB7IEFzc2V0U3RhZ2luZyB9IGZyb20gXCIuLi9hc3NldC1zdGFnaW5nXCI7XG5pbXBvcnQgeyBCdW5kbGluZ09wdGlvbnMgfSBmcm9tIFwiLi4vYnVuZGxpbmdcIjtcblxuLyoqXG4gKiBPcHRpb25zIGZvciBEb2NrZXIgYmFzZWQgYnVuZGxpbmcgb2YgYXNzZXRzXG4gKi9cbmludGVyZmFjZSBBc3NldEJ1bmRsaW5nT3B0aW9ucyBleHRlbmRzIEJ1bmRsaW5nT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBQYXRoIHdoZXJlIHRoZSBzb3VyY2UgZmlsZXMgYXJlIGxvY2F0ZWRcbiAgICovXG4gIHJlYWRvbmx5IHNvdXJjZVBhdGg6IHN0cmluZztcbiAgLyoqXG4gICAqIFBhdGggd2hlcmUgdGhlIG91dHB1dCBmaWxlcyBzaG91bGQgYmUgc3RvcmVkXG4gICAqL1xuICByZWFkb25seSBidW5kbGVEaXI6IHN0cmluZztcbn1cblxuYWJzdHJhY3QgY2xhc3MgQXNzZXRCdW5kbGluZ0Jhc2Uge1xuICBwcm90ZWN0ZWQgb3B0aW9uczogQXNzZXRCdW5kbGluZ09wdGlvbnM7XG4gIGNvbnN0cnVjdG9yKG9wdGlvbnM6IEFzc2V0QnVuZGxpbmdPcHRpb25zKSB7XG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcbiAgfVxuICAvKipcbiAgICogRGV0ZXJtaW5lcyBhIHVzZWZ1bCBkZWZhdWx0IHVzZXIgaWYgbm90IGdpdmVuIG90aGVyd2lzZVxuICAgKi9cbiAgcHJvdGVjdGVkIGRldGVybWluZVVzZXIoKSB7XG4gICAgbGV0IHVzZXI6IHN0cmluZztcbiAgICBpZiAodGhpcy5vcHRpb25zLnVzZXIpIHtcbiAgICAgIHVzZXIgPSB0aGlzLm9wdGlvbnMudXNlcjtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gRGVmYXVsdCB0byBjdXJyZW50IHVzZXJcbiAgICAgIGNvbnN0IHVzZXJJbmZvID0gb3MudXNlckluZm8oKTtcbiAgICAgIHVzZXIgPVxuICAgICAgICB1c2VySW5mby51aWQgIT09IC0xIC8vIHVpZCBpcyAtMSBvbiBXaW5kb3dzXG4gICAgICAgICAgPyBgJHt1c2VySW5mby51aWR9OiR7dXNlckluZm8uZ2lkfWBcbiAgICAgICAgICA6IFwiMTAwMDoxMDAwXCI7XG4gICAgfVxuICAgIHJldHVybiB1c2VyO1xuICB9XG59XG5cbi8qKlxuICogQnVuZGxlcyBmaWxlcyB3aXRoIGJpbmQgbW91bnQgYXMgY29weSBtZXRob2RcbiAqL1xuZXhwb3J0IGNsYXNzIEFzc2V0QnVuZGxpbmdCaW5kTW91bnQgZXh0ZW5kcyBBc3NldEJ1bmRsaW5nQmFzZSB7XG4gIC8qKlxuICAgKiBCdW5kbGUgZmlsZXMgd2l0aCBiaW5kIG1vdW50IGFzIGNvcHkgbWV0aG9kXG4gICAqL1xuICBwdWJsaWMgcnVuKCkge1xuICAgIHRoaXMub3B0aW9ucy5pbWFnZS5ydW4oe1xuICAgICAgY29tbWFuZDogdGhpcy5vcHRpb25zLmNvbW1hbmQsXG4gICAgICB1c2VyOiB0aGlzLmRldGVybWluZVVzZXIoKSxcbiAgICAgIGVudmlyb25tZW50OiB0aGlzLm9wdGlvbnMuZW52aXJvbm1lbnQsXG4gICAgICBlbnRyeXBvaW50OiB0aGlzLm9wdGlvbnMuZW50cnlwb2ludCxcbiAgICAgIHdvcmtpbmdEaXJlY3Rvcnk6XG4gICAgICAgIHRoaXMub3B0aW9ucy53b3JraW5nRGlyZWN0b3J5ID8/IEFzc2V0U3RhZ2luZy5CVU5ETElOR19JTlBVVF9ESVIsXG4gICAgICBzZWN1cml0eU9wdDogdGhpcy5vcHRpb25zLnNlY3VyaXR5T3B0ID8/IFwiXCIsXG4gICAgICB2b2x1bWVzRnJvbTogdGhpcy5vcHRpb25zLnZvbHVtZXNGcm9tLFxuICAgICAgdm9sdW1lczogW1xuICAgICAgICB7XG4gICAgICAgICAgaG9zdFBhdGg6IHRoaXMub3B0aW9ucy5zb3VyY2VQYXRoLFxuICAgICAgICAgIGNvbnRhaW5lclBhdGg6IEFzc2V0U3RhZ2luZy5CVU5ETElOR19JTlBVVF9ESVIsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBob3N0UGF0aDogdGhpcy5vcHRpb25zLmJ1bmRsZURpcixcbiAgICAgICAgICBjb250YWluZXJQYXRoOiBBc3NldFN0YWdpbmcuQlVORExJTkdfT1VUUFVUX0RJUixcbiAgICAgICAgfSxcbiAgICAgICAgLi4uKHRoaXMub3B0aW9ucy52b2x1bWVzID8/IFtdKSxcbiAgICAgIF0sXG4gICAgICBuZXR3b3JrOiB0aGlzLm9wdGlvbnMubmV0d29yayxcbiAgICB9KTtcbiAgfVxufVxuXG4vKipcbiAqIFByb3ZpZGVzIGEgaGVscGVyIGNvbnRhaW5lciBmb3IgY29weWluZyBidW5kbGluZyByZWxhdGVkIGZpbGVzIHRvIHNwZWNpZmljIGlucHV0IGFuZCBvdXRwdXQgdm9sdW1lc1xuICovXG5leHBvcnQgY2xhc3MgQXNzZXRCdW5kbGluZ1ZvbHVtZUNvcHkgZXh0ZW5kcyBBc3NldEJ1bmRsaW5nQmFzZSB7XG4gIC8qKlxuICAgKiBOYW1lIG9mIHRoZSBEb2NrZXIgdm9sdW1lIHRoYXQgaXMgdXNlZCBmb3IgdGhlIGFzc2V0IGlucHV0XG4gICAqL1xuICBwcml2YXRlIGlucHV0Vm9sdW1lTmFtZTogc3RyaW5nO1xuICAvKipcbiAgICogTmFtZSBvZiB0aGUgRG9ja2VyIHZvbHVtZSB0aGF0IGlzIHVzZWQgZm9yIHRoZSBhc3NldCBvdXRwdXRcbiAgICovXG4gIHByaXZhdGUgb3V0cHV0Vm9sdW1lTmFtZTogc3RyaW5nO1xuICAvKipcbiAgICogTmFtZSBvZiB0aGUgRG9ja2VyIGhlbHBlciBjb250YWluZXIgdG8gY29weSBmaWxlcyBpbnRvIHRoZSB2b2x1bWVcbiAgICovXG4gIHB1YmxpYyBjb3B5Q29udGFpbmVyTmFtZTogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnM6IEFzc2V0QnVuZGxpbmdPcHRpb25zKSB7XG4gICAgc3VwZXIob3B0aW9ucyk7XG4gICAgY29uc3QgY29weVN1ZmZpeCA9IGNyeXB0by5yYW5kb21CeXRlcygxMikudG9TdHJpbmcoXCJoZXhcIik7XG4gICAgdGhpcy5pbnB1dFZvbHVtZU5hbWUgPSBgYXNzZXRJbnB1dCR7Y29weVN1ZmZpeH1gO1xuICAgIHRoaXMub3V0cHV0Vm9sdW1lTmFtZSA9IGBhc3NldE91dHB1dCR7Y29weVN1ZmZpeH1gO1xuICAgIHRoaXMuY29weUNvbnRhaW5lck5hbWUgPSBgY29weUNvbnRhaW5lciR7Y29weVN1ZmZpeH1gO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgdm9sdW1lcyBmb3IgYXNzZXQgaW5wdXQgYW5kIG91dHB1dFxuICAgKi9cbiAgcHJpdmF0ZSBwcmVwYXJlVm9sdW1lcygpIHtcbiAgICBkb2NrZXJFeGVjKFtcInZvbHVtZVwiLCBcImNyZWF0ZVwiLCB0aGlzLmlucHV0Vm9sdW1lTmFtZV0pO1xuICAgIGRvY2tlckV4ZWMoW1widm9sdW1lXCIsIFwiY3JlYXRlXCIsIHRoaXMub3V0cHV0Vm9sdW1lTmFtZV0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZXMgdm9sdW1lcyBmb3IgYXNzZXQgaW5wdXQgYW5kIG91dHB1dFxuICAgKi9cbiAgcHJpdmF0ZSBjbGVhblZvbHVtZXMoKSB7XG4gICAgZG9ja2VyRXhlYyhbXCJ2b2x1bWVcIiwgXCJybVwiLCB0aGlzLmlucHV0Vm9sdW1lTmFtZV0pO1xuICAgIGRvY2tlckV4ZWMoW1widm9sdW1lXCIsIFwicm1cIiwgdGhpcy5vdXRwdXRWb2x1bWVOYW1lXSk7XG4gIH1cblxuICAvKipcbiAgICogcnVucyBhIGhlbHBlciBjb250YWluZXIgdGhhdCBob2xkcyB2b2x1bWVzIGFuZCBkb2VzIHNvbWUgcHJlcGFyYXRpb24gdGFza3NcbiAgICogQHBhcmFtIHVzZXIgVGhlIHVzZXIgdGhhdCB3aWxsIGxhdGVyIGFjY2VzcyB0aGVzZSBmaWxlcyBhbmQgbmVlZHMgcGVybWlzc2lvbnMgdG8gZG8gc29cbiAgICovXG4gIHByaXZhdGUgc3RhcnRIZWxwZXJDb250YWluZXIodXNlcjogc3RyaW5nKSB7XG4gICAgZG9ja2VyRXhlYyhbXG4gICAgICBcInJ1blwiLFxuICAgICAgXCItLW5hbWVcIixcbiAgICAgIHRoaXMuY29weUNvbnRhaW5lck5hbWUsXG4gICAgICBcIi12XCIsXG4gICAgICBgJHt0aGlzLmlucHV0Vm9sdW1lTmFtZX06JHtBc3NldFN0YWdpbmcuQlVORExJTkdfSU5QVVRfRElSfWAsXG4gICAgICBcIi12XCIsXG4gICAgICBgJHt0aGlzLm91dHB1dFZvbHVtZU5hbWV9OiR7QXNzZXRTdGFnaW5nLkJVTkRMSU5HX09VVFBVVF9ESVJ9YCxcbiAgICAgIFwicHVibGljLmVjci5hd3MvZG9ja2VyL2xpYnJhcnkvYWxwaW5lXCIsXG4gICAgICBcInNoXCIsXG4gICAgICBcIi1jXCIsXG4gICAgICBgbWtkaXIgLXAgJHtBc3NldFN0YWdpbmcuQlVORExJTkdfSU5QVVRfRElSfSAmJiBjaG93biAtUiAke3VzZXJ9ICR7QXNzZXRTdGFnaW5nLkJVTkRMSU5HX09VVFBVVF9ESVJ9ICYmIGNob3duIC1SICR7dXNlcn0gJHtBc3NldFN0YWdpbmcuQlVORExJTkdfSU5QVVRfRElSfWAsXG4gICAgXSk7XG4gIH1cblxuICAvKipcbiAgICogcmVtb3ZlcyB0aGUgRG9ja2VyIGhlbHBlciBjb250YWluZXJcbiAgICovXG4gIHByaXZhdGUgY2xlYW5IZWxwZXJDb250YWluZXIoKSB7XG4gICAgZG9ja2VyRXhlYyhbXCJybVwiLCB0aGlzLmNvcHlDb250YWluZXJOYW1lXSk7XG4gIH1cblxuICAvKipcbiAgICogY29weSBmaWxlcyBmcm9tIHRoZSBob3N0IHdoZXJlIHRoaXMgaXMgZXhlY3V0ZWQgaW50byB0aGUgaW5wdXQgdm9sdW1lXG4gICAqIEBwYXJhbSBzb3VyY2VQYXRoIC0gcGF0aCB0byBmb2xkZXIgd2hlcmUgZmlsZXMgc2hvdWxkIGJlIGNvcGllZCBmcm9tIC0gd2l0aG91dCB0cmFpbGluZyBzbGFzaFxuICAgKi9cbiAgcHJpdmF0ZSBjb3B5SW5wdXRGcm9tKHNvdXJjZVBhdGg6IHN0cmluZykge1xuICAgIGRvY2tlckV4ZWMoW1xuICAgICAgXCJjcFwiLFxuICAgICAgYCR7c291cmNlUGF0aH0vLmAsXG4gICAgICBgJHt0aGlzLmNvcHlDb250YWluZXJOYW1lfToke0Fzc2V0U3RhZ2luZy5CVU5ETElOR19JTlBVVF9ESVJ9YCxcbiAgICBdKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBjb3B5IGZpbGVzIGZyb20gdGhlIHRoZSBvdXRwdXQgdm9sdW1lIHRvIHRoZSBob3N0IHdoZXJlIHRoaXMgaXMgZXhlY3V0ZWRcbiAgICogQHBhcmFtIG91dHB1dFBhdGggLSBwYXRoIHRvIGZvbGRlciB3aGVyZSBmaWxlcyBzaG91bGQgYmUgY29waWVkIHRvIC0gd2l0aG91dCB0cmFpbGluZyBzbGFzaFxuICAgKi9cbiAgcHJpdmF0ZSBjb3B5T3V0cHV0VG8ob3V0cHV0UGF0aDogc3RyaW5nKSB7XG4gICAgZG9ja2VyRXhlYyhbXG4gICAgICBcImNwXCIsXG4gICAgICBgJHt0aGlzLmNvcHlDb250YWluZXJOYW1lfToke0Fzc2V0U3RhZ2luZy5CVU5ETElOR19PVVRQVVRfRElSfS8uYCxcbiAgICAgIG91dHB1dFBhdGgsXG4gICAgXSk7XG4gIH1cblxuICAvKipcbiAgICogQnVuZGxlIGZpbGVzIHdpdGggVk9MVU1FX0NPUFkgbWV0aG9kXG4gICAqL1xuICBwdWJsaWMgcnVuKCkge1xuICAgIGNvbnN0IHVzZXIgPSB0aGlzLmRldGVybWluZVVzZXIoKTtcbiAgICB0aGlzLnByZXBhcmVWb2x1bWVzKCk7XG4gICAgdGhpcy5zdGFydEhlbHBlckNvbnRhaW5lcih1c2VyKTsgLy8gVE9ETyBoYW5kbGUgdXNlciBwcm9wZXJseVxuICAgIHRoaXMuY29weUlucHV0RnJvbSh0aGlzLm9wdGlvbnMuc291cmNlUGF0aCk7XG5cbiAgICB0aGlzLm9wdGlvbnMuaW1hZ2UucnVuKHtcbiAgICAgIGNvbW1hbmQ6IHRoaXMub3B0aW9ucy5jb21tYW5kLFxuICAgICAgdXNlcjogdXNlcixcbiAgICAgIGVudmlyb25tZW50OiB0aGlzLm9wdGlvbnMuZW52aXJvbm1lbnQsXG4gICAgICBlbnRyeXBvaW50OiB0aGlzLm9wdGlvbnMuZW50cnlwb2ludCxcbiAgICAgIHdvcmtpbmdEaXJlY3Rvcnk6XG4gICAgICAgIHRoaXMub3B0aW9ucy53b3JraW5nRGlyZWN0b3J5ID8/IEFzc2V0U3RhZ2luZy5CVU5ETElOR19JTlBVVF9ESVIsXG4gICAgICBzZWN1cml0eU9wdDogdGhpcy5vcHRpb25zLnNlY3VyaXR5T3B0ID8/IFwiXCIsXG4gICAgICB2b2x1bWVzOiB0aGlzLm9wdGlvbnMudm9sdW1lcyxcbiAgICAgIHZvbHVtZXNGcm9tOiBbXG4gICAgICAgIHRoaXMuY29weUNvbnRhaW5lck5hbWUsXG4gICAgICAgIC4uLih0aGlzLm9wdGlvbnMudm9sdW1lc0Zyb20gPz8gW10pLFxuICAgICAgXSxcbiAgICB9KTtcblxuICAgIHRoaXMuY29weU91dHB1dFRvKHRoaXMub3B0aW9ucy5idW5kbGVEaXIpO1xuICAgIHRoaXMuY2xlYW5IZWxwZXJDb250YWluZXIoKTtcbiAgICB0aGlzLmNsZWFuVm9sdW1lcygpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkb2NrZXJFeGVjKGFyZ3M6IHN0cmluZ1tdLCBvcHRpb25zPzogU3Bhd25TeW5jT3B0aW9ucykge1xuICBjb25zdCBwcm9nID0gcHJvY2Vzcy5lbnYuQ0RLX0RPQ0tFUiA/PyBcImRvY2tlclwiO1xuICBjb25zdCBwcm9jID0gc3Bhd25TeW5jKFxuICAgIHByb2csXG4gICAgYXJncyxcbiAgICBvcHRpb25zID8/IHtcbiAgICAgIGVuY29kaW5nOiBcInV0Zi04XCIsXG4gICAgICBzdGRpbzogW1xuICAgICAgICAvLyBzaG93IERvY2tlciBvdXRwdXRcbiAgICAgICAgXCJpZ25vcmVcIiwgLy8gaWdub3JlIHN0ZGlvXG4gICAgICAgIC8vIEFXU0NESzogcHJvY2Vzcy5zdGRlcnIsIC8vIHJlZGlyZWN0IHN0ZG91dCB0byBzdGRlcnIgKGNhdXNlcyByYWRpeCBlcnJvciBpbiBidW4/KVxuICAgICAgICBcImluaGVyaXRcIixcbiAgICAgICAgXCJpbmhlcml0XCIsIC8vIGluaGVyaXQgc3RkZXJyXG4gICAgICBdLFxuICAgIH0sXG4gICk7XG5cbiAgaWYgKHByb2MuZXJyb3IpIHtcbiAgICB0aHJvdyBwcm9jLmVycm9yO1xuICB9XG5cbiAgaWYgKHByb2Muc3RhdHVzICE9PSAwKSB7XG4gICAgY29uc3QgcmVhc29uID1cbiAgICAgIHByb2Muc2lnbmFsICE9IG51bGwgPyBgc2lnbmFsICR7cHJvYy5zaWduYWx9YCA6IGBzdGF0dXMgJHtwcm9jLnN0YXR1c31gO1xuICAgIGNvbnN0IGNvbW1hbmQgPSBbXG4gICAgICBwcm9nLFxuICAgICAgLi4uYXJncy5tYXAoKGFyZykgPT5cbiAgICAgICAgL1teYS16MC05Xy1dL2kudGVzdChhcmcpID8gSlNPTi5zdHJpbmdpZnkoYXJnKSA6IGFyZyxcbiAgICAgICksXG4gICAgXS5qb2luKFwiIFwiKTtcblxuICAgIGZ1bmN0aW9uIHByZXBlbmRMaW5lcyhcbiAgICAgIGZpcnN0TGluZTogc3RyaW5nLFxuICAgICAgdGV4dDogQnVmZmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkLFxuICAgICk6IHN0cmluZ1tdIHtcbiAgICAgIGlmICghdGV4dCB8fCB0ZXh0Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gW107XG4gICAgICB9XG4gICAgICBjb25zdCBwYWRkaW5nID0gXCIgXCIucmVwZWF0KGZpcnN0TGluZS5sZW5ndGgpO1xuICAgICAgcmV0dXJuIHRleHRcbiAgICAgICAgLnRvU3RyaW5nKFwidXRmLThcIilcbiAgICAgICAgLnNwbGl0KFwiXFxuXCIpXG4gICAgICAgIC5tYXAoKGxpbmUsIGlkeCkgPT4gYCR7aWR4ID09PSAwID8gZmlyc3RMaW5lIDogcGFkZGluZ30ke2xpbmV9YCk7XG4gICAgfVxuXG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgW1xuICAgICAgICBgJHtwcm9nfSBleGl0ZWQgd2l0aCAke3JlYXNvbn1gLFxuICAgICAgICAuLi4ocHJlcGVuZExpbmVzKFwiLS0+IFNURE9VVDogIFwiLCBwcm9jLnN0ZG91dCkgPz8gW10pLFxuICAgICAgICAuLi4ocHJlcGVuZExpbmVzKFwiLS0+IFNUREVSUjogIFwiLCBwcm9jLnN0ZGVycikgPz8gW10pLFxuICAgICAgICBgLS0+IENvbW1hbmQ6ICR7Y29tbWFuZH1gLFxuICAgICAgXS5qb2luKFwiXFxuXCIpLFxuICAgICk7XG4gIH1cblxuICByZXR1cm4gcHJvYztcbn1cbiJdfQ==
206
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzZXQtc3RhZ2luZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wcml2YXRlL2Fzc2V0LXN0YWdpbmcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLHNHQUFzRzs7O0FBMk10RyxnQ0F3REM7QUFqUUQsaURBQTREO0FBQzVELGlDQUFpQztBQUNqQyx5QkFBeUI7QUFDekIsbURBQW1EO0FBQ25ELG9EQUFnRDtBQUVoRCxzQ0FBMkM7QUFnQjNDLE1BQWUsaUJBQWlCO0lBRTlCLFlBQVksT0FBNkI7UUFDdkMsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7SUFDekIsQ0FBQztJQUNEOztPQUVHO0lBQ08sYUFBYTtRQUNyQixJQUFJLElBQVksQ0FBQztRQUNqQixJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDdEIsSUFBSSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDO1FBQzNCLENBQUM7YUFBTSxDQUFDO1lBQ04sMEJBQTBCO1lBQzFCLE1BQU0sUUFBUSxHQUFHLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUMvQixJQUFJO2dCQUNGLFFBQVEsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsdUJBQXVCO29CQUN6QyxDQUFDLENBQUMsR0FBRyxRQUFRLENBQUMsR0FBRyxJQUFJLFFBQVEsQ0FBQyxHQUFHLEVBQUU7b0JBQ25DLENBQUMsQ0FBQyxXQUFXLENBQUM7UUFDcEIsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztDQUNGO0FBRUQ7O0dBRUc7QUFDSCxNQUFhLHNCQUF1QixTQUFRLGlCQUFpQjtJQUMzRDs7T0FFRztJQUNJLEdBQUc7UUFDUixJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUM7WUFDckIsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTztZQUM3QixJQUFJLEVBQUUsSUFBSSxDQUFDLGFB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LENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUNyRDtTQUNGLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRVosU0FBUyxZQUFZLENBQ25CLFNBQWlCLEVBQ2pCLElBQWlDO1lBRWpDLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztnQkFDL0IsT0FBTyxFQUFFLENBQUM7WUFDWixDQUFDO1lBQ0QsTUFBTSxPQUFPLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDN0MsT0FBTyxJQUFJO2lCQUNSLFFBQVEsQ0FBQyxPQUFPLENBQUM7aUJBQ2pCLEtBQUssQ0FBQyxJQUFJLENBQUM7aUJBQ1gsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLE9BQU8sR0FBRyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ3JFLENBQUM7UUFFRCxNQUFNLElBQUksdUJBQWMsQ0FDdEI7WUFDRSxHQUFHLElBQUksZ0JBQWdCLE1BQU0sRUFBRTtZQUMvQixHQUFHLENBQUMsWUFBWSxDQUFDLGVBQWUsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ3JELEdBQUcsQ0FBQyxZQUFZLENBQUMsZUFBZSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDckQsZ0JBQWdCLE9BQU8sRUFBRTtTQUMxQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FDYixDQUFDO0lBQ0osQ0FBQztJQUVELE9BQU8sSUFBSSxDQUFDO0FBQ2QsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9hd3MvYXdzLWNkay9ibG9iL3YyLjE4Ni4wL3BhY2thZ2VzL2F3cy1jZGstbGliL2NvcmUvbGliL3ByaXZhdGUvYXNzZXQtc3RhZ2luZy50c1xuXG5pbXBvcnQgeyBzcGF3blN5bmMsIFNwYXduU3luY09wdGlvbnMgfSBmcm9tIFwiY2hpbGRfcHJvY2Vzc1wiO1xuaW1wb3J0ICogYXMgY3J5cHRvIGZyb20gXCJjcnlwdG9cIjtcbmltcG9ydCAqIGFzIG9zIGZyb20gXCJvc1wiO1xuLy8gaW1wb3J0IHsgQXNzZXRTdGFnaW5nIH0gZnJvbSBcIi4uL2Fzc2V0LXN0YWdpbmdcIjtcbmltcG9ydCB7IEFzc2V0U3RhZ2luZyB9IGZyb20gXCIuLi9hc3NldC1zdGFnaW5nXCI7XG5pbXBvcnQgeyBCdW5kbGluZ09wdGlvbnMgfSBmcm9tIFwiLi4vYnVuZGxpbmdcIjtcbmltcG9ydCB7IEV4ZWN1dGlvbkVycm9yIH0gZnJvbSBcIi4uL2Vycm9yc1wiO1xuXG4vKipcbiAqIE9wdGlvbnMgZm9yIERvY2tlciBiYXNlZCBidW5kbGluZyBvZiBhc3NldHNcbiAqL1xuaW50ZXJmYWNlIEFzc2V0QnVuZGxpbmdPcHRpb25zIGV4dGVuZHMgQnVuZGxpbmdPcHRpb25zIHtcbiAgLyoqXG4gICAqIFBhdGggd2hlcmUgdGhlIHNvdXJjZSBmaWxlcyBhcmUgbG9jYXRlZFxuICAgKi9cbiAgcmVhZG9ubHkgc291cmNlUGF0aDogc3RyaW5nO1xuICAvKipcbiAgICogUGF0aCB3aGVyZSB0aGUgb3V0cHV0IGZpbGVzIHNob3VsZCBiZSBzdG9yZWRcbiAgICovXG4gIHJlYWRvbmx5IGJ1bmRsZURpcjogc3RyaW5nO1xufVxuXG5hYnN0cmFjdCBjbGFzcyBBc3NldEJ1bmRsaW5nQmFzZSB7XG4gIHByb3RlY3RlZCBvcHRpb25zOiBBc3NldEJ1bmRsaW5nT3B0aW9ucztcbiAgY29uc3RydWN0b3Iob3B0aW9uczogQXNzZXRCdW5kbGluZ09wdGlvbnMpIHtcbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuICB9XG4gIC8qKlxuICAgKiBEZXRlcm1pbmVzIGEgdXNlZnVsIGRlZmF1bHQgdXNlciBpZiBub3QgZ2l2ZW4gb3RoZXJ3aXNlXG4gICAqL1xuICBwcm90ZWN0ZWQgZGV0ZXJtaW5lVXNlcigpIHtcbiAgICBsZXQgdXNlcjogc3RyaW5nO1xuICAgIGlmICh0aGlzLm9wdGlvbnMudXNlcikge1xuICAgICAgdXNlciA9IHRoaXMub3B0aW9ucy51c2VyO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBEZWZhdWx0IHRvIGN1cnJlbnQgdXNlclxuICAgICAgY29uc3QgdXNlckluZm8gPSBvcy51c2VySW5mbygpO1xuICAgICAgdXNlciA9XG4gICAgICAgIHVzZXJJbmZvLnVpZCAhPT0gLTEgLy8gdWlkIGlzIC0xIG9uIFdpbmRvd3NcbiAgICAgICAgICA/IGAke3VzZXJJbmZvLnVpZH06JHt1c2VySW5mby5naWR9YFxuICAgICAgICAgIDogXCIxMDAwOjEwMDBcIjtcbiAgICB9XG4gICAgcmV0dXJuIHVzZXI7XG4gIH1cbn1cblxuLyoqXG4gKiBCdW5kbGVzIGZpbGVzIHdpdGggYmluZCBtb3VudCBhcyBjb3B5IG1ldGhvZFxuICovXG5leHBvcnQgY2xhc3MgQXNzZXRCdW5kbGluZ0JpbmRNb3VudCBleHRlbmRzIEFzc2V0QnVuZGxpbmdCYXNlIHtcbiAgLyoqXG4gICAqIEJ1bmRsZSBmaWxlcyB3aXRoIGJpbmQgbW91bnQgYXMgY29weSBtZXRob2RcbiAgICovXG4gIHB1YmxpYyBydW4oKSB7XG4gICAgdGhpcy5vcHRpb25zLmltYWdlLnJ1bih7XG4gICAgICBjb21tYW5kOiB0aGlzLm9wdGlvbnMuY29tbWFuZCxcbiAgICAgIHVzZXI6IHRoaXMuZGV0ZXJtaW5lVXNlcigpLFxuICAgICAgZW52aXJvbm1lbnQ6IHRoaXMub3B0aW9ucy5lbnZpcm9ubWVudCxcbiAgICAgIGVudHJ5cG9pbnQ6IHRoaXMub3B0aW9ucy5lbnRyeXBvaW50LFxuICAgICAgd29ya2luZ0RpcmVjdG9yeTpcbiAgICAgICAgdGhpcy5vcHRpb25zLndvcmtpbmdEaXJlY3RvcnkgPz8gQXNzZXRTdGFnaW5nLkJVTkRMSU5HX0lOUFVUX0RJUixcbiAgICAgIHNlY3VyaXR5T3B0OiB0aGlzLm9wdGlvbnMuc2VjdXJpdHlPcHQgPz8gXCJcIixcbiAgICAgIHZvbHVtZXNGcm9tOiB0aGlzLm9wdGlvbnMudm9sdW1lc0Zyb20sXG4gICAgICB2b2x1bWVzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBob3N0UGF0aDogdGhpcy5vcHRpb25zLnNvdXJjZVBhdGgsXG4gICAgICAgICAgY29udGFpbmVyUGF0aDogQXNzZXRTdGFnaW5nLkJVTkRMSU5HX0lOUFVUX0RJUixcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGhvc3RQYXRoOiB0aGlzLm9wdGlvbnMuYnVuZGxlRGlyLFxuICAgICAgICAgIGNvbnRhaW5lclBhdGg6IEFzc2V0U3RhZ2luZy5CVU5ETElOR19PVVRQVVRfRElSLFxuICAgICAgICB9LFxuICAgICAgICAuLi4odGhpcy5vcHRpb25zLnZvbHVtZXMgPz8gW10pLFxuICAgICAgXSxcbiAgICAgIG5ldHdvcms6IHRoaXMub3B0aW9ucy5uZXR3b3JrLFxuICAgIH0pO1xuICB9XG59XG5cbi8qKlxuICogUHJvdmlkZXMgYSBoZWxwZXIgY29udGFpbmVyIGZvciBjb3B5aW5nIGJ1bmRsaW5nIHJlbGF0ZWQgZmlsZXMgdG8gc3BlY2lmaWMgaW5wdXQgYW5kIG91dHB1dCB2b2x1bWVzXG4gKi9cbmV4cG9ydCBjbGFzcyBBc3NldEJ1bmRsaW5nVm9sdW1lQ29weSBleHRlbmRzIEFzc2V0QnVuZGxpbmdCYXNlIHtcbiAgLyoqXG4gICAqIE5hbWUgb2YgdGhlIERvY2tlciB2b2x1bWUgdGhhdCBpcyB1c2VkIGZvciB0aGUgYXNzZXQgaW5wdXRcbiAgICovXG4gIHByaXZhdGUgaW5wdXRWb2x1bWVOYW1lOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBOYW1lIG9mIHRoZSBEb2NrZXIgdm9sdW1lIHRoYXQgaXMgdXNlZCBmb3IgdGhlIGFzc2V0IG91dHB1dFxuICAgKi9cbiAgcHJpdmF0ZSBvdXRwdXRWb2x1bWVOYW1lOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBOYW1lIG9mIHRoZSBEb2NrZXIgaGVscGVyIGNvbnRhaW5lciB0byBjb3B5IGZpbGVzIGludG8gdGhlIHZvbHVtZVxuICAgKi9cbiAgcHVibGljIGNvcHlDb250YWluZXJOYW1lOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3Iob3B0aW9uczogQXNzZXRCdW5kbGluZ09wdGlvbnMpIHtcbiAgICBzdXBlcihvcHRpb25zKTtcbiAgICBjb25zdCBjb3B5U3VmZml4ID0gY3J5cHRvLnJhbmRvbUJ5dGVzKDEyKS50b1N0cmluZyhcImhleFwiKTtcbiAgICB0aGlzLmlucHV0Vm9sdW1lTmFtZSA9IGBhc3NldElucHV0JHtjb3B5U3VmZml4fWA7XG4gICAgdGhpcy5vdXRwdXRWb2x1bWVOYW1lID0gYGFzc2V0T3V0cHV0JHtjb3B5U3VmZml4fWA7XG4gICAgdGhpcy5jb3B5Q29udGFpbmVyTmFtZSA9IGBjb3B5Q29udGFpbmVyJHtjb3B5U3VmZml4fWA7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyB2b2x1bWVzIGZvciBhc3NldCBpbnB1dCBhbmQgb3V0cHV0XG4gICAqL1xuICBwcml2YXRlIHByZXBhcmVWb2x1bWVzKCkge1xuICAgIGRvY2tlckV4ZWMoW1widm9sdW1lXCIsIFwiY3JlYXRlXCIsIHRoaXMuaW5wdXRWb2x1bWVOYW1lXSk7XG4gICAgZG9ja2VyRXhlYyhbXCJ2b2x1bWVcIiwgXCJjcmVhdGVcIiwgdGhpcy5vdXRwdXRWb2x1bWVOYW1lXSk7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlcyB2b2x1bWVzIGZvciBhc3NldCBpbnB1dCBhbmQgb3V0cHV0XG4gICAqL1xuICBwcml2YXRlIGNsZWFuVm9sdW1lcygpIHtcbiAgICBkb2NrZXJFeGVjKFtcInZvbHVtZVwiLCBcInJtXCIsIHRoaXMuaW5wdXRWb2x1bWVOYW1lXSk7XG4gICAgZG9ja2VyRXhlYyhbXCJ2b2x1bWVcIiwgXCJybVwiLCB0aGlzLm91dHB1dFZvbHVtZU5hbWVdKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBydW5zIGEgaGVscGVyIGNvbnRhaW5lciB0aGF0IGhvbGRzIHZvbHVtZXMgYW5kIGRvZXMgc29tZSBwcmVwYXJhdGlvbiB0YXNrc1xuICAgKiBAcGFyYW0gdXNlciBUaGUgdXNlciB0aGF0IHdpbGwgbGF0ZXIgYWNjZXNzIHRoZXNlIGZpbGVzIGFuZCBuZWVkcyBwZXJtaXNzaW9ucyB0byBkbyBzb1xuICAgKi9cbiAgcHJpdmF0ZSBzdGFydEhlbHBlckNvbnRhaW5lcih1c2VyOiBzdHJpbmcpIHtcbiAgICBkb2NrZXJFeGVjKFtcbiAgICAgIFwicnVuXCIsXG4gICAgICBcIi0tbmFtZVwiLFxuICAgICAgdGhpcy5jb3B5Q29udGFpbmVyTmFtZSxcbiAgICAgIFwiLXZcIixcbiAgICAgIGAke3RoaXMuaW5wdXRWb2x1bWVOYW1lfToke0Fzc2V0U3RhZ2luZy5CVU5ETElOR19JTlBVVF9ESVJ9YCxcbiAgICAgIFwiLXZcIixcbiAgICAgIGAke3RoaXMub3V0cHV0Vm9sdW1lTmFtZX06JHtBc3NldFN0YWdpbmcuQlVORExJTkdfT1VUUFVUX0RJUn1gLFxuICAgICAgXCJwdWJsaWMuZWNyLmF3cy9kb2NrZXIvbGlicmFyeS9hbHBpbmVcIixcbiAgICAgIFwic2hcIixcbiAgICAgIFwiLWNcIixcbiAgICAgIGBta2RpciAtcCAke0Fzc2V0U3RhZ2luZy5CVU5ETElOR19JTlBVVF9ESVJ9ICYmIGNob3duIC1SICR7dXNlcn0gJHtBc3NldFN0YWdpbmcuQlVORExJTkdfT1VUUFVUX0RJUn0gJiYgY2hvd24gLVIgJHt1c2VyfSAke0Fzc2V0U3RhZ2luZy5CVU5ETElOR19JTlBVVF9ESVJ9YCxcbiAgICBdKTtcbiAgfVxuXG4gIC8qKlxuICAgKiByZW1vdmVzIHRoZSBEb2NrZXIgaGVscGVyIGNvbnRhaW5lclxuICAgKi9cbiAgcHJpdmF0ZSBjbGVhbkhlbHBlckNvbnRhaW5lcigpIHtcbiAgICBkb2NrZXJFeGVjKFtcInJtXCIsIHRoaXMuY29weUNvbnRhaW5lck5hbWVdKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBjb3B5IGZpbGVzIGZyb20gdGhlIGhvc3Qgd2hlcmUgdGhpcyBpcyBleGVjdXRlZCBpbnRvIHRoZSBpbnB1dCB2b2x1bWVcbiAgICogQHBhcmFtIHNvdXJjZVBhdGggLSBwYXRoIHRvIGZvbGRlciB3aGVyZSBmaWxlcyBzaG91bGQgYmUgY29waWVkIGZyb20gLSB3aXRob3V0IHRyYWlsaW5nIHNsYXNoXG4gICAqL1xuICBwcml2YXRlIGNvcHlJbnB1dEZyb20oc291cmNlUGF0aDogc3RyaW5nKSB7XG4gICAgZG9ja2VyRXhlYyhbXG4gICAgICBcImNwXCIsXG4gICAgICBgJHtzb3VyY2VQYXRofS8uYCxcbiAgICAgIGAke3RoaXMuY29weUNvbnRhaW5lck5hbWV9OiR7QXNzZXRTdGFnaW5nLkJVTkRMSU5HX0lOUFVUX0RJUn1gLFxuICAgIF0pO1xuICB9XG5cbiAgLyoqXG4gICAqIGNvcHkgZmlsZXMgZnJvbSB0aGUgdGhlIG91dHB1dCB2b2x1bWUgdG8gdGhlIGhvc3Qgd2hlcmUgdGhpcyBpcyBleGVjdXRlZFxuICAgKiBAcGFyYW0gb3V0cHV0UGF0aCAtIHBhdGggdG8gZm9sZGVyIHdoZXJlIGZpbGVzIHNob3VsZCBiZSBjb3BpZWQgdG8gLSB3aXRob3V0IHRyYWlsaW5nIHNsYXNoXG4gICAqL1xuICBwcml2YXRlIGNvcHlPdXRwdXRUbyhvdXRwdXRQYXRoOiBzdHJpbmcpIHtcbiAgICBkb2NrZXJFeGVjKFtcbiAgICAgIFwiY3BcIixcbiAgICAgIGAke3RoaXMuY29weUNvbnRhaW5lck5hbWV9OiR7QXNzZXRTdGFnaW5nLkJVTkRMSU5HX09VVFBVVF9ESVJ9Ly5gLFxuICAgICAgb3V0cHV0UGF0aCxcbiAgICBdKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCdW5kbGUgZmlsZXMgd2l0aCBWT0xVTUVfQ09QWSBtZXRob2RcbiAgICovXG4gIHB1YmxpYyBydW4oKSB7XG4gICAgY29uc3QgdXNlciA9IHRoaXMuZGV0ZXJtaW5lVXNlcigpO1xuICAgIHRoaXMucHJlcGFyZVZvbHVtZXMoKTtcbiAgICB0aGlzLnN0YXJ0SGVscGVyQ29udGFpbmVyKHVzZXIpOyAvLyBUT0RPIGhhbmRsZSB1c2VyIHByb3Blcmx5XG4gICAgdGhpcy5jb3B5SW5wdXRGcm9tKHRoaXMub3B0aW9ucy5zb3VyY2VQYXRoKTtcblxuICAgIHRoaXMub3B0aW9ucy5pbWFnZS5ydW4oe1xuICAgICAgY29tbWFuZDogdGhpcy5vcHRpb25zLmNvbW1hbmQsXG4gICAgICB1c2VyOiB1c2VyLFxuICAgICAgZW52aXJvbm1lbnQ6IHRoaXMub3B0aW9ucy5lbnZpcm9ubWVudCxcbiAgICAgIGVudHJ5cG9pbnQ6IHRoaXMub3B0aW9ucy5lbnRyeXBvaW50LFxuICAgICAgd29ya2luZ0RpcmVjdG9yeTpcbiAgICAgICAgdGhpcy5vcHRpb25zLndvcmtpbmdEaXJlY3RvcnkgPz8gQXNzZXRTdGFnaW5nLkJVTkRMSU5HX0lOUFVUX0RJUixcbiAgICAgIHNlY3VyaXR5T3B0OiB0aGlzLm9wdGlvbnMuc2VjdXJpdHlPcHQgPz8gXCJcIixcbiAgICAgIHZvbHVtZXM6IHRoaXMub3B0aW9ucy52b2x1bWVzLFxuICAgICAgdm9sdW1lc0Zyb206IFtcbiAgICAgICAgdGhpcy5jb3B5Q29udGFpbmVyTmFtZSxcbiAgICAgICAgLi4uKHRoaXMub3B0aW9ucy52b2x1bWVzRnJvbSA/PyBbXSksXG4gICAgICBdLFxuICAgIH0pO1xuXG4gICAgdGhpcy5jb3B5T3V0cHV0VG8odGhpcy5vcHRpb25zLmJ1bmRsZURpcik7XG4gICAgdGhpcy5jbGVhbkhlbHBlckNvbnRhaW5lcigpO1xuICAgIHRoaXMuY2xlYW5Wb2x1bWVzKCk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRvY2tlckV4ZWMoYXJnczogc3RyaW5nW10sIG9wdGlvbnM/OiBTcGF3blN5bmNPcHRpb25zKSB7XG4gIGNvbnN0IHByb2cgPSBwcm9jZXNzLmVudi5DREtfRE9DS0VSID8/IFwiZG9ja2VyXCI7XG4gIGNvbnN0IHByb2MgPSBzcGF3blN5bmMoXG4gICAgcHJvZyxcbiAgICBhcmdzLFxuICAgIG9wdGlvbnMgPz8ge1xuICAgICAgZW5jb2Rpbmc6IFwidXRmLThcIixcbiAgICAgIHN0ZGlvOiBbXG4gICAgICAgIC8vIHNob3cgRG9ja2VyIG91dHB1dFxuICAgICAgICBcImlnbm9yZVwiLCAvLyBpZ25vcmUgc3RkaW9cbiAgICAgICAgLy8gQVdTQ0RLOiBwcm9jZXNzLnN0ZGVyciwgLy8gcmVkaXJlY3Qgc3Rkb3V0IHRvIHN0ZGVyciAoY2F1c2VzIHJhZGl4IGVycm9yIGluIGJ1bj8pXG4gICAgICAgIFwiaW5oZXJpdFwiLFxuICAgICAgICBcImluaGVyaXRcIiwgLy8gaW5oZXJpdCBzdGRlcnJcbiAgICAgIF0sXG4gICAgfSxcbiAgKTtcblxuICBpZiAocHJvYy5lcnJvcikge1xuICAgIHRocm93IHByb2MuZXJyb3I7XG4gIH1cblxuICBpZiAocHJvYy5zdGF0dXMgIT09IDApIHtcbiAgICBjb25zdCByZWFzb24gPVxuICAgICAgcHJvYy5zaWduYWwgIT0gbnVsbCA/IGBzaWduYWwgJHtwcm9jLnNpZ25hbH1gIDogYHN0YXR1cyAke3Byb2Muc3RhdHVzfWA7XG4gICAgY29uc3QgY29tbWFuZCA9IFtcbiAgICAgIHByb2csXG4gICAgICAuLi5hcmdzLm1hcCgoYXJnKSA9PlxuICAgICAgICAvW15hLXowLTlfLV0vaS50ZXN0KGFyZykgPyBKU09OLnN0cmluZ2lmeShhcmcpIDogYXJnLFxuICAgICAgKSxcbiAgICBdLmpvaW4oXCIgXCIpO1xuXG4gICAgZnVuY3Rpb24gcHJlcGVuZExpbmVzKFxuICAgICAgZmlyc3RMaW5lOiBzdHJpbmcsXG4gICAgICB0ZXh0OiBCdWZmZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQsXG4gICAgKTogc3RyaW5nW10ge1xuICAgICAgaWYgKCF0ZXh0IHx8IHRleHQubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHBhZGRpbmcgPSBcIiBcIi5yZXBlYXQoZmlyc3RMaW5lLmxlbmd0aCk7XG4gICAgICByZXR1cm4gdGV4dFxuICAgICAgICAudG9TdHJpbmcoXCJ1dGYtOFwiKVxuICAgICAgICAuc3BsaXQoXCJcXG5cIilcbiAgICAgICAgLm1hcCgobGluZSwgaWR4KSA9PiBgJHtpZHggPT09IDAgPyBmaXJzdExpbmUgOiBwYWRkaW5nfSR7bGluZX1gKTtcbiAgICB9XG5cbiAgICB0aHJvdyBuZXcgRXhlY3V0aW9uRXJyb3IoXG4gICAgICBbXG4gICAgICAgIGAke3Byb2d9IGV4aXRlZCB3aXRoICR7cmVhc29ufWAsXG4gICAgICAgIC4uLihwcmVwZW5kTGluZXMoXCItLT4gU1RET1VUOiAgXCIsIHByb2Muc3Rkb3V0KSA/PyBbXSksXG4gICAgICAgIC4uLihwcmVwZW5kTGluZXMoXCItLT4gU1RERVJSOiAgXCIsIHByb2Muc3RkZXJyKSA/PyBbXSksXG4gICAgICAgIGAtLT4gQ29tbWFuZDogJHtjb21tYW5kfWAsXG4gICAgICBdLmpvaW4oXCJcXG5cIiksXG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiBwcm9jO1xufVxuIl19
package/lib/size.js CHANGED
@@ -164,7 +164,7 @@ class Size {
164
164
  }
165
165
  exports.Size = Size;
166
166
  _a = JSII_RTTI_SYMBOL_1;
167
- Size[_a] = { fqn: "terraconstructs.Size", version: "0.1.8" };
167
+ Size[_a] = { fqn: "terraconstructs.Size", version: "0.1.10" };
168
168
  /**
169
169
  * Rounding behaviour when converting between units of `Size`.
170
170
  */
@@ -56,12 +56,16 @@ export interface StackBaseProps {
56
56
  * is decoupled from resource tagging for consistency.
57
57
  *
58
58
  * UUID may be user provided for imported resources
59
+ *
60
+ * @default - Automatically generated
59
61
  */
60
- readonly gridUUID: string;
62
+ readonly gridUUID?: string;
61
63
  /**
62
64
  * The environment name passed in from the CLI
65
+ *
66
+ * @default - Default
63
67
  */
64
- readonly environmentName: string;
68
+ readonly environmentName?: string;
65
69
  /**
66
70
  * Stores the state using a simple REST client.
67
71
  *
@@ -126,18 +130,20 @@ export declare abstract class StackBase extends TerraformStack implements IStack
126
130
  /**
127
131
  * Stack unique grid identifier
128
132
  */
129
- readonly gridUUID: string;
133
+ private readonly _gridUUID;
130
134
  /**
131
135
  * Environment Name passed in from the CLI
132
136
  */
133
- readonly environmentName: string;
137
+ private readonly _environmentName;
134
138
  /**
135
139
  * The grid provided backend for state storage
136
140
  */
137
141
  readonly gridBackend?: HttpBackend;
138
142
  private archiveProviderSingleton?;
139
143
  get archiveProvider(): archiveProvider.ArchiveProvider;
140
- constructor(scope: Construct, id: string, props: StackBaseProps);
144
+ constructor(scope?: Construct, id?: string, props?: StackBaseProps);
145
+ get gridUUID(): string;
146
+ get environmentName(): string;
141
147
  /**
142
148
  * Returns a Terraform-compatible unique identifier for a Terraform Element based
143
149
  * on its path. This function finds the stackName of the parent stack (non-nested)
@@ -176,4 +182,14 @@ export declare abstract class StackBase extends TerraformStack implements IStack
176
182
  * Convert an object, potentially containing tokens, to a JSON string
177
183
  */
178
184
  toJsonString(obj: any, space?: number): string;
185
+ /**
186
+ * Generate an ID with respect to the given container construct.
187
+ */
188
+ private generateGridUuid;
179
189
  }
190
+ /**
191
+ * Return the construct root path of the given construct relative to the given ancestor
192
+ *
193
+ * If no ancestor is given or the ancestor is not found, return the entire root path.
194
+ */
195
+ export declare function rootPathTo(construct: IConstruct, ancestor?: IConstruct): IConstruct[];
package/lib/stack-base.js CHANGED
@@ -2,13 +2,16 @@
2
2
  var _a;
3
3
  Object.defineProperty(exports, "__esModule", { value: true });
4
4
  exports.StackBase = void 0;
5
+ exports.rootPathTo = rootPathTo;
5
6
  const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
6
7
  const provider_archive_1 = require("@cdktf/provider-archive");
7
8
  const cdktf_1 = require("cdktf");
8
9
  const constructs_1 = require("constructs");
10
+ const errors_1 = require("./errors");
9
11
  const private_1 = require("./private");
10
12
  const TOKEN_RESOLVER = new cdktf_1.DefaultTokenResolver(new cdktf_1.StringConcat());
11
13
  const TERRASTACK_SYMBOL = Symbol.for("terraconstructs/lib.Stack");
14
+ const VALID_GRID_UUID_REGEX = /^[A-Za-z0-9-]*$/;
12
15
  /**
13
16
  * Base class for all TerraConstructs stacks
14
17
  *
@@ -66,14 +69,25 @@ class StackBase extends cdktf_1.TerraformStack {
66
69
  }
67
70
  return this.archiveProviderSingleton;
68
71
  }
69
- constructor(scope, id, props) {
72
+ constructor(scope, id, props = {}) {
73
+ // For unit test scope and id are optional for stacks, but we still want an App
74
+ // as the parent because apps implement much of the synthesis logic.
75
+ scope = scope ?? new cdktf_1.App();
76
+ // "Default" is a "hidden id" from a `node.uniqueId` perspective
77
+ id = id ?? "Default";
70
78
  super(scope, id);
71
- this.gridUUID = props.gridUUID;
72
- this.environmentName = props.environmentName;
79
+ this._environmentName = props.environmentName ?? "Default";
80
+ this._gridUUID = props.gridUUID ?? this.generateGridUuid(this, "g");
81
+ if (this.gridUUID.length > 36) {
82
+ throw new errors_1.ValidationError(`GridUUID must be <= 36 characters. GridUUID: '${this.gridUUID}'`, this);
83
+ }
73
84
  Object.defineProperty(this, TERRASTACK_SYMBOL, { value: true });
74
85
  if (props.gridBackendConfig) {
75
86
  this.gridBackend = new cdktf_1.HttpBackend(this, props.gridBackendConfig);
76
87
  }
88
+ if (!VALID_GRID_UUID_REGEX.test(this.gridUUID)) {
89
+ throw new errors_1.ValidationError(`GridUUID must match the regular expression: ${VALID_GRID_UUID_REGEX.toString()}, got '${this.gridUUID}'`, this);
90
+ }
77
91
  // Map construct tree dependencies to ITerraformDependables
78
92
  // ref: https://github.com/hashicorp/terraform-cdk/issues/2727#issuecomment-1473321075
79
93
  cdktf_1.Aspects.of(this).add(new private_1.TerraformDependencyAspect());
@@ -81,6 +95,12 @@ class StackBase extends cdktf_1.TerraformStack {
81
95
  // this should ensure any resources added during `prepareStack()` are included in the dependency tree
82
96
  // ref: https://github.com/hashicorp/terraform-cdk/blob/v0.20.9/packages/cdktf/lib/synthesize/synthesizer.ts#L121
83
97
  }
98
+ get gridUUID() {
99
+ return this._gridUUID;
100
+ }
101
+ get environmentName() {
102
+ return this._environmentName;
103
+ }
84
104
  /**
85
105
  * Returns a Terraform-compatible unique identifier for a Terraform Element based
86
106
  * on its path. This function finds the stackName of the parent stack (non-nested)
@@ -162,8 +182,51 @@ class StackBase extends cdktf_1.TerraformStack {
162
182
  },
163
183
  });
164
184
  }
185
+ /**
186
+ * Generate an ID with respect to the given container construct.
187
+ */
188
+ generateGridUuid(container, prefix = "") {
189
+ const rootPath = rootPathTo(this, container);
190
+ const ids = rootPath.map((c) => c.node.id);
191
+ // In unit tests our Stack (which is the only component) may not have an
192
+ // id, so in that case just pretend it's "Stack".
193
+ if (ids.length === 1 && !ids[0]) {
194
+ throw new errors_1.ValidationError("unexpected: stack id must always be defined", this);
195
+ }
196
+ return makeGridUuid(ids, prefix);
197
+ }
165
198
  }
166
199
  exports.StackBase = StackBase;
167
200
  _a = JSII_RTTI_SYMBOL_1;
168
- StackBase[_a] = { fqn: "terraconstructs.StackBase", version: "0.1.8" };
169
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhY2stYmFzZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9zdGFjay1iYXNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsOERBQXNFO0FBQ3RFLGlDQVdlO0FBQ2YsMkNBQXlEO0FBQ3pELHVDQUltQjtBQUVuQixNQUFNLGNBQWMsR0FBRyxJQUFJLDRCQUFvQixDQUFDLElBQUksb0JBQVksRUFBRSxDQUFDLENBQUM7QUFFcEUsTUFBTSxpQkFBaUIsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLDJCQUEyQixDQUFDLENBQUM7QUFzSGxFOzs7O0dBSUc7QUFDSCxNQUFzQixTQUFVLFNBQVEsc0JBQWM7SUFDcEQ7Ozs7T0FJRztJQUNJLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBTTtRQUMvQixPQUFPLENBQUMsS0FBSyxJQUFJLElBQUksT0FBTyxDQUFDLEtBQUssUUFBUSxJQUFJLGlCQUFpQixJQUFJLENBQUMsQ0FBQztJQUN2RSxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksTUFBTSxDQUFDLGdCQUFnQixDQUFDLFNBQXFCO1FBQ2xELE1BQU0sQ0FBQyxHQUFHLHNCQUFjLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3ZDLElBQUksU0FBUyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQzlCLE9BQU8sQ0FBQyxDQUFDO1FBQ1gsQ0FBQztRQUNELE1BQU0sSUFBSSxLQUFLLENBQ2IsYUFBYSxTQUFTLENBQUMsV0FBVyxFQUFFLElBQUksU0FBUyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksZ0ZBQWdGLENBQ3JKLENBQUM7SUFDSixDQUFDO0lBRUQ7Ozs7Ozs7T0FPRztJQUNJLE1BQU0sQ0FBQyxRQUFRLENBQUMsU0FBNEI7UUFDakQsTUFBTSxJQUFJLEdBQUcsc0JBQVMsQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxD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dUU7Z0JBQ3ZFLCtJQUErSTtnQkFDL0ksNENBQTRDO2dCQUM1QywrSUFBK0k7Z0JBQy9JLE1BQU0sUUFBUSxHQUFHLG9CQUFZLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRTtvQkFDekMsU0FBUyxFQUFFLEdBQUcsQ0FBQyxTQUFTO29CQUN4QixLQUFLLEVBQUUsR0FBRyxDQUFDLEtBQUs7b0JBQ2hCLFFBQVEsRUFBRSxjQUFjO2lCQUN6QixDQUFDLENBQUM7Z0JBQ0gsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxTQUFTLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDcEQsQ0FBQztTQUNGLENBQUMsQ0FBQztJQUNMLENBQUM7O0FBOUxILDhCQStMQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHByb3ZpZGVyIGFzIGFyY2hpdmVQcm92aWRlciB9IGZyb20gXCJAY2RrdGYvcHJvdmlkZXItYXJjaGl2ZVwiO1xuaW1wb3J0IHtcbiAgVGVycmFmb3JtU3RhY2ssXG4gIFRlcnJhZm9ybUVsZW1lbnQsXG4gIEh0dHBCYWNrZW5kQ29uZmlnLFxuICBIdHRwQmFja2VuZCxcbiAgVG9rZW5pemF0aW9uLFxuICBEZWZhdWx0VG9rZW5SZXNvbHZlciwgLy8gaHR0cHM6Ly9naXRodWIuY29tL2hhc2hpY29ycC90ZXJyYWZvcm0tY2RrL2Jsb2IvdjAuMjAuOS9wYWNrYWdlcy9jZGt0Zi9saWIvdG9rZW5zL3Jlc29sdmFibGUudHMjTDE3NlxuICBTdHJpbmdDb25jYXQsIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9oYXNoaWNvcnAvdGVycmFmb3JtLWNkay9ibG9iL3YwLjIwLjkvcGFja2FnZXMvY2RrdGYvbGliL3Rva2Vucy9yZXNvbHZhYmxlLnRzI0wxNTZcbiAgQXNwZWN0cyxcbiAgSVJlc29sdmVDb250ZXh0LFxuICBMYXp5LFxufSBmcm9tIFwiY2RrdGZcIjtcbmltcG9ydCB7IENvbnN0cnVjdCwgSUNvbnN0cnVjdCwgTm9kZSB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5pbXBvcnQge1xuICBtYWtlVW5pcXVlUmVzb3VyY2VOYW1lLFxuICBtYWtlVW5pcXVlUmVzb3VyY2VOYW1lUHJlZml4LFxuICBUZXJyYWZvcm1EZXBlbmRlbmN5QXNwZWN0LFxufSBmcm9tIFwiLi9wcml2YXRlXCI7XG5cbmNvbnN0IFRPS0VOX1JFU09MVkVSID0gbmV3IERlZmF1bHRUb2tlblJlc29sdmVyKG5ldyBTdHJpbmdDb25jYXQoKSk7XG5cbmNvbnN0IFRFUlJBU1RBQ0tfU1lNQk9MID0gU3ltYm9sLmZvcihcInRlcnJhY29uc3RydWN0cy9saWIuU3RhY2tcIik7XG5cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9hd3MvYXdzLWNkay9ibG9iL3YyLjE1Ni4wL3BhY2thZ2VzL2F3cy1jZGstbGliL2NvcmUvbGliL25hbWVzLnRzXG5cbi8qKlxuICogT3B0aW9ucyBmb3IgY3JlYXRpbmcgYSB1bmlxdWUgcmVzb3VyY2UgbmFtZV9wcmVmaXguXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVW5pcXVlUmVzb3VyY2VOYW1lUHJlZml4T3B0aW9uc1xuICBleHRlbmRzIFVuaXF1ZVJlc291cmNlTmFtZU9wdGlvbnMge1xuICAvKipcbiAgICogTGVuZ3RoIG9mIHRoZSByYW5kb20gZ2VuZXJhdGVkIHN1ZmZpeCBhZGRlZCBieSBzb21lIFRlcnJhZm9ybSBwcm92aWRlcnMuXG4gICAqXG4gICAqIE5PVEU6IGh0dHBzOi8vZ2l0aHViLmNvbS9oYXNoaWNvcnAvdGVycmFmb3JtLXByb3ZpZGVyLWF3cy9pc3N1ZXMvNjI1XG4gICAqIEBkZWZhdWx0IC0gMjZcbiAgICovXG4gIHJlYWRvbmx5IHN1ZmZpeExlbmd0aD86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciBjcmVhdGluZyBhIHVuaXF1ZSByZXNvdXJjZSBuYW1lLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVuaXF1ZVJlc291cmNlTmFtZU9wdGlvbnMge1xuICAvKipcbiAgICogVGhlIG1heGltdW0gbGVuZ3RoIG9mIHRoZSB1bmlxdWUgcmVzb3VyY2UgbmFtZS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSAyNTZcbiAgICovXG4gIHJlYWRvbmx5IG1heExlbmd0aD86IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIHNlcGFyYXRvciB1c2VkIGJldHdlZW4gdGhlIHBhdGggY29tcG9uZW50cy5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBub25lXG4gICAqL1xuICByZWFkb25seSBzZXBhcmF0b3I/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIE5vbi1hbHBoYW51bWVyaWMgY2hhcmFjdGVycyBhbGxvd2VkIGluIHRoZSB1bmlxdWUgcmVzb3VyY2UgbmFtZS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBub25lXG4gICAqL1xuICByZWFkb25seSBhbGxvd2VkU3BlY2lhbENoYXJhY3RlcnM/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFByZWZpeCB0byBiZSBhZGRlZCBpbnRvIHRoZSBzdGFjayBuYW1lXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm9uZVxuICAgKi9cbiAgcmVhZG9ubHkgcHJlZml4Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGNvbnZlcnQgdGhlIHJlc291cmNlIG5hbWUgdG8gbG93ZXJjYXNlLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGZhbHNlXG4gICAqL1xuICByZWFkb25seSBsb3dlckNhc2U/OiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFN0YWNrQmFzZVByb3BzIHtcbiAgLyoqXG4gICAqIFRlcnJhQ29uc3RydWN0IFVVSUQgd2l0aGluIHRoZSBncmlkLlxuICAgKlxuICAgKiBVVUlEIGlzIGdlbmVyYXRlZCBieSB0aGUgQ0xJIGFuZCBlbnN1cmVzIHJlc291cmNlIElkZW50aXR5XG4gICAqIGlzIGRlY291cGxlZCBmcm9tIHJlc291cmNlIHRhZ2dpbmcgZm9yIGNvbnNpc3RlbmN5LlxuICAgKlxuICAgKiBVVUlEIG1heSBiZSB1c2VyIHByb3ZpZGVkIGZvciBpbXBvcnRlZCByZXNvdXJjZXNcbiAgICovXG4gIHJlYWRvbmx5IGdyaWRVVUlEOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBlbnZpcm9ubWVudCBuYW1lIHBhc3NlZCBpbiBmcm9tIHRoZSBDTElcbiAgICovXG4gIHJlYWRvbmx5IGVudmlyb25tZW50TmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBTdG9yZXMgdGhlIHN0YXRlIHVzaW5nIGEgc2ltcGxlIFJFU1QgY2xpZW50LlxuICAgKlxuICAgKiBTdGF0ZSB3aWxsIGJlIGZldGNoZWQgdmlhIEdFVCwgdXBkYXRlZCB2aWEgUE9TVCwgYW5kIHB1cmdlZCB3aXRoIERFTEVURS5cbiAgICogVGhlIG1ldGhvZCB1c2VkIGZvciB1cGRhdGluZyBpcyBjb25maWd1cmFibGUuXG4gICAqXG4gICAqIFRoaXMgYmFja2VuZCBvcHRpb25hbGx5IHN1cHBvcnRzIHN0YXRlIGxvY2tpbmcuXG4gICAqIFdoZW4gbG9ja2luZyBzdXBwb3J0IGlzIGVuYWJsZWQgaXQgd2lsbCB1c2UgTE9DSyBhbmQgVU5MT0NLIHJlcXVlc3RzIHByb3ZpZGluZyB0aGUgbG9jayBpbmZvIGluIHRoZSBib2R5LlxuICAgKiBUaGUgZW5kcG9pbnQgc2hvdWxkIHJldHVybiBhIDQyMzogTG9ja2VkIG9yIDQwOTogQ29uZmxpY3Qgd2l0aCB0aGUgaG9sZGluZyBsb2NrIGluZm8gd2hlblxuICAgKiBpdCdzIGFscmVhZHkgdGFrZW4sIDIwMDogT0sgZm9yIHN1Y2Nlc3MuIEFueSBvdGhlciBzdGF0dXMgd2lsbCBiZSBjb25zaWRlcmVkIGFuIGVycm9yLlxuICAgKiBUaGUgSUQgb2YgdGhlIGhvbGRpbmcgbG9jayBpbmZvIHdpbGwgYmUgYWRkZWQgYXMgYSBxdWVyeSBwYXJhbWV0ZXIgdG8gc3RhdGUgdXBkYXRlcyByZXF1ZXN0cy5cbiAgICpcbiAgICogUmVhZCBtb3JlIGFib3V0IHRoaXMgYmFja2VuZCBpbiB0aGUgVGVycmFmb3JtIGRvY3M6XG4gICAqIGh0dHBzOi8vZGV2ZWxvcGVyLmhhc2hpY29ycC5jb20vdGVycmFmb3JtL2xhbmd1YWdlL3NldHRpbmdzL2JhY2tlbmRzL2h0dHBcbiAgICovXG4gIHJlYWRvbmx5IGdyaWRCYWNrZW5kQ29uZmlnPzogSHR0cEJhY2tlbmRDb25maWc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVN0YWNrIGV4dGVuZHMgSUNvbnN0cnVjdCB7XG4gIC8qKlxuICAgKiBFbnZpcm9ubWVudCBOYW1lIHBhc3NlZCBpbiBmcm9tIHRoZSBDTElcbiAgICovXG4gIHJlYWRvbmx5IGVudmlyb25tZW50TmFtZTogc3RyaW5nO1xuICByZWFkb25seSBncmlkVVVJRDogc3RyaW5nO1xuICByZWFkb25seSBncmlkQmFja2VuZD86IEh0dHBCYWNrZW5kO1xuICAvKipcbiAgICogQSBzaW5nbGV0b24gQXJjaGl2ZSBQcm92aWRlciB1c2VkIHRvIGFyY2hpdmUgYXNzZXRzLlxuICAgKiBUaGlzIGlzIHVzZWQgZm9yIGV4YW1wbGUgZm9yIGlubGluZSBDb2RlIGNvbnRlbnQgaW4gYXdzIExhbWJkYSBGdW5jdGlvbnMuXG4gICAqXG4gICAqIHJlZjogaHR0cHM6Ly9naXRodWIuY29tL2hhc2hpY29ycC90ZXJyYWZvcm0tcHJvdmlkZXItYXdzL2lzc3Vlcy85Nzc0I2lzc3VlY29tbWVudC02NjkzNTY3ODZcbiAgICovXG4gIHJlYWRvbmx5IGFyY2hpdmVQcm92aWRlcjogYXJjaGl2ZVByb3ZpZGVyLkFyY2hpdmVQcm92aWRlcjtcbiAgcmVzb2x2ZShvYmo6IGFueSwgcHJlcGFyaW5nPzogYm9vbGVhbik6IGFueTtcbiAgdW5pcXVlUmVzb3VyY2VOYW1lKFxuICAgIHRmRWxlbWVudDogVGVycmFmb3JtRWxlbWVudCB8IE5vZGUsXG4gICAgb3B0aW9ucz86IFVuaXF1ZVJlc291cmNlTmFtZU9wdGlvbnMsXG4gICk6IHN0cmluZztcbiAgdW5pcXVlUmVzb3VyY2VOYW1lUHJlZml4KFxuICAgIHRmRWxlbWVudDogVGVycmFmb3JtRWxlbWVudCB8IE5vZGUsXG4gICAgb3B0aW9ucz86IFVuaXF1ZVJlc291cmNlTmFtZVByZWZpeE9wdGlvbnMsXG4gICk6IHN0cmluZztcbiAgLy8gdG9Kc29uU3RyaW5nKG9iajogYW55LCBzcGFjZT86IG51bWJlcik6IHN0cmluZztcbn1cblxuLyoqXG4gKiBCYXNlIGNsYXNzIGZvciBhbGwgVGVycmFDb25zdHJ1Y3RzIHN0YWNrc1xuICpcbiAqIFByb3ZpZGVzIGEgcmVmZXJlbmNlIHRvIHRoZSBncmlkIFVVSUQgYW5kIGVudmlyb25tZW50IG5hbWVcbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFN0YWNrQmFzZSBleHRlbmRzIFRlcnJhZm9ybVN0YWNrIGltcGxlbWVudHMgSVN0YWNrIHtcbiAgLyoqXG4gICAqIFJldHVybiB3aGV0aGVyIHRoZSBnaXZlbiBvYmplY3QgaXMgYSBTdGFjay5cbiAgICpcbiAgICogYXR0cmlidXRlIGRldGVjdGlvbiBzaW5jZSBhcyAnaW5zdGFuY2VvZicgcG90ZW50aWFsbHkgZmFpbHMgYWNyb3NzIExpYnJhcnkgcmVsZWFzZXMuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGlzVGVycmFTdGFjayh4OiBhbnkpOiB4IGlzIElTdGFjayB7XG4gICAgcmV0dXJuIHggIT09IG51bGwgJiYgdHlwZW9mIHggPT09IFwib2JqZWN0XCIgJiYgVEVSUkFTVEFDS19TWU1CT0wgaW4geDtcbiAgfVxuXG4gIC8qKlxuICAgKiBMb29rcyB1cCB0aGUgZmlyc3Qgc3RhY2sgc2NvcGUgaW4gd2hpY2ggYGNvbnN0cnVjdGAgaXMgZGVmaW5lZC4gRmFpbHMgaWYgdGhlcmUgaXMgbm8gc3RhY2sgdXAgdGhlIHRyZWUgb3IgdGhlIHN0YWNrIGlzIG5vdCBhbiBJU3RhY2suXG4gICAqIEBwYXJhbSBjb25zdHJ1Y3QgVGhlIGNvbnN0cnVjdCB0byBzdGFydCB0aGUgc2VhcmNoIGZyb20uXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIG9mVGVycmFDb25zdHJ1Y3QoY29uc3RydWN0OiBJQ29uc3RydWN0KTogSVN0YWNrIHtcbiAgICBjb25zdCBzID0gVGVycmFmb3JtU3RhY2sub2YoY29uc3RydWN0KTtcbiAgICBpZiAoU3RhY2tCYXNlLmlzVGVycmFTdGFjayhzKSkge1xuICAgICAgcmV0dXJuIHM7XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBSZXNvdXJjZSAnJHtjb25zdHJ1Y3QuY29uc3RydWN0b3I/Lm5hbWV9JyBhdCAnJHtjb25zdHJ1Y3Qubm9kZS5wYXRofScgc2hvdWxkIGJlIGNyZWF0ZWQgaW4gdGhlIHNjb3BlIG9mIFRlcnJhQ29uc3RydWN0IElTdGFjaywgYnV0IG5vIElTdGFjayBmb3VuZGAsXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgdW5pcXVlIGlkZW50aWZpZXIgZm9yIGEgY29uc3RydWN0IGJhc2VkIG9uIGl0cyBwYXRoIHdpdGhpblxuICAgKiBhIFRlcnJhZm9ybVN0YWNrLiBzZWUgdW5pcXVlUmVzb3VyY2VOYW1lLCBidXQgd2l0aCBubyBzZXBhcmF0b3IsIG1heGltdW0gbGVuZ3RoIDI1NSBhbmQgYWxsb3dzXG4gICAqICBcIl9cIiBhbmQgXCItXCIgb24gdG9wIG9mIGFscGhhbnVtZXJpY2FsIGNoYXJhY3RlcnMuXG4gICAqXG4gICAqIEBwYXJhbSBjb25zdHJ1Y3QgVGhlIGNvbnN0cnVjdFxuICAgKiBAcmV0dXJucyBhIHVuaXF1ZSByZXNvdXJjZSBuYW1lIGJhc2VkIG9uIHRoZSBjb25zdHJ1Y3QgcGF0aFxuICAgKi9cbiAgcHVibGljIHN0YXRpYyB1bmlxdWVJZChjb25zdHJ1Y3Q6IElDb25zdHJ1Y3QgfCBOb2RlKSB7XG4gICAgY29uc3Qgbm9kZSA9IENvbnN0cnVjdC5pc0NvbnN0cnVjdChjb25zdHJ1Y3QpID8gY29uc3RydWN0Lm5vZGUgOiBjb25zdHJ1Y3Q7XG4gICAgY29uc3Qgc3RhY2sgPSBub2RlLnNjb3Blc1xuICAgICAgLnJldmVyc2UoKVxuICAgICAgLmZpbmQoKGNvbXBvbmVudCkgPT4gVGVycmFmb3JtU3RhY2suaXNTdGFjayhjb21wb25lbnQpKTtcblxuICAgIGlmICghc3RhY2spIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJVbmFibGUgdG8gY2FsY3VsYXRlIGEgdW5pcXVlIGlkIHdpdGhvdXQgYSBzdGFjayBpbiB0aGUgY29uc3RydWN0IHBhdGhcIixcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3Qgc3BlY0luZGV4ID0gbm9kZS5zY29wZXMuaW5kZXhPZihzdGFjayk7XG4gICAgY29uc3QgY29tcG9uZW50c1BhdGggPSBub2RlLnNjb3Blc1xuICAgICAgLnNsaWNlKHNwZWNJbmRleClcbiAgICAgIC5tYXAoKGNvbXBvbmVudCkgPT4gY29tcG9uZW50Lm5vZGUuaWQpO1xuXG4gICAgcmV0dXJuIG1ha2VVbmlxdWVSZXNvdXJjZU5hbWUoY29tcG9uZW50c1BhdGgsIHtcbiAgICAgIG1heExlbmd0aDogMjU1LFxuICAgICAgLy8gYXZvaWQgaHR0cHM6Ly9naXRodWIuY29tL2F3cy9hd3MtY2RrL2lzc3Vlcy82NDIxXG4gICAgICBhbGxvd2VkU3BlY2lhbENoYXJhY3RlcnM6IFwiXy1cIixcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdGFjayB1bmlxdWUgZ3JpZCBpZGVudGlmaWVyXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZ3JpZFVVSUQ6IHN0cmluZztcblxuICAvKipcbiAgICogRW52aXJvbm1lbnQgTmFtZSBwYXNzZWQgaW4gZnJvbSB0aGUgQ0xJXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZW52aXJvbm1lbnROYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBncmlkIHByb3ZpZGVkIGJhY2tlbmQgZm9yIHN0YXRlIHN0b3JhZ2VcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBncmlkQmFja2VuZD86IEh0dHBCYWNrZW5kO1xuXG4gIHByaXZhdGUgYXJjaGl2ZVByb3ZpZGVyU2luZ2xldG9uPzogYXJjaGl2ZVByb3ZpZGVyLkFyY2hpdmVQcm92aWRlcjtcbiAgcHVibGljIGdldCBhcmNoaXZlUHJvdmlkZXIoKTogYXJjaGl2ZVByb3ZpZGVyLkFyY2hpdmVQcm92aWRlciB7XG4gICAgaWYgKCF0aGlzLmFyY2hpdmVQcm92aWRlclNpbmdsZXRvbikge1xuICAgICAgdGhpcy5hcmNoaXZlUHJvdmlkZXJTaW5nbGV0b24gPSBuZXcgYXJjaGl2ZVByb3ZpZGVyLkFyY2hpdmVQcm92aWRlcihcbiAgICAgICAgdGhpcyxcbiAgICAgICAgXCJBcmNoaXZlUHJvdmlkZXJcIixcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmFyY2hpdmVQcm92aWRlclNpbmdsZXRvbjtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBTdGFja0Jhc2VQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG4gICAgdGhpcy5ncmlkVVVJRCA9IHByb3BzLmdyaWRVVUlEO1xuICAgIHRoaXMuZW52aXJvbm1lbnROYW1lID0gcHJvcHMuZW52aXJvbm1lbnROYW1lO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBURVJSQVNUQUNLX1NZTUJPTCwgeyB2YWx1ZTogdHJ1ZSB9KTtcbiAgICBpZiAocHJvcHMuZ3JpZEJhY2tlbmRDb25maWcpIHtcbiAgICAgIHRoaXMuZ3JpZEJhY2tlbmQgPSBuZXcgSHR0cEJhY2tlbmQodGhpcywgcHJvcHMuZ3JpZEJhY2tlbmRDb25maWcpO1xuICAgIH1cblxuICAgIC8vIE1hcCBjb25zdHJ1Y3QgdHJlZSBkZXBlbmRlbmNpZXMgdG8gSVRlcnJhZm9ybURlcGVuZGFibGVzXG4gICAgLy8gcmVmOiBodHRwczovL2dpdGh1Yi5jb20vaGFzaGljb3JwL3RlcnJhZm9ybS1jZGsvaXNzdWVzLzI3MjcjaXNzdWVjb21tZW50LTE0NzMzMjEwNzVcbiAgICBBc3BlY3RzLm9mKHRoaXMpLmFkZChuZXcgVGVycmFmb3JtRGVwZW5kZW5jeUFzcGVjdCgpKTtcbiAgICAvLyBBc3BlY3RzIGFyZSBpbnZva2VkIGluIHN5bnRoIGFmdGVyIHN0YWNrIGhhcyBiZWVuIHByZXBhcmVkXG4gICAgLy8gdGhpcyBzaG91bGQgZW5zdXJlIGFueSByZXNvdXJjZXMgYWRkZWQgZHVyaW5nIGBwcmVwYXJlU3RhY2soKWAgYXJlIGluY2x1ZGVkIGluIHRoZSBkZXBlbmRlbmN5IHRyZWVcbiAgICAvLyByZWY6IGh0dHBzOi8vZ2l0aHViLmNvbS9oYXNoaWNvcnAvdGVycmFmb3JtLWNkay9ibG9iL3YwLjIwLjkvcGFja2FnZXMvY2RrdGYvbGliL3N5bnRoZXNpemUvc3ludGhlc2l6ZXIudHMjTDEyMVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSBUZXJyYWZvcm0tY29tcGF0aWJsZSB1bmlxdWUgaWRlbnRpZmllciBmb3IgYSBUZXJyYWZvcm0gRWxlbWVudCBiYXNlZFxuICAgKiBvbiBpdHMgcGF0aC4gVGhpcyBmdW5jdGlvbiBmaW5kcyB0aGUgc3RhY2tOYW1lIG9mIHRoZSBwYXJlbnQgc3RhY2sgKG5vbi1uZXN0ZWQpXG4gICAqIHRvIHRoZSBjb25zdHJ1Y3QsIGFuZCB0aGUgaWRzIG9mIHRoZSBjb21wb25lbnRzIGluIHRoZSBjb25zdHJ1Y3QgcGF0aC5cbiAgICpcbiAgICogVGhlIHVzZXIgY2FuIGRlZmluZSBhbGxvd2VkIHNwZWNpYWwgY2hhcmFjdGVycywgYSBzZXBhcmF0b3IgYmV0d2VlbiB0aGUgZWxlbWVudHMsXG4gICAqIGFuZCB0aGUgbWF4aW11bSBsZW5ndGggb2YgdGhlIHJlc291cmNlIG5hbWUuIFRoZSBuYW1lIGluY2x1ZGVzIGEgaHVtYW4gcmVhZGFibGUgcG9ydGlvbiByZW5kZXJlZFxuICAgKiBmcm9tIHRoZSBwYXRoIGNvbXBvbmVudHMsIHdpdGggb3Igd2l0aG91dCB1c2VyIGRlZmluZWQgc2VwYXJhdG9ycywgYW5kIGEgaGFzaCBzdWZmaXguXG4gICAqIElmIHRoZSByZXNvdXJjZSBuYW1lIGlzIGxvbmdlciB0aGFuIHRoZSBtYXhpbXVtIGxlbmd0aCwgaXQgaXMgdHJpbW1lZCBpbiB0aGUgbWlkZGxlLlxuICAgKlxuICAgKiBAcGFyYW0gdGZFbGVtZW50IFRoZSBjb25zdHJ1Y3RcbiAgICogQHBhcmFtIG9wdGlvbnMgT3B0aW9ucyBmb3IgZGVmaW5pbmcgdGhlIHVuaXF1ZSByZXNvdXJjZSBuYW1lXG4gICAqIEByZXR1cm5zIGEgdW5pcXVlIHJlc291cmNlIG5hbWUgYmFzZWQgb24gdGhlIGNvbnN0cnVjdCBwYXRoXG4gICAqL1xuICBwdWJsaWMgdW5pcXVlUmVzb3VyY2VOYW1lKFxuICAgIHRmRWxlbWVudDogVGVycmFmb3JtRWxlbWVudCB8IE5vZGUsXG4gICAgb3B0aW9uczogVW5pcXVlUmVzb3VyY2VOYW1lT3B0aW9ucyA9IHt9LFxuICApOiBzdHJpbmcge1xuICAgIGNvbnN0IG5vZGUgPSBDb25zdHJ1Y3QuaXNDb25zdHJ1Y3QodGZFbGVtZW50KSA/IHRmRWxlbWVudC5ub2RlIDogdGZFbGVtZW50O1xuICAgIGNvbnN0IHN0YWNrID0gVGVycmFmb3JtRWxlbWVudC5pc1RlcnJhZm9ybUVsZW1lbnQodGZFbGVtZW50KVxuICAgICAgPyB0ZkVsZW1lbnQuY2RrdGZTdGFja1xuICAgICAgOiB0aGlzO1xuICAgIGNvbnN0IHN0YWNrSW5kZXggPSBub2RlLnNjb3Blcy5pbmRleE9mKHN0YWNrKTtcbiAgICBjb25zdCBjb21wb25lbnRzUGF0aCA9IG5vZGUuc2NvcGVzXG4gICAgICAuc2xpY2Uoc3RhY2tJbmRleClcbiAgICAgIC5tYXAoKGNvbXBvbmVudCkgPT4gY29tcG9uZW50Lm5vZGUuaWQpO1xuXG4gICAgcmV0dXJuIG1ha2VVbmlxdWVSZXNvdXJjZU5hbWUoY29tcG9uZW50c1BhdGgsIG9wdGlvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSBUZXJyYWZvcm0tY29tcGF0aWJsZSB1bmlxdWUgaWRlbnRpZmllciBmb3IgYSBUZXJyYWZvcm0gRWxlbWVudCBiYXNlZFxuICAgKiBvbiBpdHMgcGF0aC4gVGhpcyBmdW5jdGlvbiBmaW5kcyB0aGUgc3RhY2tOYW1lIG9mIHRoZSBwYXJlbnQgc3RhY2sgKG5vbi1uZXN0ZWQpXG4gICAqIHRvIHRoZSBjb25zdHJ1Y3QsIGFuZCB0aGUgaWRzIG9mIHRoZSBjb21wb25lbnRzIGluIHRoZSBjb25zdHJ1Y3QgcGF0aC5cbiAgICpcbiAgICogVGhlIHVzZXIgY2FuIGRlZmluZSBhbGxvd2VkIHNwZWNpYWwgY2hhcmFjdGVycywgYSBzZXBhcmF0b3IgYmV0d2VlbiB0aGUgZWxlbWVudHMsXG4gICAqIGFuZCB0aGUgbWF4aW11bSBsZW5ndGggb2YgdGhlIHJlc291cmNlIG5hbWUuIFRoZSBuYW1lIGluY2x1ZGVzIGEgaHVtYW4gcmVhZGFibGUgcG9ydGlvbiByZW5kZXJlZFxuICAgKiBmcm9tIHRoZSBwYXRoIGNvbXBvbmVudHMsIHdpdGggb3Igd2l0aG91dCB1c2VyIGRlZmluZWQgc2VwYXJhdG9ycywgYW5kIGRlcGVuZHMgb24gdGhlXG4gICAqIHJlc291cmNlIHByb3ZpZGVyIHRvIGdlbmVyYXRlIHRoZSByYW5kb20gc3VmZml4LlxuICAgKlxuICAgKiBJZiB0aGUgcmVzb3VyY2UgbmFtZSBpcyBsb25nZXIgdGhhbiB0aGUgbWF4aW11bSBsZW5ndGggLSBzdWZmaXhMZW5ndGgsIGl0IGlzIHRyaW1tZWQgaW4gdGhlIG1pZGRsZS5cbiAgICpcbiAgICogQHBhcmFtIHRmRWxlbWVudCBUaGUgY29uc3RydWN0XG4gICAqIEBwYXJhbSBvcHRpb25zIE9wdGlvbnMgZm9yIGRlZmluaW5nIHRoZSB1bmlxdWUgcmVzb3VyY2UgbmFtZVxuICAgKiBAcmV0dXJucyBhIHVuaXF1ZSByZXNvdXJjZSBuYW1lIGJhc2VkIG9uIHRoZSBjb25zdHJ1Y3QgcGF0aFxuICAgKi9cbiAgcHVibGljIHVuaXF1ZVJlc291cmNlTmFtZVByZWZpeChcbiAgICB0ZkVsZW1lbnQ6IFRlcnJhZm9ybUVsZW1lbnQgfCBOb2RlLFxuICAgIG9wdGlvbnM6IFVuaXF1ZVJlc291cmNlTmFtZVByZWZpeE9wdGlvbnMgPSB7fSxcbiAgKTogc3RyaW5nIHtcbiAgICBjb25zdCBub2RlID0gQ29uc3RydWN0LmlzQ29uc3RydWN0KHRmRWxlbWVudCkgPyB0ZkVsZW1lbnQubm9kZSA6IHRmRWxlbWVudDtcbiAgICBjb25zdCBzdGFjayA9IFRlcnJhZm9ybUVsZW1lbnQuaXNUZXJyYWZvcm1FbGVtZW50KHRmRWxlbWVudClcbiAgICAgID8gdGZFbGVtZW50LmNka3RmU3RhY2tcbiAgICAgIDogdGhpcztcbiAgICBjb25zdCBzdGFja0luZGV4ID0gbm9kZS5zY29wZXMuaW5kZXhPZihzdGFjayk7XG4gICAgY29uc3QgY29tcG9uZW50c1BhdGggPSBub2RlLnNjb3Blc1xuICAgICAgLnNsaWNlKHN0YWNrSW5kZXgpXG4gICAgICAubWFwKChjb21wb25lbnQpID0+IGNvbXBvbmVudC5ub2RlLmlkKTtcblxuICAgIHJldHVybiBtYWtlVW5pcXVlUmVzb3VyY2VOYW1lUHJlZml4KGNvbXBvbmVudHNQYXRoLCBvcHRpb25zKTtcbiAgfVxuXG4gIC8qKiBSZXNvbHZlIElSZXNvbHZhYmxlIGluIHNjb3BlIG9mIHRoaXMgQXdzU3RhY2sgKi9cbiAgcHVibGljIHJlc29sdmUob2JqOiBhbnksIHByZXBhcmluZyA9IGZhbHNlKTogYW55IHtcbiAgICByZXR1cm4gVG9rZW5pemF0aW9uLnJlc29sdmUob2JqLCB7XG4gICAgICBzY29wZTogdGhpcyxcbiAgICAgIHByZXBhcmluZyxcbiAgICAgIHJlc29sdmVyOiBUT0tFTl9SRVNPTFZFUixcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZXJ0IGFuIG9iamVjdCwgcG90ZW50aWFsbHkgY29udGFpbmluZyB0b2tlbnMsIHRvIGEgSlNPTiBzdHJpbmdcbiAgICovXG4gIHB1YmxpYyB0b0pzb25TdHJpbmcob2JqOiBhbnksIHNwYWNlPzogbnVtYmVyKTogc3RyaW5nIHtcbiAgICByZXR1cm4gTGF6eS5zdHJpbmdWYWx1ZSh7XG4gICAgICBwcm9kdWNlOiAoY3R4OiBJUmVzb2x2ZUNvbnRleHQpID0+IHtcbiAgICAgICAgLy8gRmlyc3QgcmVzb2x2ZSBUb2tlbiBvYmplY3RzIHdpdGggc3RyaW5nIGNvbmNhdC4uLiB0aGVuIEpTT04uc3RyaW5naWZ5IHRoZSByZXN1bHRpbmcgb2JqZWN0XG4gICAgICAgIC8vXG4gICAgICAgIC8vIHVubGlrZSBjbG91ZGZvcm1hdGlvbiwgVGVycmFmb3JtIGRvZXMgbm90IG5lZWQgYW4gaW50cmluc2ljIHdyYXBwZXI/XG4gICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9hd3MvYXdzLWNkay9ibG9iLzhkY2E1MDc5ZTE4OTMxMjIwNTdmOWUyYzU0YzBkYTBiYTY0NDkyNmUvcGFja2FnZXMvJTQwYXdzLWNkay9jb3JlL2xpYi9wcml2YXRlL2Nsb3VkZm9ybWF0aW9uLWxhbmcudHMjTDczXG4gICAgICAgIC8vIGludHJpbnNpYyB3cmFwcGVyIHdpdGhvdXQgY3Jvc3Mgc3RhY2sgcmVmXG4gICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9hd3MvYXdzLWNkay9ibG9iLzE0ZTRiYzkxZWQ1ZjBmOGNiN2M4YWM5ZWU4YTZkZTRkYTU0ZTY1ODUvcGFja2FnZXMvJTQwYXdzLWNkay9jb3JlL2xpYi9wcml2YXRlL2Nsb3VkZm9ybWF0aW9uLWxhbmcudHMjTDUwXG4gICAgICAgIGNvbnN0IHJlc29sdmVkID0gVG9rZW5pemF0aW9uLnJlc29sdmUob2JqLCB7XG4gICAgICAgICAgcHJlcGFyaW5nOiBjdHgucHJlcGFyaW5nLFxuICAgICAgICAgIHNjb3BlOiBjdHguc2NvcGUsXG4gICAgICAgICAgcmVzb2x2ZXI6IFRPS0VOX1JFU09MVkVSLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHJlc29sdmVkLCB1bmRlZmluZWQsIHNwYWNlKTtcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
201
+ StackBase[_a] = { fqn: "terraconstructs.StackBase", version: "0.1.10" };
202
+ /**
203
+ * Return the construct root path of the given construct relative to the given ancestor
204
+ *
205
+ * If no ancestor is given or the ancestor is not found, return the entire root path.
206
+ */
207
+ function rootPathTo(construct, ancestor) {
208
+ const scopes = construct.node.scopes;
209
+ for (let i = scopes.length - 2; i >= 0; i--) {
210
+ if (scopes[i] === ancestor) {
211
+ return scopes.slice(i + 1);
212
+ }
213
+ }
214
+ return scopes;
215
+ }
216
+ /**
217
+ * makeUniqueId, specialized for Grid UUID
218
+ *
219
+ * Grid UUID may contain '-', so we allow that character if the stack name
220
+ * has only one component. Otherwise we fall back to the regular "makeUniqueId"
221
+ * behavior.
222
+ */
223
+ function makeGridUuid(components, prefix = "") {
224
+ if (components.length === 1) {
225
+ const gridUuid = prefix + components[0];
226
+ if (gridUuid.length <= 36) {
227
+ return gridUuid;
228
+ }
229
+ }
230
+ return (0, private_1.makeUniqueResourceName)(components, { maxLength: 36, prefix: prefix });
231
+ }
232
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhY2stYmFzZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9zdGFjay1iYXNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFrWkEsZ0NBV0M7O0FBN1pELDhEQUFzRTtBQUN0RSxpQ0FZZTtBQUNmLDJDQUF5RDtBQUN6RCxxQ0FBMkM7QUFDM0MsdUNBSW1CO0FBRW5CLE1BQU0sY0FBYyxHQUFHLElBQUksNEJBQW9CLENBQUMsSUFBSSxvQkFBWSxFQUFFLENBQUMsQ0FBQztBQUVwRSxNQUFNLGlCQUFpQixHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsMkJBQTJCLENBQUMsQ0FBQztBQUVsRSxNQUFNLHFCQUFxQixHQUFHLGlCQUFpQixDQUFDO0FBMkhoRDs7OztHQUlHO0FBQ0gsTUFBc0IsU0FBVSxTQUFRLHNCQUFjO0lBQ3BEOzs7O09BSUc7SUFDSSxNQUFNLENBQUMsWUFBWSxDQUFDLENBQU07UUFDL0IsT0FBTyxDQUFDLEtBQUssSUFBSSxJQUFJLE9BQU8sQ0FBQyxLQUFLLFFBQVEsSUFBSSxpQkFBaUIsSUFBSSxDQUFDLENBQUM7SUFDdkUsQ0FBQztJQUVEOzs7T0FHRztJQUNJLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFxQjtRQUNsRCxNQUFNLENBQUMsR0FBRyxzQkFBYyxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUN2QyxJQUFJLFNBQVMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUM5QixPQUFPLENBQUMsQ0FBQztRQUNYLENBQUM7UUFDRCxNQUFNLElBQUksS0FBSyxDQUNiLGFBQWEsU0FBUyxDQUFDLFdBQVcsRUFBRSxJQUFJLFNBQVMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLGdGQUFnRixDQUNySixDQUFDO0lBQ0osQ0FBQztJQUVEOzs7Ozs7O09BT0c7SUFDSSxNQUFNLENBQUMsUUFBUSxDQUFDLFNBQTRCO1FBQ2pELE1BQU0sSUFBSSxHQUFHLHNCQUFTLENBQUMs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Ozs7O0dBTUc7QUFDSCxTQUFTLFlBQVksQ0FBQyxVQUFvQixFQUFFLFNBQWlCLEVBQUU7SUFDN0QsSUFBSSxVQUFVLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQzVCLE1BQU0sUUFBUSxHQUFHLE1BQU0sR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDeEMsSUFBSSxRQUFRLENBQUMsTUFBTSxJQUFJLEVBQUUsRUFBRSxDQUFDO1lBQzFCLE9BQU8sUUFBUSxDQUFDO1FBQ2xCLENBQUM7SUFDSCxDQUFDO0lBQ0QsT0FBTyxJQUFBLGdDQUFzQixFQUFDLFVBQVUsRUFBRSxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7QUFDL0UsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHByb3ZpZGVyIGFzIGFyY2hpdmVQcm92aWRlciB9IGZyb20gXCJAY2RrdGYvcHJvdmlkZXItYXJjaGl2ZVwiO1xuaW1wb3J0IHtcbiAgVGVycmFmb3JtU3RhY2ssXG4gIFRlcnJhZm9ybUVsZW1lbnQsXG4gIEh0dHBCYWNrZW5kQ29uZmlnLFxuICBIdHRwQmFja2VuZCxcbiAgVG9rZW5pemF0aW9uLFxuICBEZWZhdWx0VG9rZW5SZXNvbHZlciwgLy8gaHR0cHM6Ly9naXRodWIuY29tL2hhc2hpY29ycC90ZXJyYWZvcm0tY2RrL2Jsb2IvdjAuMjAuOS9wYWNrYWdlcy9jZGt0Zi9saWIvdG9rZW5zL3Jlc29sdmFibGUudHMjTDE3NlxuICBTdHJpbmdDb25jYXQsIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9oYXNoaWNvcnAvdGVycmFmb3JtLWNkay9ibG9iL3YwLjIwLjkvcGFja2FnZXMvY2RrdGYvbGliL3Rva2Vucy9yZXNvbHZhYmxlLnRzI0wxNTZcbiAgQXNwZWN0cyxcbiAgSVJlc29sdmVDb250ZXh0LFxuICBMYXp5LFxuICBBcHAsXG59IGZyb20gXCJjZGt0ZlwiO1xuaW1wb3J0IHsgQ29uc3RydWN0LCBJQ29uc3RydWN0LCBOb2RlIH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcbmltcG9ydCB7IFZhbGlkYXRpb25FcnJvciB9IGZyb20gXCIuL2Vycm9yc1wiO1xuaW1wb3J0IHtcbiAgbWFrZVVuaXF1ZVJlc291cmNlTmFtZSxcbiAgbWFrZVVuaXF1ZVJlc291cmNlTmFtZVByZWZpeCxcbiAgVGVycmFmb3JtRGVwZW5kZW5jeUFzcGVjdCxcbn0gZnJvbSBcIi4vcHJpdmF0ZVwiO1xuXG5jb25zdCBUT0tFTl9SRVNPTFZFUiA9IG5ldyBEZWZhdWx0VG9rZW5SZXNvbHZlcihuZXcgU3RyaW5nQ29uY2F0KCkpO1xuXG5jb25zdCBURVJSQVNUQUNLX1NZTUJPTCA9IFN5bWJvbC5mb3IoXCJ0ZXJyYWNvbnN0cnVjdHMvbGliLlN0YWNrXCIpO1xuXG5jb25zdCBWQUxJRF9HUklEX1VVSURfUkVHRVggPSAvXltBLVphLXowLTktXSokLztcblxuLy8gaHR0cHM6Ly9naXRodWIuY29tL2F3cy9hd3MtY2RrL2Jsb2IvdjIuMTU2LjAvcGFja2FnZXMvYXdzLWNkay1saWIvY29yZS9saWIvbmFtZXMudHNcblxuLyoqXG4gKiBPcHRpb25zIGZvciBjcmVhdGluZyBhIHVuaXF1ZSByZXNvdXJjZSBuYW1lX3ByZWZpeC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVbmlxdWVSZXNvdXJjZU5hbWVQcmVmaXhPcHRpb25zXG4gIGV4dGVuZHMgVW5pcXVlUmVzb3VyY2VOYW1lT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBMZW5ndGggb2YgdGhlIHJhbmRvbSBnZW5lcmF0ZWQgc3VmZml4IGFkZGVkIGJ5IHNvbWUgVGVycmFmb3JtIHByb3ZpZGVycy5cbiAgICpcbiAgICogTk9URTogaHR0cHM6Ly9naXRodWIuY29tL2hhc2hpY29ycC90ZXJyYWZvcm0tcHJvdmlkZXItYXdzL2lzc3Vlcy82MjVcbiAgICogQGRlZmF1bHQgLSAyNlxuICAgKi9cbiAgcmVhZG9ubHkgc3VmZml4TGVuZ3RoPzogbnVtYmVyO1xufVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIGNyZWF0aW5nIGEgdW5pcXVlIHJlc291cmNlIG5hbWUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVW5pcXVlUmVzb3VyY2VOYW1lT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgbWF4aW11bSBsZW5ndGggb2YgdGhlIHVuaXF1ZSByZXNvdXJjZSBuYW1lLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIDI1NlxuICAgKi9cbiAgcmVhZG9ubHkgbWF4TGVuZ3RoPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgc2VwYXJhdG9yIHVzZWQgYmV0d2VlbiB0aGUgcGF0aCBjb21wb25lbnRzLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vbmVcbiAgICovXG4gIHJlYWRvbmx5IHNlcGFyYXRvcj86IHN0cmluZztcblxuICAvKipcbiAgICogTm9uLWFscGhhbnVtZXJpYyBjaGFyYWN0ZXJzIGFsbG93ZWQgaW4gdGhlIHVuaXF1ZSByZXNvdXJjZSBuYW1lLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vbmVcbiAgICovXG4gIHJlYWRvbmx5IGFsbG93ZWRTcGVjaWFsQ2hhcmFjdGVycz86IHN0cmluZztcblxuICAvKipcbiAgICogUHJlZml4IHRvIGJlIGFkZGVkIGludG8gdGhlIHN0YWNrIG5hbWVcbiAgICpcbiAgICogQGRlZmF1bHQgLSBub25lXG4gICAqL1xuICByZWFkb25seSBwcmVmaXg/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gY29udmVydCB0aGUgcmVzb3VyY2UgbmFtZSB0byBsb3dlcmNhc2UuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IGxvd2VyQ2FzZT86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3RhY2tCYXNlUHJvcHMge1xuICAvKipcbiAgICogVGVycmFDb25zdHJ1Y3QgVVVJRCB3aXRoaW4gdGhlIGdyaWQuXG4gICAqXG4gICAqIFVVSUQgaXMgZ2VuZXJhdGVkIGJ5IHRoZSBDTEkgYW5kIGVuc3VyZXMgcmVzb3VyY2UgSWRlbnRpdHlcbiAgICogaXMgZGVjb3VwbGVkIGZyb20gcmVzb3VyY2UgdGFnZ2luZyBmb3IgY29uc2lzdGVuY3kuXG4gICAqXG4gICAqIFVVSUQgbWF5IGJlIHVzZXIgcHJvdmlkZWQgZm9yIGltcG9ydGVkIHJlc291cmNlc1xuICAgKlxuICAgKiBAZGVmYXVsdCAtIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkXG4gICAqL1xuICByZWFkb25seSBncmlkVVVJRD86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGVudmlyb25tZW50IG5hbWUgcGFzc2VkIGluIGZyb20gdGhlIENMSVxuICAgKlxuICAgKiBAZGVmYXVsdCAtIERlZmF1bHRcbiAgICovXG4gIHJlYWRvbmx5IGVudmlyb25tZW50TmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogU3RvcmVzIHRoZSBzdGF0ZSB1c2luZyBhIHNpbXBsZSBSRVNUIGNsaWVudC5cbiAgICpcbiAgICogU3RhdGUgd2lsbCBiZSBmZXRjaGVkIHZpYSBHRVQsIHVwZGF0ZWQgdmlhIFBPU1QsIGFuZCBwdXJnZWQgd2l0aCBERUxFVEUuXG4gICAqIFRoZSBtZXRob2QgdXNlZCBmb3IgdXBkYXRpbmcgaXMgY29uZmlndXJhYmxlLlxuICAgKlxuICAgKiBUaGlzIGJhY2tlbmQgb3B0aW9uYWxseSBzdXBwb3J0cyBzdGF0ZSBsb2NraW5nLlxuICAgKiBXaGVuIGxvY2tpbmcgc3VwcG9ydCBpcyBlbmFibGVkIGl0IHdpbGwgdXNlIExPQ0sgYW5kIFVOTE9DSyByZXF1ZXN0cyBwcm92aWRpbmcgdGhlIGxvY2sgaW5mbyBpbiB0aGUgYm9keS5cbiAgICogVGhlIGVuZHBvaW50IHNob3VsZCByZXR1cm4gYSA0MjM6IExvY2tlZCBvciA0MDk6IENvbmZsaWN0IHdpdGggdGhlIGhvbGRpbmcgbG9jayBpbmZvIHdoZW5cbiAgICogaXQncyBhbHJlYWR5IHRha2VuLCAyMDA6IE9LIGZvciBzdWNjZXNzLiBBbnkgb3RoZXIgc3RhdHVzIHdpbGwgYmUgY29uc2lkZXJlZCBhbiBlcnJvci5cbiAgICogVGhlIElEIG9mIHRoZSBob2xkaW5nIGxvY2sgaW5mbyB3aWxsIGJlIGFkZGVkIGFzIGEgcXVlcnkgcGFyYW1ldGVyIHRvIHN0YXRlIHVwZGF0ZXMgcmVxdWVzdHMuXG4gICAqXG4gICAqIFJlYWQgbW9yZSBhYm91dCB0aGlzIGJhY2tlbmQgaW4gdGhlIFRlcnJhZm9ybSBkb2NzOlxuICAgKiBodHRwczovL2RldmVsb3Blci5oYXNoaWNvcnAuY29tL3RlcnJhZm9ybS9sYW5ndWFnZS9zZXR0aW5ncy9iYWNrZW5kcy9odHRwXG4gICAqL1xuICByZWFkb25seSBncmlkQmFja2VuZENvbmZpZz86IEh0dHBCYWNrZW5kQ29uZmlnO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElTdGFjayBleHRlbmRzIElDb25zdHJ1Y3Qge1xuICAvKipcbiAgICogRW52aXJvbm1lbnQgTmFtZSBwYXNzZWQgaW4gZnJvbSB0aGUgQ0xJXG4gICAqL1xuICByZWFkb25seSBlbnZpcm9ubWVudE5hbWU6IHN0cmluZztcbiAgcmVhZG9ubHkgZ3JpZFVVSUQ6IHN0cmluZztcbiAgcmVhZG9ubHkgZ3JpZEJhY2tlbmQ/OiBIdHRwQmFja2VuZDtcblxuICAvKipcbiAgICogQSBzaW5nbGV0b24gQXJjaGl2ZSBQcm92aWRlciB1c2VkIHRvIGFyY2hpdmUgYXNzZXRzLlxuICAgKiBUaGlzIGlzIHVzZWQgZm9yIGV4YW1wbGUgZm9yIGlubGluZSBDb2RlIGNvbnRlbnQgaW4gYXdzIExhbWJkYSBGdW5jdGlvbnMuXG4gICAqXG4gICAqIHJlZjogaHR0cHM6Ly9naXRodWIuY29tL2hhc2hpY29ycC90ZXJyYWZvcm0tcHJvdmlkZXItYXdzL2lzc3Vlcy85Nzc0I2lzc3VlY29tbWVudC02NjkzNTY3ODZcbiAgICovXG4gIHJlYWRvbmx5IGFyY2hpdmVQcm92aWRlcjogYXJjaGl2ZVByb3ZpZGVyLkFyY2hpdmVQcm92aWRlcjtcbiAgcmVzb2x2ZShvYmo6IGFueSwgcHJlcGFyaW5nPzogYm9vbGVhbik6IGFueTtcbiAgdW5pcXVlUmVzb3VyY2VOYW1lKFxuICAgIHRmRWxlbWVudDogVGVycmFmb3JtRWxlbWVudCB8IE5vZGUsXG4gICAgb3B0aW9ucz86IFVuaXF1ZVJlc291cmNlTmFtZU9wdGlvbnMsXG4gICk6IHN0cmluZztcbiAgdW5pcXVlUmVzb3VyY2VOYW1lUHJlZml4KFxuICAgIHRmRWxlbWVudDogVGVycmFmb3JtRWxlbWVudCB8IE5vZGUsXG4gICAgb3B0aW9ucz86IFVuaXF1ZVJlc291cmNlTmFtZVByZWZpeE9wdGlvbnMsXG4gICk6IHN0cmluZztcbiAgLy8gdG9Kc29uU3RyaW5nKG9iajogYW55LCBzcGFjZT86IG51bWJlcik6IHN0cmluZztcbn1cblxuLyoqXG4gKiBCYXNlIGNsYXNzIGZvciBhbGwgVGVycmFDb25zdHJ1Y3RzIHN0YWNrc1xuICpcbiAqIFByb3ZpZGVzIGEgcmVmZXJlbmNlIHRvIHRoZSBncmlkIFVVSUQgYW5kIGVudmlyb25tZW50IG5hbWVcbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFN0YWNrQmFzZSBleHRlbmRzIFRlcnJhZm9ybVN0YWNrIGltcGxlbWVudHMgSVN0YWNrIHtcbiAgLyoqXG4gICAqIFJldHVybiB3aGV0aGVyIHRoZSBnaXZlbiBvYmplY3QgaXMgYSBTdGFjay5cbiAgICpcbiAgICogYXR0cmlidXRlIGRldGVjdGlvbiBzaW5jZSBhcyAnaW5zdGFuY2VvZicgcG90ZW50aWFsbHkgZmFpbHMgYWNyb3NzIExpYnJhcnkgcmVsZWFzZXMuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGlzVGVycmFTdGFjayh4OiBhbnkpOiB4IGlzIElTdGFjayB7XG4gICAgcmV0dXJuIHggIT09IG51bGwgJiYgdHlwZW9mIHggPT09IFwib2JqZWN0XCIgJiYgVEVSUkFTVEFDS19TWU1CT0wgaW4geDtcbiAgfVxuXG4gIC8qKlxuICAgKiBMb29rcyB1cCB0aGUgZmlyc3Qgc3RhY2sgc2NvcGUgaW4gd2hpY2ggYGNvbnN0cnVjdGAgaXMgZGVmaW5lZC4gRmFpbHMgaWYgdGhlcmUgaXMgbm8gc3RhY2sgdXAgdGhlIHRyZWUgb3IgdGhlIHN0YWNrIGlzIG5vdCBhbiBJU3RhY2suXG4gICAqIEBwYXJhbSBjb25zdHJ1Y3QgVGhlIGNvbnN0cnVjdCB0byBzdGFydCB0aGUgc2VhcmNoIGZyb20uXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIG9mVGVycmFDb25zdHJ1Y3QoY29uc3RydWN0OiBJQ29uc3RydWN0KTogSVN0YWNrIHtcbiAgICBjb25zdCBzID0gVGVycmFmb3JtU3RhY2sub2YoY29uc3RydWN0KTtcbiAgICBpZiAoU3RhY2tCYXNlLmlzVGVycmFTdGFjayhzKSkge1xuICAgICAgcmV0dXJuIHM7XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBSZXNvdXJjZSAnJHtjb25zdHJ1Y3QuY29uc3RydWN0b3I/Lm5hbWV9JyBhdCAnJHtjb25zdHJ1Y3Qubm9kZS5wYXRofScgc2hvdWxkIGJlIGNyZWF0ZWQgaW4gdGhlIHNjb3BlIG9mIFRlcnJhQ29uc3RydWN0IElTdGFjaywgYnV0IG5vIElTdGFjayBmb3VuZGAsXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgdW5pcXVlIGlkZW50aWZpZXIgZm9yIGEgY29uc3RydWN0IGJhc2VkIG9uIGl0cyBwYXRoIHdpdGhpblxuICAgKiBhIFRlcnJhZm9ybVN0YWNrLiBzZWUgdW5pcXVlUmVzb3VyY2VOYW1lLCBidXQgd2l0aCBubyBzZXBhcmF0b3IsIG1heGltdW0gbGVuZ3RoIDI1NSBhbmQgYWxsb3dzXG4gICAqICBcIl9cIiBhbmQgXCItXCIgb24gdG9wIG9mIGFscGhhbnVtZXJpY2FsIGNoYXJhY3RlcnMuXG4gICAqXG4gICAqIEBwYXJhbSBjb25zdHJ1Y3QgVGhlIGNvbnN0cnVjdFxuICAgKiBAcmV0dXJucyBhIHVuaXF1ZSByZXNvdXJjZSBuYW1lIGJhc2VkIG9uIHRoZSBjb25zdHJ1Y3QgcGF0aFxuICAgKi9cbiAgcHVibGljIHN0YXRpYyB1bmlxdWVJZChjb25zdHJ1Y3Q6IElDb25zdHJ1Y3QgfCBOb2RlKSB7XG4gICAgY29uc3Qgbm9kZSA9IENvbnN0cnVjdC5pc0NvbnN0cnVjdChjb25zdHJ1Y3QpID8gY29uc3RydWN0Lm5vZGUgOiBjb25zdHJ1Y3Q7XG4gICAgY29uc3Qgc3RhY2sgPSBub2RlLnNjb3Blc1xuICAgICAgLnJldmVyc2UoKVxuICAgICAgLmZpbmQoKGNvbXBvbmVudCkgPT4gVGVycmFmb3JtU3RhY2suaXNTdGFjayhjb21wb25lbnQpKTtcblxuICAgIGlmICghc3RhY2spIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJVbmFibGUgdG8gY2FsY3VsYXRlIGEgdW5pcXVlIGlkIHdpdGhvdXQgYSBzdGFjayBpbiB0aGUgY29uc3RydWN0IHBhdGhcIixcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3Qgc3BlY0luZGV4ID0gbm9kZS5zY29wZXMuaW5kZXhPZihzdGFjayk7XG4gICAgY29uc3QgY29tcG9uZW50c1BhdGggPSBub2RlLnNjb3Blc1xuICAgICAgLnNsaWNlKHNwZWNJbmRleClcbiAgICAgIC5tYXAoKGNvbXBvbmVudCkgPT4gY29tcG9uZW50Lm5vZGUuaWQpO1xuXG4gICAgcmV0dXJuIG1ha2VVbmlxdWVSZXNvdXJjZU5hbWUoY29tcG9uZW50c1BhdGgsIHtcbiAgICAgIG1heExlbmd0aDogMjU1LFxuICAgICAgLy8gYXZvaWQgaHR0cHM6Ly9naXRodWIuY29tL2F3cy9hd3MtY2RrL2lzc3Vlcy82NDIxXG4gICAgICBhbGxvd2VkU3BlY2lhbENoYXJhY3RlcnM6IFwiXy1cIixcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdGFjayB1bmlxdWUgZ3JpZCBpZGVudGlmaWVyXG4gICAqL1xuICBwcml2YXRlIHJlYWRvbmx5IF9ncmlkVVVJRDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBFbnZpcm9ubWVudCBOYW1lIHBhc3NlZCBpbiBmcm9tIHRoZSBDTElcbiAgICovXG4gIHByaXZhdGUgcmVhZG9ubHkgX2Vudmlyb25tZW50TmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgZ3JpZCBwcm92aWRlZCBiYWNrZW5kIGZvciBzdGF0ZSBzdG9yYWdlXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZ3JpZEJhY2tlbmQ/OiBIdHRwQmFja2VuZDtcblxuICBwcml2YXRlIGFyY2hpdmVQcm92aWRlclNpbmdsZXRvbj86IGFyY2hpdmVQcm92aWRlci5BcmNoaXZlUHJvdmlkZXI7XG4gIHB1YmxpYyBnZXQgYXJjaGl2ZVByb3ZpZGVyKCk6IGFyY2hpdmVQcm92aWRlci5BcmNoaXZlUHJvdmlkZXIge1xuICAgIGlmICghdGhpcy5hcmNoaXZlUHJvdmlkZXJTaW5nbGV0b24pIHtcbiAgICAgIHRoaXMuYXJjaGl2ZVByb3ZpZGVyU2luZ2xldG9uID0gbmV3IGFyY2hpdmVQcm92aWRlci5BcmNoaXZlUHJvdmlkZXIoXG4gICAgICAgIHRoaXMsXG4gICAgICAgIFwiQXJjaGl2ZVByb3ZpZGVyXCIsXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5hcmNoaXZlUHJvdmlkZXJTaW5nbGV0b247XG4gIH1cblxuICBjb25zdHJ1Y3RvcihzY29wZT86IENvbnN0cnVjdCwgaWQ/OiBzdHJpbmcsIHByb3BzOiBTdGFja0Jhc2VQcm9wcyA9IHt9KSB7XG4gICAgLy8gRm9yIHVuaXQgdGVzdCBzY29wZSBhbmQgaWQgYXJlIG9wdGlvbmFsIGZvciBzdGFja3MsIGJ1dCB3ZSBzdGlsbCB3YW50IGFuIEFwcFxuICAgIC8vIGFzIHRoZSBwYXJlbnQgYmVjYXVzZSBhcHBzIGltcGxlbWVudCBtdWNoIG9mIHRoZSBzeW50aGVzaXMgbG9naWMuXG4gICAgc2NvcGUgPSBzY29wZSA/PyBuZXcgQXBwKCk7XG5cbiAgICAvLyBcIkRlZmF1bHRcIiBpcyBhIFwiaGlkZGVuIGlkXCIgZnJvbSBhIGBub2RlLnVuaXF1ZUlkYCBwZXJzcGVjdGl2ZVxuICAgIGlkID0gaWQgPz8gXCJEZWZhdWx0XCI7XG5cbiAgICBzdXBlcihzY29wZSwgaWQpO1xuICAgIHRoaXMuX2Vudmlyb25tZW50TmFtZSA9IHByb3BzLmVudmlyb25tZW50TmFtZSA/PyBcIkRlZmF1bHRcIjtcbiAgICB0aGlzLl9ncmlkVVVJRCA9IHByb3BzLmdyaWRVVUlEID8/IHRoaXMuZ2VuZXJhdGVHcmlkVXVpZCh0aGlzLCBcImdcIik7XG4gICAgaWYgKHRoaXMuZ3JpZFVVSUQubGVuZ3RoID4gMzYpIHtcbiAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoXG4gICAgICAgIGBHcmlkVVVJRCBtdXN0IGJlIDw9IDM2IGNoYXJhY3RlcnMuIEdyaWRVVUlEOiAnJHt0aGlzLmdyaWRVVUlEfSdgLFxuICAgICAgICB0aGlzLFxuICAgICAgKTtcbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIFRFUlJBU1RBQ0tfU1lNQk9MLCB7IHZhbHVlOiB0cnVlIH0pO1xuICAgIGlmIChwcm9wcy5ncmlkQmFja2VuZENvbmZpZykge1xuICAgICAgdGhpcy5ncmlkQmFja2VuZCA9IG5ldyBIdHRwQmFja2VuZCh0aGlzLCBwcm9wcy5ncmlkQmFja2VuZENvbmZpZyk7XG4gICAgfVxuXG4gICAgaWYgKCFWQUxJRF9HUklEX1VVSURfUkVHRVgudGVzdCh0aGlzLmdyaWRVVUlEKSkge1xuICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihcbiAgICAgICAgYEdyaWRVVUlEIG11c3QgbWF0Y2ggdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbjogJHtWQUxJRF9HUklEX1VVSURfUkVHRVgudG9TdHJpbmcoKX0sIGdvdCAnJHt0aGlzLmdyaWRVVUlEfSdgLFxuICAgICAgICB0aGlzLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBNYXAgY29uc3RydWN0IHRyZWUgZGVwZW5kZW5jaWVzIHRvIElUZXJyYWZvcm1EZXBlbmRhYmxlc1xuICAgIC8vIHJlZjogaHR0cHM6Ly9naXRodWIuY29tL2hhc2hpY29ycC90ZXJyYWZvcm0tY2RrL2lzc3Vlcy8yNzI3I2lzc3VlY29tbWVudC0xNDczMzIxMDc1XG4gICAgQXNwZWN0cy5vZih0aGlzKS5hZGQobmV3IFRlcnJhZm9ybURlcGVuZGVuY3lBc3BlY3QoKSk7XG4gICAgLy8gQXNwZWN0cyBhcmUgaW52b2tlZCBpbiBzeW50aCBhZnRlciBzdGFjayBoYXMgYmVlbiBwcmVwYXJlZFxuICAgIC8vIHRoaXMgc2hvdWxkIGVuc3VyZSBhbnkgcmVzb3VyY2VzIGFkZGVkIGR1cmluZyBgcHJlcGFyZVN0YWNrKClgIGFyZSBpbmNsdWRlZCBpbiB0aGUgZGVwZW5kZW5jeSB0cmVlXG4gICAgLy8gcmVmOiBodHRwczovL2dpdGh1Yi5jb20vaGFzaGljb3JwL3RlcnJhZm9ybS1jZGsvYmxvYi92MC4yMC45L3BhY2thZ2VzL2Nka3RmL2xpYi9zeW50aGVzaXplL3N5bnRoZXNpemVyLnRzI0wxMjFcbiAgfVxuXG4gIHB1YmxpYyBnZXQgZ3JpZFVVSUQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fZ3JpZFVVSUQ7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGVudmlyb25tZW50TmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9lbnZpcm9ubWVudE5hbWU7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhIFRlcnJhZm9ybS1jb21wYXRpYmxlIHVuaXF1ZSBpZGVudGlmaWVyIGZvciBhIFRlcnJhZm9ybSBFbGVtZW50IGJhc2VkXG4gICAqIG9uIGl0cyBwYXRoLiBUaGlzIGZ1bmN0aW9uIGZpbmRzIHRoZSBzdGFja05hbWUgb2YgdGhlIHBhcmVudCBzdGFjayAobm9uLW5lc3RlZClcbiAgICogdG8gdGhlIGNvbnN0cnVjdCwgYW5kIHRoZSBpZHMgb2YgdGhlIGNvbXBvbmVudHMgaW4gdGhlIGNvbnN0cnVjdCBwYXRoLlxuICAgKlxuICAgKiBUaGUgdXNlciBjYW4gZGVmaW5lIGFsbG93ZWQgc3BlY2lhbCBjaGFyYWN0ZXJzLCBhIHNlcGFyYXRvciBiZXR3ZWVuIHRoZSBlbGVtZW50cyxcbiAgICogYW5kIHRoZSBtYXhpbXVtIGxlbmd0aCBvZiB0aGUgcmVzb3VyY2UgbmFtZS4gVGhlIG5hbWUgaW5jbHVkZXMgYSBodW1hbiByZWFkYWJsZSBwb3J0aW9uIHJlbmRlcmVkXG4gICAqIGZyb20gdGhlIHBhdGggY29tcG9uZW50cywgd2l0aCBvciB3aXRob3V0IHVzZXIgZGVmaW5lZCBzZXBhcmF0b3JzLCBhbmQgYSBoYXNoIHN1ZmZpeC5cbiAgICogSWYgdGhlIHJlc291cmNlIG5hbWUgaXMgbG9uZ2VyIHRoYW4gdGhlIG1heGltdW0gbGVuZ3RoLCBpdCBpcyB0cmltbWVkIGluIHRoZSBtaWRkbGUuXG4gICAqXG4gICAqIEBwYXJhbSB0ZkVsZW1lbnQgVGhlIGNvbnN0cnVjdFxuICAgKiBAcGFyYW0gb3B0aW9ucyBPcHRpb25zIGZvciBkZWZpbmluZyB0aGUgdW5pcXVlIHJlc291cmNlIG5hbWVcbiAgICogQHJldHVybnMgYSB1bmlxdWUgcmVzb3VyY2UgbmFtZSBiYXNlZCBvbiB0aGUgY29uc3RydWN0IHBhdGhcbiAgICovXG4gIHB1YmxpYyB1bmlxdWVSZXNvdXJjZU5hbWUoXG4gICAgdGZFbGVtZW50OiBUZXJyYWZvcm1FbGVtZW50IHwgTm9kZSxcbiAgICBvcHRpb25zOiBVbmlxdWVSZXNvdXJjZU5hbWVPcHRpb25zID0ge30sXG4gICk6IHN0cmluZyB7XG4gICAgY29uc3Qgbm9kZSA9IENvbnN0cnVjdC5pc0NvbnN0cnVjdCh0ZkVsZW1lbnQpID8gdGZFbGVtZW50Lm5vZGUgOiB0ZkVsZW1lbnQ7XG4gICAgY29uc3Qgc3RhY2sgPSBUZXJyYWZvcm1FbGVtZW50LmlzVGVycmFmb3JtRWxlbWVudCh0ZkVsZW1lbnQpXG4gICAgICA/IHRmRWxlbWVudC5jZGt0ZlN0YWNrXG4gICAgICA6IHRoaXM7XG4gICAgY29uc3Qgc3RhY2tJbmRleCA9IG5vZGUuc2NvcGVzLmluZGV4T2Yoc3RhY2spO1xuICAgIGNvbnN0IGNvbXBvbmVudHNQYXRoID0gbm9kZS5zY29wZXNcbiAgICAgIC5zbGljZShzdGFja0luZGV4KVxuICAgICAgLm1hcCgoY29tcG9uZW50KSA9PiBjb21wb25lbnQubm9kZS5pZCk7XG5cbiAgICByZXR1cm4gbWFrZVVuaXF1ZVJlc291cmNlTmFtZShjb21wb25lbnRzUGF0aCwgb3B0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhIFRlcnJhZm9ybS1jb21wYXRpYmxlIHVuaXF1ZSBpZGVudGlmaWVyIGZvciBhIFRlcnJhZm9ybSBFbGVtZW50IGJhc2VkXG4gICAqIG9uIGl0cyBwYXRoLiBUaGlzIGZ1bmN0aW9uIGZpbmRzIHRoZSBzdGFja05hbWUgb2YgdGhlIHBhcmVudCBzdGFjayAobm9uLW5lc3RlZClcbiAgICogdG8gdGhlIGNvbnN0cnVjdCwgYW5kIHRoZSBpZHMgb2YgdGhlIGNvbXBvbmVudHMgaW4gdGhlIGNvbnN0cnVjdCBwYXRoLlxuICAgKlxuICAgKiBUaGUgdXNlciBjYW4gZGVmaW5lIGFsbG93ZWQgc3BlY2lhbCBjaGFyYWN0ZXJzLCBhIHNlcGFyYXRvciBiZXR3ZWVuIHRoZSBlbGVtZW50cyxcbiAgICogYW5kIHRoZSBtYXhpbXVtIGxlbmd0aCBvZiB0aGUgcmVzb3VyY2UgbmFtZS4gVGhlIG5hbWUgaW5jbHVkZXMgYSBodW1hbiByZWFkYWJsZSBwb3J0aW9uIHJlbmRlcmVkXG4gICAqIGZyb20gdGhlIHBhdGggY29tcG9uZW50cywgd2l0aCBvciB3aXRob3V0IHVzZXIgZGVmaW5lZCBzZXBhcmF0b3JzLCBhbmQgZGVwZW5kcyBvbiB0aGVcbiAgICogcmVzb3VyY2UgcHJvdmlkZXIgdG8gZ2VuZXJhdGUgdGhlIHJhbmRvbSBzdWZmaXguXG4gICAqXG4gICAqIElmIHRoZSByZXNvdXJjZSBuYW1lIGlzIGxvbmdlciB0aGFuIHRoZSBtYXhpbXVtIGxlbmd0aCAtIHN1ZmZpeExlbmd0aCwgaXQgaXMgdHJpbW1lZCBpbiB0aGUgbWlkZGxlLlxuICAgKlxuICAgKiBAcGFyYW0gdGZFbGVtZW50IFRoZSBjb25zdHJ1Y3RcbiAgICogQHBhcmFtIG9wdGlvbnMgT3B0aW9ucyBmb3IgZGVmaW5pbmcgdGhlIHVuaXF1ZSByZXNvdXJjZSBuYW1lXG4gICAqIEByZXR1cm5zIGEgdW5pcXVlIHJlc291cmNlIG5hbWUgYmFzZWQgb24gdGhlIGNvbnN0cnVjdCBwYXRoXG4gICAqL1xuICBwdWJsaWMgdW5pcXVlUmVzb3VyY2VOYW1lUHJlZml4KFxuICAgIHRmRWxlbWVudDogVGVycmFmb3JtRWxlbWVudCB8IE5vZGUsXG4gICAgb3B0aW9uczogVW5pcXVlUmVzb3VyY2VOYW1lUHJlZml4T3B0aW9ucyA9IHt9LFxuICApOiBzdHJpbmcge1xuICAgIGNvbnN0IG5vZGUgPSBDb25zdHJ1Y3QuaXNDb25zdHJ1Y3QodGZFbGVtZW50KSA/IHRmRWxlbWVudC5ub2RlIDogdGZFbGVtZW50O1xuICAgIGNvbnN0IHN0YWNrID0gVGVycmFmb3JtRWxlbWVudC5pc1RlcnJhZm9ybUVsZW1lbnQodGZFbGVtZW50KVxuICAgICAgPyB0ZkVsZW1lbnQuY2RrdGZTdGFja1xuICAgICAgOiB0aGlzO1xuICAgIGNvbnN0IHN0YWNrSW5kZXggPSBub2RlLnNjb3Blcy5pbmRleE9mKHN0YWNrKTtcbiAgICBjb25zdCBjb21wb25lbnRzUGF0aCA9IG5vZGUuc2NvcGVzXG4gICAgICAuc2xpY2Uoc3RhY2tJbmRleClcbiAgICAgIC5tYXAoKGNvbXBvbmVudCkgPT4gY29tcG9uZW50Lm5vZGUuaWQpO1xuXG4gICAgcmV0dXJuIG1ha2VVbmlxdWVSZXNvdXJjZU5hbWVQcmVmaXgoY29tcG9uZW50c1BhdGgsIG9wdGlvbnMpO1xuICB9XG5cbiAgLyoqIFJlc29sdmUgSVJlc29sdmFibGUgaW4gc2NvcGUgb2YgdGhpcyBBd3NTdGFjayAqL1xuICBwdWJsaWMgcmVzb2x2ZShvYmo6IGFueSwgcHJlcGFyaW5nID0gZmFsc2UpOiBhbnkge1xuICAgIHJldHVybiBUb2tlbml6YXRpb24ucmVzb2x2ZShvYmosIHtcbiAgICAgIHNjb3BlOiB0aGlzLFxuICAgICAgcHJlcGFyaW5nLFxuICAgICAgcmVzb2x2ZXI6IFRPS0VOX1JFU09MVkVSLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlcnQgYW4gb2JqZWN0LCBwb3RlbnRpYWxseSBjb250YWluaW5nIHRva2VucywgdG8gYSBKU09OIHN0cmluZ1xuICAgKi9cbiAgcHVibGljIHRvSnNvblN0cmluZyhvYmo6IGFueSwgc3BhY2U/OiBudW1iZXIpOiBzdHJpbmcge1xuICAgIHJldHVybiBMYXp5LnN0cmluZ1ZhbHVlKHtcbiAgICAgIHByb2R1Y2U6IChjdHg6IElSZXNvbHZlQ29udGV4dCkgPT4ge1xuICAgICAgICAvLyBGaXJzdCByZXNvbHZlIFRva2VuIG9iamVjdHMgd2l0aCBzdHJpbmcgY29uY2F0Li4uIHRoZW4gSlNPTi5zdHJpbmdpZnkgdGhlIHJlc3VsdGluZyBvYmplY3RcbiAgICAgICAgLy9cbiAgICAgICAgLy8gdW5saWtlIGNsb3VkZm9ybWF0aW9uLCBUZXJyYWZvcm0gZG9lcyBub3QgbmVlZCBhbiBpbnRyaW5zaWMgd3JhcHBlcj9cbiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2F3cy9hd3MtY2RrL2Jsb2IvOGRjYTUwNzllMTg5MzEyMjA1N2Y5ZTJjNTRjMGRhMGJhNjQ0OTI2ZS9wYWNrYWdlcy8lNDBhd3MtY2RrL2NvcmUvbGliL3ByaXZhdGUvY2xvdWRmb3JtYXRpb24tbGFuZy50cyNMNzNcbiAgICAgICAgLy8gaW50cmluc2ljIHdyYXBwZXIgd2l0aG91dCBjcm9zcyBzdGFjayByZWZcbiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2F3cy9hd3MtY2RrL2Jsb2IvMTRlNGJjOTFlZDVmMGY4Y2I3YzhhYzllZThhNmRlNGRhNTRlNjU4NS9wYWNrYWdlcy8lNDBhd3MtY2RrL2NvcmUvbGliL3ByaXZhdGUvY2xvdWRmb3JtYXRpb24tbGFuZy50cyNMNTBcbiAgICAgICAgY29uc3QgcmVzb2x2ZWQgPSBUb2tlbml6YXRpb24ucmVzb2x2ZShvYmosIHtcbiAgICAgICAgICBwcmVwYXJpbmc6IGN0eC5wcmVwYXJpbmcsXG4gICAgICAgICAgc2NvcGU6IGN0eC5zY29wZSxcbiAgICAgICAgICByZXNvbHZlcjogVE9LRU5fUkVTT0xWRVIsXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkocmVzb2x2ZWQsIHVuZGVmaW5lZCwgc3BhY2UpO1xuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZW5lcmF0ZSBhbiBJRCB3aXRoIHJlc3BlY3QgdG8gdGhlIGdpdmVuIGNvbnRhaW5lciBjb25zdHJ1Y3QuXG4gICAqL1xuICBwcml2YXRlIGdlbmVyYXRlR3JpZFV1aWQoXG4gICAgY29udGFpbmVyOiBJQ29uc3RydWN0IHwgdW5kZWZpbmVkLFxuICAgIHByZWZpeDogc3RyaW5nID0gXCJcIixcbiAgKSB7XG4gICAgY29uc3Qgcm9vdFBhdGggPSByb290UGF0aFRvKHRoaXMsIGNvbnRhaW5lcik7XG4gICAgY29uc3QgaWRzID0gcm9vdFBhdGgubWFwKChjKSA9PiBjLm5vZGUuaWQpO1xuXG4gICAgLy8gSW4gdW5pdCB0ZXN0cyBvdXIgU3RhY2sgKHdoaWNoIGlzIHRoZSBvbmx5IGNvbXBvbmVudCkgbWF5IG5vdCBoYXZlIGFuXG4gICAgLy8gaWQsIHNvIGluIHRoYXQgY2FzZSBqdXN0IHByZXRlbmQgaXQncyBcIlN0YWNrXCIuXG4gICAgaWYgKGlkcy5sZW5ndGggPT09IDEgJiYgIWlkc1swXSkge1xuICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihcbiAgICAgICAgXCJ1bmV4cGVjdGVkOiBzdGFjayBpZCBtdXN0IGFsd2F5cyBiZSBkZWZpbmVkXCIsXG4gICAgICAgIHRoaXMsXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiBtYWtlR3JpZFV1aWQoaWRzLCBwcmVmaXgpO1xuICB9XG59XG5cbi8qKlxuICogUmV0dXJuIHRoZSBjb25zdHJ1Y3Qgcm9vdCBwYXRoIG9mIHRoZSBnaXZlbiBjb25zdHJ1Y3QgcmVsYXRpdmUgdG8gdGhlIGdpdmVuIGFuY2VzdG9yXG4gKlxuICogSWYgbm8gYW5jZXN0b3IgaXMgZ2l2ZW4gb3IgdGhlIGFuY2VzdG9yIGlzIG5vdCBmb3VuZCwgcmV0dXJuIHRoZSBlbnRpcmUgcm9vdCBwYXRoLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcm9vdFBhdGhUbyhcbiAgY29uc3RydWN0OiBJQ29uc3RydWN0LFxuICBhbmNlc3Rvcj86IElDb25zdHJ1Y3QsXG4pOiBJQ29uc3RydWN0W10ge1xuICBjb25zdCBzY29wZXMgPSBjb25zdHJ1Y3Qubm9kZS5zY29wZXM7XG4gIGZvciAobGV0IGkgPSBzY29wZXMubGVuZ3RoIC0gMjsgaSA+PSAwOyBpLS0pIHtcbiAgICBpZiAoc2NvcGVzW2ldID09PSBhbmNlc3Rvcikge1xuICAgICAgcmV0dXJuIHNjb3Blcy5zbGljZShpICsgMSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBzY29wZXM7XG59XG5cbi8qKlxuICogbWFrZVVuaXF1ZUlkLCBzcGVjaWFsaXplZCBmb3IgR3JpZCBVVUlEXG4gKlxuICogR3JpZCBVVUlEIG1heSBjb250YWluICctJywgc28gd2UgYWxsb3cgdGhhdCBjaGFyYWN0ZXIgaWYgdGhlIHN0YWNrIG5hbWVcbiAqIGhhcyBvbmx5IG9uZSBjb21wb25lbnQuIE90aGVyd2lzZSB3ZSBmYWxsIGJhY2sgdG8gdGhlIHJlZ3VsYXIgXCJtYWtlVW5pcXVlSWRcIlxuICogYmVoYXZpb3IuXG4gKi9cbmZ1bmN0aW9uIG1ha2VHcmlkVXVpZChjb21wb25lbnRzOiBzdHJpbmdbXSwgcHJlZml4OiBzdHJpbmcgPSBcIlwiKSB7XG4gIGlmIChjb21wb25lbnRzLmxlbmd0aCA9PT0gMSkge1xuICAgIGNvbnN0IGdyaWRVdWlkID0gcHJlZml4ICsgY29tcG9uZW50c1swXTtcbiAgICBpZiAoZ3JpZFV1aWQubGVuZ3RoIDw9IDM2KSB7XG4gICAgICByZXR1cm4gZ3JpZFV1aWQ7XG4gICAgfVxuICB9XG4gIHJldHVybiBtYWtlVW5pcXVlUmVzb3VyY2VOYW1lKGNvbXBvbmVudHMsIHsgbWF4TGVuZ3RoOiAzNiwgcHJlZml4OiBwcmVmaXggfSk7XG59XG4iXX0=
package/lib/terra-func.js CHANGED
@@ -159,7 +159,7 @@ class Fn extends cdktf_1.Fn {
159
159
  }
160
160
  exports.Fn = Fn;
161
161
  _a = JSII_RTTI_SYMBOL_1;
162
- Fn[_a] = { fqn: "terraconstructs.Fn", version: "0.1.8" };
162
+ Fn[_a] = { fqn: "terraconstructs.Fn", version: "0.1.10" };
163
163
  function range(n) {
164
164
  const ret = [];
165
165
  for (let i = 0; i < n; i++) {
package/lib/time-zone.js CHANGED
@@ -29,7 +29,7 @@ class TimeZone {
29
29
  }
30
30
  exports.TimeZone = TimeZone;
31
31
  _a = JSII_RTTI_SYMBOL_1;
32
- TimeZone[_a] = { fqn: "terraconstructs.TimeZone", version: "0.1.8" };
32
+ TimeZone[_a] = { fqn: "terraconstructs.TimeZone", version: "0.1.10" };
33
33
  /** IANA Time Zone database entry for Africa/Abidjan. UTC offset +00:00/+00:00. */
34
34
  TimeZone.AFRICA_ABIDJAN = new TimeZone("Africa/Abidjan");
35
35
  /** IANA Time Zone database entry for Africa/Algiers. UTC offset +01:00/+01:00. */
package/package.json CHANGED
@@ -10,6 +10,7 @@
10
10
  "organization": false
11
11
  },
12
12
  "devDependencies": {
13
+ "@aws-cdk/region-info": "2.233.0",
13
14
  "@cdktf/provider-archive": "11.0.0",
14
15
  "@cdktf/provider-aws": "21.22.0",
15
16
  "@cdktf/provider-cloudinit": "11.0.0",
@@ -46,6 +47,7 @@
46
47
  "typescript": "~5.9"
47
48
  },
48
49
  "peerDependencies": {
50
+ "@aws-cdk/region-info": "^2.233.0",
49
51
  "@cdktf/provider-archive": "^11.0.0",
50
52
  "@cdktf/provider-aws": "^21.22.0",
51
53
  "@cdktf/provider-cloudinit": "^11.0.0",
@@ -82,7 +84,7 @@
82
84
  "publishConfig": {
83
85
  "access": "public"
84
86
  },
85
- "version": "0.1.8",
87
+ "version": "0.1.10",
86
88
  "jest": {
87
89
  "coverageProvider": "v8",
88
90
  "setupFilesAfterEnv": [
@@ -1,7 +0,0 @@
1
- export declare const ELBV2_ACCOUNTS: {
2
- [region: string]: string;
3
- };
4
- /**
5
- * The account ID for ELBv2 in this region
6
- */
7
- export declare function getElbv2Account(region: string): string | undefined;
@@ -1,46 +0,0 @@
1
- "use strict";
2
- // https://github.com/aws/aws-cdk/blob/v2.175.1/packages/aws-cdk-lib/region-info/build-tools/fact-tables.ts#L120
3
- Object.defineProperty(exports, "__esModule", { value: true });
4
- exports.ELBV2_ACCOUNTS = void 0;
5
- exports.getElbv2Account = getElbv2Account;
6
- // https://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-access-logs.html#access-logging-bucket-permissions
7
- // https://docs.aws.amazon.com/elasticloadbalancing/latest/classic/enable-access-logs.html#attach-bucket-policy
8
- // Any not listed regions use the service principal "logdelivery.elasticloadbalancing.amazonaws.com"
9
- exports.ELBV2_ACCOUNTS = {
10
- "af-south-1": "098369216593",
11
- "ap-east-1": "754344448648",
12
- "ap-northeast-1": "582318560864",
13
- "ap-northeast-2": "600734575887",
14
- "ap-northeast-3": "383597477331",
15
- "ap-south-1": "718504428378",
16
- "ap-southeast-1": "114774131450",
17
- "ap-southeast-2": "783225319266",
18
- "ap-southeast-3": "589379963580",
19
- "ca-central-1": "985666609251",
20
- "cn-north-1": "638102146993",
21
- "cn-northwest-1": "037604701340",
22
- "eu-central-1": "054676820928",
23
- "eu-north-1": "897822967062",
24
- "eu-south-1": "635631232127",
25
- "eu-west-1": "156460612806",
26
- "eu-west-2": "652711504416",
27
- "eu-west-3": "009996457667",
28
- "me-south-1": "076674570225",
29
- "sa-east-1": "507241528517",
30
- "us-east-1": "127311923021",
31
- "us-east-2": "033677994240",
32
- "us-gov-east-1": "190560391635",
33
- "us-gov-west-1": "048591011584",
34
- "us-iso-east-1": "770363063475",
35
- "us-isob-east-1": "740734521339",
36
- "us-iso-west-1": "121062877647",
37
- "us-west-1": "027434742980",
38
- "us-west-2": "797873946194",
39
- };
40
- /**
41
- * The account ID for ELBv2 in this region
42
- */
43
- function getElbv2Account(region) {
44
- return exports.ELBV2_ACCOUNTS[region];
45
- }
46
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNjZXNzLWxvZ3MtYWNjb3VudHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYXdzL2NvbXB1dGUvbGItc2hhcmVkL2FjY2Vzcy1sb2dzLWFjY291bnRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxnSEFBZ0g7OztBQXdDaEgsMENBRUM7QUF4Q0QsdUlBQXVJO0FBQ3ZJLCtHQUErRztBQUMvRyxvR0FBb0c7QUFDdkYsUUFBQSxjQUFjLEdBQWlDO0lBQzFELFlBQVksRUFBRSxjQUFjO0lBQzVCLFdBQVcsRUFBRSxjQUFjO0lBQzNCLGdCQUFnQixFQUFFLGNBQWM7SUFDaEMsZ0JBQWdCLEVBQUUsY0FBYztJQUNoQyxnQkFBZ0IsRUFBRSxjQUFjO0lBQ2hDLFlBQVksRUFBRSxjQUFjO0lBQzVCLGdCQUFnQixFQUFFLGNBQWM7SUFDaEMsZ0JBQWdCLEVBQUUsY0FBYztJQUNoQyxnQkFBZ0IsRUFBRSxjQUFjO0lBQ2hDLGNBQWMsRUFBRSxjQUFjO0lBQzlCLFlBQVksRUFBRSxjQUFjO0lBQzVCLGdCQUFnQixFQUFFLGNBQWM7SUFDaEMsY0FBYyxFQUFFLGNBQWM7SUFDOUIsWUFBWSxFQUFFLGNBQWM7SUFDNUIsWUFBWSxFQUFFLGNBQWM7SUFDNUIsV0FBVyxFQUFFLGNBQWM7SUFDM0IsV0FBVyxFQUFFLGNBQWM7SUFDM0IsV0FBVyxFQUFFLGNBQWM7SUFDM0IsWUFBWSxFQUFFLGNBQWM7SUFDNUIsV0FBVyxFQUFFLGNBQWM7SUFDM0IsV0FBVyxFQUFFLGNBQWM7SUFDM0IsV0FBVyxFQUFFLGNBQWM7SUFDM0IsZUFBZSxFQUFFLGNBQWM7SUFDL0IsZUFBZSxFQUFFLGNBQWM7SUFDL0IsZUFBZSxFQUFFLGNBQWM7SUFDL0IsZ0JBQWdCLEVBQUUsY0FBYztJQUNoQyxlQUFlLEVBQUUsY0FBYztJQUMvQixXQUFXLEVBQUUsY0FBYztJQUMzQixXQUFXLEVBQUUsY0FBYztDQUM1QixDQUFDO0FBRUY7O0dBRUc7QUFDSCxTQUFnQixlQUFlLENBQUMsTUFBYztJQUM1QyxPQUFPLHNCQUFjLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDaEMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9hd3MvYXdzLWNkay9ibG9iL3YyLjE3NS4xL3BhY2thZ2VzL2F3cy1jZGstbGliL3JlZ2lvbi1pbmZvL2J1aWxkLXRvb2xzL2ZhY3QtdGFibGVzLnRzI0wxMjBcblxuLy8gaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2VsYXN0aWNsb2FkYmFsYW5jaW5nL2xhdGVzdC9hcHBsaWNhdGlvbi9sb2FkLWJhbGFuY2VyLWFjY2Vzcy1sb2dzLmh0bWwjYWNjZXNzLWxvZ2dpbmctYnVja2V0LXBlcm1pc3Npb25zXG4vLyBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vZWxhc3RpY2xvYWRiYWxhbmNpbmcvbGF0ZXN0L2NsYXNzaWMvZW5hYmxlLWFjY2Vzcy1sb2dzLmh0bWwjYXR0YWNoLWJ1Y2tldC1wb2xpY3lcbi8vIEFueSBub3QgbGlzdGVkIHJlZ2lvbnMgdXNlIHRoZSBzZXJ2aWNlIHByaW5jaXBhbCBcImxvZ2RlbGl2ZXJ5LmVsYXN0aWNsb2FkYmFsYW5jaW5nLmFtYXpvbmF3cy5jb21cIlxuZXhwb3J0IGNvbnN0IEVMQlYyX0FDQ09VTlRTOiB7IFtyZWdpb246IHN0cmluZ106IHN0cmluZyB9ID0ge1xuICBcImFmLXNvdXRoLTFcIjogXCIwOTgzNjkyMTY1OTNcIixcbiAgXCJhcC1lYXN0LTFcIjogXCI3NTQzNDQ0NDg2NDhcIixcbiAgXCJhcC1ub3J0aGVhc3QtMVwiOiBcIjU4MjMxODU2MDg2NFwiLFxuICBcImFwLW5vcnRoZWFzdC0yXCI6IFwiNjAwNzM0NTc1ODg3XCIsXG4gIFwiYXAtbm9ydGhlYXN0LTNcIjogXCIzODM1OTc0NzczMzFcIixcbiAgXCJhcC1zb3V0aC0xXCI6IFwiNzE4NTA0NDI4Mzc4XCIsXG4gIFwiYXAtc291dGhlYXN0LTFcIjogXCIxMTQ3NzQxMzE0NTBcIixcbiAgXCJhcC1zb3V0aGVhc3QtMlwiOiBcIjc4MzIyNTMxOTI2NlwiLFxuICBcImFwLXNvdXRoZWFzdC0zXCI6IFwiNTg5Mzc5OTYzNTgwXCIsXG4gIFwiY2EtY2VudHJhbC0xXCI6IFwiOTg1NjY2NjA5MjUxXCIsXG4gIFwiY24tbm9ydGgtMVwiOiBcIjYzODEwMjE0Njk5M1wiLFxuICBcImNuLW5vcnRod2VzdC0xXCI6IFwiMDM3NjA0NzAxMzQwXCIsXG4gIFwiZXUtY2VudHJhbC0xXCI6IFwiMDU0Njc2ODIwOTI4XCIsXG4gIFwiZXUtbm9ydGgtMVwiOiBcIjg5NzgyMjk2NzA2MlwiLFxuICBcImV1LXNvdXRoLTFcIjogXCI2MzU2MzEyMzIxMjdcIixcbiAgXCJldS13ZXN0LTFcIjogXCIxNTY0NjA2MTI4MDZcIixcbiAgXCJldS13ZXN0LTJcIjogXCI2NTI3MTE1MDQ0MTZcIixcbiAgXCJldS13ZXN0LTNcIjogXCIwMDk5OTY0NTc2NjdcIixcbiAgXCJtZS1zb3V0aC0xXCI6IFwiMDc2Njc0NTcwMjI1XCIsXG4gIFwic2EtZWFzdC0xXCI6IFwiNTA3MjQxNTI4NTE3XCIsXG4gIFwidXMtZWFzdC0xXCI6IFwiMTI3MzExOTIzMDIxXCIsXG4gIFwidXMtZWFzdC0yXCI6IFwiMDMzNjc3OTk0MjQwXCIsXG4gIFwidXMtZ292LWVhc3QtMVwiOiBcIjE5MDU2MDM5MTYzNVwiLFxuICBcInVzLWdvdi13ZXN0LTFcIjogXCIwNDg1OTEwMTE1ODRcIixcbiAgXCJ1cy1pc28tZWFzdC0xXCI6IFwiNzcwMzYzMDYzNDc1XCIsXG4gIFwidXMtaXNvYi1lYXN0LTFcIjogXCI3NDA3MzQ1MjEzMzlcIixcbiAgXCJ1cy1pc28td2VzdC0xXCI6IFwiMTIxMDYyODc3NjQ3XCIsXG4gIFwidXMtd2VzdC0xXCI6IFwiMDI3NDM0NzQyOTgwXCIsXG4gIFwidXMtd2VzdC0yXCI6IFwiNzk3ODczOTQ2MTk0XCIsXG59O1xuXG4vKipcbiAqIFRoZSBhY2NvdW50IElEIGZvciBFTEJ2MiBpbiB0aGlzIHJlZ2lvblxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RWxidjJBY2NvdW50KHJlZ2lvbjogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgcmV0dXJuIEVMQlYyX0FDQ09VTlRTW3JlZ2lvbl07XG59XG4iXX0=