cdk8s-cli 2.202.13 → 2.203.1
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/lib/cli/cmds/import.js +3 -1
- package/lib/import/codegen.js +6 -5
- package/lib/import/helm.js +46 -2
- package/package.json +3 -3
package/lib/cli/cmds/import.js
CHANGED
|
@@ -21,6 +21,8 @@ class Command {
|
|
|
21
21
|
.example('cdk8s import mattermost:=mattermost_crd.yaml', 'Imports constructs for the mattermost cluster custom resource definition using a custom module name')
|
|
22
22
|
.example('cdk8s import github:crossplane/crossplane@0.14.0', 'Imports constructs for a GitHub repo using doc.crds.dev')
|
|
23
23
|
.example('cdk8s import helm:https://charts.bitnami.com/bitnami/mysql@9.10.10', 'Imports the specified version of helm chart')
|
|
24
|
+
.example('cdk8s import helm:./my-local-chart', 'Imports a local helm chart from a relative path')
|
|
25
|
+
.example('cdk8s import helm:/absolute/path/to/chart', 'Imports a local helm chart from an absolute path')
|
|
24
26
|
.option('save', { type: 'boolean', required: false, default: true, desc: "Dont save the import URL in the 'imports' section of the cdk8s.yaml configuration file.", alias: 's' })
|
|
25
27
|
.option('output', { default: config?.importDirectory ?? DEFAULT_OUTDIR, type: 'string', desc: 'Output directory', alias: 'o' })
|
|
26
28
|
.option('exclude', { type: 'array', desc: 'Do not import types that match these regular expressions. They will be represented as the "any" type (only for "k8s")' })
|
|
@@ -40,4 +42,4 @@ class Command {
|
|
|
40
42
|
}
|
|
41
43
|
}
|
|
42
44
|
module.exports = new Command();
|
|
43
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
45
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1wb3J0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NsaS9jbWRzL2ltcG9ydC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUNBLHlDQUEwRDtBQUMxRCxvREFBdUQ7QUFDdkQsMENBQXVEO0FBQ3ZELHFDQUEwQztBQUUxQyxNQUFNLE1BQU0sR0FBRyxJQUFBLHVCQUFjLEdBQUUsQ0FBQztBQUVoQyxNQUFNLGNBQWMsR0FBRyxTQUFTLENBQUM7QUFDakMsTUFBTSxTQUFTLEdBQUcsQ0FBQyxRQUFRLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFFbkUsTUFBTSxPQUFPO0lBQWI7UUFDa0IsWUFBTyxHQUFHLGVBQWUsQ0FBQztRQUMxQixhQUFRLEdBQUcsMkRBQTJELENBQUM7UUFDdkUsWUFBTyxHQUFHLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxVQUFVLENBQUMsQ0FBQztRQUV4QyxZQUFPLEdBQUcsQ0FBQyxJQUFnQixFQUFFLEVBQUUsQ0FBQyxJQUFJO2FBQ2pELFVBQVUsQ0FBQyxNQUFNLEVBQUUsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsZ0xBQWdMLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDO2FBQ3JQLE9BQU8sQ0FBQyxrQkFBa0IsRUFBRSxpRUFBaUUseUJBQW1CLEVBQUUsQ0FBQzthQUNuSCxPQUFPLENBQUMsb0NBQW9DLEVBQUUsMERBQTBELENBQUM7YUFDekcsT0FBTyxDQUFDLHlCQUF5QixFQUFFLGtEQUFrRCxDQUFDO2FBQ3RGLE9BQU8sQ0FBQywwQ0FBMEMsRUFBRSwyRUFBMkUsQ0FBQzthQUNoSSxPQUFPLENBQUMsOENBQThDLEVBQUUscUdBQXFHLENBQUM7YUFDOUosT0FBTyxDQUFDLGtEQUFrRCxFQUFFLHlEQUF5RCxDQUFDO2FBQ3RILE9BQU8sQ0FBQyxvRUFBb0UsRUFBRSw2Q0FBNkMsQ0FBQzthQUM1SCxPQUFPLENBQUMsb0NBQW9DLEVBQUUsaURBQWlELENBQUM7YUFDaEcsT0FBTyxDQUFDLDJDQUEyQyxFQUFFLGtEQUFrRCxDQUFDO2FBRXhHLE1BQU0sQ0FBQyxNQUFNLEVBQUUsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUseUZBQXlGLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxDQUFDO2FBQ2hMLE1BQU0sQ0FBQyxRQUFRLEVBQUUsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLGVBQWUsSUFBSSxjQUFjLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsa0JBQWtCLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxDQUFDO2FBQzlILE1BQU0sQ0FBQyxTQUFTLEVBQUUsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSx1SEFBdUgsRUFBRSxDQUFDO2FBQ25LLE1BQU0sQ0FBQyxjQUFjLEVBQUUsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSwrS0FBK0ssRUFBRSxDQUFDO2FBQ2pPLE1BQU0sQ0FBQyxVQUFVLEVBQUUsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLDZCQUE2QixFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUM7SUFjMUosQ0FBQztJQVpRLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBUztRQUM1QixNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsV0FBVyxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDO1FBQzNFLE1BQU0sT0FBTyxHQUFhLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM3RSxNQUFNLEtBQUssR0FBaUIsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsbUJBQVksQ0FBQyxDQUFDO1FBRW5GLE1BQU0sSUFBQSx5QkFBYyxFQUFDLEtBQUssRUFBRSxJQUFJLEVBQUU7WUFDaEMsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNO1lBQ25CLGNBQWMsRUFBRSxJQUFJLENBQUMsUUFBUTtZQUM3QixlQUFlO1lBQ2YsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO1NBQ2hCLENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRjtBQUVELE1BQU0sQ0FBQyxPQUFPLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIHlhcmdzIGZyb20gJ3lhcmdzJztcbmltcG9ydCB7IHJlYWRDb25maWdTeW5jLCBJbXBvcnRTcGVjIH0gZnJvbSAnLi4vLi4vY29uZmlnJztcbmltcG9ydCB7IGltcG9ydERpc3BhdGNoIH0gZnJvbSAnLi4vLi4vaW1wb3J0L2Rpc3BhdGNoJztcbmltcG9ydCB7IERFRkFVTFRfQVBJX1ZFUlNJT04gfSBmcm9tICcuLi8uLi9pbXBvcnQvazhzJztcbmltcG9ydCB7IHBhcnNlSW1wb3J0cyB9IGZyb20gJy4uLy4uL3V0aWwnO1xuXG5jb25zdCBjb25maWcgPSByZWFkQ29uZmlnU3luYygpO1xuXG5jb25zdCBERUZBVUxUX09VVERJUiA9ICdpbXBvcnRzJztcbmNvbnN0IExBTkdVQUdFUyA9IFsnY3NoYXJwJywgJ3R5cGVzY3JpcHQnLCAncHl0aG9uJywgJ2phdmEnLCAnZ28nXTtcblxuY2xhc3MgQ29tbWFuZCBpbXBsZW1lbnRzIHlhcmdzLkNvbW1hbmRNb2R1bGUge1xuICBwdWJsaWMgcmVhZG9ubHkgY29tbWFuZCA9ICdpbXBvcnQgW1NQRUNdJztcbiAgcHVibGljIHJlYWRvbmx5IGRlc2NyaWJlID0gJ0ltcG9ydHMgQVBJIG9iamVjdHMgdG8geW91ciBhcHAgYnkgZ2VuZXJhdGluZyBjb25zdHJ1Y3RzLic7XG4gIHB1YmxpYyByZWFkb25seSBhbGlhc2VzID0gWydnZW4nLCAnaW1wb3J0JywgJ2dlbmVyYXRlJ107XG5cbiAgcHVibGljIHJlYWRvbmx5IGJ1aWxkZXIgPSAoYXJnczogeWFyZ3MuQXJndikgPT4gYXJnc1xuICAgIC5wb3NpdGlvbmFsKCdTUEVDJywgeyBkZWZhdWx0OiBjb25maWc/LmltcG9ydHMsIGRlc2M6ICdpbXBvcnQgc3BlYyB3aXRoIHRoZSBzeW50YXggW05BTUU6PV1TUEVDIHdoZXJlIE5BTUUgaXMgYW4gb3B0aW9uYWwgbW9kdWxlIG5hbWUgYW5kIHN1cHBvcnRlZCBTUEVDIGFyZTogazhzLCBjcmQueWFtbCwgaHR0cHM6Ly9kb21haW4vY3JkLnlhbWwsIGdpdGh1YjphY2NvdW50L3JlcG9bQFZFUlNJT05dKS4nLCBhcnJheTogdHJ1ZSB9KVxuICAgIC5leGFtcGxlKCdjZGs4cyBpbXBvcnQgazhzJywgYEltcG9ydHMgS3ViZXJuZXRlcyBBUEkgb2JqZWN0cyB0byBpbXBvcnRzL2s4cy50cy4gRGVmYXVsdHMgdG8gJHtERUZBVUxUX0FQSV9WRVJTSU9OfWApXG4gICAgLmV4YW1wbGUoJ2NkazhzIGltcG9ydCBrOHMgLS1uby1jbGFzcy1wcmVmaXgnLCAnSW1wb3J0cyBLdWJlcm5ldGVzIEFQSSBvYmplY3RzIHdpdGhvdXQgdGhlIFwiS3ViZVwiIHByZWZpeCcpXG4gICAgLmV4YW1wbGUoJ2NkazhzIGltcG9ydCBrOHNAMS4xMy4wJywgJ0ltcG9ydHMgYSBzcGVjaWZpYyB2ZXJzaW9uIG9mIHRoZSBLdWJlcm5ldGVzIEFQSScpXG4gICAgLmV4YW1wbGUoJ2NkazhzIGltcG9ydCBqZW5raW5zLmlvX2plbmtpbnNfY3JkLnlhbWwnLCAnSW1wb3J0cyBjb25zdHJ1Y3RzIGZvciB0aGUgSmVua2lucyBjdXN0b20gcmVzb3VyY2UgZGVmaW5pdGlvbiBmcm9tIGEgZmlsZScpXG4gICAgLmV4YW1wbGUoJ2NkazhzIGltcG9ydCBtYXR0ZXJtb3N0Oj1tYXR0ZXJtb3N0X2NyZC55YW1sJywgJ0ltcG9ydHMgY29uc3RydWN0cyBmb3IgdGhlIG1hdHRlcm1vc3QgY2x1c3RlciBjdXN0b20gcmVzb3VyY2UgZGVmaW5pdGlvbiB1c2luZyBhIGN1c3RvbSBtb2R1bGUgbmFtZScpXG4gICAgLmV4YW1wbGUoJ2NkazhzIGltcG9ydCBnaXRodWI6Y3Jvc3NwbGFuZS9jcm9zc3BsYW5lQDAuMTQuMCcsICdJbXBvcnRzIGNvbnN0cnVjdHMgZm9yIGEgR2l0SHViIHJlcG8gdXNpbmcgZG9jLmNyZHMuZGV2JylcbiAgICAuZXhhbXBsZSgnY2RrOHMgaW1wb3J0IGhlbG06aHR0cHM6Ly9jaGFydHMuYml0bmFtaS5jb20vYml0bmFtaS9teXNxbEA5LjEwLjEwJywgJ0ltcG9ydHMgdGhlIHNwZWNpZmllZCB2ZXJzaW9uIG9mIGhlbG0gY2hhcnQnKVxuICAgIC5leGFtcGxlKCdjZGs4cyBpbXBvcnQgaGVsbTouL215LWxvY2FsLWNoYXJ0JywgJ0ltcG9ydHMgYSBsb2NhbCBoZWxtIGNoYXJ0IGZyb20gYSByZWxhdGl2ZSBwYXRoJylcbiAgICAuZXhhbXBsZSgnY2RrOHMgaW1wb3J0IGhlbG06L2Fic29sdXRlL3BhdGgvdG8vY2hhcnQnLCAnSW1wb3J0cyBhIGxvY2FsIGhlbG0gY2hhcnQgZnJvbSBhbiBhYnNvbHV0ZSBwYXRoJylcblxuICAgIC5vcHRpb24oJ3NhdmUnLCB7IHR5cGU6ICdib29sZWFuJywgcmVxdWlyZWQ6IGZhbHNlLCBkZWZhdWx0OiB0cnVlLCBkZXNjOiBcIkRvbnQgc2F2ZSB0aGUgaW1wb3J0IFVSTCBpbiB0aGUgJ2ltcG9ydHMnIHNlY3Rpb24gb2YgdGhlIGNkazhzLnlhbWwgY29uZmlndXJhdGlvbiBmaWxlLlwiLCBhbGlhczogJ3MnIH0pXG4gICAgLm9wdGlvbignb3V0cHV0JywgeyBkZWZhdWx0OiBjb25maWc/LmltcG9ydERpcmVjdG9yeSA/PyBERUZBVUxUX09VVERJUiwgdHlwZTogJ3N0cmluZycsIGRlc2M6ICdPdXRwdXQgZGlyZWN0b3J5JywgYWxpYXM6ICdvJyB9KVxuICAgIC5vcHRpb24oJ2V4Y2x1ZGUnLCB7IHR5cGU6ICdhcnJheScsIGRlc2M6ICdEbyBub3QgaW1wb3J0IHR5cGVzIHRoYXQgbWF0Y2ggdGhlc2UgcmVndWxhciBleHByZXNzaW9ucy4gVGhleSB3aWxsIGJlIHJlcHJlc2VudGVkIGFzIHRoZSBcImFueVwiIHR5cGUgKG9ubHkgZm9yIFwiazhzXCIpJyB9KVxuICAgIC5vcHRpb24oJ2NsYXNzLXByZWZpeCcsIHsgdHlwZTogJ3N0cmluZycsIGRlc2M6ICdBIHByZWZpeCB0byBhZGQgdG8gYWxsIGdlbmVyYXRlZCBjbGFzcyBuYW1lcy4gQnkgZGVmYXVsdCwgdGhpcyBpcyBcIkt1YmVcIiBmb3IgXCJrOHNcIiBpbXBvcnRzIGFuZCBkaXNhYmxlZCBmb3IgQ1JEIGltcG9ydHMuIFVzZSAtLW5vLWNsYXNzLXByZWZpeCB0byBkaXNhYmxlLiBNdXN0IGJlIFBhc2NhbENhc2UnIH0pXG4gICAgLm9wdGlvbignbGFuZ3VhZ2UnLCB7IGRlZmF1bHQ6IGNvbmZpZz8ubGFuZ3VhZ2UsIGRlbWFuZDogdHJ1ZSwgdHlwZTogJ3N0cmluZycsIGRlc2M6ICdPdXRwdXQgcHJvZ3JhbW1pbmcgbGFuZ3VhZ2UnLCBhbGlhczogJ2wnLCBjaG9pY2VzOiBMQU5HVUFHRVMgfSk7XG5cbiAgcHVibGljIGFzeW5jIGhhbmRsZXIoYXJndjogYW55KSB7XG4gICAgY29uc3QgY2xhc3NOYW1lUHJlZml4ID0gYXJndi5jbGFzc1ByZWZpeCA9PT0gZmFsc2UgPyAnJyA6IGFyZ3YuY2xhc3NQcmVmaXg7XG4gICAgY29uc3QgaW1wb3J0czogc3RyaW5nW10gPSBBcnJheS5pc0FycmF5KGFyZ3Yuc3BlYykgPyBhcmd2LnNwZWMgOiBbYXJndi5zcGVjXTtcbiAgICBjb25zdCBzcGVjczogSW1wb3J0U3BlY1tdID0gaW1wb3J0cy5maWx0ZXIoc3BlYyA9PiBzcGVjICE9IG51bGwpLm1hcChwYXJzZUltcG9ydHMpO1xuXG4gICAgYXdhaXQgaW1wb3J0RGlzcGF0Y2goc3BlY3MsIGFyZ3YsIHtcbiAgICAgIG91dGRpcjogYXJndi5vdXRwdXQsXG4gICAgICB0YXJnZXRMYW5ndWFnZTogYXJndi5sYW5ndWFnZSxcbiAgICAgIGNsYXNzTmFtZVByZWZpeCxcbiAgICAgIHNhdmU6IGFyZ3Yuc2F2ZSxcbiAgICB9KTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG5ldyBDb21tYW5kKCk7XG4iXX0=
|
package/lib/import/codegen.js
CHANGED
|
@@ -269,13 +269,14 @@ function generateHelmConstruct(typegen, def) {
|
|
|
269
269
|
code.closeBlock();
|
|
270
270
|
code.line();
|
|
271
271
|
code.open('const finalProps: HelmProps = {');
|
|
272
|
-
if (repoUrl.startsWith('
|
|
273
|
-
code.line(`chart: \'${repoUrl}\',`);
|
|
274
|
-
}
|
|
275
|
-
else {
|
|
272
|
+
if (repoUrl.startsWith('http')) {
|
|
276
273
|
code.line(`chart: \'${def.chartName}\',`);
|
|
277
274
|
code.line(`repo: \'${repoUrl}\',`);
|
|
278
275
|
}
|
|
276
|
+
else {
|
|
277
|
+
// OCI or local path
|
|
278
|
+
code.line(`chart: \'${repoUrl}\',`);
|
|
279
|
+
}
|
|
279
280
|
code.line(`version: \'${chartVersion}\',`);
|
|
280
281
|
code.line('...(Object.keys(updatedProps).length !== 0 ? updatedProps : props),');
|
|
281
282
|
code.close('};');
|
|
@@ -313,4 +314,4 @@ exports.generateHelmConstruct = generateHelmConstruct;
|
|
|
313
314
|
function hasRequiredProps(schema) {
|
|
314
315
|
return schema?.required && Array.isArray(schema.required) && schema.required.length > 0;
|
|
315
316
|
}
|
|
316
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29kZWdlbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9pbXBvcnQvY29kZWdlbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSx5Q0FBb0Q7QUFJcEQseUNBQTBDO0FBRTFDLE1BQU0sc0JBQXNCLEdBQUcsVUFBVSxDQUFDO0FBQzFDLE1BQU0sVUFBVSxHQUFHLEtBQUssQ0FBQztBQStCekI7Ozs7O0dBS0c7QUFDSCxTQUFnQixVQUFVLENBQUMsSUFBZSxFQUFFLE1BQWU7SUFDekQsSUFBSSxDQUFDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO0lBQ25DLElBQUksTUFBTSxFQUFFO1FBQ1YsSUFBSSxDQUFDLElBQUksQ0FBQywyRUFBMkUsQ0FBQyxDQUFDO0tBQ3hGO1NBQU07UUFDTCxJQUFJLENBQUMsSUFBSSxDQUFDLHdEQUF3RCxDQUFDLENBQUM7S0FDckU7SUFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLDJDQUEyQyxDQUFDLENBQUM7SUFDdkQsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ2QsQ0FBQztBQVRELGdDQVNDO0FBRUQsU0FBZ0IsV0FBVyxDQUFDLE1BQWUsRUFBRSxJQUFZLEVBQUUsT0FBZTtJQUN4RSxzRUFBc0U7SUFDdEUsdUZBQXVGO0lBQ3ZGLDJFQUEyRTtJQUMzRSxNQUFNLE9BQU8sR0FBRyxDQUFDLE1BQU0sSUFBSSxPQUFPLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBQSx3QkFBWSxFQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzFFLE9BQU8sR0FBRyxJQUFJLEdBQUcsT0FBTyxFQUFFLENBQUM7QUFDN0IsQ0FBQztBQU5ELGtDQU1DO0FBRUQsU0FBZ0Isb0JBQW9CLENBQUMsR0FBd0I7SUFDM0QsTUFBTSxNQUFNLEdBQUcsR0FBRyxDQUFDLE1BQU0sSUFBSSxFQUFFLENBQUM7SUFDaEMsTUFBTSxNQUFNLEdBQUcsR0FBRyxDQUFDLE1B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LENBQUMsQ0FBQztZQUNqQixJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDcEIsQ0FBQztJQUNILENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQXpLRCxzREF5S0M7QUFFRCxTQUFTLGdCQUFnQixDQUFDLE1BQW1CO0lBQzNDLE9BQU8sTUFBTSxFQUFFLFFBQVEsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7QUFDMUYsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvZGVNYWtlciwgdG9QYXNjYWxDYXNlIH0gZnJvbSAnY29kZW1ha2VyJztcbi8vIHdlIGp1c3QgbmVlZCB0aGUgdHlwZXMgZnJvbSBqc29uLXNjaGVtYVxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby1leHRyYW5lb3VzLWRlcGVuZGVuY2llc1xuaW1wb3J0IHsgSlNPTlNjaGVtYTQgfSBmcm9tICdqc29uLXNjaGVtYSc7XG5pbXBvcnQgeyBUeXBlR2VuZXJhdG9yIH0gZnJvbSAnanNvbjJqc2lpJztcblxuY29uc3QgTUFOSUZFU1RfU1RBVElDX01FVEhPRCA9ICdtYW5pZmVzdCc7XG5jb25zdCBHVktfU1RBVElDID0gJ0dWSyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXBpT2JqZWN0RGVmaW5pdGlvbiB7XG4gIHJlYWRvbmx5IGZxbjogc3RyaW5nO1xuICByZWFkb25seSBncm91cDogc3RyaW5nO1xuICByZWFkb25seSB2ZXJzaW9uOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGtpbmQ6IHN0cmluZztcbiAgcmVhZG9ubHkgc2NoZW1hOiBKU09OU2NoZW1hNDtcblxuICAvKipcbiAgICogSXMgdGhpcyBpcyBhIGN1c3RvbSByZXNvdXJjZSAoaW1wb3J0ZWQgZnJvbSBhIENSRCkgb3IgYSBjb3JlIEFQSSBvYmplY3Q/XG4gICAqL1xuICByZWFkb25seSBjdXN0b206IGJvb2xlYW47XG5cbiAgLypcbiAgICogSW5kaWNhdGVzIGlmIGEgcHJlZml4IHNob3VsZCBiZSBhZGRlZCB0byB0aGUgY29uc3RydWN0IGNsYXNzIG5hbWUuIEZvclxuICAgKiBleGFtcGxlLCBmb3IgbmF0aXZlIGs4cyBhcGkgb2JqZWN0cywgd2UgYWRkIGBLdWJlYCBieSBkZWZhdWx0LlxuICAgKlxuICAgKiBAZGVmYXVsdCBcIlwiXG4gICAqL1xuICByZWFkb25seSBwcmVmaXg/OiBzdHJpbmc7XG5cbiAgLypcbiAgICogSW5kaWNhdGVzIGlmIGEgc3VmZml4IHNob3VsZCBiZSBhZGRlZCB0byB0aGUgY29uc3RydWN0IGNsYXNzIG5hbWUuIEZvclxuICAgKiBleGFtcGxlLCBmb3IgbXVsdGktdmVyc2lvbmVkIGNyZHMsIHdlIGFkZCB0aGUgdmVyc2lvbiBhcyB0aGUgc3VmZml4LlxuICAgKlxuICAgKiBAZGVmYXVsdCBcIlwiXG4gICAqL1xuICByZWFkb25seSBzdWZmaXg/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogRW1pdHMgdGhlIGhlYWRlciBmb3IgYSBnZW5lcmF0ZWQgaW1wb3J0cyBmaWxlLlxuICpcbiAqIEBwYXJhbSBjdXN0b20gLSB3aGV0aGVyIHRoZSBoZWFkZXIgaXMgYmVpbmcgZW1pdHRlZCBmb3IgYSBjdXN0b20gcmVzb3VyY2VcbiAqIChpbXBvcnRlZCBmcm9tIGEgQ1JEKSBvciBhIGNvcmUgQVBJIG9iamVjdFxuICovXG5leHBvcnQgZnVuY3Rpb24gZW1pdEhlYWRlcihjb2RlOiBDb2RlTWFrZXIsIGN1c3RvbTogYm9vbGVhbikge1xuICBjb2RlLmxpbmUoJy8vIGdlbmVyYXRlZCBieSBjZGs4cycpO1xuICBpZiAoY3VzdG9tKSB7XG4gICAgY29kZS5saW5lKCdpbXBvcnQgeyBBcGlPYmplY3QsIEFwaU9iamVjdE1ldGFkYXRhLCBHcm91cFZlcnNpb25LaW5kIH0gZnJvbSBcXCdjZGs4c1xcJzsnKTtcbiAgfSBlbHNlIHtcbiAgICBjb2RlLmxpbmUoJ2ltcG9ydCB7IEFwaU9iamVjdCwgR3JvdXBWZXJzaW9uS2luZCB9IGZyb20gXFwnY2RrOHNcXCc7Jyk7XG4gIH1cbiAgY29kZS5saW5lKCdpbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tIFxcJ2NvbnN0cnVjdHNcXCc7Jyk7XG4gIGNvZGUubGluZSgpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0VHlwZU5hbWUoY3VzdG9tOiBib29sZWFuLCBraW5kOiBzdHJpbmcsIHZlcnNpb246IHN0cmluZykge1xuICAvLyBhZGQgYW4gQVBJIHZlcnNpb24gcG9zdGZpeCBvbmx5IGlmIHRoaXMgaXMgY29yZSBBUEkgKGBpbXBvcnQgazhzYCkuXG4gIC8vIFRPRE8gPSB3aGF0IGFib3V0IHRoZSByZXN0IG9mIHRoZSBuYW1lc3BhY2U/IHRoZSBzYW1lIHJlc291cmNlIGNhbiBleGlzdCBpbiBtdWx0aXBsZVxuICAvLyBhcGkgZ3JvdXBzIChJbmdyZXNzIGZvciBleGFtcGxlIGV4aXN0cyBpbiAnZXh0ZW5zaW9ucycgYW5kICduZXR3b3JraW5nJylcbiAgY29uc3QgcG9zdGZpeCA9IChjdXN0b20gfHwgdmVyc2lvbiA9PT0gJ3YxJykgPyAnJyA6IHRvUGFzY2FsQ2FzZSh2ZXJzaW9uKTtcbiAgcmV0dXJuIGAke2tpbmR9JHtwb3N0Zml4fWA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDb25zdHJ1Y3RUeXBlTmFtZShkZWY6IEFwaU9iamVjdERlZmluaXRpb24pIHtcbiAgY29uc3QgcHJlZml4ID0gZGVmLnByZWZpeCA/PyAnJztcbiAgY29uc3Qgc3VmZml4ID0gZGVmLnN1ZmZpeCA/PyAnJztcbiAgcmV0dXJuIFR5cGVHZW5lcmF0b3Iubm9ybWFsaXplVHlwZU5hbWUoYCR7cHJlZml4fSR7Z2V0VHlwZU5hbWUoZGVmLmN1c3RvbSwgZGVmLmtpbmQsIGRlZi52ZXJzaW9uKX0ke3N1ZmZpeH1gKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFByb3BzVHlwZU5hbWUoZGVmOiBBcGlPYmplY3REZWZpbml0aW9uKSB7XG4gIGNvbnN0IGNvbnN0cnVjdE5hbWUgPSBnZXRDb25zdHJ1Y3RUeXBlTmFtZShkZWYpO1xuICByZXR1cm4gVHlwZUdlbmVyYXRvci5ub3JtYWxpemVUeXBlTmFtZShgJHtjb25zdHJ1Y3ROYW1lfVByb3BzYCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0ZUNvbnN0cnVjdCh0eXBlZ2VuOiBUeXBlR2VuZXJhdG9yLCBkZWY6IEFwaU9iamVjdERlZmluaXRpb24pIHtcbiAgY29uc3QgY29uc3RydWN0TmFtZSA9IGdldENvbnN0cnVjdFR5cGVOYW1lKGRlZik7XG5cbiAgaWYgKGRlZi5jdXN0b20pIHtcbiAgICB0eXBlZ2VuLmVtaXRDdXN0b21UeXBlKCdBcGlPYmplY3RNZXRhZGF0YScsICgpID0+IHt9KTtcbiAgfVxuXG4gIHR5cGVnZW4uZW1pdEN1c3RvbVR5cGUoY29uc3RydWN0TmFtZSwgY29kZSA9PiB7XG4gICAgY29uc3Qgc2NoZW1hID0gZGVmLnNjaGVtYTtcblxuICAgIC8vIGBwcm9wc1R5cGVOYW1lYCBjb3VsZCBhbHNvIGJlIFwiYW55XCIgaWYgd2UgY2FuJ3QgcGFyc2UgdGhlIHNjaGVtYSBmb3Igc29tZSByZWFzb25cbiAgICBjb25zdCBwcm9wc1R5cGVOYW1lID0gZW1pdFByb3BzU3RydWN0KCk7XG4gICAgY29uc3QgZ3JvdXBQcmVmaXggPSBkZWYuZ3JvdXAgPyBgJHtkZWYuZ3JvdXB9L2AgOiAnJztcbiAgICBjb25zdCBoYXNSZXF1aXJlZCA9IGhhc1JlcXVpcmVkUHJvcHMoc2NoZW1hKTtcbiAgICBjb25zdCBkZWZhdWx0UHJvcHMgPSBoYXNSZXF1aXJlZCA/ICcnIDogJyA9IHt9JztcbiAgICBlbWl0Q29uc3RydWN0KCk7XG5cbiAgICBmdW5jdGlvbiBlbWl0UHJvcHNTdHJ1Y3QoKSB7XG4gICAgICBjb25zdCBwcm9wc1NjaGVtYSA9IGNyZWF0ZVByb3BzU3RydWN0U2NoZW1hKCk7XG4gICAgICBjb25zdCBwcm9wc1N0cnVjdE5hbWUgPSBnZXRQcm9wc1R5cGVOYW1lKGRlZik7XG4gICAgICByZXR1cm4gdHlwZWdlbi5lbWl0VHlwZShwcm9wc1N0cnVjdE5hbWUsIHByb3BzU2NoZW1hLCBkZWYuZnFuKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVQcm9wc1N0cnVjdFNjaGVtYSgpIHtcbiAgICAgIGNvbnN0IGNvcHk6IEpTT05TY2hlbWE0ID0geyAuLi5kZWYuc2NoZW1hIHx8IHt9IH07XG4gICAgICBjb25zdCBwcm9wcyA9IGNvcHkucHJvcGVydGllcyA9IGNvcHkucHJvcGVydGllcyB8fCB7fTtcbiAgICAgIGRlbGV0ZSBwcm9wcy5hcGlWZXJzaW9uO1xuICAgICAgZGVsZXRlIHByb3BzLmtpbmQ7XG4gICAgICBkZWxldGUgcHJvcHMuc3RhdHVzO1xuICAgICAgZGVsZXRlIGNvcHlbJ3gta3ViZXJuZXRlcy1ncm91cC12ZXJzaW9uLWtpbmQnXTtcblxuICAgICAgY29weS5yZXF1aXJlZCA9IGNvcHkucmVxdWlyZWQgfHwgW107XG5cbiAgICAgIGlmIChBcnJheS5pc0FycmF5KGNvcHkucmVxdWlyZWQpKSB7XG4gICAgICAgIGNvcHkucmVxdWlyZWQgPSBjb3B5LnJlcXVpcmVkLmZpbHRlcih4ID0+IHggIT09ICdhcGlWZXJzaW9uJyAmJiB4ICE9PSAna2luZCcgJiYgeCAhPT0gJ3N0YXR1cycpO1xuICAgICAgfVxuXG4gICAgICBpZiAoZGVmLmN1c3RvbSkge1xuICAgICAgICAvLyBhZGQgXCJtZXRhZGF0YVwiIGZpZWxkIGZvciBhbGwgQ1JEcywgb3ZlcnJpZGluZyBhbnkgZXhpc3RpbmcgdHlwaW5nc1xuICAgICAgICBjb3B5LnByb3BlcnRpZXMubWV0YWRhdGEgPSB7ICRyZWY6ICcjL2RlZmluaXRpb25zL0FwaU9iamVjdE1ldGFkYXRhJyB9O1xuICAgICAgfVxuXG4gICAgICAvLyByZW9yZGVyIHRvcC1sZXZlbCBrZXlzIHNvIHRoYXQgd2UgaGF2ZSBcIm1ldGFkYXRhXCIgZmlyc3QgYW5kIHRoZW4gYWxsIHRoZSByZXN0XG4gICAgICAvLyBUaGlzIG1hdGNoZXMgdGhlIGJlaGF2aW9yIGluIHRoZSBBcGlPYmplY3QncyB0b0pzb24gZnVuY3Rpb24gKGh0dHBzOi8vZ2l0aHViLmNvbS9jZGs4cy10ZWFtL2NkazhzLWNvcmUvYmxvYi81OGZiOGMwODgyZGRkOTVhOWI5ZGVkYjQxMDdlMTJmNjAxNDQzY2Y0L3NyYy9hcGktb2JqZWN0LnRzI0wxODUpXG4gICAgICBjb25zdCByZXN1bHQ6IGFueSA9IHt9O1xuICAgICAgZm9yIChjb25zdCBrIG9mIFsnbWV0YWRhdGEnLCAuLi5PYmplY3Qua2V5cyhjb3B5LnByb3BlcnRpZXMpXSkge1xuICAgICAgICBpZiAoayBpbiBjb3B5LnByb3BlcnRpZXMpIHtcbiAgICAgICAgICByZXN1bHRba10gPSBjb3B5LnByb3BlcnRpZXNba107XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY29weS5wcm9wZXJ0aWVzID0gcmVzdWx0O1xuICAgICAgcmV0dXJuIGNvcHk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZW1pdENvbnN0cnVjdCgpIHtcbiAgICAgIGNvZGUubGluZSgnLyoqJyk7XG4gICAgICBjb2RlLmxpbmUoYCAqICR7ZGVmLnNjaGVtYT8uZGVzY3JpcHRpb24gPz8gJyd9YCk7XG4gICAgICBjb2RlLmxpbmUoJyAqJyk7XG4gICAgICBjb2RlLmxpbmUoYCAqIEBzY2hlbWEgJHtkZWYuZnFufWApO1xuICAgICAgY29kZS5saW5lKCcgKi8nKTtcbiAgICAgIGNvZGUub3BlbkJsb2NrKGBleHBvcnQgY2xhc3MgJHtjb25zdHJ1Y3ROYW1lfSBleHRlbmRzIEFwaU9iamVjdGApO1xuXG4gICAgICBlbWl0R1ZLKCk7XG5cbiAgICAgIGNvZGUubGluZSgnJyk7XG5cbiAgICAgIGVtaXRNYW5pZmVzdEZhY3RvcnkoKTtcblxuICAgICAgY29kZS5saW5lKCcnKTtcblxuICAgICAgZW1pdEluaXRpYWxpemVyKCk7XG5cbiAgICAgIGNvZGUubGluZSgnJyk7XG5cbiAgICAgIGVtaXRUb0pzb24oKTtcblxuICAgICAgY29kZS5jbG9zZUJsb2NrKCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZW1pdEdWSygpIHtcbiAgICAgIGNvZGUubGluZSgnLyoqJyk7XG4gICAgICBjb2RlLmxpbmUoYCAqIFJldHVybnMgdGhlIGFwaVZlcnNpb24gYW5kIGtpbmQgZm9yIFwiJHtkZWYuZnFufVwiYCk7XG4gICAgICBjb2RlLmxpbmUoJyAqLycpO1xuICAgICAgY29kZS5vcGVuQmxvY2soYHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgJHtHVktfU1RBVElDfTogR3JvdXBWZXJzaW9uS2luZCA9YCk7XG4gICAgICBjb2RlLmxpbmUoYGFwaVZlcnNpb246ICcke2dyb3VwUHJlZml4fSR7ZGVmLnZlcnNpb259JyxgKTtcbiAgICAgIGNvZGUubGluZShga2luZDogJyR7ZGVmLmtpbmR9JyxgKTtcbiAgICAgIGNvZGUuY2xvc2VCbG9jaygpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGVtaXRJbml0aWFsaXplcigpIHtcblxuICAgICAgY29kZS5saW5lKCcvKionKTtcbiAgICAgIGNvZGUubGluZShgICogRGVmaW5lcyBhIFwiJHtkZWYuZnFufVwiIEFQSSBvYmplY3RgKTtcbiAgICAgIGNvZGUubGluZSgnICogQHBhcmFtIHNjb3BlIHRoZSBzY29wZSBpbiB3aGljaCB0byBkZWZpbmUgdGhpcyBvYmplY3QnKTtcbiAgICAgIGNvZGUubGluZSgnICogQHBhcmFtIGlkIGEgc2NvcGUtbG9jYWwgbmFtZSBmb3IgdGhlIG9iamVjdCcpO1xuICAgICAgY29kZS5saW5lKCcgKiBAcGFyYW0gcHJvcHMgaW5pdGlhbGl6YXRpb24gcHJvcHMnKTtcbiAgICAgIGNvZGUubGluZSgnICovJyk7XG5cbiAgICAgIGNvZGUub3BlbkJsb2NrKGBwdWJsaWMgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6ICR7cHJvcHNUeXBlTmFtZX0ke2RlZmF1bHRQcm9wc30pYCk7XG5cbiAgICAgIGNvZGUub3Blbignc3VwZXIoc2NvcGUsIGlkLCB7Jyk7XG4gICAgICBjb2RlLmxpbmUoYC4uLiR7Y29uc3RydWN0TmFtZX0uJHtHVktfU1RBVElDfSxgKTtcbiAgICAgIGNvZGUubGluZSgnLi4ucHJvcHMsJyk7XG4gICAgICBjb2RlLmNsb3NlKCd9KTsnKTtcblxuICAgICAgY29kZS5jbG9zZUJsb2NrKCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZW1pdE1hbmlmZXN0RmFjdG9yeSgpIHtcbiAgICAgIGNvZGUubGluZSgnLyoqJyk7XG4gICAgICBjb2RlLmxpbmUoYCAqIFJlbmRlcnMgYSBLdWJlcm5ldGVzIG1hbmlmZXN0IGZvciBcIiR7ZGVmLmZxbn1cIi5gKTtcbiAgICAgIGNvZGUubGluZSgnIConKTtcbiAgICAgIGNvZGUubGluZSgnICogVGhpcyBjYW4gYmUgdXNlZCB0byBpbmxpbmUgcmVzb3VyY2UgbWFuaWZlc3RzIGluc2lkZSBvdGhlciBvYmplY3RzIChlLmcuIGFzIHRlbXBsYXRlcykuJyk7XG4gICAgICBjb2RlLmxpbmUoJyAqJyk7XG4gICAgICBjb2RlLmxpbmUoJyAqIEBwYXJhbSBwcm9wcyBpbml0aWFsaXphdGlvbiBwcm9wcycpO1xuICAgICAgY29kZS5saW5lKCcgKi8nKTtcblxuICAgICAgY29kZS5vcGVuQmxvY2soYHB1YmxpYyBzdGF0aWMgJHtNQU5JRkVTVF9TVEFUSUNfTUVUSE9EfShwcm9wczogJHtwcm9wc1R5cGVOYW1lfSR7ZGVmYXVsdFByb3BzfSk6IGFueWApO1xuICAgICAgY29kZS5vcGVuKCdyZXR1cm4geycpO1xuICAgICAgY29kZS5saW5lKGAuLi4ke2NvbnN0cnVjdE5hbWV9LiR7R1ZLX1NUQVRJQ30sYCk7XG4gICAgICBjb2RlLmxpbmUoYC4uLnRvSnNvbl8ke3Byb3BzVHlwZU5hbWV9KHByb3BzKSxgKTtcbiAgICAgIGNvZGUuY2xvc2UoJ307Jyk7XG4gICAgICBjb2RlLmNsb3NlQmxvY2soKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBlbWl0VG9Kc29uKCkge1xuICAgICAgY29kZS5saW5lKCcvKionKTtcbiAgICAgIGNvZGUubGluZSgnICogUmVuZGVycyB0aGUgb2JqZWN0IHRvIEt1YmVybmV0ZXMgSlNPTi4nKTtcbiAgICAgIGNvZGUubGluZSgnICovJyk7XG4gICAgICBjb2RlLm9wZW5CbG9jaygncHVibGljIG92ZXJyaWRlIHRvSnNvbigpOiBhbnknKTtcbiAgICAgIGNvZGUubGluZSgnY29uc3QgcmVzb2x2ZWQgPSBzdXBlci50b0pzb24oKTsnKTtcbiAgICAgIGNvZGUubGluZSgpO1xuICAgICAgY29kZS5vcGVuKCdyZXR1cm4geycpO1xuICAgICAgY29kZS5saW5lKGAuLi4ke2NvbnN0cnVjdE5hbWV9LiR7R1ZLX1NUQVRJQ30sYCk7XG4gICAgICBjb2RlLmxpbmUoYC4uLnRvSnNvbl8ke3Byb3BzVHlwZU5hbWV9KHJlc29sdmVkKSxgKTtcbiAgICAgIGNvZGUuY2xvc2UoJ307Jyk7XG4gICAgICBjb2RlLmNsb3NlQmxvY2soKTtcbiAgICB9XG4gIH0pO1xufVxuXG4vKipcbiAqIEVtaXQgaW1wb3J0cyBmb3IgZ2VuZXJhdGVkIGhlbG0gY29uc3RydWN0XG4gKiBAcGFyYW0gY29kZSBDb2RlTWFrZXIgaXN0YW5jZVxuICovXG5leHBvcnQgZnVuY3Rpb24gZW1pdEhlbG1IZWFkZXIoY29kZTogQ29kZU1ha2VyKSB7XG4gIGNvZGUubGluZSgnLy8gZ2VuZXJhdGVkIGJ5IGNkazhzJyk7XG4gIGNvZGUubGluZSgnaW1wb3J0IHsgSGVsbSwgSGVsbVByb3BzIH0gZnJvbSBcXCdjZGs4c1xcJzsnKTtcbiAgY29kZS5saW5lKCdpbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tIFxcJ2NvbnN0cnVjdHNcXCc7Jyk7XG4gIGNvZGUubGluZSgpO1xufVxuXG4vKipcbiAqIEhlbG0gT2JqZWN0IERlZmluaXRpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBIZWxtT2JqZWN0RGVmaW5pdGlvbiB7XG4gIC8qKlxuICAgKiBgdmFsdWVzLnNjaGVtYS5qc29uYCBmb3IgdGhlIGhlbG0gY2hhcnRcbiAgICovXG4gIHJlYWRvbmx5IHNjaGVtYTogSlNPTlNjaGVtYTQgfCB1bmRlZmluZWQ7XG4gIC8qKlxuICAgKiBDaGFydCBuYW1lXG4gICAqL1xuICByZWFkb25seSBjaGFydE5hbWU6IHN0cmluZztcbiAgLyoqXG4gICAqIENoYXJ0IHVybFxuICAgKi9cbiAgcmVhZG9ubHkgY2hhcnRVcmw6IHN0cmluZztcbiAgLyoqXG4gICAqIENoYXJ0IHZlcnNpb25cbiAgICovXG4gIHJlYWRvbmx5IGNoYXJ0VmVyc2lvbjogc3RyaW5nO1xuICAvKipcbiAgICogQ2hhcnQgZGVwZW5kZW5jaWVzXG4gICAqL1xuICByZWFkb25seSBjaGFydERlcGVuZGVuY2llczogc3RyaW5nW107XG4gIC8qKlxuICAgKiBGdWxseSBxdWFsaWZpZWQgbmFtZSBmb3IgdGhlIGNvbnN0cnVjdFxuICAgKi9cbiAgcmVhZG9ubHkgZnFuPzogc3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2VuZXJhdGVIZWxtQ29uc3RydWN0KHR5cGVnZW46IFR5cGVHZW5lcmF0b3IsIGRlZjogSGVsbU9iamVjdERlZmluaXRpb24pIHtcbiAgY29uc3Qgbm9TcGVjaWFsQ2hhcnMgPSBkZWYuY2hhcnROYW1lLnJlcGxhY2UoLyhbXlxcdyBdfF8pL2csICcnKTtcbiAgY29uc3QgY2hhcnROYW1lID0gVHlwZUdlbmVyYXRvci5ub3JtYWxpemVUeXBlTmFtZShub1NwZWNpYWxDaGFycyk7XG4gIGNvbnN0IHNjaGVtYSA9IGRlZi5zY2hlbWE7XG4gIGNvbnN0IHJlcG9VcmwgPSBkZWYuY2hhcnRVcmw7XG4gIGNvbnN0IGNoYXJ0VmVyc2lvbiA9IGRlZi5jaGFydFZlcnNpb247XG5cbiAgLy8gQ3JlYXRlIGN1c3RvbSB0eXBlXG4gIHR5cGVnZW4uZW1pdEN1c3RvbVR5cGUoY2hhcnROYW1lLCBjb2RlID0+IHtcblxuICAgIGxldCB2YWx1ZXNJbnRlcmZhY2UgPSBgJHtjaGFydE5hbWV9VmFsdWVzYDtcbiAgICBpZiAoc2NoZW1hICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIENyZWF0aW5nIHZhbHVlcyBpbnRlcmZhY2VcbiAgICAgIHZhbHVlc0ludGVyZmFjZSA9IGVtaXRWYWx1ZXNJbnRlcmZhY2UoKTtcblxuICAgICAgZnVuY3Rpb24gZW1pdFZhbHVlc0ludGVyZmFjZSgpIHtcblxuICAgICAgICBjb25zdCBjb3B5T2ZTY2hlbWEgPSBzY2hlbWEgPyBhZGRBZGRpdGlvbmFsVmFsdWVzVG9Qcm9wcyhzY2hlbWEpIDogdW5kZWZpbmVkO1xuXG4gICAgICAgIGlmIChjb3B5T2ZTY2hlbWEgJiYgY29weU9mU2NoZW1hLnByb3BlcnRpZXMpIHtcbiAgICAgICAgICAvLyBTdWIgY2hhcnRzIG9yIGRlcGVuZGVuY2llc1xuICAgICAgICAgIGZvciAoY29uc3QgZGVwZW5kZW5jeSBvZiBkZWYuY2hhcnREZXBlbmRlbmNpZXMpIHtcbiAgICAgICAgICAgIGNvcHlPZlNjaGVtYS5wcm9wZXJ0aWVzW2RlcGVuZGVuY3ldID0geyB0eXBlOiAnb2JqZWN0JywgYWRkaXRpb25hbFByb3BlcnRpZXM6IHsgdHlwZTogJ29iamVjdCcgfSB9O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvcHlPZlNjaGVtYS5wcm9wZXJ0aWVzLmdsb2JhbCA9IHsgdHlwZTogJ29iamVjdCcsIGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiB7IHR5cGU6ICdvYmplY3QnIH0gfTtcbiAgICAgICAgICBjb3B5T2ZTY2hlbWEucHJvcGVydGllcy5hZGRpdGlvbmFsVmFsdWVzID0ge1xuICAgICAgICAgICAgdHlwZTogJ29iamVjdCcsXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogJ1ZhbHVlcyB0aGF0IGFyZSBub3QgYXZhaWxhYmxlIGluIHZhbHVlcy5zY2hlbWEuanNvbiB3aWxsIG5vdCBiZSBjb2RlIGdlbmVyYXRlZC4gWW91IGNhbiBhZGQgc3VjaCB2YWx1ZXMgdG8gdGhpcyBwcm9wZXJ0eS4nLFxuICAgICAgICAgICAgYWRkaXRpb25hbFByb3BlcnRpZXM6IHsgdHlwZTogJ29iamVjdCcgfSxcbiAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHR5cGVnZW4uZW1pdFR5cGUodmFsdWVzSW50ZXJmYWNlLCBjb3B5T2ZTY2hlbWEsIGRlZi5mcW4pO1xuICAgICAgfVxuXG4gICAgICBmdW5jdGlvbiBhZGRBZGRpdGlvbmFsVmFsdWVzVG9Qcm9wcyhzY2htYTogSlNPTlNjaGVtYTQpOiBKU09OU2NoZW1hNCB7XG4gICAgICAgIGNvbnN0IHRlbXBTY2hlbWEgPSBzY2htYTtcblxuICAgICAgICBpZiAoIXRlbXBTY2hlbWEucHJvcGVydGllcykge1xuICAgICAgICAgIHJldHVybiB0ZW1wU2NoZW1hO1xuICAgICAgICB9XG5cbiAgICAgICAgT2JqZWN0LnZhbHVlcyh0ZW1wU2NoZW1hLnByb3BlcnRpZXMpLmZvckVhY2goKHByb3ApID0+IHtcbiAgICAgICAgICBpZiAocHJvcC50eXBlICE9PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChwcm9wLnByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgIHByb3AucHJvcGVydGllcy5hZGRpdGlvbmFsVmFsdWVzID0ge1xuICAgICAgICAgICAgICB0eXBlOiAnb2JqZWN0JyxcbiAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdWYWx1ZXMgdGhhdCBhcmUgbm90IGF2YWlsYWJsZSBpbiB2YWx1ZXMuc2NoZW1hLmpzb24gd2lsbCBub3QgYmUgY29kZSBnZW5lcmF0ZWQuIFlvdSBjYW4gYWRkIHN1Y2ggdmFsdWVzIHRvIHRoaXMgcHJvcGVydHkuJyxcbiAgICAgICAgICAgICAgYWRkaXRpb25hbFByb3BlcnRpZXM6IHsgdHlwZTogJ29iamVjdCcgfSxcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGFkZEFkZGl0aW9uYWxWYWx1ZXNUb1Byb3BzKHByb3ApO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHRlbXBTY2hlbWE7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gQ3JlYXRpbmcgY29uc3RydWN0IHByb3BlcnRpZXNcbiAgICBlbWl0UHJvcHNJbnRlcmZhY2UoKTtcblxuICAgIGNvZGUubGluZSgpO1xuXG4gICAgLy8gQ3JlYXRpbmcgY29uc3RydWN0IGZvciBoZWxtIGNoYXJ0XG4gICAgZW1pdENvbnN0cnVjdCgpO1xuXG4gICAgZnVuY3Rpb24gZW1pdFByb3BzSW50ZXJmYWNlKCkge1xuICAgICAgY29kZS5vcGVuQmxvY2soYGV4cG9ydCBpbnRlcmZhY2UgJHtjaGFydE5hbWV9UHJvcHNgKTtcblxuICAgICAgY29kZS5saW5lKCdyZWFkb25seSBuYW1lc3BhY2U/OiBzdHJpbmc7Jyk7XG4gICAgICBjb2RlLmxpbmUoJ3JlYWRvbmx5IHJlbGVhc2VOYW1lPzogc3RyaW5nOycpO1xuICAgICAgY29kZS5saW5lKCdyZWFkb25seSBoZWxtRXhlY3V0YWJsZT86IHN0cmluZzsnKTtcbiAgICAgIGNvZGUubGluZSgncmVhZG9ubHkgaGVsbUZsYWdzPzogc3RyaW5nW107Jyk7XG5cbiAgICAgIGlmIChzY2hlbWEgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb2RlLmxpbmUoJ3JlYWRvbmx5IHZhbHVlcz86IHsgW2tleTogc3RyaW5nXTogYW55IH07Jyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBkb1ZhbHVlc0hhdmVSZXFQcm9wcyA9IGhhc1JlcXVpcmVkUHJvcHMoc2NoZW1hKSA/ICcnIDogJz8nO1xuICAgICAgICBjb2RlLmxpbmUoYHJlYWRvbmx5IHZhbHVlcyR7ZG9WYWx1ZXNIYXZlUmVxUHJvcHN9OiAke3ZhbHVlc0ludGVyZmFjZX07YCk7XG4gICAgICB9XG5cbiAgICAgIGNvZGUuY2xvc2VCbG9jaygpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGVtaXRDb25zdHJ1Y3QoKSB7XG4gICAgICBjb2RlLm9wZW5CbG9jayhgZXhwb3J0IGNsYXNzICR7Y2hhcnROYW1lfSBleHRlbmRzIENvbnN0cnVjdGApO1xuXG4gICAgICBlbWl0SW5pdGlhbGl6ZXIoKTtcblxuICAgICAgY29kZS5saW5lKCk7XG5cbiAgICAgIGVtaXRBZGRpdGlvbmFsVmFsdWVzRmxhdHRlbkZ1bmMoKTtcblxuICAgICAgY29kZS5jbG9zZUJsb2NrKCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZW1pdEluaXRpYWxpemVyKCkge1xuICAgICAgY29uc3QgcHJvcHNEZWZpbml0aW9uID0gc2NoZW1hICYmIGhhc1JlcXVpcmVkUHJvcHMoc2NoZW1hKSA/IGAke2NoYXJ0TmFtZX1Qcm9wc2AgOiBgJHtjaGFydE5hbWV9UHJvcHMgPSB7fWA7XG5cbiAgICAgIGNvZGUub3BlbkJsb2NrKGBwdWJsaWMgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6ICR7cHJvcHNEZWZpbml0aW9ufSlgKTtcbiAgICAgIGNvZGUubGluZSgnc3VwZXIoc2NvcGUsIGlkKTsnKTtcblxuICAgICAgY29kZS5saW5lKCdsZXQgdXBkYXRlZFByb3BzID0ge307Jyk7XG4gICAgICBjb2RlLmxpbmUoKTtcbiAgICAgIGNvZGUub3BlbkJsb2NrKCdpZiAocHJvcHMudmFsdWVzKScpO1xuICAgICAgaWYgKHNjaGVtYSkge1xuICAgICAgICBjb2RlLmxpbmUoYGNvbnN0IHZhbHVlcyA9IHRvSnNvbl8ke3ZhbHVlc0ludGVyZmFjZX0ocHJvcHMudmFsdWVzKTtgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvZGUubGluZSgnY29uc3QgdmFsdWVzID0gcHJvcHMudmFsdWVzOycpO1xuICAgICAgfVxuICAgICAgY29kZS5vcGVuQmxvY2soJ2lmICh2YWx1ZXMpJyk7XG4gICAgICBjb2RlLmxpbmUoJ2NvbnN0IHsgYWRkaXRpb25hbFZhbHVlcywgLi4udmFsdWVzV2l0aG91dEFkZGl0aW9uYWxWYWx1ZXMgfSA9IHZhbHVlczsnKTtcbiAgICAgIGNvZGUub3BlbigndXBkYXRlZFByb3BzID0geycpO1xuICAgICAgY29kZS5saW5lKCcuLi5wcm9wcywnKTtcbiAgICAgIGNvZGUub3BlbigndmFsdWVzOiB7Jyk7XG4gICAgICBjb2RlLmxpbmUoJy4uLnRoaXMuZmxhdHRlbkFkZGl0aW9uYWxWYWx1ZXModmFsdWVzV2l0aG91dEFkZGl0aW9uYWxWYWx1ZXMpLCcpO1xuICAgICAgY29kZS5saW5lKCcuLi5hZGRpdGlvbmFsVmFsdWVzLCcpO1xuICAgICAgY29kZS5jbG9zZSgnfSwnKTtcbiAgICAgIGNvZGUuY2xvc2UoJ307Jyk7XG4gICAgICBjb2RlLmNsb3NlQmxvY2soKTtcbiAgICAgIGNvZGUuY2xvc2VCbG9jaygpO1xuICAgICAgY29kZS5saW5lKCk7XG5cbiAgICAgIGNvZGUub3BlbignY29uc3QgZmluYWxQcm9wczogSGVsbVByb3BzID0geycpO1xuICAgICAgaWYgKHJlcG9Vcmwuc3RhcnRzV2l0aCgnb2NpOi8vJykpIHtcbiAgICAgICAgY29kZS5saW5lKGBjaGFydDogXFwnJHtyZXBvVXJsfVxcJyxgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvZGUubGluZShgY2hhcnQ6IFxcJyR7ZGVmLmNoYXJ0TmFtZX1cXCcsYCk7XG4gICAgICAgIGNvZGUubGluZShgcmVwbzogXFwnJHtyZXBvVXJsfVxcJyxgKTtcbiAgICAgIH1cbiAgICAgIGNvZGUubGluZShgdmVyc2lvbjogXFwnJHtjaGFydFZlcnNpb259XFwnLGApO1xuICAgICAgY29kZS5saW5lKCcuLi4oT2JqZWN0LmtleXModXBkYXRlZFByb3BzKS5sZW5ndGggIT09IDAgPyB1cGRhdGVkUHJvcHMgOiBwcm9wcyksJyk7XG4gICAgICBjb2RlLmNsb3NlKCd9OycpO1xuXG4gICAgICBjb2RlLmxpbmUoKTtcbiAgICAgIGNvZGUubGluZSgnbmV3IEhlbG0odGhpcywgXFwnSGVsbVxcJywgZmluYWxQcm9wcyk7Jyk7XG4gICAgICBjb2RlLmNsb3NlQmxvY2soKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBlbWl0QWRkaXRpb25hbFZhbHVlc0ZsYXR0ZW5GdW5jKCkge1xuICAgICAgY29kZS5vcGVuQmxvY2soJ3ByaXZhdGUgZmxhdHRlbkFkZGl0aW9uYWxWYWx1ZXMocHJvcHM6IHsgW2tleTogc3RyaW5nXTogYW55IH0pOiB7IFtrZXk6IHN0cmluZ106IGFueSB9Jyk7XG4gICAgICBjb2RlLm9wZW4oJ2ZvciAobGV0IHByb3AgaW4gcHJvcHMpIHsnKTtcbiAgICAgIGNvZGUub3BlbignaWYgKEFycmF5LmlzQXJyYXkocHJvcHNbcHJvcF0pKSB7Jyk7XG4gICAgICBjb2RlLm9wZW4oJ3Byb3BzW3Byb3BdLm1hcCgoaXRlbTogYW55KSA9PiB7Jyk7XG4gICAgICBjb2RlLm9wZW4oJ2lmICh0eXBlb2YgaXRlbSA9PT0gXFwnb2JqZWN0XFwnICYmIHByb3AgIT09IFxcJ2FkZGl0aW9uYWxWYWx1ZXNcXCcpIHsnKTtcbiAgICAgIGNvZGUubGluZSgncmV0dXJuIHRoaXMuZmxhdHRlbkFkZGl0aW9uYWxWYWx1ZXMoaXRlbSk7Jyk7XG4gICAgICBjb2RlLmNsb3NlKCd9Jyk7XG4gICAgICBjb2RlLmxpbmUoJ3JldHVybiBpdGVtOycpO1xuICAgICAgY29kZS5jbG9zZSgnfSk7Jyk7XG4gICAgICBjb2RlLmNsb3NlKCd9Jyk7XG4gICAgICBjb2RlLm9wZW4oJ2Vsc2UgaWYgKHR5cGVvZiBwcm9wc1twcm9wXSA9PT0gXFwnb2JqZWN0XFwnICYmIHByb3AgIT09IFxcJ2FkZGl0aW9uYWxWYWx1ZXNcXCcpIHsnKTtcbiAgICAgIGNvZGUubGluZSgncHJvcHNbcHJvcF0gPSB0aGlzLmZsYXR0ZW5BZGRpdGlvbmFsVmFsdWVzKHByb3BzW3Byb3BdKTsnKTtcbiAgICAgIGNvZGUuY2xvc2UoJ30nKTtcbiAgICAgIGNvZGUuY2xvc2UoJ30nKTtcbiAgICAgIGNvZGUubGluZSgpO1xuICAgICAgY29kZS5saW5lKCdjb25zdCB7IGFkZGl0aW9uYWxWYWx1ZXMsIC4uLnZhbHVlc1dpdGhvdXRBZGRpdGlvbmFsVmFsdWVzIH0gPSBwcm9wczsnKTtcbiAgICAgIGNvZGUubGluZSgpO1xuICAgICAgY29kZS5vcGVuKCdyZXR1cm4geycpO1xuICAgICAgY29kZS5saW5lKCcuLi52YWx1ZXNXaXRob3V0QWRkaXRpb25hbFZhbHVlcywnKTtcbiAgICAgIGNvZGUubGluZSgnLi4uYWRkaXRpb25hbFZhbHVlcywnKTtcbiAgICAgIGNvZGUuY2xvc2UoJ307Jyk7XG4gICAgICBjb2RlLmNsb3NlQmxvY2soKTtcbiAgICB9XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBoYXNSZXF1aXJlZFByb3BzKHNjaGVtYTogSlNPTlNjaGVtYTQpOmJvb2xlYW4gfCB1bmRlZmluZWQge1xuICByZXR1cm4gc2NoZW1hPy5yZXF1aXJlZCAmJiBBcnJheS5pc0FycmF5KHNjaGVtYS5yZXF1aXJlZCkgJiYgc2NoZW1hLnJlcXVpcmVkLmxlbmd0aCA+IDA7XG59Il19
|
|
317
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29kZWdlbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9pbXBvcnQvY29kZWdlbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSx5Q0FBb0Q7QUFJcEQseUNBQTBDO0FBRTFDLE1BQU0sc0JBQXNCLEdBQUcsVUFBVSxDQUFDO0FBQzFDLE1BQU0sVUFBVSxHQUFHLEtBQUssQ0FBQztBQStCekI7Ozs7O0dBS0c7QUFDSCxTQUFnQixVQUFVLENBQUMsSUFBZSxFQUFFLE1BQWU7SUFDekQsSUFBSSxDQUFDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO0lBQ25DLElBQUksTUFBTSxFQUFFO1FBQ1YsSUFBSSxDQUFDLElBQUksQ0FBQywyRUFBMkUsQ0FBQyxDQUFDO0tBQ3hGO1NBQU07UUFDTCxJQUFJLENBQUMsSUFBSSxDQUFDLHdEQUF3RCxDQUFDLENBQUM7S0FDckU7SUFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLDJDQUEyQyxDQUFDLENBQUM7SUFDdkQsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ2QsQ0FBQztBQVRELGdDQVNDO0FBRUQsU0FBZ0IsV0FBVyxDQUFDLE1BQWUsRUFBRSxJQUFZLEVBQUUsT0FBZTtJQUN4RSxzRUFBc0U7SUFDdEUsdUZBQXVGO0lBQ3ZGLDJFQUEyRTtJQUMzRSxNQUFNLE9BQU8sR0FBRyxDQUFDLE1BQU0sSUFBSSxPQUFPLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBQSx3QkFBWSxFQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzFFLE9BQU8sR0FBRyxJQUFJLEdBQUcsT0FBTyxFQUFFLENBQUM7QUFDN0IsQ0FBQztBQU5ELGtDQU1DO0FBRUQsU0FBZ0Isb0JBQW9CLENBQUMsR0FBd0I7SUFDM0QsTUFBTSxNQUFNLEdBQUcsR0FBRyxDQUFDLE1BQU0sSUFBSSxFQUFFLENBQUM7SUFDaEMsTUFBTSxNQUFNLEdBQUcsR0FBRyxDQUFDLE1BQU0sSUFBSSxFQUFFLENBQUM7SUFDaEMsT0FBTyx5QkFBYSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsTUFBTSxHQUFHLFdBQVcsQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLE9BQU8sQ0FBQyxHQUFHLE1BQU0sRUFBRSxDQUFDLENBQUM7QUFDaEgsQ0FBQztBQUpELG9EQUlDO0FBRUQsU0FBZ0IsZ0JBQWdCLENBQUMsR0FBd0I7SUFDdkQsTUFBTSxhQUFhLEdBQUcsb0JBQW9CLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDaEQsT0FBTyx5QkFBYSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsYUFBYSxPQUFPLENBQUMsQ0FBQztBQUNsRSxDQUFDO0FBSEQsNENBR0M7QUFFRCxTQUFnQixpQkFBaUIsQ0FBQyxPQUFzQixFQUFFLEdBQXdCO0lBQ2hGLE1BQU0sYUFBYSxHQUFHLG9CQUFvQixDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBRWhELElBQUksR0FBRyxDQUFDLE1BQU0sRUFBRTtRQUNkLE9BQU8sQ0FBQyxjQUFjLENBQUMsbUJBQW1CLEVBQUUsR0FBRyxFQUFFLEdBQUUsQ0FBQyxDQUFDLENBQUM7S0FDdkQ7SUFFRCxPQUFPLENBQUMsY0FBYyxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsRUFBRTtRQUMzQyxNQUFNLE1BQU0sR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDO1FBRTFCLG1GQUFtRjtRQUNuRixNQUFNLGFBQWEsR0FBRyxlQUFlLEVBQUUsQ0FBQztRQUN4QyxNQUFNLFdBQVcsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ3JELE1BQU0sV0FBVyxHQUFHLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzdDLE1BQU0sWUFBWSxHQUFHLFdBQVcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUM7UUFDaEQsYUFBYSxFQUFFLENBQUM7UUFFaEIsU0FBUyxlQUFlO1lBQ3RCLE1BQU0sV0FBVyxHQUFHLHVCQUF1QixFQUFFLENBQUM7WUFDOUMsTUFBTSxlQUFlLEdBQUcsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDOUMsT0FBTyxPQUFPLENBQUMsUUFBUSxDQUFDLGVBQWUsRUFBRSxXQUFXLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2pFLENBQUM7UUFFRCxTQUFTLHVCQUF1QjtZQUM5QixNQUFNLElBQUksR0FBZ0IsRUFBRSxHQUFHLEdBQUcsQ0FBQyxNQUFNLElBQUksRUFBRSxFQUFFLENBQUM7WUFDbEQsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsVUFBVSxJQUFJLEVBQUUsQ0FBQztZQUN0RCxPQUFPLEtBQUssQ0FBQyxVQUFVLENBQUM7WUFDeEIsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDO1lBQ2xCLE9BQU8sS0FBSyxDQUFDLE1BQU0sQ0FBQztZQUNwQixPQUFPLElBQUksQ0FBQyxpQ0FBaUMsQ0FBQyxDQUFDO1lBRS9DLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsSUFBSSxFQUFFLENBQUM7WUFFcEMsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRTtnQkFDaEMsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxZQUFZLElBQUksQ0FBQyxLQUFLLE1BQU0sSUFBSSxDQUFDLEtBQUssUUFBUSxDQUFDLENBQUM7YUFDakc7WUFFRCxJQUFJLEdBQUcsQ0FBQyxNQUFNLEVBQUU7Z0JBQ2QscUVBQXFFO2dCQUNyRSxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsR0FBRyxFQUFFLElBQUksRUFBRSxpQ0FBaUMsRUFBRSxDQUFDO2FBQ3hFO1lBRUQsZ0ZBQWdGO1lBQ2hGLCtLQUErSztZQUMvSyxNQUFNLE1BQU0sR0FBUSxFQUFFLENBQUM7WUFDdkIsS0FBSyxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLEVBQUU7Z0JBQzdELElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUU7b0JBQ3hCLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO2lCQUNoQzthQUNGO1lBRUQsSUFBSSxDQUFDLFVBQVUsR0FBRyxNQUFNLENBQUM7WUFDekIsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO1FBRUQsU0FBUyxhQUFhO1lBQ3BCLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDakIsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxNQUFNLEVBQUUsV0FBVyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDakQsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNoQixJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7WUFDbkMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNqQixJQUFJLENBQUMsU0FBUyxDQUFDLGdCQUFnQixhQUFhLG9CQUFvQixDQUFDLENBQUM7WUFFbEUsT0FBTyxFQUFFLENBQUM7WUFFVixJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBRWQsbUJBQW1CLEVBQUUsQ0FBQztZQUV0QixJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBRWQsZUFBZSxFQUFFLENBQUM7WUFFbEIsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUVkLFVBQVUsRUFBRSxDQUFDO1lBRWIsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ3BCLENBQUM7UUFFRCxTQUFTLE9BQU87WUFDZCxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ2pCLElBQUksQ0FBQyxJQUFJLENBQUMsMkNBQTJDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDO1lBQ2pFLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDakIsSUFBSSxDQUFDLFNBQVMsQ0FBQywwQkFBMEIsVUFBVSxzQkFBc0IsQ0FBQyxDQUFDO1lBQzNFLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLFdBQVcsR0FBRyxHQUFHLENBQUMsT0FBTyxJQUFJLENBQUMsQ0FBQztZQUN6RCxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUM7WUFDbEMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ3BCLENBQUM7UUFFRCxTQUFTLGVBQWU7WUFFdEIsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNqQixJQUFJLENBQUMsSUFBSSxDQUFDLGlCQUFpQixHQUFHLENBQUMsR0FBRyxjQUFjLENBQUMsQ0FBQztZQUNsRCxJQUFJLENBQUMsSUFBSSxDQUFDLDBEQUEwRCxDQUFDLENBQUM7WUFDdEUsSUFBSSxDQUFDLElBQUksQ0FBQyxnREFBZ0QsQ0FBQyxDQUFDO1lBQzVELElBQUksQ0FBQyxJQUFJLENBQUMsc0NBQXNDLENBQUMsQ0FBQztZQUNsRCxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBRWpCLElBQUksQ0FBQyxTQUFTLENBQUMsMkRBQTJELGFBQWEsR0FBRyxZQUFZLEdBQUcsQ0FBQyxDQUFDO1lBRTNHLElBQUksQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsQ0FBQztZQUNoQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sYUFBYSxJQUFJLFVBQVUsR0FBRyxDQUFDLENBQUM7WUFDaEQsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUN2QixJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBRWxCLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUNwQixDQUFDO1FBRUQsU0FBUyxtQkFBbUI7WUFDMUIsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNqQixJQUFJLENBQUMsSUFBSSxDQUFDLHlDQUF5QyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQztZQUNoRSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ2hCLElBQUksQ0FBQyxJQUFJLENBQUMsNEZBQTRGLENBQUMsQ0FBQztZQUN4RyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ2hCLElBQUksQ0FBQyxJQUFJLENBQUMsc0NBQXNDLENBQUMsQ0FBQztZQUNsRCxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBRWpCLElBQUksQ0FBQyxTQUFTLENBQUMsaUJBQWlCLHNCQUFzQixXQUFXLGFBQWEsR0FBRyxZQUFZLFFBQVEsQ0FBQyxDQUFDO1lBQ3ZHLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDdEIsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLGFBQWEsSUFBSSxVQUFVLEdBQUcsQ0FBQyxDQUFDO1lBQ2hELElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxhQUFhLFVBQVUsQ0FBQyxDQUFDO1lBQ2hELElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDakIsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ3BCLENBQUM7UUFFRCxTQUFTLFVBQVU7WUFDakIsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNqQixJQUFJLENBQUMsSUFBSSxDQUFDLDJDQUEyQyxDQUFDLENBQUM7WUFDdkQsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNqQixJQUFJLENBQUMsU0FBUyxDQUFDLCtCQUErQixDQUFDLENBQUM7WUFDaEQsSUFBSSxDQUFDLElBQUksQ0FBQyxrQ0FBa0MsQ0FBQyxDQUFDO1lBQzlDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNaLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDdEIsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLGFBQWEsSUFBSSxVQUFVLEdBQUcsQ0FBQyxDQUFDO1lBQ2hELElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxhQUFhLGFBQWEsQ0FBQyxDQUFDO1lBQ25ELElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDakIsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ3BCLENBQUM7SUFDSCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUM7QUE1SUQsOENBNElDO0FBRUQ7OztHQUdHO0FBQ0gsU0FBZ0IsY0FBYyxDQUFDLElBQWU7SUFDNUMsSUFBSSxDQUFDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO0lBQ25DLElBQUksQ0FBQyxJQUFJLENBQUMsNENBQTRDLENBQUMsQ0FBQztJQUN4RCxJQUFJLENBQUMsSUFBSSxDQUFDLDJDQUEyQyxDQUFDLENBQUM7SUFDdkQsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ2QsQ0FBQztBQUxELHdDQUtDO0FBZ0NELFNBQWdCLHFCQUFxQixDQUFDLE9BQXNCLEVBQUUsR0FBeUI7SUFDckYsTUFBTSxjQUFjLEdBQUcsR0FBRyxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsYUFBYSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ2hFLE1BQU0sU0FBUyxHQUFHLHlCQUFhLENBQUMsaUJBQWlCLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDbEUsTUFBTSxNQUFNLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQztJQUMxQixNQUFNLE9BQU8sR0FBRyxHQUFHLENBQUMsUUFBUSxDQUFDO0lBQzdCLE1BQU0sWUFBWSxHQUFHLEdBQUcsQ0FBQyxZQUFZLENBQUM7SUFFdEMscUJBQXFCO0lBQ3JCLE9BQU8sQ0FBQyxjQUFjLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxFQUFFO1FBRXZDLElBQUksZUFBZSxHQUFHLEdBQUcsU0FBUyxRQUFRLENBQUM7UUFDM0MsSUFBSSxNQUFNLEtBQUssU0FBUyxFQUFFO1lBQ3hCLDRCQUE0QjtZQUM1QixlQUFlLEdBQUcsbUJBQW1CLEVBQUUsQ0FBQztZQUV4QyxTQUFTLG1CQUFtQjtnQkFFMUIsTUFBTSxZQUFZLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQywwQkFBMEIsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO2dCQUU3RSxJQUFJLFlBQVksSUFBSSxZQUFZLENBQUMsVUFBVSxFQUFFO29CQUMzQyw2QkFBNkI7b0JBQzdCLEtBQUssTUFBTSxVQUFVLElBQUksR0FBRyxDQUFDLGlCQUFpQixFQUFFO3dCQUM5QyxZQUFZLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxvQkFBb0IsRUFBRSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDO3FCQUNwRztvQkFFRCxZQUFZLENBQUMsVUFBVSxDQUFDLE1BQU0sR0FBRyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsb0JBQW9CLEVBQUUsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQztvQkFDOUYsWUFBWSxDQUFDLFVBQVUsQ0FBQyxnQkFBZ0IsR0FBRzt3QkFDekMsSUFBSSxFQUFFLFFBQVE7d0JBQ2QsV0FBVyxFQUFFLDJIQUEySDt3QkFDeEksb0JBQW9CLEVBQUUsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFO3FCQUN6QyxDQUFDO2lCQUNIO2dCQUVELE9BQU8sT0FBTyxDQUFDLFFBQVEsQ0FBQyxlQUFlLEVBQUUsWUFBWSxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNsRSxDQUFDO1lBRUQsU0FBUywwQkFBMEIsQ0FBQyxLQUFrQjtnQkFDcEQsTUFBTSxVQUFVLEdBQUcsS0FBSyxDQUFDO2dCQUV6QixJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsRUFBRTtvQkFDMUIsT0FBTyxVQUFVLENBQUM7aUJBQ25CO2dCQUVELE1BQU0sQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO29CQUNwRCxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssUUFBUSxFQUFFO3dCQUMxQixPQUFPO3FCQUNSO29CQUVELElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRTt3QkFDbkIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxnQkFBZ0IsR0FBRzs0QkFDakMsSUFBSSxFQUFFLFFBQVE7NEJBQ2QsV0FBVyxFQUFFLDJIQUEySDs0QkFDeEksb0JBQW9CLEVBQUUsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFO3lCQUN6QyxDQUFDO3dCQUVGLDBCQUEwQixDQUFDLElBQUksQ0FBQyxDQUFDO3FCQUNsQztnQkFDSCxDQUFDLENBQUMsQ0FBQztnQkFFSCxPQUFPLFVBQVUsQ0FBQztZQUNwQixDQUFDO1NBQ0Y7UUFFRCxnQ0FBZ0M7UUFDaEMsa0JBQWtCLEVBQUUsQ0FBQztRQUVyQixJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7UUFFWixvQ0FBb0M7UUFDcEMsYUFBYSxFQUFFLENBQUM7UUFFaEIsU0FBUyxrQkFBa0I7WUFDekIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxvQkFBb0IsU0FBUyxPQUFPLENBQUMsQ0FBQztZQUVyRCxJQUFJLENBQUMsSUFBSSxDQUFDLDhCQUE4QixDQUFDLENBQUM7WUFDMUMsSUFBSSxDQUFDLElBQUksQ0FBQyxnQ0FBZ0MsQ0FBQyxDQUFDO1lBQzVDLElBQUksQ0FBQyxJQUFJLENBQUMsbUNBQW1DLENBQUMsQ0FBQztZQUMvQyxJQUFJLENBQUMsSUFBSSxDQUFDLGdDQUFnQyxDQUFDLENBQUM7WUFFNUMsSUFBSSxNQUFNLEtBQUssU0FBUyxFQUFFO2dCQUN4QixJQUFJLENBQUMsSUFBSSxDQUFDLDJDQUEyQyxDQUFDLENBQUM7YUFDeEQ7aUJBQU07Z0JBQ0wsTUFBTSxvQkFBb0IsR0FBRyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7Z0JBQ2pFLElBQUksQ0FBQyxJQUFJLENBQUMsa0JBQWtCLG9CQUFvQixLQUFLLGVBQWUsR0FBRyxDQUFDLENBQUM7YUFDMUU7WUFFRCxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDcEIsQ0FBQztRQUVELFNBQVMsYUFBYTtZQUNwQixJQUFJLENBQUMsU0FBUyxDQUFDLGdCQUFnQixTQUFTLG9CQUFvQixDQUFDLENBQUM7WUFFOUQsZUFBZSxFQUFFLENBQUM7WUFFbEIsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1lBRVosK0JBQStCLEVBQUUsQ0FBQztZQUVsQyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDcEIsQ0FBQztRQUVELFNBQVMsZUFBZTtZQUN0QixNQUFNLGVBQWUsR0FBRyxNQUFNLElBQUksZ0JBQWdCLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsU0FBUyxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsU0FBUyxZQUFZLENBQUM7WUFFNUcsSUFBSSxDQUFDLFNBQVMsQ0FBQywyREFBMkQsZUFBZSxHQUFHLENBQUMsQ0FBQztZQUM5RixJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUM7WUFFL0IsSUFBSSxDQUFDLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO1lBQ3BDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNaLElBQUksQ0FBQyxTQUFTLENBQUMsbUJBQW1CLENBQUMsQ0FBQztZQUNwQyxJQUFJLE1BQU0sRUFBRTtnQkFDVixJQUFJLENBQUMsSUFBSSxDQUFDLHlCQUF5QixlQUFlLGlCQUFpQixDQUFDLENBQUM7YUFDdEU7aUJBQU07Z0JBQ0wsSUFBSSxDQUFDLElBQUksQ0FBQyw4QkFBOEIsQ0FBQyxDQUFDO2FBQzNDO1lBQ0QsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUM5QixJQUFJLENBQUMsSUFBSSxDQUFDLHdFQUF3RSxDQUFDLENBQUM7WUFDcEYsSUFBSSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1lBQzlCLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDdkIsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUN2QixJQUFJLENBQUMsSUFBSSxDQUFDLGlFQUFpRSxDQUFDLENBQUM7WUFDN0UsSUFBSSxDQUFDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO1lBQ2xDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDakIsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNqQixJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDbEIsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ2xCLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUVaLElBQUksQ0FBQyxJQUFJLENBQUMsaUNBQWlDLENBQUMsQ0FBQztZQUM3QyxJQUFJLE9BQU8sQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLEVBQUU7Z0JBQzlCLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxHQUFHLENBQUMsU0FBUyxLQUFLLENBQUMsQ0FBQztnQkFDMUMsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLE9BQU8sS0FBSyxDQUFDLENBQUM7YUFDcEM7aUJBQU07Z0JBQ0wsb0JBQW9CO2dCQUNwQixJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksT0FBTyxLQUFLLENBQUMsQ0FBQzthQUNyQztZQUNELElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxZQUFZLEtBQUssQ0FBQyxDQUFDO1lBQzNDLElBQUksQ0FBQyxJQUFJLENBQUMscUVBQXFFLENBQUMsQ0FBQztZQUNqRixJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBRWpCLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNaLElBQUksQ0FBQyxJQUFJLENBQUMsdUNBQXVDLENBQUMsQ0FBQztZQUNuRCxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDcEIsQ0FBQztRQUVELFNBQVMsK0JBQStCO1lBQ3RDLElBQUksQ0FBQyxTQUFTLENBQUMsd0ZBQXdGLENBQUMsQ0FBQztZQUN6RyxJQUFJLENBQUMsSUFBSSxDQUFDLDJCQUEyQixDQUFDLENBQUM7WUFDdkMsSUFBSSxDQUFDLElBQUksQ0FBQyxtQ0FBbUMsQ0FBQyxDQUFDO1lBQy9DLElBQUksQ0FBQyxJQUFJLENBQUMsa0NBQWtDLENBQUMsQ0FBQztZQUM5QyxJQUFJLENBQUMsSUFBSSxDQUFDLG9FQUFvRSxDQUFDLENBQUM7WUFDaEYsSUFBSSxDQUFDLElBQUksQ0FBQyw0Q0FBNEMsQ0FBQyxDQUFDO1lBQ3hELElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDaEIsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztZQUMxQixJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ2xCLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDaEIsSUFBSSxDQUFDLElBQUksQ0FBQyxnRkFBZ0YsQ0FBQyxDQUFDO1lBQzVGLElBQUksQ0FBQyxJQUFJLENBQUMsMERBQTBELENBQUMsQ0FBQztZQUN0RSxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ2hCLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDaEIsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ1osSUFBSSxDQUFDLElBQUksQ0FBQyx1RUFBdUUsQ0FBQyxDQUFDO1lBQ25GLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNaLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDdEIsSUFBSSxDQUFDLElBQUksQ0FBQyxtQ0FBbUMsQ0FBQyxDQUFDO1lBQy9DLElBQUksQ0FBQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsQ0FBQztZQUNsQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ2pCLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUNwQixDQUFDO0lBQ0gsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDO0FBMUtELHNEQTBLQztBQUVELFNBQVMsZ0JBQWdCLENBQUMsTUFBbUI7SUFDM0MsT0FBTyxNQUFNLEVBQUUsUUFBUSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztBQUMxRixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29kZU1ha2VyLCB0b1Bhc2NhbENhc2UgfSBmcm9tICdjb2RlbWFrZXInO1xuLy8gd2UganVzdCBuZWVkIHRoZSB0eXBlcyBmcm9tIGpzb24tc2NoZW1hXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLWV4dHJhbmVvdXMtZGVwZW5kZW5jaWVzXG5pbXBvcnQgeyBKU09OU2NoZW1hNCB9IGZyb20gJ2pzb24tc2NoZW1hJztcbmltcG9ydCB7IFR5cGVHZW5lcmF0b3IgfSBmcm9tICdqc29uMmpzaWknO1xuXG5jb25zdCBNQU5JRkVTVF9TVEFUSUNfTUVUSE9EID0gJ21hbmlmZXN0JztcbmNvbnN0IEdWS19TVEFUSUMgPSAnR1ZLJztcblxuZXhwb3J0IGludGVyZmFjZSBBcGlPYmplY3REZWZpbml0aW9uIHtcbiAgcmVhZG9ubHkgZnFuOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGdyb3VwOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHZlcnNpb246IHN0cmluZztcbiAgcmVhZG9ubHkga2luZDogc3RyaW5nO1xuICByZWFkb25seSBzY2hlbWE6IEpTT05TY2hlbWE0O1xuXG4gIC8qKlxuICAgKiBJcyB0aGlzIGlzIGEgY3VzdG9tIHJlc291cmNlIChpbXBvcnRlZCBmcm9tIGEgQ1JEKSBvciBhIGNvcmUgQVBJIG9iamVjdD9cbiAgICovXG4gIHJlYWRvbmx5IGN1c3RvbTogYm9vbGVhbjtcblxuICAvKlxuICAgKiBJbmRpY2F0ZXMgaWYgYSBwcmVmaXggc2hvdWxkIGJlIGFkZGVkIHRvIHRoZSBjb25zdHJ1Y3QgY2xhc3MgbmFtZS4gRm9yXG4gICAqIGV4YW1wbGUsIGZvciBuYXRpdmUgazhzIGFwaSBvYmplY3RzLCB3ZSBhZGQgYEt1YmVgIGJ5IGRlZmF1bHQuXG4gICAqXG4gICAqIEBkZWZhdWx0IFwiXCJcbiAgICovXG4gIHJlYWRvbmx5IHByZWZpeD86IHN0cmluZztcblxuICAvKlxuICAgKiBJbmRpY2F0ZXMgaWYgYSBzdWZmaXggc2hvdWxkIGJlIGFkZGVkIHRvIHRoZSBjb25zdHJ1Y3QgY2xhc3MgbmFtZS4gRm9yXG4gICAqIGV4YW1wbGUsIGZvciBtdWx0aS12ZXJzaW9uZWQgY3Jkcywgd2UgYWRkIHRoZSB2ZXJzaW9uIGFzIHRoZSBzdWZmaXguXG4gICAqXG4gICAqIEBkZWZhdWx0IFwiXCJcbiAgICovXG4gIHJlYWRvbmx5IHN1ZmZpeD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBFbWl0cyB0aGUgaGVhZGVyIGZvciBhIGdlbmVyYXRlZCBpbXBvcnRzIGZpbGUuXG4gKlxuICogQHBhcmFtIGN1c3RvbSAtIHdoZXRoZXIgdGhlIGhlYWRlciBpcyBiZWluZyBlbWl0dGVkIGZvciBhIGN1c3RvbSByZXNvdXJjZVxuICogKGltcG9ydGVkIGZyb20gYSBDUkQpIG9yIGEgY29yZSBBUEkgb2JqZWN0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlbWl0SGVhZGVyKGNvZGU6IENvZGVNYWtlciwgY3VzdG9tOiBib29sZWFuKSB7XG4gIGNvZGUubGluZSgnLy8gZ2VuZXJhdGVkIGJ5IGNkazhzJyk7XG4gIGlmIChjdXN0b20pIHtcbiAgICBjb2RlLmxpbmUoJ2ltcG9ydCB7IEFwaU9iamVjdCwgQXBpT2JqZWN0TWV0YWRhdGEsIEdyb3VwVmVyc2lvbktpbmQgfSBmcm9tIFxcJ2NkazhzXFwnOycpO1xuICB9IGVsc2Uge1xuICAgIGNvZGUubGluZSgnaW1wb3J0IHsgQXBpT2JqZWN0LCBHcm91cFZlcnNpb25LaW5kIH0gZnJvbSBcXCdjZGs4c1xcJzsnKTtcbiAgfVxuICBjb2RlLmxpbmUoJ2ltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXFwnY29uc3RydWN0c1xcJzsnKTtcbiAgY29kZS5saW5lKCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRUeXBlTmFtZShjdXN0b206IGJvb2xlYW4sIGtpbmQ6IHN0cmluZywgdmVyc2lvbjogc3RyaW5nKSB7XG4gIC8vIGFkZCBhbiBBUEkgdmVyc2lvbiBwb3N0Zml4IG9ubHkgaWYgdGhpcyBpcyBjb3JlIEFQSSAoYGltcG9ydCBrOHNgKS5cbiAgLy8gVE9ETyA9IHdoYXQgYWJvdXQgdGhlIHJlc3Qgb2YgdGhlIG5hbWVzcGFjZT8gdGhlIHNhbWUgcmVzb3VyY2UgY2FuIGV4aXN0IGluIG11bHRpcGxlXG4gIC8vIGFwaSBncm91cHMgKEluZ3Jlc3MgZm9yIGV4YW1wbGUgZXhpc3RzIGluICdleHRlbnNpb25zJyBhbmQgJ25ldHdvcmtpbmcnKVxuICBjb25zdCBwb3N0Zml4ID0gKGN1c3RvbSB8fCB2ZXJzaW9uID09PSAndjEnKSA/ICcnIDogdG9QYXNjYWxDYXNlKHZlcnNpb24pO1xuICByZXR1cm4gYCR7a2luZH0ke3Bvc3RmaXh9YDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldENvbnN0cnVjdFR5cGVOYW1lKGRlZjogQXBpT2JqZWN0RGVmaW5pdGlvbikge1xuICBjb25zdCBwcmVmaXggPSBkZWYucHJlZml4ID8/ICcnO1xuICBjb25zdCBzdWZmaXggPSBkZWYuc3VmZml4ID8/ICcnO1xuICByZXR1cm4gVHlwZUdlbmVyYXRvci5ub3JtYWxpemVUeXBlTmFtZShgJHtwcmVmaXh9JHtnZXRUeXBlTmFtZShkZWYuY3VzdG9tLCBkZWYua2luZCwgZGVmLnZlcnNpb24pfSR7c3VmZml4fWApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UHJvcHNUeXBlTmFtZShkZWY6IEFwaU9iamVjdERlZmluaXRpb24pIHtcbiAgY29uc3QgY29uc3RydWN0TmFtZSA9IGdldENvbnN0cnVjdFR5cGVOYW1lKGRlZik7XG4gIHJldHVybiBUeXBlR2VuZXJhdG9yLm5vcm1hbGl6ZVR5cGVOYW1lKGAke2NvbnN0cnVjdE5hbWV9UHJvcHNgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdlbmVyYXRlQ29uc3RydWN0KHR5cGVnZW46IFR5cGVHZW5lcmF0b3IsIGRlZjogQXBpT2JqZWN0RGVmaW5pdGlvbikge1xuICBjb25zdCBjb25zdHJ1Y3ROYW1lID0gZ2V0Q29uc3RydWN0VHlwZU5hbWUoZGVmKTtcblxuICBpZiAoZGVmLmN1c3RvbSkge1xuICAgIHR5cGVnZW4uZW1pdEN1c3RvbVR5cGUoJ0FwaU9iamVjdE1ldGFkYXRhJywgKCkgPT4ge30pO1xuICB9XG5cbiAgdHlwZWdlbi5lbWl0Q3VzdG9tVHlwZShjb25zdHJ1Y3ROYW1lLCBjb2RlID0+IHtcbiAgICBjb25zdCBzY2hlbWEgPSBkZWYuc2NoZW1hO1xuXG4gICAgLy8gYHByb3BzVHlwZU5hbWVgIGNvdWxkIGFsc28gYmUgXCJhbnlcIiBpZiB3ZSBjYW4ndCBwYXJzZSB0aGUgc2NoZW1hIGZvciBzb21lIHJlYXNvblxuICAgIGNvbnN0IHByb3BzVHlwZU5hbWUgPSBlbWl0UHJvcHNTdHJ1Y3QoKTtcbiAgICBjb25zdCBncm91cFByZWZpeCA9IGRlZi5ncm91cCA/IGAke2RlZi5ncm91cH0vYCA6ICcnO1xuICAgIGNvbnN0IGhhc1JlcXVpcmVkID0gaGFzUmVxdWlyZWRQcm9wcyhzY2hlbWEpO1xuICAgIGNvbnN0IGRlZmF1bHRQcm9wcyA9IGhhc1JlcXVpcmVkID8gJycgOiAnID0ge30nO1xuICAgIGVtaXRDb25zdHJ1Y3QoKTtcblxuICAgIGZ1bmN0aW9uIGVtaXRQcm9wc1N0cnVjdCgpIHtcbiAgICAgIGNvbnN0IHByb3BzU2NoZW1hID0gY3JlYXRlUHJvcHNTdHJ1Y3RTY2hlbWEoKTtcbiAgICAgIGNvbnN0IHByb3BzU3RydWN0TmFtZSA9IGdldFByb3BzVHlwZU5hbWUoZGVmKTtcbiAgICAgIHJldHVybiB0eXBlZ2VuLmVtaXRUeXBlKHByb3BzU3RydWN0TmFtZSwgcHJvcHNTY2hlbWEsIGRlZi5mcW4pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNyZWF0ZVByb3BzU3RydWN0U2NoZW1hKCkge1xuICAgICAgY29uc3QgY29weTogSlNPTlNjaGVtYTQgPSB7IC4uLmRlZi5zY2hlbWEgfHwge30gfTtcbiAgICAgIGNvbnN0IHByb3BzID0gY29weS5wcm9wZXJ0aWVzID0gY29weS5wcm9wZXJ0aWVzIHx8IHt9O1xuICAgICAgZGVsZXRlIHByb3BzLmFwaVZlcnNpb247XG4gICAgICBkZWxldGUgcHJvcHMua2luZDtcbiAgICAgIGRlbGV0ZSBwcm9wcy5zdGF0dXM7XG4gICAgICBkZWxldGUgY29weVsneC1rdWJlcm5ldGVzLWdyb3VwLXZlcnNpb24ta2luZCddO1xuXG4gICAgICBjb3B5LnJlcXVpcmVkID0gY29weS5yZXF1aXJlZCB8fCBbXTtcblxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoY29weS5yZXF1aXJlZCkpIHtcbiAgICAgICAgY29weS5yZXF1aXJlZCA9IGNvcHkucmVxdWlyZWQuZmlsdGVyKHggPT4geCAhPT0gJ2FwaVZlcnNpb24nICYmIHggIT09ICdraW5kJyAmJiB4ICE9PSAnc3RhdHVzJyk7XG4gICAgICB9XG5cbiAgICAgIGlmIChkZWYuY3VzdG9tKSB7XG4gICAgICAgIC8vIGFkZCBcIm1ldGFkYXRhXCIgZmllbGQgZm9yIGFsbCBDUkRzLCBvdmVycmlkaW5nIGFueSBleGlzdGluZyB0eXBpbmdzXG4gICAgICAgIGNvcHkucHJvcGVydGllcy5tZXRhZGF0YSA9IHsgJHJlZjogJyMvZGVmaW5pdGlvbnMvQXBpT2JqZWN0TWV0YWRhdGEnIH07XG4gICAgICB9XG5cbiAgICAgIC8vIHJlb3JkZXIgdG9wLWxldmVsIGtleXMgc28gdGhhdCB3ZSBoYXZlIFwibWV0YWRhdGFcIiBmaXJzdCBhbmQgdGhlbiBhbGwgdGhlIHJlc3RcbiAgICAgIC8vIFRoaXMgbWF0Y2hlcyB0aGUgYmVoYXZpb3IgaW4gdGhlIEFwaU9iamVjdCdzIHRvSnNvbiBmdW5jdGlvbiAoaHR0cHM6Ly9naXRodWIuY29tL2NkazhzLXRlYW0vY2RrOHMtY29yZS9ibG9iLzU4ZmI4YzA4ODJkZGQ5NWE5YjlkZWRiNDEwN2UxMmY2MDE0NDNjZjQvc3JjL2FwaS1vYmplY3QudHMjTDE4NSlcbiAgICAgIGNvbnN0IHJlc3VsdDogYW55ID0ge307XG4gICAgICBmb3IgKGNvbnN0IGsgb2YgWydtZXRhZGF0YScsIC4uLk9iamVjdC5rZXlzKGNvcHkucHJvcGVydGllcyldKSB7XG4gICAgICAgIGlmIChrIGluIGNvcHkucHJvcGVydGllcykge1xuICAgICAgICAgIHJlc3VsdFtrXSA9IGNvcHkucHJvcGVydGllc1trXTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjb3B5LnByb3BlcnRpZXMgPSByZXN1bHQ7XG4gICAgICByZXR1cm4gY29weTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBlbWl0Q29uc3RydWN0KCkge1xuICAgICAgY29kZS5saW5lKCcvKionKTtcbiAgICAgIGNvZGUubGluZShgICogJHtkZWYuc2NoZW1hPy5kZXNjcmlwdGlvbiA/PyAnJ31gKTtcbiAgICAgIGNvZGUubGluZSgnIConKTtcbiAgICAgIGNvZGUubGluZShgICogQHNjaGVtYSAke2RlZi5mcW59YCk7XG4gICAgICBjb2RlLmxpbmUoJyAqLycpO1xuICAgICAgY29kZS5vcGVuQmxvY2soYGV4cG9ydCBjbGFzcyAke2NvbnN0cnVjdE5hbWV9IGV4dGVuZHMgQXBpT2JqZWN0YCk7XG5cbiAgICAgIGVtaXRHVksoKTtcblxuICAgICAgY29kZS5saW5lKCcnKTtcblxuICAgICAgZW1pdE1hbmlmZXN0RmFjdG9yeSgpO1xuXG4gICAgICBjb2RlLmxpbmUoJycpO1xuXG4gICAgICBlbWl0SW5pdGlhbGl6ZXIoKTtcblxuICAgICAgY29kZS5saW5lKCcnKTtcblxuICAgICAgZW1pdFRvSnNvbigpO1xuXG4gICAgICBjb2RlLmNsb3NlQmxvY2soKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBlbWl0R1ZLKCkge1xuICAgICAgY29kZS5saW5lKCcvKionKTtcbiAgICAgIGNvZGUubGluZShgICogUmV0dXJucyB0aGUgYXBpVmVyc2lvbiBhbmQga2luZCBmb3IgXCIke2RlZi5mcW59XCJgKTtcbiAgICAgIGNvZGUubGluZSgnICovJyk7XG4gICAgICBjb2RlLm9wZW5CbG9jayhgcHVibGljIHN0YXRpYyByZWFkb25seSAke0dWS19TVEFUSUN9OiBHcm91cFZlcnNpb25LaW5kID1gKTtcbiAgICAgIGNvZGUubGluZShgYXBpVmVyc2lvbjogJyR7Z3JvdXBQcmVmaXh9JHtkZWYudmVyc2lvbn0nLGApO1xuICAgICAgY29kZS5saW5lKGBraW5kOiAnJHtkZWYua2luZH0nLGApO1xuICAgICAgY29kZS5jbG9zZUJsb2NrKCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZW1pdEluaXRpYWxpemVyKCkge1xuXG4gICAgICBjb2RlLmxpbmUoJy8qKicpO1xuICAgICAgY29kZS5saW5lKGAgKiBEZWZpbmVzIGEgXCIke2RlZi5mcW59XCIgQVBJIG9iamVjdGApO1xuICAgICAgY29kZS5saW5lKCcgKiBAcGFyYW0gc2NvcGUgdGhlIHNjb3BlIGluIHdoaWNoIHRvIGRlZmluZSB0aGlzIG9iamVjdCcpO1xuICAgICAgY29kZS5saW5lKCcgKiBAcGFyYW0gaWQgYSBzY29wZS1sb2NhbCBuYW1lIGZvciB0aGUgb2JqZWN0Jyk7XG4gICAgICBjb2RlLmxpbmUoJyAqIEBwYXJhbSBwcm9wcyBpbml0aWFsaXphdGlvbiBwcm9wcycpO1xuICAgICAgY29kZS5saW5lKCcgKi8nKTtcblxuICAgICAgY29kZS5vcGVuQmxvY2soYHB1YmxpYyBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogJHtwcm9wc1R5cGVOYW1lfSR7ZGVmYXVsdFByb3BzfSlgKTtcblxuICAgICAgY29kZS5vcGVuKCdzdXBlcihzY29wZSwgaWQsIHsnKTtcbiAgICAgIGNvZGUubGluZShgLi4uJHtjb25zdHJ1Y3ROYW1lfS4ke0dWS19TVEFUSUN9LGApO1xuICAgICAgY29kZS5saW5lKCcuLi5wcm9wcywnKTtcbiAgICAgIGNvZGUuY2xvc2UoJ30pOycpO1xuXG4gICAgICBjb2RlLmNsb3NlQmxvY2soKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBlbWl0TWFuaWZlc3RGYWN0b3J5KCkge1xuICAgICAgY29kZS5saW5lKCcvKionKTtcbiAgICAgIGNvZGUubGluZShgICogUmVuZGVycyBhIEt1YmVybmV0ZXMgbWFuaWZlc3QgZm9yIFwiJHtkZWYuZnFufVwiLmApO1xuICAgICAgY29kZS5saW5lKCcgKicpO1xuICAgICAgY29kZS5saW5lKCcgKiBUaGlzIGNhbiBiZSB1c2VkIHRvIGlubGluZSByZXNvdXJjZSBtYW5pZmVzdHMgaW5zaWRlIG90aGVyIG9iamVjdHMgKGUuZy4gYXMgdGVtcGxhdGVzKS4nKTtcbiAgICAgIGNvZGUubGluZSgnIConKTtcbiAgICAgIGNvZGUubGluZSgnICogQHBhcmFtIHByb3BzIGluaXRpYWxpemF0aW9uIHByb3BzJyk7XG4gICAgICBjb2RlLmxpbmUoJyAqLycpO1xuXG4gICAgICBjb2RlLm9wZW5CbG9jayhgcHVibGljIHN0YXRpYyAke01BTklGRVNUX1NUQVRJQ19NRVRIT0R9KHByb3BzOiAke3Byb3BzVHlwZU5hbWV9JHtkZWZhdWx0UHJvcHN9KTogYW55YCk7XG4gICAgICBjb2RlLm9wZW4oJ3JldHVybiB7Jyk7XG4gICAgICBjb2RlLmxpbmUoYC4uLiR7Y29uc3RydWN0TmFtZX0uJHtHVktfU1RBVElDfSxgKTtcbiAgICAgIGNvZGUubGluZShgLi4udG9Kc29uXyR7cHJvcHNUeXBlTmFtZX0ocHJvcHMpLGApO1xuICAgICAgY29kZS5jbG9zZSgnfTsnKTtcbiAgICAgIGNvZGUuY2xvc2VCbG9jaygpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGVtaXRUb0pzb24oKSB7XG4gICAgICBjb2RlLmxpbmUoJy8qKicpO1xuICAgICAgY29kZS5saW5lKCcgKiBSZW5kZXJzIHRoZSBvYmplY3QgdG8gS3ViZXJuZXRlcyBKU09OLicpO1xuICAgICAgY29kZS5saW5lKCcgKi8nKTtcbiAgICAgIGNvZGUub3BlbkJsb2NrKCdwdWJsaWMgb3ZlcnJpZGUgdG9Kc29uKCk6IGFueScpO1xuICAgICAgY29kZS5saW5lKCdjb25zdCByZXNvbHZlZCA9IHN1cGVyLnRvSnNvbigpOycpO1xuICAgICAgY29kZS5saW5lKCk7XG4gICAgICBjb2RlLm9wZW4oJ3JldHVybiB7Jyk7XG4gICAgICBjb2RlLmxpbmUoYC4uLiR7Y29uc3RydWN0TmFtZX0uJHtHVktfU1RBVElDfSxgKTtcbiAgICAgIGNvZGUubGluZShgLi4udG9Kc29uXyR7cHJvcHNUeXBlTmFtZX0ocmVzb2x2ZWQpLGApO1xuICAgICAgY29kZS5jbG9zZSgnfTsnKTtcbiAgICAgIGNvZGUuY2xvc2VCbG9jaygpO1xuICAgIH1cbiAgfSk7XG59XG5cbi8qKlxuICogRW1pdCBpbXBvcnRzIGZvciBnZW5lcmF0ZWQgaGVsbSBjb25zdHJ1Y3RcbiAqIEBwYXJhbSBjb2RlIENvZGVNYWtlciBpc3RhbmNlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlbWl0SGVsbUhlYWRlcihjb2RlOiBDb2RlTWFrZXIpIHtcbiAgY29kZS5saW5lKCcvLyBnZW5lcmF0ZWQgYnkgY2RrOHMnKTtcbiAgY29kZS5saW5lKCdpbXBvcnQgeyBIZWxtLCBIZWxtUHJvcHMgfSBmcm9tIFxcJ2NkazhzXFwnOycpO1xuICBjb2RlLmxpbmUoJ2ltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXFwnY29uc3RydWN0c1xcJzsnKTtcbiAgY29kZS5saW5lKCk7XG59XG5cbi8qKlxuICogSGVsbSBPYmplY3QgRGVmaW5pdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIEhlbG1PYmplY3REZWZpbml0aW9uIHtcbiAgLyoqXG4gICAqIGB2YWx1ZXMuc2NoZW1hLmpzb25gIGZvciB0aGUgaGVsbSBjaGFydFxuICAgKi9cbiAgcmVhZG9ubHkgc2NoZW1hOiBKU09OU2NoZW1hNCB8IHVuZGVmaW5lZDtcbiAgLyoqXG4gICAqIENoYXJ0IG5hbWVcbiAgICovXG4gIHJlYWRvbmx5IGNoYXJ0TmFtZTogc3RyaW5nO1xuICAvKipcbiAgICogQ2hhcnQgdXJsXG4gICAqL1xuICByZWFkb25seSBjaGFydFVybDogc3RyaW5nO1xuICAvKipcbiAgICogQ2hhcnQgdmVyc2lvblxuICAgKi9cbiAgcmVhZG9ubHkgY2hhcnRWZXJzaW9uOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBDaGFydCBkZXBlbmRlbmNpZXNcbiAgICovXG4gIHJlYWRvbmx5IGNoYXJ0RGVwZW5kZW5jaWVzOiBzdHJpbmdbXTtcbiAgLyoqXG4gICAqIEZ1bGx5IHF1YWxpZmllZCBuYW1lIGZvciB0aGUgY29uc3RydWN0XG4gICAqL1xuICByZWFkb25seSBmcW4/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0ZUhlbG1Db25zdHJ1Y3QodHlwZWdlbjogVHlwZUdlbmVyYXRvciwgZGVmOiBIZWxtT2JqZWN0RGVmaW5pdGlvbikge1xuICBjb25zdCBub1NwZWNpYWxDaGFycyA9IGRlZi5jaGFydE5hbWUucmVwbGFjZSgvKFteXFx3IF18XykvZywgJycpO1xuICBjb25zdCBjaGFydE5hbWUgPSBUeXBlR2VuZXJhdG9yLm5vcm1hbGl6ZVR5cGVOYW1lKG5vU3BlY2lhbENoYXJzKTtcbiAgY29uc3Qgc2NoZW1hID0gZGVmLnNjaGVtYTtcbiAgY29uc3QgcmVwb1VybCA9IGRlZi5jaGFydFVybDtcbiAgY29uc3QgY2hhcnRWZXJzaW9uID0gZGVmLmNoYXJ0VmVyc2lvbjtcblxuICAvLyBDcmVhdGUgY3VzdG9tIHR5cGVcbiAgdHlwZWdlbi5lbWl0Q3VzdG9tVHlwZShjaGFydE5hbWUsIGNvZGUgPT4ge1xuXG4gICAgbGV0IHZhbHVlc0ludGVyZmFjZSA9IGAke2NoYXJ0TmFtZX1WYWx1ZXNgO1xuICAgIGlmIChzY2hlbWEgIT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gQ3JlYXRpbmcgdmFsdWVzIGludGVyZmFjZVxuICAgICAgdmFsdWVzSW50ZXJmYWNlID0gZW1pdFZhbHVlc0ludGVyZmFjZSgpO1xuXG4gICAgICBmdW5jdGlvbiBlbWl0VmFsdWVzSW50ZXJmYWNlKCkge1xuXG4gICAgICAgIGNvbnN0IGNvcHlPZlNjaGVtYSA9IHNjaGVtYSA/IGFkZEFkZGl0aW9uYWxWYWx1ZXNUb1Byb3BzKHNjaGVtYSkgOiB1bmRlZmluZWQ7XG5cbiAgICAgICAgaWYgKGNvcHlPZlNjaGVtYSAmJiBjb3B5T2ZTY2hlbWEucHJvcGVydGllcykge1xuICAgICAgICAgIC8vIFN1YiBjaGFydHMgb3IgZGVwZW5kZW5jaWVzXG4gICAgICAgICAgZm9yIChjb25zdCBkZXBlbmRlbmN5IG9mIGRlZi5jaGFydERlcGVuZGVuY2llcykge1xuICAgICAgICAgICAgY29weU9mU2NoZW1hLnByb3BlcnRpZXNbZGVwZW5kZW5jeV0gPSB7IHR5cGU6ICdvYmplY3QnLCBhZGRpdGlvbmFsUHJvcGVydGllczogeyB0eXBlOiAnb2JqZWN0JyB9IH07XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29weU9mU2NoZW1hLnByb3BlcnRpZXMuZ2xvYmFsID0geyB0eXBlOiAnb2JqZWN0JywgYWRkaXRpb25hbFByb3BlcnRpZXM6IHsgdHlwZTogJ29iamVjdCcgfSB9O1xuICAgICAgICAgIGNvcHlPZlNjaGVtYS5wcm9wZXJ0aWVzLmFkZGl0aW9uYWxWYWx1ZXMgPSB7XG4gICAgICAgICAgICB0eXBlOiAnb2JqZWN0JyxcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnVmFsdWVzIHRoYXQgYXJlIG5vdCBhdmFpbGFibGUgaW4gdmFsdWVzLnNjaGVtYS5qc29uIHdpbGwgbm90IGJlIGNvZGUgZ2VuZXJhdGVkLiBZb3UgY2FuIGFkZCBzdWNoIHZhbHVlcyB0byB0aGlzIHByb3BlcnR5LicsXG4gICAgICAgICAgICBhZGRpdGlvbmFsUHJvcGVydGllczogeyB0eXBlOiAnb2JqZWN0JyB9LFxuICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdHlwZWdlbi5lbWl0VHlwZSh2YWx1ZXNJbnRlcmZhY2UsIGNvcHlPZlNjaGVtYSwgZGVmLmZxbik7XG4gICAgICB9XG5cbiAgICAgIGZ1bmN0aW9uIGFkZEFkZGl0aW9uYWxWYWx1ZXNUb1Byb3BzKHNjaG1hOiBKU09OU2NoZW1hNCk6IEpTT05TY2hlbWE0IHtcbiAgICAgICAgY29uc3QgdGVtcFNjaGVtYSA9IHNjaG1hO1xuXG4gICAgICAgIGlmICghdGVtcFNjaGVtYS5wcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgcmV0dXJuIHRlbXBTY2hlbWE7XG4gICAgICAgIH1cblxuICAgICAgICBPYmplY3QudmFsdWVzKHRlbXBTY2hlbWEucHJvcGVydGllcykuZm9yRWFjaCgocHJvcCkgPT4ge1xuICAgICAgICAgIGlmIChwcm9wLnR5cGUgIT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHByb3AucHJvcGVydGllcykge1xuICAgICAgICAgICAgcHJvcC5wcm9wZXJ0aWVzLmFkZGl0aW9uYWxWYWx1ZXMgPSB7XG4gICAgICAgICAgICAgIHR5cGU6ICdvYmplY3QnLFxuICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ1ZhbHVlcyB0aGF0IGFyZSBub3QgYXZhaWxhYmxlIGluIHZhbHVlcy5zY2hlbWEuanNvbiB3aWxsIG5vdCBiZSBjb2RlIGdlbmVyYXRlZC4gWW91IGNhbiBhZGQgc3VjaCB2YWx1ZXMgdG8gdGhpcyBwcm9wZXJ0eS4nLFxuICAgICAgICAgICAgICBhZGRpdGlvbmFsUHJvcGVydGllczogeyB0eXBlOiAnb2JqZWN0JyB9LFxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgYWRkQWRkaXRpb25hbFZhbHVlc1RvUHJvcHMocHJvcCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gdGVtcFNjaGVtYTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBDcmVhdGluZyBjb25zdHJ1Y3QgcHJvcGVydGllc1xuICAgIGVtaXRQcm9wc0ludGVyZmFjZSgpO1xuXG4gICAgY29kZS5saW5lKCk7XG5cbiAgICAvLyBDcmVhdGluZyBjb25zdHJ1Y3QgZm9yIGhlbG0gY2hhcnRcbiAgICBlbWl0Q29uc3RydWN0KCk7XG5cbiAgICBmdW5jdGlvbiBlbWl0UHJvcHNJbnRlcmZhY2UoKSB7XG4gICAgICBjb2RlLm9wZW5CbG9jayhgZXhwb3J0IGludGVyZmFjZSAke2NoYXJ0TmFtZX1Qcm9wc2ApO1xuXG4gICAgICBjb2RlLmxpbmUoJ3JlYWRvbmx5IG5hbWVzcGFjZT86IHN0cmluZzsnKTtcbiAgICAgIGNvZGUubGluZSgncmVhZG9ubHkgcmVsZWFzZU5hbWU/OiBzdHJpbmc7Jyk7XG4gICAgICBjb2RlLmxpbmUoJ3JlYWRvbmx5IGhlbG1FeGVjdXRhYmxlPzogc3RyaW5nOycpO1xuICAgICAgY29kZS5saW5lKCdyZWFkb25seSBoZWxtRmxhZ3M/OiBzdHJpbmdbXTsnKTtcblxuICAgICAgaWYgKHNjaGVtYSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvZGUubGluZSgncmVhZG9ubHkgdmFsdWVzPzogeyBba2V5OiBzdHJpbmddOiBhbnkgfTsnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGRvVmFsdWVzSGF2ZVJlcVByb3BzID0gaGFzUmVxdWlyZWRQcm9wcyhzY2hlbWEpID8gJycgOiAnPyc7XG4gICAgICAgIGNvZGUubGluZShgcmVhZG9ubHkgdmFsdWVzJHtkb1ZhbHVlc0hhdmVSZXFQcm9wc306ICR7dmFsdWVzSW50ZXJmYWNlfTtgKTtcbiAgICAgIH1cblxuICAgICAgY29kZS5jbG9zZUJsb2NrKCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZW1pdENvbnN0cnVjdCgpIHtcbiAgICAgIGNvZGUub3BlbkJsb2NrKGBleHBvcnQgY2xhc3MgJHtjaGFydE5hbWV9IGV4dGVuZHMgQ29uc3RydWN0YCk7XG5cbiAgICAgIGVtaXRJbml0aWFsaXplcigpO1xuXG4gICAgICBjb2RlLmxpbmUoKTtcblxuICAgICAgZW1pdEFkZGl0aW9uYWxWYWx1ZXNGbGF0dGVuRnVuYygpO1xuXG4gICAgICBjb2RlLmNsb3NlQmxvY2soKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBlbWl0SW5pdGlhbGl6ZXIoKSB7XG4gICAgICBjb25zdCBwcm9wc0RlZmluaXRpb24gPSBzY2hlbWEgJiYgaGFzUmVxdWlyZWRQcm9wcyhzY2hlbWEpID8gYCR7Y2hhcnROYW1lfVByb3BzYCA6IGAke2NoYXJ0TmFtZX1Qcm9wcyA9IHt9YDtcblxuICAgICAgY29kZS5vcGVuQmxvY2soYHB1YmxpYyBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogJHtwcm9wc0RlZmluaXRpb259KWApO1xuICAgICAgY29kZS5saW5lKCdzdXBlcihzY29wZSwgaWQpOycpO1xuXG4gICAgICBjb2RlLmxpbmUoJ2xldCB1cGRhdGVkUHJvcHMgPSB7fTsnKTtcbiAgICAgIGNvZGUubGluZSgpO1xuICAgICAgY29kZS5vcGVuQmxvY2soJ2lmIChwcm9wcy52YWx1ZXMpJyk7XG4gICAgICBpZiAoc2NoZW1hKSB7XG4gICAgICAgIGNvZGUubGluZShgY29uc3QgdmFsdWVzID0gdG9Kc29uXyR7dmFsdWVzSW50ZXJmYWNlfShwcm9wcy52YWx1ZXMpO2ApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29kZS5saW5lKCdjb25zdCB2YWx1ZXMgPSBwcm9wcy52YWx1ZXM7Jyk7XG4gICAgICB9XG4gICAgICBjb2RlLm9wZW5CbG9jaygnaWYgKHZhbHVlcyknKTtcbiAgICAgIGNvZGUubGluZSgnY29uc3QgeyBhZGRpdGlvbmFsVmFsdWVzLCAuLi52YWx1ZXNXaXRob3V0QWRkaXRpb25hbFZhbHVlcyB9ID0gdmFsdWVzOycpO1xuICAgICAgY29kZS5vcGVuKCd1cGRhdGVkUHJvcHMgPSB7Jyk7XG4gICAgICBjb2RlLmxpbmUoJy4uLnByb3BzLCcpO1xuICAgICAgY29kZS5vcGVuKCd2YWx1ZXM6IHsnKTtcbiAgICAgIGNvZGUubGluZSgnLi4udGhpcy5mbGF0dGVuQWRkaXRpb25hbFZhbHVlcyh2YWx1ZXNXaXRob3V0QWRkaXRpb25hbFZhbHVlcyksJyk7XG4gICAgICBjb2RlLmxpbmUoJy4uLmFkZGl0aW9uYWxWYWx1ZXMsJyk7XG4gICAgICBjb2RlLmNsb3NlKCd9LCcpO1xuICAgICAgY29kZS5jbG9zZSgnfTsnKTtcbiAgICAgIGNvZGUuY2xvc2VCbG9jaygpO1xuICAgICAgY29kZS5jbG9zZUJsb2NrKCk7XG4gICAgICBjb2RlLmxpbmUoKTtcblxuICAgICAgY29kZS5vcGVuKCdjb25zdCBmaW5hbFByb3BzOiBIZWxtUHJvcHMgPSB7Jyk7XG4gICAgICBpZiAocmVwb1VybC5zdGFydHNXaXRoKCdodHRwJykpIHtcbiAgICAgICAgY29kZS5saW5lKGBjaGFydDogXFwnJHtkZWYuY2hhcnROYW1lfVxcJyxgKTtcbiAgICAgICAgY29kZS5saW5lKGByZXBvOiBcXCcke3JlcG9Vcmx9XFwnLGApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gT0NJIG9yIGxvY2FsIHBhdGhcbiAgICAgICAgY29kZS5saW5lKGBjaGFydDogXFwnJHtyZXBvVXJsfVxcJyxgKTtcbiAgICAgIH1cbiAgICAgIGNvZGUubGluZShgdmVyc2lvbjogXFwnJHtjaGFydFZlcnNpb259XFwnLGApO1xuICAgICAgY29kZS5saW5lKCcuLi4oT2JqZWN0LmtleXModXBkYXRlZFByb3BzKS5sZW5ndGggIT09IDAgPyB1cGRhdGVkUHJvcHMgOiBwcm9wcyksJyk7XG4gICAgICBjb2RlLmNsb3NlKCd9OycpO1xuXG4gICAgICBjb2RlLmxpbmUoKTtcbiAgICAgIGNvZGUubGluZSgnbmV3IEhlbG0odGhpcywgXFwnSGVsbVxcJywgZmluYWxQcm9wcyk7Jyk7XG4gICAgICBjb2RlLmNsb3NlQmxvY2soKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBlbWl0QWRkaXRpb25hbFZhbHVlc0ZsYXR0ZW5GdW5jKCkge1xuICAgICAgY29kZS5vcGVuQmxvY2soJ3ByaXZhdGUgZmxhdHRlbkFkZGl0aW9uYWxWYWx1ZXMocHJvcHM6IHsgW2tleTogc3RyaW5nXTogYW55IH0pOiB7IFtrZXk6IHN0cmluZ106IGFueSB9Jyk7XG4gICAgICBjb2RlLm9wZW4oJ2ZvciAobGV0IHByb3AgaW4gcHJvcHMpIHsnKTtcbiAgICAgIGNvZGUub3BlbignaWYgKEFycmF5LmlzQXJyYXkocHJvcHNbcHJvcF0pKSB7Jyk7XG4gICAgICBjb2RlLm9wZW4oJ3Byb3BzW3Byb3BdLm1hcCgoaXRlbTogYW55KSA9PiB7Jyk7XG4gICAgICBjb2RlLm9wZW4oJ2lmICh0eXBlb2YgaXRlbSA9PT0gXFwnb2JqZWN0XFwnICYmIHByb3AgIT09IFxcJ2FkZGl0aW9uYWxWYWx1ZXNcXCcpIHsnKTtcbiAgICAgIGNvZGUubGluZSgncmV0dXJuIHRoaXMuZmxhdHRlbkFkZGl0aW9uYWxWYWx1ZXMoaXRlbSk7Jyk7XG4gICAgICBjb2RlLmNsb3NlKCd9Jyk7XG4gICAgICBjb2RlLmxpbmUoJ3JldHVybiBpdGVtOycpO1xuICAgICAgY29kZS5jbG9zZSgnfSk7Jyk7XG4gICAgICBjb2RlLmNsb3NlKCd9Jyk7XG4gICAgICBjb2RlLm9wZW4oJ2Vsc2UgaWYgKHR5cGVvZiBwcm9wc1twcm9wXSA9PT0gXFwnb2JqZWN0XFwnICYmIHByb3AgIT09IFxcJ2FkZGl0aW9uYWxWYWx1ZXNcXCcpIHsnKTtcbiAgICAgIGNvZGUubGluZSgncHJvcHNbcHJvcF0gPSB0aGlzLmZsYXR0ZW5BZGRpdGlvbmFsVmFsdWVzKHByb3BzW3Byb3BdKTsnKTtcbiAgICAgIGNvZGUuY2xvc2UoJ30nKTtcbiAgICAgIGNvZGUuY2xvc2UoJ30nKTtcbiAgICAgIGNvZGUubGluZSgpO1xuICAgICAgY29kZS5saW5lKCdjb25zdCB7IGFkZGl0aW9uYWxWYWx1ZXMsIC4uLnZhbHVlc1dpdGhvdXRBZGRpdGlvbmFsVmFsdWVzIH0gPSBwcm9wczsnKTtcbiAgICAgIGNvZGUubGluZSgpO1xuICAgICAgY29kZS5vcGVuKCdyZXR1cm4geycpO1xuICAgICAgY29kZS5saW5lKCcuLi52YWx1ZXNXaXRob3V0QWRkaXRpb25hbFZhbHVlcywnKTtcbiAgICAgIGNvZGUubGluZSgnLi4uYWRkaXRpb25hbFZhbHVlcywnKTtcbiAgICAgIGNvZGUuY2xvc2UoJ307Jyk7XG4gICAgICBjb2RlLmNsb3NlQmxvY2soKTtcbiAgICB9XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBoYXNSZXF1aXJlZFByb3BzKHNjaGVtYTogSlNPTlNjaGVtYTQpOmJvb2xlYW4gfCB1bmRlZmluZWQge1xuICByZXR1cm4gc2NoZW1hPy5yZXF1aXJlZCAmJiBBcnJheS5pc0FycmF5KHNjaGVtYS5yZXF1aXJlZCkgJiYgc2NoZW1hLnJlcXVpcmVkLmxlbmd0aCA+IDA7XG59Il19
|
package/lib/import/helm.js
CHANGED
|
@@ -48,7 +48,13 @@ class ImportHelm extends base_1.ImportBase {
|
|
|
48
48
|
this.chartName = chartName;
|
|
49
49
|
this.chartUrl = chartUrl;
|
|
50
50
|
this.chartVersion = chartVersion;
|
|
51
|
-
|
|
51
|
+
let tmpDir;
|
|
52
|
+
if (!chartUrl.startsWith('http') && !chartUrl.startsWith('oci://')) {
|
|
53
|
+
tmpDir = copyHelmLocalChart(chartUrl, chartName);
|
|
54
|
+
}
|
|
55
|
+
else {
|
|
56
|
+
tmpDir = pullHelmRepo(chartUrl, chartName, chartVersion);
|
|
57
|
+
}
|
|
52
58
|
const chartYamlFilePath = path.join(tmpDir, this.chartName, CHART_YAML);
|
|
53
59
|
const contents = cdk8s_1.Yaml.load(chartYamlFilePath);
|
|
54
60
|
if (contents.length === 1 && contents[0].dependencies) {
|
|
@@ -107,6 +113,27 @@ function extractHelmChartDetails(url) {
|
|
|
107
113
|
const patch = helmDetails[4];
|
|
108
114
|
chartVersion = `${major}.${minor}.${patch}`;
|
|
109
115
|
}
|
|
116
|
+
else if (url.startsWith('helm:.') || url.startsWith('helm:/')) {
|
|
117
|
+
// URL: helm:./my-charts or helm:/absolute/path/to/my-charts
|
|
118
|
+
const localPath = url.slice(5);
|
|
119
|
+
if (!localPath) {
|
|
120
|
+
throw Error(`Invalid helm URL: ${url}. Must match the format: 'helm:<local-path>'.`);
|
|
121
|
+
}
|
|
122
|
+
if (!fs.existsSync(localPath)) {
|
|
123
|
+
throw Error(`Local chart path does not exist: ${localPath}`);
|
|
124
|
+
}
|
|
125
|
+
const chartYamlPath = path.join(localPath, CHART_YAML);
|
|
126
|
+
if (!fs.existsSync(chartYamlPath)) {
|
|
127
|
+
throw Error(`Chart.yaml not found in local path: ${localPath}`);
|
|
128
|
+
}
|
|
129
|
+
const chartYamlContent = cdk8s_1.Yaml.load(chartYamlPath);
|
|
130
|
+
if (chartYamlContent.length !== 1 || !chartYamlContent[0].name || !chartYamlContent[0].version) {
|
|
131
|
+
throw Error(`Invalid Chart.yaml in local path: ${localPath}. Missing name or version.`);
|
|
132
|
+
}
|
|
133
|
+
chartUrl = localPath;
|
|
134
|
+
chartName = chartYamlContent[0].name;
|
|
135
|
+
chartVersion = chartYamlContent[0].version;
|
|
136
|
+
}
|
|
110
137
|
else {
|
|
111
138
|
// URL: helm:https://lacework.github.io/helm-charts/lacework-agent@6.9.0
|
|
112
139
|
const helmRegex = /^helm:([A-Za-z0-9_.-:\-]+)\/([A-Za-z0-9_.-:\-]+)\@(v?[0-9]+)\.([0-9]+)\.([A-Za-z0-9-+]+)$/;
|
|
@@ -126,6 +153,23 @@ function extractHelmChartDetails(url) {
|
|
|
126
153
|
}
|
|
127
154
|
return [chartUrl, chartName, chartVersion];
|
|
128
155
|
}
|
|
156
|
+
/**
|
|
157
|
+
* Copy local helm chart to a temporary directory to maintain the expected `workdir/chartName` structure
|
|
158
|
+
* @param chartUrl Chart url
|
|
159
|
+
* @param chartName Chart name
|
|
160
|
+
* @returns Temporary directory path
|
|
161
|
+
*/
|
|
162
|
+
function copyHelmLocalChart(chartUrl, chartName) {
|
|
163
|
+
const absolutePath = path.resolve(chartUrl);
|
|
164
|
+
if (!fs.existsSync(absolutePath)) {
|
|
165
|
+
throw new Error(`Local chart path does not exist: ${absolutePath}`);
|
|
166
|
+
}
|
|
167
|
+
const workdir = fs.mkdtempSync(path.join(os.tmpdir(), 'cdk8s-helm-local-'));
|
|
168
|
+
const chartDir = path.join(workdir, chartName);
|
|
169
|
+
fs.mkdirSync(chartDir, { recursive: true });
|
|
170
|
+
fs.cpSync(absolutePath, chartDir, { recursive: true });
|
|
171
|
+
return workdir;
|
|
172
|
+
}
|
|
129
173
|
/**
|
|
130
174
|
* Pulls the helm chart in a temporary directory
|
|
131
175
|
* @param chartUrl Chart url
|
|
@@ -170,4 +214,4 @@ function pullHelmRepo(chartUrl, chartName, chartVersion) {
|
|
|
170
214
|
function cleanup(tmpDir) {
|
|
171
215
|
fs.rmSync(tmpDir, { recursive: true });
|
|
172
216
|
}
|
|
173
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVsbS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9pbXBvcnQvaGVsbS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLGlEQUEwQztBQUMxQyx1Q0FBeUI7QUFDekIsdUNBQXlCO0FBQ3pCLDJDQUE2QjtBQUM3QixpQ0FBNkI7QUFHN0IseUNBQTBDO0FBQzFDLCtDQUFpQztBQUNqQyxpQ0FBb0M7QUFDcEMsdUNBQWtFO0FBR2xFLE1BQU0sZUFBZSxHQUFHLEVBQUUsR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDO0FBQ3pDLE1BQU0sWUFBWSxHQUFHLG9CQUFvQixDQUFDO0FBQzFDLE1BQU0sVUFBVSxHQUFHLFlBQVksQ0FBQztBQUVoQyxNQUFhLFVBQVcsU0FBUSxpQkFBVTtJQUNqQyxNQUFNLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxVQUFzQjtRQUNqRCxNQUFNLEVBQUUsTUFBTSxFQUFFLEdBQUcsVUFBVSxDQUFDO1FBQzlCLE9BQU8sSUFBSSxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQVNELFlBQW9CLE1BQWM7UUFDaEMsS0FBSyxFQUFFLENBQUM7UUFKTyxzQkFBaUIsR0FBYSxFQUFFLENBQUM7UUFNaEQsTUFBTSxDQUFDLFFBQVEsRUFBRSxTQUFTLEVBQUUsWUFBWSxDQUFDLEdBQUcsdUJBQXVCLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFNUUsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7UUFDM0IsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7UUFDekIsSUFBSSxDQUFDLFlBQVksR0FBRyxZQUFZLENBQUM7UUFDakMsTUFBTSxNQUFNLEdBQUcsWUFBWSxDQUFDLFFBQVEsRUFBRSxTQUFTLEVBQUUsWUFBWSxDQUFDLENBQUM7UUFFL0QsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJ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QUFNLEdBQUcsRUFBRSxDQUFDLENBQUM7S0FDN0U7SUFFRCxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1FBQ3JCLE1BQU0sSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO0tBQ3pDO0lBRUQsT0FBTyxPQUFPLENBQUM7QUFDakIsQ0FBQztBQUVEOzs7R0FHRztBQUNILFNBQVMsT0FBTyxDQUFDLE1BQWM7SUFDN0IsRUFBRSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztBQUN6QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgc3Bhd25TeW5jIH0gZnJvbSAnY2hpbGRfcHJvY2Vzcyc7XG5pbXBvcnQgKiBhcyBmcyBmcm9tICdmcyc7XG5pbXBvcnQgKiBhcyBvcyBmcm9tICdvcyc7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgWWFtbCB9IGZyb20gJ2NkazhzJztcbmltcG9ydCB7IENvZGVNYWtlciB9IGZyb20gJ2NvZGVtYWtlcic7XG5pbXBvcnQgdHlwZSB7IEpTT05TY2hlbWE0IH0gZnJvbSAnanNvbi1zY2hlbWEnO1xuaW1wb3J0IHsgVHlwZUdlbmVyYXRvciB9IGZyb20gJ2pzb24yanNpaSc7XG5pbXBvcnQgKiBhcyBzZW12ZXIgZnJvbSAnc2VtdmVyJztcbmltcG9ydCB7IEltcG9ydEJhc2UgfSBmcm9tICcuL2Jhc2UnO1xuaW1wb3J0IHsgZW1pdEhlbG1IZWFkZXIsIGdlbmVyYXRlSGVsbUNvbnN0cnVjdCB9IGZyb20gJy4vY29kZWdlbic7XG5pbXBvcnQgeyBJbXBvcnRTcGVjIH0gZnJvbSAnLi4vY29uZmlnJztcblxuY29uc3QgTUFYX0hFTE1fQlVGRkVSID0gMTAgKiAxMDI0ICogMTAyNDtcbmNvbnN0IENIQVJUX1NDSEVNQSA9ICd2YWx1ZXMuc2NoZW1hLmpzb24nO1xuY29uc3QgQ0hBUlRfWUFNTCA9ICdDaGFydC55YW1sJztcblxuZXhwb3J0IGNsYXNzIEltcG9ydEhlbG0gZXh0ZW5kcyBJbXBvcnRCYXNlIHtcbiAgcHVibGljIHN0YXRpYyBhc3luYyBmcm9tU3BlYyhpbXBvcnRTcGVjOiBJbXBvcnRTcGVjKTogUHJvbWlzZTxJbXBvcnRIZWxtPiB7XG4gICAgY29uc3QgeyBzb3VyY2UgfSA9IGltcG9ydFNwZWM7XG4gICAgcmV0dXJuIG5ldyBJbXBvcnRIZWxtKHNvdXJjZSk7XG4gIH1cblxuICBwcml2YXRlIHJlYWRvbmx5IGNoYXJ0TmFtZTogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IGNoYXJ0VXJsOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgY2hhcnRWZXJzaW9uOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgY2hhcnRTY2hlbWFQYXRoOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgY2hhcnREZXBlbmRlbmNpZXM6IHN0cmluZ1tdID0gW107XG4gIHByaXZhdGUgcmVhZG9ubHkgc2NoZW1hOiBKU09OU2NoZW1hNCB8IHVuZGVmaW5lZDtcblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKHNvdXJjZTogc3RyaW5nKSB7XG4gICAgc3VwZXIoKTtcblxuICAgIGNvbnN0IFtjaGFydFVybCwgY2hhcnROYW1lLCBjaGFydFZlcnNpb25dID0gZXh0cmFjdEhlbG1DaGFydERldGFpbHMoc291cmNlKTtcblxuICAgIHRoaXMuY2hhcnROYW1lID0gY2hhcnROYW1lO1xuICAgIHRoaXMuY2hhcnRVcmwgPSBjaGFydFVybDtcbiAgICB0aGlzLmNoYXJ0VmVyc2lvbiA9IGNoYXJ0VmVyc2lvbjtcbiAgICBjb25zdCB0bXBEaXIgPSBwdWxsSGVsbVJlcG8oY2hhcnRVcmwsIGNoYXJ0TmFtZSwgY2hhcnRWZXJzaW9uKTtcblxuICAgIGNvbnN0IGNoYXJ0WWFtbEZpbGVQYXRoID0gcGF0aC5qb2luKHRtcERpciwgdGhpcy5jaGFydE5hbWUsIENIQVJUX1lBTUwpO1xuICAgIGNvbnN0IGNvbnRlbnRzID0gWWFtbC5sb2FkKGNoYXJ0WWFtbEZpbGVQYXRoKTtcblxuICAgIGlmIChjb250ZW50cy5sZW5ndGggPT09IDEgJiYgY29udGVudHNbMF0uZGVwZW5kZW5jaWVzKSB7XG4gICAgICBmb3IgKGNvbnN0IGRlcGVuZGVuY3kgb2YgY29udGVudHNbMF0uZGVwZW5kZW5jaWVzKSB7XG4gICAgICAgIHRoaXMuY2hhcnREZXBlbmRlbmNpZXMucHVzaChkZXBlbmRlbmN5Lm5hbWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHBvdGVudGlhbFNjaGVtYVBhdGggPSBwYXRoLmpvaW4odG1wRGlyLCB0aGlzLmNoYXJ0TmFtZSwgQ0hBUlRfU0NIRU1BKTtcbiAgICB0aGlzLmNoYXJ0U2NoZW1hUGF0aCA9IGZzLmV4aXN0c1N5bmMocG90ZW50aWFsU2NoZW1hUGF0aCkgPyBwb3RlbnRpYWxTY2hlbWFQYXRoIDogdW5kZWZpbmVkO1xuICAgIHRoaXMuc2NoZW1hID0gdGhpcy5jaGFydFNjaGVtYVBhdGggPyBKU09OLnBhcnNlKGZzLnJlYWRGaWxlU3luYyh0aGlzLmNoYXJ0U2NoZW1hUGF0aCwgJ3V0Zi04JykpIDogdW5kZWZpbmVkO1xuXG4gICAgY2xlYW51cCh0bXBEaXIpO1xuICB9XG5cbiAgcHVibGljIGdldCBtb2R1bGVOYW1lcygpIHtcbiAgICByZXR1cm4gW3RoaXMuY2hhcnROYW1lXTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBnZW5lcmF0ZVR5cGVTY3JpcHQoY29kZTogQ29kZU1ha2VyKSB7XG4gICAgZW1pdEhlbG1IZWFkZXIoY29kZSk7XG5cbiAgICBjb25zdCB0eXBlcyA9IG5ldyBUeXBlR2VuZXJhdG9yKHtcbiAgICAgIGRlZmluaXRpb25zOiB0aGlzLnNjaGVtYT8uZGVmaW5pdGlvbnMgPz8gdGhpcy5zY2hlbWE/LiRkZWZzLFxuICAgICAgdG9Kc29uOiB0cnVlLFxuICAgICAgc2FuaXRpemVFbnVtczogdHJ1ZSxcbiAgICB9KTtcblxuICAgIGdlbmVyYXRlSGVsbUNvbnN0cnVjdCh0eXBlcywge1xuICAgICAgc2NoZW1hOiB0aGlzLnNjaGVtYSxcbiAgICAgIGNoYXJ0TmFtZTogdGhpcy5jaGFydE5hbWUsXG4gICAgICBjaGFydFVybDogdGhpcy5jaGFydFVybCxcbiAgICAgIGNoYXJ0VmVyc2lvbjogdGhpcy5jaGFydFZlcnNpb24sXG4gICAgICBjaGFydERlcGVuZGVuY2llczogdGhpcy5jaGFydERlcGVuZGVuY2llcyxcbiAgICAgIGZxbjogdGhpcy5jaGFydE5hbWUsXG4gICAgfSk7XG5cbiAgICBjb2RlLmxpbmUodHlwZXMucmVuZGVyKCkpO1xuICB9XG59XG5cbi8qKlxuICogR2V0cyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgaGVsbSBjaGFydCBmcm9tIHRoZSBoZWxtIHVybFxuICogQHBhcmFtIHVybFxuICogQHJldHVybnMgY2hhcnRVcmwsIGNoYXJ0TmFtZSBhbmQgY2hhcnRWZXJzaW9uXG4gKi9cbmZ1bmN0aW9uIGV4dHJhY3RIZWxtQ2hhcnREZXRhaWxzKHVybDogc3RyaW5nKSB7XG5cbiAgbGV0IGNoYXJ0VXJsO1xuICBsZXQgY2hhcnROYW1lO1xuICBsZXQgY2hhcnRWZXJzaW9uO1xuXG4gIGlmICh1cmwuc3RhcnRzV2l0aCgnaGVsbTpvY2k6Ly8nKSkge1xuICAgIC8vIFVSTDogaGVsbTpvY2k6Ly9yZWdpc3RyeS0xLmRvY2tlci5pby9iaXRuYW1pY2hhcnRzL3dvcmRwcmVzc0AxNy4xLjE3XG4gICAgY29uc3QgaGVsbVJlZ2V4ID0gL15oZWxtOihvY2k6XFwvXFwvW0EtWmEtejAtOV8uLTpcXC1dKylcXEAodj9bMC05XSspXFwuKFswLTldKylcXC4oW0EtWmEtejAtOS0rXSspJC87XG4gICAgY29uc3QgaGVsbURldGFpbHMgPSBoZWxtUmVnZXguZXhlYyh1cmwpO1xuXG4gICAgaWYgKCFoZWxtRGV0YWlscykge1xuICAgICAgdGhyb3cgRXJyb3IoYEludmFsaWQgaGVsbSBVUkw6ICR7dXJsfS4gTXVzdCBtYXRjaCB0aGUgZm9ybWF0OiAnaGVsbTo8b2NpLXJlZ2lzdHJ5LXVybD5APGNoYXJ0LXZlcnNpb24+Jy5gKTtcbiAgICB9XG5cbiAgICBjaGFydFVybCA9IGhlbG1EZXRhaWxzWzFdO1xuICAgIGNvbnN0IGxhc3RJbmRleE9mU2xhc2ggPSBjaGFydFVybC5sYXN0SW5kZXhPZignLycpO1xuICAgIGNoYXJ0TmFtZSA9IGNoYXJ0VXJsLnN1YnN0cmluZyhsYXN0SW5kZXhPZlNsYXNoICsgMSk7XG5cbiAgICBjb25zdCBtYWpvciA9IGhlbG1EZXRhaWxzWzJdO1xuICAgIGNvbnN0IG1pbm9yID0gaGVsbURldGFpbHNbM107XG4gICAgY29uc3QgcGF0Y2ggPSBoZWxtRGV0YWlsc1s0XTtcbiAgICBjaGFydFZlcnNpb24gPSBgJHttYWpvcn0uJHttaW5vcn0uJHtwYXRjaH1gO1xuXG4gIH0gZWxzZSB7XG4gICAgLy8gVVJMOiBoZWxtOmh0dHBzOi8vbGFjZXdvcmsuZ2l0aHViLmlvL2hlbG0tY2hhcnRzL2xhY2V3b3JrLWFnZW50QDYuOS4wXG4gICAgY29uc3QgaGVsbVJlZ2V4ID0gL15oZWxtOihbQS1aYS16MC05Xy4tOlxcLV0rKVxcLyhbQS1aYS16MC05Xy4tOlxcLV0rKVxcQCh2P1swLTldKylcXC4oWzAtOV0rKVxcLihbQS1aYS16MC05LStdKykkLztcbiAgICBjb25zdCBoZWxtRGV0YWlscyA9IGhlbG1SZWdleC5leGVjKHVybCk7XG5cbiAgICBpZiAoIWhlbG1EZXRhaWxzKSB7XG4gICAgICB0aHJvdyBFcnJvcihgSW52YWxpZCBoZWxtIFVSTDogJHt1cmx9LiBNdXN0IG1hdGNoIHRoZSBmb3JtYXQ6ICdoZWxtOjxyZXBvLXVybD4vPGNoYXJ0LW5hbWU+QDxjaGFydC12ZXJzaW9uPicuYCk7XG4gICAgfVxuXG4gICAgY2hhcnRVcmwgPSBoZWxtRGV0YWlsc1sxXTtcbiAgICBjaGFydE5hbWUgPSBoZWxtRGV0YWlsc1syXTtcblxuICAgIGNvbnN0IG1ham9yID0gaGVsbURldGFpbHNbM107XG4gICAgY29uc3QgbWlub3IgPSBoZWxtRGV0YWlsc1s0XTtcbiAgICBjb25zdCBwYXRjaCA9IGhlbG1EZXRhaWxzWzVdO1xuICAgIGNoYXJ0VmVyc2lvbiA9IGAke21ham9yfS4ke21pbm9yfS4ke3BhdGNofWA7XG4gIH1cblxuICBpZiAoIXNlbXZlci52YWxpZChjaGFydFZlcnNpb24pKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGNoYXJ0IHZlcnNpb24gKCR7Y2hhcnRWZXJzaW9ufSkgaW4gVVJMOiAke3VybH0uIE11c3QgZm9sbG93IFNlbVZlci0yIChzZWUgaHR0cHM6Ly9zZW12ZXIub3JnLykuYCk7XG4gIH1cblxuICByZXR1cm4gW2NoYXJ0VXJsLCBjaGFydE5hbWUsIGNoYXJ0VmVyc2lvbl07XG59XG5cbi8qKlxuICogUHVsbHMgdGhlIGhlbG0gY2hhcnQgaW4gYSB0ZW1wb3JhcnkgZGlyZWN0b3J5XG4gKiBAcGFyYW0gY2hhcnRVcmwgQ2hhcnQgdXJsXG4gKiBAcGFyYW0gY2hhcnROYW1lIENoYXJ0IG5hbWVcbiAqIEBwYXJhbSBjaGFydFZlcnNpb24gQ2hhcnQgdmVyc2lvblxuICogQHJldHVybnMgVGVtcG9yYXJ5IGRpcmVjdG9yeSBwYXRoXG4gKi9cbmZ1bmN0aW9uIHB1bGxIZWxtUmVwbyhjaGFydFVybDogc3RyaW5nLCBjaGFydE5hbWU6IHN0cmluZywgY2hhcnRWZXJzaW9uOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCB3b3JrZGlyID0gZnMubWtkdGVtcFN5bmMocGF0aC5qb2luKG9zLnRtcGRpcigpLCAnY2RrOHMtaGVsbS0nKSk7XG5cbiAgY29uc3QgYXJncyA9IG5ldyBBcnJheTxzdHJpbmc+KCk7XG4gIGFyZ3MucHVzaCgncHVsbCcpO1xuXG4gIGlmICghY2hhcnRVcmwuc3RhcnRzV2l0aCgnb2NpOi8vJykpIHtcbiAgICBhcmdzLnB1c2goY2hhcnROYW1lKTtcbiAgICBhcmdzLnB1c2goJy0tcmVwbycsIGNoYXJ0VXJsKTtcbiAgfSBlbHNlIHtcbiAgICBhcmdzLnB1c2goY2hhcnRVcmwpO1xuICB9XG5cbiAgYXJncy5wdXNoKCctLXZlcnNpb24nLCBjaGFydFZlcnNpb24pO1xuICBhcmdzLnB1c2goJy0tdW50YXInKTtcbiAgYXJncy5wdXNoKCctLXVudGFyZGlyJywgd29ya2Rpcik7XG5cbiAgY29uc3QgY29tbWFuZCA9ICdoZWxtJztcblxuICBjb25zdCBoZWxtID0gc3Bhd25TeW5jKGNvbW1hbmQsIGFyZ3MsIHtcbiAgICBtYXhCdWZmZXI6IE1BWF9IRUxNX0JVRkZFUixcbiAgfSk7XG5cbiAgaWYgKGhlbG0uZXJyb3IpIHtcbiAgICBjb25zdCBlcnIgPSBoZWxtLmVycm9yLm1lc3NhZ2U7XG4gICAgaWYgKGVyci5pbmNsdWRlcygnRU5PRU5UJykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVW5hYmxlIHRvIGV4ZWN1dGUgJyR7Y29tbWFuZH0nIHRvIHB1bGwgdGhlIEhlbG0gY2hhcnQuIElzIGhlbG0gaW5zdGFsbGVkIG9uIHlvdXIgc3lzdGVtP2ApO1xuICAgIH1cblxuICAgIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHB1bGxpbmcgaGVsbSBjaGFydCBmcm9tIFVSTCAoJHtjaGFydFVybH0pOiAke2Vycn1gKTtcbiAgfVxuXG4gIGlmIChoZWxtLnN0YXR1cyAhPT0gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcihoZWxtLnN0ZGVyci50b1N0cmluZygpKTtcbiAgfVxuXG4gIHJldHVybiB3b3JrZGlyO1xufVxuXG4vKipcbiAqIENsZWFudXAgdGVtcCBkaXJlY3RvcnkgY3JlYXRlZFxuICogQHBhcmFtIHRtcERpciBUZW1wb3JhcnkgZGlyZWN0b3J5IHBhdGhcbiAqL1xuZnVuY3Rpb24gY2xlYW51cCh0bXBEaXI6IHN0cmluZykge1xuICBmcy5ybVN5bmModG1wRGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbn0iXX0=
|
|
217
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVsbS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9pbXBvcnQvaGVsbS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLGlEQUEwQztBQUMxQyx1Q0FBeUI7QUFDekIsdUNBQXlCO0FBQ3pCLDJDQUE2QjtBQUM3QixpQ0FBNkI7QUFHN0IseUNBQTBDO0FBQzFDLCtDQUFpQztBQUNqQyxpQ0FBb0M7QUFDcEMsdUNBQWtFO0FBR2xFLE1BQU0sZUFBZSxHQUFHLEVBQUUsR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDO0FBQ3pDLE1BQU0sWUFBWSxHQUFHLG9CQUFvQixDQUFDO0FBQzFDLE1BQU0sVUFBVSxHQUFHLFlBQVksQ0FBQztBQUVoQyxNQUFhLFVBQVcsU0FBUSxpQkFBVTtJQUNqQyxNQUFNLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxVQUFzQjtRQUNqRCxNQUFNLEVBQUUsTUFBTSxFQUFFLEdBQUcsVUFBVSxDQUFDO1FBQzlCLE9BQU8sSUFBSSxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQVNELFlBQW9CLE1BQWM7UUFDaEMsS0FBSyxFQUFFLENBQUM7UUFKTyxzQkFBaUIsR0FBYSxFQUFFLENBQUM7UUFNaEQsTUFBTSxDQUFDLFFBQVEsRUFBRSxTQUFTLEVBQUUsWUFBWSxDQUFDLEdBQUcsdUJBQXVCLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFNUUsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7UUFDM0IsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7UUFDekIsSUFBSSxDQUFDLFlBQVksR0FBRyxZQUFZLENBQUM7UUFFakMsSUFBSSxNQUFjLENBQUM7UUFDbkIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxFQUFFO1lBQ2xFLE1BQU0s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Q0FBQztBQUVEOzs7R0FHRztBQUNILFNBQVMsT0FBTyxDQUFDLE1BQWM7SUFDN0IsRUFBRSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztBQUN6QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgc3Bhd25TeW5jIH0gZnJvbSAnY2hpbGRfcHJvY2Vzcyc7XG5pbXBvcnQgKiBhcyBmcyBmcm9tICdmcyc7XG5pbXBvcnQgKiBhcyBvcyBmcm9tICdvcyc7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgWWFtbCB9IGZyb20gJ2NkazhzJztcbmltcG9ydCB7IENvZGVNYWtlciB9IGZyb20gJ2NvZGVtYWtlcic7XG5pbXBvcnQgdHlwZSB7IEpTT05TY2hlbWE0IH0gZnJvbSAnanNvbi1zY2hlbWEnO1xuaW1wb3J0IHsgVHlwZUdlbmVyYXRvciB9IGZyb20gJ2pzb24yanNpaSc7XG5pbXBvcnQgKiBhcyBzZW12ZXIgZnJvbSAnc2VtdmVyJztcbmltcG9ydCB7IEltcG9ydEJhc2UgfSBmcm9tICcuL2Jhc2UnO1xuaW1wb3J0IHsgZW1pdEhlbG1IZWFkZXIsIGdlbmVyYXRlSGVsbUNvbnN0cnVjdCB9IGZyb20gJy4vY29kZWdlbic7XG5pbXBvcnQgeyBJbXBvcnRTcGVjIH0gZnJvbSAnLi4vY29uZmlnJztcblxuY29uc3QgTUFYX0hFTE1fQlVGRkVSID0gMTAgKiAxMDI0ICogMTAyNDtcbmNvbnN0IENIQVJUX1NDSEVNQSA9ICd2YWx1ZXMuc2NoZW1hLmpzb24nO1xuY29uc3QgQ0hBUlRfWUFNTCA9ICdDaGFydC55YW1sJztcblxuZXhwb3J0IGNsYXNzIEltcG9ydEhlbG0gZXh0ZW5kcyBJbXBvcnRCYXNlIHtcbiAgcHVibGljIHN0YXRpYyBhc3luYyBmcm9tU3BlYyhpbXBvcnRTcGVjOiBJbXBvcnRTcGVjKTogUHJvbWlzZTxJbXBvcnRIZWxtPiB7XG4gICAgY29uc3QgeyBzb3VyY2UgfSA9IGltcG9ydFNwZWM7XG4gICAgcmV0dXJuIG5ldyBJbXBvcnRIZWxtKHNvdXJjZSk7XG4gIH1cblxuICBwcml2YXRlIHJlYWRvbmx5IGNoYXJ0TmFtZTogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IGNoYXJ0VXJsOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgY2hhcnRWZXJzaW9uOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgY2hhcnRTY2hlbWFQYXRoOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgY2hhcnREZXBlbmRlbmNpZXM6IHN0cmluZ1tdID0gW107XG4gIHByaXZhdGUgcmVhZG9ubHkgc2NoZW1hOiBKU09OU2NoZW1hNCB8IHVuZGVmaW5lZDtcblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKHNvdXJjZTogc3RyaW5nKSB7XG4gICAgc3VwZXIoKTtcblxuICAgIGNvbnN0IFtjaGFydFVybCwgY2hhcnROYW1lLCBjaGFydFZlcnNpb25dID0gZXh0cmFjdEhlbG1DaGFydERldGFpbHMoc291cmNlKTtcblxuICAgIHRoaXMuY2hhcnROYW1lID0gY2hhcnROYW1lO1xuICAgIHRoaXMuY2hhcnRVcmwgPSBjaGFydFVybDtcbiAgICB0aGlzLmNoYXJ0VmVyc2lvbiA9IGNoYXJ0VmVyc2lvbjtcblxuICAgIGxldCB0bXBEaXI6IHN0cmluZztcbiAgICBpZiAoIWNoYXJ0VXJsLnN0YXJ0c1dpdGgoJ2h0dHAnKSAmJiAhY2hhcnRVcmwuc3RhcnRzV2l0aCgnb2NpOi8vJykpIHtcbiAgICAgIHRtcERpciA9IGNvcHlIZWxtTG9jYWxDaGFydChjaGFydFVybCwgY2hhcnROYW1lKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdG1wRGlyID0gcHVsbEhlbG1SZXBvKGNoYXJ0VXJsLCBjaGFydE5hbWUsIGNoYXJ0VmVyc2lvbik7XG4gICAgfVxuXG4gICAgY29uc3QgY2hhcnRZYW1sRmlsZVBhdGggPSBwYXRoLmpvaW4odG1wRGlyLCB0aGlzLmNoYXJ0TmFtZSwgQ0hBUlRfWUFNTCk7XG4gICAgY29uc3QgY29udGVudHMgPSBZYW1sLmxvYWQoY2hhcnRZYW1sRmlsZVBhdGgpO1xuICAgIGlmIChjb250ZW50cy5sZW5ndGggPT09IDEgJiYgY29udGVudHNbMF0uZGVwZW5kZW5jaWVzKSB7XG4gICAgICBmb3IgKGNvbnN0IGRlcGVuZGVuY3kgb2YgY29udGVudHNbMF0uZGVwZW5kZW5jaWVzKSB7XG4gICAgICAgIHRoaXMuY2hhcnREZXBlbmRlbmNpZXMucHVzaChkZXBlbmRlbmN5Lm5hbWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHBvdGVudGlhbFNjaGVtYVBhdGggPSBwYXRoLmpvaW4odG1wRGlyLCB0aGlzLmNoYXJ0TmFtZSwgQ0hBUlRfU0NIRU1BKTtcbiAgICB0aGlzLmNoYXJ0U2NoZW1hUGF0aCA9IGZzLmV4aXN0c1N5bmMocG90ZW50aWFsU2NoZW1hUGF0aCkgPyBwb3RlbnRpYWxTY2hlbWFQYXRoIDogdW5kZWZpbmVkO1xuICAgIHRoaXMuc2NoZW1hID0gdGhpcy5jaGFydFNjaGVtYVBhdGggPyBKU09OLnBhcnNlKGZzLnJlYWRGaWxlU3luYyh0aGlzLmNoYXJ0U2NoZW1hUGF0aCwgJ3V0Zi04JykpIDogdW5kZWZpbmVkO1xuXG4gICAgY2xlYW51cCh0bXBEaXIpO1xuICB9XG5cbiAgcHVibGljIGdldCBtb2R1bGVOYW1lcygpIHtcbiAgICByZXR1cm4gW3RoaXMuY2hhcnROYW1lXTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBnZW5lcmF0ZVR5cGVTY3JpcHQoY29kZTogQ29kZU1ha2VyKSB7XG4gICAgZW1pdEhlbG1IZWFkZXIoY29kZSk7XG5cbiAgICBjb25zdCB0eXBlcyA9IG5ldyBUeXBlR2VuZXJhdG9yKHtcbiAgICAgIGRlZmluaXRpb25zOiB0aGlzLnNjaGVtYT8uZGVmaW5pdGlvbnMgPz8gdGhpcy5zY2hlbWE/LiRkZWZzLFxuICAgICAgdG9Kc29uOiB0cnVlLFxuICAgICAgc2FuaXRpemVFbnVtczogdHJ1ZSxcbiAgICB9KTtcblxuICAgIGdlbmVyYXRlSGVsbUNvbnN0cnVjdCh0eXBlcywge1xuICAgICAgc2NoZW1hOiB0aGlzLnNjaGVtYSxcbiAgICAgIGNoYXJ0TmFtZTogdGhpcy5jaGFydE5hbWUsXG4gICAgICBjaGFydFVybDogdGhpcy5jaGFydFVybCxcbiAgICAgIGNoYXJ0VmVyc2lvbjogdGhpcy5jaGFydFZlcnNpb24sXG4gICAgICBjaGFydERlcGVuZGVuY2llczogdGhpcy5jaGFydERlcGVuZGVuY2llcyxcbiAgICAgIGZxbjogdGhpcy5jaGFydE5hbWUsXG4gICAgfSk7XG5cbiAgICBjb2RlLmxpbmUodHlwZXMucmVuZGVyKCkpO1xuICB9XG59XG5cbi8qKlxuICogR2V0cyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgaGVsbSBjaGFydCBmcm9tIHRoZSBoZWxtIHVybFxuICogQHBhcmFtIHVybFxuICogQHJldHVybnMgY2hhcnRVcmwsIGNoYXJ0TmFtZSBhbmQgY2hhcnRWZXJzaW9uXG4gKi9cbmZ1bmN0aW9uIGV4dHJhY3RIZWxtQ2hhcnREZXRhaWxzKHVybDogc3RyaW5nKSB7XG5cbiAgbGV0IGNoYXJ0VXJsO1xuICBsZXQgY2hhcnROYW1lO1xuICBsZXQgY2hhcnRWZXJzaW9uO1xuXG4gIGlmICh1cmwuc3RhcnRzV2l0aCgnaGVsbTpvY2k6Ly8nKSkge1xuICAgIC8vIFVSTDogaGVsbTpvY2k6Ly9yZWdpc3RyeS0xLmRvY2tlci5pby9iaXRuYW1pY2hhcnRzL3dvcmRwcmVzc0AxNy4xLjE3XG4gICAgY29uc3QgaGVsbVJlZ2V4ID0gL15oZWxtOihvY2k6XFwvXFwvW0EtWmEtejAtOV8uLTpcXC1dKylcXEAodj9bMC05XSspXFwuKFswLTldKylcXC4oW0EtWmEtejAtOS0rXSspJC87XG4gICAgY29uc3QgaGVsbURldGFpbHMgPSBoZWxtUmVnZXguZXhlYyh1cmwpO1xuXG4gICAgaWYgKCFoZWxtRGV0YWlscykge1xuICAgICAgdGhyb3cgRXJyb3IoYEludmFsaWQgaGVsbSBVUkw6ICR7dXJsfS4gTXVzdCBtYXRjaCB0aGUgZm9ybWF0OiAnaGVsbTo8b2NpLXJlZ2lzdHJ5LXVybD5APGNoYXJ0LXZlcnNpb24+Jy5gKTtcbiAgICB9XG5cbiAgICBjaGFydFVybCA9IGhlbG1EZXRhaWxzWzFdO1xuICAgIGNvbnN0IGxhc3RJbmRleE9mU2xhc2ggPSBjaGFydFVybC5sYXN0SW5kZXhPZignLycpO1xuICAgIGNoYXJ0TmFtZSA9IGNoYXJ0VXJsLnN1YnN0cmluZyhsYXN0SW5kZXhPZlNsYXNoICsgMSk7XG5cbiAgICBjb25zdCBtYWpvciA9IGhlbG1EZXRhaWxzWzJdO1xuICAgIGNvbnN0IG1pbm9yID0gaGVsbURldGFpbHNbM107XG4gICAgY29uc3QgcGF0Y2ggPSBoZWxtRGV0YWlsc1s0XTtcbiAgICBjaGFydFZlcnNpb24gPSBgJHttYWpvcn0uJHttaW5vcn0uJHtwYXRjaH1gO1xuICB9IGVsc2UgaWYgKHVybC5zdGFydHNXaXRoKCdoZWxtOi4nKSB8fCB1cmwuc3RhcnRzV2l0aCgnaGVsbTovJykpIHtcbiAgICAvLyBVUkw6IGhlbG06Li9teS1jaGFydHMgb3IgaGVsbTovYWJzb2x1dGUvcGF0aC90by9teS1jaGFydHNcbiAgICBjb25zdCBsb2NhbFBhdGggPSB1cmwuc2xpY2UoNSk7XG5cbiAgICBpZiAoIWxvY2FsUGF0aCkge1xuICAgICAgdGhyb3cgRXJyb3IoYEludmFsaWQgaGVsbSBVUkw6ICR7dXJsfS4gTXVzdCBtYXRjaCB0aGUgZm9ybWF0OiAnaGVsbTo8bG9jYWwtcGF0aD4nLmApO1xuICAgIH1cbiAgICBpZiAoIWZzLmV4aXN0c1N5bmMobG9jYWxQYXRoKSkge1xuICAgICAgdGhyb3cgRXJyb3IoYExvY2FsIGNoYXJ0IHBhdGggZG9lcyBub3QgZXhpc3Q6ICR7bG9jYWxQYXRofWApO1xuICAgIH1cblxuICAgIGNvbnN0IGNoYXJ0WWFtbFBhdGggPSBwYXRoLmpvaW4obG9jYWxQYXRoLCBDSEFSVF9ZQU1MKTtcbiAgICBpZiAoIWZzLmV4aXN0c1N5bmMoY2hhcnRZYW1sUGF0aCkpIHtcbiAgICAgIHRocm93IEVycm9yKGBDaGFydC55YW1sIG5vdCBmb3VuZCBpbiBsb2NhbCBwYXRoOiAke2xvY2FsUGF0aH1gKTtcbiAgICB9XG5cbiAgICBjb25zdCBjaGFydFlhbWxDb250ZW50ID0gWWFtbC5sb2FkKGNoYXJ0WWFtbFBhdGgpO1xuICAgIGlmIChjaGFydFlhbWxDb250ZW50Lmxlbmd0aCAhPT0gMSB8fCAhY2hhcnRZYW1sQ29udGVudFswXS5uYW1lIHx8ICFjaGFydFlhbWxDb250ZW50WzBdLnZlcnNpb24pIHtcbiAgICAgIHRocm93IEVycm9yKGBJbnZhbGlkIENoYXJ0LnlhbWwgaW4gbG9jYWwgcGF0aDogJHtsb2NhbFBhdGh9LiBNaXNzaW5nIG5hbWUgb3IgdmVyc2lvbi5gKTtcbiAgICB9XG5cbiAgICBjaGFydFVybCA9IGxvY2FsUGF0aDtcbiAgICBjaGFydE5hbWUgPSBjaGFydFlhbWxDb250ZW50WzBdLm5hbWU7XG4gICAgY2hhcnRWZXJzaW9uID0gY2hhcnRZYW1sQ29udGVudFswXS52ZXJzaW9uO1xuICB9IGVsc2Uge1xuICAgIC8vIFVSTDogaGVsbTpodHRwczovL2xhY2V3b3JrLmdpdGh1Yi5pby9oZWxtLWNoYXJ0cy9sYWNld29yay1hZ2VudEA2LjkuMFxuICAgIGNvbnN0IGhlbG1SZWdleCA9IC9eaGVsbTooW0EtWmEtejAtOV8uLTpcXC1dKylcXC8oW0EtWmEtejAtOV8uLTpcXC1dKylcXEAodj9bMC05XSspXFwuKFswLTldKylcXC4oW0EtWmEtejAtOS0rXSspJC87XG4gICAgY29uc3QgaGVsbURldGFpbHMgPSBoZWxtUmVnZXguZXhlYyh1cmwpO1xuXG4gICAgaWYgKCFoZWxtRGV0YWlscykge1xuICAgICAgdGhyb3cgRXJyb3IoYEludmFsaWQgaGVsbSBVUkw6ICR7dXJsfS4gTXVzdCBtYXRjaCB0aGUgZm9ybWF0OiAnaGVsbTo8cmVwby11cmw+LzxjaGFydC1uYW1lPkA8Y2hhcnQtdmVyc2lvbj4nLmApO1xuICAgIH1cblxuICAgIGNoYXJ0VXJsID0gaGVsbURldGFpbHNbMV07XG4gICAgY2hhcnROYW1lID0gaGVsbURldGFpbHNbMl07XG5cbiAgICBjb25zdCBtYWpvciA9IGhlbG1EZXRhaWxzWzNdO1xuICAgIGNvbnN0IG1pbm9yID0gaGVsbURldGFpbHNbNF07XG4gICAgY29uc3QgcGF0Y2ggPSBoZWxtRGV0YWlsc1s1XTtcbiAgICBjaGFydFZlcnNpb24gPSBgJHttYWpvcn0uJHttaW5vcn0uJHtwYXRjaH1gO1xuICB9XG5cbiAgaWYgKCFzZW12ZXIudmFsaWQoY2hhcnRWZXJzaW9uKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBjaGFydCB2ZXJzaW9uICgke2NoYXJ0VmVyc2lvbn0pIGluIFVSTDogJHt1cmx9LiBNdXN0IGZvbGxvdyBTZW1WZXItMiAoc2VlIGh0dHBzOi8vc2VtdmVyLm9yZy8pLmApO1xuICB9XG5cbiAgcmV0dXJuIFtjaGFydFVybCwgY2hhcnROYW1lLCBjaGFydFZlcnNpb25dO1xufVxuXG4vKipcbiAqIENvcHkgbG9jYWwgaGVsbSBjaGFydCB0byBhIHRlbXBvcmFyeSBkaXJlY3RvcnkgdG8gbWFpbnRhaW4gdGhlIGV4cGVjdGVkIGB3b3JrZGlyL2NoYXJ0TmFtZWAgc3RydWN0dXJlXG4gKiBAcGFyYW0gY2hhcnRVcmwgQ2hhcnQgdXJsXG4gKiBAcGFyYW0gY2hhcnROYW1lIENoYXJ0IG5hbWVcbiAqIEByZXR1cm5zIFRlbXBvcmFyeSBkaXJlY3RvcnkgcGF0aFxuICovXG5mdW5jdGlvbiBjb3B5SGVsbUxvY2FsQ2hhcnQoY2hhcnRVcmw6IHN0cmluZywgY2hhcnROYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBhYnNvbHV0ZVBhdGggPSBwYXRoLnJlc29sdmUoY2hhcnRVcmwpO1xuICBpZiAoIWZzLmV4aXN0c1N5bmMoYWJzb2x1dGVQYXRoKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgTG9jYWwgY2hhcnQgcGF0aCBkb2VzIG5vdCBleGlzdDogJHthYnNvbHV0ZVBhdGh9YCk7XG4gIH1cblxuICBjb25zdCB3b3JrZGlyID0gZnMubWtkdGVtcFN5bmMocGF0aC5qb2luKG9zLnRtcGRpcigpLCAnY2RrOHMtaGVsbS1sb2NhbC0nKSk7XG4gIGNvbnN0IGNoYXJ0RGlyID0gcGF0aC5qb2luKHdvcmtkaXIsIGNoYXJ0TmFtZSk7XG5cbiAgZnMubWtkaXJTeW5jKGNoYXJ0RGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgZnMuY3BTeW5jKGFic29sdXRlUGF0aCwgY2hhcnREaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuXG4gIHJldHVybiB3b3JrZGlyO1xufVxuXG4vKipcbiAqIFB1bGxzIHRoZSBoZWxtIGNoYXJ0IGluIGEgdGVtcG9yYXJ5IGRpcmVjdG9yeVxuICogQHBhcmFtIGNoYXJ0VXJsIENoYXJ0IHVybFxuICogQHBhcmFtIGNoYXJ0TmFtZSBDaGFydCBuYW1lXG4gKiBAcGFyYW0gY2hhcnRWZXJzaW9uIENoYXJ0IHZlcnNpb25cbiAqIEByZXR1cm5zIFRlbXBvcmFyeSBkaXJlY3RvcnkgcGF0aFxuICovXG5mdW5jdGlvbiBwdWxsSGVsbVJlcG8oY2hhcnRVcmw6IHN0cmluZywgY2hhcnROYW1lOiBzdHJpbmcsIGNoYXJ0VmVyc2lvbjogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3Qgd29ya2RpciA9IGZzLm1rZHRlbXBTeW5jKHBhdGguam9pbihvcy50bXBkaXIoKSwgJ2NkazhzLWhlbG0tJykpO1xuXG4gIGNvbnN0IGFyZ3MgPSBuZXcgQXJyYXk8c3RyaW5nPigpO1xuICBhcmdzLnB1c2goJ3B1bGwnKTtcblxuICBpZiAoIWNoYXJ0VXJsLnN0YXJ0c1dpdGgoJ29jaTovLycpKSB7XG4gICAgYXJncy5wdXNoKGNoYXJ0TmFtZSk7XG4gICAgYXJncy5wdXNoKCctLXJlcG8nLCBjaGFydFVybCk7XG4gIH0gZWxzZSB7XG4gICAgYXJncy5wdXNoKGNoYXJ0VXJsKTtcbiAgfVxuXG4gIGFyZ3MucHVzaCgnLS12ZXJzaW9uJywgY2hhcnRWZXJzaW9uKTtcbiAgYXJncy5wdXNoKCctLXVudGFyJyk7XG4gIGFyZ3MucHVzaCgnLS11bnRhcmRpcicsIHdvcmtkaXIpO1xuXG4gIGNvbnN0IGNvbW1hbmQgPSAnaGVsbSc7XG5cbiAgY29uc3QgaGVsbSA9IHNwYXduU3luYyhjb21tYW5kLCBhcmdzLCB7XG4gICAgbWF4QnVmZmVyOiBNQVhfSEVMTV9CVUZGRVIsXG4gIH0pO1xuXG4gIGlmIChoZWxtLmVycm9yKSB7XG4gICAgY29uc3QgZXJyID0gaGVsbS5lcnJvci5tZXNzYWdlO1xuICAgIGlmIChlcnIuaW5jbHVkZXMoJ0VOT0VOVCcpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuYWJsZSB0byBleGVjdXRlICcke2NvbW1hbmR9JyB0byBwdWxsIHRoZSBIZWxtIGNoYXJ0LiBJcyBoZWxtIGluc3RhbGxlZCBvbiB5b3VyIHN5c3RlbT9gKTtcbiAgICB9XG5cbiAgICB0aHJvdyBuZXcgRXJyb3IoYEZhaWxlZCBwdWxsaW5nIGhlbG0gY2hhcnQgZnJvbSBVUkwgKCR7Y2hhcnRVcmx9KTogJHtlcnJ9YCk7XG4gIH1cblxuICBpZiAoaGVsbS5zdGF0dXMgIT09IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoaGVsbS5zdGRlcnIudG9TdHJpbmcoKSk7XG4gIH1cblxuICByZXR1cm4gd29ya2Rpcjtcbn1cblxuLyoqXG4gKiBDbGVhbnVwIHRlbXAgZGlyZWN0b3J5IGNyZWF0ZWRcbiAqIEBwYXJhbSB0bXBEaXIgVGVtcG9yYXJ5IGRpcmVjdG9yeSBwYXRoXG4gKi9cbmZ1bmN0aW9uIGNsZWFudXAodG1wRGlyOiBzdHJpbmcpIHtcbiAgZnMucm1TeW5jKHRtcERpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG59Il19
|
package/package.json
CHANGED
|
@@ -65,7 +65,7 @@
|
|
|
65
65
|
"fast-glob": "^3.3.3",
|
|
66
66
|
"jest": "^27",
|
|
67
67
|
"jest-junit": "^16",
|
|
68
|
-
"projen": "^0.98.
|
|
68
|
+
"projen": "^0.98.7",
|
|
69
69
|
"ts-jest": "^27",
|
|
70
70
|
"ts-node": "^10.9.2",
|
|
71
71
|
"typescript": "~4.9.5",
|
|
@@ -78,7 +78,7 @@
|
|
|
78
78
|
"cdk8s-plus-28": "^2.5.6",
|
|
79
79
|
"codemaker": "^1.118.0",
|
|
80
80
|
"colors": "1.4.0",
|
|
81
|
-
"constructs": "^10.4.
|
|
81
|
+
"constructs": "^10.4.3",
|
|
82
82
|
"fs-extra": "^8",
|
|
83
83
|
"jsii-pacmak": "^1.118.0",
|
|
84
84
|
"jsii-rosetta": "^5.9.13",
|
|
@@ -106,7 +106,7 @@
|
|
|
106
106
|
"publishConfig": {
|
|
107
107
|
"access": "public"
|
|
108
108
|
},
|
|
109
|
-
"version": "2.
|
|
109
|
+
"version": "2.203.1",
|
|
110
110
|
"jest": {
|
|
111
111
|
"coverageProvider": "v8",
|
|
112
112
|
"testMatch": [
|