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,407 @@
1
+ "use strict";
2
+ var _a;
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.Role = void 0;
5
+ const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
6
+ const provider_aws_1 = require("@cdktf/provider-aws");
7
+ const cdktf_1 = require("cdktf");
8
+ const arn_1 = require("../arn");
9
+ const aws_construct_1 = require("../aws-construct");
10
+ const aws_stack_1 = require("../aws-stack");
11
+ const grant_1 = require("./grant");
12
+ const policy_1 = require("./policy");
13
+ const policy_document_1 = require("./policy-document");
14
+ const principals_1 = require("./principals");
15
+ const adapter_1 = require("./private/adapter");
16
+ const assume_role_policy_1 = require("./private/assume-role-policy");
17
+ const immutable_role_1 = require("./private/immutable-role");
18
+ const imported_role_1 = require("./private/imported-role");
19
+ // import { PrecreatedRole } from "./private/precreated-role";
20
+ const util_1 = require("./private/util");
21
+ const token_1 = require("../../token");
22
+ // TODO: Re-Add LazyRole?
23
+ // ref: https://github.com/aws/aws-cdk/blob/v2.156.0/packages/aws-cdk-lib/aws-iam/lib/lazy-role.ts
24
+ // TODO: re-implement iam role policy splitting
25
+ // const MAX_INLINE_SIZE = 10000;
26
+ // const MAX_MANAGEDPOL_SIZE = 6000;
27
+ const IAM_ROLE_SYMBOL = Symbol.for("terraconstructs/lib/aws/iam.Role");
28
+ /**
29
+ * IAM Role
30
+ *
31
+ * Defines an IAM role. The role is created with an assume policy document associated with
32
+ * the specified AWS service principal defined in `serviceAssumeRole`.
33
+ */
34
+ class Role extends aws_construct_1.AwsConstructBase {
35
+ /**
36
+ * Import an external role by ARN.
37
+ *
38
+ * If the imported Role ARN is a Token (such as a
39
+ * `CfnParameter.valueAsString` or a `Fn.importValue()`) *and* the referenced
40
+ * role has a `path` (like `arn:...:role/AdminRoles/Alice`), the
41
+ * `roleName` property will not resolve to the correct value. Instead it
42
+ * will resolve to the first path component. We unfortunately cannot express
43
+ * the correct calculation of the full path name as a CloudFormation
44
+ * expression. In this scenario the Role ARN should be supplied without the
45
+ * `path` in order to resolve the correct role resource.
46
+ *
47
+ * @param scope construct scope
48
+ * @param id construct id
49
+ * @param roleArn the ARN of the role to import
50
+ * @param options allow customizing the behavior of the returned role
51
+ */
52
+ static fromRoleArn(scope, id, roleArn, options = {}) {
53
+ const scopeStack = aws_stack_1.AwsStack.ofAwsConstruct(scope);
54
+ const parsedArn = scopeStack.splitArn(roleArn, arn_1.ArnFormat.SLASH_RESOURCE_NAME);
55
+ const resourceName = parsedArn.resourceName;
56
+ const roleAccount = parsedArn.account;
57
+ // service roles have an ARN like 'arn:aws:iam::<account>:role/service-role/<roleName>'
58
+ // or 'arn:aws:iam::<account>:role/service-role/servicename.amazonaws.com/service-role/<roleName>'
59
+ // we want to support these as well, so we just use the element after the last slash as role name
60
+ const roleName = resourceName.split("/").pop();
61
+ // if (getCustomizeRolesConfig(scope).enabled) {
62
+ // return new PrecreatedRole(scope, id, {
63
+ // rolePath: `${scope.node.path}/${id}`,
64
+ // role: new ImportedRole(scope, `Import${id}`, {
65
+ // account: roleAccount,
66
+ // roleArn,
67
+ // roleName,
68
+ // ...options,
69
+ // }),
70
+ // });
71
+ // }
72
+ if (options.addGrantsToResources !== undefined &&
73
+ options.mutable !== false) {
74
+ throw new Error("'addGrantsToResources' can only be passed if 'mutable: false'");
75
+ }
76
+ const roleArnAndScopeStackAccountComparison = (0, token_1.tokenCompareStrings)(roleAccount ?? "", scopeStack.account);
77
+ const equalOrAnyUnresolved = roleArnAndScopeStackAccountComparison === token_1.TokenComparison.SAME ||
78
+ roleArnAndScopeStackAccountComparison ===
79
+ token_1.TokenComparison.BOTH_UNRESOLVED ||
80
+ roleArnAndScopeStackAccountComparison === token_1.TokenComparison.ONE_UNRESOLVED;
81
+ // if we are returning an immutable role then the 'importedRole' is just a throwaway construct
82
+ // so give it a different id
83
+ const mutableRoleId = options.mutable !== false && equalOrAnyUnresolved
84
+ ? id
85
+ : `MutableRole${id}`;
86
+ const importedRole = new imported_role_1.ImportedRole(scope, mutableRoleId, {
87
+ roleArn,
88
+ roleName,
89
+ account: roleAccount,
90
+ ...options,
91
+ });
92
+ // we only return an immutable Role if both accounts were explicitly provided, and different
93
+ return options.mutable !== false && equalOrAnyUnresolved
94
+ ? importedRole
95
+ : new immutable_role_1.ImmutableRole(scope, id, importedRole, options.addGrantsToResources ?? false);
96
+ }
97
+ /**
98
+ * Return whether the given object is a Role
99
+ */
100
+ static isRole(x) {
101
+ return x !== null && typeof x === "object" && IAM_ROLE_SYMBOL in x;
102
+ }
103
+ /**
104
+ * Import an external role by name.
105
+ *
106
+ * The imported role is assumed to exist in the same account as the account
107
+ * the scope's containing Stack is being deployed to.
108
+
109
+ * @param scope construct scope
110
+ * @param id construct id
111
+ * @param roleName the name of the role to import
112
+ * @param options allow customizing the behavior of the returned role
113
+ */
114
+ static fromRoleName(scope, id, roleName, options = {}) {
115
+ return Role.fromRoleArn(scope, id, aws_stack_1.AwsStack.ofAwsConstruct(scope).formatArn({
116
+ region: "",
117
+ service: "iam",
118
+ resource: "role",
119
+ resourceName: roleName,
120
+ }), options);
121
+ }
122
+ /** Strongly typed Outputs */
123
+ get roleOutputs() {
124
+ return {
125
+ arn: this.roleArn,
126
+ name: this.roleName,
127
+ };
128
+ }
129
+ get outputs() {
130
+ return this.roleOutputs;
131
+ }
132
+ constructor(scope, id, props) {
133
+ super(scope, id, props);
134
+ // TODO: Support custom role creation
135
+ // https://github.com/aws/aws-cdk/blob/v2.143.0/packages/aws-cdk-lib/aws-iam/lib/role.ts#L355
136
+ this.grantPrincipal = this;
137
+ this.principalAccount = this.env.account;
138
+ this.assumeRoleAction = "sts:AssumeRole";
139
+ this.managedPolicies = [];
140
+ this.attachedPolicies = new util_1.AttachedPolicies();
141
+ if (props.roleName &&
142
+ !cdktf_1.Token.isUnresolved(props.roleName) &&
143
+ !/^[\w+=,.@-]{1,64}$/.test(props.roleName)) {
144
+ throw new Error("Invalid roleName. The name must be a string of characters consisting of upper and lowercase alphanumeric characters with no spaces. You can also include any of the following characters: _+=,.@-. Length must be between 1 and 64 characters.");
145
+ }
146
+ if (props.roleName && props.roleNamePrefix) {
147
+ throw new Error("Cannot specify both 'roleName' and 'roleNamePrefix'. Use only one.");
148
+ }
149
+ const externalIds = props.externalIds || [];
150
+ if (props.externalId) {
151
+ externalIds.push(props.externalId);
152
+ }
153
+ this.assumeRolePolicy = createAssumeRolePolicy(this, "AssumeRolePolicy", props.assumedBy, externalIds);
154
+ this.managedPolicies.push(...(props.managedPolicies || []));
155
+ this.inlinePolicies = props.inlinePolicies || {};
156
+ this.permissionsBoundary = props.permissionsBoundary;
157
+ const maxSessionDuration = props.maxSessionDuration && props.maxSessionDuration.toSeconds();
158
+ validateMaxSessionDuration(maxSessionDuration);
159
+ const description = props.description && props.description?.length > 0
160
+ ? props.description
161
+ : undefined;
162
+ if (description && description.length > 1000) {
163
+ throw new Error("Role description must be no longer than 1000 characters.");
164
+ }
165
+ validateRolePath(props.path);
166
+ // pre-created role snipped
167
+ // https://github.com/aws/aws-cdk/blob/v2.143.0/packages/aws-cdk-lib/aws-iam/lib/role.ts#L439
168
+ const namePrefix = this.stack.uniqueResourceNamePrefix(this, {
169
+ prefix: props.roleNamePrefix ?? this.gridUUID + "-",
170
+ allowedSpecialCharacters: "_+=,.@-",
171
+ maxLength: 64,
172
+ });
173
+ this.resource = new provider_aws_1.iamRole.IamRole(this, "Resource", {
174
+ ...props, // copy over Terraform Meta Arguments from ConstructProps
175
+ assumeRolePolicy: this.assumeRolePolicy.json,
176
+ managedPolicyArns: util_1.UniqueStringSet.from(() => this.managedPolicies.map((p) => p.managedPolicyArn)),
177
+ inlinePolicy: _flatten(this.inlinePolicies),
178
+ path: props.path,
179
+ permissionsBoundary: this.permissionsBoundary
180
+ ? this.permissionsBoundary.managedPolicyArn
181
+ : undefined,
182
+ name: props.roleName,
183
+ namePrefix: !props.roleName ? namePrefix : undefined,
184
+ maxSessionDuration,
185
+ description,
186
+ forceDetachPolicies: props.forceDetachPolicies,
187
+ });
188
+ // Stable and unique string identifying the role.
189
+ this._roleId = this.resource.uniqueId;
190
+ // TODO: Need to handle cross env ARN refs?
191
+ // CDK: https://github.com/aws/aws-cdk/blob/v2.143.0/packages/aws-cdk-lib/core/lib/resource.ts#L288
192
+ this.roleArn = this.resource.arn;
193
+ // TODO: Need to handle cross env Name refs?
194
+ // CDK: https://github.com/aws/aws-cdk/blob/v2.143.0/packages/aws-cdk-lib/core/lib/resource.ts#L254
195
+ this.roleName = this.resource.name;
196
+ // TODO: Re-add policy splitting?
197
+ // Aspects.of(this).add({
198
+ // visit: (c) => {
199
+ // if (c === this) {
200
+ // this.splitLargePolicy();
201
+ // }
202
+ // },
203
+ // });
204
+ this.policyFragment = new principals_1.ArnPrincipal(this.roleArn).policyFragment;
205
+ function _flatten(policies) {
206
+ if (policies == null || Object.keys(policies).length === 0) {
207
+ return undefined;
208
+ }
209
+ const result = new Array();
210
+ for (const policyName of Object.keys(policies)) {
211
+ const policyDocument = policies[policyName];
212
+ result.push({
213
+ name: policyName,
214
+ policy: policyDocument.json,
215
+ });
216
+ }
217
+ return result;
218
+ }
219
+ this.node.addValidation({ validate: () => this.validateRole() });
220
+ }
221
+ /**
222
+ * Adds a permission to the role's default policy document.
223
+ * If there is no default policy attached to this role, it will be created.
224
+ * @param statement The permission statement to add to the policy document
225
+ */
226
+ addToPrincipalPolicy(statement) {
227
+ if (!this.defaultPolicy) {
228
+ this.defaultPolicy = new policy_1.Policy(this, "DefaultPolicy");
229
+ this.attachInlinePolicy(this.defaultPolicy);
230
+ }
231
+ this.defaultPolicy.addStatements(statement);
232
+ // // We might split this statement off into a different policy, so we'll need to
233
+ // // late-bind the dependable.
234
+ // const policyDependable = new DependencyGroup();
235
+ // this.dependables.set(statement, policyDependable);
236
+ return { statementAdded: true, policyDependable: this };
237
+ }
238
+ addToPolicy(statement) {
239
+ return this.addToPrincipalPolicy(statement).statementAdded;
240
+ }
241
+ /**
242
+ * Attaches a managed policy to this role.
243
+ *
244
+ * NOTE: Using this method will force the role to take over
245
+ * exclusive management of the role's ManagedPolicy attachments
246
+ * These arguments are incompatible with other ways of managing
247
+ * a role's such as attaching the policy to the role through its
248
+ * `policy.attachToRole(role)` method.
249
+ *
250
+ * If you attempt to manage a role's policies by multiple means,
251
+ * you will get resource cycling and/or errors.
252
+ *
253
+ * ```typescript
254
+ * const policy1 = new iam.ManagedPolicy(this, 'Policy', {
255
+ * managedPolicyName: 'MyPolicy1',
256
+ * description: 'A description of the policy',
257
+ * });
258
+ * const policy2 = new iam.ManagedPolicy(this, 'Policy', {
259
+ * managedPolicyName: 'MyPolicy2',
260
+ * description: 'A description of the policy',
261
+ * });
262
+ *
263
+ * const role = new iam.Role(this, 'Role', {
264
+ * assumedBy: new iam.ServicePrincipal('sns.amazonaws.com'),
265
+ * });
266
+ * // role becomes the manager of all attached policies
267
+ * role.addManagedPolicy(iam.ManagedPolicy.fromAwsManagedPolicyName('SecurityAudit'));
268
+ * role.addManagedPolicy(policy1);
269
+ *
270
+ * // this introduces resource cycling
271
+ * // DON'T DO THIS
272
+ * policy2.attachToRole(role);
273
+ *
274
+ * // DO THIS INSTEAD
275
+ * role.addManagedPolicy(policy2);
276
+ * ```
277
+ * @param policy The the managed policy to attach.
278
+ */
279
+ addManagedPolicy(policy) {
280
+ if (this.managedPolicies.some((mp) => mp.managedPolicyArn === policy.managedPolicyArn)) {
281
+ return;
282
+ }
283
+ this.managedPolicies.push(policy);
284
+ }
285
+ /**
286
+ * Attaches a policy to this role.
287
+ *
288
+ * NOTE: Using this method will force the role to take over
289
+ * exclusive management of the role's inline Policy attachments
290
+ * These arguments are incompatible with other ways of managing
291
+ * a role's such as attaching a policy to the role.
292
+ * If you attempt to manage a role's policies by multiple means,
293
+ * you will get resource cycling and/or errors.
294
+ *
295
+ * @param policy The policy to attach
296
+ */
297
+ attachInlinePolicy(policy) {
298
+ this.attachedPolicies.attach(policy);
299
+ policy.attachToRole(this);
300
+ }
301
+ /**
302
+ * Grant the actions defined in actions to the identity Principal on this resource.
303
+ */
304
+ grant(grantee, ...actions) {
305
+ return grant_1.Grant.addToPrincipal({
306
+ grantee,
307
+ actions,
308
+ resourceArns: [this.roleArn],
309
+ scope: this,
310
+ });
311
+ }
312
+ /**
313
+ * Grant permissions to the given principal to pass this role.
314
+ */
315
+ grantPassRole(identity) {
316
+ return this.grant(identity, "iam:PassRole");
317
+ }
318
+ /**
319
+ * Grant permissions to the given principal to assume this role.
320
+ */
321
+ grantAssumeRole(identity) {
322
+ // Service and account principals must use assumeRolePolicy
323
+ if (identity instanceof principals_1.ServicePrincipal ||
324
+ identity instanceof principals_1.AccountPrincipal) {
325
+ throw new Error("Cannot use a service or account principal with grantAssumeRole, use assumeRolePolicy instead.");
326
+ }
327
+ return this.grant(identity, "sts:AssumeRole");
328
+ }
329
+ /**
330
+ * Returns the stable and unique string identifying the role. For example,
331
+ * AIDAJQABLZS4A3QDU576Q.
332
+ *
333
+ * @attribute
334
+ */
335
+ get roleId() {
336
+ return this._roleId;
337
+ }
338
+ /**
339
+ * Return a copy of this Role object whose Policies will not be updated
340
+ *
341
+ * Use the object returned by this method if you want this Role to be used by
342
+ * a construct without it automatically updating the Role's Policies.
343
+ *
344
+ * If you do, you are responsible for adding the correct statements to the
345
+ * Role's policies yourself.
346
+ */
347
+ withoutPolicyUpdates(options = {}) {
348
+ if (!this.immutableRole) {
349
+ this.immutableRole = new immutable_role_1.ImmutableRole(this.node.scope, `ImmutableRole${this.node.id}`, this, options.addGrantsToResources ?? false);
350
+ }
351
+ return this.immutableRole;
352
+ }
353
+ validateRole() {
354
+ const errors = new Array();
355
+ errors.push(...(this.assumeRolePolicy?.validateForResourcePolicy() ?? []));
356
+ for (const policy of Object.values(this.inlinePolicies)) {
357
+ errors.push(...policy.validateForIdentityPolicy());
358
+ }
359
+ return errors;
360
+ }
361
+ }
362
+ exports.Role = Role;
363
+ _a = JSII_RTTI_SYMBOL_1;
364
+ Role[_a] = { fqn: "terraconstructs.aws.iam.Role", version: "0.0.8" };
365
+ function createAssumeRolePolicy(scope, id, principal, externalIds) {
366
+ const actualDoc = new policy_document_1.PolicyDocument(scope, id);
367
+ // If requested, add externalIds to every statement added to this doc
368
+ const addDoc = externalIds.length === 0
369
+ ? actualDoc
370
+ : new adapter_1.MutatingPolicyDocumentAdapter(actualDoc, (statement) => {
371
+ statement.addCondition({
372
+ test: "StringEquals",
373
+ variable: "sts:ExternalId",
374
+ values: externalIds,
375
+ });
376
+ return statement;
377
+ });
378
+ (0, assume_role_policy_1.defaultAddPrincipalToAssumeRole)(principal, addDoc);
379
+ return actualDoc;
380
+ }
381
+ function validateRolePath(path) {
382
+ if (path === undefined || cdktf_1.Token.isUnresolved(path)) {
383
+ return;
384
+ }
385
+ const validRolePath = /^(\/|\/[\u0021-\u007F]+\/)$/;
386
+ if (path.length == 0 || path.length > 512) {
387
+ throw new Error(`Role path must be between 1 and 512 characters. The provided role path is ${path.length} characters.`);
388
+ }
389
+ else if (!validRolePath.test(path)) {
390
+ throw new Error("Role path must be either a slash or valid characters (alphanumerics and symbols) surrounded by slashes. " +
391
+ `Valid characters are unicode characters in [\\u0021-\\u007F]. However, ${path} is provided.`);
392
+ }
393
+ }
394
+ function validateMaxSessionDuration(duration) {
395
+ if (duration === undefined) {
396
+ return;
397
+ }
398
+ if (duration < 3600 || duration > 43200) {
399
+ throw new Error(`maxSessionDuration is set to ${duration}, but must be >= 3600sec (1hr) and <= 43200sec (12hrs)`);
400
+ }
401
+ }
402
+ Object.defineProperty(Role.prototype, IAM_ROLE_SYMBOL, {
403
+ value: true,
404
+ enumerable: false,
405
+ writable: false,
406
+ });
407
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm9sZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hd3MvaWFtL3JvbGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxzREFBOEM7QUFDOUMsaUNBQThCO0FBRTlCLGdDQUFtQztBQUNuQyxvREFBdUU7QUFDdkUsNENBQXdDO0FBQ3hDLG1DQUFnQztBQUdoQyxxQ0FBa0M7QUFDbEMsdURBQW1EO0FBRW5ELDZDQU9zQjtBQUV0QiwrQ0FBa0U7QUFDbEUscUVBQStFO0FBQy9FLDZEQUF5RDtBQUN6RCwyREFBdUQ7QUFDdkQsOERBQThEO0FBQzlELHlDQUFtRTtBQUNuRSx1Q0FBbUU7QUFFbkUseUJBQXlCO0FBQ3pCLGtHQUFrRztBQUVsRywrQ0FBK0M7QUFDL0MsaUNBQWlDO0FBQ2pDLG9DQUFvQztBQUNwQyxNQUFNLGVBQWUsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLGtDQUFrQyxDQUFDLENBQUM7QUErTXZFOzs7OztHQUtHO0FBQ0gsTUFBYSxJQUFLLFNBQVEsZ0NBQWdCO0lBQ3hDOzs7Ozs7Ozs7Ozs7Ozs7O09BZ0JHO0lBQ0ksTUFBTSxDQUFDLFdBQVcsQ0FDdkIsS0FBZ0IsRUFDaEIsRUFBVSxFQUNWLE9BQWUsRUFDZixVQUE4QixFQUFFO1FBRWhDLE1BQU0sVUFBVSxHQUFHLG9CQUFRLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2xELE1BQU0sU0FBUyxHQUFHLFVBQVUsQ0FBQyxRQUFRLENBQ25DLE9BQU8sRUFDUCxlQUFTLENBQUMsbUJBQW1CLENBQzlCLENBQUM7UUFDRixNQUFNLFlBQVksR0FBRyxTQUFTLENBQUMsWUFBYSxDQUFDO1FBQzdDLE1BQU0sV0FBVyxHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQUM7UUFDdEMsdUZBQXVGO1FBQ3ZGLGtHQUFrRztRQUNsRyxpR0FBaUc7UUFDakcsTUFBTSxRQUFRLEdBQUcsWUFBWSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxH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TUFBTSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLGVBQWUsRUFBRTtJQUNyRCxLQUFLLEVBQUUsSUFBSTtJQUNYLFVBQVUsRUFBRSxLQUFLO0lBQ2pCLFFBQVEsRUFBRSxLQUFLO0NBQ2hCLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGlhbVJvbGUgfSBmcm9tIFwiQGNka3RmL3Byb3ZpZGVyLWF3c1wiO1xuaW1wb3J0IHsgVG9rZW4gfSBmcm9tIFwiY2RrdGZcIjtcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5pbXBvcnQgeyBBcm5Gb3JtYXQgfSBmcm9tIFwiLi4vYXJuXCI7XG5pbXBvcnQgeyBBd3NDb25zdHJ1Y3RCYXNlLCBBd3NDb25zdHJ1Y3RQcm9wcyB9IGZyb20gXCIuLi9hd3MtY29uc3RydWN0XCI7XG5pbXBvcnQgeyBBd3NTdGFjayB9IGZyb20gXCIuLi9hd3Mtc3RhY2tcIjtcbmltcG9ydCB7IEdyYW50IH0gZnJvbSBcIi4vZ3JhbnRcIjtcbmltcG9ydCB7IElJZGVudGl0eSB9IGZyb20gXCIuL2lkZW50aXR5LWJhc2VcIjtcbmltcG9ydCB7IElNYW5hZ2VkUG9saWN5IH0gZnJvbSBcIi4vbWFuYWdlZC1wb2xpY3lcIjtcbmltcG9ydCB7IFBvbGljeSB9IGZyb20gXCIuL3BvbGljeVwiO1xuaW1wb3J0IHsgUG9saWN5RG9jdW1lbnQgfSBmcm9tIFwiLi9wb2xpY3ktZG9jdW1lbnRcIjtcbmltcG9ydCB7IFBvbGljeVN0YXRlbWVudCB9IGZyb20gXCIuL3BvbGljeS1zdGF0ZW1lbnRcIjtcbmltcG9ydCB7XG4gIEFjY291bnRQcmluY2lwYWwsXG4gIEFkZFRvUHJpbmNpcGFsUG9saWN5UmVzdWx0LFxuICBBcm5QcmluY2lwYWwsXG4gIElQcmluY2lwYWwsXG4gIFByaW5jaXBhbFBvbGljeUZyYWdtZW50LFxuICBTZXJ2aWNlUHJpbmNpcGFsLFxufSBmcm9tIFwiLi9wcmluY2lwYWxzXCI7XG5pbXBvcnQgeyBEdXJhdGlvbiB9IGZyb20gXCIuLi8uLlwiO1xuaW1wb3J0IHsgTXV0YXRpbmdQb2xpY3lEb2N1bWVudEFkYXB0ZXIgfSBmcm9tIFwiLi9wcml2YXRlL2FkYXB0ZXJcIjtcbmltcG9ydCB7IGRlZmF1bHRBZGRQcmluY2lwYWxUb0Fzc3VtZVJvbGUgfSBmcm9tIFwiLi9wcml2YXRlL2Fzc3VtZS1yb2xlLXBvbGljeVwiO1xuaW1wb3J0IHsgSW1tdXRhYmxlUm9sZSB9IGZyb20gXCIuL3ByaXZhdGUvaW1tdXRhYmxlLXJvbGVcIjtcbmltcG9ydCB7IEltcG9ydGVkUm9sZSB9IGZyb20gXCIuL3ByaXZhdGUvaW1wb3J0ZWQtcm9sZVwiO1xuLy8gaW1wb3J0IHsgUHJlY3JlYXRlZFJvbGUgfSBmcm9tIFwiLi9wcml2YXRlL3ByZWNyZWF0ZWQtcm9sZVwiO1xuaW1wb3J0IHsgQXR0YWNoZWRQb2xpY2llcywgVW5pcXVlU3RyaW5nU2V0IH0gZnJvbSBcIi4vcHJpdmF0ZS91dGlsXCI7XG5pbXBvcnQgeyBUb2tlbkNvbXBhcmlzb24sIHRva2VuQ29tcGFyZVN0cmluZ3MgfSBmcm9tIFwiLi4vLi4vdG9rZW5cIjtcblxuLy8gVE9ETzogUmUtQWRkIExhenlSb2xlP1xuLy8gcmVmOiBodHRwczovL2dpdGh1Yi5jb20vYXdzL2F3cy1jZGsvYmxvYi92Mi4xNTYuMC9wYWNrYWdlcy9hd3MtY2RrLWxpYi9hd3MtaWFtL2xpYi9sYXp5LXJvbGUudHNcblxuLy8gVE9ETzogcmUtaW1wbGVtZW50IGlhbSByb2xlIHBvbGljeSBzcGxpdHRpbmdcbi8vIGNvbnN0IE1BWF9JTkxJTkVfU0laRSA9IDEwMDAwO1xuLy8gY29uc3QgTUFYX01BTkFHRURQT0xfU0laRSA9IDYwMDA7XG5jb25zdCBJQU1fUk9MRV9TWU1CT0wgPSBTeW1ib2wuZm9yKFwidGVycmFjb25zdHJ1Y3RzL2xpYi9hd3MvaWFtLlJvbGVcIik7XG5cbi8qKlxuICogUHJvcGVydGllcyBmb3IgZGVmaW5pbmcgYW4gSUFNIFJvbGVcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSb2xlUHJvcHMgZXh0ZW5kcyBBd3NDb25zdHJ1Y3RQcm9wcyB7XG4gIC8qKlxuICAgKiBUaGUgSUFNIHByaW5jaXBhbCAoaS5lLiBgbmV3IFNlcnZpY2VQcmluY2lwYWwoJ3Nucy5hbWF6b25hd3MuY29tJylgKVxuICAgKiB3aGljaCBjYW4gYXNzdW1lIHRoaXMgcm9sZS5cbiAgICpcbiAgICogWW91IGNhbiBsYXRlciBtb2RpZnkgdGhlIGFzc3VtZSByb2xlIHBvbGljeSBkb2N1bWVudCBieSBhY2Nlc3NpbmcgaXQgdmlhXG4gICAqIHRoZSBgYXNzdW1lUm9sZVBvbGljeWAgcHJvcGVydHkuXG4gICAqL1xuICByZWFkb25seSBhc3N1bWVkQnk6IElQcmluY2lwYWw7XG5cbiAgLyoqXG4gICAqIElEIHRoYXQgdGhlIHJvbGUgYXNzdW1lciBuZWVkcyB0byBwcm92aWRlIHdoZW4gYXNzdW1pbmcgdGhpcyByb2xlXG4gICAqXG4gICAqIElmIHRoZSBjb25maWd1cmVkIGFuZCBwcm92aWRlZCBleHRlcm5hbCBJRHMgZG8gbm90IG1hdGNoLCB0aGVcbiAgICogQXNzdW1lUm9sZSBvcGVyYXRpb24gd2lsbCBmYWlsLlxuICAgKlxuICAgKiBAZGVwcmVjYXRlZCBzZWUgYGV4dGVybmFsSWRzYFxuICAgKlxuICAgKiBAZGVmYXVsdCBObyBleHRlcm5hbCBJRCByZXF1aXJlZFxuICAgKi9cbiAgcmVhZG9ubHkgZXh0ZXJuYWxJZD86IHN0cmluZztcblxuICAvKipcbiAgICogTGlzdCBvZiBJRHMgdGhhdCB0aGUgcm9sZSBhc3N1bWVyIG5lZWRzIHRvIHByb3ZpZGUgb25lIG9mIHdoZW4gYXNzdW1pbmcgdGhpcyByb2xlXG4gICAqXG4gICAqIElmIHRoZSBjb25maWd1cmVkIGFuZCBwcm92aWRlZCBleHRlcm5hbCBJRHMgZG8gbm90IG1hdGNoLCB0aGVcbiAgICogQXNzdW1lUm9sZSBvcGVyYXRpb24gd2lsbCBmYWlsLlxuICAgKlxuICAgKiBAZGVmYXVsdCBObyBleHRlcm5hbCBJRCByZXF1aXJlZFxuICAgKi9cbiAgcmVhZG9ubHkgZXh0ZXJuYWxJZHM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogQSBsaXN0IG9mIG1hbmFnZWQgcG9saWNpZXMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgcm9sZS5cbiAgICpcbiAgICogWW91IGNhbiBhZGQgbWFuYWdlZCBwb2xpY2llcyBsYXRlciB1c2luZ1xuICAgKiBgYWRkTWFuYWdlZFBvbGljeShNYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShwb2xpY3lOYW1lKSlgLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIE5vIG1hbmFnZWQgcG9saWNpZXMuXG4gICAqL1xuICByZWFkb25seSBtYW5hZ2VkUG9saWNpZXM/OiBJTWFuYWdlZFBvbGljeVtdO1xuXG4gIC8qKlxuICAgKiBBIGxpc3Qgb2YgbmFtZWQgcG9saWNpZXMgdG8gaW5saW5lIGludG8gdGhpcyByb2xlLiBUaGVzZSBwb2xpY2llcyB3aWxsIGJlXG4gICAqIGNyZWF0ZWQgd2l0aCB0aGUgcm9sZSwgd2hlcmVhcyB0aG9zZSBhZGRlZCBieSBgYGFkZFRvUG9saWN5YGAgYXJlIGFkZGVkXG4gICAqIHVzaW5nIGEgc2VwYXJhdGUgQ2xvdWRGb3JtYXRpb24gcmVzb3VyY2UgKGFsbG93aW5nIGEgd2F5IGFyb3VuZCBjaXJjdWxhclxuICAgKiBkZXBlbmRlbmNpZXMgdGhhdCBjb3VsZCBvdGhlcndpc2UgYmUgaW50cm9kdWNlZCkuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gTm8gcG9saWN5IGlzIGlubGluZWQgaW4gdGhlIFJvbGUgcmVzb3VyY2UuXG4gICAqL1xuICByZWFkb25seSBpbmxpbmVQb2xpY2llcz86IHsgW25hbWU6IHN0cmluZ106IFBvbGljeURvY3VtZW50IH07XG5cbiAgLyoqXG4gICAqIFRoZSBwYXRoIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHJvbGUuIEZvciBpbmZvcm1hdGlvbiBhYm91dCBJQU0gcGF0aHMsIHNlZVxuICAgKiBGcmllbmRseSBOYW1lcyBhbmQgUGF0aHMgaW4gSUFNIFVzZXIgR3VpZGUuXG4gICAqXG4gICAqIEBkZWZhdWx0IC9cbiAgICovXG4gIHJlYWRvbmx5IHBhdGg/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEFXUyBzdXBwb3J0cyBwZXJtaXNzaW9ucyBib3VuZGFyaWVzIGZvciBJQU0gZW50aXRpZXMgKHVzZXJzIG9yIHJvbGVzKS5cbiAgICogQSBwZXJtaXNzaW9ucyBib3VuZGFyeSBpcyBhbiBhZHZhbmNlZCBmZWF0dXJlIGZvciB1c2luZyBhIG1hbmFnZWQgcG9saWN5XG4gICAqIHRvIHNldCB0aGUgbWF4aW11bSBwZXJtaXNzaW9ucyB0aGF0IGFuIGlkZW50aXR5LWJhc2VkIHBvbGljeSBjYW4gZ3JhbnQgdG9cbiAgICogYW4gSUFNIGVudGl0eS4gQW4gZW50aXR5J3MgcGVybWlzc2lvbnMgYm91bmRhcnkgYWxsb3dzIGl0IHRvIHBlcmZvcm0gb25seVxuICAgKiB0aGUgYWN0aW9ucyB0aGF0IGFyZSBhbGxvd2VkIGJ5IGJvdGggaXRzIGlkZW50aXR5LWJhc2VkIHBvbGljaWVzIGFuZCBpdHNcbiAgICogcGVybWlzc2lvbnMgYm91bmRhcmllcy5cbiAgICpcbiAgICogQGxpbmsgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9Vc2VyR3VpZGUvYXdzLXJlc291cmNlLWlhbS1yb2xlLmh0bWwjY2ZuLWlhbS1yb2xlLXBlcm1pc3Npb25zYm91bmRhcnlcbiAgICogQGxpbmsgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0lBTS9sYXRlc3QvVXNlckd1aWRlL2FjY2Vzc19wb2xpY2llc19ib3VuZGFyaWVzLmh0bWxcbiAgICpcbiAgICogQGRlZmF1bHQgLSBObyBwZXJtaXNzaW9ucyBib3VuZGFyeS5cbiAgICovXG4gIHJlYWRvbmx5IHBlcm1pc3Npb25zQm91bmRhcnk/OiBJTWFuYWdlZFBvbGljeTtcblxuICAvKipcbiAgICogQSBuYW1lIGZvciB0aGUgSUFNIHJvbGUuIEZvciB2YWxpZCB2YWx1ZXMsIHNlZSB0aGUgUm9sZU5hbWUgcGFyYW1ldGVyIGZvclxuICAgKiB0aGUgQ3JlYXRlUm9sZSBhY3Rpb24gaW4gdGhlIElBTSBBUEkgUmVmZXJlbmNlLlxuICAgKlxuICAgKiBJTVBPUlRBTlQ6IElmIHlvdSBzcGVjaWZ5IGEgbmFtZSwgeW91IGNhbm5vdCBwZXJmb3JtIHVwZGF0ZXMgdGhhdCByZXF1aXJlXG4gICAqIHJlcGxhY2VtZW50IG9mIHRoaXMgcmVzb3VyY2UuIFlvdSBjYW4gcGVyZm9ybSB1cGRhdGVzIHRoYXQgcmVxdWlyZSBubyBvclxuICAgKiBzb21lIGludGVycnVwdGlvbi4gSWYgeW91IG11c3QgcmVwbGFjZSB0aGUgcmVzb3VyY2UsIHNwZWNpZnkgYSBuZXcgbmFtZS5cbiAgICpcbiAgICogVXNlIFtUZXJyYWZvcm0gUmVzb3VyY2UgTWV0YSBBcmd1bWVudHNdKGh0dHBzOi8vZGV2ZWxvcGVyLmhhc2hpY29ycC5jb20vdGVycmFmb3JtL2xhbmd1YWdlL3Jlc291cmNlcy9zeW50YXgjbWV0YS1hcmd1bWVudHMpXG4gICAqIHRvIGNvbnRyb2wgbGlmZWN5Y2xlIHdoZW4gcmVwbGFjaW5nIHRoZSByb2xlLlxuICAgKlxuICAgKiBTZWUgW0lBTSBJZGVudGlmaWVyc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0lBTS9sYXRlc3QvVXNlckd1aWRlL1VzaW5nX0lkZW50aWZpZXJzLmh0bWwpXG4gICAqIGZvciBtb3JlIGluZm9ybWF0aW9uXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gSWYgb21pdHRlZCwgUmVmZXIgdG8gYHJvbGVOYW1lUHJlZml4YC5cbiAgICovXG4gIHJlYWRvbmx5IHJvbGVOYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgdW5pcXVlIG5hbWUgYmVnaW5uaW5nIHdpdGggdGhlIHNwZWNpZmllZCBwcmVmaXguXG4gICAqIENvbmZsaWN0cyB3aXRoIGByb2xlTmFtZWAuXG4gICAqXG4gICAqIElNUE9SVEFOVDogSWYgeW91IHNwZWNpZnkgYSBuYW1lUHJlZml4LCB5b3UgY2Fubm90IHBlcmZvcm0gdXBkYXRlcyB0aGF0IHJlcXVpcmVcbiAgICogcmVwbGFjZW1lbnQgb2YgdGhpcyByZXNvdXJjZS4gWW91IGNhbiBwZXJmb3JtIHVwZGF0ZXMgdGhhdCByZXF1aXJlIG5vIG9yXG4gICAqIHNvbWUgaW50ZXJydXB0aW9uLiBJZiB5b3UgbXVzdCByZXBsYWNlIHRoZSByZXNvdXJjZSwgc3BlY2lmeSBhIG5ldyBuYW1lLlxuICAgKlxuICAgKiBVc2UgW1RlcnJhZm9ybSBSZXNvdXJjZSBNZXRhIEFyZ3VtZW50c10oaHR0cHM6Ly9kZXZlbG9wZXIuaGFzaGljb3JwLmNvbS90ZXJyYWZvcm0vbGFuZ3VhZ2UvcmVzb3VyY2VzL3N5bnRheCNtZXRhLWFyZ3VtZW50cylcbiAgICogdG8gY29udHJvbCBsaWZlY3ljbGUgd2hlbiByZXBsYWNpbmcgdGhlIHJvbGUuXG4gICAqXG4gICAqIFNlZSBbSUFNIElkZW50aWZpZXJzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vSUFNL2xhdGVzdC9Vc2VyR3VpZGUvVXNpbmdfSWRlbnRpZmllcnMuaHRtbClcbiAgICogZm9yIG1vcmUgaW5mb3JtYXRpb25cbiAgICpcbiAgICogQGRlZmF1bHQgLSBJZiBvbWl0dGVkLCBFVCB3aWxsIGFzc2lnbiBhIHJhbmRvbSwgdW5pcXVlIG5hbWUgcHJlZml4ZWQgYnkgR3JpZFVVSUQuXG4gICAqL1xuICByZWFkb25seSByb2xlTmFtZVByZWZpeD86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIG1heGltdW0gc2Vzc2lvbiBkdXJhdGlvbiBpbiBzZWNvbmRzIHRoYXQgeW91IHdhbnQgdG8gc2V0IGZvciB0aGUgc3BlY2lmaWVkIHJvbGUuXG4gICAqIFRoaXMgc2V0dGluZyBjYW4gaGF2ZSBhIHZhbHVlIGZyb20gMSBob3VyICgzNjAwc2VjKSB0byAxMiAoNDMyMDBzZWMpIGhvdXJzLlxuICAgKlxuICAgKiBBbnlvbmUgd2hvIGFzc3VtZXMgdGhlIHJvbGUgZnJvbSB0aGUgQVdTIENMSSBvciBBUEkgY2FuIHVzZSB0aGVcbiAgICogRHVyYXRpb25TZWNvbmRzIEFQSSBwYXJhbWV0ZXIgb3IgdGhlIGR1cmF0aW9uLXNlY29uZHMgQ0xJIHBhcmFtZXRlciB0b1xuICAgKiByZXF1ZXN0IGEgbG9uZ2VyIHNlc3Npb24uIFRoZSBNYXhTZXNzaW9uRHVyYXRpb24gc2V0dGluZyBkZXRlcm1pbmVzIHRoZVxuICAgKiBtYXhpbXVtIGR1cmF0aW9uIHRoYXQgY2FuIGJlIHJlcXVlc3RlZCB1c2luZyB0aGUgRHVyYXRpb25TZWNvbmRzXG4gICAqIHBhcmFtZXRlci5cbiAgICpcbiAgICogSWYgdXNlcnMgZG9uJ3Qgc3BlY2lmeSBhIHZhbHVlIGZvciB0aGUgRHVyYXRpb25TZWNvbmRzIHBhcmFtZXRlciwgdGhlaXJcbiAgICogc2VjdXJpdHkgY3JlZGVudGlhbHMgYXJlIHZhbGlkIGZvciBvbmUgaG91ciBieSBkZWZhdWx0LiBUaGlzIGFwcGxpZXMgd2hlblxuICAgKiB5b3UgdXNlIHRoZSBBc3N1bWVSb2xlKiBBUEkgb3BlcmF0aW9ucyBvciB0aGUgYXNzdW1lLXJvbGUqIENMSSBvcGVyYXRpb25zXG4gICAqIGJ1dCBkb2VzIG5vdCBhcHBseSB3aGVuIHlvdSB1c2UgdGhvc2Ugb3BlcmF0aW9ucyB0byBjcmVhdGUgYSBjb25zb2xlIFVSTC5cbiAgICpcbiAgICogQGxpbmsgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0lBTS9sYXRlc3QvVXNlckd1aWRlL2lkX3JvbGVzX3VzZS5odG1sXG4gICAqXG4gICAqIEBkZWZhdWx0IER1cmF0aW9uLmhvdXJzKDEpXG4gICAqL1xuICByZWFkb25seSBtYXhTZXNzaW9uRHVyYXRpb24/OiBEdXJhdGlvbjtcblxuICAvKipcbiAgICogQSBkZXNjcmlwdGlvbiBvZiB0aGUgcm9sZS4gSXQgY2FuIGJlIHVwIHRvIDEwMDAgY2hhcmFjdGVycyBsb25nLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIE5vIGRlc2NyaXB0aW9uLlxuICAgKi9cbiAgcmVhZG9ubHkgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gZm9yY2UgZGV0YWNoaW5nIGFueSBwb2xpY2llcyB0aGUgcm9sZSBoYXMgYmVmb3JlIGRlc3Ryb3lpbmcgaXRcbiAgICogSWYgcG9saWNpZXMgYXJlIGF0dGFjaGVkIHRvIHRoZSByb2xlIHZpYSB0aGUgYGF3c19pYW1fcG9saWN5X2F0dGFjaG1lbnRgXG4gICAqIHJlc291cmNlIGFuZCB5b3UgYXJlIG1vZGlmeWluZyB0aGUgcm9sZSBgbmFtZWAgb3IgYHBhdGhgLCB0aGlzIG11c3QgYmVcbiAgICogc2V0IHRvIGB0cnVlYCBhbmQgYXBwbGllZCBiZWZvcmUgYXR0ZW1wdGluZyB0aGUgb3BlcmF0aW9uIG90aGVyd2lzZSB5b3VcbiAgICogd2lsbCBlbmNvdW50ZXIgYSBgRGVsZXRlQ29uZmxpY3RgIGVycm9yLlxuICAgKlxuICAgKiBUaGUgYGF3c19pYW1fcm9sZV9wb2xpY3lfYXR0YWNobWVudGAgcmVzb3VyY2UgKHJlY29tbWVuZGVkKSBkb2VzIG5vdFxuICAgKiBoYXZlIHRoaXMgcmVxdWlyZW1lbnQuXG4gICAqXG4gICAqIE5PVEU6IFRoZSBgaWFtLlBvbGljeWAgdXNlcyBgYXdzX2lhbV9yb2xlX3BvbGljeV9hdHRhY2htZW50YCB1bmRlclxuICAgKiB0aGUgaG9vZCBhbmQgdGhpcyBzaG91bGQgbm90IGJlIGEgY29uY2Vybi5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgZm9yY2VEZXRhY2hQb2xpY2llcz86IGJvb2xlYW47XG59XG5cbi8qKlxuICogT3B0aW9ucyBhbGxvd2luZyBjdXN0b21pemluZyB0aGUgYmVoYXZpb3Igb2YgYFJvbGUuZnJvbVJvbGVBcm5gLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZyb21Sb2xlQXJuT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBpbXBvcnRlZCByb2xlIGNhbiBiZSBtb2RpZmllZCBieSBhdHRhY2hpbmcgcG9saWN5IHJlc291cmNlcyB0byBpdC5cbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgbXV0YWJsZT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEZvciBpbW11dGFibGUgcm9sZXM6IGFkZCBncmFudHMgdG8gcmVzb3VyY2VzIGluc3RlYWQgb2YgZHJvcHBpbmcgdGhlbVxuICAgKlxuICAgKiBJZiB0aGlzIGlzIGBmYWxzZWAgb3Igbm90IHNwZWNpZmllZCwgZ3JhbnQgcGVybWlzc2lvbnMgYWRkZWQgdG8gdGhpcyByb2xlIGFyZSBpZ25vcmVkLlxuICAgKiBJdCBpcyB5b3VyIG93biByZXNwb25zaWJpbGl0eSB0byBtYWtlIHN1cmUgdGhlIHJvbGUgaGFzIHRoZSByZXF1aXJlZCBwZXJtaXNzaW9ucy5cbiAgICpcbiAgICogSWYgdGhpcyBpcyBgdHJ1ZWAsIGFueSBncmFudCBwZXJtaXNzaW9ucyB3aWxsIGJlIGFkZGVkIHRvIHRoZSByZXNvdXJjZSBpbnN0ZWFkLlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgYWRkR3JhbnRzVG9SZXNvdXJjZXM/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBBbnkgcG9saWNpZXMgY3JlYXRlZCBieSB0aGlzIHJvbGUgd2lsbCB1c2UgdGhpcyB2YWx1ZSBhcyB0aGVpciBJRCwgaWYgc3BlY2lmaWVkLlxuICAgKiBTcGVjaWZ5IHRoaXMgaWYgaW1wb3J0aW5nIHRoZSBzYW1lIHJvbGUgaW4gbXVsdGlwbGUgc3RhY2tzLCBhbmQgZ3JhbnRpbmcgaXRcbiAgICogZGlmZmVyZW50IHBlcm1pc3Npb25zIGluIGF0IGxlYXN0IHR3byBzdGFja3MuIElmIHRoaXMgaXMgbm90IHNwZWNpZmllZFxuICAgKiAob3IgaWYgdGhlIHNhbWUgbmFtZSBpcyBzcGVjaWZpZWQgaW4gbW9yZSB0aGFuIG9uZSBzdGFjayksXG4gICAqIGEgVGVycmFmb3JtIGlzc3VlIHdpbGwgcmVzdWx0IGluIHRoZSBwb2xpY3kgY3JlYXRlZCBpbiB3aGljaGV2ZXIgc3RhY2tcbiAgICogaXMgZGVwbG95ZWQgbGFzdCBvdmVyd3JpdGluZyB0aGUgcG9saWNpZXMgY3JlYXRlZCBieSB0aGUgb3RoZXJzLlxuICAgKlxuICAgKiBAZGVmYXVsdCAnUG9saWN5J1xuICAgKi9cbiAgcmVhZG9ubHkgZGVmYXVsdFBvbGljeU5hbWU/OiBzdHJpbmc7XG59XG5cbi8vIFRPRE86IHN1cHBvcnQgZm9yIHByZS1jcmVhdGVkIHJvbGVzP1xuLy8gcmVmOiBodHRwczovL2dpdGh1Yi5jb20vYXdzL2F3cy1jZGsvYmxvYi92Mi4xNDMuMC9wYWNrYWdlcy9hd3MtY2RrLWxpYi9hd3MtaWFtL2xpYi9yb2xlLnRzI0wxODZcbi8vIE5PVEU6IGluIFRlcnJhQ29uc3RydWN0IHByZS1jcmVhdGVkIHJvbGVzIGFyZSBwYXNzZWQgaW4gdGhyb3VnaCB0aGUgR3JpZCwgc28gdGhpcyBzZWVtcyBub3QgbmVlZGVkLlxuXG4vKipcbiAqIE9wdGlvbnMgYWxsb3dpbmcgY3VzdG9taXppbmcgdGhlIGJlaGF2aW9yIG9mIGBSb2xlLmZyb21Sb2xlTmFtZWAuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRnJvbVJvbGVOYW1lT3B0aW9ucyBleHRlbmRzIEZyb21Sb2xlQXJuT3B0aW9ucyB7fVxuXG4vKipcbiAqIElBTSBSb2xlXG4gKlxuICogRGVmaW5lcyBhbiBJQU0gcm9sZS4gVGhlIHJvbGUgaXMgY3JlYXRlZCB3aXRoIGFuIGFzc3VtZSBwb2xpY3kgZG9jdW1lbnQgYXNzb2NpYXRlZCB3aXRoXG4gKiB0aGUgc3BlY2lmaWVkIEFXUyBzZXJ2aWNlIHByaW5jaXBhbCBkZWZpbmVkIGluIGBzZXJ2aWNlQXNzdW1lUm9sZWAuXG4gKi9cbmV4cG9ydCBjbGFzcyBSb2xlIGV4dGVuZHMgQXdzQ29uc3RydWN0QmFzZSBpbXBsZW1lbnRzIElSb2xlIHtcbiAgLyoqXG4gICAqIEltcG9ydCBhbiBleHRlcm5hbCByb2xlIGJ5IEFSTi5cbiAgICpcbiAgICogSWYgdGhlIGltcG9ydGVkIFJvbGUgQVJOIGlzIGEgVG9rZW4gKHN1Y2ggYXMgYVxuICAgKiBgQ2ZuUGFyYW1ldGVyLnZhbHVlQXNTdHJpbmdgIG9yIGEgYEZuLmltcG9ydFZhbHVlKClgKSAqYW5kKiB0aGUgcmVmZXJlbmNlZFxuICAgKiByb2xlIGhhcyBhIGBwYXRoYCAobGlrZSBgYXJuOi4uLjpyb2xlL0FkbWluUm9sZXMvQWxpY2VgKSwgdGhlXG4gICAqIGByb2xlTmFtZWAgcHJvcGVydHkgd2lsbCBub3QgcmVzb2x2ZSB0byB0aGUgY29ycmVjdCB2YWx1ZS4gSW5zdGVhZCBpdFxuICAgKiB3aWxsIHJlc29sdmUgdG8gdGhlIGZpcnN0IHBhdGggY29tcG9uZW50LiBXZSB1bmZvcnR1bmF0ZWx5IGNhbm5vdCBleHByZXNzXG4gICAqIHRoZSBjb3JyZWN0IGNhbGN1bGF0aW9uIG9mIHRoZSBmdWxsIHBhdGggbmFtZSBhcyBhIENsb3VkRm9ybWF0aW9uXG4gICAqIGV4cHJlc3Npb24uIEluIHRoaXMgc2NlbmFyaW8gdGhlIFJvbGUgQVJOIHNob3VsZCBiZSBzdXBwbGllZCB3aXRob3V0IHRoZVxuICAgKiBgcGF0aGAgaW4gb3JkZXIgdG8gcmVzb2x2ZSB0aGUgY29ycmVjdCByb2xlIHJlc291cmNlLlxuICAgKlxuICAgKiBAcGFyYW0gc2NvcGUgY29uc3RydWN0IHNjb3BlXG4gICAqIEBwYXJhbSBpZCBjb25zdHJ1Y3QgaWRcbiAgICogQHBhcmFtIHJvbGVBcm4gdGhlIEFSTiBvZiB0aGUgcm9sZSB0byBpbXBvcnRcbiAgICogQHBhcmFtIG9wdGlvbnMgYWxsb3cgY3VzdG9taXppbmcgdGhlIGJlaGF2aW9yIG9mIHRoZSByZXR1cm5lZCByb2xlXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGZyb21Sb2xlQXJuKFxuICAgIHNjb3BlOiBDb25zdHJ1Y3QsXG4gICAgaWQ6IHN0cmluZyxcbiAgICByb2xlQXJuOiBzdHJpbmcsXG4gICAgb3B0aW9uczogRnJvbVJvbGVBcm5PcHRpb25zID0ge30sXG4gICk6IElSb2xlIHtcbiAgICBjb25zdCBzY29wZVN0YWNrID0gQXdzU3RhY2sub2ZBd3NDb25zdHJ1Y3Qoc2NvcGUpO1xuICAgIGNvbnN0IHBhcnNlZEFybiA9IHNjb3BlU3RhY2suc3BsaXRBcm4oXG4gICAgICByb2xlQXJuLFxuICAgICAgQXJuRm9ybWF0LlNMQVNIX1JFU09VUkNFX05BTUUsXG4gICAgKTtcbiAgICBjb25zdCByZXNvdXJjZU5hbWUgPSBwYXJzZWRBcm4ucmVzb3VyY2VOYW1lITtcbiAgICBjb25zdCByb2xlQWNjb3VudCA9IHBhcnNlZEFybi5hY2NvdW50O1xuICAgIC8vIHNlcnZpY2Ugcm9sZXMgaGF2ZSBhbiBBUk4gbGlrZSAnYXJuOmF3czppYW06OjxhY2NvdW50Pjpyb2xlL3NlcnZpY2Utcm9sZS88cm9sZU5hbWU+J1xuICAgIC8vIG9yICdhcm46YXdzOmlhbTo6PGFjY291bnQ+OnJvbGUvc2VydmljZS1yb2xlL3NlcnZpY2VuYW1lLmFtYXpvbmF3cy5jb20vc2VydmljZS1yb2xlLzxyb2xlTmFtZT4nXG4gICAgLy8gd2Ugd2FudCB0byBzdXBwb3J0IHRoZXNlIGFzIHdlbGwsIHNvIHdlIGp1c3QgdXNlIHRoZSBlbGVtZW50IGFmdGVyIHRoZSBsYXN0IHNsYXNoIGFzIHJvbGUgbmFtZVxuICAgIGNvbnN0IHJvbGVOYW1lID0gcmVzb3VyY2VOYW1lLnNwbGl0KFwiL1wiKS5wb3AoKSE7XG5cbiAgICAvLyBpZiAoZ2V0Q3VzdG9taXplUm9sZXNDb25maWcoc2NvcGUpLmVuYWJsZWQpIHtcbiAgICAvLyAgIHJldHVybiBuZXcgUHJlY3JlYXRlZFJvbGUoc2NvcGUsIGlkLCB7XG4gICAgLy8gICAgIHJvbGVQYXRoOiBgJHtzY29wZS5ub2RlLnBhdGh9LyR7aWR9YCxcbiAgICAvLyAgICAgcm9sZTogbmV3IEltcG9ydGVkUm9sZShzY29wZSwgYEltcG9ydCR7aWR9YCwge1xuICAgIC8vICAgICAgIGFjY291bnQ6IHJvbGVBY2NvdW50LFxuICAgIC8vICAgICAgIHJvbGVBcm4sXG4gICAgLy8gICAgICAgcm9sZU5hbWUsXG4gICAgLy8gICAgICAgLi4ub3B0aW9ucyxcbiAgICAvLyAgICAgfSksXG4gICAgLy8gICB9KTtcbiAgICAvLyB9XG5cbiAgICBpZiAoXG4gICAgICBvcHRpb25zLmFkZEdyYW50c1RvUmVzb3VyY2VzICE9PSB1bmRlZmluZWQgJiZcbiAgICAgIG9wdGlvbnMubXV0YWJsZSAhPT0gZmFsc2VcbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCInYWRkR3JhbnRzVG9SZXNvdXJjZXMnIGNhbiBvbmx5IGJlIHBhc3NlZCBpZiAnbXV0YWJsZTogZmFsc2UnXCIsXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IHJvbGVBcm5BbmRTY29wZVN0YWNrQWNjb3VudENvbXBhcmlzb24gPSB0b2tlbkNvbXBhcmVTdHJpbmdzKFxuICAgICAgcm9sZUFjY291bnQgPz8gXCJcIixcbiAgICAgIHNjb3BlU3RhY2suYWNjb3VudCxcbiAgICApO1xuICAgIGNvbnN0IGVxdWFsT3JBbnlVbnJlc29sdmVkID1cbiAgICAgIHJvbGVBcm5BbmRTY29wZVN0YWNrQWNjb3VudENvbXBhcmlzb24gPT09IFRva2VuQ29tcGFyaXNvbi5TQU1FIHx8XG4gICAgICByb2xlQXJuQW5kU2NvcGVTdGFja0FjY291bnRDb21wYXJpc29uID09PVxuICAgICAgICBUb2tlbkNvbXBhcmlzb24uQk9USF9VTlJFU09MVkVEIHx8XG4gICAgICByb2xlQXJuQW5kU2NvcGVTdGFja0FjY291bnRDb21wYXJpc29uID09PSBUb2tlbkNvbXBhcmlzb24uT05FX1VOUkVTT0xWRUQ7XG5cbiAgICAvLyBpZiB3ZSBhcmUgcmV0dXJuaW5nIGFuIGltbXV0YWJsZSByb2xlIHRoZW4gdGhlICdpbXBvcnRlZFJvbGUnIGlzIGp1c3QgYSB0aHJvd2F3YXkgY29uc3RydWN0XG4gICAgLy8gc28gZ2l2ZSBpdCBhIGRpZmZlcmVudCBpZFxuICAgIGNvbnN0IG11dGFibGVSb2xlSWQgPVxuICAgICAgb3B0aW9ucy5tdXRhYmxlICE9PSBmYWxzZSAmJiBlcXVhbE9yQW55VW5yZXNvbHZlZFxuICAgICAgICA/IGlkXG4gICAgICAgIDogYE11dGFibGVSb2xlJHtpZH1gO1xuICAgIGNvbnN0IGltcG9ydGVkUm9sZSA9IG5ldyBJbXBvcnRlZFJvbGUoc2NvcGUsIG11dGFibGVSb2xlSWQsIHtcbiAgICAgIHJvbGVBcm4sXG4gICAgICByb2xlTmFtZSxcbiAgICAgIGFjY291bnQ6IHJvbGVBY2NvdW50LFxuICAgICAgLi4ub3B0aW9ucyxcbiAgICB9KTtcblxuICAgIC8vIHdlIG9ubHkgcmV0dXJuIGFuIGltbXV0YWJsZSBSb2xlIGlmIGJvdGggYWNjb3VudHMgd2VyZSBleHBsaWNpdGx5IHByb3ZpZGVkLCBhbmQgZGlmZmVyZW50XG4gICAgcmV0dXJuIG9wdGlvbnMubXV0YWJsZSAhPT0gZmFsc2UgJiYgZXF1YWxPckFueVVucmVzb2x2ZWRcbiAgICAgID8gaW1wb3J0ZWRSb2xlXG4gICAgICA6IG5ldyBJbW11dGFibGVSb2xlKFxuICAgICAgICAgIHNjb3BlLFxuICAgICAgICAgIGlkLFxuICAgICAgICAgIGltcG9ydGVkUm9sZSxcbiAgICAgICAgICBvcHRpb25zLmFkZEdyYW50c1RvUmVzb3VyY2VzID8/IGZhbHNlLFxuICAgICAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB3aGV0aGVyIHRoZSBnaXZlbiBvYmplY3QgaXMgYSBSb2xlXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGlzUm9sZSh4OiBhbnkpOiB4IGlzIFJvbGUge1xuICAgIHJldHVybiB4ICE9PSBudWxsICYmIHR5cGVvZiB4ID09PSBcIm9iamVjdFwiICYmIElBTV9ST0xFX1NZTUJPTCBpbiB4O1xuICB9XG5cbiAgLyoqXG4gICAqIEltcG9ydCBhbiBleHRlcm5hbCByb2xlIGJ5IG5hbWUuXG4gICAqXG4gICAqIFRoZSBpbXBvcnRlZCByb2xlIGlzIGFzc3VtZWQgdG8gZXhpc3QgaW4gdGhlIHNhbWUgYWNjb3VudCBhcyB0aGUgYWNjb3VudFxuICAgKiB0aGUgc2NvcGUncyBjb250YWluaW5nIFN0YWNrIGlzIGJlaW5nIGRlcGxveWVkIHRvLlxuXG4gICAqIEBwYXJhbSBzY29wZSBjb25zdHJ1Y3Qgc2NvcGVcbiAgICogQHBhcmFtIGlkIGNvbnN0cnVjdCBpZFxuICAgKiBAcGFyYW0gcm9sZU5hbWUgdGhlIG5hbWUgb2YgdGhlIHJvbGUgdG8gaW1wb3J0XG4gICAqIEBwYXJhbSBvcHRpb25zIGFsbG93IGN1c3RvbWl6aW5nIHRoZSBiZWhhdmlvciBvZiB0aGUgcmV0dXJuZWQgcm9sZVxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBmcm9tUm9sZU5hbWUoXG4gICAgc2NvcGU6IENvbnN0cnVjdCxcbiAgICBpZDogc3RyaW5nLFxuICAgIHJvbGVOYW1lOiBzdHJpbmcsXG4gICAgb3B0aW9uczogRnJvbVJvbGVOYW1lT3B0aW9ucyA9IHt9LFxuICApIHtcbiAgICByZXR1cm4gUm9sZS5mcm9tUm9sZUFybihcbiAgICAgIHNjb3BlLFxuICAgICAgaWQsXG4gICAgICBBd3NTdGFjay5vZkF3c0NvbnN0cnVjdChzY29wZSkuZm9ybWF0QXJuKHtcbiAgICAgICAgcmVnaW9uOiBcIlwiLFxuICAgICAgICBzZXJ2aWNlOiBcImlhbVwiLFxuICAgICAgICByZXNvdXJjZTogXCJyb2xlXCIsXG4gICAgICAgIHJlc291cmNlTmFtZTogcm9sZU5hbWUsXG4gICAgICB9KSxcbiAgICAgIG9wdGlvbnMsXG4gICAgKTtcbiAgfVxuXG4gIC8vIFRPRE86IFN1cHBvcnQgY3VzdG9tIHJvbGUgY3JlYXRpb25cbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2F3cy9hd3MtY2RrL2Jsb2IvdjIuMTQzLjAvcGFja2FnZXMvYXdzLWNkay1saWIvYXdzLWlhbS9saWIvcm9sZS50cyNMMzU1XG5cbiAgcHVibGljIHJlYWRvbmx5IGdyYW50UHJpbmNpcGFsOiBJUHJpbmNpcGFsID0gdGhpcztcbiAgcHVibGljIHJlYWRvbmx5IHByaW5jaXBhbEFjY291bnQ6IHN0cmluZyB8IHVuZGVmaW5lZCA9IHRoaXMuZW52LmFjY291bnQ7XG5cbiAgcHVibGljIHJlYWRvbmx5IGFzc3VtZVJvbGVBY3Rpb246IHN0cmluZyA9IFwic3RzOkFzc3VtZVJvbGVcIjtcblxuICAvKipcbiAgICogVGhlIGFzc3VtZSByb2xlIHBvbGljeSBkb2N1bWVudCBhc3NvY2lhdGVkIHdpdGggdGhpcyByb2xlLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGFzc3VtZVJvbGVQb2xpY3k/OiBQb2xpY3lEb2N1bWVudDtcblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgQVJOIG9mIHRoaXMgcm9sZS5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSByb2xlQXJuOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIG5hbWUgb2YgdGhlIHJvbGUuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgcm9sZU5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgcm9sZS5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBwb2xpY3lGcmFnbWVudDogUHJpbmNpcGFsUG9saWN5RnJhZ21lbnQ7XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIHBlcm1pc3Npb25zIGJvdW5kYXJ5IGF0dGFjaGVkIHRvIHRoaXMgcm9sZVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHBlcm1pc3Npb25zQm91bmRhcnk/OiBJTWFuYWdlZFBvbGljeTtcblxuICAvKiogU3Ryb25nbHkgdHlwZWQgT3V0cHV0cyAqL1xuICBwdWJsaWMgZ2V0IHJvbGVPdXRwdXRzKCk6IFJvbGVPdXRwdXRzIHtcbiAgICByZXR1cm4ge1xuICAgICAgYXJuOiB0aGlzLnJvbGVBcm4sXG4gICAgICBuYW1lOiB0aGlzLnJvbGVOYW1lLFxuICAgIH07XG4gIH1cbiAgcHVibGljIGdldCBvdXRwdXRzKCk6IFJlY29yZDxzdHJpbmcsIGFueT4ge1xuICAgIHJldHVybiB0aGlzLnJvbGVPdXRwdXRzO1xuICB9XG4gIC8qKlxuICAgKiBEaXJlY3QgYWNjZXNzIHRvIHRoZSB1bmRlcmx5aW5nIFRlcnJhZm9ybSByZXNvdXJjZS5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSByZXNvdXJjZTogaWFtUm9sZS5JYW1Sb2xlO1xuICBwcml2YXRlIGRlZmF1bHRQb2xpY3k/OiBQb2xpY3k7XG4gIHByaXZhdGUgcmVhZG9ubHkgbWFuYWdlZFBvbGljaWVzOiBJTWFuYWdlZFBvbGljeVtdID0gW107XG4gIHByaXZhdGUgcmVhZG9ubHkgYXR0YWNoZWRQb2xpY2llcyA9IG5ldyBBdHRhY2hlZFBvbGljaWVzKCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgaW5saW5lUG9saWNpZXM6IHsgW25hbWU6IHN0cmluZ106IFBvbGljeURvY3VtZW50IH07XG4gIC8vIHByaXZhdGUgcmVhZG9ubHkgZGVwZW5kYWJsZXMgPSBuZXcgTWFwPFBvbGljeVN0YXRlbWVudCwgRGVwZW5kZW5jeUdyb3VwPigpO1xuICBwcml2YXRlIGltbXV0YWJsZVJvbGU/OiBJUm9sZTtcbiAgLy8gcHJpdmF0ZSBfZGlkU3BsaXQgPSBmYWxzZTtcbiAgcHJpdmF0ZSByZWFkb25seSBfcm9sZUlkOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IFJvbGVQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwgcHJvcHMpO1xuXG4gICAgaWYgKFxuICAgICAgcHJvcHMucm9sZU5hbWUgJiZcbiAgICAgICFUb2tlbi5pc1VucmVzb2x2ZWQocHJvcHMucm9sZU5hbWUpICYmXG4gICAgICAhL15bXFx3Kz0sLkAtXXsxLDY0fSQvLnRlc3QocHJvcHMucm9sZU5hbWUpXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIFwiSW52YWxpZCByb2xlTmFtZS4gVGhlIG5hbWUgbXVzdCBiZSBhIHN0cmluZyBvZiBjaGFyYWN0ZXJzIGNvbnNpc3Rpbmcgb2YgdXBwZXIgYW5kIGxvd2VyY2FzZSBhbHBoYW51bWVyaWMgY2hhcmFjdGVycyB3aXRoIG5vIHNwYWNlcy4gWW91IGNhbiBhbHNvIGluY2x1ZGUgYW55IG9mIHRoZSBmb2xsb3dpbmcgY2hhcmFjdGVyczogXys9LC5ALS4gTGVuZ3RoIG11c3QgYmUgYmV0d2VlbiAxIGFuZCA2NCBjaGFyYWN0ZXJzLlwiLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAocHJvcHMucm9sZU5hbWUgJiYgcHJvcHMucm9sZU5hbWVQcmVmaXgpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJDYW5ub3Qgc3BlY2lmeSBib3RoICdyb2xlTmFtZScgYW5kICdyb2xlTmFtZVByZWZpeCcuIFVzZSBvbmx5IG9uZS5cIixcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgZXh0ZXJuYWxJZHMgPSBwcm9wcy5leHRlcm5hbElkcyB8fCBbXTtcbiAgICBpZiAocHJvcHMuZXh0ZXJuYWxJZCkge1xuICAgICAgZXh0ZXJuYWxJZHMucHVzaChwcm9wcy5leHRlcm5hbElkKTtcbiAgICB9XG5cbiAgICB0aGlzLmFzc3VtZVJvbGVQb2xpY3kgPSBjcmVhdGVBc3N1bWVSb2xlUG9saWN5KFxuICAgICAgdGhpcyxcbiAgICAgIFwiQXNzdW1lUm9sZVBvbGljeVwiLFxuICAgICAgcHJvcHMuYXNzdW1lZEJ5LFxuICAgICAgZXh0ZXJuYWxJZHMsXG4gICAgKTtcbiAgICB0aGlzLm1hbmFnZWRQb2xpY2llcy5wdXNoKC4uLihwcm9wcy5tYW5hZ2VkUG9saWNpZXMgfHwgW10pKTtcbiAgICB0aGlzLmlubGluZVBvbGljaWVzID0gcHJvcHMuaW5saW5lUG9saWNpZXMgfHwge307XG4gICAgdGhpcy5wZXJtaXNzaW9uc0JvdW5kYXJ5ID0gcHJvcHMucGVybWlzc2lvbnNCb3VuZGFyeTtcbiAgICBjb25zdCBtYXhTZXNzaW9uRHVyYXRpb24gPVxuICAgICAgcHJvcHMubWF4U2Vzc2lvbkR1cmF0aW9uICYmIHByb3BzLm1heFNlc3Npb25EdXJhdGlvbi50b1NlY29uZHMoKTtcbiAgICB2YWxpZGF0ZU1heFNlc3Npb25EdXJhdGlvbihtYXhTZXNzaW9uRHVyYXRpb24pO1xuICAgIGNvbnN0IGRlc2NyaXB0aW9uID1cbiAgICAgIHByb3BzLmRlc2NyaXB0aW9uICYmIHByb3BzLmRlc2NyaXB0aW9uPy5sZW5ndGggPiAwXG4gICAgICAgID8gcHJvcHMuZGVzY3JpcHRpb25cbiAgICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICBpZiAoZGVzY3JpcHRpb24gJiYgZGVzY3JpcHRpb24ubGVuZ3RoID4gMTAwMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBcIlJvbGUgZGVzY3JpcHRpb24gbXVzdCBiZSBubyBsb25nZXIgdGhhbiAxMDAwIGNoYXJhY3RlcnMuXCIsXG4gICAgICApO1xuICAgIH1cblxuICAgIHZhbGlkYXRlUm9sZVBhdGgocHJvcHMucGF0aCk7XG5cbiAgICAvLyBwcmUtY3JlYXRlZCByb2xlIHNuaXBwZWRcbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vYXdzL2F3cy1jZGsvYmxvYi92Mi4xNDMuMC9wYWNrYWdlcy9hd3MtY2RrLWxpYi9hd3MtaWFtL2xpYi9yb2xlLnRzI0w0MzlcblxuICAgIGNvbnN0IG5hbWVQcmVmaXggPSB0aGlzLnN0YWNrLnVuaXF1ZVJlc291cmNlTmFtZVByZWZpeCh0aGlzLCB7XG4gICAgICBwcmVmaXg6IHByb3BzLnJvbGVOYW1lUHJlZml4ID8/IHRoaXMuZ3JpZFVVSUQgKyBcIi1cIixcbiAgICAgIGFsbG93ZWRTcGVjaWFsQ2hhcmFjdGVyczogXCJfKz0sLkAtXCIsXG4gICAgICBtYXhMZW5ndGg6IDY0LFxuICAgIH0pO1xuXG4gICAgdGhpcy5yZXNvdXJjZSA9IG5ldyBpYW1Sb2xlLklhbVJvbGUodGhpcywgXCJSZXNvdXJjZVwiLCB7XG4gICAgICAuLi5wcm9wcywgLy8gY29weSBvdmVyIFRlcnJhZm9ybSBNZXRhIEFyZ3VtZW50cyBmcm9tIENvbnN0cnVjdFByb3BzXG4gICAgICBhc3N1bWVSb2xlUG9saWN5OiB0aGlzLmFzc3VtZVJvbGVQb2xpY3kuanNvbixcbiAgICAgIG1hbmFnZWRQb2xpY3lBcm5zOiBVbmlxdWVTdHJpbmdTZXQuZnJvbSgoKSA9PlxuICAgICAgICB0aGlzLm1hbmFnZWRQb2xpY2llcy5tYXAoKHApID0+IHAubWFuYWdlZFBvbGljeUFybiksXG4gICAgICApLFxuICAgICAgaW5saW5lUG9saWN5OiBfZmxhdHRlbih0aGlzLmlubGluZVBvbGljaWVzKSxcbiAgICAgIHBhdGg6IHByb3BzLnBhdGgsXG4gICAgICBwZXJtaXNzaW9uc0JvdW5kYXJ5OiB0aGlzLnBlcm1pc3Npb25zQm91bmRhcnlcbiAgICAgICAgPyB0aGlzLnBlcm1pc3Npb25zQm91bmRhcnkubWFuYWdlZFBvbGljeUFyblxuICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgIG5hbWU6IHByb3BzLnJvbGVOYW1lLFxuICAgICAgbmFtZVByZWZpeDogIXByb3BzLnJvbGVOYW1lID8gbmFtZVByZWZpeCA6IHVuZGVmaW5lZCxcbiAgICAgIG1heFNlc3Npb25EdXJhdGlvbixcbiAgICAgIGRlc2NyaXB0aW9uLFxuICAgICAgZm9yY2VEZXRhY2hQb2xpY2llczogcHJvcHMuZm9yY2VEZXRhY2hQb2xpY2llcyxcbiAgICB9KTtcblxuICAgIC8vIFN0YWJsZSBhbmQgdW5pcXVlIHN0cmluZyBpZGVudGlmeWluZyB0aGUgcm9sZS5cbiAgICB0aGlzLl9yb2xlSWQgPSB0aGlzLnJlc291cmNlLnVuaXF1ZUlkO1xuXG4gICAgLy8gVE9ETzogTmVlZCB0byBoYW5kbGUgY3Jvc3MgZW52IEFSTiByZWZzP1xuICAgIC8vIENESzogaHR0cHM6Ly9naXRodWIuY29tL2F3cy9hd3MtY2RrL2Jsb2IvdjIuMTQzLjAvcGFja2FnZXMvYXdzLWNkay1saWIvY29yZS9saWIvcmVzb3VyY2UudHMjTDI4OFxuICAgIHRoaXMucm9sZUFybiA9IHRoaXMucmVzb3VyY2UuYXJuO1xuICAgIC8vIFRPRE86IE5lZWQgdG8gaGFuZGxlIGNyb3NzIGVudiBOYW1lIHJlZnM/XG4gICAgLy8gQ0RLOiBodHRwczovL2dpdGh1Yi5jb20vYXdzL2F3cy1jZGsvYmxvYi92Mi4xNDMuMC9wYWNrYWdlcy9hd3MtY2RrLWxpYi9jb3JlL2xpYi9yZXNvdXJjZS50cyNMMjU0XG4gICAgdGhpcy5yb2xlTmFtZSA9IHRoaXMucmVzb3VyY2UubmFtZTtcblxuICAgIC8vIFRPRE86IFJlLWFkZCBwb2xpY3kgc3BsaXR0aW5nP1xuICAgIC8vIEFzcGVjdHMub2YodGhpcykuYWRkKHtcbiAgICAvLyAgIHZpc2l0OiAoYykgPT4ge1xuICAgIC8vICAgICBpZiAoYyA9PT0gdGhpcykge1xuICAgIC8vICAgICAgIHRoaXMuc3BsaXRMYXJnZVBvbGljeSgpO1xuICAgIC8vICAgICB9XG4gICAgLy8gICB9LFxuICAgIC8vIH0pO1xuXG4gICAgdGhpcy5wb2xpY3lGcmFnbWVudCA9IG5ldyBBcm5QcmluY2lwYWwodGhpcy5yb2xlQXJuKS5wb2xpY3lGcmFnbWVudDtcblxuICAgIGZ1bmN0aW9uIF9mbGF0dGVuKHBvbGljaWVzPzogeyBbbmFtZTogc3RyaW5nXTogUG9saWN5RG9jdW1lbnQgfSkge1xuICAgICAgaWYgKHBvbGljaWVzID09IG51bGwgfHwgT2JqZWN0LmtleXMocG9saWNpZXMpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgY29uc3QgcmVzdWx0ID0gbmV3IEFycmF5PGlhbVJvbGUuSWFtUm9sZUlubGluZVBvbGljeT4oKTtcbiAgICAgIGZvciAoY29uc3QgcG9saWN5TmFtZSBvZiBPYmplY3Qua2V5cyhwb2xpY2llcykpIHtcbiAgICAgICAgY29uc3QgcG9saWN5RG9jdW1lbnQgPSBwb2xpY2llc1twb2xpY3lOYW1lXTtcbiAgICAgICAgcmVzdWx0LnB1c2goe1xuICAgICAgICAgIG5hbWU6IHBvbGljeU5hbWUsXG4gICAgICAgICAgcG9saWN5OiBwb2xpY3lEb2N1bWVudC5qc29uLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgdGhpcy5ub2RlLmFkZFZhbGlkYXRpb24oeyB2YWxpZGF0ZTogKCkgPT4gdGhpcy52YWxpZGF0ZVJvbGUoKSB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGEgcGVybWlzc2lvbiB0byB0aGUgcm9sZSdzIGRlZmF1bHQgcG9saWN5IGRvY3VtZW50LlxuICAgKiBJZiB0aGVyZSBpcyBubyBkZWZhdWx0IHBvbGljeSBhdHRhY2hlZCB0byB0aGlzIHJvbGUsIGl0IHdpbGwgYmUgY3JlYXRlZC5cbiAgICogQHBhcmFtIHN0YXRlbWVudCBUaGUgcGVybWlzc2lvbiBzdGF0ZW1lbnQgdG8gYWRkIHRvIHRoZSBwb2xpY3kgZG9jdW1lbnRcbiAgICovXG4gIHB1YmxpYyBhZGRUb1ByaW5jaXBhbFBvbGljeShcbiAgICBzdGF0ZW1lbnQ6IFBvbGljeVN0YXRlbWVudCxcbiAgKTogQWRkVG9QcmluY2lwYWxQb2xpY3lSZXN1bHQge1xuICAgIGlmICghdGhpcy5kZWZhdWx0UG9saWN5KSB7XG4gICAgICB0aGlzLmRlZmF1bHRQb2xpY3kgPSBuZXcgUG9saWN5KHRoaXMsIFwiRGVmYXVsdFBvbGljeVwiKTtcbiAgICAgIHRoaXMuYXR0YWNoSW5saW5lUG9saWN5KHRoaXMuZGVmYXVsdFBvbGljeSk7XG4gICAgfVxuICAgIHRoaXMuZGVmYXVsdFBvbGljeS5hZGRTdGF0ZW1lbnRzKHN0YXRlbWVudCk7XG5cbiAgICAvLyAvLyBXZSBtaWdodCBzcGxpdCB0aGlzIHN0YXRlbWVudCBvZmYgaW50byBhIGRpZmZlcmVudCBwb2xpY3ksIHNvIHdlJ2xsIG5lZWQgdG9cbiAgICAvLyAvLyBsYXRlLWJpbmQgdGhlIGRlcGVuZGFibGUuXG4gICAgLy8gY29uc3QgcG9saWN5RGVwZW5kYWJsZSA9IG5ldyBEZXBlbmRlbmN5R3JvdXAoKTtcbiAgICAvLyB0aGlzLmRlcGVuZGFibGVzLnNldChzdGF0ZW1lbnQsIHBvbGljeURlcGVuZGFibGUpO1xuXG4gICAgcmV0dXJuIHsgc3RhdGVtZW50QWRkZWQ6IHRydWUsIHBvbGljeURlcGVuZGFibGU6IHRoaXMgfTtcbiAgfVxuXG4gIHB1YmxpYyBhZGRUb1BvbGljeShzdGF0ZW1lbnQ6IFBvbGljeVN0YXRlbWVudCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmFkZFRvUHJpbmNpcGFsUG9saWN5KHN0YXRlbWVudCkuc3RhdGVtZW50QWRkZWQ7XG4gIH1cblxuICAvKipcbiAgICogQXR0YWNoZXMgYSBtYW5hZ2VkIHBvbGljeSB0byB0aGlzIHJvbGUuXG4gICAqXG4gICAqIE5PVEU6IFVzaW5nIHRoaXMgbWV0aG9kIHdpbGwgZm9yY2UgdGhlIHJvbGUgdG8gdGFrZSBvdmVyXG4gICAqIGV4Y2x1c2l2ZSBtYW5hZ2VtZW50IG9mIHRoZSByb2xlJ3MgTWFuYWdlZFBvbGljeSBhdHRhY2htZW50c1xuICAgKiBUaGVzZSBhcmd1bWVudHMgYXJlIGluY29tcGF0aWJsZSB3aXRoIG90aGVyIHdheXMgb2YgbWFuYWdpbmdcbiAgICogYSByb2xlJ3Mgc3VjaCBhcyBhdHRhY2hpbmcgdGhlIHBvbGljeSB0byB0aGUgcm9sZSB0aHJvdWdoIGl0c1xuICAgKiBgcG9saWN5LmF0dGFjaFRvUm9sZShyb2xlKWAgbWV0aG9kLlxuICAgKlxuICAgKiBJZiB5b3UgYXR0ZW1wdCB0byBtYW5hZ2UgYSByb2xlJ3MgcG9saWNpZXMgYnkgbXVsdGlwbGUgbWVhbnMsXG4gICAqIHlvdSB3aWxsIGdldCByZXNvdXJjZSBjeWNsaW5nIGFuZC9vciBlcnJvcnMuXG4gICAqXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogY29uc3QgcG9saWN5MSA9IG5ldyBpYW0uTWFuYWdlZFBvbGljeSh0aGlzLCAnUG9saWN5Jywge1xuICAgKiAgIG1hbmFnZWRQb2xpY3lOYW1lOiAnTXlQb2xpY3kxJyxcbiAgICogICBkZXNjcmlwdGlvbjogJ0EgZGVzY3JpcHRpb24gb2YgdGhlIHBvbGljeScsXG4gICAqIH0pO1xuICAgKiBjb25zdCBwb2xpY3kyID0gbmV3IGlhbS5NYW5hZ2VkUG9saWN5KHRoaXMsICdQb2xpY3knLCB7XG4gICAqICAgbWFuYWdlZFBvbGljeU5hbWU6ICdNeVBvbGljeTInLFxuICAgKiAgIGRlc2NyaXB0aW9uOiAnQSBkZXNjcmlwdGlvbiBvZiB0aGUgcG9saWN5JyxcbiAgICogfSk7XG4gICAqXG4gICAqIGNvbnN0IHJvbGUgPSBuZXcgaWFtLlJvbGUodGhpcywgJ1JvbGUnLCB7XG4gICAqICBhc3N1bWVkQnk6IG5ldyBpYW0uU2VydmljZVByaW5jaXBhbCgnc25zLmFtYXpvbmF3cy5jb20nKSxcbiAgICogfSk7XG4gICAqIC8vIHJvbGUgYmVjb21lcyB0aGUgbWFuYWdlciBvZiBhbGwgYXR0YWNoZWQgcG9saWNpZXNcbiAgICogcm9sZS5hZGRNYW5hZ2VkUG9saWN5KGlhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZSgnU2VjdXJpdHlBdWRpdCcpKTtcbiAgICogcm9sZS5hZGRNYW5hZ2VkUG9saWN5KHBvbGljeTEpO1xuICAgKlxuICAgKiAvLyB0aGlzIGludHJvZHVjZXMgcmVzb3VyY2UgY3ljbGluZ1xuICAgKiAvLyBET04nVCBETyBUSElTXG4gICAqIHBvbGljeTIuYXR0YWNoVG9Sb2xlKHJvbGUpO1xuICAgKlxuICAgKiAvLyBETyBUSElTIElOU1RFQURcbiAgICogcm9sZS5hZGRNYW5hZ2VkUG9saWN5KHBvbGljeTIpO1xuICAgKiBgYGBcbiAgICogQHBhcmFtIHBvbGljeSBUaGUgdGhlIG1hbmFnZWQgcG9saWN5IHRvIGF0dGFjaC5cbiAgICovXG4gIHB1YmxpYyBhZGRNYW5hZ2VkUG9saWN5KHBvbGljeTogSU1hbmFnZWRQb2xpY3kpIHtcbiAgICBpZiAoXG4gICAgICB0aGlzLm1hbmFnZWRQb2xpY2llcy5zb21lKFxuICAgICAgICAobXApID0+IG1wLm1hbmFnZWRQb2xpY3lBcm4gPT09IHBvbGljeS5tYW5hZ2VkUG9saWN5QXJuLFxuICAgICAgKVxuICAgICkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLm1hbmFnZWRQb2xpY2llcy5wdXNoKHBvbGljeSk7XG4gIH1cblxuICAvKipcbiAgICogQXR0YWNoZXMgYSBwb2xpY3kgdG8gdGhpcyByb2xlLlxuICAgKlxuICAgKiBOT1RFOiBVc2luZyB0aGlzIG1ldGhvZCB3aWxsIGZvcmNlIHRoZSByb2xlIHRvIHRha2Ugb3ZlclxuICAgKiBleGNsdXNpdmUgbWFuYWdlbWVudCBvZiB0aGUgcm9sZSdzIGlubGluZSBQb2xpY3kgYXR0YWNobWVudHNcbiAgICogVGhlc2UgYXJndW1lbnRzIGFyZSBpbmNvbXBhdGlibGUgd2l0aCBvdGhlciB3YXlzIG9mIG1hbmFnaW5nXG4gICAqIGEgcm9sZSdzIHN1Y2ggYXMgYXR0YWNoaW5nIGEgcG9saWN5IHRvIHRoZSByb2xlLlxuICAgKiBJZiB5b3UgYXR0ZW1wdCB0byBtYW5hZ2UgYSByb2xlJ3MgcG9saWNpZXMgYnkgbXVsdGlwbGUgbWVhbnMsXG4gICAqIHlvdSB3aWxsIGdldCByZXNvdXJjZSBjeWNsaW5nIGFuZC9vciBlcnJvcnMuXG4gICAqXG4gICAqIEBwYXJhbSBwb2xpY3kgVGhlIHBvbGljeSB0byBhdHRhY2hcbiAgICovXG4gIHB1YmxpYyBhdHRhY2hJbmxpbmVQb2xpY3kocG9saWN5OiBQb2xpY3kpIHtcbiAgICB0aGlzLmF0dGFjaGVkUG9saWNpZXMuYXR0YWNoKHBvbGljeSk7XG4gICAgcG9saWN5LmF0dGFjaFRvUm9sZSh0aGlzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudCB0aGUgYWN0aW9ucyBkZWZpbmVkIGluIGFjdGlvbnMgdG8gdGhlIGlkZW50aXR5IFByaW5jaXBhbCBvbiB0aGlzIHJlc291cmNlLlxuICAgKi9cbiAgcHVibGljIGdyYW50KGdyYW50ZWU6IElQcmluY2lwYWwsIC4uLmFjdGlvbnM6IHN0cmluZ1tdKSB7XG4gICAgcmV0dXJuIEdyYW50LmFkZFRvUHJpbmNpcGFsKHtcbiAgICAgIGdyYW50ZWUsXG4gICAgICBhY3Rpb25zLFxuICAgICAgcmVzb3VyY2VBcm5zOiBbdGhpcy5yb2xlQXJuXSxcbiAgICAgIHNjb3BlOiB0aGlzLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50IHBlcm1pc3Npb25zIHRvIHRoZSBnaXZlbiBwcmluY2lwYWwgdG8gcGFzcyB0aGlzIHJvbGUuXG4gICAqL1xuICBwdWJsaWMgZ3JhbnRQYXNzUm9sZShpZGVudGl0eTogSVByaW5jaXBhbCkge1xuICAgIHJldHVybiB0aGlzLmdyYW50KGlkZW50aXR5LCBcImlhbTpQYXNzUm9sZVwiKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudCBwZXJtaXNzaW9ucyB0byB0aGUgZ2l2ZW4gcHJpbmNpcGFsIHRvIGFzc3VtZSB0aGlzIHJvbGUuXG4gICAqL1xuICBwdWJsaWMgZ3JhbnRBc3N1bWVSb2xlKGlkZW50aXR5OiBJUHJpbmNpcGFsKSB7XG4gICAgLy8gU2VydmljZSBhbmQgYWNjb3VudCBwcmluY2lwYWxzIG11c3QgdXNlIGFzc3VtZVJvbGVQb2xpY3lcbiAgICBpZiAoXG4gICAgICBpZGVudGl0eSBpbnN0YW5jZW9mIFNlcnZpY2VQcmluY2lwYWwgfHxcbiAgICAgIGlkZW50aXR5IGluc3RhbmNlb2YgQWNjb3VudFByaW5jaXBhbFxuICAgICkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBcIkNhbm5vdCB1c2UgYSBzZXJ2aWNlIG9yIGFjY291bnQgcHJpbmNpcGFsIHdpdGggZ3JhbnRBc3N1bWVSb2xlLCB1c2UgYXNzdW1lUm9sZVBvbGljeSBpbnN0ZWFkLlwiLFxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZ3JhbnQoaWRlbnRpdHksIFwic3RzOkFzc3VtZVJvbGVcIik7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgc3RhYmxlIGFuZCB1bmlxdWUgc3RyaW5nIGlkZW50aWZ5aW5nIHRoZSByb2xlLiBGb3IgZXhhbXBsZSxcbiAgICogQUlEQUpRQUJMWlM0QTNRRFU1NzZRLlxuICAgKlxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICBwdWJsaWMgZ2V0IHJvbGVJZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9yb2xlSWQ7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGEgY29weSBvZiB0aGlzIFJvbGUgb2JqZWN0IHdob3NlIFBvbGljaWVzIHdpbGwgbm90IGJlIHVwZGF0ZWRcbiAgICpcbiAgICogVXNlIHRoZSBvYmplY3QgcmV0dXJuZWQgYnkgdGhpcyBtZXRob2QgaWYgeW91IHdhbnQgdGhpcyBSb2xlIHRvIGJlIHVzZWQgYnlcbiAgICogYSBjb25zdHJ1Y3Qgd2l0aG91dCBpdCBhdXRvbWF0aWNhbGx5IHVwZGF0aW5nIHRoZSBSb2xlJ3MgUG9saWNpZXMuXG4gICAqXG4gICAqIElmIHlvdSBkbywgeW91IGFyZSByZXNwb25zaWJsZSBmb3IgYWRkaW5nIHRoZSBjb3JyZWN0IHN0YXRlbWVudHMgdG8gdGhlXG4gICAqIFJvbGUncyBwb2xpY2llcyB5b3Vyc2VsZi5cbiAgICovXG4gIHB1YmxpYyB3aXRob3V0UG9saWN5VXBkYXRlcyhcbiAgICBvcHRpb25zOiBXaXRob3V0UG9saWN5VXBkYXRlc09wdGlvbnMgPSB7fSxcbiAgKTogSVJvbGUge1xuICAgIGlmICghdGhpcy5pbW11dGFibGVSb2xlKSB7XG4gICAgICB0aGlzLmltbXV0YWJsZVJvbGUgPSBuZXcgSW1tdXRhYmxlUm9sZShcbiAgICAgICAgdGhpcy5ub2RlLnNjb3BlIGFzIENvbnN0cnVjdCxcbiAgICAgICAgYEltbXV0YWJsZVJvbGUke3RoaXMubm9kZS5pZH1gLFxuICAgICAgICB0aGlzLFxuICAgICAgICBvcHRpb25zLmFkZEdyYW50c1RvUmVzb3VyY2VzID8/IGZhbHNlLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5pbW11dGFibGVSb2xlO1xuICB9XG5cbiAgcHJpdmF0ZSB2YWxpZGF0ZVJvbGUoKTogc3RyaW5nW10ge1xuICAgIGNvbnN0IGVycm9ycyA9IG5ldyBBcnJheTxzdHJpbmc+KCk7XG4gICAgZXJyb3JzLnB1c2goLi4uKHRoaXMuYXNzdW1lUm9sZVBvbGljeT8udmFsaWRhdGVGb3JSZXNvdXJjZVBvbGljeSgpID8/IFtdKSk7XG4gICAgZm9yIChjb25zdCBwb2xpY3kgb2YgT2JqZWN0LnZhbHVlcyh0aGlzLmlubGluZVBvbGljaWVzKSkge1xuICAgICAgZXJyb3JzLnB1c2goLi4ucG9saWN5LnZhbGlkYXRlRm9ySWRlbnRpdHlQb2xpY3koKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGVycm9ycztcbiAgfVxuXG4gIC8vIC8qKlxuICAvLyAgKiBTcGxpdCBsYXJnZSBpbmxpbmUgcG9saWNpZXMgaW50byBtYW5hZ2VkIHBvbGljaWVzXG4gIC8vICAqXG4gIC8vICAqIFRoaXMgZ2V0cyBhcm91bmQgdGhlIDEwayBieXRlcyBsaW1pdCBvbiByb2xlIHBvbGljaWVzLlxuICAvLyAgKi9cbiAgLy8gcHJpdmF0ZSBzcGxpdExhcmdlUG9saWN5KCkge1xuICAvLyAgIGlmICghdGhpcy5kZWZhdWx0UG9saWN5IHx8IHRoaXMuX2RpZFNwbGl0KSB7XG4gIC8vICAgICByZXR1cm47XG4gIC8vICAgfVxuICAvLyAgIHRoaXMuX2RpZFNwbGl0ID0gdHJ1ZTtcblxuICAvLyAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAvLyAgIGNvbnN0IG9yaWdpbmFsRG9jID0gdGhpcy5kZWZhdWx0UG9saWN5LmRvY3VtZW50O1xuXG4gIC8vICAgY29uc3Qgc3BsaXRPZmZEb2NzID0gb3JpZ2luYWxEb2MuX3NwbGl0RG9jdW1lbnQoXG4gIC8vICAgICB0aGlzLFxuICAvLyAgICAgTUFYX0lOTElORV9TSVpFLFxuICAvLyAgICAgTUFYX01BTkFHRURQT0xfU0laRSxcbiAgLy8gICApO1xuICAvLyAgIC8vIEluY2x1ZGVzIHRoZSBcImN1cnJlbnRcIiBkb2N1bWVudFxuXG4gIC8vICAgY29uc3QgbXBDb3VudCA9IHRoaXMubWFuYWdlZFBvbGljaWVzLmxlbmd0aCArIChzcGxpdE9mZkRvY3Muc2l6ZSAtIDEpO1xuICAvLyAgIGlmIChtcENvdW50ID4gMjApIHtcbiAgLy8gICAgIEFubm90YXRpb25zLm9mKHRoaXMpLmFkZFdhcm5pbmdWMihcbiAgLy8gICAgICAgXCJAYXdzLWNkay9hd3MtaWFtOnJvbGVQb2xpY3lUb29MYXJnZVwiLFxuICAvLyAgICAgICBgUG9saWN5IHRvbyBsYXJnZTogJHttcENvdW50fSBleGNlZWRzIHRoZSBtYXhpbXVtIG9mIDIwIG1hbmFnZWQgcG9saWNpZXMgYXR0YWNoZWQgdG8gYSBSb2xlYCxcbiAgLy8gICAgICk7XG4gIC8vICAgfSBlbHNlIGlmIChtcENvdW50ID4gMTApIHtcbiAgLy8gICAgIEFubm90YXRpb25zLm9mKHRoaXMpLmFkZFdhcm5pbmdWMihcbiAgLy8gICAgICAgXCJAYXdzLWNkay9hd3MtaWFtOnJvbGVQb2xpY3lMYXJnZVwiLFxuICAvLyAgICAgICBgUG9saWN5IGxhcmdlOiAke21wQ291bnR9IGV4Y2VlZHMgMTAgbWFuYWdlZCBwb2xpY2llcyBhdHRhY2hlZCB0byBhIFJvbGUsIHRoaXMgcmVxdWlyZXMgYSBxdW90YSBpbmNyZWFzZWAsXG4gIC8vICAgICApO1xuICAvLyAgIH1cblxuICAvLyAgIC8vIENyZWF0ZSB0aGUgbWFuYWdlZCBwb2xpY2llcyBhbmQgZml4IHVwIHRoZSBkZXBlbmRlbmNpZXNcbiAgLy8gICBtYXJrRGVjbGFyaW5nQ29uc3RydWN0KG9yaWdpbmFsRG9jLCB0aGlzLmRlZmF1bHRQb2xpY3kpO1xuXG4gIC8vICAgbGV0IGkgPSAxO1xuICAvLyAgIGZvciAoY29uc3QgbmV3RG9jIG9mIHNwbGl0T2ZmRG9jcy5rZXlzKCkpIHtcbiAgLy8gICAgIGlmIChuZXdEb2MgPT09IG9yaWdpbmFsRG9jKSB7XG4gIC8vICAgICAgIGNvbnRpbnVlO1xuICAvLyAgICAgfVxuXG4gIC8vICAgICBjb25zdCBtcCA9IG5ldyBBd3NNYW5hZ2VkUG9saWN5KHRoaXMsIGBPdmVyZmxvd1BvbGljeSR7aSsrfWAsIHtcbiAgLy8gICAgICAgZGVzY3JpcHRpb246IGBQYXJ0IG9mIHRoZSBwb2xpY2llcyBmb3IgJHt0aGlzLm5vZGUucGF0aH1gLFxuICAvLyAgICAgICBkb2N1bWVudDogbmV3RG9jLFxuICAvLyAgICAgICByb2xlczogW3RoaXNdLFxuICAvLyAgICAgfSk7XG4gIC8vICAgICBtYXJrRGVjbGFyaW5nQ29uc3RydWN0KG5ld0RvYywgbXApO1xuICAvLyAgIH1cblxuICAvLyAgIC8qKlxuICAvLyAgICAqIFVwZGF0ZSB0aGUgRGVwZW5kYWJsZXMgZm9yIHRoZSBzdGF0ZW1lbnRzIGluIHRoZSBnaXZlbiBQb2xpY3lEb2N1bWVudCB0byBwb2ludCB0byB0aGUgYWN0dWFsIGRlY2xhcmluZyBjb25zdHJ1Y3RcbiAgLy8gICAgKi9cbiAgLy8gICBmdW5jdGlvbiBtYXJrRGVjbGFyaW5nQ29uc3RydWN0KFxuICAvLyAgICAgZG9jOiBQb2xpY3lEb2N1bWVudCxcbiAgLy8gICAgIGRlY2xhcmluZ0NvbnN0cnVjdDogSUNvbnN0cnVjdCxcbiAgLy8gICApIHtcbiAgLy8gICAgIGZvciAoY29uc3Qgb3JpZ2luYWwgb2Ygc3BsaXRPZmZEb2NzLmdldChkb2MpID8/IFtdKSB7XG4gIC8vICAgICAgIHNlbGYuZGVwZW5kYWJsZXMuZ2V0KG9yaWdpbmFsKT8uYWRkKGRlY2xhcmluZ0NvbnN0cnVjdCk7XG4gIC8vICAgICB9XG4gIC8vICAgfVxuICAvLyB9XG59XG5cbi8qKlxuICogT3V0cHV0cyB3aGljaCBtYXkgYmUgcmVnaXN0ZXJlZCBmb3Igb3V0cHV0IHZpYSB0aGUgR3JpZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSb2xlT3V0cHV0cyB7XG4gIHJlYWRvbmx5IGFybjogc3RyaW5nO1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG59XG5cbi8qKlxuICogQSBSb2xlIG9iamVjdFxuICovXG5leHBvcnQgaW50ZXJmYWNlIElSb2xlIGV4dGVuZHMgSUlkZW50aXR5IHtcbiAgLyoqXG4gICAqIHN0cm9uZ2x5IHR5cGVkIHJvbGVPdXRwdXRzXG4gICAqXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHJlYWRvbmx5IHJvbGVPdXRwdXRzOiBSb2xlT3V0cHV0cztcbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIEFSTiBvZiB0aGlzIHJvbGUuXG4gICAqXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHJlYWRvbmx5IHJvbGVBcm46IHN0cmluZztcblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgbmFtZSBvZiB0aGlzIHJvbGUuXG4gICAqXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHJlYWRvbmx5IHJvbGVOYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEdyYW50IHRoZSBhY3Rpb25zIGRlZmluZWQgaW4gYWN0aW9ucyB0byB0aGUgaWRlbnRpdHkgUHJpbmNpcGFsIG9uIHRoaXMgcmVzb3VyY2UuXG4gICAqL1xuICBncmFudChncmFudGVlOiBJUHJpbmNpcGFsLCAuLi5hY3Rpb25zOiBzdHJpbmdbXSk6IEdyYW50O1xuXG4gIC8qKlxuICAgKiBHcmFudCBwZXJtaXNzaW9ucyB0byB0aGUgZ2l2ZW4gcHJpbmNpcGFsIHRvIHBhc3MgdGhpcyByb2xlLlxuICAgKi9cbiAgZ3JhbnRQYXNzUm9sZShncmFudGVlOiBJUHJpbmNpcGFsKTogR3JhbnQ7XG5cbiAgLyoqXG4gICAqIEdyYW50IHBlcm1pc3Npb25zIHRvIHRoZSBnaXZlbiBwcmluY2lwYWwgdG8gYXNzdW1lIHRoaXMgcm9sZS5cbiAgICovXG4gIGdyYW50QXNzdW1lUm9sZShncmFudGVlOiBJUHJpbmNpcGFsKTogR3JhbnQ7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUFzc3VtZVJvbGVQb2xpY3koXG4gIHNjb3BlOiBDb25zdHJ1Y3QsXG4gIGlkOiBzdHJpbmcsXG4gIHByaW5jaXBhbDogSVByaW5jaXBhbCxcbiAgZXh0ZXJuYWxJZHM6IHN0cmluZ1tdLFxuKSB7XG4gIGNvbnN0IGFjdHVhbERvYyA9IG5ldyBQb2xpY3lEb2N1bWVudChzY29wZSwgaWQpO1xuXG4gIC8vIElmIHJlcXVlc3RlZCwgYWRkIGV4dGVybmFsSWRzIHRvIGV2ZXJ5IHN0YXRlbWVudCBhZGRlZCB0byB0aGlzIGRvY1xuICBjb25zdCBhZGREb2MgPVxuICAgIGV4dGVybmFsSWRzLmxlbmd0aCA9PT0gMFxuICAgICAgPyBhY3R1YWxEb2NcbiAgICAgIDogbmV3IE11dGF0aW5nUG9saWN5RG9jdW1lbnRBZGFwdGVyKGFjdHVhbERvYywgKHN0YXRlbWVudCkgPT4ge1xuICAgICAgICAgIHN0YXRlbWVudC5hZGRDb25kaXRpb24oe1xuICAgICAgICAgICAgdGVzdDogXCJTdHJpbmdFcXVhbHNcIixcbiAgICAgICAgICAgIHZhcmlhYmxlOiBcInN0czpFeHRlcm5hbElkXCIsXG4gICAgICAgICAgICB2YWx1ZXM6IGV4dGVybmFsSWRzLFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybiBzdGF0ZW1lbnQ7XG4gICAgICAgIH0pO1xuXG4gIGRlZmF1bHRBZGRQcmluY2lwYWxUb0Fzc3VtZVJvbGUocHJpbmNpcGFsLCBhZGREb2MpO1xuXG4gIHJldHVybiBhY3R1YWxEb2M7XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlUm9sZVBhdGgocGF0aD86IHN0cmluZykge1xuICBpZiAocGF0aCA9PT0gdW5kZWZpbmVkIHx8IFRva2VuLmlzVW5yZXNvbHZlZChwYXRoKSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHZhbGlkUm9sZVBhdGggPSAvXihcXC98XFwvW1xcdTAwMjEtXFx1MDA3Rl0rXFwvKSQvO1xuXG4gIGlmIChwYXRoLmxlbmd0aCA9PSAwIHx8IHBhdGgubGVuZ3RoID4gNTEyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYFJvbGUgcGF0aCBtdXN0IGJlIGJldHdlZW4gMSBhbmQgNTEyIGNoYXJhY3RlcnMuIFRoZSBwcm92aWRlZCByb2xlIHBhdGggaXMgJHtwYXRoLmxlbmd0aH0gY2hhcmFjdGVycy5gLFxuICAgICk7XG4gIH0gZWxzZSBpZiAoIXZhbGlkUm9sZVBhdGgudGVzdChwYXRoKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIFwiUm9sZSBwYXRoIG11c3QgYmUgZWl0aGVyIGEgc2xhc2ggb3IgdmFsaWQgY2hhcmFjdGVycyAoYWxwaGFudW1lcmljcyBhbmQgc3ltYm9scykgc3Vycm91bmRlZCBieSBzbGFzaGVzLiBcIiArXG4gICAgICAgIGBWYWxpZCBjaGFyYWN0ZXJzIGFyZSB1bmljb2RlIGNoYXJhY3RlcnMgaW4gW1xcXFx1MDAyMS1cXFxcdTAwN0ZdLiBIb3dldmVyLCAke3BhdGh9IGlzIHByb3ZpZGVkLmAsXG4gICAgKTtcbiAgfVxufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZU1heFNlc3Npb25EdXJhdGlvbihkdXJhdGlvbj86IG51bWJlcikge1xuICBpZiAoZHVyYXRpb24gPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChkdXJhdGlvbiA8IDM2MDAgfHwgZHVyYXRpb24gPiA0MzIwMCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBtYXhTZXNzaW9uRHVyYXRpb24gaXMgc2V0IHRvICR7ZHVyYXRpb259LCBidXQgbXVzdCBiZSA+PSAzNjAwc2VjICgxaHIpIGFuZCA8PSA0MzIwMHNlYyAoMTJocnMpYCxcbiAgICApO1xuICB9XG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgdGhlIGB3aXRob3V0UG9saWN5VXBkYXRlcygpYCBtb2RpZmllciBvZiBhIFJvbGVcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBXaXRob3V0UG9saWN5VXBkYXRlc09wdGlvbnMge1xuICAvKipcbiAgICogQWRkIGdyYW50cyB0byByZXNvdXJjZXMgaW5zdGVhZCBvZiBkcm9wcGluZyB0aGVtXG4gICAqXG4gICAqIElmIHRoaXMgaXMgYGZhbHNlYCBvciBub3Qgc3BlY2lmaWVkLCBncmFudCBwZXJtaXNzaW9ucyBhZGRlZCB0byB0aGlzIHJvbGUgYXJlIGlnbm9yZWQuXG4gICAqIEl0IGlzIHlvdXIgb3duIHJlc3BvbnNpYmlsaXR5IHRvIG1ha2Ugc3VyZSB0aGUgcm9sZSBoYXMgdGhlIHJlcXVpcmVkIHBlcm1pc3Npb25zLlxuICAgKlxuICAgKiBJZiB0aGlzIGlzIGB0cnVlYCwgYW55IGdyYW50IHBlcm1pc3Npb25zIHdpbGwgYmUgYWRkZWQgdG8gdGhlIHJlc291cmNlIGluc3RlYWQuXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSBhZGRHcmFudHNUb1Jlc291cmNlcz86IGJvb2xlYW47XG59XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShSb2xlLnByb3RvdHlwZSwgSUFNX1JPTEVfU1lNQk9MLCB7XG4gIHZhbHVlOiB0cnVlLFxuICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgd3JpdGFibGU6IGZhbHNlLFxufSk7XG4iXX0=
@@ -0,0 +1,79 @@
1
+ import { iamSamlProvider } from "@cdktf/provider-aws";
2
+ import { Construct } from "constructs";
3
+ import { IAwsConstruct, AwsConstructBase, AwsConstructProps } from "../";
4
+ export interface SamlProviderOutputs {
5
+ /**
6
+ * The Amazon Resource Name (ARN) of the SAML provider.
7
+ * @stability stable
8
+ */
9
+ readonly arn: string;
10
+ }
11
+ /**
12
+ * A SAML provider
13
+ */
14
+ export interface ISamlProvider extends IAwsConstruct {
15
+ readonly samlProviderOutputs: SamlProviderOutputs;
16
+ /**
17
+ * The Amazon Resource Name (ARN) of the provider
18
+ *
19
+ * @attribute
20
+ */
21
+ readonly samlProviderArn: string;
22
+ }
23
+ /**
24
+ * Properties for a SAML provider
25
+ */
26
+ export interface SamlProviderProps extends AwsConstructProps {
27
+ /**
28
+ * The name of the provider to create.
29
+ *
30
+ * This parameter allows a string of characters consisting of upper and
31
+ * lowercase alphanumeric characters with no spaces. You can also include
32
+ * any of the following characters: _+=,.@-
33
+ *
34
+ * Length must be between 1 and 128 characters.
35
+ *
36
+ * @default - a unique name based on path within stack
37
+ */
38
+ readonly name?: string;
39
+ /**
40
+ * An XML document generated by an identity provider (IdP) that supports
41
+ * SAML 2.0. The document includes the issuer's name, expiration information,
42
+ * and keys that can be used to validate the SAML authentication response
43
+ * (assertions) that are received from the IdP. You must generate the metadata
44
+ * document using the identity management software that is used as your
45
+ * organization's IdP.
46
+ */
47
+ readonly metadataDocument: SamlMetadataDocument;
48
+ }
49
+ /**
50
+ * A SAML metadata document
51
+ */
52
+ export declare abstract class SamlMetadataDocument {
53
+ /**
54
+ * Create a SAML metadata document from a XML string
55
+ */
56
+ static fromXml(xml: string): SamlMetadataDocument;
57
+ /**
58
+ * Create a SAML metadata document from a XML file
59
+ */
60
+ static fromFile(path: string): SamlMetadataDocument;
61
+ /**
62
+ * The XML content of the metadata document
63
+ */
64
+ abstract readonly xml: string;
65
+ }
66
+ /**
67
+ * A SAML provider
68
+ */
69
+ export declare class SamlProvider extends AwsConstructBase implements ISamlProvider {
70
+ /**
71
+ * Import an existing provider
72
+ */
73
+ static fromSamlProviderArn(scope: Construct, id: string, samlProviderArn: string): ISamlProvider;
74
+ readonly samlProviderOutputs: SamlProviderOutputs;
75
+ get outputs(): Record<string, any>;
76
+ readonly resource: iamSamlProvider.IamSamlProvider;
77
+ readonly samlProviderArn: string;
78
+ constructor(scope: Construct, id: string, props: SamlProviderProps);
79
+ }