projen 0.99.79 → 0.100.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 (220) hide show
  1. package/.jsii +1677 -3664
  2. package/BREAKING_CHANGES.md +855 -0
  3. package/lib/ai-instructions.d.ts +0 -1
  4. package/lib/ai-instructions.js +6 -12
  5. package/lib/awscdk/auto-discover.js +7 -14
  6. package/lib/awscdk/awscdk-app-java.d.ts +0 -7
  7. package/lib/awscdk/awscdk-app-java.js +28 -21
  8. package/lib/awscdk/awscdk-app-py.d.ts +0 -12
  9. package/lib/awscdk/awscdk-app-py.js +27 -24
  10. package/lib/awscdk/awscdk-app-ts.d.ts +0 -5
  11. package/lib/awscdk/awscdk-app-ts.js +57 -31
  12. package/lib/awscdk/awscdk-construct.d.ts +0 -26
  13. package/lib/awscdk/awscdk-construct.js +4 -44
  14. package/lib/awscdk/awscdk-deps-java.js +2 -6
  15. package/lib/awscdk/awscdk-deps-js.js +2 -7
  16. package/lib/awscdk/awscdk-deps-py.js +2 -7
  17. package/lib/awscdk/awscdk-deps.d.ts +1 -90
  18. package/lib/awscdk/awscdk-deps.js +68 -114
  19. package/lib/awscdk/cdk-config.d.ts +0 -21
  20. package/lib/awscdk/cdk-config.js +44 -51
  21. package/lib/awscdk/cdk-tasks.js +26 -4
  22. package/lib/awscdk/integration-test.js +10 -15
  23. package/lib/awscdk/internal.js +5 -2
  24. package/lib/awscdk/lambda-extension.js +4 -16
  25. package/lib/awscdk/lambda-function.d.ts +0 -10
  26. package/lib/awscdk/lambda-function.js +88 -78
  27. package/lib/awscdk/private/feature-flags-v2.const.d.ts +1 -1
  28. package/lib/awscdk/private/feature-flags-v2.const.js +2 -2
  29. package/lib/build/build-workflow.js +51 -6
  30. package/lib/builtin-example.task.d.ts +1 -0
  31. package/lib/builtin-example.task.js +2 -1
  32. package/lib/cdk/auto-discover-base.js +43 -8
  33. package/lib/cdk/construct-lib.js +2 -4
  34. package/lib/cdk/integration-test-base.js +26 -4
  35. package/lib/cdk/jsii-build.d.ts +0 -1
  36. package/lib/cdk/jsii-build.js +15 -7
  37. package/lib/cdk/jsii-docgen.js +2 -4
  38. package/lib/cdk/jsii-project.d.ts +12 -9
  39. package/lib/cdk/jsii-project.js +22 -7
  40. package/lib/cdk8s/auto-discover.js +3 -6
  41. package/lib/cdk8s/cdk8s-app-py.js +7 -4
  42. package/lib/cdk8s/cdk8s-app-ts.js +43 -6
  43. package/lib/cdk8s/cdk8s-construct.js +44 -5
  44. package/lib/cdk8s/cdk8s-deps-py.js +2 -4
  45. package/lib/cdk8s/cdk8s-deps.js +50 -5
  46. package/lib/cdk8s/integration-test.js +2 -4
  47. package/lib/cdktf/cdktf-construct.js +36 -5
  48. package/lib/circleci/circleci.js +66 -44
  49. package/lib/cleanup.js +38 -5
  50. package/lib/cli/cmds/new.js +51 -20
  51. package/lib/cli/cmds/run-task.js +107 -0
  52. package/lib/cli/{synth.d.ts → cmds/synth.d.ts} +0 -5
  53. package/lib/cli/cmds/synth.js +90 -0
  54. package/lib/cli/index.js +47 -22
  55. package/lib/cli/macros.js +35 -2
  56. package/lib/{task-runtime.d.ts → cli/task-runtime.d.ts} +13 -2
  57. package/lib/cli/task-runtime.js +411 -0
  58. package/lib/cli/util.js +37 -4
  59. package/lib/component.js +3 -4
  60. package/lib/dependencies.js +43 -12
  61. package/lib/dev-env.js +10 -4
  62. package/lib/docker-compose/docker-compose-service.js +54 -4
  63. package/lib/docker-compose/docker-compose.js +8 -4
  64. package/lib/file.js +60 -5
  65. package/lib/gitattributes.js +7 -5
  66. package/lib/github/actions-provider.js +3 -7
  67. package/lib/github/auto-approve.js +3 -4
  68. package/lib/github/auto-merge.js +3 -5
  69. package/lib/github/auto-queue.js +36 -5
  70. package/lib/github/dependabot.js +13 -4
  71. package/lib/github/dependency-review.js +2 -4
  72. package/lib/github/github-credentials.js +37 -5
  73. package/lib/github/github-project.d.ts +1 -32
  74. package/lib/github/github-project.js +30 -8
  75. package/lib/github/github.d.ts +0 -9
  76. package/lib/github/github.js +27 -14
  77. package/lib/github/index.js +24 -2
  78. package/lib/github/merge-queue.js +3 -4
  79. package/lib/github/mergify.d.ts +0 -7
  80. package/lib/github/mergify.js +6 -13
  81. package/lib/github/pr-template.js +2 -4
  82. package/lib/github/pull-request-backport.js +4 -4
  83. package/lib/github/pull-request-lint.js +4 -4
  84. package/lib/github/stale.js +2 -4
  85. package/lib/github/task-workflow-job.js +20 -4
  86. package/lib/github/task-workflow.js +4 -4
  87. package/lib/github/workflow-actions.d.ts +0 -8
  88. package/lib/github/workflow-actions.js +2 -14
  89. package/lib/github/workflow-jobs.js +2 -4
  90. package/lib/github/workflow-steps.js +2 -4
  91. package/lib/github/workflows-model.d.ts +0 -8
  92. package/lib/github/workflows-model.js +1 -1
  93. package/lib/github/workflows.js +39 -6
  94. package/lib/gitlab/configuration-model.d.ts +0 -4
  95. package/lib/gitlab/configuration-model.js +1 -1
  96. package/lib/gitlab/configuration.js +125 -41
  97. package/lib/gitlab/gitlab-configuration.js +3 -5
  98. package/lib/gitlab/nested-configuration.js +3 -4
  99. package/lib/gitpod.js +11 -7
  100. package/lib/ignore-file.js +5 -4
  101. package/lib/index.d.ts +1 -2
  102. package/lib/index.js +38 -18
  103. package/lib/ini.js +36 -5
  104. package/lib/inventory.d.ts +32 -23
  105. package/lib/inventory.js +37 -4
  106. package/lib/java/java-project.js +26 -4
  107. package/lib/java/junit.js +2 -4
  108. package/lib/java/maven-compile.js +2 -4
  109. package/lib/java/maven-packaging.js +6 -4
  110. package/lib/java/maven-sample.js +2 -4
  111. package/lib/java/pom.js +45 -12
  112. package/lib/java/projenrc.js +10 -4
  113. package/lib/javascript/biome/biome.js +48 -6
  114. package/lib/javascript/bundler.d.ts +0 -8
  115. package/lib/javascript/bundler.js +48 -11
  116. package/lib/javascript/eslint.d.ts +0 -13
  117. package/lib/javascript/eslint.js +38 -37
  118. package/lib/javascript/index.js +24 -2
  119. package/lib/javascript/jest.d.ts +0 -20
  120. package/lib/javascript/jest.js +71 -15
  121. package/lib/javascript/license-checker.js +3 -4
  122. package/lib/javascript/node-package.d.ts +0 -28
  123. package/lib/javascript/node-package.js +137 -38
  124. package/lib/javascript/node-project.d.ts +6 -76
  125. package/lib/javascript/node-project.js +90 -82
  126. package/lib/javascript/npm-config.js +7 -9
  127. package/lib/javascript/prettier.js +16 -4
  128. package/lib/javascript/projenrc.js +3 -4
  129. package/lib/javascript/render-options.d.ts +2 -2
  130. package/lib/javascript/render-options.js +36 -5
  131. package/lib/javascript/typescript-config.js +45 -8
  132. package/lib/javascript/upgrade-dependencies.js +56 -36
  133. package/lib/javascript/util.js +35 -2
  134. package/lib/javascript/yarnrc.d.ts +1 -28
  135. package/lib/javascript/yarnrc.js +3 -45
  136. package/lib/json-patch.js +3 -4
  137. package/lib/json.js +4 -5
  138. package/lib/license.js +37 -5
  139. package/lib/logger.js +14 -11
  140. package/lib/logging.js +10 -7
  141. package/lib/makefile.js +7 -4
  142. package/lib/object-file.js +19 -4
  143. package/lib/project-build.js +26 -4
  144. package/lib/project-tree.js +3 -4
  145. package/lib/project.d.ts +0 -35
  146. package/lib/project.js +105 -58
  147. package/lib/projects.js +37 -6
  148. package/lib/projenrc-json.d.ts +0 -10
  149. package/lib/projenrc-json.js +4 -13
  150. package/lib/projenrc.js +2 -4
  151. package/lib/python/index.js +24 -2
  152. package/lib/python/pip.js +5 -4
  153. package/lib/python/poetry.js +63 -7
  154. package/lib/python/projenrc.js +10 -4
  155. package/lib/python/pyproject-toml-file.js +2 -4
  156. package/lib/python/pytest-sample.js +2 -4
  157. package/lib/python/pytest.d.ts +0 -12
  158. package/lib/python/pytest.js +3 -5
  159. package/lib/python/python-project.js +33 -10
  160. package/lib/python/python-sample.js +2 -4
  161. package/lib/python/requirements-file.js +4 -5
  162. package/lib/python/setuppy.d.ts +0 -8
  163. package/lib/python/setuppy.js +3 -4
  164. package/lib/python/setuptools.js +8 -4
  165. package/lib/python/uv.js +11 -4
  166. package/lib/python/venv.js +45 -6
  167. package/lib/readme.js +2 -4
  168. package/lib/release/bump-version.js +36 -3
  169. package/lib/release/bump-version.task.js +35 -2
  170. package/lib/release/commit-tag-version.js +39 -3
  171. package/lib/release/publisher.d.ts +0 -49
  172. package/lib/release/publisher.js +24 -22
  173. package/lib/release/release-trigger.js +33 -4
  174. package/lib/release/release.d.ts +0 -24
  175. package/lib/release/release.js +66 -31
  176. package/lib/release/tag-version.js +35 -2
  177. package/lib/release/update-changelog.js +36 -3
  178. package/lib/renovatebot.js +14 -4
  179. package/lib/run-projenrc-json.task.js +35 -2
  180. package/lib/run-task.cjs +12567 -271
  181. package/lib/sample-file.js +43 -9
  182. package/lib/smithy/smithy-build.js +46 -1
  183. package/lib/source-code.js +6 -5
  184. package/lib/task-runner.d.ts +25 -0
  185. package/lib/task-runner.js +92 -0
  186. package/lib/task.d.ts +0 -7
  187. package/lib/task.js +13 -13
  188. package/lib/tasks.d.ts +5 -9
  189. package/lib/tasks.js +64 -23
  190. package/lib/testing.js +2 -4
  191. package/lib/textfile.js +3 -4
  192. package/lib/toml.js +36 -5
  193. package/lib/typescript/projenrc-ts.js +8 -4
  194. package/lib/typescript/projenrc.js +6 -4
  195. package/lib/typescript/typescript-typedoc.js +2 -4
  196. package/lib/typescript/typescript.d.ts +0 -10
  197. package/lib/typescript/typescript.js +75 -29
  198. package/lib/util/synth.js +39 -6
  199. package/lib/util.js +38 -5
  200. package/lib/version.d.ts +0 -4
  201. package/lib/version.js +24 -10
  202. package/lib/vscode/devcontainer.js +11 -4
  203. package/lib/vscode/extensions.js +17 -18
  204. package/lib/vscode/launch-config.js +5 -6
  205. package/lib/vscode/settings.js +4 -4
  206. package/lib/vscode/vscode.js +5 -4
  207. package/lib/web/next.js +38 -8
  208. package/lib/web/postcss.js +5 -4
  209. package/lib/web/react.d.ts +0 -14
  210. package/lib/web/react.js +51 -25
  211. package/lib/web/tailwind.js +4 -4
  212. package/lib/xmlfile.js +2 -4
  213. package/lib/yaml.js +40 -5
  214. package/package.json +9 -10
  215. package/lib/cli/synth.js +0 -105
  216. package/lib/cli/tasks.js +0 -71
  217. package/lib/semver.d.ts +0 -34
  218. package/lib/semver.js +0 -56
  219. package/lib/task-runtime.js +0 -317
  220. /package/lib/cli/{tasks.d.ts → cmds/run-task.d.ts} +0 -0
@@ -1,5 +1,4 @@
1
1
  "use strict";
2
- var _a;
3
2
  Object.defineProperty(exports, "__esModule", { value: true });
4
3
  exports.isObjectContainingFieldExactly = exports.Circleci = void 0;
5
4
  const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
@@ -13,48 +12,33 @@ const yaml_1 = require("../yaml");
13
12
  * @see https://circleci.com/docs/2.0/configuration-reference/
14
13
  */
15
14
  class Circleci extends component_1.Component {
15
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.circleci.Circleci", version: "0.100.0" };
16
+ /**
17
+ * The yaml file for the Circleci pipeline
18
+ * */
19
+ file;
20
+ /**
21
+ * internal copy of options to share options between functions
22
+ * @private
23
+ */
24
+ options;
25
+ /**
26
+ * internal map of orbs
27
+ * @private
28
+ */
29
+ orbs;
30
+ /**
31
+ * internal list of workflows
32
+ * @private
33
+ */
34
+ workflows;
35
+ /**
36
+ * internal list of jobs
37
+ * @private
38
+ */
39
+ jobs;
16
40
  constructor(project, options = {}) {
17
41
  super(project);
18
- /**
19
- * reduce objects with `identifier` field for WorkflowJobs.
20
- * A workflow job can contain `orbParameter` which are passed to orbs.
21
- * This map is directly added as `Record<string,any>` to job.
22
- * So we gonna add those after the default field of WorkflowJob.
23
- * @see https://circleci.com/developer/orbs/orb/circleci/node#usage-install_nodejs
24
- * @param jobs
25
- */
26
- this.renderJobs = (jobs = []) => {
27
- let result = [];
28
- for (const job of jobs ?? []) {
29
- const { identifier, orbParameters, ...reduced } = job;
30
- if ((0, exports.isObjectContainingFieldExactly)(job, "identifier")) {
31
- result = [...result, identifier];
32
- }
33
- else {
34
- result = [
35
- ...result,
36
- { [identifier]: { ...reduced, ...orbParameters } },
37
- ];
38
- }
39
- }
40
- return result;
41
- };
42
- /**
43
- * Snake case for listed keys. There are too many exceptions needed to do it recursive without a whitelist.
44
- * This list needs to be updated once we add field with snake case like `aws_auth`.
45
- * @param input
46
- */
47
- this.snakeCase = (input) => {
48
- const snakeCaseKeyWords = [
49
- "awsAuth",
50
- "workingDirectory",
51
- "resourceClass",
52
- "dockerLayerCaching",
53
- "noOutputTimeout",
54
- "circleciIpRanges",
55
- ];
56
- return (0, util_1.snakeCaseKeys)(input, true, snakeCaseKeyWords);
57
- };
58
42
  this.options = options;
59
43
  this.orbs = options.orbs ?? {};
60
44
  this.workflows = options.workflows ?? [];
@@ -98,6 +82,30 @@ class Circleci extends component_1.Component {
98
82
  addWorkflow(workflow) {
99
83
  this.workflows = [...this.workflows, workflow];
100
84
  }
85
+ /**
86
+ * reduce objects with `identifier` field for WorkflowJobs.
87
+ * A workflow job can contain `orbParameter` which are passed to orbs.
88
+ * This map is directly added as `Record<string,any>` to job.
89
+ * So we gonna add those after the default field of WorkflowJob.
90
+ * @see https://circleci.com/developer/orbs/orb/circleci/node#usage-install_nodejs
91
+ * @param jobs
92
+ */
93
+ renderJobs = (jobs = []) => {
94
+ let result = [];
95
+ for (const job of jobs ?? []) {
96
+ const { identifier, orbParameters, ...reduced } = job;
97
+ if ((0, exports.isObjectContainingFieldExactly)(job, "identifier")) {
98
+ result = [...result, identifier];
99
+ }
100
+ else {
101
+ result = [
102
+ ...result,
103
+ { [identifier]: { ...reduced, ...orbParameters } },
104
+ ];
105
+ }
106
+ }
107
+ return result;
108
+ };
101
109
  /**
102
110
  * Add a Circleci Orb to pipeline. Will throw error if the orb already exists
103
111
  * @param name
@@ -109,12 +117,26 @@ class Circleci extends component_1.Component {
109
117
  }
110
118
  this.orbs[name] = orb;
111
119
  }
120
+ /**
121
+ * Snake case for listed keys. There are too many exceptions needed to do it recursive without a whitelist.
122
+ * This list needs to be updated once we add field with snake case like `aws_auth`.
123
+ * @param input
124
+ */
125
+ snakeCase = (input) => {
126
+ const snakeCaseKeyWords = [
127
+ "awsAuth",
128
+ "workingDirectory",
129
+ "resourceClass",
130
+ "dockerLayerCaching",
131
+ "noOutputTimeout",
132
+ "circleciIpRanges",
133
+ ];
134
+ return (0, util_1.snakeCaseKeys)(input, true, snakeCaseKeyWords);
135
+ };
112
136
  }
113
137
  exports.Circleci = Circleci;
114
- _a = JSII_RTTI_SYMBOL_1;
115
- Circleci[_a] = { fqn: "projen.circleci.Circleci", version: "0.99.79" };
116
138
  const isObjectContainingFieldExactly = (obj, field) => {
117
139
  return Object.keys(obj).length == 1 && Object.keys(obj).includes(field);
118
140
  };
119
141
  exports.isObjectContainingFieldExactly = isObjectContainingFieldExactly;
120
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2lyY2xlY2kuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY2lyY2xlY2kvY2lyY2xlY2kudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFDQSw0Q0FBeUM7QUFFekMsa0NBQXdDO0FBQ3hDLGtDQUFtQztBQWdFbkM7Ozs7O0dBS0c7QUFDSCxNQUFhLFFBQVMsU0FBUSxxQkFBUztJQTBCckMsWUFBWSxPQUFnQixFQUFFLFVBQXlCLEVBQUU7UUFDdkQsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBaURqQjs7Ozs7OztXQU9HO1FBQ0ssZUFBVSxHQUFHLENBQUMsT0FBc0IsRUFBRSxFQUFPLEVBQUU7WUFDckQsSUFBSSxNQUFNLEdBQVEsRUFBRSxDQUFDO1lBQ3JCLEtBQUssTUFBTSxHQUFHLElBQUksSUFBSSxJQUFJLEVBQUUsRUFBRSxDQUFDO2dCQUM3QixNQUFNLEVBQUUsVUFBVSxFQUFFLGFBQWEsRUFBRSxHQUFHLE9BQU8sRUFBRSxHQUFHLEdBQUcsQ0FBQztnQkFDdEQsSUFBSSxJQUFBLHNDQUE4QixFQUFDLEdBQUcsRUFBRSxZQUFZLENBQUMsRUFBRSxDQUFDO29CQUN0RCxNQUFNLEdBQUcsQ0FBQyxHQUFHLE1BQU0sRUFBRSxVQUFVLENBQUMsQ0FBQztnQkFDbkMsQ0FBQztxQkFBTSxDQUFDO29CQUNOLE1BQU0sR0FBRzt3QkFDUCxHQUFHLE1BQU07d0JBQ1QsRUFBRSxDQUFDLFVBQVUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxPQUFPLEVBQUUsR0FBRyxhQUFhLEVBQUUsRUFBRTtxQkFDbkQsQ0FBQztnQkFDSixDQUFDO1lBQ0gsQ0FBQztZQUNELE9BQU8sTUFBTSxDQUFDO1FBQ2hCLENBQUMsQ0FBQztRQWNGOzs7O1dBSUc7UUFDSyxjQUFTLEdBQUcsQ0FBQyxLQUFVLEVBQU8sRUFBRTtZQUN0QyxNQUFNLGlCQUFpQixHQUFHO2dCQUN4QixTQUFTO2dCQUNULGtCQUFrQjtnQkFDbEIsZUFBZTtnQkFDZixvQkFBb0I7Z0JBQ3BCLGlCQUFpQjtnQkFDakIsa0JBQWtCO2FBQ25CLENBQUM7WUFDRixPQUFPLElBQUEsb0JBQWEsRUFBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLGlCQUFpQixDQUFDLENBQUM7UUFDdkQsQ0FBQyxDQUFDO1FBbkdBLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxJQUFJLEdBQUcsT0FBTyxDQUFDLElBQUksSUFBSSxFQUFFLENBQUM7UUFDL0IsSUFBSSxDQUFDLFNBQVMsR0FBRyxPQUFPLENBQUMsU0FBUyxJQUFJLEVBQUUsQ0FBQztRQUN6QyxJQUFJLENBQUMsSUFBSSxHQUFHLE9BQU8sQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDO1FBQy9CLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxlQUFRLENBQUMsT0FBTyxFQUFFLHNCQUFzQixFQUFFO1lBQ3hELEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFO1NBQ2pDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNLLGNBQWM7UUFDcEIsbUNBQW1DO1FBQ25DLE1BQU0sZUFBZSxHQUF3QixFQUFFLENBQUM7UUFDaEQsS0FBSyxNQUFNLFFBQVEsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDdEMsTUFBTSxFQUFFLFVBQVUsRUFBRSxHQUFHLE9BQU8sRUFBRSxHQUFHLFFBQVEsQ0FBQztZQUM1QyxPQUFPLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzlDLGVBQWUsQ0FBQyxVQUFVLENBQUMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3hELENBQUM7UUFFRCwrQkFBK0I7UUFDL0IsTUFBTSxVQUFVLEdBQXdCLEVBQUUsQ0FBQztRQUMzQyxLQUFLLE1BQU0sR0FBRyxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUM1QixNQUFNLEVBQUUsVUFBVSxFQUFFLEdBQUcsT0FBTyxFQUFFLEdBQUcsR0FBRyxDQUFDO1lBQ3ZDLFVBQVUsQ0FBQyxVQUFVLENBQUMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ25ELENBQUM7UUFFRCxPQUFPO1lBQ0wsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxJQUFJLEdBQUc7WUFDcEMsS0FBSyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSztZQUN6QixJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUk7WUFDZixJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLFNBQVM7WUFDakUsU0FBUyxFQUFFLGVBQWU7U0FDM0IsQ0FBQztJQUNKLENBQUM7SUFFRDs7O09BR0c7SUFDSSxXQUFXLENBQUMsUUFBa0I7UUFDbkMsSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMsRUFBRSxRQUFRLENBQUMsQ0FBQztJQUNqRCxDQUFDO0lBMEJEOzs7O09BSUc7SUFDSSxNQUFNLENBQUMsSUFBWSxFQUFFLEdBQVc7UUFDckMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ2xDLE1BQU0sSUFBSSxLQUFLLENBQUMsaURBQWlELElBQUksR0FBRyxDQUFDLENBQUM7UUFDNUUsQ0FBQztRQUNELElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDO0lBQ3hCLENBQUM7O0FBOUdILDRCQWdJQzs7O0FBRU0sTUFBTSw4QkFBOEIsR0FBRyxDQUM1QyxHQUFRLEVBQ1IsS0FBYSxFQUNKLEVBQUU7SUFDWCxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUMxRSxDQUFDLENBQUM7QUFMVyxRQUFBLDhCQUE4QixrQ0FLekMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFdvcmtmbG93Sm9iLCBXb3JrZmxvdywgSm9iIH0gZnJvbSBcIi4vbW9kZWxcIjtcbmltcG9ydCB7IENvbXBvbmVudCB9IGZyb20gXCIuLi9jb21wb25lbnRcIjtcbmltcG9ydCB0eXBlIHsgUHJvamVjdCB9IGZyb20gXCIuLi9wcm9qZWN0XCI7XG5pbXBvcnQgeyBzbmFrZUNhc2VLZXlzIH0gZnJvbSBcIi4uL3V0aWxcIjtcbmltcG9ydCB7IFlhbWxGaWxlIH0gZnJvbSBcIi4uL3lhbWxcIjtcblxuLyoqXG4gKiBPcHRpb25zIGZvciBjbGFzcyB7QGxpbmsgQ2lyY2xlY2l9XG4gKlxuICogQHNlZSBodHRwczovL2NpcmNsZWNpLmNvbS9kb2NzLzIuMC9jb25maWd1cmF0aW9uLXJlZmVyZW5jZS9cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDaXJjbGVDaVByb3BzIHtcbiAgLyoqXG4gICAqIENvbnRhaW5zIGEgbWFwIG9mIENpcmNsQ2kgT3Jic1xuICAgKiBgYGBqc29uXG4gICAqIG9yYnM6IHtcbiAgICogIG5vZGU6IFwiY2lyY2xlY2kvbm9kZUA1LjAuMVwiXG4gICAqICBzbGFjazogXCJjaXJjbGVjaS9zbGFja0A0LjguM1wiXG4gICAqIH1cbiAgICogYGBgXG4gICAqL1xuICByZWFkb25seSBvcmJzPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgLyoqXG4gICAqIHBpcGVsaW5lIHZlcnNpb25cbiAgICpcbiAgICogQGRlZmF1bHQgMi4xXG4gICAqIEBzZWUgaHR0cHM6Ly9jaXJjbGVjaS5jb20vZG9jcy8yLjAvY29uZmlndXJhdGlvbi1yZWZlcmVuY2UvI3ZlcnNpb25cbiAgICovXG4gIHJlYWRvbmx5IHZlcnNpb24/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBMaXN0IG9mIFdvcmtmbG93cyBvZiBwaXBlbGluZSwgZS5nLlxuICAgKiBgYGBqc29uXG4gICAqIHdvcmtmbG93czoge1xuICAgKiAgIHtcbiAgICogICAgIGlkZW50aWZpZXI6IFwiYnVpbGRcIixcbiAgICogICAgICAgam9iczogW3tcbiAgICogICAgICAgICAgaWRlbnRpZmllcjogXCJub2RlL2luc3RhbGxcIixcbiAgICogICAgICAgICAgY29udGV4dDogW1wibnBtXCJdLFxuICAgKiAgICAgICB9XVxuICAgKiAgIH1cbiAgICogfVxuICAgKiBgYGBcbiAgICpcbiAgICogQHNlZSBodHRwczovL2NpcmNsZWNpLmNvbS9kb2NzLzIuMC9jb25maWd1cmF0aW9uLXJlZmVyZW5jZS8jd29ya2Zsb3dzXG4gICAqL1xuICByZWFkb25seSB3b3JrZmxvd3M/OiBXb3JrZmxvd1tdO1xuICAvKipcbiAgICogTGlzdCBvZiBKb2JzIHRvIGNyZWF0ZSB1bmlxdWUgc3RlcHMgcGVyIHBpcGVsaW5lLCBlLmcuXG4gICAqIGBgYGpzb25cbiAgICogam9iczogW3tcbiAgICogIGlkZW50aWZpZXI6IFwiY29tcGlsZVwiLFxuICAgKiAgZG9ja2VyOiB7IGltYWdlOiBcImdvbGFuZzphbHBpbmVcIiB9XG4gICAqICBzdGVwczogW1wiY2hlY2tvdXRcIiwgcnVuOiB7Y29tbWFuZDogXCJnbyBidWlsZCAuXCJ9XVxuICAgKiB9XVxuICAgKiBgYGBcbiAgICpcbiAgICogQHNlZSBodHRwczovL2NpcmNsZWNpLmNvbS9kb2NzLzIuMC9jb25maWd1cmF0aW9uLXJlZmVyZW5jZS8jam9ic1xuICAgKi9cbiAgcmVhZG9ubHkgam9icz86IEpvYltdO1xuICAvKipcbiAgICogVGhlIHNldHVwIGZpZWxkIGVuYWJsZXMgeW91IHRvIGNvbmRpdGlvbmFsbHkgdHJpZ2dlciBjb25maWd1cmF0aW9ucyBmcm9tIG91dHNpZGVcbiAgICogdGhlIHByaW1hcnkgLmNpcmNsZWNpIHBhcmVudCBkaXJlY3RvcnksIHVwZGF0ZSBwaXBlbGluZSBwYXJhbWV0ZXJzLCBvciBnZW5lcmF0ZSBjdXN0b21pemVkIGNvbmZpZ3VyYXRpb25zLlxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vY2lyY2xlY2kuY29tL2RvY3MvMi4wL2NvbmZpZ3VyYXRpb24tcmVmZXJlbmNlLyNzZXR1cFxuICAgKi9cbiAgcmVhZG9ubHkgc2V0dXA/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIENpcmNsZWNpIENsYXNzIHRvIG1hbmFnZSBgLmNpcmNsZWNpL2NvbmZpZy55bWxgLlxuICogQ2hlY2sgcHJvamVuJ3MgZG9jcyBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vY2lyY2xlY2kuY29tL2RvY3MvMi4wL2NvbmZpZ3VyYXRpb24tcmVmZXJlbmNlL1xuICovXG5leHBvcnQgY2xhc3MgQ2lyY2xlY2kgZXh0ZW5kcyBDb21wb25lbnQge1xuICAvKipcbiAgICogVGhlIHlhbWwgZmlsZSBmb3IgdGhlIENpcmNsZWNpIHBpcGVsaW5lXG4gICAqICovXG4gIHB1YmxpYyByZWFkb25seSBmaWxlOiBZYW1sRmlsZTtcbiAgLyoqXG4gICAqIGludGVybmFsIGNvcHkgb2Ygb3B0aW9ucyB0byBzaGFyZSBvcHRpb25zIGJldHdlZW4gZnVuY3Rpb25zXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBwcml2YXRlIG9wdGlvbnM6IENpcmNsZUNpUHJvcHM7XG4gIC8qKlxuICAgKiBpbnRlcm5hbCBtYXAgb2Ygb3Jic1xuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgcHJpdmF0ZSByZWFkb25seSBvcmJzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICAvKipcbiAgICogaW50ZXJuYWwgbGlzdCBvZiB3b3JrZmxvd3NcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHByaXZhdGUgd29ya2Zsb3dzOiBXb3JrZmxvd1tdO1xuICAvKipcbiAgICogaW50ZXJuYWwgbGlzdCBvZiBqb2JzXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBwcml2YXRlIHJlYWRvbmx5IGpvYnM6IEpvYltdO1xuXG4gIGNvbnN0cnVjdG9yKHByb2plY3Q6IFByb2plY3QsIG9wdGlvbnM6IENpcmNsZUNpUHJvcHMgPSB7fSkge1xuICAgIHN1cGVyKHByb2plY3QpO1xuICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgdGhpcy5vcmJzID0gb3B0aW9ucy5vcmJzID8/IHt9O1xuICAgIHRoaXMud29ya2Zsb3dzID0gb3B0aW9ucy53b3JrZmxvd3MgPz8gW107XG4gICAgdGhpcy5qb2JzID0gb3B0aW9ucy5qb2JzID8/IFtdO1xuICAgIHRoaXMuZmlsZSA9IG5ldyBZYW1sRmlsZShwcm9qZWN0LCBcIi5jaXJjbGVjaS9jb25maWcueW1sXCIsIHtcbiAgICAgIG9iajogKCkgPT4gdGhpcy5yZW5kZXJDaXJjbGVDaSgpLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIGZ1bmN0aW9uIHRvIHByZXBhcmUgdGhlIHJlbmRlcmluZyBvZiB0aGUgeWFtbCBmaWxlLlxuICAgKiBPYmplY3RzIHdpdGggZHluYW1pYyBrZXlzIGxpa2Ugd29ya2Zsb3dzIGFuZCBqb2JzIHJlcXVpcmVkIHRoZSBmaWVsZCBgaWRlbnRpZmllcmAgdG8gYmUgc2V0LlxuICAgKiBUaG9zZSBvYmplY3Qgd2lsbCBiZSByZWR1Y2VkIGJ5IGBpZGVudGlmaWVyYCBmaWVsZCBiZWZvcmUgcmVuZGVyaW5nXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBwcml2YXRlIHJlbmRlckNpcmNsZUNpKCkge1xuICAgIC8vIHJlbmRlciBkeW5hbWljIGtleXMgZm9yIHdvcmtmbG93XG4gICAgY29uc3Qgd29ya2Zsb3dSZWNvcmRzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge307XG4gICAgZm9yIChjb25zdCB3b3JrZmxvdyBvZiB0aGlzLndvcmtmbG93cykge1xuICAgICAgY29uc3QgeyBpZGVudGlmaWVyLCAuLi5yZWR1Y2VkIH0gPSB3b3JrZmxvdztcbiAgICAgIHJlZHVjZWQuam9icyA9IHRoaXMucmVuZGVySm9icyh3b3JrZmxvdy5qb2JzKTtcbiAgICAgIHdvcmtmbG93UmVjb3Jkc1tpZGVudGlmaWVyXSA9IHRoaXMuc25ha2VDYXNlKHJlZHVjZWQpO1xuICAgIH1cblxuICAgIC8vIHJlbmRlciBkeW5hbWljIGtleXMgZm9yIGpvYnNcbiAgICBjb25zdCBqb2JSZWNvcmRzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge307XG4gICAgZm9yIChjb25zdCBqb2Igb2YgdGhpcy5qb2JzKSB7XG4gICAgICBjb25zdCB7IGlkZW50aWZpZXIsIC4uLnJlZHVjZWQgfSA9IGpvYjtcbiAgICAgIGpvYlJlY29yZHNbaWRlbnRpZmllcl0gPSB0aGlzLnNuYWtlQ2FzZShyZWR1Y2VkKTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgdmVyc2lvbjogdGhpcy5vcHRpb25zLnZlcnNpb24gfHwgMi4xLFxuICAgICAgc2V0dXA6IHRoaXMub3B0aW9ucy5zZXR1cCxcbiAgICAgIG9yYnM6IHRoaXMub3JicyxcbiAgICAgIGpvYnM6IE9iamVjdC5rZXlzKGpvYlJlY29yZHMpLmxlbmd0aCA+IDAgPyBqb2JSZWNvcmRzIDogdW5kZWZpbmVkLFxuICAgICAgd29ya2Zsb3dzOiB3b3JrZmxvd1JlY29yZHMsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBhZGQgbmV3IHdvcmtmbG93IHRvIGV4aXN0aW5nIHBpcGVsaW5lXG4gICAqIEBwYXJhbSB3b3JrZmxvd1xuICAgKi9cbiAgcHVibGljIGFkZFdvcmtmbG93KHdvcmtmbG93OiBXb3JrZmxvdykge1xuICAgIHRoaXMud29ya2Zsb3dzID0gWy4uLnRoaXMud29ya2Zsb3dzLCB3b3JrZmxvd107XG4gIH1cblxuICAvKipcbiAgICogcmVkdWNlIG9iamVjdHMgd2l0aCBgaWRlbnRpZmllcmAgZmllbGQgZm9yIFdvcmtmbG93Sm9icy5cbiAgICogQSB3b3JrZmxvdyBqb2IgY2FuIGNvbnRhaW4gYG9yYlBhcmFtZXRlcmAgd2hpY2ggYXJlIHBhc3NlZCB0byBvcmJzLlxuICAgKiBUaGlzIG1hcCBpcyBkaXJlY3RseSBhZGRlZCBhcyBgUmVjb3JkPHN0cmluZyxhbnk+YCB0byBqb2IuXG4gICAqIFNvIHdlIGdvbm5hIGFkZCB0aG9zZSBhZnRlciB0aGUgZGVmYXVsdCBmaWVsZCBvZiBXb3JrZmxvd0pvYi5cbiAgICogQHNlZSBodHRwczovL2NpcmNsZWNpLmNvbS9kZXZlbG9wZXIvb3Jicy9vcmIvY2lyY2xlY2kvbm9kZSN1c2FnZS1pbnN0YWxsX25vZGVqc1xuICAgKiBAcGFyYW0gam9ic1xuICAgKi9cbiAgcHJpdmF0ZSByZW5kZXJKb2JzID0gKGpvYnM6IFdvcmtmbG93Sm9iW10gPSBbXSk6IGFueSA9PiB7XG4gICAgbGV0IHJlc3VsdDogYW55ID0gW107XG4gICAgZm9yIChjb25zdCBqb2Igb2Ygam9icyA/PyBbXSkge1xuICAgICAgY29uc3QgeyBpZGVudGlmaWVyLCBvcmJQYXJhbWV0ZXJzLCAuLi5yZWR1Y2VkIH0gPSBqb2I7XG4gICAgICBpZiAoaXNPYmplY3RDb250YWluaW5nRmllbGRFeGFjdGx5KGpvYiwgXCJpZGVudGlmaWVyXCIpKSB7XG4gICAgICAgIHJlc3VsdCA9IFsuLi5yZXN1bHQsIGlkZW50aWZpZXJdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzdWx0ID0gW1xuICAgICAgICAgIC4uLnJlc3VsdCxcbiAgICAgICAgICB7IFtpZGVudGlmaWVyXTogeyAuLi5yZWR1Y2VkLCAuLi5vcmJQYXJhbWV0ZXJzIH0gfSxcbiAgICAgICAgXTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICAvKipcbiAgICogQWRkIGEgQ2lyY2xlY2kgT3JiIHRvIHBpcGVsaW5lLiBXaWxsIHRocm93IGVycm9yIGlmIHRoZSBvcmIgYWxyZWFkeSBleGlzdHNcbiAgICogQHBhcmFtIG5hbWVcbiAgICogQHBhcmFtIG9yYlxuICAgKi9cbiAgcHVibGljIGFkZE9yYihuYW1lOiBzdHJpbmcsIG9yYjogc3RyaW5nKSB7XG4gICAgaWYgKHRoaXMub3Jic1tuYW1lXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENpcmNsZWNpIENvbmZpZyBhbHJlYWR5IGNvbnRhaW5zIGFuIG9yYiBuYW1lZCAke25hbWV9LmApO1xuICAgIH1cbiAgICB0aGlzLm9yYnNbbmFtZV0gPSBvcmI7XG4gIH1cblxuICAvKipcbiAgICogU25ha2UgY2FzZSBmb3IgbGlzdGVkIGtleXMuIFRoZXJlIGFyZSB0b28gbWFueSBleGNlcHRpb25zIG5lZWRlZCB0byBkbyBpdCByZWN1cnNpdmUgd2l0aG91dCBhIHdoaXRlbGlzdC5cbiAgICogVGhpcyBsaXN0IG5lZWRzIHRvIGJlIHVwZGF0ZWQgb25jZSB3ZSBhZGQgZmllbGQgd2l0aCBzbmFrZSBjYXNlIGxpa2UgYGF3c19hdXRoYC5cbiAgICogQHBhcmFtIGlucHV0XG4gICAqL1xuICBwcml2YXRlIHNuYWtlQ2FzZSA9IChpbnB1dDogYW55KTogYW55ID0+IHtcbiAgICBjb25zdCBzbmFrZUNhc2VLZXlXb3JkcyA9IFtcbiAgICAgIFwiYXdzQXV0aFwiLFxuICAgICAgXCJ3b3JraW5nRGlyZWN0b3J5XCIsXG4gICAgICBcInJlc291cmNlQ2xhc3NcIixcbiAgICAgIFwiZG9ja2VyTGF5ZXJDYWNoaW5nXCIsXG4gICAgICBcIm5vT3V0cHV0VGltZW91dFwiLFxuICAgICAgXCJjaXJjbGVjaUlwUmFuZ2VzXCIsXG4gICAgXTtcbiAgICByZXR1cm4gc25ha2VDYXNlS2V5cyhpbnB1dCwgdHJ1ZSwgc25ha2VDYXNlS2V5V29yZHMpO1xuICB9O1xufVxuXG5leHBvcnQgY29uc3QgaXNPYmplY3RDb250YWluaW5nRmllbGRFeGFjdGx5ID0gKFxuICBvYmo6IGFueSxcbiAgZmllbGQ6IHN0cmluZyxcbik6IGJvb2xlYW4gPT4ge1xuICByZXR1cm4gT2JqZWN0LmtleXMob2JqKS5sZW5ndGggPT0gMSAmJiBPYmplY3Qua2V5cyhvYmopLmluY2x1ZGVzKGZpZWxkKTtcbn07XG4iXX0=
142
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2lyY2xlY2kuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY2lyY2xlY2kvY2lyY2xlY2kudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUNBLDRDQUF5QztBQUV6QyxrQ0FBd0M7QUFDeEMsa0NBQW1DO0FBZ0VuQzs7Ozs7R0FLRztBQUNILE1BQWEsUUFBUyxTQUFRLHFCQUFTOztJQUNyQzs7U0FFSztJQUNXLElBQUksQ0FBVztJQUMvQjs7O09BR0c7SUFDSyxPQUFPLENBQWdCO0lBQy9COzs7T0FHRztJQUNjLElBQUksQ0FBeUI7SUFDOUM7OztPQUdHO0lBQ0ssU0FBUyxDQUFhO0lBQzlCOzs7T0FHRztJQUNjLElBQUksQ0FBUTtJQUU3QixZQUFZLE9BQWdCLEVBQUUsVUFBeUIsRUFBRTtRQUN2RCxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDZixJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztRQUN2QixJQUFJLENBQUMsSUFBSSxHQUFHLE9BQU8sQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDO1FBQy9CLElBQUksQ0FBQyxTQUFTLEdBQUcsT0FBTyxDQUFDLFNBQVMsSUFBSSxFQUFFLENBQUM7UUFDekMsSUFBSSxDQUFDLElBQUksR0FBRyxPQUFPLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUMvQixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksZUFBUSxDQUFDLE9BQU8sRUFBRSxzQkFBc0IsRUFBRTtZQUN4RCxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRTtTQUNqQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSyxjQUFjO1FBQ3BCLG1DQUFtQztRQUNuQyxNQUFNLGVBQWUsR0FBd0IsRUFBRSxDQUFDO1FBQ2hELEtBQUssTUFBTSxRQUFRLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ3RDLE1BQU0sRUFBRSxVQUFVLEVBQUUsR0FB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QUcsQ0FDNUMsR0FBUSxFQUNSLEtBQWEsRUFDSixFQUFFO0lBQ1gsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDMUUsQ0FBQyxDQUFDO0FBTFcsUUFBQSw4QkFBOEIsa0NBS3pDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBXb3JrZmxvd0pvYiwgV29ya2Zsb3csIEpvYiB9IGZyb20gXCIuL21vZGVsXCI7XG5pbXBvcnQgeyBDb21wb25lbnQgfSBmcm9tIFwiLi4vY29tcG9uZW50XCI7XG5pbXBvcnQgdHlwZSB7IFByb2plY3QgfSBmcm9tIFwiLi4vcHJvamVjdFwiO1xuaW1wb3J0IHsgc25ha2VDYXNlS2V5cyB9IGZyb20gXCIuLi91dGlsXCI7XG5pbXBvcnQgeyBZYW1sRmlsZSB9IGZyb20gXCIuLi95YW1sXCI7XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgY2xhc3Mge0BsaW5rIENpcmNsZWNpfVxuICpcbiAqIEBzZWUgaHR0cHM6Ly9jaXJjbGVjaS5jb20vZG9jcy8yLjAvY29uZmlndXJhdGlvbi1yZWZlcmVuY2UvXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ2lyY2xlQ2lQcm9wcyB7XG4gIC8qKlxuICAgKiBDb250YWlucyBhIG1hcCBvZiBDaXJjbENpIE9yYnNcbiAgICogYGBganNvblxuICAgKiBvcmJzOiB7XG4gICAqICBub2RlOiBcImNpcmNsZWNpL25vZGVANS4wLjFcIlxuICAgKiAgc2xhY2s6IFwiY2lyY2xlY2kvc2xhY2tANC44LjNcIlxuICAgKiB9XG4gICAqIGBgYFxuICAgKi9cbiAgcmVhZG9ubHkgb3Jicz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gIC8qKlxuICAgKiBwaXBlbGluZSB2ZXJzaW9uXG4gICAqXG4gICAqIEBkZWZhdWx0IDIuMVxuICAgKiBAc2VlIGh0dHBzOi8vY2lyY2xlY2kuY29tL2RvY3MvMi4wL2NvbmZpZ3VyYXRpb24tcmVmZXJlbmNlLyN2ZXJzaW9uXG4gICAqL1xuICByZWFkb25seSB2ZXJzaW9uPzogbnVtYmVyO1xuICAvKipcbiAgICogTGlzdCBvZiBXb3JrZmxvd3Mgb2YgcGlwZWxpbmUsIGUuZy5cbiAgICogYGBganNvblxuICAgKiB3b3JrZmxvd3M6IHtcbiAgICogICB7XG4gICAqICAgICBpZGVudGlmaWVyOiBcImJ1aWxkXCIsXG4gICAqICAgICAgIGpvYnM6IFt7XG4gICAqICAgICAgICAgIGlkZW50aWZpZXI6IFwibm9kZS9pbnN0YWxsXCIsXG4gICAqICAgICAgICAgIGNvbnRleHQ6IFtcIm5wbVwiXSxcbiAgICogICAgICAgfV1cbiAgICogICB9XG4gICAqIH1cbiAgICogYGBgXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9jaXJjbGVjaS5jb20vZG9jcy8yLjAvY29uZmlndXJhdGlvbi1yZWZlcmVuY2UvI3dvcmtmbG93c1xuICAgKi9cbiAgcmVhZG9ubHkgd29ya2Zsb3dzPzogV29ya2Zsb3dbXTtcbiAgLyoqXG4gICAqIExpc3Qgb2YgSm9icyB0byBjcmVhdGUgdW5pcXVlIHN0ZXBzIHBlciBwaXBlbGluZSwgZS5nLlxuICAgKiBgYGBqc29uXG4gICAqIGpvYnM6IFt7XG4gICAqICBpZGVudGlmaWVyOiBcImNvbXBpbGVcIixcbiAgICogIGRvY2tlcjogeyBpbWFnZTogXCJnb2xhbmc6YWxwaW5lXCIgfVxuICAgKiAgc3RlcHM6IFtcImNoZWNrb3V0XCIsIHJ1bjoge2NvbW1hbmQ6IFwiZ28gYnVpbGQgLlwifV1cbiAgICogfV1cbiAgICogYGBgXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9jaXJjbGVjaS5jb20vZG9jcy8yLjAvY29uZmlndXJhdGlvbi1yZWZlcmVuY2UvI2pvYnNcbiAgICovXG4gIHJlYWRvbmx5IGpvYnM/OiBKb2JbXTtcbiAgLyoqXG4gICAqIFRoZSBzZXR1cCBmaWVsZCBlbmFibGVzIHlvdSB0byBjb25kaXRpb25hbGx5IHRyaWdnZXIgY29uZmlndXJhdGlvbnMgZnJvbSBvdXRzaWRlXG4gICAqIHRoZSBwcmltYXJ5IC5jaXJjbGVjaSBwYXJlbnQgZGlyZWN0b3J5LCB1cGRhdGUgcGlwZWxpbmUgcGFyYW1ldGVycywgb3IgZ2VuZXJhdGUgY3VzdG9taXplZCBjb25maWd1cmF0aW9ucy5cbiAgICpcbiAgICogQHNlZSBodHRwczovL2NpcmNsZWNpLmNvbS9kb2NzLzIuMC9jb25maWd1cmF0aW9uLXJlZmVyZW5jZS8jc2V0dXBcbiAgICovXG4gIHJlYWRvbmx5IHNldHVwPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBDaXJjbGVjaSBDbGFzcyB0byBtYW5hZ2UgYC5jaXJjbGVjaS9jb25maWcueW1sYC5cbiAqIENoZWNrIHByb2plbidzIGRvY3MgZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4gKlxuICogQHNlZSBodHRwczovL2NpcmNsZWNpLmNvbS9kb2NzLzIuMC9jb25maWd1cmF0aW9uLXJlZmVyZW5jZS9cbiAqL1xuZXhwb3J0IGNsYXNzIENpcmNsZWNpIGV4dGVuZHMgQ29tcG9uZW50IHtcbiAgLyoqXG4gICAqIFRoZSB5YW1sIGZpbGUgZm9yIHRoZSBDaXJjbGVjaSBwaXBlbGluZVxuICAgKiAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZmlsZTogWWFtbEZpbGU7XG4gIC8qKlxuICAgKiBpbnRlcm5hbCBjb3B5IG9mIG9wdGlvbnMgdG8gc2hhcmUgb3B0aW9ucyBiZXR3ZWVuIGZ1bmN0aW9uc1xuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgcHJpdmF0ZSBvcHRpb25zOiBDaXJjbGVDaVByb3BzO1xuICAvKipcbiAgICogaW50ZXJuYWwgbWFwIG9mIG9yYnNcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHByaXZhdGUgcmVhZG9ubHkgb3JiczogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgLyoqXG4gICAqIGludGVybmFsIGxpc3Qgb2Ygd29ya2Zsb3dzXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBwcml2YXRlIHdvcmtmbG93czogV29ya2Zsb3dbXTtcbiAgLyoqXG4gICAqIGludGVybmFsIGxpc3Qgb2Ygam9ic1xuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgcHJpdmF0ZSByZWFkb25seSBqb2JzOiBKb2JbXTtcblxuICBjb25zdHJ1Y3Rvcihwcm9qZWN0OiBQcm9qZWN0LCBvcHRpb25zOiBDaXJjbGVDaVByb3BzID0ge30pIHtcbiAgICBzdXBlcihwcm9qZWN0KTtcbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuICAgIHRoaXMub3JicyA9IG9wdGlvbnMub3JicyA/PyB7fTtcbiAgICB0aGlzLndvcmtmbG93cyA9IG9wdGlvbnMud29ya2Zsb3dzID8/IFtdO1xuICAgIHRoaXMuam9icyA9IG9wdGlvbnMuam9icyA/PyBbXTtcbiAgICB0aGlzLmZpbGUgPSBuZXcgWWFtbEZpbGUocHJvamVjdCwgXCIuY2lyY2xlY2kvY29uZmlnLnltbFwiLCB7XG4gICAgICBvYmo6ICgpID0+IHRoaXMucmVuZGVyQ2lyY2xlQ2koKSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBmdW5jdGlvbiB0byBwcmVwYXJlIHRoZSByZW5kZXJpbmcgb2YgdGhlIHlhbWwgZmlsZS5cbiAgICogT2JqZWN0cyB3aXRoIGR5bmFtaWMga2V5cyBsaWtlIHdvcmtmbG93cyBhbmQgam9icyByZXF1aXJlZCB0aGUgZmllbGQgYGlkZW50aWZpZXJgIHRvIGJlIHNldC5cbiAgICogVGhvc2Ugb2JqZWN0IHdpbGwgYmUgcmVkdWNlZCBieSBgaWRlbnRpZmllcmAgZmllbGQgYmVmb3JlIHJlbmRlcmluZ1xuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgcHJpdmF0ZSByZW5kZXJDaXJjbGVDaSgpIHtcbiAgICAvLyByZW5kZXIgZHluYW1pYyBrZXlzIGZvciB3b3JrZmxvd1xuICAgIGNvbnN0IHdvcmtmbG93UmVjb3JkczogUmVjb3JkPHN0cmluZywgYW55PiA9IHt9O1xuICAgIGZvciAoY29uc3Qgd29ya2Zsb3cgb2YgdGhpcy53b3JrZmxvd3MpIHtcbiAgICAgIGNvbnN0IHsgaWRlbnRpZmllciwgLi4ucmVkdWNlZCB9ID0gd29ya2Zsb3c7XG4gICAgICByZWR1Y2VkLmpvYnMgPSB0aGlzLnJlbmRlckpvYnMod29ya2Zsb3cuam9icyk7XG4gICAgICB3b3JrZmxvd1JlY29yZHNbaWRlbnRpZmllcl0gPSB0aGlzLnNuYWtlQ2FzZShyZWR1Y2VkKTtcbiAgICB9XG5cbiAgICAvLyByZW5kZXIgZHluYW1pYyBrZXlzIGZvciBqb2JzXG4gICAgY29uc3Qgam9iUmVjb3JkczogUmVjb3JkPHN0cmluZywgYW55PiA9IHt9O1xuICAgIGZvciAoY29uc3Qgam9iIG9mIHRoaXMuam9icykge1xuICAgICAgY29uc3QgeyBpZGVudGlmaWVyLCAuLi5yZWR1Y2VkIH0gPSBqb2I7XG4gICAgICBqb2JSZWNvcmRzW2lkZW50aWZpZXJdID0gdGhpcy5zbmFrZUNhc2UocmVkdWNlZCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHZlcnNpb246IHRoaXMub3B0aW9ucy52ZXJzaW9uIHx8IDIuMSxcbiAgICAgIHNldHVwOiB0aGlzLm9wdGlvbnMuc2V0dXAsXG4gICAgICBvcmJzOiB0aGlzLm9yYnMsXG4gICAgICBqb2JzOiBPYmplY3Qua2V5cyhqb2JSZWNvcmRzKS5sZW5ndGggPiAwID8gam9iUmVjb3JkcyA6IHVuZGVmaW5lZCxcbiAgICAgIHdvcmtmbG93czogd29ya2Zsb3dSZWNvcmRzLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogYWRkIG5ldyB3b3JrZmxvdyB0byBleGlzdGluZyBwaXBlbGluZVxuICAgKiBAcGFyYW0gd29ya2Zsb3dcbiAgICovXG4gIHB1YmxpYyBhZGRXb3JrZmxvdyh3b3JrZmxvdzogV29ya2Zsb3cpIHtcbiAgICB0aGlzLndvcmtmbG93cyA9IFsuLi50aGlzLndvcmtmbG93cywgd29ya2Zsb3ddO1xuICB9XG5cbiAgLyoqXG4gICAqIHJlZHVjZSBvYmplY3RzIHdpdGggYGlkZW50aWZpZXJgIGZpZWxkIGZvciBXb3JrZmxvd0pvYnMuXG4gICAqIEEgd29ya2Zsb3cgam9iIGNhbiBjb250YWluIGBvcmJQYXJhbWV0ZXJgIHdoaWNoIGFyZSBwYXNzZWQgdG8gb3Jicy5cbiAgICogVGhpcyBtYXAgaXMgZGlyZWN0bHkgYWRkZWQgYXMgYFJlY29yZDxzdHJpbmcsYW55PmAgdG8gam9iLlxuICAgKiBTbyB3ZSBnb25uYSBhZGQgdGhvc2UgYWZ0ZXIgdGhlIGRlZmF1bHQgZmllbGQgb2YgV29ya2Zsb3dKb2IuXG4gICAqIEBzZWUgaHR0cHM6Ly9jaXJjbGVjaS5jb20vZGV2ZWxvcGVyL29yYnMvb3JiL2NpcmNsZWNpL25vZGUjdXNhZ2UtaW5zdGFsbF9ub2RlanNcbiAgICogQHBhcmFtIGpvYnNcbiAgICovXG4gIHByaXZhdGUgcmVuZGVySm9icyA9IChqb2JzOiBXb3JrZmxvd0pvYltdID0gW10pOiBhbnkgPT4ge1xuICAgIGxldCByZXN1bHQ6IGFueSA9IFtdO1xuICAgIGZvciAoY29uc3Qgam9iIG9mIGpvYnMgPz8gW10pIHtcbiAgICAgIGNvbnN0IHsgaWRlbnRpZmllciwgb3JiUGFyYW1ldGVycywgLi4ucmVkdWNlZCB9ID0gam9iO1xuICAgICAgaWYgKGlzT2JqZWN0Q29udGFpbmluZ0ZpZWxkRXhhY3RseShqb2IsIFwiaWRlbnRpZmllclwiKSkge1xuICAgICAgICByZXN1bHQgPSBbLi4ucmVzdWx0LCBpZGVudGlmaWVyXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc3VsdCA9IFtcbiAgICAgICAgICAuLi5yZXN1bHQsXG4gICAgICAgICAgeyBbaWRlbnRpZmllcl06IHsgLi4ucmVkdWNlZCwgLi4ub3JiUGFyYW1ldGVycyB9IH0sXG4gICAgICAgIF07XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG5cbiAgLyoqXG4gICAqIEFkZCBhIENpcmNsZWNpIE9yYiB0byBwaXBlbGluZS4gV2lsbCB0aHJvdyBlcnJvciBpZiB0aGUgb3JiIGFscmVhZHkgZXhpc3RzXG4gICAqIEBwYXJhbSBuYW1lXG4gICAqIEBwYXJhbSBvcmJcbiAgICovXG4gIHB1YmxpYyBhZGRPcmIobmFtZTogc3RyaW5nLCBvcmI6IHN0cmluZykge1xuICAgIGlmICh0aGlzLm9yYnNbbmFtZV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDaXJjbGVjaSBDb25maWcgYWxyZWFkeSBjb250YWlucyBhbiBvcmIgbmFtZWQgJHtuYW1lfS5gKTtcbiAgICB9XG4gICAgdGhpcy5vcmJzW25hbWVdID0gb3JiO1xuICB9XG5cbiAgLyoqXG4gICAqIFNuYWtlIGNhc2UgZm9yIGxpc3RlZCBrZXlzLiBUaGVyZSBhcmUgdG9vIG1hbnkgZXhjZXB0aW9ucyBuZWVkZWQgdG8gZG8gaXQgcmVjdXJzaXZlIHdpdGhvdXQgYSB3aGl0ZWxpc3QuXG4gICAqIFRoaXMgbGlzdCBuZWVkcyB0byBiZSB1cGRhdGVkIG9uY2Ugd2UgYWRkIGZpZWxkIHdpdGggc25ha2UgY2FzZSBsaWtlIGBhd3NfYXV0aGAuXG4gICAqIEBwYXJhbSBpbnB1dFxuICAgKi9cbiAgcHJpdmF0ZSBzbmFrZUNhc2UgPSAoaW5wdXQ6IGFueSk6IGFueSA9PiB7XG4gICAgY29uc3Qgc25ha2VDYXNlS2V5V29yZHMgPSBbXG4gICAgICBcImF3c0F1dGhcIixcbiAgICAgIFwid29ya2luZ0RpcmVjdG9yeVwiLFxuICAgICAgXCJyZXNvdXJjZUNsYXNzXCIsXG4gICAgICBcImRvY2tlckxheWVyQ2FjaGluZ1wiLFxuICAgICAgXCJub091dHB1dFRpbWVvdXRcIixcbiAgICAgIFwiY2lyY2xlY2lJcFJhbmdlc1wiLFxuICAgIF07XG4gICAgcmV0dXJuIHNuYWtlQ2FzZUtleXMoaW5wdXQsIHRydWUsIHNuYWtlQ2FzZUtleVdvcmRzKTtcbiAgfTtcbn1cblxuZXhwb3J0IGNvbnN0IGlzT2JqZWN0Q29udGFpbmluZ0ZpZWxkRXhhY3RseSA9IChcbiAgb2JqOiBhbnksXG4gIGZpZWxkOiBzdHJpbmcsXG4pOiBib29sZWFuID0+IHtcbiAgcmV0dXJuIE9iamVjdC5rZXlzKG9iaikubGVuZ3RoID09IDEgJiYgT2JqZWN0LmtleXMob2JqKS5pbmNsdWRlcyhmaWVsZCk7XG59O1xuIl19
package/lib/cleanup.js CHANGED
@@ -1,12 +1,45 @@
1
1
  "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
2
35
  Object.defineProperty(exports, "__esModule", { value: true });
3
36
  exports.FILE_MANIFEST = void 0;
4
37
  exports.cleanup = cleanup;
5
- const fs = require("fs");
6
- const path = require("path");
7
- const glob = require("fast-glob");
38
+ const fs = __importStar(require("fs"));
39
+ const path = __importStar(require("path"));
40
+ const glob = __importStar(require("fast-glob"));
8
41
  const common_1 = require("./common");
9
- const logging = require("./logging");
42
+ const logging = __importStar(require("./logging"));
10
43
  exports.FILE_MANIFEST = `${common_1.PROJEN_DIR}/files.json`;
11
44
  function cleanup(dir, newFiles, exclude) {
12
45
  try {
@@ -88,4 +121,4 @@ function readGitIgnore(dir) {
88
121
  .join("\n")
89
122
  .split("\n");
90
123
  }
91
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xlYW51cC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9jbGVhbnVwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQVFBLDBCQWFDO0FBckJELHlCQUF5QjtBQUN6Qiw2QkFBNkI7QUFDN0Isa0NBQWtDO0FBQ2xDLHFDQUFxRDtBQUNyRCxxQ0FBcUM7QUFFeEIsUUFBQSxhQUFhLEdBQUcsR0FBRyxtQkFBVSxhQUFhLENBQUM7QUFFeEQsU0FBZ0IsT0FBTyxDQUFDLEdBQVcsRUFBRSxRQUFrQixFQUFFLE9BQWlCO0lBQ3hFLElBQUksQ0FBQztRQUNILE1BQU0sYUFBYSxHQUFHLG9CQUFvQixDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2hELElBQUksYUFBYSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUM3QiwyRUFBMkU7WUFDM0UsV0FBVyxDQUFDLGlCQUFpQixDQUFDLEdBQUcsRUFBRSxhQUFhLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQztRQUMvRCxDQUFDO2FBQU0sQ0FBQztZQUNOLHVEQUF1RDtZQUN2RCxXQUFXLENBQUMsa0JBQWtCLENBQUMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7UUFDaEQsQ0FBQztJQUNILENBQUM7SUFBQyxPQUFPLENBQU0sRUFBRSxDQUFDO1FBQ2hCLE9BQU8sQ0FBQyxJQUFJLENBQUMsZ0RBQWdELENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQzFFLENBQUM7QUFDSCxDQUFDO0FBRUQsU0FBUyxXQUFXLENBQUMsS0FBZTtJQUNsQyxLQUFLLE1BQU0sSUFBSSxJQUFJLEtBQUssRUFBRSxDQUFDO1FBQ3pCLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUNwRCxDQUFDO0FBQ0gsQ0FBQztBQUVELFNBQVMsa0JBQWtCLENBQUMsR0FBVyxFQUFFLE9BQWlC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QUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsb0JBQW9CO1NBQ3JELEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUM7U0FDM0IsSUFBSSxDQUFDLElBQUksQ0FBQztTQUNWLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNqQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgZnMgZnJvbSBcImZzXCI7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gXCJwYXRoXCI7XG5pbXBvcnQgKiBhcyBnbG9iIGZyb20gXCJmYXN0LWdsb2JcIjtcbmltcG9ydCB7IFBST0pFTl9ESVIsIFBST0pFTl9NQVJLRVIgfSBmcm9tIFwiLi9jb21tb25cIjtcbmltcG9ydCAqIGFzIGxvZ2dpbmcgZnJvbSBcIi4vbG9nZ2luZ1wiO1xuXG5leHBvcnQgY29uc3QgRklMRV9NQU5JRkVTVCA9IGAke1BST0pFTl9ESVJ9L2ZpbGVzLmpzb25gO1xuXG5leHBvcnQgZnVuY3Rpb24gY2xlYW51cChkaXI6IHN0cmluZywgbmV3RmlsZXM6IHN0cmluZ1tdLCBleGNsdWRlOiBzdHJpbmdbXSkge1xuICB0cnkge1xuICAgIGNvbnN0IG1hbmlmZXN0RmlsZXMgPSBnZXRGaWxlc0Zyb21NYW5pZmVzdChkaXIpO1xuICAgIGlmIChtYW5pZmVzdEZpbGVzLmxlbmd0aCA+IDApIHtcbiAgICAgIC8vIFVzZSBgRklMRV9NQU5JRkVTVGAgdG8gcmVtb3ZlIGZpbGVzIHRoYXQgYXJlIG5vIGxvbmdlciBtYW5hZ2VkIGJ5IHByb2plblxuICAgICAgcmVtb3ZlRmlsZXMoZmluZE9ycGhhbmVkRmlsZXMoZGlyLCBtYW5pZmVzdEZpbGVzLCBuZXdGaWxlcykpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBSZW1vdmUgYWxsIGZpbGVzIG1hbmFnZWQgYnkgcHJvamVuIHdpdGggbGVnYWN5IGxvZ2ljXG4gICAgICByZW1vdmVGaWxlcyhmaW5kR2VuZXJhdGVkRmlsZXMoZGlyLCBleGNsdWRlKSk7XG4gICAgfVxuICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICBsb2dnaW5nLndhcm4oYHdhcm5pbmc6IGZhaWxlZCB0byBjbGVhbiB1cCBnZW5lcmF0ZWQgZmlsZXM6ICR7ZS5zdGFja31gKTtcbiAgfVxufVxuXG5mdW5jdGlvbiByZW1vdmVGaWxlcyhmaWxlczogc3RyaW5nW10pIHtcbiAgZm9yIChjb25zdCBmaWxlIG9mIGZpbGVzKSB7XG4gICAgZnMucm1TeW5jKGZpbGUsIHsgZm9yY2U6IHRydWUsIHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBmaW5kR2VuZXJhdGVkRmlsZXMoZGlyOiBzdHJpbmcsIGV4Y2x1ZGU6IHN0cmluZ1tdKSB7XG4gIGNvbnN0IGlnbm9yZSA9IFtcbiAgICAuLi5yZWFkR2l0SWdub3JlKGRpciksXG4gICAgXCJub2RlX21vZHVsZXMvKipcIixcbiAgICAuLi5leGNsdWRlLFxuICAgIFwiLmdpdC8qKlwiLFxuICBdO1xuXG4gIGNvbnN0IGZpbGVzID0gZ2xvYi5zeW5jKFwiKipcIiwge1xuICAgIGlnbm9yZSxcbiAgICBjd2Q6IGRpcixcbiAgICBkb3Q6IHRydWUsXG4gICAgb25seUZpbGVzOiB0cnVlLFxuICAgIGZvbGxvd1N5bWJvbGljTGlua3M6IGZhbHNlLFxuICAgIGFic29sdXRlOiB0cnVlLFxuICB9KTtcblxuICBjb25zdCBnZW5lcmF0ZWQgPSBuZXcgQXJyYXk8c3RyaW5nPigpO1xuXG4gIGZvciAoY29uc3QgZmlsZSBvZiBmaWxlcykge1xuICAgIGNvbnN0IGNvbnRlbnRzID0gZnMucmVhZEZpbGVTeW5jKGZpbGUsIFwidXRmLThcIik7XG5cbiAgICBpZiAoY29udGVudHMuaW5jbHVkZXMoUFJPSkVOX01BUktFUikpIHtcbiAgICAgIGdlbmVyYXRlZC5wdXNoKGZpbGUpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBnZW5lcmF0ZWQ7XG59XG5cbmZ1bmN0aW9uIGZpbmRPcnBoYW5lZEZpbGVzKFxuICBkaXI6IHN0cmluZyxcbiAgb2xkRmlsZXM6IHN0cmluZ1tdLFxuICBuZXdGaWxlczogc3RyaW5nW10sXG4pIHtcbiAgcmV0dXJuIG9sZEZpbGVzXG4gICAgLmZpbHRlcigob2xkKSA9PiAhbmV3RmlsZXMuaW5jbHVkZXMob2xkKSlcbiAgICAubWFwKChmOiBzdHJpbmcpID0+IHBhdGgucmVzb2x2ZShkaXIsIGYpKTtcbn1cblxuZnVuY3Rpb24gZ2V0RmlsZXNGcm9tTWFuaWZlc3QoZGlyOiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gIHRyeSB7XG4gICAgY29uc3QgZmlsZU1hbmlmZXN0UGF0aCA9IHBhdGgucmVzb2x2ZShkaXIsIEZJTEVfTUFOSUZFU1QpO1xuICAgIGlmIChmcy5leGlzdHNTeW5jKGZpbGVNYW5pZmVzdFBhdGgpKSB7XG4gICAgICBjb25zdCBmaWxlTWFuaWZlc3QgPSBKU09OLnBhcnNlKFxuICAgICAgICBmcy5yZWFkRmlsZVN5bmMoZmlsZU1hbmlmZXN0UGF0aCwgXCJ1dGYtOFwiKSxcbiAgICAgICk7XG4gICAgICBpZiAoZmlsZU1hbmlmZXN0LmZpbGVzKSB7XG4gICAgICAgIHJldHVybiBmaWxlTWFuaWZlc3QuZmlsZXM7XG4gICAgICB9XG4gICAgfVxuICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICBsb2dnaW5nLndhcm4oXG4gICAgICBgd2FybmluZzogdW5hYmxlIHRvIGdldCBmaWxlcyB0byBjbGVhbiBmcm9tIGZpbGUgbWFuaWZlc3Q6ICR7ZS5zdGFja31gLFxuICAgICk7XG4gIH1cblxuICByZXR1cm4gW107XG59XG5cbmZ1bmN0aW9uIHJlYWRHaXRJZ25vcmUoZGlyOiBzdHJpbmcpIHtcbiAgY29uc3QgZmlsZXBhdGggPSBwYXRoLmpvaW4oZGlyLCBcIi5naXRpZ25vcmVcIik7XG4gIGlmICghZnMuZXhpc3RzU3luYyhmaWxlcGF0aCkpIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICByZXR1cm4gZnNcbiAgICAucmVhZEZpbGVTeW5jKGZpbGVwYXRoLCBcInV0Zi04XCIpXG4gICAgLnNwbGl0KFwiXFxuXCIpXG4gICAgLmZpbHRlcigoeCkgPT4geD8udHJpbSgpICE9PSBcIlwiKVxuICAgIC5maWx0ZXIoKHgpID0+ICF4LnN0YXJ0c1dpdGgoXCIjXCIpICYmICF4LnN0YXJ0c1dpdGgoXCIhXCIpKVxuICAgIC5tYXAoKHgpID0+IHgucmVwbGFjZSgvXlxcLy8sIFwiXCIpKSAvLyByZW1vdmUgXCIvXCIgcHJlZml4XG4gICAgLm1hcCgoeCkgPT4gYCR7eH1cXG4ke3h9LyoqYClcbiAgICAuam9pbihcIlxcblwiKVxuICAgIC5zcGxpdChcIlxcblwiKTtcbn1cbiJdfQ==
124
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xlYW51cC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9jbGVhbnVwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQVFBLDBCQWFDO0FBckJELHVDQUF5QjtBQUN6QiwyQ0FBNkI7QUFDN0IsZ0RBQWtDO0FBQ2xDLHFDQUFxRDtBQUNyRCxtREFBcUM7QUFFeEIsUUFBQSxhQUFhLEdBQUcsR0FBRyxtQkFBVSxhQUFhLENBQUM7QUFFeEQsU0FBZ0IsT0FBTyxDQUFDLEdBQVcsRUFBRSxRQUFrQixFQUFFLE9BQWlCO0lBQ3hFLElBQUksQ0FBQztRQUNILE1BQU0sYUFBYSxHQUFHLG9CQUFvQixDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2hELElBQUksYUFBYSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUM3QiwyRUFBMkU7WUFDM0UsV0FBVyxDQUFDLGlCQUFpQixDQUFDLEdBQUcsRUFBRSxhQUFhLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQztRQUMvRCxDQUFDO2FBQU0sQ0FBQztZQUNOLHVEQUF1RDtZQUN2RCxXQUFXLENBQUMsa0JBQWtCLENBQUMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7UUFDaEQsQ0FBQztJQUNILENBQUM7SUFBQyxPQUFPLENBQU0sRUFBRSxDQUFDO1FBQ2hCLE9BQU8sQ0FBQyxJQUFJLENBQUMsZ0RBQWdELENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQzFFLENBQUM7QUFDSCxDQUFDO0FBRUQsU0FBUyxXQUFXLENBQUMsS0FBZTtJQUNsQyxLQUFLLE1BQU0sSUFBSSxJQUFJLEtBQUssRUFBRSxDQUFDO1FBQ3pCLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUNwRCxDQUFDO0FBQ0gsQ0FBQztBQUVE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LENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsb0JBQW9CO1NBQ3JELEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUM7U0FDM0IsSUFBSSxDQUFDLElBQUksQ0FBQztTQUNWLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNqQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgZnMgZnJvbSBcImZzXCI7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gXCJwYXRoXCI7XG5pbXBvcnQgKiBhcyBnbG9iIGZyb20gXCJmYXN0LWdsb2JcIjtcbmltcG9ydCB7IFBST0pFTl9ESVIsIFBST0pFTl9NQVJLRVIgfSBmcm9tIFwiLi9jb21tb25cIjtcbmltcG9ydCAqIGFzIGxvZ2dpbmcgZnJvbSBcIi4vbG9nZ2luZ1wiO1xuXG5leHBvcnQgY29uc3QgRklMRV9NQU5JRkVTVCA9IGAke1BST0pFTl9ESVJ9L2ZpbGVzLmpzb25gO1xuXG5leHBvcnQgZnVuY3Rpb24gY2xlYW51cChkaXI6IHN0cmluZywgbmV3RmlsZXM6IHN0cmluZ1tdLCBleGNsdWRlOiBzdHJpbmdbXSkge1xuICB0cnkge1xuICAgIGNvbnN0IG1hbmlmZXN0RmlsZXMgPSBnZXRGaWxlc0Zyb21NYW5pZmVzdChkaXIpO1xuICAgIGlmIChtYW5pZmVzdEZpbGVzLmxlbmd0aCA+IDApIHtcbiAgICAgIC8vIFVzZSBgRklMRV9NQU5JRkVTVGAgdG8gcmVtb3ZlIGZpbGVzIHRoYXQgYXJlIG5vIGxvbmdlciBtYW5hZ2VkIGJ5IHByb2plblxuICAgICAgcmVtb3ZlRmlsZXMoZmluZE9ycGhhbmVkRmlsZXMoZGlyLCBtYW5pZmVzdEZpbGVzLCBuZXdGaWxlcykpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBSZW1vdmUgYWxsIGZpbGVzIG1hbmFnZWQgYnkgcHJvamVuIHdpdGggbGVnYWN5IGxvZ2ljXG4gICAgICByZW1vdmVGaWxlcyhmaW5kR2VuZXJhdGVkRmlsZXMoZGlyLCBleGNsdWRlKSk7XG4gICAgfVxuICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICBsb2dnaW5nLndhcm4oYHdhcm5pbmc6IGZhaWxlZCB0byBjbGVhbiB1cCBnZW5lcmF0ZWQgZmlsZXM6ICR7ZS5zdGFja31gKTtcbiAgfVxufVxuXG5mdW5jdGlvbiByZW1vdmVGaWxlcyhmaWxlczogc3RyaW5nW10pIHtcbiAgZm9yIChjb25zdCBmaWxlIG9mIGZpbGVzKSB7XG4gICAgZnMucm1TeW5jKGZpbGUsIHsgZm9yY2U6IHRydWUsIHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBmaW5kR2VuZXJhdGVkRmlsZXMoZGlyOiBzdHJpbmcsIGV4Y2x1ZGU6IHN0cmluZ1tdKSB7XG4gIGNvbnN0IGlnbm9yZSA9IFtcbiAgICAuLi5yZWFkR2l0SWdub3JlKGRpciksXG4gICAgXCJub2RlX21vZHVsZXMvKipcIixcbiAgICAuLi5leGNsdWRlLFxuICAgIFwiLmdpdC8qKlwiLFxuICBdO1xuXG4gIGNvbnN0IGZpbGVzID0gZ2xvYi5zeW5jKFwiKipcIiwge1xuICAgIGlnbm9yZSxcbiAgICBjd2Q6IGRpcixcbiAgICBkb3Q6IHRydWUsXG4gICAgb25seUZpbGVzOiB0cnVlLFxuICAgIGZvbGxvd1N5bWJvbGljTGlua3M6IGZhbHNlLFxuICAgIGFic29sdXRlOiB0cnVlLFxuICB9KTtcblxuICBjb25zdCBnZW5lcmF0ZWQgPSBuZXcgQXJyYXk8c3RyaW5nPigpO1xuXG4gIGZvciAoY29uc3QgZmlsZSBvZiBmaWxlcykge1xuICAgIGNvbnN0IGNvbnRlbnRzID0gZnMucmVhZEZpbGVTeW5jKGZpbGUsIFwidXRmLThcIik7XG5cbiAgICBpZiAoY29udGVudHMuaW5jbHVkZXMoUFJPSkVOX01BUktFUikpIHtcbiAgICAgIGdlbmVyYXRlZC5wdXNoKGZpbGUpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBnZW5lcmF0ZWQ7XG59XG5cbmZ1bmN0aW9uIGZpbmRPcnBoYW5lZEZpbGVzKFxuICBkaXI6IHN0cmluZyxcbiAgb2xkRmlsZXM6IHN0cmluZ1tdLFxuICBuZXdGaWxlczogc3RyaW5nW10sXG4pIHtcbiAgcmV0dXJuIG9sZEZpbGVzXG4gICAgLmZpbHRlcigob2xkKSA9PiAhbmV3RmlsZXMuaW5jbHVkZXMob2xkKSlcbiAgICAubWFwKChmOiBzdHJpbmcpID0+IHBhdGgucmVzb2x2ZShkaXIsIGYpKTtcbn1cblxuZnVuY3Rpb24gZ2V0RmlsZXNGcm9tTWFuaWZlc3QoZGlyOiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gIHRyeSB7XG4gICAgY29uc3QgZmlsZU1hbmlmZXN0UGF0aCA9IHBhdGgucmVzb2x2ZShkaXIsIEZJTEVfTUFOSUZFU1QpO1xuICAgIGlmIChmcy5leGlzdHNTeW5jKGZpbGVNYW5pZmVzdFBhdGgpKSB7XG4gICAgICBjb25zdCBmaWxlTWFuaWZlc3QgPSBKU09OLnBhcnNlKFxuICAgICAgICBmcy5yZWFkRmlsZVN5bmMoZmlsZU1hbmlmZXN0UGF0aCwgXCJ1dGYtOFwiKSxcbiAgICAgICk7XG4gICAgICBpZiAoZmlsZU1hbmlmZXN0LmZpbGVzKSB7XG4gICAgICAgIHJldHVybiBmaWxlTWFuaWZlc3QuZmlsZXM7XG4gICAgICB9XG4gICAgfVxuICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICBsb2dnaW5nLndhcm4oXG4gICAgICBgd2FybmluZzogdW5hYmxlIHRvIGdldCBmaWxlcyB0byBjbGVhbiBmcm9tIGZpbGUgbWFuaWZlc3Q6ICR7ZS5zdGFja31gLFxuICAgICk7XG4gIH1cblxuICByZXR1cm4gW107XG59XG5cbmZ1bmN0aW9uIHJlYWRHaXRJZ25vcmUoZGlyOiBzdHJpbmcpIHtcbiAgY29uc3QgZmlsZXBhdGggPSBwYXRoLmpvaW4oZGlyLCBcIi5naXRpZ25vcmVcIik7XG4gIGlmICghZnMuZXhpc3RzU3luYyhmaWxlcGF0aCkpIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICByZXR1cm4gZnNcbiAgICAucmVhZEZpbGVTeW5jKGZpbGVwYXRoLCBcInV0Zi04XCIpXG4gICAgLnNwbGl0KFwiXFxuXCIpXG4gICAgLmZpbHRlcigoeCkgPT4geD8udHJpbSgpICE9PSBcIlwiKVxuICAgIC5maWx0ZXIoKHgpID0+ICF4LnN0YXJ0c1dpdGgoXCIjXCIpICYmICF4LnN0YXJ0c1dpdGgoXCIhXCIpKVxuICAgIC5tYXAoKHgpID0+IHgucmVwbGFjZSgvXlxcLy8sIFwiXCIpKSAvLyByZW1vdmUgXCIvXCIgcHJlZml4XG4gICAgLm1hcCgoeCkgPT4gYCR7eH1cXG4ke3h9LyoqYClcbiAgICAuam9pbihcIlxcblwiKVxuICAgIC5zcGxpdChcIlxcblwiKTtcbn1cbiJdfQ==
@@ -1,26 +1,57 @@
1
1
  "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
2
35
  Object.defineProperty(exports, "__esModule", { value: true });
3
- const fs = require("fs");
4
- const path = require("path");
5
- const semver = require("semver");
6
- const yargs = require("yargs");
7
- const inventory = require("../../inventory");
8
- const logging = require("../../logging");
36
+ const fs = __importStar(require("fs"));
37
+ const path = __importStar(require("path"));
38
+ const semver = __importStar(require("semver"));
39
+ const yargs = __importStar(require("yargs"));
40
+ const inventory = __importStar(require("../../inventory"));
41
+ const logging = __importStar(require("../../logging"));
9
42
  const option_hints_1 = require("../../option-hints");
10
43
  const projects_1 = require("../../projects");
11
44
  const util_1 = require("../../util");
12
45
  const macros_1 = require("../macros");
13
46
  const util_2 = require("../util");
14
47
  class Command {
15
- constructor() {
16
- this.command = "new [PROJECT-TYPE-NAME] [OPTIONS]";
17
- this.describe = [
18
- "Creates a new projen project",
19
- "",
20
- "For a complete list of the available options for a specific project type, run:",
21
- "projen new [PROJECT-TYPE-NAME] --help",
22
- ].join("\n");
23
- }
48
+ command = "new [PROJECT-TYPE-NAME] [OPTIONS]";
49
+ describe = [
50
+ "Creates a new projen project",
51
+ "",
52
+ "For a complete list of the available options for a specific project type, run:",
53
+ "projen new [PROJECT-TYPE-NAME] --help",
54
+ ].join("\n");
24
55
  builder(args) {
25
56
  args.positional("PROJECT-TYPE-NAME", {
26
57
  describe: "only optional with --from and the external module has only a single project type",
@@ -173,9 +204,9 @@ function argTypeSupported(option) {
173
204
  */
174
205
  function isPrimitiveArrayOption(option) {
175
206
  return Boolean(option.jsonLike &&
176
- option.fullType.collection?.kind === "array" &&
177
- option.fullType.collection.elementtype.primitive &&
178
- ["string", "number"].includes(option.fullType.collection.elementtype.primitive));
207
+ option.type.collection?.kind === "array" &&
208
+ option.type.collection.elementtype.primitive &&
209
+ ["string", "number"].includes(option.type.collection.elementtype.primitive));
179
210
  }
180
211
  /**
181
212
  * Given a value from "@default", processes macros and returns a stringified
@@ -323,7 +354,7 @@ function parseArg(value, type, option) {
323
354
  if (!Array.isArray(value)) {
324
355
  value = [value];
325
356
  }
326
- return value.map((v) => parseArg(v, option?.fullType.collection?.elementtype.primitive || "string"));
357
+ return value.map((v) => parseArg(v, option?.type.collection?.elementtype.primitive || "string"));
327
358
  // return value unchanged
328
359
  case "string":
329
360
  default:
@@ -380,4 +411,4 @@ async function initProject(baseDir, type, args) {
380
411
  }
381
412
  }
382
413
  exports.default = new Command();
383
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV3LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NsaS9jbWRzL25ldy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUNBLHlCQUF5QjtBQUN6Qiw2QkFBNkI7QUFDN0IsaUNBQWlDO0FBQ2pDLCtCQUErQjtBQUMvQiw2Q0FBNkM7QUFDN0MseUNBQXlDO0FBQ3pDLHFEQUE0RDtBQUM1RCw2Q0FBMEM7QUFDMUMscUNBT29CO0FBQ3BCLHNDQUE0QztBQUM1QyxrQ0FLaUI7QUFFakIsTUFBTSxPQUFPO0lBQWI7UUFDa0IsWUFBTyxHQUFHLG1DQUFtQyxDQUFDO1FBQzlDLGFBQVEsR0FBRztZQUN6Qiw4QkFBOEI7WUFDOUIsRUFBRTtZQUNGLGdGQUFnRjtZQUNoRix1Q0FBdUM7U0FDeEMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUEyRmYsQ0FBQztJQXpGUSxPQUFPLENBQUMsSUFBZ0I7UUFDN0IsSUFBSSxDQUFDLFVBQVUsQ0FBQyxtQkFBbUIsRUFBRTtZQUNuQyxRQUFRLEVBQ04sa0ZBQWtGO1lBQ3BGLElBQUksRUFBRSxRQUFRO1NBQ2YsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUU7WUFDbkIsSUFBSSxFQUFFLFNBQVM7WUFDZixPQUFPLEVBQUUsSUFBSTtZQUNiLElBQUksRUFBRSx3Q0FBd0M7U0FDL0MsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUU7WUFDdEIsSUFBSSxFQUFFLFNBQVM7WUFDZixPQUFPLEVBQUUsSUFBSTtZQUNiLElBQUksRUFBRSw4RUFBOEU7U0FDckYsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUU7WUFDbEIsSUFBSSxFQUFFLFFBQVE7WUFDZCxLQUFLLEVBQUUsR0FBRztZQUNWLElBQUksRUFBRSxzSEFBc0g7U0FDN0gsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLE1BQU0sQ0FB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QUM7WUFDcEUsT0FBTyxDQUFDLEtBQUssQ0FBQyw4QkFBOEIsb0JBQW9CLEVBQUUsQ0FBQyxDQUFDO1FBQ3RFLENBQUM7YUFBTSxDQUFDO1lBQ04sR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ1osR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ2IsR0FBRyxDQUFDLDhEQUE4RCxDQUFDLENBQUM7WUFDcEUsT0FBTyxDQUFDLEtBQUssQ0FDWCxvRUFBb0UsQ0FDckUsQ0FBQztZQUNGLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ3hCLENBQUM7SUFDSCxDQUFDO0FBQ0gsQ0FBQztBQUVELGtCQUFlLElBQUksT0FBTyxFQUFFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFNwYXduU3luY1JldHVybnMgfSBmcm9tIFwiY2hpbGRfcHJvY2Vzc1wiO1xuaW1wb3J0ICogYXMgZnMgZnJvbSBcImZzXCI7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gXCJwYXRoXCI7XG5pbXBvcnQgKiBhcyBzZW12ZXIgZnJvbSBcInNlbXZlclwiO1xuaW1wb3J0ICogYXMgeWFyZ3MgZnJvbSBcInlhcmdzXCI7XG5pbXBvcnQgKiBhcyBpbnZlbnRvcnkgZnJvbSBcIi4uLy4uL2ludmVudG9yeVwiO1xuaW1wb3J0ICogYXMgbG9nZ2luZyBmcm9tIFwiLi4vLi4vbG9nZ2luZ1wiO1xuaW1wb3J0IHsgSW5pdFByb2plY3RPcHRpb25IaW50cyB9IGZyb20gXCIuLi8uLi9vcHRpb24taGludHNcIjtcbmltcG9ydCB7IFByb2plY3RzIH0gZnJvbSBcIi4uLy4uL3Byb2plY3RzXCI7XG5pbXBvcnQge1xuICBleGVjLFxuICBleGVjQ2FwdHVyZSxcbiAgZXhlY09yVW5kZWZpbmVkLFxuICBnZXRHaXRWZXJzaW9uLFxuICBpc1RydXRoeSxcbiAgbm9ybWFsaXplUGVyc2lzdGVkUGF0aCxcbn0gZnJvbSBcIi4uLy4uL3V0aWxcIjtcbmltcG9ydCB7IHRyeVByb2Nlc3NNYWNybyB9IGZyb20gXCIuLi9tYWNyb3NcIjtcbmltcG9ydCB7XG4gIENsaUVycm9yLFxuICBmaW5kSnNpaUZpbGVQYXRoLFxuICBpbnN0YWxsUGFja2FnZSxcbiAgcmVuZGVySW5zdGFsbENvbW1hbmQsXG59IGZyb20gXCIuLi91dGlsXCI7XG5cbmNsYXNzIENvbW1hbmQgaW1wbGVtZW50cyB5YXJncy5Db21tYW5kTW9kdWxlIHtcbiAgcHVibGljIHJlYWRvbmx5IGNvbW1hbmQgPSBcIm5ldyBbUFJPSkVDVC1UWVBFLU5BTUVdIFtPUFRJT05TXVwiO1xuICBwdWJsaWMgcmVhZG9ubHkgZGVzY3JpYmUgPSBbXG4gICAgXCJDcmVhdGVzIGEgbmV3IHByb2plbiBwcm9qZWN0XCIsXG4gICAgXCJcIixcbiAgICBcIkZvciBhIGNvbXBsZXRlIGxpc3Qgb2YgdGhlIGF2YWlsYWJsZSBvcHRpb25zIGZvciBhIHNwZWNpZmljIHByb2plY3QgdHlwZSwgcnVuOlwiLFxuICAgIFwicHJvamVuIG5ldyBbUFJPSkVDVC1UWVBFLU5BTUVdIC0taGVscFwiLFxuICBdLmpvaW4oXCJcXG5cIik7XG5cbiAgcHVibGljIGJ1aWxkZXIoYXJnczogeWFyZ3MuQXJndikge1xuICAgIGFyZ3MucG9zaXRpb25hbChcIlBST0pFQ1QtVFlQRS1OQU1FXCIsIHtcbiAgICAgIGRlc2NyaWJlOlxuICAgICAgICBcIm9ubHkgb3B0aW9uYWwgd2l0aCAtLWZyb20gYW5kIHRoZSBleHRlcm5hbCBtb2R1bGUgaGFzIG9ubHkgYSBzaW5nbGUgcHJvamVjdCB0eXBlXCIsXG4gICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgIH0pO1xuICAgIGFyZ3Mub3B0aW9uKFwic3ludGhcIiwge1xuICAgICAgdHlwZTogXCJib29sZWFuXCIsXG4gICAgICBkZWZhdWx0OiB0cnVlLFxuICAgICAgZGVzYzogXCJTeW50aGVzaXplIGFmdGVyIGNyZWF0aW5nIC5wcm9qZW5yYy5qc1wiLFxuICAgIH0pO1xuICAgIGFyZ3Mub3B0aW9uKFwiY29tbWVudHNcIiwge1xuICAgICAgdHlwZTogXCJib29sZWFuXCIsXG4gICAgICBkZWZhdWx0OiB0cnVlLFxuICAgICAgZGVzYzogXCJJbmNsdWRlIGNvbW1lbnRlZCBvdXQgb3B0aW9ucyBpbiAucHJvamVucmMuanMgKHVzZSAtLW5vLWNvbW1lbnRzIHRvIGRpc2FibGUpXCIsXG4gICAgfSk7XG4gICAgYXJncy5vcHRpb24oXCJmcm9tXCIsIHtcbiAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICBhbGlhczogXCJmXCIsXG4gICAgICBkZXNjOiAnRXh0ZXJuYWwganNpaSBucG0gbW9kdWxlIHRvIGNyZWF0ZSBwcm9qZWN0IGZyb20uIFN1cHBvcnRzIGFueSBwYWNrYWdlIHNwZWMgc3VwcG9ydGVkIGJ5IG5wbSAoc3VjaCBhcyBcIm15LXBhY2tAXjIuMFwiKScsXG4gICAgfSk7XG4gICAgYXJncy5vcHRpb24oXCJnaXRcIiwge1xuICAgICAgdHlwZTogXCJib29sZWFuXCIsXG4gICAgICBkZWZhdWx0OiB0cnVlLFxuICAgICAgZGVzYzogXCJSdW4gYGdpdCBpbml0YCBhbmQgY3JlYXRlIGFuIGluaXRpYWwgY29tbWl0ICh1c2UgLS1uby1naXQgdG8gZGlzYWJsZSlcIixcbiAgICB9KTtcbiAgICBhcmdzLmV4YW1wbGUoXG4gICAgICBcInByb2plbiBuZXcgYXdzY2RrLWFwcC10c1wiLFxuICAgICAgJ0NyZWF0ZXMgYSBuZXcgcHJvamVjdCBvZiBidWlsdC1pbiB0eXBlIFwiYXdzY2RrLWFwcC10c1wiJyxcbiAgICApO1xuICAgIGFyZ3MuZXhhbXBsZShcbiAgICAgIFwicHJvamVuIG5ldyAtLWZyb20gcHJvamVuLXZ1ZUBeMlwiLFxuICAgICAgJ0NyZWF0ZXMgYSBuZXcgcHJvamVjdCBmcm9tIGFuIGV4dGVybmFsIG1vZHVsZSBcInByb2plbi12dWVcIiB3aXRoIHRoZSBzcGVjaWZpZWQgdmVyc2lvbicsXG4gICAgKTtcbiAgICBhcmdzLmV4YW1wbGUoXG4gICAgICBcInByb2plbiBuZXcgcHl0aG9uIC0taGVscFwiLFxuICAgICAgJ1Nob3dzIGFsbCBvcHRpb25zIGF2YWlsYWJsZSBmb3IgdGhlIGJ1aWx0LWluIHByb2plY3QgdHlwZSBcInB5dGhvblwiJyxcbiAgICApO1xuXG4gICAgZm9yIChjb25zdCB0eXBlIG9mIGludmVudG9yeS5kaXNjb3ZlcigpKSB7XG4gICAgICBhcmdzLmNvbW1hbmQodHlwZS5wamlkLCB0eXBlLmRvY3MgPz8gXCJcIiwge1xuICAgICAgICBidWlsZGVyOiAoY2FyZ3MpID0+IHtcbiAgICAgICAgICBjYXJncy5zaG93SGVscE9uRmFpbChmYWxzZSk7XG4gICAgICAgICAgY2FyZ3Muc3RyaWN0T3B0aW9ucygpO1xuXG4gICAgICAgICAgZm9yIChjb25zdCBvcHRpb24gb2YgdHlwZS5vcHRpb25zID8/IFtdKSB7XG4gICAgICAgICAgICAvLyBub3QgYWxsIHR5cGVzIGNhbiBiZSByZXByZXNlbnRlZCBpbiB0aGUgY2xpXG4gICAgICAgICAgICBpZiAoIWFyZ1R5cGVTdXBwb3J0ZWQob3B0aW9uKSkge1xuICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgZGVmYXVsdFZhbHVlID0gYXJnSW5pdGlhbFZhbHVlKG9wdGlvbik7XG4gICAgICAgICAgICBjYXJncy5vcHRpb24ob3B0aW9uLnN3aXRjaCwge1xuICAgICAgICAgICAgICBncm91cDogIW9wdGlvbi5vcHRpb25hbCA/IFwiUmVxdWlyZWQ6XCIgOiBcIk9wdGlvbmFsOlwiLFxuICAgICAgICAgICAgICB0eXBlOiBhcmdUeXBlKG9wdGlvbiksXG4gICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBhcmdEZXNjKG9wdGlvbiksXG4gICAgICAgICAgICAgIHJlcXVpcmVkOiAhb3B0aW9uLm9wdGlvbmFsLFxuICAgICAgICAgICAgICAvLyB5YXJncyBiZWhhdmVzIGRpZmZlcmVudGx5IGZvciBhcnJheXMgaWYgdGhlIGRlZmF1bHRWYWx1ZSBwcm9wZXJ0eSBpcyBwcmVzZW50IG9yIG5vdFxuICAgICAgICAgICAgICAuLi4oIW9wdGlvbi5vcHRpb25hbCAmJiBkZWZhdWx0VmFsdWVcbiAgICAgICAgICAgICAgICA/IHsgZGVmYXVsdDogZGVmYXVsdFZhbHVlIH1cbiAgICAgICAgICAgICAgICA6IHt9KSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBjYXJncztcbiAgICAgICAgfSxcbiAgICAgICAgaGFuZGxlcjogKGFyZ3YpID0+IGluaXRQcm9qZWN0KHByb2Nlc3MuY3dkKCksIHR5cGUsIGFyZ3YpLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gRGlzYWJsZSBzdHJpY3QgbW9kZSwgb3RoZXJ3aXNlIHRoZSBjYXRjaC1hbGwgZG9lc24ndCB3b3JrXG4gICAgYXJncy5zdHJpY3RDb21tYW5kcyhmYWxzZSk7XG4gICAgYXJnc1xuICAgICAgLmNvbW1hbmQoe1xuICAgICAgICBjb21tYW5kOiBcIipcIixcbiAgICAgICAgZGVzY3JpYmU6IGZhbHNlLFxuICAgICAgICBoYW5kbGVyLFxuICAgICAgfSlcbiAgICAgIC5taWRkbGV3YXJlKChhcmd2KSA9PiB7XG4gICAgICAgIC8vIG1hbnVhbGx5IHNldCB0aGUgbWF0Y2hlZCBjb21tYW5kIGFzIHRoZSBwcm9qZWN0IHR5cGVcbiAgICAgICAgYXJndi5wcm9qZWN0VHlwZU5hbWUgPSBhcmd2Ll9bMV07XG4gICAgICB9LCB0cnVlKTtcblxuICAgIHJldHVybiBhcmdzO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGhhbmRsZXIoYXJnczogYW55KSB7XG4gICAgcmV0dXJuIGhhbmRsZXIoYXJncyk7XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gaGFuZGxlcihhcmdzOiBhbnkpIHtcbiAgdHJ5IHtcbiAgICAvLyBoYW5kbGUgLS1mcm9tIHdoaWNoIG1lYW5zIHdlIHdhbnQgdG8gZmlyc3QgaW5zdGFsbCBhIGpzaWkgbW9kdWxlIGFuZCB0aGVuXG4gICAgLy8gY3JlYXRlIGEgcHJvamVjdCBkZWZpbmVkIHdpdGhpbiB0aGlzIG1vZHVsZS5cbiAgICBpZiAoYXJncy5mcm9tKSB7XG4gICAgICBhcmdzLmZyb20gPSBub3JtYWxpemVQZXJzaXN0ZWRQYXRoKGFyZ3MuZnJvbSk7XG5cbiAgICAgIHJldHVybiBhd2FpdCBpbml0UHJvamVjdEZyb21Nb2R1bGUocHJvY2Vzcy5jd2QoKSwgYXJncy5mcm9tLCBhcmdzKTtcbiAgICB9XG5cbiAgICAvLyBwcm9qZWN0IHR5cGUgaXMgZGVmaW5lZCBidXQgd2FzIG5vdCBtYXRjaGVkIGJ5IHlhcmdzLCBzbyBwcmludCB0aGUgbGlzdCBvZiBzdXBwb3J0ZWQgdHlwZXNcbiAgICBpZiAoYXJncy5wcm9qZWN0VHlwZU5hbWUpIHtcbiAgICAgIGNvbnN0IHR5cGVzID0gaW52ZW50b3J5LmRpc2NvdmVyKCk7XG4gICAgICB0aHJvdyBuZXcgQ2xpRXJyb3IoXG4gICAgICAgIGBQcm9qZWN0IHR5cGUgXCIke2FyZ3MucHJvamVjdFR5cGVOYW1lfVwiIG5vdCBmb3VuZC4gQXZhaWxhYmxlIHR5cGVzOlxcbmAsXG4gICAgICAgIC4uLnR5cGVzLm1hcCgodCkgPT4gYCAgICAke3QucGppZH1gKSxcbiAgICAgICAgXCJcIixcbiAgICAgICAgYFBsZWFzZSBzcGVjaWZ5IGEgcHJvamVjdCB0eXBlLmAsXG4gICAgICAgIGBFeGFtcGxlOiBwbnBtIGRseCBwcm9qZW4gbmV3ICR7dHlwZXNbMF0ucGppZH1gLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBIYW5kbGVzIHRoZSB1c2UgY2FzZSB0aGF0IG5vdGhpbmcgd2FzIHNwZWNpZmllZCBzaW5jZSBQUk9KRUNULVRZUEUgaXMgbm93IGFuIG9wdGlvbmFsIHBvc2l0aW9uYWwgcGFyYW1ldGVyXG4gICAgeWFyZ3Muc2hvd0hlbHAoKTtcbiAgfSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcbiAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBDbGlFcnJvcikge1xuICAgICAgbG9nZ2luZy5lcnJvcihlcnJvci5tZXNzYWdlKTtcbiAgICAgIGxvZ2dpbmcuZW1wdHkoKTtcbiAgICAgIHByb2Nlc3MuZXhpdENvZGUgPSAxO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIHVua25vd24gZXJyb3IsIGxpa2VseSBhIG5vZGUgcnVudGltZSBleGNlcHRpb24gaW4gcHJvamVjdCBjb2RlXG4gICAgLy8gcmV0aHJvdyBzbyB0aGUgZnVsbCBzdGFjayB0cmFjZSBpcyBkaXNwbGF5ZWRcbiAgICB0aHJvdyBlcnJvcjtcbiAgfVxufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIHlhcmdzIG9wdGlvbiB0eXBlIGZvciBhIGdpdmVuIHByb2plY3Qgb3B0aW9uXG4gKi9cbmZ1bmN0aW9uIGFyZ1R5cGUoXG4gIG9wdGlvbjogaW52ZW50b3J5LlByb2plY3RPcHRpb24sXG4pOiBcInN0cmluZ1wiIHwgXCJib29sZWFuXCIgfCBcIm51bWJlclwiIHwgXCJhcnJheVwiIHtcbiAgaWYgKG9wdGlvbi5raW5kID09PSBcImVudW1cIikge1xuICAgIHJldHVybiBcInN0cmluZ1wiO1xuICB9XG5cbiAgaWYgKGlzUHJpbWl0aXZlQXJyYXlPcHRpb24ob3B0aW9uKSkge1xuICAgIHJldHVybiBcImFycmF5XCI7XG4gIH1cblxuICByZXR1cm4gb3B0aW9uLnNpbXBsZVR5cGUgYXMgXCJzdHJpbmdcIiB8IFwiYm9vbGVhblwiIHwgXCJudW1iZXJcIjtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBkZXNjcmlwdGlvbiBmb3IgYSBnaXZlbiBwcm9qZWN0IG9wdGlvblxuICovXG5mdW5jdGlvbiBhcmdEZXNjKG9wdGlvbjogaW52ZW50b3J5LlByb2plY3RPcHRpb24pOiBzdHJpbmcge1xuICBsZXQgZGVzYyA9IFtvcHRpb24uZG9jcz8ucmVwbGFjZSgvXFwgKlxcLiQvLCBcIlwiKSA/PyBcIlwiXTtcblxuICBjb25zdCBoZWxwRGVmYXVsdCA9IG9wdGlvbi5pbml0aWFsVmFsdWUgPz8gb3B0aW9uLmRlZmF1bHQ7XG4gIGlmIChvcHRpb24ub3B0aW9uYWwgJiYgaGVscERlZmF1bHQpIHtcbiAgICBkZXNjLnB1c2goXG4gICAgICBgW2RlZmF1bHQ6ICR7aGVscERlZmF1bHQucmVwbGFjZSgvXlxcICotLywgXCJcIikucmVwbGFjZSgvXFwuJC8sIFwiXCIpLnRyaW0oKX1dYCxcbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIGRlc2Muam9pbihcIiBcIik7XG59XG5cbi8qKlxuICogQ29tcHV0ZSB0aGUgaW5pdGlhbCB2YWx1ZSBmb3IgYSBnaXZlbiBwcm9qZWN0IG9wdGlvblxuICovXG5mdW5jdGlvbiBhcmdJbml0aWFsVmFsdWUoXG4gIG9wdGlvbjogaW52ZW50b3J5LlByb2plY3RPcHRpb24sXG4gIGN3ZCA9IHByb2Nlc3MuY3dkKCksXG4pOiBhbnkge1xuICAvLyBpZiB3ZSBoYXZlIGRldGVybWluZWQgYW4gaW5pdGlhbCB2YWx1ZSBmb3IgdGhlIGZpZWxkXG4gIC8vIHdlIGNhbiBzaG93IHRoYXQgdmFsdWUgaW4gLS1oZWxwXG4gIGlmIChvcHRpb24uaW5pdGlhbFZhbHVlKSB7XG4gICAgcmV0dXJuIHJlbmRlckRlZmF1bHQoY3dkLCBvcHRpb24uaW5pdGlhbFZhbHVlKTtcbiAgfVxufVxuXG4vKipcbiAqIEN1cnJlbnRseSB3ZSBvbmx5IHN1cHBvcnQgdGhlc2UgZmllbGQgdHlwZXMgYXMgY29tbWFuZCBsaW5lIG9wdGlvbnM6XG4gKiAtIHByaW1pdGl2ZXMgKHN0cmluZywgbnVtYmVyLCBib29sZWFuKVxuICogLSBsaXN0cyBvZiBwcmltaXRpdmVzXG4gKiAtIGVudW1zXG4gKi9cbmZ1bmN0aW9uIGFyZ1R5cGVTdXBwb3J0ZWQob3B0aW9uOiBpbnZlbnRvcnkuUHJvamVjdE9wdGlvbik6IGJvb2xlYW4ge1xuICByZXR1cm4gKFxuICAgIG9wdGlvbi5zaW1wbGVUeXBlID09PSBcInN0cmluZ1wiIHx8XG4gICAgb3B0aW9uLnNpbXBsZVR5cGUgPT09IFwibnVtYmVyXCIgfHxcbiAgICBvcHRpb24uc2ltcGxlVHlwZSA9PT0gXCJib29sZWFuXCIgfHxcbiAgICBvcHRpb24ua2luZCA9PT0gXCJlbnVtXCIgfHxcbiAgICBpc1ByaW1pdGl2ZUFycmF5T3B0aW9uKG9wdGlvbilcbiAgKTtcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgdGhlIGdpdmVuIG9wdGlvbiBpcyBhIHByaW1pdGl2ZSBhcnJheVxuICovXG5mdW5jdGlvbiBpc1ByaW1pdGl2ZUFycmF5T3B0aW9uKG9wdGlvbjogaW52ZW50b3J5LlByb2plY3RPcHRpb24pOiBib29sZWFuIHtcbiAgcmV0dXJuIEJvb2xlYW4oXG4gICAgb3B0aW9uLmpzb25MaWtlICYmXG4gICAgb3B0aW9uLmZ1bGxUeXBlLmNvbGxlY3Rpb24/LmtpbmQgPT09IFwiYXJyYXlcIiAmJlxuICAgIG9wdGlvbi5mdWxsVHlwZS5jb2xsZWN0aW9uLmVsZW1lbnR0eXBlLnByaW1pdGl2ZSAmJlxuICAgIFtcInN0cmluZ1wiLCBcIm51bWJlclwiXS5pbmNsdWRlcyhcbiAgICAgIG9wdGlvbi5mdWxsVHlwZS5jb2xsZWN0aW9uLmVsZW1lbnR0eXBlLnByaW1pdGl2ZSxcbiAgICApLFxuICApO1xufVxuXG4vKipcbiAqIEdpdmVuIGEgdmFsdWUgZnJvbSBcIkBkZWZhdWx0XCIsIHByb2Nlc3NlcyBtYWNyb3MgYW5kIHJldHVybnMgYSBzdHJpbmdpZmllZFxuICogKHF1b3RlZCkgcmVzdWx0LlxuICpcbiAqIEByZXR1cm5zIGEgamF2YXNjcmlwdCBwcmltaXRpdmUgKGNvdWxkIGJlIGEgc3RyaW5nLCBudW1iZXIgb3IgYm9vbGVhbilcbiAqL1xuZnVuY3Rpb24gcmVuZGVyRGVmYXVsdChjd2Q6IHN0cmluZywgdmFsdWU6IHN0cmluZykge1xuICByZXR1cm4gdHJ5UHJvY2Vzc01hY3JvKGN3ZCwgdmFsdWUpID8/IEpTT04ucGFyc2UodmFsdWUpO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIHlhcmdzIGNvbW1hbmQgbGluZSBzd2l0Y2hlcyB0byBwcm9qZWN0IHR5cGUgcHJvcHMuXG4gKiBAcGFyYW0gdHlwZSBQcm9qZWN0IHR5cGVcbiAqIEBwYXJhbSBhcmd2IENvbW1hbmQgbGluZSBzd2l0Y2hlc1xuICovXG5mdW5jdGlvbiBjb21tYW5kTGluZVRvUHJvcHMoXG4gIGN3ZDogc3RyaW5nLFxuICB0eXBlOiBpbnZlbnRvcnkuUHJvamVjdFR5cGUsXG4gIGFyZ3Y6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuKTogUmVjb3JkPHN0cmluZywgYW55PiB7XG4gIGNvbnN0IHByb3BzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge307XG5cbiAgLy8gaW5pdGlhbGl6ZSBwcm9wcyB3aXRoIGRlZmF1bHQgdmFsdWVzXG4gIGZvciAoY29uc3QgcHJvcCBvZiB0eXBlLm9wdGlvbnMpIHtcbiAgICBwcm9wc1twcm9wLm5hbWVdID0gYXJnSW5pdGlhbFZhbHVlKHByb3AsIGN3ZCk7XG4gIH1cblxuICBmb3IgKGNvbnN0IFthcmcsIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhhcmd2KSkge1xuICAgIGZvciAoY29uc3QgcHJvcCBvZiB0eXBlLm9wdGlvbnMpIHtcbiAgICAgIGlmIChwcm9wLnN3aXRjaCA9PT0gYXJnKSB7XG4gICAgICAgIGxldCBjdXJyID0gcHJvcHM7XG4gICAgICAgIGNvbnN0IHF1ZXVlID0gWy4uLnByb3AucGF0aF07XG4gICAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgICAgY29uc3QgcCA9IHF1ZXVlLnNoaWZ0KCk7XG4gICAgICAgICAgaWYgKCFwKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHF1ZXVlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgY3VycltwXSA9IHZhbHVlO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjdXJyW3BdID0gY3VycltwXSA/PyB7fTtcbiAgICAgICAgICAgIGN1cnIgPSBjdXJyW3BdO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBwcm9wcztcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZXMgYSBuZXcgcHJvamVjdCBmcm9tIGFuIGV4dGVybmFsIG1vZHVsZS5cbiAqXG4gKiBAcGFyYW0gc3BlYyBUaGUgbmFtZSBvZiB0aGUgZXh0ZXJuYWwgbW9kdWxlIHRvIGxvYWRcbiAqIEBwYXJhbSBhcmdzIENvbW1hbmQgbGluZSBhcmd1bWVudHMgKGluY2wuIHByb2plY3QgdHlwZSlcbiAqL1xuYXN5bmMgZnVuY3Rpb24gaW5pdFByb2plY3RGcm9tTW9kdWxlKGJhc2VEaXI6IHN0cmluZywgc3BlYzogc3RyaW5nLCBhcmdzOiBhbnkpIHtcbiAgY29uc3QgcHJvamVuVmVyc2lvbiA9IGFyZ3MucHJvamVuVmVyc2lvbiA/PyBcImxhdGVzdFwiO1xuICBjb25zdCBpbnN0YWxsQ29tbWFuZCA9IHJlbmRlckluc3RhbGxDb21tYW5kKFxuICAgIGJhc2VEaXIsXG4gICAgYHByb2plbkAke3Byb2plblZlcnNpb259YCxcbiAgKTtcbiAgaWYgKGFyZ3MucHJvamVuVmVyc2lvbikge1xuICAgIGV4ZWMoaW5zdGFsbENvbW1hbmQsIHsgY3dkOiBiYXNlRGlyIH0pO1xuICB9IGVsc2Uge1xuICAgIC8vIGRvIG5vdCBvdmVyd3JpdGUgZXhpc3RpbmcgaW5zdGFsbGF0aW9uXG4gICAgZXhlYyhcbiAgICAgIGBucG0gbHMgLS1wcmVmaXg9XCIke2Jhc2VEaXJ9XCIgLS1kZXB0aD0wIC0tcGF0dGVybiBwcm9qZW4gfHwgJHtpbnN0YWxsQ29tbWFuZH1gLFxuICAgICAgeyBjd2Q6IGJhc2VEaXIgfSxcbiAgICApO1xuICB9XG5cbiAgY29uc3QgaW5zdGFsbFBhY2thZ2VXaXRoQ2xpRXJyb3IgPSAoYjogc3RyaW5nLCBzOiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gaW5zdGFsbFBhY2thZ2UoYiwgcyk7XG4gICAgfSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcbiAgICAgIGNvbnN0IHN0ZGVyciA9XG4gICAgICAgIChlcnJvciBhcyBTcGF3blN5bmNSZXR1cm5zPEJ1ZmZlcj4pPy5zdGRlcnI/LnRvU3RyaW5nKCkgPz8gXCJcIjtcbiAgICAgIGNvbnN0IGlzTG9jYWwgPSBzdGRlcnIuaW5jbHVkZXMoXCJjb2RlIEVOT0VOVFwiKTtcbiAgICAgIGNvbnN0IGlzUmVnaXN0cnkgPSBzdGRlcnIuaW5jbHVkZXMoXCJjb2RlIEU0MDRcIik7XG4gICAgICBpZiAoaXNMb2NhbCB8fCBpc1JlZ2lzdHJ5KSB7XG4gICAgICAgIGNvbnN0IG1vZHVsZVNvdXJjZSA9IGlzTG9jYWwgPyBcInBhdGhcIiA6IFwicmVnaXN0cnlcIjtcbiAgICAgICAgdGhyb3cgbmV3IENsaUVycm9yKFxuICAgICAgICAgIGBDb3VsZCBub3QgZmluZCAnJHtzfScgaW4gdGhpcyAke21vZHVsZVNvdXJjZX0uIFBsZWFzZSBlbnN1cmUgdGhhdCB0aGUgcGFja2FnZSBleGlzdHMsIHlvdSBoYXZlIGFjY2VzcyBpdCBhbmQgdHJ5IGFnYWluLmAsXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBtb2R1bGVOYW1lID0gaW5zdGFsbFBhY2thZ2VXaXRoQ2xpRXJyb3IoYmFzZURpciwgc3BlYyk7XG4gIGxvZ2dpbmcuZW1wdHkoKTtcblxuICAvLyBGaW5kIHRoZSBqdXN0IGluc3RhbGxlZCBwYWNrYWdlIGFuZCBkaXNjb3ZlciB0aGUgcmVzdCByZWN1cnNpdmVseSBmcm9tIHRoaXMgcGFja2FnZSBmb2xkZXJcbiAgY29uc3QgbW9kdWxlRGlyID0gZmluZEpzaWlGaWxlUGF0aChiYXNlRGlyLCBtb2R1bGVOYW1lKTtcblxuICBpZiAoIW1vZHVsZURpcikge1xuICAgIHRocm93IG5ldyBDbGlFcnJvcihcbiAgICAgIGBNb2R1bGUgJyR7bW9kdWxlTmFtZX0nIGRvZXMgbm90IGxvb2sgbGlrZSBpdCBpcyBjb21wYXRpYmxlIHdpdGggcHJvamVuLiBSZWFzb246IENhbm5vdCBmaW5kICcke21vZHVsZU5hbWV9Ly5qc2lpJy4gQWxsIHByb2plbiBtb2R1bGVzIG11c3QgYmUganNpaSBtb2R1bGVzIWAsXG4gICAgKTtcbiAgfVxuXG4gIC8vIE9ubHkgbGVhdmUgcHJvamVjdHMgZnJvbSB0aGUgbWFpbiAocmVxdWVzdGVkKSBwYWNrYWdlXG4gIGNvbnN0IHByb2plY3RzID0gaW52ZW50b3J5XG4gICAgLmRpc2NvdmVyKG1vZHVsZURpcilcbiAgICAuZmlsdGVyKCh4KSA9PiB4Lm1vZHVsZU5hbWUgPT09IG1vZHVsZU5hbWUpOyAvLyBPbmx5IGxpc3QgcHJvamVjdCB0eXBlcyBmcm9tIHRoZSByZXF1ZXN0ZWQgJ2Zyb20nIG1vZHVsZVxuXG4gIGlmIChwcm9qZWN0cy5sZW5ndGggPCAxKSB7XG4gICAgdGhyb3cgbmV3IENsaUVycm9yKFxuICAgICAgYE5vIHByb2plY3QgdHlwZXMgZm91bmQgYWZ0ZXIgaW5zdGFsbGluZyBcIiR7c3BlY31cIi4gVGhlIG1vZHVsZSBtdXN0IGV4cG9ydCBhdCBsZWFzdCBvbmUgY2xhc3Mgd2hpY2ggZXh0ZW5kcyBcInByb2plbi5Qcm9qZWN0XCIuYCxcbiAgICApO1xuICB9XG5cbiAgY29uc3QgcmVxdWVzdGVkID0gYXJncy5wcm9qZWN0VHlwZU5hbWU7XG4gIGNvbnN0IHR5cGVzID0gcHJvamVjdHMubWFwKChwKSA9PiBwLnBqaWQpO1xuXG4gIC8vIGlmIHVzZXIgZGlkIG5vdCBzcGVjaWZ5IGEgcHJvamVjdCB0eXBlIGJ1dCB0aGUgbW9kdWxlIGhhcyBtb3JlIHRoYW4gb25lLCB3ZSBuZWVkIHRoZW0gdG8gdGVsbCB1cyB3aGljaCBvbmUuLi5cbiAgaWYgKCFyZXF1ZXN0ZWQgJiYgcHJvamVjdHMubGVuZ3RoID4gMSkge1xuICAgIHRocm93IG5ldyBDbGlFcnJvcihcbiAgICAgIGBNdWx0aXBsZSBwcm9qZWN0IHR5cGVzIGZvdW5kIGFmdGVyIGluc3RhbGxpbmcgXCIke3NwZWN9XCI6XFxuYCxcbiAgICAgIC4uLnR5cGVzLm1hcCgodCkgPT4gYCAgICAke3R9YCksXG4gICAgICBcIlwiLFxuICAgICAgYFBsZWFzZSBzcGVjaWZ5IGEgcHJvamVjdCB0eXBlLmAsXG4gICAgICBgRXhhbXBsZTogcG5wbSBkbHggcHJvamVuIG5ldyAtLWZyb20gJHtzcGVjfSAke3R5cGVzWzBdfWAsXG4gICAgKTtcbiAgfVxuXG4gIC8vIGlmIHVzZXIgZGlkIG5vdCBzcGVjaWZ5IGEgdHlwZSAoYW5kIHdlIGtub3cgd2UgaGF2ZSBvbmx5IG9uZSksIHRoZSBzZWxlY3QgaXQuIG90aGVyd2lzZSwgc2VhcmNoIGJ5IHBqaWQuXG4gIGNvbnN0IHR5cGUgPSAhcmVxdWVzdGVkXG4gICAgPyBwcm9qZWN0c1swXVxuICAgIDogcHJvamVjdHMuZmluZCgocCkgPT4gcC5wamlkID09PSByZXF1ZXN0ZWQpO1xuICBpZiAoIXR5cGUpIHtcbiAgICB0aHJvdyBuZXcgQ2xpRXJyb3IoXG4gICAgICBgUHJvamVjdCB0eXBlIFwiJHtyZXF1ZXN0ZWR9XCIgbm90IGZvdW5kIGluIFwiJHtzcGVjfVwiLiBGb3VuZDpcXG5gLFxuICAgICAgLi4udHlwZXMubWFwKCh0KSA9PiBgICAgICR7dH1gKSxcbiAgICAgIFwiXCIsXG4gICAgICBgUGxlYXNlIHNwZWNpZnkgYSB2YWxpZCBwcm9qZWN0IHR5cGUuYCxcbiAgICAgIGBFeGFtcGxlOiBwbnBtIGRseCBwcm9qZW4gbmV3IC0tZnJvbSAke3NwZWN9ICR7dHlwZXNbMF19YCxcbiAgICApO1xuICB9XG5cbiAgY29uc3QgbWlzc2luZ09wdGlvbnMgPSBbXTtcblxuICBmb3IgKGNvbnN0IG9wdGlvbiBvZiB0eXBlLm9wdGlvbnMgPz8gW10pIHtcbiAgICAvLyBub3QgYWxsIHR5cGVzIGNhbiBiZSByZXByZXNlbnRlZCBpbiB0aGUgY2xpXG4gICAgaWYgKCFhcmdUeXBlU3VwcG9ydGVkKG9wdGlvbikpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIC8vIHBhcnNlIGFsbG93ZWQgdHlwZXNcbiAgICBpZiAoYXJnc1tvcHRpb24ubmFtZV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgYXJnc1tvcHRpb24ubmFtZV0gPSBwYXJzZUFyZyhhcmdzW29wdGlvbi5uYW1lXSwgYXJnVHlwZShvcHRpb24pLCBvcHRpb24pO1xuICAgICAgYXJnc1tvcHRpb24uc3dpdGNoXSA9IGFyZ3Nbb3B0aW9uLm5hbWVdO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgLy8gUmVxdWlyZWQgb3B0aW9uIHdpdGggYSBkZWZhdWx0XG4gICAgaWYgKCFvcHRpb24ub3B0aW9uYWwgJiYgb3B0aW9uLmRlZmF1bHQgJiYgb3B0aW9uLmRlZmF1bHQgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgIGNvbnN0IGRlZmF1bHRWYWx1ZSA9IHJlbmRlckRlZmF1bHQoYmFzZURpciwgb3B0aW9uLmRlZmF1bHQpO1xuICAgICAgYXJnc1tvcHRpb24ubmFtZV0gPSBkZWZhdWx0VmFsdWU7XG4gICAgICBhcmdzW29wdGlvbi5zd2l0Y2hdID0gZGVmYXVsdFZhbHVlO1xuICAgIH1cblxuICAgIC8vIFJlcXVpcmVkIG9wdGlvbiwgYnV0IHdlIGNvdWxkIG5vdCBmaW5kIGEgdmFsdWVcbiAgICBpZiAoIW9wdGlvbi5vcHRpb25hbCAmJiAhYXJnc1tvcHRpb24ubmFtZV0pIHtcbiAgICAgIG1pc3NpbmdPcHRpb25zLnB1c2goXG4gICAgICAgIGAtLSR7b3B0aW9uLnN3aXRjaH0gWyR7YXJnVHlwZShvcHRpb24pfV0gJHthcmdEZXNjKG9wdGlvbil9YCxcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLy8gV2UgYXJlIG1pc3Npbmcgc29tZSByZXF1aXJlZCBvcHRpb25zXG4gIGlmIChtaXNzaW5nT3B0aW9ucy5sZW5ndGgpIHtcbiAgICB0aHJvdyBuZXcgQ2xpRXJyb3IoXG4gICAgICBgQ2Fubm90IGNyZWF0ZSBcIiR7dHlwZS5mcW59XCIuIE1pc3NpbmcgcmVxdWlyZWQgb3B0aW9uJHtcbiAgICAgICAgbWlzc2luZ09wdGlvbnMubGVuZ3RoID4gMSA/IFwic1wiIDogXCJcIlxuICAgICAgfTpgLFxuICAgICAgLi4ubWlzc2luZ09wdGlvbnMubWFwKChtKSA9PiBgICAgICR7bX1gKSxcbiAgICApO1xuICB9XG5cbiAgLy8gaW5jbHVkZSBhIGRldiBkZXBlbmRlbmN5IGZvciB0aGUgZXh0ZXJuYWwgbW9kdWxlXG4gIGFyZ3MuZGV2RGVwcyA9IFtzcGVjXTtcbiAgYXJnc1tcImRldi1kZXBzXCJdID0gW3NwZWNdO1xuXG4gIGF3YWl0IGluaXRQcm9qZWN0KGJhc2VEaXIsIHR5cGUsIGFyZ3MpO1xufVxuXG4vKipcbiAqIFBhcnNlIGNvbW1hbmQgbGluZSB2YWx1ZSBhcyBvcHRpb24gdHlwZVxuICovXG5mdW5jdGlvbiBwYXJzZUFyZyhcbiAgdmFsdWU6IGFueSxcbiAgdHlwZTogc3RyaW5nLFxuICBvcHRpb24/OiBpbnZlbnRvcnkuUHJvamVjdE9wdGlvbixcbik6IGFueSB7XG4gIHN3aXRjaCAodHlwZSkge1xuICAgIGNhc2UgXCJudW1iZXJcIjpcbiAgICAgIHJldHVybiBwYXJzZUludCh2YWx1ZSk7XG4gICAgY2FzZSBcImJvb2xlYW5cIjpcbiAgICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgPyBpc1RydXRoeSh2YWx1ZSkgOiB2YWx1ZTtcbiAgICBjYXNlIFwiYXJyYXlcIjpcbiAgICAgIGlmICghQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgdmFsdWUgPSBbdmFsdWVdO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHZhbHVlLm1hcCgodjogYW55KSA9PlxuICAgICAgICBwYXJzZUFyZyhcbiAgICAgICAgICB2LFxuICAgICAgICAgIG9wdGlvbj8uZnVsbFR5cGUuY29sbGVjdGlvbj8uZWxlbWVudHR5cGUucHJpbWl0aXZlIHx8IFwic3RyaW5nXCIsXG4gICAgICAgICksXG4gICAgICApO1xuICAgIC8vIHJldHVybiB2YWx1ZSB1bmNoYW5nZWRcbiAgICBjYXNlIFwic3RyaW5nXCI6XG4gICAgZGVmYXVsdDpcbiAgICAgIC8vIGlmIHdlIGhhdmUgYW4gdW5leHBlY3RlZCBhcnJheSwgdXNlIHRoZSBmaXJzdCBlbGVtZW50XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlWzBdO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHZhbHVlO1xuICB9XG59XG5cbi8qKlxuICogR2VuZXJhdGVzIGEgbmV3IHByb2plY3QuXG4gKiBAcGFyYW0gdHlwZSBQcm9qZWN0IHR5cGVcbiAqIEBwYXJhbSBhcmdzIENvbW1hbmQgbGluZSBhcmd1bWVudHNcbiAqIEBwYXJhbSBhZGRpdGlvbmFsUHJvcHMgQWRkaXRpb25hbCBwYXJhbWV0ZXJzIHRvIGluY2x1ZGUgaW4gLnByb2plbnJjLmpzXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGluaXRQcm9qZWN0KFxuICBiYXNlRGlyOiBzdHJpbmcsXG4gIHR5cGU6IGludmVudG9yeS5Qcm9qZWN0VHlwZSxcbiAgYXJnczogYW55LFxuKSB7XG4gIC8vIGNvbnZlcnQgY29tbWFuZCBsaW5lIGFyZ3VtZW50cyB0byBwcm9qZWN0IHByb3BzIHVzaW5nIHR5cGUgaW5mb3JtYXRpb25cbiAgY29uc3QgcHJvcHMgPSBjb21tYW5kTGluZVRvUHJvcHMoYmFzZURpciwgdHlwZSwgYXJncyk7XG5cbiAgUHJvamVjdHMuY3JlYXRlUHJvamVjdCh7XG4gICAgZGlyOiBwcm9wcy5vdXRkaXIgPz8gYmFzZURpcixcbiAgICBwcm9qZWN0RnFuOiB0eXBlLmZxbixcbiAgICBwcm9qZWN0T3B0aW9uczogcHJvcHMsXG4gICAgb3B0aW9uSGludHM6IGFyZ3MuY29tbWVudHNcbiAgICAgID8gSW5pdFByb2plY3RPcHRpb25IaW50cy5GRUFUVVJFRFxuICAgICAgOiBJbml0UHJvamVjdE9wdGlvbkhpbnRzLk5PTkUsXG4gICAgc3ludGg6IGFyZ3Muc3ludGgsXG4gICAgcG9zdDogYXJncy5wb3N0LFxuICB9KTtcblxuICBpZiAoZnMuZXhpc3RzU3luYyhwYXRoLmpvaW4oYmFzZURpciwgXCJwYWNrYWdlLmpzb25cIikpICYmIGFyZ3MucG9zdCkge1xuICAgIGV4ZWMoXCJucG0gcnVuIGVzbGludCAtLWlmLXByZXNlbnRcIiwgeyBjd2Q6IGJhc2VEaXIgfSk7XG4gIH1cblxuICBpZiAoYXJncy5naXQpIHtcbiAgICBjb25zdCBnaXQgPSAoY21kOiBzdHJpbmcpID0+IGV4ZWMoYGdpdCAke2NtZH1gLCB7IGN3ZDogYmFzZURpciB9KTtcbiAgICBjb25zdCBnaXR2ZXJzaW9uOiBzdHJpbmcgPSBnZXRHaXRWZXJzaW9uKFxuICAgICAgZXhlY0NhcHR1cmUoXCJnaXQgLS12ZXJzaW9uXCIsIHsgY3dkOiBiYXNlRGlyIH0pLnRvU3RyaW5nKCksXG4gICAgKTtcbiAgICBsb2dnaW5nLmRlYnVnKFwic3lzdGVtIHVzaW5nIGdpdCB2ZXJzaW9uIFwiLCBnaXR2ZXJzaW9uKTtcbiAgICAvLyBgZ2l0IGNvbmZpZyBpbml0LmRlZmF1bHRCcmFuY2hgIGFuZCBgZ2l0IGluaXQgLWJgIGFyZSBvbmx5IGF2YWlsYWJsZSBzaW5jZSBnaXQgMi4yOC4wXG4gICAgaWYgKGdpdHZlcnNpb24gJiYgc2VtdmVyLmd0ZShnaXR2ZXJzaW9uLCBcIjIuMjguMFwiKSkge1xuICAgICAgY29uc3QgZGVmYXVsdEdpdEluaXRCcmFuY2ggPVxuICAgICAgICBleGVjT3JVbmRlZmluZWQoXCJnaXQgY29uZmlnIGluaXQuZGVmYXVsdEJyYW5jaFwiLCB7XG4gICAgICAgICAgY3dkOiBiYXNlRGlyLFxuICAgICAgICB9KT8udHJpbSgpIHx8IFwibWFpblwiO1xuICAgICAgZ2l0KGBpbml0IC1iICR7ZGVmYXVsdEdpdEluaXRCcmFuY2h9YCk7XG4gICAgICBnaXQoXCJhZGQgLlwiKTtcbiAgICAgIGdpdCgnY29tbWl0IC0tYWxsb3ctZW1wdHkgLW0gXCJjaG9yZTogcHJvamVjdCBjcmVhdGVkIHdpdGggcHJvamVuXCInKTtcbiAgICAgIGxvZ2dpbmcuZGVidWcoYGRlZmF1bHQgYnJhbmNoIG5hbWUgc2V0IHRvICR7ZGVmYXVsdEdpdEluaXRCcmFuY2h9YCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGdpdChcImluaXRcIik7XG4gICAgICBnaXQoXCJhZGQgLlwiKTtcbiAgICAgIGdpdCgnY29tbWl0IC0tYWxsb3ctZW1wdHkgLW0gXCJjaG9yZTogcHJvamVjdCBjcmVhdGVkIHdpdGggcHJvamVuXCInKTtcbiAgICAgIGxvZ2dpbmcuZGVidWcoXG4gICAgICAgIFwib2xkZXIgdmVyc2lvbiBvZiBnaXQgZGV0ZWN0ZWQsIGNoYW5nZWQgZGVmYXVsdCBicmFuY2ggbmFtZSB0byBtYWluXCIsXG4gICAgICApO1xuICAgICAgZ2l0KFwiYnJhbmNoIC1NIG1haW5cIik7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IG5ldyBDb21tYW5kKCk7XG4iXX0=
414
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV3LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NsaS9jbWRzL25ldy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUNBLHVDQUF5QjtBQUN6QiwyQ0FBNkI7QUFDN0IsK0NBQWlDO0FBQ2pDLDZDQUErQjtBQUMvQiwyREFBNkM7QUFDN0MsdURBQXlDO0FBQ3pDLHFEQUE0RDtBQUM1RCw2Q0FBMEM7QUFDMUMscUNBT29CO0FBQ3BCLHNDQUE0QztBQUM1QyxrQ0FLaUI7QUFFakIsTUFBTSxPQUFPO0lBQ0ssT0FBTyxHQUFHLG1DQUFtQyxDQUFDO0lBQzlDLFFBQVEsR0FBRztRQUN6Qiw4QkFBOEI7UUFDOUIsRUFBRTtRQUNGLGdGQUFnRjtRQUNoRix1Q0FBdUM7S0FDeEMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFFTixPQUFPLENBQUMsSUFBZ0I7UUFDN0IsSUFBSSxDQUFDLFVBQVUsQ0FBQyxtQkFBbUIsRUFBRTtZQUNuQyxRQUFRLEVBQ04sa0ZBQWtGO1lBQ3BGLElBQUksRUFBRSxRQUFRO1NBQ2YsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUU7WUFDbkIsSUFBSSxFQUFFLFNBQVM7WUFDZixPQUFPLEVBQUUsSUFBSTtZQUNiLElBQUksRUFBRSx3Q0FBd0M7U0FDL0MsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUU7WUFDdEIsSUFBSSxFQUFFLFNBQVM7WUFDZixPQUFPLEVBQUUsSUFBSTtZQUNiLElBQUksRUFBRSw4RUFBOEU7U0FDckYsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUU7WUFDbEIsSUFBSSxFQUFFLFFBQVE7WUFDZCxLQUFLLEVBQUUsR0FBRztZQUNWLElBQUksRUFBRSxzSEFBc0g7U0FDN0gsQ0FBQyxDQUFDO1FBQ0gsSUFB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LDhEQUE4RCxDQUFDLENBQUM7WUFDcEUsT0FBTyxDQUFDLEtBQUssQ0FBQyw4QkFBOEIsb0JBQW9CLEVBQUUsQ0FBQyxDQUFDO1FBQ3RFLENBQUM7YUFBTSxDQUFDO1lBQ04sR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ1osR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ2IsR0FBRyxDQUFDLDhEQUE4RCxDQUFDLENBQUM7WUFDcEUsT0FBTyxDQUFDLEtBQUssQ0FDWCxvRUFBb0UsQ0FDckUsQ0FBQztZQUNGLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ3hCLENBQUM7SUFDSCxDQUFDO0FBQ0gsQ0FBQztBQUVELGtCQUFlLElBQUksT0FBTyxFQUFFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFNwYXduU3luY1JldHVybnMgfSBmcm9tIFwiY2hpbGRfcHJvY2Vzc1wiO1xuaW1wb3J0ICogYXMgZnMgZnJvbSBcImZzXCI7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gXCJwYXRoXCI7XG5pbXBvcnQgKiBhcyBzZW12ZXIgZnJvbSBcInNlbXZlclwiO1xuaW1wb3J0ICogYXMgeWFyZ3MgZnJvbSBcInlhcmdzXCI7XG5pbXBvcnQgKiBhcyBpbnZlbnRvcnkgZnJvbSBcIi4uLy4uL2ludmVudG9yeVwiO1xuaW1wb3J0ICogYXMgbG9nZ2luZyBmcm9tIFwiLi4vLi4vbG9nZ2luZ1wiO1xuaW1wb3J0IHsgSW5pdFByb2plY3RPcHRpb25IaW50cyB9IGZyb20gXCIuLi8uLi9vcHRpb24taGludHNcIjtcbmltcG9ydCB7IFByb2plY3RzIH0gZnJvbSBcIi4uLy4uL3Byb2plY3RzXCI7XG5pbXBvcnQge1xuICBleGVjLFxuICBleGVjQ2FwdHVyZSxcbiAgZXhlY09yVW5kZWZpbmVkLFxuICBnZXRHaXRWZXJzaW9uLFxuICBpc1RydXRoeSxcbiAgbm9ybWFsaXplUGVyc2lzdGVkUGF0aCxcbn0gZnJvbSBcIi4uLy4uL3V0aWxcIjtcbmltcG9ydCB7IHRyeVByb2Nlc3NNYWNybyB9IGZyb20gXCIuLi9tYWNyb3NcIjtcbmltcG9ydCB7XG4gIENsaUVycm9yLFxuICBmaW5kSnNpaUZpbGVQYXRoLFxuICBpbnN0YWxsUGFja2FnZSxcbiAgcmVuZGVySW5zdGFsbENvbW1hbmQsXG59IGZyb20gXCIuLi91dGlsXCI7XG5cbmNsYXNzIENvbW1hbmQgaW1wbGVtZW50cyB5YXJncy5Db21tYW5kTW9kdWxlIHtcbiAgcHVibGljIHJlYWRvbmx5IGNvbW1hbmQgPSBcIm5ldyBbUFJPSkVDVC1UWVBFLU5BTUVdIFtPUFRJT05TXVwiO1xuICBwdWJsaWMgcmVhZG9ubHkgZGVzY3JpYmUgPSBbXG4gICAgXCJDcmVhdGVzIGEgbmV3IHByb2plbiBwcm9qZWN0XCIsXG4gICAgXCJcIixcbiAgICBcIkZvciBhIGNvbXBsZXRlIGxpc3Qgb2YgdGhlIGF2YWlsYWJsZSBvcHRpb25zIGZvciBhIHNwZWNpZmljIHByb2plY3QgdHlwZSwgcnVuOlwiLFxuICAgIFwicHJvamVuIG5ldyBbUFJPSkVDVC1UWVBFLU5BTUVdIC0taGVscFwiLFxuICBdLmpvaW4oXCJcXG5cIik7XG5cbiAgcHVibGljIGJ1aWxkZXIoYXJnczogeWFyZ3MuQXJndikge1xuICAgIGFyZ3MucG9zaXRpb25hbChcIlBST0pFQ1QtVFlQRS1OQU1FXCIsIHtcbiAgICAgIGRlc2NyaWJlOlxuICAgICAgICBcIm9ubHkgb3B0aW9uYWwgd2l0aCAtLWZyb20gYW5kIHRoZSBleHRlcm5hbCBtb2R1bGUgaGFzIG9ubHkgYSBzaW5nbGUgcHJvamVjdCB0eXBlXCIsXG4gICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgIH0pO1xuICAgIGFyZ3Mub3B0aW9uKFwic3ludGhcIiwge1xuICAgICAgdHlwZTogXCJib29sZWFuXCIsXG4gICAgICBkZWZhdWx0OiB0cnVlLFxuICAgICAgZGVzYzogXCJTeW50aGVzaXplIGFmdGVyIGNyZWF0aW5nIC5wcm9qZW5yYy5qc1wiLFxuICAgIH0pO1xuICAgIGFyZ3Mub3B0aW9uKFwiY29tbWVudHNcIiwge1xuICAgICAgdHlwZTogXCJib29sZWFuXCIsXG4gICAgICBkZWZhdWx0OiB0cnVlLFxuICAgICAgZGVzYzogXCJJbmNsdWRlIGNvbW1lbnRlZCBvdXQgb3B0aW9ucyBpbiAucHJvamVucmMuanMgKHVzZSAtLW5vLWNvbW1lbnRzIHRvIGRpc2FibGUpXCIsXG4gICAgfSk7XG4gICAgYXJncy5vcHRpb24oXCJmcm9tXCIsIHtcbiAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICBhbGlhczogXCJmXCIsXG4gICAgICBkZXNjOiAnRXh0ZXJuYWwganNpaSBucG0gbW9kdWxlIHRvIGNyZWF0ZSBwcm9qZWN0IGZyb20uIFN1cHBvcnRzIGFueSBwYWNrYWdlIHNwZWMgc3VwcG9ydGVkIGJ5IG5wbSAoc3VjaCBhcyBcIm15LXBhY2tAXjIuMFwiKScsXG4gICAgfSk7XG4gICAgYXJncy5vcHRpb24oXCJnaXRcIiwge1xuICAgICAgdHlwZTogXCJib29sZWFuXCIsXG4gICAgICBkZWZhdWx0OiB0cnVlLFxuICAgICAgZGVzYzogXCJSdW4gYGdpdCBpbml0YCBhbmQgY3JlYXRlIGFuIGluaXRpYWwgY29tbWl0ICh1c2UgLS1uby1naXQgdG8gZGlzYWJsZSlcIixcbiAgICB9KTtcbiAgICBhcmdzLmV4YW1wbGUoXG4gICAgICBcInByb2plbiBuZXcgYXdzY2RrLWFwcC10c1wiLFxuICAgICAgJ0NyZWF0ZXMgYSBuZXcgcHJvamVjdCBvZiBidWlsdC1pbiB0eXBlIFwiYXdzY2RrLWFwcC10c1wiJyxcbiAgICApO1xuICAgIGFyZ3MuZXhhbXBsZShcbiAgICAgIFwicHJvamVuIG5ldyAtLWZyb20gcHJvamVuLXZ1ZUBeMlwiLFxuICAgICAgJ0NyZWF0ZXMgYSBuZXcgcHJvamVjdCBmcm9tIGFuIGV4dGVybmFsIG1vZHVsZSBcInByb2plbi12dWVcIiB3aXRoIHRoZSBzcGVjaWZpZWQgdmVyc2lvbicsXG4gICAgKTtcbiAgICBhcmdzLmV4YW1wbGUoXG4gICAgICBcInByb2plbiBuZXcgcHl0aG9uIC0taGVscFwiLFxuICAgICAgJ1Nob3dzIGFsbCBvcHRpb25zIGF2YWlsYWJsZSBmb3IgdGhlIGJ1aWx0LWluIHByb2plY3QgdHlwZSBcInB5dGhvblwiJyxcbiAgICApO1xuXG4gICAgZm9yIChjb25zdCB0eXBlIG9mIGludmVudG9yeS5kaXNjb3ZlcigpKSB7XG4gICAgICBhcmdzLmNvbW1hbmQodHlwZS5wamlkLCB0eXBlLmRvY3MgPz8gXCJcIiwge1xuICAgICAgICBidWlsZGVyOiAoY2FyZ3MpID0+IHtcbiAgICAgICAgICBjYXJncy5zaG93SGVscE9uRmFpbChmYWxzZSk7XG4gICAgICAgICAgY2FyZ3Muc3RyaWN0T3B0aW9ucygpO1xuXG4gICAgICAgICAgZm9yIChjb25zdCBvcHRpb24gb2YgdHlwZS5vcHRpb25zID8/IFtdKSB7XG4gICAgICAgICAgICAvLyBub3QgYWxsIHR5cGVzIGNhbiBiZSByZXByZXNlbnRlZCBpbiB0aGUgY2xpXG4gICAgICAgICAgICBpZiAoIWFyZ1R5cGVTdXBwb3J0ZWQob3B0aW9uKSkge1xuICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgZGVmYXVsdFZhbHVlID0gYXJnSW5pdGlhbFZhbHVlKG9wdGlvbik7XG4gICAgICAgICAgICBjYXJncy5vcHRpb24ob3B0aW9uLnN3aXRjaCwge1xuICAgICAgICAgICAgICBncm91cDogIW9wdGlvbi5vcHRpb25hbCA/IFwiUmVxdWlyZWQ6XCIgOiBcIk9wdGlvbmFsOlwiLFxuICAgICAgICAgICAgICB0eXBlOiBhcmdUeXBlKG9wdGlvbiksXG4gICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBhcmdEZXNjKG9wdGlvbiksXG4gICAgICAgICAgICAgIHJlcXVpcmVkOiAhb3B0aW9uLm9wdGlvbmFsLFxuICAgICAgICAgICAgICAvLyB5YXJncyBiZWhhdmVzIGRpZmZlcmVudGx5IGZvciBhcnJheXMgaWYgdGhlIGRlZmF1bHRWYWx1ZSBwcm9wZXJ0eSBpcyBwcmVzZW50IG9yIG5vdFxuICAgICAgICAgICAgICAuLi4oIW9wdGlvbi5vcHRpb25hbCAmJiBkZWZhdWx0VmFsdWVcbiAgICAgICAgICAgICAgICA/IHsgZGVmYXVsdDogZGVmYXVsdFZhbHVlIH1cbiAgICAgICAgICAgICAgICA6IHt9KSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBjYXJncztcbiAgICAgICAgfSxcbiAgICAgICAgaGFuZGxlcjogKGFyZ3YpID0+IGluaXRQcm9qZWN0KHByb2Nlc3MuY3dkKCksIHR5cGUsIGFyZ3YpLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gRGlzYWJsZSBzdHJpY3QgbW9kZSwgb3RoZXJ3aXNlIHRoZSBjYXRjaC1hbGwgZG9lc24ndCB3b3JrXG4gICAgYXJncy5zdHJpY3RDb21tYW5kcyhmYWxzZSk7XG4gICAgYXJnc1xuICAgICAgLmNvbW1hbmQoe1xuICAgICAgICBjb21tYW5kOiBcIipcIixcbiAgICAgICAgZGVzY3JpYmU6IGZhbHNlLFxuICAgICAgICBoYW5kbGVyLFxuICAgICAgfSlcbiAgICAgIC5taWRkbGV3YXJlKChhcmd2KSA9PiB7XG4gICAgICAgIC8vIG1hbnVhbGx5IHNldCB0aGUgbWF0Y2hlZCBjb21tYW5kIGFzIHRoZSBwcm9qZWN0IHR5cGVcbiAgICAgICAgYXJndi5wcm9qZWN0VHlwZU5hbWUgPSBhcmd2Ll9bMV07XG4gICAgICB9LCB0cnVlKTtcblxuICAgIHJldHVybiBhcmdzO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGhhbmRsZXIoYXJnczogYW55KSB7XG4gICAgcmV0dXJuIGhhbmRsZXIoYXJncyk7XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gaGFuZGxlcihhcmdzOiBhbnkpIHtcbiAgdHJ5IHtcbiAgICAvLyBoYW5kbGUgLS1mcm9tIHdoaWNoIG1lYW5zIHdlIHdhbnQgdG8gZmlyc3QgaW5zdGFsbCBhIGpzaWkgbW9kdWxlIGFuZCB0aGVuXG4gICAgLy8gY3JlYXRlIGEgcHJvamVjdCBkZWZpbmVkIHdpdGhpbiB0aGlzIG1vZHVsZS5cbiAgICBpZiAoYXJncy5mcm9tKSB7XG4gICAgICBhcmdzLmZyb20gPSBub3JtYWxpemVQZXJzaXN0ZWRQYXRoKGFyZ3MuZnJvbSk7XG5cbiAgICAgIHJldHVybiBhd2FpdCBpbml0UHJvamVjdEZyb21Nb2R1bGUocHJvY2Vzcy5jd2QoKSwgYXJncy5mcm9tLCBhcmdzKTtcbiAgICB9XG5cbiAgICAvLyBwcm9qZWN0IHR5cGUgaXMgZGVmaW5lZCBidXQgd2FzIG5vdCBtYXRjaGVkIGJ5IHlhcmdzLCBzbyBwcmludCB0aGUgbGlzdCBvZiBzdXBwb3J0ZWQgdHlwZXNcbiAgICBpZiAoYXJncy5wcm9qZWN0VHlwZU5hbWUpIHtcbiAgICAgIGNvbnN0IHR5cGVzID0gaW52ZW50b3J5LmRpc2NvdmVyKCk7XG4gICAgICB0aHJvdyBuZXcgQ2xpRXJyb3IoXG4gICAgICAgIGBQcm9qZWN0IHR5cGUgXCIke2FyZ3MucHJvamVjdFR5cGVOYW1lfVwiIG5vdCBmb3VuZC4gQXZhaWxhYmxlIHR5cGVzOlxcbmAsXG4gICAgICAgIC4uLnR5cGVzLm1hcCgodCkgPT4gYCAgICAke3QucGppZH1gKSxcbiAgICAgICAgXCJcIixcbiAgICAgICAgYFBsZWFzZSBzcGVjaWZ5IGEgcHJvamVjdCB0eXBlLmAsXG4gICAgICAgIGBFeGFtcGxlOiBwbnBtIGRseCBwcm9qZW4gbmV3ICR7dHlwZXNbMF0ucGppZH1gLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBIYW5kbGVzIHRoZSB1c2UgY2FzZSB0aGF0IG5vdGhpbmcgd2FzIHNwZWNpZmllZCBzaW5jZSBQUk9KRUNULVRZUEUgaXMgbm93IGFuIG9wdGlvbmFsIHBvc2l0aW9uYWwgcGFyYW1ldGVyXG4gICAgeWFyZ3Muc2hvd0hlbHAoKTtcbiAgfSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcbiAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBDbGlFcnJvcikge1xuICAgICAgbG9nZ2luZy5lcnJvcihlcnJvci5tZXNzYWdlKTtcbiAgICAgIGxvZ2dpbmcuZW1wdHkoKTtcbiAgICAgIHByb2Nlc3MuZXhpdENvZGUgPSAxO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIHVua25vd24gZXJyb3IsIGxpa2VseSBhIG5vZGUgcnVudGltZSBleGNlcHRpb24gaW4gcHJvamVjdCBjb2RlXG4gICAgLy8gcmV0aHJvdyBzbyB0aGUgZnVsbCBzdGFjayB0cmFjZSBpcyBkaXNwbGF5ZWRcbiAgICB0aHJvdyBlcnJvcjtcbiAgfVxufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIHlhcmdzIG9wdGlvbiB0eXBlIGZvciBhIGdpdmVuIHByb2plY3Qgb3B0aW9uXG4gKi9cbmZ1bmN0aW9uIGFyZ1R5cGUoXG4gIG9wdGlvbjogaW52ZW50b3J5LkludmVudG9yeVByb2plY3RPcHRpb24sXG4pOiBcInN0cmluZ1wiIHwgXCJib29sZWFuXCIgfCBcIm51bWJlclwiIHwgXCJhcnJheVwiIHtcbiAgaWYgKG9wdGlvbi5raW5kID09PSBcImVudW1cIikge1xuICAgIHJldHVybiBcInN0cmluZ1wiO1xuICB9XG5cbiAgaWYgKGlzUHJpbWl0aXZlQXJyYXlPcHRpb24ob3B0aW9uKSkge1xuICAgIHJldHVybiBcImFycmF5XCI7XG4gIH1cblxuICByZXR1cm4gb3B0aW9uLnNpbXBsZVR5cGUgYXMgXCJzdHJpbmdcIiB8IFwiYm9vbGVhblwiIHwgXCJudW1iZXJcIjtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBkZXNjcmlwdGlvbiBmb3IgYSBnaXZlbiBwcm9qZWN0IG9wdGlvblxuICovXG5mdW5jdGlvbiBhcmdEZXNjKG9wdGlvbjogaW52ZW50b3J5LkludmVudG9yeVByb2plY3RPcHRpb24pOiBzdHJpbmcge1xuICBsZXQgZGVzYyA9IFtvcHRpb24uZG9jcz8ucmVwbGFjZSgvXFwgKlxcLiQvLCBcIlwiKSA/PyBcIlwiXTtcblxuICBjb25zdCBoZWxwRGVmYXVsdCA9IG9wdGlvbi5pbml0aWFsVmFsdWUgPz8gb3B0aW9uLmRlZmF1bHQ7XG4gIGlmIChvcHRpb24ub3B0aW9uYWwgJiYgaGVscERlZmF1bHQpIHtcbiAgICBkZXNjLnB1c2goXG4gICAgICBgW2RlZmF1bHQ6ICR7aGVscERlZmF1bHQucmVwbGFjZSgvXlxcICotLywgXCJcIikucmVwbGFjZSgvXFwuJC8sIFwiXCIpLnRyaW0oKX1dYCxcbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIGRlc2Muam9pbihcIiBcIik7XG59XG5cbi8qKlxuICogQ29tcHV0ZSB0aGUgaW5pdGlhbCB2YWx1ZSBmb3IgYSBnaXZlbiBwcm9qZWN0IG9wdGlvblxuICovXG5mdW5jdGlvbiBhcmdJbml0aWFsVmFsdWUoXG4gIG9wdGlvbjogaW52ZW50b3J5LkludmVudG9yeVByb2plY3RPcHRpb24sXG4gIGN3ZCA9IHByb2Nlc3MuY3dkKCksXG4pOiBhbnkge1xuICAvLyBpZiB3ZSBoYXZlIGRldGVybWluZWQgYW4gaW5pdGlhbCB2YWx1ZSBmb3IgdGhlIGZpZWxkXG4gIC8vIHdlIGNhbiBzaG93IHRoYXQgdmFsdWUgaW4gLS1oZWxwXG4gIGlmIChvcHRpb24uaW5pdGlhbFZhbHVlKSB7XG4gICAgcmV0dXJuIHJlbmRlckRlZmF1bHQoY3dkLCBvcHRpb24uaW5pdGlhbFZhbHVlKTtcbiAgfVxufVxuXG4vKipcbiAqIEN1cnJlbnRseSB3ZSBvbmx5IHN1cHBvcnQgdGhlc2UgZmllbGQgdHlwZXMgYXMgY29tbWFuZCBsaW5lIG9wdGlvbnM6XG4gKiAtIHByaW1pdGl2ZXMgKHN0cmluZywgbnVtYmVyLCBib29sZWFuKVxuICogLSBsaXN0cyBvZiBwcmltaXRpdmVzXG4gKiAtIGVudW1zXG4gKi9cbmZ1bmN0aW9uIGFyZ1R5cGVTdXBwb3J0ZWQob3B0aW9uOiBpbnZlbnRvcnkuSW52ZW50b3J5UHJvamVjdE9wdGlvbik6IGJvb2xlYW4ge1xuICByZXR1cm4gKFxuICAgIG9wdGlvbi5zaW1wbGVUeXBlID09PSBcInN0cmluZ1wiIHx8XG4gICAgb3B0aW9uLnNpbXBsZVR5cGUgPT09IFwibnVtYmVyXCIgfHxcbiAgICBvcHRpb24uc2ltcGxlVHlwZSA9PT0gXCJib29sZWFuXCIgfHxcbiAgICBvcHRpb24ua2luZCA9PT0gXCJlbnVtXCIgfHxcbiAgICBpc1ByaW1pdGl2ZUFycmF5T3B0aW9uKG9wdGlvbilcbiAgKTtcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgdGhlIGdpdmVuIG9wdGlvbiBpcyBhIHByaW1pdGl2ZSBhcnJheVxuICovXG5mdW5jdGlvbiBpc1ByaW1pdGl2ZUFycmF5T3B0aW9uKFxuICBvcHRpb246IGludmVudG9yeS5JbnZlbnRvcnlQcm9qZWN0T3B0aW9uLFxuKTogYm9vbGVhbiB7XG4gIHJldHVybiBCb29sZWFuKFxuICAgIG9wdGlvbi5qc29uTGlrZSAmJlxuICAgIG9wdGlvbi50eXBlLmNvbGxlY3Rpb24/LmtpbmQgPT09IFwiYXJyYXlcIiAmJlxuICAgIG9wdGlvbi50eXBlLmNvbGxlY3Rpb24uZWxlbWVudHR5cGUucHJpbWl0aXZlICYmXG4gICAgW1wic3RyaW5nXCIsIFwibnVtYmVyXCJdLmluY2x1ZGVzKG9wdGlvbi50eXBlLmNvbGxlY3Rpb24uZWxlbWVudHR5cGUucHJpbWl0aXZlKSxcbiAgKTtcbn1cblxuLyoqXG4gKiBHaXZlbiBhIHZhbHVlIGZyb20gXCJAZGVmYXVsdFwiLCBwcm9jZXNzZXMgbWFjcm9zIGFuZCByZXR1cm5zIGEgc3RyaW5naWZpZWRcbiAqIChxdW90ZWQpIHJlc3VsdC5cbiAqXG4gKiBAcmV0dXJucyBhIGphdmFzY3JpcHQgcHJpbWl0aXZlIChjb3VsZCBiZSBhIHN0cmluZywgbnVtYmVyIG9yIGJvb2xlYW4pXG4gKi9cbmZ1bmN0aW9uIHJlbmRlckRlZmF1bHQoY3dkOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpIHtcbiAgcmV0dXJuIHRyeVByb2Nlc3NNYWNybyhjd2QsIHZhbHVlKSA/PyBKU09OLnBhcnNlKHZhbHVlKTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyB5YXJncyBjb21tYW5kIGxpbmUgc3dpdGNoZXMgdG8gcHJvamVjdCB0eXBlIHByb3BzLlxuICogQHBhcmFtIHR5cGUgUHJvamVjdCB0eXBlXG4gKiBAcGFyYW0gYXJndiBDb21tYW5kIGxpbmUgc3dpdGNoZXNcbiAqL1xuZnVuY3Rpb24gY29tbWFuZExpbmVUb1Byb3BzKFxuICBjd2Q6IHN0cmluZyxcbiAgdHlwZTogaW52ZW50b3J5LkludmVudG9yeVByb2plY3RUeXBlLFxuICBhcmd2OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbik6IFJlY29yZDxzdHJpbmcsIGFueT4ge1xuICBjb25zdCBwcm9wczogUmVjb3JkPHN0cmluZywgYW55PiA9IHt9O1xuXG4gIC8vIGluaXRpYWxpemUgcHJvcHMgd2l0aCBkZWZhdWx0IHZhbHVlc1xuICBmb3IgKGNvbnN0IHByb3Agb2YgdHlwZS5vcHRpb25zKSB7XG4gICAgcHJvcHNbcHJvcC5uYW1lXSA9IGFyZ0luaXRpYWxWYWx1ZShwcm9wLCBjd2QpO1xuICB9XG5cbiAgZm9yIChjb25zdCBbYXJnLCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoYXJndikpIHtcbiAgICBmb3IgKGNvbnN0IHByb3Agb2YgdHlwZS5vcHRpb25zKSB7XG4gICAgICBpZiAocHJvcC5zd2l0Y2ggPT09IGFyZykge1xuICAgICAgICBsZXQgY3VyciA9IHByb3BzO1xuICAgICAgICBjb25zdCBxdWV1ZSA9IFsuLi5wcm9wLnBhdGhdO1xuICAgICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICAgIGNvbnN0IHAgPSBxdWV1ZS5zaGlmdCgpO1xuICAgICAgICAgIGlmICghcCkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChxdWV1ZS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIGN1cnJbcF0gPSB2YWx1ZTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY3VycltwXSA9IGN1cnJbcF0gPz8ge307XG4gICAgICAgICAgICBjdXJyID0gY3VycltwXTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gcHJvcHM7XG59XG5cbi8qKlxuICogR2VuZXJhdGVzIGEgbmV3IHByb2plY3QgZnJvbSBhbiBleHRlcm5hbCBtb2R1bGUuXG4gKlxuICogQHBhcmFtIHNwZWMgVGhlIG5hbWUgb2YgdGhlIGV4dGVybmFsIG1vZHVsZSB0byBsb2FkXG4gKiBAcGFyYW0gYXJncyBDb21tYW5kIGxpbmUgYXJndW1lbnRzIChpbmNsLiBwcm9qZWN0IHR5cGUpXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGluaXRQcm9qZWN0RnJvbU1vZHVsZShiYXNlRGlyOiBzdHJpbmcsIHNwZWM6IHN0cmluZywgYXJnczogYW55KSB7XG4gIGNvbnN0IHByb2plblZlcnNpb24gPSBhcmdzLnByb2plblZlcnNpb24gPz8gXCJsYXRlc3RcIjtcbiAgY29uc3QgaW5zdGFsbENvbW1hbmQgPSByZW5kZXJJbnN0YWxsQ29tbWFuZChcbiAgICBiYXNlRGlyLFxuICAgIGBwcm9qZW5AJHtwcm9qZW5WZXJzaW9ufWAsXG4gICk7XG4gIGlmIChhcmdzLnByb2plblZlcnNpb24pIHtcbiAgICBleGVjKGluc3RhbGxDb21tYW5kLCB7IGN3ZDogYmFzZURpciB9KTtcbiAgfSBlbHNlIHtcbiAgICAvLyBkbyBub3Qgb3ZlcndyaXRlIGV4aXN0aW5nIGluc3RhbGxhdGlvblxuICAgIGV4ZWMoXG4gICAgICBgbnBtIGxzIC0tcHJlZml4PVwiJHtiYXNlRGlyfVwiIC0tZGVwdGg9MCAtLXBhdHRlcm4gcHJvamVuIHx8ICR7aW5zdGFsbENvbW1hbmR9YCxcbiAgICAgIHsgY3dkOiBiYXNlRGlyIH0sXG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IGluc3RhbGxQYWNrYWdlV2l0aENsaUVycm9yID0gKGI6IHN0cmluZywgczogc3RyaW5nKTogc3RyaW5nID0+IHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGluc3RhbGxQYWNrYWdlKGIsIHMpO1xuICAgIH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XG4gICAgICBjb25zdCBzdGRlcnIgPVxuICAgICAgICAoZXJyb3IgYXMgU3Bhd25TeW5jUmV0dXJuczxCdWZmZXI+KT8uc3RkZXJyPy50b1N0cmluZygpID8/IFwiXCI7XG4gICAgICBjb25zdCBpc0xvY2FsID0gc3RkZXJyLmluY2x1ZGVzKFwiY29kZSBFTk9FTlRcIik7XG4gICAgICBjb25zdCBpc1JlZ2lzdHJ5ID0gc3RkZXJyLmluY2x1ZGVzKFwiY29kZSBFNDA0XCIpO1xuICAgICAgaWYgKGlzTG9jYWwgfHwgaXNSZWdpc3RyeSkge1xuICAgICAgICBjb25zdCBtb2R1bGVTb3VyY2UgPSBpc0xvY2FsID8gXCJwYXRoXCIgOiBcInJlZ2lzdHJ5XCI7XG4gICAgICAgIHRocm93IG5ldyBDbGlFcnJvcihcbiAgICAgICAgICBgQ291bGQgbm90IGZpbmQgJyR7c30nIGluIHRoaXMgJHttb2R1bGVTb3VyY2V9LiBQbGVhc2UgZW5zdXJlIHRoYXQgdGhlIHBhY2thZ2UgZXhpc3RzLCB5b3UgaGF2ZSBhY2Nlc3MgaXQgYW5kIHRyeSBhZ2Fpbi5gLFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgbW9kdWxlTmFtZSA9IGluc3RhbGxQYWNrYWdlV2l0aENsaUVycm9yKGJhc2VEaXIsIHNwZWMpO1xuICBsb2dnaW5nLmVtcHR5KCk7XG5cbiAgLy8gRmluZCB0aGUganVzdCBpbnN0YWxsZWQgcGFja2FnZSBhbmQgZGlzY292ZXIgdGhlIHJlc3QgcmVjdXJzaXZlbHkgZnJvbSB0aGlzIHBhY2thZ2UgZm9sZGVyXG4gIGNvbnN0IG1vZHVsZURpciA9IGZpbmRKc2lpRmlsZVBhdGgoYmFzZURpciwgbW9kdWxlTmFtZSk7XG5cbiAgaWYgKCFtb2R1bGVEaXIpIHtcbiAgICB0aHJvdyBuZXcgQ2xpRXJyb3IoXG4gICAgICBgTW9kdWxlICcke21vZHVsZU5hbWV9JyBkb2VzIG5vdCBsb29rIGxpa2UgaXQgaXMgY29tcGF0aWJsZSB3aXRoIHByb2plbi4gUmVhc29uOiBDYW5ub3QgZmluZCAnJHttb2R1bGVOYW1lfS8uanNpaScuIEFsbCBwcm9qZW4gbW9kdWxlcyBtdXN0IGJlIGpzaWkgbW9kdWxlcyFgLFxuICAgICk7XG4gIH1cblxuICAvLyBPbmx5IGxlYXZlIHByb2plY3RzIGZyb20gdGhlIG1haW4gKHJlcXVlc3RlZCkgcGFja2FnZVxuICBjb25zdCBwcm9qZWN0cyA9IGludmVudG9yeVxuICAgIC5kaXNjb3Zlcihtb2R1bGVEaXIpXG4gICAgLmZpbHRlcigoeCkgPT4geC5tb2R1bGVOYW1lID09PSBtb2R1bGVOYW1lKTsgLy8gT25seSBsaXN0IHByb2plY3QgdHlwZXMgZnJvbSB0aGUgcmVxdWVzdGVkICdmcm9tJyBtb2R1bGVcblxuICBpZiAocHJvamVjdHMubGVuZ3RoIDwgMSkge1xuICAgIHRocm93IG5ldyBDbGlFcnJvcihcbiAgICAgIGBObyBwcm9qZWN0IHR5cGVzIGZvdW5kIGFmdGVyIGluc3RhbGxpbmcgXCIke3NwZWN9XCIuIFRoZSBtb2R1bGUgbXVzdCBleHBvcnQgYXQgbGVhc3Qgb25lIGNsYXNzIHdoaWNoIGV4dGVuZHMgXCJwcm9qZW4uUHJvamVjdFwiLmAsXG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IHJlcXVlc3RlZCA9IGFyZ3MucHJvamVjdFR5cGVOYW1lO1xuICBjb25zdCB0eXBlcyA9IHByb2plY3RzLm1hcCgocCkgPT4gcC5wamlkKTtcblxuICAvLyBpZiB1c2VyIGRpZCBub3Qgc3BlY2lmeSBhIHByb2plY3QgdHlwZSBidXQgdGhlIG1vZHVsZSBoYXMgbW9yZSB0aGFuIG9uZSwgd2UgbmVlZCB0aGVtIHRvIHRlbGwgdXMgd2hpY2ggb25lLi4uXG4gIGlmICghcmVxdWVzdGVkICYmIHByb2plY3RzLmxlbmd0aCA+IDEpIHtcbiAgICB0aHJvdyBuZXcgQ2xpRXJyb3IoXG4gICAgICBgTXVsdGlwbGUgcHJvamVjdCB0eXBlcyBmb3VuZCBhZnRlciBpbnN0YWxsaW5nIFwiJHtzcGVjfVwiOlxcbmAsXG4gICAgICAuLi50eXBlcy5tYXAoKHQpID0+IGAgICAgJHt0fWApLFxuICAgICAgXCJcIixcbiAgICAgIGBQbGVhc2Ugc3BlY2lmeSBhIHByb2plY3QgdHlwZS5gLFxuICAgICAgYEV4YW1wbGU6IHBucG0gZGx4IHByb2plbiBuZXcgLS1mcm9tICR7c3BlY30gJHt0eXBlc1swXX1gLFxuICAgICk7XG4gIH1cblxuICAvLyBpZiB1c2VyIGRpZCBub3Qgc3BlY2lmeSBhIHR5cGUgKGFuZCB3ZSBrbm93IHdlIGhhdmUgb25seSBvbmUpLCB0aGUgc2VsZWN0IGl0LiBvdGhlcndpc2UsIHNlYXJjaCBieSBwamlkLlxuICBjb25zdCB0eXBlID0gIXJlcXVlc3RlZFxuICAgID8gcHJvamVjdHNbMF1cbiAgICA6IHByb2plY3RzLmZpbmQoKHApID0+IHAucGppZCA9PT0gcmVxdWVzdGVkKTtcbiAgaWYgKCF0eXBlKSB7XG4gICAgdGhyb3cgbmV3IENsaUVycm9yKFxuICAgICAgYFByb2plY3QgdHlwZSBcIiR7cmVxdWVzdGVkfVwiIG5vdCBmb3VuZCBpbiBcIiR7c3BlY31cIi4gRm91bmQ6XFxuYCxcbiAgICAgIC4uLnR5cGVzLm1hcCgodCkgPT4gYCAgICAke3R9YCksXG4gICAgICBcIlwiLFxuICAgICAgYFBsZWFzZSBzcGVjaWZ5IGEgdmFsaWQgcHJvamVjdCB0eXBlLmAsXG4gICAgICBgRXhhbXBsZTogcG5wbSBkbHggcHJvamVuIG5ldyAtLWZyb20gJHtzcGVjfSAke3R5cGVzWzBdfWAsXG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IG1pc3NpbmdPcHRpb25zID0gW107XG5cbiAgZm9yIChjb25zdCBvcHRpb24gb2YgdHlwZS5vcHRpb25zID8/IFtdKSB7XG4gICAgLy8gbm90IGFsbCB0eXBlcyBjYW4gYmUgcmVwcmVzZW50ZWQgaW4gdGhlIGNsaVxuICAgIGlmICghYXJnVHlwZVN1cHBvcnRlZChvcHRpb24pKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICAvLyBwYXJzZSBhbGxvd2VkIHR5cGVzXG4gICAgaWYgKGFyZ3Nbb3B0aW9uLm5hbWVdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGFyZ3Nbb3B0aW9uLm5hbWVdID0gcGFyc2VBcmcoYXJnc1tvcHRpb24ubmFtZV0sIGFyZ1R5cGUob3B0aW9uKSwgb3B0aW9uKTtcbiAgICAgIGFyZ3Nbb3B0aW9uLnN3aXRjaF0gPSBhcmdzW29wdGlvbi5uYW1lXTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIC8vIFJlcXVpcmVkIG9wdGlvbiB3aXRoIGEgZGVmYXVsdFxuICAgIGlmICghb3B0aW9uLm9wdGlvbmFsICYmIG9wdGlvbi5kZWZhdWx0ICYmIG9wdGlvbi5kZWZhdWx0ICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICBjb25zdCBkZWZhdWx0VmFsdWUgPSByZW5kZXJEZWZhdWx0KGJhc2VEaXIsIG9wdGlvbi5kZWZhdWx0KTtcbiAgICAgIGFyZ3Nbb3B0aW9uLm5hbWVdID0gZGVmYXVsdFZhbHVlO1xuICAgICAgYXJnc1tvcHRpb24uc3dpdGNoXSA9IGRlZmF1bHRWYWx1ZTtcbiAgICB9XG5cbiAgICAvLyBSZXF1aXJlZCBvcHRpb24sIGJ1dCB3ZSBjb3VsZCBub3QgZmluZCBhIHZhbHVlXG4gICAgaWYgKCFvcHRpb24ub3B0aW9uYWwgJiYgIWFyZ3Nbb3B0aW9uLm5hbWVdKSB7XG4gICAgICBtaXNzaW5nT3B0aW9ucy5wdXNoKFxuICAgICAgICBgLS0ke29wdGlvbi5zd2l0Y2h9IFske2FyZ1R5cGUob3B0aW9uKX1dICR7YXJnRGVzYyhvcHRpb24pfWAsXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8vIFdlIGFyZSBtaXNzaW5nIHNvbWUgcmVxdWlyZWQgb3B0aW9uc1xuICBpZiAobWlzc2luZ09wdGlvbnMubGVuZ3RoKSB7XG4gICAgdGhyb3cgbmV3IENsaUVycm9yKFxuICAgICAgYENhbm5vdCBjcmVhdGUgXCIke3R5cGUuZnFufVwiLiBNaXNzaW5nIHJlcXVpcmVkIG9wdGlvbiR7XG4gICAgICAgIG1pc3NpbmdPcHRpb25zLmxlbmd0aCA+IDEgPyBcInNcIiA6IFwiXCJcbiAgICAgIH06YCxcbiAgICAgIC4uLm1pc3NpbmdPcHRpb25zLm1hcCgobSkgPT4gYCAgICAke219YCksXG4gICAgKTtcbiAgfVxuXG4gIC8vIGluY2x1ZGUgYSBkZXYgZGVwZW5kZW5jeSBmb3IgdGhlIGV4dGVybmFsIG1vZHVsZVxuICBhcmdzLmRldkRlcHMgPSBbc3BlY107XG4gIGFyZ3NbXCJkZXYtZGVwc1wiXSA9IFtzcGVjXTtcblxuICBhd2FpdCBpbml0UHJvamVjdChiYXNlRGlyLCB0eXBlLCBhcmdzKTtcbn1cblxuLyoqXG4gKiBQYXJzZSBjb21tYW5kIGxpbmUgdmFsdWUgYXMgb3B0aW9uIHR5cGVcbiAqL1xuZnVuY3Rpb24gcGFyc2VBcmcoXG4gIHZhbHVlOiBhbnksXG4gIHR5cGU6IHN0cmluZyxcbiAgb3B0aW9uPzogaW52ZW50b3J5LkludmVudG9yeVByb2plY3RPcHRpb24sXG4pOiBhbnkge1xuICBzd2l0Y2ggKHR5cGUpIHtcbiAgICBjYXNlIFwibnVtYmVyXCI6XG4gICAgICByZXR1cm4gcGFyc2VJbnQodmFsdWUpO1xuICAgIGNhc2UgXCJib29sZWFuXCI6XG4gICAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiID8gaXNUcnV0aHkodmFsdWUpIDogdmFsdWU7XG4gICAgY2FzZSBcImFycmF5XCI6XG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgIHZhbHVlID0gW3ZhbHVlXTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB2YWx1ZS5tYXAoKHY6IGFueSkgPT5cbiAgICAgICAgcGFyc2VBcmcodiwgb3B0aW9uPy50eXBlLmNvbGxlY3Rpb24/LmVsZW1lbnR0eXBlLnByaW1pdGl2ZSB8fCBcInN0cmluZ1wiKSxcbiAgICAgICk7XG4gICAgLy8gcmV0dXJuIHZhbHVlIHVuY2hhbmdlZFxuICAgIGNhc2UgXCJzdHJpbmdcIjpcbiAgICBkZWZhdWx0OlxuICAgICAgLy8gaWYgd2UgaGF2ZSBhbiB1bmV4cGVjdGVkIGFycmF5LCB1c2UgdGhlIGZpcnN0IGVsZW1lbnRcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICByZXR1cm4gdmFsdWVbMF07XG4gICAgICB9XG4gICAgICByZXR1cm4gdmFsdWU7XG4gIH1cbn1cblxuLyoqXG4gKiBHZW5lcmF0ZXMgYSBuZXcgcHJvamVjdC5cbiAqIEBwYXJhbSB0eXBlIFByb2plY3QgdHlwZVxuICogQHBhcmFtIGFyZ3MgQ29tbWFuZCBsaW5lIGFyZ3VtZW50c1xuICogQHBhcmFtIGFkZGl0aW9uYWxQcm9wcyBBZGRpdGlvbmFsIHBhcmFtZXRlcnMgdG8gaW5jbHVkZSBpbiAucHJvamVucmMuanNcbiAqL1xuYXN5bmMgZnVuY3Rpb24gaW5pdFByb2plY3QoXG4gIGJhc2VEaXI6IHN0cmluZyxcbiAgdHlwZTogaW52ZW50b3J5LkludmVudG9yeVByb2plY3RUeXBlLFxuICBhcmdzOiBhbnksXG4pIHtcbiAgLy8gY29udmVydCBjb21tYW5kIGxpbmUgYXJndW1lbnRzIHRvIHByb2plY3QgcHJvcHMgdXNpbmcgdHlwZSBpbmZvcm1hdGlvblxuICBjb25zdCBwcm9wcyA9IGNvbW1hbmRMaW5lVG9Qcm9wcyhiYXNlRGlyLCB0eXBlLCBhcmdzKTtcblxuICBQcm9qZWN0cy5jcmVhdGVQcm9qZWN0KHtcbiAgICBkaXI6IHByb3BzLm91dGRpciA/PyBiYXNlRGlyLFxuICAgIHByb2plY3RGcW46IHR5cGUuZnFuLFxuICAgIHByb2plY3RPcHRpb25zOiBwcm9wcyxcbiAgICBvcHRpb25IaW50czogYXJncy5jb21tZW50c1xuICAgICAgPyBJbml0UHJvamVjdE9wdGlvbkhpbnRzLkZFQVRVUkVEXG4gICAgICA6IEluaXRQcm9qZWN0T3B0aW9uSGludHMuTk9ORSxcbiAgICBzeW50aDogYXJncy5zeW50aCxcbiAgICBwb3N0OiBhcmdzLnBvc3QsXG4gIH0pO1xuXG4gIGlmIChmcy5leGlzdHNTeW5jKHBhdGguam9pbihiYXNlRGlyLCBcInBhY2thZ2UuanNvblwiKSkgJiYgYXJncy5wb3N0KSB7XG4gICAgZXhlYyhcIm5wbSBydW4gZXNsaW50IC0taWYtcHJlc2VudFwiLCB7IGN3ZDogYmFzZURpciB9KTtcbiAgfVxuXG4gIGlmIChhcmdzLmdpdCkge1xuICAgIGNvbnN0IGdpdCA9IChjbWQ6IHN0cmluZykgPT4gZXhlYyhgZ2l0ICR7Y21kfWAsIHsgY3dkOiBiYXNlRGlyIH0pO1xuICAgIGNvbnN0IGdpdHZlcnNpb246IHN0cmluZyA9IGdldEdpdFZlcnNpb24oXG4gICAgICBleGVjQ2FwdHVyZShcImdpdCAtLXZlcnNpb25cIiwgeyBjd2Q6IGJhc2VEaXIgfSkudG9TdHJpbmcoKSxcbiAgICApO1xuICAgIGxvZ2dpbmcuZGVidWcoXCJzeXN0ZW0gdXNpbmcgZ2l0IHZlcnNpb24gXCIsIGdpdHZlcnNpb24pO1xuICAgIC8vIGBnaXQgY29uZmlnIGluaXQuZGVmYXVsdEJyYW5jaGAgYW5kIGBnaXQgaW5pdCAtYmAgYXJlIG9ubHkgYXZhaWxhYmxlIHNpbmNlIGdpdCAyLjI4LjBcbiAgICBpZiAoZ2l0dmVyc2lvbiAmJiBzZW12ZXIuZ3RlKGdpdHZlcnNpb24sIFwiMi4yOC4wXCIpKSB7XG4gICAgICBjb25zdCBkZWZhdWx0R2l0SW5pdEJyYW5jaCA9XG4gICAgICAgIGV4ZWNPclVuZGVmaW5lZChcImdpdCBjb25maWcgaW5pdC5kZWZhdWx0QnJhbmNoXCIsIHtcbiAgICAgICAgICBjd2Q6IGJhc2VEaXIsXG4gICAgICAgIH0pPy50cmltKCkgfHwgXCJtYWluXCI7XG4gICAgICBnaXQoYGluaXQgLWIgJHtkZWZhdWx0R2l0SW5pdEJyYW5jaH1gKTtcbiAgICAgIGdpdChcImFkZCAuXCIpO1xuICAgICAgZ2l0KCdjb21taXQgLS1hbGxvdy1lbXB0eSAtbSBcImNob3JlOiBwcm9qZWN0IGNyZWF0ZWQgd2l0aCBwcm9qZW5cIicpO1xuICAgICAgbG9nZ2luZy5kZWJ1ZyhgZGVmYXVsdCBicmFuY2ggbmFtZSBzZXQgdG8gJHtkZWZhdWx0R2l0SW5pdEJyYW5jaH1gKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZ2l0KFwiaW5pdFwiKTtcbiAgICAgIGdpdChcImFkZCAuXCIpO1xuICAgICAgZ2l0KCdjb21taXQgLS1hbGxvdy1lbXB0eSAtbSBcImNob3JlOiBwcm9qZWN0IGNyZWF0ZWQgd2l0aCBwcm9qZW5cIicpO1xuICAgICAgbG9nZ2luZy5kZWJ1ZyhcbiAgICAgICAgXCJvbGRlciB2ZXJzaW9uIG9mIGdpdCBkZXRlY3RlZCwgY2hhbmdlZCBkZWZhdWx0IGJyYW5jaCBuYW1lIHRvIG1haW5cIixcbiAgICAgICk7XG4gICAgICBnaXQoXCJicmFuY2ggLU0gbWFpblwiKTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgbmV3IENvbW1hbmQoKTtcbiJdfQ==