terraconstructs 0.0.8

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 (680) hide show
  1. package/.envrc +5 -0
  2. package/.jsii +79780 -0
  3. package/.mise.toml +8 -0
  4. package/.nvmrc +1 -0
  5. package/.terraform-version +1 -0
  6. package/.terraform.d/plugin-cache/.gitignore +5 -0
  7. package/LICENSE +674 -0
  8. package/NOTICE.txt +12 -0
  9. package/README.md +42 -0
  10. package/bun.lockb +0 -0
  11. package/go.mod +158 -0
  12. package/go.sum +1206 -0
  13. package/lib/aws/arn.d.ts +187 -0
  14. package/lib/aws/arn.js +383 -0
  15. package/lib/aws/aws-construct.d.ts +76 -0
  16. package/lib/aws/aws-construct.js +38 -0
  17. package/lib/aws/aws-stack.d.ts +201 -0
  18. package/lib/aws/aws-stack.js +303 -0
  19. package/lib/aws/cloudwatch/actions/ec2.d.ts +35 -0
  20. package/lib/aws/cloudwatch/actions/ec2.js +48 -0
  21. package/lib/aws/cloudwatch/actions/index.d.ts +2 -0
  22. package/lib/aws/cloudwatch/actions/index.js +24 -0
  23. package/lib/aws/cloudwatch/actions/lambda.d.ts +16 -0
  24. package/lib/aws/cloudwatch/actions/lambda.js +48 -0
  25. package/lib/aws/cloudwatch/alarm-action.d.ts +23 -0
  26. package/lib/aws/cloudwatch/alarm-action.js +4 -0
  27. package/lib/aws/cloudwatch/alarm-base.d.ts +84 -0
  28. package/lib/aws/cloudwatch/alarm-base.js +64 -0
  29. package/lib/aws/cloudwatch/alarm-rule.d.ts +61 -0
  30. package/lib/aws/cloudwatch/alarm-rule.js +116 -0
  31. package/lib/aws/cloudwatch/alarm-status-widget.d.ts +77 -0
  32. package/lib/aws/cloudwatch/alarm-status-widget.js +62 -0
  33. package/lib/aws/cloudwatch/alarm.d.ts +158 -0
  34. package/lib/aws/cloudwatch/alarm.js +410 -0
  35. package/lib/aws/cloudwatch/composite-alarm.d.ts +88 -0
  36. package/lib/aws/cloudwatch/composite-alarm.js +98 -0
  37. package/lib/aws/cloudwatch/dashboard.d.ts +137 -0
  38. package/lib/aws/cloudwatch/dashboard.js +141 -0
  39. package/lib/aws/cloudwatch/data-protection-policy.d.ts +184 -0
  40. package/lib/aws/cloudwatch/data-protection-policy.js +246 -0
  41. package/lib/aws/cloudwatch/graph.d.ts +792 -0
  42. package/lib/aws/cloudwatch/graph.js +537 -0
  43. package/lib/aws/cloudwatch/index.d.ts +26 -0
  44. package/lib/aws/cloudwatch/index.js +49 -0
  45. package/lib/aws/cloudwatch/layout.d.ts +89 -0
  46. package/lib/aws/cloudwatch/layout.js +147 -0
  47. package/lib/aws/cloudwatch/log-destinations/index.d.ts +2 -0
  48. package/lib/aws/cloudwatch/log-destinations/index.js +20 -0
  49. package/lib/aws/cloudwatch/log-destinations/kinesis.d.ts +29 -0
  50. package/lib/aws/cloudwatch/log-destinations/kinesis.js +52 -0
  51. package/lib/aws/cloudwatch/log-destinations/lambda.d.ts +22 -0
  52. package/lib/aws/cloudwatch/log-destinations/lambda.js +46 -0
  53. package/lib/aws/cloudwatch/log-group.d.ts +453 -0
  54. package/lib/aws/cloudwatch/log-group.js +350 -0
  55. package/lib/aws/cloudwatch/log-query.d.ts +91 -0
  56. package/lib/aws/cloudwatch/log-query.js +85 -0
  57. package/lib/aws/cloudwatch/log-stream.d.ts +57 -0
  58. package/lib/aws/cloudwatch/log-stream.js +57 -0
  59. package/lib/aws/cloudwatch/metric-filter.d.ts +30 -0
  60. package/lib/aws/cloudwatch/metric-filter.js +69 -0
  61. package/lib/aws/cloudwatch/metric-types.d.ts +407 -0
  62. package/lib/aws/cloudwatch/metric-types.js +151 -0
  63. package/lib/aws/cloudwatch/metric.d.ts +492 -0
  64. package/lib/aws/cloudwatch/metric.js +493 -0
  65. package/lib/aws/cloudwatch/pattern.d.ts +195 -0
  66. package/lib/aws/cloudwatch/pattern.js +412 -0
  67. package/lib/aws/cloudwatch/policy.d.ts +43 -0
  68. package/lib/aws/cloudwatch/policy.js +50 -0
  69. package/lib/aws/cloudwatch/private/drop-empty-object-at-the-end-of-an-array-token.d.ts +14 -0
  70. package/lib/aws/cloudwatch/private/drop-empty-object-at-the-end-of-an-array-token.js +37 -0
  71. package/lib/aws/cloudwatch/private/env-tokens.d.ts +8 -0
  72. package/lib/aws/cloudwatch/private/env-tokens.js +48 -0
  73. package/lib/aws/cloudwatch/private/metric-util.d.ts +60 -0
  74. package/lib/aws/cloudwatch/private/metric-util.js +132 -0
  75. package/lib/aws/cloudwatch/private/object.d.ts +1 -0
  76. package/lib/aws/cloudwatch/private/object.js +18 -0
  77. package/lib/aws/cloudwatch/private/rendering.d.ts +60 -0
  78. package/lib/aws/cloudwatch/private/rendering.js +181 -0
  79. package/lib/aws/cloudwatch/private/statistic.d.ts +51 -0
  80. package/lib/aws/cloudwatch/private/statistic.js +176 -0
  81. package/lib/aws/cloudwatch/query-definition.d.ts +150 -0
  82. package/lib/aws/cloudwatch/query-definition.js +114 -0
  83. package/lib/aws/cloudwatch/stats.d.ts +150 -0
  84. package/lib/aws/cloudwatch/stats.js +207 -0
  85. package/lib/aws/cloudwatch/subscription-filter.d.ts +75 -0
  86. package/lib/aws/cloudwatch/subscription-filter.js +51 -0
  87. package/lib/aws/cloudwatch/text.d.ts +52 -0
  88. package/lib/aws/cloudwatch/text.js +53 -0
  89. package/lib/aws/cloudwatch/variable.d.ts +156 -0
  90. package/lib/aws/cloudwatch/variable.js +156 -0
  91. package/lib/aws/cloudwatch/widget.d.ts +62 -0
  92. package/lib/aws/cloudwatch/widget.js +45 -0
  93. package/lib/aws/compute/activity.d.ts +81 -0
  94. package/lib/aws/compute/activity.js +132 -0
  95. package/lib/aws/compute/architecture.d.ts +33 -0
  96. package/lib/aws/compute/architecture.js +42 -0
  97. package/lib/aws/compute/chain.d.ts +52 -0
  98. package/lib/aws/compute/chain.js +68 -0
  99. package/lib/aws/compute/condition.d.ts +202 -0
  100. package/lib/aws/compute/condition.js +409 -0
  101. package/lib/aws/compute/event-invoke-config.d.ts +74 -0
  102. package/lib/aws/compute/event-invoke-config.js +63 -0
  103. package/lib/aws/compute/event-source-filter.d.ts +64 -0
  104. package/lib/aws/compute/event-source-filter.js +86 -0
  105. package/lib/aws/compute/event-source-mapping.d.ts +310 -0
  106. package/lib/aws/compute/event-source-mapping.js +267 -0
  107. package/lib/aws/compute/event-sources/index.d.ts +4 -0
  108. package/lib/aws/compute/event-sources/index.js +28 -0
  109. package/lib/aws/compute/event-sources/s3-onfailure-destination.d.ts +13 -0
  110. package/lib/aws/compute/event-sources/s3-onfailure-destination.js +26 -0
  111. package/lib/aws/compute/event-sources/s3.d.ts +24 -0
  112. package/lib/aws/compute/event-sources/s3.js +25 -0
  113. package/lib/aws/compute/event-sources/sqs-dlq.d.ts +13 -0
  114. package/lib/aws/compute/event-sources/sqs-dlq.js +26 -0
  115. package/lib/aws/compute/event-sources/sqs.d.ts +75 -0
  116. package/lib/aws/compute/event-sources/sqs.js +84 -0
  117. package/lib/aws/compute/fields.d.ts +367 -0
  118. package/lib/aws/compute/fields.js +546 -0
  119. package/lib/aws/compute/function-alias.d.ts +148 -0
  120. package/lib/aws/compute/function-alias.js +176 -0
  121. package/lib/aws/compute/function-base.d.ts +314 -0
  122. package/lib/aws/compute/function-base.js +421 -0
  123. package/lib/aws/compute/function-destination.d.ts +42 -0
  124. package/lib/aws/compute/function-destination.js +18 -0
  125. package/lib/aws/compute/function-destinations/event-bridge.d.ts +19 -0
  126. package/lib/aws/compute/function-destinations/event-bridge.js +46 -0
  127. package/lib/aws/compute/function-destinations/function.d.ts +34 -0
  128. package/lib/aws/compute/function-destinations/function.js +55 -0
  129. package/lib/aws/compute/function-destinations/index.d.ts +3 -0
  130. package/lib/aws/compute/function-destinations/index.js +22 -0
  131. package/lib/aws/compute/function-destinations/sqs.d.ts +14 -0
  132. package/lib/aws/compute/function-destinations/sqs.js +27 -0
  133. package/lib/aws/compute/function-nodejs.d.ts +55 -0
  134. package/lib/aws/compute/function-nodejs.js +70 -0
  135. package/lib/aws/compute/function-permission.d.ts +83 -0
  136. package/lib/aws/compute/function-permission.js +3 -0
  137. package/lib/aws/compute/function-url.d.ts +210 -0
  138. package/lib/aws/compute/function-url.js +148 -0
  139. package/lib/aws/compute/function-vpc-config.generated.d.ts +36 -0
  140. package/lib/aws/compute/function-vpc-config.generated.js +3 -0
  141. package/lib/aws/compute/function.d.ts +492 -0
  142. package/lib/aws/compute/function.js +692 -0
  143. package/lib/aws/compute/index.d.ts +42 -0
  144. package/lib/aws/compute/index.js +64 -0
  145. package/lib/aws/compute/private/intrinstics.d.ts +86 -0
  146. package/lib/aws/compute/private/intrinstics.js +220 -0
  147. package/lib/aws/compute/private/json-path.d.ts +57 -0
  148. package/lib/aws/compute/private/json-path.js +351 -0
  149. package/lib/aws/compute/private/util.d.ts +1 -0
  150. package/lib/aws/compute/private/util.js +38 -0
  151. package/lib/aws/compute/state-graph.d.ts +100 -0
  152. package/lib/aws/compute/state-graph.js +177 -0
  153. package/lib/aws/compute/state-machine-fragment.d.ts +61 -0
  154. package/lib/aws/compute/state-machine-fragment.js +56 -0
  155. package/lib/aws/compute/state-machine.d.ts +323 -0
  156. package/lib/aws/compute/state-machine.js +392 -0
  157. package/lib/aws/compute/states/choice.d.ts +94 -0
  158. package/lib/aws/compute/states/choice.js +81 -0
  159. package/lib/aws/compute/states/custom-state.d.ts +55 -0
  160. package/lib/aws/compute/states/custom-state.js +114 -0
  161. package/lib/aws/compute/states/distributed-map/item-batcher.d.ts +64 -0
  162. package/lib/aws/compute/states/distributed-map/item-batcher.js +58 -0
  163. package/lib/aws/compute/states/distributed-map/item-reader.d.ts +256 -0
  164. package/lib/aws/compute/states/distributed-map/item-reader.js +253 -0
  165. package/lib/aws/compute/states/distributed-map/result-writer.d.ts +41 -0
  166. package/lib/aws/compute/states/distributed-map/result-writer.js +66 -0
  167. package/lib/aws/compute/states/distributed-map.d.ts +153 -0
  168. package/lib/aws/compute/states/distributed-map.js +207 -0
  169. package/lib/aws/compute/states/fail.d.ts +74 -0
  170. package/lib/aws/compute/states/fail.js +83 -0
  171. package/lib/aws/compute/states/map-base.d.ts +145 -0
  172. package/lib/aws/compute/states/map-base.js +109 -0
  173. package/lib/aws/compute/states/map.d.ts +76 -0
  174. package/lib/aws/compute/states/map.js +110 -0
  175. package/lib/aws/compute/states/parallel.d.ts +113 -0
  176. package/lib/aws/compute/states/parallel.js +100 -0
  177. package/lib/aws/compute/states/pass.d.ts +122 -0
  178. package/lib/aws/compute/states/pass.js +99 -0
  179. package/lib/aws/compute/states/private/state-type.d.ts +13 -0
  180. package/lib/aws/compute/states/private/state-type.js +19 -0
  181. package/lib/aws/compute/states/state.d.ts +276 -0
  182. package/lib/aws/compute/states/state.js +482 -0
  183. package/lib/aws/compute/states/succeed.d.ts +51 -0
  184. package/lib/aws/compute/states/succeed.js +32 -0
  185. package/lib/aws/compute/states/task-base.d.ts +225 -0
  186. package/lib/aws/compute/states/task-base.js +160 -0
  187. package/lib/aws/compute/states/task.d.ts +127 -0
  188. package/lib/aws/compute/states/task.js +92 -0
  189. package/lib/aws/compute/states/wait.d.ts +78 -0
  190. package/lib/aws/compute/states/wait.js +90 -0
  191. package/lib/aws/compute/step-functions-task.d.ts +78 -0
  192. package/lib/aws/compute/step-functions-task.js +27 -0
  193. package/lib/aws/compute/task-credentials.d.ts +45 -0
  194. package/lib/aws/compute/task-credentials.js +52 -0
  195. package/lib/aws/compute/task-input.d.ts +86 -0
  196. package/lib/aws/compute/task-input.js +107 -0
  197. package/lib/aws/compute/tasks/aws-sdk/call-aws-service.d.ts +73 -0
  198. package/lib/aws/compute/tasks/aws-sdk/call-aws-service.js +69 -0
  199. package/lib/aws/compute/tasks/eventbridge/put-events.d.ts +74 -0
  200. package/lib/aws/compute/tasks/eventbridge/put-events.js +94 -0
  201. package/lib/aws/compute/tasks/http/invoke.d.ts +104 -0
  202. package/lib/aws/compute/tasks/http/invoke.js +117 -0
  203. package/lib/aws/compute/tasks/index.d.ts +7 -0
  204. package/lib/aws/compute/tasks/index.js +42 -0
  205. package/lib/aws/compute/tasks/lambda/invoke.d.ts +106 -0
  206. package/lib/aws/compute/tasks/lambda/invoke.js +125 -0
  207. package/lib/aws/compute/tasks/private/task-utils.d.ts +8 -0
  208. package/lib/aws/compute/tasks/private/task-utils.js +36 -0
  209. package/lib/aws/compute/tasks/resource-arn-suffix.d.ts +3 -0
  210. package/lib/aws/compute/tasks/resource-arn-suffix.js +25 -0
  211. package/lib/aws/compute/tasks/sqs/send-message.d.ts +62 -0
  212. package/lib/aws/compute/tasks/sqs/send-message.js +70 -0
  213. package/lib/aws/compute/tasks/stepfunctions/invoke-activity.d.ts +36 -0
  214. package/lib/aws/compute/tasks/stepfunctions/invoke-activity.js +45 -0
  215. package/lib/aws/compute/tasks/stepfunctions/start-execution.d.ts +63 -0
  216. package/lib/aws/compute/tasks/stepfunctions/start-execution.js +123 -0
  217. package/lib/aws/compute/types.d.ts +214 -0
  218. package/lib/aws/compute/types.js +103 -0
  219. package/lib/aws/compute/util.d.ts +12 -0
  220. package/lib/aws/compute/util.js +29 -0
  221. package/lib/aws/edge/certificate.d.ts +144 -0
  222. package/lib/aws/edge/certificate.js +191 -0
  223. package/lib/aws/edge/distribution.d.ts +505 -0
  224. package/lib/aws/edge/distribution.js +444 -0
  225. package/lib/aws/edge/dns-alias-record-targets.d.ts +29 -0
  226. package/lib/aws/edge/dns-alias-record-targets.js +46 -0
  227. package/lib/aws/edge/dns-record.d.ts +536 -0
  228. package/lib/aws/edge/dns-record.js +532 -0
  229. package/lib/aws/edge/dns-zone.d.ts +169 -0
  230. package/lib/aws/edge/dns-zone.js +149 -0
  231. package/lib/aws/edge/function.d.ts +185 -0
  232. package/lib/aws/edge/function.js +141 -0
  233. package/lib/aws/edge/index.d.ts +8 -0
  234. package/lib/aws/edge/index.js +25 -0
  235. package/lib/aws/edge/key-value-store.d.ts +162 -0
  236. package/lib/aws/edge/key-value-store.js +163 -0
  237. package/lib/aws/edge/origin.d.ts +160 -0
  238. package/lib/aws/edge/origin.js +245 -0
  239. package/lib/aws/encryption/alias.d.ts +137 -0
  240. package/lib/aws/encryption/alias.js +216 -0
  241. package/lib/aws/encryption/index.d.ts +4 -0
  242. package/lib/aws/encryption/index.js +21 -0
  243. package/lib/aws/encryption/key-lookup.d.ts +11 -0
  244. package/lib/aws/encryption/key-lookup.js +4 -0
  245. package/lib/aws/encryption/key.d.ts +461 -0
  246. package/lib/aws/encryption/key.js +586 -0
  247. package/lib/aws/encryption/private/perms.d.ts +5 -0
  248. package/lib/aws/encryption/private/perms.js +30 -0
  249. package/lib/aws/encryption/via-service-principal.d.ts +11 -0
  250. package/lib/aws/encryption/via-service-principal.js +39 -0
  251. package/lib/aws/iam/grant.d.ts +221 -0
  252. package/lib/aws/iam/grant.js +239 -0
  253. package/lib/aws/iam/identity-base.d.ts +20 -0
  254. package/lib/aws/iam/identity-base.js +3 -0
  255. package/lib/aws/iam/index.d.ts +16 -0
  256. package/lib/aws/iam/index.js +34 -0
  257. package/lib/aws/iam/managed-policy.d.ts +227 -0
  258. package/lib/aws/iam/managed-policy.js +237 -0
  259. package/lib/aws/iam/oidc-provider.d.ts +120 -0
  260. package/lib/aws/iam/oidc-provider.js +82 -0
  261. package/lib/aws/iam/policy-document-config.generated.d.ts +78 -0
  262. package/lib/aws/iam/policy-document-config.generated.js +3 -0
  263. package/lib/aws/iam/policy-document.d.ts +150 -0
  264. package/lib/aws/iam/policy-document.js +172 -0
  265. package/lib/aws/iam/policy-statement-props.generated.d.ts +55 -0
  266. package/lib/aws/iam/policy-statement-props.generated.js +3 -0
  267. package/lib/aws/iam/policy-statement.d.ts +451 -0
  268. package/lib/aws/iam/policy-statement.js +947 -0
  269. package/lib/aws/iam/policy.d.ts +122 -0
  270. package/lib/aws/iam/policy.js +192 -0
  271. package/lib/aws/iam/principals.d.ts +668 -0
  272. package/lib/aws/iam/principals.js +1032 -0
  273. package/lib/aws/iam/private/adapter.d.ts +21 -0
  274. package/lib/aws/iam/private/adapter.js +51 -0
  275. package/lib/aws/iam/private/assume-role-policy.d.ts +8 -0
  276. package/lib/aws/iam/private/assume-role-policy.js +27 -0
  277. package/lib/aws/iam/private/comparable-principal.d.ts +6 -0
  278. package/lib/aws/iam/private/comparable-principal.js +20 -0
  279. package/lib/aws/iam/private/immutable-role.d.ts +43 -0
  280. package/lib/aws/iam/private/immutable-role.js +76 -0
  281. package/lib/aws/iam/private/imported-role.d.ts +49 -0
  282. package/lib/aws/iam/private/imported-role.js +103 -0
  283. package/lib/aws/iam/private/merge-statements.d.ts +44 -0
  284. package/lib/aws/iam/private/merge-statements.js +214 -0
  285. package/lib/aws/iam/private/postprocess-policy-document.d.ts +15 -0
  286. package/lib/aws/iam/private/postprocess-policy-document.js +102 -0
  287. package/lib/aws/iam/private/util.d.ts +37 -0
  288. package/lib/aws/iam/private/util.js +87 -0
  289. package/lib/aws/iam/role.d.ts +425 -0
  290. package/lib/aws/iam/role.js +407 -0
  291. package/lib/aws/iam/saml-provider.d.ts +79 -0
  292. package/lib/aws/iam/saml-provider.js +79 -0
  293. package/lib/aws/iam/unknown-principal.d.ts +32 -0
  294. package/lib/aws/iam/unknown-principal.js +45 -0
  295. package/lib/aws/iam/utils.d.ts +12 -0
  296. package/lib/aws/iam/utils.js +41 -0
  297. package/lib/aws/index.d.ts +13 -0
  298. package/lib/aws/index.js +34 -0
  299. package/lib/aws/log-retention.d.ts +97 -0
  300. package/lib/aws/log-retention.js +103 -0
  301. package/lib/aws/network/index.d.ts +4 -0
  302. package/lib/aws/network/index.js +21 -0
  303. package/lib/aws/network/network.d.ts +77 -0
  304. package/lib/aws/network/network.js +3 -0
  305. package/lib/aws/network/simple-ipv4-vpc.d.ts +84 -0
  306. package/lib/aws/network/simple-ipv4-vpc.js +236 -0
  307. package/lib/aws/network/subnet-group.d.ts +42 -0
  308. package/lib/aws/network/subnet-group.js +72 -0
  309. package/lib/aws/network/subnet.d.ts +95 -0
  310. package/lib/aws/network/subnet.js +123 -0
  311. package/lib/aws/notify/archive.d.ts +77 -0
  312. package/lib/aws/notify/archive.js +62 -0
  313. package/lib/aws/notify/connection.d.ts +276 -0
  314. package/lib/aws/notify/connection.js +261 -0
  315. package/lib/aws/notify/event-bus.d.ts +298 -0
  316. package/lib/aws/notify/event-bus.js +326 -0
  317. package/lib/aws/notify/event-pattern.d.ts +220 -0
  318. package/lib/aws/notify/event-pattern.js +197 -0
  319. package/lib/aws/notify/index.d.ts +15 -0
  320. package/lib/aws/notify/index.js +35 -0
  321. package/lib/aws/notify/input.d.ts +126 -0
  322. package/lib/aws/notify/input.js +282 -0
  323. package/lib/aws/notify/kinesis-canned-metrics.generated.d.ts +68 -0
  324. package/lib/aws/notify/kinesis-canned-metrics.generated.js +103 -0
  325. package/lib/aws/notify/kinesis-fixed-canned-metrics.d.ts +195 -0
  326. package/lib/aws/notify/kinesis-fixed-canned-metrics.js +155 -0
  327. package/lib/aws/notify/kinesis-stream.d.ts +705 -0
  328. package/lib/aws/notify/kinesis-stream.js +541 -0
  329. package/lib/aws/notify/on-event-options.d.ts +54 -0
  330. package/lib/aws/notify/on-event-options.js +3 -0
  331. package/lib/aws/notify/queue-config.generated.d.ts +85 -0
  332. package/lib/aws/notify/queue-config.generated.js +3 -0
  333. package/lib/aws/notify/queue-policy.d.ts +35 -0
  334. package/lib/aws/notify/queue-policy.js +39 -0
  335. package/lib/aws/notify/queue.d.ts +355 -0
  336. package/lib/aws/notify/queue.js +305 -0
  337. package/lib/aws/notify/resource-policy.d.ts +41 -0
  338. package/lib/aws/notify/resource-policy.js +43 -0
  339. package/lib/aws/notify/rule.d.ts +153 -0
  340. package/lib/aws/notify/rule.js +227 -0
  341. package/lib/aws/notify/schedule.d.ts +83 -0
  342. package/lib/aws/notify/schedule.js +116 -0
  343. package/lib/aws/notify/target.d.ts +102 -0
  344. package/lib/aws/notify/target.js +3 -0
  345. package/lib/aws/notify/targets/event-bus.d.ts +39 -0
  346. package/lib/aws/notify/targets/event-bus.js +40 -0
  347. package/lib/aws/notify/targets/function.d.ts +31 -0
  348. package/lib/aws/notify/targets/function.js +36 -0
  349. package/lib/aws/notify/targets/index.d.ts +6 -0
  350. package/lib/aws/notify/targets/index.js +37 -0
  351. package/lib/aws/notify/targets/log-group.d.ts +89 -0
  352. package/lib/aws/notify/targets/log-group.js +110 -0
  353. package/lib/aws/notify/targets/sqs.d.ts +45 -0
  354. package/lib/aws/notify/targets/sqs.js +73 -0
  355. package/lib/aws/notify/targets/state-machine.d.ts +36 -0
  356. package/lib/aws/notify/targets/state-machine.js +39 -0
  357. package/lib/aws/notify/targets/util.d.ts +71 -0
  358. package/lib/aws/notify/targets/util.js +130 -0
  359. package/lib/aws/notify/util.d.ts +13 -0
  360. package/lib/aws/notify/util.js +69 -0
  361. package/lib/aws/provider-config.generated.d.ts +220 -0
  362. package/lib/aws/provider-config.generated.js +3 -0
  363. package/lib/aws/storage/bucket-destination.d.ts +41 -0
  364. package/lib/aws/storage/bucket-destination.js +13 -0
  365. package/lib/aws/storage/bucket-notifications.d.ts +58 -0
  366. package/lib/aws/storage/bucket-notifications.js +169 -0
  367. package/lib/aws/storage/bucket-perms.d.ts +9 -0
  368. package/lib/aws/storage/bucket-perms.js +33 -0
  369. package/lib/aws/storage/bucket-policy.d.ts +51 -0
  370. package/lib/aws/storage/bucket-policy.js +53 -0
  371. package/lib/aws/storage/bucket-source.d.ts +41 -0
  372. package/lib/aws/storage/bucket-source.js +79 -0
  373. package/lib/aws/storage/bucket.d.ts +941 -0
  374. package/lib/aws/storage/bucket.js +869 -0
  375. package/lib/aws/storage/cors-config.generated.d.ts +57 -0
  376. package/lib/aws/storage/cors-config.generated.js +3 -0
  377. package/lib/aws/storage/cors-rule-config.generated.d.ts +38 -0
  378. package/lib/aws/storage/cors-rule-config.generated.js +3 -0
  379. package/lib/aws/storage/index.d.ts +12 -0
  380. package/lib/aws/storage/index.js +31 -0
  381. package/lib/aws/storage/lifecycle-config.generated.d.ts +55 -0
  382. package/lib/aws/storage/lifecycle-config.generated.js +3 -0
  383. package/lib/aws/storage/notification-targets/function.d.ts +11 -0
  384. package/lib/aws/storage/notification-targets/function.js +48 -0
  385. package/lib/aws/storage/notification-targets/index.d.ts +2 -0
  386. package/lib/aws/storage/notification-targets/index.js +21 -0
  387. package/lib/aws/storage/notification-targets/queue.d.ts +15 -0
  388. package/lib/aws/storage/notification-targets/queue.js +58 -0
  389. package/lib/aws/storage/origin-access-identity.d.ts +91 -0
  390. package/lib/aws/storage/origin-access-identity.js +76 -0
  391. package/lib/aws/storage/util.d.ts +40 -0
  392. package/lib/aws/storage/util.js +85 -0
  393. package/lib/aws/storage/website-config.generated.d.ts +73 -0
  394. package/lib/aws/storage/website-config.generated.js +3 -0
  395. package/lib/aws/util.d.ts +4 -0
  396. package/lib/aws/util.js +25 -0
  397. package/lib/construct-base.d.ts +69 -0
  398. package/lib/construct-base.js +89 -0
  399. package/lib/duration.d.ts +160 -0
  400. package/lib/duration.js +327 -0
  401. package/lib/index.d.ts +5 -0
  402. package/lib/index.js +24 -0
  403. package/lib/private/index.d.ts +2 -0
  404. package/lib/private/index.js +19 -0
  405. package/lib/private/terraform-dependables-aspect.d.ts +20 -0
  406. package/lib/private/terraform-dependables-aspect.js +95 -0
  407. package/lib/private/unique-resource-name.d.ts +9 -0
  408. package/lib/private/unique-resource-name.js +145 -0
  409. package/lib/size.d.ts +146 -0
  410. package/lib/size.js +220 -0
  411. package/lib/stack-base.d.ts +188 -0
  412. package/lib/stack-base.js +183 -0
  413. package/lib/token.d.ts +32 -0
  414. package/lib/token.js +54 -0
  415. package/node_modules/camel-case/LICENSE +21 -0
  416. package/node_modules/camel-case/README.md +47 -0
  417. package/node_modules/camel-case/dist/index.d.ts +5 -0
  418. package/node_modules/camel-case/dist/index.js +23 -0
  419. package/node_modules/camel-case/dist/index.js.map +1 -0
  420. package/node_modules/camel-case/dist/index.spec.d.ts +1 -0
  421. package/node_modules/camel-case/dist/index.spec.js +26 -0
  422. package/node_modules/camel-case/dist/index.spec.js.map +1 -0
  423. package/node_modules/camel-case/dist.es2015/index.d.ts +5 -0
  424. package/node_modules/camel-case/dist.es2015/index.js +17 -0
  425. package/node_modules/camel-case/dist.es2015/index.js.map +1 -0
  426. package/node_modules/camel-case/dist.es2015/index.spec.d.ts +1 -0
  427. package/node_modules/camel-case/dist.es2015/index.spec.js +24 -0
  428. package/node_modules/camel-case/dist.es2015/index.spec.js.map +1 -0
  429. package/node_modules/camel-case/package.json +89 -0
  430. package/node_modules/capital-case/LICENSE +21 -0
  431. package/node_modules/capital-case/README.md +37 -0
  432. package/node_modules/capital-case/dist/index.d.ts +4 -0
  433. package/node_modules/capital-case/dist/index.js +16 -0
  434. package/node_modules/capital-case/dist/index.js.map +1 -0
  435. package/node_modules/capital-case/dist/index.spec.d.ts +1 -0
  436. package/node_modules/capital-case/dist/index.spec.js +24 -0
  437. package/node_modules/capital-case/dist/index.spec.js.map +1 -0
  438. package/node_modules/capital-case/dist.es2015/index.d.ts +4 -0
  439. package/node_modules/capital-case/dist.es2015/index.js +11 -0
  440. package/node_modules/capital-case/dist.es2015/index.js.map +1 -0
  441. package/node_modules/capital-case/dist.es2015/index.spec.d.ts +1 -0
  442. package/node_modules/capital-case/dist.es2015/index.spec.js +22 -0
  443. package/node_modules/capital-case/dist.es2015/index.spec.js.map +1 -0
  444. package/node_modules/capital-case/package.json +90 -0
  445. package/node_modules/change-case/LICENSE +21 -0
  446. package/node_modules/change-case/README.md +44 -0
  447. package/node_modules/change-case/dist/index.d.ts +11 -0
  448. package/node_modules/change-case/dist/index.js +15 -0
  449. package/node_modules/change-case/dist/index.js.map +1 -0
  450. package/node_modules/change-case/dist/index.spec.d.ts +1 -0
  451. package/node_modules/change-case/dist/index.spec.js +9 -0
  452. package/node_modules/change-case/dist/index.spec.js.map +1 -0
  453. package/node_modules/change-case/dist.es2015/index.d.ts +11 -0
  454. package/node_modules/change-case/dist.es2015/index.js +12 -0
  455. package/node_modules/change-case/dist.es2015/index.js.map +1 -0
  456. package/node_modules/change-case/dist.es2015/index.spec.d.ts +1 -0
  457. package/node_modules/change-case/dist.es2015/index.spec.js +7 -0
  458. package/node_modules/change-case/dist.es2015/index.spec.js.map +1 -0
  459. package/node_modules/change-case/package.json +101 -0
  460. package/node_modules/constant-case/LICENSE +21 -0
  461. package/node_modules/constant-case/README.md +37 -0
  462. package/node_modules/constant-case/dist/index.d.ts +3 -0
  463. package/node_modules/constant-case/dist/index.js +12 -0
  464. package/node_modules/constant-case/dist/index.js.map +1 -0
  465. package/node_modules/constant-case/dist/index.spec.d.ts +1 -0
  466. package/node_modules/constant-case/dist/index.spec.js +26 -0
  467. package/node_modules/constant-case/dist/index.spec.js.map +1 -0
  468. package/node_modules/constant-case/dist.es2015/index.d.ts +3 -0
  469. package/node_modules/constant-case/dist.es2015/index.js +8 -0
  470. package/node_modules/constant-case/dist.es2015/index.js.map +1 -0
  471. package/node_modules/constant-case/dist.es2015/index.spec.d.ts +1 -0
  472. package/node_modules/constant-case/dist.es2015/index.spec.js +24 -0
  473. package/node_modules/constant-case/dist.es2015/index.spec.js.map +1 -0
  474. package/node_modules/constant-case/package.json +90 -0
  475. package/node_modules/dot-case/LICENSE +21 -0
  476. package/node_modules/dot-case/README.md +37 -0
  477. package/node_modules/dot-case/dist/index.d.ts +3 -0
  478. package/node_modules/dot-case/dist/index.js +11 -0
  479. package/node_modules/dot-case/dist/index.js.map +1 -0
  480. package/node_modules/dot-case/dist/index.spec.d.ts +1 -0
  481. package/node_modules/dot-case/dist/index.spec.js +26 -0
  482. package/node_modules/dot-case/dist/index.spec.js.map +1 -0
  483. package/node_modules/dot-case/dist.es2015/index.d.ts +3 -0
  484. package/node_modules/dot-case/dist.es2015/index.js +7 -0
  485. package/node_modules/dot-case/dist.es2015/index.js.map +1 -0
  486. package/node_modules/dot-case/dist.es2015/index.spec.d.ts +1 -0
  487. package/node_modules/dot-case/dist.es2015/index.spec.js +24 -0
  488. package/node_modules/dot-case/dist.es2015/index.spec.js.map +1 -0
  489. package/node_modules/dot-case/package.json +89 -0
  490. package/node_modules/esbuild-wasm/LICENSE.md +21 -0
  491. package/node_modules/esbuild-wasm/README.md +3 -0
  492. package/node_modules/esbuild-wasm/bin/esbuild +91 -0
  493. package/node_modules/esbuild-wasm/esbuild.wasm +0 -0
  494. package/node_modules/esbuild-wasm/esm/browser.d.ts +705 -0
  495. package/node_modules/esbuild-wasm/esm/browser.js +2370 -0
  496. package/node_modules/esbuild-wasm/esm/browser.min.js +20 -0
  497. package/node_modules/esbuild-wasm/lib/browser.d.ts +705 -0
  498. package/node_modules/esbuild-wasm/lib/browser.js +2415 -0
  499. package/node_modules/esbuild-wasm/lib/browser.min.js +22 -0
  500. package/node_modules/esbuild-wasm/lib/main.d.ts +705 -0
  501. package/node_modules/esbuild-wasm/lib/main.js +2051 -0
  502. package/node_modules/esbuild-wasm/package.json +19 -0
  503. package/node_modules/esbuild-wasm/wasm_exec.js +561 -0
  504. package/node_modules/esbuild-wasm/wasm_exec_node.js +39 -0
  505. package/node_modules/header-case/LICENSE +21 -0
  506. package/node_modules/header-case/README.md +37 -0
  507. package/node_modules/header-case/dist/index.d.ts +3 -0
  508. package/node_modules/header-case/dist/index.js +11 -0
  509. package/node_modules/header-case/dist/index.js.map +1 -0
  510. package/node_modules/header-case/dist/index.spec.d.ts +1 -0
  511. package/node_modules/header-case/dist/index.spec.js +24 -0
  512. package/node_modules/header-case/dist/index.spec.js.map +1 -0
  513. package/node_modules/header-case/dist.es2015/index.d.ts +3 -0
  514. package/node_modules/header-case/dist.es2015/index.js +7 -0
  515. package/node_modules/header-case/dist.es2015/index.js.map +1 -0
  516. package/node_modules/header-case/dist.es2015/index.spec.d.ts +1 -0
  517. package/node_modules/header-case/dist.es2015/index.spec.js +22 -0
  518. package/node_modules/header-case/dist.es2015/index.spec.js.map +1 -0
  519. package/node_modules/header-case/package.json +89 -0
  520. package/node_modules/lower-case/LICENSE +21 -0
  521. package/node_modules/lower-case/README.md +35 -0
  522. package/node_modules/lower-case/dist/index.d.ts +8 -0
  523. package/node_modules/lower-case/dist/index.js +53 -0
  524. package/node_modules/lower-case/dist/index.js.map +1 -0
  525. package/node_modules/lower-case/dist/index.spec.d.ts +1 -0
  526. package/node_modules/lower-case/dist/index.spec.js +36 -0
  527. package/node_modules/lower-case/dist/index.spec.js.map +1 -0
  528. package/node_modules/lower-case/dist.es2015/index.d.ts +8 -0
  529. package/node_modules/lower-case/dist.es2015/index.js +48 -0
  530. package/node_modules/lower-case/dist.es2015/index.js.map +1 -0
  531. package/node_modules/lower-case/dist.es2015/index.spec.d.ts +1 -0
  532. package/node_modules/lower-case/dist.es2015/index.spec.js +34 -0
  533. package/node_modules/lower-case/dist.es2015/index.spec.js.map +1 -0
  534. package/node_modules/lower-case/package.json +87 -0
  535. package/node_modules/mime-db/HISTORY.md +507 -0
  536. package/node_modules/mime-db/LICENSE +23 -0
  537. package/node_modules/mime-db/README.md +100 -0
  538. package/node_modules/mime-db/db.json +8519 -0
  539. package/node_modules/mime-db/index.js +12 -0
  540. package/node_modules/mime-db/package.json +60 -0
  541. package/node_modules/mime-types/HISTORY.md +397 -0
  542. package/node_modules/mime-types/LICENSE +23 -0
  543. package/node_modules/mime-types/README.md +113 -0
  544. package/node_modules/mime-types/index.js +188 -0
  545. package/node_modules/mime-types/package.json +44 -0
  546. package/node_modules/no-case/LICENSE +21 -0
  547. package/node_modules/no-case/README.md +37 -0
  548. package/node_modules/no-case/dist/index.d.ts +10 -0
  549. package/node_modules/no-case/dist/index.js +35 -0
  550. package/node_modules/no-case/dist/index.js.map +1 -0
  551. package/node_modules/no-case/dist/index.spec.d.ts +1 -0
  552. package/node_modules/no-case/dist/index.spec.js +59 -0
  553. package/node_modules/no-case/dist/index.spec.js.map +1 -0
  554. package/node_modules/no-case/dist.es2015/index.d.ts +10 -0
  555. package/node_modules/no-case/dist.es2015/index.js +31 -0
  556. package/node_modules/no-case/dist.es2015/index.js.map +1 -0
  557. package/node_modules/no-case/dist.es2015/index.spec.d.ts +1 -0
  558. package/node_modules/no-case/dist.es2015/index.spec.js +57 -0
  559. package/node_modules/no-case/dist.es2015/index.spec.js.map +1 -0
  560. package/node_modules/no-case/package.json +85 -0
  561. package/node_modules/param-case/LICENSE +21 -0
  562. package/node_modules/param-case/README.md +37 -0
  563. package/node_modules/param-case/dist/index.d.ts +3 -0
  564. package/node_modules/param-case/dist/index.js +11 -0
  565. package/node_modules/param-case/dist/index.js.map +1 -0
  566. package/node_modules/param-case/dist/index.spec.d.ts +1 -0
  567. package/node_modules/param-case/dist/index.spec.js +24 -0
  568. package/node_modules/param-case/dist/index.spec.js.map +1 -0
  569. package/node_modules/param-case/dist.es2015/index.d.ts +3 -0
  570. package/node_modules/param-case/dist.es2015/index.js +7 -0
  571. package/node_modules/param-case/dist.es2015/index.js.map +1 -0
  572. package/node_modules/param-case/dist.es2015/index.spec.d.ts +1 -0
  573. package/node_modules/param-case/dist.es2015/index.spec.js +22 -0
  574. package/node_modules/param-case/dist.es2015/index.spec.js.map +1 -0
  575. package/node_modules/param-case/package.json +91 -0
  576. package/node_modules/pascal-case/LICENSE +21 -0
  577. package/node_modules/pascal-case/README.md +47 -0
  578. package/node_modules/pascal-case/dist/index.d.ts +5 -0
  579. package/node_modules/pascal-case/dist/index.js +24 -0
  580. package/node_modules/pascal-case/dist/index.js.map +1 -0
  581. package/node_modules/pascal-case/dist/index.spec.d.ts +1 -0
  582. package/node_modules/pascal-case/dist/index.spec.js +25 -0
  583. package/node_modules/pascal-case/dist/index.spec.js.map +1 -0
  584. package/node_modules/pascal-case/dist.es2015/index.d.ts +5 -0
  585. package/node_modules/pascal-case/dist.es2015/index.js +18 -0
  586. package/node_modules/pascal-case/dist.es2015/index.js.map +1 -0
  587. package/node_modules/pascal-case/dist.es2015/index.spec.d.ts +1 -0
  588. package/node_modules/pascal-case/dist.es2015/index.spec.js +23 -0
  589. package/node_modules/pascal-case/dist.es2015/index.spec.js.map +1 -0
  590. package/node_modules/pascal-case/package.json +90 -0
  591. package/node_modules/path-case/LICENSE +21 -0
  592. package/node_modules/path-case/README.md +37 -0
  593. package/node_modules/path-case/dist/index.d.ts +3 -0
  594. package/node_modules/path-case/dist/index.js +11 -0
  595. package/node_modules/path-case/dist/index.js.map +1 -0
  596. package/node_modules/path-case/dist/index.spec.d.ts +1 -0
  597. package/node_modules/path-case/dist/index.spec.js +24 -0
  598. package/node_modules/path-case/dist/index.spec.js.map +1 -0
  599. package/node_modules/path-case/dist.es2015/index.d.ts +3 -0
  600. package/node_modules/path-case/dist.es2015/index.js +7 -0
  601. package/node_modules/path-case/dist.es2015/index.js.map +1 -0
  602. package/node_modules/path-case/dist.es2015/index.spec.d.ts +1 -0
  603. package/node_modules/path-case/dist.es2015/index.spec.js +22 -0
  604. package/node_modules/path-case/dist.es2015/index.spec.js.map +1 -0
  605. package/node_modules/path-case/package.json +88 -0
  606. package/node_modules/sentence-case/LICENSE +21 -0
  607. package/node_modules/sentence-case/README.md +37 -0
  608. package/node_modules/sentence-case/dist/index.d.ts +4 -0
  609. package/node_modules/sentence-case/dist/index.js +19 -0
  610. package/node_modules/sentence-case/dist/index.js.map +1 -0
  611. package/node_modules/sentence-case/dist/index.spec.d.ts +1 -0
  612. package/node_modules/sentence-case/dist/index.spec.js +24 -0
  613. package/node_modules/sentence-case/dist/index.spec.js.map +1 -0
  614. package/node_modules/sentence-case/dist.es2015/index.d.ts +4 -0
  615. package/node_modules/sentence-case/dist.es2015/index.js +14 -0
  616. package/node_modules/sentence-case/dist.es2015/index.js.map +1 -0
  617. package/node_modules/sentence-case/dist.es2015/index.spec.d.ts +1 -0
  618. package/node_modules/sentence-case/dist.es2015/index.spec.js +22 -0
  619. package/node_modules/sentence-case/dist.es2015/index.spec.js.map +1 -0
  620. package/node_modules/sentence-case/package.json +89 -0
  621. package/node_modules/snake-case/LICENSE +21 -0
  622. package/node_modules/snake-case/README.md +37 -0
  623. package/node_modules/snake-case/dist/index.d.ts +3 -0
  624. package/node_modules/snake-case/dist/index.js +11 -0
  625. package/node_modules/snake-case/dist/index.js.map +1 -0
  626. package/node_modules/snake-case/dist/index.spec.d.ts +1 -0
  627. package/node_modules/snake-case/dist/index.spec.js +25 -0
  628. package/node_modules/snake-case/dist/index.spec.js.map +1 -0
  629. package/node_modules/snake-case/dist.es2015/index.d.ts +3 -0
  630. package/node_modules/snake-case/dist.es2015/index.js +7 -0
  631. package/node_modules/snake-case/dist.es2015/index.js.map +1 -0
  632. package/node_modules/snake-case/dist.es2015/index.spec.d.ts +1 -0
  633. package/node_modules/snake-case/dist.es2015/index.spec.js +23 -0
  634. package/node_modules/snake-case/dist.es2015/index.spec.js.map +1 -0
  635. package/node_modules/snake-case/package.json +90 -0
  636. package/node_modules/tslib/CopyrightNotice.txt +15 -0
  637. package/node_modules/tslib/LICENSE.txt +12 -0
  638. package/node_modules/tslib/README.md +164 -0
  639. package/node_modules/tslib/SECURITY.md +41 -0
  640. package/node_modules/tslib/modules/index.d.ts +37 -0
  641. package/node_modules/tslib/modules/index.js +68 -0
  642. package/node_modules/tslib/modules/package.json +3 -0
  643. package/node_modules/tslib/package.json +47 -0
  644. package/node_modules/tslib/tslib.d.ts +453 -0
  645. package/node_modules/tslib/tslib.es6.html +1 -0
  646. package/node_modules/tslib/tslib.es6.js +374 -0
  647. package/node_modules/tslib/tslib.es6.mjs +373 -0
  648. package/node_modules/tslib/tslib.html +1 -0
  649. package/node_modules/tslib/tslib.js +424 -0
  650. package/node_modules/upper-case/README.md +34 -0
  651. package/node_modules/upper-case/dist/index.d.ts +8 -0
  652. package/node_modules/upper-case/dist/index.js +49 -0
  653. package/node_modules/upper-case/dist/index.js.map +1 -0
  654. package/node_modules/upper-case/dist/index.spec.d.ts +1 -0
  655. package/node_modules/upper-case/dist/index.spec.js +34 -0
  656. package/node_modules/upper-case/dist/index.spec.js.map +1 -0
  657. package/node_modules/upper-case/dist.es2015/index.d.ts +8 -0
  658. package/node_modules/upper-case/dist.es2015/index.js +44 -0
  659. package/node_modules/upper-case/dist.es2015/index.js.map +1 -0
  660. package/node_modules/upper-case/dist.es2015/index.spec.d.ts +1 -0
  661. package/node_modules/upper-case/dist.es2015/index.spec.js +32 -0
  662. package/node_modules/upper-case/dist.es2015/index.spec.js.map +1 -0
  663. package/node_modules/upper-case/package.json +86 -0
  664. package/node_modules/upper-case-first/LICENSE +21 -0
  665. package/node_modules/upper-case-first/README.md +32 -0
  666. package/node_modules/upper-case-first/dist/index.d.ts +4 -0
  667. package/node_modules/upper-case-first/dist/index.js +11 -0
  668. package/node_modules/upper-case-first/dist/index.js.map +1 -0
  669. package/node_modules/upper-case-first/dist/index.spec.d.ts +1 -0
  670. package/node_modules/upper-case-first/dist/index.spec.js +20 -0
  671. package/node_modules/upper-case-first/dist/index.spec.js.map +1 -0
  672. package/node_modules/upper-case-first/dist.es2015/index.d.ts +4 -0
  673. package/node_modules/upper-case-first/dist.es2015/index.js +7 -0
  674. package/node_modules/upper-case-first/dist.es2015/index.js.map +1 -0
  675. package/node_modules/upper-case-first/dist.es2015/index.spec.d.ts +1 -0
  676. package/node_modules/upper-case-first/dist.es2015/index.spec.js +18 -0
  677. package/node_modules/upper-case-first/dist.es2015/index.spec.js.map +1 -0
  678. package/node_modules/upper-case-first/package.json +87 -0
  679. package/package.json +152 -0
  680. package/setup.js +2 -0
@@ -0,0 +1,546 @@
1
+ "use strict";
2
+ var _a, _b, _c, _d;
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.FieldUtils = exports.Context = exports.Data = exports.JsonPath = void 0;
5
+ const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
6
+ // https://github.com/aws/aws-cdk/blob/v2.160.0/packages/aws-cdk-lib/aws-stepfunctions/lib/fields.ts
7
+ const cdktf_1 = require("cdktf");
8
+ const json_path_1 = require("./private/json-path");
9
+ /**
10
+ * Extract a field from the State Machine data or context
11
+ * that gets passed around between states
12
+ *
13
+ * @see https://docs.aws.amazon.com/step-functions/latest/dg/amazon-states-language-paths.html
14
+ */
15
+ class JsonPath {
16
+ /**
17
+ * Instead of using a literal string, get the value from a JSON path
18
+ */
19
+ static stringAt(path) {
20
+ validateJsonPath(path);
21
+ return new json_path_1.JsonPathToken(path).toString();
22
+ }
23
+ /**
24
+ * Instead of using a literal string list, get the value from a JSON path
25
+ */
26
+ static listAt(path) {
27
+ // does not apply to task context
28
+ validateDataPath(path);
29
+ return cdktf_1.Token.asList(new json_path_1.JsonPathToken(path));
30
+ }
31
+ /**
32
+ * Instead of using a literal number, get the value from a JSON path
33
+ */
34
+ static numberAt(path) {
35
+ validateJsonPath(path);
36
+ return cdktf_1.Token.asNumber(new json_path_1.JsonPathToken(path));
37
+ }
38
+ /**
39
+ * Reference a complete (complex) object in a JSON path location
40
+ */
41
+ static objectAt(path) {
42
+ validateJsonPath(path);
43
+ return new json_path_1.JsonPathToken(path);
44
+ }
45
+ /**
46
+ * Use the entire data structure
47
+ *
48
+ * Will be an object at invocation time, but is represented in the CDK
49
+ * application as a string.
50
+ */
51
+ static get entirePayload() {
52
+ return new json_path_1.JsonPathToken("$").toString();
53
+ }
54
+ /**
55
+ * Determines if the indicated string is an encoded JSON path
56
+ *
57
+ * @param value string to be evaluated
58
+ */
59
+ static isEncodedJsonPath(value) {
60
+ return !!(0, json_path_1.jsonPathString)(value);
61
+ }
62
+ /**
63
+ * Return the Execution Id field from the context object
64
+ */
65
+ static get executionId() {
66
+ return new json_path_1.JsonPathToken("$$.Execution.Id").toString();
67
+ }
68
+ /**
69
+ * Return the Execution Input field from the context object
70
+ *
71
+ * * Will be an object at invocation time, but is represented in the CDK
72
+ * application as a string.
73
+ */
74
+ static get executionInput() {
75
+ return new json_path_1.JsonPathToken("$$.Execution.Input").toString();
76
+ }
77
+ /**
78
+ * Return the Execution Name field from the context object
79
+ */
80
+ static get executionName() {
81
+ return new json_path_1.JsonPathToken("$$.Execution.Name").toString();
82
+ }
83
+ /**
84
+ * Return the Execution RoleArn field from the context object
85
+ */
86
+ static get executionRoleArn() {
87
+ return new json_path_1.JsonPathToken("$$.Execution.RoleArn").toString();
88
+ }
89
+ /**
90
+ * Return the Execution StartTime field from the context object
91
+ */
92
+ static get executionStartTime() {
93
+ return new json_path_1.JsonPathToken("$$.Execution.StartTime").toString();
94
+ }
95
+ /**
96
+ * Return the State EnteredTime field from the context object
97
+ */
98
+ static get stateEnteredTime() {
99
+ return new json_path_1.JsonPathToken("$$.State.EnteredTime").toString();
100
+ }
101
+ /**
102
+ * Return the State Name field from the context object
103
+ */
104
+ static get stateName() {
105
+ return new json_path_1.JsonPathToken("$$.State.Name").toString();
106
+ }
107
+ /**
108
+ * Return the State RetryCount field from the context object
109
+ */
110
+ static get stateRetryCount() {
111
+ return new json_path_1.JsonPathToken("$$.State.RetryCount").toString();
112
+ }
113
+ /**
114
+ * Return the StateMachine Id field from the context object
115
+ */
116
+ static get stateMachineId() {
117
+ return new json_path_1.JsonPathToken("$$.StateMachine.Id").toString();
118
+ }
119
+ /**
120
+ * Return the StateMachine Name field from the context object
121
+ */
122
+ static get stateMachineName() {
123
+ return new json_path_1.JsonPathToken("$$.StateMachine.Name").toString();
124
+ }
125
+ /**
126
+ * Return the Task Token field from the context object
127
+ *
128
+ * External actions will need this token to report step completion
129
+ * back to StepFunctions using the `SendTaskSuccess` or `SendTaskFailure`
130
+ * calls.
131
+ */
132
+ static get taskToken() {
133
+ return new json_path_1.JsonPathToken("$$.Task.Token").toString();
134
+ }
135
+ /**
136
+ * Use the entire context data structure
137
+ *
138
+ * Will be an object at invocation time, but is represented in the CDK
139
+ * application as a string.
140
+ */
141
+ static get entireContext() {
142
+ return new json_path_1.JsonPathToken("$$").toString();
143
+ }
144
+ /**
145
+ * Make an intrinsic States.Array expression
146
+ *
147
+ * Combine any number of string literals or JsonPath expressions into an array.
148
+ *
149
+ * Use this function if the value of an array element directly has to come
150
+ * from a JSON Path expression (either the State object or the Context object).
151
+ *
152
+ * If the array contains object literals whose values come from a JSON path
153
+ * expression, you do not need to use this function.
154
+ *
155
+ * @see https://docs.aws.amazon.com/step-functions/latest/dg/amazon-states-language-intrinsic-functions.html
156
+ */
157
+ static array(...values) {
158
+ return new json_path_1.JsonPathToken(`States.Array(${values.map(json_path_1.renderInExpression).join(", ")})`).toString();
159
+ }
160
+ /**
161
+ * Make an intrinsic States.ArrayPartition expression
162
+ *
163
+ * Use this function to partition a large array. You can also use this intrinsic to slice the data and then send the payload in smaller chunks.
164
+ *
165
+ * @see https://docs.aws.amazon.com/step-functions/latest/dg/amazon-states-language-intrinsic-functions.html
166
+ */
167
+ static arrayPartition(array, chunkSize) {
168
+ return new json_path_1.JsonPathToken(`States.ArrayPartition(${[array, chunkSize].map(json_path_1.renderInExpression).join(", ")})`).toString();
169
+ }
170
+ /**
171
+ * Make an intrinsic States.ArrayContains expression
172
+ *
173
+ * Use this function to determine if a specific value is present in an array. For example, you can use this function to detect if there was an error in a Map state iteration.
174
+ *
175
+ * @see https://docs.aws.amazon.com/step-functions/latest/dg/amazon-states-language-intrinsic-functions.html
176
+ */
177
+ static arrayContains(array, value) {
178
+ return new json_path_1.JsonPathToken(`States.ArrayContains(${[array, value].map(json_path_1.renderInExpression).join(", ")})`).toString();
179
+ }
180
+ /**
181
+ * Make an intrinsic States.ArrayRange expression
182
+ *
183
+ * Use this function to create a new array containing a specific range of elements. The new array can contain up to 1000 elements.
184
+ *
185
+ * @see https://docs.aws.amazon.com/step-functions/latest/dg/amazon-states-language-intrinsic-functions.html
186
+ */
187
+ static arrayRange(start, end, step) {
188
+ return new json_path_1.JsonPathToken(`States.ArrayRange(${[start, end, step].map(json_path_1.renderInExpression).join(", ")})`).toString();
189
+ }
190
+ /**
191
+ * Make an intrinsic States.ArrayGetItem expression
192
+ *
193
+ * Use this function to get a specified index's value in an array.
194
+ *
195
+ * @see https://docs.aws.amazon.com/step-functions/latest/dg/amazon-states-language-intrinsic-functions.html
196
+ */
197
+ static arrayGetItem(array, index) {
198
+ return new json_path_1.JsonPathToken(`States.ArrayGetItem(${[array, index].map(json_path_1.renderInExpression).join(", ")})`).toString();
199
+ }
200
+ /**
201
+ * Make an intrinsic States.ArrayLength expression
202
+ *
203
+ * Use this function to get the length of an array.
204
+ *
205
+ * @see https://docs.aws.amazon.com/step-functions/latest/dg/amazon-states-language-intrinsic-functions.html
206
+ */
207
+ static arrayLength(array) {
208
+ return new json_path_1.JsonPathToken(`States.ArrayLength(${(0, json_path_1.renderInExpression)(array)})`).toString();
209
+ }
210
+ /**
211
+ * Make an intrinsic States.ArrayUnique expression
212
+ *
213
+ * Use this function to get the length of an array.
214
+ * Use this function to remove duplicate values from an array and returns an array containing only unique elements. This function takes an array, which can be unsorted, as its sole argument.
215
+ *
216
+ * @see https://docs.aws.amazon.com/step-functions/latest/dg/amazon-states-language-intrinsic-functions.html
217
+ */
218
+ static arrayUnique(array) {
219
+ return new json_path_1.JsonPathToken(`States.ArrayUnique(${(0, json_path_1.renderInExpression)(array)})`).toString();
220
+ }
221
+ /**
222
+ * Make an intrinsic States.Base64Encode expression
223
+ *
224
+ * Use this function to encode data based on MIME Base64 encoding scheme. You can use this function to pass data to other AWS services without using an AWS Lambda function.
225
+ *
226
+ * @see https://docs.aws.amazon.com/step-functions/latest/dg/amazon-states-language-intrinsic-functions.html
227
+ */
228
+ static base64Encode(input) {
229
+ return new json_path_1.JsonPathToken(`States.Base64Encode(${(0, json_path_1.renderInExpression)(input)})`).toString();
230
+ }
231
+ /**
232
+ * Make an intrinsic States.Base64Decode expression
233
+ *
234
+ * Use this function to decode data based on MIME Base64 decoding scheme. You can use this function to pass data to other AWS services without using a Lambda function.
235
+ *
236
+ * @see https://docs.aws.amazon.com/step-functions/latest/dg/amazon-states-language-intrinsic-functions.html
237
+ */
238
+ static base64Decode(base64) {
239
+ return new json_path_1.JsonPathToken(`States.Base64Decode(${(0, json_path_1.renderInExpression)(base64)})`).toString();
240
+ }
241
+ /**
242
+ * Make an intrinsic States.Hash expression
243
+ *
244
+ * Use this function to calculate the hash value of a given input. You can use this function to pass data to other AWS services without using a Lambda function.
245
+ *
246
+ * @see https://docs.aws.amazon.com/step-functions/latest/dg/amazon-states-language-intrinsic-functions.html
247
+ */
248
+ static hash(data, algorithm) {
249
+ return new json_path_1.JsonPathToken(`States.Hash(${[data, algorithm].map(json_path_1.renderInExpression).join(", ")})`).toString();
250
+ }
251
+ /**
252
+ * Make an intrinsic States.JsonMerge expression
253
+ *
254
+ * Use this function to merge two JSON objects into a single object.
255
+ *
256
+ * @see https://docs.aws.amazon.com/step-functions/latest/dg/amazon-states-language-intrinsic-functions.html
257
+ */
258
+ static jsonMerge(value1, value2) {
259
+ return new json_path_1.JsonPathToken(`States.JsonMerge(${[value1, value2].map(json_path_1.renderInExpression).join(", ")}, false)`).toString();
260
+ }
261
+ /**
262
+ * Make an intrinsic States.MathRandom expression
263
+ *
264
+ * Use this function to return a random number between the specified start and end number. For example, you can use this function to distribute a specific task between two or more resources.
265
+ *
266
+ * @see https://docs.aws.amazon.com/step-functions/latest/dg/amazon-states-language-intrinsic-functions.html
267
+ */
268
+ static mathRandom(start, end) {
269
+ return new json_path_1.JsonPathToken(`States.MathRandom(${[start, end].map(json_path_1.renderInExpression).join(", ")})`).toString();
270
+ }
271
+ /**
272
+ * Make an intrinsic States.MathAdd expression
273
+ *
274
+ * Use this function to return the sum of two numbers. For example, you can use this function to increment values inside a loop without invoking a Lambda function.
275
+ *
276
+ * @see https://docs.aws.amazon.com/step-functions/latest/dg/amazon-states-language-intrinsic-functions.html
277
+ */
278
+ static mathAdd(num1, num2) {
279
+ return new json_path_1.JsonPathToken(`States.MathAdd(${[num1, num2].map(json_path_1.renderInExpression).join(", ")})`).toString();
280
+ }
281
+ /**
282
+ * Make an intrinsic States.StringSplit expression
283
+ *
284
+ * Use this function to split a string into an array of values. This function takes two arguments.The first argument is a string and the second argument is the delimiting character that the function will use to divide the string.
285
+ *
286
+ * @see https://docs.aws.amazon.com/step-functions/latest/dg/amazon-states-language-intrinsic-functions.html
287
+ */
288
+ static stringSplit(inputString, splitter) {
289
+ return new json_path_1.JsonPathToken(`States.StringSplit(${[inputString, splitter].map(json_path_1.renderInExpression).join(", ")})`).toString();
290
+ }
291
+ /**
292
+ * Make an intrinsic States.UUID expression
293
+ *
294
+ * Use this function to return a version 4 universally unique identifier (v4 UUID) generated using random numbers. For example, you can use this function to call other AWS services or resources that need a UUID parameter or insert items in a DynamoDB table.
295
+ *
296
+ * @see https://docs.aws.amazon.com/step-functions/latest/dg/amazon-states-language-intrinsic-functions.html
297
+ */
298
+ static uuid() {
299
+ return new json_path_1.JsonPathToken("States.UUID()").toString();
300
+ }
301
+ /**
302
+ * Make an intrinsic States.Format expression
303
+ *
304
+ * This can be used to embed JSON Path variables inside a format string.
305
+ *
306
+ * For example:
307
+ *
308
+ * ```ts
309
+ * sfn.JsonPath.format('Hello, my name is {}.', sfn.JsonPath.stringAt('$.name'))
310
+ * ```
311
+ *
312
+ * @see https://docs.aws.amazon.com/step-functions/latest/dg/amazon-states-language-intrinsic-functions.html
313
+ */
314
+ static format(formatString, ...values) {
315
+ const allArgs = [formatString, ...values];
316
+ return new json_path_1.JsonPathToken(`States.Format(${allArgs.map(json_path_1.renderInExpression).join(", ")})`).toString();
317
+ }
318
+ /**
319
+ * Make an intrinsic States.StringToJson expression
320
+ *
321
+ * During the execution of the Step Functions state machine, parse the given
322
+ * argument as JSON into its object form.
323
+ *
324
+ * For example:
325
+ *
326
+ * ```ts
327
+ * sfn.JsonPath.stringToJson(sfn.JsonPath.stringAt('$.someJsonBody'))
328
+ * ```
329
+ *
330
+ * @see https://docs.aws.amazon.com/step-functions/latest/dg/amazon-states-language-intrinsic-functions.html
331
+ */
332
+ static stringToJson(jsonString) {
333
+ return new json_path_1.JsonPathToken(`States.StringToJson(${(0, json_path_1.renderInExpression)(jsonString)})`);
334
+ }
335
+ /**
336
+ * Make an intrinsic States.JsonToString expression
337
+ *
338
+ * During the execution of the Step Functions state machine, encode the
339
+ * given object into a JSON string.
340
+ *
341
+ * For example:
342
+ *
343
+ * ```ts
344
+ * sfn.JsonPath.jsonToString(sfn.JsonPath.objectAt('$.someObject'))
345
+ * ```
346
+ *
347
+ * @see https://docs.aws.amazon.com/step-functions/latest/dg/amazon-states-language-intrinsic-functions.html
348
+ */
349
+ static jsonToString(value) {
350
+ const path = (0, json_path_1.jsonPathFromAny)(value);
351
+ if (!path) {
352
+ throw new Error("Argument to JsonPath.jsonToString() must be a JsonPath object");
353
+ }
354
+ return new json_path_1.JsonPathToken(`States.JsonToString(${path})`).toString();
355
+ }
356
+ constructor() { }
357
+ }
358
+ exports.JsonPath = JsonPath;
359
+ _a = JSII_RTTI_SYMBOL_1;
360
+ JsonPath[_a] = { fqn: "terraconstructs.aws.compute.JsonPath", version: "0.0.8" };
361
+ /**
362
+ * Special string value to discard state input, output or result.
363
+ */
364
+ JsonPath.DISCARD = cdktf_1.Token.asString(cdktf_1.Token.nullValue(), {
365
+ // ref https://github.com/hashicorp/terraform-cdk/blob/v0.20.9/packages/cdktf/lib/tokens/token.ts#L184
366
+ // https://github.com/aws/aws-cdk/blob/v2.170.0/packages/aws-cdk-lib/core/lib/token.ts#L239
367
+ displayHint: "DISCARD (JSON `null`)",
368
+ });
369
+ /**
370
+ * Extract a field from the State Machine data that gets passed around between states
371
+ *
372
+ * @deprecated replaced by `JsonPath`
373
+ */
374
+ class Data {
375
+ /**
376
+ * Instead of using a literal string, get the value from a JSON path
377
+ */
378
+ static stringAt(path) {
379
+ validateDataPath(path);
380
+ return new json_path_1.JsonPathToken(path).toString();
381
+ }
382
+ /**
383
+ * Instead of using a literal string list, get the value from a JSON path
384
+ */
385
+ static listAt(path) {
386
+ validateDataPath(path);
387
+ return cdktf_1.Token.asList(new json_path_1.JsonPathToken(path));
388
+ }
389
+ /**
390
+ * Instead of using a literal number, get the value from a JSON path
391
+ */
392
+ static numberAt(path) {
393
+ validateDataPath(path);
394
+ return cdktf_1.Token.asNumber(new json_path_1.JsonPathToken(path));
395
+ }
396
+ /**
397
+ * Use the entire data structure
398
+ *
399
+ * Will be an object at invocation time, but is represented in the CDK
400
+ * application as a string.
401
+ */
402
+ static get entirePayload() {
403
+ return new json_path_1.JsonPathToken("$").toString();
404
+ }
405
+ /**
406
+ * Determines if the indicated string is an encoded JSON path
407
+ *
408
+ * @param value string to be evaluated
409
+ */
410
+ static isJsonPathString(value) {
411
+ return !!(0, json_path_1.jsonPathString)(value);
412
+ }
413
+ constructor() { }
414
+ }
415
+ exports.Data = Data;
416
+ _b = JSII_RTTI_SYMBOL_1;
417
+ Data[_b] = { fqn: "terraconstructs.aws.compute.Data", version: "0.0.8" };
418
+ /**
419
+ * Extract a field from the State Machine Context data
420
+ *
421
+ * @see https://docs.aws.amazon.com/step-functions/latest/dg/connect-to-resource.html#wait-token-contextobject
422
+ *
423
+ * @deprecated replaced by `JsonPath`
424
+ */
425
+ class Context {
426
+ /**
427
+ * Instead of using a literal string, get the value from a JSON path
428
+ */
429
+ static stringAt(path) {
430
+ validateContextPath(path);
431
+ return new json_path_1.JsonPathToken(path).toString();
432
+ }
433
+ /**
434
+ * Instead of using a literal number, get the value from a JSON path
435
+ */
436
+ static numberAt(path) {
437
+ validateContextPath(path);
438
+ return cdktf_1.Token.asNumber(new json_path_1.JsonPathToken(path));
439
+ }
440
+ /**
441
+ * Return the Task Token field
442
+ *
443
+ * External actions will need this token to report step completion
444
+ * back to StepFunctions using the `SendTaskSuccess` or `SendTaskFailure`
445
+ * calls.
446
+ */
447
+ static get taskToken() {
448
+ return new json_path_1.JsonPathToken("$$.Task.Token").toString();
449
+ }
450
+ /**
451
+ * Use the entire context data structure
452
+ *
453
+ * Will be an object at invocation time, but is represented in the CDK
454
+ * application as a string.
455
+ */
456
+ static get entireContext() {
457
+ return new json_path_1.JsonPathToken("$$").toString();
458
+ }
459
+ constructor() { }
460
+ }
461
+ exports.Context = Context;
462
+ _c = JSII_RTTI_SYMBOL_1;
463
+ Context[_c] = { fqn: "terraconstructs.aws.compute.Context", version: "0.0.8" };
464
+ /**
465
+ * Helper functions to work with structures containing fields
466
+ */
467
+ class FieldUtils {
468
+ /**
469
+ * Render a JSON structure containing fields to the right StepFunctions structure
470
+ */
471
+ static renderObject(obj) {
472
+ return (0, json_path_1.renderObject)(obj);
473
+ }
474
+ /**
475
+ * Return all JSON paths used in the given structure
476
+ */
477
+ static findReferencedPaths(obj) {
478
+ return Array.from((0, json_path_1.findReferencedPaths)(obj)).sort();
479
+ }
480
+ /**
481
+ * Returns whether the given task structure contains the TaskToken field anywhere
482
+ *
483
+ * The field is considered included if the field itself or one of its containing
484
+ * fields occurs anywhere in the payload.
485
+ */
486
+ static containsTaskToken(obj) {
487
+ const paths = (0, json_path_1.findReferencedPaths)(obj);
488
+ return (paths.has("$$.Task.Token") || paths.has("$$.Task") || paths.has("$$"));
489
+ }
490
+ constructor() { }
491
+ }
492
+ exports.FieldUtils = FieldUtils;
493
+ _d = JSII_RTTI_SYMBOL_1;
494
+ FieldUtils[_d] = { fqn: "terraconstructs.aws.compute.FieldUtils", version: "0.0.8" };
495
+ function validateJsonPath(path) {
496
+ const intrinsicFunctionNames = [
497
+ // Intrinsics for arrays
498
+ "Array",
499
+ "ArrayPartition",
500
+ "ArrayContains",
501
+ "ArrayRange",
502
+ "ArrayGetItem",
503
+ "ArrayLength",
504
+ "ArrayUnique",
505
+ // Intrinsics for data encoding and decoding
506
+ "Base64Encode",
507
+ "Base64Decode",
508
+ // Intrinsic for hash calculation
509
+ "Hash",
510
+ // Intrinsics for JSON data manipulation
511
+ "JsonMerge",
512
+ "StringToJson",
513
+ "JsonToString",
514
+ // Intrinsics for Math operations
515
+ "MathRandom",
516
+ "MathAdd",
517
+ // Intrinsic for String operation
518
+ "StringSplit",
519
+ // Intrinsic for unique identifier generation
520
+ "UUID",
521
+ // Intrinsic for generic operation
522
+ "Format",
523
+ ];
524
+ const intrinsicFunctionFullNames = intrinsicFunctionNames.map((fn) => `States.${fn}`);
525
+ if (path !== "$" &&
526
+ !path.startsWith("$.") &&
527
+ path !== "$$" &&
528
+ !path.startsWith("$$.") &&
529
+ !path.startsWith("$[") &&
530
+ intrinsicFunctionFullNames.every((fn) => !path.startsWith(fn))) {
531
+ const lastItem = intrinsicFunctionFullNames.pop();
532
+ const intrinsicFunctionsStr = intrinsicFunctionFullNames.join(", ") + ", or " + lastItem;
533
+ throw new Error(`JSON path values must be exactly '$', '$$', start with '$.', start with '$$.', start with '$[', or start with an intrinsic function: ${intrinsicFunctionsStr}. Received: ${path}`);
534
+ }
535
+ }
536
+ function validateDataPath(path) {
537
+ if (path !== "$" && !path.startsWith("$[") && !path.startsWith("$.")) {
538
+ throw new Error("Data JSON path values must either be exactly equal to '$', start with '$[' or start with '$.'");
539
+ }
540
+ }
541
+ function validateContextPath(path) {
542
+ if (path !== "$$" && !path.startsWith("$$.")) {
543
+ throw new Error("Context JSON path values must either be exactly equal to '$$' or start with '$$.'");
544
+ }
545
+ }
546
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmllbGRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2F3cy9jb21wdXRlL2ZpZWxkcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLG9HQUFvRztBQUVwRyxpQ0FBMkM7QUFDM0MsbURBTzZCO0FBRTdCOzs7OztHQUtHO0FBQ0gsTUFBYSxRQUFRO0lBVW5COztPQUVHO0lBQ0ksTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFZO1FBQ2pDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3ZCLE9BQU8sSUFBSSx5QkFBYSxDQUFDLElBQUksQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQzVDLENBQUM7SUFFRDs7T0FFRztJQUNJLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBWTtRQUMvQixpQ0FBaUM7UUFDakMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdkIsT0FBTyxhQUFLLENBQUMsTUFBTSxDQUFDLElBQUkseUJBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQy9DLENBQUM7SUFFRDs7T0FFRztJQUNJLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBWTtRQUNqQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN2QixPQUFPLGFBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSx5QkFBYSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDakQsQ0FBQztJQUVEOztPQUVHO0lBQ0ksTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFZO1FBQ2pDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3ZCLE9BQU8sSUFBSSx5QkFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2pDLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNJLE1BQU0sS0FBSyxhQUFhO1FBQzdCLE9BQU8sSUFBSSx5QkFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQzNDLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ks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ay9ibG9iL3YyLjE2MC4wL3BhY2thZ2VzL2F3cy1jZGstbGliL2F3cy1zdGVwZnVuY3Rpb25zL2xpYi9maWVsZHMudHNcblxuaW1wb3J0IHsgVG9rZW4sIElSZXNvbHZhYmxlIH0gZnJvbSBcImNka3RmXCI7XG5pbXBvcnQge1xuICBmaW5kUmVmZXJlbmNlZFBhdGhzLFxuICBqc29uUGF0aFN0cmluZyxcbiAgSnNvblBhdGhUb2tlbixcbiAgcmVuZGVyT2JqZWN0LFxuICByZW5kZXJJbkV4cHJlc3Npb24sXG4gIGpzb25QYXRoRnJvbUFueSxcbn0gZnJvbSBcIi4vcHJpdmF0ZS9qc29uLXBhdGhcIjtcblxuLyoqXG4gKiBFeHRyYWN0IGEgZmllbGQgZnJvbSB0aGUgU3RhdGUgTWFjaGluZSBkYXRhIG9yIGNvbnRleHRcbiAqIHRoYXQgZ2V0cyBwYXNzZWQgYXJvdW5kIGJldHdlZW4gc3RhdGVzXG4gKlxuICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vc3RlcC1mdW5jdGlvbnMvbGF0ZXN0L2RnL2FtYXpvbi1zdGF0ZXMtbGFuZ3VhZ2UtcGF0aHMuaHRtbFxuICovXG5leHBvcnQgY2xhc3MgSnNvblBhdGgge1xuICAvKipcbiAgICogU3BlY2lhbCBzdHJpbmcgdmFsdWUgdG8gZGlzY2FyZCBzdGF0ZSBpbnB1dCwgb3V0cHV0IG9yIHJlc3VsdC5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgRElTQ0FSRCA9IFRva2VuLmFzU3RyaW5nKFRva2VuLm51bGxWYWx1ZSgpLCB7XG4gICAgLy8gcmVmIGh0dHBzOi8vZ2l0aHViLmNvbS9oYXNoaWNvcnAvdGVycmFmb3JtLWNkay9ibG9iL3YwLjIwLjkvcGFja2FnZXMvY2RrdGYvbGliL3Rva2Vucy90b2tlbi50cyNMMTg0XG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2F3cy9hd3MtY2RrL2Jsb2IvdjIuMTcwLjAvcGFja2FnZXMvYXdzLWNkay1saWIvY29yZS9saWIvdG9rZW4udHMjTDIzOVxuICAgIGRpc3BsYXlIaW50OiBcIkRJU0NBUkQgKEpTT04gYG51bGxgKVwiLFxuICB9KTtcblxuICAvKipcbiAgICogSW5zdGVhZCBvZiB1c2luZyBhIGxpdGVyYWwgc3RyaW5nLCBnZXQgdGhlIHZhbHVlIGZyb20gYSBKU09OIHBhdGhcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgc3RyaW5nQXQocGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICB2YWxpZGF0ZUpzb25QYXRoKHBhdGgpO1xuICAgIHJldHVybiBuZXcgSnNvblBhdGhUb2tlbihwYXRoKS50b1N0cmluZygpO1xuICB9XG5cbiAgLyoqXG4gICAqIEluc3RlYWQgb2YgdXNpbmcgYSBsaXRlcmFsIHN0cmluZyBsaXN0LCBnZXQgdGhlIHZhbHVlIGZyb20gYSBKU09OIHBhdGhcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgbGlzdEF0KHBhdGg6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgICAvLyBkb2VzIG5vdCBhcHBseSB0byB0YXNrIGNvbnRleHRcbiAgICB2YWxpZGF0ZURhdGFQYXRoKHBhdGgpO1xuICAgIHJldHVybiBUb2tlbi5hc0xpc3QobmV3IEpzb25QYXRoVG9rZW4ocGF0aCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEluc3RlYWQgb2YgdXNpbmcgYSBsaXRlcmFsIG51bWJlciwgZ2V0IHRoZSB2YWx1ZSBmcm9tIGEgSlNPTiBwYXRoXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIG51bWJlckF0KHBhdGg6IHN0cmluZyk6IG51bWJlciB7XG4gICAgdmFsaWRhdGVKc29uUGF0aChwYXRoKTtcbiAgICByZXR1cm4gVG9rZW4uYXNOdW1iZXIobmV3IEpzb25QYXRoVG9rZW4ocGF0aCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZmVyZW5jZSBhIGNvbXBsZXRlIChjb21wbGV4KSBvYmplY3QgaW4gYSBKU09OIHBhdGggbG9jYXRpb25cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgb2JqZWN0QXQocGF0aDogc3RyaW5nKTogSVJlc29sdmFibGUge1xuICAgIHZhbGlkYXRlSnNvblBhdGgocGF0aCk7XG4gICAgcmV0dXJuIG5ldyBKc29uUGF0aFRva2VuKHBhdGgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVzZSB0aGUgZW50aXJlIGRhdGEgc3RydWN0dXJlXG4gICAqXG4gICAqIFdpbGwgYmUgYW4gb2JqZWN0IGF0IGludm9jYXRpb24gdGltZSwgYnV0IGlzIHJlcHJlc2VudGVkIGluIHRoZSBDREtcbiAgICogYXBwbGljYXRpb24gYXMgYSBzdHJpbmcuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGdldCBlbnRpcmVQYXlsb2FkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIG5ldyBKc29uUGF0aFRva2VuKFwiJFwiKS50b1N0cmluZygpO1xuICB9XG5cbiAgLyoqXG4gICAqIERldGVybWluZXMgaWYgdGhlIGluZGljYXRlZCBzdHJpbmcgaXMgYW4gZW5jb2RlZCBKU09OIHBhdGhcbiAgICpcbiAgICogQHBhcmFtIHZhbHVlIHN0cmluZyB0byBiZSBldmFsdWF0ZWRcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgaXNFbmNvZGVkSnNvblBhdGgodmFsdWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIWpzb25QYXRoU3RyaW5nKHZhbHVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIEV4ZWN1dGlvbiBJZCBmaWVsZCBmcm9tIHRoZSBjb250ZXh0IG9iamVjdFxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBnZXQgZXhlY3V0aW9uSWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gbmV3IEpzb25QYXRoVG9rZW4oXCIkJC5FeGVjdXRpb24uSWRcIikudG9TdHJpbmcoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIEV4ZWN1dGlvbiBJbnB1dCBmaWVsZCBmcm9tIHRoZSBjb250ZXh0IG9iamVjdFxuICAgKlxuICAgKiAqIFdpbGwgYmUgYW4gb2JqZWN0IGF0IGludm9jYXRpb24gdGltZSwgYnV0IGlzIHJlcHJlc2VudGVkIGluIHRoZSBDREtcbiAgICogYXBwbGljYXRpb24gYXMgYSBzdHJpbmcuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGdldCBleGVjdXRpb25JbnB1dCgpOiBzdHJpbmcge1xuICAgIHJldHVybiBuZXcgSnNvblBhdGhUb2tlbihcIiQkLkV4ZWN1dGlvbi5JbnB1dFwiKS50b1N0cmluZygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB0aGUgRXhlY3V0aW9uIE5hbWUgZmllbGQgZnJvbSB0aGUgY29udGV4dCBvYmplY3RcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZ2V0IGV4ZWN1dGlvbk5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gbmV3IEpzb25QYXRoVG9rZW4oXCIkJC5FeGVjdXRpb24uTmFtZVwiKS50b1N0cmluZygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB0aGUgRXhlY3V0aW9uIFJvbGVBcm4gZmllbGQgZnJvbSB0aGUgY29udGV4dCBvYmplY3RcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZ2V0IGV4ZWN1dGlvblJvbGVBcm4oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gbmV3IEpzb25QYXRoVG9rZW4oXCIkJC5FeGVjdXRpb24uUm9sZUFyblwiKS50b1N0cmluZygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB0aGUgRXhlY3V0aW9uIFN0YXJ0VGltZSBmaWVsZCBmcm9tIHRoZSBjb250ZXh0IG9iamVjdFxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBnZXQgZXhlY3V0aW9uU3RhcnRUaW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIG5ldyBKc29uUGF0aFRva2VuKFwiJCQuRXhlY3V0aW9uLlN0YXJ0VGltZVwiKS50b1N0cmluZygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB0aGUgU3RhdGUgRW50ZXJlZFRpbWUgZmllbGQgZnJvbSB0aGUgY29udGV4dCBvYmplY3RcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZ2V0IHN0YXRlRW50ZXJlZFRpbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gbmV3IEpzb25QYXRoVG9rZW4oXCIkJC5TdGF0ZS5FbnRlcmVkVGltZVwiKS50b1N0cmluZygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB0aGUgU3RhdGUgTmFtZSBmaWVsZCBmcm9tIHRoZSBjb250ZXh0IG9iamVjdFxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBnZXQgc3RhdGVOYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIG5ldyBKc29uUGF0aFRva2VuKFwiJCQuU3RhdGUuTmFtZVwiKS50b1N0cmluZygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB0aGUgU3RhdGUgUmV0cnlDb3VudCBmaWVsZCBmcm9tIHRoZSBjb250ZXh0IG9iamVjdFxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBnZXQgc3RhdGVSZXRyeUNvdW50KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIG5ldyBKc29uUGF0aFRva2VuKFwiJCQuU3RhdGUuUmV0cnlDb3VudFwiKS50b1N0cmluZygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB0aGUgU3RhdGVNYWNoaW5lIElkIGZpZWxkIGZyb20gdGhlIGNvbnRleHQgb2JqZWN0XG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGdldCBzdGF0ZU1hY2hpbmVJZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiBuZXcgSnNvblBhdGhUb2tlbihcIiQkLlN0YXRlTWFjaGluZS5JZFwiKS50b1N0cmluZygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB0aGUgU3RhdGVNYWNoaW5lIE5hbWUgZmllbGQgZnJvbSB0aGUgY29udGV4dCBvYmplY3RcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZ2V0IHN0YXRlTWFjaGluZU5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gbmV3IEpzb25QYXRoVG9rZW4oXCIkJC5TdGF0ZU1hY2hpbmUuTmFtZVwiKS50b1N0cmluZygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB0aGUgVGFzayBUb2tlbiBmaWVsZCBmcm9tIHRoZSBjb250ZXh0IG9iamVjdFxuICAgKlxuICAgKiBFeHRlcm5hbCBhY3Rpb25zIHdpbGwgbmVlZCB0aGlzIHRva2VuIHRvIHJlcG9ydCBzdGVwIGNvbXBsZXRpb25cbiAgICogYmFjayB0byBTdGVwRnVuY3Rpb25zIHVzaW5nIHRoZSBgU2VuZFRhc2tTdWNjZXNzYCBvciBgU2VuZFRhc2tGYWlsdXJlYFxuICAgKiBjYWxscy5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZ2V0IHRhc2tUb2tlbigpOiBzdHJpbmcge1xuICAgIHJldHVybiBuZXcgSnNvblBhdGhUb2tlbihcIiQkLlRhc2suVG9rZW5cIikudG9TdHJpbmcoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVc2UgdGhlIGVudGlyZSBjb250ZXh0IGRhdGEgc3RydWN0dXJlXG4gICAqXG4gICAqIFdpbGwgYmUgYW4gb2JqZWN0IGF0IGludm9jYXRpb24gdGltZSwgYnV0IGlzIHJlcHJlc2VudGVkIGluIHRoZSBDREtcbiAgICogYXBwbGljYXRpb24gYXMgYSBzdHJpbmcuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGdldCBlbnRpcmVDb250ZXh0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIG5ldyBKc29uUGF0aFRva2VuKFwiJCRcIikudG9TdHJpbmcoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNYWtlIGFuIGludHJpbnNpYyBTdGF0ZXMuQXJyYXkgZXhwcmVzc2lvblxuICAgKlxuICAgKiBDb21iaW5lIGFueSBudW1iZXIgb2Ygc3RyaW5nIGxpdGVyYWxzIG9yIEpzb25QYXRoIGV4cHJlc3Npb25zIGludG8gYW4gYXJyYXkuXG4gICAqXG4gICAqIFVzZSB0aGlzIGZ1bmN0aW9uIGlmIHRoZSB2YWx1ZSBvZiBhbiBhcnJheSBlbGVtZW50IGRpcmVjdGx5IGhhcyB0byBjb21lXG4gICAqIGZyb20gYSBKU09OIFBhdGggZXhwcmVzc2lvbiAoZWl0aGVyIHRoZSBTdGF0ZSBvYmplY3Qgb3IgdGhlIENvbnRleHQgb2JqZWN0KS5cbiAgICpcbiAgICogSWYgdGhlIGFycmF5IGNvbnRhaW5zIG9iamVjdCBsaXRlcmFscyB3aG9zZSB2YWx1ZXMgY29tZSBmcm9tIGEgSlNPTiBwYXRoXG4gICAqIGV4cHJlc3Npb24sIHlvdSBkbyBub3QgbmVlZCB0byB1c2UgdGhpcyBmdW5jdGlvbi5cbiAgICpcbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vc3RlcC1mdW5jdGlvbnMvbGF0ZXN0L2RnL2FtYXpvbi1zdGF0ZXMtbGFuZ3VhZ2UtaW50cmluc2ljLWZ1bmN0aW9ucy5odG1sXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGFycmF5KC4uLnZhbHVlczogc3RyaW5nW10pOiBzdHJpbmcge1xuICAgIHJldHVybiBuZXcgSnNvblBhdGhUb2tlbihcbiAgICAgIGBTdGF0ZXMuQXJyYXkoJHt2YWx1ZXMubWFwKHJlbmRlckluRXhwcmVzc2lvbikuam9pbihcIiwgXCIpfSlgLFxuICAgICkudG9TdHJpbmcoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNYWtlIGFuIGludHJpbnNpYyBTdGF0ZXMuQXJyYXlQYXJ0aXRpb24gZXhwcmVzc2lvblxuICAgKlxuICAgKiBVc2UgdGhpcyBmdW5jdGlvbiB0byBwYXJ0aXRpb24gYSBsYXJnZSBhcnJheS4gWW91IGNhbiBhbHNvIHVzZSB0aGlzIGludHJpbnNpYyB0byBzbGljZSB0aGUgZGF0YSBhbmQgdGhlbiBzZW5kIHRoZSBwYXlsb2FkIGluIHNtYWxsZXIgY2h1bmtzLlxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9zdGVwLWZ1bmN0aW9ucy9sYXRlc3QvZGcvYW1hem9uLXN0YXRlcy1sYW5ndWFnZS1pbnRyaW5zaWMtZnVuY3Rpb25zLmh0bWxcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgYXJyYXlQYXJ0aXRpb24oYXJyYXk6IGFueSwgY2h1bmtTaXplOiBudW1iZXIpOiBzdHJpbmcge1xuICAgIHJldHVybiBuZXcgSnNvblBhdGhUb2tlbihcbiAgICAgIGBTdGF0ZXMuQXJyYXlQYXJ0aXRpb24oJHtbYXJyYXksIGNodW5rU2l6ZV0ubWFwKHJlbmRlckluRXhwcmVzc2lvbikuam9pbihcIiwgXCIpfSlgLFxuICAgICkudG9TdHJpbmcoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNYWtlIGFuIGludHJpbnNpYyBTdGF0ZXMuQXJyYXlDb250YWlucyBleHByZXNzaW9uXG4gICAqXG4gICAqIFVzZSB0aGlzIGZ1bmN0aW9uIHRvIGRldGVybWluZSBpZiBhIHNwZWNpZmljIHZhbHVlIGlzIHByZXNlbnQgaW4gYW4gYXJyYXkuIEZvciBleGFtcGxlLCB5b3UgY2FuIHVzZSB0aGlzIGZ1bmN0aW9uIHRvIGRldGVjdCBpZiB0aGVyZSB3YXMgYW4gZXJyb3IgaW4gYSBNYXAgc3RhdGUgaXRlcmF0aW9uLlxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9zdGVwLWZ1bmN0aW9ucy9sYXRlc3QvZGcvYW1hem9uLXN0YXRlcy1sYW5ndWFnZS1pbnRyaW5zaWMtZnVuY3Rpb25zLmh0bWxcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgYXJyYXlDb250YWlucyhhcnJheTogYW55LCB2YWx1ZTogYW55KTogc3RyaW5nIHtcbiAgICByZXR1cm4gbmV3IEpzb25QYXRoVG9rZW4oXG4gICAgICBgU3RhdGVzLkFycmF5Q29udGFpbnMoJHtbYXJyYXksIHZhbHVlXS5tYXAocmVuZGVySW5FeHByZXNzaW9uKS5qb2luKFwiLCBcIil9KWAsXG4gICAgKS50b1N0cmluZygpO1xuICB9XG5cbiAgLyoqXG4gICAqIE1ha2UgYW4gaW50cmluc2ljIFN0YXRlcy5BcnJheVJhbmdlIGV4cHJlc3Npb25cbiAgICpcbiAgICogVXNlIHRoaXMgZnVuY3Rpb24gdG8gY3JlYXRlIGEgbmV3IGFycmF5IGNvbnRhaW5pbmcgYSBzcGVjaWZpYyByYW5nZSBvZiBlbGVtZW50cy4gVGhlIG5ldyBhcnJheSBjYW4gY29udGFpbiB1cCB0byAxMDAwIGVsZW1lbnRzLlxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9zdGVwLWZ1bmN0aW9ucy9sYXRlc3QvZGcvYW1hem9uLXN0YXRlcy1sYW5ndWFnZS1pbnRyaW5zaWMtZnVuY3Rpb25zLmh0bWxcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgYXJyYXlSYW5nZShzdGFydDogbnVtYmVyLCBlbmQ6IG51bWJlciwgc3RlcDogbnVtYmVyKTogc3RyaW5nIHtcbiAgICByZXR1cm4gbmV3IEpzb25QYXRoVG9rZW4oXG4gICAgICBgU3RhdGVzLkFycmF5UmFuZ2UoJHtbc3RhcnQsIGVuZCwgc3RlcF0ubWFwKHJlbmRlckluRXhwcmVzc2lvbikuam9pbihcIiwgXCIpfSlgLFxuICAgICkudG9TdHJpbmcoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNYWtlIGFuIGludHJpbnNpYyBTdGF0ZXMuQXJyYXlHZXRJdGVtIGV4cHJlc3Npb25cbiAgICpcbiAgICogVXNlIHRoaXMgZnVuY3Rpb24gdG8gZ2V0IGEgc3BlY2lmaWVkIGluZGV4J3MgdmFsdWUgaW4gYW4gYXJyYXkuXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL3N0ZXAtZnVuY3Rpb25zL2xhdGVzdC9kZy9hbWF6b24tc3RhdGVzLWxhbmd1YWdlLWludHJpbnNpYy1mdW5jdGlvbnMuaHRtbFxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBhcnJheUdldEl0ZW0oYXJyYXk6IGFueSwgaW5kZXg6IG51bWJlcik6IHN0cmluZyB7XG4gICAgcmV0dXJuIG5ldyBKc29uUGF0aFRva2VuKFxuICAgICAgYFN0YXRlcy5BcnJheUdldEl0ZW0oJHtbYXJyYXksIGluZGV4XS5tYXAocmVuZGVySW5FeHByZXNzaW9uKS5qb2luKFwiLCBcIil9KWAsXG4gICAgKS50b1N0cmluZygpO1xuICB9XG5cbiAgLyoqXG4gICAqIE1ha2UgYW4gaW50cmluc2ljIFN0YXRlcy5BcnJheUxlbmd0aCBleHByZXNzaW9uXG4gICAqXG4gICAqIFVzZSB0aGlzIGZ1bmN0aW9uIHRvIGdldCB0aGUgbGVuZ3RoIG9mIGFuIGFycmF5LlxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9zdGVwLWZ1bmN0aW9ucy9sYXRlc3QvZGcvYW1hem9uLXN0YXRlcy1sYW5ndWFnZS1pbnRyaW5zaWMtZnVuY3Rpb25zLmh0bWxcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgYXJyYXlMZW5ndGgoYXJyYXk6IGFueSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIG5ldyBKc29uUGF0aFRva2VuKFxuICAgICAgYFN0YXRlcy5BcnJheUxlbmd0aCgke3JlbmRlckluRXhwcmVzc2lvbihhcnJheSl9KWAsXG4gICAgKS50b1N0cmluZygpO1xuICB9XG5cbiAgLyoqXG4gICAqIE1ha2UgYW4gaW50cmluc2ljIFN0YXRlcy5BcnJheVVuaXF1ZSBleHByZXNzaW9uXG4gICAqXG4gICAqIFVzZSB0aGlzIGZ1bmN0aW9uIHRvIGdldCB0aGUgbGVuZ3RoIG9mIGFuIGFycmF5LlxuICAgKiBVc2UgdGhpcyBmdW5jdGlvbiB0byByZW1vdmUgZHVwbGljYXRlIHZhbHVlcyBmcm9tIGFuIGFycmF5IGFuZCByZXR1cm5zIGFuIGFycmF5IGNvbnRhaW5pbmcgb25seSB1bmlxdWUgZWxlbWVudHMuIFRoaXMgZnVuY3Rpb24gdGFrZXMgYW4gYXJyYXksIHdoaWNoIGNhbiBiZSB1bnNvcnRlZCwgYXMgaXRzIHNvbGUgYXJndW1lbnQuXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL3N0ZXAtZnVuY3Rpb25zL2xhdGVzdC9kZy9hbWF6b24tc3RhdGVzLWxhbmd1YWdlLWludHJpbnNpYy1mdW5jdGlvbnMuaHRtbFxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBhcnJheVVuaXF1ZShhcnJheTogYW55KTogc3RyaW5nIHtcbiAgICByZXR1cm4gbmV3IEpzb25QYXRoVG9rZW4oXG4gICAgICBgU3RhdGVzLkFycmF5VW5pcXVlKCR7cmVuZGVySW5FeHByZXNzaW9uKGFycmF5KX0pYCxcbiAgICApLnRvU3RyaW5nKCk7XG4gIH1cblxuICAvKipcbiAgICogTWFrZSBhbiBpbnRyaW5zaWMgU3RhdGVzLkJhc2U2NEVuY29kZSBleHByZXNzaW9uXG4gICAqXG4gICAqIFVzZSB0aGlzIGZ1bmN0aW9uIHRvIGVuY29kZSBkYXRhIGJhc2VkIG9uIE1JTUUgQmFzZTY0IGVuY29kaW5nIHNjaGVtZS4gWW91IGNhbiB1c2UgdGhpcyBmdW5jdGlvbiB0byBwYXNzIGRhdGEgdG8gb3RoZXIgQVdTIHNlcnZpY2VzIHdpdGhvdXQgdXNpbmcgYW4gQVdTIExhbWJkYSBmdW5jdGlvbi5cbiAgICpcbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vc3RlcC1mdW5jdGlvbnMvbGF0ZXN0L2RnL2FtYXpvbi1zdGF0ZXMtbGFuZ3VhZ2UtaW50cmluc2ljLWZ1bmN0aW9ucy5odG1sXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGJhc2U2NEVuY29kZShpbnB1dDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gbmV3IEpzb25QYXRoVG9rZW4oXG4gICAgICBgU3RhdGVzLkJhc2U2NEVuY29kZSgke3JlbmRlckluRXhwcmVzc2lvbihpbnB1dCl9KWAsXG4gICAgKS50b1N0cmluZygpO1xuICB9XG5cbiAgLyoqXG4gICAqIE1ha2UgYW4gaW50cmluc2ljIFN0YXRlcy5CYXNlNjREZWNvZGUgZXhwcmVzc2lvblxuICAgKlxuICAgKiBVc2UgdGhpcyBmdW5jdGlvbiB0byBkZWNvZGUgZGF0YSBiYXNlZCBvbiBNSU1FIEJhc2U2NCBkZWNvZGluZyBzY2hlbWUuIFlvdSBjYW4gdXNlIHRoaXMgZnVuY3Rpb24gdG8gcGFzcyBkYXRhIHRvIG90aGVyIEFXUyBzZXJ2aWNlcyB3aXRob3V0IHVzaW5nIGEgTGFtYmRhIGZ1bmN0aW9uLlxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9zdGVwLWZ1bmN0aW9ucy9sYXRlc3QvZGcvYW1hem9uLXN0YXRlcy1sYW5ndWFnZS1pbnRyaW5zaWMtZnVuY3Rpb25zLmh0bWxcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgYmFzZTY0RGVjb2RlKGJhc2U2NDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gbmV3IEpzb25QYXRoVG9rZW4oXG4gICAgICBgU3RhdGVzLkJhc2U2NERlY29kZSgke3JlbmRlckluRXhwcmVzc2lvbihiYXNlNjQpfSlgLFxuICAgICkudG9TdHJpbmcoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNYWtlIGFuIGludHJpbnNpYyBTdGF0ZXMuSGFzaCBleHByZXNzaW9uXG4gICAqXG4gICAqIFVzZSB0aGlzIGZ1bmN0aW9uIHRvIGNhbGN1bGF0ZSB0aGUgaGFzaCB2YWx1ZSBvZiBhIGdpdmVuIGlucHV0LiBZb3UgY2FuIHVzZSB0aGlzIGZ1bmN0aW9uIHRvIHBhc3MgZGF0YSB0byBvdGhlciBBV1Mgc2VydmljZXMgd2l0aG91dCB1c2luZyBhIExhbWJkYSBmdW5jdGlvbi5cbiAgICpcbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vc3RlcC1mdW5jdGlvbnMvbGF0ZXN0L2RnL2FtYXpvbi1zdGF0ZXMtbGFuZ3VhZ2UtaW50cmluc2ljLWZ1bmN0aW9ucy5odG1sXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGhhc2goZGF0YTogYW55LCBhbGdvcml0aG06IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIG5ldyBKc29uUGF0aFRva2VuKFxuICAgICAgYFN0YXRlcy5IYXNoKCR7W2RhdGEsIGFsZ29yaXRobV0ubWFwKHJlbmRlckluRXhwcmVzc2lvbikuam9pbihcIiwgXCIpfSlgLFxuICAgICkudG9TdHJpbmcoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNYWtlIGFuIGludHJpbnNpYyBTdGF0ZXMuSnNvbk1lcmdlIGV4cHJlc3Npb25cbiAgICpcbiAgICogVXNlIHRoaXMgZnVuY3Rpb24gdG8gbWVyZ2UgdHdvIEpTT04gb2JqZWN0cyBpbnRvIGEgc2luZ2xlIG9iamVjdC5cbiAgICpcbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vc3RlcC1mdW5jdGlvbnMvbGF0ZXN0L2RnL2FtYXpvbi1zdGF0ZXMtbGFuZ3VhZ2UtaW50cmluc2ljLWZ1bmN0aW9ucy5odG1sXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGpzb25NZXJnZSh2YWx1ZTE6IGFueSwgdmFsdWUyOiBhbnkpOiBzdHJpbmcge1xuICAgIHJldHVybiBuZXcgSnNvblBhdGhUb2tlbihcbiAgICAgIGBTdGF0ZXMuSnNvbk1lcmdlKCR7W3ZhbHVlMSwgdmFsdWUyXS5tYXAocmVuZGVySW5FeHByZXNzaW9uKS5qb2luKFwiLCBcIil9LCBmYWxzZSlgLFxuICAgICkudG9TdHJpbmcoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNYWtlIGFuIGludHJpbnNpYyBTdGF0ZXMuTWF0aFJhbmRvbSBleHByZXNzaW9uXG4gICAqXG4gICAqIFVzZSB0aGlzIGZ1bmN0aW9uIHRvIHJldHVybiBhIHJhbmRvbSBudW1iZXIgYmV0d2VlbiB0aGUgc3BlY2lmaWVkIHN0YXJ0IGFuZCBlbmQgbnVtYmVyLiBGb3IgZXhhbXBsZSwgeW91IGNhbiB1c2UgdGhpcyBmdW5jdGlvbiB0byBkaXN0cmlidXRlIGEgc3BlY2lmaWMgdGFzayBiZXR3ZWVuIHR3byBvciBtb3JlIHJlc291cmNlcy5cbiAgICpcbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vc3RlcC1mdW5jdGlvbnMvbGF0ZXN0L2RnL2FtYXpvbi1zdGF0ZXMtbGFuZ3VhZ2UtaW50cmluc2ljLWZ1bmN0aW9ucy5odG1sXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIG1hdGhSYW5kb20oc3RhcnQ6IG51bWJlciwgZW5kOiBudW1iZXIpOiBzdHJpbmcge1xuICAgIHJldHVybiBuZXcgSnNvblBhdGhUb2tlbihcbiAgICAgIGBTdGF0ZXMuTWF0aFJhbmRvbSgke1tzdGFydCwgZW5kXS5tYXAocmVuZGVySW5FeHByZXNzaW9uKS5qb2luKFwiLCBcIil9KWAsXG4gICAgKS50b1N0cmluZygpO1xuICB9XG5cbiAgLyoqXG4gICAqIE1ha2UgYW4gaW50cmluc2ljIFN0YXRlcy5NYXRoQWRkIGV4cHJlc3Npb25cbiAgICpcbiAgICogVXNlIHRoaXMgZnVuY3Rpb24gdG8gcmV0dXJuIHRoZSBzdW0gb2YgdHdvIG51bWJlcnMuIEZvciBleGFtcGxlLCB5b3UgY2FuIHVzZSB0aGlzIGZ1bmN0aW9uIHRvIGluY3JlbWVudCB2YWx1ZXMgaW5zaWRlIGEgbG9vcCB3aXRob3V0IGludm9raW5nIGEgTGFtYmRhIGZ1bmN0aW9uLlxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9zdGVwLWZ1bmN0aW9ucy9sYXRlc3QvZGcvYW1hem9uLXN0YXRlcy1sYW5ndWFnZS1pbnRyaW5zaWMtZnVuY3Rpb25zLmh0bWxcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgbWF0aEFkZChudW0xOiBudW1iZXIsIG51bTI6IG51bWJlcik6IHN0cmluZyB7XG4gICAgcmV0dXJuIG5ldyBKc29uUGF0aFRva2VuKFxuICAgICAgYFN0YXRlcy5NYXRoQWRkKCR7W251bTEsIG51bTJdLm1hcChyZW5kZXJJbkV4cHJlc3Npb24pLmpvaW4oXCIsIFwiKX0pYCxcbiAgICApLnRvU3RyaW5nKCk7XG4gIH1cblxuICAvKipcbiAgICogTWFrZSBhbiBpbnRyaW5zaWMgU3RhdGVzLlN0cmluZ1NwbGl0IGV4cHJlc3Npb25cbiAgICpcbiAgICogVXNlIHRoaXMgZnVuY3Rpb24gdG8gc3BsaXQgYSBzdHJpbmcgaW50byBhbiBhcnJheSBvZiB2YWx1ZXMuIFRoaXMgZnVuY3Rpb24gdGFrZXMgdHdvIGFyZ3VtZW50cy5UaGUgZmlyc3QgYXJndW1lbnQgaXMgYSBzdHJpbmcgYW5kIHRoZSBzZWNvbmQgYXJndW1lbnQgaXMgdGhlIGRlbGltaXRpbmcgY2hhcmFjdGVyIHRoYXQgdGhlIGZ1bmN0aW9uIHdpbGwgdXNlIHRvIGRpdmlkZSB0aGUgc3RyaW5nLlxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9zdGVwLWZ1bmN0aW9ucy9sYXRlc3QvZGcvYW1hem9uLXN0YXRlcy1sYW5ndWFnZS1pbnRyaW5zaWMtZnVuY3Rpb25zLmh0bWxcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgc3RyaW5nU3BsaXQoaW5wdXRTdHJpbmc6IHN0cmluZywgc3BsaXR0ZXI6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIG5ldyBKc29uUGF0aFRva2VuKFxuICAgICAgYFN0YXRlcy5TdHJpbmdTcGxpdCgke1tpbnB1dFN0cmluZywgc3BsaXR0ZXJdLm1hcChyZW5kZXJJbkV4cHJlc3Npb24pLmpvaW4oXCIsIFwiKX0pYCxcbiAgICApLnRvU3RyaW5nKCk7XG4gIH1cblxuICAvKipcbiAgICogTWFrZSBhbiBpbnRyaW5zaWMgU3RhdGVzLlVVSUQgZXhwcmVzc2lvblxuICAgKlxuICAgKiBVc2UgdGhpcyBmdW5jdGlvbiB0byByZXR1cm4gYSB2ZXJzaW9uIDQgdW5pdmVyc2FsbHkgdW5pcXVlIGlkZW50aWZpZXIgKHY0IFVVSUQpIGdlbmVyYXRlZCB1c2luZyByYW5kb20gbnVtYmVycy4gRm9yIGV4YW1wbGUsIHlvdSBjYW4gdXNlIHRoaXMgZnVuY3Rpb24gdG8gY2FsbCBvdGhlciBBV1Mgc2VydmljZXMgb3IgcmVzb3VyY2VzIHRoYXQgbmVlZCBhIFVVSUQgcGFyYW1ldGVyIG9yIGluc2VydCBpdGVtcyBpbiBhIER5bmFtb0RCIHRhYmxlLlxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9zdGVwLWZ1bmN0aW9ucy9sYXRlc3QvZGcvYW1hem9uLXN0YXRlcy1sYW5ndWFnZS1pbnRyaW5zaWMtZnVuY3Rpb25zLmh0bWxcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgdXVpZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiBuZXcgSnNvblBhdGhUb2tlbihcIlN0YXRlcy5VVUlEKClcIikudG9TdHJpbmcoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNYWtlIGFuIGludHJpbnNpYyBTdGF0ZXMuRm9ybWF0IGV4cHJlc3Npb25cbiAgICpcbiAgICogVGhpcyBjYW4gYmUgdXNlZCB0byBlbWJlZCBKU09OIFBhdGggdmFyaWFibGVzIGluc2lkZSBhIGZvcm1hdCBzdHJpbmcuXG4gICAqXG4gICAqIEZvciBleGFtcGxlOlxuICAgKlxuICAgKiBgYGB0c1xuICAgKiBzZm4uSnNvblBhdGguZm9ybWF0KCdIZWxsbywgbXkgbmFtZSBpcyB7fS4nLCBzZm4uSnNvblBhdGguc3RyaW5nQXQoJyQubmFtZScpKVxuICAgKiBgYGBcbiAgICpcbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vc3RlcC1mdW5jdGlvbnMvbGF0ZXN0L2RnL2FtYXpvbi1zdGF0ZXMtbGFuZ3VhZ2UtaW50cmluc2ljLWZ1bmN0aW9ucy5odG1sXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGZvcm1hdChmb3JtYXRTdHJpbmc6IHN0cmluZywgLi4udmFsdWVzOiBzdHJpbmdbXSk6IHN0cmluZyB7XG4gICAgY29uc3QgYWxsQXJncyA9IFtmb3JtYXRTdHJpbmcsIC4uLnZhbHVlc107XG4gICAgcmV0dXJuIG5ldyBKc29uUGF0aFRva2VuKFxuICAgICAgYFN0YXRlcy5Gb3JtYXQoJHthbGxBcmdzLm1hcChyZW5kZXJJbkV4cHJlc3Npb24pLmpvaW4oXCIsIFwiKX0pYCxcbiAgICApLnRvU3RyaW5nKCk7XG4gIH1cblxuICAvKipcbiAgICogTWFrZSBhbiBpbnRyaW5zaWMgU3RhdGVzLlN0cmluZ1RvSnNvbiBleHByZXNzaW9uXG4gICAqXG4gICAqIER1cmluZyB0aGUgZXhlY3V0aW9uIG9mIHRoZSBTdGVwIEZ1bmN0aW9ucyBzdGF0ZSBtYWNoaW5lLCBwYXJzZSB0aGUgZ2l2ZW5cbiAgICogYXJndW1lbnQgYXMgSlNPTiBpbnRvIGl0cyBvYmplY3QgZm9ybS5cbiAgICpcbiAgICogRm9yIGV4YW1wbGU6XG4gICAqXG4gICAqIGBgYHRzXG4gICAqIHNmbi5Kc29uUGF0aC5zdHJpbmdUb0pzb24oc2ZuLkpzb25QYXRoLnN0cmluZ0F0KCckLnNvbWVKc29uQm9keScpKVxuICAgKiBgYGBcbiAgICpcbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vc3RlcC1mdW5jdGlvbnMvbGF0ZXN0L2RnL2FtYXpvbi1zdGF0ZXMtbGFuZ3VhZ2UtaW50cmluc2ljLWZ1bmN0aW9ucy5odG1sXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHN0cmluZ1RvSnNvbihqc29uU3RyaW5nOiBzdHJpbmcpOiBJUmVzb2x2YWJsZSB7XG4gICAgcmV0dXJuIG5ldyBKc29uUGF0aFRva2VuKFxuICAgICAgYFN0YXRlcy5TdHJpbmdUb0pzb24oJHtyZW5kZXJJbkV4cHJlc3Npb24oanNvblN0cmluZyl9KWAsXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNYWtlIGFuIGludHJpbnNpYyBTdGF0ZXMuSnNvblRvU3RyaW5nIGV4cHJlc3Npb25cbiAgICpcbiAgICogRHVyaW5nIHRoZSBleGVjdXRpb24gb2YgdGhlIFN0ZXAgRnVuY3Rpb25zIHN0YXRlIG1hY2hpbmUsIGVuY29kZSB0aGVcbiAgICogZ2l2ZW4gb2JqZWN0IGludG8gYSBKU09OIHN0cmluZy5cbiAgICpcbiAgICogRm9yIGV4YW1wbGU6XG4gICAqXG4gICAqIGBgYHRzXG4gICAqIHNmbi5Kc29uUGF0aC5qc29uVG9TdHJpbmcoc2ZuLkpzb25QYXRoLm9iamVjdEF0KCckLnNvbWVPYmplY3QnKSlcbiAgICogYGBgXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL3N0ZXAtZnVuY3Rpb25zL2xhdGVzdC9kZy9hbWF6b24tc3RhdGVzLWxhbmd1YWdlLWludHJpbnNpYy1mdW5jdGlvbnMuaHRtbFxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBqc29uVG9TdHJpbmcodmFsdWU6IGFueSk6IHN0cmluZyB7XG4gICAgY29uc3QgcGF0aCA9IGpzb25QYXRoRnJvbUFueSh2YWx1ZSk7XG4gICAgaWYgKCFwYXRoKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIFwiQXJndW1lbnQgdG8gSnNvblBhdGguanNvblRvU3RyaW5nKCkgbXVzdCBiZSBhIEpzb25QYXRoIG9iamVjdFwiLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IEpzb25QYXRoVG9rZW4oYFN0YXRlcy5Kc29uVG9TdHJpbmcoJHtwYXRofSlgKS50b1N0cmluZygpO1xuICB9XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcigpIHt9XG59XG5cbi8qKlxuICogRXh0cmFjdCBhIGZpZWxkIGZyb20gdGhlIFN0YXRlIE1hY2hpbmUgZGF0YSB0aGF0IGdldHMgcGFzc2VkIGFyb3VuZCBiZXR3ZWVuIHN0YXRlc1xuICpcbiAqIEBkZXByZWNhdGVkIHJlcGxhY2VkIGJ5IGBKc29uUGF0aGBcbiAqL1xuZXhwb3J0IGNsYXNzIERhdGEge1xuICAvKipcbiAgICogSW5zdGVhZCBvZiB1c2luZyBhIGxpdGVyYWwgc3RyaW5nLCBnZXQgdGhlIHZhbHVlIGZyb20gYSBKU09OIHBhdGhcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgc3RyaW5nQXQocGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICB2YWxpZGF0ZURhdGFQYXRoKHBhdGgpO1xuICAgIHJldHVybiBuZXcgSnNvblBhdGhUb2tlbihwYXRoKS50b1N0cmluZygpO1xuICB9XG5cbiAgLyoqXG4gICAqIEluc3RlYWQgb2YgdXNpbmcgYSBsaXRlcmFsIHN0cmluZyBsaXN0LCBnZXQgdGhlIHZhbHVlIGZyb20gYSBKU09OIHBhdGhcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgbGlzdEF0KHBhdGg6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgICB2YWxpZGF0ZURhdGFQYXRoKHBhdGgpO1xuICAgIHJldHVybiBUb2tlbi5hc0xpc3QobmV3IEpzb25QYXRoVG9rZW4ocGF0aCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEluc3RlYWQgb2YgdXNpbmcgYSBsaXRlcmFsIG51bWJlciwgZ2V0IHRoZSB2YWx1ZSBmcm9tIGEgSlNPTiBwYXRoXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIG51bWJlckF0KHBhdGg6IHN0cmluZyk6IG51bWJlciB7XG4gICAgdmFsaWRhdGVEYXRhUGF0aChwYXRoKTtcbiAgICByZXR1cm4gVG9rZW4uYXNOdW1iZXIobmV3IEpzb25QYXRoVG9rZW4ocGF0aCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVzZSB0aGUgZW50aXJlIGRhdGEgc3RydWN0dXJlXG4gICAqXG4gICAqIFdpbGwgYmUgYW4gb2JqZWN0IGF0IGludm9jYXRpb24gdGltZSwgYnV0IGlzIHJlcHJlc2VudGVkIGluIHRoZSBDREtcbiAgICogYXBwbGljYXRpb24gYXMgYSBzdHJpbmcuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGdldCBlbnRpcmVQYXlsb2FkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIG5ldyBKc29uUGF0aFRva2VuKFwiJFwiKS50b1N0cmluZygpO1xuICB9XG5cbiAgLyoqXG4gICAqIERldGVybWluZXMgaWYgdGhlIGluZGljYXRlZCBzdHJpbmcgaXMgYW4gZW5jb2RlZCBKU09OIHBhdGhcbiAgICpcbiAgICogQHBhcmFtIHZhbHVlIHN0cmluZyB0byBiZSBldmFsdWF0ZWRcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgaXNKc29uUGF0aFN0cmluZyh2YWx1ZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhanNvblBhdGhTdHJpbmcodmFsdWUpO1xuICB9XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcigpIHt9XG59XG5cbi8qKlxuICogRXh0cmFjdCBhIGZpZWxkIGZyb20gdGhlIFN0YXRlIE1hY2hpbmUgQ29udGV4dCBkYXRhXG4gKlxuICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vc3RlcC1mdW5jdGlvbnMvbGF0ZXN0L2RnL2Nvbm5lY3QtdG8tcmVzb3VyY2UuaHRtbCN3YWl0LXRva2VuLWNvbnRleHRvYmplY3RcbiAqXG4gKiBAZGVwcmVjYXRlZCByZXBsYWNlZCBieSBgSnNvblBhdGhgXG4gKi9cbmV4cG9ydCBjbGFzcyBDb250ZXh0IHtcbiAgLyoqXG4gICAqIEluc3RlYWQgb2YgdXNpbmcgYSBsaXRlcmFsIHN0cmluZywgZ2V0IHRoZSB2YWx1ZSBmcm9tIGEgSlNPTiBwYXRoXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHN0cmluZ0F0KHBhdGg6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgdmFsaWRhdGVDb250ZXh0UGF0aChwYXRoKTtcbiAgICByZXR1cm4gbmV3IEpzb25QYXRoVG9rZW4ocGF0aCkudG9TdHJpbmcoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbnN0ZWFkIG9mIHVzaW5nIGEgbGl0ZXJhbCBudW1iZXIsIGdldCB0aGUgdmFsdWUgZnJvbSBhIEpTT04gcGF0aFxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBudW1iZXJBdChwYXRoOiBzdHJpbmcpOiBudW1iZXIge1xuICAgIHZhbGlkYXRlQ29udGV4dFBhdGgocGF0aCk7XG4gICAgcmV0dXJuIFRva2VuLmFzTnVtYmVyKG5ldyBKc29uUGF0aFRva2VuKHBhdGgpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIFRhc2sgVG9rZW4gZmllbGRcbiAgICpcbiAgICogRXh0ZXJuYWwgYWN0aW9ucyB3aWxsIG5lZWQgdGhpcyB0b2tlbiB0byByZXBvcnQgc3RlcCBjb21wbGV0aW9uXG4gICAqIGJhY2sgdG8gU3RlcEZ1bmN0aW9ucyB1c2luZyB0aGUgYFNlbmRUYXNrU3VjY2Vzc2Agb3IgYFNlbmRUYXNrRmFpbHVyZWBcbiAgICogY2FsbHMuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGdldCB0YXNrVG9rZW4oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gbmV3IEpzb25QYXRoVG9rZW4oXCIkJC5UYXNrLlRva2VuXCIpLnRvU3RyaW5nKCk7XG4gIH1cblxuICAvKipcbiAgICogVXNlIHRoZSBlbnRpcmUgY29udGV4dCBkYXRhIHN0cnVjdHVyZVxuICAgKlxuICAgKiBXaWxsIGJlIGFuIG9iamVjdCBhdCBpbnZvY2F0aW9uIHRpbWUsIGJ1dCBpcyByZXByZXNlbnRlZCBpbiB0aGUgQ0RLXG4gICAqIGFwcGxpY2F0aW9uIGFzIGEgc3RyaW5nLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBnZXQgZW50aXJlQ29udGV4dCgpOiBzdHJpbmcge1xuICAgIHJldHVybiBuZXcgSnNvblBhdGhUb2tlbihcIiQkXCIpLnRvU3RyaW5nKCk7XG4gIH1cblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKCkge31cbn1cblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb25zIHRvIHdvcmsgd2l0aCBzdHJ1Y3R1cmVzIGNvbnRhaW5pbmcgZmllbGRzXG4gKi9cbmV4cG9ydCBjbGFzcyBGaWVsZFV0aWxzIHtcbiAgLyoqXG4gICAqIFJlbmRlciBhIEpTT04gc3RydWN0dXJlIGNvbnRhaW5pbmcgZmllbGRzIHRvIHRoZSByaWdodCBTdGVwRnVuY3Rpb25zIHN0cnVjdHVyZVxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZW5kZXJPYmplY3Qob2JqPzoge1xuICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgfSk6IHsgW2tleTogc3RyaW5nXTogYW55IH0gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiByZW5kZXJPYmplY3Qob2JqKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYWxsIEpTT04gcGF0aHMgdXNlZCBpbiB0aGUgZ2l2ZW4gc3RydWN0dXJlXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGZpbmRSZWZlcmVuY2VkUGF0aHMob2JqPzogeyBba2V5OiBzdHJpbmddOiBhbnkgfSk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gQXJyYXkuZnJvbShmaW5kUmVmZXJlbmNlZFBhdGhzKG9iaikpLnNvcnQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHdoZXRoZXIgdGhlIGdpdmVuIHRhc2sgc3RydWN0dXJlIGNvbnRhaW5zIHRoZSBUYXNrVG9rZW4gZmllbGQgYW55d2hlcmVcbiAgICpcbiAgICogVGhlIGZpZWxkIGlzIGNvbnNpZGVyZWQgaW5jbHVkZWQgaWYgdGhlIGZpZWxkIGl0c2VsZiBvciBvbmUgb2YgaXRzIGNvbnRhaW5pbmdcbiAgICogZmllbGRzIG9jY3VycyBhbnl3aGVyZSBpbiB0aGUgcGF5bG9hZC5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgY29udGFpbnNUYXNrVG9rZW4ob2JqPzogeyBba2V5OiBzdHJpbmddOiBhbnkgfSk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHBhdGhzID0gZmluZFJlZmVyZW5jZWRQYXRocyhvYmopO1xuICAgIHJldHVybiAoXG4gICAgICBwYXRocy5oYXMoXCIkJC5UYXNrLlRva2VuXCIpIHx8IHBhdGhzLmhhcyhcIiQkLlRhc2tcIikgfHwgcGF0aHMuaGFzKFwiJCRcIilcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcigpIHt9XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlSnNvblBhdGgocGF0aDogc3RyaW5nKSB7XG4gIGNvbnN0IGludHJpbnNpY0Z1bmN0aW9uTmFtZXMgPSBbXG4gICAgLy8gSW50cmluc2ljcyBmb3IgYXJyYXlzXG4gICAgXCJBcnJheVwiLFxuICAgIFwiQXJyYXlQYXJ0aXRpb25cIixcbiAgICBcIkFycmF5Q29udGFpbnNcIixcbiAgICBcIkFycmF5UmFuZ2VcIixcbiAgICBcIkFycmF5R2V0SXRlbVwiLFxuICAgIFwiQXJyYXlMZW5ndGhcIixcbiAgICBcIkFycmF5VW5pcXVlXCIsXG4gICAgLy8gSW50cmluc2ljcyBmb3IgZGF0YSBlbmNvZGluZyBhbmQgZGVjb2RpbmdcbiAgICBcIkJhc2U2NEVuY29kZVwiLFxuICAgIFwiQmFzZTY0RGVjb2RlXCIsXG4gICAgLy8gSW50cmluc2ljIGZvciBoYXNoIGNhbGN1bGF0aW9uXG4gICAgXCJIYXNoXCIsXG4gICAgLy8gSW50cmluc2ljcyBmb3IgSlNPTiBkYXRhIG1hbmlwdWxhdGlvblxuICAgIFwiSnNvbk1lcmdlXCIsXG4gICAgXCJTdHJpbmdUb0pzb25cIixcbiAgICBcIkpzb25Ub1N0cmluZ1wiLFxuICAgIC8vIEludHJpbnNpY3MgZm9yIE1hdGggb3BlcmF0aW9uc1xuICAgIFwiTWF0aFJhbmRvbVwiLFxuICAgIFwiTWF0aEFkZFwiLFxuICAgIC8vIEludHJpbnNpYyBmb3IgU3RyaW5nIG9wZXJhdGlvblxuICAgIFwiU3RyaW5nU3BsaXRcIixcbiAgICAvLyBJbnRyaW5zaWMgZm9yIHVuaXF1ZSBpZGVudGlmaWVyIGdlbmVyYXRpb25cbiAgICBcIlVVSURcIixcbiAgICAvLyBJbnRyaW5zaWMgZm9yIGdlbmVyaWMgb3BlcmF0aW9uXG4gICAgXCJGb3JtYXRcIixcbiAgXTtcbiAgY29uc3QgaW50cmluc2ljRnVuY3Rpb25GdWxsTmFtZXMgPSBpbnRyaW5zaWNGdW5jdGlvbk5hbWVzLm1hcChcbiAgICAoZm4pID0+IGBTdGF0ZXMuJHtmbn1gLFxuICApO1xuICBpZiAoXG4gICAgcGF0aCAhPT0gXCIkXCIgJiZcbiAgICAhcGF0aC5zdGFydHNXaXRoKFwiJC5cIikgJiZcbiAgICBwYXRoICE9PSBcIiQkXCIgJiZcbiAgICAhcGF0aC5zdGFydHNXaXRoKFwiJCQuXCIpICYmXG4gICAgIXBhdGguc3RhcnRzV2l0aChcIiRbXCIpICYmXG4gICAgaW50cmluc2ljRnVuY3Rpb25GdWxsTmFtZXMuZXZlcnkoKGZuKSA9PiAhcGF0aC5zdGFydHNXaXRoKGZuKSlcbiAgKSB7XG4gICAgY29uc3QgbGFzdEl0ZW0gPSBpbnRyaW5zaWNGdW5jdGlvbkZ1bGxOYW1lcy5wb3AoKTtcbiAgICBjb25zdCBpbnRyaW5zaWNGdW5jdGlvbnNTdHIgPVxuICAgICAgaW50cmluc2ljRnVuY3Rpb25GdWxsTmFtZXMuam9pbihcIiwgXCIpICsgXCIsIG9yIFwiICsgbGFzdEl0ZW07XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYEpTT04gcGF0aCB2YWx1ZXMgbXVzdCBiZSBleGFjdGx5ICckJywgJyQkJywgc3RhcnQgd2l0aCAnJC4nLCBzdGFydCB3aXRoICckJC4nLCBzdGFydCB3aXRoICckWycsIG9yIHN0YXJ0IHdpdGggYW4gaW50cmluc2ljIGZ1bmN0aW9uOiAke2ludHJpbnNpY0Z1bmN0aW9uc1N0cn0uIFJlY2VpdmVkOiAke3BhdGh9YCxcbiAgICApO1xuICB9XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlRGF0YVBhdGgocGF0aDogc3RyaW5nKSB7XG4gIGlmIChwYXRoICE9PSBcIiRcIiAmJiAhcGF0aC5zdGFydHNXaXRoKFwiJFtcIikgJiYgIXBhdGguc3RhcnRzV2l0aChcIiQuXCIpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgXCJEYXRhIEpTT04gcGF0aCB2YWx1ZXMgbXVzdCBlaXRoZXIgYmUgZXhhY3RseSBlcXVhbCB0byAnJCcsIHN0YXJ0IHdpdGggJyRbJyBvciBzdGFydCB3aXRoICckLidcIixcbiAgICApO1xuICB9XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlQ29udGV4dFBhdGgocGF0aDogc3RyaW5nKSB7XG4gIGlmIChwYXRoICE9PSBcIiQkXCIgJiYgIXBhdGguc3RhcnRzV2l0aChcIiQkLlwiKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIFwiQ29udGV4dCBKU09OIHBhdGggdmFsdWVzIG11c3QgZWl0aGVyIGJlIGV4YWN0bHkgZXF1YWwgdG8gJyQkJyBvciBzdGFydCB3aXRoICckJC4nXCIsXG4gICAgKTtcbiAgfVxufVxuIl19