@mavogel/mvc-projen 0.0.20 → 0.0.22
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 +4 -4
- package/API.md +68 -2
- package/lib/projects/cdk-construct.d.ts +1 -1
- package/lib/projects/cdk-construct.js +15 -8
- package/mavogelmvcprojen/MvcCdkConstructLibraryOptions.go +30 -1
- package/mavogelmvcprojen/go.mod +1 -1
- package/mavogelmvcprojen/jsii/jsii.go +2 -2
- package/mavogelmvcprojen/version +1 -1
- package/package.json +10 -4
package/.jsii
CHANGED
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
},
|
|
9
9
|
"dependencies": {
|
|
10
10
|
"constructs": "^10.5.1",
|
|
11
|
-
"projen": "^0.99.
|
|
11
|
+
"projen": "^0.99.34"
|
|
12
12
|
},
|
|
13
13
|
"dependencyClosure": {
|
|
14
14
|
"constructs": {
|
|
@@ -178,7 +178,7 @@
|
|
|
178
178
|
{
|
|
179
179
|
"abstract": true,
|
|
180
180
|
"docs": {
|
|
181
|
-
"default": "${cwd()}/node_modules/mvc-projen/assets",
|
|
181
|
+
"default": "${process.cwd()}/node_modules/mvc-projen/assets",
|
|
182
182
|
"stability": "stable",
|
|
183
183
|
"summary": "Base directory for the assets."
|
|
184
184
|
},
|
|
@@ -220,6 +220,6 @@
|
|
|
220
220
|
"symbolId": "src/projects/cdk-construct:MvcCdkConstructLibraryOptions"
|
|
221
221
|
}
|
|
222
222
|
},
|
|
223
|
-
"version": "0.0.
|
|
224
|
-
"fingerprint": "
|
|
223
|
+
"version": "0.0.22",
|
|
224
|
+
"fingerprint": "MuRxXUA5dN/day096ms0QVBvrXMQxKCIARjasgSYrgg="
|
|
225
225
|
}
|
package/API.md
CHANGED
|
@@ -1663,6 +1663,7 @@ const mvcCdkConstructLibraryOptions: MvcCdkConstructLibraryOptions = { ... }
|
|
|
1663
1663
|
| <code><a href="#@mavogel/mvc-projen.MvcCdkConstructLibraryOptions.property.stale">stale</a></code> | <code>boolean</code> | Auto-close of stale issues and pull request. |
|
|
1664
1664
|
| <code><a href="#@mavogel/mvc-projen.MvcCdkConstructLibraryOptions.property.staleOptions">staleOptions</a></code> | <code>projen.github.StaleOptions</code> | Auto-close stale issues and pull requests. |
|
|
1665
1665
|
| <code><a href="#@mavogel/mvc-projen.MvcCdkConstructLibraryOptions.property.vscode">vscode</a></code> | <code>boolean</code> | Enable VSCode integration. |
|
|
1666
|
+
| <code><a href="#@mavogel/mvc-projen.MvcCdkConstructLibraryOptions.property.addPackageManagerToDevEngines">addPackageManagerToDevEngines</a></code> | <code>boolean</code> | Automatically add the resolved `packageManager` to `devEngines.packageManager` in `package.json`, setting `onFail` to `ignore`. |
|
|
1666
1667
|
| <code><a href="#@mavogel/mvc-projen.MvcCdkConstructLibraryOptions.property.allowLibraryDependencies">allowLibraryDependencies</a></code> | <code>boolean</code> | Allow the project to include `peerDependencies` and `bundledDependencies`. |
|
|
1667
1668
|
| <code><a href="#@mavogel/mvc-projen.MvcCdkConstructLibraryOptions.property.authorEmail">authorEmail</a></code> | <code>string</code> | Author's e-mail. |
|
|
1668
1669
|
| <code><a href="#@mavogel/mvc-projen.MvcCdkConstructLibraryOptions.property.authorName">authorName</a></code> | <code>string</code> | Author's name. |
|
|
@@ -1675,9 +1676,11 @@ const mvcCdkConstructLibraryOptions: MvcCdkConstructLibraryOptions = { ... }
|
|
|
1675
1676
|
| <code><a href="#@mavogel/mvc-projen.MvcCdkConstructLibraryOptions.property.bundledDeps">bundledDeps</a></code> | <code>string[]</code> | List of dependencies to bundle into this module. |
|
|
1676
1677
|
| <code><a href="#@mavogel/mvc-projen.MvcCdkConstructLibraryOptions.property.bunVersion">bunVersion</a></code> | <code>string</code> | The version of Bun to use if using Bun as a package manager. |
|
|
1677
1678
|
| <code><a href="#@mavogel/mvc-projen.MvcCdkConstructLibraryOptions.property.codeArtifactOptions">codeArtifactOptions</a></code> | <code>projen.javascript.CodeArtifactOptions</code> | Options for npm packages using AWS CodeArtifact. |
|
|
1679
|
+
| <code><a href="#@mavogel/mvc-projen.MvcCdkConstructLibraryOptions.property.deleteOrphanedLockFiles">deleteOrphanedLockFiles</a></code> | <code>boolean</code> | Automatically delete lockfiles from package managers that are not the active one. |
|
|
1678
1680
|
| <code><a href="#@mavogel/mvc-projen.MvcCdkConstructLibraryOptions.property.deps">deps</a></code> | <code>string[]</code> | Runtime dependencies of this module. |
|
|
1679
1681
|
| <code><a href="#@mavogel/mvc-projen.MvcCdkConstructLibraryOptions.property.description">description</a></code> | <code>string</code> | The description is just a string that helps people understand the purpose of the package. |
|
|
1680
1682
|
| <code><a href="#@mavogel/mvc-projen.MvcCdkConstructLibraryOptions.property.devDeps">devDeps</a></code> | <code>string[]</code> | Build dependencies for this module. |
|
|
1683
|
+
| <code><a href="#@mavogel/mvc-projen.MvcCdkConstructLibraryOptions.property.devEngines">devEngines</a></code> | <code>projen.javascript.DevEngines</code> | Configure the `devEngines` field in `package.json`. |
|
|
1681
1684
|
| <code><a href="#@mavogel/mvc-projen.MvcCdkConstructLibraryOptions.property.entrypoint">entrypoint</a></code> | <code>string</code> | Module entrypoint (`main` in `package.json`). |
|
|
1682
1685
|
| <code><a href="#@mavogel/mvc-projen.MvcCdkConstructLibraryOptions.property.homepage">homepage</a></code> | <code>string</code> | Package's Homepage / Website. |
|
|
1683
1686
|
| <code><a href="#@mavogel/mvc-projen.MvcCdkConstructLibraryOptions.property.keywords">keywords</a></code> | <code>string[]</code> | Keywords to include in `package.json`. |
|
|
@@ -1821,6 +1824,7 @@ const mvcCdkConstructLibraryOptions: MvcCdkConstructLibraryOptions = { ... }
|
|
|
1821
1824
|
| <code><a href="#@mavogel/mvc-projen.MvcCdkConstructLibraryOptions.property.lambdaAutoDiscover">lambdaAutoDiscover</a></code> | <code>boolean</code> | Automatically adds an `aws_lambda.Function` for each `.lambda.ts` handler in your source tree. If this is disabled, you either need to explicitly call `aws_lambda.Function.autoDiscover()` or define a `new aws_lambda.Function()` for each handler. |
|
|
1822
1825
|
| <code><a href="#@mavogel/mvc-projen.MvcCdkConstructLibraryOptions.property.lambdaExtensionAutoDiscover">lambdaExtensionAutoDiscover</a></code> | <code>boolean</code> | Automatically adds an `awscdk.LambdaExtension` for each `.lambda-extension.ts` entrypoint in your source tree. If this is disabled, you can manually add an `awscdk.AutoDiscover` component to your project. |
|
|
1823
1826
|
| <code><a href="#@mavogel/mvc-projen.MvcCdkConstructLibraryOptions.property.lambdaOptions">lambdaOptions</a></code> | <code>projen.awscdk.LambdaFunctionCommonOptions</code> | Common options for all AWS Lambda functions. |
|
|
1827
|
+
| <code><a href="#@mavogel/mvc-projen.MvcCdkConstructLibraryOptions.property.singletonLambdaAutoDiscover">singletonLambdaAutoDiscover</a></code> | <code>boolean</code> | Automatically adds an `awscdk.SingletonFunction` for each `.singleton-lambda.ts` handler in your source tree. If this is disabled, you can manually add an `awscdk.AutoDiscover` component to your project. |
|
|
1824
1828
|
| <code><a href="#@mavogel/mvc-projen.MvcCdkConstructLibraryOptions.property.baseAssetsDirectory">baseAssetsDirectory</a></code> | <code>string</code> | Base directory for the assets. |
|
|
1825
1829
|
| <code><a href="#@mavogel/mvc-projen.MvcCdkConstructLibraryOptions.property.integTestRegions">integTestRegions</a></code> | <code>string[]</code> | The regions to run the integ tests in. |
|
|
1826
1830
|
|
|
@@ -2253,6 +2257,19 @@ Enabled by default for root projects. Disabled for non-root projects.
|
|
|
2253
2257
|
|
|
2254
2258
|
---
|
|
2255
2259
|
|
|
2260
|
+
##### `addPackageManagerToDevEngines`<sup>Optional</sup> <a name="addPackageManagerToDevEngines" id="@mavogel/mvc-projen.MvcCdkConstructLibraryOptions.property.addPackageManagerToDevEngines"></a>
|
|
2261
|
+
|
|
2262
|
+
```typescript
|
|
2263
|
+
public readonly addPackageManagerToDevEngines: boolean;
|
|
2264
|
+
```
|
|
2265
|
+
|
|
2266
|
+
- *Type:* boolean
|
|
2267
|
+
- *Default:* true
|
|
2268
|
+
|
|
2269
|
+
Automatically add the resolved `packageManager` to `devEngines.packageManager` in `package.json`, setting `onFail` to `ignore`.
|
|
2270
|
+
|
|
2271
|
+
---
|
|
2272
|
+
|
|
2256
2273
|
##### `allowLibraryDependencies`<sup>Optional</sup> <a name="allowLibraryDependencies" id="@mavogel/mvc-projen.MvcCdkConstructLibraryOptions.property.allowLibraryDependencies"></a>
|
|
2257
2274
|
|
|
2258
2275
|
```typescript
|
|
@@ -2421,6 +2438,24 @@ This is required if publishing packages to, or installing scoped packages from A
|
|
|
2421
2438
|
|
|
2422
2439
|
---
|
|
2423
2440
|
|
|
2441
|
+
##### `deleteOrphanedLockFiles`<sup>Optional</sup> <a name="deleteOrphanedLockFiles" id="@mavogel/mvc-projen.MvcCdkConstructLibraryOptions.property.deleteOrphanedLockFiles"></a>
|
|
2442
|
+
|
|
2443
|
+
```typescript
|
|
2444
|
+
public readonly deleteOrphanedLockFiles: boolean;
|
|
2445
|
+
```
|
|
2446
|
+
|
|
2447
|
+
- *Type:* boolean
|
|
2448
|
+
- *Default:* true
|
|
2449
|
+
|
|
2450
|
+
Automatically delete lockfiles from package managers that are not the active one.
|
|
2451
|
+
|
|
2452
|
+
Only triggered when the lockfile for the configured package
|
|
2453
|
+
manager already exists.
|
|
2454
|
+
|
|
2455
|
+
This is useful when migrating between package managers to avoid conflicts.
|
|
2456
|
+
|
|
2457
|
+
---
|
|
2458
|
+
|
|
2424
2459
|
##### `deps`<sup>Optional</sup> <a name="deps" id="@mavogel/mvc-projen.MvcCdkConstructLibraryOptions.property.deps"></a>
|
|
2425
2460
|
|
|
2426
2461
|
```typescript
|
|
@@ -2494,6 +2529,24 @@ this will be what you `package.json` will eventually include.
|
|
|
2494
2529
|
```
|
|
2495
2530
|
|
|
2496
2531
|
|
|
2532
|
+
##### `devEngines`<sup>Optional</sup> <a name="devEngines" id="@mavogel/mvc-projen.MvcCdkConstructLibraryOptions.property.devEngines"></a>
|
|
2533
|
+
|
|
2534
|
+
```typescript
|
|
2535
|
+
public readonly devEngines: DevEngines;
|
|
2536
|
+
```
|
|
2537
|
+
|
|
2538
|
+
- *Type:* projen.javascript.DevEngines
|
|
2539
|
+
|
|
2540
|
+
Configure the `devEngines` field in `package.json`.
|
|
2541
|
+
|
|
2542
|
+
The `devEngines.packageManager` field is automatically populated based on
|
|
2543
|
+
the resolved `packageManager` value. Any fields provided here are merged
|
|
2544
|
+
with the auto-populated `packageManager` entry.
|
|
2545
|
+
|
|
2546
|
+
> [https://docs.npmjs.com/cli/v10/configuring-npm/package-json#devengines](https://docs.npmjs.com/cli/v10/configuring-npm/package-json#devengines)
|
|
2547
|
+
|
|
2548
|
+
---
|
|
2549
|
+
|
|
2497
2550
|
##### `entrypoint`<sup>Optional</sup> <a name="entrypoint" id="@mavogel/mvc-projen.MvcCdkConstructLibraryOptions.property.entrypoint"></a>
|
|
2498
2551
|
|
|
2499
2552
|
```typescript
|
|
@@ -2702,7 +2755,7 @@ public readonly packageManager: NodePackageManager;
|
|
|
2702
2755
|
```
|
|
2703
2756
|
|
|
2704
2757
|
- *Type:* projen.javascript.NodePackageManager
|
|
2705
|
-
- *Default:*
|
|
2758
|
+
- *Default:* Detected from the calling process or `YARN_CLASSIC` if detection fails.
|
|
2706
2759
|
|
|
2707
2760
|
The Node Package Manager used to execute scripts.
|
|
2708
2761
|
|
|
@@ -4538,6 +4591,19 @@ Common options for all AWS Lambda functions.
|
|
|
4538
4591
|
|
|
4539
4592
|
---
|
|
4540
4593
|
|
|
4594
|
+
##### `singletonLambdaAutoDiscover`<sup>Optional</sup> <a name="singletonLambdaAutoDiscover" id="@mavogel/mvc-projen.MvcCdkConstructLibraryOptions.property.singletonLambdaAutoDiscover"></a>
|
|
4595
|
+
|
|
4596
|
+
```typescript
|
|
4597
|
+
public readonly singletonLambdaAutoDiscover: boolean;
|
|
4598
|
+
```
|
|
4599
|
+
|
|
4600
|
+
- *Type:* boolean
|
|
4601
|
+
- *Default:* true
|
|
4602
|
+
|
|
4603
|
+
Automatically adds an `awscdk.SingletonFunction` for each `.singleton-lambda.ts` handler in your source tree. If this is disabled, you can manually add an `awscdk.AutoDiscover` component to your project.
|
|
4604
|
+
|
|
4605
|
+
---
|
|
4606
|
+
|
|
4541
4607
|
##### `baseAssetsDirectory`<sup>Optional</sup> <a name="baseAssetsDirectory" id="@mavogel/mvc-projen.MvcCdkConstructLibraryOptions.property.baseAssetsDirectory"></a>
|
|
4542
4608
|
|
|
4543
4609
|
```typescript
|
|
@@ -4545,7 +4611,7 @@ public readonly baseAssetsDirectory: string;
|
|
|
4545
4611
|
```
|
|
4546
4612
|
|
|
4547
4613
|
- *Type:* string
|
|
4548
|
-
- *Default:* ${cwd()}/node_modules/mvc-projen/assets
|
|
4614
|
+
- *Default:* ${process.cwd()}/node_modules/mvc-projen/assets
|
|
4549
4615
|
|
|
4550
4616
|
Base directory for the assets.
|
|
4551
4617
|
|
|
@@ -6,7 +6,7 @@ export interface MvcCdkConstructLibraryOptions extends AwsCdkConstructLibraryOpt
|
|
|
6
6
|
/**
|
|
7
7
|
* Base directory for the assets
|
|
8
8
|
*
|
|
9
|
-
* @default ${cwd()}/node_modules/mvc-projen/assets
|
|
9
|
+
* @default ${process.cwd()}/node_modules/mvc-projen/assets
|
|
10
10
|
*/
|
|
11
11
|
readonly baseAssetsDirectory?: string;
|
|
12
12
|
/**
|
|
@@ -5,7 +5,6 @@ exports.MvcCdkConstructLibrary = void 0;
|
|
|
5
5
|
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
|
|
6
6
|
const fs = require("fs");
|
|
7
7
|
const path = require("path");
|
|
8
|
-
const process_1 = require("process");
|
|
9
8
|
const projen_1 = require("projen");
|
|
10
9
|
const awscdk_1 = require("projen/lib/awscdk");
|
|
11
10
|
const github_1 = require("projen/lib/github");
|
|
@@ -15,7 +14,7 @@ const lambdaNodeVersion = awscdk_1.LambdaRuntime.NODEJS_22_X;
|
|
|
15
14
|
// The last CDK version for which @aws-cdk/integ-runner was published.
|
|
16
15
|
// integ-runner uses plain versions (no -alpha.0 suffix) and stopped publishing after this version.
|
|
17
16
|
// @aws-cdk/integ-tests-alpha and awslint continue to publish and track CDK versions.
|
|
18
|
-
const LAST_INTEG_RUNNER_VERSION = '2.197.
|
|
17
|
+
const LAST_INTEG_RUNNER_VERSION = '2.197.12';
|
|
19
18
|
/**
|
|
20
19
|
* TypeScript library
|
|
21
20
|
*
|
|
@@ -23,7 +22,7 @@ const LAST_INTEG_RUNNER_VERSION = '2.197.4';
|
|
|
23
22
|
*/
|
|
24
23
|
class MvcCdkConstructLibrary extends awscdk_1.AwsCdkConstructLibrary {
|
|
25
24
|
constructor(options) {
|
|
26
|
-
const baseAssetsDirectory = options.baseAssetsDirectory ?? `${
|
|
25
|
+
const baseAssetsDirectory = options.baseAssetsDirectory ?? `${process.cwd()}/node_modules/@mavogel/mvc-projen/assets`;
|
|
27
26
|
const integTestRegions = options.integTestRegions ?? ['eu-west-1', 'eu-west-2'];
|
|
28
27
|
super({
|
|
29
28
|
authorOrganization: true,
|
|
@@ -113,7 +112,9 @@ class MvcCdkConstructLibrary extends awscdk_1.AwsCdkConstructLibrary {
|
|
|
113
112
|
// experimentalIntegRunner: true,
|
|
114
113
|
// manual integ test setup
|
|
115
114
|
tsconfigDev: {
|
|
116
|
-
compilerOptions: {
|
|
115
|
+
compilerOptions: {
|
|
116
|
+
types: ['node', 'jest'],
|
|
117
|
+
},
|
|
117
118
|
include: ['integ-tests/**/*.ts'],
|
|
118
119
|
},
|
|
119
120
|
pullRequestTemplateContents: [fs.readFileSync(`${baseAssetsDirectory}/common/github_pull_request.md`).toString()],
|
|
@@ -216,6 +217,9 @@ add tools or links which inspired you
|
|
|
216
217
|
// NOTE: keep all the passed in options which can override the existing ones!
|
|
217
218
|
...options,
|
|
218
219
|
});
|
|
220
|
+
// TypeScript 6 no longer auto-discovers @types/* packages
|
|
221
|
+
this.tsconfigDev.file.addOverride('compilerOptions.types', ['node', 'jest']);
|
|
222
|
+
this.tsconfig?.file.addOverride('compilerOptions.types', ['node']);
|
|
219
223
|
// gitignore
|
|
220
224
|
const filesPatternToGitignore = [
|
|
221
225
|
'tmp',
|
|
@@ -227,12 +231,15 @@ add tools or links which inspired you
|
|
|
227
231
|
this.addDeps('cdk-nag@^2.37.55');
|
|
228
232
|
// Cap integ-runner at LAST_INTEG_RUNNER_VERSION since it stopped publishing after that version.
|
|
229
233
|
// integ-runner uses plain versions (no -alpha.0 suffix).
|
|
230
|
-
// integ-tests-alpha and awslint
|
|
234
|
+
// integ-tests-alpha and awslint only publish at minor versions (e.g. 2.197.0-alpha.0, not 2.197.4-alpha.0).
|
|
231
235
|
const rawCdkVersion = this.cdkVersion.replace(/[\^~]/, '');
|
|
232
236
|
const integRunnerVersion = rawCdkVersion.localeCompare(LAST_INTEG_RUNNER_VERSION, undefined, { numeric: true, sensitivity: 'base' }) > 0
|
|
233
237
|
? LAST_INTEG_RUNNER_VERSION
|
|
234
238
|
: rawCdkVersion;
|
|
235
|
-
|
|
239
|
+
// Alpha packages only publish at .0 patch versions — normalize to minor version
|
|
240
|
+
const [major, minor] = rawCdkVersion.split('.');
|
|
241
|
+
const alphaVersion = `${major}.${minor}.0`;
|
|
242
|
+
this.addDevDeps(`@aws-cdk/integ-runner@${integRunnerVersion}`, `@aws-cdk/integ-tests-alpha@${alphaVersion}-alpha.0`, '@commitlint/cli@^20.1.0', '@commitlint/config-conventional@^20.0.0', `awslint@${alphaVersion}-alpha.0`, 'husky@^9.1.7');
|
|
236
243
|
this.package.setScript('prepare', 'husky');
|
|
237
244
|
new projen_1.TextFile(this, '.commitlintrc.js', {
|
|
238
245
|
lines: [
|
|
@@ -290,7 +297,7 @@ add tools or links which inspired you
|
|
|
290
297
|
}
|
|
291
298
|
exports.MvcCdkConstructLibrary = MvcCdkConstructLibrary;
|
|
292
299
|
_a = JSII_RTTI_SYMBOL_1;
|
|
293
|
-
MvcCdkConstructLibrary[_a] = { fqn: "@mavogel/mvc-projen.MvcCdkConstructLibrary", version: "0.0.
|
|
300
|
+
MvcCdkConstructLibrary[_a] = { fqn: "@mavogel/mvc-projen.MvcCdkConstructLibrary", version: "0.0.22" };
|
|
294
301
|
class SampleCode extends projen_1.Component {
|
|
295
302
|
constructor(library, options) {
|
|
296
303
|
super(library);
|
|
@@ -357,4 +364,4 @@ class SampleCode extends projen_1.Component {
|
|
|
357
364
|
fs.writeFileSync(path.join(examplesdir, 'main.ts'), fs.readFileSync(`${this.options.baseAssetsDirectory}/cdk-construct/examples_simple_main.ts`).toString());
|
|
358
365
|
}
|
|
359
366
|
}
|
|
360
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2RrLWNvbnN0cnVjdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wcm9qZWN0cy9jZGstY29uc3RydWN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEseUJBQXlCO0FBQ3pCLDZCQUE2QjtBQUM3QixxQ0FBOEI7QUFDOUIsbUNBQXNGO0FBQ3RGLDhDQUF5RztBQUN6Ryw4Q0FBK0Q7QUFHL0QsMkVBQTJFO0FBQzNFLE1BQU0sV0FBVyxHQUFHLE1BQU0sQ0FBQztBQUMzQixNQUFNLGlCQUFpQixHQUFHLHNCQUFhLENBQUMsV0FBVyxDQUFDO0FBRXBELHNFQUFzRTtBQUN0RSxtR0FBbUc7QUFDbkcscUZBQXFGO0FBQ3JGLE1BQU0seUJBQXlCLEdBQUcsU0FBUyxDQUFDO0FBcUI1Qzs7OztHQUlHO0FBQ0gsTUFBYSxzQkFBdUIsU0FBUSwrQkFBc0I7SUFFaEUsWUFBWSxPQUFzQztRQUNoRCxNQUFNLG1CQUFtQixHQUFHLE9BQU8sQ0FBQyxtQkFBbUIsSUFBSSxHQUFHLElBQUEsYUFBRyxHQUFFLDBDQUEwQyxDQUFDO1FBQzlHLE1BQU0sZ0JBQWdCLEdBQUcsT0FBTyxDQUFDLGdCQUFnQixJQUFJLENBQUMsV0FBVyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBRWhGLEtBQUssQ0FBQztZQUNKLGtCQUFrQixFQUFFLElBQUk7WUFDeEIsY0FBYyxFQUFFLG9CQUFvQjtZQUNwQyxlQUFlLEVBQUUsTUFBTTtZQUN2QixPQUFPLEVBQUUsWUFBWTtZQUNyQixXQUFXLEVBQUUsUUFBUTtZQUNyQixjQUFjLEVBQUUsV0FBVztZQUMzQixtQkFBbUIsRUFBRSxXQUFXO1lBQ2hDLFNBQVMsRUFBRSxjQUFjO1lBQ3pCLFlBQVksRUFBRSxJQUFJO1lBQ2xCLGNBQWMsRUFBRSxtQkFBVSxDQUFDLGtCQUFrQixDQUFDLEdBQUc7WUFDakQsU0FBUyxFQUFFLG1CQUFVLENBQUMsU0FBUyxDQUFDLE1BQU07WUFDdEMsYUFBYSxFQUFFO2dCQUNi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cG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgeyBjd2QgfSBmcm9tICdwcm9jZXNzJztcbmltcG9ydCB7IENvbXBvbmVudCwgamF2YXNjcmlwdCwgUmVsZWFzYWJsZUNvbW1pdHMsIFRleHRGaWxlLCBZYW1sRmlsZSB9IGZyb20gJ3Byb2plbic7XG5pbXBvcnQgeyBBd3NDZGtDb25zdHJ1Y3RMaWJyYXJ5LCBBd3NDZGtDb25zdHJ1Y3RMaWJyYXJ5T3B0aW9ucywgTGFtYmRhUnVudGltZSB9IGZyb20gJ3Byb2plbi9saWIvYXdzY2RrJztcbmltcG9ydCB7IERlcGVuZGFib3RTY2hlZHVsZUludGVydmFsIH0gZnJvbSAncHJvamVuL2xpYi9naXRodWInO1xuaW1wb3J0IHsgSm9iU3RlcCB9IGZyb20gJ3Byb2plbi9saWIvZ2l0aHViL3dvcmtmbG93cy1tb2RlbCc7XG5cbi8vIFNldCB0aGUgbWluaW11bSBub2RlIHZlcnNpb24gZm9yIEFXUyBDREsgYW5kIHRoZSBHaXRIdWIgYWN0aW9ucyB3b3JrZmxvd1xuY29uc3Qgbm9kZVZlcnNpb24gPSAnMjIueCc7XG5jb25zdCBsYW1iZGFOb2RlVmVyc2lvbiA9IExhbWJkYVJ1bnRpbWUuTk9ERUpTXzIyX1g7XG5cbi8vIFRoZSBsYXN0IENESyB2ZXJzaW9uIGZvciB3aGljaCBAYXdzLWNkay9pbnRlZy1ydW5uZXIgd2FzIHB1Ymxpc2hlZC5cbi8vIGludGVnLXJ1bm5lciB1c2VzIHBsYWluIHZlcnNpb25zIChubyAtYWxwaGEuMCBzdWZmaXgpIGFuZCBzdG9wcGVkIHB1Ymxpc2hpbmcgYWZ0ZXIgdGhpcyB2ZXJzaW9uLlxuLy8gQGF3cy1jZGsvaW50ZWctdGVzdHMtYWxwaGEgYW5kIGF3c2xpbnQgY29udGludWUgdG8gcHVibGlzaCBhbmQgdHJhY2sgQ0RLIHZlcnNpb25zLlxuY29uc3QgTEFTVF9JTlRFR19SVU5ORVJfVkVSU0lPTiA9ICcyLjE5Ny40JztcblxuLyoqXG4gKiBUaGUgb3B0aW9ucyBmb3IgdGhlIGNvbnN0cnVjdFxuICovXG5leHBvcnQgaW50ZXJmYWNlIE12Y0Nka0NvbnN0cnVjdExpYnJhcnlPcHRpb25zIGV4dGVuZHMgQXdzQ2RrQ29uc3RydWN0TGlicmFyeU9wdGlvbnMge1xuICAvKipcbiAgICogQmFzZSBkaXJlY3RvcnkgZm9yIHRoZSBhc3NldHNcbiAgICpcbiAgICogQGRlZmF1bHQgJHtjd2QoKX0vbm9kZV9tb2R1bGVzL212Yy1wcm9qZW4vYXNzZXRzXG4gICAqL1xuICByZWFkb25seSBiYXNlQXNzZXRzRGlyZWN0b3J5Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgcmVnaW9ucyB0byBydW4gdGhlIGludGVnIHRlc3RzIGluXG4gICAqXG4gICAqIEBkZWZhdWx0IGV1LXdlc3QtMSBhbmQgZXUtd2VzdC0yXG4gICAqL1xuICByZWFkb25seSBpbnRlZ1Rlc3RSZWdpb25zPzogc3RyaW5nW107XG59XG5cbi8qKlxuICogVHlwZVNjcmlwdCBsaWJyYXJ5XG4gKlxuICogQHBqaWQgbXZjLWF3c2Nkay1jb25zdHJ1Y3RcbiAqL1xuZXhwb3J0IGNsYXNzIE12Y0Nka0NvbnN0cnVjdExpYnJhcnkgZXh0ZW5kcyBBd3NDZGtDb25zdHJ1Y3RMaWJyYXJ5IHtcblxuICBjb25zdHJ1Y3RvcihvcHRpb25zOiBNdmNDZGtDb25zdHJ1Y3RMaWJyYXJ5T3B0aW9ucykge1xuICAgIGNvbnN0IGJhc2VBc3NldHNEaXJlY3RvcnkgPSBvcHRpb25zLmJhc2VBc3NldHNEaXJlY3RvcnkgPz8gYCR7Y3dkKCl9L25vZGVfbW9kdWxlcy9AbWF2b2dlbC9tdmMtcHJvamVuL2Fzc2V0c2A7XG4gICAgY29uc3QgaW50ZWdUZXN0UmVnaW9ucyA9IG9wdGlvbnMuaW50ZWdUZXN0UmVnaW9ucyA/PyBbJ2V1LXdlc3QtMScsICdldS13ZXN0LTInXTtcblxuICAgIHN1cGVyKHtcbiAgICAgIGF1dGhvck9yZ2FuaXphdGlvbjogdHJ1ZSxcbiAgICAgIGNvcHlyaWdodE93bmVyOiAnTVYgQ29uc3VsdGluZyBHbWJIJyxcbiAgICAgIGNvcHlyaWdodFBlcmlvZDogJzIwMjUnLFxuICAgICAgbGljZW5zZTogJ0FwYWNoZS0yLjAnLFxuICAgICAganNpaVZlcnNpb246ICd+NS45LjAnLFxuICAgICAgbWluTm9kZVZlcnNpb246IG5vZGVWZXJzaW9uLFxuICAgICAgd29ya2Zsb3dOb2RlVmVyc2lvbjogbm9kZVZlcnNpb24sXG4gICAgICBzdGFiaWxpdHk6ICdleHBlcmltZW50YWwnLFxuICAgICAgcmVsZWFzZVRvTnBtOiB0cnVlLFxuICAgICAgcGFja2FnZU1hbmFnZXI6IGphdmFzY3JpcHQuTm9kZVBhY2thZ2VNYW5hZ2VyLk5QTSxcbiAgICAgIG5wbUFjY2VzczogamF2YXNjcmlwdC5OcG1BY2Nlc3MuUFVCTElDLFxuICAgICAgbGFtYmRhT3B0aW9uczoge1xuICAgICAgICBydW50aW1lOiBsYW1iZGFOb2RlVmVyc2lvbixcbiAgICAgICAgYXdzU2RrQ29ubmVjdGlvblJldXNlOiBmYWxzZSwgLy8gZG9lc24ndCBleGlzdCBpbiBBV1MgU0RLIEpTIHYzXG4gICAgICB9LFxuICAgICAgYXV0b0FwcHJvdmVPcHRpb25zOiB7XG4gICAgICAgIGFsbG93ZWRVc2VybmFtZXM6IFtcbiAgICAgICAgICAnZGVwZW5kYWJvdCcsXG4gICAgICAgICAgJ2RlcGVuZGFib3RbYm90XScsXG4gICAgICAgICAgJ2dpdGh1Yi1ib3QnLFxuICAgICAgICAgICdnaXRodWItYWN0aW9uc1tib3RdJyxcbiAgICAgICAgICAnbXZjLWJvdCcsXG4gICAgICAgIF0sXG4gICAgICAgIC8vIFRoZSBuYW1lIG9mIHRoZSBzZWNyZXQgdGhhdCBoYXMgdGhlIEdpdEh1YiBQQVQgZm9yIGF1dG8tYXBwcm92aW5nIFBScyB3aXRoIHBlcm1pc3Npb25zIHJlcG8sIHdvcmtmbG93LCB3cml0ZTpwYWNrYWdlc1xuICAgICAgICAvLyBHZW5lcmF0ZSBhIG5ldyBQQVQgKGh0dHBzOi8vZ2l0aHViLmNvbS9zZXR0aW5ncy90b2tlbnMvbmV3KSBhbmQgYWRkIGl0IHRvIHlvdXIgcmVwbydzIHNlY3JldHNcbiAgICAgICAgLy8gTk9URTogY29tZXMgZnJvbSBNVi1Db25zdWx0aW5nIE9yZ1xuICAgICAgICBzZWNyZXQ6ICdQUk9KRU5fR0lUSFVCX1RPS0VOJyxcbiAgICAgIH0sXG4gICAgICBkZXBlbmRhYm90OiB0cnVlLFxuICAgICAgZGVwZW5kYWJvdE9wdGlvbnM6IHtcbiAgICAgICAgc2NoZWR1bGVJbnRlcnZhbDogRGVwZW5kYWJvdFNjaGVkdWxlSW50ZXJ2YWwuV0VFS0xZLFxuICAgICAgICBsYWJlbHM6IFsnZGVwZW5kZW5jaWVzJywgJ2F1dG8tYXBwcm92ZSddLFxuICAgICAgICBncm91cHM6IHtcbiAgICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICBwYXR0ZXJuczogWycqJ10sXG4gICAgICAgICAgICBleGNsdWRlUGF0dGVybnM6IFsnYXdzLWNkayonLCAncHJvamVuJ10sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgaWdub3JlOiBbeyBkZXBlbmRlbmN5TmFtZTogJ2F3cy1jZGstbGliJyB9LCB7IGRlcGVuZGVuY3lOYW1lOiAnYXdzLWNkaycgfV0sXG4gICAgICB9LFxuICAgICAgLy8gLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9wcm9qZW4vcHJvamVuL2Rpc2N1c3Npb25zLzQwNDAjZGlzY3Vzc2lvbmNvbW1lbnQtMTE5MDU2MjhcbiAgICAgIHJlbGVhc2FibGVDb21taXRzOiBSZWxlYXNhYmxlQ29tbWl0cy5vZlR5cGUoW1xuICAgICAgICAnZmVhdCcsXG4gICAgICAgICdmaXgnLFxuICAgICAgICAnY2hvcmUnLFxuICAgICAgICAncmVmYWN0b3InLFxuICAgICAgICAncGVyZicsXG4gICAgICBdKSxcbiAgICAgIGdpdGh1Yk9wdGlvbnM6IHtcbiAgICAgICAgcHVsbFJlcXVlc3RMaW50T3B0aW9uczoge1xuICAgICAgICAgIHNlbWFudGljVGl0bGVPcHRpb25zOiB7XG4gICAgICAgICAgICAvLyBzZWUgY29tbWl0IHR5cGVzIGhlcmU6IGh0dHBzOi8vd3d3LmNvbnZlbnRpb25hbGNvbW1pdHMub3JnL2VuL3YxLjAuMC8jc3VtbWFyeVxuICAgICAgICAgICAgdHlwZXM6IFtcbiAgICAgICAgICAgICAgJ2ZlYXQnLFxuICAgICAgICAgICAgICAnZml4JyxcbiAgICAgICAgICAgICAgJ2Nob3JlJyxcbiAgICAgICAgICAgICAgJ3JlZmFjdG9yJyxcbiAgICAgICAgICAgICAgJ3BlcmYnLFxuICAgICAgICAgICAgICAnZG9jcycsXG4gICAgICAgICAgICAgICdzdHlsZScsXG4gICAgICAgICAgICAgICd0ZXN0JyxcbiAgICAgICAgICAgICAgJ2J1aWxkJyxcbiAgICAgICAgICAgICAgJ2NpJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICB2ZXJzaW9ucmNPcHRpb25zOiB7XG4gICAgICAgIHR5cGVzOiBbXG4gICAgICAgICAgeyB0eXBlOiAnZmVhdCcsIHNlY3Rpb246ICdGZWF0dXJlcycgfSxcbiAgICAgICAgICB7IHR5cGU6ICdmaXgnLCBzZWN0aW9uOiAnQnVnIEZpeGVzJyB9LFxuICAgICAgICAgIHsgdHlwZTogJ2Nob3JlJywgc2VjdGlvbjogJ0Nob3JlcycgfSxcbiAgICAgICAgICB7IHR5cGU6ICdkb2NzJywgc2VjdGlvbjogJ0RvY3MnIH0sXG4gICAgICAgICAgeyB0eXBlOiAnc3R5bGUnLCBoaWRkZW46IHRydWUgfSxcbiAgICAgICAgICB7IHR5cGU6ICdyZWZhY3RvcicsIGhpZGRlbjogdHJ1ZSB9LFxuICAgICAgICAgIHsgdHlwZTogJ3BlcmYnLCBzZWN0aW9uOiAnUGVyZm9ybWFuY2UnIH0sXG4gICAgICAgICAgeyB0eXBlOiAndGVzdCcsIGhpZGRlbjogdHJ1ZSB9LFxuICAgICAgICBdLFxuICAgICAgfSxcbiAgICAgIGVzbGludE9wdGlvbnM6IHtcbiAgICAgICAgcHJldHRpZXI6IGZhbHNlLFxuICAgICAgICBkaXJzOiBbJ3NyYyddLFxuICAgICAgICBpZ25vcmVQYXR0ZXJuczogWycqKi8qLWZ1bmN0aW9uLnRzJywgJ2V4YW1wbGVzLyddLFxuICAgICAgfSxcbiAgICAgIC8vIGV4cGVyaW1lbnRhbEludGVnUnVubmVyOiB0cnVlLFxuICAgICAgLy8gbWFudWFsIGludGVnIHRlc3Qgc2V0dXBcbiAgICAgIHRzY29uZmlnRGV2OiB7XG4gICAgICAgIGNvbXBpbGVyT3B0aW9uczoge30sXG4gICAgICAgIGluY2x1ZGU6IFsnaW50ZWctdGVzdHMvKiovKi50cyddLFxuICAgICAgfSxcbiAgICAgIHB1bGxSZXF1ZXN0VGVtcGxhdGVDb250ZW50czogW2ZzLnJlYWRGaWxlU3luYyhgJHtiYXNlQXNzZXRzRGlyZWN0b3J5fS9jb21tb24vZ2l0aHViX3B1bGxfcmVxdWVzdC5tZGApLnRvU3RyaW5nKCldLFxuICAgICAgLy8gTk9URTogaXNzdWUgdGVtcGxhdGVzIGFyZSBub3Qgc3VwcG9ydGVkIHlldC4gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9wcm9qZW4vcHJvamVuL3B1bGwvMzY0OFxuICAgICAgLy8gaXNzdWVUZW1wbGF0ZXM6IHt9XG4gICAgICByZWFkbWU6IHtcbiAgICAgICAgY29udGVudHM6IFtcbiAgICAgICAgICBgXG4hW1NvdXJjZV0oaHR0cHM6Ly9pbWcuc2hpZWxkcy5pby9naXRodWIvc3RhcnMvTVYtQ29uc3VsdGluZy8ke29wdGlvbnMubmFtZX0/bG9nbz1naXRodWImbGFiZWw9R2l0SHViJTIwU3RhcnMpXG5bIVtCdWlsZCBTdGF0dXNdKGh0dHBzOi8vZ2l0aHViLmNvbS9NVi1Db25zdWx0aW5nLyR7b3B0aW9ucy5uYW1lfS9hY3Rpb25zL3dvcmtmbG93cy9idWlsZC55bWwvYmFkZ2Uuc3ZnKV0oaHR0cHM6Ly9naXRodWIuY29tL01WLUNvbnN1bHRpbmcvJHtvcHRpb25zLm5hbWV9L2FjdGlvbnMvd29ya2Zsb3dzL2J1aWxkLnltbClcblshW0VTTGludCBDb2RlIEZvcm1hdHRpbmddKGh0dHBzOi8vaW1nLnNoaWVsZHMuaW8vYmFkZ2UvY29kZV9zdHlsZS1lc2xpbnQtYnJpZ2h0Z3JlZW4uc3ZnKV0oaHR0cHM6Ly9lc2xpbnQub3JnKVxuWyFbTGF0ZXN0IHJlbGVhc2VdKGh0dHBzOi8vaW1nLnNoaWVsZHMuaW8vZ2l0aHViL3JlbGVhc2UvTVYtQ29uc3VsdGluZy8ke29wdGlvbnMubmFtZX0uc3ZnKV0oaHR0cHM6Ly9naXRodWIuY29tL01WLUNvbnN1bHRpbmcvJHtvcHRpb25zLm5hbWV9L3JlbGVhc2VzKVxuIVtHaXRIdWJdKGh0dHBzOi8vaW1nLnNoaWVsZHMuaW8vZ2l0aHViL2xpY2Vuc2UvTVYtQ29uc3VsdGluZy8ke29wdGlvbnMubmFtZX0pXG5bIVtucG1dKGh0dHBzOi8vaW1nLnNoaWVsZHMuaW8vbnBtL2R0L0BtYXZvZ2VsLyR7b3B0aW9ucy5uYW1lfT9sYWJlbD1ucG0mY29sb3I9b3JhbmdlKV0oaHR0cHM6Ly93d3cubnBtanMuY29tL3BhY2thZ2UvQG1hdm9nZWwvJHtvcHRpb25zLm5hbWV9KVxuWyFbdHlwZXNjcmlwdF0oaHR0cHM6Ly9pbWcuc2hpZWxkcy5pby9iYWRnZS9qc2lpLXR5cGVzY3JpcHQtYmx1ZXZpb2xldC5zdmcpXShodHRwczovL3d3dy5ucG1qcy5jb20vcGFja2FnZS9AbWF2b2dlbC8ke29wdGlvbnMubmFtZX0pXG4gICAgICAgICAgYCxcbiAgICAgICAgICBgIyAke29wdGlvbnMubmFtZX1gLFxuICAgICAgICAgICdNeSBhd2Vzb21lIGRlc2NyaXB0aW9uLi4uJyxcbiAgICAgICAgICBgXG4jIyBUYWJsZSBvZiBDb250ZW50c1xuXG4tIFtGZWF0dXJlc10oI2ZlYXR1cmVzKVxuLSBbVXNhZ2VdKCN1c2FnZSlcbi0gW1NvbHV0aW9uIERlc2lnbl0oI3NvbHV0aW9uLWRlc2lnbilcbi0gW0luc3BpcmF0aW9uXSgjaW5zcGlyYXRpb24pXG5cbiMjIEZlYXR1cmVzXG5cbi0g4pqhICoqUXVpY2sgU2V0dXAqKjogVEJEXG4tIPCfk48gKipCZXN0IFByYWN0aWNlIFNldHVwKio6IFRCRFxuLSDwn6S54oCN4pmC77iPICoqUHJlLWluc3RhbGxlZCBwYWNrYWdlcyoqOiBUQkRcbi0g8J+Pl++4jyAqKkV4dGVuc2liaWxpdHkqKjogVEJEXG5cbiMjIFVzYWdlXG5UaGUgZm9sbG93aW5nIHN0ZXBzIGdldCB5b3Ugc3RhcnRlZDpcblxuMS4gQ3JlYXRlIGEgbmV3IFxcYGF3c2Nkay1hcHBcXGAgdmlhXG5cXGBcXGBcXGBiYXNoXG5ucHggcHJvamVuIG5ldyBhd3NjZGstYXBwLXRzIC0tY2RrVmVyc2lvbj0yLjE3Ny4wIC0tcGFja2FnZS1tYW5hZ2VyPW5wbVxuXFxgXFxgXFxgXG4zLiBBZGQgXFxgQG1hdm9nZWwvJHtvcHRpb25zLm5hbWV9XFxgIGFzIGEgZGVwZW5kZW5jeSB0byB5b3VyIHByb2plY3QgaW4gdGhlIFxcYC5wcm9qZW5yYy50c1xcYCBmaWxlXG40LiBSdW4gXFxgbnB4IHByb2plblxcYCB0byBpbnN0YWxsIGl0XG41LiBBZGQgdGhlIGZvbGxvd2luZyB0byB0aGUgXFxgc3JjL21haW4udHNcXGAgZmlsZTpcblxcYFxcYFxcYHRzXG5pbXBvcnQgeyBBcHAsIFN0YWNrLCBTdGFja1Byb3BzIH0gZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0ICogYXMgZWMyIGZyb20gJ2F3cy1jZGstbGliL2F3cy1lYzInO1xuaW1wb3J0ICogYXMgaWFtIGZyb20gJ2F3cy1jZGstbGliL2F3cy1pYW0nO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQgeyBQbGFjZWhvbGRlciB9IGZyb20gJ0BtYXZvZ2VsLyR7b3B0aW9ucy5uYW1lfSc7XG5cbmV4cG9ydCBjbGFzcyBNeVN0YWNrIGV4dGVuZHMgU3RhY2sge1xuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogU3RhY2tQcm9wcyA9IHt9KSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCBwcm9wcyk7XG5cbiAgICBuZXcgUGxhY2Vob2xkZXIodGhpcywgJ3BsYWNlaG9sZGVyJywge1xuICAgICAgLy8gYW5kIG1vcmUuLi4g8J+SoVxuICAgIH0pO1xuICB9XG59XG5cbmNvbnN0IGVudiA9IHtcbiAgYWNjb3VudDogJzEyMzQ1Njc4OTkxMicsXG4gIHJlZ2lvbjogJ2V1LWNlbnRyYWwtMScsXG59O1xuXG5jb25zdCBhcHAgPSBuZXcgQXBwKCk7XG5uZXcgTXlTdGFjayhhcHAsICdwbGFjZWhvbGRlcicsIHsgZW52IH0pO1xuYXBwLnN5bnRoKCk7XG5cXGBcXGBcXGBcblxuYW5kIGRlcGxveSBpdFxuXFxgXFxgXFxgYmFzaFxubnB4IHByb2plbiBidWlsZFxubnB4IHByb2plbiBkZXBsb3lcblxcYFxcYFxcYFxuXG53aXRoIHRoZSBvdXRwdXRcblxcYFxcYFxcYGNvbnNvbGVcblRCRFxuXFxgXFxgXFxgXG5cblNlZSB0aGUgW2V4YW1wbGVzXSguL2V4YW1wbGVzKSBmb2xkZXIgZm9yIG1vcmUgaW5zcGlyYXRpb24uXG5cbiMjIFNvbHV0aW9uIERlc2lnblxuXG48ZGV0YWlscz5cbiAgPHN1bW1hcnk+Li4uIGlmIHlvdSdyZSBjdXJpb3VzIGFib3V0IGNsaWNrIGhlcmUgZm9yIHRoZSBkZXRhaWxzPC9zdW1tYXJ5PlxuXG4hW3BsYWNlaG9sZGVyXShkb2NzL2ltZy9wbGFjZWhvbGRlci5kcmF3aW8tbWluLnBuZylcblxuPC9kZXRhaWxzPlxuXG4jIyBJbnNwaXJhdGlvblxuXG5hZGQgdG9vbHMgb3IgbGlua3Mgd2hpY2ggaW5zcGlyZWQgeW91XG4gICAgICAgICAgYCxcbiAgICAgICAgICBmcy5yZWFkRmlsZVN5bmMoYCR7YmFzZUFzc2V0c0RpcmVjdG9yeX0vY29tbW9uL2dpdGh1Yl9yZWFkbWVfY3RhLm1kYCkudG9TdHJpbmcoKSxcbiAgICAgICAgXS5qb2luKCdcXG4nKSxcbiAgICAgIH0sXG4gICAgICAvLyBOT1RFOiBrZWVwIGFsbCB0aGUgcGFzc2VkIGluIG9wdGlvbnMgd2hpY2ggY2FuIG92ZXJyaWRlIHRoZSBleGlzdGluZyBvbmVzIVxuICAgICAgLi4ub3B0aW9ucyxcbiAgICB9KTtcblxuICAgIC8vIGdpdGlnbm9yZVxuICAgIGNvbnN0IGZpbGVzUGF0dGVyblRvR2l0aWdub3JlID0gW1xuICAgICAgJ3RtcCcsXG4gICAgICAnLmNvZGVncHQnLFxuICAgIF07XG4gICAgZm9yIChjb25zdCBmaWxlIG9mIGZpbGVzUGF0dGVyblRvR2l0aWdub3JlKSB7XG4gICAgICB0aGlzLmdpdGlnbm9yZS5leGNsdWRlKGZpbGUpO1xuICAgIH1cbiAgICB0aGlzLmFkZERlcHMoXG4gICAgICAnY2RrLW5hZ0BeMi4zNy41NScsXG4gICAgKTtcbiAgICAvLyBDYXAgaW50ZWctcnVubmVyIGF0IExBU1RfSU5URUdfUlVOTkVSX1ZFUlNJT04gc2luY2UgaXQgc3RvcHBlZCBwdWJsaXNoaW5nIGFmdGVyIHRoYXQgdmVyc2lvbi5cbiAgICAvLyBpbnRlZy1ydW5uZXIgdXNlcyBwbGFpbiB2ZXJzaW9ucyAobm8gLWFscGhhLjAgc3VmZml4KS5cbiAgICAvLyBpbnRlZy10ZXN0cy1hbHBoYSBhbmQgYXdzbGludCBjb250aW51ZSB0byBwdWJsaXNoIGFuZCB0cmFjayBDREsgdmVyc2lvbnMgd2l0aCAtYWxwaGEuMCBzdWZmaXguXG4gICAgY29uc3QgcmF3Q2RrVmVyc2lvbiA9IHRoaXMuY2RrVmVyc2lvbi5yZXBsYWNlKC9bXFxefl0vLCAnJyk7XG4gICAgY29uc3QgaW50ZWdSdW5uZXJWZXJzaW9uID0gcmF3Q2RrVmVyc2lvbi5sb2NhbGVDb21wYXJlKExBU1RfSU5URUdfUlVOTkVSX1ZFUlNJT04sIHVuZGVmaW5lZCwgeyBudW1lcmljOiB0cnVlLCBzZW5zaXRpdml0eTogJ2Jhc2UnIH0pID4gMFxuICAgICAgPyBMQVNUX0lOVEVHX1JVTk5FUl9WRVJTSU9OXG4gICAgICA6IHJhd0Nka1ZlcnNpb247XG4gICAgdGhpcy5hZGREZXZEZXBzKFxuICAgICAgYEBhd3MtY2RrL2ludGVnLXJ1bm5lckAke2ludGVnUnVubmVyVmVyc2lvbn1gLFxuICAgICAgYEBhd3MtY2RrL2ludGVnLXRlc3RzLWFscGhhQCR7cmF3Q2RrVmVyc2lvbn0tYWxwaGEuMGAsXG4gICAgICAnQGNvbW1pdGxpbnQvY2xpQF4yMC4xLjAnLFxuICAgICAgJ0Bjb21taXRsaW50L2NvbmZpZy1jb252ZW50aW9uYWxAXjIwLjAuMCcsXG4gICAgICBgYXdzbGludEAke3Jhd0Nka1ZlcnNpb259LWFscGhhLjBgLFxuICAgICAgJ2h1c2t5QF45LjEuNycsXG4gICAgKTtcblxuICAgIHRoaXMucGFja2FnZS5zZXRTY3JpcHQoJ3ByZXBhcmUnLCAnaHVza3knKTtcbiAgICBuZXcgVGV4dEZpbGUodGhpcywgJy5jb21taXRsaW50cmMuanMnLCB7XG4gICAgICBsaW5lczogW1xuICAgICAgICAnbW9kdWxlLmV4cG9ydHMgPSB7IGV4dGVuZHM6IFtcXCdAY29tbWl0bGludC9jb25maWctY29udmVudGlvbmFsXFwnXSB9OycsXG4gICAgICBdLFxuICAgICAgbWFya2VyOiB0cnVlLFxuICAgIH0pO1xuXG4gICAgdGhpcy5wYWNrYWdlLnNldFNjcmlwdCgnYXdzbGludCcsICdhd3NsaW50Jyk7XG4gICAgLy8gLmdpdGh1Yi93b3JrZmxvd3MvYnVpbGQueW1sXG4gICAgY29uc3QgYnVpbGRXb3JrZmxvdyA9IHRoaXMuZ2l0aHViPy50cnlGaW5kV29ya2Zsb3coJ2J1aWxkJyk7XG4gICAgaWYgKCFidWlsZFdvcmtmbG93KSByZXR1cm47XG4gICAgY29uc3QgYnVpbGRKb2IgPSBidWlsZFdvcmtmbG93LmdldEpvYignYnVpbGQnKTtcbiAgICBpZiAoIWJ1aWxkSm9iIHx8ICEoJ3N0ZXBzJyBpbiBidWlsZEpvYikpIHJldHVybjtcbiAgICAvLyBUT0RPOiBmaWd1cmUgb3V0IHdoeSB3cm9uZyB0eXBlc1xuICAgIGNvbnN0IGdldEJ1aWxkU3RlcHMgPSBidWlsZEpvYi5zdGVwcyBhcyB1bmtub3duIGFzICgpID0+IEpvYlN0ZXBbXTtcbiAgICBjb25zdCBidWlsZEpvYlN0ZXBzID0gZ2V0QnVpbGRTdGVwcygpO1xuICAgIGJ1aWxkV29ya2Zsb3cudXBkYXRlSm9iKCdidWlsZCcsIHtcbiAgICAgIC4uLmJ1aWxkSm9iLFxuICAgICAgc3RlcHM6IFtcbiAgICAgICAgLi4uYnVpbGRKb2JTdGVwcy5zbGljZSgwLCA0KSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6ICdSdW4gYXdzbGludCcsXG4gICAgICAgICAgcnVuOiAnbnBtIHJ1biBhd3NsaW50JyxcbiAgICAgICAgfSxcbiAgICAgICAgLi4uYnVpbGRKb2JTdGVwcy5zbGljZSg0KSxcbiAgICAgIF0sXG4gICAgfSk7XG5cbiAgICB0aGlzLnBhY2thZ2Uuc2V0U2NyaXB0KFxuICAgICAgJ2ludGVnLXRlc3QnLFxuICAgICAgYGludGVnLXJ1bm5lciAtLWRpcmVjdG9yeSAuL2ludGVnLXRlc3RzICR7aW50ZWdUZXN0UmVnaW9ucz8ubWFwKHJlZ2lvbiA9PiBgLS1wYXJhbGxlbC1yZWdpb25zICR7cmVnaW9ufWApLmpvaW4oJyAnKX0gLS11cGRhdGUtb24tZmFpbGVkYCxcbiAgICApO1xuXG4gICAgbmV3IFRleHRGaWxlKHRoaXMsICcuZ2l0aHViL0lTU1VFX1RFTVBMQVRFL2J1Z19yZXBvcnQubWQnLCB7XG4gICAgICBsaW5lczogW2ZzLnJlYWRGaWxlU3luYyhgJHtiYXNlQXNzZXRzRGlyZWN0b3J5fS9jb21tb24vZ2l0aHViX2J1Z19yZXBvcnQubWRgKS50b1N0cmluZygpXSxcbiAgICB9KTtcblxuICAgIG5ldyBUZXh0RmlsZSh0aGlzLCAnLmdpdGh1Yi9JU1NVRV9URU1QTEFURS9mZWF0dXJlX3JlcXVlc3QubWQnLCB7XG4gICAgICBsaW5lczogW2ZzLnJlYWRGaWxlU3luYyhgJHtiYXNlQXNzZXRzRGlyZWN0b3J5fS9jb21tb24vZ2l0aHViX2ZlYXR1cmVfcmVxdWVzdC5tZGApLnRvU3RyaW5nKCldLFxuICAgIH0pO1xuXG4gICAgbmV3IFlhbWxGaWxlKHRoaXMsICcuZ2l0aHViL0ZVTkRJTkcueWFtbCcsIHtcbiAgICAgIG9iajoge1xuICAgICAgICBnaXRodWI6ICdtYXZvZ2VsJyxcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICBuZXcgVGV4dEZpbGUodGhpcywgJ0NPTlRSSUJVVElORy5tZCcsIHtcbiAgICAgIGxpbmVzOiBbZnMucmVhZEZpbGVTeW5jKGAke2Jhc2VBc3NldHNEaXJlY3Rvcnl9L2NvbW1vbi9jb250cmlidXRpbmcubWRgKS50b1N0cmluZygpXSxcbiAgICB9KTtcblxuICAgIG5ldyBUZXh0RmlsZSh0aGlzLCAnLnByZXR0aWVycmMnLCB7XG4gICAgICBsaW5lczogW2ZzLnJlYWRGaWxlU3luYyhgJHtiYXNlQXNzZXRzRGlyZWN0b3J5fS9jb21tb24vcHJldHRpZXJyY2ApLnRvU3RyaW5nKCldLFxuICAgIH0pO1xuXG4gICAgLy8gd3JpdGUgc2FtcGxlIGNvZGUgdG8gbWFpbi50cyAmIHRvIG1haW4udGVzdC50c1xuICAgIGlmIChvcHRpb25zLnNhbXBsZUNvZGUgPz8gdHJ1ZSkge1xuICAgICAgbmV3IFNhbXBsZUNvZGUodGhpcywge1xuICAgICAgICBiYXNlQXNzZXRzRGlyZWN0b3J5LFxuICAgICAgfSk7XG4gICAgfVxuICB9XG59XG5cbmludGVyZmFjZSBTYW1wbGVDb2RlT3B0aW9ucyB7XG4gIHJlYWRvbmx5IGJhc2VBc3NldHNEaXJlY3Rvcnk/OiBzdHJpbmc7XG59XG5cbmNsYXNzIFNhbXBsZUNvZGUgZXh0ZW5kcyBDb21wb25lbnQge1xuICBwcml2YXRlIHJlYWRvbmx5IGxpYnJhcnk6IEF3c0Nka0NvbnN0cnVjdExpYnJhcnk7XG4gIHByaXZhdGUgcmVhZG9ubHkgb3B0aW9uczogU2FtcGxlQ29kZU9wdGlvbnM7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgbGlicmFyeTogQXdzQ2RrQ29uc3RydWN0TGlicmFyeSxcbiAgICBvcHRpb25zOiBTYW1wbGVDb2RlT3B0aW9ucyxcbiAgKSB7XG4gICAgc3VwZXIobGlicmFyeSk7XG4gICAgdGhpcy5saWJyYXJ5ID0gbGlicmFyeTtcbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuICB9XG5cbiAgcHVibGljIHN5bnRoZXNpemUoKSB7XG4gICAgY29uc3Qgb3V0ZGlyID0gdGhpcy5wcm9qZWN0Lm91dGRpcjtcbiAgICBjb25zdCBzcmNkaXIgPSBwYXRoLmpvaW4ob3V0ZGlyLCB0aGlzLmxpYnJhcnkuc3JjZGlyKTtcbiAgICBpZiAoXG4gICAgICBmcy5leGlzdHNTeW5jKHNyY2RpcikgJiZcbiAgICAgIGZzLnJlYWRkaXJTeW5jKHNyY2RpcikuZmlsdGVyKCh4KSA9PiB4LmVuZHNXaXRoKCcudHMnKSkgJiZcbiAgICAgICFmcy5yZWFkRmlsZVN5bmMoYCR7c3JjZGlyfS9pbmRleC50c2ApLnRvU3RyaW5nKCkuaW5jbHVkZXMoJ2V4cG9ydCBjbGFzcyBIZWxsbycpIC8vIE5vdGU6IGZyb20gcGFyZW50XG4gICAgKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZnMubWtkaXJTeW5jKHNyY2RpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgZnMud3JpdGVGaWxlU3luYyhwYXRoLmpvaW4oc3JjZGlyLCAnaW5kZXgudHMnKSwgZnMucmVhZEZpbGVTeW5jKGAke3RoaXMub3B0aW9ucy5iYXNlQXNzZXRzRGlyZWN0b3J5fS9jZGstY29uc3RydWN0L3NyY19pbmRleC50c2ApLnRvU3RyaW5nKCkpO1xuICAgIGZzLndyaXRlRmlsZVN5bmMocGF0aC5qb2luKHNyY2RpciwgJ3BsYWNlaG9sZGVyLnRzJyksIGZzLnJlYWRGaWxlU3luYyhgJHt0aGlzLm9wdGlvbnMuYmFzZUFzc2V0c0RpcmVjdG9yeX0vY2RrLWNvbnN0cnVjdC9zcmNfcGxhY2Vob2xkZXIudHNgKS50b1N0cmluZygpKTtcbiAgICAvLyBjcmQgd2l0aCBsYW1iZGEgZ2VuZXJhdGlvblxuICAgIGZzLm1rZGlyU3luYyhgJHtzcmNkaXJ9L2NyZC1leGFtcGxlYCwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgZnMud3JpdGVGaWxlU3luYyhwYXRoLmpvaW4oYCR7c3JjZGlyfS9jcmQtZXhhbXBsZWAsICdjcmQtZXhhbXBsZS50cycpLCBmcy5yZWFkRmlsZVN5bmMoYCR7dGhpcy5vcHRpb25zLmJhc2VBc3NldHNEaXJlY3Rvcnl9L2Nkay1jb25zdHJ1Y3Qvc3JjX2NyZC1leGFtcGxlLnRzYCkudG9TdHJpbmcoKSk7XG4gICAgZnMud3JpdGVGaWxlU3luYyhwYXRoLmpvaW4oYCR7c3JjZGlyfS9jcmQtZXhhbXBsZWAsICdjcmQtZXhhbXBsZS5sYW1iZGEudHMnKSwgZnMucmVhZEZpbGVTeW5jKGAke3RoaXMub3B0aW9ucy5iYXNlQXNzZXRzRGlyZWN0b3J5fS9jZGstY29uc3RydWN0L3NyY19jcmQtZXhhbXBsZS5sYW1iZGEudHNgKS50b1N0cmluZygpKTtcblxuXG4gICAgY29uc3QgdGVzdGRpciA9IHBhdGguam9pbihvdXRkaXIsIHRoaXMubGlicmFyeS50ZXN0ZGlyKTtcbiAgICBpZiAoXG4gICAgICBmcy5leGlzdHNTeW5jKHRlc3RkaXIpICYmXG4gICAgICBmcy5yZWFkZGlyU3luYyh0ZXN0ZGlyKS5maWx0ZXIoKHgpID0+IHguZW5kc1dpdGgoJy50cycpKSAmJlxuICAgICAgIWZzLmV4aXN0c1N5bmMoYCR7dGVzdGRpcn0vaGVsbG8udGVzdC50c2ApIC8vIE5vdGU6IGZyb20gcGFyZW50XG4gICAgKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIC8vIHJlbW92ZSAke3Rlc3RkaXJ9L2hlbGxvLnRlc3QudHMgZmlsZS4gT24gdGhlIG90aGVyIGhhbmQsIHdlIG92ZXJyaWRlIGluZGV4LnRzXG4gICAgZnMudW5saW5rU3luYyhgJHt0ZXN0ZGlyfS9oZWxsby50ZXN0LnRzYCk7XG4gICAgZnMubWtkaXJTeW5jKHRlc3RkaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgIGZzLndyaXRlRmlsZVN5bmMocGF0aC5qb2luKHRlc3RkaXIsICdpbmRleC50ZXN0LnRzJyksIGZzLnJlYWRGaWxlU3luYyhgJHt0aGlzLm9wdGlvbnMuYmFzZUFzc2V0c0RpcmVjdG9yeX0vY2RrLWNvbnN0cnVjdC90ZXN0X2luZGV4LnRlc3QudHNgKS50b1N0cmluZygpKTtcbiAgICAvLyBsYW1iZGEgdGVzdHMgd2l0aCBqZXN0IHN0dWJzXG4gICAgZnMubWtkaXJTeW5jKGAke3Rlc3RkaXJ9L2NyZC1leGFtcGxlYCwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgZnMud3JpdGVGaWxlU3luYyhwYXRoLmpvaW4oYCR7dGVzdGRpcn0vY3JkLWV4YW1wbGVgLCAnY3JkLWV4YW1wbGUudGVzdC50cycpLCBmcy5yZWFkRmlsZVN5bmMoYCR7dGhpcy5vcHRpb25zLmJhc2VBc3NldHNEaXJlY3Rvcnl9L2Nkay1jb25zdHJ1Y3QvdGVzdF9jcmQtZXhhbXBsZS50ZXN0LnRzYCkudG9TdHJpbmcoKSk7XG5cblxuICAgIGNvbnN0IGludGVnVGVzdGRpciA9IHBhdGguam9pbihvdXRkaXIsICdpbnRlZy10ZXN0cycpO1xuICAgIGlmIChcbiAgICAgIGZzLmV4aXN0c1N5bmMoaW50ZWdUZXN0ZGlyKSAmJlxuICAgICAgZnMucmVhZGRpclN5bmMoaW50ZWdUZXN0ZGlyKS5maWx0ZXIoKHgpID0+IHguZW5kc1dpdGgoJy50cycpKVxuICAgICkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBmcy5ta2RpclN5bmMoaW50ZWdUZXN0ZGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICBmcy53cml0ZUZpbGVTeW5jKHBhdGguam9pbihpbnRlZ1Rlc3RkaXIsICdpbnRlZy5wbGFjZWhvbGRlci50cycpLCBmcy5yZWFkRmlsZVN5bmMoYCR7dGhpcy5vcHRpb25zLmJhc2VBc3NldHNEaXJlY3Rvcnl9L2Nkay1jb25zdHJ1Y3QvaW50ZWdfaW50ZWcucGxhY2Vob2xkZXIudHNgKS50b1N0cmluZygpKTtcblxuICAgIGNvbnN0IGludGVnVGVzdEZ1bmN0aW9uc2RpciA9IHBhdGguam9pbihpbnRlZ1Rlc3RkaXIsICdmdW5jdGlvbnMnKTtcbiAgICBpZiAoXG4gICAgICBmcy5leGlzdHNTeW5jKGludGVnVGVzdEZ1bmN0aW9uc2RpcikgJiZcbiAgICAgIGZzLnJlYWRkaXJTeW5jKGludGVnVGVzdEZ1bmN0aW9uc2RpcikuZmlsdGVyKCh4KSA9PiB4LmVuZHNXaXRoKCcudHMnKSlcbiAgICApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZnMubWtkaXJTeW5jKGludGVnVGVzdEZ1bmN0aW9uc2RpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgZnMud3JpdGVGaWxlU3luYyhwYXRoLmpvaW4oaW50ZWdUZXN0RnVuY3Rpb25zZGlyLCAndGVzdC1oYW5kbGVyLnRzJyksIGZzLnJlYWRGaWxlU3luYyhgJHt0aGlzLm9wdGlvbnMuYmFzZUFzc2V0c0RpcmVjdG9yeX0vY2RrLWNvbnN0cnVjdC9pbnRlZ190ZXN0LWhhbmRsZXIudHNgKS50b1N0cmluZygpKTtcblxuICAgIGNvbnN0IGRvY3NkaXIgPSBwYXRoLmpvaW4ob3V0ZGlyLCAnZG9jcycpO1xuICAgIGlmIChcbiAgICAgIGZzLmV4aXN0c1N5bmMoZG9jc2RpcikgJiZcbiAgICAgIGZzLnJlYWRkaXJTeW5jKGRvY3NkaXIpLmZpbHRlcigoeCkgPT4geC5lbmRzV2l0aCgnLmRyYXdpbycpKVxuICAgICkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBmcy5ta2RpclN5bmMoZG9jc2RpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgZnMud3JpdGVGaWxlU3luYyhwYXRoLmpvaW4oZG9jc2RpciwgJ3BsYWNlaG9sZGVyLmRyYXdpbycpLCBmcy5yZWFkRmlsZVN5bmMoYCR7dGhpcy5vcHRpb25zLmJhc2VBc3NldHNEaXJlY3Rvcnl9L2NvbW1vbi9kb2NzX3BsYWNlaG9sZGVyLmRyYXdpb2ApLnRvU3RyaW5nKCkpO1xuXG4gICAgY29uc3QgZXhhbXBsZXNkaXIgPSBwYXRoLmpvaW4ob3V0ZGlyLCAnZXhhbXBsZXMnLCAnc2ltcGxlJyk7XG4gICAgaWYgKFxuICAgICAgZnMuZXhpc3RzU3luYyhleGFtcGxlc2RpcikgJiZcbiAgICAgIGZzLnJlYWRkaXJTeW5jKGV4YW1wbGVzZGlyKS5maWx0ZXIoKHgpID0+IHguZW5kc1dpdGgoJy5kcmF3aW8nKSlcbiAgICApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZnMubWtkaXJTeW5jKGV4YW1wbGVzZGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICBmcy53cml0ZUZpbGVTeW5jKHBhdGguam9pbihleGFtcGxlc2RpciwgJ21haW4udHMnKSwgZnMucmVhZEZpbGVTeW5jKGAke3RoaXMub3B0aW9ucy5iYXNlQXNzZXRzRGlyZWN0b3J5fS9jZGstY29uc3RydWN0L2V4YW1wbGVzX3NpbXBsZV9tYWluLnRzYCkudG9TdHJpbmcoKSk7XG4gIH1cbn0iXX0=
|
|
367
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2RrLWNvbnN0cnVjdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wcm9qZWN0cy9jZGstY29uc3RydWN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEseUJBQXlCO0FBQ3pCLDZCQUE2QjtBQUU3QixtQ0FBc0Y7QUFDdEYsOENBQXlHO0FBQ3pHLDhDQUErRDtBQUcvRCwyRUFBMkU7QUFDM0UsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDO0FBQzNCLE1BQU0saUJBQWlCLEdBQUcsc0JBQWEsQ0FBQyxXQUFXLENBQUM7QUFFcEQsc0VBQXNFO0FBQ3RFLG1HQUFtRztBQUNuRyxxRkFBcUY7QUFDckYsTUFBTSx5QkFBeUIsR0FBRyxVQUFVLENBQUM7QUFxQjdDOzs7O0dBSUc7QUFDSCxNQUFhLHNCQUF1QixTQUFRLCtCQUFzQjtJQUVoRSxZQUFZLE9BQXNDO1FBQ2hELE1BQU0sbUJBQW1CLEdBQUcsT0FBTyxDQUFDLG1CQUFtQixJQUFJLEdBQUcsT0FBTyxDQUFDLEdBQUcsRUFBRSwwQ0FBMEMsQ0FBQztRQUN0SCxNQUFNLGdCQUFnQixHQUFHLE9BQU8sQ0FBQyxnQkFBZ0IsSUFBSSxDQUFDLFdBQVcsRUFBRSxXQUFXLENBQUMsQ0FBQztRQUVoRixLQUFLLENBQUM7WUFDSixrQkFBa0IsRUFBRSxJQUFJO1lBQ3hCLGNBQWMsRUFBRSxvQkFBb0I7WUFDcEMsZUFBZSxFQUFFLE1BQU07WUFDdkIsT0FBTyxFQUFFLFlBQVk7WUFDckIsV0FBVyxFQUFFLFFBQVE7WUFDckIsY0FBYyxFQUFFLFdBQVc7WUFDM0IsbUJBQW1CLEVBQUUsV0FBVztZQUNoQyxTQUFTLEVBQUUsY0FBYztZQUN6QixZQUFZLEVBQUUsSUFBSTtZQUNsQixjQUFjLEVBQUUsbUJBQVUsQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHO1lBQ2pELFNBQVMsRUFBRSxtQkFBVSxDQUFDLFNBQVMsQ0FBQyxNQUFNO1lBQ3RDLGFBQWEsRUFBRTtnQkFDYixPQUFPLEVB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QyxDQUFDLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQ2hFLENBQUM7WUFDRCxPQUFPO1FBQ1QsQ0FBQztRQUNELEVBQUUsQ0FBQyxTQUFTLENBQUMsV0FBVyxFQUFFLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7UUFDL0MsRUFBRSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxTQUFTLENBQUMsRUFBRSxFQUFFLENBQUMsWUFBWSxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxtQkFBbUIsd0NBQXdDLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO0lBQy9KLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGZzIGZyb20gJ2ZzJztcbmltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5cbmltcG9ydCB7IENvbXBvbmVudCwgamF2YXNjcmlwdCwgUmVsZWFzYWJsZUNvbW1pdHMsIFRleHRGaWxlLCBZYW1sRmlsZSB9IGZyb20gJ3Byb2plbic7XG5pbXBvcnQgeyBBd3NDZGtDb25zdHJ1Y3RMaWJyYXJ5LCBBd3NDZGtDb25zdHJ1Y3RMaWJyYXJ5T3B0aW9ucywgTGFtYmRhUnVudGltZSB9IGZyb20gJ3Byb2plbi9saWIvYXdzY2RrJztcbmltcG9ydCB7IERlcGVuZGFib3RTY2hlZHVsZUludGVydmFsIH0gZnJvbSAncHJvamVuL2xpYi9naXRodWInO1xuaW1wb3J0IHsgSm9iU3RlcCB9IGZyb20gJ3Byb2plbi9saWIvZ2l0aHViL3dvcmtmbG93cy1tb2RlbCc7XG5cbi8vIFNldCB0aGUgbWluaW11bSBub2RlIHZlcnNpb24gZm9yIEFXUyBDREsgYW5kIHRoZSBHaXRIdWIgYWN0aW9ucyB3b3JrZmxvd1xuY29uc3Qgbm9kZVZlcnNpb24gPSAnMjIueCc7XG5jb25zdCBsYW1iZGFOb2RlVmVyc2lvbiA9IExhbWJkYVJ1bnRpbWUuTk9ERUpTXzIyX1g7XG5cbi8vIFRoZSBsYXN0IENESyB2ZXJzaW9uIGZvciB3aGljaCBAYXdzLWNkay9pbnRlZy1ydW5uZXIgd2FzIHB1Ymxpc2hlZC5cbi8vIGludGVnLXJ1bm5lciB1c2VzIHBsYWluIHZlcnNpb25zIChubyAtYWxwaGEuMCBzdWZmaXgpIGFuZCBzdG9wcGVkIHB1Ymxpc2hpbmcgYWZ0ZXIgdGhpcyB2ZXJzaW9uLlxuLy8gQGF3cy1jZGsvaW50ZWctdGVzdHMtYWxwaGEgYW5kIGF3c2xpbnQgY29udGludWUgdG8gcHVibGlzaCBhbmQgdHJhY2sgQ0RLIHZlcnNpb25zLlxuY29uc3QgTEFTVF9JTlRFR19SVU5ORVJfVkVSU0lPTiA9ICcyLjE5Ny4xMic7XG5cbi8qKlxuICogVGhlIG9wdGlvbnMgZm9yIHRoZSBjb25zdHJ1Y3RcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBNdmNDZGtDb25zdHJ1Y3RMaWJyYXJ5T3B0aW9ucyBleHRlbmRzIEF3c0Nka0NvbnN0cnVjdExpYnJhcnlPcHRpb25zIHtcbiAgLyoqXG4gICAqIEJhc2UgZGlyZWN0b3J5IGZvciB0aGUgYXNzZXRzXG4gICAqXG4gICAqIEBkZWZhdWx0ICR7cHJvY2Vzcy5jd2QoKX0vbm9kZV9tb2R1bGVzL212Yy1wcm9qZW4vYXNzZXRzXG4gICAqL1xuICByZWFkb25seSBiYXNlQXNzZXRzRGlyZWN0b3J5Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgcmVnaW9ucyB0byBydW4gdGhlIGludGVnIHRlc3RzIGluXG4gICAqXG4gICAqIEBkZWZhdWx0IGV1LXdlc3QtMSBhbmQgZXUtd2VzdC0yXG4gICAqL1xuICByZWFkb25seSBpbnRlZ1Rlc3RSZWdpb25zPzogc3RyaW5nW107XG59XG5cbi8qKlxuICogVHlwZVNjcmlwdCBsaWJyYXJ5XG4gKlxuICogQHBqaWQgbXZjLWF3c2Nkay1jb25zdHJ1Y3RcbiAqL1xuZXhwb3J0IGNsYXNzIE12Y0Nka0NvbnN0cnVjdExpYnJhcnkgZXh0ZW5kcyBBd3NDZGtDb25zdHJ1Y3RMaWJyYXJ5IHtcblxuICBjb25zdHJ1Y3RvcihvcHRpb25zOiBNdmNDZGtDb25zdHJ1Y3RMaWJyYXJ5T3B0aW9ucykge1xuICAgIGNvbnN0IGJhc2VBc3NldHNEaXJlY3RvcnkgPSBvcHRpb25zLmJhc2VBc3NldHNEaXJlY3RvcnkgPz8gYCR7cHJvY2Vzcy5jd2QoKX0vbm9kZV9tb2R1bGVzL0BtYXZvZ2VsL212Yy1wcm9qZW4vYXNzZXRzYDtcbiAgICBjb25zdCBpbnRlZ1Rlc3RSZWdpb25zID0gb3B0aW9ucy5pbnRlZ1Rlc3RSZWdpb25zID8/IFsnZXUtd2VzdC0xJywgJ2V1LXdlc3QtMiddO1xuXG4gICAgc3VwZXIoe1xuICAgICAgYXV0aG9yT3JnYW5pemF0aW9uOiB0cnVlLFxuICAgICAgY29weXJpZ2h0T3duZXI6ICdNViBDb25zdWx0aW5nIEdtYkgnLFxuICAgICAgY29weXJpZ2h0UGVyaW9kOiAnMjAyNScsXG4gICAgICBsaWNlbnNlOiAnQXBhY2hlLTIuMCcsXG4gICAgICBqc2lpVmVyc2lvbjogJ341LjkuMCcsXG4gICAgICBtaW5Ob2RlVmVyc2lvbjogbm9kZVZlcnNpb24sXG4gICAgICB3b3JrZmxvd05vZGVWZXJzaW9uOiBub2RlVmVyc2lvbixcbiAgICAgIHN0YWJpbGl0eTogJ2V4cGVyaW1lbnRhbCcsXG4gICAgICByZWxlYXNlVG9OcG06IHRydWUsXG4gICAgICBwYWNrYWdlTWFuYWdlcjogamF2YXNjcmlwdC5Ob2RlUGFja2FnZU1hbmFnZXIuTlBNLFxuICAgICAgbnBtQWNjZXNzOiBqYXZhc2NyaXB0Lk5wbUFjY2Vzcy5QVUJMSUMsXG4gICAgICBsYW1iZGFPcHRpb25zOiB7XG4gICAgICAgIHJ1bnRpbWU6IGxhbWJkYU5vZGVWZXJzaW9uLFxuICAgICAgICBhd3NTZGtDb25uZWN0aW9uUmV1c2U6IGZhbHNlLCAvLyBkb2Vzbid0IGV4aXN0IGluIEFXUyBTREsgSlMgdjNcbiAgICAgIH0sXG4gICAgICBhdXRvQXBwcm92ZU9wdGlvbnM6IHtcbiAgICAgICAgYWxsb3dlZFVzZXJuYW1lczogW1xuICAgICAgICAgICdkZXBlbmRhYm90JyxcbiAgICAgICAgICAnZGVwZW5kYWJvdFtib3RdJyxcbiAgICAgICAgICAnZ2l0aHViLWJvdCcsXG4gICAgICAgICAgJ2dpdGh1Yi1hY3Rpb25zW2JvdF0nLFxuICAgICAgICAgICdtdmMtYm90JyxcbiAgICAgICAgXSxcbiAgICAgICAgLy8gVGhlIG5hbWUgb2YgdGhlIHNlY3JldCB0aGF0IGhhcyB0aGUgR2l0SHViIFBBVCBmb3IgYXV0by1hcHByb3ZpbmcgUFJzIHdpdGggcGVybWlzc2lvbnMgcmVwbywgd29ya2Zsb3csIHdyaXRlOnBhY2thZ2VzXG4gICAgICAgIC8vIEdlbmVyYXRlIGEgbmV3IFBBVCAoaHR0cHM6Ly9naXRodWIuY29tL3NldHRpbmdzL3Rva2Vucy9uZXcpIGFuZCBhZGQgaXQgdG8geW91ciByZXBvJ3Mgc2VjcmV0c1xuICAgICAgICAvLyBOT1RFOiBjb21lcyBmcm9tIE1WLUNvbnN1bHRpbmcgT3JnXG4gICAgICAgIHNlY3JldDogJ1BST0pFTl9HSVRIVUJfVE9LRU4nLFxuICAgICAgfSxcbiAgICAgIGRlcGVuZGFib3Q6IHRydWUsXG4gICAgICBkZXBlbmRhYm90T3B0aW9uczoge1xuICAgICAgICBzY2hlZHVsZUludGVydmFsOiBEZXBlbmRhYm90U2NoZWR1bGVJbnRlcnZhbC5XRUVLTFksXG4gICAgICAgIGxhYmVsczogWydkZXBlbmRlbmNpZXMnLCAnYXV0by1hcHByb3ZlJ10sXG4gICAgICAgIGdyb3Vwczoge1xuICAgICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgIHBhdHRlcm5zOiBbJyonXSxcbiAgICAgICAgICAgIGV4Y2x1ZGVQYXR0ZXJuczogWydhd3MtY2RrKicsICdwcm9qZW4nXSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBpZ25vcmU6IFt7IGRlcGVuZGVuY3lOYW1lOiAnYXdzLWNkay1saWInIH0sIHsgZGVwZW5kZW5jeU5hbWU6ICdhd3MtY2RrJyB9XSxcbiAgICAgIH0sXG4gICAgICAvLyAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL3Byb2plbi9wcm9qZW4vZGlzY3Vzc2lvbnMvNDA0MCNkaXNjdXNzaW9uY29tbWVudC0xMTkwNTYyOFxuICAgICAgcmVsZWFzYWJsZUNvbW1pdHM6IFJlbGVhc2FibGVDb21taXRzLm9mVHlwZShbXG4gICAgICAgICdmZWF0JyxcbiAgICAgICAgJ2ZpeCcsXG4gICAgICAgICdjaG9yZScsXG4gICAgICAgICdyZWZhY3RvcicsXG4gICAgICAgICdwZXJmJyxcbiAgICAgIF0pLFxuICAgICAgZ2l0aHViT3B0aW9uczoge1xuICAgICAgICBwdWxsUmVxdWVzdExpbnRPcHRpb25zOiB7XG4gICAgICAgICAgc2VtYW50aWNUaXRsZU9wdGlvbnM6IHtcbiAgICAgICAgICAgIC8vIHNlZSBjb21taXQgdHlwZXMgaGVyZTogaHR0cHM6Ly93d3cuY29udmVudGlvbmFsY29tbWl0cy5vcmcvZW4vdjEuMC4wLyNzdW1tYXJ5XG4gICAgICAgICAgICB0eXBlczogW1xuICAgICAgICAgICAgICAnZmVhdCcsXG4gICAgICAgICAgICAgICdmaXgnLFxuICAgICAgICAgICAgICAnY2hvcmUnLFxuICAgICAgICAgICAgICAncmVmYWN0b3InLFxuICAgICAgICAgICAgICAncGVyZicsXG4gICAgICAgICAgICAgICdkb2NzJyxcbiAgICAgICAgICAgICAgJ3N0eWxlJyxcbiAgICAgICAgICAgICAgJ3Rlc3QnLFxuICAgICAgICAgICAgICAnYnVpbGQnLFxuICAgICAgICAgICAgICAnY2knLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIHZlcnNpb25yY09wdGlvbnM6IHtcbiAgICAgICAgdHlwZXM6IFtcbiAgICAgICAgICB7IHR5cGU6ICdmZWF0Jywgc2VjdGlvbjogJ0ZlYXR1cmVzJyB9LFxuICAgICAgICAgIHsgdHlwZTogJ2ZpeCcsIHNlY3Rpb246ICdCdWcgRml4ZXMnIH0sXG4gICAgICAgICAgeyB0eXBlOiAnY2hvcmUnLCBzZWN0aW9uOiAnQ2hvcmVzJyB9LFxuICAgICAgICAgIHsgdHlwZTogJ2RvY3MnLCBzZWN0aW9uOiAnRG9jcycgfSxcbiAgICAgICAgICB7IHR5cGU6ICdzdHlsZScsIGhpZGRlbjogdHJ1ZSB9LFxuICAgICAgICAgIHsgdHlwZTogJ3JlZmFjdG9yJywgaGlkZGVuOiB0cnVlIH0sXG4gICAgICAgICAgeyB0eXBlOiAncGVyZicsIHNlY3Rpb246ICdQZXJmb3JtYW5jZScgfSxcbiAgICAgICAgICB7IHR5cGU6ICd0ZXN0JywgaGlkZGVuOiB0cnVlIH0sXG4gICAgICAgIF0sXG4gICAgICB9LFxuICAgICAgZXNsaW50T3B0aW9uczoge1xuICAgICAgICBwcmV0dGllcjogZmFsc2UsXG4gICAgICAgIGRpcnM6IFsnc3JjJ10sXG4gICAgICAgIGlnbm9yZVBhdHRlcm5zOiBbJyoqLyotZnVuY3Rpb24udHMnLCAnZXhhbXBsZXMvJ10sXG4gICAgICB9LFxuICAgICAgLy8gZXhwZXJpbWVudGFsSW50ZWdSdW5uZXI6IHRydWUsXG4gICAgICAvLyBtYW51YWwgaW50ZWcgdGVzdCBzZXR1cFxuICAgICAgdHNjb25maWdEZXY6IHtcbiAgICAgICAgY29tcGlsZXJPcHRpb25zOiB7XG4gICAgICAgICAgdHlwZXM6IFsnbm9kZScsICdqZXN0J10sXG4gICAgICAgIH0sXG4gICAgICAgIGluY2x1ZGU6IFsnaW50ZWctdGVzdHMvKiovKi50cyddLFxuICAgICAgfSxcbiAgICAgIHB1bGxSZXF1ZXN0VGVtcGxhdGVDb250ZW50czogW2ZzLnJlYWRGaWxlU3luYyhgJHtiYXNlQXNzZXRzRGlyZWN0b3J5fS9jb21tb24vZ2l0aHViX3B1bGxfcmVxdWVzdC5tZGApLnRvU3RyaW5nKCldLFxuICAgICAgLy8gTk9URTogaXNzdWUgdGVtcGxhdGVzIGFyZSBub3Qgc3VwcG9ydGVkIHlldC4gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9wcm9qZW4vcHJvamVuL3B1bGwvMzY0OFxuICAgICAgLy8gaXNzdWVUZW1wbGF0ZXM6IHt9XG4gICAgICByZWFkbWU6IHtcbiAgICAgICAgY29udGVudHM6IFtcbiAgICAgICAgICBgXG4hW1NvdXJjZV0oaHR0cHM6Ly9pbWcuc2hpZWxkcy5pby9naXRodWIvc3RhcnMvTVYtQ29uc3VsdGluZy8ke29wdGlvbnMubmFtZX0/bG9nbz1naXRodWImbGFiZWw9R2l0SHViJTIwU3RhcnMpXG5bIVtCdWlsZCBTdGF0dXNdKGh0dHBzOi8vZ2l0aHViLmNvbS9NVi1Db25zdWx0aW5nLyR7b3B0aW9ucy5uYW1lfS9hY3Rpb25zL3dvcmtmbG93cy9idWlsZC55bWwvYmFkZ2Uuc3ZnKV0oaHR0cHM6Ly9naXRodWIuY29tL01WLUNvbnN1bHRpbmcvJHtvcHRpb25zLm5hbWV9L2FjdGlvbnMvd29ya2Zsb3dzL2J1aWxkLnltbClcblshW0VTTGludCBDb2RlIEZvcm1hdHRpbmddKGh0dHBzOi8vaW1nLnNoaWVsZHMuaW8vYmFkZ2UvY29kZV9zdHlsZS1lc2xpbnQtYnJpZ2h0Z3JlZW4uc3ZnKV0oaHR0cHM6Ly9lc2xpbnQub3JnKVxuWyFbTGF0ZXN0IHJlbGVhc2VdKGh0dHBzOi8vaW1nLnNoaWVsZHMuaW8vZ2l0aHViL3JlbGVhc2UvTVYtQ29uc3VsdGluZy8ke29wdGlvbnMubmFtZX0uc3ZnKV0oaHR0cHM6Ly9naXRodWIuY29tL01WLUNvbnN1bHRpbmcvJHtvcHRpb25zLm5hbWV9L3JlbGVhc2VzKVxuIVtHaXRIdWJdKGh0dHBzOi8vaW1nLnNoaWVsZHMuaW8vZ2l0aHViL2xpY2Vuc2UvTVYtQ29uc3VsdGluZy8ke29wdGlvbnMubmFtZX0pXG5bIVtucG1dKGh0dHBzOi8vaW1nLnNoaWVsZHMuaW8vbnBtL2R0L0BtYXZvZ2VsLyR7b3B0aW9ucy5uYW1lfT9sYWJlbD1ucG0mY29sb3I9b3JhbmdlKV0oaHR0cHM6Ly93d3cubnBtanMuY29tL3BhY2thZ2UvQG1hdm9nZWwvJHtvcHRpb25zLm5hbWV9KVxuWyFbdHlwZXNjcmlwdF0oaHR0cHM6Ly9pbWcuc2hpZWxkcy5pby9iYWRnZS9qc2lpLXR5cGVzY3JpcHQtYmx1ZXZpb2xldC5zdmcpXShodHRwczovL3d3dy5ucG1qcy5jb20vcGFja2FnZS9AbWF2b2dlbC8ke29wdGlvbnMubmFtZX0pXG4gICAgICAgICAgYCxcbiAgICAgICAgICBgIyAke29wdGlvbnMubmFtZX1gLFxuICAgICAgICAgICdNeSBhd2Vzb21lIGRlc2NyaXB0aW9uLi4uJyxcbiAgICAgICAgICBgXG4jIyBUYWJsZSBvZiBDb250ZW50c1xuXG4tIFtGZWF0dXJlc10oI2ZlYXR1cmVzKVxuLSBbVXNhZ2VdKCN1c2FnZSlcbi0gW1NvbHV0aW9uIERlc2lnbl0oI3NvbHV0aW9uLWRlc2lnbilcbi0gW0luc3BpcmF0aW9uXSgjaW5zcGlyYXRpb24pXG5cbiMjIEZlYXR1cmVzXG5cbi0g4pqhICoqUXVpY2sgU2V0dXAqKjogVEJEXG4tIPCfk48gKipCZXN0IFByYWN0aWNlIFNldHVwKio6IFRCRFxuLSDwn6S54oCN4pmC77iPICoqUHJlLWluc3RhbGxlZCBwYWNrYWdlcyoqOiBUQkRcbi0g8J+Pl++4jyAqKkV4dGVuc2liaWxpdHkqKjogVEJEXG5cbiMjIFVzYWdlXG5UaGUgZm9sbG93aW5nIHN0ZXBzIGdldCB5b3Ugc3RhcnRlZDpcblxuMS4gQ3JlYXRlIGEgbmV3IFxcYGF3c2Nkay1hcHBcXGAgdmlhXG5cXGBcXGBcXGBiYXNoXG5ucHggcHJvamVuIG5ldyBhd3NjZGstYXBwLXRzIC0tY2RrVmVyc2lvbj0yLjE3Ny4wIC0tcGFja2FnZS1tYW5hZ2VyPW5wbVxuXFxgXFxgXFxgXG4zLiBBZGQgXFxgQG1hdm9nZWwvJHtvcHRpb25zLm5hbWV9XFxgIGFzIGEgZGVwZW5kZW5jeSB0byB5b3VyIHByb2plY3QgaW4gdGhlIFxcYC5wcm9qZW5yYy50c1xcYCBmaWxlXG40LiBSdW4gXFxgbnB4IHByb2plblxcYCB0byBpbnN0YWxsIGl0XG41LiBBZGQgdGhlIGZvbGxvd2luZyB0byB0aGUgXFxgc3JjL21haW4udHNcXGAgZmlsZTpcblxcYFxcYFxcYHRzXG5pbXBvcnQgeyBBcHAsIFN0YWNrLCBTdGFja1Byb3BzIH0gZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0ICogYXMgZWMyIGZyb20gJ2F3cy1jZGstbGliL2F3cy1lYzInO1xuaW1wb3J0ICogYXMgaWFtIGZyb20gJ2F3cy1jZGstbGliL2F3cy1pYW0nO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQgeyBQbGFjZWhvbGRlciB9IGZyb20gJ0BtYXZvZ2VsLyR7b3B0aW9ucy5uYW1lfSc7XG5cbmV4cG9ydCBjbGFzcyBNeVN0YWNrIGV4dGVuZHMgU3RhY2sge1xuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogU3RhY2tQcm9wcyA9IHt9KSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCBwcm9wcyk7XG5cbiAgICBuZXcgUGxhY2Vob2xkZXIodGhpcywgJ3BsYWNlaG9sZGVyJywge1xuICAgICAgLy8gYW5kIG1vcmUuLi4g8J+SoVxuICAgIH0pO1xuICB9XG59XG5cbmNvbnN0IGVudiA9IHtcbiAgYWNjb3VudDogJzEyMzQ1Njc4OTkxMicsXG4gIHJlZ2lvbjogJ2V1LWNlbnRyYWwtMScsXG59O1xuXG5jb25zdCBhcHAgPSBuZXcgQXBwKCk7XG5uZXcgTXlTdGFjayhhcHAsICdwbGFjZWhvbGRlcicsIHsgZW52IH0pO1xuYXBwLnN5bnRoKCk7XG5cXGBcXGBcXGBcblxuYW5kIGRlcGxveSBpdFxuXFxgXFxgXFxgYmFzaFxubnB4IHByb2plbiBidWlsZFxubnB4IHByb2plbiBkZXBsb3lcblxcYFxcYFxcYFxuXG53aXRoIHRoZSBvdXRwdXRcblxcYFxcYFxcYGNvbnNvbGVcblRCRFxuXFxgXFxgXFxgXG5cblNlZSB0aGUgW2V4YW1wbGVzXSguL2V4YW1wbGVzKSBmb2xkZXIgZm9yIG1vcmUgaW5zcGlyYXRpb24uXG5cbiMjIFNvbHV0aW9uIERlc2lnblxuXG48ZGV0YWlscz5cbiAgPHN1bW1hcnk+Li4uIGlmIHlvdSdyZSBjdXJpb3VzIGFib3V0IGNsaWNrIGhlcmUgZm9yIHRoZSBkZXRhaWxzPC9zdW1tYXJ5PlxuXG4hW3BsYWNlaG9sZGVyXShkb2NzL2ltZy9wbGFjZWhvbGRlci5kcmF3aW8tbWluLnBuZylcblxuPC9kZXRhaWxzPlxuXG4jIyBJbnNwaXJhdGlvblxuXG5hZGQgdG9vbHMgb3IgbGlua3Mgd2hpY2ggaW5zcGlyZWQgeW91XG4gICAgICAgICAgYCxcbiAgICAgICAgICBmcy5yZWFkRmlsZVN5bmMoYCR7YmFzZUFzc2V0c0RpcmVjdG9yeX0vY29tbW9uL2dpdGh1Yl9yZWFkbWVfY3RhLm1kYCkudG9TdHJpbmcoKSxcbiAgICAgICAgXS5qb2luKCdcXG4nKSxcbiAgICAgIH0sXG4gICAgICAvLyBOT1RFOiBrZWVwIGFsbCB0aGUgcGFzc2VkIGluIG9wdGlvbnMgd2hpY2ggY2FuIG92ZXJyaWRlIHRoZSBleGlzdGluZyBvbmVzIVxuICAgICAgLi4ub3B0aW9ucyxcbiAgICB9KTtcblxuICAgIC8vIFR5cGVTY3JpcHQgNiBubyBsb25nZXIgYXV0by1kaXNjb3ZlcnMgQHR5cGVzLyogcGFja2FnZXNcbiAgICB0aGlzLnRzY29uZmlnRGV2LmZpbGUuYWRkT3ZlcnJpZGUoJ2NvbXBpbGVyT3B0aW9ucy50eXBlcycsIFsnbm9kZScsICdqZXN0J10pO1xuICAgIHRoaXMudHNjb25maWc/LmZpbGUuYWRkT3ZlcnJpZGUoJ2NvbXBpbGVyT3B0aW9ucy50eXBlcycsIFsnbm9kZSddKTtcblxuICAgIC8vIGdpdGlnbm9yZVxuICAgIGNvbnN0IGZpbGVzUGF0dGVyblRvR2l0aWdub3JlID0gW1xuICAgICAgJ3RtcCcsXG4gICAgICAnLmNvZGVncHQnLFxuICAgIF07XG4gICAgZm9yIChjb25zdCBmaWxlIG9mIGZpbGVzUGF0dGVyblRvR2l0aWdub3JlKSB7XG4gICAgICB0aGlzLmdpdGlnbm9yZS5leGNsdWRlKGZpbGUpO1xuICAgIH1cbiAgICB0aGlzLmFkZERlcHMoXG4gICAgICAnY2RrLW5hZ0BeMi4zNy41NScsXG4gICAgKTtcbiAgICAvLyBDYXAgaW50ZWctcnVubmVyIGF0IExBU1RfSU5URUdfUlVOTkVSX1ZFUlNJT04gc2luY2UgaXQgc3RvcHBlZCBwdWJsaXNoaW5nIGFmdGVyIHRoYXQgdmVyc2lvbi5cbiAgICAvLyBpbnRlZy1ydW5uZXIgdXNlcyBwbGFpbiB2ZXJzaW9ucyAobm8gLWFscGhhLjAgc3VmZml4KS5cbiAgICAvLyBpbnRlZy10ZXN0cy1hbHBoYSBhbmQgYXdzbGludCBvbmx5IHB1Ymxpc2ggYXQgbWlub3IgdmVyc2lvbnMgKGUuZy4gMi4xOTcuMC1hbHBoYS4wLCBub3QgMi4xOTcuNC1hbHBoYS4wKS5cbiAgICBjb25zdCByYXdDZGtWZXJzaW9uID0gdGhpcy5jZGtWZXJzaW9uLnJlcGxhY2UoL1tcXF5+XS8sICcnKTtcbiAgICBjb25zdCBpbnRlZ1J1bm5lclZlcnNpb24gPSByYXdDZGtWZXJzaW9uLmxvY2FsZUNvbXBhcmUoTEFTVF9JTlRFR19SVU5ORVJfVkVSU0lPTiwgdW5kZWZpbmVkLCB7IG51bWVyaWM6IHRydWUsIHNlbnNpdGl2aXR5OiAnYmFzZScgfSkgPiAwXG4gICAgICA/IExBU1RfSU5URUdfUlVOTkVSX1ZFUlNJT05cbiAgICAgIDogcmF3Q2RrVmVyc2lvbjtcbiAgICAvLyBBbHBoYSBwYWNrYWdlcyBvbmx5IHB1Ymxpc2ggYXQgLjAgcGF0Y2ggdmVyc2lvbnMg4oCUIG5vcm1hbGl6ZSB0byBtaW5vciB2ZXJzaW9uXG4gICAgY29uc3QgW21ham9yLCBtaW5vcl0gPSByYXdDZGtWZXJzaW9uLnNwbGl0KCcuJyk7XG4gICAgY29uc3QgYWxwaGFWZXJzaW9uID0gYCR7bWFqb3J9LiR7bWlub3J9LjBgO1xuICAgIHRoaXMuYWRkRGV2RGVwcyhcbiAgICAgIGBAYXdzLWNkay9pbnRlZy1ydW5uZXJAJHtpbnRlZ1J1bm5lclZlcnNpb259YCxcbiAgICAgIGBAYXdzLWNkay9pbnRlZy10ZXN0cy1hbHBoYUAke2FscGhhVmVyc2lvbn0tYWxwaGEuMGAsXG4gICAgICAnQGNvbW1pdGxpbnQvY2xpQF4yMC4xLjAnLFxuICAgICAgJ0Bjb21taXRsaW50L2NvbmZpZy1jb252ZW50aW9uYWxAXjIwLjAuMCcsXG4gICAgICBgYXdzbGludEAke2FscGhhVmVyc2lvbn0tYWxwaGEuMGAsXG4gICAgICAnaHVza3lAXjkuMS43JyxcbiAgICApO1xuXG4gICAgdGhpcy5wYWNrYWdlLnNldFNjcmlwdCgncHJlcGFyZScsICdodXNreScpO1xuICAgIG5ldyBUZXh0RmlsZSh0aGlzLCAnLmNvbW1pdGxpbnRyYy5qcycsIHtcbiAgICAgIGxpbmVzOiBbXG4gICAgICAgICdtb2R1bGUuZXhwb3J0cyA9IHsgZXh0ZW5kczogW1xcJ0Bjb21taXRsaW50L2NvbmZpZy1jb252ZW50aW9uYWxcXCddIH07JyxcbiAgICAgIF0sXG4gICAgICBtYXJrZXI6IHRydWUsXG4gICAgfSk7XG5cbiAgICB0aGlzLnBhY2thZ2Uuc2V0U2NyaXB0KCdhd3NsaW50JywgJ2F3c2xpbnQnKTtcbiAgICAvLyAuZ2l0aHViL3dvcmtmbG93cy9idWlsZC55bWxcbiAgICBjb25zdCBidWlsZFdvcmtmbG93ID0gdGhpcy5naXRodWI/LnRyeUZpbmRXb3JrZmxvdygnYnVpbGQnKTtcbiAgICBpZiAoIWJ1aWxkV29ya2Zsb3cpIHJldHVybjtcbiAgICBjb25zdCBidWlsZEpvYiA9IGJ1aWxkV29ya2Zsb3cuZ2V0Sm9iKCdidWlsZCcpO1xuICAgIGlmICghYnVpbGRKb2IgfHwgISgnc3RlcHMnIGluIGJ1aWxkSm9iKSkgcmV0dXJuO1xuICAgIC8vIFRPRE86IGZpZ3VyZSBvdXQgd2h5IHdyb25nIHR5cGVzXG4gICAgY29uc3QgZ2V0QnVpbGRTdGVwcyA9IGJ1aWxkSm9iLnN0ZXBzIGFzIHVua25vd24gYXMgKCkgPT4gSm9iU3RlcFtdO1xuICAgIGNvbnN0IGJ1aWxkSm9iU3RlcHMgPSBnZXRCdWlsZFN0ZXBzKCk7XG4gICAgYnVpbGRXb3JrZmxvdy51cGRhdGVKb2IoJ2J1aWxkJywge1xuICAgICAgLi4uYnVpbGRKb2IsXG4gICAgICBzdGVwczogW1xuICAgICAgICAuLi5idWlsZEpvYlN0ZXBzLnNsaWNlKDAsIDQpLFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogJ1J1biBhd3NsaW50JyxcbiAgICAgICAgICBydW46ICducG0gcnVuIGF3c2xpbnQnLFxuICAgICAgICB9LFxuICAgICAgICAuLi5idWlsZEpvYlN0ZXBzLnNsaWNlKDQpLFxuICAgICAgXSxcbiAgICB9KTtcblxuICAgIHRoaXMucGFja2FnZS5zZXRTY3JpcHQoXG4gICAgICAnaW50ZWctdGVzdCcsXG4gICAgICBgaW50ZWctcnVubmVyIC0tZGlyZWN0b3J5IC4vaW50ZWctdGVzdHMgJHtpbnRlZ1Rlc3RSZWdpb25zPy5tYXAocmVnaW9uID0+IGAtLXBhcmFsbGVsLXJlZ2lvbnMgJHtyZWdpb259YCkuam9pbignICcpfSAtLXVwZGF0ZS1vbi1mYWlsZWRgLFxuICAgICk7XG5cbiAgICBuZXcgVGV4dEZpbGUodGhpcywgJy5naXRodWIvSVNTVUVfVEVNUExBVEUvYnVnX3JlcG9ydC5tZCcsIHtcbiAgICAgIGxpbmVzOiBbZnMucmVhZEZpbGVTeW5jKGAke2Jhc2VBc3NldHNEaXJlY3Rvcnl9L2NvbW1vbi9naXRodWJfYnVnX3JlcG9ydC5tZGApLnRvU3RyaW5nKCldLFxuICAgIH0pO1xuXG4gICAgbmV3IFRleHRGaWxlKHRoaXMsICcuZ2l0aHViL0lTU1VFX1RFTVBMQVRFL2ZlYXR1cmVfcmVxdWVzdC5tZCcsIHtcbiAgICAgIGxpbmVzOiBbZnMucmVhZEZpbGVTeW5jKGAke2Jhc2VBc3NldHNEaXJlY3Rvcnl9L2NvbW1vbi9naXRodWJfZmVhdHVyZV9yZXF1ZXN0Lm1kYCkudG9TdHJpbmcoKV0sXG4gICAgfSk7XG5cbiAgICBuZXcgWWFtbEZpbGUodGhpcywgJy5naXRodWIvRlVORElORy55YW1sJywge1xuICAgICAgb2JqOiB7XG4gICAgICAgIGdpdGh1YjogJ21hdm9nZWwnLFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIG5ldyBUZXh0RmlsZSh0aGlzLCAnQ09OVFJJQlVUSU5HLm1kJywge1xuICAgICAgbGluZXM6IFtmcy5yZWFkRmlsZVN5bmMoYCR7YmFzZUFzc2V0c0RpcmVjdG9yeX0vY29tbW9uL2NvbnRyaWJ1dGluZy5tZGApLnRvU3RyaW5nKCldLFxuICAgIH0pO1xuXG4gICAgbmV3IFRleHRGaWxlKHRoaXMsICcucHJldHRpZXJyYycsIHtcbiAgICAgIGxpbmVzOiBbZnMucmVhZEZpbGVTeW5jKGAke2Jhc2VBc3NldHNEaXJlY3Rvcnl9L2NvbW1vbi9wcmV0dGllcnJjYCkudG9TdHJpbmcoKV0sXG4gICAgfSk7XG5cbiAgICAvLyB3cml0ZSBzYW1wbGUgY29kZSB0byBtYWluLnRzICYgdG8gbWFpbi50ZXN0LnRzXG4gICAgaWYgKG9wdGlvbnMuc2FtcGxlQ29kZSA/PyB0cnVlKSB7XG4gICAgICBuZXcgU2FtcGxlQ29kZSh0aGlzLCB7XG4gICAgICAgIGJhc2VBc3NldHNEaXJlY3RvcnksXG4gICAgICB9KTtcbiAgICB9XG4gIH1cbn1cblxuaW50ZXJmYWNlIFNhbXBsZUNvZGVPcHRpb25zIHtcbiAgcmVhZG9ubHkgYmFzZUFzc2V0c0RpcmVjdG9yeT86IHN0cmluZztcbn1cblxuY2xhc3MgU2FtcGxlQ29kZSBleHRlbmRzIENvbXBvbmVudCB7XG4gIHByaXZhdGUgcmVhZG9ubHkgbGlicmFyeTogQXdzQ2RrQ29uc3RydWN0TGlicmFyeTtcbiAgcHJpdmF0ZSByZWFkb25seSBvcHRpb25zOiBTYW1wbGVDb2RlT3B0aW9ucztcblxuICBjb25zdHJ1Y3RvcihcbiAgICBsaWJyYXJ5OiBBd3NDZGtDb25zdHJ1Y3RMaWJyYXJ5LFxuICAgIG9wdGlvbnM6IFNhbXBsZUNvZGVPcHRpb25zLFxuICApIHtcbiAgICBzdXBlcihsaWJyYXJ5KTtcbiAgICB0aGlzLmxpYnJhcnkgPSBsaWJyYXJ5O1xuICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG4gIH1cblxuICBwdWJsaWMgc3ludGhlc2l6ZSgpIHtcbiAgICBjb25zdCBvdXRkaXIgPSB0aGlzLnByb2plY3Qub3V0ZGlyO1xuICAgIGNvbnN0IHNyY2RpciA9IHBhdGguam9pbihvdXRkaXIsIHRoaXMubGlicmFyeS5zcmNkaXIpO1xuICAgIGlmIChcbiAgICAgIGZzLmV4aXN0c1N5bmMoc3JjZGlyKSAmJlxuICAgICAgZnMucmVhZGRpclN5bmMoc3JjZGlyKS5maWx0ZXIoKHgpID0+IHguZW5kc1dpdGgoJy50cycpKSAmJlxuICAgICAgIWZzLnJlYWRGaWxlU3luYyhgJHtzcmNkaXJ9L2luZGV4LnRzYCkudG9TdHJpbmcoKS5pbmNsdWRlcygnZXhwb3J0IGNsYXNzIEhlbGxvJykgLy8gTm90ZTogZnJvbSBwYXJlbnRcbiAgICApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBmcy5ta2RpclN5bmMoc3JjZGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICBmcy53cml0ZUZpbGVTeW5jKHBhdGguam9pbihzcmNkaXIsICdpbmRleC50cycpLCBmcy5yZWFkRmlsZVN5bmMoYCR7dGhpcy5vcHRpb25zLmJhc2VBc3NldHNEaXJlY3Rvcnl9L2Nkay1jb25zdHJ1Y3Qvc3JjX2luZGV4LnRzYCkudG9TdHJpbmcoKSk7XG4gICAgZnMud3JpdGVGaWxlU3luYyhwYXRoLmpvaW4oc3JjZGlyLCAncGxhY2Vob2xkZXIudHMnKSwgZnMucmVhZEZpbGVTeW5jKGAke3RoaXMub3B0aW9ucy5iYXNlQXNzZXRzRGlyZWN0b3J5fS9jZGstY29uc3RydWN0L3NyY19wbGFjZWhvbGRlci50c2ApLnRvU3RyaW5nKCkpO1xuICAgIC8vIGNyZCB3aXRoIGxhbWJkYSBnZW5lcmF0aW9uXG4gICAgZnMubWtkaXJTeW5jKGAke3NyY2Rpcn0vY3JkLWV4YW1wbGVgLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICBmcy53cml0ZUZpbGVTeW5jKHBhdGguam9pbihgJHtzcmNkaXJ9L2NyZC1leGFtcGxlYCwgJ2NyZC1leGFtcGxlLnRzJyksIGZzLnJlYWRGaWxlU3luYyhgJHt0aGlzLm9wdGlvbnMuYmFzZUFzc2V0c0RpcmVjdG9yeX0vY2RrLWNvbnN0cnVjdC9zcmNfY3JkLWV4YW1wbGUudHNgKS50b1N0cmluZygpKTtcbiAgICBmcy53cml0ZUZpbGVTeW5jKHBhdGguam9pbihgJHtzcmNkaXJ9L2NyZC1leGFtcGxlYCwgJ2NyZC1leGFtcGxlLmxhbWJkYS50cycpLCBmcy5yZWFkRmlsZVN5bmMoYCR7dGhpcy5vcHRpb25zLmJhc2VBc3NldHNEaXJlY3Rvcnl9L2Nkay1jb25zdHJ1Y3Qvc3JjX2NyZC1leGFtcGxlLmxhbWJkYS50c2ApLnRvU3RyaW5nKCkpO1xuXG5cbiAgICBjb25zdCB0ZXN0ZGlyID0gcGF0aC5qb2luKG91dGRpciwgdGhpcy5saWJyYXJ5LnRlc3RkaXIpO1xuICAgIGlmIChcbiAgICAgIGZzLmV4aXN0c1N5bmModGVzdGRpcikgJiZcbiAgICAgIGZzLnJlYWRkaXJTeW5jKHRlc3RkaXIpLmZpbHRlcigoeCkgPT4geC5lbmRzV2l0aCgnLnRzJykpICYmXG4gICAgICAhZnMuZXhpc3RzU3luYyhgJHt0ZXN0ZGlyfS9oZWxsby50ZXN0LnRzYCkgLy8gTm90ZTogZnJvbSBwYXJlbnRcbiAgICApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLy8gcmVtb3ZlICR7dGVzdGRpcn0vaGVsbG8udGVzdC50cyBmaWxlLiBPbiB0aGUgb3RoZXIgaGFuZCwgd2Ugb3ZlcnJpZGUgaW5kZXgudHNcbiAgICBmcy51bmxpbmtTeW5jKGAke3Rlc3RkaXJ9L2hlbGxvLnRlc3QudHNgKTtcbiAgICBmcy5ta2RpclN5bmModGVzdGRpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgZnMud3JpdGVGaWxlU3luYyhwYXRoLmpvaW4odGVzdGRpciwgJ2luZGV4LnRlc3QudHMnKSwgZnMucmVhZEZpbGVTeW5jKGAke3RoaXMub3B0aW9ucy5iYXNlQXNzZXRzRGlyZWN0b3J5fS9jZGstY29uc3RydWN0L3Rlc3RfaW5kZXgudGVzdC50c2ApLnRvU3RyaW5nKCkpO1xuICAgIC8vIGxhbWJkYSB0ZXN0cyB3aXRoIGplc3Qgc3R1YnNcbiAgICBmcy5ta2RpclN5bmMoYCR7dGVzdGRpcn0vY3JkLWV4YW1wbGVgLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICBmcy53cml0ZUZpbGVTeW5jKHBhdGguam9pbihgJHt0ZXN0ZGlyfS9jcmQtZXhhbXBsZWAsICdjcmQtZXhhbXBsZS50ZXN0LnRzJyksIGZzLnJlYWRGaWxlU3luYyhgJHt0aGlzLm9wdGlvbnMuYmFzZUFzc2V0c0RpcmVjdG9yeX0vY2RrLWNvbnN0cnVjdC90ZXN0X2NyZC1leGFtcGxlLnRlc3QudHNgKS50b1N0cmluZygpKTtcblxuXG4gICAgY29uc3QgaW50ZWdUZXN0ZGlyID0gcGF0aC5qb2luKG91dGRpciwgJ2ludGVnLXRlc3RzJyk7XG4gICAgaWYgKFxuICAgICAgZnMuZXhpc3RzU3luYyhpbnRlZ1Rlc3RkaXIpICYmXG4gICAgICBmcy5yZWFkZGlyU3luYyhpbnRlZ1Rlc3RkaXIpLmZpbHRlcigoeCkgPT4geC5lbmRzV2l0aCgnLnRzJykpXG4gICAgKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGZzLm1rZGlyU3luYyhpbnRlZ1Rlc3RkaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgIGZzLndyaXRlRmlsZVN5bmMocGF0aC5qb2luKGludGVnVGVzdGRpciwgJ2ludGVnLnBsYWNlaG9sZGVyLnRzJyksIGZzLnJlYWRGaWxlU3luYyhgJHt0aGlzLm9wdGlvbnMuYmFzZUFzc2V0c0RpcmVjdG9yeX0vY2RrLWNvbnN0cnVjdC9pbnRlZ19pbnRlZy5wbGFjZWhvbGRlci50c2ApLnRvU3RyaW5nKCkpO1xuXG4gICAgY29uc3QgaW50ZWdUZXN0RnVuY3Rpb25zZGlyID0gcGF0aC5qb2luKGludGVnVGVzdGRpciwgJ2Z1bmN0aW9ucycpO1xuICAgIGlmIChcbiAgICAgIGZzLmV4aXN0c1N5bmMoaW50ZWdUZXN0RnVuY3Rpb25zZGlyKSAmJlxuICAgICAgZnMucmVhZGRpclN5bmMoaW50ZWdUZXN0RnVuY3Rpb25zZGlyKS5maWx0ZXIoKHgpID0+IHguZW5kc1dpdGgoJy50cycpKVxuICAgICkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBmcy5ta2RpclN5bmMoaW50ZWdUZXN0RnVuY3Rpb25zZGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICBmcy53cml0ZUZpbGVTeW5jKHBhdGguam9pbihpbnRlZ1Rlc3RGdW5jdGlvbnNkaXIsICd0ZXN0LWhhbmRsZXIudHMnKSwgZnMucmVhZEZpbGVTeW5jKGAke3RoaXMub3B0aW9ucy5iYXNlQXNzZXRzRGlyZWN0b3J5fS9jZGstY29uc3RydWN0L2ludGVnX3Rlc3QtaGFuZGxlci50c2ApLnRvU3RyaW5nKCkpO1xuXG4gICAgY29uc3QgZG9jc2RpciA9IHBhdGguam9pbihvdXRkaXIsICdkb2NzJyk7XG4gICAgaWYgKFxuICAgICAgZnMuZXhpc3RzU3luYyhkb2NzZGlyKSAmJlxuICAgICAgZnMucmVhZGRpclN5bmMoZG9jc2RpcikuZmlsdGVyKCh4KSA9PiB4LmVuZHNXaXRoKCcuZHJhd2lvJykpXG4gICAgKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGZzLm1rZGlyU3luYyhkb2NzZGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICBmcy53cml0ZUZpbGVTeW5jKHBhdGguam9pbihkb2NzZGlyLCAncGxhY2Vob2xkZXIuZHJhd2lvJyksIGZzLnJlYWRGaWxlU3luYyhgJHt0aGlzLm9wdGlvbnMuYmFzZUFzc2V0c0RpcmVjdG9yeX0vY29tbW9uL2RvY3NfcGxhY2Vob2xkZXIuZHJhd2lvYCkudG9TdHJpbmcoKSk7XG5cbiAgICBjb25zdCBleGFtcGxlc2RpciA9IHBhdGguam9pbihvdXRkaXIsICdleGFtcGxlcycsICdzaW1wbGUnKTtcbiAgICBpZiAoXG4gICAgICBmcy5leGlzdHNTeW5jKGV4YW1wbGVzZGlyKSAmJlxuICAgICAgZnMucmVhZGRpclN5bmMoZXhhbXBsZXNkaXIpLmZpbHRlcigoeCkgPT4geC5lbmRzV2l0aCgnLmRyYXdpbycpKVxuICAgICkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBmcy5ta2RpclN5bmMoZXhhbXBsZXNkaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgIGZzLndyaXRlRmlsZVN5bmMocGF0aC5qb2luKGV4YW1wbGVzZGlyLCAnbWFpbi50cycpLCBmcy5yZWFkRmlsZVN5bmMoYCR7dGhpcy5vcHRpb25zLmJhc2VBc3NldHNEaXJlY3Rvcnl9L2Nkay1jb25zdHJ1Y3QvZXhhbXBsZXNfc2ltcGxlX21haW4udHNgKS50b1N0cmluZygpKTtcbiAgfVxufSJdfQ==
|
|
@@ -186,6 +186,11 @@ type MvcCdkConstructLibraryOptions struct {
|
|
|
186
186
|
//
|
|
187
187
|
// Experimental.
|
|
188
188
|
Vscode *bool `field:"optional" json:"vscode" yaml:"vscode"`
|
|
189
|
+
// Automatically add the resolved `packageManager` to `devEngines.packageManager` in `package.json`, setting `onFail` to `ignore`.
|
|
190
|
+
// Default: true.
|
|
191
|
+
//
|
|
192
|
+
// Experimental.
|
|
193
|
+
AddPackageManagerToDevEngines *bool `field:"optional" json:"addPackageManagerToDevEngines" yaml:"addPackageManagerToDevEngines"`
|
|
189
194
|
// Allow the project to include `peerDependencies` and `bundledDependencies`.
|
|
190
195
|
//
|
|
191
196
|
// This is normally only allowed for libraries. For apps, there's no meaning
|
|
@@ -250,6 +255,16 @@ type MvcCdkConstructLibraryOptions struct {
|
|
|
250
255
|
//
|
|
251
256
|
// Experimental.
|
|
252
257
|
CodeArtifactOptions *javascript.CodeArtifactOptions `field:"optional" json:"codeArtifactOptions" yaml:"codeArtifactOptions"`
|
|
258
|
+
// Automatically delete lockfiles from package managers that are not the active one.
|
|
259
|
+
//
|
|
260
|
+
// Only triggered when the lockfile for the configured package
|
|
261
|
+
// manager already exists.
|
|
262
|
+
//
|
|
263
|
+
// This is useful when migrating between package managers to avoid conflicts.
|
|
264
|
+
// Default: true.
|
|
265
|
+
//
|
|
266
|
+
// Experimental.
|
|
267
|
+
DeleteOrphanedLockFiles *bool `field:"optional" json:"deleteOrphanedLockFiles" yaml:"deleteOrphanedLockFiles"`
|
|
253
268
|
// Runtime dependencies of this module.
|
|
254
269
|
//
|
|
255
270
|
// The recommendation is to only specify the module name here (e.g.
|
|
@@ -292,6 +307,15 @@ type MvcCdkConstructLibraryOptions struct {
|
|
|
292
307
|
//
|
|
293
308
|
// Experimental.
|
|
294
309
|
DevDeps *[]*string `field:"optional" json:"devDeps" yaml:"devDeps"`
|
|
310
|
+
// Configure the `devEngines` field in `package.json`.
|
|
311
|
+
//
|
|
312
|
+
// The `devEngines.packageManager` field is automatically populated based on
|
|
313
|
+
// the resolved `packageManager` value. Any fields provided here are merged
|
|
314
|
+
// with the auto-populated `packageManager` entry.
|
|
315
|
+
// See: https://docs.npmjs.com/cli/v10/configuring-npm/package-json#devengines
|
|
316
|
+
//
|
|
317
|
+
// Experimental.
|
|
318
|
+
DevEngines *javascript.DevEngines `field:"optional" json:"devEngines" yaml:"devEngines"`
|
|
295
319
|
// Module entrypoint (`main` in `package.json`).
|
|
296
320
|
//
|
|
297
321
|
// Set to an empty string to not include `main` in your package.json
|
|
@@ -387,7 +411,7 @@ type MvcCdkConstructLibraryOptions struct {
|
|
|
387
411
|
// Experimental.
|
|
388
412
|
NpmTrustedPublishing *bool `field:"optional" json:"npmTrustedPublishing" yaml:"npmTrustedPublishing"`
|
|
389
413
|
// The Node Package Manager used to execute scripts.
|
|
390
|
-
// Default:
|
|
414
|
+
// Default: - Detected from the calling process or `YARN_CLASSIC` if detection fails.
|
|
391
415
|
//
|
|
392
416
|
// Experimental.
|
|
393
417
|
PackageManager javascript.NodePackageManager `field:"optional" json:"packageManager" yaml:"packageManager"`
|
|
@@ -1149,6 +1173,11 @@ type MvcCdkConstructLibraryOptions struct {
|
|
|
1149
1173
|
//
|
|
1150
1174
|
// Experimental.
|
|
1151
1175
|
LambdaOptions *awscdk.LambdaFunctionCommonOptions `field:"optional" json:"lambdaOptions" yaml:"lambdaOptions"`
|
|
1176
|
+
// Automatically adds an `awscdk.SingletonFunction` for each `.singleton-lambda.ts` handler in your source tree. If this is disabled, you can manually add an `awscdk.AutoDiscover` component to your project.
|
|
1177
|
+
// Default: true.
|
|
1178
|
+
//
|
|
1179
|
+
// Experimental.
|
|
1180
|
+
SingletonLambdaAutoDiscover *bool `field:"optional" json:"singletonLambdaAutoDiscover" yaml:"singletonLambdaAutoDiscover"`
|
|
1152
1181
|
// Base directory for the assets.
|
|
1153
1182
|
// Default: ${cwd()}/node_modules/mvc-projen/assets.
|
|
1154
1183
|
//
|
package/mavogelmvcprojen/go.mod
CHANGED
|
@@ -13,7 +13,7 @@ import (
|
|
|
13
13
|
projen "github.com/projen/projen-go/projen/jsii"
|
|
14
14
|
)
|
|
15
15
|
|
|
16
|
-
//go:embed mavogel-mvc-projen-0.0.
|
|
16
|
+
//go:embed mavogel-mvc-projen-0.0.21.tgz
|
|
17
17
|
var tarball []byte
|
|
18
18
|
|
|
19
19
|
// Initialize loads the necessary packages in the @jsii/kernel to support the enclosing module.
|
|
@@ -24,5 +24,5 @@ func Initialize() {
|
|
|
24
24
|
projen.Initialize()
|
|
25
25
|
|
|
26
26
|
// Load this library into the kernel
|
|
27
|
-
_jsii_.Load("@mavogel/mvc-projen", "0.0.
|
|
27
|
+
_jsii_.Load("@mavogel/mvc-projen", "0.0.21", tarball)
|
|
28
28
|
}
|
package/mavogelmvcprojen/version
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
0.0.
|
|
1
|
+
0.0.21
|
package/package.json
CHANGED
|
@@ -56,18 +56,18 @@
|
|
|
56
56
|
"jsii-docgen": "^10.5.0",
|
|
57
57
|
"jsii-pacmak": "^1.127.0",
|
|
58
58
|
"jsii-rosetta": "~5.9.0",
|
|
59
|
-
"projen": "0.99.
|
|
59
|
+
"projen": "0.99.34",
|
|
60
60
|
"ts-jest": "^29.4.9",
|
|
61
61
|
"ts-node": "^10",
|
|
62
62
|
"typescript": "^6.0.2"
|
|
63
63
|
},
|
|
64
64
|
"peerDependencies": {
|
|
65
65
|
"constructs": "^10.5.1",
|
|
66
|
-
"projen": "^0.99.
|
|
66
|
+
"projen": "^0.99.34"
|
|
67
67
|
},
|
|
68
68
|
"dependencies": {
|
|
69
69
|
"constructs": "^10.5.1",
|
|
70
|
-
"projen": "^0.99.
|
|
70
|
+
"projen": "^0.99.34"
|
|
71
71
|
},
|
|
72
72
|
"keywords": [
|
|
73
73
|
"aws",
|
|
@@ -75,12 +75,18 @@
|
|
|
75
75
|
"construct",
|
|
76
76
|
"projen"
|
|
77
77
|
],
|
|
78
|
+
"devEngines": {
|
|
79
|
+
"packageManager": {
|
|
80
|
+
"name": "npm",
|
|
81
|
+
"onFail": "ignore"
|
|
82
|
+
}
|
|
83
|
+
},
|
|
78
84
|
"main": "lib/index.js",
|
|
79
85
|
"license": "Apache-2.0",
|
|
80
86
|
"publishConfig": {
|
|
81
87
|
"access": "public"
|
|
82
88
|
},
|
|
83
|
-
"version": "0.0.
|
|
89
|
+
"version": "0.0.22",
|
|
84
90
|
"jest": {
|
|
85
91
|
"coverageProvider": "v8",
|
|
86
92
|
"testMatch": [
|