@rosen-bridge/config 0.4.0 → 1.0.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 CHANGED
@@ -1,5 +1,11 @@
1
1
  # @rosen-bridge/config
2
2
 
3
+ ## 1.0.0
4
+
5
+ ### Major Changes
6
+
7
+ - Update node version to 22.18
8
+
3
9
  ## 0.4.0
4
10
 
5
11
  ### Minor Changes
package/dist/cli.js CHANGED
@@ -83,4 +83,4 @@ yargs(hideBin(process.argv))
83
83
  })
84
84
  .demandCommand(1)
85
85
  .parse();
86
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vbGliL2NsaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBRUEsT0FBTyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBQzFCLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDeEMsT0FBTyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBQzFCLE9BQU8sR0FBRyxNQUFNLEtBQUssQ0FBQztBQUN0QixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQzFDLE9BQU8sS0FBSyxFQUFFLE1BQU0sSUFBSSxDQUFDO0FBQ3pCLE9BQU8saUJBQWlCLE1BQU0sYUFBYSxDQUFDO0FBQzVDLE9BQU8sS0FBSyxJQUFJLE1BQU0sU0FBUyxDQUFDO0FBRWhDLE1BQU0sVUFBVSxHQUFHLGlCQUFpQixDQUFDO0lBQ25DLGdCQUFnQixFQUFFLEtBQUs7SUFDdkIsZUFBZSxFQUFFLElBQUk7Q0FDdEIsQ0FBQyxDQUFDO0FBRUgsS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDekIsT0FBTyxDQUNOLGtCQUFrQixFQUNsQixtRUFBbUUsRUFDbkUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUNSLEtBQUs7S0FDRixNQUFNLENBQUMsUUFBUSxFQUFFO0lBQ2hCLEtBQUssRUFBRSxHQUFHO0lBQ1YsWUFBWSxFQUFFLElBQUk7SUFDbEIsV0FBVyxFQUFFLHVEQUF1RDtJQUNwRSxJQUFJLEVBQUUsUUFBUTtDQUNmLENBQUM7S0FDRCxNQUFNLENBQUMsUUFBUSxFQUFFO0lBQ2hCLEtBQUssRUFBRSxHQUFHO0lBQ1YsWUFBWSxFQUFFLElBQUk7SUFDbEIsV0FBVyxFQUFFLHNDQUFzQztJQUNuRCxJQUFJLEVBQUUsUUFBUTtDQUNmLENBQUM7S0FDRCxNQUFNLENBQUMsUUFBUSxFQUFFO0lBQ2hCLEtBQUssRUFBRSxHQUFHO0lBQ1YsWUFBWSxFQUFFLElBQUk7SUFD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Q0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUNoRSxDQUFDO0FBQ0osQ0FBQyxDQUNGO0tBQ0EsYUFBYSxDQUFDLENBQUMsQ0FBQztLQUNoQixLQUFLLEVBQUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIiMhL3Vzci9iaW4vZW52IC1TIG5vZGUgLS1leHBlcmltZW50YWwtc3BlY2lmaWVyLXJlc29sdXRpb249bm9kZVxuXG5pbXBvcnQgeWFyZ3MgZnJvbSAneWFyZ3MnO1xuaW1wb3J0IHsgaGlkZUJpbiB9IGZyb20gJ3lhcmdzL2hlbHBlcnMnO1xuaW1wb3J0IGNoYWxrIGZyb20gJ2NoYWxrJztcbmltcG9ydCBvcmEgZnJvbSAnb3JhJztcbmltcG9ydCB7IENvbmZpZ1ZhbGlkYXRvciB9IGZyb20gJy4vaW5kZXgnO1xuaW1wb3J0ICogYXMgZnMgZnJvbSAnZnMnO1xuaW1wb3J0IEpzb25CaWdJbnRGYWN0b3J5IGZyb20gJ2pzb24tYmlnaW50JztcbmltcG9ydCAqIGFzIHlhbWwgZnJvbSAnanMteWFtbCc7XG5cbmNvbnN0IEpzb25CaWdJbnQgPSBKc29uQmlnSW50RmFjdG9yeSh7XG4gIGFsd2F5c1BhcnNlQXNCaWc6IGZhbHNlLFxuICB1c2VOYXRpdmVCaWdJbnQ6IHRydWUsXG59KTtcblxueWFyZ3MoaGlkZUJpbihwcm9jZXNzLmFyZ3YpKVxuICAuY29tbWFuZChcbiAgICAnZ2VuZXJhdGUtZGVmYXVsdCcsXG4gICAgJ2dlbmVyYXRlcyBhbiBvYmplY3QgdXNpbmcgdGhlIGRlZmF1bHQgdmFsdWVzIG9mIHRoZSBwYXNzZWQgc2NoZW1hJyxcbiAgICAoeWFyZ3MpID0+XG4gICAgICB5YXJnc1xuICAgICAgICAub3B0aW9uKCdzY2hlbWEnLCB7XG4gICAgICAgICAgYWxpYXM6ICdzJyxcbiAgICAgICAgICBkZW1hbmRPcHRpb246IHRydWUsXG4gICAgICAgICAgZGVzY3JpcHRpb246ICdpbnB1dCBzY2hlbWEgZmlsZSBwYXRoIHdoaWNoIHNob3VsZCBiZSBpbiBqc29uIGZvcm1hdCcsXG4gICAgICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICAgIH0pXG4gICAgICAgIC5vcHRpb24oJ291dHB1dCcsIHtcbiAgICAgICAgICBhbGlhczogJ28nLFxuICAgICAgICAgIGRlbWFuZE9wdGlvbjogdHJ1ZSxcbiAgICAgICAgICBkZXNjcmlwdGlvbjogJ2dlbmVyYXRlZCBkZWZhdWx0IHZhbHVlcyBvdXRwdXQgcGF0aCcsXG4gICAgICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICAgIH0pXG4gICAgICAgIC5vcHRpb24oJ2Zvcm1hdCcsIHtcbiAgICAgICAgICBhbGlhczogJ2YnLFxuICAgICAgICAgIGRlbWFuZE9wdGlvbjogdHJ1ZSxcbiAgICAgICAgICBkZXNjcmlwdGlvbjogJ2dlbmVyYXRlZCBkZWZhdWx0IHZhbHVlcyBvdXRwdXQgcGF0aCcsXG4gICAgICAgICAgY2hvaWNlczogWydqc29uJywgJ3lhbWwnXSxcbiAgICAgICAgICBkZWZhdWx0OiAneWFtbCcsXG4gICAgICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICAgIH0pLFxuICAgIGFzeW5jIChhcmd2KSA9PiB7XG4gICAgICBjb25zdCBzcGlubmVyID0gb3JhKCk7XG4gICAgICBzcGlubmVyLnN0YXJ0KGBHZW5lcmF0aW5nIGNvbmZpZyBkZWZhdWx0IHZhbHVlc2ApO1xuXG4gICAgICBjb25zdCByYXdTY2hlbWFEYXRhID0gZnMucmVhZEZpbGVTeW5jKGFyZ3Yuc2NoZW1hLCAndXRmLTgnKTtcbiAgICAgIGNvbnN0IHNjaGVtYSA9IEpzb25CaWdJbnQucGFyc2UocmF3U2NoZW1hRGF0YSk7XG5cbiAgICAgIGNvbnN0IGNvbmZWYWxpZGF0b3IgPSBuZXcgQ29uZmlnVmFsaWRhdG9yKHNjaGVtYSk7XG4gICAgICBjb25zdCBkZWZhdWx0Q29uZiA9IGNvbmZWYWxpZGF0b3IuZ2VuZXJhdGVEZWZhdWx0KCk7XG5cbiAgICAgIGxldCBvdXRwdXQgPSAnJztcbiAgICAgIHN3aXRjaCAoYXJndi5mb3JtYXQpIHtcbiAgICAgICAgY2FzZSAnanNvbic6IHtcbiAgICAgICAgICBvdXRwdXQgPSBKc29uQmlnSW50LnN0cmluZ2lmeShkZWZhdWx0Q29uZik7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAneWFtbCc6IHtcbiAgICAgICAgICBvdXRwdXQgPSB5YW1sLmR1bXAoZGVmYXVsdENvbmYpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGZzLndyaXRlRmlsZVN5bmMoYXJndi5vdXRwdXQsIG91dHB1dCk7XG5cbiAgICAgIHNwaW5uZXIuc3VjY2VlZChcbiAgICAgICAgY2hhbGsuZ3JlZW4oYGRlZmF1bHQgY29uZmlnIHZhbHVlcyB3ZXJlIG91dHB1dCBhdCBcIiR7YXJndi5vdXRwdXR9XCJgKVxuICAgICAgKTtcbiAgICB9XG4gIClcbiAgLmNvbW1hbmQoXG4gICAgJ2dlbmVyYXRlLXRzLXR5cGVzJyxcbiAgICAnZ2VuZXJhdGVzIGNvbXBhdGlibGUgVHlwZVNjcmlwdCBpbnRlcmZhY2UgdHlwZXMgZm9yIHRoZSBwYXNzZWQgc2NoZW1hJyxcbiAgICAoeWFyZ3MpID0+XG4gICAgICB5YXJnc1xuICAgICAgICAub3B0aW9uKCdzY2hlbWEnLCB7XG4gICAgICAgICAgYWxpYXM6ICdzJyxcbiAgICAgICAgICBkZW1hbmRPcHRpb246IHRydWUsXG4gICAgICAgICAgZGVzY3JpcHRpb246ICdpbnB1dCBzY2hlbWEgZmlsZSBwYXRoIHdoaWNoIHNob3VsZCBiZSBpbiBqc29uIGZvcm1hdCcsXG4gICAgICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICAgIH0pXG4gICAgICAgIC5vcHRpb24oJ291dHB1dCcsIHtcbiAgICAgICAgICBhbGlhczogJ28nLFxuICAgICAgICAgIGRlbWFuZE9wdGlvbjogdHJ1ZSxcbiAgICAgICAgICBkZXNjcmlwdGlvbjogJ2dlbmVyYXRlZCBUeXBlU2NyaXB0IGludGVyZmFjZXMnLFxuICAgICAgICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgICAgICB9KVxuICAgICAgICAub3B0aW9uKCdyb290LXR5cGUnLCB7XG4gICAgICAgICAgYWxpYXM6ICdyJyxcbiAgICAgICAgICBkZW1hbmRPcHRpb246IHRydWUsXG4gICAgICAgICAgZGVzY3JpcHRpb246ICdOYW1lIG9mIHRvcCByb290IGludGVyZmFjZScsXG4gICAgICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICAgIH0pLFxuICAgIGFzeW5jIChhcmd2KSA9PiB7XG4gICAgICBjb25zdCBzcGlubmVyID0gb3JhKCk7XG4gICAgICBzcGlubmVyLnN0YXJ0KGBHZW5lcmF0aW5nIFR5cGVTY3JpcHQgdHlwZXNgKTtcblxuICAgICAgY29uc3QgcmF3U2NoZW1hRGF0YSA9IGZzLnJlYWRGaWxlU3luYyhhcmd2LnNjaGVtYSwgJ3V0Zi04Jyk7XG4gICAgICBjb25zdCBzY2hlbWEgPSBKc29uQmlnSW50LnBhcnNlKHJhd1NjaGVtYURhdGEpO1xuXG4gICAgICBjb25zdCBjb25mVmFsaWRhdG9yID0gbmV3IENvbmZpZ1ZhbGlkYXRvcihzY2hlbWEpO1xuICAgICAgY29uc3QgdHNUeXBlcyA9IGNvbmZWYWxpZGF0b3IuZ2VuZXJhdGVUU1R5cGVzKGFyZ3Yucm9vdFR5cGUpO1xuXG4gICAgICBmcy53cml0ZUZpbGVTeW5jKGFyZ3Yub3V0cHV0LCB0c1R5cGVzKTtcblxuICAgICAgc3Bpbm5lci5zdWNjZWVkKFxuICAgICAgICBjaGFsay5ncmVlbihgVHlwZVNjcmlwdCB0eXBlcyB3ZXJlIG91dHB1dCBhdCBcIiR7YXJndi5vdXRwdXR9XCJgKVxuICAgICAgKTtcbiAgICB9XG4gIClcbiAgLmRlbWFuZENvbW1hbmQoMSlcbiAgLnBhcnNlKCk7XG4iXX0=
86
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vbGliL2NsaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBRUEsT0FBTyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBQzFCLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDeEMsT0FBTyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBQzFCLE9BQU8sR0FBRyxNQUFNLEtBQUssQ0FBQztBQUN0QixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQzFDLE9BQU8sS0FBSyxFQUFFLE1BQU0sSUFBSSxDQUFDO0FBQ3pCLE9BQU8saUJBQWlCLE1BQU0sYUFBYSxDQUFDO0FBQzVDLE9BQU8sS0FBSyxJQUFJLE1BQU0sU0FBUyxDQUFDO0FBRWhDLE1BQU0sVUFBVSxHQUFHLGlCQUFpQixDQUFDO0lBQ25DLGdCQUFnQixFQUFFLEtBQUs7SUFDdkIsZUFBZSxFQUFFLElBQUk7Q0FDdEIsQ0FBQyxDQUFDO0FBRUgsS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDekIsT0FBTyxDQUNOLGtCQUFrQixFQUNsQixtRUFBbUUsRUFDbkUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUNSLEtBQUs7S0FDRixNQUFNLENBQUMsUUFBUSxFQUFFO0lBQ2hCLEtBQUssRUFBRSxHQUFHO0lBQ1YsWUFBWSxFQUFFLElBQUk7SUFDbEIsV0FBVyxFQUFFLHVEQUF1RDtJQUNwRSxJQUFJLEVBQUUsUUFBUTtDQUNmLENBQUM7S0FDRCxNQUFNLENBQUMsUUFBUSxFQUFFO0lBQ2hCLEtBQUssRUFBRSxHQUFHO0lBQ1YsWUFBWSxFQUFFLElBQUk7SUFDbEIsV0FBVyxFQUFFLHNDQUFzQztJQUNuRCxJQUFJLEVBQUUsUUFBUTtDQUNmLENBQUM7S0FDRCxNQUFNLENBQUMsUUFBUSxFQUFFO0lBQ2hCLEtBQUssRUFBRSxHQUFHO0lBQ1YsWUFBWSxFQUFFLElBQUk7SUFD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Q0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUNoRSxDQUFDO0FBQ0osQ0FBQyxDQUNGO0tBQ0EsYUFBYSxDQUFDLENBQUMsQ0FBQztLQUNoQixLQUFLLEVBQUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIiMhL3Vzci9iaW4vZW52IC1TIG5vZGUgLS1leHBlcmltZW50YWwtc3BlY2lmaWVyLXJlc29sdXRpb249bm9kZVxuXG5pbXBvcnQgeWFyZ3MgZnJvbSAneWFyZ3MnO1xuaW1wb3J0IHsgaGlkZUJpbiB9IGZyb20gJ3lhcmdzL2hlbHBlcnMnO1xuaW1wb3J0IGNoYWxrIGZyb20gJ2NoYWxrJztcbmltcG9ydCBvcmEgZnJvbSAnb3JhJztcbmltcG9ydCB7IENvbmZpZ1ZhbGlkYXRvciB9IGZyb20gJy4vaW5kZXgnO1xuaW1wb3J0ICogYXMgZnMgZnJvbSAnZnMnO1xuaW1wb3J0IEpzb25CaWdJbnRGYWN0b3J5IGZyb20gJ2pzb24tYmlnaW50JztcbmltcG9ydCAqIGFzIHlhbWwgZnJvbSAnanMteWFtbCc7XG5cbmNvbnN0IEpzb25CaWdJbnQgPSBKc29uQmlnSW50RmFjdG9yeSh7XG4gIGFsd2F5c1BhcnNlQXNCaWc6IGZhbHNlLFxuICB1c2VOYXRpdmVCaWdJbnQ6IHRydWUsXG59KTtcblxueWFyZ3MoaGlkZUJpbihwcm9jZXNzLmFyZ3YpKVxuICAuY29tbWFuZChcbiAgICAnZ2VuZXJhdGUtZGVmYXVsdCcsXG4gICAgJ2dlbmVyYXRlcyBhbiBvYmplY3QgdXNpbmcgdGhlIGRlZmF1bHQgdmFsdWVzIG9mIHRoZSBwYXNzZWQgc2NoZW1hJyxcbiAgICAoeWFyZ3MpID0+XG4gICAgICB5YXJnc1xuICAgICAgICAub3B0aW9uKCdzY2hlbWEnLCB7XG4gICAgICAgICAgYWxpYXM6ICdzJyxcbiAgICAgICAgICBkZW1hbmRPcHRpb246IHRydWUsXG4gICAgICAgICAgZGVzY3JpcHRpb246ICdpbnB1dCBzY2hlbWEgZmlsZSBwYXRoIHdoaWNoIHNob3VsZCBiZSBpbiBqc29uIGZvcm1hdCcsXG4gICAgICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICAgIH0pXG4gICAgICAgIC5vcHRpb24oJ291dHB1dCcsIHtcbiAgICAgICAgICBhbGlhczogJ28nLFxuICAgICAgICAgIGRlbWFuZE9wdGlvbjogdHJ1ZSxcbiAgICAgICAgICBkZXNjcmlwdGlvbjogJ2dlbmVyYXRlZCBkZWZhdWx0IHZhbHVlcyBvdXRwdXQgcGF0aCcsXG4gICAgICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICAgIH0pXG4gICAgICAgIC5vcHRpb24oJ2Zvcm1hdCcsIHtcbiAgICAgICAgICBhbGlhczogJ2YnLFxuICAgICAgICAgIGRlbWFuZE9wdGlvbjogdHJ1ZSxcbiAgICAgICAgICBkZXNjcmlwdGlvbjogJ2dlbmVyYXRlZCBkZWZhdWx0IHZhbHVlcyBvdXRwdXQgcGF0aCcsXG4gICAgICAgICAgY2hvaWNlczogWydqc29uJywgJ3lhbWwnXSxcbiAgICAgICAgICBkZWZhdWx0OiAneWFtbCcsXG4gICAgICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICAgIH0pLFxuICAgIGFzeW5jIChhcmd2KSA9PiB7XG4gICAgICBjb25zdCBzcGlubmVyID0gb3JhKCk7XG4gICAgICBzcGlubmVyLnN0YXJ0KGBHZW5lcmF0aW5nIGNvbmZpZyBkZWZhdWx0IHZhbHVlc2ApO1xuXG4gICAgICBjb25zdCByYXdTY2hlbWFEYXRhID0gZnMucmVhZEZpbGVTeW5jKGFyZ3Yuc2NoZW1hLCAndXRmLTgnKTtcbiAgICAgIGNvbnN0IHNjaGVtYSA9IEpzb25CaWdJbnQucGFyc2UocmF3U2NoZW1hRGF0YSk7XG5cbiAgICAgIGNvbnN0IGNvbmZWYWxpZGF0b3IgPSBuZXcgQ29uZmlnVmFsaWRhdG9yKHNjaGVtYSk7XG4gICAgICBjb25zdCBkZWZhdWx0Q29uZiA9IGNvbmZWYWxpZGF0b3IuZ2VuZXJhdGVEZWZhdWx0KCk7XG5cbiAgICAgIGxldCBvdXRwdXQgPSAnJztcbiAgICAgIHN3aXRjaCAoYXJndi5mb3JtYXQpIHtcbiAgICAgICAgY2FzZSAnanNvbic6IHtcbiAgICAgICAgICBvdXRwdXQgPSBKc29uQmlnSW50LnN0cmluZ2lmeShkZWZhdWx0Q29uZik7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAneWFtbCc6IHtcbiAgICAgICAgICBvdXRwdXQgPSB5YW1sLmR1bXAoZGVmYXVsdENvbmYpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGZzLndyaXRlRmlsZVN5bmMoYXJndi5vdXRwdXQsIG91dHB1dCk7XG5cbiAgICAgIHNwaW5uZXIuc3VjY2VlZChcbiAgICAgICAgY2hhbGsuZ3JlZW4oYGRlZmF1bHQgY29uZmlnIHZhbHVlcyB3ZXJlIG91dHB1dCBhdCBcIiR7YXJndi5vdXRwdXR9XCJgKSxcbiAgICAgICk7XG4gICAgfSxcbiAgKVxuICAuY29tbWFuZChcbiAgICAnZ2VuZXJhdGUtdHMtdHlwZXMnLFxuICAgICdnZW5lcmF0ZXMgY29tcGF0aWJsZSBUeXBlU2NyaXB0IGludGVyZmFjZSB0eXBlcyBmb3IgdGhlIHBhc3NlZCBzY2hlbWEnLFxuICAgICh5YXJncykgPT5cbiAgICAgIHlhcmdzXG4gICAgICAgIC5vcHRpb24oJ3NjaGVtYScsIHtcbiAgICAgICAgICBhbGlhczogJ3MnLFxuICAgICAgICAgIGRlbWFuZE9wdGlvbjogdHJ1ZSxcbiAgICAgICAgICBkZXNjcmlwdGlvbjogJ2lucHV0IHNjaGVtYSBmaWxlIHBhdGggd2hpY2ggc2hvdWxkIGJlIGluIGpzb24gZm9ybWF0JyxcbiAgICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgICAgfSlcbiAgICAgICAgLm9wdGlvbignb3V0cHV0Jywge1xuICAgICAgICAgIGFsaWFzOiAnbycsXG4gICAgICAgICAgZGVtYW5kT3B0aW9uOiB0cnVlLFxuICAgICAgICAgIGRlc2NyaXB0aW9uOiAnZ2VuZXJhdGVkIFR5cGVTY3JpcHQgaW50ZXJmYWNlcycsXG4gICAgICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICAgIH0pXG4gICAgICAgIC5vcHRpb24oJ3Jvb3QtdHlwZScsIHtcbiAgICAgICAgICBhbGlhczogJ3InLFxuICAgICAgICAgIGRlbWFuZE9wdGlvbjogdHJ1ZSxcbiAgICAgICAgICBkZXNjcmlwdGlvbjogJ05hbWUgb2YgdG9wIHJvb3QgaW50ZXJmYWNlJyxcbiAgICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgICAgfSksXG4gICAgYXN5bmMgKGFyZ3YpID0+IHtcbiAgICAgIGNvbnN0IHNwaW5uZXIgPSBvcmEoKTtcbiAgICAgIHNwaW5uZXIuc3RhcnQoYEdlbmVyYXRpbmcgVHlwZVNjcmlwdCB0eXBlc2ApO1xuXG4gICAgICBjb25zdCByYXdTY2hlbWFEYXRhID0gZnMucmVhZEZpbGVTeW5jKGFyZ3Yuc2NoZW1hLCAndXRmLTgnKTtcbiAgICAgIGNvbnN0IHNjaGVtYSA9IEpzb25CaWdJbnQucGFyc2UocmF3U2NoZW1hRGF0YSk7XG5cbiAgICAgIGNvbnN0IGNvbmZWYWxpZGF0b3IgPSBuZXcgQ29uZmlnVmFsaWRhdG9yKHNjaGVtYSk7XG4gICAgICBjb25zdCB0c1R5cGVzID0gY29uZlZhbGlkYXRvci5nZW5lcmF0ZVRTVHlwZXMoYXJndi5yb290VHlwZSk7XG5cbiAgICAgIGZzLndyaXRlRmlsZVN5bmMoYXJndi5vdXRwdXQsIHRzVHlwZXMpO1xuXG4gICAgICBzcGlubmVyLnN1Y2NlZWQoXG4gICAgICAgIGNoYWxrLmdyZWVuKGBUeXBlU2NyaXB0IHR5cGVzIHdlcmUgb3V0cHV0IGF0IFwiJHthcmd2Lm91dHB1dH1cImApLFxuICAgICAgKTtcbiAgICB9LFxuICApXG4gIC5kZW1hbmRDb21tYW5kKDEpXG4gIC5wYXJzZSgpO1xuIl19
package/dist/config.js CHANGED
@@ -591,4 +591,4 @@ export class ConfigValidator {
591
591
  }
592
592
  };
593
593
  }
594
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vbGliL2NvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEtBQUssRUFBRSxNQUFNLElBQUksQ0FBQztBQUN6QixPQUFPLEtBQUssSUFBSSxNQUFNLFNBQVMsQ0FBQztBQUNoQyxPQUFPLGlCQUFpQixNQUFNLGFBQWEsQ0FBQztBQUM1QyxPQUFPLElBQUksTUFBTSxNQUFNLENBQUM7QUFDeEIsT0FBTyxFQUNMLGtCQUFrQixFQUNsQixjQUFjLEdBQ2YsTUFBTSxxQ0FBcUMsQ0FBQztBQUc3QyxPQUFPLEVBQUUsYUFBYSxFQUFFLHlCQUF5QixFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQ25FLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxlQUFlLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUV2RSxNQUFNLE9BQU8sZUFBZTtJQUNOO0lBQXBCLFlBQW9CLE1BQW9CO1FBQXBCLFdBQU0sR0FBTixNQUFNLENBQWM7UUFDdEMsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO0lBQ3hCLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksY0FBYyxDQUFDLE1BQTJCO1FBQy9DLElBQUksQ0FBQyxhQUFhLENBQ2hCLE1BQU0sRUFDTixFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFDekMsTUFBTSxDQUNQLENBQUM7UUFFRixJQUFJLENBQUMsaUJBQWlCLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQzFELENBQUM7SUFFRDs7Ozs7Ozs7O09BU0c7SUFDSyxpQkFBaUIsQ0FDdkIsTUFBMkIsRUFDM0IsU0FBOEIsRUFDOUIsU0FBdUIsRUFDdkIsSUFBYztRQUVkLE1BQU0sYUFBYSxHQUFHLENBQUMsSUFBbUIsRUFBRSxFQUFFLENBQzVDLGlDQUFpQyxJQUFJLENBQUMsSUFBSSxD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LElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLEdBQUcsS0FBSyxJQUFJLEdBQUcsRUFBRSxDQUFDLENBQUM7UUFDM0QsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsR0FBRyxLQUFLLFdBQVcsR0FBRyxFQUFFLENBQUMsQ0FBQztRQUNsRSxNQUFNLGNBQWMsR0FBRyxFQUFFLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ2pELElBQUksY0FBYyxFQUFFLENBQUM7WUFDbkIsRUFBRSxDQUFDLFVBQVUsQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFDeEMsQ0FBQztRQUNELEVBQUUsQ0FBQyxhQUFhLENBQUMsVUFBVSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBRXJDLE1BQU0sY0FBYyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7UUFFckQsSUFBSSxDQUFDO1lBQ0gsSUFBSSxDQUFDLGNBQWMsQ0FBQyxjQUFjLENBQUMsQ0FBQztZQUNwQyxFQUFFLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQzVCLENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsRUFBRSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUMxQixJQUFJLGNBQWMsRUFBRSxDQUFDO2dCQUNuQixFQUFFLENBQUMsVUFBVSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsQ0FBQztZQUN4QyxDQUFDO1lBQ0QsTUFBTSxLQUFLLENBQUM7UUFDZCxDQUFDO0lBQ0gsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSUNvbmZpZywgSUNvbmZpZ1NvdXJjZSB9IGZyb20gJ2NvbmZpZyc7XG5pbXBvcnQgKiBhcyBmcyBmcm9tICdmcyc7XG5pbXBvcnQgKiBhcyB5YW1sIGZyb20gJ2pzLXlhbWwnO1xuaW1wb3J0IEpzb25CaWdJbnRGYWN0b3J5IGZyb20gJ2pzb24tYmlnaW50JztcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHtcbiAgcHJvcGVydHlWYWxpZGF0b3JzLFxuICBzdXBwb3J0ZWRUeXBlcyxcbn0gZnJvbSAnLi9zY2hlbWEvVmFsaWRhdG9ycy9maWVsZFByb3BlcnRpZXMnO1xuaW1wb3J0IHsgQ29uZmlnRmllbGQsIENvbmZpZ1NjaGVtYSB9IGZyb20gJy4vc2NoZW1hL3R5cGVzL2ZpZWxkcyc7XG5pbXBvcnQgeyBXaGVuIH0gZnJvbSAnLi9zY2hlbWEvdHlwZXMvdmFsaWRhdGlvbnMnO1xuaW1wb3J0IHsgZ2V0U291cmNlTmFtZSwgZ2V0VmFsdWVGcm9tQ29uZmlnU291cmNlcyB9IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IHsgdmFsdWVWYWxpZGF0aW9ucywgdmFsdWVWYWxpZGF0b3JzIH0gZnJvbSAnLi92YWx1ZS92YWxpZGF0b3JzJztcblxuZXhwb3J0IGNsYXNzIENvbmZpZ1ZhbGlkYXRvciB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgc2NoZW1hOiBDb25maWdTY2hlbWEpIHtcbiAgICB0aGlzLnZhbGlkYXRlU2NoZW1hKCk7XG4gIH1cblxuICAvKipcbiAgICogdmFsaWRhdGVzIHRoZSBwYXNzZWQgY29uZmlnIGFnYWluc3QgdGhlIGluc3RhbmNlJ3Mgc2NoZW1hXG4gICAqXG4gICAqIEBwYXJhbSB7UmVjb3JkPHN0cmluZywgYW55Pn0gY29uZmlnXG4gICAqL1xuICBwdWJsaWMgdmFsaWRhdGVDb25maWcoY29uZmlnOiBSZWNvcmQ8c3RyaW5nLCBhbnk+KSB7XG4gICAgdGhpcy52YWxpZGF0ZVZhbHVlKFxuICAgICAgY29uZmlnLFxuICAgICAgeyB0eXBlOiAnb2JqZWN0JywgY2hpbGRyZW46IHRoaXMuc2NoZW1hIH0sXG4gICAgICBjb25maWdcbiAgICApO1xuXG4gICAgdGhpcy52YWxpZGF0ZVN1YkNvbmZpZyhjb25maWcsIGNvbmZpZywgdGhpcy5zY2hlbWEsIFtdKTtcbiAgfVxuXG4gIC8qKlxuICAgKiB0cmF2ZXJzZXMgYW5kIHZhbGlkYXRlcyBhIHN1YmNvbmZpZyB1c2luZyB0aGUgc3Vic2NoZW1hXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7UmVjb3JkPHN0cmluZywgYW55Pn0gY29uZmlnXG4gICAqIEBwYXJhbSB7UmVjb3JkPHN0cmluZywgYW55Pn0gc3ViQ29uZmlnXG4gICAqIEBwYXJhbSB7Q29uZmlnU2NoZW1hfSBzdWJTY2hlbWFcbiAgICogQHBhcmFtIHtzdHJpbmdbXX0gcGF0aFxuICAgKiBAbWVtYmVyb2YgQ29uZmlnVmFsaWRhdG9yXG4gICAqL1xuICBwcml2YXRlIHZhbGlkYXRlU3ViQ29uZmlnKFxuICAgIGNvbmZpZzogUmVjb3JkPHN0cmluZywgYW55PixcbiAgICBzdWJDb25maWc6IFJlY29yZDxzdHJpbmcsIGFueT4sXG4gICAgc3ViU2NoZW1hOiBDb25maWdTY2hlbWEsXG4gICAgcGF0aDogc3RyaW5nW11cbiAgKSB7XG4gICAgY29uc3QgZXJyb3JQcmVhbWJsZSA9IChwYXRoOiBBcnJheTxzdHJpbmc+KSA9PlxuICAgICAgYGNvbmZpZyB2YWxpZGF0aW9uIGZhaWxlZCBmb3IgXCIke3BhdGguam9pbignLicpfVwiIGZpZWxkYDtcbiAgICBmb3IgKGNvbnN0IG5hbWUgb2YgT2JqZWN0LmtleXMoc3ViU2NoZW1hKSkge1xuICAgICAgY29uc3QgY2hpbGRQYXRoID0gcGF0aC5jb25jYXQoW25hbWVdKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGZpZWxkID0gc3ViU2NoZW1hW25hbWVdO1xuICAgICAgICBsZXQgdmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgICAgIGlmIChzdWJDb25maWcgIT0gdW5kZWZpbmVkICYmIE9iamVjdC5oYXNPd24oc3ViQ29uZmlnLCBuYW1lKSkge1xuICAgICAgICAgIHZhbHVlID0gc3ViQ29uZmlnW25hbWVdO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy52YWxpZGF0ZVZhbHVlKHZhbHVlLCBmaWVsZCwgY29uZmlnKTtcblxuICAgICAgICAvLyBpZiBhIG5vZGUvZmllbGQgaXMgb2YgdHlwZSBvYmplY3QgYW5kIHRodXMgaXMgYSBzdWJ0cmVlLCB0cmF2ZXJzZSBpdFxuICAgICAgICBpZiAoZmllbGQudHlwZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICB0aGlzLnZhbGlkYXRlU3ViQ29uZmlnKGNvbmZpZywgdmFsdWUsIGZpZWxkLmNoaWxkcmVuLCBjaGlsZFBhdGgpO1xuICAgICAgICB9IGVsc2UgaWYgKGZpZWxkLnR5cGUgPT09ICdhcnJheScpIHtcbiAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiB2YWx1ZSkge1xuICAgICAgICAgICAgICBDb25maWdWYWxpZGF0b3IubW9kaWZ5T2JqZWN0KGNvbmZpZywgaXRlbSwgY2hpbGRQYXRoKTtcbiAgICAgICAgICAgICAgdGhpcy52YWxpZGF0ZVN1YkNvbmZpZyhcbiAgICAgICAgICAgICAgICBjb25maWcsXG4gICAgICAgICAgICAgICAgeyBbbmFtZV06IGl0ZW0gfSxcbiAgICAgICAgICAgICAgICB7IFtuYW1lXTogZmllbGQuaXRlbXMgfSxcbiAgICAgICAgICAgICAgICBjaGlsZFBhdGhcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgQ29uZmlnVmFsaWRhdG9yLm1vZGlmeU9iamVjdChjb25maWcsIHZhbHVlLCBjaGlsZFBhdGgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7ZXJyb3JQcmVhbWJsZShjaGlsZFBhdGgpfTogJHtlcnJvci5tZXNzYWdlfWApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBzZXRzIGFuIG9iamVjdCdzIHNwZWNpZmljIHN1YnRyZWUgdG8gdGhlIHNwZWNpZmllZCB2YWx1ZVxuICAgKlxuICAgKiBAc3RhdGljXG4gICAqIEBwYXJhbSB7UmVjb3JkPHN0cmluZywgYW55Pn0gb2JqXG4gICAqIEBwYXJhbSB7Kn0gbmV3VmFsdWVcbiAgICogQHBhcmFtIHtzdHJpbmdbXX0gcGF0aFxuICAgKiBAcmV0dXJuIHsqfVxuICAgKiBAbWVtYmVyb2YgQ29uZmlnVmFsaWRhdG9yXG4gICAqL1xuICBzdGF0aWMgbW9kaWZ5T2JqZWN0KG9iajogUmVjb3JkPHN0cmluZywgYW55PiwgbmV3VmFsdWU6IGFueSwgcGF0aDogc3RyaW5nW10pIHtcbiAgICBsZXQgdmFsdWU6IGFueSA9IG9iajtcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBwYXRoLnNsaWNlKDAsIC0xKSkge1xuICAgICAgaWYgKHZhbHVlICE9IHVuZGVmaW5lZCAmJiBPYmplY3QuaGFzT3duKHZhbHVlLCBrZXkpKSB7XG4gICAgICAgIHZhbHVlID0gdmFsdWVba2V5XTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBsYXN0S2V5ID0gcGF0aC5hdCgtMSk7XG4gICAgaWYgKGxhc3RLZXkgIT0gdW5kZWZpbmVkKSB7XG4gICAgICB2YWx1ZVtsYXN0S2V5XSA9IG5ld1ZhbHVlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiB2YWxpZGF0ZXMgYSB2YWx1ZSBpbiBjb25maWcgb2JqZWN0XG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAgICogQHBhcmFtIHtDb25maWdGaWVsZH0gZmllbGQgdGhlIGZpZWxkIHNwZWNpZmljYXRpb24gaW4gc2NoZW1hXG4gICAqIEBwYXJhbSB7UmVjb3JkPHN0cmluZywgYW55Pn0gY29uZmlnIHRoZSBjb25maWcgb2JqZWN0XG4gICAqL1xuICBwcml2YXRlIHZhbGlkYXRlVmFsdWUgPSAoXG4gICAgdmFsdWU6IGFueSxcbiAgICBmaWVsZDogQ29uZmlnRmllbGQsXG4gICAgY29uZmlnOiBSZWNvcmQ8c3RyaW5nLCBhbnk+XG4gICkgPT4ge1xuICAgIGlmICh2YWx1ZSAhPSB1bmRlZmluZWQpIHtcbiAgICAgIGlmIChmaWVsZC50eXBlID09PSAnYmlnaW50Jykge1xuICAgICAgICB2YWx1ZSA9IEJpZ0ludCh2YWx1ZSk7XG4gICAgICB9IGVsc2UgaWYgKGZpZWxkLnR5cGUgPT09ICdudW1iZXInICYmIHZhbHVlICYmICFpc05hTih2YWx1ZSkpIHtcbiAgICAgICAgdmFsdWUgPSBOdW1iZXIodmFsdWUpO1xuICAgICAgfVxuICAgICAgdmFsdWVWYWxpZGF0b3JzW2ZpZWxkLnR5cGVdKHZhbHVlLCBmaWVsZCk7XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgZmllbGQudHlwZSAhPT0gJ29iamVjdCcgJiZcbiAgICAgIGZpZWxkLnR5cGUgIT09ICdhcnJheScgJiZcbiAgICAgIGZpZWxkLnZhbGlkYXRpb25zXG4gICAgKSB7XG4gICAgICBmb3IgKGNvbnN0IHZhbGlkYXRpb24gb2YgZmllbGQudmFsaWRhdGlvbnMpIHtcbiAgICAgICAgY29uc3QgbmFtZSA9IE9iamVjdC5rZXlzKHZhbGlkYXRpb24pLmZpbHRlcihcbiAgICAgICAgICAoa2V5KSA9PiBrZXkgIT09ICd3aGVuJyAmJiBrZXkgIT09ICdlcnJvcidcbiAgICAgICAgKVswXTtcbiAgICAgICAgaWYgKE9iamVjdC5oYXNPd24odmFsdWVWYWxpZGF0aW9uc1tmaWVsZC50eXBlXSwgbmFtZSkpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgdmFsdWVWYWxpZGF0aW9uc1tmaWVsZC50eXBlXVtuYW1lXSh2YWx1ZSwgdmFsaWRhdGlvbiwgY29uZmlnLCB0aGlzKTtcbiAgICAgICAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICAgICAgICBpZiAodmFsaWRhdGlvbi5lcnJvciAhPSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKHZhbGlkYXRpb24uZXJyb3IpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIC8qKlxuICAgKiBkZXRlcm1pbmVzIGlmIGEgd2hlbiBjbGF1c2UgaW4gdmFsaWRhdGlvbnMgc2VjdGlvbiBvZiBhIHNjaGVtYSBmaWVsZCBpc1xuICAgKiBzYXRpc2ZpZWRcbiAgICpcbiAgICogQHBhcmFtIHtXaGVufSB3aGVuXG4gICAqIEBwYXJhbSB7UmVjb3JkPHN0cmluZywgYW55Pn0gY29uZmlnXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAqL1xuICBwdWJsaWMgaXNXaGVuVHJ1ZSA9ICh3aGVuOiBXaGVuLCBjb25maWc6IFJlY29yZDxzdHJpbmcsIGFueT4pOiBib29sZWFuID0+IHtcbiAgICBjb25zdCBwYXRoUGFydHMgPSB3aGVuLnBhdGguc3BsaXQoJy4nKTtcbiAgICBjb25zdCB2YWx1ZSA9IENvbmZpZ1ZhbGlkYXRvci52YWx1ZUF0KGNvbmZpZywgcGF0aFBhcnRzKTtcbiAgICByZXR1cm4gdmFsdWUgIT0gdW5kZWZpbmVkICYmIHZhbHVlID09PSB3aGVuLnZhbHVlO1xuICB9O1xuXG4gIC8qKlxuICAgKiByZXR1cm5zIHRoZSB2YWx1ZSBhdCBzcGVjaWZpZWQgcGF0aCBpbiBjb25maWcgb2JqZWN0XG4gICAqXG4gICAqIEBzdGF0aWNcbiAgICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCBhbnk+fSBjb25maWdcbiAgICogQHBhcmFtIHtzdHJpbmdbXX0gcGF0aFxuICAgKiBAcmV0dXJuIHsqfVxuICAgKi9cbiAgc3RhdGljIHZhbHVlQXQgPSAoY29uZmlnOiBSZWNvcmQ8c3RyaW5nLCBhbnk+LCBwYXRoOiBzdHJpbmdbXSkgPT4ge1xuICAgIGxldCB2YWx1ZTogYW55ID0gY29uZmlnO1xuICAgIGZvciAoY29uc3Qga2V5IG9mIHBhdGgpIHtcbiAgICAgIGlmICh2YWx1ZSAhPSB1bmRlZmluZWQgJiYgT2JqZWN0Lmhhc093bih2YWx1ZSwga2V5KSkge1xuICAgICAgICB2YWx1ZSA9IHZhbHVlW2tleV07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB2YWx1ZTtcbiAgfTtcblxuICAvKipcbiAgICogdmFsaWRhdGVzIHRoaXMuc2NoZW1hIGFuZCB0aHJvd3MgZXhjZXB0aW9uIGlmIGFueSBlcnJvcnMgZm91bmRcbiAgICovXG4gIHByaXZhdGUgdmFsaWRhdGVTY2hlbWEgPSAoKSA9PiB7XG4gICAgY29uc3QgZXJyb3JQcmVhbWJsZSA9IChwYXRoOiBBcnJheTxzdHJpbmc+KSA9PlxuICAgICAgYFNjaGVtYSB2YWxpZGF0aW9uIGZhaWxlZCBmb3IgXCIke3BhdGguam9pbignLicpfVwiIGZpZWxkYDtcblxuICAgIGNvbnN0IHN0YWNrOiBBcnJheTx7XG4gICAgICBzdWJTY2hlbWE6IENvbmZpZ1NjaGVtYTtcbiAgICAgIHBhcmVudFBhdGg6IEFycmF5PHN0cmluZz47XG4gICAgfT4gPSBbXG4gICAgICB7XG4gICAgICAgIHN1YlNjaGVtYTogdGhpcy5zY2hlbWEsXG4gICAgICAgIHBhcmVudFBhdGg6IFtdLFxuICAgICAgfSxcbiAgICBdO1xuXG4gICAgLy8gVHJhdmVyc2VzIHRoZSBzY2hlbWEgb2JqZWN0IHRyZWUgZGVwdGggZmlyc3QgYW5kIHZhbGlkYXRlIGZpZWxkc1xuICAgIHdoaWxlIChzdGFjay5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCB7IHN1YlNjaGVtYSwgcGFyZW50UGF0aCB9ID0gc3RhY2sucG9wKCkhO1xuXG4gICAgICAvLyBwcm9jZXNzIGNoaWxkcmVuIG9mIGN1cnJlbnQgb2JqZWN0IGZpZWxkXG4gICAgICBmb3IgKGNvbnN0IG5hbWUgb2YgT2JqZWN0LmtleXMoc3ViU2NoZW1hKS5yZXZlcnNlKCkpIHtcbiAgICAgICAgY29uc3QgcGF0aCA9IHBhcmVudFBhdGguY29uY2F0KFtuYW1lXSk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgdGhpcy52YWxpZGF0ZUNvbmZpZ05hbWUobmFtZSk7XG4gICAgICAgICAgY29uc3QgZmllbGQgPSBzdWJTY2hlbWFbbmFtZV07XG5cbiAgICAgICAgICBpZiAoIU9iamVjdC5oYXNPd24oZmllbGQsICd0eXBlJykgfHwgdHlwZW9mIGZpZWxkLnR5cGUgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgIGBldmVyeSBzY2hlbWEgZmllbGQgbXVzdCBoYXZlIGEgXCJ0eXBlXCIgcHJvcGVydHkgb2YgdHlwZSBcInN0cmluZ1wiYFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoIXN1cHBvcnRlZFR5cGVzLmluY2x1ZGVzKGZpZWxkLnR5cGUpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYHVuc3VwcG9ydGVkIGZpZWxkIHR5cGUgXCIke2ZpZWxkLnR5cGV9XCJgKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aGlzLnZhbGlkYXRlU2NoZW1hRmllbGQoZmllbGQpO1xuXG4gICAgICAgICAgLy8gaWYgdGhlIGNoaWxkIGlzIGFuIG9iamVjdCBmaWVsZCBpdHNlbGYgYWRkIGl0IHRvIHN0YWNrIGZvclxuICAgICAgICAgIC8vIHByb2Nlc3NpbmdcbiAgICAgICAgICBpZiAoZmllbGQudHlwZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIHN0YWNrLnB1c2goe1xuICAgICAgICAgICAgICBzdWJTY2hlbWE6IGZpZWxkLmNoaWxkcmVuLFxuICAgICAgICAgICAgICBwYXJlbnRQYXRoOiBwYXRoLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBlbHNlIGlmIChmaWVsZC50eXBlID09PSAnYXJyYXknKSB7XG4gICAgICAgICAgICBzdGFjay5wdXNoKHtcbiAgICAgICAgICAgICAgc3ViU2NoZW1hOiB7IFtuYW1lXTogZmllbGQuaXRlbXMgfSxcbiAgICAgICAgICAgICAgcGFyZW50UGF0aDogcGF0aCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgJHtlcnJvclByZWFtYmxlKHBhdGgpfTogJHtlcnJvci5tZXNzYWdlfWApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIC8qKlxuICAgKiB2YWxpZGF0ZXMgY29uZmlnIGtleSBuYW1lXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gICAqL1xuICBwcml2YXRlIHZhbGlkYXRlQ29uZmlnTmFtZSA9IChuYW1lOiBzdHJpbmcpID0+IHtcbiAgICBpZiAobmFtZS5pbmNsdWRlcygnLicpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYGNvbmZpZyBrZXkgbmFtZSBjYW4gbm90IGNvbnRhaW4gdGhlICcuJyBjaGFyYWN0ZXJgKTtcbiAgICB9XG4gIH07XG5cbiAgLyoqXG4gICAqIHZhbGlkYXRlcyBwYXNzZWQgc2NoZW1hIGZpZWxkIHN0cnVjdHVyZVxuICAgKlxuICAgKiBAcGFyYW0ge0NvbmZpZ0ZpZWxkfSBmaWVsZFxuICAgKi9cbiAgcHJpdmF0ZSB2YWxpZGF0ZVNjaGVtYUZpZWxkID0gKGZpZWxkOiBDb25maWdGaWVsZCkgPT4ge1xuICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKGZpZWxkKSkge1xuICAgICAgaWYgKFxuICAgICAgICAhT2JqZWN0Lmhhc093bihwcm9wZXJ0eVZhbGlkYXRvcnMuYWxsLCBrZXkpICYmXG4gICAgICAgICEoXG4gICAgICAgICAgIVsnb2JqZWN0JywgJ2FycmF5J10uaW5jbHVkZXMoZmllbGQudHlwZSkgJiZcbiAgICAgICAgICBPYmplY3QuaGFzT3duKHByb3BlcnR5VmFsaWRhdG9ycy5wcmltaXRpdmUsIGtleSlcbiAgICAgICAgKSAmJlxuICAgICAgICAhT2JqZWN0Lmhhc093bihwcm9wZXJ0eVZhbGlkYXRvcnNbZmllbGQudHlwZV0sIGtleSlcbiAgICAgICkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYHNjaGVtYSBmaWVsZCBoYXMgdW5rbm93biBwcm9wZXJ0eSBcIiR7a2V5fVwiYCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCB2YWxpZGF0b3Igb2YgT2JqZWN0LnZhbHVlcyhwcm9wZXJ0eVZhbGlkYXRvcnMuYWxsKSkge1xuICAgICAgdmFsaWRhdG9yKGZpZWxkLCB0aGlzKTtcbiAgICB9XG5cbiAgICBpZiAoZmllbGQudHlwZSAhPT0gJ29iamVjdCcgJiYgZmllbGQudHlwZSAhPT0gJ2FycmF5Jykge1xuICAgICAgZm9yIChjb25zdCB2YWxpZGF0b3Igb2YgT2JqZWN0LnZhbHVlcyhwcm9wZXJ0eVZhbGlkYXRvcnMucHJpbWl0aXZlKSkge1xuICAgICAgICB2YWxpZGF0b3IoZmllbGQsIHRoaXMpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZvciAoY29uc3QgdmFsaWRhdG9yIG9mIE9iamVjdC52YWx1ZXMocHJvcGVydHlWYWxpZGF0b3JzW2ZpZWxkLnR5cGVdKSkge1xuICAgICAgdmFsaWRhdG9yKGZpZWxkLCB0aGlzKTtcbiAgICB9XG4gIH07XG5cbiAgLyoqXG4gICAqIHJldHVybnMgYSBmaWVsZCBjb3JyZXNwb25kaW5nIHRvIGEgcGF0aCBpbiBzY2hlbWEgdHJlZVxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBwYXRoXG4gICAqIEByZXR1cm4geyhDb25maWdGaWVsZCB8IHVuZGVmaW5lZCl9IHJldHVybnMgdW5kZWZpbmVkIGlmIGZpZWxkIGlzIG5vdCBmb3VuZFxuICAgKi9cbiAgZ2V0U2NoZW1hRmllbGQgPSAocGF0aDogc3RyaW5nW10pOiBDb25maWdGaWVsZCB8IHVuZGVmaW5lZCA9PiB7XG4gICAgbGV0IHN1YlRyZWU6IENvbmZpZ1NjaGVtYSB8IHVuZGVmaW5lZCA9IHRoaXMuc2NoZW1hO1xuICAgIGxldCBmaWVsZDogQ29uZmlnRmllbGQgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG4gICAgZm9yIChjb25zdCBwYXJ0IG9mIHBhdGgpIHtcbiAgICAgIGlmIChzdWJUcmVlICE9IHVuZGVmaW5lZCAmJiBPYmplY3QuaGFzT3duKHN1YlRyZWUsIHBhcnQpKSB7XG4gICAgICAgIGZpZWxkID0gc3ViVHJlZVtwYXJ0XTtcbiAgICAgICAgc3ViVHJlZSA9XG4gICAgICAgICAgJ2NoaWxkcmVuJyBpbiBmaWVsZFxuICAgICAgICAgICAgPyBmaWVsZC5jaGlsZHJlblxuICAgICAgICAgICAgOiAnaXRlbXMnIGluIGZpZWxkICYmICdjaGlsZHJlbicgaW4gZmllbGQuaXRlbXNcbiAgICAgICAgICAgID8gZmllbGQuaXRlbXMuY2hpbGRyZW5cbiAgICAgICAgICAgIDogdW5kZWZpbmVkO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZpZWxkO1xuICB9O1xuXG4gIC8qKlxuICAgKiBleHRyYWN0cyBkZWZhdWx0IHZhbHVlcyBmcm9tIGEgc2NoZW1hXG4gICAqXG4gICAqIEByZXR1cm4ge1JlY29yZDxzdHJpbmcsIGFueT59IG9iamVjdCBvZiBkZWZhdWx0IHZhbHVlc1xuICAgKi9cbiAgZ2VuZXJhdGVEZWZhdWx0ID0gKG9wdGlvbnM/OiB7IHZhbGlkYXRlPzogYm9vbGVhbiB9KTogUmVjb3JkPHN0cmluZywgYW55PiA9PiB7XG4gICAgY29uc3QgdmFsdWVUcmVlID0gdGhpcy5idWlsZERlZmF1bHRzRm9yU2NoZW1hKHRoaXMuc2NoZW1hKTtcbiAgICBpZiAob3B0aW9ucz8udmFsaWRhdGUpIHtcbiAgICAgIHRoaXMudmFsaWRhdGVDb25maWcodmFsdWVUcmVlKTtcbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlVHJlZTtcbiAgfTtcblxuICAvLyBCdWlsZHMgZGVmYXVsdCB2YWx1ZXMgZm9yIGEgc2NoZW1hIHN1YnRyZWUgKG9iamVjdHMgYW5kIGFycmF5cyksIHJlY3Vyc2l2ZWx5XG4gIHByaXZhdGUgYnVpbGREZWZhdWx0c0ZvclNjaGVtYSA9IChcbiAgICBzY2hlbWE6IENvbmZpZ1NjaGVtYVxuICApOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0+IHtcbiAgICBjb25zdCBkZWZhdWx0czogUmVjb3JkPHN0cmluZywgYW55PiA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMoc2NoZW1hKSkge1xuICAgICAgY29uc3QgZmllbGQgPSBzY2hlbWFba2V5XTtcbiAgICAgIGlmIChmaWVsZC50eXBlID09PSAnb2JqZWN0Jykge1xuICAgICAgICBjb25zdCBjaGlsZERlZmF1bHRzID0gdGhpcy5idWlsZERlZmF1bHRzRm9yU2NoZW1hKGZpZWxkLmNoaWxkcmVuKTtcbiAgICAgICAgaWYgKE9iamVjdC5rZXlzKGNoaWxkRGVmYXVsdHMpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBkZWZhdWx0c1trZXldID0gY2hpbGREZWZhdWx0cztcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChmaWVsZC50eXBlID09PSAnYXJyYXknKSB7XG4gICAgICAgIGlmICgoZmllbGQgYXMgYW55KS5kZWZhdWx0ICE9IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGlmIChmaWVsZC5pdGVtcy50eXBlID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgY29uc3QgaXRlbURlZmF1bHRzID0gdGhpcy5idWlsZERlZmF1bHRzRm9yU2NoZW1hKFxuICAgICAgICAgICAgICBmaWVsZC5pdGVtcy5jaGlsZHJlblxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGRlZmF1bHRzW2tleV0gPSAoZmllbGQgYXMgYW55KS5kZWZhdWx0Lm1hcCgoZWxlbTogYW55KSA9PiB7XG4gICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBlbGVtICE9IG51bGwgJiZcbiAgICAgICAgICAgICAgICB0eXBlb2YgZWxlbSA9PT0gJ29iamVjdCcgJiZcbiAgICAgICAgICAgICAgICAhQXJyYXkuaXNBcnJheShlbGVtKVxuICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4geyAuLi5pdGVtRGVmYXVsdHMsIC4uLmVsZW0gfTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXR1cm4gZWxlbTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBkZWZhdWx0c1trZXldID0gKGZpZWxkIGFzIGFueSkuZGVmYXVsdDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICgoZmllbGQgYXMgYW55KS5kZWZhdWx0ICE9IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGRlZmF1bHRzW2tleV0gPSAoZmllbGQgYXMgYW55KS5kZWZhdWx0O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBkZWZhdWx0cztcbiAgfTtcblxuICAvKipcbiAgICogZ2VuZXJhdGVzIGNvbXBhdGlibGUgVHlwZVNjcmlwdCBpbnRlcmZhY2UgZm9yIHRoaXMgaW5zdGFuY2UncyBzY2hlbWFcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgdGhlIG5hbWUgb2Ygcm9vdCB0eXBlXG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICovXG4gIGdlbmVyYXRlVFNUeXBlcyA9IChuYW1lOiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuICAgIGNvbnN0IGVycm9yUHJlYW1ibGUgPSAocGF0aDogQXJyYXk8c3RyaW5nPikgPT5cbiAgICAgIGBUeXBlU2NyaXB0IHR5cGUgZ2VuZXJhdGlvbiBmYWlsZWQgZm9yIFwiJHtwYXRoLmpvaW4oJy4nKX1cIiBmaWVsZGA7XG5cbiAgICBjb25zdCB0eXBlczogQXJyYXk8c3RyaW5nPiA9IFtdO1xuICAgIGNvbnN0IGVtaXR0ZWRUeXBlTmFtZXM6IFNldDxzdHJpbmc+ID0gbmV3IFNldDxzdHJpbmc+KCk7XG5cbiAgICBjb25zdCBzdGFjazogQXJyYXk8e1xuICAgICAgc3ViU2NoZW1hOiBDb25maWdTY2hlbWE7XG4gICAgICBjaGlsZHJlbjogc3RyaW5nW107XG4gICAgICBwYXJlbnRQYXRoOiBBcnJheTxzdHJpbmc+O1xuICAgICAgdHlwZU5hbWU6IHN0cmluZztcbiAgICAgIGF0dHJpYnV0ZXM6IEFycmF5PFtzdHJpbmcsIHN0cmluZ10+O1xuICAgIH0+ID0gW1xuICAgICAge1xuICAgICAgICBzdWJTY2hlbWE6IHRoaXMuc2NoZW1hLFxuICAgICAgICBjaGlsZHJlbjogT2JqZWN0LmtleXModGhpcy5zY2hlbWEpLFxuICAgICAgICBwYXJlbnRQYXRoOiBbXSxcbiAgICAgICAgdHlwZU5hbWU6IG5hbWUsXG4gICAgICAgIGF0dHJpYnV0ZXM6IFtdLFxuICAgICAgfSxcbiAgICBdO1xuXG4gICAgLy8gVHJhdmVyc2VzIHRoZSBzY2hlbWEgb2JqZWN0IHRyZWUgZGVwdGggZmlyc3RcbiAgICB3aGlsZSAoc3RhY2subGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgeyBzdWJTY2hlbWEsIGNoaWxkcmVuLCBwYXJlbnRQYXRoLCB0eXBlTmFtZSwgYXR0cmlidXRlcyB9ID1cbiAgICAgICAgc3RhY2suYXQoLTEpITtcbiAgICAgIGxldCBwYXRoOiBzdHJpbmdbXSA9IHBhcmVudFBhdGg7XG4gICAgICB0cnkge1xuICAgICAgICAvLyBpZiBhIHN1YnRyZWUncyBwcm9jZXNzaW5nIGlzIGZpbmlzaGVkIGdvIHRvIHRoZSBwcmV2aW91cyBsZXZlbFxuICAgICAgICBpZiAoY2hpbGRyZW4ubGVuZ3RoID09IDApIHtcbiAgICAgICAgICBpZiAoIWVtaXR0ZWRUeXBlTmFtZXMuaGFzKHR5cGVOYW1lKSkge1xuICAgICAgICAgICAgdHlwZXMucHVzaCh0aGlzLmdlblRTSW50ZXJmYWNlKHR5cGVOYW1lLCBhdHRyaWJ1dGVzKSk7XG4gICAgICAgICAgICBlbWl0dGVkVHlwZU5hbWVzLmFkZCh0eXBlTmFtZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHN0YWNrLnBvcCgpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgY2hpbGROYW1lID0gY2hpbGRyZW4ucG9wKCkhO1xuICAgICAgICBwYXRoID0gcGFyZW50UGF0aC5jb25jYXQoW2NoaWxkTmFtZV0pO1xuICAgICAgICBjb25zdCBmaWVsZCA9IHN1YlNjaGVtYVtjaGlsZE5hbWVdO1xuXG4gICAgICAgIC8vIGlmIGEgbm9kZS9maWVsZCBpcyBvZiB0eXBlIG9iamVjdCBhbmQgdGh1cyBpcyBhIHN1YnRyZWUsIGFkZCBpdCB0b1xuICAgICAgICAvLyB0aGUgc3RhY2sgdG8gYmUgdHJhdmVyc2VkIGxhdGVyLiBPdGhlcndpc2UgaXQncyBhIGxlYWYgYW5kIG5lZWRzIG5vXG4gICAgICAgIC8vIHRyYXZlcnNhbC5cbiAgICAgICAgaWYgKFxuICAgICAgICAgIGZpZWxkLnR5cGUgPT09ICdvYmplY3QnIHx8XG4gICAgICAgICAgKGZpZWxkLnR5cGUgPT09ICdhcnJheScgJiYgZmllbGQuaXRlbXMudHlwZSA9PT0gJ29iamVjdCcpXG4gICAgICAgICkge1xuICAgICAgICAgIC8vIENyZWF0ZSB1bmlxdWUgdHlwZSBuYW1lIGZyb20gc2NoZW1hIHBhdGggZXhjbHVkaW5nIHJvb3QgaW50ZXJmYWNlIG5hbWVcbiAgICAgICAgICBjb25zdCBwYXRoUGFydHMgPSBwYXRoO1xuICAgICAgICAgIGNvbnN0IGNoaWxkVHlwZU5hbWUgPSBwYXRoUGFydHNcbiAgICAgICAgICAgIC5tYXAoKHBhcnQpID0+IHBhcnRbMF0udG9VcHBlckNhc2UoKSArIHBhcnQuc3Vic3RyaW5nKDEpKVxuICAgICAgICAgICAgLmpvaW4oJycpO1xuXG4gICAgICAgICAgY29uc3QgY2hpbGRyZW4gPVxuICAgICAgICAgICAgZmllbGQudHlwZSA9PT0gJ2FycmF5JyAmJiBmaWVsZC5pdGVtcy50eXBlID09PSAnb2JqZWN0J1xuICAgICAgICAgICAgICA/IGZpZWxkLml0ZW1zLmNoaWxkcmVuXG4gICAgICAgICAgICAgIDogZmllbGQudHlwZSA9PT0gJ29iamVjdCdcbiAgICAgICAgICAgICAgPyBmaWVsZC5jaGlsZHJlblxuICAgICAgICAgICAgICA6IHt9O1xuXG4gICAgICAgICAgc3RhY2sucHVzaCh7XG4gICAgICAgICAgICBzdWJTY2hlbWE6IGNoaWxkcmVuLFxuICAgICAgICAgICAgY2hpbGRyZW46IE9iamVjdC5rZXlzKGNoaWxkcmVuKS5yZXZlcnNlKCksXG4gICAgICAgICAgICBwYXJlbnRQYXRoOiBwYXRoLFxuICAgICAgICAgICAgdHlwZU5hbWU6IGNoaWxkVHlwZU5hbWUsXG4gICAgICAgICAgICBhdHRyaWJ1dGVzOiBbXSxcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGF0dHJpYnV0ZXMucHVzaChbXG4gICAgICAgICAgICBjaGlsZE5hbWUsXG4gICAgICAgICAgICBmaWVsZC50eXBlID09PSAnYXJyYXknID8gYCR7Y2hpbGRUeXBlTmFtZX1bXWAgOiBjaGlsZFR5cGVOYW1lLFxuICAgICAgICAgIF0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxldCBmaWVsZFR5cGU6IHN0cmluZyA9XG4gICAgICAgICAgICBmaWVsZC50eXBlID09PSAnYXJyYXknID8gZmllbGQuaXRlbXMudHlwZSA6IGZpZWxkLnR5cGU7XG4gICAgICAgICAgbGV0IGlzT3B0aW9uYWwgPSB0cnVlO1xuICAgICAgICAgIGlmIChmaWVsZC50eXBlICE9PSAnYXJyYXknICYmIGZpZWxkLnZhbGlkYXRpb25zICE9IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgZm9yIChjb25zdCB2YWxpZGF0aW9uIG9mIGZpZWxkLnZhbGlkYXRpb25zKSB7XG4gICAgICAgICAgICAgIGlmIChmaWVsZC50eXBlID09PSAnc3RyaW5nJyAmJiAnY2hvaWNlcycgaW4gdmFsaWRhdGlvbikge1xuICAgICAgICAgICAgICAgIGZpZWxkVHlwZSA9IHZhbGlkYXRpb24uY2hvaWNlcy5tYXAoKGMpID0+IGAnJHtjfSdgKS5qb2luKCcgfCAnKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmICgncmVxdWlyZWQnIGluIHZhbGlkYXRpb24gJiYgISgnd2hlbicgaW4gdmFsaWRhdGlvbikpIHtcbiAgICAgICAgICAgICAgICBpc09wdGlvbmFsID0gZmFsc2U7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgYXR0cmlidXRlcy5wdXNoKFtcbiAgICAgICAgICAgIGlzT3B0aW9uYWwgPyBgJHtjaGlsZE5hbWV9P2AgOiBjaGlsZE5hbWUsXG4gICAgICAgICAgICBmaWVsZC50eXBlID09PSAnYXJyYXknID8gYCR7ZmllbGRUeXBlfVtdYCA6IGZpZWxkVHlwZSxcbiAgICAgICAgICBdKTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7ZXJyb3JQcmVhbWJsZShwYXRoKX06ICR7ZXJyb3IubWVzc2FnZX1gKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdHlwZXMucmV2ZXJzZSgpLmpvaW4oJ1xcblxcbicpICsgJ1xcbic7XG4gIH07XG5cbiAgLyoqXG4gICAqIGdlbmVyYXRlcyBhIFR5cGVTY3JpcHQgaW50ZXJmYWNlIGRlZmluaXRpb24gZm9yIHBhc3NlZCBuYW1lIGFuZCBhdHRyaWJ1dGVzXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gICAqIEBwYXJhbSB7QXJyYXk8W3N0cmluZywgc3RyaW5nXT59IGF0dHJpYnV0ZXNcbiAgICogQHJldHVybiB7c3RyaW5nfVxuICAgKi9cbiAgcHJpdmF0ZSBnZW5UU0ludGVyZmFjZSA9IChcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgYXR0cmlidXRlczogQXJyYXk8W3N0cmluZywgc3RyaW5nXT5cbiAgKTogc3RyaW5nID0+IHtcbiAgICByZXR1cm4gYGV4cG9ydCBpbnRlcmZhY2UgJHtuYW1lfSB7XG4gICR7YXR0cmlidXRlcy5tYXAoKGF0dHIpID0+IGAke2F0dHJbMF19OiAke2F0dHJbMV19O2ApLmpvaW4oJ1xcbiAgJyl9XG59YDtcbiAgfTtcblxuICAvKipcbiAgICogcmV0dXJucyBhIGNoYXJhY3RlcmlzdGljIG9iamVjdCBmb3IgdmFsdWVzIGF0IGEgc3BlY2lmaWMgbm9kZSBjb25maWcgbGV2ZWxcbiAgICpcbiAgICogQHBhcmFtIHtJQ29uZmlnfSBjb25maWdcbiAgICogQHBhcmFtIHtzdHJpbmd9IGxldmVsXG4gICAqIEByZXR1cm4ge1JlY29yZDxzdHJpbmcsIGFueT59XG4gICAqL1xuICBnZXRDb25maWdGb3JMZXZlbChjb25maWc6IElDb25maWcsIGxldmVsOiBzdHJpbmcpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHtcbiAgICBjb25zdCBjb25mTGV2ZWxzID0gQ29uZmlnVmFsaWRhdG9yLmdldE5vZGVDb25maWdMZXZlbHMoY29uZmlnKTtcbiAgICBjb25zdCBsZXZlbEluZGV4ID0gY29uZkxldmVscy5pbmRleE9mKGxldmVsKTtcbiAgICBpZiAobGV2ZWxJbmRleCA9PT0gLTEpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYFRoZSBcIiR7bGV2ZWx9XCIgbGV2ZWwgbm90IGZvdW5kIGluIHRoZSBjdXJyZW50IHN5c3RlbSBjb25maWd1cmF0aW9uIGxldmVsc2BcbiAgICAgICk7XG4gICAgfVxuICAgIGNvbnN0IGhpZ2hlckxldmVsU291cmNlcyA9IGNvbmZpZy51dGlsXG4gICAgICAuZ2V0Q29uZmlnU291cmNlcygpXG4gICAgICAuZmlsdGVyKFxuICAgICAgICAoc291cmNlKSA9PiBjb25mTGV2ZWxzLmluZGV4T2YoZ2V0U291cmNlTmFtZShzb3VyY2UpKSA+IGxldmVsSW5kZXhcbiAgICAgICk7XG4gICAgY29uc3QgY3VycmVudExldmVsU291cmNlID0gY29uZmlnLnV0aWxcbiAgICAgIC5nZXRDb25maWdTb3VyY2VzKClcbiAgICAgIC5maWx0ZXIoKHNvdXJjZSkgPT4gZ2V0U291cmNlTmFtZShzb3VyY2UpID09PSBsZXZlbClcbiAgICAgIC5hdCgwKTtcbiAgICBjb25zdCBsb3dlckxldmVsU291cmNlcyA9IGNvbmZpZy51dGlsXG4gICAgICAuZ2V0Q29uZmlnU291cmNlcygpXG4gICAgICAuZmlsdGVyKFxuICAgICAgICAoc291cmNlKSA9PiBjb25mTGV2ZWxzLmluZGV4T2YoZ2V0U291cmNlTmFtZShzb3VyY2UpKSA8IGxldmVsSW5kZXhcbiAgICAgICk7XG5cbiAgICAvLyBUcmF2ZXJzZXMgdGhlIHNjaGVtYSBvYmplY3QgdHJlZSBkZXB0aCBmaXJzdFxuICAgIGNvbnN0IHZhbHVlVHJlZSA9IENvbmZpZ1ZhbGlkYXRvci5wcm9jZXNzQ29uZmlnRm9yTGV2ZWxOb2RlKFxuICAgICAgdGhpcy5zY2hlbWEsXG4gICAgICBbXSxcbiAgICAgIGhpZ2hlckxldmVsU291cmNlcyxcbiAgICAgIGN1cnJlbnRMZXZlbFNvdXJjZSxcbiAgICAgIGxvd2VyTGV2ZWxTb3VyY2VzXG4gICAgKTtcblxuICAgIHJldHVybiB2YWx1ZVRyZWU7XG4gIH1cblxuICAvKipcbiAgICp0cmF2ZXJzZXMgdGhlIGNvbmZpZyBzY2hlbWEgZGVwdGggZmlyc3QgdG8gcHJvZHVjZSBjaGFyYWN0ZXJpc3RpYyBvYmplY3RcbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHN0YXRpY1xuICAgKiBAcGFyYW0ge0NvbmZpZ1NjaGVtYX0gc2NoZW1hXG4gICAqIEBwYXJhbSB7c3RyaW5nW119IHBhdGhcbiAgICogQHBhcmFtIHtJQ29uZmlnU291cmNlW119IGhpZ2hlckxldmVsU291cmNlc1xuICAgKiBAcGFyYW0geyhJQ29uZmlnU291cmNlIHwgdW5kZWZpbmVkKX0gY3VycmVudExldmVsU291cmNlXG4gICAqIEBwYXJhbSB7SUNvbmZpZ1NvdXJjZVtdfSBsb3dlckxldmVsU291cmNlc1xuICAgKiBAcmV0dXJuIHtSZWNvcmQ8c3RyaW5nLCBhbnk+fVxuICAgKiBAbWVtYmVyb2YgQ29uZmlnVmFsaWRhdG9yXG4gICAqL1xuICBwcml2YXRlIHN0YXRpYyBwcm9jZXNzQ29uZmlnRm9yTGV2ZWxOb2RlKFxuICAgIHNjaGVtYTogQ29uZmlnU2NoZW1hLFxuICAgIHBhdGg6IHN0cmluZ1tdLFxuICAgIGhpZ2hlckxldmVsU291cmNlczogSUNvbmZpZ1NvdXJjZVtdLFxuICAgIGN1cnJlbnRMZXZlbFNvdXJjZTogSUNvbmZpZ1NvdXJjZSB8IHVuZGVmaW5lZCxcbiAgICBsb3dlckxldmVsU291cmNlczogSUNvbmZpZ1NvdXJjZVtdXG4gICk6IFJlY29yZDxzdHJpbmcsIGFueT4ge1xuICAgIGNvbnN0IHZhbHVlID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICBmb3IgKGNvbnN0IGNoaWxkTmFtZSBvZiBPYmplY3Qua2V5cyhzY2hlbWEpLnJldmVyc2UoKSkge1xuICAgICAgY29uc3QgY2hpbGRQYXRoID0gcGF0aC5jb25jYXQoW2NoaWxkTmFtZV0pO1xuICAgICAgY29uc3QgZmllbGQgPSBzY2hlbWFbY2hpbGROYW1lXTtcbiAgICAgIC8vIGlmIGEgZmllbGQgaXMgb2YgdHlwZSBvYmplY3QgYW5kIHRodXMgaXMgYSBzdWJ0cmVlLCByZWN1cnNlIG9uIGl0LlxuICAgICAgLy8gT3RoZXJ3aXNlIGl0J3MgYSBsZWFmIGFuZCBuZWVkcyBubyB0cmF2ZXJzYWwuXG4gICAgICB2YWx1ZVtjaGlsZE5hbWVdID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgIGlmIChmaWVsZC50eXBlID09PSAnb2JqZWN0Jykge1xuICAgICAgICB2YWx1ZVtjaGlsZE5hbWVdID0gQ29uZmlnVmFsaWRhdG9yLnByb2Nlc3NDb25maWdGb3JMZXZlbE5vZGUoXG4gICAgICAgICAgZmllbGQuY2hpbGRyZW4sXG4gICAgICAgICAgY2hpbGRQYXRoLFxuICAgICAgICAgIGhpZ2hlckxldmVsU291cmNlcyxcbiAgICAgICAgICBjdXJyZW50TGV2ZWxTb3VyY2UsXG4gICAgICAgICAgbG93ZXJMZXZlbFNvdXJjZXNcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhbHVlW2NoaWxkTmFtZV1bJ2xhYmVsJ10gPVxuICAgICAgICAgIGZpZWxkLmxhYmVsICE9IHVuZGVmaW5lZCA/IGZpZWxkLmxhYmVsIDogbnVsbDtcbiAgICAgICAgdmFsdWVbY2hpbGROYW1lXVsnZGVzY3JpcHRpb24nXSA9XG4gICAgICAgICAgZmllbGQuZGVzY3JpcHRpb24gIT0gdW5kZWZpbmVkID8gZmllbGQuZGVzY3JpcHRpb24gOiBudWxsO1xuICAgICAgICB2YWx1ZVtjaGlsZE5hbWVdWydkZWZhdWx0J10gPSBnZXRWYWx1ZUZyb21Db25maWdTb3VyY2VzKFxuICAgICAgICAgIGxvd2VyTGV2ZWxTb3VyY2VzLFxuICAgICAgICAgIGNoaWxkUGF0aFxuICAgICAgICApO1xuICAgICAgICB2YWx1ZVtjaGlsZE5hbWVdWyd2YWx1ZSddID0gZ2V0VmFsdWVGcm9tQ29uZmlnU291cmNlcyhcbiAgICAgICAgICBbLi4uKGN1cnJlbnRMZXZlbFNvdXJjZSAhPSB1bmRlZmluZWQgPyBbY3VycmVudExldmVsU291cmNlXSA6IFtdKV0sXG4gICAgICAgICAgY2hpbGRQYXRoXG4gICAgICAgICk7XG4gICAgICAgIHZhbHVlW2NoaWxkTmFtZV1bJ292ZXJyaWRlJ10gPSBnZXRWYWx1ZUZyb21Db25maWdTb3VyY2VzKFxuICAgICAgICAgIGhpZ2hlckxldmVsU291cmNlcyxcbiAgICAgICAgICBjaGlsZFBhdGhcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogcmV0dXJucyBhIGxpc3Qgb2YgY29uZmlnIHNvdXJjZXMgdXNlZCBieSBub2RlIGNvbmZpZyBwYWNrYWdlLCBvcmRlcmVkIGZyb21cbiAgICogdGhlIGxvd2VzdCB0byB0aGUgaGlnaGVzdCBwcmlvcml0eVxuICAgKlxuICAgKiBAc3RhdGljXG4gICAqIEBwYXJhbSB7SUNvbmZpZ30gY29uZmlnXG4gICAqIEByZXR1cm4gIHtzdHJpbmdbXX1cbiAgICovXG4gIHByaXZhdGUgc3RhdGljIGdldE5vZGVDb25maWdMZXZlbHMgPSAoY29uZmlnOiBJQ29uZmlnKTogc3RyaW5nW10gPT4ge1xuICAgIGNvbnN0IGluc3RhbmNlID0gY29uZmlnLnV0aWwuZ2V0RW52KCdOT0RFX0FQUF9JTlNUQU5DRScpO1xuICAgIGxldCBkZXBsb3ltZW50ID0gY29uZmlnLnV0aWwuZ2V0RW52KCdOT0RFX0VOVicpO1xuICAgIGRlcGxveW1lbnQgPSBjb25maWcudXRpbC5nZXRFbnYoJ05PREVfQ09ORklHX0VOVicpO1xuICAgIGNvbnN0IGZ1bGxIb3N0bmFtZSA9IGNvbmZpZy51dGlsLmdldEVudignSE9TVE5BTUUnKTtcbiAgICBjb25zdCBzaG9ydEhvc3RuYW1lID1cbiAgICAgIGZ1bGxIb3N0bmFtZSAhPSB1bmRlZmluZWQgPyBmdWxsSG9zdG5hbWUuc3BsaXQoJy4nKVswXSA6IHVuZGVmaW5lZDtcblxuICAgIGNvbnN0IGNvbmZpZ0xldmVscyA9IFtcbiAgICAgICdkZWZhdWx0JyxcbiAgICAgIC4uLihpbnN0YW5jZSAhPSB1bmRlZmluZWQgPyBbYGRlZmF1bHQtJHtpbnN0YW5jZX1gXSA6IFtdKSxcbiAgICAgIC4uLihkZXBsb3ltZW50ICE9IHVuZGVmaW5lZCA/IFtgJHtkZXBsb3ltZW50fWBdIDogW10pLFxuICAgICAgLi4uKGluc3RhbmNlICE9IHVuZGVmaW5lZCAmJiBkZXBsb3ltZW50ICE9IHVuZGVmaW5lZFxuICAgICAgICA/IFtgJHtkZXBsb3ltZW50fS0ke2luc3RhbmNlfWBdXG4gICAgICAgIDogW10pLFxuICAgICAgLi4uKHNob3J0SG9zdG5hbWUgIT0gdW5kZWZpbmVkID8gW2Ake3Nob3J0SG9zdG5hbWV9YF0gOiBbXSksXG4gICAgICAuLi4oc2hvcnRIb3N0bmFtZSAhPSB1bmRlZmluZWQgJiYgaW5zdGFuY2UgIT0gdW5kZWZpbmVkXG4gICAgICAgID8gW2Ake3Nob3J0SG9zdG5hbWV9LSR7aW5zdGFuY2V9YF1cbiAgICAgICAgOiBbXSksXG4gICAgICAuLi4oc2hvcnRIb3N0bmFtZSAhPSB1bmRlZmluZWQgJiYgZGVwbG95bWVudCAhPSB1bmRlZmluZWRcbiAgICAgICAgPyBbYCR7c2hvcnRIb3N0bmFtZX0tJHtkZXBsb3ltZW50fWBdXG4gICAgICAgIDogW10pLFxuICAgICAgLi4uKHNob3J0SG9zdG5hbWUgIT0gdW5kZWZpbmVkICYmXG4gICAgICBkZXBsb3ltZW50ICE9IHVuZGVmaW5lZCAmJlxuICAgICAgaW5zdGFuY2UgIT0gdW5kZWZpbmVkXG4gICAgICAgID8gW2Ake3Nob3J0SG9zdG5hbWV9LSR7ZGVwbG95bWVudH0tJHtpbnN0YW5jZX1gXVxuICAgICAgICA6IFtdKSxcbiAgICAgIC4uLihmdWxsSG9zdG5hbWUgIT0gdW5kZWZpbmVkID8gW2Ake2Z1bGxIb3N0bmFtZX1gXSA6IFtdKSxcbiAgICAgIC4uLihmdWxsSG9zdG5hbWUgIT0gdW5kZWZpbmVkICYmIGluc3RhbmNlICE9IHVuZGVmaW5lZFxuICAgICAgICA/IFtgJHtmdWxsSG9zdG5hbWV9LSR7aW5zdGFuY2V9YF1cbiAgICAgICAgOiBbXSksXG4gICAgICAuLi4oZnVsbEhvc3RuYW1lICE9IHVuZGVmaW5lZCAmJiBkZXBsb3ltZW50ICE9IHVuZGVmaW5lZFxuICAgICAgICA/IFtgJHtmdWxsSG9zdG5hbWV9LSR7ZGVwbG95bWVudH1gXVxuICAgICAgICA6IFtdKSxcbiAgICAgIC4uLihmdWxsSG9zdG5hbWUgIT0gdW5kZWZpbmVkICYmXG4gICAgICBkZXBsb3ltZW50ICE9IHVuZGVmaW5lZCAmJlxuICAgICAgaW5zdGFuY2UgIT0gdW5kZWZpbmVkXG4gICAgICAgID8gW2Ake2Z1bGxIb3N0bmFtZX0tJHtkZXBsb3ltZW50fS0ke2luc3RhbmNlfWBdXG4gICAgICAgIDogW10pLFxuICAgICAgYGxvY2FsYCxcbiAgICAgIC4uLihpbnN0YW5jZSAhPSB1bmRlZmluZWQgPyBbYGxvY2FsLSR7aW5zdGFuY2V9YF0gOiBbXSksXG4gICAgICAuLi4oZGVwbG95bWVudCAhPSB1bmRlZmluZWQgPyBbYGxvY2FsLSR7ZGVwbG95bWVudH1gXSA6IFtdKSxcbiAgICAgIC4uLihkZXBsb3ltZW50ICE9IHVuZGVmaW5lZCAmJiBpbnN0YW5jZSAhPSB1bmRlZmluZWRcbiAgICAgICAgPyBbYGxvY2FsLSR7ZGVwbG95bWVudH0tJHtpbnN0YW5jZX1gXVxuICAgICAgICA6IFtdKSxcbiAgICAgICckTk9ERV9DT05GSUcnLFxuICAgICAgJ2N1c3RvbS1lbnZpcm9ubWVudC12YXJpYWJsZXMnLFxuICAgIF07XG5cbiAgICByZXR1cm4gY29uZmlnTGV2ZWxzO1xuICB9O1xuXG4gIC8qKlxuICAgKiB2YWxpZGF0ZXMgYSBjb25maWcgb2JqZWN0IGFuZCB3cml0ZXMgaXQgdG8gdGhlIG5vZGUtY29uZmlnIGZpbGVcbiAgICogY29ycmVzcG9uZGluZyB0byB0aGUgcGFzc2VkIGxldmVsXG4gICAqXG4gICAqIEBwYXJhbSB7UmVjb3JkPHN0cmluZywgYW55Pn0gY29uZmlnT2JqXG4gICAqIEBwYXJhbSB7SUNvbmZpZ30gY29uZmlnXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBsZXZlbCBvdXRwdXQgbm9kZS1jb25maWcgZmlsZSBsZXZlbFxuICAgKiBAcGFyYW0ge3N0cmluZ30gZm9ybWF0IHRoZSBmb3JtYXQgb2YgdGhlIG91dHB1dCBmaWxlXG4gICAqL1xuICB2YWxpZGF0ZUFuZFdyaXRlQ29uZmlnID0gKFxuICAgIGNvbmZpZ09iajogUmVjb3JkPHN0cmluZywgYW55PixcbiAgICBjb25maWc6IElDb25maWcsXG4gICAgbGV2ZWw6IHN0cmluZyxcbiAgICBmb3JtYXQ6IHN0cmluZ1xuICApID0+IHtcbiAgICBjb25zdCBjb25mTGV2ZWxzID0gQ29uZmlnVmFsaWRhdG9yLmdldE5vZGVDb25maWdMZXZlbHMoY29uZmlnKS5maWx0ZXIoXG4gICAgICAobCkgPT4gbCAhPT0gJ2N1c3RvbS1lbnZpcm9ubWVudC12YXJpYWJsZXMnXG4gICAgKTtcbiAgICBjb25zdCBsZXZlbEluZGV4ID0gY29uZkxldmVscy5pbmRleE9mKGxldmVsKTtcbiAgICBpZiAobGV2ZWxJbmRleCA9PT0gLTEpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYFRoZSBbJHtsZXZlbH1dIGxldmVsIG5vdCBmb3VuZCBpbiB0aGUgY3VycmVudCBzeXN0ZW0ncyBjb25maWd1cmF0aW9uIGxldmVsc2BcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgY29uZmlnRGlyID1cbiAgICAgIHByb2Nlc3MuZW52WydOT0RFX0NPTkZJR19ESVInXSAhPSB1bmRlZmluZWRcbiAgICAgICAgPyBwcm9jZXNzLmVudlsnTk9ERV9DT05GSUdfRElSJ11cbiAgICAgICAgOiAnLi9jb25maWcnO1xuICAgIGxldCBvdXRwdXQgPSAnJztcbiAgICBsZXQgZXh0ID0gJyc7XG4gICAgc3dpdGNoIChmb3JtYXQpIHtcbiAgICAgIGNhc2UgJ2pzb24nOiB7XG4gICAgICAgIGNvbnN0IEpzb25CaWdJbnQgPSBKc29uQmlnSW50RmFjdG9yeSh7XG4gICAgICAgICAgYWx3YXlzUGFyc2VBc0JpZzogZmFsc2UsXG4gICAgICAgICAgdXNlTmF0aXZlQmlnSW50OiB0cnVlLFxuICAgICAgICB9KTtcbiAgICAgICAgb3V0cHV0ID0gSnNvbkJpZ0ludC5zdHJpbmdpZnkoY29uZmlnT2JqKTtcbiAgICAgICAgZXh0ID0gJ2pzb24nO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgJ3lhbWwnOiB7XG4gICAgICAgIG91dHB1dCA9IHlhbWwuZHVtcChjb25maWdPYmopO1xuICAgICAgICBleHQgPSAneWFtbCc7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgRXJyb3IoYEludmFsaWQgZm9ybWF0OiAke2Zvcm1hdH1gKTtcbiAgICB9XG5cbiAgICBjb25zdCBvdXRwdXRQYXRoID0gcGF0aC5qb2luKGNvbmZpZ0RpciwgYCR7bGV2ZWx9LiR7ZXh0fWApO1xuICAgIGNvbnN0IGJhY2t1cFBhdGggPSBwYXRoLmpvaW4oY29uZmlnRGlyLCBgJHtsZXZlbH0tYmFja3VwLiR7ZXh0fWApO1xuICAgIGNvbnN0IGNvbmZGaWxlRXhpc3RzID0gZnMuZXhpc3RzU3luYyhvdXRwdXRQYXRoKTtcbiAgICBpZiAoY29uZkZpbGVFeGlzdHMpIHtcbiAgICAgIGZzLnJlbmFtZVN5bmMob3V0cHV0UGF0aCwgYmFja3VwUGF0aCk7XG4gICAgfVxuICAgIGZzLndyaXRlRmlsZVN5bmMob3V0cHV0UGF0aCwgb3V0cHV0KTtcblxuICAgIGNvbnN0IHVwZGF0ZWRDb25mT2JqID0gY29uZmlnLnV0aWwubG9hZEZpbGVDb25maWdzKCk7XG5cbiAgICB0cnkge1xuICAgICAgdGhpcy52YWxpZGF0ZUNvbmZpZyh1cGRhdGVkQ29uZk9iaik7XG4gICAgICBmcy51bmxpbmtTeW5jKGJhY2t1cFBhdGgpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBmcy51bmxpbmtTeW5jKG91dHB1dFBhdGgpO1xuICAgICAgaWYgKGNvbmZGaWxlRXhpc3RzKSB7XG4gICAgICAgIGZzLnJlbmFtZVN5bmMoYmFja3VwUGF0aCwgb3V0cHV0UGF0aCk7XG4gICAgICB9XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gIH07XG59XG4iXX0=
594
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vbGliL2NvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEtBQUssRUFBRSxNQUFNLElBQUksQ0FBQztBQUN6QixPQUFPLEtBQUssSUFBSSxNQUFNLFNBQVMsQ0FBQztBQUNoQyxPQUFPLGlCQUFpQixNQUFNLGFBQWEsQ0FBQztBQUM1QyxPQUFPLElBQUksTUFBTSxNQUFNLENBQUM7QUFDeEIsT0FBTyxFQUNMLGtCQUFrQixFQUNsQixjQUFjLEdBQ2YsTUFBTSxxQ0FBcUMsQ0FBQztBQUc3QyxPQUFPLEVBQUUsYUFBYSxFQUFFLHlCQUF5QixFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQ25FLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxlQUFlLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUV2RSxNQUFNLE9BQU8sZUFBZTtJQUNOO0lBQXBCLFlBQW9CLE1BQW9CO1FBQXBCLFdBQU0sR0FBTixNQUFNLENBQWM7UUFDdEMsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO0lBQ3hCLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksY0FBYyxDQUFDLE1BQTJCO1FBQy9DLElBQUksQ0FBQyxhQUFhLENBQ2hCLE1BQU0sRUFDTixFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFDekMsTUFBTSxDQUNQLENBQUM7UUFFRixJQUFJLENBQUMsaUJBQWlCLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQzFELENBQUM7SUFFRDs7Ozs7Ozs7O09BU0c7SUFDSyxpQkFBaUIsQ0FDdkIsTUFBMkIsRUFDM0IsU0FBOEIsRUFDOUIsU0FBdUIsRUFDdkIsSUFBYztRQUVkLE1BQU0sYUFBYSxHQUFHLENBQUMsSUFBbUIsRUFBRSxFQUFFLENBQzVDLGlDQUFpQyxJQUFJLENBQUMsSUFBSSxD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LElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLEdBQUcsS0FBSyxJQUFJLEdBQUcsRUFBRSxDQUFDLENBQUM7UUFDM0QsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsR0FBRyxLQUFLLFdBQVcsR0FBRyxFQUFFLENBQUMsQ0FBQztRQUNsRSxNQUFNLGNBQWMsR0FBRyxFQUFFLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ2pELElBQUksY0FBYyxFQUFFLENBQUM7WUFDbkIsRUFBRSxDQUFDLFVBQVUsQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFDeEMsQ0FBQztRQUNELEVBQUUsQ0FBQyxhQUFhLENBQUMsVUFBVSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBRXJDLE1BQU0sY0FBYyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7UUFFckQsSUFBSSxDQUFDO1lBQ0gsSUFBSSxDQUFDLGNBQWMsQ0FBQyxjQUFjLENBQUMsQ0FBQztZQUNwQyxFQUFFLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQzVCLENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsRUFBRSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUMxQixJQUFJLGNBQWMsRUFBRSxDQUFDO2dCQUNuQixFQUFFLENBQUMsVUFBVSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsQ0FBQztZQUN4QyxDQUFDO1lBQ0QsTUFBTSxLQUFLLENBQUM7UUFDZCxDQUFDO0lBQ0gsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSUNvbmZpZywgSUNvbmZpZ1NvdXJjZSB9IGZyb20gJ2NvbmZpZyc7XG5pbXBvcnQgKiBhcyBmcyBmcm9tICdmcyc7XG5pbXBvcnQgKiBhcyB5YW1sIGZyb20gJ2pzLXlhbWwnO1xuaW1wb3J0IEpzb25CaWdJbnRGYWN0b3J5IGZyb20gJ2pzb24tYmlnaW50JztcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHtcbiAgcHJvcGVydHlWYWxpZGF0b3JzLFxuICBzdXBwb3J0ZWRUeXBlcyxcbn0gZnJvbSAnLi9zY2hlbWEvVmFsaWRhdG9ycy9maWVsZFByb3BlcnRpZXMnO1xuaW1wb3J0IHsgQ29uZmlnRmllbGQsIENvbmZpZ1NjaGVtYSB9IGZyb20gJy4vc2NoZW1hL3R5cGVzL2ZpZWxkcyc7XG5pbXBvcnQgeyBXaGVuIH0gZnJvbSAnLi9zY2hlbWEvdHlwZXMvdmFsaWRhdGlvbnMnO1xuaW1wb3J0IHsgZ2V0U291cmNlTmFtZSwgZ2V0VmFsdWVGcm9tQ29uZmlnU291cmNlcyB9IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IHsgdmFsdWVWYWxpZGF0aW9ucywgdmFsdWVWYWxpZGF0b3JzIH0gZnJvbSAnLi92YWx1ZS92YWxpZGF0b3JzJztcblxuZXhwb3J0IGNsYXNzIENvbmZpZ1ZhbGlkYXRvciB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgc2NoZW1hOiBDb25maWdTY2hlbWEpIHtcbiAgICB0aGlzLnZhbGlkYXRlU2NoZW1hKCk7XG4gIH1cblxuICAvKipcbiAgICogdmFsaWRhdGVzIHRoZSBwYXNzZWQgY29uZmlnIGFnYWluc3QgdGhlIGluc3RhbmNlJ3Mgc2NoZW1hXG4gICAqXG4gICAqIEBwYXJhbSB7UmVjb3JkPHN0cmluZywgYW55Pn0gY29uZmlnXG4gICAqL1xuICBwdWJsaWMgdmFsaWRhdGVDb25maWcoY29uZmlnOiBSZWNvcmQ8c3RyaW5nLCBhbnk+KSB7XG4gICAgdGhpcy52YWxpZGF0ZVZhbHVlKFxuICAgICAgY29uZmlnLFxuICAgICAgeyB0eXBlOiAnb2JqZWN0JywgY2hpbGRyZW46IHRoaXMuc2NoZW1hIH0sXG4gICAgICBjb25maWcsXG4gICAgKTtcblxuICAgIHRoaXMudmFsaWRhdGVTdWJDb25maWcoY29uZmlnLCBjb25maWcsIHRoaXMuc2NoZW1hLCBbXSk7XG4gIH1cblxuICAvKipcbiAgICogdHJhdmVyc2VzIGFuZCB2YWxpZGF0ZXMgYSBzdWJjb25maWcgdXNpbmcgdGhlIHN1YnNjaGVtYVxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsIGFueT59IGNvbmZpZ1xuICAgKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsIGFueT59IHN1YkNvbmZpZ1xuICAgKiBAcGFyYW0ge0NvbmZpZ1NjaGVtYX0gc3ViU2NoZW1hXG4gICAqIEBwYXJhbSB7c3RyaW5nW119IHBhdGhcbiAgICogQG1lbWJlcm9mIENvbmZpZ1ZhbGlkYXRvclxuICAgKi9cbiAgcHJpdmF0ZSB2YWxpZGF0ZVN1YkNvbmZpZyhcbiAgICBjb25maWc6IFJlY29yZDxzdHJpbmcsIGFueT4sXG4gICAgc3ViQ29uZmlnOiBSZWNvcmQ8c3RyaW5nLCBhbnk+LFxuICAgIHN1YlNjaGVtYTogQ29uZmlnU2NoZW1hLFxuICAgIHBhdGg6IHN0cmluZ1tdLFxuICApIHtcbiAgICBjb25zdCBlcnJvclByZWFtYmxlID0gKHBhdGg6IEFycmF5PHN0cmluZz4pID0+XG4gICAgICBgY29uZmlnIHZhbGlkYXRpb24gZmFpbGVkIGZvciBcIiR7cGF0aC5qb2luKCcuJyl9XCIgZmllbGRgO1xuICAgIGZvciAoY29uc3QgbmFtZSBvZiBPYmplY3Qua2V5cyhzdWJTY2hlbWEpKSB7XG4gICAgICBjb25zdCBjaGlsZFBhdGggPSBwYXRoLmNvbmNhdChbbmFtZV0pO1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgZmllbGQgPSBzdWJTY2hlbWFbbmFtZV07XG4gICAgICAgIGxldCB2YWx1ZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgaWYgKHN1YkNvbmZpZyAhPSB1bmRlZmluZWQgJiYgT2JqZWN0Lmhhc093bihzdWJDb25maWcsIG5hbWUpKSB7XG4gICAgICAgICAgdmFsdWUgPSBzdWJDb25maWdbbmFtZV07XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnZhbGlkYXRlVmFsdWUodmFsdWUsIGZpZWxkLCBjb25maWcpO1xuXG4gICAgICAgIC8vIGlmIGEgbm9kZS9maWVsZCBpcyBvZiB0eXBlIG9iamVjdCBhbmQgdGh1cyBpcyBhIHN1YnRyZWUsIHRyYXZlcnNlIGl0XG4gICAgICAgIGlmIChmaWVsZC50eXBlID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgIHRoaXMudmFsaWRhdGVTdWJDb25maWcoY29uZmlnLCB2YWx1ZSwgZmllbGQuY2hpbGRyZW4sIGNoaWxkUGF0aCk7XG4gICAgICAgIH0gZWxzZSBpZiAoZmllbGQudHlwZSA9PT0gJ2FycmF5Jykge1xuICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIHZhbHVlKSB7XG4gICAgICAgICAgICAgIENvbmZpZ1ZhbGlkYXRvci5tb2RpZnlPYmplY3QoY29uZmlnLCBpdGVtLCBjaGlsZFBhdGgpO1xuICAgICAgICAgICAgICB0aGlzLnZhbGlkYXRlU3ViQ29uZmlnKFxuICAgICAgICAgICAgICAgIGNvbmZpZyxcbiAgICAgICAgICAgICAgICB7IFtuYW1lXTogaXRlbSB9LFxuICAgICAgICAgICAgICAgIHsgW25hbWVdOiBmaWVsZC5pdGVtcyB9LFxuICAgICAgICAgICAgICAgIGNoaWxkUGF0aCxcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgQ29uZmlnVmFsaWRhdG9yLm1vZGlmeU9iamVjdChjb25maWcsIHZhbHVlLCBjaGlsZFBhdGgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7ZXJyb3JQcmVhbWJsZShjaGlsZFBhdGgpfTogJHtlcnJvci5tZXNzYWdlfWApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBzZXRzIGFuIG9iamVjdCdzIHNwZWNpZmljIHN1YnRyZWUgdG8gdGhlIHNwZWNpZmllZCB2YWx1ZVxuICAgKlxuICAgKiBAc3RhdGljXG4gICAqIEBwYXJhbSB7UmVjb3JkPHN0cmluZywgYW55Pn0gb2JqXG4gICAqIEBwYXJhbSB7Kn0gbmV3VmFsdWVcbiAgICogQHBhcmFtIHtzdHJpbmdbXX0gcGF0aFxuICAgKiBAcmV0dXJuIHsqfVxuICAgKiBAbWVtYmVyb2YgQ29uZmlnVmFsaWRhdG9yXG4gICAqL1xuICBzdGF0aWMgbW9kaWZ5T2JqZWN0KG9iajogUmVjb3JkPHN0cmluZywgYW55PiwgbmV3VmFsdWU6IGFueSwgcGF0aDogc3RyaW5nW10pIHtcbiAgICBsZXQgdmFsdWU6IGFueSA9IG9iajtcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBwYXRoLnNsaWNlKDAsIC0xKSkge1xuICAgICAgaWYgKHZhbHVlICE9IHVuZGVmaW5lZCAmJiBPYmplY3QuaGFzT3duKHZhbHVlLCBrZXkpKSB7XG4gICAgICAgIHZhbHVlID0gdmFsdWVba2V5XTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBsYXN0S2V5ID0gcGF0aC5hdCgtMSk7XG4gICAgaWYgKGxhc3RLZXkgIT0gdW5kZWZpbmVkKSB7XG4gICAgICB2YWx1ZVtsYXN0S2V5XSA9IG5ld1ZhbHVlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiB2YWxpZGF0ZXMgYSB2YWx1ZSBpbiBjb25maWcgb2JqZWN0XG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAgICogQHBhcmFtIHtDb25maWdGaWVsZH0gZmllbGQgdGhlIGZpZWxkIHNwZWNpZmljYXRpb24gaW4gc2NoZW1hXG4gICAqIEBwYXJhbSB7UmVjb3JkPHN0cmluZywgYW55Pn0gY29uZmlnIHRoZSBjb25maWcgb2JqZWN0XG4gICAqL1xuICBwcml2YXRlIHZhbGlkYXRlVmFsdWUgPSAoXG4gICAgdmFsdWU6IGFueSxcbiAgICBmaWVsZDogQ29uZmlnRmllbGQsXG4gICAgY29uZmlnOiBSZWNvcmQ8c3RyaW5nLCBhbnk+LFxuICApID0+IHtcbiAgICBpZiAodmFsdWUgIT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAoZmllbGQudHlwZSA9PT0gJ2JpZ2ludCcpIHtcbiAgICAgICAgdmFsdWUgPSBCaWdJbnQodmFsdWUpO1xuICAgICAgfSBlbHNlIGlmIChmaWVsZC50eXBlID09PSAnbnVtYmVyJyAmJiB2YWx1ZSAmJiAhaXNOYU4odmFsdWUpKSB7XG4gICAgICAgIHZhbHVlID0gTnVtYmVyKHZhbHVlKTtcbiAgICAgIH1cbiAgICAgIHZhbHVlVmFsaWRhdG9yc1tmaWVsZC50eXBlXSh2YWx1ZSwgZmllbGQpO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgIGZpZWxkLnR5cGUgIT09ICdvYmplY3QnICYmXG4gICAgICBmaWVsZC50eXBlICE9PSAnYXJyYXknICYmXG4gICAgICBmaWVsZC52YWxpZGF0aW9uc1xuICAgICkge1xuICAgICAgZm9yIChjb25zdCB2YWxpZGF0aW9uIG9mIGZpZWxkLnZhbGlkYXRpb25zKSB7XG4gICAgICAgIGNvbnN0IG5hbWUgPSBPYmplY3Qua2V5cyh2YWxpZGF0aW9uKS5maWx0ZXIoXG4gICAgICAgICAgKGtleSkgPT4ga2V5ICE9PSAnd2hlbicgJiYga2V5ICE9PSAnZXJyb3InLFxuICAgICAgICApWzBdO1xuICAgICAgICBpZiAoT2JqZWN0Lmhhc093bih2YWx1ZVZhbGlkYXRpb25zW2ZpZWxkLnR5cGVdLCBuYW1lKSkge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICB2YWx1ZVZhbGlkYXRpb25zW2ZpZWxkLnR5cGVdW25hbWVdKHZhbHVlLCB2YWxpZGF0aW9uLCBjb25maWcsIHRoaXMpO1xuICAgICAgICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgICAgICAgIGlmICh2YWxpZGF0aW9uLmVycm9yICE9IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IodmFsaWRhdGlvbi5lcnJvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgLyoqXG4gICAqIGRldGVybWluZXMgaWYgYSB3aGVuIGNsYXVzZSBpbiB2YWxpZGF0aW9ucyBzZWN0aW9uIG9mIGEgc2NoZW1hIGZpZWxkIGlzXG4gICAqIHNhdGlzZmllZFxuICAgKlxuICAgKiBAcGFyYW0ge1doZW59IHdoZW5cbiAgICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCBhbnk+fSBjb25maWdcbiAgICogQHJldHVybiB7Ym9vbGVhbn1cbiAgICovXG4gIHB1YmxpYyBpc1doZW5UcnVlID0gKHdoZW46IFdoZW4sIGNvbmZpZzogUmVjb3JkPHN0cmluZywgYW55Pik6IGJvb2xlYW4gPT4ge1xuICAgIGNvbnN0IHBhdGhQYXJ0cyA9IHdoZW4ucGF0aC5zcGxpdCgnLicpO1xuICAgIGNvbnN0IHZhbHVlID0gQ29uZmlnVmFsaWRhdG9yLnZhbHVlQXQoY29uZmlnLCBwYXRoUGFydHMpO1xuICAgIHJldHVybiB2YWx1ZSAhPSB1bmRlZmluZWQgJiYgdmFsdWUgPT09IHdoZW4udmFsdWU7XG4gIH07XG5cbiAgLyoqXG4gICAqIHJldHVybnMgdGhlIHZhbHVlIGF0IHNwZWNpZmllZCBwYXRoIGluIGNvbmZpZyBvYmplY3RcbiAgICpcbiAgICogQHN0YXRpY1xuICAgKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsIGFueT59IGNvbmZpZ1xuICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBwYXRoXG4gICAqIEByZXR1cm4geyp9XG4gICAqL1xuICBzdGF0aWMgdmFsdWVBdCA9IChjb25maWc6IFJlY29yZDxzdHJpbmcsIGFueT4sIHBhdGg6IHN0cmluZ1tdKSA9PiB7XG4gICAgbGV0IHZhbHVlOiBhbnkgPSBjb25maWc7XG4gICAgZm9yIChjb25zdCBrZXkgb2YgcGF0aCkge1xuICAgICAgaWYgKHZhbHVlICE9IHVuZGVmaW5lZCAmJiBPYmplY3QuaGFzT3duKHZhbHVlLCBrZXkpKSB7XG4gICAgICAgIHZhbHVlID0gdmFsdWVba2V5XTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbHVlO1xuICB9O1xuXG4gIC8qKlxuICAgKiB2YWxpZGF0ZXMgdGhpcy5zY2hlbWEgYW5kIHRocm93cyBleGNlcHRpb24gaWYgYW55IGVycm9ycyBmb3VuZFxuICAgKi9cbiAgcHJpdmF0ZSB2YWxpZGF0ZVNjaGVtYSA9ICgpID0+IHtcbiAgICBjb25zdCBlcnJvclByZWFtYmxlID0gKHBhdGg6IEFycmF5PHN0cmluZz4pID0+XG4gICAgICBgU2NoZW1hIHZhbGlkYXRpb24gZmFpbGVkIGZvciBcIiR7cGF0aC5qb2luKCcuJyl9XCIgZmllbGRgO1xuXG4gICAgY29uc3Qgc3RhY2s6IEFycmF5PHtcbiAgICAgIHN1YlNjaGVtYTogQ29uZmlnU2NoZW1hO1xuICAgICAgcGFyZW50UGF0aDogQXJyYXk8c3RyaW5nPjtcbiAgICB9PiA9IFtcbiAgICAgIHtcbiAgICAgICAgc3ViU2NoZW1hOiB0aGlzLnNjaGVtYSxcbiAgICAgICAgcGFyZW50UGF0aDogW10sXG4gICAgICB9LFxuICAgIF07XG5cbiAgICAvLyBUcmF2ZXJzZXMgdGhlIHNjaGVtYSBvYmplY3QgdHJlZSBkZXB0aCBmaXJzdCBhbmQgdmFsaWRhdGUgZmllbGRzXG4gICAgd2hpbGUgKHN0YWNrLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IHsgc3ViU2NoZW1hLCBwYXJlbnRQYXRoIH0gPSBzdGFjay5wb3AoKSE7XG5cbiAgICAgIC8vIHByb2Nlc3MgY2hpbGRyZW4gb2YgY3VycmVudCBvYmplY3QgZmllbGRcbiAgICAgIGZvciAoY29uc3QgbmFtZSBvZiBPYmplY3Qua2V5cyhzdWJTY2hlbWEpLnJldmVyc2UoKSkge1xuICAgICAgICBjb25zdCBwYXRoID0gcGFyZW50UGF0aC5jb25jYXQoW25hbWVdKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICB0aGlzLnZhbGlkYXRlQ29uZmlnTmFtZShuYW1lKTtcbiAgICAgICAgICBjb25zdCBmaWVsZCA9IHN1YlNjaGVtYVtuYW1lXTtcblxuICAgICAgICAgIGlmICghT2JqZWN0Lmhhc093bihmaWVsZCwgJ3R5cGUnKSB8fCB0eXBlb2YgZmllbGQudHlwZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgYGV2ZXJ5IHNjaGVtYSBmaWVsZCBtdXN0IGhhdmUgYSBcInR5cGVcIiBwcm9wZXJ0eSBvZiB0eXBlIFwic3RyaW5nXCJgLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoIXN1cHBvcnRlZFR5cGVzLmluY2x1ZGVzKGZpZWxkLnR5cGUpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYHVuc3VwcG9ydGVkIGZpZWxkIHR5cGUgXCIke2ZpZWxkLnR5cGV9XCJgKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aGlzLnZhbGlkYXRlU2NoZW1hRmllbGQoZmllbGQpO1xuXG4gICAgICAgICAgLy8gaWYgdGhlIGNoaWxkIGlzIGFuIG9iamVjdCBmaWVsZCBpdHNlbGYgYWRkIGl0IHRvIHN0YWNrIGZvclxuICAgICAgICAgIC8vIHByb2Nlc3NpbmdcbiAgICAgICAgICBpZiAoZmllbGQudHlwZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIHN0YWNrLnB1c2goe1xuICAgICAgICAgICAgICBzdWJTY2hlbWE6IGZpZWxkLmNoaWxkcmVuLFxuICAgICAgICAgICAgICBwYXJlbnRQYXRoOiBwYXRoLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBlbHNlIGlmIChmaWVsZC50eXBlID09PSAnYXJyYXknKSB7XG4gICAgICAgICAgICBzdGFjay5wdXNoKHtcbiAgICAgICAgICAgICAgc3ViU2NoZW1hOiB7IFtuYW1lXTogZmllbGQuaXRlbXMgfSxcbiAgICAgICAgICAgICAgcGFyZW50UGF0aDogcGF0aCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgJHtlcnJvclByZWFtYmxlKHBhdGgpfTogJHtlcnJvci5tZXNzYWdlfWApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIC8qKlxuICAgKiB2YWxpZGF0ZXMgY29uZmlnIGtleSBuYW1lXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gICAqL1xuICBwcml2YXRlIHZhbGlkYXRlQ29uZmlnTmFtZSA9IChuYW1lOiBzdHJpbmcpID0+IHtcbiAgICBpZiAobmFtZS5pbmNsdWRlcygnLicpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYGNvbmZpZyBrZXkgbmFtZSBjYW4gbm90IGNvbnRhaW4gdGhlICcuJyBjaGFyYWN0ZXJgKTtcbiAgICB9XG4gIH07XG5cbiAgLyoqXG4gICAqIHZhbGlkYXRlcyBwYXNzZWQgc2NoZW1hIGZpZWxkIHN0cnVjdHVyZVxuICAgKlxuICAgKiBAcGFyYW0ge0NvbmZpZ0ZpZWxkfSBmaWVsZFxuICAgKi9cbiAgcHJpdmF0ZSB2YWxpZGF0ZVNjaGVtYUZpZWxkID0gKGZpZWxkOiBDb25maWdGaWVsZCkgPT4ge1xuICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKGZpZWxkKSkge1xuICAgICAgaWYgKFxuICAgICAgICAhT2JqZWN0Lmhhc093bihwcm9wZXJ0eVZhbGlkYXRvcnMuYWxsLCBrZXkpICYmXG4gICAgICAgICEoXG4gICAgICAgICAgIVsnb2JqZWN0JywgJ2FycmF5J10uaW5jbHVkZXMoZmllbGQudHlwZSkgJiZcbiAgICAgICAgICBPYmplY3QuaGFzT3duKHByb3BlcnR5VmFsaWRhdG9ycy5wcmltaXRpdmUsIGtleSlcbiAgICAgICAgKSAmJlxuICAgICAgICAhT2JqZWN0Lmhhc093bihwcm9wZXJ0eVZhbGlkYXRvcnNbZmllbGQudHlwZV0sIGtleSlcbiAgICAgICkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYHNjaGVtYSBmaWVsZCBoYXMgdW5rbm93biBwcm9wZXJ0eSBcIiR7a2V5fVwiYCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCB2YWxpZGF0b3Igb2YgT2JqZWN0LnZhbHVlcyhwcm9wZXJ0eVZhbGlkYXRvcnMuYWxsKSkge1xuICAgICAgdmFsaWRhdG9yKGZpZWxkLCB0aGlzKTtcbiAgICB9XG5cbiAgICBpZiAoZmllbGQudHlwZSAhPT0gJ29iamVjdCcgJiYgZmllbGQudHlwZSAhPT0gJ2FycmF5Jykge1xuICAgICAgZm9yIChjb25zdCB2YWxpZGF0b3Igb2YgT2JqZWN0LnZhbHVlcyhwcm9wZXJ0eVZhbGlkYXRvcnMucHJpbWl0aXZlKSkge1xuICAgICAgICB2YWxpZGF0b3IoZmllbGQsIHRoaXMpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZvciAoY29uc3QgdmFsaWRhdG9yIG9mIE9iamVjdC52YWx1ZXMocHJvcGVydHlWYWxpZGF0b3JzW2ZpZWxkLnR5cGVdKSkge1xuICAgICAgdmFsaWRhdG9yKGZpZWxkLCB0aGlzKTtcbiAgICB9XG4gIH07XG5cbiAgLyoqXG4gICAqIHJldHVybnMgYSBmaWVsZCBjb3JyZXNwb25kaW5nIHRvIGEgcGF0aCBpbiBzY2hlbWEgdHJlZVxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBwYXRoXG4gICAqIEByZXR1cm4geyhDb25maWdGaWVsZCB8IHVuZGVmaW5lZCl9IHJldHVybnMgdW5kZWZpbmVkIGlmIGZpZWxkIGlzIG5vdCBmb3VuZFxuICAgKi9cbiAgZ2V0U2NoZW1hRmllbGQgPSAocGF0aDogc3RyaW5nW10pOiBDb25maWdGaWVsZCB8IHVuZGVmaW5lZCA9PiB7XG4gICAgbGV0IHN1YlRyZWU6IENvbmZpZ1NjaGVtYSB8IHVuZGVmaW5lZCA9IHRoaXMuc2NoZW1hO1xuICAgIGxldCBmaWVsZDogQ29uZmlnRmllbGQgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG4gICAgZm9yIChjb25zdCBwYXJ0IG9mIHBhdGgpIHtcbiAgICAgIGlmIChzdWJUcmVlICE9IHVuZGVmaW5lZCAmJiBPYmplY3QuaGFzT3duKHN1YlRyZWUsIHBhcnQpKSB7XG4gICAgICAgIGZpZWxkID0gc3ViVHJlZVtwYXJ0XTtcbiAgICAgICAgc3ViVHJlZSA9XG4gICAgICAgICAgJ2NoaWxkcmVuJyBpbiBmaWVsZFxuICAgICAgICAgICAgPyBmaWVsZC5jaGlsZHJlblxuICAgICAgICAgICAgOiAnaXRlbXMnIGluIGZpZWxkICYmICdjaGlsZHJlbicgaW4gZmllbGQuaXRlbXNcbiAgICAgICAgICAgICAgPyBmaWVsZC5pdGVtcy5jaGlsZHJlblxuICAgICAgICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmaWVsZDtcbiAgfTtcblxuICAvKipcbiAgICogZXh0cmFjdHMgZGVmYXVsdCB2YWx1ZXMgZnJvbSBhIHNjaGVtYVxuICAgKlxuICAgKiBAcmV0dXJuIHtSZWNvcmQ8c3RyaW5nLCBhbnk+fSBvYmplY3Qgb2YgZGVmYXVsdCB2YWx1ZXNcbiAgICovXG4gIGdlbmVyYXRlRGVmYXVsdCA9IChvcHRpb25zPzogeyB2YWxpZGF0ZT86IGJvb2xlYW4gfSk6IFJlY29yZDxzdHJpbmcsIGFueT4gPT4ge1xuICAgIGNvbnN0IHZhbHVlVHJlZSA9IHRoaXMuYnVpbGREZWZhdWx0c0ZvclNjaGVtYSh0aGlzLnNjaGVtYSk7XG4gICAgaWYgKG9wdGlvbnM/LnZhbGlkYXRlKSB7XG4gICAgICB0aGlzLnZhbGlkYXRlQ29uZmlnKHZhbHVlVHJlZSk7XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZVRyZWU7XG4gIH07XG5cbiAgLy8gQnVpbGRzIGRlZmF1bHQgdmFsdWVzIGZvciBhIHNjaGVtYSBzdWJ0cmVlIChvYmplY3RzIGFuZCBhcnJheXMpLCByZWN1cnNpdmVseVxuICBwcml2YXRlIGJ1aWxkRGVmYXVsdHNGb3JTY2hlbWEgPSAoXG4gICAgc2NoZW1hOiBDb25maWdTY2hlbWEsXG4gICk6IFJlY29yZDxzdHJpbmcsIGFueT4gPT4ge1xuICAgIGNvbnN0IGRlZmF1bHRzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhzY2hlbWEpKSB7XG4gICAgICBjb25zdCBmaWVsZCA9IHNjaGVtYVtrZXldO1xuICAgICAgaWYgKGZpZWxkLnR5cGUgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIGNvbnN0IGNoaWxkRGVmYXVsdHMgPSB0aGlzLmJ1aWxkRGVmYXVsdHNGb3JTY2hlbWEoZmllbGQuY2hpbGRyZW4pO1xuICAgICAgICBpZiAoT2JqZWN0LmtleXMoY2hpbGREZWZhdWx0cykubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGRlZmF1bHRzW2tleV0gPSBjaGlsZERlZmF1bHRzO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGZpZWxkLnR5cGUgPT09ICdhcnJheScpIHtcbiAgICAgICAgaWYgKChmaWVsZCBhcyBhbnkpLmRlZmF1bHQgIT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgaWYgKGZpZWxkLml0ZW1zLnR5cGUgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICBjb25zdCBpdGVtRGVmYXVsdHMgPSB0aGlzLmJ1aWxkRGVmYXVsdHNGb3JTY2hlbWEoXG4gICAgICAgICAgICAgIGZpZWxkLml0ZW1zLmNoaWxkcmVuLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGRlZmF1bHRzW2tleV0gPSAoZmllbGQgYXMgYW55KS5kZWZhdWx0Lm1hcCgoZWxlbTogYW55KSA9PiB7XG4gICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBlbGVtICE9IG51bGwgJiZcbiAgICAgICAgICAgICAgICB0eXBlb2YgZWxlbSA9PT0gJ29iamVjdCcgJiZcbiAgICAgICAgICAgICAgICAhQXJyYXkuaXNBcnJheShlbGVtKVxuICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4geyAuLi5pdGVtRGVmYXVsdHMsIC4uLmVsZW0gfTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXR1cm4gZWxlbTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBkZWZhdWx0c1trZXldID0gKGZpZWxkIGFzIGFueSkuZGVmYXVsdDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICgoZmllbGQgYXMgYW55KS5kZWZhdWx0ICE9IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGRlZmF1bHRzW2tleV0gPSAoZmllbGQgYXMgYW55KS5kZWZhdWx0O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBkZWZhdWx0cztcbiAgfTtcblxuICAvKipcbiAgICogZ2VuZXJhdGVzIGNvbXBhdGlibGUgVHlwZVNjcmlwdCBpbnRlcmZhY2UgZm9yIHRoaXMgaW5zdGFuY2UncyBzY2hlbWFcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgdGhlIG5hbWUgb2Ygcm9vdCB0eXBlXG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICovXG4gIGdlbmVyYXRlVFNUeXBlcyA9IChuYW1lOiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuICAgIGNvbnN0IGVycm9yUHJlYW1ibGUgPSAocGF0aDogQXJyYXk8c3RyaW5nPikgPT5cbiAgICAgIGBUeXBlU2NyaXB0IHR5cGUgZ2VuZXJhdGlvbiBmYWlsZWQgZm9yIFwiJHtwYXRoLmpvaW4oJy4nKX1cIiBmaWVsZGA7XG5cbiAgICBjb25zdCB0eXBlczogQXJyYXk8c3RyaW5nPiA9IFtdO1xuICAgIGNvbnN0IGVtaXR0ZWRUeXBlTmFtZXM6IFNldDxzdHJpbmc+ID0gbmV3IFNldDxzdHJpbmc+KCk7XG5cbiAgICBjb25zdCBzdGFjazogQXJyYXk8e1xuICAgICAgc3ViU2NoZW1hOiBDb25maWdTY2hlbWE7XG4gICAgICBjaGlsZHJlbjogc3RyaW5nW107XG4gICAgICBwYXJlbnRQYXRoOiBBcnJheTxzdHJpbmc+O1xuICAgICAgdHlwZU5hbWU6IHN0cmluZztcbiAgICAgIGF0dHJpYnV0ZXM6IEFycmF5PFtzdHJpbmcsIHN0cmluZ10+O1xuICAgIH0+ID0gW1xuICAgICAge1xuICAgICAgICBzdWJTY2hlbWE6IHRoaXMuc2NoZW1hLFxuICAgICAgICBjaGlsZHJlbjogT2JqZWN0LmtleXModGhpcy5zY2hlbWEpLFxuICAgICAgICBwYXJlbnRQYXRoOiBbXSxcbiAgICAgICAgdHlwZU5hbWU6IG5hbWUsXG4gICAgICAgIGF0dHJpYnV0ZXM6IFtdLFxuICAgICAgfSxcbiAgICBdO1xuXG4gICAgLy8gVHJhdmVyc2VzIHRoZSBzY2hlbWEgb2JqZWN0IHRyZWUgZGVwdGggZmlyc3RcbiAgICB3aGlsZSAoc3RhY2subGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgeyBzdWJTY2hlbWEsIGNoaWxkcmVuLCBwYXJlbnRQYXRoLCB0eXBlTmFtZSwgYXR0cmlidXRlcyB9ID1cbiAgICAgICAgc3RhY2suYXQoLTEpITtcbiAgICAgIGxldCBwYXRoOiBzdHJpbmdbXSA9IHBhcmVudFBhdGg7XG4gICAgICB0cnkge1xuICAgICAgICAvLyBpZiBhIHN1YnRyZWUncyBwcm9jZXNzaW5nIGlzIGZpbmlzaGVkIGdvIHRvIHRoZSBwcmV2aW91cyBsZXZlbFxuICAgICAgICBpZiAoY2hpbGRyZW4ubGVuZ3RoID09IDApIHtcbiAgICAgICAgICBpZiAoIWVtaXR0ZWRUeXBlTmFtZXMuaGFzKHR5cGVOYW1lKSkge1xuICAgICAgICAgICAgdHlwZXMucHVzaCh0aGlzLmdlblRTSW50ZXJmYWNlKHR5cGVOYW1lLCBhdHRyaWJ1dGVzKSk7XG4gICAgICAgICAgICBlbWl0dGVkVHlwZU5hbWVzLmFkZCh0eXBlTmFtZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHN0YWNrLnBvcCgpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgY2hpbGROYW1lID0gY2hpbGRyZW4ucG9wKCkhO1xuICAgICAgICBwYXRoID0gcGFyZW50UGF0aC5jb25jYXQoW2NoaWxkTmFtZV0pO1xuICAgICAgICBjb25zdCBmaWVsZCA9IHN1YlNjaGVtYVtjaGlsZE5hbWVdO1xuXG4gICAgICAgIC8vIGlmIGEgbm9kZS9maWVsZCBpcyBvZiB0eXBlIG9iamVjdCBhbmQgdGh1cyBpcyBhIHN1YnRyZWUsIGFkZCBpdCB0b1xuICAgICAgICAvLyB0aGUgc3RhY2sgdG8gYmUgdHJhdmVyc2VkIGxhdGVyLiBPdGhlcndpc2UgaXQncyBhIGxlYWYgYW5kIG5lZWRzIG5vXG4gICAgICAgIC8vIHRyYXZlcnNhbC5cbiAgICAgICAgaWYgKFxuICAgICAgICAgIGZpZWxkLnR5cGUgPT09ICdvYmplY3QnIHx8XG4gICAgICAgICAgKGZpZWxkLnR5cGUgPT09ICdhcnJheScgJiYgZmllbGQuaXRlbXMudHlwZSA9PT0gJ29iamVjdCcpXG4gICAgICAgICkge1xuICAgICAgICAgIC8vIENyZWF0ZSB1bmlxdWUgdHlwZSBuYW1lIGZyb20gc2NoZW1hIHBhdGggZXhjbHVkaW5nIHJvb3QgaW50ZXJmYWNlIG5hbWVcbiAgICAgICAgICBjb25zdCBwYXRoUGFydHMgPSBwYXRoO1xuICAgICAgICAgIGNvbnN0IGNoaWxkVHlwZU5hbWUgPSBwYXRoUGFydHNcbiAgICAgICAgICAgIC5tYXAoKHBhcnQpID0+IHBhcnRbMF0udG9VcHBlckNhc2UoKSArIHBhcnQuc3Vic3RyaW5nKDEpKVxuICAgICAgICAgICAgLmpvaW4oJycpO1xuXG4gICAgICAgICAgY29uc3QgY2hpbGRyZW4gPVxuICAgICAgICAgICAgZmllbGQudHlwZSA9PT0gJ2FycmF5JyAmJiBmaWVsZC5pdGVtcy50eXBlID09PSAnb2JqZWN0J1xuICAgICAgICAgICAgICA/IGZpZWxkLml0ZW1zLmNoaWxkcmVuXG4gICAgICAgICAgICAgIDogZmllbGQudHlwZSA9PT0gJ29iamVjdCdcbiAgICAgICAgICAgICAgICA/IGZpZWxkLmNoaWxkcmVuXG4gICAgICAgICAgICAgICAgOiB7fTtcblxuICAgICAgICAgIHN0YWNrLnB1c2goe1xuICAgICAgICAgICAgc3ViU2NoZW1hOiBjaGlsZHJlbixcbiAgICAgICAgICAgIGNoaWxkcmVuOiBPYmplY3Qua2V5cyhjaGlsZHJlbikucmV2ZXJzZSgpLFxuICAgICAgICAgICAgcGFyZW50UGF0aDogcGF0aCxcbiAgICAgICAgICAgIHR5cGVOYW1lOiBjaGlsZFR5cGVOYW1lLFxuICAgICAgICAgICAgYXR0cmlidXRlczogW10sXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBhdHRyaWJ1dGVzLnB1c2goW1xuICAgICAgICAgICAgY2hpbGROYW1lLFxuICAgICAgICAgICAgZmllbGQudHlwZSA9PT0gJ2FycmF5JyA/IGAke2NoaWxkVHlwZU5hbWV9W11gIDogY2hpbGRUeXBlTmFtZSxcbiAgICAgICAgICBdKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBsZXQgZmllbGRUeXBlOiBzdHJpbmcgPVxuICAgICAgICAgICAgZmllbGQudHlwZSA9PT0gJ2FycmF5JyA/IGZpZWxkLml0ZW1zLnR5cGUgOiBmaWVsZC50eXBlO1xuICAgICAgICAgIGxldCBpc09wdGlvbmFsID0gdHJ1ZTtcbiAgICAgICAgICBpZiAoZmllbGQudHlwZSAhPT0gJ2FycmF5JyAmJiBmaWVsZC52YWxpZGF0aW9ucyAhPSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgdmFsaWRhdGlvbiBvZiBmaWVsZC52YWxpZGF0aW9ucykge1xuICAgICAgICAgICAgICBpZiAoZmllbGQudHlwZSA9PT0gJ3N0cmluZycgJiYgJ2Nob2ljZXMnIGluIHZhbGlkYXRpb24pIHtcbiAgICAgICAgICAgICAgICBmaWVsZFR5cGUgPSB2YWxpZGF0aW9uLmNob2ljZXMubWFwKChjKSA9PiBgJyR7Y30nYCkuam9pbignIHwgJyk7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAoJ3JlcXVpcmVkJyBpbiB2YWxpZGF0aW9uICYmICEoJ3doZW4nIGluIHZhbGlkYXRpb24pKSB7XG4gICAgICAgICAgICAgICAgaXNPcHRpb25hbCA9IGZhbHNlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGF0dHJpYnV0ZXMucHVzaChbXG4gICAgICAgICAgICBpc09wdGlvbmFsID8gYCR7Y2hpbGROYW1lfT9gIDogY2hpbGROYW1lLFxuICAgICAgICAgICAgZmllbGQudHlwZSA9PT0gJ2FycmF5JyA/IGAke2ZpZWxkVHlwZX1bXWAgOiBmaWVsZFR5cGUsXG4gICAgICAgICAgXSk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAke2Vycm9yUHJlYW1ibGUocGF0aCl9OiAke2Vycm9yLm1lc3NhZ2V9YCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHR5cGVzLnJldmVyc2UoKS5qb2luKCdcXG5cXG4nKSArICdcXG4nO1xuICB9O1xuXG4gIC8qKlxuICAgKiBnZW5lcmF0ZXMgYSBUeXBlU2NyaXB0IGludGVyZmFjZSBkZWZpbml0aW9uIGZvciBwYXNzZWQgbmFtZSBhbmQgYXR0cmlidXRlc1xuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICAgKiBAcGFyYW0ge0FycmF5PFtzdHJpbmcsIHN0cmluZ10+fSBhdHRyaWJ1dGVzXG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICovXG4gIHByaXZhdGUgZ2VuVFNJbnRlcmZhY2UgPSAoXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIGF0dHJpYnV0ZXM6IEFycmF5PFtzdHJpbmcsIHN0cmluZ10+LFxuICApOiBzdHJpbmcgPT4ge1xuICAgIHJldHVybiBgZXhwb3J0IGludGVyZmFjZSAke25hbWV9IHtcbiAgJHthdHRyaWJ1dGVzLm1hcCgoYXR0cikgPT4gYCR7YXR0clswXX06ICR7YXR0clsxXX07YCkuam9pbignXFxuICAnKX1cbn1gO1xuICB9O1xuXG4gIC8qKlxuICAgKiByZXR1cm5zIGEgY2hhcmFjdGVyaXN0aWMgb2JqZWN0IGZvciB2YWx1ZXMgYXQgYSBzcGVjaWZpYyBub2RlIGNvbmZpZyBsZXZlbFxuICAgKlxuICAgKiBAcGFyYW0ge0lDb25maWd9IGNvbmZpZ1xuICAgKiBAcGFyYW0ge3N0cmluZ30gbGV2ZWxcbiAgICogQHJldHVybiB7UmVjb3JkPHN0cmluZywgYW55Pn1cbiAgICovXG4gIGdldENvbmZpZ0ZvckxldmVsKGNvbmZpZzogSUNvbmZpZywgbGV2ZWw6IHN0cmluZyk6IFJlY29yZDxzdHJpbmcsIGFueT4ge1xuICAgIGNvbnN0IGNvbmZMZXZlbHMgPSBDb25maWdWYWxpZGF0b3IuZ2V0Tm9kZUNvbmZpZ0xldmVscyhjb25maWcpO1xuICAgIGNvbnN0IGxldmVsSW5kZXggPSBjb25mTGV2ZWxzLmluZGV4T2YobGV2ZWwpO1xuICAgIGlmIChsZXZlbEluZGV4ID09PSAtMSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgVGhlIFwiJHtsZXZlbH1cIiBsZXZlbCBub3QgZm91bmQgaW4gdGhlIGN1cnJlbnQgc3lzdGVtIGNvbmZpZ3VyYXRpb24gbGV2ZWxzYCxcbiAgICAgICk7XG4gICAgfVxuICAgIGNvbnN0IGhpZ2hlckxldmVsU291cmNlcyA9IGNvbmZpZy51dGlsXG4gICAgICAuZ2V0Q29uZmlnU291cmNlcygpXG4gICAgICAuZmlsdGVyKFxuICAgICAgICAoc291cmNlKSA9PiBjb25mTGV2ZWxzLmluZGV4T2YoZ2V0U291cmNlTmFtZShzb3VyY2UpKSA+IGxldmVsSW5kZXgsXG4gICAgICApO1xuICAgIGNvbnN0IGN1cnJlbnRMZXZlbFNvdXJjZSA9IGNvbmZpZy51dGlsXG4gICAgICAuZ2V0Q29uZmlnU291cmNlcygpXG4gICAgICAuZmlsdGVyKChzb3VyY2UpID0+IGdldFNvdXJjZU5hbWUoc291cmNlKSA9PT0gbGV2ZWwpXG4gICAgICAuYXQoMCk7XG4gICAgY29uc3QgbG93ZXJMZXZlbFNvdXJjZXMgPSBjb25maWcudXRpbFxuICAgICAgLmdldENvbmZpZ1NvdXJjZXMoKVxuICAgICAgLmZpbHRlcihcbiAgICAgICAgKHNvdXJjZSkgPT4gY29uZkxldmVscy5pbmRleE9mKGdldFNvdXJjZU5hbWUoc291cmNlKSkgPCBsZXZlbEluZGV4LFxuICAgICAgKTtcblxuICAgIC8vIFRyYXZlcnNlcyB0aGUgc2NoZW1hIG9iamVjdCB0cmVlIGRlcHRoIGZpcnN0XG4gICAgY29uc3QgdmFsdWVUcmVlID0gQ29uZmlnVmFsaWRhdG9yLnByb2Nlc3NDb25maWdGb3JMZXZlbE5vZGUoXG4gICAgICB0aGlzLnNjaGVtYSxcbiAgICAgIFtdLFxuICAgICAgaGlnaGVyTGV2ZWxTb3VyY2VzLFxuICAgICAgY3VycmVudExldmVsU291cmNlLFxuICAgICAgbG93ZXJMZXZlbFNvdXJjZXMsXG4gICAgKTtcblxuICAgIHJldHVybiB2YWx1ZVRyZWU7XG4gIH1cblxuICAvKipcbiAgICp0cmF2ZXJzZXMgdGhlIGNvbmZpZyBzY2hlbWEgZGVwdGggZmlyc3QgdG8gcHJvZHVjZSBjaGFyYWN0ZXJpc3RpYyBvYmplY3RcbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHN0YXRpY1xuICAgKiBAcGFyYW0ge0NvbmZpZ1NjaGVtYX0gc2NoZW1hXG4gICAqIEBwYXJhbSB7c3RyaW5nW119IHBhdGhcbiAgICogQHBhcmFtIHtJQ29uZmlnU291cmNlW119IGhpZ2hlckxldmVsU291cmNlc1xuICAgKiBAcGFyYW0geyhJQ29uZmlnU291cmNlIHwgdW5kZWZpbmVkKX0gY3VycmVudExldmVsU291cmNlXG4gICAqIEBwYXJhbSB7SUNvbmZpZ1NvdXJjZVtdfSBsb3dlckxldmVsU291cmNlc1xuICAgKiBAcmV0dXJuIHtSZWNvcmQ8c3RyaW5nLCBhbnk+fVxuICAgKiBAbWVtYmVyb2YgQ29uZmlnVmFsaWRhdG9yXG4gICAqL1xuICBwcml2YXRlIHN0YXRpYyBwcm9jZXNzQ29uZmlnRm9yTGV2ZWxOb2RlKFxuICAgIHNjaGVtYTogQ29uZmlnU2NoZW1hLFxuICAgIHBhdGg6IHN0cmluZ1tdLFxuICAgIGhpZ2hlckxldmVsU291cmNlczogSUNvbmZpZ1NvdXJjZVtdLFxuICAgIGN1cnJlbnRMZXZlbFNvdXJjZTogSUNvbmZpZ1NvdXJjZSB8IHVuZGVmaW5lZCxcbiAgICBsb3dlckxldmVsU291cmNlczogSUNvbmZpZ1NvdXJjZVtdLFxuICApOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHtcbiAgICBjb25zdCB2YWx1ZSA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgZm9yIChjb25zdCBjaGlsZE5hbWUgb2YgT2JqZWN0LmtleXMoc2NoZW1hKS5yZXZlcnNlKCkpIHtcbiAgICAgIGNvbnN0IGNoaWxkUGF0aCA9IHBhdGguY29uY2F0KFtjaGlsZE5hbWVdKTtcbiAgICAgIGNvbnN0IGZpZWxkID0gc2NoZW1hW2NoaWxkTmFtZV07XG4gICAgICAvLyBpZiBhIGZpZWxkIGlzIG9mIHR5cGUgb2JqZWN0IGFuZCB0aHVzIGlzIGEgc3VidHJlZSwgcmVjdXJzZSBvbiBpdC5cbiAgICAgIC8vIE90aGVyd2lzZSBpdCdzIGEgbGVhZiBhbmQgbmVlZHMgbm8gdHJhdmVyc2FsLlxuICAgICAgdmFsdWVbY2hpbGROYW1lXSA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICBpZiAoZmllbGQudHlwZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgdmFsdWVbY2hpbGROYW1lXSA9IENvbmZpZ1ZhbGlkYXRvci5wcm9jZXNzQ29uZmlnRm9yTGV2ZWxOb2RlKFxuICAgICAgICAgIGZpZWxkLmNoaWxkcmVuLFxuICAgICAgICAgIGNoaWxkUGF0aCxcbiAgICAgICAgICBoaWdoZXJMZXZlbFNvdXJjZXMsXG4gICAgICAgICAgY3VycmVudExldmVsU291cmNlLFxuICAgICAgICAgIGxvd2VyTGV2ZWxTb3VyY2VzLFxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFsdWVbY2hpbGROYW1lXVsnbGFiZWwnXSA9XG4gICAgICAgICAgZmllbGQubGFiZWwgIT0gdW5kZWZpbmVkID8gZmllbGQubGFiZWwgOiBudWxsO1xuICAgICAgICB2YWx1ZVtjaGlsZE5hbWVdWydkZXNjcmlwdGlvbiddID1cbiAgICAgICAgICBmaWVsZC5kZXNjcmlwdGlvbiAhPSB1bmRlZmluZWQgPyBmaWVsZC5kZXNjcmlwdGlvbiA6IG51bGw7XG4gICAgICAgIHZhbHVlW2NoaWxkTmFtZV1bJ2RlZmF1bHQnXSA9IGdldFZhbHVlRnJvbUNvbmZpZ1NvdXJjZXMoXG4gICAgICAgICAgbG93ZXJMZXZlbFNvdXJjZXMsXG4gICAgICAgICAgY2hpbGRQYXRoLFxuICAgICAgICApO1xuICAgICAgICB2YWx1ZVtjaGlsZE5hbWVdWyd2YWx1ZSddID0gZ2V0VmFsdWVGcm9tQ29uZmlnU291cmNlcyhcbiAgICAgICAgICBbLi4uKGN1cnJlbnRMZXZlbFNvdXJjZSAhPSB1bmRlZmluZWQgPyBbY3VycmVudExldmVsU291cmNlXSA6IFtdKV0sXG4gICAgICAgICAgY2hpbGRQYXRoLFxuICAgICAgICApO1xuICAgICAgICB2YWx1ZVtjaGlsZE5hbWVdWydvdmVycmlkZSddID0gZ2V0VmFsdWVGcm9tQ29uZmlnU291cmNlcyhcbiAgICAgICAgICBoaWdoZXJMZXZlbFNvdXJjZXMsXG4gICAgICAgICAgY2hpbGRQYXRoLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiByZXR1cm5zIGEgbGlzdCBvZiBjb25maWcgc291cmNlcyB1c2VkIGJ5IG5vZGUgY29uZmlnIHBhY2thZ2UsIG9yZGVyZWQgZnJvbVxuICAgKiB0aGUgbG93ZXN0IHRvIHRoZSBoaWdoZXN0IHByaW9yaXR5XG4gICAqXG4gICAqIEBzdGF0aWNcbiAgICogQHBhcmFtIHtJQ29uZmlnfSBjb25maWdcbiAgICogQHJldHVybiAge3N0cmluZ1tdfVxuICAgKi9cbiAgcHJpdmF0ZSBzdGF0aWMgZ2V0Tm9kZUNvbmZpZ0xldmVscyA9IChjb25maWc6IElDb25maWcpOiBzdHJpbmdbXSA9PiB7XG4gICAgY29uc3QgaW5zdGFuY2UgPSBjb25maWcudXRpbC5nZXRFbnYoJ05PREVfQVBQX0lOU1RBTkNFJyk7XG4gICAgbGV0IGRlcGxveW1lbnQgPSBjb25maWcudXRpbC5nZXRFbnYoJ05PREVfRU5WJyk7XG4gICAgZGVwbG95bWVudCA9IGNvbmZpZy51dGlsLmdldEVudignTk9ERV9DT05GSUdfRU5WJyk7XG4gICAgY29uc3QgZnVsbEhvc3RuYW1lID0gY29uZmlnLnV0aWwuZ2V0RW52KCdIT1NUTkFNRScpO1xuICAgIGNvbnN0IHNob3J0SG9zdG5hbWUgPVxuICAgICAgZnVsbEhvc3RuYW1lICE9IHVuZGVmaW5lZCA/IGZ1bGxIb3N0bmFtZS5zcGxpdCgnLicpWzBdIDogdW5kZWZpbmVkO1xuXG4gICAgY29uc3QgY29uZmlnTGV2ZWxzID0gW1xuICAgICAgJ2RlZmF1bHQnLFxuICAgICAgLi4uKGluc3RhbmNlICE9IHVuZGVmaW5lZCA/IFtgZGVmYXVsdC0ke2luc3RhbmNlfWBdIDogW10pLFxuICAgICAgLi4uKGRlcGxveW1lbnQgIT0gdW5kZWZpbmVkID8gW2Ake2RlcGxveW1lbnR9YF0gOiBbXSksXG4gICAgICAuLi4oaW5zdGFuY2UgIT0gdW5kZWZpbmVkICYmIGRlcGxveW1lbnQgIT0gdW5kZWZpbmVkXG4gICAgICAgID8gW2Ake2RlcGxveW1lbnR9LSR7aW5zdGFuY2V9YF1cbiAgICAgICAgOiBbXSksXG4gICAgICAuLi4oc2hvcnRIb3N0bmFtZSAhPSB1bmRlZmluZWQgPyBbYCR7c2hvcnRIb3N0bmFtZX1gXSA6IFtdKSxcbiAgICAgIC4uLihzaG9ydEhvc3RuYW1lICE9IHVuZGVmaW5lZCAmJiBpbnN0YW5jZSAhPSB1bmRlZmluZWRcbiAgICAgICAgPyBbYCR7c2hvcnRIb3N0bmFtZX0tJHtpbnN0YW5jZX1gXVxuICAgICAgICA6IFtdKSxcbiAgICAgIC4uLihzaG9ydEhvc3RuYW1lICE9IHVuZGVmaW5lZCAmJiBkZXBsb3ltZW50ICE9IHVuZGVmaW5lZFxuICAgICAgICA/IFtgJHtzaG9ydEhvc3RuYW1lfS0ke2RlcGxveW1lbnR9YF1cbiAgICAgICAgOiBbXSksXG4gICAgICAuLi4oc2hvcnRIb3N0bmFtZSAhPSB1bmRlZmluZWQgJiZcbiAgICAgIGRlcGxveW1lbnQgIT0gdW5kZWZpbmVkICYmXG4gICAgICBpbnN0YW5jZSAhPSB1bmRlZmluZWRcbiAgICAgICAgPyBbYCR7c2hvcnRIb3N0bmFtZX0tJHtkZXBsb3ltZW50fS0ke2luc3RhbmNlfWBdXG4gICAgICAgIDogW10pLFxuICAgICAgLi4uKGZ1bGxIb3N0bmFtZSAhPSB1bmRlZmluZWQgPyBbYCR7ZnVsbEhvc3RuYW1lfWBdIDogW10pLFxuICAgICAgLi4uKGZ1bGxIb3N0bmFtZSAhPSB1bmRlZmluZWQgJiYgaW5zdGFuY2UgIT0gdW5kZWZpbmVkXG4gICAgICAgID8gW2Ake2Z1bGxIb3N0bmFtZX0tJHtpbnN0YW5jZX1gXVxuICAgICAgICA6IFtdKSxcbiAgICAgIC4uLihmdWxsSG9zdG5hbWUgIT0gdW5kZWZpbmVkICYmIGRlcGxveW1lbnQgIT0gdW5kZWZpbmVkXG4gICAgICAgID8gW2Ake2Z1bGxIb3N0bmFtZX0tJHtkZXBsb3ltZW50fWBdXG4gICAgICAgIDogW10pLFxuICAgICAgLi4uKGZ1bGxIb3N0bmFtZSAhPSB1bmRlZmluZWQgJiZcbiAgICAgIGRlcGxveW1lbnQgIT0gdW5kZWZpbmVkICYmXG4gICAgICBpbnN0YW5jZSAhPSB1bmRlZmluZWRcbiAgICAgICAgPyBbYCR7ZnVsbEhvc3RuYW1lfS0ke2RlcGxveW1lbnR9LSR7aW5zdGFuY2V9YF1cbiAgICAgICAgOiBbXSksXG4gICAgICBgbG9jYWxgLFxuICAgICAgLi4uKGluc3RhbmNlICE9IHVuZGVmaW5lZCA/IFtgbG9jYWwtJHtpbnN0YW5jZX1gXSA6IFtdKSxcbiAgICAgIC4uLihkZXBsb3ltZW50ICE9IHVuZGVmaW5lZCA/IFtgbG9jYWwtJHtkZXBsb3ltZW50fWBdIDogW10pLFxuICAgICAgLi4uKGRlcGxveW1lbnQgIT0gdW5kZWZpbmVkICYmIGluc3RhbmNlICE9IHVuZGVmaW5lZFxuICAgICAgICA/IFtgbG9jYWwtJHtkZXBsb3ltZW50fS0ke2luc3RhbmNlfWBdXG4gICAgICAgIDogW10pLFxuICAgICAgJyROT0RFX0NPTkZJRycsXG4gICAgICAnY3VzdG9tLWVudmlyb25tZW50LXZhcmlhYmxlcycsXG4gICAgXTtcblxuICAgIHJldHVybiBjb25maWdMZXZlbHM7XG4gIH07XG5cbiAgLyoqXG4gICAqIHZhbGlkYXRlcyBhIGNvbmZpZyBvYmplY3QgYW5kIHdyaXRlcyBpdCB0byB0aGUgbm9kZS1jb25maWcgZmlsZVxuICAgKiBjb3JyZXNwb25kaW5nIHRvIHRoZSBwYXNzZWQgbGV2ZWxcbiAgICpcbiAgICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCBhbnk+fSBjb25maWdPYmpcbiAgICogQHBhcmFtIHtJQ29uZmlnfSBjb25maWdcbiAgICogQHBhcmFtIHtzdHJpbmd9IGxldmVsIG91dHB1dCBub2RlLWNvbmZpZyBmaWxlIGxldmVsXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmb3JtYXQgdGhlIGZvcm1hdCBvZiB0aGUgb3V0cHV0IGZpbGVcbiAgICovXG4gIHZhbGlkYXRlQW5kV3JpdGVDb25maWcgPSAoXG4gICAgY29uZmlnT2JqOiBSZWNvcmQ8c3RyaW5nLCBhbnk+LFxuICAgIGNvbmZpZzogSUNvbmZpZyxcbiAgICBsZXZlbDogc3RyaW5nLFxuICAgIGZvcm1hdDogc3RyaW5nLFxuICApID0+IHtcbiAgICBjb25zdCBjb25mTGV2ZWxzID0gQ29uZmlnVmFsaWRhdG9yLmdldE5vZGVDb25maWdMZXZlbHMoY29uZmlnKS5maWx0ZXIoXG4gICAgICAobCkgPT4gbCAhPT0gJ2N1c3RvbS1lbnZpcm9ubWVudC12YXJpYWJsZXMnLFxuICAgICk7XG4gICAgY29uc3QgbGV2ZWxJbmRleCA9IGNvbmZMZXZlbHMuaW5kZXhPZihsZXZlbCk7XG4gICAgaWYgKGxldmVsSW5kZXggPT09IC0xKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBUaGUgWyR7bGV2ZWx9XSBsZXZlbCBub3QgZm91bmQgaW4gdGhlIGN1cnJlbnQgc3lzdGVtJ3MgY29uZmlndXJhdGlvbiBsZXZlbHNgLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCBjb25maWdEaXIgPVxuICAgICAgcHJvY2Vzcy5lbnZbJ05PREVfQ09ORklHX0RJUiddICE9IHVuZGVmaW5lZFxuICAgICAgICA/IHByb2Nlc3MuZW52WydOT0RFX0NPTkZJR19ESVInXVxuICAgICAgICA6ICcuL2NvbmZpZyc7XG4gICAgbGV0IG91dHB1dCA9ICcnO1xuICAgIGxldCBleHQgPSAnJztcbiAgICBzd2l0Y2ggKGZvcm1hdCkge1xuICAgICAgY2FzZSAnanNvbic6IHtcbiAgICAgICAgY29uc3QgSnNvbkJpZ0ludCA9IEpzb25CaWdJbnRGYWN0b3J5KHtcbiAgICAgICAgICBhbHdheXNQYXJzZUFzQmlnOiBmYWxzZSxcbiAgICAgICAgICB1c2VOYXRpdmVCaWdJbnQ6IHRydWUsXG4gICAgICAgIH0pO1xuICAgICAgICBvdXRwdXQgPSBKc29uQmlnSW50LnN0cmluZ2lmeShjb25maWdPYmopO1xuICAgICAgICBleHQgPSAnanNvbic7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSAneWFtbCc6IHtcbiAgICAgICAgb3V0cHV0ID0geWFtbC5kdW1wKGNvbmZpZ09iaik7XG4gICAgICAgIGV4dCA9ICd5YW1sJztcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBFcnJvcihgSW52YWxpZCBmb3JtYXQ6ICR7Zm9ybWF0fWApO1xuICAgIH1cblxuICAgIGNvbnN0IG91dHB1dFBhdGggPSBwYXRoLmpvaW4oY29uZmlnRGlyLCBgJHtsZXZlbH0uJHtleHR9YCk7XG4gICAgY29uc3QgYmFja3VwUGF0aCA9IHBhdGguam9pbihjb25maWdEaXIsIGAke2xldmVsfS1iYWNrdXAuJHtleHR9YCk7XG4gICAgY29uc3QgY29uZkZpbGVFeGlzdHMgPSBmcy5leGlzdHNTeW5jKG91dHB1dFBhdGgpO1xuICAgIGlmIChjb25mRmlsZUV4aXN0cykge1xuICAgICAgZnMucmVuYW1lU3luYyhvdXRwdXRQYXRoLCBiYWNrdXBQYXRoKTtcbiAgICB9XG4gICAgZnMud3JpdGVGaWxlU3luYyhvdXRwdXRQYXRoLCBvdXRwdXQpO1xuXG4gICAgY29uc3QgdXBkYXRlZENvbmZPYmogPSBjb25maWcudXRpbC5sb2FkRmlsZUNvbmZpZ3MoKTtcblxuICAgIHRyeSB7XG4gICAgICB0aGlzLnZhbGlkYXRlQ29uZmlnKHVwZGF0ZWRDb25mT2JqKTtcbiAgICAgIGZzLnVubGlua1N5bmMoYmFja3VwUGF0aCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGZzLnVubGlua1N5bmMob3V0cHV0UGF0aCk7XG4gICAgICBpZiAoY29uZkZpbGVFeGlzdHMpIHtcbiAgICAgICAgZnMucmVuYW1lU3luYyhiYWNrdXBQYXRoLCBvdXRwdXRQYXRoKTtcbiAgICAgIH1cbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgfTtcbn1cbiJdfQ==
@@ -2,31 +2,31 @@ import { ConfigValidator } from '../../config';
2
2
  import * as types from '../types/fields';
3
3
  export declare const propertyValidators: {
4
4
  all: {
5
- type: (field: types.ConfigField, config: ConfigValidator) => void;
6
- label: (field: types.ConfigField, config: ConfigValidator) => void;
7
- description: (field: types.ConfigField, config: ConfigValidator) => void;
5
+ type: (field: types.ConfigField, _config: ConfigValidator) => void;
6
+ label: (field: types.ConfigField, _config: ConfigValidator) => void;
7
+ description: (field: types.ConfigField, _config: ConfigValidator) => void;
8
8
  };
9
9
  primitive: {
10
10
  validations: (field: types.PrimitiveField, config: ConfigValidator) => void;
11
11
  };
12
12
  object: {
13
- children: (field: types.ObjectField, config: ConfigValidator) => void;
13
+ children: (field: types.ObjectField, _config: ConfigValidator) => void;
14
14
  };
15
15
  array: {
16
- items: (field: types.ArrayField, config: ConfigValidator) => void;
17
- default: (field: types.ArrayField, config: ConfigValidator) => void;
16
+ items: (field: types.ArrayField, _config: ConfigValidator) => void;
17
+ default: (field: types.ArrayField, _config: ConfigValidator) => void;
18
18
  };
19
19
  string: {
20
- default: (field: types.StringField, config: ConfigValidator) => void;
20
+ default: (field: types.StringField, _config: ConfigValidator) => void;
21
21
  };
22
22
  boolean: {
23
- default: (field: types.BooleanField, config: ConfigValidator) => void;
23
+ default: (field: types.BooleanField, _config: ConfigValidator) => void;
24
24
  };
25
25
  number: {
26
- default: (field: types.NumberField, config: ConfigValidator) => void;
26
+ default: (field: types.NumberField, _config: ConfigValidator) => void;
27
27
  };
28
28
  bigint: {
29
- default: (field: types.BigIntField, config: ConfigValidator) => void;
29
+ default: (field: types.BigIntField, _config: ConfigValidator) => void;
30
30
  };
31
31
  };
32
32
  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;AA0DzC,eAAO,MAAM,kBAAkB;;sBAEb,KAAK,CAAC,WAAW,UAAU,eAAe;uBAWzC,KAAK,CAAC,WAAW,UAAU,eAAe;6BAKpC,KAAK,CAAC,WAAW,UAAU,eAAe;;;6BAU1C,KAAK,CAAC,cAAc,UAAU,eAAe;;;0BAuEhD,KAAK,CAAC,WAAW,UAAU,eAAe;;;uBAa7C,KAAK,CAAC,UAAU,UAAU,eAAe;yBAOvC,KAAK,CAAC,UAAU,UAAU,eAAe;;;yBAgBzC,KAAK,CAAC,WAAW,UAAU,eAAe;;;yBAY1C,KAAK,CAAC,YAAY,UAAU,eAAe;;;yBAY3C,KAAK,CAAC,WAAW,UAAU,eAAe;;;yBAY1C,KAAK,CAAC,WAAW,UAAU,eAAe;;CAgB9D,CAAC;AAEF,eAAO,MAAM,cAAc,UAE1B,CAAC"}
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;AA0DzC,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;;;yBAiB1C,KAAK,CAAC,WAAW,WAAW,eAAe;;;yBAa3C,KAAK,CAAC,YAAY,WAAW,eAAe;;;yBAa5C,KAAK,CAAC,WAAW,WAAW,eAAe;;;yBAa3C,KAAK,CAAC,WAAW,WAAW,eAAe;;CAgB/D,CAAC;AAEF,eAAO,MAAM,cAAc,UAE1B,CAAC"}
@@ -46,7 +46,8 @@ const assertShapeMatchesField = (value, field) => {
46
46
  };
47
47
  export const propertyValidators = {
48
48
  all: {
49
- type: (field, config) => {
49
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
50
+ type: (field, _config) => {
50
51
  if (!Object.hasOwn(field, 'type') || typeof field.type !== 'string') {
51
52
  throw new Error(`every schema field must have a "type" property of type "string"`);
52
53
  }
@@ -54,12 +55,14 @@ export const propertyValidators = {
54
55
  throw new Error(`unsupported field type "${field.type}"`);
55
56
  }
56
57
  },
57
- label: (field, config) => {
58
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
59
+ label: (field, _config) => {
58
60
  if (Object.hasOwn(field, 'label') && typeof field.label !== 'string') {
59
61
  throw new Error(`"label" property should be a "string"`);
60
62
  }
61
63
  },
62
- description: (field, config) => {
64
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
65
+ description: (field, _config) => {
63
66
  if (Object.hasOwn(field, 'description') &&
64
67
  typeof field.description !== 'string') {
65
68
  throw new Error(`"description" property should be a "string"`);
@@ -111,7 +114,8 @@ export const propertyValidators = {
111
114
  },
112
115
  },
113
116
  object: {
114
- children: (field, config) => {
117
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
118
+ children: (field, _config) => {
115
119
  if (!Object.hasOwn(field, 'children') ||
116
120
  typeof field.children !== 'object') {
117
121
  throw new Error(`object field type must have a "children" property of type "object"`);
@@ -120,12 +124,14 @@ export const propertyValidators = {
120
124
  },
121
125
  },
122
126
  array: {
123
- items: (field, config) => {
127
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
128
+ items: (field, _config) => {
124
129
  if (!Object.hasOwn(field, 'items') || typeof field.items !== 'object') {
125
130
  throw new Error(`array field type must have a "items" property of type "object"`);
126
131
  }
127
132
  },
128
- default: (field, config) => {
133
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
134
+ default: (field, _config) => {
129
135
  if (!Object.hasOwn(field, 'default'))
130
136
  return;
131
137
  if (!Array.isArray(field.default)) {
@@ -137,7 +143,8 @@ export const propertyValidators = {
137
143
  },
138
144
  },
139
145
  string: {
140
- default: (field, config) => {
146
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
147
+ default: (field, _config) => {
141
148
  if (Object.hasOwn(field, 'default') &&
142
149
  typeof field.default !== 'string') {
143
150
  throw new Error(`default value=[${field.default}] doesn't match field type=[${field.type}]`);
@@ -145,7 +152,8 @@ export const propertyValidators = {
145
152
  },
146
153
  },
147
154
  boolean: {
148
- default: (field, config) => {
155
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
156
+ default: (field, _config) => {
149
157
  if (Object.hasOwn(field, 'default') &&
150
158
  typeof field.default !== 'boolean') {
151
159
  throw new Error(`default value=[${field.default}] doesn't match field type=[${field.type}]`);
@@ -153,7 +161,8 @@ export const propertyValidators = {
153
161
  },
154
162
  },
155
163
  number: {
156
- default: (field, config) => {
164
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
165
+ default: (field, _config) => {
157
166
  if (Object.hasOwn(field, 'default') &&
158
167
  typeof field.default !== 'number') {
159
168
  throw new Error(`default value=[${field.default}] doesn't match field type=[${field.type}]`);
@@ -161,7 +170,8 @@ export const propertyValidators = {
161
170
  },
162
171
  },
163
172
  bigint: {
164
- default: (field, config) => {
173
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
174
+ default: (field, _config) => {
165
175
  if (Object.hasOwn(field, 'default') &&
166
176
  !(typeof field.default === 'bigint' ||
167
177
  ((typeof field.default === 'number' ||
@@ -277,4 +287,4 @@ const fieldValidations = {
277
287
  },
278
288
  },
279
289
  };
280
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmllbGRQcm9wZXJ0aWVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vbGliL3NjaGVtYS9WYWxpZGF0b3JzL2ZpZWxkUHJvcGVydGllcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFJQSw4RkFBOEY7QUFDOUYsTUFBTSx1QkFBdUIsR0FBRyxDQUFDLEtBQVUsRUFBRSxLQUF3QixFQUFFLEVBQUU7SUFDdkUsSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQzVCLElBQUksS0FBSyxJQUFJLElBQUksSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3ZFLE1BQU0sSUFBSSxLQUFLLENBQUMsOEJBQThCLENBQUMsQ0FBQztRQUNsRCxDQUFDO1FBQ0QsS0FBSyxNQUFNLENBQUMsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDbkMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUUsS0FBMkIsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztnQkFDN0QsTUFBTSxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsa0NBQWtDLENBQUMsQ0FBQztZQUMzRCxDQUFDO1lBQ0QsdUJBQXVCLENBQ3BCLEtBQTZCLENBQUMsQ0FBQyxDQUFDLEVBQ2hDLEtBQTJCLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUN6QyxDQUFDO1FBQ0osQ0FBQztRQUNELE9BQU87SUFDVCxDQUFDO0lBRUQsSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLE9BQU8sRUFBRSxDQUFDO1FBQzNCLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDMUIsTUFBTSxJQUFJLEtBQUssQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDO1FBQ2pELENBQUM7UUFDRCxLQUFLLE1BQU0s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QUFLLENBQUMsNkNBQTZDLENBQUMsQ0FBQztZQUNqRSxDQUFDO1FBQ0gsQ0FBQztRQUNELEdBQUcsRUFBRSxDQUFDLFVBQTRCLEVBQUUsRUFBRTtZQUNwQyxJQUFJLENBQUMsQ0FBQyxLQUFLLElBQUksVUFBVSxDQUFDLEVBQUUsQ0FBQztnQkFDM0IsT0FBTztZQUNULENBQUM7WUFDRCxJQUFJLE9BQU8sVUFBVSxDQUFDLEdBQUcsS0FBSyxRQUFRLEVBQUUsQ0FBQztnQkFDdkMsTUFBTSxJQUFJLEtBQUssQ0FBQyw4Q0FBOEMsQ0FBQyxDQUFDO1lBQ2xFLENBQUM7UUFDSCxDQUFDO0tBQ0Y7Q0FDRixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29uZmlnVmFsaWRhdG9yIH0gZnJvbSAnLi4vLi4vY29uZmlnJztcbmltcG9ydCAqIGFzIHR5cGVzIGZyb20gJy4uL3R5cGVzL2ZpZWxkcyc7XG5pbXBvcnQgeyBWQWxsLCBWTnVtZXJpYywgVlN0cmluZyB9IGZyb20gJy4uL3R5cGVzL3ZhbGlkYXRpb25zJztcblxuLy8gRW5zdXJlcyBhIHByb3ZpZGVkIHZhbHVlIHN0cnVjdHVyYWxseSBtYXRjaGVzIGEgZmllbGQgc2NoZW1hIChub24tdHJhdmVyc2FsIG9mIHNjaGVtYSB0cmVlKVxuY29uc3QgYXNzZXJ0U2hhcGVNYXRjaGVzRmllbGQgPSAodmFsdWU6IGFueSwgZmllbGQ6IHR5cGVzLkNvbmZpZ0ZpZWxkKSA9PiB7XG4gIGlmIChmaWVsZC50eXBlID09PSAnb2JqZWN0Jykge1xuICAgIGlmICh2YWx1ZSA9PSBudWxsIHx8IHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcgfHwgQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcigndmFsdWUgbXVzdCBiZSBvZiBvYmplY3QgdHlwZScpO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IGsgb2YgT2JqZWN0LmtleXModmFsdWUpKSB7XG4gICAgICBpZiAoIU9iamVjdC5oYXNPd24oKGZpZWxkIGFzIHR5cGVzLk9iamVjdEZpZWxkKS5jaGlsZHJlbiwgaykpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBcIiR7a31cIiBrZXkgaXMgbm90IGZvdW5kIGluIHRoZSBzY2hlbWFgKTtcbiAgICAgIH1cbiAgICAgIGFzc2VydFNoYXBlTWF0Y2hlc0ZpZWxkKFxuICAgICAgICAodmFsdWUgYXMgUmVjb3JkPHN0cmluZywgYW55Pilba10sXG4gICAgICAgIChmaWVsZCBhcyB0eXBlcy5PYmplY3RGaWVsZCkuY2hpbGRyZW5ba11cbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChmaWVsZC50eXBlID09PSAnYXJyYXknKSB7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCd2YWx1ZSBtdXN0IGJlIG9mIGFycmF5IHR5cGUnKTtcbiAgICB9XG4gICAgZm9yIChjb25zdCBpdGVtIG9mIHZhbHVlKSB7XG4gICAgICBhc3NlcnRTaGFwZU1hdGNoZXNGaWVsZChpdGVtLCAoZmllbGQgYXMgdHlwZXMuQXJyYXlGaWVsZCkuaXRlbXMpO1xuICAgIH1cbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAodmFsdWUgPT0gdW5kZWZpbmVkKSByZXR1cm47XG4gIHN3aXRjaCAoZmllbGQudHlwZSkge1xuICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAnc3RyaW5nJylcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd2YWx1ZSBtdXN0IGJlIG9mIHN0cmluZyB0eXBlJyk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdudW1iZXInOlxuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ251bWJlcicpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcigndmFsdWUgbXVzdCBiZSBvZiBudW1iZXIgdHlwZScpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnYm9vbGVhbic6XG4gICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAnYm9vbGVhbicpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcigndmFsdWUgbXVzdCBiZSBvZiBib29sZWFuIHR5cGUnKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2JpZ2ludCc6XG4gICAgICBpZiAoXG4gICAgICAgICEoXG4gICAgICAgICAgdHlwZW9mIHZhbHVlID09PSAnYmlnaW50JyB8fFxuICAgICAgICAgICgodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJyB8fCB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSAmJlxuICAgICAgICAgICAgQmlnSW50KHZhbHVlKSlcbiAgICAgICAgKVxuICAgICAgKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3ZhbHVlIG11c3QgYmUgb2YgYmlnaW50IHR5cGUnKTtcbiAgICAgIGJyZWFrO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgcHJvcGVydHlWYWxpZGF0b3JzID0ge1xuICBhbGw6IHtcbiAgICB0eXBlOiAoZmllbGQ6IHR5cGVzLkNvbmZpZ0ZpZWxkLCBjb25maWc6IENvbmZpZ1ZhbGlkYXRvcikgPT4ge1xuICAgICAgaWYgKCFPYmplY3QuaGFzT3duKGZpZWxkLCAndHlwZScpIHx8IHR5cGVvZiBmaWVsZC50eXBlICE9PSAnc3RyaW5nJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYGV2ZXJ5IHNjaGVtYSBmaWVsZCBtdXN0IGhhdmUgYSBcInR5cGVcIiBwcm9wZXJ0eSBvZiB0eXBlIFwic3RyaW5nXCJgXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIGlmICghc3VwcG9ydGVkVHlwZXMuaW5jbHVkZXMoZmllbGQudHlwZSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGB1bnN1cHBvcnRlZCBmaWVsZCB0eXBlIFwiJHtmaWVsZC50eXBlfVwiYCk7XG4gICAgICB9XG4gICAgfSxcbiAgICBsYWJlbDogKGZpZWxkOiB0eXBlcy5Db25maWdGaWVsZCwgY29uZmlnOiBDb25maWdWYWxpZGF0b3IpID0+IHtcbiAgICAgIGlmIChPYmplY3QuaGFzT3duKGZpZWxkLCAnbGFiZWwnKSAmJiB0eXBlb2YgZmllbGQubGFiZWwgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgXCJsYWJlbFwiIHByb3BlcnR5IHNob3VsZCBiZSBhIFwic3RyaW5nXCJgKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGRlc2NyaXB0aW9uOiAoZmllbGQ6IHR5cGVzLkNvbmZpZ0ZpZWxkLCBjb25maWc6IENvbmZpZ1ZhbGlkYXRvcikgPT4ge1xuICAgICAgaWYgKFxuICAgICAgICBPYmplY3QuaGFzT3duKGZpZWxkLCAnZGVzY3JpcHRpb24nKSAmJlxuICAgICAgICB0eXBlb2YgZmllbGQuZGVzY3JpcHRpb24gIT09ICdzdHJpbmcnXG4gICAgICApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBcImRlc2NyaXB0aW9uXCIgcHJvcGVydHkgc2hvdWxkIGJlIGEgXCJzdHJpbmdcImApO1xuICAgICAgfVxuICAgIH0sXG4gIH0sXG4gIHByaW1pdGl2ZToge1xuICAgIHZhbGlkYXRpb25zOiAoZmllbGQ6IHR5cGVzLlByaW1pdGl2ZUZpZWxkLCBjb25maWc6IENvbmZpZ1ZhbGlkYXRvcikgPT4ge1xuICAgICAgaWYgKCFPYmplY3QuaGFzT3duKGZpZWxkLCAndmFsaWRhdGlvbnMnKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmICghQXJyYXkuaXNBcnJheShmaWVsZC52YWxpZGF0aW9ucykpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICdcInZhbGlkYXRpb25zXCIgcHJvcGVydHkgbXVzdCBiZSBhbiBhcnJheSBvZiB2YWxpZGF0aW9uIGRlc2NyaXB0aW9ucydcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgZm9yIChjb25zdCB2YWxpZGF0aW9uIG9mIGZpZWxkLnZhbGlkYXRpb25zKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBPYmplY3QuaGFzT3duKHZhbGlkYXRpb24sICdlcnJvcicpICYmXG4gICAgICAgICAgdHlwZW9mIHZhbGlkYXRpb24uZXJyb3IgIT09ICdzdHJpbmcnXG4gICAgICAgICkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICdcImVycm9yXCIgcHJvcGVydHkgb2YgYSB2YWxpZGF0aW9uIGRlc2NyaXB0aW9uIG11c3QgYmUgYSBzdHJpbmcnXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChPYmplY3QuaGFzT3duKHZhbGlkYXRpb24sICd3aGVuJykgJiYgdmFsaWRhdGlvbi53aGVuICE9IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICFPYmplY3QuaGFzT3duKHZhbGlkYXRpb24ud2hlbiwgJ3BhdGgnKSB8fFxuICAgICAgICAgICAgdHlwZW9mIHZhbGlkYXRpb24ud2hlbi5wYXRoICE9PSAnc3RyaW5nJ1xuICAgICAgICAgICkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgICBgXCJ3aGVuXCIgcHJvcGVydHkgb2YgYSB2YWxpZGF0aW9uIGRlc2NyaXB0aW9uIG11c3QgaGF2ZSBhIFwicGF0aFwiIHByb3BlcnR5IG9mIHR5cGUgXCJzdHJpbmdcImBcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgY29uZmlnLmdldFNjaGVtYUZpZWxkKHZhbGlkYXRpb24ud2hlbi5wYXRoLnNwbGl0KCcuJykpID09IHVuZGVmaW5lZFxuICAgICAgICAgICkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgICBgXCJ3aGVuXCIgcHJvcGVydHkgb2YgYSB2YWxpZGF0aW9uIGRlc2NyaXB0aW9uIGhhcyBhIG5vbi1leGlzdGVudCBwYXRoPVske3ZhbGlkYXRpb24ud2hlbi5wYXRofV1gXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICghT2JqZWN0Lmhhc093bih2YWxpZGF0aW9uLndoZW4sICd2YWx1ZScpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgIGBcIndoZW5cIiBwcm9wZXJ0eSBvZiBhIHZhbGlkYXRpb24gZGVzY3JpcHRpb24gbXVzdCBoYXZlIGEgXCJ2YWx1ZVwiIHByb3BlcnR5YFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB2YWxpZGF0aW9uUHJvcGVydGllcyA9IE9iamVjdC5rZXlzKHZhbGlkYXRpb24pLmZpbHRlcihcbiAgICAgICAgICAoa2V5KSA9PiBrZXkgIT09ICd3aGVuJyAmJiBrZXkgIT09ICdlcnJvcidcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKHZhbGlkYXRpb25Qcm9wZXJ0aWVzLmxlbmd0aCAhPT0gMSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcigndmFsaWRhdGlvbiBkZXNjcmlwdGlvbiBmb3JtYXQgaXMgd3JvbmcnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHZhbGlkYXRpb25OYW1lID0gdmFsaWRhdGlvblByb3BlcnRpZXNbMF07XG4gICAgICAgIGNvbnN0IHByaW1pdGl2ZVZhbGlkYXRvciA9IGZpZWxkVmFsaWRhdGlvbnMucHJpbWl0aXZlW3ZhbGlkYXRpb25OYW1lXTtcbiAgICAgICAgY29uc3QgdHlwZVZhbGlkYXRvciA9IGZpZWxkVmFsaWRhdGlvbnNbZmllbGQudHlwZV1bdmFsaWRhdGlvbk5hbWVdO1xuICAgICAgICBpZiAocHJpbWl0aXZlVmFsaWRhdG9yID09IHVuZGVmaW5lZCAmJiB0eXBlVmFsaWRhdG9yID09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgIGB2YWxpZGF0aW9uIGRlc2NyaXB0aW9uIGhhcyBhbiB1bmtub3duIHZhbGlkYXRvciBcIiR7dmFsaWRhdGlvbk5hbWV9XCJgXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwcmltaXRpdmVWYWxpZGF0b3IgIT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgcHJpbWl0aXZlVmFsaWRhdG9yKHZhbGlkYXRpb24pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHR5cGVWYWxpZGF0b3IodmFsaWRhdGlvbik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICB9LFxuICBvYmplY3Q6IHtcbiAgICBjaGlsZHJlbjogKGZpZWxkOiB0eXBlcy5PYmplY3RGaWVsZCwgY29uZmlnOiBDb25maWdWYWxpZGF0b3IpID0+IHtcbiAgICAgIGlmIChcbiAgICAgICAgIU9iamVjdC5oYXNPd24oZmllbGQsICdjaGlsZHJlbicpIHx8XG4gICAgICAgIHR5cGVvZiBmaWVsZC5jaGlsZHJlbiAhPT0gJ29iamVjdCdcbiAgICAgICkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYG9iamVjdCBmaWVsZCB0eXBlIG11c3QgaGF2ZSBhIFwiY2hpbGRyZW5cIiBwcm9wZXJ0eSBvZiB0eXBlIFwib2JqZWN0XCJgXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfSxcbiAgfSxcbiAgYXJyYXk6IHtcbiAgICBpdGVtczogKGZpZWxkOiB0eXBlcy5BcnJheUZpZWxkLCBjb25maWc6IENvbmZpZ1ZhbGlkYXRvcikgPT4ge1xuICAgICAgaWYgKCFPYmplY3QuaGFzT3duKGZpZWxkLCAnaXRlbXMnKSB8fCB0eXBlb2YgZmllbGQuaXRlbXMgIT09ICdvYmplY3QnKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgYXJyYXkgZmllbGQgdHlwZSBtdXN0IGhhdmUgYSBcIml0ZW1zXCIgcHJvcGVydHkgb2YgdHlwZSBcIm9iamVjdFwiYFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0sXG4gICAgZGVmYXVsdDogKGZpZWxkOiB0eXBlcy5BcnJheUZpZWxkLCBjb25maWc6IENvbmZpZ1ZhbGlkYXRvcikgPT4ge1xuICAgICAgaWYgKCFPYmplY3QuaGFzT3duKGZpZWxkLCAnZGVmYXVsdCcpKSByZXR1cm47XG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkoKGZpZWxkIGFzIGFueSkuZGVmYXVsdCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBkZWZhdWx0IHZhbHVlPVske1xuICAgICAgICAgICAgKGZpZWxkIGFzIGFueSkuZGVmYXVsdFxuICAgICAgICAgIH1dIGRvZXNuJ3QgbWF0Y2ggZmllbGQgdHlwZT1bJHtmaWVsZC50eXBlfV1gXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIGZvciAoY29uc3QgZWxlbSBvZiAoZmllbGQgYXMgYW55KS5kZWZhdWx0IGFzIGFueVtdKSB7XG4gICAgICAgIGFzc2VydFNoYXBlTWF0Y2hlc0ZpZWxkKGVsZW0sIGZpZWxkLml0ZW1zKTtcbiAgICAgIH1cbiAgICB9LFxuICB9LFxuICBzdHJpbmc6IHtcbiAgICBkZWZhdWx0OiAoZmllbGQ6IHR5cGVzLlN0cmluZ0ZpZWxkLCBjb25maWc6IENvbmZpZ1ZhbGlkYXRvcikgPT4ge1xuICAgICAgaWYgKFxuICAgICAgICBPYmplY3QuaGFzT3duKGZpZWxkLCAnZGVmYXVsdCcpICYmXG4gICAgICAgIHR5cGVvZiBmaWVsZC5kZWZhdWx0ICE9PSAnc3RyaW5nJ1xuICAgICAgKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgZGVmYXVsdCB2YWx1ZT1bJHtmaWVsZC5kZWZhdWx0fV0gZG9lc24ndCBtYXRjaCBmaWVsZCB0eXBlPVske2ZpZWxkLnR5cGV9XWBcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9LFxuICB9LFxuICBib29sZWFuOiB7XG4gICAgZGVmYXVsdDogKGZpZWxkOiB0eXBlcy5Cb29sZWFuRmllbGQsIGNvbmZpZzogQ29uZmlnVmFsaWRhdG9yKSA9PiB7XG4gICAgICBpZiAoXG4gICAgICAgIE9iamVjdC5oYXNPd24oZmllbGQsICdkZWZhdWx0JykgJiZcbiAgICAgICAgdHlwZW9mIGZpZWxkLmRlZmF1bHQgIT09ICdib29sZWFuJ1xuICAgICAgKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgZGVmYXVsdCB2YWx1ZT1bJHtmaWVsZC5kZWZhdWx0fV0gZG9lc24ndCBtYXRjaCBmaWVsZCB0eXBlPVske2ZpZWxkLnR5cGV9XWBcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9LFxuICB9LFxuICBudW1iZXI6IHtcbiAgICBkZWZhdWx0OiAoZmllbGQ6IHR5cGVzLk51bWJlckZpZWxkLCBjb25maWc6IENvbmZpZ1ZhbGlkYXRvcikgPT4ge1xuICAgICAgaWYgKFxuICAgICAgICBPYmplY3QuaGFzT3duKGZpZWxkLCAnZGVmYXVsdCcpICYmXG4gICAgICAgIHR5cGVvZiBmaWVsZC5kZWZhdWx0ICE9PSAnbnVtYmVyJ1xuICAgICAgKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgZGVmYXVsdCB2YWx1ZT1bJHtmaWVsZC5kZWZhdWx0fV0gZG9lc24ndCBtYXRjaCBmaWVsZCB0eXBlPVske2ZpZWxkLnR5cGV9XWBcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9LFxuICB9LFxuICBiaWdpbnQ6IHtcbiAgICBkZWZhdWx0OiAoZmllbGQ6IHR5cGVzLkJpZ0ludEZpZWxkLCBjb25maWc6IENvbmZpZ1ZhbGlkYXRvcikgPT4ge1xuICAgICAgaWYgKFxuICAgICAgICBPYmplY3QuaGFzT3duKGZpZWxkLCAnZGVmYXVsdCcpICYmXG4gICAgICAgICEoXG4gICAgICAgICAgdHlwZW9mIGZpZWxkLmRlZmF1bHQgPT09ICdiaWdpbnQnIHx8XG4gICAgICAgICAgKCh0eXBlb2YgZmllbGQuZGVmYXVsdCA9PT0gJ251bWJlcicgfHxcbiAgICAgICAgICAgIHR5cGVvZiBmaWVsZC5kZWZhdWx0ID09PSAnc3RyaW5nJykgJiZcbiAgICAgICAgICAgIEJpZ0ludChmaWVsZC5kZWZhdWx0KSlcbiAgICAgICAgKVxuICAgICAgKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgZGVmYXVsdCB2YWx1ZT1bJHtmaWVsZC5kZWZhdWx0fV0gZG9lc24ndCBtYXRjaCBmaWVsZCB0eXBlPVske2ZpZWxkLnR5cGV9XWBcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9LFxuICB9LFxufTtcblxuZXhwb3J0IGNvbnN0IHN1cHBvcnRlZFR5cGVzID0gT2JqZWN0LmtleXMocHJvcGVydHlWYWxpZGF0b3JzKS5maWx0ZXIoXG4gIChrZXkpID0+IGtleSAhPT0gJ2FsbCcgJiYga2V5ICE9PSAncHJpbWl0aXZlJ1xuKTtcblxuY29uc3QgZmllbGRWYWxpZGF0aW9uczogUmVjb3JkPHN0cmluZywgUmVjb3JkPHN0cmluZywgYW55Pj4gPSB7XG4gIHByaW1pdGl2ZToge1xuICAgIHJlcXVpcmVkOiAodmFsaWRhdGlvbjogVkFsbCkgPT4ge1xuICAgICAgaWYgKCEoJ3JlcXVpcmVkJyBpbiB2YWxpZGF0aW9uKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgdmFsaWRhdGlvbi5yZXF1aXJlZCAhPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgXCJyZXF1aXJlZFwiIHZhbGlkYXRpb24gcHJvcGVydHkgc2hvdWxkIGJlIGEgYm9vbGVhbmApO1xuICAgICAgfVxuICAgIH0sXG4gIH0sXG4gIHN0cmluZzoge1xuICAgIHJlZ2V4OiAodmFsaWRhdGlvbjogVlN0cmluZykgPT4ge1xuICAgICAgaWYgKCEoJ3JlZ2V4JyBpbiB2YWxpZGF0aW9uKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAodHlwZW9mIHZhbGlkYXRpb24ucmVnZXggIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgXCJyZWdleFwiIHZhbGlkYXRpb24gcHJvcGVydHkgc2hvdWxkIGJlIGEgc3RyaW5nYCk7XG4gICAgICB9XG4gICAgfSxcbiAgICBjaG9pY2VzOiAodmFsaWRhdGlvbjogVlN0cmluZykgPT4ge1xuICAgICAgaWYgKCEoJ2Nob2ljZXMnIGluIHZhbGlkYXRpb24pKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICghQXJyYXkuaXNBcnJheSh2YWxpZGF0aW9uLmNob2ljZXMpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgXCJjaG9pY2VzXCIgdmFsaWRhdGlvbiBwcm9wZXJ0eSBzaG91bGQgYmUgYW4gXCJhcnJheVwiIG9mIHN0cmluZ3NgXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIGZvciAoY29uc3QgY2hvaWNlIG9mIHZhbGlkYXRpb24uY2hvaWNlcykge1xuICAgICAgICBpZiAodHlwZW9mIGNob2ljZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICBgXCJjaG9pY2VzXCIgdmFsaWRhdGlvbiBwcm9wZXJ0eSBzaG91bGQgYmUgYW4gYXJyYXkgb2YgXCJzdHJpbmdzXCJgXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gIH0sXG4gIGJvb2xlYW46IHt9LFxuICBudW1iZXI6IHtcbiAgICBndDogKHZhbGlkYXRpb246IFZOdW1lcmljPG51bWJlcj4pID0+IHtcbiAgICAgIGlmICghKCdndCcgaW4gdmFsaWRhdGlvbikpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKHR5cGVvZiB2YWxpZGF0aW9uLmd0ICE9PSAnbnVtYmVyJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFwiZ3RcIiB2YWxpZGF0aW9uIHByb3BlcnR5IHNob3VsZCBiZSBhIG51bWJlcmApO1xuICAgICAgfVxuICAgIH0sXG4gICAgZ3RlOiAodmFsaWRhdGlvbjogVk51bWVyaWM8bnVtYmVyPikgPT4ge1xuICAgICAgaWYgKCEoJ2d0ZScgaW4gdmFsaWRhdGlvbikpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKHR5cGVvZiB2YWxpZGF0aW9uLmd0ZSAhPT0gJ251bWJlcicpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBcImd0ZVwiIHZhbGlkYXRpb24gcHJvcGVydHkgc2hvdWxkIGJlIGEgbnVtYmVyYCk7XG4gICAgICB9XG4gICAgfSxcbiAgICBsdDogKHZhbGlkYXRpb246IFZOdW1lcmljPG51bWJlcj4pID0+IHtcbiAgICAgIGlmICghKCdsdCcgaW4gdmFsaWRhdGlvbikpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIHZhbGlkYXRpb24ubHQgIT09ICdudW1iZXInKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgXCJsdFwiIHZhbGlkYXRpb24gcHJvcGVydHkgc2hvdWxkIGJlIGEgbnVtYmVyYCk7XG4gICAgICB9XG4gICAgfSxcbiAgICBsdGU6ICh2YWxpZGF0aW9uOiBWTnVtZXJpYzxudW1iZXI+KSA9PiB7XG4gICAgICBpZiAoISgnbHRlJyBpbiB2YWxpZGF0aW9uKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgdmFsaWRhdGlvbi5sdGUgIT09ICdudW1iZXInKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgXCJsdGVcIiB2YWxpZGF0aW9uIHByb3BlcnR5IHNob3VsZCBiZSBhIG51bWJlcmApO1xuICAgICAgfVxuICAgIH0sXG4gIH0sXG4gIGJpZ2ludDoge1xuICAgIGd0OiAodmFsaWRhdGlvbjogVk51bWVyaWM8YmlnaW50PikgPT4ge1xuICAgICAgaWYgKCEoJ2d0JyBpbiB2YWxpZGF0aW9uKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgdmFsaWRhdGlvbi5ndCAhPT0gJ2JpZ2ludCcpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBcImd0XCIgdmFsaWRhdGlvbiBwcm9wZXJ0eSBzaG91bGQgYmUgYSBiaWdpbnRgKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGd0ZTogKHZhbGlkYXRpb246IFZOdW1lcmljPGJpZ2ludD4pID0+IHtcbiAgICAgIGlmICghKCdndGUnIGluIHZhbGlkYXRpb24pKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICh0eXBlb2YgdmFsaWRhdGlvbi5ndGUgIT09ICdiaWdpbnQnKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgXCJndGVcIiB2YWxpZGF0aW9uIHByb3BlcnR5IHNob3VsZCBiZSBhIGJpZ2ludGApO1xuICAgICAgfVxuICAgIH0sXG4gICAgbHQ6ICh2YWxpZGF0aW9uOiBWTnVtZXJpYzxiaWdpbnQ+KSA9PiB7XG4gICAgICBpZiAoISgnbHQnIGluIHZhbGlkYXRpb24pKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICh0eXBlb2YgdmFsaWRhdGlvbi5sdCAhPT0gJ2JpZ2ludCcpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBcImx0XCIgdmFsaWRhdGlvbiBwcm9wZXJ0eSBzaG91bGQgYmUgYSBiaWdpbnRgKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGx0ZTogKHZhbGlkYXRpb246IFZOdW1lcmljPGJpZ2ludD4pID0+IHtcbiAgICAgIGlmICghKCdsdGUnIGluIHZhbGlkYXRpb24pKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICh0eXBlb2YgdmFsaWRhdGlvbi5sdGUgIT09ICdiaWdpbnQnKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgXCJsdGVcIiB2YWxpZGF0aW9uIHByb3BlcnR5IHNob3VsZCBiZSBhIGJpZ2ludGApO1xuICAgICAgfVxuICAgIH0sXG4gIH0sXG59O1xuIl19
290
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmllbGRQcm9wZXJ0aWVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vbGliL3NjaGVtYS9WYWxpZGF0b3JzL2ZpZWxkUHJvcGVydGllcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFJQSw4RkFBOEY7QUFDOUYsTUFBTSx1QkFBdUIsR0FBRyxDQUFDLEtBQVUsRUFBRSxLQUF3QixFQUFFLEVBQUU7SUFDdkUsSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQzVCLElBQUksS0FBSyxJQUFJLElBQUksSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3ZFLE1BQU0sSUFBSSxLQUFLLENBQUMsOEJBQThCLENBQUMsQ0FBQztRQUNsRCxDQUFDO1FBQ0QsS0FBSyxNQUFNLENBQUMsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDbkMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUUsS0FBMkIsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztnQkFDN0QsTUFBTSxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsa0NBQWtDLENBQUMsQ0FBQztZQUMzRCxDQUFDO1lBQ0QsdUJBQXVCLENBQ3BCLEtBQTZCLENBQUMsQ0FBQyxDQUFDLEVBQ2hDLEtBQTJCLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUN6QyxDQUFDO1FBQ0osQ0FBQztRQUNELE9BQU87SUFDVCxDQUFDO0lBRUQsSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLE9BQU8sRUFBRSxDQUFDO1FBQzNCLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDMUIsTUFBTSxJQUFJLEtBQUssQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDO1FBQ2pELENBQUM7UUFDRCxLQUFLLE1BQU0s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Q0FBQyxDQUFDLElBQUksSUFBSSxVQUFVLENBQUMsRUFBRSxDQUFDO2dCQUMxQixPQUFPO1lBQ1QsQ0FBQztZQUNELElBQUksT0FBTyxVQUFVLENBQUMsRUFBRSxLQUFLLFFBQVEsRUFBRSxDQUFDO2dCQUN0QyxNQUFNLElBQUksS0FBSyxDQUFDLDZDQUE2QyxDQUFDLENBQUM7WUFDakUsQ0FBQztRQUNILENBQUM7UUFDRCxHQUFHLEVBQUUsQ0FBQyxVQUE0QixFQUFFLEVBQUU7WUFDcEMsSUFBSSxDQUFDLENBQUMsS0FBSyxJQUFJLFVBQVUsQ0FBQyxFQUFFLENBQUM7Z0JBQzNCLE9BQU87WUFDVCxDQUFDO1lBQ0QsSUFBSSxPQUFPLFVBQVUsQ0FBQyxHQUFHLEtBQUssUUFBUSxFQUFFLENBQUM7Z0JBQ3ZDLE1BQU0sSUFBSSxLQUFLLENBQUMsOENBQThDLENBQUMsQ0FBQztZQUNsRSxDQUFDO1FBQ0gsQ0FBQztLQUNGO0NBQ0YsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbmZpZ1ZhbGlkYXRvciB9IGZyb20gJy4uLy4uL2NvbmZpZyc7XG5pbXBvcnQgKiBhcyB0eXBlcyBmcm9tICcuLi90eXBlcy9maWVsZHMnO1xuaW1wb3J0IHsgVkFsbCwgVk51bWVyaWMsIFZTdHJpbmcgfSBmcm9tICcuLi90eXBlcy92YWxpZGF0aW9ucyc7XG5cbi8vIEVuc3VyZXMgYSBwcm92aWRlZCB2YWx1ZSBzdHJ1Y3R1cmFsbHkgbWF0Y2hlcyBhIGZpZWxkIHNjaGVtYSAobm9uLXRyYXZlcnNhbCBvZiBzY2hlbWEgdHJlZSlcbmNvbnN0IGFzc2VydFNoYXBlTWF0Y2hlc0ZpZWxkID0gKHZhbHVlOiBhbnksIGZpZWxkOiB0eXBlcy5Db25maWdGaWVsZCkgPT4ge1xuICBpZiAoZmllbGQudHlwZSA9PT0gJ29iamVjdCcpIHtcbiAgICBpZiAodmFsdWUgPT0gbnVsbCB8fCB0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnIHx8IEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ3ZhbHVlIG11c3QgYmUgb2Ygb2JqZWN0IHR5cGUnKTtcbiAgICB9XG4gICAgZm9yIChjb25zdCBrIG9mIE9iamVjdC5rZXlzKHZhbHVlKSkge1xuICAgICAgaWYgKCFPYmplY3QuaGFzT3duKChmaWVsZCBhcyB0eXBlcy5PYmplY3RGaWVsZCkuY2hpbGRyZW4sIGspKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgXCIke2t9XCIga2V5IGlzIG5vdCBmb3VuZCBpbiB0aGUgc2NoZW1hYCk7XG4gICAgICB9XG4gICAgICBhc3NlcnRTaGFwZU1hdGNoZXNGaWVsZChcbiAgICAgICAgKHZhbHVlIGFzIFJlY29yZDxzdHJpbmcsIGFueT4pW2tdLFxuICAgICAgICAoZmllbGQgYXMgdHlwZXMuT2JqZWN0RmllbGQpLmNoaWxkcmVuW2tdLFxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKGZpZWxkLnR5cGUgPT09ICdhcnJheScpIHtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ3ZhbHVlIG11c3QgYmUgb2YgYXJyYXkgdHlwZScpO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgdmFsdWUpIHtcbiAgICAgIGFzc2VydFNoYXBlTWF0Y2hlc0ZpZWxkKGl0ZW0sIChmaWVsZCBhcyB0eXBlcy5BcnJheUZpZWxkKS5pdGVtcyk7XG4gICAgfVxuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmICh2YWx1ZSA9PSB1bmRlZmluZWQpIHJldHVybjtcbiAgc3dpdGNoIChmaWVsZC50eXBlKSB7XG4gICAgY2FzZSAnc3RyaW5nJzpcbiAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICdzdHJpbmcnKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3ZhbHVlIG11c3QgYmUgb2Ygc3RyaW5nIHR5cGUnKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ251bWJlcic6XG4gICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAnbnVtYmVyJylcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd2YWx1ZSBtdXN0IGJlIG9mIG51bWJlciB0eXBlJyk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdib29sZWFuJzpcbiAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICdib29sZWFuJylcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd2YWx1ZSBtdXN0IGJlIG9mIGJvb2xlYW4gdHlwZScpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnYmlnaW50JzpcbiAgICAgIGlmIChcbiAgICAgICAgIShcbiAgICAgICAgICB0eXBlb2YgdmFsdWUgPT09ICdiaWdpbnQnIHx8XG4gICAgICAgICAgKCh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInIHx8IHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpICYmXG4gICAgICAgICAgICBCaWdJbnQodmFsdWUpKVxuICAgICAgICApXG4gICAgICApXG4gICAgICAgIHRocm93IG5ldyBFcnJvcigndmFsdWUgbXVzdCBiZSBvZiBiaWdpbnQgdHlwZScpO1xuICAgICAgYnJlYWs7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBwcm9wZXJ0eVZhbGlkYXRvcnMgPSB7XG4gIGFsbDoge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgICB0eXBlOiAoZmllbGQ6IHR5cGVzLkNvbmZpZ0ZpZWxkLCBfY29uZmlnOiBDb25maWdWYWxpZGF0b3IpID0+IHtcbiAgICAgIGlmICghT2JqZWN0Lmhhc093bihmaWVsZCwgJ3R5cGUnKSB8fCB0eXBlb2YgZmllbGQudHlwZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBldmVyeSBzY2hlbWEgZmllbGQgbXVzdCBoYXZlIGEgXCJ0eXBlXCIgcHJvcGVydHkgb2YgdHlwZSBcInN0cmluZ1wiYCxcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFzdXBwb3J0ZWRUeXBlcy5pbmNsdWRlcyhmaWVsZC50eXBlKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYHVuc3VwcG9ydGVkIGZpZWxkIHR5cGUgXCIke2ZpZWxkLnR5cGV9XCJgKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgICBsYWJlbDogKGZpZWxkOiB0eXBlcy5Db25maWdGaWVsZCwgX2NvbmZpZzogQ29uZmlnVmFsaWRhdG9yKSA9PiB7XG4gICAgICBpZiAoT2JqZWN0Lmhhc093bihmaWVsZCwgJ2xhYmVsJykgJiYgdHlwZW9mIGZpZWxkLmxhYmVsICE9PSAnc3RyaW5nJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFwibGFiZWxcIiBwcm9wZXJ0eSBzaG91bGQgYmUgYSBcInN0cmluZ1wiYCk7XG4gICAgICB9XG4gICAgfSxcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gICAgZGVzY3JpcHRpb246IChmaWVsZDogdHlwZXMuQ29uZmlnRmllbGQsIF9jb25maWc6IENvbmZpZ1ZhbGlkYXRvcikgPT4ge1xuICAgICAgaWYgKFxuICAgICAgICBPYmplY3QuaGFzT3duKGZpZWxkLCAnZGVzY3JpcHRpb24nKSAmJlxuICAgICAgICB0eXBlb2YgZmllbGQuZGVzY3JpcHRpb24gIT09ICdzdHJpbmcnXG4gICAgICApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBcImRlc2NyaXB0aW9uXCIgcHJvcGVydHkgc2hvdWxkIGJlIGEgXCJzdHJpbmdcImApO1xuICAgICAgfVxuICAgIH0sXG4gIH0sXG4gIHByaW1pdGl2ZToge1xuICAgIHZhbGlkYXRpb25zOiAoZmllbGQ6IHR5cGVzLlByaW1pdGl2ZUZpZWxkLCBjb25maWc6IENvbmZpZ1ZhbGlkYXRvcikgPT4ge1xuICAgICAgaWYgKCFPYmplY3QuaGFzT3duKGZpZWxkLCAndmFsaWRhdGlvbnMnKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmICghQXJyYXkuaXNBcnJheShmaWVsZC52YWxpZGF0aW9ucykpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICdcInZhbGlkYXRpb25zXCIgcHJvcGVydHkgbXVzdCBiZSBhbiBhcnJheSBvZiB2YWxpZGF0aW9uIGRlc2NyaXB0aW9ucycsXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIGZvciAoY29uc3QgdmFsaWRhdGlvbiBvZiBmaWVsZC52YWxpZGF0aW9ucykge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgT2JqZWN0Lmhhc093bih2YWxpZGF0aW9uLCAnZXJyb3InKSAmJlxuICAgICAgICAgIHR5cGVvZiB2YWxpZGF0aW9uLmVycm9yICE9PSAnc3RyaW5nJ1xuICAgICAgICApIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAnXCJlcnJvclwiIHByb3BlcnR5IG9mIGEgdmFsaWRhdGlvbiBkZXNjcmlwdGlvbiBtdXN0IGJlIGEgc3RyaW5nJyxcbiAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKE9iamVjdC5oYXNPd24odmFsaWRhdGlvbiwgJ3doZW4nKSAmJiB2YWxpZGF0aW9uLndoZW4gIT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgIU9iamVjdC5oYXNPd24odmFsaWRhdGlvbi53aGVuLCAncGF0aCcpIHx8XG4gICAgICAgICAgICB0eXBlb2YgdmFsaWRhdGlvbi53aGVuLnBhdGggIT09ICdzdHJpbmcnXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgIGBcIndoZW5cIiBwcm9wZXJ0eSBvZiBhIHZhbGlkYXRpb24gZGVzY3JpcHRpb24gbXVzdCBoYXZlIGEgXCJwYXRoXCIgcHJvcGVydHkgb2YgdHlwZSBcInN0cmluZ1wiYCxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgY29uZmlnLmdldFNjaGVtYUZpZWxkKHZhbGlkYXRpb24ud2hlbi5wYXRoLnNwbGl0KCcuJykpID09IHVuZGVmaW5lZFxuICAgICAgICAgICkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgICBgXCJ3aGVuXCIgcHJvcGVydHkgb2YgYSB2YWxpZGF0aW9uIGRlc2NyaXB0aW9uIGhhcyBhIG5vbi1leGlzdGVudCBwYXRoPVske3ZhbGlkYXRpb24ud2hlbi5wYXRofV1gLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoIU9iamVjdC5oYXNPd24odmFsaWRhdGlvbi53aGVuLCAndmFsdWUnKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgICBgXCJ3aGVuXCIgcHJvcGVydHkgb2YgYSB2YWxpZGF0aW9uIGRlc2NyaXB0aW9uIG11c3QgaGF2ZSBhIFwidmFsdWVcIiBwcm9wZXJ0eWAsXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHZhbGlkYXRpb25Qcm9wZXJ0aWVzID0gT2JqZWN0LmtleXModmFsaWRhdGlvbikuZmlsdGVyKFxuICAgICAgICAgIChrZXkpID0+IGtleSAhPT0gJ3doZW4nICYmIGtleSAhPT0gJ2Vycm9yJyxcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKHZhbGlkYXRpb25Qcm9wZXJ0aWVzLmxlbmd0aCAhPT0gMSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcigndmFsaWRhdGlvbiBkZXNjcmlwdGlvbiBmb3JtYXQgaXMgd3JvbmcnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHZhbGlkYXRpb25OYW1lID0gdmFsaWRhdGlvblByb3BlcnRpZXNbMF07XG4gICAgICAgIGNvbnN0IHByaW1pdGl2ZVZhbGlkYXRvciA9IGZpZWxkVmFsaWRhdGlvbnMucHJpbWl0aXZlW3ZhbGlkYXRpb25OYW1lXTtcbiAgICAgICAgY29uc3QgdHlwZVZhbGlkYXRvciA9IGZpZWxkVmFsaWRhdGlvbnNbZmllbGQudHlwZV1bdmFsaWRhdGlvbk5hbWVdO1xuICAgICAgICBpZiAocHJpbWl0aXZlVmFsaWRhdG9yID09IHVuZGVmaW5lZCAmJiB0eXBlVmFsaWRhdG9yID09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgIGB2YWxpZGF0aW9uIGRlc2NyaXB0aW9uIGhhcyBhbiB1bmtub3duIHZhbGlkYXRvciBcIiR7dmFsaWRhdGlvbk5hbWV9XCJgLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocHJpbWl0aXZlVmFsaWRhdG9yICE9IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHByaW1pdGl2ZVZhbGlkYXRvcih2YWxpZGF0aW9uKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0eXBlVmFsaWRhdG9yKHZhbGlkYXRpb24pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgfSxcbiAgb2JqZWN0OiB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICAgIGNoaWxkcmVuOiAoZmllbGQ6IHR5cGVzLk9iamVjdEZpZWxkLCBfY29uZmlnOiBDb25maWdWYWxpZGF0b3IpID0+IHtcbiAgICAgIGlmIChcbiAgICAgICAgIU9iamVjdC5oYXNPd24oZmllbGQsICdjaGlsZHJlbicpIHx8XG4gICAgICAgIHR5cGVvZiBmaWVsZC5jaGlsZHJlbiAhPT0gJ29iamVjdCdcbiAgICAgICkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYG9iamVjdCBmaWVsZCB0eXBlIG11c3QgaGF2ZSBhIFwiY2hpbGRyZW5cIiBwcm9wZXJ0eSBvZiB0eXBlIFwib2JqZWN0XCJgLFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH0sXG4gIH0sXG4gIGFycmF5OiB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICAgIGl0ZW1zOiAoZmllbGQ6IHR5cGVzLkFycmF5RmllbGQsIF9jb25maWc6IENvbmZpZ1ZhbGlkYXRvcikgPT4ge1xuICAgICAgaWYgKCFPYmplY3QuaGFzT3duKGZpZWxkLCAnaXRlbXMnKSB8fCB0eXBlb2YgZmllbGQuaXRlbXMgIT09ICdvYmplY3QnKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgYXJyYXkgZmllbGQgdHlwZSBtdXN0IGhhdmUgYSBcIml0ZW1zXCIgcHJvcGVydHkgb2YgdHlwZSBcIm9iamVjdFwiYCxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgICBkZWZhdWx0OiAoZmllbGQ6IHR5cGVzLkFycmF5RmllbGQsIF9jb25maWc6IENvbmZpZ1ZhbGlkYXRvcikgPT4ge1xuICAgICAgaWYgKCFPYmplY3QuaGFzT3duKGZpZWxkLCAnZGVmYXVsdCcpKSByZXR1cm47XG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkoKGZpZWxkIGFzIGFueSkuZGVmYXVsdCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBkZWZhdWx0IHZhbHVlPVske1xuICAgICAgICAgICAgKGZpZWxkIGFzIGFueSkuZGVmYXVsdFxuICAgICAgICAgIH1dIGRvZXNuJ3QgbWF0Y2ggZmllbGQgdHlwZT1bJHtmaWVsZC50eXBlfV1gLFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBmb3IgKGNvbnN0IGVsZW0gb2YgKGZpZWxkIGFzIGFueSkuZGVmYXVsdCBhcyBhbnlbXSkge1xuICAgICAgICBhc3NlcnRTaGFwZU1hdGNoZXNGaWVsZChlbGVtLCBmaWVsZC5pdGVtcyk7XG4gICAgICB9XG4gICAgfSxcbiAgfSxcbiAgc3RyaW5nOiB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICAgIGRlZmF1bHQ6IChmaWVsZDogdHlwZXMuU3RyaW5nRmllbGQsIF9jb25maWc6IENvbmZpZ1ZhbGlkYXRvcikgPT4ge1xuICAgICAgaWYgKFxuICAgICAgICBPYmplY3QuaGFzT3duKGZpZWxkLCAnZGVmYXVsdCcpICYmXG4gICAgICAgIHR5cGVvZiBmaWVsZC5kZWZhdWx0ICE9PSAnc3RyaW5nJ1xuICAgICAgKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgZGVmYXVsdCB2YWx1ZT1bJHtmaWVsZC5kZWZhdWx0fV0gZG9lc24ndCBtYXRjaCBmaWVsZCB0eXBlPVske2ZpZWxkLnR5cGV9XWAsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSxcbiAgfSxcbiAgYm9vbGVhbjoge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgICBkZWZhdWx0OiAoZmllbGQ6IHR5cGVzLkJvb2xlYW5GaWVsZCwgX2NvbmZpZzogQ29uZmlnVmFsaWRhdG9yKSA9PiB7XG4gICAgICBpZiAoXG4gICAgICAgIE9iamVjdC5oYXNPd24oZmllbGQsICdkZWZhdWx0JykgJiZcbiAgICAgICAgdHlwZW9mIGZpZWxkLmRlZmF1bHQgIT09ICdib29sZWFuJ1xuICAgICAgKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgZGVmYXVsdCB2YWx1ZT1bJHtmaWVsZC5kZWZhdWx0fV0gZG9lc24ndCBtYXRjaCBmaWVsZCB0eXBlPVske2ZpZWxkLnR5cGV9XWAsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSxcbiAgfSxcbiAgbnVtYmVyOiB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICAgIGRlZmF1bHQ6IChmaWVsZDogdHlwZXMuTnVtYmVyRmllbGQsIF9jb25maWc6IENvbmZpZ1ZhbGlkYXRvcikgPT4ge1xuICAgICAgaWYgKFxuICAgICAgICBPYmplY3QuaGFzT3duKGZpZWxkLCAnZGVmYXVsdCcpICYmXG4gICAgICAgIHR5cGVvZiBmaWVsZC5kZWZhdWx0ICE9PSAnbnVtYmVyJ1xuICAgICAgKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgZGVmYXVsdCB2YWx1ZT1bJHtmaWVsZC5kZWZhdWx0fV0gZG9lc24ndCBtYXRjaCBmaWVsZCB0eXBlPVske2ZpZWxkLnR5cGV9XWAsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSxcbiAgfSxcbiAgYmlnaW50OiB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICAgIGRlZmF1bHQ6IChmaWVsZDogdHlwZXMuQmlnSW50RmllbGQsIF9jb25maWc6IENvbmZpZ1ZhbGlkYXRvcikgPT4ge1xuICAgICAgaWYgKFxuICAgICAgICBPYmplY3QuaGFzT3duKGZpZWxkLCAnZGVmYXVsdCcpICYmXG4gICAgICAgICEoXG4gICAgICAgICAgdHlwZW9mIGZpZWxkLmRlZmF1bHQgPT09ICdiaWdpbnQnIHx8XG4gICAgICAgICAgKCh0eXBlb2YgZmllbGQuZGVmYXVsdCA9PT0gJ251bWJlcicgfHxcbiAgICAgICAgICAgIHR5cGVvZiBmaWVsZC5kZWZhdWx0ID09PSAnc3RyaW5nJykgJiZcbiAgICAgICAgICAgIEJpZ0ludChmaWVsZC5kZWZhdWx0KSlcbiAgICAgICAgKVxuICAgICAgKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgZGVmYXVsdCB2YWx1ZT1bJHtmaWVsZC5kZWZhdWx0fV0gZG9lc24ndCBtYXRjaCBmaWVsZCB0eXBlPVske2ZpZWxkLnR5cGV9XWAsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSxcbiAgfSxcbn07XG5cbmV4cG9ydCBjb25zdCBzdXBwb3J0ZWRUeXBlcyA9IE9iamVjdC5rZXlzKHByb3BlcnR5VmFsaWRhdG9ycykuZmlsdGVyKFxuICAoa2V5KSA9PiBrZXkgIT09ICdhbGwnICYmIGtleSAhPT0gJ3ByaW1pdGl2ZScsXG4pO1xuXG5jb25zdCBmaWVsZFZhbGlkYXRpb25zOiBSZWNvcmQ8c3RyaW5nLCBSZWNvcmQ8c3RyaW5nLCBhbnk+PiA9IHtcbiAgcHJpbWl0aXZlOiB7XG4gICAgcmVxdWlyZWQ6ICh2YWxpZGF0aW9uOiBWQWxsKSA9PiB7XG4gICAgICBpZiAoISgncmVxdWlyZWQnIGluIHZhbGlkYXRpb24pKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiB2YWxpZGF0aW9uLnJlcXVpcmVkICE9PSAnYm9vbGVhbicpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBcInJlcXVpcmVkXCIgdmFsaWRhdGlvbiBwcm9wZXJ0eSBzaG91bGQgYmUgYSBib29sZWFuYCk7XG4gICAgICB9XG4gICAgfSxcbiAgfSxcbiAgc3RyaW5nOiB7XG4gICAgcmVnZXg6ICh2YWxpZGF0aW9uOiBWU3RyaW5nKSA9PiB7XG4gICAgICBpZiAoISgncmVnZXgnIGluIHZhbGlkYXRpb24pKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICh0eXBlb2YgdmFsaWRhdGlvbi5yZWdleCAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBcInJlZ2V4XCIgdmFsaWRhdGlvbiBwcm9wZXJ0eSBzaG91bGQgYmUgYSBzdHJpbmdgKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGNob2ljZXM6ICh2YWxpZGF0aW9uOiBWU3RyaW5nKSA9PiB7XG4gICAgICBpZiAoISgnY2hvaWNlcycgaW4gdmFsaWRhdGlvbikpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHZhbGlkYXRpb24uY2hvaWNlcykpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBcImNob2ljZXNcIiB2YWxpZGF0aW9uIHByb3BlcnR5IHNob3VsZCBiZSBhbiBcImFycmF5XCIgb2Ygc3RyaW5nc2AsXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIGZvciAoY29uc3QgY2hvaWNlIG9mIHZhbGlkYXRpb24uY2hvaWNlcykge1xuICAgICAgICBpZiAodHlwZW9mIGNob2ljZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICBgXCJjaG9pY2VzXCIgdmFsaWRhdGlvbiBwcm9wZXJ0eSBzaG91bGQgYmUgYW4gYXJyYXkgb2YgXCJzdHJpbmdzXCJgLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICB9LFxuICBib29sZWFuOiB7fSxcbiAgbnVtYmVyOiB7XG4gICAgZ3Q6ICh2YWxpZGF0aW9uOiBWTnVtZXJpYzxudW1iZXI+KSA9PiB7XG4gICAgICBpZiAoISgnZ3QnIGluIHZhbGlkYXRpb24pKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICh0eXBlb2YgdmFsaWRhdGlvbi5ndCAhPT0gJ251bWJlcicpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBcImd0XCIgdmFsaWRhdGlvbiBwcm9wZXJ0eSBzaG91bGQgYmUgYSBudW1iZXJgKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGd0ZTogKHZhbGlkYXRpb246IFZOdW1lcmljPG51bWJlcj4pID0+IHtcbiAgICAgIGlmICghKCdndGUnIGluIHZhbGlkYXRpb24pKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICh0eXBlb2YgdmFsaWRhdGlvbi5ndGUgIT09ICdudW1iZXInKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgXCJndGVcIiB2YWxpZGF0aW9uIHByb3BlcnR5IHNob3VsZCBiZSBhIG51bWJlcmApO1xuICAgICAgfVxuICAgIH0sXG4gICAgbHQ6ICh2YWxpZGF0aW9uOiBWTnVtZXJpYzxudW1iZXI+KSA9PiB7XG4gICAgICBpZiAoISgnbHQnIGluIHZhbGlkYXRpb24pKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiB2YWxpZGF0aW9uLmx0ICE9PSAnbnVtYmVyJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFwibHRcIiB2YWxpZGF0aW9uIHByb3BlcnR5IHNob3VsZCBiZSBhIG51bWJlcmApO1xuICAgICAgfVxuICAgIH0sXG4gICAgbHRlOiAodmFsaWRhdGlvbjogVk51bWVyaWM8bnVtYmVyPikgPT4ge1xuICAgICAgaWYgKCEoJ2x0ZScgaW4gdmFsaWRhdGlvbikpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIHZhbGlkYXRpb24ubHRlICE9PSAnbnVtYmVyJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFwibHRlXCIgdmFsaWRhdGlvbiBwcm9wZXJ0eSBzaG91bGQgYmUgYSBudW1iZXJgKTtcbiAgICAgIH1cbiAgICB9LFxuICB9LFxuICBiaWdpbnQ6IHtcbiAgICBndDogKHZhbGlkYXRpb246IFZOdW1lcmljPGJpZ2ludD4pID0+IHtcbiAgICAgIGlmICghKCdndCcgaW4gdmFsaWRhdGlvbikpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIHZhbGlkYXRpb24uZ3QgIT09ICdiaWdpbnQnKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgXCJndFwiIHZhbGlkYXRpb24gcHJvcGVydHkgc2hvdWxkIGJlIGEgYmlnaW50YCk7XG4gICAgICB9XG4gICAgfSxcbiAgICBndGU6ICh2YWxpZGF0aW9uOiBWTnVtZXJpYzxiaWdpbnQ+KSA9PiB7XG4gICAgICBpZiAoISgnZ3RlJyBpbiB2YWxpZGF0aW9uKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAodHlwZW9mIHZhbGlkYXRpb24uZ3RlICE9PSAnYmlnaW50Jykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFwiZ3RlXCIgdmFsaWRhdGlvbiBwcm9wZXJ0eSBzaG91bGQgYmUgYSBiaWdpbnRgKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGx0OiAodmFsaWRhdGlvbjogVk51bWVyaWM8YmlnaW50PikgPT4ge1xuICAgICAgaWYgKCEoJ2x0JyBpbiB2YWxpZGF0aW9uKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAodHlwZW9mIHZhbGlkYXRpb24ubHQgIT09ICdiaWdpbnQnKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgXCJsdFwiIHZhbGlkYXRpb24gcHJvcGVydHkgc2hvdWxkIGJlIGEgYmlnaW50YCk7XG4gICAgICB9XG4gICAgfSxcbiAgICBsdGU6ICh2YWxpZGF0aW9uOiBWTnVtZXJpYzxiaWdpbnQ+KSA9PiB7XG4gICAgICBpZiAoISgnbHRlJyBpbiB2YWxpZGF0aW9uKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAodHlwZW9mIHZhbGlkYXRpb24ubHRlICE9PSAnYmlnaW50Jykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFwibHRlXCIgdmFsaWRhdGlvbiBwcm9wZXJ0eSBzaG91bGQgYmUgYSBiaWdpbnRgKTtcbiAgICAgIH1cbiAgICB9LFxuICB9LFxufTtcbiJdfQ==