aws-cdk 2.1004.0 → 2.1005.0

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 (148) hide show
  1. package/build-info.json +2 -2
  2. package/lib/api/aws-auth/account-cache.d.ts +1 -1
  3. package/lib/api/aws-auth/account-cache.js +1 -1
  4. package/lib/api/aws-auth/awscli-compatible.d.ts +1 -1
  5. package/lib/api/aws-auth/awscli-compatible.js +1 -1
  6. package/lib/api/aws-auth/credential-plugins.d.ts +1 -1
  7. package/lib/api/aws-auth/credential-plugins.js +1 -1
  8. package/lib/api/aws-auth/provider-caching.d.ts +1 -1
  9. package/lib/api/aws-auth/provider-caching.js +1 -1
  10. package/lib/api/aws-auth/sdk-logger.d.ts +2 -2
  11. package/lib/api/aws-auth/sdk-logger.js +1 -1
  12. package/lib/api/aws-auth/sdk-provider.d.ts +4 -4
  13. package/lib/api/aws-auth/sdk-provider.js +1 -1
  14. package/lib/api/aws-auth/sdk.d.ts +12 -12
  15. package/lib/api/aws-auth/sdk.js +1 -1
  16. package/lib/api/bootstrap/bootstrap-environment.d.ts +2 -2
  17. package/lib/api/bootstrap/bootstrap-environment.js +1 -1
  18. package/lib/api/bootstrap/bootstrap-props.d.ts +3 -3
  19. package/lib/api/bootstrap/bootstrap-props.js +1 -1
  20. package/lib/api/bootstrap/deploy-bootstrap.d.ts +4 -4
  21. package/lib/api/bootstrap/deploy-bootstrap.js +1 -1
  22. package/lib/api/bootstrap/legacy-template.d.ts +1 -1
  23. package/lib/api/bootstrap/legacy-template.js +1 -1
  24. package/lib/api/cxapp/cloud-executable.d.ts +3 -3
  25. package/lib/api/cxapp/cloud-executable.js +1 -1
  26. package/lib/api/cxapp/environments.d.ts +3 -3
  27. package/lib/api/cxapp/environments.js +1 -1
  28. package/lib/api/cxapp/exec.d.ts +4 -4
  29. package/lib/api/cxapp/exec.js +1 -1
  30. package/lib/api/deployments/asset-publishing.d.ts +2 -2
  31. package/lib/api/deployments/asset-publishing.js +1 -1
  32. package/lib/api/deployments/assets.d.ts +3 -3
  33. package/lib/api/deployments/assets.js +1 -1
  34. package/lib/api/deployments/checks.d.ts +2 -2
  35. package/lib/api/deployments/checks.js +1 -1
  36. package/lib/api/deployments/cloudformation.d.ts +2 -2
  37. package/lib/api/deployments/cloudformation.js +1 -1
  38. package/lib/api/deployments/deploy-stack.d.ts +6 -6
  39. package/lib/api/deployments/deploy-stack.js +36 -36
  40. package/lib/api/deployments/deployments.d.ts +6 -6
  41. package/lib/api/deployments/deployments.js +1 -1
  42. package/lib/api/deployments/hotswap-deployments.d.ts +6 -4
  43. package/lib/api/deployments/hotswap-deployments.js +51 -26
  44. package/lib/api/environment/environment-access.d.ts +6 -6
  45. package/lib/api/environment/environment-access.js +1 -1
  46. package/lib/api/environment/environment-resources.d.ts +1 -1
  47. package/lib/api/environment/environment-resources.js +1 -1
  48. package/lib/api/evaluate-cloudformation-template.d.ts +7 -2
  49. package/lib/api/evaluate-cloudformation-template.js +11 -5
  50. package/lib/api/garbage-collection/garbage-collector.d.ts +4 -4
  51. package/lib/api/garbage-collection/garbage-collector.js +2 -2
  52. package/lib/api/garbage-collection/progress-printer.d.ts +2 -2
  53. package/lib/api/garbage-collection/progress-printer.js +1 -1
  54. package/lib/api/garbage-collection/stack-refresh.d.ts +2 -2
  55. package/lib/api/garbage-collection/stack-refresh.js +1 -1
  56. package/lib/api/hotswap/appsync-mapping-templates.d.ts +3 -2
  57. package/lib/api/hotswap/appsync-mapping-templates.js +8 -6
  58. package/lib/api/hotswap/code-build-projects.d.ts +3 -2
  59. package/lib/api/hotswap/code-build-projects.js +8 -6
  60. package/lib/api/hotswap/common.d.ts +45 -34
  61. package/lib/api/hotswap/common.js +2 -14
  62. package/lib/api/hotswap/ecs-services.d.ts +3 -2
  63. package/lib/api/hotswap/ecs-services.js +7 -5
  64. package/lib/api/hotswap/lambda-functions.d.ts +3 -2
  65. package/lib/api/hotswap/lambda-functions.js +47 -65
  66. package/lib/api/hotswap/s3-bucket-deployments.d.ts +4 -8
  67. package/lib/api/hotswap/s3-bucket-deployments.js +18 -17
  68. package/lib/api/hotswap/stepfunctions-state-machines.d.ts +3 -2
  69. package/lib/api/hotswap/stepfunctions-state-machines.js +8 -6
  70. package/lib/api/logs/find-cloudwatch-logs.d.ts +1 -1
  71. package/lib/api/logs/find-cloudwatch-logs.js +2 -3
  72. package/lib/api/logs/logs-monitor.d.ts +2 -2
  73. package/lib/api/logs/logs-monitor.js +1 -1
  74. package/lib/api/resource-import/importer.d.ts +4 -4
  75. package/lib/api/resource-import/importer.js +1 -1
  76. package/lib/api/resource-import/migrator.d.ts +3 -3
  77. package/lib/api/resource-import/migrator.js +1 -1
  78. package/lib/api/stack-events/stack-activity-monitor.d.ts +1 -2
  79. package/lib/api/stack-events/stack-activity-monitor.js +3 -23
  80. package/lib/api/stack-events/stack-progress-monitor.d.ts +1 -1
  81. package/lib/api/stack-events/stack-progress-monitor.js +1 -1
  82. package/lib/api/toolkit-info.d.ts +2 -2
  83. package/lib/api/toolkit-info.js +1 -1
  84. package/lib/api/util/template-body-parameter.d.ts +1 -1
  85. package/lib/api/util/template-body-parameter.js +1 -1
  86. package/lib/api/work-graph/work-graph-builder.d.ts +2 -2
  87. package/lib/api/work-graph/work-graph-builder.js +1 -1
  88. package/lib/api/work-graph/work-graph-types.d.ts +2 -2
  89. package/lib/api/work-graph/work-graph-types.js +1 -1
  90. package/lib/api/work-graph/work-graph.d.ts +2 -2
  91. package/lib/api/work-graph/work-graph.js +1 -1
  92. package/lib/cli/activity-printer/base.d.ts +2 -2
  93. package/lib/cli/activity-printer/base.js +1 -1
  94. package/lib/cli/activity-printer/current.d.ts +2 -1
  95. package/lib/cli/activity-printer/current.js +1 -1
  96. package/lib/cli/activity-printer/history.d.ts +2 -1
  97. package/lib/cli/activity-printer/history.js +1 -1
  98. package/lib/cli/cdk-toolkit.d.ts +7 -7
  99. package/lib/cli/cdk-toolkit.js +10 -2
  100. package/lib/cli/ci-systems.d.ts +29 -0
  101. package/lib/cli/ci-systems.js +62 -0
  102. package/lib/cli/cli.d.ts +1 -1
  103. package/lib/cli/cli.js +22 -3
  104. package/lib/cli/convert-to-user-input.js +1 -1
  105. package/lib/cli/messages.d.ts +1 -1
  106. package/lib/cli/messages.js +1 -1
  107. package/lib/cli/parse-command-line-arguments.js +1 -1
  108. package/lib/cli/user-configuration.js +1 -1
  109. package/lib/cli/user-input.js +1 -1
  110. package/lib/commands/context.d.ts +1 -1
  111. package/lib/commands/context.js +1 -1
  112. package/lib/commands/migrate.d.ts +1 -1
  113. package/lib/commands/migrate.js +1 -1
  114. package/lib/context-providers/ami.d.ts +1 -1
  115. package/lib/context-providers/ami.js +1 -1
  116. package/lib/context-providers/availability-zones.d.ts +1 -1
  117. package/lib/context-providers/availability-zones.js +1 -1
  118. package/lib/context-providers/cc-api-provider.d.ts +1 -1
  119. package/lib/context-providers/cc-api-provider.js +1 -1
  120. package/lib/context-providers/endpoint-service-availability-zones.d.ts +1 -1
  121. package/lib/context-providers/endpoint-service-availability-zones.js +1 -1
  122. package/lib/context-providers/hosted-zones.d.ts +2 -2
  123. package/lib/context-providers/hosted-zones.js +1 -1
  124. package/lib/context-providers/index.d.ts +3 -3
  125. package/lib/context-providers/index.js +1 -1
  126. package/lib/context-providers/keys.d.ts +1 -1
  127. package/lib/context-providers/keys.js +1 -1
  128. package/lib/context-providers/load-balancers.d.ts +3 -3
  129. package/lib/context-providers/load-balancers.js +1 -1
  130. package/lib/context-providers/ssm-parameters.d.ts +1 -1
  131. package/lib/context-providers/ssm-parameters.js +1 -1
  132. package/lib/context-providers/vpcs.d.ts +1 -1
  133. package/lib/context-providers/vpcs.js +1 -1
  134. package/lib/diff.d.ts +1 -1
  135. package/lib/diff.js +1 -1
  136. package/lib/index.js +4028 -3727
  137. package/lib/legacy-logging-source.js +1 -1
  138. package/lib/list-stacks.d.ts +1 -1
  139. package/lib/list-stacks.js +1 -1
  140. package/lib/logging.d.ts +3 -3
  141. package/lib/logging.js +37 -35
  142. package/lib/notices.d.ts +22 -18
  143. package/lib/notices.js +46 -46
  144. package/lib/toolkit/cli-io-host.d.ts +17 -2
  145. package/lib/toolkit/cli-io-host.js +34 -5
  146. package/lib/tree.d.ts +1 -1
  147. package/lib/tree.js +1 -1
  148. package/package.json +3 -5
@@ -70,4 +70,4 @@ async function getBootstrapStackInfo(sdk, stackName) {
70
70
  throw new error_1.ToolkitError(`Error retrieving toolkit stack info: ${e}`);
71
71
  }
72
72
  }
73
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlY2tzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiY2hlY2tzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBS0EsOEZBbUNDO0FBT0Qsc0RBdUNDO0FBckZELGlEQUEyQztBQUMzQywrQ0FBbUQ7QUFHNUMsS0FBSyxVQUFVLHlDQUF5QyxDQUM3RCxHQUFRLEVBQ1IsUUFBa0IsRUFDbEIsZUFBd0I7SUFFeEIsSUFBSSxDQUFDO1FBQ0gsTUFBTSxTQUFTLEdBQUcsZUFBZSxJQUFJLFlBQVksQ0FBQztRQUNsRCxNQUFNLFNBQVMsR0FBRyxNQUFNLHFCQUFxQixDQUFDLEdBQUcsRUFBRSxTQUFTLENBQUMsQ0FBQztRQUU5RCxJQUFJLENBQUMsU0FBUyxDQUFDLGdCQUFnQixFQUFFLENBQUM7WUFDaEMsK0NBQStDO1lBQy9DLE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztRQUVELElBQUksU0FBUyxDQUFDLGdCQUFnQixJQUFJLEVBQUUsRUFBRSxDQUFDO1lBQ3JDLG9FQUFvRTtZQUNwRSxzQ0FBc0M7WUFDdEMsNENBQTRDO1lBQzVDLE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztRQUVELHlGQUF5RjtRQUN6RiwrQ0FBK0M7UUFDL0MsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztRQUNYLHdFQUF3RTtRQUN4RSxvRUFBb0U7UUFDcEUsMkVBQTJFO1FBQzNFLG1GQUFtRjtRQUNuRixxRkFBcUY7UUFDckYsK0RBQStEO1FBQy9ELE1BQU0sUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFBLGdCQUFLLEVBQUMscURBQXFELENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUN2RixNQUFNLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBQSxnQkFBSyxFQUFDLHVEQUF1RCxDQUFDLENBQUMsQ0FBQztRQUN0RixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7QUFDSCxDQUFDO0FBT00sS0FBSyxVQUFVLHFCQUFxQixDQUFDLEdBQVEsRUFBRSxTQUFpQjs7SUFDckUsSUFBSSxDQUFDO1FBQ0gsTUFBTSxHQUFHLEdBQUcsR0FBRyxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ2pDLE1BQU0sYUFBYSxHQUFHLE1BQU0sR0FBRyxDQUFDLGNBQWMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDO1FBRXpFLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxJQUFJLGFBQWEsQ0FBQyxNQUFNLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQy9ELE1BQU0sSUFBSSxvQkFBWSxDQUFDLGlCQUFpQixTQUFTLFlBQVksQ0FBQyxDQUFDO1FBQ2pFLENBQUM7UUFFRCxNQUFNLEtBQUssR0FBRyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3RDLE1BQU0sYUFBYSxHQUFHLE1BQUEsS0FBSyxDQUFDLE9BQU8sMENBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLFNBQVMsS0FBSyxrQkFBa0IsQ0FBQyxDQUFDO1FBRTdGLElBQUksQ0FBQyxDQUFBLGFBQWEsYUFBYixhQUFhLHVCQUFiLGFBQWEsQ0FBRSxXQUFXLENBQUEsRUFBRSxDQUFDO1lBQ2hDLE1BQU0sSUFBSSxvQkFBWSxDQUFDLCtEQUErRCxTQUFTLEVBQUUsQ0FBQyxDQUFDO1FBQ3JHLENBQUM7UUFFRCxNQUFNLGdCQUFnQixHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDN0QsSUFBSSxLQUFLLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxDQUFDO1lBQzVCLE1BQU0sSUFBSSxvQkFBWSxDQUFDLG1DQUFtQyxhQUFhLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztRQUN6RixDQUFDO1FBRUQscUVBQXFFO1FBQ3JFLDBFQUEwRTtRQUMxRSxpRkFBaUY7UUFDakYsdUZBQXVGO1FBQ3ZGLEVBQUU7UUFDRixtRUFBbUU7UUFDbkUsc0ZBQXNGO1FBQ3RGLE1BQU0sVUFBVSxHQUFHLE1BQUEsTUFBQSxLQUFLLENBQUMsT0FBTywwQ0FBRSxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsU0FBUyxLQUFLLFlBQVksQ0FBQywwQ0FBRSxXQUFXLENBQUM7UUFDakcsNENBQTRDO1FBQzVDLE1BQU0sZ0JBQWdCLEdBQUcsQ0FBQyxDQUFDLENBQUMsVUFBVSxJQUFJLFVBQVUsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLElBQUksVUFBVSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO1FBRTFHLE9BQU87WUFDTCxnQkFBZ0I7WUFDaEIsZ0JBQWdCO1NBQ2pCLENBQUM7SUFDSixDQUFDO0lBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztRQUNYLE1BQU0sSUFBSSxvQkFBWSxDQUFDLHdDQUF3QyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3RFLENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW9IZWxwZXIgfSBmcm9tICcuLi8uLi8uLi8uLi9AYXdzLWNkay90bXAtdG9vbGtpdC1oZWxwZXJzL3NyYy9hcGkvaW8vcHJpdmF0ZSc7XG5pbXBvcnQgeyBkZWJ1ZyB9IGZyb20gJy4uLy4uL2NsaS9tZXNzYWdlcyc7XG5pbXBvcnQgeyBUb29sa2l0RXJyb3IgfSBmcm9tICcuLi8uLi90b29sa2l0L2Vycm9yJztcbmltcG9ydCB7IFNESyB9IGZyb20gJy4uL2F3cy1hdXRoJztcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGRldGVybWluZUFsbG93Q3Jvc3NBY2NvdW50QXNzZXRQdWJsaXNoaW5nKFxuICBzZGs6IFNESyxcbiAgaW9IZWxwZXI6IElvSGVscGVyLFxuICBjdXN0b21TdGFja05hbWU/OiBzdHJpbmcsXG4pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCBzdGFja05hbWUgPSBjdXN0b21TdGFja05hbWUgfHwgJ0NES1Rvb2xraXQnO1xuICAgIGNvbnN0IHN0YWNrSW5mbyA9IGF3YWl0IGdldEJvb3RzdHJhcFN0YWNrSW5mbyhzZGssIHN0YWNrTmFtZSk7XG5cbiAgICBpZiAoIXN0YWNrSW5mby5oYXNTdGFnaW5nQnVja2V0KSB7XG4gICAgICAvLyBpbmRpY2F0ZXMgYW4gaW50ZW50aW9uYWwgY3Jvc3MgYWNjb3VudCBzZXR1cFxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHN0YWNrSW5mby5ib290c3RyYXBWZXJzaW9uID49IDIxKSB7XG4gICAgICAvLyBib290c3RyYXAgc3RhY2sgdmVyc2lvbiAyMSBjb250YWlucyBhIGZpeCB0aGF0IHdpbGwgcHJldmVudCBjcm9zc1xuICAgICAgLy8gYWNjb3VudCBwdWJsaXNoaW5nIG9uIHRoZSBJQU0gbGV2ZWxcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9hd3MvYXdzLWNkay9wdWxsLzMwODIzXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICAvLyBJZiB0aGVyZSBpcyBhIHN0YWdpbmcgYnVja2V0IEFORCB0aGUgYm9vdHN0cmFwIHZlcnNpb24gaXMgb2xkLCB0aGVuIHdlIHdhbnQgdG8gcHJvdGVjdFxuICAgIC8vIGFnYWluc3QgYWNjaWRlbnRhbCBjcm9zcy1hY2NvdW50IHB1Ymxpc2hpbmcuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9IGNhdGNoIChlKSB7XG4gICAgLy8gWW91IHdvdWxkIHRoaW5rIHdlIHdvdWxkIG5lZWQgdG8gZmFpbCBjbG9zZWQgaGVyZSwgYnV0IHRoZSByZWFsaXR5IGlzXG4gICAgLy8gdGhhdCB3ZSBnZXQgaGVyZSBpZiB3ZSBjb3VsZG4ndCBmaW5kIHRoZSBib290c3RyYXAgc3RhY2s6IHRoYXQgaXNcbiAgICAvLyBjb21wbGV0ZWx5IHZhbGlkLCBhbmQgbWFueSBsYXJnZSBvcmdhbml6YXRpb25zIG1heSBoYXZlIHRoZWlyIG93biBtZXRob2RcbiAgICAvLyBvZiBjcmVhdGluZyBib290c3RyYXAgcmVzb3VyY2VzLiBJZiB0aGV5IGRvLCB0aGVyZSdzIG5vdGhpbmcgZm9yIHVzIHRvIHZhbGlkYXRlLFxuICAgIC8vIGJ1dCB3ZSBjYW4ndCB1c2UgdGhhdCBhcyBhIHJlYXNvbiB0byBkaXNhbGxvdyBjcm9zcy1hY2NvdW50IHB1Ymxpc2hpbmcuIFdlJ2xsIGp1c3RcbiAgICAvLyBoYXZlIHRvIHRydXN0IHRoZXkgZGlkIHRoZWlyIGR1ZSBkaWxpZ2VuY2UuIFNvIHdlIGZhaWwgb3Blbi5cbiAgICBhd2FpdCBpb0hlbHBlci5ub3RpZnkoZGVidWcoYEVycm9yIGRldGVybWluaW5nIGNyb3NzIGFjY291bnQgYXNzZXQgcHVibGlzaGluZzogJHtlfWApKTtcbiAgICBhd2FpdCBpb0hlbHBlci5ub3RpZnkoZGVidWcoJ0RlZmF1bHRpbmcgdG8gYWxsb3dpbmcgY3Jvc3MgYWNjb3VudCBhc3NldCBwdWJsaXNoaW5nJykpO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG59XG5cbmludGVyZmFjZSBCb290c3RyYXBTdGFja0luZm8ge1xuICBoYXNTdGFnaW5nQnVja2V0OiBib29sZWFuO1xuICBib290c3RyYXBWZXJzaW9uOiBudW1iZXI7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRCb290c3RyYXBTdGFja0luZm8oc2RrOiBTREssIHN0YWNrTmFtZTogc3RyaW5nKTogUHJvbWlzZTxCb290c3RyYXBTdGFja0luZm8+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCBjZm4gPSBzZGsuY2xvdWRGb3JtYXRpb24oKTtcbiAgICBjb25zdCBzdGFja1Jlc3BvbnNlID0gYXdhaXQgY2ZuLmRlc2NyaWJlU3RhY2tzKHsgU3RhY2tOYW1lOiBzdGFja05hbWUgfSk7XG5cbiAgICBpZiAoIXN0YWNrUmVzcG9uc2UuU3RhY2tzIHx8IHN0YWNrUmVzcG9uc2UuU3RhY2tzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IFRvb2xraXRFcnJvcihgVG9vbGtpdCBzdGFjayAke3N0YWNrTmFtZX0gbm90IGZvdW5kYCk7XG4gICAgfVxuXG4gICAgY29uc3Qgc3RhY2sgPSBzdGFja1Jlc3BvbnNlLlN0YWNrc1swXTtcbiAgICBjb25zdCB2ZXJzaW9uT3V0cHV0ID0gc3RhY2suT3V0cHV0cz8uZmluZChvdXRwdXQgPT4gb3V0cHV0Lk91dHB1dEtleSA9PT0gJ0Jvb3RzdHJhcFZlcnNpb24nKTtcblxuICAgIGlmICghdmVyc2lvbk91dHB1dD8uT3V0cHV0VmFsdWUpIHtcbiAgICAgIHRocm93IG5ldyBUb29sa2l0RXJyb3IoYFVuYWJsZSB0byBmaW5kIEJvb3RzdHJhcFZlcnNpb24gb3V0cHV0IGluIHRoZSB0b29sa2l0IHN0YWNrICR7c3RhY2tOYW1lfWApO1xuICAgIH1cblxuICAgIGNvbnN0IGJvb3RzdHJhcFZlcnNpb24gPSBwYXJzZUludCh2ZXJzaW9uT3V0cHV0Lk91dHB1dFZhbHVlKTtcbiAgICBpZiAoaXNOYU4oYm9vdHN0cmFwVmVyc2lvbikpIHtcbiAgICAgIHRocm93IG5ldyBUb29sa2l0RXJyb3IoYEludmFsaWQgQm9vdHN0cmFwVmVyc2lvbiB2YWx1ZTogJHt2ZXJzaW9uT3V0cHV0Lk91dHB1dFZhbHVlfWApO1xuICAgIH1cblxuICAgIC8vIHRyeSB0byBnZXQgYnVja2V0bmFtZSBmcm9tIHRoZSBsb2dpY2FsIHJlc291cmNlIGlkLiBJZiB0aGVyZSBpcyBub1xuICAgIC8vIGJ1Y2tldG5hbWUsIG9yIHRoZSB2YWx1ZSBkb2Vzbid0IGxvb2sgbGlrZSBhbiBTMyBidWNrZXQgbmFtZSwgd2UgYXNzdW1lXG4gICAgLy8gdGhlIGJ1Y2tldCBkb2Vzbid0IGV4aXN0ICh0aGlzIGlzIGZvciB0aGUgY2FzZSB3aGVyZSBhIHRlbXBsYXRlIGN1c3RvbWl6ZXIgZGlkXG4gICAgLy8gbm90IGRhcmUgdG8gcmVtb3ZlIHRoZSBPdXRwdXQsIGJ1dCBwdXQgYSBkdW1teSB2YWx1ZSB0aGVyZSBsaWtlICcnIG9yICctJyBvciAnKioqJykuXG4gICAgLy9cbiAgICAvLyBXZSB3b3VsZCBoYXZlIHByZWZlcnJlZCB0byBsb29rIGF0IHRoZSBzdGFjayByZXNvdXJjZXMgaGVyZSwgYnV0XG4gICAgLy8gdW5mb3J0dW5hdGVseSB0aGUgZGVwbG95IHJvbGUgZG9lc24ndCBoYXZlIHBlcm1pc3Npb25zIGNhbGwgRGVzY3JpYmVTdGFja1Jlc291cmNlcy5cbiAgICBjb25zdCBidWNrZXROYW1lID0gc3RhY2suT3V0cHV0cz8uZmluZChvdXRwdXQgPT4gb3V0cHV0Lk91dHB1dEtleSA9PT0gJ0J1Y2tldE5hbWUnKT8uT3V0cHV0VmFsdWU7XG4gICAgLy8gTXVzdCBiZWdpbiBhbmQgZW5kIHdpdGggbGV0dGVyIG9yIG51bWJlci5cbiAgICBjb25zdCBoYXNTdGFnaW5nQnVja2V0ID0gISEoYnVja2V0TmFtZSAmJiBidWNrZXROYW1lLm1hdGNoKC9eW2EtejAtOV0vKSAmJiBidWNrZXROYW1lLm1hdGNoKC9bYS16MC05XSQvKSk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgaGFzU3RhZ2luZ0J1Y2tldCxcbiAgICAgIGJvb3RzdHJhcFZlcnNpb24sXG4gICAgfTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHRocm93IG5ldyBUb29sa2l0RXJyb3IoYEVycm9yIHJldHJpZXZpbmcgdG9vbGtpdCBzdGFjayBpbmZvOiAke2V9YCk7XG4gIH1cbn1cbiJdfQ==
73
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlY2tzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiY2hlY2tzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBS0EsOEZBbUNDO0FBT0Qsc0RBdUNDO0FBckZELGlEQUEyQztBQUMzQywrQ0FBbUQ7QUFHNUMsS0FBSyxVQUFVLHlDQUF5QyxDQUM3RCxHQUFRLEVBQ1IsUUFBa0IsRUFDbEIsZUFBd0I7SUFFeEIsSUFBSSxDQUFDO1FBQ0gsTUFBTSxTQUFTLEdBQUcsZUFBZSxJQUFJLFlBQVksQ0FBQztRQUNsRCxNQUFNLFNBQVMsR0FBRyxNQUFNLHFCQUFxQixDQUFDLEdBQUcsRUFBRSxTQUFTLENBQUMsQ0FBQztRQUU5RCxJQUFJLENBQUMsU0FBUyxDQUFDLGdCQUFnQixFQUFFLENBQUM7WUFDaEMsK0NBQStDO1lBQy9DLE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztRQUVELElBQUksU0FBUyxDQUFDLGdCQUFnQixJQUFJLEVBQUUsRUFBRSxDQUFDO1lBQ3JDLG9FQUFvRTtZQUNwRSxzQ0FBc0M7WUFDdEMsNENBQTRDO1lBQzVDLE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztRQUVELHlGQUF5RjtRQUN6RiwrQ0FBK0M7UUFDL0MsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztRQUNYLHdFQUF3RTtRQUN4RSxvRUFBb0U7UUFDcEUsMkVBQTJFO1FBQzNFLG1GQUFtRjtRQUNuRixxRkFBcUY7UUFDckYsK0RBQStEO1FBQy9ELE1BQU0sUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFBLGdCQUFLLEVBQUMscURBQXFELENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUN2RixNQUFNLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBQSxnQkFBSyxFQUFDLHVEQUF1RCxDQUFDLENBQUMsQ0FBQztRQUN0RixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7QUFDSCxDQUFDO0FBT00sS0FBSyxVQUFVLHFCQUFxQixDQUFDLEdBQVEsRUFBRSxTQUFpQjs7SUFDckUsSUFBSSxDQUFDO1FBQ0gsTUFBTSxHQUFHLEdBQUcsR0FBRyxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ2pDLE1BQU0sYUFBYSxHQUFHLE1BQU0sR0FBRyxDQUFDLGNBQWMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDO1FBRXpFLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxJQUFJLGFBQWEsQ0FBQyxNQUFNLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQy9ELE1BQU0sSUFBSSxvQkFBWSxDQUFDLGlCQUFpQixTQUFTLFlBQVksQ0FBQyxDQUFDO1FBQ2pFLENBQUM7UUFFRCxNQUFNLEtBQUssR0FBRyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3RDLE1BQU0sYUFBYSxHQUFHLE1BQUEsS0FBSyxDQUFDLE9BQU8sMENBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLFNBQVMsS0FBSyxrQkFBa0IsQ0FBQyxDQUFDO1FBRTdGLElBQUksQ0FBQyxDQUFBLGFBQWEsYUFBYixhQUFhLHVCQUFiLGFBQWEsQ0FBRSxXQUFXLENBQUEsRUFBRSxDQUFDO1lBQ2hDLE1BQU0sSUFBSSxvQkFBWSxDQUFDLCtEQUErRCxTQUFTLEVBQUUsQ0FBQyxDQUFDO1FBQ3JHLENBQUM7UUFFRCxNQUFNLGdCQUFnQixHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDN0QsSUFBSSxLQUFLLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxDQUFDO1lBQzVCLE1BQU0sSUFBSSxvQkFBWSxDQUFDLG1DQUFtQyxhQUFhLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztRQUN6RixDQUFDO1FBRUQscUVBQXFFO1FBQ3JFLDBFQUEwRTtRQUMxRSxpRkFBaUY7UUFDakYsdUZBQXVGO1FBQ3ZGLEVBQUU7UUFDRixtRUFBbUU7UUFDbkUsc0ZBQXNGO1FBQ3RGLE1BQU0sVUFBVSxHQUFHLE1BQUEsTUFBQSxLQUFLLENBQUMsT0FBTywwQ0FBRSxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsU0FBUyxLQUFLLFlBQVksQ0FBQywwQ0FBRSxXQUFXLENBQUM7UUFDakcsNENBQTRDO1FBQzVDLE1BQU0sZ0JBQWdCLEdBQUcsQ0FBQyxDQUFDLENBQUMsVUFBVSxJQUFJLFVBQVUsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLElBQUksVUFBVSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO1FBRTFHLE9BQU87WUFDTCxnQkFBZ0I7WUFDaEIsZ0JBQWdCO1NBQ2pCLENBQUM7SUFDSixDQUFDO0lBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztRQUNYLE1BQU0sSUFBSSxvQkFBWSxDQUFDLHdDQUF3QyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3RFLENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBJb0hlbHBlciB9IGZyb20gJy4uLy4uLy4uLy4uL0Bhd3MtY2RrL3RtcC10b29sa2l0LWhlbHBlcnMvc3JjL2FwaS9pby9wcml2YXRlJztcbmltcG9ydCB7IGRlYnVnIH0gZnJvbSAnLi4vLi4vY2xpL21lc3NhZ2VzJztcbmltcG9ydCB7IFRvb2xraXRFcnJvciB9IGZyb20gJy4uLy4uL3Rvb2xraXQvZXJyb3InO1xuaW1wb3J0IHR5cGUgeyBTREsgfSBmcm9tICcuLi9hd3MtYXV0aCc7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBkZXRlcm1pbmVBbGxvd0Nyb3NzQWNjb3VudEFzc2V0UHVibGlzaGluZyhcbiAgc2RrOiBTREssXG4gIGlvSGVscGVyOiBJb0hlbHBlcixcbiAgY3VzdG9tU3RhY2tOYW1lPzogc3RyaW5nLFxuKTogUHJvbWlzZTxib29sZWFuPiB7XG4gIHRyeSB7XG4gICAgY29uc3Qgc3RhY2tOYW1lID0gY3VzdG9tU3RhY2tOYW1lIHx8ICdDREtUb29sa2l0JztcbiAgICBjb25zdCBzdGFja0luZm8gPSBhd2FpdCBnZXRCb290c3RyYXBTdGFja0luZm8oc2RrLCBzdGFja05hbWUpO1xuXG4gICAgaWYgKCFzdGFja0luZm8uaGFzU3RhZ2luZ0J1Y2tldCkge1xuICAgICAgLy8gaW5kaWNhdGVzIGFuIGludGVudGlvbmFsIGNyb3NzIGFjY291bnQgc2V0dXBcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGlmIChzdGFja0luZm8uYm9vdHN0cmFwVmVyc2lvbiA+PSAyMSkge1xuICAgICAgLy8gYm9vdHN0cmFwIHN0YWNrIHZlcnNpb24gMjEgY29udGFpbnMgYSBmaXggdGhhdCB3aWxsIHByZXZlbnQgY3Jvc3NcbiAgICAgIC8vIGFjY291bnQgcHVibGlzaGluZyBvbiB0aGUgSUFNIGxldmVsXG4gICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vYXdzL2F3cy1jZGsvcHVsbC8zMDgyM1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLy8gSWYgdGhlcmUgaXMgYSBzdGFnaW5nIGJ1Y2tldCBBTkQgdGhlIGJvb3RzdHJhcCB2ZXJzaW9uIGlzIG9sZCwgdGhlbiB3ZSB3YW50IHRvIHByb3RlY3RcbiAgICAvLyBhZ2FpbnN0IGFjY2lkZW50YWwgY3Jvc3MtYWNjb3VudCBwdWJsaXNoaW5nLlxuICAgIHJldHVybiBmYWxzZTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIC8vIFlvdSB3b3VsZCB0aGluayB3ZSB3b3VsZCBuZWVkIHRvIGZhaWwgY2xvc2VkIGhlcmUsIGJ1dCB0aGUgcmVhbGl0eSBpc1xuICAgIC8vIHRoYXQgd2UgZ2V0IGhlcmUgaWYgd2UgY291bGRuJ3QgZmluZCB0aGUgYm9vdHN0cmFwIHN0YWNrOiB0aGF0IGlzXG4gICAgLy8gY29tcGxldGVseSB2YWxpZCwgYW5kIG1hbnkgbGFyZ2Ugb3JnYW5pemF0aW9ucyBtYXkgaGF2ZSB0aGVpciBvd24gbWV0aG9kXG4gICAgLy8gb2YgY3JlYXRpbmcgYm9vdHN0cmFwIHJlc291cmNlcy4gSWYgdGhleSBkbywgdGhlcmUncyBub3RoaW5nIGZvciB1cyB0byB2YWxpZGF0ZSxcbiAgICAvLyBidXQgd2UgY2FuJ3QgdXNlIHRoYXQgYXMgYSByZWFzb24gdG8gZGlzYWxsb3cgY3Jvc3MtYWNjb3VudCBwdWJsaXNoaW5nLiBXZSdsbCBqdXN0XG4gICAgLy8gaGF2ZSB0byB0cnVzdCB0aGV5IGRpZCB0aGVpciBkdWUgZGlsaWdlbmNlLiBTbyB3ZSBmYWlsIG9wZW4uXG4gICAgYXdhaXQgaW9IZWxwZXIubm90aWZ5KGRlYnVnKGBFcnJvciBkZXRlcm1pbmluZyBjcm9zcyBhY2NvdW50IGFzc2V0IHB1Ymxpc2hpbmc6ICR7ZX1gKSk7XG4gICAgYXdhaXQgaW9IZWxwZXIubm90aWZ5KGRlYnVnKCdEZWZhdWx0aW5nIHRvIGFsbG93aW5nIGNyb3NzIGFjY291bnQgYXNzZXQgcHVibGlzaGluZycpKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufVxuXG5pbnRlcmZhY2UgQm9vdHN0cmFwU3RhY2tJbmZvIHtcbiAgaGFzU3RhZ2luZ0J1Y2tldDogYm9vbGVhbjtcbiAgYm9vdHN0cmFwVmVyc2lvbjogbnVtYmVyO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0Qm9vdHN0cmFwU3RhY2tJbmZvKHNkazogU0RLLCBzdGFja05hbWU6IHN0cmluZyk6IFByb21pc2U8Qm9vdHN0cmFwU3RhY2tJbmZvPiB7XG4gIHRyeSB7XG4gICAgY29uc3QgY2ZuID0gc2RrLmNsb3VkRm9ybWF0aW9uKCk7XG4gICAgY29uc3Qgc3RhY2tSZXNwb25zZSA9IGF3YWl0IGNmbi5kZXNjcmliZVN0YWNrcyh7IFN0YWNrTmFtZTogc3RhY2tOYW1lIH0pO1xuXG4gICAgaWYgKCFzdGFja1Jlc3BvbnNlLlN0YWNrcyB8fCBzdGFja1Jlc3BvbnNlLlN0YWNrcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBUb29sa2l0RXJyb3IoYFRvb2xraXQgc3RhY2sgJHtzdGFja05hbWV9IG5vdCBmb3VuZGApO1xuICAgIH1cblxuICAgIGNvbnN0IHN0YWNrID0gc3RhY2tSZXNwb25zZS5TdGFja3NbMF07XG4gICAgY29uc3QgdmVyc2lvbk91dHB1dCA9IHN0YWNrLk91dHB1dHM/LmZpbmQob3V0cHV0ID0+IG91dHB1dC5PdXRwdXRLZXkgPT09ICdCb290c3RyYXBWZXJzaW9uJyk7XG5cbiAgICBpZiAoIXZlcnNpb25PdXRwdXQ/Lk91dHB1dFZhbHVlKSB7XG4gICAgICB0aHJvdyBuZXcgVG9vbGtpdEVycm9yKGBVbmFibGUgdG8gZmluZCBCb290c3RyYXBWZXJzaW9uIG91dHB1dCBpbiB0aGUgdG9vbGtpdCBzdGFjayAke3N0YWNrTmFtZX1gKTtcbiAgICB9XG5cbiAgICBjb25zdCBib290c3RyYXBWZXJzaW9uID0gcGFyc2VJbnQodmVyc2lvbk91dHB1dC5PdXRwdXRWYWx1ZSk7XG4gICAgaWYgKGlzTmFOKGJvb3RzdHJhcFZlcnNpb24pKSB7XG4gICAgICB0aHJvdyBuZXcgVG9vbGtpdEVycm9yKGBJbnZhbGlkIEJvb3RzdHJhcFZlcnNpb24gdmFsdWU6ICR7dmVyc2lvbk91dHB1dC5PdXRwdXRWYWx1ZX1gKTtcbiAgICB9XG5cbiAgICAvLyB0cnkgdG8gZ2V0IGJ1Y2tldG5hbWUgZnJvbSB0aGUgbG9naWNhbCByZXNvdXJjZSBpZC4gSWYgdGhlcmUgaXMgbm9cbiAgICAvLyBidWNrZXRuYW1lLCBvciB0aGUgdmFsdWUgZG9lc24ndCBsb29rIGxpa2UgYW4gUzMgYnVja2V0IG5hbWUsIHdlIGFzc3VtZVxuICAgIC8vIHRoZSBidWNrZXQgZG9lc24ndCBleGlzdCAodGhpcyBpcyBmb3IgdGhlIGNhc2Ugd2hlcmUgYSB0ZW1wbGF0ZSBjdXN0b21pemVyIGRpZFxuICAgIC8vIG5vdCBkYXJlIHRvIHJlbW92ZSB0aGUgT3V0cHV0LCBidXQgcHV0IGEgZHVtbXkgdmFsdWUgdGhlcmUgbGlrZSAnJyBvciAnLScgb3IgJyoqKicpLlxuICAgIC8vXG4gICAgLy8gV2Ugd291bGQgaGF2ZSBwcmVmZXJyZWQgdG8gbG9vayBhdCB0aGUgc3RhY2sgcmVzb3VyY2VzIGhlcmUsIGJ1dFxuICAgIC8vIHVuZm9ydHVuYXRlbHkgdGhlIGRlcGxveSByb2xlIGRvZXNuJ3QgaGF2ZSBwZXJtaXNzaW9ucyBjYWxsIERlc2NyaWJlU3RhY2tSZXNvdXJjZXMuXG4gICAgY29uc3QgYnVja2V0TmFtZSA9IHN0YWNrLk91dHB1dHM/LmZpbmQob3V0cHV0ID0+IG91dHB1dC5PdXRwdXRLZXkgPT09ICdCdWNrZXROYW1lJyk/Lk91dHB1dFZhbHVlO1xuICAgIC8vIE11c3QgYmVnaW4gYW5kIGVuZCB3aXRoIGxldHRlciBvciBudW1iZXIuXG4gICAgY29uc3QgaGFzU3RhZ2luZ0J1Y2tldCA9ICEhKGJ1Y2tldE5hbWUgJiYgYnVja2V0TmFtZS5tYXRjaCgvXlthLXowLTldLykgJiYgYnVja2V0TmFtZS5tYXRjaCgvW2EtejAtOV0kLykpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGhhc1N0YWdpbmdCdWNrZXQsXG4gICAgICBib290c3RyYXBWZXJzaW9uLFxuICAgIH07XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICB0aHJvdyBuZXcgVG9vbGtpdEVycm9yKGBFcnJvciByZXRyaWV2aW5nIHRvb2xraXQgc3RhY2sgaW5mbzogJHtlfWApO1xuICB9XG59XG4iXX0=
@@ -1,10 +1,10 @@
1
1
  import * as cxapi from '@aws-cdk/cx-api';
2
2
  import { type DescribeChangeSetCommandOutput, type Parameter, type ResourceIdentifierSummary, type ResourceToImport, type Stack, type Tag } from '@aws-sdk/client-cloudformation';
3
3
  import type { Deployments } from './deployments';
4
- import { IoHelper } from '../../../../@aws-cdk/tmp-toolkit-helpers/src/api/io/private';
4
+ import type { IoHelper } from '../../../../@aws-cdk/tmp-toolkit-helpers/src/api/io/private';
5
5
  import type { ICloudFormationClient, SdkProvider } from '../aws-auth';
6
6
  import { StackStatus } from '../stack-events';
7
- import { TemplateBodyParameter } from '../util/template-body-parameter';
7
+ import type { TemplateBodyParameter } from '../util/template-body-parameter';
8
8
  export type ResourcesToImport = ResourceToImport[];
9
9
  export type ResourceIdentifierSummaries = ResourceIdentifierSummary[];
10
10
  export type ResourceIdentifierProperties = Record<string, string>;
@@ -594,4 +594,4 @@ class ParameterValues {
594
594
  }
595
595
  }
596
596
  exports.ParameterValues = ParameterValues;
597
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xvdWRmb3JtYXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJjbG91ZGZvcm1hdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFnU0EsNENBa0NDO0FBNkJELGtEQWdCQztBQWdGRCw4REFpQkM7QUFFRCwwQ0FrQ0M7QUErQkQsc0RBV0M7QUFjRCxnREFtQkM7QUFhRCxnREFxQkM7QUFLRCx3Q0E0QkM7QUFsb0JELCtCQUE4QjtBQUM5Qix5Q0FBeUM7QUFDekMsNENBQXlEO0FBQ3pELDBFQVF3QztBQUN4QywyQ0FBOEQ7QUFDOUQscUVBQWdFO0FBR2hFLGlEQUEyQztBQUMzQywrQ0FBbUQ7QUFDbkQscUNBQXNFO0FBRXRFLGtEQUE4QztBQUM5Qyw2RUFBMkY7QUFrQjNGOzs7OztHQUtHO0FBQ0gsTUFBYSxtQkFBbUI7SUFDdkIsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQ3hCLEdBQTBCLEVBQzFCLFNBQWlCLEVBQ2pCLDRCQUFxQyxLQUFLO1FBRTFDLElBQUksQ0FBQztZQUNILE1BQU0sUUFBUSxHQUFHLE1BQU0sR0FBRyxDQUFDLGNBQWMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDO1lBQ3BFLE9BQU8sSUFBSSxtQkFBbUIsQ0FBQyxHQUFHLEVBQUUsU0FBUyxFQUFFLFFBQVEsQ0FBQyxNQUFNLElBQUksUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSx5QkFBeUIsQ0FBQyxDQUFDO1FBQ25ILENBQUM7UUFBQyxPQUFPLENBQU0sRUFBRSxDQUFDO1lBQ2hCLElBQUksQ0FBQyxDQUFDLElBQUksS0FBSyxpQkFBaUIsSUFBSSxJQUFBLHlCQUFrQixFQUFDLENBQUMsQ0FBQyxLQUFLLGlCQUFpQixTQUFTLGlCQUFpQixFQUFFLENBQUM7Z0JBQzFHLE9BQU8sSUFBSSxtQkFBbUIsQ0FBQyxHQUFHLEVBQUUsU0FBUyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1lBQzVELENBQUM7WUFDRCxN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QUcsSUFBSSxhQUFhLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDcEUsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO1FBRUQsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0NBQ0Y7QUFwRkQsMENBb0ZDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZm9ybWF0IH0gZnJvbSAndXRpbCc7XG5pbXBvcnQgKiBhcyBjeGFwaSBmcm9tICdAYXdzLWNkay9jeC1hcGknO1xuaW1wb3J0IHsgU1NNUEFSQU1fTk9fSU5WQUxJREFURSB9IGZyb20gJ0Bhd3MtY2RrL2N4LWFwaSc7XG5pbXBvcnQge1xuICBDaGFuZ2VTZXRTdGF0dXMsXG4gIHR5cGUgRGVzY3JpYmVDaGFuZ2VTZXRDb21tYW5kT3V0cHV0LFxuICB0eXBlIFBhcmFtZXRlcixcbiAgdHlwZSBSZXNvdXJjZUlkZW50aWZpZXJTdW1tYXJ5LFxuICB0eXBlIFJlc291cmNlVG9JbXBvcnQsXG4gIHR5cGUgU3RhY2ssXG4gIHR5cGUgVGFnLFxufSBmcm9tICdAYXdzLXNkay9jbGllbnQtY2xvdWRmb3JtYXRpb24nO1xuaW1wb3J0IHsgQXNzZXRNYW5pZmVzdCwgRmlsZU1hbmlmZXN0RW50cnkgfSBmcm9tICdjZGstYXNzZXRzJztcbmltcG9ydCB7IEFzc2V0TWFuaWZlc3RCdWlsZGVyIH0gZnJvbSAnLi9hc3NldC1tYW5pZmVzdC1idWlsZGVyJztcbmltcG9ydCB0eXBlIHsgRGVwbG95bWVudHMgfSBmcm9tICcuL2RlcGxveW1lbnRzJztcbmltcG9ydCB7IElvSGVscGVyIH0gZnJvbSAnLi4vLi4vLi4vLi4vQGF3cy1jZGsvdG1wLXRvb2xraXQtaGVscGVycy9zcmMvYXBpL2lvL3ByaXZhdGUnO1xuaW1wb3J0IHsgZGVidWcgfSBmcm9tICcuLi8uLi9jbGkvbWVzc2FnZXMnO1xuaW1wb3J0IHsgVG9vbGtpdEVycm9yIH0gZnJvbSAnLi4vLi4vdG9vbGtpdC9lcnJvcic7XG5pbXBvcnQgeyBmb3JtYXRFcnJvck1lc3NhZ2UsIGRlc2VyaWFsaXplU3RydWN0dXJlIH0gZnJvbSAnLi4vLi4vdXRpbCc7XG5pbXBvcnQgdHlwZSB7IElDbG91ZEZvcm1hdGlvbkNsaWVudCwgU2RrUHJvdmlkZXIgfSBmcm9tICcuLi9hd3MtYXV0aCc7XG5pbXBvcnQgeyBTdGFja1N0YXR1cyB9IGZyb20gJy4uL3N0YWNrLWV2ZW50cyc7XG5pbXBvcnQgeyBtYWtlQm9keVBhcmFtZXRlciwgVGVtcGxhdGVCb2R5UGFyYW1ldGVyIH0gZnJvbSAnLi4vdXRpbC90ZW1wbGF0ZS1ib2R5LXBhcmFtZXRlcic7XG5cbmV4cG9ydCB0eXBlIFJlc291cmNlc1RvSW1wb3J0ID0gUmVzb3VyY2VUb0ltcG9ydFtdO1xuZXhwb3J0IHR5cGUgUmVzb3VyY2VJZGVudGlmaWVyU3VtbWFyaWVzID0gUmVzb3VyY2VJZGVudGlmaWVyU3VtbWFyeVtdO1xuZXhwb3J0IHR5cGUgUmVzb3VyY2VJZGVudGlmaWVyUHJvcGVydGllcyA9IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG5cbmV4cG9ydCB0eXBlIFRlbXBsYXRlID0ge1xuICBQYXJhbWV0ZXJzPzogUmVjb3JkPHN0cmluZywgVGVtcGxhdGVQYXJhbWV0ZXI+O1xuICBba2V5OiBzdHJpbmddOiBhbnk7XG59O1xuXG5pbnRlcmZhY2UgVGVtcGxhdGVQYXJhbWV0ZXIge1xuICBUeXBlOiBzdHJpbmc7XG4gIERlZmF1bHQ/OiBhbnk7XG4gIERlc2NyaXB0aW9uPzogc3RyaW5nO1xuICBba2V5OiBzdHJpbmddOiBhbnk7XG59XG5cbi8qKlxuICogUmVwcmVzZW50cyBhbiAoZXhpc3RpbmcpIFN0YWNrIGluIENsb3VkRm9ybWF0aW9uXG4gKlxuICogQnVuZGxlIGFuZCBjYWNoZSBzb21lIGluZm9ybWF0aW9uIHRoYXQgd2UgbmVlZCBkdXJpbmcgZGVwbG95bWVudCAoc28gd2UgZG9uJ3QgaGF2ZSB0byBtYWtlXG4gKiByZXBlYXRlZCBjYWxscyB0byBDbG91ZEZvcm1hdGlvbikuXG4gKi9cbmV4cG9ydCBjbGFzcyBDbG91ZEZvcm1hdGlvblN0YWNrIHtcbiAgcHVibGljIHN0YXRpYyBhc3luYyBsb29rdXAoXG4gICAgY2ZuOiBJQ2xvdWRGb3JtYXRpb25DbGllbnQsXG4gICAgc3RhY2tOYW1lOiBzdHJpbmcsXG4gICAgcmV0cmlldmVQcm9jZXNzZWRUZW1wbGF0ZTogYm9vbGVhbiA9IGZhbHNlLFxuICApOiBQcm9taXNlPENsb3VkRm9ybWF0aW9uU3RhY2s+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjZm4uZGVzY3JpYmVTdGFja3MoeyBTdGFja05hbWU6IHN0YWNrTmFtZSB9KTtcbiAgICAgIHJldHVybiBuZXcgQ2xvdWRGb3JtYXRpb25TdGFjayhjZm4sIHN0YWNrTmFtZSwgcmVzcG9uc2UuU3RhY2tzICYmIHJlc3BvbnNlLlN0YWNrc1swXSwgcmV0cmlldmVQcm9jZXNzZWRUZW1wbGF0ZSk7XG4gICAgfSBjYXRjaCAoZTogYW55KSB7XG4gICAgICBpZiAoZS5uYW1lID09PSAnVmFsaWRhdGlvbkVycm9yJyAmJiBmb3JtYXRFcnJvck1lc3NhZ2UoZSkgPT09IGBTdGFjayB3aXRoIGlkICR7c3RhY2tOYW1lfSBkb2VzIG5vdCBleGlzdGApIHtcbiAgICAgICAgcmV0dXJuIG5ldyBDbG91ZEZvcm1hdGlvblN0YWNrKGNmbiwgc3RhY2tOYW1lLCB1bmRlZmluZWQpO1xuICAgICAgfVxuICAgICAgdGhyb3cgZTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGEgY29weSBvZiB0aGUgZ2l2ZW4gc3RhY2sgdGhhdCBkb2VzIG5vdCBleGlzdFxuICAgKlxuICAgKiBJdCdzIGEgbGl0dGxlIHNpbGx5IHRoYXQgaXQgbmVlZHMgYXJndW1lbnRzIHRvIGRvIHRoYXQsIGJ1dCB0aGVyZSB3ZSBnby5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZG9lc05vdEV4aXN0KGNmbjogSUNsb3VkRm9ybWF0aW9uQ2xpZW50LCBzdGFja05hbWU6IHN0cmluZykge1xuICAgIHJldHVybiBuZXcgQ2xvdWRGb3JtYXRpb25TdGFjayhjZm4sIHN0YWNrTmFtZSk7XG4gIH1cblxuICAvKipcbiAgICogRnJvbSBzdGF0aWMgaW5mb3JtYXRpb24gKGZvciB0ZXN0aW5nKVxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBmcm9tU3RhdGljSW5mb3JtYXRpb24oY2ZuOiBJQ2xvdWRGb3JtYXRpb25DbGllbnQsIHN0YWNrTmFtZTogc3RyaW5nLCBzdGFjazogU3RhY2spIHtcbiAgICByZXR1cm4gbmV3IENsb3VkRm9ybWF0aW9uU3RhY2soY2ZuLCBzdGFja05hbWUsIHN0YWNrKTtcbiAgfVxuXG4gIHByaXZhdGUgX3RlbXBsYXRlOiBhbnk7XG5cbiAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgY2ZuOiBJQ2xvdWRGb3JtYXRpb25DbGllbnQsXG4gICAgcHVibGljIHJlYWRvbmx5IHN0YWNrTmFtZTogc3RyaW5nLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgc3RhY2s/OiBTdGFjayxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHJldHJpZXZlUHJvY2Vzc2VkVGVtcGxhdGU6IGJvb2xlYW4gPSBmYWxzZSxcbiAgKSB7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmUgdGhlIHN0YWNrJ3MgZGVwbG95ZWQgdGVtcGxhdGVcbiAgICpcbiAgICogQ2FjaGVkLCBzbyB3aWxsIG9ubHkgYmUgcmV0cmlldmVkIG9uY2UuIFdpbGwgcmV0dXJuIGFuIGVtcHR5XG4gICAqIHN0cnVjdHVyZSBpZiB0aGUgc3RhY2sgZG9lcyBub3QgZXhpc3QuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgdGVtcGxhdGUoKTogUHJvbWlzZTxUZW1wbGF0ZT4ge1xuICAgIGlmICghdGhpcy5leGlzdHMpIHtcbiAgICAgIHJldHVybiB7fTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fdGVtcGxhdGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmNmbi5nZXRUZW1wbGF0ZSh7XG4gICAgICAgIFN0YWNrTmFtZTogdGhpcy5zdGFja05hbWUsXG4gICAgICAgIFRlbXBsYXRlU3RhZ2U6IHRoaXMucmV0cmlldmVQcm9jZXNzZWRUZW1wbGF0ZSA/ICdQcm9jZXNzZWQnIDogJ09yaWdpbmFsJyxcbiAgICAgIH0pO1xuICAgICAgdGhpcy5fdGVtcGxhdGUgPSAocmVzcG9uc2UuVGVtcGxhdGVCb2R5ICYmIGRlc2VyaWFsaXplU3RydWN0dXJlKHJlc3BvbnNlLlRlbXBsYXRlQm9keSkpIHx8IHt9O1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fdGVtcGxhdGU7XG4gIH1cblxuICAvKipcbiAgICogV2hldGhlciB0aGUgc3RhY2sgZXhpc3RzXG4gICAqL1xuICBwdWJsaWMgZ2V0IGV4aXN0cygpIHtcbiAgICByZXR1cm4gdGhpcy5zdGFjayAhPT0gdW5kZWZpbmVkO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBzdGFjaydzIElEXG4gICAqXG4gICAqIFRocm93cyBpZiB0aGUgc3RhY2sgZG9lc24ndCBleGlzdC5cbiAgICovXG4gIHB1YmxpYyBnZXQgc3RhY2tJZCgpIHtcbiAgICB0aGlzLmFzc2VydEV4aXN0cygpO1xuICAgIHJldHVybiB0aGlzLnN0YWNrIS5TdGFja0lkITtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgc3RhY2sncyBjdXJyZW50IG91dHB1dHNcbiAgICpcbiAgICogRW1wdHkgb2JqZWN0IGlmIHRoZSBzdGFjayBkb2Vzbid0IGV4aXN0XG4gICAqL1xuICBwdWJsaWMgZ2V0IG91dHB1dHMoKTogUmVjb3JkPHN0cmluZywgc3RyaW5nPiB7XG4gICAgaWYgKCF0aGlzLmV4aXN0cykge1xuICAgICAgcmV0dXJuIHt9O1xuICAgIH1cbiAgICBjb25zdCByZXN1bHQ6IHsgW25hbWU6IHN0cmluZ106IHN0cmluZyB9ID0ge307XG4gICAgKHRoaXMuc3RhY2shLk91dHB1dHMgfHwgW10pLmZvckVhY2goKG91dHB1dCkgPT4ge1xuICAgICAgcmVzdWx0W291dHB1dC5PdXRwdXRLZXkhXSA9IG91dHB1dC5PdXRwdXRWYWx1ZSE7XG4gICAgfSk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgc3RhY2sncyBzdGF0dXNcbiAgICpcbiAgICogU3BlY2lhbCBzdGF0dXMgTk9UX0ZPVU5EIGlmIHRoZSBzdGFjayBkb2VzIG5vdCBleGlzdC5cbiAgICovXG4gIHB1YmxpYyBnZXQgc3RhY2tTdGF0dXMoKTogU3RhY2tTdGF0dXMge1xuICAgIGlmICghdGhpcy5leGlzdHMpIHtcbiAgICAgIHJldHVybiBuZXcgU3RhY2tTdGF0dXMoJ05PVF9GT1VORCcsICdTdGFjayBub3QgZm91bmQgZHVyaW5nIGxvb2t1cCcpO1xuICAgIH1cbiAgICByZXR1cm4gU3RhY2tTdGF0dXMuZnJvbVN0YWNrRGVzY3JpcHRpb24odGhpcy5zdGFjayEpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBzdGFjaydzIGN1cnJlbnQgdGFnc1xuICAgKlxuICAgKiBFbXB0eSBsaXN0IGlmIHRoZSBzdGFjayBkb2VzIG5vdCBleGlzdFxuICAgKi9cbiAgcHVibGljIGdldCB0YWdzKCk6IFRhZ1tdIHtcbiAgICByZXR1cm4gdGhpcy5zdGFjaz8uVGFncyB8fCBbXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTTlMgVG9waWMgQVJOcyB0aGF0IHdpbGwgcmVjZWl2ZSBzdGFjayBldmVudHMuXG4gICAqXG4gICAqIEVtcHR5IGxpc3QgaWYgdGhlIHN0YWNrIGRvZXMgbm90IGV4aXN0XG4gICAqL1xuICBwdWJsaWMgZ2V0IG5vdGlmaWNhdGlvbkFybnMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiB0aGlzLnN0YWNrPy5Ob3RpZmljYXRpb25BUk5zID8/IFtdO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB0aGUgbmFtZXMgb2YgYWxsIGN1cnJlbnQgcGFyYW1ldGVycyB0byB0aGUgc3RhY2tcbiAgICpcbiAgICogRW1wdHkgbGlzdCBpZiB0aGUgc3RhY2sgZG9lcyBub3QgZXhpc3QuXG4gICAqL1xuICBwdWJsaWMgZ2V0IHBhcmFtZXRlck5hbWVzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gT2JqZWN0LmtleXModGhpcy5wYXJhbWV0ZXJzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIG5hbWVzIGFuZCB2YWx1ZXMgb2YgYWxsIGN1cnJlbnQgcGFyYW1ldGVycyB0byB0aGUgc3RhY2tcbiAgICpcbiAgICogRW1wdHkgb2JqZWN0IGlmIHRoZSBzdGFjayBkb2VzIG5vdCBleGlzdC5cbiAgICovXG4gIHB1YmxpYyBnZXQgcGFyYW1ldGVycygpOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHtcbiAgICBpZiAoIXRoaXMuZXhpc3RzKSB7XG4gICAgICByZXR1cm4ge307XG4gICAgfVxuICAgIGNvbnN0IHJldDogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuICAgIGZvciAoY29uc3QgcGFyYW0gb2YgdGhpcy5zdGFjayEuUGFyYW1ldGVycyA/PyBbXSkge1xuICAgICAgcmV0W3BhcmFtLlBhcmFtZXRlcktleSFdID0gcGFyYW0uUmVzb2x2ZWRWYWx1ZSA/PyBwYXJhbS5QYXJhbWV0ZXJWYWx1ZSE7XG4gICAgfVxuICAgIHJldHVybiByZXQ7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIHRoZSB0ZXJtaW5hdGlvbiBwcm90ZWN0aW9uIG9mIHRoZSBzdGFja1xuICAgKi9cbiAgcHVibGljIGdldCB0ZXJtaW5hdGlvblByb3RlY3Rpb24oKTogYm9vbGVhbiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuc3RhY2s/LkVuYWJsZVRlcm1pbmF0aW9uUHJvdGVjdGlvbjtcbiAgfVxuXG4gIHByaXZhdGUgYXNzZXJ0RXhpc3RzKCkge1xuICAgIGlmICghdGhpcy5leGlzdHMpIHtcbiAgICAgIHRocm93IG5ldyBUb29sa2l0RXJyb3IoYE5vIHN0YWNrIG5hbWVkICcke3RoaXMuc3RhY2tOYW1lfSdgKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBEZXNjcmliZSBhIGNoYW5nZXNldCBpbiBDbG91ZEZvcm1hdGlvbiwgcmVnYXJkbGVzcyBvZiBpdHMgY3VycmVudCBzdGF0ZS5cbiAqXG4gKiBAcGFyYW0gY2ZuICAgICAgICAgICBhIENsb3VkRm9ybWF0aW9uIGNsaWVudFxuICogQHBhcmFtIHN0YWNrTmFtZSAgICAgdGhlIG5hbWUgb2YgdGhlIFN0YWNrIHRoZSBDaGFuZ2VTZXQgYmVsb25ncyB0b1xuICogQHBhcmFtIGNoYW5nZVNldE5hbWUgdGhlIG5hbWUgb2YgdGhlIENoYW5nZVNldFxuICogQHBhcmFtIGZldGNoQWxsICAgICAgaWYgdHJ1ZSwgZmV0Y2hlcyBhbGwgcGFnZXMgb2YgdGhlIGNoYW5nZSBzZXQgZGVzY3JpcHRpb24uXG4gKlxuICogQHJldHVybnMgICAgICAgQ2xvdWRGb3JtYXRpb24gaW5mb3JtYXRpb24gYWJvdXQgdGhlIENoYW5nZVNldFxuICovXG5hc3luYyBmdW5jdGlvbiBkZXNjcmliZUNoYW5nZVNldChcbiAgY2ZuOiBJQ2xvdWRGb3JtYXRpb25DbGllbnQsXG4gIHN0YWNrTmFtZTogc3RyaW5nLFxuICBjaGFuZ2VTZXROYW1lOiBzdHJpbmcsXG4gIHsgZmV0Y2hBbGwgfTogeyBmZXRjaEFsbDogYm9vbGVhbiB9LFxuKTogUHJvbWlzZTxEZXNjcmliZUNoYW5nZVNldENvbW1hbmRPdXRwdXQ+IHtcbiAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjZm4uZGVzY3JpYmVDaGFuZ2VTZXQoe1xuICAgIFN0YWNrTmFtZTogc3RhY2tOYW1lLFxuICAgIENoYW5nZVNldE5hbWU6IGNoYW5nZVNldE5hbWUsXG4gIH0pO1xuXG4gIC8vIElmIGZldGNoQWxsIGlzIHRydWUsIHRyYXZlcnNlIGFsbCBwYWdlcyBmcm9tIHRoZSBjaGFuZ2Ugc2V0IGRlc2NyaXB0aW9uLlxuICB3aGlsZSAoZmV0Y2hBbGwgJiYgcmVzcG9uc2UuTmV4dFRva2VuICE9IG51bGwpIHtcbiAgICBjb25zdCBuZXh0UGFnZSA9IGF3YWl0IGNmbi5kZXNjcmliZUNoYW5nZVNldCh7XG4gICAgICBTdGFja05hbWU6IHN0YWNrTmFtZSxcbiAgICAgIENoYW5nZVNldE5hbWU6IHJlc3BvbnNlLkNoYW5nZVNldElkID8/IGNoYW5nZVNldE5hbWUsXG4gICAgICBOZXh0VG9rZW46IHJlc3BvbnNlLk5leHRUb2tlbixcbiAgICB9KTtcblxuICAgIC8vIENvbnNvbGlkYXRlIHRoZSBjaGFuZ2VzXG4gICAgaWYgKG5leHRQYWdlLkNoYW5nZXMgIT0gbnVsbCkge1xuICAgICAgcmVzcG9uc2UuQ2hhbmdlcyA9IHJlc3BvbnNlLkNoYW5nZXMgIT0gbnVsbCA/IHJlc3BvbnNlLkNoYW5nZXMuY29uY2F0KG5leHRQYWdlLkNoYW5nZXMpIDogbmV4dFBhZ2UuQ2hhbmdlcztcbiAgICB9XG5cbiAgICAvLyBGb3J3YXJkIHRoZSBuZXcgTmV4dFRva2VuXG4gICAgcmVzcG9uc2UuTmV4dFRva2VuID0gbmV4dFBhZ2UuTmV4dFRva2VuO1xuICB9XG5cbiAgcmV0dXJuIHJlc3BvbnNlO1xufVxuXG4vKipcbiAqIFdhaXRzIGZvciBhIGZ1bmN0aW9uIHRvIHJldHVybiBub24tK3VuZGVmaW5lZCsgYmVmb3JlIHJldHVybmluZy5cbiAqXG4gKiBAcGFyYW0gdmFsdWVQcm92aWRlciBhIGZ1bmN0aW9uIHRoYXQgd2lsbCByZXR1cm4gYSB2YWx1ZSB0aGF0IGlzIG5vdCArdW5kZWZpbmVkKyBvbmNlIHRoZSB3YWl0IHNob3VsZCBiZSBvdmVyXG4gKiBAcGFyYW0gdGltZW91dCAgICAgdGhlIHRpbWUgdG8gd2FpdCBiZXR3ZWVuIHR3byBjYWxscyB0byArdmFsdWVQcm92aWRlcitcbiAqXG4gKiBAcmV0dXJucyAgICAgICB0aGUgdmFsdWUgdGhhdCB3YXMgcmV0dXJuZWQgYnkgK3ZhbHVlUHJvdmlkZXIrXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHdhaXRGb3I8VD4oXG4gIHZhbHVlUHJvdmlkZXI6ICgpID0+IFByb21pc2U8VCB8IG51bGwgfCB1bmRlZmluZWQ+LFxuICB0aW1lb3V0OiBudW1iZXIgPSA1MDAwLFxuKTogUHJvbWlzZTxUIHwgdW5kZWZpbmVkPiB7XG4gIHdoaWxlICh0cnVlKSB7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdmFsdWVQcm92aWRlcigpO1xuICAgIGlmIChyZXN1bHQgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfSBlbHNlIGlmIChyZXN1bHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgYXdhaXQgbmV3IFByb21pc2UoKGNiKSA9PiBzZXRUaW1lb3V0KGNiLCB0aW1lb3V0KSk7XG4gIH1cbn1cblxuLyoqXG4gKiBXYWl0cyBmb3IgYSBDaGFuZ2VTZXQgdG8gYmUgYXZhaWxhYmxlIGZvciB0cmlnZ2VyaW5nIGEgU3RhY2tVcGRhdGUuXG4gKlxuICogV2lsbCByZXR1cm4gYSBjaGFuZ2VzZXQgdGhhdCBpcyBlaXRoZXIgcmVhZHkgdG8gYmUgZXhlY3V0ZWQgb3IgaGFzIG5vIGNoYW5nZXMuXG4gKiBXaWxsIHRocm93IGluIG90aGVyIGNhc2VzLlxuICpcbiAqIEBwYXJhbSBjZm4gICAgICAgICAgIGEgQ2xvdWRGb3JtYXRpb24gY2xpZW50XG4gKiBAcGFyYW0gc3RhY2tOYW1lICAgICB0aGUgbmFtZSBvZiB0aGUgU3RhY2sgdGhhdCB0aGUgQ2hhbmdlU2V0IGJlbG9uZ3MgdG9cbiAqIEBwYXJhbSBjaGFuZ2VTZXROYW1lIHRoZSBuYW1lIG9mIHRoZSBDaGFuZ2VTZXRcbiAqIEBwYXJhbSBmZXRjaEFsbCAgICAgIGlmIHRydWUsIGZldGNoZXMgYWxsIHBhZ2VzIG9mIHRoZSBDaGFuZ2VTZXQgYmVmb3JlIHJldHVybmluZy5cbiAqXG4gKiBAcmV0dXJucyAgICAgICB0aGUgQ2xvdWRGb3JtYXRpb24gZGVzY3JpcHRpb24gb2YgdGhlIENoYW5nZVNldFxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gd2FpdEZvckNoYW5nZVNldChcbiAgY2ZuOiBJQ2xvdWRGb3JtYXRpb25DbGllbnQsXG4gIGlvSGVscGVyOiBJb0hlbHBlcixcbiAgc3RhY2tOYW1lOiBzdHJpbmcsXG4gIGNoYW5nZVNldE5hbWU6IHN0cmluZyxcbiAgeyBmZXRjaEFsbCB9OiB7IGZldGNoQWxsOiBib29sZWFuIH0sXG4pOiBQcm9taXNlPERlc2NyaWJlQ2hhbmdlU2V0Q29tbWFuZE91dHB1dD4ge1xuICBhd2FpdCBpb0hlbHBlci5ub3RpZnkoZGVidWcoZm9ybWF0KCdXYWl0aW5nIGZvciBjaGFuZ2VzZXQgJXMgb24gc3RhY2sgJXMgdG8gZmluaXNoIGNyZWF0aW5nLi4uJywgY2hhbmdlU2V0TmFtZSwgc3RhY2tOYW1lKSkpO1xuICBjb25zdCByZXQgPSBhd2FpdCB3YWl0Rm9yKGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBkZXNjcmlwdGlvbiA9IGF3YWl0IGRlc2NyaWJlQ2hhbmdlU2V0KGNmbiwgc3RhY2tOYW1lLCBjaGFuZ2VTZXROYW1lLCB7XG4gICAgICBmZXRjaEFsbCxcbiAgICB9KTtcbiAgICAvLyBUaGUgZm9sbG93aW5nIGRvZXNuJ3QgdXNlIGEgc3dpdGNoIGJlY2F1c2UgdHNjIHdpbGwgbm90IGFsbG93IGZhbGwtdGhyb3VnaCwgVU5MRVNTIGl0IGlzIGFsbG93c1xuICAgIC8vIEVWRVJZV0hFUkUgdGhhdCB1c2VzIHRoaXMgbGlicmFyeSBkaXJlY3RseSBvciBpbmRpcmVjdGx5LCB3aGljaCBpcyB1bmRlc2lyYWJsZS5cbiAgICBpZiAoZGVzY3JpcHRpb24uU3RhdHVzID09PSAnQ1JFQVRFX1BFTkRJTkcnIHx8IGRlc2NyaXB0aW9uLlN0YXR1cyA9PT0gJ0NSRUFURV9JTl9QUk9HUkVTUycpIHtcbiAgICAgIGF3YWl0IGlvSGVscGVyLm5vdGlmeShkZWJ1Zyhmb3JtYXQoJ0NoYW5nZXNldCAlcyBvbiBzdGFjayAlcyBpcyBzdGlsbCBjcmVhdGluZycsIGNoYW5nZVNldE5hbWUsIHN0YWNrTmFtZSkpKTtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgaWYgKGRlc2NyaXB0aW9uLlN0YXR1cyA9PT0gQ2hhbmdlU2V0U3RhdHVzLkNSRUFURV9DT01QTEVURSB8fCBjaGFuZ2VTZXRIYXNOb0NoYW5nZXMoZGVzY3JpcHRpb24pKSB7XG4gICAgICByZXR1cm4gZGVzY3JpcHRpb247XG4gICAgfVxuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1sZW5cbiAgICB0aHJvdyBuZXcgVG9vbGtpdEVycm9yKFxuICAgICAgYEZhaWxlZCB0byBjcmVhdGUgQ2hhbmdlU2V0ICR7Y2hhbmdlU2V0TmFtZX0gb24gJHtzdGFja05hbWV9OiAke2Rlc2NyaXB0aW9uLlN0YXR1cyB8fCAnTk9fU1RBVFVTJ30sICR7ZGVzY3JpcHRpb24uU3RhdHVzUmVhc29uIHx8ICdubyByZWFzb24gcHJvdmlkZWQnfWAsXG4gICAgKTtcbiAgfSk7XG5cbiAgaWYgKCFyZXQpIHtcbiAgICB0aHJvdyBuZXcgVG9vbGtpdEVycm9yKCdDaGFuZ2Ugc2V0IHRvb2sgdG9vIGxvbmcgdG8gYmUgY3JlYXRlZDsgYWJvcnRpbmcnKTtcbiAgfVxuXG4gIHJldHVybiByZXQ7XG59XG5cbmV4cG9ydCB0eXBlIFByZXBhcmVDaGFuZ2VTZXRPcHRpb25zID0ge1xuICBzdGFjazogY3hhcGkuQ2xvdWRGb3JtYXRpb25TdGFja0FydGlmYWN0O1xuICBkZXBsb3ltZW50czogRGVwbG95bWVudHM7XG4gIHV1aWQ6IHN0cmluZztcbiAgd2lsbEV4ZWN1dGU6IGJvb2xlYW47XG4gIHNka1Byb3ZpZGVyOiBTZGtQcm92aWRlcjtcbiAgc3RyZWFtOiBOb2RlSlMuV3JpdGFibGVTdHJlYW07XG4gIHBhcmFtZXRlcnM6IHsgW25hbWU6IHN0cmluZ106IHN0cmluZyB8IHVuZGVmaW5lZCB9O1xuICByZXNvdXJjZXNUb0ltcG9ydD86IFJlc291cmNlc1RvSW1wb3J0O1xufVxuXG5leHBvcnQgdHlwZSBDcmVhdGVDaGFuZ2VTZXRPcHRpb25zID0ge1xuICBjZm46IElDbG91ZEZvcm1hdGlvbkNsaWVudDtcbiAgY2hhbmdlU2V0TmFtZTogc3RyaW5nO1xuICB3aWxsRXhlY3V0ZTogYm9vbGVhbjtcbiAgZXhpc3RzOiBib29sZWFuO1xuICB1dWlkOiBzdHJpbmc7XG4gIHN0YWNrOiBjeGFwaS5DbG91ZEZvcm1hdGlvblN0YWNrQXJ0aWZhY3Q7XG4gIGJvZHlQYXJhbWV0ZXI6IFRlbXBsYXRlQm9keVBhcmFtZXRlcjtcbiAgcGFyYW1ldGVyczogeyBbbmFtZTogc3RyaW5nXTogc3RyaW5nIHwgdW5kZWZpbmVkIH07XG4gIHJlc291cmNlc1RvSW1wb3J0PzogUmVzb3VyY2VUb0ltcG9ydFtdO1xuICByb2xlPzogc3RyaW5nO1xufTtcblxuLyoqXG4gKiBDcmVhdGUgYSBjaGFuZ2VzZXQgZm9yIGEgZGlmZiBvcGVyYXRpb25cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNyZWF0ZURpZmZDaGFuZ2VTZXQoXG4gIGlvSGVscGVyOiBJb0hlbHBlcixcbiAgb3B0aW9uczogUHJlcGFyZUNoYW5nZVNldE9wdGlvbnMsXG4pOiBQcm9taXNlPERlc2NyaWJlQ2hhbmdlU2V0Q29tbWFuZE91dHB1dCB8IHVuZGVmaW5lZD4ge1xuICAvLyBgb3B0aW9ucy5zdGFja2AgaGFzIGJlZW4gbW9kaWZpZWQgdG8gaW5jbHVkZSBhbnkgbmVzdGVkIHN0YWNrIHRlbXBsYXRlcyBkaXJlY3RseSBpbmxpbmUgd2l0aCBpdHMgb3duIHRlbXBsYXRlLCB1bmRlciBhIHNwZWNpYWwgYE5lc3RlZFRlbXBsYXRlYCBwcm9wZXJ0eS5cbiAgLy8gVGh1cyB0aGUgcGFyZW50IHRlbXBsYXRlJ3MgUmVzb3VyY2VzIHNlY3Rpb24gY29udGFpbnMgdGhlIG5lc3RlZCB0ZW1wbGF0ZSdzIENESyBtZXRhZGF0YSBjaGVjaywgd2hpY2ggdXNlcyBGbjo6RXF1YWxzLlxuICAvLyBUaGlzIGNhdXNlcyBDcmVhdGVDaGFuZ2VTZXQgdG8gZmFpbCB3aXRoIGBUZW1wbGF0ZSBFcnJvcjogRm46OkVxdWFscyBjYW5ub3QgYmUgcGFydGlhbGx5IGNvbGxhcHNlZGAuXG4gIGZvciAoY29uc3QgcmVzb3VyY2Ugb2YgT2JqZWN0LnZhbHVlcyhvcHRpb25zLnN0YWNrLnRlbXBsYXRlLlJlc291cmNlcyA/PyB7fSkpIHtcbiAgICBpZiAoKHJlc291cmNlIGFzIGFueSkuVHlwZSA9PT0gJ0FXUzo6Q2xvdWRGb3JtYXRpb246OlN0YWNrJykge1xuICAgICAgYXdhaXQgaW9IZWxwZXIubm90aWZ5KGRlYnVnKCdUaGlzIHN0YWNrIGNvbnRhaW5zIG9uZSBvciBtb3JlIG5lc3RlZCBzdGFja3MsIGZhbGxpbmcgYmFjayB0byB0ZW1wbGF0ZS1vbmx5IGRpZmYuLi4nKSk7XG5cbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHVwbG9hZEJvZHlQYXJhbWV0ZXJBbmRDcmVhdGVDaGFuZ2VTZXQoaW9IZWxwZXIsIG9wdGlvbnMpO1xufVxuXG4vKipcbiAqIFJldHVybnMgYWxsIGZpbGUgZW50cmllcyBmcm9tIGFuIEFzc2V0TWFuaWZlc3RBcnRpZmFjdCB0aGF0IGxvb2sgbGlrZSB0ZW1wbGF0ZXMuXG4gKlxuICogVGhpcyBpcyB1c2VkIGluIHRoZSBgdXBsb2FkQm9keVBhcmFtZXRlckFuZENyZWF0ZUNoYW5nZVNldGAgZnVuY3Rpb24gdG8gZmluZFxuICogYWxsIHRlbXBsYXRlIGFzc2V0IGZpbGVzIHRvIGJ1aWxkIGFuZCBwdWJsaXNoLlxuICpcbiAqIFJldHVybnMgYSB0dXBsZSBvZiBbQXNzZXRNYW5pZmVzdCwgRmlsZU1hbmlmZXN0RW50cnlbXV1cbiAqL1xuZnVuY3Rpb24gdGVtcGxhdGVzRnJvbUFzc2V0TWFuaWZlc3RBcnRpZmFjdChcbiAgYXJ0aWZhY3Q6IGN4YXBpLkFzc2V0TWFuaWZlc3RBcnRpZmFjdCxcbik6IFtBc3NldE1hbmlmZXN0LCBGaWxlTWFuaWZlc3RFbnRyeVtdXSB7XG4gIGNvbnN0IGFzc2V0czogRmlsZU1hbmlmZXN0RW50cnlbXSA9IFtdO1xuICBjb25zdCBmaWxlTmFtZSA9IGFydGlmYWN0LmZpbGU7XG4gIGNvbnN0IGFzc2V0TWFuaWZlc3QgPSBBc3NldE1hbmlmZXN0LmZyb21GaWxlKGZpbGVOYW1lKTtcblxuICBhc3NldE1hbmlmZXN0LmVudHJpZXMuZm9yRWFjaCgoZW50cnkpID0+IHtcbiAgICBpZiAoZW50cnkudHlwZSA9PT0gJ2ZpbGUnKSB7XG4gICAgICBjb25zdCBzb3VyY2UgPSAoZW50cnkgYXMgRmlsZU1hbmlmZXN0RW50cnkpLnNvdXJjZTtcbiAgICAgIGlmIChzb3VyY2UucGF0aCAmJiBzb3VyY2UucGF0aC5lbmRzV2l0aCgnLnRlbXBsYXRlLmpzb24nKSkge1xuICAgICAgICBhc3NldHMucHVzaChlbnRyeSBhcyBGaWxlTWFuaWZlc3RFbnRyeSk7XG4gICAgICB9XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIFthc3NldE1hbmlmZXN0LCBhc3NldHNdO1xufVxuXG5hc3luYyBmdW5jdGlvbiB1cGxvYWRCb2R5UGFyYW1ldGVyQW5kQ3JlYXRlQ2hhbmdlU2V0KFxuICBpb0hlbHBlcjogSW9IZWxwZXIsXG4gIG9wdGlvbnM6IFByZXBhcmVDaGFuZ2VTZXRPcHRpb25zLFxuKTogUHJvbWlzZTxEZXNjcmliZUNoYW5nZVNldENvbW1hbmRPdXRwdXQgfCB1bmRlZmluZWQ+IHtcbiAgdHJ5IHtcbiAgICBhd2FpdCB1cGxvYWRTdGFja1RlbXBsYXRlQXNzZXRzKG9wdGlvbnMuc3RhY2ssIG9wdGlvbnMuZGVwbG95bWVudHMpO1xuICAgIGNvbnN0IGVudiA9IGF3YWl0IG9wdGlvbnMuZGVwbG95bWVudHMuZW52cy5hY2Nlc3NTdGFja0Zvck11dGFibGVTdGFja09wZXJhdGlvbnMob3B0aW9ucy5zdGFjayk7XG5cbiAgICBjb25zdCBib2R5UGFyYW1ldGVyID0gYXdhaXQgbWFrZUJvZHlQYXJhbWV0ZXIoXG4gICAgICBvcHRpb25zLnN0YWNrLFxuICAgICAgZW52LnJlc29sdmVkRW52aXJvbm1lbnQsXG4gICAgICBuZXcgQXNzZXRNYW5pZmVzdEJ1aWxkZXIoKSxcbiAgICAgIGVudi5yZXNvdXJjZXMsXG4gICAgKTtcbiAgICBjb25zdCBjZm4gPSBlbnYuc2RrLmNsb3VkRm9ybWF0aW9uKCk7XG4gICAgY29uc3QgZXhpc3RzID0gKGF3YWl0IENsb3VkRm9ybWF0aW9uU3RhY2subG9va3VwKGNmbiwgb3B0aW9ucy5zdGFjay5zdGFja05hbWUsIGZhbHNlKSkuZXhpc3RzO1xuXG4gICAgY29uc3QgZXhlY3V0aW9uUm9sZUFybiA9IGF3YWl0IGVudi5yZXBsYWNlUGxhY2Vob2xkZXJzKG9wdGlvbnMuc3RhY2suY2xvdWRGb3JtYXRpb25FeGVjdXRpb25Sb2xlQXJuKTtcbiAgICBvcHRpb25zLnN0cmVhbS53cml0ZShcbiAgICAgICdIb2xkIG9uIHdoaWxlIHdlIGNyZWF0ZSBhIHJlYWQtb25seSBjaGFuZ2Ugc2V0IHRvIGdldCBhIGRpZmYgd2l0aCBhY2N1cmF0ZSByZXBsYWNlbWVudCBpbmZvcm1hdGlvbiAodXNlIC0tbm8tY2hhbmdlLXNldCB0byB1c2UgYSBsZXNzIGFjY3VyYXRlIGJ1dCBmYXN0ZXIgdGVtcGxhdGUtb25seSBkaWZmKVxcbicsXG4gICAgKTtcblxuICAgIHJldHVybiBhd2FpdCBjcmVhdGVDaGFuZ2VTZXQoaW9IZWxwZXIsIHtcbiAgICAgIGNmbixcbiAgICAgIGNoYW5nZVNldE5hbWU6ICdjZGstZGlmZi1jaGFuZ2Utc2V0JyxcbiAgICAgIHN0YWNrOiBvcHRpb25zLnN0YWNrLFxuICAgICAgZXhpc3RzLFxuICAgICAgdXVpZDogb3B0aW9ucy51dWlkLFxuICAgICAgd2lsbEV4ZWN1dGU6IG9wdGlvbnMud2lsbEV4ZWN1dGUsXG4gICAgICBib2R5UGFyYW1ldGVyLFxuICAgICAgcGFyYW1ldGVyczogb3B0aW9ucy5wYXJhbWV0ZXJzLFxuICAgICAgcmVzb3VyY2VzVG9JbXBvcnQ6IG9wdGlvbnMucmVzb3VyY2VzVG9JbXBvcnQsXG4gICAgICByb2xlOiBleGVjdXRpb25Sb2xlQXJuLFxuICAgIH0pO1xuICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICBhd2FpdCBpb0hlbHBlci5ub3RpZnkoZGVidWcoZSkpO1xuICAgIG9wdGlvbnMuc3RyZWFtLndyaXRlKFxuICAgICAgJ0NvdWxkIG5vdCBjcmVhdGUgYSBjaGFuZ2Ugc2V0LCB3aWxsIGJhc2UgdGhlIGRpZmYgb24gdGVtcGxhdGUgZGlmZmVyZW5jZXMgKHJ1biBhZ2FpbiB3aXRoIC12IHRvIHNlZSB0aGUgcmVhc29uKVxcbicsXG4gICAgKTtcblxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbn1cblxuLyoqXG4gKiBVcGxvYWRzIHRoZSBhc3NldHMgdGhhdCBsb29rIGxpa2UgdGVtcGxhdGVzIGZvciB0aGlzIENsb3VkRm9ybWF0aW9uIHN0YWNrXG4gKlxuICogVGhpcyBpcyBuZWNlc3NhcnkgZm9yIGFueSBDbG91ZEZvcm1hdGlvbiBjYWxsIHRoYXQgbmVlZHMgdGhlIHRlbXBsYXRlLCBpdCBtYXkgbmVlZFxuICogdG8gYmUgdXBsb2FkZWQgdG8gYW4gUzMgYnVja2V0IGZpcnN0LiBXZSBoYXZlIHRvIGZvbGxvdyB0aGUgaW5zdHJ1Y3Rpb25zIGluIHRoZVxuICogYXNzZXQgbWFuaWZlc3QsIGJlY2F1c2UgdGVjaG5pY2FsbHkgdGhhdCBpcyB0aGUgb25seSBwbGFjZSB0aGF0IGtub3dzIGFib3V0XG4gKiBidWNrZXQgYW5kIGFzc3VtZWQgcm9sZXMgYW5kIHN1Y2guXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB1cGxvYWRTdGFja1RlbXBsYXRlQXNzZXRzKHN0YWNrOiBjeGFwaS5DbG91ZEZvcm1hdGlvblN0YWNrQXJ0aWZhY3QsIGRlcGxveW1lbnRzOiBEZXBsb3ltZW50cykge1xuICBmb3IgKGNvbnN0IGFydGlmYWN0IG9mIHN0YWNrLmRlcGVuZGVuY2llcykge1xuICAgIC8vIFNraXAgYXJ0aWZhY3QgaWYgaXQgaXMgbm90IGFuIEFzc2V0IE1hbmlmZXN0IEFydGlmYWN0XG4gICAgaWYgKCFjeGFwaS5Bc3NldE1hbmlmZXN0QXJ0aWZhY3QuaXNBc3NldE1hbmlmZXN0QXJ0aWZhY3QoYXJ0aWZhY3QpKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBjb25zdCBbYXNzZXRNYW5pZmVzdCwgZmlsZV9lbnRyaWVzXSA9IHRlbXBsYXRlc0Zyb21Bc3NldE1hbmlmZXN0QXJ0aWZhY3QoYXJ0aWZhY3QpO1xuICAgIGZvciAoY29uc3QgZW50cnkgb2YgZmlsZV9lbnRyaWVzKSB7XG4gICAgICBhd2FpdCBkZXBsb3ltZW50cy5idWlsZFNpbmdsZUFzc2V0KGFydGlmYWN0LCBhc3NldE1hbmlmZXN0LCBlbnRyeSwge1xuICAgICAgICBzdGFjayxcbiAgICAgIH0pO1xuICAgICAgYXdhaXQgZGVwbG95bWVudHMucHVibGlzaFNpbmdsZUFzc2V0KGFzc2V0TWFuaWZlc3QsIGVudHJ5LCB7XG4gICAgICAgIHN0YWNrLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjcmVhdGVDaGFuZ2VTZXQoXG4gIGlvSGVscGVyOiBJb0hlbHBlcixcbiAgb3B0aW9uczogQ3JlYXRlQ2hhbmdlU2V0T3B0aW9ucyxcbik6IFByb21pc2U8RGVzY3JpYmVDaGFuZ2VTZXRDb21tYW5kT3V0cHV0PiB7XG4gIGF3YWl0IGNsZWFudXBPbGRDaGFuZ2VzZXQob3B0aW9ucy5jZm4sIGlvSGVscGVyLCBvcHRpb25zLmNoYW5nZVNldE5hbWUsIG9wdGlvbnMuc3RhY2suc3RhY2tOYW1lKTtcblxuICBhd2FpdCBpb0hlbHBlci5ub3RpZnkoZGVidWcoYEF0dGVtcHRpbmcgdG8gY3JlYXRlIENoYW5nZVNldCB3aXRoIG5hbWUgJHtvcHRpb25zLmNoYW5nZVNldE5hbWV9IGZvciBzdGFjayAke29wdGlvbnMuc3RhY2suc3RhY2tOYW1lfWApKTtcblxuICBjb25zdCB0ZW1wbGF0ZVBhcmFtcyA9IFRlbXBsYXRlUGFyYW1ldGVycy5mcm9tVGVtcGxhdGUob3B0aW9ucy5zdGFjay50ZW1wbGF0ZSk7XG4gIGNvbnN0IHN0YWNrUGFyYW1zID0gdGVtcGxhdGVQYXJhbXMuc3VwcGx5QWxsKG9wdGlvbnMucGFyYW1ldGVycyk7XG5cbiAgY29uc3QgY2hhbmdlU2V0ID0gYXdhaXQgb3B0aW9ucy5jZm4uY3JlYXRlQ2hhbmdlU2V0KHtcbiAgICBTdGFja05hbWU6IG9wdGlvbnMuc3RhY2suc3RhY2tOYW1lLFxuICAgIENoYW5nZVNldE5hbWU6IG9wdGlvbnMuY2hhbmdlU2V0TmFtZSxcbiAgICBDaGFuZ2VTZXRUeXBlOiBvcHRpb25zLnJlc291cmNlc1RvSW1wb3J0ID8gJ0lNUE9SVCcgOiBvcHRpb25zLmV4aXN0cyA/ICdVUERBVEUnIDogJ0NSRUFURScsXG4gICAgRGVzY3JpcHRpb246IGBDREsgQ2hhbmdlc2V0IGZvciBkaWZmICR7b3B0aW9ucy51dWlkfWAsXG4gICAgQ2xpZW50VG9rZW46IGBkaWZmJHtvcHRpb25zLnV1aWR9YCxcbiAgICBUZW1wbGF0ZVVSTDogb3B0aW9ucy5ib2R5UGFyYW1ldGVyLlRlbXBsYXRlVVJMLFxuICAgIFRlbXBsYXRlQm9keTogb3B0aW9ucy5ib2R5UGFyYW1ldGVyLlRlbXBsYXRlQm9keSxcbiAgICBQYXJhbWV0ZXJzOiBzdGFja1BhcmFtcy5hcGlQYXJhbWV0ZXJzLFxuICAgIFJlc291cmNlc1RvSW1wb3J0OiBvcHRpb25zLnJlc291cmNlc1RvSW1wb3J0LFxuICAgIFJvbGVBUk46IG9wdGlvbnMucm9sZSxcbiAgICBUYWdzOiB0b0NmblRhZ3Mob3B0aW9ucy5zdGFjay50YWdzKSxcbiAgICBDYXBhYmlsaXRpZXM6IFsnQ0FQQUJJTElUWV9JQU0nLCAnQ0FQQUJJTElUWV9OQU1FRF9JQU0nLCAnQ0FQQUJJTElUWV9BVVRPX0VYUEFORCddLFxuICB9KTtcblxuICBhd2FpdCBpb0hlbHBlci5ub3RpZnkoZGVidWcoZm9ybWF0KCdJbml0aWF0ZWQgY3JlYXRpb24gb2YgY2hhbmdlc2V0OiAlczsgd2FpdGluZyBmb3IgaXQgdG8gZmluaXNoIGNyZWF0aW5nLi4uJywgY2hhbmdlU2V0LklkKSkpO1xuICAvLyBGZXRjaGluZyBhbGwgcGFnZXMgaWYgd2UnbGwgZXhlY3V0ZSwgc28gd2UgY2FuIGhhdmUgdGhlIGNvcnJlY3QgY2hhbmdlIGNvdW50IHdoZW4gbW9uaXRvcmluZy5cbiAgY29uc3QgY3JlYXRlZENoYW5nZVNldCA9IGF3YWl0IHdhaXRGb3JDaGFuZ2VTZXQob3B0aW9ucy5jZm4sIGlvSGVscGVyLCBvcHRpb25zLnN0YWNrLnN0YWNrTmFtZSwgb3B0aW9ucy5jaGFuZ2VTZXROYW1lLCB7XG4gICAgZmV0Y2hBbGw6IG9wdGlvbnMud2lsbEV4ZWN1dGUsXG4gIH0pO1xuICBhd2FpdCBjbGVhbnVwT2xkQ2hhbmdlc2V0KG9wdGlvbnMuY2ZuLCBpb0hlbHBlciwgb3B0aW9ucy5jaGFuZ2VTZXROYW1lLCBvcHRpb25zLnN0YWNrLnN0YWNrTmFtZSk7XG5cbiAgcmV0dXJuIGNyZWF0ZWRDaGFuZ2VTZXQ7XG59XG5cbmZ1bmN0aW9uIHRvQ2ZuVGFncyh0YWdzOiB7IFtpZDogc3RyaW5nXTogc3RyaW5nIH0pOiBUYWdbXSB7XG4gIHJldHVybiBPYmplY3QuZW50cmllcyh0YWdzKS5tYXAoKFtrLCB2XSkgPT4gKHtcbiAgICBLZXk6IGssXG4gICAgVmFsdWU6IHYsXG4gIH0pKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gY2xlYW51cE9sZENoYW5nZXNldChcbiAgY2ZuOiBJQ2xvdWRGb3JtYXRpb25DbGllbnQsXG4gIGlvSGVscGVyOiBJb0hlbHBlcixcbiAgY2hhbmdlU2V0TmFtZTogc3RyaW5nLFxuICBzdGFja05hbWU6IHN0cmluZyxcbikge1xuICAvLyBEZWxldGUgYW55IGV4aXN0aW5nIGNoYW5nZSBzZXRzIGdlbmVyYXRlZCBieSBDREsgc2luY2UgY2hhbmdlIHNldCBuYW1lcyBtdXN0IGJlIHVuaXF1ZS5cbiAgLy8gVGhlIGRlbGV0ZSByZXF1ZXN0IGlzIHN1Y2Nlc3NmdWwgYXMgbG9uZyBhcyB0aGUgc3RhY2sgZXhpc3RzIChldmVuIGlmIHRoZSBjaGFuZ2Ugc2V0IGRvZXMgbm90IGV4aXN0KS5cbiAgYXdhaXQgaW9IZWxwZXIubm90aWZ5KGRlYnVnKGBSZW1vdmluZyBleGlzdGluZyBjaGFuZ2Ugc2V0IHdpdGggbmFtZSAke2NoYW5nZVNldE5hbWV9IGlmIGl0IGV4aXN0c2ApKTtcbiAgYXdhaXQgY2ZuLmRlbGV0ZUNoYW5nZVNldCh7XG4gICAgU3RhY2tOYW1lOiBzdGFja05hbWUsXG4gICAgQ2hhbmdlU2V0TmFtZTogY2hhbmdlU2V0TmFtZSxcbiAgfSk7XG59XG5cbi8qKlxuICogUmV0dXJuIHRydWUgaWYgdGhlIGdpdmVuIGNoYW5nZSBzZXQgaGFzIG5vIGNoYW5nZXNcbiAqXG4gKiBUaGlzIG11c3QgYmUgZGV0ZXJtaW5lZCBmcm9tIHRoZSBzdGF0dXMsIG5vdCB0aGUgJ0NoYW5nZXMnIGFycmF5IG9uIHRoZVxuICogb2JqZWN0OyB0aGUgbGF0dGVyIGNhbiBiZSBlbXB0eSBiZWNhdXNlIG5vIHJlc291cmNlcyB3ZXJlIGNoYW5nZWQsIGJ1dCBpZlxuICogdGhlcmUgYXJlIGNoYW5nZXMgdG8gT3V0cHV0cywgdGhlIGNoYW5nZSBzZXQgY2FuIHN0aWxsIGJlIGV4ZWN1dGVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY2hhbmdlU2V0SGFzTm9DaGFuZ2VzKGRlc2NyaXB0aW9uOiBEZXNjcmliZUNoYW5nZVNldENvbW1hbmRPdXRwdXQpIHtcbiAgY29uc3Qgbm9DaGFuZ2VFcnJvclByZWZpeGVzID0gW1xuICAgIC8vIEVycm9yIG1lc3NhZ2UgZm9yIGEgcmVndWxhciB0ZW1wbGF0ZVxuICAgIFwiVGhlIHN1Ym1pdHRlZCBpbmZvcm1hdGlvbiBkaWRuJ3QgY29udGFpbiBjaGFuZ2VzLlwiLFxuICAgIC8vIEVycm9yIG1lc3NhZ2Ugd2hlbiBhIFRyYW5zZm9ybSBpcyBpbnZvbHZlZCAoc2VlICMxMDY1MClcbiAgICAnTm8gdXBkYXRlcyBhcmUgdG8gYmUgcGVyZm9ybWVkLicsXG4gIF07XG5cbiAgcmV0dXJuIChcbiAgICBkZXNjcmlwdGlvbi5TdGF0dXMgPT09ICdGQUlMRUQnICYmIG5vQ2hhbmdlRXJyb3JQcmVmaXhlcy5zb21lKChwKSA9PiAoZGVzY3JpcHRpb24uU3RhdHVzUmVhc29uID8/ICcnKS5zdGFydHNXaXRoKHApKVxuICApO1xufVxuXG4vKipcbiAqIFdhaXRzIGZvciBhIENsb3VkRm9ybWF0aW9uIHN0YWNrIHRvIHN0YWJpbGl6ZSBpbiBhIGNvbXBsZXRlL2F2YWlsYWJsZSBzdGF0ZVxuICogYWZ0ZXIgYSBkZWxldGUgb3BlcmF0aW9uIGlzIGlzc3VlZC5cbiAqXG4gKiBGYWlscyBpZiB0aGUgc3RhY2sgaXMgaW4gYSBGQUlMRUQgc3RhdGUuIFdpbGwgbm90IGZhaWwgaWYgdGhlIHN0YWNrIHdhc1xuICogYWxyZWFkeSBkZWxldGVkLlxuICpcbiAqIEBwYXJhbSBjZm4gICAgICAgIGEgQ2xvdWRGb3JtYXRpb24gY2xpZW50XG4gKiBAcGFyYW0gc3RhY2tOYW1lICAgICAgdGhlIG5hbWUgb2YgdGhlIHN0YWNrIHRvIHdhaXQgZm9yIGFmdGVyIGEgZGVsZXRlXG4gKlxuICogQHJldHVybnMgICAgIHRoZSBDbG91ZEZvcm1hdGlvbiBkZXNjcmlwdGlvbiBvZiB0aGUgc3RhYmlsaXplZCBzdGFjayBhZnRlciB0aGUgZGVsZXRlIGF0dGVtcHRcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHdhaXRGb3JTdGFja0RlbGV0ZShcbiAgY2ZuOiBJQ2xvdWRGb3JtYXRpb25DbGllbnQsXG4gIGlvSGVscGVyOiBJb0hlbHBlcixcbiAgc3RhY2tOYW1lOiBzdHJpbmcsXG4pOiBQcm9taXNlPENsb3VkRm9ybWF0aW9uU3RhY2sgfCB1bmRlZmluZWQ+IHtcbiAgY29uc3Qgc3RhY2sgPSBhd2FpdCBzdGFiaWxpemVTdGFjayhjZm4sIGlvSGVscGVyLCBzdGFja05hbWUpO1xuICBpZiAoIXN0YWNrKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGNvbnN0IHN0YXR1cyA9IHN0YWNrLnN0YWNrU3RhdHVzO1xuICBpZiAoc3RhdHVzLmlzRmFpbHVyZSkge1xuICAgIHRocm93IG5ldyBUb29sa2l0RXJyb3IoXG4gICAgICBgVGhlIHN0YWNrIG5hbWVkICR7c3RhY2tOYW1lfSBpcyBpbiBhIGZhaWxlZCBzdGF0ZS4gWW91IG1heSBuZWVkIHRvIGRlbGV0ZSBpdCBmcm9tIHRoZSBBV1MgY29uc29sZSA6ICR7c3RhdHVzfWAsXG4gICAgKTtcbiAgfSBlbHNlIGlmIChzdGF0dXMuaXNEZWxldGVkKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICByZXR1cm4gc3RhY2s7XG59XG5cbi8qKlxuICogV2FpdHMgZm9yIGEgQ2xvdWRGb3JtYXRpb24gc3RhY2sgdG8gc3RhYmlsaXplIGluIGEgY29tcGxldGUvYXZhaWxhYmxlIHN0YXRlXG4gKiBhZnRlciBhbiB1cGRhdGUvY3JlYXRlIG9wZXJhdGlvbiBpcyBpc3N1ZWQuXG4gKlxuICogRmFpbHMgaWYgdGhlIHN0YWNrIGlzIGluIGEgRkFJTEVEIHN0YXRlLCBST0xMQkFDSyBzdGF0ZSwgb3IgREVMRVRFRCBzdGF0ZS5cbiAqXG4gKiBAcGFyYW0gY2ZuICAgICAgICBhIENsb3VkRm9ybWF0aW9uIGNsaWVudFxuICogQHBhcmFtIHN0YWNrTmFtZSAgICAgIHRoZSBuYW1lIG9mIHRoZSBzdGFjayB0byB3YWl0IGZvciBhZnRlciBhbiB1cGRhdGVcbiAqXG4gKiBAcmV0dXJucyAgICAgdGhlIENsb3VkRm9ybWF0aW9uIGRlc2NyaXB0aW9uIG9mIHRoZSBzdGFiaWxpemVkIHN0YWNrIGFmdGVyIHRoZSB1cGRhdGUgYXR0ZW1wdFxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gd2FpdEZvclN0YWNrRGVwbG95KFxuICBjZm46IElDbG91ZEZvcm1hdGlvbkNsaWVudCxcbiAgaW9IZWxwZXI6IElvSGVscGVyLFxuICBzdGFja05hbWU6IHN0cmluZyxcbik6IFByb21pc2U8Q2xvdWRGb3JtYXRpb25TdGFjayB8IHVuZGVmaW5lZD4ge1xuICBjb25zdCBzdGFjayA9IGF3YWl0IHN0YWJpbGl6ZVN0YWNrKGNmbiwgaW9IZWxwZXIsIHN0YWNrTmFtZSk7XG4gIGlmICghc3RhY2spIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgY29uc3Qgc3RhdHVzID0gc3RhY2suc3RhY2tTdGF0dXM7XG5cbiAgaWYgKHN0YXR1cy5pc0NyZWF0aW9uRmFpbHVyZSkge1xuICAgIHRocm93IG5ldyBUb29sa2l0RXJyb3IoXG4gICAgICBgVGhlIHN0YWNrIG5hbWVkICR7c3RhY2tOYW1lfSBmYWlsZWQgY3JlYXRpb24sIGl0IG1heSBuZWVkIHRvIGJlIG1hbnVhbGx5IGRlbGV0ZWQgZnJvbSB0aGUgQVdTIGNvbnNvbGU6ICR7c3RhdHVzfWAsXG4gICAgKTtcbiAgfSBlbHNlIGlmICghc3RhdHVzLmlzRGVwbG95U3VjY2Vzcykge1xuICAgIHRocm93IG5ldyBUb29sa2l0RXJyb3IoYFRoZSBzdGFjayBuYW1lZCAke3N0YWNrTmFtZX0gZmFpbGVkIHRvIGRlcGxveTogJHtzdGF0dXN9YCk7XG4gIH1cblxuICByZXR1cm4gc3RhY2s7XG59XG5cbi8qKlxuICogV2FpdCBmb3IgYSBzdGFjayB0byBiZWNvbWUgc3RhYmxlIChubyBsb25nZXIgX0lOX1BST0dSRVNTKSwgcmV0dXJuaW5nIGl0XG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzdGFiaWxpemVTdGFjayhcbiAgY2ZuOiBJQ2xvdWRGb3JtYXRpb25DbGllbnQsXG4gIGlvSGVscGVyOiBJb0hlbHBlcixcbiAgc3RhY2tOYW1lOiBzdHJpbmcsXG4pIHtcbiAgYXdhaXQgaW9IZWxwZXIubm90aWZ5KGRlYnVnKGZvcm1hdCgnV2FpdGluZyBmb3Igc3RhY2sgJXMgdG8gZmluaXNoIGNyZWF0aW5nIG9yIHVwZGF0aW5nLi4uJywgc3RhY2tOYW1lKSkpO1xuICByZXR1cm4gd2FpdEZvcihhc3luYyAoKSA9PiB7XG4gICAgY29uc3Qgc3RhY2sgPSBhd2FpdCBDbG91ZEZvcm1hdGlvblN0YWNrLmxvb2t1cChjZm4sIHN0YWNrTmFtZSk7XG4gICAgaWYgKCFzdGFjay5leGlzdHMpIHtcbiAgICAgIGF3YWl0IGlvSGVscGVyLm5vdGlmeShkZWJ1Zyhmb3JtYXQoJ1N0YWNrICVzIGRvZXMgbm90IGV4aXN0Jywgc3RhY2tOYW1lKSkpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGNvbnN0IHN0YXR1cyA9IHN0YWNrLnN0YWNrU3RhdHVzO1xuICAgIGlmIChzdGF0dXMuaXNJblByb2dyZXNzKSB7XG4gICAgICBhd2FpdCBpb0hlbHBlci5ub3RpZnkoZGVidWcoZm9ybWF0KCdTdGFjayAlcyBoYXMgYW4gb25nb2luZyBvcGVyYXRpb24gaW4gcHJvZ3Jlc3MgYW5kIGlzIG5vdCBzdGFibGUgKCVzKScsIHN0YWNrTmFtZSwgc3RhdHVzKSkpO1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9IGVsc2UgaWYgKHN0YXR1cy5pc1Jldmlld0luUHJvZ3Jlc3MpIHtcbiAgICAgIC8vIFRoaXMgbWF5IGhhcHBlbiBpZiBhIHN0YWNrIGNyZWF0aW9uIG9wZXJhdGlvbiBpcyBpbnRlcnJ1cHRlZCBiZWZvcmUgdGhlIENoYW5nZVNldCBleGVjdXRpb24gc3RhcnRzLiBSZWNvdmVyaW5nXG4gICAgICAvLyBmcm9tIHRoaXMgd291bGQgcmVxdWlyaW5nIG1hbnVhbCBpbnRlcnZlbnRpb24gKGRlbGV0aW5nIG9yIGV4ZWN1dGluZyB0aGUgcGVuZGluZyBDaGFuZ2VTZXQpLCBhbmQgZmFpbGluZyB0byBkb1xuICAgICAgLy8gc28gd2lsbCByZXN1bHQgaW4gYW4gZW5kbGVzcyB3YWl0IGhlcmUgKHRoZSBDaGFuZ2VTZXQgd29udCBkZWxldGUgb3IgZXhlY3V0ZSBpdHNlbGYpLiBJbnN0ZWFkIG9mIGJsb2NraW5nXG4gICAgICAvLyBcImZvcmV2ZXJcIiB3ZSBwcm9jZWVkIGFzIGlmIHRoZSBzdGFjayB3YXMgZXhpc3RpbmcgYW5kIHN0YWJsZS4gSWYgdGhlcmUgaXMgYSBjb25jdXJyZW50IG9wZXJhdGlvbiB0aGF0IGp1c3RcbiAgICAgIC8vIGhhc24ndCBmaW5pc2hlZCBwcm9jZWVkaW5nIGp1c3QgeWV0LCBlaXRoZXIgdGhpcyBvcGVyYXRpb24gb3IgdGhlIGNvbmN1cnJlbnQgb25lIG1heSBmYWlsIGR1ZSB0byB0aGUgb3RoZXIgb25lXG4gICAgICAvLyBoYXZpbmcgbWFkZSBwcm9ncmVzcy4gV2hpY2ggaXMgZmluZS4gSSBndWVzcy5cbiAgICAgIGF3YWl0IGlvSGVscGVyLm5vdGlmeShkZWJ1Zyhmb3JtYXQoJ1N0YWNrICVzIGlzIGluIFJFVklFV19JTl9QUk9HUkVTUyBzdGF0ZS4gQ29uc2lkZXJpbmcgdGhpcyBpcyBhIHN0YWJsZSBzdGF0dXMgKCVzKScsIHN0YWNrTmFtZSwgc3RhdHVzKSkpO1xuICAgIH1cblxuICAgIHJldHVybiBzdGFjaztcbiAgfSk7XG59XG5cbi8qKlxuICogVGhlIHNldCBvZiAoZm9ybWFsKSBwYXJhbWV0ZXJzIHRoYXQgaGF2ZSBiZWVuIGRlY2xhcmVkIGluIGEgdGVtcGxhdGVcbiAqL1xuZXhwb3J0IGNsYXNzIFRlbXBsYXRlUGFyYW1ldGVycyB7XG4gIHB1YmxpYyBzdGF0aWMgZnJvbVRlbXBsYXRlKHRlbXBsYXRlOiBUZW1wbGF0ZSkge1xuICAgIHJldHVybiBuZXcgVGVtcGxhdGVQYXJhbWV0ZXJzKHRlbXBsYXRlLlBhcmFtZXRlcnMgfHwge30pO1xuICB9XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBwYXJhbXM6IFJlY29yZDxzdHJpbmcsIFRlbXBsYXRlUGFyYW1ldGVyPikge1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZSBzdGFjayBwYXJhbWV0ZXJzIHRvIHBhc3MgZnJvbSB0aGUgZ2l2ZW4gZGVzaXJlZCBwYXJhbWV0ZXIgdmFsdWVzXG4gICAqXG4gICAqIFdpbGwgdGhyb3cgaWYgcGFyYW1ldGVycyB3aXRob3V0IGEgRGVmYXVsdCB2YWx1ZSBvciBhIFByZXZpb3VzIHZhbHVlIGFyZSBub3RcbiAgICogc3VwcGxpZWQuXG4gICAqL1xuICBwdWJsaWMgc3VwcGx5QWxsKHVwZGF0ZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IHVuZGVmaW5lZD4pOiBQYXJhbWV0ZXJWYWx1ZXMge1xuICAgIHJldHVybiBuZXcgUGFyYW1ldGVyVmFsdWVzKHRoaXMucGFyYW1zLCB1cGRhdGVzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGcm9tIHRoZSB0ZW1wbGF0ZSwgdGhlIGdpdmVuIGRlc2lyZWQgdmFsdWVzIGFuZCB0aGUgY3VycmVudCB2YWx1ZXMsIGNhbGN1bGF0ZSB0aGUgY2hhbmdlcyB0byB0aGUgc3RhY2sgcGFyYW1ldGVyc1xuICAgKlxuICAgKiBXaWxsIHRha2UgaW50byBhY2NvdW50IHBhcmFtZXRlcnMgYWxyZWFkeSBzZXQgb24gdGhlIHRlbXBsYXRlICh3aWxsIGVtaXRcbiAgICogJ1VzZVByZXZpb3VzVmFsdWU6IHRydWUnIGZvciB0aG9zZSB1bmxlc3MgdGhlIHZhbHVlIGlzIGNoYW5nZWQpLCBhbmQgd2lsbFxuICAgKiB0aHJvdyBpZiBwYXJhbWV0ZXJzIHdpdGhvdXQgYSBEZWZhdWx0IHZhbHVlIG9yIGEgUHJldmlvdXMgdmFsdWUgYXJlIG5vdFxuICAgKiBzdXBwbGllZC5cbiAgICovXG4gIHB1YmxpYyB1cGRhdGVFeGlzdGluZyhcbiAgICB1cGRhdGVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCB1bmRlZmluZWQ+LFxuICAgIHByZXZpb3VzVmFsdWVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+LFxuICApOiBQYXJhbWV0ZXJWYWx1ZXMge1xuICAgIHJldHVybiBuZXcgUGFyYW1ldGVyVmFsdWVzKHRoaXMucGFyYW1zLCB1cGRhdGVzLCBwcmV2aW91c1ZhbHVlcyk7XG4gIH1cbn1cblxuLyoqXG4gKiBUaGUgc2V0IG9mIHBhcmFtZXRlcnMgd2UncmUgZ29pbmcgdG8gcGFzcyB0byBhIFN0YWNrXG4gKi9cbmV4cG9ydCBjbGFzcyBQYXJhbWV0ZXJWYWx1ZXMge1xuICBwdWJsaWMgcmVhZG9ubHkgdmFsdWVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG4gIHB1YmxpYyByZWFkb25seSBhcGlQYXJhbWV0ZXJzOiBQYXJhbWV0ZXJbXSA9IFtdO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgZm9ybWFsUGFyYW1zOiBSZWNvcmQ8c3RyaW5nLCBUZW1wbGF0ZVBhcmFtZXRlcj4sXG4gICAgdXBkYXRlczogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgdW5kZWZpbmVkPixcbiAgICBwcmV2aW91c1ZhbHVlczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9LFxuICApIHtcbiAgICBjb25zdCBtaXNzaW5nUmVxdWlyZWQgPSBuZXcgQXJyYXk8c3RyaW5nPigpO1xuXG4gICAgZm9yIChjb25zdCBba2V5LCBmb3JtYWxQYXJhbV0gb2YgT2JqZWN0LmVudHJpZXModGhpcy5mb3JtYWxQYXJhbXMpKSB7XG4gICAgICAvLyBDaGVjayB1cGRhdGVzIGZpcnN0LCB0aGVuIHVzZSB0aGUgcHJldmlvdXMgdmFsdWUgKGlmIGF2YWlsYWJsZSksIHRoZW4gdXNlXG4gICAgICAvLyB0aGUgZGVmYXVsdCAoaWYgYXZhaWxhYmxlKS5cbiAgICAgIC8vXG4gICAgICAvLyBJZiB3ZSBkb24ndCBmaW5kIGEgcGFyYW1ldGVyIHZhbHVlIHVzaW5nIGFueSBvZiB0aGVzZSBtZXRob2RzLCB0aGVuIHRoYXQncyBhbiBlcnJvci5cbiAgICAgIGNvbnN0IHVwZGF0ZWRWYWx1ZSA9IHVwZGF0ZXNba2V5XTtcbiAgICAgIGlmICh1cGRhdGVkVmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLnZhbHVlc1trZXldID0gdXBkYXRlZFZhbHVlO1xuICAgICAgICB0aGlzLmFwaVBhcmFtZXRlcnMucHVzaCh7XG4gICAgICAgICAgUGFyYW1ldGVyS2V5OiBrZXksXG4gICAgICAgICAgUGFyYW1ldGVyVmFsdWU6IHVwZGF0ZXNba2V5XSxcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAoa2V5IGluIHByZXZpb3VzVmFsdWVzKSB7XG4gICAgICAgIHRoaXMudmFsdWVzW2tleV0gPSBwcmV2aW91c1ZhbHVlc1trZXldO1xuICAgICAgICB0aGlzLmFwaVBhcmFtZXRlcnMucHVzaCh7IFBhcmFtZXRlcktleToga2V5LCBVc2VQcmV2aW91c1ZhbHVlOiB0cnVlIH0pO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGZvcm1hbFBhcmFtLkRlZmF1bHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLnZhbHVlc1trZXldID0gZm9ybWFsUGFyYW0uRGVmYXVsdDtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIC8vIE9oIG5vXG4gICAgICBtaXNzaW5nUmVxdWlyZWQucHVzaChrZXkpO1xuICAgIH1cblxuICAgIGlmIChtaXNzaW5nUmVxdWlyZWQubGVuZ3RoID4gMCkge1xuICAgICAgdGhyb3cgbmV3IFRvb2xraXRFcnJvcihgVGhlIGZvbGxvd2luZyBDbG91ZEZvcm1hdGlvbiBQYXJhbWV0ZXJzIGFyZSBtaXNzaW5nIGEgdmFsdWU6ICR7bWlzc2luZ1JlcXVpcmVkLmpvaW4oJywgJyl9YCk7XG4gICAgfVxuXG4gICAgLy8gSnVzdCBhcHBlbmQgYWxsIHN1cHBsaWVkIG92ZXJyaWRlcyB0aGF0IGFyZW4ndCByZWFsbHkgZXhwZWN0ZWQgKHRoaXNcbiAgICAvLyB3aWxsIGZhaWwgQ0ZOIGJ1dCBtYXliZSBwZW9wbGUgbWFkZSB0eXBvcyB0aGF0IHRoZXkgd2FudCB0byBiZSBub3RpZmllZFxuICAgIC8vIG9mKVxuICAgIGNvbnN0IHVua25vd25QYXJhbSA9IChba2V5LCBfXTogW3N0cmluZywgYW55XSkgPT4gdGhpcy5mb3JtYWxQYXJhbXNba2V5XSA9PT0gdW5kZWZpbmVkO1xuICAgIGNvbnN0IGhhc1ZhbHVlID0gKFtfLCB2YWx1ZV06IFtzdHJpbmcsIGFueV0pID0+ICEhdmFsdWU7XG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXModXBkYXRlcykuZmlsdGVyKHVua25vd25QYXJhbSkuZmlsdGVyKGhhc1ZhbHVlKSkge1xuICAgICAgdGhpcy52YWx1ZXNba2V5XSA9IHZhbHVlITtcbiAgICAgIHRoaXMuYXBpUGFyYW1ldGVycy5wdXNoKHsgUGFyYW1ldGVyS2V5OiBrZXksIFBhcmFtZXRlclZhbHVlOiB2YWx1ZSB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogV2hldGhlciB0aGlzIHNldCBvZiBwYXJhbWV0ZXIgdXBkYXRlcyB3aWxsIGNoYW5nZSB0aGUgYWN0dWFsIHN0YWNrIHZhbHVlc1xuICAgKi9cbiAgcHVibGljIGhhc0NoYW5nZXMoY3VycmVudFZhbHVlczogUmVjb3JkPHN0cmluZywgc3RyaW5nPik6IFBhcmFtZXRlckNoYW5nZXMge1xuICAgIC8vIElmIGFueSBvZiB0aGUgcGFyYW1ldGVycyBhcmUgU1NNIHBhcmFtZXRlcnMsIGRlcGxveWluZyBtdXN0IGFsd2F5cyBoYXBwZW5cbiAgICAvLyBiZWNhdXNlIHdlIGNhbid0IHByZWRpY3Qgd2hhdCB0aGUgdmFsdWVzIHdpbGwgYmUuIFdlIHdpbGwgYWxsb3cgc29tZVxuICAgIC8vIHBhcmFtZXRlcnMgdG8gb3B0IG91dCBvZiB0aGlzIGNoZWNrIGJ5IGhhdmluZyBhIG1hZ2ljIHN0cmluZyBpbiB0aGVpciBkZXNjcmlwdGlvbi5cbiAgICBpZiAoXG4gICAgICBPYmplY3QudmFsdWVzKHRoaXMuZm9ybWFsUGFyYW1zKS5zb21lKFxuICAgICAgICAocCkgPT4gcC5UeXBlLnN0YXJ0c1dpdGgoJ0FXUzo6U1NNOjpQYXJhbWV0ZXI6OicpICYmICFwLkRlc2NyaXB0aW9uPy5pbmNsdWRlcyhTU01QQVJBTV9OT19JTlZBTElEQVRFKSxcbiAgICAgIClcbiAgICApIHtcbiAgICAgIHJldHVybiAnc3NtJztcbiAgICB9XG5cbiAgICAvLyBPdGhlcndpc2Ugd2UncmUgZGlydHkgaWY6XG4gICAgLy8gLSBhbnkgb2YgdGhlIGV4aXN0aW5nIHZhbHVlcyBhcmUgcmVtb3ZlZCwgb3IgY2hhbmdlZFxuICAgIGlmIChPYmplY3QuZW50cmllcyhjdXJyZW50VmFsdWVzKS5zb21lKChba2V5LCB2YWx1ZV0pID0+ICEoa2V5IGluIHRoaXMudmFsdWVzKSB8fCB2YWx1ZSAhPT0gdGhpcy52YWx1ZXNba2V5XSkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIC8vIC0gYW55IG9mIHRoZSB2YWx1ZXMgd2UncmUgc2V0dGluZyBhcmUgbmV3XG4gICAgaWYgKE9iamVjdC5rZXlzKHRoaXMudmFsdWVzKS5zb21lKChrZXkpID0+ICEoa2V5IGluIGN1cnJlbnRWYWx1ZXMpKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbmV4cG9ydCB0eXBlIFBhcmFtZXRlckNoYW5nZXMgPSBib29sZWFuIHwgJ3NzbSc7XG4iXX0=
597
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xvdWRmb3JtYXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJjbG91ZGZvcm1hdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFrU0EsNENBa0NDO0FBNkJELGtEQWdCQztBQWdGRCw4REFpQkM7QUFFRCwwQ0FrQ0M7QUErQkQsc0RBV0M7QUFjRCxnREFtQkM7QUFhRCxnREFxQkM7QUFLRCx3Q0E0QkM7QUFwb0JELCtCQUE4QjtBQUM5Qix5Q0FBeUM7QUFDekMsNENBQXlEO0FBQ3pELDBFQVF3QztBQUV4QywyQ0FBMkM7QUFDM0MscUVBQWdFO0FBR2hFLGlEQUEyQztBQUMzQywrQ0FBbUQ7QUFDbkQscUNBQXNFO0FBRXRFLGtEQUE4QztBQUU5Qyw2RUFBb0U7QUFrQnBFOzs7OztHQUtHO0FBQ0gsTUFBYSxtQkFBbUI7SUFDdkIsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQ3hCLEdBQTBCLEVBQzFCLFNBQWlCLEVBQ2pCLDRCQUFxQyxLQUFLO1FBRTFDLElBQUksQ0FBQztZQUNILE1BQU0sUUFBUSxHQUFHLE1BQU0sR0FBRyxDQUFDLGNBQWMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDO1lBQ3BFLE9BQU8sSUFBSSxtQkFBbUIsQ0FBQyxHQUFHLEVBQUUsU0FBUyxFQUFFLFFBQVEsQ0FBQyxNQUFNLElBQUksUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSx5QkFBeUIsQ0FBQyxDQUFDO1FBQ25ILENBQUM7UUFBQyxPQUFPLENBQU0sRUFBRSxDQUFDO1lBQ2hCLElBQUksQ0FBQyxDQUFDLElBQUksS0FBSyxpQkFBaUIsSUFBSSxJQUFBLHlCQUFrQixFQUFDLENBQUMsQ0FBQyxLQUFLLGlCQUFpQixTQUFTLGlCQUFpQixFQUFFLENBQUM7Z0JBQzFHLE9BQU8sSUFBSSxtQkFBbUIsQ0FBQyxHQUFHLEVBQUUsU0FBUyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1lBQzVELENBQUM7WUFDRCxN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QUcsSUFBSSxhQUFhLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDcEUsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO1FBRUQsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0NBQ0Y7QUFwRkQsMENBb0ZDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZm9ybWF0IH0gZnJvbSAndXRpbCc7XG5pbXBvcnQgKiBhcyBjeGFwaSBmcm9tICdAYXdzLWNkay9jeC1hcGknO1xuaW1wb3J0IHsgU1NNUEFSQU1fTk9fSU5WQUxJREFURSB9IGZyb20gJ0Bhd3MtY2RrL2N4LWFwaSc7XG5pbXBvcnQge1xuICBDaGFuZ2VTZXRTdGF0dXMsXG4gIHR5cGUgRGVzY3JpYmVDaGFuZ2VTZXRDb21tYW5kT3V0cHV0LFxuICB0eXBlIFBhcmFtZXRlcixcbiAgdHlwZSBSZXNvdXJjZUlkZW50aWZpZXJTdW1tYXJ5LFxuICB0eXBlIFJlc291cmNlVG9JbXBvcnQsXG4gIHR5cGUgU3RhY2ssXG4gIHR5cGUgVGFnLFxufSBmcm9tICdAYXdzLXNkay9jbGllbnQtY2xvdWRmb3JtYXRpb24nO1xuaW1wb3J0IHR5cGUgeyBGaWxlTWFuaWZlc3RFbnRyeSB9IGZyb20gJ2Nkay1hc3NldHMnO1xuaW1wb3J0IHsgQXNzZXRNYW5pZmVzdCB9IGZyb20gJ2Nkay1hc3NldHMnO1xuaW1wb3J0IHsgQXNzZXRNYW5pZmVzdEJ1aWxkZXIgfSBmcm9tICcuL2Fzc2V0LW1hbmlmZXN0LWJ1aWxkZXInO1xuaW1wb3J0IHR5cGUgeyBEZXBsb3ltZW50cyB9IGZyb20gJy4vZGVwbG95bWVudHMnO1xuaW1wb3J0IHR5cGUgeyBJb0hlbHBlciB9IGZyb20gJy4uLy4uLy4uLy4uL0Bhd3MtY2RrL3RtcC10b29sa2l0LWhlbHBlcnMvc3JjL2FwaS9pby9wcml2YXRlJztcbmltcG9ydCB7IGRlYnVnIH0gZnJvbSAnLi4vLi4vY2xpL21lc3NhZ2VzJztcbmltcG9ydCB7IFRvb2xraXRFcnJvciB9IGZyb20gJy4uLy4uL3Rvb2xraXQvZXJyb3InO1xuaW1wb3J0IHsgZm9ybWF0RXJyb3JNZXNzYWdlLCBkZXNlcmlhbGl6ZVN0cnVjdHVyZSB9IGZyb20gJy4uLy4uL3V0aWwnO1xuaW1wb3J0IHR5cGUgeyBJQ2xvdWRGb3JtYXRpb25DbGllbnQsIFNka1Byb3ZpZGVyIH0gZnJvbSAnLi4vYXdzLWF1dGgnO1xuaW1wb3J0IHsgU3RhY2tTdGF0dXMgfSBmcm9tICcuLi9zdGFjay1ldmVudHMnO1xuaW1wb3J0IHR5cGUgeyBUZW1wbGF0ZUJvZHlQYXJhbWV0ZXIgfSBmcm9tICcuLi91dGlsL3RlbXBsYXRlLWJvZHktcGFyYW1ldGVyJztcbmltcG9ydCB7IG1ha2VCb2R5UGFyYW1ldGVyIH0gZnJvbSAnLi4vdXRpbC90ZW1wbGF0ZS1ib2R5LXBhcmFtZXRlcic7XG5cbmV4cG9ydCB0eXBlIFJlc291cmNlc1RvSW1wb3J0ID0gUmVzb3VyY2VUb0ltcG9ydFtdO1xuZXhwb3J0IHR5cGUgUmVzb3VyY2VJZGVudGlmaWVyU3VtbWFyaWVzID0gUmVzb3VyY2VJZGVudGlmaWVyU3VtbWFyeVtdO1xuZXhwb3J0IHR5cGUgUmVzb3VyY2VJZGVudGlmaWVyUHJvcGVydGllcyA9IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG5cbmV4cG9ydCB0eXBlIFRlbXBsYXRlID0ge1xuICBQYXJhbWV0ZXJzPzogUmVjb3JkPHN0cmluZywgVGVtcGxhdGVQYXJhbWV0ZXI+O1xuICBba2V5OiBzdHJpbmddOiBhbnk7XG59O1xuXG5pbnRlcmZhY2UgVGVtcGxhdGVQYXJhbWV0ZXIge1xuICBUeXBlOiBzdHJpbmc7XG4gIERlZmF1bHQ/OiBhbnk7XG4gIERlc2NyaXB0aW9uPzogc3RyaW5nO1xuICBba2V5OiBzdHJpbmddOiBhbnk7XG59XG5cbi8qKlxuICogUmVwcmVzZW50cyBhbiAoZXhpc3RpbmcpIFN0YWNrIGluIENsb3VkRm9ybWF0aW9uXG4gKlxuICogQnVuZGxlIGFuZCBjYWNoZSBzb21lIGluZm9ybWF0aW9uIHRoYXQgd2UgbmVlZCBkdXJpbmcgZGVwbG95bWVudCAoc28gd2UgZG9uJ3QgaGF2ZSB0byBtYWtlXG4gKiByZXBlYXRlZCBjYWxscyB0byBDbG91ZEZvcm1hdGlvbikuXG4gKi9cbmV4cG9ydCBjbGFzcyBDbG91ZEZvcm1hdGlvblN0YWNrIHtcbiAgcHVibGljIHN0YXRpYyBhc3luYyBsb29rdXAoXG4gICAgY2ZuOiBJQ2xvdWRGb3JtYXRpb25DbGllbnQsXG4gICAgc3RhY2tOYW1lOiBzdHJpbmcsXG4gICAgcmV0cmlldmVQcm9jZXNzZWRUZW1wbGF0ZTogYm9vbGVhbiA9IGZhbHNlLFxuICApOiBQcm9taXNlPENsb3VkRm9ybWF0aW9uU3RhY2s+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjZm4uZGVzY3JpYmVTdGFja3MoeyBTdGFja05hbWU6IHN0YWNrTmFtZSB9KTtcbiAgICAgIHJldHVybiBuZXcgQ2xvdWRGb3JtYXRpb25TdGFjayhjZm4sIHN0YWNrTmFtZSwgcmVzcG9uc2UuU3RhY2tzICYmIHJlc3BvbnNlLlN0YWNrc1swXSwgcmV0cmlldmVQcm9jZXNzZWRUZW1wbGF0ZSk7XG4gICAgfSBjYXRjaCAoZTogYW55KSB7XG4gICAgICBpZiAoZS5uYW1lID09PSAnVmFsaWRhdGlvbkVycm9yJyAmJiBmb3JtYXRFcnJvck1lc3NhZ2UoZSkgPT09IGBTdGFjayB3aXRoIGlkICR7c3RhY2tOYW1lfSBkb2VzIG5vdCBleGlzdGApIHtcbiAgICAgICAgcmV0dXJuIG5ldyBDbG91ZEZvcm1hdGlvblN0YWNrKGNmbiwgc3RhY2tOYW1lLCB1bmRlZmluZWQpO1xuICAgICAgfVxuICAgICAgdGhyb3cgZTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGEgY29weSBvZiB0aGUgZ2l2ZW4gc3RhY2sgdGhhdCBkb2VzIG5vdCBleGlzdFxuICAgKlxuICAgKiBJdCdzIGEgbGl0dGxlIHNpbGx5IHRoYXQgaXQgbmVlZHMgYXJndW1lbnRzIHRvIGRvIHRoYXQsIGJ1dCB0aGVyZSB3ZSBnby5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZG9lc05vdEV4aXN0KGNmbjogSUNsb3VkRm9ybWF0aW9uQ2xpZW50LCBzdGFja05hbWU6IHN0cmluZykge1xuICAgIHJldHVybiBuZXcgQ2xvdWRGb3JtYXRpb25TdGFjayhjZm4sIHN0YWNrTmFtZSk7XG4gIH1cblxuICAvKipcbiAgICogRnJvbSBzdGF0aWMgaW5mb3JtYXRpb24gKGZvciB0ZXN0aW5nKVxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBmcm9tU3RhdGljSW5mb3JtYXRpb24oY2ZuOiBJQ2xvdWRGb3JtYXRpb25DbGllbnQsIHN0YWNrTmFtZTogc3RyaW5nLCBzdGFjazogU3RhY2spIHtcbiAgICByZXR1cm4gbmV3IENsb3VkRm9ybWF0aW9uU3RhY2soY2ZuLCBzdGFja05hbWUsIHN0YWNrKTtcbiAgfVxuXG4gIHByaXZhdGUgX3RlbXBsYXRlOiBhbnk7XG5cbiAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgY2ZuOiBJQ2xvdWRGb3JtYXRpb25DbGllbnQsXG4gICAgcHVibGljIHJlYWRvbmx5IHN0YWNrTmFtZTogc3RyaW5nLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgc3RhY2s/OiBTdGFjayxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHJldHJpZXZlUHJvY2Vzc2VkVGVtcGxhdGU6IGJvb2xlYW4gPSBmYWxzZSxcbiAgKSB7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmUgdGhlIHN0YWNrJ3MgZGVwbG95ZWQgdGVtcGxhdGVcbiAgICpcbiAgICogQ2FjaGVkLCBzbyB3aWxsIG9ubHkgYmUgcmV0cmlldmVkIG9uY2UuIFdpbGwgcmV0dXJuIGFuIGVtcHR5XG4gICAqIHN0cnVjdHVyZSBpZiB0aGUgc3RhY2sgZG9lcyBub3QgZXhpc3QuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgdGVtcGxhdGUoKTogUHJvbWlzZTxUZW1wbGF0ZT4ge1xuICAgIGlmICghdGhpcy5leGlzdHMpIHtcbiAgICAgIHJldHVybiB7fTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fdGVtcGxhdGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmNmbi5nZXRUZW1wbGF0ZSh7XG4gICAgICAgIFN0YWNrTmFtZTogdGhpcy5zdGFja05hbWUsXG4gICAgICAgIFRlbXBsYXRlU3RhZ2U6IHRoaXMucmV0cmlldmVQcm9jZXNzZWRUZW1wbGF0ZSA/ICdQcm9jZXNzZWQnIDogJ09yaWdpbmFsJyxcbiAgICAgIH0pO1xuICAgICAgdGhpcy5fdGVtcGxhdGUgPSAocmVzcG9uc2UuVGVtcGxhdGVCb2R5ICYmIGRlc2VyaWFsaXplU3RydWN0dXJlKHJlc3BvbnNlLlRlbXBsYXRlQm9keSkpIHx8IHt9O1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fdGVtcGxhdGU7XG4gIH1cblxuICAvKipcbiAgICogV2hldGhlciB0aGUgc3RhY2sgZXhpc3RzXG4gICAqL1xuICBwdWJsaWMgZ2V0IGV4aXN0cygpIHtcbiAgICByZXR1cm4gdGhpcy5zdGFjayAhPT0gdW5kZWZpbmVkO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBzdGFjaydzIElEXG4gICAqXG4gICAqIFRocm93cyBpZiB0aGUgc3RhY2sgZG9lc24ndCBleGlzdC5cbiAgICovXG4gIHB1YmxpYyBnZXQgc3RhY2tJZCgpIHtcbiAgICB0aGlzLmFzc2VydEV4aXN0cygpO1xuICAgIHJldHVybiB0aGlzLnN0YWNrIS5TdGFja0lkITtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgc3RhY2sncyBjdXJyZW50IG91dHB1dHNcbiAgICpcbiAgICogRW1wdHkgb2JqZWN0IGlmIHRoZSBzdGFjayBkb2Vzbid0IGV4aXN0XG4gICAqL1xuICBwdWJsaWMgZ2V0IG91dHB1dHMoKTogUmVjb3JkPHN0cmluZywgc3RyaW5nPiB7XG4gICAgaWYgKCF0aGlzLmV4aXN0cykge1xuICAgICAgcmV0dXJuIHt9O1xuICAgIH1cbiAgICBjb25zdCByZXN1bHQ6IHsgW25hbWU6IHN0cmluZ106IHN0cmluZyB9ID0ge307XG4gICAgKHRoaXMuc3RhY2shLk91dHB1dHMgfHwgW10pLmZvckVhY2goKG91dHB1dCkgPT4ge1xuICAgICAgcmVzdWx0W291dHB1dC5PdXRwdXRLZXkhXSA9IG91dHB1dC5PdXRwdXRWYWx1ZSE7XG4gICAgfSk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgc3RhY2sncyBzdGF0dXNcbiAgICpcbiAgICogU3BlY2lhbCBzdGF0dXMgTk9UX0ZPVU5EIGlmIHRoZSBzdGFjayBkb2VzIG5vdCBleGlzdC5cbiAgICovXG4gIHB1YmxpYyBnZXQgc3RhY2tTdGF0dXMoKTogU3RhY2tTdGF0dXMge1xuICAgIGlmICghdGhpcy5leGlzdHMpIHtcbiAgICAgIHJldHVybiBuZXcgU3RhY2tTdGF0dXMoJ05PVF9GT1VORCcsICdTdGFjayBub3QgZm91bmQgZHVyaW5nIGxvb2t1cCcpO1xuICAgIH1cbiAgICByZXR1cm4gU3RhY2tTdGF0dXMuZnJvbVN0YWNrRGVzY3JpcHRpb24odGhpcy5zdGFjayEpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBzdGFjaydzIGN1cnJlbnQgdGFnc1xuICAgKlxuICAgKiBFbXB0eSBsaXN0IGlmIHRoZSBzdGFjayBkb2VzIG5vdCBleGlzdFxuICAgKi9cbiAgcHVibGljIGdldCB0YWdzKCk6IFRhZ1tdIHtcbiAgICByZXR1cm4gdGhpcy5zdGFjaz8uVGFncyB8fCBbXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTTlMgVG9waWMgQVJOcyB0aGF0IHdpbGwgcmVjZWl2ZSBzdGFjayBldmVudHMuXG4gICAqXG4gICAqIEVtcHR5IGxpc3QgaWYgdGhlIHN0YWNrIGRvZXMgbm90IGV4aXN0XG4gICAqL1xuICBwdWJsaWMgZ2V0IG5vdGlmaWNhdGlvbkFybnMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiB0aGlzLnN0YWNrPy5Ob3RpZmljYXRpb25BUk5zID8/IFtdO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB0aGUgbmFtZXMgb2YgYWxsIGN1cnJlbnQgcGFyYW1ldGVycyB0byB0aGUgc3RhY2tcbiAgICpcbiAgICogRW1wdHkgbGlzdCBpZiB0aGUgc3RhY2sgZG9lcyBub3QgZXhpc3QuXG4gICAqL1xuICBwdWJsaWMgZ2V0IHBhcmFtZXRlck5hbWVzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gT2JqZWN0LmtleXModGhpcy5wYXJhbWV0ZXJzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIG5hbWVzIGFuZCB2YWx1ZXMgb2YgYWxsIGN1cnJlbnQgcGFyYW1ldGVycyB0byB0aGUgc3RhY2tcbiAgICpcbiAgICogRW1wdHkgb2JqZWN0IGlmIHRoZSBzdGFjayBkb2VzIG5vdCBleGlzdC5cbiAgICovXG4gIHB1YmxpYyBnZXQgcGFyYW1ldGVycygpOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHtcbiAgICBpZiAoIXRoaXMuZXhpc3RzKSB7XG4gICAgICByZXR1cm4ge307XG4gICAgfVxuICAgIGNvbnN0IHJldDogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuICAgIGZvciAoY29uc3QgcGFyYW0gb2YgdGhpcy5zdGFjayEuUGFyYW1ldGVycyA/PyBbXSkge1xuICAgICAgcmV0W3BhcmFtLlBhcmFtZXRlcktleSFdID0gcGFyYW0uUmVzb2x2ZWRWYWx1ZSA/PyBwYXJhbS5QYXJhbWV0ZXJWYWx1ZSE7XG4gICAgfVxuICAgIHJldHVybiByZXQ7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIHRoZSB0ZXJtaW5hdGlvbiBwcm90ZWN0aW9uIG9mIHRoZSBzdGFja1xuICAgKi9cbiAgcHVibGljIGdldCB0ZXJtaW5hdGlvblByb3RlY3Rpb24oKTogYm9vbGVhbiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuc3RhY2s/LkVuYWJsZVRlcm1pbmF0aW9uUHJvdGVjdGlvbjtcbiAgfVxuXG4gIHByaXZhdGUgYXNzZXJ0RXhpc3RzKCkge1xuICAgIGlmICghdGhpcy5leGlzdHMpIHtcbiAgICAgIHRocm93IG5ldyBUb29sa2l0RXJyb3IoYE5vIHN0YWNrIG5hbWVkICcke3RoaXMuc3RhY2tOYW1lfSdgKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBEZXNjcmliZSBhIGNoYW5nZXNldCBpbiBDbG91ZEZvcm1hdGlvbiwgcmVnYXJkbGVzcyBvZiBpdHMgY3VycmVudCBzdGF0ZS5cbiAqXG4gKiBAcGFyYW0gY2ZuICAgICAgICAgICBhIENsb3VkRm9ybWF0aW9uIGNsaWVudFxuICogQHBhcmFtIHN0YWNrTmFtZSAgICAgdGhlIG5hbWUgb2YgdGhlIFN0YWNrIHRoZSBDaGFuZ2VTZXQgYmVsb25ncyB0b1xuICogQHBhcmFtIGNoYW5nZVNldE5hbWUgdGhlIG5hbWUgb2YgdGhlIENoYW5nZVNldFxuICogQHBhcmFtIGZldGNoQWxsICAgICAgaWYgdHJ1ZSwgZmV0Y2hlcyBhbGwgcGFnZXMgb2YgdGhlIGNoYW5nZSBzZXQgZGVzY3JpcHRpb24uXG4gKlxuICogQHJldHVybnMgICAgICAgQ2xvdWRGb3JtYXRpb24gaW5mb3JtYXRpb24gYWJvdXQgdGhlIENoYW5nZVNldFxuICovXG5hc3luYyBmdW5jdGlvbiBkZXNjcmliZUNoYW5nZVNldChcbiAgY2ZuOiBJQ2xvdWRGb3JtYXRpb25DbGllbnQsXG4gIHN0YWNrTmFtZTogc3RyaW5nLFxuICBjaGFuZ2VTZXROYW1lOiBzdHJpbmcsXG4gIHsgZmV0Y2hBbGwgfTogeyBmZXRjaEFsbDogYm9vbGVhbiB9LFxuKTogUHJvbWlzZTxEZXNjcmliZUNoYW5nZVNldENvbW1hbmRPdXRwdXQ+IHtcbiAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjZm4uZGVzY3JpYmVDaGFuZ2VTZXQoe1xuICAgIFN0YWNrTmFtZTogc3RhY2tOYW1lLFxuICAgIENoYW5nZVNldE5hbWU6IGNoYW5nZVNldE5hbWUsXG4gIH0pO1xuXG4gIC8vIElmIGZldGNoQWxsIGlzIHRydWUsIHRyYXZlcnNlIGFsbCBwYWdlcyBmcm9tIHRoZSBjaGFuZ2Ugc2V0IGRlc2NyaXB0aW9uLlxuICB3aGlsZSAoZmV0Y2hBbGwgJiYgcmVzcG9uc2UuTmV4dFRva2VuICE9IG51bGwpIHtcbiAgICBjb25zdCBuZXh0UGFnZSA9IGF3YWl0IGNmbi5kZXNjcmliZUNoYW5nZVNldCh7XG4gICAgICBTdGFja05hbWU6IHN0YWNrTmFtZSxcbiAgICAgIENoYW5nZVNldE5hbWU6IHJlc3BvbnNlLkNoYW5nZVNldElkID8/IGNoYW5nZVNldE5hbWUsXG4gICAgICBOZXh0VG9rZW46IHJlc3BvbnNlLk5leHRUb2tlbixcbiAgICB9KTtcblxuICAgIC8vIENvbnNvbGlkYXRlIHRoZSBjaGFuZ2VzXG4gICAgaWYgKG5leHRQYWdlLkNoYW5nZXMgIT0gbnVsbCkge1xuICAgICAgcmVzcG9uc2UuQ2hhbmdlcyA9IHJlc3BvbnNlLkNoYW5nZXMgIT0gbnVsbCA/IHJlc3BvbnNlLkNoYW5nZXMuY29uY2F0KG5leHRQYWdlLkNoYW5nZXMpIDogbmV4dFBhZ2UuQ2hhbmdlcztcbiAgICB9XG5cbiAgICAvLyBGb3J3YXJkIHRoZSBuZXcgTmV4dFRva2VuXG4gICAgcmVzcG9uc2UuTmV4dFRva2VuID0gbmV4dFBhZ2UuTmV4dFRva2VuO1xuICB9XG5cbiAgcmV0dXJuIHJlc3BvbnNlO1xufVxuXG4vKipcbiAqIFdhaXRzIGZvciBhIGZ1bmN0aW9uIHRvIHJldHVybiBub24tK3VuZGVmaW5lZCsgYmVmb3JlIHJldHVybmluZy5cbiAqXG4gKiBAcGFyYW0gdmFsdWVQcm92aWRlciBhIGZ1bmN0aW9uIHRoYXQgd2lsbCByZXR1cm4gYSB2YWx1ZSB0aGF0IGlzIG5vdCArdW5kZWZpbmVkKyBvbmNlIHRoZSB3YWl0IHNob3VsZCBiZSBvdmVyXG4gKiBAcGFyYW0gdGltZW91dCAgICAgdGhlIHRpbWUgdG8gd2FpdCBiZXR3ZWVuIHR3byBjYWxscyB0byArdmFsdWVQcm92aWRlcitcbiAqXG4gKiBAcmV0dXJucyAgICAgICB0aGUgdmFsdWUgdGhhdCB3YXMgcmV0dXJuZWQgYnkgK3ZhbHVlUHJvdmlkZXIrXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHdhaXRGb3I8VD4oXG4gIHZhbHVlUHJvdmlkZXI6ICgpID0+IFByb21pc2U8VCB8IG51bGwgfCB1bmRlZmluZWQ+LFxuICB0aW1lb3V0OiBudW1iZXIgPSA1MDAwLFxuKTogUHJvbWlzZTxUIHwgdW5kZWZpbmVkPiB7XG4gIHdoaWxlICh0cnVlKSB7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdmFsdWVQcm92aWRlcigpO1xuICAgIGlmIChyZXN1bHQgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfSBlbHNlIGlmIChyZXN1bHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgYXdhaXQgbmV3IFByb21pc2UoKGNiKSA9PiBzZXRUaW1lb3V0KGNiLCB0aW1lb3V0KSk7XG4gIH1cbn1cblxuLyoqXG4gKiBXYWl0cyBmb3IgYSBDaGFuZ2VTZXQgdG8gYmUgYXZhaWxhYmxlIGZvciB0cmlnZ2VyaW5nIGEgU3RhY2tVcGRhdGUuXG4gKlxuICogV2lsbCByZXR1cm4gYSBjaGFuZ2VzZXQgdGhhdCBpcyBlaXRoZXIgcmVhZHkgdG8gYmUgZXhlY3V0ZWQgb3IgaGFzIG5vIGNoYW5nZXMuXG4gKiBXaWxsIHRocm93IGluIG90aGVyIGNhc2VzLlxuICpcbiAqIEBwYXJhbSBjZm4gICAgICAgICAgIGEgQ2xvdWRGb3JtYXRpb24gY2xpZW50XG4gKiBAcGFyYW0gc3RhY2tOYW1lICAgICB0aGUgbmFtZSBvZiB0aGUgU3RhY2sgdGhhdCB0aGUgQ2hhbmdlU2V0IGJlbG9uZ3MgdG9cbiAqIEBwYXJhbSBjaGFuZ2VTZXROYW1lIHRoZSBuYW1lIG9mIHRoZSBDaGFuZ2VTZXRcbiAqIEBwYXJhbSBmZXRjaEFsbCAgICAgIGlmIHRydWUsIGZldGNoZXMgYWxsIHBhZ2VzIG9mIHRoZSBDaGFuZ2VTZXQgYmVmb3JlIHJldHVybmluZy5cbiAqXG4gKiBAcmV0dXJucyAgICAgICB0aGUgQ2xvdWRGb3JtYXRpb24gZGVzY3JpcHRpb24gb2YgdGhlIENoYW5nZVNldFxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gd2FpdEZvckNoYW5nZVNldChcbiAgY2ZuOiBJQ2xvdWRGb3JtYXRpb25DbGllbnQsXG4gIGlvSGVscGVyOiBJb0hlbHBlcixcbiAgc3RhY2tOYW1lOiBzdHJpbmcsXG4gIGNoYW5nZVNldE5hbWU6IHN0cmluZyxcbiAgeyBmZXRjaEFsbCB9OiB7IGZldGNoQWxsOiBib29sZWFuIH0sXG4pOiBQcm9taXNlPERlc2NyaWJlQ2hhbmdlU2V0Q29tbWFuZE91dHB1dD4ge1xuICBhd2FpdCBpb0hlbHBlci5ub3RpZnkoZGVidWcoZm9ybWF0KCdXYWl0aW5nIGZvciBjaGFuZ2VzZXQgJXMgb24gc3RhY2sgJXMgdG8gZmluaXNoIGNyZWF0aW5nLi4uJywgY2hhbmdlU2V0TmFtZSwgc3RhY2tOYW1lKSkpO1xuICBjb25zdCByZXQgPSBhd2FpdCB3YWl0Rm9yKGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBkZXNjcmlwdGlvbiA9IGF3YWl0IGRlc2NyaWJlQ2hhbmdlU2V0KGNmbiwgc3RhY2tOYW1lLCBjaGFuZ2VTZXROYW1lLCB7XG4gICAgICBmZXRjaEFsbCxcbiAgICB9KTtcbiAgICAvLyBUaGUgZm9sbG93aW5nIGRvZXNuJ3QgdXNlIGEgc3dpdGNoIGJlY2F1c2UgdHNjIHdpbGwgbm90IGFsbG93IGZhbGwtdGhyb3VnaCwgVU5MRVNTIGl0IGlzIGFsbG93c1xuICAgIC8vIEVWRVJZV0hFUkUgdGhhdCB1c2VzIHRoaXMgbGlicmFyeSBkaXJlY3RseSBvciBpbmRpcmVjdGx5LCB3aGljaCBpcyB1bmRlc2lyYWJsZS5cbiAgICBpZiAoZGVzY3JpcHRpb24uU3RhdHVzID09PSAnQ1JFQVRFX1BFTkRJTkcnIHx8IGRlc2NyaXB0aW9uLlN0YXR1cyA9PT0gJ0NSRUFURV9JTl9QUk9HUkVTUycpIHtcbiAgICAgIGF3YWl0IGlvSGVscGVyLm5vdGlmeShkZWJ1Zyhmb3JtYXQoJ0NoYW5nZXNldCAlcyBvbiBzdGFjayAlcyBpcyBzdGlsbCBjcmVhdGluZycsIGNoYW5nZVNldE5hbWUsIHN0YWNrTmFtZSkpKTtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgaWYgKGRlc2NyaXB0aW9uLlN0YXR1cyA9PT0gQ2hhbmdlU2V0U3RhdHVzLkNSRUFURV9DT01QTEVURSB8fCBjaGFuZ2VTZXRIYXNOb0NoYW5nZXMoZGVzY3JpcHRpb24pKSB7XG4gICAgICByZXR1cm4gZGVzY3JpcHRpb247XG4gICAgfVxuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1sZW5cbiAgICB0aHJvdyBuZXcgVG9vbGtpdEVycm9yKFxuICAgICAgYEZhaWxlZCB0byBjcmVhdGUgQ2hhbmdlU2V0ICR7Y2hhbmdlU2V0TmFtZX0gb24gJHtzdGFja05hbWV9OiAke2Rlc2NyaXB0aW9uLlN0YXR1cyB8fCAnTk9fU1RBVFVTJ30sICR7ZGVzY3JpcHRpb24uU3RhdHVzUmVhc29uIHx8ICdubyByZWFzb24gcHJvdmlkZWQnfWAsXG4gICAgKTtcbiAgfSk7XG5cbiAgaWYgKCFyZXQpIHtcbiAgICB0aHJvdyBuZXcgVG9vbGtpdEVycm9yKCdDaGFuZ2Ugc2V0IHRvb2sgdG9vIGxvbmcgdG8gYmUgY3JlYXRlZDsgYWJvcnRpbmcnKTtcbiAgfVxuXG4gIHJldHVybiByZXQ7XG59XG5cbmV4cG9ydCB0eXBlIFByZXBhcmVDaGFuZ2VTZXRPcHRpb25zID0ge1xuICBzdGFjazogY3hhcGkuQ2xvdWRGb3JtYXRpb25TdGFja0FydGlmYWN0O1xuICBkZXBsb3ltZW50czogRGVwbG95bWVudHM7XG4gIHV1aWQ6IHN0cmluZztcbiAgd2lsbEV4ZWN1dGU6IGJvb2xlYW47XG4gIHNka1Byb3ZpZGVyOiBTZGtQcm92aWRlcjtcbiAgc3RyZWFtOiBOb2RlSlMuV3JpdGFibGVTdHJlYW07XG4gIHBhcmFtZXRlcnM6IHsgW25hbWU6IHN0cmluZ106IHN0cmluZyB8IHVuZGVmaW5lZCB9O1xuICByZXNvdXJjZXNUb0ltcG9ydD86IFJlc291cmNlc1RvSW1wb3J0O1xufVxuXG5leHBvcnQgdHlwZSBDcmVhdGVDaGFuZ2VTZXRPcHRpb25zID0ge1xuICBjZm46IElDbG91ZEZvcm1hdGlvbkNsaWVudDtcbiAgY2hhbmdlU2V0TmFtZTogc3RyaW5nO1xuICB3aWxsRXhlY3V0ZTogYm9vbGVhbjtcbiAgZXhpc3RzOiBib29sZWFuO1xuICB1dWlkOiBzdHJpbmc7XG4gIHN0YWNrOiBjeGFwaS5DbG91ZEZvcm1hdGlvblN0YWNrQXJ0aWZhY3Q7XG4gIGJvZHlQYXJhbWV0ZXI6IFRlbXBsYXRlQm9keVBhcmFtZXRlcjtcbiAgcGFyYW1ldGVyczogeyBbbmFtZTogc3RyaW5nXTogc3RyaW5nIHwgdW5kZWZpbmVkIH07XG4gIHJlc291cmNlc1RvSW1wb3J0PzogUmVzb3VyY2VUb0ltcG9ydFtdO1xuICByb2xlPzogc3RyaW5nO1xufTtcblxuLyoqXG4gKiBDcmVhdGUgYSBjaGFuZ2VzZXQgZm9yIGEgZGlmZiBvcGVyYXRpb25cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNyZWF0ZURpZmZDaGFuZ2VTZXQoXG4gIGlvSGVscGVyOiBJb0hlbHBlcixcbiAgb3B0aW9uczogUHJlcGFyZUNoYW5nZVNldE9wdGlvbnMsXG4pOiBQcm9taXNlPERlc2NyaWJlQ2hhbmdlU2V0Q29tbWFuZE91dHB1dCB8IHVuZGVmaW5lZD4ge1xuICAvLyBgb3B0aW9ucy5zdGFja2AgaGFzIGJlZW4gbW9kaWZpZWQgdG8gaW5jbHVkZSBhbnkgbmVzdGVkIHN0YWNrIHRlbXBsYXRlcyBkaXJlY3RseSBpbmxpbmUgd2l0aCBpdHMgb3duIHRlbXBsYXRlLCB1bmRlciBhIHNwZWNpYWwgYE5lc3RlZFRlbXBsYXRlYCBwcm9wZXJ0eS5cbiAgLy8gVGh1cyB0aGUgcGFyZW50IHRlbXBsYXRlJ3MgUmVzb3VyY2VzIHNlY3Rpb24gY29udGFpbnMgdGhlIG5lc3RlZCB0ZW1wbGF0ZSdzIENESyBtZXRhZGF0YSBjaGVjaywgd2hpY2ggdXNlcyBGbjo6RXF1YWxzLlxuICAvLyBUaGlzIGNhdXNlcyBDcmVhdGVDaGFuZ2VTZXQgdG8gZmFpbCB3aXRoIGBUZW1wbGF0ZSBFcnJvcjogRm46OkVxdWFscyBjYW5ub3QgYmUgcGFydGlhbGx5IGNvbGxhcHNlZGAuXG4gIGZvciAoY29uc3QgcmVzb3VyY2Ugb2YgT2JqZWN0LnZhbHVlcyhvcHRpb25zLnN0YWNrLnRlbXBsYXRlLlJlc291cmNlcyA/PyB7fSkpIHtcbiAgICBpZiAoKHJlc291cmNlIGFzIGFueSkuVHlwZSA9PT0gJ0FXUzo6Q2xvdWRGb3JtYXRpb246OlN0YWNrJykge1xuICAgICAgYXdhaXQgaW9IZWxwZXIubm90aWZ5KGRlYnVnKCdUaGlzIHN0YWNrIGNvbnRhaW5zIG9uZSBvciBtb3JlIG5lc3RlZCBzdGFja3MsIGZhbGxpbmcgYmFjayB0byB0ZW1wbGF0ZS1vbmx5IGRpZmYuLi4nKSk7XG5cbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHVwbG9hZEJvZHlQYXJhbWV0ZXJBbmRDcmVhdGVDaGFuZ2VTZXQoaW9IZWxwZXIsIG9wdGlvbnMpO1xufVxuXG4vKipcbiAqIFJldHVybnMgYWxsIGZpbGUgZW50cmllcyBmcm9tIGFuIEFzc2V0TWFuaWZlc3RBcnRpZmFjdCB0aGF0IGxvb2sgbGlrZSB0ZW1wbGF0ZXMuXG4gKlxuICogVGhpcyBpcyB1c2VkIGluIHRoZSBgdXBsb2FkQm9keVBhcmFtZXRlckFuZENyZWF0ZUNoYW5nZVNldGAgZnVuY3Rpb24gdG8gZmluZFxuICogYWxsIHRlbXBsYXRlIGFzc2V0IGZpbGVzIHRvIGJ1aWxkIGFuZCBwdWJsaXNoLlxuICpcbiAqIFJldHVybnMgYSB0dXBsZSBvZiBbQXNzZXRNYW5pZmVzdCwgRmlsZU1hbmlmZXN0RW50cnlbXV1cbiAqL1xuZnVuY3Rpb24gdGVtcGxhdGVzRnJvbUFzc2V0TWFuaWZlc3RBcnRpZmFjdChcbiAgYXJ0aWZhY3Q6IGN4YXBpLkFzc2V0TWFuaWZlc3RBcnRpZmFjdCxcbik6IFtBc3NldE1hbmlmZXN0LCBGaWxlTWFuaWZlc3RFbnRyeVtdXSB7XG4gIGNvbnN0IGFzc2V0czogRmlsZU1hbmlmZXN0RW50cnlbXSA9IFtdO1xuICBjb25zdCBmaWxlTmFtZSA9IGFydGlmYWN0LmZpbGU7XG4gIGNvbnN0IGFzc2V0TWFuaWZlc3QgPSBBc3NldE1hbmlmZXN0LmZyb21GaWxlKGZpbGVOYW1lKTtcblxuICBhc3NldE1hbmlmZXN0LmVudHJpZXMuZm9yRWFjaCgoZW50cnkpID0+IHtcbiAgICBpZiAoZW50cnkudHlwZSA9PT0gJ2ZpbGUnKSB7XG4gICAgICBjb25zdCBzb3VyY2UgPSAoZW50cnkgYXMgRmlsZU1hbmlmZXN0RW50cnkpLnNvdXJjZTtcbiAgICAgIGlmIChzb3VyY2UucGF0aCAmJiBzb3VyY2UucGF0aC5lbmRzV2l0aCgnLnRlbXBsYXRlLmpzb24nKSkge1xuICAgICAgICBhc3NldHMucHVzaChlbnRyeSBhcyBGaWxlTWFuaWZlc3RFbnRyeSk7XG4gICAgICB9XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIFthc3NldE1hbmlmZXN0LCBhc3NldHNdO1xufVxuXG5hc3luYyBmdW5jdGlvbiB1cGxvYWRCb2R5UGFyYW1ldGVyQW5kQ3JlYXRlQ2hhbmdlU2V0KFxuICBpb0hlbHBlcjogSW9IZWxwZXIsXG4gIG9wdGlvbnM6IFByZXBhcmVDaGFuZ2VTZXRPcHRpb25zLFxuKTogUHJvbWlzZTxEZXNjcmliZUNoYW5nZVNldENvbW1hbmRPdXRwdXQgfCB1bmRlZmluZWQ+IHtcbiAgdHJ5IHtcbiAgICBhd2FpdCB1cGxvYWRTdGFja1RlbXBsYXRlQXNzZXRzKG9wdGlvbnMuc3RhY2ssIG9wdGlvbnMuZGVwbG95bWVudHMpO1xuICAgIGNvbnN0IGVudiA9IGF3YWl0IG9wdGlvbnMuZGVwbG95bWVudHMuZW52cy5hY2Nlc3NTdGFja0Zvck11dGFibGVTdGFja09wZXJhdGlvbnMob3B0aW9ucy5zdGFjayk7XG5cbiAgICBjb25zdCBib2R5UGFyYW1ldGVyID0gYXdhaXQgbWFrZUJvZHlQYXJhbWV0ZXIoXG4gICAgICBvcHRpb25zLnN0YWNrLFxuICAgICAgZW52LnJlc29sdmVkRW52aXJvbm1lbnQsXG4gICAgICBuZXcgQXNzZXRNYW5pZmVzdEJ1aWxkZXIoKSxcbiAgICAgIGVudi5yZXNvdXJjZXMsXG4gICAgKTtcbiAgICBjb25zdCBjZm4gPSBlbnYuc2RrLmNsb3VkRm9ybWF0aW9uKCk7XG4gICAgY29uc3QgZXhpc3RzID0gKGF3YWl0IENsb3VkRm9ybWF0aW9uU3RhY2subG9va3VwKGNmbiwgb3B0aW9ucy5zdGFjay5zdGFja05hbWUsIGZhbHNlKSkuZXhpc3RzO1xuXG4gICAgY29uc3QgZXhlY3V0aW9uUm9sZUFybiA9IGF3YWl0IGVudi5yZXBsYWNlUGxhY2Vob2xkZXJzKG9wdGlvbnMuc3RhY2suY2xvdWRGb3JtYXRpb25FeGVjdXRpb25Sb2xlQXJuKTtcbiAgICBvcHRpb25zLnN0cmVhbS53cml0ZShcbiAgICAgICdIb2xkIG9uIHdoaWxlIHdlIGNyZWF0ZSBhIHJlYWQtb25seSBjaGFuZ2Ugc2V0IHRvIGdldCBhIGRpZmYgd2l0aCBhY2N1cmF0ZSByZXBsYWNlbWVudCBpbmZvcm1hdGlvbiAodXNlIC0tbm8tY2hhbmdlLXNldCB0byB1c2UgYSBsZXNzIGFjY3VyYXRlIGJ1dCBmYXN0ZXIgdGVtcGxhdGUtb25seSBkaWZmKVxcbicsXG4gICAgKTtcblxuICAgIHJldHVybiBhd2FpdCBjcmVhdGVDaGFuZ2VTZXQoaW9IZWxwZXIsIHtcbiAgICAgIGNmbixcbiAgICAgIGNoYW5nZVNldE5hbWU6ICdjZGstZGlmZi1jaGFuZ2Utc2V0JyxcbiAgICAgIHN0YWNrOiBvcHRpb25zLnN0YWNrLFxuICAgICAgZXhpc3RzLFxuICAgICAgdXVpZDogb3B0aW9ucy51dWlkLFxuICAgICAgd2lsbEV4ZWN1dGU6IG9wdGlvbnMud2lsbEV4ZWN1dGUsXG4gICAgICBib2R5UGFyYW1ldGVyLFxuICAgICAgcGFyYW1ldGVyczogb3B0aW9ucy5wYXJhbWV0ZXJzLFxuICAgICAgcmVzb3VyY2VzVG9JbXBvcnQ6IG9wdGlvbnMucmVzb3VyY2VzVG9JbXBvcnQsXG4gICAgICByb2xlOiBleGVjdXRpb25Sb2xlQXJuLFxuICAgIH0pO1xuICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICBhd2FpdCBpb0hlbHBlci5ub3RpZnkoZGVidWcoZSkpO1xuICAgIG9wdGlvbnMuc3RyZWFtLndyaXRlKFxuICAgICAgJ0NvdWxkIG5vdCBjcmVhdGUgYSBjaGFuZ2Ugc2V0LCB3aWxsIGJhc2UgdGhlIGRpZmYgb24gdGVtcGxhdGUgZGlmZmVyZW5jZXMgKHJ1biBhZ2FpbiB3aXRoIC12IHRvIHNlZSB0aGUgcmVhc29uKVxcbicsXG4gICAgKTtcblxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbn1cblxuLyoqXG4gKiBVcGxvYWRzIHRoZSBhc3NldHMgdGhhdCBsb29rIGxpa2UgdGVtcGxhdGVzIGZvciB0aGlzIENsb3VkRm9ybWF0aW9uIHN0YWNrXG4gKlxuICogVGhpcyBpcyBuZWNlc3NhcnkgZm9yIGFueSBDbG91ZEZvcm1hdGlvbiBjYWxsIHRoYXQgbmVlZHMgdGhlIHRlbXBsYXRlLCBpdCBtYXkgbmVlZFxuICogdG8gYmUgdXBsb2FkZWQgdG8gYW4gUzMgYnVja2V0IGZpcnN0LiBXZSBoYXZlIHRvIGZvbGxvdyB0aGUgaW5zdHJ1Y3Rpb25zIGluIHRoZVxuICogYXNzZXQgbWFuaWZlc3QsIGJlY2F1c2UgdGVjaG5pY2FsbHkgdGhhdCBpcyB0aGUgb25seSBwbGFjZSB0aGF0IGtub3dzIGFib3V0XG4gKiBidWNrZXQgYW5kIGFzc3VtZWQgcm9sZXMgYW5kIHN1Y2guXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB1cGxvYWRTdGFja1RlbXBsYXRlQXNzZXRzKHN0YWNrOiBjeGFwaS5DbG91ZEZvcm1hdGlvblN0YWNrQXJ0aWZhY3QsIGRlcGxveW1lbnRzOiBEZXBsb3ltZW50cykge1xuICBmb3IgKGNvbnN0IGFydGlmYWN0IG9mIHN0YWNrLmRlcGVuZGVuY2llcykge1xuICAgIC8vIFNraXAgYXJ0aWZhY3QgaWYgaXQgaXMgbm90IGFuIEFzc2V0IE1hbmlmZXN0IEFydGlmYWN0XG4gICAgaWYgKCFjeGFwaS5Bc3NldE1hbmlmZXN0QXJ0aWZhY3QuaXNBc3NldE1hbmlmZXN0QXJ0aWZhY3QoYXJ0aWZhY3QpKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBjb25zdCBbYXNzZXRNYW5pZmVzdCwgZmlsZV9lbnRyaWVzXSA9IHRlbXBsYXRlc0Zyb21Bc3NldE1hbmlmZXN0QXJ0aWZhY3QoYXJ0aWZhY3QpO1xuICAgIGZvciAoY29uc3QgZW50cnkgb2YgZmlsZV9lbnRyaWVzKSB7XG4gICAgICBhd2FpdCBkZXBsb3ltZW50cy5idWlsZFNpbmdsZUFzc2V0KGFydGlmYWN0LCBhc3NldE1hbmlmZXN0LCBlbnRyeSwge1xuICAgICAgICBzdGFjayxcbiAgICAgIH0pO1xuICAgICAgYXdhaXQgZGVwbG95bWVudHMucHVibGlzaFNpbmdsZUFzc2V0KGFzc2V0TWFuaWZlc3QsIGVudHJ5LCB7XG4gICAgICAgIHN0YWNrLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjcmVhdGVDaGFuZ2VTZXQoXG4gIGlvSGVscGVyOiBJb0hlbHBlcixcbiAgb3B0aW9uczogQ3JlYXRlQ2hhbmdlU2V0T3B0aW9ucyxcbik6IFByb21pc2U8RGVzY3JpYmVDaGFuZ2VTZXRDb21tYW5kT3V0cHV0PiB7XG4gIGF3YWl0IGNsZWFudXBPbGRDaGFuZ2VzZXQob3B0aW9ucy5jZm4sIGlvSGVscGVyLCBvcHRpb25zLmNoYW5nZVNldE5hbWUsIG9wdGlvbnMuc3RhY2suc3RhY2tOYW1lKTtcblxuICBhd2FpdCBpb0hlbHBlci5ub3RpZnkoZGVidWcoYEF0dGVtcHRpbmcgdG8gY3JlYXRlIENoYW5nZVNldCB3aXRoIG5hbWUgJHtvcHRpb25zLmNoYW5nZVNldE5hbWV9IGZvciBzdGFjayAke29wdGlvbnMuc3RhY2suc3RhY2tOYW1lfWApKTtcblxuICBjb25zdCB0ZW1wbGF0ZVBhcmFtcyA9IFRlbXBsYXRlUGFyYW1ldGVycy5mcm9tVGVtcGxhdGUob3B0aW9ucy5zdGFjay50ZW1wbGF0ZSk7XG4gIGNvbnN0IHN0YWNrUGFyYW1zID0gdGVtcGxhdGVQYXJhbXMuc3VwcGx5QWxsKG9wdGlvbnMucGFyYW1ldGVycyk7XG5cbiAgY29uc3QgY2hhbmdlU2V0ID0gYXdhaXQgb3B0aW9ucy5jZm4uY3JlYXRlQ2hhbmdlU2V0KHtcbiAgICBTdGFja05hbWU6IG9wdGlvbnMuc3RhY2suc3RhY2tOYW1lLFxuICAgIENoYW5nZVNldE5hbWU6IG9wdGlvbnMuY2hhbmdlU2V0TmFtZSxcbiAgICBDaGFuZ2VTZXRUeXBlOiBvcHRpb25zLnJlc291cmNlc1RvSW1wb3J0ID8gJ0lNUE9SVCcgOiBvcHRpb25zLmV4aXN0cyA/ICdVUERBVEUnIDogJ0NSRUFURScsXG4gICAgRGVzY3JpcHRpb246IGBDREsgQ2hhbmdlc2V0IGZvciBkaWZmICR7b3B0aW9ucy51dWlkfWAsXG4gICAgQ2xpZW50VG9rZW46IGBkaWZmJHtvcHRpb25zLnV1aWR9YCxcbiAgICBUZW1wbGF0ZVVSTDogb3B0aW9ucy5ib2R5UGFyYW1ldGVyLlRlbXBsYXRlVVJMLFxuICAgIFRlbXBsYXRlQm9keTogb3B0aW9ucy5ib2R5UGFyYW1ldGVyLlRlbXBsYXRlQm9keSxcbiAgICBQYXJhbWV0ZXJzOiBzdGFja1BhcmFtcy5hcGlQYXJhbWV0ZXJzLFxuICAgIFJlc291cmNlc1RvSW1wb3J0OiBvcHRpb25zLnJlc291cmNlc1RvSW1wb3J0LFxuICAgIFJvbGVBUk46IG9wdGlvbnMucm9sZSxcbiAgICBUYWdzOiB0b0NmblRhZ3Mob3B0aW9ucy5zdGFjay50YWdzKSxcbiAgICBDYXBhYmlsaXRpZXM6IFsnQ0FQQUJJTElUWV9JQU0nLCAnQ0FQQUJJTElUWV9OQU1FRF9JQU0nLCAnQ0FQQUJJTElUWV9BVVRPX0VYUEFORCddLFxuICB9KTtcblxuICBhd2FpdCBpb0hlbHBlci5ub3RpZnkoZGVidWcoZm9ybWF0KCdJbml0aWF0ZWQgY3JlYXRpb24gb2YgY2hhbmdlc2V0OiAlczsgd2FpdGluZyBmb3IgaXQgdG8gZmluaXNoIGNyZWF0aW5nLi4uJywgY2hhbmdlU2V0LklkKSkpO1xuICAvLyBGZXRjaGluZyBhbGwgcGFnZXMgaWYgd2UnbGwgZXhlY3V0ZSwgc28gd2UgY2FuIGhhdmUgdGhlIGNvcnJlY3QgY2hhbmdlIGNvdW50IHdoZW4gbW9uaXRvcmluZy5cbiAgY29uc3QgY3JlYXRlZENoYW5nZVNldCA9IGF3YWl0IHdhaXRGb3JDaGFuZ2VTZXQob3B0aW9ucy5jZm4sIGlvSGVscGVyLCBvcHRpb25zLnN0YWNrLnN0YWNrTmFtZSwgb3B0aW9ucy5jaGFuZ2VTZXROYW1lLCB7XG4gICAgZmV0Y2hBbGw6IG9wdGlvbnMud2lsbEV4ZWN1dGUsXG4gIH0pO1xuICBhd2FpdCBjbGVhbnVwT2xkQ2hhbmdlc2V0KG9wdGlvbnMuY2ZuLCBpb0hlbHBlciwgb3B0aW9ucy5jaGFuZ2VTZXROYW1lLCBvcHRpb25zLnN0YWNrLnN0YWNrTmFtZSk7XG5cbiAgcmV0dXJuIGNyZWF0ZWRDaGFuZ2VTZXQ7XG59XG5cbmZ1bmN0aW9uIHRvQ2ZuVGFncyh0YWdzOiB7IFtpZDogc3RyaW5nXTogc3RyaW5nIH0pOiBUYWdbXSB7XG4gIHJldHVybiBPYmplY3QuZW50cmllcyh0YWdzKS5tYXAoKFtrLCB2XSkgPT4gKHtcbiAgICBLZXk6IGssXG4gICAgVmFsdWU6IHYsXG4gIH0pKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gY2xlYW51cE9sZENoYW5nZXNldChcbiAgY2ZuOiBJQ2xvdWRGb3JtYXRpb25DbGllbnQsXG4gIGlvSGVscGVyOiBJb0hlbHBlcixcbiAgY2hhbmdlU2V0TmFtZTogc3RyaW5nLFxuICBzdGFja05hbWU6IHN0cmluZyxcbikge1xuICAvLyBEZWxldGUgYW55IGV4aXN0aW5nIGNoYW5nZSBzZXRzIGdlbmVyYXRlZCBieSBDREsgc2luY2UgY2hhbmdlIHNldCBuYW1lcyBtdXN0IGJlIHVuaXF1ZS5cbiAgLy8gVGhlIGRlbGV0ZSByZXF1ZXN0IGlzIHN1Y2Nlc3NmdWwgYXMgbG9uZyBhcyB0aGUgc3RhY2sgZXhpc3RzIChldmVuIGlmIHRoZSBjaGFuZ2Ugc2V0IGRvZXMgbm90IGV4aXN0KS5cbiAgYXdhaXQgaW9IZWxwZXIubm90aWZ5KGRlYnVnKGBSZW1vdmluZyBleGlzdGluZyBjaGFuZ2Ugc2V0IHdpdGggbmFtZSAke2NoYW5nZVNldE5hbWV9IGlmIGl0IGV4aXN0c2ApKTtcbiAgYXdhaXQgY2ZuLmRlbGV0ZUNoYW5nZVNldCh7XG4gICAgU3RhY2tOYW1lOiBzdGFja05hbWUsXG4gICAgQ2hhbmdlU2V0TmFtZTogY2hhbmdlU2V0TmFtZSxcbiAgfSk7XG59XG5cbi8qKlxuICogUmV0dXJuIHRydWUgaWYgdGhlIGdpdmVuIGNoYW5nZSBzZXQgaGFzIG5vIGNoYW5nZXNcbiAqXG4gKiBUaGlzIG11c3QgYmUgZGV0ZXJtaW5lZCBmcm9tIHRoZSBzdGF0dXMsIG5vdCB0aGUgJ0NoYW5nZXMnIGFycmF5IG9uIHRoZVxuICogb2JqZWN0OyB0aGUgbGF0dGVyIGNhbiBiZSBlbXB0eSBiZWNhdXNlIG5vIHJlc291cmNlcyB3ZXJlIGNoYW5nZWQsIGJ1dCBpZlxuICogdGhlcmUgYXJlIGNoYW5nZXMgdG8gT3V0cHV0cywgdGhlIGNoYW5nZSBzZXQgY2FuIHN0aWxsIGJlIGV4ZWN1dGVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY2hhbmdlU2V0SGFzTm9DaGFuZ2VzKGRlc2NyaXB0aW9uOiBEZXNjcmliZUNoYW5nZVNldENvbW1hbmRPdXRwdXQpIHtcbiAgY29uc3Qgbm9DaGFuZ2VFcnJvclByZWZpeGVzID0gW1xuICAgIC8vIEVycm9yIG1lc3NhZ2UgZm9yIGEgcmVndWxhciB0ZW1wbGF0ZVxuICAgIFwiVGhlIHN1Ym1pdHRlZCBpbmZvcm1hdGlvbiBkaWRuJ3QgY29udGFpbiBjaGFuZ2VzLlwiLFxuICAgIC8vIEVycm9yIG1lc3NhZ2Ugd2hlbiBhIFRyYW5zZm9ybSBpcyBpbnZvbHZlZCAoc2VlICMxMDY1MClcbiAgICAnTm8gdXBkYXRlcyBhcmUgdG8gYmUgcGVyZm9ybWVkLicsXG4gIF07XG5cbiAgcmV0dXJuIChcbiAgICBkZXNjcmlwdGlvbi5TdGF0dXMgPT09ICdGQUlMRUQnICYmIG5vQ2hhbmdlRXJyb3JQcmVmaXhlcy5zb21lKChwKSA9PiAoZGVzY3JpcHRpb24uU3RhdHVzUmVhc29uID8/ICcnKS5zdGFydHNXaXRoKHApKVxuICApO1xufVxuXG4vKipcbiAqIFdhaXRzIGZvciBhIENsb3VkRm9ybWF0aW9uIHN0YWNrIHRvIHN0YWJpbGl6ZSBpbiBhIGNvbXBsZXRlL2F2YWlsYWJsZSBzdGF0ZVxuICogYWZ0ZXIgYSBkZWxldGUgb3BlcmF0aW9uIGlzIGlzc3VlZC5cbiAqXG4gKiBGYWlscyBpZiB0aGUgc3RhY2sgaXMgaW4gYSBGQUlMRUQgc3RhdGUuIFdpbGwgbm90IGZhaWwgaWYgdGhlIHN0YWNrIHdhc1xuICogYWxyZWFkeSBkZWxldGVkLlxuICpcbiAqIEBwYXJhbSBjZm4gICAgICAgIGEgQ2xvdWRGb3JtYXRpb24gY2xpZW50XG4gKiBAcGFyYW0gc3RhY2tOYW1lICAgICAgdGhlIG5hbWUgb2YgdGhlIHN0YWNrIHRvIHdhaXQgZm9yIGFmdGVyIGEgZGVsZXRlXG4gKlxuICogQHJldHVybnMgICAgIHRoZSBDbG91ZEZvcm1hdGlvbiBkZXNjcmlwdGlvbiBvZiB0aGUgc3RhYmlsaXplZCBzdGFjayBhZnRlciB0aGUgZGVsZXRlIGF0dGVtcHRcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHdhaXRGb3JTdGFja0RlbGV0ZShcbiAgY2ZuOiBJQ2xvdWRGb3JtYXRpb25DbGllbnQsXG4gIGlvSGVscGVyOiBJb0hlbHBlcixcbiAgc3RhY2tOYW1lOiBzdHJpbmcsXG4pOiBQcm9taXNlPENsb3VkRm9ybWF0aW9uU3RhY2sgfCB1bmRlZmluZWQ+IHtcbiAgY29uc3Qgc3RhY2sgPSBhd2FpdCBzdGFiaWxpemVTdGFjayhjZm4sIGlvSGVscGVyLCBzdGFja05hbWUpO1xuICBpZiAoIXN0YWNrKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGNvbnN0IHN0YXR1cyA9IHN0YWNrLnN0YWNrU3RhdHVzO1xuICBpZiAoc3RhdHVzLmlzRmFpbHVyZSkge1xuICAgIHRocm93IG5ldyBUb29sa2l0RXJyb3IoXG4gICAgICBgVGhlIHN0YWNrIG5hbWVkICR7c3RhY2tOYW1lfSBpcyBpbiBhIGZhaWxlZCBzdGF0ZS4gWW91IG1heSBuZWVkIHRvIGRlbGV0ZSBpdCBmcm9tIHRoZSBBV1MgY29uc29sZSA6ICR7c3RhdHVzfWAsXG4gICAgKTtcbiAgfSBlbHNlIGlmIChzdGF0dXMuaXNEZWxldGVkKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICByZXR1cm4gc3RhY2s7XG59XG5cbi8qKlxuICogV2FpdHMgZm9yIGEgQ2xvdWRGb3JtYXRpb24gc3RhY2sgdG8gc3RhYmlsaXplIGluIGEgY29tcGxldGUvYXZhaWxhYmxlIHN0YXRlXG4gKiBhZnRlciBhbiB1cGRhdGUvY3JlYXRlIG9wZXJhdGlvbiBpcyBpc3N1ZWQuXG4gKlxuICogRmFpbHMgaWYgdGhlIHN0YWNrIGlzIGluIGEgRkFJTEVEIHN0YXRlLCBST0xMQkFDSyBzdGF0ZSwgb3IgREVMRVRFRCBzdGF0ZS5cbiAqXG4gKiBAcGFyYW0gY2ZuICAgICAgICBhIENsb3VkRm9ybWF0aW9uIGNsaWVudFxuICogQHBhcmFtIHN0YWNrTmFtZSAgICAgIHRoZSBuYW1lIG9mIHRoZSBzdGFjayB0byB3YWl0IGZvciBhZnRlciBhbiB1cGRhdGVcbiAqXG4gKiBAcmV0dXJucyAgICAgdGhlIENsb3VkRm9ybWF0aW9uIGRlc2NyaXB0aW9uIG9mIHRoZSBzdGFiaWxpemVkIHN0YWNrIGFmdGVyIHRoZSB1cGRhdGUgYXR0ZW1wdFxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gd2FpdEZvclN0YWNrRGVwbG95KFxuICBjZm46IElDbG91ZEZvcm1hdGlvbkNsaWVudCxcbiAgaW9IZWxwZXI6IElvSGVscGVyLFxuICBzdGFja05hbWU6IHN0cmluZyxcbik6IFByb21pc2U8Q2xvdWRGb3JtYXRpb25TdGFjayB8IHVuZGVmaW5lZD4ge1xuICBjb25zdCBzdGFjayA9IGF3YWl0IHN0YWJpbGl6ZVN0YWNrKGNmbiwgaW9IZWxwZXIsIHN0YWNrTmFtZSk7XG4gIGlmICghc3RhY2spIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgY29uc3Qgc3RhdHVzID0gc3RhY2suc3RhY2tTdGF0dXM7XG5cbiAgaWYgKHN0YXR1cy5pc0NyZWF0aW9uRmFpbHVyZSkge1xuICAgIHRocm93IG5ldyBUb29sa2l0RXJyb3IoXG4gICAgICBgVGhlIHN0YWNrIG5hbWVkICR7c3RhY2tOYW1lfSBmYWlsZWQgY3JlYXRpb24sIGl0IG1heSBuZWVkIHRvIGJlIG1hbnVhbGx5IGRlbGV0ZWQgZnJvbSB0aGUgQVdTIGNvbnNvbGU6ICR7c3RhdHVzfWAsXG4gICAgKTtcbiAgfSBlbHNlIGlmICghc3RhdHVzLmlzRGVwbG95U3VjY2Vzcykge1xuICAgIHRocm93IG5ldyBUb29sa2l0RXJyb3IoYFRoZSBzdGFjayBuYW1lZCAke3N0YWNrTmFtZX0gZmFpbGVkIHRvIGRlcGxveTogJHtzdGF0dXN9YCk7XG4gIH1cblxuICByZXR1cm4gc3RhY2s7XG59XG5cbi8qKlxuICogV2FpdCBmb3IgYSBzdGFjayB0byBiZWNvbWUgc3RhYmxlIChubyBsb25nZXIgX0lOX1BST0dSRVNTKSwgcmV0dXJuaW5nIGl0XG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzdGFiaWxpemVTdGFjayhcbiAgY2ZuOiBJQ2xvdWRGb3JtYXRpb25DbGllbnQsXG4gIGlvSGVscGVyOiBJb0hlbHBlcixcbiAgc3RhY2tOYW1lOiBzdHJpbmcsXG4pIHtcbiAgYXdhaXQgaW9IZWxwZXIubm90aWZ5KGRlYnVnKGZvcm1hdCgnV2FpdGluZyBmb3Igc3RhY2sgJXMgdG8gZmluaXNoIGNyZWF0aW5nIG9yIHVwZGF0aW5nLi4uJywgc3RhY2tOYW1lKSkpO1xuICByZXR1cm4gd2FpdEZvcihhc3luYyAoKSA9PiB7XG4gICAgY29uc3Qgc3RhY2sgPSBhd2FpdCBDbG91ZEZvcm1hdGlvblN0YWNrLmxvb2t1cChjZm4sIHN0YWNrTmFtZSk7XG4gICAgaWYgKCFzdGFjay5leGlzdHMpIHtcbiAgICAgIGF3YWl0IGlvSGVscGVyLm5vdGlmeShkZWJ1Zyhmb3JtYXQoJ1N0YWNrICVzIGRvZXMgbm90IGV4aXN0Jywgc3RhY2tOYW1lKSkpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGNvbnN0IHN0YXR1cyA9IHN0YWNrLnN0YWNrU3RhdHVzO1xuICAgIGlmIChzdGF0dXMuaXNJblByb2dyZXNzKSB7XG4gICAgICBhd2FpdCBpb0hlbHBlci5ub3RpZnkoZGVidWcoZm9ybWF0KCdTdGFjayAlcyBoYXMgYW4gb25nb2luZyBvcGVyYXRpb24gaW4gcHJvZ3Jlc3MgYW5kIGlzIG5vdCBzdGFibGUgKCVzKScsIHN0YWNrTmFtZSwgc3RhdHVzKSkpO1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9IGVsc2UgaWYgKHN0YXR1cy5pc1Jldmlld0luUHJvZ3Jlc3MpIHtcbiAgICAgIC8vIFRoaXMgbWF5IGhhcHBlbiBpZiBhIHN0YWNrIGNyZWF0aW9uIG9wZXJhdGlvbiBpcyBpbnRlcnJ1cHRlZCBiZWZvcmUgdGhlIENoYW5nZVNldCBleGVjdXRpb24gc3RhcnRzLiBSZWNvdmVyaW5nXG4gICAgICAvLyBmcm9tIHRoaXMgd291bGQgcmVxdWlyaW5nIG1hbnVhbCBpbnRlcnZlbnRpb24gKGRlbGV0aW5nIG9yIGV4ZWN1dGluZyB0aGUgcGVuZGluZyBDaGFuZ2VTZXQpLCBhbmQgZmFpbGluZyB0byBkb1xuICAgICAgLy8gc28gd2lsbCByZXN1bHQgaW4gYW4gZW5kbGVzcyB3YWl0IGhlcmUgKHRoZSBDaGFuZ2VTZXQgd29udCBkZWxldGUgb3IgZXhlY3V0ZSBpdHNlbGYpLiBJbnN0ZWFkIG9mIGJsb2NraW5nXG4gICAgICAvLyBcImZvcmV2ZXJcIiB3ZSBwcm9jZWVkIGFzIGlmIHRoZSBzdGFjayB3YXMgZXhpc3RpbmcgYW5kIHN0YWJsZS4gSWYgdGhlcmUgaXMgYSBjb25jdXJyZW50IG9wZXJhdGlvbiB0aGF0IGp1c3RcbiAgICAgIC8vIGhhc24ndCBmaW5pc2hlZCBwcm9jZWVkaW5nIGp1c3QgeWV0LCBlaXRoZXIgdGhpcyBvcGVyYXRpb24gb3IgdGhlIGNvbmN1cnJlbnQgb25lIG1heSBmYWlsIGR1ZSB0byB0aGUgb3RoZXIgb25lXG4gICAgICAvLyBoYXZpbmcgbWFkZSBwcm9ncmVzcy4gV2hpY2ggaXMgZmluZS4gSSBndWVzcy5cbiAgICAgIGF3YWl0IGlvSGVscGVyLm5vdGlmeShkZWJ1Zyhmb3JtYXQoJ1N0YWNrICVzIGlzIGluIFJFVklFV19JTl9QUk9HUkVTUyBzdGF0ZS4gQ29uc2lkZXJpbmcgdGhpcyBpcyBhIHN0YWJsZSBzdGF0dXMgKCVzKScsIHN0YWNrTmFtZSwgc3RhdHVzKSkpO1xuICAgIH1cblxuICAgIHJldHVybiBzdGFjaztcbiAgfSk7XG59XG5cbi8qKlxuICogVGhlIHNldCBvZiAoZm9ybWFsKSBwYXJhbWV0ZXJzIHRoYXQgaGF2ZSBiZWVuIGRlY2xhcmVkIGluIGEgdGVtcGxhdGVcbiAqL1xuZXhwb3J0IGNsYXNzIFRlbXBsYXRlUGFyYW1ldGVycyB7XG4gIHB1YmxpYyBzdGF0aWMgZnJvbVRlbXBsYXRlKHRlbXBsYXRlOiBUZW1wbGF0ZSkge1xuICAgIHJldHVybiBuZXcgVGVtcGxhdGVQYXJhbWV0ZXJzKHRlbXBsYXRlLlBhcmFtZXRlcnMgfHwge30pO1xuICB9XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBwYXJhbXM6IFJlY29yZDxzdHJpbmcsIFRlbXBsYXRlUGFyYW1ldGVyPikge1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZSBzdGFjayBwYXJhbWV0ZXJzIHRvIHBhc3MgZnJvbSB0aGUgZ2l2ZW4gZGVzaXJlZCBwYXJhbWV0ZXIgdmFsdWVzXG4gICAqXG4gICAqIFdpbGwgdGhyb3cgaWYgcGFyYW1ldGVycyB3aXRob3V0IGEgRGVmYXVsdCB2YWx1ZSBvciBhIFByZXZpb3VzIHZhbHVlIGFyZSBub3RcbiAgICogc3VwcGxpZWQuXG4gICAqL1xuICBwdWJsaWMgc3VwcGx5QWxsKHVwZGF0ZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IHVuZGVmaW5lZD4pOiBQYXJhbWV0ZXJWYWx1ZXMge1xuICAgIHJldHVybiBuZXcgUGFyYW1ldGVyVmFsdWVzKHRoaXMucGFyYW1zLCB1cGRhdGVzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGcm9tIHRoZSB0ZW1wbGF0ZSwgdGhlIGdpdmVuIGRlc2lyZWQgdmFsdWVzIGFuZCB0aGUgY3VycmVudCB2YWx1ZXMsIGNhbGN1bGF0ZSB0aGUgY2hhbmdlcyB0byB0aGUgc3RhY2sgcGFyYW1ldGVyc1xuICAgKlxuICAgKiBXaWxsIHRha2UgaW50byBhY2NvdW50IHBhcmFtZXRlcnMgYWxyZWFkeSBzZXQgb24gdGhlIHRlbXBsYXRlICh3aWxsIGVtaXRcbiAgICogJ1VzZVByZXZpb3VzVmFsdWU6IHRydWUnIGZvciB0aG9zZSB1bmxlc3MgdGhlIHZhbHVlIGlzIGNoYW5nZWQpLCBhbmQgd2lsbFxuICAgKiB0aHJvdyBpZiBwYXJhbWV0ZXJzIHdpdGhvdXQgYSBEZWZhdWx0IHZhbHVlIG9yIGEgUHJldmlvdXMgdmFsdWUgYXJlIG5vdFxuICAgKiBzdXBwbGllZC5cbiAgICovXG4gIHB1YmxpYyB1cGRhdGVFeGlzdGluZyhcbiAgICB1cGRhdGVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCB1bmRlZmluZWQ+LFxuICAgIHByZXZpb3VzVmFsdWVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+LFxuICApOiBQYXJhbWV0ZXJWYWx1ZXMge1xuICAgIHJldHVybiBuZXcgUGFyYW1ldGVyVmFsdWVzKHRoaXMucGFyYW1zLCB1cGRhdGVzLCBwcmV2aW91c1ZhbHVlcyk7XG4gIH1cbn1cblxuLyoqXG4gKiBUaGUgc2V0IG9mIHBhcmFtZXRlcnMgd2UncmUgZ29pbmcgdG8gcGFzcyB0byBhIFN0YWNrXG4gKi9cbmV4cG9ydCBjbGFzcyBQYXJhbWV0ZXJWYWx1ZXMge1xuICBwdWJsaWMgcmVhZG9ubHkgdmFsdWVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG4gIHB1YmxpYyByZWFkb25seSBhcGlQYXJhbWV0ZXJzOiBQYXJhbWV0ZXJbXSA9IFtdO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgZm9ybWFsUGFyYW1zOiBSZWNvcmQ8c3RyaW5nLCBUZW1wbGF0ZVBhcmFtZXRlcj4sXG4gICAgdXBkYXRlczogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgdW5kZWZpbmVkPixcbiAgICBwcmV2aW91c1ZhbHVlczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9LFxuICApIHtcbiAgICBjb25zdCBtaXNzaW5nUmVxdWlyZWQgPSBuZXcgQXJyYXk8c3RyaW5nPigpO1xuXG4gICAgZm9yIChjb25zdCBba2V5LCBmb3JtYWxQYXJhbV0gb2YgT2JqZWN0LmVudHJpZXModGhpcy5mb3JtYWxQYXJhbXMpKSB7XG4gICAgICAvLyBDaGVjayB1cGRhdGVzIGZpcnN0LCB0aGVuIHVzZSB0aGUgcHJldmlvdXMgdmFsdWUgKGlmIGF2YWlsYWJsZSksIHRoZW4gdXNlXG4gICAgICAvLyB0aGUgZGVmYXVsdCAoaWYgYXZhaWxhYmxlKS5cbiAgICAgIC8vXG4gICAgICAvLyBJZiB3ZSBkb24ndCBmaW5kIGEgcGFyYW1ldGVyIHZhbHVlIHVzaW5nIGFueSBvZiB0aGVzZSBtZXRob2RzLCB0aGVuIHRoYXQncyBhbiBlcnJvci5cbiAgICAgIGNvbnN0IHVwZGF0ZWRWYWx1ZSA9IHVwZGF0ZXNba2V5XTtcbiAgICAgIGlmICh1cGRhdGVkVmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLnZhbHVlc1trZXldID0gdXBkYXRlZFZhbHVlO1xuICAgICAgICB0aGlzLmFwaVBhcmFtZXRlcnMucHVzaCh7XG4gICAgICAgICAgUGFyYW1ldGVyS2V5OiBrZXksXG4gICAgICAgICAgUGFyYW1ldGVyVmFsdWU6IHVwZGF0ZXNba2V5XSxcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAoa2V5IGluIHByZXZpb3VzVmFsdWVzKSB7XG4gICAgICAgIHRoaXMudmFsdWVzW2tleV0gPSBwcmV2aW91c1ZhbHVlc1trZXldO1xuICAgICAgICB0aGlzLmFwaVBhcmFtZXRlcnMucHVzaCh7IFBhcmFtZXRlcktleToga2V5LCBVc2VQcmV2aW91c1ZhbHVlOiB0cnVlIH0pO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGZvcm1hbFBhcmFtLkRlZmF1bHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLnZhbHVlc1trZXldID0gZm9ybWFsUGFyYW0uRGVmYXVsdDtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIC8vIE9oIG5vXG4gICAgICBtaXNzaW5nUmVxdWlyZWQucHVzaChrZXkpO1xuICAgIH1cblxuICAgIGlmIChtaXNzaW5nUmVxdWlyZWQubGVuZ3RoID4gMCkge1xuICAgICAgdGhyb3cgbmV3IFRvb2xraXRFcnJvcihgVGhlIGZvbGxvd2luZyBDbG91ZEZvcm1hdGlvbiBQYXJhbWV0ZXJzIGFyZSBtaXNzaW5nIGEgdmFsdWU6ICR7bWlzc2luZ1JlcXVpcmVkLmpvaW4oJywgJyl9YCk7XG4gICAgfVxuXG4gICAgLy8gSnVzdCBhcHBlbmQgYWxsIHN1cHBsaWVkIG92ZXJyaWRlcyB0aGF0IGFyZW4ndCByZWFsbHkgZXhwZWN0ZWQgKHRoaXNcbiAgICAvLyB3aWxsIGZhaWwgQ0ZOIGJ1dCBtYXliZSBwZW9wbGUgbWFkZSB0eXBvcyB0aGF0IHRoZXkgd2FudCB0byBiZSBub3RpZmllZFxuICAgIC8vIG9mKVxuICAgIGNvbnN0IHVua25vd25QYXJhbSA9IChba2V5LCBfXTogW3N0cmluZywgYW55XSkgPT4gdGhpcy5mb3JtYWxQYXJhbXNba2V5XSA9PT0gdW5kZWZpbmVkO1xuICAgIGNvbnN0IGhhc1ZhbHVlID0gKFtfLCB2YWx1ZV06IFtzdHJpbmcsIGFueV0pID0+ICEhdmFsdWU7XG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXModXBkYXRlcykuZmlsdGVyKHVua25vd25QYXJhbSkuZmlsdGVyKGhhc1ZhbHVlKSkge1xuICAgICAgdGhpcy52YWx1ZXNba2V5XSA9IHZhbHVlITtcbiAgICAgIHRoaXMuYXBpUGFyYW1ldGVycy5wdXNoKHsgUGFyYW1ldGVyS2V5OiBrZXksIFBhcmFtZXRlclZhbHVlOiB2YWx1ZSB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogV2hldGhlciB0aGlzIHNldCBvZiBwYXJhbWV0ZXIgdXBkYXRlcyB3aWxsIGNoYW5nZSB0aGUgYWN0dWFsIHN0YWNrIHZhbHVlc1xuICAgKi9cbiAgcHVibGljIGhhc0NoYW5nZXMoY3VycmVudFZhbHVlczogUmVjb3JkPHN0cmluZywgc3RyaW5nPik6IFBhcmFtZXRlckNoYW5nZXMge1xuICAgIC8vIElmIGFueSBvZiB0aGUgcGFyYW1ldGVycyBhcmUgU1NNIHBhcmFtZXRlcnMsIGRlcGxveWluZyBtdXN0IGFsd2F5cyBoYXBwZW5cbiAgICAvLyBiZWNhdXNlIHdlIGNhbid0IHByZWRpY3Qgd2hhdCB0aGUgdmFsdWVzIHdpbGwgYmUuIFdlIHdpbGwgYWxsb3cgc29tZVxuICAgIC8vIHBhcmFtZXRlcnMgdG8gb3B0IG91dCBvZiB0aGlzIGNoZWNrIGJ5IGhhdmluZyBhIG1hZ2ljIHN0cmluZyBpbiB0aGVpciBkZXNjcmlwdGlvbi5cbiAgICBpZiAoXG4gICAgICBPYmplY3QudmFsdWVzKHRoaXMuZm9ybWFsUGFyYW1zKS5zb21lKFxuICAgICAgICAocCkgPT4gcC5UeXBlLnN0YXJ0c1dpdGgoJ0FXUzo6U1NNOjpQYXJhbWV0ZXI6OicpICYmICFwLkRlc2NyaXB0aW9uPy5pbmNsdWRlcyhTU01QQVJBTV9OT19JTlZBTElEQVRFKSxcbiAgICAgIClcbiAgICApIHtcbiAgICAgIHJldHVybiAnc3NtJztcbiAgICB9XG5cbiAgICAvLyBPdGhlcndpc2Ugd2UncmUgZGlydHkgaWY6XG4gICAgLy8gLSBhbnkgb2YgdGhlIGV4aXN0aW5nIHZhbHVlcyBhcmUgcmVtb3ZlZCwgb3IgY2hhbmdlZFxuICAgIGlmIChPYmplY3QuZW50cmllcyhjdXJyZW50VmFsdWVzKS5zb21lKChba2V5LCB2YWx1ZV0pID0+ICEoa2V5IGluIHRoaXMudmFsdWVzKSB8fCB2YWx1ZSAhPT0gdGhpcy52YWx1ZXNba2V5XSkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIC8vIC0gYW55IG9mIHRoZSB2YWx1ZXMgd2UncmUgc2V0dGluZyBhcmUgbmV3XG4gICAgaWYgKE9iamVjdC5rZXlzKHRoaXMudmFsdWVzKS5zb21lKChrZXkpID0+ICEoa2V5IGluIGN1cnJlbnRWYWx1ZXMpKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbmV4cG9ydCB0eXBlIFBhcmFtZXRlckNoYW5nZXMgPSBib29sZWFuIHwgJ3NzbSc7XG4iXX0=
@@ -1,13 +1,13 @@
1
- import * as cxapi from '@aws-cdk/cx-api';
1
+ import type * as cxapi from '@aws-cdk/cx-api';
2
2
  import type { Tag } from '@aws-sdk/client-cloudformation';
3
- import { ResourcesToImport } from './cloudformation';
4
- import { DeploymentMethod } from './deployment-method';
5
- import { DeployStackResult } from './deployment-result';
6
- import { IoHelper } from '../../../../@aws-cdk/tmp-toolkit-helpers/src/api/io/private';
3
+ import type { ResourcesToImport } from './cloudformation';
4
+ import type { DeploymentMethod } from './deployment-method';
5
+ import type { DeployStackResult } from './deployment-result';
6
+ import { type IoHelper } from '../../../../@aws-cdk/tmp-toolkit-helpers/src/api/io/private';
7
7
  import type { SDK, SdkProvider } from '../aws-auth';
8
8
  import type { EnvironmentResources } from '../environment';
9
9
  import { HotswapMode, HotswapPropertyOverrides } from '../hotswap/common';
10
- import { StringWithoutPlaceholders } from '../util/placeholders';
10
+ import type { StringWithoutPlaceholders } from '../util/placeholders';
11
11
  export interface DeployStackOptions {
12
12
  /**
13
13
  * The stack to be deployed