@tricoteuses/assemblee 1.7.0 → 1.7.2
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/README.md +9 -27
- package/lib/bugs/acteur-00010/plugin.test.js +4 -4
- package/lib/bugs/acteur-00010/plugin.test.mjs +1 -1
- package/lib/bugs/acteur-00010.js +15 -16
- package/lib/bugs/acteur-00010.mjs +1 -1
- package/lib/bugs/agenda-00002/plugin.test.js +4 -4
- package/lib/bugs/agenda-00002/plugin.test.mjs +1 -1
- package/lib/bugs/agenda-00002.js +27 -28
- package/lib/bugs/agenda-00002.mjs +3 -3
- package/lib/bugs/agenda-00008/plugin.test.js +4 -4
- package/lib/bugs/agenda-00008/plugin.test.mjs +1 -1
- package/lib/bugs/agenda-00008.js +15 -16
- package/lib/bugs/agenda-00008.mjs +1 -1
- package/lib/bugs/agenda-00011/plugin.test.js +5 -5
- package/lib/bugs/agenda-00011/plugin.test.mjs +1 -1
- package/lib/bugs/agenda-00011.js +21 -22
- package/lib/bugs/agenda-00011.mjs +3 -3
- package/lib/bugs.js +17 -19
- package/lib/bugs.mjs +3 -3
- package/lib/cleaners/actes_legislatifs.js +5 -5
- package/lib/cleaners/acteurs.js +5 -5
- package/lib/cleaners/acteurs.mjs +1 -1
- package/lib/cleaners/amendements.js +5 -5
- package/lib/cleaners/documents.js +5 -5
- package/lib/cleaners/dossiers_legislatifs.js +5 -5
- package/lib/cleaners/organes.js +2 -2
- package/lib/cleaners/reunions.js +5 -5
- package/lib/cleaners/scrutins.js +8 -8
- package/lib/cleaners/xml.js +8 -8
- package/lib/cleaners/xml.mjs +1 -1
- package/lib/datasets.d.ts +2 -2
- package/lib/datasets.js +53 -132
- package/lib/datasets.mjs +40 -118
- package/lib/dates.js +1 -2
- package/lib/dossiers_legislatifs.js +8 -8
- package/lib/file_systems.js +18 -16
- package/lib/file_systems.mjs +6 -5
- package/lib/git.d.ts +1 -0
- package/lib/git.js +21 -5
- package/lib/git.mjs +16 -1
- package/lib/inserters.js +3 -3
- package/lib/loaders.d.ts +14 -40
- package/lib/loaders.js +580 -1086
- package/lib/loaders.mjs +110 -353
- package/lib/parsers/documents.js +10 -10
- package/lib/parsers/documents.mjs +1 -1
- package/lib/parsers/recherche_amendements.js +17 -15
- package/lib/parsers/recherche_amendements.mjs +1 -1
- package/lib/raw_types/acteurs_et_organes.js +9 -9
- package/lib/raw_types/acteurs_et_organes.mjs +1 -1
- package/lib/raw_types/agendas.js +9 -9
- package/lib/raw_types/agendas.mjs +1 -1
- package/lib/raw_types/amendements.js +9 -9
- package/lib/raw_types/amendements.mjs +1 -1
- package/lib/raw_types/debats.d.ts +26 -78
- package/lib/raw_types/debats.js +49 -242
- package/lib/raw_types/debats.mjs +41 -234
- package/lib/raw_types/dossiers_legislatifs.js +9 -9
- package/lib/raw_types/dossiers_legislatifs.mjs +1 -1
- package/lib/raw_types/questions.js +9 -9
- package/lib/raw_types/questions.mjs +1 -1
- package/lib/raw_types/scrutins.js +9 -9
- package/lib/raw_types/scrutins.mjs +1 -1
- package/lib/scripts/bugs_helper.js +17 -18
- package/lib/scripts/bugs_helper.mjs +3 -3
- package/lib/scripts/clean_reorganized_data.js +183 -561
- package/lib/scripts/clean_reorganized_data.mjs +111 -410
- package/lib/scripts/diff_amendements.js +11 -24
- package/lib/scripts/diff_amendements.mjs +3 -17
- package/lib/scripts/document_dossiers_legislatifs.js +24 -27
- package/lib/scripts/document_dossiers_legislatifs.mjs +3 -3
- package/lib/scripts/get_today_reunions.js +5 -8
- package/lib/scripts/get_today_reunions.mjs +3 -7
- package/lib/scripts/merge_scrutins.js +11 -24
- package/lib/scripts/merge_scrutins.mjs +3 -17
- package/lib/scripts/parse_textes_lois.js +8 -38
- package/lib/scripts/parse_textes_lois.mjs +3 -33
- package/lib/scripts/raw_types_from_amendements.js +14 -27
- package/lib/scripts/raw_types_from_amendements.mjs +3 -17
- package/lib/scripts/reorganize_data.js +204 -456
- package/lib/scripts/reorganize_data.mjs +68 -260
- package/lib/scripts/retrieve_deputes_photos.d.ts +3 -1
- package/lib/scripts/retrieve_deputes_photos.js +146 -172
- package/lib/scripts/retrieve_deputes_photos.mjs +74 -98
- package/lib/scripts/retrieve_documents.js +207 -156
- package/lib/scripts/retrieve_documents.mjs +116 -128
- package/lib/scripts/retrieve_open_data.js +272 -249
- package/lib/scripts/retrieve_open_data.mjs +109 -123
- package/lib/scripts/retrieve_pending_amendments.js +16 -67
- package/lib/scripts/retrieve_pending_amendments.mjs +4 -55
- package/lib/scripts/retrieve_senateurs_photos.js +20 -77
- package/lib/scripts/retrieve_senateurs_photos.mjs +5 -61
- package/lib/scripts/retrieve_textes_lois.js +18 -46
- package/lib/scripts/retrieve_textes_lois.mjs +3 -33
- package/lib/scripts/shared/cli_helpers.d.ts +66 -0
- package/lib/scripts/shared/cli_helpers.js +90 -0
- package/lib/scripts/shared/cli_helpers.mjs +72 -0
- package/lib/scripts/test_iter_load.d.ts +1 -0
- package/lib/scripts/test_iter_load.js +154 -0
- package/lib/scripts/test_iter_load.mjs +71 -0
- package/lib/scripts/test_load.js +4 -15
- package/lib/scripts/test_load.mjs +3 -14
- package/lib/scripts/test_load_big_files.js +4 -15
- package/lib/scripts/test_load_big_files.mjs +3 -14
- package/lib/scripts/validate_json.js +15 -16
- package/lib/scripts/validate_json.mjs +3 -3
- package/lib/types/acteurs_et_organes.js +9 -9
- package/lib/types/acteurs_et_organes.mjs +1 -1
- package/lib/types/agendas.js +9 -9
- package/lib/types/agendas.mjs +1 -1
- package/lib/types/amendements.js +9 -9
- package/lib/types/amendements.mjs +1 -1
- package/lib/types/debats.d.ts +27 -79
- package/lib/types/debats.js +48 -241
- package/lib/types/debats.mjs +40 -233
- package/lib/types/dossiers_legislatifs.js +9 -9
- package/lib/types/dossiers_legislatifs.mjs +1 -1
- package/lib/types/legislatures.d.ts +4 -4
- package/lib/types/legislatures.js +5 -5
- package/lib/types/legislatures.mjs +5 -5
- package/lib/types/questions.js +9 -9
- package/lib/types/questions.mjs +1 -1
- package/lib/types/scrutins.js +9 -9
- package/lib/types/scrutins.mjs +1 -1
- package/lib/urls.js +2 -2
- package/lib/urls.mjs +1 -1
- package/package.json +9 -7
|
@@ -11,26 +11,23 @@ require("core-js/modules/es.array.slice.js");
|
|
|
11
11
|
require("core-js/modules/es.function.name.js");
|
|
12
12
|
require("core-js/modules/es.object.define-property.js");
|
|
13
13
|
require("core-js/modules/es.object.get-own-property-descriptor.js");
|
|
14
|
+
require("core-js/modules/es.object.to-string.js");
|
|
14
15
|
require("core-js/modules/es.regexp.to-string.js");
|
|
15
16
|
require("core-js/modules/es.string.iterator.js");
|
|
16
17
|
require("core-js/modules/es.weak-map.js");
|
|
17
18
|
require("core-js/modules/web.dom-collections.iterator.js");
|
|
18
19
|
require("core-js/modules/es.array.concat.js");
|
|
19
20
|
require("core-js/modules/es.array.join.js");
|
|
20
|
-
require("core-js/modules/es.array.map.js");
|
|
21
|
-
require("core-js/modules/es.array.reduce.js");
|
|
22
21
|
require("core-js/modules/es.array.sort.js");
|
|
23
22
|
require("core-js/modules/es.date.to-json.js");
|
|
24
23
|
require("core-js/modules/es.date.to-string.js");
|
|
25
|
-
require("core-js/modules/es.number.constructor.js");
|
|
26
24
|
require("core-js/modules/es.object.keys.js");
|
|
27
|
-
require("core-js/modules/es.object.to-string.js");
|
|
28
25
|
require("core-js/modules/es.object.values.js");
|
|
29
26
|
require("core-js/modules/es.regexp.exec.js");
|
|
30
27
|
require("core-js/modules/es.string.ends-with.js");
|
|
31
28
|
require("core-js/modules/es.string.replace.js");
|
|
29
|
+
require("core-js/modules/es.string.starts-with.js");
|
|
32
30
|
require("core-js/modules/es.string.trim.js");
|
|
33
|
-
require("core-js/modules/web.url.to-json.js");
|
|
34
31
|
var _assert = _interopRequireDefault(require("assert"));
|
|
35
32
|
var _child_process = require("child_process");
|
|
36
33
|
var _commandLineArgs = _interopRequireDefault(require("command-line-args"));
|
|
@@ -48,140 +45,90 @@ var _dossiers_legislatifs = require("../raw_types/dossiers_legislatifs");
|
|
|
48
45
|
var _scrutins = require("../raw_types/scrutins");
|
|
49
46
|
var _questions = require("../raw_types/questions");
|
|
50
47
|
var _debats = require("../raw_types/debats");
|
|
48
|
+
var _cli_helpers = require("./shared/cli_helpers");
|
|
51
49
|
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
|
|
52
|
-
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { "default": e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u &&
|
|
53
|
-
function _interopRequireDefault(
|
|
54
|
-
function _toConsumableArray(
|
|
50
|
+
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { "default": e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n["default"] = e, t && t.set(e, n), n; }
|
|
51
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; }
|
|
52
|
+
function _toConsumableArray(r) { return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread(); }
|
|
55
53
|
function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
56
|
-
function _iterableToArray(
|
|
57
|
-
function _arrayWithoutHoles(
|
|
58
|
-
function _createForOfIteratorHelper(
|
|
59
|
-
function _unsupportedIterableToArray(
|
|
60
|
-
function _arrayLikeToArray(
|
|
54
|
+
function _iterableToArray(r) { if ("undefined" != typeof Symbol && null != r[Symbol.iterator] || null != r["@@iterator"]) return Array.from(r); }
|
|
55
|
+
function _arrayWithoutHoles(r) { if (Array.isArray(r)) return _arrayLikeToArray(r); }
|
|
56
|
+
function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }
|
|
57
|
+
function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
|
|
58
|
+
function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
|
|
61
59
|
function parseArgs(argv) {
|
|
62
|
-
var optionsDefinitions = [{
|
|
63
|
-
alias: "C",
|
|
64
|
-
help: "clone repositories from given group (or organization) git URL",
|
|
65
|
-
name: "clone",
|
|
66
|
-
type: String
|
|
67
|
-
}, {
|
|
68
|
-
alias: "c",
|
|
69
|
-
help: "commit split files",
|
|
70
|
-
name: "commit",
|
|
71
|
-
type: Boolean
|
|
72
|
-
}, {
|
|
73
|
-
alias: "k",
|
|
74
|
-
defaultValue: ["All"],
|
|
75
|
-
help: "categories of datasets to reorganize",
|
|
76
|
-
multiple: true,
|
|
77
|
-
name: "categories",
|
|
78
|
-
type: String
|
|
79
|
-
}, {
|
|
80
|
-
alias: "l",
|
|
81
|
-
help: "legislatures of categories of datasets to retrieve; leave empty or use 0 for all",
|
|
82
|
-
multiple: true,
|
|
83
|
-
name: "legislature",
|
|
84
|
-
type: Number
|
|
85
|
-
}, {
|
|
86
|
-
alias: "p",
|
|
87
|
-
help: "pull repositories before proceeding",
|
|
88
|
-
name: "pull",
|
|
89
|
-
type: Boolean
|
|
90
|
-
}, {
|
|
91
|
-
alias: "r",
|
|
92
|
-
help: "push commit to given remote",
|
|
93
|
-
multiple: true,
|
|
94
|
-
name: "remote",
|
|
95
|
-
type: String
|
|
96
|
-
}, {
|
|
97
|
-
alias: "s",
|
|
98
|
-
help: "don't log anything",
|
|
99
|
-
name: "silent",
|
|
100
|
-
type: Boolean
|
|
101
|
-
}, {
|
|
60
|
+
var optionsDefinitions = [_cli_helpers.cloneOption, _cli_helpers.commitOption, _cli_helpers.categoriesOption, _cli_helpers.legislatureOption, _cli_helpers.remoteOption, _cli_helpers.silentOption, _cli_helpers.verboseOption, _cli_helpers.dataDirDefaultOption, _cli_helpers.pullOption, {
|
|
102
61
|
alias: "V",
|
|
103
62
|
help: "don't validate raw data",
|
|
104
63
|
name: "no-validate-raw",
|
|
105
64
|
type: Boolean
|
|
106
|
-
}, {
|
|
107
|
-
alias: "v",
|
|
108
|
-
help: "verbose logs",
|
|
109
|
-
name: "verbose",
|
|
110
|
-
type: Boolean
|
|
111
|
-
}, {
|
|
112
|
-
defaultOption: true,
|
|
113
|
-
help: "directory containing Assemblée open data files",
|
|
114
|
-
name: "dataDir",
|
|
115
|
-
type: String
|
|
116
65
|
}];
|
|
117
66
|
var options = (0, _commandLineArgs["default"])(optionsDefinitions, {
|
|
118
67
|
argv: argv
|
|
119
68
|
});
|
|
120
69
|
return options;
|
|
121
70
|
}
|
|
71
|
+
function clearDirectory(dirPath) {
|
|
72
|
+
_fsExtra["default"].ensureDirSync(dirPath);
|
|
73
|
+
var _iterator = _createForOfIteratorHelper(_fsExtra["default"].readdirSync(dirPath)),
|
|
74
|
+
_step;
|
|
75
|
+
try {
|
|
76
|
+
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
77
|
+
var filename = _step.value;
|
|
78
|
+
if (!filename.startsWith(".")) {
|
|
79
|
+
_fsExtra["default"].removeSync(_path["default"].join(dirPath, filename));
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
} catch (err) {
|
|
83
|
+
_iterator.e(err);
|
|
84
|
+
} finally {
|
|
85
|
+
_iterator.f();
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
function cloneGit(gitGroupUrl, datasetName, dataDir) {
|
|
89
|
+
if (gitGroupUrl !== undefined) {
|
|
90
|
+
(0, _child_process.execSync)("git clone ".concat(gitGroupUrl, "/").concat(datasetName, ".git"), {
|
|
91
|
+
cwd: dataDir,
|
|
92
|
+
env: process.env,
|
|
93
|
+
encoding: "utf-8",
|
|
94
|
+
stdio: ["ignore", "ignore", "pipe"]
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
}
|
|
122
98
|
function reorganizeData(options) {
|
|
99
|
+
var _options$clone;
|
|
123
100
|
var dataDir = options.dataDir;
|
|
124
101
|
Date.prototype.toJSON = _dates.patchedDateToJson;
|
|
125
102
|
var exitCode = options.commit ? 10 : 0;
|
|
126
|
-
var gitGroupUrl = options.clone ?
|
|
103
|
+
var gitGroupUrl = (_options$clone = options.clone) === null || _options$clone === void 0 ? void 0 : _options$clone.trim().replace(/\/+$/, "");
|
|
127
104
|
var validateRawData = !options["no-validate-raw"];
|
|
128
|
-
options.categories
|
|
129
|
-
return _assert["default"].notStrictEqual(_datasets.EnabledDatasets[datasetName], undefined, "Unknown name of dataset: ".concat(datasetName));
|
|
130
|
-
});
|
|
131
|
-
var enabledDatasets = options.categories.reduce(function (enabledDatasets, datasetName) {
|
|
132
|
-
return enabledDatasets | _datasets.EnabledDatasets[datasetName];
|
|
133
|
-
}, _datasets.EnabledDatasets.None);
|
|
105
|
+
var enabledDatasets = (0, _datasets.getEnabledDatasets)(options.categories);
|
|
134
106
|
var chosenDatasets = (0, _datasets.filterByLegislature)(_datasets.datasets, options.legislature);
|
|
107
|
+
function commitGit(datasetReorganizedDir, options) {
|
|
108
|
+
if (options.commit) {
|
|
109
|
+
var errorCode = git.commitAndPush(datasetReorganizedDir, "Nouvelle moisson", options.remote);
|
|
110
|
+
if (exitCode === 10 && errorCode !== 10 || exitCode === 0 && errorCode !== 0 && errorCode !== 10) {
|
|
111
|
+
exitCode = errorCode;
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
}
|
|
135
115
|
if (enabledDatasets & _datasets.EnabledDatasets.ActeursEtOrganes) {
|
|
136
|
-
var
|
|
137
|
-
|
|
116
|
+
var _iterator2 = _createForOfIteratorHelper(chosenDatasets.acteursEtOrganes),
|
|
117
|
+
_step2;
|
|
138
118
|
try {
|
|
139
|
-
for (
|
|
140
|
-
var dataset =
|
|
119
|
+
for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
|
|
120
|
+
var dataset = _step2.value;
|
|
141
121
|
var originalJsonDirectoryOrFilePath = _path["default"].join(dataDir, dataset.filename);
|
|
142
122
|
if (!options.silent) {
|
|
143
123
|
console.log("Reorganizing ".concat(originalJsonDirectoryOrFilePath));
|
|
144
124
|
}
|
|
145
125
|
var datasetName = _path["default"].basename(originalJsonDirectoryOrFilePath, ".json");
|
|
146
|
-
|
|
147
|
-
(0, _child_process.execSync)("git clone ".concat(gitGroupUrl, "/").concat(datasetName, ".git"), {
|
|
148
|
-
cwd: dataDir,
|
|
149
|
-
env: process.env,
|
|
150
|
-
encoding: "utf-8",
|
|
151
|
-
stdio: ["ignore", "ignore", "pipe"]
|
|
152
|
-
});
|
|
153
|
-
}
|
|
126
|
+
cloneGit(gitGroupUrl, datasetName, dataDir);
|
|
154
127
|
var datasetReorganizedDir = _path["default"].join(dataDir, datasetName);
|
|
155
128
|
if (options.pull) {
|
|
156
|
-
(
|
|
157
|
-
cwd: datasetReorganizedDir,
|
|
158
|
-
env: process.env,
|
|
159
|
-
encoding: "utf-8",
|
|
160
|
-
stdio: ["ignore", "ignore", "pipe"]
|
|
161
|
-
});
|
|
162
|
-
(0, _child_process.execSync)("git pull --rebase", {
|
|
163
|
-
cwd: datasetReorganizedDir,
|
|
164
|
-
env: process.env,
|
|
165
|
-
encoding: "utf-8",
|
|
166
|
-
stdio: ["ignore", "ignore", "pipe"]
|
|
167
|
-
});
|
|
168
|
-
}
|
|
169
|
-
_fsExtra["default"].ensureDirSync(datasetReorganizedDir);
|
|
170
|
-
var _iterator2 = _createForOfIteratorHelper(_fsExtra["default"].readdirSync(datasetReorganizedDir)),
|
|
171
|
-
_step2;
|
|
172
|
-
try {
|
|
173
|
-
for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
|
|
174
|
-
var filename = _step2.value;
|
|
175
|
-
if (filename[0] === ".") {
|
|
176
|
-
continue;
|
|
177
|
-
}
|
|
178
|
-
_fsExtra["default"].removeSync(_path["default"].join(datasetReorganizedDir, filename));
|
|
179
|
-
}
|
|
180
|
-
} catch (err) {
|
|
181
|
-
_iterator2.e(err);
|
|
182
|
-
} finally {
|
|
183
|
-
_iterator2.f();
|
|
129
|
+
git.resetAndPull(datasetReorganizedDir);
|
|
184
130
|
}
|
|
131
|
+
clearDirectory(datasetReorganizedDir);
|
|
185
132
|
var acteursReorganizedDir = _path["default"].join(datasetReorganizedDir, "acteurs");
|
|
186
133
|
_fsExtra["default"].mkdirSync(acteursReorganizedDir);
|
|
187
134
|
var organesReorganizedDir = _path["default"].join(datasetReorganizedDir, "organes");
|
|
@@ -321,22 +268,22 @@ function reorganizeData(options) {
|
|
|
321
268
|
});
|
|
322
269
|
var acteurOriginal = validateRawData ? _acteurs_et_organes.Convert.toActeur(acteurOriginalJson) : JSON.parse(acteurOriginalJson);
|
|
323
270
|
var _acteur = acteurOriginal.acteur;
|
|
324
|
-
var
|
|
325
|
-
var _deports2 = deportsByActeurUid[
|
|
271
|
+
var acteurUid = _acteur.uid["#text"];
|
|
272
|
+
var _deports2 = deportsByActeurUid[acteurUid];
|
|
326
273
|
if (_deports2 !== undefined) {
|
|
327
274
|
_assert["default"].strictEqual(_acteur.deports, undefined);
|
|
328
275
|
_acteur.deports = {
|
|
329
276
|
deport: _deports2
|
|
330
277
|
};
|
|
331
278
|
}
|
|
332
|
-
var _mandats2 = mandatsByActeurUid[
|
|
279
|
+
var _mandats2 = mandatsByActeurUid[acteurUid];
|
|
333
280
|
if (_mandats2 !== undefined) {
|
|
334
281
|
_assert["default"].strictEqual(_acteur.mandats, undefined);
|
|
335
282
|
_acteur.mandats = {
|
|
336
283
|
mandat: _mandats2
|
|
337
284
|
};
|
|
338
285
|
}
|
|
339
|
-
var acteurReorganizedJsonFilePath = _path["default"].join(acteursReorganizedDir,
|
|
286
|
+
var acteurReorganizedJsonFilePath = _path["default"].join(acteursReorganizedDir, acteurUid + ".json");
|
|
340
287
|
_fsExtra["default"].writeFileSync(acteurReorganizedJsonFilePath, JSON.stringify(_acteur, null, 2), {
|
|
341
288
|
encoding: "utf8"
|
|
342
289
|
});
|
|
@@ -377,17 +324,12 @@ function reorganizeData(options) {
|
|
|
377
324
|
}
|
|
378
325
|
break;
|
|
379
326
|
}
|
|
380
|
-
|
|
381
|
-
var errorCode = git.commitAndPush(datasetReorganizedDir, "Nouvelle moisson", options.remote);
|
|
382
|
-
if (exitCode === 10 && errorCode !== 10 || exitCode === 0 && errorCode !== 0 && errorCode !== 10) {
|
|
383
|
-
exitCode = errorCode;
|
|
384
|
-
}
|
|
385
|
-
}
|
|
327
|
+
commitGit(datasetReorganizedDir, options);
|
|
386
328
|
}
|
|
387
329
|
} catch (err) {
|
|
388
|
-
|
|
330
|
+
_iterator2.e(err);
|
|
389
331
|
} finally {
|
|
390
|
-
|
|
332
|
+
_iterator2.f();
|
|
391
333
|
}
|
|
392
334
|
}
|
|
393
335
|
if (enabledDatasets & _datasets.EnabledDatasets.Agendas) {
|
|
@@ -401,31 +343,9 @@ function reorganizeData(options) {
|
|
|
401
343
|
console.log("Reorganizing ".concat(_originalJsonDirectoryOrFilePath));
|
|
402
344
|
}
|
|
403
345
|
var _datasetName = _path["default"].basename(_originalJsonDirectoryOrFilePath, ".json");
|
|
404
|
-
|
|
405
|
-
(0, _child_process.execSync)("git clone ".concat(gitGroupUrl, "/").concat(_datasetName, ".git"), {
|
|
406
|
-
cwd: dataDir,
|
|
407
|
-
env: process.env,
|
|
408
|
-
encoding: "utf-8",
|
|
409
|
-
stdio: ["ignore", "ignore", "pipe"]
|
|
410
|
-
});
|
|
411
|
-
}
|
|
346
|
+
cloneGit(gitGroupUrl, _datasetName, dataDir);
|
|
412
347
|
var _datasetReorganizedDir = _path["default"].join(dataDir, _datasetName);
|
|
413
|
-
|
|
414
|
-
var _iterator10 = _createForOfIteratorHelper(_fsExtra["default"].readdirSync(_datasetReorganizedDir)),
|
|
415
|
-
_step10;
|
|
416
|
-
try {
|
|
417
|
-
for (_iterator10.s(); !(_step10 = _iterator10.n()).done;) {
|
|
418
|
-
var _filename = _step10.value;
|
|
419
|
-
if (_filename[0] === ".") {
|
|
420
|
-
continue;
|
|
421
|
-
}
|
|
422
|
-
_fsExtra["default"].removeSync(_path["default"].join(_datasetReorganizedDir, _filename));
|
|
423
|
-
}
|
|
424
|
-
} catch (err) {
|
|
425
|
-
_iterator10.e(err);
|
|
426
|
-
} finally {
|
|
427
|
-
_iterator10.f();
|
|
428
|
-
}
|
|
348
|
+
clearDirectory(_datasetReorganizedDir);
|
|
429
349
|
switch (_dataset.structure) {
|
|
430
350
|
case _datasets.DatasetStructure.SingleFile:
|
|
431
351
|
{
|
|
@@ -433,27 +353,27 @@ function reorganizeData(options) {
|
|
|
433
353
|
encoding: "utf8"
|
|
434
354
|
});
|
|
435
355
|
var _originalData = validateRawData ? _agendas.Convert.toAgendas(_originalJson) : JSON.parse(_originalJson);
|
|
436
|
-
var
|
|
437
|
-
|
|
356
|
+
var _iterator10 = _createForOfIteratorHelper(_originalData.reunions.reunion),
|
|
357
|
+
_step10;
|
|
438
358
|
try {
|
|
439
|
-
for (
|
|
440
|
-
var reunion =
|
|
441
|
-
|
|
359
|
+
for (_iterator10.s(); !(_step10 = _iterator10.n()).done;) {
|
|
360
|
+
var reunion = _step10.value;
|
|
361
|
+
writeReorganizedJson(_datasetReorganizedDir, reunion, _loaders.pathFromReunionUid);
|
|
442
362
|
}
|
|
443
363
|
} catch (err) {
|
|
444
|
-
|
|
364
|
+
_iterator10.e(err);
|
|
445
365
|
} finally {
|
|
446
|
-
|
|
366
|
+
_iterator10.f();
|
|
447
367
|
}
|
|
448
368
|
}
|
|
449
369
|
break;
|
|
450
370
|
case _datasets.DatasetStructure.SegmentedFiles:
|
|
451
371
|
{
|
|
452
|
-
var
|
|
453
|
-
|
|
372
|
+
var _iterator11 = _createForOfIteratorHelper((0, _file_systems.walkDir)(_originalJsonDirectoryOrFilePath, ["reunion"])),
|
|
373
|
+
_step11;
|
|
454
374
|
try {
|
|
455
|
-
for (
|
|
456
|
-
var reunionSplitPath =
|
|
375
|
+
for (_iterator11.s(); !(_step11 = _iterator11.n()).done;) {
|
|
376
|
+
var reunionSplitPath = _step11.value;
|
|
457
377
|
var reunionFilename = reunionSplitPath[reunionSplitPath.length - 1];
|
|
458
378
|
if (!reunionFilename.endsWith(".json")) {
|
|
459
379
|
continue;
|
|
@@ -467,22 +387,17 @@ function reorganizeData(options) {
|
|
|
467
387
|
});
|
|
468
388
|
var reunionOriginal = validateRawData ? _agendas.Convert.toReunion(reunionOriginalJson) : JSON.parse(reunionOriginalJson);
|
|
469
389
|
var _reunion = reunionOriginal.reunion;
|
|
470
|
-
|
|
390
|
+
writeReorganizedJson(_datasetReorganizedDir, _reunion, _loaders.pathFromReunionUid);
|
|
471
391
|
}
|
|
472
392
|
} catch (err) {
|
|
473
|
-
|
|
393
|
+
_iterator11.e(err);
|
|
474
394
|
} finally {
|
|
475
|
-
|
|
395
|
+
_iterator11.f();
|
|
476
396
|
}
|
|
477
397
|
}
|
|
478
398
|
break;
|
|
479
399
|
}
|
|
480
|
-
|
|
481
|
-
var _errorCode = git.commitAndPush(_datasetReorganizedDir, "Nouvelle moisson", options.remote);
|
|
482
|
-
if (exitCode === 10 && _errorCode !== 10 || exitCode === 0 && _errorCode !== 0 && _errorCode !== 10) {
|
|
483
|
-
exitCode = _errorCode;
|
|
484
|
-
}
|
|
485
|
-
}
|
|
400
|
+
commitGit(_datasetReorganizedDir, options);
|
|
486
401
|
}
|
|
487
402
|
} catch (err) {
|
|
488
403
|
_iterator9.e(err);
|
|
@@ -491,41 +406,19 @@ function reorganizeData(options) {
|
|
|
491
406
|
}
|
|
492
407
|
}
|
|
493
408
|
if (enabledDatasets & _datasets.EnabledDatasets.Amendements) {
|
|
494
|
-
var
|
|
495
|
-
|
|
409
|
+
var _iterator12 = _createForOfIteratorHelper(chosenDatasets.amendements),
|
|
410
|
+
_step12;
|
|
496
411
|
try {
|
|
497
|
-
for (
|
|
498
|
-
var _dataset2 =
|
|
412
|
+
for (_iterator12.s(); !(_step12 = _iterator12.n()).done;) {
|
|
413
|
+
var _dataset2 = _step12.value;
|
|
499
414
|
var _originalJsonDirectoryOrFilePath2 = _path["default"].join(dataDir, _dataset2.filename);
|
|
500
415
|
if (!options.silent) {
|
|
501
416
|
console.log("Reorganizing ".concat(_originalJsonDirectoryOrFilePath2));
|
|
502
417
|
}
|
|
503
418
|
var _datasetName2 = _path["default"].basename(_originalJsonDirectoryOrFilePath2, ".json");
|
|
504
|
-
|
|
505
|
-
(0, _child_process.execSync)("git clone ".concat(gitGroupUrl, "/").concat(_datasetName2, ".git"), {
|
|
506
|
-
cwd: dataDir,
|
|
507
|
-
env: process.env,
|
|
508
|
-
encoding: "utf-8",
|
|
509
|
-
stdio: ["ignore", "ignore", "pipe"]
|
|
510
|
-
});
|
|
511
|
-
}
|
|
419
|
+
cloneGit(gitGroupUrl, _datasetName2, dataDir);
|
|
512
420
|
var _datasetReorganizedDir2 = _path["default"].join(dataDir, _datasetName2);
|
|
513
|
-
|
|
514
|
-
var _iterator14 = _createForOfIteratorHelper(_fsExtra["default"].readdirSync(_datasetReorganizedDir2)),
|
|
515
|
-
_step14;
|
|
516
|
-
try {
|
|
517
|
-
for (_iterator14.s(); !(_step14 = _iterator14.n()).done;) {
|
|
518
|
-
var _filename2 = _step14.value;
|
|
519
|
-
if (_filename2[0] === ".") {
|
|
520
|
-
continue;
|
|
521
|
-
}
|
|
522
|
-
_fsExtra["default"].removeSync(_path["default"].join(_datasetReorganizedDir2, _filename2));
|
|
523
|
-
}
|
|
524
|
-
} catch (err) {
|
|
525
|
-
_iterator14.e(err);
|
|
526
|
-
} finally {
|
|
527
|
-
_iterator14.f();
|
|
528
|
-
}
|
|
421
|
+
clearDirectory(_datasetReorganizedDir2);
|
|
529
422
|
switch (_dataset2.structure) {
|
|
530
423
|
case _datasets.DatasetStructure.SingleFile:
|
|
531
424
|
{
|
|
@@ -533,38 +426,38 @@ function reorganizeData(options) {
|
|
|
533
426
|
encoding: "utf8"
|
|
534
427
|
});
|
|
535
428
|
var _originalData2 = validateRawData ? _amendements.Convert.toAmendements(_originalJson2) : JSON.parse(_originalJson2);
|
|
536
|
-
var
|
|
537
|
-
|
|
429
|
+
var _iterator13 = _createForOfIteratorHelper(_originalData2.textesEtAmendements.texteleg),
|
|
430
|
+
_step13;
|
|
538
431
|
try {
|
|
539
|
-
for (
|
|
540
|
-
var texteLegislatif =
|
|
541
|
-
var
|
|
542
|
-
|
|
432
|
+
for (_iterator13.s(); !(_step13 = _iterator13.n()).done;) {
|
|
433
|
+
var texteLegislatif = _step13.value;
|
|
434
|
+
var _iterator14 = _createForOfIteratorHelper(texteLegislatif.amendements),
|
|
435
|
+
_step14;
|
|
543
436
|
try {
|
|
544
|
-
for (
|
|
545
|
-
var amendement =
|
|
437
|
+
for (_iterator14.s(); !(_step14 = _iterator14.n()).done;) {
|
|
438
|
+
var amendement = _step14.value;
|
|
546
439
|
writeAmendementReorganizedJson(_datasetReorganizedDir2, amendement);
|
|
547
440
|
}
|
|
548
441
|
} catch (err) {
|
|
549
|
-
|
|
442
|
+
_iterator14.e(err);
|
|
550
443
|
} finally {
|
|
551
|
-
|
|
444
|
+
_iterator14.f();
|
|
552
445
|
}
|
|
553
446
|
}
|
|
554
447
|
} catch (err) {
|
|
555
|
-
|
|
448
|
+
_iterator13.e(err);
|
|
556
449
|
} finally {
|
|
557
|
-
|
|
450
|
+
_iterator13.f();
|
|
558
451
|
}
|
|
559
452
|
}
|
|
560
453
|
break;
|
|
561
454
|
case _datasets.DatasetStructure.SegmentedFiles:
|
|
562
455
|
{
|
|
563
|
-
var
|
|
564
|
-
|
|
456
|
+
var _iterator15 = _createForOfIteratorHelper((0, _file_systems.walkDir)(_originalJsonDirectoryOrFilePath2)),
|
|
457
|
+
_step15;
|
|
565
458
|
try {
|
|
566
|
-
for (
|
|
567
|
-
var amendementSplitPath =
|
|
459
|
+
for (_iterator15.s(); !(_step15 = _iterator15.n()).done;) {
|
|
460
|
+
var amendementSplitPath = _step15.value;
|
|
568
461
|
var amendementFilename = amendementSplitPath[amendementSplitPath.length - 1];
|
|
569
462
|
if (!amendementFilename.endsWith(".json")) {
|
|
570
463
|
continue;
|
|
@@ -581,62 +474,35 @@ function reorganizeData(options) {
|
|
|
581
474
|
writeAmendementReorganizedJson(_datasetReorganizedDir2, _amendement);
|
|
582
475
|
}
|
|
583
476
|
} catch (err) {
|
|
584
|
-
|
|
477
|
+
_iterator15.e(err);
|
|
585
478
|
} finally {
|
|
586
|
-
|
|
479
|
+
_iterator15.f();
|
|
587
480
|
}
|
|
588
481
|
}
|
|
589
482
|
break;
|
|
590
483
|
}
|
|
591
|
-
|
|
592
|
-
var _errorCode2 = git.commitAndPush(_datasetReorganizedDir2, "Nouvelle moisson", options.remote);
|
|
593
|
-
if (exitCode === 10 && _errorCode2 !== 10 || exitCode === 0 && _errorCode2 !== 0 && _errorCode2 !== 10) {
|
|
594
|
-
exitCode = _errorCode2;
|
|
595
|
-
}
|
|
596
|
-
}
|
|
484
|
+
commitGit(_datasetReorganizedDir2, options);
|
|
597
485
|
}
|
|
598
486
|
} catch (err) {
|
|
599
|
-
|
|
487
|
+
_iterator12.e(err);
|
|
600
488
|
} finally {
|
|
601
|
-
|
|
489
|
+
_iterator12.f();
|
|
602
490
|
}
|
|
603
491
|
}
|
|
604
492
|
if (enabledDatasets & _datasets.EnabledDatasets.DossiersLegislatifs) {
|
|
605
|
-
var
|
|
606
|
-
|
|
493
|
+
var _iterator16 = _createForOfIteratorHelper(chosenDatasets.dossiersLegislatifs),
|
|
494
|
+
_step16;
|
|
607
495
|
try {
|
|
608
|
-
for (
|
|
609
|
-
var _dataset3 =
|
|
496
|
+
for (_iterator16.s(); !(_step16 = _iterator16.n()).done;) {
|
|
497
|
+
var _dataset3 = _step16.value;
|
|
610
498
|
var _originalJsonDirectoryOrFilePath3 = _path["default"].join(dataDir, _dataset3.filename);
|
|
611
499
|
if (!options.silent) {
|
|
612
500
|
console.log("Reorganizing ".concat(_originalJsonDirectoryOrFilePath3));
|
|
613
501
|
}
|
|
614
502
|
var _datasetName3 = _path["default"].basename(_originalJsonDirectoryOrFilePath3, ".json");
|
|
615
|
-
|
|
616
|
-
(0, _child_process.execSync)("git clone ".concat(gitGroupUrl, "/").concat(_datasetName3, ".git"), {
|
|
617
|
-
cwd: dataDir,
|
|
618
|
-
env: process.env,
|
|
619
|
-
encoding: "utf-8",
|
|
620
|
-
stdio: ["ignore", "ignore", "pipe"]
|
|
621
|
-
});
|
|
622
|
-
}
|
|
503
|
+
cloneGit(gitGroupUrl, _datasetName3, dataDir);
|
|
623
504
|
var _datasetReorganizedDir3 = _path["default"].join(dataDir, _datasetName3);
|
|
624
|
-
|
|
625
|
-
var _iterator19 = _createForOfIteratorHelper(_fsExtra["default"].readdirSync(_datasetReorganizedDir3)),
|
|
626
|
-
_step19;
|
|
627
|
-
try {
|
|
628
|
-
for (_iterator19.s(); !(_step19 = _iterator19.n()).done;) {
|
|
629
|
-
var _filename3 = _step19.value;
|
|
630
|
-
if (_filename3[0] === ".") {
|
|
631
|
-
continue;
|
|
632
|
-
}
|
|
633
|
-
_fsExtra["default"].removeSync(_path["default"].join(_datasetReorganizedDir3, _filename3));
|
|
634
|
-
}
|
|
635
|
-
} catch (err) {
|
|
636
|
-
_iterator19.e(err);
|
|
637
|
-
} finally {
|
|
638
|
-
_iterator19.f();
|
|
639
|
-
}
|
|
505
|
+
clearDirectory(_datasetReorganizedDir3);
|
|
640
506
|
var documentsDir = _path["default"].join(_datasetReorganizedDir3, "documents");
|
|
641
507
|
_fsExtra["default"].mkdirSync(documentsDir);
|
|
642
508
|
var dossiersDir = _path["default"].join(_datasetReorganizedDir3, "dossiers");
|
|
@@ -648,39 +514,39 @@ function reorganizeData(options) {
|
|
|
648
514
|
encoding: "utf8"
|
|
649
515
|
});
|
|
650
516
|
var _originalData3 = validateRawData ? _dossiers_legislatifs.Convert.toDossiersLegislatifs(_originalJson3) : JSON.parse(_originalJson3);
|
|
651
|
-
var
|
|
652
|
-
|
|
517
|
+
var _iterator17 = _createForOfIteratorHelper(_originalData3["export"].textesLegislatifs.document),
|
|
518
|
+
_step17;
|
|
653
519
|
try {
|
|
654
|
-
for (
|
|
655
|
-
var document =
|
|
656
|
-
|
|
520
|
+
for (_iterator17.s(); !(_step17 = _iterator17.n()).done;) {
|
|
521
|
+
var document = _step17.value;
|
|
522
|
+
writeReorganizedJson(documentsDir, document, _loaders.pathFromDocumentUid);
|
|
657
523
|
}
|
|
658
524
|
} catch (err) {
|
|
659
|
-
|
|
525
|
+
_iterator17.e(err);
|
|
660
526
|
} finally {
|
|
661
|
-
|
|
527
|
+
_iterator17.f();
|
|
662
528
|
}
|
|
663
|
-
var
|
|
664
|
-
|
|
529
|
+
var _iterator18 = _createForOfIteratorHelper(_originalData3["export"].dossiersLegislatifs.dossier),
|
|
530
|
+
_step18;
|
|
665
531
|
try {
|
|
666
|
-
for (
|
|
667
|
-
var dossierParlementaire =
|
|
668
|
-
|
|
532
|
+
for (_iterator18.s(); !(_step18 = _iterator18.n()).done;) {
|
|
533
|
+
var dossierParlementaire = _step18.value.dossierParlementaire;
|
|
534
|
+
writeReorganizedJson(dossiersDir, dossierParlementaire, _loaders.pathFromDossierParlementaireUid);
|
|
669
535
|
}
|
|
670
536
|
} catch (err) {
|
|
671
|
-
|
|
537
|
+
_iterator18.e(err);
|
|
672
538
|
} finally {
|
|
673
|
-
|
|
539
|
+
_iterator18.f();
|
|
674
540
|
}
|
|
675
541
|
}
|
|
676
542
|
break;
|
|
677
543
|
case _datasets.DatasetStructure.SegmentedFiles:
|
|
678
544
|
{
|
|
679
|
-
var
|
|
680
|
-
|
|
545
|
+
var _iterator19 = _createForOfIteratorHelper((0, _file_systems.walkDir)(_originalJsonDirectoryOrFilePath3, ["document"])),
|
|
546
|
+
_step19;
|
|
681
547
|
try {
|
|
682
|
-
for (
|
|
683
|
-
var documentSplitPath =
|
|
548
|
+
for (_iterator19.s(); !(_step19 = _iterator19.n()).done;) {
|
|
549
|
+
var documentSplitPath = _step19.value;
|
|
684
550
|
var documentFilename = documentSplitPath[documentSplitPath.length - 1];
|
|
685
551
|
if (!documentFilename.endsWith(".json")) {
|
|
686
552
|
continue;
|
|
@@ -694,18 +560,18 @@ function reorganizeData(options) {
|
|
|
694
560
|
});
|
|
695
561
|
var documentOriginal = validateRawData ? _dossiers_legislatifs.Convert.toDocument(documentOriginalJson) : JSON.parse(documentOriginalJson);
|
|
696
562
|
var _document = documentOriginal.document;
|
|
697
|
-
|
|
563
|
+
writeReorganizedJson(documentsDir, _document, _loaders.pathFromDocumentUid);
|
|
698
564
|
}
|
|
699
565
|
} catch (err) {
|
|
700
|
-
|
|
566
|
+
_iterator19.e(err);
|
|
701
567
|
} finally {
|
|
702
|
-
|
|
568
|
+
_iterator19.f();
|
|
703
569
|
}
|
|
704
|
-
var
|
|
705
|
-
|
|
570
|
+
var _iterator20 = _createForOfIteratorHelper((0, _file_systems.walkDir)(_originalJsonDirectoryOrFilePath3, ["dossierParlementaire"])),
|
|
571
|
+
_step20;
|
|
706
572
|
try {
|
|
707
|
-
for (
|
|
708
|
-
var dossierParlementaireSplitPath =
|
|
573
|
+
for (_iterator20.s(); !(_step20 = _iterator20.n()).done;) {
|
|
574
|
+
var dossierParlementaireSplitPath = _step20.value;
|
|
709
575
|
var dossierParlementaireFilename = dossierParlementaireSplitPath[dossierParlementaireSplitPath.length - 1];
|
|
710
576
|
if (!dossierParlementaireFilename.endsWith(".json")) {
|
|
711
577
|
continue;
|
|
@@ -719,65 +585,38 @@ function reorganizeData(options) {
|
|
|
719
585
|
});
|
|
720
586
|
var dossierParlementaireOriginal = validateRawData ? _dossiers_legislatifs.Convert.toDossierParlementaire(dossierParlementaireOriginalJson) : JSON.parse(dossierParlementaireOriginalJson);
|
|
721
587
|
var _dossierParlementaire = dossierParlementaireOriginal.dossierParlementaire;
|
|
722
|
-
|
|
588
|
+
writeReorganizedJson(dossiersDir, _dossierParlementaire, _loaders.pathFromDossierParlementaireUid);
|
|
723
589
|
}
|
|
724
590
|
} catch (err) {
|
|
725
|
-
|
|
591
|
+
_iterator20.e(err);
|
|
726
592
|
} finally {
|
|
727
|
-
|
|
593
|
+
_iterator20.f();
|
|
728
594
|
}
|
|
729
595
|
}
|
|
730
596
|
break;
|
|
731
597
|
}
|
|
732
|
-
|
|
733
|
-
var _errorCode3 = git.commitAndPush(_datasetReorganizedDir3, "Nouvelle moisson", options.remote);
|
|
734
|
-
if (exitCode === 10 && _errorCode3 !== 10 || exitCode === 0 && _errorCode3 !== 0 && _errorCode3 !== 10) {
|
|
735
|
-
exitCode = _errorCode3;
|
|
736
|
-
}
|
|
737
|
-
}
|
|
598
|
+
commitGit(_datasetReorganizedDir3, options);
|
|
738
599
|
}
|
|
739
600
|
} catch (err) {
|
|
740
|
-
|
|
601
|
+
_iterator16.e(err);
|
|
741
602
|
} finally {
|
|
742
|
-
|
|
603
|
+
_iterator16.f();
|
|
743
604
|
}
|
|
744
605
|
}
|
|
745
606
|
if (enabledDatasets & _datasets.EnabledDatasets.Scrutins) {
|
|
746
|
-
var
|
|
747
|
-
|
|
607
|
+
var _iterator21 = _createForOfIteratorHelper(chosenDatasets.scrutins),
|
|
608
|
+
_step21;
|
|
748
609
|
try {
|
|
749
|
-
for (
|
|
750
|
-
var _dataset4 =
|
|
610
|
+
for (_iterator21.s(); !(_step21 = _iterator21.n()).done;) {
|
|
611
|
+
var _dataset4 = _step21.value;
|
|
751
612
|
var _originalJsonDirectoryOrFilePath4 = _path["default"].join(dataDir, _dataset4.filename);
|
|
752
613
|
if (!options.silent) {
|
|
753
614
|
console.log("Reorganizing ".concat(_originalJsonDirectoryOrFilePath4));
|
|
754
615
|
}
|
|
755
616
|
var _datasetName4 = _path["default"].basename(_originalJsonDirectoryOrFilePath4, ".json");
|
|
756
|
-
|
|
757
|
-
(0, _child_process.execSync)("git clone ".concat(gitGroupUrl, "/").concat(_datasetName4, ".git"), {
|
|
758
|
-
cwd: dataDir,
|
|
759
|
-
env: process.env,
|
|
760
|
-
encoding: "utf-8",
|
|
761
|
-
stdio: ["ignore", "ignore", "pipe"]
|
|
762
|
-
});
|
|
763
|
-
}
|
|
617
|
+
cloneGit(gitGroupUrl, _datasetName4, dataDir);
|
|
764
618
|
var _datasetReorganizedDir4 = _path["default"].join(dataDir, _datasetName4);
|
|
765
|
-
|
|
766
|
-
var _iterator25 = _createForOfIteratorHelper(_fsExtra["default"].readdirSync(_datasetReorganizedDir4)),
|
|
767
|
-
_step25;
|
|
768
|
-
try {
|
|
769
|
-
for (_iterator25.s(); !(_step25 = _iterator25.n()).done;) {
|
|
770
|
-
var _filename4 = _step25.value;
|
|
771
|
-
if (_filename4[0] === ".") {
|
|
772
|
-
continue;
|
|
773
|
-
}
|
|
774
|
-
_fsExtra["default"].removeSync(_path["default"].join(_datasetReorganizedDir4, _filename4));
|
|
775
|
-
}
|
|
776
|
-
} catch (err) {
|
|
777
|
-
_iterator25.e(err);
|
|
778
|
-
} finally {
|
|
779
|
-
_iterator25.f();
|
|
780
|
-
}
|
|
619
|
+
clearDirectory(_datasetReorganizedDir4);
|
|
781
620
|
switch (_dataset4.structure) {
|
|
782
621
|
case _datasets.DatasetStructure.SingleFile:
|
|
783
622
|
{
|
|
@@ -785,27 +624,27 @@ function reorganizeData(options) {
|
|
|
785
624
|
encoding: "utf8"
|
|
786
625
|
});
|
|
787
626
|
var _originalData4 = validateRawData ? _scrutins.Convert.toScrutins(_originalJson4) : JSON.parse(_originalJson4);
|
|
788
|
-
var
|
|
789
|
-
|
|
627
|
+
var _iterator22 = _createForOfIteratorHelper(_originalData4.scrutins.scrutin),
|
|
628
|
+
_step22;
|
|
790
629
|
try {
|
|
791
|
-
for (
|
|
792
|
-
var scrutin =
|
|
793
|
-
|
|
630
|
+
for (_iterator22.s(); !(_step22 = _iterator22.n()).done;) {
|
|
631
|
+
var scrutin = _step22.value;
|
|
632
|
+
writeReorganizedJson(_datasetReorganizedDir4, scrutin, _loaders.pathFromScrutinUid);
|
|
794
633
|
}
|
|
795
634
|
} catch (err) {
|
|
796
|
-
|
|
635
|
+
_iterator22.e(err);
|
|
797
636
|
} finally {
|
|
798
|
-
|
|
637
|
+
_iterator22.f();
|
|
799
638
|
}
|
|
800
639
|
}
|
|
801
640
|
break;
|
|
802
641
|
case _datasets.DatasetStructure.SegmentedFiles:
|
|
803
642
|
{
|
|
804
|
-
var
|
|
805
|
-
|
|
643
|
+
var _iterator23 = _createForOfIteratorHelper((0, _file_systems.walkDir)(_originalJsonDirectoryOrFilePath4)),
|
|
644
|
+
_step23;
|
|
806
645
|
try {
|
|
807
|
-
for (
|
|
808
|
-
var scrutinSplitPath =
|
|
646
|
+
for (_iterator23.s(); !(_step23 = _iterator23.n()).done;) {
|
|
647
|
+
var scrutinSplitPath = _step23.value;
|
|
809
648
|
var scrutinFilename = scrutinSplitPath[scrutinSplitPath.length - 1];
|
|
810
649
|
if (!scrutinFilename.endsWith(".json")) {
|
|
811
650
|
continue;
|
|
@@ -819,73 +658,46 @@ function reorganizeData(options) {
|
|
|
819
658
|
});
|
|
820
659
|
var scrutinOriginal = validateRawData ? _scrutins.Convert.toScrutinWrapper(scrutinOriginalJson) : JSON.parse(scrutinOriginalJson);
|
|
821
660
|
var _scrutin = scrutinOriginal.scrutin;
|
|
822
|
-
|
|
661
|
+
writeReorganizedJson(_datasetReorganizedDir4, _scrutin, _loaders.pathFromScrutinUid);
|
|
823
662
|
}
|
|
824
663
|
} catch (err) {
|
|
825
|
-
|
|
664
|
+
_iterator23.e(err);
|
|
826
665
|
} finally {
|
|
827
|
-
|
|
666
|
+
_iterator23.f();
|
|
828
667
|
}
|
|
829
668
|
}
|
|
830
669
|
break;
|
|
831
670
|
}
|
|
832
|
-
|
|
833
|
-
var _errorCode4 = git.commitAndPush(_datasetReorganizedDir4, "Nouvelle moisson", options.remote);
|
|
834
|
-
if (exitCode === 10 && _errorCode4 !== 10 || exitCode === 0 && _errorCode4 !== 0 && _errorCode4 !== 10) {
|
|
835
|
-
exitCode = _errorCode4;
|
|
836
|
-
}
|
|
837
|
-
}
|
|
671
|
+
commitGit(_datasetReorganizedDir4, options);
|
|
838
672
|
}
|
|
839
673
|
} catch (err) {
|
|
840
|
-
|
|
674
|
+
_iterator21.e(err);
|
|
841
675
|
} finally {
|
|
842
|
-
|
|
676
|
+
_iterator21.f();
|
|
843
677
|
}
|
|
844
678
|
}
|
|
845
679
|
if (enabledDatasets & _datasets.EnabledDatasets.Questions) {
|
|
846
|
-
var
|
|
847
|
-
|
|
680
|
+
var _iterator24 = _createForOfIteratorHelper(_datasets.datasets.questions),
|
|
681
|
+
_step24;
|
|
848
682
|
try {
|
|
849
|
-
for (
|
|
850
|
-
var _dataset5 =
|
|
683
|
+
for (_iterator24.s(); !(_step24 = _iterator24.n()).done;) {
|
|
684
|
+
var _dataset5 = _step24.value;
|
|
851
685
|
var _originalJsonDirectoryOrFilePath5 = _path["default"].join(dataDir, _dataset5.filename);
|
|
852
686
|
if (!options.silent) {
|
|
853
687
|
console.log("Reorganizing ".concat(_originalJsonDirectoryOrFilePath5));
|
|
854
688
|
}
|
|
855
689
|
var _datasetName5 = _path["default"].basename(_originalJsonDirectoryOrFilePath5, ".json");
|
|
856
|
-
|
|
857
|
-
(0, _child_process.execSync)("git clone ".concat(gitGroupUrl, "/").concat(_datasetName5, ".git"), {
|
|
858
|
-
cwd: dataDir,
|
|
859
|
-
env: process.env,
|
|
860
|
-
encoding: "utf-8",
|
|
861
|
-
stdio: ["ignore", "ignore", "pipe"]
|
|
862
|
-
});
|
|
863
|
-
}
|
|
690
|
+
cloneGit(gitGroupUrl, _datasetName5, dataDir);
|
|
864
691
|
var _datasetReorganizedDir5 = _path["default"].join(dataDir, _datasetName5);
|
|
865
|
-
|
|
866
|
-
var _iterator29 = _createForOfIteratorHelper(_fsExtra["default"].readdirSync(_datasetReorganizedDir5)),
|
|
867
|
-
_step29;
|
|
868
|
-
try {
|
|
869
|
-
for (_iterator29.s(); !(_step29 = _iterator29.n()).done;) {
|
|
870
|
-
var _filename5 = _step29.value;
|
|
871
|
-
if (_filename5[0] === ".") {
|
|
872
|
-
continue;
|
|
873
|
-
}
|
|
874
|
-
_fsExtra["default"].removeSync(_path["default"].join(_datasetReorganizedDir5, _filename5));
|
|
875
|
-
}
|
|
876
|
-
} catch (err) {
|
|
877
|
-
_iterator29.e(err);
|
|
878
|
-
} finally {
|
|
879
|
-
_iterator29.f();
|
|
880
|
-
}
|
|
692
|
+
clearDirectory(_datasetReorganizedDir5);
|
|
881
693
|
switch (_dataset5.structure) {
|
|
882
694
|
case _datasets.DatasetStructure.SegmentedFiles:
|
|
883
695
|
{
|
|
884
|
-
var
|
|
885
|
-
|
|
696
|
+
var _iterator25 = _createForOfIteratorHelper((0, _file_systems.walkDir)(_originalJsonDirectoryOrFilePath5)),
|
|
697
|
+
_step25;
|
|
886
698
|
try {
|
|
887
|
-
for (
|
|
888
|
-
var questionSplitPath =
|
|
699
|
+
for (_iterator25.s(); !(_step25 = _iterator25.n()).done;) {
|
|
700
|
+
var questionSplitPath = _step25.value;
|
|
889
701
|
var questionFilename = questionSplitPath[questionSplitPath.length - 1];
|
|
890
702
|
if (!questionFilename.endsWith(".json")) {
|
|
891
703
|
continue;
|
|
@@ -899,73 +711,46 @@ function reorganizeData(options) {
|
|
|
899
711
|
});
|
|
900
712
|
var questionOriginal = validateRawData ? _questions.Convert.toQuestionWrapper(questionOriginalJson) : JSON.parse(questionOriginalJson);
|
|
901
713
|
var question = questionOriginal.question;
|
|
902
|
-
|
|
714
|
+
writeReorganizedJson(_datasetReorganizedDir5, question, _loaders.pathFromQuestionUid);
|
|
903
715
|
}
|
|
904
716
|
} catch (err) {
|
|
905
|
-
|
|
717
|
+
_iterator25.e(err);
|
|
906
718
|
} finally {
|
|
907
|
-
|
|
719
|
+
_iterator25.f();
|
|
908
720
|
}
|
|
909
721
|
}
|
|
910
722
|
break;
|
|
911
723
|
}
|
|
912
|
-
|
|
913
|
-
var _errorCode5 = git.commitAndPush(_datasetReorganizedDir5, "Nouvelle moisson", options.remote);
|
|
914
|
-
if (exitCode === 10 && _errorCode5 !== 10 || exitCode === 0 && _errorCode5 !== 0 && _errorCode5 !== 10) {
|
|
915
|
-
exitCode = _errorCode5;
|
|
916
|
-
}
|
|
917
|
-
}
|
|
724
|
+
commitGit(_datasetReorganizedDir5, options);
|
|
918
725
|
}
|
|
919
726
|
} catch (err) {
|
|
920
|
-
|
|
727
|
+
_iterator24.e(err);
|
|
921
728
|
} finally {
|
|
922
|
-
|
|
729
|
+
_iterator24.f();
|
|
923
730
|
}
|
|
924
731
|
}
|
|
925
732
|
if (enabledDatasets & _datasets.EnabledDatasets.ComptesRendusSeances) {
|
|
926
|
-
var
|
|
927
|
-
|
|
733
|
+
var _iterator26 = _createForOfIteratorHelper(_datasets.datasets.comptesRendusSeances),
|
|
734
|
+
_step26;
|
|
928
735
|
try {
|
|
929
|
-
for (
|
|
930
|
-
var _dataset6 =
|
|
736
|
+
for (_iterator26.s(); !(_step26 = _iterator26.n()).done;) {
|
|
737
|
+
var _dataset6 = _step26.value;
|
|
931
738
|
var _originalJsonDirectoryOrFilePath6 = _path["default"].join(dataDir, _dataset6.filename);
|
|
932
739
|
if (!options.silent) {
|
|
933
740
|
console.log("Reorganizing ".concat(_originalJsonDirectoryOrFilePath6));
|
|
934
741
|
}
|
|
935
742
|
var _datasetName6 = _path["default"].basename(_originalJsonDirectoryOrFilePath6, ".xml");
|
|
936
|
-
|
|
937
|
-
(0, _child_process.execSync)("git clone ".concat(gitGroupUrl, "/").concat(_datasetName6, ".git"), {
|
|
938
|
-
cwd: dataDir,
|
|
939
|
-
env: process.env,
|
|
940
|
-
encoding: "utf-8",
|
|
941
|
-
stdio: ["ignore", "ignore", "pipe"]
|
|
942
|
-
});
|
|
943
|
-
}
|
|
743
|
+
cloneGit(gitGroupUrl, _datasetName6, dataDir);
|
|
944
744
|
var _datasetReorganizedDir6 = _path["default"].join(dataDir, _datasetName6);
|
|
945
|
-
|
|
946
|
-
var _iterator32 = _createForOfIteratorHelper(_fsExtra["default"].readdirSync(_datasetReorganizedDir6)),
|
|
947
|
-
_step32;
|
|
948
|
-
try {
|
|
949
|
-
for (_iterator32.s(); !(_step32 = _iterator32.n()).done;) {
|
|
950
|
-
var _filename6 = _step32.value;
|
|
951
|
-
if (_filename6[0] === ".") {
|
|
952
|
-
continue;
|
|
953
|
-
}
|
|
954
|
-
_fsExtra["default"].removeSync(_path["default"].join(_datasetReorganizedDir6, _filename6));
|
|
955
|
-
}
|
|
956
|
-
} catch (err) {
|
|
957
|
-
_iterator32.e(err);
|
|
958
|
-
} finally {
|
|
959
|
-
_iterator32.f();
|
|
960
|
-
}
|
|
745
|
+
clearDirectory(_datasetReorganizedDir6);
|
|
961
746
|
switch (_dataset6.structure) {
|
|
962
747
|
case _datasets.DatasetStructure.SegmentedFiles:
|
|
963
748
|
{
|
|
964
|
-
var
|
|
965
|
-
|
|
749
|
+
var _iterator27 = _createForOfIteratorHelper((0, _file_systems.walkDir)(_originalJsonDirectoryOrFilePath6)),
|
|
750
|
+
_step27;
|
|
966
751
|
try {
|
|
967
|
-
for (
|
|
968
|
-
var compteRenduSeanceSplitPath =
|
|
752
|
+
for (_iterator27.s(); !(_step27 = _iterator27.n()).done;) {
|
|
753
|
+
var compteRenduSeanceSplitPath = _step27.value;
|
|
969
754
|
var compteRenduSeanceFilename = compteRenduSeanceSplitPath[compteRenduSeanceSplitPath.length - 1];
|
|
970
755
|
if (!compteRenduSeanceFilename.endsWith(".json")) {
|
|
971
756
|
continue;
|
|
@@ -979,27 +764,22 @@ function reorganizeData(options) {
|
|
|
979
764
|
});
|
|
980
765
|
var compteRenduSeanceOriginal = validateRawData ? _debats.Convert.toCompteRenduWrapper(compteRenduSeanceOriginalJson) : JSON.parse(compteRenduSeanceOriginalJson);
|
|
981
766
|
var compteRenduSeance = compteRenduSeanceOriginal.compteRendu;
|
|
982
|
-
|
|
767
|
+
writeReorganizedJson(_datasetReorganizedDir6, compteRenduSeance, _loaders.pathFromCompteRenduUid);
|
|
983
768
|
}
|
|
984
769
|
} catch (err) {
|
|
985
|
-
|
|
770
|
+
_iterator27.e(err);
|
|
986
771
|
} finally {
|
|
987
|
-
|
|
772
|
+
_iterator27.f();
|
|
988
773
|
}
|
|
989
774
|
}
|
|
990
775
|
break;
|
|
991
776
|
}
|
|
992
|
-
|
|
993
|
-
var _errorCode6 = git.commitAndPush(_datasetReorganizedDir6, "Nouvelle moisson", options.remote);
|
|
994
|
-
if (exitCode === 10 && _errorCode6 !== 10 || exitCode === 0 && _errorCode6 !== 0 && _errorCode6 !== 10) {
|
|
995
|
-
exitCode = _errorCode6;
|
|
996
|
-
}
|
|
997
|
-
}
|
|
777
|
+
commitGit(_datasetReorganizedDir6, options);
|
|
998
778
|
}
|
|
999
779
|
} catch (err) {
|
|
1000
|
-
|
|
780
|
+
_iterator26.e(err);
|
|
1001
781
|
} finally {
|
|
1002
|
-
|
|
782
|
+
_iterator26.f();
|
|
1003
783
|
}
|
|
1004
784
|
}
|
|
1005
785
|
|
|
@@ -1017,41 +797,9 @@ function writeAmendementReorganizedJson(datasetReorganizedDir, amendement) {
|
|
|
1017
797
|
encoding: "utf8"
|
|
1018
798
|
});
|
|
1019
799
|
}
|
|
1020
|
-
function
|
|
1021
|
-
var basename = (
|
|
1022
|
-
_fsExtra["default"].writeFileSync("".concat(basename, ".json"), JSON.stringify(
|
|
1023
|
-
encoding: "utf8"
|
|
1024
|
-
});
|
|
1025
|
-
}
|
|
1026
|
-
function writeDossierParlementaireReorganizedJson(dossiersDir, dossierParlementaire) {
|
|
1027
|
-
var basename = (0, _loaders.pathFromDossierParlementaireUid)(dossiersDir, dossierParlementaire.uid);
|
|
1028
|
-
_fsExtra["default"].writeFileSync("".concat(basename, ".json"), JSON.stringify(dossierParlementaire, null, 2), {
|
|
1029
|
-
encoding: "utf8"
|
|
1030
|
-
});
|
|
1031
|
-
}
|
|
1032
|
-
function writeReunionReorganizedJson(reunionsDir, reunion) {
|
|
1033
|
-
var basename = (0, _loaders.pathFromReunionUid)(reunionsDir, reunion.uid);
|
|
1034
|
-
_fsExtra["default"].writeFileSync("".concat(basename, ".json"), JSON.stringify(reunion, null, 2), {
|
|
1035
|
-
encoding: "utf8"
|
|
1036
|
-
});
|
|
1037
|
-
}
|
|
1038
|
-
function writeScrutinReorganizedJson(scrutinsDir, scrutin) {
|
|
1039
|
-
var basename = (0, _loaders.pathFromScrutinUid)(scrutinsDir, scrutin.uid);
|
|
1040
|
-
_fsExtra["default"].writeFileSync("".concat(basename, ".json"), JSON.stringify(scrutin, null, 2), {
|
|
1041
|
-
encoding: "utf8"
|
|
1042
|
-
});
|
|
1043
|
-
}
|
|
1044
|
-
function writeQuestionsReorganizedJson(questionsDir, question) {
|
|
1045
|
-
var questionUidRegex = /^QAN(R\d+)(L\d+)Q(E|G|OSD)(\d+)$/;
|
|
1046
|
-
var basename = (0, _loaders.pathFromUid)(questionsDir, question.uid, questionUidRegex);
|
|
1047
|
-
_fsExtra["default"].writeFileSync("".concat(basename, ".json"), JSON.stringify(question, null, 2), {
|
|
1048
|
-
encoding: "utf8"
|
|
1049
|
-
});
|
|
1050
|
-
}
|
|
1051
|
-
function writeComptesRendusReorganizedJson(comptesRendusDir, compteRendu) {
|
|
1052
|
-
var compteRenduUidRegex = /^CRSAN(R\d+)(L\d+)(S\d+)(O|E)(\d+)(N\d+)$/;
|
|
1053
|
-
var basename = (0, _loaders.pathFromUid)(comptesRendusDir, compteRendu.uid, compteRenduUidRegex);
|
|
1054
|
-
_fsExtra["default"].writeFileSync("".concat(basename, ".json"), JSON.stringify(compteRendu, null, 2), {
|
|
800
|
+
function writeReorganizedJson(dir, obj, pathFromUid) {
|
|
801
|
+
var basename = pathFromUid(dir, obj.uid);
|
|
802
|
+
_fsExtra["default"].writeFileSync("".concat(basename, ".json"), JSON.stringify(obj, null, 2), {
|
|
1055
803
|
encoding: "utf8"
|
|
1056
804
|
});
|
|
1057
805
|
}
|
|
@@ -1062,4 +810,4 @@ function main(argv) {
|
|
|
1062
810
|
|
|
1063
811
|
/* istanbul ignore if */
|
|
1064
812
|
if (process.argv[1].endsWith("reorganize_data.ts")) process.exit(main(process.argv));
|
|
1065
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfYXNzZXJ0IiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfY2hpbGRfcHJvY2VzcyIsIl9jb21tYW5kTGluZUFyZ3MiLCJfZnNFeHRyYSIsIl9wYXRoIiwiX2RhdGFzZXRzIiwiX2RhdGVzIiwiZ2l0IiwiX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQiLCJfZmlsZV9zeXN0ZW1zIiwiX2xvYWRlcnMiLCJfYWN0ZXVyc19ldF9vcmdhbmVzIiwiX2FnZW5kYXMiLCJfYW1lbmRlbWVudHMiLCJfZG9zc2llcnNfbGVnaXNsYXRpZnMiLCJfc2NydXRpbnMiLCJfcXVlc3Rpb25zIiwiX2RlYmF0cyIsIl9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZSIsImUiLCJXZWFrTWFwIiwiciIsInQiLCJfX2VzTW9kdWxlIiwiX3R5cGVvZiIsImhhcyIsImdldCIsIm4iLCJfX3Byb3RvX18iLCJhIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJ1IiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiaSIsInNldCIsIm9iaiIsIl90b0NvbnN1bWFibGVBcnJheSIsImFyciIsIl9hcnJheVdpdGhvdXRIb2xlcyIsIl9pdGVyYWJsZVRvQXJyYXkiLCJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCJfbm9uSXRlcmFibGVTcHJlYWQiLCJUeXBlRXJyb3IiLCJpdGVyIiwiU3ltYm9sIiwiaXRlcmF0b3IiLCJBcnJheSIsImZyb20iLCJpc0FycmF5IiwiX2FycmF5TGlrZVRvQXJyYXkiLCJfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlciIsIm8iLCJhbGxvd0FycmF5TGlrZSIsIml0IiwibGVuZ3RoIiwiRiIsInMiLCJkb25lIiwidmFsdWUiLCJfZSIsImYiLCJub3JtYWxDb21wbGV0aW9uIiwiZGlkRXJyIiwiZXJyIiwic3RlcCIsIm5leHQiLCJfZTIiLCJtaW5MZW4iLCJ0b1N0cmluZyIsInNsaWNlIiwiY29uc3RydWN0b3IiLCJuYW1lIiwidGVzdCIsImxlbiIsImFycjIiLCJwYXJzZUFyZ3MiLCJhcmd2Iiwib3B0aW9uc0RlZmluaXRpb25zIiwiYWxpYXMiLCJoZWxwIiwidHlwZSIsIlN0cmluZyIsIkJvb2xlYW4iLCJkZWZhdWx0VmFsdWUiLCJtdWx0aXBsZSIsIk51bWJlciIsImRlZmF1bHRPcHRpb24iLCJvcHRpb25zIiwiY29tbWFuZExpbmVBcmdzIiwicmVvcmdhbml6ZURhdGEiLCJkYXRhRGlyIiwiRGF0ZSIsInRvSlNPTiIsInBhdGNoZWREYXRlVG9Kc29uIiwiZXhpdENvZGUiLCJjb21taXQiLCJnaXRHcm91cFVybCIsImNsb25lIiwidHJpbSIsInJlcGxhY2UiLCJ1bmRlZmluZWQiLCJ2YWxpZGF0ZVJhd0RhdGEiLCJjYXRlZ29yaWVzIiwibWFwIiwiZGF0YXNldE5hbWUiLCJhc3NlcnQiLCJub3RTdHJpY3RFcXVhbCIsIkVuYWJsZWREYXRhc2V0cyIsImNvbmNhdCIsImVuYWJsZWREYXRhc2V0cyIsInJlZHVjZSIsIk5vbmUiLCJjaG9zZW5EYXRhc2V0cyIsImZpbHRlckJ5TGVnaXNsYXR1cmUiLCJkYXRhc2V0cyIsImxlZ2lzbGF0dXJlIiwiQWN0ZXVyc0V0T3JnYW5lcyIsIl9pdGVyYXRvciIsImFjdGV1cnNFdE9yZ2FuZXMiLCJfc3RlcCIsImRhdGFzZXQiLCJvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoIiwicGF0aCIsImpvaW4iLCJmaWxlbmFtZSIsInNpbGVudCIsImNvbnNvbGUiLCJsb2ciLCJiYXNlbmFtZSIsImV4ZWNTeW5jIiwiY3dkIiwiZW52IiwicHJvY2VzcyIsImVuY29kaW5nIiwic3RkaW8iLCJkYXRhc2V0UmVvcmdhbml6ZWREaXIiLCJwdWxsIiwiZnMiLCJlbnN1cmVEaXJTeW5jIiwiX2l0ZXJhdG9yMiIsInJlYWRkaXJTeW5jIiwiX3N0ZXAyIiwicmVtb3ZlU3luYyIsImFjdGV1cnNSZW9yZ2FuaXplZERpciIsIm1rZGlyU3luYyIsIm9yZ2FuZXNSZW9yZ2FuaXplZERpciIsInN0cnVjdHVyZSIsIkRhdGFzZXRTdHJ1Y3R1cmUiLCJTaW5nbGVGaWxlIiwib3JpZ2luYWxKc29uIiwicmVhZEZpbGVTeW5jIiwib3JpZ2luYWxEYXRhIiwiQWN0ZXVyc0V0T3JnYW5lc1Jhd0NvbnZlcnQiLCJ0b0FjdGV1cnNFdE9yZ2FuZXMiLCJKU09OIiwicGFyc2UiLCJfaXRlcmF0b3IzIiwiYWN0ZXVycyIsImFjdGV1ciIsIl9zdGVwMyIsInJlb3JnYW5pemVkSnNvbkZpbGVQYXRoIiwidWlkIiwid3JpdGVGaWxlU3luYyIsInN0cmluZ2lmeSIsIl9pdGVyYXRvcjQiLCJvcmdhbmVzIiwib3JnYW5lIiwiX3N0ZXA0IiwiU2VnbWVudGVkRmlsZXMiLCJkZXBvcnRzQnlBY3RldXJVaWQiLCJleGlzdHNTeW5jIiwiX2l0ZXJhdG9yNSIsIndhbGtEaXIiLCJfc3RlcDUiLCJkZXBvcnRTcGxpdFBhdGgiLCJkZXBvcnRGaWxlbmFtZSIsImVuZHNXaXRoIiwiZGVwb3J0T3JpZ2luYWxGaWxlUGF0aCIsImFwcGx5IiwidmVyYm9zZSIsImRlcG9ydE9yaWdpbmFsSnNvbiIsImRlcG9ydE9yaWdpbmFsIiwidG9EZXBvcnQiLCJkZXBvcnQiLCJkZXBvcnRzIiwiYWN0ZXVyUmVmIiwicHVzaCIsIl9pIiwiX09iamVjdCR2YWx1ZXMiLCJ2YWx1ZXMiLCJzb3J0IiwiYiIsImxvY2FsZUNvbXBhcmUiLCJtYW5kYXRzQnlBY3RldXJVaWQiLCJfaXRlcmF0b3I2IiwiX3N0ZXA2IiwibWFuZGF0U3BsaXRQYXRoIiwibWFuZGF0RmlsZW5hbWUiLCJtYW5kYXRPcmlnaW5hbEZpbGVQYXRoIiwibWFuZGF0T3JpZ2luYWxKc29uIiwibWFuZGF0T3JpZ2luYWwiLCJ0b01hbmRhdFdyYXBwZXIiLCJtYW5kYXQiLCJtYW5kYXRzIiwiX2kyIiwiX09iamVjdCR2YWx1ZXMyIiwiX2l0ZXJhdG9yNyIsIl9zdGVwNyIsImFjdGV1clNwbGl0UGF0aCIsImFjdGV1ckZpbGVuYW1lIiwiYWN0ZXVyT3JpZ2luYWxGaWxlUGF0aCIsImFjdGV1ck9yaWdpbmFsSnNvbiIsImFjdGV1ck9yaWdpbmFsIiwidG9BY3RldXIiLCJhY3RldXJVaWQiLCJzdHJpY3RFcXVhbCIsImFjdGV1clJlb3JnYW5pemVkSnNvbkZpbGVQYXRoIiwiX2l0ZXJhdG9yOCIsIl9zdGVwOCIsIm9yZ2FuZVNwbGl0UGF0aCIsIm9yZ2FuZUZpbGVuYW1lIiwib3JnYW5lT3JpZ2luYWxGaWxlUGF0aCIsIm9yZ2FuZU9yaWdpbmFsSnNvbiIsIm9yZ2FuZU9yaWdpbmFsIiwidG9PcmdhbmUiLCJvcmdhbmVSZW9yZ2FuaXplZEpzb25GaWxlUGF0aCIsImVycm9yQ29kZSIsImNvbW1pdEFuZFB1c2giLCJyZW1vdGUiLCJBZ2VuZGFzIiwiX2l0ZXJhdG9yOSIsImFnZW5kYXMiLCJfc3RlcDkiLCJfaXRlcmF0b3IxMCIsIl9zdGVwMTAiLCJBZ2VuZGFzUmF3Q29udmVydCIsInRvQWdlbmRhcyIsIl9pdGVyYXRvcjExIiwicmV1bmlvbnMiLCJyZXVuaW9uIiwiX3N0ZXAxMSIsIndyaXRlUmV1bmlvblJlb3JnYW5pemVkSnNvbiIsIl9pdGVyYXRvcjEyIiwiX3N0ZXAxMiIsInJldW5pb25TcGxpdFBhdGgiLCJyZXVuaW9uRmlsZW5hbWUiLCJyZXVuaW9uT3JpZ2luYWxGaWxlUGF0aCIsInJldW5pb25PcmlnaW5hbEpzb24iLCJyZXVuaW9uT3JpZ2luYWwiLCJ0b1JldW5pb24iLCJBbWVuZGVtZW50cyIsIl9pdGVyYXRvcjEzIiwiYW1lbmRlbWVudHMiLCJfc3RlcDEzIiwiX2l0ZXJhdG9yMTQiLCJfc3RlcDE0IiwiQW1lbmRlbWVudHNSYXdDb252ZXJ0IiwidG9BbWVuZGVtZW50cyIsIl9pdGVyYXRvcjE1IiwidGV4dGVzRXRBbWVuZGVtZW50cyIsInRleHRlbGVnIiwiX3N0ZXAxNSIsInRleHRlTGVnaXNsYXRpZiIsIl9pdGVyYXRvcjE2IiwiX3N0ZXAxNiIsImFtZW5kZW1lbnQiLCJ3cml0ZUFtZW5kZW1lbnRSZW9yZ2FuaXplZEpzb24iLCJfaXRlcmF0b3IxNyIsIl9zdGVwMTciLCJhbWVuZGVtZW50U3BsaXRQYXRoIiwiYW1lbmRlbWVudEZpbGVuYW1lIiwiYW1lbmRlbWVudE9yaWdpbmFsRmlsZVBhdGgiLCJhbWVuZGVtZW50T3JpZ2luYWxKc29uIiwiYW1lbmRlbWVudE9yaWdpbmFsIiwidG9BbWVuZGVtZW50V3JhcHBlciIsIkRvc3NpZXJzTGVnaXNsYXRpZnMiLCJfaXRlcmF0b3IxOCIsImRvc3NpZXJzTGVnaXNsYXRpZnMiLCJfc3RlcDE4IiwiX2l0ZXJhdG9yMTkiLCJfc3RlcDE5IiwiZG9jdW1lbnRzRGlyIiwiZG9zc2llcnNEaXIiLCJEb3NzaWVyc0xlZ2lzbGF0aWZzUmF3Q29udmVydCIsInRvRG9zc2llcnNMZWdpc2xhdGlmcyIsIl9pdGVyYXRvcjIwIiwidGV4dGVzTGVnaXNsYXRpZnMiLCJkb2N1bWVudCIsIl9zdGVwMjAiLCJ3cml0ZURvY3VtZW50UmVvcmdhbml6ZWRKc29uIiwiX2l0ZXJhdG9yMjEiLCJkb3NzaWVyIiwiX3N0ZXAyMSIsImRvc3NpZXJQYXJsZW1lbnRhaXJlIiwid3JpdGVEb3NzaWVyUGFybGVtZW50YWlyZVJlb3JnYW5pemVkSnNvbiIsIl9pdGVyYXRvcjIyIiwiX3N0ZXAyMiIsImRvY3VtZW50U3BsaXRQYXRoIiwiZG9jdW1lbnRGaWxlbmFtZSIsImRvY3VtZW50T3JpZ2luYWxGaWxlUGF0aCIsImRvY3VtZW50T3JpZ2luYWxKc29uIiwiZG9jdW1lbnRPcmlnaW5hbCIsInRvRG9jdW1lbnQiLCJfaXRlcmF0b3IyMyIsIl9zdGVwMjMiLCJkb3NzaWVyUGFybGVtZW50YWlyZVNwbGl0UGF0aCIsImRvc3NpZXJQYXJsZW1lbnRhaXJlRmlsZW5hbWUiLCJkb3NzaWVyUGFybGVtZW50YWlyZU9yaWdpbmFsRmlsZVBhdGgiLCJkb3NzaWVyUGFybGVtZW50YWlyZU9yaWdpbmFsSnNvbiIsImRvc3NpZXJQYXJsZW1lbnRhaXJlT3JpZ2luYWwiLCJ0b0Rvc3NpZXJQYXJsZW1lbnRhaXJlIiwiU2NydXRpbnMiLCJfaXRlcmF0b3IyNCIsInNjcnV0aW5zIiwiX3N0ZXAyNCIsIl9pdGVyYXRvcjI1IiwiX3N0ZXAyNSIsIlNjcnV0aW5zUmF3Q29udmVydCIsInRvU2NydXRpbnMiLCJfaXRlcmF0b3IyNiIsInNjcnV0aW4iLCJfc3RlcDI2Iiwid3JpdGVTY3J1dGluUmVvcmdhbml6ZWRKc29uIiwiX2l0ZXJhdG9yMjciLCJfc3RlcDI3Iiwic2NydXRpblNwbGl0UGF0aCIsInNjcnV0aW5GaWxlbmFtZSIsInNjcnV0aW5PcmlnaW5hbEZpbGVQYXRoIiwic2NydXRpbk9yaWdpbmFsSnNvbiIsInNjcnV0aW5PcmlnaW5hbCIsInRvU2NydXRpbldyYXBwZXIiLCJRdWVzdGlvbnMiLCJfaXRlcmF0b3IyOCIsInF1ZXN0aW9ucyIsIl9zdGVwMjgiLCJfaXRlcmF0b3IyOSIsIl9zdGVwMjkiLCJfaXRlcmF0b3IzMCIsIl9zdGVwMzAiLCJxdWVzdGlvblNwbGl0UGF0aCIsInF1ZXN0aW9uRmlsZW5hbWUiLCJxdWVzdGlvbk9yaWdpbmFsRmlsZVBhdGgiLCJxdWVzdGlvbk9yaWdpbmFsSnNvbiIsInF1ZXN0aW9uT3JpZ2luYWwiLCJRdWVzdGlvbnNSYXdDb252ZXJ0IiwidG9RdWVzdGlvbldyYXBwZXIiLCJxdWVzdGlvbiIsIndyaXRlUXVlc3Rpb25zUmVvcmdhbml6ZWRKc29uIiwiQ29tcHRlc1JlbmR1c1NlYW5jZXMiLCJfaXRlcmF0b3IzMSIsImNvbXB0ZXNSZW5kdXNTZWFuY2VzIiwiX3N0ZXAzMSIsIl9pdGVyYXRvcjMyIiwiX3N0ZXAzMiIsIl9pdGVyYXRvcjMzIiwiX3N0ZXAzMyIsImNvbXB0ZVJlbmR1U2VhbmNlU3BsaXRQYXRoIiwiY29tcHRlUmVuZHVTZWFuY2VGaWxlbmFtZSIsImNvbXB0ZVJlbmR1U2VhbmNlT3JpZ2luYWxGaWxlUGF0aCIsImNvbXB0ZVJlbmR1U2VhbmNlT3JpZ2luYWxKc29uIiwiY29tcHRlUmVuZHVTZWFuY2VPcmlnaW5hbCIsIkNvbXB0ZXNSZW5kdXNSYXdDb252ZXJ0IiwidG9Db21wdGVSZW5kdVdyYXBwZXIiLCJjb21wdGVSZW5kdVNlYW5jZSIsImNvbXB0ZVJlbmR1Iiwid3JpdGVDb21wdGVzUmVuZHVzUmVvcmdhbml6ZWRKc29uIiwiZXhpc3RpbmdEYXRlVG9Kc29uIiwidWlkVGV4dGVMZWdpc2xhdGlmIiwidGV4dGVMZWdpc2xhdGlmUmVmIiwidGV4dGVMZWdpc2xhdGlmRGlyIiwicGF0aEZyb21Eb2N1bWVudFVpZCIsInBhdGhGcm9tRG9zc2llclBhcmxlbWVudGFpcmVVaWQiLCJyZXVuaW9uc0RpciIsInBhdGhGcm9tUmV1bmlvblVpZCIsInNjcnV0aW5zRGlyIiwicGF0aEZyb21TY3J1dGluVWlkIiwicXVlc3Rpb25zRGlyIiwicXVlc3Rpb25VaWRSZWdleCIsInBhdGhGcm9tVWlkIiwiY29tcHRlc1JlbmR1c0RpciIsImNvbXB0ZVJlbmR1VWlkUmVnZXgiLCJtYWluIiwiZXhpdCJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zY3JpcHRzL3Jlb3JnYW5pemVfZGF0YS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXNzZXJ0IGZyb20gXCJhc3NlcnRcIlxuaW1wb3J0IHsgZXhlY1N5bmMgfSBmcm9tIFwiY2hpbGRfcHJvY2Vzc1wiXG5pbXBvcnQgY29tbWFuZExpbmVBcmdzIGZyb20gXCJjb21tYW5kLWxpbmUtYXJnc1wiXG5pbXBvcnQgZnMgZnJvbSBcImZzLWV4dHJhXCJcbmltcG9ydCBwYXRoIGZyb20gXCJwYXRoXCJcblxuaW1wb3J0IHtcbiAgZGF0YXNldHMsXG4gIERhdGFzZXRTdHJ1Y3R1cmUsXG4gIEVuYWJsZWREYXRhc2V0cyxcbiAgZmlsdGVyQnlMZWdpc2xhdHVyZSxcbn0gZnJvbSBcIi4uL2RhdGFzZXRzXCJcbmltcG9ydCB7IGV4aXN0aW5nRGF0ZVRvSnNvbiwgcGF0Y2hlZERhdGVUb0pzb24gfSBmcm9tIFwiLi4vZGF0ZXNcIlxuaW1wb3J0ICogYXMgZ2l0IGZyb20gXCIuLi9naXRcIlxuaW1wb3J0IHsgd2Fsa0RpciB9IGZyb20gXCIuLi9maWxlX3N5c3RlbXNcIlxuaW1wb3J0IHtcbiAgcGF0aEZyb21Eb2N1bWVudFVpZCxcbiAgcGF0aEZyb21Eb3NzaWVyUGFybGVtZW50YWlyZVVpZCxcbiAgcGF0aEZyb21SZXVuaW9uVWlkLFxuICBwYXRoRnJvbVNjcnV0aW5VaWQsXG4gIHBhdGhGcm9tVWlkLFxufSBmcm9tIFwiLi4vbG9hZGVyc1wiXG5pbXBvcnQgeyBDb252ZXJ0IGFzIEFjdGV1cnNFdE9yZ2FuZXNSYXdDb252ZXJ0IH0gZnJvbSBcIi4uL3Jhd190eXBlcy9hY3RldXJzX2V0X29yZ2FuZXNcIlxuaW1wb3J0IHsgQ29udmVydCBhcyBBZ2VuZGFzUmF3Q29udmVydCB9IGZyb20gXCIuLi9yYXdfdHlwZXMvYWdlbmRhc1wiXG5pbXBvcnQgeyBDb252ZXJ0IGFzIEFtZW5kZW1lbnRzUmF3Q29udmVydCB9IGZyb20gXCIuLi9yYXdfdHlwZXMvYW1lbmRlbWVudHNcIlxuaW1wb3J0IHsgQ29udmVydCBhcyBEb3NzaWVyc0xlZ2lzbGF0aWZzUmF3Q29udmVydCB9IGZyb20gXCIuLi9yYXdfdHlwZXMvZG9zc2llcnNfbGVnaXNsYXRpZnNcIlxuaW1wb3J0IHsgQ29udmVydCBhcyBTY3J1dGluc1Jhd0NvbnZlcnQgfSBmcm9tIFwiLi4vcmF3X3R5cGVzL3NjcnV0aW5zXCJcbmltcG9ydCB7IENvbnZlcnQgYXMgUXVlc3Rpb25zUmF3Q29udmVydCB9IGZyb20gXCIuLi9yYXdfdHlwZXMvcXVlc3Rpb25zXCJcbmltcG9ydCB7IENvbnZlcnQgYXMgQ29tcHRlc1JlbmR1c1Jhd0NvbnZlcnQgfSBmcm9tIFwiLi4vcmF3X3R5cGVzL2RlYmF0c1wiXG5cbmZ1bmN0aW9uIHBhcnNlQXJncyhhcmd2OiBzdHJpbmdbXSk6IGFueSB7XG4gIGNvbnN0IG9wdGlvbnNEZWZpbml0aW9ucyA9IFtcbiAgICB7XG4gICAgICBhbGlhczogXCJDXCIsXG4gICAgICBoZWxwOiBcImNsb25lIHJlcG9zaXRvcmllcyBmcm9tIGdpdmVuIGdyb3VwIChvciBvcmdhbml6YXRpb24pIGdpdCBVUkxcIixcbiAgICAgIG5hbWU6IFwiY2xvbmVcIixcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICB9LFxuICAgIHtcbiAgICAgIGFsaWFzOiBcImNcIixcbiAgICAgIGhlbHA6IFwiY29tbWl0IHNwbGl0IGZpbGVzXCIsXG4gICAgICBuYW1lOiBcImNvbW1pdFwiLFxuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICB9LFxuICAgIHtcbiAgICAgIGFsaWFzOiBcImtcIixcbiAgICAgIGRlZmF1bHRWYWx1ZTogW1wiQWxsXCJdLFxuICAgICAgaGVscDogXCJjYXRlZ29yaWVzIG9mIGRhdGFzZXRzIHRvIHJlb3JnYW5pemVcIixcbiAgICAgIG11bHRpcGxlOiB0cnVlLFxuICAgICAgbmFtZTogXCJjYXRlZ29yaWVzXCIsXG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgfSxcbiAgICB7XG4gICAgICBhbGlhczogXCJsXCIsXG4gICAgICBoZWxwOiBcImxlZ2lzbGF0dXJlcyBvZiBjYXRlZ29yaWVzIG9mIGRhdGFzZXRzIHRvIHJldHJpZXZlOyBsZWF2ZSBlbXB0eSBvciB1c2UgMCBmb3IgYWxsXCIsXG4gICAgICBtdWx0aXBsZTogdHJ1ZSxcbiAgICAgIG5hbWU6IFwibGVnaXNsYXR1cmVcIixcbiAgICAgIHR5cGU6IE51bWJlcixcbiAgICB9LFxuICAgIHtcbiAgICAgIGFsaWFzOiBcInBcIixcbiAgICAgIGhlbHA6IFwicHVsbCByZXBvc2l0b3JpZXMgYmVmb3JlIHByb2NlZWRpbmdcIixcbiAgICAgIG5hbWU6IFwicHVsbFwiLFxuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICB9LFxuICAgIHtcbiAgICAgIGFsaWFzOiBcInJcIixcbiAgICAgIGhlbHA6IFwicHVzaCBjb21taXQgdG8gZ2l2ZW4gcmVtb3RlXCIsXG4gICAgICBtdWx0aXBsZTogdHJ1ZSxcbiAgICAgIG5hbWU6IFwicmVtb3RlXCIsXG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgfSxcbiAgICB7XG4gICAgICBhbGlhczogXCJzXCIsXG4gICAgICBoZWxwOiBcImRvbid0IGxvZyBhbnl0aGluZ1wiLFxuICAgICAgbmFtZTogXCJzaWxlbnRcIixcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgfSxcbiAgICB7XG4gICAgICBhbGlhczogXCJWXCIsXG4gICAgICBoZWxwOiBcImRvbid0IHZhbGlkYXRlIHJhdyBkYXRhXCIsXG4gICAgICBuYW1lOiBcIm5vLXZhbGlkYXRlLXJhd1wiLFxuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICB9LFxuICAgIHtcbiAgICAgIGFsaWFzOiBcInZcIixcbiAgICAgIGhlbHA6IFwidmVyYm9zZSBsb2dzXCIsXG4gICAgICBuYW1lOiBcInZlcmJvc2VcIixcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgfSxcbiAgICB7XG4gICAgICBkZWZhdWx0T3B0aW9uOiB0cnVlLFxuICAgICAgaGVscDogXCJkaXJlY3RvcnkgY29udGFpbmluZyBBc3NlbWJsw6llIG9wZW4gZGF0YSBmaWxlc1wiLFxuICAgICAgbmFtZTogXCJkYXRhRGlyXCIsXG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgfSxcbiAgXVxuICBjb25zdCBvcHRpb25zID0gY29tbWFuZExpbmVBcmdzKG9wdGlvbnNEZWZpbml0aW9ucywge1xuICAgIGFyZ3Y6IGFyZ3YsXG4gIH0pXG4gIHJldHVybiBvcHRpb25zXG59XG5cbmZ1bmN0aW9uIHJlb3JnYW5pemVEYXRhKG9wdGlvbnM6IGFueSk6IG51bWJlciB7XG4gIGNvbnN0IGRhdGFEaXIgPSBvcHRpb25zLmRhdGFEaXJcbiAgRGF0ZS5wcm90b3R5cGUudG9KU09OID0gcGF0Y2hlZERhdGVUb0pzb25cblxuICBsZXQgZXhpdENvZGUgPSBvcHRpb25zLmNvbW1pdCA/IDEwIDogMFxuICBjb25zdCBnaXRHcm91cFVybCA9IG9wdGlvbnMuY2xvbmVcbiAgICA/IG9wdGlvbnMuY2xvbmUudHJpbSgpLnJlcGxhY2UoL1xcLyskLywgXCJcIilcbiAgICA6IHVuZGVmaW5lZFxuICBjb25zdCB2YWxpZGF0ZVJhd0RhdGEgPSAhb3B0aW9uc1tcIm5vLXZhbGlkYXRlLXJhd1wiXVxuXG4gIG9wdGlvbnMuY2F0ZWdvcmllcy5tYXAoKGRhdGFzZXROYW1lOiBzdHJpbmcpID0+XG4gICAgYXNzZXJ0Lm5vdFN0cmljdEVxdWFsKFxuICAgICAgKEVuYWJsZWREYXRhc2V0cyBhcyBhbnkgYXMgeyBbbmFtZTogc3RyaW5nXTogRW5hYmxlZERhdGFzZXRzIH0pW1xuICAgICAgICBkYXRhc2V0TmFtZVxuICAgICAgXSxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIGBVbmtub3duIG5hbWUgb2YgZGF0YXNldDogJHtkYXRhc2V0TmFtZX1gLFxuICAgICksXG4gIClcbiAgY29uc3QgZW5hYmxlZERhdGFzZXRzID0gb3B0aW9ucy5jYXRlZ29yaWVzLnJlZHVjZShcbiAgICAoZW5hYmxlZERhdGFzZXRzOiBFbmFibGVkRGF0YXNldHMsIGRhdGFzZXROYW1lOiBzdHJpbmcpOiBFbmFibGVkRGF0YXNldHMgPT5cbiAgICAgIGVuYWJsZWREYXRhc2V0cyB8XG4gICAgICAoRW5hYmxlZERhdGFzZXRzIGFzIGFueSBhcyB7IFtuYW1lOiBzdHJpbmddOiBFbmFibGVkRGF0YXNldHMgfSlbXG4gICAgICAgIGRhdGFzZXROYW1lXG4gICAgICBdLFxuICAgIEVuYWJsZWREYXRhc2V0cy5Ob25lLFxuICApXG5cbiAgbGV0IGNob3NlbkRhdGFzZXRzID0gZmlsdGVyQnlMZWdpc2xhdHVyZShkYXRhc2V0cywgb3B0aW9ucy5sZWdpc2xhdHVyZSlcblxuICBpZiAoZW5hYmxlZERhdGFzZXRzICYgRW5hYmxlZERhdGFzZXRzLkFjdGV1cnNFdE9yZ2FuZXMpIHtcbiAgICBmb3IgKGNvbnN0IGRhdGFzZXQgb2YgY2hvc2VuRGF0YXNldHMuYWN0ZXVyc0V0T3JnYW5lcykge1xuICAgICAgY29uc3Qgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aDogc3RyaW5nID0gcGF0aC5qb2luKFxuICAgICAgICBkYXRhRGlyLFxuICAgICAgICBkYXRhc2V0LmZpbGVuYW1lLFxuICAgICAgKVxuICAgICAgaWYgKCFvcHRpb25zLnNpbGVudCkge1xuICAgICAgICBjb25zb2xlLmxvZyhgUmVvcmdhbml6aW5nICR7b3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aH1gKVxuICAgICAgfVxuXG4gICAgICBjb25zdCBkYXRhc2V0TmFtZSA9IHBhdGguYmFzZW5hbWUoXG4gICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgIFwiLmpzb25cIixcbiAgICAgIClcbiAgICAgIGlmIChnaXRHcm91cFVybCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGV4ZWNTeW5jKGBnaXQgY2xvbmUgJHtnaXRHcm91cFVybH0vJHtkYXRhc2V0TmFtZX0uZ2l0YCwge1xuICAgICAgICAgIGN3ZDogZGF0YURpcixcbiAgICAgICAgICBlbnY6IHByb2Nlc3MuZW52LFxuICAgICAgICAgIGVuY29kaW5nOiBcInV0Zi04XCIsXG4gICAgICAgICAgc3RkaW86IFtcImlnbm9yZVwiLCBcImlnbm9yZVwiLCBcInBpcGVcIl0sXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgICBjb25zdCBkYXRhc2V0UmVvcmdhbml6ZWREaXIgPSBwYXRoLmpvaW4oZGF0YURpciwgZGF0YXNldE5hbWUpXG4gICAgICBpZiAob3B0aW9ucy5wdWxsKSB7XG4gICAgICAgIGV4ZWNTeW5jKGBnaXQgcmVzZXQgLS1oYXJkIG9yaWdpbi9tYXN0ZXJgLCB7XG4gICAgICAgICAgY3dkOiBkYXRhc2V0UmVvcmdhbml6ZWREaXIsXG4gICAgICAgICAgZW52OiBwcm9jZXNzLmVudixcbiAgICAgICAgICBlbmNvZGluZzogXCJ1dGYtOFwiLFxuICAgICAgICAgIHN0ZGlvOiBbXCJpZ25vcmVcIiwgXCJpZ25vcmVcIiwgXCJwaXBlXCJdLFxuICAgICAgICB9KVxuICAgICAgICBleGVjU3luYyhgZ2l0IHB1bGwgLS1yZWJhc2VgLCB7XG4gICAgICAgICAgY3dkOiBkYXRhc2V0UmVvcmdhbml6ZWREaXIsXG4gICAgICAgICAgZW52OiBwcm9jZXNzLmVudixcbiAgICAgICAgICBlbmNvZGluZzogXCJ1dGYtOFwiLFxuICAgICAgICAgIHN0ZGlvOiBbXCJpZ25vcmVcIiwgXCJpZ25vcmVcIiwgXCJwaXBlXCJdLFxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICBmcy5lbnN1cmVEaXJTeW5jKGRhdGFzZXRSZW9yZ2FuaXplZERpcilcbiAgICAgIGZvciAoY29uc3QgZmlsZW5hbWUgb2YgZnMucmVhZGRpclN5bmMoZGF0YXNldFJlb3JnYW5pemVkRGlyKSkge1xuICAgICAgICBpZiAoZmlsZW5hbWVbMF0gPT09IFwiLlwiKSB7XG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuICAgICAgICBmcy5yZW1vdmVTeW5jKHBhdGguam9pbihkYXRhc2V0UmVvcmdhbml6ZWREaXIsIGZpbGVuYW1lKSlcbiAgICAgIH1cbiAgICAgIGNvbnN0IGFjdGV1cnNSZW9yZ2FuaXplZERpciA9IHBhdGguam9pbihkYXRhc2V0UmVvcmdhbml6ZWREaXIsIFwiYWN0ZXVyc1wiKVxuICAgICAgZnMubWtkaXJTeW5jKGFjdGV1cnNSZW9yZ2FuaXplZERpcilcbiAgICAgIGNvbnN0IG9yZ2FuZXNSZW9yZ2FuaXplZERpciA9IHBhdGguam9pbihkYXRhc2V0UmVvcmdhbml6ZWREaXIsIFwib3JnYW5lc1wiKVxuICAgICAgZnMubWtkaXJTeW5jKG9yZ2FuZXNSZW9yZ2FuaXplZERpcilcblxuICAgICAgc3dpdGNoIChkYXRhc2V0LnN0cnVjdHVyZSkge1xuICAgICAgICBjYXNlIERhdGFzZXRTdHJ1Y3R1cmUuU2luZ2xlRmlsZTpcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjb25zdCBvcmlnaW5hbEpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhcbiAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIGNvbnN0IG9yaWdpbmFsRGF0YTogYW55ID0gdmFsaWRhdGVSYXdEYXRhXG4gICAgICAgICAgICAgID8gQWN0ZXVyc0V0T3JnYW5lc1Jhd0NvbnZlcnQudG9BY3RldXJzRXRPcmdhbmVzKG9yaWdpbmFsSnNvbilcbiAgICAgICAgICAgICAgOiBKU09OLnBhcnNlKG9yaWdpbmFsSnNvbilcblxuICAgICAgICAgICAgZm9yIChjb25zdCBhY3RldXIgb2Ygb3JpZ2luYWxEYXRhLmV4cG9ydC5hY3RldXJzLmFjdGV1cikge1xuICAgICAgICAgICAgICBjb25zdCByZW9yZ2FuaXplZEpzb25GaWxlUGF0aDogc3RyaW5nID0gcGF0aC5qb2luKFxuICAgICAgICAgICAgICAgIGFjdGV1cnNSZW9yZ2FuaXplZERpcixcbiAgICAgICAgICAgICAgICBhY3RldXIudWlkW1wiI3RleHRcIl0gKyBcIi5qc29uXCIsXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgZnMud3JpdGVGaWxlU3luYyhcbiAgICAgICAgICAgICAgICByZW9yZ2FuaXplZEpzb25GaWxlUGF0aCxcbiAgICAgICAgICAgICAgICBKU09OLnN0cmluZ2lmeShhY3RldXIsIG51bGwsIDIpLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZvciAoY29uc3Qgb3JnYW5lIG9mIG9yaWdpbmFsRGF0YS5leHBvcnQub3JnYW5lcy5vcmdhbmUpIHtcbiAgICAgICAgICAgICAgY29uc3QgcmVvcmdhbml6ZWRKc29uRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICAgICAgICAgICAgICBvcmdhbmVzUmVvcmdhbml6ZWREaXIsXG4gICAgICAgICAgICAgICAgb3JnYW5lLnVpZCArIFwiLmpzb25cIixcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBmcy53cml0ZUZpbGVTeW5jKFxuICAgICAgICAgICAgICAgIHJlb3JnYW5pemVkSnNvbkZpbGVQYXRoLFxuICAgICAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KG9yZ2FuZSwgbnVsbCwgMiksXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSBEYXRhc2V0U3RydWN0dXJlLlNlZ21lbnRlZEZpbGVzOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNvbnN0IGRlcG9ydHNCeUFjdGV1clVpZDoge1xuICAgICAgICAgICAgICBbYWN0ZXVyVWlkOiBzdHJpbmddOiB7IHVpZDogc3RyaW5nIH1bXVxuICAgICAgICAgICAgfSA9IHt9XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIGZzLmV4aXN0c1N5bmMoXG4gICAgICAgICAgICAgICAgcGF0aC5qb2luKG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsIFwiZGVwb3J0XCIpLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgZm9yIChjb25zdCBkZXBvcnRTcGxpdFBhdGggb2Ygd2Fsa0RpcihcbiAgICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICAgICAgICAgIFtcImRlcG9ydFwiXSxcbiAgICAgICAgICAgICAgKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGRlcG9ydEZpbGVuYW1lID1cbiAgICAgICAgICAgICAgICAgIGRlcG9ydFNwbGl0UGF0aFtkZXBvcnRTcGxpdFBhdGgubGVuZ3RoIC0gMV1cbiAgICAgICAgICAgICAgICBpZiAoIWRlcG9ydEZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IGRlcG9ydE9yaWdpbmFsRmlsZVBhdGggPSBwYXRoLmpvaW4oXG4gICAgICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICAgICAgICAgICAgLi4uZGVwb3J0U3BsaXRQYXRoLFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy52ZXJib3NlKSB7XG4gICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgICAgICAgICAgYCAgTG9hZGluZyBcImRlcG9ydFwiIGZpbGU6ICR7ZGVwb3J0T3JpZ2luYWxGaWxlUGF0aH3igKZgLFxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBkZXBvcnRPcmlnaW5hbEpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhcbiAgICAgICAgICAgICAgICAgIGRlcG9ydE9yaWdpbmFsRmlsZVBhdGgsXG4gICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIGNvbnN0IGRlcG9ydE9yaWdpbmFsOiBhbnkgPSB2YWxpZGF0ZVJhd0RhdGFcbiAgICAgICAgICAgICAgICAgID8gQWN0ZXVyc0V0T3JnYW5lc1Jhd0NvbnZlcnQudG9EZXBvcnQoZGVwb3J0T3JpZ2luYWxKc29uKVxuICAgICAgICAgICAgICAgICAgOiBKU09OLnBhcnNlKGRlcG9ydE9yaWdpbmFsSnNvbilcbiAgICAgICAgICAgICAgICBjb25zdCBkZXBvcnQgPSBkZXBvcnRPcmlnaW5hbC5kZXBvcnRcbiAgICAgICAgICAgICAgICBsZXQgZGVwb3J0cyA9IGRlcG9ydHNCeUFjdGV1clVpZFtkZXBvcnQuYWN0ZXVyUmVmXVxuICAgICAgICAgICAgICAgIGlmIChkZXBvcnRzID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgIGRlcG9ydHMgPSBkZXBvcnRzQnlBY3RldXJVaWRbZGVwb3J0LmFjdGV1clJlZl0gPSBbXVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBkZXBvcnRzLnB1c2goZGVwb3J0KVxuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgZm9yIChjb25zdCBkZXBvcnRzIG9mIE9iamVjdC52YWx1ZXMoZGVwb3J0c0J5QWN0ZXVyVWlkKSkge1xuICAgICAgICAgICAgICAgIGRlcG9ydHMuc29ydCgoYSwgYikgPT5cbiAgICAgICAgICAgICAgICAgIGEudWlkLmxlbmd0aCA9PT0gYi51aWQubGVuZ3RoXG4gICAgICAgICAgICAgICAgICAgID8gYS51aWQubG9jYWxlQ29tcGFyZShiLnVpZClcbiAgICAgICAgICAgICAgICAgICAgOiBhLnVpZC5sZW5ndGggLSBiLnVpZC5sZW5ndGgsXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IG1hbmRhdHNCeUFjdGV1clVpZDoge1xuICAgICAgICAgICAgICBbYWN0ZXVyVWlkOiBzdHJpbmddOiB7IHVpZDogc3RyaW5nIH1bXVxuICAgICAgICAgICAgfSA9IHt9XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIGZzLmV4aXN0c1N5bmMoXG4gICAgICAgICAgICAgICAgcGF0aC5qb2luKG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsIFwibWFuZGF0XCIpLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgZm9yIChjb25zdCBtYW5kYXRTcGxpdFBhdGggb2Ygd2Fsa0RpcihcbiAgICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICAgICAgICAgIFtcIm1hbmRhdFwiXSxcbiAgICAgICAgICAgICAgKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG1hbmRhdEZpbGVuYW1lID1cbiAgICAgICAgICAgICAgICAgIG1hbmRhdFNwbGl0UGF0aFttYW5kYXRTcGxpdFBhdGgubGVuZ3RoIC0gMV1cbiAgICAgICAgICAgICAgICBpZiAoIW1hbmRhdEZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IG1hbmRhdE9yaWdpbmFsRmlsZVBhdGggPSBwYXRoLmpvaW4oXG4gICAgICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICAgICAgICAgICAgLi4ubWFuZGF0U3BsaXRQYXRoLFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy52ZXJib3NlKSB7XG4gICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgICAgICAgICAgYCAgTG9hZGluZyBcIm1hbmRhdFwiIGZpbGU6ICR7bWFuZGF0T3JpZ2luYWxGaWxlUGF0aH3igKZgLFxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBtYW5kYXRPcmlnaW5hbEpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhcbiAgICAgICAgICAgICAgICAgIG1hbmRhdE9yaWdpbmFsRmlsZVBhdGgsXG4gICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIGNvbnN0IG1hbmRhdE9yaWdpbmFsOiBhbnkgPSB2YWxpZGF0ZVJhd0RhdGFcbiAgICAgICAgICAgICAgICAgID8gQWN0ZXVyc0V0T3JnYW5lc1Jhd0NvbnZlcnQudG9NYW5kYXRXcmFwcGVyKFxuICAgICAgICAgICAgICAgICAgICAgIG1hbmRhdE9yaWdpbmFsSnNvbixcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgOiBKU09OLnBhcnNlKG1hbmRhdE9yaWdpbmFsSnNvbilcbiAgICAgICAgICAgICAgICBjb25zdCBtYW5kYXQgPSBtYW5kYXRPcmlnaW5hbC5tYW5kYXRcbiAgICAgICAgICAgICAgICBsZXQgbWFuZGF0cyA9IG1hbmRhdHNCeUFjdGV1clVpZFttYW5kYXQuYWN0ZXVyUmVmXVxuICAgICAgICAgICAgICAgIGlmIChtYW5kYXRzID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgIG1hbmRhdHMgPSBtYW5kYXRzQnlBY3RldXJVaWRbbWFuZGF0LmFjdGV1clJlZl0gPSBbXVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBtYW5kYXRzLnB1c2gobWFuZGF0KVxuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgZm9yIChjb25zdCBtYW5kYXRzIG9mIE9iamVjdC52YWx1ZXMobWFuZGF0c0J5QWN0ZXVyVWlkKSkge1xuICAgICAgICAgICAgICAgIG1hbmRhdHMuc29ydCgoYSwgYikgPT5cbiAgICAgICAgICAgICAgICAgIGEudWlkLmxlbmd0aCA9PT0gYi51aWQubGVuZ3RoXG4gICAgICAgICAgICAgICAgICAgID8gYS51aWQubG9jYWxlQ29tcGFyZShiLnVpZClcbiAgICAgICAgICAgICAgICAgICAgOiBhLnVpZC5sZW5ndGggLSBiLnVpZC5sZW5ndGgsXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZvciAoY29uc3QgYWN0ZXVyU3BsaXRQYXRoIG9mIHdhbGtEaXIoXG4gICAgICAgICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgICAgICAgIFtcImFjdGV1clwiXSxcbiAgICAgICAgICAgICkpIHtcbiAgICAgICAgICAgICAgY29uc3QgYWN0ZXVyRmlsZW5hbWUgPSBhY3RldXJTcGxpdFBhdGhbYWN0ZXVyU3BsaXRQYXRoLmxlbmd0aCAtIDFdXG4gICAgICAgICAgICAgIGlmICghYWN0ZXVyRmlsZW5hbWUuZW5kc1dpdGgoXCIuanNvblwiKSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc3QgYWN0ZXVyT3JpZ2luYWxGaWxlUGF0aCA9IHBhdGguam9pbihcbiAgICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICAgICAgICAgIC4uLmFjdGV1clNwbGl0UGF0aCxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBpZiAob3B0aW9ucy52ZXJib3NlKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICAgICAgICBgICBSZW9yZ2FuaXppbmcgXCJhY3RldXJcIiBmaWxlOiAke2FjdGV1ck9yaWdpbmFsRmlsZVBhdGh94oCmYCxcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc3QgYWN0ZXVyT3JpZ2luYWxKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoXG4gICAgICAgICAgICAgICAgYWN0ZXVyT3JpZ2luYWxGaWxlUGF0aCxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBjb25zdCBhY3RldXJPcmlnaW5hbDogYW55ID0gdmFsaWRhdGVSYXdEYXRhXG4gICAgICAgICAgICAgICAgPyBBY3RldXJzRXRPcmdhbmVzUmF3Q29udmVydC50b0FjdGV1cihhY3RldXJPcmlnaW5hbEpzb24pXG4gICAgICAgICAgICAgICAgOiBKU09OLnBhcnNlKGFjdGV1ck9yaWdpbmFsSnNvbilcbiAgICAgICAgICAgICAgY29uc3QgYWN0ZXVyID0gYWN0ZXVyT3JpZ2luYWwuYWN0ZXVyXG4gICAgICAgICAgICAgIGNvbnN0IGFjdGV1clVpZCA9IGFjdGV1ci51aWRbXCIjdGV4dFwiXVxuICAgICAgICAgICAgICBjb25zdCBkZXBvcnRzID0gZGVwb3J0c0J5QWN0ZXVyVWlkW2FjdGV1clVpZF1cbiAgICAgICAgICAgICAgaWYgKGRlcG9ydHMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChhY3RldXIuZGVwb3J0cywgdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgIGFjdGV1ci5kZXBvcnRzID0geyBkZXBvcnQ6IGRlcG9ydHMgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnN0IG1hbmRhdHMgPSBtYW5kYXRzQnlBY3RldXJVaWRbYWN0ZXVyVWlkXVxuICAgICAgICAgICAgICBpZiAobWFuZGF0cyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGFjdGV1ci5tYW5kYXRzLCB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgYWN0ZXVyLm1hbmRhdHMgPSB7IG1hbmRhdDogbWFuZGF0cyB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc3QgYWN0ZXVyUmVvcmdhbml6ZWRKc29uRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICAgICAgICAgICAgICBhY3RldXJzUmVvcmdhbml6ZWREaXIsXG4gICAgICAgICAgICAgICAgYWN0ZXVyVWlkICsgXCIuanNvblwiLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIGZzLndyaXRlRmlsZVN5bmMoXG4gICAgICAgICAgICAgICAgYWN0ZXVyUmVvcmdhbml6ZWRKc29uRmlsZVBhdGgsXG4gICAgICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkoYWN0ZXVyLCBudWxsLCAyKSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IG9yZ2FuZVNwbGl0UGF0aCBvZiB3YWxrRGlyKFxuICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICAgICAgICBbXCJvcmdhbmVcIl0sXG4gICAgICAgICAgICApKSB7XG4gICAgICAgICAgICAgIGNvbnN0IG9yZ2FuZUZpbGVuYW1lID0gb3JnYW5lU3BsaXRQYXRoW29yZ2FuZVNwbGl0UGF0aC5sZW5ndGggLSAxXVxuICAgICAgICAgICAgICBpZiAoIW9yZ2FuZUZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnN0IG9yZ2FuZU9yaWdpbmFsRmlsZVBhdGggPSBwYXRoLmpvaW4oXG4gICAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICAgICAuLi5vcmdhbmVTcGxpdFBhdGgsXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgaWYgKG9wdGlvbnMudmVyYm9zZSkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgICAgICAgYCAgUmVvcmdhbml6aW5nIFwib3JnYW5lXCIgZmlsZTogJHtvcmdhbmVPcmlnaW5hbEZpbGVQYXRofeKApmAsXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnN0IG9yZ2FuZU9yaWdpbmFsSnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKFxuICAgICAgICAgICAgICAgIG9yZ2FuZU9yaWdpbmFsRmlsZVBhdGgsXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgY29uc3Qgb3JnYW5lT3JpZ2luYWw6IGFueSA9IHZhbGlkYXRlUmF3RGF0YVxuICAgICAgICAgICAgICAgID8gQWN0ZXVyc0V0T3JnYW5lc1Jhd0NvbnZlcnQudG9PcmdhbmUob3JnYW5lT3JpZ2luYWxKc29uKVxuICAgICAgICAgICAgICAgIDogSlNPTi5wYXJzZShvcmdhbmVPcmlnaW5hbEpzb24pXG4gICAgICAgICAgICAgIGNvbnN0IG9yZ2FuZSA9IG9yZ2FuZU9yaWdpbmFsLm9yZ2FuZVxuICAgICAgICAgICAgICBjb25zdCBvcmdhbmVSZW9yZ2FuaXplZEpzb25GaWxlUGF0aDogc3RyaW5nID0gcGF0aC5qb2luKFxuICAgICAgICAgICAgICAgIG9yZ2FuZXNSZW9yZ2FuaXplZERpcixcbiAgICAgICAgICAgICAgICBvcmdhbmUudWlkICsgXCIuanNvblwiLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIGZzLndyaXRlRmlsZVN5bmMoXG4gICAgICAgICAgICAgICAgb3JnYW5lUmVvcmdhbml6ZWRKc29uRmlsZVBhdGgsXG4gICAgICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkob3JnYW5lLCBudWxsLCAyKSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVha1xuICAgICAgfVxuXG4gICAgICBpZiAob3B0aW9ucy5jb21taXQpIHtcbiAgICAgICAgY29uc3QgZXJyb3JDb2RlID0gZ2l0LmNvbW1pdEFuZFB1c2goXG4gICAgICAgICAgZGF0YXNldFJlb3JnYW5pemVkRGlyLFxuICAgICAgICAgIFwiTm91dmVsbGUgbW9pc3NvblwiLFxuICAgICAgICAgIG9wdGlvbnMucmVtb3RlLFxuICAgICAgICApXG4gICAgICAgIGlmIChcbiAgICAgICAgICAoZXhpdENvZGUgPT09IDEwICYmIGVycm9yQ29kZSAhPT0gMTApIHx8XG4gICAgICAgICAgKGV4aXRDb2RlID09PSAwICYmIGVycm9yQ29kZSAhPT0gMCAmJiBlcnJvckNvZGUgIT09IDEwKVxuICAgICAgICApIHtcbiAgICAgICAgICBleGl0Q29kZSA9IGVycm9yQ29kZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKGVuYWJsZWREYXRhc2V0cyAmIEVuYWJsZWREYXRhc2V0cy5BZ2VuZGFzKSB7XG4gICAgZm9yIChjb25zdCBkYXRhc2V0IG9mIGNob3NlbkRhdGFzZXRzLmFnZW5kYXMpIHtcbiAgICAgIGNvbnN0IG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICAgICAgZGF0YURpcixcbiAgICAgICAgZGF0YXNldC5maWxlbmFtZSxcbiAgICAgIClcbiAgICAgIGlmICghb3B0aW9ucy5zaWxlbnQpIHtcbiAgICAgICAgY29uc29sZS5sb2coYFJlb3JnYW5pemluZyAke29yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGh9YClcbiAgICAgIH1cblxuICAgICAgY29uc3QgZGF0YXNldE5hbWUgPSBwYXRoLmJhc2VuYW1lKFxuICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICBcIi5qc29uXCIsXG4gICAgICApXG4gICAgICBpZiAoZ2l0R3JvdXBVcmwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBleGVjU3luYyhgZ2l0IGNsb25lICR7Z2l0R3JvdXBVcmx9LyR7ZGF0YXNldE5hbWV9LmdpdGAsIHtcbiAgICAgICAgICBjd2Q6IGRhdGFEaXIsXG4gICAgICAgICAgZW52OiBwcm9jZXNzLmVudixcbiAgICAgICAgICBlbmNvZGluZzogXCJ1dGYtOFwiLFxuICAgICAgICAgIHN0ZGlvOiBbXCJpZ25vcmVcIiwgXCJpZ25vcmVcIiwgXCJwaXBlXCJdLFxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICBjb25zdCBkYXRhc2V0UmVvcmdhbml6ZWREaXIgPSBwYXRoLmpvaW4oZGF0YURpciwgZGF0YXNldE5hbWUpXG4gICAgICBmcy5lbnN1cmVEaXJTeW5jKGRhdGFzZXRSZW9yZ2FuaXplZERpcilcbiAgICAgIGZvciAoY29uc3QgZmlsZW5hbWUgb2YgZnMucmVhZGRpclN5bmMoZGF0YXNldFJlb3JnYW5pemVkRGlyKSkge1xuICAgICAgICBpZiAoZmlsZW5hbWVbMF0gPT09IFwiLlwiKSB7XG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuICAgICAgICBmcy5yZW1vdmVTeW5jKHBhdGguam9pbihkYXRhc2V0UmVvcmdhbml6ZWREaXIsIGZpbGVuYW1lKSlcbiAgICAgIH1cblxuICAgICAgc3dpdGNoIChkYXRhc2V0LnN0cnVjdHVyZSkge1xuICAgICAgICBjYXNlIERhdGFzZXRTdHJ1Y3R1cmUuU2luZ2xlRmlsZTpcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjb25zdCBvcmlnaW5hbEpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhcbiAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIGNvbnN0IG9yaWdpbmFsRGF0YTogYW55ID0gdmFsaWRhdGVSYXdEYXRhXG4gICAgICAgICAgICAgID8gQWdlbmRhc1Jhd0NvbnZlcnQudG9BZ2VuZGFzKG9yaWdpbmFsSnNvbilcbiAgICAgICAgICAgICAgOiBKU09OLnBhcnNlKG9yaWdpbmFsSnNvbilcblxuICAgICAgICAgICAgZm9yIChjb25zdCByZXVuaW9uIG9mIG9yaWdpbmFsRGF0YS5yZXVuaW9ucy5yZXVuaW9uKSB7XG4gICAgICAgICAgICAgIHdyaXRlUmV1bmlvblJlb3JnYW5pemVkSnNvbihkYXRhc2V0UmVvcmdhbml6ZWREaXIsIHJldW5pb24pXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgRGF0YXNldFN0cnVjdHVyZS5TZWdtZW50ZWRGaWxlczpcbiAgICAgICAgICB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHJldW5pb25TcGxpdFBhdGggb2Ygd2Fsa0RpcihcbiAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICAgW1wicmV1bmlvblwiXSxcbiAgICAgICAgICAgICkpIHtcbiAgICAgICAgICAgICAgY29uc3QgcmV1bmlvbkZpbGVuYW1lID1cbiAgICAgICAgICAgICAgICByZXVuaW9uU3BsaXRQYXRoW3JldW5pb25TcGxpdFBhdGgubGVuZ3RoIC0gMV1cbiAgICAgICAgICAgICAgaWYgKCFyZXVuaW9uRmlsZW5hbWUuZW5kc1dpdGgoXCIuanNvblwiKSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc3QgcmV1bmlvbk9yaWdpbmFsRmlsZVBhdGggPSBwYXRoLmpvaW4oXG4gICAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICAgICAuLi5yZXVuaW9uU3BsaXRQYXRoLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIGlmIChvcHRpb25zLnZlcmJvc2UpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgICAgICAgIGAgIFJlb3JnYW5pemluZyBcInJldW5pb25cIiBmaWxlOiAke3JldW5pb25PcmlnaW5hbEZpbGVQYXRofeKApmAsXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnN0IHJldW5pb25PcmlnaW5hbEpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhcbiAgICAgICAgICAgICAgICByZXVuaW9uT3JpZ2luYWxGaWxlUGF0aCxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBjb25zdCByZXVuaW9uT3JpZ2luYWw6IGFueSA9IHZhbGlkYXRlUmF3RGF0YVxuICAgICAgICAgICAgICAgID8gQWdlbmRhc1Jhd0NvbnZlcnQudG9SZXVuaW9uKHJldW5pb25PcmlnaW5hbEpzb24pXG4gICAgICAgICAgICAgICAgOiBKU09OLnBhcnNlKHJldW5pb25PcmlnaW5hbEpzb24pXG4gICAgICAgICAgICAgIGNvbnN0IHJldW5pb24gPSByZXVuaW9uT3JpZ2luYWwucmV1bmlvblxuICAgICAgICAgICAgICB3cml0ZVJldW5pb25SZW9yZ2FuaXplZEpzb24oZGF0YXNldFJlb3JnYW5pemVkRGlyLCByZXVuaW9uKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVha1xuICAgICAgfVxuXG4gICAgICBpZiAob3B0aW9ucy5jb21taXQpIHtcbiAgICAgICAgY29uc3QgZXJyb3JDb2RlID0gZ2l0LmNvbW1pdEFuZFB1c2goXG4gICAgICAgICAgZGF0YXNldFJlb3JnYW5pemVkRGlyLFxuICAgICAgICAgIFwiTm91dmVsbGUgbW9pc3NvblwiLFxuICAgICAgICAgIG9wdGlvbnMucmVtb3RlLFxuICAgICAgICApXG4gICAgICAgIGlmIChcbiAgICAgICAgICAoZXhpdENvZGUgPT09IDEwICYmIGVycm9yQ29kZSAhPT0gMTApIHx8XG4gICAgICAgICAgKGV4aXRDb2RlID09PSAwICYmIGVycm9yQ29kZSAhPT0gMCAmJiBlcnJvckNvZGUgIT09IDEwKVxuICAgICAgICApIHtcbiAgICAgICAgICBleGl0Q29kZSA9IGVycm9yQ29kZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKGVuYWJsZWREYXRhc2V0cyAmIEVuYWJsZWREYXRhc2V0cy5BbWVuZGVtZW50cykge1xuICAgIGZvciAoY29uc3QgZGF0YXNldCBvZiBjaG9zZW5EYXRhc2V0cy5hbWVuZGVtZW50cykge1xuICAgICAgY29uc3Qgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aDogc3RyaW5nID0gcGF0aC5qb2luKFxuICAgICAgICBkYXRhRGlyLFxuICAgICAgICBkYXRhc2V0LmZpbGVuYW1lLFxuICAgICAgKVxuICAgICAgaWYgKCFvcHRpb25zLnNpbGVudCkge1xuICAgICAgICBjb25zb2xlLmxvZyhgUmVvcmdhbml6aW5nICR7b3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aH1gKVxuICAgICAgfVxuXG4gICAgICBjb25zdCBkYXRhc2V0TmFtZSA9IHBhdGguYmFzZW5hbWUoXG4gICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgIFwiLmpzb25cIixcbiAgICAgIClcbiAgICAgIGlmIChnaXRHcm91cFVybCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGV4ZWNTeW5jKGBnaXQgY2xvbmUgJHtnaXRHcm91cFVybH0vJHtkYXRhc2V0TmFtZX0uZ2l0YCwge1xuICAgICAgICAgIGN3ZDogZGF0YURpcixcbiAgICAgICAgICBlbnY6IHByb2Nlc3MuZW52LFxuICAgICAgICAgIGVuY29kaW5nOiBcInV0Zi04XCIsXG4gICAgICAgICAgc3RkaW86IFtcImlnbm9yZVwiLCBcImlnbm9yZVwiLCBcInBpcGVcIl0sXG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGRhdGFzZXRSZW9yZ2FuaXplZERpciA9IHBhdGguam9pbihkYXRhRGlyLCBkYXRhc2V0TmFtZSlcbiAgICAgIGZzLmVuc3VyZURpclN5bmMoZGF0YXNldFJlb3JnYW5pemVkRGlyKVxuICAgICAgZm9yIChjb25zdCBmaWxlbmFtZSBvZiBmcy5yZWFkZGlyU3luYyhkYXRhc2V0UmVvcmdhbml6ZWREaXIpKSB7XG4gICAgICAgIGlmIChmaWxlbmFtZVswXSA9PT0gXCIuXCIpIHtcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG4gICAgICAgIGZzLnJlbW92ZVN5bmMocGF0aC5qb2luKGRhdGFzZXRSZW9yZ2FuaXplZERpciwgZmlsZW5hbWUpKVxuICAgICAgfVxuXG4gICAgICBzd2l0Y2ggKGRhdGFzZXQuc3RydWN0dXJlKSB7XG4gICAgICAgIGNhc2UgRGF0YXNldFN0cnVjdHVyZS5TaW5nbGVGaWxlOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNvbnN0IG9yaWdpbmFsSnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKFxuICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgY29uc3Qgb3JpZ2luYWxEYXRhOiBhbnkgPSB2YWxpZGF0ZVJhd0RhdGFcbiAgICAgICAgICAgICAgPyBBbWVuZGVtZW50c1Jhd0NvbnZlcnQudG9BbWVuZGVtZW50cyhvcmlnaW5hbEpzb24pXG4gICAgICAgICAgICAgIDogSlNPTi5wYXJzZShvcmlnaW5hbEpzb24pXG5cbiAgICAgICAgICAgIGZvciAoY29uc3QgdGV4dGVMZWdpc2xhdGlmIG9mIG9yaWdpbmFsRGF0YS50ZXh0ZXNFdEFtZW5kZW1lbnRzXG4gICAgICAgICAgICAgIC50ZXh0ZWxlZykge1xuICAgICAgICAgICAgICBmb3IgKGNvbnN0IGFtZW5kZW1lbnQgb2YgdGV4dGVMZWdpc2xhdGlmLmFtZW5kZW1lbnRzKSB7XG4gICAgICAgICAgICAgICAgd3JpdGVBbWVuZGVtZW50UmVvcmdhbml6ZWRKc29uKFxuICAgICAgICAgICAgICAgICAgZGF0YXNldFJlb3JnYW5pemVkRGlyLFxuICAgICAgICAgICAgICAgICAgYW1lbmRlbWVudCxcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSBEYXRhc2V0U3RydWN0dXJlLlNlZ21lbnRlZEZpbGVzOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgYW1lbmRlbWVudFNwbGl0UGF0aCBvZiB3YWxrRGlyKFxuICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICAgICAgKSkge1xuICAgICAgICAgICAgICBjb25zdCBhbWVuZGVtZW50RmlsZW5hbWUgPVxuICAgICAgICAgICAgICAgIGFtZW5kZW1lbnRTcGxpdFBhdGhbYW1lbmRlbWVudFNwbGl0UGF0aC5sZW5ndGggLSAxXVxuICAgICAgICAgICAgICBpZiAoIWFtZW5kZW1lbnRGaWxlbmFtZS5lbmRzV2l0aChcIi5qc29uXCIpKSB7XG4gICAgICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjb25zdCBhbWVuZGVtZW50T3JpZ2luYWxGaWxlUGF0aCA9IHBhdGguam9pbihcbiAgICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICAgICAgICAgIC4uLmFtZW5kZW1lbnRTcGxpdFBhdGgsXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgaWYgKG9wdGlvbnMudmVyYm9zZSkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgICAgICAgYCAgUmVvcmdhbml6aW5nIFwiYW1lbmRlbWVudFwiIGZpbGU6ICR7YW1lbmRlbWVudE9yaWdpbmFsRmlsZVBhdGh94oCmYCxcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc3QgYW1lbmRlbWVudE9yaWdpbmFsSnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKFxuICAgICAgICAgICAgICAgIGFtZW5kZW1lbnRPcmlnaW5hbEZpbGVQYXRoLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIGNvbnN0IGFtZW5kZW1lbnRPcmlnaW5hbDogYW55ID0gdmFsaWRhdGVSYXdEYXRhXG4gICAgICAgICAgICAgICAgPyBBbWVuZGVtZW50c1Jhd0NvbnZlcnQudG9BbWVuZGVtZW50V3JhcHBlcihcbiAgICAgICAgICAgICAgICAgICAgYW1lbmRlbWVudE9yaWdpbmFsSnNvbixcbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICA6IEpTT04ucGFyc2UoYW1lbmRlbWVudE9yaWdpbmFsSnNvbilcbiAgICAgICAgICAgICAgY29uc3QgYW1lbmRlbWVudCA9IGFtZW5kZW1lbnRPcmlnaW5hbC5hbWVuZGVtZW50XG4gICAgICAgICAgICAgIHdyaXRlQW1lbmRlbWVudFJlb3JnYW5pemVkSnNvbihkYXRhc2V0UmVvcmdhbml6ZWREaXIsIGFtZW5kZW1lbnQpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICB9XG5cbiAgICAgIGlmIChvcHRpb25zLmNvbW1pdCkge1xuICAgICAgICBjb25zdCBlcnJvckNvZGUgPSBnaXQuY29tbWl0QW5kUHVzaChcbiAgICAgICAgICBkYXRhc2V0UmVvcmdhbml6ZWREaXIsXG4gICAgICAgICAgXCJOb3V2ZWxsZSBtb2lzc29uXCIsXG4gICAgICAgICAgb3B0aW9ucy5yZW1vdGUsXG4gICAgICAgIClcbiAgICAgICAgaWYgKFxuICAgICAgICAgIChleGl0Q29kZSA9PT0gMTAgJiYgZXJyb3JDb2RlICE9PSAxMCkgfHxcbiAgICAgICAgICAoZXhpdENvZGUgPT09IDAgJiYgZXJyb3JDb2RlICE9PSAwICYmIGVycm9yQ29kZSAhPT0gMTApXG4gICAgICAgICkge1xuICAgICAgICAgIGV4aXRDb2RlID0gZXJyb3JDb2RlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAoZW5hYmxlZERhdGFzZXRzICYgRW5hYmxlZERhdGFzZXRzLkRvc3NpZXJzTGVnaXNsYXRpZnMpIHtcbiAgICBmb3IgKGNvbnN0IGRhdGFzZXQgb2YgY2hvc2VuRGF0YXNldHMuZG9zc2llcnNMZWdpc2xhdGlmcykge1xuICAgICAgY29uc3Qgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aDogc3RyaW5nID0gcGF0aC5qb2luKFxuICAgICAgICBkYXRhRGlyLFxuICAgICAgICBkYXRhc2V0LmZpbGVuYW1lLFxuICAgICAgKVxuICAgICAgaWYgKCFvcHRpb25zLnNpbGVudCkge1xuICAgICAgICBjb25zb2xlLmxvZyhgUmVvcmdhbml6aW5nICR7b3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aH1gKVxuICAgICAgfVxuXG4gICAgICBjb25zdCBkYXRhc2V0TmFtZSA9IHBhdGguYmFzZW5hbWUoXG4gICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgIFwiLmpzb25cIixcbiAgICAgIClcbiAgICAgIGlmIChnaXRHcm91cFVybCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGV4ZWNTeW5jKGBnaXQgY2xvbmUgJHtnaXRHcm91cFVybH0vJHtkYXRhc2V0TmFtZX0uZ2l0YCwge1xuICAgICAgICAgIGN3ZDogZGF0YURpcixcbiAgICAgICAgICBlbnY6IHByb2Nlc3MuZW52LFxuICAgICAgICAgIGVuY29kaW5nOiBcInV0Zi04XCIsXG4gICAgICAgICAgc3RkaW86IFtcImlnbm9yZVwiLCBcImlnbm9yZVwiLCBcInBpcGVcIl0sXG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGRhdGFzZXRSZW9yZ2FuaXplZERpciA9IHBhdGguam9pbihkYXRhRGlyLCBkYXRhc2V0TmFtZSlcbiAgICAgIGZzLmVuc3VyZURpclN5bmMoZGF0YXNldFJlb3JnYW5pemVkRGlyKVxuICAgICAgZm9yIChjb25zdCBmaWxlbmFtZSBvZiBmcy5yZWFkZGlyU3luYyhkYXRhc2V0UmVvcmdhbml6ZWREaXIpKSB7XG4gICAgICAgIGlmIChmaWxlbmFtZVswXSA9PT0gXCIuXCIpIHtcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG4gICAgICAgIGZzLnJlbW92ZVN5bmMocGF0aC5qb2luKGRhdGFzZXRSZW9yZ2FuaXplZERpciwgZmlsZW5hbWUpKVxuICAgICAgfVxuICAgICAgY29uc3QgZG9jdW1lbnRzRGlyID0gcGF0aC5qb2luKGRhdGFzZXRSZW9yZ2FuaXplZERpciwgXCJkb2N1bWVudHNcIilcbiAgICAgIGZzLm1rZGlyU3luYyhkb2N1bWVudHNEaXIpXG4gICAgICBjb25zdCBkb3NzaWVyc0RpciA9IHBhdGguam9pbihkYXRhc2V0UmVvcmdhbml6ZWREaXIsIFwiZG9zc2llcnNcIilcbiAgICAgIGZzLm1rZGlyU3luYyhkb3NzaWVyc0RpcilcblxuICAgICAgc3dpdGNoIChkYXRhc2V0LnN0cnVjdHVyZSkge1xuICAgICAgICBjYXNlIERhdGFzZXRTdHJ1Y3R1cmUuU2luZ2xlRmlsZTpcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjb25zdCBvcmlnaW5hbEpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhcbiAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIGNvbnN0IG9yaWdpbmFsRGF0YTogYW55ID0gdmFsaWRhdGVSYXdEYXRhXG4gICAgICAgICAgICAgID8gRG9zc2llcnNMZWdpc2xhdGlmc1Jhd0NvbnZlcnQudG9Eb3NzaWVyc0xlZ2lzbGF0aWZzKFxuICAgICAgICAgICAgICAgICAgb3JpZ2luYWxKc29uLFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgOiBKU09OLnBhcnNlKG9yaWdpbmFsSnNvbilcblxuICAgICAgICAgICAgZm9yIChjb25zdCBkb2N1bWVudCBvZiBvcmlnaW5hbERhdGEuZXhwb3J0LnRleHRlc0xlZ2lzbGF0aWZzXG4gICAgICAgICAgICAgIC5kb2N1bWVudCkge1xuICAgICAgICAgICAgICB3cml0ZURvY3VtZW50UmVvcmdhbml6ZWRKc29uKGRvY3VtZW50c0RpciwgZG9jdW1lbnQpXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZvciAoY29uc3QgeyBkb3NzaWVyUGFybGVtZW50YWlyZSB9IG9mIG9yaWdpbmFsRGF0YS5leHBvcnRcbiAgICAgICAgICAgICAgLmRvc3NpZXJzTGVnaXNsYXRpZnMuZG9zc2llcikge1xuICAgICAgICAgICAgICB3cml0ZURvc3NpZXJQYXJsZW1lbnRhaXJlUmVvcmdhbml6ZWRKc29uKFxuICAgICAgICAgICAgICAgIGRvc3NpZXJzRGlyLFxuICAgICAgICAgICAgICAgIGRvc3NpZXJQYXJsZW1lbnRhaXJlLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgRGF0YXNldFN0cnVjdHVyZS5TZWdtZW50ZWRGaWxlczpcbiAgICAgICAgICB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGRvY3VtZW50U3BsaXRQYXRoIG9mIHdhbGtEaXIoXG4gICAgICAgICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgICAgICAgIFtcImRvY3VtZW50XCJdLFxuICAgICAgICAgICAgKSkge1xuICAgICAgICAgICAgICBjb25zdCBkb2N1bWVudEZpbGVuYW1lID1cbiAgICAgICAgICAgICAgICBkb2N1bWVudFNwbGl0UGF0aFtkb2N1bWVudFNwbGl0UGF0aC5sZW5ndGggLSAxXVxuICAgICAgICAgICAgICBpZiAoIWRvY3VtZW50RmlsZW5hbWUuZW5kc1dpdGgoXCIuanNvblwiKSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc3QgZG9jdW1lbnRPcmlnaW5hbEZpbGVQYXRoID0gcGF0aC5qb2luKFxuICAgICAgICAgICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgICAgICAgICAgLi4uZG9jdW1lbnRTcGxpdFBhdGgsXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgaWYgKG9wdGlvbnMudmVyYm9zZSkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgICAgICAgYCAgUmVvcmdhbml6aW5nIFwiZG9jdW1lbnRcIiBmaWxlOiAke2RvY3VtZW50T3JpZ2luYWxGaWxlUGF0aH3igKZgLFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjb25zdCBkb2N1bWVudE9yaWdpbmFsSnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKFxuICAgICAgICAgICAgICAgIGRvY3VtZW50T3JpZ2luYWxGaWxlUGF0aCxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBjb25zdCBkb2N1bWVudE9yaWdpbmFsOiBhbnkgPSB2YWxpZGF0ZVJhd0RhdGFcbiAgICAgICAgICAgICAgICA/IERvc3NpZXJzTGVnaXNsYXRpZnNSYXdDb252ZXJ0LnRvRG9jdW1lbnQoZG9jdW1lbnRPcmlnaW5hbEpzb24pXG4gICAgICAgICAgICAgICAgOiBKU09OLnBhcnNlKGRvY3VtZW50T3JpZ2luYWxKc29uKVxuICAgICAgICAgICAgICBjb25zdCBkb2N1bWVudCA9IGRvY3VtZW50T3JpZ2luYWwuZG9jdW1lbnRcbiAgICAgICAgICAgICAgd3JpdGVEb2N1bWVudFJlb3JnYW5pemVkSnNvbihkb2N1bWVudHNEaXIsIGRvY3VtZW50KVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGRvc3NpZXJQYXJsZW1lbnRhaXJlU3BsaXRQYXRoIG9mIHdhbGtEaXIoXG4gICAgICAgICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgICAgICAgIFtcImRvc3NpZXJQYXJsZW1lbnRhaXJlXCJdLFxuICAgICAgICAgICAgKSkge1xuICAgICAgICAgICAgICBjb25zdCBkb3NzaWVyUGFybGVtZW50YWlyZUZpbGVuYW1lID1cbiAgICAgICAgICAgICAgICBkb3NzaWVyUGFybGVtZW50YWlyZVNwbGl0UGF0aFtcbiAgICAgICAgICAgICAgICAgIGRvc3NpZXJQYXJsZW1lbnRhaXJlU3BsaXRQYXRoLmxlbmd0aCAtIDFcbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgIGlmICghZG9zc2llclBhcmxlbWVudGFpcmVGaWxlbmFtZS5lbmRzV2l0aChcIi5qc29uXCIpKSB7XG4gICAgICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjb25zdCBkb3NzaWVyUGFybGVtZW50YWlyZU9yaWdpbmFsRmlsZVBhdGggPSBwYXRoLmpvaW4oXG4gICAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICAgICAuLi5kb3NzaWVyUGFybGVtZW50YWlyZVNwbGl0UGF0aCxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBpZiAob3B0aW9ucy52ZXJib3NlKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICAgICAgICBgICBSZW9yZ2FuaXppbmcgXCJkb3NzaWVyUGFybGVtZW50YWlyZVwiIGZpbGU6ICR7ZG9zc2llclBhcmxlbWVudGFpcmVPcmlnaW5hbEZpbGVQYXRofeKApmAsXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnN0IGRvc3NpZXJQYXJsZW1lbnRhaXJlT3JpZ2luYWxKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoXG4gICAgICAgICAgICAgICAgZG9zc2llclBhcmxlbWVudGFpcmVPcmlnaW5hbEZpbGVQYXRoLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIGNvbnN0IGRvc3NpZXJQYXJsZW1lbnRhaXJlT3JpZ2luYWw6IGFueSA9IHZhbGlkYXRlUmF3RGF0YVxuICAgICAgICAgICAgICAgID8gRG9zc2llcnNMZWdpc2xhdGlmc1Jhd0NvbnZlcnQudG9Eb3NzaWVyUGFybGVtZW50YWlyZShcbiAgICAgICAgICAgICAgICAgICAgZG9zc2llclBhcmxlbWVudGFpcmVPcmlnaW5hbEpzb24sXG4gICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgOiBKU09OLnBhcnNlKGRvc3NpZXJQYXJsZW1lbnRhaXJlT3JpZ2luYWxKc29uKVxuICAgICAgICAgICAgICBjb25zdCBkb3NzaWVyUGFybGVtZW50YWlyZSA9XG4gICAgICAgICAgICAgICAgZG9zc2llclBhcmxlbWVudGFpcmVPcmlnaW5hbC5kb3NzaWVyUGFybGVtZW50YWlyZVxuICAgICAgICAgICAgICB3cml0ZURvc3NpZXJQYXJsZW1lbnRhaXJlUmVvcmdhbml6ZWRKc29uKFxuICAgICAgICAgICAgICAgIGRvc3NpZXJzRGlyLFxuICAgICAgICAgICAgICAgIGRvc3NpZXJQYXJsZW1lbnRhaXJlLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICB9XG5cbiAgICAgIGlmIChvcHRpb25zLmNvbW1pdCkge1xuICAgICAgICBjb25zdCBlcnJvckNvZGUgPSBnaXQuY29tbWl0QW5kUHVzaChcbiAgICAgICAgICBkYXRhc2V0UmVvcmdhbml6ZWREaXIsXG4gICAgICAgICAgXCJOb3V2ZWxsZSBtb2lzc29uXCIsXG4gICAgICAgICAgb3B0aW9ucy5yZW1vdGUsXG4gICAgICAgIClcbiAgICAgICAgaWYgKFxuICAgICAgICAgIChleGl0Q29kZSA9PT0gMTAgJiYgZXJyb3JDb2RlICE9PSAxMCkgfHxcbiAgICAgICAgICAoZXhpdENvZGUgPT09IDAgJiYgZXJyb3JDb2RlICE9PSAwICYmIGVycm9yQ29kZSAhPT0gMTApXG4gICAgICAgICkge1xuICAgICAgICAgIGV4aXRDb2RlID0gZXJyb3JDb2RlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAoZW5hYmxlZERhdGFzZXRzICYgRW5hYmxlZERhdGFzZXRzLlNjcnV0aW5zKSB7XG4gICAgZm9yIChsZXQgZGF0YXNldCBvZiBjaG9zZW5EYXRhc2V0cy5zY3J1dGlucykge1xuICAgICAgY29uc3Qgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aDogc3RyaW5nID0gcGF0aC5qb2luKFxuICAgICAgICBkYXRhRGlyLFxuICAgICAgICBkYXRhc2V0LmZpbGVuYW1lLFxuICAgICAgKVxuICAgICAgaWYgKCFvcHRpb25zLnNpbGVudCkge1xuICAgICAgICBjb25zb2xlLmxvZyhgUmVvcmdhbml6aW5nICR7b3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aH1gKVxuICAgICAgfVxuXG4gICAgICBjb25zdCBkYXRhc2V0TmFtZSA9IHBhdGguYmFzZW5hbWUoXG4gICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgIFwiLmpzb25cIixcbiAgICAgIClcbiAgICAgIGlmIChnaXRHcm91cFVybCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGV4ZWNTeW5jKGBnaXQgY2xvbmUgJHtnaXRHcm91cFVybH0vJHtkYXRhc2V0TmFtZX0uZ2l0YCwge1xuICAgICAgICAgIGN3ZDogZGF0YURpcixcbiAgICAgICAgICBlbnY6IHByb2Nlc3MuZW52LFxuICAgICAgICAgIGVuY29kaW5nOiBcInV0Zi04XCIsXG4gICAgICAgICAgc3RkaW86IFtcImlnbm9yZVwiLCBcImlnbm9yZVwiLCBcInBpcGVcIl0sXG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGRhdGFzZXRSZW9yZ2FuaXplZERpciA9IHBhdGguam9pbihkYXRhRGlyLCBkYXRhc2V0TmFtZSlcbiAgICAgIGZzLmVuc3VyZURpclN5bmMoZGF0YXNldFJlb3JnYW5pemVkRGlyKVxuICAgICAgZm9yIChjb25zdCBmaWxlbmFtZSBvZiBmcy5yZWFkZGlyU3luYyhkYXRhc2V0UmVvcmdhbml6ZWREaXIpKSB7XG4gICAgICAgIGlmIChmaWxlbmFtZVswXSA9PT0gXCIuXCIpIHtcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG4gICAgICAgIGZzLnJlbW92ZVN5bmMocGF0aC5qb2luKGRhdGFzZXRSZW9yZ2FuaXplZERpciwgZmlsZW5hbWUpKVxuICAgICAgfVxuXG4gICAgICBzd2l0Y2ggKGRhdGFzZXQuc3RydWN0dXJlKSB7XG4gICAgICAgIGNhc2UgRGF0YXNldFN0cnVjdHVyZS5TaW5nbGVGaWxlOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNvbnN0IG9yaWdpbmFsSnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKFxuICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgY29uc3Qgb3JpZ2luYWxEYXRhOiBhbnkgPSB2YWxpZGF0ZVJhd0RhdGFcbiAgICAgICAgICAgICAgPyBTY3J1dGluc1Jhd0NvbnZlcnQudG9TY3J1dGlucyhvcmlnaW5hbEpzb24pXG4gICAgICAgICAgICAgIDogSlNPTi5wYXJzZShvcmlnaW5hbEpzb24pXG5cbiAgICAgICAgICAgIGZvciAoY29uc3Qgc2NydXRpbiBvZiBvcmlnaW5hbERhdGEuc2NydXRpbnMuc2NydXRpbikge1xuICAgICAgICAgICAgICB3cml0ZVNjcnV0aW5SZW9yZ2FuaXplZEpzb24oZGF0YXNldFJlb3JnYW5pemVkRGlyLCBzY3J1dGluKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIERhdGFzZXRTdHJ1Y3R1cmUuU2VnbWVudGVkRmlsZXM6XG4gICAgICAgICAge1xuICAgICAgICAgICAgZm9yIChjb25zdCBzY3J1dGluU3BsaXRQYXRoIG9mIHdhbGtEaXIoXG4gICAgICAgICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgICAgICApKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHNjcnV0aW5GaWxlbmFtZSA9XG4gICAgICAgICAgICAgICAgc2NydXRpblNwbGl0UGF0aFtzY3J1dGluU3BsaXRQYXRoLmxlbmd0aCAtIDFdXG4gICAgICAgICAgICAgIGlmICghc2NydXRpbkZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnN0IHNjcnV0aW5PcmlnaW5hbEZpbGVQYXRoID0gcGF0aC5qb2luKFxuICAgICAgICAgICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgICAgICAgICAgLi4uc2NydXRpblNwbGl0UGF0aCxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBpZiAob3B0aW9ucy52ZXJib3NlKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICAgICAgICBgICBSZW9yZ2FuaXppbmcgXCJzY3J1dGluXCIgZmlsZTogJHtzY3J1dGluT3JpZ2luYWxGaWxlUGF0aH3igKZgLFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjb25zdCBzY3J1dGluT3JpZ2luYWxKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoXG4gICAgICAgICAgICAgICAgc2NydXRpbk9yaWdpbmFsRmlsZVBhdGgsXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgY29uc3Qgc2NydXRpbk9yaWdpbmFsOiBhbnkgPSB2YWxpZGF0ZVJhd0RhdGFcbiAgICAgICAgICAgICAgICA/IFNjcnV0aW5zUmF3Q29udmVydC50b1NjcnV0aW5XcmFwcGVyKHNjcnV0aW5PcmlnaW5hbEpzb24pXG4gICAgICAgICAgICAgICAgOiBKU09OLnBhcnNlKHNjcnV0aW5PcmlnaW5hbEpzb24pXG4gICAgICAgICAgICAgIGNvbnN0IHNjcnV0aW4gPSBzY3J1dGluT3JpZ2luYWwuc2NydXRpblxuICAgICAgICAgICAgICB3cml0ZVNjcnV0aW5SZW9yZ2FuaXplZEpzb24oZGF0YXNldFJlb3JnYW5pemVkRGlyLCBzY3J1dGluKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVha1xuICAgICAgfVxuXG4gICAgICBpZiAob3B0aW9ucy5jb21taXQpIHtcbiAgICAgICAgY29uc3QgZXJyb3JDb2RlID0gZ2l0LmNvbW1pdEFuZFB1c2goXG4gICAgICAgICAgZGF0YXNldFJlb3JnYW5pemVkRGlyLFxuICAgICAgICAgIFwiTm91dmVsbGUgbW9pc3NvblwiLFxuICAgICAgICAgIG9wdGlvbnMucmVtb3RlLFxuICAgICAgICApXG4gICAgICAgIGlmIChcbiAgICAgICAgICAoZXhpdENvZGUgPT09IDEwICYmIGVycm9yQ29kZSAhPT0gMTApIHx8XG4gICAgICAgICAgKGV4aXRDb2RlID09PSAwICYmIGVycm9yQ29kZSAhPT0gMCAmJiBlcnJvckNvZGUgIT09IDEwKVxuICAgICAgICApIHtcbiAgICAgICAgICBleGl0Q29kZSA9IGVycm9yQ29kZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKGVuYWJsZWREYXRhc2V0cyAmIEVuYWJsZWREYXRhc2V0cy5RdWVzdGlvbnMpIHtcbiAgICBmb3IgKGNvbnN0IGRhdGFzZXQgb2YgZGF0YXNldHMucXVlc3Rpb25zKSB7XG4gICAgICBjb25zdCBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoOiBzdHJpbmcgPSBwYXRoLmpvaW4oXG4gICAgICAgIGRhdGFEaXIsXG4gICAgICAgIGRhdGFzZXQuZmlsZW5hbWUsXG4gICAgICApXG4gICAgICBpZiAoIW9wdGlvbnMuc2lsZW50KSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBSZW9yZ2FuaXppbmcgJHtvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRofWApXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGRhdGFzZXROYW1lID0gcGF0aC5iYXNlbmFtZShcbiAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgXCIuanNvblwiLFxuICAgICAgKVxuICAgICAgaWYgKGdpdEdyb3VwVXJsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgZXhlY1N5bmMoYGdpdCBjbG9uZSAke2dpdEdyb3VwVXJsfS8ke2RhdGFzZXROYW1lfS5naXRgLCB7XG4gICAgICAgICAgY3dkOiBkYXRhRGlyLFxuICAgICAgICAgIGVudjogcHJvY2Vzcy5lbnYsXG4gICAgICAgICAgZW5jb2Rpbmc6IFwidXRmLThcIixcbiAgICAgICAgICBzdGRpbzogW1wiaWdub3JlXCIsIFwiaWdub3JlXCIsIFwicGlwZVwiXSxcbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgY29uc3QgZGF0YXNldFJlb3JnYW5pemVkRGlyID0gcGF0aC5qb2luKGRhdGFEaXIsIGRhdGFzZXROYW1lKVxuICAgICAgZnMuZW5zdXJlRGlyU3luYyhkYXRhc2V0UmVvcmdhbml6ZWREaXIpXG4gICAgICBmb3IgKGNvbnN0IGZpbGVuYW1lIG9mIGZzLnJlYWRkaXJTeW5jKGRhdGFzZXRSZW9yZ2FuaXplZERpcikpIHtcbiAgICAgICAgaWYgKGZpbGVuYW1lWzBdID09PSBcIi5cIikge1xuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cbiAgICAgICAgZnMucmVtb3ZlU3luYyhwYXRoLmpvaW4oZGF0YXNldFJlb3JnYW5pemVkRGlyLCBmaWxlbmFtZSkpXG4gICAgICB9XG5cbiAgICAgIHN3aXRjaCAoZGF0YXNldC5zdHJ1Y3R1cmUpIHtcbiAgICAgICAgY2FzZSBEYXRhc2V0U3RydWN0dXJlLlNlZ21lbnRlZEZpbGVzOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgcXVlc3Rpb25TcGxpdFBhdGggb2Ygd2Fsa0RpcihcbiAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICkpIHtcbiAgICAgICAgICAgICAgY29uc3QgcXVlc3Rpb25GaWxlbmFtZSA9XG4gICAgICAgICAgICAgICAgcXVlc3Rpb25TcGxpdFBhdGhbcXVlc3Rpb25TcGxpdFBhdGgubGVuZ3RoIC0gMV1cbiAgICAgICAgICAgICAgaWYgKCFxdWVzdGlvbkZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnN0IHF1ZXN0aW9uT3JpZ2luYWxGaWxlUGF0aCA9IHBhdGguam9pbihcbiAgICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICAgICAgICAgIC4uLnF1ZXN0aW9uU3BsaXRQYXRoLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIGlmIChvcHRpb25zLnZlcmJvc2UpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgICAgICAgIGAgIFJlb3JnYW5pemluZyBcInF1ZXN0aW9uXCIgZmlsZTogJHtxdWVzdGlvbk9yaWdpbmFsRmlsZVBhdGh94oCmYCxcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc3QgcXVlc3Rpb25PcmlnaW5hbEpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhcbiAgICAgICAgICAgICAgICBxdWVzdGlvbk9yaWdpbmFsRmlsZVBhdGgsXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIClcblxuICAgICAgICAgICAgICBjb25zdCBxdWVzdGlvbk9yaWdpbmFsOiBhbnkgPSB2YWxpZGF0ZVJhd0RhdGFcbiAgICAgICAgICAgICAgICA/IFF1ZXN0aW9uc1Jhd0NvbnZlcnQudG9RdWVzdGlvbldyYXBwZXIocXVlc3Rpb25PcmlnaW5hbEpzb24pXG4gICAgICAgICAgICAgICAgOiBKU09OLnBhcnNlKHF1ZXN0aW9uT3JpZ2luYWxKc29uKVxuICAgICAgICAgICAgICBjb25zdCBxdWVzdGlvbiA9IHF1ZXN0aW9uT3JpZ2luYWwucXVlc3Rpb25cbiAgICAgICAgICAgICAgd3JpdGVRdWVzdGlvbnNSZW9yZ2FuaXplZEpzb24oZGF0YXNldFJlb3JnYW5pemVkRGlyLCBxdWVzdGlvbilcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWtcbiAgICAgIH1cblxuICAgICAgaWYgKG9wdGlvbnMuY29tbWl0KSB7XG4gICAgICAgIGNvbnN0IGVycm9yQ29kZSA9IGdpdC5jb21taXRBbmRQdXNoKFxuICAgICAgICAgIGRhdGFzZXRSZW9yZ2FuaXplZERpcixcbiAgICAgICAgICBcIk5vdXZlbGxlIG1vaXNzb25cIixcbiAgICAgICAgICBvcHRpb25zLnJlbW90ZSxcbiAgICAgICAgKVxuICAgICAgICBpZiAoXG4gICAgICAgICAgKGV4aXRDb2RlID09PSAxMCAmJiBlcnJvckNvZGUgIT09IDEwKSB8fFxuICAgICAgICAgIChleGl0Q29kZSA9PT0gMCAmJiBlcnJvckNvZGUgIT09IDAgJiYgZXJyb3JDb2RlICE9PSAxMClcbiAgICAgICAgKSB7XG4gICAgICAgICAgZXhpdENvZGUgPSBlcnJvckNvZGVcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmIChlbmFibGVkRGF0YXNldHMgJiBFbmFibGVkRGF0YXNldHMuQ29tcHRlc1JlbmR1c1NlYW5jZXMpIHtcbiAgICBmb3IgKGNvbnN0IGRhdGFzZXQgb2YgZGF0YXNldHMuY29tcHRlc1JlbmR1c1NlYW5jZXMpIHtcbiAgICAgIGNvbnN0IG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICAgICAgZGF0YURpcixcbiAgICAgICAgZGF0YXNldC5maWxlbmFtZSxcbiAgICAgIClcbiAgICAgIGlmICghb3B0aW9ucy5zaWxlbnQpIHtcbiAgICAgICAgY29uc29sZS5sb2coYFJlb3JnYW5pemluZyAke29yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGh9YClcbiAgICAgIH1cblxuICAgICAgY29uc3QgZGF0YXNldE5hbWUgPSBwYXRoLmJhc2VuYW1lKG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsIFwiLnhtbFwiKVxuICAgICAgaWYgKGdpdEdyb3VwVXJsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgZXhlY1N5bmMoYGdpdCBjbG9uZSAke2dpdEdyb3VwVXJsfS8ke2RhdGFzZXROYW1lfS5naXRgLCB7XG4gICAgICAgICAgY3dkOiBkYXRhRGlyLFxuICAgICAgICAgIGVudjogcHJvY2Vzcy5lbnYsXG4gICAgICAgICAgZW5jb2Rpbmc6IFwidXRmLThcIixcbiAgICAgICAgICBzdGRpbzogW1wiaWdub3JlXCIsIFwiaWdub3JlXCIsIFwicGlwZVwiXSxcbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgY29uc3QgZGF0YXNldFJlb3JnYW5pemVkRGlyID0gcGF0aC5qb2luKGRhdGFEaXIsIGRhdGFzZXROYW1lKVxuICAgICAgZnMuZW5zdXJlRGlyU3luYyhkYXRhc2V0UmVvcmdhbml6ZWREaXIpXG4gICAgICBmb3IgKGNvbnN0IGZpbGVuYW1lIG9mIGZzLnJlYWRkaXJTeW5jKGRhdGFzZXRSZW9yZ2FuaXplZERpcikpIHtcbiAgICAgICAgaWYgKGZpbGVuYW1lWzBdID09PSBcIi5cIikge1xuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cbiAgICAgICAgZnMucmVtb3ZlU3luYyhwYXRoLmpvaW4oZGF0YXNldFJlb3JnYW5pemVkRGlyLCBmaWxlbmFtZSkpXG4gICAgICB9XG5cbiAgICAgIHN3aXRjaCAoZGF0YXNldC5zdHJ1Y3R1cmUpIHtcbiAgICAgICAgY2FzZSBEYXRhc2V0U3RydWN0dXJlLlNlZ21lbnRlZEZpbGVzOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgY29tcHRlUmVuZHVTZWFuY2VTcGxpdFBhdGggb2Ygd2Fsa0RpcihcbiAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICkpIHtcbiAgICAgICAgICAgICAgY29uc3QgY29tcHRlUmVuZHVTZWFuY2VGaWxlbmFtZSA9XG4gICAgICAgICAgICAgICAgY29tcHRlUmVuZHVTZWFuY2VTcGxpdFBhdGhbXG4gICAgICAgICAgICAgICAgICBjb21wdGVSZW5kdVNlYW5jZVNwbGl0UGF0aC5sZW5ndGggLSAxXG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICBpZiAoIWNvbXB0ZVJlbmR1U2VhbmNlRmlsZW5hbWUuZW5kc1dpdGgoXCIuanNvblwiKSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc3QgY29tcHRlUmVuZHVTZWFuY2VPcmlnaW5hbEZpbGVQYXRoID0gcGF0aC5qb2luKFxuICAgICAgICAgICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgICAgICAgICAgLi4uY29tcHRlUmVuZHVTZWFuY2VTcGxpdFBhdGgsXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgaWYgKG9wdGlvbnMudmVyYm9zZSkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgICAgICAgYCAgUmVvcmdhbml6aW5nIFwiY29tcHRlUmVuZHVTZWFuY2VcIiBmaWxlOiAke2NvbXB0ZVJlbmR1U2VhbmNlT3JpZ2luYWxGaWxlUGF0aH3igKZgLFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjb25zdCBjb21wdGVSZW5kdVNlYW5jZU9yaWdpbmFsSnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKFxuICAgICAgICAgICAgICAgIGNvbXB0ZVJlbmR1U2VhbmNlT3JpZ2luYWxGaWxlUGF0aCxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBjb25zdCBjb21wdGVSZW5kdVNlYW5jZU9yaWdpbmFsOiBhbnkgPSB2YWxpZGF0ZVJhd0RhdGFcbiAgICAgICAgICAgICAgICA/IENvbXB0ZXNSZW5kdXNSYXdDb252ZXJ0LnRvQ29tcHRlUmVuZHVXcmFwcGVyKFxuICAgICAgICAgICAgICAgICAgICBjb21wdGVSZW5kdVNlYW5jZU9yaWdpbmFsSnNvbixcbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICA6IEpTT04ucGFyc2UoY29tcHRlUmVuZHVTZWFuY2VPcmlnaW5hbEpzb24pXG5cbiAgICAgICAgICAgICAgY29uc3QgY29tcHRlUmVuZHVTZWFuY2UgPSBjb21wdGVSZW5kdVNlYW5jZU9yaWdpbmFsLmNvbXB0ZVJlbmR1XG4gICAgICAgICAgICAgIHdyaXRlQ29tcHRlc1JlbmR1c1Jlb3JnYW5pemVkSnNvbihcbiAgICAgICAgICAgICAgICBkYXRhc2V0UmVvcmdhbml6ZWREaXIsXG4gICAgICAgICAgICAgICAgY29tcHRlUmVuZHVTZWFuY2UsXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWtcbiAgICAgIH1cblxuICAgICAgaWYgKG9wdGlvbnMuY29tbWl0KSB7XG4gICAgICAgIGNvbnN0IGVycm9yQ29kZSA9IGdpdC5jb21taXRBbmRQdXNoKFxuICAgICAgICAgIGRhdGFzZXRSZW9yZ2FuaXplZERpcixcbiAgICAgICAgICBcIk5vdXZlbGxlIG1vaXNzb25cIixcbiAgICAgICAgICBvcHRpb25zLnJlbW90ZSxcbiAgICAgICAgKVxuICAgICAgICBpZiAoXG4gICAgICAgICAgKGV4aXRDb2RlID09PSAxMCAmJiBlcnJvckNvZGUgIT09IDEwKSB8fFxuICAgICAgICAgIChleGl0Q29kZSA9PT0gMCAmJiBlcnJvckNvZGUgIT09IDAgJiYgZXJyb3JDb2RlICE9PSAxMClcbiAgICAgICAgKSB7XG4gICAgICAgICAgZXhpdENvZGUgPSBlcnJvckNvZGVcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIFJlc3RvcmUgc3RhbmRhcmQgY29udmVyc2lvbiBvZiBkYXRlcyB0byBKU09OLlxuICBEYXRlLnByb3RvdHlwZS50b0pTT04gPSBleGlzdGluZ0RhdGVUb0pzb25cblxuICByZXR1cm4gZXhpdENvZGVcbn1cblxuZnVuY3Rpb24gd3JpdGVBbWVuZGVtZW50UmVvcmdhbml6ZWRKc29uKFxuICBkYXRhc2V0UmVvcmdhbml6ZWREaXI6IHN0cmluZyxcbiAgYW1lbmRlbWVudDoge1xuICAgIHVpZDogc3RyaW5nXG4gICAgdGV4dGVMZWdpc2xhdGlmUmVmOiBzdHJpbmdcbiAgfSxcbik6IHZvaWQge1xuICBjb25zdCB1aWRUZXh0ZUxlZ2lzbGF0aWYgPSBhbWVuZGVtZW50LnRleHRlTGVnaXNsYXRpZlJlZlxuICBhc3NlcnQubm90U3RyaWN0RXF1YWwodWlkVGV4dGVMZWdpc2xhdGlmLCB1bmRlZmluZWQpXG4gIGNvbnN0IHRleHRlTGVnaXNsYXRpZkRpciA9IHBhdGguam9pbihcbiAgICBkYXRhc2V0UmVvcmdhbml6ZWREaXIsXG4gICAgdWlkVGV4dGVMZWdpc2xhdGlmLFxuICApXG4gIGZzLmVuc3VyZURpclN5bmModGV4dGVMZWdpc2xhdGlmRGlyKVxuICBjb25zdCByZW9yZ2FuaXplZEpzb25GaWxlUGF0aCA9IHBhdGguam9pbihcbiAgICB0ZXh0ZUxlZ2lzbGF0aWZEaXIsXG4gICAgYW1lbmRlbWVudC51aWQgKyBcIi5qc29uXCIsXG4gIClcbiAgZnMud3JpdGVGaWxlU3luYyhcbiAgICByZW9yZ2FuaXplZEpzb25GaWxlUGF0aCxcbiAgICBKU09OLnN0cmluZ2lmeShhbWVuZGVtZW50LCBudWxsLCAyKSxcbiAgICB7XG4gICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgfSxcbiAgKVxufVxuXG5mdW5jdGlvbiB3cml0ZURvY3VtZW50UmVvcmdhbml6ZWRKc29uKFxuICBkb2N1bWVudHNEaXI6IHN0cmluZyxcbiAgZG9jdW1lbnQ6IHsgdWlkOiBzdHJpbmcgfSxcbik6IHZvaWQge1xuICBjb25zdCBiYXNlbmFtZSA9IHBhdGhGcm9tRG9jdW1lbnRVaWQoZG9jdW1lbnRzRGlyLCBkb2N1bWVudC51aWQpXG4gIGZzLndyaXRlRmlsZVN5bmMoYCR7YmFzZW5hbWV9Lmpzb25gLCBKU09OLnN0cmluZ2lmeShkb2N1bWVudCwgbnVsbCwgMiksIHtcbiAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gIH0pXG59XG5cbmZ1bmN0aW9uIHdyaXRlRG9zc2llclBhcmxlbWVudGFpcmVSZW9yZ2FuaXplZEpzb24oXG4gIGRvc3NpZXJzRGlyOiBzdHJpbmcsXG4gIGRvc3NpZXJQYXJsZW1lbnRhaXJlOiB7IHVpZDogc3RyaW5nIH0sXG4pOiB2b2lkIHtcbiAgY29uc3QgYmFzZW5hbWUgPSBwYXRoRnJvbURvc3NpZXJQYXJsZW1lbnRhaXJlVWlkKFxuICAgIGRvc3NpZXJzRGlyLFxuICAgIGRvc3NpZXJQYXJsZW1lbnRhaXJlLnVpZCxcbiAgKVxuICBmcy53cml0ZUZpbGVTeW5jKFxuICAgIGAke2Jhc2VuYW1lfS5qc29uYCxcbiAgICBKU09OLnN0cmluZ2lmeShkb3NzaWVyUGFybGVtZW50YWlyZSwgbnVsbCwgMiksXG4gICAge1xuICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgIH0sXG4gIClcbn1cblxuZnVuY3Rpb24gd3JpdGVSZXVuaW9uUmVvcmdhbml6ZWRKc29uKFxuICByZXVuaW9uc0Rpcjogc3RyaW5nLFxuICByZXVuaW9uOiB7IHVpZDogc3RyaW5nIH0sXG4pOiB2b2lkIHtcbiAgY29uc3QgYmFzZW5hbWUgPSBwYXRoRnJvbVJldW5pb25VaWQocmV1bmlvbnNEaXIsIHJldW5pb24udWlkKVxuICBmcy53cml0ZUZpbGVTeW5jKGAke2Jhc2VuYW1lfS5qc29uYCwgSlNPTi5zdHJpbmdpZnkocmV1bmlvbiwgbnVsbCwgMiksIHtcbiAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gIH0pXG59XG5cbmZ1bmN0aW9uIHdyaXRlU2NydXRpblJlb3JnYW5pemVkSnNvbihcbiAgc2NydXRpbnNEaXI6IHN0cmluZyxcbiAgc2NydXRpbjogeyB1aWQ6IHN0cmluZyB9LFxuKTogdm9pZCB7XG4gIGNvbnN0IGJhc2VuYW1lID0gcGF0aEZyb21TY3J1dGluVWlkKHNjcnV0aW5zRGlyLCBzY3J1dGluLnVpZClcbiAgZnMud3JpdGVGaWxlU3luYyhgJHtiYXNlbmFtZX0uanNvbmAsIEpTT04uc3RyaW5naWZ5KHNjcnV0aW4sIG51bGwsIDIpLCB7XG4gICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICB9KVxufVxuXG5mdW5jdGlvbiB3cml0ZVF1ZXN0aW9uc1Jlb3JnYW5pemVkSnNvbihcbiAgcXVlc3Rpb25zRGlyOiBzdHJpbmcsXG4gIHF1ZXN0aW9uOiB7IHVpZDogc3RyaW5nIH0sXG4pOiB2b2lkIHtcbiAgY29uc3QgcXVlc3Rpb25VaWRSZWdleDogUmVnRXhwID0gL15RQU4oUlxcZCspKExcXGQrKVEoRXxHfE9TRCkoXFxkKykkL1xuICBjb25zdCBiYXNlbmFtZSA9IHBhdGhGcm9tVWlkKHF1ZXN0aW9uc0RpciwgcXVlc3Rpb24udWlkLCBxdWVzdGlvblVpZFJlZ2V4KVxuICBmcy53cml0ZUZpbGVTeW5jKGAke2Jhc2VuYW1lfS5qc29uYCwgSlNPTi5zdHJpbmdpZnkocXVlc3Rpb24sIG51bGwsIDIpLCB7XG4gICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICB9KVxufVxuXG5mdW5jdGlvbiB3cml0ZUNvbXB0ZXNSZW5kdXNSZW9yZ2FuaXplZEpzb24oXG4gIGNvbXB0ZXNSZW5kdXNEaXI6IHN0cmluZyxcbiAgY29tcHRlUmVuZHU6IHsgdWlkOiBzdHJpbmcgfSxcbik6IHZvaWQge1xuICBjb25zdCBjb21wdGVSZW5kdVVpZFJlZ2V4OiBSZWdFeHAgPVxuICAgIC9eQ1JTQU4oUlxcZCspKExcXGQrKShTXFxkKykoT3xFKShcXGQrKShOXFxkKykkL1xuICBjb25zdCBiYXNlbmFtZSA9IHBhdGhGcm9tVWlkKFxuICAgIGNvbXB0ZXNSZW5kdXNEaXIsXG4gICAgY29tcHRlUmVuZHUudWlkLFxuICAgIGNvbXB0ZVJlbmR1VWlkUmVnZXgsXG4gIClcbiAgZnMud3JpdGVGaWxlU3luYyhgJHtiYXNlbmFtZX0uanNvbmAsIEpTT04uc3RyaW5naWZ5KGNvbXB0ZVJlbmR1LCBudWxsLCAyKSwge1xuICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgfSlcbn1cblxuZnVuY3Rpb24gbWFpbihhcmd2OiBhbnkpOiBudW1iZXIge1xuICBjb25zdCBvcHRpb25zID0gcGFyc2VBcmdzKGFyZ3YpXG4gIHJldHVybiByZW9yZ2FuaXplRGF0YShvcHRpb25zKVxufVxuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbmlmIChwcm9jZXNzLmFyZ3ZbMV0uZW5kc1dpdGgoXCJyZW9yZ2FuaXplX2RhdGEudHNcIikpXG4gIHByb2Nlc3MuZXhpdChtYWluKHByb2Nlc3MuYXJndikpXG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLElBQUFBLE9BQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLGNBQUEsR0FBQUQsT0FBQTtBQUNBLElBQUFFLGdCQUFBLEdBQUFILHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBRyxRQUFBLEdBQUFKLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBSSxLQUFBLEdBQUFMLHNCQUFBLENBQUFDLE9BQUE7QUFFQSxJQUFBSyxTQUFBLEdBQUFMLE9BQUE7QUFNQSxJQUFBTSxNQUFBLEdBQUFOLE9BQUE7QUFDQSxJQUFBTyxHQUFBLEdBQUFDLHVCQUFBLENBQUFSLE9BQUE7QUFDQSxJQUFBUyxhQUFBLEdBQUFULE9BQUE7QUFDQSxJQUFBVSxRQUFBLEdBQUFWLE9BQUE7QUFPQSxJQUFBVyxtQkFBQSxHQUFBWCxPQUFBO0FBQ0EsSUFBQVksUUFBQSxHQUFBWixPQUFBO0FBQ0EsSUFBQWEsWUFBQSxHQUFBYixPQUFBO0FBQ0EsSUFBQWMscUJBQUEs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
|
|
813
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfYXNzZXJ0IiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfY2hpbGRfcHJvY2VzcyIsIl9jb21tYW5kTGluZUFyZ3MiLCJfZnNFeHRyYSIsIl9wYXRoIiwiX2RhdGFzZXRzIiwiX2RhdGVzIiwiZ2l0IiwiX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQiLCJfZmlsZV9zeXN0ZW1zIiwiX2xvYWRlcnMiLCJfYWN0ZXVyc19ldF9vcmdhbmVzIiwiX2FnZW5kYXMiLCJfYW1lbmRlbWVudHMiLCJfZG9zc2llcnNfbGVnaXNsYXRpZnMiLCJfc2NydXRpbnMiLCJfcXVlc3Rpb25zIiwiX2RlYmF0cyIsIl9jbGlfaGVscGVycyIsIl9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZSIsImUiLCJXZWFrTWFwIiwiciIsInQiLCJfX2VzTW9kdWxlIiwiX3R5cGVvZiIsImhhcyIsImdldCIsIm4iLCJfX3Byb3RvX18iLCJhIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJ1IiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiaSIsInNldCIsIl90b0NvbnN1bWFibGVBcnJheSIsIl9hcnJheVdpdGhvdXRIb2xlcyIsIl9pdGVyYWJsZVRvQXJyYXkiLCJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCJfbm9uSXRlcmFibGVTcHJlYWQiLCJUeXBlRXJyb3IiLCJTeW1ib2wiLCJpdGVyYXRvciIsIkFycmF5IiwiZnJvbSIsImlzQXJyYXkiLCJfYXJyYXlMaWtlVG9BcnJheSIsIl9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyIiwibGVuZ3RoIiwiX24iLCJGIiwicyIsImRvbmUiLCJ2YWx1ZSIsImYiLCJvIiwibmV4dCIsInRvU3RyaW5nIiwic2xpY2UiLCJjb25zdHJ1Y3RvciIsIm5hbWUiLCJ0ZXN0IiwicGFyc2VBcmdzIiwiYXJndiIsIm9wdGlvbnNEZWZpbml0aW9ucyIsImNsb25lT3B0aW9uIiwiY29tbWl0T3B0aW9uIiwiY2F0ZWdvcmllc09wdGlvbiIsImxlZ2lzbGF0dXJlT3B0aW9uIiwicmVtb3RlT3B0aW9uIiwic2lsZW50T3B0aW9uIiwidmVyYm9zZU9wdGlvbiIsImRhdGFEaXJEZWZhdWx0T3B0aW9uIiwicHVsbE9wdGlvbiIsImFsaWFzIiwiaGVscCIsInR5cGUiLCJCb29sZWFuIiwib3B0aW9ucyIsImNvbW1hbmRMaW5lQXJncyIsImNsZWFyRGlyZWN0b3J5IiwiZGlyUGF0aCIsImZzIiwiZW5zdXJlRGlyU3luYyIsIl9pdGVyYXRvciIsInJlYWRkaXJTeW5jIiwiX3N0ZXAiLCJmaWxlbmFtZSIsInN0YXJ0c1dpdGgiLCJyZW1vdmVTeW5jIiwicGF0aCIsImpvaW4iLCJlcnIiLCJjbG9uZUdpdCIsImdpdEdyb3VwVXJsIiwiZGF0YXNldE5hbWUiLCJkYXRhRGlyIiwidW5kZWZpbmVkIiwiZXhlY1N5bmMiLCJjb25jYXQiLCJjd2QiLCJlbnYiLCJwcm9jZXNzIiwiZW5jb2RpbmciLCJzdGRpbyIsInJlb3JnYW5pemVEYXRhIiwiX29wdGlvbnMkY2xvbmUiLCJEYXRlIiwicHJvdG90eXBlIiwidG9KU09OIiwicGF0Y2hlZERhdGVUb0pzb24iLCJleGl0Q29kZSIsImNvbW1pdCIsImNsb25lIiwidHJpbSIsInJlcGxhY2UiLCJ2YWxpZGF0ZVJhd0RhdGEiLCJlbmFibGVkRGF0YXNldHMiLCJnZXRFbmFibGVkRGF0YXNldHMiLCJjYXRlZ29yaWVzIiwiY2hvc2VuRGF0YXNldHMiLCJmaWx0ZXJCeUxlZ2lzbGF0dXJlIiwiZGF0YXNldHMiLCJsZWdpc2xhdHVyZSIsImNvbW1pdEdpdCIsImRhdGFzZXRSZW9yZ2FuaXplZERpciIsImVycm9yQ29kZSIsImNvbW1pdEFuZFB1c2giLCJyZW1vdGUiLCJFbmFibGVkRGF0YXNldHMiLCJBY3RldXJzRXRPcmdhbmVzIiwiX2l0ZXJhdG9yMiIsImFjdGV1cnNFdE9yZ2FuZXMiLCJfc3RlcDIiLCJkYXRhc2V0Iiwib3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCIsInNpbGVudCIsImNvbnNvbGUiLCJsb2ciLCJiYXNlbmFtZSIsInB1bGwiLCJyZXNldEFuZFB1bGwiLCJhY3RldXJzUmVvcmdhbml6ZWREaXIiLCJta2RpclN5bmMiLCJvcmdhbmVzUmVvcmdhbml6ZWREaXIiLCJzdHJ1Y3R1cmUiLCJEYXRhc2V0U3RydWN0dXJlIiwiU2luZ2xlRmlsZSIsIm9yaWdpbmFsSnNvbiIsInJlYWRGaWxlU3luYyIsIm9yaWdpbmFsRGF0YSIsIkFjdGV1cnNFdE9yZ2FuZXNSYXdDb252ZXJ0IiwidG9BY3RldXJzRXRPcmdhbmVzIiwiSlNPTiIsInBhcnNlIiwiX2l0ZXJhdG9yMyIsImFjdGV1cnMiLCJhY3RldXIiLCJfc3RlcDMiLCJyZW9yZ2FuaXplZEpzb25GaWxlUGF0aCIsInVpZCIsIndyaXRlRmlsZVN5bmMiLCJzdHJpbmdpZnkiLCJfaXRlcmF0b3I0Iiwib3JnYW5lcyIsIm9yZ2FuZSIsIl9zdGVwNCIsIlNlZ21lbnRlZEZpbGVzIiwiZGVwb3J0c0J5QWN0ZXVyVWlkIiwiZXhpc3RzU3luYyIsIl9pdGVyYXRvcjUiLCJ3YWxrRGlyIiwiX3N0ZXA1IiwiZGVwb3J0U3BsaXRQYXRoIiwiZGVwb3J0RmlsZW5hbWUiLCJlbmRzV2l0aCIsImRlcG9ydE9yaWdpbmFsRmlsZVBhdGgiLCJhcHBseSIsInZlcmJvc2UiLCJkZXBvcnRPcmlnaW5hbEpzb24iLCJkZXBvcnRPcmlnaW5hbCIsInRvRGVwb3J0IiwiZGVwb3J0IiwiZGVwb3J0cyIsImFjdGV1clJlZiIsInB1c2giLCJfaSIsIl9PYmplY3QkdmFsdWVzIiwidmFsdWVzIiwic29ydCIsImIiLCJsb2NhbGVDb21wYXJlIiwibWFuZGF0c0J5QWN0ZXVyVWlkIiwiX2l0ZXJhdG9yNiIsIl9zdGVwNiIsIm1hbmRhdFNwbGl0UGF0aCIsIm1hbmRhdEZpbGVuYW1lIiwibWFuZGF0T3JpZ2luYWxGaWxlUGF0aCIsIm1hbmRhdE9yaWdpbmFsSnNvbiIsIm1hbmRhdE9yaWdpbmFsIiwidG9NYW5kYXRXcmFwcGVyIiwibWFuZGF0IiwibWFuZGF0cyIsIl9pMiIsIl9PYmplY3QkdmFsdWVzMiIsIl9pdGVyYXRvcjciLCJfc3RlcDciLCJhY3RldXJTcGxpdFBhdGgiLCJhY3RldXJGaWxlbmFtZSIsImFjdGV1ck9yaWdpbmFsRmlsZVBhdGgiLCJhY3RldXJPcmlnaW5hbEpzb24iLCJhY3RldXJPcmlnaW5hbCIsInRvQWN0ZXVyIiwiYWN0ZXVyVWlkIiwiYXNzZXJ0Iiwic3RyaWN0RXF1YWwiLCJhY3RldXJSZW9yZ2FuaXplZEpzb25GaWxlUGF0aCIsIl9pdGVyYXRvcjgiLCJfc3RlcDgiLCJvcmdhbmVTcGxpdFBhdGgiLCJvcmdhbmVGaWxlbmFtZSIsIm9yZ2FuZU9yaWdpbmFsRmlsZVBhdGgiLCJvcmdhbmVPcmlnaW5hbEpzb24iLCJvcmdhbmVPcmlnaW5hbCIsInRvT3JnYW5lIiwib3JnYW5lUmVvcmdhbml6ZWRKc29uRmlsZVBhdGgiLCJBZ2VuZGFzIiwiX2l0ZXJhdG9yOSIsImFnZW5kYXMiLCJfc3RlcDkiLCJBZ2VuZGFzUmF3Q29udmVydCIsInRvQWdlbmRhcyIsIl9pdGVyYXRvcjEwIiwicmV1bmlvbnMiLCJyZXVuaW9uIiwiX3N0ZXAxMCIsIndyaXRlUmVvcmdhbml6ZWRKc29uIiwicGF0aEZyb21SZXVuaW9uVWlkIiwiX2l0ZXJhdG9yMTEiLCJfc3RlcDExIiwicmV1bmlvblNwbGl0UGF0aCIsInJldW5pb25GaWxlbmFtZSIsInJldW5pb25PcmlnaW5hbEZpbGVQYXRoIiwicmV1bmlvbk9yaWdpbmFsSnNvbiIsInJldW5pb25PcmlnaW5hbCIsInRvUmV1bmlvbiIsIkFtZW5kZW1lbnRzIiwiX2l0ZXJhdG9yMTIiLCJhbWVuZGVtZW50cyIsIl9zdGVwMTIiLCJBbWVuZGVtZW50c1Jhd0NvbnZlcnQiLCJ0b0FtZW5kZW1lbnRzIiwiX2l0ZXJhdG9yMTMiLCJ0ZXh0ZXNFdEFtZW5kZW1lbnRzIiwidGV4dGVsZWciLCJfc3RlcDEzIiwidGV4dGVMZWdpc2xhdGlmIiwiX2l0ZXJhdG9yMTQiLCJfc3RlcDE0IiwiYW1lbmRlbWVudCIsIndyaXRlQW1lbmRlbWVudFJlb3JnYW5pemVkSnNvbiIsIl9pdGVyYXRvcjE1IiwiX3N0ZXAxNSIsImFtZW5kZW1lbnRTcGxpdFBhdGgiLCJhbWVuZGVtZW50RmlsZW5hbWUiLCJhbWVuZGVtZW50T3JpZ2luYWxGaWxlUGF0aCIsImFtZW5kZW1lbnRPcmlnaW5hbEpzb24iLCJhbWVuZGVtZW50T3JpZ2luYWwiLCJ0b0FtZW5kZW1lbnRXcmFwcGVyIiwiRG9zc2llcnNMZWdpc2xhdGlmcyIsIl9pdGVyYXRvcjE2IiwiZG9zc2llcnNMZWdpc2xhdGlmcyIsIl9zdGVwMTYiLCJkb2N1bWVudHNEaXIiLCJkb3NzaWVyc0RpciIsIkRvc3NpZXJzTGVnaXNsYXRpZnNSYXdDb252ZXJ0IiwidG9Eb3NzaWVyc0xlZ2lzbGF0aWZzIiwiX2l0ZXJhdG9yMTciLCJ0ZXh0ZXNMZWdpc2xhdGlmcyIsImRvY3VtZW50IiwiX3N0ZXAxNyIsInBhdGhGcm9tRG9jdW1lbnRVaWQiLCJfaXRlcmF0b3IxOCIsImRvc3NpZXIiLCJfc3RlcDE4IiwiZG9zc2llclBhcmxlbWVudGFpcmUiLCJwYXRoRnJvbURvc3NpZXJQYXJsZW1lbnRhaXJlVWlkIiwiX2l0ZXJhdG9yMTkiLCJfc3RlcDE5IiwiZG9jdW1lbnRTcGxpdFBhdGgiLCJkb2N1bWVudEZpbGVuYW1lIiwiZG9jdW1lbnRPcmlnaW5hbEZpbGVQYXRoIiwiZG9jdW1lbnRPcmlnaW5hbEpzb24iLCJkb2N1bWVudE9yaWdpbmFsIiwidG9Eb2N1bWVudCIsIl9pdGVyYXRvcjIwIiwiX3N0ZXAyMCIsImRvc3NpZXJQYXJsZW1lbnRhaXJlU3BsaXRQYXRoIiwiZG9zc2llclBhcmxlbWVudGFpcmVGaWxlbmFtZSIsImRvc3NpZXJQYXJsZW1lbnRhaXJlT3JpZ2luYWxGaWxlUGF0aCIsImRvc3NpZXJQYXJsZW1lbnRhaXJlT3JpZ2luYWxKc29uIiwiZG9zc2llclBhcmxlbWVudGFpcmVPcmlnaW5hbCIsInRvRG9zc2llclBhcmxlbWVudGFpcmUiLCJTY3J1dGlucyIsIl9pdGVyYXRvcjIxIiwic2NydXRpbnMiLCJfc3RlcDIxIiwiU2NydXRpbnNSYXdDb252ZXJ0IiwidG9TY3J1dGlucyIsIl9pdGVyYXRvcjIyIiwic2NydXRpbiIsIl9zdGVwMjIiLCJwYXRoRnJvbVNjcnV0aW5VaWQiLCJfaXRlcmF0b3IyMyIsIl9zdGVwMjMiLCJzY3J1dGluU3BsaXRQYXRoIiwic2NydXRpbkZpbGVuYW1lIiwic2NydXRpbk9yaWdpbmFsRmlsZVBhdGgiLCJzY3J1dGluT3JpZ2luYWxKc29uIiwic2NydXRpbk9yaWdpbmFsIiwidG9TY3J1dGluV3JhcHBlciIsIlF1ZXN0aW9ucyIsIl9pdGVyYXRvcjI0IiwicXVlc3Rpb25zIiwiX3N0ZXAyNCIsIl9pdGVyYXRvcjI1IiwiX3N0ZXAyNSIsInF1ZXN0aW9uU3BsaXRQYXRoIiwicXVlc3Rpb25GaWxlbmFtZSIsInF1ZXN0aW9uT3JpZ2luYWxGaWxlUGF0aCIsInF1ZXN0aW9uT3JpZ2luYWxKc29uIiwicXVlc3Rpb25PcmlnaW5hbCIsIlF1ZXN0aW9uc1Jhd0NvbnZlcnQiLCJ0b1F1ZXN0aW9uV3JhcHBlciIsInF1ZXN0aW9uIiwicGF0aEZyb21RdWVzdGlvblVpZCIsIkNvbXB0ZXNSZW5kdXNTZWFuY2VzIiwiX2l0ZXJhdG9yMjYiLCJjb21wdGVzUmVuZHVzU2VhbmNlcyIsIl9zdGVwMjYiLCJfaXRlcmF0b3IyNyIsIl9zdGVwMjciLCJjb21wdGVSZW5kdVNlYW5jZVNwbGl0UGF0aCIsImNvbXB0ZVJlbmR1U2VhbmNlRmlsZW5hbWUiLCJjb21wdGVSZW5kdVNlYW5jZU9yaWdpbmFsRmlsZVBhdGgiLCJjb21wdGVSZW5kdVNlYW5jZU9yaWdpbmFsSnNvbiIsImNvbXB0ZVJlbmR1U2VhbmNlT3JpZ2luYWwiLCJDb21wdGVzUmVuZHVzUmF3Q29udmVydCIsInRvQ29tcHRlUmVuZHVXcmFwcGVyIiwiY29tcHRlUmVuZHVTZWFuY2UiLCJjb21wdGVSZW5kdSIsInBhdGhGcm9tQ29tcHRlUmVuZHVVaWQiLCJleGlzdGluZ0RhdGVUb0pzb24iLCJ1aWRUZXh0ZUxlZ2lzbGF0aWYiLCJ0ZXh0ZUxlZ2lzbGF0aWZSZWYiLCJub3RTdHJpY3RFcXVhbCIsInRleHRlTGVnaXNsYXRpZkRpciIsImRpciIsIm9iaiIsInBhdGhGcm9tVWlkIiwibWFpbiIsImV4aXQiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvc2NyaXB0cy9yZW9yZ2FuaXplX2RhdGEudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGFzc2VydCBmcm9tIFwiYXNzZXJ0XCJcbmltcG9ydCB7IGV4ZWNTeW5jIH0gZnJvbSBcImNoaWxkX3Byb2Nlc3NcIlxuaW1wb3J0IGNvbW1hbmRMaW5lQXJncyBmcm9tIFwiY29tbWFuZC1saW5lLWFyZ3NcIlxuaW1wb3J0IGZzIGZyb20gXCJmcy1leHRyYVwiXG5pbXBvcnQgcGF0aCBmcm9tIFwicGF0aFwiXG5pbXBvcnQge1xuICBkYXRhc2V0cyxcbiAgRGF0YXNldFN0cnVjdHVyZSxcbiAgRW5hYmxlZERhdGFzZXRzLFxuICBnZXRFbmFibGVkRGF0YXNldHMsXG4gIGZpbHRlckJ5TGVnaXNsYXR1cmUsXG59IGZyb20gXCIuLi9kYXRhc2V0c1wiXG5pbXBvcnQgeyBleGlzdGluZ0RhdGVUb0pzb24sIHBhdGNoZWREYXRlVG9Kc29uIH0gZnJvbSBcIi4uL2RhdGVzXCJcbmltcG9ydCAqIGFzIGdpdCBmcm9tIFwiLi4vZ2l0XCJcbmltcG9ydCB7IHdhbGtEaXIgfSBmcm9tIFwiLi4vZmlsZV9zeXN0ZW1zXCJcbmltcG9ydCB7XG4gIHBhdGhGcm9tQ29tcHRlUmVuZHVVaWQsXG4gIHBhdGhGcm9tRG9jdW1lbnRVaWQsXG4gIHBhdGhGcm9tRG9zc2llclBhcmxlbWVudGFpcmVVaWQsXG4gIHBhdGhGcm9tUXVlc3Rpb25VaWQsXG4gIHBhdGhGcm9tUmV1bmlvblVpZCxcbiAgcGF0aEZyb21TY3J1dGluVWlkLFxufSBmcm9tIFwiLi4vbG9hZGVyc1wiXG5pbXBvcnQgeyBDb252ZXJ0IGFzIEFjdGV1cnNFdE9yZ2FuZXNSYXdDb252ZXJ0IH0gZnJvbSBcIi4uL3Jhd190eXBlcy9hY3RldXJzX2V0X29yZ2FuZXNcIlxuaW1wb3J0IHsgQ29udmVydCBhcyBBZ2VuZGFzUmF3Q29udmVydCB9IGZyb20gXCIuLi9yYXdfdHlwZXMvYWdlbmRhc1wiXG5pbXBvcnQgeyBDb252ZXJ0IGFzIEFtZW5kZW1lbnRzUmF3Q29udmVydCB9IGZyb20gXCIuLi9yYXdfdHlwZXMvYW1lbmRlbWVudHNcIlxuaW1wb3J0IHsgQ29udmVydCBhcyBEb3NzaWVyc0xlZ2lzbGF0aWZzUmF3Q29udmVydCB9IGZyb20gXCIuLi9yYXdfdHlwZXMvZG9zc2llcnNfbGVnaXNsYXRpZnNcIlxuaW1wb3J0IHsgQ29udmVydCBhcyBTY3J1dGluc1Jhd0NvbnZlcnQgfSBmcm9tIFwiLi4vcmF3X3R5cGVzL3NjcnV0aW5zXCJcbmltcG9ydCB7IENvbnZlcnQgYXMgUXVlc3Rpb25zUmF3Q29udmVydCB9IGZyb20gXCIuLi9yYXdfdHlwZXMvcXVlc3Rpb25zXCJcbmltcG9ydCB7IENvbnZlcnQgYXMgQ29tcHRlc1JlbmR1c1Jhd0NvbnZlcnQgfSBmcm9tIFwiLi4vcmF3X3R5cGVzL2RlYmF0c1wiXG5pbXBvcnQge1xuICBjbG9uZU9wdGlvbixcbiAgY29tbWl0T3B0aW9uLFxuICBjYXRlZ29yaWVzT3B0aW9uLFxuICBsZWdpc2xhdHVyZU9wdGlvbixcbiAgcmVtb3RlT3B0aW9uLFxuICBzaWxlbnRPcHRpb24sXG4gIHZlcmJvc2VPcHRpb24sXG4gIGRhdGFEaXJEZWZhdWx0T3B0aW9uLFxuICBwdWxsT3B0aW9uLFxufSBmcm9tIFwiLi9zaGFyZWQvY2xpX2hlbHBlcnNcIlxuXG5mdW5jdGlvbiBwYXJzZUFyZ3MoYXJndjogc3RyaW5nW10pOiBhbnkge1xuICBjb25zdCBvcHRpb25zRGVmaW5pdGlvbnMgPSBbXG4gICAgY2xvbmVPcHRpb24sXG4gICAgY29tbWl0T3B0aW9uLFxuICAgIGNhdGVnb3JpZXNPcHRpb24sXG4gICAgbGVnaXNsYXR1cmVPcHRpb24sXG4gICAgcmVtb3RlT3B0aW9uLFxuICAgIHNpbGVudE9wdGlvbixcbiAgICB2ZXJib3NlT3B0aW9uLFxuICAgIGRhdGFEaXJEZWZhdWx0T3B0aW9uLFxuICAgIHB1bGxPcHRpb24sXG4gICAge1xuICAgICAgYWxpYXM6IFwiVlwiLFxuICAgICAgaGVscDogXCJkb24ndCB2YWxpZGF0ZSByYXcgZGF0YVwiLFxuICAgICAgbmFtZTogXCJuby12YWxpZGF0ZS1yYXdcIixcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgfSxcbiAgXVxuICBjb25zdCBvcHRpb25zID0gY29tbWFuZExpbmVBcmdzKG9wdGlvbnNEZWZpbml0aW9ucywge1xuICAgIGFyZ3Y6IGFyZ3YsXG4gIH0pXG4gIHJldHVybiBvcHRpb25zXG59XG5cbmZ1bmN0aW9uIGNsZWFyRGlyZWN0b3J5KGRpclBhdGg6IHN0cmluZyk6IHZvaWQge1xuICBmcy5lbnN1cmVEaXJTeW5jKGRpclBhdGgpXG4gIGZvciAoY29uc3QgZmlsZW5hbWUgb2YgZnMucmVhZGRpclN5bmMoZGlyUGF0aCkpIHtcbiAgICBpZiAoIWZpbGVuYW1lLnN0YXJ0c1dpdGgoXCIuXCIpKSB7XG4gICAgICBmcy5yZW1vdmVTeW5jKHBhdGguam9pbihkaXJQYXRoLCBmaWxlbmFtZSkpXG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGNsb25lR2l0KFxuICBnaXRHcm91cFVybDogc3RyaW5nIHwgdW5kZWZpbmVkLFxuICBkYXRhc2V0TmFtZTogc3RyaW5nLFxuICBkYXRhRGlyOiBzdHJpbmcsXG4pOiB2b2lkIHtcbiAgaWYgKGdpdEdyb3VwVXJsICE9PSB1bmRlZmluZWQpIHtcbiAgICBleGVjU3luYyhgZ2l0IGNsb25lICR7Z2l0R3JvdXBVcmx9LyR7ZGF0YXNldE5hbWV9LmdpdGAsIHtcbiAgICAgIGN3ZDogZGF0YURpcixcbiAgICAgIGVudjogcHJvY2Vzcy5lbnYsXG4gICAgICBlbmNvZGluZzogXCJ1dGYtOFwiLFxuICAgICAgc3RkaW86IFtcImlnbm9yZVwiLCBcImlnbm9yZVwiLCBcInBpcGVcIl0sXG4gICAgfSlcbiAgfVxufVxuXG5mdW5jdGlvbiByZW9yZ2FuaXplRGF0YShvcHRpb25zOiBhbnkpOiBudW1iZXIge1xuICBjb25zdCBkYXRhRGlyID0gb3B0aW9ucy5kYXRhRGlyXG4gIERhdGUucHJvdG90eXBlLnRvSlNPTiA9IHBhdGNoZWREYXRlVG9Kc29uXG4gIGxldCBleGl0Q29kZSA9IG9wdGlvbnMuY29tbWl0ID8gMTAgOiAwXG4gIGNvbnN0IGdpdEdyb3VwVXJsID0gb3B0aW9ucy5jbG9uZT8udHJpbSgpLnJlcGxhY2UoL1xcLyskLywgXCJcIilcbiAgY29uc3QgdmFsaWRhdGVSYXdEYXRhID0gIW9wdGlvbnNbXCJuby12YWxpZGF0ZS1yYXdcIl1cbiAgY29uc3QgZW5hYmxlZERhdGFzZXRzID0gZ2V0RW5hYmxlZERhdGFzZXRzKG9wdGlvbnMuY2F0ZWdvcmllcylcbiAgbGV0IGNob3NlbkRhdGFzZXRzID0gZmlsdGVyQnlMZWdpc2xhdHVyZShkYXRhc2V0cywgb3B0aW9ucy5sZWdpc2xhdHVyZSlcblxuICBmdW5jdGlvbiBjb21taXRHaXQoZGF0YXNldFJlb3JnYW5pemVkRGlyOiBzdHJpbmcsIG9wdGlvbnM6IGFueSk6IHZvaWQge1xuICAgIGlmIChvcHRpb25zLmNvbW1pdCkge1xuICAgICAgY29uc3QgZXJyb3JDb2RlID0gZ2l0LmNvbW1pdEFuZFB1c2goXG4gICAgICAgIGRhdGFzZXRSZW9yZ2FuaXplZERpcixcbiAgICAgICAgXCJOb3V2ZWxsZSBtb2lzc29uXCIsXG4gICAgICAgIG9wdGlvbnMucmVtb3RlLFxuICAgICAgKVxuICAgICAgaWYgKFxuICAgICAgICAoZXhpdENvZGUgPT09IDEwICYmIGVycm9yQ29kZSAhPT0gMTApIHx8XG4gICAgICAgIChleGl0Q29kZSA9PT0gMCAmJiBlcnJvckNvZGUgIT09IDAgJiYgZXJyb3JDb2RlICE9PSAxMClcbiAgICAgICkge1xuICAgICAgICBleGl0Q29kZSA9IGVycm9yQ29kZVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmIChlbmFibGVkRGF0YXNldHMgJiBFbmFibGVkRGF0YXNldHMuQWN0ZXVyc0V0T3JnYW5lcykge1xuICAgIGZvciAoY29uc3QgZGF0YXNldCBvZiBjaG9zZW5EYXRhc2V0cy5hY3RldXJzRXRPcmdhbmVzKSB7XG4gICAgICBjb25zdCBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoOiBzdHJpbmcgPSBwYXRoLmpvaW4oXG4gICAgICAgIGRhdGFEaXIsXG4gICAgICAgIGRhdGFzZXQuZmlsZW5hbWUsXG4gICAgICApXG4gICAgICBpZiAoIW9wdGlvbnMuc2lsZW50KSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBSZW9yZ2FuaXppbmcgJHtvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRofWApXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGRhdGFzZXROYW1lID0gcGF0aC5iYXNlbmFtZShcbiAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgXCIuanNvblwiLFxuICAgICAgKVxuICAgICAgY2xvbmVHaXQoZ2l0R3JvdXBVcmwsIGRhdGFzZXROYW1lLCBkYXRhRGlyKVxuXG4gICAgICBjb25zdCBkYXRhc2V0UmVvcmdhbml6ZWREaXIgPSBwYXRoLmpvaW4oZGF0YURpciwgZGF0YXNldE5hbWUpXG4gICAgICBpZiAob3B0aW9ucy5wdWxsKSB7XG4gICAgICAgIGdpdC5yZXNldEFuZFB1bGwoZGF0YXNldFJlb3JnYW5pemVkRGlyKVxuICAgICAgfVxuICAgICAgY2xlYXJEaXJlY3RvcnkoZGF0YXNldFJlb3JnYW5pemVkRGlyKVxuXG4gICAgICBjb25zdCBhY3RldXJzUmVvcmdhbml6ZWREaXIgPSBwYXRoLmpvaW4oZGF0YXNldFJlb3JnYW5pemVkRGlyLCBcImFjdGV1cnNcIilcbiAgICAgIGZzLm1rZGlyU3luYyhhY3RldXJzUmVvcmdhbml6ZWREaXIpXG4gICAgICBjb25zdCBvcmdhbmVzUmVvcmdhbml6ZWREaXIgPSBwYXRoLmpvaW4oZGF0YXNldFJlb3JnYW5pemVkRGlyLCBcIm9yZ2FuZXNcIilcbiAgICAgIGZzLm1rZGlyU3luYyhvcmdhbmVzUmVvcmdhbml6ZWREaXIpXG5cbiAgICAgIHN3aXRjaCAoZGF0YXNldC5zdHJ1Y3R1cmUpIHtcbiAgICAgICAgY2FzZSBEYXRhc2V0U3RydWN0dXJlLlNpbmdsZUZpbGU6XG4gICAgICAgICAge1xuICAgICAgICAgICAgY29uc3Qgb3JpZ2luYWxKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoXG4gICAgICAgICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBjb25zdCBvcmlnaW5hbERhdGE6IGFueSA9IHZhbGlkYXRlUmF3RGF0YVxuICAgICAgICAgICAgICA/IEFjdGV1cnNFdE9yZ2FuZXNSYXdDb252ZXJ0LnRvQWN0ZXVyc0V0T3JnYW5lcyhvcmlnaW5hbEpzb24pXG4gICAgICAgICAgICAgIDogSlNPTi5wYXJzZShvcmlnaW5hbEpzb24pXG5cbiAgICAgICAgICAgIGZvciAoY29uc3QgYWN0ZXVyIG9mIG9yaWdpbmFsRGF0YS5leHBvcnQuYWN0ZXVycy5hY3RldXIpIHtcbiAgICAgICAgICAgICAgY29uc3QgcmVvcmdhbml6ZWRKc29uRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICAgICAgICAgICAgICBhY3RldXJzUmVvcmdhbml6ZWREaXIsXG4gICAgICAgICAgICAgICAgYWN0ZXVyLnVpZFtcIiN0ZXh0XCJdICsgXCIuanNvblwiLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIGZzLndyaXRlRmlsZVN5bmMoXG4gICAgICAgICAgICAgICAgcmVvcmdhbml6ZWRKc29uRmlsZVBhdGgsXG4gICAgICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkoYWN0ZXVyLCBudWxsLCAyKSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IG9yZ2FuZSBvZiBvcmlnaW5hbERhdGEuZXhwb3J0Lm9yZ2FuZXMub3JnYW5lKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHJlb3JnYW5pemVkSnNvbkZpbGVQYXRoOiBzdHJpbmcgPSBwYXRoLmpvaW4oXG4gICAgICAgICAgICAgICAgb3JnYW5lc1Jlb3JnYW5pemVkRGlyLFxuICAgICAgICAgICAgICAgIG9yZ2FuZS51aWQgKyBcIi5qc29uXCIsXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgZnMud3JpdGVGaWxlU3luYyhcbiAgICAgICAgICAgICAgICByZW9yZ2FuaXplZEpzb25GaWxlUGF0aCxcbiAgICAgICAgICAgICAgICBKU09OLnN0cmluZ2lmeShvcmdhbmUsIG51bGwsIDIpLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgRGF0YXNldFN0cnVjdHVyZS5TZWdtZW50ZWRGaWxlczpcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjb25zdCBkZXBvcnRzQnlBY3RldXJVaWQ6IHtcbiAgICAgICAgICAgICAgW2FjdGV1clVpZDogc3RyaW5nXTogeyB1aWQ6IHN0cmluZyB9W11cbiAgICAgICAgICAgIH0gPSB7fVxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICBmcy5leGlzdHNTeW5jKFxuICAgICAgICAgICAgICAgIHBhdGguam9pbihvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLCBcImRlcG9ydFwiKSxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIGZvciAoY29uc3QgZGVwb3J0U3BsaXRQYXRoIG9mIHdhbGtEaXIoXG4gICAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICAgICBbXCJkZXBvcnRcIl0sXG4gICAgICAgICAgICAgICkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBkZXBvcnRGaWxlbmFtZSA9XG4gICAgICAgICAgICAgICAgICBkZXBvcnRTcGxpdFBhdGhbZGVwb3J0U3BsaXRQYXRoLmxlbmd0aCAtIDFdXG4gICAgICAgICAgICAgICAgaWYgKCFkZXBvcnRGaWxlbmFtZS5lbmRzV2l0aChcIi5qc29uXCIpKSB7XG4gICAgICAgICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBkZXBvcnRPcmlnaW5hbEZpbGVQYXRoID0gcGF0aC5qb2luKFxuICAgICAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICAgICAgIC4uLmRlcG9ydFNwbGl0UGF0aCxcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMudmVyYm9zZSkge1xuICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICAgICAgICAgIGAgIExvYWRpbmcgXCJkZXBvcnRcIiBmaWxlOiAke2RlcG9ydE9yaWdpbmFsRmlsZVBhdGh94oCmYCxcbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgZGVwb3J0T3JpZ2luYWxKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoXG4gICAgICAgICAgICAgICAgICBkZXBvcnRPcmlnaW5hbEZpbGVQYXRoLFxuICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICBjb25zdCBkZXBvcnRPcmlnaW5hbDogYW55ID0gdmFsaWRhdGVSYXdEYXRhXG4gICAgICAgICAgICAgICAgICA/IEFjdGV1cnNFdE9yZ2FuZXNSYXdDb252ZXJ0LnRvRGVwb3J0KGRlcG9ydE9yaWdpbmFsSnNvbilcbiAgICAgICAgICAgICAgICAgIDogSlNPTi5wYXJzZShkZXBvcnRPcmlnaW5hbEpzb24pXG4gICAgICAgICAgICAgICAgY29uc3QgZGVwb3J0ID0gZGVwb3J0T3JpZ2luYWwuZGVwb3J0XG4gICAgICAgICAgICAgICAgbGV0IGRlcG9ydHMgPSBkZXBvcnRzQnlBY3RldXJVaWRbZGVwb3J0LmFjdGV1clJlZl1cbiAgICAgICAgICAgICAgICBpZiAoZGVwb3J0cyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICBkZXBvcnRzID0gZGVwb3J0c0J5QWN0ZXVyVWlkW2RlcG9ydC5hY3RldXJSZWZdID0gW11cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZGVwb3J0cy5wdXNoKGRlcG9ydClcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGZvciAoY29uc3QgZGVwb3J0cyBvZiBPYmplY3QudmFsdWVzKGRlcG9ydHNCeUFjdGV1clVpZCkpIHtcbiAgICAgICAgICAgICAgICBkZXBvcnRzLnNvcnQoKGEsIGIpID0+XG4gICAgICAgICAgICAgICAgICBhLnVpZC5sZW5ndGggPT09IGIudWlkLmxlbmd0aFxuICAgICAgICAgICAgICAgICAgICA/IGEudWlkLmxvY2FsZUNvbXBhcmUoYi51aWQpXG4gICAgICAgICAgICAgICAgICAgIDogYS51aWQubGVuZ3RoIC0gYi51aWQubGVuZ3RoLFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBtYW5kYXRzQnlBY3RldXJVaWQ6IHtcbiAgICAgICAgICAgICAgW2FjdGV1clVpZDogc3RyaW5nXTogeyB1aWQ6IHN0cmluZyB9W11cbiAgICAgICAgICAgIH0gPSB7fVxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICBmcy5leGlzdHNTeW5jKFxuICAgICAgICAgICAgICAgIHBhdGguam9pbihvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLCBcIm1hbmRhdFwiKSxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIGZvciAoY29uc3QgbWFuZGF0U3BsaXRQYXRoIG9mIHdhbGtEaXIoXG4gICAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICAgICBbXCJtYW5kYXRcIl0sXG4gICAgICAgICAgICAgICkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBtYW5kYXRGaWxlbmFtZSA9XG4gICAgICAgICAgICAgICAgICBtYW5kYXRTcGxpdFBhdGhbbWFuZGF0U3BsaXRQYXRoLmxlbmd0aCAtIDFdXG4gICAgICAgICAgICAgICAgaWYgKCFtYW5kYXRGaWxlbmFtZS5lbmRzV2l0aChcIi5qc29uXCIpKSB7XG4gICAgICAgICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBtYW5kYXRPcmlnaW5hbEZpbGVQYXRoID0gcGF0aC5qb2luKFxuICAgICAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICAgICAgIC4uLm1hbmRhdFNwbGl0UGF0aCxcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMudmVyYm9zZSkge1xuICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICAgICAgICAgIGAgIExvYWRpbmcgXCJtYW5kYXRcIiBmaWxlOiAke21hbmRhdE9yaWdpbmFsRmlsZVBhdGh94oCmYCxcbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgbWFuZGF0T3JpZ2luYWxKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoXG4gICAgICAgICAgICAgICAgICBtYW5kYXRPcmlnaW5hbEZpbGVQYXRoLFxuICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICBjb25zdCBtYW5kYXRPcmlnaW5hbDogYW55ID0gdmFsaWRhdGVSYXdEYXRhXG4gICAgICAgICAgICAgICAgICA/IEFjdGV1cnNFdE9yZ2FuZXNSYXdDb252ZXJ0LnRvTWFuZGF0V3JhcHBlcihcbiAgICAgICAgICAgICAgICAgICAgICBtYW5kYXRPcmlnaW5hbEpzb24sXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgIDogSlNPTi5wYXJzZShtYW5kYXRPcmlnaW5hbEpzb24pXG4gICAgICAgICAgICAgICAgY29uc3QgbWFuZGF0ID0gbWFuZGF0T3JpZ2luYWwubWFuZGF0XG4gICAgICAgICAgICAgICAgbGV0IG1hbmRhdHMgPSBtYW5kYXRzQnlBY3RldXJVaWRbbWFuZGF0LmFjdGV1clJlZl1cbiAgICAgICAgICAgICAgICBpZiAobWFuZGF0cyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICBtYW5kYXRzID0gbWFuZGF0c0J5QWN0ZXVyVWlkW21hbmRhdC5hY3RldXJSZWZdID0gW11cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbWFuZGF0cy5wdXNoKG1hbmRhdClcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGZvciAoY29uc3QgbWFuZGF0cyBvZiBPYmplY3QudmFsdWVzKG1hbmRhdHNCeUFjdGV1clVpZCkpIHtcbiAgICAgICAgICAgICAgICBtYW5kYXRzLnNvcnQoKGEsIGIpID0+XG4gICAgICAgICAgICAgICAgICBhLnVpZC5sZW5ndGggPT09IGIudWlkLmxlbmd0aFxuICAgICAgICAgICAgICAgICAgICA/IGEudWlkLmxvY2FsZUNvbXBhcmUoYi51aWQpXG4gICAgICAgICAgICAgICAgICAgIDogYS51aWQubGVuZ3RoIC0gYi51aWQubGVuZ3RoLFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGFjdGV1clNwbGl0UGF0aCBvZiB3YWxrRGlyKFxuICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICAgICAgICBbXCJhY3RldXJcIl0sXG4gICAgICAgICAgICApKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGFjdGV1ckZpbGVuYW1lID0gYWN0ZXVyU3BsaXRQYXRoW2FjdGV1clNwbGl0UGF0aC5sZW5ndGggLSAxXVxuICAgICAgICAgICAgICBpZiAoIWFjdGV1ckZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnN0IGFjdGV1ck9yaWdpbmFsRmlsZVBhdGggPSBwYXRoLmpvaW4oXG4gICAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICAgICAuLi5hY3RldXJTcGxpdFBhdGgsXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgaWYgKG9wdGlvbnMudmVyYm9zZSkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgICAgICAgYCAgUmVvcmdhbml6aW5nIFwiYWN0ZXVyXCIgZmlsZTogJHthY3RldXJPcmlnaW5hbEZpbGVQYXRofeKApmAsXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnN0IGFjdGV1ck9yaWdpbmFsSnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKFxuICAgICAgICAgICAgICAgIGFjdGV1ck9yaWdpbmFsRmlsZVBhdGgsXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgY29uc3QgYWN0ZXVyT3JpZ2luYWw6IGFueSA9IHZhbGlkYXRlUmF3RGF0YVxuICAgICAgICAgICAgICAgID8gQWN0ZXVyc0V0T3JnYW5lc1Jhd0NvbnZlcnQudG9BY3RldXIoYWN0ZXVyT3JpZ2luYWxKc29uKVxuICAgICAgICAgICAgICAgIDogSlNPTi5wYXJzZShhY3RldXJPcmlnaW5hbEpzb24pXG4gICAgICAgICAgICAgIGNvbnN0IGFjdGV1ciA9IGFjdGV1ck9yaWdpbmFsLmFjdGV1clxuICAgICAgICAgICAgICBjb25zdCBhY3RldXJVaWQgPSBhY3RldXIudWlkW1wiI3RleHRcIl1cbiAgICAgICAgICAgICAgY29uc3QgZGVwb3J0cyA9IGRlcG9ydHNCeUFjdGV1clVpZFthY3RldXJVaWRdXG4gICAgICAgICAgICAgIGlmIChkZXBvcnRzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoYWN0ZXVyLmRlcG9ydHMsIHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICBhY3RldXIuZGVwb3J0cyA9IHsgZGVwb3J0OiBkZXBvcnRzIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjb25zdCBtYW5kYXRzID0gbWFuZGF0c0J5QWN0ZXVyVWlkW2FjdGV1clVpZF1cbiAgICAgICAgICAgICAgaWYgKG1hbmRhdHMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChhY3RldXIubWFuZGF0cywgdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgIGFjdGV1ci5tYW5kYXRzID0geyBtYW5kYXQ6IG1hbmRhdHMgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnN0IGFjdGV1clJlb3JnYW5pemVkSnNvbkZpbGVQYXRoOiBzdHJpbmcgPSBwYXRoLmpvaW4oXG4gICAgICAgICAgICAgICAgYWN0ZXVyc1Jlb3JnYW5pemVkRGlyLFxuICAgICAgICAgICAgICAgIGFjdGV1clVpZCArIFwiLmpzb25cIixcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBmcy53cml0ZUZpbGVTeW5jKFxuICAgICAgICAgICAgICAgIGFjdGV1clJlb3JnYW5pemVkSnNvbkZpbGVQYXRoLFxuICAgICAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KGFjdGV1ciwgbnVsbCwgMiksXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9yIChjb25zdCBvcmdhbmVTcGxpdFBhdGggb2Ygd2Fsa0RpcihcbiAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICAgW1wib3JnYW5lXCJdLFxuICAgICAgICAgICAgKSkge1xuICAgICAgICAgICAgICBjb25zdCBvcmdhbmVGaWxlbmFtZSA9IG9yZ2FuZVNwbGl0UGF0aFtvcmdhbmVTcGxpdFBhdGgubGVuZ3RoIC0gMV1cbiAgICAgICAgICAgICAgaWYgKCFvcmdhbmVGaWxlbmFtZS5lbmRzV2l0aChcIi5qc29uXCIpKSB7XG4gICAgICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjb25zdCBvcmdhbmVPcmlnaW5hbEZpbGVQYXRoID0gcGF0aC5qb2luKFxuICAgICAgICAgICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgICAgICAgICAgLi4ub3JnYW5lU3BsaXRQYXRoLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIGlmIChvcHRpb25zLnZlcmJvc2UpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgICAgICAgIGAgIFJlb3JnYW5pemluZyBcIm9yZ2FuZVwiIGZpbGU6ICR7b3JnYW5lT3JpZ2luYWxGaWxlUGF0aH3igKZgLFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjb25zdCBvcmdhbmVPcmlnaW5hbEpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhcbiAgICAgICAgICAgICAgICBvcmdhbmVPcmlnaW5hbEZpbGVQYXRoLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIGNvbnN0IG9yZ2FuZU9yaWdpbmFsOiBhbnkgPSB2YWxpZGF0ZVJhd0RhdGFcbiAgICAgICAgICAgICAgICA/IEFjdGV1cnNFdE9yZ2FuZXNSYXdDb252ZXJ0LnRvT3JnYW5lKG9yZ2FuZU9yaWdpbmFsSnNvbilcbiAgICAgICAgICAgICAgICA6IEpTT04ucGFyc2Uob3JnYW5lT3JpZ2luYWxKc29uKVxuICAgICAgICAgICAgICBjb25zdCBvcmdhbmUgPSBvcmdhbmVPcmlnaW5hbC5vcmdhbmVcbiAgICAgICAgICAgICAgY29uc3Qgb3JnYW5lUmVvcmdhbml6ZWRKc29uRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICAgICAgICAgICAgICBvcmdhbmVzUmVvcmdhbml6ZWREaXIsXG4gICAgICAgICAgICAgICAgb3JnYW5lLnVpZCArIFwiLmpzb25cIixcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBmcy53cml0ZUZpbGVTeW5jKFxuICAgICAgICAgICAgICAgIG9yZ2FuZVJlb3JnYW5pemVkSnNvbkZpbGVQYXRoLFxuICAgICAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KG9yZ2FuZSwgbnVsbCwgMiksXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWtcbiAgICAgIH1cblxuICAgICAgY29tbWl0R2l0KGRhdGFzZXRSZW9yZ2FuaXplZERpciwgb3B0aW9ucylcbiAgICB9XG4gIH1cblxuICBpZiAoZW5hYmxlZERhdGFzZXRzICYgRW5hYmxlZERhdGFzZXRzLkFnZW5kYXMpIHtcbiAgICBmb3IgKGNvbnN0IGRhdGFzZXQgb2YgY2hvc2VuRGF0YXNldHMuYWdlbmRhcykge1xuICAgICAgY29uc3Qgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aDogc3RyaW5nID0gcGF0aC5qb2luKFxuICAgICAgICBkYXRhRGlyLFxuICAgICAgICBkYXRhc2V0LmZpbGVuYW1lLFxuICAgICAgKVxuICAgICAgaWYgKCFvcHRpb25zLnNpbGVudCkge1xuICAgICAgICBjb25zb2xlLmxvZyhgUmVvcmdhbml6aW5nICR7b3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aH1gKVxuICAgICAgfVxuXG4gICAgICBjb25zdCBkYXRhc2V0TmFtZSA9IHBhdGguYmFzZW5hbWUoXG4gICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgIFwiLmpzb25cIixcbiAgICAgIClcbiAgICAgIGNsb25lR2l0KGdpdEdyb3VwVXJsLCBkYXRhc2V0TmFtZSwgZGF0YURpcilcblxuICAgICAgY29uc3QgZGF0YXNldFJlb3JnYW5pemVkRGlyID0gcGF0aC5qb2luKGRhdGFEaXIsIGRhdGFzZXROYW1lKVxuICAgICAgY2xlYXJEaXJlY3RvcnkoZGF0YXNldFJlb3JnYW5pemVkRGlyKVxuXG4gICAgICBzd2l0Y2ggKGRhdGFzZXQuc3RydWN0dXJlKSB7XG4gICAgICAgIGNhc2UgRGF0YXNldFN0cnVjdHVyZS5TaW5nbGVGaWxlOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNvbnN0IG9yaWdpbmFsSnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKFxuICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgY29uc3Qgb3JpZ2luYWxEYXRhOiBhbnkgPSB2YWxpZGF0ZVJhd0RhdGFcbiAgICAgICAgICAgICAgPyBBZ2VuZGFzUmF3Q29udmVydC50b0FnZW5kYXMob3JpZ2luYWxKc29uKVxuICAgICAgICAgICAgICA6IEpTT04ucGFyc2Uob3JpZ2luYWxKc29uKVxuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IHJldW5pb24gb2Ygb3JpZ2luYWxEYXRhLnJldW5pb25zLnJldW5pb24pIHtcbiAgICAgICAgICAgICAgd3JpdGVSZW9yZ2FuaXplZEpzb24oXG4gICAgICAgICAgICAgICAgZGF0YXNldFJlb3JnYW5pemVkRGlyLFxuICAgICAgICAgICAgICAgIHJldW5pb24sXG4gICAgICAgICAgICAgICAgcGF0aEZyb21SZXVuaW9uVWlkLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgRGF0YXNldFN0cnVjdHVyZS5TZWdtZW50ZWRGaWxlczpcbiAgICAgICAgICB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHJldW5pb25TcGxpdFBhdGggb2Ygd2Fsa0RpcihcbiAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICAgW1wicmV1bmlvblwiXSxcbiAgICAgICAgICAgICkpIHtcbiAgICAgICAgICAgICAgY29uc3QgcmV1bmlvbkZpbGVuYW1lID1cbiAgICAgICAgICAgICAgICByZXVuaW9uU3BsaXRQYXRoW3JldW5pb25TcGxpdFBhdGgubGVuZ3RoIC0gMV1cbiAgICAgICAgICAgICAgaWYgKCFyZXVuaW9uRmlsZW5hbWUuZW5kc1dpdGgoXCIuanNvblwiKSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc3QgcmV1bmlvbk9yaWdpbmFsRmlsZVBhdGggPSBwYXRoLmpvaW4oXG4gICAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICAgICAuLi5yZXVuaW9uU3BsaXRQYXRoLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIGlmIChvcHRpb25zLnZlcmJvc2UpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgICAgICAgIGAgIFJlb3JnYW5pemluZyBcInJldW5pb25cIiBmaWxlOiAke3JldW5pb25PcmlnaW5hbEZpbGVQYXRofeKApmAsXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnN0IHJldW5pb25PcmlnaW5hbEpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhcbiAgICAgICAgICAgICAgICByZXVuaW9uT3JpZ2luYWxGaWxlUGF0aCxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBjb25zdCByZXVuaW9uT3JpZ2luYWw6IGFueSA9IHZhbGlkYXRlUmF3RGF0YVxuICAgICAgICAgICAgICAgID8gQWdlbmRhc1Jhd0NvbnZlcnQudG9SZXVuaW9uKHJldW5pb25PcmlnaW5hbEpzb24pXG4gICAgICAgICAgICAgICAgOiBKU09OLnBhcnNlKHJldW5pb25PcmlnaW5hbEpzb24pXG4gICAgICAgICAgICAgIGNvbnN0IHJldW5pb24gPSByZXVuaW9uT3JpZ2luYWwucmV1bmlvblxuICAgICAgICAgICAgICB3cml0ZVJlb3JnYW5pemVkSnNvbihcbiAgICAgICAgICAgICAgICBkYXRhc2V0UmVvcmdhbml6ZWREaXIsXG4gICAgICAgICAgICAgICAgcmV1bmlvbixcbiAgICAgICAgICAgICAgICBwYXRoRnJvbVJldW5pb25VaWQsXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWtcbiAgICAgIH1cblxuICAgICAgY29tbWl0R2l0KGRhdGFzZXRSZW9yZ2FuaXplZERpciwgb3B0aW9ucylcbiAgICB9XG4gIH1cblxuICBpZiAoZW5hYmxlZERhdGFzZXRzICYgRW5hYmxlZERhdGFzZXRzLkFtZW5kZW1lbnRzKSB7XG4gICAgZm9yIChjb25zdCBkYXRhc2V0IG9mIGNob3NlbkRhdGFzZXRzLmFtZW5kZW1lbnRzKSB7XG4gICAgICBjb25zdCBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoOiBzdHJpbmcgPSBwYXRoLmpvaW4oXG4gICAgICAgIGRhdGFEaXIsXG4gICAgICAgIGRhdGFzZXQuZmlsZW5hbWUsXG4gICAgICApXG4gICAgICBpZiAoIW9wdGlvbnMuc2lsZW50KSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBSZW9yZ2FuaXppbmcgJHtvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRofWApXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGRhdGFzZXROYW1lID0gcGF0aC5iYXNlbmFtZShcbiAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgXCIuanNvblwiLFxuICAgICAgKVxuICAgICAgY2xvbmVHaXQoZ2l0R3JvdXBVcmwsIGRhdGFzZXROYW1lLCBkYXRhRGlyKVxuXG4gICAgICBjb25zdCBkYXRhc2V0UmVvcmdhbml6ZWREaXIgPSBwYXRoLmpvaW4oZGF0YURpciwgZGF0YXNldE5hbWUpXG4gICAgICBjbGVhckRpcmVjdG9yeShkYXRhc2V0UmVvcmdhbml6ZWREaXIpXG5cbiAgICAgIHN3aXRjaCAoZGF0YXNldC5zdHJ1Y3R1cmUpIHtcbiAgICAgICAgY2FzZSBEYXRhc2V0U3RydWN0dXJlLlNpbmdsZUZpbGU6XG4gICAgICAgICAge1xuICAgICAgICAgICAgY29uc3Qgb3JpZ2luYWxKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoXG4gICAgICAgICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBjb25zdCBvcmlnaW5hbERhdGE6IGFueSA9IHZhbGlkYXRlUmF3RGF0YVxuICAgICAgICAgICAgICA/IEFtZW5kZW1lbnRzUmF3Q29udmVydC50b0FtZW5kZW1lbnRzKG9yaWdpbmFsSnNvbilcbiAgICAgICAgICAgICAgOiBKU09OLnBhcnNlKG9yaWdpbmFsSnNvbilcblxuICAgICAgICAgICAgZm9yIChjb25zdCB0ZXh0ZUxlZ2lzbGF0aWYgb2Ygb3JpZ2luYWxEYXRhLnRleHRlc0V0QW1lbmRlbWVudHNcbiAgICAgICAgICAgICAgLnRleHRlbGVnKSB7XG4gICAgICAgICAgICAgIGZvciAoY29uc3QgYW1lbmRlbWVudCBvZiB0ZXh0ZUxlZ2lzbGF0aWYuYW1lbmRlbWVudHMpIHtcbiAgICAgICAgICAgICAgICB3cml0ZUFtZW5kZW1lbnRSZW9yZ2FuaXplZEpzb24oXG4gICAgICAgICAgICAgICAgICBkYXRhc2V0UmVvcmdhbml6ZWREaXIsXG4gICAgICAgICAgICAgICAgICBhbWVuZGVtZW50LFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIERhdGFzZXRTdHJ1Y3R1cmUuU2VnbWVudGVkRmlsZXM6XG4gICAgICAgICAge1xuICAgICAgICAgICAgZm9yIChjb25zdCBhbWVuZGVtZW50U3BsaXRQYXRoIG9mIHdhbGtEaXIoXG4gICAgICAgICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgICAgICApKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGFtZW5kZW1lbnRGaWxlbmFtZSA9XG4gICAgICAgICAgICAgICAgYW1lbmRlbWVudFNwbGl0UGF0aFthbWVuZGVtZW50U3BsaXRQYXRoLmxlbmd0aCAtIDFdXG4gICAgICAgICAgICAgIGlmICghYW1lbmRlbWVudEZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnN0IGFtZW5kZW1lbnRPcmlnaW5hbEZpbGVQYXRoID0gcGF0aC5qb2luKFxuICAgICAgICAgICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgICAgICAgICAgLi4uYW1lbmRlbWVudFNwbGl0UGF0aCxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBpZiAob3B0aW9ucy52ZXJib3NlKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICAgICAgICBgICBSZW9yZ2FuaXppbmcgXCJhbWVuZGVtZW50XCIgZmlsZTogJHthbWVuZGVtZW50T3JpZ2luYWxGaWxlUGF0aH3igKZgLFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjb25zdCBhbWVuZGVtZW50T3JpZ2luYWxKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoXG4gICAgICAgICAgICAgICAgYW1lbmRlbWVudE9yaWdpbmFsRmlsZVBhdGgsXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgY29uc3QgYW1lbmRlbWVudE9yaWdpbmFsOiBhbnkgPSB2YWxpZGF0ZVJhd0RhdGFcbiAgICAgICAgICAgICAgICA/IEFtZW5kZW1lbnRzUmF3Q29udmVydC50b0FtZW5kZW1lbnRXcmFwcGVyKFxuICAgICAgICAgICAgICAgICAgICBhbWVuZGVtZW50T3JpZ2luYWxKc29uLFxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIDogSlNPTi5wYXJzZShhbWVuZGVtZW50T3JpZ2luYWxKc29uKVxuICAgICAgICAgICAgICBjb25zdCBhbWVuZGVtZW50ID0gYW1lbmRlbWVudE9yaWdpbmFsLmFtZW5kZW1lbnRcbiAgICAgICAgICAgICAgd3JpdGVBbWVuZGVtZW50UmVvcmdhbml6ZWRKc29uKGRhdGFzZXRSZW9yZ2FuaXplZERpciwgYW1lbmRlbWVudClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWtcbiAgICAgIH1cblxuICAgICAgY29tbWl0R2l0KGRhdGFzZXRSZW9yZ2FuaXplZERpciwgb3B0aW9ucylcbiAgICB9XG4gIH1cblxuICBpZiAoZW5hYmxlZERhdGFzZXRzICYgRW5hYmxlZERhdGFzZXRzLkRvc3NpZXJzTGVnaXNsYXRpZnMpIHtcbiAgICBmb3IgKGNvbnN0IGRhdGFzZXQgb2YgY2hvc2VuRGF0YXNldHMuZG9zc2llcnNMZWdpc2xhdGlmcykge1xuICAgICAgY29uc3Qgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aDogc3RyaW5nID0gcGF0aC5qb2luKFxuICAgICAgICBkYXRhRGlyLFxuICAgICAgICBkYXRhc2V0LmZpbGVuYW1lLFxuICAgICAgKVxuICAgICAgaWYgKCFvcHRpb25zLnNpbGVudCkge1xuICAgICAgICBjb25zb2xlLmxvZyhgUmVvcmdhbml6aW5nICR7b3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aH1gKVxuICAgICAgfVxuXG4gICAgICBjb25zdCBkYXRhc2V0TmFtZSA9IHBhdGguYmFzZW5hbWUoXG4gICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgIFwiLmpzb25cIixcbiAgICAgIClcbiAgICAgIGNsb25lR2l0KGdpdEdyb3VwVXJsLCBkYXRhc2V0TmFtZSwgZGF0YURpcilcblxuICAgICAgY29uc3QgZGF0YXNldFJlb3JnYW5pemVkRGlyID0gcGF0aC5qb2luKGRhdGFEaXIsIGRhdGFzZXROYW1lKVxuICAgICAgY2xlYXJEaXJlY3RvcnkoZGF0YXNldFJlb3JnYW5pemVkRGlyKVxuXG4gICAgICBjb25zdCBkb2N1bWVudHNEaXIgPSBwYXRoLmpvaW4oZGF0YXNldFJlb3JnYW5pemVkRGlyLCBcImRvY3VtZW50c1wiKVxuICAgICAgZnMubWtkaXJTeW5jKGRvY3VtZW50c0RpcilcbiAgICAgIGNvbnN0IGRvc3NpZXJzRGlyID0gcGF0aC5qb2luKGRhdGFzZXRSZW9yZ2FuaXplZERpciwgXCJkb3NzaWVyc1wiKVxuICAgICAgZnMubWtkaXJTeW5jKGRvc3NpZXJzRGlyKVxuXG4gICAgICBzd2l0Y2ggKGRhdGFzZXQuc3RydWN0dXJlKSB7XG4gICAgICAgIGNhc2UgRGF0YXNldFN0cnVjdHVyZS5TaW5nbGVGaWxlOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNvbnN0IG9yaWdpbmFsSnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKFxuICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgY29uc3Qgb3JpZ2luYWxEYXRhOiBhbnkgPSB2YWxpZGF0ZVJhd0RhdGFcbiAgICAgICAgICAgICAgPyBEb3NzaWVyc0xlZ2lzbGF0aWZzUmF3Q29udmVydC50b0Rvc3NpZXJzTGVnaXNsYXRpZnMoXG4gICAgICAgICAgICAgICAgICBvcmlnaW5hbEpzb24sXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICA6IEpTT04ucGFyc2Uob3JpZ2luYWxKc29uKVxuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGRvY3VtZW50IG9mIG9yaWdpbmFsRGF0YS5leHBvcnQudGV4dGVzTGVnaXNsYXRpZnNcbiAgICAgICAgICAgICAgLmRvY3VtZW50KSB7XG4gICAgICAgICAgICAgIHdyaXRlUmVvcmdhbml6ZWRKc29uKGRvY3VtZW50c0RpciwgZG9jdW1lbnQsIHBhdGhGcm9tRG9jdW1lbnRVaWQpXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZvciAoY29uc3QgeyBkb3NzaWVyUGFybGVtZW50YWlyZSB9IG9mIG9yaWdpbmFsRGF0YS5leHBvcnRcbiAgICAgICAgICAgICAgLmRvc3NpZXJzTGVnaXNsYXRpZnMuZG9zc2llcikge1xuICAgICAgICAgICAgICB3cml0ZVJlb3JnYW5pemVkSnNvbihcbiAgICAgICAgICAgICAgICBkb3NzaWVyc0RpcixcbiAgICAgICAgICAgICAgICBkb3NzaWVyUGFybGVtZW50YWlyZSxcbiAgICAgICAgICAgICAgICBwYXRoRnJvbURvc3NpZXJQYXJsZW1lbnRhaXJlVWlkLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgRGF0YXNldFN0cnVjdHVyZS5TZWdtZW50ZWRGaWxlczpcbiAgICAgICAgICB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGRvY3VtZW50U3BsaXRQYXRoIG9mIHdhbGtEaXIoXG4gICAgICAgICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgICAgICAgIFtcImRvY3VtZW50XCJdLFxuICAgICAgICAgICAgKSkge1xuICAgICAgICAgICAgICBjb25zdCBkb2N1bWVudEZpbGVuYW1lID1cbiAgICAgICAgICAgICAgICBkb2N1bWVudFNwbGl0UGF0aFtkb2N1bWVudFNwbGl0UGF0aC5sZW5ndGggLSAxXVxuICAgICAgICAgICAgICBpZiAoIWRvY3VtZW50RmlsZW5hbWUuZW5kc1dpdGgoXCIuanNvblwiKSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc3QgZG9jdW1lbnRPcmlnaW5hbEZpbGVQYXRoID0gcGF0aC5qb2luKFxuICAgICAgICAgICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgICAgICAgICAgLi4uZG9jdW1lbnRTcGxpdFBhdGgsXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgaWYgKG9wdGlvbnMudmVyYm9zZSkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgICAgICAgYCAgUmVvcmdhbml6aW5nIFwiZG9jdW1lbnRcIiBmaWxlOiAke2RvY3VtZW50T3JpZ2luYWxGaWxlUGF0aH3igKZgLFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjb25zdCBkb2N1bWVudE9yaWdpbmFsSnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKFxuICAgICAgICAgICAgICAgIGRvY3VtZW50T3JpZ2luYWxGaWxlUGF0aCxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBjb25zdCBkb2N1bWVudE9yaWdpbmFsOiBhbnkgPSB2YWxpZGF0ZVJhd0RhdGFcbiAgICAgICAgICAgICAgICA/IERvc3NpZXJzTGVnaXNsYXRpZnNSYXdDb252ZXJ0LnRvRG9jdW1lbnQoZG9jdW1lbnRPcmlnaW5hbEpzb24pXG4gICAgICAgICAgICAgICAgOiBKU09OLnBhcnNlKGRvY3VtZW50T3JpZ2luYWxKc29uKVxuICAgICAgICAgICAgICBjb25zdCBkb2N1bWVudCA9IGRvY3VtZW50T3JpZ2luYWwuZG9jdW1lbnRcbiAgICAgICAgICAgICAgd3JpdGVSZW9yZ2FuaXplZEpzb24oZG9jdW1lbnRzRGlyLCBkb2N1bWVudCwgcGF0aEZyb21Eb2N1bWVudFVpZClcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9yIChjb25zdCBkb3NzaWVyUGFybGVtZW50YWlyZVNwbGl0UGF0aCBvZiB3YWxrRGlyKFxuICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICAgICAgICBbXCJkb3NzaWVyUGFybGVtZW50YWlyZVwiXSxcbiAgICAgICAgICAgICkpIHtcbiAgICAgICAgICAgICAgY29uc3QgZG9zc2llclBhcmxlbWVudGFpcmVGaWxlbmFtZSA9XG4gICAgICAgICAgICAgICAgZG9zc2llclBhcmxlbWVudGFpcmVTcGxpdFBhdGhbXG4gICAgICAgICAgICAgICAgICBkb3NzaWVyUGFybGVtZW50YWlyZVNwbGl0UGF0aC5sZW5ndGggLSAxXG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICBpZiAoIWRvc3NpZXJQYXJsZW1lbnRhaXJlRmlsZW5hbWUuZW5kc1dpdGgoXCIuanNvblwiKSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc3QgZG9zc2llclBhcmxlbWVudGFpcmVPcmlnaW5hbEZpbGVQYXRoID0gcGF0aC5qb2luKFxuICAgICAgICAgICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgICAgICAgICAgLi4uZG9zc2llclBhcmxlbWVudGFpcmVTcGxpdFBhdGgsXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgaWYgKG9wdGlvbnMudmVyYm9zZSkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgICAgICAgYCAgUmVvcmdhbml6aW5nIFwiZG9zc2llclBhcmxlbWVudGFpcmVcIiBmaWxlOiAke2Rvc3NpZXJQYXJsZW1lbnRhaXJlT3JpZ2luYWxGaWxlUGF0aH3igKZgLFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjb25zdCBkb3NzaWVyUGFybGVtZW50YWlyZU9yaWdpbmFsSnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKFxuICAgICAgICAgICAgICAgIGRvc3NpZXJQYXJsZW1lbnRhaXJlT3JpZ2luYWxGaWxlUGF0aCxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBjb25zdCBkb3NzaWVyUGFybGVtZW50YWlyZU9yaWdpbmFsOiBhbnkgPSB2YWxpZGF0ZVJhd0RhdGFcbiAgICAgICAgICAgICAgICA/IERvc3NpZXJzTGVnaXNsYXRpZnNSYXdDb252ZXJ0LnRvRG9zc2llclBhcmxlbWVudGFpcmUoXG4gICAgICAgICAgICAgICAgICAgIGRvc3NpZXJQYXJsZW1lbnRhaXJlT3JpZ2luYWxKc29uLFxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIDogSlNPTi5wYXJzZShkb3NzaWVyUGFybGVtZW50YWlyZU9yaWdpbmFsSnNvbilcbiAgICAgICAgICAgICAgY29uc3QgZG9zc2llclBhcmxlbWVudGFpcmUgPVxuICAgICAgICAgICAgICAgIGRvc3NpZXJQYXJsZW1lbnRhaXJlT3JpZ2luYWwuZG9zc2llclBhcmxlbWVudGFpcmVcbiAgICAgICAgICAgICAgd3JpdGVSZW9yZ2FuaXplZEpzb24oXG4gICAgICAgICAgICAgICAgZG9zc2llcnNEaXIsXG4gICAgICAgICAgICAgICAgZG9zc2llclBhcmxlbWVudGFpcmUsXG4gICAgICAgICAgICAgICAgcGF0aEZyb21Eb3NzaWVyUGFybGVtZW50YWlyZVVpZCxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVha1xuICAgICAgfVxuXG4gICAgICBjb21taXRHaXQoZGF0YXNldFJlb3JnYW5pemVkRGlyLCBvcHRpb25zKVxuICAgIH1cbiAgfVxuXG4gIGlmIChlbmFibGVkRGF0YXNldHMgJiBFbmFibGVkRGF0YXNldHMuU2NydXRpbnMpIHtcbiAgICBmb3IgKGxldCBkYXRhc2V0IG9mIGNob3NlbkRhdGFzZXRzLnNjcnV0aW5zKSB7XG4gICAgICBjb25zdCBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoOiBzdHJpbmcgPSBwYXRoLmpvaW4oXG4gICAgICAgIGRhdGFEaXIsXG4gICAgICAgIGRhdGFzZXQuZmlsZW5hbWUsXG4gICAgICApXG4gICAgICBpZiAoIW9wdGlvbnMuc2lsZW50KSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBSZW9yZ2FuaXppbmcgJHtvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRofWApXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGRhdGFzZXROYW1lID0gcGF0aC5iYXNlbmFtZShcbiAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgXCIuanNvblwiLFxuICAgICAgKVxuICAgICAgY2xvbmVHaXQoZ2l0R3JvdXBVcmwsIGRhdGFzZXROYW1lLCBkYXRhRGlyKVxuXG4gICAgICBjb25zdCBkYXRhc2V0UmVvcmdhbml6ZWREaXIgPSBwYXRoLmpvaW4oZGF0YURpciwgZGF0YXNldE5hbWUpXG4gICAgICBjbGVhckRpcmVjdG9yeShkYXRhc2V0UmVvcmdhbml6ZWREaXIpXG5cbiAgICAgIHN3aXRjaCAoZGF0YXNldC5zdHJ1Y3R1cmUpIHtcbiAgICAgICAgY2FzZSBEYXRhc2V0U3RydWN0dXJlLlNpbmdsZUZpbGU6XG4gICAgICAgICAge1xuICAgICAgICAgICAgY29uc3Qgb3JpZ2luYWxKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoXG4gICAgICAgICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBjb25zdCBvcmlnaW5hbERhdGE6IGFueSA9IHZhbGlkYXRlUmF3RGF0YVxuICAgICAgICAgICAgICA/IFNjcnV0aW5zUmF3Q29udmVydC50b1NjcnV0aW5zKG9yaWdpbmFsSnNvbilcbiAgICAgICAgICAgICAgOiBKU09OLnBhcnNlKG9yaWdpbmFsSnNvbilcblxuICAgICAgICAgICAgZm9yIChjb25zdCBzY3J1dGluIG9mIG9yaWdpbmFsRGF0YS5zY3J1dGlucy5zY3J1dGluKSB7XG4gICAgICAgICAgICAgIHdyaXRlUmVvcmdhbml6ZWRKc29uKFxuICAgICAgICAgICAgICAgIGRhdGFzZXRSZW9yZ2FuaXplZERpcixcbiAgICAgICAgICAgICAgICBzY3J1dGluLFxuICAgICAgICAgICAgICAgIHBhdGhGcm9tU2NydXRpblVpZCxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIERhdGFzZXRTdHJ1Y3R1cmUuU2VnbWVudGVkRmlsZXM6XG4gICAgICAgICAge1xuICAgICAgICAgICAgZm9yIChjb25zdCBzY3J1dGluU3BsaXRQYXRoIG9mIHdhbGtEaXIoXG4gICAgICAgICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgICAgICApKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHNjcnV0aW5GaWxlbmFtZSA9XG4gICAgICAgICAgICAgICAgc2NydXRpblNwbGl0UGF0aFtzY3J1dGluU3BsaXRQYXRoLmxlbmd0aCAtIDFdXG4gICAgICAgICAgICAgIGlmICghc2NydXRpbkZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnN0IHNjcnV0aW5PcmlnaW5hbEZpbGVQYXRoID0gcGF0aC5qb2luKFxuICAgICAgICAgICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgICAgICAgICAgLi4uc2NydXRpblNwbGl0UGF0aCxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBpZiAob3B0aW9ucy52ZXJib3NlKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICAgICAgICBgICBSZW9yZ2FuaXppbmcgXCJzY3J1dGluXCIgZmlsZTogJHtzY3J1dGluT3JpZ2luYWxGaWxlUGF0aH3igKZgLFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjb25zdCBzY3J1dGluT3JpZ2luYWxKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoXG4gICAgICAgICAgICAgICAgc2NydXRpbk9yaWdpbmFsRmlsZVBhdGgsXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgY29uc3Qgc2NydXRpbk9yaWdpbmFsOiBhbnkgPSB2YWxpZGF0ZVJhd0RhdGFcbiAgICAgICAgICAgICAgICA/IFNjcnV0aW5zUmF3Q29udmVydC50b1NjcnV0aW5XcmFwcGVyKHNjcnV0aW5PcmlnaW5hbEpzb24pXG4gICAgICAgICAgICAgICAgOiBKU09OLnBhcnNlKHNjcnV0aW5PcmlnaW5hbEpzb24pXG4gICAgICAgICAgICAgIGNvbnN0IHNjcnV0aW4gPSBzY3J1dGluT3JpZ2luYWwuc2NydXRpblxuICAgICAgICAgICAgICB3cml0ZVJlb3JnYW5pemVkSnNvbihcbiAgICAgICAgICAgICAgICBkYXRhc2V0UmVvcmdhbml6ZWREaXIsXG4gICAgICAgICAgICAgICAgc2NydXRpbixcbiAgICAgICAgICAgICAgICBwYXRoRnJvbVNjcnV0aW5VaWQsXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWtcbiAgICAgIH1cblxuICAgICAgY29tbWl0R2l0KGRhdGFzZXRSZW9yZ2FuaXplZERpciwgb3B0aW9ucylcbiAgICB9XG4gIH1cblxuICBpZiAoZW5hYmxlZERhdGFzZXRzICYgRW5hYmxlZERhdGFzZXRzLlF1ZXN0aW9ucykge1xuICAgIGZvciAoY29uc3QgZGF0YXNldCBvZiBkYXRhc2V0cy5xdWVzdGlvbnMpIHtcbiAgICAgIGNvbnN0IG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICAgICAgZGF0YURpcixcbiAgICAgICAgZGF0YXNldC5maWxlbmFtZSxcbiAgICAgIClcbiAgICAgIGlmICghb3B0aW9ucy5zaWxlbnQpIHtcbiAgICAgICAgY29uc29sZS5sb2coYFJlb3JnYW5pemluZyAke29yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGh9YClcbiAgICAgIH1cblxuICAgICAgY29uc3QgZGF0YXNldE5hbWUgPSBwYXRoLmJhc2VuYW1lKFxuICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICBcIi5qc29uXCIsXG4gICAgICApXG4gICAgICBjbG9uZUdpdChnaXRHcm91cFVybCwgZGF0YXNldE5hbWUsIGRhdGFEaXIpXG5cbiAgICAgIGNvbnN0IGRhdGFzZXRSZW9yZ2FuaXplZERpciA9IHBhdGguam9pbihkYXRhRGlyLCBkYXRhc2V0TmFtZSlcbiAgICAgIGNsZWFyRGlyZWN0b3J5KGRhdGFzZXRSZW9yZ2FuaXplZERpcilcblxuICAgICAgc3dpdGNoIChkYXRhc2V0LnN0cnVjdHVyZSkge1xuICAgICAgICBjYXNlIERhdGFzZXRTdHJ1Y3R1cmUuU2VnbWVudGVkRmlsZXM6XG4gICAgICAgICAge1xuICAgICAgICAgICAgZm9yIChjb25zdCBxdWVzdGlvblNwbGl0UGF0aCBvZiB3YWxrRGlyKFxuICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICAgICAgKSkge1xuICAgICAgICAgICAgICBjb25zdCBxdWVzdGlvbkZpbGVuYW1lID1cbiAgICAgICAgICAgICAgICBxdWVzdGlvblNwbGl0UGF0aFtxdWVzdGlvblNwbGl0UGF0aC5sZW5ndGggLSAxXVxuICAgICAgICAgICAgICBpZiAoIXF1ZXN0aW9uRmlsZW5hbWUuZW5kc1dpdGgoXCIuanNvblwiKSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc3QgcXVlc3Rpb25PcmlnaW5hbEZpbGVQYXRoID0gcGF0aC5qb2luKFxuICAgICAgICAgICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgICAgICAgICAgLi4ucXVlc3Rpb25TcGxpdFBhdGgsXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgaWYgKG9wdGlvbnMudmVyYm9zZSkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgICAgICAgYCAgUmVvcmdhbml6aW5nIFwicXVlc3Rpb25cIiBmaWxlOiAke3F1ZXN0aW9uT3JpZ2luYWxGaWxlUGF0aH3igKZgLFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjb25zdCBxdWVzdGlvbk9yaWdpbmFsSnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKFxuICAgICAgICAgICAgICAgIHF1ZXN0aW9uT3JpZ2luYWxGaWxlUGF0aCxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgKVxuXG4gICAgICAgICAgICAgIGNvbnN0IHF1ZXN0aW9uT3JpZ2luYWw6IGFueSA9IHZhbGlkYXRlUmF3RGF0YVxuICAgICAgICAgICAgICAgID8gUXVlc3Rpb25zUmF3Q29udmVydC50b1F1ZXN0aW9uV3JhcHBlcihxdWVzdGlvbk9yaWdpbmFsSnNvbilcbiAgICAgICAgICAgICAgICA6IEpTT04ucGFyc2UocXVlc3Rpb25PcmlnaW5hbEpzb24pXG4gICAgICAgICAgICAgIGNvbnN0IHF1ZXN0aW9uID0gcXVlc3Rpb25PcmlnaW5hbC5xdWVzdGlvblxuICAgICAgICAgICAgICB3cml0ZVJlb3JnYW5pemVkSnNvbihcbiAgICAgICAgICAgICAgICBkYXRhc2V0UmVvcmdhbml6ZWREaXIsXG4gICAgICAgICAgICAgICAgcXVlc3Rpb24sXG4gICAgICAgICAgICAgICAgcGF0aEZyb21RdWVzdGlvblVpZCxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVha1xuICAgICAgfVxuXG4gICAgICBjb21taXRHaXQoZGF0YXNldFJlb3JnYW5pemVkRGlyLCBvcHRpb25zKVxuICAgIH1cbiAgfVxuXG4gIGlmIChlbmFibGVkRGF0YXNldHMgJiBFbmFibGVkRGF0YXNldHMuQ29tcHRlc1JlbmR1c1NlYW5jZXMpIHtcbiAgICBmb3IgKGNvbnN0IGRhdGFzZXQgb2YgZGF0YXNldHMuY29tcHRlc1JlbmR1c1NlYW5jZXMpIHtcbiAgICAgIGNvbnN0IG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICAgICAgZGF0YURpcixcbiAgICAgICAgZGF0YXNldC5maWxlbmFtZSxcbiAgICAgIClcbiAgICAgIGlmICghb3B0aW9ucy5zaWxlbnQpIHtcbiAgICAgICAgY29uc29sZS5sb2coYFJlb3JnYW5pemluZyAke29yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGh9YClcbiAgICAgIH1cblxuICAgICAgY29uc3QgZGF0YXNldE5hbWUgPSBwYXRoLmJhc2VuYW1lKG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsIFwiLnhtbFwiKVxuICAgICAgY2xvbmVHaXQoZ2l0R3JvdXBVcmwsIGRhdGFzZXROYW1lLCBkYXRhRGlyKVxuXG4gICAgICBjb25zdCBkYXRhc2V0UmVvcmdhbml6ZWREaXIgPSBwYXRoLmpvaW4oZGF0YURpciwgZGF0YXNldE5hbWUpXG4gICAgICBjbGVhckRpcmVjdG9yeShkYXRhc2V0UmVvcmdhbml6ZWREaXIpXG5cbiAgICAgIHN3aXRjaCAoZGF0YXNldC5zdHJ1Y3R1cmUpIHtcbiAgICAgICAgY2FzZSBEYXRhc2V0U3RydWN0dXJlLlNlZ21lbnRlZEZpbGVzOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgY29tcHRlUmVuZHVTZWFuY2VTcGxpdFBhdGggb2Ygd2Fsa0RpcihcbiAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICkpIHtcbiAgICAgICAgICAgICAgY29uc3QgY29tcHRlUmVuZHVTZWFuY2VGaWxlbmFtZSA9XG4gICAgICAgICAgICAgICAgY29tcHRlUmVuZHVTZWFuY2VTcGxpdFBhdGhbXG4gICAgICAgICAgICAgICAgICBjb21wdGVSZW5kdVNlYW5jZVNwbGl0UGF0aC5sZW5ndGggLSAxXG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICBpZiAoIWNvbXB0ZVJlbmR1U2VhbmNlRmlsZW5hbWUuZW5kc1dpdGgoXCIuanNvblwiKSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc3QgY29tcHRlUmVuZHVTZWFuY2VPcmlnaW5hbEZpbGVQYXRoID0gcGF0aC5qb2luKFxuICAgICAgICAgICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgICAgICAgICAgLi4uY29tcHRlUmVuZHVTZWFuY2VTcGxpdFBhdGgsXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgaWYgKG9wdGlvbnMudmVyYm9zZSkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgICAgICAgYCAgUmVvcmdhbml6aW5nIFwiY29tcHRlUmVuZHVTZWFuY2VcIiBmaWxlOiAke2NvbXB0ZVJlbmR1U2VhbmNlT3JpZ2luYWxGaWxlUGF0aH3igKZgLFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjb25zdCBjb21wdGVSZW5kdVNlYW5jZU9yaWdpbmFsSnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKFxuICAgICAgICAgICAgICAgIGNvbXB0ZVJlbmR1U2VhbmNlT3JpZ2luYWxGaWxlUGF0aCxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBjb25zdCBjb21wdGVSZW5kdVNlYW5jZU9yaWdpbmFsOiBhbnkgPSB2YWxpZGF0ZVJhd0RhdGFcbiAgICAgICAgICAgICAgICA/IENvbXB0ZXNSZW5kdXNSYXdDb252ZXJ0LnRvQ29tcHRlUmVuZHVXcmFwcGVyKFxuICAgICAgICAgICAgICAgICAgICBjb21wdGVSZW5kdVNlYW5jZU9yaWdpbmFsSnNvbixcbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICA6IEpTT04ucGFyc2UoY29tcHRlUmVuZHVTZWFuY2VPcmlnaW5hbEpzb24pXG5cbiAgICAgICAgICAgICAgY29uc3QgY29tcHRlUmVuZHVTZWFuY2UgPSBjb21wdGVSZW5kdVNlYW5jZU9yaWdpbmFsLmNvbXB0ZVJlbmR1XG4gICAgICAgICAgICAgIHdyaXRlUmVvcmdhbml6ZWRKc29uKFxuICAgICAgICAgICAgICAgIGRhdGFzZXRSZW9yZ2FuaXplZERpcixcbiAgICAgICAgICAgICAgICBjb21wdGVSZW5kdVNlYW5jZSxcbiAgICAgICAgICAgICAgICBwYXRoRnJvbUNvbXB0ZVJlbmR1VWlkLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICB9XG5cbiAgICAgIGNvbW1pdEdpdChkYXRhc2V0UmVvcmdhbml6ZWREaXIsIG9wdGlvbnMpXG4gICAgfVxuICB9XG5cbiAgLy8gUmVzdG9yZSBzdGFuZGFyZCBjb252ZXJzaW9uIG9mIGRhdGVzIHRvIEpTT04uXG4gIERhdGUucHJvdG90eXBlLnRvSlNPTiA9IGV4aXN0aW5nRGF0ZVRvSnNvblxuXG4gIHJldHVybiBleGl0Q29kZVxufVxuXG5mdW5jdGlvbiB3cml0ZUFtZW5kZW1lbnRSZW9yZ2FuaXplZEpzb24oXG4gIGRhdGFzZXRSZW9yZ2FuaXplZERpcjogc3RyaW5nLFxuICBhbWVuZGVtZW50OiB7XG4gICAgdWlkOiBzdHJpbmdcbiAgICB0ZXh0ZUxlZ2lzbGF0aWZSZWY6IHN0cmluZ1xuICB9LFxuKTogdm9pZCB7XG4gIGNvbnN0IHVpZFRleHRlTGVnaXNsYXRpZiA9IGFtZW5kZW1lbnQudGV4dGVMZWdpc2xhdGlmUmVmXG4gIGFzc2VydC5ub3RTdHJpY3RFcXVhbCh1aWRUZXh0ZUxlZ2lzbGF0aWYsIHVuZGVmaW5lZClcbiAgY29uc3QgdGV4dGVMZWdpc2xhdGlmRGlyID0gcGF0aC5qb2luKFxuICAgIGRhdGFzZXRSZW9yZ2FuaXplZERpcixcbiAgICB1aWRUZXh0ZUxlZ2lzbGF0aWYsXG4gIClcbiAgZnMuZW5zdXJlRGlyU3luYyh0ZXh0ZUxlZ2lzbGF0aWZEaXIpXG4gIGNvbnN0IHJlb3JnYW5pemVkSnNvbkZpbGVQYXRoID0gcGF0aC5qb2luKFxuICAgIHRleHRlTGVnaXNsYXRpZkRpcixcbiAgICBhbWVuZGVtZW50LnVpZCArIFwiLmpzb25cIixcbiAgKVxuICBmcy53cml0ZUZpbGVTeW5jKFxuICAgIHJlb3JnYW5pemVkSnNvbkZpbGVQYXRoLFxuICAgIEpTT04uc3RyaW5naWZ5KGFtZW5kZW1lbnQsIG51bGwsIDIpLFxuICAgIHtcbiAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICB9LFxuICApXG59XG5cbmZ1bmN0aW9uIHdyaXRlUmVvcmdhbml6ZWRKc29uPFQgZXh0ZW5kcyB7IHVpZDogc3RyaW5nIH0+KFxuICBkaXI6IHN0cmluZyxcbiAgb2JqOiBULFxuICBwYXRoRnJvbVVpZDogKGRpcjogc3RyaW5nLCB1aWQ6IHN0cmluZykgPT4gc3RyaW5nLFxuKTogdm9pZCB7XG4gIGNvbnN0IGJhc2VuYW1lID0gcGF0aEZyb21VaWQoZGlyLCBvYmoudWlkKVxuICBmcy53cml0ZUZpbGVTeW5jKGAke2Jhc2VuYW1lfS5qc29uYCwgSlNPTi5zdHJpbmdpZnkob2JqLCBudWxsLCAyKSwge1xuICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgfSlcbn1cblxuZnVuY3Rpb24gbWFpbihhcmd2OiBhbnkpOiBudW1iZXIge1xuICBjb25zdCBvcHRpb25zID0gcGFyc2VBcmdzKGFyZ3YpXG4gIHJldHVybiByZW9yZ2FuaXplRGF0YShvcHRpb25zKVxufVxuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbmlmIChwcm9jZXNzLmFyZ3ZbMV0uZW5kc1dpdGgoXCJyZW9yZ2FuaXplX2RhdGEudHNcIikpXG4gIHByb2Nlc3MuZXhpdChtYWluKHByb2Nlc3MuYXJndikpXG4iXSwi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
|