@tricoteuses/assemblee 1.9.8 → 1.9.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/bugs/agenda-00011/plugin.test.js +9 -13
- package/lib/bugs/agenda-00011/plugin.test.mjs +5 -9
- package/lib/datasets.d.ts +5 -0
- package/lib/datasets.js +5 -3
- package/lib/datasets.mjs +5 -3
- package/lib/raw_types/scrutins.d.ts +1 -10
- package/lib/raw_types/scrutins.js +2 -24
- package/lib/raw_types/scrutins.mjs +2 -24
- package/lib/scripts/clean_reorganized_data.js +420 -219
- package/lib/scripts/clean_reorganized_data.mjs +22 -5
- package/lib/scripts/process_textes_loi_dataset.js +3 -3
- package/lib/scripts/process_textes_loi_dataset.mjs +4 -2
- package/lib/scripts/reorganize_data.js +2 -2
- package/lib/scripts/reorganize_data.mjs +3 -3
- package/package.json +2 -2
|
@@ -14,9 +14,9 @@ import { Convert as DossiersLegislatifsRawConvert } from "../raw_types/dossiers_
|
|
|
14
14
|
import { Convert as ScrutinsRawConvert } from "../raw_types/scrutins.mjs";
|
|
15
15
|
import { Convert as QuestionsRawConvert } from "../raw_types/questions.mjs";
|
|
16
16
|
import { Convert as ComptesRendusRawConvert } from "../raw_types/debats.mjs";
|
|
17
|
-
import { cloneOption, commitOption, categoriesOption, legislatureOption, remoteOption, silentOption, verboseOption, dataDirDefaultOption, pullOption } from "./shared/cli_helpers.mjs";
|
|
17
|
+
import { cloneOption, commitOption, categoriesOption, legislatureOption, remoteOption, silentOption, verboseOption, dataDirDefaultOption, pullOption, fetchDocumentsOption } from "./shared/cli_helpers.mjs";
|
|
18
18
|
function parseArgs(argv) {
|
|
19
|
-
const optionsDefinitions = [cloneOption, commitOption, categoriesOption, legislatureOption, remoteOption, silentOption, verboseOption, dataDirDefaultOption, pullOption, {
|
|
19
|
+
const optionsDefinitions = [cloneOption, commitOption, categoriesOption, legislatureOption, remoteOption, silentOption, verboseOption, dataDirDefaultOption, fetchDocumentsOption, pullOption, {
|
|
20
20
|
alias: "V",
|
|
21
21
|
help: "don't validate raw data",
|
|
22
22
|
name: "no-validate-raw",
|
|
@@ -514,4 +514,4 @@ function main(argv) {
|
|
|
514
514
|
|
|
515
515
|
/* istanbul ignore if */
|
|
516
516
|
if (process.argv[1].endsWith("reorganize_data.ts")) process.exit(main(process.argv));
|
|
517
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJhc3NlcnQiLCJjb21tYW5kTGluZUFyZ3MiLCJmcyIsInBhdGgiLCJkYXRhc2V0cyIsIkRhdGFzZXRTdHJ1Y3R1cmUiLCJFbmFibGVkRGF0YXNldHMiLCJnZXRFbmFibGVkRGF0YXNldHMiLCJmaWx0ZXJCeUxlZ2lzbGF0dXJlIiwiZXhpc3RpbmdEYXRlVG9Kc29uIiwicGF0Y2hlZERhdGVUb0pzb24iLCJnaXQiLCJ3YWxrRGlyIiwicGF0aEZyb21Db21wdGVSZW5kdVVpZCIsInBhdGhGcm9tRG9jdW1lbnRVaWQiLCJwYXRoRnJvbURvc3NpZXJQYXJsZW1lbnRhaXJlVWlkIiwicGF0aEZyb21RdWVzdGlvblVpZCIsInBhdGhGcm9tUmV1bmlvblVpZCIsInBhdGhGcm9tU2NydXRpblVpZCIsIkNvbnZlcnQiLCJBY3RldXJzRXRPcmdhbmVzUmF3Q29udmVydCIsIkFnZW5kYXNSYXdDb252ZXJ0IiwiQW1lbmRlbWVudHNSYXdDb252ZXJ0IiwiRG9zc2llcnNMZWdpc2xhdGlmc1Jhd0NvbnZlcnQiLCJTY3J1dGluc1Jhd0NvbnZlcnQiLCJRdWVzdGlvbnNSYXdDb252ZXJ0IiwiQ29tcHRlc1JlbmR1c1Jhd0NvbnZlcnQiLCJjbG9uZU9wdGlvbiIsImNvbW1pdE9wdGlvbiIsImNhdGVnb3JpZXNPcHRpb24iLCJsZWdpc2xhdHVyZU9wdGlvbiIsInJlbW90ZU9wdGlvbiIsInNpbGVudE9wdGlvbiIsInZlcmJvc2VPcHRpb24iLCJkYXRhRGlyRGVmYXVsdE9wdGlvbiIsInB1bGxPcHRpb24iLCJwYXJzZUFyZ3MiLCJhcmd2Iiwib3B0aW9uc0RlZmluaXRpb25zIiwiYWxpYXMiLCJoZWxwIiwibmFtZSIsInR5cGUiLCJCb29sZWFuIiwib3B0aW9ucyIsImNsZWFyRGlyZWN0b3J5IiwiZGlyUGF0aCIsImVuc3VyZURpclN5bmMiLCJmaWxlbmFtZSIsInJlYWRkaXJTeW5jIiwic3RhcnRzV2l0aCIsInJlbW92ZVN5bmMiLCJqb2luIiwiY2xvbmVHaXQiLCJnaXRHcm91cFVybCIsImRhdGFzZXROYW1lIiwiZGF0YURpciIsImNsb25lIiwicmVvcmdhbml6ZURhdGEiLCJEYXRlIiwicHJvdG90eXBlIiwidG9KU09OIiwiZXhpdENvZGUiLCJjb21taXQiLCJ0cmltIiwicmVwbGFjZSIsInZhbGlkYXRlUmF3RGF0YSIsImVuYWJsZWREYXRhc2V0cyIsImNhdGVnb3JpZXMiLCJjaG9zZW5EYXRhc2V0cyIsImxlZ2lzbGF0dXJlIiwiY29tbWl0R2l0IiwiZGF0YXNldFJlb3JnYW5pemVkRGlyIiwiZXJyb3JDb2RlIiwiY29tbWl0QW5kUHVzaCIsInJlbW90ZSIsIkFjdGV1cnNFdE9yZ2FuZXMiLCJkYXRhc2V0IiwiYWN0ZXVyc0V0T3JnYW5lcyIsIm9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgiLCJzaWxlbnQiLCJjb25zb2xlIiwibG9nIiwiYmFzZW5hbWUiLCJwdWxsIiwicmVzZXRBbmRQdWxsIiwiYWN0ZXVyc1Jlb3JnYW5pemVkRGlyIiwibWtkaXJTeW5jIiwib3JnYW5lc1Jlb3JnYW5pemVkRGlyIiwic3RydWN0dXJlIiwiU2luZ2xlRmlsZSIsIm9yaWdpbmFsSnNvbiIsInJlYWRGaWxlU3luYyIsImVuY29kaW5nIiwib3JpZ2luYWxEYXRhIiwidG9BY3RldXJzRXRPcmdhbmVzIiwiSlNPTiIsInBhcnNlIiwiYWN0ZXVyIiwiZXhwb3J0IiwiYWN0ZXVycyIsInJlb3JnYW5pemVkSnNvbkZpbGVQYXRoIiwidWlkIiwid3JpdGVGaWxlU3luYyIsInN0cmluZ2lmeSIsIm9yZ2FuZSIsIm9yZ2FuZXMiLCJTZWdtZW50ZWRGaWxlcyIsImRlcG9ydHNCeUFjdGV1clVpZCIsImV4aXN0c1N5bmMiLCJkZXBvcnRTcGxpdFBhdGgiLCJkZXBvcnRGaWxlbmFtZSIsImxlbmd0aCIsImVuZHNXaXRoIiwiZGVwb3J0T3JpZ2luYWxGaWxlUGF0aCIsInZlcmJvc2UiLCJkZXBvcnRPcmlnaW5hbEpzb24iLCJkZXBvcnRPcmlnaW5hbCIsInRvRGVwb3J0IiwiZGVwb3J0IiwiZGVwb3J0cyIsImFjdGV1clJlZiIsInVuZGVmaW5lZCIsInB1c2giLCJPYmplY3QiLCJ2YWx1ZXMiLCJzb3J0IiwiYSIsImIiLCJsb2NhbGVDb21wYXJlIiwibWFuZGF0c0J5QWN0ZXVyVWlkIiwibWFuZGF0U3BsaXRQYXRoIiwibWFuZGF0RmlsZW5hbWUiLCJtYW5kYXRPcmlnaW5hbEZpbGVQYXRoIiwibWFuZGF0T3JpZ2luYWxKc29uIiwibWFuZGF0T3JpZ2luYWwiLCJ0b01hbmRhdFdyYXBwZXIiLCJtYW5kYXQiLCJtYW5kYXRzIiwiYWN0ZXVyU3BsaXRQYXRoIiwiYWN0ZXVyRmlsZW5hbWUiLCJhY3RldXJPcmlnaW5hbEZpbGVQYXRoIiwiYWN0ZXVyT3JpZ2luYWxKc29uIiwiYWN0ZXVyT3JpZ2luYWwiLCJ0b0FjdGV1ciIsImFjdGV1clVpZCIsInN0cmljdEVxdWFsIiwiYWN0ZXVyUmVvcmdhbml6ZWRKc29uRmlsZVBhdGgiLCJvcmdhbmVTcGxpdFBhdGgiLCJvcmdhbmVGaWxlbmFtZSIsIm9yZ2FuZU9yaWdpbmFsRmlsZVBhdGgiLCJvcmdhbmVPcmlnaW5hbEpzb24iLCJvcmdhbmVPcmlnaW5hbCIsInRvT3JnYW5lIiwib3JnYW5lUmVvcmdhbml6ZWRKc29uRmlsZVBhdGgiLCJBZ2VuZGFzIiwiYWdlbmRhcyIsInRvQWdlbmRhcyIsInJldW5pb24iLCJyZXVuaW9ucyIsIndyaXRlUmVvcmdhbml6ZWRKc29uIiwicmV1bmlvblNwbGl0UGF0aCIsInJldW5pb25GaWxlbmFtZSIsInJldW5pb25PcmlnaW5hbEZpbGVQYXRoIiwicmV1bmlvbk9yaWdpbmFsSnNvbiIsInJldW5pb25PcmlnaW5hbCIsInRvUmV1bmlvbiIsIkFtZW5kZW1lbnRzIiwiYW1lbmRlbWVudHMiLCJ0b0FtZW5kZW1lbnRzIiwidGV4dGVMZWdpc2xhdGlmIiwidGV4dGVzRXRBbWVuZGVtZW50cyIsInRleHRlbGVnIiwiYW1lbmRlbWVudCIsIndyaXRlQW1lbmRlbWVudFJlb3JnYW5pemVkSnNvbiIsImFtZW5kZW1lbnRTcGxpdFBhdGgiLCJhbWVuZGVtZW50RmlsZW5hbWUiLCJhbWVuZGVtZW50T3JpZ2luYWxGaWxlUGF0aCIsImFtZW5kZW1lbnRPcmlnaW5hbEpzb24iLCJhbWVuZGVtZW50T3JpZ2luYWwiLCJ0b0FtZW5kZW1lbnRXcmFwcGVyIiwiRG9zc2llcnNMZWdpc2xhdGlmcyIsImRvc3NpZXJzTGVnaXNsYXRpZnMiLCJkb2N1bWVudHNEaXIiLCJkb3NzaWVyc0RpciIsInRvRG9zc2llcnNMZWdpc2xhdGlmcyIsImRvY3VtZW50IiwidGV4dGVzTGVnaXNsYXRpZnMiLCJkb3NzaWVyUGFybGVtZW50YWlyZSIsImRvc3NpZXIiLCJkb2N1bWVudFNwbGl0UGF0aCIsImRvY3VtZW50RmlsZW5hbWUiLCJkb2N1bWVudE9yaWdpbmFsRmlsZVBhdGgiLCJkb2N1bWVudE9yaWdpbmFsSnNvbiIsImRvY3VtZW50T3JpZ2luYWwiLCJ0b0RvY3VtZW50IiwiZG9zc2llclBhcmxlbWVudGFpcmVTcGxpdFBhdGgiLCJkb3NzaWVyUGFybGVtZW50YWlyZUZpbGVuYW1lIiwiZG9zc2llclBhcmxlbWVudGFpcmVPcmlnaW5hbEZpbGVQYXRoIiwiZG9zc2llclBhcmxlbWVudGFpcmVPcmlnaW5hbEpzb24iLCJkb3NzaWVyUGFybGVtZW50YWlyZU9yaWdpbmFsIiwidG9Eb3NzaWVyUGFybGVtZW50YWlyZSIsIlNjcnV0aW5zIiwic2NydXRpbnMiLCJ0b1NjcnV0aW5zIiwic2NydXRpbiIsInNjcnV0aW5TcGxpdFBhdGgiLCJzY3J1dGluRmlsZW5hbWUiLCJzY3J1dGluT3JpZ2luYWxGaWxlUGF0aCIsInNjcnV0aW5PcmlnaW5hbEpzb24iLCJzY3J1dGluT3JpZ2luYWwiLCJ0b1NjcnV0aW5XcmFwcGVyIiwiUXVlc3Rpb25zIiwicXVlc3Rpb25zIiwicXVlc3Rpb25TcGxpdFBhdGgiLCJxdWVzdGlvbkZpbGVuYW1lIiwicXVlc3Rpb25PcmlnaW5hbEZpbGVQYXRoIiwicXVlc3Rpb25PcmlnaW5hbEpzb24iLCJxdWVzdGlvbk9yaWdpbmFsIiwidG9RdWVzdGlvbldyYXBwZXIiLCJxdWVzdGlvbiIsIkNvbXB0ZXNSZW5kdXNTZWFuY2VzIiwiY29tcHRlc1JlbmR1c1NlYW5jZXMiLCJjb21wdGVSZW5kdVNlYW5jZVNwbGl0UGF0aCIsImNvbXB0ZVJlbmR1U2VhbmNlRmlsZW5hbWUiLCJjb21wdGVSZW5kdVNlYW5jZU9yaWdpbmFsRmlsZVBhdGgiLCJjb21wdGVSZW5kdVNlYW5jZU9yaWdpbmFsSnNvbiIsImNvbXB0ZVJlbmR1U2VhbmNlT3JpZ2luYWwiLCJ0b0NvbXB0ZVJlbmR1V3JhcHBlciIsImNvbXB0ZVJlbmR1U2VhbmNlIiwiY29tcHRlUmVuZHUiLCJ1aWRUZXh0ZUxlZ2lzbGF0aWYiLCJ0ZXh0ZUxlZ2lzbGF0aWZSZWYiLCJub3RTdHJpY3RFcXVhbCIsInRleHRlTGVnaXNsYXRpZkRpciIsImRpciIsIm9iaiIsInBhdGhGcm9tVWlkIiwibWFpbiIsInByb2Nlc3MiLCJleGl0Il0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NjcmlwdHMvcmVvcmdhbml6ZV9kYXRhLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhc3NlcnQgZnJvbSBcImFzc2VydFwiXG5pbXBvcnQgY29tbWFuZExpbmVBcmdzIGZyb20gXCJjb21tYW5kLWxpbmUtYXJnc1wiXG5pbXBvcnQgZnMgZnJvbSBcImZzLWV4dHJhXCJcbmltcG9ydCBwYXRoIGZyb20gXCJwYXRoXCJcbmltcG9ydCB7XG4gIGRhdGFzZXRzLFxuICBEYXRhc2V0U3RydWN0dXJlLFxuICBFbmFibGVkRGF0YXNldHMsXG4gIGdldEVuYWJsZWREYXRhc2V0cyxcbiAgZmlsdGVyQnlMZWdpc2xhdHVyZSxcbn0gZnJvbSBcIi4uL2RhdGFzZXRzXCJcbmltcG9ydCB7IGV4aXN0aW5nRGF0ZVRvSnNvbiwgcGF0Y2hlZERhdGVUb0pzb24gfSBmcm9tIFwiLi4vZGF0ZXNcIlxuaW1wb3J0ICogYXMgZ2l0IGZyb20gXCIuLi9naXRcIlxuaW1wb3J0IHsgd2Fsa0RpciB9IGZyb20gXCIuLi9maWxlX3N5c3RlbXNcIlxuaW1wb3J0IHtcbiAgcGF0aEZyb21Db21wdGVSZW5kdVVpZCxcbiAgcGF0aEZyb21Eb2N1bWVudFVpZCxcbiAgcGF0aEZyb21Eb3NzaWVyUGFybGVtZW50YWlyZVVpZCxcbiAgcGF0aEZyb21RdWVzdGlvblVpZCxcbiAgcGF0aEZyb21SZXVuaW9uVWlkLFxuICBwYXRoRnJvbVNjcnV0aW5VaWQsXG59IGZyb20gXCIuLi9sb2FkZXJzXCJcbmltcG9ydCB7IENvbnZlcnQgYXMgQWN0ZXVyc0V0T3JnYW5lc1Jhd0NvbnZlcnQgfSBmcm9tIFwiLi4vcmF3X3R5cGVzL2FjdGV1cnNfZXRfb3JnYW5lc1wiXG5pbXBvcnQgeyBDb252ZXJ0IGFzIEFnZW5kYXNSYXdDb252ZXJ0IH0gZnJvbSBcIi4uL3Jhd190eXBlcy9hZ2VuZGFzXCJcbmltcG9ydCB7IENvbnZlcnQgYXMgQW1lbmRlbWVudHNSYXdDb252ZXJ0IH0gZnJvbSBcIi4uL3Jhd190eXBlcy9hbWVuZGVtZW50c1wiXG5pbXBvcnQgeyBDb252ZXJ0IGFzIERvc3NpZXJzTGVnaXNsYXRpZnNSYXdDb252ZXJ0IH0gZnJvbSBcIi4uL3Jhd190eXBlcy9kb3NzaWVyc19sZWdpc2xhdGlmc1wiXG5pbXBvcnQgeyBDb252ZXJ0IGFzIFNjcnV0aW5zUmF3Q29udmVydCB9IGZyb20gXCIuLi9yYXdfdHlwZXMvc2NydXRpbnNcIlxuaW1wb3J0IHsgQ29udmVydCBhcyBRdWVzdGlvbnNSYXdDb252ZXJ0IH0gZnJvbSBcIi4uL3Jhd190eXBlcy9xdWVzdGlvbnNcIlxuaW1wb3J0IHsgQ29udmVydCBhcyBDb21wdGVzUmVuZHVzUmF3Q29udmVydCB9IGZyb20gXCIuLi9yYXdfdHlwZXMvZGViYXRzXCJcbmltcG9ydCB7XG4gIGNsb25lT3B0aW9uLFxuICBjb21taXRPcHRpb24sXG4gIGNhdGVnb3JpZXNPcHRpb24sXG4gIGxlZ2lzbGF0dXJlT3B0aW9uLFxuICByZW1vdGVPcHRpb24sXG4gIHNpbGVudE9wdGlvbixcbiAgdmVyYm9zZU9wdGlvbixcbiAgZGF0YURpckRlZmF1bHRPcHRpb24sXG4gIHB1bGxPcHRpb24sXG59IGZyb20gXCIuL3NoYXJlZC9jbGlfaGVscGVyc1wiXG5cbmZ1bmN0aW9uIHBhcnNlQXJncyhhcmd2OiBzdHJpbmdbXSk6IGFueSB7XG4gIGNvbnN0IG9wdGlvbnNEZWZpbml0aW9ucyA9IFtcbiAgICBjbG9uZU9wdGlvbixcbiAgICBjb21taXRPcHRpb24sXG4gICAgY2F0ZWdvcmllc09wdGlvbixcbiAgICBsZWdpc2xhdHVyZU9wdGlvbixcbiAgICByZW1vdGVPcHRpb24sXG4gICAgc2lsZW50T3B0aW9uLFxuICAgIHZlcmJvc2VPcHRpb24sXG4gICAgZGF0YURpckRlZmF1bHRPcHRpb24sXG4gICAgcHVsbE9wdGlvbixcbiAgICB7XG4gICAgICBhbGlhczogXCJWXCIsXG4gICAgICBoZWxwOiBcImRvbid0IHZhbGlkYXRlIHJhdyBkYXRhXCIsXG4gICAgICBuYW1lOiBcIm5vLXZhbGlkYXRlLXJhd1wiLFxuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICB9LFxuICBdXG4gIGNvbnN0IG9wdGlvbnMgPSBjb21tYW5kTGluZUFyZ3Mob3B0aW9uc0RlZmluaXRpb25zLCB7XG4gICAgYXJndjogYXJndixcbiAgfSlcbiAgcmV0dXJuIG9wdGlvbnNcbn1cblxuZnVuY3Rpb24gY2xlYXJEaXJlY3RvcnkoZGlyUGF0aDogc3RyaW5nKTogdm9pZCB7XG4gIGZzLmVuc3VyZURpclN5bmMoZGlyUGF0aClcbiAgZm9yIChjb25zdCBmaWxlbmFtZSBvZiBmcy5yZWFkZGlyU3luYyhkaXJQYXRoKSkge1xuICAgIGlmICghZmlsZW5hbWUuc3RhcnRzV2l0aChcIi5cIikpIHtcbiAgICAgIGZzLnJlbW92ZVN5bmMocGF0aC5qb2luKGRpclBhdGgsIGZpbGVuYW1lKSlcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gY2xvbmVHaXQoXG4gIGdpdEdyb3VwVXJsOiBzdHJpbmcgfCB1bmRlZmluZWQsXG4gIGRhdGFzZXROYW1lOiBzdHJpbmcsXG4gIGRhdGFEaXI6IHN0cmluZyxcbik6IHZvaWQge1xuICBnaXQuY2xvbmUoZ2l0R3JvdXBVcmwsIGRhdGFzZXROYW1lLCBkYXRhRGlyKVxufVxuXG5mdW5jdGlvbiByZW9yZ2FuaXplRGF0YShvcHRpb25zOiBhbnkpOiBudW1iZXIge1xuICBjb25zdCBkYXRhRGlyID0gb3B0aW9ucy5kYXRhRGlyXG4gIERhdGUucHJvdG90eXBlLnRvSlNPTiA9IHBhdGNoZWREYXRlVG9Kc29uXG4gIGxldCBleGl0Q29kZSA9IG9wdGlvbnMuY29tbWl0ID8gMTAgOiAwXG4gIGNvbnN0IGdpdEdyb3VwVXJsID0gb3B0aW9ucy5jbG9uZT8udHJpbSgpLnJlcGxhY2UoL1xcLyskLywgXCJcIilcbiAgY29uc3QgdmFsaWRhdGVSYXdEYXRhID0gIW9wdGlvbnNbXCJuby12YWxpZGF0ZS1yYXdcIl1cbiAgY29uc3QgZW5hYmxlZERhdGFzZXRzID0gZ2V0RW5hYmxlZERhdGFzZXRzKG9wdGlvbnMuY2F0ZWdvcmllcylcbiAgbGV0IGNob3NlbkRhdGFzZXRzID0gZmlsdGVyQnlMZWdpc2xhdHVyZShkYXRhc2V0cywgb3B0aW9ucy5sZWdpc2xhdHVyZSlcblxuICBmdW5jdGlvbiBjb21taXRHaXQoZGF0YXNldFJlb3JnYW5pemVkRGlyOiBzdHJpbmcsIG9wdGlvbnM6IGFueSk6IHZvaWQge1xuICAgIGlmIChvcHRpb25zLmNvbW1pdCkge1xuICAgICAgY29uc3QgZXJyb3JDb2RlID0gZ2l0LmNvbW1pdEFuZFB1c2goXG4gICAgICAgIGRhdGFzZXRSZW9yZ2FuaXplZERpcixcbiAgICAgICAgXCJOb3V2ZWxsZSBtb2lzc29uXCIsXG4gICAgICAgIG9wdGlvbnMucmVtb3RlLFxuICAgICAgKVxuICAgICAgaWYgKFxuICAgICAgICAoZXhpdENvZGUgPT09IDEwICYmIGVycm9yQ29kZSAhPT0gMTApIHx8XG4gICAgICAgIChleGl0Q29kZSA9PT0gMCAmJiBlcnJvckNvZGUgIT09IDAgJiYgZXJyb3JDb2RlICE9PSAxMClcbiAgICAgICkge1xuICAgICAgICBleGl0Q29kZSA9IGVycm9yQ29kZVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmIChlbmFibGVkRGF0YXNldHMgJiBFbmFibGVkRGF0YXNldHMuQWN0ZXVyc0V0T3JnYW5lcykge1xuICAgIGZvciAoY29uc3QgZGF0YXNldCBvZiBjaG9zZW5EYXRhc2V0cy5hY3RldXJzRXRPcmdhbmVzKSB7XG4gICAgICBjb25zdCBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoOiBzdHJpbmcgPSBwYXRoLmpvaW4oXG4gICAgICAgIGRhdGFEaXIsXG4gICAgICAgIGRhdGFzZXQuZmlsZW5hbWUsXG4gICAgICApXG4gICAgICBpZiAoIW9wdGlvbnMuc2lsZW50KSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBSZW9yZ2FuaXppbmcgJHtvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRofWApXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGRhdGFzZXROYW1lID0gcGF0aC5iYXNlbmFtZShcbiAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgXCIuanNvblwiLFxuICAgICAgKVxuICAgICAgY2xvbmVHaXQoZ2l0R3JvdXBVcmwsIGRhdGFzZXROYW1lLCBkYXRhRGlyKVxuXG4gICAgICBjb25zdCBkYXRhc2V0UmVvcmdhbml6ZWREaXIgPSBwYXRoLmpvaW4oZGF0YURpciwgZGF0YXNldE5hbWUpXG4gICAgICBpZiAob3B0aW9ucy5wdWxsKSB7XG4gICAgICAgIGdpdC5yZXNldEFuZFB1bGwoZGF0YXNldFJlb3JnYW5pemVkRGlyKVxuICAgICAgfVxuICAgICAgY2xlYXJEaXJlY3RvcnkoZGF0YXNldFJlb3JnYW5pemVkRGlyKVxuXG4gICAgICBjb25zdCBhY3RldXJzUmVvcmdhbml6ZWREaXIgPSBwYXRoLmpvaW4oZGF0YXNldFJlb3JnYW5pemVkRGlyLCBcImFjdGV1cnNcIilcbiAgICAgIGZzLm1rZGlyU3luYyhhY3RldXJzUmVvcmdhbml6ZWREaXIpXG4gICAgICBjb25zdCBvcmdhbmVzUmVvcmdhbml6ZWREaXIgPSBwYXRoLmpvaW4oZGF0YXNldFJlb3JnYW5pemVkRGlyLCBcIm9yZ2FuZXNcIilcbiAgICAgIGZzLm1rZGlyU3luYyhvcmdhbmVzUmVvcmdhbml6ZWREaXIpXG5cbiAgICAgIHN3aXRjaCAoZGF0YXNldC5zdHJ1Y3R1cmUpIHtcbiAgICAgICAgY2FzZSBEYXRhc2V0U3RydWN0dXJlLlNpbmdsZUZpbGU6XG4gICAgICAgICAge1xuICAgICAgICAgICAgY29uc3Qgb3JpZ2luYWxKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoXG4gICAgICAgICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBjb25zdCBvcmlnaW5hbERhdGE6IGFueSA9IHZhbGlkYXRlUmF3RGF0YVxuICAgICAgICAgICAgICA/IEFjdGV1cnNFdE9yZ2FuZXNSYXdDb252ZXJ0LnRvQWN0ZXVyc0V0T3JnYW5lcyhvcmlnaW5hbEpzb24pXG4gICAgICAgICAgICAgIDogSlNPTi5wYXJzZShvcmlnaW5hbEpzb24pXG5cbiAgICAgICAgICAgIGZvciAoY29uc3QgYWN0ZXVyIG9mIG9yaWdpbmFsRGF0YS5leHBvcnQuYWN0ZXVycy5hY3RldXIpIHtcbiAgICAgICAgICAgICAgY29uc3QgcmVvcmdhbml6ZWRKc29uRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICAgICAgICAgICAgICBhY3RldXJzUmVvcmdhbml6ZWREaXIsXG4gICAgICAgICAgICAgICAgYWN0ZXVyLnVpZFtcIiN0ZXh0XCJdICsgXCIuanNvblwiLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIGZzLndyaXRlRmlsZVN5bmMoXG4gICAgICAgICAgICAgICAgcmVvcmdhbml6ZWRKc29uRmlsZVBhdGgsXG4gICAgICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkoYWN0ZXVyLCBudWxsLCAyKSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IG9yZ2FuZSBvZiBvcmlnaW5hbERhdGEuZXhwb3J0Lm9yZ2FuZXMub3JnYW5lKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHJlb3JnYW5pemVkSnNvbkZpbGVQYXRoOiBzdHJpbmcgPSBwYXRoLmpvaW4oXG4gICAgICAgICAgICAgICAgb3JnYW5lc1Jlb3JnYW5pemVkRGlyLFxuICAgICAgICAgICAgICAgIG9yZ2FuZS51aWQgKyBcIi5qc29uXCIsXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgZnMud3JpdGVGaWxlU3luYyhcbiAgICAgICAgICAgICAgICByZW9yZ2FuaXplZEpzb25GaWxlUGF0aCxcbiAgICAgICAgICAgICAgICBKU09OLnN0cmluZ2lmeShvcmdhbmUsIG51bGwsIDIpLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgRGF0YXNldFN0cnVjdHVyZS5TZWdtZW50ZWRGaWxlczpcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjb25zdCBkZXBvcnRzQnlBY3RldXJVaWQ6IHtcbiAgICAgICAgICAgICAgW2FjdGV1clVpZDogc3RyaW5nXTogeyB1aWQ6IHN0cmluZyB9W11cbiAgICAgICAgICAgIH0gPSB7fVxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICBmcy5leGlzdHNTeW5jKFxuICAgICAgICAgICAgICAgIHBhdGguam9pbihvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLCBcImRlcG9ydFwiKSxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIGZvciAoY29uc3QgZGVwb3J0U3BsaXRQYXRoIG9mIHdhbGtEaXIoXG4gICAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICAgICBbXCJkZXBvcnRcIl0sXG4gICAgICAgICAgICAgICkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBkZXBvcnRGaWxlbmFtZSA9XG4gICAgICAgICAgICAgICAgICBkZXBvcnRTcGxpdFBhdGhbZGVwb3J0U3BsaXRQYXRoLmxlbmd0aCAtIDFdXG4gICAgICAgICAgICAgICAgaWYgKCFkZXBvcnRGaWxlbmFtZS5lbmRzV2l0aChcIi5qc29uXCIpKSB7XG4gICAgICAgICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBkZXBvcnRPcmlnaW5hbEZpbGVQYXRoID0gcGF0aC5qb2luKFxuICAgICAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICAgICAgIC4uLmRlcG9ydFNwbGl0UGF0aCxcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMudmVyYm9zZSkge1xuICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICAgICAgICAgIGAgIExvYWRpbmcgXCJkZXBvcnRcIiBmaWxlOiAke2RlcG9ydE9yaWdpbmFsRmlsZVBhdGh94oCmYCxcbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgZGVwb3J0T3JpZ2luYWxKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoXG4gICAgICAgICAgICAgICAgICBkZXBvcnRPcmlnaW5hbEZpbGVQYXRoLFxuICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICBjb25zdCBkZXBvcnRPcmlnaW5hbDogYW55ID0gdmFsaWRhdGVSYXdEYXRhXG4gICAgICAgICAgICAgICAgICA/IEFjdGV1cnNFdE9yZ2FuZXNSYXdDb252ZXJ0LnRvRGVwb3J0KGRlcG9ydE9yaWdpbmFsSnNvbilcbiAgICAgICAgICAgICAgICAgIDogSlNPTi5wYXJzZShkZXBvcnRPcmlnaW5hbEpzb24pXG4gICAgICAgICAgICAgICAgY29uc3QgZGVwb3J0ID0gZGVwb3J0T3JpZ2luYWwuZGVwb3J0XG4gICAgICAgICAgICAgICAgbGV0IGRlcG9ydHMgPSBkZXBvcnRzQnlBY3RldXJVaWRbZGVwb3J0LmFjdGV1clJlZl1cbiAgICAgICAgICAgICAgICBpZiAoZGVwb3J0cyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICBkZXBvcnRzID0gZGVwb3J0c0J5QWN0ZXVyVWlkW2RlcG9ydC5hY3RldXJSZWZdID0gW11cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZGVwb3J0cy5wdXNoKGRlcG9ydClcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGZvciAoY29uc3QgZGVwb3J0cyBvZiBPYmplY3QudmFsdWVzKGRlcG9ydHNCeUFjdGV1clVpZCkpIHtcbiAgICAgICAgICAgICAgICBkZXBvcnRzLnNvcnQoKGEsIGIpID0+XG4gICAgICAgICAgICAgICAgICBhLnVpZC5sZW5ndGggPT09IGIudWlkLmxlbmd0aFxuICAgICAgICAgICAgICAgICAgICA/IGEudWlkLmxvY2FsZUNvbXBhcmUoYi51aWQpXG4gICAgICAgICAgICAgICAgICAgIDogYS51aWQubGVuZ3RoIC0gYi51aWQubGVuZ3RoLFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBtYW5kYXRzQnlBY3RldXJVaWQ6IHtcbiAgICAgICAgICAgICAgW2FjdGV1clVpZDogc3RyaW5nXTogeyB1aWQ6IHN0cmluZyB9W11cbiAgICAgICAgICAgIH0gPSB7fVxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICBmcy5leGlzdHNTeW5jKFxuICAgICAgICAgICAgICAgIHBhdGguam9pbihvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLCBcIm1hbmRhdFwiKSxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIGZvciAoY29uc3QgbWFuZGF0U3BsaXRQYXRoIG9mIHdhbGtEaXIoXG4gICAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICAgICBbXCJtYW5kYXRcIl0sXG4gICAgICAgICAgICAgICkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBtYW5kYXRGaWxlbmFtZSA9XG4gICAgICAgICAgICAgICAgICBtYW5kYXRTcGxpdFBhdGhbbWFuZGF0U3BsaXRQYXRoLmxlbmd0aCAtIDFdXG4gICAgICAgICAgICAgICAgaWYgKCFtYW5kYXRGaWxlbmFtZS5lbmRzV2l0aChcIi5qc29uXCIpKSB7XG4gICAgICAgICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBtYW5kYXRPcmlnaW5hbEZpbGVQYXRoID0gcGF0aC5qb2luKFxuICAgICAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICAgICAgIC4uLm1hbmRhdFNwbGl0UGF0aCxcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMudmVyYm9zZSkge1xuICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICAgICAgICAgIGAgIExvYWRpbmcgXCJtYW5kYXRcIiBmaWxlOiAke21hbmRhdE9yaWdpbmFsRmlsZVBhdGh94oCmYCxcbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgbWFuZGF0T3JpZ2luYWxKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoXG4gICAgICAgICAgICAgICAgICBtYW5kYXRPcmlnaW5hbEZpbGVQYXRoLFxuICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICBjb25zdCBtYW5kYXRPcmlnaW5hbDogYW55ID0gdmFsaWRhdGVSYXdEYXRhXG4gICAgICAgICAgICAgICAgICA/IEFjdGV1cnNFdE9yZ2FuZXNSYXdDb252ZXJ0LnRvTWFuZGF0V3JhcHBlcihcbiAgICAgICAgICAgICAgICAgICAgICBtYW5kYXRPcmlnaW5hbEpzb24sXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgIDogSlNPTi5wYXJzZShtYW5kYXRPcmlnaW5hbEpzb24pXG4gICAgICAgICAgICAgICAgY29uc3QgbWFuZGF0ID0gbWFuZGF0T3JpZ2luYWwubWFuZGF0XG4gICAgICAgICAgICAgICAgbGV0IG1hbmRhdHMgPSBtYW5kYXRzQnlBY3RldXJVaWRbbWFuZGF0LmFjdGV1clJlZl1cbiAgICAgICAgICAgICAgICBpZiAobWFuZGF0cyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICBtYW5kYXRzID0gbWFuZGF0c0J5QWN0ZXVyVWlkW21hbmRhdC5hY3RldXJSZWZdID0gW11cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbWFuZGF0cy5wdXNoKG1hbmRhdClcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGZvciAoY29uc3QgbWFuZGF0cyBvZiBPYmplY3QudmFsdWVzKG1hbmRhdHNCeUFjdGV1clVpZCkpIHtcbiAgICAgICAgICAgICAgICBtYW5kYXRzLnNvcnQoKGEsIGIpID0+XG4gICAgICAgICAgICAgICAgICBhLnVpZC5sZW5ndGggPT09IGIudWlkLmxlbmd0aFxuICAgICAgICAgICAgICAgICAgICA/IGEudWlkLmxvY2FsZUNvbXBhcmUoYi51aWQpXG4gICAgICAgICAgICAgICAgICAgIDogYS51aWQubGVuZ3RoIC0gYi51aWQubGVuZ3RoLFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGFjdGV1clNwbGl0UGF0aCBvZiB3YWxrRGlyKFxuICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICAgICAgICBbXCJhY3RldXJcIl0sXG4gICAgICAgICAgICApKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGFjdGV1ckZpbGVuYW1lID0gYWN0ZXVyU3BsaXRQYXRoW2FjdGV1clNwbGl0UGF0aC5sZW5ndGggLSAxXVxuICAgICAgICAgICAgICBpZiAoIWFjdGV1ckZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnN0IGFjdGV1ck9yaWdpbmFsRmlsZVBhdGggPSBwYXRoLmpvaW4oXG4gICAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICAgICAuLi5hY3RldXJTcGxpdFBhdGgsXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgaWYgKG9wdGlvbnMudmVyYm9zZSkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgICAgICAgYCAgUmVvcmdhbml6aW5nIFwiYWN0ZXVyXCIgZmlsZTogJHthY3RldXJPcmlnaW5hbEZpbGVQYXRofeKApmAsXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnN0IGFjdGV1ck9yaWdpbmFsSnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKFxuICAgICAgICAgICAgICAgIGFjdGV1ck9yaWdpbmFsRmlsZVBhdGgsXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgY29uc3QgYWN0ZXVyT3JpZ2luYWw6IGFueSA9IHZhbGlkYXRlUmF3RGF0YVxuICAgICAgICAgICAgICAgID8gQWN0ZXVyc0V0T3JnYW5lc1Jhd0NvbnZlcnQudG9BY3RldXIoYWN0ZXVyT3JpZ2luYWxKc29uKVxuICAgICAgICAgICAgICAgIDogSlNPTi5wYXJzZShhY3RldXJPcmlnaW5hbEpzb24pXG4gICAgICAgICAgICAgIGNvbnN0IGFjdGV1ciA9IGFjdGV1ck9yaWdpbmFsLmFjdGV1clxuICAgICAgICAgICAgICBjb25zdCBhY3RldXJVaWQgPSBhY3RldXIudWlkW1wiI3RleHRcIl1cbiAgICAgICAgICAgICAgY29uc3QgZGVwb3J0cyA9IGRlcG9ydHNCeUFjdGV1clVpZFthY3RldXJVaWRdXG4gICAgICAgICAgICAgIGlmIChkZXBvcnRzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoYWN0ZXVyLmRlcG9ydHMsIHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICBhY3RldXIuZGVwb3J0cyA9IHsgZGVwb3J0OiBkZXBvcnRzIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjb25zdCBtYW5kYXRzID0gbWFuZGF0c0J5QWN0ZXVyVWlkW2FjdGV1clVpZF1cbiAgICAgICAgICAgICAgaWYgKG1hbmRhdHMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChhY3RldXIubWFuZGF0cywgdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgIGFjdGV1ci5tYW5kYXRzID0geyBtYW5kYXQ6IG1hbmRhdHMgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnN0IGFjdGV1clJlb3JnYW5pemVkSnNvbkZpbGVQYXRoOiBzdHJpbmcgPSBwYXRoLmpvaW4oXG4gICAgICAgICAgICAgICAgYWN0ZXVyc1Jlb3JnYW5pemVkRGlyLFxuICAgICAgICAgICAgICAgIGFjdGV1clVpZCArIFwiLmpzb25cIixcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBmcy53cml0ZUZpbGVTeW5jKFxuICAgICAgICAgICAgICAgIGFjdGV1clJlb3JnYW5pemVkSnNvbkZpbGVQYXRoLFxuICAgICAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KGFjdGV1ciwgbnVsbCwgMiksXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9yIChjb25zdCBvcmdhbmVTcGxpdFBhdGggb2Ygd2Fsa0RpcihcbiAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICAgW1wib3JnYW5lXCJdLFxuICAgICAgICAgICAgKSkge1xuICAgICAgICAgICAgICBjb25zdCBvcmdhbmVGaWxlbmFtZSA9IG9yZ2FuZVNwbGl0UGF0aFtvcmdhbmVTcGxpdFBhdGgubGVuZ3RoIC0gMV1cbiAgICAgICAgICAgICAgaWYgKCFvcmdhbmVGaWxlbmFtZS5lbmRzV2l0aChcIi5qc29uXCIpKSB7XG4gICAgICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjb25zdCBvcmdhbmVPcmlnaW5hbEZpbGVQYXRoID0gcGF0aC5qb2luKFxuICAgICAgICAgICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgICAgICAgICAgLi4ub3JnYW5lU3BsaXRQYXRoLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIGlmIChvcHRpb25zLnZlcmJvc2UpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgICAgICAgIGAgIFJlb3JnYW5pemluZyBcIm9yZ2FuZVwiIGZpbGU6ICR7b3JnYW5lT3JpZ2luYWxGaWxlUGF0aH3igKZgLFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjb25zdCBvcmdhbmVPcmlnaW5hbEpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhcbiAgICAgICAgICAgICAgICBvcmdhbmVPcmlnaW5hbEZpbGVQYXRoLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIGNvbnN0IG9yZ2FuZU9yaWdpbmFsOiBhbnkgPSB2YWxpZGF0ZVJhd0RhdGFcbiAgICAgICAgICAgICAgICA/IEFjdGV1cnNFdE9yZ2FuZXNSYXdDb252ZXJ0LnRvT3JnYW5lKG9yZ2FuZU9yaWdpbmFsSnNvbilcbiAgICAgICAgICAgICAgICA6IEpTT04ucGFyc2Uob3JnYW5lT3JpZ2luYWxKc29uKVxuICAgICAgICAgICAgICBjb25zdCBvcmdhbmUgPSBvcmdhbmVPcmlnaW5hbC5vcmdhbmVcbiAgICAgICAgICAgICAgY29uc3Qgb3JnYW5lUmVvcmdhbml6ZWRKc29uRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICAgICAgICAgICAgICBvcmdhbmVzUmVvcmdhbml6ZWREaXIsXG4gICAgICAgICAgICAgICAgb3JnYW5lLnVpZCArIFwiLmpzb25cIixcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBmcy53cml0ZUZpbGVTeW5jKFxuICAgICAgICAgICAgICAgIG9yZ2FuZVJlb3JnYW5pemVkSnNvbkZpbGVQYXRoLFxuICAgICAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KG9yZ2FuZSwgbnVsbCwgMiksXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWtcbiAgICAgIH1cblxuICAgICAgY29tbWl0R2l0KGRhdGFzZXRSZW9yZ2FuaXplZERpciwgb3B0aW9ucylcbiAgICB9XG4gIH1cblxuICBpZiAoZW5hYmxlZERhdGFzZXRzICYgRW5hYmxlZERhdGFzZXRzLkFnZW5kYXMpIHtcbiAgICBmb3IgKGNvbnN0IGRhdGFzZXQgb2YgY2hvc2VuRGF0YXNldHMuYWdlbmRhcykge1xuICAgICAgY29uc3Qgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aDogc3RyaW5nID0gcGF0aC5qb2luKFxuICAgICAgICBkYXRhRGlyLFxuICAgICAgICBkYXRhc2V0LmZpbGVuYW1lLFxuICAgICAgKVxuICAgICAgaWYgKCFvcHRpb25zLnNpbGVudCkge1xuICAgICAgICBjb25zb2xlLmxvZyhgUmVvcmdhbml6aW5nICR7b3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aH1gKVxuICAgICAgfVxuXG4gICAgICBjb25zdCBkYXRhc2V0TmFtZSA9IHBhdGguYmFzZW5hbWUoXG4gICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgIFwiLmpzb25cIixcbiAgICAgIClcbiAgICAgIGNsb25lR2l0KGdpdEdyb3VwVXJsLCBkYXRhc2V0TmFtZSwgZGF0YURpcilcblxuICAgICAgY29uc3QgZGF0YXNldFJlb3JnYW5pemVkRGlyID0gcGF0aC5qb2luKGRhdGFEaXIsIGRhdGFzZXROYW1lKVxuICAgICAgY2xlYXJEaXJlY3RvcnkoZGF0YXNldFJlb3JnYW5pemVkRGlyKVxuXG4gICAgICBzd2l0Y2ggKGRhdGFzZXQuc3RydWN0dXJlKSB7XG4gICAgICAgIGNhc2UgRGF0YXNldFN0cnVjdHVyZS5TaW5nbGVGaWxlOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNvbnN0IG9yaWdpbmFsSnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKFxuICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgY29uc3Qgb3JpZ2luYWxEYXRhOiBhbnkgPSB2YWxpZGF0ZVJhd0RhdGFcbiAgICAgICAgICAgICAgPyBBZ2VuZGFzUmF3Q29udmVydC50b0FnZW5kYXMob3JpZ2luYWxKc29uKVxuICAgICAgICAgICAgICA6IEpTT04ucGFyc2Uob3JpZ2luYWxKc29uKVxuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IHJldW5pb24gb2Ygb3JpZ2luYWxEYXRhLnJldW5pb25zLnJldW5pb24pIHtcbiAgICAgICAgICAgICAgd3JpdGVSZW9yZ2FuaXplZEpzb24oXG4gICAgICAgICAgICAgICAgZGF0YXNldFJlb3JnYW5pemVkRGlyLFxuICAgICAgICAgICAgICAgIHJldW5pb24sXG4gICAgICAgICAgICAgICAgcGF0aEZyb21SZXVuaW9uVWlkLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgRGF0YXNldFN0cnVjdHVyZS5TZWdtZW50ZWRGaWxlczpcbiAgICAgICAgICB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHJldW5pb25TcGxpdFBhdGggb2Ygd2Fsa0RpcihcbiAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICAgW1wicmV1bmlvblwiXSxcbiAgICAgICAgICAgICkpIHtcbiAgICAgICAgICAgICAgY29uc3QgcmV1bmlvbkZpbGVuYW1lID1cbiAgICAgICAgICAgICAgICByZXVuaW9uU3BsaXRQYXRoW3JldW5pb25TcGxpdFBhdGgubGVuZ3RoIC0gMV1cbiAgICAgICAgICAgICAgaWYgKCFyZXVuaW9uRmlsZW5hbWUuZW5kc1dpdGgoXCIuanNvblwiKSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc3QgcmV1bmlvbk9yaWdpbmFsRmlsZVBhdGggPSBwYXRoLmpvaW4oXG4gICAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICAgICAuLi5yZXVuaW9uU3BsaXRQYXRoLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIGlmIChvcHRpb25zLnZlcmJvc2UpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgICAgICAgIGAgIFJlb3JnYW5pemluZyBcInJldW5pb25cIiBmaWxlOiAke3JldW5pb25PcmlnaW5hbEZpbGVQYXRofeKApmAsXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnN0IHJldW5pb25PcmlnaW5hbEpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhcbiAgICAgICAgICAgICAgICByZXVuaW9uT3JpZ2luYWxGaWxlUGF0aCxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBjb25zdCByZXVuaW9uT3JpZ2luYWw6IGFueSA9IHZhbGlkYXRlUmF3RGF0YVxuICAgICAgICAgICAgICAgID8gQWdlbmRhc1Jhd0NvbnZlcnQudG9SZXVuaW9uKHJldW5pb25PcmlnaW5hbEpzb24pXG4gICAgICAgICAgICAgICAgOiBKU09OLnBhcnNlKHJldW5pb25PcmlnaW5hbEpzb24pXG4gICAgICAgICAgICAgIGNvbnN0IHJldW5pb24gPSByZXVuaW9uT3JpZ2luYWwucmV1bmlvblxuICAgICAgICAgICAgICB3cml0ZVJlb3JnYW5pemVkSnNvbihcbiAgICAgICAgICAgICAgICBkYXRhc2V0UmVvcmdhbml6ZWREaXIsXG4gICAgICAgICAgICAgICAgcmV1bmlvbixcbiAgICAgICAgICAgICAgICBwYXRoRnJvbVJldW5pb25VaWQsXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWtcbiAgICAgIH1cblxuICAgICAgY29tbWl0R2l0KGRhdGFzZXRSZW9yZ2FuaXplZERpciwgb3B0aW9ucylcbiAgICB9XG4gIH1cblxuICBpZiAoZW5hYmxlZERhdGFzZXRzICYgRW5hYmxlZERhdGFzZXRzLkFtZW5kZW1lbnRzKSB7XG4gICAgZm9yIChjb25zdCBkYXRhc2V0IG9mIGNob3NlbkRhdGFzZXRzLmFtZW5kZW1lbnRzKSB7XG4gICAgICBjb25zdCBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoOiBzdHJpbmcgPSBwYXRoLmpvaW4oXG4gICAgICAgIGRhdGFEaXIsXG4gICAgICAgIGRhdGFzZXQuZmlsZW5hbWUsXG4gICAgICApXG4gICAgICBpZiAoIW9wdGlvbnMuc2lsZW50KSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBSZW9yZ2FuaXppbmcgJHtvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRofWApXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGRhdGFzZXROYW1lID0gcGF0aC5iYXNlbmFtZShcbiAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgXCIuanNvblwiLFxuICAgICAgKVxuICAgICAgY2xvbmVHaXQoZ2l0R3JvdXBVcmwsIGRhdGFzZXROYW1lLCBkYXRhRGlyKVxuXG4gICAgICBjb25zdCBkYXRhc2V0UmVvcmdhbml6ZWREaXIgPSBwYXRoLmpvaW4oZGF0YURpciwgZGF0YXNldE5hbWUpXG4gICAgICBjbGVhckRpcmVjdG9yeShkYXRhc2V0UmVvcmdhbml6ZWREaXIpXG5cbiAgICAgIHN3aXRjaCAoZGF0YXNldC5zdHJ1Y3R1cmUpIHtcbiAgICAgICAgY2FzZSBEYXRhc2V0U3RydWN0dXJlLlNpbmdsZUZpbGU6XG4gICAgICAgICAge1xuICAgICAgICAgICAgY29uc3Qgb3JpZ2luYWxKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoXG4gICAgICAgICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBjb25zdCBvcmlnaW5hbERhdGE6IGFueSA9IHZhbGlkYXRlUmF3RGF0YVxuICAgICAgICAgICAgICA/IEFtZW5kZW1lbnRzUmF3Q29udmVydC50b0FtZW5kZW1lbnRzKG9yaWdpbmFsSnNvbilcbiAgICAgICAgICAgICAgOiBKU09OLnBhcnNlKG9yaWdpbmFsSnNvbilcblxuICAgICAgICAgICAgZm9yIChjb25zdCB0ZXh0ZUxlZ2lzbGF0aWYgb2Ygb3JpZ2luYWxEYXRhLnRleHRlc0V0QW1lbmRlbWVudHNcbiAgICAgICAgICAgICAgLnRleHRlbGVnKSB7XG4gICAgICAgICAgICAgIGZvciAoY29uc3QgYW1lbmRlbWVudCBvZiB0ZXh0ZUxlZ2lzbGF0aWYuYW1lbmRlbWVudHMpIHtcbiAgICAgICAgICAgICAgICB3cml0ZUFtZW5kZW1lbnRSZW9yZ2FuaXplZEpzb24oXG4gICAgICAgICAgICAgICAgICBkYXRhc2V0UmVvcmdhbml6ZWREaXIsXG4gICAgICAgICAgICAgICAgICBhbWVuZGVtZW50LFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIERhdGFzZXRTdHJ1Y3R1cmUuU2VnbWVudGVkRmlsZXM6XG4gICAgICAgICAge1xuICAgICAgICAgICAgZm9yIChjb25zdCBhbWVuZGVtZW50U3BsaXRQYXRoIG9mIHdhbGtEaXIoXG4gICAgICAgICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgICAgICApKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGFtZW5kZW1lbnRGaWxlbmFtZSA9XG4gICAgICAgICAgICAgICAgYW1lbmRlbWVudFNwbGl0UGF0aFthbWVuZGVtZW50U3BsaXRQYXRoLmxlbmd0aCAtIDFdXG4gICAgICAgICAgICAgIGlmICghYW1lbmRlbWVudEZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnN0IGFtZW5kZW1lbnRPcmlnaW5hbEZpbGVQYXRoID0gcGF0aC5qb2luKFxuICAgICAgICAgICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgICAgICAgICAgLi4uYW1lbmRlbWVudFNwbGl0UGF0aCxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBpZiAob3B0aW9ucy52ZXJib3NlKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICAgICAgICBgICBSZW9yZ2FuaXppbmcgXCJhbWVuZGVtZW50XCIgZmlsZTogJHthbWVuZGVtZW50T3JpZ2luYWxGaWxlUGF0aH3igKZgLFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjb25zdCBhbWVuZGVtZW50T3JpZ2luYWxKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoXG4gICAgICAgICAgICAgICAgYW1lbmRlbWVudE9yaWdpbmFsRmlsZVBhdGgsXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgY29uc3QgYW1lbmRlbWVudE9yaWdpbmFsOiBhbnkgPSB2YWxpZGF0ZVJhd0RhdGFcbiAgICAgICAgICAgICAgICA/IEFtZW5kZW1lbnRzUmF3Q29udmVydC50b0FtZW5kZW1lbnRXcmFwcGVyKFxuICAgICAgICAgICAgICAgICAgICBhbWVuZGVtZW50T3JpZ2luYWxKc29uLFxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIDogSlNPTi5wYXJzZShhbWVuZGVtZW50T3JpZ2luYWxKc29uKVxuICAgICAgICAgICAgICBjb25zdCBhbWVuZGVtZW50ID0gYW1lbmRlbWVudE9yaWdpbmFsLmFtZW5kZW1lbnRcbiAgICAgICAgICAgICAgd3JpdGVBbWVuZGVtZW50UmVvcmdhbml6ZWRKc29uKGRhdGFzZXRSZW9yZ2FuaXplZERpciwgYW1lbmRlbWVudClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWtcbiAgICAgIH1cblxuICAgICAgY29tbWl0R2l0KGRhdGFzZXRSZW9yZ2FuaXplZERpciwgb3B0aW9ucylcbiAgICB9XG4gIH1cblxuICBpZiAoZW5hYmxlZERhdGFzZXRzICYgRW5hYmxlZERhdGFzZXRzLkRvc3NpZXJzTGVnaXNsYXRpZnMpIHtcbiAgICBmb3IgKGNvbnN0IGRhdGFzZXQgb2YgY2hvc2VuRGF0YXNldHMuZG9zc2llcnNMZWdpc2xhdGlmcykge1xuICAgICAgY29uc3Qgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aDogc3RyaW5nID0gcGF0aC5qb2luKFxuICAgICAgICBkYXRhRGlyLFxuICAgICAgICBkYXRhc2V0LmZpbGVuYW1lLFxuICAgICAgKVxuICAgICAgaWYgKCFvcHRpb25zLnNpbGVudCkge1xuICAgICAgICBjb25zb2xlLmxvZyhgUmVvcmdhbml6aW5nICR7b3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aH1gKVxuICAgICAgfVxuXG4gICAgICBjb25zdCBkYXRhc2V0TmFtZSA9IHBhdGguYmFzZW5hbWUoXG4gICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgIFwiLmpzb25cIixcbiAgICAgIClcbiAgICAgIGNsb25lR2l0KGdpdEdyb3VwVXJsLCBkYXRhc2V0TmFtZSwgZGF0YURpcilcblxuICAgICAgY29uc3QgZGF0YXNldFJlb3JnYW5pemVkRGlyID0gcGF0aC5qb2luKGRhdGFEaXIsIGRhdGFzZXROYW1lKVxuICAgICAgY2xlYXJEaXJlY3RvcnkoZGF0YXNldFJlb3JnYW5pemVkRGlyKVxuXG4gICAgICBjb25zdCBkb2N1bWVudHNEaXIgPSBwYXRoLmpvaW4oZGF0YXNldFJlb3JnYW5pemVkRGlyLCBcImRvY3VtZW50c1wiKVxuICAgICAgZnMubWtkaXJTeW5jKGRvY3VtZW50c0RpcilcbiAgICAgIGNvbnN0IGRvc3NpZXJzRGlyID0gcGF0aC5qb2luKGRhdGFzZXRSZW9yZ2FuaXplZERpciwgXCJkb3NzaWVyc1wiKVxuICAgICAgZnMubWtkaXJTeW5jKGRvc3NpZXJzRGlyKVxuXG4gICAgICBzd2l0Y2ggKGRhdGFzZXQuc3RydWN0dXJlKSB7XG4gICAgICAgIGNhc2UgRGF0YXNldFN0cnVjdHVyZS5TaW5nbGVGaWxlOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNvbnN0IG9yaWdpbmFsSnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKFxuICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgY29uc3Qgb3JpZ2luYWxEYXRhOiBhbnkgPSB2YWxpZGF0ZVJhd0RhdGFcbiAgICAgICAgICAgICAgPyBEb3NzaWVyc0xlZ2lzbGF0aWZzUmF3Q29udmVydC50b0Rvc3NpZXJzTGVnaXNsYXRpZnMoXG4gICAgICAgICAgICAgICAgICBvcmlnaW5hbEpzb24sXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICA6IEpTT04ucGFyc2Uob3JpZ2luYWxKc29uKVxuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGRvY3VtZW50IG9mIG9yaWdpbmFsRGF0YS5leHBvcnQudGV4dGVzTGVnaXNsYXRpZnNcbiAgICAgICAgICAgICAgLmRvY3VtZW50KSB7XG4gICAgICAgICAgICAgIHdyaXRlUmVvcmdhbml6ZWRKc29uKGRvY3VtZW50c0RpciwgZG9jdW1lbnQsIHBhdGhGcm9tRG9jdW1lbnRVaWQpXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZvciAoY29uc3QgeyBkb3NzaWVyUGFybGVtZW50YWlyZSB9IG9mIG9yaWdpbmFsRGF0YS5leHBvcnRcbiAgICAgICAgICAgICAgLmRvc3NpZXJzTGVnaXNsYXRpZnMuZG9zc2llcikge1xuICAgICAgICAgICAgICB3cml0ZVJlb3JnYW5pemVkSnNvbihcbiAgICAgICAgICAgICAgICBkb3NzaWVyc0RpcixcbiAgICAgICAgICAgICAgICBkb3NzaWVyUGFybGVtZW50YWlyZSxcbiAgICAgICAgICAgICAgICBwYXRoRnJvbURvc3NpZXJQYXJsZW1lbnRhaXJlVWlkLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgRGF0YXNldFN0cnVjdHVyZS5TZWdtZW50ZWRGaWxlczpcbiAgICAgICAgICB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGRvY3VtZW50U3BsaXRQYXRoIG9mIHdhbGtEaXIoXG4gICAgICAgICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgICAgICAgIFtcImRvY3VtZW50XCJdLFxuICAgICAgICAgICAgKSkge1xuICAgICAgICAgICAgICBjb25zdCBkb2N1bWVudEZpbGVuYW1lID1cbiAgICAgICAgICAgICAgICBkb2N1bWVudFNwbGl0UGF0aFtkb2N1bWVudFNwbGl0UGF0aC5sZW5ndGggLSAxXVxuICAgICAgICAgICAgICBpZiAoIWRvY3VtZW50RmlsZW5hbWUuZW5kc1dpdGgoXCIuanNvblwiKSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc3QgZG9jdW1lbnRPcmlnaW5hbEZpbGVQYXRoID0gcGF0aC5qb2luKFxuICAgICAgICAgICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgICAgICAgICAgLi4uZG9jdW1lbnRTcGxpdFBhdGgsXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgaWYgKG9wdGlvbnMudmVyYm9zZSkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgICAgICAgYCAgUmVvcmdhbml6aW5nIFwiZG9jdW1lbnRcIiBmaWxlOiAke2RvY3VtZW50T3JpZ2luYWxGaWxlUGF0aH3igKZgLFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjb25zdCBkb2N1bWVudE9yaWdpbmFsSnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKFxuICAgICAgICAgICAgICAgIGRvY3VtZW50T3JpZ2luYWxGaWxlUGF0aCxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBjb25zdCBkb2N1bWVudE9yaWdpbmFsOiBhbnkgPSB2YWxpZGF0ZVJhd0RhdGFcbiAgICAgICAgICAgICAgICA/IERvc3NpZXJzTGVnaXNsYXRpZnNSYXdDb252ZXJ0LnRvRG9jdW1lbnQoZG9jdW1lbnRPcmlnaW5hbEpzb24pXG4gICAgICAgICAgICAgICAgOiBKU09OLnBhcnNlKGRvY3VtZW50T3JpZ2luYWxKc29uKVxuICAgICAgICAgICAgICBjb25zdCBkb2N1bWVudCA9IGRvY3VtZW50T3JpZ2luYWwuZG9jdW1lbnRcbiAgICAgICAgICAgICAgd3JpdGVSZW9yZ2FuaXplZEpzb24oZG9jdW1lbnRzRGlyLCBkb2N1bWVudCwgcGF0aEZyb21Eb2N1bWVudFVpZClcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9yIChjb25zdCBkb3NzaWVyUGFybGVtZW50YWlyZVNwbGl0UGF0aCBvZiB3YWxrRGlyKFxuICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICAgICAgICBbXCJkb3NzaWVyUGFybGVtZW50YWlyZVwiXSxcbiAgICAgICAgICAgICkpIHtcbiAgICAgICAgICAgICAgY29uc3QgZG9zc2llclBhcmxlbWVudGFpcmVGaWxlbmFtZSA9XG4gICAgICAgICAgICAgICAgZG9zc2llclBhcmxlbWVudGFpcmVTcGxpdFBhdGhbXG4gICAgICAgICAgICAgICAgICBkb3NzaWVyUGFybGVtZW50YWlyZVNwbGl0UGF0aC5sZW5ndGggLSAxXG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICBpZiAoIWRvc3NpZXJQYXJsZW1lbnRhaXJlRmlsZW5hbWUuZW5kc1dpdGgoXCIuanNvblwiKSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc3QgZG9zc2llclBhcmxlbWVudGFpcmVPcmlnaW5hbEZpbGVQYXRoID0gcGF0aC5qb2luKFxuICAgICAgICAgICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgICAgICAgICAgLi4uZG9zc2llclBhcmxlbWVudGFpcmVTcGxpdFBhdGgsXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgaWYgKG9wdGlvbnMudmVyYm9zZSkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgICAgICAgYCAgUmVvcmdhbml6aW5nIFwiZG9zc2llclBhcmxlbWVudGFpcmVcIiBmaWxlOiAke2Rvc3NpZXJQYXJsZW1lbnRhaXJlT3JpZ2luYWxGaWxlUGF0aH3igKZgLFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjb25zdCBkb3NzaWVyUGFybGVtZW50YWlyZU9yaWdpbmFsSnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKFxuICAgICAgICAgICAgICAgIGRvc3NpZXJQYXJsZW1lbnRhaXJlT3JpZ2luYWxGaWxlUGF0aCxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBjb25zdCBkb3NzaWVyUGFybGVtZW50YWlyZU9yaWdpbmFsOiBhbnkgPSB2YWxpZGF0ZVJhd0RhdGFcbiAgICAgICAgICAgICAgICA/IERvc3NpZXJzTGVnaXNsYXRpZnNSYXdDb252ZXJ0LnRvRG9zc2llclBhcmxlbWVudGFpcmUoXG4gICAgICAgICAgICAgICAgICAgIGRvc3NpZXJQYXJsZW1lbnRhaXJlT3JpZ2luYWxKc29uLFxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIDogSlNPTi5wYXJzZShkb3NzaWVyUGFybGVtZW50YWlyZU9yaWdpbmFsSnNvbilcbiAgICAgICAgICAgICAgY29uc3QgZG9zc2llclBhcmxlbWVudGFpcmUgPVxuICAgICAgICAgICAgICAgIGRvc3NpZXJQYXJsZW1lbnRhaXJlT3JpZ2luYWwuZG9zc2llclBhcmxlbWVudGFpcmVcbiAgICAgICAgICAgICAgd3JpdGVSZW9yZ2FuaXplZEpzb24oXG4gICAgICAgICAgICAgICAgZG9zc2llcnNEaXIsXG4gICAgICAgICAgICAgICAgZG9zc2llclBhcmxlbWVudGFpcmUsXG4gICAgICAgICAgICAgICAgcGF0aEZyb21Eb3NzaWVyUGFybGVtZW50YWlyZVVpZCxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVha1xuICAgICAgfVxuXG4gICAgICBjb21taXRHaXQoZGF0YXNldFJlb3JnYW5pemVkRGlyLCBvcHRpb25zKVxuICAgIH1cbiAgfVxuICBpZiAoZW5hYmxlZERhdGFzZXRzICYgRW5hYmxlZERhdGFzZXRzLlNjcnV0aW5zKSB7XG4gICAgZm9yIChsZXQgZGF0YXNldCBvZiBjaG9zZW5EYXRhc2V0cy5zY3J1dGlucykge1xuICAgICAgY29uc3Qgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aDogc3RyaW5nID0gcGF0aC5qb2luKFxuICAgICAgICBkYXRhRGlyLFxuICAgICAgICBkYXRhc2V0LmZpbGVuYW1lLFxuICAgICAgKVxuICAgICAgaWYgKCFvcHRpb25zLnNpbGVudCkge1xuICAgICAgICBjb25zb2xlLmxvZyhgUmVvcmdhbml6aW5nICR7b3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aH1gKVxuICAgICAgfVxuXG4gICAgICBjb25zdCBkYXRhc2V0TmFtZSA9IHBhdGguYmFzZW5hbWUoXG4gICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgIFwiLmpzb25cIixcbiAgICAgIClcbiAgICAgIGNsb25lR2l0KGdpdEdyb3VwVXJsLCBkYXRhc2V0TmFtZSwgZGF0YURpcilcblxuICAgICAgY29uc3QgZGF0YXNldFJlb3JnYW5pemVkRGlyID0gcGF0aC5qb2luKGRhdGFEaXIsIGRhdGFzZXROYW1lKVxuICAgICAgY2xlYXJEaXJlY3RvcnkoZGF0YXNldFJlb3JnYW5pemVkRGlyKVxuXG4gICAgICBzd2l0Y2ggKGRhdGFzZXQuc3RydWN0dXJlKSB7XG4gICAgICAgIGNhc2UgRGF0YXNldFN0cnVjdHVyZS5TaW5nbGVGaWxlOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNvbnN0IG9yaWdpbmFsSnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKFxuICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgY29uc3Qgb3JpZ2luYWxEYXRhOiBhbnkgPSB2YWxpZGF0ZVJhd0RhdGFcbiAgICAgICAgICAgICAgPyBTY3J1dGluc1Jhd0NvbnZlcnQudG9TY3J1dGlucyhvcmlnaW5hbEpzb24pXG4gICAgICAgICAgICAgIDogSlNPTi5wYXJzZShvcmlnaW5hbEpzb24pXG5cbiAgICAgICAgICAgIGZvciAoY29uc3Qgc2NydXRpbiBvZiBvcmlnaW5hbERhdGEuc2NydXRpbnMuc2NydXRpbikge1xuICAgICAgICAgICAgICB3cml0ZVJlb3JnYW5pemVkSnNvbihcbiAgICAgICAgICAgICAgICBkYXRhc2V0UmVvcmdhbml6ZWREaXIsXG4gICAgICAgICAgICAgICAgc2NydXRpbixcbiAgICAgICAgICAgICAgICBwYXRoRnJvbVNjcnV0aW5VaWQsXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSBEYXRhc2V0U3RydWN0dXJlLlNlZ21lbnRlZEZpbGVzOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGZvciAoY29uc3Qgc2NydXRpblNwbGl0UGF0aCBvZiB3YWxrRGlyKFxuICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICAgICAgKSkge1xuICAgICAgICAgICAgICBjb25zdCBzY3J1dGluRmlsZW5hbWUgPVxuICAgICAgICAgICAgICAgIHNjcnV0aW5TcGxpdFBhdGhbc2NydXRpblNwbGl0UGF0aC5sZW5ndGggLSAxXVxuICAgICAgICAgICAgICBpZiAoIXNjcnV0aW5GaWxlbmFtZS5lbmRzV2l0aChcIi5qc29uXCIpKSB7XG4gICAgICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjb25zdCBzY3J1dGluT3JpZ2luYWxGaWxlUGF0aCA9IHBhdGguam9pbihcbiAgICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICAgICAgICAgIC4uLnNjcnV0aW5TcGxpdFBhdGgsXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgaWYgKG9wdGlvbnMudmVyYm9zZSkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgICAgICAgYCAgUmVvcmdhbml6aW5nIFwic2NydXRpblwiIGZpbGU6ICR7c2NydXRpbk9yaWdpbmFsRmlsZVBhdGh94oCmYCxcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc3Qgc2NydXRpbk9yaWdpbmFsSnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKFxuICAgICAgICAgICAgICAgIHNjcnV0aW5PcmlnaW5hbEZpbGVQYXRoLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIGNvbnN0IHNjcnV0aW5PcmlnaW5hbDogYW55ID0gdmFsaWRhdGVSYXdEYXRhXG4gICAgICAgICAgICAgICAgPyBTY3J1dGluc1Jhd0NvbnZlcnQudG9TY3J1dGluV3JhcHBlcihzY3J1dGluT3JpZ2luYWxKc29uKVxuICAgICAgICAgICAgICAgIDogSlNPTi5wYXJzZShzY3J1dGluT3JpZ2luYWxKc29uKVxuICAgICAgICAgICAgICBjb25zdCBzY3J1dGluID0gc2NydXRpbk9yaWdpbmFsLnNjcnV0aW5cbiAgICAgICAgICAgICAgd3JpdGVSZW9yZ2FuaXplZEpzb24oXG4gICAgICAgICAgICAgICAgZGF0YXNldFJlb3JnYW5pemVkRGlyLFxuICAgICAgICAgICAgICAgIHNjcnV0aW4sXG4gICAgICAgICAgICAgICAgcGF0aEZyb21TY3J1dGluVWlkLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICB9XG5cbiAgICAgIGNvbW1pdEdpdChkYXRhc2V0UmVvcmdhbml6ZWREaXIsIG9wdGlvbnMpXG4gICAgfVxuICB9XG5cbiAgaWYgKGVuYWJsZWREYXRhc2V0cyAmIEVuYWJsZWREYXRhc2V0cy5RdWVzdGlvbnMpIHtcbiAgICBmb3IgKGNvbnN0IGRhdGFzZXQgb2YgZGF0YXNldHMucXVlc3Rpb25zKSB7XG4gICAgICBjb25zdCBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoOiBzdHJpbmcgPSBwYXRoLmpvaW4oXG4gICAgICAgIGRhdGFEaXIsXG4gICAgICAgIGRhdGFzZXQuZmlsZW5hbWUsXG4gICAgICApXG4gICAgICBpZiAoIW9wdGlvbnMuc2lsZW50KSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBSZW9yZ2FuaXppbmcgJHtvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRofWApXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGRhdGFzZXROYW1lID0gcGF0aC5iYXNlbmFtZShcbiAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgXCIuanNvblwiLFxuICAgICAgKVxuICAgICAgY2xvbmVHaXQoZ2l0R3JvdXBVcmwsIGRhdGFzZXROYW1lLCBkYXRhRGlyKVxuXG4gICAgICBjb25zdCBkYXRhc2V0UmVvcmdhbml6ZWREaXIgPSBwYXRoLmpvaW4oZGF0YURpciwgZGF0YXNldE5hbWUpXG4gICAgICBjbGVhckRpcmVjdG9yeShkYXRhc2V0UmVvcmdhbml6ZWREaXIpXG5cbiAgICAgIHN3aXRjaCAoZGF0YXNldC5zdHJ1Y3R1cmUpIHtcbiAgICAgICAgY2FzZSBEYXRhc2V0U3RydWN0dXJlLlNlZ21lbnRlZEZpbGVzOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgcXVlc3Rpb25TcGxpdFBhdGggb2Ygd2Fsa0RpcihcbiAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICkpIHtcbiAgICAgICAgICAgICAgY29uc3QgcXVlc3Rpb25GaWxlbmFtZSA9XG4gICAgICAgICAgICAgICAgcXVlc3Rpb25TcGxpdFBhdGhbcXVlc3Rpb25TcGxpdFBhdGgubGVuZ3RoIC0gMV1cbiAgICAgICAgICAgICAgaWYgKCFxdWVzdGlvbkZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnN0IHF1ZXN0aW9uT3JpZ2luYWxGaWxlUGF0aCA9IHBhdGguam9pbihcbiAgICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICAgICAgICAgIC4uLnF1ZXN0aW9uU3BsaXRQYXRoLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIGlmIChvcHRpb25zLnZlcmJvc2UpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgICAgICAgIGAgIFJlb3JnYW5pemluZyBcInF1ZXN0aW9uXCIgZmlsZTogJHtxdWVzdGlvbk9yaWdpbmFsRmlsZVBhdGh94oCmYCxcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc3QgcXVlc3Rpb25PcmlnaW5hbEpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhcbiAgICAgICAgICAgICAgICBxdWVzdGlvbk9yaWdpbmFsRmlsZVBhdGgsXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIClcblxuICAgICAgICAgICAgICBjb25zdCBxdWVzdGlvbk9yaWdpbmFsOiBhbnkgPSB2YWxpZGF0ZVJhd0RhdGFcbiAgICAgICAgICAgICAgICA/IFF1ZXN0aW9uc1Jhd0NvbnZlcnQudG9RdWVzdGlvbldyYXBwZXIocXVlc3Rpb25PcmlnaW5hbEpzb24pXG4gICAgICAgICAgICAgICAgOiBKU09OLnBhcnNlKHF1ZXN0aW9uT3JpZ2luYWxKc29uKVxuICAgICAgICAgICAgICBjb25zdCBxdWVzdGlvbiA9IHF1ZXN0aW9uT3JpZ2luYWwucXVlc3Rpb25cbiAgICAgICAgICAgICAgd3JpdGVSZW9yZ2FuaXplZEpzb24oXG4gICAgICAgICAgICAgICAgZGF0YXNldFJlb3JnYW5pemVkRGlyLFxuICAgICAgICAgICAgICAgIHF1ZXN0aW9uLFxuICAgICAgICAgICAgICAgIHBhdGhGcm9tUXVlc3Rpb25VaWQsXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWtcbiAgICAgIH1cblxuICAgICAgY29tbWl0R2l0KGRhdGFzZXRSZW9yZ2FuaXplZERpciwgb3B0aW9ucylcbiAgICB9XG4gIH1cblxuICBpZiAoZW5hYmxlZERhdGFzZXRzICYgRW5hYmxlZERhdGFzZXRzLkNvbXB0ZXNSZW5kdXNTZWFuY2VzKSB7XG4gICAgZm9yIChjb25zdCBkYXRhc2V0IG9mIGRhdGFzZXRzLmNvbXB0ZXNSZW5kdXNTZWFuY2VzKSB7XG4gICAgICBjb25zdCBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoOiBzdHJpbmcgPSBwYXRoLmpvaW4oXG4gICAgICAgIGRhdGFEaXIsXG4gICAgICAgIGRhdGFzZXQuZmlsZW5hbWUsXG4gICAgICApXG4gICAgICBpZiAoIW9wdGlvbnMuc2lsZW50KSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBSZW9yZ2FuaXppbmcgJHtvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRofWApXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGRhdGFzZXROYW1lID0gcGF0aC5iYXNlbmFtZShvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLCBcIi54bWxcIilcbiAgICAgIGNsb25lR2l0KGdpdEdyb3VwVXJsLCBkYXRhc2V0TmFtZSwgZGF0YURpcilcblxuICAgICAgY29uc3QgZGF0YXNldFJlb3JnYW5pemVkRGlyID0gcGF0aC5qb2luKGRhdGFEaXIsIGRhdGFzZXROYW1lKVxuICAgICAgY2xlYXJEaXJlY3RvcnkoZGF0YXNldFJlb3JnYW5pemVkRGlyKVxuXG4gICAgICBzd2l0Y2ggKGRhdGFzZXQuc3RydWN0dXJlKSB7XG4gICAgICAgIGNhc2UgRGF0YXNldFN0cnVjdHVyZS5TZWdtZW50ZWRGaWxlczpcbiAgICAgICAgICB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGNvbXB0ZVJlbmR1U2VhbmNlU3BsaXRQYXRoIG9mIHdhbGtEaXIoXG4gICAgICAgICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgICAgICApKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGNvbXB0ZVJlbmR1U2VhbmNlRmlsZW5hbWUgPVxuICAgICAgICAgICAgICAgIGNvbXB0ZVJlbmR1U2VhbmNlU3BsaXRQYXRoW1xuICAgICAgICAgICAgICAgICAgY29tcHRlUmVuZHVTZWFuY2VTcGxpdFBhdGgubGVuZ3RoIC0gMVxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgaWYgKCFjb21wdGVSZW5kdVNlYW5jZUZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnN0IGNvbXB0ZVJlbmR1U2VhbmNlT3JpZ2luYWxGaWxlUGF0aCA9IHBhdGguam9pbihcbiAgICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICAgICAgICAgIC4uLmNvbXB0ZVJlbmR1U2VhbmNlU3BsaXRQYXRoLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIGlmIChvcHRpb25zLnZlcmJvc2UpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgICAgICAgIGAgIFJlb3JnYW5pemluZyBcImNvbXB0ZVJlbmR1U2VhbmNlXCIgZmlsZTogJHtjb21wdGVSZW5kdVNlYW5jZU9yaWdpbmFsRmlsZVBhdGh94oCmYCxcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc3QgY29tcHRlUmVuZHVTZWFuY2VPcmlnaW5hbEpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhcbiAgICAgICAgICAgICAgICBjb21wdGVSZW5kdVNlYW5jZU9yaWdpbmFsRmlsZVBhdGgsXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgY29uc3QgY29tcHRlUmVuZHVTZWFuY2VPcmlnaW5hbDogYW55ID0gdmFsaWRhdGVSYXdEYXRhXG4gICAgICAgICAgICAgICAgPyBDb21wdGVzUmVuZHVzUmF3Q29udmVydC50b0NvbXB0ZVJlbmR1V3JhcHBlcihcbiAgICAgICAgICAgICAgICAgICAgY29tcHRlUmVuZHVTZWFuY2VPcmlnaW5hbEpzb24sXG4gICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgOiBKU09OLnBhcnNlKGNvbXB0ZVJlbmR1U2VhbmNlT3JpZ2luYWxKc29uKVxuXG4gICAgICAgICAgICAgIGNvbnN0IGNvbXB0ZVJlbmR1U2VhbmNlID0gY29tcHRlUmVuZHVTZWFuY2VPcmlnaW5hbC5jb21wdGVSZW5kdVxuICAgICAgICAgICAgICB3cml0ZVJlb3JnYW5pemVkSnNvbihcbiAgICAgICAgICAgICAgICBkYXRhc2V0UmVvcmdhbml6ZWREaXIsXG4gICAgICAgICAgICAgICAgY29tcHRlUmVuZHVTZWFuY2UsXG4gICAgICAgICAgICAgICAgcGF0aEZyb21Db21wdGVSZW5kdVVpZCxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVha1xuICAgICAgfVxuXG4gICAgICBjb21taXRHaXQoZGF0YXNldFJlb3JnYW5pemVkRGlyLCBvcHRpb25zKVxuICAgIH1cbiAgfVxuXG4gIC8vIFJlc3RvcmUgc3RhbmRhcmQgY29udmVyc2lvbiBvZiBkYXRlcyB0byBKU09OLlxuICBEYXRlLnByb3RvdHlwZS50b0pTT04gPSBleGlzdGluZ0RhdGVUb0pzb25cblxuICByZXR1cm4gZXhpdENvZGVcbn1cblxuZnVuY3Rpb24gd3JpdGVBbWVuZGVtZW50UmVvcmdhbml6ZWRKc29uKFxuICBkYXRhc2V0UmVvcmdhbml6ZWREaXI6IHN0cmluZyxcbiAgYW1lbmRlbWVudDoge1xuICAgIHVpZDogc3RyaW5nXG4gICAgdGV4dGVMZWdpc2xhdGlmUmVmOiBzdHJpbmdcbiAgfSxcbik6IHZvaWQge1xuICBjb25zdCB1aWRUZXh0ZUxlZ2lzbGF0aWYgPSBhbWVuZGVtZW50LnRleHRlTGVnaXNsYXRpZlJlZlxuICBhc3NlcnQubm90U3RyaWN0RXF1YWwodWlkVGV4dGVMZWdpc2xhdGlmLCB1bmRlZmluZWQpXG4gIGNvbnN0IHRleHRlTGVnaXNsYXRpZkRpciA9IHBhdGguam9pbihcbiAgICBkYXRhc2V0UmVvcmdhbml6ZWREaXIsXG4gICAgdWlkVGV4dGVMZWdpc2xhdGlmLFxuICApXG4gIGZzLmVuc3VyZURpclN5bmModGV4dGVMZWdpc2xhdGlmRGlyKVxuICBjb25zdCByZW9yZ2FuaXplZEpzb25GaWxlUGF0aCA9IHBhdGguam9pbihcbiAgICB0ZXh0ZUxlZ2lzbGF0aWZEaXIsXG4gICAgYW1lbmRlbWVudC51aWQgKyBcIi5qc29uXCIsXG4gIClcbiAgZnMud3JpdGVGaWxlU3luYyhcbiAgICByZW9yZ2FuaXplZEpzb25GaWxlUGF0aCxcbiAgICBKU09OLnN0cmluZ2lmeShhbWVuZGVtZW50LCBudWxsLCAyKSxcbiAgICB7XG4gICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgfSxcbiAgKVxufVxuXG5mdW5jdGlvbiB3cml0ZVJlb3JnYW5pemVkSnNvbjxUIGV4dGVuZHMgeyB1aWQ6IHN0cmluZyB9PihcbiAgZGlyOiBzdHJpbmcsXG4gIG9iajogVCxcbiAgcGF0aEZyb21VaWQ6IChkaXI6IHN0cmluZywgdWlkOiBzdHJpbmcpID0+IHN0cmluZyxcbik6IHZvaWQge1xuICBjb25zdCBiYXNlbmFtZSA9IHBhdGhGcm9tVWlkKGRpciwgb2JqLnVpZClcbiAgZnMud3JpdGVGaWxlU3luYyhgJHtiYXNlbmFtZX0uanNvbmAsIEpTT04uc3RyaW5naWZ5KG9iaiwgbnVsbCwgMiksIHtcbiAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gIH0pXG59XG5cbmZ1bmN0aW9uIG1haW4oYXJndjogYW55KTogbnVtYmVyIHtcbiAgY29uc3Qgb3B0aW9ucyA9IHBhcnNlQXJncyhhcmd2KVxuICByZXR1cm4gcmVvcmdhbml6ZURhdGEob3B0aW9ucylcbn1cblxuLyogaXN0YW5idWwgaWdub3JlIGlmICovXG5pZiAocHJvY2Vzcy5hcmd2WzFdLmVuZHNXaXRoKFwicmVv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
|
|
517
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJhc3NlcnQiLCJjb21tYW5kTGluZUFyZ3MiLCJmcyIsInBhdGgiLCJkYXRhc2V0cyIsIkRhdGFzZXRTdHJ1Y3R1cmUiLCJFbmFibGVkRGF0YXNldHMiLCJnZXRFbmFibGVkRGF0YXNldHMiLCJmaWx0ZXJCeUxlZ2lzbGF0dXJlIiwiZXhpc3RpbmdEYXRlVG9Kc29uIiwicGF0Y2hlZERhdGVUb0pzb24iLCJnaXQiLCJ3YWxrRGlyIiwicGF0aEZyb21Db21wdGVSZW5kdVVpZCIsInBhdGhGcm9tRG9jdW1lbnRVaWQiLCJwYXRoRnJvbURvc3NpZXJQYXJsZW1lbnRhaXJlVWlkIiwicGF0aEZyb21RdWVzdGlvblVpZCIsInBhdGhGcm9tUmV1bmlvblVpZCIsInBhdGhGcm9tU2NydXRpblVpZCIsIkNvbnZlcnQiLCJBY3RldXJzRXRPcmdhbmVzUmF3Q29udmVydCIsIkFnZW5kYXNSYXdDb252ZXJ0IiwiQW1lbmRlbWVudHNSYXdDb252ZXJ0IiwiRG9zc2llcnNMZWdpc2xhdGlmc1Jhd0NvbnZlcnQiLCJTY3J1dGluc1Jhd0NvbnZlcnQiLCJRdWVzdGlvbnNSYXdDb252ZXJ0IiwiQ29tcHRlc1JlbmR1c1Jhd0NvbnZlcnQiLCJjbG9uZU9wdGlvbiIsImNvbW1pdE9wdGlvbiIsImNhdGVnb3JpZXNPcHRpb24iLCJsZWdpc2xhdHVyZU9wdGlvbiIsInJlbW90ZU9wdGlvbiIsInNpbGVudE9wdGlvbiIsInZlcmJvc2VPcHRpb24iLCJkYXRhRGlyRGVmYXVsdE9wdGlvbiIsInB1bGxPcHRpb24iLCJmZXRjaERvY3VtZW50c09wdGlvbiIsInBhcnNlQXJncyIsImFyZ3YiLCJvcHRpb25zRGVmaW5pdGlvbnMiLCJhbGlhcyIsImhlbHAiLCJuYW1lIiwidHlwZSIsIkJvb2xlYW4iLCJvcHRpb25zIiwiY2xlYXJEaXJlY3RvcnkiLCJkaXJQYXRoIiwiZW5zdXJlRGlyU3luYyIsImZpbGVuYW1lIiwicmVhZGRpclN5bmMiLCJzdGFydHNXaXRoIiwicmVtb3ZlU3luYyIsImpvaW4iLCJjbG9uZUdpdCIsImdpdEdyb3VwVXJsIiwiZGF0YXNldE5hbWUiLCJkYXRhRGlyIiwiY2xvbmUiLCJyZW9yZ2FuaXplRGF0YSIsIkRhdGUiLCJwcm90b3R5cGUiLCJ0b0pTT04iLCJleGl0Q29kZSIsImNvbW1pdCIsInRyaW0iLCJyZXBsYWNlIiwidmFsaWRhdGVSYXdEYXRhIiwiZW5hYmxlZERhdGFzZXRzIiwiY2F0ZWdvcmllcyIsImNob3NlbkRhdGFzZXRzIiwibGVnaXNsYXR1cmUiLCJjb21taXRHaXQiLCJkYXRhc2V0UmVvcmdhbml6ZWREaXIiLCJlcnJvckNvZGUiLCJjb21taXRBbmRQdXNoIiwicmVtb3RlIiwiQWN0ZXVyc0V0T3JnYW5lcyIsImRhdGFzZXQiLCJhY3RldXJzRXRPcmdhbmVzIiwib3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCIsInNpbGVudCIsImNvbnNvbGUiLCJsb2ciLCJiYXNlbmFtZSIsInB1bGwiLCJyZXNldEFuZFB1bGwiLCJhY3RldXJzUmVvcmdhbml6ZWREaXIiLCJta2RpclN5bmMiLCJvcmdhbmVzUmVvcmdhbml6ZWREaXIiLCJzdHJ1Y3R1cmUiLCJTaW5nbGVGaWxlIiwib3JpZ2luYWxKc29uIiwicmVhZEZpbGVTeW5jIiwiZW5jb2RpbmciLCJvcmlnaW5hbERhdGEiLCJ0b0FjdGV1cnNFdE9yZ2FuZXMiLCJKU09OIiwicGFyc2UiLCJhY3RldXIiLCJleHBvcnQiLCJhY3RldXJzIiwicmVvcmdhbml6ZWRKc29uRmlsZVBhdGgiLCJ1aWQiLCJ3cml0ZUZpbGVTeW5jIiwic3RyaW5naWZ5Iiwib3JnYW5lIiwib3JnYW5lcyIsIlNlZ21lbnRlZEZpbGVzIiwiZGVwb3J0c0J5QWN0ZXVyVWlkIiwiZXhpc3RzU3luYyIsImRlcG9ydFNwbGl0UGF0aCIsImRlcG9ydEZpbGVuYW1lIiwibGVuZ3RoIiwiZW5kc1dpdGgiLCJkZXBvcnRPcmlnaW5hbEZpbGVQYXRoIiwidmVyYm9zZSIsImRlcG9ydE9yaWdpbmFsSnNvbiIsImRlcG9ydE9yaWdpbmFsIiwidG9EZXBvcnQiLCJkZXBvcnQiLCJkZXBvcnRzIiwiYWN0ZXVyUmVmIiwidW5kZWZpbmVkIiwicHVzaCIsIk9iamVjdCIsInZhbHVlcyIsInNvcnQiLCJhIiwiYiIsImxvY2FsZUNvbXBhcmUiLCJtYW5kYXRzQnlBY3RldXJVaWQiLCJtYW5kYXRTcGxpdFBhdGgiLCJtYW5kYXRGaWxlbmFtZSIsIm1hbmRhdE9yaWdpbmFsRmlsZVBhdGgiLCJtYW5kYXRPcmlnaW5hbEpzb24iLCJtYW5kYXRPcmlnaW5hbCIsInRvTWFuZGF0V3JhcHBlciIsIm1hbmRhdCIsIm1hbmRhdHMiLCJhY3RldXJTcGxpdFBhdGgiLCJhY3RldXJGaWxlbmFtZSIsImFjdGV1ck9yaWdpbmFsRmlsZVBhdGgiLCJhY3RldXJPcmlnaW5hbEpzb24iLCJhY3RldXJPcmlnaW5hbCIsInRvQWN0ZXVyIiwiYWN0ZXVyVWlkIiwic3RyaWN0RXF1YWwiLCJhY3RldXJSZW9yZ2FuaXplZEpzb25GaWxlUGF0aCIsIm9yZ2FuZVNwbGl0UGF0aCIsIm9yZ2FuZUZpbGVuYW1lIiwib3JnYW5lT3JpZ2luYWxGaWxlUGF0aCIsIm9yZ2FuZU9yaWdpbmFsSnNvbiIsIm9yZ2FuZU9yaWdpbmFsIiwidG9PcmdhbmUiLCJvcmdhbmVSZW9yZ2FuaXplZEpzb25GaWxlUGF0aCIsIkFnZW5kYXMiLCJhZ2VuZGFzIiwidG9BZ2VuZGFzIiwicmV1bmlvbiIsInJldW5pb25zIiwid3JpdGVSZW9yZ2FuaXplZEpzb24iLCJyZXVuaW9uU3BsaXRQYXRoIiwicmV1bmlvbkZpbGVuYW1lIiwicmV1bmlvbk9yaWdpbmFsRmlsZVBhdGgiLCJyZXVuaW9uT3JpZ2luYWxKc29uIiwicmV1bmlvbk9yaWdpbmFsIiwidG9SZXVuaW9uIiwiQW1lbmRlbWVudHMiLCJhbWVuZGVtZW50cyIsInRvQW1lbmRlbWVudHMiLCJ0ZXh0ZUxlZ2lzbGF0aWYiLCJ0ZXh0ZXNFdEFtZW5kZW1lbnRzIiwidGV4dGVsZWciLCJhbWVuZGVtZW50Iiwid3JpdGVBbWVuZGVtZW50UmVvcmdhbml6ZWRKc29uIiwiYW1lbmRlbWVudFNwbGl0UGF0aCIsImFtZW5kZW1lbnRGaWxlbmFtZSIsImFtZW5kZW1lbnRPcmlnaW5hbEZpbGVQYXRoIiwiYW1lbmRlbWVudE9yaWdpbmFsSnNvbiIsImFtZW5kZW1lbnRPcmlnaW5hbCIsInRvQW1lbmRlbWVudFdyYXBwZXIiLCJEb3NzaWVyc0xlZ2lzbGF0aWZzIiwiZG9zc2llcnNMZWdpc2xhdGlmcyIsImRvY3VtZW50c0RpciIsImRvc3NpZXJzRGlyIiwidG9Eb3NzaWVyc0xlZ2lzbGF0aWZzIiwiZG9jdW1lbnQiLCJ0ZXh0ZXNMZWdpc2xhdGlmcyIsImRvc3NpZXJQYXJsZW1lbnRhaXJlIiwiZG9zc2llciIsImRvY3VtZW50U3BsaXRQYXRoIiwiZG9jdW1lbnRGaWxlbmFtZSIsImRvY3VtZW50T3JpZ2luYWxGaWxlUGF0aCIsImRvY3VtZW50T3JpZ2luYWxKc29uIiwiZG9jdW1lbnRPcmlnaW5hbCIsInRvRG9jdW1lbnQiLCJkb3NzaWVyUGFybGVtZW50YWlyZVNwbGl0UGF0aCIsImRvc3NpZXJQYXJsZW1lbnRhaXJlRmlsZW5hbWUiLCJkb3NzaWVyUGFybGVtZW50YWlyZU9yaWdpbmFsRmlsZVBhdGgiLCJkb3NzaWVyUGFybGVtZW50YWlyZU9yaWdpbmFsSnNvbiIsImRvc3NpZXJQYXJsZW1lbnRhaXJlT3JpZ2luYWwiLCJ0b0Rvc3NpZXJQYXJsZW1lbnRhaXJlIiwiU2NydXRpbnMiLCJzY3J1dGlucyIsInRvU2NydXRpbnMiLCJzY3J1dGluIiwic2NydXRpblNwbGl0UGF0aCIsInNjcnV0aW5GaWxlbmFtZSIsInNjcnV0aW5PcmlnaW5hbEZpbGVQYXRoIiwic2NydXRpbk9yaWdpbmFsSnNvbiIsInNjcnV0aW5PcmlnaW5hbCIsInRvU2NydXRpbldyYXBwZXIiLCJRdWVzdGlvbnMiLCJxdWVzdGlvbnMiLCJxdWVzdGlvblNwbGl0UGF0aCIsInF1ZXN0aW9uRmlsZW5hbWUiLCJxdWVzdGlvbk9yaWdpbmFsRmlsZVBhdGgiLCJxdWVzdGlvbk9yaWdpbmFsSnNvbiIsInF1ZXN0aW9uT3JpZ2luYWwiLCJ0b1F1ZXN0aW9uV3JhcHBlciIsInF1ZXN0aW9uIiwiQ29tcHRlc1JlbmR1c1NlYW5jZXMiLCJjb21wdGVzUmVuZHVzU2VhbmNlcyIsImNvbXB0ZVJlbmR1U2VhbmNlU3BsaXRQYXRoIiwiY29tcHRlUmVuZHVTZWFuY2VGaWxlbmFtZSIsImNvbXB0ZVJlbmR1U2VhbmNlT3JpZ2luYWxGaWxlUGF0aCIsImNvbXB0ZVJlbmR1U2VhbmNlT3JpZ2luYWxKc29uIiwiY29tcHRlUmVuZHVTZWFuY2VPcmlnaW5hbCIsInRvQ29tcHRlUmVuZHVXcmFwcGVyIiwiY29tcHRlUmVuZHVTZWFuY2UiLCJjb21wdGVSZW5kdSIsInVpZFRleHRlTGVnaXNsYXRpZiIsInRleHRlTGVnaXNsYXRpZlJlZiIsIm5vdFN0cmljdEVxdWFsIiwidGV4dGVMZWdpc2xhdGlmRGlyIiwiZGlyIiwib2JqIiwicGF0aEZyb21VaWQiLCJtYWluIiwicHJvY2VzcyIsImV4aXQiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvc2NyaXB0cy9yZW9yZ2FuaXplX2RhdGEudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGFzc2VydCBmcm9tIFwiYXNzZXJ0XCJcbmltcG9ydCBjb21tYW5kTGluZUFyZ3MgZnJvbSBcImNvbW1hbmQtbGluZS1hcmdzXCJcbmltcG9ydCBmcyBmcm9tIFwiZnMtZXh0cmFcIlxuaW1wb3J0IHBhdGggZnJvbSBcInBhdGhcIlxuaW1wb3J0IHtcbiAgZGF0YXNldHMsXG4gIERhdGFzZXRTdHJ1Y3R1cmUsXG4gIEVuYWJsZWREYXRhc2V0cyxcbiAgZ2V0RW5hYmxlZERhdGFzZXRzLFxuICBmaWx0ZXJCeUxlZ2lzbGF0dXJlLFxufSBmcm9tIFwiLi4vZGF0YXNldHNcIlxuaW1wb3J0IHsgZXhpc3RpbmdEYXRlVG9Kc29uLCBwYXRjaGVkRGF0ZVRvSnNvbiB9IGZyb20gXCIuLi9kYXRlc1wiXG5pbXBvcnQgKiBhcyBnaXQgZnJvbSBcIi4uL2dpdFwiXG5pbXBvcnQgeyB3YWxrRGlyIH0gZnJvbSBcIi4uL2ZpbGVfc3lzdGVtc1wiXG5pbXBvcnQge1xuICBwYXRoRnJvbUNvbXB0ZVJlbmR1VWlkLFxuICBwYXRoRnJvbURvY3VtZW50VWlkLFxuICBwYXRoRnJvbURvc3NpZXJQYXJsZW1lbnRhaXJlVWlkLFxuICBwYXRoRnJvbVF1ZXN0aW9uVWlkLFxuICBwYXRoRnJvbVJldW5pb25VaWQsXG4gIHBhdGhGcm9tU2NydXRpblVpZCxcbn0gZnJvbSBcIi4uL2xvYWRlcnNcIlxuaW1wb3J0IHsgQ29udmVydCBhcyBBY3RldXJzRXRPcmdhbmVzUmF3Q29udmVydCB9IGZyb20gXCIuLi9yYXdfdHlwZXMvYWN0ZXVyc19ldF9vcmdhbmVzXCJcbmltcG9ydCB7IENvbnZlcnQgYXMgQWdlbmRhc1Jhd0NvbnZlcnQgfSBmcm9tIFwiLi4vcmF3X3R5cGVzL2FnZW5kYXNcIlxuaW1wb3J0IHsgQ29udmVydCBhcyBBbWVuZGVtZW50c1Jhd0NvbnZlcnQgfSBmcm9tIFwiLi4vcmF3X3R5cGVzL2FtZW5kZW1lbnRzXCJcbmltcG9ydCB7IENvbnZlcnQgYXMgRG9zc2llcnNMZWdpc2xhdGlmc1Jhd0NvbnZlcnQgfSBmcm9tIFwiLi4vcmF3X3R5cGVzL2Rvc3NpZXJzX2xlZ2lzbGF0aWZzXCJcbmltcG9ydCB7IENvbnZlcnQgYXMgU2NydXRpbnNSYXdDb252ZXJ0IH0gZnJvbSBcIi4uL3Jhd190eXBlcy9zY3J1dGluc1wiXG5pbXBvcnQgeyBDb252ZXJ0IGFzIFF1ZXN0aW9uc1Jhd0NvbnZlcnQgfSBmcm9tIFwiLi4vcmF3X3R5cGVzL3F1ZXN0aW9uc1wiXG5pbXBvcnQgeyBDb252ZXJ0IGFzIENvbXB0ZXNSZW5kdXNSYXdDb252ZXJ0IH0gZnJvbSBcIi4uL3Jhd190eXBlcy9kZWJhdHNcIlxuaW1wb3J0IHtcbiAgY2xvbmVPcHRpb24sXG4gIGNvbW1pdE9wdGlvbixcbiAgY2F0ZWdvcmllc09wdGlvbixcbiAgbGVnaXNsYXR1cmVPcHRpb24sXG4gIHJlbW90ZU9wdGlvbixcbiAgc2lsZW50T3B0aW9uLFxuICB2ZXJib3NlT3B0aW9uLFxuICBkYXRhRGlyRGVmYXVsdE9wdGlvbixcbiAgcHVsbE9wdGlvbixcbiAgZmV0Y2hEb2N1bWVudHNPcHRpb24sXG59IGZyb20gXCIuL3NoYXJlZC9jbGlfaGVscGVyc1wiXG5cbmZ1bmN0aW9uIHBhcnNlQXJncyhhcmd2OiBzdHJpbmdbXSk6IGFueSB7XG4gIGNvbnN0IG9wdGlvbnNEZWZpbml0aW9ucyA9IFtcbiAgICBjbG9uZU9wdGlvbixcbiAgICBjb21taXRPcHRpb24sXG4gICAgY2F0ZWdvcmllc09wdGlvbixcbiAgICBsZWdpc2xhdHVyZU9wdGlvbixcbiAgICByZW1vdGVPcHRpb24sXG4gICAgc2lsZW50T3B0aW9uLFxuICAgIHZlcmJvc2VPcHRpb24sXG4gICAgZGF0YURpckRlZmF1bHRPcHRpb24sXG4gICAgZmV0Y2hEb2N1bWVudHNPcHRpb24sXG4gICAgcHVsbE9wdGlvbixcbiAgICB7XG4gICAgICBhbGlhczogXCJWXCIsXG4gICAgICBoZWxwOiBcImRvbid0IHZhbGlkYXRlIHJhdyBkYXRhXCIsXG4gICAgICBuYW1lOiBcIm5vLXZhbGlkYXRlLXJhd1wiLFxuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICB9LFxuICBdXG4gIGNvbnN0IG9wdGlvbnMgPSBjb21tYW5kTGluZUFyZ3Mob3B0aW9uc0RlZmluaXRpb25zLCB7XG4gICAgYXJndjogYXJndixcbiAgfSlcbiAgcmV0dXJuIG9wdGlvbnNcbn1cblxuZnVuY3Rpb24gY2xlYXJEaXJlY3RvcnkoZGlyUGF0aDogc3RyaW5nKTogdm9pZCB7XG4gIGZzLmVuc3VyZURpclN5bmMoZGlyUGF0aClcbiAgZm9yIChjb25zdCBmaWxlbmFtZSBvZiBmcy5yZWFkZGlyU3luYyhkaXJQYXRoKSkge1xuICAgIGlmICghZmlsZW5hbWUuc3RhcnRzV2l0aChcIi5cIikpIHtcbiAgICAgIGZzLnJlbW92ZVN5bmMocGF0aC5qb2luKGRpclBhdGgsIGZpbGVuYW1lKSlcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gY2xvbmVHaXQoXG4gIGdpdEdyb3VwVXJsOiBzdHJpbmcgfCB1bmRlZmluZWQsXG4gIGRhdGFzZXROYW1lOiBzdHJpbmcsXG4gIGRhdGFEaXI6IHN0cmluZyxcbik6IHZvaWQge1xuICBnaXQuY2xvbmUoZ2l0R3JvdXBVcmwsIGRhdGFzZXROYW1lLCBkYXRhRGlyKVxufVxuXG5mdW5jdGlvbiByZW9yZ2FuaXplRGF0YShvcHRpb25zOiBhbnkpOiBudW1iZXIge1xuICBjb25zdCBkYXRhRGlyID0gb3B0aW9ucy5kYXRhRGlyXG4gIERhdGUucHJvdG90eXBlLnRvSlNPTiA9IHBhdGNoZWREYXRlVG9Kc29uXG4gIGxldCBleGl0Q29kZSA9IG9wdGlvbnMuY29tbWl0ID8gMTAgOiAwXG4gIGNvbnN0IGdpdEdyb3VwVXJsID0gb3B0aW9ucy5jbG9uZT8udHJpbSgpLnJlcGxhY2UoL1xcLyskLywgXCJcIilcbiAgY29uc3QgdmFsaWRhdGVSYXdEYXRhID0gIW9wdGlvbnNbXCJuby12YWxpZGF0ZS1yYXdcIl1cbiAgY29uc3QgZW5hYmxlZERhdGFzZXRzID0gZ2V0RW5hYmxlZERhdGFzZXRzKG9wdGlvbnMuY2F0ZWdvcmllcylcbiAgbGV0IGNob3NlbkRhdGFzZXRzID0gZmlsdGVyQnlMZWdpc2xhdHVyZShkYXRhc2V0cywgb3B0aW9ucy5sZWdpc2xhdHVyZSlcblxuICBmdW5jdGlvbiBjb21taXRHaXQoZGF0YXNldFJlb3JnYW5pemVkRGlyOiBzdHJpbmcsIG9wdGlvbnM6IGFueSk6IHZvaWQge1xuICAgIGlmIChvcHRpb25zLmNvbW1pdCkge1xuICAgICAgY29uc3QgZXJyb3JDb2RlID0gZ2l0LmNvbW1pdEFuZFB1c2goXG4gICAgICAgIGRhdGFzZXRSZW9yZ2FuaXplZERpcixcbiAgICAgICAgXCJOb3V2ZWxsZSBtb2lzc29uXCIsXG4gICAgICAgIG9wdGlvbnMucmVtb3RlLFxuICAgICAgKVxuICAgICAgaWYgKFxuICAgICAgICAoZXhpdENvZGUgPT09IDEwICYmIGVycm9yQ29kZSAhPT0gMTApIHx8XG4gICAgICAgIChleGl0Q29kZSA9PT0gMCAmJiBlcnJvckNvZGUgIT09IDAgJiYgZXJyb3JDb2RlICE9PSAxMClcbiAgICAgICkge1xuICAgICAgICBleGl0Q29kZSA9IGVycm9yQ29kZVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmIChlbmFibGVkRGF0YXNldHMgJiBFbmFibGVkRGF0YXNldHMuQWN0ZXVyc0V0T3JnYW5lcykge1xuICAgIGZvciAoY29uc3QgZGF0YXNldCBvZiBjaG9zZW5EYXRhc2V0cy5hY3RldXJzRXRPcmdhbmVzKSB7XG4gICAgICBjb25zdCBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoOiBzdHJpbmcgPSBwYXRoLmpvaW4oXG4gICAgICAgIGRhdGFEaXIsXG4gICAgICAgIGRhdGFzZXQuZmlsZW5hbWUsXG4gICAgICApXG4gICAgICBpZiAoIW9wdGlvbnMuc2lsZW50KSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBSZW9yZ2FuaXppbmcgJHtvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRofWApXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGRhdGFzZXROYW1lID0gcGF0aC5iYXNlbmFtZShcbiAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgXCIuanNvblwiLFxuICAgICAgKVxuICAgICAgY2xvbmVHaXQoZ2l0R3JvdXBVcmwsIGRhdGFzZXROYW1lLCBkYXRhRGlyKVxuXG4gICAgICBjb25zdCBkYXRhc2V0UmVvcmdhbml6ZWREaXIgPSBwYXRoLmpvaW4oZGF0YURpciwgZGF0YXNldE5hbWUpXG4gICAgICBpZiAob3B0aW9ucy5wdWxsKSB7XG4gICAgICAgIGdpdC5yZXNldEFuZFB1bGwoZGF0YXNldFJlb3JnYW5pemVkRGlyKVxuICAgICAgfVxuICAgICAgY2xlYXJEaXJlY3RvcnkoZGF0YXNldFJlb3JnYW5pemVkRGlyKVxuXG4gICAgICBjb25zdCBhY3RldXJzUmVvcmdhbml6ZWREaXIgPSBwYXRoLmpvaW4oZGF0YXNldFJlb3JnYW5pemVkRGlyLCBcImFjdGV1cnNcIilcbiAgICAgIGZzLm1rZGlyU3luYyhhY3RldXJzUmVvcmdhbml6ZWREaXIpXG4gICAgICBjb25zdCBvcmdhbmVzUmVvcmdhbml6ZWREaXIgPSBwYXRoLmpvaW4oZGF0YXNldFJlb3JnYW5pemVkRGlyLCBcIm9yZ2FuZXNcIilcbiAgICAgIGZzLm1rZGlyU3luYyhvcmdhbmVzUmVvcmdhbml6ZWREaXIpXG5cbiAgICAgIHN3aXRjaCAoZGF0YXNldC5zdHJ1Y3R1cmUpIHtcbiAgICAgICAgY2FzZSBEYXRhc2V0U3RydWN0dXJlLlNpbmdsZUZpbGU6XG4gICAgICAgICAge1xuICAgICAgICAgICAgY29uc3Qgb3JpZ2luYWxKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoXG4gICAgICAgICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBjb25zdCBvcmlnaW5hbERhdGE6IGFueSA9IHZhbGlkYXRlUmF3RGF0YVxuICAgICAgICAgICAgICA/IEFjdGV1cnNFdE9yZ2FuZXNSYXdDb252ZXJ0LnRvQWN0ZXVyc0V0T3JnYW5lcyhvcmlnaW5hbEpzb24pXG4gICAgICAgICAgICAgIDogSlNPTi5wYXJzZShvcmlnaW5hbEpzb24pXG5cbiAgICAgICAgICAgIGZvciAoY29uc3QgYWN0ZXVyIG9mIG9yaWdpbmFsRGF0YS5leHBvcnQuYWN0ZXVycy5hY3RldXIpIHtcbiAgICAgICAgICAgICAgY29uc3QgcmVvcmdhbml6ZWRKc29uRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICAgICAgICAgICAgICBhY3RldXJzUmVvcmdhbml6ZWREaXIsXG4gICAgICAgICAgICAgICAgYWN0ZXVyLnVpZFtcIiN0ZXh0XCJdICsgXCIuanNvblwiLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIGZzLndyaXRlRmlsZVN5bmMoXG4gICAgICAgICAgICAgICAgcmVvcmdhbml6ZWRKc29uRmlsZVBhdGgsXG4gICAgICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkoYWN0ZXVyLCBudWxsLCAyKSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IG9yZ2FuZSBvZiBvcmlnaW5hbERhdGEuZXhwb3J0Lm9yZ2FuZXMub3JnYW5lKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHJlb3JnYW5pemVkSnNvbkZpbGVQYXRoOiBzdHJpbmcgPSBwYXRoLmpvaW4oXG4gICAgICAgICAgICAgICAgb3JnYW5lc1Jlb3JnYW5pemVkRGlyLFxuICAgICAgICAgICAgICAgIG9yZ2FuZS51aWQgKyBcIi5qc29uXCIsXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgZnMud3JpdGVGaWxlU3luYyhcbiAgICAgICAgICAgICAgICByZW9yZ2FuaXplZEpzb25GaWxlUGF0aCxcbiAgICAgICAgICAgICAgICBKU09OLnN0cmluZ2lmeShvcmdhbmUsIG51bGwsIDIpLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgRGF0YXNldFN0cnVjdHVyZS5TZWdtZW50ZWRGaWxlczpcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjb25zdCBkZXBvcnRzQnlBY3RldXJVaWQ6IHtcbiAgICAgICAgICAgICAgW2FjdGV1clVpZDogc3RyaW5nXTogeyB1aWQ6IHN0cmluZyB9W11cbiAgICAgICAgICAgIH0gPSB7fVxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICBmcy5leGlzdHNTeW5jKFxuICAgICAgICAgICAgICAgIHBhdGguam9pbihvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLCBcImRlcG9ydFwiKSxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIGZvciAoY29uc3QgZGVwb3J0U3BsaXRQYXRoIG9mIHdhbGtEaXIoXG4gICAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICAgICBbXCJkZXBvcnRcIl0sXG4gICAgICAgICAgICAgICkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBkZXBvcnRGaWxlbmFtZSA9XG4gICAgICAgICAgICAgICAgICBkZXBvcnRTcGxpdFBhdGhbZGVwb3J0U3BsaXRQYXRoLmxlbmd0aCAtIDFdXG4gICAgICAgICAgICAgICAgaWYgKCFkZXBvcnRGaWxlbmFtZS5lbmRzV2l0aChcIi5qc29uXCIpKSB7XG4gICAgICAgICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBkZXBvcnRPcmlnaW5hbEZpbGVQYXRoID0gcGF0aC5qb2luKFxuICAgICAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICAgICAgIC4uLmRlcG9ydFNwbGl0UGF0aCxcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMudmVyYm9zZSkge1xuICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICAgICAgICAgIGAgIExvYWRpbmcgXCJkZXBvcnRcIiBmaWxlOiAke2RlcG9ydE9yaWdpbmFsRmlsZVBhdGh94oCmYCxcbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgZGVwb3J0T3JpZ2luYWxKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoXG4gICAgICAgICAgICAgICAgICBkZXBvcnRPcmlnaW5hbEZpbGVQYXRoLFxuICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICBjb25zdCBkZXBvcnRPcmlnaW5hbDogYW55ID0gdmFsaWRhdGVSYXdEYXRhXG4gICAgICAgICAgICAgICAgICA/IEFjdGV1cnNFdE9yZ2FuZXNSYXdDb252ZXJ0LnRvRGVwb3J0KGRlcG9ydE9yaWdpbmFsSnNvbilcbiAgICAgICAgICAgICAgICAgIDogSlNPTi5wYXJzZShkZXBvcnRPcmlnaW5hbEpzb24pXG4gICAgICAgICAgICAgICAgY29uc3QgZGVwb3J0ID0gZGVwb3J0T3JpZ2luYWwuZGVwb3J0XG4gICAgICAgICAgICAgICAgbGV0IGRlcG9ydHMgPSBkZXBvcnRzQnlBY3RldXJVaWRbZGVwb3J0LmFjdGV1clJlZl1cbiAgICAgICAgICAgICAgICBpZiAoZGVwb3J0cyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICBkZXBvcnRzID0gZGVwb3J0c0J5QWN0ZXVyVWlkW2RlcG9ydC5hY3RldXJSZWZdID0gW11cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZGVwb3J0cy5wdXNoKGRlcG9ydClcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGZvciAoY29uc3QgZGVwb3J0cyBvZiBPYmplY3QudmFsdWVzKGRlcG9ydHNCeUFjdGV1clVpZCkpIHtcbiAgICAgICAgICAgICAgICBkZXBvcnRzLnNvcnQoKGEsIGIpID0+XG4gICAgICAgICAgICAgICAgICBhLnVpZC5sZW5ndGggPT09IGIudWlkLmxlbmd0aFxuICAgICAgICAgICAgICAgICAgICA/IGEudWlkLmxvY2FsZUNvbXBhcmUoYi51aWQpXG4gICAgICAgICAgICAgICAgICAgIDogYS51aWQubGVuZ3RoIC0gYi51aWQubGVuZ3RoLFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBtYW5kYXRzQnlBY3RldXJVaWQ6IHtcbiAgICAgICAgICAgICAgW2FjdGV1clVpZDogc3RyaW5nXTogeyB1aWQ6IHN0cmluZyB9W11cbiAgICAgICAgICAgIH0gPSB7fVxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICBmcy5leGlzdHNTeW5jKFxuICAgICAgICAgICAgICAgIHBhdGguam9pbihvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLCBcIm1hbmRhdFwiKSxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIGZvciAoY29uc3QgbWFuZGF0U3BsaXRQYXRoIG9mIHdhbGtEaXIoXG4gICAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICAgICBbXCJtYW5kYXRcIl0sXG4gICAgICAgICAgICAgICkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBtYW5kYXRGaWxlbmFtZSA9XG4gICAgICAgICAgICAgICAgICBtYW5kYXRTcGxpdFBhdGhbbWFuZGF0U3BsaXRQYXRoLmxlbmd0aCAtIDFdXG4gICAgICAgICAgICAgICAgaWYgKCFtYW5kYXRGaWxlbmFtZS5lbmRzV2l0aChcIi5qc29uXCIpKSB7XG4gICAgICAgICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBtYW5kYXRPcmlnaW5hbEZpbGVQYXRoID0gcGF0aC5qb2luKFxuICAgICAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICAgICAgIC4uLm1hbmRhdFNwbGl0UGF0aCxcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMudmVyYm9zZSkge1xuICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICAgICAgICAgIGAgIExvYWRpbmcgXCJtYW5kYXRcIiBmaWxlOiAke21hbmRhdE9yaWdpbmFsRmlsZVBhdGh94oCmYCxcbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgbWFuZGF0T3JpZ2luYWxKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoXG4gICAgICAgICAgICAgICAgICBtYW5kYXRPcmlnaW5hbEZpbGVQYXRoLFxuICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICBjb25zdCBtYW5kYXRPcmlnaW5hbDogYW55ID0gdmFsaWRhdGVSYXdEYXRhXG4gICAgICAgICAgICAgICAgICA/IEFjdGV1cnNFdE9yZ2FuZXNSYXdDb252ZXJ0LnRvTWFuZGF0V3JhcHBlcihcbiAgICAgICAgICAgICAgICAgICAgICBtYW5kYXRPcmlnaW5hbEpzb24sXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgIDogSlNPTi5wYXJzZShtYW5kYXRPcmlnaW5hbEpzb24pXG4gICAgICAgICAgICAgICAgY29uc3QgbWFuZGF0ID0gbWFuZGF0T3JpZ2luYWwubWFuZGF0XG4gICAgICAgICAgICAgICAgbGV0IG1hbmRhdHMgPSBtYW5kYXRzQnlBY3RldXJVaWRbbWFuZGF0LmFjdGV1clJlZl1cbiAgICAgICAgICAgICAgICBpZiAobWFuZGF0cyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICBtYW5kYXRzID0gbWFuZGF0c0J5QWN0ZXVyVWlkW21hbmRhdC5hY3RldXJSZWZdID0gW11cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbWFuZGF0cy5wdXNoKG1hbmRhdClcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGZvciAoY29uc3QgbWFuZGF0cyBvZiBPYmplY3QudmFsdWVzKG1hbmRhdHNCeUFjdGV1clVpZCkpIHtcbiAgICAgICAgICAgICAgICBtYW5kYXRzLnNvcnQoKGEsIGIpID0+XG4gICAgICAgICAgICAgICAgICBhLnVpZC5sZW5ndGggPT09IGIudWlkLmxlbmd0aFxuICAgICAgICAgICAgICAgICAgICA/IGEudWlkLmxvY2FsZUNvbXBhcmUoYi51aWQpXG4gICAgICAgICAgICAgICAgICAgIDogYS51aWQubGVuZ3RoIC0gYi51aWQubGVuZ3RoLFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGFjdGV1clNwbGl0UGF0aCBvZiB3YWxrRGlyKFxuICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICAgICAgICBbXCJhY3RldXJcIl0sXG4gICAgICAgICAgICApKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGFjdGV1ckZpbGVuYW1lID0gYWN0ZXVyU3BsaXRQYXRoW2FjdGV1clNwbGl0UGF0aC5sZW5ndGggLSAxXVxuICAgICAgICAgICAgICBpZiAoIWFjdGV1ckZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnN0IGFjdGV1ck9yaWdpbmFsRmlsZVBhdGggPSBwYXRoLmpvaW4oXG4gICAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICAgICAuLi5hY3RldXJTcGxpdFBhdGgsXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgaWYgKG9wdGlvbnMudmVyYm9zZSkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgICAgICAgYCAgUmVvcmdhbml6aW5nIFwiYWN0ZXVyXCIgZmlsZTogJHthY3RldXJPcmlnaW5hbEZpbGVQYXRofeKApmAsXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnN0IGFjdGV1ck9yaWdpbmFsSnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKFxuICAgICAgICAgICAgICAgIGFjdGV1ck9yaWdpbmFsRmlsZVBhdGgsXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgY29uc3QgYWN0ZXVyT3JpZ2luYWw6IGFueSA9IHZhbGlkYXRlUmF3RGF0YVxuICAgICAgICAgICAgICAgID8gQWN0ZXVyc0V0T3JnYW5lc1Jhd0NvbnZlcnQudG9BY3RldXIoYWN0ZXVyT3JpZ2luYWxKc29uKVxuICAgICAgICAgICAgICAgIDogSlNPTi5wYXJzZShhY3RldXJPcmlnaW5hbEpzb24pXG4gICAgICAgICAgICAgIGNvbnN0IGFjdGV1ciA9IGFjdGV1ck9yaWdpbmFsLmFjdGV1clxuICAgICAgICAgICAgICBjb25zdCBhY3RldXJVaWQgPSBhY3RldXIudWlkW1wiI3RleHRcIl1cbiAgICAgICAgICAgICAgY29uc3QgZGVwb3J0cyA9IGRlcG9ydHNCeUFjdGV1clVpZFthY3RldXJVaWRdXG4gICAgICAgICAgICAgIGlmIChkZXBvcnRzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoYWN0ZXVyLmRlcG9ydHMsIHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICBhY3RldXIuZGVwb3J0cyA9IHsgZGVwb3J0OiBkZXBvcnRzIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjb25zdCBtYW5kYXRzID0gbWFuZGF0c0J5QWN0ZXVyVWlkW2FjdGV1clVpZF1cbiAgICAgICAgICAgICAgaWYgKG1hbmRhdHMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChhY3RldXIubWFuZGF0cywgdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgIGFjdGV1ci5tYW5kYXRzID0geyBtYW5kYXQ6IG1hbmRhdHMgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnN0IGFjdGV1clJlb3JnYW5pemVkSnNvbkZpbGVQYXRoOiBzdHJpbmcgPSBwYXRoLmpvaW4oXG4gICAgICAgICAgICAgICAgYWN0ZXVyc1Jlb3JnYW5pemVkRGlyLFxuICAgICAgICAgICAgICAgIGFjdGV1clVpZCArIFwiLmpzb25cIixcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBmcy53cml0ZUZpbGVTeW5jKFxuICAgICAgICAgICAgICAgIGFjdGV1clJlb3JnYW5pemVkSnNvbkZpbGVQYXRoLFxuICAgICAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KGFjdGV1ciwgbnVsbCwgMiksXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9yIChjb25zdCBvcmdhbmVTcGxpdFBhdGggb2Ygd2Fsa0RpcihcbiAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICAgW1wib3JnYW5lXCJdLFxuICAgICAgICAgICAgKSkge1xuICAgICAgICAgICAgICBjb25zdCBvcmdhbmVGaWxlbmFtZSA9IG9yZ2FuZVNwbGl0UGF0aFtvcmdhbmVTcGxpdFBhdGgubGVuZ3RoIC0gMV1cbiAgICAgICAgICAgICAgaWYgKCFvcmdhbmVGaWxlbmFtZS5lbmRzV2l0aChcIi5qc29uXCIpKSB7XG4gICAgICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjb25zdCBvcmdhbmVPcmlnaW5hbEZpbGVQYXRoID0gcGF0aC5qb2luKFxuICAgICAgICAgICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgICAgICAgICAgLi4ub3JnYW5lU3BsaXRQYXRoLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIGlmIChvcHRpb25zLnZlcmJvc2UpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgICAgICAgIGAgIFJlb3JnYW5pemluZyBcIm9yZ2FuZVwiIGZpbGU6ICR7b3JnYW5lT3JpZ2luYWxGaWxlUGF0aH3igKZgLFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjb25zdCBvcmdhbmVPcmlnaW5hbEpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhcbiAgICAgICAgICAgICAgICBvcmdhbmVPcmlnaW5hbEZpbGVQYXRoLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIGNvbnN0IG9yZ2FuZU9yaWdpbmFsOiBhbnkgPSB2YWxpZGF0ZVJhd0RhdGFcbiAgICAgICAgICAgICAgICA/IEFjdGV1cnNFdE9yZ2FuZXNSYXdDb252ZXJ0LnRvT3JnYW5lKG9yZ2FuZU9yaWdpbmFsSnNvbilcbiAgICAgICAgICAgICAgICA6IEpTT04ucGFyc2Uob3JnYW5lT3JpZ2luYWxKc29uKVxuICAgICAgICAgICAgICBjb25zdCBvcmdhbmUgPSBvcmdhbmVPcmlnaW5hbC5vcmdhbmVcbiAgICAgICAgICAgICAgY29uc3Qgb3JnYW5lUmVvcmdhbml6ZWRKc29uRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICAgICAgICAgICAgICBvcmdhbmVzUmVvcmdhbml6ZWREaXIsXG4gICAgICAgICAgICAgICAgb3JnYW5lLnVpZCArIFwiLmpzb25cIixcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBmcy53cml0ZUZpbGVTeW5jKFxuICAgICAgICAgICAgICAgIG9yZ2FuZVJlb3JnYW5pemVkSnNvbkZpbGVQYXRoLFxuICAgICAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KG9yZ2FuZSwgbnVsbCwgMiksXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWtcbiAgICAgIH1cblxuICAgICAgY29tbWl0R2l0KGRhdGFzZXRSZW9yZ2FuaXplZERpciwgb3B0aW9ucylcbiAgICB9XG4gIH1cblxuICBpZiAoZW5hYmxlZERhdGFzZXRzICYgRW5hYmxlZERhdGFzZXRzLkFnZW5kYXMpIHtcbiAgICBmb3IgKGNvbnN0IGRhdGFzZXQgb2YgY2hvc2VuRGF0YXNldHMuYWdlbmRhcykge1xuICAgICAgY29uc3Qgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aDogc3RyaW5nID0gcGF0aC5qb2luKFxuICAgICAgICBkYXRhRGlyLFxuICAgICAgICBkYXRhc2V0LmZpbGVuYW1lLFxuICAgICAgKVxuICAgICAgaWYgKCFvcHRpb25zLnNpbGVudCkge1xuICAgICAgICBjb25zb2xlLmxvZyhgUmVvcmdhbml6aW5nICR7b3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aH1gKVxuICAgICAgfVxuXG4gICAgICBjb25zdCBkYXRhc2V0TmFtZSA9IHBhdGguYmFzZW5hbWUoXG4gICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgIFwiLmpzb25cIixcbiAgICAgIClcbiAgICAgIGNsb25lR2l0KGdpdEdyb3VwVXJsLCBkYXRhc2V0TmFtZSwgZGF0YURpcilcblxuICAgICAgY29uc3QgZGF0YXNldFJlb3JnYW5pemVkRGlyID0gcGF0aC5qb2luKGRhdGFEaXIsIGRhdGFzZXROYW1lKVxuICAgICAgY2xlYXJEaXJlY3RvcnkoZGF0YXNldFJlb3JnYW5pemVkRGlyKVxuXG4gICAgICBzd2l0Y2ggKGRhdGFzZXQuc3RydWN0dXJlKSB7XG4gICAgICAgIGNhc2UgRGF0YXNldFN0cnVjdHVyZS5TaW5nbGVGaWxlOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNvbnN0IG9yaWdpbmFsSnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKFxuICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgY29uc3Qgb3JpZ2luYWxEYXRhOiBhbnkgPSB2YWxpZGF0ZVJhd0RhdGFcbiAgICAgICAgICAgICAgPyBBZ2VuZGFzUmF3Q29udmVydC50b0FnZW5kYXMob3JpZ2luYWxKc29uKVxuICAgICAgICAgICAgICA6IEpTT04ucGFyc2Uob3JpZ2luYWxKc29uKVxuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IHJldW5pb24gb2Ygb3JpZ2luYWxEYXRhLnJldW5pb25zLnJldW5pb24pIHtcbiAgICAgICAgICAgICAgd3JpdGVSZW9yZ2FuaXplZEpzb24oXG4gICAgICAgICAgICAgICAgZGF0YXNldFJlb3JnYW5pemVkRGlyLFxuICAgICAgICAgICAgICAgIHJldW5pb24sXG4gICAgICAgICAgICAgICAgcGF0aEZyb21SZXVuaW9uVWlkLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgRGF0YXNldFN0cnVjdHVyZS5TZWdtZW50ZWRGaWxlczpcbiAgICAgICAgICB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHJldW5pb25TcGxpdFBhdGggb2Ygd2Fsa0RpcihcbiAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICAgW1wicmV1bmlvblwiXSxcbiAgICAgICAgICAgICkpIHtcbiAgICAgICAgICAgICAgY29uc3QgcmV1bmlvbkZpbGVuYW1lID1cbiAgICAgICAgICAgICAgICByZXVuaW9uU3BsaXRQYXRoW3JldW5pb25TcGxpdFBhdGgubGVuZ3RoIC0gMV1cbiAgICAgICAgICAgICAgaWYgKCFyZXVuaW9uRmlsZW5hbWUuZW5kc1dpdGgoXCIuanNvblwiKSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc3QgcmV1bmlvbk9yaWdpbmFsRmlsZVBhdGggPSBwYXRoLmpvaW4oXG4gICAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICAgICAuLi5yZXVuaW9uU3BsaXRQYXRoLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIGlmIChvcHRpb25zLnZlcmJvc2UpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgICAgICAgIGAgIFJlb3JnYW5pemluZyBcInJldW5pb25cIiBmaWxlOiAke3JldW5pb25PcmlnaW5hbEZpbGVQYXRofeKApmAsXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnN0IHJldW5pb25PcmlnaW5hbEpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhcbiAgICAgICAgICAgICAgICByZXVuaW9uT3JpZ2luYWxGaWxlUGF0aCxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBjb25zdCByZXVuaW9uT3JpZ2luYWw6IGFueSA9IHZhbGlkYXRlUmF3RGF0YVxuICAgICAgICAgICAgICAgID8gQWdlbmRhc1Jhd0NvbnZlcnQudG9SZXVuaW9uKHJldW5pb25PcmlnaW5hbEpzb24pXG4gICAgICAgICAgICAgICAgOiBKU09OLnBhcnNlKHJldW5pb25PcmlnaW5hbEpzb24pXG4gICAgICAgICAgICAgIGNvbnN0IHJldW5pb24gPSByZXVuaW9uT3JpZ2luYWwucmV1bmlvblxuICAgICAgICAgICAgICB3cml0ZVJlb3JnYW5pemVkSnNvbihcbiAgICAgICAgICAgICAgICBkYXRhc2V0UmVvcmdhbml6ZWREaXIsXG4gICAgICAgICAgICAgICAgcmV1bmlvbixcbiAgICAgICAgICAgICAgICBwYXRoRnJvbVJldW5pb25VaWQsXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWtcbiAgICAgIH1cblxuICAgICAgY29tbWl0R2l0KGRhdGFzZXRSZW9yZ2FuaXplZERpciwgb3B0aW9ucylcbiAgICB9XG4gIH1cblxuICBpZiAoZW5hYmxlZERhdGFzZXRzICYgRW5hYmxlZERhdGFzZXRzLkFtZW5kZW1lbnRzKSB7XG4gICAgZm9yIChjb25zdCBkYXRhc2V0IG9mIGNob3NlbkRhdGFzZXRzLmFtZW5kZW1lbnRzKSB7XG4gICAgICBjb25zdCBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoOiBzdHJpbmcgPSBwYXRoLmpvaW4oXG4gICAgICAgIGRhdGFEaXIsXG4gICAgICAgIGRhdGFzZXQuZmlsZW5hbWUsXG4gICAgICApXG4gICAgICBpZiAoIW9wdGlvbnMuc2lsZW50KSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBSZW9yZ2FuaXppbmcgJHtvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRofWApXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGRhdGFzZXROYW1lID0gcGF0aC5iYXNlbmFtZShcbiAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgXCIuanNvblwiLFxuICAgICAgKVxuICAgICAgY2xvbmVHaXQoZ2l0R3JvdXBVcmwsIGRhdGFzZXROYW1lLCBkYXRhRGlyKVxuXG4gICAgICBjb25zdCBkYXRhc2V0UmVvcmdhbml6ZWREaXIgPSBwYXRoLmpvaW4oZGF0YURpciwgZGF0YXNldE5hbWUpXG4gICAgICBjbGVhckRpcmVjdG9yeShkYXRhc2V0UmVvcmdhbml6ZWREaXIpXG5cbiAgICAgIHN3aXRjaCAoZGF0YXNldC5zdHJ1Y3R1cmUpIHtcbiAgICAgICAgY2FzZSBEYXRhc2V0U3RydWN0dXJlLlNpbmdsZUZpbGU6XG4gICAgICAgICAge1xuICAgICAgICAgICAgY29uc3Qgb3JpZ2luYWxKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoXG4gICAgICAgICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBjb25zdCBvcmlnaW5hbERhdGE6IGFueSA9IHZhbGlkYXRlUmF3RGF0YVxuICAgICAgICAgICAgICA/IEFtZW5kZW1lbnRzUmF3Q29udmVydC50b0FtZW5kZW1lbnRzKG9yaWdpbmFsSnNvbilcbiAgICAgICAgICAgICAgOiBKU09OLnBhcnNlKG9yaWdpbmFsSnNvbilcblxuICAgICAgICAgICAgZm9yIChjb25zdCB0ZXh0ZUxlZ2lzbGF0aWYgb2Ygb3JpZ2luYWxEYXRhLnRleHRlc0V0QW1lbmRlbWVudHNcbiAgICAgICAgICAgICAgLnRleHRlbGVnKSB7XG4gICAgICAgICAgICAgIGZvciAoY29uc3QgYW1lbmRlbWVudCBvZiB0ZXh0ZUxlZ2lzbGF0aWYuYW1lbmRlbWVudHMpIHtcbiAgICAgICAgICAgICAgICB3cml0ZUFtZW5kZW1lbnRSZW9yZ2FuaXplZEpzb24oXG4gICAgICAgICAgICAgICAgICBkYXRhc2V0UmVvcmdhbml6ZWREaXIsXG4gICAgICAgICAgICAgICAgICBhbWVuZGVtZW50LFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIERhdGFzZXRTdHJ1Y3R1cmUuU2VnbWVudGVkRmlsZXM6XG4gICAgICAgICAge1xuICAgICAgICAgICAgZm9yIChjb25zdCBhbWVuZGVtZW50U3BsaXRQYXRoIG9mIHdhbGtEaXIoXG4gICAgICAgICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgICAgICApKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGFtZW5kZW1lbnRGaWxlbmFtZSA9XG4gICAgICAgICAgICAgICAgYW1lbmRlbWVudFNwbGl0UGF0aFthbWVuZGVtZW50U3BsaXRQYXRoLmxlbmd0aCAtIDFdXG4gICAgICAgICAgICAgIGlmICghYW1lbmRlbWVudEZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnN0IGFtZW5kZW1lbnRPcmlnaW5hbEZpbGVQYXRoID0gcGF0aC5qb2luKFxuICAgICAgICAgICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgICAgICAgICAgLi4uYW1lbmRlbWVudFNwbGl0UGF0aCxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBpZiAob3B0aW9ucy52ZXJib3NlKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICAgICAgICBgICBSZW9yZ2FuaXppbmcgXCJhbWVuZGVtZW50XCIgZmlsZTogJHthbWVuZGVtZW50T3JpZ2luYWxGaWxlUGF0aH3igKZgLFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjb25zdCBhbWVuZGVtZW50T3JpZ2luYWxKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoXG4gICAgICAgICAgICAgICAgYW1lbmRlbWVudE9yaWdpbmFsRmlsZVBhdGgsXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgY29uc3QgYW1lbmRlbWVudE9yaWdpbmFsOiBhbnkgPSB2YWxpZGF0ZVJhd0RhdGFcbiAgICAgICAgICAgICAgICA/IEFtZW5kZW1lbnRzUmF3Q29udmVydC50b0FtZW5kZW1lbnRXcmFwcGVyKFxuICAgICAgICAgICAgICAgICAgICBhbWVuZGVtZW50T3JpZ2luYWxKc29uLFxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIDogSlNPTi5wYXJzZShhbWVuZGVtZW50T3JpZ2luYWxKc29uKVxuICAgICAgICAgICAgICBjb25zdCBhbWVuZGVtZW50ID0gYW1lbmRlbWVudE9yaWdpbmFsLmFtZW5kZW1lbnRcbiAgICAgICAgICAgICAgd3JpdGVBbWVuZGVtZW50UmVvcmdhbml6ZWRKc29uKGRhdGFzZXRSZW9yZ2FuaXplZERpciwgYW1lbmRlbWVudClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWtcbiAgICAgIH1cblxuICAgICAgY29tbWl0R2l0KGRhdGFzZXRSZW9yZ2FuaXplZERpciwgb3B0aW9ucylcbiAgICB9XG4gIH1cblxuICBpZiAoZW5hYmxlZERhdGFzZXRzICYgRW5hYmxlZERhdGFzZXRzLkRvc3NpZXJzTGVnaXNsYXRpZnMpIHtcbiAgICBmb3IgKGNvbnN0IGRhdGFzZXQgb2YgY2hvc2VuRGF0YXNldHMuZG9zc2llcnNMZWdpc2xhdGlmcykge1xuICAgICAgY29uc3Qgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aDogc3RyaW5nID0gcGF0aC5qb2luKFxuICAgICAgICBkYXRhRGlyLFxuICAgICAgICBkYXRhc2V0LmZpbGVuYW1lLFxuICAgICAgKVxuICAgICAgaWYgKCFvcHRpb25zLnNpbGVudCkge1xuICAgICAgICBjb25zb2xlLmxvZyhgUmVvcmdhbml6aW5nICR7b3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aH1gKVxuICAgICAgfVxuXG4gICAgICBjb25zdCBkYXRhc2V0TmFtZSA9IHBhdGguYmFzZW5hbWUoXG4gICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgIFwiLmpzb25cIixcbiAgICAgIClcbiAgICAgIGNsb25lR2l0KGdpdEdyb3VwVXJsLCBkYXRhc2V0TmFtZSwgZGF0YURpcilcblxuICAgICAgY29uc3QgZGF0YXNldFJlb3JnYW5pemVkRGlyID0gcGF0aC5qb2luKGRhdGFEaXIsIGRhdGFzZXROYW1lKVxuICAgICAgY2xlYXJEaXJlY3RvcnkoZGF0YXNldFJlb3JnYW5pemVkRGlyKVxuXG4gICAgICBjb25zdCBkb2N1bWVudHNEaXIgPSBwYXRoLmpvaW4oZGF0YXNldFJlb3JnYW5pemVkRGlyLCBcImRvY3VtZW50c1wiKVxuICAgICAgZnMubWtkaXJTeW5jKGRvY3VtZW50c0RpcilcbiAgICAgIGNvbnN0IGRvc3NpZXJzRGlyID0gcGF0aC5qb2luKGRhdGFzZXRSZW9yZ2FuaXplZERpciwgXCJkb3NzaWVyc1wiKVxuICAgICAgZnMubWtkaXJTeW5jKGRvc3NpZXJzRGlyKVxuXG4gICAgICBzd2l0Y2ggKGRhdGFzZXQuc3RydWN0dXJlKSB7XG4gICAgICAgIGNhc2UgRGF0YXNldFN0cnVjdHVyZS5TaW5nbGVGaWxlOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNvbnN0IG9yaWdpbmFsSnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKFxuICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgY29uc3Qgb3JpZ2luYWxEYXRhOiBhbnkgPSB2YWxpZGF0ZVJhd0RhdGFcbiAgICAgICAgICAgICAgPyBEb3NzaWVyc0xlZ2lzbGF0aWZzUmF3Q29udmVydC50b0Rvc3NpZXJzTGVnaXNsYXRpZnMoXG4gICAgICAgICAgICAgICAgICBvcmlnaW5hbEpzb24sXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICA6IEpTT04ucGFyc2Uob3JpZ2luYWxKc29uKVxuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGRvY3VtZW50IG9mIG9yaWdpbmFsRGF0YS5leHBvcnQudGV4dGVzTGVnaXNsYXRpZnNcbiAgICAgICAgICAgICAgLmRvY3VtZW50KSB7XG4gICAgICAgICAgICAgIHdyaXRlUmVvcmdhbml6ZWRKc29uKGRvY3VtZW50c0RpciwgZG9jdW1lbnQsIHBhdGhGcm9tRG9jdW1lbnRVaWQpXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZvciAoY29uc3QgeyBkb3NzaWVyUGFybGVtZW50YWlyZSB9IG9mIG9yaWdpbmFsRGF0YS5leHBvcnRcbiAgICAgICAgICAgICAgLmRvc3NpZXJzTGVnaXNsYXRpZnMuZG9zc2llcikge1xuICAgICAgICAgICAgICB3cml0ZVJlb3JnYW5pemVkSnNvbihcbiAgICAgICAgICAgICAgICBkb3NzaWVyc0RpcixcbiAgICAgICAgICAgICAgICBkb3NzaWVyUGFybGVtZW50YWlyZSxcbiAgICAgICAgICAgICAgICBwYXRoRnJvbURvc3NpZXJQYXJsZW1lbnRhaXJlVWlkLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgRGF0YXNldFN0cnVjdHVyZS5TZWdtZW50ZWRGaWxlczpcbiAgICAgICAgICB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGRvY3VtZW50U3BsaXRQYXRoIG9mIHdhbGtEaXIoXG4gICAgICAgICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgICAgICAgIFtcImRvY3VtZW50XCJdLFxuICAgICAgICAgICAgKSkge1xuICAgICAgICAgICAgICBjb25zdCBkb2N1bWVudEZpbGVuYW1lID1cbiAgICAgICAgICAgICAgICBkb2N1bWVudFNwbGl0UGF0aFtkb2N1bWVudFNwbGl0UGF0aC5sZW5ndGggLSAxXVxuICAgICAgICAgICAgICBpZiAoIWRvY3VtZW50RmlsZW5hbWUuZW5kc1dpdGgoXCIuanNvblwiKSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc3QgZG9jdW1lbnRPcmlnaW5hbEZpbGVQYXRoID0gcGF0aC5qb2luKFxuICAgICAgICAgICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgICAgICAgICAgLi4uZG9jdW1lbnRTcGxpdFBhdGgsXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgaWYgKG9wdGlvbnMudmVyYm9zZSkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgICAgICAgYCAgUmVvcmdhbml6aW5nIFwiZG9jdW1lbnRcIiBmaWxlOiAke2RvY3VtZW50T3JpZ2luYWxGaWxlUGF0aH3igKZgLFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjb25zdCBkb2N1bWVudE9yaWdpbmFsSnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKFxuICAgICAgICAgICAgICAgIGRvY3VtZW50T3JpZ2luYWxGaWxlUGF0aCxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBjb25zdCBkb2N1bWVudE9yaWdpbmFsOiBhbnkgPSB2YWxpZGF0ZVJhd0RhdGFcbiAgICAgICAgICAgICAgICA/IERvc3NpZXJzTGVnaXNsYXRpZnNSYXdDb252ZXJ0LnRvRG9jdW1lbnQoZG9jdW1lbnRPcmlnaW5hbEpzb24pXG4gICAgICAgICAgICAgICAgOiBKU09OLnBhcnNlKGRvY3VtZW50T3JpZ2luYWxKc29uKVxuICAgICAgICAgICAgICBjb25zdCBkb2N1bWVudCA9IGRvY3VtZW50T3JpZ2luYWwuZG9jdW1lbnRcbiAgICAgICAgICAgICAgd3JpdGVSZW9yZ2FuaXplZEpzb24oZG9jdW1lbnRzRGlyLCBkb2N1bWVudCwgcGF0aEZyb21Eb2N1bWVudFVpZClcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9yIChjb25zdCBkb3NzaWVyUGFybGVtZW50YWlyZVNwbGl0UGF0aCBvZiB3YWxrRGlyKFxuICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICAgICAgICBbXCJkb3NzaWVyUGFybGVtZW50YWlyZVwiXSxcbiAgICAgICAgICAgICkpIHtcbiAgICAgICAgICAgICAgY29uc3QgZG9zc2llclBhcmxlbWVudGFpcmVGaWxlbmFtZSA9XG4gICAgICAgICAgICAgICAgZG9zc2llclBhcmxlbWVudGFpcmVTcGxpdFBhdGhbXG4gICAgICAgICAgICAgICAgICBkb3NzaWVyUGFybGVtZW50YWlyZVNwbGl0UGF0aC5sZW5ndGggLSAxXG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICBpZiAoIWRvc3NpZXJQYXJsZW1lbnRhaXJlRmlsZW5hbWUuZW5kc1dpdGgoXCIuanNvblwiKSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc3QgZG9zc2llclBhcmxlbWVudGFpcmVPcmlnaW5hbEZpbGVQYXRoID0gcGF0aC5qb2luKFxuICAgICAgICAgICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgICAgICAgICAgLi4uZG9zc2llclBhcmxlbWVudGFpcmVTcGxpdFBhdGgsXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgaWYgKG9wdGlvbnMudmVyYm9zZSkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgICAgICAgYCAgUmVvcmdhbml6aW5nIFwiZG9zc2llclBhcmxlbWVudGFpcmVcIiBmaWxlOiAke2Rvc3NpZXJQYXJsZW1lbnRhaXJlT3JpZ2luYWxGaWxlUGF0aH3igKZgLFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjb25zdCBkb3NzaWVyUGFybGVtZW50YWlyZU9yaWdpbmFsSnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKFxuICAgICAgICAgICAgICAgIGRvc3NpZXJQYXJsZW1lbnRhaXJlT3JpZ2luYWxGaWxlUGF0aCxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBjb25zdCBkb3NzaWVyUGFybGVtZW50YWlyZU9yaWdpbmFsOiBhbnkgPSB2YWxpZGF0ZVJhd0RhdGFcbiAgICAgICAgICAgICAgICA/IERvc3NpZXJzTGVnaXNsYXRpZnNSYXdDb252ZXJ0LnRvRG9zc2llclBhcmxlbWVudGFpcmUoXG4gICAgICAgICAgICAgICAgICAgIGRvc3NpZXJQYXJsZW1lbnRhaXJlT3JpZ2luYWxKc29uLFxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIDogSlNPTi5wYXJzZShkb3NzaWVyUGFybGVtZW50YWlyZU9yaWdpbmFsSnNvbilcbiAgICAgICAgICAgICAgY29uc3QgZG9zc2llclBhcmxlbWVudGFpcmUgPVxuICAgICAgICAgICAgICAgIGRvc3NpZXJQYXJsZW1lbnRhaXJlT3JpZ2luYWwuZG9zc2llclBhcmxlbWVudGFpcmVcbiAgICAgICAgICAgICAgd3JpdGVSZW9yZ2FuaXplZEpzb24oXG4gICAgICAgICAgICAgICAgZG9zc2llcnNEaXIsXG4gICAgICAgICAgICAgICAgZG9zc2llclBhcmxlbWVudGFpcmUsXG4gICAgICAgICAgICAgICAgcGF0aEZyb21Eb3NzaWVyUGFybGVtZW50YWlyZVVpZCxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVha1xuICAgICAgfVxuXG4gICAgICBjb21taXRHaXQoZGF0YXNldFJlb3JnYW5pemVkRGlyLCBvcHRpb25zKVxuICAgIH1cbiAgfVxuICBpZiAoZW5hYmxlZERhdGFzZXRzICYgRW5hYmxlZERhdGFzZXRzLlNjcnV0aW5zKSB7XG4gICAgZm9yIChsZXQgZGF0YXNldCBvZiBjaG9zZW5EYXRhc2V0cy5zY3J1dGlucykge1xuICAgICAgY29uc3Qgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aDogc3RyaW5nID0gcGF0aC5qb2luKFxuICAgICAgICBkYXRhRGlyLFxuICAgICAgICBkYXRhc2V0LmZpbGVuYW1lLFxuICAgICAgKVxuICAgICAgaWYgKCFvcHRpb25zLnNpbGVudCkge1xuICAgICAgICBjb25zb2xlLmxvZyhgUmVvcmdhbml6aW5nICR7b3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aH1gKVxuICAgICAgfVxuXG4gICAgICBjb25zdCBkYXRhc2V0TmFtZSA9IHBhdGguYmFzZW5hbWUoXG4gICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgIFwiLmpzb25cIixcbiAgICAgIClcbiAgICAgIGNsb25lR2l0KGdpdEdyb3VwVXJsLCBkYXRhc2V0TmFtZSwgZGF0YURpcilcblxuICAgICAgY29uc3QgZGF0YXNldFJlb3JnYW5pemVkRGlyID0gcGF0aC5qb2luKGRhdGFEaXIsIGRhdGFzZXROYW1lKVxuICAgICAgY2xlYXJEaXJlY3RvcnkoZGF0YXNldFJlb3JnYW5pemVkRGlyKVxuXG4gICAgICBzd2l0Y2ggKGRhdGFzZXQuc3RydWN0dXJlKSB7XG4gICAgICAgIGNhc2UgRGF0YXNldFN0cnVjdHVyZS5TaW5nbGVGaWxlOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNvbnN0IG9yaWdpbmFsSnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKFxuICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgY29uc3Qgb3JpZ2luYWxEYXRhOiBhbnkgPSB2YWxpZGF0ZVJhd0RhdGFcbiAgICAgICAgICAgICAgPyBTY3J1dGluc1Jhd0NvbnZlcnQudG9TY3J1dGlucyhvcmlnaW5hbEpzb24pXG4gICAgICAgICAgICAgIDogSlNPTi5wYXJzZShvcmlnaW5hbEpzb24pXG5cbiAgICAgICAgICAgIGZvciAoY29uc3Qgc2NydXRpbiBvZiBvcmlnaW5hbERhdGEuc2NydXRpbnMuc2NydXRpbikge1xuICAgICAgICAgICAgICB3cml0ZVJlb3JnYW5pemVkSnNvbihcbiAgICAgICAgICAgICAgICBkYXRhc2V0UmVvcmdhbml6ZWREaXIsXG4gICAgICAgICAgICAgICAgc2NydXRpbixcbiAgICAgICAgICAgICAgICBwYXRoRnJvbVNjcnV0aW5VaWQsXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSBEYXRhc2V0U3RydWN0dXJlLlNlZ21lbnRlZEZpbGVzOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGZvciAoY29uc3Qgc2NydXRpblNwbGl0UGF0aCBvZiB3YWxrRGlyKFxuICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICAgICAgKSkge1xuICAgICAgICAgICAgICBjb25zdCBzY3J1dGluRmlsZW5hbWUgPVxuICAgICAgICAgICAgICAgIHNjcnV0aW5TcGxpdFBhdGhbc2NydXRpblNwbGl0UGF0aC5sZW5ndGggLSAxXVxuICAgICAgICAgICAgICBpZiAoIXNjcnV0aW5GaWxlbmFtZS5lbmRzV2l0aChcIi5qc29uXCIpKSB7XG4gICAgICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjb25zdCBzY3J1dGluT3JpZ2luYWxGaWxlUGF0aCA9IHBhdGguam9pbihcbiAgICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICAgICAgICAgIC4uLnNjcnV0aW5TcGxpdFBhdGgsXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgaWYgKG9wdGlvbnMudmVyYm9zZSkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgICAgICAgYCAgUmVvcmdhbml6aW5nIFwic2NydXRpblwiIGZpbGU6ICR7c2NydXRpbk9yaWdpbmFsRmlsZVBhdGh94oCmYCxcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc3Qgc2NydXRpbk9yaWdpbmFsSnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKFxuICAgICAgICAgICAgICAgIHNjcnV0aW5PcmlnaW5hbEZpbGVQYXRoLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIGNvbnN0IHNjcnV0aW5PcmlnaW5hbDogYW55ID0gdmFsaWRhdGVSYXdEYXRhXG4gICAgICAgICAgICAgICAgPyBTY3J1dGluc1Jhd0NvbnZlcnQudG9TY3J1dGluV3JhcHBlcihzY3J1dGluT3JpZ2luYWxKc29uKVxuICAgICAgICAgICAgICAgIDogSlNPTi5wYXJzZShzY3J1dGluT3JpZ2luYWxKc29uKVxuICAgICAgICAgICAgICBjb25zdCBzY3J1dGluID0gc2NydXRpbk9yaWdpbmFsLnNjcnV0aW5cbiAgICAgICAgICAgICAgd3JpdGVSZW9yZ2FuaXplZEpzb24oXG4gICAgICAgICAgICAgICAgZGF0YXNldFJlb3JnYW5pemVkRGlyLFxuICAgICAgICAgICAgICAgIHNjcnV0aW4sXG4gICAgICAgICAgICAgICAgcGF0aEZyb21TY3J1dGluVWlkLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICB9XG5cbiAgICAgIGNvbW1pdEdpdChkYXRhc2V0UmVvcmdhbml6ZWREaXIsIG9wdGlvbnMpXG4gICAgfVxuICB9XG5cbiAgaWYgKGVuYWJsZWREYXRhc2V0cyAmIEVuYWJsZWREYXRhc2V0cy5RdWVzdGlvbnMpIHtcbiAgICBmb3IgKGNvbnN0IGRhdGFzZXQgb2YgZGF0YXNldHMucXVlc3Rpb25zKSB7XG4gICAgICBjb25zdCBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoOiBzdHJpbmcgPSBwYXRoLmpvaW4oXG4gICAgICAgIGRhdGFEaXIsXG4gICAgICAgIGRhdGFzZXQuZmlsZW5hbWUsXG4gICAgICApXG4gICAgICBpZiAoIW9wdGlvbnMuc2lsZW50KSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBSZW9yZ2FuaXppbmcgJHtvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRofWApXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGRhdGFzZXROYW1lID0gcGF0aC5iYXNlbmFtZShcbiAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgXCIuanNvblwiLFxuICAgICAgKVxuICAgICAgY2xvbmVHaXQoZ2l0R3JvdXBVcmwsIGRhdGFzZXROYW1lLCBkYXRhRGlyKVxuXG4gICAgICBjb25zdCBkYXRhc2V0UmVvcmdhbml6ZWREaXIgPSBwYXRoLmpvaW4oZGF0YURpciwgZGF0YXNldE5hbWUpXG4gICAgICBjbGVhckRpcmVjdG9yeShkYXRhc2V0UmVvcmdhbml6ZWREaXIpXG5cbiAgICAgIHN3aXRjaCAoZGF0YXNldC5zdHJ1Y3R1cmUpIHtcbiAgICAgICAgY2FzZSBEYXRhc2V0U3RydWN0dXJlLlNlZ21lbnRlZEZpbGVzOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgcXVlc3Rpb25TcGxpdFBhdGggb2Ygd2Fsa0RpcihcbiAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICkpIHtcbiAgICAgICAgICAgICAgY29uc3QgcXVlc3Rpb25GaWxlbmFtZSA9XG4gICAgICAgICAgICAgICAgcXVlc3Rpb25TcGxpdFBhdGhbcXVlc3Rpb25TcGxpdFBhdGgubGVuZ3RoIC0gMV1cbiAgICAgICAgICAgICAgaWYgKCFxdWVzdGlvbkZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnN0IHF1ZXN0aW9uT3JpZ2luYWxGaWxlUGF0aCA9IHBhdGguam9pbihcbiAgICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICAgICAgICAgIC4uLnF1ZXN0aW9uU3BsaXRQYXRoLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIGlmIChvcHRpb25zLnZlcmJvc2UpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgICAgICAgIGAgIFJlb3JnYW5pemluZyBcInF1ZXN0aW9uXCIgZmlsZTogJHtxdWVzdGlvbk9yaWdpbmFsRmlsZVBhdGh94oCmYCxcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc3QgcXVlc3Rpb25PcmlnaW5hbEpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhcbiAgICAgICAgICAgICAgICBxdWVzdGlvbk9yaWdpbmFsRmlsZVBhdGgsXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIClcblxuICAgICAgICAgICAgICBjb25zdCBxdWVzdGlvbk9yaWdpbmFsOiBhbnkgPSB2YWxpZGF0ZVJhd0RhdGFcbiAgICAgICAgICAgICAgICA/IFF1ZXN0aW9uc1Jhd0NvbnZlcnQudG9RdWVzdGlvbldyYXBwZXIocXVlc3Rpb25PcmlnaW5hbEpzb24pXG4gICAgICAgICAgICAgICAgOiBKU09OLnBhcnNlKHF1ZXN0aW9uT3JpZ2luYWxKc29uKVxuICAgICAgICAgICAgICBjb25zdCBxdWVzdGlvbiA9IHF1ZXN0aW9uT3JpZ2luYWwucXVlc3Rpb25cbiAgICAgICAgICAgICAgd3JpdGVSZW9yZ2FuaXplZEpzb24oXG4gICAgICAgICAgICAgICAgZGF0YXNldFJlb3JnYW5pemVkRGlyLFxuICAgICAgICAgICAgICAgIHF1ZXN0aW9uLFxuICAgICAgICAgICAgICAgIHBhdGhGcm9tUXVlc3Rpb25VaWQsXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWtcbiAgICAgIH1cblxuICAgICAgY29tbWl0R2l0KGRhdGFzZXRSZW9yZ2FuaXplZERpciwgb3B0aW9ucylcbiAgICB9XG4gIH1cblxuICBpZiAoZW5hYmxlZERhdGFzZXRzICYgRW5hYmxlZERhdGFzZXRzLkNvbXB0ZXNSZW5kdXNTZWFuY2VzKSB7XG4gICAgZm9yIChjb25zdCBkYXRhc2V0IG9mIGRhdGFzZXRzLmNvbXB0ZXNSZW5kdXNTZWFuY2VzKSB7XG4gICAgICBjb25zdCBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoOiBzdHJpbmcgPSBwYXRoLmpvaW4oXG4gICAgICAgIGRhdGFEaXIsXG4gICAgICAgIGRhdGFzZXQuZmlsZW5hbWUsXG4gICAgICApXG4gICAgICBpZiAoIW9wdGlvbnMuc2lsZW50KSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBSZW9yZ2FuaXppbmcgJHtvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRofWApXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGRhdGFzZXROYW1lID0gcGF0aC5iYXNlbmFtZShvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLCBcIi54bWxcIilcbiAgICAgIGNsb25lR2l0KGdpdEdyb3VwVXJsLCBkYXRhc2V0TmFtZSwgZGF0YURpcilcblxuICAgICAgY29uc3QgZGF0YXNldFJlb3JnYW5pemVkRGlyID0gcGF0aC5qb2luKGRhdGFEaXIsIGRhdGFzZXROYW1lKVxuICAgICAgY2xlYXJEaXJlY3RvcnkoZGF0YXNldFJlb3JnYW5pemVkRGlyKVxuXG4gICAgICBzd2l0Y2ggKGRhdGFzZXQuc3RydWN0dXJlKSB7XG4gICAgICAgIGNhc2UgRGF0YXNldFN0cnVjdHVyZS5TZWdtZW50ZWRGaWxlczpcbiAgICAgICAgICB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGNvbXB0ZVJlbmR1U2VhbmNlU3BsaXRQYXRoIG9mIHdhbGtEaXIoXG4gICAgICAgICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgICAgICApKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGNvbXB0ZVJlbmR1U2VhbmNlRmlsZW5hbWUgPVxuICAgICAgICAgICAgICAgIGNvbXB0ZVJlbmR1U2VhbmNlU3BsaXRQYXRoW1xuICAgICAgICAgICAgICAgICAgY29tcHRlUmVuZHVTZWFuY2VTcGxpdFBhdGgubGVuZ3RoIC0gMVxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgaWYgKCFjb21wdGVSZW5kdVNlYW5jZUZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnN0IGNvbXB0ZVJlbmR1U2VhbmNlT3JpZ2luYWxGaWxlUGF0aCA9IHBhdGguam9pbihcbiAgICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICAgICAgICAgIC4uLmNvbXB0ZVJlbmR1U2VhbmNlU3BsaXRQYXRoLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIGlmIChvcHRpb25zLnZlcmJvc2UpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgICAgICAgIGAgIFJlb3JnYW5pemluZyBcImNvbXB0ZVJlbmR1U2VhbmNlXCIgZmlsZTogJHtjb21wdGVSZW5kdVNlYW5jZU9yaWdpbmFsRmlsZVBhdGh94oCmYCxcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc3QgY29tcHRlUmVuZHVTZWFuY2VPcmlnaW5hbEpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhcbiAgICAgICAgICAgICAgICBjb21wdGVSZW5kdVNlYW5jZU9yaWdpbmFsRmlsZVBhdGgsXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgY29uc3QgY29tcHRlUmVuZHVTZWFuY2VPcmlnaW5hbDogYW55ID0gdmFsaWRhdGVSYXdEYXRhXG4gICAgICAgICAgICAgICAgPyBDb21wdGVzUmVuZHVzUmF3Q29udmVydC50b0NvbXB0ZVJlbmR1V3JhcHBlcihcbiAgICAgICAgICAgICAgICAgICAgY29tcHRlUmVuZHVTZWFuY2VPcmlnaW5hbEpzb24sXG4gICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgOiBKU09OLnBhcnNlKGNvbXB0ZVJlbmR1U2VhbmNlT3JpZ2luYWxKc29uKVxuXG4gICAgICAgICAgICAgIGNvbnN0IGNvbXB0ZVJlbmR1U2VhbmNlID0gY29tcHRlUmVuZHVTZWFuY2VPcmlnaW5hbC5jb21wdGVSZW5kdVxuICAgICAgICAgICAgICB3cml0ZVJlb3JnYW5pemVkSnNvbihcbiAgICAgICAgICAgICAgICBkYXRhc2V0UmVvcmdhbml6ZWREaXIsXG4gICAgICAgICAgICAgICAgY29tcHRlUmVuZHVTZWFuY2UsXG4gICAgICAgICAgICAgICAgcGF0aEZyb21Db21wdGVSZW5kdVVpZCxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVha1xuICAgICAgfVxuXG4gICAgICBjb21taXRHaXQoZGF0YXNldFJlb3JnYW5pemVkRGlyLCBvcHRpb25zKVxuICAgIH1cbiAgfVxuXG4gIC8vIFJlc3RvcmUgc3RhbmRhcmQgY29udmVyc2lvbiBvZiBkYXRlcyB0byBKU09OLlxuICBEYXRlLnByb3RvdHlwZS50b0pTT04gPSBleGlzdGluZ0RhdGVUb0pzb25cblxuICByZXR1cm4gZXhpdENvZGVcbn1cblxuZnVuY3Rpb24gd3JpdGVBbWVuZGVtZW50UmVvcmdhbml6ZWRKc29uKFxuICBkYXRhc2V0UmVvcmdhbml6ZWREaXI6IHN0cmluZyxcbiAgYW1lbmRlbWVudDoge1xuICAgIHVpZDogc3RyaW5nXG4gICAgdGV4dGVMZWdpc2xhdGlmUmVmOiBzdHJpbmdcbiAgfSxcbik6IHZvaWQge1xuICBjb25zdCB1aWRUZXh0ZUxlZ2lzbGF0aWYgPSBhbWVuZGVtZW50LnRleHRlTGVnaXNsYXRpZlJlZlxuICBhc3NlcnQubm90U3RyaWN0RXF1YWwodWlkVGV4dGVMZWdpc2xhdGlmLCB1bmRlZmluZWQpXG4gIGNvbnN0IHRleHRlTGVnaXNsYXRpZkRpciA9IHBhdGguam9pbihcbiAgICBkYXRhc2V0UmVvcmdhbml6ZWREaXIsXG4gICAgdWlkVGV4dGVMZWdpc2xhdGlmLFxuICApXG4gIGZzLmVuc3VyZURpclN5bmModGV4dGVMZWdpc2xhdGlmRGlyKVxuICBjb25zdCByZW9yZ2FuaXplZEpzb25GaWxlUGF0aCA9IHBhdGguam9pbihcbiAgICB0ZXh0ZUxlZ2lzbGF0aWZEaXIsXG4gICAgYW1lbmRlbWVudC51aWQgKyBcIi5qc29uXCIsXG4gIClcbiAgZnMud3JpdGVGaWxlU3luYyhcbiAgICByZW9yZ2FuaXplZEpzb25GaWxlUGF0aCxcbiAgICBKU09OLnN0cmluZ2lmeShhbWVuZGVtZW50LCBudWxsLCAyKSxcbiAgICB7XG4gICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgfSxcbiAgKVxufVxuXG5mdW5jdGlvbiB3cml0ZVJlb3JnYW5pemVkSnNvbjxUIGV4dGVuZHMgeyB1aWQ6IHN0cmluZyB9PihcbiAgZGlyOiBzdHJpbmcsXG4gIG9iajogVCxcbiAgcGF0aEZyb21VaWQ6IChkaXI6IHN0cmluZywgdWlkOiBzdHJpbmcpID0+IHN0cmluZyxcbik6IHZvaWQge1xuICBjb25zdCBiYXNlbmFtZSA9IHBhdGhGcm9tVWlkKGRpciwgb2JqLnVpZClcbiAgZnMud3JpdGVGaWxlU3luYyhgJHtiYXNlbmFtZX0uanNvbmAsIEpTT04uc3RyaW5naWZ5KG9iaiwgbnVsbCwgMiksIHtcbiAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gIH0pXG59XG5cbmZ1bmN0aW9uIG1haW4oYXJndjogYW55KTogbnVtYmVyIHtcbiAgY29uc3Qgb3B0aW9ucyA9IHBhcnNlQXJncyhhcmd2KVxuICByZXR1cm4gcmVvcmdhbml6ZURhdGEob3B0aW9ucylcbn1cblxuLyogaXN0YW5idWwgaWdub3JlIGlmICovXG5pZiAocHJvY2Vzcy5hcmd2WzFdLmVuZHNXaXRoKFwicmVvcmdhbml6ZV9kYXRhLnRzXCIpKVxuICBwcm9jZXNzLmV4aXQobWFpbihwcm9jZXNzLmFyZ3YpKVxuIl0sIm1hcHBpbmdzIjoiQUFBQSxPQUFPQSxNQUFNLE1BQU0sUUFBUTtBQUMzQixPQUFPQyxlQUFlLE1BQU0sbUJBQW1CO0FBQy9DLE9BQU9DLEVBQUUsTUFBTSxVQUFVO0FBQ3pCLE9BQU9DLElBQUksTUFBTSxNQUFNO0FBQUEsU0FFckJDLFFBQVEsRUFDUkMsZ0JBQWdCLEVBQ2hCQyxlQUFlLEVBQ2ZDLGtCQUFrQixFQUNsQkMsbUJBQW1CO0FBQUEsU0FFWkMsa0JBQWtCLEVBQUVDLGlCQUFpQjtBQUFBLE9BQ3ZDLEtBQUtDLEdBQUc7QUFBQSxTQUNOQyxPQUFPO0FBQUEsU0FFZEMsc0JBQXNCLEVBQ3RCQyxtQkFBbUIsRUFDbkJDLCtCQUErQixFQUMvQkMsbUJBQW1CLEVBQ25CQyxrQkFBa0IsRUFDbEJDLGtCQUFrQjtBQUFBLFNBRVhDLE9BQU8sSUFBSUMsMEJBQTBCO0FBQUEsU0FDckNELE9BQU8sSUFBSUUsaUJBQWlCO0FBQUEsU0FDNUJGLE9BQU8sSUFBSUcscUJBQXFCO0FBQUEsU0FDaENILE9BQU8sSUFBSUksNkJBQTZCO0FBQUEsU0FDeENKLE9BQU8sSUFBSUssa0JBQWtCO0FBQUEsU0FDN0JMLE9BQU8sSUFBSU0sbUJBQW1CO0FBQUEsU0FDOUJOLE9BQU8sSUFBSU8sdUJBQXVCO0FBQUEsU0FFekNDLFdBQVcsRUFDWEMsWUFBWSxFQUNaQyxnQkFBZ0IsRUFDaEJDLGlCQUFpQixFQUNqQkMsWUFBWSxFQUNaQyxZQUFZLEVBQ1pDLGFBQWEsRUFDYkMsb0JBQW9CLEVBQ3BCQyxVQUFVLEVBQ1ZDLG9CQUFvQjtBQUd0QixTQUFTQyxTQUFTQSxDQUFDQyxJQUFjLEVBQU87RUFDdEMsTUFBTUMsa0JBQWtCLEdBQUcsQ0FDekJaLFdBQVcsRUFDWEMsWUFBWSxFQUNaQyxnQkFBZ0IsRUFDaEJDLGlCQUFpQixFQUNqQkMsWUFBWSxFQUNaQyxZQUFZLEVBQ1pDLGFBQWEsRUFDYkMsb0JBQW9CLEVBQ3BCRSxvQkFBb0IsRUFDcEJELFVBQVUsRUFDVjtJQUNFSyxLQUFLLEVBQUUsR0FBRztJQUNWQyxJQUFJLEVBQUUseUJBQXlCO0lBQy9CQyxJQUFJLEVBQUUsaUJBQWlCO0lBQ3ZCQyxJQUFJLEVBQUVDO0VBQ1IsQ0FBQyxDQUNGO0VBQ0QsTUFBTUMsT0FBTyxHQUFHNUMsZUFBZSxDQUFDc0Msa0JBQWtCLEVBQUU7SUFDbERELElBQUksRUFBRUE7RUFDUixDQUFDLENBQUM7RUFDRixPQUFPTyxPQUFPO0FBQ2hCO0FBRUEsU0FBU0MsY0FBY0EsQ0FBQ0MsT0FBZSxFQUFRO0VBQzdDN0MsRUFBRSxDQUFDOEMsYUFBYSxDQUFDRCxPQUFPLENBQUM7RUFDekIsS0FBSyxNQUFNRSxRQUFRLElBQUkvQyxFQUFFLENBQUNnRCxXQUFXLENBQUNILE9BQU8sQ0FBQyxFQUFFO0lBQzlDLElBQUksQ0FBQ0UsUUFBUSxDQUFDRSxVQUFVLENBQUMsR0FBRyxDQUFDLEVBQUU7TUFDN0JqRCxFQUFFLENBQUNrRCxVQUFVLENBQUNqRCxJQUFJLENBQUNrRCxJQUFJLENBQUNOLE9BQU8sRUFBRUUsUUFBUSxDQUFDLENBQUM7SUFDN0M7RUFDRjtBQUNGO0FBRUEsU0FBU0ssUUFBUUEsQ0FDZkMsV0FBK0IsRUFDL0JDLFdBQW1CLEVBQ25CQyxPQUFlLEVBQ1Q7RUFDTjlDLEdBQUcsQ0FBQytDLEtBQUssQ0FBQ0gsV0FBVyxFQUFFQyxXQUFXLEVBQUVDLE9BQU8sQ0FBQztBQUM5QztBQUVBLFNBQVNFLGNBQWNBLENBQUNkLE9BQVksRUFBVTtFQUM1QyxNQUFNWSxPQUFPLEdBQUdaLE9BQU8sQ0FBQ1ksT0FBTztFQUMvQkcsSUFBSSxDQUFDQyxTQUFTLENBQUNDLE1BQU0sR0FBR3BELGlCQUFpQjtFQUN6QyxJQUFJcUQsUUFBUSxHQUFHbEIsT0FBTyxDQUFDbUIsTUFBTSxHQUFHLEVBQUUsR0FBRyxDQUFDO0VBQ3RDLE1BQU1ULFdBQVcsR0FBR1YsT0FBTyxDQUFDYSxLQUFLLEVBQUVPLElBQUksQ0FBQyxDQUFDLENBQUNDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDO0VBQzdELE1BQU1DLGVBQWUsR0FBRyxDQUFDdEIsT0FBTyxDQUFDLGlCQUFpQixDQUFDO0VBQ25ELE1BQU11QixlQUFlLEdBQUc3RCxrQkFBa0IsQ0FBQ3NDLE9BQU8sQ0FBQ3dCLFVBQVUsQ0FBQztFQUM5RCxJQUFJQyxjQUFjLEdBQUc5RCxtQkFBbUIsQ0FBQ0osUUFBUSxFQUFFeUMsT0FBTyxDQUFDMEIsV0FBVyxDQUFDO0VBRXZFLFNBQVNDLFNBQVNBLENBQUNDLHFCQUE2QixFQUFFNUIsT0FBWSxFQUFRO0lBQ3BFLElBQUlBLE9BQU8sQ0FBQ21CLE1BQU0sRUFBRTtNQUNsQixNQUFNVSxTQUFTLEdBQUcvRCxHQUFHLENBQUNnRSxhQUFhLENBQ2pDRixxQkFBcUIsRUFDckIsa0JBQWtCLEVBQ2xCNUIsT0FBTyxDQUFDK0IsTUFDVixDQUFDO01BQ0QsSUFDR2IsUUFBUSxLQUFLLEVBQUUsSUFBSVcsU0FBUyxLQUFLLEVBQUUsSUFDbkNYLFFBQVEsS0FBSyxDQUFDLElBQUlXLFNBQVMsS0FBSyxDQUFDLElBQUlBLFNBQVMsS0FBSyxFQUFHLEVBQ3ZEO1FBQ0FYLFFBQVEsR0FBR1csU0FBUztNQUN0QjtJQUNGO0VBQ0Y7RUFFQSxJQUFJTixlQUFlLEdBQUc5RCxlQUFlLENBQUN1RSxnQkFBZ0IsRUFBRTtJQUN0RCxLQUFLLE1BQU1DLE9BQU8sSUFBSVIsY0FBYyxDQUFDUyxnQkFBZ0IsRUFBRTtNQUNyRCxNQUFNQywrQkFBdUMsR0FBRzdFLElBQUksQ0FBQ2tELElBQUksQ0FDdkRJLE9BQU8sRUFDUHFCLE9BQU8sQ0FBQzdCLFFBQ1YsQ0FBQztNQUNELElBQUksQ0FBQ0osT0FBTyxDQUFDb0MsTUFBTSxFQUFFO1FBQ25CQyxPQUFPLENBQUNDLEdBQUcsQ0FBRSxnQkFBZUgsK0JBQWdDLEVBQUMsQ0FBQztNQUNoRTtNQUVBLE1BQU14QixXQUFXLEdBQUdyRCxJQUFJLENBQUNpRixRQUFRLENBQy9CSiwrQkFBK0IsRUFDL0IsT0FDRixDQUFDO01BQ0QxQixRQUFRLENBQUNDLFdBQVcsRUFBRUMsV0FBVyxFQUFFQyxPQUFPLENBQUM7TUFFM0MsTUFBTWdCLHFCQUFxQixHQUFHdEUsSUFBSSxDQUFDa0QsSUFBSSxDQUFDSSxPQUFPLEVBQUVELFdBQVcsQ0FBQztNQUM3RCxJQUFJWCxPQUFPLENBQUN3QyxJQUFJLEVBQUU7UUFDaEIxRSxHQUFHLENBQUMyRSxZQUFZLENBQUNiLHFCQUFxQixDQUFDO01BQ3pDO01BQ0EzQixjQUFjLENBQUMyQixxQkFBcUIsQ0FBQztNQUVyQyxNQUFNYyxxQkFBcUIsR0FBR3BGLElBQUksQ0FBQ2tELElBQUksQ0FBQ29CLHFCQUFxQixFQUFFLFNBQVMsQ0FBQztNQUN6RXZFLEVBQUUsQ0FBQ3NGLFNBQVMsQ0FBQ0QscUJBQXFCLENBQUM7TUFDbkMsTUFBTUUscUJBQXFCLEdBQUd0RixJQUFJLENBQUNrRCxJQUFJLENBQUNvQixxQkFBcUIsRUFBRSxTQUFTLENBQUM7TUFDekV2RSxFQUFFLENBQUNzRixTQUFTLENBQUNDLHFCQUFxQixDQUFDO01BRW5DLFFBQVFYLE9BQU8sQ0FBQ1ksU0FBUztRQUN2QixLQUFLckYsZ0JBQWdCLENBQUNzRixVQUFVO1VBQzlCO1lBQ0UsTUFBTUMsWUFBb0IsR0FBRzFGLEVBQUUsQ0FBQzJGLFlBQVksQ0FDMUNiLCtCQUErQixFQUMvQjtjQUNFYyxRQUFRLEVBQUU7WUFDWixDQUNGLENBQUM7WUFDRCxNQUFNQyxZQUFpQixHQUFHNUIsZUFBZSxHQUNyQy9DLDBCQUEwQixDQUFDNEUsa0JBQWtCLENBQUNKLFlBQVksQ0FBQyxHQUMzREssSUFBSSxDQUFDQyxLQUFLLENBQUNOLFlBQVksQ0FBQztZQUU1QixLQUFLLE1BQU1PLE1BQU0sSUFBSUosWUFBWSxDQUFDSyxNQUFNLENBQUNDLE9BQU8sQ0FBQ0YsTUFBTSxFQUFFO2NBQ3ZELE1BQU1HLHVCQUErQixHQUFHbkcsSUFBSSxDQUFDa0QsSUFBSSxDQUMvQ2tDLHFCQUFxQixFQUNyQlksTUFBTSxDQUFDSSxHQUFHLENBQUMsT0FBTyxDQUFDLEdBQUcsT0FDeEIsQ0FBQztjQUNEckcsRUFBRSxDQUFDc0csYUFBYSxDQUNkRix1QkFBdUIsRUFDdkJMLElBQUksQ0FBQ1EsU0FBUyxDQUFDTixNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxFQUMvQjtnQkFDRUwsUUFBUSxFQUFFO2NBQ1osQ0FDRixDQUFDO1lBQ0g7WUFFQSxLQUFLLE1BQU1ZLE1BQU0sSUFBSVgsWUFBWSxDQUFDSyxNQUFNLENBQUNPLE9BQU8sQ0FBQ0QsTUFBTSxFQUFFO2NBQ3ZELE1BQU1KLHVCQUErQixHQUFHbkcsSUFBSSxDQUFDa0QsSUFBSSxDQUMvQ29DLHFCQUFxQixFQUNyQmlCLE1BQU0sQ0FBQ0gsR0FBRyxHQUFHLE9BQ2YsQ0FBQztjQUNEckcsRUFBRSxDQUFDc0csYUFBYSxDQUNkRix1QkFBdUIsRUFDdkJMLElBQUksQ0FBQ1EsU0FBUyxDQUFDQyxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxFQUMvQjtnQkFDRVosUUFBUSxFQUFFO2NBQ1osQ0FDRixDQUFDO1lBQ0g7VUFDRjtVQUNBO1FBQ0YsS0FBS3pGLGdCQUFnQixDQUFDdUcsY0FBYztVQUNsQztZQUNFLE1BQU1DLGtCQUVMLEdBQUcsQ0FBQyxDQUFDO1lBQ04sSUFDRTNHLEVBQUUsQ0FBQzRHLFVBQVUsQ0FDWDNHLElBQUksQ0FBQ2tELElBQUksQ0FBQzJCLCtCQUErQixFQUFFLFFBQVEsQ0FDckQsQ0FBQyxFQUNEO2NBQ0EsS0FBSyxNQUFNK0IsZUFBZSxJQUFJbkcsT0FBTyxDQUNuQ29FLCtCQUErQixFQUMvQixDQUFDLFFBQVEsQ0FDWCxDQUFDLEVBQUU7Z0JBQ0QsTUFBTWdDLGNBQWMsR0FDbEJELGVBQWUsQ0FBQ0EsZUFBZSxDQUFDRSxNQUFNLEdBQUcsQ0FBQyxDQUFDO2dCQUM3QyxJQUFJLENBQUNELGNBQWMsQ0FBQ0UsUUFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFO2tCQUNyQztnQkFDRjtnQkFDQSxNQUFNQyxzQkFBc0IsR0FBR2hILElBQUksQ0FBQ2tELElBQUksQ0FDdEMyQiwrQkFBK0IsRUFDL0IsR0FBRytCLGVBQ0wsQ0FBQztnQkFDRCxJQUFJbEUsT0FBTyxDQUFDdUUsT0FBTyxFQUFFO2tCQUNuQmxDLE9BQU8sQ0FBQ0MsR0FBRyxDQUNSLDRCQUEyQmdDLHNCQUF1QixHQUNyRCxDQUFDO2dCQUNIO2dCQUNBLE1BQU1FLGtCQUEwQixHQUFHbkgsRUFBRSxDQUFDMkYsWUFBWSxDQUNoRHNCLHNCQUFzQixFQUN0QjtrQkFDRXJCLFFBQVEsRUFBRTtnQkFDWixDQUNGLENBQUM7Z0JBQ0QsTUFBTXdCLGNBQW1CLEdBQUduRCxlQUFlLEdBQ3ZDL0MsMEJBQTBCLENBQUNtRyxRQUFRLENBQUNGLGtCQUFrQixDQUFDLEdBQ3ZEcEIsSUFBSSxDQUFDQyxLQUFLLENBQUNtQixrQkFBa0IsQ0FBQztnQkFDbEMsTUFBTUcsTUFBTSxHQUFHRixjQUFjLENBQUNFLE1BQU07Z0JBQ3BDLElBQUlDLE9BQU8sR0FBR1osa0JBQWtCLENBQUNXLE1BQU0sQ0FBQ0UsU0FBUyxDQUFDO2dCQUNsRCxJQUFJRCxPQUFPLEtBQUtFLFNBQVMsRUFBRTtrQkFDekJGLE9BQU8sR0FBR1osa0JBQWtCLENBQUNXLE1BQU0sQ0FBQ0UsU0FBUyxDQUFDLEdBQUcsRUFBRTtnQkFDckQ7Z0JBQ0FELE9BQU8sQ0FBQ0csSUFBSSxDQUFDSixNQUFNLENBQUM7Y0FDdEI7Y0FFQSxLQUFLLE1BQU1DLE9BQU8sSUFBSUksTUFBTSxDQUFDQyxNQUFNLENBQUNqQixrQkFBa0IsQ0FBQyxFQUFFO2dCQUN2RFksT0FBTyxDQUFDTSxJQUFJLENBQUMsQ0FBQ0MsQ0FBQyxFQUFFQyxDQUFDLEtBQ2hCRCxDQUFDLENBQUN6QixHQUFHLENBQUNVLE1BQU0sS0FBS2dCLENBQUMsQ0FBQzFCLEdBQUcsQ0FBQ1UsTUFBTSxHQUN6QmUsQ0FBQyxDQUFDekIsR0FBRyxDQUFDMkIsYUFBYSxDQUFDRCxDQUFDLENBQUMxQixHQUFHLENBQUMsR0FDMUJ5QixDQUFDLENBQUN6QixHQUFHLENBQUNVLE1BQU0sR0FBR2dCLENBQUMsQ0FBQzFCLEdBQUcsQ0FBQ1UsTUFDM0IsQ0FBQztjQUNIO1lBQ0Y7WUFFQSxNQUFNa0Isa0JBRUwsR0FBRyxDQUFDLENBQUM7WUFDTixJQUNFakksRUFBRSxDQUFDNEcsVUFBVSxDQUNYM0csSUFBSSxDQUFDa0QsSUFBSSxDQUFDMkIsK0JBQStCLEVBQUUsUUFBUSxDQUNyRCxDQUFDLEVBQ0Q7Y0FDQSxLQUFLLE1BQU1vRCxlQUFlLElBQUl4SCxPQUFPLENBQ25Db0UsK0JBQStCLEVBQy9CLENBQUMsUUFBUSxDQUNYLENBQUMsRUFBRTtnQkFDRCxNQUFNcUQsY0FBYyxHQUNsQkQsZUFBZSxDQUFDQSxlQUFlLENBQUNuQixNQUFNLEdBQUcsQ0FBQyxDQUFDO2dCQUM3QyxJQUFJLENBQUNvQixjQUFjLENBQUNuQixRQUFRLENBQUMsT0FBTyxDQUFDLEVBQUU7a0JBQ3JDO2dCQUNGO2dCQUNBLE1BQU1vQixzQkFBc0IsR0FBR25JLElBQUksQ0FBQ2tELElBQUksQ0FDdEMyQiwrQkFBK0IsRUFDL0IsR0FBR29ELGVBQ0wsQ0FBQztnQkFDRCxJQUFJdkYsT0FBTyxDQUFDdUUsT0FBTyxFQUFFO2tCQUNuQmxDLE9BQU8sQ0FBQ0MsR0FBRyxDQUNSLDRCQUEyQm1ELHNCQUF1QixHQUNyRCxDQUFDO2dCQUNIO2dCQUNBLE1BQU1DLGtCQUEwQixHQUFHckksRUFBRSxDQUFDMkYsWUFBWSxDQUNoRHlDLHNCQUFzQixFQUN0QjtrQkFDRXhDLFFBQVEsRUFBRTtnQkFDWixDQUNGLENBQUM7Z0JBQ0QsTUFBTTBDLGNBQW1CLEdBQUdyRSxlQUFlLEdBQ3ZDL0MsMEJBQTBCLENBQUNxSCxlQUFlLENBQ3hDRixrQkFDRixDQUFDLEdBQ0R0QyxJQUFJLENBQUNDLEtBQUssQ0FBQ3FDLGtCQUFrQixDQUFDO2dCQUNsQyxNQUFNRyxNQUFNLEdBQUdGLGNBQWMsQ0FBQ0UsTUFBTTtnQkFDcEMsSUFBSUMsT0FBTyxHQUFHUixrQkFBa0IsQ0FBQ08sTUFBTSxDQUFDaEIsU0FBUyxDQUFDO2dCQUNsRCxJQUFJaUIsT0FBTyxLQUFLaEIsU0FBUyxFQUFFO2tCQUN6QmdCLE9BQU8sR0FBR1Isa0JBQWtCLENBQUNPLE1BQU0sQ0FBQ2hCLFNBQVMsQ0FBQyxHQUFHLEVBQUU7Z0JBQ3JEO2dCQUNBaUIsT0FBTyxDQUFDZixJQUFJLENBQUNjLE1BQU0sQ0FBQztjQUN0QjtjQUVBLEtBQUssTUFBTUMsT0FBTyxJQUFJZCxNQUFNLENBQUNDLE1BQU0sQ0FBQ0ssa0JBQWtCLENBQUMsRUFBRTtnQkFDdkRRLE9BQU8sQ0FBQ1osSUFBSSxDQUFDLENBQUNDLENBQUMsRUFBRUMsQ0FBQyxLQUNoQkQsQ0FBQyxDQUFDekIsR0FBRyxDQUFDVSxNQUFNLEtBQUtnQixDQUFDLENBQUMxQixHQUFHLENBQUNVLE1BQU0sR0FDekJlLENBQUMsQ0FBQ3pCLEdBQUcsQ0FBQzJCLGFBQWEsQ0FBQ0QsQ0FBQyxDQUFDMUIsR0FBRyxDQUFDLEdBQzFCeUIsQ0FBQyxDQUFDekIsR0FBRyxDQUFDVSxNQUFNLEdBQUdnQixDQUFDLENBQUMxQixHQUFHLENBQUNVLE1BQzNCLENBQUM7Y0FDSDtZQUNGO1lBRUEsS0FBSyxNQUFNMkIsZUFBZSxJQUFJaEksT0FBTyxDQUNuQ29FLCtCQUErQixFQUMvQixDQUFDLFFBQVEsQ0FDWCxDQUFDLEVBQUU7Y0FDRCxNQUFNNkQsY0FBYyxHQUFHRCxlQUFlLENBQUNBLGVBQWUsQ0FBQzNCLE1BQU0sR0FBRyxDQUFDLENBQUM7Y0FDbEUsSUFBSSxDQUFDNEIsY0FBYyxDQUFDM0IsUUFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFO2dCQUNyQztjQUNGO2NBQ0EsTUFBTTRCLHNCQUFzQixHQUFHM0ksSUFBSSxDQUFDa0QsSUFBSSxDQUN0QzJCLCtCQUErQixFQUMvQixHQUFHNEQsZUFDTCxDQUFDO2NBQ0QsSUFBSS9GLE9BQU8sQ0FBQ3VFLE9BQU8sRUFBRTtnQkFDbkJsQyxPQUFPLENBQUNDLEdBQUcsQ0FDUixpQ0FBZ0MyRCxzQkFBdUIsR0FDMUQsQ0FBQztjQUNIO2NBQ0EsTUFBTUMsa0JBQTBCLEdBQUc3SSxFQUFFLENBQUMyRixZQUFZLENBQ2hEaUQsc0JBQXNCLEVBQ3RCO2dCQUNFaEQsUUFBUSxFQUFFO2NBQ1osQ0FDRixDQUFDO2NBQ0QsTUFBTWtELGNBQW1CLEdBQUc3RSxlQUFlLEdBQ3ZDL0MsMEJBQTBCLENBQUM2SCxRQUFRLENBQUNGLGtCQUFrQixDQUFDLEdBQ3ZEOUMsSUFBSSxDQUFDQyxLQUFLLENBQUM2QyxrQkFBa0IsQ0FBQztjQUNsQyxNQUFNNUMsTUFBTSxHQUFHNkMsY0FBYyxDQUFDN0MsTUFBTTtjQUNwQyxNQUFNK0MsU0FBUyxHQUFHL0MsTUFBTSxDQUFDSSxHQUFHLENBQUMsT0FBTyxDQUFDO2NBQ3JDLE1BQU1rQixPQUFPLEdBQUdaLGtCQUFrQixDQUFDcUMsU0FBUyxDQUFDO2NBQzdDLElBQUl6QixPQUFPLEtBQUtFLFNBQVMsRUFBRTtnQkFDekIzSCxNQUFNLENBQUNtSixXQUFXLENBQUNoRCxNQUFNLENBQUNzQixPQUFPLEVBQUVFLFNBQVMsQ0FBQztnQkFDN0N4QixNQUFNLENBQUNzQixPQUFPLEdBQUc7a0JBQUVELE1BQU0sRUFBRUM7Z0JBQVEsQ0FBQztjQUN0QztjQUNBLE1BQU1rQixPQUFPLEdBQUdSLGtCQUFrQixDQUFDZSxTQUFTLENBQUM7Y0FDN0MsSUFBSVAsT0FBTyxLQUFLaEIsU0FBUyxFQUFFO2dCQUN6QjNILE1BQU0sQ0FBQ21KLFdBQVcsQ0FBQ2hELE1BQU0sQ0FBQ3dDLE9BQU8sRUFBRWhCLFNBQVMsQ0FBQztnQkFDN0N4QixNQUFNLENBQUN3QyxPQUFPLEdBQUc7a0JBQUVELE1BQU0sRUFBRUM7Z0JBQVEsQ0FBQztjQUN0QztjQUNBLE1BQU1TLDZCQUFxQyxHQUFHakosSUFBSSxDQUFDa0QsSUFBSSxDQUNyRGtDLHFCQUFxQixFQUNyQjJELFNBQVMsR0FBRyxPQUNkLENBQUM7Y0FDRGhKLEVBQUUsQ0FBQ3NHLGFBQWEsQ0FDZDRDLDZCQUE2QixFQUM3Qm5ELElBQUksQ0FBQ1EsU0FBUyxDQUFDTixNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxFQUMvQjtnQkFDRUwsUUFBUSxFQUFFO2NBQ1osQ0FDRixDQUFDO1lBQ0g7WUFFQSxLQUFLLE1BQU11RCxlQUFlLElBQUl6SSxPQUFPLENBQ25Db0UsK0JBQStCLEVBQy9CLENBQUMsUUFBUSxDQUNYLENBQUMsRUFBRTtjQUNELE1BQU1zRSxjQUFjLEdBQUdELGVBQWUsQ0FBQ0EsZUFBZSxDQUFDcEMsTUFBTSxHQUFHLENBQUMsQ0FBQztjQUNsRSxJQUFJLENBQUNxQyxjQUFjLENBQUNwQyxRQUFRLENBQUMsT0FBTyxDQUFDLEVBQUU7Z0JBQ3JDO2NBQ0Y7Y0FDQSxNQUFNcUMsc0JBQXNCLEdBQUdwSixJQUFJLENBQUNrRCxJQUFJLENBQ3RDMkIsK0JBQStCLEVBQy9CLEdBQUdxRSxlQUNMLENBQUM7Y0FDRCxJQUFJeEcsT0FBTyxDQUFDdUUsT0FBTyxFQUFFO2dCQUNuQmxDLE9BQU8sQ0FBQ0MsR0FBRyxDQUNSLGlDQUFnQ29FLHNCQUF1QixHQUMxRCxDQUFDO2NBQ0g7Y0FDQSxNQUFNQyxrQkFBMEIsR0FBR3RKLEVBQUUsQ0FBQzJGLFlBQVksQ0FDaEQwRCxzQkFBc0IsRUFDdEI7Z0JBQ0V6RCxRQUFRLEVBQUU7Y0FDWixDQUNGLENBQUM7Y0FDRCxNQUFNMkQsY0FBbUIsR0FBR3RGLGVBQWUsR0FDdkMvQywwQkFBMEIsQ0FBQ3NJLFFBQVEsQ0FBQ0Ysa0JBQWtCLENBQUMsR0FDdkR2RCxJQUFJLENBQUNDLEtBQUssQ0FBQ3NELGtCQUFrQixDQUFDO2NBQ2xDLE1BQU05QyxNQUFNLEdBQUcrQyxjQUFjLENBQUMvQyxNQUFNO2NBQ3BDLE1BQU1pRCw2QkFBcUMsR0FBR3hKLElBQUksQ0FBQ2tELElBQUksQ0FDckRvQyxxQkFBcUIsRUFDckJpQixNQUFNLENBQUNILEdBQUcsR0FBRyxPQUNmLENBQUM7Y0FDRHJHLEVBQUUsQ0FBQ3NHLGFBQWEsQ0FDZG1ELDZCQUE2QixFQUM3QjFELElBQUksQ0FBQ1EsU0FBUyxDQUFDQyxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxFQUMvQjtnQkFDRVosUUFBUSxFQUFFO2NBQ1osQ0FDRixDQUFDO1lBQ0g7VUFDRjtVQUNBO01BQ0o7TUFFQXRCLFNBQVMsQ0FBQ0MscUJBQXFCLEVBQUU1QixPQUFPLENBQUM7SUFDM0M7RUFDRjtFQUVBLElBQUl1QixlQUFlLEdBQUc5RCxlQUFlLENBQUNzSixPQUFPLEVBQUU7SUFDN0MsS0FBSyxNQUFNOUUsT0FBTyxJQUFJUixjQUFjLENBQUN1RixPQUFPLEVBQUU7TUFDNUMsTUFBTTdFLCtCQUF1QyxHQUFHN0UsSUFBSSxDQUFDa0QsSUFBSSxDQUN2REksT0FBTyxFQUNQcUIsT0FBTyxDQUFDN0IsUUFDVixDQUFDO01BQ0QsSUFBSSxDQUFDSixPQUFPLENBQUNvQyxNQUFNLEVBQUU7UUFDbkJDLE9BQU8sQ0FBQ0MsR0FBRyxDQUFFLGdCQUFlSCwrQkFBZ0MsRUFBQyxDQUFDO01BQ2hFO01BRUEsTUFBTXhCLFdBQVcsR0FBR3JELElBQUksQ0FBQ2lGLFFBQVEsQ0FDL0JKLCtCQUErQixFQUMvQixPQUNGLENBQUM7TUFDRDFCLFFBQVEsQ0FBQ0MsV0FBVyxFQUFFQyxXQUFXLEVBQUVDLE9BQU8sQ0FBQztNQUUzQyxNQUFNZ0IscUJBQXFCLEdBQUd0RSxJQUFJLENBQUNrRCxJQUFJLENBQUNJLE9BQU8sRUFBRUQsV0FBVyxDQUFDO01BQzdEVixjQUFjLENBQUMyQixxQkFBcUIsQ0FBQztNQUVyQyxRQUFRSyxPQUFPLENBQUNZLFNBQVM7UUFDdkIsS0FBS3JGLGdCQUFnQixDQUFDc0YsVUFBVTtVQUM5QjtZQUNFLE1BQU1DLFlBQW9CLEdBQUcxRixFQUFFLENBQUMyRixZQUFZLENBQzFDYiwrQkFBK0IsRUFDL0I7Y0FDRWMsUUFBUSxFQUFFO1lBQ1osQ0FDRixDQUFDO1lBQ0QsTUFBTUMsWUFBaUIsR0FBRzVCLGVBQWUsR0FDckM5QyxpQkFBaUIsQ0FBQ3lJLFNBQVMsQ0FBQ2xFLFlBQVksQ0FBQyxHQUN6Q0ssSUFBSSxDQUFDQyxLQUFLLENBQUNOLFlBQVksQ0FBQztZQUU1QixLQUFLLE1BQU1tRSxPQUFPLElBQUloRSxZQUFZLENBQUNpRSxRQUFRLENBQUNELE9BQU8sRUFBRTtjQUNuREUsb0JBQW9CLENBQ2xCeEYscUJBQXFCLEVBQ3JCc0YsT0FBTyxFQUNQOUksa0JBQ0YsQ0FBQztZQUNIO1VBQ0Y7VUFDQTtRQUNGLEtBQUtaLGdCQUFnQixDQUFDdUcsY0FBYztVQUNsQztZQUNFLEtBQUssTUFBTXNELGdCQUFnQixJQUFJdEosT0FBTyxDQUNwQ29FLCtCQUErQixFQUMvQixDQUFDLFNBQVMsQ0FDWixDQUFDLEVBQUU7Y0FDRCxNQUFNbUYsZUFBZSxHQUNuQkQsZ0JBQWdCLENBQUNBLGdCQUFnQixDQUFDakQsTUFBTSxHQUFHLENBQUMsQ0FBQztjQUMvQyxJQUFJLENBQUNrRCxlQUFlLENBQUNqRCxRQUFRLENBQUMsT0FBTyxDQUFDLEVBQUU7Z0JBQ3RDO2NBQ0Y7Y0FDQSxNQUFNa0QsdUJBQXVCLEdBQUdqSyxJQUFJLENBQUNrRCxJQUFJLENBQ3ZDMkIsK0JBQStCLEVBQy9CLEdBQUdrRixnQkFDTCxDQUFDO2NBQ0QsSUFBSXJILE9BQU8sQ0FBQ3VFLE9BQU8sRUFBRTtnQkFDbkJsQyxPQUFPLENBQUNDLEdBQUcsQ0FDUixrQ0FBaUNpRix1QkFBd0IsR0FDNUQsQ0FBQztjQUNIO2NBQ0EsTUFBTUMsbUJBQTJCLEdBQUduSyxFQUFFLENBQUMyRixZQUFZLENBQ2pEdUUsdUJBQXVCLEVBQ3ZCO2dCQUNFdEUsUUFBUSxFQUFFO2NBQ1osQ0FDRixDQUFDO2NBQ0QsTUFBTXdFLGVBQW9CLEdBQUduRyxlQUFlLEdBQ3hDOUMsaUJBQWlCLENBQUNrSixTQUFTLENBQUNGLG1CQUFtQixDQUFDLEdBQ2hEcEUsSUFBSSxDQUFDQyxLQUFLLENBQUNtRSxtQkFBbUIsQ0FBQztjQUNuQyxNQUFNTixPQUFPLEdBQUdPLGVBQWUsQ0FBQ1AsT0FBTztjQUN2Q0Usb0JBQW9CLENBQ2xCeEYscUJBQXFCLEVBQ3JCc0YsT0FBTyxFQUNQOUksa0JBQ0YsQ0FBQztZQUNIO1VBQ0Y7VUFDQTtNQUNKO01BRUF1RCxTQUFTLENBQUNDLHFCQUFxQixFQUFFNUIsT0FBTyxDQUFDO0lBQzNDO0VBQ0Y7RUFFQSxJQUFJdUIsZUFBZSxHQUFHOUQsZUFBZSxDQUFDa0ssV0FBVyxFQUFFO0lBQ2pELEtBQUssTUFBTTFGLE9BQU8sSUFBSVIsY0FBYyxDQUFDbUcsV0FBVyxFQUFFO01BQ2hELE1BQU16RiwrQkFBdUMsR0FBRzdFLElBQUksQ0FBQ2tELElBQUksQ0FDdkRJLE9BQU8sRUFDUHFCLE9BQU8sQ0FBQzdCLFFBQ1YsQ0FBQztNQUNELElBQUksQ0FBQ0osT0FBTyxDQUFDb0MsTUFBTSxFQUFFO1FBQ25CQyxPQUFPLENBQUNDLEdBQUcsQ0FBRSxnQkFBZUgsK0JBQWdDLEVBQUMsQ0FBQztNQUNoRTtNQUVBLE1BQU14QixXQUFXLEdBQUdyRCxJQUFJLENBQUNpRixRQUFRLENBQy9CSiwrQkFBK0IsRUFDL0IsT0FDRixDQUFDO01BQ0QxQixRQUFRLENBQUNDLFdBQVcsRUFBRUMsV0FBVyxFQUFFQyxPQUFPLENBQUM7TUFFM0MsTUFBTWdCLHFCQUFxQixHQUFHdEUsSUFBSSxDQUFDa0QsSUFBSSxDQUFDSSxPQUFPLEVBQUVELFdBQVcsQ0FBQztNQUM3RFYsY0FBYyxDQUFDMkIscUJBQXFCLENBQUM7TUFFckMsUUFBUUssT0FBTyxDQUFDWSxTQUFTO1FBQ3ZCLEtBQUtyRixnQkFBZ0IsQ0FBQ3NGLFVBQVU7VUFDOUI7WUFDRSxNQUFNQyxZQUFvQixHQUFHMUYsRUFBRSxDQUFDMkYsWUFBWSxDQUMxQ2IsK0JBQStCLEVBQy9CO2NBQ0VjLFFBQVEsRUFBRTtZQUNaLENBQ0YsQ0FBQztZQUNELE1BQU1DLFlBQWlCLEdBQUc1QixlQUFlLEdBQ3JDN0MscUJBQXFCLENBQUNvSixhQUFhLENBQUM5RSxZQUFZLENBQUMsR0FDakRLLElBQUksQ0FBQ0MsS0FBSyxDQUFDTixZQUFZLENBQUM7WUFFNUIsS0FBSyxNQUFNK0UsZUFBZSxJQUFJNUUsWUFBWSxDQUFDNkUsbUJBQW1CLENBQzNEQyxRQUFRLEVBQUU7Y0FDWCxLQUFLLE1BQU1DLFVBQVUsSUFBSUgsZUFBZSxDQUFDRixXQUFXLEVBQUU7Z0JBQ3BETSw4QkFBOEIsQ0FDNUJ0RyxxQkFBcUIsRUFDckJxRyxVQUNGLENBQUM7Y0FDSDtZQUNGO1VBQ0Y7VUFDQTtRQUNGLEtBQUt6SyxnQkFBZ0IsQ0FBQ3VHLGNBQWM7VUFDbEM7WUFDRSxLQUFLLE1BQU1vRSxtQkFBbUIsSUFBSXBLLE9BQU8sQ0FDdkNvRSwrQkFDRixDQUFDLEVBQUU7Y0FDRCxNQUFNaUcsa0JBQWtCLEdBQ3RCRCxtQkFBbUIsQ0FBQ0EsbUJBQW1CLENBQUMvRCxNQUFNLEdBQUcsQ0FBQyxDQUFDO2NBQ3JELElBQUksQ0FBQ2dFLGtCQUFrQixDQUFDL0QsUUFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFO2dCQUN6QztjQUNGO2NBQ0EsTUFBTWdFLDBCQUEwQixHQUFHL0ssSUFBSSxDQUFDa0QsSUFBSSxDQUMxQzJCLCtCQUErQixFQUMvQixHQUFHZ0csbUJBQ0wsQ0FBQztjQUNELElBQUluSSxPQUFPLENBQUN1RSxPQUFPLEVBQUU7Z0JBQ25CbEMsT0FBTyxDQUFDQyxHQUFHLENBQ1IscUNBQW9DK0YsMEJBQTJCLEdBQ2xFLENBQUM7Y0FDSDtjQUNBLE1BQU1DLHNCQUE4QixHQUFHakwsRUFBRSxDQUFDMkYsWUFBWSxDQUNwRHFGLDBCQUEwQixFQUMxQjtnQkFDRXBGLFFBQVEsRUFBRTtjQUNaLENBQ0YsQ0FBQztjQUNELE1BQU1zRixrQkFBdUIsR0FBR2pILGVBQWUsR0FDM0M3QyxxQkFBcUIsQ0FBQytKLG1CQUFtQixDQUN2Q0Ysc0JBQ0YsQ0FBQyxHQUNEbEYsSUFBSSxDQUFDQyxLQUFLLENBQUNpRixzQkFBc0IsQ0FBQztjQUN0QyxNQUFNTCxVQUFVLEdBQUdNLGtCQUFrQixDQUFDTixVQUFVO2NBQ2hEQyw4QkFBOEIsQ0FBQ3RHLHFCQUFxQixFQUFFcUcsVUFBVSxDQUFDO1lBQ25FO1VBQ0Y7VUFDQTtNQUNKO01BRUF0RyxTQUFTLENBQUNDLHFCQUFxQixFQUFFNUIsT0FBTyxDQUFDO0lBQzNDO0VBQ0Y7RUFFQSxJQUFJdUIsZUFBZSxHQUFHOUQsZUFBZSxDQUFDZ0wsbUJBQW1CLEVBQUU7SUFDekQsS0FBSyxNQUFNeEcsT0FBTyxJQUFJUixjQUFjLENBQUNpSCxtQkFBbUIsRUFBRTtNQUN4RCxNQUFNdkcsK0JBQXVDLEdBQUc3RSxJQUFJLENBQUNrRCxJQUFJLENBQ3ZESSxPQUFPLEVBQ1BxQixPQUFPLENBQUM3QixRQUNWLENBQUM7TUFDRCxJQUFJLENBQUNKLE9BQU8sQ0FBQ29DLE1BQU0sRUFBRTtRQUNuQkMsT0FBTyxDQUFDQyxHQUFHLENBQUUsZ0JBQWVILCtCQUFnQyxFQUFDLENBQUM7TUFDaEU7TUFFQSxNQUFNeEIsV0FBVyxHQUFHckQsSUFBSSxDQUFDaUYsUUFBUSxDQUMvQkosK0JBQStCLEVBQy9CLE9BQ0YsQ0FBQztNQUNEMUIsUUFBUSxDQUFDQyxXQUFXLEVBQUVDLFdBQVcsRUFBRUMsT0FBTyxDQUFDO01BRTNDLE1BQU1nQixxQkFBcUIsR0FBR3RFLElBQUksQ0FBQ2tELElBQUksQ0FBQ0ksT0FBTyxFQUFFRCxXQUFXLENBQUM7TUFDN0RWLGNBQWMsQ0FBQzJCLHFCQUFxQixDQUFDO01BRXJDLE1BQU0rRyxZQUFZLEdBQUdyTCxJQUFJLENBQUNrRCxJQUFJLENBQUNvQixxQkFBcUIsRUFBRSxXQUFXLENBQUM7TUFDbEV2RSxFQUFFLENBQUNzRixTQUFTLENBQUNnRyxZQUFZLENBQUM7TUFDMUIsTUFBTUMsV0FBVyxHQUFHdEwsSUFBSSxDQUFDa0QsSUFBSSxDQUFDb0IscUJBQXFCLEVBQUUsVUFBVSxDQUFDO01BQ2hFdkUsRUFBRSxDQUFDc0YsU0FBUyxDQUFDaUcsV0FBVyxDQUFDO01BRXpCLFFBQVEzRyxPQUFPLENBQUNZLFNBQVM7UUFDdkIsS0FBS3JGLGdCQUFnQixDQUFDc0YsVUFBVTtVQUM5QjtZQUNFLE1BQU1DLFlBQW9CLEdBQUcxRixFQUFFLENBQUMyRixZQUFZLENBQzFDYiwrQkFBK0IsRUFDL0I7Y0FDRWMsUUFBUSxFQUFFO1lBQ1osQ0FDRixDQUFDO1lBQ0QsTUFBTUMsWUFBaUIsR0FBRzVCLGVBQWUsR0FDckM1Qyw2QkFBNkIsQ0FBQ21LLHFCQUFxQixDQUNqRDlGLFlBQ0YsQ0FBQyxHQUNESyxJQUFJLENBQUNDLEtBQUssQ0FBQ04sWUFBWSxDQUFDO1lBRTVCLEtBQUssTUFBTStGLFFBQVEsSUFBSTVGLFlBQVksQ0FBQ0ssTUFBTSxDQUFDd0YsaUJBQWlCLENBQ3pERCxRQUFRLEVBQUU7Y0FDWDFCLG9CQUFvQixDQUFDdUIsWUFBWSxFQUFFRyxRQUFRLEVBQUU3SyxtQkFBbUIsQ0FBQztZQUNuRTtZQUVBLEtBQUssTUFBTTtjQUFFK0s7WUFBcUIsQ0FBQyxJQUFJOUYsWUFBWSxDQUFDSyxNQUFNLENBQ3ZEbUYsbUJBQW1CLENBQUNPLE9BQU8sRUFBRTtjQUM5QjdCLG9CQUFvQixDQUNsQndCLFdBQVcsRUFDWEksb0JBQW9CLEVBQ3BCOUssK0JBQ0YsQ0FBQztZQUNIO1VBQ0Y7VUFDQTtRQUNGLEtBQUtWLGdCQUFnQixDQUFDdUcsY0FBYztVQUNsQztZQUNFLEtBQUssTUFBTW1GLGlCQUFpQixJQUFJbkwsT0FBTyxDQUNyQ29FLCtCQUErQixFQUMvQixDQUFDLFVBQVUsQ0FDYixDQUFDLEVBQUU7Y0FDRCxNQUFNZ0gsZ0JBQWdCLEdBQ3BCRCxpQkFBaUIsQ0FBQ0EsaUJBQWlCLENBQUM5RSxNQUFNLEdBQUcsQ0FBQyxDQUFDO2NBQ2pELElBQUksQ0FBQytFLGdCQUFnQixDQUFDOUUsUUFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFO2dCQUN2QztjQUNGO2NBQ0EsTUFBTStFLHdCQUF3QixHQUFHOUwsSUFBSSxDQUFDa0QsSUFBSSxDQUN4QzJCLCtCQUErQixFQUMvQixHQUFHK0csaUJBQ0wsQ0FBQztjQUNELElBQUlsSixPQUFPLENBQUN1RSxPQUFPLEVBQUU7Z0JBQ25CbEMsT0FBTyxDQUFDQyxHQUFHLENBQ1IsbUNBQWtDOEcsd0JBQXlCLEdBQzlELENBQUM7Y0FDSDtjQUNBLE1BQU1DLG9CQUE0QixHQUFHaE0sRUFBRSxDQUFDMkYsWUFBWSxDQUNsRG9HLHdCQUF3QixFQUN4QjtnQkFDRW5HLFFBQVEsRUFBRTtjQUNaLENBQ0YsQ0FBQztjQUNELE1BQU1xRyxnQkFBcUIsR0FBR2hJLGVBQWUsR0FDekM1Qyw2QkFBNkIsQ0FBQzZLLFVBQVUsQ0FBQ0Ysb0JBQW9CLENBQUMsR0FDOURqRyxJQUFJLENBQUNDLEtBQUssQ0FBQ2dHLG9CQUFvQixDQUFDO2NBQ3BDLE1BQU1QLFFBQVEsR0FBR1EsZ0JBQWdCLENBQUNSLFFBQVE7Y0FDMUMxQixvQkFBb0IsQ0FBQ3VCLFlBQVksRUFBRUcsUUFBUSxFQUFFN0ssbUJBQW1CLENBQUM7WUFDbkU7WUFFQSxLQUFLLE1BQU11TCw2QkFBNkIsSUFBSXpMLE9BQU8sQ0FDakRvRSwrQkFBK0IsRUFDL0IsQ0FBQyxzQkFBc0IsQ0FDekIsQ0FBQyxFQUFFO2NBQ0QsTUFBTXNILDRCQUE0QixHQUNoQ0QsNkJBQTZCLENBQzNCQSw2QkFBNkIsQ0FBQ3BGLE1BQU0sR0FBRyxDQUFDLENBQ3pDO2NBQ0gsSUFBSSxDQUFDcUYsNEJBQTRCLENBQUNwRixRQUFRLENBQUMsT0FBTyxDQUFDLEVBQUU7Z0JBQ25EO2NBQ0Y7Y0FDQSxNQUFNcUYsb0NBQW9DLEdBQUdwTSxJQUFJLENBQUNrRCxJQUFJLENBQ3BEMkIsK0JBQStCLEVBQy9CLEdBQUdxSCw2QkFDTCxDQUFDO2NBQ0QsSUFBSXhKLE9BQU8sQ0FBQ3VFLE9BQU8sRUFBRTtnQkFDbkJsQyxPQUFPLENBQUNDLEdBQUcsQ0FDUiwrQ0FBOENvSCxvQ0FBcUMsR0FDdEYsQ0FBQztjQUNIO2NBQ0EsTUFBTUMsZ0NBQXdDLEdBQUd0TSxFQUFFLENBQUMyRixZQUFZLENBQzlEMEcsb0NBQW9DLEVBQ3BDO2dCQUNFekcsUUFBUSxFQUFFO2NBQ1osQ0FDRixDQUFDO2NBQ0QsTUFBTTJHLDRCQUFpQyxHQUFHdEksZUFBZSxHQUNyRDVDLDZCQUE2QixDQUFDbUwsc0JBQXNCLENBQ2xERixnQ0FDRixDQUFDLEdBQ0R2RyxJQUFJLENBQUNDLEtBQUssQ0FBQ3NHLGdDQUFnQyxDQUFDO2NBQ2hELE1BQU1YLG9CQUFvQixHQUN4QlksNEJBQTRCLENBQUNaLG9CQUFvQjtjQUNuRDVCLG9CQUFvQixDQUNsQndCLFdBQVcsRUFDWEksb0JBQW9CLEVBQ3BCOUssK0JBQ0YsQ0FBQztZQUNIO1VBQ0Y7VUFDQTtNQUNKO01BRUF5RCxTQUFTLENBQUNDLHFCQUFxQixFQUFFNUIsT0FBTyxDQUFDO0lBQzNDO0VBQ0Y7RUFDQSxJQUFJdUIsZUFBZSxHQUFHOUQsZUFBZSxDQUFDcU0sUUFBUSxFQUFFO0lBQzlDLEtBQUssSUFBSTdILE9BQU8sSUFBSVIsY0FBYyxDQUFDc0ksUUFBUSxFQUFFO01BQzNDLE1BQU01SCwrQkFBdUMsR0FBRzdFLElBQUksQ0FBQ2tELElBQUksQ0FDdkRJLE9BQU8sRUFDUHFCLE9BQU8sQ0FBQzdCLFFBQ1YsQ0FBQztNQUNELElBQUksQ0FBQ0osT0FBTyxDQUFDb0MsTUFBTSxFQUFFO1FBQ25CQyxPQUFPLENBQUNDLEdBQUcsQ0FBRSxnQkFBZUgsK0JBQWdDLEVBQUMsQ0FBQztNQUNoRTtNQUVBLE1BQU14QixXQUFXLEdBQUdyRCxJQUFJLENBQUNpRixRQUFRLENBQy9CSiwrQkFBK0IsRUFDL0IsT0FDRixDQUFDO01BQ0QxQixRQUFRLENBQUNDLFdBQVcsRUFBRUMsV0FBVyxFQUFFQyxPQUFPLENBQUM7TUFFM0MsTUFBTWdCLHFCQUFxQixHQUFHdEUsSUFBSSxDQUFDa0QsSUFBSSxDQUFDSSxPQUFPLEVBQUVELFdBQVcsQ0FBQztNQUM3RFYsY0FBYyxDQUFDMkIscUJBQXFCLENBQUM7TUFFckMsUUFBUUssT0FBTyxDQUFDWSxTQUFTO1FBQ3ZCLEtBQUtyRixnQkFBZ0IsQ0FBQ3NGLFVBQVU7VUFDOUI7WUFDRSxNQUFNQyxZQUFvQixHQUFHMUYsRUFBRSxDQUFDMkYsWUFBWSxDQUMxQ2IsK0JBQStCLEVBQy9CO2NBQ0VjLFFBQVEsRUFBRTtZQUNaLENBQ0YsQ0FBQztZQUNELE1BQU1DLFlBQWlCLEdBQUc1QixlQUFlLEdBQ3JDM0Msa0JBQWtCLENBQUNxTCxVQUFVLENBQUNqSCxZQUFZLENBQUMsR0FDM0NLLElBQUksQ0FBQ0MsS0FBSyxDQUFDTixZQUFZLENBQUM7WUFFNUIsS0FBSyxNQUFNa0gsT0FBTyxJQUFJL0csWUFBWSxDQUFDNkcsUUFBUSxDQUFDRSxPQUFPLEVBQUU7Y0FDbkQ3QyxvQkFBb0IsQ0FDbEJ4RixxQkFBcUIsRUFDckJxSSxPQUFPLEVBQ1A1TCxrQkFDRixDQUFDO1lBQ0g7VUFDRjtVQUNBO1FBQ0YsS0FBS2IsZ0JBQWdCLENBQUN1RyxjQUFjO1VBQ2xDO1lBQ0UsS0FBSyxNQUFNbUcsZ0JBQWdCLElBQUluTSxPQUFPLENBQ3BDb0UsK0JBQ0YsQ0FBQyxFQUFFO2NBQ0QsTUFBTWdJLGVBQWUsR0FDbkJELGdCQUFnQixDQUFDQSxnQkFBZ0IsQ0FBQzlGLE1BQU0sR0FBRyxDQUFDLENBQUM7Y0FDL0MsSUFBSSxDQUFDK0YsZUFBZSxDQUFDOUYsUUFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFO2dCQUN0QztjQUNGO2NBQ0EsTUFBTStGLHVCQUF1QixHQUFHOU0sSUFBSSxDQUFDa0QsSUFBSSxDQUN2QzJCLCtCQUErQixFQUMvQixHQUFHK0gsZ0JBQ0wsQ0FBQztjQUNELElBQUlsSyxPQUFPLENBQUN1RSxPQUFPLEVBQUU7Z0JBQ25CbEMsT0FBTyxDQUFDQyxHQUFHLENBQ1Isa0NBQWlDOEgsdUJBQXdCLEdBQzVELENBQUM7Y0FDSDtjQUNBLE1BQU1DLG1CQUEyQixHQUFHaE4sRUFBRSxDQUFDMkYsWUFBWSxDQUNqRG9ILHVCQUF1QixFQUN2QjtnQkFDRW5ILFFBQVEsRUFBRTtjQUNaLENBQ0YsQ0FBQztjQUNELE1BQU1xSCxlQUFvQixHQUFHaEosZUFBZSxHQUN4QzNDLGtCQUFrQixDQUFDNEwsZ0JBQWdCLENBQUNGLG1CQUFtQixDQUFDLEdBQ3hEakgsSUFBSSxDQUFDQyxLQUFLLENBQUNnSCxtQkFBbUIsQ0FBQztjQUNuQyxNQUFNSixPQUFPLEdBQUdLLGVBQWUsQ0FBQ0wsT0FBTztjQUN2QzdDLG9CQUFvQixDQUNsQnhGLHFCQUFxQixFQUNyQnFJLE9BQU8sRUFDUDVMLGtCQUNGLENBQUM7WUFDSDtVQUNGO1VBQ0E7TUFDSjtNQUVBc0QsU0FBUyxDQUFDQyxxQkFBcUIsRUFBRTVCLE9BQU8sQ0FBQztJQUMzQztFQUNGO0VBRUEsSUFBSXVCLGVBQWUsR0FBRzlELGVBQWUsQ0FBQytNLFNBQVMsRUFBRTtJQUMvQyxLQUFLLE1BQU12SSxPQUFPLElBQUkxRSxRQUFRLENBQUNrTixTQUFTLEVBQUU7TUFDeEMsTUFBTXRJLCtCQUF1QyxHQUFHN0UsSUFBSSxDQUFDa0QsSUFBSSxDQUN2REksT0FBTyxFQUNQcUIsT0FBTyxDQUFDN0IsUUFDVixDQUFDO01BQ0QsSUFBSSxDQUFDSixPQUFPLENBQUNvQyxNQUFNLEVBQUU7UUFDbkJDLE9BQU8sQ0FBQ0MsR0FBRyxDQUFFLGdCQUFlSCwrQkFBZ0MsRUFBQyxDQUFDO01BQ2hFO01BRUEsTUFBTXhCLFdBQVcsR0FBR3JELElBQUksQ0FBQ2lGLFFBQVEsQ0FDL0JKLCtCQUErQixFQUMvQixPQUNGLENBQUM7TUFDRDFCLFFBQVEsQ0FBQ0MsV0FBVyxFQUFFQyxXQUFXLEVBQUVDLE9BQU8sQ0FBQztNQUUzQyxNQUFNZ0IscUJBQXFCLEdBQUd0RSxJQUFJLENBQUNrRCxJQUFJLENBQUNJLE9BQU8sRUFBRUQsV0FBVyxDQUFDO01BQzdEVixjQUFjLENBQUMyQixxQkFBcUIsQ0FBQztNQUVyQyxRQUFRSyxPQUFPLENBQUNZLFNBQVM7UUFDdkIsS0FBS3JGLGdCQUFnQixDQUFDdUcsY0FBYztVQUNsQztZQUNFLEtBQUssTUFBTTJHLGlCQUFpQixJQUFJM00sT0FBTyxDQUNyQ29FLCtCQUNGLENBQUMsRUFBRTtjQUNELE1BQU13SSxnQkFBZ0IsR0FDcEJELGlCQUFpQixDQUFDQSxpQkFBaUIsQ0FBQ3RHLE1BQU0sR0FBRyxDQUFDLENBQUM7Y0FDakQsSUFBSSxDQUFDdUcsZ0JBQWdCLENBQUN0RyxRQUFRLENBQUMsT0FBTyxDQUFDLEVBQUU7Z0JBQ3ZDO2NBQ0Y7Y0FDQSxNQUFNdUcsd0JBQXdCLEdBQUd0TixJQUFJLENBQUNrRCxJQUFJLENBQ3hDMkIsK0JBQStCLEVBQy9CLEdBQUd1SSxpQkFDTCxDQUFDO2NBQ0QsSUFBSTFLLE9BQU8sQ0FBQ3VFLE9BQU8sRUFBRTtnQkFDbkJsQyxPQUFPLENBQUNDLEdBQUcsQ0FDUixtQ0FBa0NzSSx3QkFBeUIsR0FDOUQsQ0FBQztjQUNIO2NBQ0EsTUFBTUMsb0JBQTRCLEdBQUd4TixFQUFFLENBQUMyRixZQUFZLENBQ2xENEgsd0JBQXdCLEVBQ3hCO2dCQUNFM0gsUUFBUSxFQUFFO2NBQ1osQ0FDRixDQUFDO2NBRUQsTUFBTTZILGdCQUFxQixHQUFHeEosZUFBZSxHQUN6QzFDLG1CQUFtQixDQUFDbU0saUJBQWlCLENBQUNGLG9CQUFvQixDQUFDLEdBQzNEekgsSUFBSSxDQUFDQyxLQUFLLENBQUN3SCxvQkFBb0IsQ0FBQztjQUNwQyxNQUFNRyxRQUFRLEdBQUdGLGdCQUFnQixDQUFDRSxRQUFRO2NBQzFDNUQsb0JBQW9CLENBQ2xCeEYscUJBQXFCLEVBQ3JCb0osUUFBUSxFQUNSN00sbUJBQ0YsQ0FBQztZQUNIO1VBQ0Y7VUFDQTtNQUNKO01BRUF3RCxTQUFTLENBQUNDLHFCQUFxQixFQUFFNUIsT0FBTyxDQUFDO0lBQzNDO0VBQ0Y7RUFFQSxJQUFJdUIsZUFBZSxHQUFHOUQsZUFBZSxDQUFDd04sb0JBQW9CLEVBQUU7SUFDMUQsS0FBSyxNQUFNaEosT0FBTyxJQUFJMUUsUUFBUSxDQUFDMk4sb0JBQW9CLEVBQUU7TUFDbkQsTUFBTS9JLCtCQUF1QyxHQUFHN0UsSUFBSSxDQUFDa0QsSUFBSSxDQUN2REksT0FBTyxFQUNQcUIsT0FBTyxDQUFDN0IsUUFDVixDQUFDO01BQ0QsSUFBSSxDQUFDSixPQUFPLENBQUNvQyxNQUFNLEVBQUU7UUFDbkJDLE9BQU8sQ0FBQ0MsR0FBRyxDQUFFLGdCQUFlSCwrQkFBZ0MsRUFBQyxDQUFDO01BQ2hFO01BRUEsTUFBTXhCLFdBQVcsR0FBR3JELElBQUksQ0FBQ2lGLFFBQVEsQ0FBQ0osK0JBQStCLEVBQUUsTUFBTSxDQUFDO01BQzFFMUIsUUFBUSxDQUFDQyxXQUFXLEVBQUVDLFdBQVcsRUFBRUMsT0FBTyxDQUFDO01BRTNDLE1BQU1nQixxQkFBcUIsR0FBR3RFLElBQUksQ0FBQ2tELElBQUksQ0FBQ0ksT0FBTyxFQUFFRCxXQUFXLENBQUM7TUFDN0RWLGNBQWMsQ0FBQzJCLHFCQUFxQixDQUFDO01BRXJDLFFBQVFLLE9BQU8sQ0FBQ1ksU0FBUztRQUN2QixLQUFLckYsZ0JBQWdCLENBQUN1RyxjQUFjO1VBQ2xDO1lBQ0UsS0FBSyxNQUFNb0gsMEJBQTBCLElBQUlwTixPQUFPLENBQzlDb0UsK0JBQ0YsQ0FBQyxFQUFFO2NBQ0QsTUFBTWlKLHlCQUF5QixHQUM3QkQsMEJBQTBCLENBQ3hCQSwwQkFBMEIsQ0FBQy9HLE1BQU0sR0FBRyxDQUFDLENBQ3RDO2NBQ0gsSUFBSSxDQUFDZ0gseUJBQXlCLENBQUMvRyxRQUFRLENBQUMsT0FBTyxDQUFDLEVBQUU7Z0JBQ2hEO2NBQ0Y7Y0FDQSxNQUFNZ0gsaUNBQWlDLEdBQUcvTixJQUFJLENBQUNrRCxJQUFJLENBQ2pEMkIsK0JBQStCLEVBQy9CLEdBQUdnSiwwQkFDTCxDQUFDO2NBQ0QsSUFBSW5MLE9BQU8sQ0FBQ3VFLE9BQU8sRUFBRTtnQkFDbkJsQyxPQUFPLENBQUNDLEdBQUcsQ0FDUiw0Q0FBMkMrSSxpQ0FBa0MsR0FDaEYsQ0FBQztjQUNIO2NBQ0EsTUFBTUMsNkJBQXFDLEdBQUdqTyxFQUFFLENBQUMyRixZQUFZLENBQzNEcUksaUNBQWlDLEVBQ2pDO2dCQUNFcEksUUFBUSxFQUFFO2NBQ1osQ0FDRixDQUFDO2NBQ0QsTUFBTXNJLHlCQUE4QixHQUFHakssZUFBZSxHQUNsRHpDLHVCQUF1QixDQUFDMk0sb0JBQW9CLENBQzFDRiw2QkFDRixDQUFDLEdBQ0RsSSxJQUFJLENBQUNDLEtBQUssQ0FBQ2lJLDZCQUE2QixDQUFDO2NBRTdDLE1BQU1HLGlCQUFpQixHQUFHRix5QkFBeUIsQ0FBQ0csV0FBVztjQUMvRHRFLG9CQUFvQixDQUNsQnhGLHFCQUFxQixFQUNyQjZKLGlCQUFpQixFQUNqQnpOLHNCQUNGLENBQUM7WUFDSDtVQUNGO1VBQ0E7TUFDSjtNQUVBMkQsU0FBUyxDQUFDQyxxQkFBcUIsRUFBRTVCLE9BQU8sQ0FBQztJQUMzQztFQUNGOztFQUVBO0VBQ0FlLElBQUksQ0FBQ0MsU0FBUyxDQUFDQyxNQUFNLEdBQUdyRCxrQkFBa0I7RUFFMUMsT0FBT3NELFFBQVE7QUFDakI7QUFFQSxTQUFTZ0gsOEJBQThCQSxDQUNyQ3RHLHFCQUE2QixFQUM3QnFHLFVBR0MsRUFDSztFQUNOLE1BQU0wRCxrQkFBa0IsR0FBRzFELFVBQVUsQ0FBQzJELGtCQUFrQjtFQUN4RHpPLE1BQU0sQ0FBQzBPLGNBQWMsQ0FBQ0Ysa0JBQWtCLEVBQUU3RyxTQUFTLENBQUM7RUFDcEQsTUFBTWdILGtCQUFrQixHQUFHeE8sSUFBSSxDQUFDa0QsSUFBSSxDQUNsQ29CLHFCQUFxQixFQUNyQitKLGtCQUNGLENBQUM7RUFDRHRPLEVBQUUsQ0FBQzhDLGFBQWEsQ0FBQzJMLGtCQUFrQixDQUFDO0VBQ3BDLE1BQU1ySSx1QkFBdUIsR0FBR25HLElBQUksQ0FBQ2tELElBQUksQ0FDdkNzTCxrQkFBa0IsRUFDbEI3RCxVQUFVLENBQUN2RSxHQUFHLEdBQUcsT0FDbkIsQ0FBQztFQUNEckcsRUFBRSxDQUFDc0csYUFBYSxDQUNkRix1QkFBdUIsRUFDdkJMLElBQUksQ0FBQ1EsU0FBUyxDQUFDcUUsVUFBVSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsRUFDbkM7SUFDRWhGLFFBQVEsRUFBRTtFQUNaLENBQ0YsQ0FBQztBQUNIO0FBRUEsU0FBU21FLG9CQUFvQkEsQ0FDM0IyRSxHQUFXLEVBQ1hDLEdBQU0sRUFDTkMsV0FBaUQsRUFDM0M7RUFDTixNQUFNMUosUUFBUSxHQUFHMEosV0FBVyxDQUFDRixHQUFHLEVBQUVDLEdBQUcsQ0FBQ3RJLEdBQUcsQ0FBQztFQUMxQ3JHLEVBQUUsQ0FBQ3NHLGFBQWEsQ0FBRSxHQUFFcEIsUUFBUyxPQUFNLEVBQUVhLElBQUksQ0FBQ1EsU0FBUyxDQUFDb0ksR0FBRyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsRUFBRTtJQUNqRS9JLFFBQVEsRUFBRTtFQUNaLENBQUMsQ0FBQztBQUNKO0FBRUEsU0FBU2lKLElBQUlBLENBQUN6TSxJQUFTLEVBQVU7RUFDL0IsTUFBTU8sT0FBTyxHQUFHUixTQUFTLENBQUNDLElBQUksQ0FBQztFQUMvQixPQUFPcUIsY0FBYyxDQUFDZCxPQUFPLENBQUM7QUFDaEM7O0FBRUE7QUFDQSxJQUFJbU0sT0FBTyxDQUFDMU0sSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDNEUsUUFBUSxDQUFDLG9CQUFvQixDQUFDLEVBQ2hEOEgsT0FBTyxDQUFDQyxJQUFJLENBQUNGLElBQUksQ0FBQ0MsT0FBTyxDQUFDMU0sSUFBSSxDQUFDLENBQUMifQ==
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tricoteuses/assemblee",
|
|
3
|
-
"version": "1.9.
|
|
3
|
+
"version": "1.9.9",
|
|
4
4
|
"description": "Retrieve, clean up & handle French Assemblée nationale's open data",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"Assemblée nationale",
|
|
@@ -160,7 +160,7 @@
|
|
|
160
160
|
"babel-plugin-inline-dotenv": "^1.7.0",
|
|
161
161
|
"chai": "^5.1.0",
|
|
162
162
|
"eslint": "^8.57.1",
|
|
163
|
-
"fetch-mock": "^
|
|
163
|
+
"fetch-mock": "^12.0.2",
|
|
164
164
|
"mocha": "^10.0.0",
|
|
165
165
|
"nyc": "^17.0.0",
|
|
166
166
|
"prettier": "^3.0.0",
|