terraconstructs 0.0.11 → 0.0.12

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 (410) hide show
  1. package/.jsii +104486 -34582
  2. package/lib/aws/arn.js +1 -1
  3. package/lib/aws/aws-construct.d.ts +1 -1
  4. package/lib/aws/aws-construct.js +28 -2
  5. package/lib/aws/aws-stack.d.ts +2 -4
  6. package/lib/aws/aws-stack.js +21 -8
  7. package/lib/aws/aws-tags.d.ts +58 -0
  8. package/lib/aws/aws-tags.js +77 -0
  9. package/lib/aws/cloudwatch/actions/ec2.js +1 -1
  10. package/lib/aws/cloudwatch/actions/lambda.js +1 -1
  11. package/lib/aws/cloudwatch/alarm-base.js +1 -1
  12. package/lib/aws/cloudwatch/alarm-rule.js +1 -1
  13. package/lib/aws/cloudwatch/alarm-status-widget.js +1 -1
  14. package/lib/aws/cloudwatch/alarm.js +1 -1
  15. package/lib/aws/cloudwatch/composite-alarm.js +1 -1
  16. package/lib/aws/cloudwatch/dashboard.js +1 -1
  17. package/lib/aws/cloudwatch/data-protection-policy.js +3 -3
  18. package/lib/aws/cloudwatch/graph.js +8 -8
  19. package/lib/aws/cloudwatch/layout.js +3 -3
  20. package/lib/aws/cloudwatch/log-destinations/kinesis.js +1 -1
  21. package/lib/aws/cloudwatch/log-destinations/lambda.js +1 -1
  22. package/lib/aws/cloudwatch/log-group.js +1 -1
  23. package/lib/aws/cloudwatch/log-query.js +1 -1
  24. package/lib/aws/cloudwatch/log-stream.js +1 -1
  25. package/lib/aws/cloudwatch/metric-filter.d.ts +1 -1
  26. package/lib/aws/cloudwatch/metric-filter.js +4 -4
  27. package/lib/aws/cloudwatch/metric.js +2 -2
  28. package/lib/aws/cloudwatch/pattern.js +3 -3
  29. package/lib/aws/cloudwatch/policy.js +1 -1
  30. package/lib/aws/cloudwatch/private/env-tokens.js +5 -6
  31. package/lib/aws/cloudwatch/private/metric-util.js +4 -5
  32. package/lib/aws/cloudwatch/private/object.js +2 -3
  33. package/lib/aws/cloudwatch/private/rendering.js +3 -3
  34. package/lib/aws/cloudwatch/private/statistic.js +6 -7
  35. package/lib/aws/cloudwatch/query-definition.js +2 -2
  36. package/lib/aws/cloudwatch/stats.js +1 -1
  37. package/lib/aws/cloudwatch/subscription-filter.d.ts +1 -1
  38. package/lib/aws/cloudwatch/subscription-filter.js +4 -4
  39. package/lib/aws/cloudwatch/text.js +1 -1
  40. package/lib/aws/cloudwatch/variable.js +3 -3
  41. package/lib/aws/cloudwatch/widget.d.ts +1 -1
  42. package/lib/aws/cloudwatch/widget.js +4 -4
  43. package/lib/aws/compute/activity.js +3 -2
  44. package/lib/aws/compute/alb/application-listener-action.d.ts +334 -0
  45. package/lib/aws/compute/alb/application-listener-action.js +281 -0
  46. package/lib/aws/compute/alb/application-listener-certificate.d.ts +35 -0
  47. package/lib/aws/compute/alb/application-listener-certificate.js +35 -0
  48. package/lib/aws/compute/alb/application-listener-rule.d.ts +233 -0
  49. package/lib/aws/compute/alb/application-listener-rule.js +220 -0
  50. package/lib/aws/compute/alb/application-listener.d.ts +574 -0
  51. package/lib/aws/compute/alb/application-listener.js +538 -0
  52. package/lib/aws/compute/alb/application-load-balancer.d.ts +715 -0
  53. package/lib/aws/compute/alb/application-load-balancer.js +780 -0
  54. package/lib/aws/compute/alb/application-target-group.d.ts +339 -0
  55. package/lib/aws/compute/alb/application-target-group.js +427 -0
  56. package/lib/aws/compute/alb/conditions.d.ts +61 -0
  57. package/lib/aws/compute/alb/conditions.js +164 -0
  58. package/lib/aws/compute/alb/trust-store-revocation.d.ts +59 -0
  59. package/lib/aws/compute/alb/trust-store-revocation.js +46 -0
  60. package/lib/aws/compute/alb/trust-store.d.ts +86 -0
  61. package/lib/aws/compute/alb/trust-store.js +79 -0
  62. package/lib/aws/compute/architecture.js +1 -1
  63. package/lib/aws/compute/aspects/require-imdsv2-aspect.d.ts +75 -0
  64. package/lib/aws/compute/aspects/require-imdsv2-aspect.js +106 -0
  65. package/lib/aws/compute/bastion-host.d.ts +172 -0
  66. package/lib/aws/compute/bastion-host.js +114 -0
  67. package/lib/aws/compute/chain.js +1 -1
  68. package/lib/aws/compute/cidr-splits.d.ts +49 -0
  69. package/lib/aws/compute/cidr-splits.js +59 -0
  70. package/lib/aws/compute/client-vpn-authorization-rule.d.ts +43 -0
  71. package/lib/aws/compute/client-vpn-authorization-rule.js +30 -0
  72. package/lib/aws/compute/client-vpn-endpoint-types.d.ts +62 -0
  73. package/lib/aws/compute/client-vpn-endpoint-types.js +25 -0
  74. package/lib/aws/compute/client-vpn-endpoint.d.ts +239 -0
  75. package/lib/aws/compute/client-vpn-endpoint.js +259 -0
  76. package/lib/aws/compute/client-vpn-route.d.ts +67 -0
  77. package/lib/aws/compute/client-vpn-route.js +57 -0
  78. package/lib/aws/compute/condition.js +1 -1
  79. package/lib/aws/compute/connections.d.ts +137 -0
  80. package/lib/aws/compute/connections.js +208 -0
  81. package/lib/aws/compute/ec2-augmentations.generated.d.ts +53 -0
  82. package/lib/aws/compute/ec2-augmentations.generated.js +35 -0
  83. package/lib/aws/compute/ec2-canned-metrics.generated.d.ts +555 -0
  84. package/lib/aws/compute/ec2-canned-metrics.generated.js +681 -0
  85. package/lib/aws/compute/ec2-util-v2.d.ts +141 -0
  86. package/lib/aws/compute/ec2-util-v2.js +286 -0
  87. package/lib/aws/compute/ec2-util.d.ts +52 -0
  88. package/lib/aws/compute/ec2-util.js +138 -0
  89. package/lib/aws/compute/elasticloadbalancing-canned-metrics.generated.d.ts +176 -0
  90. package/lib/aws/compute/elasticloadbalancing-canned-metrics.generated.js +119 -0
  91. package/lib/aws/compute/elasticloadbalancingv2-canned-metrics.generated.d.ts +860 -0
  92. package/lib/aws/compute/elasticloadbalancingv2-canned-metrics.generated.js +597 -0
  93. package/lib/aws/compute/event-invoke-config.js +1 -1
  94. package/lib/aws/compute/event-source-filter.js +2 -2
  95. package/lib/aws/compute/event-source-mapping.js +1 -1
  96. package/lib/aws/compute/event-sources/s3-onfailure-destination.js +1 -1
  97. package/lib/aws/compute/event-sources/s3.js +1 -1
  98. package/lib/aws/compute/event-sources/sqs-dlq.js +1 -1
  99. package/lib/aws/compute/event-sources/sqs.js +1 -1
  100. package/lib/aws/compute/fields.js +4 -4
  101. package/lib/aws/compute/function-alias.js +1 -1
  102. package/lib/aws/compute/function-base.js +2 -2
  103. package/lib/aws/compute/function-destinations/event-bridge.js +1 -1
  104. package/lib/aws/compute/function-destinations/function.js +1 -1
  105. package/lib/aws/compute/function-destinations/sqs.js +1 -1
  106. package/lib/aws/compute/function-nodejs.js +1 -1
  107. package/lib/aws/compute/function-url.js +1 -1
  108. package/lib/aws/compute/function-vpc-config.generated.d.ts +3 -3
  109. package/lib/aws/compute/function-vpc-config.generated.js +1 -1
  110. package/lib/aws/compute/function.d.ts +1 -1
  111. package/lib/aws/compute/function.js +5 -5
  112. package/lib/aws/compute/index-alpha.d.ts +5 -0
  113. package/lib/aws/compute/index-alpha.js +22 -0
  114. package/lib/aws/compute/index.d.ts +60 -0
  115. package/lib/aws/compute/index.js +70 -2
  116. package/lib/aws/compute/instance-types.d.ts +1354 -0
  117. package/lib/aws/compute/instance-types.js +1683 -0
  118. package/lib/aws/compute/instance.d.ts +436 -0
  119. package/lib/aws/compute/instance.js +262 -0
  120. package/lib/aws/compute/ip-addresses.d.ts +249 -0
  121. package/lib/aws/compute/ip-addresses.js +248 -0
  122. package/lib/aws/compute/ipam.d.ts +309 -0
  123. package/lib/aws/compute/ipam.js +306 -0
  124. package/lib/aws/compute/key-pair.d.ts +178 -0
  125. package/lib/aws/compute/key-pair.js +194 -0
  126. package/lib/aws/compute/lambda-augmentations.generated.d.ts +65 -0
  127. package/lib/aws/compute/lambda-augmentations.generated.js +41 -0
  128. package/lib/aws/compute/lambda-canned-metrics.generated.d.ts +316 -0
  129. package/lib/aws/compute/lambda-canned-metrics.generated.js +119 -0
  130. package/lib/aws/compute/launch-template.d.ts +540 -0
  131. package/lib/aws/compute/launch-template.js +468 -0
  132. package/lib/aws/compute/lb-shared/access-logs-accounts.d.ts +7 -0
  133. package/lib/aws/compute/lb-shared/access-logs-accounts.js +46 -0
  134. package/lib/aws/compute/lb-shared/base-listener.d.ts +113 -0
  135. package/lib/aws/compute/lb-shared/base-listener.js +181 -0
  136. package/lib/aws/compute/lb-shared/base-load-balancer.d.ts +212 -0
  137. package/lib/aws/compute/lb-shared/base-load-balancer.js +290 -0
  138. package/lib/aws/compute/lb-shared/base-target-group.d.ts +382 -0
  139. package/lib/aws/compute/lb-shared/base-target-group.js +364 -0
  140. package/lib/aws/compute/lb-shared/enums.d.ts +282 -0
  141. package/lib/aws/compute/lb-shared/enums.js +301 -0
  142. package/lib/aws/compute/lb-shared/grid-lookup-types.d.ts +42 -0
  143. package/lib/aws/compute/lb-shared/grid-lookup-types.js +53 -0
  144. package/lib/aws/compute/lb-shared/imported.d.ts +24 -0
  145. package/lib/aws/compute/lb-shared/imported.js +27 -0
  146. package/lib/aws/compute/lb-shared/lb-listener-config.generated.d.ts +194 -0
  147. package/lib/aws/compute/lb-shared/lb-listener-config.generated.js +3 -0
  148. package/lib/aws/compute/lb-shared/lb-target-group-attachment-config.generated.d.ts +56 -0
  149. package/lib/aws/compute/lb-shared/lb-target-group-attachment-config.generated.js +3 -0
  150. package/lib/aws/compute/lb-shared/listener-action.d.ts +14 -0
  151. package/lib/aws/compute/lb-shared/listener-action.js +4 -0
  152. package/lib/aws/compute/lb-shared/listener-certificate.d.ts +28 -0
  153. package/lib/aws/compute/lb-shared/listener-certificate.js +29 -0
  154. package/lib/aws/compute/lb-shared/load-balancer-targets.d.ts +93 -0
  155. package/lib/aws/compute/lb-shared/load-balancer-targets.js +127 -0
  156. package/lib/aws/compute/lb-shared/util.d.ts +113 -0
  157. package/lib/aws/compute/lb-shared/util.js +264 -0
  158. package/lib/aws/compute/lb-targets/alb-target.d.ts +67 -0
  159. package/lib/aws/compute/lb-targets/alb-target.js +100 -0
  160. package/lib/aws/compute/lb-targets/index.d.ts +4 -0
  161. package/lib/aws/compute/lb-targets/index.js +22 -0
  162. package/lib/aws/compute/lb-targets/instance-target.d.ts +42 -0
  163. package/lib/aws/compute/lb-targets/instance-target.js +67 -0
  164. package/lib/aws/compute/lb-targets/ip-target.d.ts +55 -0
  165. package/lib/aws/compute/lb-targets/ip-target.js +79 -0
  166. package/lib/aws/compute/lb-targets/lambda-target.d.ts +25 -0
  167. package/lib/aws/compute/lb-targets/lambda-target.js +50 -0
  168. package/lib/aws/compute/load-balancer.d.ts +336 -0
  169. package/lib/aws/compute/load-balancer.js +287 -0
  170. package/lib/aws/compute/machine-image/amazon-linux-2022.d.ts +63 -0
  171. package/lib/aws/compute/machine-image/amazon-linux-2022.js +84 -0
  172. package/lib/aws/compute/machine-image/amazon-linux-2023.d.ts +63 -0
  173. package/lib/aws/compute/machine-image/amazon-linux-2023.js +84 -0
  174. package/lib/aws/compute/machine-image/amazon-linux2.d.ts +76 -0
  175. package/lib/aws/compute/machine-image/amazon-linux2.js +87 -0
  176. package/lib/aws/compute/machine-image/common.d.ts +181 -0
  177. package/lib/aws/compute/machine-image/common.js +122 -0
  178. package/lib/aws/compute/machine-image/index.d.ts +5 -0
  179. package/lib/aws/compute/machine-image/index.js +22 -0
  180. package/lib/aws/compute/machine-image/machine-image.d.ts +463 -0
  181. package/lib/aws/compute/machine-image/machine-image.js +566 -0
  182. package/lib/aws/compute/machine-image/utils.d.ts +2 -0
  183. package/lib/aws/compute/machine-image/utils.js +17 -0
  184. package/lib/aws/compute/nat.d.ts +325 -0
  185. package/lib/aws/compute/nat.js +455 -0
  186. package/lib/aws/compute/network-acl-types.d.ts +152 -0
  187. package/lib/aws/compute/network-acl-types.js +156 -0
  188. package/lib/aws/compute/network-acl.d.ts +285 -0
  189. package/lib/aws/compute/network-acl.js +207 -0
  190. package/lib/aws/compute/network-util.d.ts +116 -0
  191. package/lib/aws/compute/network-util.js +241 -0
  192. package/lib/aws/compute/nlb/network-listener-action.d.ts +92 -0
  193. package/lib/aws/compute/nlb/network-listener-action.js +146 -0
  194. package/lib/aws/compute/nlb/network-listener-certificate.d.ts +24 -0
  195. package/lib/aws/compute/nlb/network-listener-certificate.js +25 -0
  196. package/lib/aws/compute/nlb/network-listener.d.ts +248 -0
  197. package/lib/aws/compute/nlb/network-listener.js +217 -0
  198. package/lib/aws/compute/nlb/network-load-balancer.d.ts +315 -0
  199. package/lib/aws/compute/nlb/network-load-balancer.js +360 -0
  200. package/lib/aws/compute/nlb/network-target-group.d.ts +153 -0
  201. package/lib/aws/compute/nlb/network-target-group.js +223 -0
  202. package/lib/aws/compute/peer.d.ts +64 -0
  203. package/lib/aws/compute/peer.js +235 -0
  204. package/lib/aws/compute/placement-group.d.ts +161 -0
  205. package/lib/aws/compute/placement-group.js +133 -0
  206. package/lib/aws/compute/port.d.ts +287 -0
  207. package/lib/aws/compute/port.js +390 -0
  208. package/lib/aws/compute/prefix-list.d.ts +131 -0
  209. package/lib/aws/compute/prefix-list.js +114 -0
  210. package/lib/aws/compute/private/context-stub.d.ts +7 -0
  211. package/lib/aws/compute/private/context-stub.js +43 -0
  212. package/lib/aws/compute/private/ebs-util.d.ts +14 -0
  213. package/lib/aws/compute/private/ebs-util.js +145 -0
  214. package/lib/aws/compute/private/intrinstics.js +2 -1
  215. package/lib/aws/compute/private/json-path.js +8 -8
  216. package/lib/aws/compute/private/util.js +2 -3
  217. package/lib/aws/compute/route.d.ts +547 -0
  218. package/lib/aws/compute/route.js +469 -0
  219. package/lib/aws/compute/security-group.d.ts +414 -0
  220. package/lib/aws/compute/security-group.js +538 -0
  221. package/lib/aws/compute/state-graph.js +1 -1
  222. package/lib/aws/compute/state-machine-fragment.js +1 -1
  223. package/lib/aws/compute/state-machine.d.ts +2 -2
  224. package/lib/aws/compute/state-machine.js +14 -12
  225. package/lib/aws/compute/states/choice.js +1 -1
  226. package/lib/aws/compute/states/custom-state.js +1 -1
  227. package/lib/aws/compute/states/distributed-map/item-batcher.js +1 -1
  228. package/lib/aws/compute/states/distributed-map/item-reader.js +5 -5
  229. package/lib/aws/compute/states/distributed-map/result-writer.js +1 -1
  230. package/lib/aws/compute/states/distributed-map.js +1 -1
  231. package/lib/aws/compute/states/fail.js +1 -1
  232. package/lib/aws/compute/states/map-base.js +1 -1
  233. package/lib/aws/compute/states/map.js +1 -1
  234. package/lib/aws/compute/states/parallel.js +1 -1
  235. package/lib/aws/compute/states/pass.js +2 -2
  236. package/lib/aws/compute/states/state.js +5 -5
  237. package/lib/aws/compute/states/succeed.js +1 -1
  238. package/lib/aws/compute/states/task-base.js +2 -2
  239. package/lib/aws/compute/states/task.js +1 -1
  240. package/lib/aws/compute/states/wait.js +2 -2
  241. package/lib/aws/compute/stepfunctions-canned-metrics.generated.d.ts +83 -0
  242. package/lib/aws/compute/stepfunctions-canned-metrics.generated.js +127 -0
  243. package/lib/aws/compute/subnet-v2.d.ts +213 -0
  244. package/lib/aws/compute/subnet-v2.js +405 -0
  245. package/lib/aws/compute/subnet.d.ts +37 -0
  246. package/lib/aws/compute/subnet.js +181 -0
  247. package/lib/aws/compute/task-credentials.js +1 -1
  248. package/lib/aws/compute/task-input.js +1 -1
  249. package/lib/aws/compute/tasks/aws-sdk/call-aws-service.js +1 -1
  250. package/lib/aws/compute/tasks/eventbridge/put-events.js +1 -1
  251. package/lib/aws/compute/tasks/http/invoke.js +1 -1
  252. package/lib/aws/compute/tasks/lambda/invoke.js +1 -1
  253. package/lib/aws/compute/tasks/private/task-utils.js +3 -4
  254. package/lib/aws/compute/tasks/resource-arn-suffix.js +2 -3
  255. package/lib/aws/compute/tasks/sqs/send-message.js +1 -1
  256. package/lib/aws/compute/tasks/stepfunctions/invoke-activity.js +1 -1
  257. package/lib/aws/compute/tasks/stepfunctions/start-execution.js +1 -1
  258. package/lib/aws/compute/types.js +2 -2
  259. package/lib/aws/compute/user-data.d.ts +270 -0
  260. package/lib/aws/compute/user-data.js +487 -0
  261. package/lib/aws/compute/util.d.ts +1 -1
  262. package/lib/aws/compute/util.js +4 -5
  263. package/lib/aws/compute/volume.d.ts +480 -0
  264. package/lib/aws/compute/volume.js +426 -0
  265. package/lib/aws/compute/vpc-endpoint-service.d.ts +149 -0
  266. package/lib/aws/compute/vpc-endpoint-service.js +90 -0
  267. package/lib/aws/compute/vpc-endpoint.d.ts +742 -0
  268. package/lib/aws/compute/vpc-endpoint.js +811 -0
  269. package/lib/aws/compute/vpc-flow-logs.d.ts +551 -0
  270. package/lib/aws/compute/vpc-flow-logs.js +693 -0
  271. package/lib/aws/compute/vpc-lookup.d.ts +73 -0
  272. package/lib/aws/compute/vpc-lookup.js +3 -0
  273. package/lib/aws/compute/vpc-v2-base.d.ts +353 -0
  274. package/lib/aws/compute/vpc-v2-base.js +493 -0
  275. package/lib/aws/compute/vpc-v2.d.ts +385 -0
  276. package/lib/aws/compute/vpc-v2.js +408 -0
  277. package/lib/aws/compute/vpc.d.ts +1448 -0
  278. package/lib/aws/compute/vpc.js +1495 -0
  279. package/lib/aws/compute/vpn.d.ts +443 -0
  280. package/lib/aws/compute/vpn.js +397 -0
  281. package/lib/aws/compute/windows-versions.d.ts +418 -0
  282. package/lib/aws/compute/windows-versions.js +426 -0
  283. package/lib/aws/edge/certificate-base.d.ts +20 -0
  284. package/lib/aws/edge/certificate-base.js +28 -0
  285. package/lib/aws/edge/certificate.d.ts +23 -2
  286. package/lib/aws/edge/certificate.js +54 -4
  287. package/lib/aws/edge/distribution.js +3 -3
  288. package/lib/aws/edge/dns-alias-record-targets.js +2 -2
  289. package/lib/aws/edge/dns-record.js +16 -16
  290. package/lib/aws/edge/dns-zone.d.ts +20 -2
  291. package/lib/aws/edge/dns-zone.js +25 -10
  292. package/lib/aws/edge/function.js +2 -2
  293. package/lib/aws/edge/index.d.ts +1 -0
  294. package/lib/aws/edge/index.js +2 -1
  295. package/lib/aws/edge/key-value-store.js +4 -4
  296. package/lib/aws/edge/origin.js +7 -5
  297. package/lib/aws/edge/response-headers-policy.js +1 -1
  298. package/lib/aws/encryption/alias.js +1 -1
  299. package/lib/aws/encryption/key.js +1 -1
  300. package/lib/aws/encryption/via-service-principal.js +1 -1
  301. package/lib/aws/iam/grant.js +2 -2
  302. package/lib/aws/iam/index.d.ts +1 -0
  303. package/lib/aws/iam/index.js +2 -1
  304. package/lib/aws/iam/instance-profile.d.ts +155 -0
  305. package/lib/aws/iam/instance-profile.js +124 -0
  306. package/lib/aws/iam/managed-policy.js +1 -1
  307. package/lib/aws/iam/oidc-provider.js +1 -1
  308. package/lib/aws/iam/policy-document-config.generated.d.ts +8 -8
  309. package/lib/aws/iam/policy-document-config.generated.js +1 -1
  310. package/lib/aws/iam/policy-document.js +1 -1
  311. package/lib/aws/iam/policy-statement-props.generated.d.ts +8 -8
  312. package/lib/aws/iam/policy-statement-props.generated.js +1 -1
  313. package/lib/aws/iam/policy-statement.js +9 -9
  314. package/lib/aws/iam/policy.js +1 -1
  315. package/lib/aws/iam/principals.js +26 -26
  316. package/lib/aws/iam/private/assume-role-policy.js +2 -3
  317. package/lib/aws/iam/private/comparable-principal.js +2 -3
  318. package/lib/aws/iam/private/immutable-role.d.ts +2 -1
  319. package/lib/aws/iam/private/immutable-role.js +3 -3
  320. package/lib/aws/iam/private/imported-role.d.ts +1 -1
  321. package/lib/aws/iam/private/imported-role.js +3 -3
  322. package/lib/aws/iam/private/merge-statements.js +2 -3
  323. package/lib/aws/iam/private/util.js +4 -4
  324. package/lib/aws/iam/role.js +1 -1
  325. package/lib/aws/iam/saml-provider.d.ts +1 -1
  326. package/lib/aws/iam/saml-provider.js +6 -6
  327. package/lib/aws/iam/unknown-principal.js +1 -1
  328. package/lib/aws/iam/utils.js +2 -3
  329. package/lib/aws/index.d.ts +1 -0
  330. package/lib/aws/index.js +4 -1
  331. package/lib/aws/network/simple-ipv4-vpc.js +5 -5
  332. package/lib/aws/network/subnet-group.js +3 -3
  333. package/lib/aws/network/subnet.d.ts +1 -1
  334. package/lib/aws/network/subnet.js +7 -7
  335. package/lib/aws/notify/archive.js +3 -2
  336. package/lib/aws/notify/connection.js +5 -4
  337. package/lib/aws/notify/event-bus.js +5 -4
  338. package/lib/aws/notify/event-pattern.js +3 -3
  339. package/lib/aws/notify/index.js +3 -1
  340. package/lib/aws/notify/input.js +4 -3
  341. package/lib/aws/notify/kinesis-stream.js +3 -2
  342. package/lib/aws/notify/on-event-options.js +2 -1
  343. package/lib/aws/notify/queue-config.generated.d.ts +18 -11
  344. package/lib/aws/notify/queue-config.generated.js +1 -1
  345. package/lib/aws/notify/queue-policy.js +1 -1
  346. package/lib/aws/notify/queue.js +1 -1
  347. package/lib/aws/notify/resource-policy.js +1 -1
  348. package/lib/aws/notify/rule.js +3 -2
  349. package/lib/aws/notify/schedule.js +2 -2
  350. package/lib/aws/notify/sqs-augmentations.generated.d.ts +125 -0
  351. package/lib/aws/notify/sqs-augmentations.generated.js +74 -0
  352. package/lib/aws/notify/target.js +2 -1
  353. package/lib/aws/notify/targets/event-bus.js +1 -1
  354. package/lib/aws/notify/targets/function.js +1 -1
  355. package/lib/aws/notify/targets/log-group.js +2 -2
  356. package/lib/aws/notify/targets/sqs.js +1 -1
  357. package/lib/aws/notify/targets/state-machine.js +1 -1
  358. package/lib/aws/notify/targets/util.d.ts +1 -1
  359. package/lib/aws/notify/targets/util.js +10 -11
  360. package/lib/aws/notify/util.js +4 -4
  361. package/lib/aws/provider-config.generated.d.ts +33 -33
  362. package/lib/aws/provider-config.generated.js +1 -1
  363. package/lib/aws/storage/bucket-notifications.js +1 -1
  364. package/lib/aws/storage/bucket-policy.js +1 -1
  365. package/lib/aws/storage/bucket-source.js +1 -1
  366. package/lib/aws/storage/bucket.d.ts +298 -65
  367. package/lib/aws/storage/bucket.js +548 -225
  368. package/lib/aws/storage/cors-config.generated.d.ts +3 -3
  369. package/lib/aws/storage/cors-config.generated.js +1 -1
  370. package/lib/aws/storage/cors-rule-config.generated.d.ts +5 -5
  371. package/lib/aws/storage/cors-rule-config.generated.js +1 -1
  372. package/lib/aws/storage/index.d.ts +1 -0
  373. package/lib/aws/storage/index.js +2 -1
  374. package/lib/aws/storage/lifecycle-config.generated.d.ts +11 -11
  375. package/lib/aws/storage/lifecycle-config.generated.js +1 -1
  376. package/lib/aws/storage/notification-targets/function.js +6 -6
  377. package/lib/aws/storage/notification-targets/queue.js +1 -1
  378. package/lib/aws/storage/origin-access-identity.d.ts +1 -1
  379. package/lib/aws/storage/origin-access-identity.js +5 -4
  380. package/lib/aws/storage/parameter-util.d.ts +12 -0
  381. package/lib/aws/storage/parameter-util.js +65 -0
  382. package/lib/aws/storage/parameter.d.ts +526 -0
  383. package/lib/aws/storage/parameter.js +606 -0
  384. package/lib/aws/storage/s3-canned-metrics.generated.d.ts +22 -0
  385. package/lib/aws/storage/s3-canned-metrics.generated.js +23 -0
  386. package/lib/aws/storage/util.d.ts +25 -3
  387. package/lib/aws/storage/util.js +84 -17
  388. package/lib/aws/storage/website-config.generated.d.ts +5 -5
  389. package/lib/aws/storage/website-config.generated.js +1 -1
  390. package/lib/aws/util.js +2 -3
  391. package/lib/construct-base.d.ts +10 -1
  392. package/lib/construct-base.js +9 -6
  393. package/lib/duration.js +1 -1
  394. package/lib/expiration.d.ts +48 -0
  395. package/lib/expiration.js +68 -0
  396. package/lib/helpers-internal/index.d.ts +1 -0
  397. package/lib/helpers-internal/index.js +7 -0
  398. package/lib/index.d.ts +2 -0
  399. package/lib/index.js +3 -1
  400. package/lib/private/md5.d.ts +4 -0
  401. package/lib/private/md5.js +14 -0
  402. package/lib/private/unique-resource-name.js +3 -4
  403. package/lib/size.js +2 -2
  404. package/lib/stack-base.d.ts +4 -23
  405. package/lib/stack-base.js +9 -30
  406. package/lib/terra-func.d.ts +103 -0
  407. package/lib/terra-func.js +170 -0
  408. package/lib/token.js +5 -5
  409. package/package.json +15 -8
  410. package/bun.lockb +0 -0
@@ -1,7 +1,8 @@
1
1
  "use strict";
2
2
  var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o;
3
3
  Object.defineProperty(exports, "__esModule", { value: true });
4
- exports.determineFullyQualifiedDomainName = exports.ZoneDelegationRecord = exports.DsRecord = exports.NsRecord = exports.MxRecord = exports.CaaAmazonRecord = exports.CaaRecord = exports.CaaTag = exports.SrvRecord = exports.TxtRecord = exports.CnameRecord = exports.AaaaRecord = exports.ARecord = exports.RecordTarget = exports.RecordType = exports.RecordSet = void 0;
4
+ exports.ZoneDelegationRecord = exports.DsRecord = exports.NsRecord = exports.MxRecord = exports.CaaAmazonRecord = exports.CaaRecord = exports.CaaTag = exports.SrvRecord = exports.TxtRecord = exports.CnameRecord = exports.AaaaRecord = exports.ARecord = exports.RecordTarget = exports.RecordType = exports.RecordSet = void 0;
5
+ exports.determineFullyQualifiedDomainName = determineFullyQualifiedDomainName;
5
6
  const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
6
7
  const provider_aws_1 = require("@cdktf/provider-aws");
7
8
  const cdktf_1 = require("cdktf");
@@ -133,7 +134,7 @@ class RecordSet extends __1.AwsConstructBase {
133
134
  }
134
135
  exports.RecordSet = RecordSet;
135
136
  _a = JSII_RTTI_SYMBOL_1;
136
- RecordSet[_a] = { fqn: "terraconstructs.aws.edge.RecordSet", version: "0.0.11" };
137
+ RecordSet[_a] = { fqn: "terraconstructs.aws.edge.RecordSet", version: "0.0.12" };
137
138
  /**
138
139
  * The record type.
139
140
  */
@@ -258,7 +259,7 @@ class RecordTarget {
258
259
  }
259
260
  exports.RecordTarget = RecordTarget;
260
261
  _b = JSII_RTTI_SYMBOL_1;
261
- RecordTarget[_b] = { fqn: "terraconstructs.aws.edge.RecordTarget", version: "0.0.11" };
262
+ RecordTarget[_b] = { fqn: "terraconstructs.aws.edge.RecordTarget", version: "0.0.12" };
262
263
  /**
263
264
  * A DNS A record
264
265
  *
@@ -275,7 +276,7 @@ class ARecord extends RecordSet {
275
276
  }
276
277
  exports.ARecord = ARecord;
277
278
  _c = JSII_RTTI_SYMBOL_1;
278
- ARecord[_c] = { fqn: "terraconstructs.aws.edge.ARecord", version: "0.0.11" };
279
+ ARecord[_c] = { fqn: "terraconstructs.aws.edge.ARecord", version: "0.0.12" };
279
280
  /**
280
281
  * A DNS AAAA record
281
282
  *
@@ -292,7 +293,7 @@ class AaaaRecord extends RecordSet {
292
293
  }
293
294
  exports.AaaaRecord = AaaaRecord;
294
295
  _d = JSII_RTTI_SYMBOL_1;
295
- AaaaRecord[_d] = { fqn: "terraconstructs.aws.edge.AaaaRecord", version: "0.0.11" };
296
+ AaaaRecord[_d] = { fqn: "terraconstructs.aws.edge.AaaaRecord", version: "0.0.12" };
296
297
  /**
297
298
  * A DNS CNAME record
298
299
  *
@@ -309,7 +310,7 @@ class CnameRecord extends RecordSet {
309
310
  }
310
311
  exports.CnameRecord = CnameRecord;
311
312
  _e = JSII_RTTI_SYMBOL_1;
312
- CnameRecord[_e] = { fqn: "terraconstructs.aws.edge.CnameRecord", version: "0.0.11" };
313
+ CnameRecord[_e] = { fqn: "terraconstructs.aws.edge.CnameRecord", version: "0.0.12" };
313
314
  /**
314
315
  * A DNS TXT record
315
316
  *
@@ -326,7 +327,7 @@ class TxtRecord extends RecordSet {
326
327
  }
327
328
  exports.TxtRecord = TxtRecord;
328
329
  _f = JSII_RTTI_SYMBOL_1;
329
- TxtRecord[_f] = { fqn: "terraconstructs.aws.edge.TxtRecord", version: "0.0.11" };
330
+ TxtRecord[_f] = { fqn: "terraconstructs.aws.edge.TxtRecord", version: "0.0.12" };
330
331
  /**
331
332
  * Formats a text value for use in a TXT record
332
333
  *
@@ -362,7 +363,7 @@ class SrvRecord extends RecordSet {
362
363
  }
363
364
  exports.SrvRecord = SrvRecord;
364
365
  _g = JSII_RTTI_SYMBOL_1;
365
- SrvRecord[_g] = { fqn: "terraconstructs.aws.edge.SrvRecord", version: "0.0.11" };
366
+ SrvRecord[_g] = { fqn: "terraconstructs.aws.edge.SrvRecord", version: "0.0.12" };
366
367
  /**
367
368
  * The CAA tag.
368
369
  */
@@ -400,7 +401,7 @@ class CaaRecord extends RecordSet {
400
401
  }
401
402
  exports.CaaRecord = CaaRecord;
402
403
  _h = JSII_RTTI_SYMBOL_1;
403
- CaaRecord[_h] = { fqn: "terraconstructs.aws.edge.CaaRecord", version: "0.0.11" };
404
+ CaaRecord[_h] = { fqn: "terraconstructs.aws.edge.CaaRecord", version: "0.0.12" };
404
405
  /**
405
406
  * A DNS Amazon CAA record.
406
407
  *
@@ -425,7 +426,7 @@ class CaaAmazonRecord extends CaaRecord {
425
426
  }
426
427
  exports.CaaAmazonRecord = CaaAmazonRecord;
427
428
  _j = JSII_RTTI_SYMBOL_1;
428
- CaaAmazonRecord[_j] = { fqn: "terraconstructs.aws.edge.CaaAmazonRecord", version: "0.0.11" };
429
+ CaaAmazonRecord[_j] = { fqn: "terraconstructs.aws.edge.CaaAmazonRecord", version: "0.0.12" };
429
430
  /**
430
431
  * A DNS MX record
431
432
  *
@@ -442,7 +443,7 @@ class MxRecord extends RecordSet {
442
443
  }
443
444
  exports.MxRecord = MxRecord;
444
445
  _k = JSII_RTTI_SYMBOL_1;
445
- MxRecord[_k] = { fqn: "terraconstructs.aws.edge.MxRecord", version: "0.0.11" };
446
+ MxRecord[_k] = { fqn: "terraconstructs.aws.edge.MxRecord", version: "0.0.12" };
446
447
  /**
447
448
  * A DNS NS record
448
449
  *
@@ -459,7 +460,7 @@ class NsRecord extends RecordSet {
459
460
  }
460
461
  exports.NsRecord = NsRecord;
461
462
  _l = JSII_RTTI_SYMBOL_1;
462
- NsRecord[_l] = { fqn: "terraconstructs.aws.edge.NsRecord", version: "0.0.11" };
463
+ NsRecord[_l] = { fqn: "terraconstructs.aws.edge.NsRecord", version: "0.0.12" };
463
464
  /**
464
465
  * A DNS DS record
465
466
  *
@@ -476,7 +477,7 @@ class DsRecord extends RecordSet {
476
477
  }
477
478
  exports.DsRecord = DsRecord;
478
479
  _m = JSII_RTTI_SYMBOL_1;
479
- DsRecord[_m] = { fqn: "terraconstructs.aws.edge.DsRecord", version: "0.0.11" };
480
+ DsRecord[_m] = { fqn: "terraconstructs.aws.edge.DsRecord", version: "0.0.12" };
480
481
  /**
481
482
  * A record to delegate further lookups to a different set of name servers.
482
483
  */
@@ -494,7 +495,7 @@ class ZoneDelegationRecord extends RecordSet {
494
495
  }
495
496
  exports.ZoneDelegationRecord = ZoneDelegationRecord;
496
497
  _o = JSII_RTTI_SYMBOL_1;
497
- ZoneDelegationRecord[_o] = { fqn: "terraconstructs.aws.edge.ZoneDelegationRecord", version: "0.0.11" };
498
+ ZoneDelegationRecord[_o] = { fqn: "terraconstructs.aws.edge.ZoneDelegationRecord", version: "0.0.12" };
498
499
  // ref https://github.com/aws/aws-cdk/blob/v2.156.0/packages/aws-cdk-lib/aws-route53/lib/util.ts
499
500
  /**
500
501
  * Route53 requires the record names are specified as fully qualified names, but this
@@ -528,5 +529,4 @@ function determineFullyQualifiedDomainName(dnsZone, recordName) {
528
529
  }
529
530
  return `${recordName}${suffix}.`;
530
531
  }
531
- exports.determineFullyQualifiedDomainName = determineFullyQualifiedDomainName;
532
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG5zLXJlY29yZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hd3MvZWRnZS9kbnMtcmVjb3JkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsc0RBQW9EO0FBQ3BELGlDQUE4QjtBQUk5QiwyQkFBeUU7QUFDekUsNkJBQWlDO0FBd0pqQzs7R0FFRztBQUNILE1BQWEsU0FBVSxTQUFRLG9CQUFnQjtJQUc3QyxJQUFXLGdCQUFnQjtRQUN6QixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDdkIsQ0FBQztJQUNELElBQVcsT0FBTztRQUNoQixPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztJQUMvQixDQUFDO0lBUUQsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUFxQjtRQUM3RCxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUV4QixJQUFJLEtBQUssQ0FBQyxNQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxLQUFLLENBQUMsTUFBTSxHQUFHLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDN0QsTUFBTSxJQUFJLEtBQUssQ0FDYixvREFBb0QsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUNuRSxDQUFDO1FBQ0osQ0FBQztRQUNELElBQ0UsS0FBSyxDQUFDLGFBQWE7WUFDbkIsQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksS0FBSyxDQUFDLGFBQWEsQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDLEVBQ3BFLENBQUM7WUFDRCxNQUFNLElBQUksS0FBSyxDQUNiLGlFQUFpRSxLQUFLLENBQUMsYUFBYSxDQUFDLE1BQU0sRUFBRSxDQUM5RixDQUFDO1FBQ0osQ0FBQztRQUNELElBQ0UsS0FBSyxDQUFDLGFBQWE7WUFDbkIsS0FBSyxDQUFDLE1BQU0sS0FBSyxTQUFTO1lBQzFCLHdCQUF3QjtZQUN4QixDQUFDLEtB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Q0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7UUFDNUQsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUM7SUFFckIsTUFBTSxNQUFNLEdBQUcsSUFBSSxRQUFRLEVBQUUsQ0FBQztJQUM5QixJQUFJLFVBQVUsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksVUFBVSxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQzNELE9BQU8sR0FBRyxVQUFVLEdBQUcsQ0FBQztJQUMxQixDQUFDO0lBRUQsT0FBTyxHQUFHLFVBQVUsR0FBRyxNQUFNLEdBQUcsQ0FBQztBQUNuQyxDQUFDO0FBdEJELDhFQXNCQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHJvdXRlNTNSZWNvcmQgfSBmcm9tIFwiQGNka3RmL3Byb3ZpZGVyLWF3c1wiO1xuaW1wb3J0IHsgVG9rZW4gfSBmcm9tIFwiY2RrdGZcIjtcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG4vLyBpbXBvcnQgeyBHZW9Mb2NhdGlvbiB9IGZyb20gXCIuL2dlby1sb2NhdGlvblwiO1xuaW1wb3J0IHsgSURuc1pvbmUsIElBbGlhc1JlY29yZFRhcmdldCB9IGZyb20gXCIuXCI7XG5pbXBvcnQgeyBJQXdzQ29uc3RydWN0LCBBd3NDb25zdHJ1Y3RQcm9wcywgQXdzQ29uc3RydWN0QmFzZSB9IGZyb20gXCIuLi9cIjtcbmltcG9ydCB7IER1cmF0aW9uIH0gZnJvbSBcIi4uLy4uXCI7XG5cbi8vIHJlZjogaHR0cHM6Ly9naXRodWIuY29tL2F3cy9hd3MtY2RrL2Jsb2IvdjIuMTU2LjAvcGFja2FnZXMvYXdzLWNkay1saWIvYXdzLXJvdXRlNTMvbGliL3JlY29yZC1zZXQudHNcblxuLyoqXG4gKiBPcHRpb25zIGZvciBhIFJlY29yZFNldC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZWNvcmRTZXRPcHRpb25zIHtcbiAgLyoqXG4gICAqIFRoZSBob3N0ZWQgem9uZSBpbiB3aGljaCB0byBkZWZpbmUgdGhlIG5ldyByZWNvcmQuXG4gICAqL1xuICByZWFkb25seSB6b25lOiBJRG5zWm9uZTtcblxuICAvKipcbiAgICogVGhlIHN1YmRvbWFpbiBuYW1lIGZvciB0aGlzIHJlY29yZC4gVGhpcyBzaG91bGQgYmUgcmVsYXRpdmUgdG8gdGhlIHpvbmUgcm9vdCBuYW1lLlxuICAgKlxuICAgKiBGb3IgZXhhbXBsZSwgaWYgeW91IHdhbnQgdG8gY3JlYXRlIGEgcmVjb3JkIGZvciBhY21lLmV4YW1wbGUuY29tLCBzcGVjaWZ5XG4gICAqIFwiYWNtZVwiLlxuICAgKlxuICAgKiBZb3UgY2FuIGFsc28gc3BlY2lmeSB0aGUgZnVsbHkgcXVhbGlmaWVkIGRvbWFpbiBuYW1lIHdoaWNoIHRlcm1pbmF0ZXMgd2l0aCBhXG4gICAqIFwiLlwiLiBGb3IgZXhhbXBsZSwgXCJhY21lLmV4YW1wbGUuY29tLlwiLlxuICAgKlxuICAgKiBAZGVmYXVsdCB6b25lIHJvb3RcbiAgICovXG4gIHJlYWRvbmx5IHJlY29yZE5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSByZXNvdXJjZSByZWNvcmQgY2FjaGUgdGltZSB0byBsaXZlIChUVEwpLlxuICAgKlxuICAgKiBAZGVmYXVsdCBEdXJhdGlvbi5taW51dGVzKDMwKVxuICAgKi9cbiAgcmVhZG9ubHkgdHRsPzogRHVyYXRpb247XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gZGVsZXRlIHRoZSBzYW1lIHJlY29yZCBzZXQgaW4gdGhlIGhvc3RlZCB6b25lIGlmIGl0IGFscmVhZHkgZXhpc3RzIChkYW5nZXJvdXMhKVxuICAgKlxuICAgKiBUaGlzIGFsbG93cyB0byBkZXBsb3kgYSBuZXcgcmVjb3JkIHNldCB3aGlsZSBtaW5pbWl6aW5nIHRoZSBkb3dudGltZSBiZWNhdXNlIHRoZVxuICAgKiBuZXcgcmVjb3JkIHNldCB3aWxsIGJlIGNyZWF0ZWQgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlIGV4aXN0aW5nIG9uZSBpcyBkZWxldGVkLiBJdFxuICAgKiBhbHNvIGF2b2lkcyBcIm1hbnVhbFwiIGFjdGlvbnMgdG8gZGVsZXRlIGV4aXN0aW5nIHJlY29yZCBzZXRzLlxuICAgKlxuICAgKiA+ICoqTi5CLjoqKiB0aGlzIGZlYXR1cmUgaXMgZGFuZ2Vyb3VzLCB1c2Ugd2l0aCBjYXV0aW9uIVxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgYWxsb3dPdmVyd3JpdGU/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBBbW9uZyByZXNvdXJjZSByZWNvcmQgc2V0cyB0aGF0IGhhdmUgdGhlIHNhbWUgY29tYmluYXRpb24gb2YgRE5TIG5hbWUgYW5kIHR5cGUsXG4gICAqIGEgdmFsdWUgdGhhdCBkZXRlcm1pbmVzIHRoZSBwcm9wb3J0aW9uIG9mIEROUyBxdWVyaWVzIHRoYXQgQW1hem9uIFJvdXRlIDUzIHJlc3BvbmRzIHRvIHVzaW5nIHRoZSBjdXJyZW50IHJlc291cmNlIHJlY29yZCBzZXQuXG4gICAqXG4gICAqIFJvdXRlIDUzIGNhbGN1bGF0ZXMgdGhlIHN1bSBvZiB0aGUgd2VpZ2h0cyBmb3IgdGhlIHJlc291cmNlIHJlY29yZCBzZXRzIHRoYXQgaGF2ZSB0aGUgc2FtZSBjb21iaW5hdGlvbiBvZiBETlMgbmFtZSBhbmQgdHlwZS5cbiAgICogUm91dGUgNTMgdGhlbiByZXNwb25kcyB0byBxdWVyaWVzIGJhc2VkIG9uIHRoZSByYXRpbyBvZiBhIHJlc291cmNlJ3Mgd2VpZ2h0IHRvIHRoZSB0b3RhbC5cbiAgICpcbiAgICogVGhpcyB2YWx1ZSBjYW4gYmUgYSBudW1iZXIgYmV0d2VlbiAwIGFuZCAyNTUuXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL1JvdXRlNTMvbGF0ZXN0L0RldmVsb3Blckd1aWRlL3JvdXRpbmctcG9saWN5LXdlaWdodGVkLmh0bWxcbiAgICpcbiAgICogQGRlZmF1bHQgLSBEbyBub3Qgc2V0IHdlaWdodGVkIHJvdXRpbmdcbiAgICovXG4gIHJlYWRvbmx5IHdlaWdodD86IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIEFtYXpvbiBFQzIgUmVnaW9uIHdoZXJlIHlvdSBjcmVhdGVkIHRoZSByZXNvdXJjZSB0aGF0IHRoaXMgcmVzb3VyY2UgcmVjb3JkIHNldCByZWZlcnMgdG8uXG4gICAqIFRoZSByZXNvdXJjZSB0eXBpY2FsbHkgaXMgYW4gQVdTIHJlc291cmNlLCBzdWNoIGFzIGFuIEVDMiBpbnN0YW5jZSBvciBhbiBFTEIgbG9hZCBiYWxhbmNlcixcbiAgICogYW5kIGlzIHJlZmVycmVkIHRvIGJ5IGFuIElQIGFkZHJlc3Mgb3IgYSBETlMgZG9tYWluIG5hbWUsIGRlcGVuZGluZyBvbiB0aGUgcmVjb3JkIHR5cGUuXG4gICAqXG4gICAqIFdoZW4gQW1hem9uIFJvdXRlIDUzIHJlY2VpdmVzIGEgRE5TIHF1ZXJ5IGZvciBhIGRvbWFpbiBuYW1lIGFuZCB0eXBlIGZvciB3aGljaCB5b3UgaGF2ZSBjcmVhdGVkIGxhdGVuY3kgcmVzb3VyY2UgcmVjb3JkIHNldHMsXG4gICAqIFJvdXRlIDUzIHNlbGVjdHMgdGhlIGxhdGVuY3kgcmVzb3VyY2UgcmVjb3JkIHNldCB0aGF0IGhhcyB0aGUgbG93ZXN0IGxhdGVuY3kgYmV0d2VlbiB0aGUgZW5kIHVzZXIgYW5kIHRoZSBhc3NvY2lhdGVkIEFtYXpvbiBFQzIgUmVnaW9uLlxuICAgKiBSb3V0ZSA1MyB0aGVuIHJldHVybnMgdGhlIHZhbHVlIHRoYXQgaXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBzZWxlY3RlZCByZXNvdXJjZSByZWNvcmQgc2V0LlxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVXNlckd1aWRlL2F3cy1yZXNvdXJjZS1yb3V0ZTUzLXJlY29yZHNldC5odG1sI2Nmbi1yb3V0ZTUzLXJlY29yZHNldC1yZWdpb25cbiAgICpcbiAgICogQGRlZmF1bHQgLSBEbyBub3Qgc2V0IGxhdGVuY3kgYmFzZWQgcm91dGluZ1xuICAgKi9cbiAgcmVhZG9ubHkgcmVnaW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIHJldHVybiBtdWx0aXBsZSB2YWx1ZXMsIHN1Y2ggYXMgSVAgYWRkcmVzc2VzIGZvciB5b3VyIHdlYiBzZXJ2ZXJzLCBpbiByZXNwb25zZSB0byBETlMgcXVlcmllcy5cbiAgICogU2V0IHRvIHRydWUgdG8gaW5kaWNhdGUgYSBtdWx0aXZhbHVlIGFuc3dlciByb3V0aW5nIHBvbGljeS4gQ29uZmxpY3RzIHdpdGggYW55IG90aGVyIHJvdXRpbmcgcG9saWN5LlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgbXVsdGlWYWx1ZUFuc3dlcj86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEEgc3RyaW5nIHVzZWQgdG8gZGlzdGluZ3Vpc2ggYmV0d2VlbiBkaWZmZXJlbnQgcmVjb3JkcyB3aXRoIHRoZSBzYW1lIGNvbWJpbmF0aW9uIG9mIEROUyBuYW1lIGFuZCB0eXBlLlxuICAgKiBJdCBjYW4gb25seSBiZSBzZXQgd2hlbiBlaXRoZXIgd2VpZ2h0IG9yIGdlb0xvY2F0aW9uIGlzIGRlZmluZWQuXG4gICAqXG4gICAqIFRoaXMgcGFyYW1ldGVyIG11c3QgYmUgYmV0d2VlbiAxIGFuZCAxMjggY2hhcmFjdGVycyBpbiBsZW5ndGguXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gQXV0byBnZW5lcmF0ZWQgc3RyaW5nXG4gICAqL1xuICByZWFkb25seSBzZXRJZGVudGlmaWVyPzogc3RyaW5nO1xuXG4gIC8vIFI1MyByZWNvcmQgY29tbWVudCBpcyBoYXJkY29kZWQgZm9yIHRlcnJhZm9ybS1wcm92aWRlci1hd3NcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2hhc2hpY29ycC90ZXJyYWZvcm0tcHJvdmlkZXItYXdzL2Jsb2IvdjUuNjguMC9pbnRlcm5hbC9zZXJ2aWNlL3JvdXRlNTMvcmVjb3JkLmdvI0wzNjNcbiAgLy8gLyoqXG4gIC8vICAqIEEgY29tbWVudCB0byBhZGQgb24gdGhlIHJlY29yZC5cbiAgLy8gICpcbiAgLy8gICogQGRlZmF1bHQgXCJNYW5hZ2VkIGJ5IFRlcnJhZm9ybVwiXG4gIC8vICAqL1xuICAvLyByZWFkb25seSBjb21tZW50Pzogc3RyaW5nO1xufVxuXG4vKipcbiAqIENvbnN0cnVjdGlvbiBwcm9wZXJ0aWVzIGZvciBhIFJlY29yZFNldC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZWNvcmRTZXRQcm9wcyBleHRlbmRzIFJlY29yZFNldE9wdGlvbnMsIEF3c0NvbnN0cnVjdFByb3BzIHtcbiAgLyoqXG4gICAqIFRoZSByZWNvcmQgdHlwZS5cbiAgICovXG4gIHJlYWRvbmx5IHJlY29yZFR5cGU6IFJlY29yZFR5cGU7XG5cbiAgLyoqXG4gICAqIFRoZSB0YXJnZXQgZm9yIHRoaXMgcmVjb3JkLCBlaXRoZXIgYFJlY29yZFRhcmdldC5mcm9tVmFsdWVzKClgIG9yXG4gICAqIGBSZWNvcmRUYXJnZXQuZnJvbUFsaWFzKClgLlxuICAgKi9cbiAgcmVhZG9ubHkgdGFyZ2V0OiBSZWNvcmRUYXJnZXQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVjb3JkU2V0T3V0cHV0cyB7XG4gIC8qKlxuICAgKiBUaGUgZG9tYWluIG5hbWUgb2YgdGhlIHJlY29yZFxuICAgKi9cbiAgcmVhZG9ubHkgZG9tYWluTmFtZTogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIEZRRE5bZnFuXSBidWlsdCB1c2luZyB0aGUgem9uZSBkb21haW4gYW5kIG5hbWVcbiAgICpcbiAgICogW2Zxbl06IGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0Z1bGx5X3F1YWxpZmllZF9kb21haW5fbmFtZVxuICAgKi9cbiAgcmVhZG9ubHkgZnFkbjogc3RyaW5nO1xufVxuXG4vKipcbiAqIEEgcmVjb3JkIHNldCBBdHRyaWJ1dGVzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSVJlY29yZFNldCBleHRlbmRzIElBd3NDb25zdHJ1Y3Qge1xuICAvKiogU3Ryb25nbHkgdHlwZWQgb3V0cHV0cyAqL1xuICByZWFkb25seSByZWNvcmRTZXRPdXRwdXRzOiBSZWNvcmRTZXRPdXRwdXRzO1xuXG4gIC8qKlxuICAgKiBUaGUgZG9tYWluIG5hbWUgb2YgdGhlIHJlY29yZFxuICAgKi9cbiAgcmVhZG9ubHkgZG9tYWluTmFtZTogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIFtGUUROXVtmcWRuXSBidWlsdCB1c2luZyB0aGUgem9uZSBkb21haW4gYW5kIG5hbWVcbiAgICpcbiAgICogW2ZxZG5dOiBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9GdWxseV9xdWFsaWZpZWRfZG9tYWluX25hbWVcbiAgICovXG4gIHJlYWRvbmx5IGZxZG46IHN0cmluZztcbn1cblxuLyoqXG4gKiBBIHJlY29yZCBzZXQuXG4gKi9cbmV4cG9ydCBjbGFzcyBSZWNvcmRTZXQgZXh0ZW5kcyBBd3NDb25zdHJ1Y3RCYXNlIGltcGxlbWVudHMgSVJlY29yZFNldCB7XG4gIHB1YmxpYyByZWFkb25seSByZXNvdXJjZTogcm91dGU1M1JlY29yZC5Sb3V0ZTUzUmVjb3JkO1xuICBwcml2YXRlIHJlYWRvbmx5IF9vdXRwdXRzOiBSZWNvcmRTZXRPdXRwdXRzO1xuICBwdWJsaWMgZ2V0IHJlY29yZFNldE91dHB1dHMoKTogUmVjb3JkU2V0T3V0cHV0cyB7XG4gICAgcmV0dXJuIHRoaXMuX291dHB1dHM7XG4gIH1cbiAgcHVibGljIGdldCBvdXRwdXRzKCk6IFJlY29yZDxzdHJpbmcsIGFueT4ge1xuICAgIHJldHVybiB0aGlzLnJlY29yZFNldE91dHB1dHM7XG4gIH1cbiAgcHVibGljIHJlYWRvbmx5IGRvbWFpbk5hbWU6IHN0cmluZztcbiAgcHVibGljIHJlYWRvbmx5IGZxZG46IHN0cmluZztcbiAgLy8gcHJpdmF0ZSByZWFkb25seSBnZW9Mb2NhdGlvbj86IEdlb0xvY2F0aW9uO1xuICBwcml2YXRlIHJlYWRvbmx5IHdlaWdodD86IG51bWJlcjtcbiAgcHJpdmF0ZSByZWFkb25seSByZWdpb24/OiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgbXVsdGlWYWx1ZUFuc3dlcj86IGJvb2xlYW47XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IFJlY29yZFNldFByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCBwcm9wcyk7XG5cbiAgICBpZiAocHJvcHMud2VpZ2h0ICYmIChwcm9wcy53ZWlnaHQgPCAwIHx8IHByb3BzLndlaWdodCA+IDI1NSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYHdlaWdodCBtdXN0IGJlIGJldHdlZW4gMCBhbmQgMjU1IGluY2x1c2l2ZSwgZ290OiAke3Byb3BzLndlaWdodH1gLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKFxuICAgICAgcHJvcHMuc2V0SWRlbnRpZmllciAmJlxuICAgICAgKHByb3BzLnNldElkZW50aWZpZXIubGVuZ3RoIDwgMSB8fCBwcm9wcy5zZXRJZGVudGlmaWVyLmxlbmd0aCA+IDEyOClcbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYHNldElkZW50aWZpZXIgbXVzdCBiZSBiZXR3ZWVuIDEgYW5kIDEyOCBjaGFyYWN0ZXJzIGxvbmcsIGdvdDogJHtwcm9wcy5zZXRJZGVudGlmaWVyLmxlbmd0aH1gLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKFxuICAgICAgcHJvcHMuc2V0SWRlbnRpZmllciAmJlxuICAgICAgcHJvcHMud2VpZ2h0ID09PSB1bmRlZmluZWQgJiZcbiAgICAgIC8vICFwcm9wcy5nZW9Mb2NhdGlvbiAmJlxuICAgICAgIXByb3BzLnJlZ2lvbiAmJlxuICAgICAgIXByb3BzLm11bHRpVmFsdWVBbnN3ZXJcbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJzZXRJZGVudGlmaWVyIGNhbiBvbmx5IGJlIHNwZWNpZmllZCBmb3Igbm9uLXNpbXBsZSByb3V0aW5nIHBvbGljaWVzXCIsXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAocHJvcHMubXVsdGlWYWx1ZUFuc3dlciAmJiBwcm9wcy50YXJnZXQuYWxpYXNUYXJnZXQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIm11bHRpVmFsdWVBbnN3ZXIgY2Fubm90IGJlIHNwZWNpZmllZCBmb3IgYWxpYXMgcmVjb3JkXCIpO1xuICAgIH1cblxuICAgIGNvbnN0IG5vblNpbXBsZVJvdXRpbmdQb2xpY2llcyA9IFtcbiAgICAgIC8vIHByb3BzLmdlb0xvY2F0aW9uLFxuICAgICAgcHJvcHMucmVnaW9uLFxuICAgICAgcHJvcHMud2VpZ2h0LFxuICAgICAgcHJvcHMubXVsdGlWYWx1ZUFuc3dlcixcbiAgICBdLmZpbHRlcigodmFyaWFibGUpID0+IHZhcmlhYmxlICE9PSB1bmRlZmluZWQpLmxlbmd0aDtcbiAgICBpZiAobm9uU2ltcGxlUm91dGluZ1BvbGljaWVzID4gMSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBcIk9ubHkgb25lIG9mIHJlZ2lvbiwgd2VpZ2h0LCBtdWx0aVZhbHVlQW5zd2VyIG9yIGdlb0xvY2F0aW9uIGNhbiBiZSBkZWZpbmVkXCIsXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIHRoaXMuZ2VvTG9jYXRpb24gPSBwcm9wcy5nZW9Mb2NhdGlvbjtcbiAgICB0aGlzLndlaWdodCA9IHByb3BzLndlaWdodDtcbiAgICB0aGlzLnJlZ2lvbiA9IHByb3BzLnJlZ2lvbjtcbiAgICB0aGlzLm11bHRpVmFsdWVBbnN3ZXIgPSBwcm9wcy5tdWx0aVZhbHVlQW5zd2VyO1xuXG4gICAgY29uc3QgdHRsID0gcHJvcHMudGFyZ2V0LmFsaWFzVGFyZ2V0XG4gICAgICA/IHVuZGVmaW5lZFxuICAgICAgOiAoKHByb3BzLnR0bCAmJiBwcm9wcy50dGwudG9TZWNvbmRzKCkpID8/IDE4MDApO1xuXG4gICAgY29uc3QgcmVjb3JkTmFtZSA9IGRldGVybWluZUZ1bGx5UXVhbGlmaWVkRG9tYWluTmFtZShcbiAgICAgIHByb3BzLnpvbmUsXG4gICAgICBwcm9wcy5yZWNvcmROYW1lLFxuICAgICk7XG5cbiAgICB0aGlzLnJlc291cmNlID0gbmV3IHJvdXRlNTNSZWNvcmQuUm91dGU1M1JlY29yZCh0aGlzLCBcIlJlc291cmNlXCIsIHtcbiAgICAgIC4uLnByb3BzLCAvLyBjb3B5IGFsbCBNZXRhQXJndW1lbnRzXG4gICAgICB6b25lSWQ6IHByb3BzLnpvbmUuem9uZUlkLFxuICAgICAgbmFtZTogcmVjb3JkTmFtZSxcbiAgICAgIHR5cGU6IHByb3BzLnJlY29yZFR5cGUsXG4gICAgICByZWNvcmRzOiBwcm9wcy50YXJnZXQudmFsdWVzLFxuICAgICAgYWxpYXM6XG4gICAgICAgIHByb3BzLnRhcmdldC5hbGlhc1RhcmdldCAmJlxuICAgICAgICBwcm9wcy50YXJnZXQuYWxpYXNUYXJnZXQuYmluZCh0aGlzLCBwcm9wcy56b25lKSxcbiAgICAgIHR0bCxcbiAgICAgIHNldElkZW50aWZpZXI6IHByb3BzLnNldElkZW50aWZpZXIgPz8gdGhpcy5jb25maWd1cmVTZXRJZGVudGlmaWVyKCksXG4gICAgICAvLyBnZW9Mb2NhdGlvbjogcHJvcHMuZ2VvTG9jYXRpb25cbiAgICAgIC8vICAgPyB7XG4gICAgICAvLyAgICAgICBjb250aW5lbnRDb2RlOiBwcm9wcy5nZW9Mb2NhdGlvbi5jb250aW5lbnRDb2RlLFxuICAgICAgLy8gICAgICAgY291bnRyeUNvZGU6IHByb3BzLmdlb0xvY2F0aW9uLmNvdW50cnlDb2RlLFxuICAgICAgLy8gICAgICAgc3ViZGl2aXNpb25Db2RlOiBwcm9wcy5nZW9Mb2NhdGlvbi5zdWJkaXZpc2lvbkNvZGUsXG4gICAgICAvLyAgICAgfVxuICAgICAgLy8gICA6IHVuZGVmaW5lZCxcbiAgICAgIG11bHRpdmFsdWVBbnN3ZXJSb3V0aW5nUG9saWN5OiBwcm9wcy5tdWx0aVZhbHVlQW5zd2VyLFxuICAgICAgd2VpZ2h0ZWRSb3V0aW5nUG9saWN5OiBwcm9wcy53ZWlnaHRcbiAgICAgICAgPyB7XG4gICAgICAgICAgICB3ZWlnaHQ6IHByb3BzLndlaWdodCxcbiAgICAgICAgICB9XG4gICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgbGF0ZW5jeVJvdXRpbmdQb2xpY3k6IHByb3BzLnJlZ2lvblxuICAgICAgICA/IHtcbiAgICAgICAgICAgIHJlZ2lvbjogcHJvcHMucmVnaW9uLFxuICAgICAgICAgIH1cbiAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICBhbGxvd092ZXJ3cml0ZTogcHJvcHMuYWxsb3dPdmVyd3JpdGUsXG4gICAgfSk7XG5cbiAgICB0aGlzLmZxZG4gPSB0aGlzLnJlc291cmNlLmZxZG47XG4gICAgdGhpcy5kb21haW5OYW1lID0gdGhpcy5yZXNvdXJjZS5uYW1lO1xuICAgIHRoaXMuX291dHB1dHMgPSB7XG4gICAgICBkb21haW5OYW1lOiB0aGlzLmRvbWFpbk5hbWUsXG4gICAgICBmcWRuOiB0aGlzLmZxZG4sXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgY29uZmlndXJlU2V0SWRlbnRpZmllcigpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIC8vIGlmICh0aGlzLmdlb0xvY2F0aW9uKSB7XG4gICAgLy8gICBsZXQgaWRlbnRpZmllciA9IFwiR0VPXCI7XG4gICAgLy8gICBpZiAodGhpcy5nZW9Mb2NhdGlvbi5jb250aW5lbnRDb2RlKSB7XG4gICAgLy8gICAgIGlkZW50aWZpZXIgPSBpZGVudGlmaWVyLmNvbmNhdChcbiAgICAvLyAgICAgICBcIl9DT05USU5FTlRfXCIsXG4gICAgLy8gICAgICAgdGhpcy5nZW9Mb2NhdGlvbi5jb250aW5lbnRDb2RlLFxuICAgIC8vICAgICApO1xuICAgIC8vICAgfVxuICAgIC8vICAgaWYgKHRoaXMuZ2VvTG9jYXRpb24uY291bnRyeUNvZGUpIHtcbiAgICAvLyAgICAgaWRlbnRpZmllciA9IGlkZW50aWZpZXIuY29uY2F0KFxuICAgIC8vICAgICAgIFwiX0NPVU5UUllfXCIsXG4gICAgLy8gICAgICAgdGhpcy5nZW9Mb2NhdGlvbi5jb3VudHJ5Q29kZSxcbiAgICAvLyAgICAgKTtcbiAgICAvLyAgIH1cbiAgICAvLyAgIGlmICh0aGlzLmdlb0xvY2F0aW9uLnN1YmRpdmlzaW9uQ29kZSkge1xuICAgIC8vICAgICBpZGVudGlmaWVyID0gaWRlbnRpZmllci5jb25jYXQoXG4gICAgLy8gICAgICAgXCJfU1VCRElWSVNJT05fXCIsXG4gICAgLy8gICAgICAgdGhpcy5nZW9Mb2NhdGlvbi5zdWJkaXZpc2lvbkNvZGUsXG4gICAgLy8gICAgICk7XG4gICAgLy8gICB9XG4gICAgLy8gICByZXR1cm4gaWRlbnRpZmllcjtcbiAgICAvLyB9XG5cbiAgICBpZiAodGhpcy53ZWlnaHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgaWRQcmVmaXggPSBgV0VJR0hUXyR7dGhpcy53ZWlnaHR9X0lEX2A7XG4gICAgICByZXR1cm4gdGhpcy5jcmVhdGVJZGVudGlmaWVyKGlkUHJlZml4KTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5yZWdpb24pIHtcbiAgICAgIGNvbnN0IGlkUHJlZml4ID0gYFJFR0lPTl8ke3RoaXMucmVnaW9ufV9JRF9gO1xuICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlSWRlbnRpZmllcihpZFByZWZpeCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMubXVsdGlWYWx1ZUFuc3dlcikge1xuICAgICAgY29uc3QgaWRQcmVmaXggPSBcIk1WQV9JRF9cIjtcbiAgICAgIHJldHVybiB0aGlzLmNyZWF0ZUlkZW50aWZpZXIoaWRQcmVmaXgpO1xuICAgIH1cblxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUlkZW50aWZpZXIocHJlZml4OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnN0YWNrLnVuaXF1ZVJlc291cmNlTmFtZSh0aGlzLCB7IG1heExlbmd0aDogNjQsIHByZWZpeCB9KTtcbiAgfVxufVxuXG4vKipcbiAqIFRoZSByZWNvcmQgdHlwZS5cbiAqL1xuZXhwb3J0IGVudW0gUmVjb3JkVHlwZSB7XG4gIC8qKlxuICAgKiByb3V0ZSB0cmFmZmljIHRvIGEgcmVzb3VyY2UsIHN1Y2ggYXMgYSB3ZWIgc2VydmVyLCB1c2luZyBhbiBJUHY0IGFkZHJlc3MgaW4gZG90dGVkIGRlY2ltYWxcbiAgICogbm90YXRpb25cbiAgICpcbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vUm91dGU1My9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvUmVzb3VyY2VSZWNvcmRUeXBlcy5odG1sI0FGb3JtYXRcbiAgICovXG4gIEEgPSBcIkFcIixcblxuICAvKipcbiAgICogcm91dGUgdHJhZmZpYyB0byBhIHJlc291cmNlLCBzdWNoIGFzIGEgd2ViIHNlcnZlciwgdXNpbmcgYW4gSVB2NiBhZGRyZXNzIGluIGNvbG9uLXNlcGFyYXRlZFxuICAgKiBoZXhhZGVjaW1hbCBmb3JtYXRcbiAgICpcbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vUm91dGU1My9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvUmVzb3VyY2VSZWNvcmRUeXBlcy5odG1sI0FBQUFGb3JtYXRcbiAgICovXG4gIEFBQUEgPSBcIkFBQUFcIixcblxuICAvKipcbiAgICogQSBDQUEgcmVjb3JkIHNwZWNpZmllcyB3aGljaCBjZXJ0aWZpY2F0ZSBhdXRob3JpdGllcyAoQ0FzKSBhcmUgYWxsb3dlZCB0byBpc3N1ZSBjZXJ0aWZpY2F0ZXNcbiAgICogZm9yIGEgZG9tYWluIG9yIHN1YmRvbWFpblxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9Sb3V0ZTUzL2xhdGVzdC9EZXZlbG9wZXJHdWlkZS9SZXNvdXJjZVJlY29yZFR5cGVzLmh0bWwjQ0FBRm9ybWF0XG4gICAqL1xuICBDQUEgPSBcIkNBQVwiLFxuXG4gIC8qKlxuICAgKiBBIENOQU1FIHJlY29yZCBtYXBzIEROUyBxdWVyaWVzIGZvciB0aGUgbmFtZSBvZiB0aGUgY3VycmVudCByZWNvcmQsIHN1Y2ggYXMgYWNtZS5leGFtcGxlLmNvbSxcbiAgICogdG8gYW5vdGhlciBkb21haW4gKGV4YW1wbGUuY29tIG9yIGV4YW1wbGUubmV0KSBvciBzdWJkb21haW4gKGFjbWUuZXhhbXBsZS5jb20gb3IgemVuaXRoLmV4YW1wbGUub3JnKS5cbiAgICpcbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vUm91dGU1My9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvUmVzb3VyY2VSZWNvcmRUeXBlcy5odG1sI0NOQU1FRm9ybWF0XG4gICAqL1xuICBDTkFNRSA9IFwiQ05BTUVcIixcblxuICAvKipcbiAgICogQSBkZWxlZ2F0aW9uIHNpZ25lciAoRFMpIHJlY29yZCByZWZlcnMgYSB6b25lIGtleSBmb3IgYSBkZWxlZ2F0ZWQgc3ViZG9tYWluIHpvbmUuXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL1JvdXRlNTMvbGF0ZXN0L0RldmVsb3Blckd1aWRlL1Jlc291cmNlUmVjb3JkVHlwZXMuaHRtbCNEU0Zvcm1hdFxuICAgKi9cbiAgRFMgPSBcIkRTXCIsXG5cbiAgLyoqXG4gICAqIEFuIE1YIHJlY29yZCBzcGVjaWZpZXMgdGhlIG5hbWVzIG9mIHlvdXIgbWFpbCBzZXJ2ZXJzIGFuZCwgaWYgeW91IGhhdmUgdHdvIG9yIG1vcmUgbWFpbCBzZXJ2ZXJzLFxuICAgKiB0aGUgcHJpb3JpdHkgb3JkZXIuXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL1JvdXRlNTMvbGF0ZXN0L0RldmVsb3Blckd1aWRlL1Jlc291cmNlUmVjb3JkVHlwZXMuaHRtbCNNWEZvcm1hdFxuICAgKi9cbiAgTVggPSBcIk1YXCIsXG5cbiAgLyoqXG4gICAqIEEgTmFtZSBBdXRob3JpdHkgUG9pbnRlciAoTkFQVFIpIGlzIGEgdHlwZSBvZiByZWNvcmQgdGhhdCBpcyB1c2VkIGJ5IER5bmFtaWMgRGVsZWdhdGlvbiBEaXNjb3ZlcnlcbiAgICogU3lzdGVtIChERERTKSBhcHBsaWNhdGlvbnMgdG8gY29udmVydCBvbmUgdmFsdWUgdG8gYW5vdGhlciBvciB0byByZXBsYWNlIG9uZSB2YWx1ZSB3aXRoIGFub3RoZXIuXG4gICAqIEZvciBleGFtcGxlLCBvbmUgY29tbW9uIHVzZSBpcyB0byBjb252ZXJ0IHBob25lIG51bWJlcnMgaW50byBTSVAgVVJJcy5cbiAgICpcbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vUm91dGU1My9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvUmVzb3VyY2VSZWNvcmRUeXBlcy5odG1sI05BUFRSRm9ybWF0XG4gICAqL1xuICBOQVBUUiA9IFwiTkFQVFJcIixcblxuICAvKipcbiAgICogQW4gTlMgcmVjb3JkIGlkZW50aWZpZXMgdGhlIG5hbWUgc2VydmVycyBmb3IgdGhlIGhvc3RlZCB6b25lXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL1JvdXRlNTMvbGF0ZXN0L0RldmVsb3Blckd1aWRlL1Jlc291cmNlUmVjb3JkVHlwZXMuaHRtbCNOU0Zvcm1hdFxuICAgKi9cbiAgTlMgPSBcIk5TXCIsXG5cbiAgLyoqXG4gICAqIEEgUFRSIHJlY29yZCBtYXBzIGFuIElQIGFkZHJlc3MgdG8gdGhlIGNvcnJlc3BvbmRpbmcgZG9tYWluIG5hbWUuXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL1JvdXRlNTMvbGF0ZXN0L0RldmVsb3Blckd1aWRlL1Jlc291cmNlUmVjb3JkVHlwZXMuaHRtbCNQVFJGb3JtYXRcbiAgICovXG4gIFBUUiA9IFwiUFRSXCIsXG5cbiAgLyoqXG4gICAqIEEgc3RhcnQgb2YgYXV0aG9yaXR5IChTT0EpIHJlY29yZCBwcm92aWRlcyBpbmZvcm1hdGlvbiBhYm91dCBhIGRvbWFpbiBhbmQgdGhlIGNvcnJlc3BvbmRpbmcgQW1hem9uXG4gICAqIFJvdXRlIDUzIGhvc3RlZCB6b25lXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL1JvdXRlNTMvbGF0ZXN0L0RldmVsb3Blckd1aWRlL1Jlc291cmNlUmVjb3JkVHlwZXMuaHRtbCNTT0FGb3JtYXRcbiAgICovXG4gIFNPQSA9IFwiU09BXCIsXG5cbiAgLyoqXG4gICAqIFNQRiByZWNvcmRzIHdlcmUgZm9ybWVybHkgdXNlZCB0byB2ZXJpZnkgdGhlIGlkZW50aXR5IG9mIHRoZSBzZW5kZXIgb2YgZW1haWwgbWVzc2FnZXMuXG4gICAqIEluc3RlYWQgb2YgYW4gU1BGIHJlY29yZCwgd2UgcmVjb21tZW5kIHRoYXQgeW91IGNyZWF0ZSBhIFRYVCByZWNvcmQgdGhhdCBjb250YWlucyB0aGUgYXBwbGljYWJsZSB2YWx1ZS5cbiAgICpcbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vUm91dGU1My9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvUmVzb3VyY2VSZWNvcmRUeXBlcy5odG1sI1NQRkZvcm1hdFxuICAgKi9cbiAgU1BGID0gXCJTUEZcIixcblxuICAvKipcbiAgICogQW4gU1JWIHJlY29yZCBWYWx1ZSBlbGVtZW50IGNvbnNpc3RzIG9mIGZvdXIgc3BhY2Utc2VwYXJhdGVkIHZhbHVlcy4gVGhlIGZpcnN0IHRocmVlIHZhbHVlcyBhcmVcbiAgICogZGVjaW1hbCBudW1iZXJzIHJlcHJlc2VudGluZyBwcmlvcml0eSwgd2VpZ2h0LCBhbmQgcG9ydC4gVGhlIGZvdXJ0aCB2YWx1ZSBpcyBhIGRvbWFpbiBuYW1lLlxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9Sb3V0ZTUzL2xhdGVzdC9EZXZlbG9wZXJHdWlkZS9SZXNvdXJjZVJlY29yZFR5cGVzLmh0bWwjU1JWRm9ybWF0XG4gICAqL1xuICBTUlYgPSBcIlNSVlwiLFxuXG4gIC8qKlxuICAgKiBBIFRYVCByZWNvcmQgY29udGFpbnMgb25lIG9yIG1vcmUgc3RyaW5ncyB0aGF0IGFyZSBlbmNsb3NlZCBpbiBkb3VibGUgcXVvdGF0aW9uIG1hcmtzIChcIikuXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL1JvdXRlNTMvbGF0ZXN0L0RldmVsb3Blckd1aWRlL1Jlc291cmNlUmVjb3JkVHlwZXMuaHRtbCNUWFRGb3JtYXRcbiAgICovXG4gIFRYVCA9IFwiVFhUXCIsXG59XG5cbi8qKlxuICogVHlwZSB1bmlvbiBmb3IgYSByZWNvcmQgdGhhdCBhY2NlcHRzIG11bHRpcGxlIHR5cGVzIG9mIHRhcmdldC5cbiAqL1xuZXhwb3J0IGNsYXNzIFJlY29yZFRhcmdldCB7XG4gIC8qKlxuICAgKiBVc2Ugc3RyaW5nIHZhbHVlcyBhcyB0YXJnZXQuXG4gICAqXG4gICAqIFRoZXNlIGNhbiBiZSBJUCBhZGRyZXNzZXMgb3IgZG9tYWluIG5hbWVzLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBmcm9tVmFsdWVzKC4uLnZhbHVlczogc3RyaW5nW10pIHtcbiAgICByZXR1cm4gbmV3IFJlY29yZFRhcmdldCh2YWx1ZXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVzZSBhbiBhbGlhcyBhcyB0YXJnZXQuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGZyb21BbGlhcyhhbGlhc1RhcmdldDogSUFsaWFzUmVjb3JkVGFyZ2V0KSB7XG4gICAgcmV0dXJuIG5ldyBSZWNvcmRUYXJnZXQodW5kZWZpbmVkLCBhbGlhc1RhcmdldCk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHZhbHVlcyBjb3JyZXNwb25kIHdpdGggdGhlIGNob3NlbiByZWNvcmQgdHlwZSAoZS5nLiBmb3IgJ0EnIFR5cGUsIHNwZWNpZnkgb25lIG9yIG1vcmUgSVAgYWRkcmVzc2VzKVxuICAgKiBAcGFyYW0gYWxpYXNUYXJnZXQgYWxpYXMgZm9yIHRhcmdldHMgc3VjaCBhcyBDbG91ZEZyb250IGRpc3RyaWJ1dGlvbiB0byByb3V0ZSB0cmFmZmljIHRvXG4gICAqL1xuICBwcm90ZWN0ZWQgY29uc3RydWN0b3IoXG4gICAgcHVibGljIHJlYWRvbmx5IHZhbHVlcz86IHN0cmluZ1tdLFxuICAgIHB1YmxpYyByZWFkb25seSBhbGlhc1RhcmdldD86IElBbGlhc1JlY29yZFRhcmdldCxcbiAgKSB7fVxufVxuXG4vKipcbiAqIENvbnN0cnVjdGlvbiBwcm9wZXJ0aWVzIGZvciBhIEFSZWNvcmQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQVJlY29yZFByb3BzIGV4dGVuZHMgUmVjb3JkU2V0T3B0aW9ucywgQXdzQ29uc3RydWN0UHJvcHMge1xuICAvKipcbiAgICogVGhlIHRhcmdldC5cbiAgICovXG4gIHJlYWRvbmx5IHRhcmdldDogUmVjb3JkVGFyZ2V0O1xufVxuXG4vKipcbiAqIEEgRE5TIEEgcmVjb3JkXG4gKlxuICogQHJlc291cmNlIGF3c19yb3V0ZTUzX3JlY29yZFxuICovXG5leHBvcnQgY2xhc3MgQVJlY29yZCBleHRlbmRzIFJlY29yZFNldCB7XG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBBUmVjb3JkUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIHtcbiAgICAgIC4uLnByb3BzLFxuICAgICAgcmVjb3JkVHlwZTogUmVjb3JkVHlwZS5BLFxuICAgICAgdGFyZ2V0OiBwcm9wcy50YXJnZXQsXG4gICAgfSk7XG4gIH1cbn1cblxuLyoqXG4gKiBDb25zdHJ1Y3Rpb24gcHJvcGVydGllcyBmb3IgYSBBYWFhUmVjb3JkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFhYWFSZWNvcmRQcm9wcyBleHRlbmRzIFJlY29yZFNldE9wdGlvbnMsIEF3c0NvbnN0cnVjdFByb3BzIHtcbiAgLyoqXG4gICAqIFRoZSB0YXJnZXQuXG4gICAqL1xuICByZWFkb25seSB0YXJnZXQ6IFJlY29yZFRhcmdldDtcbn1cblxuLyoqXG4gKiBBIEROUyBBQUFBIHJlY29yZFxuICpcbiAqIEByZXNvdXJjZSBhd3Nfcm91dGU1M19yZWNvcmRcbiAqL1xuZXhwb3J0IGNsYXNzIEFhYWFSZWNvcmQgZXh0ZW5kcyBSZWNvcmRTZXQge1xuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogQWFhYVJlY29yZFByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCB7XG4gICAgICAuLi5wcm9wcyxcbiAgICAgIHJlY29yZFR5cGU6IFJlY29yZFR5cGUuQUFBQSxcbiAgICAgIHRhcmdldDogcHJvcHMudGFyZ2V0LFxuICAgIH0pO1xuICB9XG59XG5cbi8qKlxuICogQ29uc3RydWN0aW9uIHByb3BlcnRpZXMgZm9yIGEgQ25hbWVSZWNvcmQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ25hbWVSZWNvcmRQcm9wcyBleHRlbmRzIFJlY29yZFNldE9wdGlvbnMge1xuICAvKipcbiAgICogVGhlIGRvbWFpbiBuYW1lIG9mIHRoZSB0YXJnZXQgdGhhdCB0aGlzIHJlY29yZCBzaG91bGQgcG9pbnQgdG8uXG4gICAqL1xuICByZWFkb25seSBkb21haW5OYW1lOiBzdHJpbmc7XG59XG5cbi8qKlxuICogQSBETlMgQ05BTUUgcmVjb3JkXG4gKlxuICogQHJlc291cmNlIGF3c19yb3V0ZTUzX3JlY29yZFxuICovXG5leHBvcnQgY2xhc3MgQ25hbWVSZWNvcmQgZXh0ZW5kcyBSZWNvcmRTZXQge1xuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogQ25hbWVSZWNvcmRQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwge1xuICAgICAgLi4ucHJvcHMsXG4gICAgICByZWNvcmRUeXBlOiBSZWNvcmRUeXBlLkNOQU1FLFxuICAgICAgdGFyZ2V0OiBSZWNvcmRUYXJnZXQuZnJvbVZhbHVlcyhwcm9wcy5kb21haW5OYW1lKSxcbiAgICB9KTtcbiAgfVxufVxuXG4vKipcbiAqIENvbnN0cnVjdGlvbiBwcm9wZXJ0aWVzIGZvciBhIFR4dFJlY29yZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUeHRSZWNvcmRQcm9wcyBleHRlbmRzIFJlY29yZFNldE9wdGlvbnMge1xuICAvKipcbiAgICogVGhlIHRleHQgdmFsdWVzLlxuICAgKi9cbiAgcmVhZG9ubHkgdmFsdWVzOiBzdHJpbmdbXTtcbn1cblxuLyoqXG4gKiBBIEROUyBUWFQgcmVjb3JkXG4gKlxuICogQHJlc291cmNlIGF3c19yb3V0ZTUzX3JlY29yZFxuICovXG5leHBvcnQgY2xhc3MgVHh0UmVjb3JkIGV4dGVuZHMgUmVjb3JkU2V0IHtcbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IFR4dFJlY29yZFByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCB7XG4gICAgICAuLi5wcm9wcyxcbiAgICAgIHJlY29yZFR5cGU6IFJlY29yZFR5cGUuVFhULFxuICAgICAgdGFyZ2V0OiBSZWNvcmRUYXJnZXQuZnJvbVZhbHVlcyguLi5wcm9wcy52YWx1ZXMubWFwKCh2KSA9PiBmb3JtYXRUeHQodikpKSxcbiAgICB9KTtcbiAgfVxufVxuXG4vKipcbiAqIEZvcm1hdHMgYSB0ZXh0IHZhbHVlIGZvciB1c2UgaW4gYSBUWFQgcmVjb3JkXG4gKlxuICogVXNlIGBKU09OLnN0cmluZ2lmeWAgdG8gY29ycmVjdGx5IGVzY2FwZSBhbmQgZW5jbG9zZSBpbiBkb3VibGUgcXVvdGVzIChcIlwiKS5cbiAqXG4gKiBETlMgVFhUIHJlY29yZHMgY2FuIGNvbnRhaW4gdXAgdG8gMjU1IGNoYXJhY3RlcnMgaW4gYSBzaW5nbGUgc3RyaW5nLiBUWFRcbiAqIHJlY29yZCBzdHJpbmdzIG92ZXIgMjU1IGNoYXJhY3RlcnMgbXVzdCBiZSBzcGxpdCBpbnRvIG11bHRpcGxlIHRleHQgc3RyaW5nc1xuICogd2l0aGluIHRoZSBzYW1lIHJlY29yZC5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vYXdzLmFtYXpvbi5jb20vcHJlbWl1bXN1cHBvcnQva25vd2xlZGdlLWNlbnRlci9yb3V0ZTUzLXJlc29sdmUtZGtpbS10ZXh0LXJlY29yZC1lcnJvci9cbiAqL1xuZnVuY3Rpb24gZm9ybWF0VHh0KHN0cmluZzogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgcmVzdWx0ID0gW107XG4gIGxldCBpZHggPSAwO1xuICB3aGlsZSAoaWR4IDwgc3RyaW5nLmxlbmd0aCkge1xuICAgIHJlc3VsdC5wdXNoKHN0cmluZy5zbGljZShpZHgsIChpZHggKz0gMjU1KSkpOyAvLyBjaHVua3Mgb2YgMjU1IGNoYXJhY3RlcnMgbG9uZ1xuICB9XG4gIHJldHVybiByZXN1bHQubWFwKChyKSA9PiBKU09OLnN0cmluZ2lmeShyKSkuam9pbihcIlwiKTtcbn1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciBhIFNSViByZWNvcmQgdmFsdWUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3J2UmVjb3JkVmFsdWUge1xuICAvKipcbiAgICogVGhlIHByaW9yaXR5LlxuICAgKi9cbiAgcmVhZG9ubHkgcHJpb3JpdHk6IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIHdlaWdodC5cbiAgICovXG4gIHJlYWRvbmx5IHdlaWdodDogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgcG9ydC5cbiAgICovXG4gIHJlYWRvbmx5IHBvcnQ6IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIHNlcnZlciBob3N0IG5hbWUuXG4gICAqL1xuICByZWFkb25seSBob3N0TmFtZTogc3RyaW5nO1xufVxuLyoqXG4gKiBDb25zdHJ1Y3Rpb24gcHJvcGVydGllcyBmb3IgYSBTcnZSZWNvcmQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3J2UmVjb3JkUHJvcHMgZXh0ZW5kcyBSZWNvcmRTZXRPcHRpb25zIHtcbiAgLyoqXG4gICAqIFRoZSB2YWx1ZXMuXG4gICAqL1xuICByZWFkb25seSB2YWx1ZXM6IFNydlJlY29yZFZhbHVlW107XG59XG5cbi8qKlxuICogQSBETlMgU1JWIHJlY29yZFxuICpcbiAqIEByZXNvdXJjZSBhd3Nfcm91dGU1M19yZWNvcmRcbiAqL1xuZXhwb3J0IGNsYXNzIFNydlJlY29yZCBleHRlbmRzIFJlY29yZFNldCB7XG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBTcnZSZWNvcmRQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwge1xuICAgICAgLi4ucHJvcHMsXG4gICAgICByZWNvcmRUeXBlOiBSZWNvcmRUeXBlLlNSVixcbiAgICAgIHRhcmdldDogUmVjb3JkVGFyZ2V0LmZyb21WYWx1ZXMoXG4gICAgICAgIC4uLnByb3BzLnZhbHVlcy5tYXAoXG4gICAgICAgICAgKHYpID0+IGAke3YucHJpb3JpdHl9ICR7di53ZWlnaHR9ICR7di5wb3J0fSAke3YuaG9zdE5hbWV9YCxcbiAgICAgICAgKSxcbiAgICAgICksXG4gICAgfSk7XG4gIH1cbn1cblxuLyoqXG4gKiBUaGUgQ0FBIHRhZy5cbiAqL1xuZXhwb3J0IGVudW0gQ2FhVGFnIHtcbiAgLyoqXG4gICAqIEV4cGxpY2l0eSBhdXRob3JpemVzIGEgc2luZ2xlIGNlcnRpZmljYXRlIGF1dGhvcml0eSB0byBpc3N1ZSBhXG4gICAqIGNlcnRpZmljYXRlIChhbnkgdHlwZSkgZm9yIHRoZSBob3N0bmFtZS5cbiAgICovXG4gIElTU1VFID0gXCJpc3N1ZVwiLFxuXG4gIC8qKlxuICAgKiBFeHBsaWNpdHkgYXV0aG9yaXplcyBhIHNpbmdsZSBjZXJ0aWZpY2F0ZSBhdXRob3JpdHkgdG8gaXNzdWUgYVxuICAgKiB3aWxkY2FyZCBjZXJ0aWZpY2F0ZSAoYW5kIG9ubHkgd2lsZGNhcmQpIGZvciB0aGUgaG9zdG5hbWUuXG4gICAqL1xuICBJU1NVRVdJTEQgPSBcImlzc3Vld2lsZFwiLFxuXG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgYSBVUkwgdG8gd2hpY2ggYSBjZXJ0aWZpY2F0ZSBhdXRob3JpdHkgbWF5IHJlcG9ydCBwb2xpY3lcbiAgICogdmlvbGF0aW9ucy5cbiAgICovXG4gIElPREVGID0gXCJpb2RlZlwiLFxufVxuXG4vKipcbiAqIFByb3BlcnRpZXMgZm9yIGEgQ0FBIHJlY29yZCB2YWx1ZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDYWFSZWNvcmRWYWx1ZSB7XG4gIC8qKlxuICAgKiBUaGUgZmxhZy5cbiAgICovXG4gIHJlYWRvbmx5IGZsYWc6IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIHRhZy5cbiAgICovXG4gIHJlYWRvbmx5IHRhZzogQ2FhVGFnO1xuXG4gIC8qKlxuICAgKiBUaGUgdmFsdWUgYXNzb2NpYXRlZCB3aXRoIHRoZSB0YWcuXG4gICAqL1xuICByZWFkb25seSB2YWx1ZTogc3RyaW5nO1xufVxuXG4vKipcbiAqIENvbnN0cnVjdGlvbiBwcm9wZXJ0aWVzIGZvciBhIENhYVJlY29yZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDYWFSZWNvcmRQcm9wcyBleHRlbmRzIFJlY29yZFNldE9wdGlvbnMge1xuICAvKipcbiAgICogVGhlIHZhbHVlcy5cbiAgICovXG4gIHJlYWRvbmx5IHZhbHVlczogQ2FhUmVjb3JkVmFsdWVbXTtcbn1cblxuLyoqXG4gKiBBIEROUyBDQUEgcmVjb3JkXG4gKlxuICogQHJlc291cmNlIGF3c19yb3V0ZTUzX3JlY29yZFxuICovXG5leHBvcnQgY2xhc3MgQ2FhUmVjb3JkIGV4dGVuZHMgUmVjb3JkU2V0IHtcbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IENhYVJlY29yZFByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCB7XG4gICAgICAuLi5wcm9wcyxcbiAgICAgIHJlY29yZFR5cGU6IFJlY29yZFR5cGUuQ0FBLFxuICAgICAgdGFyZ2V0OiBSZWNvcmRUYXJnZXQuZnJvbVZhbHVlcyhcbiAgICAgICAgLi4ucHJvcHMudmFsdWVzLm1hcCgodikgPT4gYCR7di5mbGFnfSAke3YudGFnfSBcIiR7di52YWx1ZX1cImApLFxuICAgICAgKSxcbiAgICB9KTtcbiAgfVxufVxuXG4vKipcbiAqIENvbnN0cnVjdGlvbiBwcm9wZXJ0aWVzIGZvciBhIENhYUFtYXpvblJlY29yZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDYWFBbWF6b25SZWNvcmRQcm9wcyBleHRlbmRzIFJlY29yZFNldE9wdGlvbnMge31cblxuLyoqXG4gKiBBIEROUyBBbWF6b24gQ0FBIHJlY29yZC5cbiAqXG4gKiBBIENBQSByZWNvcmQgdG8gcmVzdHJpY3QgY2VydGlmaWNhdGUgYXV0aG9yaXRpZXMgYWxsb3dlZFxuICogdG8gaXNzdWUgY2VydGlmaWNhdGVzIGZvciBhIGRvbWFpbiB0byBBbWF6b24gb25seS5cbiAqXG4gKiBAcmVzb3VyY2UgYXdzX3JvdXRlNTNfcmVjb3JkXG4gKi9cbmV4cG9ydCBjbGFzcyBDYWFBbWF6b25SZWNvcmQgZXh0ZW5kcyBDYWFSZWNvcmQge1xuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogQ2FhQW1hem9uUmVjb3JkUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIHtcbiAgICAgIC4uLnByb3BzLFxuICAgICAgdmFsdWVzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBmbGFnOiAwLFxuICAgICAgICAgIHRhZzogQ2FhVGFnLklTU1VFLFxuICAgICAgICAgIHZhbHVlOiBcImFtYXpvbi5jb21cIixcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfSk7XG4gIH1cbn1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciBhIE1YIHJlY29yZCB2YWx1ZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBNeFJlY29yZFZhbHVlIHtcbiAgLyoqXG4gICAqIFRoZSBwcmlvcml0eS5cbiAgICovXG4gIHJlYWRvbmx5IHByaW9yaXR5OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBtYWlsIHNlcnZlciBob3N0IG5hbWUuXG4gICAqL1xuICByZWFkb25seSBob3N0TmFtZTogc3RyaW5nO1xufVxuXG4vKipcbiAqIENvbnN0cnVjdGlvbiBwcm9wZXJ0aWVzIGZvciBhIE14UmVjb3JkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE14UmVjb3JkUHJvcHMgZXh0ZW5kcyBSZWNvcmRTZXRPcHRpb25zIHtcbiAgLyoqXG4gICAqIFRoZSB2YWx1ZXMuXG4gICAqL1xuICByZWFkb25seSB2YWx1ZXM6IE14UmVjb3JkVmFsdWVbXTtcbn1cblxuLyoqXG4gKiBBIEROUyBNWCByZWNvcmRcbiAqXG4gKiBAcmVzb3VyY2UgYXdzX3JvdXRlNTNfcmVjb3JkXG4gKi9cbmV4cG9ydCBjbGFzcyBNeFJlY29yZCBleHRlbmRzIFJlY29yZFNldCB7XG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBNeFJlY29yZFByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCB7XG4gICAgICAuLi5wcm9wcyxcbiAgICAgIHJlY29yZFR5cGU6IFJlY29yZFR5cGUuTVgsXG4gICAgICB0YXJnZXQ6IFJlY29yZFRhcmdldC5mcm9tVmFsdWVzKFxuICAgICAgICAuLi5wcm9wcy52YWx1ZXMubWFwKCh2KSA9PiBgJHt2LnByaW9yaXR5fSAke3YuaG9zdE5hbWV9YCksXG4gICAgICApLFxuICAgIH0pO1xuICB9XG59XG5cbi8qKlxuICogQ29uc3RydWN0aW9uIHByb3BlcnRpZXMgZm9yIGEgTlNSZWNvcmQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTnNSZWNvcmRQcm9wcyBleHRlbmRzIFJlY29yZFNldE9wdGlvbnMge1xuICAvKipcbiAgICogVGhlIE5TIHZhbHVlcy5cbiAgICovXG4gIHJlYWRvbmx5IHZhbHVlczogc3RyaW5nW107XG59XG5cbi8qKlxuICogQSBETlMgTlMgcmVjb3JkXG4gKlxuICogQHJlc291cmNlIGF3c19yb3V0ZTUzX3JlY29yZFxuICovXG5leHBvcnQgY2xhc3MgTnNSZWNvcmQgZXh0ZW5kcyBSZWNvcmRTZXQge1xuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogTnNSZWNvcmRQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwge1xuICAgICAgLi4ucHJvcHMsXG4gICAgICByZWNvcmRUeXBlOiBSZWNvcmRUeXBlLk5TLFxuICAgICAgdGFyZ2V0OiBSZWNvcmRUYXJnZXQuZnJvbVZhbHVlcyguLi5wcm9wcy52YWx1ZXMpLFxuICAgIH0pO1xuICB9XG59XG5cbi8qKlxuICogQ29uc3RydWN0aW9uIHByb3BlcnRpZXMgZm9yIGEgRFNSZWNvcmQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRHNSZWNvcmRQcm9wcyBleHRlbmRzIFJlY29yZFNldE9wdGlvbnMge1xuICAvKipcbiAgICogVGhlIERTIHZhbHVlcy5cbiAgICovXG4gIHJlYWRvbmx5IHZhbHVlczogc3RyaW5nW107XG59XG5cbi8qKlxuICogQSBETlMgRFMgcmVjb3JkXG4gKlxuICogQHJlc291cmNlIGF3c19yb3V0ZTUzX3JlY29yZFxuICovXG5leHBvcnQgY2xhc3MgRHNSZWNvcmQgZXh0ZW5kcyBSZWNvcmRTZXQge1xuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogRHNSZWNvcmRQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwge1xuICAgICAgLi4ucHJvcHMsXG4gICAgICByZWNvcmRUeXBlOiBSZWNvcmRUeXBlLkRTLFxuICAgICAgdGFyZ2V0OiBSZWNvcmRUYXJnZXQuZnJvbVZhbHVlcyguLi5wcm9wcy52YWx1ZXMpLFxuICAgIH0pO1xuICB9XG59XG5cbi8qKlxuICogQ29uc3RydWN0aW9uIHByb3BlcnRpZXMgZm9yIGEgWm9uZURlbGVnYXRpb25SZWNvcmRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBab25lRGVsZWdhdGlvblJlY29yZFByb3BzIGV4dGVuZHMgUmVjb3JkU2V0T3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgbmFtZSBzZXJ2ZXJzIHRvIHJlcG9ydCBpbiB0aGUgZGVsZWdhdGlvbiByZWNvcmRzLlxuICAgKi9cbiAgcmVhZG9ubHkgbmFtZVNlcnZlcnM6IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIEEgcmVjb3JkIHRvIGRlbGVnYXRlIGZ1cnRoZXIgbG9va3VwcyB0byBhIGRpZmZlcmVudCBzZXQgb2YgbmFtZSBzZXJ2ZXJzLlxuICovXG5leHBvcnQgY2xhc3MgWm9uZURlbGVnYXRpb25SZWNvcmQgZXh0ZW5kcyBSZWNvcmRTZXQge1xuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogWm9uZURlbGVnYXRpb25SZWNvcmRQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwge1xuICAgICAgLi4ucHJvcHMsXG4gICAgICByZWNvcmRUeXBlOiBSZWNvcmRUeXBlLk5TLFxuICAgICAgdGFyZ2V0OiBSZWNvcmRUYXJnZXQuZnJvbVZhbHVlcyhcbiAgICAgICAgLi4uKFRva2VuLmlzVW5yZXNvbHZlZChwcm9wcy5uYW1lU2VydmVycylcbiAgICAgICAgICA/IHByb3BzLm5hbWVTZXJ2ZXJzIC8vIENhbid0IG1hcCBhIHN0cmluZy1hcnJheSB0b2tlbiFcbiAgICAgICAgICA6IHByb3BzLm5hbWVTZXJ2ZXJzLm1hcCgobnMpID0+XG4gICAgICAgICAgICAgIFRva2VuLmlzVW5yZXNvbHZlZChucykgfHwgbnMuZW5kc1dpdGgoXCIuXCIpID8gbnMgOiBgJHtuc30uYCxcbiAgICAgICAgICAgICkpLFxuICAgICAgKSxcbiAgICAgIHR0bDogcHJvcHMudHRsIHx8IER1cmF0aW9uLmRheXMoMiksXG4gICAgfSk7XG4gIH1cbn1cblxuLy8gcmVmIGh0dHBzOi8vZ2l0aHViLmNvbS9hd3MvYXdzLWNkay9ibG9iL3YyLjE1Ni4wL3BhY2thZ2VzL2F3cy1jZGstbGliL2F3cy1yb3V0ZTUzL2xpYi91dGlsLnRzXG5cbi8qKlxuICogUm91dGU1MyByZXF1aXJlcyB0aGUgcmVjb3JkIG5hbWVzIGFyZSBzcGVjaWZpZWQgYXMgZnVsbHkgcXVhbGlmaWVkIG5hbWVzLCBidXQgdGhpc1xuICogZm9yY2VzIGxvdHMgb2YgcmVkdW5kYW50IHdvcmsgb24gdGhlIHVzZXIgKHJlcGVhdGluZyB0aGUgem9uZSBuYW1lIG92ZXIgYW5kIG92ZXIpLlxuICogVGhpcyBmdW5jdGlvbiBhbGxvd3MgdGhlIHVzZXIgdG8gYmUgbGF6aWVyIGFuZCBvZmZlcnMgYSBuaWNlciBleHBlcmllbmNlLCBieVxuICogcXVhbGlmeWluZyByZWxhdGl2ZSBuYW1lcyBhcHByb3ByaWF0ZWx5OlxuICpcbiAqIEBwYXJhbSBwcm92aWRlZE5hbWUgdGhlIHVzZXItc3BlY2lmaWVkIG5hbWUgb2YgdGhlIHJlY29yZC5cbiAqIEBwYXJhbSBkbnNab25lICAgICAgdGhlIHpvbmUgdGhlIHJlY29yZCB3aWxsIGJlIGNyZWF0ZWQgaW4uXG4gKlxuICogQHJldHVybnMgPHVsPlxuICogICAgICAgIDxsaT5JZiArcHJvdmlkZWROYW1lKyBlbmRzIHdpdGggYSArLissIHVzZSBpdCBhcy1pczwvbGk+XG4gKiAgICAgICAgPGxpPklmICtkbnNab25lLnpvbmVOYW1lKyBpcyBhIHRva2VuLCB1c2UgK3Byb3ZpZGVkTmFtZSsgYXMtaXM8L2xpPlxuICogICAgICAgIDxsaT5JZiArcHJvdmlkZWROYW1lKyBlbmRzIHdpdGggb3IgZXF1YWxzICt6b25lTmFtZSssIGFwcGVuZCBhIHRyYWlsaW5nICsuKzwvbGk+XG4gKiAgICAgICAgPGxpPk90aGVyd2lzZSwgYXBwZW5kICsuKywgK3pvbmVOYW1lKyBhbmQgYSB0cmFpbGluZyArLis8L2xpPlxuICogICAgICA8L3VsPlxuICovXG5leHBvcnQgZnVuY3Rpb24gZGV0ZXJtaW5lRnVsbHlRdWFsaWZpZWREb21haW5OYW1lKFxuICBkbnNab25lOiBJRG5zWm9uZSxcbiAgcmVjb3JkTmFtZT86IHN0cmluZyxcbik6IHN0cmluZyB7XG4gIGlmICghcmVjb3JkTmFtZSkge1xuICAgIHJldHVybiBgJHtkbnNab25lLnpvbmVOYW1lfWA7XG4gIH1cblxuICBpZiAocmVjb3JkTmFtZS5lbmRzV2l0aChcIi5cIikgfHwgVG9rZW4uaXNVbnJlc29sdmVkKGRuc1pvbmUuem9uZU5hbWUpKSB7XG4gICAgcmV0dXJuIHJlY29yZE5hbWU7XG4gIH1cblxuICBjb25zdCB6b25lTmFtZSA9IGRuc1pvbmUuem9uZU5hbWUuZW5kc1dpdGgoXCIuXCIpXG4gICAgPyBkbnNab25lLnpvbmVOYW1lLnN1YnN0cmluZygwLCBkbnNab25lLnpvbmVOYW1lLmxlbmd0aCAtIDEpXG4gICAgOiBkbnNab25lLnpvbmVOYW1lO1xuXG4gIGNvbnN0IHN1ZmZpeCA9IGAuJHt6b25lTmFtZX1gO1xuICBpZiAocmVjb3JkTmFtZS5lbmRzV2l0aChzdWZmaXgpIHx8IHJlY29yZE5hbWUgPT09IHpvbmVOYW1lKSB7XG4gICAgcmV0dXJuIGAke3JlY29yZE5hbWV9LmA7XG4gIH1cblxuICByZXR1cm4gYCR7cmVjb3JkTmFtZX0ke3N1ZmZpeH0uYDtcbn1cbiJdfQ==
532
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG5zLXJlY29yZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hd3MvZWRnZS9kbnMtcmVjb3JkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFxMkJBLDhFQXNCQzs7QUEzM0JELHNEQUFvRDtBQUNwRCxpQ0FBOEI7QUFJOUIsMkJBQXlFO0FBQ3pFLDZCQUFpQztBQXdKakM7O0dBRUc7QUFDSCxNQUFhLFNBQVUsU0FBUSxvQkFBZ0I7SUFHN0MsSUFBVyxnQkFBZ0I7UUFDekIsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDO0lBQ3ZCLENBQUM7SUFDRCxJQUFXLE9BQU87UUFDaEIsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7SUFDL0IsQ0FBQztJQVFELFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBcUI7UUFDN0QsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFFeEIsSUFBSSxLQUFLLENBQUMsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksS0FBSyxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQzdELE1BQU0sSUFBSSxLQUFLLENBQ2Isb0RBQW9ELEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FDbkUsQ0FBQztRQUNKLENBQUM7UUFDRCxJQUNFLEtBQUssQ0FBQyxhQUFhO1lBQ25CLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLEtBQUssQ0FBQyxhQUFhLENBQUMsTUFBTSxHQUFHLEdBQUcsQ0FBQyxFQUNwRSxDQUFDO1lBQ0QsTUFBTSxJQUFJLEtBQUssQ0FDYixpRUFBaUUsS0FBSyxDQUFDLGFBQWEsQ0FBQyxNQUFNLEVBQUUsQ0FDOUYsQ0FBQztRQUNKLENBQUM7UUFDRCxJQUNFLEtBQUssQ0FBQyxhQUFhO1lBQ25CLEtBQUssQ0FBQyxNQUFNLEtBQUssU0FBUztZQUMxQix3QkFB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LENBQUMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1FBQzVELENBQUMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDO0lBRXJCLE1BQU0sTUFBTSxHQUFHLElBQUksUUFBUSxFQUFFLENBQUM7SUFDOUIsSUFBSSxVQUFVLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLFVBQVUsS0FBSyxRQUFRLEVBQUUsQ0FBQztRQUMzRCxPQUFPLEdBQUcsVUFBVSxHQUFHLENBQUM7SUFDMUIsQ0FBQztJQUVELE9BQU8sR0FBRyxVQUFVLEdBQUcsTUFBTSxHQUFHLENBQUM7QUFDbkMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHJvdXRlNTNSZWNvcmQgfSBmcm9tIFwiQGNka3RmL3Byb3ZpZGVyLWF3c1wiO1xuaW1wb3J0IHsgVG9rZW4gfSBmcm9tIFwiY2RrdGZcIjtcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG4vLyBpbXBvcnQgeyBHZW9Mb2NhdGlvbiB9IGZyb20gXCIuL2dlby1sb2NhdGlvblwiO1xuaW1wb3J0IHsgSURuc1pvbmUsIElBbGlhc1JlY29yZFRhcmdldCB9IGZyb20gXCIuXCI7XG5pbXBvcnQgeyBJQXdzQ29uc3RydWN0LCBBd3NDb25zdHJ1Y3RQcm9wcywgQXdzQ29uc3RydWN0QmFzZSB9IGZyb20gXCIuLi9cIjtcbmltcG9ydCB7IER1cmF0aW9uIH0gZnJvbSBcIi4uLy4uXCI7XG5cbi8vIHJlZjogaHR0cHM6Ly9naXRodWIuY29tL2F3cy9hd3MtY2RrL2Jsb2IvdjIuMTU2LjAvcGFja2FnZXMvYXdzLWNkay1saWIvYXdzLXJvdXRlNTMvbGliL3JlY29yZC1zZXQudHNcblxuLyoqXG4gKiBPcHRpb25zIGZvciBhIFJlY29yZFNldC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZWNvcmRTZXRPcHRpb25zIHtcbiAgLyoqXG4gICAqIFRoZSBob3N0ZWQgem9uZSBpbiB3aGljaCB0byBkZWZpbmUgdGhlIG5ldyByZWNvcmQuXG4gICAqL1xuICByZWFkb25seSB6b25lOiBJRG5zWm9uZTtcblxuICAvKipcbiAgICogVGhlIHN1YmRvbWFpbiBuYW1lIGZvciB0aGlzIHJlY29yZC4gVGhpcyBzaG91bGQgYmUgcmVsYXRpdmUgdG8gdGhlIHpvbmUgcm9vdCBuYW1lLlxuICAgKlxuICAgKiBGb3IgZXhhbXBsZSwgaWYgeW91IHdhbnQgdG8gY3JlYXRlIGEgcmVjb3JkIGZvciBhY21lLmV4YW1wbGUuY29tLCBzcGVjaWZ5XG4gICAqIFwiYWNtZVwiLlxuICAgKlxuICAgKiBZb3UgY2FuIGFsc28gc3BlY2lmeSB0aGUgZnVsbHkgcXVhbGlmaWVkIGRvbWFpbiBuYW1lIHdoaWNoIHRlcm1pbmF0ZXMgd2l0aCBhXG4gICAqIFwiLlwiLiBGb3IgZXhhbXBsZSwgXCJhY21lLmV4YW1wbGUuY29tLlwiLlxuICAgKlxuICAgKiBAZGVmYXVsdCB6b25lIHJvb3RcbiAgICovXG4gIHJlYWRvbmx5IHJlY29yZE5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSByZXNvdXJjZSByZWNvcmQgY2FjaGUgdGltZSB0byBsaXZlIChUVEwpLlxuICAgKlxuICAgKiBAZGVmYXVsdCBEdXJhdGlvbi5taW51dGVzKDMwKVxuICAgKi9cbiAgcmVhZG9ubHkgdHRsPzogRHVyYXRpb247XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gZGVsZXRlIHRoZSBzYW1lIHJlY29yZCBzZXQgaW4gdGhlIGhvc3RlZCB6b25lIGlmIGl0IGFscmVhZHkgZXhpc3RzIChkYW5nZXJvdXMhKVxuICAgKlxuICAgKiBUaGlzIGFsbG93cyB0byBkZXBsb3kgYSBuZXcgcmVjb3JkIHNldCB3aGlsZSBtaW5pbWl6aW5nIHRoZSBkb3dudGltZSBiZWNhdXNlIHRoZVxuICAgKiBuZXcgcmVjb3JkIHNldCB3aWxsIGJlIGNyZWF0ZWQgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlIGV4aXN0aW5nIG9uZSBpcyBkZWxldGVkLiBJdFxuICAgKiBhbHNvIGF2b2lkcyBcIm1hbnVhbFwiIGFjdGlvbnMgdG8gZGVsZXRlIGV4aXN0aW5nIHJlY29yZCBzZXRzLlxuICAgKlxuICAgKiA+ICoqTi5CLjoqKiB0aGlzIGZlYXR1cmUgaXMgZGFuZ2Vyb3VzLCB1c2Ugd2l0aCBjYXV0aW9uIVxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgYWxsb3dPdmVyd3JpdGU/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBBbW9uZyByZXNvdXJjZSByZWNvcmQgc2V0cyB0aGF0IGhhdmUgdGhlIHNhbWUgY29tYmluYXRpb24gb2YgRE5TIG5hbWUgYW5kIHR5cGUsXG4gICAqIGEgdmFsdWUgdGhhdCBkZXRlcm1pbmVzIHRoZSBwcm9wb3J0aW9uIG9mIEROUyBxdWVyaWVzIHRoYXQgQW1hem9uIFJvdXRlIDUzIHJlc3BvbmRzIHRvIHVzaW5nIHRoZSBjdXJyZW50IHJlc291cmNlIHJlY29yZCBzZXQuXG4gICAqXG4gICAqIFJvdXRlIDUzIGNhbGN1bGF0ZXMgdGhlIHN1bSBvZiB0aGUgd2VpZ2h0cyBmb3IgdGhlIHJlc291cmNlIHJlY29yZCBzZXRzIHRoYXQgaGF2ZSB0aGUgc2FtZSBjb21iaW5hdGlvbiBvZiBETlMgbmFtZSBhbmQgdHlwZS5cbiAgICogUm91dGUgNTMgdGhlbiByZXNwb25kcyB0byBxdWVyaWVzIGJhc2VkIG9uIHRoZSByYXRpbyBvZiBhIHJlc291cmNlJ3Mgd2VpZ2h0IHRvIHRoZSB0b3RhbC5cbiAgICpcbiAgICogVGhpcyB2YWx1ZSBjYW4gYmUgYSBudW1iZXIgYmV0d2VlbiAwIGFuZCAyNTUuXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL1JvdXRlNTMvbGF0ZXN0L0RldmVsb3Blckd1aWRlL3JvdXRpbmctcG9saWN5LXdlaWdodGVkLmh0bWxcbiAgICpcbiAgICogQGRlZmF1bHQgLSBEbyBub3Qgc2V0IHdlaWdodGVkIHJvdXRpbmdcbiAgICovXG4gIHJlYWRvbmx5IHdlaWdodD86IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIEFtYXpvbiBFQzIgUmVnaW9uIHdoZXJlIHlvdSBjcmVhdGVkIHRoZSByZXNvdXJjZSB0aGF0IHRoaXMgcmVzb3VyY2UgcmVjb3JkIHNldCByZWZlcnMgdG8uXG4gICAqIFRoZSByZXNvdXJjZSB0eXBpY2FsbHkgaXMgYW4gQVdTIHJlc291cmNlLCBzdWNoIGFzIGFuIEVDMiBpbnN0YW5jZSBvciBhbiBFTEIgbG9hZCBiYWxhbmNlcixcbiAgICogYW5kIGlzIHJlZmVycmVkIHRvIGJ5IGFuIElQIGFkZHJlc3Mgb3IgYSBETlMgZG9tYWluIG5hbWUsIGRlcGVuZGluZyBvbiB0aGUgcmVjb3JkIHR5cGUuXG4gICAqXG4gICAqIFdoZW4gQW1hem9uIFJvdXRlIDUzIHJlY2VpdmVzIGEgRE5TIHF1ZXJ5IGZvciBhIGRvbWFpbiBuYW1lIGFuZCB0eXBlIGZvciB3aGljaCB5b3UgaGF2ZSBjcmVhdGVkIGxhdGVuY3kgcmVzb3VyY2UgcmVjb3JkIHNldHMsXG4gICAqIFJvdXRlIDUzIHNlbGVjdHMgdGhlIGxhdGVuY3kgcmVzb3VyY2UgcmVjb3JkIHNldCB0aGF0IGhhcyB0aGUgbG93ZXN0IGxhdGVuY3kgYmV0d2VlbiB0aGUgZW5kIHVzZXIgYW5kIHRoZSBhc3NvY2lhdGVkIEFtYXpvbiBFQzIgUmVnaW9uLlxuICAgKiBSb3V0ZSA1MyB0aGVuIHJldHVybnMgdGhlIHZhbHVlIHRoYXQgaXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBzZWxlY3RlZCByZXNvdXJjZSByZWNvcmQgc2V0LlxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVXNlckd1aWRlL2F3cy1yZXNvdXJjZS1yb3V0ZTUzLXJlY29yZHNldC5odG1sI2Nmbi1yb3V0ZTUzLXJlY29yZHNldC1yZWdpb25cbiAgICpcbiAgICogQGRlZmF1bHQgLSBEbyBub3Qgc2V0IGxhdGVuY3kgYmFzZWQgcm91dGluZ1xuICAgKi9cbiAgcmVhZG9ubHkgcmVnaW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIHJldHVybiBtdWx0aXBsZSB2YWx1ZXMsIHN1Y2ggYXMgSVAgYWRkcmVzc2VzIGZvciB5b3VyIHdlYiBzZXJ2ZXJzLCBpbiByZXNwb25zZSB0byBETlMgcXVlcmllcy5cbiAgICogU2V0IHRvIHRydWUgdG8gaW5kaWNhdGUgYSBtdWx0aXZhbHVlIGFuc3dlciByb3V0aW5nIHBvbGljeS4gQ29uZmxpY3RzIHdpdGggYW55IG90aGVyIHJvdXRpbmcgcG9saWN5LlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgbXVsdGlWYWx1ZUFuc3dlcj86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEEgc3RyaW5nIHVzZWQgdG8gZGlzdGluZ3Vpc2ggYmV0d2VlbiBkaWZmZXJlbnQgcmVjb3JkcyB3aXRoIHRoZSBzYW1lIGNvbWJpbmF0aW9uIG9mIEROUyBuYW1lIGFuZCB0eXBlLlxuICAgKiBJdCBjYW4gb25seSBiZSBzZXQgd2hlbiBlaXRoZXIgd2VpZ2h0IG9yIGdlb0xvY2F0aW9uIGlzIGRlZmluZWQuXG4gICAqXG4gICAqIFRoaXMgcGFyYW1ldGVyIG11c3QgYmUgYmV0d2VlbiAxIGFuZCAxMjggY2hhcmFjdGVycyBpbiBsZW5ndGguXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gQXV0byBnZW5lcmF0ZWQgc3RyaW5nXG4gICAqL1xuICByZWFkb25seSBzZXRJZGVudGlmaWVyPzogc3RyaW5nO1xuXG4gIC8vIFI1MyByZWNvcmQgY29tbWVudCBpcyBoYXJkY29kZWQgZm9yIHRlcnJhZm9ybS1wcm92aWRlci1hd3NcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2hhc2hpY29ycC90ZXJyYWZvcm0tcHJvdmlkZXItYXdzL2Jsb2IvdjUuNjguMC9pbnRlcm5hbC9zZXJ2aWNlL3JvdXRlNTMvcmVjb3JkLmdvI0wzNjNcbiAgLy8gLyoqXG4gIC8vICAqIEEgY29tbWVudCB0byBhZGQgb24gdGhlIHJlY29yZC5cbiAgLy8gICpcbiAgLy8gICogQGRlZmF1bHQgXCJNYW5hZ2VkIGJ5IFRlcnJhZm9ybVwiXG4gIC8vICAqL1xuICAvLyByZWFkb25seSBjb21tZW50Pzogc3RyaW5nO1xufVxuXG4vKipcbiAqIENvbnN0cnVjdGlvbiBwcm9wZXJ0aWVzIGZvciBhIFJlY29yZFNldC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZWNvcmRTZXRQcm9wcyBleHRlbmRzIFJlY29yZFNldE9wdGlvbnMsIEF3c0NvbnN0cnVjdFByb3BzIHtcbiAgLyoqXG4gICAqIFRoZSByZWNvcmQgdHlwZS5cbiAgICovXG4gIHJlYWRvbmx5IHJlY29yZFR5cGU6IFJlY29yZFR5cGU7XG5cbiAgLyoqXG4gICAqIFRoZSB0YXJnZXQgZm9yIHRoaXMgcmVjb3JkLCBlaXRoZXIgYFJlY29yZFRhcmdldC5mcm9tVmFsdWVzKClgIG9yXG4gICAqIGBSZWNvcmRUYXJnZXQuZnJvbUFsaWFzKClgLlxuICAgKi9cbiAgcmVhZG9ubHkgdGFyZ2V0OiBSZWNvcmRUYXJnZXQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVjb3JkU2V0T3V0cHV0cyB7XG4gIC8qKlxuICAgKiBUaGUgZG9tYWluIG5hbWUgb2YgdGhlIHJlY29yZFxuICAgKi9cbiAgcmVhZG9ubHkgZG9tYWluTmFtZTogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIEZRRE5bZnFuXSBidWlsdCB1c2luZyB0aGUgem9uZSBkb21haW4gYW5kIG5hbWVcbiAgICpcbiAgICogW2Zxbl06IGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0Z1bGx5X3F1YWxpZmllZF9kb21haW5fbmFtZVxuICAgKi9cbiAgcmVhZG9ubHkgZnFkbjogc3RyaW5nO1xufVxuXG4vKipcbiAqIEEgcmVjb3JkIHNldCBBdHRyaWJ1dGVzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSVJlY29yZFNldCBleHRlbmRzIElBd3NDb25zdHJ1Y3Qge1xuICAvKiogU3Ryb25nbHkgdHlwZWQgb3V0cHV0cyAqL1xuICByZWFkb25seSByZWNvcmRTZXRPdXRwdXRzOiBSZWNvcmRTZXRPdXRwdXRzO1xuXG4gIC8qKlxuICAgKiBUaGUgZG9tYWluIG5hbWUgb2YgdGhlIHJlY29yZFxuICAgKi9cbiAgcmVhZG9ubHkgZG9tYWluTmFtZTogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIFtGUUROXVtmcWRuXSBidWlsdCB1c2luZyB0aGUgem9uZSBkb21haW4gYW5kIG5hbWVcbiAgICpcbiAgICogW2ZxZG5dOiBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9GdWxseV9xdWFsaWZpZWRfZG9tYWluX25hbWVcbiAgICovXG4gIHJlYWRvbmx5IGZxZG46IHN0cmluZztcbn1cblxuLyoqXG4gKiBBIHJlY29yZCBzZXQuXG4gKi9cbmV4cG9ydCBjbGFzcyBSZWNvcmRTZXQgZXh0ZW5kcyBBd3NDb25zdHJ1Y3RCYXNlIGltcGxlbWVudHMgSVJlY29yZFNldCB7XG4gIHB1YmxpYyByZWFkb25seSByZXNvdXJjZTogcm91dGU1M1JlY29yZC5Sb3V0ZTUzUmVjb3JkO1xuICBwcml2YXRlIHJlYWRvbmx5IF9vdXRwdXRzOiBSZWNvcmRTZXRPdXRwdXRzO1xuICBwdWJsaWMgZ2V0IHJlY29yZFNldE91dHB1dHMoKTogUmVjb3JkU2V0T3V0cHV0cyB7XG4gICAgcmV0dXJuIHRoaXMuX291dHB1dHM7XG4gIH1cbiAgcHVibGljIGdldCBvdXRwdXRzKCk6IFJlY29yZDxzdHJpbmcsIGFueT4ge1xuICAgIHJldHVybiB0aGlzLnJlY29yZFNldE91dHB1dHM7XG4gIH1cbiAgcHVibGljIHJlYWRvbmx5IGRvbWFpbk5hbWU6IHN0cmluZztcbiAgcHVibGljIHJlYWRvbmx5IGZxZG46IHN0cmluZztcbiAgLy8gcHJpdmF0ZSByZWFkb25seSBnZW9Mb2NhdGlvbj86IEdlb0xvY2F0aW9uO1xuICBwcml2YXRlIHJlYWRvbmx5IHdlaWdodD86IG51bWJlcjtcbiAgcHJpdmF0ZSByZWFkb25seSByZWdpb24/OiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgbXVsdGlWYWx1ZUFuc3dlcj86IGJvb2xlYW47XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IFJlY29yZFNldFByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCBwcm9wcyk7XG5cbiAgICBpZiAocHJvcHMud2VpZ2h0ICYmIChwcm9wcy53ZWlnaHQgPCAwIHx8IHByb3BzLndlaWdodCA+IDI1NSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYHdlaWdodCBtdXN0IGJlIGJldHdlZW4gMCBhbmQgMjU1IGluY2x1c2l2ZSwgZ290OiAke3Byb3BzLndlaWdodH1gLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKFxuICAgICAgcHJvcHMuc2V0SWRlbnRpZmllciAmJlxuICAgICAgKHByb3BzLnNldElkZW50aWZpZXIubGVuZ3RoIDwgMSB8fCBwcm9wcy5zZXRJZGVudGlmaWVyLmxlbmd0aCA+IDEyOClcbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYHNldElkZW50aWZpZXIgbXVzdCBiZSBiZXR3ZWVuIDEgYW5kIDEyOCBjaGFyYWN0ZXJzIGxvbmcsIGdvdDogJHtwcm9wcy5zZXRJZGVudGlmaWVyLmxlbmd0aH1gLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKFxuICAgICAgcHJvcHMuc2V0SWRlbnRpZmllciAmJlxuICAgICAgcHJvcHMud2VpZ2h0ID09PSB1bmRlZmluZWQgJiZcbiAgICAgIC8vICFwcm9wcy5nZW9Mb2NhdGlvbiAmJlxuICAgICAgIXByb3BzLnJlZ2lvbiAmJlxuICAgICAgIXByb3BzLm11bHRpVmFsdWVBbnN3ZXJcbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJzZXRJZGVudGlmaWVyIGNhbiBvbmx5IGJlIHNwZWNpZmllZCBmb3Igbm9uLXNpbXBsZSByb3V0aW5nIHBvbGljaWVzXCIsXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAocHJvcHMubXVsdGlWYWx1ZUFuc3dlciAmJiBwcm9wcy50YXJnZXQuYWxpYXNUYXJnZXQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIm11bHRpVmFsdWVBbnN3ZXIgY2Fubm90IGJlIHNwZWNpZmllZCBmb3IgYWxpYXMgcmVjb3JkXCIpO1xuICAgIH1cblxuICAgIGNvbnN0IG5vblNpbXBsZVJvdXRpbmdQb2xpY2llcyA9IFtcbiAgICAgIC8vIHByb3BzLmdlb0xvY2F0aW9uLFxuICAgICAgcHJvcHMucmVnaW9uLFxuICAgICAgcHJvcHMud2VpZ2h0LFxuICAgICAgcHJvcHMubXVsdGlWYWx1ZUFuc3dlcixcbiAgICBdLmZpbHRlcigodmFyaWFibGUpID0+IHZhcmlhYmxlICE9PSB1bmRlZmluZWQpLmxlbmd0aDtcbiAgICBpZiAobm9uU2ltcGxlUm91dGluZ1BvbGljaWVzID4gMSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBcIk9ubHkgb25lIG9mIHJlZ2lvbiwgd2VpZ2h0LCBtdWx0aVZhbHVlQW5zd2VyIG9yIGdlb0xvY2F0aW9uIGNhbiBiZSBkZWZpbmVkXCIsXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIHRoaXMuZ2VvTG9jYXRpb24gPSBwcm9wcy5nZW9Mb2NhdGlvbjtcbiAgICB0aGlzLndlaWdodCA9IHByb3BzLndlaWdodDtcbiAgICB0aGlzLnJlZ2lvbiA9IHByb3BzLnJlZ2lvbjtcbiAgICB0aGlzLm11bHRpVmFsdWVBbnN3ZXIgPSBwcm9wcy5tdWx0aVZhbHVlQW5zd2VyO1xuXG4gICAgY29uc3QgdHRsID0gcHJvcHMudGFyZ2V0LmFsaWFzVGFyZ2V0XG4gICAgICA/IHVuZGVmaW5lZFxuICAgICAgOiAoKHByb3BzLnR0bCAmJiBwcm9wcy50dGwudG9TZWNvbmRzKCkpID8/IDE4MDApO1xuXG4gICAgY29uc3QgcmVjb3JkTmFtZSA9IGRldGVybWluZUZ1bGx5UXVhbGlmaWVkRG9tYWluTmFtZShcbiAgICAgIHByb3BzLnpvbmUsXG4gICAgICBwcm9wcy5yZWNvcmROYW1lLFxuICAgICk7XG5cbiAgICB0aGlzLnJlc291cmNlID0gbmV3IHJvdXRlNTNSZWNvcmQuUm91dGU1M1JlY29yZCh0aGlzLCBcIlJlc291cmNlXCIsIHtcbiAgICAgIC4uLnByb3BzLCAvLyBjb3B5IGFsbCBNZXRhQXJndW1lbnRzXG4gICAgICB6b25lSWQ6IHByb3BzLnpvbmUuem9uZUlkLFxuICAgICAgbmFtZTogcmVjb3JkTmFtZSxcbiAgICAgIHR5cGU6IHByb3BzLnJlY29yZFR5cGUsXG4gICAgICByZWNvcmRzOiBwcm9wcy50YXJnZXQudmFsdWVzLFxuICAgICAgYWxpYXM6XG4gICAgICAgIHByb3BzLnRhcmdldC5hbGlhc1RhcmdldCAmJlxuICAgICAgICBwcm9wcy50YXJnZXQuYWxpYXNUYXJnZXQuYmluZCh0aGlzLCBwcm9wcy56b25lKSxcbiAgICAgIHR0bCxcbiAgICAgIHNldElkZW50aWZpZXI6IHByb3BzLnNldElkZW50aWZpZXIgPz8gdGhpcy5jb25maWd1cmVTZXRJZGVudGlmaWVyKCksXG4gICAgICAvLyBnZW9Mb2NhdGlvbjogcHJvcHMuZ2VvTG9jYXRpb25cbiAgICAgIC8vICAgPyB7XG4gICAgICAvLyAgICAgICBjb250aW5lbnRDb2RlOiBwcm9wcy5nZW9Mb2NhdGlvbi5jb250aW5lbnRDb2RlLFxuICAgICAgLy8gICAgICAgY291bnRyeUNvZGU6IHByb3BzLmdlb0xvY2F0aW9uLmNvdW50cnlDb2RlLFxuICAgICAgLy8gICAgICAgc3ViZGl2aXNpb25Db2RlOiBwcm9wcy5nZW9Mb2NhdGlvbi5zdWJkaXZpc2lvbkNvZGUsXG4gICAgICAvLyAgICAgfVxuICAgICAgLy8gICA6IHVuZGVmaW5lZCxcbiAgICAgIG11bHRpdmFsdWVBbnN3ZXJSb3V0aW5nUG9saWN5OiBwcm9wcy5tdWx0aVZhbHVlQW5zd2VyLFxuICAgICAgd2VpZ2h0ZWRSb3V0aW5nUG9saWN5OiBwcm9wcy53ZWlnaHRcbiAgICAgICAgPyB7XG4gICAgICAgICAgICB3ZWlnaHQ6IHByb3BzLndlaWdodCxcbiAgICAgICAgICB9XG4gICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgbGF0ZW5jeVJvdXRpbmdQb2xpY3k6IHByb3BzLnJlZ2lvblxuICAgICAgICA/IHtcbiAgICAgICAgICAgIHJlZ2lvbjogcHJvcHMucmVnaW9uLFxuICAgICAgICAgIH1cbiAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICBhbGxvd092ZXJ3cml0ZTogcHJvcHMuYWxsb3dPdmVyd3JpdGUsXG4gICAgfSk7XG5cbiAgICB0aGlzLmZxZG4gPSB0aGlzLnJlc291cmNlLmZxZG47XG4gICAgdGhpcy5kb21haW5OYW1lID0gdGhpcy5yZXNvdXJjZS5uYW1lO1xuICAgIHRoaXMuX291dHB1dHMgPSB7XG4gICAgICBkb21haW5OYW1lOiB0aGlzLmRvbWFpbk5hbWUsXG4gICAgICBmcWRuOiB0aGlzLmZxZG4sXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgY29uZmlndXJlU2V0SWRlbnRpZmllcigpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIC8vIGlmICh0aGlzLmdlb0xvY2F0aW9uKSB7XG4gICAgLy8gICBsZXQgaWRlbnRpZmllciA9IFwiR0VPXCI7XG4gICAgLy8gICBpZiAodGhpcy5nZW9Mb2NhdGlvbi5jb250aW5lbnRDb2RlKSB7XG4gICAgLy8gICAgIGlkZW50aWZpZXIgPSBpZGVudGlmaWVyLmNvbmNhdChcbiAgICAvLyAgICAgICBcIl9DT05USU5FTlRfXCIsXG4gICAgLy8gICAgICAgdGhpcy5nZW9Mb2NhdGlvbi5jb250aW5lbnRDb2RlLFxuICAgIC8vICAgICApO1xuICAgIC8vICAgfVxuICAgIC8vICAgaWYgKHRoaXMuZ2VvTG9jYXRpb24uY291bnRyeUNvZGUpIHtcbiAgICAvLyAgICAgaWRlbnRpZmllciA9IGlkZW50aWZpZXIuY29uY2F0KFxuICAgIC8vICAgICAgIFwiX0NPVU5UUllfXCIsXG4gICAgLy8gICAgICAgdGhpcy5nZW9Mb2NhdGlvbi5jb3VudHJ5Q29kZSxcbiAgICAvLyAgICAgKTtcbiAgICAvLyAgIH1cbiAgICAvLyAgIGlmICh0aGlzLmdlb0xvY2F0aW9uLnN1YmRpdmlzaW9uQ29kZSkge1xuICAgIC8vICAgICBpZGVudGlmaWVyID0gaWRlbnRpZmllci5jb25jYXQoXG4gICAgLy8gICAgICAgXCJfU1VCRElWSVNJT05fXCIsXG4gICAgLy8gICAgICAgdGhpcy5nZW9Mb2NhdGlvbi5zdWJkaXZpc2lvbkNvZGUsXG4gICAgLy8gICAgICk7XG4gICAgLy8gICB9XG4gICAgLy8gICByZXR1cm4gaWRlbnRpZmllcjtcbiAgICAvLyB9XG5cbiAgICBpZiAodGhpcy53ZWlnaHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgaWRQcmVmaXggPSBgV0VJR0hUXyR7dGhpcy53ZWlnaHR9X0lEX2A7XG4gICAgICByZXR1cm4gdGhpcy5jcmVhdGVJZGVudGlmaWVyKGlkUHJlZml4KTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5yZWdpb24pIHtcbiAgICAgIGNvbnN0IGlkUHJlZml4ID0gYFJFR0lPTl8ke3RoaXMucmVnaW9ufV9JRF9gO1xuICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlSWRlbnRpZmllcihpZFByZWZpeCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMubXVsdGlWYWx1ZUFuc3dlcikge1xuICAgICAgY29uc3QgaWRQcmVmaXggPSBcIk1WQV9JRF9cIjtcbiAgICAgIHJldHVybiB0aGlzLmNyZWF0ZUlkZW50aWZpZXIoaWRQcmVmaXgpO1xuICAgIH1cblxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUlkZW50aWZpZXIocHJlZml4OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnN0YWNrLnVuaXF1ZVJlc291cmNlTmFtZSh0aGlzLCB7IG1heExlbmd0aDogNjQsIHByZWZpeCB9KTtcbiAgfVxufVxuXG4vKipcbiAqIFRoZSByZWNvcmQgdHlwZS5cbiAqL1xuZXhwb3J0IGVudW0gUmVjb3JkVHlwZSB7XG4gIC8qKlxuICAgKiByb3V0ZSB0cmFmZmljIHRvIGEgcmVzb3VyY2UsIHN1Y2ggYXMgYSB3ZWIgc2VydmVyLCB1c2luZyBhbiBJUHY0IGFkZHJlc3MgaW4gZG90dGVkIGRlY2ltYWxcbiAgICogbm90YXRpb25cbiAgICpcbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vUm91dGU1My9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvUmVzb3VyY2VSZWNvcmRUeXBlcy5odG1sI0FGb3JtYXRcbiAgICovXG4gIEEgPSBcIkFcIixcblxuICAvKipcbiAgICogcm91dGUgdHJhZmZpYyB0byBhIHJlc291cmNlLCBzdWNoIGFzIGEgd2ViIHNlcnZlciwgdXNpbmcgYW4gSVB2NiBhZGRyZXNzIGluIGNvbG9uLXNlcGFyYXRlZFxuICAgKiBoZXhhZGVjaW1hbCBmb3JtYXRcbiAgICpcbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vUm91dGU1My9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvUmVzb3VyY2VSZWNvcmRUeXBlcy5odG1sI0FBQUFGb3JtYXRcbiAgICovXG4gIEFBQUEgPSBcIkFBQUFcIixcblxuICAvKipcbiAgICogQSBDQUEgcmVjb3JkIHNwZWNpZmllcyB3aGljaCBjZXJ0aWZpY2F0ZSBhdXRob3JpdGllcyAoQ0FzKSBhcmUgYWxsb3dlZCB0byBpc3N1ZSBjZXJ0aWZpY2F0ZXNcbiAgICogZm9yIGEgZG9tYWluIG9yIHN1YmRvbWFpblxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9Sb3V0ZTUzL2xhdGVzdC9EZXZlbG9wZXJHdWlkZS9SZXNvdXJjZVJlY29yZFR5cGVzLmh0bWwjQ0FBRm9ybWF0XG4gICAqL1xuICBDQUEgPSBcIkNBQVwiLFxuXG4gIC8qKlxuICAgKiBBIENOQU1FIHJlY29yZCBtYXBzIEROUyBxdWVyaWVzIGZvciB0aGUgbmFtZSBvZiB0aGUgY3VycmVudCByZWNvcmQsIHN1Y2ggYXMgYWNtZS5leGFtcGxlLmNvbSxcbiAgICogdG8gYW5vdGhlciBkb21haW4gKGV4YW1wbGUuY29tIG9yIGV4YW1wbGUubmV0KSBvciBzdWJkb21haW4gKGFjbWUuZXhhbXBsZS5jb20gb3IgemVuaXRoLmV4YW1wbGUub3JnKS5cbiAgICpcbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vUm91dGU1My9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvUmVzb3VyY2VSZWNvcmRUeXBlcy5odG1sI0NOQU1FRm9ybWF0XG4gICAqL1xuICBDTkFNRSA9IFwiQ05BTUVcIixcblxuICAvKipcbiAgICogQSBkZWxlZ2F0aW9uIHNpZ25lciAoRFMpIHJlY29yZCByZWZlcnMgYSB6b25lIGtleSBmb3IgYSBkZWxlZ2F0ZWQgc3ViZG9tYWluIHpvbmUuXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL1JvdXRlNTMvbGF0ZXN0L0RldmVsb3Blckd1aWRlL1Jlc291cmNlUmVjb3JkVHlwZXMuaHRtbCNEU0Zvcm1hdFxuICAgKi9cbiAgRFMgPSBcIkRTXCIsXG5cbiAgLyoqXG4gICAqIEFuIE1YIHJlY29yZCBzcGVjaWZpZXMgdGhlIG5hbWVzIG9mIHlvdXIgbWFpbCBzZXJ2ZXJzIGFuZCwgaWYgeW91IGhhdmUgdHdvIG9yIG1vcmUgbWFpbCBzZXJ2ZXJzLFxuICAgKiB0aGUgcHJpb3JpdHkgb3JkZXIuXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL1JvdXRlNTMvbGF0ZXN0L0RldmVsb3Blckd1aWRlL1Jlc291cmNlUmVjb3JkVHlwZXMuaHRtbCNNWEZvcm1hdFxuICAgKi9cbiAgTVggPSBcIk1YXCIsXG5cbiAgLyoqXG4gICAqIEEgTmFtZSBBdXRob3JpdHkgUG9pbnRlciAoTkFQVFIpIGlzIGEgdHlwZSBvZiByZWNvcmQgdGhhdCBpcyB1c2VkIGJ5IER5bmFtaWMgRGVsZWdhdGlvbiBEaXNjb3ZlcnlcbiAgICogU3lzdGVtIChERERTKSBhcHBsaWNhdGlvbnMgdG8gY29udmVydCBvbmUgdmFsdWUgdG8gYW5vdGhlciBvciB0byByZXBsYWNlIG9uZSB2YWx1ZSB3aXRoIGFub3RoZXIuXG4gICAqIEZvciBleGFtcGxlLCBvbmUgY29tbW9uIHVzZSBpcyB0byBjb252ZXJ0IHBob25lIG51bWJlcnMgaW50byBTSVAgVVJJcy5cbiAgICpcbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vUm91dGU1My9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvUmVzb3VyY2VSZWNvcmRUeXBlcy5odG1sI05BUFRSRm9ybWF0XG4gICAqL1xuICBOQVBUUiA9IFwiTkFQVFJcIixcblxuICAvKipcbiAgICogQW4gTlMgcmVjb3JkIGlkZW50aWZpZXMgdGhlIG5hbWUgc2VydmVycyBmb3IgdGhlIGhvc3RlZCB6b25lXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL1JvdXRlNTMvbGF0ZXN0L0RldmVsb3Blckd1aWRlL1Jlc291cmNlUmVjb3JkVHlwZXMuaHRtbCNOU0Zvcm1hdFxuICAgKi9cbiAgTlMgPSBcIk5TXCIsXG5cbiAgLyoqXG4gICAqIEEgUFRSIHJlY29yZCBtYXBzIGFuIElQIGFkZHJlc3MgdG8gdGhlIGNvcnJlc3BvbmRpbmcgZG9tYWluIG5hbWUuXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL1JvdXRlNTMvbGF0ZXN0L0RldmVsb3Blckd1aWRlL1Jlc291cmNlUmVjb3JkVHlwZXMuaHRtbCNQVFJGb3JtYXRcbiAgICovXG4gIFBUUiA9IFwiUFRSXCIsXG5cbiAgLyoqXG4gICAqIEEgc3RhcnQgb2YgYXV0aG9yaXR5IChTT0EpIHJlY29yZCBwcm92aWRlcyBpbmZvcm1hdGlvbiBhYm91dCBhIGRvbWFpbiBhbmQgdGhlIGNvcnJlc3BvbmRpbmcgQW1hem9uXG4gICAqIFJvdXRlIDUzIGhvc3RlZCB6b25lXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL1JvdXRlNTMvbGF0ZXN0L0RldmVsb3Blckd1aWRlL1Jlc291cmNlUmVjb3JkVHlwZXMuaHRtbCNTT0FGb3JtYXRcbiAgICovXG4gIFNPQSA9IFwiU09BXCIsXG5cbiAgLyoqXG4gICAqIFNQRiByZWNvcmRzIHdlcmUgZm9ybWVybHkgdXNlZCB0byB2ZXJpZnkgdGhlIGlkZW50aXR5IG9mIHRoZSBzZW5kZXIgb2YgZW1haWwgbWVzc2FnZXMuXG4gICAqIEluc3RlYWQgb2YgYW4gU1BGIHJlY29yZCwgd2UgcmVjb21tZW5kIHRoYXQgeW91IGNyZWF0ZSBhIFRYVCByZWNvcmQgdGhhdCBjb250YWlucyB0aGUgYXBwbGljYWJsZSB2YWx1ZS5cbiAgICpcbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vUm91dGU1My9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvUmVzb3VyY2VSZWNvcmRUeXBlcy5odG1sI1NQRkZvcm1hdFxuICAgKi9cbiAgU1BGID0gXCJTUEZcIixcblxuICAvKipcbiAgICogQW4gU1JWIHJlY29yZCBWYWx1ZSBlbGVtZW50IGNvbnNpc3RzIG9mIGZvdXIgc3BhY2Utc2VwYXJhdGVkIHZhbHVlcy4gVGhlIGZpcnN0IHRocmVlIHZhbHVlcyBhcmVcbiAgICogZGVjaW1hbCBudW1iZXJzIHJlcHJlc2VudGluZyBwcmlvcml0eSwgd2VpZ2h0LCBhbmQgcG9ydC4gVGhlIGZvdXJ0aCB2YWx1ZSBpcyBhIGRvbWFpbiBuYW1lLlxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9Sb3V0ZTUzL2xhdGVzdC9EZXZlbG9wZXJHdWlkZS9SZXNvdXJjZVJlY29yZFR5cGVzLmh0bWwjU1JWRm9ybWF0XG4gICAqL1xuICBTUlYgPSBcIlNSVlwiLFxuXG4gIC8qKlxuICAgKiBBIFRYVCByZWNvcmQgY29udGFpbnMgb25lIG9yIG1vcmUgc3RyaW5ncyB0aGF0IGFyZSBlbmNsb3NlZCBpbiBkb3VibGUgcXVvdGF0aW9uIG1hcmtzIChcIikuXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL1JvdXRlNTMvbGF0ZXN0L0RldmVsb3Blckd1aWRlL1Jlc291cmNlUmVjb3JkVHlwZXMuaHRtbCNUWFRGb3JtYXRcbiAgICovXG4gIFRYVCA9IFwiVFhUXCIsXG59XG5cbi8qKlxuICogVHlwZSB1bmlvbiBmb3IgYSByZWNvcmQgdGhhdCBhY2NlcHRzIG11bHRpcGxlIHR5cGVzIG9mIHRhcmdldC5cbiAqL1xuZXhwb3J0IGNsYXNzIFJlY29yZFRhcmdldCB7XG4gIC8qKlxuICAgKiBVc2Ugc3RyaW5nIHZhbHVlcyBhcyB0YXJnZXQuXG4gICAqXG4gICAqIFRoZXNlIGNhbiBiZSBJUCBhZGRyZXNzZXMgb3IgZG9tYWluIG5hbWVzLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBmcm9tVmFsdWVzKC4uLnZhbHVlczogc3RyaW5nW10pIHtcbiAgICByZXR1cm4gbmV3IFJlY29yZFRhcmdldCh2YWx1ZXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVzZSBhbiBhbGlhcyBhcyB0YXJnZXQuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGZyb21BbGlhcyhhbGlhc1RhcmdldDogSUFsaWFzUmVjb3JkVGFyZ2V0KSB7XG4gICAgcmV0dXJuIG5ldyBSZWNvcmRUYXJnZXQodW5kZWZpbmVkLCBhbGlhc1RhcmdldCk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHZhbHVlcyBjb3JyZXNwb25kIHdpdGggdGhlIGNob3NlbiByZWNvcmQgdHlwZSAoZS5nLiBmb3IgJ0EnIFR5cGUsIHNwZWNpZnkgb25lIG9yIG1vcmUgSVAgYWRkcmVzc2VzKVxuICAgKiBAcGFyYW0gYWxpYXNUYXJnZXQgYWxpYXMgZm9yIHRhcmdldHMgc3VjaCBhcyBDbG91ZEZyb250IGRpc3RyaWJ1dGlvbiB0byByb3V0ZSB0cmFmZmljIHRvXG4gICAqL1xuICBwcm90ZWN0ZWQgY29uc3RydWN0b3IoXG4gICAgcHVibGljIHJlYWRvbmx5IHZhbHVlcz86IHN0cmluZ1tdLFxuICAgIHB1YmxpYyByZWFkb25seSBhbGlhc1RhcmdldD86IElBbGlhc1JlY29yZFRhcmdldCxcbiAgKSB7fVxufVxuXG4vKipcbiAqIENvbnN0cnVjdGlvbiBwcm9wZXJ0aWVzIGZvciBhIEFSZWNvcmQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQVJlY29yZFByb3BzIGV4dGVuZHMgUmVjb3JkU2V0T3B0aW9ucywgQXdzQ29uc3RydWN0UHJvcHMge1xuICAvKipcbiAgICogVGhlIHRhcmdldC5cbiAgICovXG4gIHJlYWRvbmx5IHRhcmdldDogUmVjb3JkVGFyZ2V0O1xufVxuXG4vKipcbiAqIEEgRE5TIEEgcmVjb3JkXG4gKlxuICogQHJlc291cmNlIGF3c19yb3V0ZTUzX3JlY29yZFxuICovXG5leHBvcnQgY2xhc3MgQVJlY29yZCBleHRlbmRzIFJlY29yZFNldCB7XG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBBUmVjb3JkUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIHtcbiAgICAgIC4uLnByb3BzLFxuICAgICAgcmVjb3JkVHlwZTogUmVjb3JkVHlwZS5BLFxuICAgICAgdGFyZ2V0OiBwcm9wcy50YXJnZXQsXG4gICAgfSk7XG4gIH1cbn1cblxuLyoqXG4gKiBDb25zdHJ1Y3Rpb24gcHJvcGVydGllcyBmb3IgYSBBYWFhUmVjb3JkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFhYWFSZWNvcmRQcm9wcyBleHRlbmRzIFJlY29yZFNldE9wdGlvbnMsIEF3c0NvbnN0cnVjdFByb3BzIHtcbiAgLyoqXG4gICAqIFRoZSB0YXJnZXQuXG4gICAqL1xuICByZWFkb25seSB0YXJnZXQ6IFJlY29yZFRhcmdldDtcbn1cblxuLyoqXG4gKiBBIEROUyBBQUFBIHJlY29yZFxuICpcbiAqIEByZXNvdXJjZSBhd3Nfcm91dGU1M19yZWNvcmRcbiAqL1xuZXhwb3J0IGNsYXNzIEFhYWFSZWNvcmQgZXh0ZW5kcyBSZWNvcmRTZXQge1xuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogQWFhYVJlY29yZFByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCB7XG4gICAgICAuLi5wcm9wcyxcbiAgICAgIHJlY29yZFR5cGU6IFJlY29yZFR5cGUuQUFBQSxcbiAgICAgIHRhcmdldDogcHJvcHMudGFyZ2V0LFxuICAgIH0pO1xuICB9XG59XG5cbi8qKlxuICogQ29uc3RydWN0aW9uIHByb3BlcnRpZXMgZm9yIGEgQ25hbWVSZWNvcmQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ25hbWVSZWNvcmRQcm9wcyBleHRlbmRzIFJlY29yZFNldE9wdGlvbnMge1xuICAvKipcbiAgICogVGhlIGRvbWFpbiBuYW1lIG9mIHRoZSB0YXJnZXQgdGhhdCB0aGlzIHJlY29yZCBzaG91bGQgcG9pbnQgdG8uXG4gICAqL1xuICByZWFkb25seSBkb21haW5OYW1lOiBzdHJpbmc7XG59XG5cbi8qKlxuICogQSBETlMgQ05BTUUgcmVjb3JkXG4gKlxuICogQHJlc291cmNlIGF3c19yb3V0ZTUzX3JlY29yZFxuICovXG5leHBvcnQgY2xhc3MgQ25hbWVSZWNvcmQgZXh0ZW5kcyBSZWNvcmRTZXQge1xuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogQ25hbWVSZWNvcmRQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwge1xuICAgICAgLi4ucHJvcHMsXG4gICAgICByZWNvcmRUeXBlOiBSZWNvcmRUeXBlLkNOQU1FLFxuICAgICAgdGFyZ2V0OiBSZWNvcmRUYXJnZXQuZnJvbVZhbHVlcyhwcm9wcy5kb21haW5OYW1lKSxcbiAgICB9KTtcbiAgfVxufVxuXG4vKipcbiAqIENvbnN0cnVjdGlvbiBwcm9wZXJ0aWVzIGZvciBhIFR4dFJlY29yZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUeHRSZWNvcmRQcm9wcyBleHRlbmRzIFJlY29yZFNldE9wdGlvbnMge1xuICAvKipcbiAgICogVGhlIHRleHQgdmFsdWVzLlxuICAgKi9cbiAgcmVhZG9ubHkgdmFsdWVzOiBzdHJpbmdbXTtcbn1cblxuLyoqXG4gKiBBIEROUyBUWFQgcmVjb3JkXG4gKlxuICogQHJlc291cmNlIGF3c19yb3V0ZTUzX3JlY29yZFxuICovXG5leHBvcnQgY2xhc3MgVHh0UmVjb3JkIGV4dGVuZHMgUmVjb3JkU2V0IHtcbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IFR4dFJlY29yZFByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCB7XG4gICAgICAuLi5wcm9wcyxcbiAgICAgIHJlY29yZFR5cGU6IFJlY29yZFR5cGUuVFhULFxuICAgICAgdGFyZ2V0OiBSZWNvcmRUYXJnZXQuZnJvbVZhbHVlcyguLi5wcm9wcy52YWx1ZXMubWFwKCh2KSA9PiBmb3JtYXRUeHQodikpKSxcbiAgICB9KTtcbiAgfVxufVxuXG4vKipcbiAqIEZvcm1hdHMgYSB0ZXh0IHZhbHVlIGZvciB1c2UgaW4gYSBUWFQgcmVjb3JkXG4gKlxuICogVXNlIGBKU09OLnN0cmluZ2lmeWAgdG8gY29ycmVjdGx5IGVzY2FwZSBhbmQgZW5jbG9zZSBpbiBkb3VibGUgcXVvdGVzIChcIlwiKS5cbiAqXG4gKiBETlMgVFhUIHJlY29yZHMgY2FuIGNvbnRhaW4gdXAgdG8gMjU1IGNoYXJhY3RlcnMgaW4gYSBzaW5nbGUgc3RyaW5nLiBUWFRcbiAqIHJlY29yZCBzdHJpbmdzIG92ZXIgMjU1IGNoYXJhY3RlcnMgbXVzdCBiZSBzcGxpdCBpbnRvIG11bHRpcGxlIHRleHQgc3RyaW5nc1xuICogd2l0aGluIHRoZSBzYW1lIHJlY29yZC5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vYXdzLmFtYXpvbi5jb20vcHJlbWl1bXN1cHBvcnQva25vd2xlZGdlLWNlbnRlci9yb3V0ZTUzLXJlc29sdmUtZGtpbS10ZXh0LXJlY29yZC1lcnJvci9cbiAqL1xuZnVuY3Rpb24gZm9ybWF0VHh0KHN0cmluZzogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgcmVzdWx0ID0gW107XG4gIGxldCBpZHggPSAwO1xuICB3aGlsZSAoaWR4IDwgc3RyaW5nLmxlbmd0aCkge1xuICAgIHJlc3VsdC5wdXNoKHN0cmluZy5zbGljZShpZHgsIChpZHggKz0gMjU1KSkpOyAvLyBjaHVua3Mgb2YgMjU1IGNoYXJhY3RlcnMgbG9uZ1xuICB9XG4gIHJldHVybiByZXN1bHQubWFwKChyKSA9PiBKU09OLnN0cmluZ2lmeShyKSkuam9pbihcIlwiKTtcbn1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciBhIFNSViByZWNvcmQgdmFsdWUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3J2UmVjb3JkVmFsdWUge1xuICAvKipcbiAgICogVGhlIHByaW9yaXR5LlxuICAgKi9cbiAgcmVhZG9ubHkgcHJpb3JpdHk6IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIHdlaWdodC5cbiAgICovXG4gIHJlYWRvbmx5IHdlaWdodDogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgcG9ydC5cbiAgICovXG4gIHJlYWRvbmx5IHBvcnQ6IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIHNlcnZlciBob3N0IG5hbWUuXG4gICAqL1xuICByZWFkb25seSBob3N0TmFtZTogc3RyaW5nO1xufVxuLyoqXG4gKiBDb25zdHJ1Y3Rpb24gcHJvcGVydGllcyBmb3IgYSBTcnZSZWNvcmQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3J2UmVjb3JkUHJvcHMgZXh0ZW5kcyBSZWNvcmRTZXRPcHRpb25zIHtcbiAgLyoqXG4gICAqIFRoZSB2YWx1ZXMuXG4gICAqL1xuICByZWFkb25seSB2YWx1ZXM6IFNydlJlY29yZFZhbHVlW107XG59XG5cbi8qKlxuICogQSBETlMgU1JWIHJlY29yZFxuICpcbiAqIEByZXNvdXJjZSBhd3Nfcm91dGU1M19yZWNvcmRcbiAqL1xuZXhwb3J0IGNsYXNzIFNydlJlY29yZCBleHRlbmRzIFJlY29yZFNldCB7XG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBTcnZSZWNvcmRQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwge1xuICAgICAgLi4ucHJvcHMsXG4gICAgICByZWNvcmRUeXBlOiBSZWNvcmRUeXBlLlNSVixcbiAgICAgIHRhcmdldDogUmVjb3JkVGFyZ2V0LmZyb21WYWx1ZXMoXG4gICAgICAgIC4uLnByb3BzLnZhbHVlcy5tYXAoXG4gICAgICAgICAgKHYpID0+IGAke3YucHJpb3JpdHl9ICR7di53ZWlnaHR9ICR7di5wb3J0fSAke3YuaG9zdE5hbWV9YCxcbiAgICAgICAgKSxcbiAgICAgICksXG4gICAgfSk7XG4gIH1cbn1cblxuLyoqXG4gKiBUaGUgQ0FBIHRhZy5cbiAqL1xuZXhwb3J0IGVudW0gQ2FhVGFnIHtcbiAgLyoqXG4gICAqIEV4cGxpY2l0eSBhdXRob3JpemVzIGEgc2luZ2xlIGNlcnRpZmljYXRlIGF1dGhvcml0eSB0byBpc3N1ZSBhXG4gICAqIGNlcnRpZmljYXRlIChhbnkgdHlwZSkgZm9yIHRoZSBob3N0bmFtZS5cbiAgICovXG4gIElTU1VFID0gXCJpc3N1ZVwiLFxuXG4gIC8qKlxuICAgKiBFeHBsaWNpdHkgYXV0aG9yaXplcyBhIHNpbmdsZSBjZXJ0aWZpY2F0ZSBhdXRob3JpdHkgdG8gaXNzdWUgYVxuICAgKiB3aWxkY2FyZCBjZXJ0aWZpY2F0ZSAoYW5kIG9ubHkgd2lsZGNhcmQpIGZvciB0aGUgaG9zdG5hbWUuXG4gICAqL1xuICBJU1NVRVdJTEQgPSBcImlzc3Vld2lsZFwiLFxuXG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgYSBVUkwgdG8gd2hpY2ggYSBjZXJ0aWZpY2F0ZSBhdXRob3JpdHkgbWF5IHJlcG9ydCBwb2xpY3lcbiAgICogdmlvbGF0aW9ucy5cbiAgICovXG4gIElPREVGID0gXCJpb2RlZlwiLFxufVxuXG4vKipcbiAqIFByb3BlcnRpZXMgZm9yIGEgQ0FBIHJlY29yZCB2YWx1ZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDYWFSZWNvcmRWYWx1ZSB7XG4gIC8qKlxuICAgKiBUaGUgZmxhZy5cbiAgICovXG4gIHJlYWRvbmx5IGZsYWc6IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIHRhZy5cbiAgICovXG4gIHJlYWRvbmx5IHRhZzogQ2FhVGFnO1xuXG4gIC8qKlxuICAgKiBUaGUgdmFsdWUgYXNzb2NpYXRlZCB3aXRoIHRoZSB0YWcuXG4gICAqL1xuICByZWFkb25seSB2YWx1ZTogc3RyaW5nO1xufVxuXG4vKipcbiAqIENvbnN0cnVjdGlvbiBwcm9wZXJ0aWVzIGZvciBhIENhYVJlY29yZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDYWFSZWNvcmRQcm9wcyBleHRlbmRzIFJlY29yZFNldE9wdGlvbnMge1xuICAvKipcbiAgICogVGhlIHZhbHVlcy5cbiAgICovXG4gIHJlYWRvbmx5IHZhbHVlczogQ2FhUmVjb3JkVmFsdWVbXTtcbn1cblxuLyoqXG4gKiBBIEROUyBDQUEgcmVjb3JkXG4gKlxuICogQHJlc291cmNlIGF3c19yb3V0ZTUzX3JlY29yZFxuICovXG5leHBvcnQgY2xhc3MgQ2FhUmVjb3JkIGV4dGVuZHMgUmVjb3JkU2V0IHtcbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IENhYVJlY29yZFByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCB7XG4gICAgICAuLi5wcm9wcyxcbiAgICAgIHJlY29yZFR5cGU6IFJlY29yZFR5cGUuQ0FBLFxuICAgICAgdGFyZ2V0OiBSZWNvcmRUYXJnZXQuZnJvbVZhbHVlcyhcbiAgICAgICAgLi4ucHJvcHMudmFsdWVzLm1hcCgodikgPT4gYCR7di5mbGFnfSAke3YudGFnfSBcIiR7di52YWx1ZX1cImApLFxuICAgICAgKSxcbiAgICB9KTtcbiAgfVxufVxuXG4vKipcbiAqIENvbnN0cnVjdGlvbiBwcm9wZXJ0aWVzIGZvciBhIENhYUFtYXpvblJlY29yZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDYWFBbWF6b25SZWNvcmRQcm9wcyBleHRlbmRzIFJlY29yZFNldE9wdGlvbnMge31cblxuLyoqXG4gKiBBIEROUyBBbWF6b24gQ0FBIHJlY29yZC5cbiAqXG4gKiBBIENBQSByZWNvcmQgdG8gcmVzdHJpY3QgY2VydGlmaWNhdGUgYXV0aG9yaXRpZXMgYWxsb3dlZFxuICogdG8gaXNzdWUgY2VydGlmaWNhdGVzIGZvciBhIGRvbWFpbiB0byBBbWF6b24gb25seS5cbiAqXG4gKiBAcmVzb3VyY2UgYXdzX3JvdXRlNTNfcmVjb3JkXG4gKi9cbmV4cG9ydCBjbGFzcyBDYWFBbWF6b25SZWNvcmQgZXh0ZW5kcyBDYWFSZWNvcmQge1xuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogQ2FhQW1hem9uUmVjb3JkUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIHtcbiAgICAgIC4uLnByb3BzLFxuICAgICAgdmFsdWVzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBmbGFnOiAwLFxuICAgICAgICAgIHRhZzogQ2FhVGFnLklTU1VFLFxuICAgICAgICAgIHZhbHVlOiBcImFtYXpvbi5jb21cIixcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfSk7XG4gIH1cbn1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciBhIE1YIHJlY29yZCB2YWx1ZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBNeFJlY29yZFZhbHVlIHtcbiAgLyoqXG4gICAqIFRoZSBwcmlvcml0eS5cbiAgICovXG4gIHJlYWRvbmx5IHByaW9yaXR5OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBtYWlsIHNlcnZlciBob3N0IG5hbWUuXG4gICAqL1xuICByZWFkb25seSBob3N0TmFtZTogc3RyaW5nO1xufVxuXG4vKipcbiAqIENvbnN0cnVjdGlvbiBwcm9wZXJ0aWVzIGZvciBhIE14UmVjb3JkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE14UmVjb3JkUHJvcHMgZXh0ZW5kcyBSZWNvcmRTZXRPcHRpb25zIHtcbiAgLyoqXG4gICAqIFRoZSB2YWx1ZXMuXG4gICAqL1xuICByZWFkb25seSB2YWx1ZXM6IE14UmVjb3JkVmFsdWVbXTtcbn1cblxuLyoqXG4gKiBBIEROUyBNWCByZWNvcmRcbiAqXG4gKiBAcmVzb3VyY2UgYXdzX3JvdXRlNTNfcmVjb3JkXG4gKi9cbmV4cG9ydCBjbGFzcyBNeFJlY29yZCBleHRlbmRzIFJlY29yZFNldCB7XG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBNeFJlY29yZFByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCB7XG4gICAgICAuLi5wcm9wcyxcbiAgICAgIHJlY29yZFR5cGU6IFJlY29yZFR5cGUuTVgsXG4gICAgICB0YXJnZXQ6IFJlY29yZFRhcmdldC5mcm9tVmFsdWVzKFxuICAgICAgICAuLi5wcm9wcy52YWx1ZXMubWFwKCh2KSA9PiBgJHt2LnByaW9yaXR5fSAke3YuaG9zdE5hbWV9YCksXG4gICAgICApLFxuICAgIH0pO1xuICB9XG59XG5cbi8qKlxuICogQ29uc3RydWN0aW9uIHByb3BlcnRpZXMgZm9yIGEgTlNSZWNvcmQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTnNSZWNvcmRQcm9wcyBleHRlbmRzIFJlY29yZFNldE9wdGlvbnMge1xuICAvKipcbiAgICogVGhlIE5TIHZhbHVlcy5cbiAgICovXG4gIHJlYWRvbmx5IHZhbHVlczogc3RyaW5nW107XG59XG5cbi8qKlxuICogQSBETlMgTlMgcmVjb3JkXG4gKlxuICogQHJlc291cmNlIGF3c19yb3V0ZTUzX3JlY29yZFxuICovXG5leHBvcnQgY2xhc3MgTnNSZWNvcmQgZXh0ZW5kcyBSZWNvcmRTZXQge1xuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogTnNSZWNvcmRQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwge1xuICAgICAgLi4ucHJvcHMsXG4gICAgICByZWNvcmRUeXBlOiBSZWNvcmRUeXBlLk5TLFxuICAgICAgdGFyZ2V0OiBSZWNvcmRUYXJnZXQuZnJvbVZhbHVlcyguLi5wcm9wcy52YWx1ZXMpLFxuICAgIH0pO1xuICB9XG59XG5cbi8qKlxuICogQ29uc3RydWN0aW9uIHByb3BlcnRpZXMgZm9yIGEgRFNSZWNvcmQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRHNSZWNvcmRQcm9wcyBleHRlbmRzIFJlY29yZFNldE9wdGlvbnMge1xuICAvKipcbiAgICogVGhlIERTIHZhbHVlcy5cbiAgICovXG4gIHJlYWRvbmx5IHZhbHVlczogc3RyaW5nW107XG59XG5cbi8qKlxuICogQSBETlMgRFMgcmVjb3JkXG4gKlxuICogQHJlc291cmNlIGF3c19yb3V0ZTUzX3JlY29yZFxuICovXG5leHBvcnQgY2xhc3MgRHNSZWNvcmQgZXh0ZW5kcyBSZWNvcmRTZXQge1xuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogRHNSZWNvcmRQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwge1xuICAgICAgLi4ucHJvcHMsXG4gICAgICByZWNvcmRUeXBlOiBSZWNvcmRUeXBlLkRTLFxuICAgICAgdGFyZ2V0OiBSZWNvcmRUYXJnZXQuZnJvbVZhbHVlcyguLi5wcm9wcy52YWx1ZXMpLFxuICAgIH0pO1xuICB9XG59XG5cbi8qKlxuICogQ29uc3RydWN0aW9uIHByb3BlcnRpZXMgZm9yIGEgWm9uZURlbGVnYXRpb25SZWNvcmRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBab25lRGVsZWdhdGlvblJlY29yZFByb3BzIGV4dGVuZHMgUmVjb3JkU2V0T3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgbmFtZSBzZXJ2ZXJzIHRvIHJlcG9ydCBpbiB0aGUgZGVsZWdhdGlvbiByZWNvcmRzLlxuICAgKi9cbiAgcmVhZG9ubHkgbmFtZVNlcnZlcnM6IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIEEgcmVjb3JkIHRvIGRlbGVnYXRlIGZ1cnRoZXIgbG9va3VwcyB0byBhIGRpZmZlcmVudCBzZXQgb2YgbmFtZSBzZXJ2ZXJzLlxuICovXG5leHBvcnQgY2xhc3MgWm9uZURlbGVnYXRpb25SZWNvcmQgZXh0ZW5kcyBSZWNvcmRTZXQge1xuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogWm9uZURlbGVnYXRpb25SZWNvcmRQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwge1xuICAgICAgLi4ucHJvcHMsXG4gICAgICByZWNvcmRUeXBlOiBSZWNvcmRUeXBlLk5TLFxuICAgICAgdGFyZ2V0OiBSZWNvcmRUYXJnZXQuZnJvbVZhbHVlcyhcbiAgICAgICAgLi4uKFRva2VuLmlzVW5yZXNvbHZlZChwcm9wcy5uYW1lU2VydmVycylcbiAgICAgICAgICA/IHByb3BzLm5hbWVTZXJ2ZXJzIC8vIENhbid0IG1hcCBhIHN0cmluZy1hcnJheSB0b2tlbiFcbiAgICAgICAgICA6IHByb3BzLm5hbWVTZXJ2ZXJzLm1hcCgobnMpID0+XG4gICAgICAgICAgICAgIFRva2VuLmlzVW5yZXNvbHZlZChucykgfHwgbnMuZW5kc1dpdGgoXCIuXCIpID8gbnMgOiBgJHtuc30uYCxcbiAgICAgICAgICAgICkpLFxuICAgICAgKSxcbiAgICAgIHR0bDogcHJvcHMudHRsIHx8IER1cmF0aW9uLmRheXMoMiksXG4gICAgfSk7XG4gIH1cbn1cblxuLy8gcmVmIGh0dHBzOi8vZ2l0aHViLmNvbS9hd3MvYXdzLWNkay9ibG9iL3YyLjE1Ni4wL3BhY2thZ2VzL2F3cy1jZGstbGliL2F3cy1yb3V0ZTUzL2xpYi91dGlsLnRzXG5cbi8qKlxuICogUm91dGU1MyByZXF1aXJlcyB0aGUgcmVjb3JkIG5hbWVzIGFyZSBzcGVjaWZpZWQgYXMgZnVsbHkgcXVhbGlmaWVkIG5hbWVzLCBidXQgdGhpc1xuICogZm9yY2VzIGxvdHMgb2YgcmVkdW5kYW50IHdvcmsgb24gdGhlIHVzZXIgKHJlcGVhdGluZyB0aGUgem9uZSBuYW1lIG92ZXIgYW5kIG92ZXIpLlxuICogVGhpcyBmdW5jdGlvbiBhbGxvd3MgdGhlIHVzZXIgdG8gYmUgbGF6aWVyIGFuZCBvZmZlcnMgYSBuaWNlciBleHBlcmllbmNlLCBieVxuICogcXVhbGlmeWluZyByZWxhdGl2ZSBuYW1lcyBhcHByb3ByaWF0ZWx5OlxuICpcbiAqIEBwYXJhbSBwcm92aWRlZE5hbWUgdGhlIHVzZXItc3BlY2lmaWVkIG5hbWUgb2YgdGhlIHJlY29yZC5cbiAqIEBwYXJhbSBkbnNab25lICAgICAgdGhlIHpvbmUgdGhlIHJlY29yZCB3aWxsIGJlIGNyZWF0ZWQgaW4uXG4gKlxuICogQHJldHVybnMgPHVsPlxuICogICAgICAgIDxsaT5JZiArcHJvdmlkZWROYW1lKyBlbmRzIHdpdGggYSArLissIHVzZSBpdCBhcy1pczwvbGk+XG4gKiAgICAgICAgPGxpPklmICtkbnNab25lLnpvbmVOYW1lKyBpcyBhIHRva2VuLCB1c2UgK3Byb3ZpZGVkTmFtZSsgYXMtaXM8L2xpPlxuICogICAgICAgIDxsaT5JZiArcHJvdmlkZWROYW1lKyBlbmRzIHdpdGggb3IgZXF1YWxzICt6b25lTmFtZSssIGFwcGVuZCBhIHRyYWlsaW5nICsuKzwvbGk+XG4gKiAgICAgICAgPGxpPk90aGVyd2lzZSwgYXBwZW5kICsuKywgK3pvbmVOYW1lKyBhbmQgYSB0cmFpbGluZyArLis8L2xpPlxuICogICAgICA8L3VsPlxuICovXG5leHBvcnQgZnVuY3Rpb24gZGV0ZXJtaW5lRnVsbHlRdWFsaWZpZWREb21haW5OYW1lKFxuICBkbnNab25lOiBJRG5zWm9uZSxcbiAgcmVjb3JkTmFtZT86IHN0cmluZyxcbik6IHN0cmluZyB7XG4gIGlmICghcmVjb3JkTmFtZSkge1xuICAgIHJldHVybiBgJHtkbnNab25lLnpvbmVOYW1lfWA7XG4gIH1cblxuICBpZiAocmVjb3JkTmFtZS5lbmRzV2l0aChcIi5cIikgfHwgVG9rZW4uaXNVbnJlc29sdmVkKGRuc1pvbmUuem9uZU5hbWUpKSB7XG4gICAgcmV0dXJuIHJlY29yZE5hbWU7XG4gIH1cblxuICBjb25zdCB6b25lTmFtZSA9IGRuc1pvbmUuem9uZU5hbWUuZW5kc1dpdGgoXCIuXCIpXG4gICAgPyBkbnNab25lLnpvbmVOYW1lLnN1YnN0cmluZygwLCBkbnNab25lLnpvbmVOYW1lLmxlbmd0aCAtIDEpXG4gICAgOiBkbnNab25lLnpvbmVOYW1lO1xuXG4gIGNvbnN0IHN1ZmZpeCA9IGAuJHt6b25lTmFtZX1gO1xuICBpZiAocmVjb3JkTmFtZS5lbmRzV2l0aChzdWZmaXgpIHx8IHJlY29yZE5hbWUgPT09IHpvbmVOYW1lKSB7XG4gICAgcmV0dXJuIGAke3JlY29yZE5hbWV9LmA7XG4gIH1cblxuICByZXR1cm4gYCR7cmVjb3JkTmFtZX0ke3N1ZmZpeH0uYDtcbn1cbiJdfQ==
@@ -2,6 +2,7 @@ import { route53Zone } from "@cdktf/provider-aws";
2
2
  import { IResolvable } from "cdktf";
3
3
  import { Construct } from "constructs";
4
4
  import { IAwsConstruct, AwsConstructBase, AwsConstructProps } from "../";
5
+ import * as ec2 from "../compute";
5
6
  import { INetwork } from "../network";
6
7
  /**
7
8
  * Common properties to create a Route 53 hosted zone
@@ -33,6 +34,15 @@ export interface CommonDnsZoneProps extends AwsConstructProps {
33
34
  * Properties of a new hosted zone
34
35
  */
35
36
  export interface DnsZoneProps extends CommonDnsZoneProps {
37
+ /**
38
+ * A VPC that you want to associate with this hosted zone. When you specify
39
+ * this property, a private hosted zone will be created.
40
+ *
41
+ * You can associate additional VPCs to this private zone using `addVpc(vpc)`.
42
+ *
43
+ * @default public (no VPCs associated)
44
+ */
45
+ readonly vpcs?: ec2.IVpc[];
36
46
  /**
37
47
  * Networks that you want to associate with this hosted zone. When you specify
38
48
  * this property, a private hosted zone will be created.
@@ -43,6 +53,7 @@ export interface DnsZoneProps extends CommonDnsZoneProps {
43
53
  * You can associate additional networks to this private zone using `addNetwork(network)`.
44
54
  *
45
55
  * @default public (no networks associated)
56
+ * @deprecated use `vpcs` instead
46
57
  */
47
58
  readonly networks?: INetwork[];
48
59
  /**
@@ -142,11 +153,17 @@ export declare class DnsZone extends AwsConstructBase implements IDnsZone {
142
153
  readonly nameServers: string[];
143
154
  readonly primaryNameServer: string;
144
155
  /**
145
- * Networks to which this hosted zone will be added
156
+ * VPCs to which this hosted zone will be added
146
157
  */
147
- protected readonly networks: route53Zone.Route53ZoneVpc[];
158
+ protected readonly vpcs: route53Zone.Route53ZoneVpc[];
148
159
  protected readonly resource: route53Zone.Route53Zone;
149
160
  constructor(scope: Construct, id: string, props: DnsZoneProps);
161
+ /**
162
+ * Add another VPC to this private hosted zone.
163
+ *
164
+ * @param vpc the other VPC to add.
165
+ */
166
+ addVpc(vpc: ec2.IVpc): void;
150
167
  /**
151
168
  * Add another Network to this private hosted zone.
152
169
  *
@@ -154,6 +171,7 @@ export declare class DnsZone extends AwsConstructBase implements IDnsZone {
154
171
  * `aws_route53_zone_association` created outside this spec.
155
172
  *
156
173
  * @param network the other Network to add.
174
+ * @deprecated use addVpc instead
157
175
  */
158
176
  addNetwork(network: INetwork): void;
159
177
  }
@@ -1,7 +1,9 @@
1
1
  "use strict";
2
2
  var _a;
3
3
  Object.defineProperty(exports, "__esModule", { value: true });
4
- exports.validateZoneName = exports.makeHostedZoneArn = exports.DnsZone = void 0;
4
+ exports.DnsZone = void 0;
5
+ exports.makeHostedZoneArn = makeHostedZoneArn;
6
+ exports.validateZoneName = validateZoneName;
5
7
  const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
6
8
  const provider_aws_1 = require("@cdktf/provider-aws");
7
9
  const cdktf_1 = require("cdktf");
@@ -66,9 +68,9 @@ class DnsZone extends __1.AwsConstructBase {
66
68
  constructor(scope, id, props) {
67
69
  super(scope, id, props);
68
70
  /**
69
- * Networks to which this hosted zone will be added
71
+ * VPCs to which this hosted zone will be added
70
72
  */
71
- this.networks = new Array();
73
+ this.vpcs = new Array();
72
74
  validateZoneName(props.zoneName);
73
75
  // Add a dot at the end if the addTrailingDot property is not false.
74
76
  const zoneName = props.addTrailingDot === false || props.zoneName.endsWith(".")
@@ -78,9 +80,9 @@ class DnsZone extends __1.AwsConstructBase {
78
80
  name: zoneName,
79
81
  comment: props.comment,
80
82
  vpc: cdktf_1.Lazy.anyValue({
81
- produce: () => this.networks.length === 0
83
+ produce: () => this.vpcs.length === 0
82
84
  ? undefined
83
- : this.networks.map((n) => provider_aws_1.route53Zone.route53ZoneVpcToTerraform(n)),
85
+ : this.vpcs.map((n) => provider_aws_1.route53Zone.route53ZoneVpcToTerraform(n)),
84
86
  }),
85
87
  });
86
88
  this.zoneId = this.resource.id;
@@ -91,6 +93,9 @@ class DnsZone extends __1.AwsConstructBase {
91
93
  for (const vpc of props.networks || []) {
92
94
  this.addNetwork(vpc);
93
95
  }
96
+ for (const vpc of props.vpcs || []) {
97
+ this.addVpc(vpc);
98
+ }
94
99
  this._outputs = {
95
100
  zoneId: this.zoneId,
96
101
  zoneName: this.zoneName,
@@ -98,6 +103,17 @@ class DnsZone extends __1.AwsConstructBase {
98
103
  primaryNameServer: this.resource.primaryNameServer,
99
104
  };
100
105
  }
106
+ /**
107
+ * Add another VPC to this private hosted zone.
108
+ *
109
+ * @param vpc the other VPC to add.
110
+ */
111
+ addVpc(vpc) {
112
+ this.vpcs.push({
113
+ vpcId: vpc.vpcId,
114
+ vpcRegion: vpc.env.region,
115
+ });
116
+ }
101
117
  /**
102
118
  * Add another Network to this private hosted zone.
103
119
  *
@@ -105,9 +121,10 @@ class DnsZone extends __1.AwsConstructBase {
105
121
  * `aws_route53_zone_association` created outside this spec.
106
122
  *
107
123
  * @param network the other Network to add.
124
+ * @deprecated use addVpc instead
108
125
  */
109
126
  addNetwork(network) {
110
- this.networks.push({
127
+ this.vpcs.push({
111
128
  vpcId: network.vpcId,
112
129
  vpcRegion: network.env.region ?? __1.AwsStack.ofAwsConstruct(network).region,
113
130
  });
@@ -115,7 +132,7 @@ class DnsZone extends __1.AwsConstructBase {
115
132
  }
116
133
  exports.DnsZone = DnsZone;
117
134
  _a = JSII_RTTI_SYMBOL_1;
118
- DnsZone[_a] = { fqn: "terraconstructs.aws.edge.DnsZone", version: "0.0.11" };
135
+ DnsZone[_a] = { fqn: "terraconstructs.aws.edge.DnsZone", version: "0.0.12" };
119
136
  function makeHostedZoneArn(construct, hostedZoneId) {
120
137
  return __1.AwsStack.ofAwsConstruct(construct).formatArn({
121
138
  account: "",
@@ -125,7 +142,6 @@ function makeHostedZoneArn(construct, hostedZoneId) {
125
142
  resourceName: hostedZoneId,
126
143
  });
127
144
  }
128
- exports.makeHostedZoneArn = makeHostedZoneArn;
129
145
  /**
130
146
  * Validates a zone name is valid by Route53 specifc naming rules,
131
147
  * and that there is no trailing dot in the name.
@@ -145,5 +161,4 @@ function validateZoneName(zoneName) {
145
161
  throw new Error("zone names can only contain a-z, 0-9, -, ! \" # $ % & ' ( ) * + , - / : ; < = > ? @ [ ] ^ _ ` { | } ~ .");
146
162
  }
147
163
  }
148
- exports.validateZoneName = validateZoneName;
149
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG5zLXpvbmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXdzL2VkZ2UvZG5zLXpvbmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxzREFBc0U7QUFDdEUsaUNBQTBDO0FBRTFDLDJCQUthO0FBd0liOzs7R0FHRztBQUNILE1BQWEsT0FBUSxTQUFRLG9CQUFnQjtJQUMzQywrQ0FBK0M7SUFDL0M7Ozs7Ozs7O09BUUc7SUFDSSxNQUFNLENBQUMsVUFBVSxDQUN0QixLQUFnQixFQUNoQixFQUFVLEVBQ1YsTUFBYztRQUVkLE1BQU0sTUFBTyxTQUFRLG9CQUFnQjtZQUVuQyxJQUFXLGNBQWM7Z0JBQ3ZCLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQztZQUN2QixDQUFDO1lBQ0QsSUFBVyxPQUFPO2dCQUNoQixPQUFPLElBQUksQ0FBQyxjQUFjLENBQUM7WUFDN0IsQ0FBQztZQUVELElBQVcsUUFBUTtnQkFDakIsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQztZQUM5QixDQUFDO1lBQ0QsSUFBVyxHQUFHO2dCQUNaLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUM7WUFDN0IsQ0FBQztZQUNELElBQVcsV0FBVztnQkFDcEIsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQztZQUNyQyxDQUFDO1lBQ0QsSUFBVyxpQkFBaUI7Z0JBQzFCLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQztZQUMzQyxDQUFDO1lBRUQsWUFBWSxNQUFpQixFQUFFLEdBQVc7Z0JBQ3hDLEtBQUssQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDO2dCQWZULFdBQU0sR0FBRyxNQUFNLENBQUM7Z0JBZ0I5QixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksaUNBQWtCLENBQUMsa0JBQWtCLENBQ3pELElBQUksRUFDSixVQUFVLEVBQ1Y7b0JBQ0UsTUFBTTtp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LENBQUMsS0FBSztZQUNwQixTQUFTLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLElBQUksWUFBUSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNO1NBQ3pFLENBQUMsQ0FBQztJQUNMLENBQUM7O0FBdElILDBCQXVJQzs7O0FBRUQsU0FBZ0IsaUJBQWlCLENBQy9CLFNBQW9CLEVBQ3BCLFlBQW9CO0lBRXBCLE9BQU8sWUFBUSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxTQUFTLENBQUM7UUFDbEQsT0FBTyxFQUFFLEVBQUU7UUFDWCxNQUFNLEVBQUUsRUFBRTtRQUNWLE9BQU8sRUFBRSxTQUFTO1FBQ2xCLFFBQVEsRUFBRSxZQUFZO1FBQ3RCLFlBQVksRUFBRSxZQUFZO0tBQzNCLENBQUMsQ0FBQztBQUNMLENBQUM7QUFYRCw4Q0FXQztBQUVEOzs7Ozs7O0dBT0c7QUFDSCxTQUFnQixnQkFBZ0IsQ0FBQyxRQUFnQjtJQUMvQyxJQUFJLFFBQVEsQ0FBQyxNQUFNLEdBQUcsR0FBRyxFQUFFLENBQUM7UUFDMUIsTUFBTSxJQUFJLEtBQUssQ0FBQyw4Q0FBOEMsQ0FBQyxDQUFDO0lBQ2xFLENBQUM7SUFDRCxJQUFJLFFBQVEsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUM7UUFDM0QsTUFBTSxJQUFJLEtBQUssQ0FBQyxvREFBb0QsQ0FBQyxDQUFDO0lBQ3hFLENBQUM7SUFDRCxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxnREFBZ0QsQ0FBQyxFQUFFLENBQUM7UUFDdEUsTUFBTSxJQUFJLEtBQUssQ0FDYiwwR0FBMEcsQ0FDM0csQ0FBQztJQUNKLENBQUM7QUFDSCxDQUFDO0FBWkQsNENBWUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyByb3V0ZTUzWm9uZSwgZGF0YUF3c1JvdXRlNTNab25lIH0gZnJvbSBcIkBjZGt0Zi9wcm92aWRlci1hd3NcIjtcbmltcG9ydCB7IExhenksIElSZXNvbHZhYmxlIH0gZnJvbSBcImNka3RmXCI7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuaW1wb3J0IHtcbiAgQXdzU3RhY2ssXG4gIElBd3NDb25zdHJ1Y3QsXG4gIEF3c0NvbnN0cnVjdEJhc2UsXG4gIEF3c0NvbnN0cnVjdFByb3BzLFxufSBmcm9tIFwiLi4vXCI7XG5pbXBvcnQgeyBJTmV0d29yayB9IGZyb20gXCIuLi9uZXR3b3JrXCI7XG5cbi8vIHJlZjogaHR0cHM6Ly9naXRodWIuY29tL2F3cy9hd3MtY2RrL2Jsb2IvdjIuMTU2LjAvcGFja2FnZXMvYXdzLWNkay1saWIvYXdzLXJvdXRlNTMvbGliL2hvc3RlZC16b25lLnRzXG5cbi8qKlxuICogQ29tbW9uIHByb3BlcnRpZXMgdG8gY3JlYXRlIGEgUm91dGUgNTMgaG9zdGVkIHpvbmVcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb21tb25EbnNab25lUHJvcHMgZXh0ZW5kcyBBd3NDb25zdHJ1Y3RQcm9wcyB7XG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgZG9tYWluLiBGb3IgcmVzb3VyY2UgcmVjb3JkIHR5cGVzIHRoYXQgaW5jbHVkZSBhIGRvbWFpblxuICAgKiBuYW1lLCBzcGVjaWZ5IGEgZnVsbHkgcXVhbGlmaWVkIGRvbWFpbiBuYW1lLlxuICAgKi9cbiAgcmVhZG9ubHkgem9uZU5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogV2hldGhlciB0byBhZGQgYSB0cmFpbGluZyBkb3QgdG8gdGhlIHpvbmUgbmFtZS5cbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgYWRkVHJhaWxpbmdEb3Q/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBBbnkgY29tbWVudHMgdGhhdCB5b3Ugd2FudCB0byBpbmNsdWRlIGFib3V0IHRoZSBob3N0ZWQgem9uZS5cbiAgICpcbiAgICogQGRlZmF1bHQgbm9uZVxuICAgKi9cbiAgcmVhZG9ubHkgY29tbWVudD86IHN0cmluZztcblxuICAvKipcbiAgICogRG9jcyBhdCBUZXJyYWZvcm0gUmVnaXN0cnk6IHtAbGluayBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvaGFzaGljb3JwL2F3cy81LjYwLjAvZG9jcy9yZXNvdXJjZXMvcm91dGU1M196b25lI2ZvcmNlX2Rlc3Ryb3kgUm91dGU1M1pvbmUjZm9yY2VfZGVzdHJveX1cbiAgICovXG4gIHJlYWRvbmx5IGZvcmNlRGVzdHJveT86IGJvb2xlYW4gfCBJUmVzb2x2YWJsZTtcbn1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIG9mIGEgbmV3IGhvc3RlZCB6b25lXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRG5zWm9uZVByb3BzIGV4dGVuZHMgQ29tbW9uRG5zWm9uZVByb3BzIHtcbiAgLyoqXG4gICAqIE5ldHdvcmtzIHRoYXQgeW91IHdhbnQgdG8gYXNzb2NpYXRlIHdpdGggdGhpcyBob3N0ZWQgem9uZS4gV2hlbiB5b3Ugc3BlY2lmeVxuICAgKiB0aGlzIHByb3BlcnR5LCBhIHByaXZhdGUgaG9zdGVkIHpvbmUgd2lsbCBiZSBjcmVhdGVkLlxuICAgKlxuICAgKiBDb25mbGljdHMgd2l0aCB0aGUgYGRlbGVnYXRpb25TZXRJZGAgYW5kIGFueSBgYXdzX3JvdXRlNTNfem9uZV9hc3NvY2lhdGlvbmBcbiAgICogcmVzb3VyY2Ugc3BlY2lmeWluZyB0aGUgc2FtZSB6b25lIElELlxuICAgKlxuICAgKiBZb3UgY2FuIGFzc29jaWF0ZSBhZGRpdGlvbmFsIG5ldHdvcmtzIHRvIHRoaXMgcHJpdmF0ZSB6b25lIHVzaW5nIGBhZGROZXR3b3JrKG5ldHdvcmspYC5cbiAgICpcbiAgICogQGRlZmF1bHQgcHVibGljIChubyBuZXR3b3JrcyBhc3NvY2lhdGVkKVxuICAgKi9cbiAgcmVhZG9ubHkgbmV0d29ya3M/OiBJTmV0d29ya1tdO1xuXG4gIC8qKlxuICAgKiBEZWxlZ2F0aW9uIHNldCBJRCBmb3IgdGhlIHByaXZhdGUgaG9zdGVkIHpvbmUuXG4gICAqXG4gICAqIFRoZSBJRCBvZiB0aGUgcmV1c2FibGUgZGVsZWdhdGlvbiBzZXQgd2hvc2UgTlMgcmVjb3JkcyB5b3Ugd2FudCB0byBhc3NpZ24gdG8gdGhlIGhvc3RlZCB6b25lLlxuICAgKlxuICAgKiBDb25mbGljdHMgd2l0aCB2cGMgYXMgZGVsZWdhdGlvbiBzZXRzIGNhbiBvbmx5IGJlIHVzZWQgZm9yIHB1YmxpYyB6b25lcy5cbiAgICovXG4gIHJlYWRvbmx5IGRlbGVnYXRpb25TZXRJZD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBPdXRwdXRzIHdoaWNoIG1heSBiZSByZWdpc3RlcmVkIGZvciBvdXRwdXQgdmlhIHRoZSBHcmlkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIERuc1pvbmVPdXRwdXRzIHtcbiAgLyoqXG4gICAqIElkZW50aWZpZXIgb2YgdGhlIGhvc3RlZCB6b25lXG4gICAqL1xuICByZWFkb25seSB6b25lSWQ6IHN0cmluZztcblxuICAvKipcbiAgICogTmFtZSBvZiB0aGUgaG9zdGVkIHpvbmVcbiAgICovXG4gIHJlYWRvbmx5IHpvbmVOYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIHNldCBvZiBuYW1lIHNlcnZlcnMgZm9yIHRoZSBzcGVjaWZpYyBob3N0ZWQgem9uZS4gRm9yIGV4YW1wbGU6XG4gICAqIG5zMS5leGFtcGxlLmNvbS5cbiAgICpcbiAgICogVGhpcyBhdHRyaWJ1dGUgd2lsbCBiZSB1bmRlZmluZWQgZm9yIHByaXZhdGUgaG9zdGVkIHpvbmVzIG9yIGhvc3RlZCB6b25lcyBpbXBvcnRlZCBmcm9tIGFub3RoZXIgc3RhY2suXG4gICAqXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHJlYWRvbmx5IG5hbWVTZXJ2ZXJzOiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogVGhlIFJvdXRlIDUzIG5hbWUgc2VydmVyIHRoYXQgY3JlYXRlZCB0aGUgU09BIHJlY29yZC5cbiAgICovXG4gIHJlYWRvbmx5IHByaW1hcnlOYW1lU2VydmVyOiBzdHJpbmc7XG59XG5cbi8qKlxuICogSW1wb3J0ZWQgb3IgY3JlYXRlZCBETlMgem9uZSBhdHRyaWJ1dGVzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSURuc1pvbmUgZXh0ZW5kcyBJQXdzQ29uc3RydWN0IHtcbiAgLyoqIFN0cm9uZ2x5IHR5cGVkIG91dHB1dHMgKi9cbiAgcmVhZG9ubHkgZG5zWm9uZU91dHB1dHM6IERuc1pvbmVPdXRwdXRzO1xuXG4gIC8qKlxuICAgKiBJRCBvZiB0aGlzIGhvc3RlZCB6b25lLCBzdWNoIGFzIFwiWjIzQUJDNFhZWkwwNUJcIlxuICAgKlxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICByZWFkb25seSB6b25lSWQ6IHN0cmluZztcblxuICAvKipcbiAgICogRlFETiBvZiB0aGlzIGhvc3RlZCB6b25lXG4gICAqL1xuICByZWFkb25seSB6b25lTmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBUk4gb2YgdGhpcyBob3N0ZWQgem9uZSwgc3VjaCBhcyBhcm46JHtQYXJ0aXRpb259OnJvdXRlNTM6Ojpob3N0ZWR6b25lLyR7SWR9XG4gICAqXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHJlYWRvbmx5IGFybjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBIGxpc3Qgb2YgbmFtZSBzZXJ2ZXJzIGluIGFzc29jaWF0ZWQgKG9yIGRlZmF1bHQpIGRlbGVnYXRpb24gc2V0LlxuICAgKiBGaW5kIG1vcmUgYWJvdXQgZGVsZWdhdGlvbiBzZXRzIGluIFtBV1MgZG9jc11bZGVsZWdhdGlvbiBzZXQgZG9jc10uXG4gICAqXG4gICAqIFJldHVybnMgdGhlIHNldCBvZiBuYW1lIHNlcnZlcnMgZm9yIHRoZSBzcGVjaWZpYyBob3N0ZWQgem9uZS4gRm9yIGV4YW1wbGU6XG4gICAqIG5zMS5leGFtcGxlLmNvbS5cbiAgICpcbiAgICogW2RlbGVnYXRpb24gc2V0IGRvY3NdOiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vUm91dGU1My9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvZG5zLWNvbmZpZ3VyaW5nLWRlbGVnYXRpb24tc2V0Lmh0bWxcbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcmVhZG9ubHkgbmFtZVNlcnZlcnM6IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBUaGUgUm91dGUgNTMgbmFtZSBzZXJ2ZXIgdGhhdCBjcmVhdGVkIHRoZSBTT0EgcmVjb3JkLlxuICAgKi9cbiAgcmVhZG9ubHkgcHJpbWFyeU5hbWVTZXJ2ZXI6IHN0cmluZztcbn1cblxuLyoqXG4gKiBDb250YWluZXIgZm9yIHJlY29yZHMsIGFuZCByZWNvcmRzIGNvbnRhaW4gaW5mb3JtYXRpb24gYWJvdXQgaG93IHRvIHJvdXRlIHRyYWZmaWMgZm9yIGFcbiAqIHNwZWNpZmljIGRvbWFpbiwgc3VjaCBhcyBleGFtcGxlLmNvbSBhbmQgaXRzIHN1YmRvbWFpbnMgKGFjbWUuZXhhbXBsZS5jb20sIHplbml0aC5leGFtcGxlLmNvbSlcbiAqL1xuZXhwb3J0IGNsYXNzIERuc1pvbmUgZXh0ZW5kcyBBd3NDb25zdHJ1Y3RCYXNlIGltcGxlbWVudHMgSURuc1pvbmUge1xuICAvLyBUT0RPOiBBZGQgXCJmcm9tIEdyaWQgTG9va3VwXCIgc3RhdGljIG1ldGhvZHM/XG4gIC8qKlxuICAgKiBJbXBvcnQgYSBSb3V0ZSA1MyBob3N0ZWQgem9uZSBkZWZpbmVkIGVpdGhlciBvdXRzaWRlIG9mIFRlcnJhQ29uc3RydWN0LCBvciBmcm9tIEdyaWQgTG9va3VwXG4gICAqXG4gICAqIFVzZSB3aGVuIGhvc3RlZCB6b25lIElEIGlzIGtub3duLlxuICAgKlxuICAgKiBAcGFyYW0gc2NvcGUgdGhlIHBhcmVudCBDb25zdHJ1Y3QgZm9yIHRoaXMgQ29uc3RydWN0XG4gICAqIEBwYXJhbSBpZCAgdGhlIGxvZ2ljYWwgbmFtZSBvZiB0aGlzIENvbnN0cnVjdFxuICAgKiBAcGFyYW0gem9uZUlkIHRoZSBJRCBvZiB0aGUgaG9zdGVkIHpvbmUgdG8gaW1wb3J0XG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGZyb21ab25lSWQoXG4gICAgc2NvcGU6IENvbnN0cnVjdCxcbiAgICBpZDogc3RyaW5nLFxuICAgIHpvbmVJZDogc3RyaW5nLFxuICApOiBJRG5zWm9uZSB7XG4gICAgY2xhc3MgSW1wb3J0IGV4dGVuZHMgQXdzQ29uc3RydWN0QmFzZSBpbXBsZW1lbnRzIElEbnNab25lIHtcbiAgICAgIHByaXZhdGUgcmVhZG9ubHkgX291dHB1dHM6IERuc1pvbmVPdXRwdXRzO1xuICAgICAgcHVibGljIGdldCBkbnNab25lT3V0cHV0cygpOiBEbnNab25lT3V0cHV0cyB7XG4gICAgICAgIHJldHVybiB0aGlzLl9vdXRwdXRzO1xuICAgICAgfVxuICAgICAgcHVibGljIGdldCBvdXRwdXRzKCk6IFJlY29yZDxzdHJpbmcsIGFueT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5kbnNab25lT3V0cHV0cztcbiAgICAgIH1cbiAgICAgIHB1YmxpYyByZWFkb25seSB6b25lSWQgPSB6b25lSWQ7XG4gICAgICBwdWJsaWMgZ2V0IHpvbmVOYW1lKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLmRhdGFzb3VyY2UubmFtZTtcbiAgICAgIH1cbiAgICAgIHB1YmxpYyBnZXQgYXJuKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLmRhdGFzb3VyY2UuYXJuO1xuICAgICAgfVxuICAgICAgcHVibGljIGdldCBuYW1lU2VydmVycygpOiBzdHJpbmdbXSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRhdGFzb3VyY2UubmFtZVNlcnZlcnM7XG4gICAgICB9XG4gICAgICBwdWJsaWMgZ2V0IHByaW1hcnlOYW1lU2VydmVyKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLmRhdGFzb3VyY2UucHJpbWFyeU5hbWVTZXJ2ZXI7XG4gICAgICB9XG4gICAgICBwcml2YXRlIHJlYWRvbmx5IGRhdGFzb3VyY2U6IGRhdGFBd3NSb3V0ZTUzWm9uZS5EYXRhQXdzUm91dGU1M1pvbmU7XG4gICAgICBjb25zdHJ1Y3Rvcihfc2NvcGU6IENvbnN0cnVjdCwgX2lkOiBzdHJpbmcpIHtcbiAgICAgICAgc3VwZXIoX3Njb3BlLCBfaWQsIHt9KTtcbiAgICAgICAgdGhpcy5kYXRhc291cmNlID0gbmV3IGRhdGFBd3NSb3V0ZTUzWm9uZS5EYXRhQXdzUm91dGU1M1pvbmUoXG4gICAgICAgICAgdGhpcyxcbiAgICAgICAgICBcIlJlc291cmNlXCIsXG4gICAgICAgICAge1xuICAgICAgICAgICAgem9uZUlkLFxuICAgICAgICAgIH0sXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuX291dHB1dHMgPSB7XG4gICAgICAgICAgem9uZUlkOiB6b25lSWQsXG4gICAgICAgICAgem9uZU5hbWU6IHRoaXMuZGF0YXNvdXJjZS5uYW1lLFxuICAgICAgICAgIG5hbWVTZXJ2ZXJzOiB0aGlzLmRhdGFzb3VyY2UubmFtZVNlcnZlcnMsXG4gICAgICAgICAgcHJpbWFyeU5hbWVTZXJ2ZXI6IHRoaXMuZGF0YXNvdXJjZS5wcmltYXJ5TmFtZVNlcnZlcixcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IEltcG9ydChzY29wZSwgaWQpO1xuICB9XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfb3V0cHV0czogRG5zWm9uZU91dHB1dHM7XG4gIHB1YmxpYyBnZXQgZG5zWm9uZU91dHB1dHMoKTogRG5zWm9uZU91dHB1dHMge1xuICAgIHJldHVybiB0aGlzLl9vdXRwdXRzO1xuICB9XG4gIHB1YmxpYyBnZXQgb3V0cHV0cygpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5kbnNab25lT3V0cHV0cztcbiAgfVxuICBwdWJsaWMgcmVhZG9ubHkgem9uZUlkOiBzdHJpbmc7XG4gIHB1YmxpYyByZWFkb25seSBhcm46IHN0cmluZztcbiAgcHVibGljIHJlYWRvbmx5IHpvbmVOYW1lOiBzdHJpbmc7XG4gIHB1YmxpYyByZWFkb25seSBuYW1lU2VydmVyczogc3RyaW5nW107XG4gIHB1YmxpYyByZWFkb25seSBwcmltYXJ5TmFtZVNlcnZlcjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBOZXR3b3JrcyB0byB3aGljaCB0aGlzIGhvc3RlZCB6b25lIHdpbGwgYmUgYWRkZWRcbiAgICovXG4gIHByb3RlY3RlZCByZWFkb25seSBuZXR3b3JrcyA9IG5ldyBBcnJheTxyb3V0ZTUzWm9uZS5Sb3V0ZTUzWm9uZVZwYz4oKTtcblxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgcmVzb3VyY2U6IHJvdXRlNTNab25lLlJvdXRlNTNab25lO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBEbnNab25lUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIHByb3BzKTtcblxuICAgIHZhbGlkYXRlWm9uZU5hbWUocHJvcHMuem9uZU5hbWUpO1xuXG4gICAgLy8gQWRkIGEgZG90IGF0IHRoZSBlbmQgaWYgdGhlIGFkZFRyYWlsaW5nRG90IHByb3BlcnR5IGlzIG5vdCBmYWxzZS5cbiAgICBjb25zdCB6b25lTmFtZSA9XG4gICAgICBwcm9wcy5hZGRUcmFpbGluZ0RvdCA9PT0gZmFsc2UgfHwgcHJvcHMuem9uZU5hbWUuZW5kc1dpdGgoXCIuXCIpXG4gICAgICAgID8gcHJvcHMuem9uZU5hbWVcbiAgICAgICAgOiBgJHtwcm9wcy56b25lTmFtZX0uYDtcblxuICAgIHRoaXMucmVzb3VyY2UgPSBuZXcgcm91dGU1M1pvbmUuUm91dGU1M1pvbmUodGhpcywgXCJSZXNvdXJjZVwiLCB7XG4gICAgICBuYW1lOiB6b25lTmFtZSxcbiAgICAgIGNvbW1lbnQ6IHByb3BzLmNvbW1lbnQsXG4gICAgICB2cGM6IExhenkuYW55VmFsdWUoe1xuICAgICAgICBwcm9kdWNlOiAoKSA9PlxuICAgICAgICAgIHRoaXMubmV0d29ya3MubGVuZ3RoID09PSAwXG4gICAgICAgICAgICA/IHVuZGVmaW5lZFxuICAgICAgICAgICAgOiB0aGlzLm5ldHdvcmtzLm1hcCgobikgPT5cbiAgICAgICAgICAgICAgICByb3V0ZTUzWm9uZS5yb3V0ZTUzWm9uZVZwY1RvVGVycmFmb3JtKG4pLFxuICAgICAgICAgICAgICApLFxuICAgICAgfSksXG4gICAgfSk7XG5cbiAgICB0aGlzLnpvbmVJZCA9IHRoaXMucmVzb3VyY2UuaWQ7XG4gICAgdGhpcy5hcm4gPSB0aGlzLnJlc291cmNlLmFybjtcbiAgICB0aGlzLm5hbWVTZXJ2ZXJzID0gdGhpcy5yZXNvdXJjZS5uYW1lU2VydmVycztcbiAgICB0aGlzLnByaW1hcnlOYW1lU2VydmVyID0gdGhpcy5yZXNvdXJjZS5wcmltYXJ5TmFtZVNlcnZlcjtcbiAgICB0aGlzLnpvbmVOYW1lID0gcHJvcHMuem9uZU5hbWU7XG5cbiAgICBmb3IgKGNvbnN0IHZwYyBvZiBwcm9wcy5uZXR3b3JrcyB8fCBbXSkge1xuICAgICAgdGhpcy5hZGROZXR3b3JrKHZwYyk7XG4gICAgfVxuXG4gICAgdGhpcy5fb3V0cHV0cyA9IHtcbiAgICAgIHpvbmVJZDogdGhpcy56b25lSWQsXG4gICAgICB6b25lTmFtZTogdGhpcy56b25lTmFtZSxcbiAgICAgIG5hbWVTZXJ2ZXJzOiB0aGlzLm5hbWVTZXJ2ZXJzLFxuICAgICAgcHJpbWFyeU5hbWVTZXJ2ZXI6IHRoaXMucmVzb3VyY2UucHJpbWFyeU5hbWVTZXJ2ZXIsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgYW5vdGhlciBOZXR3b3JrIHRvIHRoaXMgcHJpdmF0ZSBob3N0ZWQgem9uZS5cbiAgICpcbiAgICogVGhpcyBjb25mbGljdHMgd2l0aCB0aGUgYGRlbGVnYXRpb25TZXRJZGAgYW5kIGFueVxuICAgKiBgYXdzX3JvdXRlNTNfem9uZV9hc3NvY2lhdGlvbmAgY3JlYXRlZCBvdXRzaWRlIHRoaXMgc3BlYy5cbiAgICpcbiAgICogQHBhcmFtIG5ldHdvcmsgdGhlIG90aGVyIE5ldHdvcmsgdG8gYWRkLlxuICAgKi9cbiAgcHVibGljIGFkZE5ldHdvcmsobmV0d29yazogSU5ldHdvcmspIHtcbiAgICB0aGlzLm5ldHdvcmtzLnB1c2goe1xuICAgICAgdnBjSWQ6IG5ldHdvcmsudnBjSWQsXG4gICAgICB2cGNSZWdpb246IG5ldHdvcmsuZW52LnJlZ2lvbiA/PyBBd3NTdGFjay5vZkF3c0NvbnN0cnVjdChuZXR3b3JrKS5yZWdpb24sXG4gICAgfSk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1ha2VIb3N0ZWRab25lQXJuKFxuICBjb25zdHJ1Y3Q6IENvbnN0cnVjdCxcbiAgaG9zdGVkWm9uZUlkOiBzdHJpbmcsXG4pOiBzdHJpbmcge1xuICByZXR1cm4gQXdzU3RhY2sub2ZBd3NDb25zdHJ1Y3QoY29uc3RydWN0KS5mb3JtYXRBcm4oe1xuICAgIGFjY291bnQ6IFwiXCIsXG4gICAgcmVnaW9uOiBcIlwiLFxuICAgIHNlcnZpY2U6IFwicm91dGU1M1wiLFxuICAgIHJlc291cmNlOiBcImhvc3RlZHpvbmVcIixcbiAgICByZXNvdXJjZU5hbWU6IGhvc3RlZFpvbmVJZCxcbiAgfSk7XG59XG5cbi8qKlxuICogVmFsaWRhdGVzIGEgem9uZSBuYW1lIGlzIHZhbGlkIGJ5IFJvdXRlNTMgc3BlY2lmYyBuYW1pbmcgcnVsZXMsXG4gKiBhbmQgdGhhdCB0aGVyZSBpcyBubyB0cmFpbGluZyBkb3QgaW4gdGhlIG5hbWUuXG4gKlxuICogQHBhcmFtIHpvbmVOYW1lIHRoZSB6b25lIG5hbWUgdG8gYmUgdmFsaWRhdGVkLlxuICogQHJldHVybnMgK3pvbmVOYW1lK1xuICogQHRocm93cyBWYWxpZGF0aW9uRXJyb3IgaWYgdGhlIG5hbWUgaXMgbm90IHZhbGlkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVab25lTmFtZSh6b25lTmFtZTogc3RyaW5nKSB7XG4gIGlmICh6b25lTmFtZS5sZW5ndGggPiAyNTUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJ6b25lIG5hbWUgY2Fubm90IGJlIG1vcmUgdGhhbiAyNTUgYnl0ZXMgbG9uZ1wiKTtcbiAgfVxuICBpZiAoem9uZU5hbWUuc3BsaXQoXCIuXCIpLmZpbmQoKGxhYmVsKSA9PiBsYWJlbC5sZW5ndGggPiA2MykpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJ6b25lIG5hbWUgbGFiZWxzIGNhbm5vdCBiZSBtb3JlIHRoYW4gNjMgYnl0ZXMgbG9uZ1wiKTtcbiAgfVxuICBpZiAoIXpvbmVOYW1lLm1hdGNoKC9eW2EtejAtOSFcIiMkJSYnKCkqKywvOjs8PT4/QFtcXFxcXFxdXl9ge3x9fi4tXSskL2kpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgXCJ6b25lIG5hbWVzIGNhbiBvbmx5IGNvbnRhaW4gYS16LCAwLTksIC0sICEgXFxcIiAjICQgJSAmICcgKCApICogKyAsIC0gLyA6IDsgPCA9ID4gPyBAIFsgIF0gXiBfIGAgeyB8IH0gfiAuXCIsXG4gICAgKTtcbiAgfVxufVxuIl19
164
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG5zLXpvbmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXdzL2VkZ2UvZG5zLXpvbmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQXdUQSw4Q0FXQztBQVVELDRDQVlDOztBQXpWRCxzREFBc0U7QUFDdEUsaUNBQTBDO0FBRTFDLDJCQUthO0FBb0piOzs7R0FHRztBQUNILE1BQWEsT0FBUSxTQUFRLG9CQUFnQjtJQUMzQywrQ0FBK0M7SUFDL0M7Ozs7Ozs7O09BUUc7SUFDSSxNQUFNLENBQUMsVUFBVSxDQUN0QixLQUFnQixFQUNoQixFQUFVLEVBQ1YsTUFBYztRQUVkLE1BQU0sTUFBTyxTQUFRLG9CQUFnQjtZQUVuQyxJQUFXLGNBQWM7Z0JBQ3ZCLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQztZQUN2QixDQUFDO1lBQ0QsSUFBVyxPQUFPO2dCQUNoQixPQUFPLElBQUksQ0FBQyxjQUFjLENBQUM7WUFDN0IsQ0FBQztZQUVELElBQVcsUUFBUTtnQkFDakIsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQztZQUM5QixDQUFDO1lBQ0QsSUFBVyxHQUFHO2dCQUNaLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUM7WUFDN0IsQ0FBQztZQUNELElBQVcsV0FBVztnQkFDcEIsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQztZQUNyQyxDQUFDO1lBQ0QsSUFBVyxpQkFBaUI7Z0JBQzFCLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQztZQUMzQyxDQUFDO1lBRUQsWUFBWSxNQUFpQixFQUFFLEdBQVc7Z0JBQ3hDLEtBQUssQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDO2dCQWZULFdBQU0sR0FBRyxNQUFNLENBQUM7Z0JBZ0I5QixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksaUNBQWtCLENBQUMsa0JBQWtCLENBQ3pELElBQUksRUFD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QyxNQUFNLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQztRQUMzRCxNQUFNLElBQUksS0FBSyxDQUFDLG9EQUFvRCxDQUFDLENBQUM7SUFDeEUsQ0FBQztJQUNELElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLGdEQUFnRCxDQUFDLEVBQUUsQ0FBQztRQUN0RSxNQUFNLElBQUksS0FBSyxDQUNiLDBHQUEwRyxDQUMzRyxDQUFDO0lBQ0osQ0FBQztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyByb3V0ZTUzWm9uZSwgZGF0YUF3c1JvdXRlNTNab25lIH0gZnJvbSBcIkBjZGt0Zi9wcm92aWRlci1hd3NcIjtcbmltcG9ydCB7IExhenksIElSZXNvbHZhYmxlIH0gZnJvbSBcImNka3RmXCI7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuaW1wb3J0IHtcbiAgQXdzU3RhY2ssXG4gIElBd3NDb25zdHJ1Y3QsXG4gIEF3c0NvbnN0cnVjdEJhc2UsXG4gIEF3c0NvbnN0cnVjdFByb3BzLFxufSBmcm9tIFwiLi4vXCI7XG5pbXBvcnQgKiBhcyBlYzIgZnJvbSBcIi4uL2NvbXB1dGVcIjtcbmltcG9ydCB7IElOZXR3b3JrIH0gZnJvbSBcIi4uL25ldHdvcmtcIjtcblxuLy8gcmVmOiBodHRwczovL2dpdGh1Yi5jb20vYXdzL2F3cy1jZGsvYmxvYi92Mi4xNTYuMC9wYWNrYWdlcy9hd3MtY2RrLWxpYi9hd3Mtcm91dGU1My9saWIvaG9zdGVkLXpvbmUudHNcblxuLyoqXG4gKiBDb21tb24gcHJvcGVydGllcyB0byBjcmVhdGUgYSBSb3V0ZSA1MyBob3N0ZWQgem9uZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbW1vbkRuc1pvbmVQcm9wcyBleHRlbmRzIEF3c0NvbnN0cnVjdFByb3BzIHtcbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBkb21haW4uIEZvciByZXNvdXJjZSByZWNvcmQgdHlwZXMgdGhhdCBpbmNsdWRlIGEgZG9tYWluXG4gICAqIG5hbWUsIHNwZWNpZnkgYSBmdWxseSBxdWFsaWZpZWQgZG9tYWluIG5hbWUuXG4gICAqL1xuICByZWFkb25seSB6b25lTmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGFkZCBhIHRyYWlsaW5nIGRvdCB0byB0aGUgem9uZSBuYW1lLlxuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICByZWFkb25seSBhZGRUcmFpbGluZ0RvdD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEFueSBjb21tZW50cyB0aGF0IHlvdSB3YW50IHRvIGluY2x1ZGUgYWJvdXQgdGhlIGhvc3RlZCB6b25lLlxuICAgKlxuICAgKiBAZGVmYXVsdCBub25lXG4gICAqL1xuICByZWFkb25seSBjb21tZW50Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBEb2NzIGF0IFRlcnJhZm9ybSBSZWdpc3RyeToge0BsaW5rIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9oYXNoaWNvcnAvYXdzLzUuNjAuMC9kb2NzL3Jlc291cmNlcy9yb3V0ZTUzX3pvbmUjZm9yY2VfZGVzdHJveSBSb3V0ZTUzWm9uZSNmb3JjZV9kZXN0cm95fVxuICAgKi9cbiAgcmVhZG9ubHkgZm9yY2VEZXN0cm95PzogYm9vbGVhbiB8IElSZXNvbHZhYmxlO1xufVxuXG4vKipcbiAqIFByb3BlcnRpZXMgb2YgYSBuZXcgaG9zdGVkIHpvbmVcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEbnNab25lUHJvcHMgZXh0ZW5kcyBDb21tb25EbnNab25lUHJvcHMge1xuICAvKipcbiAgICogQSBWUEMgdGhhdCB5b3Ugd2FudCB0byBhc3NvY2lhdGUgd2l0aCB0aGlzIGhvc3RlZCB6b25lLiBXaGVuIHlvdSBzcGVjaWZ5XG4gICAqIHRoaXMgcHJvcGVydHksIGEgcHJpdmF0ZSBob3N0ZWQgem9uZSB3aWxsIGJlIGNyZWF0ZWQuXG4gICAqXG4gICAqIFlvdSBjYW4gYXNzb2NpYXRlIGFkZGl0aW9uYWwgVlBDcyB0byB0aGlzIHByaXZhdGUgem9uZSB1c2luZyBgYWRkVnBjKHZwYylgLlxuICAgKlxuICAgKiBAZGVmYXVsdCBwdWJsaWMgKG5vIFZQQ3MgYXNzb2NpYXRlZClcbiAgICovXG4gIHJlYWRvbmx5IHZwY3M/OiBlYzIuSVZwY1tdO1xuXG4gIC8qKlxuICAgKiBOZXR3b3JrcyB0aGF0IHlvdSB3YW50IHRvIGFzc29jaWF0ZSB3aXRoIHRoaXMgaG9zdGVkIHpvbmUuIFdoZW4geW91IHNwZWNpZnlcbiAgICogdGhpcyBwcm9wZXJ0eSwgYSBwcml2YXRlIGhvc3RlZCB6b25lIHdpbGwgYmUgY3JlYXRlZC5cbiAgICpcbiAgICogQ29uZmxpY3RzIHdpdGggdGhlIGBkZWxlZ2F0aW9uU2V0SWRgIGFuZCBhbnkgYGF3c19yb3V0ZTUzX3pvbmVfYXNzb2NpYXRpb25gXG4gICAqIHJlc291cmNlIHNwZWNpZnlpbmcgdGhlIHNhbWUgem9uZSBJRC5cbiAgICpcbiAgICogWW91IGNhbiBhc3NvY2lhdGUgYWRkaXRpb25hbCBuZXR3b3JrcyB0byB0aGlzIHByaXZhdGUgem9uZSB1c2luZyBgYWRkTmV0d29yayhuZXR3b3JrKWAuXG4gICAqXG4gICAqIEBkZWZhdWx0IHB1YmxpYyAobm8gbmV0d29ya3MgYXNzb2NpYXRlZClcbiAgICogQGRlcHJlY2F0ZWQgdXNlIGB2cGNzYCBpbnN0ZWFkXG4gICAqL1xuICByZWFkb25seSBuZXR3b3Jrcz86IElOZXR3b3JrW107XG5cbiAgLyoqXG4gICAqIERlbGVnYXRpb24gc2V0IElEIGZvciB0aGUgcHJpdmF0ZSBob3N0ZWQgem9uZS5cbiAgICpcbiAgICogVGhlIElEIG9mIHRoZSByZXVzYWJsZSBkZWxlZ2F0aW9uIHNldCB3aG9zZSBOUyByZWNvcmRzIHlvdSB3YW50IHRvIGFzc2lnbiB0byB0aGUgaG9zdGVkIHpvbmUuXG4gICAqXG4gICAqIENvbmZsaWN0cyB3aXRoIHZwYyBhcyBkZWxlZ2F0aW9uIHNldHMgY2FuIG9ubHkgYmUgdXNlZCBmb3IgcHVibGljIHpvbmVzLlxuICAgKi9cbiAgcmVhZG9ubHkgZGVsZWdhdGlvblNldElkPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIE91dHB1dHMgd2hpY2ggbWF5IGJlIHJlZ2lzdGVyZWQgZm9yIG91dHB1dCB2aWEgdGhlIEdyaWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRG5zWm9uZU91dHB1dHMge1xuICAvKipcbiAgICogSWRlbnRpZmllciBvZiB0aGUgaG9zdGVkIHpvbmVcbiAgICovXG4gIHJlYWRvbmx5IHpvbmVJZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBOYW1lIG9mIHRoZSBob3N0ZWQgem9uZVxuICAgKi9cbiAgcmVhZG9ubHkgem9uZU5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgc2V0IG9mIG5hbWUgc2VydmVycyBmb3IgdGhlIHNwZWNpZmljIGhvc3RlZCB6b25lLiBGb3IgZXhhbXBsZTpcbiAgICogbnMxLmV4YW1wbGUuY29tLlxuICAgKlxuICAgKiBUaGlzIGF0dHJpYnV0ZSB3aWxsIGJlIHVuZGVmaW5lZCBmb3IgcHJpdmF0ZSBob3N0ZWQgem9uZXMgb3IgaG9zdGVkIHpvbmVzIGltcG9ydGVkIGZyb20gYW5vdGhlciBzdGFjay5cbiAgICpcbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcmVhZG9ubHkgbmFtZVNlcnZlcnM6IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBUaGUgUm91dGUgNTMgbmFtZSBzZXJ2ZXIgdGhhdCBjcmVhdGVkIHRoZSBTT0EgcmVjb3JkLlxuICAgKi9cbiAgcmVhZG9ubHkgcHJpbWFyeU5hbWVTZXJ2ZXI6IHN0cmluZztcbn1cblxuLyoqXG4gKiBJbXBvcnRlZCBvciBjcmVhdGVkIEROUyB6b25lIGF0dHJpYnV0ZXNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJRG5zWm9uZSBleHRlbmRzIElBd3NDb25zdHJ1Y3Qge1xuICAvKiogU3Ryb25nbHkgdHlwZWQgb3V0cHV0cyAqL1xuICByZWFkb25seSBkbnNab25lT3V0cHV0czogRG5zWm9uZU91dHB1dHM7XG5cbiAgLyoqXG4gICAqIElEIG9mIHRoaXMgaG9zdGVkIHpvbmUsIHN1Y2ggYXMgXCJaMjNBQkM0WFlaTDA1QlwiXG4gICAqXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHJlYWRvbmx5IHpvbmVJZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBGUUROIG9mIHRoaXMgaG9zdGVkIHpvbmVcbiAgICovXG4gIHJlYWRvbmx5IHpvbmVOYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEFSTiBvZiB0aGlzIGhvc3RlZCB6b25lLCBzdWNoIGFzIGFybjoke1BhcnRpdGlvbn06cm91dGU1Mzo6Omhvc3RlZHpvbmUvJHtJZH1cbiAgICpcbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcmVhZG9ubHkgYXJuOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEEgbGlzdCBvZiBuYW1lIHNlcnZlcnMgaW4gYXNzb2NpYXRlZCAob3IgZGVmYXVsdCkgZGVsZWdhdGlvbiBzZXQuXG4gICAqIEZpbmQgbW9yZSBhYm91dCBkZWxlZ2F0aW9uIHNldHMgaW4gW0FXUyBkb2NzXVtkZWxlZ2F0aW9uIHNldCBkb2NzXS5cbiAgICpcbiAgICogUmV0dXJucyB0aGUgc2V0IG9mIG5hbWUgc2VydmVycyBmb3IgdGhlIHNwZWNpZmljIGhvc3RlZCB6b25lLiBGb3IgZXhhbXBsZTpcbiAgICogbnMxLmV4YW1wbGUuY29tLlxuICAgKlxuICAgKiBbZGVsZWdhdGlvbiBzZXQgZG9jc106IGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9Sb3V0ZTUzL2xhdGVzdC9EZXZlbG9wZXJHdWlkZS9kbnMtY29uZmlndXJpbmctZGVsZWdhdGlvbi1zZXQuaHRtbFxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICByZWFkb25seSBuYW1lU2VydmVyczogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFRoZSBSb3V0ZSA1MyBuYW1lIHNlcnZlciB0aGF0IGNyZWF0ZWQgdGhlIFNPQSByZWNvcmQuXG4gICAqL1xuICByZWFkb25seSBwcmltYXJ5TmFtZVNlcnZlcjogc3RyaW5nO1xufVxuXG4vKipcbiAqIENvbnRhaW5lciBmb3IgcmVjb3JkcywgYW5kIHJlY29yZHMgY29udGFpbiBpbmZvcm1hdGlvbiBhYm91dCBob3cgdG8gcm91dGUgdHJhZmZpYyBmb3IgYVxuICogc3BlY2lmaWMgZG9tYWluLCBzdWNoIGFzIGV4YW1wbGUuY29tIGFuZCBpdHMgc3ViZG9tYWlucyAoYWNtZS5leGFtcGxlLmNvbSwgemVuaXRoLmV4YW1wbGUuY29tKVxuICovXG5leHBvcnQgY2xhc3MgRG5zWm9uZSBleHRlbmRzIEF3c0NvbnN0cnVjdEJhc2UgaW1wbGVtZW50cyBJRG5zWm9uZSB7XG4gIC8vIFRPRE86IEFkZCBcImZyb20gR3JpZCBMb29rdXBcIiBzdGF0aWMgbWV0aG9kcz9cbiAgLyoqXG4gICAqIEltcG9ydCBhIFJvdXRlIDUzIGhvc3RlZCB6b25lIGRlZmluZWQgZWl0aGVyIG91dHNpZGUgb2YgVGVycmFDb25zdHJ1Y3QsIG9yIGZyb20gR3JpZCBMb29rdXBcbiAgICpcbiAgICogVXNlIHdoZW4gaG9zdGVkIHpvbmUgSUQgaXMga25vd24uXG4gICAqXG4gICAqIEBwYXJhbSBzY29wZSB0aGUgcGFyZW50IENvbnN0cnVjdCBmb3IgdGhpcyBDb25zdHJ1Y3RcbiAgICogQHBhcmFtIGlkICB0aGUgbG9naWNhbCBuYW1lIG9mIHRoaXMgQ29uc3RydWN0XG4gICAqIEBwYXJhbSB6b25lSWQgdGhlIElEIG9mIHRoZSBob3N0ZWQgem9uZSB0byBpbXBvcnRcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZnJvbVpvbmVJZChcbiAgICBzY29wZTogQ29uc3RydWN0LFxuICAgIGlkOiBzdHJpbmcsXG4gICAgem9uZUlkOiBzdHJpbmcsXG4gICk6IElEbnNab25lIHtcbiAgICBjbGFzcyBJbXBvcnQgZXh0ZW5kcyBBd3NDb25zdHJ1Y3RCYXNlIGltcGxlbWVudHMgSURuc1pvbmUge1xuICAgICAgcHJpdmF0ZSByZWFkb25seSBfb3V0cHV0czogRG5zWm9uZU91dHB1dHM7XG4gICAgICBwdWJsaWMgZ2V0IGRuc1pvbmVPdXRwdXRzKCk6IERuc1pvbmVPdXRwdXRzIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX291dHB1dHM7XG4gICAgICB9XG4gICAgICBwdWJsaWMgZ2V0IG91dHB1dHMoKTogUmVjb3JkPHN0cmluZywgYW55PiB7XG4gICAgICAgIHJldHVybiB0aGlzLmRuc1pvbmVPdXRwdXRzO1xuICAgICAgfVxuICAgICAgcHVibGljIHJlYWRvbmx5IHpvbmVJZCA9IHpvbmVJZDtcbiAgICAgIHB1YmxpYyBnZXQgem9uZU5hbWUoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0YXNvdXJjZS5uYW1lO1xuICAgICAgfVxuICAgICAgcHVibGljIGdldCBhcm4oKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0YXNvdXJjZS5hcm47XG4gICAgICB9XG4gICAgICBwdWJsaWMgZ2V0IG5hbWVTZXJ2ZXJzKCk6IHN0cmluZ1tdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0YXNvdXJjZS5uYW1lU2VydmVycztcbiAgICAgIH1cbiAgICAgIHB1YmxpYyBnZXQgcHJpbWFyeU5hbWVTZXJ2ZXIoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0YXNvdXJjZS5wcmltYXJ5TmFtZVNlcnZlcjtcbiAgICAgIH1cbiAgICAgIHByaXZhdGUgcmVhZG9ubHkgZGF0YXNvdXJjZTogZGF0YUF3c1JvdXRlNTNab25lLkRhdGFBd3NSb3V0ZTUzWm9uZTtcbiAgICAgIGNvbnN0cnVjdG9yKF9zY29wZTogQ29uc3RydWN0LCBfaWQ6IHN0cmluZykge1xuICAgICAgICBzdXBlcihfc2NvcGUsIF9pZCwge30pO1xuICAgICAgICB0aGlzLmRhdGFzb3VyY2UgPSBuZXcgZGF0YUF3c1JvdXRlNTNab25lLkRhdGFBd3NSb3V0ZTUzWm9uZShcbiAgICAgICAgICB0aGlzLFxuICAgICAgICAgIFwiUmVzb3VyY2VcIixcbiAgICAgICAgICB7XG4gICAgICAgICAgICB6b25lSWQsXG4gICAgICAgICAgfSxcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5fb3V0cHV0cyA9IHtcbiAgICAgICAgICB6b25lSWQ6IHpvbmVJZCxcbiAgICAgICAgICB6b25lTmFtZTogdGhpcy5kYXRhc291cmNlLm5hbWUsXG4gICAgICAgICAgbmFtZVNlcnZlcnM6IHRoaXMuZGF0YXNvdXJjZS5uYW1lU2VydmVycyxcbiAgICAgICAgICBwcmltYXJ5TmFtZVNlcnZlcjogdGhpcy5kYXRhc291cmNlLnByaW1hcnlOYW1lU2VydmVyLFxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBuZXcgSW1wb3J0KHNjb3BlLCBpZCk7XG4gIH1cblxuICBwcml2YXRlIHJlYWRvbmx5IF9vdXRwdXRzOiBEbnNab25lT3V0cHV0cztcbiAgcHVibGljIGdldCBkbnNab25lT3V0cHV0cygpOiBEbnNab25lT3V0cHV0cyB7XG4gICAgcmV0dXJuIHRoaXMuX291dHB1dHM7XG4gIH1cbiAgcHVibGljIGdldCBvdXRwdXRzKCk6IFJlY29yZDxzdHJpbmcsIGFueT4ge1xuICAgIHJldHVybiB0aGlzLmRuc1pvbmVPdXRwdXRzO1xuICB9XG4gIHB1YmxpYyByZWFkb25seSB6b25lSWQ6IHN0cmluZztcbiAgcHVibGljIHJlYWRvbmx5IGFybjogc3RyaW5nO1xuICBwdWJsaWMgcmVhZG9ubHkgem9uZU5hbWU6IHN0cmluZztcbiAgcHVibGljIHJlYWRvbmx5IG5hbWVTZXJ2ZXJzOiBzdHJpbmdbXTtcbiAgcHVibGljIHJlYWRvbmx5IHByaW1hcnlOYW1lU2VydmVyOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFZQQ3MgdG8gd2hpY2ggdGhpcyBob3N0ZWQgem9uZSB3aWxsIGJlIGFkZGVkXG4gICAqL1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgdnBjcyA9IG5ldyBBcnJheTxyb3V0ZTUzWm9uZS5Sb3V0ZTUzWm9uZVZwYz4oKTtcblxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgcmVzb3VyY2U6IHJvdXRlNTNab25lLlJvdXRlNTNab25lO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBEbnNab25lUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIHByb3BzKTtcblxuICAgIHZhbGlkYXRlWm9uZU5hbWUocHJvcHMuem9uZU5hbWUpO1xuXG4gICAgLy8gQWRkIGEgZG90IGF0IHRoZSBlbmQgaWYgdGhlIGFkZFRyYWlsaW5nRG90IHByb3BlcnR5IGlzIG5vdCBmYWxzZS5cbiAgICBjb25zdCB6b25lTmFtZSA9XG4gICAgICBwcm9wcy5hZGRUcmFpbGluZ0RvdCA9PT0gZmFsc2UgfHwgcHJvcHMuem9uZU5hbWUuZW5kc1dpdGgoXCIuXCIpXG4gICAgICAgID8gcHJvcHMuem9uZU5hbWVcbiAgICAgICAgOiBgJHtwcm9wcy56b25lTmFtZX0uYDtcblxuICAgIHRoaXMucmVzb3VyY2UgPSBuZXcgcm91dGU1M1pvbmUuUm91dGU1M1pvbmUodGhpcywgXCJSZXNvdXJjZVwiLCB7XG4gICAgICBuYW1lOiB6b25lTmFtZSxcbiAgICAgIGNvbW1lbnQ6IHByb3BzLmNvbW1lbnQsXG4gICAgICB2cGM6IExhenkuYW55VmFsdWUoe1xuICAgICAgICBwcm9kdWNlOiAoKSA9PlxuICAgICAgICAgIHRoaXMudnBjcy5sZW5ndGggPT09IDBcbiAgICAgICAgICAgID8gdW5kZWZpbmVkXG4gICAgICAgICAgICA6IHRoaXMudnBjcy5tYXAoKG4pID0+IHJvdXRlNTNab25lLnJvdXRlNTNab25lVnBjVG9UZXJyYWZvcm0obikpLFxuICAgICAgfSksXG4gICAgfSk7XG5cbiAgICB0aGlzLnpvbmVJZCA9IHRoaXMucmVzb3VyY2UuaWQ7XG4gICAgdGhpcy5hcm4gPSB0aGlzLnJlc291cmNlLmFybjtcbiAgICB0aGlzLm5hbWVTZXJ2ZXJzID0gdGhpcy5yZXNvdXJjZS5uYW1lU2VydmVycztcbiAgICB0aGlzLnByaW1hcnlOYW1lU2VydmVyID0gdGhpcy5yZXNvdXJjZS5wcmltYXJ5TmFtZVNlcnZlcjtcbiAgICB0aGlzLnpvbmVOYW1lID0gcHJvcHMuem9uZU5hbWU7XG5cbiAgICBmb3IgKGNvbnN0IHZwYyBvZiBwcm9wcy5uZXR3b3JrcyB8fCBbXSkge1xuICAgICAgdGhpcy5hZGROZXR3b3JrKHZwYyk7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCB2cGMgb2YgcHJvcHMudnBjcyB8fCBbXSkge1xuICAgICAgdGhpcy5hZGRWcGModnBjKTtcbiAgICB9XG5cbiAgICB0aGlzLl9vdXRwdXRzID0ge1xuICAgICAgem9uZUlkOiB0aGlzLnpvbmVJZCxcbiAgICAgIHpvbmVOYW1lOiB0aGlzLnpvbmVOYW1lLFxuICAgICAgbmFtZVNlcnZlcnM6IHRoaXMubmFtZVNlcnZlcnMsXG4gICAgICBwcmltYXJ5TmFtZVNlcnZlcjogdGhpcy5yZXNvdXJjZS5wcmltYXJ5TmFtZVNlcnZlcixcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhbm90aGVyIFZQQyB0byB0aGlzIHByaXZhdGUgaG9zdGVkIHpvbmUuXG4gICAqXG4gICAqIEBwYXJhbSB2cGMgdGhlIG90aGVyIFZQQyB0byBhZGQuXG4gICAqL1xuICBwdWJsaWMgYWRkVnBjKHZwYzogZWMyLklWcGMpIHtcbiAgICB0aGlzLnZwY3MucHVzaCh7XG4gICAgICB2cGNJZDogdnBjLnZwY0lkLFxuICAgICAgdnBjUmVnaW9uOiB2cGMuZW52LnJlZ2lvbixcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgYW5vdGhlciBOZXR3b3JrIHRvIHRoaXMgcHJpdmF0ZSBob3N0ZWQgem9uZS5cbiAgICpcbiAgICogVGhpcyBjb25mbGljdHMgd2l0aCB0aGUgYGRlbGVnYXRpb25TZXRJZGAgYW5kIGFueVxuICAgKiBgYXdzX3JvdXRlNTNfem9uZV9hc3NvY2lhdGlvbmAgY3JlYXRlZCBvdXRzaWRlIHRoaXMgc3BlYy5cbiAgICpcbiAgICogQHBhcmFtIG5ldHdvcmsgdGhlIG90aGVyIE5ldHdvcmsgdG8gYWRkLlxuICAgKiBAZGVwcmVjYXRlZCB1c2UgYWRkVnBjIGluc3RlYWRcbiAgICovXG4gIHB1YmxpYyBhZGROZXR3b3JrKG5ldHdvcms6IElOZXR3b3JrKSB7XG4gICAgdGhpcy52cGNzLnB1c2goe1xuICAgICAgdnBjSWQ6IG5ldHdvcmsudnBjSWQsXG4gICAgICB2cGNSZWdpb246IG5ldHdvcmsuZW52LnJlZ2lvbiA/PyBBd3NTdGFjay5vZkF3c0NvbnN0cnVjdChuZXR3b3JrKS5yZWdpb24sXG4gICAgfSk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1ha2VIb3N0ZWRab25lQXJuKFxuICBjb25zdHJ1Y3Q6IENvbnN0cnVjdCxcbiAgaG9zdGVkWm9uZUlkOiBzdHJpbmcsXG4pOiBzdHJpbmcge1xuICByZXR1cm4gQXdzU3RhY2sub2ZBd3NDb25zdHJ1Y3QoY29uc3RydWN0KS5mb3JtYXRBcm4oe1xuICAgIGFjY291bnQ6IFwiXCIsXG4gICAgcmVnaW9uOiBcIlwiLFxuICAgIHNlcnZpY2U6IFwicm91dGU1M1wiLFxuICAgIHJlc291cmNlOiBcImhvc3RlZHpvbmVcIixcbiAgICByZXNvdXJjZU5hbWU6IGhvc3RlZFpvbmVJZCxcbiAgfSk7XG59XG5cbi8qKlxuICogVmFsaWRhdGVzIGEgem9uZSBuYW1lIGlzIHZhbGlkIGJ5IFJvdXRlNTMgc3BlY2lmYyBuYW1pbmcgcnVsZXMsXG4gKiBhbmQgdGhhdCB0aGVyZSBpcyBubyB0cmFpbGluZyBkb3QgaW4gdGhlIG5hbWUuXG4gKlxuICogQHBhcmFtIHpvbmVOYW1lIHRoZSB6b25lIG5hbWUgdG8gYmUgdmFsaWRhdGVkLlxuICogQHJldHVybnMgK3pvbmVOYW1lK1xuICogQHRocm93cyBWYWxpZGF0aW9uRXJyb3IgaWYgdGhlIG5hbWUgaXMgbm90IHZhbGlkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVab25lTmFtZSh6b25lTmFtZTogc3RyaW5nKSB7XG4gIGlmICh6b25lTmFtZS5sZW5ndGggPiAyNTUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJ6b25lIG5hbWUgY2Fubm90IGJlIG1vcmUgdGhhbiAyNTUgYnl0ZXMgbG9uZ1wiKTtcbiAgfVxuICBpZiAoem9uZU5hbWUuc3BsaXQoXCIuXCIpLmZpbmQoKGxhYmVsKSA9PiBsYWJlbC5sZW5ndGggPiA2MykpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJ6b25lIG5hbWUgbGFiZWxzIGNhbm5vdCBiZSBtb3JlIHRoYW4gNjMgYnl0ZXMgbG9uZ1wiKTtcbiAgfVxuICBpZiAoIXpvbmVOYW1lLm1hdGNoKC9eW2EtejAtOSFcIiMkJSYnKCkqKywvOjs8PT4/QFtcXFxcXFxdXl9ge3x9fi4tXSskL2kpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgXCJ6b25lIG5hbWVzIGNhbiBvbmx5IGNvbnRhaW4gYS16LCAwLTksIC0sICEgXFxcIiAjICQgJSAmICcgKCApICogKyAsIC0gLyA6IDsgPCA9ID4gPyBAIFsgIF0gXiBfIGAgeyB8IH0gfiAuXCIsXG4gICAgKTtcbiAgfVxufVxuIl19
@@ -30,7 +30,7 @@ class FunctionCode {
30
30
  }
31
31
  exports.FunctionCode = FunctionCode;
32
32
  _a = JSII_RTTI_SYMBOL_1;
33
- FunctionCode[_a] = { fqn: "terraconstructs.aws.edge.FunctionCode", version: "0.0.11" };
33
+ FunctionCode[_a] = { fqn: "terraconstructs.aws.edge.FunctionCode", version: "0.0.12" };
34
34
  /**
35
35
  * Represents the function's source code as inline code
36
36
  */
@@ -108,7 +108,7 @@ class Function extends aws_construct_1.AwsConstructBase {
108
108
  }
109
109
  exports.Function = Function;
110
110
  _b = JSII_RTTI_SYMBOL_1;
111
- Function[_b] = { fqn: "terraconstructs.aws.edge.Function", version: "0.0.11" };
111
+ Function[_b] = { fqn: "terraconstructs.aws.edge.Function", version: "0.0.12" };
112
112
  /**
113
113
  * The type of events that a CloudFront function can be invoked in response to.
114
114
  */
@@ -1,3 +1,4 @@
1
+ export * from "./certificate-base";
1
2
  export * from "./certificate";
2
3
  export * from "./distribution";
3
4
  export * from "./dns-alias-record-targets";
@@ -14,6 +14,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
14
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./certificate-base"), exports);
17
18
  __exportStar(require("./certificate"), exports);
18
19
  __exportStar(require("./distribution"), exports);
19
20
  __exportStar(require("./dns-alias-record-targets"), exports);
@@ -23,4 +24,4 @@ __exportStar(require("./function"), exports);
23
24
  __exportStar(require("./key-value-store"), exports);
24
25
  __exportStar(require("./origin"), exports);
25
26
  __exportStar(require("./response-headers-policy"), exports);
26
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXdzL2VkZ2UvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLGdEQUE4QjtBQUM5QixpREFBK0I7QUFDL0IsNkRBQTJDO0FBQzNDLCtDQUE2QjtBQUM3Qiw2Q0FBMkI7QUFDM0IsNkNBQTJCO0FBQzNCLG9EQUFrQztBQUNsQywyQ0FBeUI7QUFDekIsNERBQTBDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSBcIi4vY2VydGlmaWNhdGVcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2Rpc3RyaWJ1dGlvblwiO1xuZXhwb3J0ICogZnJvbSBcIi4vZG5zLWFsaWFzLXJlY29yZC10YXJnZXRzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9kbnMtcmVjb3JkXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9kbnMtem9uZVwiO1xuZXhwb3J0ICogZnJvbSBcIi4vZnVuY3Rpb25cIjtcbmV4cG9ydCAqIGZyb20gXCIuL2tleS12YWx1ZS1zdG9yZVwiO1xuZXhwb3J0ICogZnJvbSBcIi4vb3JpZ2luXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9yZXNwb25zZS1oZWFkZXJzLXBvbGljeVwiO1xuIl19
27
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXdzL2VkZ2UvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLHFEQUFtQztBQUNuQyxnREFBOEI7QUFDOUIsaURBQStCO0FBQy9CLDZEQUEyQztBQUMzQywrQ0FBNkI7QUFDN0IsNkNBQTJCO0FBQzNCLDZDQUEyQjtBQUMzQixvREFBa0M7QUFDbEMsMkNBQXlCO0FBQ3pCLDREQUEwQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gXCIuL2NlcnRpZmljYXRlLWJhc2VcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NlcnRpZmljYXRlXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9kaXN0cmlidXRpb25cIjtcbmV4cG9ydCAqIGZyb20gXCIuL2Rucy1hbGlhcy1yZWNvcmQtdGFyZ2V0c1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vZG5zLXJlY29yZFwiO1xuZXhwb3J0ICogZnJvbSBcIi4vZG5zLXpvbmVcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2Z1bmN0aW9uXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9rZXktdmFsdWUtc3RvcmVcIjtcbmV4cG9ydCAqIGZyb20gXCIuL29yaWdpblwiO1xuZXhwb3J0ICogZnJvbSBcIi4vcmVzcG9uc2UtaGVhZGVycy1wb2xpY3lcIjtcbiJdfQ==