@macedon-technologies/batman 1.21.5 → 1.23.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/.jsii CHANGED
@@ -97,7 +97,7 @@
97
97
  },
98
98
  "name": "@macedon-technologies/batman",
99
99
  "readme": {
100
- "markdown": "# Platform Common Projen\n\nA baseline architecture template for new projects using Projen. This project provides a standardized foundation that includes both frontend and backend components with authentication.\n\n## Project Intention\n\nThis template serves as a starting point for new projects, providing:\n- Consistent project structure and configuration\n- Pre-configured development tooling\n- Integrated authentication system\n- Full-stack application foundation\n\n## Components Created\n\nThe BatmanProject generates:\n\n### Frontend\n- **React Application** - Modern React app with TypeScript\n- **Clerk Authentication** - Integrated user authentication and management\n\n### Backend/Infrastructure\n- **AWS Infrastructure** - CDK-based cloud resources\n- **API Gateway** - RESTful API endpoints\n- **Lambda Functions** - Serverless compute\n- **Database** - Persistent data storage\n\n## Usage Examples\n\n### Basic Project Creation\n\nCreate a `.projenrc.ts` file in your project root:\n\n```typescript\nimport { BatmanProject } from '@macedon-technologies/batman';\n\nconst project = new BatmanProject({\n name: 'my-new-app',\n defaultReleaseBranch: 'main',\n});\n\nproject.synth();\n```\n\nThen run:\n```bash\nnpx projen\n```\n\n### With Custom Configuration\n\nCreate a `.projenrc.ts` file with additional options:\n\n```typescript\nimport { BatmanProject } from '@macedon-technologies/batman';\n\nconst project = new BatmanProject({\n name: 'my-enterprise-app',\n defaultReleaseBranch: 'main',\n description: 'Enterprise application with authentication',\n authorName: 'Your Name',\n authorEmail: 'your.email@company.com',\n});\n\nproject.synth();\n```\n\nThen run:\n```bash\nnpx projen\n```\n\n### Development Workflow\n\n```bash\n# Install dependencies\nyarn install\n\n# Start development server\nyarn dev\n\n# Deploy infrastructure\nyarn deploy\n\n# Run tests\nyarn test\n```"
100
+ "markdown": "# Platform Common Projen\n\nA baseline architecture template for new projects using Projen. This project provides a standardized foundation that includes both frontend and backend components with authentication.\n\n## Project Intention\n\nThis template serves as a starting point for new projects, providing:\n- Consistent project structure and configuration\n- Pre-configured development tooling\n- Integrated authentication system\n- Full-stack application foundation\n\n## Components Created\n\nThe BatmanProject generates:\n\n### Frontend\n- **React Application** - Modern React app with TypeScript\n- **Clerk Authentication** - Integrated user authentication and management\n\n### Backend/Infrastructure\n- **AWS Infrastructure** - CDK-based cloud resources\n- **API Gateway** - RESTful API endpoints\n- **Lambda Functions** - Serverless compute\n- **Database** - Persistent data storage\n\n## Usage Examples\n\n### Basic Project Creation\n\nCreate a `.projenrc.ts` file in your project root:\n\n```typescript\nimport { BatmanProject } from '@macedon-technologies/batman';\n\nconst project = new BatmanProject({\n name: 'my-new-app',\n defaultReleaseBranch: 'main',\n});\n\nproject.synth();\n```\n\nThen run:\n```bash\nnpx projen\n```\n\n### With Custom Configuration\n\nCreate a `.projenrc.ts` file with additional options:\n\n```typescript\nimport { BatmanProject } from '@macedon-technologies/batman';\n\nconst project = new BatmanProject({\n name: 'my-enterprise-app',\n defaultReleaseBranch: 'main',\n description: 'Enterprise application with authentication',\n authorName: 'Your Name',\n authorEmail: 'your.email@company.com',\n});\n\nproject.synth();\n```\n\nThen run:\n```bash\nnpx projen\n```\n\n### Development Workflow\n\n```bash\n# Install dependencies\nyarn install\n\n# Start development server\nyarn dev\n\n# Deploy infrastructure\nyarn deploy\n\n# Run tests\nyarn test\n```\n\n## SoftwareFactoryFiles (standalone, non-Batman projects)\n\n`SoftwareFactoryFiles` is independently exported and can be attached to any\n`projen` `NodeProject` — it does not require `BatmanProject` or\n`BootcampProject`. It generates the `@swamp/software-factory` state machine,\nthe architecture rule registry, the pre-PR attestation gate, the OpenSpec\ntask-completion gate, and the swamp workflows that wire them together.\n\n```typescript\nimport { javascript } from 'projen';\nimport { SoftwareFactoryFiles } from '@macedon-technologies/batman';\n\nconst project = new javascript.NodeProject({\n name: 'my-other-project',\n defaultReleaseBranch: 'main',\n});\n\nnew SoftwareFactoryFiles(project, {\n repoName: 'my-other-project',\n githubOwner: 'my-github-org', // defaults to 'macedon-technologies' if omitted\n baseBranch: 'main', // defaults to 'main'\n});\n\nproject.synth();\n```\n\nAfter running `npx projen`, follow the printed `swamp:bootstrap` task to pull\nthe required swamp extensions and create the project's secrets vault."
101
101
  },
102
102
  "repository": {
103
103
  "type": "git",
@@ -794,7 +794,7 @@
794
794
  },
795
795
  "locationInModule": {
796
796
  "filename": "src/SoftwareFactoryFiles.ts",
797
- "line": 55
797
+ "line": 62
798
798
  },
799
799
  "parameters": [
800
800
  {
@@ -814,7 +814,7 @@
814
814
  "kind": "class",
815
815
  "locationInModule": {
816
816
  "filename": "src/SoftwareFactoryFiles.ts",
817
- "line": 54
817
+ "line": 61
818
818
  },
819
819
  "name": "SoftwareFactoryFiles",
820
820
  "symbolId": "src/SoftwareFactoryFiles:SoftwareFactoryFiles"
@@ -858,7 +858,7 @@
858
858
  "immutable": true,
859
859
  "locationInModule": {
860
860
  "filename": "src/SoftwareFactoryFiles.ts",
861
- "line": 29
861
+ "line": 36
862
862
  },
863
863
  "name": "actionVersions",
864
864
  "optional": true,
@@ -876,13 +876,31 @@
876
876
  "immutable": true,
877
877
  "locationInModule": {
878
878
  "filename": "src/SoftwareFactoryFiles.ts",
879
- "line": 24
879
+ "line": 31
880
880
  },
881
881
  "name": "baseBranch",
882
882
  "optional": true,
883
883
  "type": {
884
884
  "primitive": "string"
885
885
  }
886
+ },
887
+ {
888
+ "abstract": true,
889
+ "docs": {
890
+ "default": "'macedon-technologies'",
891
+ "stability": "stable",
892
+ "summary": "The GitHub org/user the repo lives in."
893
+ },
894
+ "immutable": true,
895
+ "locationInModule": {
896
+ "filename": "src/SoftwareFactoryFiles.ts",
897
+ "line": 24
898
+ },
899
+ "name": "githubOwner",
900
+ "optional": true,
901
+ "type": {
902
+ "primitive": "string"
903
+ }
886
904
  }
887
905
  ],
888
906
  "symbolId": "src/SoftwareFactoryFiles:SoftwareFactoryFilesOptions"
@@ -1247,6 +1265,6 @@
1247
1265
  "symbolId": "src/WorkflowAutoDiscover:WorkflowAutoDiscover"
1248
1266
  }
1249
1267
  },
1250
- "version": "1.21.5",
1251
- "fingerprint": "ZnfyOiP+3KEsv08pG4KCEWTK3Yg10Wjh5HNz4wC1cuE="
1268
+ "version": "1.23.0",
1269
+ "fingerprint": "LorzrvIzWTmXMb/+okQu58rgUaoRcDMyMSN7uHLIh2k="
1252
1270
  }
package/API.md CHANGED
@@ -10589,6 +10589,7 @@ const softwareFactoryFilesOptions: SoftwareFactoryFilesOptions = { ... }
10589
10589
  | <code><a href="#@macedon-technologies/batman.SoftwareFactoryFilesOptions.property.repoName">repoName</a></code> | <code>string</code> | The bare repo name (e.g. `expense-tracker`), used to derive the factory's model names (`<repoName>-factory`, `<repoName>-issues`, `<repoName>-pr`, `<repoName>-shell*`) and vault name (`<repoName>-secrets`). |
10590
10590
  | <code><a href="#@macedon-technologies/batman.SoftwareFactoryFilesOptions.property.actionVersions">actionVersions</a></code> | <code><a href="#@macedon-technologies/batman.WorkflowActionVersions">WorkflowActionVersions</a></code> | Overrides for the pinned action versions used by `verify-attestation.yml`. |
10591
10591
  | <code><a href="#@macedon-technologies/batman.SoftwareFactoryFilesOptions.property.baseBranch">baseBranch</a></code> | <code>string</code> | The branch the factory opens pull requests against. |
10592
+ | <code><a href="#@macedon-technologies/batman.SoftwareFactoryFilesOptions.property.githubOwner">githubOwner</a></code> | <code>string</code> | The GitHub org/user the repo lives in. |
10592
10593
 
10593
10594
  ---
10594
10595
 
@@ -10629,6 +10630,19 @@ The branch the factory opens pull requests against.
10629
10630
 
10630
10631
  ---
10631
10632
 
10633
+ ##### `githubOwner`<sup>Optional</sup> <a name="githubOwner" id="@macedon-technologies/batman.SoftwareFactoryFilesOptions.property.githubOwner"></a>
10634
+
10635
+ ```typescript
10636
+ public readonly githubOwner: string;
10637
+ ```
10638
+
10639
+ - *Type:* string
10640
+ - *Default:* 'macedon-technologies'
10641
+
10642
+ The GitHub org/user the repo lives in.
10643
+
10644
+ ---
10645
+
10632
10646
  ### StagingDeployWorkflowOptions <a name="StagingDeployWorkflowOptions" id="@macedon-technologies/batman.StagingDeployWorkflowOptions"></a>
10633
10647
 
10634
10648
  #### Initializer <a name="Initializer" id="@macedon-technologies/batman.StagingDeployWorkflowOptions.Initializer"></a>
package/README.md CHANGED
@@ -83,4 +83,33 @@ yarn deploy
83
83
 
84
84
  # Run tests
85
85
  yarn test
86
- ```
86
+ ```
87
+
88
+ ## SoftwareFactoryFiles (standalone, non-Batman projects)
89
+
90
+ `SoftwareFactoryFiles` is independently exported and can be attached to any
91
+ `projen` `NodeProject` — it does not require `BatmanProject` or
92
+ `BootcampProject`. It generates the `@swamp/software-factory` state machine,
93
+ the architecture rule registry, the pre-PR attestation gate, the OpenSpec
94
+ task-completion gate, and the swamp workflows that wire them together.
95
+
96
+ ```typescript
97
+ import { javascript } from 'projen';
98
+ import { SoftwareFactoryFiles } from '@macedon-technologies/batman';
99
+
100
+ const project = new javascript.NodeProject({
101
+ name: 'my-other-project',
102
+ defaultReleaseBranch: 'main',
103
+ });
104
+
105
+ new SoftwareFactoryFiles(project, {
106
+ repoName: 'my-other-project',
107
+ githubOwner: 'my-github-org', // defaults to 'macedon-technologies' if omitted
108
+ baseBranch: 'main', // defaults to 'main'
109
+ });
110
+
111
+ project.synth();
112
+ ```
113
+
114
+ After running `npx projen`, follow the printed `swamp:bootstrap` task to pull
115
+ the required swamp extensions and create the project's secrets vault.
@@ -12,7 +12,7 @@ const SoftwareFactoryFiles_1 = require("./SoftwareFactoryFiles");
12
12
  const utils_1 = require("./utils");
13
13
  const ViteReactProject_1 = require("./ViteReactProject");
14
14
  class BatmanProject extends awscdk_1.AwsCdkTypeScriptApp {
15
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@macedon-technologies/batman.BatmanProject", version: "1.21.5" };
15
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@macedon-technologies/batman.BatmanProject", version: "1.23.0" };
16
16
  constructor(options) {
17
17
  super({
18
18
  ...options,
@@ -12,7 +12,7 @@ const SoftwareFactoryFiles_1 = require("./SoftwareFactoryFiles");
12
12
  const utils_1 = require("./utils");
13
13
  const ViteReactProject_1 = require("./ViteReactProject");
14
14
  class BootcampProject extends awscdk_1.AwsCdkTypeScriptApp {
15
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@macedon-technologies/batman.BootcampProject", version: "1.21.5" };
15
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@macedon-technologies/batman.BootcampProject", version: "1.23.0" };
16
16
  constructor(options) {
17
17
  super({
18
18
  ...options,
@@ -4,7 +4,7 @@ exports.CodeOwnersFile = void 0;
4
4
  const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
5
5
  const projen_1 = require("projen");
6
6
  class CodeOwnersFile extends projen_1.TextFile {
7
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@macedon-technologies/batman.CodeOwnersFile", version: "1.21.5" };
7
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@macedon-technologies/batman.CodeOwnersFile", version: "1.23.0" };
8
8
  constructor(project, options = {}) {
9
9
  const defaultOwners = ['* @macedon-technologies/platform', '* @macedon-technologies/ai-development-team'];
10
10
  const allOwners = [...defaultOwners, ...(options.additionalOwners || [])];
@@ -7,7 +7,7 @@ const javascript_1 = require("projen/lib/javascript");
7
7
  const utils_1 = require("./utils");
8
8
  const WorkflowActionVersions_1 = require("./WorkflowActionVersions");
9
9
  class ProductionDeployWorkflow extends projen_1.YamlFile {
10
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@macedon-technologies/batman.ProductionDeployWorkflow", version: "1.21.5" };
10
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@macedon-technologies/batman.ProductionDeployWorkflow", version: "1.23.0" };
11
11
  constructor(project, options) {
12
12
  const packageManager = project.package.packageManager;
13
13
  const actionVersions = (0, WorkflowActionVersions_1.resolveActionVersions)(options.actionVersions);
@@ -7,6 +7,12 @@ export interface SoftwareFactoryFilesOptions {
7
7
  * `<repoName>-shell*`) and vault name (`<repoName>-secrets`).
8
8
  */
9
9
  readonly repoName: string;
10
+ /**
11
+ * The GitHub org/user the repo lives in.
12
+ *
13
+ * @default 'macedon-technologies'
14
+ */
15
+ readonly githubOwner?: string;
10
16
  /**
11
17
  * The branch the factory opens pull requests against.
12
18
  *
@@ -7,7 +7,7 @@ const SoftwareFactoryAttestation_1 = require("./SoftwareFactoryAttestation");
7
7
  const SoftwareFactoryModels_1 = require("./SoftwareFactoryModels");
8
8
  const SoftwareFactoryOpenSpecGates_1 = require("./SoftwareFactoryOpenSpecGates");
9
9
  const SoftwareFactoryWorkflows_1 = require("./SoftwareFactoryWorkflows");
10
- const GITHUB_OWNER = 'macedon-technologies';
10
+ const DEFAULT_GITHUB_OWNER = 'macedon-technologies';
11
11
  /**
12
12
  * Backports exman's swamp "software factory" pattern
13
13
  * (macedon-technologies/exman#13) as generated scaffolding: a
@@ -31,9 +31,10 @@ const GITHUB_OWNER = 'macedon-technologies';
31
31
  * workflows that wire them together) is templated.
32
32
  */
33
33
  class SoftwareFactoryFiles {
34
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@macedon-technologies/batman.SoftwareFactoryFiles", version: "1.21.5" };
34
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@macedon-technologies/batman.SoftwareFactoryFiles", version: "1.23.0" };
35
35
  constructor(project, options) {
36
36
  const { repoName, actionVersions } = options;
37
+ const githubOwner = options.githubOwner || DEFAULT_GITHUB_OWNER;
37
38
  const baseBranch = options.baseBranch || 'main';
38
39
  const secretsVault = `${repoName}-secrets`;
39
40
  // A single redirect only: projen's built-in cross-platform task shell
@@ -43,7 +44,7 @@ class SoftwareFactoryFiles {
43
44
  const swampInitStep = 'command -v swamp >/dev/null && swamp init --tool claude || true';
44
45
  new SoftwareFactoryModels_1.SoftwareFactoryModels(project, {
45
46
  repoName,
46
- githubOwner: GITHUB_OWNER,
47
+ githubOwner,
47
48
  baseBranch,
48
49
  });
49
50
  new SoftwareFactoryArchitectureRules_1.SoftwareFactoryArchitectureRules(project);
@@ -99,4 +100,4 @@ class SoftwareFactoryFiles {
99
100
  }
100
101
  }
101
102
  exports.SoftwareFactoryFiles = SoftwareFactoryFiles;
102
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU29mdHdhcmVGYWN0b3J5RmlsZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvU29mdHdhcmVGYWN0b3J5RmlsZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUNBLHlGQUFzRjtBQUN0Riw2RUFBMEU7QUFDMUUsbUVBQWdFO0FBQ2hFLGlGQUE4RTtBQUM5RSx5RUFBc0U7QUFHdEUsTUFBTSxZQUFZLEdBQUcsc0JBQXNCLENBQUM7QUF1QjVDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FxQkc7QUFDSCxNQUFhLG9CQUFvQjs7SUFDL0IsWUFBWSxPQUFvQixFQUFFLE9BQW9DO1FBQ3BFLE1BQU0sRUFBRSxRQUFRLEVBQUUsY0FBYyxFQUFFLEdBQUcsT0FBTyxDQUFDO1FBQzdDLE1BQU0sVUFBVSxHQUFHLE9BQU8sQ0FBQyxVQUFVLElBQUksTUFBTSxDQUFDO1FBQ2hELE1BQU0sWUFBWSxHQUFHLEdBQUcsUUFBUSxVQUFVLENBQUM7UUFDM0Msc0VBQXNFO1FBQ3RFLHNFQUFzRTtRQUN0RSx1RUFBdUU7UUFDdkUseUVBQXlFO1FBQ3pFLE1BQU0sYUFBYSxHQUFHLGlFQUFpRSxDQUFDO1FBRXhGLElBQUksNkNBQXFCLENBQUMsT0FBTyxFQUFFO1lBQ2pDLFFBQVE7WUFDUixXQUFXLEVBQUUsWUFBWTtZQUN6QixVQUFVO1NBQ1gsQ0FBQyxDQUFDO1FBRUgsSUFBSSxtRUFBZ0MsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUU5QyxJQUFJLHVEQUEwQixDQUFDLE9BQU8sRUFBRSxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUM7UUFFdEQsSUFBSSwyREFBNEIsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUUxQyxJQUFJLG1EQUF3QixDQUFDLE9BQU8sRUFBRSxFQUFFLFFBQVEsRUFBRSxjQUFjLEVBQUUsQ0FBQyxDQUFDO1FBRXBFLE9BQU8sQ0FBQyxPQUFPLENBQUMsdUJBQXVCLEVBQUU7WUFDdkMsV0FBVyxFQUFFLHFGQUFxRjtZQUNsRyxJQUFJLEVBQUUsZ0ZBQWdGO1NBQ3ZGLENBQUMsQ0FBQztRQUVILE9BQU8sQ0FBQyxPQUFPLENBQUMsK0JBQStCLEVBQUU7WUFDL0MsV0FBVyxFQUFFLDJGQUEyRjtZQUN4RyxJQUFJLEVBQUUsdUZBQXVGO1lBQzdGLFdBQVcsRUFBRSxJQUFJO1NBQ2xCLENBQUMsQ0FBQztRQUVILE9BQU8sQ0FBQyxPQUFPLENBQUMsc0JBQXNCLEVBQUU7WUFDdEMsV0FBVyxFQUFFLHdHQUF3RztZQUNySCxJQUFJLEVBQUUscUVBQXFFO1NBQzVFLENBQUMsQ0FBQztRQUVILE9BQU8sQ0FBQyxPQUFPLENBQUMsb0JBQW9CLEVBQUU7WUFDcEMsV0FBVyxFQUFFLHlIQUF5SDtZQUN0SSxJQUFJLEVBQUUsbUVBQW1FO1lBQ3pFLFdBQVcsRUFBRSxJQUFJO1NBQ2xCLENBQUMsQ0FBQztRQUVILE9BQU8sQ0FBQyxPQUFPLENBQUMsaUJBQWlCLEVBQUU7WUFDakMsV0FBVyxFQUFFLDRJQUE0STtZQUN6SixLQUFLLEVBQUU7Z0JBQ0wsRUFBRSxJQUFJLEVBQUUsOENBQThDLEVBQUU7Z0JBQ3hELEVBQUUsSUFBSSxFQUFFLHVDQUF1QyxFQUFFO2dCQUNqRCxFQUFFLElBQUksRUFBRSx3Q0FBd0MsRUFBRTtnQkFDbEQsRUFBRSxJQUFJLEVBQUUsdUNBQXVDLFlBQVksRUFBRSxFQUFFO2dCQUMvRDtvQkFDRSxJQUFJLEVBQUUsK0JBQStCLFlBQVksK0NBQStDO2lCQUNqRzthQUNGO1NBQ0YsQ0FBQyxDQUFDO1FBRUgsd0VBQXdFO1FBQ3hFLHdFQUF3RTtRQUN4RSx5RUFBeUU7UUFDekUsT0FBTyxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ2hELE9BQU8sQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUVsRCx1RUFBdUU7UUFDdkUsd0VBQXdFO1FBQ3hFLHVFQUF1RTtRQUN2RSxtRUFBbUU7UUFDbkUsb0RBQW9EO1FBQ3BELE9BQU8sQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDaEMsT0FBTyxDQUFDLFlBQVksQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1FBQzVDLE9BQU8sQ0FBQyxZQUFZLENBQUMsb0JBQW9CLENBQUMsQ0FBQztRQUMzQyxPQUFPLENBQUMsWUFBWSxDQUFDLDZCQUE2QixDQUFDLENBQUM7UUFDcEQsT0FBTyxDQUFDLFlBQVksQ0FBQyw4QkFBOEIsQ0FBQyxDQUFDO1FBQ3JELE9BQU8sQ0FBQyxZQUFZLENBQUMsOEJBQThCLENBQUMsQ0FBQztJQUN2RCxDQUFDOztBQTdFSCxvREE4RUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOb2RlUHJvamVjdCB9IGZyb20gJ3Byb2plbi9saWIvamF2YXNjcmlwdCc7XG5pbXBvcnQgeyBTb2Z0d2FyZUZhY3RvcnlBcmNoaXRlY3R1cmVSdWxlcyB9IGZyb20gJy4vU29mdHdhcmVGYWN0b3J5QXJjaGl0ZWN0dXJlUnVsZXMnO1xuaW1wb3J0IHsgU29mdHdhcmVGYWN0b3J5QXR0ZXN0YXRpb24gfSBmcm9tICcuL1NvZnR3YXJlRmFjdG9yeUF0dGVzdGF0aW9uJztcbmltcG9ydCB7IFNvZnR3YXJlRmFjdG9yeU1vZGVscyB9IGZyb20gJy4vU29mdHdhcmVGYWN0b3J5TW9kZWxzJztcbmltcG9ydCB7IFNvZnR3YXJlRmFjdG9yeU9wZW5TcGVjR2F0ZXMgfSBmcm9tICcuL1NvZnR3YXJlRmFjdG9yeU9wZW5TcGVjR2F0ZXMnO1xuaW1wb3J0IHsgU29mdHdhcmVGYWN0b3J5V29ya2Zsb3dzIH0gZnJvbSAnLi9Tb2Z0d2FyZUZhY3RvcnlXb3JrZmxvd3MnO1xuaW1wb3J0IHsgV29ya2Zsb3dBY3Rpb25WZXJzaW9ucyB9IGZyb20gJy4vV29ya2Zsb3dBY3Rpb25WZXJzaW9ucyc7XG5cbmNvbnN0IEdJVEhVQl9PV05FUiA9ICdtYWNlZG9uLXRlY2hub2xvZ2llcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU29mdHdhcmVGYWN0b3J5RmlsZXNPcHRpb25zIHtcbiAgLyoqXG4gICAqIFRoZSBiYXJlIHJlcG8gbmFtZSAoZS5nLiBgZXhwZW5zZS10cmFja2VyYCksIHVzZWQgdG8gZGVyaXZlIHRoZSBmYWN0b3J5J3NcbiAgICogbW9kZWwgbmFtZXMgKGA8cmVwb05hbWU+LWZhY3RvcnlgLCBgPHJlcG9OYW1lPi1pc3N1ZXNgLCBgPHJlcG9OYW1lPi1wcmAsXG4gICAqIGA8cmVwb05hbWU+LXNoZWxsKmApIGFuZCB2YXVsdCBuYW1lIChgPHJlcG9OYW1lPi1zZWNyZXRzYCkuXG4gICAqL1xuICByZWFkb25seSByZXBvTmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgYnJhbmNoIHRoZSBmYWN0b3J5IG9wZW5zIHB1bGwgcmVxdWVzdHMgYWdhaW5zdC5cbiAgICpcbiAgICogQGRlZmF1bHQgJ21haW4nXG4gICAqL1xuICByZWFkb25seSBiYXNlQnJhbmNoPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBPdmVycmlkZXMgZm9yIHRoZSBwaW5uZWQgYWN0aW9uIHZlcnNpb25zIHVzZWQgYnkgYHZlcmlmeS1hdHRlc3RhdGlvbi55bWxgLlxuICAgKi9cbiAgcmVhZG9ubHkgYWN0aW9uVmVyc2lvbnM/OiBXb3JrZmxvd0FjdGlvblZlcnNpb25zO1xufVxuXG4vKipcbiAqIEJhY2twb3J0cyBleG1hbidzIHN3YW1wIFwic29mdHdhcmUgZmFjdG9yeVwiIHBhdHRlcm5cbiAqIChtYWNlZG9uLXRlY2hub2xvZ2llcy9leG1hbiMxMykgYXMgZ2VuZXJhdGVkIHNjYWZmb2xkaW5nOiBhXG4gKiBgQHN3YW1wL3NvZnR3YXJlLWZhY3RvcnlgIHN0YXRlIG1hY2hpbmUgdGhhdCBkcml2ZXMgYSBHaXRIdWIgaXNzdWUgZnJvbVxuICogaW50YWtlIHRocm91Z2ggYW4gb3BlbmVkIFBSLCBlbmZvcmNpbmcgT3BlblNwZWMgdXNhZ2UsIGFuIGFyY2hpdGVjdHVyZVxuICogcnVsZSByZWdpc3RyeSwgYW5kIGEgcHJlLVBSIHZlcmlmaWNhdGlvbiBnYXRlIHdob3NlIGF0dGVzdGF0aW9uIGlzXG4gKiByZS1jaGVja2VkIGF0IG1lcmdlIHRpbWUuXG4gKlxuICogV2hhdCBzd2FtcCBpdHNlbGYgd291bGQgZ2VuZXJhdGUgKGV4dGVuc2lvbiBkb2NzIHB1bGxlZCB2aWFcbiAqIGBzd2FtcCBleHRlbnNpb24gcHVsbGAsIGAuc3dhbXAueWFtbGAsIHRoZSB2YXVsdCwgYW5kIHRoZSBcInN3YW1wIG1hbmFnZWRcbiAqIHNlY3Rpb25cIiBpbiBDTEFVREUubWQpIGlzIGRlbGliZXJhdGVseSBOT1QgaGFuZC10ZW1wbGF0ZWQgaGVyZSDigJQgdGhvc2UgYXJlXG4gKiBwcm9kdWNlZCBieSB0aGUgcmVhbCBgc3dhbXBgIENMSS4gYHN3YW1wIGluaXRgIGlzIGlkZW1wb3RlbnQgKGEgbm8tb3AgaWZcbiAqIHRoZSByZXBvIGlzIGFscmVhZHkgaW5pdGlhbGl6ZWQpLCBzbyBpdCdzIHdpcmVkIGludG8gdGhlIHByb2plY3Qnc1xuICogYGluc3RhbGxgL2BpbnN0YWxsOmNpYCB0YXNrcyBhbmQgcnVucyBhdXRvbWF0aWNhbGx5IG9uIGV2ZXJ5IGluc3RhbGwsXG4gKiBndWFyZGVkIHNvIGl0J3MgYSBzaWxlbnQgbm8tb3Agb24gYSBtYWNoaW5lIHdpdGhvdXQgYHN3YW1wYCBvbiBQQVRIIChlLmcuXG4gKiBDSSkuIFRoZSBleHRlbnNpb24gcHVsbHMgYW5kIHZhdWx0IGNyZWF0aW9uIGFyZSBvbmUtdGltZSwgbm90IGlkZW1wb3RlbnRcbiAqIGluIGEgd2F5IHRoYXQncyBzYWZlIHRvIHJlcGVhdCBvbiBldmVyeSBpbnN0YWxsLCBzbyB0aGV5IHN0YXkgaW4gdGhlXG4gKiBgc3dhbXA6Ym9vdHN0cmFwYCB0YXNrIHRoaXMgY29uc3RydWN0IGFkZHMuIE9ubHkgZXhtYW4ncyBvd24gYXV0aG9yZWRcbiAqIGNvbmZpZyAodGhlIGZhY3RvcnkncyBzdGF0ZSBtYWNoaW5lLCB0aGUgYXJjaGl0ZWN0dXJlLXJ1bGUgZW5naW5lLCB0aGVcbiAqIGF0dGVzdGF0aW9uIG1lY2hhbmlzbSwgdGhlIE9wZW5TcGVjIHRhc2stY29tcGxldGlvbiBnYXRlLCBhbmQgdGhlIDMgc3dhbXBcbiAqIHdvcmtmbG93cyB0aGF0IHdpcmUgdGhlbSB0b2dldGhlcikgaXMgdGVtcGxhdGVkLlxuICovXG5leHBvcnQgY2xhc3MgU29mdHdhcmVGYWN0b3J5RmlsZXMge1xuICBjb25zdHJ1Y3Rvcihwcm9qZWN0OiBOb2RlUHJvamVjdCwgb3B0aW9uczogU29mdHdhcmVGYWN0b3J5RmlsZXNPcHRpb25zKSB7XG4gICAgY29uc3QgeyByZXBvTmFtZSwgYWN0aW9uVmVyc2lvbnMgfSA9IG9wdGlvbnM7XG4gICAgY29uc3QgYmFzZUJyYW5jaCA9IG9wdGlvbnMuYmFzZUJyYW5jaCB8fCAnbWFpbic7XG4gICAgY29uc3Qgc2VjcmV0c1ZhdWx0ID0gYCR7cmVwb05hbWV9LXNlY3JldHNgO1xuICAgIC8vIEEgc2luZ2xlIHJlZGlyZWN0IG9ubHk6IHByb2plbidzIGJ1aWx0LWluIGNyb3NzLXBsYXRmb3JtIHRhc2sgc2hlbGxcbiAgICAvLyAoZGF4KSByZWplY3RzIGEgY29tbWFuZCB3aXRoIG1vcmUgdGhhbiBvbmUgcmVkaXJlY3QgKGUuZy4gY29tYmluaW5nXG4gICAgLy8gYD4vZGV2L251bGxgIHdpdGggYDI+JjFgKSB3aXRoIFwiTXVsdGlwbGUgcmVkaXJlY3RzIGFyZSBjdXJyZW50bHkgbm90XG4gICAgLy8gc3VwcG9ydGVkXCIg4oCUIGNvbmZpcm1lZCBieSBkb2dmb29kaW5nIHRoaXMgY29uc3RydWN0IG9uIHRoaXMgdmVyeSByZXBvLlxuICAgIGNvbnN0IHN3YW1wSW5pdFN0ZXAgPSAnY29tbWFuZCAtdiBzd2FtcCA+L2Rldi9udWxsICYmIHN3YW1wIGluaXQgLS10b29sIGNsYXVkZSB8fCB0cnVlJztcblxuICAgIG5ldyBTb2Z0d2FyZUZhY3RvcnlNb2RlbHMocHJvamVjdCwge1xuICAgICAgcmVwb05hbWUsXG4gICAgICBnaXRodWJPd25lcjogR0lUSFVCX09XTkVSLFxuICAgICAgYmFzZUJyYW5jaCxcbiAgICB9KTtcblxuICAgIG5ldyBTb2Z0d2FyZUZhY3RvcnlBcmNoaXRlY3R1cmVSdWxlcyhwcm9qZWN0KTtcblxuICAgIG5ldyBTb2Z0d2FyZUZhY3RvcnlBdHRlc3RhdGlvbihwcm9qZWN0LCB7IHJlcG9OYW1lIH0pO1xuXG4gICAgbmV3IFNvZnR3YXJlRmFjdG9yeU9wZW5TcGVjR2F0ZXMocHJvamVjdCk7XG5cbiAgICBuZXcgU29mdHdhcmVGYWN0b3J5V29ya2Zsb3dzKHByb2plY3QsIHsgcmVwb05hbWUsIGFjdGlvblZlcnNpb25zIH0pO1xuXG4gICAgcHJvamVjdC5hZGRUYXNrKCd2YWxpZGF0ZTphcmNoaXRlY3R1cmUnLCB7XG4gICAgICBkZXNjcmlwdGlvbjogJ1J1biB0aGUgYXJjaGl0ZWN0dXJlIHJ1bGUgcmVnaXN0cnkgKGFyY2hpdGVjdHVyZS1ydWxlcy9ydWxlcy5qc29uKSBhZ2FpbnN0IHRoZSByZXBvJyxcbiAgICAgIGV4ZWM6ICd0cy1ub2RlIC0tcHJvamVjdCBhcmNoaXRlY3R1cmUtcnVsZXMvdHNjb25maWcuanNvbiBhcmNoaXRlY3R1cmUtcnVsZXMvY2hlY2sudHMnLFxuICAgIH0pO1xuXG4gICAgcHJvamVjdC5hZGRUYXNrKCdvcGVuc3BlYzpjaGVjay10YXNrcy1jb21wbGV0ZScsIHtcbiAgICAgIGRlc2NyaXB0aW9uOiAnRmFpbCB1bmxlc3MgZXZlcnkgdGFzayBpbiB0aGUgbmFtZWQgT3BlblNwZWMgY2hhbmdlIGlzIGNvbXBsZXRlICh1c2FnZTogLS0gPGNoYW5nZS1zbHVnPiknLFxuICAgICAgZXhlYzogJ3RzLW5vZGUgLS1wcm9qZWN0IG9wZW5zcGVjLWdhdGVzL3RzY29uZmlnLmpzb24gb3BlbnNwZWMtZ2F0ZXMvY2hlY2stdGFza3MtY29tcGxldGUudHMnLFxuICAgICAgcmVjZWl2ZUFyZ3M6IHRydWUsXG4gICAgfSk7XG5cbiAgICBwcm9qZWN0LmFkZFRhc2soJ2F0dGVzdGF0aW9uOm1hbmlmZXN0Jywge1xuICAgICAgZGVzY3JpcHRpb246ICdQcmludCBTSEEyNTYgY2hlY2tzdW1zIG9mIHRoZSBmaWxlcyBhIFBSIGF0dGVzdGF0aW9uIGlzIHZlcmlmaWVkIGFnYWluc3QgKHNlZSBhdHRlc3RhdGlvbi9tYW5pZmVzdC50cyknLFxuICAgICAgZXhlYzogJ3RzLW5vZGUgLS1wcm9qZWN0IGF0dGVzdGF0aW9uL3RzY29uZmlnLmpzb24gYXR0ZXN0YXRpb24vbWFuaWZlc3QudHMnLFxuICAgIH0pO1xuXG4gICAgcHJvamVjdC5hZGRUYXNrKCdhdHRlc3RhdGlvbjp2ZXJpZnknLCB7XG4gICAgICBkZXNjcmlwdGlvbjogJ1ZlcmlmeSBhIFBSXFwncyBlbWJlZGRlZCBhdHRlc3RhdGlvbi1tYW5pZmVzdCBhZ2FpbnN0IHRoZSBjdXJyZW50IGNoZWNrb3V0ICh1c2FnZTogLS0gLS1ib2R5LWZpbGUgPHBhdGg+IC0tY29tbWl0IDxzaGE+KScsXG4gICAgICBleGVjOiAndHMtbm9kZSAtLXByb2plY3QgYXR0ZXN0YXRpb24vdHNjb25maWcuanNvbiBhdHRlc3RhdGlvbi92ZXJpZnkudHMnLFxuICAgICAgcmVjZWl2ZUFyZ3M6IHRydWUsXG4gICAgfSk7XG5cbiAgICBwcm9qZWN0LmFkZFRhc2soJ3N3YW1wOmJvb3RzdHJhcCcsIHtcbiAgICAgIGRlc2NyaXB0aW9uOiAnT25lLXRpbWUgc2V0dXA6IHB1bGwgdGhlIHNvZnR3YXJlLWZhY3RvcnkvZ2l0aHViIGV4dGVuc2lvbnMgYW5kIGNyZWF0ZSB0aGUgc2VjcmV0cyB2YXVsdCAoc3dhbXAgaW5pdCBpdHNlbGYgYWxyZWFkeSBydW5zIG9uIGV2ZXJ5IGluc3RhbGwpJyxcbiAgICAgIHN0ZXBzOiBbXG4gICAgICAgIHsgZXhlYzogJ3N3YW1wIGV4dGVuc2lvbiBwdWxsIEBzd2FtcC9zb2Z0d2FyZS1mYWN0b3J5JyB9LFxuICAgICAgICB7IGV4ZWM6ICdzd2FtcCBleHRlbnNpb24gcHVsbCBAd2ViZnJhbXAvZ2l0aHViJyB9LFxuICAgICAgICB7IGV4ZWM6ICdzd2FtcCBleHRlbnNpb24gcHVsbCBAZ29vZGNyYWZ0L2dpdGh1YicgfSxcbiAgICAgICAgeyBleGVjOiBgc3dhbXAgdmF1bHQgY3JlYXRlIGxvY2FsX2VuY3J5cHRpb24gJHtzZWNyZXRzVmF1bHR9YCB9LFxuICAgICAgICB7XG4gICAgICAgICAgZXhlYzogYGVjaG8gXCJOZXh0OiBzd2FtcCB2YXVsdCBwdXQgJHtzZWNyZXRzVmF1bHR9IEdJVEhVQl9UT0tFTiAtLXJlZnJlc2gtZnJvbSAnZ2ggYXV0aCB0b2tlbidcImAsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH0pO1xuXG4gICAgLy8gYHN3YW1wIGluaXRgIGlzIHNhZmUgdG8gcmUtcnVuIChpZGVtcG90ZW50IHdoZW4gYWxyZWFkeSBpbml0aWFsaXplZCksXG4gICAgLy8gc28gZXZlcnkgaW5zdGFsbCBrZWVwcyB0aGUgcmVwbyBpbml0aWFsaXplZCB3aXRob3V0IGEgc2VwYXJhdGUgbWFudWFsXG4gICAgLy8gc3RlcCDigJQgaW5jbHVkaW5nIG9uIGEgZnJlc2ggY2xvbmUgdGhhdCBoYXNuJ3QgcnVuIHN3YW1wOmJvb3RzdHJhcCB5ZXQuXG4gICAgcHJvamVjdC5wYWNrYWdlLmluc3RhbGxUYXNrLmV4ZWMoc3dhbXBJbml0U3RlcCk7XG4gICAgcHJvamVjdC5wYWNrYWdlLmluc3RhbGxDaVRhc2suZXhlYyhzd2FtcEluaXRTdGVwKTtcblxuICAgIC8vIE1pcnJvcnMgdGhlIHBhdHRlcm5zIGBzd2FtcCBpbml0YCBpdHNlbGYgd291bGQgYXBwZW5kIHRvIC5naXRpZ25vcmUuXG4gICAgLy8gcHJvamVuJ3MgSWdub3JlRmlsZSBmdWxseSByZWdlbmVyYXRlcyAuZ2l0aWdub3JlIGZyb20gaXRzIG93biB0cmFja2VkXG4gICAgLy8gZW50cmllcyBvbiBldmVyeSBzeW50aCwgc28gYW55dGhpbmcgYHN3YW1wIGluaXRgIGFwcGVuZHMgb3V0LW9mLWJhbmRcbiAgICAvLyBnZXRzIHNpbGVudGx5IHdpcGVkIGJ5IHRoZSBuZXh0IGBucHggcHJvamVuYCBydW4gKGNhdWdodCBieSBDSSdzXG4gICAgLy8gc2VsZi1tdXRhdGlvbiBjaGVjaykgdW5sZXNzIGl0J3MgYWxzbyBhZGRlZCBoZXJlLlxuICAgIHByb2plY3QuYWRkR2l0SWdub3JlKCcuc3dhbXAvJyk7XG4gICAgcHJvamVjdC5hZGRHaXRJZ25vcmUoJy5zd2FtcC1zb3VyY2VzLnlhbWwnKTtcbiAgICBwcm9qZWN0LmFkZEdpdElnbm9yZSgnLmNsYXVkZS93b3JrdHJlZXMvJyk7XG4gICAgcHJvamVjdC5hZGRHaXRJZ25vcmUoJy5jbGF1ZGUvc2V0dGluZ3MubG9jYWwuanNvbicpO1xuICAgIHByb2plY3QuYWRkR2l0SWdub3JlKCcuY2xhdWRlL3NjaGVkdWxlZF90YXNrcy5sb2NrJyk7XG4gICAgcHJvamVjdC5hZGRHaXRJZ25vcmUoJy5jbGF1ZGUvc2NoZWR1bGVkX3Rhc2tzLmpzb24nKTtcbiAgfVxufVxuIl19
103
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU29mdHdhcmVGYWN0b3J5RmlsZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvU29mdHdhcmVGYWN0b3J5RmlsZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUNBLHlGQUFzRjtBQUN0Riw2RUFBMEU7QUFDMUUsbUVBQWdFO0FBQ2hFLGlGQUE4RTtBQUM5RSx5RUFBc0U7QUFHdEUsTUFBTSxvQkFBb0IsR0FBRyxzQkFBc0IsQ0FBQztBQThCcEQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXFCRztBQUNILE1BQWEsb0JBQW9COztJQUMvQixZQUFZLE9BQW9CLEVBQUUsT0FBb0M7UUFDcEUsTUFBTSxFQUFFLFFBQVEsRUFBRSxjQUFjLEVBQUUsR0FBRyxPQUFPLENBQUM7UUFDN0MsTUFBTSxXQUFXLEdBQUcsT0FBTyxDQUFDLFdBQVcsSUFBSSxvQkFBb0IsQ0FBQztRQUNoRSxNQUFNLFVBQVUsR0FBRyxPQUFPLENBQUMsVUFBVSxJQUFJLE1BQU0sQ0FBQztRQUNoRCxNQUFNLFlBQVksR0FBRyxHQUFHLFFBQVEsVUFBVSxDQUFDO1FBQzNDLHNFQUFzRTtRQUN0RSxzRUFBc0U7UUFDdEUsdUVBQXVFO1FBQ3ZFLHlFQUF5RTtRQUN6RSxNQUFNLGFBQWEsR0FBRyxpRUFBaUUsQ0FBQztRQUV4RixJQUFJLDZDQUFxQixDQUFDLE9BQU8sRUFBRTtZQUNqQyxRQUFRO1lBQ1IsV0FBVztZQUNYLFVBQVU7U0FDWCxDQUFDLENBQUM7UUFFSCxJQUFJLG1FQUFnQyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRTlDLElBQUksdURBQTBCLENBQUMsT0FBTyxFQUFFLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztRQUV0RCxJQUFJLDJEQUE0QixDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRTFDLElBQUksbURBQXdCLENBQUMsT0FBTyxFQUFFLEVBQUUsUUFBUSxFQUFFLGNBQWMsRUFBRSxDQUFDLENBQUM7UUFFcEUsT0FBTyxDQUFDLE9BQU8sQ0FBQyx1QkFBdUIsRUFBRTtZQUN2QyxXQUFXLEVBQUUscUZBQXFGO1lBQ2xHLElBQUksRUFBRSxnRkFBZ0Y7U0FDdkYsQ0FBQyxDQUFDO1FBRUgsT0FBTyxDQUFDLE9BQU8sQ0FBQywrQkFBK0IsRUFBRTtZQUMvQyxXQUFXLEVBQUUsMkZBQTJGO1lBQ3hHLElBQUksRUFBRSx1RkFBdUY7WUFDN0YsV0FBVyxFQUFFLElBQUk7U0FDbEIsQ0FBQyxDQUFDO1FBRUgsT0FBTyxDQUFDLE9BQU8sQ0FBQyxzQkFBc0IsRUFBRTtZQUN0QyxXQUFXLEVBQUUsd0dBQXdHO1lBQ3JILElBQUksRUFBRSxxRUFBcUU7U0FDNUUsQ0FBQyxDQUFDO1FBRUgsT0FBTyxDQUFDLE9BQU8sQ0FBQyxvQkFBb0IsRUFBRTtZQUNwQyxXQUFXLEVBQUUseUhBQXlIO1lBQ3RJLElBQUksRUFBRSxtRUFBbUU7WUFDekUsV0FBVyxFQUFFLElBQUk7U0FDbEIsQ0FBQyxDQUFDO1FBRUgsT0FBTyxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsRUFBRTtZQUNqQyxXQUFXLEVBQUUsNElBQTRJO1lBQ3pKLEtBQUssRUFBRTtnQkFDTCxFQUFFLElBQUksRUFBRSw4Q0FBOEMsRUFBRTtnQkFDeEQsRUFBRSxJQUFJLEVBQUUsdUNBQXVDLEVBQUU7Z0JBQ2pELEVBQUUsSUFBSSxFQUFFLHdDQUF3QyxFQUFFO2dCQUNsRCxFQUFFLElBQUksRUFBRSx1Q0FBdUMsWUFBWSxFQUFFLEVBQUU7Z0JBQy9EO29CQUNFLElBQUksRUFBRSwrQkFBK0IsWUFBWSwrQ0FBK0M7aUJBQ2pHO2FBQ0Y7U0FDRixDQUFDLENBQUM7UUFFSCx3RUFBd0U7UUFDeEUsd0VBQXdFO1FBQ3hFLHlFQUF5RTtRQUN6RSxPQUFPLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDaEQsT0FBTyxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBRWxELHVFQUF1RTtRQUN2RSx3RUFBd0U7UUFDeEUsdUVBQXVFO1FBQ3ZFLG1FQUFtRTtRQUNuRSxvREFBb0Q7UUFDcEQsT0FBTyxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNoQyxPQUFPLENBQUMsWUFBWSxDQUFDLHFCQUFxQixDQUFDLENBQUM7UUFDNUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1FBQzNDLE9BQU8sQ0FBQyxZQUFZLENBQUMsNkJBQTZCLENBQUMsQ0FBQztRQUNwRCxPQUFPLENBQUMsWUFBWSxDQUFDLDhCQUE4QixDQUFDLENBQUM7UUFDckQsT0FBTyxDQUFDLFlBQVksQ0FBQyw4QkFBOEIsQ0FBQyxDQUFDO0lBQ3ZELENBQUM7O0FBOUVILG9EQStFQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5vZGVQcm9qZWN0IH0gZnJvbSAncHJvamVuL2xpYi9qYXZhc2NyaXB0JztcbmltcG9ydCB7IFNvZnR3YXJlRmFjdG9yeUFyY2hpdGVjdHVyZVJ1bGVzIH0gZnJvbSAnLi9Tb2Z0d2FyZUZhY3RvcnlBcmNoaXRlY3R1cmVSdWxlcyc7XG5pbXBvcnQgeyBTb2Z0d2FyZUZhY3RvcnlBdHRlc3RhdGlvbiB9IGZyb20gJy4vU29mdHdhcmVGYWN0b3J5QXR0ZXN0YXRpb24nO1xuaW1wb3J0IHsgU29mdHdhcmVGYWN0b3J5TW9kZWxzIH0gZnJvbSAnLi9Tb2Z0d2FyZUZhY3RvcnlNb2RlbHMnO1xuaW1wb3J0IHsgU29mdHdhcmVGYWN0b3J5T3BlblNwZWNHYXRlcyB9IGZyb20gJy4vU29mdHdhcmVGYWN0b3J5T3BlblNwZWNHYXRlcyc7XG5pbXBvcnQgeyBTb2Z0d2FyZUZhY3RvcnlXb3JrZmxvd3MgfSBmcm9tICcuL1NvZnR3YXJlRmFjdG9yeVdvcmtmbG93cyc7XG5pbXBvcnQgeyBXb3JrZmxvd0FjdGlvblZlcnNpb25zIH0gZnJvbSAnLi9Xb3JrZmxvd0FjdGlvblZlcnNpb25zJztcblxuY29uc3QgREVGQVVMVF9HSVRIVUJfT1dORVIgPSAnbWFjZWRvbi10ZWNobm9sb2dpZXMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFNvZnR3YXJlRmFjdG9yeUZpbGVzT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgYmFyZSByZXBvIG5hbWUgKGUuZy4gYGV4cGVuc2UtdHJhY2tlcmApLCB1c2VkIHRvIGRlcml2ZSB0aGUgZmFjdG9yeSdzXG4gICAqIG1vZGVsIG5hbWVzIChgPHJlcG9OYW1lPi1mYWN0b3J5YCwgYDxyZXBvTmFtZT4taXNzdWVzYCwgYDxyZXBvTmFtZT4tcHJgLFxuICAgKiBgPHJlcG9OYW1lPi1zaGVsbCpgKSBhbmQgdmF1bHQgbmFtZSAoYDxyZXBvTmFtZT4tc2VjcmV0c2ApLlxuICAgKi9cbiAgcmVhZG9ubHkgcmVwb05hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIEdpdEh1YiBvcmcvdXNlciB0aGUgcmVwbyBsaXZlcyBpbi5cbiAgICpcbiAgICogQGRlZmF1bHQgJ21hY2Vkb24tdGVjaG5vbG9naWVzJ1xuICAgKi9cbiAgcmVhZG9ubHkgZ2l0aHViT3duZXI/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBicmFuY2ggdGhlIGZhY3Rvcnkgb3BlbnMgcHVsbCByZXF1ZXN0cyBhZ2FpbnN0LlxuICAgKlxuICAgKiBAZGVmYXVsdCAnbWFpbidcbiAgICovXG4gIHJlYWRvbmx5IGJhc2VCcmFuY2g/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIE92ZXJyaWRlcyBmb3IgdGhlIHBpbm5lZCBhY3Rpb24gdmVyc2lvbnMgdXNlZCBieSBgdmVyaWZ5LWF0dGVzdGF0aW9uLnltbGAuXG4gICAqL1xuICByZWFkb25seSBhY3Rpb25WZXJzaW9ucz86IFdvcmtmbG93QWN0aW9uVmVyc2lvbnM7XG59XG5cbi8qKlxuICogQmFja3BvcnRzIGV4bWFuJ3Mgc3dhbXAgXCJzb2Z0d2FyZSBmYWN0b3J5XCIgcGF0dGVyblxuICogKG1hY2Vkb24tdGVjaG5vbG9naWVzL2V4bWFuIzEzKSBhcyBnZW5lcmF0ZWQgc2NhZmZvbGRpbmc6IGFcbiAqIGBAc3dhbXAvc29mdHdhcmUtZmFjdG9yeWAgc3RhdGUgbWFjaGluZSB0aGF0IGRyaXZlcyBhIEdpdEh1YiBpc3N1ZSBmcm9tXG4gKiBpbnRha2UgdGhyb3VnaCBhbiBvcGVuZWQgUFIsIGVuZm9yY2luZyBPcGVuU3BlYyB1c2FnZSwgYW4gYXJjaGl0ZWN0dXJlXG4gKiBydWxlIHJlZ2lzdHJ5LCBhbmQgYSBwcmUtUFIgdmVyaWZpY2F0aW9uIGdhdGUgd2hvc2UgYXR0ZXN0YXRpb24gaXNcbiAqIHJlLWNoZWNrZWQgYXQgbWVyZ2UgdGltZS5cbiAqXG4gKiBXaGF0IHN3YW1wIGl0c2VsZiB3b3VsZCBnZW5lcmF0ZSAoZXh0ZW5zaW9uIGRvY3MgcHVsbGVkIHZpYVxuICogYHN3YW1wIGV4dGVuc2lvbiBwdWxsYCwgYC5zd2FtcC55YW1sYCwgdGhlIHZhdWx0LCBhbmQgdGhlIFwic3dhbXAgbWFuYWdlZFxuICogc2VjdGlvblwiIGluIENMQVVERS5tZCkgaXMgZGVsaWJlcmF0ZWx5IE5PVCBoYW5kLXRlbXBsYXRlZCBoZXJlIOKAlCB0aG9zZSBhcmVcbiAqIHByb2R1Y2VkIGJ5IHRoZSByZWFsIGBzd2FtcGAgQ0xJLiBgc3dhbXAgaW5pdGAgaXMgaWRlbXBvdGVudCAoYSBuby1vcCBpZlxuICogdGhlIHJlcG8gaXMgYWxyZWFkeSBpbml0aWFsaXplZCksIHNvIGl0J3Mgd2lyZWQgaW50byB0aGUgcHJvamVjdCdzXG4gKiBgaW5zdGFsbGAvYGluc3RhbGw6Y2lgIHRhc2tzIGFuZCBydW5zIGF1dG9tYXRpY2FsbHkgb24gZXZlcnkgaW5zdGFsbCxcbiAqIGd1YXJkZWQgc28gaXQncyBhIHNpbGVudCBuby1vcCBvbiBhIG1hY2hpbmUgd2l0aG91dCBgc3dhbXBgIG9uIFBBVEggKGUuZy5cbiAqIENJKS4gVGhlIGV4dGVuc2lvbiBwdWxscyBhbmQgdmF1bHQgY3JlYXRpb24gYXJlIG9uZS10aW1lLCBub3QgaWRlbXBvdGVudFxuICogaW4gYSB3YXkgdGhhdCdzIHNhZmUgdG8gcmVwZWF0IG9uIGV2ZXJ5IGluc3RhbGwsIHNvIHRoZXkgc3RheSBpbiB0aGVcbiAqIGBzd2FtcDpib290c3RyYXBgIHRhc2sgdGhpcyBjb25zdHJ1Y3QgYWRkcy4gT25seSBleG1hbidzIG93biBhdXRob3JlZFxuICogY29uZmlnICh0aGUgZmFjdG9yeSdzIHN0YXRlIG1hY2hpbmUsIHRoZSBhcmNoaXRlY3R1cmUtcnVsZSBlbmdpbmUsIHRoZVxuICogYXR0ZXN0YXRpb24gbWVjaGFuaXNtLCB0aGUgT3BlblNwZWMgdGFzay1jb21wbGV0aW9uIGdhdGUsIGFuZCB0aGUgMyBzd2FtcFxuICogd29ya2Zsb3dzIHRoYXQgd2lyZSB0aGVtIHRvZ2V0aGVyKSBpcyB0ZW1wbGF0ZWQuXG4gKi9cbmV4cG9ydCBjbGFzcyBTb2Z0d2FyZUZhY3RvcnlGaWxlcyB7XG4gIGNvbnN0cnVjdG9yKHByb2plY3Q6IE5vZGVQcm9qZWN0LCBvcHRpb25zOiBTb2Z0d2FyZUZhY3RvcnlGaWxlc09wdGlvbnMpIHtcbiAgICBjb25zdCB7IHJlcG9OYW1lLCBhY3Rpb25WZXJzaW9ucyB9ID0gb3B0aW9ucztcbiAgICBjb25zdCBnaXRodWJPd25lciA9IG9wdGlvbnMuZ2l0aHViT3duZXIgfHwgREVGQVVMVF9HSVRIVUJfT1dORVI7XG4gICAgY29uc3QgYmFzZUJyYW5jaCA9IG9wdGlvbnMuYmFzZUJyYW5jaCB8fCAnbWFpbic7XG4gICAgY29uc3Qgc2VjcmV0c1ZhdWx0ID0gYCR7cmVwb05hbWV9LXNlY3JldHNgO1xuICAgIC8vIEEgc2luZ2xlIHJlZGlyZWN0IG9ubHk6IHByb2plbidzIGJ1aWx0LWluIGNyb3NzLXBsYXRmb3JtIHRhc2sgc2hlbGxcbiAgICAvLyAoZGF4KSByZWplY3RzIGEgY29tbWFuZCB3aXRoIG1vcmUgdGhhbiBvbmUgcmVkaXJlY3QgKGUuZy4gY29tYmluaW5nXG4gICAgLy8gYD4vZGV2L251bGxgIHdpdGggYDI+JjFgKSB3aXRoIFwiTXVsdGlwbGUgcmVkaXJlY3RzIGFyZSBjdXJyZW50bHkgbm90XG4gICAgLy8gc3VwcG9ydGVkXCIg4oCUIGNvbmZpcm1lZCBieSBkb2dmb29kaW5nIHRoaXMgY29uc3RydWN0IG9uIHRoaXMgdmVyeSByZXBvLlxuICAgIGNvbnN0IHN3YW1wSW5pdFN0ZXAgPSAnY29tbWFuZCAtdiBzd2FtcCA+L2Rldi9udWxsICYmIHN3YW1wIGluaXQgLS10b29sIGNsYXVkZSB8fCB0cnVlJztcblxuICAgIG5ldyBTb2Z0d2FyZUZhY3RvcnlNb2RlbHMocHJvamVjdCwge1xuICAgICAgcmVwb05hbWUsXG4gICAgICBnaXRodWJPd25lcixcbiAgICAgIGJhc2VCcmFuY2gsXG4gICAgfSk7XG5cbiAgICBuZXcgU29mdHdhcmVGYWN0b3J5QXJjaGl0ZWN0dXJlUnVsZXMocHJvamVjdCk7XG5cbiAgICBuZXcgU29mdHdhcmVGYWN0b3J5QXR0ZXN0YXRpb24ocHJvamVjdCwgeyByZXBvTmFtZSB9KTtcblxuICAgIG5ldyBTb2Z0d2FyZUZhY3RvcnlPcGVuU3BlY0dhdGVzKHByb2plY3QpO1xuXG4gICAgbmV3IFNvZnR3YXJlRmFjdG9yeVdvcmtmbG93cyhwcm9qZWN0LCB7IHJlcG9OYW1lLCBhY3Rpb25WZXJzaW9ucyB9KTtcblxuICAgIHByb2plY3QuYWRkVGFzaygndmFsaWRhdGU6YXJjaGl0ZWN0dXJlJywge1xuICAgICAgZGVzY3JpcHRpb246ICdSdW4gdGhlIGFyY2hpdGVjdHVyZSBydWxlIHJlZ2lzdHJ5IChhcmNoaXRlY3R1cmUtcnVsZXMvcnVsZXMuanNvbikgYWdhaW5zdCB0aGUgcmVwbycsXG4gICAgICBleGVjOiAndHMtbm9kZSAtLXByb2plY3QgYXJjaGl0ZWN0dXJlLXJ1bGVzL3RzY29uZmlnLmpzb24gYXJjaGl0ZWN0dXJlLXJ1bGVzL2NoZWNrLnRzJyxcbiAgICB9KTtcblxuICAgIHByb2plY3QuYWRkVGFzaygnb3BlbnNwZWM6Y2hlY2stdGFza3MtY29tcGxldGUnLCB7XG4gICAgICBkZXNjcmlwdGlvbjogJ0ZhaWwgdW5sZXNzIGV2ZXJ5IHRhc2sgaW4gdGhlIG5hbWVkIE9wZW5TcGVjIGNoYW5nZSBpcyBjb21wbGV0ZSAodXNhZ2U6IC0tIDxjaGFuZ2Utc2x1Zz4pJyxcbiAgICAgIGV4ZWM6ICd0cy1ub2RlIC0tcHJvamVjdCBvcGVuc3BlYy1nYXRlcy90c2NvbmZpZy5qc29uIG9wZW5zcGVjLWdhdGVzL2NoZWNrLXRhc2tzLWNvbXBsZXRlLnRzJyxcbiAgICAgIHJlY2VpdmVBcmdzOiB0cnVlLFxuICAgIH0pO1xuXG4gICAgcHJvamVjdC5hZGRUYXNrKCdhdHRlc3RhdGlvbjptYW5pZmVzdCcsIHtcbiAgICAgIGRlc2NyaXB0aW9uOiAnUHJpbnQgU0hBMjU2IGNoZWNrc3VtcyBvZiB0aGUgZmlsZXMgYSBQUiBhdHRlc3RhdGlvbiBpcyB2ZXJpZmllZCBhZ2FpbnN0IChzZWUgYXR0ZXN0YXRpb24vbWFuaWZlc3QudHMpJyxcbiAgICAgIGV4ZWM6ICd0cy1ub2RlIC0tcHJvamVjdCBhdHRlc3RhdGlvbi90c2NvbmZpZy5qc29uIGF0dGVzdGF0aW9uL21hbmlmZXN0LnRzJyxcbiAgICB9KTtcblxuICAgIHByb2plY3QuYWRkVGFzaygnYXR0ZXN0YXRpb246dmVyaWZ5Jywge1xuICAgICAgZGVzY3JpcHRpb246ICdWZXJpZnkgYSBQUlxcJ3MgZW1iZWRkZWQgYXR0ZXN0YXRpb24tbWFuaWZlc3QgYWdhaW5zdCB0aGUgY3VycmVudCBjaGVja291dCAodXNhZ2U6IC0tIC0tYm9keS1maWxlIDxwYXRoPiAtLWNvbW1pdCA8c2hhPiknLFxuICAgICAgZXhlYzogJ3RzLW5vZGUgLS1wcm9qZWN0IGF0dGVzdGF0aW9uL3RzY29uZmlnLmpzb24gYXR0ZXN0YXRpb24vdmVyaWZ5LnRzJyxcbiAgICAgIHJlY2VpdmVBcmdzOiB0cnVlLFxuICAgIH0pO1xuXG4gICAgcHJvamVjdC5hZGRUYXNrKCdzd2FtcDpib290c3RyYXAnLCB7XG4gICAgICBkZXNjcmlwdGlvbjogJ09uZS10aW1lIHNldHVwOiBwdWxsIHRoZSBzb2Z0d2FyZS1mYWN0b3J5L2dpdGh1YiBleHRlbnNpb25zIGFuZCBjcmVhdGUgdGhlIHNlY3JldHMgdmF1bHQgKHN3YW1wIGluaXQgaXRzZWxmIGFscmVhZHkgcnVucyBvbiBldmVyeSBpbnN0YWxsKScsXG4gICAgICBzdGVwczogW1xuICAgICAgICB7IGV4ZWM6ICdzd2FtcCBleHRlbnNpb24gcHVsbCBAc3dhbXAvc29mdHdhcmUtZmFjdG9yeScgfSxcbiAgICAgICAgeyBleGVjOiAnc3dhbXAgZXh0ZW5zaW9uIHB1bGwgQHdlYmZyYW1wL2dpdGh1YicgfSxcbiAgICAgICAgeyBleGVjOiAnc3dhbXAgZXh0ZW5zaW9uIHB1bGwgQGdvb2RjcmFmdC9naXRodWInIH0sXG4gICAgICAgIHsgZXhlYzogYHN3YW1wIHZhdWx0IGNyZWF0ZSBsb2NhbF9lbmNyeXB0aW9uICR7c2VjcmV0c1ZhdWx0fWAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGV4ZWM6IGBlY2hvIFwiTmV4dDogc3dhbXAgdmF1bHQgcHV0ICR7c2VjcmV0c1ZhdWx0fSBHSVRIVUJfVE9LRU4gLS1yZWZyZXNoLWZyb20gJ2doIGF1dGggdG9rZW4nXCJgLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9KTtcblxuICAgIC8vIGBzd2FtcCBpbml0YCBpcyBzYWZlIHRvIHJlLXJ1biAoaWRlbXBvdGVudCB3aGVuIGFscmVhZHkgaW5pdGlhbGl6ZWQpLFxuICAgIC8vIHNvIGV2ZXJ5IGluc3RhbGwga2VlcHMgdGhlIHJlcG8gaW5pdGlhbGl6ZWQgd2l0aG91dCBhIHNlcGFyYXRlIG1hbnVhbFxuICAgIC8vIHN0ZXAg4oCUIGluY2x1ZGluZyBvbiBhIGZyZXNoIGNsb25lIHRoYXQgaGFzbid0IHJ1biBzd2FtcDpib290c3RyYXAgeWV0LlxuICAgIHByb2plY3QucGFja2FnZS5pbnN0YWxsVGFzay5leGVjKHN3YW1wSW5pdFN0ZXApO1xuICAgIHByb2plY3QucGFja2FnZS5pbnN0YWxsQ2lUYXNrLmV4ZWMoc3dhbXBJbml0U3RlcCk7XG5cbiAgICAvLyBNaXJyb3JzIHRoZSBwYXR0ZXJucyBgc3dhbXAgaW5pdGAgaXRzZWxmIHdvdWxkIGFwcGVuZCB0byAuZ2l0aWdub3JlLlxuICAgIC8vIHByb2plbidzIElnbm9yZUZpbGUgZnVsbHkgcmVnZW5lcmF0ZXMgLmdpdGlnbm9yZSBmcm9tIGl0cyBvd24gdHJhY2tlZFxuICAgIC8vIGVudHJpZXMgb24gZXZlcnkgc3ludGgsIHNvIGFueXRoaW5nIGBzd2FtcCBpbml0YCBhcHBlbmRzIG91dC1vZi1iYW5kXG4gICAgLy8gZ2V0cyBzaWxlbnRseSB3aXBlZCBieSB0aGUgbmV4dCBgbnB4IHByb2plbmAgcnVuIChjYXVnaHQgYnkgQ0knc1xuICAgIC8vIHNlbGYtbXV0YXRpb24gY2hlY2spIHVubGVzcyBpdCdzIGFsc28gYWRkZWQgaGVyZS5cbiAgICBwcm9qZWN0LmFkZEdpdElnbm9yZSgnLnN3YW1wLycpO1xuICAgIHByb2plY3QuYWRkR2l0SWdub3JlKCcuc3dhbXAtc291cmNlcy55YW1sJyk7XG4gICAgcHJvamVjdC5hZGRHaXRJZ25vcmUoJy5jbGF1ZGUvd29ya3RyZWVzLycpO1xuICAgIHByb2plY3QuYWRkR2l0SWdub3JlKCcuY2xhdWRlL3NldHRpbmdzLmxvY2FsLmpzb24nKTtcbiAgICBwcm9qZWN0LmFkZEdpdElnbm9yZSgnLmNsYXVkZS9zY2hlZHVsZWRfdGFza3MubG9jaycpO1xuICAgIHByb2plY3QuYWRkR2l0SWdub3JlKCcuY2xhdWRlL3NjaGVkdWxlZF90YXNrcy5qc29uJyk7XG4gIH1cbn1cbiJdfQ==
@@ -226,7 +226,10 @@ globalArguments:
226
226
  description: >-
227
227
  Pre-PR verification: build/synth/test/lint plus the architecture
228
228
  rule registry, run before the PR is opened rather than relying on
229
- CI after the fact.
229
+ CI after the fact. If the bound commit needs to change (rebase,
230
+ fixup, human-requested edit) without a real verification failure,
231
+ take the ungated 'rework' transition back to implementing instead
232
+ of recording a fabricated 'fail'.
230
233
  work:
231
234
  mode: workflow
232
235
  workflow:
@@ -246,9 +249,17 @@ globalArguments:
246
249
  gates:
247
250
  - type: evidence-recorded
248
251
  config: { name: verify-run, requireField: { status: failed } }
252
+ - name: rework
253
+ to: implementing
254
+ gates: []
249
255
 
250
256
  - id: open-pr
251
- description: Open the pull request now that pre-PR verification has passed.
257
+ description: >-
258
+ Open the pull request now that pre-PR verification has passed. If
259
+ the bound commit needs to change after entering this stage (e.g.
260
+ main moved and the branch needs a rebase), a human can approve the
261
+ 'rework-approval' gate to take the 'rework' transition back to
262
+ implementing rather than aborting the run.
252
263
  work:
253
264
  mode: interactive
254
265
  systemPrompt: >-
@@ -303,6 +314,11 @@ globalArguments:
303
314
  gates:
304
315
  - type: evidence-recorded
305
316
  config: { name: pr-opened }
317
+ - name: rework
318
+ to: implementing
319
+ gates:
320
+ - type: human-approval
321
+ config: { id: rework-approval }
306
322
 
307
323
  - id: done
308
324
  terminal: true
@@ -322,4 +338,4 @@ methods: {}
322
338
  }
323
339
  }
324
340
  exports.SoftwareFactoryModels = SoftwareFactoryModels;
325
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU29mdHdhcmVGYWN0b3J5TW9kZWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL1NvZnR3YXJlRmFjdG9yeU1vZGVscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxtQ0FBb0M7QUFDcEMsbUNBQW9DO0FBcUJwQzs7Ozs7R0FLRztBQUNILE1BQWEscUJBQXFCO0lBQ2hDLFlBQVksT0FBb0IsRUFBRSxPQUFxQztRQUNyRSxNQUFNLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUUsR0FBRyxPQUFPLENBQUM7UUFDdEQsTUFBTSxJQUFJLEdBQUcsR0FBRyxXQUFXLElBQUksUUFBUSxFQUFFLENBQUM7UUFDMUMsTUFBTSxXQUFXLEdBQUcsR0FBRyxRQUFRLFNBQVMsQ0FBQztRQUN6QyxNQUFNLE9BQU8sR0FBRyxHQUFHLFFBQVEsS0FBSyxDQUFDO1FBQ2pDLE1BQU0sVUFBVSxHQUFHLEdBQUcsUUFBUSxRQUFRLENBQUM7UUFDdkMsTUFBTSxzQkFBc0IsR0FBRyxHQUFHLFFBQVEscUJBQXFCLENBQUM7UUFDaEUsTUFBTSxrQkFBa0IsR0FBRyxHQUFHLFFBQVEsaUJBQWlCLENBQUM7UUFDeEQsTUFBTSxZQUFZLEdBQUcsR0FBRyxRQUFRLFVBQVUsQ0FBQztRQUMzQyxNQUFNLFlBQVksR0FBRyxHQUFHLFFBQVEsVUFBVSxDQUFDO1FBRTNDLElBQUksbUJBQVUsQ0FBQyxPQUFPLEVBQUUsNEJBQTRCLE9BQU8sT0FBTyxFQUFFO1lBQ2xFLFFBQVEsRUFBRTs7TUFFVixJQUFBLG1CQUFVLEdBQUU7UUFDVixPQUFPOzs7OzJCQUlZLFlBQVk7V0FDNUIsV0FBVzs7Q0FFckI7U0FDSSxDQUFDLENBQUM7UUFFSCxJQUFJLG1CQUFVLENBQUMsT0FBTyxFQUFFLDJCQUEyQixXQUFXLE9BQU8sRUFBRTtZQUNyRSxRQUFRLEVBQUU7O01BRVYsSUFBQSxtQkFBVSxHQUFFO1FBQ1YsV0FBVzs7Ozs7Q0FLbEI7U0FDSSxDQUFDLENBQUM7UUFFSCxLQUFLLE1BQU0sSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFLHNCQUFzQixFQUFFLGtCQUFrQixDQUFDLEVBQUUsQ0FBQztZQUM1RSxJQUFJLG1CQUFVLENBQUMsT0FBTyxFQUFFLHdCQUF3QixJQUFJLE9BQU8sRUFBRTtnQkFDM0QsUUFBUSxFQUFFOztNQUVaLElBQUEsbUJBQVUsR0FBRTtRQUNWLElBQUk7Ozs7O0NBS1g7YUFDTSxDQUFDLENBQUM7UUFDTCxDQUFDO1FBRUQsSUFBSSxtQkFBVSxDQUFDLE9BQU8sRUFBRSxrQ0FBa0MsWUFBWSxPQUFPLEVBQUU7WUFDN0UsUUFBUSxFQUFFOztNQUVWLElBQUEsbUJBQVUsR0FBRTtRQUNWLFlBQVk7Ozs7Ozs7Ozs7Ozs7Ozs7OztZQWtCUixJQUFJLGNBQWMsV0FBVzs7WUFFN0IsV0FBVzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O3NEQWlMK0Isa0JBQWtCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7c0JBd0JsRCxPQUFPO2tCQUNYLElBQUk7MkNBQ3FCLFVBQVU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztDQWlDcEQ7U0FDSSxDQUFDLENBQUM7SUFDTCxDQUFDO0NBQ0Y7QUEzVEQsc0RBMlRDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgcmFuZG9tVVVJRCB9IGZyb20gJ2NyeXB0byc7XG5pbXBvcnQgeyBTYW1wbGVGaWxlIH0gZnJvbSAncHJvamVuJztcbmltcG9ydCB7IE5vZGVQcm9qZWN0IH0gZnJvbSAncHJvamVuL2xpYi9qYXZhc2NyaXB0JztcblxuZXhwb3J0IGludGVyZmFjZSBTb2Z0d2FyZUZhY3RvcnlNb2RlbHNPcHRpb25zIHtcbiAgLyoqXG4gICAqIFRoZSBiYXJlIHJlcG8gbmFtZSAoZS5nLiBgZXhwZW5zZS10cmFja2VyYCksIHVzZWQgdG8gZGVyaXZlIG1vZGVsIG5hbWVzXG4gICAqIGxpa2UgYDxyZXBvTmFtZT4tZmFjdG9yeWAsIGA8cmVwb05hbWU+LXNoZWxsYCwgYDxyZXBvTmFtZT4tc2VjcmV0c2AuXG4gICAqL1xuICByZWFkb25seSByZXBvTmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgR2l0SHViIG9yZyB0aGUgcmVwbyBsaXZlcyBpbi5cbiAgICovXG4gIHJlYWRvbmx5IGdpdGh1Yk93bmVyOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBicmFuY2ggdGhlIGZhY3Rvcnkgb3BlbnMgcHVsbCByZXF1ZXN0cyBhZ2FpbnN0LlxuICAgKi9cbiAgcmVhZG9ubHkgYmFzZUJyYW5jaDogc3RyaW5nO1xufVxuXG4vKipcbiAqIFNlZWQgc3dhbXAgbW9kZWwgaW5zdGFuY2VzIHdpcmluZyB0aGUgYEBzd2FtcC9zb2Z0d2FyZS1mYWN0b3J5YCBzdGF0ZVxuICogbWFjaGluZSB0byB0aGlzIHJlcG8ncyBHaXRIdWIgaXNzdWVzL1BScyBhbmQgc2hlbGwgc3RlcHMuIFRoZXNlIGFyZVxuICogYFNhbXBsZUZpbGVgcyAod3JpdHRlbiBvbmNlLCB0aGVuIG93bmVkIGJ5IHRoZSB0ZWFtKSBzaW5jZSB0aGUgZmFjdG9yeSdzXG4gKiBzdGFnZXMvZ2F0ZXMgYXJlIHRoZSBraW5kIG9mIHRoaW5nIGEgdGVhbSB0dW5lcyBmb3IgaXRzIG93biB3b3JrZmxvdy5cbiAqL1xuZXhwb3J0IGNsYXNzIFNvZnR3YXJlRmFjdG9yeU1vZGVscyB7XG4gIGNvbnN0cnVjdG9yKHByb2plY3Q6IE5vZGVQcm9qZWN0LCBvcHRpb25zOiBTb2Z0d2FyZUZhY3RvcnlNb2RlbHNPcHRpb25zKSB7XG4gICAgY29uc3QgeyByZXBvTmFtZSwgZ2l0aHViT3duZXIsIGJhc2VCcmFuY2ggfSA9IG9wdGlvbnM7XG4gICAgY29uc3QgcmVwbyA9IGAke2dpdGh1Yk93bmVyfS8ke3JlcG9OYW1lfWA7XG4gICAgY29uc3QgaXNzdWVzTW9kZWwgPSBgJHtyZXBvTmFtZX0taXNzdWVzYDtcbiAgICBjb25zdCBwck1vZGVsID0gYCR7cmVwb05hbWV9LXByYDtcbiAgICBjb25zdCBzaGVsbE1vZGVsID0gYCR7cmVwb05hbWV9LXNoZWxsYDtcbiAgICBjb25zdCBzaGVsbEFyY2hpdGVjdHVyZU1vZGVsID0gYCR7cmVwb05hbWV9LXNoZWxsLWFyY2hpdGVjdHVyZWA7XG4gICAgY29uc3Qgc2hlbGxNYW5pZmVzdE1vZGVsID0gYCR7cmVwb05hbWV9LXNoZWxsLW1hbmlmZXN0YDtcbiAgICBjb25zdCBzZWNyZXRzVmF1bHQgPSBgJHtyZXBvTmFtZX0tc2VjcmV0c2A7XG4gICAgY29uc3QgZmFjdG9yeU1vZGVsID0gYCR7cmVwb05hbWV9LWZhY3RvcnlgO1xuXG4gICAgbmV3IFNhbXBsZUZpbGUocHJvamVjdCwgYG1vZGVscy9AZ29vZGNyYWZ0L2dpdGh1Yi8ke3ByTW9kZWx9LnlhbWxgLCB7XG4gICAgICBjb250ZW50czogYHR5cGU6ICdAZ29vZGNyYWZ0L2dpdGh1YidcbnR5cGVWZXJzaW9uOiAyMDI2LjA2LjE0LjFcbmlkOiAke3JhbmRvbVVVSUQoKX1cbm5hbWU6ICR7cHJNb2RlbH1cbnZlcnNpb246IDFcbnRhZ3M6IHt9XG5nbG9iYWxBcmd1bWVudHM6XG4gIHRva2VuOiAnXFwke3sgdmF1bHQuZ2V0KCR7c2VjcmV0c1ZhdWx0fSwgR0lUSFVCX1RPS0VOKSB9fSdcbiAgb3duZXI6ICR7Z2l0aHViT3duZXJ9XG5tZXRob2RzOiB7fVxuYCxcbiAgICB9KTtcblxuICAgIG5ldyBTYW1wbGVGaWxlKHByb2plY3QsIGBtb2RlbHMvQHdlYmZyYW1wL2dpdGh1Yi8ke2lzc3Vlc01vZGVsfS55YW1sYCwge1xuICAgICAgY29udGVudHM6IGB0eXBlOiAnQHdlYmZyYW1wL2dpdGh1YidcbnR5cGVWZXJzaW9uOiAyMDI2LjA4LjI4LjFcbmlkOiAke3JhbmRvbVVVSUQoKX1cbm5hbWU6ICR7aXNzdWVzTW9kZWx9XG52ZXJzaW9uOiAxXG50YWdzOiB7fVxuZ2xvYmFsQXJndW1lbnRzOiB7fVxubWV0aG9kczoge31cbmAsXG4gICAgfSk7XG5cbiAgICBmb3IgKGNvbnN0IG5hbWUgb2YgW3NoZWxsTW9kZWwsIHNoZWxsQXJjaGl0ZWN0dXJlTW9kZWwsIHNoZWxsTWFuaWZlc3RNb2RlbF0pIHtcbiAgICAgIG5ldyBTYW1wbGVGaWxlKHByb2plY3QsIGBtb2RlbHMvY29tbWFuZC9zaGVsbC8ke25hbWV9LnlhbWxgLCB7XG4gICAgICAgIGNvbnRlbnRzOiBgdHlwZTogY29tbWFuZC9zaGVsbFxudHlwZVZlcnNpb246IDIwMjYuMDIuMDkuMVxuaWQ6ICR7cmFuZG9tVVVJRCgpfVxubmFtZTogJHtuYW1lfVxudmVyc2lvbjogMVxudGFnczoge31cbmdsb2JhbEFyZ3VtZW50czoge31cbm1ldGhvZHM6IHt9XG5gLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgbmV3IFNhbXBsZUZpbGUocHJvamVjdCwgYG1vZGVscy9Ac3dhbXAvc29mdHdhcmUtZmFjdG9yeS8ke2ZhY3RvcnlNb2RlbH0ueWFtbGAsIHtcbiAgICAgIGNvbnRlbnRzOiBgdHlwZTogJ0Bzd2FtcC9zb2Z0d2FyZS1mYWN0b3J5J1xudHlwZVZlcnNpb246IDIwMjYuMDYuMjQuMVxuaWQ6ICR7cmFuZG9tVVVJRCgpfVxubmFtZTogJHtmYWN0b3J5TW9kZWx9XG52ZXJzaW9uOiAxXG50YWdzOiB7fVxucmVwb3J0czpcbiAgcmVxdWlyZTpcbiAgICAtIG5hbWU6IFwiQHN3YW1wL3NvZnR3YXJlLWZhY3Rvcnkvd29yay1pdGVtLXN1bW1hcnlcIlxuICAgICAgbWV0aG9kczogW3N1bW1hcnldXG5nbG9iYWxBcmd1bWVudHM6XG4gIHN0YWdlczpcbiAgICAtIGlkOiBpbnRha2VcbiAgICAgIGluaXRpYWw6IHRydWVcbiAgICAgIGRlc2NyaXB0aW9uOiA+LVxuICAgICAgICBGZXRjaCB0aGUgR2l0SHViIGlzc3VlIGZvciB0aGlzIHdvcmsgaXRlbSAod29ya0l0ZW0gaXMgdGhlIGJhcmVcbiAgICAgICAgaXNzdWUgbnVtYmVyKSBhbmQgcmVjb3JkIGl0cyBjb250ZXh0LlxuICAgICAgd29yazpcbiAgICAgICAgbW9kZTogaW50ZXJhY3RpdmVcbiAgICAgICAgc3lzdGVtUHJvbXB0OiA+LVxuICAgICAgICAgIEZldGNoIHRoZSBHaXRIdWIgaXNzdWUgbnVtYmVyZWQgXFwke3sgc2VsZi53b3JrSXRlbSB9fSBmb3JcbiAgICAgICAgICAke3JlcG99IHVzaW5nIHRoZSAke2lzc3Vlc01vZGVsfSBtb2RlbFxuICAgICAgICAgIChsaXN0X2lzc3VlcywgdGhlbiBzd2FtcCBkYXRhIHF1ZXJ5IGZpbHRlcmVkIGJ5IG51bWJlciDigJQgc2VlIHRoZVxuICAgICAgICAgICR7aXNzdWVzTW9kZWx9IGRhdGEpLCBhbmQgcmVjb3JkIHRoZSBpc3N1ZS1jb250ZXh0IGFydGlmYWN0LlxuICAgICAgYXJ0aWZhY3RzOlxuICAgICAgICAtIG5hbWU6IGlzc3VlLWNvbnRleHRcbiAgICAgICAgICBzY2hlbWE6XG4gICAgICAgICAgICB0eXBlOiBvYmplY3RcbiAgICAgICAgICAgIHJlcXVpcmVkOiBbbnVtYmVyLCB0aXRsZSwgdXJsXVxuICAgICAgICAgICAgcHJvcGVydGllczpcbiAgICAgICAgICAgICAgbnVtYmVyOiB7IHR5cGU6IGludGVnZXIgfVxuICAgICAgICAgICAgICB0aXRsZTogeyB0eXBlOiBzdHJpbmcsIG1pbkxlbmd0aDogMSB9XG4gICAgICAgICAgICAgIGJvZHk6IHsgdHlwZTogc3RyaW5nIH1cbiAgICAgICAgICAgICAgdXJsOiB7IHR5cGU6IHN0cmluZywgbWluTGVuZ3RoOiAxIH1cbiAgICAgICAgICAgICAgbGFiZWxzOiB7IHR5cGU6IGFycmF5LCBpdGVtczogeyB0eXBlOiBzdHJpbmcgfSB9XG4gICAgICB0cmFuc2l0aW9uczpcbiAgICAgICAgLSBuYW1lOiBzdWJtaXRcbiAgICAgICAgICB0bzogcGxhbm5pbmdcbiAgICAgICAgICBnYXRlczpcbiAgICAgICAgICAgIC0gdHlwZTogYXJ0aWZhY3QtZXhpc3RzXG4gICAgICAgICAgICAgIGNvbmZpZzogeyBhcnRpZmFjdDogaXNzdWUtY29udGV4dCB9XG5cbiAgICAtIGlkOiBwbGFubmluZ1xuICAgICAgZGVzY3JpcHRpb246ID4tXG4gICAgICAgIFR1cm4gdGhlIGlzc3VlIGludG8gYSByZWFsIE9wZW5TcGVjIGNoYW5nZSAocHJvcG9zYWwsIGRlc2lnbixcbiAgICAgICAgc3BlY3MsIHRhc2tzKSDigJQgT3BlblNwZWMncyB0YXNrIGxpc3QgaXMgdGhlIHBsYW4sIG5vdCBhXG4gICAgICAgIGZyZWVmb3JtIGFydGlmYWN0LlxuICAgICAgd29yazpcbiAgICAgICAgbW9kZTogaW50ZXJhY3RpdmVcbiAgICAgICAgc3lzdGVtUHJvbXB0OiA+LVxuICAgICAgICAgIFVzaW5nIHRoZSByZWNvcmRlZCBpc3N1ZS1jb250ZXh0IGFydGlmYWN0LCB1c2UgdGhlXG4gICAgICAgICAgb3BlbnNwZWMtcHJvcG9zZSBza2lsbCB0byBjcmVhdGUgYSBjb21wbGV0ZSBPcGVuU3BlYyBjaGFuZ2VcbiAgICAgICAgICAocHJvcG9zYWwubWQsIGRlc2lnbi5tZCwgc3BlY3Mgd2l0aCBkZWx0YXMsIHRhc2tzLm1kKSBmb3IgdGhpc1xuICAgICAgICAgIHdvcmsgaXRlbSB1bmRlciBvcGVuc3BlYy9jaGFuZ2VzLzxjaGFuZ2VTbHVnPi8g4oCUIGRvIG5vdCB3cml0ZSBhXG4gICAgICAgICAgZnJlZWZvcm0gcGxhbiBpbnN0ZWFkIG9mIHRoaXMuIFRoZW4gcmVjb3JkIHRoZSBwbGFuIGFydGlmYWN0XG4gICAgICAgICAgd2l0aCB0aGUgY2hhbmdlJ3Mgc2x1ZyBhbmQgYSBvbmUtbGluZSBzdW1tYXJ5LlxuICAgICAgYXJ0aWZhY3RzOlxuICAgICAgICAtIG5hbWU6IHBsYW5cbiAgICAgICAgICBzY2hlbWE6XG4gICAgICAgICAgICB0eXBlOiBvYmplY3RcbiAgICAgICAgICAgIHJlcXVpcmVkOiBbY2hhbmdlU2x1Zywgc3VtbWFyeV1cbiAgICAgICAgICAgIHByb3BlcnRpZXM6XG4gICAgICAgICAgICAgIGNoYW5nZVNsdWc6IHsgdHlwZTogc3RyaW5nLCBtaW5MZW5ndGg6IDEgfVxuICAgICAgICAgICAgICBzdW1tYXJ5OiB7IHR5cGU6IHN0cmluZywgbWluTGVuZ3RoOiAxIH1cbiAgICAgIHRyYW5zaXRpb25zOlxuICAgICAgICAtIG5hbWU6IHN1Ym1pdFxuICAgICAgICAgIHRvOiBvcGVuc3BlYy1wbGFuLXZlcmlmeVxuICAgICAgICAgIGdhdGVzOlxuICAgICAgICAgICAgLSB0eXBlOiBhcnRpZmFjdC1leGlzdHNcbiAgICAgICAgICAgICAgY29uZmlnOiB7IGFydGlmYWN0OiBwbGFuIH1cblxuICAgIC0gaWQ6IG9wZW5zcGVjLXBsYW4tdmVyaWZ5XG4gICAgICBkZXNjcmlwdGlvbjogPi1cbiAgICAgICAgVmVyaWZ5IHRoZSBPcGVuU3BlYyBjaGFuZ2UgaXMgcmVhbCBhbmQgd2VsbC1mb3JtZWQgKG5vdCBqdXN0IGFuXG4gICAgICAgIGFydGlmYWN0IGNsYWltaW5nIG9uZSBleGlzdHMpIGJlZm9yZSBpbXBsZW1lbnRhdGlvbiBzdGFydHMuIFJlcXVpcmVzXG4gICAgICAgIGEgaHVtYW4gdG8gYXBwcm92ZSB0aGUgJ2ltcGxlbWVudGF0aW9uLWFwcHJvdmFsJyBnYXRlIGJlZm9yZVxuICAgICAgICBhZHZhbmNpbmcgdG8gaW1wbGVtZW50aW5nLiBBIHJlamVjdCBvbiB0aGF0IGdhdGUgZG9lc24ndCBkZWFkLWVuZFxuICAgICAgICB0aGUgcnVuIOKAlCB0YWtlIHRoZSB1bmdhdGVkICdyZXdvcmsnIHRyYW5zaXRpb24gYmFjayB0byBwbGFubmluZyB0b1xuICAgICAgICBwcm9kdWNlIGEgcmV2aXNlZCBwbGFuIGFuZCBhc2sgYWdhaW4uXG4gICAgICB3b3JrOlxuICAgICAgICBtb2RlOiB3b3JrZmxvd1xuICAgICAgICB3b3JrZmxvdzpcbiAgICAgICAgICBuYW1lOiBvcGVuc3BlYy1wbGFuLXZlcmlmeVxuICAgICAgICAgIGlucHV0czpcbiAgICAgICAgICAgIGNoYW5nZVNsdWc6ICdcXCR7eyBkYXRhLmxhdGVzdChzZWxmLm5hbWUsIFwiYXJ0aWZhY3QtcGxhblwiKS5wYXlsb2FkLmNoYW5nZVNsdWcgfX0nXG4gICAgICAgIHJlc3VsdEV2aWRlbmNlOiBwbGFuLXZlcmlmeS1ydW5cbiAgICAgIHRyYW5zaXRpb25zOlxuICAgICAgICAtIG5hbWU6IHBhc3NcbiAgICAgICAgICB0bzogaW1wbGVtZW50aW5nXG4gICAgICAgICAgZ2F0ZXM6XG4gICAgICAgICAgICAtIHR5cGU6IHdvcmtmbG93LXN1Y2NlZWRlZFxuICAgICAgICAgICAgICBjb25maWc6IHsgd29ya2Zsb3c6IG9wZW5zcGVjLXBsYW4tdmVyaWZ5IH1cbiAgICAgICAgICAgIC0gdHlwZTogaHVtYW4tYXBwcm92YWxcbiAgICAgICAgICAgICAgY29uZmlnOiB7IGlkOiBpbXBsZW1lbnRhdGlvbi1hcHByb3ZhbCB9XG4gICAgICAgIC0gbmFtZTogZmFpbFxuICAgICAgICAgIHRvOiBwbGFubmluZ1xuICAgICAgICAgIGdhdGVzOlxuICAgICAgICAgICAgLSB0eXBlOiBldmlkZW5jZS1yZWNvcmRlZFxuICAgICAgICAgICAgICBjb25maWc6IHsgbmFtZTogcGxhbi12ZXJpZnktcnVuLCByZXF1aXJlRmllbGQ6IHsgc3RhdHVzOiBmYWlsZWQgfSB9XG4gICAgICAgIC0gbmFtZTogcmV3b3JrXG4gICAgICAgICAgdG86IHBsYW5uaW5nXG4gICAgICAgICAgZ2F0ZXM6IFtdXG5cbiAgICAtIGlkOiBpbXBsZW1lbnRpbmdcbiAgICAgIGRlc2NyaXB0aW9uOiBJbXBsZW1lbnQgdGhlIE9wZW5TcGVjIGNoYW5nZSdzIHRhc2tzIG9uIGEgYnJhbmNoLlxuICAgICAgd29yazpcbiAgICAgICAgbW9kZTogaW50ZXJhY3RpdmVcbiAgICAgICAgc3lzdGVtUHJvbXB0OiA+LVxuICAgICAgICAgIFVzZSB0aGUgb3BlbnNwZWMtYXBwbHktY2hhbmdlIHNraWxsIGFnYWluc3QgdGhlIGNoYW5nZSByZWNvcmRlZFxuICAgICAgICAgIGluIHRoZSBwbGFuIGFydGlmYWN0J3MgY2hhbmdlU2x1ZyDigJQgd29yayB0aHJvdWdoIGl0cyB0YXNrcy5tZFxuICAgICAgICAgIG9uZSB0YXNrIGF0IGEgdGltZSwgY2hlY2tpbmcgZWFjaCBvZmYgKFxcYC0gWyBdXFxgIC0+IFxcYC0gW3hdXFxgKSBhc1xuICAgICAgICAgIHlvdSBjb21wbGV0ZSBpdCwgdW50aWwgZXZlcnkgdGFzayBpcyBkb25lLiBDb21taXQgdGhlIHdvcmsgb24gYVxuICAgICAgICAgIGZlYXR1cmUgYnJhbmNoLiBSZWNvcmQgdGhlIGNoYW5nZS1zdW1tYXJ5IGFydGlmYWN0IGFuZCB0aGVcbiAgICAgICAgICBjaGFuZ2UtcmVxdWVzdCBldmlkZW5jZSAoYnJhbmNoIG5hbWUgYW5kIGhlYWQgY29tbWl0IHNoYSDigJQgbm9cbiAgICAgICAgICBQUiB5ZXQsIHRoYXQgaGFwcGVucyBhZnRlciBwcmUtUFIgdmVyaWZpY2F0aW9uIHBhc3NlcykuXG4gICAgICBhcnRpZmFjdHM6XG4gICAgICAgIC0gbmFtZTogY2hhbmdlLXN1bW1hcnlcbiAgICAgICAgICBzY2hlbWE6XG4gICAgICAgICAgICB0eXBlOiBvYmplY3RcbiAgICAgICAgICAgIHJlcXVpcmVkOiBbc3VtbWFyeSwgaGVhZFNoYV1cbiAgICAgICAgICAgIHByb3BlcnRpZXM6XG4gICAgICAgICAgICAgIHN1bW1hcnk6IHsgdHlwZTogc3RyaW5nLCBtaW5MZW5ndGg6IDEgfVxuICAgICAgICAgICAgICBoZWFkU2hhOiB7IHR5cGU6IHN0cmluZywgbWluTGVuZ3RoOiA3IH1cbiAgICAgIGV2aWRlbmNlOlxuICAgICAgICAtIG5hbWU6IGNoYW5nZS1yZXF1ZXN0XG4gICAgICAgICAgc2NoZW1hOlxuICAgICAgICAgICAgdHlwZTogb2JqZWN0XG4gICAgICAgICAgICByZXF1aXJlZDogW2JyYW5jaCwgaGVhZFNoYV1cbiAgICAgICAgICAgIHByb3BlcnRpZXM6XG4gICAgICAgICAgICAgIGJyYW5jaDogeyB0eXBlOiBzdHJpbmcsIG1pbkxlbmd0aDogMSB9XG4gICAgICAgICAgICAgIGhlYWRTaGE6IHsgdHlwZTogc3RyaW5nLCBtaW5MZW5ndGg6IDcgfVxuICAgICAgICAgICAgICB1cmw6IHsgdHlwZTogc3RyaW5nIH1cbiAgICAgIHRyYW5zaXRpb25zOlxuICAgICAgICAtIG5hbWU6IHN1Ym1pdFxuICAgICAgICAgIHRvOiBvcGVuc3BlYy10YXNrcy12ZXJpZnlcbiAgICAgICAgICBnYXRlczpcbiAgICAgICAgICAgIC0gdHlwZTogYXJ0aWZhY3QtZXhpc3RzXG4gICAgICAgICAgICAgIGNvbmZpZzogeyBhcnRpZmFjdDogY2hhbmdlLXN1bW1hcnkgfVxuICAgICAgICAgICAgLSB0eXBlOiBldmlkZW5jZS1yZWNvcmRlZFxuICAgICAgICAgICAgICBjb25maWc6IHsgbmFtZTogY2hhbmdlLXJlcXVlc3QgfVxuXG4gICAgLSBpZDogb3BlbnNwZWMtdGFza3MtdmVyaWZ5XG4gICAgICBkZXNjcmlwdGlvbjogPi1cbiAgICAgICAgVmVyaWZ5IGV2ZXJ5IHRhc2sgaW4gdGhlIE9wZW5TcGVjIGNoYW5nZSBpcyBhY3R1YWxseSBjaGVja2VkIG9mZlxuICAgICAgICBiZWZvcmUgcHJlLVBSIHZlcmlmaWNhdGlvbiBydW5zLlxuICAgICAgd29yazpcbiAgICAgICAgbW9kZTogd29ya2Zsb3dcbiAgICAgICAgd29ya2Zsb3c6XG4gICAgICAgICAgbmFtZTogb3BlbnNwZWMtdGFza3MtdmVyaWZ5XG4gICAgICAgICAgaW5wdXRzOlxuICAgICAgICAgICAgY2hhbmdlU2x1ZzogJ1xcJHt7IGRhdGEubGF0ZXN0KHNlbGYubmFtZSwgXCJhcnRpZmFjdC1wbGFuXCIpLnBheWxvYWQuY2hhbmdlU2x1ZyB9fSdcbiAgICAgICAgcmVzdWx0RXZpZGVuY2U6IHRhc2tzLXZlcmlmeS1ydW5cbiAgICAgIHRyYW5zaXRpb25zOlxuICAgICAgICAtIG5hbWU6IHBhc3NcbiAgICAgICAgICB0bzogcHJlLXByLXZlcmlmeVxuICAgICAgICAgIGdhdGVzOlxuICAgICAgICAgICAgLSB0eXBlOiB3b3JrZmxvdy1zdWNjZWVkZWRcbiAgICAgICAgICAgICAgY29uZmlnOiB7IHdvcmtmbG93OiBvcGVuc3BlYy10YXNrcy12ZXJpZnkgfVxuICAgICAgICAtIG5hbWU6IGZhaWxcbiAgICAgICAgICB0bzogaW1wbGVtZW50aW5nXG4gICAgICAgICAgZ2F0ZXM6XG4gICAgICAgICAgICAtIHR5cGU6IGV2aWRlbmNlLXJlY29yZGVkXG4gICAgICAgICAgICAgIGNvbmZpZzogeyBuYW1lOiB0YXNrcy12ZXJpZnktcnVuLCByZXF1aXJlRmllbGQ6IHsgc3RhdHVzOiBmYWlsZWQgfSB9XG5cbiAgICAtIGlkOiBwcmUtcHItdmVyaWZ5XG4gICAgICBkZXNjcmlwdGlvbjogPi1cbiAgICAgICAgUHJlLVBSIHZlcmlmaWNhdGlvbjogYnVpbGQvc3ludGgvdGVzdC9saW50IHBsdXMgdGhlIGFyY2hpdGVjdHVyZVxuICAgICAgICBydWxlIHJlZ2lzdHJ5LCBydW4gYmVmb3JlIHRoZSBQUiBpcyBvcGVuZWQgcmF0aGVyIHRoYW4gcmVseWluZyBvblxuICAgICAgICBDSSBhZnRlciB0aGUgZmFjdC5cbiAgICAgIHdvcms6XG4gICAgICAgIG1vZGU6IHdvcmtmbG93XG4gICAgICAgIHdvcmtmbG93OlxuICAgICAgICAgIG5hbWU6IHByZS1wci12ZXJpZnlcbiAgICAgICAgICBpbnB1dHM6XG4gICAgICAgICAgICBjb21taXQ6ICdcXCR7eyBkYXRhLmxhdGVzdChzZWxmLm5hbWUsIFwiZXZpZGVuY2UtY2hhbmdlLXJlcXVlc3RcIikucGF5bG9hZC5oZWFkU2hhIH19J1xuICAgICAgICAgICAgYnJhbmNoOiAnXFwke3sgZGF0YS5sYXRlc3Qoc2VsZi5uYW1lLCBcImV2aWRlbmNlLWNoYW5nZS1yZXF1ZXN0XCIpLnBheWxvYWQuYnJhbmNoIH19J1xuICAgICAgICByZXN1bHRFdmlkZW5jZTogdmVyaWZ5LXJ1blxuICAgICAgdHJhbnNpdGlvbnM6XG4gICAgICAgIC0gbmFtZTogcGFzc1xuICAgICAgICAgIHRvOiBvcGVuLXByXG4gICAgICAgICAgZ2F0ZXM6XG4gICAgICAgICAgICAtIHR5cGU6IHdvcmtmbG93LXN1Y2NlZWRlZFxuICAgICAgICAgICAgICBjb25maWc6IHsgd29ya2Zsb3c6IHByZS1wci12ZXJpZnkgfVxuICAgICAgICAtIG5hbWU6IGZhaWxcbiAgICAgICAgICB0bzogaW1wbGVtZW50aW5nXG4gICAgICAgICAgZ2F0ZXM6XG4gICAgICAgICAgICAtIHR5cGU6IGV2aWRlbmNlLXJlY29yZGVkXG4gICAgICAgICAgICAgIGNvbmZpZzogeyBuYW1lOiB2ZXJpZnktcnVuLCByZXF1aXJlRmllbGQ6IHsgc3RhdHVzOiBmYWlsZWQgfSB9XG5cbiAgICAtIGlkOiBvcGVuLXByXG4gICAgICBkZXNjcmlwdGlvbjogT3BlbiB0aGUgcHVsbCByZXF1ZXN0IG5vdyB0aGF0IHByZS1QUiB2ZXJpZmljYXRpb24gaGFzIHBhc3NlZC5cbiAgICAgIHdvcms6XG4gICAgICAgIG1vZGU6IGludGVyYWN0aXZlXG4gICAgICAgIHN5c3RlbVByb21wdDogPi1cbiAgICAgICAgICBCZWZvcmUgb3BlbmluZyB0aGUgUFIsIGZldGNoIHRoZSByZWFsIHByZS1wci12ZXJpZnkgYXR0ZXN0YXRpb25cbiAgICAgICAgICB3aXRoIFxcYHN3YW1wIGRhdGEgZ2V0IC0td29ya2Zsb3cgcHJlLXByLXZlcmlmeVxuICAgICAgICAgIHJlcG9ydC1zd2FtcC12ZXJpZmljYXRpb24tYXR0ZXN0YXRpb24gLS1qc29uXFxgIGFuZCBpbmNsdWRlIGl0c1xuICAgICAgICAgIFxcYGNvbnRlbnRcXGAgdmVyYmF0aW0gKGFzIGEgbWFya2Rvd24gYmxvY2ssIGUuZy4gdW5kZXIgYSBcIlByZS1QUlxuICAgICAgICAgIHZlcmlmaWNhdGlvblwiIGhlYWRpbmcpIGluIHRoZSBQUiBib2R5IOKAlCBuZXZlciBqdXN0IGFzc2VydCBpblxuICAgICAgICAgIHByb3NlIHRoYXQgY2hlY2tzIHBhc3NlZC4gQWxzbyBmZXRjaCB0aGlzIHNhbWUgcnVuJ3MgbWFuaWZlc3Qgc3RlcFxuICAgICAgICAgIG91dHB1dCAoXFxgc3dhbXAgZGF0YSBxdWVyeSAnbW9kZWxOYW1lID09IFwiJHtzaGVsbE1hbmlmZXN0TW9kZWx9XCIgJiZcbiAgICAgICAgICBuYW1lID09IFwicmVzdWx0XCInIC0tc2VsZWN0IGF0dHJpYnV0ZXMuc3Rkb3V0IC0tanNvblxcYCwgdGFrZSB0aGVcbiAgICAgICAgICBsYXRlc3QpIGFuZCBhcHBlbmQgaXQgdG8gdGhlIFBSIGJvZHkgYXNcbiAgICAgICAgICBcXGA8IS0tIGF0dGVzdGF0aW9uLW1hbmlmZXN0IHtcImNvbW1pdFwiOiBcIjxoZWFkU2hhPlwiLCBcInN0YXR1c1wiOlxuICAgICAgICAgIFwic3VjY2VlZGVkXCIsIC4uLnRoZSBtYW5pZmVzdCBzdGVwJ3MgSlNPTiwgc3ByZWFkIGluLi4ufSAtLT5cXGAg4oCUIGFuXG4gICAgICAgICAgSFRNTCBjb21tZW50IHNvIGl0J3MgaW52aXNpYmxlIHdoZW4gcmVuZGVyZWQgYnV0IHN0aWxsIHByZXNlbnQgaW5cbiAgICAgICAgICB0aGUgcmF3IGJvZHkgdGV4dCB2ZXJpZnktYXR0ZXN0YXRpb24ueW1sIHJlYWRzIHZpYSB0aGUgR2l0SHViIEFQSS5cbiAgICAgICAgICBBbHNvIGZldGNoIHRoZSBwbGFuIGFydGlmYWN0J3MgY2hhbmdlU2x1ZyBhbmQgaW5jbHVkZSBhbiBleHBsaWNpdFxuICAgICAgICAgIFwiT3BlblNwZWMgY2hhbmdlXCIgbGluZSBpbiB0aGUgUFIgYm9keSBuYW1pbmcgaXQgYW5kIGl0cyBwYXRoXG4gICAgICAgICAgKFxcYG9wZW5zcGVjL2NoYW5nZXMvPGNoYW5nZVNsdWc+L1xcYCkg4oCUIGV2ZXJ5IFBSIHRoZSBmYWN0b3J5IG9wZW5zXG4gICAgICAgICAgbXVzdCBjYWxsIG91dCB3aGljaCBPcGVuU3BlYyBjaGFuZ2UocykgZHJvdmUgdGhlIHNlc3Npb24sIG5vdFxuICAgICAgICAgIGp1c3QgaW1wbHkgaXQuIElmIHBsYW5uaW5nIGN5Y2xlZCB0aHJvdWdoIG1vcmUgdGhhbiBvbmUgY2hhbmdlXG4gICAgICAgICAgKGEgcmV3b3JrIGxvb3AgcHJvZHVjZWQgYSBuZXcgY2hhbmdlU2x1ZyksIGxpc3QgZXZlcnkgZGlzdGluY3RcbiAgICAgICAgICBjaGFuZ2VTbHVnIHJlY29yZGVkIGFjcm9zcyB0aGUgcnVuJ3MgcGxhbiBhcnRpZmFjdCB2ZXJzaW9ucywgbm90XG4gICAgICAgICAgb25seSB0aGUgbGF0ZXN0LiBUaGUgUFIgdGl0bGUgTVVTVCBzdGFydCB3aXRoIGEgQ29udmVudGlvbmFsXG4gICAgICAgICAgQ29tbWl0cyBwcmVmaXggaW4gdGhlIGZvcm0gXFxgdHlwZShzY29wZSk6IHN1bW1hcnlcXGAg4oCUIFxcYHR5cGVcXGAgaXNcbiAgICAgICAgICBcXGBmZWF0XFxgIGZvciBuZXcgY2FwYWJpbGl0aWVzLCBcXGBmaXhcXGAgZm9yIGJ1ZyBmaXhlcywgb3IgXFxgY2hvcmVcXGBcbiAgICAgICAgICBmb3IgdG9vbGluZy9tYWludGVuYW5jZSB3aXRoIG5vIGJlaGF2aW9yIGNoYW5nZSAoZmFsbCBiYWNrIHRvXG4gICAgICAgICAgXFxgcmVmYWN0b3JcXGAvXFxgZG9jc1xcYC9cXGB0ZXN0XFxgIG9ubHkgaWYgbm9uZSBvZiB0aG9zZSBmaXQpLCBjaG9zZW5cbiAgICAgICAgICBmcm9tIHRoZSBpbnRha2UgaXNzdWUgYW5kIE9wZW5TcGVjIGNoYW5nZShzKTsgXFxgc2NvcGVcXGAgbmFtZXMgdGhlXG4gICAgICAgICAgYWZmZWN0ZWQgcGFja2FnZSAoZS5nLiBcXGBwcm9qZW5cXGAsIFxcYGNsZXJrLWF1dGhvcml6ZXJcXGApLiBUaGlzXG4gICAgICAgICAgcmVwbydzIFBSLWRlcGxveSBhbmQgUFItY2xlYW51cCBhdXRvbWF0aW9uIG9ubHkgdHJpZ2dlciBmb3JcbiAgICAgICAgICB0aXRsZXMgc3RhcnRpbmcgd2l0aCBcXGBmaXhcXGAgb3IgXFxgZmVhdFxcYCwgYW5kIGV2ZXJ5IG1lcmdlZCBQUiBpblxuICAgICAgICAgIHRoaXMgcmVwbyBmb2xsb3dzIHRoaXMgY29udmVudGlvbiDigJQgYW4gdW50eXBlZCB0aXRsZSBicmVha3MgYm90aC5cbiAgICAgICAgICBUaGVuIGNhbGwgJHtwck1vZGVsfSdzIG9wZW5QciBtZXRob2RcbiAgICAgICAgICAocmVwbz0ke3JlcG99LCBoZWFkPTx0aGUgYnJhbmNoIHJlY29yZGVkIGluXG4gICAgICAgICAgY2hhbmdlLXJlcXVlc3QgZXZpZGVuY2U+LCBiYXNlPSR7YmFzZUJyYW5jaH0sIGRyeVJ1bj1mYWxzZSksIHdpdGhcbiAgICAgICAgICB0aXRsZS9ib2R5IHJlZmVyZW5jaW5nIHRoZSBpbnRha2Ugc3RhZ2UncyBpc3N1ZSBudW1iZXIsIHRoZVxuICAgICAgICAgIE9wZW5TcGVjIGNoYW5nZShzKSwgdGhlIGF0dGVzdGF0aW9uIGJsb2NrLCBhbmQgdGhlIG1hbmlmZXN0XG4gICAgICAgICAgY29tbWVudCwgdGhlbiByZWNvcmQgdGhlIHByLW9wZW5lZCBldmlkZW5jZSB3aXRoIHRoZSByZXR1cm5lZCBQUlxuICAgICAgICAgIHVybCBhbmQgbnVtYmVyLlxuICAgICAgZXZpZGVuY2U6XG4gICAgICAgIC0gbmFtZTogcHItb3BlbmVkXG4gICAgICAgICAgc2NoZW1hOlxuICAgICAgICAgICAgdHlwZTogb2JqZWN0XG4gICAgICAgICAgICByZXF1aXJlZDogW3VybCwgbnVtYmVyXVxuICAgICAgICAgICAgcHJvcGVydGllczpcbiAgICAgICAgICAgICAgdXJsOiB7IHR5cGU6IHN0cmluZywgbWluTGVuZ3RoOiAxIH1cbiAgICAgICAgICAgICAgbnVtYmVyOiB7IHR5cGU6IGludGVnZXIgfVxuICAgICAgdHJhbnNpdGlvbnM6XG4gICAgICAgIC0gbmFtZTogc3VibWl0XG4gICAgICAgICAgdG86IGRvbmVcbiAgICAgICAgICBnYXRlczpcbiAgICAgICAgICAgIC0gdHlwZTogZXZpZGVuY2UtcmVjb3JkZWRcbiAgICAgICAgICAgICAgY29uZmlnOiB7IG5hbWU6IHByLW9wZW5lZCB9XG5cbiAgICAtIGlkOiBkb25lXG4gICAgICB0ZXJtaW5hbDogdHJ1ZVxuXG4gICAgLSBpZDogYWJvcnRlZFxuICAgICAgdGVybWluYWw6IHRydWVcblxuICBnbG9iYWxUcmFuc2l0aW9uczpcbiAgICAtIG5hbWU6IGFib3J0XG4gICAgICB0bzogYWJvcnRlZFxuICAgICAgZ2F0ZXM6XG4gICAgICAgIC0gdHlwZTogaHVtYW4tYXBwcm92YWxcbiAgICAgICAgICBjb25maWc6IHsgaWQ6IGFib3J0LWNvbmZpcm1hdGlvbiB9XG5tZXRob2RzOiB7fVxuYCxcbiAgICB9KTtcbiAgfVxufVxuIl19
341
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU29mdHdhcmVGYWN0b3J5TW9kZWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL1NvZnR3YXJlRmFjdG9yeU1vZGVscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxtQ0FBb0M7QUFDcEMsbUNBQW9DO0FBcUJwQzs7Ozs7R0FLRztBQUNILE1BQWEscUJBQXFCO0lBQ2hDLFlBQVksT0FBb0IsRUFBRSxPQUFxQztRQUNyRSxNQUFNLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUUsR0FBRyxPQUFPLENBQUM7UUFDdEQsTUFBTSxJQUFJLEdBQUcsR0FBRyxXQUFXLElBQUksUUFBUSxFQUFFLENBQUM7UUFDMUMsTUFBTSxXQUFXLEdBQUcsR0FBRyxRQUFRLFNBQVMsQ0FBQztRQUN6QyxNQUFNLE9BQU8sR0FBRyxHQUFHLFFBQVEsS0FBSyxDQUFDO1FBQ2pDLE1BQU0sVUFBVSxHQUFHLEdBQUcsUUFBUSxRQUFRLENBQUM7UUFDdkMsTUFBTSxzQkFBc0IsR0FBRyxHQUFHLFFBQVEscUJBQXFCLENBQUM7UUFDaEUsTUFBTSxrQkFBa0IsR0FBRyxHQUFHLFFBQVEsaUJBQWlCLENBQUM7UUFDeEQsTUFBTSxZQUFZLEdBQUcsR0FBRyxRQUFRLFVBQVUsQ0FBQztRQUMzQyxNQUFNLFlBQVksR0FBRyxHQUFHLFFBQVEsVUFBVSxDQUFDO1FBRTNDLElBQUksbUJBQVUsQ0FBQyxPQUFPLEVBQUUsNEJBQTRCLE9BQU8sT0FBTyxFQUFFO1lBQ2xFLFFBQVEsRUFBRTs7TUFFVixJQUFBLG1CQUFVLEdBQUU7UUFDVixPQUFPOzs7OzJCQUlZLFlBQVk7V0FDNUIsV0FBVzs7Q0FFckI7U0FDSSxDQUFDLENBQUM7UUFFSCxJQUFJLG1CQUFVLENBQUMsT0FBTyxFQUFFLDJCQUEyQixXQUFXLE9BQU8sRUFBRTtZQUNyRSxRQUFRLEVBQUU7O01BRVYsSUFBQSxtQkFBVSxHQUFFO1FBQ1YsV0FBVzs7Ozs7Q0FLbEI7U0FDSSxDQUFDLENBQUM7UUFFSCxLQUFLLE1BQU0sSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFLHNCQUFzQixFQUFFLGtCQUFrQixDQUFDLEVBQUUsQ0FBQztZQUM1RSxJQUFJLG1CQUFVLENBQUMsT0FBTyxFQUFFLHdCQUF3QixJQUFJLE9BQU8sRUFBRTtnQkFDM0QsUUFBUSxFQUFFOztNQUVaLElBQUEsbUJBQVUsR0FBRTtRQUNWLElBQUk7Ozs7O0NBS1g7YUFDTSxDQUFDLENBQUM7UUFDTCxDQUFDO1FBRUQsSUFBSSxtQkFBVSxDQUFDLE9BQU8sRUFBRSxrQ0FBa0MsWUFBWSxPQUFPLEVBQUU7WUFDN0UsUUFBUSxFQUFFOztNQUVWLElBQUEsbUJBQVUsR0FBRTtRQUNWLFlBQVk7Ozs7Ozs7Ozs7Ozs7Ozs7OztZQWtCUixJQUFJLGNBQWMsV0FBVzs7WUFFN0IsV0FBVzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7c0RBNEwrQixrQkFBa0I7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztzQkF3QmxELE9BQU87a0JBQ1gsSUFBSTsyQ0FDcUIsVUFBVTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Q0FzQ3BEO1NBQ0ksQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUNGO0FBM1VELHNEQTJVQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHJhbmRvbVVVSUQgfSBmcm9tICdjcnlwdG8nO1xuaW1wb3J0IHsgU2FtcGxlRmlsZSB9IGZyb20gJ3Byb2plbic7XG5pbXBvcnQgeyBOb2RlUHJvamVjdCB9IGZyb20gJ3Byb2plbi9saWIvamF2YXNjcmlwdCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU29mdHdhcmVGYWN0b3J5TW9kZWxzT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgYmFyZSByZXBvIG5hbWUgKGUuZy4gYGV4cGVuc2UtdHJhY2tlcmApLCB1c2VkIHRvIGRlcml2ZSBtb2RlbCBuYW1lc1xuICAgKiBsaWtlIGA8cmVwb05hbWU+LWZhY3RvcnlgLCBgPHJlcG9OYW1lPi1zaGVsbGAsIGA8cmVwb05hbWU+LXNlY3JldHNgLlxuICAgKi9cbiAgcmVhZG9ubHkgcmVwb05hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIEdpdEh1YiBvcmcgdGhlIHJlcG8gbGl2ZXMgaW4uXG4gICAqL1xuICByZWFkb25seSBnaXRodWJPd25lcjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgYnJhbmNoIHRoZSBmYWN0b3J5IG9wZW5zIHB1bGwgcmVxdWVzdHMgYWdhaW5zdC5cbiAgICovXG4gIHJlYWRvbmx5IGJhc2VCcmFuY2g6IHN0cmluZztcbn1cblxuLyoqXG4gKiBTZWVkIHN3YW1wIG1vZGVsIGluc3RhbmNlcyB3aXJpbmcgdGhlIGBAc3dhbXAvc29mdHdhcmUtZmFjdG9yeWAgc3RhdGVcbiAqIG1hY2hpbmUgdG8gdGhpcyByZXBvJ3MgR2l0SHViIGlzc3Vlcy9QUnMgYW5kIHNoZWxsIHN0ZXBzLiBUaGVzZSBhcmVcbiAqIGBTYW1wbGVGaWxlYHMgKHdyaXR0ZW4gb25jZSwgdGhlbiBvd25lZCBieSB0aGUgdGVhbSkgc2luY2UgdGhlIGZhY3Rvcnknc1xuICogc3RhZ2VzL2dhdGVzIGFyZSB0aGUga2luZCBvZiB0aGluZyBhIHRlYW0gdHVuZXMgZm9yIGl0cyBvd24gd29ya2Zsb3cuXG4gKi9cbmV4cG9ydCBjbGFzcyBTb2Z0d2FyZUZhY3RvcnlNb2RlbHMge1xuICBjb25zdHJ1Y3Rvcihwcm9qZWN0OiBOb2RlUHJvamVjdCwgb3B0aW9uczogU29mdHdhcmVGYWN0b3J5TW9kZWxzT3B0aW9ucykge1xuICAgIGNvbnN0IHsgcmVwb05hbWUsIGdpdGh1Yk93bmVyLCBiYXNlQnJhbmNoIH0gPSBvcHRpb25zO1xuICAgIGNvbnN0IHJlcG8gPSBgJHtnaXRodWJPd25lcn0vJHtyZXBvTmFtZX1gO1xuICAgIGNvbnN0IGlzc3Vlc01vZGVsID0gYCR7cmVwb05hbWV9LWlzc3Vlc2A7XG4gICAgY29uc3QgcHJNb2RlbCA9IGAke3JlcG9OYW1lfS1wcmA7XG4gICAgY29uc3Qgc2hlbGxNb2RlbCA9IGAke3JlcG9OYW1lfS1zaGVsbGA7XG4gICAgY29uc3Qgc2hlbGxBcmNoaXRlY3R1cmVNb2RlbCA9IGAke3JlcG9OYW1lfS1zaGVsbC1hcmNoaXRlY3R1cmVgO1xuICAgIGNvbnN0IHNoZWxsTWFuaWZlc3RNb2RlbCA9IGAke3JlcG9OYW1lfS1zaGVsbC1tYW5pZmVzdGA7XG4gICAgY29uc3Qgc2VjcmV0c1ZhdWx0ID0gYCR7cmVwb05hbWV9LXNlY3JldHNgO1xuICAgIGNvbnN0IGZhY3RvcnlNb2RlbCA9IGAke3JlcG9OYW1lfS1mYWN0b3J5YDtcblxuICAgIG5ldyBTYW1wbGVGaWxlKHByb2plY3QsIGBtb2RlbHMvQGdvb2RjcmFmdC9naXRodWIvJHtwck1vZGVsfS55YW1sYCwge1xuICAgICAgY29udGVudHM6IGB0eXBlOiAnQGdvb2RjcmFmdC9naXRodWInXG50eXBlVmVyc2lvbjogMjAyNi4wNi4xNC4xXG5pZDogJHtyYW5kb21VVUlEKCl9XG5uYW1lOiAke3ByTW9kZWx9XG52ZXJzaW9uOiAxXG50YWdzOiB7fVxuZ2xvYmFsQXJndW1lbnRzOlxuICB0b2tlbjogJ1xcJHt7IHZhdWx0LmdldCgke3NlY3JldHNWYXVsdH0sIEdJVEhVQl9UT0tFTikgfX0nXG4gIG93bmVyOiAke2dpdGh1Yk93bmVyfVxubWV0aG9kczoge31cbmAsXG4gICAgfSk7XG5cbiAgICBuZXcgU2FtcGxlRmlsZShwcm9qZWN0LCBgbW9kZWxzL0B3ZWJmcmFtcC9naXRodWIvJHtpc3N1ZXNNb2RlbH0ueWFtbGAsIHtcbiAgICAgIGNvbnRlbnRzOiBgdHlwZTogJ0B3ZWJmcmFtcC9naXRodWInXG50eXBlVmVyc2lvbjogMjAyNi4wOC4yOC4xXG5pZDogJHtyYW5kb21VVUlEKCl9XG5uYW1lOiAke2lzc3Vlc01vZGVsfVxudmVyc2lvbjogMVxudGFnczoge31cbmdsb2JhbEFyZ3VtZW50czoge31cbm1ldGhvZHM6IHt9XG5gLFxuICAgIH0pO1xuXG4gICAgZm9yIChjb25zdCBuYW1lIG9mIFtzaGVsbE1vZGVsLCBzaGVsbEFyY2hpdGVjdHVyZU1vZGVsLCBzaGVsbE1hbmlmZXN0TW9kZWxdKSB7XG4gICAgICBuZXcgU2FtcGxlRmlsZShwcm9qZWN0LCBgbW9kZWxzL2NvbW1hbmQvc2hlbGwvJHtuYW1lfS55YW1sYCwge1xuICAgICAgICBjb250ZW50czogYHR5cGU6IGNvbW1hbmQvc2hlbGxcbnR5cGVWZXJzaW9uOiAyMDI2LjAyLjA5LjFcbmlkOiAke3JhbmRvbVVVSUQoKX1cbm5hbWU6ICR7bmFtZX1cbnZlcnNpb246IDFcbnRhZ3M6IHt9XG5nbG9iYWxBcmd1bWVudHM6IHt9XG5tZXRob2RzOiB7fVxuYCxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIG5ldyBTYW1wbGVGaWxlKHByb2plY3QsIGBtb2RlbHMvQHN3YW1wL3NvZnR3YXJlLWZhY3RvcnkvJHtmYWN0b3J5TW9kZWx9LnlhbWxgLCB7XG4gICAgICBjb250ZW50czogYHR5cGU6ICdAc3dhbXAvc29mdHdhcmUtZmFjdG9yeSdcbnR5cGVWZXJzaW9uOiAyMDI2LjA2LjI0LjFcbmlkOiAke3JhbmRvbVVVSUQoKX1cbm5hbWU6ICR7ZmFjdG9yeU1vZGVsfVxudmVyc2lvbjogMVxudGFnczoge31cbnJlcG9ydHM6XG4gIHJlcXVpcmU6XG4gICAgLSBuYW1lOiBcIkBzd2FtcC9zb2Z0d2FyZS1mYWN0b3J5L3dvcmstaXRlbS1zdW1tYXJ5XCJcbiAgICAgIG1ldGhvZHM6IFtzdW1tYXJ5XVxuZ2xvYmFsQXJndW1lbnRzOlxuICBzdGFnZXM6XG4gICAgLSBpZDogaW50YWtlXG4gICAgICBpbml0aWFsOiB0cnVlXG4gICAgICBkZXNjcmlwdGlvbjogPi1cbiAgICAgICAgRmV0Y2ggdGhlIEdpdEh1YiBpc3N1ZSBmb3IgdGhpcyB3b3JrIGl0ZW0gKHdvcmtJdGVtIGlzIHRoZSBiYXJlXG4gICAgICAgIGlzc3VlIG51bWJlcikgYW5kIHJlY29yZCBpdHMgY29udGV4dC5cbiAgICAgIHdvcms6XG4gICAgICAgIG1vZGU6IGludGVyYWN0aXZlXG4gICAgICAgIHN5c3RlbVByb21wdDogPi1cbiAgICAgICAgICBGZXRjaCB0aGUgR2l0SHViIGlzc3VlIG51bWJlcmVkIFxcJHt7IHNlbGYud29ya0l0ZW0gfX0gZm9yXG4gICAgICAgICAgJHtyZXBvfSB1c2luZyB0aGUgJHtpc3N1ZXNNb2RlbH0gbW9kZWxcbiAgICAgICAgICAobGlzdF9pc3N1ZXMsIHRoZW4gc3dhbXAgZGF0YSBxdWVyeSBmaWx0ZXJlZCBieSBudW1iZXIg4oCUIHNlZSB0aGVcbiAgICAgICAgICAke2lzc3Vlc01vZGVsfSBkYXRhKSwgYW5kIHJlY29yZCB0aGUgaXNzdWUtY29udGV4dCBhcnRpZmFjdC5cbiAgICAgIGFydGlmYWN0czpcbiAgICAgICAgLSBuYW1lOiBpc3N1ZS1jb250ZXh0XG4gICAgICAgICAgc2NoZW1hOlxuICAgICAgICAgICAgdHlwZTogb2JqZWN0XG4gICAgICAgICAgICByZXF1aXJlZDogW251bWJlciwgdGl0bGUsIHVybF1cbiAgICAgICAgICAgIHByb3BlcnRpZXM6XG4gICAgICAgICAgICAgIG51bWJlcjogeyB0eXBlOiBpbnRlZ2VyIH1cbiAgICAgICAgICAgICAgdGl0bGU6IHsgdHlwZTogc3RyaW5nLCBtaW5MZW5ndGg6IDEgfVxuICAgICAgICAgICAgICBib2R5OiB7IHR5cGU6IHN0cmluZyB9XG4gICAgICAgICAgICAgIHVybDogeyB0eXBlOiBzdHJpbmcsIG1pbkxlbmd0aDogMSB9XG4gICAgICAgICAgICAgIGxhYmVsczogeyB0eXBlOiBhcnJheSwgaXRlbXM6IHsgdHlwZTogc3RyaW5nIH0gfVxuICAgICAgdHJhbnNpdGlvbnM6XG4gICAgICAgIC0gbmFtZTogc3VibWl0XG4gICAgICAgICAgdG86IHBsYW5uaW5nXG4gICAgICAgICAgZ2F0ZXM6XG4gICAgICAgICAgICAtIHR5cGU6IGFydGlmYWN0LWV4aXN0c1xuICAgICAgICAgICAgICBjb25maWc6IHsgYXJ0aWZhY3Q6IGlzc3VlLWNvbnRleHQgfVxuXG4gICAgLSBpZDogcGxhbm5pbmdcbiAgICAgIGRlc2NyaXB0aW9uOiA+LVxuICAgICAgICBUdXJuIHRoZSBpc3N1ZSBpbnRvIGEgcmVhbCBPcGVuU3BlYyBjaGFuZ2UgKHByb3Bvc2FsLCBkZXNpZ24sXG4gICAgICAgIHNwZWNzLCB0YXNrcykg4oCUIE9wZW5TcGVjJ3MgdGFzayBsaXN0IGlzIHRoZSBwbGFuLCBub3QgYVxuICAgICAgICBmcmVlZm9ybSBhcnRpZmFjdC5cbiAgICAgIHdvcms6XG4gICAgICAgIG1vZGU6IGludGVyYWN0aXZlXG4gICAgICAgIHN5c3RlbVByb21wdDogPi1cbiAgICAgICAgICBVc2luZyB0aGUgcmVjb3JkZWQgaXNzdWUtY29udGV4dCBhcnRpZmFjdCwgdXNlIHRoZVxuICAgICAgICAgIG9wZW5zcGVjLXByb3Bvc2Ugc2tpbGwgdG8gY3JlYXRlIGEgY29tcGxldGUgT3BlblNwZWMgY2hhbmdlXG4gICAgICAgICAgKHByb3Bvc2FsLm1kLCBkZXNpZ24ubWQsIHNwZWNzIHdpdGggZGVsdGFzLCB0YXNrcy5tZCkgZm9yIHRoaXNcbiAgICAgICAgICB3b3JrIGl0ZW0gdW5kZXIgb3BlbnNwZWMvY2hhbmdlcy88Y2hhbmdlU2x1Zz4vIOKAlCBkbyBub3Qgd3JpdGUgYVxuICAgICAgICAgIGZyZWVmb3JtIHBsYW4gaW5zdGVhZCBvZiB0aGlzLiBUaGVuIHJlY29yZCB0aGUgcGxhbiBhcnRpZmFjdFxuICAgICAgICAgIHdpdGggdGhlIGNoYW5nZSdzIHNsdWcgYW5kIGEgb25lLWxpbmUgc3VtbWFyeS5cbiAgICAgIGFydGlmYWN0czpcbiAgICAgICAgLSBuYW1lOiBwbGFuXG4gICAgICAgICAgc2NoZW1hOlxuICAgICAgICAgICAgdHlwZTogb2JqZWN0XG4gICAgICAgICAgICByZXF1aXJlZDogW2NoYW5nZVNsdWcsIHN1bW1hcnldXG4gICAgICAgICAgICBwcm9wZXJ0aWVzOlxuICAgICAgICAgICAgICBjaGFuZ2VTbHVnOiB7IHR5cGU6IHN0cmluZywgbWluTGVuZ3RoOiAxIH1cbiAgICAgICAgICAgICAgc3VtbWFyeTogeyB0eXBlOiBzdHJpbmcsIG1pbkxlbmd0aDogMSB9XG4gICAgICB0cmFuc2l0aW9uczpcbiAgICAgICAgLSBuYW1lOiBzdWJtaXRcbiAgICAgICAgICB0bzogb3BlbnNwZWMtcGxhbi12ZXJpZnlcbiAgICAgICAgICBnYXRlczpcbiAgICAgICAgICAgIC0gdHlwZTogYXJ0aWZhY3QtZXhpc3RzXG4gICAgICAgICAgICAgIGNvbmZpZzogeyBhcnRpZmFjdDogcGxhbiB9XG5cbiAgICAtIGlkOiBvcGVuc3BlYy1wbGFuLXZlcmlmeVxuICAgICAgZGVzY3JpcHRpb246ID4tXG4gICAgICAgIFZlcmlmeSB0aGUgT3BlblNwZWMgY2hhbmdlIGlzIHJlYWwgYW5kIHdlbGwtZm9ybWVkIChub3QganVzdCBhblxuICAgICAgICBhcnRpZmFjdCBjbGFpbWluZyBvbmUgZXhpc3RzKSBiZWZvcmUgaW1wbGVtZW50YXRpb24gc3RhcnRzLiBSZXF1aXJlc1xuICAgICAgICBhIGh1bWFuIHRvIGFwcHJvdmUgdGhlICdpbXBsZW1lbnRhdGlvbi1hcHByb3ZhbCcgZ2F0ZSBiZWZvcmVcbiAgICAgICAgYWR2YW5jaW5nIHRvIGltcGxlbWVudGluZy4gQSByZWplY3Qgb24gdGhhdCBnYXRlIGRvZXNuJ3QgZGVhZC1lbmRcbiAgICAgICAgdGhlIHJ1biDigJQgdGFrZSB0aGUgdW5nYXRlZCAncmV3b3JrJyB0cmFuc2l0aW9uIGJhY2sgdG8gcGxhbm5pbmcgdG9cbiAgICAgICAgcHJvZHVjZSBhIHJldmlzZWQgcGxhbiBhbmQgYXNrIGFnYWluLlxuICAgICAgd29yazpcbiAgICAgICAgbW9kZTogd29ya2Zsb3dcbiAgICAgICAgd29ya2Zsb3c6XG4gICAgICAgICAgbmFtZTogb3BlbnNwZWMtcGxhbi12ZXJpZnlcbiAgICAgICAgICBpbnB1dHM6XG4gICAgICAgICAgICBjaGFuZ2VTbHVnOiAnXFwke3sgZGF0YS5sYXRlc3Qoc2VsZi5uYW1lLCBcImFydGlmYWN0LXBsYW5cIikucGF5bG9hZC5jaGFuZ2VTbHVnIH19J1xuICAgICAgICByZXN1bHRFdmlkZW5jZTogcGxhbi12ZXJpZnktcnVuXG4gICAgICB0cmFuc2l0aW9uczpcbiAgICAgICAgLSBuYW1lOiBwYXNzXG4gICAgICAgICAgdG86IGltcGxlbWVudGluZ1xuICAgICAgICAgIGdhdGVzOlxuICAgICAgICAgICAgLSB0eXBlOiB3b3JrZmxvdy1zdWNjZWVkZWRcbiAgICAgICAgICAgICAgY29uZmlnOiB7IHdvcmtmbG93OiBvcGVuc3BlYy1wbGFuLXZlcmlmeSB9XG4gICAgICAgICAgICAtIHR5cGU6IGh1bWFuLWFwcHJvdmFsXG4gICAgICAgICAgICAgIGNvbmZpZzogeyBpZDogaW1wbGVtZW50YXRpb24tYXBwcm92YWwgfVxuICAgICAgICAtIG5hbWU6IGZhaWxcbiAgICAgICAgICB0bzogcGxhbm5pbmdcbiAgICAgICAgICBnYXRlczpcbiAgICAgICAgICAgIC0gdHlwZTogZXZpZGVuY2UtcmVjb3JkZWRcbiAgICAgICAgICAgICAgY29uZmlnOiB7IG5hbWU6IHBsYW4tdmVyaWZ5LXJ1biwgcmVxdWlyZUZpZWxkOiB7IHN0YXR1czogZmFpbGVkIH0gfVxuICAgICAgICAtIG5hbWU6IHJld29ya1xuICAgICAgICAgIHRvOiBwbGFubmluZ1xuICAgICAgICAgIGdhdGVzOiBbXVxuXG4gICAgLSBpZDogaW1wbGVtZW50aW5nXG4gICAgICBkZXNjcmlwdGlvbjogSW1wbGVtZW50IHRoZSBPcGVuU3BlYyBjaGFuZ2UncyB0YXNrcyBvbiBhIGJyYW5jaC5cbiAgICAgIHdvcms6XG4gICAgICAgIG1vZGU6IGludGVyYWN0aXZlXG4gICAgICAgIHN5c3RlbVByb21wdDogPi1cbiAgICAgICAgICBVc2UgdGhlIG9wZW5zcGVjLWFwcGx5LWNoYW5nZSBza2lsbCBhZ2FpbnN0IHRoZSBjaGFuZ2UgcmVjb3JkZWRcbiAgICAgICAgICBpbiB0aGUgcGxhbiBhcnRpZmFjdCdzIGNoYW5nZVNsdWcg4oCUIHdvcmsgdGhyb3VnaCBpdHMgdGFza3MubWRcbiAgICAgICAgICBvbmUgdGFzayBhdCBhIHRpbWUsIGNoZWNraW5nIGVhY2ggb2ZmIChcXGAtIFsgXVxcYCAtPiBcXGAtIFt4XVxcYCkgYXNcbiAgICAgICAgICB5b3UgY29tcGxldGUgaXQsIHVudGlsIGV2ZXJ5IHRhc2sgaXMgZG9uZS4gQ29tbWl0IHRoZSB3b3JrIG9uIGFcbiAgICAgICAgICBmZWF0dXJlIGJyYW5jaC4gUmVjb3JkIHRoZSBjaGFuZ2Utc3VtbWFyeSBhcnRpZmFjdCBhbmQgdGhlXG4gICAgICAgICAgY2hhbmdlLXJlcXVlc3QgZXZpZGVuY2UgKGJyYW5jaCBuYW1lIGFuZCBoZWFkIGNvbW1pdCBzaGEg4oCUIG5vXG4gICAgICAgICAgUFIgeWV0LCB0aGF0IGhhcHBlbnMgYWZ0ZXIgcHJlLVBSIHZlcmlmaWNhdGlvbiBwYXNzZXMpLlxuICAgICAgYXJ0aWZhY3RzOlxuICAgICAgICAtIG5hbWU6IGNoYW5nZS1zdW1tYXJ5XG4gICAgICAgICAgc2NoZW1hOlxuICAgICAgICAgICAgdHlwZTogb2JqZWN0XG4gICAgICAgICAgICByZXF1aXJlZDogW3N1bW1hcnksIGhlYWRTaGFdXG4gICAgICAgICAgICBwcm9wZXJ0aWVzOlxuICAgICAgICAgICAgICBzdW1tYXJ5OiB7IHR5cGU6IHN0cmluZywgbWluTGVuZ3RoOiAxIH1cbiAgICAgICAgICAgICAgaGVhZFNoYTogeyB0eXBlOiBzdHJpbmcsIG1pbkxlbmd0aDogNyB9XG4gICAgICBldmlkZW5jZTpcbiAgICAgICAgLSBuYW1lOiBjaGFuZ2UtcmVxdWVzdFxuICAgICAgICAgIHNjaGVtYTpcbiAgICAgICAgICAgIHR5cGU6IG9iamVjdFxuICAgICAgICAgICAgcmVxdWlyZWQ6IFticmFuY2gsIGhlYWRTaGFdXG4gICAgICAgICAgICBwcm9wZXJ0aWVzOlxuICAgICAgICAgICAgICBicmFuY2g6IHsgdHlwZTogc3RyaW5nLCBtaW5MZW5ndGg6IDEgfVxuICAgICAgICAgICAgICBoZWFkU2hhOiB7IHR5cGU6IHN0cmluZywgbWluTGVuZ3RoOiA3IH1cbiAgICAgICAgICAgICAgdXJsOiB7IHR5cGU6IHN0cmluZyB9XG4gICAgICB0cmFuc2l0aW9uczpcbiAgICAgICAgLSBuYW1lOiBzdWJtaXRcbiAgICAgICAgICB0bzogb3BlbnNwZWMtdGFza3MtdmVyaWZ5XG4gICAgICAgICAgZ2F0ZXM6XG4gICAgICAgICAgICAtIHR5cGU6IGFydGlmYWN0LWV4aXN0c1xuICAgICAgICAgICAgICBjb25maWc6IHsgYXJ0aWZhY3Q6IGNoYW5nZS1zdW1tYXJ5IH1cbiAgICAgICAgICAgIC0gdHlwZTogZXZpZGVuY2UtcmVjb3JkZWRcbiAgICAgICAgICAgICAgY29uZmlnOiB7IG5hbWU6IGNoYW5nZS1yZXF1ZXN0IH1cblxuICAgIC0gaWQ6IG9wZW5zcGVjLXRhc2tzLXZlcmlmeVxuICAgICAgZGVzY3JpcHRpb246ID4tXG4gICAgICAgIFZlcmlmeSBldmVyeSB0YXNrIGluIHRoZSBPcGVuU3BlYyBjaGFuZ2UgaXMgYWN0dWFsbHkgY2hlY2tlZCBvZmZcbiAgICAgICAgYmVmb3JlIHByZS1QUiB2ZXJpZmljYXRpb24gcnVucy5cbiAgICAgIHdvcms6XG4gICAgICAgIG1vZGU6IHdvcmtmbG93XG4gICAgICAgIHdvcmtmbG93OlxuICAgICAgICAgIG5hbWU6IG9wZW5zcGVjLXRhc2tzLXZlcmlmeVxuICAgICAgICAgIGlucHV0czpcbiAgICAgICAgICAgIGNoYW5nZVNsdWc6ICdcXCR7eyBkYXRhLmxhdGVzdChzZWxmLm5hbWUsIFwiYXJ0aWZhY3QtcGxhblwiKS5wYXlsb2FkLmNoYW5nZVNsdWcgfX0nXG4gICAgICAgIHJlc3VsdEV2aWRlbmNlOiB0YXNrcy12ZXJpZnktcnVuXG4gICAgICB0cmFuc2l0aW9uczpcbiAgICAgICAgLSBuYW1lOiBwYXNzXG4gICAgICAgICAgdG86IHByZS1wci12ZXJpZnlcbiAgICAgICAgICBnYXRlczpcbiAgICAgICAgICAgIC0gdHlwZTogd29ya2Zsb3ctc3VjY2VlZGVkXG4gICAgICAgICAgICAgIGNvbmZpZzogeyB3b3JrZmxvdzogb3BlbnNwZWMtdGFza3MtdmVyaWZ5IH1cbiAgICAgICAgLSBuYW1lOiBmYWlsXG4gICAgICAgICAgdG86IGltcGxlbWVudGluZ1xuICAgICAgICAgIGdhdGVzOlxuICAgICAgICAgICAgLSB0eXBlOiBldmlkZW5jZS1yZWNvcmRlZFxuICAgICAgICAgICAgICBjb25maWc6IHsgbmFtZTogdGFza3MtdmVyaWZ5LXJ1biwgcmVxdWlyZUZpZWxkOiB7IHN0YXR1czogZmFpbGVkIH0gfVxuXG4gICAgLSBpZDogcHJlLXByLXZlcmlmeVxuICAgICAgZGVzY3JpcHRpb246ID4tXG4gICAgICAgIFByZS1QUiB2ZXJpZmljYXRpb246IGJ1aWxkL3N5bnRoL3Rlc3QvbGludCBwbHVzIHRoZSBhcmNoaXRlY3R1cmVcbiAgICAgICAgcnVsZSByZWdpc3RyeSwgcnVuIGJlZm9yZSB0aGUgUFIgaXMgb3BlbmVkIHJhdGhlciB0aGFuIHJlbHlpbmcgb25cbiAgICAgICAgQ0kgYWZ0ZXIgdGhlIGZhY3QuIElmIHRoZSBib3VuZCBjb21taXQgbmVlZHMgdG8gY2hhbmdlIChyZWJhc2UsXG4gICAgICAgIGZpeHVwLCBodW1hbi1yZXF1ZXN0ZWQgZWRpdCkgd2l0aG91dCBhIHJlYWwgdmVyaWZpY2F0aW9uIGZhaWx1cmUsXG4gICAgICAgIHRha2UgdGhlIHVuZ2F0ZWQgJ3Jld29yaycgdHJhbnNpdGlvbiBiYWNrIHRvIGltcGxlbWVudGluZyBpbnN0ZWFkXG4gICAgICAgIG9mIHJlY29yZGluZyBhIGZhYnJpY2F0ZWQgJ2ZhaWwnLlxuICAgICAgd29yazpcbiAgICAgICAgbW9kZTogd29ya2Zsb3dcbiAgICAgICAgd29ya2Zsb3c6XG4gICAgICAgICAgbmFtZTogcHJlLXByLXZlcmlmeVxuICAgICAgICAgIGlucHV0czpcbiAgICAgICAgICAgIGNvbW1pdDogJ1xcJHt7IGRhdGEubGF0ZXN0KHNlbGYubmFtZSwgXCJldmlkZW5jZS1jaGFuZ2UtcmVxdWVzdFwiKS5wYXlsb2FkLmhlYWRTaGEgfX0nXG4gICAgICAgICAgICBicmFuY2g6ICdcXCR7eyBkYXRhLmxhdGVzdChzZWxmLm5hbWUsIFwiZXZpZGVuY2UtY2hhbmdlLXJlcXVlc3RcIikucGF5bG9hZC5icmFuY2ggfX0nXG4gICAgICAgIHJlc3VsdEV2aWRlbmNlOiB2ZXJpZnktcnVuXG4gICAgICB0cmFuc2l0aW9uczpcbiAgICAgICAgLSBuYW1lOiBwYXNzXG4gICAgICAgICAgdG86IG9wZW4tcHJcbiAgICAgICAgICBnYXRlczpcbiAgICAgICAgICAgIC0gdHlwZTogd29ya2Zsb3ctc3VjY2VlZGVkXG4gICAgICAgICAgICAgIGNvbmZpZzogeyB3b3JrZmxvdzogcHJlLXByLXZlcmlmeSB9XG4gICAgICAgIC0gbmFtZTogZmFpbFxuICAgICAgICAgIHRvOiBpbXBsZW1lbnRpbmdcbiAgICAgICAgICBnYXRlczpcbiAgICAgICAgICAgIC0gdHlwZTogZXZpZGVuY2UtcmVjb3JkZWRcbiAgICAgICAgICAgICAgY29uZmlnOiB7IG5hbWU6IHZlcmlmeS1ydW4sIHJlcXVpcmVGaWVsZDogeyBzdGF0dXM6IGZhaWxlZCB9IH1cbiAgICAgICAgLSBuYW1lOiByZXdvcmtcbiAgICAgICAgICB0bzogaW1wbGVtZW50aW5nXG4gICAgICAgICAgZ2F0ZXM6IFtdXG5cbiAgICAtIGlkOiBvcGVuLXByXG4gICAgICBkZXNjcmlwdGlvbjogPi1cbiAgICAgICAgT3BlbiB0aGUgcHVsbCByZXF1ZXN0IG5vdyB0aGF0IHByZS1QUiB2ZXJpZmljYXRpb24gaGFzIHBhc3NlZC4gSWZcbiAgICAgICAgdGhlIGJvdW5kIGNvbW1pdCBuZWVkcyB0byBjaGFuZ2UgYWZ0ZXIgZW50ZXJpbmcgdGhpcyBzdGFnZSAoZS5nLlxuICAgICAgICBtYWluIG1vdmVkIGFuZCB0aGUgYnJhbmNoIG5lZWRzIGEgcmViYXNlKSwgYSBodW1hbiBjYW4gYXBwcm92ZSB0aGVcbiAgICAgICAgJ3Jld29yay1hcHByb3ZhbCcgZ2F0ZSB0byB0YWtlIHRoZSAncmV3b3JrJyB0cmFuc2l0aW9uIGJhY2sgdG9cbiAgICAgICAgaW1wbGVtZW50aW5nIHJhdGhlciB0aGFuIGFib3J0aW5nIHRoZSBydW4uXG4gICAgICB3b3JrOlxuICAgICAgICBtb2RlOiBpbnRlcmFjdGl2ZVxuICAgICAgICBzeXN0ZW1Qcm9tcHQ6ID4tXG4gICAgICAgICAgQmVmb3JlIG9wZW5pbmcgdGhlIFBSLCBmZXRjaCB0aGUgcmVhbCBwcmUtcHItdmVyaWZ5IGF0dGVzdGF0aW9uXG4gICAgICAgICAgd2l0aCBcXGBzd2FtcCBkYXRhIGdldCAtLXdvcmtmbG93IHByZS1wci12ZXJpZnlcbiAgICAgICAgICByZXBvcnQtc3dhbXAtdmVyaWZpY2F0aW9uLWF0dGVzdGF0aW9uIC0tanNvblxcYCBhbmQgaW5jbHVkZSBpdHNcbiAgICAgICAgICBcXGBjb250ZW50XFxgIHZlcmJhdGltIChhcyBhIG1hcmtkb3duIGJsb2NrLCBlLmcuIHVuZGVyIGEgXCJQcmUtUFJcbiAgICAgICAgICB2ZXJpZmljYXRpb25cIiBoZWFkaW5nKSBpbiB0aGUgUFIgYm9keSDigJQgbmV2ZXIganVzdCBhc3NlcnQgaW5cbiAgICAgICAgICBwcm9zZSB0aGF0IGNoZWNrcyBwYXNzZWQuIEFsc28gZmV0Y2ggdGhpcyBzYW1lIHJ1bidzIG1hbmlmZXN0IHN0ZXBcbiAgICAgICAgICBvdXRwdXQgKFxcYHN3YW1wIGRhdGEgcXVlcnkgJ21vZGVsTmFtZSA9PSBcIiR7c2hlbGxNYW5pZmVzdE1vZGVsfVwiICYmXG4gICAgICAgICAgbmFtZSA9PSBcInJlc3VsdFwiJyAtLXNlbGVjdCBhdHRyaWJ1dGVzLnN0ZG91dCAtLWpzb25cXGAsIHRha2UgdGhlXG4gICAgICAgICAgbGF0ZXN0KSBhbmQgYXBwZW5kIGl0IHRvIHRoZSBQUiBib2R5IGFzXG4gICAgICAgICAgXFxgPCEtLSBhdHRlc3RhdGlvbi1tYW5pZmVzdCB7XCJjb21taXRcIjogXCI8aGVhZFNoYT5cIiwgXCJzdGF0dXNcIjpcbiAgICAgICAgICBcInN1Y2NlZWRlZFwiLCAuLi50aGUgbWFuaWZlc3Qgc3RlcCdzIEpTT04sIHNwcmVhZCBpbi4uLn0gLS0+XFxgIOKAlCBhblxuICAgICAgICAgIEhUTUwgY29tbWVudCBzbyBpdCdzIGludmlzaWJsZSB3aGVuIHJlbmRlcmVkIGJ1dCBzdGlsbCBwcmVzZW50IGluXG4gICAgICAgICAgdGhlIHJhdyBib2R5IHRleHQgdmVyaWZ5LWF0dGVzdGF0aW9uLnltbCByZWFkcyB2aWEgdGhlIEdpdEh1YiBBUEkuXG4gICAgICAgICAgQWxzbyBmZXRjaCB0aGUgcGxhbiBhcnRpZmFjdCdzIGNoYW5nZVNsdWcgYW5kIGluY2x1ZGUgYW4gZXhwbGljaXRcbiAgICAgICAgICBcIk9wZW5TcGVjIGNoYW5nZVwiIGxpbmUgaW4gdGhlIFBSIGJvZHkgbmFtaW5nIGl0IGFuZCBpdHMgcGF0aFxuICAgICAgICAgIChcXGBvcGVuc3BlYy9jaGFuZ2VzLzxjaGFuZ2VTbHVnPi9cXGApIOKAlCBldmVyeSBQUiB0aGUgZmFjdG9yeSBvcGVuc1xuICAgICAgICAgIG11c3QgY2FsbCBvdXQgd2hpY2ggT3BlblNwZWMgY2hhbmdlKHMpIGRyb3ZlIHRoZSBzZXNzaW9uLCBub3RcbiAgICAgICAgICBqdXN0IGltcGx5IGl0LiBJZiBwbGFubmluZyBjeWNsZWQgdGhyb3VnaCBtb3JlIHRoYW4gb25lIGNoYW5nZVxuICAgICAgICAgIChhIHJld29yayBsb29wIHByb2R1Y2VkIGEgbmV3IGNoYW5nZVNsdWcpLCBsaXN0IGV2ZXJ5IGRpc3RpbmN0XG4gICAgICAgICAgY2hhbmdlU2x1ZyByZWNvcmRlZCBhY3Jvc3MgdGhlIHJ1bidzIHBsYW4gYXJ0aWZhY3QgdmVyc2lvbnMsIG5vdFxuICAgICAgICAgIG9ubHkgdGhlIGxhdGVzdC4gVGhlIFBSIHRpdGxlIE1VU1Qgc3RhcnQgd2l0aCBhIENvbnZlbnRpb25hbFxuICAgICAgICAgIENvbW1pdHMgcHJlZml4IGluIHRoZSBmb3JtIFxcYHR5cGUoc2NvcGUpOiBzdW1tYXJ5XFxgIOKAlCBcXGB0eXBlXFxgIGlzXG4gICAgICAgICAgXFxgZmVhdFxcYCBmb3IgbmV3IGNhcGFiaWxpdGllcywgXFxgZml4XFxgIGZvciBidWcgZml4ZXMsIG9yIFxcYGNob3JlXFxgXG4gICAgICAgICAgZm9yIHRvb2xpbmcvbWFpbnRlbmFuY2Ugd2l0aCBubyBiZWhhdmlvciBjaGFuZ2UgKGZhbGwgYmFjayB0b1xuICAgICAgICAgIFxcYHJlZmFjdG9yXFxgL1xcYGRvY3NcXGAvXFxgdGVzdFxcYCBvbmx5IGlmIG5vbmUgb2YgdGhvc2UgZml0KSwgY2hvc2VuXG4gICAgICAgICAgZnJvbSB0aGUgaW50YWtlIGlzc3VlIGFuZCBPcGVuU3BlYyBjaGFuZ2Uocyk7IFxcYHNjb3BlXFxgIG5hbWVzIHRoZVxuICAgICAgICAgIGFmZmVjdGVkIHBhY2thZ2UgKGUuZy4gXFxgcHJvamVuXFxgLCBcXGBjbGVyay1hdXRob3JpemVyXFxgKS4gVGhpc1xuICAgICAgICAgIHJlcG8ncyBQUi1kZXBsb3kgYW5kIFBSLWNsZWFudXAgYXV0b21hdGlvbiBvbmx5IHRyaWdnZXIgZm9yXG4gICAgICAgICAgdGl0bGVzIHN0YXJ0aW5nIHdpdGggXFxgZml4XFxgIG9yIFxcYGZlYXRcXGAsIGFuZCBldmVyeSBtZXJnZWQgUFIgaW5cbiAgICAgICAgICB0aGlzIHJlcG8gZm9sbG93cyB0aGlzIGNvbnZlbnRpb24g4oCUIGFuIHVudHlwZWQgdGl0bGUgYnJlYWtzIGJvdGguXG4gICAgICAgICAgVGhlbiBjYWxsICR7cHJNb2RlbH0ncyBvcGVuUHIgbWV0aG9kXG4gICAgICAgICAgKHJlcG89JHtyZXBvfSwgaGVhZD08dGhlIGJyYW5jaCByZWNvcmRlZCBpblxuICAgICAgICAgIGNoYW5nZS1yZXF1ZXN0IGV2aWRlbmNlPiwgYmFzZT0ke2Jhc2VCcmFuY2h9LCBkcnlSdW49ZmFsc2UpLCB3aXRoXG4gICAgICAgICAgdGl0bGUvYm9keSByZWZlcmVuY2luZyB0aGUgaW50YWtlIHN0YWdlJ3MgaXNzdWUgbnVtYmVyLCB0aGVcbiAgICAgICAgICBPcGVuU3BlYyBjaGFuZ2UocyksIHRoZSBhdHRlc3RhdGlvbiBibG9jaywgYW5kIHRoZSBtYW5pZmVzdFxuICAgICAgICAgIGNvbW1lbnQsIHRoZW4gcmVjb3JkIHRoZSBwci1vcGVuZWQgZXZpZGVuY2Ugd2l0aCB0aGUgcmV0dXJuZWQgUFJcbiAgICAgICAgICB1cmwgYW5kIG51bWJlci5cbiAgICAgIGV2aWRlbmNlOlxuICAgICAgICAtIG5hbWU6IHByLW9wZW5lZFxuICAgICAgICAgIHNjaGVtYTpcbiAgICAgICAgICAgIHR5cGU6IG9iamVjdFxuICAgICAgICAgICAgcmVxdWlyZWQ6IFt1cmwsIG51bWJlcl1cbiAgICAgICAgICAgIHByb3BlcnRpZXM6XG4gICAgICAgICAgICAgIHVybDogeyB0eXBlOiBzdHJpbmcsIG1pbkxlbmd0aDogMSB9XG4gICAgICAgICAgICAgIG51bWJlcjogeyB0eXBlOiBpbnRlZ2VyIH1cbiAgICAgIHRyYW5zaXRpb25zOlxuICAgICAgICAtIG5hbWU6IHN1Ym1pdFxuICAgICAgICAgIHRvOiBkb25lXG4gICAgICAgICAgZ2F0ZXM6XG4gICAgICAgICAgICAtIHR5cGU6IGV2aWRlbmNlLXJlY29yZGVkXG4gICAgICAgICAgICAgIGNvbmZpZzogeyBuYW1lOiBwci1vcGVuZWQgfVxuICAgICAgICAtIG5hbWU6IHJld29ya1xuICAgICAgICAgIHRvOiBpbXBsZW1lbnRpbmdcbiAgICAgICAgICBnYXRlczpcbiAgICAgICAgICAgIC0gdHlwZTogaHVtYW4tYXBwcm92YWxcbiAgICAgICAgICAgICAgY29uZmlnOiB7IGlkOiByZXdvcmstYXBwcm92YWwgfVxuXG4gICAgLSBpZDogZG9uZVxuICAgICAgdGVybWluYWw6IHRydWVcblxuICAgIC0gaWQ6IGFib3J0ZWRcbiAgICAgIHRlcm1pbmFsOiB0cnVlXG5cbiAgZ2xvYmFsVHJhbnNpdGlvbnM6XG4gICAgLSBuYW1lOiBhYm9ydFxuICAgICAgdG86IGFib3J0ZWRcbiAgICAgIGdhdGVzOlxuICAgICAgICAtIHR5cGU6IGh1bWFuLWFwcHJvdmFsXG4gICAgICAgICAgY29uZmlnOiB7IGlkOiBhYm9ydC1jb25maXJtYXRpb24gfVxubWV0aG9kczoge31cbmAsXG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
@@ -7,7 +7,7 @@ const javascript_1 = require("projen/lib/javascript");
7
7
  const utils_1 = require("./utils");
8
8
  const WorkflowActionVersions_1 = require("./WorkflowActionVersions");
9
9
  class StagingDeployWorkflow extends projen_1.YamlFile {
10
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@macedon-technologies/batman.StagingDeployWorkflow", version: "1.21.5" };
10
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@macedon-technologies/batman.StagingDeployWorkflow", version: "1.23.0" };
11
11
  constructor(project, options) {
12
12
  const packageManager = project.package.packageManager;
13
13
  const actionVersions = (0, WorkflowActionVersions_1.resolveActionVersions)(options.actionVersions);
@@ -39,7 +39,7 @@ const fs = __importStar(require("fs"));
39
39
  const path = __importStar(require("path"));
40
40
  const projen_1 = require("projen");
41
41
  class WorkflowAutoDiscover extends projen_1.Component {
42
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@macedon-technologies/batman.WorkflowAutoDiscover", version: "1.21.5" };
42
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@macedon-technologies/batman.WorkflowAutoDiscover", version: "1.23.0" };
43
43
  constructor(project) {
44
44
  super(project);
45
45
  }
@@ -166,7 +166,10 @@ globalArguments:
166
166
  description: >-
167
167
  Pre-PR verification: build/synth/test/lint plus the architecture
168
168
  rule registry, run before the PR is opened rather than relying on
169
- CI after the fact.
169
+ CI after the fact. If the bound commit needs to change (rebase,
170
+ fixup, human-requested edit) without a real verification failure,
171
+ take the ungated 'rework' transition back to implementing instead
172
+ of recording a fabricated 'fail'.
170
173
  work:
171
174
  mode: workflow
172
175
  workflow:
@@ -186,9 +189,17 @@ globalArguments:
186
189
  gates:
187
190
  - type: evidence-recorded
188
191
  config: { name: verify-run, requireField: { status: failed } }
192
+ - name: rework
193
+ to: implementing
194
+ gates: []
189
195
 
190
196
  - id: open-pr
191
- description: Open the pull request now that pre-PR verification has passed.
197
+ description: >-
198
+ Open the pull request now that pre-PR verification has passed. If
199
+ the bound commit needs to change after entering this stage (e.g.
200
+ main moved and the branch needs a rebase), a human can approve the
201
+ 'rework-approval' gate to take the 'rework' transition back to
202
+ implementing rather than aborting the run.
192
203
  work:
193
204
  mode: interactive
194
205
  systemPrompt: >-
@@ -243,6 +254,11 @@ globalArguments:
243
254
  gates:
244
255
  - type: evidence-recorded
245
256
  config: { name: pr-opened }
257
+ - name: rework
258
+ to: implementing
259
+ gates:
260
+ - type: human-approval
261
+ config: { id: rework-approval }
246
262
 
247
263
  - id: done
248
264
  terminal: true
package/package.json CHANGED
@@ -49,7 +49,7 @@
49
49
  "main": "lib/index.js",
50
50
  "license": "Apache-2.0",
51
51
  "stability": "stable",
52
- "version": "1.21.5",
52
+ "version": "1.23.0",
53
53
  "jest": {
54
54
  "coverageProvider": "v8",
55
55
  "testMatch": [