projen 0.104.23 → 0.104.25

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 (166) hide show
  1. package/.jsii +119 -18
  2. package/lib/ai-instructions.js +2 -2
  3. package/lib/awscdk/auto-discover.js +6 -6
  4. package/lib/awscdk/awscdk-app-java.js +1 -1
  5. package/lib/awscdk/awscdk-app-py.js +1 -1
  6. package/lib/awscdk/awscdk-app-ts.js +1 -1
  7. package/lib/awscdk/awscdk-construct.js +1 -1
  8. package/lib/awscdk/awscdk-deps-java.js +1 -1
  9. package/lib/awscdk/awscdk-deps-js.js +1 -1
  10. package/lib/awscdk/awscdk-deps-py.js +1 -1
  11. package/lib/awscdk/awscdk-deps.js +1 -1
  12. package/lib/awscdk/cdk-config.js +3 -3
  13. package/lib/awscdk/cdk-tasks.js +1 -1
  14. package/lib/awscdk/integration-test.js +1 -1
  15. package/lib/awscdk/lambda-extension.js +1 -1
  16. package/lib/awscdk/lambda-function.js +2 -2
  17. package/lib/build/build-workflow.js +1 -1
  18. package/lib/cdk/auto-discover-base.js +2 -2
  19. package/lib/cdk/construct-lib.js +1 -1
  20. package/lib/cdk/integration-test-base.js +1 -1
  21. package/lib/cdk/jsii-build.js +1 -1
  22. package/lib/cdk/jsii-docgen.js +1 -1
  23. package/lib/cdk/jsii-project.js +1 -1
  24. package/lib/cdk8s/auto-discover.js +2 -2
  25. package/lib/cdk8s/cdk8s-app-py.js +1 -1
  26. package/lib/cdk8s/cdk8s-app-ts.js +1 -1
  27. package/lib/cdk8s/cdk8s-construct.js +1 -1
  28. package/lib/cdk8s/cdk8s-deps-py.js +1 -1
  29. package/lib/cdk8s/cdk8s-deps.js +1 -1
  30. package/lib/cdk8s/integration-test.js +1 -1
  31. package/lib/cdktf/cdktf-construct.js +1 -1
  32. package/lib/cdktn/cdktn-app-ts.js +1 -1
  33. package/lib/cdktn/cdktn-config.js +1 -1
  34. package/lib/cdktn/cdktn-construct.js +1 -1
  35. package/lib/cdktn/cdktn-deps.js +1 -1
  36. package/lib/cdktn/cdktn-tasks.js +1 -1
  37. package/lib/circleci/circleci.js +1 -1
  38. package/lib/component.js +2 -2
  39. package/lib/dependencies.js +1 -1
  40. package/lib/dev-env.js +1 -1
  41. package/lib/docker-compose/docker-compose-service.js +1 -1
  42. package/lib/docker-compose/docker-compose.js +1 -1
  43. package/lib/file.js +1 -1
  44. package/lib/gitattributes.js +1 -1
  45. package/lib/github/actions-provider.js +1 -1
  46. package/lib/github/actions.const.js +1 -1
  47. package/lib/github/auto-approve.js +1 -1
  48. package/lib/github/auto-merge.js +1 -1
  49. package/lib/github/auto-queue.js +1 -1
  50. package/lib/github/dependabot.js +1 -1
  51. package/lib/github/dependency-review.js +1 -1
  52. package/lib/github/github-credentials.js +1 -1
  53. package/lib/github/github-project.js +1 -1
  54. package/lib/github/github.js +1 -1
  55. package/lib/github/merge-queue.js +1 -1
  56. package/lib/github/mergify.js +1 -1
  57. package/lib/github/pr-template.js +1 -1
  58. package/lib/github/pull-request-backport.js +1 -1
  59. package/lib/github/pull-request-lint.d.ts +42 -1
  60. package/lib/github/pull-request-lint.js +100 -38
  61. package/lib/github/pull-request-source.js +1 -1
  62. package/lib/github/stale.js +1 -1
  63. package/lib/github/task-workflow-job.js +1 -1
  64. package/lib/github/task-workflow.js +1 -1
  65. package/lib/github/workflow-actions.js +1 -1
  66. package/lib/github/workflow-jobs.js +1 -1
  67. package/lib/github/workflow-steps.js +1 -1
  68. package/lib/github/workflows.js +11 -6
  69. package/lib/gitlab/configuration.js +1 -1
  70. package/lib/gitlab/gitlab-configuration.js +1 -1
  71. package/lib/gitlab/nested-configuration.js +1 -1
  72. package/lib/gitpod.js +1 -1
  73. package/lib/ignore-file.js +1 -1
  74. package/lib/ini.js +1 -1
  75. package/lib/java/java-project.js +1 -1
  76. package/lib/java/junit.js +1 -1
  77. package/lib/java/maven-compile.js +1 -1
  78. package/lib/java/maven-packaging.js +1 -1
  79. package/lib/java/maven-sample.js +1 -1
  80. package/lib/java/pom.js +2 -2
  81. package/lib/java/projenrc.js +1 -1
  82. package/lib/javascript/biome/biome.js +1 -1
  83. package/lib/javascript/bundler.js +1 -1
  84. package/lib/javascript/eslint.js +1 -1
  85. package/lib/javascript/jest.js +4 -4
  86. package/lib/javascript/license-checker.js +1 -1
  87. package/lib/javascript/node-config-file.js +1 -1
  88. package/lib/javascript/node-native-test-runner.js +2 -2
  89. package/lib/javascript/node-package.js +1 -1
  90. package/lib/javascript/node-project.js +1 -1
  91. package/lib/javascript/npm-config.js +1 -1
  92. package/lib/javascript/pnpm-workspace-config.js +2 -2
  93. package/lib/javascript/pnpm-workspace.js +1 -1
  94. package/lib/javascript/prettier.js +1 -1
  95. package/lib/javascript/projenrc.js +1 -1
  96. package/lib/javascript/typescript-config.js +2 -2
  97. package/lib/javascript/upgrade-dependencies.js +2 -2
  98. package/lib/javascript/yarnrc.js +1 -1
  99. package/lib/json-patch.js +1 -1
  100. package/lib/json.js +1 -1
  101. package/lib/license.js +1 -1
  102. package/lib/logger.js +1 -1
  103. package/lib/makefile.js +1 -1
  104. package/lib/object-file.js +1 -1
  105. package/lib/polaris/coverity-go.js +1 -1
  106. package/lib/polaris/coverity-java.js +1 -1
  107. package/lib/polaris/coverity-javascript.js +1 -1
  108. package/lib/polaris/coverity.js +1 -1
  109. package/lib/project-build.js +1 -1
  110. package/lib/project-tree.js +1 -1
  111. package/lib/project.js +1 -1
  112. package/lib/projects.js +1 -1
  113. package/lib/projenrc-json.js +1 -1
  114. package/lib/projenrc.js +1 -1
  115. package/lib/properties-file.js +1 -1
  116. package/lib/python/pip.js +1 -1
  117. package/lib/python/poetry.js +2 -2
  118. package/lib/python/projenrc.js +1 -1
  119. package/lib/python/pyproject-toml-file.js +1 -1
  120. package/lib/python/pytest-sample.js +1 -1
  121. package/lib/python/pytest.js +1 -1
  122. package/lib/python/python-project.js +1 -1
  123. package/lib/python/python-sample.js +1 -1
  124. package/lib/python/requirements-file.js +1 -1
  125. package/lib/python/setuppy.js +1 -1
  126. package/lib/python/setuptools.js +1 -1
  127. package/lib/python/uv-config.js +1 -1
  128. package/lib/python/uv.js +1 -1
  129. package/lib/python/venv.js +1 -1
  130. package/lib/readme.js +1 -1
  131. package/lib/release/publisher.js +1 -1
  132. package/lib/release/release-trigger.js +1 -1
  133. package/lib/release/release.js +1 -1
  134. package/lib/renovatebot.js +1 -1
  135. package/lib/run-task.cjs +1 -1
  136. package/lib/sample-file.js +2 -2
  137. package/lib/script-runner.js +1 -1
  138. package/lib/sonarqube/javascript.js +1 -1
  139. package/lib/sonarqube/rust.js +1 -1
  140. package/lib/sonarqube/sonarqube.js +1 -1
  141. package/lib/sonarqube/typescript.js +1 -1
  142. package/lib/source-code.js +1 -1
  143. package/lib/task-shell.js +1 -1
  144. package/lib/task.js +1 -1
  145. package/lib/tasks.js +1 -1
  146. package/lib/testing.js +1 -1
  147. package/lib/textfile.js +1 -1
  148. package/lib/toml.js +1 -1
  149. package/lib/typescript/projenrc-ts.js +1 -1
  150. package/lib/typescript/projenrc.js +1 -1
  151. package/lib/typescript/typescript-runner.js +1 -1
  152. package/lib/typescript/typescript-typedoc.js +1 -1
  153. package/lib/typescript/typescript.js +5 -5
  154. package/lib/version.js +2 -2
  155. package/lib/vscode/devcontainer.js +1 -1
  156. package/lib/vscode/extensions.js +1 -1
  157. package/lib/vscode/launch-config.js +1 -1
  158. package/lib/vscode/settings.js +1 -1
  159. package/lib/vscode/vscode.js +1 -1
  160. package/lib/web/next.js +3 -3
  161. package/lib/web/postcss.js +1 -1
  162. package/lib/web/react.js +3 -3
  163. package/lib/web/tailwind.js +1 -1
  164. package/lib/xmlfile.js +1 -1
  165. package/lib/yaml.js +1 -1
  166. package/package.json +1 -1
@@ -1,54 +1,49 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.PullRequestLint = void 0;
3
+ exports.PullRequestLint = exports.PullRequestLintTrigger = void 0;
4
4
  const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
5
5
  const _1 = require(".");
6
6
  const actions_const_1 = require("./actions.const");
7
7
  const workflows_model_1 = require("./workflows-model");
8
8
  const component_1 = require("../component");
9
+ /**
10
+ * The pull request event that triggers the pull request lint workflow.
11
+ */
12
+ var PullRequestLintTrigger;
13
+ (function (PullRequestLintTrigger) {
14
+ /**
15
+ * Run in the context of the base branch, with access to secrets and a read/write token.
16
+ */
17
+ PullRequestLintTrigger["PULL_REQUEST_TARGET"] = "pull_request_target";
18
+ /**
19
+ * Run in the context of the merge commit, with a read-only token for pull requests from forks.
20
+ */
21
+ PullRequestLintTrigger["PULL_REQUEST"] = "pull_request";
22
+ })(PullRequestLintTrigger || (exports.PullRequestLintTrigger = PullRequestLintTrigger = {}));
23
+ const CONSOLIDATED_JOB_ID = "pull-request-lint";
24
+ // Checks can only be evaluated in a pull request context.
25
+ // Skipping them in merge groups lets them be required status checks.
26
+ const PR_CHECK = "(github.event_name == 'pull_request' || github.event_name == 'pull_request_target')";
9
27
  /**
10
28
  * Configure validations to run on GitHub pull requests.
11
- * Only generates a file if at least one linter is configured.
29
+ * Only generates a file if at least one check is configured.
12
30
  */
13
31
  class PullRequestLint extends component_1.Component {
14
32
  github;
15
33
  options;
16
- static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.github.PullRequestLint", version: "0.104.23" };
34
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.github.PullRequestLint", version: "0.104.25" };
35
+ workflow;
36
+ checkIds = [];
17
37
  constructor(github, options = {}) {
18
38
  super(github.project);
19
39
  this.github = github;
20
40
  this.options = options;
21
- const checkSemanticTitle = options.semanticTitle ?? true;
22
- const checkContributorStatement = Boolean(options.contributorStatement);
23
- // should only create a workflow if one or more linters are enabled
24
- if (!checkSemanticTitle && !checkContributorStatement) {
25
- return;
26
- }
27
- const workflow = github.addWorkflow("pull-request-lint");
28
- workflow.on({
29
- pullRequestTarget: {
30
- types: [
31
- "labeled",
32
- "opened",
33
- "synchronize",
34
- "reopened",
35
- "ready_for_review",
36
- "edited",
37
- ],
38
- },
39
- // run on merge group, but use a condition later to always succeed
40
- // needed so the workflow can be a required status check
41
- mergeGroup: {},
42
- });
43
- // All checks are run against the PR and can only be evaluated within a PR context
44
- // Needed so jobs can be set as required and will run successfully on merge group checks.
45
- const prCheck = "(github.event_name == 'pull_request' || github.event_name == 'pull_request_target')";
46
- if (checkSemanticTitle) {
41
+ if (options.semanticTitle ?? true) {
47
42
  const opts = options.semanticTitleOptions ?? {};
48
43
  const types = opts.types ?? ["feat", "fix", "chore"];
49
- const validateJob = {
44
+ this.addCheck("validate", {
50
45
  name: "Validate PR title",
51
- if: prCheck,
46
+ if: PR_CHECK,
52
47
  ...github.runsOnConfig(options),
53
48
  permissions: {
54
49
  pullRequests: workflows_model_1.JobPermission.READ,
@@ -67,14 +62,13 @@ class PullRequestLint extends component_1.Component {
67
62
  },
68
63
  },
69
64
  ],
70
- };
71
- workflow.addJobs({ validate: validateJob });
65
+ });
72
66
  }
73
67
  if (options.contributorStatement) {
74
68
  const opts = options.contributorStatementOptions ?? {};
75
69
  const users = opts.exemptUsers ?? [];
76
70
  const labels = opts.exemptLabels ?? [];
77
- const conditions = [prCheck];
71
+ const conditions = [PR_CHECK];
78
72
  const exclusions = [
79
73
  ...labels.map((l) => `contains(github.event.pull_request.labels.*.name, '${l}')`),
80
74
  ...users.map((u) => `github.event.pull_request.user.login == '${u}'`),
@@ -92,7 +86,7 @@ class PullRequestLint extends component_1.Component {
92
86
  "}",
93
87
  ].join("\n");
94
88
  const helpMessage = "Contributor statement missing from PR description. Please include the following text in the PR description";
95
- const contributorStatement = {
89
+ this.addCheck("contributorStatement", {
96
90
  name: "Require Contributor Statement",
97
91
  ...github.runsOnConfig(options),
98
92
  permissions: {
@@ -112,11 +106,30 @@ class PullRequestLint extends component_1.Component {
112
106
  },
113
107
  },
114
108
  ],
115
- };
116
- workflow.addJobs({ contributorStatement });
109
+ });
110
+ }
111
+ }
112
+ /**
113
+ * Adds a job to the pull request lint workflow that is part of the consolidated status check.
114
+ *
115
+ * The job also runs for merge groups. Skip it there with a job condition, a skipped job counts as passing.
116
+ *
117
+ * @param id The job ID, unique within the workflow
118
+ * @param job The job definition
119
+ */
120
+ addCheck(id, job) {
121
+ if (id === CONSOLIDATED_JOB_ID) {
122
+ throw new Error(`The check ID '${CONSOLIDATED_JOB_ID}' is reserved for the consolidated status check. Choose a different ID.`);
117
123
  }
124
+ this.ensureWorkflow().addJobs({ [id]: job });
125
+ this.checkIds.push(id);
118
126
  }
119
127
  preSynthesize() {
128
+ if (this.workflow && (this.options.consolidatedStatusCheck ?? true)) {
129
+ this.workflow.addJobs({
130
+ [CONSOLIDATED_JOB_ID]: this.renderConsolidatedJob(),
131
+ });
132
+ }
120
133
  if (this.options.contributorStatement) {
121
134
  // Append to PR template in preSynthesize so it's always at the end of the file
122
135
  const prTemplate = _1.PullRequestTemplate.of(this.project) ??
@@ -127,6 +140,55 @@ class PullRequestLint extends component_1.Component {
127
140
  prTemplate?.addLine("");
128
141
  }
129
142
  }
143
+ ensureWorkflow() {
144
+ if (this.workflow) {
145
+ return this.workflow;
146
+ }
147
+ const pullRequestTypes = {
148
+ types: [
149
+ "labeled",
150
+ "opened",
151
+ "synchronize",
152
+ "reopened",
153
+ "ready_for_review",
154
+ "edited",
155
+ ],
156
+ };
157
+ const trigger = this.options.trigger ?? PullRequestLintTrigger.PULL_REQUEST_TARGET;
158
+ this.workflow = this.github.addWorkflow("pull-request-lint");
159
+ this.workflow.on({
160
+ ...(trigger === PullRequestLintTrigger.PULL_REQUEST
161
+ ? { pullRequest: pullRequestTypes }
162
+ : { pullRequestTarget: pullRequestTypes }),
163
+ // run on merge group, but use a condition later to always succeed
164
+ // needed so the workflow can be a required status check
165
+ mergeGroup: {},
166
+ });
167
+ return this.workflow;
168
+ }
169
+ renderConsolidatedJob() {
170
+ const ids = this.checkIds;
171
+ return {
172
+ ...this.github.runsOnConfig(this.options),
173
+ permissions: {},
174
+ needs: ids,
175
+ if: "always()",
176
+ steps: [
177
+ ...ids.map((id) => ({
178
+ name: `${id} result`,
179
+ run: `echo \${{ needs.${id}.result }}`,
180
+ })),
181
+ {
182
+ // Checks are skipped in merge groups and for exempt pull requests, which counts as passing.
183
+ if: `\${{ ${ids
184
+ .map((id) => `(needs.${id}.result != 'success' && needs.${id}.result != 'skipped')`)
185
+ .join(" || ")} }}`,
186
+ name: "Set status based on pull request checks",
187
+ run: "exit 1",
188
+ },
189
+ ],
190
+ };
191
+ }
130
192
  }
131
193
  exports.PullRequestLint = PullRequestLint;
132
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVsbC1yZXF1ZXN0LWxpbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZ2l0aHViL3B1bGwtcmVxdWVzdC1saW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFDQSx3QkFBd0M7QUFDeEMsbURBQTZDO0FBRTdDLHVEQUFrRDtBQUNsRCw0Q0FBeUM7QUFpRnpDOzs7R0FHRztBQUNILE1BQWEsZUFBZ0IsU0FBUSxxQkFBUztJQUV6QjtJQUNBOztJQUZuQixZQUNtQixNQUFjLEVBQ2QsVUFBa0MsRUFBRTtRQUVyRCxLQUFLLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBSEwsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNkLFlBQU8sR0FBUCxPQUFPLENBQTZCO1FBSXJELE1BQU0sa0JBQWtCLEdBQUcsT0FBTyxDQUFDLGFBQWEsSUFBSSxJQUFJLENBQUM7UUFDekQsTUFBTSx5QkFBeUIsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLG9CQUFvQixDQUFDLENBQUM7UUFFeEUsbUVBQW1FO1FBQ25FLElBQUksQ0FBQyxrQkFBa0IsSUFBSSxDQUFDLHlCQUF5QixFQUFFLENBQUM7WUFDdEQsT0FBTztRQUNULENBQUM7UUFFRCxNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLG1CQUFtQixDQUFDLENBQUM7UUFDekQsUUFBUSxDQUFDLEVBQUUsQ0FBQztZQUNWLGlCQUFpQixFQUFFO2dCQUNqQixLQUFLLEVBQUU7b0JBQ0wsU0FBUztvQkFDVCxRQUFRO29CQUNSLGFBQWE7b0JBQ2IsVUFBVTtvQkFDVixrQkFBa0I7b0JBQ2xCLFFBQVE7aUJBQ1Q7YUFDRjtZQUNELGtFQUFrRTtZQUNsRSx3REFBd0Q7WUFDeEQsVUFBVSxFQUFFLEVBQUU7U0FDZixDQUFDLENBQUM7UUFFSCxrRkFBa0Y7UUFDbEYseUZBQXlGO1FBQ3pGLE1BQU0sT0FBTyxHQUNYLHFGQUFxRixDQUFDO1FBRXhGLElBQUksa0JBQWtCLEVBQUUsQ0FBQztZQUN2QixNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsb0JBQW9CLElBQUksRUFBRSxDQUFDO1lBQ2hELE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBRXJELE1BQU0sV0FBVyxHQUFRO2dCQUN2QixJQUFJLEVBQUUsbUJBQW1CO2dCQUN6QixFQUFFLEVBQUUsT0FBTztnQkFDWCxHQUFHLE1BQU0sQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDO2dCQUMvQixXQUFXLEVBQUU7b0JBQ1gsWUFBWSxFQUFFLCtCQUFhLENBQUMsSUFBSTtpQkFDakM7Z0JBQ0QsS0FBSyxFQUFFO29CQUNMO3dCQUNFLEVBQUUsRUFBRSxtQkFBbUI7d0JBQ3ZCLElBQUksRUFBRSwwQkFBVSxDQUFDLG1DQUFtQzt3QkFDcEQsR0FBRyxFQUFFOzRCQUNILFlBQVksRUFBRSw2QkFBNkI7eUJBQzVDO3dCQUNELElBQUksRUFBRTs0QkFDSixLQUFLLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7NEJBQ3ZCLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7NEJBQzFELFlBQVksRUFBRSxJQUFJLENBQUMsWUFBWSxJQUFJLEtBQUs7eUJBQ3pDO3FCQUNGO2lCQUNGO2FBQ0YsQ0FBQztZQUVGLFFBQVEsQ0FBQyxPQUFPLENBQUMsRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLENBQUMsQ0FBQztRQUM5QyxDQUFDO1FBRUQsSUFBSSxPQUFPLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztZQUNqQyxNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsMkJBQTJCLElBQUksRUFBRSxDQUFDO1lBQ3ZELE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxXQUFXLElBQUksRUFBRSxDQUFDO1lBQ3JDLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxZQUFZLElBQUksRUFBRSxDQUFDO1lBRXZDLE1BQU0sVUFBVSxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7WUFFN0IsTUFBTSxVQUFVLEdBQWE7Z0JBQzNCLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FDWCxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsc0RBQXNELENBQUMsSUFBSSxDQUNuRTtnQkFDRCxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLDRDQUE0QyxDQUFDLEdBQUcsQ0FBQzthQUN0RSxDQUFDO1lBRUYsSUFBSSxVQUFVLENBQUMsTUFBTSxFQUFFLENBQUM7Z0JBQ3RCLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxVQUFVLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNuRCxDQUFDO1lBRUQsTUFBTSxVQUFVLEdBQUc7Z0JBQ2pCLGdFQUFnRTtnQkFDaEUsbUVBQW1FO2dCQUNuRSxtQ0FBbUM7Z0JBQ25DLGdDQUFnQztnQkFDaEMsa0NBQWtDO2dCQUNsQyx5REFBeUQ7Z0JBQ3pELEdBQUc7YUFDSixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUViLE1BQU0sV0FBVyxHQUNmLDRHQUE0RyxDQUFDO1lBQy9HLE1BQU0sb0JBQW9CLEdBQVE7Z0JBQ2hDLElBQUksRUFBRSwrQkFBK0I7Z0JBQ3JDLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUM7Z0JBQy9CLFdBQVcsRUFBRTtvQkFDWCxZQUFZLEVBQUUsK0JBQWEsQ0FBQyxJQUFJO2lCQUNqQztnQkFDRCxFQUFFLEVBQUUsVUFBVSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7Z0JBQzNCLEdBQUcsRUFBRTtvQkFDSCxPQUFPLEVBQUUsdUNBQXVDO29CQUNoRCxRQUFRLEVBQUUsT0FBTyxDQUFDLG9CQUFvQjtvQkFDdEMsSUFBSSxFQUFFLFdBQVc7aUJBQ2xCO2dCQUNELEtBQUssRUFBRTtvQkFDTDt3QkFDRSxJQUFJLEVBQUUsMEJBQVUsQ0FBQyxxQkFBcUI7d0JBQ3RDLElBQUksRUFBRTs0QkFDSixNQUFNLEVBQUUsVUFBVTt5QkFDbkI7cUJBQ0Y7aUJBQ0Y7YUFDRixDQUFDO1lBRUYsUUFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFLG9CQUFvQixFQUFFLENBQUMsQ0FBQztRQUM3QyxDQUFDO0lBQ0gsQ0FBQztJQUVNLGFBQWE7UUFDbEIsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLG9CQUFvQixFQUFFLENBQUM7WUFDdEMsK0VBQStFO1lBQy9FLE1BQU0sVUFBVSxHQUNkLHNCQUFtQixDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDO2dCQUNwQyxJQUFJLENBQUMsTUFBTSxDQUFDLHNCQUFzQixFQUFFLENBQUM7WUFDdkMsVUFBVSxFQUFFLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUN4QixVQUFVLEVBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzNCLFVBQVUsRUFBRSxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1lBQ3ZELFVBQVUsRUFBRSxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDMUIsQ0FBQztJQUNILENBQUM7O0FBdElILDBDQXVJQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgR2l0SHViIH0gZnJvbSBcIi5cIjtcbmltcG9ydCB7IFB1bGxSZXF1ZXN0VGVtcGxhdGUgfSBmcm9tIFwiLlwiO1xuaW1wb3J0IHsgQWN0aW9uUmVmcyB9IGZyb20gXCIuL2FjdGlvbnMuY29uc3RcIjtcbmltcG9ydCB0eXBlIHsgSm9iIH0gZnJvbSBcIi4vd29ya2Zsb3dzLW1vZGVsXCI7XG5pbXBvcnQgeyBKb2JQZXJtaXNzaW9uIH0gZnJvbSBcIi4vd29ya2Zsb3dzLW1vZGVsXCI7XG5pbXBvcnQgeyBDb21wb25lbnQgfSBmcm9tIFwiLi4vY29tcG9uZW50XCI7XG5pbXBvcnQgdHlwZSB7IFJ1bnNPbk9wdGlvbnMgfSBmcm9tIFwiLi4vcnVubmVyLW9wdGlvbnNcIjtcblxuLyoqXG4gKiBPcHRpb25zIGZvciBQdWxsUmVxdWVzdExpbnRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQdWxsUmVxdWVzdExpbnRPcHRpb25zIGV4dGVuZHMgUnVuc09uT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBWYWxpZGF0ZSB0aGF0IHB1bGwgcmVxdWVzdCB0aXRsZXMgZm9sbG93IENvbnZlbnRpb25hbCBDb21taXRzLlxuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqIEBzZWUgaHR0cHM6Ly93d3cuY29udmVudGlvbmFsY29tbWl0cy5vcmcvXG4gICAqL1xuICByZWFkb25seSBzZW1hbnRpY1RpdGxlPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogT3B0aW9ucyBmb3IgdmFsaWRhdGluZyB0aGUgY29udmVudGlvbmFsIGNvbW1pdCB0aXRsZSBsaW50ZXIuXG4gICAqIEBkZWZhdWx0IC0gdGl0bGUgbXVzdCBzdGFydCB3aXRoIFwiZmVhdFwiLCBcImZpeFwiLCBvciBcImNob3JlXCJcbiAgICovXG4gIHJlYWRvbmx5IHNlbWFudGljVGl0bGVPcHRpb25zPzogU2VtYW50aWNUaXRsZU9wdGlvbnM7XG5cbiAgLyoqXG4gICAqIFJlcXVpcmUgYSBjb250cmlidXRvciBzdGF0ZW1lbnQgdG8gYmUgaW5jbHVkZWQgaW4gdGhlIFBSIGRlc2NyaXB0aW9uLlxuICAgKiBGb3IgZXhhbXBsZSBjb25maXJtaW5nIHRoYXQgdGhlIGNvbnRyaWJ1dGlvbiBoYXMgYmVlbiBtYWRlIGJ5IHRoZSBjb250cmlidXRvciBhbmQgY29tcGxpZXMgd2l0aCB0aGUgcHJvamVjdCdzIGxpY2Vuc2UuXG4gICAqXG4gICAqIEFwcGVuZHMgdGhlIHN0YXRlbWVudCB0byB0aGUgZW5kIG9mIHRoZSBQdWxsIFJlcXVlc3QgdGVtcGxhdGUuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm8gY29udHJpYnV0b3Igc3RhdGVtZW50IGlzIHJlcXVpcmVkXG4gICAqL1xuICByZWFkb25seSBjb250cmlidXRvclN0YXRlbWVudD86IHN0cmluZztcblxuICAvKipcbiAgICogT3B0aW9ucyBmb3IgcmVxdWlyaW5nIGEgY29udHJpYnV0b3Igc3RhdGVtZW50IG9uIFB1bGwgUmVxdWVzdHNcbiAgICogQGRlZmF1bHQgLSBub25lXG4gICAqL1xuICByZWFkb25seSBjb250cmlidXRvclN0YXRlbWVudE9wdGlvbnM/OiBDb250cmlidXRvclN0YXRlbWVudE9wdGlvbnM7XG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgbGludGluZyB0aGF0IFBSIHRpdGxlcyBmb2xsb3cgQ29udmVudGlvbmFsIENvbW1pdHMuXG4gKiBAc2VlIGh0dHBzOi8vd3d3LmNvbnZlbnRpb25hbGNvbW1pdHMub3JnL1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFNlbWFudGljVGl0bGVPcHRpb25zIHtcbiAgLyoqXG4gICAqIENvbmZpZ3VyZSBhIGxpc3Qgb2YgY29tbWl0IHR5cGVzIHRoYXQgYXJlIGFsbG93ZWQuXG4gICAqIEBkZWZhdWx0IFtcImZlYXRcIiwgXCJmaXhcIiwgXCJjaG9yZVwiXVxuICAgKi9cbiAgcmVhZG9ubHkgdHlwZXM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogQ29uZmlndXJlIHRoYXQgYSBzY29wZSBtdXN0IGFsd2F5cyBiZSBwcm92aWRlZC5cbiAgICogZS5nLiBmZWF0KHVpKSwgZml4KGNvcmUpXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSByZXF1aXJlU2NvcGU/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBDb25maWd1cmUgd2hpY2ggc2NvcGVzIGFyZSBhbGxvd2VkIChuZXdsaW5lLWRlbGltaXRlZCkuXG4gICAqIFRoZXNlIGFyZSByZWdleCBwYXR0ZXJucyBhdXRvLXdyYXBwZWQgaW4gYF4gJGAuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gYWxsIHNjb3BlcyBhbGxvd2VkXG4gICAqL1xuICByZWFkb25seSBzY29wZXM/OiBzdHJpbmdbXTtcbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciByZXF1aXJpbmcgYSBjb250cmlidXRvciBzdGF0ZW1lbnQgb24gUHVsbCBSZXF1ZXN0c1xuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbnRyaWJ1dG9yU3RhdGVtZW50T3B0aW9ucyB7XG4gIC8qKlxuICAgKiBQdWxsIHJlcXVlc3RzIGZyb20gdGhlc2UgR2l0SHViIHVzZXJzIGFyZSBleGVtcHRlZCBmcm9tIGEgY29udHJpYnV0b3Igc3RhdGVtZW50LlxuICAgKiBAZGVmYXVsdCAtIG5vIHVzZXJzIGFyZSBleGVtcHRlZFxuICAgKi9cbiAgcmVhZG9ubHkgZXhlbXB0VXNlcnM/OiBzdHJpbmdbXTtcbiAgLyoqXG4gICAqIFB1bGwgcmVxdWVzdHMgd2l0aCBvbmUgb2YgdGhlc2UgbGFiZWxzIGFyZSBleGVtcHRlZCBmcm9tIGEgY29udHJpYnV0b3Igc3RhdGVtZW50LlxuICAgKiBAZGVmYXVsdCAtIG5vIGxhYmVscyBhcmUgZXhjbHVkZWRcbiAgICovXG4gIHJlYWRvbmx5IGV4ZW1wdExhYmVscz86IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIENvbmZpZ3VyZSB2YWxpZGF0aW9ucyB0byBydW4gb24gR2l0SHViIHB1bGwgcmVxdWVzdHMuXG4gKiBPbmx5IGdlbmVyYXRlcyBhIGZpbGUgaWYgYXQgbGVhc3Qgb25lIGxpbnRlciBpcyBjb25maWd1cmVkLlxuICovXG5leHBvcnQgY2xhc3MgUHVsbFJlcXVlc3RMaW50IGV4dGVuZHMgQ29tcG9uZW50IHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBnaXRodWI6IEdpdEh1YixcbiAgICBwcml2YXRlIHJlYWRvbmx5IG9wdGlvbnM6IFB1bGxSZXF1ZXN0TGludE9wdGlvbnMgPSB7fSxcbiAgKSB7XG4gICAgc3VwZXIoZ2l0aHViLnByb2plY3QpO1xuXG4gICAgY29uc3QgY2hlY2tTZW1hbnRpY1RpdGxlID0gb3B0aW9ucy5zZW1hbnRpY1RpdGxlID8/IHRydWU7XG4gICAgY29uc3QgY2hlY2tDb250cmlidXRvclN0YXRlbWVudCA9IEJvb2xlYW4ob3B0aW9ucy5jb250cmlidXRvclN0YXRlbWVudCk7XG5cbiAgICAvLyBzaG91bGQgb25seSBjcmVhdGUgYSB3b3JrZmxvdyBpZiBvbmUgb3IgbW9yZSBsaW50ZXJzIGFyZSBlbmFibGVkXG4gICAgaWYgKCFjaGVja1NlbWFudGljVGl0bGUgJiYgIWNoZWNrQ29udHJpYnV0b3JTdGF0ZW1lbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB3b3JrZmxvdyA9IGdpdGh1Yi5hZGRXb3JrZmxvdyhcInB1bGwtcmVxdWVzdC1saW50XCIpO1xuICAgIHdvcmtmbG93Lm9uKHtcbiAgICAgIHB1bGxSZXF1ZXN0VGFyZ2V0OiB7XG4gICAgICAgIHR5cGVzOiBbXG4gICAgICAgICAgXCJsYWJlbGVkXCIsXG4gICAgICAgICAgXCJvcGVuZWRcIixcbiAgICAgICAgICBcInN5bmNocm9uaXplXCIsXG4gICAgICAgICAgXCJyZW9wZW5lZFwiLFxuICAgICAgICAgIFwicmVhZHlfZm9yX3Jldmlld1wiLFxuICAgICAgICAgIFwiZWRpdGVkXCIsXG4gICAgICAgIF0sXG4gICAgICB9LFxuICAgICAgLy8gcnVuIG9uIG1lcmdlIGdyb3VwLCBidXQgdXNlIGEgY29uZGl0aW9uIGxhdGVyIHRvIGFsd2F5cyBzdWNjZWVkXG4gICAgICAvLyBuZWVkZWQgc28gdGhlIHdvcmtmbG93IGNhbiBiZSBhIHJlcXVpcmVkIHN0YXR1cyBjaGVja1xuICAgICAgbWVyZ2VHcm91cDoge30sXG4gICAgfSk7XG5cbiAgICAvLyBBbGwgY2hlY2tzIGFyZSBydW4gYWdhaW5zdCB0aGUgUFIgYW5kIGNhbiBvbmx5IGJlIGV2YWx1YXRlZCB3aXRoaW4gYSBQUiBjb250ZXh0XG4gICAgLy8gTmVlZGVkIHNvIGpvYnMgY2FuIGJlIHNldCBhcyByZXF1aXJlZCBhbmQgd2lsbCBydW4gc3VjY2Vzc2Z1bGx5IG9uIG1lcmdlIGdyb3VwIGNoZWNrcy5cbiAgICBjb25zdCBwckNoZWNrID1cbiAgICAgIFwiKGdpdGh1Yi5ldmVudF9uYW1lID09ICdwdWxsX3JlcXVlc3QnIHx8IGdpdGh1Yi5ldmVudF9uYW1lID09ICdwdWxsX3JlcXVlc3RfdGFyZ2V0JylcIjtcblxuICAgIGlmIChjaGVja1NlbWFudGljVGl0bGUpIHtcbiAgICAgIGNvbnN0IG9wdHMgPSBvcHRpb25zLnNlbWFudGljVGl0bGVPcHRpb25zID8/IHt9O1xuICAgICAgY29uc3QgdHlwZXMgPSBvcHRzLnR5cGVzID8/IFtcImZlYXRcIiwgXCJmaXhcIiwgXCJjaG9yZVwiXTtcblxuICAgICAgY29uc3QgdmFsaWRhdGVKb2I6IEpvYiA9IHtcbiAgICAgICAgbmFtZTogXCJWYWxpZGF0ZSBQUiB0aXRsZVwiLFxuICAgICAgICBpZjogcHJDaGVjayxcbiAgICAgICAgLi4uZ2l0aHViLnJ1bnNPbkNvbmZpZyhvcHRpb25zKSxcbiAgICAgICAgcGVybWlzc2lvbnM6IHtcbiAgICAgICAgICBwdWxsUmVxdWVzdHM6IEpvYlBlcm1pc3Npb24uUkVBRCxcbiAgICAgICAgfSxcbiAgICAgICAgc3RlcHM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZDogXCJ2YWxpZGF0ZS1wci10aXRsZVwiLFxuICAgICAgICAgICAgdXNlczogQWN0aW9uUmVmcy5BTUFOTk5fQUNUSU9OX1NFTUFOVElDX1BVTExfUkVRVUVTVCxcbiAgICAgICAgICAgIGVudjoge1xuICAgICAgICAgICAgICBHSVRIVUJfVE9LRU46IFwiJHt7IHNlY3JldHMuR0lUSFVCX1RPS0VOIH19XCIsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgd2l0aDoge1xuICAgICAgICAgICAgICB0eXBlczogdHlwZXMuam9pbihcIlxcblwiKSxcbiAgICAgICAgICAgICAgLi4uKG9wdHMuc2NvcGVzID8geyBzY29wZXM6IG9wdHMuc2NvcGVzLmpvaW4oXCJcXG5cIikgfSA6IHt9KSxcbiAgICAgICAgICAgICAgcmVxdWlyZVNjb3BlOiBvcHRzLnJlcXVpcmVTY29wZSA/PyBmYWxzZSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH07XG5cbiAgICAgIHdvcmtmbG93LmFkZEpvYnMoeyB2YWxpZGF0ZTogdmFsaWRhdGVKb2IgfSk7XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMuY29udHJpYnV0b3JTdGF0ZW1lbnQpIHtcbiAgICAgIGNvbnN0IG9wdHMgPSBvcHRpb25zLmNvbnRyaWJ1dG9yU3RhdGVtZW50T3B0aW9ucyA/PyB7fTtcbiAgICAgIGNvbnN0IHVzZXJzID0gb3B0cy5leGVtcHRVc2VycyA/PyBbXTtcbiAgICAgIGNvbnN0IGxhYmVscyA9IG9wdHMuZXhlbXB0TGFiZWxzID8/IFtdO1xuXG4gICAgICBjb25zdCBjb25kaXRpb25zID0gW3ByQ2hlY2tdO1xuXG4gICAgICBjb25zdCBleGNsdXNpb25zOiBzdHJpbmdbXSA9IFtcbiAgICAgICAgLi4ubGFiZWxzLm1hcChcbiAgICAgICAgICAobCkgPT4gYGNvbnRhaW5zKGdpdGh1Yi5ldmVudC5wdWxsX3JlcXVlc3QubGFiZWxzLioubmFtZSwgJyR7bH0nKWAsXG4gICAgICAgICksXG4gICAgICAgIC4uLnVzZXJzLm1hcCgodSkgPT4gYGdpdGh1Yi5ldmVudC5wdWxsX3JlcXVlc3QudXNlci5sb2dpbiA9PSAnJHt1fSdgKSxcbiAgICAgIF07XG5cbiAgICAgIGlmIChleGNsdXNpb25zLmxlbmd0aCkge1xuICAgICAgICBjb25kaXRpb25zLnB1c2goYCEoJHtleGNsdXNpb25zLmpvaW4oXCIgfHwgXCIpfSlgKTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgc2NyaXB0Qm9keSA9IFtcbiAgICAgICAgJ2NvbnN0IGFjdHVhbCA9IHByb2Nlc3MuZW52LlBSX0JPRFkucmVwbGFjZSgvXFxcXHI/XFxcXG4vZywgXCJcXFxcblwiKTsnLFxuICAgICAgICAnY29uc3QgZXhwZWN0ZWQgPSBwcm9jZXNzLmVudi5FWFBFQ1RFRC5yZXBsYWNlKC9cXFxccj9cXFxcbi9nLCBcIlxcXFxuXCIpOycsXG4gICAgICAgIFwiaWYgKCFhY3R1YWwuaW5jbHVkZXMoZXhwZWN0ZWQpKSB7XCIsXG4gICAgICAgICcgICAgY29uc29sZS5sb2coXCIlalwiLCBhY3R1YWwpOycsXG4gICAgICAgICcgICAgY29uc29sZS5sb2coXCIlalwiLCBleHBlY3RlZCk7JyxcbiAgICAgICAgXCIgICAgY29yZS5zZXRGYWlsZWQoYCR7cHJvY2Vzcy5lbnYuSEVMUH06ICR7ZXhwZWN0ZWR9YCk7XCIsXG4gICAgICAgIFwifVwiLFxuICAgICAgXS5qb2luKFwiXFxuXCIpO1xuXG4gICAgICBjb25zdCBoZWxwTWVzc2FnZSA9XG4gICAgICAgIFwiQ29udHJpYnV0b3Igc3RhdGVtZW50IG1pc3NpbmcgZnJvbSBQUiBkZXNjcmlwdGlvbi4gUGxlYXNlIGluY2x1ZGUgdGhlIGZvbGxvd2luZyB0ZXh0IGluIHRoZSBQUiBkZXNjcmlwdGlvblwiO1xuICAgICAgY29uc3QgY29udHJpYnV0b3JTdGF0ZW1lbnQ6IEpvYiA9IHtcbiAgICAgICAgbmFtZTogXCJSZXF1aXJlIENvbnRyaWJ1dG9yIFN0YXRlbWVudFwiLFxuICAgICAgICAuLi5naXRodWIucnVuc09uQ29uZmlnKG9wdGlvbnMpLFxuICAgICAgICBwZXJtaXNzaW9uczoge1xuICAgICAgICAgIHB1bGxSZXF1ZXN0czogSm9iUGVybWlzc2lvbi5SRUFELFxuICAgICAgICB9LFxuICAgICAgICBpZjogY29uZGl0aW9ucy5qb2luKFwiICYmIFwiKSxcbiAgICAgICAgZW52OiB7XG4gICAgICAgICAgUFJfQk9EWTogXCIke3sgZ2l0aHViLmV2ZW50LnB1bGxfcmVxdWVzdC5ib2R5IH19XCIsXG4gICAgICAgICAgRVhQRUNURUQ6IG9wdGlvbnMuY29udHJpYnV0b3JTdGF0ZW1lbnQsXG4gICAgICAgICAgSEVMUDogaGVscE1lc3NhZ2UsXG4gICAgICAgIH0sXG4gICAgICAgIHN0ZXBzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgdXNlczogQWN0aW9uUmVmcy5BQ1RJT05TX0dJVEhVQl9TQ1JJUFQsXG4gICAgICAgICAgICB3aXRoOiB7XG4gICAgICAgICAgICAgIHNjcmlwdDogc2NyaXB0Qm9keSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH07XG5cbiAgICAgIHdvcmtmbG93LmFkZEpvYnMoeyBjb250cmlidXRvclN0YXRlbWVudCB9KTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgcHJlU3ludGhlc2l6ZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5vcHRpb25zLmNvbnRyaWJ1dG9yU3RhdGVtZW50KSB7XG4gICAgICAvLyBBcHBlbmQgdG8gUFIgdGVtcGxhdGUgaW4gcHJlU3ludGhlc2l6ZSBzbyBpdCdzIGFsd2F5cyBhdCB0aGUgZW5kIG9mIHRoZSBmaWxlXG4gICAgICBjb25zdCBwclRlbXBsYXRlID1cbiAgICAgICAgUHVsbFJlcXVlc3RUZW1wbGF0ZS5vZih0aGlzLnByb2plY3QpID8/XG4gICAgICAgIHRoaXMuZ2l0aHViLmFkZFB1bGxSZXF1ZXN0VGVtcGxhdGUoKTtcbiAgICAgIHByVGVtcGxhdGU/LmFkZExpbmUoXCJcIik7XG4gICAgICBwclRlbXBsYXRlPy5hZGRMaW5lKFwiLS0tXCIpO1xuICAgICAgcHJUZW1wbGF0ZT8uYWRkTGluZSh0aGlzLm9wdGlvbnMuY29udHJpYnV0b3JTdGF0ZW1lbnQpO1xuICAgICAgcHJUZW1wbGF0ZT8uYWRkTGluZShcIlwiKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
194
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVsbC1yZXF1ZXN0LWxpbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZ2l0aHViL3B1bGwtcmVxdWVzdC1saW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFDQSx3QkFBd0M7QUFDeEMsbURBQTZDO0FBTTdDLHVEQUFrRDtBQUNsRCw0Q0FBeUM7QUFHekM7O0dBRUc7QUFDSCxJQUFZLHNCQVVYO0FBVkQsV0FBWSxzQkFBc0I7SUFDaEM7O09BRUc7SUFDSCxxRUFBMkMsQ0FBQTtJQUUzQzs7T0FFRztJQUNILHVEQUE2QixDQUFBO0FBQy9CLENBQUMsRUFWVyxzQkFBc0Isc0NBQXRCLHNCQUFzQixRQVVqQztBQWdHRCxNQUFNLG1CQUFtQixHQUFHLG1CQUFtQixDQUFDO0FBRWhELDBEQUEwRDtBQUMxRCxxRUFBcUU7QUFDckUsTUFBTSxRQUFRLEdBQ1oscUZBQXFGLENBQUM7QUFFeEY7OztHQUdHO0FBQ0gsTUFBYSxlQUFnQixTQUFRLHFCQUFTO0lBS3pCO0lBQ0E7O0lBTFgsUUFBUSxDQUFrQjtJQUNqQixRQUFRLEdBQWEsRUFBRSxDQUFDO0lBRXpDLFlBQ21CLE1BQWMsRUFDZCxVQUFrQyxFQUFFO1FBRXJELEtBQUssQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7UUFITCxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ2QsWUFBTyxHQUFQLE9BQU8sQ0FBNkI7UUFJckQsSUFBSSxPQUFPLENBQUMsYUFBYSxJQUFJLElBQUksRUFBRSxDQUFDO1lBQ2xDLE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxvQkFBb0IsSUFBSSxFQUFFLENBQUM7WUFDaEQsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUM7WUFFckQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQUU7Z0JBQ3hCLElBQUksRUFBRSxtQkFBbUI7Z0JBQ3pCLEVBQUUsRUFBRSxRQUFRO2dCQUNaLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUM7Z0JBQy9CLFdBQVcsRUFBRTtvQkFDWCxZQUFZLEVBQUUsK0JBQWEsQ0FBQyxJQUFJO2lCQUNqQztnQkFDRCxLQUFLLEVBQUU7b0JBQ0w7d0JBQ0UsRUFBRSxFQUFFLG1CQUFtQjt3QkFDdkIsSUFBSSxFQUFFLDBCQUFVLENBQUMsbUNBQW1DO3dCQUNwRCxHQUFHLEVBQUU7NEJBQ0gsWUFBWSxFQUFFLDZCQUE2Qjt5QkFDNUM7d0JBQ0QsSUFBSSxFQUFFOzRCQUNKLEtBQUssRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQzs0QkFDdkIsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQzs0QkFDMUQsWUFBWSxFQUFFLElBQUksQ0FBQyxZQUFZLElBQUksS0FBSzt5QkFDekM7cUJBQ0Y7aUJBQ0Y7YUFDRixDQUFDLENBQUM7UUFDTCxDQUFDO1FBRUQsSUFBSSxPQUFPLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztZQUNqQyxNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsMkJBQTJCLElBQUksRUFBRSxDQUFDO1lBQ3ZELE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxXQUFXLElBQUksRUFBRSxDQUFDO1lBQ3JDLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxZQUFZLElBQUksRUFBRSxDQUFDO1lBRXZDLE1BQU0sVUFBVSxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7WUFFOUIsTUFBTSxVQUFVLEdBQWE7Z0JBQzNCLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FDWCxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsc0RBQXNELENBQUMsSUFBSSxDQUNuRTtnQkFDRCxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLDRDQUE0QyxDQUFDLEdBQUcsQ0FBQzthQUN0RSxDQUFDO1lBRUYsSUFBSSxVQUFVLENBQUMsTUFBTSxFQUFFLENBQUM7Z0JBQ3RCLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxVQUFVLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNuRCxDQUFDO1lBRUQsTUFBTSxVQUFVLEdBQUc7Z0JBQ2pCLGdFQUFnRTtnQkFDaEUsbUVBQW1FO2dCQUNuRSxtQ0FBbUM7Z0JBQ25DLGdDQUFnQztnQkFDaEMsa0NBQWtDO2dCQUNsQyx5REFBeUQ7Z0JBQ3pELEdBQUc7YUFDSixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUViLE1BQU0sV0FBVyxHQUNmLDRHQUE0RyxDQUFDO1lBRS9HLElBQUksQ0FBQyxRQUFRLENBQUMsc0JBQXNCLEVBQUU7Z0JBQ3BDLElBQUksRUFBRSwrQkFBK0I7Z0JBQ3JDLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUM7Z0JBQy9CLFdBQVcsRUFBRTtvQkFDWCxZQUFZLEVBQUUsK0JBQWEsQ0FBQyxJQUFJO2lCQUNqQztnQkFDRCxFQUFFLEVBQUUsVUFBVSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7Z0JBQzNCLEdBQUcsRUFBRTtvQkFDSCxPQUFPLEVBQUUsdUNBQXVDO29CQUNoRCxRQUFRLEVBQUUsT0FBTyxDQUFDLG9CQUFvQjtvQkFDdEMsSUFBSSxFQUFFLFdBQVc7aUJBQ2xCO2dCQUNELEtBQUssRUFBRTtvQkFDTDt3QkFDRSxJQUFJLEVBQUUsMEJBQVUsQ0FBQyxxQkFBcUI7d0JBQ3RDLElBQUksRUFBRTs0QkFDSixNQUFNLEVBQUUsVUFBVTt5QkFDbkI7cUJBQ0Y7aUJBQ0Y7YUFDRixDQUFDLENBQUM7UUFDTCxDQUFDO0lBQ0gsQ0FBQztJQUVEOzs7Ozs7O09BT0c7SUFDSSxRQUFRLENBQUMsRUFBVSxFQUFFLEdBQVE7UUFDbEMsSUFBSSxFQUFFLEtBQUssbUJBQW1CLEVBQUUsQ0FBQztZQUMvQixNQUFNLElBQUksS0FBSyxDQUNiLGlCQUFpQixtQkFBbUIseUVBQXlFLENBQzlHLENBQUM7UUFDSixDQUFDO1FBQ0QsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztRQUM3QyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUN6QixDQUFDO0lBRU0sYUFBYTtRQUNsQixJQUFJLElBQUksQ0FBQyxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLHVCQUF1QixJQUFJLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDcEUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUM7Z0JBQ3BCLENBQUMsbUJBQW1CLENBQUMsRUFBRSxJQUFJLENBQUMscUJBQXFCLEVBQUU7YUFDcEQsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUVELElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1lBQ3RDLCtFQUErRTtZQUMvRSxNQUFNLFVBQVUsR0FDZCxzQkFBbUIsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQztnQkFDcEMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO1lBQ3ZDLFVBQVUsRUFBRSxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDeEIsVUFBVSxFQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUMzQixVQUFVLEVBQUUsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsb0JBQW9CLENBQUMsQ0FBQztZQUN2RCxVQUFVLEVBQUUsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzFCLENBQUM7SUFDSCxDQUFDO0lBRU8sY0FBYztRQUNwQixJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNsQixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUM7UUFDdkIsQ0FBQztRQUVELE1BQU0sZ0JBQWdCLEdBQWtEO1lBQ3RFLEtBQUssRUFBRTtnQkFDTCxTQUFTO2dCQUNULFFBQVE7Z0JBQ1IsYUFBYTtnQkFDYixVQUFVO2dCQUNWLGtCQUFrQjtnQkFDbEIsUUFBUTthQUNUO1NBQ0YsQ0FBQztRQUNGLE1BQU0sT0FBTyxHQUNYLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxJQUFJLHNCQUFzQixDQUFDLG1CQUFtQixDQUFDO1FBRXJFLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsbUJBQW1CLENBQUMsQ0FBQztRQUM3RCxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztZQUNmLEdBQUcsQ0FBQyxPQUFPLEtBQUssc0JBQXNCLENBQUMsWUFBWTtnQkFDakQsQ0FBQyxDQUFDLEVBQUUsV0FBVyxFQUFFLGdCQUFnQixFQUFFO2dCQUNuQyxDQUFDLENBQUMsRUFBRSxpQkFBaUIsRUFBRSxnQkFBZ0IsRUFBRSxDQUFDO1lBQzVDLGtFQUFrRTtZQUNsRSx3REFBd0Q7WUFDeEQsVUFBVSxFQUFFLEVBQUU7U0FDZixDQUFDLENBQUM7UUFFSCxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDdkIsQ0FBQztJQUVPLHFCQUFxQjtRQUMzQixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO1FBQzFCLE9BQU87WUFDTCxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUM7WUFDekMsV0FBVyxFQUFFLEVBQUU7WUFDZixLQUFLLEVBQUUsR0FBRztZQUNWLEVBQUUsRUFBRSxVQUFVO1lBQ2QsS0FBSyxFQUFFO2dCQUNMLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztvQkFDbEIsSUFBSSxFQUFFLEdBQUcsRUFBRSxTQUFTO29CQUNwQixHQUFHLEVBQUUsbUJBQW1CLEVBQUUsWUFBWTtpQkFDdkMsQ0FBQyxDQUFDO2dCQUNIO29CQUNFLDRGQUE0RjtvQkFDNUYsRUFBRSxFQUFFLFFBQVEsR0FBRzt5QkFDWixHQUFHLENBQ0YsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUNMLFVBQVUsRUFBRSxpQ0FBaUMsRUFBRSx1QkFBdUIsQ0FDekU7eUJBQ0EsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLO29CQUNwQixJQUFJLEVBQUUseUNBQXlDO29CQUMvQyxHQUFHLEVBQUUsUUFBUTtpQkFDZDthQUNGO1NBQ0YsQ0FBQztJQUNKLENBQUM7O0FBMUxILDBDQTJMQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgR2l0SHViLCBHaXRodWJXb3JrZmxvdyB9IGZyb20gXCIuXCI7XG5pbXBvcnQgeyBQdWxsUmVxdWVzdFRlbXBsYXRlIH0gZnJvbSBcIi5cIjtcbmltcG9ydCB7IEFjdGlvblJlZnMgfSBmcm9tIFwiLi9hY3Rpb25zLmNvbnN0XCI7XG5pbXBvcnQgdHlwZSB7XG4gIEpvYixcbiAgUHVsbFJlcXVlc3RPcHRpb25zLFxuICBQdWxsUmVxdWVzdFRhcmdldE9wdGlvbnMsXG59IGZyb20gXCIuL3dvcmtmbG93cy1tb2RlbFwiO1xuaW1wb3J0IHsgSm9iUGVybWlzc2lvbiB9IGZyb20gXCIuL3dvcmtmbG93cy1tb2RlbFwiO1xuaW1wb3J0IHsgQ29tcG9uZW50IH0gZnJvbSBcIi4uL2NvbXBvbmVudFwiO1xuaW1wb3J0IHR5cGUgeyBSdW5zT25PcHRpb25zIH0gZnJvbSBcIi4uL3J1bm5lci1vcHRpb25zXCI7XG5cbi8qKlxuICogVGhlIHB1bGwgcmVxdWVzdCBldmVudCB0aGF0IHRyaWdnZXJzIHRoZSBwdWxsIHJlcXVlc3QgbGludCB3b3JrZmxvdy5cbiAqL1xuZXhwb3J0IGVudW0gUHVsbFJlcXVlc3RMaW50VHJpZ2dlciB7XG4gIC8qKlxuICAgKiBSdW4gaW4gdGhlIGNvbnRleHQgb2YgdGhlIGJhc2UgYnJhbmNoLCB3aXRoIGFjY2VzcyB0byBzZWNyZXRzIGFuZCBhIHJlYWQvd3JpdGUgdG9rZW4uXG4gICAqL1xuICBQVUxMX1JFUVVFU1RfVEFSR0VUID0gXCJwdWxsX3JlcXVlc3RfdGFyZ2V0XCIsXG5cbiAgLyoqXG4gICAqIFJ1biBpbiB0aGUgY29udGV4dCBvZiB0aGUgbWVyZ2UgY29tbWl0LCB3aXRoIGEgcmVhZC1vbmx5IHRva2VuIGZvciBwdWxsIHJlcXVlc3RzIGZyb20gZm9ya3MuXG4gICAqL1xuICBQVUxMX1JFUVVFU1QgPSBcInB1bGxfcmVxdWVzdFwiLFxufVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIFB1bGxSZXF1ZXN0TGludFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFB1bGxSZXF1ZXN0TGludE9wdGlvbnMgZXh0ZW5kcyBSdW5zT25PcHRpb25zIHtcbiAgLyoqXG4gICAqIFRoZSBwdWxsIHJlcXVlc3QgZXZlbnQgdGhhdCB0cmlnZ2VycyB0aGUgd29ya2Zsb3cuXG4gICAqXG4gICAqIEBkZWZhdWx0IFB1bGxSZXF1ZXN0TGludFRyaWdnZXIuUFVMTF9SRVFVRVNUX1RBUkdFVFxuICAgKi9cbiAgcmVhZG9ubHkgdHJpZ2dlcj86IFB1bGxSZXF1ZXN0TGludFRyaWdnZXI7XG5cbiAgLyoqXG4gICAqIEFkZCBhIGpvYiB0aGF0IGNvbWJpbmVzIHRoZSByZXN1bHRzIG9mIGFsbCBjaGVja3MgaW50byBhIHNpbmdsZSBzdGF0dXMgY2hlY2suXG4gICAqXG4gICAqIFVzZSB0aGlzIGpvYiBhcyB0aGUgcmVxdWlyZWQgc3RhdHVzIGNoZWNrLCBzbyBpdCBkb2VzIG5vdCBuZWVkIHVwZGF0aW5nIHdoZW4gY2hlY2tzIGFyZSBhZGRlZCBvciByZW1vdmVkLlxuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICByZWFkb25seSBjb25zb2xpZGF0ZWRTdGF0dXNDaGVjaz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlIHRoYXQgcHVsbCByZXF1ZXN0IHRpdGxlcyBmb2xsb3cgQ29udmVudGlvbmFsIENvbW1pdHMuXG4gICAqXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICogQHNlZSBodHRwczovL3d3dy5jb252ZW50aW9uYWxjb21taXRzLm9yZy9cbiAgICovXG4gIHJlYWRvbmx5IHNlbWFudGljVGl0bGU/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBPcHRpb25zIGZvciB2YWxpZGF0aW5nIHRoZSBjb252ZW50aW9uYWwgY29tbWl0IHRpdGxlIGxpbnRlci5cbiAgICogQGRlZmF1bHQgLSB0aXRsZSBtdXN0IHN0YXJ0IHdpdGggXCJmZWF0XCIsIFwiZml4XCIsIG9yIFwiY2hvcmVcIlxuICAgKi9cbiAgcmVhZG9ubHkgc2VtYW50aWNUaXRsZU9wdGlvbnM/OiBTZW1hbnRpY1RpdGxlT3B0aW9ucztcblxuICAvKipcbiAgICogUmVxdWlyZSBhIGNvbnRyaWJ1dG9yIHN0YXRlbWVudCB0byBiZSBpbmNsdWRlZCBpbiB0aGUgUFIgZGVzY3JpcHRpb24uXG4gICAqIEZvciBleGFtcGxlIGNvbmZpcm1pbmcgdGhhdCB0aGUgY29udHJpYnV0aW9uIGhhcyBiZWVuIG1hZGUgYnkgdGhlIGNvbnRyaWJ1dG9yIGFuZCBjb21wbGllcyB3aXRoIHRoZSBwcm9qZWN0J3MgbGljZW5zZS5cbiAgICpcbiAgICogQXBwZW5kcyB0aGUgc3RhdGVtZW50IHRvIHRoZSBlbmQgb2YgdGhlIFB1bGwgUmVxdWVzdCB0ZW1wbGF0ZS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBubyBjb250cmlidXRvciBzdGF0ZW1lbnQgaXMgcmVxdWlyZWRcbiAgICovXG4gIHJlYWRvbmx5IGNvbnRyaWJ1dG9yU3RhdGVtZW50Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBPcHRpb25zIGZvciByZXF1aXJpbmcgYSBjb250cmlidXRvciBzdGF0ZW1lbnQgb24gUHVsbCBSZXF1ZXN0c1xuICAgKiBAZGVmYXVsdCAtIG5vbmVcbiAgICovXG4gIHJlYWRvbmx5IGNvbnRyaWJ1dG9yU3RhdGVtZW50T3B0aW9ucz86IENvbnRyaWJ1dG9yU3RhdGVtZW50T3B0aW9ucztcbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciBsaW50aW5nIHRoYXQgUFIgdGl0bGVzIGZvbGxvdyBDb252ZW50aW9uYWwgQ29tbWl0cy5cbiAqIEBzZWUgaHR0cHM6Ly93d3cuY29udmVudGlvbmFsY29tbWl0cy5vcmcvXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2VtYW50aWNUaXRsZU9wdGlvbnMge1xuICAvKipcbiAgICogQ29uZmlndXJlIGEgbGlzdCBvZiBjb21taXQgdHlwZXMgdGhhdCBhcmUgYWxsb3dlZC5cbiAgICogQGRlZmF1bHQgW1wiZmVhdFwiLCBcImZpeFwiLCBcImNob3JlXCJdXG4gICAqL1xuICByZWFkb25seSB0eXBlcz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBDb25maWd1cmUgdGhhdCBhIHNjb3BlIG11c3QgYWx3YXlzIGJlIHByb3ZpZGVkLlxuICAgKiBlLmcuIGZlYXQodWkpLCBmaXgoY29yZSlcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IHJlcXVpcmVTY29wZT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIENvbmZpZ3VyZSB3aGljaCBzY29wZXMgYXJlIGFsbG93ZWQgKG5ld2xpbmUtZGVsaW1pdGVkKS5cbiAgICogVGhlc2UgYXJlIHJlZ2V4IHBhdHRlcm5zIGF1dG8td3JhcHBlZCBpbiBgXiAkYC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBhbGwgc2NvcGVzIGFsbG93ZWRcbiAgICovXG4gIHJlYWRvbmx5IHNjb3Blcz86IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIHJlcXVpcmluZyBhIGNvbnRyaWJ1dG9yIHN0YXRlbWVudCBvbiBQdWxsIFJlcXVlc3RzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29udHJpYnV0b3JTdGF0ZW1lbnRPcHRpb25zIHtcbiAgLyoqXG4gICAqIFB1bGwgcmVxdWVzdHMgZnJvbSB0aGVzZSBHaXRIdWIgdXNlcnMgYXJlIGV4ZW1wdGVkIGZyb20gYSBjb250cmlidXRvciBzdGF0ZW1lbnQuXG4gICAqIEBkZWZhdWx0IC0gbm8gdXNlcnMgYXJlIGV4ZW1wdGVkXG4gICAqL1xuICByZWFkb25seSBleGVtcHRVc2Vycz86IHN0cmluZ1tdO1xuICAvKipcbiAgICogUHVsbCByZXF1ZXN0cyB3aXRoIG9uZSBvZiB0aGVzZSBsYWJlbHMgYXJlIGV4ZW1wdGVkIGZyb20gYSBjb250cmlidXRvciBzdGF0ZW1lbnQuXG4gICAqIEBkZWZhdWx0IC0gbm8gbGFiZWxzIGFyZSBleGNsdWRlZFxuICAgKi9cbiAgcmVhZG9ubHkgZXhlbXB0TGFiZWxzPzogc3RyaW5nW107XG59XG5cbmNvbnN0IENPTlNPTElEQVRFRF9KT0JfSUQgPSBcInB1bGwtcmVxdWVzdC1saW50XCI7XG5cbi8vIENoZWNrcyBjYW4gb25seSBiZSBldmFsdWF0ZWQgaW4gYSBwdWxsIHJlcXVlc3QgY29udGV4dC5cbi8vIFNraXBwaW5nIHRoZW0gaW4gbWVyZ2UgZ3JvdXBzIGxldHMgdGhlbSBiZSByZXF1aXJlZCBzdGF0dXMgY2hlY2tzLlxuY29uc3QgUFJfQ0hFQ0sgPVxuICBcIihnaXRodWIuZXZlbnRfbmFtZSA9PSAncHVsbF9yZXF1ZXN0JyB8fCBnaXRodWIuZXZlbnRfbmFtZSA9PSAncHVsbF9yZXF1ZXN0X3RhcmdldCcpXCI7XG5cbi8qKlxuICogQ29uZmlndXJlIHZhbGlkYXRpb25zIHRvIHJ1biBvbiBHaXRIdWIgcHVsbCByZXF1ZXN0cy5cbiAqIE9ubHkgZ2VuZXJhdGVzIGEgZmlsZSBpZiBhdCBsZWFzdCBvbmUgY2hlY2sgaXMgY29uZmlndXJlZC5cbiAqL1xuZXhwb3J0IGNsYXNzIFB1bGxSZXF1ZXN0TGludCBleHRlbmRzIENvbXBvbmVudCB7XG4gIHByaXZhdGUgd29ya2Zsb3c/OiBHaXRodWJXb3JrZmxvdztcbiAgcHJpdmF0ZSByZWFkb25seSBjaGVja0lkczogc3RyaW5nW10gPSBbXTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IGdpdGh1YjogR2l0SHViLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgb3B0aW9uczogUHVsbFJlcXVlc3RMaW50T3B0aW9ucyA9IHt9LFxuICApIHtcbiAgICBzdXBlcihnaXRodWIucHJvamVjdCk7XG5cbiAgICBpZiAob3B0aW9ucy5zZW1hbnRpY1RpdGxlID8/IHRydWUpIHtcbiAgICAgIGNvbnN0IG9wdHMgPSBvcHRpb25zLnNlbWFudGljVGl0bGVPcHRpb25zID8/IHt9O1xuICAgICAgY29uc3QgdHlwZXMgPSBvcHRzLnR5cGVzID8/IFtcImZlYXRcIiwgXCJmaXhcIiwgXCJjaG9yZVwiXTtcblxuICAgICAgdGhpcy5hZGRDaGVjayhcInZhbGlkYXRlXCIsIHtcbiAgICAgICAgbmFtZTogXCJWYWxpZGF0ZSBQUiB0aXRsZVwiLFxuICAgICAgICBpZjogUFJfQ0hFQ0ssXG4gICAgICAgIC4uLmdpdGh1Yi5ydW5zT25Db25maWcob3B0aW9ucyksXG4gICAgICAgIHBlcm1pc3Npb25zOiB7XG4gICAgICAgICAgcHVsbFJlcXVlc3RzOiBKb2JQZXJtaXNzaW9uLlJFQUQsXG4gICAgICAgIH0sXG4gICAgICAgIHN0ZXBzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgaWQ6IFwidmFsaWRhdGUtcHItdGl0bGVcIixcbiAgICAgICAgICAgIHVzZXM6IEFjdGlvblJlZnMuQU1BTk5OX0FDVElPTl9TRU1BTlRJQ19QVUxMX1JFUVVFU1QsXG4gICAgICAgICAgICBlbnY6IHtcbiAgICAgICAgICAgICAgR0lUSFVCX1RPS0VOOiBcIiR7eyBzZWNyZXRzLkdJVEhVQl9UT0tFTiB9fVwiLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHdpdGg6IHtcbiAgICAgICAgICAgICAgdHlwZXM6IHR5cGVzLmpvaW4oXCJcXG5cIiksXG4gICAgICAgICAgICAgIC4uLihvcHRzLnNjb3BlcyA/IHsgc2NvcGVzOiBvcHRzLnNjb3Blcy5qb2luKFwiXFxuXCIpIH0gOiB7fSksXG4gICAgICAgICAgICAgIHJlcXVpcmVTY29wZTogb3B0cy5yZXF1aXJlU2NvcGUgPz8gZmFsc2UsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucy5jb250cmlidXRvclN0YXRlbWVudCkge1xuICAgICAgY29uc3Qgb3B0cyA9IG9wdGlvbnMuY29udHJpYnV0b3JTdGF0ZW1lbnRPcHRpb25zID8/IHt9O1xuICAgICAgY29uc3QgdXNlcnMgPSBvcHRzLmV4ZW1wdFVzZXJzID8/IFtdO1xuICAgICAgY29uc3QgbGFiZWxzID0gb3B0cy5leGVtcHRMYWJlbHMgPz8gW107XG5cbiAgICAgIGNvbnN0IGNvbmRpdGlvbnMgPSBbUFJfQ0hFQ0tdO1xuXG4gICAgICBjb25zdCBleGNsdXNpb25zOiBzdHJpbmdbXSA9IFtcbiAgICAgICAgLi4ubGFiZWxzLm1hcChcbiAgICAgICAgICAobCkgPT4gYGNvbnRhaW5zKGdpdGh1Yi5ldmVudC5wdWxsX3JlcXVlc3QubGFiZWxzLioubmFtZSwgJyR7bH0nKWAsXG4gICAgICAgICksXG4gICAgICAgIC4uLnVzZXJzLm1hcCgodSkgPT4gYGdpdGh1Yi5ldmVudC5wdWxsX3JlcXVlc3QudXNlci5sb2dpbiA9PSAnJHt1fSdgKSxcbiAgICAgIF07XG5cbiAgICAgIGlmIChleGNsdXNpb25zLmxlbmd0aCkge1xuICAgICAgICBjb25kaXRpb25zLnB1c2goYCEoJHtleGNsdXNpb25zLmpvaW4oXCIgfHwgXCIpfSlgKTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgc2NyaXB0Qm9keSA9IFtcbiAgICAgICAgJ2NvbnN0IGFjdHVhbCA9IHByb2Nlc3MuZW52LlBSX0JPRFkucmVwbGFjZSgvXFxcXHI/XFxcXG4vZywgXCJcXFxcblwiKTsnLFxuICAgICAgICAnY29uc3QgZXhwZWN0ZWQgPSBwcm9jZXNzLmVudi5FWFBFQ1RFRC5yZXBsYWNlKC9cXFxccj9cXFxcbi9nLCBcIlxcXFxuXCIpOycsXG4gICAgICAgIFwiaWYgKCFhY3R1YWwuaW5jbHVkZXMoZXhwZWN0ZWQpKSB7XCIsXG4gICAgICAgICcgICAgY29uc29sZS5sb2coXCIlalwiLCBhY3R1YWwpOycsXG4gICAgICAgICcgICAgY29uc29sZS5sb2coXCIlalwiLCBleHBlY3RlZCk7JyxcbiAgICAgICAgXCIgICAgY29yZS5zZXRGYWlsZWQoYCR7cHJvY2Vzcy5lbnYuSEVMUH06ICR7ZXhwZWN0ZWR9YCk7XCIsXG4gICAgICAgIFwifVwiLFxuICAgICAgXS5qb2luKFwiXFxuXCIpO1xuXG4gICAgICBjb25zdCBoZWxwTWVzc2FnZSA9XG4gICAgICAgIFwiQ29udHJpYnV0b3Igc3RhdGVtZW50IG1pc3NpbmcgZnJvbSBQUiBkZXNjcmlwdGlvbi4gUGxlYXNlIGluY2x1ZGUgdGhlIGZvbGxvd2luZyB0ZXh0IGluIHRoZSBQUiBkZXNjcmlwdGlvblwiO1xuXG4gICAgICB0aGlzLmFkZENoZWNrKFwiY29udHJpYnV0b3JTdGF0ZW1lbnRcIiwge1xuICAgICAgICBuYW1lOiBcIlJlcXVpcmUgQ29udHJpYnV0b3IgU3RhdGVtZW50XCIsXG4gICAgICAgIC4uLmdpdGh1Yi5ydW5zT25Db25maWcob3B0aW9ucyksXG4gICAgICAgIHBlcm1pc3Npb25zOiB7XG4gICAgICAgICAgcHVsbFJlcXVlc3RzOiBKb2JQZXJtaXNzaW9uLlJFQUQsXG4gICAgICAgIH0sXG4gICAgICAgIGlmOiBjb25kaXRpb25zLmpvaW4oXCIgJiYgXCIpLFxuICAgICAgICBlbnY6IHtcbiAgICAgICAgICBQUl9CT0RZOiBcIiR7eyBnaXRodWIuZXZlbnQucHVsbF9yZXF1ZXN0LmJvZHkgfX1cIixcbiAgICAgICAgICBFWFBFQ1RFRDogb3B0aW9ucy5jb250cmlidXRvclN0YXRlbWVudCxcbiAgICAgICAgICBIRUxQOiBoZWxwTWVzc2FnZSxcbiAgICAgICAgfSxcbiAgICAgICAgc3RlcHM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB1c2VzOiBBY3Rpb25SZWZzLkFDVElPTlNfR0lUSFVCX1NDUklQVCxcbiAgICAgICAgICAgIHdpdGg6IHtcbiAgICAgICAgICAgICAgc2NyaXB0OiBzY3JpcHRCb2R5LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYSBqb2IgdG8gdGhlIHB1bGwgcmVxdWVzdCBsaW50IHdvcmtmbG93IHRoYXQgaXMgcGFydCBvZiB0aGUgY29uc29saWRhdGVkIHN0YXR1cyBjaGVjay5cbiAgICpcbiAgICogVGhlIGpvYiBhbHNvIHJ1bnMgZm9yIG1lcmdlIGdyb3Vwcy4gU2tpcCBpdCB0aGVyZSB3aXRoIGEgam9iIGNvbmRpdGlvbiwgYSBza2lwcGVkIGpvYiBjb3VudHMgYXMgcGFzc2luZy5cbiAgICpcbiAgICogQHBhcmFtIGlkIFRoZSBqb2IgSUQsIHVuaXF1ZSB3aXRoaW4gdGhlIHdvcmtmbG93XG4gICAqIEBwYXJhbSBqb2IgVGhlIGpvYiBkZWZpbml0aW9uXG4gICAqL1xuICBwdWJsaWMgYWRkQ2hlY2soaWQ6IHN0cmluZywgam9iOiBKb2IpOiB2b2lkIHtcbiAgICBpZiAoaWQgPT09IENPTlNPTElEQVRFRF9KT0JfSUQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYFRoZSBjaGVjayBJRCAnJHtDT05TT0xJREFURURfSk9CX0lEfScgaXMgcmVzZXJ2ZWQgZm9yIHRoZSBjb25zb2xpZGF0ZWQgc3RhdHVzIGNoZWNrLiBDaG9vc2UgYSBkaWZmZXJlbnQgSUQuYCxcbiAgICAgICk7XG4gICAgfVxuICAgIHRoaXMuZW5zdXJlV29ya2Zsb3coKS5hZGRKb2JzKHsgW2lkXTogam9iIH0pO1xuICAgIHRoaXMuY2hlY2tJZHMucHVzaChpZCk7XG4gIH1cblxuICBwdWJsaWMgcHJlU3ludGhlc2l6ZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy53b3JrZmxvdyAmJiAodGhpcy5vcHRpb25zLmNvbnNvbGlkYXRlZFN0YXR1c0NoZWNrID8/IHRydWUpKSB7XG4gICAgICB0aGlzLndvcmtmbG93LmFkZEpvYnMoe1xuICAgICAgICBbQ09OU09MSURBVEVEX0pPQl9JRF06IHRoaXMucmVuZGVyQ29uc29saWRhdGVkSm9iKCksXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLmNvbnRyaWJ1dG9yU3RhdGVtZW50KSB7XG4gICAgICAvLyBBcHBlbmQgdG8gUFIgdGVtcGxhdGUgaW4gcHJlU3ludGhlc2l6ZSBzbyBpdCdzIGFsd2F5cyBhdCB0aGUgZW5kIG9mIHRoZSBmaWxlXG4gICAgICBjb25zdCBwclRlbXBsYXRlID1cbiAgICAgICAgUHVsbFJlcXVlc3RUZW1wbGF0ZS5vZih0aGlzLnByb2plY3QpID8/XG4gICAgICAgIHRoaXMuZ2l0aHViLmFkZFB1bGxSZXF1ZXN0VGVtcGxhdGUoKTtcbiAgICAgIHByVGVtcGxhdGU/LmFkZExpbmUoXCJcIik7XG4gICAgICBwclRlbXBsYXRlPy5hZGRMaW5lKFwiLS0tXCIpO1xuICAgICAgcHJUZW1wbGF0ZT8uYWRkTGluZSh0aGlzLm9wdGlvbnMuY29udHJpYnV0b3JTdGF0ZW1lbnQpO1xuICAgICAgcHJUZW1wbGF0ZT8uYWRkTGluZShcIlwiKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGVuc3VyZVdvcmtmbG93KCk6IEdpdGh1YldvcmtmbG93IHtcbiAgICBpZiAodGhpcy53b3JrZmxvdykge1xuICAgICAgcmV0dXJuIHRoaXMud29ya2Zsb3c7XG4gICAgfVxuXG4gICAgY29uc3QgcHVsbFJlcXVlc3RUeXBlczogUHVsbFJlcXVlc3RPcHRpb25zICYgUHVsbFJlcXVlc3RUYXJnZXRPcHRpb25zID0ge1xuICAgICAgdHlwZXM6IFtcbiAgICAgICAgXCJsYWJlbGVkXCIsXG4gICAgICAgIFwib3BlbmVkXCIsXG4gICAgICAgIFwic3luY2hyb25pemVcIixcbiAgICAgICAgXCJyZW9wZW5lZFwiLFxuICAgICAgICBcInJlYWR5X2Zvcl9yZXZpZXdcIixcbiAgICAgICAgXCJlZGl0ZWRcIixcbiAgICAgIF0sXG4gICAgfTtcbiAgICBjb25zdCB0cmlnZ2VyID1cbiAgICAgIHRoaXMub3B0aW9ucy50cmlnZ2VyID8/IFB1bGxSZXF1ZXN0TGludFRyaWdnZXIuUFVMTF9SRVFVRVNUX1RBUkdFVDtcblxuICAgIHRoaXMud29ya2Zsb3cgPSB0aGlzLmdpdGh1Yi5hZGRXb3JrZmxvdyhcInB1bGwtcmVxdWVzdC1saW50XCIpO1xuICAgIHRoaXMud29ya2Zsb3cub24oe1xuICAgICAgLi4uKHRyaWdnZXIgPT09IFB1bGxSZXF1ZXN0TGludFRyaWdnZXIuUFVMTF9SRVFVRVNUXG4gICAgICAgID8geyBwdWxsUmVxdWVzdDogcHVsbFJlcXVlc3RUeXBlcyB9XG4gICAgICAgIDogeyBwdWxsUmVxdWVzdFRhcmdldDogcHVsbFJlcXVlc3RUeXBlcyB9KSxcbiAgICAgIC8vIHJ1biBvbiBtZXJnZSBncm91cCwgYnV0IHVzZSBhIGNvbmRpdGlvbiBsYXRlciB0byBhbHdheXMgc3VjY2VlZFxuICAgICAgLy8gbmVlZGVkIHNvIHRoZSB3b3JrZmxvdyBjYW4gYmUgYSByZXF1aXJlZCBzdGF0dXMgY2hlY2tcbiAgICAgIG1lcmdlR3JvdXA6IHt9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHRoaXMud29ya2Zsb3c7XG4gIH1cblxuICBwcml2YXRlIHJlbmRlckNvbnNvbGlkYXRlZEpvYigpOiBKb2Ige1xuICAgIGNvbnN0IGlkcyA9IHRoaXMuY2hlY2tJZHM7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnRoaXMuZ2l0aHViLnJ1bnNPbkNvbmZpZyh0aGlzLm9wdGlvbnMpLFxuICAgICAgcGVybWlzc2lvbnM6IHt9LFxuICAgICAgbmVlZHM6IGlkcyxcbiAgICAgIGlmOiBcImFsd2F5cygpXCIsXG4gICAgICBzdGVwczogW1xuICAgICAgICAuLi5pZHMubWFwKChpZCkgPT4gKHtcbiAgICAgICAgICBuYW1lOiBgJHtpZH0gcmVzdWx0YCxcbiAgICAgICAgICBydW46IGBlY2hvIFxcJHt7IG5lZWRzLiR7aWR9LnJlc3VsdCB9fWAsXG4gICAgICAgIH0pKSxcbiAgICAgICAge1xuICAgICAgICAgIC8vIENoZWNrcyBhcmUgc2tpcHBlZCBpbiBtZXJnZSBncm91cHMgYW5kIGZvciBleGVtcHQgcHVsbCByZXF1ZXN0cywgd2hpY2ggY291bnRzIGFzIHBhc3NpbmcuXG4gICAgICAgICAgaWY6IGBcXCR7eyAke2lkc1xuICAgICAgICAgICAgLm1hcChcbiAgICAgICAgICAgICAgKGlkKSA9PlxuICAgICAgICAgICAgICAgIGAobmVlZHMuJHtpZH0ucmVzdWx0ICE9ICdzdWNjZXNzJyAmJiBuZWVkcy4ke2lkfS5yZXN1bHQgIT0gJ3NraXBwZWQnKWAsXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuam9pbihcIiB8fCBcIil9IH19YCxcbiAgICAgICAgICBuYW1lOiBcIlNldCBzdGF0dXMgYmFzZWQgb24gcHVsbCByZXF1ZXN0IGNoZWNrc1wiLFxuICAgICAgICAgIHJ1bjogXCJleGl0IDFcIixcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfTtcbiAgfVxufVxuIl19
@@ -9,7 +9,7 @@ const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
9
9
  */
10
10
  class PullRequestSource {
11
11
  condition;
12
- static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.github.PullRequestSource", version: "0.104.23" };
12
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.github.PullRequestSource", version: "0.104.25" };
13
13
  /**
14
14
  * Pull requests from a head branch in this repository.
15
15
  *
@@ -18,7 +18,7 @@ const component_1 = require("../component");
18
18
  * @see https://github.com/actions/stale
19
19
  */
20
20
  class Stale extends component_1.Component {
21
- static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.github.Stale", version: "0.104.23" };
21
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.github.Stale", version: "0.104.25" };
22
22
  constructor(github, options = {}) {
23
23
  super(github.project);
24
24
  const stale = github.addWorkflow("stale");
@@ -13,7 +13,7 @@ const path_1 = require("../util/path");
13
13
  * @implements {Job}
14
14
  */
15
15
  class TaskWorkflowJob extends component_1.Component {
16
- static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.github.TaskWorkflowJob", version: "0.104.23" };
16
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.github.TaskWorkflowJob", version: "0.104.25" };
17
17
  runsOn;
18
18
  runsOnGroup;
19
19
  steps;
@@ -9,7 +9,7 @@ const DEFAULT_JOB_ID = "build";
9
9
  * A GitHub workflow for common build tasks within a project.
10
10
  */
11
11
  class TaskWorkflow extends workflows_1.GithubWorkflow {
12
- static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.github.TaskWorkflow", version: "0.104.23" };
12
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.github.TaskWorkflow", version: "0.104.25" };
13
13
  jobId;
14
14
  artifactsDirectory;
15
15
  constructor(github, options) {
@@ -17,7 +17,7 @@ const RUNNER_TEMP = "${{ runner.temp }}";
17
17
  * A set of utility functions for creating GitHub actions in workflows.
18
18
  */
19
19
  class WorkflowActions {
20
- static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.github.WorkflowActions", version: "0.104.23" };
20
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.github.WorkflowActions", version: "0.104.25" };
21
21
  /**
22
22
  * Creates a .patch file from the current git diff and uploads it as an
23
23
  * artifact. Use `checkoutWithPatch` to download and apply in another job.
@@ -10,7 +10,7 @@ const runner_options_1 = require("../runner-options");
10
10
  * A set of utility functions for creating jobs in GitHub Workflows.
11
11
  */
12
12
  class WorkflowJobs {
13
- static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.github.WorkflowJobs", version: "0.104.23" };
13
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.github.WorkflowJobs", version: "0.104.25" };
14
14
  /**
15
15
  * Creates a pull request with the changes of a patch file.
16
16
  *
@@ -26,7 +26,7 @@ var CheckoutSubmodules;
26
26
  * A collection of very commonly used, individual, GitHub Workflow Job steps.
27
27
  */
28
28
  class WorkflowSteps {
29
- static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.github.WorkflowSteps", version: "0.104.23" };
29
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.github.WorkflowSteps", version: "0.104.25" };
30
30
  /**
31
31
  * Checks out a repository.
32
32
  *