projen 0.76.8 → 0.76.10

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 (145) hide show
  1. package/.jsii +356 -209
  2. package/lib/awscdk/auto-discover.js +5 -5
  3. package/lib/awscdk/awscdk-app-java.js +1 -1
  4. package/lib/awscdk/awscdk-app-py.js +1 -1
  5. package/lib/awscdk/awscdk-app-ts.js +1 -1
  6. package/lib/awscdk/awscdk-construct.js +2 -2
  7. package/lib/awscdk/awscdk-deps-java.js +1 -1
  8. package/lib/awscdk/awscdk-deps-js.js +1 -1
  9. package/lib/awscdk/awscdk-deps-py.js +1 -1
  10. package/lib/awscdk/awscdk-deps.js +5 -2
  11. package/lib/awscdk/cdk-config.js +1 -1
  12. package/lib/awscdk/cdk-tasks.js +1 -1
  13. package/lib/awscdk/integration-test.js +1 -1
  14. package/lib/awscdk/lambda-extension.js +1 -1
  15. package/lib/awscdk/lambda-function.js +2 -2
  16. package/lib/build/build-workflow.js +1 -1
  17. package/lib/cdk/auto-discover-base.js +2 -2
  18. package/lib/cdk/construct-lib.js +1 -1
  19. package/lib/cdk/integration-test-base.js +1 -1
  20. package/lib/cdk/jsii-docgen.js +1 -1
  21. package/lib/cdk/jsii-project.js +1 -1
  22. package/lib/cdk8s/auto-discover.js +2 -2
  23. package/lib/cdk8s/cdk8s-app-py.js +1 -1
  24. package/lib/cdk8s/cdk8s-app-ts.js +1 -1
  25. package/lib/cdk8s/cdk8s-construct.js +1 -1
  26. package/lib/cdk8s/cdk8s-deps-py.js +1 -1
  27. package/lib/cdk8s/cdk8s-deps.js +1 -1
  28. package/lib/cdk8s/integration-test.js +1 -1
  29. package/lib/cdktf/cdktf-construct.js +1 -1
  30. package/lib/circleci/circleci.js +1 -1
  31. package/lib/component.d.ts +9 -2
  32. package/lib/component.js +26 -6
  33. package/lib/dependencies.js +1 -1
  34. package/lib/dev-env.js +1 -1
  35. package/lib/docker-compose/docker-compose-service.js +1 -1
  36. package/lib/docker-compose/docker-compose.js +1 -1
  37. package/lib/file.d.ts +3 -3
  38. package/lib/file.js +20 -11
  39. package/lib/gitattributes.d.ts +2 -2
  40. package/lib/gitattributes.js +4 -4
  41. package/lib/github/actions-provider.js +1 -1
  42. package/lib/github/auto-approve.js +1 -1
  43. package/lib/github/auto-merge.js +1 -1
  44. package/lib/github/dependabot.js +1 -1
  45. package/lib/github/github-credentials.js +1 -1
  46. package/lib/github/github-project.js +1 -1
  47. package/lib/github/github.js +1 -1
  48. package/lib/github/mergify.js +1 -1
  49. package/lib/github/pr-template.js +1 -1
  50. package/lib/github/pull-request-lint.js +1 -1
  51. package/lib/github/stale.js +1 -1
  52. package/lib/github/task-workflow.js +1 -1
  53. package/lib/github/workflow-actions.js +1 -1
  54. package/lib/github/workflow-jobs.js +1 -1
  55. package/lib/github/workflows.js +3 -3
  56. package/lib/gitlab/configuration.d.ts +0 -4
  57. package/lib/gitlab/configuration.js +2 -3
  58. package/lib/gitlab/gitlab-configuration.js +1 -1
  59. package/lib/gitlab/nested-configuration.js +1 -1
  60. package/lib/gitpod.js +1 -1
  61. package/lib/ignore-file.js +1 -1
  62. package/lib/index.d.ts +1 -0
  63. package/lib/index.js +3 -2
  64. package/lib/ini.js +1 -1
  65. package/lib/java/java-project.js +1 -1
  66. package/lib/java/junit.js +1 -1
  67. package/lib/java/maven-compile.js +1 -1
  68. package/lib/java/maven-packaging.js +1 -1
  69. package/lib/java/maven-sample.js +1 -1
  70. package/lib/java/pom.js +1 -1
  71. package/lib/java/projenrc.js +1 -1
  72. package/lib/javascript/bundler.js +1 -1
  73. package/lib/javascript/eslint.js +1 -1
  74. package/lib/javascript/jest.js +4 -4
  75. package/lib/javascript/node-package.js +3 -3
  76. package/lib/javascript/node-project.js +3 -2
  77. package/lib/javascript/npm-config.js +1 -1
  78. package/lib/javascript/prettier.js +1 -1
  79. package/lib/javascript/projenrc.js +1 -1
  80. package/lib/javascript/typescript-config.js +2 -2
  81. package/lib/javascript/upgrade-dependencies.js +2 -2
  82. package/lib/json-patch.js +1 -1
  83. package/lib/json.d.ts +2 -2
  84. package/lib/json.js +4 -4
  85. package/lib/license.js +1 -1
  86. package/lib/logger.d.ts +2 -2
  87. package/lib/logger.js +6 -4
  88. package/lib/makefile.js +1 -1
  89. package/lib/object-file.d.ts +2 -2
  90. package/lib/object-file.js +4 -4
  91. package/lib/project-build.js +1 -1
  92. package/lib/project-tree.d.ts +7 -0
  93. package/lib/project-tree.js +37 -0
  94. package/lib/project.d.ts +13 -5
  95. package/lib/project.js +59 -31
  96. package/lib/projects.js +1 -1
  97. package/lib/projenrc-json.js +2 -2
  98. package/lib/projenrc.js +1 -1
  99. package/lib/python/pip.js +1 -1
  100. package/lib/python/poetry.js +2 -2
  101. package/lib/python/projenrc.js +1 -1
  102. package/lib/python/pytest-sample.js +1 -1
  103. package/lib/python/pytest.js +1 -1
  104. package/lib/python/python-project.js +1 -1
  105. package/lib/python/python-sample.js +1 -1
  106. package/lib/python/requirements-file.js +1 -1
  107. package/lib/python/setuppy.js +1 -1
  108. package/lib/python/setuptools.js +1 -1
  109. package/lib/python/venv.js +1 -1
  110. package/lib/readme.js +1 -1
  111. package/lib/release/publisher.js +1 -1
  112. package/lib/release/release-trigger.js +1 -1
  113. package/lib/release/release.js +1 -1
  114. package/lib/renovatebot.js +1 -1
  115. package/lib/run-task.js +1 -1894
  116. package/lib/sample-file.js +2 -2
  117. package/lib/semver.js +1 -1
  118. package/lib/source-code.js +1 -1
  119. package/lib/task-runtime.js +1 -1
  120. package/lib/task.js +1 -1
  121. package/lib/tasks.js +1 -1
  122. package/lib/testing.js +1 -1
  123. package/lib/textfile.d.ts +2 -2
  124. package/lib/textfile.js +4 -4
  125. package/lib/toml.js +1 -1
  126. package/lib/typescript/projenrc-ts.js +1 -1
  127. package/lib/typescript/projenrc.js +1 -1
  128. package/lib/typescript/typescript-typedoc.js +1 -1
  129. package/lib/typescript/typescript.js +3 -3
  130. package/lib/util/constructs.d.ts +21 -0
  131. package/lib/util/constructs.js +50 -0
  132. package/lib/version.js +2 -2
  133. package/lib/vscode/devcontainer.js +1 -1
  134. package/lib/vscode/extensions.js +1 -1
  135. package/lib/vscode/launch-config.js +1 -1
  136. package/lib/vscode/settings.js +1 -1
  137. package/lib/vscode/vscode.js +1 -1
  138. package/lib/web/next.js +3 -3
  139. package/lib/web/postcss.js +1 -1
  140. package/lib/web/react.js +4 -4
  141. package/lib/web/tailwind.js +1 -1
  142. package/lib/xmlfile.js +1 -1
  143. package/lib/yaml.d.ts +2 -2
  144. package/lib/yaml.js +4 -4
  145. package/package.json +5 -1
package/lib/project.js CHANGED
@@ -6,6 +6,7 @@ const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
6
6
  const fs_1 = require("fs");
7
7
  const os_1 = require("os");
8
8
  const path = require("path");
9
+ const constructs_1 = require("constructs");
9
10
  const glob = require("glob");
10
11
  const cleanup_1 = require("./cleanup");
11
12
  const common_1 = require("./common");
@@ -22,14 +23,39 @@ const projenrc_json_1 = require("./projenrc-json");
22
23
  const renovatebot_1 = require("./renovatebot");
23
24
  const tasks_1 = require("./tasks");
24
25
  const util_1 = require("./util");
26
+ const constructs_2 = require("./util/constructs");
25
27
  /**
26
28
  * Base project
27
29
  */
28
- class Project {
30
+ class Project extends constructs_1.Construct {
31
+ /**
32
+ * Test whether the given construct is a project.
33
+ */
34
+ static isProject(x) {
35
+ return (0, constructs_2.isProject)(x);
36
+ }
37
+ /**
38
+ * Find the closest ancestor project for given construct.
39
+ * When given a project, this it the project itself.
40
+ *
41
+ * @throws when no project is found in the path to the root
42
+ */
43
+ static of(construct) {
44
+ return (0, constructs_2.findClosestProject)(construct);
45
+ }
29
46
  constructor(options) {
47
+ const outdir = determineOutdir(options.parent, options.outdir);
48
+ const autoId = `${new.target.name}#${options.name}@${path.normalize(options.outdir ?? "<root>")}`;
49
+ if (options.parent?.subprojects.find((p) => p.outdir === outdir)) {
50
+ throw new Error(`There is already a subproject with "outdir": ${outdir}`);
51
+ }
52
+ super(options.parent, autoId);
30
53
  this._components = new Array();
31
54
  this._subprojects = new Array();
32
55
  this.tips = new Array();
56
+ (0, constructs_2.tagAsProject)(this);
57
+ this.node.addMetadata("type", "project");
58
+ this.node.addMetadata("construct", new.target.name);
33
59
  this.initProject = (0, render_options_1.resolveInitProject)(options);
34
60
  this.name = options.name;
35
61
  this.parent = options.parent;
@@ -41,7 +67,7 @@ class Project {
41
67
  else {
42
68
  this.projenCommand = options.projenCommand ?? "npx projen";
43
69
  }
44
- this.outdir = this.determineOutdir(options.outdir);
70
+ this.outdir = outdir;
45
71
  this.root = this.parent ? this.parent.root : this;
46
72
  // must happen after this.outdir, this.parent and this.root are initialized
47
73
  this.parent?._addSubProject(this);
@@ -234,7 +260,9 @@ class Project {
234
260
  const isFile = (c) => c instanceof file_1.FileBase;
235
261
  const index = this._components.findIndex((c) => isFile(c) && c.absolutePath === absolute);
236
262
  if (index !== -1) {
237
- return this._components.splice(index, 1)[0];
263
+ const file = this._components.splice(index, 1)[0];
264
+ this.node.tryRemoveChild(file.node.id);
265
+ return file;
238
266
  }
239
267
  for (const child of this._subprojects) {
240
268
  const file = child.tryRemoveFile(absolute);
@@ -391,36 +419,10 @@ class Project {
391
419
  }
392
420
  this._subprojects.push(subproject);
393
421
  }
394
- /**
395
- * Resolves the project's output directory.
396
- */
397
- determineOutdir(outdirOption) {
398
- if (this.parent && outdirOption && path.isAbsolute(outdirOption)) {
399
- throw new Error('"outdir" must be a relative path');
400
- }
401
- // if this is a subproject, it is relative to the parent
402
- if (this.parent) {
403
- if (!outdirOption) {
404
- throw new Error('"outdir" must be specified for subprojects');
405
- }
406
- return path.resolve(this.parent.outdir, outdirOption);
407
- }
408
- // if this is running inside a test and outdir is not explicitly set
409
- // use a temp directory (unless cwd is aleady under tmp)
410
- if (common_1.IS_TEST_RUN && !outdirOption) {
411
- const realCwd = (0, fs_1.realpathSync)(process.cwd());
412
- const realTmp = (0, fs_1.realpathSync)((0, os_1.tmpdir)());
413
- if (realCwd.startsWith(realTmp)) {
414
- return path.resolve(realCwd, outdirOption ?? ".");
415
- }
416
- return (0, fs_1.mkdtempSync)(path.join((0, os_1.tmpdir)(), "projen."));
417
- }
418
- return path.resolve(outdirOption ?? ".");
419
- }
420
422
  }
421
423
  exports.Project = Project;
422
424
  _a = JSII_RTTI_SYMBOL_1;
423
- Project[_a] = { fqn: "projen.Project", version: "0.76.8" };
425
+ Project[_a] = { fqn: "projen.Project", version: "0.76.10" };
424
426
  /**
425
427
  * The name of the default task (the task executed when `projen` is run without arguments). Normally
426
428
  * this task should synthesize the project files.
@@ -448,4 +450,30 @@ var ProjectType;
448
450
  */
449
451
  ProjectType["APP"] = "app";
450
452
  })(ProjectType || (exports.ProjectType = ProjectType = {}));
451
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvamVjdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9wcm9qZWN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsMkJBQTJEO0FBQzNELDJCQUE0QjtBQUM1Qiw2QkFBNkI7QUFDN0IsNkJBQTZCO0FBQzdCLHVDQUFtRDtBQUNuRCxxQ0FBdUQ7QUFFdkQsaURBQThDO0FBQzlDLGlDQUFrQztBQUNsQyxtREFBb0Q7QUFDcEQsK0NBQThEO0FBRTlELGdFQUFpRTtBQUNqRSxpQ0FBa0M7QUFDbEMscUNBQWlEO0FBQ2pELCtDQUEyQztBQUUzQyxtREFBK0Q7QUFDL0QsbURBQW9FO0FBQ3BFLCtDQUFnRTtBQUVoRSxtQ0FBZ0M7QUFDaEMsaUNBQWtDO0FBeUdsQzs7R0FFRztBQUNILE1BQWEsT0FBTztJQThGbEIsWUFBWSxPQUF1QjtRQU5sQixnQkFBVyxHQUFHLElBQUksS0FBSyxFQUFhLENBQUM7UUFDckMsaUJBQVksR0FBRyxJQUFJLEtBQUssRUFBVyxDQUFDO1FBQ3BDLFNBQUksR0FBRyxJQUFJLEtBQUssRUFBVSxDQUFDO1FBSzFDLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBQSxtQ0FBa0IsRUFBQyxPQUFPLENBQUMsQ0FBQztRQUUvQyxJQUFJLENBQUMsSUFBSSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUM7UUFDekIsSUFBSSxDQUFDLE1BQU0sR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDO1FBQzdCLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxFQUFFLENBQUM7UUFFN0IsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFBLGVBQVEsRUFBQyxPQUFPLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBRXRELElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUNoQixJQUFJLENBQUMsYUFBYSxHQUFHLGtCQUFrQixDQUFDO1NBQ3pDO2FBQU07WUFDTCxJQUFJLENBQUMsYUFBYSxHQUFHLE9BQU8sQ0FBQyxhQUFhLElBQUks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WyJpbXBvcnQgeyBta2R0ZW1wU3luYywgcmVhbHBhdGhTeW5jLCByZW5hbWVTeW5jIH0gZnJvbSBcImZzXCI7XG5pbXBvcnQgeyB0bXBkaXIgfSBmcm9tIFwib3NcIjtcbmltcG9ydCAqIGFzIHBhdGggZnJvbSBcInBhdGhcIjtcbmltcG9ydCAqIGFzIGdsb2IgZnJvbSBcImdsb2JcIjtcbmltcG9ydCB7IGNsZWFudXAsIEZJTEVfTUFOSUZFU1QgfSBmcm9tIFwiLi9jbGVhbnVwXCI7XG5pbXBvcnQgeyBJU19URVNUX1JVTiwgUFJPSkVOX1ZFUlNJT04gfSBmcm9tIFwiLi9jb21tb25cIjtcbmltcG9ydCB7IENvbXBvbmVudCB9IGZyb20gXCIuL2NvbXBvbmVudFwiO1xuaW1wb3J0IHsgRGVwZW5kZW5jaWVzIH0gZnJvbSBcIi4vZGVwZW5kZW5jaWVzXCI7XG5pbXBvcnQgeyBGaWxlQmFzZSB9IGZyb20gXCIuL2ZpbGVcIjtcbmltcG9ydCB7IEdpdEF0dHJpYnV0ZXNGaWxlIH0gZnJvbSBcIi4vZ2l0YXR0cmlidXRlc1wiO1xuaW1wb3J0IHsgSWdub3JlRmlsZSwgSWdub3JlRmlsZU9wdGlvbnMgfSBmcm9tIFwiLi9pZ25vcmUtZmlsZVwiO1xuaW1wb3J0ICogYXMgaW52ZW50b3J5IGZyb20gXCIuL2ludmVudG9yeVwiO1xuaW1wb3J0IHsgcmVzb2x2ZUluaXRQcm9qZWN0IH0gZnJvbSBcIi4vamF2YXNjcmlwdC9yZW5kZXItb3B0aW9uc1wiO1xuaW1wb3J0IHsgSnNvbkZpbGUgfSBmcm9tIFwiLi9qc29uXCI7XG5pbXBvcnQgeyBMb2dnZXIsIExvZ2dlck9wdGlvbnMgfSBmcm9tIFwiLi9sb2dnZXJcIjtcbmltcG9ydCB7IE9iamVjdEZpbGUgfSBmcm9tIFwiLi9vYmplY3QtZmlsZVwiO1xuaW1wb3J0IHsgSW5pdFByb2plY3RPcHRpb25IaW50cyB9IGZyb20gXCIuL29wdGlvbi1oaW50c1wiO1xuaW1wb3J0IHsgUHJvamVjdEJ1aWxkIGFzIFByb2plY3RCdWlsZCB9IGZyb20gXCIuL3Byb2plY3QtYnVpbGRcIjtcbmltcG9ydCB7IFByb2plbnJjSnNvbiwgUHJvamVucmNKc29uT3B0aW9ucyB9IGZyb20gXCIuL3Byb2plbnJjLWpzb25cIjtcbmltcG9ydCB7IFJlbm92YXRlYm90LCBSZW5vdmF0ZWJvdE9wdGlvbnMgfSBmcm9tIFwiLi9yZW5vdmF0ZWJvdFwiO1xuaW1wb3J0IHsgVGFzaywgVGFza09wdGlvbnMgfSBmcm9tIFwiLi90YXNrXCI7XG5pbXBvcnQgeyBUYXNrcyB9IGZyb20gXCIuL3Rhc2tzXCI7XG5pbXBvcnQgeyBpc1RydXRoeSB9IGZyb20gXCIuL3V0aWxcIjtcblxuLyoqXG4gKiBPcHRpb25zIGZvciBgUHJvamVjdGAuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUHJvamVjdE9wdGlvbnMge1xuICAvKipcbiAgICogVGhpcyBpcyB0aGUgbmFtZSBvZiB5b3VyIHByb2plY3QuXG4gICAqXG4gICAqIEBkZWZhdWx0ICRCQVNFRElSXG4gICAqIEBmZWF0dXJlZFxuICAgKi9cbiAgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgcGFyZW50IHByb2plY3QsIGlmIHRoaXMgcHJvamVjdCBpcyBwYXJ0IG9mIGEgYmlnZ2VyIHByb2plY3QuXG4gICAqL1xuICByZWFkb25seSBwYXJlbnQ/OiBQcm9qZWN0O1xuXG4gIC8qKlxuICAgKiBUaGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhlIHByb2plY3QuXG4gICAqXG4gICAqIFJlbGF0aXZlIHRvIHRoaXMgZGlyZWN0b3J5LCBhbGwgZmlsZXMgYXJlIHN5bnRoZXNpemVkLlxuICAgKlxuICAgKiBJZiB0aGlzIHByb2plY3QgaGFzIGEgcGFyZW50LCB0aGlzIGRpcmVjdG9yeSBpcyByZWxhdGl2ZSB0byB0aGUgcGFyZW50XG4gICAqIGRpcmVjdG9yeSBhbmQgaXQgY2Fubm90IGJlIHRoZSBzYW1lIGFzIHRoZSBwYXJlbnQgb3IgYW55IG9mIGl0J3Mgb3RoZXJcbiAgICogc3VicHJvamVjdHMuXG4gICAqXG4gICAqIEBkZWZhdWx0IFwiLlwiXG4gICAqL1xuICByZWFkb25seSBvdXRkaXI/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIENvbmZpZ3VyZSBsb2dnaW5nIG9wdGlvbnMgc3VjaCBhcyB2ZXJib3NpdHkuXG4gICAqIEBkZWZhdWx0IHt9XG4gICAqL1xuICByZWFkb25seSBsb2dnaW5nPzogTG9nZ2VyT3B0aW9ucztcblxuICAvKipcbiAgICogR2VuZXJhdGUgKG9uY2UpIC5wcm9qZW5yYy5qc29uIChpbiBKU09OKS4gU2V0IHRvIGBmYWxzZWAgaW4gb3JkZXIgdG8gZGlzYWJsZVxuICAgKiAucHJvamVucmMuanNvbiBnZW5lcmF0aW9uLlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgcHJvamVucmNKc29uPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogT3B0aW9ucyBmb3IgLnByb2plbnJjLmpzb25cbiAgICogQGRlZmF1bHQgLSBkZWZhdWx0IG9wdGlvbnNcbiAgICovXG4gIHJlYWRvbmx5IHByb2plbnJjSnNvbk9wdGlvbnM/OiBQcm9qZW5yY0pzb25PcHRpb25zO1xuXG4gIC8qKlxuICAgKiBUaGUgc2hlbGwgY29tbWFuZCB0byB1c2UgaW4gb3JkZXIgdG8gcnVuIHRoZSBwcm9qZW4gQ0xJLlxuICAgKlxuICAgKiBDYW4gYmUgdXNlZCB0byBjdXN0b21pemUgaW4gc3BlY2lhbCBlbnZpcm9ubWVudHMuXG4gICAqXG4gICAqIEBkZWZhdWx0IFwibnB4IHByb2plblwiXG4gICAqL1xuICByZWFkb25seSBwcm9qZW5Db21tYW5kPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBVc2UgcmVub3ZhdGVib3QgdG8gaGFuZGxlIGRlcGVuZGVuY3kgdXBncmFkZXMuXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSByZW5vdmF0ZWJvdD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIE9wdGlvbnMgZm9yIHJlbm92YXRlYm90LlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGRlZmF1bHQgb3B0aW9uc1xuICAgKi9cbiAgcmVhZG9ubHkgcmVub3ZhdGVib3RPcHRpb25zPzogUmVub3ZhdGVib3RPcHRpb25zO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGNvbW1pdCB0aGUgbWFuYWdlZCBmaWxlcyBieSBkZWZhdWx0LlxuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICByZWFkb25seSBjb21taXRHZW5lcmF0ZWQ/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBDb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIGdpdFxuICAgKi9cbiAgcmVhZG9ubHkgZ2l0T3B0aW9ucz86IEdpdE9wdGlvbnM7XG5cbiAgLyoqXG4gICAqIENvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgLmdpdGlnbm9yZSBmaWxlXG4gICAqL1xuICByZWFkb25seSBnaXRJZ25vcmVPcHRpb25zPzogSWdub3JlRmlsZU9wdGlvbnM7XG59XG5cbi8qKlxuICogR2l0IGNvbmZpZ3VyYXRpb24gb3B0aW9uc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIEdpdE9wdGlvbnMge1xuICAvKipcbiAgICogRmlsZSBwYXR0ZXJucyB0byBtYXJrIGFzIHN0b3JlZCBpbiBHaXQgTEZTXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gTm8gZmlsZXMgc3RvcmVkIGluIExGU1xuICAgKi9cbiAgcmVhZG9ubHkgbGZzUGF0dGVybnM/OiBzdHJpbmdbXTtcbn1cblxuLyoqXG4gKiBCYXNlIHByb2plY3RcbiAqL1xuZXhwb3J0IGNsYXNzIFByb2plY3Qge1xuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIGRlZmF1bHQgdGFzayAodGhlIHRhc2sgZXhlY3V0ZWQgd2hlbiBgcHJvamVuYCBpcyBydW4gd2l0aG91dCBhcmd1bWVudHMpLiBOb3JtYWxseVxuICAgKiB0aGlzIHRhc2sgc2hvdWxkIHN5bnRoZXNpemUgdGhlIHByb2plY3QgZmlsZXMuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IERFRkFVTFRfVEFTSyA9IFwiZGVmYXVsdFwiO1xuXG4gIC8qKlxuICAgKiBQcm9qZWN0IG5hbWUuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiAuZ2l0aWdub3JlXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZ2l0aWdub3JlOiBJZ25vcmVGaWxlO1xuXG4gIC8qKlxuICAgKiBUaGUgLmdpdGF0dHJpYnV0ZXMgZmlsZSBmb3IgdGhpcyByZXBvc2l0b3J5LlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGdpdGF0dHJpYnV0ZXM6IEdpdEF0dHJpYnV0ZXNGaWxlO1xuXG4gIC8qKlxuICAgKiBBIHBhcmVudCBwcm9qZWN0LiBJZiB1bmRlZmluZWQsIHRoaXMgaXMgdGhlIHJvb3QgcHJvamVjdC5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBwYXJlbnQ/OiBQcm9qZWN0O1xuXG4gIC8qKlxuICAgKiBBYnNvbHV0ZSBvdXRwdXQgZGlyZWN0b3J5IG9mIHRoaXMgcHJvamVjdC5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBvdXRkaXI6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHJvb3QgcHJvamVjdC5cbiAgICoqL1xuICBwdWJsaWMgcmVhZG9ubHkgcm9vdDogUHJvamVjdDtcblxuICAvKipcbiAgICogUHJvamVjdCB0YXNrcy5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSB0YXNrczogVGFza3M7XG5cbiAgLyoqXG4gICAqIFByb2plY3QgZGVwZW5kZW5jaWVzLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGRlcHM6IERlcGVuZGVuY2llcztcblxuICAvKipcbiAgICogTG9nZ2luZyB1dGlsaXRpZXMuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgbG9nZ2VyOiBMb2dnZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBvcHRpb25zIHVzZWQgd2hlbiB0aGlzIHByb2plY3QgaXMgYm9vdHN0cmFwcGVkIHZpYSBgcHJvamVuIG5ld2AuIEl0XG4gICAqIGluY2x1ZGVzIHRoZSBvcmlnaW5hbCBzZXQgb2Ygb3B0aW9ucyBwYXNzZWQgdG8gdGhlIENMSSBhbmQgYWxzbyB0aGUgSlNJSVxuICAgKiBGUU4gb2YgdGhlIHByb2plY3QgdHlwZS5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBpbml0UHJvamVjdD86IEluaXRQcm9qZWN0O1xuXG4gIC8qKlxuICAgKiBUaGUgY29tbWFuZCB0byB1c2UgaW4gb3JkZXIgdG8gcnVuIHRoZSBwcm9qZW4gQ0xJLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHByb2plbkNvbW1hbmQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhpcyBpcyB0aGUgXCJkZWZhdWx0XCIgdGFzaywgdGhlIG9uZSB0aGF0IGV4ZWN1dGVzIFwicHJvamVuXCIuIFVuZGVmaW5lZCBpZlxuICAgKiB0aGUgcHJvamVjdCBpcyBiZWluZyBlamVjdGVkLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGRlZmF1bHRUYXNrPzogVGFzaztcblxuICAvKipcbiAgICogVGhpcyB0YXNrIGVqZWN0cyB0aGUgcHJvamVjdCBmcm9tIHByb2plbi4gVGhpcyBpcyB1bmRlZmluZWQgaWYgdGhlIHByb2plY3RcbiAgICogaXQgc2VsZiBpcyBiZWluZyBlamVjdGVkLlxuICAgKlxuICAgKiBTZWUgZG9jcyBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiAgICovXG4gIHByaXZhdGUgcmVhZG9ubHkgZWplY3RUYXNrPzogVGFzaztcblxuICAvKipcbiAgICogTWFuYWdlcyB0aGUgYnVpbGQgcHJvY2VzcyBvZiB0aGUgcHJvamVjdC5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBwcm9qZWN0QnVpbGQ6IFByb2plY3RCdWlsZDtcblxuICAvKipcbiAgICogV2hldGhlciB0byBjb21taXQgdGhlIG1hbmFnZWQgZmlsZXMgYnkgZGVmYXVsdC5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBjb21taXRHZW5lcmF0ZWQ6IGJvb2xlYW47XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfY29tcG9uZW50cyA9IG5ldyBBcnJheTxDb21wb25lbnQ+KCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3N1YnByb2plY3RzID0gbmV3IEFycmF5PFByb2plY3Q+KCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgdGlwcyA9IG5ldyBBcnJheTxzdHJpbmc+KCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgZXhjbHVkZUZyb21DbGVhbnVwOiBzdHJpbmdbXTtcbiAgcHJpdmF0ZSByZWFkb25seSBfZWplY3RlZDogYm9vbGVhbjtcblxuICBjb25zdHJ1Y3RvcihvcHRpb25zOiBQcm9qZWN0T3B0aW9ucykge1xuICAgIHRoaXMuaW5pdFByb2plY3QgPSByZXNvbHZlSW5pdFByb2plY3Qob3B0aW9ucyk7XG5cbiAgICB0aGlzLm5hbWUgPSBvcHRpb25zLm5hbWU7XG4gICAgdGhpcy5wYXJlbnQgPSBvcHRpb25zLnBhcmVudDtcbiAgICB0aGlzLmV4Y2x1ZGVGcm9tQ2xlYW51cCA9IFtdO1xuXG4gICAgdGhpcy5fZWplY3RlZCA9IGlzVHJ1dGh5KHByb2Nlc3MuZW52LlBST0pFTl9FSkVDVElORyk7XG5cbiAgICBpZiAodGhpcy5lamVjdGVkKSB7XG4gICAgICB0aGlzLnByb2plbkNvbW1hbmQgPSBcInNjcmlwdHMvcnVuLXRhc2tcIjtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wcm9qZW5Db21tYW5kID0gb3B0aW9ucy5wcm9qZW5Db21tYW5kID8/IFwibnB4IHByb2plblwiO1xuICAgIH1cblxuICAgIHRoaXMub3V0ZGlyID0gdGhpcy5kZXRlcm1pbmVPdXRkaXIob3B0aW9ucy5vdXRkaXIpO1xuICAgIHRoaXMucm9vdCA9IHRoaXMucGFyZW50ID8gdGhpcy5wYXJlbnQucm9vdCA6IHRoaXM7XG5cbiAgICAvLyBtdXN0IGhhcHBlbiBhZnRlciB0aGlzLm91dGRpciwgdGhpcy5wYXJlbnQgYW5kIHRoaXMucm9vdCBhcmUgaW5pdGlhbGl6ZWRcbiAgICB0aGlzLnBhcmVudD8uX2FkZFN1YlByb2plY3QodGhpcyk7XG5cbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAgIHRoaXMuZ2l0YXR0cmlidXRlcyA9IG5ldyBHaXRBdHRyaWJ1dGVzRmlsZSh0aGlzKTtcbiAgICB0aGlzLmFubm90YXRlR2VuZXJhdGVkKFwiLy5wcm9qZW4vKipcIik7IC8vIGNvbnRlbnRzICBvZiB0aGUgLnByb2plbi8gZGlyZWN0b3J5IGFyZSBnZW5lcmF0ZWQgYnkgcHJvamVuXG4gICAgdGhpcy5hbm5vdGF0ZUdlbmVyYXRlZChgLyR7dGhpcy5naXRhdHRyaWJ1dGVzLnBhdGh9YCk7IC8vIHRoZSAuZ2l0YXR0cmlidXRlcyBmaWxlIGl0c2VsZiBpcyBnZW5lcmF0ZWRcblxuICAgIGlmIChvcHRpb25zLmdpdE9wdGlvbnM/Lmxmc1BhdHRlcm5zKSB7XG4gICAgICBmb3IgKGNvbnN0IHBhdHRlcm4gb2Ygb3B0aW9ucy5naXRPcHRpb25zLmxmc1BhdHRlcm5zKSB7XG4gICAgICAgIHRoaXMuZ2l0YXR0cmlidXRlcy5hZGRBdHRyaWJ1dGVzKFxuICAgICAgICAgIHBhdHRlcm4sXG4gICAgICAgICAgXCJmaWx0ZXI9bGZzXCIsXG4gICAgICAgICAgXCJkaWZmPWxmc1wiLFxuICAgICAgICAgIFwibWVyZ2U9bGZzXCIsXG4gICAgICAgICAgXCItdGV4dFwiXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5naXRpZ25vcmUgPSBuZXcgSWdub3JlRmlsZShcbiAgICAgIHRoaXMsXG4gICAgICBcIi5naXRpZ25vcmVcIixcbiAgICAgIG9wdGlvbnMuZ2l0SWdub3JlT3B0aW9uc1xuICAgICk7XG4gICAgdGhpcy5naXRpZ25vcmUuZXhjbHVkZShcIm5vZGVfbW9kdWxlcy9cIik7IC8vIGNyZWF0ZWQgYnkgcnVubmluZyBgbnB4IHByb2plbmBcbiAgICB0aGlzLmdpdGlnbm9yZS5pbmNsdWRlKGAvJHt0aGlzLmdpdGF0dHJpYnV0ZXMucGF0aH1gKTtcblxuICAgIC8vIG9oIG5vOiB0YXNrcyBkZXBlbmRzIG9uIGdpdGlnbm9yZSBzbyBpdCBoYXMgdG8gYmUgaW5pdGlhbGl6ZWQgYWZ0ZXJcbiAgICAvLyBzbWVsbHMgbGlrZSBkZXAgaW5qZWN0aW9uIGJ1dCBnb2QgZm9yYmlkLlxuICAgIHRoaXMudGFza3MgPSBuZXcgVGFza3ModGhpcyk7XG5cbiAgICBpZiAoIXRoaXMuZWplY3RlZCkge1xuICAgICAgdGhpcy5kZWZhdWx0VGFzayA9IHRoaXMudGFza3MuYWRkVGFzayhQcm9qZWN0LkRFRkFVTFRfVEFTSywge1xuICAgICAgICBkZXNjcmlwdGlvbjogXCJTeW50aGVzaXplIHByb2plY3QgZmlsZXNcIixcbiAgICAgIH0pO1xuXG4gICAgICAvLyBTdWJ0YXNrcyBzaG91bGQgY2FsbCB0aGUgcm9vdCB0YXNrIGZvciBzeW50aFxuICAgICAgaWYgKHRoaXMucGFyZW50KSB7XG4gICAgICAgIHRoaXMuZGVmYXVsdFRhc2suZXhlYyhgJHt0aGlzLnByb2plbkNvbW1hbmR9ICR7UHJvamVjdC5ERUZBVUxUX1RBU0t9YCwge1xuICAgICAgICAgIGN3ZDogcGF0aC5yZWxhdGl2ZSh0aGlzLm91dGRpciwgdGhpcy5yb290Lm91dGRpciksXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBpZiAoIXRoaXMucGFyZW50KSB7XG4gICAgICAgIHRoaXMuZWplY3RUYXNrID0gdGhpcy50YXNrcy5hZGRUYXNrKFwiZWplY3RcIiwge1xuICAgICAgICAgIGRlc2NyaXB0aW9uOiBcIlJlbW92ZSBwcm9qZW4gZnJvbSB0aGUgcHJvamVjdFwiLFxuICAgICAgICAgIGVudjoge1xuICAgICAgICAgICAgUFJPSkVOX0VKRUNUSU5HOiBcInRydWVcIixcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5lamVjdFRhc2suc3Bhd24odGhpcy5kZWZhdWx0VGFzayk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5wcm9qZWN0QnVpbGQgPSBuZXcgUHJvamVjdEJ1aWxkKHRoaXMpO1xuXG4gICAgdGhpcy5kZXBzID0gbmV3IERlcGVuZGVuY2llcyh0aGlzKTtcblxuICAgIHRoaXMubG9nZ2VyID0gbmV3IExvZ2dlcih0aGlzLCBvcHRpb25zLmxvZ2dpbmcpO1xuXG4gICAgY29uc3QgcHJvamVucmNKc29uID0gb3B0aW9ucy5wcm9qZW5yY0pzb24gPz8gZmFsc2U7XG4gICAgaWYgKCF0aGlzLnBhcmVudCAmJiBwcm9qZW5yY0pzb24pIHtcbiAgICAgIG5ldyBQcm9qZW5yY0pzb24odGhpcywgb3B0aW9ucy5wcm9qZW5yY0pzb25PcHRpb25zKTtcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucy5yZW5vdmF0ZWJvdCkge1xuICAgICAgbmV3IFJlbm92YXRlYm90KHRoaXMsIG9wdGlvbnMucmVub3ZhdGVib3RPcHRpb25zKTtcbiAgICB9XG5cbiAgICB0aGlzLmNvbW1pdEdlbmVyYXRlZCA9IG9wdGlvbnMuY29tbWl0R2VuZXJhdGVkID8/IHRydWU7XG5cbiAgICBpZiAoIXRoaXMuZWplY3RlZCkge1xuICAgICAgbmV3IEpzb25GaWxlKHRoaXMsIEZJTEVfTUFOSUZFU1QsIHtcbiAgICAgICAgb21pdEVtcHR5OiB0cnVlLFxuICAgICAgICBvYmo6ICgpID0+ICh7XG4gICAgICAgICAgLy8gcmVwbGFjZSBgXFxgIHdpdGggYC9gIHRvIGVuc3VyZSBwYXRocyBtYXRjaCBhY3Jvc3MgcGxhdGZvcm1zXG4gICAgICAgICAgZmlsZXM6IHRoaXMuZmlsZXNcbiAgICAgICAgICAgIC5maWx0ZXIoKGYpID0+IGYucmVhZG9ubHkpXG4gICAgICAgICAgICAubWFwKChmKSA9PiBmLnBhdGgucmVwbGFjZSgvXFxcXC9nLCBcIi9cIikpLFxuICAgICAgICB9KSxcbiAgICAgICAgLy8gVGhpcyBmaWxlIGlzIHVzZWQgYnkgcHJvamVuIHRvIHRyYWNrIHRoZSBnZW5lcmF0ZWQgZmlsZXMsIHNvIG11c3QgYmUgY29tbWl0dGVkLlxuICAgICAgICBjb21taXR0ZWQ6IHRydWUsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhbGwgdGhlIGNvbXBvbmVudHMgd2l0aGluIHRoaXMgcHJvamVjdC5cbiAgICovXG4gIHB1YmxpYyBnZXQgY29tcG9uZW50cygpIHtcbiAgICByZXR1cm4gWy4uLnRoaXMuX2NvbXBvbmVudHNdO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYWxsIHRoZSBzdWJwcm9qZWN0cyB3aXRoaW4gdGhpcyBwcm9qZWN0LlxuICAgKi9cbiAgcHVibGljIGdldCBzdWJwcm9qZWN0cygpIHtcbiAgICByZXR1cm4gWy4uLnRoaXMuX3N1YnByb2plY3RzXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBbGwgZmlsZXMgaW4gdGhpcyBwcm9qZWN0LlxuICAgKi9cbiAgcHVibGljIGdldCBmaWxlcygpOiBGaWxlQmFzZVtdIHtcbiAgICBjb25zdCBpc0ZpbGUgPSAoYzogQ29tcG9uZW50KTogYyBpcyBGaWxlQmFzZSA9PiBjIGluc3RhbmNlb2YgRmlsZUJhc2U7XG4gICAgcmV0dXJuIHRoaXMuX2NvbXBvbmVudHNcbiAgICAgIC5maWx0ZXIoaXNGaWxlKVxuICAgICAgLnNvcnQoKGYxLCBmMikgPT4gZjEucGF0aC5sb2NhbGVDb21wYXJlKGYyLnBhdGgpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGEgbmV3IHRhc2sgdG8gdGhpcyBwcm9qZWN0LiBUaGlzIHdpbGwgZmFpbCBpZiB0aGUgcHJvamVjdCBhbHJlYWR5IGhhc1xuICAgKiBhIHRhc2sgd2l0aCB0aGlzIG5hbWUuXG4gICAqXG4gICAqIEBwYXJhbSBuYW1lIFRoZSB0YXNrIG5hbWUgdG8gYWRkXG4gICAqIEBwYXJhbSBwcm9wcyBUYXNrIHByb3BlcnRpZXNcbiAgICovXG4gIHB1YmxpYyBhZGRUYXNrKG5hbWU6IHN0cmluZywgcHJvcHM6IFRhc2tPcHRpb25zID0ge30pIHtcbiAgICByZXR1cm4gdGhpcy50YXNrcy5hZGRUYXNrKG5hbWUsIHByb3BzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmVzIGEgdGFzayBmcm9tIGEgcHJvamVjdC5cbiAgICpcbiAgICogQHBhcmFtIG5hbWUgVGhlIG5hbWUgb2YgdGhlIHRhc2sgdG8gcmVtb3ZlLlxuICAgKlxuICAgKiBAcmV0dXJucyBUaGUgYFRhc2tgIHRoYXQgd2FzIHJlbW92ZWQsIG90aGVyd2lzZSBgdW5kZWZpbmVkYC5cbiAgICovXG4gIHB1YmxpYyByZW1vdmVUYXNrKG5hbWU6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLnRhc2tzLnJlbW92ZVRhc2sobmFtZSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGJ1aWxkVGFzaygpIHtcbiAgICByZXR1cm4gdGhpcy5wcm9qZWN0QnVpbGQuYnVpbGRUYXNrO1xuICB9XG4gIHB1YmxpYyBnZXQgY29tcGlsZVRhc2soKSB7XG4gICAgcmV0dXJuIHRoaXMucHJvamVjdEJ1aWxkLmNvbXBpbGVUYXNrO1xuICB9XG4gIHB1YmxpYyBnZXQgdGVzdFRhc2soKSB7XG4gICAgcmV0dXJuIHRoaXMucHJvamVjdEJ1aWxkLnRlc3RUYXNrO1xuICB9XG4gIHB1YmxpYyBnZXQgcHJlQ29tcGlsZVRhc2soKSB7XG4gICAgcmV0dXJuIHRoaXMucHJvamVjdEJ1aWxkLnByZUNvbXBpbGVUYXNrO1xuICB9XG4gIHB1YmxpYyBnZXQgcG9zdENvbXBpbGVUYXNrKCkge1xuICAgIHJldHVybiB0aGlzLnByb2plY3RCdWlsZC5wb3N0Q29tcGlsZVRhc2s7XG4gIH1cbiAgcHVibGljIGdldCBwYWNrYWdlVGFzaygpIHtcbiAgICByZXR1cm4gdGhpcy5wcm9qZWN0QnVpbGQucGFja2FnZVRhc2s7XG4gIH1cblxuICAvKipcbiAgICogRmluZHMgYSBmaWxlIGF0IHRoZSBzcGVjaWZpZWQgcmVsYXRpdmUgcGF0aCB3aXRoaW4gdGhpcyBwcm9qZWN0IGFuZCBhbGxcbiAgICogaXRzIHN1YnByb2plY3RzLlxuICAgKlxuICAgKiBAcGFyYW0gZmlsZVBhdGggVGhlIGZpbGUgcGF0aC4gSWYgdGhpcyBwYXRoIGlzIHJlbGF0aXZlLCBpdCB3aWxsIGJlIHJlc29sdmVkXG4gICAqIGZyb20gdGhlIHJvb3Qgb2YgX3RoaXNfIHByb2plY3QuXG4gICAqIEByZXR1cm5zIGEgYEZpbGVCYXNlYCBvciB1bmRlZmluZWQgaWYgdGhlcmUgaXMgbm8gZmlsZSBpbiB0aGF0IHBhdGhcbiAgICovXG4gIHB1YmxpYyB0cnlGaW5kRmlsZShmaWxlUGF0aDogc3RyaW5nKTogRmlsZUJhc2UgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IGFic29sdXRlID0gcGF0aC5pc0Fic29sdXRlKGZpbGVQYXRoKVxuICAgICAgPyBmaWxlUGF0aFxuICAgICAgOiBwYXRoLnJlc29sdmUodGhpcy5vdXRkaXIsIGZpbGVQYXRoKTtcbiAgICBmb3IgKGNvbnN0IGZpbGUgb2YgdGhpcy5maWxlcykge1xuICAgICAgaWYgKGFic29sdXRlID09PSBmaWxlLmFic29sdXRlUGF0aCkge1xuICAgICAgICByZXR1cm4gZmlsZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIHRoaXMuX3N1YnByb2plY3RzKSB7XG4gICAgICBjb25zdCBmaWxlID0gY2hpbGQudHJ5RmluZEZpbGUoYWJzb2x1dGUpO1xuICAgICAgaWYgKGZpbGUpIHtcbiAgICAgICAgcmV0dXJuIGZpbGU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBGaW5kcyBhIGpzb24gZmlsZSBieSBuYW1lLlxuICAgKiBAcGFyYW0gZmlsZVBhdGggVGhlIGZpbGUgcGF0aC5cbiAgICogQGRlcHJlY2F0ZWQgdXNlIGB0cnlGaW5kT2JqZWN0RmlsZWBcbiAgICovXG4gIHB1YmxpYyB0cnlGaW5kSnNvbkZpbGUoZmlsZVBhdGg6IHN0cmluZyk6IEpzb25GaWxlIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBmaWxlID0gdGhpcy50cnlGaW5kT2JqZWN0RmlsZShmaWxlUGF0aCk7XG4gICAgaWYgKCFmaWxlKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGlmICghKGZpbGUgaW5zdGFuY2VvZiBKc29uRmlsZSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYGZvdW5kIGZpbGUgJHtmaWxlUGF0aH0gYnV0IGl0IGlzIG5vdCBhIEpzb25GaWxlLiBnb3Q6ICR7ZmlsZS5jb25zdHJ1Y3Rvci5uYW1lfWBcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZpbGU7XG4gIH1cblxuICAvKipcbiAgICogRmluZHMgYW4gb2JqZWN0IGZpbGUgKGxpa2UgSnNvbkZpbGUsIFlhbWxGaWxlLCBldGMuKSBieSBuYW1lLlxuICAgKiBAcGFyYW0gZmlsZVBhdGggVGhlIGZpbGUgcGF0aC5cbiAgICovXG4gIHB1YmxpYyB0cnlGaW5kT2JqZWN0RmlsZShmaWxlUGF0aDogc3RyaW5nKTogT2JqZWN0RmlsZSB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgZmlsZSA9IHRoaXMudHJ5RmluZEZpbGUoZmlsZVBhdGgpO1xuICAgIGlmICghZmlsZSkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBpZiAoIShmaWxlIGluc3RhbmNlb2YgT2JqZWN0RmlsZSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYGZvdW5kIGZpbGUgJHtmaWxlUGF0aH0gYnV0IGl0IGlzIG5vdCBhIE9iamVjdEZpbGUuIGdvdDogJHtmaWxlLmNvbnN0cnVjdG9yLm5hbWV9YFxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmlsZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGaW5kcyBhIGZpbGUgYXQgdGhlIHNwZWNpZmllZCByZWxhdGl2ZSBwYXRoIHdpdGhpbiB0aGlzIHByb2plY3QgYW5kIHJlbW92ZXNcbiAgICogaXQuXG4gICAqXG4gICAqIEBwYXJhbSBmaWxlUGF0aCBUaGUgZmlsZSBwYXRoLiBJZiB0aGlzIHBhdGggaXMgcmVsYXRpdmUsIGl0IHdpbGwgYmVcbiAgICogcmVzb2x2ZWQgZnJvbSB0aGUgcm9vdCBvZiBfdGhpc18gcHJvamVjdC5cbiAgICogQHJldHVybnMgYSBgRmlsZUJhc2VgIGlmIHRoZSBmaWxlIHdhcyBmb3VuZCBhbmQgcmVtb3ZlZCwgb3IgdW5kZWZpbmVkIGlmXG4gICAqIHRoZSBmaWxlIHdhcyBub3QgZm91bmQuXG4gICAqL1xuICBwdWJsaWMgdHJ5UmVtb3ZlRmlsZShmaWxlUGF0aDogc3RyaW5nKTogRmlsZUJhc2UgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IGFic29sdXRlID0gcGF0aC5pc0Fic29sdXRlKGZpbGVQYXRoKVxuICAgICAgPyBmaWxlUGF0aFxuICAgICAgOiBwYXRoLnJlc29sdmUodGhpcy5vdXRkaXIsIGZpbGVQYXRoKTtcbiAgICBjb25zdCBpc0ZpbGUgPSAoYzogQ29tcG9uZW50KTogYyBpcyBGaWxlQmFzZSA9PiBjIGluc3RhbmNlb2YgRmlsZUJhc2U7XG4gICAgY29uc3QgaW5kZXggPSB0aGlzLl9jb21wb25lbnRzLmZpbmRJbmRleChcbiAgICAgIChjKSA9PiBpc0ZpbGUoYykgJiYgYy5hYnNvbHV0ZVBhdGggPT09IGFic29sdXRlXG4gICAgKTtcblxuICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgIHJldHVybiB0aGlzLl9jb21wb25lbnRzLnNwbGljZShpbmRleCwgMSlbMF0gYXMgRmlsZUJhc2U7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBjaGlsZCBvZiB0aGlzLl9zdWJwcm9qZWN0cykge1xuICAgICAgY29uc3QgZmlsZSA9IGNoaWxkLnRyeVJlbW92ZUZpbGUoYWJzb2x1dGUpO1xuICAgICAgaWYgKGZpbGUpIHtcbiAgICAgICAgcmV0dXJuIGZpbGU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBQcmludHMgYSBcInRpcFwiIG1lc3NhZ2UgZHVyaW5nIHN5bnRoZXNpcy5cbiAgICogQHBhcmFtIG1lc3NhZ2UgVGhlIG1lc3NhZ2VcbiAgICogQGRlcHJlY2F0ZWQgLSB1c2UgYHByb2plY3QubG9nZ2VyLmluZm8obWVzc2FnZSlgIHRvIHNob3cgbWVzc2FnZXMgZHVyaW5nIHN5bnRoZXNpc1xuICAgKi9cbiAgcHVibGljIGFkZFRpcChtZXNzYWdlOiBzdHJpbmcpIHtcbiAgICB0aGlzLnRpcHMucHVzaChtZXNzYWdlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeGNsdWRlIHRoZSBtYXRjaGluZyBmaWxlcyBmcm9tIHByZS1zeW50aCBjbGVhbnVwLiBDYW4gYmUgdXNlZCB3aGVuLCBmb3IgZXhhbXBsZSwgc29tZVxuICAgKiBzb3VyY2UgZmlsZXMgaW5jbHVkZSB0aGUgcHJvamVuIG1hcmtlciBhbmQgd2UgZG9uJ3Qgd2FudCB0aGVtIHRvIGJlIGVyYXNlZCBkdXJpbmcgc3ludGguXG4gICAqXG4gICAqIEBwYXJhbSBnbG9icyBUaGUgZ2xvYiBwYXR0ZXJucyB0byBtYXRjaFxuICAgKi9cbiAgcHVibGljIGFkZEV4Y2x1ZGVGcm9tQ2xlYW51cCguLi5nbG9iczogc3RyaW5nW10pIHtcbiAgICB0aGlzLmV4Y2x1ZGVGcm9tQ2xlYW51cC5wdXNoKC4uLmdsb2JzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBzaGVsbCBjb21tYW5kIHRvIGV4ZWN1dGUgaW4gb3JkZXIgdG8gcnVuIGEgdGFzay5cbiAgICpcbiAgICogQnkgZGVmYXVsdCwgdGhpcyBpcyBgbnB4IHByb2plbkA8dmVyc2lvbj4gPHRhc2s+YFxuICAgKlxuICAgKiBAcGFyYW0gdGFzayBUaGUgdGFzayBmb3Igd2hpY2ggdGhlIGNvbW1hbmQgaXMgcmVxdWlyZWRcbiAgICovXG4gIHB1YmxpYyBydW5UYXNrQ29tbWFuZCh0YXNrOiBUYXNrKSB7XG4gICAgcmV0dXJuIGBucHggcHJvamVuQCR7UFJPSkVOX1ZFUlNJT059ICR7dGFzay5uYW1lfWA7XG4gIH1cblxuICAvKipcbiAgICogRXhjbHVkZSB0aGVzZSBmaWxlcyBmcm9tIHRoZSBidW5kbGVkIHBhY2thZ2UuIEltcGxlbWVudGVkIGJ5IHByb2plY3QgdHlwZXMgYmFzZWQgb24gdGhlXG4gICAqIHBhY2thZ2luZyBtZWNoYW5pc20uIEZvciBleGFtcGxlLCBgTm9kZVByb2plY3RgIGRlbGVnYXRlcyB0aGlzIHRvIGAubnBtaWdub3JlYC5cbiAgICpcbiAgICogQHBhcmFtIF9wYXR0ZXJuIFRoZSBnbG9iIHBhdHRlcm4gdG8gZXhjbHVkZVxuICAgKi9cbiAgcHVibGljIGFkZFBhY2thZ2VJZ25vcmUoX3BhdHRlcm46IHN0cmluZykge1xuICAgIC8vIG5vdGhpbmcgdG8gZG8gYXQgdGhlIGFic3RyYWN0IGxldmVsXG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhIC5naXRpZ25vcmUgcGF0dGVybi5cbiAgICogQHBhcmFtIHBhdHRlcm4gVGhlIGdsb2IgcGF0dGVybiB0byBpZ25vcmUuXG4gICAqL1xuICBwdWJsaWMgYWRkR2l0SWdub3JlKHBhdHRlcm46IHN0cmluZykge1xuICAgIHRoaXMuZ2l0aWdub3JlLmFkZFBhdHRlcm5zKHBhdHRlcm4pO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnNpZGVyIGEgc2V0IG9mIGZpbGVzIGFzIFwiZ2VuZXJhdGVkXCIuIFRoaXMgbWV0aG9kIGlzIGltcGxlbWVudGVkIGJ5XG4gICAqIGRlcml2ZWQgY2xhc3NlcyBhbmQgdXNlZCBmb3IgZXhhbXBsZSwgdG8gYWRkIGdpdCBhdHRyaWJ1dGVzIHRvIHRlbGwgR2l0SHViXG4gICAqIHRoYXQgY2VydGFpbiBmaWxlcyBhcmUgZ2VuZXJhdGVkLlxuICAgKlxuICAgKiBAcGFyYW0gX2dsb2IgdGhlIGdsb2IgcGF0dGVybiB0byBtYXRjaCAoY291bGQgYmUgYSBmaWxlIHBhdGgpLlxuICAgKi9cbiAgcHVibGljIGFubm90YXRlR2VuZXJhdGVkKF9nbG9iOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAvLyBub3RoaW5nIHRvIGRvIGF0IHRoZSBhYnN0cmFjdCBsZXZlbFxuICB9XG5cbiAgLyoqXG4gICAqIFN5bnRoZXNpemUgYWxsIHByb2plY3QgZmlsZXMgaW50byBgb3V0ZGlyYC5cbiAgICpcbiAgICogMS4gQ2FsbCBcInRoaXMucHJlU3ludGhlc2l6ZSgpXCJcbiAgICogMi4gRGVsZXRlIGFsbCBnZW5lcmF0ZWQgZmlsZXNcbiAgICogMy4gU3ludGhlc2l6ZSBhbGwgc3VicHJvamVjdHNcbiAgICogNC4gU3ludGhlc2l6ZSBhbGwgY29tcG9uZW50cyBvZiB0aGlzIHByb2plY3RcbiAgICogNS4gQ2FsbCBcInBvc3RTeW50aGVzaXplKClcIiBmb3IgYWxsIGNvbXBvbmVudHMgb2YgdGhpcyBwcm9qZWN0XG4gICAqIDYuIENhbGwgXCJ0aGlzLnBvc3RTeW50aGVzaXplKClcIlxuICAgKi9cbiAgcHVibGljIHN5bnRoKCk6IHZvaWQge1xuICAgIGNvbnN0IG91dGRpciA9IHRoaXMub3V0ZGlyO1xuICAgIHRoaXMubG9nZ2VyLmRlYnVnKFwiU3ludGhlc2l6aW5nIHByb2plY3QuLi5cIik7XG5cbiAgICB0aGlzLnByZVN5bnRoZXNpemUoKTtcblxuICAgIGZvciAoY29uc3QgY29tcCBvZiB0aGlzLl9jb21wb25lbnRzKSB7XG4gICAgICBjb21wLnByZVN5bnRoZXNpemUoKTtcbiAgICB9XG5cbiAgICAvLyB3ZSBleGNsdWRlIGFsbCBzdWJwcm9qZWN0IGRpcmVjdG9yaWVzIHRvIGVuc3VyZSB0aGF0IHdoZW4gc3VicHJvamVjdC5zeW50aCgpXG4gICAgLy8gZ2V0cyBjYWxsZWQgYmVsb3cgYWZ0ZXIgY2xlYW51cCgpLCBzdWJwcm9qZWN0IGdlbmVyYXRlZCBmaWxlcyBhcmUgbGVmdCBpbnRhY3RcbiAgICBmb3IgKGNvbnN0IHN1YnByb2plY3Qgb2YgdGhpcy5fc3VicHJvamVjdHMpIHtcbiAgICAgIHRoaXMuYWRkRXhjbHVkZUZyb21DbGVhbnVwKHN1YnByb2plY3Qub3V0ZGlyICsgXCIvKipcIik7XG4gICAgfVxuXG4gICAgLy8gZGVsZXRlIG9ycGhhbmVkIGZpbGVzIGJlZm9yZSB3ZSBzdGFydCBzeW50aGVzaXppbmcgbmV3IG9uZXNcbiAgICBjbGVhbnVwKFxuICAgICAgb3V0ZGlyLFxuICAgICAgdGhpcy5maWxlcy5tYXAoKGYpID0+IGYucGF0aC5yZXBsYWNlKC9cXFxcL2csIFwiL1wiKSksXG4gICAgICB0aGlzLmV4Y2x1ZGVGcm9tQ2xlYW51cFxuICAgICk7XG5cbiAgICBmb3IgKGNvbnN0IHN1YnByb2plY3Qgb2YgdGhpcy5fc3VicHJvamVjdHMpIHtcbiAgICAgIHN1YnByb2plY3Quc3ludGgoKTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGNvbXAgb2YgdGhpcy5fY29tcG9uZW50cykge1xuICAgICAgY29tcC5zeW50aGVzaXplKCk7XG4gICAgfVxuXG4gICAgaWYgKCFpc1RydXRoeShwcm9jZXNzLmVudi5QUk9KRU5fRElTQUJMRV9QT1NUKSkge1xuICAgICAgZm9yIChjb25zdCBjb21wIG9mIHRoaXMuX2NvbXBvbmVudHMpIHtcbiAgICAgICAgY29tcC5wb3N0U3ludGhlc2l6ZSgpO1xuICAgICAgfVxuXG4gICAgICAvLyBwcm9qZWN0LWxldmVsIGhvb2tcbiAgICAgIHRoaXMucG9zdFN5bnRoZXNpemUoKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5lamVjdGVkKSB7XG4gICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhcIkVqZWN0aW5nIHByb2plY3QuLi5cIik7XG5cbiAgICAgIC8vIEJhY2t1cCBwcm9qZW5yYyBmaWxlc1xuICAgICAgY29uc3QgZmlsZXMgPSBnbG9iLnN5bmMoXCIucHJvamVucmMuKlwiLCB7XG4gICAgICAgIGN3ZDogdGhpcy5vdXRkaXIsXG4gICAgICAgIGRvdDogdHJ1ZSxcbiAgICAgICAgbm9kaXI6IHRydWUsXG4gICAgICAgIGFic29sdXRlOiB0cnVlLFxuICAgICAgfSk7XG5cbiAgICAgIGZvciAoY29uc3QgZmlsZSBvZiBmaWxlcykge1xuICAgICAgICByZW5hbWVTeW5jKGZpbGUsIGAke2ZpbGV9LmJha2ApO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMubG9nZ2VyLmRlYnVnKFwiU3ludGhlc2lzIGNvbXBsZXRlXCIpO1xuICB9XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgb3Igbm90IHRoZSBwcm9qZWN0IGlzIGJlaW5nIGVqZWN0ZWQuXG4gICAqL1xuICBwdWJsaWMgZ2V0IGVqZWN0ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2VqZWN0ZWQ7XG4gIH1cblxuICAvKipcbiAgICogQ2FsbGVkIGJlZm9yZSBhbGwgY29tcG9uZW50cyBhcmUgc3ludGhlc2l6ZWQuXG4gICAqL1xuICBwdWJsaWMgcHJlU3ludGhlc2l6ZSgpIHt9XG5cbiAgLyoqXG4gICAqIENhbGxlZCBhZnRlciBhbGwgY29tcG9uZW50cyBhcmUgc3ludGhlc2l6ZWQuIE9yZGVyIGlzICpub3QqIGd1YXJhbnRlZWQuXG4gICAqL1xuICBwdWJsaWMgcG9zdFN5bnRoZXNpemUoKSB7fVxuXG4gIC8qKlxuICAgKiBBZGRzIGEgY29tcG9uZW50IHRvIHRoZSBwcm9qZWN0LlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHB1YmxpYyBfYWRkQ29tcG9uZW50KGNvbXBvbmVudDogQ29tcG9uZW50KSB7XG4gICAgdGhpcy5fY29tcG9uZW50cy5wdXNoKGNvbXBvbmVudCk7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhIHN1YnByb2plY3QgdG8gdGhpcyBwcm9qZWN0LlxuICAgKlxuICAgKiBUaGlzIGlzIGF1dG9tYXRpY2FsbHkgY2FsbGVkIHdoZW4gYSBuZXcgcHJvamVjdCBpcyBjcmVhdGVkIHdpdGggYHBhcmVudGBcbiAgICogcG9pbnRpbmcgdG8gdGhpcyBwcm9qZWN0LCBzbyB0aGVyZSBpcyBubyByZWFsIG5lZWQgdG8gY2FsbCB0aGlzIG1hbnVhbGx5LlxuICAgKlxuICAgKiBAcGFyYW0gc3VicHJvamVjdCBUaGUgY2hpbGQgcHJvamVjdCB0byBhZGQuXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgX2FkZFN1YlByb2plY3Qoc3VicHJvamVjdDogUHJvamVjdCkge1xuICAgIGlmIChzdWJwcm9qZWN0LnBhcmVudCAhPT0gdGhpcykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdcInBhcmVudFwiIG9mIGNoaWxkIHByb2plY3QgbXVzdCBiZSB0aGlzIHByb2plY3QnKTtcbiAgICB9XG5cbiAgICAvLyBjaGVjayB0aGF0IGBvdXRkaXJgIGlzIGV4Y2x1c2l2ZVxuICAgIGZvciAoY29uc3QgcCBvZiB0aGlzLl9zdWJwcm9qZWN0cykge1xuICAgICAgaWYgKHBhdGgucmVzb2x2ZShwLm91dGRpcikgPT09IHBhdGgucmVzb2x2ZShzdWJwcm9qZWN0Lm91dGRpcikpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBUaGVyZSBpcyBhbHJlYWR5IGEgc3VicHJvamVjdCB3aXRoIFwib3V0ZGlyXCI6ICR7c3VicHJvamVjdC5vdXRkaXJ9YFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuX3N1YnByb2plY3RzLnB1c2goc3VicHJvamVjdCk7XG4gIH1cblxuICAvKipcbiAgICogUmVzb2x2ZXMgdGhlIHByb2plY3QncyBvdXRwdXQgZGlyZWN0b3J5LlxuICAgKi9cbiAgcHJpdmF0ZSBkZXRlcm1pbmVPdXRkaXIob3V0ZGlyT3B0aW9uPzogc3RyaW5nKSB7XG4gICAgaWYgKHRoaXMucGFyZW50ICYmIG91dGRpck9wdGlvbiAmJiBwYXRoLmlzQWJzb2x1dGUob3V0ZGlyT3B0aW9uKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdcIm91dGRpclwiIG11c3QgYmUgYSByZWxhdGl2ZSBwYXRoJyk7XG4gICAgfVxuXG4gICAgLy8gaWYgdGhpcyBpcyBhIHN1YnByb2plY3QsIGl0IGlzIHJlbGF0aXZlIHRvIHRoZSBwYXJlbnRcbiAgICBpZiAodGhpcy5wYXJlbnQpIHtcbiAgICAgIGlmICghb3V0ZGlyT3B0aW9uKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignXCJvdXRkaXJcIiBtdXN0IGJlIHNwZWNpZmllZCBmb3Igc3VicHJvamVjdHMnKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHBhdGgucmVzb2x2ZSh0aGlzLnBhcmVudC5vdXRkaXIsIG91dGRpck9wdGlvbik7XG4gICAgfVxuXG4gICAgLy8gaWYgdGhpcyBpcyBydW5uaW5nIGluc2lkZSBhIHRlc3QgYW5kIG91dGRpciBpcyBub3QgZXhwbGljaXRseSBzZXRcbiAgICAvLyB1c2UgYSB0ZW1wIGRpcmVjdG9yeSAodW5sZXNzIGN3ZCBpcyBhbGVhZHkgdW5kZXIgdG1wKVxuICAgIGlmIChJU19URVNUX1JVTiAmJiAhb3V0ZGlyT3B0aW9uKSB7XG4gICAgICBjb25zdCByZWFsQ3dkID0gcmVhbHBhdGhTeW5jKHByb2Nlc3MuY3dkKCkpO1xuICAgICAgY29uc3QgcmVhbFRtcCA9IHJlYWxwYXRoU3luYyh0bXBkaXIoKSk7XG5cbiAgICAgIGlmIChyZWFsQ3dkLnN0YXJ0c1dpdGgocmVhbFRtcCkpIHtcbiAgICAgICAgcmV0dXJuIHBhdGgucmVzb2x2ZShyZWFsQ3dkLCBvdXRkaXJPcHRpb24gPz8gXCIuXCIpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbWtkdGVtcFN5bmMocGF0aC5qb2luKHRtcGRpcigpLCBcInByb2plbi5cIikpO1xuICAgIH1cblxuICAgIHJldHVybiBwYXRoLnJlc29sdmUob3V0ZGlyT3B0aW9uID8/IFwiLlwiKTtcbiAgfVxufVxuXG4vKipcbiAqIFdoaWNoIHR5cGUgb2YgcHJvamVjdCB0aGlzIGlzLlxuICpcbiAqIEBkZXByZWNhdGVkIG5vIGxvbmdlciBzdXBwb3J0ZWQgYXQgdGhlIGJhc2UgcHJvamVjdCBsZXZlbFxuICovXG5leHBvcnQgZW51bSBQcm9qZWN0VHlwZSB7XG4gIC8qKlxuICAgKiBUaGlzIG1vZHVsZSBtYXkgYmUgYSBlaXRoZXIgYSBsaWJyYXJ5IG9yIGFuIGFwcC5cbiAgICovXG4gIFVOS05PV04gPSBcInVua25vd25cIixcblxuICAvKipcbiAgICogVGhpcyBpcyBhIGxpYnJhcnksIGludGVuZGVkIHRvIGJlIHB1Ymxpc2hlZCB0byBhIHBhY2thZ2UgbWFuYWdlciBhbmRcbiAgICogY29uc3VtZWQgYnkgb3RoZXIgcHJvamVjdHMuXG4gICAqL1xuICBMSUIgPSBcImxpYlwiLFxuXG4gIC8qKlxuICAgKiBUaGlzIGlzIGFuIGFwcCAoc2VydmljZSwgdG9vbCwgd2Vic2l0ZSwgZXRjKS4gSXRzIGFydGlmYWN0cyBhcmUgaW50ZW5kZWQgdG9cbiAgICogYmUgZGVwbG95ZWQgb3IgcHVibGlzaGVkIGZvciBlbmQtdXNlciBjb25zdW1wdGlvbi5cbiAgICovXG4gIEFQUCA9IFwiYXBwXCIsXG59XG5cbi8qKlxuICogSW5mb3JtYXRpb24gcGFzc2VkIGZyb20gYHByb2plbiBuZXdgIHRvIHRoZSBwcm9qZWN0IG9iamVjdCB3aGVuIHRoZSBwcm9qZWN0XG4gKiBpcyBmaXJzdCBjcmVhdGVkLiBJdCBpcyB1c2VkIHRvIGdlbmVyYXRlIHByb2plbnJjIGZpbGVzIGluIHZhcmlvdXMgbGFuZ3VhZ2VzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEluaXRQcm9qZWN0IHtcbiAgLyoqXG4gICAqIFRoZSBKU0lJIEZRTiBvZiB0aGUgcHJvamVjdCB0eXBlLlxuICAgKi9cbiAgcmVhZG9ubHkgZnFuOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEluaXRpYWwgYXJndW1lbnRzIHBhc3NlZCB0byBgcHJvamVuIG5ld2AuXG4gICAqL1xuICByZWFkb25seSBhcmdzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuXG4gIC8qKlxuICAgKiBQcm9qZWN0IG1ldGFkYXRhLlxuICAgKi9cbiAgcmVhZG9ubHkgdHlwZTogaW52ZW50b3J5LlByb2plY3RUeXBlO1xuXG4gIC8qKlxuICAgKiBJbmNsdWRlIGNvbW1lbnRlZCBvdXQgb3B0aW9ucy4gRG9lcyBub3QgYXBwbHkgdG8gcHJvamVucmMuanNvbiBmaWxlcy5cbiAgICogQGRlZmF1bHQgSW5pdFByb2plY3RPcHRpb25IaW50cy5GRUFUVVJFRFxuICAgKi9cbiAgcmVhZG9ubHkgY29tbWVudHM6IEluaXRQcm9qZWN0T3B0aW9uSGludHM7XG59XG4iXX0=
453
+ /**
454
+ * Resolves the project's output directory.
455
+ */
456
+ function determineOutdir(parent, outdirOption) {
457
+ if (parent && outdirOption && path.isAbsolute(outdirOption)) {
458
+ throw new Error('"outdir" must be a relative path');
459
+ }
460
+ // if this is a subproject, it is relative to the parent
461
+ if (parent) {
462
+ if (!outdirOption) {
463
+ throw new Error('"outdir" must be specified for subprojects');
464
+ }
465
+ return path.resolve(parent.outdir, outdirOption);
466
+ }
467
+ // if this is running inside a test and outdir is not explicitly set
468
+ // use a temp directory (unless cwd is already under tmp)
469
+ if (common_1.IS_TEST_RUN && !outdirOption) {
470
+ const realCwd = (0, fs_1.realpathSync)(process.cwd());
471
+ const realTmp = (0, fs_1.realpathSync)((0, os_1.tmpdir)());
472
+ if (realCwd.startsWith(realTmp)) {
473
+ return path.resolve(realCwd, outdirOption ?? ".");
474
+ }
475
+ return (0, fs_1.mkdtempSync)(path.join((0, os_1.tmpdir)(), "projen."));
476
+ }
477
+ return path.resolve(outdirOption ?? ".");
478
+ }
479
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvamVjdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9wcm9qZWN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsMkJBQTJEO0FBQzNELDJCQUE0QjtBQUM1Qiw2QkFBNkI7QUFDN0IsMkNBQW1EO0FBQ25ELDZCQUE2QjtBQUM3Qix1Q0FBbUQ7QUFDbkQscUNBQXVEO0FBRXZELGlEQUE4QztBQUM5QyxpQ0FBa0M7QUFDbEMsbURBQW9EO0FBQ3BELCtDQUE4RDtBQUU5RCxnRUFBaUU7QUFDakUsaUNBQWtDO0FBQ2xDLHFDQUFpRDtBQUNqRCwrQ0FBMkM7QUFFM0MsbURBQStEO0FBQy9ELG1EQUFvRTtBQUNwRSwrQ0FBZ0U7QUFFaEUsbUNBQWdDO0FBQ2hDLGlDQUFrQztBQUNsQyxrREFBZ0Y7QUF5R2hGOztHQUVHO0FBQ0gsTUFBYSxPQUFRLFNBQVEsc0JBQVM7SUFPcEM7O09BRUc7SUFDSSxNQUFNLENBQUMsU0FBUyxDQUFDLENBQU07UUFDNUIsT0FBTyxJQUFBLHNCQUFTLEVBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdEIsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0ksTUFBTSxDQUFDLEVBQUUsQ0FBQyxTQUFxQjtRQUNwQyxPQUFPLElBQUEsK0JBQWtCLEVBQUMsU0FBUyxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQXlGRCxZQUFZLE9BQXVCO1FBQ2pDLE1BQU0sTUFBTSxHQUFHLGVBQWUsQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUMvRCxNQUFNLE1BQU0sR0FBRyxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxJQUFJLE9BQU8sQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FDakUsT0FBTyxDQUFDLE1BQU0sSUFBSSxRQUFRLENBQzNCLEVBQUUsQ0FBQztRQUVKLElBQUksT0FBTyxDQUFDLE1BQU0sRUFBRSxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMs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cnQgeyBta2R0ZW1wU3luYywgcmVhbHBhdGhTeW5jLCByZW5hbWVTeW5jIH0gZnJvbSBcImZzXCI7XG5pbXBvcnQgeyB0bXBkaXIgfSBmcm9tIFwib3NcIjtcbmltcG9ydCAqIGFzIHBhdGggZnJvbSBcInBhdGhcIjtcbmltcG9ydCB7IENvbnN0cnVjdCwgSUNvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5pbXBvcnQgKiBhcyBnbG9iIGZyb20gXCJnbG9iXCI7XG5pbXBvcnQgeyBjbGVhbnVwLCBGSUxFX01BTklGRVNUIH0gZnJvbSBcIi4vY2xlYW51cFwiO1xuaW1wb3J0IHsgSVNfVEVTVF9SVU4sIFBST0pFTl9WRVJTSU9OIH0gZnJvbSBcIi4vY29tbW9uXCI7XG5pbXBvcnQgeyBDb21wb25lbnQgfSBmcm9tIFwiLi9jb21wb25lbnRcIjtcbmltcG9ydCB7IERlcGVuZGVuY2llcyB9IGZyb20gXCIuL2RlcGVuZGVuY2llc1wiO1xuaW1wb3J0IHsgRmlsZUJhc2UgfSBmcm9tIFwiLi9maWxlXCI7XG5pbXBvcnQgeyBHaXRBdHRyaWJ1dGVzRmlsZSB9IGZyb20gXCIuL2dpdGF0dHJpYnV0ZXNcIjtcbmltcG9ydCB7IElnbm9yZUZpbGUsIElnbm9yZUZpbGVPcHRpb25zIH0gZnJvbSBcIi4vaWdub3JlLWZpbGVcIjtcbmltcG9ydCAqIGFzIGludmVudG9yeSBmcm9tIFwiLi9pbnZlbnRvcnlcIjtcbmltcG9ydCB7IHJlc29sdmVJbml0UHJvamVjdCB9IGZyb20gXCIuL2phdmFzY3JpcHQvcmVuZGVyLW9wdGlvbnNcIjtcbmltcG9ydCB7IEpzb25GaWxlIH0gZnJvbSBcIi4vanNvblwiO1xuaW1wb3J0IHsgTG9nZ2VyLCBMb2dnZXJPcHRpb25zIH0gZnJvbSBcIi4vbG9nZ2VyXCI7XG5pbXBvcnQgeyBPYmplY3RGaWxlIH0gZnJvbSBcIi4vb2JqZWN0LWZpbGVcIjtcbmltcG9ydCB7IEluaXRQcm9qZWN0T3B0aW9uSGludHMgfSBmcm9tIFwiLi9vcHRpb24taGludHNcIjtcbmltcG9ydCB7IFByb2plY3RCdWlsZCBhcyBQcm9qZWN0QnVpbGQgfSBmcm9tIFwiLi9wcm9qZWN0LWJ1aWxkXCI7XG5pbXBvcnQgeyBQcm9qZW5yY0pzb24sIFByb2plbnJjSnNvbk9wdGlvbnMgfSBmcm9tIFwiLi9wcm9qZW5yYy1qc29uXCI7XG5pbXBvcnQgeyBSZW5vdmF0ZWJvdCwgUmVub3ZhdGVib3RPcHRpb25zIH0gZnJvbSBcIi4vcmVub3ZhdGVib3RcIjtcbmltcG9ydCB7IFRhc2ssIFRhc2tPcHRpb25zIH0gZnJvbSBcIi4vdGFza1wiO1xuaW1wb3J0IHsgVGFza3MgfSBmcm9tIFwiLi90YXNrc1wiO1xuaW1wb3J0IHsgaXNUcnV0aHkgfSBmcm9tIFwiLi91dGlsXCI7XG5pbXBvcnQgeyBpc1Byb2plY3QsIGZpbmRDbG9zZXN0UHJvamVjdCwgdGFnQXNQcm9qZWN0IH0gZnJvbSBcIi4vdXRpbC9jb25zdHJ1Y3RzXCI7XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgYFByb2plY3RgLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFByb2plY3RPcHRpb25zIHtcbiAgLyoqXG4gICAqIFRoaXMgaXMgdGhlIG5hbWUgb2YgeW91ciBwcm9qZWN0LlxuICAgKlxuICAgKiBAZGVmYXVsdCAkQkFTRURJUlxuICAgKiBAZmVhdHVyZWRcbiAgICovXG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHBhcmVudCBwcm9qZWN0LCBpZiB0aGlzIHByb2plY3QgaXMgcGFydCBvZiBhIGJpZ2dlciBwcm9qZWN0LlxuICAgKi9cbiAgcmVhZG9ubHkgcGFyZW50PzogUHJvamVjdDtcblxuICAvKipcbiAgICogVGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoZSBwcm9qZWN0LlxuICAgKlxuICAgKiBSZWxhdGl2ZSB0byB0aGlzIGRpcmVjdG9yeSwgYWxsIGZpbGVzIGFyZSBzeW50aGVzaXplZC5cbiAgICpcbiAgICogSWYgdGhpcyBwcm9qZWN0IGhhcyBhIHBhcmVudCwgdGhpcyBkaXJlY3RvcnkgaXMgcmVsYXRpdmUgdG8gdGhlIHBhcmVudFxuICAgKiBkaXJlY3RvcnkgYW5kIGl0IGNhbm5vdCBiZSB0aGUgc2FtZSBhcyB0aGUgcGFyZW50IG9yIGFueSBvZiBpdCdzIG90aGVyXG4gICAqIHN1YnByb2plY3RzLlxuICAgKlxuICAgKiBAZGVmYXVsdCBcIi5cIlxuICAgKi9cbiAgcmVhZG9ubHkgb3V0ZGlyPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBDb25maWd1cmUgbG9nZ2luZyBvcHRpb25zIHN1Y2ggYXMgdmVyYm9zaXR5LlxuICAgKiBAZGVmYXVsdCB7fVxuICAgKi9cbiAgcmVhZG9ubHkgbG9nZ2luZz86IExvZ2dlck9wdGlvbnM7XG5cbiAgLyoqXG4gICAqIEdlbmVyYXRlIChvbmNlKSAucHJvamVucmMuanNvbiAoaW4gSlNPTikuIFNldCB0byBgZmFsc2VgIGluIG9yZGVyIHRvIGRpc2FibGVcbiAgICogLnByb2plbnJjLmpzb24gZ2VuZXJhdGlvbi5cbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IHByb2plbnJjSnNvbj86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIE9wdGlvbnMgZm9yIC5wcm9qZW5yYy5qc29uXG4gICAqIEBkZWZhdWx0IC0gZGVmYXVsdCBvcHRpb25zXG4gICAqL1xuICByZWFkb25seSBwcm9qZW5yY0pzb25PcHRpb25zPzogUHJvamVucmNKc29uT3B0aW9ucztcblxuICAvKipcbiAgICogVGhlIHNoZWxsIGNvbW1hbmQgdG8gdXNlIGluIG9yZGVyIHRvIHJ1biB0aGUgcHJvamVuIENMSS5cbiAgICpcbiAgICogQ2FuIGJlIHVzZWQgdG8gY3VzdG9taXplIGluIHNwZWNpYWwgZW52aXJvbm1lbnRzLlxuICAgKlxuICAgKiBAZGVmYXVsdCBcIm5weCBwcm9qZW5cIlxuICAgKi9cbiAgcmVhZG9ubHkgcHJvamVuQ29tbWFuZD86IHN0cmluZztcblxuICAvKipcbiAgICogVXNlIHJlbm92YXRlYm90IHRvIGhhbmRsZSBkZXBlbmRlbmN5IHVwZ3JhZGVzLlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgcmVub3ZhdGVib3Q/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBPcHRpb25zIGZvciByZW5vdmF0ZWJvdC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBkZWZhdWx0IG9wdGlvbnNcbiAgICovXG4gIHJlYWRvbmx5IHJlbm92YXRlYm90T3B0aW9ucz86IFJlbm92YXRlYm90T3B0aW9ucztcblxuICAvKipcbiAgICogV2hldGhlciB0byBjb21taXQgdGhlIG1hbmFnZWQgZmlsZXMgYnkgZGVmYXVsdC5cbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgY29tbWl0R2VuZXJhdGVkPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQ29uZmlndXJhdGlvbiBvcHRpb25zIGZvciBnaXRcbiAgICovXG4gIHJlYWRvbmx5IGdpdE9wdGlvbnM/OiBHaXRPcHRpb25zO1xuXG4gIC8qKlxuICAgKiBDb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIC5naXRpZ25vcmUgZmlsZVxuICAgKi9cbiAgcmVhZG9ubHkgZ2l0SWdub3JlT3B0aW9ucz86IElnbm9yZUZpbGVPcHRpb25zO1xufVxuXG4vKipcbiAqIEdpdCBjb25maWd1cmF0aW9uIG9wdGlvbnNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHaXRPcHRpb25zIHtcbiAgLyoqXG4gICAqIEZpbGUgcGF0dGVybnMgdG8gbWFyayBhcyBzdG9yZWQgaW4gR2l0IExGU1xuICAgKlxuICAgKiBAZGVmYXVsdCAtIE5vIGZpbGVzIHN0b3JlZCBpbiBMRlNcbiAgICovXG4gIHJlYWRvbmx5IGxmc1BhdHRlcm5zPzogc3RyaW5nW107XG59XG5cbi8qKlxuICogQmFzZSBwcm9qZWN0XG4gKi9cbmV4cG9ydCBjbGFzcyBQcm9qZWN0IGV4dGVuZHMgQ29uc3RydWN0IHtcbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBkZWZhdWx0IHRhc2sgKHRoZSB0YXNrIGV4ZWN1dGVkIHdoZW4gYHByb2plbmAgaXMgcnVuIHdpdGhvdXQgYXJndW1lbnRzKS4gTm9ybWFsbHlcbiAgICogdGhpcyB0YXNrIHNob3VsZCBzeW50aGVzaXplIHRoZSBwcm9qZWN0IGZpbGVzLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBERUZBVUxUX1RBU0sgPSBcImRlZmF1bHRcIjtcblxuICAvKipcbiAgICogVGVzdCB3aGV0aGVyIHRoZSBnaXZlbiBjb25zdHJ1Y3QgaXMgYSBwcm9qZWN0LlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBpc1Byb2plY3QoeDogYW55KTogeCBpcyBQcm9qZWN0IHtcbiAgICByZXR1cm4gaXNQcm9qZWN0KHgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEZpbmQgdGhlIGNsb3Nlc3QgYW5jZXN0b3IgcHJvamVjdCBmb3IgZ2l2ZW4gY29uc3RydWN0LlxuICAgKiBXaGVuIGdpdmVuIGEgcHJvamVjdCwgdGhpcyBpdCB0aGUgcHJvamVjdCBpdHNlbGYuXG4gICAqXG4gICAqIEB0aHJvd3Mgd2hlbiBubyBwcm9qZWN0IGlzIGZvdW5kIGluIHRoZSBwYXRoIHRvIHRoZSByb290XG4gICAqL1xuICBwdWJsaWMgc3RhdGljIG9mKGNvbnN0cnVjdDogSUNvbnN0cnVjdCk6IFByb2plY3Qge1xuICAgIHJldHVybiBmaW5kQ2xvc2VzdFByb2plY3QoY29uc3RydWN0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQcm9qZWN0IG5hbWUuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiAuZ2l0aWdub3JlXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZ2l0aWdub3JlOiBJZ25vcmVGaWxlO1xuXG4gIC8qKlxuICAgKiBUaGUgLmdpdGF0dHJpYnV0ZXMgZmlsZSBmb3IgdGhpcyByZXBvc2l0b3J5LlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGdpdGF0dHJpYnV0ZXM6IEdpdEF0dHJpYnV0ZXNGaWxlO1xuXG4gIC8qKlxuICAgKiBBIHBhcmVudCBwcm9qZWN0LiBJZiB1bmRlZmluZWQsIHRoaXMgaXMgdGhlIHJvb3QgcHJvamVjdC5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBwYXJlbnQ/OiBQcm9qZWN0O1xuXG4gIC8qKlxuICAgKiBBYnNvbHV0ZSBvdXRwdXQgZGlyZWN0b3J5IG9mIHRoaXMgcHJvamVjdC5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBvdXRkaXI6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHJvb3QgcHJvamVjdC5cbiAgICoqL1xuICBwdWJsaWMgcmVhZG9ubHkgcm9vdDogUHJvamVjdDtcblxuICAvKipcbiAgICogUHJvamVjdCB0YXNrcy5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSB0YXNrczogVGFza3M7XG5cbiAgLyoqXG4gICAqIFByb2plY3QgZGVwZW5kZW5jaWVzLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGRlcHM6IERlcGVuZGVuY2llcztcblxuICAvKipcbiAgICogTG9nZ2luZyB1dGlsaXRpZXMuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgbG9nZ2VyOiBMb2dnZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBvcHRpb25zIHVzZWQgd2hlbiB0aGlzIHByb2plY3QgaXMgYm9vdHN0cmFwcGVkIHZpYSBgcHJvamVuIG5ld2AuIEl0XG4gICAqIGluY2x1ZGVzIHRoZSBvcmlnaW5hbCBzZXQgb2Ygb3B0aW9ucyBwYXNzZWQgdG8gdGhlIENMSSBhbmQgYWxzbyB0aGUgSlNJSVxuICAgKiBGUU4gb2YgdGhlIHByb2plY3QgdHlwZS5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBpbml0UHJvamVjdD86IEluaXRQcm9qZWN0O1xuXG4gIC8qKlxuICAgKiBUaGUgY29tbWFuZCB0byB1c2UgaW4gb3JkZXIgdG8gcnVuIHRoZSBwcm9qZW4gQ0xJLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHByb2plbkNvbW1hbmQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhpcyBpcyB0aGUgXCJkZWZhdWx0XCIgdGFzaywgdGhlIG9uZSB0aGF0IGV4ZWN1dGVzIFwicHJvamVuXCIuIFVuZGVmaW5lZCBpZlxuICAgKiB0aGUgcHJvamVjdCBpcyBiZWluZyBlamVjdGVkLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGRlZmF1bHRUYXNrPzogVGFzaztcblxuICAvKipcbiAgICogVGhpcyB0YXNrIGVqZWN0cyB0aGUgcHJvamVjdCBmcm9tIHByb2plbi4gVGhpcyBpcyB1bmRlZmluZWQgaWYgdGhlIHByb2plY3RcbiAgICogaXQgc2VsZiBpcyBiZWluZyBlamVjdGVkLlxuICAgKlxuICAgKiBTZWUgZG9jcyBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiAgICovXG4gIHByaXZhdGUgcmVhZG9ubHkgZWplY3RUYXNrPzogVGFzaztcblxuICAvKipcbiAgICogTWFuYWdlcyB0aGUgYnVpbGQgcHJvY2VzcyBvZiB0aGUgcHJvamVjdC5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBwcm9qZWN0QnVpbGQ6IFByb2plY3RCdWlsZDtcblxuICAvKipcbiAgICogV2hldGhlciB0byBjb21taXQgdGhlIG1hbmFnZWQgZmlsZXMgYnkgZGVmYXVsdC5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBjb21taXRHZW5lcmF0ZWQ6IGJvb2xlYW47XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfY29tcG9uZW50cyA9IG5ldyBBcnJheTxDb21wb25lbnQ+KCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3N1YnByb2plY3RzID0gbmV3IEFycmF5PFByb2plY3Q+KCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgdGlwcyA9IG5ldyBBcnJheTxzdHJpbmc+KCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgZXhjbHVkZUZyb21DbGVhbnVwOiBzdHJpbmdbXTtcbiAgcHJpdmF0ZSByZWFkb25seSBfZWplY3RlZDogYm9vbGVhbjtcblxuICBjb25zdHJ1Y3RvcihvcHRpb25zOiBQcm9qZWN0T3B0aW9ucykge1xuICAgIGNvbnN0IG91dGRpciA9IGRldGVybWluZU91dGRpcihvcHRpb25zLnBhcmVudCwgb3B0aW9ucy5vdXRkaXIpO1xuICAgIGNvbnN0IGF1dG9JZCA9IGAke25ldy50YXJnZXQubmFtZX0jJHtvcHRpb25zLm5hbWV9QCR7cGF0aC5ub3JtYWxpemUoXG4gICAgICBvcHRpb25zLm91dGRpciA/PyBcIjxyb290PlwiXG4gICAgKX1gO1xuXG4gICAgaWYgKG9wdGlvbnMucGFyZW50Py5zdWJwcm9qZWN0cy5maW5kKChwKSA9PiBwLm91dGRpciA9PT0gb3V0ZGlyKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBUaGVyZSBpcyBhbHJlYWR5IGEgc3VicHJvamVjdCB3aXRoIFwib3V0ZGlyXCI6ICR7b3V0ZGlyfWApO1xuICAgIH1cblxuICAgIHN1cGVyKG9wdGlvbnMucGFyZW50IGFzIGFueSwgYXV0b0lkKTtcbiAgICB0YWdBc1Byb2plY3QodGhpcyk7XG4gICAgdGhpcy5ub2RlLmFkZE1ldGFkYXRhKFwidHlwZVwiLCBcInByb2plY3RcIik7XG4gICAgdGhpcy5ub2RlLmFkZE1ldGFkYXRhKFwiY29uc3RydWN0XCIsIG5ldy50YXJnZXQubmFtZSk7XG5cbiAgICB0aGlzLmluaXRQcm9qZWN0ID0gcmVzb2x2ZUluaXRQcm9qZWN0KG9wdGlvbnMpO1xuXG4gICAgdGhpcy5uYW1lID0gb3B0aW9ucy5uYW1lO1xuICAgIHRoaXMucGFyZW50ID0gb3B0aW9ucy5wYXJlbnQ7XG4gICAgdGhpcy5leGNsdWRlRnJvbUNsZWFudXAgPSBbXTtcblxuICAgIHRoaXMuX2VqZWN0ZWQgPSBpc1RydXRoeShwcm9jZXNzLmVudi5QUk9KRU5fRUpFQ1RJTkcpO1xuXG4gICAgaWYgKHRoaXMuZWplY3RlZCkge1xuICAgICAgdGhpcy5wcm9qZW5Db21tYW5kID0gXCJzY3JpcHRzL3J1bi10YXNrXCI7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucHJvamVuQ29tbWFuZCA9IG9wdGlvbnMucHJvamVuQ29tbWFuZCA/PyBcIm5weCBwcm9qZW5cIjtcbiAgICB9XG5cbiAgICB0aGlzLm91dGRpciA9IG91dGRpcjtcbiAgICB0aGlzLnJvb3QgPSB0aGlzLnBhcmVudCA/IHRoaXMucGFyZW50LnJvb3QgOiB0aGlzO1xuXG4gICAgLy8gbXVzdCBoYXBwZW4gYWZ0ZXIgdGhpcy5vdXRkaXIsIHRoaXMucGFyZW50IGFuZCB0aGlzLnJvb3QgYXJlIGluaXRpYWxpemVkXG4gICAgdGhpcy5wYXJlbnQ/Ll9hZGRTdWJQcm9qZWN0KHRoaXMpO1xuXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgICB0aGlzLmdpdGF0dHJpYnV0ZXMgPSBuZXcgR2l0QXR0cmlidXRlc0ZpbGUodGhpcyk7XG4gICAgdGhpcy5hbm5vdGF0ZUdlbmVyYXRlZChcIi8ucHJvamVuLyoqXCIpOyAvLyBjb250ZW50cyAgb2YgdGhlIC5wcm9qZW4vIGRpcmVjdG9yeSBhcmUgZ2VuZXJhdGVkIGJ5IHByb2plblxuICAgIHRoaXMuYW5ub3RhdGVHZW5lcmF0ZWQoYC8ke3RoaXMuZ2l0YXR0cmlidXRlcy5wYXRofWApOyAvLyB0aGUgLmdpdGF0dHJpYnV0ZXMgZmlsZSBpdHNlbGYgaXMgZ2VuZXJhdGVkXG5cbiAgICBpZiAob3B0aW9ucy5naXRPcHRpb25zPy5sZnNQYXR0ZXJucykge1xuICAgICAgZm9yIChjb25zdCBwYXR0ZXJuIG9mIG9wdGlvbnMuZ2l0T3B0aW9ucy5sZnNQYXR0ZXJucykge1xuICAgICAgICB0aGlzLmdpdGF0dHJpYnV0ZXMuYWRkQXR0cmlidXRlcyhcbiAgICAgICAgICBwYXR0ZXJuLFxuICAgICAgICAgIFwiZmlsdGVyPWxmc1wiLFxuICAgICAgICAgIFwiZGlmZj1sZnNcIixcbiAgICAgICAgICBcIm1lcmdlPWxmc1wiLFxuICAgICAgICAgIFwiLXRleHRcIlxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuZ2l0aWdub3JlID0gbmV3IElnbm9yZUZpbGUoXG4gICAgICB0aGlzLFxuICAgICAgXCIuZ2l0aWdub3JlXCIsXG4gICAgICBvcHRpb25zLmdpdElnbm9yZU9wdGlvbnNcbiAgICApO1xuICAgIHRoaXMuZ2l0aWdub3JlLmV4Y2x1ZGUoXCJub2RlX21vZHVsZXMvXCIpOyAvLyBjcmVhdGVkIGJ5IHJ1bm5pbmcgYG5weCBwcm9qZW5gXG4gICAgdGhpcy5naXRpZ25vcmUuaW5jbHVkZShgLyR7dGhpcy5naXRhdHRyaWJ1dGVzLnBhdGh9YCk7XG5cbiAgICAvLyBvaCBubzogdGFza3MgZGVwZW5kcyBvbiBnaXRpZ25vcmUgc28gaXQgaGFzIHRvIGJlIGluaXRpYWxpemVkIGFmdGVyXG4gICAgLy8gc21lbGxzIGxpa2UgZGVwIGluamVjdGlvbiBidXQgZ29kIGZvcmJpZC5cbiAgICB0aGlzLnRhc2tzID0gbmV3IFRhc2tzKHRoaXMpO1xuXG4gICAgaWYgKCF0aGlzLmVqZWN0ZWQpIHtcbiAgICAgIHRoaXMuZGVmYXVsdFRhc2sgPSB0aGlzLnRhc2tzLmFkZFRhc2soUHJvamVjdC5ERUZBVUxUX1RBU0ssIHtcbiAgICAgICAgZGVzY3JpcHRpb246IFwiU3ludGhlc2l6ZSBwcm9qZWN0IGZpbGVzXCIsXG4gICAgICB9KTtcblxuICAgICAgLy8gU3VidGFza3Mgc2hvdWxkIGNhbGwgdGhlIHJvb3QgdGFzayBmb3Igc3ludGhcbiAgICAgIGlmICh0aGlzLnBhcmVudCkge1xuICAgICAgICB0aGlzLmRlZmF1bHRUYXNrLmV4ZWMoYCR7dGhpcy5wcm9qZW5Db21tYW5kfSAke1Byb2plY3QuREVGQVVMVF9UQVNLfWAsIHtcbiAgICAgICAgICBjd2Q6IHBhdGgucmVsYXRpdmUodGhpcy5vdXRkaXIsIHRoaXMucm9vdC5vdXRkaXIpLFxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgaWYgKCF0aGlzLnBhcmVudCkge1xuICAgICAgICB0aGlzLmVqZWN0VGFzayA9IHRoaXMudGFza3MuYWRkVGFzayhcImVqZWN0XCIsIHtcbiAgICAgICAgICBkZXNjcmlwdGlvbjogXCJSZW1vdmUgcHJvamVuIGZyb20gdGhlIHByb2plY3RcIixcbiAgICAgICAgICBlbnY6IHtcbiAgICAgICAgICAgIFBST0pFTl9FSkVDVElORzogXCJ0cnVlXCIsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuZWplY3RUYXNrLnNwYXduKHRoaXMuZGVmYXVsdFRhc2spO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMucHJvamVjdEJ1aWxkID0gbmV3IFByb2plY3RCdWlsZCh0aGlzKTtcblxuICAgIHRoaXMuZGVwcyA9IG5ldyBEZXBlbmRlbmNpZXModGhpcyk7XG5cbiAgICB0aGlzLmxvZ2dlciA9IG5ldyBMb2dnZXIodGhpcywgb3B0aW9ucy5sb2dnaW5nKTtcblxuICAgIGNvbnN0IHByb2plbnJjSnNvbiA9IG9wdGlvbnMucHJvamVucmNKc29uID8/IGZhbHNlO1xuICAgIGlmICghdGhpcy5wYXJlbnQgJiYgcHJvamVucmNKc29uKSB7XG4gICAgICBuZXcgUHJvamVucmNKc29uKHRoaXMsIG9wdGlvbnMucHJvamVucmNKc29uT3B0aW9ucyk7XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMucmVub3ZhdGVib3QpIHtcbiAgICAgIG5ldyBSZW5vdmF0ZWJvdCh0aGlzLCBvcHRpb25zLnJlbm92YXRlYm90T3B0aW9ucyk7XG4gICAgfVxuXG4gICAgdGhpcy5jb21taXRHZW5lcmF0ZWQgPSBvcHRpb25zLmNvbW1pdEdlbmVyYXRlZCA/PyB0cnVlO1xuXG4gICAgaWYgKCF0aGlzLmVqZWN0ZWQpIHtcbiAgICAgIG5ldyBKc29uRmlsZSh0aGlzLCBGSUxFX01BTklGRVNULCB7XG4gICAgICAgIG9taXRFbXB0eTogdHJ1ZSxcbiAgICAgICAgb2JqOiAoKSA9PiAoe1xuICAgICAgICAgIC8vIHJlcGxhY2UgYFxcYCB3aXRoIGAvYCB0byBlbnN1cmUgcGF0aHMgbWF0Y2ggYWNyb3NzIHBsYXRmb3Jtc1xuICAgICAgICAgIGZpbGVzOiB0aGlzLmZpbGVzXG4gICAgICAgICAgICAuZmlsdGVyKChmKSA9PiBmLnJlYWRvbmx5KVxuICAgICAgICAgICAgLm1hcCgoZikgPT4gZi5wYXRoLnJlcGxhY2UoL1xcXFwvZywgXCIvXCIpKSxcbiAgICAgICAgfSksXG4gICAgICAgIC8vIFRoaXMgZmlsZSBpcyB1c2VkIGJ5IHByb2plbiB0byB0cmFjayB0aGUgZ2VuZXJhdGVkIGZpbGVzLCBzbyBtdXN0IGJlIGNvbW1pdHRlZC5cbiAgICAgICAgY29tbWl0dGVkOiB0cnVlLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYWxsIHRoZSBjb21wb25lbnRzIHdpdGhpbiB0aGlzIHByb2plY3QuXG4gICAqL1xuICBwdWJsaWMgZ2V0IGNvbXBvbmVudHMoKSB7XG4gICAgcmV0dXJuIFsuLi50aGlzLl9jb21wb25lbnRzXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGFsbCB0aGUgc3VicHJvamVjdHMgd2l0aGluIHRoaXMgcHJvamVjdC5cbiAgICovXG4gIHB1YmxpYyBnZXQgc3VicHJvamVjdHMoKSB7XG4gICAgcmV0dXJuIFsuLi50aGlzLl9zdWJwcm9qZWN0c107XG4gIH1cblxuICAvKipcbiAgICogQWxsIGZpbGVzIGluIHRoaXMgcHJvamVjdC5cbiAgICovXG4gIHB1YmxpYyBnZXQgZmlsZXMoKTogRmlsZUJhc2VbXSB7XG4gICAgY29uc3QgaXNGaWxlID0gKGM6IENvbXBvbmVudCk6IGMgaXMgRmlsZUJhc2UgPT4gYyBpbnN0YW5jZW9mIEZpbGVCYXNlO1xuICAgIHJldHVybiB0aGlzLl9jb21wb25lbnRzXG4gICAgICAuZmlsdGVyKGlzRmlsZSlcbiAgICAgIC5zb3J0KChmMSwgZjIpID0+IGYxLnBhdGgubG9jYWxlQ29tcGFyZShmMi5wYXRoKSk7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhIG5ldyB0YXNrIHRvIHRoaXMgcHJvamVjdC4gVGhpcyB3aWxsIGZhaWwgaWYgdGhlIHByb2plY3QgYWxyZWFkeSBoYXNcbiAgICogYSB0YXNrIHdpdGggdGhpcyBuYW1lLlxuICAgKlxuICAgKiBAcGFyYW0gbmFtZSBUaGUgdGFzayBuYW1lIHRvIGFkZFxuICAgKiBAcGFyYW0gcHJvcHMgVGFzayBwcm9wZXJ0aWVzXG4gICAqL1xuICBwdWJsaWMgYWRkVGFzayhuYW1lOiBzdHJpbmcsIHByb3BzOiBUYXNrT3B0aW9ucyA9IHt9KSB7XG4gICAgcmV0dXJuIHRoaXMudGFza3MuYWRkVGFzayhuYW1lLCBwcm9wcyk7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlcyBhIHRhc2sgZnJvbSBhIHByb2plY3QuXG4gICAqXG4gICAqIEBwYXJhbSBuYW1lIFRoZSBuYW1lIG9mIHRoZSB0YXNrIHRvIHJlbW92ZS5cbiAgICpcbiAgICogQHJldHVybnMgVGhlIGBUYXNrYCB0aGF0IHdhcyByZW1vdmVkLCBvdGhlcndpc2UgYHVuZGVmaW5lZGAuXG4gICAqL1xuICBwdWJsaWMgcmVtb3ZlVGFzayhuYW1lOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy50YXNrcy5yZW1vdmVUYXNrKG5hbWUpO1xuICB9XG5cbiAgcHVibGljIGdldCBidWlsZFRhc2soKSB7XG4gICAgcmV0dXJuIHRoaXMucHJvamVjdEJ1aWxkLmJ1aWxkVGFzaztcbiAgfVxuICBwdWJsaWMgZ2V0IGNvbXBpbGVUYXNrKCkge1xuICAgIHJldHVybiB0aGlzLnByb2plY3RCdWlsZC5jb21waWxlVGFzaztcbiAgfVxuICBwdWJsaWMgZ2V0IHRlc3RUYXNrKCkge1xuICAgIHJldHVybiB0aGlzLnByb2plY3RCdWlsZC50ZXN0VGFzaztcbiAgfVxuICBwdWJsaWMgZ2V0IHByZUNvbXBpbGVUYXNrKCkge1xuICAgIHJldHVybiB0aGlzLnByb2plY3RCdWlsZC5wcmVDb21waWxlVGFzaztcbiAgfVxuICBwdWJsaWMgZ2V0IHBvc3RDb21waWxlVGFzaygpIHtcbiAgICByZXR1cm4gdGhpcy5wcm9qZWN0QnVpbGQucG9zdENvbXBpbGVUYXNrO1xuICB9XG4gIHB1YmxpYyBnZXQgcGFja2FnZVRhc2soKSB7XG4gICAgcmV0dXJuIHRoaXMucHJvamVjdEJ1aWxkLnBhY2thZ2VUYXNrO1xuICB9XG5cbiAgLyoqXG4gICAqIEZpbmRzIGEgZmlsZSBhdCB0aGUgc3BlY2lmaWVkIHJlbGF0aXZlIHBhdGggd2l0aGluIHRoaXMgcHJvamVjdCBhbmQgYWxsXG4gICAqIGl0cyBzdWJwcm9qZWN0cy5cbiAgICpcbiAgICogQHBhcmFtIGZpbGVQYXRoIFRoZSBmaWxlIHBhdGguIElmIHRoaXMgcGF0aCBpcyByZWxhdGl2ZSwgaXQgd2lsbCBiZSByZXNvbHZlZFxuICAgKiBmcm9tIHRoZSByb290IG9mIF90aGlzXyBwcm9qZWN0LlxuICAgKiBAcmV0dXJucyBhIGBGaWxlQmFzZWAgb3IgdW5kZWZpbmVkIGlmIHRoZXJlIGlzIG5vIGZpbGUgaW4gdGhhdCBwYXRoXG4gICAqL1xuICBwdWJsaWMgdHJ5RmluZEZpbGUoZmlsZVBhdGg6IHN0cmluZyk6IEZpbGVCYXNlIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBhYnNvbHV0ZSA9IHBhdGguaXNBYnNvbHV0ZShmaWxlUGF0aClcbiAgICAgID8gZmlsZVBhdGhcbiAgICAgIDogcGF0aC5yZXNvbHZlKHRoaXMub3V0ZGlyLCBmaWxlUGF0aCk7XG4gICAgZm9yIChjb25zdCBmaWxlIG9mIHRoaXMuZmlsZXMpIHtcbiAgICAgIGlmIChhYnNvbHV0ZSA9PT0gZmlsZS5hYnNvbHV0ZVBhdGgpIHtcbiAgICAgICAgcmV0dXJuIGZpbGU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBjaGlsZCBvZiB0aGlzLl9zdWJwcm9qZWN0cykge1xuICAgICAgY29uc3QgZmlsZSA9IGNoaWxkLnRyeUZpbmRGaWxlKGFic29sdXRlKTtcbiAgICAgIGlmIChmaWxlKSB7XG4gICAgICAgIHJldHVybiBmaWxlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICAvKipcbiAgICogRmluZHMgYSBqc29uIGZpbGUgYnkgbmFtZS5cbiAgICogQHBhcmFtIGZpbGVQYXRoIFRoZSBmaWxlIHBhdGguXG4gICAqIEBkZXByZWNhdGVkIHVzZSBgdHJ5RmluZE9iamVjdEZpbGVgXG4gICAqL1xuICBwdWJsaWMgdHJ5RmluZEpzb25GaWxlKGZpbGVQYXRoOiBzdHJpbmcpOiBKc29uRmlsZSB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgZmlsZSA9IHRoaXMudHJ5RmluZE9iamVjdEZpbGUoZmlsZVBhdGgpO1xuICAgIGlmICghZmlsZSkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBpZiAoIShmaWxlIGluc3RhbmNlb2YgSnNvbkZpbGUpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBmb3VuZCBmaWxlICR7ZmlsZVBhdGh9IGJ1dCBpdCBpcyBub3QgYSBKc29uRmlsZS4gZ290OiAke2ZpbGUuY29uc3RydWN0b3IubmFtZX1gXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiBmaWxlO1xuICB9XG5cbiAgLyoqXG4gICAqIEZpbmRzIGFuIG9iamVjdCBmaWxlIChsaWtlIEpzb25GaWxlLCBZYW1sRmlsZSwgZXRjLikgYnkgbmFtZS5cbiAgICogQHBhcmFtIGZpbGVQYXRoIFRoZSBmaWxlIHBhdGguXG4gICAqL1xuICBwdWJsaWMgdHJ5RmluZE9iamVjdEZpbGUoZmlsZVBhdGg6IHN0cmluZyk6IE9iamVjdEZpbGUgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IGZpbGUgPSB0aGlzLnRyeUZpbmRGaWxlKGZpbGVQYXRoKTtcbiAgICBpZiAoIWZpbGUpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgaWYgKCEoZmlsZSBpbnN0YW5jZW9mIE9iamVjdEZpbGUpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBmb3VuZCBmaWxlICR7ZmlsZVBhdGh9IGJ1dCBpdCBpcyBub3QgYSBPYmplY3RGaWxlLiBnb3Q6ICR7ZmlsZS5jb25zdHJ1Y3Rvci5uYW1lfWBcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZpbGU7XG4gIH1cblxuICAvKipcbiAgICogRmluZHMgYSBmaWxlIGF0IHRoZSBzcGVjaWZpZWQgcmVsYXRpdmUgcGF0aCB3aXRoaW4gdGhpcyBwcm9qZWN0IGFuZCByZW1vdmVzXG4gICAqIGl0LlxuICAgKlxuICAgKiBAcGFyYW0gZmlsZVBhdGggVGhlIGZpbGUgcGF0aC4gSWYgdGhpcyBwYXRoIGlzIHJlbGF0aXZlLCBpdCB3aWxsIGJlXG4gICAqIHJlc29sdmVkIGZyb20gdGhlIHJvb3Qgb2YgX3RoaXNfIHByb2plY3QuXG4gICAqIEByZXR1cm5zIGEgYEZpbGVCYXNlYCBpZiB0aGUgZmlsZSB3YXMgZm91bmQgYW5kIHJlbW92ZWQsIG9yIHVuZGVmaW5lZCBpZlxuICAgKiB0aGUgZmlsZSB3YXMgbm90IGZvdW5kLlxuICAgKi9cbiAgcHVibGljIHRyeVJlbW92ZUZpbGUoZmlsZVBhdGg6IHN0cmluZyk6IEZpbGVCYXNlIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBhYnNvbHV0ZSA9IHBhdGguaXNBYnNvbHV0ZShmaWxlUGF0aClcbiAgICAgID8gZmlsZVBhdGhcbiAgICAgIDogcGF0aC5yZXNvbHZlKHRoaXMub3V0ZGlyLCBmaWxlUGF0aCk7XG4gICAgY29uc3QgaXNGaWxlID0gKGM6IENvbXBvbmVudCk6IGMgaXMgRmlsZUJhc2UgPT4gYyBpbnN0YW5jZW9mIEZpbGVCYXNlO1xuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5fY29tcG9uZW50cy5maW5kSW5kZXgoXG4gICAgICAoYykgPT4gaXNGaWxlKGMpICYmIGMuYWJzb2x1dGVQYXRoID09PSBhYnNvbHV0ZVxuICAgICk7XG5cbiAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICBjb25zdCBmaWxlID0gdGhpcy5fY29tcG9uZW50cy5zcGxpY2UoaW5kZXgsIDEpWzBdIGFzIEZpbGVCYXNlO1xuICAgICAgdGhpcy5ub2RlLnRyeVJlbW92ZUNoaWxkKGZpbGUubm9kZS5pZCk7XG4gICAgICByZXR1cm4gZmlsZTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIHRoaXMuX3N1YnByb2plY3RzKSB7XG4gICAgICBjb25zdCBmaWxlID0gY2hpbGQudHJ5UmVtb3ZlRmlsZShhYnNvbHV0ZSk7XG4gICAgICBpZiAoZmlsZSkge1xuICAgICAgICByZXR1cm4gZmlsZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgLyoqXG4gICAqIFByaW50cyBhIFwidGlwXCIgbWVzc2FnZSBkdXJpbmcgc3ludGhlc2lzLlxuICAgKiBAcGFyYW0gbWVzc2FnZSBUaGUgbWVzc2FnZVxuICAgKiBAZGVwcmVjYXRlZCAtIHVzZSBgcHJvamVjdC5sb2dnZXIuaW5mbyhtZXNzYWdlKWAgdG8gc2hvdyBtZXNzYWdlcyBkdXJpbmcgc3ludGhlc2lzXG4gICAqL1xuICBwdWJsaWMgYWRkVGlwKG1lc3NhZ2U6IHN0cmluZykge1xuICAgIHRoaXMudGlwcy5wdXNoKG1lc3NhZ2UpO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4Y2x1ZGUgdGhlIG1hdGNoaW5nIGZpbGVzIGZyb20gcHJlLXN5bnRoIGNsZWFudXAuIENhbiBiZSB1c2VkIHdoZW4sIGZvciBleGFtcGxlLCBzb21lXG4gICAqIHNvdXJjZSBmaWxlcyBpbmNsdWRlIHRoZSBwcm9qZW4gbWFya2VyIGFuZCB3ZSBkb24ndCB3YW50IHRoZW0gdG8gYmUgZXJhc2VkIGR1cmluZyBzeW50aC5cbiAgICpcbiAgICogQHBhcmFtIGdsb2JzIFRoZSBnbG9iIHBhdHRlcm5zIHRvIG1hdGNoXG4gICAqL1xuICBwdWJsaWMgYWRkRXhjbHVkZUZyb21DbGVhbnVwKC4uLmdsb2JzOiBzdHJpbmdbXSkge1xuICAgIHRoaXMuZXhjbHVkZUZyb21DbGVhbnVwLnB1c2goLi4uZ2xvYnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIHNoZWxsIGNvbW1hbmQgdG8gZXhlY3V0ZSBpbiBvcmRlciB0byBydW4gYSB0YXNrLlxuICAgKlxuICAgKiBCeSBkZWZhdWx0LCB0aGlzIGlzIGBucHggcHJvamVuQDx2ZXJzaW9uPiA8dGFzaz5gXG4gICAqXG4gICAqIEBwYXJhbSB0YXNrIFRoZSB0YXNrIGZvciB3aGljaCB0aGUgY29tbWFuZCBpcyByZXF1aXJlZFxuICAgKi9cbiAgcHVibGljIHJ1blRhc2tDb21tYW5kKHRhc2s6IFRhc2spIHtcbiAgICByZXR1cm4gYG5weCBwcm9qZW5AJHtQUk9KRU5fVkVSU0lPTn0gJHt0YXNrLm5hbWV9YDtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeGNsdWRlIHRoZXNlIGZpbGVzIGZyb20gdGhlIGJ1bmRsZWQgcGFja2FnZS4gSW1wbGVtZW50ZWQgYnkgcHJvamVjdCB0eXBlcyBiYXNlZCBvbiB0aGVcbiAgICogcGFja2FnaW5nIG1lY2hhbmlzbS4gRm9yIGV4YW1wbGUsIGBOb2RlUHJvamVjdGAgZGVsZWdhdGVzIHRoaXMgdG8gYC5ucG1pZ25vcmVgLlxuICAgKlxuICAgKiBAcGFyYW0gX3BhdHRlcm4gVGhlIGdsb2IgcGF0dGVybiB0byBleGNsdWRlXG4gICAqL1xuICBwdWJsaWMgYWRkUGFja2FnZUlnbm9yZShfcGF0dGVybjogc3RyaW5nKSB7XG4gICAgLy8gbm90aGluZyB0byBkbyBhdCB0aGUgYWJzdHJhY3QgbGV2ZWxcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGEgLmdpdGlnbm9yZSBwYXR0ZXJuLlxuICAgKiBAcGFyYW0gcGF0dGVybiBUaGUgZ2xvYiBwYXR0ZXJuIHRvIGlnbm9yZS5cbiAgICovXG4gIHB1YmxpYyBhZGRHaXRJZ25vcmUocGF0dGVybjogc3RyaW5nKSB7XG4gICAgdGhpcy5naXRpZ25vcmUuYWRkUGF0dGVybnMocGF0dGVybik7XG4gIH1cblxuICAvKipcbiAgICogQ29uc2lkZXIgYSBzZXQgb2YgZmlsZXMgYXMgXCJnZW5lcmF0ZWRcIi4gVGhpcyBtZXRob2QgaXMgaW1wbGVtZW50ZWQgYnlcbiAgICogZGVyaXZlZCBjbGFzc2VzIGFuZCB1c2VkIGZvciBleGFtcGxlLCB0byBhZGQgZ2l0IGF0dHJpYnV0ZXMgdG8gdGVsbCBHaXRIdWJcbiAgICogdGhhdCBjZXJ0YWluIGZpbGVzIGFyZSBnZW5lcmF0ZWQuXG4gICAqXG4gICAqIEBwYXJhbSBfZ2xvYiB0aGUgZ2xvYiBwYXR0ZXJuIHRvIG1hdGNoIChjb3VsZCBiZSBhIGZpbGUgcGF0aCkuXG4gICAqL1xuICBwdWJsaWMgYW5ub3RhdGVHZW5lcmF0ZWQoX2dsb2I6IHN0cmluZyk6IHZvaWQge1xuICAgIC8vIG5vdGhpbmcgdG8gZG8gYXQgdGhlIGFic3RyYWN0IGxldmVsXG4gIH1cblxuICAvKipcbiAgICogU3ludGhlc2l6ZSBhbGwgcHJvamVjdCBmaWxlcyBpbnRvIGBvdXRkaXJgLlxuICAgKlxuICAgKiAxLiBDYWxsIFwidGhpcy5wcmVTeW50aGVzaXplKClcIlxuICAgKiAyLiBEZWxldGUgYWxsIGdlbmVyYXRlZCBmaWxlc1xuICAgKiAzLiBTeW50aGVzaXplIGFsbCBzdWJwcm9qZWN0c1xuICAgKiA0LiBTeW50aGVzaXplIGFsbCBjb21wb25lbnRzIG9mIHRoaXMgcHJvamVjdFxuICAgKiA1LiBDYWxsIFwicG9zdFN5bnRoZXNpemUoKVwiIGZvciBhbGwgY29tcG9uZW50cyBvZiB0aGlzIHByb2plY3RcbiAgICogNi4gQ2FsbCBcInRoaXMucG9zdFN5bnRoZXNpemUoKVwiXG4gICAqL1xuICBwdWJsaWMgc3ludGgoKTogdm9pZCB7XG4gICAgY29uc3Qgb3V0ZGlyID0gdGhpcy5vdXRkaXI7XG4gICAgdGhpcy5sb2dnZXIuZGVidWcoXCJTeW50aGVzaXppbmcgcHJvamVjdC4uLlwiKTtcblxuICAgIHRoaXMucHJlU3ludGhlc2l6ZSgpO1xuXG4gICAgZm9yIChjb25zdCBjb21wIG9mIHRoaXMuX2NvbXBvbmVudHMpIHtcbiAgICAgIGNvbXAucHJlU3ludGhlc2l6ZSgpO1xuICAgIH1cblxuICAgIC8vIHdlIGV4Y2x1ZGUgYWxsIHN1YnByb2plY3QgZGlyZWN0b3JpZXMgdG8gZW5zdXJlIHRoYXQgd2hlbiBzdWJwcm9qZWN0LnN5bnRoKClcbiAgICAvLyBnZXRzIGNhbGxlZCBiZWxvdyBhZnRlciBjbGVhbnVwKCksIHN1YnByb2plY3QgZ2VuZXJhdGVkIGZpbGVzIGFyZSBsZWZ0IGludGFjdFxuICAgIGZvciAoY29uc3Qgc3VicHJvamVjdCBvZiB0aGlzLl9zdWJwcm9qZWN0cykge1xuICAgICAgdGhpcy5hZGRFeGNsdWRlRnJvbUNsZWFudXAoc3VicHJvamVjdC5vdXRkaXIgKyBcIi8qKlwiKTtcbiAgICB9XG5cbiAgICAvLyBkZWxldGUgb3JwaGFuZWQgZmlsZXMgYmVmb3JlIHdlIHN0YXJ0IHN5bnRoZXNpemluZyBuZXcgb25lc1xuICAgIGNsZWFudXAoXG4gICAgICBvdXRkaXIsXG4gICAgICB0aGlzLmZpbGVzLm1hcCgoZikgPT4gZi5wYXRoLnJlcGxhY2UoL1xcXFwvZywgXCIvXCIpKSxcbiAgICAgIHRoaXMuZXhjbHVkZUZyb21DbGVhbnVwXG4gICAgKTtcblxuICAgIGZvciAoY29uc3Qgc3VicHJvamVjdCBvZiB0aGlzLl9zdWJwcm9qZWN0cykge1xuICAgICAgc3VicHJvamVjdC5zeW50aCgpO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgY29tcCBvZiB0aGlzLl9jb21wb25lbnRzKSB7XG4gICAgICBjb21wLnN5bnRoZXNpemUoKTtcbiAgICB9XG5cbiAgICBpZiAoIWlzVHJ1dGh5KHByb2Nlc3MuZW52LlBST0pFTl9ESVNBQkxFX1BPU1QpKSB7XG4gICAgICBmb3IgKGNvbnN0IGNvbXAgb2YgdGhpcy5fY29tcG9uZW50cykge1xuICAgICAgICBjb21wLnBvc3RTeW50aGVzaXplKCk7XG4gICAgICB9XG5cbiAgICAgIC8vIHByb2plY3QtbGV2ZWwgaG9va1xuICAgICAgdGhpcy5wb3N0U3ludGhlc2l6ZSgpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmVqZWN0ZWQpIHtcbiAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKFwiRWplY3RpbmcgcHJvamVjdC4uLlwiKTtcblxuICAgICAgLy8gQmFja3VwIHByb2plbnJjIGZpbGVzXG4gICAgICBjb25zdCBmaWxlcyA9IGdsb2Iuc3luYyhcIi5wcm9qZW5yYy4qXCIsIHtcbiAgICAgICAgY3dkOiB0aGlzLm91dGRpcixcbiAgICAgICAgZG90OiB0cnVlLFxuICAgICAgICBub2RpcjogdHJ1ZSxcbiAgICAgICAgYWJzb2x1dGU6IHRydWUsXG4gICAgICB9KTtcblxuICAgICAgZm9yIChjb25zdCBmaWxlIG9mIGZpbGVzKSB7XG4gICAgICAgIHJlbmFtZVN5bmMoZmlsZSwgYCR7ZmlsZX0uYmFrYCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5sb2dnZXIuZGVidWcoXCJTeW50aGVzaXMgY29tcGxldGVcIik7XG4gIH1cblxuICAvKipcbiAgICogV2hldGhlciBvciBub3QgdGhlIHByb2plY3QgaXMgYmVpbmcgZWplY3RlZC5cbiAgICovXG4gIHB1YmxpYyBnZXQgZWplY3RlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fZWplY3RlZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxsZWQgYmVmb3JlIGFsbCBjb21wb25lbnRzIGFyZSBzeW50aGVzaXplZC5cbiAgICovXG4gIHB1YmxpYyBwcmVTeW50aGVzaXplKCkge31cblxuICAvKipcbiAgICogQ2FsbGVkIGFmdGVyIGFsbCBjb21wb25lbnRzIGFyZSBzeW50aGVzaXplZC4gT3JkZXIgaXMgKm5vdCogZ3VhcmFudGVlZC5cbiAgICovXG4gIHB1YmxpYyBwb3N0U3ludGhlc2l6ZSgpIHt9XG5cbiAgLyoqXG4gICAqIEFkZHMgYSBjb21wb25lbnQgdG8gdGhlIHByb2plY3QuXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcHVibGljIF9hZGRDb21wb25lbnQoY29tcG9uZW50OiBDb21wb25lbnQpIHtcbiAgICB0aGlzLl9jb21wb25lbnRzLnB1c2goY29tcG9uZW50KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGEgc3VicHJvamVjdCB0byB0aGlzIHByb2plY3QuXG4gICAqXG4gICAqIFRoaXMgaXMgYXV0b21hdGljYWxseSBjYWxsZWQgd2hlbiBhIG5ldyBwcm9qZWN0IGlzIGNyZWF0ZWQgd2l0aCBgcGFyZW50YFxuICAgKiBwb2ludGluZyB0byB0aGlzIHByb2plY3QsIHNvIHRoZXJlIGlzIG5vIHJlYWwgbmVlZCB0byBjYWxsIHRoaXMgbWFudWFsbHkuXG4gICAqXG4gICAqIEBwYXJhbSBzdWJwcm9qZWN0IFRoZSBjaGlsZCBwcm9qZWN0IHRvIGFkZC5cbiAgICogQGludGVybmFsXG4gICAqL1xuICBfYWRkU3ViUHJvamVjdChzdWJwcm9qZWN0OiBQcm9qZWN0KSB7XG4gICAgaWYgKHN1YnByb2plY3QucGFyZW50ICE9PSB0aGlzKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1wicGFyZW50XCIgb2YgY2hpbGQgcHJvamVjdCBtdXN0IGJlIHRoaXMgcHJvamVjdCcpO1xuICAgIH1cblxuICAgIC8vIGNoZWNrIHRoYXQgYG91dGRpcmAgaXMgZXhjbHVzaXZlXG4gICAgZm9yIChjb25zdCBwIG9mIHRoaXMuX3N1YnByb2plY3RzKSB7XG4gICAgICBpZiAocGF0aC5yZXNvbHZlKHAub3V0ZGlyKSA9PT0gcGF0aC5yZXNvbHZlKHN1YnByb2plY3Qub3V0ZGlyKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYFRoZXJlIGlzIGFscmVhZHkgYSBzdWJwcm9qZWN0IHdpdGggXCJvdXRkaXJcIjogJHtzdWJwcm9qZWN0Lm91dGRpcn1gXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5fc3VicHJvamVjdHMucHVzaChzdWJwcm9qZWN0KTtcbiAgfVxufVxuXG4vKipcbiAqIFdoaWNoIHR5cGUgb2YgcHJvamVjdCB0aGlzIGlzLlxuICpcbiAqIEBkZXByZWNhdGVkIG5vIGxvbmdlciBzdXBwb3J0ZWQgYXQgdGhlIGJhc2UgcHJvamVjdCBsZXZlbFxuICovXG5leHBvcnQgZW51bSBQcm9qZWN0VHlwZSB7XG4gIC8qKlxuICAgKiBUaGlzIG1vZHVsZSBtYXkgYmUgYSBlaXRoZXIgYSBsaWJyYXJ5IG9yIGFuIGFwcC5cbiAgICovXG4gIFVOS05PV04gPSBcInVua25vd25cIixcblxuICAvKipcbiAgICogVGhpcyBpcyBhIGxpYnJhcnksIGludGVuZGVkIHRvIGJlIHB1Ymxpc2hlZCB0byBhIHBhY2thZ2UgbWFuYWdlciBhbmRcbiAgICogY29uc3VtZWQgYnkgb3RoZXIgcHJvamVjdHMuXG4gICAqL1xuICBMSUIgPSBcImxpYlwiLFxuXG4gIC8qKlxuICAgKiBUaGlzIGlzIGFuIGFwcCAoc2VydmljZSwgdG9vbCwgd2Vic2l0ZSwgZXRjKS4gSXRzIGFydGlmYWN0cyBhcmUgaW50ZW5kZWQgdG9cbiAgICogYmUgZGVwbG95ZWQgb3IgcHVibGlzaGVkIGZvciBlbmQtdXNlciBjb25zdW1wdGlvbi5cbiAgICovXG4gIEFQUCA9IFwiYXBwXCIsXG59XG5cbi8qKlxuICogSW5mb3JtYXRpb24gcGFzc2VkIGZyb20gYHByb2plbiBuZXdgIHRvIHRoZSBwcm9qZWN0IG9iamVjdCB3aGVuIHRoZSBwcm9qZWN0XG4gKiBpcyBmaXJzdCBjcmVhdGVkLiBJdCBpcyB1c2VkIHRvIGdlbmVyYXRlIHByb2plbnJjIGZpbGVzIGluIHZhcmlvdXMgbGFuZ3VhZ2VzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEluaXRQcm9qZWN0IHtcbiAgLyoqXG4gICAqIFRoZSBKU0lJIEZRTiBvZiB0aGUgcHJvamVjdCB0eXBlLlxuICAgKi9cbiAgcmVhZG9ubHkgZnFuOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEluaXRpYWwgYXJndW1lbnRzIHBhc3NlZCB0byBgcHJvamVuIG5ld2AuXG4gICAqL1xuICByZWFkb25seSBhcmdzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuXG4gIC8qKlxuICAgKiBQcm9qZWN0IG1ldGFkYXRhLlxuICAgKi9cbiAgcmVhZG9ubHkgdHlwZTogaW52ZW50b3J5LlByb2plY3RUeXBlO1xuXG4gIC8qKlxuICAgKiBJbmNsdWRlIGNvbW1lbnRlZCBvdXQgb3B0aW9ucy4gRG9lcyBub3QgYXBwbHkgdG8gcHJvamVucmMuanNvbiBmaWxlcy5cbiAgICogQGRlZmF1bHQgSW5pdFByb2plY3RPcHRpb25IaW50cy5GRUFUVVJFRFxuICAgKi9cbiAgcmVhZG9ubHkgY29tbWVudHM6IEluaXRQcm9qZWN0T3B0aW9uSGludHM7XG59XG5cbi8qKlxuICogUmVzb2x2ZXMgdGhlIHByb2plY3QncyBvdXRwdXQgZGlyZWN0b3J5LlxuICovXG5mdW5jdGlvbiBkZXRlcm1pbmVPdXRkaXIocGFyZW50PzogUHJvamVjdCwgb3V0ZGlyT3B0aW9uPzogc3RyaW5nKSB7XG4gIGlmIChwYXJlbnQgJiYgb3V0ZGlyT3B0aW9uICYmIHBhdGguaXNBYnNvbHV0ZShvdXRkaXJPcHRpb24pKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdcIm91dGRpclwiIG11c3QgYmUgYSByZWxhdGl2ZSBwYXRoJyk7XG4gIH1cblxuICAvLyBpZiB0aGlzIGlzIGEgc3VicHJvamVjdCwgaXQgaXMgcmVsYXRpdmUgdG8gdGhlIHBhcmVudFxuICBpZiAocGFyZW50KSB7XG4gICAgaWYgKCFvdXRkaXJPcHRpb24pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignXCJvdXRkaXJcIiBtdXN0IGJlIHNwZWNpZmllZCBmb3Igc3VicHJvamVjdHMnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGF0aC5yZXNvbHZlKHBhcmVudC5vdXRkaXIsIG91dGRpck9wdGlvbik7XG4gIH1cblxuICAvLyBpZiB0aGlzIGlzIHJ1bm5pbmcgaW5zaWRlIGEgdGVzdCBhbmQgb3V0ZGlyIGlzIG5vdCBleHBsaWNpdGx5IHNldFxuICAvLyB1c2UgYSB0ZW1wIGRpcmVjdG9yeSAodW5sZXNzIGN3ZCBpcyBhbHJlYWR5IHVuZGVyIHRtcClcbiAgaWYgKElTX1RFU1RfUlVOICYmICFvdXRkaXJPcHRpb24pIHtcbiAgICBjb25zdCByZWFsQ3dkID0gcmVhbHBhdGhTeW5jKHByb2Nlc3MuY3dkKCkpO1xuICAgIGNvbnN0IHJlYWxUbXAgPSByZWFscGF0aFN5bmModG1wZGlyKCkpO1xuXG4gICAgaWYgKHJlYWxDd2Quc3RhcnRzV2l0aChyZWFsVG1wKSkge1xuICAgICAgcmV0dXJuIHBhdGgucmVzb2x2ZShyZWFsQ3dkLCBvdXRkaXJPcHRpb24gPz8gXCIuXCIpO1xuICAgIH1cblxuICAgIHJldHVybiBta2R0ZW1wU3luYyhwYXRoLmpvaW4odG1wZGlyKCksIFwicHJvamVuLlwiKSk7XG4gIH1cblxuICByZXR1cm4gcGF0aC5yZXNvbHZlKG91dGRpck9wdGlvbiA/PyBcIi5cIik7XG59XG4iXX0=
package/lib/projects.js CHANGED
@@ -33,7 +33,7 @@ class Projects {
33
33
  }
34
34
  exports.Projects = Projects;
35
35
  _a = JSII_RTTI_SYMBOL_1;
36
- Projects[_a] = { fqn: "projen.Projects", version: "0.76.8" };
36
+ Projects[_a] = { fqn: "projen.Projects", version: "0.76.10" };
37
37
  function resolveModulePath(moduleName) {
38
38
  // Default project resolution location
39
39
  if (moduleName === "projen") {
@@ -38,7 +38,7 @@ class ProjenrcJson extends projenrc_1.ProjenrcFile {
38
38
  }
39
39
  exports.ProjenrcJson = ProjenrcJson;
40
40
  _a = JSII_RTTI_SYMBOL_1;
41
- ProjenrcJson[_a] = { fqn: "projen.ProjenrcJson", version: "0.76.8" };
41
+ ProjenrcJson[_a] = { fqn: "projen.ProjenrcJson", version: "0.76.10" };
42
42
  /**
43
43
  * @deprecated use `ProjenrcJson`
44
44
  */
@@ -46,5 +46,5 @@ class Projenrc extends ProjenrcJson {
46
46
  }
47
47
  exports.Projenrc = Projenrc;
48
48
  _b = JSII_RTTI_SYMBOL_1;
49
- Projenrc[_b] = { fqn: "projen.Projenrc", version: "0.76.8" };
49
+ Projenrc[_b] = { fqn: "projen.Projenrc", version: "0.76.10" };
50
50
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvamVucmMtanNvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9wcm9qZW5yYy1qc29uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsMkJBQTBEO0FBQzFELCtCQUF3QztBQUV4Qyx5Q0FBMEM7QUFVMUM7O0dBRUc7QUFDSCxNQUFhLFlBQWEsU0FBUSx1QkFBWTtJQUc1QyxZQUFZLE9BQWdCLEVBQUUsVUFBK0IsRUFBRTtRQUM3RCxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFZixJQUFJLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQyxRQUFRLElBQUksZ0JBQWdCLENBQUM7UUFFckQseURBQXlEO1FBQ3pELE9BQU8sQ0FBQyxXQUFXLEVBQUUsR0FBRyxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDcEQsT0FBTyxDQUFDLFdBQVcsRUFBRSxPQUFPLENBQUMsbUJBQW1CLENBQUMsQ0FBQztRQUVsRCxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBRU8sZ0JBQWdCO1FBQ3RCLE1BQU0sTUFBTSxHQUFHLElBQUEsY0FBTyxFQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUMzRCxJQUFJLElBQUEsZUFBVSxFQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQ3RCLE9BQU8sQ0FBQyxpQkFBaUI7U0FDMUI7UUFFRCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQztRQUMzQyxJQUFJLENBQUMsU0FBUyxFQUFFO1lBQ2QsT0FBTztTQUNSO1FBRUQsTUFBTSxJQUFJLEdBQUc7WUFDWCxJQUFJLEVBQUUsU0FBUyxDQUFDLEdBQUc7WUFDbkIsR0FBRyxTQUFTLENBQUMsSUFBSTtTQUNsQixDQUFDO1FBRUYsSUFBQSxjQUFTLEVBQUMsSUFBQSxjQUFPLEVBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUNoRCxJQUFBLGtCQUFhLEVBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3JELElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksQ0FDdEIsMENBQTBDLE1BQU0sRUFBRSxDQUNuRCxDQUFDO0lBQ0osQ0FBQzs7QUFwQ0gsb0NBcUNDOzs7QUFPRDs7R0FFRztBQUNILE1BQWEsUUFBUyxTQUFRLFlBQVk7O0FBQTFDLDRCQUE2QyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGV4aXN0c1N5bmMsIG1rZGlyU3luYywgd3JpdGVGaWxlU3luYyB9IGZyb20gXCJmc1wiO1xuaW1wb3J0IHsgZGlybmFtZSwgcmVzb2x2ZSB9IGZyb20gXCJwYXRoXCI7XG5pbXBvcnQgeyBQcm9qZWN0IH0gZnJvbSBcIi4vcHJvamVjdFwiO1xuaW1wb3J0IHsgUHJvamVucmNGaWxlIH0gZnJvbSBcIi4vcHJvamVucmNcIjtcblxuZXhwb3J0IGludGVyZmFjZSBQcm9qZW5yY0pzb25PcHRpb25zIHtcbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBwcm9qZW5yYyBmaWxlLlxuICAgKiBAZGVmYXVsdCBcIi5wcm9qZW5yYy5qc29uXCJcbiAgICovXG4gIHJlYWRvbmx5IGZpbGVuYW1lPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFNldHMgdXAgYSBwcm9qZWN0IHRvIHVzZSBKU09OIGZvciBwcm9qZW5yYy5cbiAqL1xuZXhwb3J0IGNsYXNzIFByb2plbnJjSnNvbiBleHRlbmRzIFByb2plbnJjRmlsZSB7XG4gIHB1YmxpYyByZWFkb25seSBmaWxlUGF0aDogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKHByb2plY3Q6IFByb2plY3QsIG9wdGlvbnM6IFByb2plbnJjSnNvbk9wdGlvbnMgPSB7fSkge1xuICAgIHN1cGVyKHByb2plY3QpO1xuXG4gICAgdGhpcy5maWxlUGF0aCA9IG9wdGlvbnMuZmlsZW5hbWUgPz8gXCIucHJvamVucmMuanNvblwiO1xuXG4gICAgLy8gdGhpcyBpcyB0aGUgdGFzayBwcm9qZW4gZXhlY3V0ZXMgd2hlbiBydW5uaW5nIGBwcm9qZW5gXG4gICAgcHJvamVjdC5kZWZhdWx0VGFzaz8uZW52KFwiRklMRU5BTUVcIiwgdGhpcy5maWxlUGF0aCk7XG4gICAgcHJvamVjdC5kZWZhdWx0VGFzaz8uYnVpbHRpbihcInJ1bi1wcm9qZW5yYy1qc29uXCIpO1xuXG4gICAgdGhpcy5nZW5lcmF0ZVByb2plbnJjKCk7XG4gIH1cblxuICBwcml2YXRlIGdlbmVyYXRlUHJvamVucmMoKSB7XG4gICAgY29uc3QgcmNmaWxlID0gcmVzb2x2ZSh0aGlzLnByb2plY3Qub3V0ZGlyLCB0aGlzLmZpbGVQYXRoKTtcbiAgICBpZiAoZXhpc3RzU3luYyhyY2ZpbGUpKSB7XG4gICAgICByZXR1cm47IC8vIGFscmVhZHkgZXhpc3RzXG4gICAgfVxuXG4gICAgY29uc3QgYm9vdHN0cmFwID0gdGhpcy5wcm9qZWN0LmluaXRQcm9qZWN0O1xuICAgIGlmICghYm9vdHN0cmFwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QganNvbiA9IHtcbiAgICAgIHR5cGU6IGJvb3RzdHJhcC5mcW4sXG4gICAgICAuLi5ib290c3RyYXAuYXJncyxcbiAgICB9O1xuXG4gICAgbWtkaXJTeW5jKGRpcm5hbWUocmNmaWxlKSwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgd3JpdGVGaWxlU3luYyhyY2ZpbGUsIEpTT04uc3RyaW5naWZ5KGpzb24sIG51bGwsIDIpKTtcbiAgICB0aGlzLnByb2plY3QubG9nZ2VyLmluZm8oXG4gICAgICBgUHJvamVjdCBkZWZpbml0aW9uIGZpbGUgd2FzIGNyZWF0ZWQgYXQgJHtyY2ZpbGV9YFxuICAgICk7XG4gIH1cbn1cblxuLyoqXG4gKiBAZGVwcmVjYXRlZCB1c2UgYFByb2plbnJjSnNvbk9wdGlvbnNgXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUHJvamVucmNPcHRpb25zIGV4dGVuZHMgUHJvamVucmNKc29uT3B0aW9ucyB7fVxuXG4vKipcbiAqIEBkZXByZWNhdGVkIHVzZSBgUHJvamVucmNKc29uYFxuICovXG5leHBvcnQgY2xhc3MgUHJvamVucmMgZXh0ZW5kcyBQcm9qZW5yY0pzb24ge31cbiJdfQ==
package/lib/projenrc.js CHANGED
@@ -21,5 +21,5 @@ class ProjenrcFile extends component_1.Component {
21
21
  }
22
22
  exports.ProjenrcFile = ProjenrcFile;
23
23
  _a = JSII_RTTI_SYMBOL_1;
24
- ProjenrcFile[_a] = { fqn: "projen.ProjenrcFile", version: "0.76.8" };
24
+ ProjenrcFile[_a] = { fqn: "projen.ProjenrcFile", version: "0.76.10" };
25
25
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvamVucmMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvcHJvamVucmMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSwyQ0FBd0M7QUFHeEM7O0dBRUc7QUFDSCxNQUFzQixZQUFhLFNBQVEscUJBQVM7SUFDbEQ7Ozs7O09BS0c7SUFDSSxNQUFNLENBQUMsRUFBRSxDQUFDLE9BQWdCO1FBQy9CLE1BQU0sVUFBVSxHQUFHLENBQUMsQ0FBWSxFQUFxQixFQUFFLENBQ3JELENBQUMsWUFBWSxZQUFZLENBQUM7UUFDNUIsT0FBTyxPQUFPLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUM3QyxDQUFDOztBQVhILG9DQWlCQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCB9IGZyb20gXCIuL2NvbXBvbmVudFwiO1xuaW1wb3J0IHsgUHJvamVjdCB9IGZyb20gXCIuL3Byb2plY3RcIjtcblxuLyoqXG4gKiBBIGNvbXBvbmVudCByZXByZXNlbnRpbmcgdGhlIHByb2plbiBydW50aW1lIGNvbmZpZ3VyYXRpb25cbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFByb2plbnJjRmlsZSBleHRlbmRzIENvbXBvbmVudCB7XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBgUHJvamVucmNgIGluc3RhbmNlIGFzc29jaWF0ZWQgd2l0aCBhIHByb2plY3Qgb3IgYHVuZGVmaW5lZGAgaWZcbiAgICogdGhlcmUgaXMgbm8gUHJvamVucmMuXG4gICAqIEBwYXJhbSBwcm9qZWN0IFRoZSBwcm9qZWN0XG4gICAqIEByZXR1cm5zIEEgUHJvamVucmNcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgb2YocHJvamVjdDogUHJvamVjdCk6IFByb2plbnJjRmlsZSB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgaXNQcm9qZW5yYyA9IChvOiBDb21wb25lbnQpOiBvIGlzIFByb2plbnJjRmlsZSA9PlxuICAgICAgbyBpbnN0YW5jZW9mIFByb2plbnJjRmlsZTtcbiAgICByZXR1cm4gcHJvamVjdC5jb21wb25lbnRzLmZpbmQoaXNQcm9qZW5yYyk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIHBhdGggb2YgdGhlIHByb2plbnJjIGZpbGUuXG4gICAqL1xuICBhYnN0cmFjdCByZWFkb25seSBmaWxlUGF0aDogc3RyaW5nO1xufVxuIl19
package/lib/python/pip.js CHANGED
@@ -53,7 +53,7 @@ class Pip extends component_1.Component {
53
53
  }
54
54
  exports.Pip = Pip;
55
55
  _a = JSII_RTTI_SYMBOL_1;
56
- Pip[_a] = { fqn: "projen.python.Pip", version: "0.76.8" };
56
+ Pip[_a] = { fqn: "projen.python.Pip", version: "0.76.10" };
57
57
  class RuntimeDependencyProvider {
58
58
  constructor(project) {
59
59
  this.project = project;
@@ -150,7 +150,7 @@ class Poetry extends component_1.Component {
150
150
  }
151
151
  exports.Poetry = Poetry;
152
152
  _a = JSII_RTTI_SYMBOL_1;
153
- Poetry[_a] = { fqn: "projen.python.Poetry", version: "0.76.8" };
153
+ Poetry[_a] = { fqn: "projen.python.Poetry", version: "0.76.10" };
154
154
  /**
155
155
  * Represents configuration of a pyproject.toml file for a Poetry project.
156
156
  *
@@ -180,5 +180,5 @@ class PoetryPyproject extends component_1.Component {
180
180
  }
181
181
  exports.PoetryPyproject = PoetryPyproject;
182
182
  _b = JSII_RTTI_SYMBOL_1;
183
- PoetryPyproject[_b] = { fqn: "projen.python.PoetryPyproject", version: "0.76.8" };
183
+ PoetryPyproject[_b] = { fqn: "projen.python.PoetryPyproject", version: "0.76.10" };
184
184
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9ldHJ5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3B5dGhvbi9wb2V0cnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxvQ0FBb0M7QUFJcEMsNENBQXlDO0FBQ3pDLGtEQUFpRDtBQUdqRCxrREFBOEM7QUFDOUMsa0NBQW1DO0FBQ25DLGtDQUEyRTtBQUUzRTs7O0dBR0c7QUFDSCxNQUFhLE1BQ1gsU0FBUSxxQkFBUztJQVdqQixZQUFZLE9BQWdCLEVBQUUsT0FBK0I7UUFDM0QsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRWYsSUFBSSxDQUFDLFdBQVcsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRTtZQUM1QyxXQUFXLEVBQUUsa0NBQWtDO1lBQy9DLElBQUksRUFBRSxlQUFlO1NBQ3RCLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxhQUFhLEVBQUUsdUJBQXVCLENBQUMsQ0FBQztRQUMxRSxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQy9CLE1BQU0sRUFDTix5Q0FBeUMsQ0FDMUMsQ0FBQztRQUVGLE9BQU8sQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBRXpDLElBQUksQ0FBQyxlQUFlLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxjQUFjLEVBQUU7WUFDckQsV0FBVyxFQUFFLG1EQUFtRDtZQUNoRSxJQUFJLEVBQUUsNEJBQTRCO1NBQ25DLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxXQUFXLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUU7WUFDNUMsV0FBVyxFQUFFLDhCQUE4QjtZQUMzQyxJQUFJLEVBQUUsZ0JBQWdCO1NBQ3ZCLENBQUMsQ0FBQztRQUVILElBQUksZUFBZSxDQUFDLE9BQU8sRUFBRTtZQUMzQixJQUFJLEVBQUUsT0FBTyxDQUFDLElBQUk7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QUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQ3RCLGdEQUFnRCxPQUFPLEtBQUssQ0FDN0QsQ0FBQztTQUNIO0lBQ0gsQ0FBQztJQUVEOztPQUVHO0lBQ0ksbUJBQW1CO1FBQ3hCLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDO1FBQ3ZELE1BQU0sT0FBTyxHQUFHLElBQUksMEJBQVcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3JELE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN6QyxDQUFDOztBQXZLSCx3QkF3S0M7OztBQTZJRDs7OztHQUlHO0FBQ0gsTUFBYSxlQUFnQixTQUFRLHFCQUFTO0lBRzVDLFlBQVksT0FBZ0IsRUFBRSxPQUErQjtRQUMzRCxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFZixNQUFNLGtCQUFrQixHQUFHLElBQUEsZ0NBQXlCLEVBQUMsT0FBTyxFQUFFO1lBQzVELFNBQVMsRUFBRSxHQUFHO1NBQ2YsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLGVBQVEsQ0FBQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUU7WUFDbEQsU0FBUyxFQUFFLEtBQUs7WUFDaEIsR0FBRyxFQUFFO2dCQUNILGNBQWMsRUFBRTtvQkFDZCxRQUFRLEVBQUUsQ0FBQyxvQkFBb0IsQ0FBQztvQkFDaEMsZUFBZSxFQUFFLHlCQUF5QjtpQkFDM0M7Z0JBQ0QsSUFBSSxFQUFFO29CQUNKLE1BQU0sRUFBRTt3QkFDTixHQUFHLGtCQUFrQjtxQkFDdEI7aUJBQ0Y7YUFDRjtTQUNGLENBQUMsQ0FBQztJQUNMLENBQUM7O0FBeEJILDBDQXlCQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIFRPTUwgZnJvbSBcIkBpYXJuYS90b21sXCI7XG5pbXBvcnQgeyBJUHl0aG9uRGVwcyB9IGZyb20gXCIuL3B5dGhvbi1kZXBzXCI7XG5pbXBvcnQgeyBJUHl0aG9uRW52IH0gZnJvbSBcIi4vcHl0aG9uLWVudlwiO1xuaW1wb3J0IHsgSVB5dGhvblBhY2thZ2luZywgUHl0aG9uUGFja2FnaW5nT3B0aW9ucyB9IGZyb20gXCIuL3B5dGhvbi1wYWNrYWdpbmdcIjtcbmltcG9ydCB7IENvbXBvbmVudCB9IGZyb20gXCIuLi9jb21wb25lbnRcIjtcbmltcG9ydCB7IERlcGVuZGVuY3lUeXBlIH0gZnJvbSBcIi4uL2RlcGVuZGVuY2llc1wiO1xuaW1wb3J0IHsgUHJvamVjdCB9IGZyb20gXCIuLi9wcm9qZWN0XCI7XG5pbXBvcnQgeyBUYXNrIH0gZnJvbSBcIi4uL3Rhc2tcIjtcbmltcG9ydCB7IFRhc2tSdW50aW1lIH0gZnJvbSBcIi4uL3Rhc2stcnVudGltZVwiO1xuaW1wb3J0IHsgVG9tbEZpbGUgfSBmcm9tIFwiLi4vdG9tbFwiO1xuaW1wb3J0IHsgZGVjYW1lbGl6ZUtleXNSZWN1cnNpdmVseSwgZXhlYywgZXhlY09yVW5kZWZpbmVkIH0gZnJvbSBcIi4uL3V0aWxcIjtcblxuLyoqXG4gKiBNYW5hZ2UgcHJvamVjdCBkZXBlbmRlbmNpZXMsIHZpcnR1YWwgZW52aXJvbm1lbnRzLCBhbmQgcGFja2FnaW5nIHRocm91Z2ggdGhlXG4gKiBwb2V0cnkgQ0xJIHRvb2wuXG4gKi9cbmV4cG9ydCBjbGFzcyBQb2V0cnlcbiAgZXh0ZW5kcyBDb21wb25lbnRcbiAgaW1wbGVtZW50cyBJUHl0aG9uRGVwcywgSVB5dGhvbkVudiwgSVB5dGhvblBhY2thZ2luZ1xue1xuICBwdWJsaWMgcmVhZG9ubHkgaW5zdGFsbFRhc2s6IFRhc2s7XG4gIHB1YmxpYyByZWFkb25seSBwdWJsaXNoVGFzazogVGFzaztcblxuICAvKipcbiAgICogQSB0YXNrIHRoYXQgdXBsb2FkcyB0aGUgcGFja2FnZSB0byB0aGUgVGVzdCBQeVBJIHJlcG9zaXRvcnkuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgcHVibGlzaFRlc3RUYXNrOiBUYXNrO1xuXG4gIGNvbnN0cnVjdG9yKHByb2plY3Q6IFByb2plY3QsIG9wdGlvbnM6IFB5dGhvblBhY2thZ2luZ09wdGlvbnMpIHtcbiAgICBzdXBlcihwcm9qZWN0KTtcblxuICAgIHRoaXMuaW5zdGFsbFRhc2sgPSBwcm9qZWN0LmFkZFRhc2soXCJpbnN0YWxsXCIsIHtcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkluc3RhbGwgYW5kIHVwZ3JhZGUgZGVwZW5kZW5jaWVzXCIsXG4gICAgICBleGVjOiBcInBvZXRyeSB1cGRhdGVcIixcbiAgICB9KTtcblxuICAgIHRoaXMucHJvamVjdC50YXNrcy5hZGRFbnZpcm9ubWVudChcIlZJUlRVQUxfRU5WXCIsIFwiJChwb2V0cnkgZW52IGluZm8gLXApXCIpO1xuICAgIHRoaXMucHJvamVjdC50YXNrcy5hZGRFbnZpcm9ubWVudChcbiAgICAgIFwiUEFUSFwiLFxuICAgICAgXCIkKGVjaG8gJChwb2V0cnkgZW52IGluZm8gLXApL2JpbjokUEFUSClcIlxuICAgICk7XG5cbiAgICBwcm9qZWN0LnBhY2thZ2VUYXNrLmV4ZWMoXCJwb2V0cnkgYnVpbGRcIik7XG5cbiAgICB0aGlzLnB1Ymxpc2hUZXN0VGFzayA9IHByb2plY3QuYWRkVGFzayhcInB1Ymxpc2g6dGVzdFwiLCB7XG4gICAgICBkZXNjcmlwdGlvbjogXCJVcGxvYWRzIHRoZSBwYWNrYWdlIGFnYWluc3QgYSB0ZXN0IFB5UEkgZW5kcG9pbnQuXCIsXG4gICAgICBleGVjOiBcInBvZXRyeSBwdWJsaXNoIC1yIHRlc3RweXBpXCIsXG4gICAgfSk7XG5cbiAgICB0aGlzLnB1Ymxpc2hUYXNrID0gcHJvamVjdC5hZGRUYXNrKFwicHVibGlzaFwiLCB7XG4gICAgICBkZXNjcmlwdGlvbjogXCJVcGxvYWRzIHRoZSBwYWNrYWdlIHRvIFB5UEkuXCIsXG4gICAgICBleGVjOiBcInBvZXRyeSBwdWJsaXNoXCIsXG4gICAgfSk7XG5cbiAgICBuZXcgUG9ldHJ5UHlwcm9qZWN0KHByb2plY3QsIHtcbiAgICAgIG5hbWU6IHByb2plY3QubmFtZSxcbiAgICAgIHZlcnNpb246IG9wdGlvbnMudmVyc2lvbixcbiAgICAgIGRlc2NyaXB0aW9uOiBvcHRpb25zLmRlc2NyaXB0aW9uID8/IFwiXCIsXG4gICAgICBsaWNlbnNlOiBvcHRpb25zLmxpY2Vuc2UsXG4gICAgICBhdXRob3JzOiBbYCR7b3B0aW9ucy5hdXRob3JOYW1lfSA8JHtvcHRpb25zLmF1dGhvckVtYWlsfT5gXSxcbiAgICAgIGhvbWVwYWdlOiBvcHRpb25zLmhvbWVwYWdlLFxuICAgICAgY2xhc3NpZmllcnM6IG9wdGlvbnMuY2xhc3NpZmllcnMsXG4gICAgICAuLi5vcHRpb25zLnBvZXRyeU9wdGlvbnMsXG4gICAgICBkZXBlbmRlbmNpZXM6ICgpID0+IHRoaXMuc3ludGhEZXBlbmRlbmNpZXMoKSxcbiAgICAgIGRldkRlcGVuZGVuY2llczogKCkgPT4gdGhpcy5zeW50aERldkRlcGVuZGVuY2llcygpLFxuICAgIH0pO1xuXG4gICAgbmV3IFRvbWxGaWxlKHByb2plY3QsIFwicG9ldHJ5LnRvbWxcIiwge1xuICAgICAgY29tbWl0dGVkOiBmYWxzZSxcbiAgICAgIG9iajoge1xuICAgICAgICByZXBvc2l0b3JpZXM6IHtcbiAgICAgICAgICB0ZXN0cHlwaToge1xuICAgICAgICAgICAgdXJsOiBcImh0dHBzOi8vdGVzdC5weXBpLm9yZy9sZWdhY3kvXCIsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHN5bnRoRGVwZW5kZW5jaWVzKCkge1xuICAgIGNvbnN0IGRlcGVuZGVuY2llczogeyBba2V5OiBzdHJpbmddOiBhbnkgfSA9IHt9O1xuICAgIGxldCBweXRob25EZWZpbmVkOiBib29sZWFuID0gZmFsc2U7XG4gICAgZm9yIChjb25zdCBwa2cgb2YgdGhpcy5wcm9qZWN0LmRlcHMuYWxsKSB7XG4gICAgICBpZiAocGtnLm5hbWUgPT09IFwicHl0aG9uXCIpIHtcbiAgICAgICAgcHl0aG9uRGVmaW5lZCA9IHRydWU7XG4gICAgICB9XG4gICAgICBpZiAocGtnLnR5cGUgPT09IERlcGVuZGVuY3lUeXBlLlJVTlRJTUUpIHtcbiAgICAgICAgZGVwZW5kZW5jaWVzW3BrZy5uYW1lXSA9IHBrZy52ZXJzaW9uID8/IFwiKlwiO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoIXB5dGhvbkRlZmluZWQpIHtcbiAgICAgIC8vIFB5dGhvbiB2ZXJzaW9uIG11c3QgYmUgZGVmaW5lZCBmb3IgcG9ldHJ5IHByb2plY3RzLiBEZWZhdWx0IHRvIF4zLjcuXG4gICAgICBkZXBlbmRlbmNpZXMucHl0aG9uID0gXCJeMy43XCI7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnBlcm1pdERlcGVuZGVuY2llc1dpdGhNZXRhZGF0YShkZXBlbmRlbmNpZXMpO1xuICB9XG5cbiAgcHJpdmF0ZSBzeW50aERldkRlcGVuZGVuY2llcygpIHtcbiAgICBjb25zdCBkZXBlbmRlbmNpZXM6IHsgW2tleTogc3RyaW5nXTogYW55IH0gPSB7fTtcbiAgICBmb3IgKGNvbnN0IHBrZyBvZiB0aGlzLnByb2plY3QuZGVwcy5hbGwpIHtcbiAgICAgIGlmIChbRGVwZW5kZW5jeVR5cGUuREVWRU5WLCBEZXBlbmRlbmN5VHlwZS5URVNUXS5pbmNsdWRlcyhwa2cudHlwZSkpIHtcbiAgICAgICAgZGVwZW5kZW5jaWVzW3BrZy5uYW1lXSA9IHBrZy52ZXJzaW9uID8/IFwiKlwiO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcy5wZXJtaXREZXBlbmRlbmNpZXNXaXRoTWV0YWRhdGEoZGVwZW5kZW5jaWVzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBbGxvdyBmb3IgcG9ldHJ5IGRlcGVuZGVuY2llcyB0byBzcGVjaWZ5IG1ldGFkYXRhLCBlZyBgbXlwYWNrYWdlQHsgdmVyc2lvbj1cIjEuMi4zXCIsIGV4dHJhcyA9IFtcIm15LXBhY2thZ2UtZXh0cmFcIl0gfWBcbiAgICogQHBhcmFtIGRlcGVuZGVuY2llcyBwb2V0cnkgZGVwZW5kZW5jaWVzIG9iamVjdFxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgcHJpdmF0ZSBwZXJtaXREZXBlbmRlbmNpZXNXaXRoTWV0YWRhdGEoZGVwZW5kZW5jaWVzOiB7IFtrZXk6IHN0cmluZ106IGFueSB9KSB7XG4gICAgY29uc3QgcGFyc2VWZXJzaW9uTWV0YWRhdGEgPSAodmVyc2lvbjogYW55KSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICAvLyBUcnkgcGFyc2luZyB0aGUgdmVyc2lvbiBhcyB0b21sIHRvIHBlcm1pdCBtZXRhZGF0YVxuICAgICAgICByZXR1cm4gVE9NTC5wYXJzZShgdmVyc2lvbiA9ICR7dmVyc2lvbn1gKS52ZXJzaW9uO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAvLyBJbnZhbGlkIHRvbWwgbWVhbnMgaXQncyBub3QgbWV0YWRhdGEsIHNvIHNob3VsZCBqdXN0IGJlIHRyZWF0ZWQgYXMgdGhlIHN0cmluZ1xuICAgICAgICByZXR1cm4gdmVyc2lvbjtcbiAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgICBPYmplY3QuZW50cmllcyhkZXBlbmRlbmNpZXMpLm1hcCgoW2tleSwgdmFsdWVdKSA9PiBbXG4gICAgICAgIGtleSxcbiAgICAgICAgcGFyc2VWZXJzaW9uTWV0YWRhdGEodmFsdWUpLFxuICAgICAgXSlcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYSBydW50aW1lIGRlcGVuZGVuY3kuXG4gICAqXG4gICAqIEBwYXJhbSBzcGVjIEZvcm1hdCBgPG1vZHVsZT5APHNlbXZlcj5gXG4gICAqL1xuICBwdWJsaWMgYWRkRGVwZW5kZW5jeShzcGVjOiBzdHJpbmcpIHtcbiAgICB0aGlzLnByb2plY3QuZGVwcy5hZGREZXBlbmRlbmN5KHNwZWMsIERlcGVuZGVuY3lUeXBlLlJVTlRJTUUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYSBkZXYgZGVwZW5kZW5jeS5cbiAgICpcbiAgICogQHBhcmFtIHNwZWMgRm9ybWF0IGA8bW9kdWxlPkA8c2VtdmVyPmBcbiAgICovXG4gIHB1YmxpYyBhZGREZXZEZXBlbmRlbmN5KHNwZWM6IHN0cmluZykge1xuICAgIHRoaXMucHJvamVjdC5kZXBzLmFkZERlcGVuZGVuY3koc3BlYywgRGVwZW5kZW5jeVR5cGUuREVWRU5WKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbml0aWFsaXplcyB0aGUgdmlydHVhbCBlbnZpcm9ubWVudCBpZiBpdCBkb2Vzbid0IGV4aXN0IChjYWxsZWQgZHVyaW5nIHBvc3Qtc3ludGhlc2lzKS5cbiAgICovXG4gIHB1YmxpYyBzZXR1cEVudmlyb25tZW50KCkge1xuICAgIGNvbnN0IHJlc3VsdCA9IGV4ZWNPclVuZGVmaW5lZChcIndoaWNoIHBvZXRyeVwiLCB7XG4gICAgICBjd2Q6IHRoaXMucHJvamVjdC5vdXRkaXIsXG4gICAgfSk7XG4gICAgaWYgKCFyZXN1bHQpIHtcbiAgICAgIHRoaXMucHJvamVjdC5sb2dnZXIuaW5mbyhcbiAgICAgICAgXCJVbmFibGUgdG8gc2V0dXAgYW4gZW52aXJvbm1lbnQgc2luY2UgcG9ldHJ5IGlzIG5vdCBpbnN0YWxsZWQuIFBsZWFzZSBpbnN0YWxsIHBvZXRyeSAoaHR0cHM6Ly9weXRob24tcG9ldHJ5Lm9yZy9kb2NzLykgb3IgdXNlIGEgZGlmZmVyZW50IGNvbXBvbmVudCBmb3IgbWFuYWdpbmcgZW52aXJvbm1lbnRzIHN1Y2ggYXMgJ3ZlbnYnLlwiXG4gICAgICApO1xuICAgIH1cblxuICAgIGxldCBlbnZQYXRoID0gZXhlY09yVW5kZWZpbmVkKFwicG9ldHJ5IGVudiBpbmZvIC1wXCIsIHtcbiAgICAgIGN3ZDogdGhpcy5wcm9qZWN0Lm91dGRpcixcbiAgICB9KTtcbiAgICBpZiAoIWVudlBhdGgpIHtcbiAgICAgIHRoaXMucHJvamVjdC5sb2dnZXIuaW5mbyhcIlNldHRpbmcgdXAgYSB2aXJ0dWFsIGVudmlyb25tZW50Li4uXCIpO1xuICAgICAgZXhlYyhcInBvZXRyeSBlbnYgdXNlIHB5dGhvblwiLCB7IGN3ZDogdGhpcy5wcm9qZWN0Lm91dGRpciB9KTtcbiAgICAgIGVudlBhdGggPSBleGVjT3JVbmRlZmluZWQoXCJwb2V0cnkgZW52IGluZm8gLXBcIiwge1xuICAgICAgICBjd2Q6IHRoaXMucHJvamVjdC5vdXRkaXIsXG4gICAgICB9KTtcbiAgICAgIHRoaXMucHJvamVjdC5sb2dnZXIuaW5mbyhcbiAgICAgICAgYEVudmlyb25tZW50IHN1Y2Nlc3NmdWxseSBjcmVhdGVkIChsb2NhdGVkIGluICR7ZW52UGF0aH19KS5gXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBJbnN0YWxscyBkZXBlbmRlbmNpZXMgKGNhbGxlZCBkdXJpbmcgcG9zdC1zeW50aGVzaXMpLlxuICAgKi9cbiAgcHVibGljIGluc3RhbGxEZXBlbmRlbmNpZXMoKSB7XG4gICAgdGhpcy5wcm9qZWN0LmxvZ2dlci5pbmZvKFwiSW5zdGFsbGluZyBkZXBlbmRlbmNpZXMuLi5cIik7XG4gICAgY29uc3QgcnVudGltZSA9IG5ldyBUYXNrUnVudGltZSh0aGlzLnByb2plY3Qub3V0ZGlyKTtcbiAgICBydW50aW1lLnJ1blRhc2sodGhpcy5pbnN0YWxsVGFzay5uYW1lKTtcbiAgfVxufVxuXG4vKipcbiAqIFBvZXRyeS1zcGVjaWZpYyBvcHRpb25zLlxuICogQHNlZSBodHRwczovL3B5dGhvbi1wb2V0cnkub3JnL2RvY3MvcHlwcm9qZWN0L1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFBvZXRyeVB5cHJvamVjdE9wdGlvbnNXaXRob3V0RGVwcyB7XG4gIC8qKlxuICAgKiBOYW1lIG9mIHRoZSBwYWNrYWdlIChyZXF1aXJlZCkuXG4gICAqL1xuICByZWFkb25seSBuYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBWZXJzaW9uIG9mIHRoZSBwYWNrYWdlIChyZXF1aXJlZCkuXG4gICAqL1xuICByZWFkb25seSB2ZXJzaW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBIHNob3J0IGRlc2NyaXB0aW9uIG9mIHRoZSBwYWNrYWdlIChyZXF1aXJlZCkuXG4gICAqL1xuICByZWFkb25seSBkZXNjcmlwdGlvbj86IHN0cmluZztcblxuICAvKipcbiAgICogTGljZW5zZSBvZiB0aGlzIHBhY2thZ2UgYXMgYW4gU1BEWCBpZGVudGlmaWVyLlxuICAgKlxuICAgKiBJZiB0aGUgcHJvamVjdCBpcyBwcm9wcmlldGFyeSBhbmQgZG9lcyBub3QgdXNlIGEgc3BlY2lmaWMgbGljZW5zZSwgeW91XG4gICAqIGNhbiBzZXQgdGhpcyB2YWx1ZSBhcyBcIlByb3ByaWV0YXJ5XCIuXG4gICAqL1xuICByZWFkb25seSBsaWNlbnNlPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgYXV0aG9ycyBvZiB0aGUgcGFja2FnZS4gTXVzdCBiZSBpbiB0aGUgZm9ybSBcIm5hbWUgPGVtYWlsPlwiXG4gICAqL1xuICByZWFkb25seSBhdXRob3JzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIHRoZSBtYWludGFpbmVycyBvZiB0aGUgcGFja2FnZS4gTXVzdCBiZSBpbiB0aGUgZm9ybSBcIm5hbWUgPGVtYWlsPlwiXG4gICAqL1xuICByZWFkb25seSBtYWludGFpbmVycz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgcmVhZG1lIGZpbGUgb2YgdGhlIHBhY2thZ2UuXG4gICAqL1xuICByZWFkb25seSByZWFkbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEEgVVJMIHRvIHRoZSB3ZWJzaXRlIG9mIHRoZSBwcm9qZWN0LlxuICAgKi9cbiAgcmVhZG9ubHkgaG9tZXBhZ2U/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEEgVVJMIHRvIHRoZSByZXBvc2l0b3J5IG9mIHRoZSBwcm9qZWN0LlxuICAgKi9cbiAgcmVhZG9ubHkgcmVwb3NpdG9yeT86IHN0cmluZztcblxuICAvKipcbiAgICogQSBVUkwgdG8gdGhlIGRvY3VtZW50YXRpb24gb2YgdGhlIHByb2plY3QuXG4gICAqL1xuICByZWFkb25seSBkb2N1bWVudGF0aW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBIGxpc3Qgb2Yga2V5d29yZHMgKG1heDogNSkgdGhhdCB0aGUgcGFja2FnZSBpcyByZWxhdGVkIHRvLlxuICAgKi9cbiAgcmVhZG9ubHkga2V5d29yZHM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogQSBsaXN0IG9mIFB5UEkgdHJvdmUgY2xhc3NpZmllcnMgdGhhdCBkZXNjcmliZSB0aGUgcHJvamVjdC5cbiAgICpcbiAgICogQHNlZSBodHRwczovL3B5cGkub3JnL2NsYXNzaWZpZXJzL1xuICAgKi9cbiAgcmVhZG9ubHkgY2xhc3NpZmllcnM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogQSBsaXN0IG9mIHBhY2thZ2VzIGFuZCBtb2R1bGVzIHRvIGluY2x1ZGUgaW4gdGhlIGZpbmFsIGRpc3RyaWJ1dGlvbi5cbiAgICovXG4gIHJlYWRvbmx5IHBhY2thZ2VzPzogYW55W107XG5cbiAgLyoqXG4gICAqIEEgbGlzdCBvZiBwYXR0ZXJucyB0aGF0IHdpbGwgYmUgaW5jbHVkZWQgaW4gdGhlIGZpbmFsIHBhY2thZ2UuXG4gICAqL1xuICByZWFkb25seSBpbmNsdWRlPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIEEgbGlzdCBvZiBwYXR0ZXJucyB0aGF0IHdpbGwgYmUgZXhjbHVkZWQgaW4gdGhlIGZpbmFsIHBhY2thZ2UuXG4gICAqXG4gICAqIElmIGEgVkNTIGlzIGJlaW5nIHVzZWQgZm9yIGEgcGFja2FnZSwgdGhlIGV4Y2x1ZGUgZmllbGQgd2lsbCBiZSBzZWVkZWQgd2l0aFxuICAgKiB0aGUgVkNT4oCZIGlnbm9yZSBzZXR0aW5ncyAoLmdpdGlnbm9yZSBmb3IgZ2l0IGZvciBleGFtcGxlKS5cbiAgICovXG4gIHJlYWRvbmx5IGV4Y2x1ZGU/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogVGhlIHNjcmlwdHMgb3IgZXhlY3V0YWJsZXMgdGhhdCB3aWxsIGJlIGluc3RhbGxlZCB3aGVuIGluc3RhbGxpbmcgdGhlIHBhY2thZ2UuXG4gICAqL1xuICByZWFkb25seSBzY3JpcHRzPzogeyBba2V5OiBzdHJpbmddOiBhbnkgfTtcblxuICAvKipcbiAgICogU291cmNlIHJlZ2lzdHJpZXMgZnJvbSB3aGljaCBwYWNrYWdlcyBhcmUgcmV0cmlldmVkLlxuICAgKi9cbiAgcmVhZG9ubHkgc291cmNlPzogYW55W107XG5cbiAgLyoqXG4gICAqIFBhY2thZ2UgZXh0cmFzXG4gICAqL1xuICByZWFkb25seSBleHRyYXM/OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZ1tdIH07XG5cbiAgLyoqXG4gICAqIFBsdWdpbnMuIE11c3QgYmUgc3BlY2lmaWVkIGFzIGEgdGFibGUuXG4gICAqIEBzZWUgaHR0cHM6Ly90b21sLmlvL2VuL3YxLjAuMCN0YWJsZVxuICAgKi9cbiAgcmVhZG9ubHkgcGx1Z2lucz86IGFueTtcblxuICAvKipcbiAgICogUHJvamVjdCBjdXN0b20gVVJMcywgaW4gYWRkaXRpb24gdG8gaG9tZXBhZ2UsIHJlcG9zaXRvcnkgYW5kIGRvY3VtZW50YXRpb24uXG4gICAqIEUuZy4gXCJCdWcgVHJhY2tlclwiXG4gICAqL1xuICByZWFkb25seSB1cmxzPzogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfTtcbn1cblxuLyoqXG4gKiBQb2V0cnktc3BlY2lmaWMgb3B0aW9ucy5cbiAqIEBzZWUgaHR0cHM6Ly9weXRob24tcG9ldHJ5Lm9yZy9kb2NzL3B5cHJvamVjdC9cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQb2V0cnlQeXByb2plY3RPcHRpb25zXG4gIGV4dGVuZHMgUG9ldHJ5UHlwcm9qZWN0T3B0aW9uc1dpdGhvdXREZXBzIHtcbiAgLyoqXG4gICAqIEEgbGlzdCBvZiBkZXBlbmRlbmNpZXMgZm9yIHRoZSBwcm9qZWN0LlxuICAgKlxuICAgKiBUaGUgcHl0aG9uIHZlcnNpb24gZm9yIHdoaWNoIHlvdXIgcGFja2FnZSBpcyBjb21wYXRpYmxlIGlzIGFsc28gcmVxdWlyZWQuXG4gICAqXG4gICAqIEBleGFtcGxlIHsgcmVxdWVzdHM6IFwiXjIuMTMuMFwiIH1cbiAgICovXG4gIHJlYWRvbmx5IGRlcGVuZGVuY2llcz86IHsgW2tleTogc3RyaW5nXTogYW55IH07XG5cbiAgLyoqXG4gICAqIEEgbGlzdCBvZiBkZXZlbG9wbWVudCBkZXBlbmRlbmNpZXMgZm9yIHRoZSBwcm9qZWN0LlxuICAgKlxuICAgKiBAZXhhbXBsZSB7IHJlcXVlc3RzOiBcIl4yLjEzLjBcIiB9XG4gICAqL1xuICByZWFkb25seSBkZXZEZXBlbmRlbmNpZXM/OiB7IFtrZXk6IHN0cmluZ106IGFueSB9O1xufVxuXG4vKipcbiAqIFJlcHJlc2VudHMgY29uZmlndXJhdGlvbiBvZiBhIHB5cHJvamVjdC50b21sIGZpbGUgZm9yIGEgUG9ldHJ5IHByb2plY3QuXG4gKlxuICogQHNlZSBodHRwczovL3B5dGhvbi1wb2V0cnkub3JnL2RvY3MvcHlwcm9qZWN0L1xuICovXG5leHBvcnQgY2xhc3MgUG9ldHJ5UHlwcm9qZWN0IGV4dGVuZHMgQ29tcG9uZW50IHtcbiAgcHVibGljIHJlYWRvbmx5IGZpbGU6IFRvbWxGaWxlO1xuXG4gIGNvbnN0cnVjdG9yKHByb2plY3Q6IFByb2plY3QsIG9wdGlvbnM6IFBvZXRyeVB5cHJvamVjdE9wdGlvbnMpIHtcbiAgICBzdXBlcihwcm9qZWN0KTtcblxuICAgIGNvbnN0IGRlY2FtZWxpc2VkT3B0aW9ucyA9IGRlY2FtZWxpemVLZXlzUmVjdXJzaXZlbHkob3B0aW9ucywge1xuICAgICAgc2VwYXJhdG9yOiBcIi1cIixcbiAgICB9KTtcblxuICAgIHRoaXMuZmlsZSA9IG5ldyBUb21sRmlsZShwcm9qZWN0LCBcInB5cHJvamVjdC50b21sXCIsIHtcbiAgICAgIG9taXRFbXB0eTogZmFsc2UsXG4gICAgICBvYmo6IHtcbiAgICAgICAgXCJidWlsZC1zeXN0ZW1cIjoge1xuICAgICAgICAgIHJlcXVpcmVzOiBbXCJwb2V0cnlfY29yZT49MS4wLjBcIl0sXG4gICAgICAgICAgXCJidWlsZC1iYWNrZW5kXCI6IFwicG9ldHJ5LmNvcmUubWFzb25yeS5hcGlcIixcbiAgICAgICAgfSxcbiAgICAgICAgdG9vbDoge1xuICAgICAgICAgIHBvZXRyeToge1xuICAgICAgICAgICAgLi4uZGVjYW1lbGlzZWRPcHRpb25zLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG59XG4iXX0=
@@ -74,7 +74,7 @@ class Projenrc extends projenrc_1.ProjenrcFile {
74
74
  }
75
75
  exports.Projenrc = Projenrc;
76
76
  _a = JSII_RTTI_SYMBOL_1;
77
- Projenrc[_a] = { fqn: "projen.python.Projenrc", version: "0.76.8" };
77
+ Projenrc[_a] = { fqn: "projen.python.Projenrc", version: "0.76.10" };
78
78
  function resolvePythonImportName(jsiiFqn, jsiiManifest) {
79
79
  const moduleName = jsiiManifest?.targets?.python?.module;
80
80
  // Module name prefix should take precedence in the event moduleName !== fqn prefix
@@ -37,5 +37,5 @@ class PytestSample extends __1.Component {
37
37
  }
38
38
  exports.PytestSample = PytestSample;
39
39
  _a = JSII_RTTI_SYMBOL_1;
40
- PytestSample[_a] = { fqn: "projen.python.PytestSample", version: "0.76.8" };
40
+ PytestSample[_a] = { fqn: "projen.python.PytestSample", version: "0.76.10" };
41
41
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHl0ZXN0LXNhbXBsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9weXRob24vcHl0ZXN0LXNhbXBsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLDBCQUEwQztBQWtCMUM7O0dBRUc7QUFDSCxNQUFhLFlBQWEsU0FBUSxhQUFTO0lBQ3pDLFlBQVksT0FBZ0IsRUFBRSxPQUE0QjtRQUN4RCxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFZixJQUFJLGFBQVMsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLE9BQU8sRUFBRTtZQUN0QyxLQUFLLEVBQUU7Z0JBQ0wsYUFBYSxFQUFFLEVBQUU7Z0JBQ2pCLGlCQUFpQixFQUFFO29CQUNqQixlQUFlO29CQUNmLEVBQUU7b0JBQ0YsUUFBUSxPQUFPLENBQUMsVUFBVSx1QkFBdUI7b0JBQ2pELEVBQUU7b0JBQ0YsMkJBQTJCO29CQUMzQiwyQkFBMkI7b0JBQzNCLE9BQU87b0JBQ1AsNENBQTRDO29CQUM1QywwQ0FBMEM7b0JBQzFDLDBEQUEwRDtvQkFDMUQsUUFBUTtvQkFDUixHQUFHO29CQUNILGlDQUFpQztvQkFDakMsOENBQThDO29CQUM5QyxvQ0FBb0M7b0JBQ3BDLEVBQUU7aUJBQ0gsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO2FBQ2I7U0FDRixDQUFDLENBQUM7SUFDTCxDQUFDOztBQTNCSCxvQ0E0QkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIFNhbXBsZURpciB9IGZyb20gXCIuLlwiO1xuaW1wb3J0IHsgUHJvamVjdCB9IGZyb20gXCIuLi9wcm9qZWN0XCI7XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgcHl0aG9uIHRlc3QgY29kZSBzYW1wbGUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUHl0ZXN0U2FtcGxlT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBOYW1lIG9mIHRoZSBweXRob24gcGFja2FnZSBhcyB1c2VkIGluIGltcG9ydHMgYW5kIGZpbGVuYW1lcy5cbiAgICovXG4gIHJlYWRvbmx5IG1vZHVsZU5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogVGVzdCBkaXJlY3RvcnlcbiAgICovXG4gIHJlYWRvbmx5IHRlc3RkaXI6IHN0cmluZztcbn1cblxuLyoqXG4gKiBQeXRob24gdGVzdCBjb2RlIHNhbXBsZS5cbiAqL1xuZXhwb3J0IGNsYXNzIFB5dGVzdFNhbXBsZSBleHRlbmRzIENvbXBvbmVudCB7XG4gIGNvbnN0cnVjdG9yKHByb2plY3Q6IFByb2plY3QsIG9wdGlvbnM6IFB5dGVzdFNhbXBsZU9wdGlvbnMpIHtcbiAgICBzdXBlcihwcm9qZWN0KTtcblxuICAgIG5ldyBTYW1wbGVEaXIocHJvamVjdCwgb3B0aW9ucy50ZXN0ZGlyLCB7XG4gICAgICBmaWxlczoge1xuICAgICAgICBcIl9faW5pdF9fLnB5XCI6IFwiXCIsXG4gICAgICAgIFwidGVzdF9leGFtcGxlLnB5XCI6IFtcbiAgICAgICAgICBcImltcG9ydCBweXRlc3RcIixcbiAgICAgICAgICBcIlwiLFxuICAgICAgICAgIGBmcm9tICR7b3B0aW9ucy5tb2R1bGVOYW1lfS5leGFtcGxlIGltcG9ydCBoZWxsb2AsXG4gICAgICAgICAgXCJcIixcbiAgICAgICAgICBcIkBweXRlc3QubWFyay5wYXJhbWV0cml6ZShcIixcbiAgICAgICAgICAnICAgIChcIm5hbWVcIiwgXCJleHBlY3RlZFwiKSwnLFxuICAgICAgICAgIFwiICAgIFtcIixcbiAgICAgICAgICAnICAgICAgICAoXCJBLiBNdXNpbmdcIiwgXCJIZWxsbyBBLiBNdXNpbmchXCIpLCcsXG4gICAgICAgICAgJyAgICAgICAgKFwidHJhdmVsZXJcIiwgXCJIZWxsbyB0cmF2ZWxlciFcIiksJyxcbiAgICAgICAgICAnICAgICAgICAoXCJwcm9qZW4gZGV2ZWxvcGVyXCIsIFwiSGVsbG8gcHJvamVuIGRldmVsb3BlciFcIiksJyxcbiAgICAgICAgICBcIiAgICBdLFwiLFxuICAgICAgICAgIFwiKVwiLFxuICAgICAgICAgIFwiZGVmIHRlc3RfaGVsbG8obmFtZSwgZXhwZWN0ZWQpOlwiLFxuICAgICAgICAgICcgICAgXCJcIlwiRXhhbXBsZSB0ZXN0IHdpdGggcGFyYW1ldHJpemF0aW9uLlwiXCJcIicsXG4gICAgICAgICAgXCIgICAgYXNzZXJ0IGhlbGxvKG5hbWUpID09IGV4cGVjdGVkXCIsXG4gICAgICAgICAgXCJcIixcbiAgICAgICAgXS5qb2luKFwiXFxuXCIpLFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxufVxuIl19
@@ -19,5 +19,5 @@ class Pytest extends component_1.Component {
19
19
  }
20
20
  exports.Pytest = Pytest;
21
21
  _a = JSII_RTTI_SYMBOL_1;
22
- Pytest[_a] = { fqn: "projen.python.Pytest", version: "0.76.8" };
22
+ Pytest[_a] = { fqn: "projen.python.Pytest", version: "0.76.10" };
23
23
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHl0ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3B5dGhvbi9weXRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSw0Q0FBeUM7QUFDekMsa0RBQWlEO0FBd0JqRCxNQUFhLE1BQU8sU0FBUSxxQkFBUztJQUduQyxZQUFZLE9BQWdCLEVBQUUsVUFBeUIsRUFBRTtRQUN2RCxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFZixNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsT0FBTyxJQUFJLE9BQU8sQ0FBQztRQUUzQyxJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQyxPQUFPLElBQUksT0FBTyxDQUFDO1FBRTFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLFVBQVUsT0FBTyxFQUFFLEVBQUUsNkJBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUVyRSxPQUFPLENBQUMsUUFBUSxDQUFDLElBQUksQ0FDbkI7WUFDRSxRQUFRO1lBQ1IsR0FBRyxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsYUFBYSxPQUFPLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1NBQ3JFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUNaLENBQUM7SUFDSixDQUFDOztBQWxCSCx3QkFtQkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQgfSBmcm9tIFwiLi4vY29tcG9uZW50XCI7XG5pbXBvcnQgeyBEZXBlbmRlbmN5VHlwZSB9IGZyb20gXCIuLi9kZXBlbmRlbmNpZXNcIjtcbmltcG9ydCB7IFByb2plY3QgfSBmcm9tIFwiLi4vcHJvamVjdFwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFB5dGVzdE9wdGlvbnMge1xuICAvKipcbiAgICogUHl0ZXN0IHZlcnNpb25cbiAgICpcbiAgICogQGRlZmF1bHQgXCI2LjIuMVwiXG4gICAqL1xuICByZWFkb25seSB2ZXJzaW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBEaXJlY3Rvcnkgd2l0aCB0ZXN0c1xuICAgKlxuICAgKiBAZGVmYXVsdCAndGVzdHMnXG4gICAqL1xuICByZWFkb25seSB0ZXN0ZGlyPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBTdG9wIHRoZSB0ZXN0aW5nIHByb2Nlc3MgYWZ0ZXIgdGhlIGZpcnN0IE4gZmFpbHVyZXNcbiAgICovXG4gIHJlYWRvbmx5IG1heEZhaWx1cmVzPzogbnVtYmVyO1xufVxuXG5leHBvcnQgY2xhc3MgUHl0ZXN0IGV4dGVuZHMgQ29tcG9uZW50IHtcbiAgcmVhZG9ubHkgdGVzdGRpcjogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKHByb2plY3Q6IFByb2plY3QsIG9wdGlvbnM6IFB5dGVzdE9wdGlvbnMgPSB7fSkge1xuICAgIHN1cGVyKHByb2plY3QpO1xuXG4gICAgY29uc3QgdmVyc2lvbiA9IG9wdGlvbnMudmVyc2lvbiA/PyBcIjYuMi4xXCI7XG5cbiAgICB0aGlzLnRlc3RkaXIgPSBvcHRpb25zLnRlc3RkaXIgPz8gXCJ0ZXN0c1wiO1xuXG4gICAgcHJvamVjdC5kZXBzLmFkZERlcGVuZGVuY3koYHB5dGVzdEAke3ZlcnNpb259YCwgRGVwZW5kZW5jeVR5cGUuVEVTVCk7XG5cbiAgICBwcm9qZWN0LnRlc3RUYXNrLmV4ZWMoXG4gICAgICBbXG4gICAgICAgIFwicHl0ZXN0XCIsXG4gICAgICAgIC4uLihvcHRpb25zLm1heEZhaWx1cmVzID8gW2AtLW1heGZhaWw9JHtvcHRpb25zLm1heEZhaWx1cmVzfWBdIDogW10pLFxuICAgICAgXS5qb2luKFwiIFwiKVxuICAgICk7XG4gIH1cbn1cbiJdfQ==
@@ -178,5 +178,5 @@ class PythonProject extends github_1.GitHubProject {
178
178
  }
179
179
  exports.PythonProject = PythonProject;
180
180
  _a = JSII_RTTI_SYMBOL_1;
181
- PythonProject[_a] = { fqn: "projen.python.PythonProject", version: "0.76.8" };
181
+ PythonProject[_a] = { fqn: "projen.python.PythonProject", version: "0.76.10" };
182
182
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHl0aG9uLXByb2plY3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcHl0aG9uL3B5dGhvbi1wcm9qZWN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsK0JBQTRCO0FBQzVCLHFDQUFrQztBQUNsQyx5Q0FHb0I7QUFDcEIscUNBQWlEO0FBQ2pELG1EQUErQztBQUkvQyxtREFBK0M7QUFDL0MsNkNBQTBDO0FBQzFDLGlDQUEyQztBQUMzQyxzQ0FBZ0U7QUFDaEUscURBR2dDO0FBQ2hDLHdDQUF5QztBQUN6Qyw4Q0FBOEQ7QUFDOUQsa0NBQXdEO0FBRXhELGlEQUFpRDtBQUNqRCxNQUFNLHlCQUF5QixHQUFHLG9CQUFvQixDQUFDO0FBcUt2RDs7OztHQUlHO0FBQ0gsTUFBYSxhQUFjLFNBQVEsc0JBQWE7SUFnQzlDLFlBQVksT0FBNkI7UUFDdkMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRWYsSUFBSSxDQUFDLHlCQUF5QixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDakQsTUFBTSxJQUFJLEtBQUssQ0FDYix5RkFBeUYsQ0FDMUYsQ0FBQztTQUNIO1FBRUQsSUFBSSxDQUFDLFVBQVUsR0FBRyxPQUFPLENBQUMsVUFBVSxDQUFDO1FBQ3JDLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQztRQUUvQixNQUFNLGlCQUFpQixHQUFHO1lBQ3hCLE9BQU8sQ0FBQyxjQUFjO1lBQ3RCLE9BQU8sQ0FBQyxVQUFVO1lBQ2xCLE9BQU8sQ0FBQyxZQUFZO1lBQ3BCLE9BQU8sQ0FBQyxVQUFVO1NBQ25CLENBQUM7UUFFRixJQUFJLElBQUEsdUJBQWdCLEVBQUMsaUJBQWlCLENBQUMsRUFBRTtZQUN2QyxNQUFNLElBQUksS0FBSyxDQUNiLHVGQUF1RixDQUN4RixDQUFDO1NBQ0g7UUFFRCxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsTUFBTSxJQUFJLEtBQUssQ0FB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RUFBRSxFQUNGLHdCQUF3QixFQUN4QixPQUFPLEVBQ1AsRUFBRSxFQUNGLFFBQVEsRUFDUixjQUFjLEVBQ2QsYUFBYSxFQUNiLFlBQVksRUFDWixFQUFFLEVBQ0YscUJBQXFCLEVBQ3JCLFFBQVEsRUFDUixFQUFFLEVBQ0YsK0JBQStCLEVBQy9CLFVBQVUsRUFDVixFQUFFLEVBQ0Ysd0JBQXdCLEVBQ3hCLGVBQWUsQ0FDaEIsQ0FBQztJQUNKLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksYUFBYSxDQUFDLElBQVk7UUFDL0IsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM5QyxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLGdCQUFnQixDQUFDLElBQVk7UUFDbEMsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2pELENBQUM7SUFFTSxjQUFjO1FBQ25CLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUV2QixJQUFJLENBQUMsVUFBVSxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFDbkMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO0lBQ3pDLENBQUM7O0FBdldILHNDQXdXQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBpcCB9IGZyb20gXCIuL3BpcFwiO1xuaW1wb3J0IHsgUG9ldHJ5IH0gZnJvbSBcIi4vcG9ldHJ5XCI7XG5pbXBvcnQge1xuICBQcm9qZW5yYyBhcyBQcm9qZW5yY1B5dGhvbixcbiAgUHJvamVucmNPcHRpb25zIGFzIFByb2plbnJjUHl0aG9uT3B0aW9ucyxcbn0gZnJvbSBcIi4vcHJvamVucmNcIjtcbmltcG9ydCB7IFB5dGVzdCwgUHl0ZXN0T3B0aW9ucyB9IGZyb20gXCIuL3B5dGVzdFwiO1xuaW1wb3J0IHsgUHl0ZXN0U2FtcGxlIH0gZnJvbSBcIi4vcHl0ZXN0LXNhbXBsZVwiO1xuaW1wb3J0IHsgSVB5dGhvbkRlcHMgfSBmcm9tIFwiLi9weXRob24tZGVwc1wiO1xuaW1wb3J0IHsgSVB5dGhvbkVudiB9IGZyb20gXCIuL3B5dGhvbi1lbnZcIjtcbmltcG9ydCB7IElQeXRob25QYWNrYWdpbmcsIFB5dGhvblBhY2thZ2luZ09wdGlvbnMgfSBmcm9tIFwiLi9weXRob24tcGFja2FnaW5nXCI7XG5pbXBvcnQgeyBQeXRob25TYW1wbGUgfSBmcm9tIFwiLi9weXRob24tc2FtcGxlXCI7XG5pbXBvcnQgeyBTZXR1cHRvb2xzIH0gZnJvbSBcIi4vc2V0dXB0b29sc1wiO1xuaW1wb3J0IHsgVmVudiwgVmVudk9wdGlvbnMgfSBmcm9tIFwiLi92ZW52XCI7XG5pbXBvcnQgeyBHaXRIdWJQcm9qZWN0LCBHaXRIdWJQcm9qZWN0T3B0aW9ucyB9IGZyb20gXCIuLi9naXRodWJcIjtcbmltcG9ydCB7XG4gIFByb2plbnJjIGFzIFByb2plbnJjSnMsXG4gIFByb2plbnJjT3B0aW9ucyBhcyBQcm9qZW5yY0pzT3B0aW9ucyxcbn0gZnJvbSBcIi4uL2phdmFzY3JpcHQvcHJvamVucmNcIjtcbmltcG9ydCB7IFByb2plY3RUeXBlIH0gZnJvbSBcIi4uL3Byb2plY3RcIjtcbmltcG9ydCB7IFByb2plbnJjVHMsIFByb2plbnJjVHNPcHRpb25zIH0gZnJvbSBcIi4uL3R5cGVzY3JpcHRcIjtcbmltcG9ydCB7IGFueVNlbGVjdGVkLCBtdWx0aXBsZVNlbGVjdGVkIH0gZnJvbSBcIi4uL3V0aWxcIjtcblxuLyoqIEFsbG93ZWQgY2hhcmFjdGVycyBpbiBweXRob24gcHJvamVjdCBuYW1lcyAqL1xuY29uc3QgUFlUSE9OX1BST0pFQ1RfTkFNRV9SRUdFWCA9IC9eW0EtWmEtejAtOS1fXFwuXSskLztcblxuLyoqXG4gKiBPcHRpb25zIGZvciBgUHl0aG9uUHJvamVjdGAuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUHl0aG9uUHJvamVjdE9wdGlvbnNcbiAgZXh0ZW5kcyBHaXRIdWJQcm9qZWN0T3B0aW9ucyxcbiAgICBQeXRob25QYWNrYWdpbmdPcHRpb25zIHtcbiAgLy8gLS0gcmVxdWlyZWQgb3B0aW9ucyAtLVxuXG4gIC8qKlxuICAgKiBOYW1lIG9mIHRoZSBweXRob24gcGFja2FnZSBhcyB1c2VkIGluIGltcG9ydHMgYW5kIGZpbGVuYW1lcy5cbiAgICpcbiAgICogTXVzdCBvbmx5IGNvbnNpc3Qgb2YgYWxwaGFudW1lcmljIGNoYXJhY3RlcnMgYW5kIHVuZGVyc2NvcmVzLlxuICAgKlxuICAgKiBAZGVmYXVsdCAkUFlUSE9OX01PRFVMRV9OQU1FXG4gICAqL1xuICByZWFkb25seSBtb2R1bGVOYW1lOiBzdHJpbmc7XG5cbiAgLy8gLS0gZGVwZW5kZW5jaWVzIC0tXG5cbiAgLyoqXG4gICAqIExpc3Qgb2YgcnVudGltZSBkZXBlbmRlbmNpZXMgZm9yIHRoaXMgcHJvamVjdC5cbiAgICpcbiAgICogRGVwZW5kZW5jaWVzIHVzZSB0aGUgZm9ybWF0OiBgPG1vZHVsZT5APHNlbXZlcj5gXG4gICAqXG4gICAqIEFkZGl0aW9uYWwgZGVwZW5kZW5jaWVzIGNhbiBiZSBhZGRlZCB2aWEgYHByb2plY3QuYWRkRGVwZW5kZW5jeSgpYC5cbiAgICpcbiAgICogQGRlZmF1bHQgW11cbiAgICogQGZlYXR1cmVkXG4gICAqL1xuICByZWFkb25seSBkZXBzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIExpc3Qgb2YgZGV2IGRlcGVuZGVuY2llcyBmb3IgdGhpcyBwcm9qZWN0LlxuICAgKlxuICAgKiBEZXBlbmRlbmNpZXMgdXNlIHRoZSBmb3JtYXQ6IGA8bW9kdWxlPkA8c2VtdmVyPmBcbiAgICpcbiAgICogQWRkaXRpb25hbCBkZXBlbmRlbmNpZXMgY2FuIGJlIGFkZGVkIHZpYSBgcHJvamVjdC5hZGREZXZEZXBlbmRlbmN5KClgLlxuICAgKlxuICAgKiBAZGVmYXVsdCBbXVxuICAgKiBAZmVhdHVyZWRcbiAgICovXG4gIHJlYWRvbmx5IGRldkRlcHM/OiBzdHJpbmdbXTtcblxuICAvLyAtLSBjb3JlIGNvbXBvbmVudHMgLS1cblxuICAvKipcbiAgICogVXNlIHBpcCB3aXRoIGEgcmVxdWlyZW1lbnRzLnR4dCBmaWxlIHRvIHRyYWNrIHByb2plY3QgZGVwZW5kZW5jaWVzLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIHRydWUsIHVubGVzcyBwb2V0cnkgaXMgdHJ1ZSwgdGhlbiBmYWxzZVxuICAgKiBAZmVhdHVyZWRcbiAgICovXG4gIHJlYWRvbmx5IHBpcD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFVzZSB2ZW52IHRvIG1hbmFnZSBhIHZpcnR1YWwgZW52aXJvbm1lbnQgZm9yIGluc3RhbGxpbmcgZGVwZW5kZW5jaWVzIGluc2lkZS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSB0cnVlLCB1bmxlc3MgcG9ldHJ5IGlzIHRydWUsIHRoZW4gZmFsc2VcbiAgICogQGZlYXR1cmVkXG4gICAqL1xuICByZWFkb25seSB2ZW52PzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVmVudiBvcHRpb25zXG4gICAqIEBkZWZhdWx0IC0gZGVmYXVsdHNcbiAgICovXG4gIHJlYWRvbmx5IHZlbnZPcHRpb25zPzogVmVudk9wdGlvbnM7XG5cbiAgLyoqXG4gICAqIFVzZSBzZXR1cHRvb2xzIHdpdGggYSBzZXR1cC5weSBzY3JpcHQgZm9yIHBhY2thZ2luZyBhbmQgcHVibGlzaGluZy5cbiAgICpcbiAgICogQGRlZmF1bHQgLSB0cnVlLCB1bmxlc3MgcG9ldHJ5IGlzIHRydWUsIHRoZW4gZmFsc2VcbiAgICogQGZlYXR1cmVkXG4gICAqL1xuICByZWFkb25seSBzZXR1cHRvb2xzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVXNlIHBvZXRyeSB0byBtYW5hZ2UgeW91ciBwcm9qZWN0IGRlcGVuZGVuY2llcywgdmlydHVhbCBlbnZpcm9ubWVudCwgYW5kXG4gICAqIChvcHRpb25hbCkgcGFja2FnaW5nL3B1Ymxpc2hpbmcuXG4gICAqXG4gICAqIFRoaXMgZmVhdHVyZSBpcyBpbmNvbXBhdGlibGUgd2l0aCBwaXAsIHNldHVwdG9vbHMsIG9yIHZlbnYuXG4gICAqIElmIHlvdSBzZXQgdGhpcyBvcHRpb24gdG8gYHRydWVgLCB0aGVuIHBpcCwgc2V0dXB0b29scywgYW5kIHZlbnYgbXVzdCBiZSBzZXQgdG8gYGZhbHNlYC5cbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICogQGZlYXR1cmVkXG4gICAqL1xuICByZWFkb25seSBwb2V0cnk/OiBib29sZWFuO1xuXG4gIC8vIC0tIG9wdGlvbmFsIGNvbXBvbmVudHMgLS1cblxuICAvKipcbiAgICogUGF0aCB0byB0aGUgcHl0aG9uIGV4ZWN1dGFibGUgdG8gdXNlLlxuICAgKiBAZGVmYXVsdCBcInB5dGhvblwiXG4gICAqL1xuICByZWFkb25seSBweXRob25FeGVjPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBJbmNsdWRlIHB5dGVzdCB0ZXN0cy5cbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKiBAZmVhdHVyZWRcbiAgICovXG4gIHJlYWRvbmx5IHB5dGVzdD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIHB5dGVzdCBvcHRpb25zXG4gICAqIEBkZWZhdWx0IC0gZGVmYXVsdHNcbiAgICovXG4gIHJlYWRvbmx5IHB5dGVzdE9wdGlvbnM/OiBQeXRlc3RPcHRpb25zO1xuXG4gIC8qKlxuICAgKiBJbmNsdWRlIHNhbXBsZSBjb2RlIGFuZCB0ZXN0IGlmIHRoZSByZWxldmFudCBkaXJlY3RvcmllcyBkb24ndCBleGlzdC5cbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgc2FtcGxlPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVXNlIHByb2plbnJjIGluIFB5dGhvbi5cbiAgICpcbiAgICogVGhpcyB3aWxsIGluc3RhbGwgYHByb2plbmAgYXMgYSBQeXRob24gZGVwZW5kZW5jeSBhbmQgYWRkIGEgYHN5bnRoYFxuICAgKiB0YXNrIHdoaWNoIHdpbGwgcnVuIGAucHJvamVucmMucHlgLlxuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICByZWFkb25seSBwcm9qZW5yY1B5dGhvbj86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIE9wdGlvbnMgcmVsYXRlZCB0byBwcm9qZW5yYyBpbiBweXRob24uXG4gICAqIEBkZWZhdWx0IC0gZGVmYXVsdCBvcHRpb25zXG4gICAqL1xuICByZWFkb25seSBwcm9qZW5yY1B5dGhvbk9wdGlvbnM/OiBQcm9qZW5yY1B5dGhvbk9wdGlvbnM7XG5cbiAgLyoqXG4gICAqIFVzZSBwcm9qZW5yYyBpbiBqYXZhc2NyaXB0LlxuICAgKlxuICAgKiBUaGlzIHdpbGwgaW5zdGFsbCBgcHJvamVuYCBhcyBhIEphdmFTY3JpcHQgZGVwZW5kZW5jeSBhbmQgYWRkIGEgYHN5bnRoYFxuICAgKiB0YXNrIHdoaWNoIHdpbGwgcnVuIGAucHJvamVucmMuanNgLlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgcHJvamVucmNKcz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIE9wdGlvbnMgcmVsYXRlZCB0byBwcm9qZW5yYyBpbiBKYXZhU2NyaXB0LlxuICAgKiBAZGVmYXVsdCAtIGRlZmF1bHQgb3B0aW9uc1xuICAgKi9cbiAgcmVhZG9ubHkgcHJvamVucmNKc09wdGlvbnM/OiBQcm9qZW5yY0pzT3B0aW9ucztcblxuICAvKipcbiAgICogVXNlIHByb2plbnJjIGluIFR5cGVTY3JpcHQuXG4gICAqXG4gICAqIFRoaXMgd2lsbCBjcmVhdGUgYSB0c2NvbmZpZyBmaWxlIChkZWZhdWx0OiBgdHNjb25maWcucHJvamVuLmpzb25gKVxuICAgKiBhbmQgdXNlIGB0cy1ub2RlYCBpbiB0aGUgZGVmYXVsdCB0YXNrIHRvIHBhcnNlIHRoZSBwcm9qZWN0IHNvdXJjZSBmaWxlcy5cbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IHByb2plbnJjVHM/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBPcHRpb25zIHJlbGF0ZWQgdG8gcHJvamVucmMgaW4gVHlwZVNjcmlwdC5cbiAgICogQGRlZmF1bHQgLSBkZWZhdWx0IG9wdGlvbnNcbiAgICovXG4gIHJlYWRvbmx5IHByb2plbnJjVHNPcHRpb25zPzogUHJvamVucmNUc09wdGlvbnM7XG59XG5cbi8qKlxuICogUHl0aG9uIHByb2plY3QuXG4gKlxuICogQHBqaWQgcHl0aG9uXG4gKi9cbmV4cG9ydCBjbGFzcyBQeXRob25Qcm9qZWN0IGV4dGVuZHMgR2l0SHViUHJvamVjdCB7XG4gIC8qKlxuICAgKiBQeXRob24gbW9kdWxlIG5hbWUgKHRoZSBwcm9qZWN0IG5hbWUsIHdpdGggYW55IGh5cGhlbnMgb3IgcGVyaW9kcyByZXBsYWNlZFxuICAgKiB3aXRoIHVuZGVyc2NvcmVzKS5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBtb2R1bGVOYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFZlcnNpb24gb2YgdGhlIHBhY2thZ2UgZm9yIGRpc3RyaWJ1dGlvbiAoc2hvdWxkIGZvbGxvdyBzZW12ZXIpLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHZlcnNpb246IHN0cmluZztcblxuICAvKipcbiAgICogQVBJIGZvciBtYW5hZ2luZyBkZXBlbmRlbmNpZXMuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZGVwc01hbmFnZXIhOiBJUHl0aG9uRGVwcztcblxuICAvKipcbiAgICogQVBJIGZvciBtYW5nYWdpbmcgdGhlIFB5dGhvbiBydW50aW1lIGVudmlyb25tZW50LlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGVudk1hbmFnZXIhOiBJUHl0aG9uRW52O1xuXG4gIC8qKlxuICAgKiBBUEkgZm9yIG1hbmFnaW5nIHBhY2thZ2luZyB0aGUgcHJvamVjdCBhcyBhIGxpYnJhcnkuIE9ubHkgYXBwbGllcyB3aGVuIHRoZSBgcHJvamVjdFR5cGVgIGlzIExJQi5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBwYWNrYWdpbmdNYW5hZ2VyPzogSVB5dGhvblBhY2thZ2luZztcblxuICAvKipcbiAgICogUHl0ZXN0IGNvbXBvbmVudC5cbiAgICovXG4gIHB1YmxpYyBweXRlc3Q/OiBQeXRlc3Q7XG5cbiAgY29uc3RydWN0b3Iob3B0aW9uczogUHl0aG9uUHJvamVjdE9wdGlvbnMpIHtcbiAgICBzdXBlcihvcHRpb25zKTtcblxuICAgIGlmICghUFlUSE9OX1BST0pFQ1RfTkFNRV9SRUdFWC50ZXN0KG9wdGlvbnMubmFtZSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJQeXRob24gcHJvamVjdHMgbXVzdCBvbmx5IGNvbnNpc3Qgb2YgYWxwaGFudW1lcmljIGNoYXJhY3RlcnMsIGh5cGhlbnMsIGFuZCB1bmRlcnNjb3Jlcy5cIlxuICAgICAgKTtcbiAgICB9XG5cbiAgICB0aGlzLm1vZHVsZU5hbWUgPSBvcHRpb25zLm1vZHVsZU5hbWU7XG4gICAgdGhpcy52ZXJzaW9uID0gb3B0aW9ucy52ZXJzaW9uO1xuXG4gICAgY29uc3QgcmNGaWxlVHlwZU9wdGlvbnMgPSBbXG4gICAgICBvcHRpb25zLnByb2plbnJjUHl0aG9uLFxuICAgICAgb3B0aW9ucy5wcm9qZW5yY0pzLFxuICAgICAgb3B0aW9ucy5wcm9qZW5yY0pzb24sXG4gICAgICBvcHRpb25zLnByb2plbnJjVHMsXG4gICAgXTtcblxuICAgIGlmIChtdWx0aXBsZVNlbGVjdGVkKHJjRmlsZVR5cGVPcHRpb25zKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBcIk9ubHkgb25lIG9mIHByb2plbnJjUHl0aG9uLCBwcm9qZW5yY0pzLCBwcm9qZW5yY1RzLCBhbmQgcHJvamVucmNKc29uIGNhbiBiZSBzZWxlY3RlZC5cIlxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCBwb2V0cnkgPSBvcHRpb25zLnBvZXRyeSA/PyBmYWxzZTtcbiAgICBjb25zdCBwaXAgPSBvcHRpb25zLnBpcCA/PyAhcG9ldHJ5O1xuICAgIGNvbnN0IHZlbnYgPSBvcHRpb25zLnZlbnYgPz8gIXBvZXRyeTtcbiAgICBjb25zdCBzZXR1cHRvb2xzID1cbiAgICAgIG9wdGlvbnMuc2V0dXB0b29scyA/PyAoIXBvZXRyeSAmJiB0aGlzLnByb2plY3RUeXBlID09PSBQcm9qZWN0VHlwZS5MSUIpO1xuXG4gICAgaWYgKHBvZXRyeSAmJiAocGlwIHx8IHZlbnYgfHwgc2V0dXB0b29scykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJwb2V0cnkgaXMgdHJ1ZSAtIHBpcCwgdmVudiwgYW5kIHNldHVwdG9vbHMgbXVzdCBiZSB1bmRlZmluZWQgb3IgZmFsc2VcIlxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMucGFyZW50KSB7XG4gICAgICAvLyBkZWZhdWx0IHRvIHByb2plbnJjLnB5IGlmIG5vIG90aGVyIHByb2plbnJjIHR5cGUgd2FzIGVsZWN0ZWRcbiAgICAgIGlmIChvcHRpb25zLnByb2plbnJjUHl0aG9uID8/ICFhbnlTZWxlY3RlZChyY0ZpbGVUeXBlT3B0aW9ucykpIHtcbiAgICAgICAgbmV3IFByb2plbnJjUHl0aG9uKHRoaXMsIHtcbiAgICAgICAgICBweXRob25FeGVjOiBvcHRpb25zLnB5dGhvbkV4ZWMsXG4gICAgICAgICAgLi4ub3B0aW9ucy5wcm9qZW5yY1B5dGhvbk9wdGlvbnMsXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBpZiAob3B0aW9ucy5wcm9qZW5yY0pzID8/IGZhbHNlKSB7XG4gICAgICAgIG5ldyBQcm9qZW5yY0pzKHRoaXMsIG9wdGlvbnMucHJvamVucmNKc09wdGlvbnMpO1xuICAgICAgfVxuXG4gICAgICBpZiAob3B0aW9ucy5wcm9qZW5yY1RzID8/IGZhbHNlKSB7XG4gICAgICAgIG5ldyBQcm9qZW5yY1RzKHRoaXMsIG9wdGlvbnMucHJvamVucmNUc09wdGlvbnMpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh2ZW52KSB7XG4gICAgICB0aGlzLmVudk1hbmFnZXIgPSBuZXcgVmVudih0aGlzLCB7XG4gICAgICAgIHB5dGhvbkV4ZWM6IG9wdGlvbnMucHl0aG9uRXhlYyxcbiAgICAgICAgLi4ub3B0aW9ucy52ZW52T3B0aW9ucyxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmIChwaXApIHtcbiAgICAgIHRoaXMuZGVwc01hbmFnZXIgPSBuZXcgUGlwKHRoaXMpO1xuICAgIH1cblxuICAgIGlmIChzZXR1cHRvb2xzKSB7XG4gICAgICB0aGlzLnBhY2thZ2luZ01hbmFnZXIgPSBuZXcgU2V0dXB0b29scyh0aGlzLCB7XG4gICAgICAgIHZlcnNpb246IG9wdGlvbnMudmVyc2lvbixcbiAgICAgICAgZGVzY3JpcHRpb246IG9wdGlvbnMuZGVzY3JpcHRpb24sXG4gICAgICAgIGF1dGhvck5hbWU6IG9wdGlvbnMuYXV0aG9yTmFtZSxcbiAgICAgICAgYXV0aG9yRW1haWw6IG9wdGlvbnMuYXV0aG9yRW1haWwsXG4gICAgICAgIGxpY2Vuc2U6IG9wdGlvbnMubGljZW5zZSxcbiAgICAgICAgaG9tZXBhZ2U6IG9wdGlvbnMuaG9tZXBhZ2UsXG4gICAgICAgIGNsYXNzaWZpZXJzOiBvcHRpb25zLmNsYXNzaWZpZXJzLFxuICAgICAgICBzZXR1cENvbmZpZzogb3B0aW9ucy5zZXR1cENvbmZpZyxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIGlmIChvcHRpb25zLmNvbmRhID8/IGZhbHNlKSB7XG4gICAgLy8gICB0aGlzLmRlcHNNYW5hZ2VyID0gbmV3IENvbmRhKHRoaXMsIG9wdGlvbnMpO1xuICAgIC8vICAgdGhpcy5lbnZNYW5hZ2VyID0gdGhpcy5kZXBzTWFuYWdlcjtcbiAgICAvLyB9XG5cbiAgICAvLyBpZiAob3B0aW9ucy5waXBlbnYgPz8gZmFsc2UpIHtcbiAgICAvLyAgIHRoaXMuZGVwc01hbmFnZXIgPSBuZXcgUGlwZW52KHRoaXMsIG9wdGlvbnMpO1xuICAgIC8vICAgdGhpcy5lbnZNYW5hZ2VyID0gdGhpcy5kZXBzTWFuYWdlcjtcbiAgICAvLyB9XG5cbiAgICBpZiAocG9ldHJ5KSB7XG4gICAgICBjb25zdCBwb2V0cnlQcm9qZWN0ID0gbmV3IFBvZXRyeSh0aGlzLCB7XG4gICAgICAgIHZlcnNpb246IG9wdGlvbnMudmVyc2lvbixcbiAgICAgICAgZGVzY3JpcHRpb246IG9wdGlvbnMuZGVzY3JpcHRpb24sXG4gICAgICAgIGF1dGhvck5hbWU6IG9wdGlvbnMuYXV0aG9yTmFtZSxcbiAgICAgICAgYXV0aG9yRW1haWw6IG9wdGlvbnMuYXV0aG9yRW1haWwsXG4gICAgICAgIGxpY2Vuc2U6IG9wdGlvbnMubGljZW5zZSxcbiAgICAgICAgaG9tZXBhZ2U6IG9wdGlvbnMuaG9tZXBhZ2UsXG4gICAgICAgIGNsYXNzaWZpZXJzOiBvcHRpb25zLmNsYXNzaWZpZXJzLFxuICAgICAgICBwb2V0cnlPcHRpb25zOiB7XG4gICAgICAgICAgcmVhZG1lOiBvcHRpb25zLnJlYWRtZT8uZmlsZW5hbWUgPz8gXCJSRUFETUUubWRcIixcbiAgICAgICAgICAuLi5vcHRpb25zLnBvZXRyeU9wdGlvbnMsXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICAgIHRoaXMuZGVwc01hbmFnZXIgPSBwb2V0cnlQcm9qZWN0O1xuICAgICAgdGhpcy5lbnZNYW5hZ2VyID0gcG9ldHJ5UHJvamVjdDtcbiAgICAgIHRoaXMucGFja2FnaW5nTWFuYWdlciA9IHBvZXRyeVByb2plY3Q7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLmVudk1hbmFnZXIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJBdCBsZWFzdCBvbmUgdG9vbCBtdXN0IGJlIGNob3NlbiBmb3IgbWFuYWdpbmcgdGhlIGVudmlyb25tZW50ICh2ZW52LCBjb25kYSwgcGlwZW52LCBvciBwb2V0cnkpLlwiXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5kZXBzTWFuYWdlcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBcIkF0IGxlYXN0IG9uZSB0b29sIG11c3QgYmUgY2hvc2VuIGZvciBtYW5hZ2luZyBkZXBlbmRlbmNpZXMgKHBpcCwgY29uZGEsIHBpcGVudiwgb3IgcG9ldHJ5KS5cIlxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMucGFja2FnaW5nTWFuYWdlciAmJiB0aGlzLnByb2plY3RUeXBlID09PSBQcm9qZWN0VHlwZS5MSUIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJBdCBsZWFzdCBvbmUgdG9vbCBtdXN0IGJlIGNob3NlbiBmb3IgbWFuYWdpbmcgcGFja2FnaW5nIChzZXR1cHRvb2xzIG9yIHBvZXRyeSkuXCJcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKE51bWJlcih2ZW52KSArIE51bWJlcihwb2V0cnkpID4gMSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBcIk1vcmUgdGhhbiBvbmUgY29tcG9uZW50IGhhcyBiZWVuIGNob3NlbiBmb3IgbWFuYWdpbmcgdGhlIGVudmlyb25tZW50ICh2ZW52LCBjb25kYSwgcGlwZW52LCBvciBwb2V0cnkpXCJcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKE51bWJlcihwaXApICsgTnVtYmVyKHBvZXRyeSkgPiAxKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIFwiTW9yZSB0aGFuIG9uZSBjb21wb25lbnQgaGFzIGJlZW4gY2hvc2VuIGZvciBtYW5hZ2luZyBkZXBlbmRlbmNpZXMgKHBpcCwgY29uZGEsIHBpcGVudiwgb3IgcG9ldHJ5KVwiXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChOdW1iZXIoc2V0dXB0b29scykgKyBOdW1iZXIocG9ldHJ5KSA+IDEpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJNb3JlIHRoYW4gb25lIGNvbXBvbmVudCBoYXMgYmVlbiBjaG9zZW4gZm9yIG1hbmFnaW5nIHBhY2thZ2luZyAoc2V0dXB0b29scyBvciBwb2V0cnkpXCJcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMucHl0ZXN0ID8/IHRydWUpIHtcbiAgICAgIHRoaXMucHl0ZXN0ID0gbmV3IFB5dGVzdCh0aGlzLCBvcHRpb25zLnB5dGVzdE9wdGlvbnMpO1xuICAgICAgbmV3IFB5dGVzdFNhbXBsZSh0aGlzLCB7XG4gICAgICAgIG1vZHVsZU5hbWU6IHRoaXMubW9kdWxlTmFtZSxcbiAgICAgICAgdGVzdGRpcjogdGhpcy5weXRlc3QudGVzdGRpcixcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmIChvcHRpb25zLnNhbXBsZSA/PyB0cnVlKSB7XG4gICAgICBuZXcgUHl0aG9uU2FtcGxlKHRoaXMsIHtcbiAgICAgICAgZGlyOiB0aGlzLm1vZHVsZU5hbWUsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGRlcCBvZiBvcHRpb25zLmRlcHMgPz8gW10pIHtcbiAgICAgIHRoaXMuYWRkRGVwZW5kZW5jeShkZXApO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgZGVwIG9mIG9wdGlvbnMuZGV2RGVwcyA/PyBbXSkge1xuICAgICAgdGhpcy5hZGREZXZEZXBlbmRlbmN5KGRlcCk7XG4gICAgfVxuXG4gICAgdGhpcy5hZGREZWZhdWx0R2l0SWdub3JlKCk7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBkZWZhdWx0IGdpdGlnbm9yZSBvcHRpb25zIGZvciBhIFB5dGhvbiBwcm9qZWN0IGJhc2VkIG9uXG4gICAqIGh0dHBzOi8vZ2l0aHViLmNvbS9naXRodWIvZ2l0aWdub3JlL2Jsb2IvbWFzdGVyL1B5dGhvbi5naXRpZ25vcmVcbiAgICovXG4gIHByaXZhdGUgYWRkRGVmYXVsdEdpdElnbm9yZSgpIHtcbiAgICB0aGlzLmdpdGlnbm9yZS5leGNsdWRlKFxuICAgICAgXCIjIEJ5dGUtY29tcGlsZWQgLyBvcHRpbWl6ZWQgLyBETEwgZmlsZXNcIixcbiAgICAgIFwiX19weWNhY2hlX18vXCIsXG4gICAgICBcIioucHlbY29kXVwiLFxuICAgICAgXCIqJHB5LmNsYXNzXCIsXG4gICAgICBcIlwiLFxuICAgICAgXCIjIEMgZXh0ZW5zaW9uc1wiLFxuICAgICAgXCIqLnNvXCIsXG4gICAgICBcIlwiLFxuICAgICAgXCIjIERpc3RyaWJ1dGlvbiAvIHBhY2thZ2luZ1wiLFxuICAgICAgXCIuUHl0aG9uXCIsXG4gICAgICBcImJ1aWxkL1wiLFxuICAgICAgXCJkZXZlbG9wLWVnZ3MvXCIsXG4gICAgICBcImRpc3QvXCIsXG4gICAgICBcImRvd25sb2Fkcy9cIixcbiAgICAgIFwiZWdncy9cIixcbiAgICAgIFwiLmVnZ3MvXCIsXG4gICAgICBcImxpYi9cIixcbiAgICAgIFwibGliNjQvXCIsXG4gICAgICBcInBhcnRzL1wiLFxuICAgICAgXCJzZGlzdC9cIixcbiAgICAgIFwidmFyL1wiLFxuICAgICAgXCJ3aGVlbHMvXCIsXG4gICAgICBcInNoYXJlL3B5dGhvbi13aGVlbHMvXCIsXG4gICAgICBcIiouZWdnLWluZm8vXCIsXG4gICAgICBcIi5pbnN0YWxsZWQuY2ZnXCIsXG4gICAgICBcIiouZWdnXCIsXG4gICAgICBcIk1BTklGRVNUXCIsXG4gICAgICBcIlwiLFxuICAgICAgXCIjIFB5SW5zdGFsbGVyXCIsXG4gICAgICBcIiMgIFVzdWFsbHkgdGhlc2UgZmlsZXMgYXJlIHdyaXR0ZW4gYnkgYSBweXRob24gc2NyaXB0IGZyb20gYSB0ZW1wbGF0ZVwiLFxuICAgICAgXCIjICBiZWZvcmUgUHlJbnN0YWxsZXIgYnVpbGRzIHRoZSBleGUsIHNvIGFzIHRvIGluamVjdCBkYXRlL290aGVyIGluZm9zIGludG8gaXQuXCIsXG4gICAgICBcIioubWFuaWZlc3RcIixcbiAgICAgIFwiKi5zcGVjXCIsXG4gICAgICBcIlwiLFxuICAgICAgXCIjIEluc3RhbGxlciBsb2dzXCIsXG4gICAgICBcInBpcC1sb2cudHh0XCIsXG4gICAgICBcInBpcC1kZWxldGUtdGhpcy1kaXJlY3RvcnkudHh0XCIsXG4gICAgICBcIlwiLFxuICAgICAgXCIjIFVuaXQgdGVzdCAvIGNvdmVyYWdlIHJlcG9ydHNcIixcbiAgICAgIFwiaHRtbGNvdi9cIixcbiAgICAgIFwiLnRveC9cIixcbiAgICAgIFwiLm5veC9cIixcbiAgICAgIFwiLmNvdmVyYWdlXCIsXG4gICAgICBcIi5jb3ZlcmFnZS4qXCIsXG4gICAgICBcIi5jYWNoZVwiLFxuICAgICAgXCJub3NldGVzdHMueG1sXCIsXG4gICAgICBcImNvdmVyYWdlLnhtbFwiLFxuICAgICAgXCIqLmNvdmVyXCIsXG4gICAgICBcIioucHksY292ZXJcIixcbiAgICAgIFwiLmh5cG90aGVzaXMvXCIsXG4gICAgICBcIi5weXRlc3RfY2FjaGUvXCIsXG4gICAgICBcImNvdmVyL1wiLFxuICAgICAgXCJcIixcbiAgICAgIFwiIyBUcmFuc2xhdGlvbnNcIixcbiAgICAgIFwiKi5tb1wiLFxuICAgICAgXCIqLnBvdFwiLFxuICAgICAgXCJcIixcbiAgICAgIFwiIyBEamFuZ28gc3R1ZmY6XCIsXG4gICAgICBcIioubG9nXCIsXG4gICAgICBcImxvY2FsX3NldHRpbmdzLnB5XCIsXG4gICAgICBcImRiLnNxbGl0ZTNcIixcbiAgICAgIFwiZGIuc3FsaXRlMy1qb3VybmFsXCIsXG4gICAgICBcIlwiLFxuICAgICAgXCIjIEZsYXNrIHN0dWZmOlwiLFxuICAgICAgXCJpbnN0YW5jZS9cIixcbiAgICAgIFwiLndlYmFzc2V0cy1jYWNoZVwiLFxuICAgICAgXCJcIixcbiAgICAgIFwiIyBTY3JhcHkgc3R1ZmY6XCIsXG4gICAgICBcIi5zY3JhcHlcIixcbiAgICAgIFwiXCIsXG4gICAgICBcIiMgU3BoaW54IGRvY3VtZW50YXRpb25cIixcbiAgICAgIFwiZG9jcy9fYnVpbGQvXCIsXG4gICAgICBcIlwiLFxuICAgICAgXCIjIFB5QnVpbGRlclwiLFxuICAgICAgXCIucHlidWlsZGVyL1wiLFxuICAgICAgXCJ0YXJnZXQvXCIsXG4gICAgICBcIlwiLFxuICAgICAgXCIjIEp1cHl0ZXIgTm90ZWJvb2tcIixcbiAgICAgIFwiLmlweW5iX2NoZWNrcG9pbnRzXCIsXG4gICAgICBcIlwiLFxuICAgICAgXCIjIElQeXRob25cIixcbiAgICAgIFwicHJvZmlsZV9kZWZhdWx0L1wiLFxuICAgICAgXCJpcHl0aG9uX2NvbmZpZy5weVwiLFxuICAgICAgXCJcIixcbiAgICAgIFwiIyBQRVAgNTgyOyB1c2VkIGJ5IGUuZy4gZ2l0aHViLmNvbS9EYXZpZC1PQ29ubm9yL3B5Zmxvd1wiLFxuICAgICAgXCJfX3B5cGFja2FnZXNfXy9cIixcbiAgICAgIFwiXCIsXG4gICAgICBcIiMgQ2VsZXJ5IHN0dWZmXCIsXG4gICAgICBcImNlbGVyeWJlYXQtc2NoZWR1bGVcIixcbiAgICAgIFwiY2VsZXJ5YmVhdC5waWRcIixcbiAgICAgIFwiXCIsXG4gICAgICBcIiMgU2FnZU1hdGggcGFyc2VkIGZpbGVzXCIsXG4gICAgICBcIiouc2FnZS5weVwiLFxuICAgICAgXCJcIixcbiAgICAgIFwiIyBFbnZpcm9ubWVudHNcIixcbiAgICAgIFwiLmVudlwiLFxuICAgICAgXCIudmVudlwiLFxuICAgICAgXCJlbnYvXCIsXG4gICAgICBcInZlbnYvXCIsXG4gICAgICBcIkVOVi9cIixcbiAgICAgIFwiZW52LmJhay9cIixcbiAgICAgIFwidmVudi5iYWsvXCIsXG4gICAgICBcIlwiLFxuICAgICAgXCIjIFNweWRlciBwcm9qZWN0IHNldHRpbmdzXCIsXG4gICAgICBcIi5zcHlkZXJwcm9qZWN0XCIsXG4gICAgICBcIi5zcHlwcm9qZWN0XCIsXG4gICAgICBcIlwiLFxuICAgICAgXCIjIFJvcGUgcHJvamVjdCBzZXR0aW5nc1wiLFxuICAgICAgXCIucm9wZXByb2plY3RcIixcbiAgICAgIFwiXCIsXG4gICAgICBcIiMgbWtkb2NzIGRvY3VtZW50YXRpb25cIixcbiAgICAgIFwiL3NpdGVcIixcbiAgICAgIFwiXCIsXG4gICAgICBcIiMgbXlweVwiLFxuICAgICAgXCIubXlweV9jYWNoZS9cIixcbiAgICAgIFwiLmRteXB5Lmpzb25cIixcbiAgICAgIFwiZG15cHkuanNvblwiLFxuICAgICAgXCJcIixcbiAgICAgIFwiIyBQeXJlIHR5cGUgY2hlY2tlclwiLFxuICAgICAgXCIucHlyZS9cIixcbiAgICAgIFwiXCIsXG4gICAgICBcIiMgcHl0eXBlIHN0YXRpYyB0eXBlIGFuYWx5emVyXCIsXG4gICAgICBcIi5weXR5cGUvXCIsXG4gICAgICBcIlwiLFxuICAgICAgXCIjIEN5dGhvbiBkZWJ1ZyBzeW1ib2xzXCIsXG4gICAgICBcImN5dGhvbl9kZWJ1Zy9cIlxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhIHJ1bnRpbWUgZGVwZW5kZW5jeS5cbiAgICpcbiAgICogQHBhcmFtIHNwZWMgRm9ybWF0IGA8bW9kdWxlPkA8c2VtdmVyPmBcbiAgICovXG4gIHB1YmxpYyBhZGREZXBlbmRlbmN5KHNwZWM6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmRlcHNNYW5hZ2VyLmFkZERlcGVuZGVuY3koc3BlYyk7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhIGRldiBkZXBlbmRlbmN5LlxuICAgKlxuICAgKiBAcGFyYW0gc3BlYyBGb3JtYXQgYDxtb2R1bGU+QDxzZW12ZXI+YFxuICAgKi9cbiAgcHVibGljIGFkZERldkRlcGVuZGVuY3koc3BlYzogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuZGVwc01hbmFnZXIuYWRkRGV2RGVwZW5kZW5jeShzcGVjKTtcbiAgfVxuXG4gIHB1YmxpYyBwb3N0U3ludGhlc2l6ZSgpIHtcbiAgICBzdXBlci5wb3N0U3ludGhlc2l6ZSgpO1xuXG4gICAgdGhpcy5lbnZNYW5hZ2VyLnNldHVwRW52aXJvbm1lbnQoKTtcbiAgICB0aGlzLmRlcHNNYW5hZ2VyLmluc3RhbGxEZXBlbmRlbmNpZXMoKTtcbiAgfVxufVxuIl19
@@ -39,5 +39,5 @@ class PythonSample extends component_1.Component {
39
39
  }
40
40
  exports.PythonSample = PythonSample;
41
41
  _a = JSII_RTTI_SYMBOL_1;
42
- PythonSample[_a] = { fqn: "projen.python.PythonSample", version: "0.76.8" };
42
+ PythonSample[_a] = { fqn: "projen.python.PythonSample", version: "0.76.10" };
43
43
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHl0aG9uLXNhbXBsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9weXRob24vcHl0aG9uLXNhbXBsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLDRDQUF5QztBQUV6QyxnREFBMkM7QUFZM0M7O0dBRUc7QUFDSCxNQUFhLFlBQWEsU0FBUSxxQkFBUztJQUN6QyxZQUFZLE9BQWdCLEVBQUUsT0FBNEI7UUFDeEQsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRWYsSUFBSSx1QkFBUyxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsR0FBRyxFQUFFO1lBQ2xDLEtBQUssRUFBRTtnQkFDTCxhQUFhLEVBQUUseUJBQXlCO2dCQUN4QyxhQUFhLEVBQUU7b0JBQ2IsNEJBQTRCO29CQUM1QixFQUFFO29CQUNGLDRCQUE0QjtvQkFDNUIseUNBQXlDO29CQUN6Qyx3QkFBd0I7b0JBQ3hCLEVBQUU7aUJBQ0gsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO2dCQUNaLFlBQVksRUFBRTtvQkFDWiw4QkFBOEI7b0JBQzlCLDJCQUEyQjtvQkFDM0IsV0FBVztvQkFDWCxvQ0FBb0M7b0JBQ3BDLGNBQWM7b0JBQ2QsK0JBQStCO29CQUMvQixTQUFTO29CQUNULDZCQUE2QjtvQkFDN0IsRUFBRTtpQkFDSCxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7YUFDYjtTQUNGLENBQUMsQ0FBQztJQUNMLENBQUM7O0FBNUJILG9DQTZCQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCB9IGZyb20gXCIuLi9jb21wb25lbnRcIjtcbmltcG9ydCB7IFByb2plY3QgfSBmcm9tIFwiLi4vcHJvamVjdFwiO1xuaW1wb3J0IHsgU2FtcGxlRGlyIH0gZnJvbSBcIi4uL3NhbXBsZS1maWxlXCI7XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgcHl0aG9uIHNhbXBsZSBjb2RlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFB5dGhvblNhbXBsZU9wdGlvbnMge1xuICAvKipcbiAgICogU2FtcGxlIGNvZGUgZGlyZWN0b3J5XG4gICAqL1xuICByZWFkb25seSBkaXI6IHN0cmluZztcbn1cblxuLyoqXG4gKiBQeXRob24gY29kZSBzYW1wbGUuXG4gKi9cbmV4cG9ydCBjbGFzcyBQeXRob25TYW1wbGUgZXh0ZW5kcyBDb21wb25lbnQge1xuICBjb25zdHJ1Y3Rvcihwcm9qZWN0OiBQcm9qZWN0LCBvcHRpb25zOiBQeXRob25TYW1wbGVPcHRpb25zKSB7XG4gICAgc3VwZXIocHJvamVjdCk7XG5cbiAgICBuZXcgU2FtcGxlRGlyKHByb2plY3QsIG9wdGlvbnMuZGlyLCB7XG4gICAgICBmaWxlczoge1xuICAgICAgICBcIl9faW5pdF9fLnB5XCI6ICdfX3ZlcnNpb25fXyA9IFwiMC4xLjBcIlxcbicsXG4gICAgICAgIFwiX19tYWluX18ucHlcIjogW1xuICAgICAgICAgIFwiZnJvbSAuZXhhbXBsZSBpbXBvcnQgaGVsbG9cIixcbiAgICAgICAgICBcIlwiLFxuICAgICAgICAgICdpZiBfX25hbWVfXyA9PSBcIl9fbWFpbl9fXCI6JyxcbiAgICAgICAgICAnICAgIG5hbWUgPSBpbnB1dChcIldoYXQgaXMgeW91ciBuYW1lPyBcIiknLFxuICAgICAgICAgIFwiICAgIHByaW50KGhlbGxvKG5hbWUpKVwiLFxuICAgICAgICAgIFwiXCIsXG4gICAgICAgIF0uam9pbihcIlxcblwiKSxcbiAgICAgICAgXCJleGFtcGxlLnB5XCI6IFtcbiAgICAgICAgICBcImRlZiBoZWxsbyhuYW1lOiBzdHIpIC0+IHN0cjpcIixcbiAgICAgICAgICAnICAgIFwiXCJcIkEgc2ltcGxlIGdyZWV0aW5nLicsXG4gICAgICAgICAgXCIgICAgQXJnczpcIixcbiAgICAgICAgICBcIiAgICAgICAgbmFtZSAoc3RyKTogTmFtZSB0byBncmVldC5cIixcbiAgICAgICAgICBcIiAgICBSZXR1cm5zOlwiLFxuICAgICAgICAgIFwiICAgICAgICBzdHI6IGdyZWV0aW5nIG1lc3NhZ2VcIixcbiAgICAgICAgICAnICAgIFwiXCJcIicsXG4gICAgICAgICAgJyAgICByZXR1cm4gZlwiSGVsbG8ge25hbWV9IVwiJyxcbiAgICAgICAgICBcIlwiLFxuICAgICAgICBdLmpvaW4oXCJcXG5cIiksXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG59XG4iXX0=
@@ -60,5 +60,5 @@ class RequirementsFile extends file_1.FileBase {
60
60
  }
61
61
  exports.RequirementsFile = RequirementsFile;
62
62
  _a = JSII_RTTI_SYMBOL_1;
63
- RequirementsFile[_a] = { fqn: "projen.python.RequirementsFile", version: "0.76.8" };
63
+ RequirementsFile[_a] = { fqn: "projen.python.RequirementsFile", version: "0.76.10" };
64
64
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVxdWlyZW1lbnRzLWZpbGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcHl0aG9uL3JlcXVpcmVtZW50cy1maWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQ0Esa0RBQXNFO0FBQ3RFLGtDQUE4QztBQUU5QywyQ0FBc0Q7QUFTdEQ7Ozs7R0FJRztBQUNILE1BQWEsZ0JBQWlCLFNBQVEsZUFBUTtJQUk1QyxZQUNFLE9BQWdCLEVBQ2hCLFFBQWdCLEVBQ2hCLE9BQWdDO1FBRWhDLEtBQUssQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFSVixhQUFRLEdBQUcsSUFBSSxLQUFLLEVBQVUsQ0FBQztRQVU5QyxJQUFJLENBQUMsZUFBZSxHQUFHLE9BQU8sQ0FBQyxlQUFlLENBQUM7SUFDakQsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNJLFdBQVcsQ0FBQyxHQUFHLFFBQWtCO1FBQ3RDLEtBQUssSUFBSSxHQUFHLElBQUksUUFBUSxFQUFFO1lBQ3hCLElBQUksR0FBRyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsRUFBRTtnQkFDdkIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7YUFDekI7aUJBQU07Z0JBQ0wsTUFBTSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsR0FBRywyQkFBWSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDNUQsSUFBSSxPQUFPLEVBQUU7b0JBQ1gsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLEdBQUcsSUFBQSw2QkFBb0IsRUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUM7aUJBQy9EO3FCQUFNO29CQUNMLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO2lCQUMxQjthQUNGO1NBQ0Y7SUFDSCxDQUFDO0lBRU8sZ0JBQWdCLENBQUMsR0FBMEI7UUFDakQsSUFBSSxHQUFHLENBQUMsT0FBTyxFQUFFO1lBQ2YsT0FBTyxHQUFHLEdBQUcsQ0FBQyxJQUFJLEdBQUcsSUFBQSw2QkFBb0IsRUFBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztTQUMxRDthQUFNO1lBQ0wsT0FBTyxHQUFHLENBQUMsSUFBSSxDQUFDO1NBQ2pCO0lBQ0gsQ0FBQztJQUVTLGlCQUFpQixDQUFDLFFBQW1CO1FBQzdDLE1BQU0sV0FBVyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDdkMsSUFBSSxJQUFJLENBQUMsZUFBZSxFQUFFO1lBQ3hCLFdBQVcsQ0FBQyxJQUFJLENBQ2QsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUMzQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLENBQzNCLENBQ0YsQ0FBQztTQUNIO1FBRUQsT0FBTyxHQUFHLFFBQVE7YUFDZixPQUFPLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLFdBQVcsQ0FBQyxDQUFDO2FBQ3ZFLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO0lBQ3BCLENBQUM7O0FBekRILDRDQTBEQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IElQYWNrYWdlUHJvdmlkZXIgfSBmcm9tIFwiLi9weXRob24tZGVwc1wiO1xuaW1wb3J0IHsgRGVwZW5kZW5jaWVzLCBEZXBlbmRlbmN5Q29vcmRpbmF0ZXMgfSBmcm9tIFwiLi4vZGVwZW5kZW5jaWVzXCI7XG5pbXBvcnQgeyBGaWxlQmFzZSwgSVJlc29sdmVyIH0gZnJvbSBcIi4uL2ZpbGVcIjtcbmltcG9ydCB7IFByb2plY3QgfSBmcm9tIFwiLi4vcHJvamVjdFwiO1xuaW1wb3J0IHsgdG9QeXRob25WZXJzaW9uUmFuZ2UgfSBmcm9tIFwiLi4vdXRpbC9zZW12ZXJcIjtcblxuZXhwb3J0IGludGVyZmFjZSBSZXF1aXJlbWVudHNGaWxlT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBQcm92aWRlIGEgbGlzdCBvZiBwYWNrYWdlcyB0aGF0IGNhbiBiZSBkeW5hbWljYWxseSB1cGRhdGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgcGFja2FnZVByb3ZpZGVyPzogSVBhY2thZ2VQcm92aWRlcjtcbn1cblxuLyoqXG4gKiBTcGVjaWZpZXMgYSBsaXN0IG9mIHBhY2thZ2VzIHRvIGJlIGluc3RhbGxlZCB1c2luZyBwaXAuXG4gKlxuICogQHNlZSBodHRwczovL3BpcC5weXBhLmlvL2VuL3N0YWJsZS9yZWZlcmVuY2UvcGlwX2luc3RhbGwvI3JlcXVpcmVtZW50cy1maWxlLWZvcm1hdFxuICovXG5leHBvcnQgY2xhc3MgUmVxdWlyZW1lbnRzRmlsZSBleHRlbmRzIEZpbGVCYXNlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBwYWNrYWdlcyA9IG5ldyBBcnJheTxzdHJpbmc+KCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgcGFja2FnZVByb3ZpZGVyPzogSVBhY2thZ2VQcm92aWRlcjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcm9qZWN0OiBQcm9qZWN0LFxuICAgIGZpbGVQYXRoOiBzdHJpbmcsXG4gICAgb3B0aW9uczogUmVxdWlyZW1lbnRzRmlsZU9wdGlvbnNcbiAgKSB7XG4gICAgc3VwZXIocHJvamVjdCwgZmlsZVBhdGgpO1xuXG4gICAgdGhpcy5wYWNrYWdlUHJvdmlkZXIgPSBvcHRpb25zLnBhY2thZ2VQcm92aWRlcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIHRoZSBzcGVjaWZpZWQgcGFja2FnZXMgcHJvdmlkZWQgaW4gc2VtdmVyIGZvcm1hdC5cbiAgICpcbiAgICogQ29tbWVudCBsaW5lcyAoc3RhcnQgd2l0aCBgI2ApIGFyZSBpZ25vcmVkLlxuICAgKlxuICAgKiBAcGFyYW0gcGFja2FnZXMgUGFja2FnZSB2ZXJzaW9uIGluIGZvcm1hdCBgPG1vZHVsZT5APHNlbXZlcj5gXG4gICAqL1xuICBwdWJsaWMgYWRkUGFja2FnZXMoLi4ucGFja2FnZXM6IHN0cmluZ1tdKSB7XG4gICAgZm9yIChsZXQgcGtnIG9mIHBhY2thZ2VzKSB7XG4gICAgICBpZiAocGtnLnN0YXJ0c1dpdGgoXCIjXCIpKSB7XG4gICAgICAgIHRoaXMucGFja2FnZXMucHVzaChwa2cpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgeyBuYW1lLCB2ZXJzaW9uIH0gPSBEZXBlbmRlbmNpZXMucGFyc2VEZXBlbmRlbmN5KHBrZyk7XG4gICAgICAgIGlmICh2ZXJzaW9uKSB7XG4gICAgICAgICAgdGhpcy5wYWNrYWdlcy5wdXNoKGAke25hbWV9JHt0b1B5dGhvblZlcnNpb25SYW5nZSh2ZXJzaW9uKX1gKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnBhY2thZ2VzLnB1c2gobmFtZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGZvcm1hdERlcGVuZGVuY3koZGVwOiBEZXBlbmRlbmN5Q29vcmRpbmF0ZXMpIHtcbiAgICBpZiAoZGVwLnZlcnNpb24pIHtcbiAgICAgIHJldHVybiBgJHtkZXAubmFtZX0ke3RvUHl0aG9uVmVyc2lvblJhbmdlKGRlcC52ZXJzaW9uKX1gO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZGVwLm5hbWU7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIHN5bnRoZXNpemVDb250ZW50KHJlc29sdmVyOiBJUmVzb2x2ZXIpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IGFsbFBhY2thZ2VzID0gWy4uLnRoaXMucGFja2FnZXNdO1xuICAgIGlmICh0aGlzLnBhY2thZ2VQcm92aWRlcikge1xuICAgICAgYWxsUGFja2FnZXMucHVzaChcbiAgICAgICAgLi4udGhpcy5wYWNrYWdlUHJvdmlkZXIucGFja2FnZXMubWFwKChkZXApID0+XG4gICAgICAgICAgdGhpcy5mb3JtYXREZXBlbmRlbmN5KGRlcClcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYCR7cmVzb2x2ZXJcbiAgICAgIC5yZXNvbHZlKFsuLi4odGhpcy5tYXJrZXIgPyBbYCMgJHt0aGlzLm1hcmtlcn1gXSA6IFtdKSwgLi4uYWxsUGFja2FnZXNdKVxuICAgICAgLmpvaW4oXCJcXG5cIil9XFxuYDtcbiAgfVxufVxuIl19
@@ -68,5 +68,5 @@ class SetupPy extends file_1.FileBase {
68
68
  }
69
69
  exports.SetupPy = SetupPy;
70
70
  _a = JSII_RTTI_SYMBOL_1;
71
- SetupPy[_a] = { fqn: "projen.python.SetupPy", version: "0.76.8" };
71
+ SetupPy[_a] = { fqn: "projen.python.SetupPy", version: "0.76.10" };
72
72
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2V0dXBweS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9weXRob24vc2V0dXBweS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLGtDQUE4QztBQXVFOUM7O0dBRUc7QUFDSCxNQUFhLE9BQVEsU0FBUSxlQUFRO0lBR25DLFlBQVksT0FBZ0IsRUFBRSxPQUF1QjtRQUNuRCxLQUFLLENBQUMsT0FBTyxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBRTNCLElBQUksQ0FBQyxXQUFXLEdBQUc7WUFDakIsSUFBSSxFQUFFLE9BQU8sQ0FBQyxJQUFJO1lBQ2xCLFFBQVEsRUFBRSxPQUFPLENBQUMsUUFBUTtZQUMxQixlQUFlLEVBQUUsT0FBTztZQUN4QixXQUFXLEVBQUU7Z0JBQ1gsaUNBQWlDO2dCQUNqQyw2Q0FBNkM7Z0JBQzdDLHVDQUF1QztnQkFDdkMsdUNBQXVDO2dCQUN2Qyx1Q0FBdUM7Z0JBQ3ZDLHdDQUF3QzthQUN6QztZQUNELEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztTQUMvQyxDQUFDO0lBQ0osQ0FBQztJQUVTLGlCQUFpQixDQUFDLFFBQW1CO1FBQzdDLE1BQU0sS0FBSyxHQUFHO1lBQ1osR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQzVDLEVBQUU7WUFDRixhQUFhO1lBQ2IsOEJBQThCO1lBQzlCLEVBQUU7WUFDRixzQkFBc0I7WUFDdEIsU0FBUztZQUNULElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1lBQ3pDLEtBQUs7WUFDTCxHQUFHO1lBQ0gsRUFBRTtZQUNGLGlCQUFpQjtTQUNsQixDQUFDO1FBRUYsT0FBTyxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7SUFDbkQsQ0FBQztJQUVELDZFQUE2RTtJQUNyRSxZQUFZLENBQUMsT0FBdUI7UUFDMUMsTUFBTSxHQUFHLEdBQTJCLEVBQUUsQ0FBQztRQUN2QyxLQUFLLE1BQU0sQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRTtZQUNsRCxRQUFRLEdBQUcsRUFBRTtnQkFDWCxLQUFLLFlBQVk7b0JBQ2YsR0FBRyxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7b0JBQ25CLE1BQU07Z0JBQ1IsS0FBSyxhQUFhO29CQUNoQixHQUFHLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQztvQkFDekIsTUFBTTtnQkFDUixLQUFLLFVBQVU7b0JBQ2IsR0FBRyxDQUFDLEdBQUcsR0FBRyxLQUFLLENBQUM7b0JBQ2hCLE1BQU07Z0JBQ1IsS0FBSyxtQkFBbUI7b0JBQ3RCLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztvQkFDN0MsTUFBTTtnQkFDUjtvQkFDRSxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDO2FBQ3BCO1NBQ0Y7UUFDRCxPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUM7O0FBL0RILDBCQWdFQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEZpbGVCYXNlLCBJUmVzb2x2ZXIgfSBmcm9tIFwiLi4vZmlsZVwiO1xuaW1wb3J0IHsgUHJvamVjdCB9IGZyb20gXCIuLi9wcm9qZWN0XCI7XG5cbi8qKlxuICogRmllbGRzIHRvIHBhc3MgaW4gdGhlIHNldHVwKCkgZnVuY3Rpb24gb2Ygc2V0dXAucHlcbiAqXG4gKiBAc2VlIGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvZGlzdHV0aWxzL3NldHVwc2NyaXB0Lmh0bWxcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTZXR1cFB5T3B0aW9ucyB7XG4gIC8qKlxuICAgKiBOYW1lIG9mIHRoZSBwYWNrYWdlXG4gICAqL1xuICByZWFkb25seSBuYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBMaXN0IG9mIHN1Ym1vZHVsZXMgdG8gYmUgcGFja2FnZWRcbiAgICovXG4gIHJlYWRvbmx5IHBhY2thZ2VzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIEF1dGhvcidzIG5hbWVcbiAgICovXG4gIHJlYWRvbmx5IGF1dGhvck5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEF1dGhvcidzIGUtbWFpbFxuICAgKi9cbiAgcmVhZG9ubHkgYXV0aG9yRW1haWw/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIE1hbnVhbGx5IHNwZWNpZnkgcGFja2FnZSB2ZXJzaW9uXG4gICAqL1xuICByZWFkb25seSB2ZXJzaW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBIHNob3J0IHByb2plY3QgZGVzY3JpcHRpb25cbiAgICovXG4gIHJlYWRvbmx5IGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgcHJvamVjdCBsaWNlbnNlXG4gICAqL1xuICByZWFkb25seSBsaWNlbnNlPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBQYWNrYWdlJ3MgSG9tZXBhZ2UgLyBXZWJzaXRlXG4gICAqL1xuICByZWFkb25seSBob21lcGFnZT86IHN0cmluZztcblxuICAvKipcbiAgICogQSBsaXN0IG9mIFB5UEkgdHJvdmUgY2xhc3NpZmllcnMgdGhhdCBkZXNjcmliZSB0aGUgcHJvamVjdC5cbiAgICpcbiAgICogQHNlZSBodHRwczovL3B5cGkub3JnL2NsYXNzaWZpZXJzL1xuICAgKi9cbiAgcmVhZG9ubHkgY2xhc3NpZmllcnM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogRXNjYXBlIGhhdGNoIHRvIGFsbG93IGFueSB2YWx1ZVxuICAgKi9cbiAgcmVhZG9ubHkgYWRkaXRpb25hbE9wdGlvbnM/OiB7IFtuYW1lOiBzdHJpbmddOiBhbnkgfTtcblxuICAvKipcbiAgICogRXNjYXBlIGhhdGNoIHRvIGFsbG93IGFueSB2YWx1ZSAoSlMvVFMgb25seSlcbiAgICpcbiAgICogQGRlcHJlY2F0ZWQgUHJlZmVyIHVzaW5nIGBhZGRpdGlvbmFsT3B0aW9uc2AgaW5zdGVhZC5cbiAgICpcbiAgICogQGpzaWkgaWdub3JlXG4gICAqL1xuICByZWFkb25seSBbbmFtZTogc3RyaW5nXTogYW55O1xufVxuXG4vKipcbiAqIFB5dGhvbiBwYWNrYWdpbmcgc2NyaXB0IHdoZXJlIHBhY2thZ2UgbWV0YWRhdGEgY2FuIGJlIHBsYWNlZC5cbiAqL1xuZXhwb3J0IGNsYXNzIFNldHVwUHkgZXh0ZW5kcyBGaWxlQmFzZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgc2V0dXBDb25maWc6IGFueTtcblxuICBjb25zdHJ1Y3Rvcihwcm9qZWN0OiBQcm9qZWN0LCBvcHRpb25zOiBTZXR1cFB5T3B0aW9ucykge1xuICAgIHN1cGVyKHByb2plY3QsIFwic2V0dXAucHlcIik7XG5cbiAgICB0aGlzLnNldHVwQ29uZmlnID0ge1xuICAgICAgbmFtZTogcHJvamVjdC5uYW1lLFxuICAgICAgcGFja2FnZXM6IG9wdGlvbnMucGFja2FnZXMsXG4gICAgICBweXRob25fcmVxdWlyZXM6IFwiPj0zLjdcIixcbiAgICAgIGNsYXNzaWZpZXJzOiBbXG4gICAgICAgIFwiSW50ZW5kZWQgQXVkaWVuY2UgOjogRGV2ZWxvcGVyc1wiLFxuICAgICAgICBcIlByb2dyYW1taW5nIExhbmd1YWdlIDo6IFB5dGhvbiA6OiAzIDo6IE9ubHlcIixcbiAgICAgICAgXCJQcm9ncmFtbWluZyBMYW5ndWFnZSA6OiBQeXRob24gOjogMy43XCIsXG4gICAgICAgIFwiUHJvZ3JhbW1pbmcgTGFuZ3VhZ2UgOjogUHl0aG9uIDo6IDMuOFwiLFxuICAgICAgICBcIlByb2dyYW1taW5nIExhbmd1YWdlIDo6IFB5dGhvbiA6OiAzLjlcIixcbiAgICAgICAgXCJQcm9ncmFtbWluZyBMYW5ndWFnZSA6OiBQeXRob24gOjogMy4xMFwiLFxuICAgICAgXSxcbiAgICAgIC4uLihvcHRpb25zID8gdGhpcy5yZW5hbWVGaWVsZHMob3B0aW9ucykgOiBbXSksXG4gICAgfTtcbiAgfVxuXG4gIHByb3RlY3RlZCBzeW50aGVzaXplQ29udGVudChyZXNvbHZlcjogSVJlc29sdmVyKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBsaW5lcyA9IFtcbiAgICAgIC4uLih0aGlzLm1hcmtlciA/IFtgIyAke3RoaXMubWFya2VyfWBdIDogW10pLFxuICAgICAgXCJcIixcbiAgICAgIFwiaW1wb3J0IGpzb25cIixcbiAgICAgIFwiZnJvbSBzZXR1cHRvb2xzIGltcG9ydCBzZXR1cFwiLFxuICAgICAgXCJcIixcbiAgICAgIFwia3dhcmdzID0ganNvbi5sb2FkcyhcIixcbiAgICAgICcgICAgXCJcIlwiJyxcbiAgICAgIEpTT04uc3RyaW5naWZ5KHRoaXMuc2V0dXBDb25maWcsIG51bGwsIDQpLFxuICAgICAgJ1wiXCJcIicsXG4gICAgICBcIilcIixcbiAgICAgIFwiXCIsXG4gICAgICBcInNldHVwKCoqa3dhcmdzKVwiLFxuICAgIF07XG5cbiAgICByZXR1cm4gYCR7cmVzb2x2ZXIucmVzb2x2ZShsaW5lcykuam9pbihcIlxcblwiKX1cXG5gO1xuICB9XG5cbiAgLy8gbW9kaWZ5IHNvbWUga2V5IG5hbWVzIHNpbmNlIEpTSUkgaW50ZXJmYWNlcyByZXF1aXJlIGZpZWxkcyB0byBiZSBjYW1lbENhc2VcbiAgcHJpdmF0ZSByZW5hbWVGaWVsZHMob3B0aW9uczogU2V0dXBQeU9wdGlvbnMpOiBhbnkge1xuICAgIGNvbnN0IG9iajogeyBba2V5OiBzdHJpbmddOiBhbnkgfSA9IHt9O1xuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKG9wdGlvbnMpKSB7XG4gICAgICBzd2l0Y2ggKGtleSkge1xuICAgICAgICBjYXNlIFwiYXV0aG9yTmFtZVwiOlxuICAgICAgICAgIG9iai5hdXRob3IgPSB2YWx1ZTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcImF1dGhvckVtYWlsXCI6XG4gICAgICAgICAgb2JqLmF1dGhvcl9lbWFpbCA9IHZhbHVlO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiaG9tZXBhZ2VcIjpcbiAgICAgICAgICBvYmoudXJsID0gdmFsdWU7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJhZGRpdGlvbmFsT3B0aW9uc1wiOlxuICAgICAgICAgIE9iamVjdC5hc3NpZ24ob2JqLCB0aGlzLnJlbmFtZUZpZWxkcyh2YWx1ZSkpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIG9ialtrZXldID0gdmFsdWU7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBvYmo7XG4gIH1cbn1cbiJdfQ==