jsii-release 0.2.989 → 0.2.991
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/bin/publib-maven.js +4 -2
- package/package.json +1 -1
- package/package.json.bak +1 -1
package/lib/bin/publib-maven.js
CHANGED
|
@@ -467,7 +467,9 @@ async function importGpgKey(key) {
|
|
|
467
467
|
// GnuPG will occasionally bail out with "gpg: <whatever> failed: Inappropriate ioctl for device", the following attempts to fix
|
|
468
468
|
const gpgHome = autoCleanDir();
|
|
469
469
|
try {
|
|
470
|
-
|
|
470
|
+
// In CI environments there will be no tty, and we don't want this to stop the script.
|
|
471
|
+
// The variable will be populated with a nonsensical string ("not a tty") but that doesn't seem to matter.
|
|
472
|
+
const tty = (await (0, zx_1.$)({ stdio: ['inherit', 'pipe', 'pipe'], nothrow: true }) `tty`).stdout;
|
|
471
473
|
let privateKeyFile;
|
|
472
474
|
const type = key.type;
|
|
473
475
|
switch (type) {
|
|
@@ -605,4 +607,4 @@ main().catch(e => {
|
|
|
605
607
|
}
|
|
606
608
|
process.exitCode = 1;
|
|
607
609
|
});
|
|
608
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGliLW1hdmVuLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2Jpbi9wdWJsaWItbWF2ZW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBeW5CQSxvQ0FRQztBQWpvQkQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F5Qkc7QUFDSCwyQkFBb0M7QUFDcEMsMkJBQStFO0FBRS9FLE1BQU0sc0JBQXNCLEdBQUcsT0FBTyxDQUFDO0FBQ3ZDLE1BQU0sd0JBQXdCLEdBQUcsZUFBZSxDQUFDO0FBRWpELE1BQU0sMEJBQTBCLEdBQUcsdURBQXVELENBQUM7QUFFM0YsS0FBSyxVQUFVLElBQUk7SUFDakIsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbkMsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLFdBQVcsQ0FBQztJQUV4QyxJQUFBLE9BQUUsRUFBQyxRQUFRLENBQUMsQ0FBQztJQUViLE1BQU0sSUFBSSxHQUFHLE1BQU0sSUFBQSxTQUFJLEVBQUMsVUFBVSxDQUFDLENBQUM7SUFDcEMsSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ3RCLE1BQU0sSUFBSSxXQUFXLENBQUMsaURBQWlELE9BQU8sQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDMUYsQ0FBQztJQUVELElBQUEsU0FBSSxFQUFDLGVBQWUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUU1QixNQUFNLGFBQWEsR0FBeUI7UUFDMUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQztRQUNsQyxRQUFRLEVBQUUsTUFBTSxDQUFDLGdCQUFnQixDQUFDO1FBQ2xDLE1BQU0sRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLFlBQVksS0FBSyxN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S0FDRixDQUFDO0FBQ0osQ0FBQztBQUVELFNBQVMsV0FBVyxDQUFDLEtBQVk7SUFDL0IsTUFBTSxJQUFJLEtBQUssQ0FBQyxvQkFBb0IsR0FBRyxLQUFLLENBQUMsQ0FBQztBQUNoRCxDQUFDO0FBRUQsZ0JBQWdCO0FBQ2hCLEVBQUU7QUFDRixxRUFBcUU7QUFDckUsNEVBQTRFO0FBQzVFLHFEQUFxRDtBQUNyRCxFQUFFO0FBQ0YsZ0dBQWdHO0FBRWhHLElBQUksRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRTtJQUNmLElBQUksQ0FBQyxZQUFZLGtCQUFhLEVBQUUsQ0FBQztRQUMvQixJQUFBLFNBQUksRUFBQyxzQ0FBc0MsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7SUFDM0QsQ0FBQztTQUFNLElBQUksQ0FBQyxZQUFZLFdBQVcsRUFBRSxDQUFDO1FBQ3BDLElBQUEsU0FBSSxFQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDdkIsQ0FBQztTQUFNLENBQUM7UUFDTixPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ25CLENBQUM7SUFDRCxPQUFPLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQztBQUN2QixDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogTGVnYWN5IHZzIGNvbXBhdGliaWxpdHkgZW5kcG9pbnRcbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqXG4gKiBUaGlzIHNjcmlwdCB0YWxrcyBhYm91dCBsZWdhY3kgdnMgY29tcGF0aWJpbGl0eSBlbmRwb2ludCBhIGJ1bmNoLlxuICpcbiAqIEJvdGggaW1wbGVtZW50IHRoZSBOZXh1cyAyIHByb3RvY29sLCBob3dldmVyOlxuICpcbiAqIC0gVGhlIFwibGVnYWN5XCIgZW5kcG9pbnQgaXMgdGhlIFNvbmF0eXBlIE9TU1JIIGVuZHBvaW50IHRoYXQgd2FzIGRlcHJlY2F0ZWQgSnVuZSAyMDI1LlxuICogLSBUaGUgXCJjb21wYXRpYmlsaXR5XCIgZW5kcG9pbnQgaXMgYSBOZXh1cyAyLWNvbXBhdGlibGUgZW5kcG9pbnQgc3Rvb2QgdXAgZm9yIHRoZSBuZXdcbiAqICAgcHVibGlzaGluZyBzZXJ2aWNlLCBDZW50cmFsIFB1Ymxpc2hpbmcuXG4gKlxuICogSXQgc2hvdWxkIGJlIHRoZSBzYW1lIHByb3RvY29sIGJ1dCBvZiBjb3Vyc2UgdGhlcmUgYXJlIHN1YnRsZSBkaWZmZXJlbmNlc1xuICogYmV0d2VlbiB0aGVtIChpbiBob3cgdGhleSBzaWduYWwgZXJyb3Igd2hlbiB5b3UgdHJ5IHRvIHJlcHVibGlzaCBhbiBhbHJlYWR5XG4gKiBwdWJsaXNoZWQgdmVyc2lvbiwgYW5kIGV2ZW4gaW4gdGhlIHdpcmUgcHJvdG9jb2wgYWNjZXB0ZWQpIHNvIHdlIGhhdmUgdG9cbiAqIHRyZWF0IHRoZW0gZGlmZmVyZW50bHkgaGVyZS5cbiAqXG4gKiBUaGVyZSBpcyBhbHNvIGFuIFwib2ZmaWNpYWwgbmV3XCIgcHJvdG9jb2wgZm9yIHRoZSBuZXcgcHVibGlzaGluZyBtZWNoYW5pc20sXG4gKiBidXQgdGhlIE1hdmVuIHBsdWdpbiB0aGV5IHN1cHBseSBmb3IgdGhhdCBkb2Vzbid0IHN1cHBvcnQgdGhhdC4gSW4gdGhlaXIgd29yZHM6XG4gKlxuICogPiBpdCBhcHBlYXJzIHRoYXQgeW91IGFyZSB1c2luZyB0aGUgXCJ0d28gc3RhZ2VcIlsxXSBkZXBsb3ltZW50IHByb2Nlc3MsIHdoaWNoIGlzXG4gKiA+IG5vdCB5ZXQgc3VwcG9ydGVkIGJ5IHRoZSBuZXcgcGx1Z2luLiBZb3UgYXJlIHRoZSBmaXJzdCBwdWJsaXNoZXIgdG8gaGF2ZVxuICogPiByZXF1ZXN0ZWQgdGhpcywgc28gd2Ugd2VyZSBub3QgZmFtaWxpYXIgd2l0aCB0aGlzIHNwZWNpZmljIHVzZWNhc2Ugd2hlblxuICogPiBidWlsZGluZyB0aGUgbmV3IHBsdWdpblxuICogPiBbMV0gPGh0dHBzOi8vZ2l0aHViLmNvbS9zb25hdHlwZS9uZXh1cy1tYXZlbi1wbHVnaW5zL2Jsb2IvNDNhOTk0MGIxMzRjM2Y4N2ViZTRkYWE4MjU1MmU4NDRkOWM1NzhiOC9zdGFnaW5nL21hdmVuLXBsdWdpbi9XT1JLRkxPV1MubWQjdHdvLXNob3RzPlxuICovXG5pbXBvcnQgeyBwcm9taXNlcyBhcyBmcyB9IGZyb20gJ2ZzJztcbmltcG9ydCB7ICQsIGNkLCBlY2hvLCBnbG9iLCBvcywgcGF0aCwgUHJvY2Vzc091dHB1dCwgcXVvdGUsIHRtcGRpciB9IGZyb20gJ3p4JztcblxuY29uc3QgTEVHQUNZX09TU1JIX1NFUlZFUl9JRCA9ICdvc3NyaCc7XG5jb25zdCBDT01QQVRfQ0VOVFJBTF9TRVJWRVJfSUQgPSAnY2VudHJhbC1vc3NyaCc7XG5cbmNvbnN0IE5FWFVTX01BVkVOX1NUQUdJTkdfUExVR0lOID0gJ29yZy5zb25hdHlwZS5wbHVnaW5zOm5leHVzLXN0YWdpbmctbWF2ZW4tcGx1Z2luOjEuNy4wJztcblxuYXN5bmMgZnVuY3Rpb24gbWFpbigpIHtcbiAgY29uc3QgYXJncyA9IHByb2Nlc3MuYXJndi5zbGljZSgyKTtcbiAgY29uc3QgamF2YVJvb3QgPSBhcmdzWzBdID8/ICdkaXN0L2phdmEnO1xuXG4gIGNkKGphdmFSb290KTtcblxuICBjb25zdCBwb21zID0gYXdhaXQgZ2xvYignKiovKi5wb20nKTtcbiAgaWYgKHBvbXMubGVuZ3RoID09PSAwKSB7XG4gICAgdGhyb3cgbmV3IFNpbXBsZUVycm9yKGBObyBKQVJTIHRvIHB1Ymxpc2g6IG5vIC5wb20gZmlsZXMgZm91bmQgdW5kZXIgJHtwcm9jZXNzLmN3ZCgpfWApO1xuICB9XG5cbiAgZWNobyhgUE9NcyBmb3VuZDogJHtwb21zfWApO1xuXG4gIGNvbnN0IHNoYXJlZE9wdGlvbnM6IFNoYXJlZFB1Ymxpc2hPcHRpb25zID0ge1xuICAgIHVzZXJuYW1lOiBlbnZWYXIoJ01BVkVOX1VTRVJOQU1FJyksXG4gICAgcGFzc3dvcmQ6IGVudlZhcignTUFWRU5fUEFTU1dPUkQnKSxcbiAgICBkcnlSdW46IHByb2Nlc3MuZW52Lk1BVkVOX0RSWVJVTiA9PT0gJ3RydWUnLFxuICAgIHZlcmJvc2U6IHByb2Nlc3MuZW52Lk1BVkVOX1ZFUkJPU0UgPT09ICd0cnVlJyxcbiAgICBwb21zLFxuICB9O1xuXG4gIGxldCBvcHRpb25zOiBNYXZlblB1Ymxpc2hPcHRpb25zO1xuICBjb25zdCBzZXJ2ZXJJZCA9IHByb2Nlc3MuZW52Lk1BVkVOX1NFUlZFUl9JRCA/PyBMRUdBQ1lfT1NTUkhfU0VSVkVSX0lEO1xuXG4gIHN3aXRjaCAoc2VydmVySWQpIHtcbiAgICBjYXNlIExFR0FDWV9PU1NSSF9TRVJWRVJfSUQ6XG4gICAgICBvcHRpb25zID0ge1xuICAgICAgICB0eXBlOiAnbGVnYWN5LW9zc3JoJyxcbiAgICAgICAgLi4uc2hhcmVkT3B0aW9ucyxcbiAgICAgICAgc3RhZ2luZ1Byb2ZpbGVJZDogZW52VmFyKCdNQVZFTl9TVEFHSU5HX1BST0ZJTEVfSUQnKSxcbiAgICAgICAgZW5kcG9pbnQ6IHByb2Nlc3MuZW52Lk1BVkVOX0VORFBPSU5ULFxuICAgICAgICBwcml2YXRlS2V5OiBwYXJzZVByaXZhdGVLZXlGcm9tRW52KCksXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBDT01QQVRfQ0VOVFJBTF9TRVJWRVJfSUQ6XG4gICAgICBvcHRpb25zID0ge1xuICAgICAgICB0eXBlOiAnY29tcGF0LW9zc3JoJyxcbiAgICAgICAgLi4uc2hhcmVkT3B0aW9ucyxcbiAgICAgICAgc3RhZ2luZ1Byb2ZpbGVJZDogZW52VmFyKCdNQVZFTl9TVEFHSU5HX1BST0ZJTEVfSUQnKSxcbiAgICAgICAgZW5kcG9pbnQ6IHByb2Nlc3MuZW52Lk1BVkVOX0VORFBPSU5ULFxuICAgICAgICBwcml2YXRlS2V5OiBwYXJzZVByaXZhdGVLZXlGcm9tRW52KCksXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIC8vIFdlIGhhdmVuJ3QgaW1wbGVtZW50ZWQgc2lnbmluZyBmb3IgdGhpcywgc28gZmFpbCBsb3VkbHkgaWYgcGVvcGxlIHRyeSB0byB1c2UgaXQgYW55d2F5XG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTUFWRU5fR1BHX1BSSVZBVEVfS0VZIHx8IHByb2Nlc3MuZW52Lk1BVkVOX0dQR19QUklWQVRFX0tFWV9GSUxFKSB7XG4gICAgICAgIHRocm93IG5ldyBTaW1wbGVFcnJvcignTUFWRU5fR1BHX1BSSVZBVEVfS0VZW19GSUxFXSBpcyBvbmx5IHN1cHBvcnRlZCBmb3IgT1NTUkggcHVibGlzaGluZycpO1xuICAgICAgfVxuXG4gICAgICBvcHRpb25zID0ge1xuICAgICAgICB0eXBlOiAnY3VzdG9tLW5leHVzJyxcbiAgICAgICAgLi4uc2hhcmVkT3B0aW9ucyxcbiAgICAgICAgc2VydmVySWQsXG4gICAgICAgIHJlcG9zaXRvcnlVcmw6IGVudlZhcignTUFWRU5fUkVQT1NJVE9SWV9VUkwnKSxcbiAgICAgIH07XG4gICAgICBicmVhaztcbiAgfVxuXG4gIGF3YWl0IG1hdmVuUHVibGlzaChvcHRpb25zKTtcblxuICBlY2hvKCd+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+Jyk7XG4gIGVjaG8oJ+KchSBBbGwgRG9uZSEnKTtcbn1cblxuZnVuY3Rpb24gcGFyc2VQcml2YXRlS2V5RnJvbUVudigpOiBQcml2YXRlS2V5IHtcbiAgaWYgKHByb2Nlc3MuZW52Lk1BVkVOX0dQR19QUklWQVRFX0tFWV9GSUxFKSB7XG4gICAgcmV0dXJuIHsgdHlwZTogJ2ZpbGUnLCBmaWxlTmFtZTogcHJvY2Vzcy5lbnYuTUFWRU5fR1BHX1BSSVZBVEVfS0VZX0ZJTEUsIHBhc3NQaHJhc2U6IGVudlZhcignTUFWRU5fR1BHX1BSSVZBVEVfS0VZX1BBU1NQSFJBU0UnKSB9O1xuICB9XG4gIGlmIChwcm9jZXNzLmVudi5NQVZFTl9HUEdfUFJJVkFURV9LRVkpIHtcbiAgICByZXR1cm4geyB0eXBlOiAnbWF0ZXJpYWwnLCBrZXlNYXRlcmlhbDogcHJvY2Vzcy5lbnYuTUFWRU5fR1BHX1BSSVZBVEVfS0VZLCBwYXNzUGhyYXNlOiBlbnZWYXIoJ01BVkVOX0dQR19QUklWQVRFX0tFWV9QQVNTUEhSQVNFJykgfTtcbiAgfVxuICB0aHJvdyBuZXcgU2ltcGxlRXJyb3IoJ01BVkVOX0dQR19QUklWQVRFX0tFWVtfRklMRV0gaXMgcmVxdWlyZWQnKTtcbn1cblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyAgTW9kZWxpbmcgYWxsIHRoZSBwYXJhbWV0ZXJzIHNvIHRoYXQgd2UgY2FuIHB1bGwgdGhlIGVudmlyb25tZW50IHBhcnNpbmcgZm9yd2FyZFxuLy9cblxuaW50ZXJmYWNlIFNoYXJlZFB1Ymxpc2hPcHRpb25zIHtcbiAgcmVhZG9ubHkgdXNlcm5hbWU6IHN0cmluZztcbiAgcmVhZG9ubHkgcGFzc3dvcmQ6IHN0cmluZztcbiAgcmVhZG9ubHkgZHJ5UnVuOiBib29sZWFuO1xuICByZWFkb25seSB2ZXJib3NlOiBib29sZWFuO1xuICByZWFkb25seSBwb21zOiBzdHJpbmdbXTtcbn1cblxuaW50ZXJmYWNlIExlZ2FjeU9zc3JoUHVibGlzaE9wdGlvbnMgZXh0ZW5kcyBTaGFyZWRQdWJsaXNoT3B0aW9ucyB7XG4gIHR5cGU6ICdsZWdhY3ktb3NzcmgnO1xuICByZWFkb25seSBwcml2YXRlS2V5OiBQcml2YXRlS2V5O1xuICByZWFkb25seSBlbmRwb2ludD86IHN0cmluZztcbiAgcmVhZG9ubHkgc3RhZ2luZ1Byb2ZpbGVJZDogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgQ29tcGF0T3NzcmhQdWJsaXNoT3B0aW9ucyBleHRlbmRzIFNoYXJlZFB1Ymxpc2hPcHRpb25zIHtcbiAgdHlwZTogJ2NvbXBhdC1vc3NyaCc7XG4gIHJlYWRvbmx5IHByaXZhdGVLZXk6IFByaXZhdGVLZXk7XG4gIHJlYWRvbmx5IGVuZHBvaW50Pzogc3RyaW5nO1xuICByZWFkb25seSBzdGFnaW5nUHJvZmlsZUlkOiBzdHJpbmc7XG59XG5cbmludGVyZmFjZSBDdXN0b21OZXh1c1B1Ymxpc2hPcHRpb25zIGV4dGVuZHMgU2hhcmVkUHVibGlzaE9wdGlvbnMge1xuICB0eXBlOiAnY3VzdG9tLW5leHVzJztcbiAgcmVhZG9ubHkgcmVwb3NpdG9yeVVybDogc3RyaW5nO1xuICByZWFkb25seSBzZXJ2ZXJJZDogc3RyaW5nO1xufVxuXG50eXBlIFByaXZhdGVLZXkgPVxuICB8IHsgdHlwZTogJ2ZpbGUnOyBmaWxlTmFtZTogc3RyaW5nOyBwYXNzUGhyYXNlOiBzdHJpbmcgfVxuICB8IHsgdHlwZTogJ21hdGVyaWFsJzsga2V5TWF0ZXJpYWw6IHN0cmluZzsgcGFzc1BocmFzZTogc3RyaW5nIH1cbiAgO1xuXG50eXBlIE1hdmVuUHVibGlzaE9wdGlvbnMgPSBMZWdhY3lPc3NyaFB1Ymxpc2hPcHRpb25zIHwgQ29tcGF0T3NzcmhQdWJsaXNoT3B0aW9uc3wgQ3VzdG9tTmV4dXNQdWJsaXNoT3B0aW9ucztcblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyAgUHVibGlzaGluZyBmdW5jdGlvbnNcbi8vXG5cbmFzeW5jIGZ1bmN0aW9uIG1hdmVuUHVibGlzaChvcHRpb25zOiBNYXZlblB1Ymxpc2hPcHRpb25zKSB7XG4gIGF3YWl0IHVzaW5nIHdvcmtEaXIgPSBhdXRvQ2xlYW5EaXIoKTtcbiAgY29uc3QgbWF2ZW4gPSBuZXcgTWF2ZW4od29ya0Rpci5kaXIsIG9wdGlvbnMudmVyYm9zZSwgb3B0aW9ucy5kcnlSdW4pO1xuXG4gIGNvbnN0IHggPSBvcHRpb25zLnR5cGU7XG4gIHN3aXRjaCAoeCkge1xuICAgIGNhc2UgJ2xlZ2FjeS1vc3NyaCc6XG4gICAgICBhd2FpdCBkZXBsb3lMZWdhY3lPc3NyaChtYXZlbiwgb3B0aW9ucyk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdjb21wYXQtb3NzcmgnOlxuICAgICAgYXdhaXQgZGVwbG95Q29tcGF0T3NzcmgobWF2ZW4sIG9wdGlvbnMpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnY3VzdG9tLW5leHVzJzpcbiAgICAgIGF3YWl0IGRlcGxveUN1c3RvbU5leHVzKG1hdmVuLCBvcHRpb25zKTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICBhc3NlcnROZXZlcih4KTtcbiAgfVxufVxuXG4vKipcbiAqIERlcGxveSB0byB0aGUgbGVnYWN5IE9TU1JIIE5leHVzIHNlcnZlclxuICovXG5hc3luYyBmdW5jdGlvbiBkZXBsb3lMZWdhY3lPc3NyaChtYXZlbjogTWF2ZW4sIG9wdGlvbnM6IExlZ2FjeU9zc3JoUHVibGlzaE9wdGlvbnMpIHtcbiAgZWNobygn8J+TpiBQdWJsaXNoaW5nIHRvIE1hdmVuIENlbnRyYWwnKTtcbiAgY29uc3QgZGVmYXVsdEVuZHBvaW50ID0gJ2h0dHBzOi8vb3NzLnNvbmF0eXBlLm9yZyc7XG5cbiAgY29uc3Qgc3RhZ2VkID0gYXdhaXQgZGVwbG95U3RhZ2VkUmVwb3NpdG9yeShtYXZlbiwge1xuICAgIC4uLm9wdGlvbnMsXG4gICAgZW5kcG9pbnQ6IG9wdGlvbnMuZW5kcG9pbnQgPz8gZGVmYXVsdEVuZHBvaW50LFxuICAgIHJlcHVibGlzaFdpbGw0MDA6IGZhbHNlLFxuICB9KTtcblxuICBpZiAoc3RhZ2VkLnR5cGUgIT09ICdzdWNjZXNzJykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qXG4gIGNvbnN0IHJlbGVhc2VkID0gYXdhaXQgcmVsZWFzZVJlcG8oe1xuICAgIHNlcnZlclVybDogb3B0aW9ucy5lbmRwb2ludCA/PyBkZWZhdWx0RW5kcG9pbnQsXG4gICAgdXNlcm5hbWU6IG9wdGlvbnMudXNlcm5hbWUsXG4gICAgcGFzc3dvcmQ6IG9wdGlvbnMucGFzc3dvcmQsXG4gICAgcmVwb3NpdG9yeUlkOiBzdGFnZWQucmVwb3NpdG9yeUlkLFxuICB9KTtcblxuICBpZiAocmVsZWFzZWQpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgKi9cblxuICAvLyBTZW5kIGEgcmVtb3RlIHJlbGVhc2UgY29tbWFuZCB0byB0aGUgcmVwb3NpdG9yeVxuICBjb25zdCByZWxlYXNlT3V0cHV0ID0gYXdhaXQgbWF2ZW4uZXhlYyhgJHtORVhVU19NQVZFTl9TVEFHSU5HX1BMVUdJTn06cmMtcmVsZWFzZWAsIHtcbiAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICBuZXh1c1VybDogb3B0aW9ucy5lbmRwb2ludCA/PyBkZWZhdWx0RW5kcG9pbnQsXG4gICAgICBzZXJ2ZXJJZDogc3RhZ2VkLnNlcnZlcklkLFxuICAgICAgc3RhZ2luZ1JlcG9zaXRvcnlJZDogc3RhZ2VkLnJlcG9zaXRvcnlJZCxcbiAgICB9LFxuICAgIG5vdGhyb3c6IHRydWUsXG4gIH0pO1xuICBpZiAoIXJlbGVhc2VPdXRwdXQpIHtcbiAgICBlY2hvKCfwn4+c77iPIFN0b3BwZWQgaGVyZSBiZWNhdXNlIG9mIGRyeS1ydW4nKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAocmVsZWFzZU91dHB1dC5leGl0Q29kZSAhPT0gMCkge1xuICAgIC8vIElmIHJlbGVhc2UgZmFpbGVkLCBjaGVjayBpZiB0aGlzIHdhcyBjYXVzZWQgYmVjYXVzZSB3ZSBhcmUgdHJ5aW5nIHRvIHB1Ymxpc2hcbiAgICAvLyB0aGUgc2FtZSB2ZXJzaW9uIGFnYWluLCB3aGljaCBpcyBub3QgYW4gZXJyb3IuIFRoZSBtYWdpYyBzdHJpbmcgXCJkb2VzIG5vdFxuICAgIC8vIGFsbG93IHVwZGF0aW5nIGFydGlmYWN0XCIgZm9yIGEgXCIucG9tXCIgZmlsZSBpbmRpY2F0ZXMgdGhhdCB3ZSBhcmUgdHJ5aW5nIHRvXG4gICAgLy8gb3ZlcnJpZGUgYW4gZXhpc3RpbmcgdmVyc2lvbi4gT3RoZXJ3aXNlLCBmYWlsIVxuXG4gICAgY29uc3QgbG9va3NMaWtlRHVwbGljYXRlUHVibGlzaCA9IHJlbGVhc2VPdXRwdXQubGluZXMoKVxuICAgICAgLmZpbHRlcihsID0+IGwuaW5jbHVkZXMoJ2RvZXMgbm90IGFsbG93IHVwZGF0aW5nIGFydGlmYWN0JykpXG4gICAgICAuZmlsdGVyKGwgPT4gbC5pbmNsdWRlcygnLnBvbScpKVxuICAgICAgLmxlbmd0aCA+IDA7XG5cbiAgICBpZiAoIWxvb2tzTGlrZUR1cGxpY2F0ZVB1Ymxpc2gpIHtcbiAgICAgIHRocm93IG5ldyBTaW1wbGVFcnJvcignUmVsZWFzZSBmYWlsZWQnKTtcbiAgICB9XG5cbiAgICBlY2hvKCfimqDvuI8gQXJ0aWZhY3QgYWxyZWFkeSBwdWJsaXNoZWQuIFNraXBwaW5nJyk7XG4gIH1cbn1cblxuLyoqXG4gKiBEZXBsb3kgdG8gdGhlIGNvbXBhdCBPU1NSSCBOZXh1cyBzZXJ2ZXJcbiAqL1xuYXN5bmMgZnVuY3Rpb24gZGVwbG95Q29tcGF0T3NzcmgobWF2ZW46IE1hdmVuLCBvcHRpb25zOiBDb21wYXRPc3NyaFB1Ymxpc2hPcHRpb25zKSB7XG4gIGVjaG8oJ/Cfk6YgUHVibGlzaGluZyB0byBNYXZlbiBDZW50cmFsIChDb21wYXQgZW5kcG9pbnQpJyk7XG5cbiAgY29uc3QgZGVmYXVsdEVuZHBvaW50ID0gJ2h0dHBzOi8vb3Nzcmgtc3RhZ2luZy1hcGkuY2VudHJhbC5zb25hdHlwZS5jb20vJztcbiAgY29uc3QgZW5kcG9pbnQgPSBvcHRpb25zLmVuZHBvaW50ID8/IGRlZmF1bHRFbmRwb2ludDtcblxuICBjb25zdCBzdGFnZWQgPSBhd2FpdCBkZXBsb3lTdGFnZWRSZXBvc2l0b3J5KG1hdmVuLCB7XG4gICAgLi4ub3B0aW9ucyxcbiAgICBlbmRwb2ludCxcbiAgICByZXB1Ymxpc2hXaWxsNDAwOiB0cnVlLFxuICB9KTtcblxuICBpZiAoc3RhZ2VkLnR5cGUgIT09ICdzdWNjZXNzJykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHJlbGVhc2VkID0gYXdhaXQgcmVsZWFzZVJlcG8oe1xuICAgIHNlcnZlclVybDogZW5kcG9pbnQsXG4gICAgdXNlcm5hbWU6IG9wdGlvbnMudXNlcm5hbWUsXG4gICAgcGFzc3dvcmQ6IG9wdGlvbnMucGFzc3dvcmQsXG4gICAgcmVwb3NpdG9yeUlkOiBzdGFnZWQucmVwb3NpdG9yeUlkLFxuICB9KTtcblxuICBpZiAocmVsZWFzZWQgPT09ICdkdXBsaWNhdGUtdmVyc2lvbicpIHtcbiAgICBlY2hvKCfimqDvuI8gVmVyc2lvbihzKSBhbHJlYWR5IHB1Ymxpc2hlZC4gU2tpcHBpbmcnKTtcbiAgfVxufVxuXG4vKipcbiAqIERlcGxveSB0byBhIGN1c3RvbSBOZXh1cyBzZXJ2ZXJcbiAqL1xuYXN5bmMgZnVuY3Rpb24gZGVwbG95Q3VzdG9tTmV4dXMobWF2ZW46IE1hdmVuLCBvcHRpb25zOiBDdXN0b21OZXh1c1B1Ymxpc2hPcHRpb25zKSB7XG4gIGVjaG8oYPCfk6YgUHVibGlzaGluZyB0byAke29wdGlvbnMuc2VydmVySWR9YCk7XG4gIGF3YWl0IG1hdmVuLndyaXRlU2V0dGluZ3NGaWxlKG9wdGlvbnMuc2VydmVySWQsIGZhbHNlKTtcblxuICBmb3IgKGNvbnN0IHBvbSBvZiBvcHRpb25zLnBvbXMpIHtcbiAgICBjb25zdCBkZXBsb3lPdXRwdXQgPSBhd2FpdCBtYXZlbi5leGVjKCdkZXBsb3k6ZGVwbG95LWZpbGUnLCB7XG4gICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgIHVybDogb3B0aW9ucy5yZXBvc2l0b3J5VXJsLFxuICAgICAgICByZXBvc2l0b3J5SWQ6IG9wdGlvbnMuc2VydmVySWQsXG4gICAgICAgIHBvbUZpbGU6IHBvbSxcbiAgICAgICAgLi4uamFyc0Zyb21Qb20ocG9tKSxcbiAgICAgIH0sXG4gICAgICBub3Rocm93OiB0cnVlLFxuICAgIH0pO1xuXG4gICAgaWYgKGRlcGxveU91dHB1dD8uZXhpdENvZGUgJiYgZGVwbG95T3V0cHV0LmV4aXRDb2RlID4gMCkge1xuICAgICAgaWYgKGRlcGxveU91dHB1dC5zdGRvdXQuaW5jbHVkZXMoJzQwOSBDb25mbGljdCcpKSB7XG4gICAgICAgIGVjaG8oJ+KaoO+4jyBBcnRpZmFjdCBhbHJlYWR5IHB1Ymxpc2hlZC4gU2tpcHBpbmcnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBTaW1wbGVFcnJvcignUmVsZWFzZSBmYWlsZWQnKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxudHlwZSBEZXBsb3lTdGFnZWRSZXBvUmVzdWx0ID1cbiAgfCB7IHR5cGU6ICdzdWNjZXNzJzsgcmVwb3NpdG9yeUlkOiBzdHJpbmc7IHNlcnZlcklkOiBzdHJpbmcgfVxuICB8IHsgdHlwZTogJ2FscmVhZHktcHVibGlzaGVkJyB9XG4gIHwgeyB0eXBlOiAnZHJ5LXJ1bicgfTtcblxuLyoqXG4gKiBDcmVhdGUgdGhlIHN0YWdpbmcgcmVwb3NpdG9yeS4gVGhpcyBpcyB0aGUgc2FtZSBiZXR3ZWVuIHRoZSBsZWdhY3kgYW5kIGNvbXBhdCBlbmRwb2ludHMuXG4gKlxuICogYHJlcHVibGlzaFdpbGw0MDBgOiBpbiB0aGUgY29tcGF0aWJpbGl0eSBlbmRwb2ludCwgc3RhZ2luZyBhIHZlcnNpb24gdGhhdCBoYXMgYWxyZWFkeVxuICogYmVlbiBwdWJsaXNoZWQgd2lsbCBsZWFkIHRvIGEgYDQwMCBCYWQgUmVxdWVzdGAsIHdpdGggbm8gZnVydGhlciBpbmZvLiBXZSBuZWVkZWQgdG8gaGF2ZVxuICogcnVuIHRoZSBNYXZlbiBjb21tYW5kIHdpdGggYC0tZGVidWdgIGxvZ2dpbmcgdG8gc2VlIHRoZSBhY3R1YWwgZXJyb3IgbWVzc2FnZSBpbiB0aGUgb3V0cHV0LlxuICpcbiAqIEluIHRoZSBsZWdhY3kgZW5kcG9pbnQsIHN0YWdpbmcgdGFrZXMgbXVsdGlwbGUgbWludXRlcywgYW5kIE1hdmVuIHdpbGwgcG9sbFxuICogZXZlcnkgM3MgYW5kIHByaW50IHRoZSBvdXRwdXQuIFdlIHRoZXJlZm9yZSBkb24ndCB1c2UgdmVyYm9zZSBtb2RlIHRvIGF2b2lkXG4gKiBzdGRvdXQgc3BhbS4gSW4gdGhlIGxlZ2FjeSBlbmRwb2ludCwgZHVwbGljYXRlIHZlcnNpb24gcHVibGlzaGluZyBnZXRzXG4gKiByZXBvcnRlZCBkdXJpbmcgdGhlICdyZWxlYXNlJyBzdGVwIGFueXdheSwgbm90IGR1cmluZyBzdGFnaW5nLlxuICovXG5hc3luYyBmdW5jdGlvbiBkZXBsb3lTdGFnZWRSZXBvc2l0b3J5KG1hdmVuOiBNYXZlbiwgb3B0aW9uczogT21pdDxMZWdhY3lPc3NyaFB1Ymxpc2hPcHRpb25zIHwgQ29tcGF0T3NzcmhQdWJsaXNoT3B0aW9ucywgJ2VuZHBvaW50Jz4gJiB7IGVuZHBvaW50OiBzdHJpbmc7IHJlcHVibGlzaFdpbGw0MDA6IGJvb2xlYW4gfSk6IFByb21pc2U8RGVwbG95U3RhZ2VkUmVwb1Jlc3VsdD4ge1xuICBjb25zdCBzZXJ2ZXJJZCA9ICdvc3NyaCc7XG5cbiAgYXdhaXQgbWF2ZW4ud3JpdGVTZXR0aW5nc0ZpbGUoc2VydmVySWQsIHRydWUpO1xuXG4gIC8vIEZpcnN0IC0tIHNpZ24gYXJ0aWZhY3RzXG4gIGNvbnN0IHNpZ25lZERpciA9IHBhdGguam9pbihtYXZlbi53b3JrRGlyLCAnc2lnbmVkJyk7XG4gIGF3YWl0IGZzLm1rZGlyKHNpZ25lZERpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG5cbiAgYXdhaXQgc2lnbkphcnMobWF2ZW4sIG9wdGlvbnMucG9tcywgc2lnbmVkRGlyLCBzZXJ2ZXJJZCwgb3B0aW9ucy5wcml2YXRlS2V5KTtcblxuICBlY2hvKCd+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+Jyk7XG4gIGVjaG8oJyBEZXBsb3lpbmcgYW5kIGNsb3NpbmcgcmVwb3NpdG9yeS4uLicpO1xuICBlY2hvKCd+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+Jyk7XG5cbiAgY29uc3QgbmV4dXNNYXZlblN0YWdpbmcgPSAnb3JnLnNvbmF0eXBlLnBsdWdpbnM6bmV4dXMtc3RhZ2luZy1tYXZlbi1wbHVnaW46MS43LjAnO1xuICBjb25zdCBzdGFnZU91dHB1dCA9IGF3YWl0IG1hdmVuLmV4ZWMoYCR7bmV4dXNNYXZlblN0YWdpbmd9OmRlcGxveS1zdGFnZWQtcmVwb3NpdG9yeWAsIHtcbiAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICByZXBvc2l0b3J5RGlyZWN0b3J5OiBzaWduZWREaXIsXG4gICAgICBuZXh1c1VybDogb3B0aW9ucy5lbmRwb2ludCxcbiAgICAgIHNlcnZlcklkLFxuICAgICAgc3RhZ2luZ1Byb2dyZXNzVGltZW91dE1pbnV0ZXM6ICczMCcsXG4gICAgICBzdGFnaW5nUHJvZmlsZUlkOiBvcHRpb25zLnN0YWdpbmdQcm9maWxlSWQsXG4gICAgfSxcbiAgICBub3Rocm93OiB0cnVlLFxuICAgIHZlcmJvc2U6IG9wdGlvbnMucmVwdWJsaXNoV2lsbDQwMCxcbiAgfSk7XG4gIC8vIEZJWE1FOiBOZXcgc3RhZ2luZyBBUEkgdGhyb3dzIGFuIGVycm9yIGhlcmUgb24gZHVwbGljYXRlIHZlcnNpb25zXG4gIGlmIChzdGFnZU91dHB1dCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgZWNobygn8J+PnO+4jyBTdG9wcGVkIGhlcmUgYmVjYXVzZSBvZiBkcnktcnVuJyk7XG4gICAgcmV0dXJuIHsgdHlwZTogJ2RyeS1ydW4nIH07XG4gIH1cblxuICBpZiAob3B0aW9ucy5yZXB1Ymxpc2hXaWxsNDAwICYmIHN0YWdlT3V0cHV0LnRleHQoKS5tYXRjaCgvQ29tcG9uZW50IHdpdGggcGFja2FnZSB1cmwuKmFscmVhZHkgZXhpc3RzLykpIHtcbiAgICAvLyBXZSd2ZSBzZWVuIHRoaXMgZmFpbCB3aXRoIHRoZSBhYm92ZSBlcnJvciBtZXNzYWdlIG9uIHRoZSBPU1NSSCBjb21wYXRpYmlsaXR5IEFQSSB3aGVuIHRyeWluZyB0byByZXB1Ymxpc2hcbiAgICAvLyBhbiBhbHJlYWR5LXB1Ymxpc2hlZCB2ZXJzaW9uLlxuICAgIC8vXG4gICAgLy8gVGhpcyBpcyBwb3RlbnRpYWxseSBhIHByb2JsZW0gaWYgdGhlcmUgYXJlIG11bHRpcGxlIHZlcnNpb25zIGluIHRoZSBzb3VyY2UgZGlyZWN0b3J5IGF0IG9uY2UsIGJlY2F1c2Ugbm90aGluZ1xuICAgIC8vIHdpbGwgYmUgcHVibGlzaGVkIGlmIHRoZXJlJ3Mgb25lIHBhY2thZ2UgaW4gdGhlcmUgdGhhdCBoYXMgYWxyZWFkeSBiZWVuIHB1Ymxpc2hlZCBwcmV2aW91c2x5LiBCdXQgYydlc3QgbGEgdmllLlxuICAgIGVjaG8oJ+KaoO+4jyBWZXJzaW9uKHMpIGFscmVhZHkgcHVibGlzaGVkLiBTa2lwcGluZycpO1xuICAgIHJldHVybiB7IHR5cGU6ICdhbHJlYWR5LXB1Ymxpc2hlZCcgfTtcbiAgfSBlbHNlIGlmIChzdGFnZU91dHB1dC5leGl0Q29kZSAmJiBzdGFnZU91dHB1dC5leGl0Q29kZSA+IDApIHtcbiAgICB0aHJvdyBzdGFnZU91dHB1dDtcbiAgfVxuXG4gIC8vIEdyZXAgdGhlIHJlcG9zaXRvcnkgSUQgb3V0IG9mIHRoZSBwcmludGVkIG91dHB1dFxuICAvLyBbSU5GT10gICogQ2xvc2luZyBzdGFnaW5nIHJlcG9zaXRvcnkgd2l0aCBJRCBcIlhYWFhYWFhYWFhcIi5cbiAgY29uc3QgbSA9IHN0YWdlT3V0cHV0LnN0ZG91dC5tYXRjaCgvQ2xvc2luZyBzdGFnaW5nIHJlcG9zaXRvcnkgd2l0aCBJRCBcIihbXlwiXSspXCIvKTtcbiAgaWYgKCFtKSB7XG4gICAgdGhyb3cgbmV3IFNpbXBsZUVycm9yKCdVbmFibGUgdG8gZXh0cmFjdCByZXBvc2l0b3J5IElEIGZyb20gZGVwbG95LXN0YWdlZC1yZXBvc2l0b3J5IG91dHB1dC4gVGhpcyBtZWFucyBpdCBmYWlsZWQgdG8gY2xvc2Ugb3IgdGhlcmUgd2FzIGFuIHVuZXhwZWN0ZWQgcHJvYmxlbS4gQXQgYW55IHJhdGUsIHdlIGNhblxcJ3QgcmVsZWFzZSBpdC4gU29ycnkuJyk7XG4gIH1cbiAgY29uc3QgcmVwb3NpdG9yeUlkID0gbVsxXTtcblxuICByZXR1cm4geyB0eXBlOiAnc3VjY2VzcycsIHJlcG9zaXRvcnlJZCwgc2VydmVySWQgfTtcbn1cblxuLyoqXG4gKiBTZW5kIGEgY3VzdG9tIFwicmVsZWFzZVwiIGNvbW1hbmQgdG8gdGhlIG5ldyBTb25hdHlwZSBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSBlbmRwb2ludFxuICpcbiAqIFdoZW4gdXNpbmcgdGhlIGBuZXh1cy1zdGFnaW5nLW1hdmVuLXBsdWdpbmAncyBgcmVsZWFzZWAgb3IgYHJjLXJlbGVhc2VgIGNvbW1hbmRzLCB3ZSBnZXQgdGhlIGZvbGxvd2luZ1xuICogZXJyb3I6XG4gKlxuICogU2VuZGluZzpcbiAqXG4gKiBgYGBcbiAqIDxzdGFnaW5nQWN0aW9uUmVxdWVzdD48ZGF0YT48c3RhZ2VkUmVwb3NpdG9yeUlkcyBjbGFzcz1cImphdmEudXRpbC5BcnJheXMkQXJyYXlMaXN0XCI+PGEgY2xhc3M9XCJzdHJpbmctYXJyYXlcIj48c3RyaW5nPmlvLmdpdGh1Yi5yaXgwcnJyLS02M2VkYmNiZS1mMDU4LTQ0ZWItODVmNC1mZDlkY2UxYWVmNDA8L3N0cmluZz48L2E+PC9zdGFnZWRSZXBvc2l0b3J5SWRzPjxkZXNjcmlwdGlvbj51bmtub3duPC9kZXNjcmlwdGlvbj48YXV0b0Ryb3BBZnRlclJlbGVhc2U+dHJ1ZTwvYXV0b0Ryb3BBZnRlclJlbGVhc2U+PC9kYXRhPjwvc3RhZ2luZ0FjdGlvblJlcXVlc3Q+XG4gKiBgYGBcbiAqXG4gKiBFcnJvcjpcbiAqXG4gKiBgYGBcbiAqIEZhaWxlZCB0byBwcm9jZXNzIHJlcXVlc3Q6IEdvdCB1bmV4cGVjdGVkIFhNTCBlbGVtZW50IHdoZW4gcmVhZGluZyBzdGFnZWRSZXBvc2l0b3J5SWRzOiBHb3QgdW5leHBlY3RlZCBlbGVtZW50IFN0YXJ0RWxlbWVudChhLCB7XCJcIjogXCJcIiwgXCJ4bWxcIjogXCJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2VcIiwgXCJ4bWxuc1wiOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAveG1sbnMvXCJ9LCBbY2xhc3MgLT4gc3RyaW5nLWFycmF5XSksIGV4cGVjdGVkIG9uZSBvZjogc3RyaW5nXG4gKiBgYGBcbiAqXG4gKiBEb2luZyBhIG1hbnVhbCBzbGlnaHRseSBtb2RpZmllZCB2ZXJzaW9uIG9mIHRoZSBhYm92ZSByZXF1ZXN0IHN1Y2NlZWRzLCBzbyB3ZSdsbCBqdXN0IHByb2NlZWQgd2l0aCBkb2luZ1xuICogdGhhdC5cbiAqXG4gKiBUaGUgZW5kcG9pbnQgYWxzbyBzdXBwb3J0cyBKU09OLCB3aGljaCB3ZSBwcmVmZXIgb3ZlciBYTUwuXG4gKlxuICogVGhpcyBlbmRwb2ludCB3aWxsIG5ldmVyIHJldHVybiBhbiBlcnJvciwgZXZlbiBpZiB0aGUgcHVibGlzaCBkaWRuJ3QgaGFwcGVuIGJlY2F1c2VcbiAqIG9mIGR1cGxpY2F0ZSB2ZXJzaW9uIHB1Ymxpc2hpbmcgKG5vdCBmb3IgdGhlIGxlZ2FjeSwgbm9yIGZvciB0aGUgY29tcGF0aWJpbGl0eSBlbmRwb2ludCkuXG4gKlxuICogQHNlZSBodHRwczovL2NlbnRyYWwuc29uYXR5cGUub3JnL3B1Ymxpc2gvcHVibGlzaC1wb3J0YWwtb3Nzcmgtc3RhZ2luZy1hcGkvXG4gKiBAc2VlIGh0dHBzOi8vc3VwcG9ydC5zb25hdHlwZS5jb20vaGMvZW4tdXMvYXJ0aWNsZXMvMjEzNDY1NDQ4LUF1dG9tYXRpY2FsbHktZHJvcHBpbmctb2xkLXN0YWdpbmctcmVwb3NpdG9yaWVzXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHJlbGVhc2VSZXBvKG9wdGlvbnM6IHsgc2VydmVyVXJsOiBzdHJpbmc7IHVzZXJuYW1lOiBzdHJpbmc7IHBhc3N3b3JkOiBzdHJpbmc7IHJlcG9zaXRvcnlJZDogc3RyaW5nOyBkZXNjcmlwdGlvbj86IHN0cmluZyB9KTogUHJvbWlzZTwnb2snIHwgJ2R1cGxpY2F0ZS12ZXJzaW9uJz4ge1xuICBlY2hvKGDwn5qAIFJlbGVhc2luZyByZXBvc2l0b3J5ICR7b3B0aW9ucy5yZXBvc2l0b3J5SWR9IGF0ICR7b3B0aW9ucy5zZXJ2ZXJVcmx9YCk7XG4gIGNvbnN0IHVybCA9IG5ldyBVUkwoJ3NlcnZpY2UvbG9jYWwvc3RhZ2luZy9idWxrL3Byb21vdGUnLCBvcHRpb25zLnNlcnZlclVybCk7XG5cbiAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaCh1cmwsIHtcbiAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7XG4gICAgICBkYXRhOiB7XG4gICAgICAgIHN0YWdlZFJlcG9zaXRvcnlJZHM6IFtvcHRpb25zLnJlcG9zaXRvcnlJZF0sXG4gICAgICAgIGRlc2NyaXB0aW9uOiBvcHRpb25zLmRlc2NyaXB0aW9uID8/ICdEZXBsb3ltZW50JyxcbiAgICAgICAgYXV0b0Ryb3BBZnRlclJlbGVhc2U6IHRydWUsXG4gICAgICB9LFxuICAgIH0pLFxuICAgIGhlYWRlcnM6IHtcbiAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAnQWNjZXB0JzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgJ0F1dGhvcml6YXRpb24nOiBgQmFzaWMgJHtidG9hKGAke29wdGlvbnMudXNlcm5hbWV9OiR7b3B0aW9ucy5wYXNzd29yZH1gKX1gLFxuICAgIH0sXG4gIH0pO1xuXG4gIGNvbnN0IGJvZHkgPSBhd2FpdCByZXNwb25zZS50ZXh0KCk7XG5cbiAgLy8gSXQncyBwb3NzaWJsZSB0aGF0IChkdWUgdG8gc29tZSByZXBsaWNhdGlvbiBsYXRlbmN5PykgdGhlIGluaXRpYWwgXCJzdGFnZVwiIHN1Y2NlZWRzLFxuICAvLyBidXQgdGhlIFwicmVsZWFzZVwiIGZhaWxzLCBpZiB3ZSB0cnkgdG8gcHVibGlzaCBhbiBhbHJlYWR5LXB1Ymxpc2hlZCB2ZXJzaW9uIGFnYWluLlxuICAvL1xuICAvLyBVbmZvcnR1bmF0ZWx5IHRoZXJlIGlzIG5vIGdyZWF0IGVycm9yIGNvZGUgdG8gZGV0ZWN0IHRoaXMgcmlnaHQgbm93LCBidXQgSSd2ZSBvYnNlcnZlZFxuICAvLyB0aGlzIGVycm9yIHdoZW4gaXQgaGFwcGVuZWQuXG4gIC8vIEkgaGF2ZSBhIHN1cHBvcnQgcmVxdWVzdCBvdXQgdG8gU29uYXR5cGUgZm9yIHRoaXMsIHdlJ2xsIHNlZSBpZiB0aGlzIGNoYW5nZXMgb3ZlciB0aW1lLlxuICBpZiAocmVzcG9uc2Uuc3RhdHVzID09PSA0MDAgJiYgYm9keSA9PT0gJ0ZhaWxlZCB0byBwcm9jZXNzIHJlcXVlc3Q6IHNlcnZpY2UgZXJyb3InKSB7XG4gICAgcmV0dXJuICdkdXBsaWNhdGUtdmVyc2lvbic7XG4gIH1cblxuICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBIVFRQICR7cmVzcG9uc2Uuc3RhdHVzfSAke3Jlc3BvbnNlLnN0YXR1c1RleHR9OiAke2JvZHl9YCk7XG4gIH1cblxuICBjb25zb2xlLmxvZyhib2R5KTtcblxuICByZXR1cm4gJ29rJztcbn1cblxuLyoqXG4gKiBTaWduIGFuZCBzdGFnZSBvdXIgYXJ0aWZhY3RzIGludG8gYSBsb2NhbCBkaXJlY3RvcnlcbiAqL1xuYXN5bmMgZnVuY3Rpb24gc2lnbkphcnMobWF2ZW46IE1hdmVuLCBwb21zOiBzdHJpbmdbXSwgdGFyZ2V0RGlyOiBzdHJpbmcsIHNlcnZlcklkOiBzdHJpbmcsIGtleTogUHJpdmF0ZUtleSkge1xuICBhd2FpdCB1c2luZyBncGcgPSBhd2FpdCBpbXBvcnRHcGdLZXkoa2V5KTtcblxuICAvLyBvbiBhIG1hYywgLS1waW5lbnRyeS1tb2RlIHRvIFwibG9vcGJhY2tcIiBhcmUgcmVxdWlyZWQgYW5kIEkgY291bGRuJ3QgZmluZCBhXG4gIC8vIHdheSB0byBkbyBzbyB2aWEgLURncGcuZ3BnQXJndW1lbnRzIG9yIHRoZSBzZXR0aW5ncyBmaWxlLCBzbyBoZXJlIHdlIGFyZS5cbiAgbGV0IGdwZ0JpbiA9ICdncGcnO1xuICBpZiAob3MucGxhdGZvcm0oKSA9PT0gJ2RhcndpbicpIHtcbiAgICBncGdCaW4gPSBwYXRoLmpvaW4obWF2ZW4ud29ya0RpciwgJ3B1YmxpYi1ncGcuc2gnKTtcbiAgICBhd2FpdCBmcy53cml0ZUZpbGUoZ3BnQmluLCBbXG4gICAgICAnIyEvYmluL2Jhc2gnLFxuICAgICAgJ2V4ZWMgZ3BnIC0tcGluZW50cnktbW9kZSBsb29wYmFjayBcIlxcJEBcIicsXG4gICAgXS5qb2luKCdcXG4nKSwgJ3V0Zi04Jyk7XG4gICAgYXdhaXQgJGBjaG1vZCAreCAke2dwZ0Jpbn1gO1xuICB9XG5cbiAgZm9yIChjb25zdCBwb20gb2YgcG9tcykge1xuICAgIGF3YWl0IG1hdmVuLmV4ZWMoJ2dwZzpzaWduLWFuZC1kZXBsb3ktZmlsZScsIHtcbiAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgJ3VybCc6IGBmaWxlOi8vJHt0YXJnZXREaXJ9YCxcbiAgICAgICAgJ3JlcG9zaXRvcnlJZCc6IHNlcnZlcklkLCAvLyBNb3N0IGxpa2VseSBub3QgbmVjZXNzYXJ5XG4gICAgICAgICdncGcuaG9tZWRpcic6IGdwZy5ob21lLFxuICAgICAgICAnZ3BnLmtleW5hbWUnOiBncGcua2V5SWQsXG4gICAgICAgICdncGcuZXhlY3V0YWJsZSc6IGdwZ0JpbixcbiAgICAgICAgJ3BvbUZpbGUnOiBwb20sXG4gICAgICAgIC4uLmphcnNGcm9tUG9tKHBvbSksXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG59XG5cbi8qKlxuICogQmFzZWQgb24gdGhlIHBhdGggb2YgYSAucG9tIGZpbGUsIHJldHVybiB0aGUgcGF0aHMgb2YgdGhlIGNvcnJlc3BvbmRpbmcgamFyc1xuICovXG5mdW5jdGlvbiBqYXJzRnJvbVBvbShwb206IHN0cmluZykge1xuICByZXR1cm4ge1xuICAgIGZpbGU6IHBvbS5yZXBsYWNlKC9cXC5wb20kLywgJy5qYXInKSxcbiAgICBzb3VyY2VzOiBwb20ucmVwbGFjZSgvXFwucG9tJC8sICctc291cmNlcy5qYXInKSxcbiAgICBqYXZhZG9jOiBwb20ucmVwbGFjZSgvXFwucG9tJC8sICctamF2YWRvYy5qYXInKSxcbiAgfTtcbn1cblxuLyoqXG4gKiBDcmVhdGUgYSB0ZW1wb3JhcnkgZGlyZWN0b3J5IGFuZCBpbXBvcnQgdGhlIEdQRyBrZXkgbWF0ZXJpYWwgaW50byBhIG5ldyBrZXljaGFpbiB0aGVyZVxuICovXG5hc3luYyBmdW5jdGlvbiBpbXBvcnRHcGdLZXkoa2V5OiBQcml2YXRlS2V5KSB7XG4gIC8vIEdudVBHIHdpbGwgb2NjYXNpb25hbGx5IGJhaWwgb3V0IHdpdGggXCJncGc6IDx3aGF0ZXZlcj4gZmFpbGVkOiBJbmFwcHJvcHJpYXRlIGlvY3RsIGZvciBkZXZpY2VcIiwgdGhlIGZvbGxvd2luZyBhdHRlbXB0cyB0byBmaXhcbiAgY29uc3QgZ3BnSG9tZSA9IGF1dG9DbGVhbkRpcigpO1xuICB0cnkge1xuICAgIGNvbnN0IHR0eSA9IChhd2FpdCAkKHsgc3RkaW86IFsnaW5oZXJpdCcsICdwaXBlJywgJ3BpcGUnXSB9KWB0dHlgKS5zdGRvdXQ7XG5cbiAgICBsZXQgcHJpdmF0ZUtleUZpbGU7XG4gICAgY29uc3QgdHlwZSA9IGtleS50eXBlO1xuICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgY2FzZSAnZmlsZSc6XG4gICAgICAgIHByaXZhdGVLZXlGaWxlID0ga2V5LmZpbGVOYW1lO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ21hdGVyaWFsJzpcbiAgICAgICAgcHJpdmF0ZUtleUZpbGUgPSBwYXRoLmpvaW4oZ3BnSG9tZS5kaXIsICdwcml2YXRlLnBlbScpO1xuICAgICAgICBhd2FpdCAkYGVjaG8gLWUgJHtrZXkua2V5TWF0ZXJpYWx9ID4gJHtwcml2YXRlS2V5RmlsZX1gO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGFzc2VydE5ldmVyKHR5cGUpO1xuICAgIH1cblxuICAgIGNvbnN0IGVudiA9IHtcbiAgICAgIEdOVVBHSE9NRTogZ3BnSG9tZS5kaXIsXG4gICAgICBHUEdfVFRZOiB0dHksXG4gICAgfTtcblxuICAgIGNvbnN0ICQkID0gJCh7IGVudjogeyAuLi5wcm9jZXNzLmVudiwgLi4uZW52IH0gfSk7XG5cbiAgICBhd2FpdCAkJGBncGcgLS1hbGxvdy1zZWNyZXQta2V5LWltcG9ydCAtLWJhdGNoIC0teWVzIC0tbm8tdHR5IC0taW1wb3J0ICR7cHJpdmF0ZUtleUZpbGV9YDtcbiAgICBjb25zdCBncGdLZXlJZCA9IChhd2FpdCAkJGBncGcgLS1saXN0LWtleXMgLS13aXRoLWNvbG9ucyB8IGdyZXAgcHViIHwgY3V0IC1kOiAtZjVgKS5zdGRvdXQudHJpbSgpO1xuXG4gICAgZWNobyhgZ3BnX2tleV9pZD0ke2dwZ0tleUlkfWApO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGtleUlkOiBncGdLZXlJZCxcbiAgICAgIGVudixcbiAgICAgIGhvbWU6IGdwZ0hvbWUuZGlyLFxuICAgICAgW1N5bWJvbC5hc3luY0Rpc3Bvc2VdOiBhc3luYyAoKSA9PiBncGdIb21lW1N5bWJvbC5hc3luY0Rpc3Bvc2VdKCksXG4gICAgfTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGF3YWl0IGdwZ0hvbWVbU3ltYm9sLmFzeW5jRGlzcG9zZV0oKTtcbiAgICB0aHJvdyBlO1xuICB9XG59XG5cbmNsYXNzIE1hdmVuIHtcbiAgcHJpdmF0ZSByZWFkb25seSBzZXR0aW5nc0ZpbGU6IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihwdWJsaWMgcmVhZG9ubHkgd29ya0Rpcjogc3RyaW5nLCBwcml2YXRlIHJlYWRvbmx5IHZlcmJvc2U6IGJvb2xlYW4sIHB1YmxpYyByZWFkb25seSBkcnlSdW46IGJvb2xlYW4pIHtcbiAgICB0aGlzLnNldHRpbmdzRmlsZSA9IHBhdGguam9pbih3b3JrRGlyLCAnbXZuLXNldHRpbmdzLnhtbCcpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIHNldHRpbmdzLnhtbCBmaWxlIHdpdGggdGhlIHVzZXIrcGFzc3dvcmQgZm9yIG1hdmVuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgd3JpdGVTZXR0aW5nc0ZpbGUoc2VydmVySWQ6IHN0cmluZywgc2lnbmVkQXJ0aWZhY3RzOiBib29sZWFuKSB7XG4gICAgY29uc3QgbGluZXMgPSBbXTtcblxuICAgIGxpbmVzLnB1c2goXG4gICAgICAnPD94bWwgdmVyc2lvbj1cIjEuMFwiIGVuY29kaW5nPVwiVVRGLThcIiA/PicsXG4gICAgICAnPHNldHRpbmdzIHhtbG5zPVwiaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvU0VUVElOR1MvMS4wLjBcIicsXG4gICAgICAnICAgICAgICB4bWxuczp4c2k9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZVwiJyxcbiAgICAgICcgICAgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj1cImh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1NFVFRJTkdTLzEuMC4wJyxcbiAgICAgICcgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHR0cDovL21hdmVuLmFwYWNoZS5vcmcveHNkL3NldHRpbmdzLTEuMC4wLnhzZFwiPicsXG4gICAgICAnICA8c2VydmVycz4nLFxuICAgICAgJyAgICA8c2VydmVyPicsXG4gICAgICBgICAgICAgPGlkPiR7c2VydmVySWR9PC9pZD5gLFxuICAgICAgLy8gTWF2ZW4gd2lsbCByZWFkIHRoZXNlLCBzdXJyb3VuZGluZyBjb2RlIGhhcyBhbHJlYWR5IG1hZGUgc3VyZSB0aGV5IGFyZSBzZXRcbiAgICAgICcgICAgICA8dXNlcm5hbWU+JHtlbnYuTUFWRU5fVVNFUk5BTUV9PC91c2VybmFtZT4nLFxuICAgICAgJyAgICAgIDxwYXNzd29yZD4ke2Vudi5NQVZFTl9QQVNTV09SRH08L3Bhc3N3b3JkPicsXG4gICAgICAnICAgIDwvc2VydmVyPicsXG4gICAgKTtcblxuICAgIGlmIChzaWduZWRBcnRpZmFjdHMpIHtcbiAgICAgIGxpbmVzLnB1c2goXG4gICAgICAgICcgICAgPHNlcnZlcj4nLFxuICAgICAgICAnICAgICAgPGlkPmdwZy5wYXNzcGhyYXNlPC9pZD4nLFxuICAgICAgICAvLyBNYXZlbiB3aWxsIHJlYWQgdGhlc2UsIHN1cnJvdW5kaW5nIGNvZGUgaGFzIGFscmVhZHkgbWFkZSBzdXJlIHRoZXkgYXJlIHNldFxuICAgICAgICAnICAgICAgPHBhc3NwaHJhc2U+JHtlbnYuTUFWRU5fR1BHX1BSSVZBVEVfS0VZX1BBU1NQSFJBU0V9PC9wYXNzcGhyYXNlPicsXG4gICAgICAgICcgICAgPC9zZXJ2ZXI+JyxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgbGluZXMucHVzaChcbiAgICAgICcgIDwvc2VydmVycz4nLFxuICAgICAgJzwvc2V0dGluZ3M+JyxcbiAgICApO1xuXG4gICAgYXdhaXQgZnMud3JpdGVGaWxlKHRoaXMuc2V0dGluZ3NGaWxlLCBsaW5lcy5qb2luKCdcXG4nKSwgJ3V0Zi04Jyk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZXhlYyhtb2pvOiBzdHJpbmcsIG9wdGlvbnM6IE1hdmVuRXhlY09wdGlvbnMpOiBQcm9taXNlPFByb2Nlc3NPdXRwdXQgfCB1bmRlZmluZWQ+IHtcbiAgICBjb25zdCBhcmdzID0gW1xuICAgICAgYC0tc2V0dGluZ3M9JHt0aGlzLnNldHRpbmdzRmlsZX1gLFxuICAgICAgLi4uKG9wdGlvbnMudmVyYm9zZSA/PyB0aGlzLnZlcmJvc2UgPyBbJy1YJ10gOiBbXSksXG4gICAgICBtb2pvLFxuICAgICAgLi4uT2JqZWN0LmVudHJpZXMob3B0aW9ucy5wcm9wZXJ0aWVzKS5tYXAoKFtrLCB2XSkgPT4gYC1EJHtrfT0ke3Z9YCksXG4gICAgXTtcblxuICAgIGlmICh0aGlzLmRyeVJ1bikge1xuICAgICAgZWNobyhgW0RSWS1SVU5dIG12biAke2FyZ3MubWFwKHF1b3RlKS5qb2luKCcgJyl9YCk7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBjb25zdCBlbnYgPSB7XG4gICAgICAuLi5wcm9jZXNzLmVudixcbiAgICAgIEpES19KQVZBX09QVElPTlM6IFtcbiAgICAgICAgLy8gSWYgd2UgZG9uJ3QgYWRkIHRoaXMsIHdlJ2xsIGdldCBhbiBlcnJvciBsaWtlIHRoZSBmb2xsb3dpbmcgZHVyaW5nIHRoZSBuZXh1cy1zdGFnaW5nLW1hdmVuLXBsdWdpbjpyYy1yZWxlYXNlIG1vam8uXG4gICAgICAgIC8vIERvbid0IGtub3cgd2hlcmUgdGhpcyBpcyBjb21pbmcgZnJvbSBhbGwgb2YgYSBzdWRkZW4uXG4gICAgICAgIC8vXG4gICAgICAgIC8vIFtFUlJPUl0gbWVzc2FnZSAgICAgICAgICAgICA6IE5vIGNvbnZlcnRlciBhdmFpbGFibGVcbiAgICAgICAgLy8gW0VSUk9SXSB0eXBlICAgICAgICAgICAgICAgIDogamF2YS51dGlsLkFycmF5cyRBcnJheUxpc3RcbiAgICAgICAgLy8gW0VSUk9SXSBjb252ZXJ0ZXIgICAgICAgICAgIDogY29tLnRob3VnaHR3b3Jrcy54c3RyZWFtLmNvbnZlcnRlcnMucmVmbGVjdGlvbi5SZWZsZWN0aW9uQ29udmVydGVyXG4gICAgICAgIC8vIFtFUlJPUl0gbWVzc2FnZVsxXSAgICAgICAgICA6IFVuYWJsZSB0byBtYWtlIGZpZWxkIHByb3RlY3RlZCB0cmFuc2llbnQgaW50IGphdmEudXRpbC5BYnN0cmFjdExpc3QubW9kQ291bnQgYWNjZXNzaWJsZTogbW9kdWxlIGphdmEuYmFzZSBkb2VzIG5vdCBcIm9wZW5zIGphdmEudXRpbFwiIHRvIHVubmFtZWQgbW9kdWxlIEA3YzhkNTMxMlxuICAgICAgICAnLS1hZGQtb3BlbnM9amF2YS5iYXNlL2phdmEudXRpbD1BTEwtVU5OQU1FRCcsXG4gICAgICAgICctLWFkZC1vcGVucz1qYXZhLmJhc2UvamF2YS5sYW5nPUFMTC1VTk5BTUVEJyxcbiAgICAgICAgJy0tYWRkLW9wZW5zPWphdmEuYmFzZS9qYXZhLmxhbmcuaW52b2tlPUFMTC1VTk5BTUVEJyxcbiAgICAgIF0uam9pbignICcpLFxuICAgIH07XG5cbiAgICByZXR1cm4gJCh7IHZlcmJvc2U6IHRydWUsIG5vdGhyb3c6IG9wdGlvbnMubm90aHJvdywgZW52IH0pYG12biAke2FyZ3N9YDtcbiAgfVxufVxuXG5pbnRlcmZhY2UgTWF2ZW5FeGVjT3B0aW9ucyB7XG4gIHByb3BlcnRpZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gIG5vdGhyb3c/OiBib29sZWFuO1xuICB2ZXJib3NlPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBBIGV4cGVjdGVkIGVycm9yIHRoYXQgZG9lc24ndCBuZWVkIGEgc3RhY2sgdHJhY2VcbiAqL1xuY2xhc3MgU2ltcGxlRXJyb3IgZXh0ZW5kcyBFcnJvciB7IH1cblxuLyoqXG4gKiBSZXF1aXJlIGFuIGVudmlyb25tZW50IHZhcmlhYmxlXG4gKi9cbmZ1bmN0aW9uIGVudlZhcihuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCByZXQgPSBwcm9jZXNzLmVudltuYW1lXTtcbiAgaWYgKCFyZXQpIHtcbiAgICB0aHJvdyBuZXcgU2ltcGxlRXJyb3IoYCR7bmFtZX0gaXMgcmVxdWlyZWRgKTtcbiAgfVxuICByZXR1cm4gcmV0O1xufVxuXG4vKipcbiAqIEEgdGVtcG9yYXJ5IGRpcmVjdG9yeSB0aGF0IGNsZWFucyB3aGVuIGl0IGdvZXMgb3V0IG9mIHNjb3BlXG4gKlxuICogVXNlIHdpdGggYHVzaW5nYC4gQ291bGQgaGF2ZSBiZWVuIGFzeW5jIGJ1dCBpdCdzIGRlcGVuZGluZ1xuICogb24gYW4gYWxyZWFkeS1zeW5jIEFQSSwgc28gd2h5IG5vdCBzeW5jP1xuICovXG5leHBvcnQgZnVuY3Rpb24gYXV0b0NsZWFuRGlyKCkge1xuICBjb25zdCBkaXIgPSB0bXBkaXIoKTtcbiAgcmV0dXJuIHtcbiAgICBkaXIsXG4gICAgW1N5bWJvbC5hc3luY0Rpc3Bvc2VdOiBhc3luYyAoKSA9PiB7XG4gICAgICBhd2FpdCBmcy5ybShkaXIsIHsgZm9yY2U6IHRydWUsIHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICB9LFxuICB9O1xufVxuXG5mdW5jdGlvbiBhc3NlcnROZXZlcih2YWx1ZTogbmV2ZXIpIHtcbiAgdGhyb3cgbmV3IEVycm9yKCdVbmV4cGVjdGVkIHZhbHVlOiAnICsgdmFsdWUpO1xufVxuXG4vLyBBICd6eCcgcHJpbWVyXG4vL1xuLy8gLSBCeSBkZWZhdWx0OiBzdGRlcnIgaXMgcHJpbnRlZCB0byB0aGUgdGVybWluYWwgaWYgaXQgaXMgY2FwdHVyZWQuXG4vLyAtIHsgdmVyYm9zZTogdHJ1ZSB9OiBwcmludCB0aGUgY29tbWFuZCwgc3Rkb3V0IGFuZCBzdGRlcnIgdG8gdGhlIHRlcm1pbmFsXG4vLyAtIHsgcXVpZXQ6IHRydWUgfTogcHJpbnQgbmVpdGhlciBzdGRvdXQgbm9yIHN0ZGVyclxuLy9cbi8vIC50ZXh0KCk6IHJldHVybiBldmVyeXRoaW5nIHRoYXQncyBjYXB0dXJlZCAoc3RkZXJyIGFuZCBzdGRvdXQgdG9nZXRoZXIgaWYgc3RkZXJyIGlzIGNhcHR1cmVkKVxuXG5tYWluKCkuY2F0Y2goZSA9PiB7XG4gIGlmIChlIGluc3RhbmNlb2YgUHJvY2Vzc091dHB1dCkge1xuICAgIGVjaG8oYOKdjCBTdWJwcm9jZXNzIGZhaWxlZCB3aXRoIGV4aXQgY29kZSAke2UuZXhpdENvZGV9YCk7XG4gIH0gZWxzZSBpZiAoZSBpbnN0YW5jZW9mIFNpbXBsZUVycm9yKSB7XG4gICAgZWNobygn4p2MJywgZS5tZXNzYWdlKTtcbiAgfSBlbHNlIHtcbiAgICBjb25zb2xlLmVycm9yKGUpO1xuICB9XG4gIHByb2Nlc3MuZXhpdENvZGUgPSAxO1xufSk7XG4iXX0=
|
|
610
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGliLW1hdmVuLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2Jpbi9wdWJsaWItbWF2ZW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBMm5CQSxvQ0FRQztBQW5vQkQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F5Qkc7QUFDSCwyQkFBb0M7QUFDcEMsMkJBQStFO0FBRS9FLE1BQU0sc0JBQXNCLEdBQUcsT0FBTyxDQUFDO0FBQ3ZDLE1BQU0sd0JBQXdCLEdBQUcsZUFBZSxDQUFDO0FBRWpELE1BQU0sMEJBQTBCLEdBQUcsdURBQXVELENBQUM7QUFFM0YsS0FBSyxVQUFVLElBQUk7SUFDakIsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbkMsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLFdBQVcsQ0FBQztJQUV4QyxJQUFBLE9BQUUsRUFBQyxRQUFRLENBQUMsQ0FBQztJQUViLE1BQU0sSUFBSSxHQUFHLE1BQU0sSUFBQSxTQUFJLEVBQUMsVUFBVSxDQUFDLENBQUM7SUFDcEMsSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ3RCLE1BQU0sSUFBSSxXQUFXLENBQUMsaURBQWlELE9BQU8sQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDMUYsQ0FBQztJQUVELElBQUEsU0FBSSxFQUFDLGVBQWUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUU1QixNQUFNLGFBQWEsR0FBeUI7UUFDMUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQztRQUNsQyxRQUFRLEVBQUUsTUFBTSxDQUFDLGdCQUFnQixDQUFDO1FBQ2xDLE1BQU0sRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLFlBQVksS0FBSyxN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RUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUNyRCxDQUFDO0tBQ0YsQ0FBQztBQUNKLENBQUM7QUFFRCxTQUFTLFdBQVcsQ0FBQyxLQUFZO0lBQy9CLE1BQU0sSUFBSSxLQUFLLENBQUMsb0JBQW9CLEdBQUcsS0FBSyxDQUFDLENBQUM7QUFDaEQsQ0FBQztBQUVELGdCQUFnQjtBQUNoQixFQUFFO0FBQ0YscUVBQXFFO0FBQ3JFLDRFQUE0RTtBQUM1RSxxREFBcUQ7QUFDckQsRUFBRTtBQUNGLGdHQUFnRztBQUVoRyxJQUFJLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUU7SUFDZixJQUFJLENBQUMsWUFBWSxrQkFBYSxFQUFFLENBQUM7UUFDL0IsSUFBQSxTQUFJLEVBQUMsc0NBQXNDLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO0lBQzNELENBQUM7U0FBTSxJQUFJLENBQUMsWUFBWSxXQUFXLEVBQUUsQ0FBQztRQUNwQyxJQUFBLFNBQUksRUFBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3ZCLENBQUM7U0FBTSxDQUFDO1FBQ04sT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNuQixDQUFDO0lBQ0QsT0FBTyxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUM7QUFDdkIsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIExlZ2FjeSB2cyBjb21wYXRpYmlsaXR5IGVuZHBvaW50XG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKlxuICogVGhpcyBzY3JpcHQgdGFsa3MgYWJvdXQgbGVnYWN5IHZzIGNvbXBhdGliaWxpdHkgZW5kcG9pbnQgYSBidW5jaC5cbiAqXG4gKiBCb3RoIGltcGxlbWVudCB0aGUgTmV4dXMgMiBwcm90b2NvbCwgaG93ZXZlcjpcbiAqXG4gKiAtIFRoZSBcImxlZ2FjeVwiIGVuZHBvaW50IGlzIHRoZSBTb25hdHlwZSBPU1NSSCBlbmRwb2ludCB0aGF0IHdhcyBkZXByZWNhdGVkIEp1bmUgMjAyNS5cbiAqIC0gVGhlIFwiY29tcGF0aWJpbGl0eVwiIGVuZHBvaW50IGlzIGEgTmV4dXMgMi1jb21wYXRpYmxlIGVuZHBvaW50IHN0b29kIHVwIGZvciB0aGUgbmV3XG4gKiAgIHB1Ymxpc2hpbmcgc2VydmljZSwgQ2VudHJhbCBQdWJsaXNoaW5nLlxuICpcbiAqIEl0IHNob3VsZCBiZSB0aGUgc2FtZSBwcm90b2NvbCBidXQgb2YgY291cnNlIHRoZXJlIGFyZSBzdWJ0bGUgZGlmZmVyZW5jZXNcbiAqIGJldHdlZW4gdGhlbSAoaW4gaG93IHRoZXkgc2lnbmFsIGVycm9yIHdoZW4geW91IHRyeSB0byByZXB1Ymxpc2ggYW4gYWxyZWFkeVxuICogcHVibGlzaGVkIHZlcnNpb24sIGFuZCBldmVuIGluIHRoZSB3aXJlIHByb3RvY29sIGFjY2VwdGVkKSBzbyB3ZSBoYXZlIHRvXG4gKiB0cmVhdCB0aGVtIGRpZmZlcmVudGx5IGhlcmUuXG4gKlxuICogVGhlcmUgaXMgYWxzbyBhbiBcIm9mZmljaWFsIG5ld1wiIHByb3RvY29sIGZvciB0aGUgbmV3IHB1Ymxpc2hpbmcgbWVjaGFuaXNtLFxuICogYnV0IHRoZSBNYXZlbiBwbHVnaW4gdGhleSBzdXBwbHkgZm9yIHRoYXQgZG9lc24ndCBzdXBwb3J0IHRoYXQuIEluIHRoZWlyIHdvcmRzOlxuICpcbiAqID4gaXQgYXBwZWFycyB0aGF0IHlvdSBhcmUgdXNpbmcgdGhlIFwidHdvIHN0YWdlXCJbMV0gZGVwbG95bWVudCBwcm9jZXNzLCB3aGljaCBpc1xuICogPiBub3QgeWV0IHN1cHBvcnRlZCBieSB0aGUgbmV3IHBsdWdpbi4gWW91IGFyZSB0aGUgZmlyc3QgcHVibGlzaGVyIHRvIGhhdmVcbiAqID4gcmVxdWVzdGVkIHRoaXMsIHNvIHdlIHdlcmUgbm90IGZhbWlsaWFyIHdpdGggdGhpcyBzcGVjaWZpYyB1c2VjYXNlIHdoZW5cbiAqID4gYnVpbGRpbmcgdGhlIG5ldyBwbHVnaW5cbiAqID4gWzFdIDxodHRwczovL2dpdGh1Yi5jb20vc29uYXR5cGUvbmV4dXMtbWF2ZW4tcGx1Z2lucy9ibG9iLzQzYTk5NDBiMTM0YzNmODdlYmU0ZGFhODI1NTJlODQ0ZDljNTc4Yjgvc3RhZ2luZy9tYXZlbi1wbHVnaW4vV09SS0ZMT1dTLm1kI3R3by1zaG90cz5cbiAqL1xuaW1wb3J0IHsgcHJvbWlzZXMgYXMgZnMgfSBmcm9tICdmcyc7XG5pbXBvcnQgeyAkLCBjZCwgZWNobywgZ2xvYiwgb3MsIHBhdGgsIFByb2Nlc3NPdXRwdXQsIHF1b3RlLCB0bXBkaXIgfSBmcm9tICd6eCc7XG5cbmNvbnN0IExFR0FDWV9PU1NSSF9TRVJWRVJfSUQgPSAnb3NzcmgnO1xuY29uc3QgQ09NUEFUX0NFTlRSQUxfU0VSVkVSX0lEID0gJ2NlbnRyYWwtb3NzcmgnO1xuXG5jb25zdCBORVhVU19NQVZFTl9TVEFHSU5HX1BMVUdJTiA9ICdvcmcuc29uYXR5cGUucGx1Z2luczpuZXh1cy1zdGFnaW5nLW1hdmVuLXBsdWdpbjoxLjcuMCc7XG5cbmFzeW5jIGZ1bmN0aW9uIG1haW4oKSB7XG4gIGNvbnN0IGFyZ3MgPSBwcm9jZXNzLmFyZ3Yuc2xpY2UoMik7XG4gIGNvbnN0IGphdmFSb290ID0gYXJnc1swXSA/PyAnZGlzdC9qYXZhJztcblxuICBjZChqYXZhUm9vdCk7XG5cbiAgY29uc3QgcG9tcyA9IGF3YWl0IGdsb2IoJyoqLyoucG9tJyk7XG4gIGlmIChwb21zLmxlbmd0aCA9PT0gMCkge1xuICAgIHRocm93IG5ldyBTaW1wbGVFcnJvcihgTm8gSkFSUyB0byBwdWJsaXNoOiBubyAucG9tIGZpbGVzIGZvdW5kIHVuZGVyICR7cHJvY2Vzcy5jd2QoKX1gKTtcbiAgfVxuXG4gIGVjaG8oYFBPTXMgZm91bmQ6ICR7cG9tc31gKTtcblxuICBjb25zdCBzaGFyZWRPcHRpb25zOiBTaGFyZWRQdWJsaXNoT3B0aW9ucyA9IHtcbiAgICB1c2VybmFtZTogZW52VmFyKCdNQVZFTl9VU0VSTkFNRScpLFxuICAgIHBhc3N3b3JkOiBlbnZWYXIoJ01BVkVOX1BBU1NXT1JEJyksXG4gICAgZHJ5UnVuOiBwcm9jZXNzLmVudi5NQVZFTl9EUllSVU4gPT09ICd0cnVlJyxcbiAgICB2ZXJib3NlOiBwcm9jZXNzLmVudi5NQVZFTl9WRVJCT1NFID09PSAndHJ1ZScsXG4gICAgcG9tcyxcbiAgfTtcblxuICBsZXQgb3B0aW9uczogTWF2ZW5QdWJsaXNoT3B0aW9ucztcbiAgY29uc3Qgc2VydmVySWQgPSBwcm9jZXNzLmVudi5NQVZFTl9TRVJWRVJfSUQgPz8gTEVHQUNZX09TU1JIX1NFUlZFUl9JRDtcblxuICBzd2l0Y2ggKHNlcnZlcklkKSB7XG4gICAgY2FzZSBMRUdBQ1lfT1NTUkhfU0VSVkVSX0lEOlxuICAgICAgb3B0aW9ucyA9IHtcbiAgICAgICAgdHlwZTogJ2xlZ2FjeS1vc3NyaCcsXG4gICAgICAgIC4uLnNoYXJlZE9wdGlvbnMsXG4gICAgICAgIHN0YWdpbmdQcm9maWxlSWQ6IGVudlZhcignTUFWRU5fU1RBR0lOR19QUk9GSUxFX0lEJyksXG4gICAgICAgIGVuZHBvaW50OiBwcm9jZXNzLmVudi5NQVZFTl9FTkRQT0lOVCxcbiAgICAgICAgcHJpdmF0ZUtleTogcGFyc2VQcml2YXRlS2V5RnJvbUVudigpLFxuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgQ09NUEFUX0NFTlRSQUxfU0VSVkVSX0lEOlxuICAgICAgb3B0aW9ucyA9IHtcbiAgICAgICAgdHlwZTogJ2NvbXBhdC1vc3NyaCcsXG4gICAgICAgIC4uLnNoYXJlZE9wdGlvbnMsXG4gICAgICAgIHN0YWdpbmdQcm9maWxlSWQ6IGVudlZhcignTUFWRU5fU1RBR0lOR19QUk9GSUxFX0lEJyksXG4gICAgICAgIGVuZHBvaW50OiBwcm9jZXNzLmVudi5NQVZFTl9FTkRQT0lOVCxcbiAgICAgICAgcHJpdmF0ZUtleTogcGFyc2VQcml2YXRlS2V5RnJvbUVudigpLFxuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICAvLyBXZSBoYXZlbid0IGltcGxlbWVudGVkIHNpZ25pbmcgZm9yIHRoaXMsIHNvIGZhaWwgbG91ZGx5IGlmIHBlb3BsZSB0cnkgdG8gdXNlIGl0IGFueXdheVxuICAgICAgaWYgKHByb2Nlc3MuZW52Lk1BVkVOX0dQR19QUklWQVRFX0tFWSB8fCBwcm9jZXNzLmVudi5NQVZFTl9HUEdfUFJJVkFURV9LRVlfRklMRSkge1xuICAgICAgICB0aHJvdyBuZXcgU2ltcGxlRXJyb3IoJ01BVkVOX0dQR19QUklWQVRFX0tFWVtfRklMRV0gaXMgb25seSBzdXBwb3J0ZWQgZm9yIE9TU1JIIHB1Ymxpc2hpbmcnKTtcbiAgICAgIH1cblxuICAgICAgb3B0aW9ucyA9IHtcbiAgICAgICAgdHlwZTogJ2N1c3RvbS1uZXh1cycsXG4gICAgICAgIC4uLnNoYXJlZE9wdGlvbnMsXG4gICAgICAgIHNlcnZlcklkLFxuICAgICAgICByZXBvc2l0b3J5VXJsOiBlbnZWYXIoJ01BVkVOX1JFUE9TSVRPUllfVVJMJyksXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG4gIH1cblxuICBhd2FpdCBtYXZlblB1Ymxpc2gob3B0aW9ucyk7XG5cbiAgZWNobygnfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+ficpO1xuICBlY2hvKCfinIUgQWxsIERvbmUhJyk7XG59XG5cbmZ1bmN0aW9uIHBhcnNlUHJpdmF0ZUtleUZyb21FbnYoKTogUHJpdmF0ZUtleSB7XG4gIGlmIChwcm9jZXNzLmVudi5NQVZFTl9HUEdfUFJJVkFURV9LRVlfRklMRSkge1xuICAgIHJldHVybiB7IHR5cGU6ICdmaWxlJywgZmlsZU5hbWU6IHByb2Nlc3MuZW52Lk1BVkVOX0dQR19QUklWQVRFX0tFWV9GSUxFLCBwYXNzUGhyYXNlOiBlbnZWYXIoJ01BVkVOX0dQR19QUklWQVRFX0tFWV9QQVNTUEhSQVNFJykgfTtcbiAgfVxuICBpZiAocHJvY2Vzcy5lbnYuTUFWRU5fR1BHX1BSSVZBVEVfS0VZKSB7XG4gICAgcmV0dXJuIHsgdHlwZTogJ21hdGVyaWFsJywga2V5TWF0ZXJpYWw6IHByb2Nlc3MuZW52Lk1BVkVOX0dQR19QUklWQVRFX0tFWSwgcGFzc1BocmFzZTogZW52VmFyKCdNQVZFTl9HUEdfUFJJVkFURV9LRVlfUEFTU1BIUkFTRScpIH07XG4gIH1cbiAgdGhyb3cgbmV3IFNpbXBsZUVycm9yKCdNQVZFTl9HUEdfUFJJVkFURV9LRVlbX0ZJTEVdIGlzIHJlcXVpcmVkJyk7XG59XG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gIE1vZGVsaW5nIGFsbCB0aGUgcGFyYW1ldGVycyBzbyB0aGF0IHdlIGNhbiBwdWxsIHRoZSBlbnZpcm9ubWVudCBwYXJzaW5nIGZvcndhcmRcbi8vXG5cbmludGVyZmFjZSBTaGFyZWRQdWJsaXNoT3B0aW9ucyB7XG4gIHJlYWRvbmx5IHVzZXJuYW1lOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHBhc3N3b3JkOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGRyeVJ1bjogYm9vbGVhbjtcbiAgcmVhZG9ubHkgdmVyYm9zZTogYm9vbGVhbjtcbiAgcmVhZG9ubHkgcG9tczogc3RyaW5nW107XG59XG5cbmludGVyZmFjZSBMZWdhY3lPc3NyaFB1Ymxpc2hPcHRpb25zIGV4dGVuZHMgU2hhcmVkUHVibGlzaE9wdGlvbnMge1xuICB0eXBlOiAnbGVnYWN5LW9zc3JoJztcbiAgcmVhZG9ubHkgcHJpdmF0ZUtleTogUHJpdmF0ZUtleTtcbiAgcmVhZG9ubHkgZW5kcG9pbnQ/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHN0YWdpbmdQcm9maWxlSWQ6IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIENvbXBhdE9zc3JoUHVibGlzaE9wdGlvbnMgZXh0ZW5kcyBTaGFyZWRQdWJsaXNoT3B0aW9ucyB7XG4gIHR5cGU6ICdjb21wYXQtb3NzcmgnO1xuICByZWFkb25seSBwcml2YXRlS2V5OiBQcml2YXRlS2V5O1xuICByZWFkb25seSBlbmRwb2ludD86IHN0cmluZztcbiAgcmVhZG9ubHkgc3RhZ2luZ1Byb2ZpbGVJZDogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgQ3VzdG9tTmV4dXNQdWJsaXNoT3B0aW9ucyBleHRlbmRzIFNoYXJlZFB1Ymxpc2hPcHRpb25zIHtcbiAgdHlwZTogJ2N1c3RvbS1uZXh1cyc7XG4gIHJlYWRvbmx5IHJlcG9zaXRvcnlVcmw6IHN0cmluZztcbiAgcmVhZG9ubHkgc2VydmVySWQ6IHN0cmluZztcbn1cblxudHlwZSBQcml2YXRlS2V5ID1cbiAgfCB7IHR5cGU6ICdmaWxlJzsgZmlsZU5hbWU6IHN0cmluZzsgcGFzc1BocmFzZTogc3RyaW5nIH1cbiAgfCB7IHR5cGU6ICdtYXRlcmlhbCc7IGtleU1hdGVyaWFsOiBzdHJpbmc7IHBhc3NQaHJhc2U6IHN0cmluZyB9XG4gIDtcblxudHlwZSBNYXZlblB1Ymxpc2hPcHRpb25zID0gTGVnYWN5T3NzcmhQdWJsaXNoT3B0aW9ucyB8IENvbXBhdE9zc3JoUHVibGlzaE9wdGlvbnN8IEN1c3RvbU5leHVzUHVibGlzaE9wdGlvbnM7XG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gIFB1Ymxpc2hpbmcgZnVuY3Rpb25zXG4vL1xuXG5hc3luYyBmdW5jdGlvbiBtYXZlblB1Ymxpc2gob3B0aW9uczogTWF2ZW5QdWJsaXNoT3B0aW9ucykge1xuICBhd2FpdCB1c2luZyB3b3JrRGlyID0gYXV0b0NsZWFuRGlyKCk7XG4gIGNvbnN0IG1hdmVuID0gbmV3IE1hdmVuKHdvcmtEaXIuZGlyLCBvcHRpb25zLnZlcmJvc2UsIG9wdGlvbnMuZHJ5UnVuKTtcblxuICBjb25zdCB4ID0gb3B0aW9ucy50eXBlO1xuICBzd2l0Y2ggKHgpIHtcbiAgICBjYXNlICdsZWdhY3ktb3NzcmgnOlxuICAgICAgYXdhaXQgZGVwbG95TGVnYWN5T3NzcmgobWF2ZW4sIG9wdGlvbnMpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnY29tcGF0LW9zc3JoJzpcbiAgICAgIGF3YWl0IGRlcGxveUNvbXBhdE9zc3JoKG1hdmVuLCBvcHRpb25zKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2N1c3RvbS1uZXh1cyc6XG4gICAgICBhd2FpdCBkZXBsb3lDdXN0b21OZXh1cyhtYXZlbiwgb3B0aW9ucyk7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgYXNzZXJ0TmV2ZXIoeCk7XG4gIH1cbn1cblxuLyoqXG4gKiBEZXBsb3kgdG8gdGhlIGxlZ2FjeSBPU1NSSCBOZXh1cyBzZXJ2ZXJcbiAqL1xuYXN5bmMgZnVuY3Rpb24gZGVwbG95TGVnYWN5T3NzcmgobWF2ZW46IE1hdmVuLCBvcHRpb25zOiBMZWdhY3lPc3NyaFB1Ymxpc2hPcHRpb25zKSB7XG4gIGVjaG8oJ/Cfk6YgUHVibGlzaGluZyB0byBNYXZlbiBDZW50cmFsJyk7XG4gIGNvbnN0IGRlZmF1bHRFbmRwb2ludCA9ICdodHRwczovL29zcy5zb25hdHlwZS5vcmcnO1xuXG4gIGNvbnN0IHN0YWdlZCA9IGF3YWl0IGRlcGxveVN0YWdlZFJlcG9zaXRvcnkobWF2ZW4sIHtcbiAgICAuLi5vcHRpb25zLFxuICAgIGVuZHBvaW50OiBvcHRpb25zLmVuZHBvaW50ID8/IGRlZmF1bHRFbmRwb2ludCxcbiAgICByZXB1Ymxpc2hXaWxsNDAwOiBmYWxzZSxcbiAgfSk7XG5cbiAgaWYgKHN0YWdlZC50eXBlICE9PSAnc3VjY2VzcycpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKlxuICBjb25zdCByZWxlYXNlZCA9IGF3YWl0IHJlbGVhc2VSZXBvKHtcbiAgICBzZXJ2ZXJVcmw6IG9wdGlvbnMuZW5kcG9pbnQgPz8gZGVmYXVsdEVuZHBvaW50LFxuICAgIHVzZXJuYW1lOiBvcHRpb25zLnVzZXJuYW1lLFxuICAgIHBhc3N3b3JkOiBvcHRpb25zLnBhc3N3b3JkLFxuICAgIHJlcG9zaXRvcnlJZDogc3RhZ2VkLnJlcG9zaXRvcnlJZCxcbiAgfSk7XG5cbiAgaWYgKHJlbGVhc2VkKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gICovXG5cbiAgLy8gU2VuZCBhIHJlbW90ZSByZWxlYXNlIGNvbW1hbmQgdG8gdGhlIHJlcG9zaXRvcnlcbiAgY29uc3QgcmVsZWFzZU91dHB1dCA9IGF3YWl0IG1hdmVuLmV4ZWMoYCR7TkVYVVNfTUFWRU5fU1RBR0lOR19QTFVHSU59OnJjLXJlbGVhc2VgLCB7XG4gICAgcHJvcGVydGllczoge1xuICAgICAgbmV4dXNVcmw6IG9wdGlvbnMuZW5kcG9pbnQgPz8gZGVmYXVsdEVuZHBvaW50LFxuICAgICAgc2VydmVySWQ6IHN0YWdlZC5zZXJ2ZXJJZCxcbiAgICAgIHN0YWdpbmdSZXBvc2l0b3J5SWQ6IHN0YWdlZC5yZXBvc2l0b3J5SWQsXG4gICAgfSxcbiAgICBub3Rocm93OiB0cnVlLFxuICB9KTtcbiAgaWYgKCFyZWxlYXNlT3V0cHV0KSB7XG4gICAgZWNobygn8J+PnO+4jyBTdG9wcGVkIGhlcmUgYmVjYXVzZSBvZiBkcnktcnVuJyk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKHJlbGVhc2VPdXRwdXQuZXhpdENvZGUgIT09IDApIHtcbiAgICAvLyBJZiByZWxlYXNlIGZhaWxlZCwgY2hlY2sgaWYgdGhpcyB3YXMgY2F1c2VkIGJlY2F1c2Ugd2UgYXJlIHRyeWluZyB0byBwdWJsaXNoXG4gICAgLy8gdGhlIHNhbWUgdmVyc2lvbiBhZ2Fpbiwgd2hpY2ggaXMgbm90IGFuIGVycm9yLiBUaGUgbWFnaWMgc3RyaW5nIFwiZG9lcyBub3RcbiAgICAvLyBhbGxvdyB1cGRhdGluZyBhcnRpZmFjdFwiIGZvciBhIFwiLnBvbVwiIGZpbGUgaW5kaWNhdGVzIHRoYXQgd2UgYXJlIHRyeWluZyB0b1xuICAgIC8vIG92ZXJyaWRlIGFuIGV4aXN0aW5nIHZlcnNpb24uIE90aGVyd2lzZSwgZmFpbCFcblxuICAgIGNvbnN0IGxvb2tzTGlrZUR1cGxpY2F0ZVB1Ymxpc2ggPSByZWxlYXNlT3V0cHV0LmxpbmVzKClcbiAgICAgIC5maWx0ZXIobCA9PiBsLmluY2x1ZGVzKCdkb2VzIG5vdCBhbGxvdyB1cGRhdGluZyBhcnRpZmFjdCcpKVxuICAgICAgLmZpbHRlcihsID0+IGwuaW5jbHVkZXMoJy5wb20nKSlcbiAgICAgIC5sZW5ndGggPiAwO1xuXG4gICAgaWYgKCFsb29rc0xpa2VEdXBsaWNhdGVQdWJsaXNoKSB7XG4gICAgICB0aHJvdyBuZXcgU2ltcGxlRXJyb3IoJ1JlbGVhc2UgZmFpbGVkJyk7XG4gICAgfVxuXG4gICAgZWNobygn4pqg77iPIEFydGlmYWN0IGFscmVhZHkgcHVibGlzaGVkLiBTa2lwcGluZycpO1xuICB9XG59XG5cbi8qKlxuICogRGVwbG95IHRvIHRoZSBjb21wYXQgT1NTUkggTmV4dXMgc2VydmVyXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGRlcGxveUNvbXBhdE9zc3JoKG1hdmVuOiBNYXZlbiwgb3B0aW9uczogQ29tcGF0T3NzcmhQdWJsaXNoT3B0aW9ucykge1xuICBlY2hvKCfwn5OmIFB1Ymxpc2hpbmcgdG8gTWF2ZW4gQ2VudHJhbCAoQ29tcGF0IGVuZHBvaW50KScpO1xuXG4gIGNvbnN0IGRlZmF1bHRFbmRwb2ludCA9ICdodHRwczovL29zc3JoLXN0YWdpbmctYXBpLmNlbnRyYWwuc29uYXR5cGUuY29tLyc7XG4gIGNvbnN0IGVuZHBvaW50ID0gb3B0aW9ucy5lbmRwb2ludCA/PyBkZWZhdWx0RW5kcG9pbnQ7XG5cbiAgY29uc3Qgc3RhZ2VkID0gYXdhaXQgZGVwbG95U3RhZ2VkUmVwb3NpdG9yeShtYXZlbiwge1xuICAgIC4uLm9wdGlvbnMsXG4gICAgZW5kcG9pbnQsXG4gICAgcmVwdWJsaXNoV2lsbDQwMDogdHJ1ZSxcbiAgfSk7XG5cbiAgaWYgKHN0YWdlZC50eXBlICE9PSAnc3VjY2VzcycpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCByZWxlYXNlZCA9IGF3YWl0IHJlbGVhc2VSZXBvKHtcbiAgICBzZXJ2ZXJVcmw6IGVuZHBvaW50LFxuICAgIHVzZXJuYW1lOiBvcHRpb25zLnVzZXJuYW1lLFxuICAgIHBhc3N3b3JkOiBvcHRpb25zLnBhc3N3b3JkLFxuICAgIHJlcG9zaXRvcnlJZDogc3RhZ2VkLnJlcG9zaXRvcnlJZCxcbiAgfSk7XG5cbiAgaWYgKHJlbGVhc2VkID09PSAnZHVwbGljYXRlLXZlcnNpb24nKSB7XG4gICAgZWNobygn4pqg77iPIFZlcnNpb24ocykgYWxyZWFkeSBwdWJsaXNoZWQuIFNraXBwaW5nJyk7XG4gIH1cbn1cblxuLyoqXG4gKiBEZXBsb3kgdG8gYSBjdXN0b20gTmV4dXMgc2VydmVyXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGRlcGxveUN1c3RvbU5leHVzKG1hdmVuOiBNYXZlbiwgb3B0aW9uczogQ3VzdG9tTmV4dXNQdWJsaXNoT3B0aW9ucykge1xuICBlY2hvKGDwn5OmIFB1Ymxpc2hpbmcgdG8gJHtvcHRpb25zLnNlcnZlcklkfWApO1xuICBhd2FpdCBtYXZlbi53cml0ZVNldHRpbmdzRmlsZShvcHRpb25zLnNlcnZlcklkLCBmYWxzZSk7XG5cbiAgZm9yIChjb25zdCBwb20gb2Ygb3B0aW9ucy5wb21zKSB7XG4gICAgY29uc3QgZGVwbG95T3V0cHV0ID0gYXdhaXQgbWF2ZW4uZXhlYygnZGVwbG95OmRlcGxveS1maWxlJywge1xuICAgICAgcHJvcGVydGllczoge1xuICAgICAgICB1cmw6IG9wdGlvbnMucmVwb3NpdG9yeVVybCxcbiAgICAgICAgcmVwb3NpdG9yeUlkOiBvcHRpb25zLnNlcnZlcklkLFxuICAgICAgICBwb21GaWxlOiBwb20sXG4gICAgICAgIC4uLmphcnNGcm9tUG9tKHBvbSksXG4gICAgICB9LFxuICAgICAgbm90aHJvdzogdHJ1ZSxcbiAgICB9KTtcblxuICAgIGlmIChkZXBsb3lPdXRwdXQ/LmV4aXRDb2RlICYmIGRlcGxveU91dHB1dC5leGl0Q29kZSA+IDApIHtcbiAgICAgIGlmIChkZXBsb3lPdXRwdXQuc3Rkb3V0LmluY2x1ZGVzKCc0MDkgQ29uZmxpY3QnKSkge1xuICAgICAgICBlY2hvKCfimqDvuI8gQXJ0aWZhY3QgYWxyZWFkeSBwdWJsaXNoZWQuIFNraXBwaW5nJyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgU2ltcGxlRXJyb3IoJ1JlbGVhc2UgZmFpbGVkJyk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbnR5cGUgRGVwbG95U3RhZ2VkUmVwb1Jlc3VsdCA9XG4gIHwgeyB0eXBlOiAnc3VjY2Vzcyc7IHJlcG9zaXRvcnlJZDogc3RyaW5nOyBzZXJ2ZXJJZDogc3RyaW5nIH1cbiAgfCB7IHR5cGU6ICdhbHJlYWR5LXB1Ymxpc2hlZCcgfVxuICB8IHsgdHlwZTogJ2RyeS1ydW4nIH07XG5cbi8qKlxuICogQ3JlYXRlIHRoZSBzdGFnaW5nIHJlcG9zaXRvcnkuIFRoaXMgaXMgdGhlIHNhbWUgYmV0d2VlbiB0aGUgbGVnYWN5IGFuZCBjb21wYXQgZW5kcG9pbnRzLlxuICpcbiAqIGByZXB1Ymxpc2hXaWxsNDAwYDogaW4gdGhlIGNvbXBhdGliaWxpdHkgZW5kcG9pbnQsIHN0YWdpbmcgYSB2ZXJzaW9uIHRoYXQgaGFzIGFscmVhZHlcbiAqIGJlZW4gcHVibGlzaGVkIHdpbGwgbGVhZCB0byBhIGA0MDAgQmFkIFJlcXVlc3RgLCB3aXRoIG5vIGZ1cnRoZXIgaW5mby4gV2UgbmVlZGVkIHRvIGhhdmVcbiAqIHJ1biB0aGUgTWF2ZW4gY29tbWFuZCB3aXRoIGAtLWRlYnVnYCBsb2dnaW5nIHRvIHNlZSB0aGUgYWN0dWFsIGVycm9yIG1lc3NhZ2UgaW4gdGhlIG91dHB1dC5cbiAqXG4gKiBJbiB0aGUgbGVnYWN5IGVuZHBvaW50LCBzdGFnaW5nIHRha2VzIG11bHRpcGxlIG1pbnV0ZXMsIGFuZCBNYXZlbiB3aWxsIHBvbGxcbiAqIGV2ZXJ5IDNzIGFuZCBwcmludCB0aGUgb3V0cHV0LiBXZSB0aGVyZWZvcmUgZG9uJ3QgdXNlIHZlcmJvc2UgbW9kZSB0byBhdm9pZFxuICogc3Rkb3V0IHNwYW0uIEluIHRoZSBsZWdhY3kgZW5kcG9pbnQsIGR1cGxpY2F0ZSB2ZXJzaW9uIHB1Ymxpc2hpbmcgZ2V0c1xuICogcmVwb3J0ZWQgZHVyaW5nIHRoZSAncmVsZWFzZScgc3RlcCBhbnl3YXksIG5vdCBkdXJpbmcgc3RhZ2luZy5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gZGVwbG95U3RhZ2VkUmVwb3NpdG9yeShtYXZlbjogTWF2ZW4sIG9wdGlvbnM6IE9taXQ8TGVnYWN5T3NzcmhQdWJsaXNoT3B0aW9ucyB8IENvbXBhdE9zc3JoUHVibGlzaE9wdGlvbnMsICdlbmRwb2ludCc+ICYgeyBlbmRwb2ludDogc3RyaW5nOyByZXB1Ymxpc2hXaWxsNDAwOiBib29sZWFuIH0pOiBQcm9taXNlPERlcGxveVN0YWdlZFJlcG9SZXN1bHQ+IHtcbiAgY29uc3Qgc2VydmVySWQgPSAnb3NzcmgnO1xuXG4gIGF3YWl0IG1hdmVuLndyaXRlU2V0dGluZ3NGaWxlKHNlcnZlcklkLCB0cnVlKTtcblxuICAvLyBGaXJzdCAtLSBzaWduIGFydGlmYWN0c1xuICBjb25zdCBzaWduZWREaXIgPSBwYXRoLmpvaW4obWF2ZW4ud29ya0RpciwgJ3NpZ25lZCcpO1xuICBhd2FpdCBmcy5ta2RpcihzaWduZWREaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuXG4gIGF3YWl0IHNpZ25KYXJzKG1hdmVuLCBvcHRpb25zLnBvbXMsIHNpZ25lZERpciwgc2VydmVySWQsIG9wdGlvbnMucHJpdmF0ZUtleSk7XG5cbiAgZWNobygnfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+ficpO1xuICBlY2hvKCcgRGVwbG95aW5nIGFuZCBjbG9zaW5nIHJlcG9zaXRvcnkuLi4nKTtcbiAgZWNobygnfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+ficpO1xuXG4gIGNvbnN0IG5leHVzTWF2ZW5TdGFnaW5nID0gJ29yZy5zb25hdHlwZS5wbHVnaW5zOm5leHVzLXN0YWdpbmctbWF2ZW4tcGx1Z2luOjEuNy4wJztcbiAgY29uc3Qgc3RhZ2VPdXRwdXQgPSBhd2FpdCBtYXZlbi5leGVjKGAke25leHVzTWF2ZW5TdGFnaW5nfTpkZXBsb3ktc3RhZ2VkLXJlcG9zaXRvcnlgLCB7XG4gICAgcHJvcGVydGllczoge1xuICAgICAgcmVwb3NpdG9yeURpcmVjdG9yeTogc2lnbmVkRGlyLFxuICAgICAgbmV4dXNVcmw6IG9wdGlvbnMuZW5kcG9pbnQsXG4gICAgICBzZXJ2ZXJJZCxcbiAgICAgIHN0YWdpbmdQcm9ncmVzc1RpbWVvdXRNaW51dGVzOiAnMzAnLFxuICAgICAgc3RhZ2luZ1Byb2ZpbGVJZDogb3B0aW9ucy5zdGFnaW5nUHJvZmlsZUlkLFxuICAgIH0sXG4gICAgbm90aHJvdzogdHJ1ZSxcbiAgICB2ZXJib3NlOiBvcHRpb25zLnJlcHVibGlzaFdpbGw0MDAsXG4gIH0pO1xuICAvLyBGSVhNRTogTmV3IHN0YWdpbmcgQVBJIHRocm93cyBhbiBlcnJvciBoZXJlIG9uIGR1cGxpY2F0ZSB2ZXJzaW9uc1xuICBpZiAoc3RhZ2VPdXRwdXQgPT09IHVuZGVmaW5lZCkge1xuICAgIGVjaG8oJ/Cfj5zvuI8gU3RvcHBlZCBoZXJlIGJlY2F1c2Ugb2YgZHJ5LXJ1bicpO1xuICAgIHJldHVybiB7IHR5cGU6ICdkcnktcnVuJyB9O1xuICB9XG5cbiAgaWYgKG9wdGlvbnMucmVwdWJsaXNoV2lsbDQwMCAmJiBzdGFnZU91dHB1dC50ZXh0KCkubWF0Y2goL0NvbXBvbmVudCB3aXRoIHBhY2thZ2UgdXJsLiphbHJlYWR5IGV4aXN0cy8pKSB7XG4gICAgLy8gV2UndmUgc2VlbiB0aGlzIGZhaWwgd2l0aCB0aGUgYWJvdmUgZXJyb3IgbWVzc2FnZSBvbiB0aGUgT1NTUkggY29tcGF0aWJpbGl0eSBBUEkgd2hlbiB0cnlpbmcgdG8gcmVwdWJsaXNoXG4gICAgLy8gYW4gYWxyZWFkeS1wdWJsaXNoZWQgdmVyc2lvbi5cbiAgICAvL1xuICAgIC8vIFRoaXMgaXMgcG90ZW50aWFsbHkgYSBwcm9ibGVtIGlmIHRoZXJlIGFyZSBtdWx0aXBsZSB2ZXJzaW9ucyBpbiB0aGUgc291cmNlIGRpcmVjdG9yeSBhdCBvbmNlLCBiZWNhdXNlIG5vdGhpbmdcbiAgICAvLyB3aWxsIGJlIHB1Ymxpc2hlZCBpZiB0aGVyZSdzIG9uZSBwYWNrYWdlIGluIHRoZXJlIHRoYXQgaGFzIGFscmVhZHkgYmVlbiBwdWJsaXNoZWQgcHJldmlvdXNseS4gQnV0IGMnZXN0IGxhIHZpZS5cbiAgICBlY2hvKCfimqDvuI8gVmVyc2lvbihzKSBhbHJlYWR5IHB1Ymxpc2hlZC4gU2tpcHBpbmcnKTtcbiAgICByZXR1cm4geyB0eXBlOiAnYWxyZWFkeS1wdWJsaXNoZWQnIH07XG4gIH0gZWxzZSBpZiAoc3RhZ2VPdXRwdXQuZXhpdENvZGUgJiYgc3RhZ2VPdXRwdXQuZXhpdENvZGUgPiAwKSB7XG4gICAgdGhyb3cgc3RhZ2VPdXRwdXQ7XG4gIH1cblxuICAvLyBHcmVwIHRoZSByZXBvc2l0b3J5IElEIG91dCBvZiB0aGUgcHJpbnRlZCBvdXRwdXRcbiAgLy8gW0lORk9dICAqIENsb3Npbmcgc3RhZ2luZyByZXBvc2l0b3J5IHdpdGggSUQgXCJYWFhYWFhYWFhYXCIuXG4gIGNvbnN0IG0gPSBzdGFnZU91dHB1dC5zdGRvdXQubWF0Y2goL0Nsb3Npbmcgc3RhZ2luZyByZXBvc2l0b3J5IHdpdGggSUQgXCIoW15cIl0rKVwiLyk7XG4gIGlmICghbSkge1xuICAgIHRocm93IG5ldyBTaW1wbGVFcnJvcignVW5hYmxlIHRvIGV4dHJhY3QgcmVwb3NpdG9yeSBJRCBmcm9tIGRlcGxveS1zdGFnZWQtcmVwb3NpdG9yeSBvdXRwdXQuIFRoaXMgbWVhbnMgaXQgZmFpbGVkIHRvIGNsb3NlIG9yIHRoZXJlIHdhcyBhbiB1bmV4cGVjdGVkIHByb2JsZW0uIEF0IGFueSByYXRlLCB3ZSBjYW5cXCd0IHJlbGVhc2UgaXQuIFNvcnJ5LicpO1xuICB9XG4gIGNvbnN0IHJlcG9zaXRvcnlJZCA9IG1bMV07XG5cbiAgcmV0dXJuIHsgdHlwZTogJ3N1Y2Nlc3MnLCByZXBvc2l0b3J5SWQsIHNlcnZlcklkIH07XG59XG5cbi8qKlxuICogU2VuZCBhIGN1c3RvbSBcInJlbGVhc2VcIiBjb21tYW5kIHRvIHRoZSBuZXcgU29uYXR5cGUgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgZW5kcG9pbnRcbiAqXG4gKiBXaGVuIHVzaW5nIHRoZSBgbmV4dXMtc3RhZ2luZy1tYXZlbi1wbHVnaW5gJ3MgYHJlbGVhc2VgIG9yIGByYy1yZWxlYXNlYCBjb21tYW5kcywgd2UgZ2V0IHRoZSBmb2xsb3dpbmdcbiAqIGVycm9yOlxuICpcbiAqIFNlbmRpbmc6XG4gKlxuICogYGBgXG4gKiA8c3RhZ2luZ0FjdGlvblJlcXVlc3Q+PGRhdGE+PHN0YWdlZFJlcG9zaXRvcnlJZHMgY2xhc3M9XCJqYXZhLnV0aWwuQXJyYXlzJEFycmF5TGlzdFwiPjxhIGNsYXNzPVwic3RyaW5nLWFycmF5XCI+PHN0cmluZz5pby5naXRodWIucml4MHJyci0tNjNlZGJjYmUtZjA1OC00NGViLTg1ZjQtZmQ5ZGNlMWFlZjQwPC9zdHJpbmc+PC9hPjwvc3RhZ2VkUmVwb3NpdG9yeUlkcz48ZGVzY3JpcHRpb24+dW5rbm93bjwvZGVzY3JpcHRpb24+PGF1dG9Ecm9wQWZ0ZXJSZWxlYXNlPnRydWU8L2F1dG9Ecm9wQWZ0ZXJSZWxlYXNlPjwvZGF0YT48L3N0YWdpbmdBY3Rpb25SZXF1ZXN0PlxuICogYGBgXG4gKlxuICogRXJyb3I6XG4gKlxuICogYGBgXG4gKiBGYWlsZWQgdG8gcHJvY2VzcyByZXF1ZXN0OiBHb3QgdW5leHBlY3RlZCBYTUwgZWxlbWVudCB3aGVuIHJlYWRpbmcgc3RhZ2VkUmVwb3NpdG9yeUlkczogR290IHVuZXhwZWN0ZWQgZWxlbWVudCBTdGFydEVsZW1lbnQoYSwge1wiXCI6IFwiXCIsIFwieG1sXCI6IFwiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlXCIsIFwieG1sbnNcIjogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3htbG5zL1wifSwgW2NsYXNzIC0+IHN0cmluZy1hcnJheV0pLCBleHBlY3RlZCBvbmUgb2Y6IHN0cmluZ1xuICogYGBgXG4gKlxuICogRG9pbmcgYSBtYW51YWwgc2xpZ2h0bHkgbW9kaWZpZWQgdmVyc2lvbiBvZiB0aGUgYWJvdmUgcmVxdWVzdCBzdWNjZWVkcywgc28gd2UnbGwganVzdCBwcm9jZWVkIHdpdGggZG9pbmdcbiAqIHRoYXQuXG4gKlxuICogVGhlIGVuZHBvaW50IGFsc28gc3VwcG9ydHMgSlNPTiwgd2hpY2ggd2UgcHJlZmVyIG92ZXIgWE1MLlxuICpcbiAqIFRoaXMgZW5kcG9pbnQgd2lsbCBuZXZlciByZXR1cm4gYW4gZXJyb3IsIGV2ZW4gaWYgdGhlIHB1Ymxpc2ggZGlkbid0IGhhcHBlbiBiZWNhdXNlXG4gKiBvZiBkdXBsaWNhdGUgdmVyc2lvbiBwdWJsaXNoaW5nIChub3QgZm9yIHRoZSBsZWdhY3ksIG5vciBmb3IgdGhlIGNvbXBhdGliaWxpdHkgZW5kcG9pbnQpLlxuICpcbiAqIEBzZWUgaHR0cHM6Ly9jZW50cmFsLnNvbmF0eXBlLm9yZy9wdWJsaXNoL3B1Ymxpc2gtcG9ydGFsLW9zc3JoLXN0YWdpbmctYXBpL1xuICogQHNlZSBodHRwczovL3N1cHBvcnQuc29uYXR5cGUuY29tL2hjL2VuLXVzL2FydGljbGVzLzIxMzQ2NTQ0OC1BdXRvbWF0aWNhbGx5LWRyb3BwaW5nLW9sZC1zdGFnaW5nLXJlcG9zaXRvcmllc1xuICovXG5hc3luYyBmdW5jdGlvbiByZWxlYXNlUmVwbyhvcHRpb25zOiB7IHNlcnZlclVybDogc3RyaW5nOyB1c2VybmFtZTogc3RyaW5nOyBwYXNzd29yZDogc3RyaW5nOyByZXBvc2l0b3J5SWQ6IHN0cmluZzsgZGVzY3JpcHRpb24/OiBzdHJpbmcgfSk6IFByb21pc2U8J29rJyB8ICdkdXBsaWNhdGUtdmVyc2lvbic+IHtcbiAgZWNobyhg8J+agCBSZWxlYXNpbmcgcmVwb3NpdG9yeSAke29wdGlvbnMucmVwb3NpdG9yeUlkfSBhdCAke29wdGlvbnMuc2VydmVyVXJsfWApO1xuICBjb25zdCB1cmwgPSBuZXcgVVJMKCdzZXJ2aWNlL2xvY2FsL3N0YWdpbmcvYnVsay9wcm9tb3RlJywgb3B0aW9ucy5zZXJ2ZXJVcmwpO1xuXG4gIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2godXJsLCB7XG4gICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgYm9keTogSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgZGF0YToge1xuICAgICAgICBzdGFnZWRSZXBvc2l0b3J5SWRzOiBbb3B0aW9ucy5yZXBvc2l0b3J5SWRdLFxuICAgICAgICBkZXNjcmlwdGlvbjogb3B0aW9ucy5kZXNjcmlwdGlvbiA/PyAnRGVwbG95bWVudCcsXG4gICAgICAgIGF1dG9Ecm9wQWZ0ZXJSZWxlYXNlOiB0cnVlLFxuICAgICAgfSxcbiAgICB9KSxcbiAgICBoZWFkZXJzOiB7XG4gICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgJ0FjY2VwdCc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICdBdXRob3JpemF0aW9uJzogYEJhc2ljICR7YnRvYShgJHtvcHRpb25zLnVzZXJuYW1lfToke29wdGlvbnMucGFzc3dvcmR9YCl9YCxcbiAgICB9LFxuICB9KTtcblxuICBjb25zdCBib2R5ID0gYXdhaXQgcmVzcG9uc2UudGV4dCgpO1xuXG4gIC8vIEl0J3MgcG9zc2libGUgdGhhdCAoZHVlIHRvIHNvbWUgcmVwbGljYXRpb24gbGF0ZW5jeT8pIHRoZSBpbml0aWFsIFwic3RhZ2VcIiBzdWNjZWVkcyxcbiAgLy8gYnV0IHRoZSBcInJlbGVhc2VcIiBmYWlscywgaWYgd2UgdHJ5IHRvIHB1Ymxpc2ggYW4gYWxyZWFkeS1wdWJsaXNoZWQgdmVyc2lvbiBhZ2Fpbi5cbiAgLy9cbiAgLy8gVW5mb3J0dW5hdGVseSB0aGVyZSBpcyBubyBncmVhdCBlcnJvciBjb2RlIHRvIGRldGVjdCB0aGlzIHJpZ2h0IG5vdywgYnV0IEkndmUgb2JzZXJ2ZWRcbiAgLy8gdGhpcyBlcnJvciB3aGVuIGl0IGhhcHBlbmVkLlxuICAvLyBJIGhhdmUgYSBzdXBwb3J0IHJlcXVlc3Qgb3V0IHRvIFNvbmF0eXBlIGZvciB0aGlzLCB3ZSdsbCBzZWUgaWYgdGhpcyBjaGFuZ2VzIG92ZXIgdGltZS5cbiAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PT0gNDAwICYmIGJvZHkgPT09ICdGYWlsZWQgdG8gcHJvY2VzcyByZXF1ZXN0OiBzZXJ2aWNlIGVycm9yJykge1xuICAgIHJldHVybiAnZHVwbGljYXRlLXZlcnNpb24nO1xuICB9XG5cbiAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgIHRocm93IG5ldyBFcnJvcihgSFRUUCAke3Jlc3BvbnNlLnN0YXR1c30gJHtyZXNwb25zZS5zdGF0dXNUZXh0fTogJHtib2R5fWApO1xuICB9XG5cbiAgY29uc29sZS5sb2coYm9keSk7XG5cbiAgcmV0dXJuICdvayc7XG59XG5cbi8qKlxuICogU2lnbiBhbmQgc3RhZ2Ugb3VyIGFydGlmYWN0cyBpbnRvIGEgbG9jYWwgZGlyZWN0b3J5XG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHNpZ25KYXJzKG1hdmVuOiBNYXZlbiwgcG9tczogc3RyaW5nW10sIHRhcmdldERpcjogc3RyaW5nLCBzZXJ2ZXJJZDogc3RyaW5nLCBrZXk6IFByaXZhdGVLZXkpIHtcbiAgYXdhaXQgdXNpbmcgZ3BnID0gYXdhaXQgaW1wb3J0R3BnS2V5KGtleSk7XG5cbiAgLy8gb24gYSBtYWMsIC0tcGluZW50cnktbW9kZSB0byBcImxvb3BiYWNrXCIgYXJlIHJlcXVpcmVkIGFuZCBJIGNvdWxkbid0IGZpbmQgYVxuICAvLyB3YXkgdG8gZG8gc28gdmlhIC1EZ3BnLmdwZ0FyZ3VtZW50cyBvciB0aGUgc2V0dGluZ3MgZmlsZSwgc28gaGVyZSB3ZSBhcmUuXG4gIGxldCBncGdCaW4gPSAnZ3BnJztcbiAgaWYgKG9zLnBsYXRmb3JtKCkgPT09ICdkYXJ3aW4nKSB7XG4gICAgZ3BnQmluID0gcGF0aC5qb2luKG1hdmVuLndvcmtEaXIsICdwdWJsaWItZ3BnLnNoJyk7XG4gICAgYXdhaXQgZnMud3JpdGVGaWxlKGdwZ0JpbiwgW1xuICAgICAgJyMhL2Jpbi9iYXNoJyxcbiAgICAgICdleGVjIGdwZyAtLXBpbmVudHJ5LW1vZGUgbG9vcGJhY2sgXCJcXCRAXCInLFxuICAgIF0uam9pbignXFxuJyksICd1dGYtOCcpO1xuICAgIGF3YWl0ICRgY2htb2QgK3ggJHtncGdCaW59YDtcbiAgfVxuXG4gIGZvciAoY29uc3QgcG9tIG9mIHBvbXMpIHtcbiAgICBhd2FpdCBtYXZlbi5leGVjKCdncGc6c2lnbi1hbmQtZGVwbG95LWZpbGUnLCB7XG4gICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICd1cmwnOiBgZmlsZTovLyR7dGFyZ2V0RGlyfWAsXG4gICAgICAgICdyZXBvc2l0b3J5SWQnOiBzZXJ2ZXJJZCwgLy8gTW9zdCBsaWtlbHkgbm90IG5lY2Vzc2FyeVxuICAgICAgICAnZ3BnLmhvbWVkaXInOiBncGcuaG9tZSxcbiAgICAgICAgJ2dwZy5rZXluYW1lJzogZ3BnLmtleUlkLFxuICAgICAgICAnZ3BnLmV4ZWN1dGFibGUnOiBncGdCaW4sXG4gICAgICAgICdwb21GaWxlJzogcG9tLFxuICAgICAgICAuLi5qYXJzRnJvbVBvbShwb20pLFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxufVxuXG4vKipcbiAqIEJhc2VkIG9uIHRoZSBwYXRoIG9mIGEgLnBvbSBmaWxlLCByZXR1cm4gdGhlIHBhdGhzIG9mIHRoZSBjb3JyZXNwb25kaW5nIGphcnNcbiAqL1xuZnVuY3Rpb24gamFyc0Zyb21Qb20ocG9tOiBzdHJpbmcpIHtcbiAgcmV0dXJuIHtcbiAgICBmaWxlOiBwb20ucmVwbGFjZSgvXFwucG9tJC8sICcuamFyJyksXG4gICAgc291cmNlczogcG9tLnJlcGxhY2UoL1xcLnBvbSQvLCAnLXNvdXJjZXMuamFyJyksXG4gICAgamF2YWRvYzogcG9tLnJlcGxhY2UoL1xcLnBvbSQvLCAnLWphdmFkb2MuamFyJyksXG4gIH07XG59XG5cbi8qKlxuICogQ3JlYXRlIGEgdGVtcG9yYXJ5IGRpcmVjdG9yeSBhbmQgaW1wb3J0IHRoZSBHUEcga2V5IG1hdGVyaWFsIGludG8gYSBuZXcga2V5Y2hhaW4gdGhlcmVcbiAqL1xuYXN5bmMgZnVuY3Rpb24gaW1wb3J0R3BnS2V5KGtleTogUHJpdmF0ZUtleSkge1xuICAvLyBHbnVQRyB3aWxsIG9jY2FzaW9uYWxseSBiYWlsIG91dCB3aXRoIFwiZ3BnOiA8d2hhdGV2ZXI+IGZhaWxlZDogSW5hcHByb3ByaWF0ZSBpb2N0bCBmb3IgZGV2aWNlXCIsIHRoZSBmb2xsb3dpbmcgYXR0ZW1wdHMgdG8gZml4XG4gIGNvbnN0IGdwZ0hvbWUgPSBhdXRvQ2xlYW5EaXIoKTtcbiAgdHJ5IHtcbiAgICAvLyBJbiBDSSBlbnZpcm9ubWVudHMgdGhlcmUgd2lsbCBiZSBubyB0dHksIGFuZCB3ZSBkb24ndCB3YW50IHRoaXMgdG8gc3RvcCB0aGUgc2NyaXB0LlxuICAgIC8vIFRoZSB2YXJpYWJsZSB3aWxsIGJlIHBvcHVsYXRlZCB3aXRoIGEgbm9uc2Vuc2ljYWwgc3RyaW5nIChcIm5vdCBhIHR0eVwiKSBidXQgdGhhdCBkb2Vzbid0IHNlZW0gdG8gbWF0dGVyLlxuICAgIGNvbnN0IHR0eSA9IChhd2FpdCAkKHsgc3RkaW86IFsnaW5oZXJpdCcsICdwaXBlJywgJ3BpcGUnXSwgbm90aHJvdzogdHJ1ZSB9KWB0dHlgKS5zdGRvdXQ7XG5cbiAgICBsZXQgcHJpdmF0ZUtleUZpbGU7XG4gICAgY29uc3QgdHlwZSA9IGtleS50eXBlO1xuICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgY2FzZSAnZmlsZSc6XG4gICAgICAgIHByaXZhdGVLZXlGaWxlID0ga2V5LmZpbGVOYW1lO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ21hdGVyaWFsJzpcbiAgICAgICAgcHJpdmF0ZUtleUZpbGUgPSBwYXRoLmpvaW4oZ3BnSG9tZS5kaXIsICdwcml2YXRlLnBlbScpO1xuICAgICAgICBhd2FpdCAkYGVjaG8gLWUgJHtrZXkua2V5TWF0ZXJpYWx9ID4gJHtwcml2YXRlS2V5RmlsZX1gO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGFzc2VydE5ldmVyKHR5cGUpO1xuICAgIH1cblxuICAgIGNvbnN0IGVudiA9IHtcbiAgICAgIEdOVVBHSE9NRTogZ3BnSG9tZS5kaXIsXG4gICAgICBHUEdfVFRZOiB0dHksXG4gICAgfTtcblxuICAgIGNvbnN0ICQkID0gJCh7IGVudjogeyAuLi5wcm9jZXNzLmVudiwgLi4uZW52IH0gfSk7XG5cbiAgICBhd2FpdCAkJGBncGcgLS1hbGxvdy1zZWNyZXQta2V5LWltcG9ydCAtLWJhdGNoIC0teWVzIC0tbm8tdHR5IC0taW1wb3J0ICR7cHJpdmF0ZUtleUZpbGV9YDtcbiAgICBjb25zdCBncGdLZXlJZCA9IChhd2FpdCAkJGBncGcgLS1saXN0LWtleXMgLS13aXRoLWNvbG9ucyB8IGdyZXAgcHViIHwgY3V0IC1kOiAtZjVgKS5zdGRvdXQudHJpbSgpO1xuXG4gICAgZWNobyhgZ3BnX2tleV9pZD0ke2dwZ0tleUlkfWApO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGtleUlkOiBncGdLZXlJZCxcbiAgICAgIGVudixcbiAgICAgIGhvbWU6IGdwZ0hvbWUuZGlyLFxuICAgICAgW1N5bWJvbC5hc3luY0Rpc3Bvc2VdOiBhc3luYyAoKSA9PiBncGdIb21lW1N5bWJvbC5hc3luY0Rpc3Bvc2VdKCksXG4gICAgfTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGF3YWl0IGdwZ0hvbWVbU3ltYm9sLmFzeW5jRGlzcG9zZV0oKTtcbiAgICB0aHJvdyBlO1xuICB9XG59XG5cbmNsYXNzIE1hdmVuIHtcbiAgcHJpdmF0ZSByZWFkb25seSBzZXR0aW5nc0ZpbGU6IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihwdWJsaWMgcmVhZG9ubHkgd29ya0Rpcjogc3RyaW5nLCBwcml2YXRlIHJlYWRvbmx5IHZlcmJvc2U6IGJvb2xlYW4sIHB1YmxpYyByZWFkb25seSBkcnlSdW46IGJvb2xlYW4pIHtcbiAgICB0aGlzLnNldHRpbmdzRmlsZSA9IHBhdGguam9pbih3b3JrRGlyLCAnbXZuLXNldHRpbmdzLnhtbCcpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIHNldHRpbmdzLnhtbCBmaWxlIHdpdGggdGhlIHVzZXIrcGFzc3dvcmQgZm9yIG1hdmVuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgd3JpdGVTZXR0aW5nc0ZpbGUoc2VydmVySWQ6IHN0cmluZywgc2lnbmVkQXJ0aWZhY3RzOiBib29sZWFuKSB7XG4gICAgY29uc3QgbGluZXMgPSBbXTtcblxuICAgIGxpbmVzLnB1c2goXG4gICAgICAnPD94bWwgdmVyc2lvbj1cIjEuMFwiIGVuY29kaW5nPVwiVVRGLThcIiA/PicsXG4gICAgICAnPHNldHRpbmdzIHhtbG5zPVwiaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvU0VUVElOR1MvMS4wLjBcIicsXG4gICAgICAnICAgICAgICB4bWxuczp4c2k9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZVwiJyxcbiAgICAgICcgICAgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj1cImh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1NFVFRJTkdTLzEuMC4wJyxcbiAgICAgICcgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHR0cDovL21hdmVuLmFwYWNoZS5vcmcveHNkL3NldHRpbmdzLTEuMC4wLnhzZFwiPicsXG4gICAgICAnICA8c2VydmVycz4nLFxuICAgICAgJyAgICA8c2VydmVyPicsXG4gICAgICBgICAgICAgPGlkPiR7c2VydmVySWR9PC9pZD5gLFxuICAgICAgLy8gTWF2ZW4gd2lsbCByZWFkIHRoZXNlLCBzdXJyb3VuZGluZyBjb2RlIGhhcyBhbHJlYWR5IG1hZGUgc3VyZSB0aGV5IGFyZSBzZXRcbiAgICAgICcgICAgICA8dXNlcm5hbWU+JHtlbnYuTUFWRU5fVVNFUk5BTUV9PC91c2VybmFtZT4nLFxuICAgICAgJyAgICAgIDxwYXNzd29yZD4ke2Vudi5NQVZFTl9QQVNTV09SRH08L3Bhc3N3b3JkPicsXG4gICAgICAnICAgIDwvc2VydmVyPicsXG4gICAgKTtcblxuICAgIGlmIChzaWduZWRBcnRpZmFjdHMpIHtcbiAgICAgIGxpbmVzLnB1c2goXG4gICAgICAgICcgICAgPHNlcnZlcj4nLFxuICAgICAgICAnICAgICAgPGlkPmdwZy5wYXNzcGhyYXNlPC9pZD4nLFxuICAgICAgICAvLyBNYXZlbiB3aWxsIHJlYWQgdGhlc2UsIHN1cnJvdW5kaW5nIGNvZGUgaGFzIGFscmVhZHkgbWFkZSBzdXJlIHRoZXkgYXJlIHNldFxuICAgICAgICAnICAgICAgPHBhc3NwaHJhc2U+JHtlbnYuTUFWRU5fR1BHX1BSSVZBVEVfS0VZX1BBU1NQSFJBU0V9PC9wYXNzcGhyYXNlPicsXG4gICAgICAgICcgICAgPC9zZXJ2ZXI+JyxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgbGluZXMucHVzaChcbiAgICAgICcgIDwvc2VydmVycz4nLFxuICAgICAgJzwvc2V0dGluZ3M+JyxcbiAgICApO1xuXG4gICAgYXdhaXQgZnMud3JpdGVGaWxlKHRoaXMuc2V0dGluZ3NGaWxlLCBsaW5lcy5qb2luKCdcXG4nKSwgJ3V0Zi04Jyk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZXhlYyhtb2pvOiBzdHJpbmcsIG9wdGlvbnM6IE1hdmVuRXhlY09wdGlvbnMpOiBQcm9taXNlPFByb2Nlc3NPdXRwdXQgfCB1bmRlZmluZWQ+IHtcbiAgICBjb25zdCBhcmdzID0gW1xuICAgICAgYC0tc2V0dGluZ3M9JHt0aGlzLnNldHRpbmdzRmlsZX1gLFxuICAgICAgLi4uKG9wdGlvbnMudmVyYm9zZSA/PyB0aGlzLnZlcmJvc2UgPyBbJy1YJ10gOiBbXSksXG4gICAgICBtb2pvLFxuICAgICAgLi4uT2JqZWN0LmVudHJpZXMob3B0aW9ucy5wcm9wZXJ0aWVzKS5tYXAoKFtrLCB2XSkgPT4gYC1EJHtrfT0ke3Z9YCksXG4gICAgXTtcblxuICAgIGlmICh0aGlzLmRyeVJ1bikge1xuICAgICAgZWNobyhgW0RSWS1SVU5dIG12biAke2FyZ3MubWFwKHF1b3RlKS5qb2luKCcgJyl9YCk7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBjb25zdCBlbnYgPSB7XG4gICAgICAuLi5wcm9jZXNzLmVudixcbiAgICAgIEpES19KQVZBX09QVElPTlM6IFtcbiAgICAgICAgLy8gSWYgd2UgZG9uJ3QgYWRkIHRoaXMsIHdlJ2xsIGdldCBhbiBlcnJvciBsaWtlIHRoZSBmb2xsb3dpbmcgZHVyaW5nIHRoZSBuZXh1cy1zdGFnaW5nLW1hdmVuLXBsdWdpbjpyYy1yZWxlYXNlIG1vam8uXG4gICAgICAgIC8vIERvbid0IGtub3cgd2hlcmUgdGhpcyBpcyBjb21pbmcgZnJvbSBhbGwgb2YgYSBzdWRkZW4uXG4gICAgICAgIC8vXG4gICAgICAgIC8vIFtFUlJPUl0gbWVzc2FnZSAgICAgICAgICAgICA6IE5vIGNvbnZlcnRlciBhdmFpbGFibGVcbiAgICAgICAgLy8gW0VSUk9SXSB0eXBlICAgICAgICAgICAgICAgIDogamF2YS51dGlsLkFycmF5cyRBcnJheUxpc3RcbiAgICAgICAgLy8gW0VSUk9SXSBjb252ZXJ0ZXIgICAgICAgICAgIDogY29tLnRob3VnaHR3b3Jrcy54c3RyZWFtLmNvbnZlcnRlcnMucmVmbGVjdGlvbi5SZWZsZWN0aW9uQ29udmVydGVyXG4gICAgICAgIC8vIFtFUlJPUl0gbWVzc2FnZVsxXSAgICAgICAgICA6IFVuYWJsZSB0byBtYWtlIGZpZWxkIHByb3RlY3RlZCB0cmFuc2llbnQgaW50IGphdmEudXRpbC5BYnN0cmFjdExpc3QubW9kQ291bnQgYWNjZXNzaWJsZTogbW9kdWxlIGphdmEuYmFzZSBkb2VzIG5vdCBcIm9wZW5zIGphdmEudXRpbFwiIHRvIHVubmFtZWQgbW9kdWxlIEA3YzhkNTMxMlxuICAgICAgICAnLS1hZGQtb3BlbnM9amF2YS5iYXNlL2phdmEudXRpbD1BTEwtVU5OQU1FRCcsXG4gICAgICAgICctLWFkZC1vcGVucz1qYXZhLmJhc2UvamF2YS5sYW5nPUFMTC1VTk5BTUVEJyxcbiAgICAgICAgJy0tYWRkLW9wZW5zPWphdmEuYmFzZS9qYXZhLmxhbmcuaW52b2tlPUFMTC1VTk5BTUVEJyxcbiAgICAgIF0uam9pbignICcpLFxuICAgIH07XG5cbiAgICByZXR1cm4gJCh7IHZlcmJvc2U6IHRydWUsIG5vdGhyb3c6IG9wdGlvbnMubm90aHJvdywgZW52IH0pYG12biAke2FyZ3N9YDtcbiAgfVxufVxuXG5pbnRlcmZhY2UgTWF2ZW5FeGVjT3B0aW9ucyB7XG4gIHByb3BlcnRpZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gIG5vdGhyb3c/OiBib29sZWFuO1xuICB2ZXJib3NlPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBBIGV4cGVjdGVkIGVycm9yIHRoYXQgZG9lc24ndCBuZWVkIGEgc3RhY2sgdHJhY2VcbiAqL1xuY2xhc3MgU2ltcGxlRXJyb3IgZXh0ZW5kcyBFcnJvciB7IH1cblxuLyoqXG4gKiBSZXF1aXJlIGFuIGVudmlyb25tZW50IHZhcmlhYmxlXG4gKi9cbmZ1bmN0aW9uIGVudlZhcihuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCByZXQgPSBwcm9jZXNzLmVudltuYW1lXTtcbiAgaWYgKCFyZXQpIHtcbiAgICB0aHJvdyBuZXcgU2ltcGxlRXJyb3IoYCR7bmFtZX0gaXMgcmVxdWlyZWRgKTtcbiAgfVxuICByZXR1cm4gcmV0O1xufVxuXG4vKipcbiAqIEEgdGVtcG9yYXJ5IGRpcmVjdG9yeSB0aGF0IGNsZWFucyB3aGVuIGl0IGdvZXMgb3V0IG9mIHNjb3BlXG4gKlxuICogVXNlIHdpdGggYHVzaW5nYC4gQ291bGQgaGF2ZSBiZWVuIGFzeW5jIGJ1dCBpdCdzIGRlcGVuZGluZ1xuICogb24gYW4gYWxyZWFkeS1zeW5jIEFQSSwgc28gd2h5IG5vdCBzeW5jP1xuICovXG5leHBvcnQgZnVuY3Rpb24gYXV0b0NsZWFuRGlyKCkge1xuICBjb25zdCBkaXIgPSB0bXBkaXIoKTtcbiAgcmV0dXJuIHtcbiAgICBkaXIsXG4gICAgW1N5bWJvbC5hc3luY0Rpc3Bvc2VdOiBhc3luYyAoKSA9PiB7XG4gICAgICBhd2FpdCBmcy5ybShkaXIsIHsgZm9yY2U6IHRydWUsIHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICB9LFxuICB9O1xufVxuXG5mdW5jdGlvbiBhc3NlcnROZXZlcih2YWx1ZTogbmV2ZXIpIHtcbiAgdGhyb3cgbmV3IEVycm9yKCdVbmV4cGVjdGVkIHZhbHVlOiAnICsgdmFsdWUpO1xufVxuXG4vLyBBICd6eCcgcHJpbWVyXG4vL1xuLy8gLSBCeSBkZWZhdWx0OiBzdGRlcnIgaXMgcHJpbnRlZCB0byB0aGUgdGVybWluYWwgaWYgaXQgaXMgY2FwdHVyZWQuXG4vLyAtIHsgdmVyYm9zZTogdHJ1ZSB9OiBwcmludCB0aGUgY29tbWFuZCwgc3Rkb3V0IGFuZCBzdGRlcnIgdG8gdGhlIHRlcm1pbmFsXG4vLyAtIHsgcXVpZXQ6IHRydWUgfTogcHJpbnQgbmVpdGhlciBzdGRvdXQgbm9yIHN0ZGVyclxuLy9cbi8vIC50ZXh0KCk6IHJldHVybiBldmVyeXRoaW5nIHRoYXQncyBjYXB0dXJlZCAoc3RkZXJyIGFuZCBzdGRvdXQgdG9nZXRoZXIgaWYgc3RkZXJyIGlzIGNhcHR1cmVkKVxuXG5tYWluKCkuY2F0Y2goZSA9PiB7XG4gIGlmIChlIGluc3RhbmNlb2YgUHJvY2Vzc091dHB1dCkge1xuICAgIGVjaG8oYOKdjCBTdWJwcm9jZXNzIGZhaWxlZCB3aXRoIGV4aXQgY29kZSAke2UuZXhpdENvZGV9YCk7XG4gIH0gZWxzZSBpZiAoZSBpbnN0YW5jZW9mIFNpbXBsZUVycm9yKSB7XG4gICAgZWNobygn4p2MJywgZS5tZXNzYWdlKTtcbiAgfSBlbHNlIHtcbiAgICBjb25zb2xlLmVycm9yKGUpO1xuICB9XG4gIHByb2Nlc3MuZXhpdENvZGUgPSAxO1xufSk7XG4iXX0=
|
package/package.json
CHANGED