@nlabs/lex 1.54.2 → 1.55.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/.github/copilot-instructions.md +4 -4
- package/README.md +25 -25
- package/__mocks__/LexConfig.js +9 -9
- package/__mocks__/boxen.js +1 -1
- package/__mocks__/build.js +6 -6
- package/__mocks__/compare-versions.js +1 -1
- package/__mocks__/compile.js +2 -2
- package/__mocks__/execa.js +2 -2
- package/__mocks__/latest-version.js +1 -1
- package/__mocks__/ora.js +13 -13
- package/__mocks__/versions.js +4 -4
- package/config.json +2 -2
- package/examples/lex.config.js +4 -4
- package/lex.config.js +4 -4
- package/lib/Button.stories.js +1 -1
- package/lib/LexConfig.d.ts +2 -9
- package/lib/LexConfig.js +2 -2
- package/lib/commands/ai/ai.js +2 -2
- package/lib/commands/clean/clean.js +1 -1
- package/lib/commands/config/config.js +14 -8
- package/lib/commands/copy/copy.js +1 -1
- package/lib/commands/create/create.js +1 -1
- package/lib/commands/dev/dev.js +1 -1
- package/lib/commands/init/init.js +1 -1
- package/lib/commands/link/link.js +1 -1
- package/lib/commands/lint/lint.js +1 -1
- package/lib/commands/migrate/migrate.js +2 -2
- package/lib/commands/serverless/serverless.js +1 -1
- package/lib/commands/storybook/storybook.js +1 -1
- package/lib/commands/test/test.d.ts +2 -0
- package/lib/commands/test/test.js +130 -117
- package/lib/commands/versions/versions.d.ts +1 -1
- package/lib/commands/versions/versions.js +3 -3
- package/lib/create/changelog.js +1 -1
- package/lib/lex.js +2 -2
- package/lib/test-react/index.d.ts +1 -1
- package/lib/test-react/index.js +2 -2
- package/lib/types.d.ts +1 -1
- package/lib/types.js +1 -1
- package/lib/utils/aiService.js +1 -1
- package/lib/utils/app.js +2 -2
- package/lib/vitest.d.js +3 -0
- package/package.json +41 -53
- package/resolver.cjs +11 -9
- package/tsconfig/reactNative.json +3 -2
- package/tsconfig.build.json +3 -3
- package/tsconfig.json +4 -3
- package/tsconfig.lint.json +3 -2
- package/tsconfig.template.json +3 -2
- package/tsconfig.test.json +4 -3
- package/vitest.config.d.mts +2 -0
- package/vitest.config.mjs +61 -0
- package/vitest.config.template.cjs +66 -0
- package/vitest.setup.template.js +19 -0
- package/jest.config.d.mts +0 -50
- package/jest.config.mjs +0 -72
- package/jest.config.template.cjs +0 -71
- package/jest.setup.template.js +0 -18
|
@@ -820,4 +820,4 @@ export const serverless = async (cmd, callback = ()=>({}))=>{
|
|
|
820
820
|
}
|
|
821
821
|
};
|
|
822
822
|
|
|
823
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21tYW5kcy9zZXJ2ZXJsZXNzL3NlcnZlcmxlc3MudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTgtUHJlc2VudCwgTml0cm9nZW4gTGFicywgSW5jLlxuICogQ29weXJpZ2h0cyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuIFNlZSB0aGUgYWNjb21wYW55aW5nIExJQ0VOU0UgZmlsZSBmb3IgdGVybXMuXG4gKi9cbmltcG9ydCBib3hlbiBmcm9tICdib3hlbic7XG5pbXBvcnQgY2hhbGsgZnJvbSAnY2hhbGsnO1xuaW1wb3J0IGV4cHJlc3MgZnJvbSAnZXhwcmVzcyc7XG5pbXBvcnQge3JlYWRGaWxlU3luYywgZXhpc3RzU3luYywgbWtkaXJTeW5jLCB3cml0ZUZpbGVTeW5jfSBmcm9tICdmcyc7XG5pbXBvcnQge2hvbWVkaXJ9IGZyb20gJ29zJztcbmltcG9ydCB7cmVzb2x2ZSBhcyBwYXRoUmVzb2x2ZSwgam9pbiwgaXNBYnNvbHV0ZX0gZnJvbSAncGF0aCc7XG5pbXBvcnQge3BhdGhUb0ZpbGVVUkx9IGZyb20gJ3VybCc7XG5pbXBvcnQge1dlYlNvY2tldFNlcnZlcn0gZnJvbSAnd3MnO1xuXG5pbXBvcnQge0xleENvbmZpZywgZ2V0UGFja2FnZURpcn0gZnJvbSAnLi4vLi4vTGV4Q29uZmlnLmpzJztcbmltcG9ydCB7Y3JlYXRlU3Bpbm5lciwgcmVtb3ZlRmlsZXN9IGZyb20gJy4uLy4uL3V0aWxzL2FwcC5qcyc7XG5pbXBvcnQge2xvZ30gZnJvbSAnLi4vLi4vdXRpbHMvbG9nLmpzJztcblxuZXhwb3J0IGludGVyZmFjZSBTZXJ2ZXJsZXNzT3B0aW9ucyB7XG4gIHJlYWRvbmx5IGNsaU5hbWU/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IGNvbmZpZz86IHN0cmluZztcbiAgcmVhZG9ubHkgZGVidWc/OiBib29sZWFuO1xuICByZWFkb25seSBob3N0Pzogc3RyaW5nO1xuICByZWFkb25seSBodHRwUG9ydD86IG51bWJlcjtcbiAgcmVhZG9ubHkgaHR0cHNQb3J0PzogbnVtYmVyO1xuICByZWFkb25seSBxdWlldD86IGJvb2xlYW47XG4gIHJlYWRvbmx5IHJlbW92ZT86IGJvb2xlYW47XG4gIHJlYWRvbmx5IHRlc3Q/OiBib29sZWFuO1xuICByZWFkb25seSB1c2VQdWJsaWNJcD86IGJvb2xlYW47XG4gIHJlYWRvbmx5IHZhcmlhYmxlcz86IHN0cmluZztcbiAgcmVhZG9ubHkgd3NQb3J0PzogbnVtYmVyO1xufVxuXG5leHBvcnQgdHlwZSBTZXJ2ZXJsZXNzQ2FsbGJhY2sgPSAoc3RhdHVzOiBudW1iZXIpPT4gdm9pZDtcblxuaW50ZXJmYWNlIFB1YmxpY0lwQ2FjaGUge1xuICBpcDogc3RyaW5nO1xuICB0aW1lc3RhbXA6IG51bWJlcjtcbn1cblxuaW50ZXJmYWNlIFNlcnZlcmxlc3NIYW5kbGVyIHtcbiAgcmVhZG9ubHkgaGFuZGxlcjogc3RyaW5nO1xuICByZWFkb25seSBldmVudHM/OiBBcnJheTx7XG4gICAgcmVhZG9ubHkgaHR0cD86IHtcbiAgICAgIHJlYWRvbmx5IGNvcnM/OiBib29sZWFuO1xuICAgICAgcmVhZG9ubHkgbWV0aG9kPzogc3RyaW5nO1xuICAgICAgcmVhZG9ubHkgcGF0aD86IHN0cmluZztcbiAgICB9O1xuICAgIHJlYWRvbmx5IHdlYnNvY2tldD86IHtcbiAgICAgIHJlYWRvbmx5IHJvdXRlPzogc3RyaW5nO1xuICAgIH07XG4gIH0+O1xufVxuXG5pbnRlcmZhY2UgU2VydmVybGVzc0NvbmZpZyB7XG4gIHJlYWRvbmx5IGN1c3RvbT86IHtcbiAgICByZWFkb25seSAnc2VydmVybGVzcy1vZmZsaW5lJz86IHtcbiAgICAgIHJlYWRvbmx5IGNvcnM/OiBib29sZWFuO1xuICAgICAgcmVhZG9ubHkgaG9zdD86IHN0cmluZztcbiAgICAgIHJlYWRvbmx5IGh0dHBQb3J0PzogbnVtYmVyO1xuICAgICAgcmVhZG9ubHkgaHR0cHNQb3J0PzogbnVtYmVyO1xuICAgICAgcmVhZG9ubHkgd3NQb3J0PzogbnVtYmVyO1xuICAgIH07XG4gIH07XG4gIHJlYWRvbmx5IGZ1bmN0aW9ucz86IFJlY29yZDxzdHJpbmcsIFNlcnZlcmxlc3NIYW5kbGVyPjtcbn1cblxuY29uc3QgZ2V0Q2FjaGVEaXIgPSAoKTogc3RyaW5nID0+IHtcbiAgY29uc3QgY2FjaGVEaXIgPSBqb2luKGhvbWVkaXIoKSwgJy5sZXgtY2FjaGUnKTtcbiAgaWYoIWV4aXN0c1N5bmMoY2FjaGVEaXIpKSB7XG4gICAgbWtkaXJTeW5jKGNhY2hlRGlyLCB7cmVjdXJzaXZlOiB0cnVlfSk7XG4gIH1cbiAgcmV0dXJuIGNhY2hlRGlyO1xufTtcblxuY29uc3QgZ2V0Q2FjaGVQYXRoID0gKCk6IHN0cmluZyA9PiBqb2luKGdldENhY2hlRGlyKCksICdwdWJsaWMtaXAuanNvbicpO1xuXG5jb25zdCByZWFkUHVibGljSXBDYWNoZSA9ICgpOiBQdWJsaWNJcENhY2hlIHwgbnVsbCA9PiB7XG4gIGNvbnN0IGNhY2hlUGF0aCA9IGdldENhY2hlUGF0aCgpO1xuICBpZighZXhpc3RzU3luYyhjYWNoZVBhdGgpKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICB0cnkge1xuICAgIGNvbnN0IGNhY2hlRGF0YSA9IHJlYWRGaWxlU3luYyhjYWNoZVBhdGgsICd1dGY4Jyk7XG4gICAgY29uc3QgY2FjaGU6IFB1YmxpY0lwQ2FjaGUgPSBKU09OLnBhcnNlKGNhY2hlRGF0YSk7XG5cbiAgICAvLyBDaGVjayBpZiBjYWNoZSBpcyBvbGRlciB0aGFuIDEgd2Vla1xuICAgIGNvbnN0IG9uZVdlZWtNcyA9IDcgKiAyNCAqIDYwICogNjAgKiAxMDAwO1xuICAgIGlmKERhdGUubm93KCkgLSBjYWNoZS50aW1lc3RhbXAgPiBvbmVXZWVrTXMpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiBjYWNoZTtcbiAgfSBjYXRjaHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufTtcblxuY29uc3Qgd3JpdGVQdWJsaWNJcENhY2hlID0gKGlwOiBzdHJpbmcpOiB2b2lkID0+IHtcbiAgY29uc3QgY2FjaGVQYXRoID0gZ2V0Q2FjaGVQYXRoKCk7XG4gIGNvbnN0IGNhY2hlOiBQdWJsaWNJcENhY2hlID0ge1xuICAgIGlwLFxuICAgIHRpbWVzdGFtcDogRGF0ZS5ub3coKVxuICB9O1xuICB3cml0ZUZpbGVTeW5jKGNhY2hlUGF0aCwgSlNPTi5zdHJpbmdpZnkoY2FjaGUsIG51bGwsIDIpKTtcbn07XG5cbmNvbnN0IGZldGNoUHVibGljSXAgPSAoZm9yY2VSZWZyZXNoOiBib29sZWFuID0gZmFsc2UpOiBQcm9taXNlPHN0cmluZyB8IHVuZGVmaW5lZD4gPT4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgaWYoIWZvcmNlUmVmcmVzaCkge1xuICAgIGNvbnN0IGNhY2hlZCA9IHJlYWRQdWJsaWNJcENhY2hlKCk7XG4gICAgaWYoY2FjaGVkKSB7XG4gICAgICByZXNvbHZlKGNhY2hlZC5pcCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9XG5cbiAgLy8gVXNlIGZldGNoIGluc3RlYWQgb2YgaHR0cHNcbiAgZmV0Y2goJ2h0dHBzOi8vYXBpLmlwaWZ5Lm9yZycpXG4gICAgLnRoZW4oKHJlcykgPT4gcmVzLnRleHQoKSlcbiAgICAudGhlbigoZGF0YSkgPT4ge1xuICAgICAgY29uc3QgaXAgPSBkYXRhLnRyaW0oKTtcbiAgICAgIGlmKGlwKSB7XG4gICAgICAgIHdyaXRlUHVibGljSXBDYWNoZShpcCk7XG4gICAgICB9XG4gICAgICByZXNvbHZlKGlwKTtcbiAgICB9KVxuICAgIC5jYXRjaCgoKSA9PiByZXNvbHZlKHVuZGVmaW5lZCkpO1xufSk7XG5cbmNvbnN0IGRpc3BsYXlTZXJ2ZXJTdGF0dXMgPSAoXG4gIGh0dHBQb3J0OiBudW1iZXIsXG4gIGh0dHBzUG9ydDogbnVtYmVyLFxuICB3c1BvcnQ6IG51bWJlcixcbiAgaG9zdDogc3RyaW5nLFxuICBxdWlldDogYm9vbGVhbixcbiAgcHVibGljSXA/OiBzdHJpbmdcbikgPT4ge1xuICBpZihxdWlldCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IGh0dHBVcmwgPSBgaHR0cDovLyR7aG9zdH06JHtodHRwUG9ydH1gO1xuICBjb25zdCBodHRwc1VybCA9IGBodHRwczovLyR7aG9zdH06JHtodHRwc1BvcnR9YDtcbiAgY29uc3Qgd3NVcmwgPSBgd3M6Ly8ke2hvc3R9OiR7d3NQb3J0fWA7XG4gIGNvbnN0IHdzc1VybCA9IGB3c3M6Ly8ke2hvc3R9OiR7d3NQb3J0fWA7XG5cbiAgbGV0IHVybExpbmVzID0gYCR7Y2hhbGsuZ3JlZW4oJ0hUVFA6Jyl9ICAgICAgJHtjaGFsay51bmRlcmxpbmUoaHR0cFVybCl9XFxuYDtcbiAgdXJsTGluZXMgKz0gYCR7Y2hhbGsuZ3JlZW4oJ0hUVFBTOicpfSAgICAgJHtjaGFsay51bmRlcmxpbmUoaHR0cHNVcmwpfVxcbmA7XG4gIHVybExpbmVzICs9IGAke2NoYWxrLmdyZWVuKCdXZWJTb2NrZXQ6Jyl9ICR7Y2hhbGsudW5kZXJsaW5lKHdzVXJsKX1cXG5gO1xuICB1cmxMaW5lcyArPSBgJHtjaGFsay5ncmVlbignV1NTOicpfSAgICAgICAke2NoYWxrLnVuZGVybGluZSh3c3NVcmwpfVxcbmA7XG5cbiAgaWYocHVibGljSXApIHtcbiAgICB1cmxMaW5lcyArPSBgXFxuJHtjaGFsay5ncmVlbignUHVibGljOicpfSAgICAke2NoYWxrLnVuZGVybGluZShgaHR0cDovLyR7cHVibGljSXB9OiR7aHR0cFBvcnR9YCl9XFxuYDtcbiAgfVxuXG4gIGNvbnN0IHN0YXR1c0JveCA9IGJveGVuKFxuICAgIGAke2NoYWxrLmN5YW4uYm9sZCgn8J+agCBTZXJ2ZXJsZXNzIERldmVsb3BtZW50IFNlcnZlciBSdW5uaW5nJyl9XFxuXFxuJHt1cmxMaW5lc31cXG5gICtcbiAgICBgJHtjaGFsay55ZWxsb3coJ1ByZXNzIEN0cmwrQyB0byBzdG9wIHRoZSBzZXJ2ZXInKX1gLFxuICAgIHtcbiAgICAgIGJhY2tncm91bmRDb2xvcjogJyMxYTFhMWEnLFxuICAgICAgYm9yZGVyQ29sb3I6ICdjeWFuJyxcbiAgICAgIGJvcmRlclN0eWxlOiAncm91bmQnLFxuICAgICAgbWFyZ2luOiAxLFxuICAgICAgcGFkZGluZzogMVxuICAgIH1cbiAgKTtcblxuICBjb25zb2xlLmxvZyhgXFxuJHtzdGF0dXNCb3h9XFxuYCk7XG59O1xuXG5jb25zdCBsb2FkSGFuZGxlciA9IGFzeW5jIChoYW5kbGVyUGF0aDogc3RyaW5nLCBvdXRwdXREaXI6IHN0cmluZykgPT4ge1xuICB0cnkge1xuICAgIGNvbnNvbGUubG9nKGBbU2VydmVybGVzc10gUGFyc2luZyBoYW5kbGVyIHBhdGg6ICR7aGFuZGxlclBhdGh9YCk7XG5cbiAgICAvLyBQYXJzZSBBV1MgTGFtYmRhIGhhbmRsZXIgZm9ybWF0OiBcInBhdGgvdG8vZmlsZS5leHBvcnROYW1lXCIgb3IgXCJmaWxlLmV4cG9ydE5hbWVcIlxuICAgIC8vIEV4YW1wbGVzOiBcImluZGV4LmhhbmRsZXJcIiwgXCJoYW5kbGVycy9hcGkuaGFuZGxlclwiLCBcInNyYy9pbmRleC5kZWZhdWx0XCJcbiAgICBjb25zdCBoYW5kbGVyUGFydHMgPSBoYW5kbGVyUGF0aC5zcGxpdCgnLicpO1xuICAgIGNvbnNvbGUubG9nKCdbU2VydmVybGVzc10gSGFuZGxlciBwYXJ0cyBhZnRlciBzcGxpdDonLCBoYW5kbGVyUGFydHMpO1xuXG4gICAgbGV0IGZpbGVQYXRoOiBzdHJpbmc7XG4gICAgbGV0IGV4cG9ydE5hbWU6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuXG4gICAgaWYoaGFuZGxlclBhcnRzLmxlbmd0aCA+IDEpIHtcbiAgICAgIC8vIEFXUyBMYW1iZGEgZm9ybWF0OiBcImZpbGUuZXhwb3J0TmFtZVwiXG4gICAgICAvLyBUYWtlIHRoZSBsYXN0IHBhcnQgYXMgZXhwb3J0IG5hbWUsIHJlc3QgYXMgZmlsZSBwYXRoXG4gICAgICAvLyBIYW5kbGUgY2FzZXMgbGlrZSBcImluZGV4LmhhbmRsZXJcIiAtPiBmaWxlOiBcImluZGV4XCIsIGV4cG9ydDogXCJoYW5kbGVyXCJcbiAgICAgIC8vIE9yIFwiaGFuZGxlcnMvYXBpLmhhbmRsZXJcIiAtPiBmaWxlOiBcImhhbmRsZXJzL2FwaVwiLCBleHBvcnQ6IFwiaGFuZGxlclwiXG4gICAgICBleHBvcnROYW1lID0gaGFuZGxlclBhcnRzW2hhbmRsZXJQYXJ0cy5sZW5ndGggLSAxXSB8fCBudWxsO1xuICAgICAgZmlsZVBhdGggPSBoYW5kbGVyUGFydHMuc2xpY2UoMCwgLTEpLmpvaW4oJy4nKTtcbiAgICAgIGNvbnNvbGUubG9nKGBbU2VydmVybGVzc10gUGFyc2VkIEFXUyBMYW1iZGEgZm9ybWF0IC0gZmlsZVBhdGg6IFwiJHtmaWxlUGF0aH1cIiwgZXhwb3J0TmFtZTogXCIke2V4cG9ydE5hbWV9XCJgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gU2ltcGxlIGZvcm1hdDoganVzdCB0aGUgZmlsZSBwYXRoXG4gICAgICBmaWxlUGF0aCA9IGhhbmRsZXJQYXRoO1xuICAgICAgY29uc29sZS5sb2coYFtTZXJ2ZXJsZXNzXSBTaW1wbGUgZm9ybWF0IC0gZmlsZVBhdGg6IFwiJHtmaWxlUGF0aH1cImApO1xuICAgIH1cblxuICAgIC8vIEVuc3VyZSBmaWxlUGF0aCBkb2Vzbid0IGhhdmUgdGhlIGV4cG9ydCBuYW1lIGluIGl0XG4gICAgaWYoZmlsZVBhdGguaW5jbHVkZXMoJy5oYW5kbGVyJykgfHwgZmlsZVBhdGguaW5jbHVkZXMoJy5kZWZhdWx0JykpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoYFtTZXJ2ZXJsZXNzXSBXQVJOSU5HOiBmaWxlUGF0aCBzdGlsbCBjb250YWlucyBleHBvcnQgbmFtZSEgZmlsZVBhdGg6IFwiJHtmaWxlUGF0aH1cImApO1xuICAgICAgLy8gVHJ5IHRvIGZpeCBpdCAtIHJlbW92ZSB0aGUgbGFzdCBwYXJ0IGlmIGl0IGxvb2tzIGxpa2UgYW4gZXhwb3J0IG5hbWVcbiAgICAgIGNvbnN0IHBhdGhQYXJ0cyA9IGZpbGVQYXRoLnNwbGl0KCcuJyk7XG4gICAgICBpZihwYXRoUGFydHMubGVuZ3RoID4gMSkge1xuICAgICAgICBjb25zdCBsYXN0UGFydCA9IHBhdGhQYXJ0c1twYXRoUGFydHMubGVuZ3RoIC0gMV07XG4gICAgICAgIGlmKFsnaGFuZGxlcicsICdkZWZhdWx0JywgJ2luZGV4J10uaW5jbHVkZXMobGFzdFBhcnQpICYmICFleHBvcnROYW1lKSB7XG4gICAgICAgICAgZXhwb3J0TmFtZSA9IGxhc3RQYXJ0O1xuICAgICAgICAgIGZpbGVQYXRoID0gcGF0aFBhcnRzLnNsaWNlKDAsIC0xKS5qb2luKCcuJyk7XG4gICAgICAgICAgY29uc29sZS5sb2coYFtTZXJ2ZXJsZXNzXSBGaXhlZCAtIGZpbGVQYXRoOiBcIiR7ZmlsZVBhdGh9XCIsIGV4cG9ydE5hbWU6IFwiJHtleHBvcnROYW1lfVwiYCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBIYW5kbGUgYm90aCByZWxhdGl2ZSBwYXRocyBhbmQgYWJzb2x1dGUgcGF0aHNcbiAgICBsZXQgZnVsbFBhdGg6IHN0cmluZztcbiAgICBpZihpc0Fic29sdXRlKGZpbGVQYXRoKSkge1xuICAgICAgZnVsbFBhdGggPSBmaWxlUGF0aDtcbiAgICB9IGVsc2Uge1xuICAgICAgZnVsbFBhdGggPSBwYXRoUmVzb2x2ZShvdXRwdXREaXIsIGZpbGVQYXRoKTtcbiAgICB9XG4gICAgY29uc29sZS5sb2coYFtTZXJ2ZXJsZXNzXSBSZXNvbHZlZCBmdWxsUGF0aCAoYmVmb3JlIGV4dGVuc2lvbnMpOiAke2Z1bGxQYXRofWApO1xuXG4gICAgLy8gVHJ5IGRpZmZlcmVudCBleHRlbnNpb25zIGlmIGZpbGUgZG9lc24ndCBleGlzdFxuICAgIGlmKCFleGlzdHNTeW5jKGZ1bGxQYXRoKSkge1xuICAgICAgY29uc3QgZXh0ZW5zaW9ucyA9IFsnLmpzJywgJy5tanMnLCAnLmNqcyddO1xuICAgICAgY29uc3QgcGF0aFdpdGhvdXRFeHQgPSBmdWxsUGF0aC5yZXBsYWNlKC9cXC4oanN8bWpzfGNqcykkLywgJycpO1xuICAgICAgY29uc29sZS5sb2coYFtTZXJ2ZXJsZXNzXSBUcnlpbmcgZXh0ZW5zaW9ucy4gQmFzZSBwYXRoOiAke3BhdGhXaXRob3V0RXh0fWApO1xuICAgICAgZm9yKGNvbnN0IGV4dCBvZiBleHRlbnNpb25zKSB7XG4gICAgICAgIGNvbnN0IGNhbmRpZGF0ZVBhdGggPSBwYXRoV2l0aG91dEV4dCArIGV4dDtcbiAgICAgICAgY29uc29sZS5sb2coYFtTZXJ2ZXJsZXNzXSBDaGVja2luZzogJHtjYW5kaWRhdGVQYXRofSAoZXhpc3RzOiAke2V4aXN0c1N5bmMoY2FuZGlkYXRlUGF0aCl9KWApO1xuICAgICAgICBpZihleGlzdHNTeW5jKGNhbmRpZGF0ZVBhdGgpKSB7XG4gICAgICAgICAgZnVsbFBhdGggPSBjYW5kaWRhdGVQYXRoO1xuICAgICAgICAgIGNvbnNvbGUubG9nKGBbU2VydmVybGVzc10gRm91bmQgZmlsZSB3aXRoIGV4dGVuc2lvbjogJHtmdWxsUGF0aH1gKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLmxvZyhgW1NlcnZlcmxlc3NdIEZpbGUgZXhpc3RzIHdpdGhvdXQgdHJ5aW5nIGV4dGVuc2lvbnM6ICR7ZnVsbFBhdGh9YCk7XG4gICAgfVxuXG4gICAgY29uc29sZS5sb2coYFtTZXJ2ZXJsZXNzXSBGaW5hbCBmdWxsUGF0aDogJHtmdWxsUGF0aH1gKTtcbiAgICBjb25zb2xlLmxvZyhgW1NlcnZlcmxlc3NdIEV4cG9ydCBuYW1lOiAke2V4cG9ydE5hbWUgfHwgJ2RlZmF1bHQvaGFuZGxlcid9YCk7XG4gICAgY29uc29sZS5sb2coYFtTZXJ2ZXJsZXNzXSBGaWxlIGV4aXN0czogJHtleGlzdHNTeW5jKGZ1bGxQYXRoKX1gKTtcblxuICAgIGlmKCFleGlzdHNTeW5jKGZ1bGxQYXRoKSkge1xuICAgICAgY29uc29sZS5lcnJvcihgW1NlcnZlcmxlc3NdIEhhbmRsZXIgZmlsZSBub3QgZm91bmQ6ICR7ZnVsbFBhdGh9YCk7XG4gICAgICBjb25zb2xlLmVycm9yKGBbU2VydmVybGVzc10gT3V0cHV0IGRpcmVjdG9yeTogJHtvdXRwdXREaXJ9YCk7XG4gICAgICBjb25zb2xlLmVycm9yKGBbU2VydmVybGVzc10gSGFuZGxlciBwYXRoIGZyb20gY29uZmlnOiAke2hhbmRsZXJQYXRofWApO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBIYW5kbGVyIGZpbGUgbm90IGZvdW5kOiAke2Z1bGxQYXRofWApO1xuICAgIH1cblxuICAgIC8vIER5bmFtaWMgaW1wb3J0IG9mIHRoZSBoYW5kbGVyIHdpdGggYmV0dGVyIGVycm9yIGhhbmRsaW5nXG4gICAgLy8gQWRkIC5qcyBleHRlbnNpb24gaWYgaW1wb3J0aW5nIFR5cGVTY3JpcHQgY29tcGlsZWQgb3V0cHV0XG4gICAgY29uc3QgaW1wb3J0UGF0aCA9IGZ1bGxQYXRoLmVuZHNXaXRoKCcudHMnKSA/IGZ1bGxQYXRoLnJlcGxhY2UoL1xcLnRzJC8sICcuanMnKSA6IGZ1bGxQYXRoO1xuXG4gICAgdHJ5IHtcbiAgICAgIC8vIENvbnZlcnQgdG8gZmlsZTovLyBVUkwgZm9yIEVTIG1vZHVsZSBpbXBvcnRzIChyZXF1aXJlZCBmb3IgYWJzb2x1dGUgcGF0aHMpXG4gICAgICAvLyBVc2UgcGF0aFRvRmlsZVVSTCB0byBlbnN1cmUgcHJvcGVyIGZpbGU6Ly8gVVJMIGZvcm1hdFxuICAgICAgY29uc3QgaW1wb3J0VXJsID0gcGF0aFRvRmlsZVVSTChpbXBvcnRQYXRoKS5ocmVmO1xuICAgICAgY29uc29sZS5sb2coYFtTZXJ2ZXJsZXNzXSBJbXBvcnRpbmcgaGFuZGxlciBmcm9tOiAke2ltcG9ydFVybH1gKTtcbiAgICAgIGNvbnNvbGUubG9nKGBbU2VydmVybGVzc10gRmlsZSBwYXRoOiAke2ltcG9ydFBhdGh9YCk7XG5cbiAgICAgIC8vIFVzZSBpbXBvcnQoKSB3aXRoIHRoZSBmaWxlIFVSTFxuICAgICAgLy8gTm90ZTogSWYgdGhlIGhhbmRsZXIgZmlsZSBoYXMgaW1wb3J0IGVycm9ycyAobGlrZSBtaXNzaW5nIGRlcGVuZGVuY2llcyksXG4gICAgICAvLyB0aG9zZSB3aWxsIHN1cmZhY2UgaGVyZSwgYnV0IHRoYXQncyBhIGhhbmRsZXIgY29kZSBpc3N1ZSwgbm90IGEgbG9hZGVyIGlzc3VlXG4gICAgICBjb25zdCBoYW5kbGVyTW9kdWxlID0gYXdhaXQgaW1wb3J0KGltcG9ydFVybCk7XG4gICAgICBjb25zb2xlLmxvZyhgW1NlcnZlcmxlc3NdIEhhbmRsZXIgbW9kdWxlIGxvYWRlZCBzdWNjZXNzZnVsbHkuIEV4cG9ydHM6ICR7T2JqZWN0LmtleXMoaGFuZGxlck1vZHVsZSkuam9pbignLCAnKX1gKTtcblxuICAgICAgLy8gR2V0IHRoZSBoYW5kbGVyIGJhc2VkIG9uIGV4cG9ydCBuYW1lIG9yIHRyeSBkZWZhdWx0c1xuICAgICAgbGV0IGhhbmRsZXI6IGFueTtcbiAgICAgIGlmKGV4cG9ydE5hbWUpIHtcbiAgICAgICAgaGFuZGxlciA9IGhhbmRsZXJNb2R1bGVbZXhwb3J0TmFtZV07XG4gICAgICAgIGlmKCFoYW5kbGVyKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihgW1NlcnZlcmxlc3NdIEV4cG9ydCBcIiR7ZXhwb3J0TmFtZX1cIiBub3QgZm91bmQgaW4gbW9kdWxlLiBBdmFpbGFibGUgZXhwb3J0czogJHtPYmplY3Qua2V5cyhoYW5kbGVyTW9kdWxlKS5qb2luKCcsICcpfWApO1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBUcnkgZGVmYXVsdCwgaGFuZGxlciwgb3IgdGhlIG1vZHVsZSBpdHNlbGZcbiAgICAgICAgaGFuZGxlciA9IGhhbmRsZXJNb2R1bGUuZGVmYXVsdCB8fCBoYW5kbGVyTW9kdWxlLmhhbmRsZXIgfHwgaGFuZGxlck1vZHVsZTtcbiAgICAgIH1cblxuICAgICAgY29uc29sZS5sb2coYFtTZXJ2ZXJsZXNzXSBIYW5kbGVyIGZvdW5kOiAke3R5cGVvZiBoYW5kbGVyfSwgaXNGdW5jdGlvbjogJHt0eXBlb2YgaGFuZGxlciA9PT0gJ2Z1bmN0aW9uJ31gKTtcblxuICAgICAgaWYodHlwZW9mIGhhbmRsZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihgW1NlcnZlcmxlc3NdIEhhbmRsZXIgaXMgbm90IGEgZnVuY3Rpb24uIFR5cGU6ICR7dHlwZW9mIGhhbmRsZXJ9LCBWYWx1ZTpgLCBoYW5kbGVyKTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBoYW5kbGVyO1xuICAgIH0gY2F0Y2goaW1wb3J0RXJyb3I6IGFueSkge1xuICAgICAgY29uc29sZS5lcnJvcihgW1NlcnZlcmxlc3NdIEltcG9ydCBlcnJvciBmb3IgaGFuZGxlciAke2hhbmRsZXJQYXRofTpgLCBpbXBvcnRFcnJvci5tZXNzYWdlKTtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1tTZXJ2ZXJsZXNzXSBJbXBvcnQgZXJyb3Igc3RhY2s6JywgaW1wb3J0RXJyb3Iuc3RhY2spO1xuXG4gICAgICAvLyBDaGVjayBpZiB0aGlzIGlzIGEgZGVwZW5kZW5jeSByZXNvbHV0aW9uIGVycm9yIChjb21tb24gd2l0aCBFUyBtb2R1bGVzKVxuICAgICAgaWYoaW1wb3J0RXJyb3IubWVzc2FnZSAmJiBpbXBvcnRFcnJvci5tZXNzYWdlLmluY2x1ZGVzKCdDYW5ub3QgZmluZCBtb2R1bGUnKSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdbU2VydmVybGVzc10gVGhpcyBhcHBlYXJzIHRvIGJlIGEgZGVwZW5kZW5jeSByZXNvbHV0aW9uIGVycm9yLicpO1xuICAgICAgICBjb25zb2xlLmVycm9yKCdbU2VydmVybGVzc10gVGhlIGhhbmRsZXIgZmlsZSBleGlzdHMsIGJ1dCBvbmUgb2YgaXRzIGltcG9ydHMgaXMgZmFpbGluZy4nKTtcbiAgICAgICAgY29uc29sZS5lcnJvcignW1NlcnZlcmxlc3NdIENoZWNrIHRoYXQgYWxsIGRlcGVuZGVuY2llcyBpbiB0aGUgaGFuZGxlciBmaWxlIGFyZSBwcm9wZXJseSBpbnN0YWxsZWQuJyk7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYFtTZXJ2ZXJsZXNzXSBIYW5kbGVyIGZpbGU6ICR7aW1wb3J0UGF0aH1gKTtcbiAgICAgICAgY29uc29sZS5lcnJvcignW1NlcnZlcmxlc3NdIE1ha2Ugc3VyZSB0aGUgaGFuZGxlciBhbmQgaXRzIGRlcGVuZGVuY2llcyBhcmUgY29tcGlsZWQgY29ycmVjdGx5LicpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH0gY2F0Y2goZXJyb3I6IGFueSkge1xuICAgIGNvbnNvbGUuZXJyb3IoYFtTZXJ2ZXJsZXNzXSBFcnJvciBsb2FkaW5nIGhhbmRsZXIgJHtoYW5kbGVyUGF0aH06YCwgZXJyb3IubWVzc2FnZSk7XG4gICAgY29uc29sZS5lcnJvcignW1NlcnZlcmxlc3NdIEVycm9yIHN0YWNrOicsIGVycm9yLnN0YWNrKTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufTtcblxuY29uc3QgY2FwdHVyZUNvbnNvbGVMb2dzID0gKGhhbmRsZXI6IChldmVudDogYW55LCBjb250ZXh0OiBhbnkpPT4gUHJvbWlzZTxhbnk+LCBxdWlldDogYm9vbGVhbikgPT4ge1xuICBpZihxdWlldCkge1xuICAgIHJldHVybiBoYW5kbGVyO1xuICB9XG5cbiAgcmV0dXJuIGFzeW5jIChldmVudDogYW55LCBjb250ZXh0OiBhbnkpID0+IHtcbiAgICAvLyBDYXB0dXJlIGNvbnNvbGUubG9nLCBjb25zb2xlLmVycm9yLCBldGMuXG4gICAgY29uc3Qgb3JpZ2luYWxDb25zb2xlTG9nID0gY29uc29sZS5sb2c7XG4gICAgY29uc3Qgb3JpZ2luYWxDb25zb2xlRXJyb3IgPSBjb25zb2xlLmVycm9yO1xuICAgIGNvbnN0IG9yaWdpbmFsQ29uc29sZVdhcm4gPSBjb25zb2xlLndhcm47XG4gICAgY29uc3Qgb3JpZ2luYWxDb25zb2xlSW5mbyA9IGNvbnNvbGUuaW5mbztcblxuICAgIGNvbnN0IGxvZ3M6IHN0cmluZ1tdID0gW107XG5cbiAgICBjb25zb2xlLmxvZyA9ICguLi5hcmdzOiBhbnlbXSkgPT4ge1xuICAgICAgbG9ncy5wdXNoKGBbTE9HXSAke2FyZ3Muam9pbignICcpfWApO1xuICAgICAgb3JpZ2luYWxDb25zb2xlTG9nKC4uLmFyZ3MpO1xuICAgIH07XG5cbiAgICBjb25zb2xlLmVycm9yID0gKC4uLmFyZ3M6IGFueVtdKSA9PiB7XG4gICAgICBsb2dzLnB1c2goYFtFUlJPUl0gJHthcmdzLmpvaW4oJyAnKX1gKTtcbiAgICAgIG9yaWdpbmFsQ29uc29sZUVycm9yKC4uLmFyZ3MpO1xuICAgIH07XG5cbiAgICBjb25zb2xlLndhcm4gPSAoLi4uYXJnczogYW55W10pID0+IHtcbiAgICAgIGxvZ3MucHVzaChgW1dBUk5dICR7YXJncy5qb2luKCcgJyl9YCk7XG4gICAgICBvcmlnaW5hbENvbnNvbGVXYXJuKC4uLmFyZ3MpO1xuICAgIH07XG5cbiAgICBjb25zb2xlLmluZm8gPSAoLi4uYXJnczogYW55W10pID0+IHtcbiAgICAgIGxvZ3MucHVzaChgW0lORk9dICR7YXJncy5qb2luKCcgJyl9YCk7XG4gICAgICBvcmlnaW5hbENvbnNvbGVJbmZvKC4uLmFyZ3MpO1xuICAgIH07XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgaGFuZGxlcihldmVudCwgY29udGV4dCk7XG5cbiAgICAgIC8vIE91dHB1dCBjYXB0dXJlZCBsb2dzXG4gICAgICBpZihsb2dzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgY29uc29sZS5sb2coY2hhbGsuZ3JheSgnLS0tIEhhbmRsZXIgQ29uc29sZSBPdXRwdXQgLS0tJykpO1xuICAgICAgICBsb2dzLmZvckVhY2goKGxvZykgPT4gY29uc29sZS5sb2coY2hhbGsuZ3JheShsb2cpKSk7XG4gICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmdyYXkoJy0tLSBFbmQgSGFuZGxlciBDb25zb2xlIE91dHB1dCAtLS0nKSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIC8vIFJlc3RvcmUgb3JpZ2luYWwgY29uc29sZSBtZXRob2RzXG4gICAgICBjb25zb2xlLmxvZyA9IG9yaWdpbmFsQ29uc29sZUxvZztcbiAgICAgIGNvbnNvbGUuZXJyb3IgPSBvcmlnaW5hbENvbnNvbGVFcnJvcjtcbiAgICAgIGNvbnNvbGUud2FybiA9IG9yaWdpbmFsQ29uc29sZVdhcm47XG4gICAgICBjb25zb2xlLmluZm8gPSBvcmlnaW5hbENvbnNvbGVJbmZvO1xuICAgIH1cbiAgfTtcbn07XG5cbmNvbnN0IGNyZWF0ZUV4cHJlc3NTZXJ2ZXIgPSBhc3luYyAoXG4gIGNvbmZpZzogU2VydmVybGVzc0NvbmZpZyxcbiAgb3V0cHV0RGlyOiBzdHJpbmcsXG4gIGh0dHBQb3J0OiBudW1iZXIsXG4gIGhvc3Q6IHN0cmluZyxcbiAgcXVpZXQ6IGJvb2xlYW4sXG4gIGRlYnVnOiBib29sZWFuXG4pID0+IHtcbiAgY29uc3QgYXBwID0gZXhwcmVzcygpO1xuXG4gIC8vIEVuYWJsZSBDT1JTXG4gIGFwcC51c2UoKHJlcSwgcmVzLCBuZXh0KSA9PiB7XG4gICAgcmVzLmhlYWRlcignQWNjZXNzLUNvbnRyb2wtQWxsb3ctT3JpZ2luJywgJyonKTtcbiAgICByZXMuaGVhZGVyKCdBY2Nlc3MtQ29udHJvbC1BbGxvdy1NZXRob2RzJywgJ0dFVCwgUE9TVCwgUFVULCBERUxFVEUsIFBBVENILCBPUFRJT05TJyk7XG4gICAgcmVzLmhlYWRlcignQWNjZXNzLUNvbnRyb2wtQWxsb3ctSGVhZGVycycsICcqJyk7XG4gICAgcmVzLmhlYWRlcignQWNjZXNzLUNvbnRyb2wtQWxsb3ctQ3JlZGVudGlhbHMnLCAndHJ1ZScpO1xuXG4gICAgaWYocmVxLm1ldGhvZCA9PT0gJ09QVElPTlMnKSB7XG4gICAgICByZXMuc2VuZFN0YXR1cygyMDApO1xuICAgIH0gZWxzZSB7XG4gICAgICBuZXh0KCk7XG4gICAgfVxuICB9KTtcblxuICAvLyBQYXJzZSBKU09OIGJvZGllc1xuICBhcHAudXNlKGV4cHJlc3MuanNvbigpKTtcblxuICAvLyBMb2FkIEdyYXBoUUwgaGFuZGxlclxuICBjb25zdCBsb2FkR3JhcGhRTFNjaGVtYSA9IGFzeW5jICgpID0+IHtcbiAgICB0cnkge1xuICAgICAgLy8gVHJ5IHRvIGZpbmQgYSBHcmFwaFFMIGhhbmRsZXJcbiAgICAgIGxldCBncmFwaHFsSGFuZGxlciA9IG51bGw7XG5cbiAgICAgIGlmKGNvbmZpZy5mdW5jdGlvbnMpIHtcbiAgICAgICAgZm9yKGNvbnN0IFtmdW5jdGlvbk5hbWUsIGZ1bmN0aW9uQ29uZmlnXSBvZiBPYmplY3QuZW50cmllcyhjb25maWcuZnVuY3Rpb25zKSkge1xuICAgICAgICAgIGlmKGZ1bmN0aW9uQ29uZmlnLmV2ZW50cykge1xuICAgICAgICAgICAgZm9yKGNvbnN0IGV2ZW50IG9mIGZ1bmN0aW9uQ29uZmlnLmV2ZW50cykge1xuICAgICAgICAgICAgICBpZihldmVudC5odHRwICYmIGV2ZW50Lmh0dHAucGF0aCkge1xuICAgICAgICAgICAgICAgIC8vIExvb2sgZm9yIEdyYXBoUUwgZW5kcG9pbnRzXG4gICAgICAgICAgICAgICAgaWYoZXZlbnQuaHR0cC5wYXRoID09PSAnL3B1YmxpYycgfHwgZXZlbnQuaHR0cC5wYXRoID09PSAnL2dyYXBocWwnKSB7XG4gICAgICAgICAgICAgICAgICBncmFwaHFsSGFuZGxlciA9IGF3YWl0IGxvYWRIYW5kbGVyKGZ1bmN0aW9uQ29uZmlnLmhhbmRsZXIsIG91dHB1dERpcik7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYoZ3JhcGhxbEhhbmRsZXIpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZihncmFwaHFsSGFuZGxlcikge1xuICAgICAgICBsb2coJ0ZvdW5kIEdyYXBoUUwgaGFuZGxlcicsICdpbmZvJywgcXVpZXQpO1xuICAgICAgICByZXR1cm4gZ3JhcGhxbEhhbmRsZXI7XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9IGNhdGNoKGVycm9yKSB7XG4gICAgICBsb2coYEVycm9yIGxvYWRpbmcgR3JhcGhRTCBoYW5kbGVyOiAke2Vycm9yLm1lc3NhZ2V9YCwgJ2Vycm9yJywgcXVpZXQpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9O1xuXG4gIC8vIFNldCB1cCBHcmFwaFFMIGhhbmRsZXIgZm9yIEdyYXBoUUwgcmVxdWVzdHNcbiAgdHJ5IHtcbiAgICBjb25zdCBncmFwaHFsSGFuZGxlciA9IGF3YWl0IGxvYWRHcmFwaFFMU2NoZW1hKCk7XG4gICAgaWYoZ3JhcGhxbEhhbmRsZXIpIHtcbiAgICAgIC8vIEZpbmQgdGhlIEdyYXBoUUwgcGF0aCBmcm9tIHRoZSBzZXJ2ZXJsZXNzIGNvbmZpZ1xuICAgICAgbGV0IGdyYXBocWxQYXRoID0gJy9ncmFwaHFsJzsgLy8gZGVmYXVsdCBmYWxsYmFja1xuXG4gICAgICBpZihjb25maWcuZnVuY3Rpb25zKSB7XG4gICAgICAgIGZvcihjb25zdCBbX2Z1bmN0aW9uTmFtZSwgZnVuY3Rpb25Db25maWddIG9mIE9iamVjdC5lbnRyaWVzKGNvbmZpZy5mdW5jdGlvbnMpKSB7XG4gICAgICAgICAgaWYoZnVuY3Rpb25Db25maWcuZXZlbnRzKSB7XG4gICAgICAgICAgICBmb3IoY29uc3QgZXZlbnQgb2YgZnVuY3Rpb25Db25maWcuZXZlbnRzKSB7XG4gICAgICAgICAgICAgIGlmKGV2ZW50Py5odHRwPy5wYXRoKSB7XG4gICAgICAgICAgICAgICAgZ3JhcGhxbFBhdGggPSBldmVudC5odHRwLnBhdGg7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYoZ3JhcGhxbFBhdGggIT09ICcvZ3JhcGhxbCcpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBTZXQgdXAgR3JhcGhRTCBlbmRwb2ludCB3aXRoIGVuaGFuY2VkIGNvbnNvbGUubG9nIGNhcHR1cmVcbiAgICAgIGFwcC51c2UoZ3JhcGhxbFBhdGgsIGFzeW5jIChyZXEsIHJlcykgPT4ge1xuICAgICAgICAvLyBHcmFwaFFMIERlYnVnIExvZ2dpbmdcbiAgICAgICAgaWYoZGVidWcgJiYgcmVxLmJvZHkgJiYgcmVxLmJvZHkucXVlcnkpIHtcbiAgICAgICAgICBsb2coJ/CflI0gR3JhcGhRTCBEZWJ1ZyBNb2RlOiBBbmFseXppbmcgcmVxdWVzdC4uLicsICdpbmZvJywgZmFsc2UpO1xuICAgICAgICAgIGxvZyhg8J+TnSBHcmFwaFFMIFF1ZXJ5OiAke3JlcS5ib2R5LnF1ZXJ5fWAsICdpbmZvJywgZmFsc2UpO1xuICAgICAgICAgIGlmKHJlcS5ib2R5LnZhcmlhYmxlcykge1xuICAgICAgICAgICAgbG9nKGDwn5OKIEdyYXBoUUwgVmFyaWFibGVzOiAke0pTT04uc3RyaW5naWZ5KHJlcS5ib2R5LnZhcmlhYmxlcywgbnVsbCwgMil9YCwgJ2luZm8nLCBmYWxzZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmKHJlcS5ib2R5Lm9wZXJhdGlvbk5hbWUpIHtcbiAgICAgICAgICAgIGxvZyhg8J+Pt++4jyAgR3JhcGhRTCBPcGVyYXRpb246ICR7cmVxLmJvZHkub3BlcmF0aW9uTmFtZX1gLCAnaW5mbycsIGZhbHNlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBFbmhhbmNlZCBjb25zb2xlLmxvZyBjYXB0dXJlXG4gICAgICAgIGNvbnN0IG9yaWdpbmFsQ29uc29sZUxvZyA9IGNvbnNvbGUubG9nO1xuICAgICAgICBjb25zdCBsb2dzOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgICAgIGNvbnNvbGUubG9nID0gKC4uLmFyZ3MpID0+IHtcbiAgICAgICAgICBjb25zdCBsb2dNZXNzYWdlID0gYXJncy5tYXAoKGFyZykgPT5cbiAgICAgICAgICAgICh0eXBlb2YgYXJnID09PSAnb2JqZWN0JyA/IEpTT04uc3RyaW5naWZ5KGFyZywgbnVsbCwgMikgOiBTdHJpbmcoYXJnKSlcbiAgICAgICAgICApLmpvaW4oJyAnKTtcbiAgICAgICAgICBsb2dzLnB1c2gobG9nTWVzc2FnZSk7XG4gICAgICAgICAgb3JpZ2luYWxDb25zb2xlTG9nKGBbR3JhcGhRTF0gJHtsb2dNZXNzYWdlfWApO1xuICAgICAgICB9O1xuXG4gICAgICAgIC8vIENyZWF0ZSBjb250ZXh0IGZvciB0aGUgaGFuZGxlclxuICAgICAgICBjb25zdCBjb250ZXh0ID0ge1xuICAgICAgICAgIGF3c1JlcXVlc3RJZDogJ3Rlc3QtcmVxdWVzdC1pZCcsXG4gICAgICAgICAgZnVuY3Rpb25OYW1lOiAnZ3JhcGhxbCcsXG4gICAgICAgICAgZnVuY3Rpb25WZXJzaW9uOiAnJExBVEVTVCcsXG4gICAgICAgICAgZ2V0UmVtYWluaW5nVGltZUluTWlsbGlzOiAoKSA9PiAzMDAwMCxcbiAgICAgICAgICBpbnZva2VkRnVuY3Rpb25Bcm46ICdhcm46YXdzOmxhbWJkYTp1cy1lYXN0LTE6MTIzNDU2Nzg5MDEyOmZ1bmN0aW9uOmdyYXBocWwnLFxuICAgICAgICAgIGxvZ0dyb3VwTmFtZTogJy9hd3MvbGFtYmRhL2dyYXBocWwnLFxuICAgICAgICAgIGxvZ1N0cmVhbU5hbWU6ICd0ZXN0LWxvZy1zdHJlYW0nLFxuICAgICAgICAgIHJlcSxcbiAgICAgICAgICByZXNcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBXcmFwIGhhbmRsZXIgd2l0aCBjb25zb2xlIGxvZyBjYXB0dXJlXG4gICAgICAgIGNvbnN0IHdyYXBwZWRIYW5kbGVyID0gY2FwdHVyZUNvbnNvbGVMb2dzKGdyYXBocWxIYW5kbGVyLCBxdWlldCk7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAvLyBDYWxsIHRoZSBoYW5kbGVyIHdpdGggR3JhcGhRTCBwYXJhbWV0ZXJzXG4gICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgd3JhcHBlZEhhbmRsZXIoe1xuICAgICAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkocmVxLmJvZHkpLFxuICAgICAgICAgICAgaGVhZGVyczogcmVxLmhlYWRlcnMsXG4gICAgICAgICAgICBodHRwTWV0aG9kOiAnUE9TVCcsXG4gICAgICAgICAgICBwYXRoOiBncmFwaHFsUGF0aCxcbiAgICAgICAgICAgIHF1ZXJ5U3RyaW5nUGFyYW1ldGVyczoge31cbiAgICAgICAgICB9LCBjb250ZXh0KTtcblxuICAgICAgICAgIC8vIFJlc3RvcmUgY29uc29sZS5sb2dcbiAgICAgICAgICBjb25zb2xlLmxvZyA9IG9yaWdpbmFsQ29uc29sZUxvZztcblxuICAgICAgICAgIC8vIEhhbmRsZSB0aGUgcmVzdWx0XG4gICAgICAgICAgaWYocmVzdWx0ICYmIHR5cGVvZiByZXN1bHQgPT09ICdvYmplY3QnICYmIHJlc3VsdC5zdGF0dXNDb2RlKSB7XG4gICAgICAgICAgICByZXMuc3RhdHVzKHJlc3VsdC5zdGF0dXNDb2RlKTtcbiAgICAgICAgICAgIGlmKHJlc3VsdC5oZWFkZXJzKSB7XG4gICAgICAgICAgICAgIE9iamVjdC5lbnRyaWVzKHJlc3VsdC5oZWFkZXJzKS5mb3JFYWNoKChba2V5LCB2YWx1ZV0pID0+IHtcbiAgICAgICAgICAgICAgICByZXMuc2V0SGVhZGVyKGtleSwgU3RyaW5nKHZhbHVlKSk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzLnNlbmQocmVzdWx0LmJvZHkpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXMuanNvbihyZXN1bHQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaChlcnJvcikge1xuICAgICAgICAgIC8vIFJlc3RvcmUgY29uc29sZS5sb2dcbiAgICAgICAgICBjb25zb2xlLmxvZyA9IG9yaWdpbmFsQ29uc29sZUxvZztcbiAgICAgICAgICBsb2coYEdyYXBoUUwgaGFuZGxlciBlcnJvcjogJHtlcnJvci5tZXNzYWdlfWAsICdlcnJvcicsIGZhbHNlKTtcbiAgICAgICAgICByZXMuc3RhdHVzKDUwMCkuanNvbih7ZXJyb3I6IGVycm9yLm1lc3NhZ2V9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIGxvZyhgR3JhcGhRTCBlbmRwb2ludCBhdmFpbGFibGUgYXQgaHR0cDovLyR7aG9zdH06JHtodHRwUG9ydH0ke2dyYXBocWxQYXRofWAsICdpbmZvJywgcXVpZXQpO1xuICAgIH1cbiAgfSBjYXRjaChlcnJvcikge1xuICAgIGxvZyhgRXJyb3Igc2V0dGluZyB1cCBHcmFwaFFMOiAke2Vycm9yLm1lc3NhZ2V9YCwgJ2Vycm9yJywgcXVpZXQpO1xuICB9XG5cbiAgLy8gRmFsbGJhY2sgZm9yIG5vbi1HcmFwaFFMIHJvdXRlcyAtIGhhbmRsZSBhbGwgcmVtYWluaW5nIHJvdXRlc1xuICBhcHAudXNlKCcvJywgYXN5bmMgKHJlcSwgcmVzKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHVybCA9IHJlcS51cmwgfHwgJy8nO1xuICAgICAgY29uc3QgbWV0aG9kID0gcmVxLm1ldGhvZCB8fCAnR0VUJztcbiAgICAgIGNvbnN0IHBhdGhuYW1lID0gcmVxLnBhdGggfHwgdXJsLnNwbGl0KCc/JylbMF07IC8vIEV4dHJhY3QgcGF0aG5hbWUgd2l0aG91dCBxdWVyeSBzdHJpbmdcblxuICAgICAgLy8gQWx3YXlzIGxvZyByZXF1ZXN0cyAobm90IGFmZmVjdGVkIGJ5IHF1aWV0IGZsYWcgZm9yIGRlYnVnZ2luZylcbiAgICAgIGNvbnNvbGUubG9nKGBbU2VydmVybGVzc10gJHttZXRob2R9ICR7dXJsfSAocGF0aG5hbWU6ICR7cGF0aG5hbWV9KWApO1xuXG4gICAgICAvLyBGaW5kIG1hdGNoaW5nIGZ1bmN0aW9uXG4gICAgICBsZXQgbWF0Y2hlZEZ1bmN0aW9uID0gbnVsbDtcblxuICAgICAgaWYoY29uZmlnLmZ1bmN0aW9ucykge1xuICAgICAgICBjb25zdCBmdW5jdGlvbk5hbWVzID0gT2JqZWN0LmtleXMoY29uZmlnLmZ1bmN0aW9ucyk7XG4gICAgICAgIGNvbnNvbGUubG9nKGBbU2VydmVybGVzc10gQXZhaWxhYmxlIGZ1bmN0aW9uczogJHtmdW5jdGlvbk5hbWVzLmpvaW4oJywgJyl9YCk7XG4gICAgICAgIGNvbnNvbGUubG9nKCdbU2VydmVybGVzc10gQ29uZmlnIGZ1bmN0aW9uczonLCBKU09OLnN0cmluZ2lmeShjb25maWcuZnVuY3Rpb25zLCBudWxsLCAyKSk7XG5cbiAgICAgICAgZm9yKGNvbnN0IFtmdW5jdGlvbk5hbWUsIGZ1bmN0aW9uQ29uZmlnXSBvZiBPYmplY3QuZW50cmllcyhjb25maWcuZnVuY3Rpb25zKSkge1xuICAgICAgICAgIGlmKGZ1bmN0aW9uQ29uZmlnLmV2ZW50cykge1xuICAgICAgICAgICAgZm9yKGNvbnN0IGV2ZW50IG9mIGZ1bmN0aW9uQ29uZmlnLmV2ZW50cykge1xuICAgICAgICAgICAgICBpZihldmVudC5odHRwKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZXZlbnRQYXRoID0gZXZlbnQuaHR0cC5wYXRoIHx8ICcvJztcbiAgICAgICAgICAgICAgICBjb25zdCBldmVudE1ldGhvZCA9IChldmVudC5odHRwLm1ldGhvZCB8fCAnR0VUJykudG9VcHBlckNhc2UoKTtcbiAgICAgICAgICAgICAgICBjb25zdCByZXF1ZXN0TWV0aG9kID0gbWV0aG9kLnRvVXBwZXJDYXNlKCk7XG5cbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgW1NlcnZlcmxlc3NdIENoZWNraW5nIGZ1bmN0aW9uICR7ZnVuY3Rpb25OYW1lfTogcGF0aD1cIiR7ZXZlbnRQYXRofVwiLCBtZXRob2Q9XCIke2V2ZW50TWV0aG9kfVwiIGFnYWluc3QgcGF0aG5hbWU9XCIke3BhdGhuYW1lfVwiLCBtZXRob2Q9XCIke3JlcXVlc3RNZXRob2R9XCJgKTtcblxuICAgICAgICAgICAgICAgIC8vIEltcHJvdmVkIHBhdGggbWF0Y2hpbmcgLSBjb21wYXJlIHBhdGhuYW1lIHdpdGhvdXQgcXVlcnkgc3RyaW5nXG4gICAgICAgICAgICAgICAgLy8gTm9ybWFsaXplIHBhdGhzIChyZW1vdmUgdHJhaWxpbmcgc2xhc2hlcyBmb3IgY29tcGFyaXNvbilcbiAgICAgICAgICAgICAgICBjb25zdCBub3JtYWxpemVkRXZlbnRQYXRoID0gZXZlbnRQYXRoLnJlcGxhY2UoL1xcLyQvLCAnJykgfHwgJy8nO1xuICAgICAgICAgICAgICAgIGNvbnN0IG5vcm1hbGl6ZWRQYXRobmFtZSA9IHBhdGhuYW1lLnJlcGxhY2UoL1xcLyQvLCAnJykgfHwgJy8nO1xuXG4gICAgICAgICAgICAgICAgaWYobm9ybWFsaXplZEV2ZW50UGF0aCA9PT0gbm9ybWFsaXplZFBhdGhuYW1lICYmIGV2ZW50TWV0aG9kID09PSByZXF1ZXN0TWV0aG9kKSB7XG4gICAgICAgICAgICAgICAgICBtYXRjaGVkRnVuY3Rpb24gPSBmdW5jdGlvbk5hbWU7XG4gICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgW1NlcnZlcmxlc3NdIOKckyBNYXRjaGVkIGZ1bmN0aW9uOiAke21hdGNoZWRGdW5jdGlvbn1gKTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZihtYXRjaGVkRnVuY3Rpb24pIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS5sb2coJ1tTZXJ2ZXJsZXNzXSBObyBmdW5jdGlvbnMgZm91bmQgaW4gY29uZmlnJyk7XG4gICAgICB9XG5cbiAgICAgIGlmKG1hdGNoZWRGdW5jdGlvbiAmJiBjb25maWcuZnVuY3Rpb25zW21hdGNoZWRGdW5jdGlvbl0pIHtcbiAgICAgICAgLy8gUmVzb2x2ZSBoYW5kbGVyIHBhdGggcmVsYXRpdmUgdG8gb3V0cHV0IGRpcmVjdG9yeVxuICAgICAgICBjb25zdCBoYW5kbGVyUGF0aCA9IGNvbmZpZy5mdW5jdGlvbnNbbWF0Y2hlZEZ1bmN0aW9uXS5oYW5kbGVyO1xuICAgICAgICBjb25zb2xlLmxvZyhgW1NlcnZlcmxlc3NdIExvYWRpbmcgaGFuZGxlcjogJHtoYW5kbGVyUGF0aH0gZnJvbSBvdXRwdXREaXI6ICR7b3V0cHV0RGlyfWApO1xuICAgICAgICBjb25zdCBoYW5kbGVyID0gYXdhaXQgbG9hZEhhbmRsZXIoaGFuZGxlclBhdGgsIG91dHB1dERpcik7XG5cbiAgICAgICAgaWYoaGFuZGxlcikge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGBbU2VydmVybGVzc10gSGFuZGxlciBsb2FkZWQgc3VjY2Vzc2Z1bGx5LCB0eXBlOiAke3R5cGVvZiBoYW5kbGVyfWApO1xuICAgICAgICAgIGNvbnN0IHdyYXBwZWRIYW5kbGVyID0gY2FwdHVyZUNvbnNvbGVMb2dzKGhhbmRsZXIsIHF1aWV0KTtcblxuICAgICAgICAgIGNvbnN0IGV2ZW50ID0ge1xuICAgICAgICAgICAgYm9keTogcmVxLmJvZHksXG4gICAgICAgICAgICBoZWFkZXJzOiByZXEuaGVhZGVycyxcbiAgICAgICAgICAgIGh0dHBNZXRob2Q6IG1ldGhvZCxcbiAgICAgICAgICAgIHBhdGg6IHVybCxcbiAgICAgICAgICAgIHF1ZXJ5U3RyaW5nUGFyYW1ldGVyczogcmVxLnF1ZXJ5XG4gICAgICAgICAgfTtcblxuICAgICAgICAgIGNvbnN0IGNvbnRleHQgPSB7XG4gICAgICAgICAgICBhd3NSZXF1ZXN0SWQ6ICd0ZXN0LXJlcXVlc3QtaWQnLFxuICAgICAgICAgICAgZnVuY3Rpb25OYW1lOiBtYXRjaGVkRnVuY3Rpb24sXG4gICAgICAgICAgICBmdW5jdGlvblZlcnNpb246ICckTEFURVNUJyxcbiAgICAgICAgICAgIGdldFJlbWFpbmluZ1RpbWVJbk1pbGxpczogKCkgPT4gMzAwMDAsXG4gICAgICAgICAgICBpbnZva2VkRnVuY3Rpb25Bcm46IGBhcm46YXdzOmxhbWJkYTp1cy1lYXN0LTE6MTIzNDU2Nzg5MDEyOmZ1bmN0aW9uOiR7bWF0Y2hlZEZ1bmN0aW9ufWAsXG4gICAgICAgICAgICBsb2dHcm91cE5hbWU6IGAvYXdzL2xhbWJkYS8ke21hdGNoZWRGdW5jdGlvbn1gLFxuICAgICAgICAgICAgbG9nU3RyZWFtTmFtZTogJ3Rlc3QtbG9nLXN0cmVhbScsXG4gICAgICAgICAgICBtZW1vcnlMaW1pdEluTUI6ICcxMjgnXG4gICAgICAgICAgfTtcblxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygnW1NlcnZlcmxlc3NdIENhbGxpbmcgaGFuZGxlciB3aXRoIGV2ZW50OicsIEpTT04uc3RyaW5naWZ5KGV2ZW50LCBudWxsLCAyKSk7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB3cmFwcGVkSGFuZGxlcihldmVudCwgY29udGV4dCk7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygnW1NlcnZlcmxlc3NdIEhhbmRsZXIgcmV0dXJuZWQ6JywgSlNPTi5zdHJpbmdpZnkocmVzdWx0LCBudWxsLCAyKSk7XG5cbiAgICAgICAgICAgIGlmKHJlc3VsdCAmJiB0eXBlb2YgcmVzdWx0ID09PSAnb2JqZWN0JyAmJiByZXN1bHQuc3RhdHVzQ29kZSkge1xuICAgICAgICAgICAgICByZXMuc3RhdHVzKHJlc3VsdC5zdGF0dXNDb2RlKTtcbiAgICAgICAgICAgICAgaWYocmVzdWx0LmhlYWRlcnMpIHtcbiAgICAgICAgICAgICAgICBPYmplY3QuZW50cmllcyhyZXN1bHQuaGVhZGVycykuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgICAgICAgICAgICAgICByZXMuc2V0SGVhZGVyKGtleSwgU3RyaW5nKHZhbHVlKSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmVzLnNlbmQocmVzdWx0LmJvZHkpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcmVzLmpzb24ocmVzdWx0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGNhdGNoKGVycm9yOiBhbnkpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1tTZXJ2ZXJsZXNzXSBIYW5kbGVyIGVycm9yOicsIGVycm9yLm1lc3NhZ2UpO1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcignW1NlcnZlcmxlc3NdIEhhbmRsZXIgZXJyb3Igc3RhY2s6JywgZXJyb3Iuc3RhY2spO1xuICAgICAgICAgICAgbG9nKGBIYW5kbGVyIGVycm9yOiAke2Vycm9yLm1lc3NhZ2V9YCwgJ2Vycm9yJywgZmFsc2UpO1xuICAgICAgICAgICAgcmVzLnN0YXR1cyg1MDApLmpzb24oe2Vycm9yOiBlcnJvci5tZXNzYWdlfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYFtTZXJ2ZXJsZXNzXSBIYW5kbGVyIG5vdCBmb3VuZCBmb3IgZnVuY3Rpb246ICR7bWF0Y2hlZEZ1bmN0aW9ufWApO1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYFtTZXJ2ZXJsZXNzXSBIYW5kbGVyIHBhdGg6ICR7aGFuZGxlclBhdGh9LCBPdXRwdXQgZGlyOiAke291dHB1dERpcn1gKTtcbiAgICAgICAgICByZXMuc3RhdHVzKDQwNCkuanNvbih7ZXJyb3I6ICdIYW5kbGVyIG5vdCBmb3VuZCd9KTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihgW1NlcnZlcmxlc3NdIEZ1bmN0aW9uIG5vdCBmb3VuZCBmb3IgcGF0aG5hbWU6ICR7cGF0aG5hbWV9LCBtZXRob2Q6ICR7bWV0aG9kfWApO1xuICAgICAgICBjb25zb2xlLmVycm9yKGBbU2VydmVybGVzc10gQXZhaWxhYmxlIGZ1bmN0aW9uczogJHtjb25maWcuZnVuY3Rpb25zID8gT2JqZWN0LmtleXMoY29uZmlnLmZ1bmN0aW9ucykuam9pbignLCAnKSA6ICdub25lJ31gKTtcbiAgICAgICAgcmVzLnN0YXR1cyg0MDQpLmpzb24oe2Vycm9yOiAnRnVuY3Rpb24gbm90IGZvdW5kJ30pO1xuICAgICAgfVxuICAgIH0gY2F0Y2goZXJyb3IpIHtcbiAgICAgIGxvZyhgUm91dGUgaGFuZGxpbmcgZXJyb3I6ICR7ZXJyb3IubWVzc2FnZX1gLCAnZXJyb3InLCBmYWxzZSk7XG4gICAgICByZXMuc3RhdHVzKDUwMCkuanNvbih7ZXJyb3I6IGVycm9yLm1lc3NhZ2V9KTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBhcHA7XG59O1xuXG5jb25zdCBjcmVhdGVXZWJTb2NrZXRTZXJ2ZXIgPSAoXG4gIGNvbmZpZzogU2VydmVybGVzc0NvbmZpZyxcbiAgb3V0cHV0RGlyOiBzdHJpbmcsXG4gIHdzUG9ydDogbnVtYmVyLFxuICBxdWlldDogYm9vbGVhbixcbiAgZGVidWc6IGJvb2xlYW5cbikgPT4ge1xuICBjb25zdCB3c3MgPSBuZXcgV2ViU29ja2V0U2VydmVyKHtwb3J0OiB3c1BvcnR9KTtcblxuICB3c3Mub24oJ2Nvbm5lY3Rpb24nLCBhc3luYyAod3MsIHJlcSkgPT4ge1xuICAgIGxvZyhgV2ViU29ja2V0IGNvbm5lY3Rpb24gZXN0YWJsaXNoZWQ6ICR7cmVxLnVybH1gLCAnaW5mbycsIGZhbHNlKTtcblxuICAgIHdzLm9uKCdtZXNzYWdlJywgYXN5bmMgKG1lc3NhZ2UpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGRhdGEgPSBKU09OLnBhcnNlKG1lc3NhZ2UudG9TdHJpbmcoKSk7XG5cbiAgICAgICAgLy8gRmluZCBtYXRjaGluZyBXZWJTb2NrZXQgZnVuY3Rpb25cbiAgICAgICAgbGV0IG1hdGNoZWRGdW5jdGlvbiA9IG51bGw7XG5cbiAgICAgICAgaWYoY29uZmlnLmZ1bmN0aW9ucykge1xuICAgICAgICAgIGZvcihjb25zdCBbZnVuY3Rpb25OYW1lLCBmdW5jdGlvbkNvbmZpZ10gb2YgT2JqZWN0LmVudHJpZXMoY29uZmlnLmZ1bmN0aW9ucykpIHtcbiAgICAgICAgICAgIGlmKGZ1bmN0aW9uQ29uZmlnLmV2ZW50cykge1xuICAgICAgICAgICAgICBmb3IoY29uc3QgZXZlbnQgb2YgZnVuY3Rpb25Db25maWcuZXZlbnRzKSB7XG4gICAgICAgICAgICAgICAgaWYoZXZlbnQud2Vic29ja2V0KSB7XG4gICAgICAgICAgICAgICAgICBjb25zdCByb3V0ZSA9IGV2ZW50LndlYnNvY2tldC5yb3V0ZSB8fCAnJGNvbm5lY3QnO1xuICAgICAgICAgICAgICAgICAgaWYocm91dGUgPT09ICckZGVmYXVsdCcgfHwgcm91dGUgPT09IGRhdGEuYWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgIG1hdGNoZWRGdW5jdGlvbiA9IGZ1bmN0aW9uTmFtZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZihtYXRjaGVkRnVuY3Rpb24pIHtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYobWF0Y2hlZEZ1bmN0aW9uICYmIGNvbmZpZy5mdW5jdGlvbnNbbWF0Y2hlZEZ1bmN0aW9uXSkge1xuICAgICAgICAgIGNvbnN0IGhhbmRsZXIgPSBhd2FpdCBsb2FkSGFuZGxlcihjb25maWcuZnVuY3Rpb25zW21hdGNoZWRGdW5jdGlvbl0uaGFuZGxlciwgb3V0cHV0RGlyKTtcblxuICAgICAgICAgIGlmKGhhbmRsZXIpIHtcbiAgICAgICAgICAgIC8vIFdyYXAgaGFuZGxlciB3aXRoIGNvbnNvbGUgbG9nIGNhcHR1cmVcbiAgICAgICAgICAgIGNvbnN0IHdyYXBwZWRIYW5kbGVyID0gY2FwdHVyZUNvbnNvbGVMb2dzKGhhbmRsZXIsIHF1aWV0KTtcbiAgICAgICAgICAgIGNvbnN0IGV2ZW50ID0ge1xuICAgICAgICAgICAgICBib2R5OiBkYXRhLmJvZHkgfHwgbnVsbCxcbiAgICAgICAgICAgICAgcmVxdWVzdENvbnRleHQ6IHtcbiAgICAgICAgICAgICAgICBhcGlHYXRld2F5OiB7XG4gICAgICAgICAgICAgICAgICBlbmRwb2ludDogYHdzOi8vbG9jYWxob3N0OiR7d3NQb3J0fWBcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGNvbm5lY3Rpb25JZDogJ3Rlc3QtY29ubmVjdGlvbi1pZCcsXG4gICAgICAgICAgICAgICAgcm91dGVLZXk6IGRhdGEuYWN0aW9uIHx8ICckZGVmYXVsdCdcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgY29uc3QgY29udGV4dCA9IHtcbiAgICAgICAgICAgICAgYXdzUmVxdWVzdElkOiAndGVzdC1yZXF1ZXN0LWlkJyxcbiAgICAgICAgICAgICAgZnVuY3Rpb25OYW1lOiBtYXRjaGVkRnVuY3Rpb24sXG4gICAgICAgICAgICAgIGZ1bmN0aW9uVmVyc2lvbjogJyRMQVRFU1QnLFxuICAgICAgICAgICAgICBnZXRSZW1haW5pbmdUaW1lSW5NaWxsaXM6ICgpID0+IDMwMDAwLFxuICAgICAgICAgICAgICBpbnZva2VkRnVuY3Rpb25Bcm46IGBhcm46YXdzOmxhbWJkYTp1cy1lYXN0LTE6MTIzNDU2Nzg5MDEyOmZ1bmN0aW9uOiR7bWF0Y2hlZEZ1bmN0aW9ufWAsXG4gICAgICAgICAgICAgIGxvZ0dyb3VwTmFtZTogYC9hd3MvbGFtYmRhLyR7bWF0Y2hlZEZ1bmN0aW9ufWAsXG4gICAgICAgICAgICAgIGxvZ1N0cmVhbU5hbWU6ICd0ZXN0LWxvZy1zdHJlYW0nLFxuICAgICAgICAgICAgICBtZW1vcnlMaW1pdEluTUI6ICcxMjgnXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB3cmFwcGVkSGFuZGxlcihldmVudCwgY29udGV4dCk7XG5cbiAgICAgICAgICAgIC8vIEhhbmRsZSBMYW1iZGEgcmVzcG9uc2UgZm9ybWF0IGZvciBXZWJTb2NrZXRcbiAgICAgICAgICAgIGlmKHJlc3VsdCAmJiB0eXBlb2YgcmVzdWx0ID09PSAnb2JqZWN0JyAmJiByZXN1bHQuc3RhdHVzQ29kZSkge1xuICAgICAgICAgICAgICAvLyBUaGlzIGlzIGEgTGFtYmRhIHJlc3BvbnNlIG9iamVjdCwgZXh0cmFjdCB0aGUgYm9keVxuICAgICAgICAgICAgICBjb25zdCBib2R5ID0gcmVzdWx0LmJvZHkgfHwgJyc7XG4gICAgICAgICAgICAgIHdzLnNlbmQoYm9keSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAvLyBUaGlzIGlzIGEgZGlyZWN0IHJlc3BvbnNlLCBzdHJpbmdpZnkgaXRcbiAgICAgICAgICAgICAgd3Muc2VuZChKU09OLnN0cmluZ2lmeShyZXN1bHQpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgd3Muc2VuZChKU09OLnN0cmluZ2lmeSh7ZXJyb3I6ICdIYW5kbGVyIG5vdCBmb3VuZCd9KSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHdzLnNlbmQoSlNPTi5zdHJpbmdpZnkoe2Vycm9yOiAnV2ViU29ja2V0IGZ1bmN0aW9uIG5vdCBmb3VuZCd9KSk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2goZXJyb3IpIHtcbiAgICAgICAgbG9nKGBXZWJTb2NrZXQgZXJyb3I6ICR7ZXJyb3IubWVzc2FnZX1gLCAnZXJyb3InLCBmYWxzZSk7XG4gICAgICAgIHdzLnNlbmQoSlNPTi5zdHJpbmdpZnkoe2Vycm9yOiBlcnJvci5tZXNzYWdlfSkpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgd3Mub24oJ2Nsb3NlJywgKCkgPT4ge1xuICAgICAgbG9nKCdXZWJTb2NrZXQgY29ubmVjdGlvbiBjbG9zZWQnLCAnaW5mbycsIGZhbHNlKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgcmV0dXJuIHdzcztcbn07XG5cbmNvbnN0IGxvYWRFbnZGaWxlID0gKGVudlBhdGg6IHN0cmluZyk6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPT4ge1xuICBjb25zdCBlbnZWYXJzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG5cbiAgaWYoIWV4aXN0c1N5bmMoZW52UGF0aCkpIHtcbiAgICByZXR1cm4gZW52VmFycztcbiAgfVxuXG4gIHRyeSB7XG4gICAgY29uc3QgZW52Q29udGVudCA9IHJlYWRGaWxlU3luYyhlbnZQYXRoLCAndXRmOCcpO1xuICAgIGNvbnN0IGxpbmVzID0gZW52Q29udGVudC5zcGxpdCgnXFxuJyk7XG5cbiAgICBmb3IoY29uc3QgbGluZSBvZiBsaW5lcykge1xuICAgICAgY29uc3QgdHJpbW1lZExpbmUgPSBsaW5lLnRyaW0oKTtcblxuICAgICAgLy8gU2tpcCBlbXB0eSBsaW5lcyBhbmQgY29tbWVudHNcbiAgICAgIGlmKCF0cmltbWVkTGluZSB8fCB0cmltbWVkTGluZS5zdGFydHNXaXRoKCcjJykpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIC8vIFBhcnNlIEtFWT12YWx1ZSBmb3JtYXRcbiAgICAgIGNvbnN0IGVxdWFsSW5kZXggPSB0cmltbWVkTGluZS5pbmRleE9mKCc9Jyk7XG4gICAgICBpZihlcXVhbEluZGV4ID4gMCkge1xuICAgICAgICBjb25zdCBrZXkgPSB0cmltbWVkTGluZS5zdWJzdHJpbmcoMCwgZXF1YWxJbmRleCkudHJpbSgpO1xuICAgICAgICBjb25zdCB2YWx1ZSA9IHRyaW1tZWRMaW5lLnN1YnN0cmluZyhlcXVhbEluZGV4ICsgMSkudHJpbSgpO1xuXG4gICAgICAgIC8vIFJlbW92ZSBxdW90ZXMgaWYgcHJlc2VudFxuICAgICAgICBjb25zdCBjbGVhblZhbHVlID0gdmFsdWUucmVwbGFjZSgvXltcIiddfFtcIiddJC9nLCAnJyk7XG5cbiAgICAgICAgaWYoa2V5KSB7XG4gICAgICAgICAgZW52VmFyc1trZXldID0gY2xlYW5WYWx1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSBjYXRjaChlcnJvcikge1xuICAgIGxvZyhgV2FybmluZzogQ291bGQgbm90IGxvYWQgLmVudiBmaWxlIGF0ICR7ZW52UGF0aH06ICR7ZXJyb3IubWVzc2FnZX1gLCAnd2FybicsIGZhbHNlKTtcbiAgfVxuXG4gIHJldHVybiBlbnZWYXJzO1xufTtcblxuZXhwb3J0IGNvbnN0IHNlcnZlcmxlc3MgPSBhc3luYyAoXG4gIGNtZDogU2VydmVybGVzc09wdGlvbnMsXG4gIGNhbGxiYWNrOiBTZXJ2ZXJsZXNzQ2FsbGJhY2sgPSAoKSA9PiAoe30pXG4pOiBQcm9taXNlPG51bWJlcj4gPT4ge1xuICBjb25zdCB7XG4gICAgY2xpTmFtZSA9ICdMZXgnLFxuICAgIGNvbmZpZyxcbiAgICBkZWJ1ZyA9IGZhbHNlLFxuICAgIGhvc3Q6IGNsaUhvc3QsXG4gICAgaHR0cFBvcnQ6IGNsaUh0dHBQb3J0LFxuICAgIGh0dHBzUG9ydDogY2xpSHR0cHNQb3J0LFxuICAgIHF1aWV0ID0gZmFsc2UsXG4gICAgcmVtb3ZlID0gZmFsc2UsXG4gICAgdGVzdCA9IGZhbHNlLFxuICAgIHVzZVB1YmxpY0lwLFxuICAgIHZhcmlhYmxlcyxcbiAgICB3c1BvcnQ6IGNsaVdzUG9ydFxuICB9ID0gY21kO1xuXG4gIGNvbnN0IHNwaW5uZXIgPSBjcmVhdGVTcGlubmVyKHF1aWV0KTtcblxuICBsb2coYCR7Y2xpTmFtZX0gc3RhcnRpbmcgc2VydmVybGVzcyBkZXZlbG9wbWVudCBzZXJ2ZXIuLi5gLCAnaW5mbycsIHF1aWV0KTtcblxuICBhd2FpdCBMZXhDb25maWcucGFyc2VDb25maWcoY21kKTtcblxuICBjb25zdCB7b3V0cHV0RnVsbFBhdGh9ID0gTGV4Q29uZmlnLmNvbmZpZztcblxuICAvLyBMb2FkIGVudmlyb25tZW50IHZhcmlhYmxlcyBmcm9tIC5lbnYgZmlsZXNcbiAgY29uc3QgZW52UGF0aHMgPSBbXG4gICAgcGF0aFJlc29sdmUocHJvY2Vzcy5jd2QoKSwgJy5lbnYnKSxcbiAgICBwYXRoUmVzb2x2ZShwcm9jZXNzLmN3ZCgpLCAnLmVudi5sb2NhbCcpLFxuICAgIHBhdGhSZXNvbHZlKHByb2Nlc3MuY3dkKCksICcuZW52LmRldmVsb3BtZW50JylcbiAgXTtcblxuICBsZXQgZW52VmFyczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuXG4gIC8vIExvYWQgZnJvbSAuZW52IGZpbGVzIGluIG9yZGVyIChsYXRlciBmaWxlcyBvdmVycmlkZSBlYXJsaWVyIG9uZXMpXG4gIGZvcihjb25zdCBlbnZQYXRoIG9mIGVudlBhdGhzKSB7XG4gICAgY29uc3QgZmlsZUVudlZhcnMgPSBsb2FkRW52RmlsZShlbnZQYXRoKTtcbiAgICBpZihPYmplY3Qua2V5cyhmaWxlRW52VmFycykubGVuZ3RoID4gMCkge1xuICAgICAgbG9nKGBMb2FkZWQgZW52aXJvbm1lbnQgdmFyaWFibGVzIGZyb206ICR7ZW52UGF0aH1gLCAnaW5mbycsIHF1aWV0KTtcbiAgICB9XG4gICAgZW52VmFycyA9IHsuLi5lbnZWYXJzLCAuLi5maWxlRW52VmFyc307XG4gIH1cblxuICAvLyBTdGFydCB3aXRoIGRlZmF1bHQgTk9ERV9FTlYgYW5kIGxvYWRlZCAuZW52IHZhcmlhYmxlc1xuICBsZXQgdmFyaWFibGVzT2JqOiBvYmplY3QgPSB7Tk9ERV9FTlY6ICdkZXZlbG9wbWVudCcsIC4uLmVudlZhcnN9O1xuXG4gIC8vIE92ZXJyaWRlIHdpdGggY29tbWFuZCBsaW5lIHZhcmlhYmxlcyBpZiBwcm92aWRlZFxuICBpZih2YXJpYWJsZXMpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgY2xpVmFycyA9IEpTT04ucGFyc2UodmFyaWFibGVzKTtcbiAgICAgIHZhcmlhYmxlc09iaiA9IHsuLi52YXJpYWJsZXNPYmosIC4uLmNsaVZhcnN9O1xuICAgIH0gY2F0Y2goX2Vycm9yKSB7XG4gICAgICBsb2coYFxcbiR7Y2xpTmFtZX0gRXJyb3I6IEVudmlyb25tZW50IHZhcmlhYmxlcyBvcHRpb24gaXMgbm90IGEgdmFsaWQgSlNPTiBvYmplY3QuYCwgJ2Vycm9yJywgcXVpZXQpO1xuICAgICAgY2FsbGJhY2soMSk7XG4gICAgICByZXR1cm4gMTtcbiAgICB9XG4gIH1cblxuICBwcm9jZXNzLmVudiA9IHsuLi5wcm9jZXNzLmVudiwgLi4udmFyaWFibGVzT2JqfTtcblxuICAvLyBJZiBpbiB0ZXN0IG1vZGUsIGV4aXQgZWFybHkgYWZ0ZXIgbG9hZGluZyBlbnZpcm9ubWVudCB2YXJpYWJsZXNcbiAgaWYodGVzdCkge1xuICAgIGxvZygnVGVzdCBtb2RlOiBFbnZpcm9ubWVudCB2YXJpYWJsZXMgbG9hZGVkLCBleGl0aW5nJywgJ2luZm8nLCBxdWlldCk7XG4gICAgY2FsbGJhY2soMCk7XG4gICAgcmV0dXJuIDA7XG4gIH1cblxuICBpZihyZW1vdmUpIHtcbiAgICBzcGlubmVyLnN0YXJ0KCdDbGVhbmluZyBvdXRwdXQgZGlyZWN0b3J5Li4uJyk7XG4gICAgYXdhaXQgcmVtb3ZlRmlsZXMob3V0cHV0RnVsbFBhdGggfHwgJycpO1xuICAgIHNwaW5uZXIuc3VjY2VlZCgnU3VjY2Vzc2Z1bGx5IGNsZWFuZWQgb3V0cHV0IGRpcmVjdG9yeSEnKTtcbiAgfVxuXG4gIC8vIExvYWQgc2VydmVybGVzcyBjb25maWd1cmF0aW9uXG4gIGxldCBzZXJ2ZXJsZXNzQ29uZmlnOiBTZXJ2ZXJsZXNzQ29uZmlnID0ge307XG5cbiAgdHJ5IHtcbiAgICAvLyBVc2UgZ2V0UGFja2FnZURpciB0byBoYW5kbGUgbnBtIHdvcmtzcGFjZXMgY29ycmVjdGx5XG4gICAgY29uc3QgcGFja2FnZURpciA9IGdldFBhY2thZ2VEaXIoKTtcblxuICAgIC8vIFRyeSBtdWx0aXBsZSBjb25maWcgZmlsZSBmb3JtYXRzXG4gICAgY29uc3QgY29uZmlnRm9ybWF0cyA9IGNvbmZpZyA/IFtjb25maWddIDogW1xuICAgICAgcGF0aFJlc29sdmUocGFja2FnZURpciwgJ2xleC5jb25maWcubWpzJyksXG4gICAgICBwYXRoUmVzb2x2ZShwYWNrYWdlRGlyLCAnbGV4LmNvbmZpZy5qcycpLFxuICAgICAgcGF0aFJlc29sdmUocGFja2FnZURpciwgJ2xleC5jb25maWcuY2pzJyksXG4gICAgICBwYXRoUmVzb2x2ZShwYWNrYWdlRGlyLCAnbGV4LmNvbmZpZy50cycpXG4gICAgXTtcblxuICAgIGxldCBjb25maWdQYXRoOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgICBmb3IoY29uc3QgY2FuZGlkYXRlUGF0aCBvZiBjb25maWdGb3JtYXRzKSB7XG4gICAgICBpZihleGlzdHNTeW5jKGNhbmRpZGF0ZVBhdGgpKSB7XG4gICAgICAgIGNvbmZpZ1BhdGggPSBjYW5kaWRhdGVQYXRoO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZihjb25maWdQYXRoKSB7XG4gICAgICBsb2coYExvYWRpbmcgc2VydmVybGVzcyBjb25maWcgZnJvbTogJHtjb25maWdQYXRofWAsICdpbmZvJywgcXVpZXQpO1xuICAgICAgY29uc3QgY29uZmlnTW9kdWxlID0gYXdhaXQgaW1wb3J0KGNvbmZpZ1BhdGgpO1xuICAgICAgc2VydmVybGVzc0NvbmZpZyA9IGNvbmZpZ01vZHVsZS5kZWZhdWx0Py5zZXJ2ZXJsZXNzIHx8IGNvbmZpZ01vZHVsZS5zZXJ2ZXJsZXNzIHx8IHt9O1xuICAgICAgbG9nKCdTZXJ2ZXJsZXNzIGNvbmZpZyBsb2FkZWQgc3VjY2Vzc2Z1bGx5JywgJ2luZm8nLCBxdWlldCk7XG4gICAgICBjb25zdCBmdW5jdGlvbk5hbWVzID0gT2JqZWN0LmtleXMoc2VydmVybGVzc0NvbmZpZy5mdW5jdGlvbnMgfHwge30pO1xuICAgICAgbG9nKGBMb2FkZWQgZnVuY3Rpb25zOiAke2Z1bmN0aW9uTmFtZXMubGVuZ3RoID4gMCA/IGZ1bmN0aW9uTmFtZXMuam9pbignLCAnKSA6ICdub25lJ31gLCAnaW5mbycsIHF1aWV0KTtcblxuICAgICAgLy8gRGVidWc6IFByaW50IGZ1bGwgY29uZmlnIGlmIGRlYnVnIG1vZGVcbiAgICAgIGlmKGRlYnVnKSB7XG4gICAgICAgIGxvZyhgRnVsbCBzZXJ2ZXJsZXNzIGNvbmZpZzogJHtKU09OLnN0cmluZ2lmeShzZXJ2ZXJsZXNzQ29uZmlnLCBudWxsLCAyKX1gLCAnaW5mbycsIGZhbHNlKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgbG9nKGBObyBzZXJ2ZXJsZXNzIGNvbmZpZyBmb3VuZC4gVHJpZWQ6ICR7Y29uZmlnRm9ybWF0cy5qb2luKCcsICcpfWAsICd3YXJuJywgcXVpZXQpO1xuICAgIH1cbiAgfSBjYXRjaChlcnJvcikge1xuICAgIGxvZyhgRXJyb3IgbG9hZGluZyBzZXJ2ZXJsZXNzIGNvbmZpZzogJHtlcnJvci5tZXNzYWdlfWAsICdlcnJvcicsIHF1aWV0KTtcbiAgICBpZihkZWJ1Zykge1xuICAgICAgbG9nKGBDb25maWcgZXJyb3Igc3RhY2s6ICR7ZXJyb3Iuc3RhY2t9YCwgJ2Vycm9yJywgZmFsc2UpO1xuICAgIH1cbiAgICAvLyBEb24ndCBleGl0LCBjb250aW51ZSB3aXRoIGVtcHR5IGNvbmZpZ1xuICB9XG5cbiAgLy8gTWVyZ2UgY29uZmlnIHdpdGggY29tbWFuZCBsaW5lIG9wdGlvbnNcbiAgLy8gRGV0ZXJtaW5lIGVmZmVjdGl2ZSBob3N0L3BvcnRzIHdpdGggY29ycmVjdCBwcmVjZWRlbmNlOiBDTEkgPiBjb25maWcgPiBkZWZhdWx0c1xuICBjb25zdCBjb25maWdPZmZsaW5lID0gc2VydmVybGVzc0NvbmZpZy5jdXN0b20/Llsnc2VydmVybGVzcy1vZmZsaW5lJ10gfHwge307XG4gIGNvbnN0IGVmZmVjdGl2ZUhvc3QgPSAoY2xpSG9zdCA/PyBjb25maWdPZmZsaW5lLmhvc3QgPz8gJ2xvY2FsaG9zdCcpIGFzIHN0cmluZztcbiAgY29uc3QgdG9OdW1iZXIgPSAodjogYW55LCBmYWxsYmFjazogbnVtYmVyKTogbnVtYmVyID0+IHtcbiAgICBpZih2ID09PSB1bmRlZmluZWQgfHwgdiA9PT0gbnVsbCB8fCB2ID09PSAnJykge1xuICAgICAgcmV0dXJuIGZhbGxiYWNrO1xuICAgIH1cblxuICAgIGNvbnN0IG4gPSB0eXBlb2YgdiA9PT0gJ251bWJlcicgPyB2IDogcGFyc2VJbnQoU3RyaW5nKHYpKTtcbiAgICByZXR1cm4gTnVtYmVyLmlzRmluaXRlKG4pID8gbiA6IGZhbGxiYWNrO1xuICB9O1xuICBjb25zdCBlZmZlY3RpdmVIdHRwUG9ydCA9IHRvTnVtYmVyKGNsaUh0dHBQb3J0ID8/IGNvbmZpZ09mZmxpbmUuaHR0cFBvcnQsIDUwMDApO1xuICBjb25zdCBlZmZlY3RpdmVIdHRwc1BvcnQgPSB0b051bWJlcihjbGlIdHRwc1BvcnQgPz8gY29uZmlnT2ZmbGluZS5odHRwc1BvcnQsIDUwMDEpO1xuICBjb25zdCBlZmZlY3RpdmVXc1BvcnQgPSB0b051bWJlcihjbGlXc1BvcnQgPz8gY29uZmlnT2ZmbGluZS53c1BvcnQsIDUwMDIpO1xuXG4gIGNvbnN0IGZpbmFsQ29uZmlnOiBTZXJ2ZXJsZXNzQ29uZmlnID0ge1xuICAgIC4uLnNlcnZlcmxlc3NDb25maWcsXG4gICAgY3VzdG9tOiB7XG4gICAgICAnc2VydmVybGVzcy1vZmZsaW5lJzoge1xuICAgICAgICBjb3JzOiBzZXJ2ZXJsZXNzQ29uZmlnLmN1c3RvbT8uWydzZXJ2ZXJsZXNzLW9mZmxpbmUnXT8uY29ycyAhPT0gZmFsc2UsXG4gICAgICAgIGhvc3Q6IGVmZmVjdGl2ZUhvc3QsXG4gICAgICAgIGh0dHBQb3J0OiBlZmZlY3RpdmVIdHRwUG9ydCxcbiAgICAgICAgaHR0cHNQb3J0OiBlZmZlY3RpdmVIdHRwc1BvcnQsXG4gICAgICAgIHdzUG9ydDogZWZmZWN0aXZlV3NQb3J0XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IG91dHB1dERpciA9IG91dHB1dEZ1bGxQYXRoIHx8ICdsaWInO1xuICBsb2coYFVzaW5nIG91dHB1dCBkaXJlY3Rvcnk6ICR7b3V0cHV0RGlyfWAsICdpbmZvJywgcXVpZXQpO1xuXG4gIHRyeSB7XG4gICAgc3Bpbm5lci5zdGFydCgnU3RhcnRpbmcgc2VydmVybGVzcyBkZXZlbG9wbWVudCBzZXJ2ZXIuLi4nKTtcblxuICAgIGNvbnN0IGh0dHBQb3J0ID0gZmluYWxDb25maWcuY3VzdG9tIVsnc2VydmVybGVzcy1vZmZsaW5lJ10hLmh0dHBQb3J0ITtcbiAgICBjb25zdCB3c1BvcnQgPSBmaW5hbENvbmZpZy5jdXN0b20hWydzZXJ2ZXJsZXNzLW9mZmxpbmUnXSEud3NQb3J0ITtcbiAgICBjb25zdCBob3N0ID0gZmluYWxDb25maWcuY3VzdG9tIVsnc2VydmVybGVzcy1vZmZsaW5lJ10hLmhvc3QhO1xuXG4gICAgbG9nKGBDcmVhdGluZyBIVFRQIHNlcnZlciBvbiAke2hvc3R9OiR7aHR0cFBvcnR9YCwgJ2luZm8nLCBxdWlldCk7XG4gICAgbG9nKGBDcmVhdGluZyBXZWJTb2NrZXQgc2VydmVyIG9uIHBvcnQgJHt3c1BvcnR9YCwgJ2luZm8nLCBxdWlldCk7XG5cbiAgICAvLyBDcmVhdGUgRXhwcmVzcyBzZXJ2ZXJcbiAgICBjb25zdCBleHByZXNzQXBwID0gYXdhaXQgY3JlYXRlRXhwcmVzc1NlcnZlcihcbiAgICAgIGZpbmFsQ29uZmlnLFxuICAgICAgb3V0cHV0RGlyLFxuICAgICAgaHR0cFBvcnQsXG4gICAgICBob3N0LFxuICAgICAgcXVpZXQsXG4gICAgICBkZWJ1Z1xuICAgICk7XG5cbiAgICAvLyBDcmVhdGUgV2ViU29ja2V0IHNlcnZlclxuICAgIGNvbnN0IHdzU2VydmVyID0gY3JlYXRlV2ViU29ja2V0U2VydmVyKFxuICAgICAgZmluYWxDb25maWcsXG4gICAgICBvdXRwdXREaXIsXG4gICAgICB3c1BvcnQsXG4gICAgICBxdWlldCxcbiAgICAgIGRlYnVnXG4gICAgKTtcblxuICAgIC8vIEhhbmRsZSBzZXJ2ZXIgZXJyb3JzXG4gICAgd3NTZXJ2ZXIub24oJ2Vycm9yJywgKGVycm9yKSA9PiB7XG4gICAgICBsb2coYFdlYlNvY2tldCBzZXJ2ZXIgZXJyb3I6ICR7ZXJyb3IubWVzc2FnZX1gLCAnZXJyb3InLCBxdWlldCk7XG4gICAgICBzcGlubmVyLmZhaWwoJ0ZhaWxlZCB0byBzdGFydCBXZWJTb2NrZXQgc2VydmVyLicpO1xuICAgICAgY2FsbGJhY2soMSk7XG4gICAgICByZXR1cm47XG4gICAgfSk7XG5cbiAgICAvLyBTdGFydCBFeHByZXNzIHNlcnZlclxuICAgIGNvbnN0IHNlcnZlciA9IGV4cHJlc3NBcHAubGlzdGVuKGh0dHBQb3J0LCBob3N0LCAoKSA9PiB7XG4gICAgICBzcGlubmVyLnN1Y2NlZWQoJ1NlcnZlcmxlc3MgZGV2ZWxvcG1lbnQgc2VydmVyIHN0YXJ0ZWQuJyk7XG5cbiAgICAgIGRpc3BsYXlTZXJ2ZXJTdGF0dXMoXG4gICAgICAgIGh0dHBQb3J0LFxuICAgICAgICBmaW5hbENvbmZpZy5jdXN0b20hWydzZXJ2ZXJsZXNzLW9mZmxpbmUnXSEuaHR0cHNQb3J0ISxcbiAgICAgICAgd3NQb3J0LFxuICAgICAgICBob3N0LFxuICAgICAgICBxdWlldFxuICAgICAgKTtcblxuICAgICAgZmV0Y2hQdWJsaWNJcCh1c2VQdWJsaWNJcCkudGhlbigocHVibGljSXApID0+IHtcbiAgICAgICAgaWYocHVibGljSXApIHtcbiAgICAgICAgICBkaXNwbGF5U2VydmVyU3RhdHVzKFxuICAgICAgICAgICAgaHR0cFBvcnQsXG4gICAgICAgICAgICBmaW5hbENvbmZpZy5jdXN0b20hWydzZXJ2ZXJsZXNzLW9mZmxpbmUnXSEuaHR0cHNQb3J0ISxcbiAgICAgICAgICAgIHdzUG9ydCxcbiAgICAgICAgICAgIGhvc3QsXG4gICAgICAgICAgICBxdWlldCxcbiAgICAgICAgICAgIHB1YmxpY0lwXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICAvLyBIYW5kbGUgRXhwcmVzcyBzZXJ2ZXIgZXJyb3JzXG4gICAgc2VydmVyLm9uKCdlcnJvcicsIChlcnJvcikgPT4ge1xuICAgICAgbG9nKGBFeHByZXNzIHNlcnZlciBlcnJvcjogJHtlcnJvci5tZXNzYWdlfWAsICdlcnJvcicsIHF1aWV0KTtcbiAgICAgIHNwaW5uZXIuZmFpbCgnRmFpbGVkIHRvIHN0YXJ0IEV4cHJlc3Mgc2VydmVyLicpO1xuICAgICAgY2FsbGJhY2soMSk7XG4gICAgICByZXR1cm47XG4gICAgfSk7XG5cbiAgICAvLyBIYW5kbGUgZ3JhY2VmdWwgc2h1dGRvd25cbiAgICBjb25zdCBzaHV0ZG93biA9ICgpID0+IHtcbiAgICAgIGxvZygnXFxuU2h1dHRpbmcgZG93biBzZXJ2ZXJsZXNzIGRldmVsb3BtZW50IHNlcnZlci4uLicsICdpbmZvJywgcXVpZXQpO1xuICAgICAgc2VydmVyLmNsb3NlKCk7XG4gICAgICB3c1NlcnZlci5jbG9zZSgpO1xuICAgICAgY2FsbGJhY2soMCk7XG4gICAgfTtcblxuICAgIHByb2Nlc3Mub24oJ1NJR0lOVCcsIHNodXRkb3duKTtcbiAgICBwcm9jZXNzLm9uKCdTSUdURVJNJywgc2h1dGRvd24pO1xuXG4gICAgLy8gS2VlcCB0aGUgcHJvY2VzcyBhbGl2ZVxuICAgIHByb2Nlc3Muc3RkaW4ucmVzdW1lKCk7XG5cbiAgICBsb2coJ1NlcnZlcmxlc3MgZGV2ZWxvcG1lbnQgc2VydmVyIGlzIHJ1bm5pbmcuIFByZXNzIEN0cmwrQyB0byBzdG9wLicsICdpbmZvJywgcXVpZXQpO1xuXG4gICAgLy8gRG9uJ3QgY2FsbCBjYWxsYmFjayBoZXJlLCBsZXQgdGhlIHByb2Nlc3Mgc3RheSBhbGl2ZVxuICAgIHJldHVybiAwO1xuICB9IGNhdGNoKGVycm9yKSB7XG4gICAgbG9nKGBcXG4ke2NsaU5hbWV9IEVycm9yOiAke2Vycm9yLm1lc3NhZ2V9YCwgJ2Vycm9yJywgcXVpZXQpO1xuICAgIHNwaW5uZXIuZmFpbCgnRmFpbGVkIHRvIHN0YXJ0IHNlcnZlcmxlc3MgZGV2ZWxvcG1lbnQgc2VydmVyLicpO1xuICAgIGNhbGxiYWNrKDEpO1xuICAgIHJldHVybiAxO1xuICB9XG59OyJdLCJuYW1lcyI6WyJib3hlbiIsImNoYWxrIiwiZXhwcmVzcyIsInJlYWRGaWxlU3luYyIsImV4aXN0c1N5bmMiLCJta2RpclN5bmMiLCJ3cml0ZUZpbGVTeW5jIiwiaG9tZWRpciIsInJlc29sdmUiLCJwYXRoUmVzb2x2ZSIsImpvaW4iLCJpc0Fic29sdXRlIiwicGF0aFRvRmlsZVVSTCIsIldlYlNvY2tldFNlcnZlciIsIkxleENvbmZpZyIsImdldFBhY2thZ2VEaXIiLCJjcmVhdGVTcGlubmVyIiwicmVtb3ZlRmlsZXMiLCJsb2ciLCJnZXRDYWNoZURpciIsImNhY2hlRGlyIiwicmVjdXJzaXZlIiwiZ2V0Q2FjaGVQYXRoIiwicmVhZFB1YmxpY0lwQ2FjaGUiLCJjYWNoZVBhdGgiLCJjYWNoZURhdGEiLCJjYWNoZSIsIkpTT04iLCJwYXJzZSIsIm9uZVdlZWtNcyIsIkRhdGUiLCJub3ciLCJ0aW1lc3RhbXAiLCJ3cml0ZVB1YmxpY0lwQ2FjaGUiLCJpcCIsInN0cmluZ2lmeSIsImZldGNoUHVibGljSXAiLCJmb3JjZVJlZnJlc2giLCJQcm9taXNlIiwiY2FjaGVkIiwiZmV0Y2giLCJ0aGVuIiwicmVzIiwidGV4dCIsImRhdGEiLCJ0cmltIiwiY2F0Y2giLCJ1bmRlZmluZWQiLCJkaXNwbGF5U2VydmVyU3RhdHVzIiwiaHR0cFBvcnQiLCJodHRwc1BvcnQiLCJ3c1BvcnQiLCJob3N0IiwicXVpZXQiLCJwdWJsaWNJcCIsImh0dHBVcmwiLCJodHRwc1VybCIsIndzVXJsIiwid3NzVXJsIiwidXJsTGluZXMiLCJncmVlbiIsInVuZGVybGluZSIsInN0YXR1c0JveCIsImN5YW4iLCJib2xkIiwieWVsbG93IiwiYmFja2dyb3VuZENvbG9yIiwiYm9yZGVyQ29sb3IiLCJib3JkZXJTdHlsZSIsIm1hcmdpbiIsInBhZGRpbmciLCJjb25zb2xlIiwibG9hZEhhbmRsZXIiLCJoYW5kbGVyUGF0aCIsIm91dHB1dERpciIsImhhbmRsZXJQYXJ0cyIsInNwbGl0IiwiZmlsZVBhdGgiLCJleHBvcnROYW1lIiwibGVuZ3RoIiwic2xpY2UiLCJpbmNsdWRlcyIsImVycm9yIiwicGF0aFBhcnRzIiwibGFzdFBhcnQiLCJmdWxsUGF0aCIsImV4dGVuc2lvbnMiLCJwYXRoV2l0aG91dEV4dCIsInJlcGxhY2UiLCJleHQiLCJjYW5kaWRhdGVQYXRoIiwiRXJyb3IiLCJpbXBvcnRQYXRoIiwiZW5kc1dpdGgiLCJpbXBvcnRVcmwiLCJocmVmIiwiaGFuZGxlck1vZHVsZSIsIk9iamVjdCIsImtleXMiLCJoYW5kbGVyIiwiZGVmYXVsdCIsImltcG9ydEVycm9yIiwibWVzc2FnZSIsInN0YWNrIiwiY2FwdHVyZUNvbnNvbGVMb2dzIiwiZXZlbnQiLCJjb250ZXh0Iiwib3JpZ2luYWxDb25zb2xlTG9nIiwib3JpZ2luYWxDb25zb2xlRXJyb3IiLCJvcmlnaW5hbENvbnNvbGVXYXJuIiwid2FybiIsIm9yaWdpbmFsQ29uc29sZUluZm8iLCJpbmZvIiwibG9ncyIsImFyZ3MiLCJwdXNoIiwicmVzdWx0IiwiZ3JheSIsImZvckVhY2giLCJjcmVhdGVFeHByZXNzU2VydmVyIiwiY29uZmlnIiwiZGVidWciLCJhcHAiLCJ1c2UiLCJyZXEiLCJuZXh0IiwiaGVhZGVyIiwibWV0aG9kIiwic2VuZFN0YXR1cyIsImpzb24iLCJsb2FkR3JhcGhRTFNjaGVtYSIsImdyYXBocWxIYW5kbGVyIiwiZnVuY3Rpb25zIiwiZnVuY3Rpb25OYW1lIiwiZnVuY3Rpb25Db25maWciLCJlbnRyaWVzIiwiZXZlbnRzIiwiaHR0cCIsInBhdGgiLCJncmFwaHFsUGF0aCIsIl9mdW5jdGlvbk5hbWUiLCJib2R5IiwicXVlcnkiLCJ2YXJpYWJsZXMiLCJvcGVyYXRpb25OYW1lIiwibG9nTWVzc2FnZSIsIm1hcCIsImFyZyIsIlN0cmluZyIsImF3c1JlcXVlc3RJZCIsImZ1bmN0aW9uVmVyc2lvbiIsImdldFJlbWFpbmluZ1RpbWVJbk1pbGxpcyIsImludm9rZWRGdW5jdGlvbkFybiIsImxvZ0dyb3VwTmFtZSIsImxvZ1N0cmVhbU5hbWUiLCJ3cmFwcGVkSGFuZGxlciIsImhlYWRlcnMiLCJodHRwTWV0aG9kIiwicXVlcnlTdHJpbmdQYXJhbWV0ZXJzIiwic3RhdHVzQ29kZSIsInN0YXR1cyIsImtleSIsInZhbHVlIiwic2V0SGVhZGVyIiwic2VuZCIsInVybCIsInBhdGhuYW1lIiwibWF0Y2hlZEZ1bmN0aW9uIiwiZnVuY3Rpb25OYW1lcyIsImV2ZW50UGF0aCIsImV2ZW50TWV0aG9kIiwidG9VcHBlckNhc2UiLCJyZXF1ZXN0TWV0aG9kIiwibm9ybWFsaXplZEV2ZW50UGF0aCIsIm5vcm1hbGl6ZWRQYXRobmFtZSIsIm1lbW9yeUxpbWl0SW5NQiIsImNyZWF0ZVdlYlNvY2tldFNlcnZlciIsIndzcyIsInBvcnQiLCJvbiIsIndzIiwidG9TdHJpbmciLCJ3ZWJzb2NrZXQiLCJyb3V0ZSIsImFjdGlvbiIsInJlcXVlc3RDb250ZXh0IiwiYXBpR2F0ZXdheSIsImVuZHBvaW50IiwiY29ubmVjdGlvbklkIiwicm91dGVLZXkiLCJsb2FkRW52RmlsZSIsImVudlBhdGgiLCJlbnZWYXJzIiwiZW52Q29udGVudCIsImxpbmVzIiwibGluZSIsInRyaW1tZWRMaW5lIiwic3RhcnRzV2l0aCIsImVxdWFsSW5kZXgiLCJpbmRleE9mIiwic3Vic3RyaW5nIiwiY2xlYW5WYWx1ZSIsInNlcnZlcmxlc3MiLCJjbWQiLCJjYWxsYmFjayIsImNsaU5hbWUiLCJjbGlIb3N0IiwiY2xpSHR0cFBvcnQiLCJjbGlIdHRwc1BvcnQiLCJyZW1vdmUiLCJ0ZXN0IiwidXNlUHVibGljSXAiLCJjbGlXc1BvcnQiLCJzcGlubmVyIiwicGFyc2VDb25maWciLCJvdXRwdXRGdWxsUGF0aCIsImVudlBhdGhzIiwicHJvY2VzcyIsImN3ZCIsImZpbGVFbnZWYXJzIiwidmFyaWFibGVzT2JqIiwiTk9ERV9FTlYiLCJjbGlWYXJzIiwiX2Vycm9yIiwiZW52Iiwic3RhcnQiLCJzdWNjZWVkIiwic2VydmVybGVzc0NvbmZpZyIsInBhY2thZ2VEaXIiLCJjb25maWdGb3JtYXRzIiwiY29uZmlnUGF0aCIsImNvbmZpZ01vZHVsZSIsImNvbmZpZ09mZmxpbmUiLCJjdXN0b20iLCJlZmZlY3RpdmVIb3N0IiwidG9OdW1iZXIiLCJ2IiwiZmFsbGJhY2siLCJuIiwicGFyc2VJbnQiLCJOdW1iZXIiLCJpc0Zpbml0ZSIsImVmZmVjdGl2ZUh0dHBQb3J0IiwiZWZmZWN0aXZlSHR0cHNQb3J0IiwiZWZmZWN0aXZlV3NQb3J0IiwiZmluYWxDb25maWciLCJjb3JzIiwiZXhwcmVzc0FwcCIsIndzU2VydmVyIiwiZmFpbCIsInNlcnZlciIsImxpc3RlbiIsInNodXRkb3duIiwiY2xvc2UiLCJzdGRpbiIsInJlc3VtZSJdLCJtYXBwaW5ncyI6IkFBQUE7OztDQUdDLEdBQ0QsT0FBT0EsV0FBVyxRQUFRO0FBQzFCLE9BQU9DLFdBQVcsUUFBUTtBQUMxQixPQUFPQyxhQUFhLFVBQVU7QUFDOUIsU0FBUUMsWUFBWSxFQUFFQyxVQUFVLEVBQUVDLFNBQVMsRUFBRUMsYUFBYSxRQUFPLEtBQUs7QUFDdEUsU0FBUUMsT0FBTyxRQUFPLEtBQUs7QUFDM0IsU0FBUUMsV0FBV0MsV0FBVyxFQUFFQyxJQUFJLEVBQUVDLFVBQVUsUUFBTyxPQUFPO0FBQzlELFNBQVFDLGFBQWEsUUFBTyxNQUFNO0FBQ2xDLFNBQVFDLGVBQWUsUUFBTyxLQUFLO0FBRW5DLFNBQVFDLFNBQVMsRUFBRUMsYUFBYSxRQUFPLHFCQUFxQjtBQUM1RCxTQUFRQyxhQUFhLEVBQUVDLFdBQVcsUUFBTyxxQkFBcUI7QUFDOUQsU0FBUUMsR0FBRyxRQUFPLHFCQUFxQjtBQW1EdkMsTUFBTUMsY0FBYztJQUNsQixNQUFNQyxXQUFXVixLQUFLSCxXQUFXO0lBQ2pDLElBQUcsQ0FBQ0gsV0FBV2dCLFdBQVc7UUFDeEJmLFVBQVVlLFVBQVU7WUFBQ0MsV0FBVztRQUFJO0lBQ3RDO0lBQ0EsT0FBT0Q7QUFDVDtBQUVBLE1BQU1FLGVBQWUsSUFBY1osS0FBS1MsZUFBZTtBQUV2RCxNQUFNSSxvQkFBb0I7SUFDeEIsTUFBTUMsWUFBWUY7SUFDbEIsSUFBRyxDQUFDbEIsV0FBV29CLFlBQVk7UUFDekIsT0FBTztJQUNUO0lBRUEsSUFBSTtRQUNGLE1BQU1DLFlB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
|
|
823
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21tYW5kcy9zZXJ2ZXJsZXNzL3NlcnZlcmxlc3MudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTgtUHJlc2VudCwgTml0cm9nZW4gTGFicywgSW5jLlxuICogQ29weXJpZ2h0cyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuIFNlZSB0aGUgYWNjb21wYW55aW5nIExJQ0VOU0UgZmlsZSBmb3IgdGVybXMuXG4gKi9cbmltcG9ydCBib3hlbiBmcm9tICdib3hlbic7XG5pbXBvcnQgY2hhbGsgZnJvbSAnY2hhbGsnO1xuaW1wb3J0IGV4cHJlc3MgZnJvbSAnZXhwcmVzcyc7XG5pbXBvcnQge3JlYWRGaWxlU3luYywgZXhpc3RzU3luYywgbWtkaXJTeW5jLCB3cml0ZUZpbGVTeW5jfSBmcm9tICdmcyc7XG5pbXBvcnQge2hvbWVkaXJ9IGZyb20gJ29zJztcbmltcG9ydCB7cmVzb2x2ZSBhcyBwYXRoUmVzb2x2ZSwgam9pbiwgaXNBYnNvbHV0ZX0gZnJvbSAncGF0aCc7XG5pbXBvcnQge3BhdGhUb0ZpbGVVUkx9IGZyb20gJ3VybCc7XG5pbXBvcnQge1dlYlNvY2tldFNlcnZlcn0gZnJvbSAnd3MnO1xuXG5pbXBvcnQge0xleENvbmZpZywgZ2V0UGFja2FnZURpcn0gZnJvbSAnLi4vLi4vTGV4Q29uZmlnLmpzJztcbmltcG9ydCB7Y3JlYXRlU3Bpbm5lciwgcmVtb3ZlRmlsZXN9IGZyb20gJy4uLy4uL3V0aWxzL2FwcC5qcyc7XG5pbXBvcnQge2xvZ30gZnJvbSAnLi4vLi4vdXRpbHMvbG9nLmpzJztcblxuZXhwb3J0IGludGVyZmFjZSBTZXJ2ZXJsZXNzT3B0aW9ucyB7XG4gIHJlYWRvbmx5IGNsaU5hbWU/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IGNvbmZpZz86IHN0cmluZztcbiAgcmVhZG9ubHkgZGVidWc/OiBib29sZWFuO1xuICByZWFkb25seSBob3N0Pzogc3RyaW5nO1xuICByZWFkb25seSBodHRwUG9ydD86IG51bWJlcjtcbiAgcmVhZG9ubHkgaHR0cHNQb3J0PzogbnVtYmVyO1xuICByZWFkb25seSBxdWlldD86IGJvb2xlYW47XG4gIHJlYWRvbmx5IHJlbW92ZT86IGJvb2xlYW47XG4gIHJlYWRvbmx5IHRlc3Q/OiBib29sZWFuO1xuICByZWFkb25seSB1c2VQdWJsaWNJcD86IGJvb2xlYW47XG4gIHJlYWRvbmx5IHZhcmlhYmxlcz86IHN0cmluZztcbiAgcmVhZG9ubHkgd3NQb3J0PzogbnVtYmVyO1xufVxuXG5leHBvcnQgdHlwZSBTZXJ2ZXJsZXNzQ2FsbGJhY2sgPSAoc3RhdHVzOiBudW1iZXIpID0+IHZvaWQ7XG5cbmludGVyZmFjZSBQdWJsaWNJcENhY2hlIHtcbiAgaXA6IHN0cmluZztcbiAgdGltZXN0YW1wOiBudW1iZXI7XG59XG5cbmludGVyZmFjZSBTZXJ2ZXJsZXNzSGFuZGxlciB7XG4gIHJlYWRvbmx5IGhhbmRsZXI6IHN0cmluZztcbiAgcmVhZG9ubHkgZXZlbnRzPzogQXJyYXk8e1xuICAgIHJlYWRvbmx5IGh0dHA/OiB7XG4gICAgICByZWFkb25seSBjb3JzPzogYm9vbGVhbjtcbiAgICAgIHJlYWRvbmx5IG1ldGhvZD86IHN0cmluZztcbiAgICAgIHJlYWRvbmx5IHBhdGg/OiBzdHJpbmc7XG4gICAgfTtcbiAgICByZWFkb25seSB3ZWJzb2NrZXQ/OiB7XG4gICAgICByZWFkb25seSByb3V0ZT86IHN0cmluZztcbiAgICB9O1xuICB9Pjtcbn1cblxuaW50ZXJmYWNlIFNlcnZlcmxlc3NDb25maWcge1xuICByZWFkb25seSBjdXN0b20/OiB7XG4gICAgcmVhZG9ubHkgJ3NlcnZlcmxlc3Mtb2ZmbGluZSc/OiB7XG4gICAgICByZWFkb25seSBjb3JzPzogYm9vbGVhbjtcbiAgICAgIHJlYWRvbmx5IGhvc3Q/OiBzdHJpbmc7XG4gICAgICByZWFkb25seSBodHRwUG9ydD86IG51bWJlcjtcbiAgICAgIHJlYWRvbmx5IGh0dHBzUG9ydD86IG51bWJlcjtcbiAgICAgIHJlYWRvbmx5IHdzUG9ydD86IG51bWJlcjtcbiAgICB9O1xuICB9O1xuICByZWFkb25seSBmdW5jdGlvbnM/OiBSZWNvcmQ8c3RyaW5nLCBTZXJ2ZXJsZXNzSGFuZGxlcj47XG59XG5cbmNvbnN0IGdldENhY2hlRGlyID0gKCk6IHN0cmluZyA9PiB7XG4gIGNvbnN0IGNhY2hlRGlyID0gam9pbihob21lZGlyKCksICcubGV4LWNhY2hlJyk7XG4gIGlmKCFleGlzdHNTeW5jKGNhY2hlRGlyKSkge1xuICAgIG1rZGlyU3luYyhjYWNoZURpciwge3JlY3Vyc2l2ZTogdHJ1ZX0pO1xuICB9XG4gIHJldHVybiBjYWNoZURpcjtcbn07XG5cbmNvbnN0IGdldENhY2hlUGF0aCA9ICgpOiBzdHJpbmcgPT4gam9pbihnZXRDYWNoZURpcigpLCAncHVibGljLWlwLmpzb24nKTtcblxuY29uc3QgcmVhZFB1YmxpY0lwQ2FjaGUgPSAoKTogUHVibGljSXBDYWNoZSB8IG51bGwgPT4ge1xuICBjb25zdCBjYWNoZVBhdGggPSBnZXRDYWNoZVBhdGgoKTtcbiAgaWYoIWV4aXN0c1N5bmMoY2FjaGVQYXRoKSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBjYWNoZURhdGEgPSByZWFkRmlsZVN5bmMoY2FjaGVQYXRoLCAndXRmOCcpO1xuICAgIGNvbnN0IGNhY2hlOiBQdWJsaWNJcENhY2hlID0gSlNPTi5wYXJzZShjYWNoZURhdGEpO1xuXG4gICAgLy8gQ2hlY2sgaWYgY2FjaGUgaXMgb2xkZXIgdGhhbiAxIHdlZWtcbiAgICBjb25zdCBvbmVXZWVrTXMgPSA3ICogMjQgKiA2MCAqIDYwICogMTAwMDtcbiAgICBpZihEYXRlLm5vdygpIC0gY2FjaGUudGltZXN0YW1wID4gb25lV2Vla01zKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gY2FjaGU7XG4gIH0gY2F0Y2h7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn07XG5cbmNvbnN0IHdyaXRlUHVibGljSXBDYWNoZSA9IChpcDogc3RyaW5nKTogdm9pZCA9PiB7XG4gIGNvbnN0IGNhY2hlUGF0aCA9IGdldENhY2hlUGF0aCgpO1xuICBjb25zdCBjYWNoZTogUHVibGljSXBDYWNoZSA9IHtcbiAgICBpcCxcbiAgICB0aW1lc3RhbXA6IERhdGUubm93KClcbiAgfTtcbiAgd3JpdGVGaWxlU3luYyhjYWNoZVBhdGgsIEpTT04uc3RyaW5naWZ5KGNhY2hlLCBudWxsLCAyKSk7XG59O1xuXG5jb25zdCBmZXRjaFB1YmxpY0lwID0gKGZvcmNlUmVmcmVzaDogYm9vbGVhbiA9IGZhbHNlKTogUHJvbWlzZTxzdHJpbmcgfCB1bmRlZmluZWQ+ID0+IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gIGlmKCFmb3JjZVJlZnJlc2gpIHtcbiAgICBjb25zdCBjYWNoZWQgPSByZWFkUHVibGljSXBDYWNoZSgpO1xuICAgIGlmKGNhY2hlZCkge1xuICAgICAgcmVzb2x2ZShjYWNoZWQuaXApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuXG4gIC8vIFVzZSBmZXRjaCBpbnN0ZWFkIG9mIGh0dHBzXG4gIGZldGNoKCdodHRwczovL2FwaS5pcGlmeS5vcmcnKVxuICAgIC50aGVuKChyZXMpID0+IHJlcy50ZXh0KCkpXG4gICAgLnRoZW4oKGRhdGEpID0+IHtcbiAgICAgIGNvbnN0IGlwID0gZGF0YS50cmltKCk7XG4gICAgICBpZihpcCkge1xuICAgICAgICB3cml0ZVB1YmxpY0lwQ2FjaGUoaXApO1xuICAgICAgfVxuICAgICAgcmVzb2x2ZShpcCk7XG4gICAgfSlcbiAgICAuY2F0Y2goKCkgPT4gcmVzb2x2ZSh1bmRlZmluZWQpKTtcbn0pO1xuXG5jb25zdCBkaXNwbGF5U2VydmVyU3RhdHVzID0gKFxuICBodHRwUG9ydDogbnVtYmVyLFxuICBodHRwc1BvcnQ6IG51bWJlcixcbiAgd3NQb3J0OiBudW1iZXIsXG4gIGhvc3Q6IHN0cmluZyxcbiAgcXVpZXQ6IGJvb2xlYW4sXG4gIHB1YmxpY0lwPzogc3RyaW5nXG4pID0+IHtcbiAgaWYocXVpZXQpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBodHRwVXJsID0gYGh0dHA6Ly8ke2hvc3R9OiR7aHR0cFBvcnR9YDtcbiAgY29uc3QgaHR0cHNVcmwgPSBgaHR0cHM6Ly8ke2hvc3R9OiR7aHR0cHNQb3J0fWA7XG4gIGNvbnN0IHdzVXJsID0gYHdzOi8vJHtob3N0fToke3dzUG9ydH1gO1xuICBjb25zdCB3c3NVcmwgPSBgd3NzOi8vJHtob3N0fToke3dzUG9ydH1gO1xuXG4gIGxldCB1cmxMaW5lcyA9IGAke2NoYWxrLmdyZWVuKCdIVFRQOicpfSAgICAgICR7Y2hhbGsudW5kZXJsaW5lKGh0dHBVcmwpfVxcbmA7XG4gIHVybExpbmVzICs9IGAke2NoYWxrLmdyZWVuKCdIVFRQUzonKX0gICAgICR7Y2hhbGsudW5kZXJsaW5lKGh0dHBzVXJsKX1cXG5gO1xuICB1cmxMaW5lcyArPSBgJHtjaGFsay5ncmVlbignV2ViU29ja2V0OicpfSAke2NoYWxrLnVuZGVybGluZSh3c1VybCl9XFxuYDtcbiAgdXJsTGluZXMgKz0gYCR7Y2hhbGsuZ3JlZW4oJ1dTUzonKX0gICAgICAgJHtjaGFsay51bmRlcmxpbmUod3NzVXJsKX1cXG5gO1xuXG4gIGlmKHB1YmxpY0lwKSB7XG4gICAgdXJsTGluZXMgKz0gYFxcbiR7Y2hhbGsuZ3JlZW4oJ1B1YmxpYzonKX0gICAgJHtjaGFsay51bmRlcmxpbmUoYGh0dHA6Ly8ke3B1YmxpY0lwfToke2h0dHBQb3J0fWApfVxcbmA7XG4gIH1cblxuICBjb25zdCBzdGF0dXNCb3ggPSBib3hlbihcbiAgICBgJHtjaGFsay5jeWFuLmJvbGQoJ/CfmoAgU2VydmVybGVzcyBEZXZlbG9wbWVudCBTZXJ2ZXIgUnVubmluZycpfVxcblxcbiR7dXJsTGluZXN9XFxuYCArXG4gICAgYCR7Y2hhbGsueWVsbG93KCdQcmVzcyBDdHJsK0MgdG8gc3RvcCB0aGUgc2VydmVyJyl9YCxcbiAgICB7XG4gICAgICBiYWNrZ3JvdW5kQ29sb3I6ICcjMWExYTFhJyxcbiAgICAgIGJvcmRlckNvbG9yOiAnY3lhbicsXG4gICAgICBib3JkZXJTdHlsZTogJ3JvdW5kJyxcbiAgICAgIG1hcmdpbjogMSxcbiAgICAgIHBhZGRpbmc6IDFcbiAgICB9XG4gICk7XG5cbiAgY29uc29sZS5sb2coYFxcbiR7c3RhdHVzQm94fVxcbmApO1xufTtcblxuY29uc3QgbG9hZEhhbmRsZXIgPSBhc3luYyAoaGFuZGxlclBhdGg6IHN0cmluZywgb3V0cHV0RGlyOiBzdHJpbmcpID0+IHtcbiAgdHJ5IHtcbiAgICBjb25zb2xlLmxvZyhgW1NlcnZlcmxlc3NdIFBhcnNpbmcgaGFuZGxlciBwYXRoOiAke2hhbmRsZXJQYXRofWApO1xuXG4gICAgLy8gUGFyc2UgQVdTIExhbWJkYSBoYW5kbGVyIGZvcm1hdDogXCJwYXRoL3RvL2ZpbGUuZXhwb3J0TmFtZVwiIG9yIFwiZmlsZS5leHBvcnROYW1lXCJcbiAgICAvLyBFeGFtcGxlczogXCJpbmRleC5oYW5kbGVyXCIsIFwiaGFuZGxlcnMvYXBpLmhhbmRsZXJcIiwgXCJzcmMvaW5kZXguZGVmYXVsdFwiXG4gICAgY29uc3QgaGFuZGxlclBhcnRzID0gaGFuZGxlclBhdGguc3BsaXQoJy4nKTtcbiAgICBjb25zb2xlLmxvZygnW1NlcnZlcmxlc3NdIEhhbmRsZXIgcGFydHMgYWZ0ZXIgc3BsaXQ6JywgaGFuZGxlclBhcnRzKTtcblxuICAgIGxldCBmaWxlUGF0aDogc3RyaW5nO1xuICAgIGxldCBleHBvcnROYW1lOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcblxuICAgIGlmKGhhbmRsZXJQYXJ0cy5sZW5ndGggPiAxKSB7XG4gICAgICAvLyBBV1MgTGFtYmRhIGZvcm1hdDogXCJmaWxlLmV4cG9ydE5hbWVcIlxuICAgICAgLy8gVGFrZSB0aGUgbGFzdCBwYXJ0IGFzIGV4cG9ydCBuYW1lLCByZXN0IGFzIGZpbGUgcGF0aFxuICAgICAgLy8gSGFuZGxlIGNhc2VzIGxpa2UgXCJpbmRleC5oYW5kbGVyXCIgLT4gZmlsZTogXCJpbmRleFwiLCBleHBvcnQ6IFwiaGFuZGxlclwiXG4gICAgICAvLyBPciBcImhhbmRsZXJzL2FwaS5oYW5kbGVyXCIgLT4gZmlsZTogXCJoYW5kbGVycy9hcGlcIiwgZXhwb3J0OiBcImhhbmRsZXJcIlxuICAgICAgZXhwb3J0TmFtZSA9IGhhbmRsZXJQYXJ0c1toYW5kbGVyUGFydHMubGVuZ3RoIC0gMV0gfHwgbnVsbDtcbiAgICAgIGZpbGVQYXRoID0gaGFuZGxlclBhcnRzLnNsaWNlKDAsIC0xKS5qb2luKCcuJyk7XG4gICAgICBjb25zb2xlLmxvZyhgW1NlcnZlcmxlc3NdIFBhcnNlZCBBV1MgTGFtYmRhIGZvcm1hdCAtIGZpbGVQYXRoOiBcIiR7ZmlsZVBhdGh9XCIsIGV4cG9ydE5hbWU6IFwiJHtleHBvcnROYW1lfVwiYCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFNpbXBsZSBmb3JtYXQ6IGp1c3QgdGhlIGZpbGUgcGF0aFxuICAgICAgZmlsZVBhdGggPSBoYW5kbGVyUGF0aDtcbiAgICAgIGNvbnNvbGUubG9nKGBbU2VydmVybGVzc10gU2ltcGxlIGZvcm1hdCAtIGZpbGVQYXRoOiBcIiR7ZmlsZVBhdGh9XCJgKTtcbiAgICB9XG5cbiAgICAvLyBFbnN1cmUgZmlsZVBhdGggZG9lc24ndCBoYXZlIHRoZSBleHBvcnQgbmFtZSBpbiBpdFxuICAgIGlmKGZpbGVQYXRoLmluY2x1ZGVzKCcuaGFuZGxlcicpIHx8IGZpbGVQYXRoLmluY2x1ZGVzKCcuZGVmYXVsdCcpKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGBbU2VydmVybGVzc10gV0FSTklORzogZmlsZVBhdGggc3RpbGwgY29udGFpbnMgZXhwb3J0IG5hbWUhIGZpbGVQYXRoOiBcIiR7ZmlsZVBhdGh9XCJgKTtcbiAgICAgIC8vIFRyeSB0byBmaXggaXQgLSByZW1vdmUgdGhlIGxhc3QgcGFydCBpZiBpdCBsb29rcyBsaWtlIGFuIGV4cG9ydCBuYW1lXG4gICAgICBjb25zdCBwYXRoUGFydHMgPSBmaWxlUGF0aC5zcGxpdCgnLicpO1xuICAgICAgaWYocGF0aFBhcnRzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgY29uc3QgbGFzdFBhcnQgPSBwYXRoUGFydHNbcGF0aFBhcnRzLmxlbmd0aCAtIDFdO1xuICAgICAgICBpZihbJ2hhbmRsZXInLCAnZGVmYXVsdCcsICdpbmRleCddLmluY2x1ZGVzKGxhc3RQYXJ0KSAmJiAhZXhwb3J0TmFtZSkge1xuICAgICAgICAgIGV4cG9ydE5hbWUgPSBsYXN0UGFydDtcbiAgICAgICAgICBmaWxlUGF0aCA9IHBhdGhQYXJ0cy5zbGljZSgwLCAtMSkuam9pbignLicpO1xuICAgICAgICAgIGNvbnNvbGUubG9nKGBbU2VydmVybGVzc10gRml4ZWQgLSBmaWxlUGF0aDogXCIke2ZpbGVQYXRofVwiLCBleHBvcnROYW1lOiBcIiR7ZXhwb3J0TmFtZX1cImApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gSGFuZGxlIGJvdGggcmVsYXRpdmUgcGF0aHMgYW5kIGFic29sdXRlIHBhdGhzXG4gICAgbGV0IGZ1bGxQYXRoOiBzdHJpbmc7XG4gICAgaWYoaXNBYnNvbHV0ZShmaWxlUGF0aCkpIHtcbiAgICAgIGZ1bGxQYXRoID0gZmlsZVBhdGg7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZ1bGxQYXRoID0gcGF0aFJlc29sdmUob3V0cHV0RGlyLCBmaWxlUGF0aCk7XG4gICAgfVxuICAgIGNvbnNvbGUubG9nKGBbU2VydmVybGVzc10gUmVzb2x2ZWQgZnVsbFBhdGggKGJlZm9yZSBleHRlbnNpb25zKTogJHtmdWxsUGF0aH1gKTtcblxuICAgIC8vIFRyeSBkaWZmZXJlbnQgZXh0ZW5zaW9ucyBpZiBmaWxlIGRvZXNuJ3QgZXhpc3RcbiAgICBpZighZXhpc3RzU3luYyhmdWxsUGF0aCkpIHtcbiAgICAgIGNvbnN0IGV4dGVuc2lvbnMgPSBbJy5qcycsICcubWpzJywgJy5janMnXTtcbiAgICAgIGNvbnN0IHBhdGhXaXRob3V0RXh0ID0gZnVsbFBhdGgucmVwbGFjZSgvXFwuKGpzfG1qc3xjanMpJC8sICcnKTtcbiAgICAgIGNvbnNvbGUubG9nKGBbU2VydmVybGVzc10gVHJ5aW5nIGV4dGVuc2lvbnMuIEJhc2UgcGF0aDogJHtwYXRoV2l0aG91dEV4dH1gKTtcbiAgICAgIGZvcihjb25zdCBleHQgb2YgZXh0ZW5zaW9ucykge1xuICAgICAgICBjb25zdCBjYW5kaWRhdGVQYXRoID0gcGF0aFdpdGhvdXRFeHQgKyBleHQ7XG4gICAgICAgIGNvbnNvbGUubG9nKGBbU2VydmVybGVzc10gQ2hlY2tpbmc6ICR7Y2FuZGlkYXRlUGF0aH0gKGV4aXN0czogJHtleGlzdHNTeW5jKGNhbmRpZGF0ZVBhdGgpfSlgKTtcbiAgICAgICAgaWYoZXhpc3RzU3luYyhjYW5kaWRhdGVQYXRoKSkge1xuICAgICAgICAgIGZ1bGxQYXRoID0gY2FuZGlkYXRlUGF0aDtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgW1NlcnZlcmxlc3NdIEZvdW5kIGZpbGUgd2l0aCBleHRlbnNpb246ICR7ZnVsbFBhdGh9YCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS5sb2coYFtTZXJ2ZXJsZXNzXSBGaWxlIGV4aXN0cyB3aXRob3V0IHRyeWluZyBleHRlbnNpb25zOiAke2Z1bGxQYXRofWApO1xuICAgIH1cblxuICAgIGNvbnNvbGUubG9nKGBbU2VydmVybGVzc10gRmluYWwgZnVsbFBhdGg6ICR7ZnVsbFBhdGh9YCk7XG4gICAgY29uc29sZS5sb2coYFtTZXJ2ZXJsZXNzXSBFeHBvcnQgbmFtZTogJHtleHBvcnROYW1lIHx8ICdkZWZhdWx0L2hhbmRsZXInfWApO1xuICAgIGNvbnNvbGUubG9nKGBbU2VydmVybGVzc10gRmlsZSBleGlzdHM6ICR7ZXhpc3RzU3luYyhmdWxsUGF0aCl9YCk7XG5cbiAgICBpZighZXhpc3RzU3luYyhmdWxsUGF0aCkpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoYFtTZXJ2ZXJsZXNzXSBIYW5kbGVyIGZpbGUgbm90IGZvdW5kOiAke2Z1bGxQYXRofWApO1xuICAgICAgY29uc29sZS5lcnJvcihgW1NlcnZlcmxlc3NdIE91dHB1dCBkaXJlY3Rvcnk6ICR7b3V0cHV0RGlyfWApO1xuICAgICAgY29uc29sZS5lcnJvcihgW1NlcnZlcmxlc3NdIEhhbmRsZXIgcGF0aCBmcm9tIGNvbmZpZzogJHtoYW5kbGVyUGF0aH1gKTtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgSGFuZGxlciBmaWxlIG5vdCBmb3VuZDogJHtmdWxsUGF0aH1gKTtcbiAgICB9XG5cbiAgICAvLyBEeW5hbWljIGltcG9ydCBvZiB0aGUgaGFuZGxlciB3aXRoIGJldHRlciBlcnJvciBoYW5kbGluZ1xuICAgIC8vIEFkZCAuanMgZXh0ZW5zaW9uIGlmIGltcG9ydGluZyBUeXBlU2NyaXB0IGNvbXBpbGVkIG91dHB1dFxuICAgIGNvbnN0IGltcG9ydFBhdGggPSBmdWxsUGF0aC5lbmRzV2l0aCgnLnRzJykgPyBmdWxsUGF0aC5yZXBsYWNlKC9cXC50cyQvLCAnLmpzJykgOiBmdWxsUGF0aDtcblxuICAgIHRyeSB7XG4gICAgICAvLyBDb252ZXJ0IHRvIGZpbGU6Ly8gVVJMIGZvciBFUyBtb2R1bGUgaW1wb3J0cyAocmVxdWlyZWQgZm9yIGFic29sdXRlIHBhdGhzKVxuICAgICAgLy8gVXNlIHBhdGhUb0ZpbGVVUkwgdG8gZW5zdXJlIHByb3BlciBmaWxlOi8vIFVSTCBmb3JtYXRcbiAgICAgIGNvbnN0IGltcG9ydFVybCA9IHBhdGhUb0ZpbGVVUkwoaW1wb3J0UGF0aCkuaHJlZjtcbiAgICAgIGNvbnNvbGUubG9nKGBbU2VydmVybGVzc10gSW1wb3J0aW5nIGhhbmRsZXIgZnJvbTogJHtpbXBvcnRVcmx9YCk7XG4gICAgICBjb25zb2xlLmxvZyhgW1NlcnZlcmxlc3NdIEZpbGUgcGF0aDogJHtpbXBvcnRQYXRofWApO1xuXG4gICAgICAvLyBVc2UgaW1wb3J0KCkgd2l0aCB0aGUgZmlsZSBVUkxcbiAgICAgIC8vIE5vdGU6IElmIHRoZSBoYW5kbGVyIGZpbGUgaGFzIGltcG9ydCBlcnJvcnMgKGxpa2UgbWlzc2luZyBkZXBlbmRlbmNpZXMpLFxuICAgICAgLy8gdGhvc2Ugd2lsbCBzdXJmYWNlIGhlcmUsIGJ1dCB0aGF0J3MgYSBoYW5kbGVyIGNvZGUgaXNzdWUsIG5vdCBhIGxvYWRlciBpc3N1ZVxuICAgICAgY29uc3QgaGFuZGxlck1vZHVsZSA9IGF3YWl0IGltcG9ydChpbXBvcnRVcmwpO1xuICAgICAgY29uc29sZS5sb2coYFtTZXJ2ZXJsZXNzXSBIYW5kbGVyIG1vZHVsZSBsb2FkZWQgc3VjY2Vzc2Z1bGx5LiBFeHBvcnRzOiAke09iamVjdC5rZXlzKGhhbmRsZXJNb2R1bGUpLmpvaW4oJywgJyl9YCk7XG5cbiAgICAgIC8vIEdldCB0aGUgaGFuZGxlciBiYXNlZCBvbiBleHBvcnQgbmFtZSBvciB0cnkgZGVmYXVsdHNcbiAgICAgIGxldCBoYW5kbGVyOiBhbnk7XG4gICAgICBpZihleHBvcnROYW1lKSB7XG4gICAgICAgIGhhbmRsZXIgPSBoYW5kbGVyTW9kdWxlW2V4cG9ydE5hbWVdO1xuICAgICAgICBpZighaGFuZGxlcikge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYFtTZXJ2ZXJsZXNzXSBFeHBvcnQgXCIke2V4cG9ydE5hbWV9XCIgbm90IGZvdW5kIGluIG1vZHVsZS4gQXZhaWxhYmxlIGV4cG9ydHM6ICR7T2JqZWN0LmtleXMoaGFuZGxlck1vZHVsZSkuam9pbignLCAnKX1gKTtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gVHJ5IGRlZmF1bHQsIGhhbmRsZXIsIG9yIHRoZSBtb2R1bGUgaXRzZWxmXG4gICAgICAgIGhhbmRsZXIgPSBoYW5kbGVyTW9kdWxlLmRlZmF1bHQgfHwgaGFuZGxlck1vZHVsZS5oYW5kbGVyIHx8IGhhbmRsZXJNb2R1bGU7XG4gICAgICB9XG5cbiAgICAgIGNvbnNvbGUubG9nKGBbU2VydmVybGVzc10gSGFuZGxlciBmb3VuZDogJHt0eXBlb2YgaGFuZGxlcn0sIGlzRnVuY3Rpb246ICR7dHlwZW9mIGhhbmRsZXIgPT09ICdmdW5jdGlvbid9YCk7XG5cbiAgICAgIGlmKHR5cGVvZiBoYW5kbGVyICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYFtTZXJ2ZXJsZXNzXSBIYW5kbGVyIGlzIG5vdCBhIGZ1bmN0aW9uLiBUeXBlOiAke3R5cGVvZiBoYW5kbGVyfSwgVmFsdWU6YCwgaGFuZGxlcik7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gaGFuZGxlcjtcbiAgICB9IGNhdGNoKGltcG9ydEVycm9yOiBhbnkpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoYFtTZXJ2ZXJsZXNzXSBJbXBvcnQgZXJyb3IgZm9yIGhhbmRsZXIgJHtoYW5kbGVyUGF0aH06YCwgaW1wb3J0RXJyb3IubWVzc2FnZSk7XG4gICAgICBjb25zb2xlLmVycm9yKCdbU2VydmVybGVzc10gSW1wb3J0IGVycm9yIHN0YWNrOicsIGltcG9ydEVycm9yLnN0YWNrKTtcblxuICAgICAgLy8gQ2hlY2sgaWYgdGhpcyBpcyBhIGRlcGVuZGVuY3kgcmVzb2x1dGlvbiBlcnJvciAoY29tbW9uIHdpdGggRVMgbW9kdWxlcylcbiAgICAgIGlmKGltcG9ydEVycm9yLm1lc3NhZ2UgJiYgaW1wb3J0RXJyb3IubWVzc2FnZS5pbmNsdWRlcygnQ2Fubm90IGZpbmQgbW9kdWxlJykpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignW1NlcnZlcmxlc3NdIFRoaXMgYXBwZWFycyB0byBiZSBhIGRlcGVuZGVuY3kgcmVzb2x1dGlvbiBlcnJvci4nKTtcbiAgICAgICAgY29uc29sZS5lcnJvcignW1NlcnZlcmxlc3NdIFRoZSBoYW5kbGVyIGZpbGUgZXhpc3RzLCBidXQgb25lIG9mIGl0cyBpbXBvcnRzIGlzIGZhaWxpbmcuJyk7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ1tTZXJ2ZXJsZXNzXSBDaGVjayB0aGF0IGFsbCBkZXBlbmRlbmNpZXMgaW4gdGhlIGhhbmRsZXIgZmlsZSBhcmUgcHJvcGVybHkgaW5zdGFsbGVkLicpO1xuICAgICAgICBjb25zb2xlLmVycm9yKGBbU2VydmVybGVzc10gSGFuZGxlciBmaWxlOiAke2ltcG9ydFBhdGh9YCk7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ1tTZXJ2ZXJsZXNzXSBNYWtlIHN1cmUgdGhlIGhhbmRsZXIgYW5kIGl0cyBkZXBlbmRlbmNpZXMgYXJlIGNvbXBpbGVkIGNvcnJlY3RseS4nKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9IGNhdGNoKGVycm9yOiBhbnkpIHtcbiAgICBjb25zb2xlLmVycm9yKGBbU2VydmVybGVzc10gRXJyb3IgbG9hZGluZyBoYW5kbGVyICR7aGFuZGxlclBhdGh9OmAsIGVycm9yLm1lc3NhZ2UpO1xuICAgIGNvbnNvbGUuZXJyb3IoJ1tTZXJ2ZXJsZXNzXSBFcnJvciBzdGFjazonLCBlcnJvci5zdGFjayk7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn07XG5cbmNvbnN0IGNhcHR1cmVDb25zb2xlTG9ncyA9IChoYW5kbGVyOiAoZXZlbnQ6IGFueSwgY29udGV4dDogYW55KSA9PiBQcm9taXNlPGFueT4sIHF1aWV0OiBib29sZWFuKSA9PiB7XG4gIGlmKHF1aWV0KSB7XG4gICAgcmV0dXJuIGhhbmRsZXI7XG4gIH1cblxuICByZXR1cm4gYXN5bmMgKGV2ZW50OiBhbnksIGNvbnRleHQ6IGFueSkgPT4ge1xuICAgIC8vIENhcHR1cmUgY29uc29sZS5sb2csIGNvbnNvbGUuZXJyb3IsIGV0Yy5cbiAgICBjb25zdCBvcmlnaW5hbENvbnNvbGVMb2cgPSBjb25zb2xlLmxvZztcbiAgICBjb25zdCBvcmlnaW5hbENvbnNvbGVFcnJvciA9IGNvbnNvbGUuZXJyb3I7XG4gICAgY29uc3Qgb3JpZ2luYWxDb25zb2xlV2FybiA9IGNvbnNvbGUud2FybjtcbiAgICBjb25zdCBvcmlnaW5hbENvbnNvbGVJbmZvID0gY29uc29sZS5pbmZvO1xuXG4gICAgY29uc3QgbG9nczogc3RyaW5nW10gPSBbXTtcblxuICAgIGNvbnNvbGUubG9nID0gKC4uLmFyZ3M6IGFueVtdKSA9PiB7XG4gICAgICBsb2dzLnB1c2goYFtMT0ddICR7YXJncy5qb2luKCcgJyl9YCk7XG4gICAgICBvcmlnaW5hbENvbnNvbGVMb2coLi4uYXJncyk7XG4gICAgfTtcblxuICAgIGNvbnNvbGUuZXJyb3IgPSAoLi4uYXJnczogYW55W10pID0+IHtcbiAgICAgIGxvZ3MucHVzaChgW0VSUk9SXSAke2FyZ3Muam9pbignICcpfWApO1xuICAgICAgb3JpZ2luYWxDb25zb2xlRXJyb3IoLi4uYXJncyk7XG4gICAgfTtcblxuICAgIGNvbnNvbGUud2FybiA9ICguLi5hcmdzOiBhbnlbXSkgPT4ge1xuICAgICAgbG9ncy5wdXNoKGBbV0FSTl0gJHthcmdzLmpvaW4oJyAnKX1gKTtcbiAgICAgIG9yaWdpbmFsQ29uc29sZVdhcm4oLi4uYXJncyk7XG4gICAgfTtcblxuICAgIGNvbnNvbGUuaW5mbyA9ICguLi5hcmdzOiBhbnlbXSkgPT4ge1xuICAgICAgbG9ncy5wdXNoKGBbSU5GT10gJHthcmdzLmpvaW4oJyAnKX1gKTtcbiAgICAgIG9yaWdpbmFsQ29uc29sZUluZm8oLi4uYXJncyk7XG4gICAgfTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBoYW5kbGVyKGV2ZW50LCBjb250ZXh0KTtcblxuICAgICAgLy8gT3V0cHV0IGNhcHR1cmVkIGxvZ3NcbiAgICAgIGlmKGxvZ3MubGVuZ3RoID4gMCkge1xuICAgICAgICBjb25zb2xlLmxvZyhjaGFsay5ncmF5KCctLS0gSGFuZGxlciBDb25zb2xlIE91dHB1dCAtLS0nKSk7XG4gICAgICAgIGxvZ3MuZm9yRWFjaCgobG9nKSA9PiBjb25zb2xlLmxvZyhjaGFsay5ncmF5KGxvZykpKTtcbiAgICAgICAgY29uc29sZS5sb2coY2hhbGsuZ3JheSgnLS0tIEVuZCBIYW5kbGVyIENvbnNvbGUgT3V0cHV0IC0tLScpKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgLy8gUmVzdG9yZSBvcmlnaW5hbCBjb25zb2xlIG1ldGhvZHNcbiAgICAgIGNvbnNvbGUubG9nID0gb3JpZ2luYWxDb25zb2xlTG9nO1xuICAgICAgY29uc29sZS5lcnJvciA9IG9yaWdpbmFsQ29uc29sZUVycm9yO1xuICAgICAgY29uc29sZS53YXJuID0gb3JpZ2luYWxDb25zb2xlV2FybjtcbiAgICAgIGNvbnNvbGUuaW5mbyA9IG9yaWdpbmFsQ29uc29sZUluZm87XG4gICAgfVxuICB9O1xufTtcblxuY29uc3QgY3JlYXRlRXhwcmVzc1NlcnZlciA9IGFzeW5jIChcbiAgY29uZmlnOiBTZXJ2ZXJsZXNzQ29uZmlnLFxuICBvdXRwdXREaXI6IHN0cmluZyxcbiAgaHR0cFBvcnQ6IG51bWJlcixcbiAgaG9zdDogc3RyaW5nLFxuICBxdWlldDogYm9vbGVhbixcbiAgZGVidWc6IGJvb2xlYW5cbikgPT4ge1xuICBjb25zdCBhcHAgPSBleHByZXNzKCk7XG5cbiAgLy8gRW5hYmxlIENPUlNcbiAgYXBwLnVzZSgocmVxLCByZXMsIG5leHQpID0+IHtcbiAgICByZXMuaGVhZGVyKCdBY2Nlc3MtQ29udHJvbC1BbGxvdy1PcmlnaW4nLCAnKicpO1xuICAgIHJlcy5oZWFkZXIoJ0FjY2Vzcy1Db250cm9sLUFsbG93LU1ldGhvZHMnLCAnR0VULCBQT1NULCBQVVQsIERFTEVURSwgUEFUQ0gsIE9QVElPTlMnKTtcbiAgICByZXMuaGVhZGVyKCdBY2Nlc3MtQ29udHJvbC1BbGxvdy1IZWFkZXJzJywgJyonKTtcbiAgICByZXMuaGVhZGVyKCdBY2Nlc3MtQ29udHJvbC1BbGxvdy1DcmVkZW50aWFscycsICd0cnVlJyk7XG5cbiAgICBpZihyZXEubWV0aG9kID09PSAnT1BUSU9OUycpIHtcbiAgICAgIHJlcy5zZW5kU3RhdHVzKDIwMCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5leHQoKTtcbiAgICB9XG4gIH0pO1xuXG4gIC8vIFBhcnNlIEpTT04gYm9kaWVzXG4gIGFwcC51c2UoZXhwcmVzcy5qc29uKCkpO1xuXG4gIC8vIExvYWQgR3JhcGhRTCBoYW5kbGVyXG4gIGNvbnN0IGxvYWRHcmFwaFFMU2NoZW1hID0gYXN5bmMgKCkgPT4ge1xuICAgIHRyeSB7XG4gICAgICAvLyBUcnkgdG8gZmluZCBhIEdyYXBoUUwgaGFuZGxlclxuICAgICAgbGV0IGdyYXBocWxIYW5kbGVyID0gbnVsbDtcblxuICAgICAgaWYoY29uZmlnLmZ1bmN0aW9ucykge1xuICAgICAgICBmb3IoY29uc3QgW2Z1bmN0aW9uTmFtZSwgZnVuY3Rpb25Db25maWddIG9mIE9iamVjdC5lbnRyaWVzKGNvbmZpZy5mdW5jdGlvbnMpKSB7XG4gICAgICAgICAgaWYoZnVuY3Rpb25Db25maWcuZXZlbnRzKSB7XG4gICAgICAgICAgICBmb3IoY29uc3QgZXZlbnQgb2YgZnVuY3Rpb25Db25maWcuZXZlbnRzKSB7XG4gICAgICAgICAgICAgIGlmKGV2ZW50Lmh0dHAgJiYgZXZlbnQuaHR0cC5wYXRoKSB7XG4gICAgICAgICAgICAgICAgLy8gTG9vayBmb3IgR3JhcGhRTCBlbmRwb2ludHNcbiAgICAgICAgICAgICAgICBpZihldmVudC5odHRwLnBhdGggPT09ICcvcHVibGljJyB8fCBldmVudC5odHRwLnBhdGggPT09ICcvZ3JhcGhxbCcpIHtcbiAgICAgICAgICAgICAgICAgIGdyYXBocWxIYW5kbGVyID0gYXdhaXQgbG9hZEhhbmRsZXIoZnVuY3Rpb25Db25maWcuaGFuZGxlciwgb3V0cHV0RGlyKTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZihncmFwaHFsSGFuZGxlcikge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmKGdyYXBocWxIYW5kbGVyKSB7XG4gICAgICAgIGxvZygnRm91bmQgR3JhcGhRTCBoYW5kbGVyJywgJ2luZm8nLCBxdWlldCk7XG4gICAgICAgIHJldHVybiBncmFwaHFsSGFuZGxlcjtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH0gY2F0Y2goZXJyb3IpIHtcbiAgICAgIGxvZyhgRXJyb3IgbG9hZGluZyBHcmFwaFFMIGhhbmRsZXI6ICR7ZXJyb3IubWVzc2FnZX1gLCAnZXJyb3InLCBxdWlldCk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH07XG5cbiAgLy8gU2V0IHVwIEdyYXBoUUwgaGFuZGxlciBmb3IgR3JhcGhRTCByZXF1ZXN0c1xuICB0cnkge1xuICAgIGNvbnN0IGdyYXBocWxIYW5kbGVyID0gYXdhaXQgbG9hZEdyYXBoUUxTY2hlbWEoKTtcbiAgICBpZihncmFwaHFsSGFuZGxlcikge1xuICAgICAgLy8gRmluZCB0aGUgR3JhcGhRTCBwYXRoIGZyb20gdGhlIHNlcnZlcmxlc3MgY29uZmlnXG4gICAgICBsZXQgZ3JhcGhxbFBhdGggPSAnL2dyYXBocWwnOyAvLyBkZWZhdWx0IGZhbGxiYWNrXG5cbiAgICAgIGlmKGNvbmZpZy5mdW5jdGlvbnMpIHtcbiAgICAgICAgZm9yKGNvbnN0IFtfZnVuY3Rpb25OYW1lLCBmdW5jdGlvbkNvbmZpZ10gb2YgT2JqZWN0LmVudHJpZXMoY29uZmlnLmZ1bmN0aW9ucykpIHtcbiAgICAgICAgICBpZihmdW5jdGlvbkNvbmZpZy5ldmVudHMpIHtcbiAgICAgICAgICAgIGZvcihjb25zdCBldmVudCBvZiBmdW5jdGlvbkNvbmZpZy5ldmVudHMpIHtcbiAgICAgICAgICAgICAgaWYoZXZlbnQ/Lmh0dHA/LnBhdGgpIHtcbiAgICAgICAgICAgICAgICBncmFwaHFsUGF0aCA9IGV2ZW50Lmh0dHAucGF0aDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZihncmFwaHFsUGF0aCAhPT0gJy9ncmFwaHFsJykge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIFNldCB1cCBHcmFwaFFMIGVuZHBvaW50IHdpdGggZW5oYW5jZWQgY29uc29sZS5sb2cgY2FwdHVyZVxuICAgICAgYXBwLnVzZShncmFwaHFsUGF0aCwgYXN5bmMgKHJlcSwgcmVzKSA9PiB7XG4gICAgICAgIC8vIEdyYXBoUUwgRGVidWcgTG9nZ2luZ1xuICAgICAgICBpZihkZWJ1ZyAmJiByZXEuYm9keSAmJiByZXEuYm9keS5xdWVyeSkge1xuICAgICAgICAgIGxvZygn8J+UjSBHcmFwaFFMIERlYnVnIE1vZGU6IEFuYWx5emluZyByZXF1ZXN0Li4uJywgJ2luZm8nLCBmYWxzZSk7XG4gICAgICAgICAgbG9nKGDwn5OdIEdyYXBoUUwgUXVlcnk6ICR7cmVxLmJvZHkucXVlcnl9YCwgJ2luZm8nLCBmYWxzZSk7XG4gICAgICAgICAgaWYocmVxLmJvZHkudmFyaWFibGVzKSB7XG4gICAgICAgICAgICBsb2coYPCfk4ogR3JhcGhRTCBWYXJpYWJsZXM6ICR7SlNPTi5zdHJpbmdpZnkocmVxLmJvZHkudmFyaWFibGVzLCBudWxsLCAyKX1gLCAnaW5mbycsIGZhbHNlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYocmVxLmJvZHkub3BlcmF0aW9uTmFtZSkge1xuICAgICAgICAgICAgbG9nKGDwn4+377iPICBHcmFwaFFMIE9wZXJhdGlvbjogJHtyZXEuYm9keS5vcGVyYXRpb25OYW1lfWAsICdpbmZvJywgZmFsc2UpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEVuaGFuY2VkIGNvbnNvbGUubG9nIGNhcHR1cmVcbiAgICAgICAgY29uc3Qgb3JpZ2luYWxDb25zb2xlTG9nID0gY29uc29sZS5sb2c7XG4gICAgICAgIGNvbnN0IGxvZ3M6IHN0cmluZ1tdID0gW107XG5cbiAgICAgICAgY29uc29sZS5sb2cgPSAoLi4uYXJncykgPT4ge1xuICAgICAgICAgIGNvbnN0IGxvZ01lc3NhZ2UgPSBhcmdzLm1hcCgoYXJnKSA9PlxuICAgICAgICAgICAgKHR5cGVvZiBhcmcgPT09ICdvYmplY3QnID8gSlNPTi5zdHJpbmdpZnkoYXJnLCBudWxsLCAyKSA6IFN0cmluZyhhcmcpKVxuICAgICAgICAgICkuam9pbignICcpO1xuICAgICAgICAgIGxvZ3MucHVzaChsb2dNZXNzYWdlKTtcbiAgICAgICAgICBvcmlnaW5hbENvbnNvbGVMb2coYFtHcmFwaFFMXSAke2xvZ01lc3NhZ2V9YCk7XG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gQ3JlYXRlIGNvbnRleHQgZm9yIHRoZSBoYW5kbGVyXG4gICAgICAgIGNvbnN0IGNvbnRleHQgPSB7XG4gICAgICAgICAgYXdzUmVxdWVzdElkOiAndGVzdC1yZXF1ZXN0LWlkJyxcbiAgICAgICAgICBmdW5jdGlvbk5hbWU6ICdncmFwaHFsJyxcbiAgICAgICAgICBmdW5jdGlvblZlcnNpb246ICckTEFURVNUJyxcbiAgICAgICAgICBnZXRSZW1haW5pbmdUaW1lSW5NaWxsaXM6ICgpID0+IDMwMDAwLFxuICAgICAgICAgIGludm9rZWRGdW5jdGlvbkFybjogJ2Fybjphd3M6bGFtYmRhOnVzLWVhc3QtMToxMjM0NTY3ODkwMTI6ZnVuY3Rpb246Z3JhcGhxbCcsXG4gICAgICAgICAgbG9nR3JvdXBOYW1lOiAnL2F3cy9sYW1iZGEvZ3JhcGhxbCcsXG4gICAgICAgICAgbG9nU3RyZWFtTmFtZTogJ3Rlc3QtbG9nLXN0cmVhbScsXG4gICAgICAgICAgcmVxLFxuICAgICAgICAgIHJlc1xuICAgICAgICB9O1xuXG4gICAgICAgIC8vIFdyYXAgaGFuZGxlciB3aXRoIGNvbnNvbGUgbG9nIGNhcHR1cmVcbiAgICAgICAgY29uc3Qgd3JhcHBlZEhhbmRsZXIgPSBjYXB0dXJlQ29uc29sZUxvZ3MoZ3JhcGhxbEhhbmRsZXIsIHF1aWV0KTtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgIC8vIENhbGwgdGhlIGhhbmRsZXIgd2l0aCBHcmFwaFFMIHBhcmFtZXRlcnNcbiAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB3cmFwcGVkSGFuZGxlcih7XG4gICAgICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeShyZXEuYm9keSksXG4gICAgICAgICAgICBoZWFkZXJzOiByZXEuaGVhZGVycyxcbiAgICAgICAgICAgIGh0dHBNZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgICAgIHBhdGg6IGdyYXBocWxQYXRoLFxuICAgICAgICAgICAgcXVlcnlTdHJpbmdQYXJhbWV0ZXJzOiB7fVxuICAgICAgICAgIH0sIGNvbnRleHQpO1xuXG4gICAgICAgICAgLy8gUmVzdG9yZSBjb25zb2xlLmxvZ1xuICAgICAgICAgIGNvbnNvbGUubG9nID0gb3JpZ2luYWxDb25zb2xlTG9nO1xuXG4gICAgICAgICAgLy8gSGFuZGxlIHRoZSByZXN1bHRcbiAgICAgICAgICBpZihyZXN1bHQgJiYgdHlwZW9mIHJlc3VsdCA9PT0gJ29iamVjdCcgJiYgcmVzdWx0LnN0YXR1c0NvZGUpIHtcbiAgICAgICAgICAgIHJlcy5zdGF0dXMocmVzdWx0LnN0YXR1c0NvZGUpO1xuICAgICAgICAgICAgaWYocmVzdWx0LmhlYWRlcnMpIHtcbiAgICAgICAgICAgICAgT2JqZWN0LmVudHJpZXMocmVzdWx0LmhlYWRlcnMpLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgICAgICAgICAgIHJlcy5zZXRIZWFkZXIoa2V5LCBTdHJpbmcodmFsdWUpKTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXMuc2VuZChyZXN1bHQuYm9keSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlcy5qc29uKHJlc3VsdCk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoKGVycm9yKSB7XG4gICAgICAgICAgLy8gUmVzdG9yZSBjb25zb2xlLmxvZ1xuICAgICAgICAgIGNvbnNvbGUubG9nID0gb3JpZ2luYWxDb25zb2xlTG9nO1xuICAgICAgICAgIGxvZyhgR3JhcGhRTCBoYW5kbGVyIGVycm9yOiAke2Vycm9yLm1lc3NhZ2V9YCwgJ2Vycm9yJywgZmFsc2UpO1xuICAgICAgICAgIHJlcy5zdGF0dXMoNTAwKS5qc29uKHtlcnJvcjogZXJyb3IubWVzc2FnZX0pO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgbG9nKGBHcmFwaFFMIGVuZHBvaW50IGF2YWlsYWJsZSBhdCBodHRwOi8vJHtob3N0fToke2h0dHBQb3J0fSR7Z3JhcGhxbFBhdGh9YCwgJ2luZm8nLCBxdWlldCk7XG4gICAgfVxuICB9IGNhdGNoKGVycm9yKSB7XG4gICAgbG9nKGBFcnJvciBzZXR0aW5nIHVwIEdyYXBoUUw6ICR7ZXJyb3IubWVzc2FnZX1gLCAnZXJyb3InLCBxdWlldCk7XG4gIH1cblxuICAvLyBGYWxsYmFjayBmb3Igbm9uLUdyYXBoUUwgcm91dGVzIC0gaGFuZGxlIGFsbCByZW1haW5pbmcgcm91dGVzXG4gIGFwcC51c2UoJy8nLCBhc3luYyAocmVxLCByZXMpID0+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgdXJsID0gcmVxLnVybCB8fCAnLyc7XG4gICAgICBjb25zdCBtZXRob2QgPSByZXEubWV0aG9kIHx8ICdHRVQnO1xuICAgICAgY29uc3QgcGF0aG5hbWUgPSByZXEucGF0aCB8fCB1cmwuc3BsaXQoJz8nKVswXTsgLy8gRXh0cmFjdCBwYXRobmFtZSB3aXRob3V0IHF1ZXJ5IHN0cmluZ1xuXG4gICAgICAvLyBBbHdheXMgbG9nIHJlcXVlc3RzIChub3QgYWZmZWN0ZWQgYnkgcXVpZXQgZmxhZyBmb3IgZGVidWdnaW5nKVxuICAgICAgY29uc29sZS5sb2coYFtTZXJ2ZXJsZXNzXSAke21ldGhvZH0gJHt1cmx9IChwYXRobmFtZTogJHtwYXRobmFtZX0pYCk7XG5cbiAgICAgIC8vIEZpbmQgbWF0Y2hpbmcgZnVuY3Rpb25cbiAgICAgIGxldCBtYXRjaGVkRnVuY3Rpb24gPSBudWxsO1xuXG4gICAgICBpZihjb25maWcuZnVuY3Rpb25zKSB7XG4gICAgICAgIGNvbnN0IGZ1bmN0aW9uTmFtZXMgPSBPYmplY3Qua2V5cyhjb25maWcuZnVuY3Rpb25zKTtcbiAgICAgICAgY29uc29sZS5sb2coYFtTZXJ2ZXJsZXNzXSBBdmFpbGFibGUgZnVuY3Rpb25zOiAke2Z1bmN0aW9uTmFtZXMuam9pbignLCAnKX1gKTtcbiAgICAgICAgY29uc29sZS5sb2coJ1tTZXJ2ZXJsZXNzXSBDb25maWcgZnVuY3Rpb25zOicsIEpTT04uc3RyaW5naWZ5KGNvbmZpZy5mdW5jdGlvbnMsIG51bGwsIDIpKTtcblxuICAgICAgICBmb3IoY29uc3QgW2Z1bmN0aW9uTmFtZSwgZnVuY3Rpb25Db25maWddIG9mIE9iamVjdC5lbnRyaWVzKGNvbmZpZy5mdW5jdGlvbnMpKSB7XG4gICAgICAgICAgaWYoZnVuY3Rpb25Db25maWcuZXZlbnRzKSB7XG4gICAgICAgICAgICBmb3IoY29uc3QgZXZlbnQgb2YgZnVuY3Rpb25Db25maWcuZXZlbnRzKSB7XG4gICAgICAgICAgICAgIGlmKGV2ZW50Lmh0dHApIHtcbiAgICAgICAgICAgICAgICBjb25zdCBldmVudFBhdGggPSBldmVudC5odHRwLnBhdGggfHwgJy8nO1xuICAgICAgICAgICAgICAgIGNvbnN0IGV2ZW50TWV0aG9kID0gKGV2ZW50Lmh0dHAubWV0aG9kIHx8ICdHRVQnKS50b1VwcGVyQ2FzZSgpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlcXVlc3RNZXRob2QgPSBtZXRob2QudG9VcHBlckNhc2UoKTtcblxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGBbU2VydmVybGVzc10gQ2hlY2tpbmcgZnVuY3Rpb24gJHtmdW5jdGlvbk5hbWV9OiBwYXRoPVwiJHtldmVudFBhdGh9XCIsIG1ldGhvZD1cIiR7ZXZlbnRNZXRob2R9XCIgYWdhaW5zdCBwYXRobmFtZT1cIiR7cGF0aG5hbWV9XCIsIG1ldGhvZD1cIiR7cmVxdWVzdE1ldGhvZH1cImApO1xuXG4gICAgICAgICAgICAgICAgLy8gSW1wcm92ZWQgcGF0aCBtYXRjaGluZyAtIGNvbXBhcmUgcGF0aG5hbWUgd2l0aG91dCBxdWVyeSBzdHJpbmdcbiAgICAgICAgICAgICAgICAvLyBOb3JtYWxpemUgcGF0aHMgKHJlbW92ZSB0cmFpbGluZyBzbGFzaGVzIGZvciBjb21wYXJpc29uKVxuICAgICAgICAgICAgICAgIGNvbnN0IG5vcm1hbGl6ZWRFdmVudFBhdGggPSBldmVudFBhdGgucmVwbGFjZSgvXFwvJC8sICcnKSB8fCAnLyc7XG4gICAgICAgICAgICAgICAgY29uc3Qgbm9ybWFsaXplZFBhdGhuYW1lID0gcGF0aG5hbWUucmVwbGFjZSgvXFwvJC8sICcnKSB8fCAnLyc7XG5cbiAgICAgICAgICAgICAgICBpZihub3JtYWxpemVkRXZlbnRQYXRoID09PSBub3JtYWxpemVkUGF0aG5hbWUgJiYgZXZlbnRNZXRob2QgPT09IHJlcXVlc3RNZXRob2QpIHtcbiAgICAgICAgICAgICAgICAgIG1hdGNoZWRGdW5jdGlvbiA9IGZ1bmN0aW9uTmFtZTtcbiAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGBbU2VydmVybGVzc10g4pyTIE1hdGNoZWQgZnVuY3Rpb246ICR7bWF0Y2hlZEZ1bmN0aW9ufWApO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmKG1hdGNoZWRGdW5jdGlvbikge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLmxvZygnW1NlcnZlcmxlc3NdIE5vIGZ1bmN0aW9ucyBmb3VuZCBpbiBjb25maWcnKTtcbiAgICAgIH1cblxuICAgICAgaWYobWF0Y2hlZEZ1bmN0aW9uICYmIGNvbmZpZy5mdW5jdGlvbnNbbWF0Y2hlZEZ1bmN0aW9uXSkge1xuICAgICAgICAvLyBSZXNvbHZlIGhhbmRsZXIgcGF0aCByZWxhdGl2ZSB0byBvdXRwdXQgZGlyZWN0b3J5XG4gICAgICAgIGNvbnN0IGhhbmRsZXJQYXRoID0gY29uZmlnLmZ1bmN0aW9uc1ttYXRjaGVkRnVuY3Rpb25dLmhhbmRsZXI7XG4gICAgICAgIGNvbnNvbGUubG9nKGBbU2VydmVybGVzc10gTG9hZGluZyBoYW5kbGVyOiAke2hhbmRsZXJQYXRofSBmcm9tIG91dHB1dERpcjogJHtvdXRwdXREaXJ9YCk7XG4gICAgICAgIGNvbnN0IGhhbmRsZXIgPSBhd2FpdCBsb2FkSGFuZGxlcihoYW5kbGVyUGF0aCwgb3V0cHV0RGlyKTtcblxuICAgICAgICBpZihoYW5kbGVyKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coYFtTZXJ2ZXJsZXNzXSBIYW5kbGVyIGxvYWRlZCBzdWNjZXNzZnVsbHksIHR5cGU6ICR7dHlwZW9mIGhhbmRsZXJ9YCk7XG4gICAgICAgICAgY29uc3Qgd3JhcHBlZEhhbmRsZXIgPSBjYXB0dXJlQ29uc29sZUxvZ3MoaGFuZGxlciwgcXVpZXQpO1xuXG4gICAgICAgICAgY29uc3QgZXZlbnQgPSB7XG4gICAgICAgICAgICBib2R5OiByZXEuYm9keSxcbiAgICAgICAgICAgIGhlYWRlcnM6IHJlcS5oZWFkZXJzLFxuICAgICAgICAgICAgaHR0cE1ldGhvZDogbWV0aG9kLFxuICAgICAgICAgICAgcGF0aDogdXJsLFxuICAgICAgICAgICAgcXVlcnlTdHJpbmdQYXJhbWV0ZXJzOiByZXEucXVlcnlcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgY29uc3QgY29udGV4dCA9IHtcbiAgICAgICAgICAgIGF3c1JlcXVlc3RJZDogJ3Rlc3QtcmVxdWVzdC1pZCcsXG4gICAgICAgICAgICBmdW5jdGlvbk5hbWU6IG1hdGNoZWRGdW5jdGlvbixcbiAgICAgICAgICAgIGZ1bmN0aW9uVmVyc2lvbjogJyRMQVRFU1QnLFxuICAgICAgICAgICAgZ2V0UmVtYWluaW5nVGltZUluTWlsbGlzOiAoKSA9PiAzMDAwMCxcbiAgICAgICAgICAgIGludm9rZWRGdW5jdGlvbkFybjogYGFybjphd3M6bGFtYmRhOnVzLWVhc3QtMToxMjM0NTY3ODkwMTI6ZnVuY3Rpb246JHttYXRjaGVkRnVuY3Rpb259YCxcbiAgICAgICAgICAgIGxvZ0dyb3VwTmFtZTogYC9hd3MvbGFtYmRhLyR7bWF0Y2hlZEZ1bmN0aW9ufWAsXG4gICAgICAgICAgICBsb2dTdHJlYW1OYW1lOiAndGVzdC1sb2ctc3RyZWFtJyxcbiAgICAgICAgICAgIG1lbW9yeUxpbWl0SW5NQjogJzEyOCdcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdbU2VydmVybGVzc10gQ2FsbGluZyBoYW5kbGVyIHdpdGggZXZlbnQ6JywgSlNPTi5zdHJpbmdpZnkoZXZlbnQsIG51bGwsIDIpKTtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHdyYXBwZWRIYW5kbGVyKGV2ZW50LCBjb250ZXh0KTtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdbU2VydmVybGVzc10gSGFuZGxlciByZXR1cm5lZDonLCBKU09OLnN0cmluZ2lmeShyZXN1bHQsIG51bGwsIDIpKTtcblxuICAgICAgICAgICAgaWYocmVzdWx0ICYmIHR5cGVvZiByZXN1bHQgPT09ICdvYmplY3QnICYmIHJlc3VsdC5zdGF0dXNDb2RlKSB7XG4gICAgICAgICAgICAgIHJlcy5zdGF0dXMocmVzdWx0LnN0YXR1c0NvZGUpO1xuICAgICAgICAgICAgICBpZihyZXN1bHQuaGVhZGVycykge1xuICAgICAgICAgICAgICAgIE9iamVjdC5lbnRyaWVzKHJlc3VsdC5oZWFkZXJzKS5mb3JFYWNoKChba2V5LCB2YWx1ZV0pID0+IHtcbiAgICAgICAgICAgICAgICAgIHJlcy5zZXRIZWFkZXIoa2V5LCBTdHJpbmcodmFsdWUpKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXMuc2VuZChyZXN1bHQuYm9keSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICByZXMuanNvbihyZXN1bHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gY2F0Y2goZXJyb3I6IGFueSkge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcignW1NlcnZlcmxlc3NdIEhhbmRsZXIgZXJyb3I6JywgZXJyb3IubWVzc2FnZSk7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdbU2VydmVybGVzc10gSGFuZGxlciBlcnJvciBzdGFjazonLCBlcnJvci5zdGFjayk7XG4gICAgICAgICAgICBsb2coYEhhbmRsZXIgZXJyb3I6ICR7ZXJyb3IubWVzc2FnZX1gLCAnZXJyb3InLCBmYWxzZSk7XG4gICAgICAgICAgICByZXMuc3RhdHVzKDUwMCkuanNvbih7ZXJyb3I6IGVycm9yLm1lc3NhZ2V9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihgW1NlcnZlcmxlc3NdIEhhbmRsZXIgbm90IGZvdW5kIGZvciBmdW5jdGlvbjogJHttYXRjaGVkRnVuY3Rpb259YCk7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihgW1NlcnZlcmxlc3NdIEhhbmRsZXIgcGF0aDogJHtoYW5kbGVyUGF0aH0sIE91dHB1dCBkaXI6ICR7b3V0cHV0RGlyfWApO1xuICAgICAgICAgIHJlcy5zdGF0dXMoNDA0KS5qc29uKHtlcnJvcjogJ0hhbmRsZXIgbm90IGZvdW5kJ30pO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLmVycm9yKGBbU2VydmVybGVzc10gRnVuY3Rpb24gbm90IGZvdW5kIGZvciBwYXRobmFtZTogJHtwYXRobmFtZX0sIG1ldGhvZDogJHttZXRob2R9YCk7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYFtTZXJ2ZXJsZXNzXSBBdmFpbGFibGUgZnVuY3Rpb25zOiAke2NvbmZpZy5mdW5jdGlvbnMgPyBPYmplY3Qua2V5cyhjb25maWcuZnVuY3Rpb25zKS5qb2luKCcsICcpIDogJ25vbmUnfWApO1xuICAgICAgICByZXMuc3RhdHVzKDQwNCkuanNvbih7ZXJyb3I6ICdGdW5jdGlvbiBub3QgZm91bmQnfSk7XG4gICAgICB9XG4gICAgfSBjYXRjaChlcnJvcikge1xuICAgICAgbG9nKGBSb3V0ZSBoYW5kbGluZyBlcnJvcjogJHtlcnJvci5tZXNzYWdlfWAsICdlcnJvcicsIGZhbHNlKTtcbiAgICAgIHJlcy5zdGF0dXMoNTAwKS5qc29uKHtlcnJvcjogZXJyb3IubWVzc2FnZX0pO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIGFwcDtcbn07XG5cbmNvbnN0IGNyZWF0ZVdlYlNvY2tldFNlcnZlciA9IChcbiAgY29uZmlnOiBTZXJ2ZXJsZXNzQ29uZmlnLFxuICBvdXRwdXREaXI6IHN0cmluZyxcbiAgd3NQb3J0OiBudW1iZXIsXG4gIHF1aWV0OiBib29sZWFuLFxuICBkZWJ1ZzogYm9vbGVhblxuKSA9PiB7XG4gIGNvbnN0IHdzcyA9IG5ldyBXZWJTb2NrZXRTZXJ2ZXIoe3BvcnQ6IHdzUG9ydH0pO1xuXG4gIHdzcy5vbignY29ubmVjdGlvbicsIGFzeW5jICh3cywgcmVxKSA9PiB7XG4gICAgbG9nKGBXZWJTb2NrZXQgY29ubmVjdGlvbiBlc3RhYmxpc2hlZDogJHtyZXEudXJsfWAsICdpbmZvJywgZmFsc2UpO1xuXG4gICAgd3Mub24oJ21lc3NhZ2UnLCBhc3luYyAobWVzc2FnZSkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgZGF0YSA9IEpTT04ucGFyc2UobWVzc2FnZS50b1N0cmluZygpKTtcblxuICAgICAgICAvLyBGaW5kIG1hdGNoaW5nIFdlYlNvY2tldCBmdW5jdGlvblxuICAgICAgICBsZXQgbWF0Y2hlZEZ1bmN0aW9uID0gbnVsbDtcblxuICAgICAgICBpZihjb25maWcuZnVuY3Rpb25zKSB7XG4gICAgICAgICAgZm9yKGNvbnN0IFtmdW5jdGlvbk5hbWUsIGZ1bmN0aW9uQ29uZmlnXSBvZiBPYmplY3QuZW50cmllcyhjb25maWcuZnVuY3Rpb25zKSkge1xuICAgICAgICAgICAgaWYoZnVuY3Rpb25Db25maWcuZXZlbnRzKSB7XG4gICAgICAgICAgICAgIGZvcihjb25zdCBldmVudCBvZiBmdW5jdGlvbkNvbmZpZy5ldmVudHMpIHtcbiAgICAgICAgICAgICAgICBpZihldmVudC53ZWJzb2NrZXQpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHJvdXRlID0gZXZlbnQud2Vic29ja2V0LnJvdXRlIHx8ICckY29ubmVjdCc7XG4gICAgICAgICAgICAgICAgICBpZihyb3V0ZSA9PT0gJyRkZWZhdWx0JyB8fCByb3V0ZSA9PT0gZGF0YS5hY3Rpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgbWF0Y2hlZEZ1bmN0aW9uID0gZnVuY3Rpb25OYW1lO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmKG1hdGNoZWRGdW5jdGlvbikge1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZihtYXRjaGVkRnVuY3Rpb24gJiYgY29uZmlnLmZ1bmN0aW9uc1ttYXRjaGVkRnVuY3Rpb25dKSB7XG4gICAgICAgICAgY29uc3QgaGFuZGxlciA9IGF3YWl0IGxvYWRIYW5kbGVyKGNvbmZpZy5mdW5jdGlvbnNbbWF0Y2hlZEZ1bmN0aW9uXS5oYW5kbGVyLCBvdXRwdXREaXIpO1xuXG4gICAgICAgICAgaWYoaGFuZGxlcikge1xuICAgICAgICAgICAgLy8gV3JhcCBoYW5kbGVyIHdpdGggY29uc29sZSBsb2cgY2FwdHVyZVxuICAgICAgICAgICAgY29uc3Qgd3JhcHBlZEhhbmRsZXIgPSBjYXB0dXJlQ29uc29sZUxvZ3MoaGFuZGxlciwgcXVpZXQpO1xuICAgICAgICAgICAgY29uc3QgZXZlbnQgPSB7XG4gICAgICAgICAgICAgIGJvZHk6IGRhdGEuYm9keSB8fCBudWxsLFxuICAgICAgICAgICAgICByZXF1ZXN0Q29udGV4dDoge1xuICAgICAgICAgICAgICAgIGFwaUdhdGV3YXk6IHtcbiAgICAgICAgICAgICAgICAgIGVuZHBvaW50OiBgd3M6Ly9sb2NhbGhvc3Q6JHt3c1BvcnR9YFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgY29ubmVjdGlvbklkOiAndGVzdC1jb25uZWN0aW9uLWlkJyxcbiAgICAgICAgICAgICAgICByb3V0ZUtleTogZGF0YS5hY3Rpb24gfHwgJyRkZWZhdWx0J1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBjb25zdCBjb250ZXh0ID0ge1xuICAgICAgICAgICAgICBhd3NSZXF1ZXN0SWQ6ICd0ZXN0LXJlcXVlc3QtaWQnLFxuICAgICAgICAgICAgICBmdW5jdGlvbk5hbWU6IG1hdGNoZWRGdW5jdGlvbixcbiAgICAgICAgICAgICAgZnVuY3Rpb25WZXJzaW9uOiAnJExBVEVTVCcsXG4gICAgICAgICAgICAgIGdldFJlbWFpbmluZ1RpbWVJbk1pbGxpczogKCkgPT4gMzAwMDAsXG4gICAgICAgICAgICAgIGludm9rZWRGdW5jdGlvbkFybjogYGFybjphd3M6bGFtYmRhOnVzLWVhc3QtMToxMjM0NTY3ODkwMTI6ZnVuY3Rpb246JHttYXRjaGVkRnVuY3Rpb259YCxcbiAgICAgICAgICAgICAgbG9nR3JvdXBOYW1lOiBgL2F3cy9sYW1iZGEvJHttYXRjaGVkRnVuY3Rpb259YCxcbiAgICAgICAgICAgICAgbG9nU3RyZWFtTmFtZTogJ3Rlc3QtbG9nLXN0cmVhbScsXG4gICAgICAgICAgICAgIG1lbW9yeUxpbWl0SW5NQjogJzEyOCdcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHdyYXBwZWRIYW5kbGVyKGV2ZW50LCBjb250ZXh0KTtcblxuICAgICAgICAgICAgLy8gSGFuZGxlIExhbWJkYSByZXNwb25zZSBmb3JtYXQgZm9yIFdlYlNvY2tldFxuICAgICAgICAgICAgaWYocmVzdWx0ICYmIHR5cGVvZiByZXN1bHQgPT09ICdvYmplY3QnICYmIHJlc3VsdC5zdGF0dXNDb2RlKSB7XG4gICAgICAgICAgICAgIC8vIFRoaXMgaXMgYSBMYW1iZGEgcmVzcG9uc2Ugb2JqZWN0LCBleHRyYWN0IHRoZSBib2R5XG4gICAgICAgICAgICAgIGNvbnN0IGJvZHkgPSByZXN1bHQuYm9keSB8fCAnJztcbiAgICAgICAgICAgICAgd3Muc2VuZChib2R5KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIC8vIFRoaXMgaXMgYSBkaXJlY3QgcmVzcG9uc2UsIHN0cmluZ2lmeSBpdFxuICAgICAgICAgICAgICB3cy5zZW5kKEpTT04uc3RyaW5naWZ5KHJlc3VsdCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB3cy5zZW5kKEpTT04uc3RyaW5naWZ5KHtlcnJvcjogJ0hhbmRsZXIgbm90IGZvdW5kJ30pKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgd3Muc2VuZChKU09OLnN0cmluZ2lmeSh7ZXJyb3I6ICdXZWJTb2NrZXQgZnVuY3Rpb24gbm90IGZvdW5kJ30pKTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaChlcnJvcikge1xuICAgICAgICBsb2coYFdlYlNvY2tldCBlcnJvcjogJHtlcnJvci5tZXNzYWdlfWAsICdlcnJvcicsIGZhbHNlKTtcbiAgICAgICAgd3Muc2VuZChKU09OLnN0cmluZ2lmeSh7ZXJyb3I6IGVycm9yLm1lc3NhZ2V9KSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB3cy5vbignY2xvc2UnLCAoKSA9PiB7XG4gICAgICBsb2coJ1dlYlNvY2tldCBjb25uZWN0aW9uIGNsb3NlZCcsICdpbmZvJywgZmFsc2UpO1xuICAgIH0pO1xuICB9KTtcblxuICByZXR1cm4gd3NzO1xufTtcblxuY29uc3QgbG9hZEVudkZpbGUgPSAoZW52UGF0aDogc3RyaW5nKTogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9PiB7XG4gIGNvbnN0IGVudlZhcnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcblxuICBpZighZXhpc3RzU3luYyhlbnZQYXRoKSkge1xuICAgIHJldHVybiBlbnZWYXJzO1xuICB9XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBlbnZDb250ZW50ID0gcmVhZEZpbGVTeW5jKGVudlBhdGgsICd1dGY4Jyk7XG4gICAgY29uc3QgbGluZXMgPSBlbnZDb250ZW50LnNwbGl0KCdcXG4nKTtcblxuICAgIGZvcihjb25zdCBsaW5lIG9mIGxpbmVzKSB7XG4gICAgICBjb25zdCB0cmltbWVkTGluZSA9IGxpbmUudHJpbSgpO1xuXG4gICAgICAvLyBTa2lwIGVtcHR5IGxpbmVzIGFuZCBjb21tZW50c1xuICAgICAgaWYoIXRyaW1tZWRMaW5lIHx8IHRyaW1tZWRMaW5lLnN0YXJ0c1dpdGgoJyMnKSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgLy8gUGFyc2UgS0VZPXZhbHVlIGZvcm1hdFxuICAgICAgY29uc3QgZXF1YWxJbmRleCA9IHRyaW1tZWRMaW5lLmluZGV4T2YoJz0nKTtcbiAgICAgIGlmKGVxdWFsSW5kZXggPiAwKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IHRyaW1tZWRMaW5lLnN1YnN0cmluZygwLCBlcXVhbEluZGV4KS50cmltKCk7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gdHJpbW1lZExpbmUuc3Vic3RyaW5nKGVxdWFsSW5kZXggKyAxKS50cmltKCk7XG5cbiAgICAgICAgLy8gUmVtb3ZlIHF1b3RlcyBpZiBwcmVzZW50XG4gICAgICAgIGNvbnN0IGNsZWFuVmFsdWUgPSB2YWx1ZS5yZXBsYWNlKC9eW1wiJ118W1wiJ10kL2csICcnKTtcblxuICAgICAgICBpZihrZXkpIHtcbiAgICAgICAgICBlbnZWYXJzW2tleV0gPSBjbGVhblZhbHVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9IGNhdGNoKGVycm9yKSB7XG4gICAgbG9nKGBXYXJuaW5nOiBDb3VsZCBub3QgbG9hZCAuZW52IGZpbGUgYXQgJHtlbnZQYXRofTogJHtlcnJvci5tZXNzYWdlfWAsICd3YXJuJywgZmFsc2UpO1xuICB9XG5cbiAgcmV0dXJuIGVudlZhcnM7XG59O1xuXG5leHBvcnQgY29uc3Qgc2VydmVybGVzcyA9IGFzeW5jIChcbiAgY21kOiBTZXJ2ZXJsZXNzT3B0aW9ucyxcbiAgY2FsbGJhY2s6IFNlcnZlcmxlc3NDYWxsYmFjayA9ICgpID0+ICh7fSlcbik6IFByb21pc2U8bnVtYmVyPiA9PiB7XG4gIGNvbnN0IHtcbiAgICBjbGlOYW1lID0gJ0xleCcsXG4gICAgY29uZmlnLFxuICAgIGRlYnVnID0gZmFsc2UsXG4gICAgaG9zdDogY2xpSG9zdCxcbiAgICBodHRwUG9ydDogY2xpSHR0cFBvcnQsXG4gICAgaHR0cHNQb3J0OiBjbGlIdHRwc1BvcnQsXG4gICAgcXVpZXQgPSBmYWxzZSxcbiAgICByZW1vdmUgPSBmYWxzZSxcbiAgICB0ZXN0ID0gZmFsc2UsXG4gICAgdXNlUHVibGljSXAsXG4gICAgdmFyaWFibGVzLFxuICAgIHdzUG9ydDogY2xpV3NQb3J0XG4gIH0gPSBjbWQ7XG5cbiAgY29uc3Qgc3Bpbm5lciA9IGNyZWF0ZVNwaW5uZXIocXVpZXQpO1xuXG4gIGxvZyhgJHtjbGlOYW1lfSBzdGFydGluZyBzZXJ2ZXJsZXNzIGRldmVsb3BtZW50IHNlcnZlci4uLmAsICdpbmZvJywgcXVpZXQpO1xuXG4gIGF3YWl0IExleENvbmZpZy5wYXJzZUNvbmZpZyhjbWQpO1xuXG4gIGNvbnN0IHtvdXRwdXRGdWxsUGF0aH0gPSBMZXhDb25maWcuY29uZmlnO1xuXG4gIC8vIExvYWQgZW52aXJvbm1lbnQgdmFyaWFibGVzIGZyb20gLmVudiBmaWxlc1xuICBjb25zdCBlbnZQYXRocyA9IFtcbiAgICBwYXRoUmVzb2x2ZShwcm9jZXNzLmN3ZCgpLCAnLmVudicpLFxuICAgIHBhdGhSZXNvbHZlKHByb2Nlc3MuY3dkKCksICcuZW52LmxvY2FsJyksXG4gICAgcGF0aFJlc29sdmUocHJvY2Vzcy5jd2QoKSwgJy5lbnYuZGV2ZWxvcG1lbnQnKVxuICBdO1xuXG4gIGxldCBlbnZWYXJzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG5cbiAgLy8gTG9hZCBmcm9tIC5lbnYgZmlsZXMgaW4gb3JkZXIgKGxhdGVyIGZpbGVzIG92ZXJyaWRlIGVhcmxpZXIgb25lcylcbiAgZm9yKGNvbnN0IGVudlBhdGggb2YgZW52UGF0aHMpIHtcbiAgICBjb25zdCBmaWxlRW52VmFycyA9IGxvYWRFbnZGaWxlKGVudlBhdGgpO1xuICAgIGlmKE9iamVjdC5rZXlzKGZpbGVFbnZWYXJzKS5sZW5ndGggPiAwKSB7XG4gICAgICBsb2coYExvYWRlZCBlbnZpcm9ubWVudCB2YXJpYWJsZXMgZnJvbTogJHtlbnZQYXRofWAsICdpbmZvJywgcXVpZXQpO1xuICAgIH1cbiAgICBlbnZWYXJzID0gey4uLmVudlZhcnMsIC4uLmZpbGVFbnZWYXJzfTtcbiAgfVxuXG4gIC8vIFN0YXJ0IHdpdGggZGVmYXVsdCBOT0RFX0VOViBhbmQgbG9hZGVkIC5lbnYgdmFyaWFibGVzXG4gIGxldCB2YXJpYWJsZXNPYmo6IG9iamVjdCA9IHtOT0RFX0VOVjogJ2RldmVsb3BtZW50JywgLi4uZW52VmFyc307XG5cbiAgLy8gT3ZlcnJpZGUgd2l0aCBjb21tYW5kIGxpbmUgdmFyaWFibGVzIGlmIHByb3ZpZGVkXG4gIGlmKHZhcmlhYmxlcykge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBjbGlWYXJzID0gSlNPTi5wYXJzZSh2YXJpYWJsZXMpO1xuICAgICAgdmFyaWFibGVzT2JqID0gey4uLnZhcmlhYmxlc09iaiwgLi4uY2xpVmFyc307XG4gICAgfSBjYXRjaChfZXJyb3IpIHtcbiAgICAgIGxvZyhgXFxuJHtjbGlOYW1lfSBFcnJvcjogRW52aXJvbm1lbnQgdmFyaWFibGVzIG9wdGlvbiBpcyBub3QgYSB2YWxpZCBKU09OIG9iamVjdC5gLCAnZXJyb3InLCBxdWlldCk7XG4gICAgICBjYWxsYmFjaygxKTtcbiAgICAgIHJldHVybiAxO1xuICAgIH1cbiAgfVxuXG4gIHByb2Nlc3MuZW52ID0gey4uLnByb2Nlc3MuZW52LCAuLi52YXJpYWJsZXNPYmp9O1xuXG4gIC8vIElmIGluIHRlc3QgbW9kZSwgZXhpdCBlYXJseSBhZnRlciBsb2FkaW5nIGVudmlyb25tZW50IHZhcmlhYmxlc1xuICBpZih0ZXN0KSB7XG4gICAgbG9nKCdUZXN0IG1vZGU6IEVudmlyb25tZW50IHZhcmlhYmxlcyBsb2FkZWQsIGV4aXRpbmcnLCAnaW5mbycsIHF1aWV0KTtcbiAgICBjYWxsYmFjaygwKTtcbiAgICByZXR1cm4gMDtcbiAgfVxuXG4gIGlmKHJlbW92ZSkge1xuICAgIHNwaW5uZXIuc3RhcnQoJ0NsZWFuaW5nIG91dHB1dCBkaXJlY3RvcnkuLi4nKTtcbiAgICBhd2FpdCByZW1vdmVGaWxlcyhvdXRwdXRGdWxsUGF0aCB8fCAnJyk7XG4gICAgc3Bpbm5lci5zdWNjZWVkKCdTdWNjZXNzZnVsbHkgY2xlYW5lZCBvdXRwdXQgZGlyZWN0b3J5IScpO1xuICB9XG5cbiAgLy8gTG9hZCBzZXJ2ZXJsZXNzIGNvbmZpZ3VyYXRpb25cbiAgbGV0IHNlcnZlcmxlc3NDb25maWc6IFNlcnZlcmxlc3NDb25maWcgPSB7fTtcblxuICB0cnkge1xuICAgIC8vIFVzZSBnZXRQYWNrYWdlRGlyIHRvIGhhbmRsZSBucG0gd29ya3NwYWNlcyBjb3JyZWN0bHlcbiAgICBjb25zdCBwYWNrYWdlRGlyID0gZ2V0UGFja2FnZURpcigpO1xuXG4gICAgLy8gVHJ5IG11bHRpcGxlIGNvbmZpZyBmaWxlIGZvcm1hdHNcbiAgICBjb25zdCBjb25maWdGb3JtYXRzID0gY29uZmlnID8gW2NvbmZpZ10gOiBbXG4gICAgICBwYXRoUmVzb2x2ZShwYWNrYWdlRGlyLCAnbGV4LmNvbmZpZy5tanMnKSxcbiAgICAgIHBhdGhSZXNvbHZlKHBhY2thZ2VEaXIsICdsZXguY29uZmlnLmpzJyksXG4gICAgICBwYXRoUmVzb2x2ZShwYWNrYWdlRGlyLCAnbGV4LmNvbmZpZy5janMnKSxcbiAgICAgIHBhdGhSZXNvbHZlKHBhY2thZ2VEaXIsICdsZXguY29uZmlnLnRzJylcbiAgICBdO1xuXG4gICAgbGV0IGNvbmZpZ1BhdGg6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICAgIGZvcihjb25zdCBjYW5kaWRhdGVQYXRoIG9mIGNvbmZpZ0Zvcm1hdHMpIHtcbiAgICAgIGlmKGV4aXN0c1N5bmMoY2FuZGlkYXRlUGF0aCkpIHtcbiAgICAgICAgY29uZmlnUGF0aCA9IGNhbmRpZGF0ZVBhdGg7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmKGNvbmZpZ1BhdGgpIHtcbiAgICAgIGxvZyhgTG9hZGluZyBzZXJ2ZXJsZXNzIGNvbmZpZyBmcm9tOiAke2NvbmZpZ1BhdGh9YCwgJ2luZm8nLCBxdWlldCk7XG4gICAgICBjb25zdCBjb25maWdNb2R1bGUgPSBhd2FpdCBpbXBvcnQoY29uZmlnUGF0aCk7XG4gICAgICBzZXJ2ZXJsZXNzQ29uZmlnID0gY29uZmlnTW9kdWxlLmRlZmF1bHQ/LnNlcnZlcmxlc3MgfHwgY29uZmlnTW9kdWxlLnNlcnZlcmxlc3MgfHwge307XG4gICAgICBsb2coJ1NlcnZlcmxlc3MgY29uZmlnIGxvYWRlZCBzdWNjZXNzZnVsbHknLCAnaW5mbycsIHF1aWV0KTtcbiAgICAgIGNvbnN0IGZ1bmN0aW9uTmFtZXMgPSBPYmplY3Qua2V5cyhzZXJ2ZXJsZXNzQ29uZmlnLmZ1bmN0aW9ucyB8fCB7fSk7XG4gICAgICBsb2coYExvYWRlZCBmdW5jdGlvbnM6ICR7ZnVuY3Rpb25OYW1lcy5sZW5ndGggPiAwID8gZnVuY3Rpb25OYW1lcy5qb2luKCcsICcpIDogJ25vbmUnfWAsICdpbmZvJywgcXVpZXQpO1xuXG4gICAgICAvLyBEZWJ1ZzogUHJpbnQgZnVsbCBjb25maWcgaWYgZGVidWcgbW9kZVxuICAgICAgaWYoZGVidWcpIHtcbiAgICAgICAgbG9nKGBGdWxsIHNlcnZlcmxlc3MgY29uZmlnOiAke0pTT04uc3RyaW5naWZ5KHNlcnZlcmxlc3NDb25maWcsIG51bGwsIDIpfWAsICdpbmZvJywgZmFsc2UpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBsb2coYE5vIHNlcnZlcmxlc3MgY29uZmlnIGZvdW5kLiBUcmllZDogJHtjb25maWdGb3JtYXRzLmpvaW4oJywgJyl9YCwgJ3dhcm4nLCBxdWlldCk7XG4gICAgfVxuICB9IGNhdGNoKGVycm9yKSB7XG4gICAgbG9nKGBFcnJvciBsb2FkaW5nIHNlcnZlcmxlc3MgY29uZmlnOiAke2Vycm9yLm1lc3NhZ2V9YCwgJ2Vycm9yJywgcXVpZXQpO1xuICAgIGlmKGRlYnVnKSB7XG4gICAgICBsb2coYENvbmZpZyBlcnJvciBzdGFjazogJHtlcnJvci5zdGFja31gLCAnZXJyb3InLCBmYWxzZSk7XG4gICAgfVxuICAgIC8vIERvbid0IGV4aXQsIGNvbnRpbnVlIHdpdGggZW1wdHkgY29uZmlnXG4gIH1cblxuICAvLyBNZXJnZSBjb25maWcgd2l0aCBjb21tYW5kIGxpbmUgb3B0aW9uc1xuICAvLyBEZXRlcm1pbmUgZWZmZWN0aXZlIGhvc3QvcG9ydHMgd2l0aCBjb3JyZWN0IHByZWNlZGVuY2U6IENMSSA+IGNvbmZpZyA+IGRlZmF1bHRzXG4gIGNvbnN0IGNvbmZpZ09mZmxpbmUgPSBzZXJ2ZXJsZXNzQ29uZmlnLmN1c3RvbT8uWydzZXJ2ZXJsZXNzLW9mZmxpbmUnXSB8fCB7fTtcbiAgY29uc3QgZWZmZWN0aXZlSG9zdCA9IChjbGlIb3N0ID8/IGNvbmZpZ09mZmxpbmUuaG9zdCA/PyAnbG9jYWxob3N0JykgYXMgc3RyaW5nO1xuICBjb25zdCB0b051bWJlciA9ICh2OiBhbnksIGZhbGxiYWNrOiBudW1iZXIpOiBudW1iZXIgPT4ge1xuICAgIGlmKHYgPT09IHVuZGVmaW5lZCB8fCB2ID09PSBudWxsIHx8IHYgPT09ICcnKSB7XG4gICAgICByZXR1cm4gZmFsbGJhY2s7XG4gICAgfVxuXG4gICAgY29uc3QgbiA9IHR5cGVvZiB2ID09PSAnbnVtYmVyJyA/IHYgOiBwYXJzZUludChTdHJpbmcodikpO1xuICAgIHJldHVybiBOdW1iZXIuaXNGaW5pdGUobikgPyBuIDogZmFsbGJhY2s7XG4gIH07XG4gIGNvbnN0IGVmZmVjdGl2ZUh0dHBQb3J0ID0gdG9OdW1iZXIoY2xpSHR0cFBvcnQgPz8gY29uZmlnT2ZmbGluZS5odHRwUG9ydCwgNTAwMCk7XG4gIGNvbnN0IGVmZmVjdGl2ZUh0dHBzUG9ydCA9IHRvTnVtYmVyKGNsaUh0dHBzUG9ydCA/PyBjb25maWdPZmZsaW5lLmh0dHBzUG9ydCwgNTAwMSk7XG4gIGNvbnN0IGVmZmVjdGl2ZVdzUG9ydCA9IHRvTnVtYmVyKGNsaVdzUG9ydCA/PyBjb25maWdPZmZsaW5lLndzUG9ydCwgNTAwMik7XG5cbiAgY29uc3QgZmluYWxDb25maWc6IFNlcnZlcmxlc3NDb25maWcgPSB7XG4gICAgLi4uc2VydmVybGVzc0NvbmZpZyxcbiAgICBjdXN0b206IHtcbiAgICAgICdzZXJ2ZXJsZXNzLW9mZmxpbmUnOiB7XG4gICAgICAgIGNvcnM6IHNlcnZlcmxlc3NDb25maWcuY3VzdG9tPy5bJ3NlcnZlcmxlc3Mtb2ZmbGluZSddPy5jb3JzICE9PSBmYWxzZSxcbiAgICAgICAgaG9zdDogZWZmZWN0aXZlSG9zdCxcbiAgICAgICAgaHR0cFBvcnQ6IGVmZmVjdGl2ZUh0dHBQb3J0LFxuICAgICAgICBodHRwc1BvcnQ6IGVmZmVjdGl2ZUh0dHBzUG9ydCxcbiAgICAgICAgd3NQb3J0OiBlZmZlY3RpdmVXc1BvcnRcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgY29uc3Qgb3V0cHV0RGlyID0gb3V0cHV0RnVsbFBhdGggfHwgJ2xpYic7XG4gIGxvZyhgVXNpbmcgb3V0cHV0IGRpcmVjdG9yeTogJHtvdXRwdXREaXJ9YCwgJ2luZm8nLCBxdWlldCk7XG5cbiAgdHJ5IHtcbiAgICBzcGlubmVyLnN0YXJ0KCdTdGFydGluZyBzZXJ2ZXJsZXNzIGRldmVsb3BtZW50IHNlcnZlci4uLicpO1xuXG4gICAgY29uc3QgaHR0cFBvcnQgPSBmaW5hbENvbmZpZy5jdXN0b20hWydzZXJ2ZXJsZXNzLW9mZmxpbmUnXSEuaHR0cFBvcnQhO1xuICAgIGNvbnN0IHdzUG9ydCA9IGZpbmFsQ29uZmlnLmN1c3RvbSFbJ3NlcnZlcmxlc3Mtb2ZmbGluZSddIS53c1BvcnQhO1xuICAgIGNvbnN0IGhvc3QgPSBmaW5hbENvbmZpZy5jdXN0b20hWydzZXJ2ZXJsZXNzLW9mZmxpbmUnXSEuaG9zdCE7XG5cbiAgICBsb2coYENyZWF0aW5nIEhUVFAgc2VydmVyIG9uICR7aG9zdH06JHtodHRwUG9ydH1gLCAnaW5mbycsIHF1aWV0KTtcbiAgICBsb2coYENyZWF0aW5nIFdlYlNvY2tldCBzZXJ2ZXIgb24gcG9ydCAke3dzUG9ydH1gLCAnaW5mbycsIHF1aWV0KTtcblxuICAgIC8vIENyZWF0ZSBFeHByZXNzIHNlcnZlclxuICAgIGNvbnN0IGV4cHJlc3NBcHAgPSBhd2FpdCBjcmVhdGVFeHByZXNzU2VydmVyKFxuICAgICAgZmluYWxDb25maWcsXG4gICAgICBvdXRwdXREaXIsXG4gICAgICBodHRwUG9ydCxcbiAgICAgIGhvc3QsXG4gICAgICBxdWlldCxcbiAgICAgIGRlYnVnXG4gICAgKTtcblxuICAgIC8vIENyZWF0ZSBXZWJTb2NrZXQgc2VydmVyXG4gICAgY29uc3Qgd3NTZXJ2ZXIgPSBjcmVhdGVXZWJTb2NrZXRTZXJ2ZXIoXG4gICAgICBmaW5hbENvbmZpZyxcbiAgICAgIG91dHB1dERpcixcbiAgICAgIHdzUG9ydCxcbiAgICAgIHF1aWV0LFxuICAgICAgZGVidWdcbiAgICApO1xuXG4gICAgLy8gSGFuZGxlIHNlcnZlciBlcnJvcnNcbiAgICB3c1NlcnZlci5vbignZXJyb3InLCAoZXJyb3IpID0+IHtcbiAgICAgIGxvZyhgV2ViU29ja2V0IHNlcnZlciBlcnJvcjogJHtlcnJvci5tZXNzYWdlfWAsICdlcnJvcicsIHF1aWV0KTtcbiAgICAgIHNwaW5uZXIuZmFpbCgnRmFpbGVkIHRvIHN0YXJ0IFdlYlNvY2tldCBzZXJ2ZXIuJyk7XG4gICAgICBjYWxsYmFjaygxKTtcbiAgICAgIHJldHVybjtcbiAgICB9KTtcblxuICAgIC8vIFN0YXJ0IEV4cHJlc3Mgc2VydmVyXG4gICAgY29uc3Qgc2VydmVyID0gZXhwcmVzc0FwcC5saXN0ZW4oaHR0cFBvcnQsIGhvc3QsICgpID0+IHtcbiAgICAgIHNwaW5uZXIuc3VjY2VlZCgnU2VydmVybGVzcyBkZXZlbG9wbWVudCBzZXJ2ZXIgc3RhcnRlZC4nKTtcblxuICAgICAgZGlzcGxheVNlcnZlclN0YXR1cyhcbiAgICAgICAgaHR0cFBvcnQsXG4gICAgICAgIGZpbmFsQ29uZmlnLmN1c3RvbSFbJ3NlcnZlcmxlc3Mtb2ZmbGluZSddIS5odHRwc1BvcnQhLFxuICAgICAgICB3c1BvcnQsXG4gICAgICAgIGhvc3QsXG4gICAgICAgIHF1aWV0XG4gICAgICApO1xuXG4gICAgICBmZXRjaFB1YmxpY0lwKHVzZVB1YmxpY0lwKS50aGVuKChwdWJsaWNJcCkgPT4ge1xuICAgICAgICBpZihwdWJsaWNJcCkge1xuICAgICAgICAgIGRpc3BsYXlTZXJ2ZXJTdGF0dXMoXG4gICAgICAgICAgICBodHRwUG9ydCxcbiAgICAgICAgICAgIGZpbmFsQ29uZmlnLmN1c3RvbSFbJ3NlcnZlcmxlc3Mtb2ZmbGluZSddIS5odHRwc1BvcnQhLFxuICAgICAgICAgICAgd3NQb3J0LFxuICAgICAgICAgICAgaG9zdCxcbiAgICAgICAgICAgIHF1aWV0LFxuICAgICAgICAgICAgcHVibGljSXBcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIC8vIEhhbmRsZSBFeHByZXNzIHNlcnZlciBlcnJvcnNcbiAgICBzZXJ2ZXIub24oJ2Vycm9yJywgKGVycm9yKSA9PiB7XG4gICAgICBsb2coYEV4cHJlc3Mgc2VydmVyIGVycm9yOiAke2Vycm9yLm1lc3NhZ2V9YCwgJ2Vycm9yJywgcXVpZXQpO1xuICAgICAgc3Bpbm5lci5mYWlsKCdGYWlsZWQgdG8gc3RhcnQgRXhwcmVzcyBzZXJ2ZXIuJyk7XG4gICAgICBjYWxsYmFjaygxKTtcbiAgICAgIHJldHVybjtcbiAgICB9KTtcblxuICAgIC8vIEhhbmRsZSBncmFjZWZ1bCBzaHV0ZG93blxuICAgIGNvbnN0IHNodXRkb3duID0gKCkgPT4ge1xuICAgICAgbG9nKCdcXG5TaHV0dGluZyBkb3duIHNlcnZlcmxlc3MgZGV2ZWxvcG1lbnQgc2VydmVyLi4uJywgJ2luZm8nLCBxdWlldCk7XG4gICAgICBzZXJ2ZXIuY2xvc2UoKTtcbiAgICAgIHdzU2VydmVyLmNsb3NlKCk7XG4gICAgICBjYWxsYmFjaygwKTtcbiAgICB9O1xuXG4gICAgcHJvY2Vzcy5vbignU0lHSU5UJywgc2h1dGRvd24pO1xuICAgIHByb2Nlc3Mub24oJ1NJR1RFUk0nLCBzaHV0ZG93bik7XG5cbiAgICAvLyBLZWVwIHRoZSBwcm9jZXNzIGFsaXZlXG4gICAgcHJvY2Vzcy5zdGRpbi5yZXN1bWUoKTtcblxuICAgIGxvZygnU2VydmVybGVzcyBkZXZlbG9wbWVudCBzZXJ2ZXIgaXMgcnVubmluZy4gUHJlc3MgQ3RybCtDIHRvIHN0b3AuJywgJ2luZm8nLCBxdWlldCk7XG5cbiAgICAvLyBEb24ndCBjYWxsIGNhbGxiYWNrIGhlcmUsIGxldCB0aGUgcHJvY2VzcyBzdGF5IGFsaXZlXG4gICAgcmV0dXJuIDA7XG4gIH0gY2F0Y2goZXJyb3IpIHtcbiAgICBsb2coYFxcbiR7Y2xpTmFtZX0gRXJyb3I6ICR7ZXJyb3IubWVzc2FnZX1gLCAnZXJyb3InLCBxdWlldCk7XG4gICAgc3Bpbm5lci5mYWlsKCdGYWlsZWQgdG8gc3RhcnQgc2VydmVybGVzcyBkZXZlbG9wbWVudCBzZXJ2ZXIuJyk7XG4gICAgY2FsbGJhY2soMSk7XG4gICAgcmV0dXJuIDE7XG4gIH1cbn07Il0sIm5hbWVzIjpbImJveGVuIiwiY2hhbGsiLCJleHByZXNzIiwicmVhZEZpbGVTeW5jIiwiZXhpc3RzU3luYyIsIm1rZGlyU3luYyIsIndyaXRlRmlsZVN5bmMiLCJob21lZGlyIiwicmVzb2x2ZSIsInBhdGhSZXNvbHZlIiwiam9pbiIsImlzQWJzb2x1dGUiLCJwYXRoVG9GaWxlVVJMIiwiV2ViU29ja2V0U2VydmVyIiwiTGV4Q29uZmlnIiwiZ2V0UGFja2FnZURpciIsImNyZWF0ZVNwaW5uZXIiLCJyZW1vdmVGaWxlcyIsImxvZyIsImdldENhY2hlRGlyIiwiY2FjaGVEaXIiLCJyZWN1cnNpdmUiLCJnZXRDYWNoZVBhdGgiLCJyZWFkUHVibGljSXBDYWNoZSIsImNhY2hlUGF0aCIsImNhY2hlRGF0YSIsImNhY2hlIiwiSlNPTiIsInBhcnNlIiwib25lV2Vla01zIiwiRGF0ZSIsIm5vdyIsInRpbWVzdGFtcCIsIndyaXRlUHVibGljSXBDYWNoZSIsImlwIiwic3RyaW5naWZ5IiwiZmV0Y2hQdWJsaWNJcCIsImZvcmNlUmVmcmVzaCIsIlByb21pc2UiLCJjYWNoZWQiLCJmZXRjaCIsInRoZW4iLCJyZXMiLCJ0ZXh0IiwiZGF0YSIsInRyaW0iLCJjYXRjaCIsInVuZGVmaW5lZCIsImRpc3BsYXlTZXJ2ZXJTdGF0dXMiLCJodHRwUG9ydCIsImh0dHBzUG9ydCIsIndzUG9ydCIsImhvc3QiLCJxdWlldCIsInB1YmxpY0lwIiwiaHR0cFVybCIsImh0dHBzVXJsIiwid3NVcmwiLCJ3c3NVcmwiLCJ1cmxMaW5lcyIsImdyZWVuIiwidW5kZXJsaW5lIiwic3RhdHVzQm94IiwiY3lhbiIsImJvbGQiLCJ5ZWxsb3ciLCJiYWNrZ3JvdW5kQ29sb3IiLCJib3JkZXJDb2xvciIsImJvcmRlclN0eWxlIiwibWFyZ2luIiwicGFkZGluZyIsImNvbnNvbGUiLCJsb2FkSGFuZGxlciIsImhhbmRsZXJQYXRoIiwib3V0cHV0RGlyIiwiaGFuZGxlclBhcnRzIiwic3BsaXQiLCJmaWxlUGF0aCIsImV4cG9ydE5hbWUiLCJsZW5ndGgiLCJzbGljZSIsImluY2x1ZGVzIiwiZXJyb3IiLCJwYXRoUGFydHMiLCJsYXN0UGFydCIsImZ1bGxQYXRoIiwiZXh0ZW5zaW9ucyIsInBhdGhXaXRob3V0RXh0IiwicmVwbGFjZSIsImV4dCIsImNhbmRpZGF0ZVBhdGgiLCJFcnJvciIsImltcG9ydFBhdGgiLCJlbmRzV2l0aCIsImltcG9ydFVybCIsImhyZWYiLCJoYW5kbGVyTW9kdWxlIiwiT2JqZWN0Iiwia2V5cyIsImhhbmRsZXIiLCJkZWZhdWx0IiwiaW1wb3J0RXJyb3IiLCJtZXNzYWdlIiwic3RhY2siLCJjYXB0dXJlQ29uc29sZUxvZ3MiLCJldmVudCIsImNvbnRleHQiLCJvcmlnaW5hbENvbnNvbGVMb2ciLCJvcmlnaW5hbENvbnNvbGVFcnJvciIsIm9yaWdpbmFsQ29uc29sZVdhcm4iLCJ3YXJuIiwib3JpZ2luYWxDb25zb2xlSW5mbyIsImluZm8iLCJsb2dzIiwiYXJncyIsInB1c2giLCJyZXN1bHQiLCJncmF5IiwiZm9yRWFjaCIsImNyZWF0ZUV4cHJlc3NTZXJ2ZXIiLCJjb25maWciLCJkZWJ1ZyIsImFwcCIsInVzZSIsInJlcSIsIm5leHQiLCJoZWFkZXIiLCJtZXRob2QiLCJzZW5kU3RhdHVzIiwianNvbiIsImxvYWRHcmFwaFFMU2NoZW1hIiwiZ3JhcGhxbEhhbmRsZXIiLCJmdW5jdGlvbnMiLCJmdW5jdGlvbk5hbWUiLCJmdW5jdGlvbkNvbmZpZyIsImVudHJpZXMiLCJldmVudHMiLCJodHRwIiwicGF0aCIsImdyYXBocWxQYXRoIiwiX2Z1bmN0aW9uTmFtZSIsImJvZHkiLCJxdWVyeSIsInZhcmlhYmxlcyIsIm9wZXJhdGlvbk5hbWUiLCJsb2dNZXNzYWdlIiwibWFwIiwiYXJnIiwiU3RyaW5nIiwiYXdzUmVxdWVzdElkIiwiZnVuY3Rpb25WZXJzaW9uIiwiZ2V0UmVtYWluaW5nVGltZUluTWlsbGlzIiwiaW52b2tlZEZ1bmN0aW9uQXJuIiwibG9nR3JvdXBOYW1lIiwibG9nU3RyZWFtTmFtZSIsIndyYXBwZWRIYW5kbGVyIiwiaGVhZGVycyIsImh0dHBNZXRob2QiLCJxdWVyeVN0cmluZ1BhcmFtZXRlcnMiLCJzdGF0dXNDb2RlIiwic3RhdHVzIiwia2V5IiwidmFsdWUiLCJzZXRIZWFkZXIiLCJzZW5kIiwidXJsIiwicGF0aG5hbWUiLCJtYXRjaGVkRnVuY3Rpb24iLCJmdW5jdGlvbk5hbWVzIiwiZXZlbnRQYXRoIiwiZXZlbnRNZXRob2QiLCJ0b1VwcGVyQ2FzZSIsInJlcXVlc3RNZXRob2QiLCJub3JtYWxpemVkRXZlbnRQYXRoIiwibm9ybWFsaXplZFBhdGhuYW1lIiwibWVtb3J5TGltaXRJbk1CIiwiY3JlYXRlV2ViU29ja2V0U2VydmVyIiwid3NzIiwicG9ydCIsIm9uIiwid3MiLCJ0b1N0cmluZyIsIndlYnNvY2tldCIsInJvdXRlIiwiYWN0aW9uIiwicmVxdWVzdENvbnRleHQiLCJhcGlHYXRld2F5IiwiZW5kcG9pbnQiLCJjb25uZWN0aW9uSWQiLCJyb3V0ZUtleSIsImxvYWRFbnZGaWxlIiwiZW52UGF0aCIsImVudlZhcnMiLCJlbnZDb250ZW50IiwibGluZXMiLCJsaW5lIiwidHJpbW1lZExpbmUiLCJzdGFydHNXaXRoIiwiZXF1YWxJbmRleCIsImluZGV4T2YiLCJzdWJzdHJpbmciLCJjbGVhblZhbHVlIiwic2VydmVybGVzcyIsImNtZCIsImNhbGxiYWNrIiwiY2xpTmFtZSIsImNsaUhvc3QiLCJjbGlIdHRwUG9ydCIsImNsaUh0dHBzUG9ydCIsInJlbW92ZSIsInRlc3QiLCJ1c2VQdWJsaWNJcCIsImNsaVdzUG9ydCIsInNwaW5uZXIiLCJwYXJzZUNvbmZpZyIsIm91dHB1dEZ1bGxQYXRoIiwiZW52UGF0aHMiLCJwcm9jZXNzIiwiY3dkIiwiZmlsZUVudlZhcnMiLCJ2YXJpYWJsZXNPYmoiLCJOT0RFX0VOViIsImNsaVZhcnMiLCJfZXJyb3IiLCJlbnYiLCJzdGFydCIsInN1Y2NlZWQiLCJzZXJ2ZXJsZXNzQ29uZmlnIiwicGFja2FnZURpciIsImNvbmZpZ0Zvcm1hdHMiLCJjb25maWdQYXRoIiwiY29uZmlnTW9kdWxlIiwiY29uZmlnT2ZmbGluZSIsImN1c3RvbSIsImVmZmVjdGl2ZUhvc3QiLCJ0b051bWJlciIsInYiLCJmYWxsYmFjayIsIm4iLCJwYXJzZUludCIsIk51bWJlciIsImlzRmluaXRlIiwiZWZmZWN0aXZlSHR0cFBvcnQiLCJlZmZlY3RpdmVIdHRwc1BvcnQiLCJlZmZlY3RpdmVXc1BvcnQiLCJmaW5hbENvbmZpZyIsImNvcnMiLCJleHByZXNzQXBwIiwid3NTZXJ2ZXIiLCJmYWlsIiwic2VydmVyIiwibGlzdGVuIiwic2h1dGRvd24iLCJjbG9zZSIsInN0ZGluIiwicmVzdW1lIl0sIm1hcHBpbmdzIjoiQUFBQTs7O0NBR0MsR0FDRCxPQUFPQSxXQUFXLFFBQVE7QUFDMUIsT0FBT0MsV0FBVyxRQUFRO0FBQzFCLE9BQU9DLGFBQWEsVUFBVTtBQUM5QixTQUFRQyxZQUFZLEVBQUVDLFVBQVUsRUFBRUMsU0FBUyxFQUFFQyxhQUFhLFFBQU8sS0FBSztBQUN0RSxTQUFRQyxPQUFPLFFBQU8sS0FBSztBQUMzQixTQUFRQyxXQUFXQyxXQUFXLEVBQUVDLElBQUksRUFBRUMsVUFBVSxRQUFPLE9BQU87QUFDOUQsU0FBUUMsYUFBYSxRQUFPLE1BQU07QUFDbEMsU0FBUUMsZUFBZSxRQUFPLEtBQUs7QUFFbkMsU0FBUUMsU0FBUyxFQUFFQyxhQUFhLFFBQU8scUJBQXFCO0FBQzVELFNBQVFDLGFBQWEsRUFBRUMsV0FBVyxRQUFPLHFCQUFxQjtBQUM5RCxTQUFRQyxHQUFHLFFBQU8scUJBQXFCO0FBbUR2QyxNQUFNQyxjQUFjO0lBQ2xCLE1BQU1DLFdBQVdWLEtBQUtILFdBQVc7SUFDakMsSUFBRyxDQUFDSCxXQUFXZ0IsV0FBVztRQUN4QmYsVUFBVWUsVUFBVTtZQUFDQyxXQUFXO1FBQUk7SUFDdEM7SUFDQSxPQUFPRDtBQUNUO0FBRUEsTUFBTUUsZUFBZSxJQUFjWixLQUFLUyxlQUFlO0FBRXZELE1BQU1JLG9CQUFvQjtJQUN4QixNQUFNQyxZQUFZRjtJQUNsQixJQUFHLENBQUNsQixXQUFXb0IsWUFBWTtRQUN6QixPQUFPO0lBQ1Q7SUFFQSxJQUFJO1FBQ0YsTUFBTUMs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
|
|
@@ -250,4 +250,4 @@ export const storybook = async (cmd, callback = ()=>({}))=>{
|
|
|
250
250
|
}
|
|
251
251
|
};
|
|
252
252
|
|
|
253
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21tYW5kcy9zdG9yeWJvb2svc3Rvcnlib29rLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBjaGFsayBmcm9tICdjaGFsayc7XG5pbXBvcnQge2V4ZWNhfSBmcm9tICdleGVjYSc7XG5pbXBvcnQge2V4aXN0c1N5bmN9IGZyb20gJ2ZzJztcbmltcG9ydCB7c3luYyBhcyBnbG9iU3luY30gZnJvbSAnZ2xvYic7XG5pbXBvcnQge3Jlc29sdmUgYXMgcGF0aFJlc29sdmV9IGZyb20gJ3BhdGgnO1xuXG5pbXBvcnQge0xleENvbmZpZ30gZnJvbSAnLi4vLi4vTGV4Q29uZmlnLmpzJztcbmltcG9ydCB7Y3JlYXRlU3Bpbm5lcn0gZnJvbSAnLi4vLi4vdXRpbHMvYXBwLmpzJztcbmltcG9ydCB7ZmluZFRhaWx3aW5kQ3NzUGF0aCwgcmVzb2x2ZUJpbmFyeVBhdGh9IGZyb20gJy4uLy4uL3V0aWxzL2ZpbGUuanMnO1xuaW1wb3J0IHtsb2d9IGZyb20gJy4uLy4uL3V0aWxzL2xvZy5qcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3Rvcnlib29rT3B0aW9ucyB7XG4gIHJlYWRvbmx5IGNsaU5hbWU/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IGNvbmZpZz86IHN0cmluZztcbiAgcmVhZG9ubHkgb3Blbj86IGJvb2xlYW47XG4gIHJlYWRvbmx5IHBvcnQ/OiBudW1iZXI7XG4gIHJlYWRvbmx5IHF1aWV0PzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgc3RhdGljPzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgdXNlTGV4Q29uZmlnPzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgdmFyaWFibGVzPzogc3RyaW5nO1xuICByZWFkb25seSB2ZXJib3NlPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IHR5cGUgU3Rvcnlib29rQ2FsbGJhY2sgPSAoc3RhdHVzOiBudW1iZXIpPT4gdm9pZDtcblxuY29uc3QgZmluZFN0b3J5RmlsZXMgPSAoKTogc3RyaW5nW10gPT4ge1xuICBjb25zdCBzdG9yeVBhdHRlcm5zID0gW1xuICAgICcqKi8qLnN0b3JpZXMue3RzLHRzeCxqcyxqc3h9JyxcbiAgICAnKiovKi5zdG9yeS57dHMsdHN4LGpzLGpzeH0nLFxuICAgICcqKi9zdG9yaWVzLyoqLyoue3RzLHRzeCxqcyxqc3h9J1xuICBdO1xuXG4gIGNvbnN0IHN0b3J5RmlsZXM6IHN0cmluZ1tdID0gW107XG5cbiAgc3RvcnlQYXR0ZXJucy5mb3JFYWNoKChwYXR0ZXJuKSA9PiB7XG4gICAgY29uc3QgZmlsZXMgPSBnbG9iU3luYyhwYXR0ZXJuLCB7XG4gICAgICBjd2Q6IHByb2Nlc3MuY3dkKCksXG4gICAgICBpZ25vcmU6IFsnKiovbm9kZV9tb2R1bGVzLyoqJywgJyoqL2Rpc3QvKionLCAnKiovbGliLyoqJywgJyoqL2J1aWxkLyoqJ11cbiAgICB9KTtcbiAgICBzdG9yeUZpbGVzLnB1c2goLi4uZmlsZXMpO1xuICB9KTtcblxuICByZXR1cm4gc3RvcnlGaWxlcztcbn07XG5cbmNvbnN0IGNoZWNrU3Rvcnlib29rSW5pdGlhbGl6YXRpb24gPSAoKTogYm9vbGVhbiA9PiB7XG4gIGNvbnN0IHByb2plY3RDb25maWdEaXIgPSBwYXRoUmVzb2x2ZShwcm9jZXNzLmN3ZCgpLCAnLnN0b3J5Ym9vaycpO1xuICBjb25zdCBsZXhDb25maWdEaXIgPSBwYXRoUmVzb2x2ZShMZXhDb25maWcuZ2V0TGV4RGlyKCksICcuc3Rvcnlib29rJyk7XG5cbiAgcmV0dXJuIGV4aXN0c1N5bmMocHJvamVjdENvbmZpZ0RpcikgfHwgZXhpc3RzU3luYyhsZXhDb25maWdEaXIpO1xufTtcblxuY29uc3QgZXh0cmFjdFByb2dyZXNzUGVyY2VudGFnZSA9IChvdXRwdXQ6IHN0cmluZyk6IG51bWJlciB8IG51bGwgPT4ge1xuICBjb25zdCBsaW5lcyA9IG91dHB1dC5zcGxpdCgnXFxuJyk7XG4gIGZvcihjb25zdCBsaW5lIG9mIGxpbmVzKSB7XG4gICAgaWYobGluZS5pbmNsdWRlcygnW3dlYnBhY2suUHJvZ3Jlc3NdJykgJiYgbGluZS5pbmNsdWRlcygnJScpKSB7XG4gICAgICBjb25zdCBwZXJjZW50YWdlTWF0Y2ggPSBsaW5lLm1hdGNoKC8oXFxkKyklLyk7XG4gICAgICBpZihwZXJjZW50YWdlTWF0Y2gpIHtcbiAgICAgICAgcmV0dXJuIHBhcnNlSW50KHBlcmNlbnRhZ2VNYXRjaFsxXSk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBudWxsO1xufTtcblxuY29uc3QgZmlsdGVyQW5kQmVhdXRpZnlPdXRwdXQgPSAob3V0cHV0OiBzdHJpbmcsIGlzVmVyYm9zZTogYm9vbGVhbik6IHN0cmluZyA9PiB7XG4gIGlmKGlzVmVyYm9zZSkge1xuICAgIHJldHVybiBvdXRwdXQ7XG4gIH1cblxuICBjb25zdCBsaW5lcyA9IG91dHB1dC5zcGxpdCgnXFxuJyk7XG4gIGNvbnN0IGZpbHRlcmVkTGluZXMgPSBsaW5lcy5maWx0ZXIoKGxpbmUpID0+IHtcbiAgICBpZihsaW5lLmluY2x1ZGVzKCdbd2VicGFjay5Qcm9ncmVzc10nKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmKGxpbmUuaW5jbHVkZXMoJ1N0b3J5Ym9vaycpIHx8XG4gICAgICBsaW5lLmluY2x1ZGVzKCdMb2NhbDonKSB8fFxuICAgICAgbGluZS5pbmNsdWRlcygnaHR0cDovL2xvY2FsaG9zdCcpIHx8XG4gICAgICBsaW5lLmluY2x1ZGVzKCdpbmZvID0+JykgfHxcbiAgICAgIGxpbmUuaW5jbHVkZXMoJ1N0YXJ0aW5nJykgfHxcbiAgICAgIGxpbmUuaW5jbHVkZXMoJ3JlYWR5JykgfHxcbiAgICAgIGxpbmUuaW5jbHVkZXMoJ2Vycm9yJykgfHxcbiAgICAgIGxpbmUuaW5jbHVkZXMoJ3dhcm5pbmcnKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG4gIH0pO1xuXG4gIHJldHVybiBmaWx0ZXJlZExpbmVzLmpvaW4oJ1xcbicpO1xufTtcblxuY29uc3QgYmVhdXRpZnlPdXRwdXQgPSAob3V0cHV0OiBzdHJpbmcpOiBzdHJpbmcgPT4gb3V0cHV0XG4gIC5yZXBsYWNlKC9TdG9yeWJvb2sgdltcXGQuXSsvZywgY2hhbGsuY3lhbignJCYnKSlcbiAgLnJlcGxhY2UoL2luZm8gPT4vZywgY2hhbGsuYmx1ZSgnaW5mbyA9PicpKVxuICAucmVwbGFjZSgvTG9jYWw6L2csIGNoYWxrLmdyZWVuKCdMb2NhbDonKSlcbiAgLnJlcGxhY2UoL09uIHlvdXIgbmV0d29yazovZywgY2hhbGsuZ3JlZW4oJ09uIHlvdXIgbmV0d29yazonKSlcbiAgLnJlcGxhY2UoL1N0b3J5Ym9vay4qc3RhcnRlZC9nLCBjaGFsay5ncmVlbignJCYnKSlcbiAgLnJlcGxhY2UoL1N0b3J5Ym9vay4qcmVhZHkvZywgY2hhbGsuZ3JlZW4oJyQmJykpXG4gIC5yZXBsYWNlKC9lcnJvci9nLCBjaGFsay5yZWQoJyQmJykpXG4gIC5yZXBsYWNlKC93YXJuaW5nL2csIGNoYWxrLnllbGxvdygnJCYnKSlcbiAgLnJlcGxhY2UoLyhcXGQrKSUvZywgY2hhbGsubWFnZW50YSgnJDElJykpO1xuXG5leHBvcnQgY29uc3Qgc3Rvcnlib29rID0gYXN5bmMgKGNtZDogU3Rvcnlib29rT3B0aW9ucywgY2FsbGJhY2s6IFN0b3J5Ym9va0NhbGxiYWNrID0gKCkgPT4gKHt9KSk6IFByb21pc2U8bnVtYmVyPiA9PiB7XG4gIGNvbnN0IHtjbGlOYW1lID0gJ0xleCcsIGNvbmZpZywgb3BlbiA9IGZhbHNlLCBwb3J0ID0gNjAwNywgcXVpZXQsIHN0YXRpYzogc3RhdGljQnVpbGQgPSBmYWxzZSwgdXNlTGV4Q29uZmlnID0gZmFsc2UsIHZhcmlhYmxlcywgdmVyYm9zZSA9IGZhbHNlfSA9IGNtZDtcblxuICBjb25zdCBzcGlubmVyID0gY3JlYXRlU3Bpbm5lcihxdWlldCk7XG5cbiAgbG9nKGNoYWxrLmN5YW4oYCR7Y2xpTmFtZX0gc3RhcnRpbmcgU3Rvcnlib29rLi4uYCksICdpbmZvJywgcXVpZXQpO1xuXG4gIGF3YWl0IExleENvbmZpZy5wYXJzZUNvbmZpZyhjbWQpO1xuXG4gIGxldCB2YXJpYWJsZXNPYmo6IG9iamVjdCA9IHtOT0RFX0VOVjogJ2RldmVsb3BtZW50J307XG5cbiAgaWYodmFyaWFibGVzKSB7XG4gICAgdHJ5IHtcbiAgICAgIHZhcmlhYmxlc09iaiA9IEpTT04ucGFyc2UodmFyaWFibGVzKTtcbiAgICB9IGNhdGNoKF9lcnJvcikge1xuICAgICAgbG9nKGBcXG4ke2NsaU5hbWV9IEVycm9yOiBFbnZpcm9ubWVudCB2YXJpYWJsZXMgb3B0aW9uIGlzIG5vdCBhIHZhbGlkIEpTT04gb2JqZWN0LmAsICdlcnJvcicsIHF1aWV0KTtcbiAgICAgIGNhbGxiYWNrKDEpO1xuICAgICAgcmV0dXJuIDE7XG4gICAgfVxuICB9XG5cbiAgcHJvY2Vzcy5lbnYgPSB7Li4ucHJvY2Vzcy5lbnYsIC4uLnZhcmlhYmxlc09ian07XG5cbiAgc3Bpbm5lci5zdGFydCgnRmluZGluZyBzdG9yeSBmaWxlcy4uLicpO1xuICBjb25zdCBzdG9yeUZpbGVzID0gZmluZFN0b3J5RmlsZXMoKTtcblxuICBpZihzdG9yeUZpbGVzLmxlbmd0aCA9PT0gMCkge1xuICAgIHNwaW5uZXIuZmFpbCgnTm8gc3RvcnkgZmlsZXMgZm91bmQgaW4gdGhlIHByb2plY3QuJyk7XG4gICAgbG9nKCdQbGVhc2UgY3JlYXRlIHN0b3J5IGZpbGVzIHdpdGggLnN0b3JpZXMudHMvLnN0b3JpZXMuanMgZXh0ZW5zaW9ucyBvciBpbiBhIHN0b3JpZXMvIGRpcmVjdG9yeS4nLCAnaW5mbycsIHF1aWV0KTtcbiAgICBjYWxsYmFjaygxKTtcbiAgICByZXR1cm4gMTtcbiAgfVxuXG4gIHNwaW5uZXIuc3VjY2VlZChgRm91bmQgJHtzdG9yeUZpbGVzLmxlbmd0aH0gc3RvcnkgZmlsZShzKWApO1xuXG4gIGNvbnN0IHRhaWx3aW5kQ3NzUGF0aCA9IGZpbmRUYWlsd2luZENzc1BhdGgoKTtcblxuICBjb25zb2xlLmxvZyh7dGFpbHdpbmRDc3NQYXRofSk7XG4gIGlmKHRhaWx3aW5kQ3NzUGF0aCkge1xuICAgIGlmKCFxdWlldCkge1xuICAgICAgbG9nKGNoYWxrLmdyZWVuKGDinJMgVGFpbHdpbmQgQ1NTIGludGVncmF0aW9uIGRldGVjdGVkOiAke3RhaWx3aW5kQ3NzUGF0aH1gKSwgJ2luZm8nLCBxdWlldCk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGlmKCFxdWlldCkge1xuICAgICAgbG9nKGNoYWxrLnllbGxvdygn4pqgIE5vIFRhaWx3aW5kIENTUyBmaWxlIGZvdW5kIGluIHByb2plY3QnKSwgJ2luZm8nLCBxdWlldCk7XG4gICAgICBsb2coY2hhbGsuZ3JheSgnQ3JlYXRlIGEgdGFpbHdpbmQuY3NzIGZpbGUgd2l0aCBAdGFpbHdpbmQgZGlyZWN0aXZlcyBmb3IgZnVsbCBUYWlsd2luZCBzdXBwb3J0JyksICdpbmZvJywgcXVpZXQpO1xuICAgIH1cbiAgfVxuXG4gIGlmKCFjaGVja1N0b3J5Ym9va0luaXRpYWxpemF0aW9uKCkpIHtcbiAgICBzcGlubmVyLmZhaWwoJ1N0b3J5Ym9vayBpcyBub3QgaW5pdGlhbGl6ZWQgaW4gdGhpcyBwcm9qZWN0IG9yIGluIExleC4nKTtcbiAgICBsb2coJ1BsZWFzZSBydW4gXCJucHggc3Rvcnlib29rQGxhdGVzdCBpbml0XCIgdG8gc2V0IHVwIFN0b3J5Ym9vayBpbiB5b3VyIHByb2plY3QsIG9yIGVuc3VyZSBMZXggaGFzIGEgdmFsaWQgLnN0b3J5Ym9vayBjb25maWd1cmF0aW9uLicsICdpbmZvJywgcXVpZXQpO1xuICAgIGNhbGxiYWNrKDEpO1xuICAgIHJldHVybiAxO1xuICB9XG5cbiAgY29uc3QgcHJvamVjdENvbmZpZ0RpciA9IHBhdGhSZXNvbHZlKHByb2Nlc3MuY3dkKCksICcuc3Rvcnlib29rJyk7XG4gIGNvbnN0IGxleENvbmZpZ0RpciA9IHBhdGhSZXNvbHZlKExleENvbmZpZy5nZXRMZXhEaXIoKSwgJy5zdG9yeWJvb2snKTtcblxuICBsZXQgY29uZmlnRGlyID0gY29uZmlnO1xuICBpZighY29uZmlnRGlyKSB7XG4gICAgY29uZmlnRGlyID0gbGV4Q29uZmlnRGlyO1xuICAgIGlmKCF1c2VMZXhDb25maWcgJiYgZXhpc3RzU3luYyhwcm9qZWN0Q29uZmlnRGlyKSkge1xuICAgICAgY29uZmlnRGlyID0gcHJvamVjdENvbmZpZ0RpcjtcbiAgICB9XG4gIH1cblxuICBpZighcXVpZXQpIHtcbiAgICBsb2coY2hhbGsuZ3JheShgUHJvamVjdCBjb25maWcgZGlyOiAke3Byb2plY3RDb25maWdEaXJ9IChleGlzdHM6ICR7ZXhpc3RzU3luYyhwcm9qZWN0Q29uZmlnRGlyKX0pYCksICdpbmZvJywgcXVpZXQpO1xuICAgIGxvZyhjaGFsay5ncmF5KGBMZXggY29uZmlnIGRpcjogJHtsZXhDb25maWdEaXJ9IChleGlzdHM6ICR7ZXhpc3RzU3luYyhsZXhDb25maWdEaXIpfSlgKSwgJ2luZm8nLCBxdWlldCk7XG4gICAgaWYodXNlTGV4Q29uZmlnKSB7XG4gICAgICBsb2coY2hhbGsuYmx1ZSgnVXNpbmcgTGV4IFN0b3J5Ym9vayBjb25maWd1cmF0aW9uICgtLXVzZS1sZXgtY29uZmlnIGZsYWcpJyksICdpbmZvJywgcXVpZXQpO1xuICAgIH1cbiAgICBsb2coY2hhbGsuZ3JheShgSW5pdGlhbCBjb25maWcgZGlyOiAke2NvbmZpZ0Rpcn1gKSwgJ2luZm8nLCBxdWlldCk7XG4gIH1cblxuICBpZihjb25maWdEaXIgPT09IGxleENvbmZpZ0Rpcikge1xuICAgIGlmKCFxdWlldCkge1xuICAgICAgbG9nKGNoYWxrLmJsdWUoJ1VzaW5nIExleCBjb25maWcsIHdpbGwgY3JlYXRlIHRlbXBvcmFyeSBjb25maWcgaW4gcHJvamVjdCAuc3Rvcnlib29rIGRpcmVjdG9yeScpLCAnaW5mbycsIHF1aWV0KTtcbiAgICB9XG4gICAgY29uc3QgcHJvamVjdFN0b3J5Ym9va0RpciA9IHBhdGhSZXNvbHZlKHByb2Nlc3MuY3dkKCksICcuc3Rvcnlib29rJyk7XG5cbiAgICBjb25zdCBmcyA9IGF3YWl0IGltcG9ydCgnZnMvcHJvbWlzZXMnKTtcbiAgICBhd2FpdCBmcy5ta2Rpcihwcm9qZWN0U3Rvcnlib29rRGlyLCB7cmVjdXJzaXZlOiB0cnVlfSk7XG5cbiAgICBjb25zdCBsZXhNYWluUGF0aCA9IHBhdGhSZXNvbHZlKGxleENvbmZpZ0RpciwgJ21haW4udHMnKTtcbiAgICBjb25zdCBwcm9qZWN0TWFpblBhdGggPSBwYXRoUmVzb2x2ZShwcm9qZWN0U3Rvcnlib29rRGlyLCAnbWFpbi50cycpO1xuICAgIGxldCBtYWluQ29udGVudCA9IGF3YWl0IGZzLnJlYWRGaWxlKGxleE1haW5QYXRoLCAndXRmOCcpO1xuXG4gICAgbWFpbkNvbnRlbnQgPSBtYWluQ29udGVudC5yZXBsYWNlKFxuICAgICAgL3N0b3JpZXM6XFxzKlxcWy4qP1xcXS8sXG4gICAgICBgc3RvcmllczogWycke3BhdGhSZXNvbHZlKHByb2Nlc3MuY3dkKCksICdzcmMvKiovKi5zdG9yaWVzLkAodHN8dHN4KScpfScsICcke3BhdGhSZXNvbHZlKHByb2Nlc3MuY3dkKCksICdzcmMvKiovKi5tZHgnKX0nXWBcbiAgICApO1xuXG4gICAgY29uc3QgbGV4Tm9kZU1vZHVsZXMgPSBwYXRoUmVzb2x2ZShMZXhDb25maWcuZ2V0TGV4RGlyKCksICdub2RlX21vZHVsZXMnKTtcbiAgICBtYWluQ29udGVudCA9IG1haW5Db250ZW50LnJlcGxhY2UoXG4gICAgICAvY29uc3QgbGV4TW9kdWxlID0gXFwobW9kdWxlUGF0aDogc3RyaW5nXFwpID0+IHJlc29sdmVcXChnZXRMZXhOb2RlTW9kdWxlc1BhdGhcXChcXCksIG1vZHVsZVBhdGhcXCk7LyxcbiAgICAgIGBjb25zdCBsZXhNb2R1bGUgPSAobW9kdWxlUGF0aDogc3RyaW5nKSA9PiByZXNvbHZlKCcke2xleE5vZGVNb2R1bGVzfScsIG1vZHVsZVBhdGgpO2BcbiAgICApO1xuXG4gICAgYXdhaXQgZnMud3JpdGVGaWxlKHByb2plY3RNYWluUGF0aCwgbWFpbkNvbnRlbnQpO1xuXG4gICAgY29uc3QgbGV4UHJldmlld1BhdGggPSBwYXRoUmVzb2x2ZShsZXhDb25maWdEaXIsICdwcmV2aWV3LnRzeCcpO1xuICAgIGlmKGV4aXN0c1N5bmMobGV4UHJldmlld1BhdGgpKSB7XG4gICAgICBjb25zdCBwcmV2aWV3Q29udGVudCA9IGF3YWl0IGZzLnJlYWRGaWxlKGxleFByZXZpZXdQYXRoLCAndXRmOCcpO1xuICAgICAgYXdhaXQgZnMud3JpdGVGaWxlKHBhdGhSZXNvbHZlKHByb2plY3RTdG9yeWJvb2tEaXIsICdwcmV2aWV3LnRzeCcpLCBwcmV2aWV3Q29udGVudCk7XG4gICAgfVxuXG4gICAgY29uZmlnRGlyID0gcHJvamVjdFN0b3J5Ym9va0RpcjtcbiAgfVxuICBpZighZXhpc3RzU3luYyhjb25maWdEaXIpKSB7XG4gICAgc3Bpbm5lci5mYWlsKCdTdG9yeWJvb2sgY29uZmlndXJhdGlvbiBub3QgZm91bmQuJyk7XG4gICAgbG9nKGBQcm9qZWN0IGNvbmZpZzogJHtwcm9qZWN0Q29uZmlnRGlyfWAsICdpbmZvJywgcXVpZXQpO1xuICAgIGxvZyhgTGV4IGNvbmZpZzogJHtsZXhDb25maWdEaXJ9YCwgJ2luZm8nLCBxdWlldCk7XG4gICAgbG9nKCdQbGVhc2UgcnVuIFwibnB4IHN0b3J5Ym9va0BsYXRlc3QgaW5pdFwiIHRvIHNldCB1cCBTdG9yeWJvb2sgaW4geW91ciBwcm9qZWN0LCBvciBlbnN1cmUgTGV4IGhhcyBhIHZhbGlkIC5zdG9yeWJvb2sgY29uZmlndXJhdGlvbi4nLCAnaW5mbycsIHF1aWV0KTtcbiAgICBjYWxsYmFjaygxKTtcbiAgICByZXR1cm4gMTtcbiAgfVxuXG4gIGNvbnN0IHN0b3J5Ym9va1BhdGggPSByZXNvbHZlQmluYXJ5UGF0aCgnc3Rvcnlib29rJyk7XG5cbiAgaWYoIXN0b3J5Ym9va1BhdGgpIHtcbiAgICBsb2coYFxcbiR7Y2xpTmFtZX0gRXJyb3I6IHN0b3J5Ym9vayBiaW5hcnkgbm90IGZvdW5kIGluIExleCdzIG5vZGVfbW9kdWxlcyBvciBtb25vcmVwbyByb290YCwgJ2Vycm9yJywgcXVpZXQpO1xuICAgIGxvZygnUGxlYXNlIHJlaW5zdGFsbCBMZXggb3IgY2hlY2sgeW91ciBTdG9yeWJvb2sgaW5zdGFsbGF0aW9uLicsICdpbmZvJywgcXVpZXQpO1xuICAgIGNhbGxiYWNrKDEpO1xuICAgIHJldHVybiAxO1xuICB9XG5cbiAgY29uc3Qgc3Rvcnlib29rQXJncyA9IFtzdGF0aWNCdWlsZCA/ICdidWlsZCcgOiAnZGV2J107XG4gIHN0b3J5Ym9va0FyZ3MucHVzaCgnLS1jb25maWctZGlyJywgY29uZmlnRGlyKTtcblxuICBpZihwb3J0KSB7XG4gICAgc3Rvcnlib29rQXJncy5wdXNoKCctLXBvcnQnLCBwb3J0LnRvU3RyaW5nKCkpO1xuICB9XG5cbiAgaWYob3Blbikge1xuICAgIHN0b3J5Ym9va0FyZ3MucHVzaCgnLS1vcGVuJyk7XG4gIH1cblxuICBpZihzdGF0aWNCdWlsZCkge1xuICAgIGNvbnN0IG91dHB1dERpciA9IHBhdGhSZXNvbHZlKHByb2Nlc3MuY3dkKCksICdzdG9yeWJvb2stc3RhdGljJyk7XG4gICAgc3Rvcnlib29rQXJncy5wdXNoKCctLW91dHB1dC1kaXInLCBvdXRwdXREaXIpO1xuICB9XG5cbiAgaWYoIXF1aWV0KSB7XG4gICAgbG9nKGNoYWxrLmdyYXkoYENvbmZpZyBkaXJlY3Rvcnk6ICR7Y29uZmlnRGlyfWApLCAnaW5mbycsIHF1aWV0KTtcbiAgfVxuXG4gIHByb2Nlc3MuZW52LlRBSUxXSU5EX0NTU19QQVRIID0gdGFpbHdpbmRDc3NQYXRoO1xuXG4gIHRyeSB7XG4gICAgc3Bpbm5lci5zdGFydChzdGF0aWNCdWlsZCA/ICdCdWlsZGluZyBzdGF0aWMgU3Rvcnlib29rLi4uJyA6ICdTdGFydGluZyBTdG9yeWJvb2sgZGV2ZWxvcG1lbnQgc2VydmVyLi4uJyk7XG5cbiAgICBjb25zdCBzdG9yeWJvb2tQcm9jZXNzID0gZXhlY2Eoc3Rvcnlib29rUGF0aCBhcyBhbnksIHN0b3J5Ym9va0FyZ3MsIHtcbiAgICAgIGVuY29kaW5nOiAndXRmOCcsXG4gICAgICBlbnY6IHtcbiAgICAgICAgLi4ucHJvY2Vzcy5lbnYsXG4gICAgICAgIExFWF9RVUlFVDogcXVpZXQsXG4gICAgICAgIExFWF9WRVJCT1NFOiB2ZXJib3NlLFxuICAgICAgICBTVE9SWUJPT0tfT1BFTjogb3BlbixcbiAgICAgICAgLi4uKHRhaWx3aW5kQ3NzUGF0aCAmJiB7VEFJTFdJTkRfQ1NTX1BBVEg6IHRhaWx3aW5kQ3NzUGF0aH0pXG4gICAgICB9IGFzIGFueSxcbiAgICAgIHN0ZGlvOiAncGlwZSdcbiAgICB9KTtcblxuICAgIGxldCB1cmxGb3VuZCA9IGZhbHNlO1xuICAgIGxldCBsYXN0UHJvZ3Jlc3NQZXJjZW50YWdlID0gMDtcblxuICAgIHN0b3J5Ym9va1Byb2Nlc3Muc3Rkb3V0Py5vbignZGF0YScsIChkYXRhKSA9PiB7XG4gICAgICBjb25zdCBvdXRwdXQgPSBkYXRhLnRvU3RyaW5nKCk7XG4gICAgICBjb25zdCBwcm9ncmVzc1BlcmNlbnRhZ2UgPSBleHRyYWN0UHJvZ3Jlc3NQZXJjZW50YWdlKG91dHB1dCk7XG5cbiAgICAgIGlmKHByb2dyZXNzUGVyY2VudGFnZSAhPT0gbnVsbCAmJiBwcm9ncmVzc1BlcmNlbnRhZ2UgIT09IGxhc3RQcm9ncmVzc1BlcmNlbnRhZ2UpIHtcbiAgICAgICAgbGFzdFByb2dyZXNzUGVyY2VudGFnZSA9IHByb2dyZXNzUGVyY2VudGFnZTtcbiAgICAgICAgY29uc3QgYWN0aW9uID0gc3RhdGljQnVpbGQgPyAnQnVpbGRpbmcnIDogJ1N0YXJ0aW5nJztcbiAgICAgICAgKHNwaW5uZXIgYXMgYW55KS50ZXh0ID0gYCR7YWN0aW9ufSBTdG9yeWJvb2suLi4gJHtwcm9ncmVzc1BlcmNlbnRhZ2V9JWA7XG4gICAgICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKGBcXG5XZWJwYWNrIFByb2dyZXNzOiAke2NoYWxrLm1hZ2VudGEoYCR7cHJvZ3Jlc3NQZXJjZW50YWdlfSVgKX1cXG5gKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZmlsdGVyZWRPdXRwdXQgPSBmaWx0ZXJBbmRCZWF1dGlmeU91dHB1dChvdXRwdXQsIHZlcmJvc2UpO1xuICAgICAgY29uc3QgYmVhdXRpZmllZE91dHB1dCA9IGJlYXV0aWZ5T3V0cHV0KGZpbHRlcmVkT3V0cHV0KTtcblxuICAgICAgaWYoIXVybEZvdW5kICYmIChvdXRwdXQuaW5jbHVkZXMoJ0xvY2FsOicpIHx8IG91dHB1dC5pbmNsdWRlcygnaHR0cDovL2xvY2FsaG9zdCcpIHx8IG91dHB1dC5pbmNsdWRlcygnU3Rvcnlib29rJykpKSB7XG4gICAgICAgIHNwaW5uZXIuc3VjY2VlZChjaGFsay5ncmVlbignU3Rvcnlib29rIGRldmVsb3BtZW50IHNlcnZlciBpcyByZWFkeSEnKSk7XG4gICAgICAgIHVybEZvdW5kID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgaWYoZmlsdGVyZWRPdXRwdXQudHJpbSgpKSB7XG4gICAgICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKGJlYXV0aWZpZWRPdXRwdXQpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgc3Rvcnlib29rUHJvY2Vzcy5zdGRlcnI/Lm9uKCdkYXRhJywgKGRhdGEpID0+IHtcbiAgICAgIGNvbnN0IG91dHB1dCA9IGRhdGEudG9TdHJpbmcoKTtcbiAgICAgIGNvbnN0IGZpbHRlcmVkT3V0cHV0ID0gZmlsdGVyQW5kQmVhdXRpZnlPdXRwdXQob3V0cHV0LCB2ZXJib3NlKTtcbiAgICAgIGNvbnN0IGJlYXV0aWZpZWRPdXRwdXQgPSBiZWF1dGlmeU91dHB1dChmaWx0ZXJlZE91dHB1dCk7XG5cbiAgICAgIGlmKGZpbHRlcmVkT3V0cHV0LnRyaW0oKSkge1xuICAgICAgICBwcm9jZXNzLnN0ZGVyci53cml0ZShiZWF1dGlmaWVkT3V0cHV0KTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHRyeSB7XG4gICAgICBhd2FpdCBzdG9yeWJvb2tQcm9jZXNzO1xuICAgICAgaWYoIXVybEZvdW5kKSB7XG4gICAgICAgIHNwaW5uZXIuc3VjY2VlZChjaGFsay5ncmVlbignU3Rvcnlib29rIGRldmVsb3BtZW50IHNlcnZlciBzdGFydGVkLicpKTtcbiAgICAgIH1cbiAgICAgIGNhbGxiYWNrKDApO1xuICAgICAgcmV0dXJuIDA7XG4gICAgfSBjYXRjaChlcnJvcikge1xuICAgICAgc3Bpbm5lci5mYWlsKGNoYWxrLnJlZCgnVGhlcmUgd2FzIGFuIGVycm9yIHdoaWxlIHJ1bm5pbmcgc3Rvcnlib29rLicpKTtcbiAgICAgIGxvZyhgXFxuJHtjbGlOYW1lfSBFcnJvcjogJHtlcnJvci5tZXNzYWdlfWAsICdlcnJvcicsIHF1aWV0KTtcbiAgICAgIGNhbGxiYWNrKDEpO1xuICAgICAgcmV0dXJuIDE7XG4gICAgfVxuICB9IGNhdGNoKGVycm9yKSB7XG4gICAgbG9nKGBcXG4ke2NsaU5hbWV9IEVycm9yOiAke2Vycm9yLm1lc3NhZ2V9YCwgJ2Vycm9yJywgcXVpZXQpO1xuICAgIHNwaW5uZXIuZmFpbCgnVGhlcmUgd2FzIGFuIGVycm9yIHdoaWxlIHJ1bm5pbmcgc3Rvcnlib29rLicpO1xuICAgIGNhbGxiYWNrKDEpO1xuICAgIHJldHVybiAxO1xuICB9XG59OyJdLCJuYW1lcyI6WyJjaGFsayIsImV4ZWNhIiwiZXhpc3RzU3luYyIsInN5bmMiLCJnbG9iU3luYyIsInJlc29sdmUiLCJwYXRoUmVzb2x2ZSIsIkxleENvbmZpZyIsImNyZWF0ZVNwaW5uZXIiLCJmaW5kVGFpbHdpbmRDc3NQYXRoIiwicmVzb2x2ZUJpbmFyeVBhdGgiLCJsb2ciLCJmaW5kU3RvcnlGaWxlcyIsInN0b3J5UGF0dGVybnMiLCJzdG9yeUZpbGVzIiwiZm9yRWFjaCIsInBhdHRlcm4iLCJmaWxlcyIsImN3ZCIsInByb2Nlc3MiLCJpZ25vcmUiLCJwdXNoIiwiY2hlY2tTdG9yeWJvb2tJbml0aWFsaXphdGlvbiIsInByb2plY3RDb25maWdEaXIiLCJsZXhDb25maWdEaXIiLCJnZXRMZXhEaXIiLCJleHRyYWN0UHJvZ3Jlc3NQZXJjZW50YWdlIiwib3V0cHV0IiwibGluZXMiLCJzcGxpdCIsImxpbmUiLCJpbmNsdWRlcyIsInBlcmNlbnRhZ2VNYXRjaCIsIm1hdGNoIiwicGFyc2VJbnQiLCJmaWx0ZXJBbmRCZWF1dGlmeU91dHB1dCIsImlzVmVyYm9zZSIsImZpbHRlcmVkTGluZXMiLCJmaWx0ZXIiLCJqb2luIiwiYmVhdXRpZnlPdXRwdXQiLCJyZXBsYWNlIiwiY3lhbiIsImJsdWUiLCJncmVlbiIsInJlZCIsInllbGxvdyIsIm1hZ2VudGEiLCJzdG9yeWJvb2siLCJjbWQiLCJjYWxsYmFjayIsImNsaU5hbWUiLCJjb25maWciLCJvcGVuIiwicG9ydCIsInF1aWV0Iiwic3RhdGljIiwic3RhdGljQnVpbGQiLCJ1c2VMZXhDb25maWciLCJ2YXJpYWJsZXMiLCJ2ZXJib3NlIiwic3Bpbm5lciIsInBhcnNlQ29uZmlnIiwidmFyaWFibGVzT2JqIiwiTk9ERV9FTlYiLCJKU09OIiwicGFyc2UiLCJfZXJyb3IiLCJlbnYiLCJzdGFydCIsImxlbmd0aCIsImZhaWwiLCJzdWNjZWVkIiwidGFpbHdpbmRDc3NQYXRoIiwiY29uc29sZSIsImdyYXkiLCJjb25maWdEaXIiLCJwcm9qZWN0U3Rvcnlib29rRGlyIiwiZnMiLCJta2RpciIsInJlY3Vyc2l2ZSIsImxleE1haW5QYXRoIiwicHJvamVjdE1haW5QYXRoIiwibWFpbkNvbnRlbnQiLCJyZWFkRmlsZSIsImxleE5vZGVNb2R1bGVzIiwid3JpdGVGaWxlIiwibGV4UHJldmlld1BhdGgiLCJwcmV2aWV3Q29udGVudCIsInN0b3J5Ym9va1BhdGgiLCJzdG9yeWJvb2tBcmdzIiwidG9TdHJpbmciLCJvdXRwdXREaXIiLCJUQUlMV0lORF9DU1NfUEFUSCIsInN0b3J5Ym9va1Byb2Nlc3MiLCJlbmNvZGluZyIsIkxFWF9RVUlFVCIsIkxFWF9WRVJCT1NFIiwiU1RPUllCT09LX09QRU4iLCJzdGRpbyIsInVybEZvdW5kIiwibGFzdFByb2dyZXNzUGVyY2VudGFnZSIsInN0ZG91dCIsIm9uIiwiZGF0YSIsInByb2dyZXNzUGVyY2VudGFnZSIsImFjdGlvbiIsInRleHQiLCJ3cml0ZSIsImZpbHRlcmVkT3V0cHV0IiwiYmVhdXRpZmllZE91dHB1dCIsInRyaW0iLCJzdGRlcnIiLCJlcnJvciIsIm1lc3NhZ2UiXSwibWFwcGluZ3MiOiJBQUFBLE9BQU9BLFdBQVcsUUFBUTtBQUMxQixTQUFRQyxLQUFLLFFBQU8sUUFBUTtBQUM1QixTQUFRQyxVQUFVLFFBQU8sS0FBSztBQUM5QixTQUFRQyxRQUFRQyxRQUFRLFFBQU8sT0FBTztBQUN0QyxTQUFRQyxXQUFXQyxXQUFXLFFBQU8sT0FBTztBQUU1QyxTQUFRQyxTQUFTLFFBQU8scUJBQXFCO0FBQzdDLFNBQVFDLGFBQWEsUUFBTyxxQkFBcUI7QUFDakQsU0FBUUMsbUJBQW1CLEVBQUVDLGlCQUFpQixRQUFPLHNCQUFzQjtBQUMzRSxTQUFRQyxHQUFHLFFBQU8scUJBQXFCO0FBZ0J2QyxNQUFNQyxpQkFBaUI7SUFDckIsTUFBTUMsZ0JBQWdCO1FBQ3BCO1FBQ0E7UUFDQTtLQUNEO0lBRUQsTUFBTUMsYUFBdUIsRUFBRTtJQUUvQkQsY0FBY0UsT0FBTyxDQUFDLENBQUNDO1FBQ3JCLE1BQU1DLFFBQVFiLFNBQVNZLFNBQVM7WUFDOUJFLEtBQUtDLFFBQVFELEdBQUc7WUFDaEJFLFFBQVE7Z0JBQUM7Z0JBQXNCO2dCQUFjO2dCQUFhO2FBQWM7UUFDMUU7UUFDQU4sV0FBV08sSUFBSSxJQUFJSjtJQUNyQjtJQUVBLE9BQU9IO0FBQ1Q7QUFFQSxNQUFNUSwrQkFBK0I7SUFDbkMsTUFBTUMsbUJBQW1CakIsWUFBWWEsUUFBUUQsR0FBRyxJQUFJO0lBQ3BELE1BQU1NLGVBQWVsQixZQUFZQyxVQUFVa0IsU0FBUyxJQUFJO0lBRXhELE9BQU92QixXQUFXcUIscUJBQXFCckIsV0FBV3NCO0FBQ3BEO0FBRUEsTUFBTUUsNEJBQTRCLENBQUNDO0lBQ2pDLE1BQU1DLFFBQVFELE9BQU9FLEtBQUssQ0FBQztJQUMzQixLQUFJLE1BQU1DLFFBQVFGLE1BQU87UUFDdkIsSUFBR0UsS0FBS0MsUUFBUSxDQUFDLHlCQUF5QkQsS0FBS0MsUUFBUSxDQUFDLE1BQU07WUFD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
|
|
253
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21tYW5kcy9zdG9yeWJvb2svc3Rvcnlib29rLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBjaGFsayBmcm9tICdjaGFsayc7XG5pbXBvcnQge2V4ZWNhfSBmcm9tICdleGVjYSc7XG5pbXBvcnQge2V4aXN0c1N5bmN9IGZyb20gJ2ZzJztcbmltcG9ydCB7c3luYyBhcyBnbG9iU3luY30gZnJvbSAnZ2xvYic7XG5pbXBvcnQge3Jlc29sdmUgYXMgcGF0aFJlc29sdmV9IGZyb20gJ3BhdGgnO1xuXG5pbXBvcnQge0xleENvbmZpZ30gZnJvbSAnLi4vLi4vTGV4Q29uZmlnLmpzJztcbmltcG9ydCB7Y3JlYXRlU3Bpbm5lcn0gZnJvbSAnLi4vLi4vdXRpbHMvYXBwLmpzJztcbmltcG9ydCB7ZmluZFRhaWx3aW5kQ3NzUGF0aCwgcmVzb2x2ZUJpbmFyeVBhdGh9IGZyb20gJy4uLy4uL3V0aWxzL2ZpbGUuanMnO1xuaW1wb3J0IHtsb2d9IGZyb20gJy4uLy4uL3V0aWxzL2xvZy5qcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3Rvcnlib29rT3B0aW9ucyB7XG4gIHJlYWRvbmx5IGNsaU5hbWU/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IGNvbmZpZz86IHN0cmluZztcbiAgcmVhZG9ubHkgb3Blbj86IGJvb2xlYW47XG4gIHJlYWRvbmx5IHBvcnQ/OiBudW1iZXI7XG4gIHJlYWRvbmx5IHF1aWV0PzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgc3RhdGljPzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgdXNlTGV4Q29uZmlnPzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgdmFyaWFibGVzPzogc3RyaW5nO1xuICByZWFkb25seSB2ZXJib3NlPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IHR5cGUgU3Rvcnlib29rQ2FsbGJhY2sgPSAoc3RhdHVzOiBudW1iZXIpID0+IHZvaWQ7XG5cbmNvbnN0IGZpbmRTdG9yeUZpbGVzID0gKCk6IHN0cmluZ1tdID0+IHtcbiAgY29uc3Qgc3RvcnlQYXR0ZXJucyA9IFtcbiAgICAnKiovKi5zdG9yaWVzLnt0cyx0c3gsanMsanN4fScsXG4gICAgJyoqLyouc3Rvcnkue3RzLHRzeCxqcyxqc3h9JyxcbiAgICAnKiovc3Rvcmllcy8qKi8qLnt0cyx0c3gsanMsanN4fSdcbiAgXTtcblxuICBjb25zdCBzdG9yeUZpbGVzOiBzdHJpbmdbXSA9IFtdO1xuXG4gIHN0b3J5UGF0dGVybnMuZm9yRWFjaCgocGF0dGVybikgPT4ge1xuICAgIGNvbnN0IGZpbGVzID0gZ2xvYlN5bmMocGF0dGVybiwge1xuICAgICAgY3dkOiBwcm9jZXNzLmN3ZCgpLFxuICAgICAgaWdub3JlOiBbJyoqL25vZGVfbW9kdWxlcy8qKicsICcqKi9kaXN0LyoqJywgJyoqL2xpYi8qKicsICcqKi9idWlsZC8qKiddXG4gICAgfSk7XG4gICAgc3RvcnlGaWxlcy5wdXNoKC4uLmZpbGVzKTtcbiAgfSk7XG5cbiAgcmV0dXJuIHN0b3J5RmlsZXM7XG59O1xuXG5jb25zdCBjaGVja1N0b3J5Ym9va0luaXRpYWxpemF0aW9uID0gKCk6IGJvb2xlYW4gPT4ge1xuICBjb25zdCBwcm9qZWN0Q29uZmlnRGlyID0gcGF0aFJlc29sdmUocHJvY2Vzcy5jd2QoKSwgJy5zdG9yeWJvb2snKTtcbiAgY29uc3QgbGV4Q29uZmlnRGlyID0gcGF0aFJlc29sdmUoTGV4Q29uZmlnLmdldExleERpcigpLCAnLnN0b3J5Ym9vaycpO1xuXG4gIHJldHVybiBleGlzdHNTeW5jKHByb2plY3RDb25maWdEaXIpIHx8IGV4aXN0c1N5bmMobGV4Q29uZmlnRGlyKTtcbn07XG5cbmNvbnN0IGV4dHJhY3RQcm9ncmVzc1BlcmNlbnRhZ2UgPSAob3V0cHV0OiBzdHJpbmcpOiBudW1iZXIgfCBudWxsID0+IHtcbiAgY29uc3QgbGluZXMgPSBvdXRwdXQuc3BsaXQoJ1xcbicpO1xuICBmb3IoY29uc3QgbGluZSBvZiBsaW5lcykge1xuICAgIGlmKGxpbmUuaW5jbHVkZXMoJ1t3ZWJwYWNrLlByb2dyZXNzXScpICYmIGxpbmUuaW5jbHVkZXMoJyUnKSkge1xuICAgICAgY29uc3QgcGVyY2VudGFnZU1hdGNoID0gbGluZS5tYXRjaCgvKFxcZCspJS8pO1xuICAgICAgaWYocGVyY2VudGFnZU1hdGNoKSB7XG4gICAgICAgIHJldHVybiBwYXJzZUludChwZXJjZW50YWdlTWF0Y2hbMV0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gbnVsbDtcbn07XG5cbmNvbnN0IGZpbHRlckFuZEJlYXV0aWZ5T3V0cHV0ID0gKG91dHB1dDogc3RyaW5nLCBpc1ZlcmJvc2U6IGJvb2xlYW4pOiBzdHJpbmcgPT4ge1xuICBpZihpc1ZlcmJvc2UpIHtcbiAgICByZXR1cm4gb3V0cHV0O1xuICB9XG5cbiAgY29uc3QgbGluZXMgPSBvdXRwdXQuc3BsaXQoJ1xcbicpO1xuICBjb25zdCBmaWx0ZXJlZExpbmVzID0gbGluZXMuZmlsdGVyKChsaW5lKSA9PiB7XG4gICAgaWYobGluZS5pbmNsdWRlcygnW3dlYnBhY2suUHJvZ3Jlc3NdJykpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZihsaW5lLmluY2x1ZGVzKCdTdG9yeWJvb2snKSB8fFxuICAgICAgbGluZS5pbmNsdWRlcygnTG9jYWw6JykgfHxcbiAgICAgIGxpbmUuaW5jbHVkZXMoJ2h0dHA6Ly9sb2NhbGhvc3QnKSB8fFxuICAgICAgbGluZS5pbmNsdWRlcygnaW5mbyA9PicpIHx8XG4gICAgICBsaW5lLmluY2x1ZGVzKCdTdGFydGluZycpIHx8XG4gICAgICBsaW5lLmluY2x1ZGVzKCdyZWFkeScpIHx8XG4gICAgICBsaW5lLmluY2x1ZGVzKCdlcnJvcicpIHx8XG4gICAgICBsaW5lLmluY2x1ZGVzKCd3YXJuaW5nJykpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xuICB9KTtcblxuICByZXR1cm4gZmlsdGVyZWRMaW5lcy5qb2luKCdcXG4nKTtcbn07XG5cbmNvbnN0IGJlYXV0aWZ5T3V0cHV0ID0gKG91dHB1dDogc3RyaW5nKTogc3RyaW5nID0+IG91dHB1dFxuICAucmVwbGFjZSgvU3Rvcnlib29rIHZbXFxkLl0rL2csIGNoYWxrLmN5YW4oJyQmJykpXG4gIC5yZXBsYWNlKC9pbmZvID0+L2csIGNoYWxrLmJsdWUoJ2luZm8gPT4nKSlcbiAgLnJlcGxhY2UoL0xvY2FsOi9nLCBjaGFsay5ncmVlbignTG9jYWw6JykpXG4gIC5yZXBsYWNlKC9PbiB5b3VyIG5ldHdvcms6L2csIGNoYWxrLmdyZWVuKCdPbiB5b3VyIG5ldHdvcms6JykpXG4gIC5yZXBsYWNlKC9TdG9yeWJvb2suKnN0YXJ0ZWQvZywgY2hhbGsuZ3JlZW4oJyQmJykpXG4gIC5yZXBsYWNlKC9TdG9yeWJvb2suKnJlYWR5L2csIGNoYWxrLmdyZWVuKCckJicpKVxuICAucmVwbGFjZSgvZXJyb3IvZywgY2hhbGsucmVkKCckJicpKVxuICAucmVwbGFjZSgvd2FybmluZy9nLCBjaGFsay55ZWxsb3coJyQmJykpXG4gIC5yZXBsYWNlKC8oXFxkKyklL2csIGNoYWxrLm1hZ2VudGEoJyQxJScpKTtcblxuZXhwb3J0IGNvbnN0IHN0b3J5Ym9vayA9IGFzeW5jIChjbWQ6IFN0b3J5Ym9va09wdGlvbnMsIGNhbGxiYWNrOiBTdG9yeWJvb2tDYWxsYmFjayA9ICgpID0+ICh7fSkpOiBQcm9taXNlPG51bWJlcj4gPT4ge1xuICBjb25zdCB7Y2xpTmFtZSA9ICdMZXgnLCBjb25maWcsIG9wZW4gPSBmYWxzZSwgcG9ydCA9IDYwMDcsIHF1aWV0LCBzdGF0aWM6IHN0YXRpY0J1aWxkID0gZmFsc2UsIHVzZUxleENvbmZpZyA9IGZhbHNlLCB2YXJpYWJsZXMsIHZlcmJvc2UgPSBmYWxzZX0gPSBjbWQ7XG5cbiAgY29uc3Qgc3Bpbm5lciA9IGNyZWF0ZVNwaW5uZXIocXVpZXQpO1xuXG4gIGxvZyhjaGFsay5jeWFuKGAke2NsaU5hbWV9IHN0YXJ0aW5nIFN0b3J5Ym9vay4uLmApLCAnaW5mbycsIHF1aWV0KTtcblxuICBhd2FpdCBMZXhDb25maWcucGFyc2VDb25maWcoY21kKTtcblxuICBsZXQgdmFyaWFibGVzT2JqOiBvYmplY3QgPSB7Tk9ERV9FTlY6ICdkZXZlbG9wbWVudCd9O1xuXG4gIGlmKHZhcmlhYmxlcykge1xuICAgIHRyeSB7XG4gICAgICB2YXJpYWJsZXNPYmogPSBKU09OLnBhcnNlKHZhcmlhYmxlcyk7XG4gICAgfSBjYXRjaChfZXJyb3IpIHtcbiAgICAgIGxvZyhgXFxuJHtjbGlOYW1lfSBFcnJvcjogRW52aXJvbm1lbnQgdmFyaWFibGVzIG9wdGlvbiBpcyBub3QgYSB2YWxpZCBKU09OIG9iamVjdC5gLCAnZXJyb3InLCBxdWlldCk7XG4gICAgICBjYWxsYmFjaygxKTtcbiAgICAgIHJldHVybiAxO1xuICAgIH1cbiAgfVxuXG4gIHByb2Nlc3MuZW52ID0gey4uLnByb2Nlc3MuZW52LCAuLi52YXJpYWJsZXNPYmp9O1xuXG4gIHNwaW5uZXIuc3RhcnQoJ0ZpbmRpbmcgc3RvcnkgZmlsZXMuLi4nKTtcbiAgY29uc3Qgc3RvcnlGaWxlcyA9IGZpbmRTdG9yeUZpbGVzKCk7XG5cbiAgaWYoc3RvcnlGaWxlcy5sZW5ndGggPT09IDApIHtcbiAgICBzcGlubmVyLmZhaWwoJ05vIHN0b3J5IGZpbGVzIGZvdW5kIGluIHRoZSBwcm9qZWN0LicpO1xuICAgIGxvZygnUGxlYXNlIGNyZWF0ZSBzdG9yeSBmaWxlcyB3aXRoIC5zdG9yaWVzLnRzLy5zdG9yaWVzLmpzIGV4dGVuc2lvbnMgb3IgaW4gYSBzdG9yaWVzLyBkaXJlY3RvcnkuJywgJ2luZm8nLCBxdWlldCk7XG4gICAgY2FsbGJhY2soMSk7XG4gICAgcmV0dXJuIDE7XG4gIH1cblxuICBzcGlubmVyLnN1Y2NlZWQoYEZvdW5kICR7c3RvcnlGaWxlcy5sZW5ndGh9IHN0b3J5IGZpbGUocylgKTtcblxuICBjb25zdCB0YWlsd2luZENzc1BhdGggPSBmaW5kVGFpbHdpbmRDc3NQYXRoKCk7XG5cbiAgY29uc29sZS5sb2coe3RhaWx3aW5kQ3NzUGF0aH0pO1xuICBpZih0YWlsd2luZENzc1BhdGgpIHtcbiAgICBpZighcXVpZXQpIHtcbiAgICAgIGxvZyhjaGFsay5ncmVlbihg4pyTIFRhaWx3aW5kIENTUyBpbnRlZ3JhdGlvbiBkZXRlY3RlZDogJHt0YWlsd2luZENzc1BhdGh9YCksICdpbmZvJywgcXVpZXQpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBpZighcXVpZXQpIHtcbiAgICAgIGxvZyhjaGFsay55ZWxsb3coJ+KaoCBObyBUYWlsd2luZCBDU1MgZmlsZSBmb3VuZCBpbiBwcm9qZWN0JyksICdpbmZvJywgcXVpZXQpO1xuICAgICAgbG9nKGNoYWxrLmdyYXkoJ0NyZWF0ZSBhIHRhaWx3aW5kLmNzcyBmaWxlIHdpdGggQHRhaWx3aW5kIGRpcmVjdGl2ZXMgZm9yIGZ1bGwgVGFpbHdpbmQgc3VwcG9ydCcpLCAnaW5mbycsIHF1aWV0KTtcbiAgICB9XG4gIH1cblxuICBpZighY2hlY2tTdG9yeWJvb2tJbml0aWFsaXphdGlvbigpKSB7XG4gICAgc3Bpbm5lci5mYWlsKCdTdG9yeWJvb2sgaXMgbm90IGluaXRpYWxpemVkIGluIHRoaXMgcHJvamVjdCBvciBpbiBMZXguJyk7XG4gICAgbG9nKCdQbGVhc2UgcnVuIFwibnB4IHN0b3J5Ym9va0BsYXRlc3QgaW5pdFwiIHRvIHNldCB1cCBTdG9yeWJvb2sgaW4geW91ciBwcm9qZWN0LCBvciBlbnN1cmUgTGV4IGhhcyBhIHZhbGlkIC5zdG9yeWJvb2sgY29uZmlndXJhdGlvbi4nLCAnaW5mbycsIHF1aWV0KTtcbiAgICBjYWxsYmFjaygxKTtcbiAgICByZXR1cm4gMTtcbiAgfVxuXG4gIGNvbnN0IHByb2plY3RDb25maWdEaXIgPSBwYXRoUmVzb2x2ZShwcm9jZXNzLmN3ZCgpLCAnLnN0b3J5Ym9vaycpO1xuICBjb25zdCBsZXhDb25maWdEaXIgPSBwYXRoUmVzb2x2ZShMZXhDb25maWcuZ2V0TGV4RGlyKCksICcuc3Rvcnlib29rJyk7XG5cbiAgbGV0IGNvbmZpZ0RpciA9IGNvbmZpZztcbiAgaWYoIWNvbmZpZ0Rpcikge1xuICAgIGNvbmZpZ0RpciA9IGxleENvbmZpZ0RpcjtcbiAgICBpZighdXNlTGV4Q29uZmlnICYmIGV4aXN0c1N5bmMocHJvamVjdENvbmZpZ0RpcikpIHtcbiAgICAgIGNvbmZpZ0RpciA9IHByb2plY3RDb25maWdEaXI7XG4gICAgfVxuICB9XG5cbiAgaWYoIXF1aWV0KSB7XG4gICAgbG9nKGNoYWxrLmdyYXkoYFByb2plY3QgY29uZmlnIGRpcjogJHtwcm9qZWN0Q29uZmlnRGlyfSAoZXhpc3RzOiAke2V4aXN0c1N5bmMocHJvamVjdENvbmZpZ0Rpcil9KWApLCAnaW5mbycsIHF1aWV0KTtcbiAgICBsb2coY2hhbGsuZ3JheShgTGV4IGNvbmZpZyBkaXI6ICR7bGV4Q29uZmlnRGlyfSAoZXhpc3RzOiAke2V4aXN0c1N5bmMobGV4Q29uZmlnRGlyKX0pYCksICdpbmZvJywgcXVpZXQpO1xuICAgIGlmKHVzZUxleENvbmZpZykge1xuICAgICAgbG9nKGNoYWxrLmJsdWUoJ1VzaW5nIExleCBTdG9yeWJvb2sgY29uZmlndXJhdGlvbiAoLS11c2UtbGV4LWNvbmZpZyBmbGFnKScpLCAnaW5mbycsIHF1aWV0KTtcbiAgICB9XG4gICAgbG9nKGNoYWxrLmdyYXkoYEluaXRpYWwgY29uZmlnIGRpcjogJHtjb25maWdEaXJ9YCksICdpbmZvJywgcXVpZXQpO1xuICB9XG5cbiAgaWYoY29uZmlnRGlyID09PSBsZXhDb25maWdEaXIpIHtcbiAgICBpZighcXVpZXQpIHtcbiAgICAgIGxvZyhjaGFsay5ibHVlKCdVc2luZyBMZXggY29uZmlnLCB3aWxsIGNyZWF0ZSB0ZW1wb3JhcnkgY29uZmlnIGluIHByb2plY3QgLnN0b3J5Ym9vayBkaXJlY3RvcnknKSwgJ2luZm8nLCBxdWlldCk7XG4gICAgfVxuICAgIGNvbnN0IHByb2plY3RTdG9yeWJvb2tEaXIgPSBwYXRoUmVzb2x2ZShwcm9jZXNzLmN3ZCgpLCAnLnN0b3J5Ym9vaycpO1xuXG4gICAgY29uc3QgZnMgPSBhd2FpdCBpbXBvcnQoJ2ZzL3Byb21pc2VzJyk7XG4gICAgYXdhaXQgZnMubWtkaXIocHJvamVjdFN0b3J5Ym9va0Rpciwge3JlY3Vyc2l2ZTogdHJ1ZX0pO1xuXG4gICAgY29uc3QgbGV4TWFpblBhdGggPSBwYXRoUmVzb2x2ZShsZXhDb25maWdEaXIsICdtYWluLnRzJyk7XG4gICAgY29uc3QgcHJvamVjdE1haW5QYXRoID0gcGF0aFJlc29sdmUocHJvamVjdFN0b3J5Ym9va0RpciwgJ21haW4udHMnKTtcbiAgICBsZXQgbWFpbkNvbnRlbnQgPSBhd2FpdCBmcy5yZWFkRmlsZShsZXhNYWluUGF0aCwgJ3V0ZjgnKTtcblxuICAgIG1haW5Db250ZW50ID0gbWFpbkNvbnRlbnQucmVwbGFjZShcbiAgICAgIC9zdG9yaWVzOlxccypcXFsuKj9cXF0vLFxuICAgICAgYHN0b3JpZXM6IFsnJHtwYXRoUmVzb2x2ZShwcm9jZXNzLmN3ZCgpLCAnc3JjLyoqLyouc3Rvcmllcy5AKHRzfHRzeCknKX0nLCAnJHtwYXRoUmVzb2x2ZShwcm9jZXNzLmN3ZCgpLCAnc3JjLyoqLyoubWR4Jyl9J11gXG4gICAgKTtcblxuICAgIGNvbnN0IGxleE5vZGVNb2R1bGVzID0gcGF0aFJlc29sdmUoTGV4Q29uZmlnLmdldExleERpcigpLCAnbm9kZV9tb2R1bGVzJyk7XG4gICAgbWFpbkNvbnRlbnQgPSBtYWluQ29udGVudC5yZXBsYWNlKFxuICAgICAgL2NvbnN0IGxleE1vZHVsZSA9IFxcKG1vZHVsZVBhdGg6IHN0cmluZ1xcKSA9PiByZXNvbHZlXFwoZ2V0TGV4Tm9kZU1vZHVsZXNQYXRoXFwoXFwpLCBtb2R1bGVQYXRoXFwpOy8sXG4gICAgICBgY29uc3QgbGV4TW9kdWxlID0gKG1vZHVsZVBhdGg6IHN0cmluZykgPT4gcmVzb2x2ZSgnJHtsZXhOb2RlTW9kdWxlc30nLCBtb2R1bGVQYXRoKTtgXG4gICAgKTtcblxuICAgIGF3YWl0IGZzLndyaXRlRmlsZShwcm9qZWN0TWFpblBhdGgsIG1haW5Db250ZW50KTtcblxuICAgIGNvbnN0IGxleFByZXZpZXdQYXRoID0gcGF0aFJlc29sdmUobGV4Q29uZmlnRGlyLCAncHJldmlldy50c3gnKTtcbiAgICBpZihleGlzdHNTeW5jKGxleFByZXZpZXdQYXRoKSkge1xuICAgICAgY29uc3QgcHJldmlld0NvbnRlbnQgPSBhd2FpdCBmcy5yZWFkRmlsZShsZXhQcmV2aWV3UGF0aCwgJ3V0ZjgnKTtcbiAgICAgIGF3YWl0IGZzLndyaXRlRmlsZShwYXRoUmVzb2x2ZShwcm9qZWN0U3Rvcnlib29rRGlyLCAncHJldmlldy50c3gnKSwgcHJldmlld0NvbnRlbnQpO1xuICAgIH1cblxuICAgIGNvbmZpZ0RpciA9IHByb2plY3RTdG9yeWJvb2tEaXI7XG4gIH1cbiAgaWYoIWV4aXN0c1N5bmMoY29uZmlnRGlyKSkge1xuICAgIHNwaW5uZXIuZmFpbCgnU3Rvcnlib29rIGNvbmZpZ3VyYXRpb24gbm90IGZvdW5kLicpO1xuICAgIGxvZyhgUHJvamVjdCBjb25maWc6ICR7cHJvamVjdENvbmZpZ0Rpcn1gLCAnaW5mbycsIHF1aWV0KTtcbiAgICBsb2coYExleCBjb25maWc6ICR7bGV4Q29uZmlnRGlyfWAsICdpbmZvJywgcXVpZXQpO1xuICAgIGxvZygnUGxlYXNlIHJ1biBcIm5weCBzdG9yeWJvb2tAbGF0ZXN0IGluaXRcIiB0byBzZXQgdXAgU3Rvcnlib29rIGluIHlvdXIgcHJvamVjdCwgb3IgZW5zdXJlIExleCBoYXMgYSB2YWxpZCAuc3Rvcnlib29rIGNvbmZpZ3VyYXRpb24uJywgJ2luZm8nLCBxdWlldCk7XG4gICAgY2FsbGJhY2soMSk7XG4gICAgcmV0dXJuIDE7XG4gIH1cblxuICBjb25zdCBzdG9yeWJvb2tQYXRoID0gcmVzb2x2ZUJpbmFyeVBhdGgoJ3N0b3J5Ym9vaycpO1xuXG4gIGlmKCFzdG9yeWJvb2tQYXRoKSB7XG4gICAgbG9nKGBcXG4ke2NsaU5hbWV9IEVycm9yOiBzdG9yeWJvb2sgYmluYXJ5IG5vdCBmb3VuZCBpbiBMZXgncyBub2RlX21vZHVsZXMgb3IgbW9ub3JlcG8gcm9vdGAsICdlcnJvcicsIHF1aWV0KTtcbiAgICBsb2coJ1BsZWFzZSByZWluc3RhbGwgTGV4IG9yIGNoZWNrIHlvdXIgU3Rvcnlib29rIGluc3RhbGxhdGlvbi4nLCAnaW5mbycsIHF1aWV0KTtcbiAgICBjYWxsYmFjaygxKTtcbiAgICByZXR1cm4gMTtcbiAgfVxuXG4gIGNvbnN0IHN0b3J5Ym9va0FyZ3MgPSBbc3RhdGljQnVpbGQgPyAnYnVpbGQnIDogJ2RldiddO1xuICBzdG9yeWJvb2tBcmdzLnB1c2goJy0tY29uZmlnLWRpcicsIGNvbmZpZ0Rpcik7XG5cbiAgaWYocG9ydCkge1xuICAgIHN0b3J5Ym9va0FyZ3MucHVzaCgnLS1wb3J0JywgcG9ydC50b1N0cmluZygpKTtcbiAgfVxuXG4gIGlmKG9wZW4pIHtcbiAgICBzdG9yeWJvb2tBcmdzLnB1c2goJy0tb3BlbicpO1xuICB9XG5cbiAgaWYoc3RhdGljQnVpbGQpIHtcbiAgICBjb25zdCBvdXRwdXREaXIgPSBwYXRoUmVzb2x2ZShwcm9jZXNzLmN3ZCgpLCAnc3Rvcnlib29rLXN0YXRpYycpO1xuICAgIHN0b3J5Ym9va0FyZ3MucHVzaCgnLS1vdXRwdXQtZGlyJywgb3V0cHV0RGlyKTtcbiAgfVxuXG4gIGlmKCFxdWlldCkge1xuICAgIGxvZyhjaGFsay5ncmF5KGBDb25maWcgZGlyZWN0b3J5OiAke2NvbmZpZ0Rpcn1gKSwgJ2luZm8nLCBxdWlldCk7XG4gIH1cblxuICBwcm9jZXNzLmVudi5UQUlMV0lORF9DU1NfUEFUSCA9IHRhaWx3aW5kQ3NzUGF0aDtcblxuICB0cnkge1xuICAgIHNwaW5uZXIuc3RhcnQoc3RhdGljQnVpbGQgPyAnQnVpbGRpbmcgc3RhdGljIFN0b3J5Ym9vay4uLicgOiAnU3RhcnRpbmcgU3Rvcnlib29rIGRldmVsb3BtZW50IHNlcnZlci4uLicpO1xuXG4gICAgY29uc3Qgc3Rvcnlib29rUHJvY2VzcyA9IGV4ZWNhKHN0b3J5Ym9va1BhdGggYXMgYW55LCBzdG9yeWJvb2tBcmdzLCB7XG4gICAgICBlbmNvZGluZzogJ3V0ZjgnLFxuICAgICAgZW52OiB7XG4gICAgICAgIC4uLnByb2Nlc3MuZW52LFxuICAgICAgICBMRVhfUVVJRVQ6IHF1aWV0LFxuICAgICAgICBMRVhfVkVSQk9TRTogdmVyYm9zZSxcbiAgICAgICAgU1RPUllCT09LX09QRU46IG9wZW4sXG4gICAgICAgIC4uLih0YWlsd2luZENzc1BhdGggJiYge1RBSUxXSU5EX0NTU19QQVRIOiB0YWlsd2luZENzc1BhdGh9KVxuICAgICAgfSBhcyBhbnksXG4gICAgICBzdGRpbzogJ3BpcGUnXG4gICAgfSk7XG5cbiAgICBsZXQgdXJsRm91bmQgPSBmYWxzZTtcbiAgICBsZXQgbGFzdFByb2dyZXNzUGVyY2VudGFnZSA9IDA7XG5cbiAgICBzdG9yeWJvb2tQcm9jZXNzLnN0ZG91dD8ub24oJ2RhdGEnLCAoZGF0YSkgPT4ge1xuICAgICAgY29uc3Qgb3V0cHV0ID0gZGF0YS50b1N0cmluZygpO1xuICAgICAgY29uc3QgcHJvZ3Jlc3NQZXJjZW50YWdlID0gZXh0cmFjdFByb2dyZXNzUGVyY2VudGFnZShvdXRwdXQpO1xuXG4gICAgICBpZihwcm9ncmVzc1BlcmNlbnRhZ2UgIT09IG51bGwgJiYgcHJvZ3Jlc3NQZXJjZW50YWdlICE9PSBsYXN0UHJvZ3Jlc3NQZXJjZW50YWdlKSB7XG4gICAgICAgIGxhc3RQcm9ncmVzc1BlcmNlbnRhZ2UgPSBwcm9ncmVzc1BlcmNlbnRhZ2U7XG4gICAgICAgIGNvbnN0IGFjdGlvbiA9IHN0YXRpY0J1aWxkID8gJ0J1aWxkaW5nJyA6ICdTdGFydGluZyc7XG4gICAgICAgIChzcGlubmVyIGFzIGFueSkudGV4dCA9IGAke2FjdGlvbn0gU3Rvcnlib29rLi4uICR7cHJvZ3Jlc3NQZXJjZW50YWdlfSVgO1xuICAgICAgICBwcm9jZXNzLnN0ZG91dC53cml0ZShgXFxuV2VicGFjayBQcm9ncmVzczogJHtjaGFsay5tYWdlbnRhKGAke3Byb2dyZXNzUGVyY2VudGFnZX0lYCl9XFxuYCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGZpbHRlcmVkT3V0cHV0ID0gZmlsdGVyQW5kQmVhdXRpZnlPdXRwdXQob3V0cHV0LCB2ZXJib3NlKTtcbiAgICAgIGNvbnN0IGJlYXV0aWZpZWRPdXRwdXQgPSBiZWF1dGlmeU91dHB1dChmaWx0ZXJlZE91dHB1dCk7XG5cbiAgICAgIGlmKCF1cmxGb3VuZCAmJiAob3V0cHV0LmluY2x1ZGVzKCdMb2NhbDonKSB8fCBvdXRwdXQuaW5jbHVkZXMoJ2h0dHA6Ly9sb2NhbGhvc3QnKSB8fCBvdXRwdXQuaW5jbHVkZXMoJ1N0b3J5Ym9vaycpKSkge1xuICAgICAgICBzcGlubmVyLnN1Y2NlZWQoY2hhbGsuZ3JlZW4oJ1N0b3J5Ym9vayBkZXZlbG9wbWVudCBzZXJ2ZXIgaXMgcmVhZHkhJykpO1xuICAgICAgICB1cmxGb3VuZCA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIGlmKGZpbHRlcmVkT3V0cHV0LnRyaW0oKSkge1xuICAgICAgICBwcm9jZXNzLnN0ZG91dC53cml0ZShiZWF1dGlmaWVkT3V0cHV0KTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHN0b3J5Ym9va1Byb2Nlc3Muc3RkZXJyPy5vbignZGF0YScsIChkYXRhKSA9PiB7XG4gICAgICBjb25zdCBvdXRwdXQgPSBkYXRhLnRvU3RyaW5nKCk7XG4gICAgICBjb25zdCBmaWx0ZXJlZE91dHB1dCA9IGZpbHRlckFuZEJlYXV0aWZ5T3V0cHV0KG91dHB1dCwgdmVyYm9zZSk7XG4gICAgICBjb25zdCBiZWF1dGlmaWVkT3V0cHV0ID0gYmVhdXRpZnlPdXRwdXQoZmlsdGVyZWRPdXRwdXQpO1xuXG4gICAgICBpZihmaWx0ZXJlZE91dHB1dC50cmltKCkpIHtcbiAgICAgICAgcHJvY2Vzcy5zdGRlcnIud3JpdGUoYmVhdXRpZmllZE91dHB1dCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB0cnkge1xuICAgICAgYXdhaXQgc3Rvcnlib29rUHJvY2VzcztcbiAgICAgIGlmKCF1cmxGb3VuZCkge1xuICAgICAgICBzcGlubmVyLnN1Y2NlZWQoY2hhbGsuZ3JlZW4oJ1N0b3J5Ym9vayBkZXZlbG9wbWVudCBzZXJ2ZXIgc3RhcnRlZC4nKSk7XG4gICAgICB9XG4gICAgICBjYWxsYmFjaygwKTtcbiAgICAgIHJldHVybiAwO1xuICAgIH0gY2F0Y2goZXJyb3IpIHtcbiAgICAgIHNwaW5uZXIuZmFpbChjaGFsay5yZWQoJ1RoZXJlIHdhcyBhbiBlcnJvciB3aGlsZSBydW5uaW5nIHN0b3J5Ym9vay4nKSk7XG4gICAgICBsb2coYFxcbiR7Y2xpTmFtZX0gRXJyb3I6ICR7ZXJyb3IubWVzc2FnZX1gLCAnZXJyb3InLCBxdWlldCk7XG4gICAgICBjYWxsYmFjaygxKTtcbiAgICAgIHJldHVybiAxO1xuICAgIH1cbiAgfSBjYXRjaChlcnJvcikge1xuICAgIGxvZyhgXFxuJHtjbGlOYW1lfSBFcnJvcjogJHtlcnJvci5tZXNzYWdlfWAsICdlcnJvcicsIHF1aWV0KTtcbiAgICBzcGlubmVyLmZhaWwoJ1RoZXJlIHdhcyBhbiBlcnJvciB3aGlsZSBydW5uaW5nIHN0b3J5Ym9vay4nKTtcbiAgICBjYWxsYmFjaygxKTtcbiAgICByZXR1cm4gMTtcbiAgfVxufTsiXSwibmFtZXMiOlsiY2hhbGsiLCJleGVjYSIsImV4aXN0c1N5bmMiLCJzeW5jIiwiZ2xvYlN5bmMiLCJyZXNvbHZlIiwicGF0aFJlc29sdmUiLCJMZXhDb25maWciLCJjcmVhdGVTcGlubmVyIiwiZmluZFRhaWx3aW5kQ3NzUGF0aCIsInJlc29sdmVCaW5hcnlQYXRoIiwibG9nIiwiZmluZFN0b3J5RmlsZXMiLCJzdG9yeVBhdHRlcm5zIiwic3RvcnlGaWxlcyIsImZvckVhY2giLCJwYXR0ZXJuIiwiZmlsZXMiLCJjd2QiLCJwcm9jZXNzIiwiaWdub3JlIiwicHVzaCIsImNoZWNrU3Rvcnlib29rSW5pdGlhbGl6YXRpb24iLCJwcm9qZWN0Q29uZmlnRGlyIiwibGV4Q29uZmlnRGlyIiwiZ2V0TGV4RGlyIiwiZXh0cmFjdFByb2dyZXNzUGVyY2VudGFnZSIsIm91dHB1dCIsImxpbmVzIiwic3BsaXQiLCJsaW5lIiwiaW5jbHVkZXMiLCJwZXJjZW50YWdlTWF0Y2giLCJtYXRjaCIsInBhcnNlSW50IiwiZmlsdGVyQW5kQmVhdXRpZnlPdXRwdXQiLCJpc1ZlcmJvc2UiLCJmaWx0ZXJlZExpbmVzIiwiZmlsdGVyIiwiam9pbiIsImJlYXV0aWZ5T3V0cHV0IiwicmVwbGFjZSIsImN5YW4iLCJibHVlIiwiZ3JlZW4iLCJyZWQiLCJ5ZWxsb3ciLCJtYWdlbnRhIiwic3Rvcnlib29rIiwiY21kIiwiY2FsbGJhY2siLCJjbGlOYW1lIiwiY29uZmlnIiwib3BlbiIsInBvcnQiLCJxdWlldCIsInN0YXRpYyIsInN0YXRpY0J1aWxkIiwidXNlTGV4Q29uZmlnIiwidmFyaWFibGVzIiwidmVyYm9zZSIsInNwaW5uZXIiLCJwYXJzZUNvbmZpZyIsInZhcmlhYmxlc09iaiIsIk5PREVfRU5WIiwiSlNPTiIsInBhcnNlIiwiX2Vycm9yIiwiZW52Iiwic3RhcnQiLCJsZW5ndGgiLCJmYWlsIiwic3VjY2VlZCIsInRhaWx3aW5kQ3NzUGF0aCIsImNvbnNvbGUiLCJncmF5IiwiY29uZmlnRGlyIiwicHJvamVjdFN0b3J5Ym9va0RpciIsImZzIiwibWtkaXIiLCJyZWN1cnNpdmUiLCJsZXhNYWluUGF0aCIsInByb2plY3RNYWluUGF0aCIsIm1haW5Db250ZW50IiwicmVhZEZpbGUiLCJsZXhOb2RlTW9kdWxlcyIsIndyaXRlRmlsZSIsImxleFByZXZpZXdQYXRoIiwicHJldmlld0NvbnRlbnQiLCJzdG9yeWJvb2tQYXRoIiwic3Rvcnlib29rQXJncyIsInRvU3RyaW5nIiwib3V0cHV0RGlyIiwiVEFJTFdJTkRfQ1NTX1BBVEgiLCJzdG9yeWJvb2tQcm9jZXNzIiwiZW5jb2RpbmciLCJMRVhfUVVJRVQiLCJMRVhfVkVSQk9TRSIsIlNUT1JZQk9PS19PUEVOIiwic3RkaW8iLCJ1cmxGb3VuZCIsImxhc3RQcm9ncmVzc1BlcmNlbnRhZ2UiLCJzdGRvdXQiLCJvbiIsImRhdGEiLCJwcm9ncmVzc1BlcmNlbnRhZ2UiLCJhY3Rpb24iLCJ0ZXh0Iiwid3JpdGUiLCJmaWx0ZXJlZE91dHB1dCIsImJlYXV0aWZpZWRPdXRwdXQiLCJ0cmltIiwic3RkZXJyIiwiZXJyb3IiLCJtZXNzYWdlIl0sIm1hcHBpbmdzIjoiQUFBQSxPQUFPQSxXQUFXLFFBQVE7QUFDMUIsU0FBUUMsS0FBSyxRQUFPLFFBQVE7QUFDNUIsU0FBUUMsVUFBVSxRQUFPLEtBQUs7QUFDOUIsU0FBUUMsUUFBUUMsUUFBUSxRQUFPLE9BQU87QUFDdEMsU0FBUUMsV0FBV0MsV0FBVyxRQUFPLE9BQU87QUFFNUMsU0FBUUMsU0FBUyxRQUFPLHFCQUFxQjtBQUM3QyxTQUFRQyxhQUFhLFFBQU8scUJBQXFCO0FBQ2pELFNBQVFDLG1CQUFtQixFQUFFQyxpQkFBaUIsUUFBTyxzQkFBc0I7QUFDM0UsU0FBUUMsR0FBRyxRQUFPLHFCQUFxQjtBQWdCdkMsTUFBTUMsaUJBQWlCO0lBQ3JCLE1BQU1DLGdCQUFnQjtRQUNwQjtRQUNBO1FBQ0E7S0FDRDtJQUVELE1BQU1DLGFBQXVCLEVBQUU7SUFFL0JELGNBQWNFLE9BQU8sQ0FBQyxDQUFDQztRQUNyQixNQUFNQyxRQUFRYixTQUFTWSxTQUFTO1lBQzlCRSxLQUFLQyxRQUFRRCxHQUFHO1lBQ2hCRSxRQUFRO2dCQUFDO2dCQUFzQjtnQkFBYztnQkFBYTthQUFjO1FBQzFFO1FBQ0FOLFdBQVdPLElBQUksSUFBSUo7SUFDckI7SUFFQSxPQUFPSDtBQUNUO0FBRUEsTUFBTVEsK0JBQStCO0lBQ25DLE1BQU1DLG1CQUFtQmpCLFlBQVlhLFFBQVFELEdBQUcsSUFBSTtJQUNwRCxNQUFNTSxlQUFlbEIsWUFBWUMsVUFBVWtCLFNBQVMsSUFBSTtJQUV4RCxPQUFPdkIsV0FBV3FCLHFCQUFxQnJCLFdBQVdzQjtBQUNwRDtBQUVBLE1BQU1FLDRCQUE0QixDQUFDQztJQUNqQyxNQUFNQyxRQUFRRCxPQUFPRSxLQUFLLENBQUM7SUFDM0IsS0FBSSxNQUFNQyxRQUFRRixNQUFPO1FBQ3ZCLElBQUdFLEtBQUtDLFFBQVEsQ0FBQyx5QkFBeUJELEtBQUtDLFFBQVEsQ0FBQyxNQUFNO1lBQzVELE1BQU1DLGtCQUFrQkYsS0FBS0csS0FBSyxDQUFDO1lBQ25DLElBQUdELGlCQUFpQjtnQkFDbEIsT0FBT0UsU0FBU0YsZUFBZSxDQUFDLEVBQUU7WUFDcEM7UUFDRjtJQUNGO0lBQ0EsT0FBTztBQUNUO0FBRUEsTUFBTUcsMEJBQTBCLENBQUNSLFFBQWdCUztJQUMvQyxJQUFHQSxXQUFXO1FBQ1osT0FBT1Q7SUFDVDtJQUVBLE1BQU1DLFFBQVFELE9BQU9FLEtBQUssQ0FBQztJQUMzQixNQUFNUSxnQkFBZ0JULE1BQU1VLE1BQU0sQ0FBQyxDQUFDUjtRQUNsQyxJQUFHQSxLQUFLQyxRQUFRLENBQUMsdUJBQXVCO1lBQ3RDLE9BQU87UUFDVDtRQUVBLElBQUdELEtBQUtDLFFBQVEsQ0FBQyxnQkFDZkQsS0FBS0MsUUFBUSxDQUFDLGFBQ2RELEtBQUtDLFFBQVEsQ0FBQyx1QkFDZEQsS0FBS0MsUUFBUSxDQUFDLGNBQ2RELEtBQUtDLFFBQVEsQ0FBQyxlQUNkRCxLQUFLQyxRQUFRLENBQUMsWUFDZEQsS0FBS0MsUUFBUSxDQUFDLFlBQ2RELEtBQUtDLFFBQVEsQ0FBQyxZQUFZO1lBQzFCLE9BQU87UUFDVDtRQUVBLE9BQU87SUFDVDtJQUVBLE9BQU9NLGNBQWNFLElBQUksQ0FBQztBQUM1QjtBQUVBLE1BQU1DLGlCQUFpQixDQUFDYixTQUEyQkEsT0FDaERjLE9BQU8sQ0FBQyxzQkFBc0J6QyxNQUFNMEMsSUFBSSxDQUFDLE9BQ3pDRCxPQUFPLENBQUMsWUFBWXpDLE1BQU0yQyxJQUFJLENBQUMsWUFDL0JGLE9BQU8sQ0FBQyxXQUFXekMsTUFBTTRDLEtBQUssQ0FBQyxXQUMvQkgsT0FBTyxDQUFDLHFCQUFxQnpDLE1BQU00QyxLQUFLLENBQUMscUJBQ3pDSCxPQUFPLENBQUMsdUJBQXVCekMsTUFBTTRDLEtBQUssQ0FBQyxPQUMzQ0gsT0FBTyxDQUFDLHFCQUFxQnpDLE1BQU00QyxLQUFLLENBQUMsT0FDekNILE9BQU8sQ0FBQyxVQUFVekMsTUFBTTZDLEdBQUcsQ0FBQyxPQUM1QkosT0FBTyxDQUFDLFlBQVl6QyxNQUFNOEMsTUFBTSxDQUFDLE9BQ2pDTCxPQUFPLENBQUMsV0FBV3pDLE1BQU0rQyxPQUFPLENBQUM7QUFFcEMsT0FBTyxNQUFNQyxZQUFZLE9BQU9DLEtBQXVCQyxXQUE4QixJQUFPLENBQUEsQ0FBQyxDQUFBLENBQUU7SUFDN0YsTUFBTSxFQUFDQyxVQUFVLEtBQUssRUFBRUMsTUFBTSxFQUFFQyxPQUFPLEtBQUssRUFBRUMsT0FBTyxJQUFJLEVBQUVDLEtBQUssRUFBRUMsUUFBUUMsY0FBYyxLQUFLLEVBQUVDLGVBQWUsS0FBSyxFQUFFQyxTQUFTLEVBQUVDLFVBQVUsS0FBSyxFQUFDLEdBQUdYO0lBRW5KLE1BQU1ZLFVBQVVyRCxjQUFjK0M7SUFFOUI1QyxJQUFJWCxNQUFNMEMsSUFBSSxDQUFDLEdBQUdTLFFBQVEsc0JBQXNCLENBQUMsR0FBRyxRQUFRSTtJQUU1RCxNQUFNaEQsVUFBVXVELFdBQVcsQ0FBQ2I7SUFFNUIsSUFBSWMsZUFBdUI7UUFBQ0MsVUFBVTtJQUFhO0lBRW5ELElBQUdMLFdBQVc7UUFDWixJQUFJO1lBQ0ZJLGVBQWVFLEtBQUtDLEtBQUssQ0FBQ1A7UUFDNUIsRUFBRSxPQUFNUSxRQUFRO1lBQ2R4RCxJQUFJLENBQUMsRUFBRSxFQUFFd0MsUUFBUSxnRUFBZ0UsQ0FBQyxFQUFFLFNBQVNJO1lBQzdGTCxTQUFTO1lBQ1QsT0FBTztRQUNUO0lBQ0Y7SUFFQS9CLFFBQVFpRCxHQUFHLEdBQUc7UUFBQyxHQUFHakQsUUFBUWlELEdBQUc7UUFBRSxHQUFHTCxZQUFZO0lBQUE7SUFFOUNGLFFBQVFRLEtBQUssQ0FBQztJQUNkLE1BQU12RCxhQUFhRjtJQUVuQixJQUFHRSxXQUFXd0QsTUFBTSxLQUFLLEdBQUc7UUFDMUJULFFBQVFVLElBQUksQ0FBQztRQUNiNUQsSUFBSSxpR0FBaUcsUUFBUTRDO1FBQzdHTCxTQUFTO1FBQ1QsT0FBTztJQUNUO0lBRUFXLFFBQVFXLE9BQU8sQ0FBQyxDQUFDLE1BQU0sRUFBRTFELFdBQVd3RCxNQUFNLENBQUMsY0FBYyxDQUFDO0lBRTFELE1BQU1HLGtCQUFrQmhFO0lBRXhCaUUsUUFBUS9ELEdBQUcsQ0FBQztRQUFDOEQ7SUFBZTtJQUM1QixJQUFHQSxpQkFBaUI7UUFDbEIsSUFBRyxDQUFDbEIsT0FBTztZQUNUNUMsSUFBSVgsTUFBTTRDLEtBQUssQ0FBQyxDQUFDLHFDQUFxQyxFQUFFNkIsaUJBQWlCLEdBQUcsUUFBUWxCO1FBQ3RGO0lBQ0YsT0FBTztRQUNMLElBQUcsQ0FBQ0EsT0FBTztZQUNUNUMsSUFBSVgsTUFBTThDLE1BQU0sQ0FBQyw0Q0FBNEMsUUFBUVM7WUFDckU1QyxJQUFJWCxNQUFNMkUsSUFBSSxDQUFDLG1GQUFtRixRQUFRcEI7UUFDNUc7SUFDRjtJQUVBLElBQUcsQ0FBQ2pDLGdDQUFnQztRQUNsQ3VDLFFBQVFVLElBQUksQ0FBQztRQUNiNUQsSUFBSSxtSUFBbUksUUFBUTRDO1FBQy9JTCxTQUFTO1FBQ1QsT0FBTztJQUNUO0lBRUEsTUFBTTNCLG1CQUFtQmpCLFlBQVlhLFFBQVFELEdBQUcsSUFBSTtJQUNwRCxNQUFNTSxlQUFlbEIsWUFBWUMsVUFBVWtCLFNBQVMsSUFBSTtJQUV4RCxJQUFJbUQsWUFBWXhCO0lBQ2hCLElBQUcsQ0FBQ3dCLFdBQVc7UUFDYkEsWUFBWXBEO1FBQ1osSUFBRyxDQUFDa0MsZ0JBQWdCeEQsV0FBV3FCLG1CQUFtQjtZQUNoRHFELFlBQVlyRDtRQUNkO0lBQ0Y7SUFFQSxJQUFHLENBQUNnQyxPQUFPO1FBQ1Q1QyxJQUFJWCxNQUFNMkUsSUFBSSxDQUFDLENBQUMsb0JBQW9CLEVBQUVwRCxpQkFBaUIsVUFBVSxFQUFFckIsV0FBV3FCLGtCQUFrQixDQUFDLENBQUMsR0FBRyxRQUFRZ0M7UUFDN0c1QyxJQUFJWCxNQUFNMkUsSUFBSSxDQUFDLENBQUMsZ0JBQWdCLEVBQUVuRCxhQUFhLFVBQVUsRUFBRXRCLFdBQVdzQixjQUFjLENBQUMsQ0FBQyxHQUFHLFFBQVErQjtRQUNqRyxJQUFHRyxjQUFjO1lBQ2YvQyxJQUFJWCxNQUFNMkMsSUFBSSxDQUFDLDhEQUE4RCxRQUFRWTtRQUN2RjtRQUNBNUMsSUFBSVgsTUFBTTJFLElBQUksQ0FBQyxDQUFDLG9CQUFvQixFQUFFQyxXQUFXLEdBQUcsUUFBUXJCO0lBQzlEO0lBRUEsSUFBR3FCLGNBQWNwRCxjQUFjO1FBQzdCLElBQUcsQ0FBQytCLE9BQU87WUFDVDVDLElBQUlYLE1BQU0yQyxJQUFJLENBQUMsbUZBQW1GLFFBQVFZO1FBQzVHO1FBQ0EsTUFBTXNCLHNCQUFzQnZFLFlBQVlhLFFBQVFELEdBQUcsSUFBSTtRQUV2RCxNQUFNNEQsS0FBSyxNQUFNLE1BQU0sQ0FBQztRQUN4QixNQUFNQSxHQUFHQyxLQUFLLENBQUNGLHFCQUFxQjtZQUFDRyxXQUFXO1FBQUk7UUFFcEQsTUFBTUMsY0FBYzNFLFlBQVlrQixjQUFjO1FBQzlDLE1BQU0wRCxrQkFBa0I1RSxZQUFZdUUscUJBQXFCO1FBQ3pELElBQUlNLGNBQWMsTUFBTUwsR0FBR00sUUFBUSxDQUFDSCxhQUFhO1FBRWpERSxjQUFjQSxZQUFZMUMsT0FBTyxDQUMvQixzQkFDQSxDQUFDLFdBQVcsRUFBRW5DLFlBQVlhLFFBQVFELEdBQUcsSUFBSSw4QkFBOEIsSUFBSSxFQUFFWixZQUFZYSxRQUFRRCxHQUFHLElBQUksZ0JBQWdCLEVBQUUsQ0FBQztRQUc3SCxNQUFNbUUsaUJBQWlCL0UsWUFBWUMsVUFBVWtCLFNBQVMsSUFBSTtRQUMxRDBELGNBQWNBLFlBQVkxQyxPQUFPLENBQy9CLGlHQUNBLENBQUMsbURBQW1ELEVBQUU0QyxlQUFlLGVBQWUsQ0FBQztRQUd2RixNQUFNUCxHQUFHUSxTQUFTLENBQUNKLGlCQUFpQkM7UUFFcEMsTUFBTUksaUJBQWlCakYsWUFBWWtCLGNBQWM7UUFDakQsSUFBR3RCLFdBQVdxRixpQkFBaUI7WUFDN0IsTUFBTUMsaUJBQWlCLE1BQU1WLEdBQUdNLFFBQVEsQ0FBQ0csZ0JBQWdCO1lBQ3pELE1BQU1ULEdBQUdRLFNBQVMsQ0FBQ2hGLFlBQVl1RSxxQkFBcUIsZ0JBQWdCVztRQUN0RTtRQUVBWixZQUFZQztJQUNkO0lBQ0EsSUFBRyxDQUFDM0UsV0FBVzBFLFlBQVk7UUFDekJmLFFBQVFVLElBQUksQ0FBQztRQUNiNUQsSUFBSSxDQUFDLGdCQUFnQixFQUFFWSxrQkFBa0IsRUFBRSxRQUFRZ0M7UUFDbkQ1QyxJQUFJLENBQUMsWUFBWSxFQUFFYSxjQUFjLEVBQUUsUUFBUStCO1FBQzNDNUMsSUFBSSxtSUFBbUksUUFBUTRDO1FBQy9JTCxTQUFTO1FBQ1QsT0FBTztJQUNUO0lBRUEsTUFBTXVDLGdCQUFnQi9FLGtCQUFrQjtJQUV4QyxJQUFHLENBQUMrRSxlQUFlO1FBQ2pCOUUsSUFBSSxDQUFDLEVBQUUsRUFBRXdDLFFBQVEseUVBQXlFLENBQUMsRUFBRSxTQUFTSTtRQUN0RzVDLElBQUksOERBQThELFFBQVE0QztRQUMxRUwsU0FBUztRQUNULE9BQU87SUFDVDtJQUVBLE1BQU13QyxnQkFBZ0I7UUFBQ2pDLGNBQWMsVUFBVTtLQUFNO0lBQ3JEaUMsY0FBY3JFLElBQUksQ0FBQyxnQkFBZ0J1RDtJQUVuQyxJQUFHdEIsTUFBTTtRQUNQb0MsY0FBY3JFLElBQUksQ0FBQyxVQUFVaUMsS0FBS3FDLFFBQVE7SUFDNUM7SUFFQSxJQUFHdEMsTUFBTTtRQUNQcUMsY0FBY3JFLElBQUksQ0FBQztJQUNyQjtJQUVBLElBQUdvQyxhQUFhO1FBQ2QsTUFBTW1DLFlBQVl0RixZQUFZYSxRQUFRRCxHQUFHLElBQUk7UUFDN0N3RSxjQUFjckUsSUFBSSxDQUFDLGdCQUFnQnVFO0lBQ3JDO0lBRUEsSUFBRyxDQUFDckMsT0FBTztRQUNUNUMsSUFBSVgsTUFBTTJFLElBQUksQ0FBQyxDQUFDLGtCQUFrQixFQUFFQyxXQUFXLEdBQUcsUUFBUXJCO0lBQzVEO0lBRUFwQyxRQUFRaUQsR0FBRyxDQUFDeUIsaUJBQWlCLEdBQUdwQjtJQUVoQyxJQUFJO1FBQ0ZaLFFBQVFRLEtBQUssQ0FBQ1osY0FBYyxpQ0FBaUM7UUFFN0QsTUFBTXFDLG1CQUFtQjdGLE1BQU13RixlQUFzQkMsZUFBZTtZQUNsRUssVUFBVTtZQUNWM0IsS0FBSztnQkFDSCxHQUFHakQsUUFBUWlELEdBQUc7Z0JBQ2Q0QixXQUFXekM7Z0JBQ1gwQyxhQUFhckM7Z0JBQ2JzQyxnQkFBZ0I3QztnQkFDaEIsR0FBSW9CLG1CQUFtQjtvQkFBQ29CLG1CQUFtQnBCO2dCQUFlLENBQUM7WUFDN0Q7WUFDQTBCLE9BQU87UUFDVDtRQUVBLElBQUlDLFdBQVc7UUFDZixJQUFJQyx5QkFBeUI7UUFFN0JQLGlCQUFpQlEsTUFBTSxFQUFFQyxHQUFHLFFBQVEsQ0FBQ0M7WUFDbkMsTUFBTTdFLFNBQVM2RSxLQUFLYixRQUFRO1lBQzVCLE1BQU1jLHFCQUFxQi9FLDBCQUEwQkM7WUFFckQsSUFBRzhFLHVCQUF1QixRQUFRQSx1QkFBdUJKLHdCQUF3QjtnQkFDL0VBLHlCQUF5Qkk7Z0JBQ3pCLE1BQU1DLFNBQVNqRCxjQUFjLGFBQWE7Z0JBQ3pDSSxRQUFnQjhDLElBQUksR0FBRyxHQUFHRCxPQUFPLGNBQWMsRUFBRUQsbUJBQW1CLENBQUMsQ0FBQztnQkFDdkV0RixRQUFRbUYsTUFBTSxDQUFDTSxLQUFLLENBQUMsQ0FBQyxvQkFBb0IsRUFBRTVHLE1BQU0rQyxPQUFPLENBQUMsR0FBRzBELG1CQUFtQixDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDekY7WUFFQSxNQUFNSSxpQkFBaUIxRSx3QkFBd0JSLFFBQVFpQztZQUN2RCxNQUFNa0QsbUJBQW1CdEUsZUFBZXFFO1lBRXhDLElBQUcsQ0FBQ1QsWUFBYXpFLENBQUFBLE9BQU9JLFFBQVEsQ0FBQyxhQUFhSixPQUFPSSxRQUFRLENBQUMsdUJBQXVCSixPQUFPSSxRQUFRLENBQUMsWUFBVyxHQUFJO2dCQUNsSDhCLFFBQVFXLE9BQU8sQ0FBQ3hFLE1BQU00QyxLQUFLLENBQUM7Z0JBQzVCd0QsV0FBVztZQUNiO1lBRUEsSUFBR1MsZUFBZUUsSUFBSSxJQUFJO2dCQUN4QjVGLFFBQVFtRixNQUFNLENBQUNNLEtBQUssQ0FBQ0U7WUFDdkI7UUFDRjtRQUVBaEIsaUJBQWlCa0IsTUFBTSxFQUFFVCxHQUFHLFFBQVEsQ0FBQ0M7WUFDbkMsTUFBTTdFLFNBQVM2RSxLQUFLYixRQUFRO1lBQzVCLE1BQU1rQixpQkFBaUIxRSx3QkFBd0JSLFFBQVFpQztZQUN2RCxNQUFNa0QsbUJBQW1CdEUsZUFBZXFFO1lBRXhDLElBQUdBLGVBQWVFLElBQUksSUFBSTtnQkFDeEI1RixRQUFRNkYsTUFBTSxDQUFDSixLQUFLLENBQUNFO1lBQ3ZCO1FBQ0Y7UUFFQSxJQUFJO1lBQ0YsTUFBTWhCO1lBQ04sSUFBRyxDQUFDTSxVQUFVO2dCQUNadkMsUUFBUVcsT0FBTyxDQUFDeEUsTUFBTTRDLEtBQUssQ0FBQztZQUM5QjtZQUNBTSxTQUFTO1lBQ1QsT0FBTztRQUNULEVBQUUsT0FBTStELE9BQU87WUFDYnBELFFBQVFVLElBQUksQ0FBQ3ZFLE1BQU02QyxHQUFHLENBQUM7WUFDdkJsQyxJQUFJLENBQUMsRUFBRSxFQUFFd0MsUUFBUSxRQUFRLEVBQUU4RCxNQUFNQyxPQUFPLEVBQUUsRUFBRSxTQUFTM0Q7WUFDckRMLFNBQVM7WUFDVCxPQUFPO1FBQ1Q7SUFDRixFQUFFLE9BQU0rRCxPQUFPO1FBQ2J0RyxJQUFJLENBQUMsRUFBRSxFQUFFd0MsUUFBUSxRQUFRLEVBQUU4RCxNQUFNQyxPQUFPLEVBQUUsRUFBRSxTQUFTM0Q7UUFDckRNLFFBQVFVLElBQUksQ0FBQztRQUNickIsU0FBUztRQUNULE9BQU87SUFDVDtBQUNGLEVBQUUifQ==
|
|
@@ -7,6 +7,7 @@ export interface TestOptions {
|
|
|
7
7
|
readonly changedFilesWithAncestor?: boolean;
|
|
8
8
|
readonly changedSince?: string;
|
|
9
9
|
readonly ci?: boolean;
|
|
10
|
+
readonly clearCache?: boolean;
|
|
10
11
|
readonly cliName?: string;
|
|
11
12
|
readonly collectCoverageFrom?: string;
|
|
12
13
|
readonly colors?: boolean;
|
|
@@ -14,6 +15,7 @@ export interface TestOptions {
|
|
|
14
15
|
readonly debug?: boolean;
|
|
15
16
|
readonly debugTests?: boolean;
|
|
16
17
|
readonly detectOpenHandles?: boolean;
|
|
18
|
+
readonly environment?: string;
|
|
17
19
|
readonly env?: string;
|
|
18
20
|
readonly errorOnDeprecated?: boolean;
|
|
19
21
|
readonly expand?: boolean;
|