@rosen-bridge/config 2.1.0-411c498c → 2.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +2 -1
- package/dist/cli.js +50 -4
- package/dist/config.d.ts +10 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +61 -1
- package/dist/schema/Validators/fieldProperties.d.ts +4 -0
- package/dist/schema/Validators/fieldProperties.d.ts.map +1 -1
- package/dist/schema/Validators/fieldProperties.js +25 -1
- package/dist/schema/types/fields.d.ts +1 -0
- package/dist/schema/types/fields.d.ts.map +1 -1
- package/dist/schema/types/fields.js +1 -1
- package/package.json +1 -2
package/CHANGELOG.md
CHANGED
package/dist/cli.js
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
#!/usr/bin/env -S node --experimental-specifier-resolution=node
|
|
2
|
-
import chalk from 'chalk';
|
|
3
2
|
import * as fs from 'fs';
|
|
4
3
|
import * as yaml from 'js-yaml';
|
|
5
4
|
import ora from 'ora';
|
|
@@ -51,7 +50,7 @@ yargs(hideBin(process.argv))
|
|
|
51
50
|
}
|
|
52
51
|
}
|
|
53
52
|
fs.writeFileSync(argv.output, output);
|
|
54
|
-
spinner.succeed(
|
|
53
|
+
spinner.succeed(`default config values were output at "${argv.output}"`);
|
|
55
54
|
})
|
|
56
55
|
.command('generate-ts-types', 'generates compatible TypeScript interface types for the passed schema', (yargs) => yargs
|
|
57
56
|
.option('schema', {
|
|
@@ -79,8 +78,55 @@ yargs(hideBin(process.argv))
|
|
|
79
78
|
const confValidator = ConfigValidator.fromSchema(schema);
|
|
80
79
|
const tsTypes = confValidator.generateTSTypes(argv.rootType);
|
|
81
80
|
fs.writeFileSync(argv.output, tsTypes);
|
|
82
|
-
spinner.succeed(
|
|
81
|
+
spinner.succeed(`TypeScript types were output at "${argv.output}"`);
|
|
82
|
+
})
|
|
83
|
+
.command('generate-env', 'generates custom-environment-variables file from schema', (yargs) => yargs
|
|
84
|
+
.option('schema', {
|
|
85
|
+
alias: 's',
|
|
86
|
+
demandOption: true,
|
|
87
|
+
description: 'input schema file path which should be in json format',
|
|
88
|
+
type: 'string',
|
|
89
|
+
})
|
|
90
|
+
.option('output', {
|
|
91
|
+
alias: 'o',
|
|
92
|
+
demandOption: true,
|
|
93
|
+
description: 'generated env output path',
|
|
94
|
+
type: 'string',
|
|
95
|
+
})
|
|
96
|
+
.option('format', {
|
|
97
|
+
alias: 'f',
|
|
98
|
+
demandOption: true,
|
|
99
|
+
description: 'output format',
|
|
100
|
+
choices: ['json', 'yaml'],
|
|
101
|
+
default: 'yaml',
|
|
102
|
+
type: 'string',
|
|
103
|
+
})
|
|
104
|
+
.option('all', {
|
|
105
|
+
alias: 'a',
|
|
106
|
+
type: 'boolean',
|
|
107
|
+
default: false,
|
|
108
|
+
description: 'generate environment variables for all non-array fields, regardless of secrecy',
|
|
109
|
+
}), async (argv) => {
|
|
110
|
+
const spinner = ora();
|
|
111
|
+
spinner.start(`Generating custom environment variables`);
|
|
112
|
+
const rawSchemaData = fs.readFileSync(argv.schema, 'utf-8');
|
|
113
|
+
const schema = JsonBigInt.parse(rawSchemaData);
|
|
114
|
+
const confValidator = ConfigValidator.fromSchema(schema);
|
|
115
|
+
const envConfig = confValidator.generateCustomEnvFile(argv['all']);
|
|
116
|
+
let output = '';
|
|
117
|
+
switch (argv.format) {
|
|
118
|
+
case 'json': {
|
|
119
|
+
output = JSON.stringify(envConfig, null, 2);
|
|
120
|
+
break;
|
|
121
|
+
}
|
|
122
|
+
case 'yaml': {
|
|
123
|
+
output = yaml.dump(envConfig);
|
|
124
|
+
break;
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
fs.writeFileSync(argv.output, output);
|
|
128
|
+
spinner.succeed(`env config was output at "${argv.output}"`);
|
|
83
129
|
})
|
|
84
130
|
.demandCommand(1)
|
|
85
131
|
.parse();
|
|
86
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vbGliL2NsaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBRUEsT0FBTyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBQzFCLE9BQU8sS0FBSyxFQUFFLE1BQU0sSUFBSSxDQUFDO0FBQ3pCLE9BQU8sS0FBSyxJQUFJLE1BQU0sU0FBUyxDQUFDO0FBQ2hDLE9BQU8sR0FBRyxNQUFNLEtBQUssQ0FBQztBQUN0QixPQUFPLEtBQUssTUFBTSxPQUFPLENBQUM7QUFDMUIsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUV4QyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUU5RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBRTFDLE1BQU0sVUFBVSxHQUFHLGlCQUFpQixDQUFDO0lBQ25DLGdCQUFnQixFQUFFLEtBQUs7SUFDdkIsZUFBZSxFQUFFLElBQUk7Q0FDdEIsQ0FBQyxDQUFDO0FBRUgsS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDekIsT0FBTyxDQUNOLGtCQUFrQixFQUNsQixtRUFBbUUsRUFDbkUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUNSLEtBQUs7S0FDRixNQUFNLENBQUMsUUFBUSxFQUFFO0lBQ2hCLEtBQUssRUFBRSxHQUFHO0lBQ1YsWUFBWSxFQUFFLElBQUk7SUFDbEIsV0FBVyxFQUFFLHVEQUF1RDtJQUNwRSxJQUFJLEVBQUUsUUFBUTtDQUNmLENBQUM7S0FDRCxNQUFNLENBQUMsUUFBUSxFQUFFO0lBQ2hCLEtBQUssRUFBRSxHQUFHO0lBQ1YsWUFBWSxFQUFFLElBQUk7SUFDbEIsV0FBVyxFQUFFLHNDQUFzQztJQUNuRCxJQUFJLEVBQUUsUUFBUTtDQUNmLENBQUM7S0FDRCxNQUFNLENBQUMsUUFBUSxFQUFFO0lBQ2hCLEtBQUssRUFBRSxHQUFHO0lBQ1YsWUFBWSxF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S0FBSyxDQUFDLG9DQUFvQyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FDaEUsQ0FBQztBQUNKLENBQUMsQ0FDRjtLQUNBLGFBQWEsQ0FBQyxDQUFDLENBQUM7S0FDaEIsS0FBSyxFQUFFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIjIS91c3IvYmluL2VudiAtUyBub2RlIC0tZXhwZXJpbWVudGFsLXNwZWNpZmllci1yZXNvbHV0aW9uPW5vZGVcblxuaW1wb3J0IGNoYWxrIGZyb20gJ2NoYWxrJztcbmltcG9ydCAqIGFzIGZzIGZyb20gJ2ZzJztcbmltcG9ydCAqIGFzIHlhbWwgZnJvbSAnanMteWFtbCc7XG5pbXBvcnQgb3JhIGZyb20gJ29yYSc7XG5pbXBvcnQgeWFyZ3MgZnJvbSAneWFyZ3MnO1xuaW1wb3J0IHsgaGlkZUJpbiB9IGZyb20gJ3lhcmdzL2hlbHBlcnMnO1xuXG5pbXBvcnQgeyBKc29uQmlnSW50RmFjdG9yeSB9IGZyb20gJ0Byb3Nlbi1icmlkZ2UvanNvbi1iaWdpbnQnO1xuXG5pbXBvcnQgeyBDb25maWdWYWxpZGF0b3IgfSBmcm9tICcuL2luZGV4JztcblxuY29uc3QgSnNvbkJpZ0ludCA9IEpzb25CaWdJbnRGYWN0b3J5KHtcbiAgYWx3YXlzUGFyc2VBc0JpZzogZmFsc2UsXG4gIHVzZU5hdGl2ZUJpZ0ludDogdHJ1ZSxcbn0pO1xuXG55YXJncyhoaWRlQmluKHByb2Nlc3MuYXJndikpXG4gIC5jb21tYW5kKFxuICAgICdnZW5lcmF0ZS1kZWZhdWx0JyxcbiAgICAnZ2VuZXJhdGVzIGFuIG9iamVjdCB1c2luZyB0aGUgZGVmYXVsdCB2YWx1ZXMgb2YgdGhlIHBhc3NlZCBzY2hlbWEnLFxuICAgICh5YXJncykgPT5cbiAgICAgIHlhcmdzXG4gICAgICAgIC5vcHRpb24oJ3NjaGVtYScsIHtcbiAgICAgICAgICBhbGlhczogJ3MnLFxuICAgICAgICAgIGRlbWFuZE9wdGlvbjogdHJ1ZSxcbiAgICAgICAgICBkZXNjcmlwdGlvbjogJ2lucHV0IHNjaGVtYSBmaWxlIHBhdGggd2hpY2ggc2hvdWxkIGJlIGluIGpzb24gZm9ybWF0JyxcbiAgICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgICAgfSlcbiAgICAgICAgLm9wdGlvbignb3V0cHV0Jywge1xuICAgICAgICAgIGFsaWFzOiAnbycsXG4gICAgICAgICAgZGVtYW5kT3B0aW9uOiB0cnVlLFxuICAgICAgICAgIGRlc2NyaXB0aW9uOiAnZ2VuZXJhdGVkIGRlZmF1bHQgdmFsdWVzIG91dHB1dCBwYXRoJyxcbiAgICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgICAgfSlcbiAgICAgICAgLm9wdGlvbignZm9ybWF0Jywge1xuICAgICAgICAgIGFsaWFzOiAnZicsXG4gICAgICAgICAgZGVtYW5kT3B0aW9uOiB0cnVlLFxuICAgICAgICAgIGRlc2NyaXB0aW9uOiAnZ2VuZXJhdGVkIGRlZmF1bHQgdmFsdWVzIG91dHB1dCBwYXRoJyxcbiAgICAgICAgICBjaG9pY2VzOiBbJ2pzb24nLCAneWFtbCddLFxuICAgICAgICAgIGRlZmF1bHQ6ICd5YW1sJyxcbiAgICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgICAgfSksXG4gICAgYXN5bmMgKGFyZ3YpID0+IHtcbiAgICAgIGNvbnN0IHNwaW5uZXIgPSBvcmEoKTtcbiAgICAgIHNwaW5uZXIuc3RhcnQoYEdlbmVyYXRpbmcgY29uZmlnIGRlZmF1bHQgdmFsdWVzYCk7XG5cbiAgICAgIGNvbnN0IHJhd1NjaGVtYURhdGEgPSBmcy5yZWFkRmlsZVN5bmMoYXJndi5zY2hlbWEsICd1dGYtOCcpO1xuICAgICAgY29uc3Qgc2NoZW1hID0gSnNvbkJpZ0ludC5wYXJzZShyYXdTY2hlbWFEYXRhKTtcblxuICAgICAgY29uc3QgY29uZlZhbGlkYXRvciA9IENvbmZpZ1ZhbGlkYXRvci5mcm9tU2NoZW1hKHNjaGVtYSk7XG4gICAgICBjb25zdCBkZWZhdWx0Q29uZiA9IGNvbmZWYWxpZGF0b3IuZ2VuZXJhdGVEZWZhdWx0KCk7XG5cbiAgICAgIGxldCBvdXRwdXQgPSAnJztcbiAgICAgIHN3aXRjaCAoYXJndi5mb3JtYXQpIHtcbiAgICAgICAgY2FzZSAnanNvbic6IHtcbiAgICAgICAgICBvdXRwdXQgPSBKc29uQmlnSW50LnN0cmluZ2lmeShkZWZhdWx0Q29uZik7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAneWFtbCc6IHtcbiAgICAgICAgICBvdXRwdXQgPSB5YW1sLmR1bXAoZGVmYXVsdENvbmYpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGZzLndyaXRlRmlsZVN5bmMoYXJndi5vdXRwdXQsIG91dHB1dCk7XG5cbiAgICAgIHNwaW5uZXIuc3VjY2VlZChcbiAgICAgICAgY2hhbGsuZ3JlZW4oYGRlZmF1bHQgY29uZmlnIHZhbHVlcyB3ZXJlIG91dHB1dCBhdCBcIiR7YXJndi5vdXRwdXR9XCJgKSxcbiAgICAgICk7XG4gICAgfSxcbiAgKVxuICAuY29tbWFuZChcbiAgICAnZ2VuZXJhdGUtdHMtdHlwZXMnLFxuICAgICdnZW5lcmF0ZXMgY29tcGF0aWJsZSBUeXBlU2NyaXB0IGludGVyZmFjZSB0eXBlcyBmb3IgdGhlIHBhc3NlZCBzY2hlbWEnLFxuICAgICh5YXJncykgPT5cbiAgICAgIHlhcmdzXG4gICAgICAgIC5vcHRpb24oJ3NjaGVtYScsIHtcbiAgICAgICAgICBhbGlhczogJ3MnLFxuICAgICAgICAgIGRlbWFuZE9wdGlvbjogdHJ1ZSxcbiAgICAgICAgICBkZXNjcmlwdGlvbjogJ2lucHV0IHNjaGVtYSBmaWxlIHBhdGggd2hpY2ggc2hvdWxkIGJlIGluIGpzb24gZm9ybWF0JyxcbiAgICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgICAgfSlcbiAgICAgICAgLm9wdGlvbignb3V0cHV0Jywge1xuICAgICAgICAgIGFsaWFzOiAnbycsXG4gICAgICAgICAgZGVtYW5kT3B0aW9uOiB0cnVlLFxuICAgICAgICAgIGRlc2NyaXB0aW9uOiAnZ2VuZXJhdGVkIFR5cGVTY3JpcHQgaW50ZXJmYWNlcycsXG4gICAgICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICAgIH0pXG4gICAgICAgIC5vcHRpb24oJ3Jvb3QtdHlwZScsIHtcbiAgICAgICAgICBhbGlhczogJ3InLFxuICAgICAgICAgIGRlbWFuZE9wdGlvbjogdHJ1ZSxcbiAgICAgICAgICBkZXNjcmlwdGlvbjogJ05hbWUgb2YgdG9wIHJvb3QgaW50ZXJmYWNlJyxcbiAgICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgICAgfSksXG4gICAgYXN5bmMgKGFyZ3YpID0+IHtcbiAgICAgIGNvbnN0IHNwaW5uZXIgPSBvcmEoKTtcbiAgICAgIHNwaW5uZXIuc3RhcnQoYEdlbmVyYXRpbmcgVHlwZVNjcmlwdCB0eXBlc2ApO1xuXG4gICAgICBjb25zdCByYXdTY2hlbWFEYXRhID0gZnMucmVhZEZpbGVTeW5jKGFyZ3Yuc2NoZW1hLCAndXRmLTgnKTtcbiAgICAgIGNvbnN0IHNjaGVtYSA9IEpzb25CaWdJbnQucGFyc2UocmF3U2NoZW1hRGF0YSk7XG5cbiAgICAgIGNvbnN0IGNvbmZWYWxpZGF0b3IgPSBDb25maWdWYWxpZGF0b3IuZnJvbVNjaGVtYShzY2hlbWEpO1xuICAgICAgY29uc3QgdHNUeXBlcyA9IGNvbmZWYWxpZGF0b3IuZ2VuZXJhdGVUU1R5cGVzKGFyZ3Yucm9vdFR5cGUpO1xuXG4gICAgICBmcy53cml0ZUZpbGVTeW5jKGFyZ3Yub3V0cHV0LCB0c1R5cGVzKTtcblxuICAgICAgc3Bpbm5lci5zdWNjZWVkKFxuICAgICAgICBjaGFsay5ncmVlbihgVHlwZVNjcmlwdCB0eXBlcyB3ZXJlIG91dHB1dCBhdCBcIiR7YXJndi5vdXRwdXR9XCJgKSxcbiAgICAgICk7XG4gICAgfSxcbiAgKVxuICAuZGVtYW5kQ29tbWFuZCgxKVxuICAucGFyc2UoKTtcbiJdfQ==
|
|
132
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vbGliL2NsaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBRUEsT0FBTyxLQUFLLEVBQUUsTUFBTSxJQUFJLENBQUM7QUFDekIsT0FBTyxLQUFLLElBQUksTUFBTSxTQUFTLENBQUM7QUFDaEMsT0FBTyxHQUFHLE1BQU0sS0FBSyxDQUFDO0FBQ3RCLE9BQU8sS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUMxQixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXhDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBRTlELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFFMUMsTUFBTSxVQUFVLEdBQUcsaUJBQWlCLENBQUM7SUFDbkMsZ0JBQWdCLEVBQUUsS0FBSztJQUN2QixlQUFlLEVBQUUsSUFBSTtDQUN0QixDQUFDLENBQUM7QUFFSCxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztLQUN6QixPQUFPLENBQ04sa0JBQWtCLEVBQ2xCLG1FQUFtRSxFQUNuRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQ1IsS0FBSztLQUNGLE1BQU0sQ0FBQyxRQUFRLEVBQUU7SUFDaEIsS0FBSyxFQUFFLEdBQUc7SUFDVixZQUFZLEVBQUUsSUFBSTtJQUNsQixXQUFXLEVBQUUsdURBQXVEO0lBQ3BFLElBQUksRUFBRSxRQUFRO0NBQ2YsQ0FBQztLQUNELE1BQU0sQ0FBQyxRQUFRLEVBQUU7SUFDaEIsS0FBSyxFQUFFLEdBQUc7SUFDVixZQUFZLEVBQUUsSUFBSTtJQUNsQixXQUFXLEVBQUUsc0NBQXNDO0lBQ25ELElBQUksRUFBRSxRQUFRO0NBQ2YsQ0FBQztLQUNELE1BQU0sQ0FBQyxRQUFRLEVBQUU7SUFDaEIsS0FBSyxFQUFFLEdBQUc7SUFDVixZQUFZLEVBQUUsSUFBSTtJQUNsQixXQUFXLEVBQUUsc0NBQXND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QUFTLEdBQUcsYUFBYSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBRW5FLElBQUksTUFBTSxHQUFHLEVBQUUsQ0FBQztJQUNoQixRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUNwQixLQUFLLE1BQU0sQ0FBQyxDQUFDLENBQUM7WUFDWixNQUFNLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQzVDLE1BQU07UUFDUixDQUFDO1FBQ0QsS0FBSyxNQUFNLENBQUMsQ0FBQyxDQUFDO1lBQ1osTUFBTSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDOUIsTUFBTTtRQUNSLENBQUM7SUFDSCxDQUFDO0lBRUQsRUFBRSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBRXRDLE9BQU8sQ0FBQyxPQUFPLENBQUMsNkJBQTZCLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0FBQy9ELENBQUMsQ0FDRjtLQUNBLGFBQWEsQ0FBQyxDQUFDLENBQUM7S0FDaEIsS0FBSyxFQUFFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIjIS91c3IvYmluL2VudiAtUyBub2RlIC0tZXhwZXJpbWVudGFsLXNwZWNpZmllci1yZXNvbHV0aW9uPW5vZGVcblxuaW1wb3J0ICogYXMgZnMgZnJvbSAnZnMnO1xuaW1wb3J0ICogYXMgeWFtbCBmcm9tICdqcy15YW1sJztcbmltcG9ydCBvcmEgZnJvbSAnb3JhJztcbmltcG9ydCB5YXJncyBmcm9tICd5YXJncyc7XG5pbXBvcnQgeyBoaWRlQmluIH0gZnJvbSAneWFyZ3MvaGVscGVycyc7XG5cbmltcG9ydCB7IEpzb25CaWdJbnRGYWN0b3J5IH0gZnJvbSAnQHJvc2VuLWJyaWRnZS9qc29uLWJpZ2ludCc7XG5cbmltcG9ydCB7IENvbmZpZ1ZhbGlkYXRvciB9IGZyb20gJy4vaW5kZXgnO1xuXG5jb25zdCBKc29uQmlnSW50ID0gSnNvbkJpZ0ludEZhY3Rvcnkoe1xuICBhbHdheXNQYXJzZUFzQmlnOiBmYWxzZSxcbiAgdXNlTmF0aXZlQmlnSW50OiB0cnVlLFxufSk7XG5cbnlhcmdzKGhpZGVCaW4ocHJvY2Vzcy5hcmd2KSlcbiAgLmNvbW1hbmQoXG4gICAgJ2dlbmVyYXRlLWRlZmF1bHQnLFxuICAgICdnZW5lcmF0ZXMgYW4gb2JqZWN0IHVzaW5nIHRoZSBkZWZhdWx0IHZhbHVlcyBvZiB0aGUgcGFzc2VkIHNjaGVtYScsXG4gICAgKHlhcmdzKSA9PlxuICAgICAgeWFyZ3NcbiAgICAgICAgLm9wdGlvbignc2NoZW1hJywge1xuICAgICAgICAgIGFsaWFzOiAncycsXG4gICAgICAgICAgZGVtYW5kT3B0aW9uOiB0cnVlLFxuICAgICAgICAgIGRlc2NyaXB0aW9uOiAnaW5wdXQgc2NoZW1hIGZpbGUgcGF0aCB3aGljaCBzaG91bGQgYmUgaW4ganNvbiBmb3JtYXQnLFxuICAgICAgICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgICAgICB9KVxuICAgICAgICAub3B0aW9uKCdvdXRwdXQnLCB7XG4gICAgICAgICAgYWxpYXM6ICdvJyxcbiAgICAgICAgICBkZW1hbmRPcHRpb246IHRydWUsXG4gICAgICAgICAgZGVzY3JpcHRpb246ICdnZW5lcmF0ZWQgZGVmYXVsdCB2YWx1ZXMgb3V0cHV0IHBhdGgnLFxuICAgICAgICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgICAgICB9KVxuICAgICAgICAub3B0aW9uKCdmb3JtYXQnLCB7XG4gICAgICAgICAgYWxpYXM6ICdmJyxcbiAgICAgICAgICBkZW1hbmRPcHRpb246IHRydWUsXG4gICAgICAgICAgZGVzY3JpcHRpb246ICdnZW5lcmF0ZWQgZGVmYXVsdCB2YWx1ZXMgb3V0cHV0IHBhdGgnLFxuICAgICAgICAgIGNob2ljZXM6IFsnanNvbicsICd5YW1sJ10sXG4gICAgICAgICAgZGVmYXVsdDogJ3lhbWwnLFxuICAgICAgICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgICAgICB9KSxcbiAgICBhc3luYyAoYXJndikgPT4ge1xuICAgICAgY29uc3Qgc3Bpbm5lciA9IG9yYSgpO1xuICAgICAgc3Bpbm5lci5zdGFydChgR2VuZXJhdGluZyBjb25maWcgZGVmYXVsdCB2YWx1ZXNgKTtcblxuICAgICAgY29uc3QgcmF3U2NoZW1hRGF0YSA9IGZzLnJlYWRGaWxlU3luYyhhcmd2LnNjaGVtYSwgJ3V0Zi04Jyk7XG4gICAgICBjb25zdCBzY2hlbWEgPSBKc29uQmlnSW50LnBhcnNlKHJhd1NjaGVtYURhdGEpO1xuXG4gICAgICBjb25zdCBjb25mVmFsaWRhdG9yID0gQ29uZmlnVmFsaWRhdG9yLmZyb21TY2hlbWEoc2NoZW1hKTtcbiAgICAgIGNvbnN0IGRlZmF1bHRDb25mID0gY29uZlZhbGlkYXRvci5nZW5lcmF0ZURlZmF1bHQoKTtcblxuICAgICAgbGV0IG91dHB1dCA9ICcnO1xuICAgICAgc3dpdGNoIChhcmd2LmZvcm1hdCkge1xuICAgICAgICBjYXNlICdqc29uJzoge1xuICAgICAgICAgIG91dHB1dCA9IEpzb25CaWdJbnQuc3RyaW5naWZ5KGRlZmF1bHRDb25mKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlICd5YW1sJzoge1xuICAgICAgICAgIG91dHB1dCA9IHlhbWwuZHVtcChkZWZhdWx0Q29uZik7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgZnMud3JpdGVGaWxlU3luYyhhcmd2Lm91dHB1dCwgb3V0cHV0KTtcblxuICAgICAgc3Bpbm5lci5zdWNjZWVkKGBkZWZhdWx0IGNvbmZpZyB2YWx1ZXMgd2VyZSBvdXRwdXQgYXQgXCIke2FyZ3Yub3V0cHV0fVwiYCk7XG4gICAgfSxcbiAgKVxuICAuY29tbWFuZChcbiAgICAnZ2VuZXJhdGUtdHMtdHlwZXMnLFxuICAgICdnZW5lcmF0ZXMgY29tcGF0aWJsZSBUeXBlU2NyaXB0IGludGVyZmFjZSB0eXBlcyBmb3IgdGhlIHBhc3NlZCBzY2hlbWEnLFxuICAgICh5YXJncykgPT5cbiAgICAgIHlhcmdzXG4gICAgICAgIC5vcHRpb24oJ3NjaGVtYScsIHtcbiAgICAgICAgICBhbGlhczogJ3MnLFxuICAgICAgICAgIGRlbWFuZE9wdGlvbjogdHJ1ZSxcbiAgICAgICAgICBkZXNjcmlwdGlvbjogJ2lucHV0IHNjaGVtYSBmaWxlIHBhdGggd2hpY2ggc2hvdWxkIGJlIGluIGpzb24gZm9ybWF0JyxcbiAgICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgICAgfSlcbiAgICAgICAgLm9wdGlvbignb3V0cHV0Jywge1xuICAgICAgICAgIGFsaWFzOiAnbycsXG4gICAgICAgICAgZGVtYW5kT3B0aW9uOiB0cnVlLFxuICAgICAgICAgIGRlc2NyaXB0aW9uOiAnZ2VuZXJhdGVkIFR5cGVTY3JpcHQgaW50ZXJmYWNlcycsXG4gICAgICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICAgIH0pXG4gICAgICAgIC5vcHRpb24oJ3Jvb3QtdHlwZScsIHtcbiAgICAgICAgICBhbGlhczogJ3InLFxuICAgICAgICAgIGRlbWFuZE9wdGlvbjogdHJ1ZSxcbiAgICAgICAgICBkZXNjcmlwdGlvbjogJ05hbWUgb2YgdG9wIHJvb3QgaW50ZXJmYWNlJyxcbiAgICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgICAgfSksXG4gICAgYXN5bmMgKGFyZ3YpID0+IHtcbiAgICAgIGNvbnN0IHNwaW5uZXIgPSBvcmEoKTtcbiAgICAgIHNwaW5uZXIuc3RhcnQoYEdlbmVyYXRpbmcgVHlwZVNjcmlwdCB0eXBlc2ApO1xuXG4gICAgICBjb25zdCByYXdTY2hlbWFEYXRhID0gZnMucmVhZEZpbGVTeW5jKGFyZ3Yuc2NoZW1hLCAndXRmLTgnKTtcbiAgICAgIGNvbnN0IHNjaGVtYSA9IEpzb25CaWdJbnQucGFyc2UocmF3U2NoZW1hRGF0YSk7XG5cbiAgICAgIGNvbnN0IGNvbmZWYWxpZGF0b3IgPSBDb25maWdWYWxpZGF0b3IuZnJvbVNjaGVtYShzY2hlbWEpO1xuICAgICAgY29uc3QgdHNUeXBlcyA9IGNvbmZWYWxpZGF0b3IuZ2VuZXJhdGVUU1R5cGVzKGFyZ3Yucm9vdFR5cGUpO1xuXG4gICAgICBmcy53cml0ZUZpbGVTeW5jKGFyZ3Yub3V0cHV0LCB0c1R5cGVzKTtcblxuICAgICAgc3Bpbm5lci5zdWNjZWVkKGBUeXBlU2NyaXB0IHR5cGVzIHdlcmUgb3V0cHV0IGF0IFwiJHthcmd2Lm91dHB1dH1cImApO1xuICAgIH0sXG4gIClcbiAgLmNvbW1hbmQoXG4gICAgJ2dlbmVyYXRlLWVudicsXG4gICAgJ2dlbmVyYXRlcyBjdXN0b20tZW52aXJvbm1lbnQtdmFyaWFibGVzIGZpbGUgZnJvbSBzY2hlbWEnLFxuICAgICh5YXJncykgPT5cbiAgICAgIHlhcmdzXG4gICAgICAgIC5vcHRpb24oJ3NjaGVtYScsIHtcbiAgICAgICAgICBhbGlhczogJ3MnLFxuICAgICAgICAgIGRlbWFuZE9wdGlvbjogdHJ1ZSxcbiAgICAgICAgICBkZXNjcmlwdGlvbjogJ2lucHV0IHNjaGVtYSBmaWxlIHBhdGggd2hpY2ggc2hvdWxkIGJlIGluIGpzb24gZm9ybWF0JyxcbiAgICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgICAgfSlcbiAgICAgICAgLm9wdGlvbignb3V0cHV0Jywge1xuICAgICAgICAgIGFsaWFzOiAnbycsXG4gICAgICAgICAgZGVtYW5kT3B0aW9uOiB0cnVlLFxuICAgICAgICAgIGRlc2NyaXB0aW9uOiAnZ2VuZXJhdGVkIGVudiBvdXRwdXQgcGF0aCcsXG4gICAgICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICAgIH0pXG4gICAgICAgIC5vcHRpb24oJ2Zvcm1hdCcsIHtcbiAgICAgICAgICBhbGlhczogJ2YnLFxuICAgICAgICAgIGRlbWFuZE9wdGlvbjogdHJ1ZSxcbiAgICAgICAgICBkZXNjcmlwdGlvbjogJ291dHB1dCBmb3JtYXQnLFxuICAgICAgICAgIGNob2ljZXM6IFsnanNvbicsICd5YW1sJ10sXG4gICAgICAgICAgZGVmYXVsdDogJ3lhbWwnLFxuICAgICAgICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgICAgICB9KVxuICAgICAgICAub3B0aW9uKCdhbGwnLCB7XG4gICAgICAgICAgYWxpYXM6ICdhJyxcbiAgICAgICAgICB0eXBlOiAnYm9vbGVhbicsXG4gICAgICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgICAgICAnZ2VuZXJhdGUgZW52aXJvbm1lbnQgdmFyaWFibGVzIGZvciBhbGwgbm9uLWFycmF5IGZpZWxkcywgcmVnYXJkbGVzcyBvZiBzZWNyZWN5JyxcbiAgICAgICAgfSksXG4gICAgYXN5bmMgKGFyZ3YpID0+IHtcbiAgICAgIGNvbnN0IHNwaW5uZXIgPSBvcmEoKTtcbiAgICAgIHNwaW5uZXIuc3RhcnQoYEdlbmVyYXRpbmcgY3VzdG9tIGVudmlyb25tZW50IHZhcmlhYmxlc2ApO1xuXG4gICAgICBjb25zdCByYXdTY2hlbWFEYXRhID0gZnMucmVhZEZpbGVTeW5jKGFyZ3Yuc2NoZW1hLCAndXRmLTgnKTtcbiAgICAgIGNvbnN0IHNjaGVtYSA9IEpzb25CaWdJbnQucGFyc2UocmF3U2NoZW1hRGF0YSk7XG5cbiAgICAgIGNvbnN0IGNvbmZWYWxpZGF0b3IgPSBDb25maWdWYWxpZGF0b3IuZnJvbVNjaGVtYShzY2hlbWEpO1xuXG4gICAgICBjb25zdCBlbnZDb25maWcgPSBjb25mVmFsaWRhdG9yLmdlbmVyYXRlQ3VzdG9tRW52RmlsZShhcmd2WydhbGwnXSk7XG5cbiAgICAgIGxldCBvdXRwdXQgPSAnJztcbiAgICAgIHN3aXRjaCAoYXJndi5mb3JtYXQpIHtcbiAgICAgICAgY2FzZSAnanNvbic6IHtcbiAgICAgICAgICBvdXRwdXQgPSBKU09OLnN0cmluZ2lmeShlbnZDb25maWcsIG51bGwsIDIpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgJ3lhbWwnOiB7XG4gICAgICAgICAgb3V0cHV0ID0geWFtbC5kdW1wKGVudkNvbmZpZyk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgZnMud3JpdGVGaWxlU3luYyhhcmd2Lm91dHB1dCwgb3V0cHV0KTtcblxuICAgICAgc3Bpbm5lci5zdWNjZWVkKGBlbnYgY29uZmlnIHdhcyBvdXRwdXQgYXQgXCIke2FyZ3Yub3V0cHV0fVwiYCk7XG4gICAgfSxcbiAgKVxuICAuZGVtYW5kQ29tbWFuZCgxKVxuICAucGFyc2UoKTtcbiJdfQ==
|
package/dist/config.d.ts
CHANGED
|
@@ -165,6 +165,16 @@ export declare class ConfigValidator {
|
|
|
165
165
|
* @memberof ConfigValidator
|
|
166
166
|
*/
|
|
167
167
|
private static processConfigForLevelNode;
|
|
168
|
+
/**
|
|
169
|
+
* Generates a custom environment file based on the provided schema.
|
|
170
|
+
*
|
|
171
|
+
* @param {boolean} [options.allEnv] If true, includes all environment variables, otherwise only includes non-secret fields.
|
|
172
|
+
* @param {ConfigSchema} schema
|
|
173
|
+
* @param {string[]} path
|
|
174
|
+
*
|
|
175
|
+
* @returns {Record<string, unknown>}
|
|
176
|
+
*/
|
|
177
|
+
generateCustomEnvFile: (allEnv?: boolean, schema?: ConfigSchema, path?: string[]) => Record<string, unknown>;
|
|
168
178
|
/**
|
|
169
179
|
* returns a list of config sources used by node config package, ordered from
|
|
170
180
|
* the lowest to the highest priority
|
package/dist/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../lib/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAiB,MAAM,QAAQ,CAAC;AAQhD,OAAO,EACL,WAAW,EACX,YAAY,EAEZ,SAAS,EACV,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,IAAI,EAAE,MAAM,4BAA4B,CAAC;AAYlD,qBAAa,eAAe;IAC1B,OAAO,CAAC,MAAM,CAAe;IAE7B,OAAO;IAKP;;;;;OAKG;IACH,YAAY,GAAI,CAAC,OAAK,CAAC,CAIrB;IAEF;;OAEG;IACH,MAAM,CAAC,QAAQ,GAAI,YAAY,MAAM,KAAG,eAAe,CAUrD;IAEF;;;;OAIG;IACH,MAAM,CAAC,UAAU,GAAI,QAAQ,YAAY,KAAG,eAAe,CAEzD;IAEF;;;;OAIG;IAEI,cAAc,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IAWjD;;;;;;;;;;;;OAYG;IACH,OAAO,CAAC,iBAAiB;IAyDzB;;;;;;;;;;;;OAYG;IACH,OAAO,CAAC,kBAAkB;IAsE1B;;;;;;;;;OASG;IACH,MAAM,CAAC,YAAY,CAEjB,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACxB,QAAQ,EAAE,SAAS,EACnB,IAAI,EAAE,MAAM,EAAE;IAkBhB;;;;;;;;;OASG;IACH,OAAO,CAAC,aAAa,CAqFnB;IAEF;;;;;;;;OAQG;IACI,UAAU,GACf,MAAM,IAAI,EAEV,QAAQ,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAE3B,UAAU,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,KAC5B,OAAO,CAkBR;IAEF;;;;;;;OAOG;IAEH,MAAM,CAAC,OAAO,GAAI,QAAQ,GAAG,EAAE,MAAM,MAAM,EAAE,SAiB3C;IAEF;;OAEG;IACH,OAAO,CAAC,cAAc,CAgEpB;IAEF;;;;OAIG;IACH,OAAO,CAAC,kBAAkB,CAIxB;IAEF;;;;OAIG;IACH,OAAO,CAAC,mBAAmB,CA4BzB;IAEF;;;;;OAKG;IACH,cAAc,GAAI,MAAM,MAAM,EAAE,KAAG,WAAW,GAAG,SAAS,CAwFxD;IAEF;;;;OAIG;IAEH,eAAe,GAAI,UAAU;QAAE,QAAQ,CAAC,EAAE,OAAO,CAAA;KAAE,KAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAMvE;IAGF,OAAO,CAAC,sBAAsB,CAsC5B;IAEF;;;;;OAKG;IACH,eAAe,GAAI,MAAM,MAAM,KAAG,MAAM,CA4MtC;IAEF;;;;;;OAMG;IACH,OAAO,CAAC,cAAc,CAOpB;IAEF;;;;;;OAMG;IAEH,iBAAiB,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IAmCtE;;;;;;;;;;;;OAYG;IACH,OAAO,CAAC,MAAM,CAAC,yBAAyB;
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../lib/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAiB,MAAM,QAAQ,CAAC;AAQhD,OAAO,EACL,WAAW,EACX,YAAY,EAEZ,SAAS,EACV,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,IAAI,EAAE,MAAM,4BAA4B,CAAC;AAYlD,qBAAa,eAAe;IAC1B,OAAO,CAAC,MAAM,CAAe;IAE7B,OAAO;IAKP;;;;;OAKG;IACH,YAAY,GAAI,CAAC,OAAK,CAAC,CAIrB;IAEF;;OAEG;IACH,MAAM,CAAC,QAAQ,GAAI,YAAY,MAAM,KAAG,eAAe,CAUrD;IAEF;;;;OAIG;IACH,MAAM,CAAC,UAAU,GAAI,QAAQ,YAAY,KAAG,eAAe,CAEzD;IAEF;;;;OAIG;IAEI,cAAc,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IAWjD;;;;;;;;;;;;OAYG;IACH,OAAO,CAAC,iBAAiB;IAyDzB;;;;;;;;;;;;OAYG;IACH,OAAO,CAAC,kBAAkB;IAsE1B;;;;;;;;;OASG;IACH,MAAM,CAAC,YAAY,CAEjB,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACxB,QAAQ,EAAE,SAAS,EACnB,IAAI,EAAE,MAAM,EAAE;IAkBhB;;;;;;;;;OASG;IACH,OAAO,CAAC,aAAa,CAqFnB;IAEF;;;;;;;;OAQG;IACI,UAAU,GACf,MAAM,IAAI,EAEV,QAAQ,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAE3B,UAAU,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,KAC5B,OAAO,CAkBR;IAEF;;;;;;;OAOG;IAEH,MAAM,CAAC,OAAO,GAAI,QAAQ,GAAG,EAAE,MAAM,MAAM,EAAE,SAiB3C;IAEF;;OAEG;IACH,OAAO,CAAC,cAAc,CAgEpB;IAEF;;;;OAIG;IACH,OAAO,CAAC,kBAAkB,CAIxB;IAEF;;;;OAIG;IACH,OAAO,CAAC,mBAAmB,CA4BzB;IAEF;;;;;OAKG;IACH,cAAc,GAAI,MAAM,MAAM,EAAE,KAAG,WAAW,GAAG,SAAS,CAwFxD;IAEF;;;;OAIG;IAEH,eAAe,GAAI,UAAU;QAAE,QAAQ,CAAC,EAAE,OAAO,CAAA;KAAE,KAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAMvE;IAGF,OAAO,CAAC,sBAAsB,CAsC5B;IAEF;;;;;OAKG;IACH,eAAe,GAAI,MAAM,MAAM,KAAG,MAAM,CA4MtC;IAEF;;;;;;OAMG;IACH,OAAO,CAAC,cAAc,CAOpB;IAEF;;;;;;OAMG;IAEH,iBAAiB,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IAmCtE;;;;;;;;;;;;OAYG;IACH,OAAO,CAAC,MAAM,CAAC,yBAAyB;IA+CxC;;;;;;;;OAQG;IACH,qBAAqB,GACnB,SAAS,OAAO,EAChB,SAAQ,YAA0B,EAClC,OAAM,MAAM,EAAO,KAClB,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAiExB;IAEF;;;;;;;OAOG;IACH,OAAO,CAAC,MAAM,CAAC,mBAAmB,CAkDhC;IAEF;;;;;;;;OAQG;IACH,sBAAsB,GAEpB,WAAW,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC9B,QAAQ,OAAO,EACf,OAAO,MAAM,EACb,QAAQ,MAAM,UAqDd;CACH"}
|
package/dist/config.js
CHANGED
|
@@ -793,10 +793,70 @@ export class ConfigValidator {
|
|
|
793
793
|
value[childName]['default'] = getValueFromConfigSources(lowerLevelSources, childPath);
|
|
794
794
|
value[childName]['value'] = getValueFromConfigSources([...(currentLevelSource != undefined ? [currentLevelSource] : [])], childPath);
|
|
795
795
|
value[childName]['override'] = getValueFromConfigSources(higherLevelSources, childPath);
|
|
796
|
+
value[childName].secret = 'secret' in field ? field['secret'] : false;
|
|
796
797
|
}
|
|
797
798
|
}
|
|
798
799
|
return value;
|
|
799
800
|
}
|
|
801
|
+
/**
|
|
802
|
+
* Generates a custom environment file based on the provided schema.
|
|
803
|
+
*
|
|
804
|
+
* @param {boolean} [options.allEnv] If true, includes all environment variables, otherwise only includes non-secret fields.
|
|
805
|
+
* @param {ConfigSchema} schema
|
|
806
|
+
* @param {string[]} path
|
|
807
|
+
*
|
|
808
|
+
* @returns {Record<string, unknown>}
|
|
809
|
+
*/
|
|
810
|
+
generateCustomEnvFile = (allEnv, schema = this.schema, path = []) => {
|
|
811
|
+
const out = Object.create(null);
|
|
812
|
+
for (const key of Object.keys(schema)) {
|
|
813
|
+
const field = schema[key];
|
|
814
|
+
const currentPath = [...path, key];
|
|
815
|
+
switch (field.type) {
|
|
816
|
+
case 'object': {
|
|
817
|
+
const child = this.generateCustomEnvFile(allEnv, field.children, currentPath);
|
|
818
|
+
if (Object.keys(child).length > 0) {
|
|
819
|
+
out[key] = child;
|
|
820
|
+
}
|
|
821
|
+
break;
|
|
822
|
+
}
|
|
823
|
+
case 'array': {
|
|
824
|
+
break;
|
|
825
|
+
}
|
|
826
|
+
case 'union': {
|
|
827
|
+
const unionOut = Object.create(null);
|
|
828
|
+
let hasPrimitive = false;
|
|
829
|
+
for (const unionChild of field.children) {
|
|
830
|
+
const childResult = this.generateCustomEnvFile(allEnv, { [key]: unionChild }, path);
|
|
831
|
+
const childValue = childResult[key];
|
|
832
|
+
if (childValue !== undefined) {
|
|
833
|
+
if (typeof childValue === 'object') {
|
|
834
|
+
Object.assign(unionOut, childValue);
|
|
835
|
+
}
|
|
836
|
+
else {
|
|
837
|
+
hasPrimitive = true;
|
|
838
|
+
}
|
|
839
|
+
}
|
|
840
|
+
}
|
|
841
|
+
if (Object.keys(unionOut).length > 0) {
|
|
842
|
+
out[key] = unionOut;
|
|
843
|
+
}
|
|
844
|
+
else if (hasPrimitive) {
|
|
845
|
+
out[key] = currentPath.map((p) => p.toUpperCase()).join('_');
|
|
846
|
+
}
|
|
847
|
+
break;
|
|
848
|
+
}
|
|
849
|
+
default: {
|
|
850
|
+
if (!(allEnv || field.secret === true))
|
|
851
|
+
break;
|
|
852
|
+
const envKey = currentPath.map((p) => p.toUpperCase()).join('_');
|
|
853
|
+
out[key] = envKey;
|
|
854
|
+
break;
|
|
855
|
+
}
|
|
856
|
+
}
|
|
857
|
+
}
|
|
858
|
+
return out;
|
|
859
|
+
};
|
|
800
860
|
/**
|
|
801
861
|
* returns a list of config sources used by node config package, ordered from
|
|
802
862
|
* the lowest to the highest priority
|
|
@@ -910,4 +970,4 @@ export class ConfigValidator {
|
|
|
910
970
|
}
|
|
911
971
|
};
|
|
912
972
|
}
|
|
913
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vbGliL2NvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLE1BQU0sTUFBTSxRQUFRLENBQUM7QUFDNUIsT0FBTyxLQUFLLEVBQUUsTUFBTSxJQUFJLENBQUM7QUFDekIsT0FBTyxLQUFLLElBQUksTUFBTSxTQUFTLENBQUM7QUFDaEMsT0FBTyxJQUFJLE1BQU0sTUFBTSxDQUFDO0FBRXhCLE9BQU8sVUFBVSxFQUFFLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQVMxRSxPQUFPLEVBQ0wsa0JBQWtCLEVBQ2xCLGNBQWMsR0FDZixNQUFNLHFDQUFxQyxDQUFDO0FBQzdDLE9BQU8sRUFDTCxhQUFhLEVBQ2IseUJBQXlCLEVBQ3pCLFlBQVksR0FDYixNQUFNLFNBQVMsQ0FBQztBQUNqQixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsZUFBZSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFdkUsTUFBTSxPQUFPLGVBQWU7SUFDbEIsTUFBTSxDQUFlO0lBRTdCLFlBQW9CLE1BQW9CO1FBQ3RDLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztJQUN4QixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxZQUFZLEdBQUcsR0FBUyxFQUFFO1FBQ3hCLE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDbkMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN6QixPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUMsQ0FBQztJQUVGOztPQUVHO0lBQ0gsTUFBTSxDQUFDLFFBQVEsR0FBRyxDQUFDLFVBQWtCLEVBQW1CLEVBQUU7UUFDeEQsTUFBTSxhQUFhLEdBQUcsRUFBRSxDQUFDLFlBQVksQ0FBQyxVQUFVLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFFM0Qs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QyxDQUFDO1FBQzNELE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLEdBQUcsS0FBSyxXQUFXLEdBQUcsRUFBRSxDQUFDLENBQUM7UUFDbEUsTUFBTSxjQUFjLEdBQUcsRUFBRSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNqRCxJQUFJLGNBQWMsRUFBRSxDQUFDO1lBQ25CLEVBQUUsQ0FBQyxVQUFVLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQ3hDLENBQUM7UUFDRCxFQUFFLENBQUMsYUFBYSxDQUFDLFVBQVUsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUVyQyxNQUFNLGNBQWMsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBRXJELElBQUksQ0FBQztZQUNILElBQUksQ0FBQyxjQUFjLENBQUMsY0FBYyxDQUFDLENBQUM7WUFDcEMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUM1QixDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLEVBQUUsQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDMUIsSUFBSSxjQUFjLEVBQUUsQ0FBQztnQkFDbkIsRUFBRSxDQUFDLFVBQVUsQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLENBQUM7WUFDeEMsQ0FBQztZQUNELE1BQU0sS0FBSyxDQUFDO1FBQ2QsQ0FBQztJQUNILENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IElDb25maWcsIElDb25maWdTb3VyY2UgfSBmcm9tICdjb25maWcnO1xuaW1wb3J0IGNvbmZpZyBmcm9tICdjb25maWcnO1xuaW1wb3J0ICogYXMgZnMgZnJvbSAnZnMnO1xuaW1wb3J0ICogYXMgeWFtbCBmcm9tICdqcy15YW1sJztcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuXG5pbXBvcnQgSnNvbkJpZ0ludCwgeyBKc29uQmlnSW50RmFjdG9yeSB9IGZyb20gJ0Byb3Nlbi1icmlkZ2UvanNvbi1iaWdpbnQnO1xuXG5pbXBvcnQge1xuICBDb25maWdGaWVsZCxcbiAgQ29uZmlnU2NoZW1hLFxuICBVbmlvbkZpZWxkLFxuICBWYWx1ZVR5cGUsXG59IGZyb20gJy4vc2NoZW1hL3R5cGVzL2ZpZWxkcyc7XG5pbXBvcnQgeyBXaGVuIH0gZnJvbSAnLi9zY2hlbWEvdHlwZXMvdmFsaWRhdGlvbnMnO1xuaW1wb3J0IHtcbiAgcHJvcGVydHlWYWxpZGF0b3JzLFxuICBzdXBwb3J0ZWRUeXBlcyxcbn0gZnJvbSAnLi9zY2hlbWEvVmFsaWRhdG9ycy9maWVsZFByb3BlcnRpZXMnO1xuaW1wb3J0IHtcbiAgZ2V0U291cmNlTmFtZSxcbiAgZ2V0VmFsdWVGcm9tQ29uZmlnU291cmNlcyxcbiAgdG9QYXNjYWxDYXNlLFxufSBmcm9tICcuL3V0aWxzJztcbmltcG9ydCB7IHZhbHVlVmFsaWRhdGlvbnMsIHZhbHVlVmFsaWRhdG9ycyB9IGZyb20gJy4vdmFsdWUvdmFsaWRhdG9ycyc7XG5cbmV4cG9ydCBjbGFzcyBDb25maWdWYWxpZGF0b3Ige1xuICBwcml2YXRlIHNjaGVtYTogQ29uZmlnU2NoZW1hO1xuXG4gIHByaXZhdGUgY29uc3RydWN0b3Ioc2NoZW1hOiBDb25maWdTY2hlbWEpIHtcbiAgICB0aGlzLnNjaGVtYSA9IHNjaGVtYTtcbiAgICB0aGlzLnZhbGlkYXRlU2NoZW1hKCk7XG4gIH1cblxuICAvKipcbiAgICogQnVpbGRzIGFuZCByZXR1cm5zIHRoZSBmaW5hbCBjb25maWd1cmF0aW9uIG9iamVjdCBieSB0cmFuc2Zvcm1pbmcgYW5kIHZhbGlkYXRpbmdcbiAgICpcbiAgICogIFQgLSBUaGUgdHlwZSBvZiB0aGUgZmluYWwgbm9ybWFsaXplZCBjb25maWd1cmF0aW9uIG9iamVjdC5cbiAgICogQHJldHVybnMge1R9IFRoZSBub3JtYWxpemVkIGNvbmZpZ3VyYXRpb24gb2JqZWN0XG4gICAqL1xuICBidWlsZENvbmZpZ3MgPSA8VD4oKTogVCA9PiB7XG4gICAgY29uc3QgcmF3ID0gY29uZmlnLnV0aWwudG9PYmplY3QoKTtcbiAgICB0aGlzLnZhbGlkYXRlQ29uZmlnKHJhdyk7XG4gICAgcmV0dXJuIHJhdztcbiAgfTtcblxuICAvKipcbiAgICogY3JlYXRlIENvbmZpZ1ZhbGlkYXRvciBmcm9tIHNjaGVtYSBmaWxlIHBhdGhcbiAgICovXG4gIHN0YXRpYyBmcm9tRmlsZSA9IChzY2hlbWFQYXRoOiBzdHJpbmcpOiBDb25maWdWYWxpZGF0b3IgPT4ge1xuICAgIGNvbnN0IHJhd1NjaGVtYURhdGEgPSBmcy5yZWFkRmlsZVN5bmMoc2NoZW1hUGF0aCwgJ3V0Zi04Jyk7XG5cbiAgICBjb25zdCBqc29uQmlnSW50ID0gSnNvbkJpZ0ludEZhY3Rvcnkoe1xuICAgICAgYWx3YXlzUGFyc2VBc0JpZzogZmFsc2UsXG4gICAgICB1c2VOYXRpdmVCaWdJbnQ6IHRydWUsXG4gICAgfSk7XG5cbiAgICBjb25zdCBzY2hlbWEgPSBqc29uQmlnSW50LnBhcnNlKHJhd1NjaGVtYURhdGEpO1xuICAgIHJldHVybiBuZXcgQ29uZmlnVmFsaWRhdG9yKHNjaGVtYSk7XG4gIH07XG5cbiAgLyoqXG4gICAqIGNyZWF0ZSBDb25maWdWYWxpZGF0b3IgZnJvbSBzY2hlbWFcbiAgICpcbiAgICogQHBhcmFtIHtDb25maWdTY2hlbWF9IHNjaGVtYVxuICAgKi9cbiAgc3RhdGljIGZyb21TY2hlbWEgPSAoc2NoZW1hOiBDb25maWdTY2hlbWEpOiBDb25maWdWYWxpZGF0b3IgPT4ge1xuICAgIHJldHVybiBuZXcgQ29uZmlnVmFsaWRhdG9yKHNjaGVtYSk7XG4gIH07XG5cbiAgLyoqXG4gICAqIHZhbGlkYXRlcyB0aGUgcGFzc2VkIGNvbmZpZyBhZ2FpbnN0IHRoZSBpbnN0YW5jZSdzIHNjaGVtYVxuICAgKlxuICAgKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsIGFueT59IGNvbmZpZ1xuICAgKi9cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgcHVibGljIHZhbGlkYXRlQ29uZmlnKGNvbmZpZzogUmVjb3JkPHN0cmluZywgYW55Pikge1xuICAgIHRoaXMudmFsaWRhdGVWYWx1ZShcbiAgICAgIGNvbmZpZyxcbiAgICAgIHsgdHlwZTogJ29iamVjdCcsIGNoaWxkcmVuOiB0aGlzLnNjaGVtYSB9LFxuICAgICAgY29uZmlnLFxuICAgICAgW10sXG4gICAgKTtcblxuICAgIHRoaXMudmFsaWRhdGVTdWJDb25maWcoY29uZmlnLCBjb25maWcsIHRoaXMuc2NoZW1hLCBbXSk7XG4gIH1cblxuICAvKipcbiAgICogdHJhdmVyc2VzIGFuZCB2YWxpZGF0ZXMgYSBzdWJjb25maWcgdXNpbmcgdGhlIHN1YnNjaGVtYVxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsIGFueT59IGNvbmZpZyAtIFRoZSBmdWxsIHJvb3QgY29uZmlndXJhdGlvbiBvYmplY3RcbiAgICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCBhbnk+fSBzdWJDb25maWcgLSBUaGUgc2xpY2Ugb2YgY29uZmlnIGN1cnJlbnRseSBiZWluZ1xuICAgKiAgIHZhbGlkYXRlZFxuICAgKiBAcGFyYW0ge0NvbmZpZ1NjaGVtYX0gc3ViU2NoZW1hXG4gICAqIEBwYXJhbSB7c3RyaW5nW119IHBhdGhcbiAgICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCBhbnk+fSBjb250ZXh0IC0gaGUgbG9jYWwgc2NvcGUgb2JqZWN0IGZvclxuICAgKiAgIHJlc29sdmluZyBgd2hlbmAgY29uZGl0aW9ucy5cbiAgICogQG1lbWJlcm9mIENvbmZpZ1ZhbGlkYXRvclxuICAgKi9cbiAgcHJpdmF0ZSB2YWxpZGF0ZVN1YkNvbmZpZyhcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgIGNvbmZpZzogUmVjb3JkPHN0cmluZywgYW55PixcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgIHN1YkNvbmZpZzogUmVjb3JkPHN0cmluZywgYW55PixcbiAgICBzdWJTY2hlbWE6IENvbmZpZ1NjaGVtYSxcbiAgICBwYXRoOiBzdHJpbmdbXSxcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgIGNvbnRleHQ/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+LFxuICApIHtcbiAgICBjb25zdCBlcnJvclByZWFtYmxlID0gKHBhdGg6IEFycmF5PHN0cmluZz4pID0+XG4gICAgICBgY29uZmlnIHZhbGlkYXRpb24gZmFpbGVkIGZvciBcIiR7cGF0aC5qb2luKCcuJyl9XCIgZmllbGRgO1xuICAgIGZvciAoY29uc3QgbmFtZSBvZiBPYmplY3Qua2V5cyhzdWJTY2hlbWEpKSB7XG4gICAgICBjb25zdCBjaGlsZFBhdGg6IHN0cmluZ1tdID0gcGF0aC5jb25jYXQoW25hbWVdKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGZpZWxkID0gc3ViU2NoZW1hW25hbWVdO1xuICAgICAgICBsZXQgdmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgICAgIGlmIChzdWJDb25maWcgIT0gdW5kZWZpbmVkICYmIE9iamVjdC5oYXNPd24oc3ViQ29uZmlnLCBuYW1lKSkge1xuICAgICAgICAgIHZhbHVlID0gc3ViQ29uZmlnW25hbWVdO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy52YWxpZGF0ZVZhbHVlKHZhbHVlLCBmaWVsZCwgY29uZmlnLCBjaGlsZFBhdGgpO1xuXG4gICAgICAgIC8vIGlmIGEgbm9kZS9maWVsZCBpcyBvZiB0eXBlIG9iamVjdCBhbmQgdGh1cyBpcyBhIHN1YnRyZWUsIHRyYXZlcnNlIGl0XG4gICAgICAgIGlmIChmaWVsZC50eXBlID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgIHRoaXMudmFsaWRhdGVTdWJDb25maWcoXG4gICAgICAgICAgICBjb25maWcsXG4gICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgIGZpZWxkLmNoaWxkcmVuLFxuICAgICAgICAgICAgY2hpbGRQYXRoLFxuICAgICAgICAgICAgY29udGV4dCxcbiAgICAgICAgICApO1xuICAgICAgICB9IGVsc2UgaWYgKGZpZWxkLnR5cGUgPT09ICdhcnJheScpIHtcbiAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICAgIHZhbHVlLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgICAgICAgICAgQ29uZmlnVmFsaWRhdG9yLm1vZGlmeU9iamVjdChjb25maWcsIGl0ZW0sIGNoaWxkUGF0aCk7XG4gICAgICAgICAgICAgIHRoaXMudmFsaWRhdGVTdWJDb25maWcoXG4gICAgICAgICAgICAgICAgY29uZmlnLFxuICAgICAgICAgICAgICAgIHsgW25hbWVdOiBpdGVtIH0sXG4gICAgICAgICAgICAgICAgeyBbbmFtZV06IGZpZWxkLml0ZW1zIH0sXG4gICAgICAgICAgICAgICAgcGF0aCxcbiAgICAgICAgICAgICAgICB7IFtuYW1lXTogaXRlbSB9LFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICBDb25maWdWYWxpZGF0b3IubW9kaWZ5T2JqZWN0KGNvbmZpZywgdmFsdWUsIGNoaWxkUGF0aCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoZmllbGQudHlwZSA9PT0gJ3VuaW9uJykge1xuICAgICAgICAgIHRoaXMudmFsaWRhdGVVbmlvblZhbHVlKHZhbHVlLCBuYW1lLCBmaWVsZCwgY29uZmlnLCBwYXRoLCBjb250ZXh0KTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGAke2Vycm9yUHJlYW1ibGUoY2hpbGRQYXRoKX06ICR7ZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBlcnJvcn1gLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiB0cmF2ZXJzZXMgYW5kIHZhbGlkYXRlcyBhIHVuaW9uIHN1YmNvbmZpZyB1c2luZyB0aGUgc3Vic2NoZW1hXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7YW55fSB2YWx1ZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICAgKiBAcGFyYW0ge1VuaW9uRmllbGR9IGZpZWxkXG4gICAqIEBwYXJhbSB7UmVjb3JkPHN0cmluZywgYW55Pn0gY29uZmlnXG4gICAqIEBwYXJhbSB7c3RyaW5nW119IGNoaWxkUGF0aFxuICAgKlxuICAgKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsIGFueT59IGNvbnRleHQgLSBoZSBsb2NhbCBzY29wZSBvYmplY3QgZm9yXG4gICAqICAgcmVzb2x2aW5nIGB3aGVuYCBjb25kaXRpb25zLlxuICAgKi9cbiAgcHJpdmF0ZSB2YWxpZGF0ZVVuaW9uVmFsdWUoXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICB2YWx1ZTogYW55LFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBmaWVsZDogVW5pb25GaWVsZCxcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgIGNvbmZpZzogUmVjb3JkPHN0cmluZywgYW55PixcbiAgICBjaGlsZFBhdGg6IHN0cmluZ1tdLFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgY29udGV4dD86IFJlY29yZDxzdHJpbmcsIGFueT4sXG4gICkge1xuICAgIGxldCBpc01hdGNoZWQgPSBmYWxzZTtcbiAgICBsZXQgbGFzdEVycm9yTWVzc2FnZSA9ICcnO1xuXG4gICAgZm9yIChjb25zdCBhY3RpdmVGaWVsZCBvZiBmaWVsZC5jaGlsZHJlbikge1xuICAgICAgdHJ5IHtcbiAgICAgICAgdGhpcy52YWxpZGF0ZVN1YkNvbmZpZyhcbiAgICAgICAgICBjb25maWcsXG4gICAgICAgICAgeyBbbmFtZV06IHZhbHVlIH0sXG4gICAgICAgICAgeyBbbmFtZV06IGFjdGl2ZUZpZWxkIH0sXG4gICAgICAgICAgY2hpbGRQYXRoLFxuICAgICAgICAgIHsgW25hbWVdOiB2YWx1ZSB9LFxuICAgICAgICApO1xuICAgICAgICBpc01hdGNoZWQgPSB0cnVlO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBsYXN0RXJyb3JNZXNzYWdlID0gZSBpbnN0YW5jZW9mIEVycm9yID8gZS5tZXNzYWdlIDogU3RyaW5nKGUpO1xuICAgICAgICBjb25zb2xlLmRlYnVnKFxuICAgICAgICAgIGBVbmlvbiBicmFuY2ggZm9yIFwiJHtjaGlsZFBhdGguam9pbignLicpfVwiIG5vdCBtYXRjaGVkOiAke2xhc3RFcnJvck1lc3NhZ2V9YCxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIWlzTWF0Y2hlZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgVmFsdWUgZm9yIFwiJHtjaGlsZFBhdGguam9pbignLicpfVwiIGRvZXMgbm90IG1hdGNoIGFueSBvZiB0aGUgdW5pb24gdHlwZXMuIExhc3QgZXJyb3I6ICR7bGFzdEVycm9yTWVzc2FnZX1gLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAoZmllbGQudmFsaWRhdGlvbnMpIHtcbiAgICAgIGNoaWxkUGF0aCA9IGNoaWxkUGF0aC5jb25jYXQoW25hbWVdKTtcbiAgICAgIGNvbnN0IGN1cnJlbnRWYWx1ZSA9XG4gICAgICAgIHZhbHVlICE9PSB1bmRlZmluZWRcbiAgICAgICAgICA/IHZhbHVlXG4gICAgICAgICAgOiBDb25maWdWYWxpZGF0b3IudmFsdWVBdChjb25maWcsIGNoaWxkUGF0aCk7XG5cbiAgICAgIGZvciAoY29uc3QgdmFsaWRhdGlvbiBvZiBmaWVsZC52YWxpZGF0aW9ucykge1xuICAgICAgICBjb25zdCB2YWxpZGF0aW9uTmFtZSA9IE9iamVjdC5rZXlzKHZhbGlkYXRpb24pLmZpbmQoXG4gICAgICAgICAgKGtleSkgPT4ga2V5ICE9PSAnd2hlbicgJiYga2V5ICE9PSAnZXJyb3InLFxuICAgICAgICApO1xuXG4gICAgICAgIGlmICh2YWxpZGF0aW9uTmFtZSAmJiB2YWx1ZVZhbGlkYXRpb25zW2ZpZWxkLnR5cGVdPy5bdmFsaWRhdGlvbk5hbWVdKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHZhbHVlVmFsaWRhdGlvbnNbZmllbGQudHlwZV1bdmFsaWRhdGlvbk5hbWVdKFxuICAgICAgICAgICAgICBjdXJyZW50VmFsdWUsXG4gICAgICAgICAgICAgIHZhbGlkYXRpb24sXG4gICAgICAgICAgICAgIGNvbmZpZyxcbiAgICAgICAgICAgICAgdGhpcyxcbiAgICAgICAgICAgICAgY29udGV4dCxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgdmFsaWRhdGlvbi5lcnJvciB8fFxuICAgICAgICAgICAgICAgIChlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvcikpLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogc2V0cyBhbiBvYmplY3QncyBzcGVjaWZpYyBzdWJ0cmVlIHRvIHRoZSBzcGVjaWZpZWQgdmFsdWVcbiAgICpcbiAgICogQHN0YXRpY1xuICAgKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsIGFueT59IG9ialxuICAgKiBAcGFyYW0geyp9IG5ld1ZhbHVlXG4gICAqIEBwYXJhbSB7c3RyaW5nW119IHBhdGhcbiAgICogQHJldHVybiB7Kn1cbiAgICogQG1lbWJlcm9mIENvbmZpZ1ZhbGlkYXRvclxuICAgKi9cbiAgc3RhdGljIG1vZGlmeU9iamVjdChcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgIG9iajogUmVjb3JkPHN0cmluZywgYW55PixcbiAgICBuZXdWYWx1ZTogVmFsdWVUeXBlLFxuICAgIHBhdGg6IHN0cmluZ1tdLFxuICApIHtcbiAgICBsZXQgdmFsdWUgPSBvYmo7XG4gICAgZm9yIChjb25zdCBrZXkgb2YgcGF0aC5zbGljZSgwLCAtMSkpIHtcbiAgICAgIGlmICh2YWx1ZSAhPSB1bmRlZmluZWQgJiYgT2JqZWN0Lmhhc093bih2YWx1ZSwga2V5KSkge1xuICAgICAgICB2YWx1ZSA9IHZhbHVlW2tleV07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YWx1ZVtrZXldID0ge307XG4gICAgICAgIHZhbHVlID0gdmFsdWVba2V5XTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBsYXN0S2V5ID0gcGF0aC5hdCgtMSk7XG4gICAgaWYgKGxhc3RLZXkgIT0gdW5kZWZpbmVkKSB7XG4gICAgICB2YWx1ZVtsYXN0S2V5XSA9IG5ld1ZhbHVlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiB2YWxpZGF0ZXMgYSB2YWx1ZSBpbiBjb25maWcgb2JqZWN0XG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAgICogQHBhcmFtIHtDb25maWdGaWVsZH0gZmllbGQgdGhlIGZpZWxkIHNwZWNpZmljYXRpb24gaW4gc2NoZW1hXG4gICAqIEBwYXJhbSB7UmVjb3JkPHN0cmluZywgYW55Pn0gY29uZmlnIHRoZSBjb25maWcgb2JqZWN0XG4gICAqIEBwYXJhbSB7c3RyaW5nW119IHBhdGhcbiAgICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkfSBjb250ZXh0XG4gICAqL1xuICBwcml2YXRlIHZhbGlkYXRlVmFsdWUgPSAoXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICB2YWx1ZTogYW55LFxuICAgIGZpZWxkOiBDb25maWdGaWVsZCxcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgIGNvbmZpZzogUmVjb3JkPHN0cmluZywgYW55PixcbiAgICBwYXRoOiBzdHJpbmdbXSxcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgIGNvbnRleHQ/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+LFxuICApID0+IHtcbiAgICBpZiAodmFsdWUgIT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAoZmllbGQudHlwZSA9PT0gJ2JpZ2ludCcpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgJiZcbiAgICAgICAgICAodmFsdWUgPiBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUiB8fCB2YWx1ZSA8IE51bWJlci5NSU5fU0FGRV9JTlRFR0VSKVxuICAgICAgICApIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICBgRmllbGQgXCIke3BhdGguam9pbignLicpfVwiIGlzIGRlY2xhcmVkIGFzIGEgQmlnSW50LCBidXQgYSBOdW1iZXIgd2FzIHByb3ZpZGVkIHdpdGggaW5zdWZmaWNpZW50IHByZWNpc2lvbi4gVmFsdWVzIGV4Y2VlZGluZyA5MDA3MTk5MjU0NzQwOTkxIG11c3QgYmUgc3VwcGxpZWQgYXMgYSBzdHJpbmcgdG8gZW5zdXJlIGFjY3VyYWN5LmAsXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICB0cnkge1xuICAgICAgICAgIHZhbHVlID0gQmlnSW50KHZhbHVlKTtcbiAgICAgICAgICBDb25maWdWYWxpZGF0b3IubW9kaWZ5T2JqZWN0KGNvbmZpZywgdmFsdWUsIHBhdGgpO1xuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICBgQ2Fubm90IGNvbnZlcnQgJHt2YWx1ZX0gdG8gYSBCaWdJbnQgZm9yIGZpZWxkIFwiJHtwYXRoLmpvaW4oJy4nKX1cImAsXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGZpZWxkLnR5cGUgPT09ICdudW1iZXInKSB7XG4gICAgICAgIGlmIChpc05hTihOdW1iZXIodmFsdWUpKSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgIGBGaWVsZCBcIiR7cGF0aC5qb2luKCcuJyl9XCIgbXVzdCBiZSBhIHZhbGlkIG51bWJlci4gUGxlYXNlIHByb3ZpZGUgYSBzdWl0YWJsZSBmb3JtYXQuYCxcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHZhbHVlID0gTnVtYmVyKHZhbHVlKTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHZhbHVlID4gTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIgfHxcbiAgICAgICAgICB2YWx1ZSA8IE51bWJlci5NSU5fU0FGRV9JTlRFR0VSXG4gICAgICAgICkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgIGBWYWx1ZSBmb3IgXCIke3BhdGguam9pbignLicpfVwiIGlzIHRvbyBsYXJnZSBvciB0b28gc21hbGwuIFBsZWFzZSBlbnRlciBhIHZhbGlkIG51bWJlci5gLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgQ29uZmlnVmFsaWRhdG9yLm1vZGlmeU9iamVjdChjb25maWcsIHZhbHVlLCBwYXRoKTtcbiAgICAgIH1cbiAgICAgIHZhbHVlVmFsaWRhdG9yc1tmaWVsZC50eXBlXSh2YWx1ZSwgZmllbGQpO1xuICAgIH1cbiAgICBpZiAoXG4gICAgICB2YWx1ZSA9PSB1bmRlZmluZWQgJiZcbiAgICAgIGZpZWxkLnR5cGUgIT09ICdvYmplY3QnICYmXG4gICAgICBmaWVsZC50eXBlICE9PSAndW5pb24nICYmXG4gICAgICBmaWVsZC5kZWZhdWx0XG4gICAgKSB7XG4gICAgICB2YWx1ZSA9IGZpZWxkLmRlZmF1bHQ7XG4gICAgICBDb25maWdWYWxpZGF0b3IubW9kaWZ5T2JqZWN0KGNvbmZpZywgZmllbGQuZGVmYXVsdCwgcGF0aCk7XG4gICAgfVxuICAgIGlmIChcbiAgICAgIGZpZWxkLnR5cGUgIT09ICdvYmplY3QnICYmXG4gICAgICBmaWVsZC50eXBlICE9PSAnYXJyYXknICYmXG4gICAgICBmaWVsZC50eXBlICE9PSAndW5pb24nICYmXG4gICAgICBmaWVsZC52YWxpZGF0aW9uc1xuICAgICkge1xuICAgICAgZm9yIChjb25zdCB2YWxpZGF0aW9uIG9mIGZpZWxkLnZhbGlkYXRpb25zKSB7XG4gICAgICAgIGNvbnN0IG5hbWUgPSBPYmplY3Qua2V5cyh2YWxpZGF0aW9uKS5maWx0ZXIoXG4gICAgICAgICAgKGtleSkgPT4ga2V5ICE9PSAnd2hlbicgJiYga2V5ICE9PSAnZXJyb3InLFxuICAgICAgICApWzBdO1xuICAgICAgICBpZiAoT2JqZWN0Lmhhc093bih2YWx1ZVZhbGlkYXRpb25zW2ZpZWxkLnR5cGVdLCBuYW1lKSkge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICB2YWx1ZVZhbGlkYXRpb25zW2ZpZWxkLnR5cGVdW25hbWVdKFxuICAgICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgICAgdmFsaWRhdGlvbixcbiAgICAgICAgICAgICAgY29uZmlnLFxuICAgICAgICAgICAgICB0aGlzLFxuICAgICAgICAgICAgICBjb250ZXh0LFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgaWYgKHZhbGlkYXRpb24uZXJyb3IgIT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcih2YWxpZGF0aW9uLmVycm9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICAvKipcbiAgICogZGV0ZXJtaW5lcyBpZiBhIHdoZW4gY2xhdXNlIGluIHZhbGlkYXRpb25zIHNlY3Rpb24gb2YgYSBzY2hlbWEgZmllbGQgaXNcbiAgICogc2F0aXNmaWVkXG4gICAqXG4gICAqIEBwYXJhbSB7V2hlbn0gd2hlblxuICAgKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsIGFueT59IGNvbmZpZ1xuICAgKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsIGFueT59IGNvbnRleHRcbiAgICogQHJldHVybiB7Ym9vbGVhbn1cbiAgICovXG4gIHB1YmxpYyBpc1doZW5UcnVlID0gKFxuICAgIHdoZW46IFdoZW4sXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICBjb25maWc6IFJlY29yZDxzdHJpbmcsIGFueT4sXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICBjb250ZXh0PzogUmVjb3JkPHN0cmluZywgYW55PixcbiAgKTogYm9vbGVhbiA9PiB7XG4gICAgbGV0IHBhdGhQYXJ0cyA9IHdoZW4ucGF0aC5zcGxpdCgnLicpO1xuXG4gICAgaWYgKGNvbnRleHQgIT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCBsb2NhbFZhbHVlID0gQ29uZmlnVmFsaWRhdG9yLnZhbHVlQXQoY29udGV4dCwgcGF0aFBhcnRzKTtcbiAgICAgIGlmIChsb2NhbFZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIGxvY2FsVmFsdWUgPT09IHdoZW4udmFsdWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHJlbGF0aXZlUGFydHMgPSBwYXRoUGFydHMuc2xpY2UoLTEpO1xuICAgICAgY29uc3QgcmVsYXRpdmVWYWx1ZSA9IENvbmZpZ1ZhbGlkYXRvci52YWx1ZUF0KGNvbnRleHQsIHJlbGF0aXZlUGFydHMpO1xuICAgICAgaWYgKHJlbGF0aXZlVmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gcmVsYXRpdmVWYWx1ZSA9PT0gd2hlbi52YWx1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCB2YWx1ZSA9IENvbmZpZ1ZhbGlkYXRvci52YWx1ZUF0KGNvbmZpZywgcGF0aFBhcnRzKTtcbiAgICByZXR1cm4gdmFsdWUgIT0gdW5kZWZpbmVkICYmIHZhbHVlID09PSB3aGVuLnZhbHVlO1xuICB9O1xuXG4gIC8qKlxuICAgKiByZXR1cm5zIHRoZSB2YWx1ZSBhdCBzcGVjaWZpZWQgcGF0aCBpbiBjb25maWcgb2JqZWN0XG4gICAqXG4gICAqIEBzdGF0aWNcbiAgICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCBhbnk+fSBjb25maWdcbiAgICogQHBhcmFtIHtzdHJpbmdbXX0gcGF0aFxuICAgKiBAcmV0dXJuIHsqfVxuICAgKi9cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgc3RhdGljIHZhbHVlQXQgPSAoY29uZmlnOiBhbnksIHBhdGg6IHN0cmluZ1tdKSA9PiB7XG4gICAgbGV0IHZhbHVlID0gY29uZmlnO1xuICAgIGZvciAoY29uc3Qga2V5IG9mIHBhdGgpIHtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICBpZiAoaXNOYU4oTnVtYmVyKGtleSkpKSB7XG4gICAgICAgICAgdmFsdWUgPSB2YWx1ZS5tYXAoKGl0ZW0pID0+IGl0ZW0/LltrZXldKS5maW5kKCh2KSA9PiB2ICE9PSB1bmRlZmluZWQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IGluZGV4ID0gTnVtYmVyKGtleSk7XG4gICAgICAgICAgdmFsdWUgPSB2YWx1ZVtpbmRleF07XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAodmFsdWUgIT0gdW5kZWZpbmVkICYmIE9iamVjdC5oYXNPd24odmFsdWUsIGtleSkpIHtcbiAgICAgICAgdmFsdWUgPSB2YWx1ZVtrZXldO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9O1xuXG4gIC8qKlxuICAgKiB2YWxpZGF0ZXMgdGhpcy5zY2hlbWEgYW5kIHRocm93cyBleGNlcHRpb24gaWYgYW55IGVycm9ycyBmb3VuZFxuICAgKi9cbiAgcHJpdmF0ZSB2YWxpZGF0ZVNjaGVtYSA9ICgpID0+IHtcbiAgICBjb25zdCBlcnJvclByZWFtYmxlID0gKHBhdGg6IEFycmF5PHN0cmluZz4pID0+XG4gICAgICBgU2NoZW1hIHZhbGlkYXRpb24gZmFpbGVkIGZvciBcIiR7cGF0aC5qb2luKCcuJyl9XCIgZmllbGRgO1xuXG4gICAgY29uc3Qgc3RhY2s6IEFycmF5PHtcbiAgICAgIHN1YlNjaGVtYTogQ29uZmlnU2NoZW1hO1xuICAgICAgcGFyZW50UGF0aDogQXJyYXk8c3RyaW5nPjtcbiAgICB9PiA9IFtcbiAgICAgIHtcbiAgICAgICAgc3ViU2NoZW1hOiB0aGlzLnNjaGVtYSxcbiAgICAgICAgcGFyZW50UGF0aDogW10sXG4gICAgICB9LFxuICAgIF07XG5cbiAgICAvLyBUcmF2ZXJzZXMgdGhlIHNjaGVtYSBvYmplY3QgdHJlZSBkZXB0aCBmaXJzdCBhbmQgdmFsaWRhdGUgZmllbGRzXG4gICAgd2hpbGUgKHN0YWNrLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IHsgc3ViU2NoZW1hLCBwYXJlbnRQYXRoIH0gPSBzdGFjay5wb3AoKSE7XG5cbiAgICAgIC8vIHByb2Nlc3MgY2hpbGRyZW4gb2YgY3VycmVudCBvYmplY3QgZmllbGRcbiAgICAgIGZvciAoY29uc3QgbmFtZSBvZiBPYmplY3Qua2V5cyhzdWJTY2hlbWEpLnJldmVyc2UoKSkge1xuICAgICAgICBjb25zdCBwYXRoID0gcGFyZW50UGF0aC5jb25jYXQoW25hbWVdKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICB0aGlzLnZhbGlkYXRlQ29uZmlnTmFtZShuYW1lKTtcbiAgICAgICAgICBjb25zdCBmaWVsZCA9IHN1YlNjaGVtYVtuYW1lXTtcblxuICAgICAgICAgIGlmICghT2JqZWN0Lmhhc093bihmaWVsZCwgJ3R5cGUnKSB8fCB0eXBlb2YgZmllbGQudHlwZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgYGV2ZXJ5IHNjaGVtYSBmaWVsZCBtdXN0IGhhdmUgYSBcInR5cGVcIiBwcm9wZXJ0eSBvZiB0eXBlIFwic3RyaW5nXCJgLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoIXN1cHBvcnRlZFR5cGVzLmluY2x1ZGVzKGZpZWxkLnR5cGUpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYHVuc3VwcG9ydGVkIGZpZWxkIHR5cGUgXCIke2ZpZWxkLnR5cGV9XCJgKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aGlzLnZhbGlkYXRlU2NoZW1hRmllbGQoZmllbGQpO1xuXG4gICAgICAgICAgLy8gaWYgdGhlIGNoaWxkIGlzIGFuIG9iamVjdCBmaWVsZCBpdHNlbGYgYWRkIGl0IHRvIHN0YWNrIGZvclxuICAgICAgICAgIC8vIHByb2Nlc3NpbmdcbiAgICAgICAgICBpZiAoZmllbGQudHlwZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIHN0YWNrLnB1c2goe1xuICAgICAgICAgICAgICBzdWJTY2hlbWE6IGZpZWxkLmNoaWxkcmVuLFxuICAgICAgICAgICAgICBwYXJlbnRQYXRoOiBwYXRoLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBlbHNlIGlmIChmaWVsZC50eXBlID09PSAnYXJyYXknKSB7XG4gICAgICAgICAgICBzdGFjay5wdXNoKHtcbiAgICAgICAgICAgICAgc3ViU2NoZW1hOiB7IFtuYW1lXTogZmllbGQuaXRlbXMgfSxcbiAgICAgICAgICAgICAgcGFyZW50UGF0aDogcGF0aCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0gZWxzZSBpZiAoZmllbGQudHlwZSA9PT0gJ3VuaW9uJykge1xuICAgICAgICAgICAgZmllbGQuY2hpbGRyZW4uZm9yRWFjaCgodW5pb25DaGlsZCwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgc3RhY2sucHVzaCh7XG4gICAgICAgICAgICAgICAgc3ViU2NoZW1hOiB7IFtgJHtuYW1lfV91bmlvbl8ke2luZGV4fWBdOiB1bmlvbkNoaWxkIH0sXG4gICAgICAgICAgICAgICAgcGFyZW50UGF0aDogcGF0aCxcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgYCR7ZXJyb3JQcmVhbWJsZShwYXRoKX06ICR7ZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBlcnJvcn1gLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgLyoqXG4gICAqIHZhbGlkYXRlcyBjb25maWcga2V5IG5hbWVcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAgICovXG4gIHByaXZhdGUgdmFsaWRhdGVDb25maWdOYW1lID0gKG5hbWU6IHN0cmluZykgPT4ge1xuICAgIGlmIChuYW1lLmluY2x1ZGVzKCcuJykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgY29uZmlnIGtleSBuYW1lIGNhbiBub3QgY29udGFpbiB0aGUgJy4nIGNoYXJhY3RlcmApO1xuICAgIH1cbiAgfTtcblxuICAvKipcbiAgICogdmFsaWRhdGVzIHBhc3NlZCBzY2hlbWEgZmllbGQgc3RydWN0dXJlXG4gICAqXG4gICAqIEBwYXJhbSB7Q29uZmlnRmllbGR9IGZpZWxkXG4gICAqL1xuICBwcml2YXRlIHZhbGlkYXRlU2NoZW1hRmllbGQgPSAoZmllbGQ6IENvbmZpZ0ZpZWxkKSA9PiB7XG4gICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMoZmllbGQpKSB7XG4gICAgICBpZiAoXG4gICAgICAgICFPYmplY3QuaGFzT3duKHByb3BlcnR5VmFsaWRhdG9ycy5hbGwsIGtleSkgJiZcbiAgICAgICAgIU9iamVjdC5oYXNPd24ocHJvcGVydHlWYWxpZGF0b3JzLnByaW1pdGl2ZSwga2V5KSAmJlxuICAgICAgICAhT2JqZWN0Lmhhc093bihwcm9wZXJ0eVZhbGlkYXRvcnNbZmllbGQudHlwZV0sIGtleSlcbiAgICAgICkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYHNjaGVtYSBmaWVsZCBoYXMgdW5rbm93biBwcm9wZXJ0eSBcIiR7a2V5fVwiYCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCB2YWxpZGF0b3Igb2YgT2JqZWN0LnZhbHVlcyhwcm9wZXJ0eVZhbGlkYXRvcnMuYWxsKSkge1xuICAgICAgdmFsaWRhdG9yKGZpZWxkLCB0aGlzKTtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICBmaWVsZC50eXBlICE9PSAnb2JqZWN0JyAmJlxuICAgICAgZmllbGQudHlwZSAhPT0gJ2FycmF5JyAmJlxuICAgICAgZmllbGQudHlwZSAhPT0gJ3VuaW9uJ1xuICAgICkge1xuICAgICAgZm9yIChjb25zdCB2YWxpZGF0b3Igb2YgT2JqZWN0LnZhbHVlcyhwcm9wZXJ0eVZhbGlkYXRvcnMucHJpbWl0aXZlKSkge1xuICAgICAgICB2YWxpZGF0b3IoZmllbGQsIHRoaXMpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZvciAoY29uc3QgdmFsaWRhdG9yIG9mIE9iamVjdC52YWx1ZXMocHJvcGVydHlWYWxpZGF0b3JzW2ZpZWxkLnR5cGVdKSkge1xuICAgICAgdmFsaWRhdG9yKGZpZWxkLCB0aGlzKTtcbiAgICB9XG4gIH07XG5cbiAgLyoqXG4gICAqIHJldHVybnMgYSBmaWVsZCBjb3JyZXNwb25kaW5nIHRvIGEgcGF0aCBpbiBzY2hlbWEgdHJlZVxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBwYXRoXG4gICAqIEByZXR1cm4geyhDb25maWdGaWVsZCB8IHVuZGVmaW5lZCl9IHJldHVybnMgdW5kZWZpbmVkIGlmIGZpZWxkIGlzIG5vdCBmb3VuZFxuICAgKi9cbiAgZ2V0U2NoZW1hRmllbGQgPSAocGF0aDogc3RyaW5nW10pOiBDb25maWdGaWVsZCB8IHVuZGVmaW5lZCA9PiB7XG4gICAgbGV0IHN1YlRyZWU6IENvbmZpZ1NjaGVtYSB8IHVuZGVmaW5lZCA9IHRoaXMuc2NoZW1hO1xuICAgIGxldCBmaWVsZDogQ29uZmlnRmllbGQgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG5cbiAgICBmb3IgKGNvbnN0IHBhcnQgb2YgcGF0aCkge1xuICAgICAgaWYgKCFzdWJUcmVlKSB7XG4gICAgICAgIGlmIChmaWVsZD8udHlwZSA9PT0gJ3VuaW9uJykge1xuICAgICAgICAgIGxldCBmb3VuZDogQ29uZmlnRmllbGQgfCB1bmRlZmluZWQ7XG5cbiAgICAgICAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIGZpZWxkLmNoaWxkcmVuKSB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIGNoaWxkLnR5cGUgPT09ICdvYmplY3QnICYmXG4gICAgICAgICAgICAgIE9iamVjdC5oYXNPd24oY2hpbGQuY2hpbGRyZW4sIHBhcnQpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgZm91bmQgPSBjaGlsZC5jaGlsZHJlbltwYXJ0XTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKCFmb3VuZCkgcmV0dXJuIHVuZGVmaW5lZDtcblxuICAgICAgICAgIGZpZWxkID0gZm91bmQ7XG5cbiAgICAgICAgICBpZiAoZmllbGQudHlwZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIHN1YlRyZWUgPSBmaWVsZC5jaGlsZHJlbjtcbiAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgZmllbGQudHlwZSA9PT0gJ2FycmF5JyAmJlxuICAgICAgICAgICAgKGZpZWxkLml0ZW1zLnR5cGUgPT09ICdvYmplY3QnIHx8IGZpZWxkLml0ZW1zLnR5cGUgPT09ICd1bmlvbicpXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBzdWJUcmVlID1cbiAgICAgICAgICAgICAgZmllbGQuaXRlbXMudHlwZSA9PT0gJ29iamVjdCcgPyBmaWVsZC5pdGVtcy5jaGlsZHJlbiA6IHVuZGVmaW5lZDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc3ViVHJlZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9XG5cbiAgICAgIGlmIChPYmplY3QuaGFzT3duKHN1YlRyZWUsIHBhcnQpKSB7XG4gICAgICAgIGZpZWxkID0gc3ViVHJlZVtwYXJ0XTtcblxuICAgICAgICBpZiAoZmllbGQudHlwZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICBzdWJUcmVlID0gZmllbGQuY2hpbGRyZW47XG4gICAgICAgIH0gZWxzZSBpZiAoZmllbGQudHlwZSA9PT0gJ2FycmF5Jykge1xuICAgICAgICAgIGlmIChmaWVsZC5pdGVtcy50eXBlID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgc3ViVHJlZSA9IGZpZWxkLml0ZW1zLmNoaWxkcmVuO1xuICAgICAgICAgIH0gZWxzZSBpZiAoZmllbGQuaXRlbXMudHlwZSA9PT0gJ3VuaW9uJykge1xuICAgICAgICAgICAgc3ViVHJlZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIGZpZWxkID0gZmllbGQuaXRlbXM7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHN1YlRyZWUgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHN1YlRyZWUgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChmaWVsZD8udHlwZSA9PT0gJ3VuaW9uJykge1xuICAgICAgICAgIGxldCBmb3VuZDogQ29uZmlnRmllbGQgfCB1bmRlZmluZWQ7XG5cbiAgICAgICAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIGZpZWxkLmNoaWxkcmVuKSB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIGNoaWxkLnR5cGUgPT09ICdvYmplY3QnICYmXG4gICAgICAgICAgICAgIE9iamVjdC5oYXNPd24oY2hpbGQuY2hpbGRyZW4sIHBhcnQpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgZm91bmQgPSBjaGlsZC5jaGlsZHJlbltwYXJ0XTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKCFmb3VuZCkgcmV0dXJuIHVuZGVmaW5lZDtcblxuICAgICAgICAgIGZpZWxkID0gZm91bmQ7XG5cbiAgICAgICAgICBpZiAoZmllbGQudHlwZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIHN1YlRyZWUgPSBmaWVsZC5jaGlsZHJlbjtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc3ViVHJlZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmaWVsZDtcbiAgfTtcblxuICAvKipcbiAgICogZXh0cmFjdHMgZGVmYXVsdCB2YWx1ZXMgZnJvbSBhIHNjaGVtYVxuICAgKlxuICAgKiBAcmV0dXJuIHtSZWNvcmQ8c3RyaW5nLCBhbnk+fSBvYmplY3Qgb2YgZGVmYXVsdCB2YWx1ZXNcbiAgICovXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gIGdlbmVyYXRlRGVmYXVsdCA9IChvcHRpb25zPzogeyB2YWxpZGF0ZT86IGJvb2xlYW4gfSk6IFJlY29yZDxzdHJpbmcsIGFueT4gPT4ge1xuICAgIGNvbnN0IHZhbHVlVHJlZSA9IHRoaXMuYnVpbGREZWZhdWx0c0ZvclNjaGVtYSh0aGlzLnNjaGVtYSk7XG4gICAgaWYgKG9wdGlvbnM/LnZhbGlkYXRlKSB7XG4gICAgICB0aGlzLnZhbGlkYXRlQ29uZmlnKHZhbHVlVHJlZSk7XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZVRyZWU7XG4gIH07XG5cbiAgLy8gQnVpbGRzIGRlZmF1bHQgdmFsdWVzIGZvciBhIHNjaGVtYSBzdWJ0cmVlIChvYmplY3RzIGFuZCBhcnJheXMpLCByZWN1cnNpdmVseVxuICBwcml2YXRlIGJ1aWxkRGVmYXVsdHNGb3JTY2hlbWEgPSAoXG4gICAgc2NoZW1hOiBDb25maWdTY2hlbWEsXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgKTogUmVjb3JkPHN0cmluZywgYW55PiA9PiB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICBjb25zdCBkZWZhdWx0czogUmVjb3JkPHN0cmluZywgYW55PiA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMoc2NoZW1hKSkge1xuICAgICAgY29uc3QgZmllbGQgPSBzY2hlbWFba2V5XTtcbiAgICAgIGlmIChmaWVsZC50eXBlID09PSAnb2JqZWN0Jykge1xuICAgICAgICBjb25zdCBjaGlsZERlZmF1bHRzID0gdGhpcy5idWlsZERlZmF1bHRzRm9yU2NoZW1hKGZpZWxkLmNoaWxkcmVuKTtcbiAgICAgICAgaWYgKE9iamVjdC5rZXlzKGNoaWxkRGVmYXVsdHMpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBkZWZhdWx0c1trZXldID0gY2hpbGREZWZhdWx0cztcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChmaWVsZC50eXBlID09PSAnYXJyYXknKSB7XG4gICAgICAgIGlmIChmaWVsZC5kZWZhdWx0ICE9IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGlmIChmaWVsZC5pdGVtcy50eXBlID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgY29uc3QgaXRlbURlZmF1bHRzID0gdGhpcy5idWlsZERlZmF1bHRzRm9yU2NoZW1hKFxuICAgICAgICAgICAgICBmaWVsZC5pdGVtcy5jaGlsZHJlbixcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBkZWZhdWx0c1trZXldID0gZmllbGQuZGVmYXVsdC5tYXAoKGVsZW06IFZhbHVlVHlwZSkgPT4ge1xuICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgZWxlbSAhPSBudWxsICYmXG4gICAgICAgICAgICAgICAgdHlwZW9mIGVsZW0gPT09ICdvYmplY3QnICYmXG4gICAgICAgICAgICAgICAgIUFycmF5LmlzQXJyYXkoZWxlbSlcbiAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgLi4uaXRlbURlZmF1bHRzLCAuLi5lbGVtIH07XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmV0dXJuIGVsZW07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZGVmYXVsdHNba2V5XSA9IGZpZWxkLmRlZmF1bHQ7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGZpZWxkLnR5cGUgIT09ICd1bmlvbicgJiYgZmllbGQuZGVmYXVsdCAhPSB1bmRlZmluZWQpIHtcbiAgICAgICAgZGVmYXVsdHNba2V5XSA9IGZpZWxkLmRlZmF1bHQ7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBkZWZhdWx0cztcbiAgfTtcblxuICAvKipcbiAgICogZ2VuZXJhdGVzIGNvbXBhdGlibGUgVHlwZVNjcmlwdCBpbnRlcmZhY2UgZm9yIHRoaXMgaW5zdGFuY2UncyBzY2hlbWFcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgdGhlIG5hbWUgb2Ygcm9vdCB0eXBlXG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICovXG4gIGdlbmVyYXRlVFNUeXBlcyA9IChuYW1lOiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuICAgIGNvbnN0IHR5cGVzOiBzdHJpbmdbXSA9IFtdO1xuICAgIGNvbnN0IGVtaXR0ZWRUeXBlTmFtZXM6IFNldDxzdHJpbmc+ID0gbmV3IFNldCgpO1xuXG4gICAgY29uc3Qgc3RhY2s6IEFycmF5PHtcbiAgICAgIHN1YlNjaGVtYTogQ29uZmlnU2NoZW1hO1xuICAgICAgY2hpbGRyZW46IHN0cmluZ1tdO1xuICAgICAgcGFyZW50UGF0aDogc3RyaW5nW107XG4gICAgICB0eXBlTmFtZTogc3RyaW5nO1xuICAgICAgYXR0cmlidXRlczogQXJyYXk8W3N0cmluZywgc3RyaW5nXT47XG4gICAgfT4gPSBbXG4gICAgICB7XG4gICAgICAgIHN1YlNjaGVtYTogdGhpcy5zY2hlbWEsXG4gICAgICAgIGNoaWxkcmVuOiBPYmplY3Qua2V5cyh0aGlzLnNjaGVtYSksXG4gICAgICAgIHBhcmVudFBhdGg6IFtdLFxuICAgICAgICB0eXBlTmFtZTogbmFtZSxcbiAgICAgICAgYXR0cmlidXRlczogW10sXG4gICAgICB9LFxuICAgIF07XG4gICAgLy8gVHJhdmVyc2VzIHRoZSBzY2hlbWEgb2JqZWN0IHRyZWUgZGVwdGggZmlyc3RcbiAgICB3aGlsZSAoc3RhY2subGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgY3VycmVudCA9IHN0YWNrW3N0YWNrLmxlbmd0aCAtIDFdO1xuICAgICAgY29uc3QgeyBzdWJTY2hlbWEsIGNoaWxkcmVuLCBwYXJlbnRQYXRoLCB0eXBlTmFtZSwgYXR0cmlidXRlcyB9ID0gY3VycmVudDtcblxuICAgICAgaWYgKGNoaWxkcmVuLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBpZiAoIWVtaXR0ZWRUeXBlTmFtZXMuaGFzKHR5cGVOYW1lKSkge1xuICAgICAgICAgIHR5cGVzLnB1c2godGhpcy5nZW5UU0ludGVyZmFjZSh0eXBlTmFtZSwgYXR0cmlidXRlcykpO1xuICAgICAgICAgIGVtaXR0ZWRUeXBlTmFtZXMuYWRkKHR5cGVOYW1lKTtcbiAgICAgICAgfVxuICAgICAgICBzdGFjay5wb3AoKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGNoaWxkTmFtZSA9IGNoaWxkcmVuLnBvcCgpITtcbiAgICAgIGNvbnN0IGZpZWxkID0gc3ViU2NoZW1hW2NoaWxkTmFtZV07XG4gICAgICBjb25zdCBwYXRoID0gcGFyZW50UGF0aC5jb25jYXQoY2hpbGROYW1lKTtcbiAgICAgIC8vIGlmIGEgbm9kZS9maWVsZCBpcyBvZiB0eXBlIG9iamVjdCBhbmQgdGh1cyBpcyBhIHN1YnRyZWUsIGFkZCBpdCB0b1xuICAgICAgLy8gdGhlIHN0YWNrIHRvIGJlIHRyYXZlcnNlZCBsYXRlci4gT3RoZXJ3aXNlIGl0J3MgYSBsZWFmIGFuZCBuZWVkcyBub1xuICAgICAgLy8gdHJhdmVyc2FsLlxuICAgICAgY29uc3QgY2hpbGROYW1lUXVvdGVkID0gY2hpbGROYW1lLmluY2x1ZGVzKCctJylcbiAgICAgICAgPyBgXCIke2NoaWxkTmFtZX1cImBcbiAgICAgICAgOiBjaGlsZE5hbWU7XG4gICAgICBpZiAoZmllbGQudHlwZSA9PT0gJ3VuaW9uJykge1xuICAgICAgICBjb25zdCB1bmlvblR5cGVzOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgICAgIGZpZWxkLmNoaWxkcmVuLmZvckVhY2goKGNoaWxkLCBpbmRleCkgPT4ge1xuICAgICAgICAgIGlmIChjaGlsZC50eXBlID09PSAndW5pb24nKSB7XG4gICAgICAgICAgICBjaGlsZC5jaGlsZHJlbi5mb3JFYWNoKChuZXN0ZWRDaGlsZCkgPT4ge1xuICAgICAgICAgICAgICB1bmlvblR5cGVzLnB1c2gobmVzdGVkQ2hpbGQudHlwZSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChjaGlsZC50eXBlID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgY29uc3Qgb3B0aW9uUGF0aCA9IHBhdGguY29uY2F0KFtgT3B0aW9uJHtpbmRleH1gXSk7XG4gICAgICAgICAgICBjb25zdCB0eXBlTmFtZSA9IG9wdGlvblBhdGgubWFwKHRvUGFzY2FsQ2FzZSkuam9pbignJyk7XG5cbiAgICAgICAgICAgIHN0YWNrLnB1c2goe1xuICAgICAgICAgICAgICBzdWJTY2hlbWE6IGNoaWxkLmNoaWxkcmVuLFxuICAgICAgICAgICAgICBjaGlsZHJlbjogT2JqZWN0LmtleXMoY2hpbGQuY2hpbGRyZW4pLnJldmVyc2UoKSxcbiAgICAgICAgICAgICAgcGFyZW50UGF0aDogb3B0aW9uUGF0aCxcbiAgICAgICAgICAgICAgdHlwZU5hbWUsXG4gICAgICAgICAgICAgIGF0dHJpYnV0ZXM6IFtdLFxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHVuaW9uVHlwZXMucHVzaCh0eXBlTmFtZSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGNoaWxkLnR5cGUgPT09ICdhcnJheScpIHtcbiAgICAgICAgICAgIGlmIChjaGlsZC5pdGVtcy50eXBlID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgICBjb25zdCBpdGVtUGF0aCA9IHBhdGguY29uY2F0KFtgSXRlbSR7aW5kZXh9YF0pO1xuICAgICAgICAgICAgICBjb25zdCB0eXBlTmFtZSA9IGl0ZW1QYXRoLm1hcCh0b1Bhc2NhbENhc2UpLmpvaW4oJycpO1xuXG4gICAgICAgICAgICAgIHN0YWNrLnB1c2goe1xuICAgICAgICAgICAgICAgIHN1YlNjaGVtYTogY2hpbGQuaXRlbXMuY2hpbGRyZW4sXG4gICAgICAgICAgICAgICAgY2hpbGRyZW46IE9iamVjdC5rZXlzKGNoaWxkLml0ZW1zLmNoaWxkcmVuKS5yZXZlcnNlKCksXG4gICAgICAgICAgICAgICAgcGFyZW50UGF0aDogaXRlbVBhdGgsXG4gICAgICAgICAgICAgICAgdHlwZU5hbWUsXG4gICAgICAgICAgICAgICAgYXR0cmlidXRlczogW10sXG4gICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgIHVuaW9uVHlwZXMucHVzaChgJHt0eXBlTmFtZX1bXWApO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdW5pb25UeXBlcy5wdXNoKGAke2NoaWxkLml0ZW1zLnR5cGV9W11gKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHVuaW9uVHlwZXMucHVzaChjaGlsZC50eXBlKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgYXR0cmlidXRlcy5wdXNoKFtjaGlsZE5hbWVRdW90ZWQsIHVuaW9uVHlwZXMuam9pbignIHwgJyldKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpZiAoZmllbGQudHlwZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgY29uc3QgdHlwZU5hbWUgPSBwYXRoLm1hcCh0b1Bhc2NhbENhc2UpLmpvaW4oJycpO1xuXG4gICAgICAgIHN0YWNrLnB1c2goe1xuICAgICAgICAgIHN1YlNjaGVtYTogZmllbGQuY2hpbGRyZW4sXG4gICAgICAgICAgY2hpbGRyZW46IE9iamVjdC5rZXlzKGZpZWxkLmNoaWxkcmVuKS5yZXZlcnNlKCksXG4gICAgICAgICAgcGFyZW50UGF0aDogcGF0aCxcbiAgICAgICAgICB0eXBlTmFtZSxcbiAgICAgICAgICBhdHRyaWJ1dGVzOiBbXSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgYXR0cmlidXRlcy5wdXNoKFtjaGlsZE5hbWVRdW90ZWQsIHR5cGVOYW1lXSk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKGZpZWxkLnR5cGUgPT09ICdhcnJheScpIHtcbiAgICAgICAgaWYgKGZpZWxkLml0ZW1zLnR5cGUgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgY29uc3QgdHlwZU5hbWUgPSBwYXRoLm1hcCh0b1Bhc2NhbENhc2UpLmpvaW4oJycpO1xuXG4gICAgICAgICAgc3RhY2sucHVzaCh7XG4gICAgICAgICAgICBzdWJTY2hlbWE6IGZpZWxkLml0ZW1zLmNoaWxkcmVuLFxuICAgICAgICAgICAgY2hpbGRyZW46IE9iamVjdC5rZXlzKGZpZWxkLml0ZW1zLmNoaWxkcmVuKS5yZXZlcnNlKCksXG4gICAgICAgICAgICBwYXJlbnRQYXRoOiBwYXRoLFxuICAgICAgICAgICAgdHlwZU5hbWUsXG4gICAgICAgICAgICBhdHRyaWJ1dGVzOiBbXSxcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGF0dHJpYnV0ZXMucHVzaChbY2hpbGROYW1lUXVvdGVkLCBgJHt0eXBlTmFtZX1bXWBdKTtcbiAgICAgICAgfSBlbHNlIGlmIChmaWVsZC5pdGVtcy50eXBlID09PSAndW5pb24nKSB7XG4gICAgICAgICAgY29uc3QgdW5pb25UeXBlczogc3RyaW5nW10gPSBbXTtcblxuICAgICAgICAgIGZpZWxkLml0ZW1zLmNoaWxkcmVuLmZvckVhY2goKGNoaWxkLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICBjaGlsZC50eXBlID09PSAnc3RyaW5nJyB8fFxuICAgICAgICAgICAgICBjaGlsZC50eXBlID09PSAnbnVtYmVyJyB8fFxuICAgICAgICAgICAgICBjaGlsZC50eXBlID09PSAnYm9vbGVhbidcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICB1bmlvblR5cGVzLnB1c2goY2hpbGQudHlwZSk7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGNoaWxkLnR5cGUgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAgIGNvbnN0IG9wdGlvblBhdGggPSBwYXRoLmNvbmNhdChbYE9wdGlvbiR7aW5kZXh9YF0pO1xuICAgICAgICAgICAgICBjb25zdCB0eXBlTmFtZSA9IG9wdGlvblBhdGgubWFwKHRvUGFzY2FsQ2FzZSkuam9pbignJyk7XG5cbiAgICAgICAgICAgICAgc3RhY2sucHVzaCh7XG4gICAgICAgICAgICAgICAgc3ViU2NoZW1hOiBjaGlsZC5jaGlsZHJlbixcbiAgICAgICAgICAgICAgICBjaGlsZHJlbjogT2JqZWN0LmtleXMoY2hpbGQuY2hpbGRyZW4pLnJldmVyc2UoKSxcbiAgICAgICAgICAgICAgICBwYXJlbnRQYXRoOiBvcHRpb25QYXRoLFxuICAgICAgICAgICAgICAgIHR5cGVOYW1lLFxuICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXM6IFtdLFxuICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICB1bmlvblR5cGVzLnB1c2godHlwZU5hbWUpO1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChjaGlsZC50eXBlID09PSAnYXJyYXknKSB7XG4gICAgICAgICAgICAgIGlmIChjaGlsZC5pdGVtcy50eXBlID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW1QYXRoID0gcGF0aC5jb25jYXQoW2BPcHRpb24ke2luZGV4fUl0ZW1gXSk7XG4gICAgICAgICAgICAgICAgY29uc3QgdHlwZU5hbWUgPSBpdGVtUGF0aC5tYXAodG9QYXNjYWxDYXNlKS5qb2luKCcnKTtcblxuICAgICAgICAgICAgICAgIHN0YWNrLnB1c2goe1xuICAgICAgICAgICAgICAgICAgc3ViU2NoZW1hOiBjaGlsZC5pdGVtcy5jaGlsZHJlbixcbiAgICAgICAgICAgICAgICAgIGNoaWxkcmVuOiBPYmplY3Qua2V5cyhjaGlsZC5pdGVtcy5jaGlsZHJlbikucmV2ZXJzZSgpLFxuICAgICAgICAgICAgICAgICAgcGFyZW50UGF0aDogaXRlbVBhdGgsXG4gICAgICAgICAgICAgICAgICB0eXBlTmFtZSxcbiAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXM6IFtdLFxuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgdW5pb25UeXBlcy5wdXNoKGAke3R5cGVOYW1lfVtdYCk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdW5pb25UeXBlcy5wdXNoKGAke2NoaWxkLml0ZW1zLnR5cGV9W11gKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdW5pb25UeXBlcy5wdXNoKGNoaWxkLnR5cGUpO1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgYXR0cmlidXRlcy5wdXNoKFtjaGlsZE5hbWVRdW90ZWQsIGAoJHt1bmlvblR5cGVzLmpvaW4oJyB8ICcpfSlbXWBdKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBhdHRyaWJ1dGVzLnB1c2goW2NoaWxkTmFtZVF1b3RlZCwgYCR7ZmllbGQuaXRlbXMudHlwZX1bXWBdKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgbGV0IGZpZWxkVHlwZTogc3RyaW5nID0gZmllbGQudHlwZTtcbiAgICAgIGxldCBpc09wdGlvbmFsID0gdHJ1ZTtcbiAgICAgIGlmIChmaWVsZC52YWxpZGF0aW9ucykge1xuICAgICAgICBmb3IgKGNvbnN0IHZhbGlkYXRpb24gb2YgZmllbGQudmFsaWRhdGlvbnMpIHtcbiAgICAgICAgICBpZiAoZmllbGQudHlwZSA9PT0gJ3N0cmluZycgJiYgJ2Nob2ljZXMnIGluIHZhbGlkYXRpb24pIHtcbiAgICAgICAgICAgIGZpZWxkVHlwZSA9IHZhbGlkYXRpb24uY2hvaWNlcy5tYXAoKGMpID0+IGAnJHtjfSdgKS5qb2luKCcgfCAnKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoJ3JlcXVpcmVkJyBpbiB2YWxpZGF0aW9uICYmICEoJ3doZW4nIGluIHZhbGlkYXRpb24pKSB7XG4gICAgICAgICAgICBpc09wdGlvbmFsID0gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBhdHRyaWJ1dGVzLnB1c2goW1xuICAgICAgICBpc09wdGlvbmFsID8gYCR7Y2hpbGROYW1lUXVvdGVkfT9gIDogY2hpbGROYW1lUXVvdGVkLFxuICAgICAgICBmaWVsZFR5cGUsXG4gICAgICBdKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHlwZXMucmV2ZXJzZSgpLmpvaW4oJ1xcblxcbicpICsgJ1xcbic7XG4gIH07XG5cbiAgLyoqXG4gICAqIGdlbmVyYXRlcyBhIFR5cGVTY3JpcHQgaW50ZXJmYWNlIGRlZmluaXRpb24gZm9yIHBhc3NlZCBuYW1lIGFuZCBhdHRyaWJ1dGVzXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gICAqIEBwYXJhbSB7QXJyYXk8W3N0cmluZywgc3RyaW5nXT59IGF0dHJpYnV0ZXNcbiAgICogQHJldHVybiB7c3RyaW5nfVxuICAgKi9cbiAgcHJpdmF0ZSBnZW5UU0ludGVyZmFjZSA9IChcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgYXR0cmlidXRlczogQXJyYXk8W3N0cmluZywgc3RyaW5nXT4sXG4gICk6IHN0cmluZyA9PiB7XG4gICAgcmV0dXJuIGBleHBvcnQgaW50ZXJmYWNlICR7bmFtZX0ge1xuICAke2F0dHJpYnV0ZXMubWFwKChhdHRyKSA9PiBgJHthdHRyWzBdfTogJHthdHRyWzFdfTtgKS5qb2luKCdcXG4gICcpfVxufWA7XG4gIH07XG5cbiAgLyoqXG4gICAqIHJldHVybnMgYSBjaGFyYWN0ZXJpc3RpYyBvYmplY3QgZm9yIHZhbHVlcyBhdCBhIHNwZWNpZmljIG5vZGUgY29uZmlnIGxldmVsXG4gICAqXG4gICAqIEBwYXJhbSB7SUNvbmZpZ30gY29uZmlnXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBsZXZlbFxuICAgKiBAcmV0dXJuIHtSZWNvcmQ8c3RyaW5nLCBhbnk+fVxuICAgKi9cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgZ2V0Q29uZmlnRm9yTGV2ZWwoY29uZmlnOiBJQ29uZmlnLCBsZXZlbDogc3RyaW5nKTogUmVjb3JkPHN0cmluZywgYW55PiB7XG4gICAgY29uc3QgY29uZkxldmVscyA9IENvbmZpZ1ZhbGlkYXRvci5nZXROb2RlQ29uZmlnTGV2ZWxzKGNvbmZpZyk7XG4gICAgY29uc3QgbGV2ZWxJbmRleCA9IGNvbmZMZXZlbHMuaW5kZXhPZihsZXZlbCk7XG4gICAgaWYgKGxldmVsSW5kZXggPT09IC0xKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBUaGUgXCIke2xldmVsfVwiIGxldmVsIG5vdCBmb3VuZCBpbiB0aGUgY3VycmVudCBzeXN0ZW0gY29uZmlndXJhdGlvbiBsZXZlbHNgLFxuICAgICAgKTtcbiAgICB9XG4gICAgY29uc3QgaGlnaGVyTGV2ZWxTb3VyY2VzID0gY29uZmlnLnV0aWxcbiAgICAgIC5nZXRDb25maWdTb3VyY2VzKClcbiAgICAgIC5maWx0ZXIoXG4gICAgICAgIChzb3VyY2UpID0+IGNvbmZMZXZlbHMuaW5kZXhPZihnZXRTb3VyY2VOYW1lKHNvdXJjZSkpID4gbGV2ZWxJbmRleCxcbiAgICAgICk7XG4gICAgY29uc3QgY3VycmVudExldmVsU291cmNlID0gY29uZmlnLnV0aWxcbiAgICAgIC5nZXRDb25maWdTb3VyY2VzKClcbiAgICAgIC5maWx0ZXIoKHNvdXJjZSkgPT4gZ2V0U291cmNlTmFtZShzb3VyY2UpID09PSBsZXZlbClcbiAgICAgIC5hdCgwKTtcbiAgICBjb25zdCBsb3dlckxldmVsU291cmNlcyA9IGNvbmZpZy51dGlsXG4gICAgICAuZ2V0Q29uZmlnU291cmNlcygpXG4gICAgICAuZmlsdGVyKFxuICAgICAgICAoc291cmNlKSA9PiBjb25mTGV2ZWxzLmluZGV4T2YoZ2V0U291cmNlTmFtZShzb3VyY2UpKSA8IGxldmVsSW5kZXgsXG4gICAgICApO1xuXG4gICAgLy8gVHJhdmVyc2VzIHRoZSBzY2hlbWEgb2JqZWN0IHRyZWUgZGVwdGggZmlyc3RcbiAgICBjb25zdCB2YWx1ZVRyZWUgPSBDb25maWdWYWxpZGF0b3IucHJvY2Vzc0NvbmZpZ0ZvckxldmVsTm9kZShcbiAgICAgIHRoaXMuc2NoZW1hLFxuICAgICAgW10sXG4gICAgICBoaWdoZXJMZXZlbFNvdXJjZXMsXG4gICAgICBjdXJyZW50TGV2ZWxTb3VyY2UsXG4gICAgICBsb3dlckxldmVsU291cmNlcyxcbiAgICApO1xuXG4gICAgcmV0dXJuIHZhbHVlVHJlZTtcbiAgfVxuXG4gIC8qKlxuICAgKnRyYXZlcnNlcyB0aGUgY29uZmlnIHNjaGVtYSBkZXB0aCBmaXJzdCB0byBwcm9kdWNlIGNoYXJhY3RlcmlzdGljIG9iamVjdFxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAc3RhdGljXG4gICAqIEBwYXJhbSB7Q29uZmlnU2NoZW1hfSBzY2hlbWFcbiAgICogQHBhcmFtIHtzdHJpbmdbXX0gcGF0aFxuICAgKiBAcGFyYW0ge0lDb25maWdTb3VyY2VbXX0gaGlnaGVyTGV2ZWxTb3VyY2VzXG4gICAqIEBwYXJhbSB7KElDb25maWdTb3VyY2UgfCB1bmRlZmluZWQpfSBjdXJyZW50TGV2ZWxTb3VyY2VcbiAgICogQHBhcmFtIHtJQ29uZmlnU291cmNlW119IGxvd2VyTGV2ZWxTb3VyY2VzXG4gICAqIEByZXR1cm4ge1JlY29yZDxzdHJpbmcsIGFueT59XG4gICAqIEBtZW1iZXJvZiBDb25maWdWYWxpZGF0b3JcbiAgICovXG4gIHByaXZhdGUgc3RhdGljIHByb2Nlc3NDb25maWdGb3JMZXZlbE5vZGUoXG4gICAgc2NoZW1hOiBDb25maWdTY2hlbWEsXG4gICAgcGF0aDogc3RyaW5nW10sXG4gICAgaGlnaGVyTGV2ZWxTb3VyY2VzOiBJQ29uZmlnU291cmNlW10sXG4gICAgY3VycmVudExldmVsU291cmNlOiBJQ29uZmlnU291cmNlIHwgdW5kZWZpbmVkLFxuICAgIGxvd2VyTGV2ZWxTb3VyY2VzOiBJQ29uZmlnU291cmNlW10sXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgKTogUmVjb3JkPHN0cmluZywgYW55PiB7XG4gICAgY29uc3QgdmFsdWUgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgIGZvciAoY29uc3QgY2hpbGROYW1lIG9mIE9iamVjdC5rZXlzKHNjaGVtYSkucmV2ZXJzZSgpKSB7XG4gICAgICBjb25zdCBjaGlsZFBhdGggPSBwYXRoLmNvbmNhdChbY2hpbGROYW1lXSk7XG4gICAgICBjb25zdCBmaWVsZCA9IHNjaGVtYVtjaGlsZE5hbWVdO1xuICAgICAgLy8gaWYgYSBmaWVsZCBpcyBvZiB0eXBlIG9iamVjdCBhbmQgdGh1cyBpcyBhIHN1YnRyZWUsIHJlY3Vyc2Ugb24gaXQuXG4gICAgICAvLyBPdGhlcndpc2UgaXQncyBhIGxlYWYgYW5kIG5lZWRzIG5vIHRyYXZlcnNhbC5cbiAgICAgIHZhbHVlW2NoaWxkTmFtZV0gPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgaWYgKGZpZWxkLnR5cGUgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIHZhbHVlW2NoaWxkTmFtZV0gPSBDb25maWdWYWxpZGF0b3IucHJvY2Vzc0NvbmZpZ0ZvckxldmVsTm9kZShcbiAgICAgICAgICBmaWVsZC5jaGlsZHJlbixcbiAgICAgICAgICBjaGlsZFBhdGgsXG4gICAgICAgICAgaGlnaGVyTGV2ZWxTb3VyY2VzLFxuICAgICAgICAgIGN1cnJlbnRMZXZlbFNvdXJjZSxcbiAgICAgICAgICBsb3dlckxldmVsU291cmNlcyxcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhbHVlW2NoaWxkTmFtZV1bJ2xhYmVsJ10gPVxuICAgICAgICAgIGZpZWxkLmxhYmVsICE9IHVuZGVmaW5lZCA/IGZpZWxkLmxhYmVsIDogbnVsbDtcbiAgICAgICAgdmFsdWVbY2hpbGROYW1lXVsnZGVzY3JpcHRpb24nXSA9XG4gICAgICAgICAgZmllbGQuZGVzY3JpcHRpb24gIT0gdW5kZWZpbmVkID8gZmllbGQuZGVzY3JpcHRpb24gOiBudWxsO1xuICAgICAgICB2YWx1ZVtjaGlsZE5hbWVdWydkZWZhdWx0J10gPSBnZXRWYWx1ZUZyb21Db25maWdTb3VyY2VzKFxuICAgICAgICAgIGxvd2VyTGV2ZWxTb3VyY2VzLFxuICAgICAgICAgIGNoaWxkUGF0aCxcbiAgICAgICAgKTtcbiAgICAgICAgdmFsdWVbY2hpbGROYW1lXVsndmFsdWUnXSA9IGdldFZhbHVlRnJvbUNvbmZpZ1NvdXJjZXMoXG4gICAgICAgICAgWy4uLihjdXJyZW50TGV2ZWxTb3VyY2UgIT0gdW5kZWZpbmVkID8gW2N1cnJlbnRMZXZlbFNvdXJjZV0gOiBbXSldLFxuICAgICAgICAgIGNoaWxkUGF0aCxcbiAgICAgICAgKTtcbiAgICAgICAgdmFsdWVbY2hpbGROYW1lXVsnb3ZlcnJpZGUnXSA9IGdldFZhbHVlRnJvbUNvbmZpZ1NvdXJjZXMoXG4gICAgICAgICAgaGlnaGVyTGV2ZWxTb3VyY2VzLFxuICAgICAgICAgIGNoaWxkUGF0aCxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogcmV0dXJucyBhIGxpc3Qgb2YgY29uZmlnIHNvdXJjZXMgdXNlZCBieSBub2RlIGNvbmZpZyBwYWNrYWdlLCBvcmRlcmVkIGZyb21cbiAgICogdGhlIGxvd2VzdCB0byB0aGUgaGlnaGVzdCBwcmlvcml0eVxuICAgKlxuICAgKiBAc3RhdGljXG4gICAqIEBwYXJhbSB7SUNvbmZpZ30gY29uZmlnXG4gICAqIEByZXR1cm4gIHtzdHJpbmdbXX1cbiAgICovXG4gIHByaXZhdGUgc3RhdGljIGdldE5vZGVDb25maWdMZXZlbHMgPSAoY29uZmlnOiBJQ29uZmlnKTogc3RyaW5nW10gPT4ge1xuICAgIGNvbnN0IGluc3RhbmNlID0gY29uZmlnLnV0aWwuZ2V0RW52KCdOT0RFX0FQUF9JTlNUQU5DRScpO1xuICAgIGxldCBkZXBsb3ltZW50ID0gY29uZmlnLnV0aWwuZ2V0RW52KCdOT0RFX0VOVicpO1xuICAgIGRlcGxveW1lbnQgPSBjb25maWcudXRpbC5nZXRFbnYoJ05PREVfQ09ORklHX0VOVicpO1xuICAgIGNvbnN0IGZ1bGxIb3N0bmFtZSA9IGNvbmZpZy51dGlsLmdldEVudignSE9TVE5BTUUnKTtcbiAgICBjb25zdCBzaG9ydEhvc3RuYW1lID1cbiAgICAgIGZ1bGxIb3N0bmFtZSAhPSB1bmRlZmluZWQgPyBmdWxsSG9zdG5hbWUuc3BsaXQoJy4nKVswXSA6IHVuZGVmaW5lZDtcblxuICAgIGNvbnN0IGNvbmZpZ0xldmVscyA9IFtcbiAgICAgICdkZWZhdWx0JyxcbiAgICAgIC4uLihpbnN0YW5jZSAhPSB1bmRlZmluZWQgPyBbYGRlZmF1bHQtJHtpbnN0YW5jZX1gXSA6IFtdKSxcbiAgICAgIC4uLihkZXBsb3ltZW50ICE9IHVuZGVmaW5lZCA/IFtgJHtkZXBsb3ltZW50fWBdIDogW10pLFxuICAgICAgLi4uKGluc3RhbmNlICE9IHVuZGVmaW5lZCAmJiBkZXBsb3ltZW50ICE9IHVuZGVmaW5lZFxuICAgICAgICA/IFtgJHtkZXBsb3ltZW50fS0ke2luc3RhbmNlfWBdXG4gICAgICAgIDogW10pLFxuICAgICAgLi4uKHNob3J0SG9zdG5hbWUgIT0gdW5kZWZpbmVkID8gW2Ake3Nob3J0SG9zdG5hbWV9YF0gOiBbXSksXG4gICAgICAuLi4oc2hvcnRIb3N0bmFtZSAhPSB1bmRlZmluZWQgJiYgaW5zdGFuY2UgIT0gdW5kZWZpbmVkXG4gICAgICAgID8gW2Ake3Nob3J0SG9zdG5hbWV9LSR7aW5zdGFuY2V9YF1cbiAgICAgICAgOiBbXSksXG4gICAgICAuLi4oc2hvcnRIb3N0bmFtZSAhPSB1bmRlZmluZWQgJiYgZGVwbG95bWVudCAhPSB1bmRlZmluZWRcbiAgICAgICAgPyBbYCR7c2hvcnRIb3N0bmFtZX0tJHtkZXBsb3ltZW50fWBdXG4gICAgICAgIDogW10pLFxuICAgICAgLi4uKHNob3J0SG9zdG5hbWUgIT0gdW5kZWZpbmVkICYmXG4gICAgICBkZXBsb3ltZW50ICE9IHVuZGVmaW5lZCAmJlxuICAgICAgaW5zdGFuY2UgIT0gdW5kZWZpbmVkXG4gICAgICAgID8gW2Ake3Nob3J0SG9zdG5hbWV9LSR7ZGVwbG95bWVudH0tJHtpbnN0YW5jZX1gXVxuICAgICAgICA6IFtdKSxcbiAgICAgIC4uLihmdWxsSG9zdG5hbWUgIT0gdW5kZWZpbmVkID8gW2Ake2Z1bGxIb3N0bmFtZX1gXSA6IFtdKSxcbiAgICAgIC4uLihmdWxsSG9zdG5hbWUgIT0gdW5kZWZpbmVkICYmIGluc3RhbmNlICE9IHVuZGVmaW5lZFxuICAgICAgICA/IFtgJHtmdWxsSG9zdG5hbWV9LSR7aW5zdGFuY2V9YF1cbiAgICAgICAgOiBbXSksXG4gICAgICAuLi4oZnVsbEhvc3RuYW1lICE9IHVuZGVmaW5lZCAmJiBkZXBsb3ltZW50ICE9IHVuZGVmaW5lZFxuICAgICAgICA/IFtgJHtmdWxsSG9zdG5hbWV9LSR7ZGVwbG95bWVudH1gXVxuICAgICAgICA6IFtdKSxcbiAgICAgIC4uLihmdWxsSG9zdG5hbWUgIT0gdW5kZWZpbmVkICYmXG4gICAgICBkZXBsb3ltZW50ICE9IHVuZGVmaW5lZCAmJlxuICAgICAgaW5zdGFuY2UgIT0gdW5kZWZpbmVkXG4gICAgICAgID8gW2Ake2Z1bGxIb3N0bmFtZX0tJHtkZXBsb3ltZW50fS0ke2luc3RhbmNlfWBdXG4gICAgICAgIDogW10pLFxuICAgICAgYGxvY2FsYCxcbiAgICAgIC4uLihpbnN0YW5jZSAhPSB1bmRlZmluZWQgPyBbYGxvY2FsLSR7aW5zdGFuY2V9YF0gOiBbXSksXG4gICAgICAuLi4oZGVwbG95bWVudCAhPSB1bmRlZmluZWQgPyBbYGxvY2FsLSR7ZGVwbG95bWVudH1gXSA6IFtdKSxcbiAgICAgIC4uLihkZXBsb3ltZW50ICE9IHVuZGVmaW5lZCAmJiBpbnN0YW5jZSAhPSB1bmRlZmluZWRcbiAgICAgICAgPyBbYGxvY2FsLSR7ZGVwbG95bWVudH0tJHtpbnN0YW5jZX1gXVxuICAgICAgICA6IFtdKSxcbiAgICAgICckTk9ERV9DT05GSUcnLFxuICAgICAgJ2N1c3RvbS1lbnZpcm9ubWVudC12YXJpYWJsZXMnLFxuICAgIF07XG5cbiAgICByZXR1cm4gY29uZmlnTGV2ZWxzO1xuICB9O1xuXG4gIC8qKlxuICAgKiB2YWxpZGF0ZXMgYSBjb25maWcgb2JqZWN0IGFuZCB3cml0ZXMgaXQgdG8gdGhlIG5vZGUtY29uZmlnIGZpbGVcbiAgICogY29ycmVzcG9uZGluZyB0byB0aGUgcGFzc2VkIGxldmVsXG4gICAqXG4gICAqIEBwYXJhbSB7UmVjb3JkPHN0cmluZywgYW55Pn0gY29uZmlnT2JqXG4gICAqIEBwYXJhbSB7SUNvbmZpZ30gY29uZmlnXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBsZXZlbCBvdXRwdXQgbm9kZS1jb25maWcgZmlsZSBsZXZlbFxuICAgKiBAcGFyYW0ge3N0cmluZ30gZm9ybWF0IHRoZSBmb3JtYXQgb2YgdGhlIG91dHB1dCBmaWxlXG4gICAqL1xuICB2YWxpZGF0ZUFuZFdyaXRlQ29uZmlnID0gKFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgY29uZmlnT2JqOiBSZWNvcmQ8c3RyaW5nLCBhbnk+LFxuICAgIGNvbmZpZzogSUNvbmZpZyxcbiAgICBsZXZlbDogc3RyaW5nLFxuICAgIGZvcm1hdDogc3RyaW5nLFxuICApID0+IHtcbiAgICBjb25zdCBjb25mTGV2ZWxzID0gQ29uZmlnVmFsaWRhdG9yLmdldE5vZGVDb25maWdMZXZlbHMoY29uZmlnKS5maWx0ZXIoXG4gICAgICAobCkgPT4gbCAhPT0gJ2N1c3RvbS1lbnZpcm9ubWVudC12YXJpYWJsZXMnLFxuICAgICk7XG4gICAgY29uc3QgbGV2ZWxJbmRleCA9IGNvbmZMZXZlbHMuaW5kZXhPZihsZXZlbCk7XG4gICAgaWYgKGxldmVsSW5kZXggPT09IC0xKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBUaGUgWyR7bGV2ZWx9XSBsZXZlbCBub3QgZm91bmQgaW4gdGhlIGN1cnJlbnQgc3lzdGVtJ3MgY29uZmlndXJhdGlvbiBsZXZlbHNgLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCBjb25maWdEaXIgPVxuICAgICAgcHJvY2Vzcy5lbnZbJ05PREVfQ09ORklHX0RJUiddICE9IHVuZGVmaW5lZFxuICAgICAgICA/IHByb2Nlc3MuZW52WydOT0RFX0NPTkZJR19ESVInXVxuICAgICAgICA6ICcuL2NvbmZpZyc7XG4gICAgbGV0IG91dHB1dCA9ICcnO1xuICAgIGxldCBleHQgPSAnJztcbiAgICBzd2l0Y2ggKGZvcm1hdCkge1xuICAgICAgY2FzZSAnanNvbic6IHtcbiAgICAgICAgb3V0cHV0ID0gSnNvbkJpZ0ludC5zdHJpbmdpZnkoY29uZmlnT2JqKTtcbiAgICAgICAgZXh0ID0gJ2pzb24nO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgJ3lhbWwnOiB7XG4gICAgICAgIG91dHB1dCA9IHlhbWwuZHVtcChjb25maWdPYmopO1xuICAgICAgICBleHQgPSAneWFtbCc7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgRXJyb3IoYEludmFsaWQgZm9ybWF0OiAke2Zvcm1hdH1gKTtcbiAgICB9XG5cbiAgICBjb25zdCBvdXRwdXRQYXRoID0gcGF0aC5qb2luKGNvbmZpZ0RpciwgYCR7bGV2ZWx9LiR7ZXh0fWApO1xuICAgIGNvbnN0IGJhY2t1cFBhdGggPSBwYXRoLmpvaW4oY29uZmlnRGlyLCBgJHtsZXZlbH0tYmFja3VwLiR7ZXh0fWApO1xuICAgIGNvbnN0IGNvbmZGaWxlRXhpc3RzID0gZnMuZXhpc3RzU3luYyhvdXRwdXRQYXRoKTtcbiAgICBpZiAoY29uZkZpbGVFeGlzdHMpIHtcbiAgICAgIGZzLnJlbmFtZVN5bmMob3V0cHV0UGF0aCwgYmFja3VwUGF0aCk7XG4gICAgfVxuICAgIGZzLndyaXRlRmlsZVN5bmMob3V0cHV0UGF0aCwgb3V0cHV0KTtcblxuICAgIGNvbnN0IHVwZGF0ZWRDb25mT2JqID0gY29uZmlnLnV0aWwubG9hZEZpbGVDb25maWdzKCk7XG5cbiAgICB0cnkge1xuICAgICAgdGhpcy52YWxpZGF0ZUNvbmZpZyh1cGRhdGVkQ29uZk9iaik7XG4gICAgICBmcy51bmxpbmtTeW5jKGJhY2t1cFBhdGgpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBmcy51bmxpbmtTeW5jKG91dHB1dFBhdGgpO1xuICAgICAgaWYgKGNvbmZGaWxlRXhpc3RzKSB7XG4gICAgICAgIGZzLnJlbmFtZVN5bmMoYmFja3VwUGF0aCwgb3V0cHV0UGF0aCk7XG4gICAgICB9XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gIH07XG59XG4iXX0=
|
|
973
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vbGliL2NvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLE1BQU0sTUFBTSxRQUFRLENBQUM7QUFDNUIsT0FBTyxLQUFLLEVBQUUsTUFBTSxJQUFJLENBQUM7QUFDekIsT0FBTyxLQUFLLElBQUksTUFBTSxTQUFTLENBQUM7QUFDaEMsT0FBTyxJQUFJLE1BQU0sTUFBTSxDQUFDO0FBRXhCLE9BQU8sVUFBVSxFQUFFLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQVMxRSxPQUFPLEVBQ0wsa0JBQWtCLEVBQ2xCLGNBQWMsR0FDZixNQUFNLHFDQUFxQyxDQUFDO0FBQzdDLE9BQU8sRUFDTCxhQUFhLEVBQ2IseUJBQXlCLEVBQ3pCLFlBQVksR0FDYixNQUFNLFNBQVMsQ0FBQztBQUNqQixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsZUFBZSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFdkUsTUFBTSxPQUFPLGVBQWU7SUFDbEIsTUFBTSxDQUFlO0lBRTdCLFlBQW9CLE1BQW9CO1FBQ3RDLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztJQUN4QixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxZQUFZLEdBQUcsR0FBUyxFQUFFO1FBQ3hCLE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDbkMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN6QixPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUMsQ0FBQztJQUVGOztPQUVHO0lBQ0gsTUFBTSxDQUFDLFFBQVEsR0FBRyxDQUFDLFVBQWtCLEVBQW1CLEVBQUU7UUFDeEQsTUFBTSxhQUFhLEdBQUcsRUFBRSxDQUFDLFlBQVksQ0FBQyxVQUFVLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFFM0QsTUFBTSxVQUFVLEdBQUcsaUJBQWlCLENBQUM7WUFDbkMsZ0JBQWdCLEVBQUUsS0FBSztZQUN2QixlQUFlLEVBQUUsSUFBSTtTQUN0QixDQUFDLENBQUM7UUFFSCxNQUFNLE1BQU0sR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQy9DLE9BQU8sSUFBSSxlQUFlLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDckMsQ0FBQyxDQUFDO0lBRUY7Ozs7T0FJRztJQUNILE1BQU0sQ0FBQyxVQUFVLEdBQUcsQ0FBQyxNQUFvQixFQUFtQixFQUFFO1FBQzVELE9BQU8sSUFBSSxlQUFlLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDckMsQ0FBQyxDQUFDO0lBRUY7Ozs7T0FJRztJQUNILDhEQUE4RDtJQUN2RCxjQUFjLENBQUMsTUFBMkI7UUFDL0MsSUFBSSxDQUFDLGFBQWEsQ0FDaEIsTUFBTSxFQUNOLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUN6QyxNQUFNLEVBQ04sRUFBRSxDQUNILENBQUM7UUFFRixJQUFJLENBQUMsaUJBQWlCLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQzFELENBQUM7SUFFRDs7Ozs7Ozs7Ozs7O09BWUc7SUFDSyxpQkFBaUI7SUFDdkIsOERBQThEO0lBQzlELE1BQTJCO0lBQzNCLDhEQUE4RDtJQUM5RCxTQUE4QixFQUM5QixTQUF1QixFQUN2QixJQUFjO0lBQ2QsOERBQThEO0lBQzlELE9BQTZCO1FBRTdCLE1BQU0sYUFBYSxHQUFHLENBQUMsSUFBbUIsRUFBRSxFQUFFLENBQzVDLGlDQUFpQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUM7UUFDM0QsS0FBSyxNQUFNLElBQUksSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7WUFDMUMsTUFBTSxTQUFTLEdBQWEsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDaEQsSUFBSSxDQUFDO2dCQUNILE1BQU0sS0FBSyxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDOUIsSUFBSSxLQUFLLEdBQUcsU0FBUyxDQUFDO2dCQUN0QixJQUFJLFNBQVMsSUFBSSxTQUFTLElBQUksTUFBTSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQztvQkFDN0QsS0FBSyxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDMUIsQ0FBQztnQkFFRCxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFNBQVMsQ0FBQyxDQUFDO2dCQUVwRCx1RUFBdUU7Z0JBQ3ZFLElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxRQUFRLEVBQUUsQ0FBQztvQkFDNUIsSUFBSSxDQUFDLGlCQUFpQixDQUNwQixNQUFNLEVBQ04sS0FBSyxFQUNMLEtBQUssQ0FBQyxRQUFRLEVBQ2QsU0FBUyxFQUNULE9BQU8sQ0FDUixDQUFDO2dCQUNKLENBQUM7cUJBQU0sSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLE9BQU8sRUFBRSxDQUFDO29CQUNsQyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQzt3QkFDekIsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFOzRCQUNyQixlQUFlLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsU0FBUyxDQUFDLENBQUM7NEJBQ3RELElBQUksQ0FBQyxpQkFBaUIsQ0FDcEIsTUFBTSxFQUNOLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFDaEIsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFDdkIsSUFBSSxFQUNKLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FDakIsQ0FBQzs0QkFDRixlQUFlLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsU0FBUyxDQUFDLENBQUM7d0JBQ3pELENBQUMsQ0FBQyxDQUFDO29CQUNMLENBQUM7Z0JBQ0gsQ0FBQztxQkFBTSxJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssT0FBTyxFQUFFLENBQUM7b0JBQ2xDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO2dCQUNyRSxDQUFDO1lBQ0gsQ0FBQztZQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7Z0JBQ2YsTUFBTSxJQUFJLEtBQUssQ0FDYixHQUFHLGFBQWEsQ0FBQyxTQUFTLENBQUMsS0FBSyxLQUFLLFlBQVksS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FDakYsQ0FBQztZQUNKLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUVEOzs7Ozs7Ozs7Ozs7T0FZRztJQUNLLGtCQUFrQjtJQUN4Qiw4REFBOEQ7SUFDOUQsS0FBVSxFQUNWLElBQVksRUFDWixLQUFpQjtJQUNqQiw4REFBOEQ7SUFDOUQsTUFBMkIsRUFDM0IsU0FBbUI7SUFDbkIsOERBQThEO0lBQzlELE9BQTZCO1FBRTdCLElBQUksU0FBUyxHQUFHLEtBQUssQ0FBQztRQUN0QixJQUFJLGdCQUFnQixHQUFHLEVBQUUsQ0FBQztRQUUxQixLQUFLLE1BQU0sV0FBVyxJQUFJLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUN6QyxJQUFJLENBQUM7Z0JBQ0gsSUFBSSxDQUFDLGlCQUFpQixDQUNwQixNQUFNLEVBQ04sRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUNqQixFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsV0FBVyxFQUFFLEVBQ3ZCLFNBQVMsRUFDVCxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQ2xCLENBQUM7Z0JBQ0YsU0FBUyxHQUFHLElBQUksQ0FBQztZQUNuQixDQUFDO1lBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztnQkFDWCxnQkFBZ0IsR0FBRyxDQUFDLFlBQVksS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQzlELE9BQU8sQ0FBQyxLQUFLLENBQ1gscUJBQXFCLFNBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLGtCQUFrQixnQkFBZ0IsRUFBRSxDQUM3RSxDQUFDO1lBQ0osQ0FBQztRQUNILENBQUM7UUFFRCxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDZixNQUFNLElBQUksS0FBSyxDQUNiLGNBQWMsU0FBUyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsd0RBQXdELGdCQUFnQixFQUFFLENBQzVHLENBQUM7UUFDSixDQUFDO1FBRUQsSUFBSSxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDdEIsU0FBUyxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBQ3JDLE1BQU0sWUFBWSxHQUNoQixLQUFLLEtBQUssU0FBUztnQkFDakIsQ0FBQyxDQUFDLEtBQUs7Z0JBQ1AsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxDQUFDO1lBRWpELEtBQUssTUFBTSxVQUFVLElBQUksS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDO2dCQUMzQyxNQUFNLGNBQWMsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLElBQUksQ0FDakQsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsS0FBSyxNQUFNLElBQUksR0FBRyxLQUFLLE9BQU8sQ0FDM0MsQ0FBQztnQkFFRixJQUFJLGNBQWMsSUFBSSxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDO29CQUNyRSxJQUFJLENBQUM7d0JBQ0gsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLGNBQWMsQ0FBQyxDQUMxQyxZQUFZLEVBQ1osVUFBVSxFQUNWLE1BQU0sRUFDTixJQUFJLEVBQ0osT0FBTyxDQUNSLENBQUM7b0JBQ0osQ0FBQztvQkFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO3dCQUNmLE1BQU0sSUFBSSxLQUFLLENBQ2IsVUFBVSxDQUFDLEtBQUs7NEJBQ2QsQ0FBQyxLQUFLLFlBQVksS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FDM0QsQ0FBQztvQkFDSixDQUFDO2dCQUNILENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFRDs7Ozs7Ozs7O09BU0c7SUFDSCxNQUFNLENBQUMsWUFBWTtJQUNqQiw4REFBOEQ7SUFDOUQsR0FBd0IsRUFDeEIsUUFBbUIsRUFDbkIsSUFBYztRQUVkLElBQUksS0FBSyxHQUFHLEdBQUcsQ0FBQztRQUNoQixLQUFLLE1BQU0sR0FBRyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUNwQyxJQUFJLEtBQUssSUFBSSxTQUFTLElBQUksTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDcEQsS0FBSyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNyQixDQUFDO2lCQUFNLENBQUM7Z0JBQ04sS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztnQkFDaEIsS0FBSyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNyQixDQUFDO1FBQ0gsQ0FBQztRQUVELE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM1QixJQUFJLE9BQU8sSUFBSSxTQUFTLEVBQUUsQ0FBQztZQUN6QixLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsUUFBUSxDQUFDO1FBQzVCLENBQUM7SUFDSCxDQUFDO0lBRUQ7Ozs7Ozs7OztPQVNHO0lBQ0ssYUFBYSxHQUFHO0lBQ3RCLDhEQUE4RDtJQUM5RCxLQUFVLEVBQ1YsS0FBa0I7SUFDbEIsOERBQThEO0lBQzlELE1BQTJCLEVBQzNCLElBQWM7SUFDZCw4REFBOEQ7SUFDOUQsT0FBNkIsRUFDN0IsRUFBRTtRQUNGLElBQUksS0FBSyxJQUFJLFNBQVMsRUFBRSxDQUFDO1lBQ3ZCLElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxRQUFRLEVBQUUsQ0FBQztnQkFDNUIsSUFDRSxPQUFPLEtBQUssS0FBSyxRQUFRO29CQUN6QixDQUFDLEtBQUssR0FBRyxNQUFNLENBQUMsZ0JBQWdCLElBQUksS0FBSyxHQUFHLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxFQUNwRSxDQUFDO29CQUNELE1BQU0sSUFBSSxLQUFLLENBQ2IsVUFBVSxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxzS0FBc0ssQ0FDL0wsQ0FBQztnQkFDSixDQUFDO2dCQUNELElBQUksQ0FBQztvQkFDSCxLQUFLLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO29CQUN0QixlQUFlLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7Z0JBQ3BELENBQUM7Z0JBQUMsTUFBTSxDQUFDO29CQUNQLE1BQU0sSUFBSSxLQUFLLENBQ2Isa0JBQWtCLEtBQUssMkJBQTJCLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FDcEUsQ0FBQztnQkFDSixDQUFDO1lBQ0gsQ0FBQztZQUNELElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxRQUFRLEVBQUUsQ0FBQztnQkFDNUIsSUFBSSxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQztvQkFDekIsTUFBTSxJQUFJLEtBQUssQ0FDYixVQUFVLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLDZEQUE2RCxDQUN0RixDQUFDO2dCQUNKLENBQUM7Z0JBQ0QsS0FBSyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDdEIsSUFDRSxLQUFLLEdBQUcsTUFBTSxDQUFDLGdCQUFnQjtvQkFDL0IsS0FBSyxHQUFHLE1BQU0sQ0FBQyxnQkFBZ0IsRUFDL0IsQ0FBQztvQkFDRCxNQUFNLElBQUksS0FBSyxDQUNiLGNBQWMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsMkRBQTJELENBQ3hGLENBQUM7Z0JBQ0osQ0FBQztnQkFDRCxlQUFlLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDcEQsQ0FBQztZQUNELGVBQWUsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzVDLENBQUM7UUFDRCxJQUNFLEtBQUssSUFBSSxTQUFTO1lBQ2xCLEtBQUssQ0FBQyxJQUFJLEtBQUssUUFBUTtZQUN2QixLQUFLLENBQUMsSUFBSSxLQUFLLE9BQU87WUFDdEIsS0FBSyxDQUFDLE9BQU8sRUFDYixDQUFDO1lBQ0QsS0FBSyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUM7WUFDdEIsZUFBZSxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQztRQUM1RCxDQUFDO1FBQ0QsSUFDRSxLQUFLLENBQUMsSUFBSSxLQUFLLFFBQVE7WUFDdkIsS0FBSyxDQUFDLElBQUksS0FBSyxPQUFPO1lBQ3RCLEtBQUssQ0FBQyxJQUFJLEtBQUssT0FBTztZQUN0QixLQUFLLENBQUMsV0FBVyxFQUNqQixDQUFDO1lBQ0QsS0FBSyxNQUFNLFVBQVUsSUFBSSxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUM7Z0JBQzNDLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsTUFBTSxDQUN6QyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxLQUFLLE1BQU0sSUFBSSxHQUFHLEtBQUssT0FBTyxDQUMzQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNMLElBQUksTUFBTSxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQztvQkFDdEQsSUFBSSxDQUFDO3dCQUNILGdCQUFnQixDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FDaEMsS0FBSyxFQUNMLFVBQVUsRUFDVixNQUFNLEVBQ04sSUFBSSxFQUNKLE9BQU8sQ0FDUixDQUFDO29CQUNKLENBQUM7b0JBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQzt3QkFDZixJQUFJLFVBQVUsQ0FBQyxLQUFLLElBQUksU0FBUyxFQUFFLENBQUM7NEJBQ2xDLE1BQU0sSUFBSSxLQUFLLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO3dCQUNwQyxDQUFDO3dCQUNELE1BQU0sS0FBSyxDQUFDO29CQUNkLENBQUM7Z0JBQ0gsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQyxDQUFDO0lBRUY7Ozs7Ozs7O09BUUc7SUFDSSxVQUFVLEdBQUcsQ0FDbEIsSUFBVTtJQUNWLDhEQUE4RDtJQUM5RCxNQUEyQjtJQUMzQiw4REFBOEQ7SUFDOUQsT0FBNkIsRUFDcEIsRUFBRTtRQUNYLElBQUksU0FBUyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRXJDLElBQUksT0FBTyxJQUFJLFNBQVMsRUFBRSxDQUFDO1lBQ3pCLE1BQU0sVUFBVSxHQUFHLGVBQWUsQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1lBQy9ELElBQUksVUFBVSxLQUFLLFNBQVMsRUFBRSxDQUFDO2dCQUM3QixPQUFPLFVBQVUsS0FBSyxJQUFJLENBQUMsS0FBSyxDQUFDO1lBQ25DLENBQUM7WUFFRCxNQUFNLGFBQWEsR0FBRyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDMUMsTUFBTSxhQUFhLEdBQUcsZUFBZSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsYUFBYSxDQUFDLENBQUM7WUFDdEUsSUFBSSxhQUFhLEtBQUssU0FBUyxFQUFFLENBQUM7Z0JBQ2hDLE9BQU8sYUFBYSxLQUFLLElBQUksQ0FBQyxLQUFLLENBQUM7WUFDdEMsQ0FBQztRQUNILENBQUM7UUFFRCxNQUFNLEtBQUssR0FBRyxlQUFlLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxTQUFTLENBQUMsQ0FBQztRQUN6RCxPQUFPLEtBQUssSUFBSSxTQUFTLElBQUksS0FBSyxLQUFLLElBQUksQ0FBQyxLQUFLLENBQUM7SUFDcEQsQ0FBQyxDQUFDO0lBRUY7Ozs7Ozs7T0FPRztJQUNILDhEQUE4RDtJQUM5RCxNQUFNLENBQUMsT0FBTyxHQUFHLENBQUMsTUFBVyxFQUFFLElBQWMsRUFBRSxFQUFFO1FBQy9DLElBQUksS0FBSyxHQUFHLE1BQU0sQ0FBQztRQUNuQixLQUFLLE1BQU0sR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO1lBQ3ZCLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO2dCQUN6QixJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO29CQUN2QixLQUFLLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsS0FBSyxTQUFTLENBQUMsQ0FBQztnQkFDeEUsQ0FBQztxQkFBTSxDQUFDO29CQUNOLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztvQkFDMUIsS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDdkIsQ0FBQztZQUNILENBQUM7aUJBQU0sSUFBSSxLQUFLLElBQUksU0FBUyxJQUFJLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQzNELEtBQUssR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDckIsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLE9BQU8sU0FBUyxDQUFDO1lBQ25CLENBQUM7UUFDSCxDQUFDO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDLENBQUM7SUFFRjs7T0FFRztJQUNLLGNBQWMsR0FBRyxHQUFHLEVBQUU7UUFDNUIsTUFBTSxhQUFhLEdBQUcsQ0FBQyxJQUFtQixFQUFFLEVBQUUsQ0FDNUMsaUNBQWlDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQztRQUUzRCxNQUFNLEtBQUssR0FHTjtZQUNIO2dCQUNFLFNBQVMsRUFBRSxJQUFJLENBQUMsTUFBTTtnQkFDdEIsVUFBVSxFQUFFLEVBQUU7YUFDZjtTQUNGLENBQUM7UUFFRixtRUFBbUU7UUFDbkUsT0FBTyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ3hCLE1BQU0sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLEdBQUcsS0FBSyxDQUFDLEdBQUcsRUFBRyxDQUFDO1lBRS9DLDJDQUEyQztZQUMzQyxLQUFLLE1BQU0sSUFBSSxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQztnQkFDcEQsTUFBTSxJQUFJLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7Z0JBQ3ZDLElBQUksQ0FBQztvQkFDSCxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLENBQUM7b0JBQzlCLE1BQU0sS0FBSyxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFFOUIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxJQUFJLE9BQU8sS0FBSyxDQUFDLElBQUksS0FBSyxRQUFRLEVBQUUsQ0FBQzt3QkFDcEUsTUFBTSxJQUFJLEtBQUssQ0FDYixpRUFBaUUsQ0FDbEUsQ0FBQztvQkFDSixDQUFDO29CQUVELElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO3dCQUN6QyxNQUFNLElBQUksS0FBSyxDQUFDLDJCQUEyQixLQUFLLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQztvQkFDNUQsQ0FBQztvQkFFRCxJQUFJLENBQUMsbUJBQW1CLENBQUMsS0FBSyxDQUFDLENBQUM7b0JBRWhDLDZEQUE2RDtvQkFDN0QsYUFBYTtvQkFDYixJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssUUFBUSxFQUFFLENBQUM7d0JBQzVCLEtBQUssQ0FBQyxJQUFJLENBQUM7NEJBQ1QsU0FBUyxFQUFFLEtBQUssQ0FBQyxRQUFROzRCQUN6QixVQUFVLEVBQUUsSUFBSTt5QkFDakIsQ0FBQyxDQUFDO29CQUNMLENBQUM7eUJBQU0sSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLE9BQU8sRUFBRSxDQUFDO3dCQUNsQyxLQUFLLENBQUMsSUFBSSxDQUFDOzRCQUNULFNBQVMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxDQUFDLEtBQUssRUFBRTs0QkFDbEMsVUFBVSxFQUFFLElBQUk7eUJBQ2pCLENBQUMsQ0FBQztvQkFDTCxDQUFDO3lCQUFNLElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxPQUFPLEVBQUUsQ0FBQzt3QkFDbEMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxVQUFVLEVBQUUsS0FBSyxFQUFFLEVBQUU7NEJBQzNDLEtBQUssQ0FBQyxJQUFJLENBQUM7Z0NBQ1QsU0FBUyxFQUFFLEVBQUUsQ0FBQyxHQUFHLElBQUksVUFBVSxLQUFLLEVBQUUsQ0FBQyxFQUFFLFVBQVUsRUFBRTtnQ0FDckQsVUFBVSxFQUFFLElBQUk7NkJBQ2pCLENBQUMsQ0FBQzt3QkFDTCxDQUFDLENBQUMsQ0FBQztvQkFDTCxDQUFDO2dCQUNILENBQUM7Z0JBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztvQkFDZixNQUFNLElBQUksS0FBSyxDQUNiLEdBQUcsYUFBYSxDQUFDLElBQUksQ0FBQyxLQUFLLEtBQUssWUFBWSxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUM1RSxDQUFDO2dCQUNKLENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUMsQ0FBQztJQUVGOzs7O09BSUc7SUFDSyxrQkFBa0IsR0FBRyxDQUFDLElBQVksRUFBRSxFQUFFO1FBQzVDLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ3ZCLE1BQU0sSUFBSSxLQUFLLENBQUMsbURBQW1ELENBQUMsQ0FBQztRQUN2RSxDQUFDO0lBQ0gsQ0FBQyxDQUFDO0lBRUY7Ozs7T0FJRztJQUNLLG1CQUFtQixHQUFHLENBQUMsS0FBa0IsRUFBRSxFQUFFO1FBQ25ELEtBQUssTUFBTSxHQUFHLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3JDLElBQ0UsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLGtCQUFrQixDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUM7Z0JBQzNDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxTQUFTLEVBQUUsR0FBRyxDQUFDO2dCQUNqRCxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsa0JBQWtCLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUNuRCxDQUFDO2dCQUNELE1BQU0sSUFBSSxLQUFLLENBQUMsc0NBQXNDLEdBQUcsR0FBRyxDQUFDLENBQUM7WUFDaEUsQ0FBQztRQUNILENBQUM7UUFFRCxLQUFLLE1BQU0sU0FBUyxJQUFJLE1BQU0sQ0FBQyxNQUFNLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUM5RCxTQUFTLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ3pCLENBQUM7UUFFRCxJQUNFLEtBQUssQ0FBQyxJQUFJLEtBQUssUUFBUTtZQUN2QixLQUFLLENBQUMsSUFBSSxLQUFLLE9BQU87WUFDdEIsS0FBSyxDQUFDLElBQUksS0FBSyxPQUFPLEVBQ3RCLENBQUM7WUFDRCxLQUFLLE1BQU0sU0FBUyxJQUFJLE1BQU0sQ0FBQyxNQUFNLENBQUMsa0JBQWtCLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztnQkFDcEUsU0FBUyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztZQUN6QixDQUFDO1FBQ0gsQ0FBQztRQUVELEtBQUssTUFBTSxTQUFTLElBQUksTUFBTSxDQUFDLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ3RFLFNBQVMsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDekIsQ0FBQztJQUNILENBQUMsQ0FBQztJQUVGOzs7OztPQUtHO0lBQ0gsY0FBYyxHQUFHLENBQUMsSUFBYyxFQUEyQixFQUFFO1FBQzNELElBQUksT0FBTyxHQUE2QixJQUFJLENBQUMsTUFBTSxDQUFDO1FBQ3BELElBQUksS0FBSyxHQUE0QixTQUFTLENBQUM7UUFFL0MsS0FBSyxNQUFNLElBQUksSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUN4QixJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQ2IsSUFBSSxLQUFLLEVBQUUsSUFBSSxLQUFLLE9BQU8sRUFBRSxDQUFDO29CQUM1QixJQUFJLEtBQThCLENBQUM7b0JBRW5DLEtBQUssTUFBTSxLQUFLLElBQUksS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO3dCQUNuQyxJQUNFLEtBQUssQ0FBQyxJQUFJLEtBQUssUUFBUTs0QkFDdkIsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxFQUNuQyxDQUFDOzRCQUNELEtBQUssR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDOzRCQUM3QixNQUFNO3dCQUNSLENBQUM7b0JBQ0gsQ0FBQztvQkFFRCxJQUFJLENBQUMsS0FBSzt3QkFBRSxPQUFPLFNBQVMsQ0FBQztvQkFFN0IsS0FBSyxHQUFHLEtBQUssQ0FBQztvQkFFZCxJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssUUFBUSxFQUFFLENBQUM7d0JBQzVCLE9BQU8sR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDO29CQUMzQixDQUFDO3lCQUFNLElBQ0wsS0FBSyxDQUFDLElBQUksS0FBSyxPQUFPO3dCQUN0QixDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLFFBQVEsSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxPQUFPLENBQUMsRUFDL0QsQ0FBQzt3QkFDRCxPQUFPOzRCQUNMLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztvQkFDckUsQ0FBQzt5QkFBTSxDQUFDO3dCQUNOLE9BQU8sR0FBRyxTQUFTLENBQUM7b0JBQ3RCLENBQUM7b0JBRUQsU0FBUztnQkFDWCxDQUFDO2dCQUVELE9BQU8sU0FBUyxDQUFDO1lBQ25CLENBQUM7WUFFRCxJQUFJLE1BQU0sQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUM7Z0JBQ2pDLEtBQUssR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBRXRCLElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxRQUFRLEVBQUUsQ0FBQztvQkFDNUIsT0FBTyxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUM7Z0JBQzNCLENBQUM7cUJBQU0sSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLE9BQU8sRUFBRSxDQUFDO29CQUNsQyxJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLFFBQVEsRUFBRSxDQUFDO3dCQUNsQyxPQUFPLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUM7b0JBQ2pDLENBQUM7eUJBQU0sSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxPQUFPLEVBQUUsQ0FBQzt3QkFDeEMsT0FBTyxHQUFHLFNBQVMsQ0FBQzt3QkFDcEIsS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUM7b0JBQ3RCLENBQUM7eUJBQU0sQ0FBQzt3QkFDTixPQUFPLEdBQUcsU0FBUyxDQUFDO29CQUN0QixDQUFDO2dCQUNILENBQUM7cUJBQU0sQ0FBQztvQkFDTixPQUFPLEdBQUcsU0FBUyxDQUFDO2dCQUN0QixDQUFDO1lBQ0gsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLElBQUksS0FBSyxFQUFFLElBQUksS0FBSyxPQUFPLEVBQUUsQ0FBQztvQkFDNUIsSUFBSSxLQUE4QixDQUFDO29CQUVuQyxLQUFLLE1BQU0sS0FBSyxJQUFJLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQzt3QkFDbkMsSUFDRSxLQUFLLENBQUMsSUFBSSxLQUFLLFFBQVE7NEJBQ3ZCLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsRUFDbkMsQ0FBQzs0QkFDRCxLQUFLLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQzs0QkFDN0IsTUFBTTt3QkFDUixDQUFDO29CQUNILENBQUM7b0JBRUQsSUFBSSxDQUFDLEtBQUs7d0JBQUUsT0FBTyxTQUFTLENBQUM7b0JBRTdCLEtBQUssR0FBRyxLQUFLLENBQUM7b0JBRWQsSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLFFBQVEsRUFBRSxDQUFDO3dCQUM1QixPQUFPLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQztvQkFDM0IsQ0FBQzt5QkFBTSxDQUFDO3dCQUNOLE9BQU8sR0FBRyxTQUFTLENBQUM7b0JBQ3RCLENBQUM7Z0JBQ0gsQ0FBQztxQkFBTSxDQUFDO29CQUNOLE9BQU8sU0FBUyxDQUFDO2dCQUNuQixDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUM7UUFFRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUMsQ0FBQztJQUVGOzs7O09BSUc7SUFDSCw4REFBOEQ7SUFDOUQsZUFBZSxHQUFHLENBQUMsT0FBZ0MsRUFBdUIsRUFBRTtRQUMxRSxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzNELElBQUksT0FBTyxFQUFFLFFBQVEsRUFBRSxDQUFDO1lBQ3RCLElBQUksQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDakMsQ0FBQztRQUNELE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUMsQ0FBQztJQUVGLCtFQUErRTtJQUN2RSxzQkFBc0IsR0FBRyxDQUMvQixNQUFvQixFQUVDLEVBQUU7UUFDdkIsOERBQThEO1FBQzlELE1BQU0sUUFBUSxHQUF3QixNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzFELEtBQUssTUFBTSxHQUFHLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1lBQ3RDLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUMxQixJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssUUFBUSxFQUFFLENBQUM7Z0JBQzVCLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQ2xFLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7b0JBQzFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsR0FBRyxhQUFhLENBQUM7Z0JBQ2hDLENBQUM7WUFDSCxDQUFDO2lCQUFNLElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxPQUFPLEVBQUUsQ0FBQztnQkFDbEMsSUFBSSxLQUFLLENBQUMsT0FBTyxJQUFJLFNBQVMsRUFBRSxDQUFDO29CQUMvQixJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLFFBQVEsRUFBRSxDQUFDO3dCQUNsQyxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsc0JBQXNCLENBQzlDLEtBQUssQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUNyQixDQUFDO3dCQUNGLFFBQVEsQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQWUsRUFBRSxFQUFFOzRCQUNwRCxJQUNFLElBQUksSUFBSSxJQUFJO2dDQUNaLE9BQU8sSUFBSSxLQUFLLFFBQVE7Z0NBQ3hCLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFDcEIsQ0FBQztnQ0FDRCxPQUFPLEVBQUUsR0FBRyxZQUFZLEVBQUUsR0FBRyxJQUFJLEVBQUUsQ0FBQzs0QkFDdEMsQ0FBQzs0QkFDRCxPQUFPLElBQUksQ0FBQzt3QkFDZCxDQUFDLENBQUMsQ0FBQztvQkFDTCxDQUFDO3lCQUFNLENBQUM7d0JBQ04sUUFBUSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUM7b0JBQ2hDLENBQUM7Z0JBQ0gsQ0FBQztZQUNILENBQUM7aUJBQU0sSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLE9BQU8sSUFBSSxLQUFLLENBQUMsT0FBTyxJQUFJLFNBQVMsRUFBRSxDQUFDO2dCQUNoRSxRQUFRLENBQUMsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQztZQUNoQyxDQUFDO1FBQ0gsQ0FBQztRQUNELE9BQU8sUUFBUSxDQUFDO0lBQ2xCLENBQUMsQ0FBQztJQUVGOzs7OztPQUtHO0lBQ0gsZUFBZSxHQUFHLENBQUMsSUFBWSxFQUFVLEVBQUU7UUFDekMsTUFBTSxLQUFLLEdBQWEsRUFBRSxDQUFDO1FBQzNCLE1BQU0sZ0JBQWdCLEdBQWdCLElBQUksR0FBRyxFQUFFLENBQUM7UUFFaEQsTUFBTSxLQUFLLEdBTU47WUFDSDtnQkFDRSxTQUFTLEVBQUUsSUFBSSxDQUFDLE1BQU07Z0JBQ3RCLFFBQVEsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7Z0JBQ2xDLFVBQVUsRUFBRSxFQUFFO2dCQUNkLFFBQVEsRUFBRSxJQUFJO2dCQUNkLFVBQVUsRUFBRSxFQUFFO2FBQ2Y7U0FDRixDQUFDO1FBQ0YsK0NBQStDO1FBQy9DLE9BQU8sS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUN4QixNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztZQUN4QyxNQUFNLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxHQUFHLE9BQU8sQ0FBQztZQUUxRSxJQUFJLFFBQVEsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7Z0JBQzFCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztvQkFDcEMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDO29CQUN0RCxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQ2pDLENBQUM7Z0JBQ0QsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDO2dCQUNaLFNBQVM7WUFDWCxDQUFDO1lBRUQsTUFBTSxTQUFTLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRyxDQUFDO1lBQ2xDLE1BQU0sS0FBSyxHQUFHLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUNuQyxNQUFNLElBQUksR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQzFDLHFFQUFxRTtZQUNyRSxzRUFBc0U7WUFDdEUsYUFBYTtZQUNiLE1BQU0sZUFBZSxHQUFHLFNBQVMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDO2dCQUM3QyxDQUFDLENBQUMsSUFBSSxTQUFTLEdBQUc7Z0JBQ2xCLENBQUMsQ0FBQyxTQUFTLENBQUM7WUFDZCxJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssT0FBTyxFQUFFLENBQUM7Z0JBQzNCLE1BQU0sVUFBVSxHQUFhLEVBQUUsQ0FBQztnQkFFaEMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLEVBQUU7b0JBQ3RDLElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxPQUFPLEVBQUUsQ0FBQzt3QkFDM0IsS0FBSyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxXQUFXLEVBQUUsRUFBRTs0QkFDckMsVUFBVSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7d0JBQ3BDLENBQUMsQ0FBQyxDQUFDO3dCQUVILE9BQU87b0JBQ1QsQ0FBQztvQkFFRCxJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssUUFBUSxFQUFFLENBQUM7d0JBQzVCLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxTQUFTLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQzt3QkFDbkQsTUFBTSxRQUFRLEdBQUcsVUFBVSxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7d0JBRXZELEtBQUssQ0FBQyxJQUFJLENBQUM7NEJBQ1QsU0FBUyxFQUFFLEtBQUssQ0FBQyxRQUFROzRCQUN6QixRQUFRLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsT0FBTyxFQUFFOzRCQUMvQyxVQUFVLEVBQUUsVUFBVTs0QkFDdEIsUUFBUTs0QkFDUixVQUFVLEVBQUUsRUFBRTt5QkFDZixDQUFDLENBQUM7d0JBRUgsVUFBVSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQzt3QkFDMUIsT0FBTztvQkFDVCxDQUFDO29CQUVELElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxPQUFPLEVBQUUsQ0FBQzt3QkFDM0IsSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxRQUFRLEVBQUUsQ0FBQzs0QkFDbEMsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDOzRCQUMvQyxNQUFNLFFBQVEsR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQzs0QkFFckQsS0FBSyxDQUFDLElBQUksQ0FBQztnQ0FDVCxTQUFTLEVBQUUsS0FBSyxDQUFDLEtBQUssQ0FBQyxRQUFRO2dDQUMvQixRQUFRLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLE9BQU8sRUFBRTtnQ0FDckQsVUFBVSxFQUFFLFFBQVE7Z0NBQ3BCLFFBQVE7Z0NBQ1IsVUFBVSxFQUFFLEVBQUU7NkJBQ2YsQ0FBQyxDQUFDOzRCQUVILFVBQVUsQ0FBQyxJQUFJLENBQUMsR0FBRyxRQUFRLElBQUksQ0FBQyxDQUFDO3dCQUNuQyxDQUFDOzZCQUFNLENBQUM7NEJBQ04sVUFBVSxDQUFDLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQzt3QkFDM0MsQ0FBQzt3QkFFRCxPQUFPO29CQUNULENBQUM7b0JBRUQsVUFBVSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQzlCLENBQUMsQ0FBQyxDQUFDO2dCQUVILFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxlQUFlLEVBQUUsVUFBVSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQzNELFNBQVM7WUFDWCxDQUFDO1lBQ0QsSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLFFBQVEsRUFBRSxDQUFDO2dCQUM1QixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFFakQsS0FBSyxDQUFDLElBQUksQ0FBQztvQkFDVCxTQUFTLEVBQUUsS0FBSyxDQUFDLFFBQVE7b0JBQ3pCLFFBQVEsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxPQUFPLEVBQUU7b0JBQy9DLFVBQVUsRUFBRSxJQUFJO29CQUNoQixRQUFRO29CQUNSLFVBQVUsRUFBRSxFQUFFO2lCQUNmLENBQUMsQ0FBQztnQkFFSCxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsZUFBZSxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUM7Z0JBQzdDLFNBQVM7WUFDWCxDQUFDO1lBQ0QsSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLE9BQU8sRUFBRSxDQUFDO2dCQUMzQixJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLFFBQVEsRUFBRSxDQUFDO29CQUNsQyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztvQkFFakQsS0FBSyxDQUFDLElBQUksQ0FBQzt3QkFDVCxTQUFTLEVBQUUsS0FBSyxDQUFDLEtBQUssQ0FBQyxRQUFRO3dCQUMvQixRQUFRLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLE9BQU8sRUFBRTt3QkFDckQsVUFBVSxFQUFFLElBQUk7d0JBQ2hCLFFBQVE7d0JBQ1IsVUFBVSxFQUFFLEVBQUU7cUJBQ2YsQ0FBQyxDQUFDO29CQUVILFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxlQUFlLEVBQUUsR0FBRyxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUM7Z0JBQ3RELENBQUM7cUJBQU0sSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxPQUFPLEVBQUUsQ0FBQztvQkFDeEMsTUFBTSxVQUFVLEdBQWEsRUFBRSxDQUFDO29CQUVoQyxLQUFLLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLEVBQUU7d0JBQzVDLElBQ0UsS0FBSyxDQUFDLElBQUksS0FBSyxRQUFROzRCQUN2QixLQUFLLENBQUMsSUFBSSxLQUFLLFFBQVE7NEJBQ3ZCLEtBQUssQ0FBQyxJQUFJLEtBQUssU0FBUyxFQUN4QixDQUFDOzRCQUNELFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDOzRCQUM1QixPQUFPO3dCQUNULENBQUM7d0JBRUQsSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLFFBQVEsRUFBRSxDQUFDOzRCQUM1QixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsU0FBUyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7NEJBQ25ELE1BQU0sUUFBUSxHQUFHLFVBQVUsQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDOzRCQUV2RCxLQUFLLENBQUMsSUFBSSxDQUFDO2dDQUNULFNBQVMsRUFBRSxLQUFLLENBQUMsUUFBUTtnQ0FDekIsUUFBUSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLE9BQU8sRUFBRTtnQ0FDL0MsVUFBVSxFQUFFLFVBQVU7Z0NBQ3RCLFFBQVE7Z0NBQ1IsVUFBVSxFQUFFLEVBQUU7NkJBQ2YsQ0FBQyxDQUFDOzRCQUVILFVBQVUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7NEJBQzFCLE9BQU87d0JBQ1QsQ0FBQzt3QkFFRCxJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssT0FBTyxFQUFFLENBQUM7NEJBQzNCLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssUUFBUSxFQUFFLENBQUM7Z0NBQ2xDLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxTQUFTLEtBQUssTUFBTSxDQUFDLENBQUMsQ0FBQztnQ0FDckQsTUFBTSxRQUFRLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7Z0NBRXJELEtBQUssQ0FBQyxJQUFJLENBQUM7b0NBQ1QsU0FBUyxFQUFFLEtBQUssQ0FBQyxLQUFLLENBQUMsUUFBUTtvQ0FDL0IsUUFBUSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxPQUFPLEVBQUU7b0NBQ3JELFVBQVUsRUFBRSxRQUFRO29DQUNwQixRQUFRO29DQUNSLFVBQVUsRUFBRSxFQUFFO2lDQUNmLENBQUMsQ0FBQztnQ0FFSCxVQUFVLENBQUMsSUFBSSxDQUFDLEdBQUcsUUFBUSxJQUFJLENBQUMsQ0FBQzs0QkFDbkMsQ0FBQztpQ0FBTSxDQUFDO2dDQUNOLFVBQVUsQ0FBQyxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUM7NEJBQzNDLENBQUM7NEJBRUQsT0FBTzt3QkFDVCxDQUFDO3dCQUVELFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO29CQUM5QixDQUFDLENBQUMsQ0FBQztvQkFFSCxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsZUFBZSxFQUFFLElBQUksVUFBVSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztnQkFDdEUsQ0FBQztxQkFBTSxDQUFDO29CQUNOLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxlQUFlLEVBQUUsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQztnQkFDOUQsQ0FBQztnQkFFRCxTQUFTO1lBQ1gsQ0FBQztZQUNELElBQUksU0FBUyxHQUFXLEtBQUssQ0FBQyxJQUFJLENBQUM7WUFDbkMsSUFBSSxVQUFVLEdBQUcsSUFBSSxDQUFDO1lBQ3RCLElBQUksS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDO2dCQUN0QixLQUFLLE1BQU0sVUFBVSxJQUFJLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQztvQkFDM0MsSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLFFBQVEsSUFBSSxTQUFTLElBQUksVUFBVSxFQUFFLENBQUM7d0JBQ3ZELFNBQVMsR0FBRyxVQUFVLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztvQkFDbEUsQ0FBQztvQkFFRCxJQUFJLFVBQVUsSUFBSSxVQUFVLElBQUksQ0FBQyxDQUFDLE1BQU0sSUFBSSxVQUFVLENBQUMsRUFBRSxDQUFDO3dCQUN4RCxVQUFVLEdBQUcsS0FBSyxDQUFDO29CQUNyQixDQUFDO2dCQUNILENBQUM7WUFDSCxDQUFDO1lBQ0QsVUFBVSxDQUFDLElBQUksQ0FBQztnQkFDZCxVQUFVLENBQUMsQ0FBQyxDQUFDLEdBQUcsZUFBZSxHQUFHLENBQUMsQ0FBQyxDQUFDLGVBQWU7Z0JBQ3BELFNBQVM7YUFDVixDQUFDLENBQUM7UUFDTCxDQUFDO1FBRUQsT0FBTyxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQztJQUM3QyxDQUFDLENBQUM7SUFFRjs7Ozs7O09BTUc7SUFDSyxjQUFjLEdBQUcsQ0FDdkIsSUFBWSxFQUNaLFVBQW1DLEVBQzNCLEVBQUU7UUFDVixPQUFPLG9CQUFvQixJQUFJO0lBQy9CLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQztFQUNsRSxDQUFDO0lBQ0QsQ0FBQyxDQUFDO0lBRUY7Ozs7OztPQU1HO0lBQ0gsOERBQThEO0lBQzlELGlCQUFpQixDQUFDLE1BQWUsRUFBRSxLQUFhO1FBQzlDLE1BQU0sVUFBVSxHQUFHLGVBQWUsQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUMvRCxNQUFNLFVBQVUsR0FBRyxVQUFVLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzdDLElBQUksVUFBVSxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDdEIsTUFBTSxJQUFJLEtBQUssQ0FDYixRQUFRLEtBQUssOERBQThELENBQzVFLENBQUM7UUFDSixDQUFDO1FBQ0QsTUFBTSxrQkFBa0IsR0FBRyxNQUFNLENBQUMsSUFBSTthQUNuQyxnQkFBZ0IsRUFBRTthQUNsQixNQUFNLENBQ0wsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsVUFBVSxDQUNuRSxDQUFDO1FBQ0osTUFBTSxrQkFBa0IsR0FBRyxNQUFNLENBQUMsSUFBSTthQUNuQyxnQkFBZ0IsRUFBRTthQUNsQixNQUFNLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsS0FBSyxLQUFLLENBQUM7YUFDbkQsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ1QsTUFBTSxpQkFBaUIsR0FBRyxNQUFNLENBQUMsSUFBSTthQUNsQyxnQkFBZ0IsRUFBRTthQUNsQixNQUFNLENBQ0wsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsVUFBVSxDQUNuRSxDQUFDO1FBRUosK0NBQStDO1FBQy9DLE1BQU0sU0FBUyxHQUFHLGVBQWUsQ0FBQyx5QkFBeUIsQ0FDekQsSUFBSSxDQUFDLE1BQU0sRUFDWCxFQUFFLEVBQ0Ysa0JBQWtCLEVBQ2xCLGtCQUFrQixFQUNsQixpQkFBaUIsQ0FDbEIsQ0FBQztRQUVGLE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7SUFFRDs7Ozs7Ozs7Ozs7O09BWUc7SUFDSyxNQUFNLENBQUMseUJBQXlCLENBQ3RDLE1BQW9CLEVBQ3BCLElBQWMsRUFDZCxrQkFBbUMsRUFDbkMsa0JBQTZDLEVBQzdDLGlCQUFrQztRQUdsQyxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2xDLEtBQUssTUFBTSxTQUFTLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDO1lBQ3RELE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO1lBQzNDLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUNoQyxxRUFBcUU7WUFDckUsZ0RBQWdEO1lBQ2hELEtBQUssQ0FBQyxTQUFTLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3ZDLElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxRQUFRLEVBQUUsQ0FBQztnQkFDNUIsS0FBSyxDQUFDLFNBQVMsQ0FBQyxHQUFHLGVBQWUsQ0FBQyx5QkFBeUIsQ0FDMUQsS0FBSyxDQUFDLFFBQVEsRUFDZCxTQUFTLEVBQ1Qsa0JBQWtCLEVBQ2xCLGtCQUFrQixFQUNsQixpQkFBaUIsQ0FDbEIsQ0FBQztZQUNKLENBQUM7aUJBQU0sQ0FBQztnQkFDTixLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsT0FBTyxDQUFDO29CQUN2QixLQUFLLENBQUMsS0FBSyxJQUFJLFNBQVMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO2dCQUNoRCxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsYUFBYSxDQUFDO29CQUM3QixLQUFLLENBQUMsV0FBVyxJQUFJLFNBQVMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO2dCQUM1RCxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcseUJBQXlCLENBQ3JELGlCQUFpQixFQUNqQixTQUFTLENBQ1YsQ0FBQztnQkFDRixLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcseUJBQXlCLENBQ25ELENBQUMsR0FBRyxDQUFDLGtCQUFrQixJQUFJLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUNsRSxTQUFTLENBQ1YsQ0FBQztnQkFDRixLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcseUJBQXlCLENBQ3RELGtCQUFrQixFQUNsQixTQUFTLENBQ1YsQ0FBQztnQkFDRixLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsTUFBTSxHQUFHLFFBQVEsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO1lBQ3hFLENBQUM7UUFDSCxDQUFDO1FBRUQsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQ7Ozs7Ozs7O09BUUc7SUFDSCxxQkFBcUIsR0FBRyxDQUN0QixNQUFnQixFQUNoQixTQUF1QixJQUFJLENBQUMsTUFBTSxFQUNsQyxPQUFpQixFQUFFLEVBQ00sRUFBRTtRQUMzQixNQUFNLEdBQUcsR0FBNEIsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUV6RCxLQUFLLE1BQU0sR0FBRyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztZQUN0QyxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDMUIsTUFBTSxXQUFXLEdBQUcsQ0FBQyxHQUFHLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQztZQUNuQyxRQUFRLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDbkIsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDO29CQUNkLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FDdEMsTUFBTSxFQUNOLEtBQUssQ0FBQyxRQUFRLEVBQ2QsV0FBVyxDQUNaLENBQUM7b0JBRUYsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQzt3QkFDbEMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQztvQkFDbkIsQ0FBQztvQkFFRCxNQUFNO2dCQUNSLENBQUM7Z0JBRUQsS0FBSyxPQUFPLENBQUMsQ0FBQyxDQUFDO29CQUNiLE1BQU07Z0JBQ1IsQ0FBQztnQkFDRCxLQUFLLE9BQU8sQ0FBQyxDQUFDLENBQUM7b0JBQ2IsTUFBTSxRQUFRLEdBQTRCLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7b0JBQzlELElBQUksWUFBWSxHQUFHLEtBQUssQ0FBQztvQkFFekIsS0FBSyxNQUFNLFVBQVUsSUFBSSxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7d0JBQ3hDLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FDNUMsTUFBTSxFQUNOLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxVQUFVLEVBQUUsRUFDckIsSUFBSSxDQUNMLENBQUM7d0JBRUYsTUFBTSxVQUFVLEdBQUcsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDO3dCQUVwQyxJQUFJLFVBQVUsS0FBSyxTQUFTLEVBQUUsQ0FBQzs0QkFDN0IsSUFBSSxPQUFPLFVBQVUsS0FBSyxRQUFRLEVBQUUsQ0FBQztnQ0FDbkMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsVUFBVSxDQUFDLENBQUM7NEJBQ3RDLENBQUM7aUNBQU0sQ0FBQztnQ0FDTixZQUFZLEdBQUcsSUFBSSxDQUFDOzRCQUN0QixDQUFDO3dCQUNILENBQUM7b0JBQ0gsQ0FBQztvQkFFRCxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO3dCQUNyQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsUUFBUSxDQUFDO29CQUN0QixDQUFDO3lCQUFNLElBQUksWUFBWSxFQUFFLENBQUM7d0JBQ3hCLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7b0JBQy9ELENBQUM7b0JBRUQsTUFBTTtnQkFDUixDQUFDO2dCQUNELE9BQU8sQ0FBQyxDQUFDLENBQUM7b0JBQ1IsSUFBSSxDQUFDLENBQUMsTUFBTSxJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssSUFBSSxDQUFDO3dCQUFFLE1BQU07b0JBRTlDLE1BQU0sTUFBTSxHQUFHLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztvQkFFakUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLE1BQU0sQ0FBQztvQkFDbEIsTUFBTTtnQkFDUixDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUM7UUFDRCxPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUMsQ0FBQztJQUVGOzs7Ozs7O09BT0c7SUFDSyxNQUFNLENBQUMsbUJBQW1CLEdBQUcsQ0FBQyxNQUFlLEVBQVksRUFBRTtRQUNqRSxNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1FBQ3pELElBQUksVUFBVSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ2hELFVBQVUsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQ25ELE1BQU0sWUFBWSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3BELE1BQU0sYUFBYSxHQUNqQixZQUFZLElBQUksU0FBUyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7UUFFckUsTUFBTSxZQUFZLEdBQUc7WUFDbkIsU0FBUztZQUNULEdBQUcsQ0FBQyxRQUFRLElBQUksU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ3pELEdBQUcsQ0FBQyxVQUFVLElBQUksU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ3JELEdBQUcsQ0FBQyxRQUFRLElBQUksU0FBUyxJQUFJLFVBQVUsSUFBSSxTQUFTO2dCQUNsRCxDQUFDLENBQUMsQ0FBQyxHQUFHLFVBQVUsSUFBSSxRQUFRLEVBQUUsQ0FBQztnQkFDL0IsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUNQLEdBQUcsQ0FBQyxhQUFhLElBQUksU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsYUFBYSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQzNELEdBQUcsQ0FBQyxhQUFhLElBQUksU0FBUyxJQUFJLFFBQVEsSUFBSSxTQUFTO2dCQUNyRCxDQUFDLENBQUMsQ0FBQyxHQUFHLGFBQWEsSUFBSSxRQUFRLEVBQUUsQ0FBQztnQkFDbEMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUNQLEdBQUcsQ0FBQyxhQUFhLElBQUksU0FBUyxJQUFJLFVBQVUsSUFBSSxTQUFTO2dCQUN2RCxDQUFDLENBQUMsQ0FBQyxHQUFHLGFBQWEsSUFBSSxVQUFVLEVBQUUsQ0FBQztnQkFDcEMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUNQLEdBQUcsQ0FBQyxhQUFhLElBQUksU0FBUztnQkFDOUIsVUFBVSxJQUFJLFNBQVM7Z0JBQ3ZCLFFBQVEsSUFBSSxTQUFTO2dCQUNuQixDQUFDLENBQUMsQ0FBQyxHQUFHLGFBQWEsSUFBSSxVQUFVLElBQUksUUFBUSxFQUFFLENBQUM7Z0JBQ2hELENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDUCxHQUFHLENBQUMsWUFBWSxJQUFJLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLFlBQVksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUN6RCxHQUFHLENBQUMsWUFBWSxJQUFJLFNBQVMsSUFBSSxRQUFRLElBQUksU0FBUztnQkFDcEQsQ0FBQyxDQUFDLENBQUMsR0FBRyxZQUFZLElBQUksUUFBUSxFQUFFLENBQUM7Z0JBQ2pDLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDUCxHQUFHLENBQUMsWUFBWSxJQUFJLFNBQVMsSUFBSSxVQUFVLElBQUksU0FBUztnQkFDdEQsQ0FBQyxDQUFDLENBQUMsR0FBRyxZQUFZLElBQUksVUFBVSxFQUFFLENBQUM7Z0JBQ25DLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDUCxHQUFHLENBQUMsWUFBWSxJQUFJLFNBQVM7Z0JBQzdCLFVBQVUsSUFBSSxTQUFTO2dCQUN2QixRQUFRLElBQUksU0FBUztnQkFDbkIsQ0FBQyxDQUFDLENBQUMsR0FBRyxZQUFZLElBQUksVUFBVSxJQUFJLFFBQVEsRUFBRSxDQUFDO2dCQUMvQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ1AsT0FBTztZQUNQLEdBQUcsQ0FBQyxRQUFRLElBQUksU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ3ZELEdBQUcsQ0FBQyxVQUFVLElBQUksU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQzNELEdBQUcsQ0FBQyxVQUFVLElBQUksU0FBUyxJQUFJLFFBQVEsSUFBSSxTQUFTO2dCQUNsRCxDQUFDLENBQUMsQ0FBQyxTQUFTLFVBQVUsSUFBSSxRQUFRLEVBQUUsQ0FBQztnQkFDckMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUNQLGNBQWM7WUFDZCw4QkFBOEI7U0FDL0IsQ0FBQztRQUVGLE9BQU8sWUFBWSxDQUFDO0lBQ3RCLENBQUMsQ0FBQztJQUVGOzs7Ozs7OztPQVFHO0lBQ0gsc0JBQXNCLEdBQUc7SUFDdkIsOERBQThEO0lBQzlELFNBQThCLEVBQzlCLE1BQWUsRUFDZixLQUFhLEVBQ2IsTUFBYyxFQUNkLEVBQUU7UUFDRixNQUFNLFVBQVUsR0FBRyxlQUFlLENBQUMsbUJBQW1CLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxDQUNuRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLDhCQUE4QixDQUM1QyxDQUFDO1FBQ0YsTUFBTSxVQUFVLEdBQUcsVUFBVSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM3QyxJQUFJLFVBQVUsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ3RCLE1BQU0sSUFBSSxLQUFLLENBQ2IsUUFBUSxLQUFLLGdFQUFnRSxDQUM5RSxDQUFDO1FBQ0osQ0FBQztRQUVELE1BQU0sU0FBUyxHQUNiLE9BQU8sQ0FBQyxHQUFHLENBQUMsaUJBQWlCLENBQUMsSUFBSSxTQUFTO1lBQ3pDLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLGlCQUFpQixDQUFDO1lBQ2hDLENBQUMsQ0FBQyxVQUFVLENBQUM7UUFDakIsSUFBSSxNQUFNLEdBQUcsRUFBRSxDQUFDO1FBQ2hCLElBQUksR0FBRyxHQUFHLEVBQUUsQ0FBQztRQUNiLFFBQVEsTUFBTSxFQUFFLENBQUM7WUFDZixLQUFLLE1BQU0sQ0FBQyxDQUFDLENBQUM7Z0JBQ1osTUFBTSxHQUFHLFVBQVUsQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUM7Z0JBQ3pDLEdBQUcsR0FBRyxNQUFNLENBQUM7Z0JBQ2IsTUFBTTtZQUNSLENBQUM7WUFDRCxLQUFLLE1BQU0sQ0FBQyxDQUFDLENBQUM7Z0JBQ1osTUFBTSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7Z0JBQzlCLEdBQUcsR0FBRyxNQUFNLENBQUM7Z0JBQ2IsTUFBTTtZQUNSLENBQUM7WUFDRDtnQkFDRSxNQUFNLEtBQUssQ0FBQyxtQkFBbUIsTUFBTSxFQUFFLENBQUMsQ0FBQztRQUM3QyxDQUFDO1FBRUQsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsR0FBRyxLQUFLLElBQUksR0FBRyxFQUFFLENBQUMsQ0FBQztRQUMzRCxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxHQUFHLEtBQUssV0FBVyxHQUFHLEVBQUUsQ0FBQyxDQUFDO1FBQ2xFLE1BQU0sY0FBYyxHQUFHLEVBQUUsQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDakQsSUFBSSxjQUFjLEVBQUUsQ0FBQztZQUNuQixFQUFFLENBQUMsVUFBVSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsQ0FBQztRQUN4QyxDQUFDO1FBQ0QsRUFBRSxDQUFDLGFBQWEsQ0FBQyxVQUFVLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFFckMsTUFBTSxjQUFjLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUVyRCxJQUFJLENBQUM7WUFDSCxJQUFJLENBQUMsY0FBYyxDQUFDLGNBQWMsQ0FBQyxDQUFDO1lBQ3BDLEVBQUUsQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDNUIsQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZixFQUFFLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQzFCLElBQUksY0FBYyxFQUFFLENBQUM7Z0JBQ25CLEVBQUUsQ0FBQyxVQUFVLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1lBQ3hDLENBQUM7WUFDRCxNQUFNLEtBQUssQ0FBQztRQUNkLENBQUM7SUFDSCxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJQ29uZmlnLCBJQ29uZmlnU291cmNlIH0gZnJvbSAnY29uZmlnJztcbmltcG9ydCBjb25maWcgZnJvbSAnY29uZmlnJztcbmltcG9ydCAqIGFzIGZzIGZyb20gJ2ZzJztcbmltcG9ydCAqIGFzIHlhbWwgZnJvbSAnanMteWFtbCc7XG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcblxuaW1wb3J0IEpzb25CaWdJbnQsIHsgSnNvbkJpZ0ludEZhY3RvcnkgfSBmcm9tICdAcm9zZW4tYnJpZGdlL2pzb24tYmlnaW50JztcblxuaW1wb3J0IHtcbiAgQ29uZmlnRmllbGQsXG4gIENvbmZpZ1NjaGVtYSxcbiAgVW5pb25GaWVsZCxcbiAgVmFsdWVUeXBlLFxufSBmcm9tICcuL3NjaGVtYS90eXBlcy9maWVsZHMnO1xuaW1wb3J0IHsgV2hlbiB9IGZyb20gJy4vc2NoZW1hL3R5cGVzL3ZhbGlkYXRpb25zJztcbmltcG9ydCB7XG4gIHByb3BlcnR5VmFsaWRhdG9ycyxcbiAgc3VwcG9ydGVkVHlwZXMsXG59IGZyb20gJy4vc2NoZW1hL1ZhbGlkYXRvcnMvZmllbGRQcm9wZXJ0aWVzJztcbmltcG9ydCB7XG4gIGdldFNvdXJjZU5hbWUsXG4gIGdldFZhbHVlRnJvbUNvbmZpZ1NvdXJjZXMsXG4gIHRvUGFzY2FsQ2FzZSxcbn0gZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgeyB2YWx1ZVZhbGlkYXRpb25zLCB2YWx1ZVZhbGlkYXRvcnMgfSBmcm9tICcuL3ZhbHVlL3ZhbGlkYXRvcnMnO1xuXG5leHBvcnQgY2xhc3MgQ29uZmlnVmFsaWRhdG9yIHtcbiAgcHJpdmF0ZSBzY2hlbWE6IENvbmZpZ1NjaGVtYTtcblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKHNjaGVtYTogQ29uZmlnU2NoZW1hKSB7XG4gICAgdGhpcy5zY2hlbWEgPSBzY2hlbWE7XG4gICAgdGhpcy52YWxpZGF0ZVNjaGVtYSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkcyBhbmQgcmV0dXJucyB0aGUgZmluYWwgY29uZmlndXJhdGlvbiBvYmplY3QgYnkgdHJhbnNmb3JtaW5nIGFuZCB2YWxpZGF0aW5nXG4gICAqXG4gICAqICBUIC0gVGhlIHR5cGUgb2YgdGhlIGZpbmFsIG5vcm1hbGl6ZWQgY29uZmlndXJhdGlvbiBvYmplY3QuXG4gICAqIEByZXR1cm5zIHtUfSBUaGUgbm9ybWFsaXplZCBjb25maWd1cmF0aW9uIG9iamVjdFxuICAgKi9cbiAgYnVpbGRDb25maWdzID0gPFQ+KCk6IFQgPT4ge1xuICAgIGNvbnN0IHJhdyA9IGNvbmZpZy51dGlsLnRvT2JqZWN0KCk7XG4gICAgdGhpcy52YWxpZGF0ZUNvbmZpZyhyYXcpO1xuICAgIHJldHVybiByYXc7XG4gIH07XG5cbiAgLyoqXG4gICAqIGNyZWF0ZSBDb25maWdWYWxpZGF0b3IgZnJvbSBzY2hlbWEgZmlsZSBwYXRoXG4gICAqL1xuICBzdGF0aWMgZnJvbUZpbGUgPSAoc2NoZW1hUGF0aDogc3RyaW5nKTogQ29uZmlnVmFsaWRhdG9yID0+IHtcbiAgICBjb25zdCByYXdTY2hlbWFEYXRhID0gZnMucmVhZEZpbGVTeW5jKHNjaGVtYVBhdGgsICd1dGYtOCcpO1xuXG4gICAgY29uc3QganNvbkJpZ0ludCA9IEpzb25CaWdJbnRGYWN0b3J5KHtcbiAgICAgIGFsd2F5c1BhcnNlQXNCaWc6IGZhbHNlLFxuICAgICAgdXNlTmF0aXZlQmlnSW50OiB0cnVlLFxuICAgIH0pO1xuXG4gICAgY29uc3Qgc2NoZW1hID0ganNvbkJpZ0ludC5wYXJzZShyYXdTY2hlbWFEYXRhKTtcbiAgICByZXR1cm4gbmV3IENvbmZpZ1ZhbGlkYXRvcihzY2hlbWEpO1xuICB9O1xuXG4gIC8qKlxuICAgKiBjcmVhdGUgQ29uZmlnVmFsaWRhdG9yIGZyb20gc2NoZW1hXG4gICAqXG4gICAqIEBwYXJhbSB7Q29uZmlnU2NoZW1hfSBzY2hlbWFcbiAgICovXG4gIHN0YXRpYyBmcm9tU2NoZW1hID0gKHNjaGVtYTogQ29uZmlnU2NoZW1hKTogQ29uZmlnVmFsaWRhdG9yID0+IHtcbiAgICByZXR1cm4gbmV3IENvbmZpZ1ZhbGlkYXRvcihzY2hlbWEpO1xuICB9O1xuXG4gIC8qKlxuICAgKiB2YWxpZGF0ZXMgdGhlIHBhc3NlZCBjb25maWcgYWdhaW5zdCB0aGUgaW5zdGFuY2UncyBzY2hlbWFcbiAgICpcbiAgICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCBhbnk+fSBjb25maWdcbiAgICovXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gIHB1YmxpYyB2YWxpZGF0ZUNvbmZpZyhjb25maWc6IFJlY29yZDxzdHJpbmcsIGFueT4pIHtcbiAgICB0aGlzLnZhbGlkYXRlVmFsdWUoXG4gICAgICBjb25maWcsXG4gICAgICB7IHR5cGU6ICdvYmplY3QnLCBjaGlsZHJlbjogdGhpcy5zY2hlbWEgfSxcbiAgICAgIGNvbmZpZyxcbiAgICAgIFtdLFxuICAgICk7XG5cbiAgICB0aGlzLnZhbGlkYXRlU3ViQ29uZmlnKGNvbmZpZywgY29uZmlnLCB0aGlzLnNjaGVtYSwgW10pO1xuICB9XG5cbiAgLyoqXG4gICAqIHRyYXZlcnNlcyBhbmQgdmFsaWRhdGVzIGEgc3ViY29uZmlnIHVzaW5nIHRoZSBzdWJzY2hlbWFcbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCBhbnk+fSBjb25maWcgLSBUaGUgZnVsbCByb290IGNvbmZpZ3VyYXRpb24gb2JqZWN0XG4gICAqIEBwYXJhbSB7UmVjb3JkPHN0cmluZywgYW55Pn0gc3ViQ29uZmlnIC0gVGhlIHNsaWNlIG9mIGNvbmZpZyBjdXJyZW50bHkgYmVpbmdcbiAgICogICB2YWxpZGF0ZWRcbiAgICogQHBhcmFtIHtDb25maWdTY2hlbWF9IHN1YlNjaGVtYVxuICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBwYXRoXG4gICAqIEBwYXJhbSB7UmVjb3JkPHN0cmluZywgYW55Pn0gY29udGV4dCAtIGhlIGxvY2FsIHNjb3BlIG9iamVjdCBmb3JcbiAgICogICByZXNvbHZpbmcgYHdoZW5gIGNvbmRpdGlvbnMuXG4gICAqIEBtZW1iZXJvZiBDb25maWdWYWxpZGF0b3JcbiAgICovXG4gIHByaXZhdGUgdmFsaWRhdGVTdWJDb25maWcoXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICBjb25maWc6IFJlY29yZDxzdHJpbmcsIGFueT4sXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICBzdWJDb25maWc6IFJlY29yZDxzdHJpbmcsIGFueT4sXG4gICAgc3ViU2NoZW1hOiBDb25maWdTY2hlbWEsXG4gICAgcGF0aDogc3RyaW5nW10sXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICBjb250ZXh0PzogUmVjb3JkPHN0cmluZywgYW55PixcbiAgKSB7XG4gICAgY29uc3QgZXJyb3JQcmVhbWJsZSA9IChwYXRoOiBBcnJheTxzdHJpbmc+KSA9PlxuICAgICAgYGNvbmZpZyB2YWxpZGF0aW9uIGZhaWxlZCBmb3IgXCIke3BhdGguam9pbignLicpfVwiIGZpZWxkYDtcbiAgICBmb3IgKGNvbnN0IG5hbWUgb2YgT2JqZWN0LmtleXMoc3ViU2NoZW1hKSkge1xuICAgICAgY29uc3QgY2hpbGRQYXRoOiBzdHJpbmdbXSA9IHBhdGguY29uY2F0KFtuYW1lXSk7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBmaWVsZCA9IHN1YlNjaGVtYVtuYW1lXTtcbiAgICAgICAgbGV0IHZhbHVlID0gdW5kZWZpbmVkO1xuICAgICAgICBpZiAoc3ViQ29uZmlnICE9IHVuZGVmaW5lZCAmJiBPYmplY3QuaGFzT3duKHN1YkNvbmZpZywgbmFtZSkpIHtcbiAgICAgICAgICB2YWx1ZSA9IHN1YkNvbmZpZ1tuYW1lXTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMudmFsaWRhdGVWYWx1ZSh2YWx1ZSwgZmllbGQsIGNvbmZpZywgY2hpbGRQYXRoKTtcblxuICAgICAgICAvLyBpZiBhIG5vZGUvZmllbGQgaXMgb2YgdHlwZSBvYmplY3QgYW5kIHRodXMgaXMgYSBzdWJ0cmVlLCB0cmF2ZXJzZSBpdFxuICAgICAgICBpZiAoZmllbGQudHlwZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICB0aGlzLnZhbGlkYXRlU3ViQ29uZmlnKFxuICAgICAgICAgICAgY29uZmlnLFxuICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICBmaWVsZC5jaGlsZHJlbixcbiAgICAgICAgICAgIGNoaWxkUGF0aCxcbiAgICAgICAgICAgIGNvbnRleHQsXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIGlmIChmaWVsZC50eXBlID09PSAnYXJyYXknKSB7XG4gICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgICB2YWx1ZS5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICAgICAgICAgIENvbmZpZ1ZhbGlkYXRvci5tb2RpZnlPYmplY3QoY29uZmlnLCBpdGVtLCBjaGlsZFBhdGgpO1xuICAgICAgICAgICAgICB0aGlzLnZhbGlkYXRlU3ViQ29uZmlnKFxuICAgICAgICAgICAgICAgIGNvbmZpZyxcbiAgICAgICAgICAgICAgICB7IFtuYW1lXTogaXRlbSB9LFxuICAgICAgICAgICAgICAgIHsgW25hbWVdOiBmaWVsZC5pdGVtcyB9LFxuICAgICAgICAgICAgICAgIHBhdGgsXG4gICAgICAgICAgICAgICAgeyBbbmFtZV06IGl0ZW0gfSxcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgQ29uZmlnVmFsaWRhdG9yLm1vZGlmeU9iamVjdChjb25maWcsIHZhbHVlLCBjaGlsZFBhdGgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGZpZWxkLnR5cGUgPT09ICd1bmlvbicpIHtcbiAgICAgICAgICB0aGlzLnZhbGlkYXRlVW5pb25WYWx1ZSh2YWx1ZSwgbmFtZSwgZmllbGQsIGNvbmZpZywgcGF0aCwgY29udGV4dCk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgJHtlcnJvclByZWFtYmxlKGNoaWxkUGF0aCl9OiAke2Vycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogZXJyb3J9YCxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogdHJhdmVyc2VzIGFuZCB2YWxpZGF0ZXMgYSB1bmlvbiBzdWJjb25maWcgdXNpbmcgdGhlIHN1YnNjaGVtYVxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge2FueX0gdmFsdWVcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAgICogQHBhcmFtIHtVbmlvbkZpZWxkfSBmaWVsZFxuICAgKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsIGFueT59IGNvbmZpZ1xuICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBjaGlsZFBhdGhcbiAgICpcbiAgICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCBhbnk+fSBjb250ZXh0IC0gaGUgbG9jYWwgc2NvcGUgb2JqZWN0IGZvclxuICAgKiAgIHJlc29sdmluZyBgd2hlbmAgY29uZGl0aW9ucy5cbiAgICovXG4gIHByaXZhdGUgdmFsaWRhdGVVbmlvblZhbHVlKFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgdmFsdWU6IGFueSxcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgZmllbGQ6IFVuaW9uRmllbGQsXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICBjb25maWc6IFJlY29yZDxzdHJpbmcsIGFueT4sXG4gICAgY2hpbGRQYXRoOiBzdHJpbmdbXSxcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgIGNvbnRleHQ/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+LFxuICApIHtcbiAgICBsZXQgaXNNYXRjaGVkID0gZmFsc2U7XG4gICAgbGV0IGxhc3RFcnJvck1lc3NhZ2UgPSAnJztcblxuICAgIGZvciAoY29uc3QgYWN0aXZlRmllbGQgb2YgZmllbGQuY2hpbGRyZW4pIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHRoaXMudmFsaWRhdGVTdWJDb25maWcoXG4gICAgICAgICAgY29uZmlnLFxuICAgICAgICAgIHsgW25hbWVdOiB2YWx1ZSB9LFxuICAgICAgICAgIHsgW25hbWVdOiBhY3RpdmVGaWVsZCB9LFxuICAgICAgICAgIGNoaWxkUGF0aCxcbiAgICAgICAgICB7IFtuYW1lXTogdmFsdWUgfSxcbiAgICAgICAgKTtcbiAgICAgICAgaXNNYXRjaGVkID0gdHJ1ZTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgbGFzdEVycm9yTWVzc2FnZSA9IGUgaW5zdGFuY2VvZiBFcnJvciA/IGUubWVzc2FnZSA6IFN0cmluZyhlKTtcbiAgICAgICAgY29uc29sZS5kZWJ1ZyhcbiAgICAgICAgICBgVW5pb24gYnJhbmNoIGZvciBcIiR7Y2hpbGRQYXRoLmpvaW4oJy4nKX1cIiBub3QgbWF0Y2hlZDogJHtsYXN0RXJyb3JNZXNzYWdlfWAsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCFpc01hdGNoZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYFZhbHVlIGZvciBcIiR7Y2hpbGRQYXRoLmpvaW4oJy4nKX1cIiBkb2VzIG5vdCBtYXRjaCBhbnkgb2YgdGhlIHVuaW9uIHR5cGVzLiBMYXN0IGVycm9yOiAke2xhc3RFcnJvck1lc3NhZ2V9YCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKGZpZWxkLnZhbGlkYXRpb25zKSB7XG4gICAgICBjaGlsZFBhdGggPSBjaGlsZFBhdGguY29uY2F0KFtuYW1lXSk7XG4gICAgICBjb25zdCBjdXJyZW50VmFsdWUgPVxuICAgICAgICB2YWx1ZSAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgPyB2YWx1ZVxuICAgICAgICAgIDogQ29uZmlnVmFsaWRhdG9yLnZhbHVlQXQoY29uZmlnLCBjaGlsZFBhdGgpO1xuXG4gICAgICBmb3IgKGNvbnN0IHZhbGlkYXRpb24gb2YgZmllbGQudmFsaWRhdGlvbnMpIHtcbiAgICAgICAgY29uc3QgdmFsaWRhdGlvbk5hbWUgPSBPYmplY3Qua2V5cyh2YWxpZGF0aW9uKS5maW5kKFxuICAgICAgICAgIChrZXkpID0+IGtleSAhPT0gJ3doZW4nICYmIGtleSAhPT0gJ2Vycm9yJyxcbiAgICAgICAgKTtcblxuICAgICAgICBpZiAodmFsaWRhdGlvbk5hbWUgJiYgdmFsdWVWYWxpZGF0aW9uc1tmaWVsZC50eXBlXT8uW3ZhbGlkYXRpb25OYW1lXSkge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICB2YWx1ZVZhbGlkYXRpb25zW2ZpZWxkLnR5cGVdW3ZhbGlkYXRpb25OYW1lXShcbiAgICAgICAgICAgICAgY3VycmVudFZhbHVlLFxuICAgICAgICAgICAgICB2YWxpZGF0aW9uLFxuICAgICAgICAgICAgICBjb25maWcsXG4gICAgICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgICAgIGNvbnRleHQsXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgIHZhbGlkYXRpb24uZXJyb3IgfHxcbiAgICAgICAgICAgICAgICAoZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpKSxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIHNldHMgYW4gb2JqZWN0J3Mgc3BlY2lmaWMgc3VidHJlZSB0byB0aGUgc3BlY2lmaWVkIHZhbHVlXG4gICAqXG4gICAqIEBzdGF0aWNcbiAgICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCBhbnk+fSBvYmpcbiAgICogQHBhcmFtIHsqfSBuZXdWYWx1ZVxuICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBwYXRoXG4gICAqIEByZXR1cm4geyp9XG4gICAqIEBtZW1iZXJvZiBDb25maWdWYWxpZGF0b3JcbiAgICovXG4gIHN0YXRpYyBtb2RpZnlPYmplY3QoXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICBvYmo6IFJlY29yZDxzdHJpbmcsIGFueT4sXG4gICAgbmV3VmFsdWU6IFZhbHVlVHlwZSxcbiAgICBwYXRoOiBzdHJpbmdbXSxcbiAgKSB7XG4gICAgbGV0IHZhbHVlID0gb2JqO1xuICAgIGZvciAoY29uc3Qga2V5IG9mIHBhdGguc2xpY2UoMCwgLTEpKSB7XG4gICAgICBpZiAodmFsdWUgIT0gdW5kZWZpbmVkICYmIE9iamVjdC5oYXNPd24odmFsdWUsIGtleSkpIHtcbiAgICAgICAgdmFsdWUgPSB2YWx1ZVtrZXldO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFsdWVba2V5XSA9IHt9O1xuICAgICAgICB2YWx1ZSA9IHZhbHVlW2tleV07XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgbGFzdEtleSA9IHBhdGguYXQoLTEpO1xuICAgIGlmIChsYXN0S2V5ICE9IHVuZGVmaW5lZCkge1xuICAgICAgdmFsdWVbbGFzdEtleV0gPSBuZXdWYWx1ZTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogdmFsaWRhdGVzIGEgdmFsdWUgaW4gY29uZmlnIG9iamVjdFxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0geyp9IHZhbHVlXG4gICAqIEBwYXJhbSB7Q29uZmlnRmllbGR9IGZpZWxkIHRoZSBmaWVsZCBzcGVjaWZpY2F0aW9uIGluIHNjaGVtYVxuICAgKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsIGFueT59IGNvbmZpZyB0aGUgY29uZmlnIG9iamVjdFxuICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBwYXRoXG4gICAqIEBwYXJhbSB7UmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZH0gY29udGV4dFxuICAgKi9cbiAgcHJpdmF0ZSB2YWxpZGF0ZVZhbHVlID0gKFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgdmFsdWU6IGFueSxcbiAgICBmaWVsZDogQ29uZmlnRmllbGQsXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICBjb25maWc6IFJlY29yZDxzdHJpbmcsIGFueT4sXG4gICAgcGF0aDogc3RyaW5nW10sXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICBjb250ZXh0PzogUmVjb3JkPHN0cmluZywgYW55PixcbiAgKSA9PiB7XG4gICAgaWYgKHZhbHVlICE9IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKGZpZWxkLnR5cGUgPT09ICdiaWdpbnQnKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICB0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInICYmXG4gICAgICAgICAgKHZhbHVlID4gTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIgfHwgdmFsdWUgPCBOdW1iZXIuTUlOX1NBRkVfSU5URUdFUilcbiAgICAgICAgKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgYEZpZWxkIFwiJHtwYXRoLmpvaW4oJy4nKX1cIiBpcyBkZWNsYXJlZCBhcyBhIEJpZ0ludCwgYnV0IGEgTnVtYmVyIHdhcyBwcm92aWRlZCB3aXRoIGluc3VmZmljaWVudCBwcmVjaXNpb24uIFZhbHVlcyBleGNlZWRpbmcgOTAwNzE5OTI1NDc0MDk5MSBtdXN0IGJlIHN1cHBsaWVkIGFzIGEgc3RyaW5nIHRvIGVuc3VyZSBhY2N1cmFjeS5gLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICB2YWx1ZSA9IEJpZ0ludCh2YWx1ZSk7XG4gICAgICAgICAgQ29uZmlnVmFsaWRhdG9yLm1vZGlmeU9iamVjdChjb25maWcsIHZhbHVlLCBwYXRoKTtcbiAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgYENhbm5vdCBjb252ZXJ0ICR7dmFsdWV9IHRvIGEgQmlnSW50IGZvciBmaWVsZCBcIiR7cGF0aC5qb2luKCcuJyl9XCJgLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChmaWVsZC50eXBlID09PSAnbnVtYmVyJykge1xuICAgICAgICBpZiAoaXNOYU4oTnVtYmVyKHZhbHVlKSkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICBgRmllbGQgXCIke3BhdGguam9pbignLicpfVwiIG11c3QgYmUgYSB2YWxpZCBudW1iZXIuIFBsZWFzZSBwcm92aWRlIGEgc3VpdGFibGUgZm9ybWF0LmAsXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICB2YWx1ZSA9IE51bWJlcih2YWx1ZSk7XG4gICAgICAgIGlmIChcbiAgICAgICAgICB2YWx1ZSA+IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSIHx8XG4gICAgICAgICAgdmFsdWUgPCBOdW1iZXIuTUlOX1NBRkVfSU5URUdFUlxuICAgICAgICApIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICBgVmFsdWUgZm9yIFwiJHtwYXRoLmpvaW4oJy4nKX1cIiBpcyB0b28gbGFyZ2Ugb3IgdG9vIHNtYWxsLiBQbGVhc2UgZW50ZXIgYSB2YWxpZCBudW1iZXIuYCxcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIENvbmZpZ1ZhbGlkYXRvci5tb2RpZnlPYmplY3QoY29uZmlnLCB2YWx1ZSwgcGF0aCk7XG4gICAgICB9XG4gICAgICB2YWx1ZVZhbGlkYXRvcnNbZmllbGQudHlwZV0odmFsdWUsIGZpZWxkKTtcbiAgICB9XG4gICAgaWYgKFxuICAgICAgdmFsdWUgPT0gdW5kZWZpbmVkICYmXG4gICAgICBmaWVsZC50eXBlICE9PSAnb2JqZWN0JyAmJlxuICAgICAgZmllbGQudHlwZSAhPT0gJ3VuaW9uJyAmJlxuICAgICAgZmllbGQuZGVmYXVsdFxuICAgICkge1xuICAgICAgdmFsdWUgPSBmaWVsZC5kZWZhdWx0O1xuICAgICAgQ29uZmlnVmFsaWRhdG9yLm1vZGlmeU9iamVjdChjb25maWcsIGZpZWxkLmRlZmF1bHQsIHBhdGgpO1xuICAgIH1cbiAgICBpZiAoXG4gICAgICBmaWVsZC50eXBlICE9PSAnb2JqZWN0JyAmJlxuICAgICAgZmllbGQudHlwZSAhPT0gJ2FycmF5JyAmJlxuICAgICAgZmllbGQudHlwZSAhPT0gJ3VuaW9uJyAmJlxuICAgICAgZmllbGQudmFsaWRhdGlvbnNcbiAgICApIHtcbiAgICAgIGZvciAoY29uc3QgdmFsaWRhdGlvbiBvZiBmaWVsZC52YWxpZGF0aW9ucykge1xuICAgICAgICBjb25zdCBuYW1lID0gT2JqZWN0LmtleXModmFsaWRhdGlvbikuZmlsdGVyKFxuICAgICAgICAgIChrZXkpID0+IGtleSAhPT0gJ3doZW4nICYmIGtleSAhPT0gJ2Vycm9yJyxcbiAgICAgICAgKVswXTtcbiAgICAgICAgaWYgKE9iamVjdC5oYXNPd24odmFsdWVWYWxpZGF0aW9uc1tmaWVsZC50eXBlXSwgbmFtZSkpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgdmFsdWVWYWxpZGF0aW9uc1tmaWVsZC50eXBlXVtuYW1lXShcbiAgICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICAgIHZhbGlkYXRpb24sXG4gICAgICAgICAgICAgIGNvbmZpZyxcbiAgICAgICAgICAgICAgdGhpcyxcbiAgICAgICAgICAgICAgY29udGV4dCxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIGlmICh2YWxpZGF0aW9uLmVycm9yICE9IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IodmFsaWRhdGlvbi5lcnJvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgLyoqXG4gICAqIGRldGVybWluZXMgaWYgYSB3aGVuIGNsYXVzZSBpbiB2YWxpZGF0aW9ucyBzZWN0aW9uIG9mIGEgc2NoZW1hIGZpZWxkIGlzXG4gICAqIHNhdGlzZmllZFxuICAgKlxuICAgKiBAcGFyYW0ge1doZW59IHdoZW5cbiAgICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCBhbnk+fSBjb25maWdcbiAgICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCBhbnk+fSBjb250ZXh0XG4gICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAqL1xuICBwdWJsaWMgaXNXaGVuVHJ1ZSA9IChcbiAgICB3aGVuOiBXaGVuLFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgY29uZmlnOiBSZWNvcmQ8c3RyaW5nLCBhbnk+LFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgY29udGV4dD86IFJlY29yZDxzdHJpbmcsIGFueT4sXG4gICk6IGJvb2xlYW4gPT4ge1xuICAgIGxldCBwYXRoUGFydHMgPSB3aGVuLnBhdGguc3BsaXQoJy4nKTtcblxuICAgIGlmIChjb250ZXh0ICE9IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgbG9jYWxWYWx1ZSA9IENvbmZpZ1ZhbGlkYXRvci52YWx1ZUF0KGNvbnRleHQsIHBhdGhQYXJ0cyk7XG4gICAgICBpZiAobG9jYWxWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBsb2NhbFZhbHVlID09PSB3aGVuLnZhbHVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCByZWxhdGl2ZVBhcnRzID0gcGF0aFBhcnRzLnNsaWNlKC0xKTtcbiAgICAgIGNvbnN0IHJlbGF0aXZlVmFsdWUgPSBDb25maWdWYWxpZGF0b3IudmFsdWVBdChjb250ZXh0LCByZWxhdGl2ZVBhcnRzKTtcbiAgICAgIGlmIChyZWxhdGl2ZVZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIHJlbGF0aXZlVmFsdWUgPT09IHdoZW4udmFsdWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgdmFsdWUgPSBDb25maWdWYWxpZGF0b3IudmFsdWVBdChjb25maWcsIHBhdGhQYXJ0cyk7XG4gICAgcmV0dXJuIHZhbHVlICE9IHVuZGVmaW5lZCAmJiB2YWx1ZSA9PT0gd2hlbi52YWx1ZTtcbiAgfTtcblxuICAvKipcbiAgICogcmV0dXJucyB0aGUgdmFsdWUgYXQgc3BlY2lmaWVkIHBhdGggaW4gY29uZmlnIG9iamVjdFxuICAgKlxuICAgKiBAc3RhdGljXG4gICAqIEBwYXJhbSB7UmVjb3JkPHN0cmluZywgYW55Pn0gY29uZmlnXG4gICAqIEBwYXJhbSB7c3RyaW5nW119IHBhdGhcbiAgICogQHJldHVybiB7Kn1cbiAgICovXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gIHN0YXRpYyB2YWx1ZUF0ID0gKGNvbmZpZzogYW55LCBwYXRoOiBzdHJpbmdbXSkgPT4ge1xuICAgIGxldCB2YWx1ZSA9IGNvbmZpZztcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBwYXRoKSB7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgaWYgKGlzTmFOKE51bWJlcihrZXkpKSkge1xuICAgICAgICAgIHZhbHVlID0gdmFsdWUubWFwKChpdGVtKSA9PiBpdGVtPy5ba2V5XSkuZmluZCgodikgPT4gdiAhPT0gdW5kZWZpbmVkKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBpbmRleCA9IE51bWJlcihrZXkpO1xuICAgICAgICAgIHZhbHVlID0gdmFsdWVbaW5kZXhdO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHZhbHVlICE9IHVuZGVmaW5lZCAmJiBPYmplY3QuaGFzT3duKHZhbHVlLCBrZXkpKSB7XG4gICAgICAgIHZhbHVlID0gdmFsdWVba2V5XTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZTtcbiAgfTtcblxuICAvKipcbiAgICogdmFsaWRhdGVzIHRoaXMuc2NoZW1hIGFuZCB0aHJvd3MgZXhjZXB0aW9uIGlmIGFueSBlcnJvcnMgZm91bmRcbiAgICovXG4gIHByaXZhdGUgdmFsaWRhdGVTY2hlbWEgPSAoKSA9PiB7XG4gICAgY29uc3QgZXJyb3JQcmVhbWJsZSA9IChwYXRoOiBBcnJheTxzdHJpbmc+KSA9PlxuICAgICAgYFNjaGVtYSB2YWxpZGF0aW9uIGZhaWxlZCBmb3IgXCIke3BhdGguam9pbignLicpfVwiIGZpZWxkYDtcblxuICAgIGNvbnN0IHN0YWNrOiBBcnJheTx7XG4gICAgICBzdWJTY2hlbWE6IENvbmZpZ1NjaGVtYTtcbiAgICAgIHBhcmVudFBhdGg6IEFycmF5PHN0cmluZz47XG4gICAgfT4gPSBbXG4gICAgICB7XG4gICAgICAgIHN1YlNjaGVtYTogdGhpcy5zY2hlbWEsXG4gICAgICAgIHBhcmVudFBhdGg6IFtdLFxuICAgICAgfSxcbiAgICBdO1xuXG4gICAgLy8gVHJhdmVyc2VzIHRoZSBzY2hlbWEgb2JqZWN0IHRyZWUgZGVwdGggZmlyc3QgYW5kIHZhbGlkYXRlIGZpZWxkc1xuICAgIHdoaWxlIChzdGFjay5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCB7IHN1YlNjaGVtYSwgcGFyZW50UGF0aCB9ID0gc3RhY2sucG9wKCkhO1xuXG4gICAgICAvLyBwcm9jZXNzIGNoaWxkcmVuIG9mIGN1cnJlbnQgb2JqZWN0IGZpZWxkXG4gICAgICBmb3IgKGNvbnN0IG5hbWUgb2YgT2JqZWN0LmtleXMoc3ViU2NoZW1hKS5yZXZlcnNlKCkpIHtcbiAgICAgICAgY29uc3QgcGF0aCA9IHBhcmVudFBhdGguY29uY2F0KFtuYW1lXSk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgdGhpcy52YWxpZGF0ZUNvbmZpZ05hbWUobmFtZSk7XG4gICAgICAgICAgY29uc3QgZmllbGQgPSBzdWJTY2hlbWFbbmFtZV07XG5cbiAgICAgICAgICBpZiAoIU9iamVjdC5oYXNPd24oZmllbGQsICd0eXBlJykgfHwgdHlwZW9mIGZpZWxkLnR5cGUgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgIGBldmVyeSBzY2hlbWEgZmllbGQgbXVzdCBoYXZlIGEgXCJ0eXBlXCIgcHJvcGVydHkgb2YgdHlwZSBcInN0cmluZ1wiYCxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKCFzdXBwb3J0ZWRUeXBlcy5pbmNsdWRlcyhmaWVsZC50eXBlKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGB1bnN1cHBvcnRlZCBmaWVsZCB0eXBlIFwiJHtmaWVsZC50eXBlfVwiYCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhpcy52YWxpZGF0ZVNjaGVtYUZpZWxkKGZpZWxkKTtcblxuICAgICAgICAgIC8vIGlmIHRoZSBjaGlsZCBpcyBhbiBvYmplY3QgZmllbGQgaXRzZWxmIGFkZCBpdCB0byBzdGFjayBmb3JcbiAgICAgICAgICAvLyBwcm9jZXNzaW5nXG4gICAgICAgICAgaWYgKGZpZWxkLnR5cGUgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICBzdGFjay5wdXNoKHtcbiAgICAgICAgICAgICAgc3ViU2NoZW1hOiBmaWVsZC5jaGlsZHJlbixcbiAgICAgICAgICAgICAgcGFyZW50UGF0aDogcGF0aCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0gZWxzZSBpZiAoZmllbGQudHlwZSA9PT0gJ2FycmF5Jykge1xuICAgICAgICAgICAgc3RhY2sucHVzaCh7XG4gICAgICAgICAgICAgIHN1YlNjaGVtYTogeyBbbmFtZV06IGZpZWxkLml0ZW1zIH0sXG4gICAgICAgICAgICAgIHBhcmVudFBhdGg6IHBhdGgsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGZpZWxkLnR5cGUgPT09ICd1bmlvbicpIHtcbiAgICAgICAgICAgIGZpZWxkLmNoaWxkcmVuLmZvckVhY2goKHVuaW9uQ2hpbGQsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgIHN0YWNrLnB1c2goe1xuICAgICAgICAgICAgICAgIHN1YlNjaGVtYTogeyBbYCR7bmFtZX1fdW5pb25fJHtpbmRleH1gXTogdW5pb25DaGlsZCB9LFxuICAgICAgICAgICAgICAgIHBhcmVudFBhdGg6IHBhdGgsXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgIGAke2Vycm9yUHJlYW1ibGUocGF0aCl9OiAke2Vycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogZXJyb3J9YCxcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIC8qKlxuICAgKiB2YWxpZGF0ZXMgY29uZmlnIGtleSBuYW1lXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gICAqL1xuICBwcml2YXRlIHZhbGlkYXRlQ29uZmlnTmFtZSA9IChuYW1lOiBzdHJpbmcpID0+IHtcbiAgICBpZiAobmFtZS5pbmNsdWRlcygnLicpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYGNvbmZpZyBrZXkgbmFtZSBjYW4gbm90IGNvbnRhaW4gdGhlICcuJyBjaGFyYWN0ZXJgKTtcbiAgICB9XG4gIH07XG5cbiAgLyoqXG4gICAqIHZhbGlkYXRlcyBwYXNzZWQgc2NoZW1hIGZpZWxkIHN0cnVjdHVyZVxuICAgKlxuICAgKiBAcGFyYW0ge0NvbmZpZ0ZpZWxkfSBmaWVsZFxuICAgKi9cbiAgcHJpdmF0ZSB2YWxpZGF0ZVNjaGVtYUZpZWxkID0gKGZpZWxkOiBDb25maWdGaWVsZCkgPT4ge1xuICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKGZpZWxkKSkge1xuICAgICAgaWYgKFxuICAgICAgICAhT2JqZWN0Lmhhc093bihwcm9wZXJ0eVZhbGlkYXRvcnMuYWxsLCBrZXkpICYmXG4gICAgICAgICFPYmplY3QuaGFzT3duKHByb3BlcnR5VmFsaWRhdG9ycy5wcmltaXRpdmUsIGtleSkgJiZcbiAgICAgICAgIU9iamVjdC5oYXNPd24ocHJvcGVydHlWYWxpZGF0b3JzW2ZpZWxkLnR5cGVdLCBrZXkpXG4gICAgICApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBzY2hlbWEgZmllbGQgaGFzIHVua25vd24gcHJvcGVydHkgXCIke2tleX1cImApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZvciAoY29uc3QgdmFsaWRhdG9yIG9mIE9iamVjdC52YWx1ZXMocHJvcGVydHlWYWxpZGF0b3JzLmFsbCkpIHtcbiAgICAgIHZhbGlkYXRvcihmaWVsZCwgdGhpcyk7XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgZmllbGQudHlwZSAhPT0gJ29iamVjdCcgJiZcbiAgICAgIGZpZWxkLnR5cGUgIT09ICdhcnJheScgJiZcbiAgICAgIGZpZWxkLnR5cGUgIT09ICd1bmlvbidcbiAgICApIHtcbiAgICAgIGZvciAoY29uc3QgdmFsaWRhdG9yIG9mIE9iamVjdC52YWx1ZXMocHJvcGVydHlWYWxpZGF0b3JzLnByaW1pdGl2ZSkpIHtcbiAgICAgICAgdmFsaWRhdG9yKGZpZWxkLCB0aGlzKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IHZhbGlkYXRvciBvZiBPYmplY3QudmFsdWVzKHByb3BlcnR5VmFsaWRhdG9yc1tmaWVsZC50eXBlXSkpIHtcbiAgICAgIHZhbGlkYXRvcihmaWVsZCwgdGhpcyk7XG4gICAgfVxuICB9O1xuXG4gIC8qKlxuICAgKiByZXR1cm5zIGEgZmllbGQgY29ycmVzcG9uZGluZyB0byBhIHBhdGggaW4gc2NoZW1hIHRyZWVcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmdbXX0gcGF0aFxuICAgKiBAcmV0dXJuIHsoQ29uZmlnRmllbGQgfCB1bmRlZmluZWQpfSByZXR1cm5zIHVuZGVmaW5lZCBpZiBmaWVsZCBpcyBub3QgZm91bmRcbiAgICovXG4gIGdldFNjaGVtYUZpZWxkID0gKHBhdGg6IHN0cmluZ1tdKTogQ29uZmlnRmllbGQgfCB1bmRlZmluZWQgPT4ge1xuICAgIGxldCBzdWJUcmVlOiBDb25maWdTY2hlbWEgfCB1bmRlZmluZWQgPSB0aGlzLnNjaGVtYTtcbiAgICBsZXQgZmllbGQ6IENvbmZpZ0ZpZWxkIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuXG4gICAgZm9yIChjb25zdCBwYXJ0IG9mIHBhdGgpIHtcbiAgICAgIGlmICghc3ViVHJlZSkge1xuICAgICAgICBpZiAoZmllbGQ/LnR5cGUgPT09ICd1bmlvbicpIHtcbiAgICAgICAgICBsZXQgZm91bmQ6IENvbmZpZ0ZpZWxkIHwgdW5kZWZpbmVkO1xuXG4gICAgICAgICAgZm9yIChjb25zdCBjaGlsZCBvZiBmaWVsZC5jaGlsZHJlbikge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICBjaGlsZC50eXBlID09PSAnb2JqZWN0JyAmJlxuICAgICAgICAgICAgICBPYmplY3QuaGFzT3duKGNoaWxkLmNoaWxkcmVuLCBwYXJ0KVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIGZvdW5kID0gY2hpbGQuY2hpbGRyZW5bcGFydF07XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICghZm91bmQpIHJldHVybiB1bmRlZmluZWQ7XG5cbiAgICAgICAgICBmaWVsZCA9IGZvdW5kO1xuXG4gICAgICAgICAgaWYgKGZpZWxkLnR5cGUgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICBzdWJUcmVlID0gZmllbGQuY2hpbGRyZW47XG4gICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgIGZpZWxkLnR5cGUgPT09ICdhcnJheScgJiZcbiAgICAgICAgICAgIChmaWVsZC5pdGVtcy50eXBlID09PSAnb2JqZWN0JyB8fCBmaWVsZC5pdGVtcy50eXBlID09PSAndW5pb24nKVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgc3ViVHJlZSA9XG4gICAgICAgICAgICAgIGZpZWxkLml0ZW1zLnR5cGUgPT09ICdvYmplY3QnID8gZmllbGQuaXRlbXMuY2hpbGRyZW4gOiB1bmRlZmluZWQ7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHN1YlRyZWUgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfVxuXG4gICAgICBpZiAoT2JqZWN0Lmhhc093bihzdWJUcmVlLCBwYXJ0KSkge1xuICAgICAgICBmaWVsZCA9IHN1YlRyZWVbcGFydF07XG5cbiAgICAgICAgaWYgKGZpZWxkLnR5cGUgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgc3ViVHJlZSA9IGZpZWxkLmNoaWxkcmVuO1xuICAgICAgICB9IGVsc2UgaWYgKGZpZWxkLnR5cGUgPT09ICdhcnJheScpIHtcbiAgICAgICAgICBpZiAoZmllbGQuaXRlbXMudHlwZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIHN1YlRyZWUgPSBmaWVsZC5pdGVtcy5jaGlsZHJlbjtcbiAgICAgICAgICB9IGVsc2UgaWYgKGZpZWxkLml0ZW1zLnR5cGUgPT09ICd1bmlvbicpIHtcbiAgICAgICAgICAgIHN1YlRyZWUgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICBmaWVsZCA9IGZpZWxkLml0ZW1zO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzdWJUcmVlID0gdW5kZWZpbmVkO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzdWJUcmVlID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoZmllbGQ/LnR5cGUgPT09ICd1bmlvbicpIHtcbiAgICAgICAgICBsZXQgZm91bmQ6IENvbmZpZ0ZpZWxkIHwgdW5kZWZpbmVkO1xuXG4gICAgICAgICAgZm9yIChjb25zdCBjaGlsZCBvZiBmaWVsZC5jaGlsZHJlbikge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICBjaGlsZC50eXBlID09PSAnb2JqZWN0JyAmJlxuICAgICAgICAgICAgICBPYmplY3QuaGFzT3duKGNoaWxkLmNoaWxkcmVuLCBwYXJ0KVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIGZvdW5kID0gY2hpbGQuY2hpbGRyZW5bcGFydF07XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICghZm91bmQpIHJldHVybiB1bmRlZmluZWQ7XG5cbiAgICAgICAgICBmaWVsZCA9IGZvdW5kO1xuXG4gICAgICAgICAgaWYgKGZpZWxkLnR5cGUgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICBzdWJUcmVlID0gZmllbGQuY2hpbGRyZW47XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHN1YlRyZWUgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmllbGQ7XG4gIH07XG5cbiAgLyoqXG4gICAqIGV4dHJhY3RzIGRlZmF1bHQgdmFsdWVzIGZyb20gYSBzY2hlbWFcbiAgICpcbiAgICogQHJldHVybiB7UmVjb3JkPHN0cmluZywgYW55Pn0gb2JqZWN0IG9mIGRlZmF1bHQgdmFsdWVzXG4gICAqL1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICBnZW5lcmF0ZURlZmF1bHQgPSAob3B0aW9ucz86IHsgdmFsaWRhdGU/OiBib29sZWFuIH0pOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0+IHtcbiAgICBjb25zdCB2YWx1ZVRyZWUgPSB0aGlzLmJ1aWxkRGVmYXVsdHNGb3JTY2hlbWEodGhpcy5zY2hlbWEpO1xuICAgIGlmIChvcHRpb25zPy52YWxpZGF0ZSkge1xuICAgICAgdGhpcy52YWxpZGF0ZUNvbmZpZyh2YWx1ZVRyZWUpO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWVUcmVlO1xuICB9O1xuXG4gIC8vIEJ1aWxkcyBkZWZhdWx0IHZhbHVlcyBmb3IgYSBzY2hlbWEgc3VidHJlZSAob2JqZWN0cyBhbmQgYXJyYXlzKSwgcmVjdXJzaXZlbHlcbiAgcHJpdmF0ZSBidWlsZERlZmF1bHRzRm9yU2NoZW1hID0gKFxuICAgIHNjaGVtYTogQ29uZmlnU2NoZW1hLFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICk6IFJlY29yZDxzdHJpbmcsIGFueT4gPT4ge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgY29uc3QgZGVmYXVsdHM6IFJlY29yZDxzdHJpbmcsIGFueT4gPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKHNjaGVtYSkpIHtcbiAgICAgIGNvbnN0IGZpZWxkID0gc2NoZW1hW2tleV07XG4gICAgICBpZiAoZmllbGQudHlwZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgY29uc3QgY2hpbGREZWZhdWx0cyA9IHRoaXMuYnVpbGREZWZhdWx0c0ZvclNjaGVtYShmaWVsZC5jaGlsZHJlbik7XG4gICAgICAgIGlmIChPYmplY3Qua2V5cyhjaGlsZERlZmF1bHRzKS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgZGVmYXVsdHNba2V5XSA9IGNoaWxkRGVmYXVsdHM7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoZmllbGQudHlwZSA9PT0gJ2FycmF5Jykge1xuICAgICAgICBpZiAoZmllbGQuZGVmYXVsdCAhPSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBpZiAoZmllbGQuaXRlbXMudHlwZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIGNvbnN0IGl0ZW1EZWZhdWx0cyA9IHRoaXMuYnVpbGREZWZhdWx0c0ZvclNjaGVtYShcbiAgICAgICAgICAgICAgZmllbGQuaXRlbXMuY2hpbGRyZW4sXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgZGVmYXVsdHNba2V5XSA9IGZpZWxkLmRlZmF1bHQubWFwKChlbGVtOiBWYWx1ZVR5cGUpID0+IHtcbiAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIGVsZW0gIT0gbnVsbCAmJlxuICAgICAgICAgICAgICAgIHR5cGVvZiBlbGVtID09PSAnb2JqZWN0JyAmJlxuICAgICAgICAgICAgICAgICFBcnJheS5pc0FycmF5KGVsZW0pXG4gICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHJldHVybiB7IC4uLml0ZW1EZWZhdWx0cywgLi4uZWxlbSB9O1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJldHVybiBlbGVtO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRlZmF1bHRzW2tleV0gPSBmaWVsZC5kZWZhdWx0O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChmaWVsZC50eXBlICE9PSAndW5pb24nICYmIGZpZWxkLmRlZmF1bHQgIT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGRlZmF1bHRzW2tleV0gPSBmaWVsZC5kZWZhdWx0O1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZGVmYXVsdHM7XG4gIH07XG5cbiAgLyoqXG4gICAqIGdlbmVyYXRlcyBjb21wYXRpYmxlIFR5cGVTY3JpcHQgaW50ZXJmYWNlIGZvciB0aGlzIGluc3RhbmNlJ3Mgc2NoZW1hXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIHRoZSBuYW1lIG9mIHJvb3QgdHlwZVxuICAgKiBAcmV0dXJuIHtzdHJpbmd9XG4gICAqL1xuICBnZW5lcmF0ZVRTVHlwZXMgPSAobmFtZTogc3RyaW5nKTogc3RyaW5nID0+IHtcbiAgICBjb25zdCB0eXBlczogc3RyaW5nW10gPSBbXTtcbiAgICBjb25zdCBlbWl0dGVkVHlwZU5hbWVzOiBTZXQ8c3RyaW5nPiA9IG5ldyBTZXQoKTtcblxuICAgIGNvbnN0IHN0YWNrOiBBcnJheTx7XG4gICAgICBzdWJTY2hlbWE6IENvbmZpZ1NjaGVtYTtcbiAgICAgIGNoaWxkcmVuOiBzdHJpbmdbXTtcbiAgICAgIHBhcmVudFBhdGg6IHN0cmluZ1tdO1xuICAgICAgdHlwZU5hbWU6IHN0cmluZztcbiAgICAgIGF0dHJpYnV0ZXM6IEFycmF5PFtzdHJpbmcsIHN0cmluZ10+O1xuICAgIH0+ID0gW1xuICAgICAge1xuICAgICAgICBzdWJTY2hlbWE6IHRoaXMuc2NoZW1hLFxuICAgICAgICBjaGlsZHJlbjogT2JqZWN0LmtleXModGhpcy5zY2hlbWEpLFxuICAgICAgICBwYXJlbnRQYXRoOiBbXSxcbiAgICAgICAgdHlwZU5hbWU6IG5hbWUsXG4gICAgICAgIGF0dHJpYnV0ZXM6IFtdLFxuICAgICAgfSxcbiAgICBdO1xuICAgIC8vIFRyYXZlcnNlcyB0aGUgc2NoZW1hIG9iamVjdCB0cmVlIGRlcHRoIGZpcnN0XG4gICAgd2hpbGUgKHN0YWNrLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IGN1cnJlbnQgPSBzdGFja1tzdGFjay5sZW5ndGggLSAxXTtcbiAgICAgIGNvbnN0IHsgc3ViU2NoZW1hLCBjaGlsZHJlbiwgcGFyZW50UGF0aCwgdHlwZU5hbWUsIGF0dHJpYnV0ZXMgfSA9IGN1cnJlbnQ7XG5cbiAgICAgIGlmIChjaGlsZHJlbi5sZW5ndGggPT09IDApIHtcbiAgICAgICAgaWYgKCFlbWl0dGVkVHlwZU5hbWVzLmhhcyh0eXBlTmFtZSkpIHtcbiAgICAgICAgICB0eXBlcy5wdXNoKHRoaXMuZ2VuVFNJbnRlcmZhY2UodHlwZU5hbWUsIGF0dHJpYnV0ZXMpKTtcbiAgICAgICAgICBlbWl0dGVkVHlwZU5hbWVzLmFkZCh0eXBlTmFtZSk7XG4gICAgICAgIH1cbiAgICAgICAgc3RhY2sucG9wKCk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBjaGlsZE5hbWUgPSBjaGlsZHJlbi5wb3AoKSE7XG4gICAgICBjb25zdCBmaWVsZCA9IHN1YlNjaGVtYVtjaGlsZE5hbWVdO1xuICAgICAgY29uc3QgcGF0aCA9IHBhcmVudFBhdGguY29uY2F0KGNoaWxkTmFtZSk7XG4gICAgICAvLyBpZiBhIG5vZGUvZmllbGQgaXMgb2YgdHlwZSBvYmplY3QgYW5kIHRodXMgaXMgYSBzdWJ0cmVlLCBhZGQgaXQgdG9cbiAgICAgIC8vIHRoZSBzdGFjayB0byBiZSB0cmF2ZXJzZWQgbGF0ZXIuIE90aGVyd2lzZSBpdCdzIGEgbGVhZiBhbmQgbmVlZHMgbm9cbiAgICAgIC8vIHRyYXZlcnNhbC5cbiAgICAgIGNvbnN0IGNoaWxkTmFtZVF1b3RlZCA9IGNoaWxkTmFtZS5pbmNsdWRlcygnLScpXG4gICAgICAgID8gYFwiJHtjaGlsZE5hbWV9XCJgXG4gICAgICAgIDogY2hpbGROYW1lO1xuICAgICAgaWYgKGZpZWxkLnR5cGUgPT09ICd1bmlvbicpIHtcbiAgICAgICAgY29uc3QgdW5pb25UeXBlczogc3RyaW5nW10gPSBbXTtcblxuICAgICAgICBmaWVsZC5jaGlsZHJlbi5mb3JFYWNoKChjaGlsZCwgaW5kZXgpID0+IHtcbiAgICAgICAgICBpZiAoY2hpbGQudHlwZSA9PT0gJ3VuaW9uJykge1xuICAgICAgICAgICAgY2hpbGQuY2hpbGRyZW4uZm9yRWFjaCgobmVzdGVkQ2hpbGQpID0+IHtcbiAgICAgICAgICAgICAgdW5pb25UeXBlcy5wdXNoKG5lc3RlZENoaWxkLnR5cGUpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoY2hpbGQudHlwZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIGNvbnN0IG9wdGlvblBhdGggPSBwYXRoLmNvbmNhdChbYE9wdGlvbiR7aW5kZXh9YF0pO1xuICAgICAgICAgICAgY29uc3QgdHlwZU5hbWUgPSBvcHRpb25QYXRoLm1hcCh0b1Bhc2NhbENhc2UpLmpvaW4oJycpO1xuXG4gICAgICAgICAgICBzdGFjay5wdXNoKHtcbiAgICAgICAgICAgICAgc3ViU2NoZW1hOiBjaGlsZC5jaGlsZHJlbixcbiAgICAgICAgICAgICAgY2hpbGRyZW46IE9iamVjdC5rZXlzKGNoaWxkLmNoaWxkcmVuKS5yZXZlcnNlKCksXG4gICAgICAgICAgICAgIHBhcmVudFBhdGg6IG9wdGlvblBhdGgsXG4gICAgICAgICAgICAgIHR5cGVOYW1lLFxuICAgICAgICAgICAgICBhdHRyaWJ1dGVzOiBbXSxcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICB1bmlvblR5cGVzLnB1c2godHlwZU5hbWUpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChjaGlsZC50eXBlID09PSAnYXJyYXknKSB7XG4gICAgICAgICAgICBpZiAoY2hpbGQuaXRlbXMudHlwZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgICAgY29uc3QgaXRlbVBhdGggPSBwYXRoLmNvbmNhdChbYEl0ZW0ke2luZGV4fWBdKTtcbiAgICAgICAgICAgICAgY29uc3QgdHlwZU5hbWUgPSBpdGVtUGF0aC5tYXAodG9QYXNjYWxDYXNlKS5qb2luKCcnKTtcblxuICAgICAgICAgICAgICBzdGFjay5wdXNoKHtcbiAgICAgICAgICAgICAgICBzdWJTY2hlbWE6IGNoaWxkLml0ZW1zLmNoaWxkcmVuLFxuICAgICAgICAgICAgICAgIGNoaWxkcmVuOiBPYmplY3Qua2V5cyhjaGlsZC5pdGVtcy5jaGlsZHJlbikucmV2ZXJzZSgpLFxuICAgICAgICAgICAgICAgIHBhcmVudFBhdGg6IGl0ZW1QYXRoLFxuICAgICAgICAgICAgICAgIHR5cGVOYW1lLFxuICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXM6IFtdLFxuICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICB1bmlvblR5cGVzLnB1c2goYCR7dHlwZU5hbWV9W11gKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHVuaW9uVHlwZXMucHVzaChgJHtjaGlsZC5pdGVtcy50eXBlfVtdYCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB1bmlvblR5cGVzLnB1c2goY2hpbGQudHlwZSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGF0dHJpYnV0ZXMucHVzaChbY2hpbGROYW1lUXVvdGVkLCB1bmlvblR5cGVzLmpvaW4oJyB8ICcpXSk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKGZpZWxkLnR5cGUgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIGNvbnN0IHR5cGVOYW1lID0gcGF0aC5tYXAodG9QYXNjYWxDYXNlKS5qb2luKCcnKTtcblxuICAgICAgICBzdGFjay5wdXNoKHtcbiAgICAgICAgICBzdWJTY2hlbWE6IGZpZWxkLmNoaWxkcmVuLFxuICAgICAgICAgIGNoaWxkcmVuOiBPYmplY3Qua2V5cyhmaWVsZC5jaGlsZHJlbikucmV2ZXJzZSgpLFxuICAgICAgICAgIHBhcmVudFBhdGg6IHBhdGgsXG4gICAgICAgICAgdHlwZU5hbWUsXG4gICAgICAgICAgYXR0cmlidXRlczogW10sXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGF0dHJpYnV0ZXMucHVzaChbY2hpbGROYW1lUXVvdGVkLCB0eXBlTmFtZV0pO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmIChmaWVsZC50eXBlID09PSAnYXJyYXknKSB7XG4gICAgICAgIGlmIChmaWVsZC5pdGVtcy50eXBlID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgIGNvbnN0IHR5cGVOYW1lID0gcGF0aC5tYXAodG9QYXNjYWxDYXNlKS5qb2luKCcnKTtcblxuICAgICAgICAgIHN0YWNrLnB1c2goe1xuICAgICAgICAgICAgc3ViU2NoZW1hOiBmaWVsZC5pdGVtcy5jaGlsZHJlbixcbiAgICAgICAgICAgIGNoaWxkcmVuOiBPYmplY3Qua2V5cyhmaWVsZC5pdGVtcy5jaGlsZHJlbikucmV2ZXJzZSgpLFxuICAgICAgICAgICAgcGFyZW50UGF0aDogcGF0aCxcbiAgICAgICAgICAgIHR5cGVOYW1lLFxuICAgICAgICAgICAgYXR0cmlidXRlczogW10sXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBhdHRyaWJ1dGVzLnB1c2goW2NoaWxkTmFtZVF1b3RlZCwgYCR7dHlwZU5hbWV9W11gXSk7XG4gICAgICAgIH0gZWxzZSBpZiAoZmllbGQuaXRlbXMudHlwZSA9PT0gJ3VuaW9uJykge1xuICAgICAgICAgIGNvbnN0IHVuaW9uVHlwZXM6IHN0cmluZ1tdID0gW107XG5cbiAgICAgICAgICBmaWVsZC5pdGVtcy5jaGlsZHJlbi5mb3JFYWNoKChjaGlsZCwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgY2hpbGQudHlwZSA9PT0gJ3N0cmluZycgfHxcbiAgICAgICAgICAgICAgY2hpbGQudHlwZSA9PT0gJ251bWJlcicgfHxcbiAgICAgICAgICAgICAgY2hpbGQudHlwZSA9PT0gJ2Jvb2xlYW4nXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgdW5pb25UeXBlcy5wdXNoKGNoaWxkLnR5cGUpO1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChjaGlsZC50eXBlID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgICBjb25zdCBvcHRpb25QYXRoID0gcGF0aC5jb25jYXQoW2BPcHRpb24ke2luZGV4fWBdKTtcbiAgICAgICAgICAgICAgY29uc3QgdHlwZU5hbWUgPSBvcHRpb25QYXRoLm1hcCh0b1Bhc2NhbENhc2UpLmpvaW4oJycpO1xuXG4gICAgICAgICAgICAgIHN0YWNrLnB1c2goe1xuICAgICAgICAgICAgICAgIHN1YlNjaGVtYTogY2hpbGQuY2hpbGRyZW4sXG4gICAgICAgICAgICAgICAgY2hpbGRyZW46IE9iamVjdC5rZXlzKGNoaWxkLmNoaWxkcmVuKS5yZXZlcnNlKCksXG4gICAgICAgICAgICAgICAgcGFyZW50UGF0aDogb3B0aW9uUGF0aCxcbiAgICAgICAgICAgICAgICB0eXBlTmFtZSxcbiAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzOiBbXSxcbiAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgdW5pb25UeXBlcy5wdXNoKHR5cGVOYW1lKTtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoY2hpbGQudHlwZSA9PT0gJ2FycmF5Jykge1xuICAgICAgICAgICAgICBpZiAoY2hpbGQuaXRlbXMudHlwZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBpdGVtUGF0aCA9IHBhdGguY29uY2F0KFtgT3B0aW9uJHtpbmRleH1JdGVtYF0pO1xuICAgICAgICAgICAgICAgIGNvbnN0IHR5cGVOYW1lID0gaXRlbVBhdGgubWFwKHRvUGFzY2FsQ2FzZSkuam9pbignJyk7XG5cbiAgICAgICAgICAgICAgICBzdGFjay5wdXNoKHtcbiAgICAgICAgICAgICAgICAgIHN1YlNjaGVtYTogY2hpbGQuaXRlbXMuY2hpbGRyZW4sXG4gICAgICAgICAgICAgICAgICBjaGlsZHJlbjogT2JqZWN0LmtleXMoY2hpbGQuaXRlbXMuY2hpbGRyZW4pLnJldmVyc2UoKSxcbiAgICAgICAgICAgICAgICAgIHBhcmVudFBhdGg6IGl0ZW1QYXRoLFxuICAgICAgICAgICAgICAgICAgdHlwZU5hbWUsXG4gICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzOiBbXSxcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIHVuaW9uVHlwZXMucHVzaChgJHt0eXBlTmFtZX1bXWApO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHVuaW9uVHlwZXMucHVzaChgJHtjaGlsZC5pdGVtcy50eXBlfVtdYCk7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHVuaW9uVHlwZXMucHVzaChjaGlsZC50eXBlKTtcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGF0dHJpYnV0ZXMucHVzaChbY2hpbGROYW1lUXVvdGVkLCBgKCR7dW5pb25UeXBlcy5qb2luKCcgfCAnKX0pW11gXSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYXR0cmlidXRlcy5wdXNoKFtjaGlsZE5hbWVRdW90ZWQsIGAke2ZpZWxkLml0ZW1zLnR5cGV9W11gXSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGxldCBmaWVsZFR5cGU6IHN0cmluZyA9IGZpZWxkLnR5cGU7XG4gICAgICBsZXQgaXNPcHRpb25hbCA9IHRydWU7XG4gICAgICBpZiAoZmllbGQudmFsaWRhdGlvbnMpIHtcbiAgICAgICAgZm9yIChjb25zdCB2YWxpZGF0aW9uIG9mIGZpZWxkLnZhbGlkYXRpb25zKSB7XG4gICAgICAgICAgaWYgKGZpZWxkLnR5cGUgPT09ICdzdHJpbmcnICYmICdjaG9pY2VzJyBpbiB2YWxpZGF0aW9uKSB7XG4gICAgICAgICAgICBmaWVsZFR5cGUgPSB2YWxpZGF0aW9uLmNob2ljZXMubWFwKChjKSA9PiBgJyR7Y30nYCkuam9pbignIHwgJyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKCdyZXF1aXJlZCcgaW4gdmFsaWRhdGlvbiAmJiAhKCd3aGVuJyBpbiB2YWxpZGF0aW9uKSkge1xuICAgICAgICAgICAgaXNPcHRpb25hbCA9IGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgYXR0cmlidXRlcy5wdXNoKFtcbiAgICAgICAgaXNPcHRpb25hbCA/IGAke2NoaWxkTmFtZVF1b3RlZH0/YCA6IGNoaWxkTmFtZVF1b3RlZCxcbiAgICAgICAgZmllbGRUeXBlLFxuICAgICAgXSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHR5cGVzLnJldmVyc2UoKS5qb2luKCdcXG5cXG4nKSArICdcXG4nO1xuICB9O1xuXG4gIC8qKlxuICAgKiBnZW5lcmF0ZXMgYSBUeXBlU2NyaXB0IGludGVyZmFjZSBkZWZpbml0aW9uIGZvciBwYXNzZWQgbmFtZSBhbmQgYXR0cmlidXRlc1xuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICAgKiBAcGFyYW0ge0FycmF5PFtzdHJpbmcsIHN0cmluZ10+fSBhdHRyaWJ1dGVzXG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICovXG4gIHByaXZhdGUgZ2VuVFNJbnRlcmZhY2UgPSAoXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIGF0dHJpYnV0ZXM6IEFycmF5PFtzdHJpbmcsIHN0cmluZ10+LFxuICApOiBzdHJpbmcgPT4ge1xuICAgIHJldHVybiBgZXhwb3J0IGludGVyZmFjZSAke25hbWV9IHtcbiAgJHthdHRyaWJ1dGVzLm1hcCgoYXR0cikgPT4gYCR7YXR0clswXX06ICR7YXR0clsxXX07YCkuam9pbignXFxuICAnKX1cbn1gO1xuICB9O1xuXG4gIC8qKlxuICAgKiByZXR1cm5zIGEgY2hhcmFjdGVyaXN0aWMgb2JqZWN0IGZvciB2YWx1ZXMgYXQgYSBzcGVjaWZpYyBub2RlIGNvbmZpZyBsZXZlbFxuICAgKlxuICAgKiBAcGFyYW0ge0lDb25maWd9IGNvbmZpZ1xuICAgKiBAcGFyYW0ge3N0cmluZ30gbGV2ZWxcbiAgICogQHJldHVybiB7UmVjb3JkPHN0cmluZywgYW55Pn1cbiAgICovXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gIGdldENvbmZpZ0ZvckxldmVsKGNvbmZpZzogSUNvbmZpZywgbGV2ZWw6IHN0cmluZyk6IFJlY29yZDxzdHJpbmcsIGFueT4ge1xuICAgIGNvbnN0IGNvbmZMZXZlbHMgPSBDb25maWdWYWxpZGF0b3IuZ2V0Tm9kZUNvbmZpZ0xldmVscyhjb25maWcpO1xuICAgIGNvbnN0IGxldmVsSW5kZXggPSBjb25mTGV2ZWxzLmluZGV4T2YobGV2ZWwpO1xuICAgIGlmIChsZXZlbEluZGV4ID09PSAtMSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgVGhlIFwiJHtsZXZlbH1cIiBsZXZlbCBub3QgZm91bmQgaW4gdGhlIGN1cnJlbnQgc3lzdGVtIGNvbmZpZ3VyYXRpb24gbGV2ZWxzYCxcbiAgICAgICk7XG4gICAgfVxuICAgIGNvbnN0IGhpZ2hlckxldmVsU291cmNlcyA9IGNvbmZpZy51dGlsXG4gICAgICAuZ2V0Q29uZmlnU291cmNlcygpXG4gICAgICAuZmlsdGVyKFxuICAgICAgICAoc291cmNlKSA9PiBjb25mTGV2ZWxzLmluZGV4T2YoZ2V0U291cmNlTmFtZShzb3VyY2UpKSA+IGxldmVsSW5kZXgsXG4gICAgICApO1xuICAgIGNvbnN0IGN1cnJlbnRMZXZlbFNvdXJjZSA9IGNvbmZpZy51dGlsXG4gICAgICAuZ2V0Q29uZmlnU291cmNlcygpXG4gICAgICAuZmlsdGVyKChzb3VyY2UpID0+IGdldFNvdXJjZU5hbWUoc291cmNlKSA9PT0gbGV2ZWwpXG4gICAgICAuYXQoMCk7XG4gICAgY29uc3QgbG93ZXJMZXZlbFNvdXJjZXMgPSBjb25maWcudXRpbFxuICAgICAgLmdldENvbmZpZ1NvdXJjZXMoKVxuICAgICAgLmZpbHRlcihcbiAgICAgICAgKHNvdXJjZSkgPT4gY29uZkxldmVscy5pbmRleE9mKGdldFNvdXJjZU5hbWUoc291cmNlKSkgPCBsZXZlbEluZGV4LFxuICAgICAgKTtcblxuICAgIC8vIFRyYXZlcnNlcyB0aGUgc2NoZW1hIG9iamVjdCB0cmVlIGRlcHRoIGZpcnN0XG4gICAgY29uc3QgdmFsdWVUcmVlID0gQ29uZmlnVmFsaWRhdG9yLnByb2Nlc3NDb25maWdGb3JMZXZlbE5vZGUoXG4gICAgICB0aGlzLnNjaGVtYSxcbiAgICAgIFtdLFxuICAgICAgaGlnaGVyTGV2ZWxTb3VyY2VzLFxuICAgICAgY3VycmVudExldmVsU291cmNlLFxuICAgICAgbG93ZXJMZXZlbFNvdXJjZXMsXG4gICAgKTtcblxuICAgIHJldHVybiB2YWx1ZVRyZWU7XG4gIH1cblxuICAvKipcbiAgICp0cmF2ZXJzZXMgdGhlIGNvbmZpZyBzY2hlbWEgZGVwdGggZmlyc3QgdG8gcHJvZHVjZSBjaGFyYWN0ZXJpc3RpYyBvYmplY3RcbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHN0YXRpY1xuICAgKiBAcGFyYW0ge0NvbmZpZ1NjaGVtYX0gc2NoZW1hXG4gICAqIEBwYXJhbSB7c3RyaW5nW119IHBhdGhcbiAgICogQHBhcmFtIHtJQ29uZmlnU291cmNlW119IGhpZ2hlckxldmVsU291cmNlc1xuICAgKiBAcGFyYW0geyhJQ29uZmlnU291cmNlIHwgdW5kZWZpbmVkKX0gY3VycmVudExldmVsU291cmNlXG4gICAqIEBwYXJhbSB7SUNvbmZpZ1NvdXJjZVtdfSBsb3dlckxldmVsU291cmNlc1xuICAgKiBAcmV0dXJuIHtSZWNvcmQ8c3RyaW5nLCBhbnk+fVxuICAgKiBAbWVtYmVyb2YgQ29uZmlnVmFsaWRhdG9yXG4gICAqL1xuICBwcml2YXRlIHN0YXRpYyBwcm9jZXNzQ29uZmlnRm9yTGV2ZWxOb2RlKFxuICAgIHNjaGVtYTogQ29uZmlnU2NoZW1hLFxuICAgIHBhdGg6IHN0cmluZ1tdLFxuICAgIGhpZ2hlckxldmVsU291cmNlczogSUNvbmZpZ1NvdXJjZVtdLFxuICAgIGN1cnJlbnRMZXZlbFNvdXJjZTogSUNvbmZpZ1NvdXJjZSB8IHVuZGVmaW5lZCxcbiAgICBsb3dlckxldmVsU291cmNlczogSUNvbmZpZ1NvdXJjZVtdLFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICk6IFJlY29yZDxzdHJpbmcsIGFueT4ge1xuICAgIGNvbnN0IHZhbHVlID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICBmb3IgKGNvbnN0IGNoaWxkTmFtZSBvZiBPYmplY3Qua2V5cyhzY2hlbWEpLnJldmVyc2UoKSkge1xuICAgICAgY29uc3QgY2hpbGRQYXRoID0gcGF0aC5jb25jYXQoW2NoaWxkTmFtZV0pO1xuICAgICAgY29uc3QgZmllbGQgPSBzY2hlbWFbY2hpbGROYW1lXTtcbiAgICAgIC8vIGlmIGEgZmllbGQgaXMgb2YgdHlwZSBvYmplY3QgYW5kIHRodXMgaXMgYSBzdWJ0cmVlLCByZWN1cnNlIG9uIGl0LlxuICAgICAgLy8gT3RoZXJ3aXNlIGl0J3MgYSBsZWFmIGFuZCBuZWVkcyBubyB0cmF2ZXJzYWwuXG4gICAgICB2YWx1ZVtjaGlsZE5hbWVdID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgIGlmIChmaWVsZC50eXBlID09PSAnb2JqZWN0Jykge1xuICAgICAgICB2YWx1ZVtjaGlsZE5hbWVdID0gQ29uZmlnVmFsaWRhdG9yLnByb2Nlc3NDb25maWdGb3JMZXZlbE5vZGUoXG4gICAgICAgICAgZmllbGQuY2hpbGRyZW4sXG4gICAgICAgICAgY2hpbGRQYXRoLFxuICAgICAgICAgIGhpZ2hlckxldmVsU291cmNlcyxcbiAgICAgICAgICBjdXJyZW50TGV2ZWxTb3VyY2UsXG4gICAgICAgICAgbG93ZXJMZXZlbFNvdXJjZXMsXG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YWx1ZVtjaGlsZE5hbWVdWydsYWJlbCddID1cbiAgICAgICAgICBmaWVsZC5sYWJlbCAhPSB1bmRlZmluZWQgPyBmaWVsZC5sYWJlbCA6IG51bGw7XG4gICAgICAgIHZhbHVlW2NoaWxkTmFtZV1bJ2Rlc2NyaXB0aW9uJ10gPVxuICAgICAgICAgIGZpZWxkLmRlc2NyaXB0aW9uICE9IHVuZGVmaW5lZCA/IGZpZWxkLmRlc2NyaXB0aW9uIDogbnVsbDtcbiAgICAgICAgdmFsdWVbY2hpbGROYW1lXVsnZGVmYXVsdCddID0gZ2V0VmFsdWVGcm9tQ29uZmlnU291cmNlcyhcbiAgICAgICAgICBsb3dlckxldmVsU291cmNlcyxcbiAgICAgICAgICBjaGlsZFBhdGgsXG4gICAgICAgICk7XG4gICAgICAgIHZhbHVlW2NoaWxkTmFtZV1bJ3ZhbHVlJ10gPSBnZXRWYWx1ZUZyb21Db25maWdTb3VyY2VzKFxuICAgICAgICAgIFsuLi4oY3VycmVudExldmVsU291cmNlICE9IHVuZGVmaW5lZCA/IFtjdXJyZW50TGV2ZWxTb3VyY2VdIDogW10pXSxcbiAgICAgICAgICBjaGlsZFBhdGgsXG4gICAgICAgICk7XG4gICAgICAgIHZhbHVlW2NoaWxkTmFtZV1bJ292ZXJyaWRlJ10gPSBnZXRWYWx1ZUZyb21Db25maWdTb3VyY2VzKFxuICAgICAgICAgIGhpZ2hlckxldmVsU291cmNlcyxcbiAgICAgICAgICBjaGlsZFBhdGgsXG4gICAgICAgICk7XG4gICAgICAgIHZhbHVlW2NoaWxkTmFtZV0uc2VjcmV0ID0gJ3NlY3JldCcgaW4gZmllbGQgPyBmaWVsZFsnc2VjcmV0J10gOiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogR2VuZXJhdGVzIGEgY3VzdG9tIGVudmlyb25tZW50IGZpbGUgYmFzZWQgb24gdGhlIHByb3ZpZGVkIHNjaGVtYS5cbiAgICpcbiAgICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5hbGxFbnZdIElmIHRydWUsIGluY2x1ZGVzIGFsbCBlbnZpcm9ubWVudCB2YXJpYWJsZXMsIG90aGVyd2lzZSBvbmx5IGluY2x1ZGVzIG5vbi1zZWNyZXQgZmllbGRzLlxuICAgKiBAcGFyYW0ge0NvbmZpZ1NjaGVtYX0gc2NoZW1hXG4gICAqIEBwYXJhbSB7c3RyaW5nW119IHBhdGhcbiAgICpcbiAgICogQHJldHVybnMge1JlY29yZDxzdHJpbmcsIHVua25vd24+fVxuICAgKi9cbiAgZ2VuZXJhdGVDdXN0b21FbnZGaWxlID0gKFxuICAgIGFsbEVudj86IGJvb2xlYW4sXG4gICAgc2NoZW1hOiBDb25maWdTY2hlbWEgPSB0aGlzLnNjaGVtYSxcbiAgICBwYXRoOiBzdHJpbmdbXSA9IFtdLFxuICApOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9PiB7XG4gICAgY29uc3Qgb3V0OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG5cbiAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhzY2hlbWEpKSB7XG4gICAgICBjb25zdCBmaWVsZCA9IHNjaGVtYVtrZXldO1xuICAgICAgY29uc3QgY3VycmVudFBhdGggPSBbLi4ucGF0aCwga2V5XTtcbiAgICAgIHN3aXRjaCAoZmllbGQudHlwZSkge1xuICAgICAgICBjYXNlICdvYmplY3QnOiB7XG4gICAgICAgICAgY29uc3QgY2hpbGQgPSB0aGlzLmdlbmVyYXRlQ3VzdG9tRW52RmlsZShcbiAgICAgICAgICAgIGFsbEVudixcbiAgICAgICAgICAgIGZpZWxkLmNoaWxkcmVuLFxuICAgICAgICAgICAgY3VycmVudFBhdGgsXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIGlmIChPYmplY3Qua2V5cyhjaGlsZCkubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgb3V0W2tleV0gPSBjaGlsZDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgJ2FycmF5Jzoge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgJ3VuaW9uJzoge1xuICAgICAgICAgIGNvbnN0IHVuaW9uT3V0OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgICAgbGV0IGhhc1ByaW1pdGl2ZSA9IGZhbHNlO1xuXG4gICAgICAgICAgZm9yIChjb25zdCB1bmlvbkNoaWxkIG9mIGZpZWxkLmNoaWxkcmVuKSB7XG4gICAgICAgICAgICBjb25zdCBjaGlsZFJlc3VsdCA9IHRoaXMuZ2VuZXJhdGVDdXN0b21FbnZGaWxlKFxuICAgICAgICAgICAgICBhbGxFbnYsXG4gICAgICAgICAgICAgIHsgW2tleV06IHVuaW9uQ2hpbGQgfSxcbiAgICAgICAgICAgICAgcGF0aCxcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGNvbnN0IGNoaWxkVmFsdWUgPSBjaGlsZFJlc3VsdFtrZXldO1xuXG4gICAgICAgICAgICBpZiAoY2hpbGRWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgIGlmICh0eXBlb2YgY2hpbGRWYWx1ZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgICAgICBPYmplY3QuYXNzaWduKHVuaW9uT3V0LCBjaGlsZFZhbHVlKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBoYXNQcmltaXRpdmUgPSB0cnVlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKE9iamVjdC5rZXlzKHVuaW9uT3V0KS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBvdXRba2V5XSA9IHVuaW9uT3V0O1xuICAgICAgICAgIH0gZWxzZSBpZiAoaGFzUHJpbWl0aXZlKSB7XG4gICAgICAgICAgICBvdXRba2V5XSA9IGN1cnJlbnRQYXRoLm1hcCgocCkgPT4gcC50b1VwcGVyQ2FzZSgpKS5qb2luKCdfJyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgIGlmICghKGFsbEVudiB8fCBmaWVsZC5zZWNyZXQgPT09IHRydWUpKSBicmVhaztcblxuICAgICAgICAgIGNvbnN0IGVudktleSA9IGN1cnJlbnRQYXRoLm1hcCgocCkgPT4gcC50b1VwcGVyQ2FzZSgpKS5qb2luKCdfJyk7XG5cbiAgICAgICAgICBvdXRba2V5XSA9IGVudktleTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gb3V0O1xuICB9O1xuXG4gIC8qKlxuICAgKiByZXR1cm5zIGEgbGlzdCBvZiBjb25maWcgc291cmNlcyB1c2VkIGJ5IG5vZGUgY29uZmlnIHBhY2thZ2UsIG9yZGVyZWQgZnJvbVxuICAgKiB0aGUgbG93ZXN0IHRvIHRoZSBoaWdoZXN0IHByaW9yaXR5XG4gICAqXG4gICAqIEBzdGF0aWNcbiAgICogQHBhcmFtIHtJQ29uZmlnfSBjb25maWdcbiAgICogQHJldHVybiAge3N0cmluZ1tdfVxuICAgKi9cbiAgcHJpdmF0ZSBzdGF0aWMgZ2V0Tm9kZUNvbmZpZ0xldmVscyA9IChjb25maWc6IElDb25maWcpOiBzdHJpbmdbXSA9PiB7XG4gICAgY29uc3QgaW5zdGFuY2UgPSBjb25maWcudXRpbC5nZXRFbnYoJ05PREVfQVBQX0lOU1RBTkNFJyk7XG4gICAgbGV0IGRlcGxveW1lbnQgPSBjb25maWcudXRpbC5nZXRFbnYoJ05PREVfRU5WJyk7XG4gICAgZGVwbG95bWVudCA9IGNvbmZpZy51dGlsLmdldEVudignTk9ERV9DT05GSUdfRU5WJyk7XG4gICAgY29uc3QgZnVsbEhvc3RuYW1lID0gY29uZmlnLnV0aWwuZ2V0RW52KCdIT1NUTkFNRScpO1xuICAgIGNvbnN0IHNob3J0SG9zdG5hbWUgPVxuICAgICAgZnVsbEhvc3RuYW1lICE9IHVuZGVmaW5lZCA/IGZ1bGxIb3N0bmFtZS5zcGxpdCgnLicpWzBdIDogdW5kZWZpbmVkO1xuXG4gICAgY29uc3QgY29uZmlnTGV2ZWxzID0gW1xuICAgICAgJ2RlZmF1bHQnLFxuICAgICAgLi4uKGluc3RhbmNlICE9IHVuZGVmaW5lZCA/IFtgZGVmYXVsdC0ke2luc3RhbmNlfWBdIDogW10pLFxuICAgICAgLi4uKGRlcGxveW1lbnQgIT0gdW5kZWZpbmVkID8gW2Ake2RlcGxveW1lbnR9YF0gOiBbXSksXG4gICAgICAuLi4oaW5zdGFuY2UgIT0gdW5kZWZpbmVkICYmIGRlcGxveW1lbnQgIT0gdW5kZWZpbmVkXG4gICAgICAgID8gW2Ake2RlcGxveW1lbnR9LSR7aW5zdGFuY2V9YF1cbiAgICAgICAgOiBbXSksXG4gICAgICAuLi4oc2hvcnRIb3N0bmFtZSAhPSB1bmRlZmluZWQgPyBbYCR7c2hvcnRIb3N0bmFtZX1gXSA6IFtdKSxcbiAgICAgIC4uLihzaG9ydEhvc3RuYW1lICE9IHVuZGVmaW5lZCAmJiBpbnN0YW5jZSAhPSB1bmRlZmluZWRcbiAgICAgICAgPyBbYCR7c2hvcnRIb3N0bmFtZX0tJHtpbnN0YW5jZX1gXVxuICAgICAgICA6IFtdKSxcbiAgICAgIC4uLihzaG9ydEhvc3RuYW1lICE9IHVuZGVmaW5lZCAmJiBkZXBsb3ltZW50ICE9IHVuZGVmaW5lZFxuICAgICAgICA/IFtgJHtzaG9ydEhvc3RuYW1lfS0ke2RlcGxveW1lbnR9YF1cbiAgICAgICAgOiBbXSksXG4gICAgICAuLi4oc2hvcnRIb3N0bmFtZSAhPSB1bmRlZmluZWQgJiZcbiAgICAgIGRlcGxveW1lbnQgIT0gdW5kZWZpbmVkICYmXG4gICAgICBpbnN0YW5jZSAhPSB1bmRlZmluZWRcbiAgICAgICAgPyBbYCR7c2hvcnRIb3N0bmFtZX0tJHtkZXBsb3ltZW50fS0ke2luc3RhbmNlfWBdXG4gICAgICAgIDogW10pLFxuICAgICAgLi4uKGZ1bGxIb3N0bmFtZSAhPSB1bmRlZmluZWQgPyBbYCR7ZnVsbEhvc3RuYW1lfWBdIDogW10pLFxuICAgICAgLi4uKGZ1bGxIb3N0bmFtZSAhPSB1bmRlZmluZWQgJiYgaW5zdGFuY2UgIT0gdW5kZWZpbmVkXG4gICAgICAgID8gW2Ake2Z1bGxIb3N0bmFtZX0tJHtpbnN0YW5jZX1gXVxuICAgICAgICA6IFtdKSxcbiAgICAgIC4uLihmdWxsSG9zdG5hbWUgIT0gdW5kZWZpbmVkICYmIGRlcGxveW1lbnQgIT0gdW5kZWZpbmVkXG4gICAgICAgID8gW2Ake2Z1bGxIb3N0bmFtZX0tJHtkZXBsb3ltZW50fWBdXG4gICAgICAgIDogW10pLFxuICAgICAgLi4uKGZ1bGxIb3N0bmFtZSAhPSB1bmRlZmluZWQgJiZcbiAgICAgIGRlcGxveW1lbnQgIT0gdW5kZWZpbmVkICYmXG4gICAgICBpbnN0YW5jZSAhPSB1bmRlZmluZWRcbiAgICAgICAgPyBbYCR7ZnVsbEhvc3RuYW1lfS0ke2RlcGxveW1lbnR9LSR7aW5zdGFuY2V9YF1cbiAgICAgICAgOiBbXSksXG4gICAgICBgbG9jYWxgLFxuICAgICAgLi4uKGluc3RhbmNlICE9IHVuZGVmaW5lZCA/IFtgbG9jYWwtJHtpbnN0YW5jZX1gXSA6IFtdKSxcbiAgICAgIC4uLihkZXBsb3ltZW50ICE9IHVuZGVmaW5lZCA/IFtgbG9jYWwtJHtkZXBsb3ltZW50fWBdIDogW10pLFxuICAgICAgLi4uKGRlcGxveW1lbnQgIT0gdW5kZWZpbmVkICYmIGluc3RhbmNlICE9IHVuZGVmaW5lZFxuICAgICAgICA/IFtgbG9jYWwtJHtkZXBsb3ltZW50fS0ke2luc3RhbmNlfWBdXG4gICAgICAgIDogW10pLFxuICAgICAgJyROT0RFX0NPTkZJRycsXG4gICAgICAnY3VzdG9tLWVudmlyb25tZW50LXZhcmlhYmxlcycsXG4gICAgXTtcblxuICAgIHJldHVybiBjb25maWdMZXZlbHM7XG4gIH07XG5cbiAgLyoqXG4gICAqIHZhbGlkYXRlcyBhIGNvbmZpZyBvYmplY3QgYW5kIHdyaXRlcyBpdCB0byB0aGUgbm9kZS1jb25maWcgZmlsZVxuICAgKiBjb3JyZXNwb25kaW5nIHRvIHRoZSBwYXNzZWQgbGV2ZWxcbiAgICpcbiAgICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCBhbnk+fSBjb25maWdPYmpcbiAgICogQHBhcmFtIHtJQ29uZmlnfSBjb25maWdcbiAgICogQHBhcmFtIHtzdHJpbmd9IGxldmVsIG91dHB1dCBub2RlLWNvbmZpZyBmaWxlIGxldmVsXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmb3JtYXQgdGhlIGZvcm1hdCBvZiB0aGUgb3V0cHV0IGZpbGVcbiAgICovXG4gIHZhbGlkYXRlQW5kV3JpdGVDb25maWcgPSAoXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICBjb25maWdPYmo6IFJlY29yZDxzdHJpbmcsIGFueT4sXG4gICAgY29uZmlnOiBJQ29uZmlnLFxuICAgIGxldmVsOiBzdHJpbmcsXG4gICAgZm9ybWF0OiBzdHJpbmcsXG4gICkgPT4ge1xuICAgIGNvbnN0IGNvbmZMZXZlbHMgPSBDb25maWdWYWxpZGF0b3IuZ2V0Tm9kZUNvbmZpZ0xldmVscyhjb25maWcpLmZpbHRlcihcbiAgICAgIChsKSA9PiBsICE9PSAnY3VzdG9tLWVudmlyb25tZW50LXZhcmlhYmxlcycsXG4gICAgKTtcbiAgICBjb25zdCBsZXZlbEluZGV4ID0gY29uZkxldmVscy5pbmRleE9mKGxldmVsKTtcbiAgICBpZiAobGV2ZWxJbmRleCA9PT0gLTEpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYFRoZSBbJHtsZXZlbH1dIGxldmVsIG5vdCBmb3VuZCBpbiB0aGUgY3VycmVudCBzeXN0ZW0ncyBjb25maWd1cmF0aW9uIGxldmVsc2AsXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IGNvbmZpZ0RpciA9XG4gICAgICBwcm9jZXNzLmVudlsnTk9ERV9DT05GSUdfRElSJ10gIT0gdW5kZWZpbmVkXG4gICAgICAgID8gcHJvY2Vzcy5lbnZbJ05PREVfQ09ORklHX0RJUiddXG4gICAgICAgIDogJy4vY29uZmlnJztcbiAgICBsZXQgb3V0cHV0ID0gJyc7XG4gICAgbGV0IGV4dCA9ICcnO1xuICAgIHN3aXRjaCAoZm9ybWF0KSB7XG4gICAgICBjYXNlICdqc29uJzoge1xuICAgICAgICBvdXRwdXQgPSBKc29uQmlnSW50LnN0cmluZ2lmeShjb25maWdPYmopO1xuICAgICAgICBleHQgPSAnanNvbic7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSAneWFtbCc6IHtcbiAgICAgICAgb3V0cHV0ID0geWFtbC5kdW1wKGNvbmZpZ09iaik7XG4gICAgICAgIGV4dCA9ICd5YW1sJztcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBFcnJvcihgSW52YWxpZCBmb3JtYXQ6ICR7Zm9ybWF0fWApO1xuICAgIH1cblxuICAgIGNvbnN0IG91dHB1dFBhdGggPSBwYXRoLmpvaW4oY29uZmlnRGlyLCBgJHtsZXZlbH0uJHtleHR9YCk7XG4gICAgY29uc3QgYmFja3VwUGF0aCA9IHBhdGguam9pbihjb25maWdEaXIsIGAke2xldmVsfS1iYWNrdXAuJHtleHR9YCk7XG4gICAgY29uc3QgY29uZkZpbGVFeGlzdHMgPSBmcy5leGlzdHNTeW5jKG91dHB1dFBhdGgpO1xuICAgIGlmIChjb25mRmlsZUV4aXN0cykge1xuICAgICAgZnMucmVuYW1lU3luYyhvdXRwdXRQYXRoLCBiYWNrdXBQYXRoKTtcbiAgICB9XG4gICAgZnMud3JpdGVGaWxlU3luYyhvdXRwdXRQYXRoLCBvdXRwdXQpO1xuXG4gICAgY29uc3QgdXBkYXRlZENvbmZPYmogPSBjb25maWcudXRpbC5sb2FkRmlsZUNvbmZpZ3MoKTtcblxuICAgIHRyeSB7XG4gICAgICB0aGlzLnZhbGlkYXRlQ29uZmlnKHVwZGF0ZWRDb25mT2JqKTtcbiAgICAgIGZzLnVubGlua1N5bmMoYmFja3VwUGF0aCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGZzLnVubGlua1N5bmMob3V0cHV0UGF0aCk7XG4gICAgICBpZiAoY29uZkZpbGVFeGlzdHMpIHtcbiAgICAgICAgZnMucmVuYW1lU3luYyhiYWNrdXBQYXRoLCBvdXRwdXRQYXRoKTtcbiAgICAgIH1cbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgfTtcbn1cbiJdfQ==
|
|
@@ -21,15 +21,19 @@ export declare const propertyValidators: {
|
|
|
21
21
|
};
|
|
22
22
|
string: {
|
|
23
23
|
default: (field: types.StringField, _config: ConfigValidator) => void;
|
|
24
|
+
secret: (field: types.StringField, _config: ConfigValidator) => void;
|
|
24
25
|
};
|
|
25
26
|
boolean: {
|
|
26
27
|
default: (field: types.BooleanField, _config: ConfigValidator) => void;
|
|
28
|
+
secret: (field: types.BooleanField, _config: ConfigValidator) => void;
|
|
27
29
|
};
|
|
28
30
|
number: {
|
|
29
31
|
default: (field: types.NumberField, _config: ConfigValidator) => void;
|
|
32
|
+
secret: (field: types.NumberField, _config: ConfigValidator) => void;
|
|
30
33
|
};
|
|
31
34
|
bigint: {
|
|
32
35
|
default: (field: types.BigIntField, _config: ConfigValidator) => void;
|
|
36
|
+
secret: (field: types.BigIntField, _config: ConfigValidator) => void;
|
|
33
37
|
};
|
|
34
38
|
};
|
|
35
39
|
export declare const supportedTypes: string[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fieldProperties.d.ts","sourceRoot":"","sources":["../../../lib/schema/Validators/fieldProperties.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,KAAK,KAAK,MAAM,iBAAiB,CAAC;AA6DzC,eAAO,MAAM,kBAAkB;;sBAGb,KAAK,CAAC,WAAW,WAAW,eAAe;uBAY1C,KAAK,CAAC,WAAW,WAAW,eAAe;6BAMrC,KAAK,CAAC,WAAW,WAAW,eAAe;;;6BAU3C,KAAK,CAAC,cAAc,UAAU,eAAe;;;0BAwEhD,KAAK,CAAC,WAAW,WAAW,eAAe;;;uBAc9C,KAAK,CAAC,UAAU,WAAW,eAAe;yBAQxC,KAAK,CAAC,UAAU,WAAW,eAAe;;;0BAgBzC,KAAK,CAAC,WAAW;;;yBAelB,KAAK,CAAC,WAAW,WAAW,eAAe;;;
|
|
1
|
+
{"version":3,"file":"fieldProperties.d.ts","sourceRoot":"","sources":["../../../lib/schema/Validators/fieldProperties.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,KAAK,KAAK,MAAM,iBAAiB,CAAC;AA6DzC,eAAO,MAAM,kBAAkB;;sBAGb,KAAK,CAAC,WAAW,WAAW,eAAe;uBAY1C,KAAK,CAAC,WAAW,WAAW,eAAe;6BAMrC,KAAK,CAAC,WAAW,WAAW,eAAe;;;6BAU3C,KAAK,CAAC,cAAc,UAAU,eAAe;;;0BAwEhD,KAAK,CAAC,WAAW,WAAW,eAAe;;;uBAc9C,KAAK,CAAC,UAAU,WAAW,eAAe;yBAQxC,KAAK,CAAC,UAAU,WAAW,eAAe;;;0BAgBzC,KAAK,CAAC,WAAW;;;yBAelB,KAAK,CAAC,WAAW,WAAW,eAAe;wBAW5C,KAAK,CAAC,WAAW,WAAW,eAAe;;;yBAQ1C,KAAK,CAAC,YAAY,WAAW,eAAe;wBAW7C,KAAK,CAAC,YAAY,WAAW,eAAe;;;yBAQ3C,KAAK,CAAC,WAAW,WAAW,eAAe;wBAW5C,KAAK,CAAC,WAAW,WAAW,eAAe;;;yBAQ1C,KAAK,CAAC,WAAW,WAAW,eAAe;wBAgB5C,KAAK,CAAC,WAAW,WAAW,eAAe;;CAM9D,CAAC;AAEF,eAAO,MAAM,cAAc,UAE1B,CAAC"}
|
|
@@ -160,6 +160,12 @@ export const propertyValidators = {
|
|
|
160
160
|
throw new Error(`default value=[${field.default}] doesn't match field type=[${field.type}]`);
|
|
161
161
|
}
|
|
162
162
|
},
|
|
163
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
164
|
+
secret: (field, _config) => {
|
|
165
|
+
if (Object.hasOwn(field, 'secret') && typeof field.secret !== 'boolean') {
|
|
166
|
+
throw new Error('"secret" must be boolean');
|
|
167
|
+
}
|
|
168
|
+
},
|
|
163
169
|
},
|
|
164
170
|
boolean: {
|
|
165
171
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
@@ -169,6 +175,12 @@ export const propertyValidators = {
|
|
|
169
175
|
throw new Error(`default value=[${field.default}] doesn't match field type=[${field.type}]`);
|
|
170
176
|
}
|
|
171
177
|
},
|
|
178
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
179
|
+
secret: (field, _config) => {
|
|
180
|
+
if (Object.hasOwn(field, 'secret') && typeof field.secret !== 'boolean') {
|
|
181
|
+
throw new Error('"secret" must be boolean');
|
|
182
|
+
}
|
|
183
|
+
},
|
|
172
184
|
},
|
|
173
185
|
number: {
|
|
174
186
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
@@ -178,6 +190,12 @@ export const propertyValidators = {
|
|
|
178
190
|
throw new Error(`default value=[${field.default}] doesn't match field type=[${field.type}]`);
|
|
179
191
|
}
|
|
180
192
|
},
|
|
193
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
194
|
+
secret: (field, _config) => {
|
|
195
|
+
if (Object.hasOwn(field, 'secret') && typeof field.secret !== 'boolean') {
|
|
196
|
+
throw new Error('"secret" must be boolean');
|
|
197
|
+
}
|
|
198
|
+
},
|
|
181
199
|
},
|
|
182
200
|
bigint: {
|
|
183
201
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
@@ -190,6 +208,12 @@ export const propertyValidators = {
|
|
|
190
208
|
throw new Error(`default value=[${field.default}] doesn't match field type=[${field.type}]`);
|
|
191
209
|
}
|
|
192
210
|
},
|
|
211
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
212
|
+
secret: (field, _config) => {
|
|
213
|
+
if (Object.hasOwn(field, 'secret') && typeof field.secret !== 'boolean') {
|
|
214
|
+
throw new Error('"secret" must be boolean');
|
|
215
|
+
}
|
|
216
|
+
},
|
|
193
217
|
},
|
|
194
218
|
};
|
|
195
219
|
export const supportedTypes = Object.keys(propertyValidators).filter((key) => key !== 'all' && key !== 'primitive');
|
|
@@ -298,4 +322,4 @@ const fieldValidations = {
|
|
|
298
322
|
},
|
|
299
323
|
},
|
|
300
324
|
};
|
|
301
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmllbGRQcm9wZXJ0aWVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vbGliL3NjaGVtYS9WYWxpZGF0b3JzL2ZpZWxkUHJvcGVydGllcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFJQSw4RkFBOEY7QUFDOUYsTUFBTSx1QkFBdUIsR0FBRyxDQUM5QixLQUFzQixFQUN0QixLQUF3QixFQUN4QixFQUFFO0lBQ0YsSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQzVCLElBQUksS0FBSyxJQUFJLElBQUksSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3ZFLE1BQU0sSUFBSSxLQUFLLENBQUMsOEJBQThCLENBQUMsQ0FBQztRQUNsRCxDQUFDO1FBQ0QsS0FBSyxNQUFNLENBQUMsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDbkMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUUsS0FBMkIsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztnQkFDN0QsTUFBTSxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsa0NBQWtDLENBQUMsQ0FBQztZQUMzRCxDQUFDO1lBQ0QsdUJBQXVCLENBQ3BCLEtBQXlDLENBQUMsQ0FBQyxDQUFDLEVBQzVDLEtBQTJCLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUN6QyxDQUFDO1FBQ0osQ0FBQztRQUNELE9BQU87SUFDVCxDQUFDO0lBRUQsSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLE9BQU8sRUFBRSxDQUFDO1FBQzNCLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDMUIsTUFBTSxJQUFJLEtBQUssQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDO1FBQ2pELENBQUM7UUFDRCxLQUFLLE1B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RUFBRSxDQUFDO2dCQUN0QyxNQUFNLElBQUksS0FBSyxDQUFDLDZDQUE2QyxDQUFDLENBQUM7WUFDakUsQ0FBQztRQUNILENBQUM7UUFDRCxHQUFHLEVBQUUsQ0FBQyxVQUE0QixFQUFFLEVBQUU7WUFDcEMsSUFBSSxDQUFDLENBQUMsS0FBSyxJQUFJLFVBQVUsQ0FBQyxFQUFFLENBQUM7Z0JBQzNCLE9BQU87WUFDVCxDQUFDO1lBQ0QsSUFBSSxPQUFPLFVBQVUsQ0FBQyxHQUFHLEtBQUssUUFBUSxFQUFFLENBQUM7Z0JBQ3ZDLE1BQU0sSUFBSSxLQUFLLENBQUMsOENBQThDLENBQUMsQ0FBQztZQUNsRSxDQUFDO1FBQ0gsQ0FBQztRQUNELEVBQUUsRUFBRSxDQUFDLFVBQTRCLEVBQUUsRUFBRTtZQUNuQyxJQUFJLENBQUMsQ0FBQyxJQUFJLElBQUksVUFBVSxDQUFDLEVBQUUsQ0FBQztnQkFDMUIsT0FBTztZQUNULENBQUM7WUFDRCxJQUFJLE9BQU8sVUFBVSxDQUFDLEVBQUUsS0FBSyxRQUFRLEVBQUUsQ0FBQztnQkFDdEMsTUFBTSxJQUFJLEtBQUssQ0FBQyw2Q0FBNkMsQ0FBQyxDQUFDO1lBQ2pFLENBQUM7UUFDSCxDQUFDO1FBQ0QsR0FBRyxFQUFFLENBQUMsVUFBNEIsRUFBRSxFQUFFO1lBQ3BDLElBQUksQ0FBQyxDQUFDLEtBQUssSUFBSSxVQUFVLENBQUMsRUFBRSxDQUFDO2dCQUMzQixPQUFPO1lBQ1QsQ0FBQztZQUNELElBQUksT0FBTyxVQUFVLENBQUMsR0FBRyxLQUFLLFFBQVEsRUFBRSxDQUFDO2dCQUN2QyxNQUFNLElBQUksS0FBSyxDQUFDLDhDQUE4QyxDQUFDLENBQUM7WUFDbEUsQ0FBQztRQUNILENBQUM7S0FDRjtDQUNGLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb25maWdWYWxpZGF0b3IgfSBmcm9tICcuLi8uLi9jb25maWcnO1xuaW1wb3J0ICogYXMgdHlwZXMgZnJvbSAnLi4vdHlwZXMvZmllbGRzJztcbmltcG9ydCB7IFZBbGwsIFZOdW1lcmljLCBWU3RyaW5nIH0gZnJvbSAnLi4vdHlwZXMvdmFsaWRhdGlvbnMnO1xuXG4vLyBFbnN1cmVzIGEgcHJvdmlkZWQgdmFsdWUgc3RydWN0dXJhbGx5IG1hdGNoZXMgYSBmaWVsZCBzY2hlbWEgKG5vbi10cmF2ZXJzYWwgb2Ygc2NoZW1hIHRyZWUpXG5jb25zdCBhc3NlcnRTaGFwZU1hdGNoZXNGaWVsZCA9IChcbiAgdmFsdWU6IHR5cGVzLlZhbHVlVHlwZSxcbiAgZmllbGQ6IHR5cGVzLkNvbmZpZ0ZpZWxkLFxuKSA9PiB7XG4gIGlmIChmaWVsZC50eXBlID09PSAnb2JqZWN0Jykge1xuICAgIGlmICh2YWx1ZSA9PSBudWxsIHx8IHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcgfHwgQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcigndmFsdWUgbXVzdCBiZSBvZiBvYmplY3QgdHlwZScpO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IGsgb2YgT2JqZWN0LmtleXModmFsdWUpKSB7XG4gICAgICBpZiAoIU9iamVjdC5oYXNPd24oKGZpZWxkIGFzIHR5cGVzLk9iamVjdEZpZWxkKS5jaGlsZHJlbiwgaykpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBcIiR7a31cIiBrZXkgaXMgbm90IGZvdW5kIGluIHRoZSBzY2hlbWFgKTtcbiAgICAgIH1cbiAgICAgIGFzc2VydFNoYXBlTWF0Y2hlc0ZpZWxkKFxuICAgICAgICAodmFsdWUgYXMgUmVjb3JkPHN0cmluZywgdHlwZXMuVmFsdWVUeXBlPilba10sXG4gICAgICAgIChmaWVsZCBhcyB0eXBlcy5PYmplY3RGaWVsZCkuY2hpbGRyZW5ba10sXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoZmllbGQudHlwZSA9PT0gJ2FycmF5Jykge1xuICAgIGlmICghQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcigndmFsdWUgbXVzdCBiZSBvZiBhcnJheSB0eXBlJyk7XG4gICAgfVxuICAgIGZvciAoY29uc3QgaXRlbSBvZiB2YWx1ZSkge1xuICAgICAgYXNzZXJ0U2hhcGVNYXRjaGVzRmllbGQoaXRlbSwgKGZpZWxkIGFzIHR5cGVzLkFycmF5RmllbGQpLml0ZW1zKTtcbiAgICB9XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKHZhbHVlID09IHVuZGVmaW5lZCkgcmV0dXJuO1xuICBzd2l0Y2ggKGZpZWxkLnR5cGUpIHtcbiAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ3N0cmluZycpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcigndmFsdWUgbXVzdCBiZSBvZiBzdHJpbmcgdHlwZScpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnbnVtYmVyJzpcbiAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICdudW1iZXInKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3ZhbHVlIG11c3QgYmUgb2YgbnVtYmVyIHR5cGUnKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2Jvb2xlYW4nOlxuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ2Jvb2xlYW4nKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3ZhbHVlIG11c3QgYmUgb2YgYm9vbGVhbiB0eXBlJyk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdiaWdpbnQnOlxuICAgICAgaWYgKFxuICAgICAgICAhKFxuICAgICAgICAgIHR5cGVvZiB2YWx1ZSA9PT0gJ2JpZ2ludCcgfHxcbiAgICAgICAgICAoKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgfHwgdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykgJiZcbiAgICAgICAgICAgIEJpZ0ludCh2YWx1ZSkpXG4gICAgICAgIClcbiAgICAgIClcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd2YWx1ZSBtdXN0IGJlIG9mIGJpZ2ludCB0eXBlJyk7XG4gICAgICBicmVhaztcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IHByb3BlcnR5VmFsaWRhdG9ycyA9IHtcbiAgYWxsOiB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICAgIHR5cGU6IChmaWVsZDogdHlwZXMuQ29uZmlnRmllbGQsIF9jb25maWc6IENvbmZpZ1ZhbGlkYXRvcikgPT4ge1xuICAgICAgaWYgKCFPYmplY3QuaGFzT3duKGZpZWxkLCAndHlwZScpIHx8IHR5cGVvZiBmaWVsZC50eXBlICE9PSAnc3RyaW5nJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYGV2ZXJ5IHNjaGVtYSBmaWVsZCBtdXN0IGhhdmUgYSBcInR5cGVcIiBwcm9wZXJ0eSBvZiB0eXBlIFwic3RyaW5nXCJgLFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBpZiAoIXN1cHBvcnRlZFR5cGVzLmluY2x1ZGVzKGZpZWxkLnR5cGUpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgdW5zdXBwb3J0ZWQgZmllbGQgdHlwZSBcIiR7ZmllbGQudHlwZX1cImApO1xuICAgICAgfVxuICAgIH0sXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICAgIGxhYmVsOiAoZmllbGQ6IHR5cGVzLkNvbmZpZ0ZpZWxkLCBfY29uZmlnOiBDb25maWdWYWxpZGF0b3IpID0+IHtcbiAgICAgIGlmIChPYmplY3QuaGFzT3duKGZpZWxkLCAnbGFiZWwnKSAmJiB0eXBlb2YgZmllbGQubGFiZWwgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgXCJsYWJlbFwiIHByb3BlcnR5IHNob3VsZCBiZSBhIFwic3RyaW5nXCJgKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgICBkZXNjcmlwdGlvbjogKGZpZWxkOiB0eXBlcy5Db25maWdGaWVsZCwgX2NvbmZpZzogQ29uZmlnVmFsaWRhdG9yKSA9PiB7XG4gICAgICBpZiAoXG4gICAgICAgIE9iamVjdC5oYXNPd24oZmllbGQsICdkZXNjcmlwdGlvbicpICYmXG4gICAgICAgIHR5cGVvZiBmaWVsZC5kZXNjcmlwdGlvbiAhPT0gJ3N0cmluZydcbiAgICAgICkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFwiZGVzY3JpcHRpb25cIiBwcm9wZXJ0eSBzaG91bGQgYmUgYSBcInN0cmluZ1wiYCk7XG4gICAgICB9XG4gICAgfSxcbiAgfSxcbiAgcHJpbWl0aXZlOiB7XG4gICAgdmFsaWRhdGlvbnM6IChmaWVsZDogdHlwZXMuUHJpbWl0aXZlRmllbGQsIGNvbmZpZzogQ29uZmlnVmFsaWRhdG9yKSA9PiB7XG4gICAgICBpZiAoIU9iamVjdC5oYXNPd24oZmllbGQsICd2YWxpZGF0aW9ucycpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGZpZWxkLnZhbGlkYXRpb25zKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgJ1widmFsaWRhdGlvbnNcIiBwcm9wZXJ0eSBtdXN0IGJlIGFuIGFycmF5IG9mIHZhbGlkYXRpb24gZGVzY3JpcHRpb25zJyxcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgZm9yIChjb25zdCB2YWxpZGF0aW9uIG9mIGZpZWxkLnZhbGlkYXRpb25zKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBPYmplY3QuaGFzT3duKHZhbGlkYXRpb24sICdlcnJvcicpICYmXG4gICAgICAgICAgdHlwZW9mIHZhbGlkYXRpb24uZXJyb3IgIT09ICdzdHJpbmcnXG4gICAgICAgICkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICdcImVycm9yXCIgcHJvcGVydHkgb2YgYSB2YWxpZGF0aW9uIGRlc2NyaXB0aW9uIG11c3QgYmUgYSBzdHJpbmcnLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoT2JqZWN0Lmhhc093bih2YWxpZGF0aW9uLCAnd2hlbicpICYmIHZhbGlkYXRpb24ud2hlbiAhPSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAhT2JqZWN0Lmhhc093bih2YWxpZGF0aW9uLndoZW4sICdwYXRoJykgfHxcbiAgICAgICAgICAgIHR5cGVvZiB2YWxpZGF0aW9uLndoZW4ucGF0aCAhPT0gJ3N0cmluZydcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgYFwid2hlblwiIHByb3BlcnR5IG9mIGEgdmFsaWRhdGlvbiBkZXNjcmlwdGlvbiBtdXN0IGhhdmUgYSBcInBhdGhcIiBwcm9wZXJ0eSBvZiB0eXBlIFwic3RyaW5nXCJgLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBjb25maWcuZ2V0U2NoZW1hRmllbGQodmFsaWRhdGlvbi53aGVuLnBhdGguc3BsaXQoJy4nKSkgPT0gdW5kZWZpbmVkXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgIGBcIndoZW5cIiBwcm9wZXJ0eSBvZiBhIHZhbGlkYXRpb24gZGVzY3JpcHRpb24gaGFzIGEgbm9uLWV4aXN0ZW50IHBhdGg9WyR7dmFsaWRhdGlvbi53aGVuLnBhdGh9XWAsXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICghT2JqZWN0Lmhhc093bih2YWxpZGF0aW9uLndoZW4sICd2YWx1ZScpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgIGBcIndoZW5cIiBwcm9wZXJ0eSBvZiBhIHZhbGlkYXRpb24gZGVzY3JpcHRpb24gbXVzdCBoYXZlIGEgXCJ2YWx1ZVwiIHByb3BlcnR5YCxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdmFsaWRhdGlvblByb3BlcnRpZXMgPSBPYmplY3Qua2V5cyh2YWxpZGF0aW9uKS5maWx0ZXIoXG4gICAgICAgICAgKGtleSkgPT4ga2V5ICE9PSAnd2hlbicgJiYga2V5ICE9PSAnZXJyb3InLFxuICAgICAgICApO1xuICAgICAgICBpZiAodmFsaWRhdGlvblByb3BlcnRpZXMubGVuZ3RoICE9PSAxKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd2YWxpZGF0aW9uIGRlc2NyaXB0aW9uIGZvcm1hdCBpcyB3cm9uZycpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdmFsaWRhdGlvbk5hbWUgPSB2YWxpZGF0aW9uUHJvcGVydGllc1swXTtcbiAgICAgICAgY29uc3QgcHJpbWl0aXZlVmFsaWRhdG9yID0gZmllbGRWYWxpZGF0aW9ucy5wcmltaXRpdmVbdmFsaWRhdGlvbk5hbWVdO1xuICAgICAgICBjb25zdCB0eXBlVmFsaWRhdG9yID0gZmllbGRWYWxpZGF0aW9uc1tmaWVsZC50eXBlXVt2YWxpZGF0aW9uTmFtZV07XG4gICAgICAgIGlmIChwcmltaXRpdmVWYWxpZGF0b3IgPT0gdW5kZWZpbmVkICYmIHR5cGVWYWxpZGF0b3IgPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgYHZhbGlkYXRpb24gZGVzY3JpcHRpb24gaGFzIGFuIHVua25vd24gdmFsaWRhdG9yIFwiJHt2YWxpZGF0aW9uTmFtZX1cImAsXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwcmltaXRpdmVWYWxpZGF0b3IgIT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgcHJpbWl0aXZlVmFsaWRhdG9yKHZhbGlkYXRpb24pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHR5cGVWYWxpZGF0b3IodmFsaWRhdGlvbik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICB9LFxuICBvYmplY3Q6IHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gICAgY2hpbGRyZW46IChmaWVsZDogdHlwZXMuT2JqZWN0RmllbGQsIF9jb25maWc6IENvbmZpZ1ZhbGlkYXRvcikgPT4ge1xuICAgICAgaWYgKFxuICAgICAgICAhT2JqZWN0Lmhhc093bihmaWVsZCwgJ2NoaWxkcmVuJykgfHxcbiAgICAgICAgdHlwZW9mIGZpZWxkLmNoaWxkcmVuICE9PSAnb2JqZWN0J1xuICAgICAgKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgb2JqZWN0IGZpZWxkIHR5cGUgbXVzdCBoYXZlIGEgXCJjaGlsZHJlblwiIHByb3BlcnR5IG9mIHR5cGUgXCJvYmplY3RcImAsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfSxcbiAgfSxcbiAgYXJyYXk6IHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gICAgaXRlbXM6IChmaWVsZDogdHlwZXMuQXJyYXlGaWVsZCwgX2NvbmZpZzogQ29uZmlnVmFsaWRhdG9yKSA9PiB7XG4gICAgICBpZiAoIU9iamVjdC5oYXNPd24oZmllbGQsICdpdGVtcycpIHx8IHR5cGVvZiBmaWVsZC5pdGVtcyAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBhcnJheSBmaWVsZCB0eXBlIG11c3QgaGF2ZSBhIFwiaXRlbXNcIiBwcm9wZXJ0eSBvZiB0eXBlIFwib2JqZWN0XCJgLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0sXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICAgIGRlZmF1bHQ6IChmaWVsZDogdHlwZXMuQXJyYXlGaWVsZCwgX2NvbmZpZzogQ29uZmlnVmFsaWRhdG9yKSA9PiB7XG4gICAgICBpZiAoIU9iamVjdC5oYXNPd24oZmllbGQsICdkZWZhdWx0JykpIHJldHVybjtcbiAgICAgIGlmICghQXJyYXkuaXNBcnJheShmaWVsZC5kZWZhdWx0KSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYGRlZmF1bHQgdmFsdWU9WyR7XG4gICAgICAgICAgICBmaWVsZC5kZWZhdWx0XG4gICAgICAgICAgfV0gZG9lc24ndCBtYXRjaCBmaWVsZCB0eXBlPVske2ZpZWxkLnR5cGV9XWAsXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIGZvciAoY29uc3QgZWxlbSBvZiBmaWVsZC5kZWZhdWx0KSB7XG4gICAgICAgIGFzc2VydFNoYXBlTWF0Y2hlc0ZpZWxkKGVsZW0sIGZpZWxkLml0ZW1zKTtcbiAgICAgIH1cbiAgICB9LFxuICB9LFxuICB1bmlvbjoge1xuICAgIGNoaWxkcmVuOiAoZmllbGQ6IHR5cGVzLkNvbmZpZ0ZpZWxkKSA9PiB7XG4gICAgICBpZiAoISgnY2hpbGRyZW4nIGluIGZpZWxkKSB8fCAhQXJyYXkuaXNBcnJheShmaWVsZC5jaGlsZHJlbikpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGB1bmlvbiBmaWVsZCBtdXN0IGhhdmUgYSBcImNoaWxkcmVuXCIgcHJvcGVydHkgb2YgdHlwZSBcImFycmF5XCJgLFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgaWYgKGZpZWxkLmNoaWxkcmVuLmxlbmd0aCA8IDIpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGB1bmlvbiBmaWVsZCBcImNoaWxkcmVuXCIgbXVzdCBoYXZlIGF0IGxlYXN0IDIgY2hpbGQgbm9kZXNgLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0sXG4gIH0sXG4gIHN0cmluZzoge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgICBkZWZhdWx0OiAoZmllbGQ6IHR5cGVzLlN0cmluZ0ZpZWxkLCBfY29uZmlnOiBDb25maWdWYWxpZGF0b3IpID0+IHtcbiAgICAgIGlmIChcbiAgICAgICAgT2JqZWN0Lmhhc093bihmaWVsZCwgJ2RlZmF1bHQnKSAmJlxuICAgICAgICB0eXBlb2YgZmllbGQuZGVmYXVsdCAhPT0gJ3N0cmluZydcbiAgICAgICkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYGRlZmF1bHQgdmFsdWU9WyR7ZmllbGQuZGVmYXVsdH1dIGRvZXNuJ3QgbWF0Y2ggZmllbGQgdHlwZT1bJHtmaWVsZC50eXBlfV1gLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0sXG4gIH0sXG4gIGJvb2xlYW46IHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gICAgZGVmYXVsdDogKGZpZWxkOiB0eXBlcy5Cb29sZWFuRmllbGQsIF9jb25maWc6IENvbmZpZ1ZhbGlkYXRvcikgPT4ge1xuICAgICAgaWYgKFxuICAgICAgICBPYmplY3QuaGFzT3duKGZpZWxkLCAnZGVmYXVsdCcpICYmXG4gICAgICAgIHR5cGVvZiBmaWVsZC5kZWZhdWx0ICE9PSAnYm9vbGVhbidcbiAgICAgICkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYGRlZmF1bHQgdmFsdWU9WyR7ZmllbGQuZGVmYXVsdH1dIGRvZXNuJ3QgbWF0Y2ggZmllbGQgdHlwZT1bJHtmaWVsZC50eXBlfV1gLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0sXG4gIH0sXG4gIG51bWJlcjoge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgICBkZWZhdWx0OiAoZmllbGQ6IHR5cGVzLk51bWJlckZpZWxkLCBfY29uZmlnOiBDb25maWdWYWxpZGF0b3IpID0+IHtcbiAgICAgIGlmIChcbiAgICAgICAgT2JqZWN0Lmhhc093bihmaWVsZCwgJ2RlZmF1bHQnKSAmJlxuICAgICAgICB0eXBlb2YgZmllbGQuZGVmYXVsdCAhPT0gJ251bWJlcidcbiAgICAgICkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYGRlZmF1bHQgdmFsdWU9WyR7ZmllbGQuZGVmYXVsdH1dIGRvZXNuJ3QgbWF0Y2ggZmllbGQgdHlwZT1bJHtmaWVsZC50eXBlfV1gLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0sXG4gIH0sXG4gIGJpZ2ludDoge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgICBkZWZhdWx0OiAoZmllbGQ6IHR5cGVzLkJpZ0ludEZpZWxkLCBfY29uZmlnOiBDb25maWdWYWxpZGF0b3IpID0+IHtcbiAgICAgIGlmIChcbiAgICAgICAgT2JqZWN0Lmhhc093bihmaWVsZCwgJ2RlZmF1bHQnKSAmJlxuICAgICAgICAhKFxuICAgICAgICAgIHR5cGVvZiBmaWVsZC5kZWZhdWx0ID09PSAnYmlnaW50JyB8fFxuICAgICAgICAgICgodHlwZW9mIGZpZWxkLmRlZmF1bHQgPT09ICdudW1iZXInIHx8XG4gICAgICAgICAgICB0eXBlb2YgZmllbGQuZGVmYXVsdCA9PT0gJ3N0cmluZycpICYmXG4gICAgICAgICAgICBCaWdJbnQoZmllbGQuZGVmYXVsdCkpXG4gICAgICAgIClcbiAgICAgICkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYGRlZmF1bHQgdmFsdWU9WyR7ZmllbGQuZGVmYXVsdH1dIGRvZXNuJ3QgbWF0Y2ggZmllbGQgdHlwZT1bJHtmaWVsZC50eXBlfV1gLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0sXG4gIH0sXG59O1xuXG5leHBvcnQgY29uc3Qgc3VwcG9ydGVkVHlwZXMgPSBPYmplY3Qua2V5cyhwcm9wZXJ0eVZhbGlkYXRvcnMpLmZpbHRlcihcbiAgKGtleSkgPT4ga2V5ICE9PSAnYWxsJyAmJiBrZXkgIT09ICdwcmltaXRpdmUnLFxuKTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbmNvbnN0IGZpZWxkVmFsaWRhdGlvbnM6IFJlY29yZDxzdHJpbmcsIFJlY29yZDxzdHJpbmcsIGFueT4+ID0ge1xuICBwcmltaXRpdmU6IHtcbiAgICByZXF1aXJlZDogKHZhbGlkYXRpb246IFZBbGwpID0+IHtcbiAgICAgIGlmICghKCdyZXF1aXJlZCcgaW4gdmFsaWRhdGlvbikpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIHZhbGlkYXRpb24ucmVxdWlyZWQgIT09ICdib29sZWFuJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFwicmVxdWlyZWRcIiB2YWxpZGF0aW9uIHByb3BlcnR5IHNob3VsZCBiZSBhIGJvb2xlYW5gKTtcbiAgICAgIH1cbiAgICB9LFxuICB9LFxuICBzdHJpbmc6IHtcbiAgICByZWdleDogKHZhbGlkYXRpb246IFZTdHJpbmcpID0+IHtcbiAgICAgIGlmICghKCdyZWdleCcgaW4gdmFsaWRhdGlvbikpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKHR5cGVvZiB2YWxpZGF0aW9uLnJlZ2V4ICE9PSAnc3RyaW5nJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFwicmVnZXhcIiB2YWxpZGF0aW9uIHByb3BlcnR5IHNob3VsZCBiZSBhIHN0cmluZ2ApO1xuICAgICAgfVxuICAgIH0sXG4gICAgY2hvaWNlczogKHZhbGlkYXRpb246IFZTdHJpbmcpID0+IHtcbiAgICAgIGlmICghKCdjaG9pY2VzJyBpbiB2YWxpZGF0aW9uKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkodmFsaWRhdGlvbi5jaG9pY2VzKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYFwiY2hvaWNlc1wiIHZhbGlkYXRpb24gcHJvcGVydHkgc2hvdWxkIGJlIGFuIFwiYXJyYXlcIiBvZiBzdHJpbmdzYCxcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgZm9yIChjb25zdCBjaG9pY2Ugb2YgdmFsaWRhdGlvbi5jaG9pY2VzKSB7XG4gICAgICAgIGlmICh0eXBlb2YgY2hvaWNlICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgIGBcImNob2ljZXNcIiB2YWxpZGF0aW9uIHByb3BlcnR5IHNob3VsZCBiZSBhbiBhcnJheSBvZiBcInN0cmluZ3NcImAsXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gIH0sXG4gIGJvb2xlYW46IHt9LFxuICBudW1iZXI6IHtcbiAgICBndDogKHZhbGlkYXRpb246IFZOdW1lcmljPG51bWJlcj4pID0+IHtcbiAgICAgIGlmICghKCdndCcgaW4gdmFsaWRhdGlvbikpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKHR5cGVvZiB2YWxpZGF0aW9uLmd0ICE9PSAnbnVtYmVyJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFwiZ3RcIiB2YWxpZGF0aW9uIHByb3BlcnR5IHNob3VsZCBiZSBhIG51bWJlcmApO1xuICAgICAgfVxuICAgIH0sXG4gICAgZ3RlOiAodmFsaWRhdGlvbjogVk51bWVyaWM8bnVtYmVyPikgPT4ge1xuICAgICAgaWYgKCEoJ2d0ZScgaW4gdmFsaWRhdGlvbikpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKHR5cGVvZiB2YWxpZGF0aW9uLmd0ZSAhPT0gJ251bWJlcicpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBcImd0ZVwiIHZhbGlkYXRpb24gcHJvcGVydHkgc2hvdWxkIGJlIGEgbnVtYmVyYCk7XG4gICAgICB9XG4gICAgfSxcbiAgICBsdDogKHZhbGlkYXRpb246IFZOdW1lcmljPG51bWJlcj4pID0+IHtcbiAgICAgIGlmICghKCdsdCcgaW4gdmFsaWRhdGlvbikpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIHZhbGlkYXRpb24ubHQgIT09ICdudW1iZXInKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgXCJsdFwiIHZhbGlkYXRpb24gcHJvcGVydHkgc2hvdWxkIGJlIGEgbnVtYmVyYCk7XG4gICAgICB9XG4gICAgfSxcbiAgICBsdGU6ICh2YWxpZGF0aW9uOiBWTnVtZXJpYzxudW1iZXI+KSA9PiB7XG4gICAgICBpZiAoISgnbHRlJyBpbiB2YWxpZGF0aW9uKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgdmFsaWRhdGlvbi5sdGUgIT09ICdudW1iZXInKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgXCJsdGVcIiB2YWxpZGF0aW9uIHByb3BlcnR5IHNob3VsZCBiZSBhIG51bWJlcmApO1xuICAgICAgfVxuICAgIH0sXG4gIH0sXG4gIGJpZ2ludDoge1xuICAgIGd0OiAodmFsaWRhdGlvbjogVk51bWVyaWM8YmlnaW50PikgPT4ge1xuICAgICAgaWYgKCEoJ2d0JyBpbiB2YWxpZGF0aW9uKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgdmFsaWRhdGlvbi5ndCAhPT0gJ2JpZ2ludCcpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBcImd0XCIgdmFsaWRhdGlvbiBwcm9wZXJ0eSBzaG91bGQgYmUgYSBiaWdpbnRgKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGd0ZTogKHZhbGlkYXRpb246IFZOdW1lcmljPGJpZ2ludD4pID0+IHtcbiAgICAgIGlmICghKCdndGUnIGluIHZhbGlkYXRpb24pKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICh0eXBlb2YgdmFsaWRhdGlvbi5ndGUgIT09ICdiaWdpbnQnKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgXCJndGVcIiB2YWxpZGF0aW9uIHByb3BlcnR5IHNob3VsZCBiZSBhIGJpZ2ludGApO1xuICAgICAgfVxuICAgIH0sXG4gICAgbHQ6ICh2YWxpZGF0aW9uOiBWTnVtZXJpYzxiaWdpbnQ+KSA9PiB7XG4gICAgICBpZiAoISgnbHQnIGluIHZhbGlkYXRpb24pKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICh0eXBlb2YgdmFsaWRhdGlvbi5sdCAhPT0gJ2JpZ2ludCcpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBcImx0XCIgdmFsaWRhdGlvbiBwcm9wZXJ0eSBzaG91bGQgYmUgYSBiaWdpbnRgKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGx0ZTogKHZhbGlkYXRpb246IFZOdW1lcmljPGJpZ2ludD4pID0+IHtcbiAgICAgIGlmICghKCdsdGUnIGluIHZhbGlkYXRpb24pKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICh0eXBlb2YgdmFsaWRhdGlvbi5sdGUgIT09ICdiaWdpbnQnKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgXCJsdGVcIiB2YWxpZGF0aW9uIHByb3BlcnR5IHNob3VsZCBiZSBhIGJpZ2ludGApO1xuICAgICAgfVxuICAgIH0sXG4gIH0sXG59O1xuIl19
|
|
325
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmllbGRQcm9wZXJ0aWVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vbGliL3NjaGVtYS9WYWxpZGF0b3JzL2ZpZWxkUHJvcGVydGllcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFJQSw4RkFBOEY7QUFDOUYsTUFBTSx1QkFBdUIsR0FBRyxDQUM5QixLQUFzQixFQUN0QixLQUF3QixFQUN4QixFQUFFO0lBQ0YsSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQzVCLElBQUksS0FBSyxJQUFJLElBQUksSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3ZFLE1BQU0sSUFBSSxLQUFLLENBQUMsOEJBQThCLENBQUMsQ0FBQztRQUNsRCxDQUFDO1FBQ0QsS0FBSyxNQUFNLENBQUMsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDbkMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUUsS0FBMkIsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztnQkFDN0QsTUFBTSxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsa0NBQWtDLENBQUMsQ0FBQztZQUMzRCxDQUFDO1lBQ0QsdUJBQXVCLENBQ3BCLEtBQXlDLENBQUMsQ0FBQyxDQUFDLEVBQzVDLEtBQTJCLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUN6QyxDQUFDO1FBQ0osQ0FBQztRQUNELE9BQU87SUFDVCxDQUFDO0lBRUQsSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLE9BQU8sRUFBRSxDQUFDO1FBQzNCLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDMUIsTUFBTSxJQUFJLEtBQUssQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDO1FBQ2pELENBQUM7UUFDRCxLQUFLLE1B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LE1BQU0sSUFBSSxLQUFLLENBQUMsNkNBQTZDLENBQUMsQ0FBQztZQUNqRSxDQUFDO1FBQ0gsQ0FBQztRQUNELEdBQUcsRUFBRSxDQUFDLFVBQTRCLEVBQUUsRUFBRTtZQUNwQyxJQUFJLENBQUMsQ0FBQyxLQUFLLElBQUksVUFBVSxDQUFDLEVBQUUsQ0FBQztnQkFDM0IsT0FBTztZQUNULENBQUM7WUFDRCxJQUFJLE9BQU8sVUFBVSxDQUFDLEdBQUcsS0FBSyxRQUFRLEVBQUUsQ0FBQztnQkFDdkMsTUFBTSxJQUFJLEtBQUssQ0FBQyw4Q0FBOEMsQ0FBQyxDQUFDO1lBQ2xFLENBQUM7UUFDSCxDQUFDO1FBQ0QsRUFBRSxFQUFFLENBQUMsVUFBNEIsRUFBRSxFQUFFO1lBQ25DLElBQUksQ0FBQyxDQUFDLElBQUksSUFBSSxVQUFVLENBQUMsRUFBRSxDQUFDO2dCQUMxQixPQUFPO1lBQ1QsQ0FBQztZQUNELElBQUksT0FBTyxVQUFVLENBQUMsRUFBRSxLQUFLLFFBQVEsRUFBRSxDQUFDO2dCQUN0QyxNQUFNLElBQUksS0FBSyxDQUFDLDZDQUE2QyxDQUFDLENBQUM7WUFDakUsQ0FBQztRQUNILENBQUM7UUFDRCxHQUFHLEVBQUUsQ0FBQyxVQUE0QixFQUFFLEVBQUU7WUFDcEMsSUFBSSxDQUFDLENBQUMsS0FBSyxJQUFJLFVBQVUsQ0FBQyxFQUFFLENBQUM7Z0JBQzNCLE9BQU87WUFDVCxDQUFDO1lBQ0QsSUFBSSxPQUFPLFVBQVUsQ0FBQyxHQUFHLEtBQUssUUFBUSxFQUFFLENBQUM7Z0JBQ3ZDLE1BQU0sSUFBSSxLQUFLLENBQUMsOENBQThDLENBQUMsQ0FBQztZQUNsRSxDQUFDO1FBQ0gsQ0FBQztLQUNGO0NBQ0YsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbmZpZ1ZhbGlkYXRvciB9IGZyb20gJy4uLy4uL2NvbmZpZyc7XG5pbXBvcnQgKiBhcyB0eXBlcyBmcm9tICcuLi90eXBlcy9maWVsZHMnO1xuaW1wb3J0IHsgVkFsbCwgVk51bWVyaWMsIFZTdHJpbmcgfSBmcm9tICcuLi90eXBlcy92YWxpZGF0aW9ucyc7XG5cbi8vIEVuc3VyZXMgYSBwcm92aWRlZCB2YWx1ZSBzdHJ1Y3R1cmFsbHkgbWF0Y2hlcyBhIGZpZWxkIHNjaGVtYSAobm9uLXRyYXZlcnNhbCBvZiBzY2hlbWEgdHJlZSlcbmNvbnN0IGFzc2VydFNoYXBlTWF0Y2hlc0ZpZWxkID0gKFxuICB2YWx1ZTogdHlwZXMuVmFsdWVUeXBlLFxuICBmaWVsZDogdHlwZXMuQ29uZmlnRmllbGQsXG4pID0+IHtcbiAgaWYgKGZpZWxkLnR5cGUgPT09ICdvYmplY3QnKSB7XG4gICAgaWYgKHZhbHVlID09IG51bGwgfHwgdHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0JyB8fCBBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCd2YWx1ZSBtdXN0IGJlIG9mIG9iamVjdCB0eXBlJyk7XG4gICAgfVxuICAgIGZvciAoY29uc3QgayBvZiBPYmplY3Qua2V5cyh2YWx1ZSkpIHtcbiAgICAgIGlmICghT2JqZWN0Lmhhc093bigoZmllbGQgYXMgdHlwZXMuT2JqZWN0RmllbGQpLmNoaWxkcmVuLCBrKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFwiJHtrfVwiIGtleSBpcyBub3QgZm91bmQgaW4gdGhlIHNjaGVtYWApO1xuICAgICAgfVxuICAgICAgYXNzZXJ0U2hhcGVNYXRjaGVzRmllbGQoXG4gICAgICAgICh2YWx1ZSBhcyBSZWNvcmQ8c3RyaW5nLCB0eXBlcy5WYWx1ZVR5cGU+KVtrXSxcbiAgICAgICAgKGZpZWxkIGFzIHR5cGVzLk9iamVjdEZpZWxkKS5jaGlsZHJlbltrXSxcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChmaWVsZC50eXBlID09PSAnYXJyYXknKSB7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCd2YWx1ZSBtdXN0IGJlIG9mIGFycmF5IHR5cGUnKTtcbiAgICB9XG4gICAgZm9yIChjb25zdCBpdGVtIG9mIHZhbHVlKSB7XG4gICAgICBhc3NlcnRTaGFwZU1hdGNoZXNGaWVsZChpdGVtLCAoZmllbGQgYXMgdHlwZXMuQXJyYXlGaWVsZCkuaXRlbXMpO1xuICAgIH1cbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAodmFsdWUgPT0gdW5kZWZpbmVkKSByZXR1cm47XG4gIHN3aXRjaCAoZmllbGQudHlwZSkge1xuICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAnc3RyaW5nJylcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd2YWx1ZSBtdXN0IGJlIG9mIHN0cmluZyB0eXBlJyk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdudW1iZXInOlxuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ251bWJlcicpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcigndmFsdWUgbXVzdCBiZSBvZiBudW1iZXIgdHlwZScpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnYm9vbGVhbic6XG4gICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAnYm9vbGVhbicpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcigndmFsdWUgbXVzdCBiZSBvZiBib29sZWFuIHR5cGUnKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2JpZ2ludCc6XG4gICAgICBpZiAoXG4gICAgICAgICEoXG4gICAgICAgICAgdHlwZW9mIHZhbHVlID09PSAnYmlnaW50JyB8fFxuICAgICAgICAgICgodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJyB8fCB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSAmJlxuICAgICAgICAgICAgQmlnSW50KHZhbHVlKSlcbiAgICAgICAgKVxuICAgICAgKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3ZhbHVlIG11c3QgYmUgb2YgYmlnaW50IHR5cGUnKTtcbiAgICAgIGJyZWFrO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgcHJvcGVydHlWYWxpZGF0b3JzID0ge1xuICBhbGw6IHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gICAgdHlwZTogKGZpZWxkOiB0eXBlcy5Db25maWdGaWVsZCwgX2NvbmZpZzogQ29uZmlnVmFsaWRhdG9yKSA9PiB7XG4gICAgICBpZiAoIU9iamVjdC5oYXNPd24oZmllbGQsICd0eXBlJykgfHwgdHlwZW9mIGZpZWxkLnR5cGUgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgZXZlcnkgc2NoZW1hIGZpZWxkIG11c3QgaGF2ZSBhIFwidHlwZVwiIHByb3BlcnR5IG9mIHR5cGUgXCJzdHJpbmdcImAsXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIGlmICghc3VwcG9ydGVkVHlwZXMuaW5jbHVkZXMoZmllbGQudHlwZSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGB1bnN1cHBvcnRlZCBmaWVsZCB0eXBlIFwiJHtmaWVsZC50eXBlfVwiYCk7XG4gICAgICB9XG4gICAgfSxcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gICAgbGFiZWw6IChmaWVsZDogdHlwZXMuQ29uZmlnRmllbGQsIF9jb25maWc6IENvbmZpZ1ZhbGlkYXRvcikgPT4ge1xuICAgICAgaWYgKE9iamVjdC5oYXNPd24oZmllbGQsICdsYWJlbCcpICYmIHR5cGVvZiBmaWVsZC5sYWJlbCAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBcImxhYmVsXCIgcHJvcGVydHkgc2hvdWxkIGJlIGEgXCJzdHJpbmdcImApO1xuICAgICAgfVxuICAgIH0sXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICAgIGRlc2NyaXB0aW9uOiAoZmllbGQ6IHR5cGVzLkNvbmZpZ0ZpZWxkLCBfY29uZmlnOiBDb25maWdWYWxpZGF0b3IpID0+IHtcbiAgICAgIGlmIChcbiAgICAgICAgT2JqZWN0Lmhhc093bihmaWVsZCwgJ2Rlc2NyaXB0aW9uJykgJiZcbiAgICAgICAgdHlwZW9mIGZpZWxkLmRlc2NyaXB0aW9uICE9PSAnc3RyaW5nJ1xuICAgICAgKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgXCJkZXNjcmlwdGlvblwiIHByb3BlcnR5IHNob3VsZCBiZSBhIFwic3RyaW5nXCJgKTtcbiAgICAgIH1cbiAgICB9LFxuICB9LFxuICBwcmltaXRpdmU6IHtcbiAgICB2YWxpZGF0aW9uczogKGZpZWxkOiB0eXBlcy5QcmltaXRpdmVGaWVsZCwgY29uZmlnOiBDb25maWdWYWxpZGF0b3IpID0+IHtcbiAgICAgIGlmICghT2JqZWN0Lmhhc093bihmaWVsZCwgJ3ZhbGlkYXRpb25zJykpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkoZmllbGQudmFsaWRhdGlvbnMpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAnXCJ2YWxpZGF0aW9uc1wiIHByb3BlcnR5IG11c3QgYmUgYW4gYXJyYXkgb2YgdmFsaWRhdGlvbiBkZXNjcmlwdGlvbnMnLFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBmb3IgKGNvbnN0IHZhbGlkYXRpb24gb2YgZmllbGQudmFsaWRhdGlvbnMpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIE9iamVjdC5oYXNPd24odmFsaWRhdGlvbiwgJ2Vycm9yJykgJiZcbiAgICAgICAgICB0eXBlb2YgdmFsaWRhdGlvbi5lcnJvciAhPT0gJ3N0cmluZydcbiAgICAgICAgKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgJ1wiZXJyb3JcIiBwcm9wZXJ0eSBvZiBhIHZhbGlkYXRpb24gZGVzY3JpcHRpb24gbXVzdCBiZSBhIHN0cmluZycsXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChPYmplY3QuaGFzT3duKHZhbGlkYXRpb24sICd3aGVuJykgJiYgdmFsaWRhdGlvbi53aGVuICE9IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICFPYmplY3QuaGFzT3duKHZhbGlkYXRpb24ud2hlbiwgJ3BhdGgnKSB8fFxuICAgICAgICAgICAgdHlwZW9mIHZhbGlkYXRpb24ud2hlbi5wYXRoICE9PSAnc3RyaW5nJ1xuICAgICAgICAgICkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgICBgXCJ3aGVuXCIgcHJvcGVydHkgb2YgYSB2YWxpZGF0aW9uIGRlc2NyaXB0aW9uIG11c3QgaGF2ZSBhIFwicGF0aFwiIHByb3BlcnR5IG9mIHR5cGUgXCJzdHJpbmdcImAsXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIGNvbmZpZy5nZXRTY2hlbWFGaWVsZCh2YWxpZGF0aW9uLndoZW4ucGF0aC5zcGxpdCgnLicpKSA9PSB1bmRlZmluZWRcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgYFwid2hlblwiIHByb3BlcnR5IG9mIGEgdmFsaWRhdGlvbiBkZXNjcmlwdGlvbiBoYXMgYSBub24tZXhpc3RlbnQgcGF0aD1bJHt2YWxpZGF0aW9uLndoZW4ucGF0aH1dYCxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKCFPYmplY3QuaGFzT3duKHZhbGlkYXRpb24ud2hlbiwgJ3ZhbHVlJykpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgYFwid2hlblwiIHByb3BlcnR5IG9mIGEgdmFsaWRhdGlvbiBkZXNjcmlwdGlvbiBtdXN0IGhhdmUgYSBcInZhbHVlXCIgcHJvcGVydHlgLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB2YWxpZGF0aW9uUHJvcGVydGllcyA9IE9iamVjdC5rZXlzKHZhbGlkYXRpb24pLmZpbHRlcihcbiAgICAgICAgICAoa2V5KSA9PiBrZXkgIT09ICd3aGVuJyAmJiBrZXkgIT09ICdlcnJvcicsXG4gICAgICAgICk7XG4gICAgICAgIGlmICh2YWxpZGF0aW9uUHJvcGVydGllcy5sZW5ndGggIT09IDEpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3ZhbGlkYXRpb24gZGVzY3JpcHRpb24gZm9ybWF0IGlzIHdyb25nJyk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB2YWxpZGF0aW9uTmFtZSA9IHZhbGlkYXRpb25Qcm9wZXJ0aWVzWzBdO1xuICAgICAgICBjb25zdCBwcmltaXRpdmVWYWxpZGF0b3IgPSBmaWVsZFZhbGlkYXRpb25zLnByaW1pdGl2ZVt2YWxpZGF0aW9uTmFtZV07XG4gICAgICAgIGNvbnN0IHR5cGVWYWxpZGF0b3IgPSBmaWVsZFZhbGlkYXRpb25zW2ZpZWxkLnR5cGVdW3ZhbGlkYXRpb25OYW1lXTtcbiAgICAgICAgaWYgKHByaW1pdGl2ZVZhbGlkYXRvciA9PSB1bmRlZmluZWQgJiYgdHlwZVZhbGlkYXRvciA9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICBgdmFsaWRhdGlvbiBkZXNjcmlwdGlvbiBoYXMgYW4gdW5rbm93biB2YWxpZGF0b3IgXCIke3ZhbGlkYXRpb25OYW1lfVwiYCxcbiAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHByaW1pdGl2ZVZhbGlkYXRvciAhPSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBwcmltaXRpdmVWYWxpZGF0b3IodmFsaWRhdGlvbik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdHlwZVZhbGlkYXRvcih2YWxpZGF0aW9uKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gIH0sXG4gIG9iamVjdDoge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgICBjaGlsZHJlbjogKGZpZWxkOiB0eXBlcy5PYmplY3RGaWVsZCwgX2NvbmZpZzogQ29uZmlnVmFsaWRhdG9yKSA9PiB7XG4gICAgICBpZiAoXG4gICAgICAgICFPYmplY3QuaGFzT3duKGZpZWxkLCAnY2hpbGRyZW4nKSB8fFxuICAgICAgICB0eXBlb2YgZmllbGQuY2hpbGRyZW4gIT09ICdvYmplY3QnXG4gICAgICApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBvYmplY3QgZmllbGQgdHlwZSBtdXN0IGhhdmUgYSBcImNoaWxkcmVuXCIgcHJvcGVydHkgb2YgdHlwZSBcIm9iamVjdFwiYCxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9LFxuICB9LFxuICBhcnJheToge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgICBpdGVtczogKGZpZWxkOiB0eXBlcy5BcnJheUZpZWxkLCBfY29uZmlnOiBDb25maWdWYWxpZGF0b3IpID0+IHtcbiAgICAgIGlmICghT2JqZWN0Lmhhc093bihmaWVsZCwgJ2l0ZW1zJykgfHwgdHlwZW9mIGZpZWxkLml0ZW1zICE9PSAnb2JqZWN0Jykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYGFycmF5IGZpZWxkIHR5cGUgbXVzdCBoYXZlIGEgXCJpdGVtc1wiIHByb3BlcnR5IG9mIHR5cGUgXCJvYmplY3RcImAsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSxcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gICAgZGVmYXVsdDogKGZpZWxkOiB0eXBlcy5BcnJheUZpZWxkLCBfY29uZmlnOiBDb25maWdWYWxpZGF0b3IpID0+IHtcbiAgICAgIGlmICghT2JqZWN0Lmhhc093bihmaWVsZCwgJ2RlZmF1bHQnKSkgcmV0dXJuO1xuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGZpZWxkLmRlZmF1bHQpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgZGVmYXVsdCB2YWx1ZT1bJHtcbiAgICAgICAgICAgIGZpZWxkLmRlZmF1bHRcbiAgICAgICAgICB9XSBkb2Vzbid0IG1hdGNoIGZpZWxkIHR5cGU9WyR7ZmllbGQudHlwZX1dYCxcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgZm9yIChjb25zdCBlbGVtIG9mIGZpZWxkLmRlZmF1bHQpIHtcbiAgICAgICAgYXNzZXJ0U2hhcGVNYXRjaGVzRmllbGQoZWxlbSwgZmllbGQuaXRlbXMpO1xuICAgICAgfVxuICAgIH0sXG4gIH0sXG4gIHVuaW9uOiB7XG4gICAgY2hpbGRyZW46IChmaWVsZDogdHlwZXMuQ29uZmlnRmllbGQpID0+IHtcbiAgICAgIGlmICghKCdjaGlsZHJlbicgaW4gZmllbGQpIHx8ICFBcnJheS5pc0FycmF5KGZpZWxkLmNoaWxkcmVuKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYHVuaW9uIGZpZWxkIG11c3QgaGF2ZSBhIFwiY2hpbGRyZW5cIiBwcm9wZXJ0eSBvZiB0eXBlIFwiYXJyYXlcImAsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBpZiAoZmllbGQuY2hpbGRyZW4ubGVuZ3RoIDwgMikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYHVuaW9uIGZpZWxkIFwiY2hpbGRyZW5cIiBtdXN0IGhhdmUgYXQgbGVhc3QgMiBjaGlsZCBub2Rlc2AsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSxcbiAgfSxcbiAgc3RyaW5nOiB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICAgIGRlZmF1bHQ6IChmaWVsZDogdHlwZXMuU3RyaW5nRmllbGQsIF9jb25maWc6IENvbmZpZ1ZhbGlkYXRvcikgPT4ge1xuICAgICAgaWYgKFxuICAgICAgICBPYmplY3QuaGFzT3duKGZpZWxkLCAnZGVmYXVsdCcpICYmXG4gICAgICAgIHR5cGVvZiBmaWVsZC5kZWZhdWx0ICE9PSAnc3RyaW5nJ1xuICAgICAgKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgZGVmYXVsdCB2YWx1ZT1bJHtmaWVsZC5kZWZhdWx0fV0gZG9lc24ndCBtYXRjaCBmaWVsZCB0eXBlPVske2ZpZWxkLnR5cGV9XWAsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSxcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gICAgc2VjcmV0OiAoZmllbGQ6IHR5cGVzLlN0cmluZ0ZpZWxkLCBfY29uZmlnOiBDb25maWdWYWxpZGF0b3IpID0+IHtcbiAgICAgIGlmIChPYmplY3QuaGFzT3duKGZpZWxkLCAnc2VjcmV0JykgJiYgdHlwZW9mIGZpZWxkLnNlY3JldCAhPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignXCJzZWNyZXRcIiBtdXN0IGJlIGJvb2xlYW4nKTtcbiAgICAgIH1cbiAgICB9LFxuICB9LFxuICBib29sZWFuOiB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICAgIGRlZmF1bHQ6IChmaWVsZDogdHlwZXMuQm9vbGVhbkZpZWxkLCBfY29uZmlnOiBDb25maWdWYWxpZGF0b3IpID0+IHtcbiAgICAgIGlmIChcbiAgICAgICAgT2JqZWN0Lmhhc093bihmaWVsZCwgJ2RlZmF1bHQnKSAmJlxuICAgICAgICB0eXBlb2YgZmllbGQuZGVmYXVsdCAhPT0gJ2Jvb2xlYW4nXG4gICAgICApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBkZWZhdWx0IHZhbHVlPVske2ZpZWxkLmRlZmF1bHR9XSBkb2Vzbid0IG1hdGNoIGZpZWxkIHR5cGU9WyR7ZmllbGQudHlwZX1dYCxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgICBzZWNyZXQ6IChmaWVsZDogdHlwZXMuQm9vbGVhbkZpZWxkLCBfY29uZmlnOiBDb25maWdWYWxpZGF0b3IpID0+IHtcbiAgICAgIGlmIChPYmplY3QuaGFzT3duKGZpZWxkLCAnc2VjcmV0JykgJiYgdHlwZW9mIGZpZWxkLnNlY3JldCAhPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignXCJzZWNyZXRcIiBtdXN0IGJlIGJvb2xlYW4nKTtcbiAgICAgIH1cbiAgICB9LFxuICB9LFxuICBudW1iZXI6IHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gICAgZGVmYXVsdDogKGZpZWxkOiB0eXBlcy5OdW1iZXJGaWVsZCwgX2NvbmZpZzogQ29uZmlnVmFsaWRhdG9yKSA9PiB7XG4gICAgICBpZiAoXG4gICAgICAgIE9iamVjdC5oYXNPd24oZmllbGQsICdkZWZhdWx0JykgJiZcbiAgICAgICAgdHlwZW9mIGZpZWxkLmRlZmF1bHQgIT09ICdudW1iZXInXG4gICAgICApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBkZWZhdWx0IHZhbHVlPVske2ZpZWxkLmRlZmF1bHR9XSBkb2Vzbid0IG1hdGNoIGZpZWxkIHR5cGU9WyR7ZmllbGQudHlwZX1dYCxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgICBzZWNyZXQ6IChmaWVsZDogdHlwZXMuTnVtYmVyRmllbGQsIF9jb25maWc6IENvbmZpZ1ZhbGlkYXRvcikgPT4ge1xuICAgICAgaWYgKE9iamVjdC5oYXNPd24oZmllbGQsICdzZWNyZXQnKSAmJiB0eXBlb2YgZmllbGQuc2VjcmV0ICE9PSAnYm9vbGVhbicpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdcInNlY3JldFwiIG11c3QgYmUgYm9vbGVhbicpO1xuICAgICAgfVxuICAgIH0sXG4gIH0sXG4gIGJpZ2ludDoge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgICBkZWZhdWx0OiAoZmllbGQ6IHR5cGVzLkJpZ0ludEZpZWxkLCBfY29uZmlnOiBDb25maWdWYWxpZGF0b3IpID0+IHtcbiAgICAgIGlmIChcbiAgICAgICAgT2JqZWN0Lmhhc093bihmaWVsZCwgJ2RlZmF1bHQnKSAmJlxuICAgICAgICAhKFxuICAgICAgICAgIHR5cGVvZiBmaWVsZC5kZWZhdWx0ID09PSAnYmlnaW50JyB8fFxuICAgICAgICAgICgodHlwZW9mIGZpZWxkLmRlZmF1bHQgPT09ICdudW1iZXInIHx8XG4gICAgICAgICAgICB0eXBlb2YgZmllbGQuZGVmYXVsdCA9PT0gJ3N0cmluZycpICYmXG4gICAgICAgICAgICBCaWdJbnQoZmllbGQuZGVmYXVsdCkpXG4gICAgICAgIClcbiAgICAgICkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYGRlZmF1bHQgdmFsdWU9WyR7ZmllbGQuZGVmYXVsdH1dIGRvZXNuJ3QgbWF0Y2ggZmllbGQgdHlwZT1bJHtmaWVsZC50eXBlfV1gLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0sXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICAgIHNlY3JldDogKGZpZWxkOiB0eXBlcy5CaWdJbnRGaWVsZCwgX2NvbmZpZzogQ29uZmlnVmFsaWRhdG9yKSA9PiB7XG4gICAgICBpZiAoT2JqZWN0Lmhhc093bihmaWVsZCwgJ3NlY3JldCcpICYmIHR5cGVvZiBmaWVsZC5zZWNyZXQgIT09ICdib29sZWFuJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1wic2VjcmV0XCIgbXVzdCBiZSBib29sZWFuJyk7XG4gICAgICB9XG4gICAgfSxcbiAgfSxcbn07XG5cbmV4cG9ydCBjb25zdCBzdXBwb3J0ZWRUeXBlcyA9IE9iamVjdC5rZXlzKHByb3BlcnR5VmFsaWRhdG9ycykuZmlsdGVyKFxuICAoa2V5KSA9PiBrZXkgIT09ICdhbGwnICYmIGtleSAhPT0gJ3ByaW1pdGl2ZScsXG4pO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuY29uc3QgZmllbGRWYWxpZGF0aW9uczogUmVjb3JkPHN0cmluZywgUmVjb3JkPHN0cmluZywgYW55Pj4gPSB7XG4gIHByaW1pdGl2ZToge1xuICAgIHJlcXVpcmVkOiAodmFsaWRhdGlvbjogVkFsbCkgPT4ge1xuICAgICAgaWYgKCEoJ3JlcXVpcmVkJyBpbiB2YWxpZGF0aW9uKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgdmFsaWRhdGlvbi5yZXF1aXJlZCAhPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgXCJyZXF1aXJlZFwiIHZhbGlkYXRpb24gcHJvcGVydHkgc2hvdWxkIGJlIGEgYm9vbGVhbmApO1xuICAgICAgfVxuICAgIH0sXG4gIH0sXG4gIHN0cmluZzoge1xuICAgIHJlZ2V4OiAodmFsaWRhdGlvbjogVlN0cmluZykgPT4ge1xuICAgICAgaWYgKCEoJ3JlZ2V4JyBpbiB2YWxpZGF0aW9uKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAodHlwZW9mIHZhbGlkYXRpb24ucmVnZXggIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgXCJyZWdleFwiIHZhbGlkYXRpb24gcHJvcGVydHkgc2hvdWxkIGJlIGEgc3RyaW5nYCk7XG4gICAgICB9XG4gICAgfSxcbiAgICBjaG9pY2VzOiAodmFsaWRhdGlvbjogVlN0cmluZykgPT4ge1xuICAgICAgaWYgKCEoJ2Nob2ljZXMnIGluIHZhbGlkYXRpb24pKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICghQXJyYXkuaXNBcnJheSh2YWxpZGF0aW9uLmNob2ljZXMpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgXCJjaG9pY2VzXCIgdmFsaWRhdGlvbiBwcm9wZXJ0eSBzaG91bGQgYmUgYW4gXCJhcnJheVwiIG9mIHN0cmluZ3NgLFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBmb3IgKGNvbnN0IGNob2ljZSBvZiB2YWxpZGF0aW9uLmNob2ljZXMpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBjaG9pY2UgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgYFwiY2hvaWNlc1wiIHZhbGlkYXRpb24gcHJvcGVydHkgc2hvdWxkIGJlIGFuIGFycmF5IG9mIFwic3RyaW5nc1wiYCxcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgfSxcbiAgYm9vbGVhbjoge30sXG4gIG51bWJlcjoge1xuICAgIGd0OiAodmFsaWRhdGlvbjogVk51bWVyaWM8bnVtYmVyPikgPT4ge1xuICAgICAgaWYgKCEoJ2d0JyBpbiB2YWxpZGF0aW9uKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAodHlwZW9mIHZhbGlkYXRpb24uZ3QgIT09ICdudW1iZXInKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgXCJndFwiIHZhbGlkYXRpb24gcHJvcGVydHkgc2hvdWxkIGJlIGEgbnVtYmVyYCk7XG4gICAgICB9XG4gICAgfSxcbiAgICBndGU6ICh2YWxpZGF0aW9uOiBWTnVtZXJpYzxudW1iZXI+KSA9PiB7XG4gICAgICBpZiAoISgnZ3RlJyBpbiB2YWxpZGF0aW9uKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAodHlwZW9mIHZhbGlkYXRpb24uZ3RlICE9PSAnbnVtYmVyJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFwiZ3RlXCIgdmFsaWRhdGlvbiBwcm9wZXJ0eSBzaG91bGQgYmUgYSBudW1iZXJgKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGx0OiAodmFsaWRhdGlvbjogVk51bWVyaWM8bnVtYmVyPikgPT4ge1xuICAgICAgaWYgKCEoJ2x0JyBpbiB2YWxpZGF0aW9uKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgdmFsaWRhdGlvbi5sdCAhPT0gJ251bWJlcicpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBcImx0XCIgdmFsaWRhdGlvbiBwcm9wZXJ0eSBzaG91bGQgYmUgYSBudW1iZXJgKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGx0ZTogKHZhbGlkYXRpb246IFZOdW1lcmljPG51bWJlcj4pID0+IHtcbiAgICAgIGlmICghKCdsdGUnIGluIHZhbGlkYXRpb24pKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiB2YWxpZGF0aW9uLmx0ZSAhPT0gJ251bWJlcicpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBcImx0ZVwiIHZhbGlkYXRpb24gcHJvcGVydHkgc2hvdWxkIGJlIGEgbnVtYmVyYCk7XG4gICAgICB9XG4gICAgfSxcbiAgfSxcbiAgYmlnaW50OiB7XG4gICAgZ3Q6ICh2YWxpZGF0aW9uOiBWTnVtZXJpYzxiaWdpbnQ+KSA9PiB7XG4gICAgICBpZiAoISgnZ3QnIGluIHZhbGlkYXRpb24pKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiB2YWxpZGF0aW9uLmd0ICE9PSAnYmlnaW50Jykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFwiZ3RcIiB2YWxpZGF0aW9uIHByb3BlcnR5IHNob3VsZCBiZSBhIGJpZ2ludGApO1xuICAgICAgfVxuICAgIH0sXG4gICAgZ3RlOiAodmFsaWRhdGlvbjogVk51bWVyaWM8YmlnaW50PikgPT4ge1xuICAgICAgaWYgKCEoJ2d0ZScgaW4gdmFsaWRhdGlvbikpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKHR5cGVvZiB2YWxpZGF0aW9uLmd0ZSAhPT0gJ2JpZ2ludCcpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBcImd0ZVwiIHZhbGlkYXRpb24gcHJvcGVydHkgc2hvdWxkIGJlIGEgYmlnaW50YCk7XG4gICAgICB9XG4gICAgfSxcbiAgICBsdDogKHZhbGlkYXRpb246IFZOdW1lcmljPGJpZ2ludD4pID0+IHtcbiAgICAgIGlmICghKCdsdCcgaW4gdmFsaWRhdGlvbikpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKHR5cGVvZiB2YWxpZGF0aW9uLmx0ICE9PSAnYmlnaW50Jykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFwibHRcIiB2YWxpZGF0aW9uIHByb3BlcnR5IHNob3VsZCBiZSBhIGJpZ2ludGApO1xuICAgICAgfVxuICAgIH0sXG4gICAgbHRlOiAodmFsaWRhdGlvbjogVk51bWVyaWM8YmlnaW50PikgPT4ge1xuICAgICAgaWYgKCEoJ2x0ZScgaW4gdmFsaWRhdGlvbikpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKHR5cGVvZiB2YWxpZGF0aW9uLmx0ZSAhPT0gJ2JpZ2ludCcpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBcImx0ZVwiIHZhbGlkYXRpb24gcHJvcGVydHkgc2hvdWxkIGJlIGEgYmlnaW50YCk7XG4gICAgICB9XG4gICAgfSxcbiAgfSxcbn07XG4iXX0=
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fields.d.ts","sourceRoot":"","sources":["../../../lib/schema/types/fields.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAEvE,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,CAAC;AAEhE,MAAM,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;AAEvD,MAAM,MAAM,WAAW,GACnB,WAAW,GACX,UAAU,GACV,cAAc,GACd,UAAU,CAAC;AAEf,MAAM,MAAM,cAAc,GACtB,WAAW,GACX,WAAW,GACX,WAAW,GACX,YAAY,CAAC;AAEjB,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,QAAQ,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,YAAY,CAAC;CACxB;AAED,MAAM,MAAM,SAAS,GACjB,cAAc,GACd;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,GAC5B,SAAS,EAAE,CAAC;AAEhB,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,OAAO,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,SAAS,EAAE,CAAC;IACtB,KAAK,EAAE,WAAW,CAAC;CACpB;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,OAAO,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,WAAW,CAAC,EAAE,SAAS,EAAE,CAAC;CAC3B;AAED,MAAM,WAAW,YAAY,CAAC,CAAC;IAC7B,OAAO,CAAC,EAAE,CAAC,CAAC;IACZ,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"fields.d.ts","sourceRoot":"","sources":["../../../lib/schema/types/fields.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAEvE,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,CAAC;AAEhE,MAAM,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;AAEvD,MAAM,MAAM,WAAW,GACnB,WAAW,GACX,UAAU,GACV,cAAc,GACd,UAAU,CAAC;AAEf,MAAM,MAAM,cAAc,GACtB,WAAW,GACX,WAAW,GACX,WAAW,GACX,YAAY,CAAC;AAEjB,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,QAAQ,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,YAAY,CAAC;CACxB;AAED,MAAM,MAAM,SAAS,GACjB,cAAc,GACd;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,GAC5B,SAAS,EAAE,CAAC;AAEhB,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,OAAO,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,SAAS,EAAE,CAAC;IACtB,KAAK,EAAE,WAAW,CAAC;CACpB;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,OAAO,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,WAAW,CAAC,EAAE,SAAS,EAAE,CAAC;CAC3B;AAED,MAAM,WAAW,YAAY,CAAC,CAAC;IAC7B,OAAO,CAAC,EAAE,CAAC,CAAC;IACZ,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,WAAY,SAAQ,YAAY,CAAC,MAAM,CAAC;IACvD,IAAI,EAAE,QAAQ,CAAC;IACf,WAAW,CAAC,EAAE,OAAO,EAAE,CAAC;CACzB;AAED,MAAM,WAAW,WAAY,SAAQ,YAAY,CAAC,MAAM,CAAC;IACvD,IAAI,EAAE,QAAQ,CAAC;IACf,WAAW,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;CAClC;AAED,MAAM,WAAW,WAAY,SAAQ,YAAY,CAAC,MAAM,CAAC;IACvD,IAAI,EAAE,QAAQ,CAAC;IACf,WAAW,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;CAClC;AAED,MAAM,WAAW,YAAa,SAAQ,YAAY,CAAC,OAAO,CAAC;IACzD,IAAI,EAAE,SAAS,CAAC;IAChB,WAAW,CAAC,EAAE,QAAQ,EAAE,CAAC;CAC1B"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export {};
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmllbGRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vbGliL3NjaGVtYS90eXBlcy9maWVsZHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFZCb29sZWFuLCBWTnVtZXJpYywgVlJlcXVpcmVkLCBWU3RyaW5nIH0gZnJvbSAnLi92YWxpZGF0aW9ucyc7XG5cbmV4cG9ydCB0eXBlIFByaW1pdGl2ZVZhbHVlID0gc3RyaW5nIHwgYm9vbGVhbiB8IG51bWJlciB8IGJpZ2ludDtcblxuZXhwb3J0IHR5cGUgQ29uZmlnU2NoZW1hID0gUmVjb3JkPHN0cmluZywgQ29uZmlnRmllbGQ+O1xuXG5leHBvcnQgdHlwZSBDb25maWdGaWVsZCA9XG4gIHwgT2JqZWN0RmllbGRcbiAgfCBBcnJheUZpZWxkXG4gIHwgUHJpbWl0aXZlRmllbGRcbiAgfCBVbmlvbkZpZWxkO1xuXG5leHBvcnQgdHlwZSBQcmltaXRpdmVGaWVsZCA9XG4gIHwgU3RyaW5nRmllbGRcbiAgfCBOdW1iZXJGaWVsZFxuICB8IEJpZ0ludEZpZWxkXG4gIHwgQm9vbGVhbkZpZWxkO1xuXG5leHBvcnQgaW50ZXJmYWNlIE9iamVjdEZpZWxkIHtcbiAgdHlwZTogJ29iamVjdCc7XG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICBsYWJlbD86IHN0cmluZztcbiAgY2hpbGRyZW46IENvbmZpZ1NjaGVtYTtcbn1cblxuZXhwb3J0IHR5cGUgVmFsdWVUeXBlID1cbiAgfCBQcmltaXRpdmVWYWx1ZVxuICB8IHsgW2tleTogc3RyaW5nXTogVmFsdWVUeXBlIH1cbiAgfCBWYWx1ZVR5cGVbXTtcblxuZXhwb3J0IGludGVyZmFjZSBBcnJheUZpZWxkIHtcbiAgdHlwZTogJ2FycmF5JztcbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIGxhYmVsPzogc3RyaW5nO1xuICBkZWZhdWx0PzogVmFsdWVUeXBlW107XG4gIGl0ZW1zOiBDb25maWdGaWVsZDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBVbmlvbkZpZWxkIHtcbiAgdHlwZTogJ3VuaW9uJztcbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIGxhYmVsPzogc3RyaW5nO1xuICBjaGlsZHJlbjogQ29uZmlnRmllbGRbXTtcbiAgdmFsaWRhdGlvbnM/OiBWUmVxdWlyZWRbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBHZW5lcmljRmllbGQ8VD4ge1xuICBkZWZhdWx0PzogVDtcbiAgZGVzY3JpcHRpb24/
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmllbGRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vbGliL3NjaGVtYS90eXBlcy9maWVsZHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFZCb29sZWFuLCBWTnVtZXJpYywgVlJlcXVpcmVkLCBWU3RyaW5nIH0gZnJvbSAnLi92YWxpZGF0aW9ucyc7XG5cbmV4cG9ydCB0eXBlIFByaW1pdGl2ZVZhbHVlID0gc3RyaW5nIHwgYm9vbGVhbiB8IG51bWJlciB8IGJpZ2ludDtcblxuZXhwb3J0IHR5cGUgQ29uZmlnU2NoZW1hID0gUmVjb3JkPHN0cmluZywgQ29uZmlnRmllbGQ+O1xuXG5leHBvcnQgdHlwZSBDb25maWdGaWVsZCA9XG4gIHwgT2JqZWN0RmllbGRcbiAgfCBBcnJheUZpZWxkXG4gIHwgUHJpbWl0aXZlRmllbGRcbiAgfCBVbmlvbkZpZWxkO1xuXG5leHBvcnQgdHlwZSBQcmltaXRpdmVGaWVsZCA9XG4gIHwgU3RyaW5nRmllbGRcbiAgfCBOdW1iZXJGaWVsZFxuICB8IEJpZ0ludEZpZWxkXG4gIHwgQm9vbGVhbkZpZWxkO1xuXG5leHBvcnQgaW50ZXJmYWNlIE9iamVjdEZpZWxkIHtcbiAgdHlwZTogJ29iamVjdCc7XG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICBsYWJlbD86IHN0cmluZztcbiAgY2hpbGRyZW46IENvbmZpZ1NjaGVtYTtcbn1cblxuZXhwb3J0IHR5cGUgVmFsdWVUeXBlID1cbiAgfCBQcmltaXRpdmVWYWx1ZVxuICB8IHsgW2tleTogc3RyaW5nXTogVmFsdWVUeXBlIH1cbiAgfCBWYWx1ZVR5cGVbXTtcblxuZXhwb3J0IGludGVyZmFjZSBBcnJheUZpZWxkIHtcbiAgdHlwZTogJ2FycmF5JztcbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIGxhYmVsPzogc3RyaW5nO1xuICBkZWZhdWx0PzogVmFsdWVUeXBlW107XG4gIGl0ZW1zOiBDb25maWdGaWVsZDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBVbmlvbkZpZWxkIHtcbiAgdHlwZTogJ3VuaW9uJztcbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIGxhYmVsPzogc3RyaW5nO1xuICBjaGlsZHJlbjogQ29uZmlnRmllbGRbXTtcbiAgdmFsaWRhdGlvbnM/OiBWUmVxdWlyZWRbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBHZW5lcmljRmllbGQ8VD4ge1xuICBkZWZhdWx0PzogVDtcbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIGxhYmVsPzogc3RyaW5nO1xuICBzZWNyZXQ/OiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFN0cmluZ0ZpZWxkIGV4dGVuZHMgR2VuZXJpY0ZpZWxkPHN0cmluZz4ge1xuICB0eXBlOiAnc3RyaW5nJztcbiAgdmFsaWRhdGlvbnM/OiBWU3RyaW5nW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTnVtYmVyRmllbGQgZXh0ZW5kcyBHZW5lcmljRmllbGQ8bnVtYmVyPiB7XG4gIHR5cGU6ICdudW1iZXInO1xuICB2YWxpZGF0aW9ucz86IFZOdW1lcmljPG51bWJlcj5bXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBCaWdJbnRGaWVsZCBleHRlbmRzIEdlbmVyaWNGaWVsZDxiaWdpbnQ+IHtcbiAgdHlwZTogJ2JpZ2ludCc7XG4gIHZhbGlkYXRpb25zPzogVk51bWVyaWM8YmlnaW50PltdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEJvb2xlYW5GaWVsZCBleHRlbmRzIEdlbmVyaWNGaWVsZDxib29sZWFuPiB7XG4gIHR5cGU6ICdib29sZWFuJztcbiAgdmFsaWRhdGlvbnM/OiBWQm9vbGVhbltdO1xufVxuIl19
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@rosen-bridge/config",
|
|
3
|
-
"version": "2.1.0
|
|
3
|
+
"version": "2.1.0",
|
|
4
4
|
"description": "a package to manage configs of rosen bridge projects",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -29,7 +29,6 @@
|
|
|
29
29
|
},
|
|
30
30
|
"dependencies": {
|
|
31
31
|
"@rosen-bridge/json-bigint": "^1.1.0",
|
|
32
|
-
"chalk": "^5.3.0",
|
|
33
32
|
"config": "^3.3.10",
|
|
34
33
|
"js-yaml": "^4.1.0",
|
|
35
34
|
"ora": "^8.0.1",
|