@tricoteuses/assemblee 1.0.6 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/api.js +3 -9
- package/lib/api.mjs +4 -5
- package/lib/bugs/acteur-00010/plugin.test.js +3 -50
- package/lib/bugs/acteur-00010/plugin.test.mjs +1 -1
- package/lib/bugs/acteur-00010.js +2 -57
- package/lib/bugs/acteur-00010.mjs +1 -6
- package/lib/bugs/agenda-00002/plugin.test.js +3 -53
- package/lib/bugs/agenda-00002/plugin.test.mjs +1 -3
- package/lib/bugs/agenda-00002.js +3 -148
- package/lib/bugs/agenda-00002.mjs +1 -28
- package/lib/bugs/agenda-00008/plugin.test.js +3 -52
- package/lib/bugs/agenda-00008/plugin.test.mjs +1 -1
- package/lib/bugs/agenda-00008.js +2 -61
- package/lib/bugs/agenda-00008.mjs +1 -5
- package/lib/bugs/agenda-00011/plugin.test.js +5 -99
- package/lib/bugs/agenda-00011/plugin.test.mjs +3 -3
- package/lib/bugs/agenda-00011.js +4 -105
- package/lib/bugs/agenda-00011.mjs +3 -29
- package/lib/bugs.js +3 -164
- package/lib/bugs.mjs +1 -26
- package/lib/cleaners/actes_legislatifs.js +11 -115
- package/lib/cleaners/actes_legislatifs.mjs +7 -82
- package/lib/cleaners/acteurs.js +12 -92
- package/lib/cleaners/acteurs.mjs +7 -38
- package/lib/cleaners/amendements.js +10 -103
- package/lib/cleaners/amendements.mjs +4 -58
- package/lib/cleaners/documents.js +5 -67
- package/lib/cleaners/documents.mjs +1 -37
- package/lib/cleaners/dossiers_legislatifs.js +5 -61
- package/lib/cleaners/dossiers_legislatifs.mjs +1 -29
- package/lib/cleaners/index.js +1 -9
- package/lib/cleaners/index.mjs +1 -1
- package/lib/cleaners/organes.js +1 -33
- package/lib/cleaners/organes.mjs +1 -17
- package/lib/cleaners/reunions.js +4 -119
- package/lib/cleaners/reunions.mjs +1 -64
- package/lib/cleaners/scrutins.js +10 -102
- package/lib/cleaners/scrutins.mjs +1 -48
- package/lib/cleaners/xml.js +8 -42
- package/lib/cleaners/xml.mjs +6 -8
- package/lib/datasets.js +14 -113
- package/lib/datasets.mjs +6 -46
- package/lib/dates.js +7 -37
- package/lib/dates.mjs +9 -14
- package/lib/dossiers_legislatifs.js +6 -68
- package/lib/dossiers_legislatifs.mjs +5 -36
- package/lib/file_systems.js +56 -139
- package/lib/file_systems.mjs +1 -9
- package/lib/git.js +4 -53
- package/lib/git.mjs +1 -12
- package/lib/index.js +1 -15
- package/lib/index.mjs +1 -1
- package/lib/inserters.js +23 -146
- package/lib/inserters.mjs +6 -87
- package/lib/loaders.js +44 -316
- package/lib/loaders.mjs +12 -135
- package/lib/organes.js +1 -7
- package/lib/organes.mjs +1 -4
- package/lib/parsers/documents.js +22 -151
- package/lib/parsers/documents.mjs +19 -81
- package/lib/parsers/index.js +1 -4
- package/lib/parsers/index.mjs +1 -1
- package/lib/parsers/recherche_amendements.js +302 -527
- package/lib/parsers/recherche_amendements.mjs +8 -31
- package/lib/raw_types/acteurs_et_organes.d.ts +1 -30
- package/lib/raw_types/acteurs_et_organes.js +5 -124
- package/lib/raw_types/acteurs_et_organes.mjs +5 -105
- package/lib/raw_types/agendas.js +6 -89
- package/lib/raw_types/agendas.mjs +9 -65
- package/lib/raw_types/amendements.d.ts +2 -0
- package/lib/raw_types/amendements.js +10 -90
- package/lib/raw_types/amendements.mjs +11 -69
- package/lib/raw_types/dossiers_legislatifs.d.ts +16 -115
- package/lib/raw_types/dossiers_legislatifs.js +26 -435
- package/lib/raw_types/dossiers_legislatifs.mjs +26 -412
- package/lib/raw_types/scrutins.js +6 -81
- package/lib/raw_types/scrutins.mjs +9 -57
- package/lib/scripts/bugs_helper.js +2 -181
- package/lib/scripts/bugs_helper.mjs +2 -39
- package/lib/scripts/clean_data.js +27 -143
- package/lib/scripts/clean_data.mjs +15 -34
- package/lib/scripts/clean_reorganized_data.js +76 -240
- package/lib/scripts/clean_reorganized_data.mjs +36 -99
- package/lib/scripts/diff_amendements.js +19 -79
- package/lib/scripts/diff_amendements.mjs +17 -35
- package/lib/scripts/document_dossiers_legislatifs.js +17 -142
- package/lib/scripts/document_dossiers_legislatifs.mjs +6 -90
- package/lib/scripts/get_today_reunions.js +4 -22
- package/lib/scripts/get_today_reunions.mjs +1 -7
- package/lib/scripts/merge_scrutins.js +3 -47
- package/lib/scripts/merge_scrutins.mjs +1 -9
- package/lib/scripts/parse_textes_lois.js +15 -44
- package/lib/scripts/parse_textes_lois.mjs +18 -19
- package/lib/scripts/raw_types_from_amendements.js +3 -95
- package/lib/scripts/raw_types_from_amendements.mjs +1 -16
- package/lib/scripts/reorganize_data.js +74 -294
- package/lib/scripts/reorganize_data.mjs +22 -133
- package/lib/scripts/retrieve_deputes_photos.js +6 -119
- package/lib/scripts/retrieve_deputes_photos.mjs +7 -33
- package/lib/scripts/retrieve_documents.js +4 -192
- package/lib/scripts/retrieve_documents.mjs +2 -50
- package/lib/scripts/retrieve_open_data.js +44 -116
- package/lib/scripts/retrieve_open_data.mjs +14 -19
- package/lib/scripts/retrieve_pending_amendments.js +4 -98
- package/lib/scripts/retrieve_pending_amendments.mjs +1 -14
- package/lib/scripts/retrieve_senateurs_photos.js +18 -114
- package/lib/scripts/retrieve_senateurs_photos.mjs +20 -48
- package/lib/scripts/retrieve_textes_lois.js +3 -122
- package/lib/scripts/retrieve_textes_lois.mjs +3 -21
- package/lib/scripts/test_load.js +2 -10
- package/lib/scripts/test_load.mjs +2 -1
- package/lib/scripts/test_load_big_files.js +2 -10
- package/lib/scripts/test_load_big_files.mjs +2 -1
- package/lib/scripts/validate_json.js +4 -119
- package/lib/scripts/validate_json.mjs +2 -36
- package/lib/shared_types/codes_actes.js +1 -24
- package/lib/shared_types/codes_actes.mjs +3 -10
- package/lib/strings.js +1 -5
- package/lib/strings.mjs +1 -1
- package/lib/types/acteurs_et_organes.js +9 -84
- package/lib/types/acteurs_et_organes.mjs +10 -63
- package/lib/types/agendas.js +8 -90
- package/lib/types/agendas.mjs +11 -66
- package/lib/types/amendements.d.ts +2 -0
- package/lib/types/amendements.js +12 -92
- package/lib/types/amendements.mjs +15 -70
- package/lib/types/dossiers_legislatifs.js +8 -96
- package/lib/types/dossiers_legislatifs.mjs +10 -72
- package/lib/types/legislatures.js +1 -3
- package/lib/types/legislatures.mjs +1 -2
- package/lib/types/scrutins.js +8 -82
- package/lib/types/scrutins.mjs +11 -58
- package/lib/urls.js +3 -27
- package/lib/urls.mjs +3 -21
- package/package.json +1 -1
|
@@ -1,105 +1,65 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
|
|
4
|
-
|
|
5
|
-
require("core-js/modules/es.array.slice.js");
|
|
6
|
-
|
|
7
|
-
require("core-js/modules/es.function.name.js");
|
|
8
|
-
|
|
9
|
-
require("core-js/modules/es.array.from.js");
|
|
10
|
-
|
|
11
|
-
require("core-js/modules/es.string.iterator.js");
|
|
12
|
-
|
|
4
|
+
require("core-js/modules/es.array.is-array.js");
|
|
13
5
|
require("core-js/modules/es.symbol.js");
|
|
14
|
-
|
|
15
6
|
require("core-js/modules/es.symbol.description.js");
|
|
16
|
-
|
|
17
7
|
require("core-js/modules/es.symbol.iterator.js");
|
|
18
|
-
|
|
19
8
|
require("core-js/modules/es.array.iterator.js");
|
|
20
|
-
|
|
9
|
+
require("core-js/modules/es.string.iterator.js");
|
|
21
10
|
require("core-js/modules/web.dom-collections.iterator.js");
|
|
22
|
-
|
|
23
|
-
require("core-js/modules/es.
|
|
24
|
-
|
|
11
|
+
require("core-js/modules/es.array.slice.js");
|
|
12
|
+
require("core-js/modules/es.function.name.js");
|
|
13
|
+
require("core-js/modules/es.array.from.js");
|
|
25
14
|
require("core-js/modules/es.weak-map.js");
|
|
26
|
-
|
|
27
15
|
require("core-js/modules/es.object.define-property.js");
|
|
28
|
-
|
|
29
16
|
require("core-js/modules/es.object.get-own-property-descriptor.js");
|
|
30
|
-
|
|
17
|
+
require("core-js/modules/es.number.constructor.js");
|
|
31
18
|
require("core-js/modules/es.date.to-json.js");
|
|
32
|
-
|
|
33
19
|
require("core-js/modules/es.date.to-string.js");
|
|
34
|
-
|
|
35
20
|
require("core-js/modules/es.regexp.exec.js");
|
|
36
|
-
|
|
37
21
|
require("core-js/modules/es.string.replace.js");
|
|
38
|
-
|
|
39
22
|
require("core-js/modules/es.string.trim.js");
|
|
40
|
-
|
|
41
23
|
require("core-js/modules/es.array.map.js");
|
|
42
|
-
|
|
43
24
|
require("core-js/modules/es.array.reduce.js");
|
|
44
|
-
|
|
45
25
|
require("core-js/modules/es.object.to-string.js");
|
|
46
|
-
|
|
26
|
+
require("core-js/modules/es.regexp.to-string.js");
|
|
27
|
+
require("core-js/modules/es.object.entries.js");
|
|
28
|
+
require("core-js/modules/es.array.filter.js");
|
|
29
|
+
require("core-js/modules/es.array.includes.js");
|
|
30
|
+
require("core-js/modules/es.string.includes.js");
|
|
47
31
|
require("core-js/modules/es.array.concat.js");
|
|
48
|
-
|
|
49
32
|
require("core-js/modules/es.array.join.js");
|
|
50
|
-
|
|
51
33
|
require("core-js/modules/es.string.ends-with.js");
|
|
52
|
-
|
|
53
34
|
var _assert = _interopRequireDefault(require("assert"));
|
|
54
|
-
|
|
55
35
|
var _child_process = require("child_process");
|
|
56
|
-
|
|
57
36
|
var _commandLineArgs = _interopRequireDefault(require("command-line-args"));
|
|
58
|
-
|
|
59
37
|
var _fsExtra = _interopRequireDefault(require("fs-extra"));
|
|
60
|
-
|
|
61
38
|
var _path = _interopRequireDefault(require("path"));
|
|
62
|
-
|
|
63
39
|
var _cleaners = require("../cleaners");
|
|
64
|
-
|
|
65
40
|
var _datasets = require("../datasets");
|
|
66
|
-
|
|
67
41
|
var _dates = require("../dates");
|
|
68
|
-
|
|
69
42
|
var _file_systems = require("../file_systems");
|
|
70
|
-
|
|
71
43
|
var git = _interopRequireWildcard(require("../git"));
|
|
72
|
-
|
|
73
44
|
var _acteurs_et_organes = require("../types/acteurs_et_organes");
|
|
74
|
-
|
|
75
45
|
var _agendas = require("../types/agendas");
|
|
76
|
-
|
|
77
46
|
var _amendements = require("../types/amendements");
|
|
78
|
-
|
|
79
47
|
var _dossiers_legislatifs = require("../types/dossiers_legislatifs");
|
|
80
|
-
|
|
81
48
|
var _scrutins = require("../types/scrutins");
|
|
82
|
-
|
|
83
49
|
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
84
|
-
|
|
85
50
|
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
86
|
-
|
|
87
51
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
|
|
88
|
-
|
|
89
52
|
function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
|
|
90
|
-
|
|
91
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."); }
|
|
92
|
-
|
|
93
54
|
function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
|
|
94
|
-
|
|
95
55
|
function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
|
|
96
|
-
|
|
97
|
-
function
|
|
98
|
-
|
|
56
|
+
function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e2) { throw _e2; }, 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 normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e3) { didErr = true; err = _e3; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
|
|
57
|
+
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
|
|
58
|
+
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
99
59
|
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
|
100
|
-
|
|
101
60
|
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
|
|
102
|
-
|
|
61
|
+
function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
|
|
62
|
+
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|
103
63
|
function parseArgs(argv) {
|
|
104
64
|
var optionsDefinitions = [{
|
|
105
65
|
alias: "C",
|
|
@@ -123,6 +83,12 @@ function parseArgs(argv) {
|
|
|
123
83
|
multiple: true,
|
|
124
84
|
name: "categories",
|
|
125
85
|
type: String
|
|
86
|
+
}, {
|
|
87
|
+
alias: "l",
|
|
88
|
+
help: "legislatures of categories of datasets to retrieve",
|
|
89
|
+
multiple: true,
|
|
90
|
+
name: "legislature",
|
|
91
|
+
type: Number
|
|
126
92
|
}, {
|
|
127
93
|
alias: "r",
|
|
128
94
|
help: "push commit to given remote",
|
|
@@ -154,7 +120,6 @@ function parseArgs(argv) {
|
|
|
154
120
|
});
|
|
155
121
|
return options;
|
|
156
122
|
}
|
|
157
|
-
|
|
158
123
|
function cleanReorganizedData(options) {
|
|
159
124
|
var dataDir = options.dataDir;
|
|
160
125
|
Date.prototype.toJSON = _dates.patchedDateToJson;
|
|
@@ -166,21 +131,32 @@ function cleanReorganizedData(options) {
|
|
|
166
131
|
var enabledDatasets = options.categories.reduce(function (enabledDatasets, datasetName) {
|
|
167
132
|
return enabledDatasets | _datasets.EnabledDatasets[datasetName];
|
|
168
133
|
}, _datasets.EnabledDatasets.None);
|
|
169
|
-
|
|
134
|
+
var choosenDatasets = _datasets.datasets;
|
|
135
|
+
if (options.legislature) {
|
|
136
|
+
(function () {
|
|
137
|
+
var enabledLegislatures = options.legislature.map(function (legislature) {
|
|
138
|
+
return legislature.toString();
|
|
139
|
+
});
|
|
140
|
+
for (var _i = 0, _Object$entries = Object.entries(choosenDatasets); _i < _Object$entries.length; _i++) {
|
|
141
|
+
var _Object$entries$_i = _slicedToArray(_Object$entries[_i], 2),
|
|
142
|
+
key = _Object$entries$_i[0],
|
|
143
|
+
value = _Object$entries$_i[1];
|
|
144
|
+
choosenDatasets[key] = value.filter(function (dataset) {
|
|
145
|
+
return enabledLegislatures.includes(dataset.legislature);
|
|
146
|
+
});
|
|
147
|
+
}
|
|
148
|
+
})();
|
|
149
|
+
}
|
|
170
150
|
if (enabledDatasets & _datasets.EnabledDatasets.ActeursEtOrganes) {
|
|
171
|
-
var _iterator = _createForOfIteratorHelper(
|
|
172
|
-
|
|
173
|
-
|
|
151
|
+
var _iterator = _createForOfIteratorHelper(choosenDatasets.acteursEtOrganes),
|
|
152
|
+
_step;
|
|
174
153
|
try {
|
|
175
154
|
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
176
155
|
var dataset = _step.value;
|
|
177
|
-
|
|
178
156
|
var datasetName = _path["default"].basename(dataset.filename, ".json");
|
|
179
|
-
|
|
180
157
|
if (options.dataset && datasetName !== options.dataset) {
|
|
181
158
|
continue;
|
|
182
159
|
}
|
|
183
|
-
|
|
184
160
|
if (gitGroupUrl !== undefined) {
|
|
185
161
|
(0, _child_process.execSync)("git clone ".concat(gitGroupUrl, "/").concat(datasetName, "_nettoye.git"), {
|
|
186
162
|
cwd: dataDir,
|
|
@@ -189,47 +165,34 @@ function cleanReorganizedData(options) {
|
|
|
189
165
|
stdio: ["ignore", "ignore", "pipe"]
|
|
190
166
|
});
|
|
191
167
|
}
|
|
192
|
-
|
|
193
168
|
analyzeAndRemove(datasetName, options);
|
|
194
|
-
|
|
195
169
|
var datasetRawDir = _path["default"].join(dataDir, datasetName);
|
|
196
|
-
|
|
197
170
|
var datasetCleanDir = datasetRawDir + "_nettoye";
|
|
198
|
-
|
|
199
171
|
var _iterator2 = _createForOfIteratorHelper((0, _file_systems.walkDir)(datasetRawDir, ["acteurs"])),
|
|
200
|
-
|
|
201
|
-
|
|
172
|
+
_step2;
|
|
202
173
|
try {
|
|
203
174
|
for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
|
|
204
175
|
var acteurSplitPath = _step2.value;
|
|
205
176
|
var acteurFilename = acteurSplitPath[acteurSplitPath.length - 1];
|
|
206
|
-
|
|
207
177
|
if (!acteurFilename.endsWith(".json")) {
|
|
208
178
|
continue;
|
|
209
179
|
}
|
|
210
|
-
|
|
211
180
|
var acteurRawFilePath = _path["default"].join.apply(_path["default"], [datasetRawDir].concat(_toConsumableArray(acteurSplitPath)));
|
|
212
|
-
|
|
213
181
|
if (options.verbose) {
|
|
214
182
|
console.log(" Cleaning file: ".concat(acteurRawFilePath, "\u2026"));
|
|
215
183
|
}
|
|
216
|
-
|
|
217
184
|
var acteurRawJson = _fsExtra["default"].readFileSync(acteurRawFilePath, {
|
|
218
185
|
encoding: "utf8"
|
|
219
186
|
});
|
|
220
|
-
|
|
221
187
|
var acteur = JSON.parse(acteurRawJson);
|
|
222
188
|
(0, _cleaners.cleanActeur)(acteur);
|
|
223
|
-
var acteurJson = JSON.stringify(acteur, null, 2);
|
|
189
|
+
var acteurJson = JSON.stringify(acteur, null, 2);
|
|
224
190
|
|
|
191
|
+
// Validate generated JSON.
|
|
225
192
|
var acteurClean = _acteurs_et_organes.Convert.toActeur(acteurJson);
|
|
226
|
-
|
|
227
193
|
var acteurCleanJson = _acteurs_et_organes.Convert.acteurToJson(acteurClean);
|
|
228
|
-
|
|
229
194
|
var acteurCleanFilePath = _path["default"].join.apply(_path["default"], [datasetCleanDir].concat(_toConsumableArray(acteurSplitPath)));
|
|
230
|
-
|
|
231
195
|
_fsExtra["default"].ensureDirSync(_path["default"].dirname(acteurCleanFilePath));
|
|
232
|
-
|
|
233
196
|
_fsExtra["default"].writeFileSync(acteurCleanFilePath, acteurCleanJson, {
|
|
234
197
|
encoding: "utf8"
|
|
235
198
|
});
|
|
@@ -239,41 +202,31 @@ function cleanReorganizedData(options) {
|
|
|
239
202
|
} finally {
|
|
240
203
|
_iterator2.f();
|
|
241
204
|
}
|
|
242
|
-
|
|
243
205
|
var _iterator3 = _createForOfIteratorHelper((0, _file_systems.walkDir)(datasetRawDir, ["organes"])),
|
|
244
|
-
|
|
245
|
-
|
|
206
|
+
_step3;
|
|
246
207
|
try {
|
|
247
208
|
for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
|
|
248
209
|
var organeSplitPath = _step3.value;
|
|
249
210
|
var organeFilename = organeSplitPath[organeSplitPath.length - 1];
|
|
250
|
-
|
|
251
211
|
if (!organeFilename.endsWith(".json")) {
|
|
252
212
|
continue;
|
|
253
213
|
}
|
|
254
|
-
|
|
255
214
|
var organeRawFilePath = _path["default"].join.apply(_path["default"], [datasetRawDir].concat(_toConsumableArray(organeSplitPath)));
|
|
256
|
-
|
|
257
215
|
if (options.verbose) {
|
|
258
216
|
console.log(" Cleaning file: ".concat(organeRawFilePath, "\u2026"));
|
|
259
217
|
}
|
|
260
|
-
|
|
261
218
|
var organeRawJson = _fsExtra["default"].readFileSync(organeRawFilePath, {
|
|
262
219
|
encoding: "utf8"
|
|
263
220
|
});
|
|
264
|
-
|
|
265
221
|
var organe = JSON.parse(organeRawJson);
|
|
266
222
|
(0, _cleaners.cleanOrgane)(organe);
|
|
267
|
-
var organeJson = JSON.stringify(organe, null, 2);
|
|
223
|
+
var organeJson = JSON.stringify(organe, null, 2);
|
|
268
224
|
|
|
225
|
+
// Validate generated JSON.
|
|
269
226
|
var organeClean = _acteurs_et_organes.Convert.toOrgane(organeJson);
|
|
270
|
-
|
|
271
227
|
var organeCleanJson = _acteurs_et_organes.Convert.organeToJson(organeClean);
|
|
272
|
-
|
|
273
228
|
var organeCleanFilePath = _path["default"].join.apply(_path["default"], [datasetCleanDir].concat(_toConsumableArray(organeSplitPath)));
|
|
274
|
-
|
|
275
229
|
_fsExtra["default"].ensureDirSync(_path["default"].dirname(organeCleanFilePath));
|
|
276
|
-
|
|
277
230
|
_fsExtra["default"].writeFileSync(organeCleanFilePath, organeCleanJson, {
|
|
278
231
|
encoding: "utf8"
|
|
279
232
|
});
|
|
@@ -283,11 +236,9 @@ function cleanReorganizedData(options) {
|
|
|
283
236
|
} finally {
|
|
284
237
|
_iterator3.f();
|
|
285
238
|
}
|
|
286
|
-
|
|
287
239
|
if (commitAndPush(datasetCleanDir, options, options.remote)) {
|
|
288
240
|
error = true;
|
|
289
241
|
}
|
|
290
|
-
|
|
291
242
|
if (commitAndPushUid(datasetCleanDir, options, ["acteurs", "organes"])) {
|
|
292
243
|
error = true;
|
|
293
244
|
}
|
|
@@ -298,21 +249,16 @@ function cleanReorganizedData(options) {
|
|
|
298
249
|
_iterator.f();
|
|
299
250
|
}
|
|
300
251
|
}
|
|
301
|
-
|
|
302
252
|
if (enabledDatasets & _datasets.EnabledDatasets.Agendas) {
|
|
303
|
-
var _iterator4 = _createForOfIteratorHelper(
|
|
304
|
-
|
|
305
|
-
|
|
253
|
+
var _iterator4 = _createForOfIteratorHelper(choosenDatasets.agendas),
|
|
254
|
+
_step4;
|
|
306
255
|
try {
|
|
307
256
|
for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {
|
|
308
257
|
var _dataset = _step4.value;
|
|
309
|
-
|
|
310
258
|
var _datasetName = _path["default"].basename(_dataset.filename, ".json");
|
|
311
|
-
|
|
312
259
|
if (options.dataset && _datasetName !== options.dataset) {
|
|
313
260
|
continue;
|
|
314
261
|
}
|
|
315
|
-
|
|
316
262
|
if (gitGroupUrl !== undefined) {
|
|
317
263
|
(0, _child_process.execSync)("git clone ".concat(gitGroupUrl, "/").concat(_datasetName, "_nettoye.git"), {
|
|
318
264
|
cwd: dataDir,
|
|
@@ -321,47 +267,34 @@ function cleanReorganizedData(options) {
|
|
|
321
267
|
stdio: ["ignore", "ignore", "pipe"]
|
|
322
268
|
});
|
|
323
269
|
}
|
|
324
|
-
|
|
325
270
|
analyzeAndRemove(_datasetName, options);
|
|
326
|
-
|
|
327
271
|
var _datasetRawDir = _path["default"].join(dataDir, _datasetName);
|
|
328
|
-
|
|
329
272
|
var _datasetCleanDir = _datasetRawDir + "_nettoye";
|
|
330
|
-
|
|
331
273
|
var _iterator5 = _createForOfIteratorHelper((0, _file_systems.walkDir)(_datasetRawDir)),
|
|
332
|
-
|
|
333
|
-
|
|
274
|
+
_step5;
|
|
334
275
|
try {
|
|
335
276
|
for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {
|
|
336
277
|
var reunionSplitPath = _step5.value;
|
|
337
278
|
var reunionFilename = reunionSplitPath[reunionSplitPath.length - 1];
|
|
338
|
-
|
|
339
279
|
if (!reunionFilename.endsWith(".json")) {
|
|
340
280
|
continue;
|
|
341
281
|
}
|
|
342
|
-
|
|
343
282
|
var reunionRawFilePath = _path["default"].join.apply(_path["default"], [_datasetRawDir].concat(_toConsumableArray(reunionSplitPath)));
|
|
344
|
-
|
|
345
283
|
if (options.verbose) {
|
|
346
284
|
console.log(" Cleaning file: ".concat(reunionRawFilePath, "\u2026"));
|
|
347
285
|
}
|
|
348
|
-
|
|
349
286
|
var reunionRawJson = _fsExtra["default"].readFileSync(reunionRawFilePath, {
|
|
350
287
|
encoding: "utf8"
|
|
351
288
|
});
|
|
352
|
-
|
|
353
289
|
var reunion = JSON.parse(reunionRawJson);
|
|
354
290
|
(0, _cleaners.cleanReunion)(reunion);
|
|
355
|
-
var reunionJson = JSON.stringify(reunion, null, 2);
|
|
291
|
+
var reunionJson = JSON.stringify(reunion, null, 2);
|
|
356
292
|
|
|
293
|
+
// Validate generated JSON.
|
|
357
294
|
var reunionClean = _agendas.Convert.toReunion(reunionJson);
|
|
358
|
-
|
|
359
295
|
var reunionCleanJson = _agendas.Convert.reunionToJson(reunionClean);
|
|
360
|
-
|
|
361
296
|
var reunionCleanFilePath = _path["default"].join.apply(_path["default"], [_datasetCleanDir].concat(_toConsumableArray(reunionSplitPath)));
|
|
362
|
-
|
|
363
297
|
_fsExtra["default"].ensureDirSync(_path["default"].dirname(reunionCleanFilePath));
|
|
364
|
-
|
|
365
298
|
_fsExtra["default"].writeFileSync(reunionCleanFilePath, reunionCleanJson, {
|
|
366
299
|
encoding: "utf8"
|
|
367
300
|
});
|
|
@@ -371,11 +304,9 @@ function cleanReorganizedData(options) {
|
|
|
371
304
|
} finally {
|
|
372
305
|
_iterator5.f();
|
|
373
306
|
}
|
|
374
|
-
|
|
375
307
|
if (commitAndPush(_datasetCleanDir, options, options.remote)) {
|
|
376
308
|
error = true;
|
|
377
309
|
}
|
|
378
|
-
|
|
379
310
|
if (commitAndPushUid(_datasetCleanDir, options, ["."])) {
|
|
380
311
|
error = true;
|
|
381
312
|
}
|
|
@@ -386,21 +317,16 @@ function cleanReorganizedData(options) {
|
|
|
386
317
|
_iterator4.f();
|
|
387
318
|
}
|
|
388
319
|
}
|
|
389
|
-
|
|
390
320
|
if (enabledDatasets & _datasets.EnabledDatasets.Amendements) {
|
|
391
|
-
var _iterator6 = _createForOfIteratorHelper(
|
|
392
|
-
|
|
393
|
-
|
|
321
|
+
var _iterator6 = _createForOfIteratorHelper(choosenDatasets.amendements),
|
|
322
|
+
_step6;
|
|
394
323
|
try {
|
|
395
324
|
for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) {
|
|
396
325
|
var _dataset2 = _step6.value;
|
|
397
|
-
|
|
398
326
|
var _datasetName2 = _path["default"].basename(_dataset2.filename, ".json");
|
|
399
|
-
|
|
400
327
|
if (options.dataset && _datasetName2 !== options.dataset) {
|
|
401
328
|
continue;
|
|
402
329
|
}
|
|
403
|
-
|
|
404
330
|
if (gitGroupUrl !== undefined) {
|
|
405
331
|
(0, _child_process.execSync)("git clone ".concat(gitGroupUrl, "/").concat(_datasetName2, "_nettoye.git"), {
|
|
406
332
|
cwd: dataDir,
|
|
@@ -409,47 +335,34 @@ function cleanReorganizedData(options) {
|
|
|
409
335
|
stdio: ["ignore", "ignore", "pipe"]
|
|
410
336
|
});
|
|
411
337
|
}
|
|
412
|
-
|
|
413
338
|
analyzeAndRemove(_datasetName2, options);
|
|
414
|
-
|
|
415
339
|
var _datasetRawDir2 = _path["default"].join(dataDir, _datasetName2);
|
|
416
|
-
|
|
417
340
|
var _datasetCleanDir2 = _datasetRawDir2 + "_nettoye";
|
|
418
|
-
|
|
419
341
|
var _iterator7 = _createForOfIteratorHelper((0, _file_systems.walkDir)(_datasetRawDir2)),
|
|
420
|
-
|
|
421
|
-
|
|
342
|
+
_step7;
|
|
422
343
|
try {
|
|
423
344
|
for (_iterator7.s(); !(_step7 = _iterator7.n()).done;) {
|
|
424
345
|
var amendementSplitPath = _step7.value;
|
|
425
346
|
var amendementFilename = amendementSplitPath[amendementSplitPath.length - 1];
|
|
426
|
-
|
|
427
347
|
if (!amendementFilename.endsWith(".json")) {
|
|
428
348
|
continue;
|
|
429
349
|
}
|
|
430
|
-
|
|
431
350
|
var amendementRawFilePath = _path["default"].join.apply(_path["default"], [_datasetRawDir2].concat(_toConsumableArray(amendementSplitPath)));
|
|
432
|
-
|
|
433
351
|
if (options.verbose) {
|
|
434
352
|
console.log(" Cleaning file: ".concat(amendementRawFilePath, "\u2026"));
|
|
435
353
|
}
|
|
436
|
-
|
|
437
354
|
var amendementRawJson = _fsExtra["default"].readFileSync(amendementRawFilePath, {
|
|
438
355
|
encoding: "utf8"
|
|
439
356
|
});
|
|
440
|
-
|
|
441
357
|
var amendement = JSON.parse(amendementRawJson);
|
|
442
358
|
(0, _cleaners.cleanAmendement)(amendement);
|
|
443
|
-
var amendementJson = JSON.stringify(amendement, null, 2);
|
|
359
|
+
var amendementJson = JSON.stringify(amendement, null, 2);
|
|
444
360
|
|
|
361
|
+
// Validate generated JSON.
|
|
445
362
|
var amendementClean = _amendements.Convert.toAmendement(amendementJson);
|
|
446
|
-
|
|
447
363
|
var amendementCleanJson = _amendements.Convert.amendementToJson(amendementClean);
|
|
448
|
-
|
|
449
364
|
var amendementCleanFilePath = _path["default"].join.apply(_path["default"], [_datasetCleanDir2].concat(_toConsumableArray(amendementSplitPath)));
|
|
450
|
-
|
|
451
365
|
_fsExtra["default"].ensureDirSync(_path["default"].dirname(amendementCleanFilePath));
|
|
452
|
-
|
|
453
366
|
_fsExtra["default"].writeFileSync(amendementCleanFilePath, amendementCleanJson, {
|
|
454
367
|
encoding: "utf8"
|
|
455
368
|
});
|
|
@@ -459,11 +372,9 @@ function cleanReorganizedData(options) {
|
|
|
459
372
|
} finally {
|
|
460
373
|
_iterator7.f();
|
|
461
374
|
}
|
|
462
|
-
|
|
463
375
|
if (commitAndPush(_datasetCleanDir2, options, options.remote)) {
|
|
464
376
|
error = true;
|
|
465
377
|
}
|
|
466
|
-
|
|
467
378
|
if (commitAndPushUid(_datasetCleanDir2, options, ["."])) {
|
|
468
379
|
error = true;
|
|
469
380
|
}
|
|
@@ -474,21 +385,16 @@ function cleanReorganizedData(options) {
|
|
|
474
385
|
_iterator6.f();
|
|
475
386
|
}
|
|
476
387
|
}
|
|
477
|
-
|
|
478
388
|
if (enabledDatasets & _datasets.EnabledDatasets.DossiersLegislatifs) {
|
|
479
|
-
var _iterator8 = _createForOfIteratorHelper(
|
|
480
|
-
|
|
481
|
-
|
|
389
|
+
var _iterator8 = _createForOfIteratorHelper(choosenDatasets.dossiersLegislatifs),
|
|
390
|
+
_step8;
|
|
482
391
|
try {
|
|
483
392
|
for (_iterator8.s(); !(_step8 = _iterator8.n()).done;) {
|
|
484
393
|
var _dataset3 = _step8.value;
|
|
485
|
-
|
|
486
394
|
var _datasetName3 = _path["default"].basename(_dataset3.filename, ".json");
|
|
487
|
-
|
|
488
395
|
if (options.dataset && _datasetName3 !== options.dataset) {
|
|
489
396
|
continue;
|
|
490
397
|
}
|
|
491
|
-
|
|
492
398
|
if (gitGroupUrl !== undefined) {
|
|
493
399
|
(0, _child_process.execSync)("git clone ".concat(gitGroupUrl, "/").concat(_datasetName3, "_nettoye.git"), {
|
|
494
400
|
cwd: dataDir,
|
|
@@ -497,47 +403,34 @@ function cleanReorganizedData(options) {
|
|
|
497
403
|
stdio: ["ignore", "ignore", "pipe"]
|
|
498
404
|
});
|
|
499
405
|
}
|
|
500
|
-
|
|
501
406
|
analyzeAndRemove(_datasetName3, options);
|
|
502
|
-
|
|
503
407
|
var _datasetRawDir3 = _path["default"].join(dataDir, _datasetName3);
|
|
504
|
-
|
|
505
408
|
var _datasetCleanDir3 = _datasetRawDir3 + "_nettoye";
|
|
506
|
-
|
|
507
409
|
var _iterator9 = _createForOfIteratorHelper((0, _file_systems.walkDir)(_datasetRawDir3, ["documents"])),
|
|
508
|
-
|
|
509
|
-
|
|
410
|
+
_step9;
|
|
510
411
|
try {
|
|
511
412
|
for (_iterator9.s(); !(_step9 = _iterator9.n()).done;) {
|
|
512
413
|
var documentSplitPath = _step9.value;
|
|
513
414
|
var documentFilename = documentSplitPath[documentSplitPath.length - 1];
|
|
514
|
-
|
|
515
415
|
if (!documentFilename.endsWith(".json")) {
|
|
516
416
|
continue;
|
|
517
417
|
}
|
|
518
|
-
|
|
519
418
|
var documentRawFilePath = _path["default"].join.apply(_path["default"], [_datasetRawDir3].concat(_toConsumableArray(documentSplitPath)));
|
|
520
|
-
|
|
521
419
|
if (options.verbose) {
|
|
522
420
|
console.log(" Cleaning file: ".concat(documentRawFilePath, "\u2026"));
|
|
523
421
|
}
|
|
524
|
-
|
|
525
422
|
var documentRawJson = _fsExtra["default"].readFileSync(documentRawFilePath, {
|
|
526
423
|
encoding: "utf8"
|
|
527
424
|
});
|
|
528
|
-
|
|
529
425
|
var document = JSON.parse(documentRawJson);
|
|
530
426
|
(0, _cleaners.cleanDocumentOrDivision)(document);
|
|
531
|
-
var documentJson = JSON.stringify(document, null, 2);
|
|
427
|
+
var documentJson = JSON.stringify(document, null, 2);
|
|
532
428
|
|
|
429
|
+
// Validate generated JSON.
|
|
533
430
|
var documentClean = _dossiers_legislatifs.Convert.toDocument(documentJson);
|
|
534
|
-
|
|
535
431
|
var documentCleanJson = _dossiers_legislatifs.Convert.documentToJson(documentClean);
|
|
536
|
-
|
|
537
432
|
var documentCleanFilePath = _path["default"].join.apply(_path["default"], [_datasetCleanDir3].concat(_toConsumableArray(documentSplitPath)));
|
|
538
|
-
|
|
539
433
|
_fsExtra["default"].ensureDirSync(_path["default"].dirname(documentCleanFilePath));
|
|
540
|
-
|
|
541
434
|
_fsExtra["default"].writeFileSync(documentCleanFilePath, documentCleanJson, {
|
|
542
435
|
encoding: "utf8"
|
|
543
436
|
});
|
|
@@ -547,41 +440,31 @@ function cleanReorganizedData(options) {
|
|
|
547
440
|
} finally {
|
|
548
441
|
_iterator9.f();
|
|
549
442
|
}
|
|
550
|
-
|
|
551
443
|
var _iterator10 = _createForOfIteratorHelper((0, _file_systems.walkDir)(_datasetRawDir3, ["dossiers"])),
|
|
552
|
-
|
|
553
|
-
|
|
444
|
+
_step10;
|
|
554
445
|
try {
|
|
555
446
|
for (_iterator10.s(); !(_step10 = _iterator10.n()).done;) {
|
|
556
447
|
var dossierSplitPath = _step10.value;
|
|
557
448
|
var dossierFilename = dossierSplitPath[dossierSplitPath.length - 1];
|
|
558
|
-
|
|
559
449
|
if (!dossierFilename.endsWith(".json")) {
|
|
560
450
|
continue;
|
|
561
451
|
}
|
|
562
|
-
|
|
563
452
|
var dossierRawFilePath = _path["default"].join.apply(_path["default"], [_datasetRawDir3].concat(_toConsumableArray(dossierSplitPath)));
|
|
564
|
-
|
|
565
453
|
if (options.verbose) {
|
|
566
454
|
console.log(" Cleaning file: ".concat(dossierRawFilePath, "\u2026"));
|
|
567
455
|
}
|
|
568
|
-
|
|
569
456
|
var dossierRawJson = _fsExtra["default"].readFileSync(dossierRawFilePath, {
|
|
570
457
|
encoding: "utf8"
|
|
571
458
|
});
|
|
572
|
-
|
|
573
459
|
var dossier = JSON.parse(dossierRawJson);
|
|
574
460
|
(0, _cleaners.cleanDossierParlementaire)(dossier);
|
|
575
|
-
var dossierJson = JSON.stringify(dossier, null, 2);
|
|
461
|
+
var dossierJson = JSON.stringify(dossier, null, 2);
|
|
576
462
|
|
|
463
|
+
// Validate generated JSON.
|
|
577
464
|
var dossierClean = _dossiers_legislatifs.Convert.toDossierParlementaire(dossierJson);
|
|
578
|
-
|
|
579
465
|
var dossierCleanJson = _dossiers_legislatifs.Convert.dossierParlementaireToJson(dossierClean);
|
|
580
|
-
|
|
581
466
|
var dossierCleanFilePath = _path["default"].join.apply(_path["default"], [_datasetCleanDir3].concat(_toConsumableArray(dossierSplitPath)));
|
|
582
|
-
|
|
583
467
|
_fsExtra["default"].ensureDirSync(_path["default"].dirname(dossierCleanFilePath));
|
|
584
|
-
|
|
585
468
|
_fsExtra["default"].writeFileSync(dossierCleanFilePath, dossierCleanJson, {
|
|
586
469
|
encoding: "utf8"
|
|
587
470
|
});
|
|
@@ -591,11 +474,9 @@ function cleanReorganizedData(options) {
|
|
|
591
474
|
} finally {
|
|
592
475
|
_iterator10.f();
|
|
593
476
|
}
|
|
594
|
-
|
|
595
477
|
if (commitAndPush(_datasetCleanDir3, options, options.remote)) {
|
|
596
478
|
error = true;
|
|
597
479
|
}
|
|
598
|
-
|
|
599
480
|
if (commitAndPushUid(_datasetCleanDir3, options, ["documents", "dossiers"])) {
|
|
600
481
|
error = true;
|
|
601
482
|
}
|
|
@@ -606,21 +487,16 @@ function cleanReorganizedData(options) {
|
|
|
606
487
|
_iterator8.f();
|
|
607
488
|
}
|
|
608
489
|
}
|
|
609
|
-
|
|
610
490
|
if (enabledDatasets & _datasets.EnabledDatasets.Scrutins) {
|
|
611
|
-
var _iterator11 = _createForOfIteratorHelper(
|
|
612
|
-
|
|
613
|
-
|
|
491
|
+
var _iterator11 = _createForOfIteratorHelper(choosenDatasets.scrutins),
|
|
492
|
+
_step11;
|
|
614
493
|
try {
|
|
615
494
|
for (_iterator11.s(); !(_step11 = _iterator11.n()).done;) {
|
|
616
495
|
var _dataset4 = _step11.value;
|
|
617
|
-
|
|
618
496
|
var _datasetName4 = _path["default"].basename(_dataset4.filename, ".json");
|
|
619
|
-
|
|
620
497
|
if (options.dataset && _datasetName4 !== options.dataset) {
|
|
621
498
|
continue;
|
|
622
499
|
}
|
|
623
|
-
|
|
624
500
|
if (gitGroupUrl !== undefined) {
|
|
625
501
|
(0, _child_process.execSync)("git clone ".concat(gitGroupUrl, "/").concat(_datasetName4, "_nettoye.git"), {
|
|
626
502
|
cwd: dataDir,
|
|
@@ -629,47 +505,34 @@ function cleanReorganizedData(options) {
|
|
|
629
505
|
stdio: ["ignore", "ignore", "pipe"]
|
|
630
506
|
});
|
|
631
507
|
}
|
|
632
|
-
|
|
633
508
|
analyzeAndRemove(_datasetName4, options);
|
|
634
|
-
|
|
635
509
|
var _datasetRawDir4 = _path["default"].join(dataDir, _datasetName4);
|
|
636
|
-
|
|
637
510
|
var _datasetCleanDir4 = _datasetRawDir4 + "_nettoye";
|
|
638
|
-
|
|
639
511
|
var _iterator12 = _createForOfIteratorHelper((0, _file_systems.walkDir)(_datasetRawDir4)),
|
|
640
|
-
|
|
641
|
-
|
|
512
|
+
_step12;
|
|
642
513
|
try {
|
|
643
514
|
for (_iterator12.s(); !(_step12 = _iterator12.n()).done;) {
|
|
644
515
|
var scrutinSplitPath = _step12.value;
|
|
645
516
|
var scrutinFilename = scrutinSplitPath[scrutinSplitPath.length - 1];
|
|
646
|
-
|
|
647
517
|
if (!scrutinFilename.endsWith(".json")) {
|
|
648
518
|
continue;
|
|
649
519
|
}
|
|
650
|
-
|
|
651
520
|
var scrutinRawFilePath = _path["default"].join.apply(_path["default"], [_datasetRawDir4].concat(_toConsumableArray(scrutinSplitPath)));
|
|
652
|
-
|
|
653
521
|
if (options.verbose) {
|
|
654
522
|
console.log(" Cleaning file: ".concat(scrutinRawFilePath, "\u2026"));
|
|
655
523
|
}
|
|
656
|
-
|
|
657
524
|
var scrutinRawJson = _fsExtra["default"].readFileSync(scrutinRawFilePath, {
|
|
658
525
|
encoding: "utf8"
|
|
659
526
|
});
|
|
660
|
-
|
|
661
527
|
var scrutin = JSON.parse(scrutinRawJson);
|
|
662
528
|
(0, _cleaners.cleanScrutin)(scrutin);
|
|
663
|
-
var scrutinJson = JSON.stringify(scrutin, null, 2);
|
|
529
|
+
var scrutinJson = JSON.stringify(scrutin, null, 2);
|
|
664
530
|
|
|
531
|
+
// Validate generated JSON.
|
|
665
532
|
var scrutinClean = _scrutins.Convert.toScrutin(scrutinJson);
|
|
666
|
-
|
|
667
533
|
var scrutinCleanJson = _scrutins.Convert.scrutinToJson(scrutinClean);
|
|
668
|
-
|
|
669
534
|
var scrutinCleanFilePath = _path["default"].join.apply(_path["default"], [_datasetCleanDir4].concat(_toConsumableArray(scrutinSplitPath)));
|
|
670
|
-
|
|
671
535
|
_fsExtra["default"].ensureDirSync(_path["default"].dirname(scrutinCleanFilePath));
|
|
672
|
-
|
|
673
536
|
_fsExtra["default"].writeFileSync(scrutinCleanFilePath, scrutinCleanJson, {
|
|
674
537
|
encoding: "utf8"
|
|
675
538
|
});
|
|
@@ -679,11 +542,9 @@ function cleanReorganizedData(options) {
|
|
|
679
542
|
} finally {
|
|
680
543
|
_iterator12.f();
|
|
681
544
|
}
|
|
682
|
-
|
|
683
545
|
if (commitAndPush(_datasetCleanDir4, options, options.remote)) {
|
|
684
546
|
error = true;
|
|
685
547
|
}
|
|
686
|
-
|
|
687
548
|
if (commitAndPushUid(_datasetCleanDir4, options, ["."])) {
|
|
688
549
|
error = true;
|
|
689
550
|
}
|
|
@@ -693,39 +554,29 @@ function cleanReorganizedData(options) {
|
|
|
693
554
|
} finally {
|
|
694
555
|
_iterator11.f();
|
|
695
556
|
}
|
|
696
|
-
}
|
|
697
|
-
|
|
557
|
+
}
|
|
698
558
|
|
|
559
|
+
// Restore standard conversion of dates to JSON.
|
|
699
560
|
Date.prototype.toJSON = _dates.existingDateToJson;
|
|
700
561
|
return error;
|
|
701
562
|
}
|
|
702
|
-
|
|
703
563
|
function analyzeAndRemove(datasetName, options) {
|
|
704
564
|
var dataDir = options.dataDir;
|
|
705
|
-
|
|
706
565
|
var datasetRawDir = _path["default"].join(dataDir, datasetName);
|
|
707
|
-
|
|
708
566
|
var datasetCleanDir = datasetRawDir + "_nettoye";
|
|
709
|
-
|
|
710
567
|
if (!options.silent) {
|
|
711
568
|
console.log("Cleaning directory: ".concat(datasetCleanDir, "\u2026"));
|
|
712
569
|
}
|
|
713
|
-
|
|
714
570
|
_fsExtra["default"].ensureDirSync(datasetCleanDir);
|
|
715
|
-
|
|
716
571
|
var _iterator13 = _createForOfIteratorHelper(_fsExtra["default"].readdirSync(datasetCleanDir)),
|
|
717
|
-
|
|
718
|
-
|
|
572
|
+
_step13;
|
|
719
573
|
try {
|
|
720
574
|
for (_iterator13.s(); !(_step13 = _iterator13.n()).done;) {
|
|
721
575
|
var filename = _step13.value;
|
|
722
|
-
|
|
723
576
|
if (filename[0] === ".") {
|
|
724
577
|
continue;
|
|
725
578
|
}
|
|
726
|
-
|
|
727
579
|
var pathname = _path["default"].join(datasetCleanDir, filename);
|
|
728
|
-
|
|
729
580
|
_fsExtra["default"].removeSync(pathname);
|
|
730
581
|
}
|
|
731
582
|
} catch (err) {
|
|
@@ -734,20 +585,15 @@ function analyzeAndRemove(datasetName, options) {
|
|
|
734
585
|
_iterator13.f();
|
|
735
586
|
}
|
|
736
587
|
}
|
|
737
|
-
|
|
738
588
|
function commitAndPush(repositoryDir, options, remotes) {
|
|
739
589
|
var error = false;
|
|
740
|
-
|
|
741
590
|
if (options.commit) {
|
|
742
591
|
git.commit(repositoryDir, "Nouvelle moisson");
|
|
743
|
-
|
|
744
592
|
var _iterator14 = _createForOfIteratorHelper(remotes || []),
|
|
745
|
-
|
|
746
|
-
|
|
593
|
+
_step14;
|
|
747
594
|
try {
|
|
748
595
|
for (_iterator14.s(); !(_step14 = _iterator14.n()).done;) {
|
|
749
596
|
var remote = _step14.value;
|
|
750
|
-
|
|
751
597
|
try {
|
|
752
598
|
(0, _child_process.execSync)("git push ".concat(remote, " master"), {
|
|
753
599
|
cwd: repositoryDir,
|
|
@@ -767,23 +613,17 @@ function commitAndPush(repositoryDir, options, remotes) {
|
|
|
767
613
|
_iterator14.f();
|
|
768
614
|
}
|
|
769
615
|
}
|
|
770
|
-
|
|
771
616
|
return error;
|
|
772
617
|
}
|
|
773
|
-
|
|
774
618
|
function commitAndPushUid(repositoryDir, options, subdirectories) {
|
|
775
619
|
var error = false;
|
|
776
|
-
|
|
777
620
|
if (options.commit) {
|
|
778
621
|
git.uidBranchUpdate(repositoryDir, subdirectories, options["no-reset-after-commit"]);
|
|
779
|
-
|
|
780
622
|
var _iterator15 = _createForOfIteratorHelper(options.remote || []),
|
|
781
|
-
|
|
782
|
-
|
|
623
|
+
_step15;
|
|
783
624
|
try {
|
|
784
625
|
for (_iterator15.s(); !(_step15 = _iterator15.n()).done;) {
|
|
785
626
|
var remote = _step15.value;
|
|
786
|
-
|
|
787
627
|
try {
|
|
788
628
|
git.run(repositoryDir, "push --quiet ".concat(remote, " uid:uid"));
|
|
789
629
|
} catch (childProcess) {
|
|
@@ -796,21 +636,17 @@ function commitAndPushUid(repositoryDir, options, subdirectories) {
|
|
|
796
636
|
_iterator15.f();
|
|
797
637
|
}
|
|
798
638
|
}
|
|
799
|
-
|
|
800
639
|
return error;
|
|
801
640
|
}
|
|
802
|
-
|
|
803
641
|
function main(argv) {
|
|
804
642
|
var options = parseArgs(argv);
|
|
805
|
-
|
|
806
643
|
if (cleanReorganizedData(options)) {
|
|
807
644
|
return 1;
|
|
808
645
|
} else {
|
|
809
646
|
return 0;
|
|
810
647
|
}
|
|
811
648
|
}
|
|
812
|
-
/* istanbul ignore if */
|
|
813
|
-
|
|
814
649
|
|
|
650
|
+
/* istanbul ignore if */
|
|
815
651
|
if (process.argv[1].endsWith("clean_reorganized_data.ts")) process.exit(main(process.argv));
|
|
816
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJwYXJzZUFyZ3MiLCJhcmd2Iiwib3B0aW9uc0RlZmluaXRpb25zIiwiYWxpYXMiLCJoZWxwIiwibmFtZSIsInR5cGUiLCJTdHJpbmciLCJCb29sZWFuIiwiZGVmYXVsdFZhbHVlIiwibXVsdGlwbGUiLCJkZWZhdWx0T3B0aW9uIiwib3B0aW9ucyIsImNvbW1hbmRMaW5lQXJncyIsImNsZWFuUmVvcmdhbml6ZWREYXRhIiwiZGF0YURpciIsIkRhdGUiLCJwcm90b3R5cGUiLCJ0b0pTT04iLCJwYXRjaGVkRGF0ZVRvSnNvbiIsImVycm9yIiwiZ2l0R3JvdXBVcmwiLCJjbG9uZSIsInRyaW0iLCJyZXBsYWNlIiwidW5kZWZpbmVkIiwiY2F0ZWdvcmllcyIsIm1hcCIsImRhdGFzZXROYW1lIiwiYXNzZXJ0Iiwibm90U3RyaWN0RXF1YWwiLCJFbmFibGVkRGF0YXNldHMiLCJlbmFibGVkRGF0YXNldHMiLCJyZWR1Y2UiLCJOb25lIiwiQWN0ZXVyc0V0T3JnYW5lcyIsImRhdGFzZXRzIiwiYWN0ZXVyc0V0T3JnYW5lcyIsImRhdGFzZXQiLCJwYXRoIiwiYmFzZW5hbWUiLCJmaWxlbmFtZSIsImV4ZWNTeW5jIiwiY3dkIiwiZW52IiwicHJvY2VzcyIsImVuY29kaW5nIiwic3RkaW8iLCJhbmFseXplQW5kUmVtb3ZlIiwiZGF0YXNldFJhd0RpciIsImpvaW4iLCJkYXRhc2V0Q2xlYW5EaXIiLCJ3YWxrRGlyIiwiYWN0ZXVyU3BsaXRQYXRoIiwiYWN0ZXVyRmlsZW5hbWUiLCJsZW5ndGgiLCJlbmRzV2l0aCIsImFjdGV1clJhd0ZpbGVQYXRoIiwidmVyYm9zZSIsImNvbnNvbGUiLCJsb2ciLCJhY3RldXJSYXdKc29uIiwiZnMiLCJyZWFkRmlsZVN5bmMiLCJhY3RldXIiLCJKU09OIiwicGFyc2UiLCJjbGVhbkFjdGV1ciIsImFjdGV1ckpzb24iLCJzdHJpbmdpZnkiLCJhY3RldXJDbGVhbiIsIkFjdGV1cnNFdE9yZ2FuZXNDb252ZXJ0IiwidG9BY3RldXIiLCJhY3RldXJDbGVhbkpzb24iLCJhY3RldXJUb0pzb24iLCJhY3RldXJDbGVhbkZpbGVQYXRoIiwiZW5zdXJlRGlyU3luYyIsImRpcm5hbWUiLCJ3cml0ZUZpbGVTeW5jIiwib3JnYW5lU3BsaXRQYXRoIiwib3JnYW5lRmlsZW5hbWUiLCJvcmdhbmVSYXdGaWxlUGF0aCIsIm9yZ2FuZVJhd0pzb24iLCJvcmdhbmUiLCJjbGVhbk9yZ2FuZSIsIm9yZ2FuZUpzb24iLCJvcmdhbmVDbGVhbiIsInRvT3JnYW5lIiwib3JnYW5lQ2xlYW5Kc29uIiwib3JnYW5lVG9Kc29uIiwib3JnYW5lQ2xlYW5GaWxlUGF0aCIsImNvbW1pdEFuZFB1c2giLCJyZW1vdGUiLCJjb21taXRBbmRQdXNoVWlkIiwiQWdlbmRhcyIsImFnZW5kYXMiLCJyZXVuaW9uU3BsaXRQYXRoIiwicmV1bmlvbkZpbGVuYW1lIiwicmV1bmlvblJhd0ZpbGVQYXRoIiwicmV1bmlvblJhd0pzb24iLCJyZXVuaW9uIiwiY2xlYW5SZXVuaW9uIiwicmV1bmlvbkpzb24iLCJyZXVuaW9uQ2xlYW4iLCJBZ2VuZGFzQ29udmVydCIsInRvUmV1bmlvbiIsInJldW5pb25DbGVhbkpzb24iLCJyZXVuaW9uVG9Kc29uIiwicmV1bmlvbkNsZWFuRmlsZVBhdGgiLCJBbWVuZGVtZW50cyIsImFtZW5kZW1lbnRzIiwiYW1lbmRlbWVudFNwbGl0UGF0aCIsImFtZW5kZW1lbnRGaWxlbmFtZSIsImFtZW5kZW1lbnRSYXdGaWxlUGF0aCIsImFtZW5kZW1lbnRSYXdKc29uIiwiYW1lbmRlbWVudCIsImNsZWFuQW1lbmRlbWVudCIsImFtZW5kZW1lbnRKc29uIiwiYW1lbmRlbWVudENsZWFuIiwiQW1lbmRlbWVudHNDb252ZXJ0IiwidG9BbWVuZGVtZW50IiwiYW1lbmRlbWVudENsZWFuSnNvbiIsImFtZW5kZW1lbnRUb0pzb24iLCJhbWVuZGVtZW50Q2xlYW5GaWxlUGF0aCIsIkRvc3NpZXJzTGVnaXNsYXRpZnMiLCJkb3NzaWVyc0xlZ2lzbGF0aWZzIiwiZG9jdW1lbnRTcGxpdFBhdGgiLCJkb2N1bWVudEZpbGVuYW1lIiwiZG9jdW1lbnRSYXdGaWxlUGF0aCIsImRvY3VtZW50UmF3SnNvbiIsImRvY3VtZW50IiwiY2xlYW5Eb2N1bWVudE9yRGl2aXNpb24iLCJkb2N1bWVudEpzb24iLCJkb2N1bWVudENsZWFuIiwiRG9zc2llcnNMZWdpc2xhdGlmc0NvbnZlcnQiLCJ0b0RvY3VtZW50IiwiZG9jdW1lbnRDbGVhbkpzb24iLCJkb2N1bWVudFRvSnNvbiIsImRvY3VtZW50Q2xlYW5GaWxlUGF0aCIsImRvc3NpZXJTcGxpdFBhdGgiLCJkb3NzaWVyRmlsZW5hbWUiLCJkb3NzaWVyUmF3RmlsZVBhdGgiLCJkb3NzaWVyUmF3SnNvbiIsImRvc3NpZXIiLCJjbGVhbkRvc3NpZXJQYXJsZW1lbnRhaXJlIiwiZG9zc2llckpzb24iLCJkb3NzaWVyQ2xlYW4iLCJ0b0Rvc3NpZXJQYXJsZW1lbnRhaXJlIiwiZG9zc2llckNsZWFuSnNvbiIsImRvc3NpZXJQYXJsZW1lbnRhaXJlVG9Kc29uIiwiZG9zc2llckNsZWFuRmlsZVBhdGgiLCJTY3J1dGlucyIsInNjcnV0aW5zIiwic2NydXRpblNwbGl0UGF0aCIsInNjcnV0aW5GaWxlbmFtZSIsInNjcnV0aW5SYXdGaWxlUGF0aCIsInNjcnV0aW5SYXdKc29uIiwic2NydXRpbiIsImNsZWFuU2NydXRpbiIsInNjcnV0aW5Kc29uIiwic2NydXRpbkNsZWFuIiwiU2NydXRpbnNDb252ZXJ0IiwidG9TY3J1dGluIiwic2NydXRpbkNsZWFuSnNvbiIsInNjcnV0aW5Ub0pzb24iLCJzY3J1dGluQ2xlYW5GaWxlUGF0aCIsImV4aXN0aW5nRGF0ZVRvSnNvbiIsInNpbGVudCIsInJlYWRkaXJTeW5jIiwicGF0aG5hbWUiLCJyZW1vdmVTeW5jIiwicmVwb3NpdG9yeURpciIsInJlbW90ZXMiLCJjb21taXQiLCJnaXQiLCJjaGlsZFByb2Nlc3MiLCJvdXRwdXQiLCJzdWJkaXJlY3RvcmllcyIsInVpZEJyYW5jaFVwZGF0ZSIsInJ1biIsIm1haW4iLCJleGl0Il0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NjcmlwdHMvY2xlYW5fcmVvcmdhbml6ZWRfZGF0YS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXNzZXJ0IGZyb20gXCJhc3NlcnRcIlxuaW1wb3J0IHsgZXhlY1N5bmMgfSBmcm9tIFwiY2hpbGRfcHJvY2Vzc1wiXG5pbXBvcnQgY29tbWFuZExpbmVBcmdzIGZyb20gXCJjb21tYW5kLWxpbmUtYXJnc1wiXG5pbXBvcnQgZnMgZnJvbSBcImZzLWV4dHJhXCJcbmltcG9ydCBwYXRoIGZyb20gXCJwYXRoXCJcblxuaW1wb3J0IHtcbiAgY2xlYW5BY3RldXIsXG4gIGNsZWFuQW1lbmRlbWVudCxcbiAgY2xlYW5Eb2N1bWVudE9yRGl2aXNpb24sXG4gIGNsZWFuRG9zc2llclBhcmxlbWVudGFpcmUsXG4gIGNsZWFuT3JnYW5lLFxuICBjbGVhblJldW5pb24sXG4gIGNsZWFuU2NydXRpbixcbn0gZnJvbSBcIi4uL2NsZWFuZXJzXCJcbmltcG9ydCB7IGRhdGFzZXRzLCBFbmFibGVkRGF0YXNldHMgfSBmcm9tIFwiLi4vZGF0YXNldHNcIlxuaW1wb3J0IHsgZXhpc3RpbmdEYXRlVG9Kc29uLCBwYXRjaGVkRGF0ZVRvSnNvbiB9IGZyb20gXCIuLi9kYXRlc1wiXG5pbXBvcnQgeyB3YWxrRGlyIH0gZnJvbSBcIi4uL2ZpbGVfc3lzdGVtc1wiXG5pbXBvcnQgKiBhcyBnaXQgZnJvbSBcIi4uL2dpdFwiXG5pbXBvcnQge1xuICBBY3RldXIsXG4gIENvbnZlcnQgYXMgQWN0ZXVyc0V0T3JnYW5lc0NvbnZlcnQsXG4gIE9yZ2FuZSxcbn0gZnJvbSBcIi4uL3R5cGVzL2FjdGV1cnNfZXRfb3JnYW5lc1wiXG5pbXBvcnQgeyBDb252ZXJ0IGFzIEFnZW5kYXNDb252ZXJ0LCBSZXVuaW9uIH0gZnJvbSBcIi4uL3R5cGVzL2FnZW5kYXNcIlxuaW1wb3J0IHsgQW1lbmRlbWVudCwgQ29udmVydCBhcyBBbWVuZGVtZW50c0NvbnZlcnQgfSBmcm9tIFwiLi4vdHlwZXMvYW1lbmRlbWVudHNcIlxuaW1wb3J0IHtcbiAgQ29udmVydCBhcyBEb3NzaWVyc0xlZ2lzbGF0aWZzQ29udmVydCxcbiAgRG9jdW1lbnQsXG4gIERvc3NpZXJQYXJsZW1lbnRhaXJlLFxufSBmcm9tIFwiLi4vdHlwZXMvZG9zc2llcnNfbGVnaXNsYXRpZnNcIlxuaW1wb3J0IHsgQ29udmVydCBhcyBTY3J1dGluc0NvbnZlcnQsIFNjcnV0aW4gfSBmcm9tIFwiLi4vdHlwZXMvc2NydXRpbnNcIlxuXG5mdW5jdGlvbiBwYXJzZUFyZ3MoYXJndjogc3RyaW5nW10pOiBhbnkge1xuICBjb25zdCBvcHRpb25zRGVmaW5pdGlvbnMgPSBbXG4gICAge1xuICAgICAgYWxpYXM6IFwiQ1wiLFxuICAgICAgaGVscDogXCJjbG9uZSByZXBvc2l0b3JpZXMgZnJvbSBnaXZlbiBncm91cCAob3Igb3JnYW5pemF0aW9uKSBnaXQgVVJMXCIsXG4gICAgICBuYW1lOiBcImNsb25lXCIsXG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgfSxcbiAgICB7XG4gICAgICBhbGlhczogXCJjXCIsXG4gICAgICBoZWxwOiBcImNvbW1pdCBjbGVhbiBmaWxlc1wiLFxuICAgICAgbmFtZTogXCJjb21taXRcIixcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgfSxcbiAgICB7XG4gICAgICBhbGlhczogXCJkXCIsXG4gICAgICBoZWxwOiBcInNpbmdsZSBkYXRhc2V0IHRvIHJlb3JnYW5pemVcIixcbiAgICAgIG5hbWU6IFwiZGF0YXNldFwiLFxuICAgICAgdHlwZTogU3RyaW5nLFxuICAgIH0sXG4gICAge1xuICAgICAgYWxpYXM6IFwia1wiLFxuICAgICAgZGVmYXVsdFZhbHVlOiBbXCJBbGxcIl0sXG4gICAgICBoZWxwOiBcImNhdGVnb3JpZXMgb2YgZGF0YXNldHMgdG8gcmVvcmdhbml6ZVwiLFxuICAgICAgbXVsdGlwbGU6IHRydWUsXG4gICAgICBuYW1lOiBcImNhdGVnb3JpZXNcIixcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICB9LFxuICAgIHtcbiAgICAgIGFsaWFzOiBcInJcIixcbiAgICAgIGhlbHA6IFwicHVzaCBjb21taXQgdG8gZ2l2ZW4gcmVtb3RlXCIsXG4gICAgICBtdWx0aXBsZTogdHJ1ZSxcbiAgICAgIG5hbWU6IFwicmVtb3RlXCIsXG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgfSxcbiAgICB7XG4gICAgICBhbGlhczogXCJzXCIsXG4gICAgICBoZWxwOiBcImRvbid0IGxvZyBhbnl0aGluZ1wiLFxuICAgICAgbmFtZTogXCJzaWxlbnRcIixcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgfSxcbiAgICB7XG4gICAgICBoZWxwOiBcImRvIG5vdCByZXNldCAtLWhhcmQgYWZ0ZXIgY29tbWl0IHRvIHNhdmUgSS9PIGlmIHRoZSB3b3JraW5nIHRyZWUgaXMgdG8gYmUgZGlzY2FyZGVkXCIsXG4gICAgICBuYW1lOiBcIm5vLXJlc2V0LWFmdGVyLWNvbW1pdFwiLFxuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICB9LFxuICAgIHtcbiAgICAgIGFsaWFzOiBcInZcIixcbiAgICAgIGhlbHA6IFwidmVyYm9zZSBsb2dzXCIsXG4gICAgICBuYW1lOiBcInZlcmJvc2VcIixcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgfSxcbiAgICB7XG4gICAgICBkZWZhdWx0T3B0aW9uOiB0cnVlLFxuICAgICAgaGVscDogXCJkaXJlY3RvcnkgY29udGFpbmluZyBBc3NlbWJsw6llIG9wZW4gZGF0YSBmaWxlc1wiLFxuICAgICAgbmFtZTogXCJkYXRhRGlyXCIsXG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgfSxcbiAgXVxuICBjb25zdCBvcHRpb25zID0gY29tbWFuZExpbmVBcmdzKG9wdGlvbnNEZWZpbml0aW9ucywge1xuICAgIGFyZ3Y6IGFyZ3YsXG4gIH0pXG4gIHJldHVybiBvcHRpb25zXG59XG5cbmZ1bmN0aW9uIGNsZWFuUmVvcmdhbml6ZWREYXRhKG9wdGlvbnM6IGFueSk6IGJvb2xlYW4ge1xuICBjb25zdCBkYXRhRGlyOiBzdHJpbmcgPSBvcHRpb25zLmRhdGFEaXJcblxuICBEYXRlLnByb3RvdHlwZS50b0pTT04gPSBwYXRjaGVkRGF0ZVRvSnNvblxuXG4gIGxldCBlcnJvciA9IGZhbHNlXG4gIGNvbnN0IGdpdEdyb3VwVXJsID0gb3B0aW9ucy5jbG9uZVxuICAgID8gb3B0aW9ucy5jbG9uZS50cmltKCkucmVwbGFjZSgvXFwvKyQvLCBcIlwiKVxuICAgIDogdW5kZWZpbmVkXG5cbiAgb3B0aW9ucy5jYXRlZ29yaWVzLm1hcCgoZGF0YXNldE5hbWU6IHN0cmluZykgPT5cbiAgICBhc3NlcnQubm90U3RyaWN0RXF1YWwoXG4gICAgICAoRW5hYmxlZERhdGFzZXRzIGFzIGFueSBhcyB7IFtuYW1lOiBzdHJpbmddOiBFbmFibGVkRGF0YXNldHMgfSlbXG4gICAgICAgIGRhdGFzZXROYW1lXG4gICAgICBdLFxuICAgICAgdW5kZWZpbmVkLFxuICAgICAgYFVua25vd24gbmFtZSBvZiBkYXRhc2V0OiAke2RhdGFzZXROYW1lfWAsXG4gICAgKSxcbiAgKVxuICBjb25zdCBlbmFibGVkRGF0YXNldHMgPSBvcHRpb25zLmNhdGVnb3JpZXMucmVkdWNlKFxuICAgIChlbmFibGVkRGF0YXNldHM6IEVuYWJsZWREYXRhc2V0cywgZGF0YXNldE5hbWU6IHN0cmluZyk6IEVuYWJsZWREYXRhc2V0cyA9PlxuICAgICAgZW5hYmxlZERhdGFzZXRzIHxcbiAgICAgIChFbmFibGVkRGF0YXNldHMgYXMgYW55IGFzIHsgW25hbWU6IHN0cmluZ106IEVuYWJsZWREYXRhc2V0cyB9KVtcbiAgICAgICAgZGF0YXNldE5hbWVcbiAgICAgIF0sXG4gICAgRW5hYmxlZERhdGFzZXRzLk5vbmUsXG4gIClcblxuICBpZiAoZW5hYmxlZERhdGFzZXRzICYgRW5hYmxlZERhdGFzZXRzLkFjdGV1cnNFdE9yZ2FuZXMpIHtcbiAgICBmb3IgKGNvbnN0IGRhdGFzZXQgb2YgZGF0YXNldHMuYWN0ZXVyc0V0T3JnYW5lcykge1xuICAgICAgY29uc3QgZGF0YXNldE5hbWUgPSBwYXRoLmJhc2VuYW1lKGRhdGFzZXQuZmlsZW5hbWUsIFwiLmpzb25cIilcbiAgICAgIGlmIChvcHRpb25zLmRhdGFzZXQgJiYgZGF0YXNldE5hbWUgIT09IG9wdGlvbnMuZGF0YXNldCkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuXG4gICAgICBpZiAoZ2l0R3JvdXBVcmwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBleGVjU3luYyhgZ2l0IGNsb25lICR7Z2l0R3JvdXBVcmx9LyR7ZGF0YXNldE5hbWV9X25ldHRveWUuZ2l0YCwge1xuICAgICAgICAgIGN3ZDogZGF0YURpcixcbiAgICAgICAgICBlbnY6IHByb2Nlc3MuZW52LFxuICAgICAgICAgIGVuY29kaW5nOiBcInV0Zi04XCIsXG4gICAgICAgICAgc3RkaW86IFtcImlnbm9yZVwiLCBcImlnbm9yZVwiLCBcInBpcGVcIl0sXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgICBhbmFseXplQW5kUmVtb3ZlKGRhdGFzZXROYW1lLCBvcHRpb25zKVxuICAgICAgY29uc3QgZGF0YXNldFJhd0Rpcjogc3RyaW5nID0gcGF0aC5qb2luKGRhdGFEaXIsIGRhdGFzZXROYW1lKVxuICAgICAgY29uc3QgZGF0YXNldENsZWFuRGlyOiBzdHJpbmcgPSBkYXRhc2V0UmF3RGlyICsgXCJfbmV0dG95ZVwiXG4gICAgICBmb3IgKGNvbnN0IGFjdGV1clNwbGl0UGF0aCBvZiB3YWxrRGlyKGRhdGFzZXRSYXdEaXIsIFtcImFjdGV1cnNcIl0pKSB7XG4gICAgICAgIGNvbnN0IGFjdGV1ckZpbGVuYW1lID0gYWN0ZXVyU3BsaXRQYXRoW2FjdGV1clNwbGl0UGF0aC5sZW5ndGggLSAxXVxuICAgICAgICBpZiAoIWFjdGV1ckZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGFjdGV1clJhd0ZpbGVQYXRoID0gcGF0aC5qb2luKGRhdGFzZXRSYXdEaXIsIC4uLmFjdGV1clNwbGl0UGF0aClcbiAgICAgICAgaWYgKG9wdGlvbnMudmVyYm9zZSkge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGAgIENsZWFuaW5nIGZpbGU6ICR7YWN0ZXVyUmF3RmlsZVBhdGh94oCmYClcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBhY3RldXJSYXdKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoYWN0ZXVyUmF3RmlsZVBhdGgsIHtcbiAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgIH0pXG4gICAgICAgIGNvbnN0IGFjdGV1ciA9IEpTT04ucGFyc2UoYWN0ZXVyUmF3SnNvbilcbiAgICAgICAgY2xlYW5BY3RldXIoYWN0ZXVyKVxuICAgICAgICBjb25zdCBhY3RldXJKc29uOiBzdHJpbmcgPSBKU09OLnN0cmluZ2lmeShhY3RldXIsIG51bGwsIDIpXG5cbiAgICAgICAgLy8gVmFsaWRhdGUgZ2VuZXJhdGVkIEpTT04uXG4gICAgICAgIGNvbnN0IGFjdGV1ckNsZWFuOiBBY3RldXIgPSBBY3RldXJzRXRPcmdhbmVzQ29udmVydC50b0FjdGV1cihhY3RldXJKc29uKVxuICAgICAgICBjb25zdCBhY3RldXJDbGVhbkpzb246IHN0cmluZyA9XG4gICAgICAgICAgQWN0ZXVyc0V0T3JnYW5lc0NvbnZlcnQuYWN0ZXVyVG9Kc29uKGFjdGV1ckNsZWFuKVxuXG4gICAgICAgIGNvbnN0IGFjdGV1ckNsZWFuRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICAgICAgICBkYXRhc2V0Q2xlYW5EaXIsXG4gICAgICAgICAgLi4uYWN0ZXVyU3BsaXRQYXRoLFxuICAgICAgICApXG4gICAgICAgIGZzLmVuc3VyZURpclN5bmMocGF0aC5kaXJuYW1lKGFjdGV1ckNsZWFuRmlsZVBhdGgpKVxuICAgICAgICBmcy53cml0ZUZpbGVTeW5jKGFjdGV1ckNsZWFuRmlsZVBhdGgsIGFjdGV1ckNsZWFuSnNvbiwge1xuICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgZm9yIChjb25zdCBvcmdhbmVTcGxpdFBhdGggb2Ygd2Fsa0RpcihkYXRhc2V0UmF3RGlyLCBbXCJvcmdhbmVzXCJdKSkge1xuICAgICAgICBjb25zdCBvcmdhbmVGaWxlbmFtZSA9IG9yZ2FuZVNwbGl0UGF0aFtvcmdhbmVTcGxpdFBhdGgubGVuZ3RoIC0gMV1cbiAgICAgICAgaWYgKCFvcmdhbmVGaWxlbmFtZS5lbmRzV2l0aChcIi5qc29uXCIpKSB7XG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBvcmdhbmVSYXdGaWxlUGF0aCA9IHBhdGguam9pbihkYXRhc2V0UmF3RGlyLCAuLi5vcmdhbmVTcGxpdFBhdGgpXG4gICAgICAgIGlmIChvcHRpb25zLnZlcmJvc2UpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgICBDbGVhbmluZyBmaWxlOiAke29yZ2FuZVJhd0ZpbGVQYXRofeKApmApXG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgb3JnYW5lUmF3SnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKG9yZ2FuZVJhd0ZpbGVQYXRoLCB7XG4gICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICB9KVxuICAgICAgICBjb25zdCBvcmdhbmUgPSBKU09OLnBhcnNlKG9yZ2FuZVJhd0pzb24pXG4gICAgICAgIGNsZWFuT3JnYW5lKG9yZ2FuZSlcbiAgICAgICAgY29uc3Qgb3JnYW5lSnNvbjogc3RyaW5nID0gSlNPTi5zdHJpbmdpZnkob3JnYW5lLCBudWxsLCAyKVxuXG4gICAgICAgIC8vIFZhbGlkYXRlIGdlbmVyYXRlZCBKU09OLlxuICAgICAgICBjb25zdCBvcmdhbmVDbGVhbjogT3JnYW5lID0gQWN0ZXVyc0V0T3JnYW5lc0NvbnZlcnQudG9PcmdhbmUob3JnYW5lSnNvbilcbiAgICAgICAgY29uc3Qgb3JnYW5lQ2xlYW5Kc29uOiBzdHJpbmcgPVxuICAgICAgICAgIEFjdGV1cnNFdE9yZ2FuZXNDb252ZXJ0Lm9yZ2FuZVRvSnNvbihvcmdhbmVDbGVhbilcblxuICAgICAgICBjb25zdCBvcmdhbmVDbGVhbkZpbGVQYXRoOiBzdHJpbmcgPSBwYXRoLmpvaW4oXG4gICAgICAgICAgZGF0YXNldENsZWFuRGlyLFxuICAgICAgICAgIC4uLm9yZ2FuZVNwbGl0UGF0aCxcbiAgICAgICAgKVxuICAgICAgICBmcy5lbnN1cmVEaXJTeW5jKHBhdGguZGlybmFtZShvcmdhbmVDbGVhbkZpbGVQYXRoKSlcbiAgICAgICAgZnMud3JpdGVGaWxlU3luYyhvcmdhbmVDbGVhbkZpbGVQYXRoLCBvcmdhbmVDbGVhbkpzb24sIHtcbiAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIGlmIChjb21taXRBbmRQdXNoKGRhdGFzZXRDbGVhbkRpciwgb3B0aW9ucywgb3B0aW9ucy5yZW1vdGUpKSB7XG4gICAgICAgIGVycm9yID0gdHJ1ZVxuICAgICAgfVxuICAgICAgaWYgKGNvbW1pdEFuZFB1c2hVaWQoZGF0YXNldENsZWFuRGlyLCBvcHRpb25zLCBbXCJhY3RldXJzXCIsIFwib3JnYW5lc1wiXSkpIHtcbiAgICAgICAgZXJyb3IgPSB0cnVlXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKGVuYWJsZWREYXRhc2V0cyAmIEVuYWJsZWREYXRhc2V0cy5BZ2VuZGFzKSB7XG4gICAgZm9yIChjb25zdCBkYXRhc2V0IG9mIGRhdGFzZXRzLmFnZW5kYXMpIHtcbiAgICAgIGNvbnN0IGRhdGFzZXROYW1lID0gcGF0aC5iYXNlbmFtZShkYXRhc2V0LmZpbGVuYW1lLCBcIi5qc29uXCIpXG4gICAgICBpZiAob3B0aW9ucy5kYXRhc2V0ICYmIGRhdGFzZXROYW1lICE9PSBvcHRpb25zLmRhdGFzZXQpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cblxuICAgICAgaWYgKGdpdEdyb3VwVXJsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgZXhlY1N5bmMoYGdpdCBjbG9uZSAke2dpdEdyb3VwVXJsfS8ke2RhdGFzZXROYW1lfV9uZXR0b3llLmdpdGAsIHtcbiAgICAgICAgICBjd2Q6IGRhdGFEaXIsXG4gICAgICAgICAgZW52OiBwcm9jZXNzLmVudixcbiAgICAgICAgICBlbmNvZGluZzogXCJ1dGYtOFwiLFxuICAgICAgICAgIHN0ZGlvOiBbXCJpZ25vcmVcIiwgXCJpZ25vcmVcIiwgXCJwaXBlXCJdLFxuICAgICAgICB9KVxuICAgICAgfVxuICAgICAgYW5hbHl6ZUFuZFJlbW92ZShkYXRhc2V0TmFtZSwgb3B0aW9ucylcbiAgICAgIGNvbnN0IGRhdGFzZXRSYXdEaXI6IHN0cmluZyA9IHBhdGguam9pbihkYXRhRGlyLCBkYXRhc2V0TmFtZSlcbiAgICAgIGNvbnN0IGRhdGFzZXRDbGVhbkRpcjogc3RyaW5nID0gZGF0YXNldFJhd0RpciArIFwiX25ldHRveWVcIlxuICAgICAgZm9yIChjb25zdCByZXVuaW9uU3BsaXRQYXRoIG9mIHdhbGtEaXIoZGF0YXNldFJhd0RpcikpIHtcbiAgICAgICAgY29uc3QgcmV1bmlvbkZpbGVuYW1lID0gcmV1bmlvblNwbGl0UGF0aFtyZXVuaW9uU3BsaXRQYXRoLmxlbmd0aCAtIDFdXG4gICAgICAgIGlmICghcmV1bmlvbkZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJldW5pb25SYXdGaWxlUGF0aCA9IHBhdGguam9pbihkYXRhc2V0UmF3RGlyLCAuLi5yZXVuaW9uU3BsaXRQYXRoKVxuICAgICAgICBpZiAob3B0aW9ucy52ZXJib3NlKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coYCAgQ2xlYW5pbmcgZmlsZTogJHtyZXVuaW9uUmF3RmlsZVBhdGh94oCmYClcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXVuaW9uUmF3SnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKHJldW5pb25SYXdGaWxlUGF0aCwge1xuICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgfSlcbiAgICAgICAgY29uc3QgcmV1bmlvbiA9IEpTT04ucGFyc2UocmV1bmlvblJhd0pzb24pXG4gICAgICAgIGNsZWFuUmV1bmlvbihyZXVuaW9uKVxuICAgICAgICBjb25zdCByZXVuaW9uSnNvbjogc3RyaW5nID0gSlNPTi5zdHJpbmdpZnkocmV1bmlvbiwgbnVsbCwgMilcblxuICAgICAgICAvLyBWYWxpZGF0ZSBnZW5lcmF0ZWQgSlNPTi5cbiAgICAgICAgY29uc3QgcmV1bmlvbkNsZWFuOiBSZXVuaW9uID0gQWdlbmRhc0NvbnZlcnQudG9SZXVuaW9uKHJldW5pb25Kc29uKVxuICAgICAgICBjb25zdCByZXVuaW9uQ2xlYW5Kc29uOiBzdHJpbmcgPVxuICAgICAgICAgIEFnZW5kYXNDb252ZXJ0LnJldW5pb25Ub0pzb24ocmV1bmlvbkNsZWFuKVxuXG4gICAgICAgIGNvbnN0IHJldW5pb25DbGVhbkZpbGVQYXRoOiBzdHJpbmcgPSBwYXRoLmpvaW4oXG4gICAgICAgICAgZGF0YXNldENsZWFuRGlyLFxuICAgICAgICAgIC4uLnJldW5pb25TcGxpdFBhdGgsXG4gICAgICAgIClcbiAgICAgICAgZnMuZW5zdXJlRGlyU3luYyhwYXRoLmRpcm5hbWUocmV1bmlvbkNsZWFuRmlsZVBhdGgpKVxuICAgICAgICBmcy53cml0ZUZpbGVTeW5jKHJldW5pb25DbGVhbkZpbGVQYXRoLCByZXVuaW9uQ2xlYW5Kc29uLCB7XG4gICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICBpZiAoY29tbWl0QW5kUHVzaChkYXRhc2V0Q2xlYW5EaXIsIG9wdGlvbnMsIG9wdGlvbnMucmVtb3RlKSkge1xuICAgICAgICBlcnJvciA9IHRydWVcbiAgICAgIH1cbiAgICAgIGlmIChjb21taXRBbmRQdXNoVWlkKGRhdGFzZXRDbGVhbkRpciwgb3B0aW9ucywgW1wiLlwiXSkpIHtcbiAgICAgICAgZXJyb3IgPSB0cnVlXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKGVuYWJsZWREYXRhc2V0cyAmIEVuYWJsZWREYXRhc2V0cy5BbWVuZGVtZW50cykge1xuICAgIGZvciAoY29uc3QgZGF0YXNldCBvZiBkYXRhc2V0cy5hbWVuZGVtZW50cykge1xuICAgICAgY29uc3QgZGF0YXNldE5hbWUgPSBwYXRoLmJhc2VuYW1lKGRhdGFzZXQuZmlsZW5hbWUsIFwiLmpzb25cIilcbiAgICAgIGlmIChvcHRpb25zLmRhdGFzZXQgJiYgZGF0YXNldE5hbWUgIT09IG9wdGlvbnMuZGF0YXNldCkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuXG4gICAgICBpZiAoZ2l0R3JvdXBVcmwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBleGVjU3luYyhgZ2l0IGNsb25lICR7Z2l0R3JvdXBVcmx9LyR7ZGF0YXNldE5hbWV9X25ldHRveWUuZ2l0YCwge1xuICAgICAgICAgIGN3ZDogZGF0YURpcixcbiAgICAgICAgICBlbnY6IHByb2Nlc3MuZW52LFxuICAgICAgICAgIGVuY29kaW5nOiBcInV0Zi04XCIsXG4gICAgICAgICAgc3RkaW86IFtcImlnbm9yZVwiLCBcImlnbm9yZVwiLCBcInBpcGVcIl0sXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgICBhbmFseXplQW5kUmVtb3ZlKGRhdGFzZXROYW1lLCBvcHRpb25zKVxuICAgICAgY29uc3QgZGF0YXNldFJhd0Rpcjogc3RyaW5nID0gcGF0aC5qb2luKGRhdGFEaXIsIGRhdGFzZXROYW1lKVxuICAgICAgY29uc3QgZGF0YXNldENsZWFuRGlyOiBzdHJpbmcgPSBkYXRhc2V0UmF3RGlyICsgXCJfbmV0dG95ZVwiXG4gICAgICBmb3IgKGNvbnN0IGFtZW5kZW1lbnRTcGxpdFBhdGggb2Ygd2Fsa0RpcihkYXRhc2V0UmF3RGlyKSkge1xuICAgICAgICBjb25zdCBhbWVuZGVtZW50RmlsZW5hbWUgPVxuICAgICAgICAgIGFtZW5kZW1lbnRTcGxpdFBhdGhbYW1lbmRlbWVudFNwbGl0UGF0aC5sZW5ndGggLSAxXVxuICAgICAgICBpZiAoIWFtZW5kZW1lbnRGaWxlbmFtZS5lbmRzV2l0aChcIi5qc29uXCIpKSB7XG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBhbWVuZGVtZW50UmF3RmlsZVBhdGggPSBwYXRoLmpvaW4oXG4gICAgICAgICAgZGF0YXNldFJhd0RpcixcbiAgICAgICAgICAuLi5hbWVuZGVtZW50U3BsaXRQYXRoLFxuICAgICAgICApXG4gICAgICAgIGlmIChvcHRpb25zLnZlcmJvc2UpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgICBDbGVhbmluZyBmaWxlOiAke2FtZW5kZW1lbnRSYXdGaWxlUGF0aH3igKZgKVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGFtZW5kZW1lbnRSYXdKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoXG4gICAgICAgICAgYW1lbmRlbWVudFJhd0ZpbGVQYXRoLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgICB9LFxuICAgICAgICApXG4gICAgICAgIGNvbnN0IGFtZW5kZW1lbnQgPSBKU09OLnBhcnNlKGFtZW5kZW1lbnRSYXdKc29uKVxuICAgICAgICBjbGVhbkFtZW5kZW1lbnQoYW1lbmRlbWVudClcbiAgICAgICAgY29uc3QgYW1lbmRlbWVudEpzb246IHN0cmluZyA9IEpTT04uc3RyaW5naWZ5KGFtZW5kZW1lbnQsIG51bGwsIDIpXG5cbiAgICAgICAgLy8gVmFsaWRhdGUgZ2VuZXJhdGVkIEpTT04uXG4gICAgICAgIGNvbnN0IGFtZW5kZW1lbnRDbGVhbjogQW1lbmRlbWVudCA9XG4gICAgICAgICAgQW1lbmRlbWVudHNDb252ZXJ0LnRvQW1lbmRlbWVudChhbWVuZGVtZW50SnNvbilcbiAgICAgICAgY29uc3QgYW1lbmRlbWVudENsZWFuSnNvbjogc3RyaW5nID1cbiAgICAgICAgICBBbWVuZGVtZW50c0NvbnZlcnQuYW1lbmRlbWVudFRvSnNvbihhbWVuZGVtZW50Q2xlYW4pXG5cbiAgICAgICAgY29uc3QgYW1lbmRlbWVudENsZWFuRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICAgICAgICBkYXRhc2V0Q2xlYW5EaXIsXG4gICAgICAgICAgLi4uYW1lbmRlbWVudFNwbGl0UGF0aCxcbiAgICAgICAgKVxuICAgICAgICBmcy5lbnN1cmVEaXJTeW5jKHBhdGguZGlybmFtZShhbWVuZGVtZW50Q2xlYW5GaWxlUGF0aCkpXG4gICAgICAgIGZzLndyaXRlRmlsZVN5bmMoYW1lbmRlbWVudENsZWFuRmlsZVBhdGgsIGFtZW5kZW1lbnRDbGVhbkpzb24sIHtcbiAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIGlmIChjb21taXRBbmRQdXNoKGRhdGFzZXRDbGVhbkRpciwgb3B0aW9ucywgb3B0aW9ucy5yZW1vdGUpKSB7XG4gICAgICAgIGVycm9yID0gdHJ1ZVxuICAgICAgfVxuICAgICAgaWYgKGNvbW1pdEFuZFB1c2hVaWQoZGF0YXNldENsZWFuRGlyLCBvcHRpb25zLCBbXCIuXCJdKSkge1xuICAgICAgICBlcnJvciA9IHRydWVcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAoZW5hYmxlZERhdGFzZXRzICYgRW5hYmxlZERhdGFzZXRzLkRvc3NpZXJzTGVnaXNsYXRpZnMpIHtcbiAgICBmb3IgKGNvbnN0IGRhdGFzZXQgb2YgZGF0YXNldHMuZG9zc2llcnNMZWdpc2xhdGlmcykge1xuICAgICAgY29uc3QgZGF0YXNldE5hbWUgPSBwYXRoLmJhc2VuYW1lKGRhdGFzZXQuZmlsZW5hbWUsIFwiLmpzb25cIilcbiAgICAgIGlmIChvcHRpb25zLmRhdGFzZXQgJiYgZGF0YXNldE5hbWUgIT09IG9wdGlvbnMuZGF0YXNldCkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuXG4gICAgICBpZiAoZ2l0R3JvdXBVcmwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBleGVjU3luYyhgZ2l0IGNsb25lICR7Z2l0R3JvdXBVcmx9LyR7ZGF0YXNldE5hbWV9X25ldHRveWUuZ2l0YCwge1xuICAgICAgICAgIGN3ZDogZGF0YURpcixcbiAgICAgICAgICBlbnY6IHByb2Nlc3MuZW52LFxuICAgICAgICAgIGVuY29kaW5nOiBcInV0Zi04XCIsXG4gICAgICAgICAgc3RkaW86IFtcImlnbm9yZVwiLCBcImlnbm9yZVwiLCBcInBpcGVcIl0sXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgICBhbmFseXplQW5kUmVtb3ZlKGRhdGFzZXROYW1lLCBvcHRpb25zKVxuICAgICAgY29uc3QgZGF0YXNldFJhd0Rpcjogc3RyaW5nID0gcGF0aC5qb2luKGRhdGFEaXIsIGRhdGFzZXROYW1lKVxuICAgICAgY29uc3QgZGF0YXNldENsZWFuRGlyOiBzdHJpbmcgPSBkYXRhc2V0UmF3RGlyICsgXCJfbmV0dG95ZVwiXG4gICAgICBmb3IgKGNvbnN0IGRvY3VtZW50U3BsaXRQYXRoIG9mIHdhbGtEaXIoZGF0YXNldFJhd0RpciwgW1wiZG9jdW1lbnRzXCJdKSkge1xuICAgICAgICBjb25zdCBkb2N1bWVudEZpbGVuYW1lID0gZG9jdW1lbnRTcGxpdFBhdGhbZG9jdW1lbnRTcGxpdFBhdGgubGVuZ3RoIC0gMV1cbiAgICAgICAgaWYgKCFkb2N1bWVudEZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRvY3VtZW50UmF3RmlsZVBhdGggPSBwYXRoLmpvaW4oXG4gICAgICAgICAgZGF0YXNldFJhd0RpcixcbiAgICAgICAgICAuLi5kb2N1bWVudFNwbGl0UGF0aCxcbiAgICAgICAgKVxuICAgICAgICBpZiAob3B0aW9ucy52ZXJib3NlKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coYCAgQ2xlYW5pbmcgZmlsZTogJHtkb2N1bWVudFJhd0ZpbGVQYXRofeKApmApXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZG9jdW1lbnRSYXdKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoZG9jdW1lbnRSYXdGaWxlUGF0aCwge1xuICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgfSlcbiAgICAgICAgY29uc3QgZG9jdW1lbnQgPSBKU09OLnBhcnNlKGRvY3VtZW50UmF3SnNvbilcbiAgICAgICAgY2xlYW5Eb2N1bWVudE9yRGl2aXNpb24oZG9jdW1lbnQpXG4gICAgICAgIGNvbnN0IGRvY3VtZW50SnNvbjogc3RyaW5nID0gSlNPTi5zdHJpbmdpZnkoZG9jdW1lbnQsIG51bGwsIDIpXG5cbiAgICAgICAgLy8gVmFsaWRhdGUgZ2VuZXJhdGVkIEpTT04uXG4gICAgICAgIGNvbnN0IGRvY3VtZW50Q2xlYW46IERvY3VtZW50ID1cbiAgICAgICAgICBEb3NzaWVyc0xlZ2lzbGF0aWZzQ29udmVydC50b0RvY3VtZW50KGRvY3VtZW50SnNvbilcbiAgICAgICAgY29uc3QgZG9jdW1lbnRDbGVhbkpzb246IHN0cmluZyA9XG4gICAgICAgICAgRG9zc2llcnNMZWdpc2xhdGlmc0NvbnZlcnQuZG9jdW1lbnRUb0pzb24oZG9jdW1lbnRDbGVhbilcblxuICAgICAgICBjb25zdCBkb2N1bWVudENsZWFuRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICAgICAgICBkYXRhc2V0Q2xlYW5EaXIsXG4gICAgICAgICAgLi4uZG9jdW1lbnRTcGxpdFBhdGgsXG4gICAgICAgIClcbiAgICAgICAgZnMuZW5zdXJlRGlyU3luYyhwYXRoLmRpcm5hbWUoZG9jdW1lbnRDbGVhbkZpbGVQYXRoKSlcbiAgICAgICAgZnMud3JpdGVGaWxlU3luYyhkb2N1bWVudENsZWFuRmlsZVBhdGgsIGRvY3VtZW50Q2xlYW5Kc29uLCB7XG4gICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICBmb3IgKGNvbnN0IGRvc3NpZXJTcGxpdFBhdGggb2Ygd2Fsa0RpcihkYXRhc2V0UmF3RGlyLCBbXCJkb3NzaWVyc1wiXSkpIHtcbiAgICAgICAgY29uc3QgZG9zc2llckZpbGVuYW1lID0gZG9zc2llclNwbGl0UGF0aFtkb3NzaWVyU3BsaXRQYXRoLmxlbmd0aCAtIDFdXG4gICAgICAgIGlmICghZG9zc2llckZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRvc3NpZXJSYXdGaWxlUGF0aCA9IHBhdGguam9pbihkYXRhc2V0UmF3RGlyLCAuLi5kb3NzaWVyU3BsaXRQYXRoKVxuICAgICAgICBpZiAob3B0aW9ucy52ZXJib3NlKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coYCAgQ2xlYW5pbmcgZmlsZTogJHtkb3NzaWVyUmF3RmlsZVBhdGh94oCmYClcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkb3NzaWVyUmF3SnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKGRvc3NpZXJSYXdGaWxlUGF0aCwge1xuICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgfSlcbiAgICAgICAgY29uc3QgZG9zc2llciA9IEpTT04ucGFyc2UoZG9zc2llclJhd0pzb24pXG4gICAgICAgIGNsZWFuRG9zc2llclBhcmxlbWVudGFpcmUoZG9zc2llcilcbiAgICAgICAgY29uc3QgZG9zc2llckpzb246IHN0cmluZyA9IEpTT04uc3RyaW5naWZ5KGRvc3NpZXIsIG51bGwsIDIpXG5cbiAgICAgICAgLy8gVmFsaWRhdGUgZ2VuZXJhdGVkIEpTT04uXG4gICAgICAgIGNvbnN0IGRvc3NpZXJDbGVhbjogRG9zc2llclBhcmxlbWVudGFpcmUgPVxuICAgICAgICAgIERvc3NpZXJzTGVnaXNsYXRpZnNDb252ZXJ0LnRvRG9zc2llclBhcmxlbWVudGFpcmUoZG9zc2llckpzb24pXG4gICAgICAgIGNvbnN0IGRvc3NpZXJDbGVhbkpzb246IHN0cmluZyA9XG4gICAgICAgICAgRG9zc2llcnNMZWdpc2xhdGlmc0NvbnZlcnQuZG9zc2llclBhcmxlbWVudGFpcmVUb0pzb24oZG9zc2llckNsZWFuKVxuXG4gICAgICAgIGNvbnN0IGRvc3NpZXJDbGVhbkZpbGVQYXRoOiBzdHJpbmcgPSBwYXRoLmpvaW4oXG4gICAgICAgICAgZGF0YXNldENsZWFuRGlyLFxuICAgICAgICAgIC4uLmRvc3NpZXJTcGxpdFBhdGgsXG4gICAgICAgIClcbiAgICAgICAgZnMuZW5zdXJlRGlyU3luYyhwYXRoLmRpcm5hbWUoZG9zc2llckNsZWFuRmlsZVBhdGgpKVxuICAgICAgICBmcy53cml0ZUZpbGVTeW5jKGRvc3NpZXJDbGVhbkZpbGVQYXRoLCBkb3NzaWVyQ2xlYW5Kc29uLCB7XG4gICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICBpZiAoY29tbWl0QW5kUHVzaChkYXRhc2V0Q2xlYW5EaXIsIG9wdGlvbnMsIG9wdGlvbnMucmVtb3RlKSkge1xuICAgICAgICBlcnJvciA9IHRydWVcbiAgICAgIH1cbiAgICAgIGlmIChcbiAgICAgICAgY29tbWl0QW5kUHVzaFVpZChkYXRhc2V0Q2xlYW5EaXIsIG9wdGlvbnMsIFtcImRvY3VtZW50c1wiLCBcImRvc3NpZXJzXCJdKVxuICAgICAgKSB7XG4gICAgICAgIGVycm9yID0gdHJ1ZVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmIChlbmFibGVkRGF0YXNldHMgJiBFbmFibGVkRGF0YXNldHMuU2NydXRpbnMpIHtcbiAgICBmb3IgKGNvbnN0IGRhdGFzZXQgb2YgZGF0YXNldHMuc2NydXRpbnMpIHtcbiAgICAgIGNvbnN0IGRhdGFzZXROYW1lID0gcGF0aC5iYXNlbmFtZShkYXRhc2V0LmZpbGVuYW1lLCBcIi5qc29uXCIpXG4gICAgICBpZiAob3B0aW9ucy5kYXRhc2V0ICYmIGRhdGFzZXROYW1lICE9PSBvcHRpb25zLmRhdGFzZXQpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cblxuICAgICAgaWYgKGdpdEdyb3VwVXJsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgZXhlY1N5bmMoYGdpdCBjbG9uZSAke2dpdEdyb3VwVXJsfS8ke2RhdGFzZXROYW1lfV9uZXR0b3llLmdpdGAsIHtcbiAgICAgICAgICBjd2Q6IGRhdGFEaXIsXG4gICAgICAgICAgZW52OiBwcm9jZXNzLmVudixcbiAgICAgICAgICBlbmNvZGluZzogXCJ1dGYtOFwiLFxuICAgICAgICAgIHN0ZGlvOiBbXCJpZ25vcmVcIiwgXCJpZ25vcmVcIiwgXCJwaXBlXCJdLFxuICAgICAgICB9KVxuICAgICAgfVxuICAgICAgYW5hbHl6ZUFuZFJlbW92ZShkYXRhc2V0TmFtZSwgb3B0aW9ucylcbiAgICAgIGNvbnN0IGRhdGFzZXRSYXdEaXI6IHN0cmluZyA9IHBhdGguam9pbihkYXRhRGlyLCBkYXRhc2V0TmFtZSlcbiAgICAgIGNvbnN0IGRhdGFzZXRDbGVhbkRpcjogc3RyaW5nID0gZGF0YXNldFJhd0RpciArIFwiX25ldHRveWVcIlxuICAgICAgZm9yIChjb25zdCBzY3J1dGluU3BsaXRQYXRoIG9mIHdhbGtEaXIoZGF0YXNldFJhd0RpcikpIHtcbiAgICAgICAgY29uc3Qgc2NydXRpbkZpbGVuYW1lID0gc2NydXRpblNwbGl0UGF0aFtzY3J1dGluU3BsaXRQYXRoLmxlbmd0aCAtIDFdXG4gICAgICAgIGlmICghc2NydXRpbkZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNjcnV0aW5SYXdGaWxlUGF0aCA9IHBhdGguam9pbihkYXRhc2V0UmF3RGlyLCAuLi5zY3J1dGluU3BsaXRQYXRoKVxuICAgICAgICBpZiAob3B0aW9ucy52ZXJib3NlKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coYCAgQ2xlYW5pbmcgZmlsZTogJHtzY3J1dGluUmF3RmlsZVBhdGh94oCmYClcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzY3J1dGluUmF3SnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKHNjcnV0aW5SYXdGaWxlUGF0aCwge1xuICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgfSlcbiAgICAgICAgY29uc3Qgc2NydXRpbiA9IEpTT04ucGFyc2Uoc2NydXRpblJhd0pzb24pXG4gICAgICAgIGNsZWFuU2NydXRpbihzY3J1dGluKVxuICAgICAgICBjb25zdCBzY3J1dGluSnNvbjogc3RyaW5nID0gSlNPTi5zdHJpbmdpZnkoc2NydXRpbiwgbnVsbCwgMilcblxuICAgICAgICAvLyBWYWxpZGF0ZSBnZW5lcmF0ZWQgSlNPTi5cbiAgICAgICAgY29uc3Qgc2NydXRpbkNsZWFuOiBTY3J1dGluID0gU2NydXRpbnNDb252ZXJ0LnRvU2NydXRpbihzY3J1dGluSnNvbilcbiAgICAgICAgY29uc3Qgc2NydXRpbkNsZWFuSnNvbjogc3RyaW5nID1cbiAgICAgICAgICBTY3J1dGluc0NvbnZlcnQuc2NydXRpblRvSnNvbihzY3J1dGluQ2xlYW4pXG5cbiAgICAgICAgY29uc3Qgc2NydXRpbkNsZWFuRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICAgICAgICBkYXRhc2V0Q2xlYW5EaXIsXG4gICAgICAgICAgLi4uc2NydXRpblNwbGl0UGF0aCxcbiAgICAgICAgKVxuICAgICAgICBmcy5lbnN1cmVEaXJTeW5jKHBhdGguZGlybmFtZShzY3J1dGluQ2xlYW5GaWxlUGF0aCkpXG4gICAgICAgIGZzLndyaXRlRmlsZVN5bmMoc2NydXRpbkNsZWFuRmlsZVBhdGgsIHNjcnV0aW5DbGVhbkpzb24sIHtcbiAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIGlmIChjb21taXRBbmRQdXNoKGRhdGFzZXRDbGVhbkRpciwgb3B0aW9ucywgb3B0aW9ucy5yZW1vdGUpKSB7XG4gICAgICAgIGVycm9yID0gdHJ1ZVxuICAgICAgfVxuICAgICAgaWYgKGNvbW1pdEFuZFB1c2hVaWQoZGF0YXNldENsZWFuRGlyLCBvcHRpb25zLCBbXCIuXCJdKSkge1xuICAgICAgICBlcnJvciA9IHRydWVcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBSZXN0b3JlIHN0YW5kYXJkIGNvbnZlcnNpb24gb2YgZGF0ZXMgdG8gSlNPTi5cbiAgRGF0ZS5wcm90b3R5cGUudG9KU09OID0gZXhpc3RpbmdEYXRlVG9Kc29uXG5cbiAgcmV0dXJuIGVycm9yXG59XG5cbmZ1bmN0aW9uIGFuYWx5emVBbmRSZW1vdmUoZGF0YXNldE5hbWU6IHN0cmluZywgb3B0aW9uczogYW55KTogYW55IHtcbiAgY29uc3QgZGF0YURpciA9IG9wdGlvbnMuZGF0YURpclxuICBjb25zdCBkYXRhc2V0UmF3RGlyOiBzdHJpbmcgPSBwYXRoLmpvaW4oZGF0YURpciwgZGF0YXNldE5hbWUpXG4gIGNvbnN0IGRhdGFzZXRDbGVhbkRpcjogc3RyaW5nID0gZGF0YXNldFJhd0RpciArIFwiX25ldHRveWVcIlxuICBpZiAoIW9wdGlvbnMuc2lsZW50KSB7XG4gICAgY29uc29sZS5sb2coYENsZWFuaW5nIGRpcmVjdG9yeTogJHtkYXRhc2V0Q2xlYW5EaXJ94oCmYClcbiAgfVxuICBmcy5lbnN1cmVEaXJTeW5jKGRhdGFzZXRDbGVhbkRpcilcbiAgZm9yIChjb25zdCBmaWxlbmFtZSBvZiBmcy5yZWFkZGlyU3luYyhkYXRhc2V0Q2xlYW5EaXIpKSB7XG4gICAgaWYgKGZpbGVuYW1lWzBdID09PSBcIi5cIikge1xuICAgICAgY29udGludWVcbiAgICB9XG4gICAgY29uc3QgcGF0aG5hbWUgPSBwYXRoLmpvaW4oZGF0YXNldENsZWFuRGlyLCBmaWxlbmFtZSlcbiAgICBmcy5yZW1vdmVTeW5jKHBhdGhuYW1lKVxuICB9XG59XG5cbmZ1bmN0aW9uIGNvbW1pdEFuZFB1c2goXG4gIHJlcG9zaXRvcnlEaXI6IHN0cmluZyxcbiAgb3B0aW9uczogYW55LFxuICByZW1vdGVzPzogc3RyaW5nW10sXG4pOiBib29sZWFuIHtcbiAgbGV0IGVycm9yID0gZmFsc2VcbiAgaWYgKG9wdGlvbnMuY29tbWl0KSB7XG4gICAgZ2l0LmNvbW1pdChyZXBvc2l0b3J5RGlyLCBcIk5vdXZlbGxlIG1vaXNzb25cIilcbiAgICBmb3IgKGNvbnN0IHJlbW90ZSBvZiByZW1vdGVzIHx8IFtdKSB7XG4gICAgICB0cnkge1xuICAgICAgICBleGVjU3luYyhgZ2l0IHB1c2ggJHtyZW1vdGV9IG1hc3RlcmAsIHtcbiAgICAgICAgICBjd2Q6IHJlcG9zaXRvcnlEaXIsXG4gICAgICAgICAgZW52OiBwcm9jZXNzLmVudixcbiAgICAgICAgICBlbmNvZGluZzogXCJ1dGYtOFwiLFxuICAgICAgICAgIHN0ZGlvOiBbXCJpZ25vcmVcIiwgXCJpZ25vcmVcIiwgXCJwaXBlXCJdLFxuICAgICAgICB9KVxuICAgICAgfSBjYXRjaCAoY2hpbGRQcm9jZXNzKSB7XG4gICAgICAgIC8vIERvbid0IHN0b3Agd2hlbiBwdXNoIGZhaWxzLlxuICAgICAgICBjb25zb2xlLmVycm9yKChjaGlsZFByb2Nlc3MgYXMgYW55KS5vdXRwdXQpXG4gICAgICAgIGVycm9yID0gdHJ1ZVxuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gZXJyb3Jcbn1cblxuZnVuY3Rpb24gY29tbWl0QW5kUHVzaFVpZChcbiAgcmVwb3NpdG9yeURpcjogc3RyaW5nLFxuICBvcHRpb25zOiBhbnksXG4gIHN1YmRpcmVjdG9yaWVzOiBhbnksXG4pOiBib29sZWFuIHtcbiAgbGV0IGVycm9yID0gZmFsc2VcbiAgaWYgKG9wdGlvbnMuY29tbWl0KSB7XG4gICAgZ2l0LnVpZEJyYW5jaFVwZGF0ZShcbiAgICAgIHJlcG9zaXRvcnlEaXIsXG4gICAgICBzdWJkaXJlY3RvcmllcyxcbiAgICAgIG9wdGlvbnNbXCJuby1yZXNldC1hZnRlci1jb21taXRcIl0sXG4gICAgKVxuICAgIGZvciAoY29uc3QgcmVtb3RlIG9mIG9wdGlvbnMucmVtb3RlIHx8IFtdKSB7XG4gICAgICB0cnkge1xuICAgICAgICBnaXQucnVuKHJlcG9zaXRvcnlEaXIsIGBwdXNoIC0tcXVpZXQgJHtyZW1vdGV9IHVpZDp1aWRgKVxuICAgICAgfSBjYXRjaCAoY2hpbGRQcm9jZXNzKSB7XG4gICAgICAgIGVycm9yID0gdHJ1ZVxuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gZXJyb3Jcbn1cblxuZnVuY3Rpb24gbWFpbihhcmd2OiBhbnkpOiBudW1iZXIge1xuICBjb25zdCBvcHRpb25zID0gcGFyc2VBcmdzKGFyZ3YpXG4gIGlmIChjbGVhblJlb3JnYW5pemVkRGF0YShvcHRpb25zKSkge1xuICAgIHJldHVybiAxXG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIDBcbiAgfVxufVxuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbmlmIChwcm9jZXNzLmFyZ3ZbMV0uZW5kc1dpdGgoXCJjbGVhbl9yZW9yZ2FuaXplZF9kYXRhLnRzXCIpKVxuICBwcm9jZXNzLmV4aXQobWFpbihwcm9jZXNzLmFyZ3YpKVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBRUE7O0FBU0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBS0E7O0FBQ0E7O0FBQ0E7O0FBS0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFQSxTQUFTQSxTQUFULENBQW1CQyxJQUFuQixFQUF3QztFQUN0QyxJQUFNQyxrQkFBa0IsR0FBRyxDQUN6QjtJQUNFQyxLQUFLLEVBQUUsR0FEVDtJQUVFQyxJQUFJLEVBQUUsK0RBRlI7SUFHRUMsSUFBSSxFQUFFLE9BSFI7SUFJRUMsSUFBSSxFQUFFQztFQUpSLENBRHlCLEVBT3pCO0lBQ0VKLEtBQUssRUFBRSxHQURUO0lBRUVDLElBQUksRUFBRSxvQkFGUjtJQUdFQyxJQUFJLEVBQUUsUUFIUjtJQUlFQyxJQUFJLEVBQUVFO0VBSlIsQ0FQeUIsRUFhekI7SUFDRUws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
|
|
652
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJwYXJzZUFyZ3MiLCJhcmd2Iiwib3B0aW9uc0RlZmluaXRpb25zIiwiYWxpYXMiLCJoZWxwIiwibmFtZSIsInR5cGUiLCJTdHJpbmciLCJCb29sZWFuIiwiZGVmYXVsdFZhbHVlIiwibXVsdGlwbGUiLCJOdW1iZXIiLCJkZWZhdWx0T3B0aW9uIiwib3B0aW9ucyIsImNvbW1hbmRMaW5lQXJncyIsImNsZWFuUmVvcmdhbml6ZWREYXRhIiwiZGF0YURpciIsIkRhdGUiLCJwcm90b3R5cGUiLCJ0b0pTT04iLCJwYXRjaGVkRGF0ZVRvSnNvbiIsImVycm9yIiwiZ2l0R3JvdXBVcmwiLCJjbG9uZSIsInRyaW0iLCJyZXBsYWNlIiwidW5kZWZpbmVkIiwiY2F0ZWdvcmllcyIsIm1hcCIsImRhdGFzZXROYW1lIiwiYXNzZXJ0Iiwibm90U3RyaWN0RXF1YWwiLCJFbmFibGVkRGF0YXNldHMiLCJlbmFibGVkRGF0YXNldHMiLCJyZWR1Y2UiLCJOb25lIiwiY2hvb3NlbkRhdGFzZXRzIiwiZGF0YXNldHMiLCJsZWdpc2xhdHVyZSIsImVuYWJsZWRMZWdpc2xhdHVyZXMiLCJ0b1N0cmluZyIsIk9iamVjdCIsImVudHJpZXMiLCJrZXkiLCJ2YWx1ZSIsImZpbHRlciIsImRhdGFzZXQiLCJpbmNsdWRlcyIsIkFjdGV1cnNFdE9yZ2FuZXMiLCJhY3RldXJzRXRPcmdhbmVzIiwicGF0aCIsImJhc2VuYW1lIiwiZmlsZW5hbWUiLCJleGVjU3luYyIsImN3ZCIsImVudiIsInByb2Nlc3MiLCJlbmNvZGluZyIsInN0ZGlvIiwiYW5hbHl6ZUFuZFJlbW92ZSIsImRhdGFzZXRSYXdEaXIiLCJqb2luIiwiZGF0YXNldENsZWFuRGlyIiwid2Fsa0RpciIsImFjdGV1clNwbGl0UGF0aCIsImFjdGV1ckZpbGVuYW1lIiwibGVuZ3RoIiwiZW5kc1dpdGgiLCJhY3RldXJSYXdGaWxlUGF0aCIsInZlcmJvc2UiLCJjb25zb2xlIiwibG9nIiwiYWN0ZXVyUmF3SnNvbiIsImZzIiwicmVhZEZpbGVTeW5jIiwiYWN0ZXVyIiwiSlNPTiIsInBhcnNlIiwiY2xlYW5BY3RldXIiLCJhY3RldXJKc29uIiwic3RyaW5naWZ5IiwiYWN0ZXVyQ2xlYW4iLCJBY3RldXJzRXRPcmdhbmVzQ29udmVydCIsInRvQWN0ZXVyIiwiYWN0ZXVyQ2xlYW5Kc29uIiwiYWN0ZXVyVG9Kc29uIiwiYWN0ZXVyQ2xlYW5GaWxlUGF0aCIsImVuc3VyZURpclN5bmMiLCJkaXJuYW1lIiwid3JpdGVGaWxlU3luYyIsIm9yZ2FuZVNwbGl0UGF0aCIsIm9yZ2FuZUZpbGVuYW1lIiwib3JnYW5lUmF3RmlsZVBhdGgiLCJvcmdhbmVSYXdKc29uIiwib3JnYW5lIiwiY2xlYW5PcmdhbmUiLCJvcmdhbmVKc29uIiwib3JnYW5lQ2xlYW4iLCJ0b09yZ2FuZSIsIm9yZ2FuZUNsZWFuSnNvbiIsIm9yZ2FuZVRvSnNvbiIsIm9yZ2FuZUNsZWFuRmlsZVBhdGgiLCJjb21taXRBbmRQdXNoIiwicmVtb3RlIiwiY29tbWl0QW5kUHVzaFVpZCIsIkFnZW5kYXMiLCJhZ2VuZGFzIiwicmV1bmlvblNwbGl0UGF0aCIsInJldW5pb25GaWxlbmFtZSIsInJldW5pb25SYXdGaWxlUGF0aCIsInJldW5pb25SYXdKc29uIiwicmV1bmlvbiIsImNsZWFuUmV1bmlvbiIsInJldW5pb25Kc29uIiwicmV1bmlvbkNsZWFuIiwiQWdlbmRhc0NvbnZlcnQiLCJ0b1JldW5pb24iLCJyZXVuaW9uQ2xlYW5Kc29uIiwicmV1bmlvblRvSnNvbiIsInJldW5pb25DbGVhbkZpbGVQYXRoIiwiQW1lbmRlbWVudHMiLCJhbWVuZGVtZW50cyIsImFtZW5kZW1lbnRTcGxpdFBhdGgiLCJhbWVuZGVtZW50RmlsZW5hbWUiLCJhbWVuZGVtZW50UmF3RmlsZVBhdGgiLCJhbWVuZGVtZW50UmF3SnNvbiIsImFtZW5kZW1lbnQiLCJjbGVhbkFtZW5kZW1lbnQiLCJhbWVuZGVtZW50SnNvbiIsImFtZW5kZW1lbnRDbGVhbiIsIkFtZW5kZW1lbnRzQ29udmVydCIsInRvQW1lbmRlbWVudCIsImFtZW5kZW1lbnRDbGVhbkpzb24iLCJhbWVuZGVtZW50VG9Kc29uIiwiYW1lbmRlbWVudENsZWFuRmlsZVBhdGgiLCJEb3NzaWVyc0xlZ2lzbGF0aWZzIiwiZG9zc2llcnNMZWdpc2xhdGlmcyIsImRvY3VtZW50U3BsaXRQYXRoIiwiZG9jdW1lbnRGaWxlbmFtZSIsImRvY3VtZW50UmF3RmlsZVBhdGgiLCJkb2N1bWVudFJhd0pzb24iLCJkb2N1bWVudCIsImNsZWFuRG9jdW1lbnRPckRpdmlzaW9uIiwiZG9jdW1lbnRKc29uIiwiZG9jdW1lbnRDbGVhbiIsIkRvc3NpZXJzTGVnaXNsYXRpZnNDb252ZXJ0IiwidG9Eb2N1bWVudCIsImRvY3VtZW50Q2xlYW5Kc29uIiwiZG9jdW1lbnRUb0pzb24iLCJkb2N1bWVudENsZWFuRmlsZVBhdGgiLCJkb3NzaWVyU3BsaXRQYXRoIiwiZG9zc2llckZpbGVuYW1lIiwiZG9zc2llclJhd0ZpbGVQYXRoIiwiZG9zc2llclJhd0pzb24iLCJkb3NzaWVyIiwiY2xlYW5Eb3NzaWVyUGFybGVtZW50YWlyZSIsImRvc3NpZXJKc29uIiwiZG9zc2llckNsZWFuIiwidG9Eb3NzaWVyUGFybGVtZW50YWlyZSIsImRvc3NpZXJDbGVhbkpzb24iLCJkb3NzaWVyUGFybGVtZW50YWlyZVRvSnNvbiIsImRvc3NpZXJDbGVhbkZpbGVQYXRoIiwiU2NydXRpbnMiLCJzY3J1dGlucyIsInNjcnV0aW5TcGxpdFBhdGgiLCJzY3J1dGluRmlsZW5hbWUiLCJzY3J1dGluUmF3RmlsZVBhdGgiLCJzY3J1dGluUmF3SnNvbiIsInNjcnV0aW4iLCJjbGVhblNjcnV0aW4iLCJzY3J1dGluSnNvbiIsInNjcnV0aW5DbGVhbiIsIlNjcnV0aW5zQ29udmVydCIsInRvU2NydXRpbiIsInNjcnV0aW5DbGVhbkpzb24iLCJzY3J1dGluVG9Kc29uIiwic2NydXRpbkNsZWFuRmlsZVBhdGgiLCJleGlzdGluZ0RhdGVUb0pzb24iLCJzaWxlbnQiLCJyZWFkZGlyU3luYyIsInBhdGhuYW1lIiwicmVtb3ZlU3luYyIsInJlcG9zaXRvcnlEaXIiLCJyZW1vdGVzIiwiY29tbWl0IiwiZ2l0IiwiY2hpbGRQcm9jZXNzIiwib3V0cHV0Iiwic3ViZGlyZWN0b3JpZXMiLCJ1aWRCcmFuY2hVcGRhdGUiLCJydW4iLCJtYWluIiwiZXhpdCJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zY3JpcHRzL2NsZWFuX3Jlb3JnYW5pemVkX2RhdGEudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGFzc2VydCBmcm9tIFwiYXNzZXJ0XCJcbmltcG9ydCB7IGV4ZWNTeW5jIH0gZnJvbSBcImNoaWxkX3Byb2Nlc3NcIlxuaW1wb3J0IGNvbW1hbmRMaW5lQXJncyBmcm9tIFwiY29tbWFuZC1saW5lLWFyZ3NcIlxuaW1wb3J0IGZzIGZyb20gXCJmcy1leHRyYVwiXG5pbXBvcnQgcGF0aCBmcm9tIFwicGF0aFwiXG5cbmltcG9ydCB7XG4gIGNsZWFuQWN0ZXVyLFxuICBjbGVhbkFtZW5kZW1lbnQsXG4gIGNsZWFuRG9jdW1lbnRPckRpdmlzaW9uLFxuICBjbGVhbkRvc3NpZXJQYXJsZW1lbnRhaXJlLFxuICBjbGVhbk9yZ2FuZSxcbiAgY2xlYW5SZXVuaW9uLFxuICBjbGVhblNjcnV0aW4sXG59IGZyb20gXCIuLi9jbGVhbmVyc1wiXG5pbXBvcnQgeyBkYXRhc2V0cywgRW5hYmxlZERhdGFzZXRzIH0gZnJvbSBcIi4uL2RhdGFzZXRzXCJcbmltcG9ydCB7IGV4aXN0aW5nRGF0ZVRvSnNvbiwgcGF0Y2hlZERhdGVUb0pzb24gfSBmcm9tIFwiLi4vZGF0ZXNcIlxuaW1wb3J0IHsgd2Fsa0RpciB9IGZyb20gXCIuLi9maWxlX3N5c3RlbXNcIlxuaW1wb3J0ICogYXMgZ2l0IGZyb20gXCIuLi9naXRcIlxuaW1wb3J0IHtcbiAgQWN0ZXVyLFxuICBDb252ZXJ0IGFzIEFjdGV1cnNFdE9yZ2FuZXNDb252ZXJ0LFxuICBPcmdhbmUsXG59IGZyb20gXCIuLi90eXBlcy9hY3RldXJzX2V0X29yZ2FuZXNcIlxuaW1wb3J0IHsgQ29udmVydCBhcyBBZ2VuZGFzQ29udmVydCwgUmV1bmlvbiB9IGZyb20gXCIuLi90eXBlcy9hZ2VuZGFzXCJcbmltcG9ydCB7IEFtZW5kZW1lbnQsIENvbnZlcnQgYXMgQW1lbmRlbWVudHNDb252ZXJ0IH0gZnJvbSBcIi4uL3R5cGVzL2FtZW5kZW1lbnRzXCJcbmltcG9ydCB7XG4gIENvbnZlcnQgYXMgRG9zc2llcnNMZWdpc2xhdGlmc0NvbnZlcnQsXG4gIERvY3VtZW50LFxuICBEb3NzaWVyUGFybGVtZW50YWlyZSxcbn0gZnJvbSBcIi4uL3R5cGVzL2Rvc3NpZXJzX2xlZ2lzbGF0aWZzXCJcbmltcG9ydCB7IENvbnZlcnQgYXMgU2NydXRpbnNDb252ZXJ0LCBTY3J1dGluIH0gZnJvbSBcIi4uL3R5cGVzL3NjcnV0aW5zXCJcblxuZnVuY3Rpb24gcGFyc2VBcmdzKGFyZ3Y6IHN0cmluZ1tdKTogYW55IHtcbiAgY29uc3Qgb3B0aW9uc0RlZmluaXRpb25zID0gW1xuICAgIHtcbiAgICAgIGFsaWFzOiBcIkNcIixcbiAgICAgIGhlbHA6IFwiY2xvbmUgcmVwb3NpdG9yaWVzIGZyb20gZ2l2ZW4gZ3JvdXAgKG9yIG9yZ2FuaXphdGlvbikgZ2l0IFVSTFwiLFxuICAgICAgbmFtZTogXCJjbG9uZVwiLFxuICAgICAgdHlwZTogU3RyaW5nLFxuICAgIH0sXG4gICAge1xuICAgICAgYWxpYXM6IFwiY1wiLFxuICAgICAgaGVscDogXCJjb21taXQgY2xlYW4gZmlsZXNcIixcbiAgICAgIG5hbWU6IFwiY29tbWl0XCIsXG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgIH0sXG4gICAge1xuICAgICAgYWxpYXM6IFwiZFwiLFxuICAgICAgaGVscDogXCJzaW5nbGUgZGF0YXNldCB0byByZW9yZ2FuaXplXCIsXG4gICAgICBuYW1lOiBcImRhdGFzZXRcIixcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICB9LFxuICAgIHtcbiAgICAgIGFsaWFzOiBcImtcIixcbiAgICAgIGRlZmF1bHRWYWx1ZTogW1wiQWxsXCJdLFxuICAgICAgaGVscDogXCJjYXRlZ29yaWVzIG9mIGRhdGFzZXRzIHRvIHJlb3JnYW5pemVcIixcbiAgICAgIG11bHRpcGxlOiB0cnVlLFxuICAgICAgbmFtZTogXCJjYXRlZ29yaWVzXCIsXG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgfSxcbiAgICB7XG4gICAgICBhbGlhczogXCJsXCIsXG4gICAgICBoZWxwOiBcImxlZ2lzbGF0dXJlcyBvZiBjYXRlZ29yaWVzIG9mIGRhdGFzZXRzIHRvIHJldHJpZXZlXCIsXG4gICAgICBtdWx0aXBsZTogdHJ1ZSxcbiAgICAgIG5hbWU6IFwibGVnaXNsYXR1cmVcIixcbiAgICAgIHR5cGU6IE51bWJlcixcbiAgICB9LFxuICAgIHtcbiAgICAgIGFsaWFzOiBcInJcIixcbiAgICAgIGhlbHA6IFwicHVzaCBjb21taXQgdG8gZ2l2ZW4gcmVtb3RlXCIsXG4gICAgICBtdWx0aXBsZTogdHJ1ZSxcbiAgICAgIG5hbWU6IFwicmVtb3RlXCIsXG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgfSxcbiAgICB7XG4gICAgICBhbGlhczogXCJzXCIsXG4gICAgICBoZWxwOiBcImRvbid0IGxvZyBhbnl0aGluZ1wiLFxuICAgICAgbmFtZTogXCJzaWxlbnRcIixcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgfSxcbiAgICB7XG4gICAgICBoZWxwOiBcImRvIG5vdCByZXNldCAtLWhhcmQgYWZ0ZXIgY29tbWl0IHRvIHNhdmUgSS9PIGlmIHRoZSB3b3JraW5nIHRyZWUgaXMgdG8gYmUgZGlzY2FyZGVkXCIsXG4gICAgICBuYW1lOiBcIm5vLXJlc2V0LWFmdGVyLWNvbW1pdFwiLFxuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICB9LFxuICAgIHtcbiAgICAgIGFsaWFzOiBcInZcIixcbiAgICAgIGhlbHA6IFwidmVyYm9zZSBsb2dzXCIsXG4gICAgICBuYW1lOiBcInZlcmJvc2VcIixcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgfSxcbiAgICB7XG4gICAgICBkZWZhdWx0T3B0aW9uOiB0cnVlLFxuICAgICAgaGVscDogXCJkaXJlY3RvcnkgY29udGFpbmluZyBBc3NlbWJsw6llIG9wZW4gZGF0YSBmaWxlc1wiLFxuICAgICAgbmFtZTogXCJkYXRhRGlyXCIsXG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgfSxcbiAgXVxuICBjb25zdCBvcHRpb25zID0gY29tbWFuZExpbmVBcmdzKG9wdGlvbnNEZWZpbml0aW9ucywge1xuICAgIGFyZ3Y6IGFyZ3YsXG4gIH0pXG4gIHJldHVybiBvcHRpb25zXG59XG5cbmZ1bmN0aW9uIGNsZWFuUmVvcmdhbml6ZWREYXRhKG9wdGlvbnM6IGFueSk6IGJvb2xlYW4ge1xuICBjb25zdCBkYXRhRGlyOiBzdHJpbmcgPSBvcHRpb25zLmRhdGFEaXJcblxuICBEYXRlLnByb3RvdHlwZS50b0pTT04gPSBwYXRjaGVkRGF0ZVRvSnNvblxuXG4gIGxldCBlcnJvciA9IGZhbHNlXG4gIGNvbnN0IGdpdEdyb3VwVXJsID0gb3B0aW9ucy5jbG9uZVxuICAgID8gb3B0aW9ucy5jbG9uZS50cmltKCkucmVwbGFjZSgvXFwvKyQvLCBcIlwiKVxuICAgIDogdW5kZWZpbmVkXG5cbiAgb3B0aW9ucy5jYXRlZ29yaWVzLm1hcCgoZGF0YXNldE5hbWU6IHN0cmluZykgPT5cbiAgICBhc3NlcnQubm90U3RyaWN0RXF1YWwoXG4gICAgICAoRW5hYmxlZERhdGFzZXRzIGFzIGFueSBhcyB7IFtuYW1lOiBzdHJpbmddOiBFbmFibGVkRGF0YXNldHMgfSlbXG4gICAgICAgIGRhdGFzZXROYW1lXG4gICAgICBdLFxuICAgICAgdW5kZWZpbmVkLFxuICAgICAgYFVua25vd24gbmFtZSBvZiBkYXRhc2V0OiAke2RhdGFzZXROYW1lfWAsXG4gICAgKSxcbiAgKVxuICBjb25zdCBlbmFibGVkRGF0YXNldHMgPSBvcHRpb25zLmNhdGVnb3JpZXMucmVkdWNlKFxuICAgIChlbmFibGVkRGF0YXNldHM6IEVuYWJsZWREYXRhc2V0cywgZGF0YXNldE5hbWU6IHN0cmluZyk6IEVuYWJsZWREYXRhc2V0cyA9PlxuICAgICAgZW5hYmxlZERhdGFzZXRzIHxcbiAgICAgIChFbmFibGVkRGF0YXNldHMgYXMgYW55IGFzIHsgW25hbWU6IHN0cmluZ106IEVuYWJsZWREYXRhc2V0cyB9KVtcbiAgICAgICAgZGF0YXNldE5hbWVcbiAgICAgIF0sXG4gICAgRW5hYmxlZERhdGFzZXRzLk5vbmUsXG4gIClcblxuICBsZXQgY2hvb3NlbkRhdGFzZXRzID0gZGF0YXNldHNcbiAgaWYob3B0aW9ucy5sZWdpc2xhdHVyZSkge1xuICAgIGNvbnN0IGVuYWJsZWRMZWdpc2xhdHVyZXMgPSBvcHRpb25zLmxlZ2lzbGF0dXJlLm1hcCgobGVnaXNsYXR1cmU6IG51bWJlcikgPT4gbGVnaXNsYXR1cmUudG9TdHJpbmcoKSlcbiAgICBmb3IgKGxldCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoY2hvb3NlbkRhdGFzZXRzKSkge1xuICAgICAgY2hvb3NlbkRhdGFzZXRzW2tleSBhcyBrZXlvZiB0eXBlb2YgY2hvb3NlbkRhdGFzZXRzXSA9IHZhbHVlLmZpbHRlcigoZGF0YXNldDogeyBsZWdpc2xhdHVyZTogYW55IH0pID0+IGVuYWJsZWRMZWdpc2xhdHVyZXMuaW5jbHVkZXMoZGF0YXNldC5sZWdpc2xhdHVyZSkpXG4gICAgfVxuICB9XG5cbiAgaWYgKGVuYWJsZWREYXRhc2V0cyAmIEVuYWJsZWREYXRhc2V0cy5BY3RldXJzRXRPcmdhbmVzKSB7XG4gICAgZm9yIChjb25zdCBkYXRhc2V0IG9mIGNob29zZW5EYXRhc2V0cy5hY3RldXJzRXRPcmdhbmVzKSB7XG4gICAgICBjb25zdCBkYXRhc2V0TmFtZSA9IHBhdGguYmFzZW5hbWUoZGF0YXNldC5maWxlbmFtZSwgXCIuanNvblwiKVxuICAgICAgaWYgKG9wdGlvbnMuZGF0YXNldCAmJiBkYXRhc2V0TmFtZSAhPT0gb3B0aW9ucy5kYXRhc2V0KSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIGlmIChnaXRHcm91cFVybCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGV4ZWNTeW5jKGBnaXQgY2xvbmUgJHtnaXRHcm91cFVybH0vJHtkYXRhc2V0TmFtZX1fbmV0dG95ZS5naXRgLCB7XG4gICAgICAgICAgY3dkOiBkYXRhRGlyLFxuICAgICAgICAgIGVudjogcHJvY2Vzcy5lbnYsXG4gICAgICAgICAgZW5jb2Rpbmc6IFwidXRmLThcIixcbiAgICAgICAgICBzdGRpbzogW1wiaWdub3JlXCIsIFwiaWdub3JlXCIsIFwicGlwZVwiXSxcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIGFuYWx5emVBbmRSZW1vdmUoZGF0YXNldE5hbWUsIG9wdGlvbnMpXG4gICAgICBjb25zdCBkYXRhc2V0UmF3RGlyOiBzdHJpbmcgPSBwYXRoLmpvaW4oZGF0YURpciwgZGF0YXNldE5hbWUpXG4gICAgICBjb25zdCBkYXRhc2V0Q2xlYW5EaXI6IHN0cmluZyA9IGRhdGFzZXRSYXdEaXIgKyBcIl9uZXR0b3llXCJcbiAgICAgIGZvciAoY29uc3QgYWN0ZXVyU3BsaXRQYXRoIG9mIHdhbGtEaXIoZGF0YXNldFJhd0RpciwgW1wiYWN0ZXVyc1wiXSkpIHtcbiAgICAgICAgY29uc3QgYWN0ZXVyRmlsZW5hbWUgPSBhY3RldXJTcGxpdFBhdGhbYWN0ZXVyU3BsaXRQYXRoLmxlbmd0aCAtIDFdXG4gICAgICAgIGlmICghYWN0ZXVyRmlsZW5hbWUuZW5kc1dpdGgoXCIuanNvblwiKSkge1xuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYWN0ZXVyUmF3RmlsZVBhdGggPSBwYXRoLmpvaW4oZGF0YXNldFJhd0RpciwgLi4uYWN0ZXVyU3BsaXRQYXRoKVxuICAgICAgICBpZiAob3B0aW9ucy52ZXJib3NlKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coYCAgQ2xlYW5pbmcgZmlsZTogJHthY3RldXJSYXdGaWxlUGF0aH3igKZgKVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGFjdGV1clJhd0pzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhhY3RldXJSYXdGaWxlUGF0aCwge1xuICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgfSlcbiAgICAgICAgY29uc3QgYWN0ZXVyID0gSlNPTi5wYXJzZShhY3RldXJSYXdKc29uKVxuICAgICAgICBjbGVhbkFjdGV1cihhY3RldXIpXG4gICAgICAgIGNvbnN0IGFjdGV1ckpzb246IHN0cmluZyA9IEpTT04uc3RyaW5naWZ5KGFjdGV1ciwgbnVsbCwgMilcblxuICAgICAgICAvLyBWYWxpZGF0ZSBnZW5lcmF0ZWQgSlNPTi5cbiAgICAgICAgY29uc3QgYWN0ZXVyQ2xlYW46IEFjdGV1ciA9IEFjdGV1cnNFdE9yZ2FuZXNDb252ZXJ0LnRvQWN0ZXVyKGFjdGV1ckpzb24pXG4gICAgICAgIGNvbnN0IGFjdGV1ckNsZWFuSnNvbjogc3RyaW5nID1cbiAgICAgICAgICBBY3RldXJzRXRPcmdhbmVzQ29udmVydC5hY3RldXJUb0pzb24oYWN0ZXVyQ2xlYW4pXG5cbiAgICAgICAgY29uc3QgYWN0ZXVyQ2xlYW5GaWxlUGF0aDogc3RyaW5nID0gcGF0aC5qb2luKFxuICAgICAgICAgIGRhdGFzZXRDbGVhbkRpcixcbiAgICAgICAgICAuLi5hY3RldXJTcGxpdFBhdGgsXG4gICAgICAgIClcbiAgICAgICAgZnMuZW5zdXJlRGlyU3luYyhwYXRoLmRpcm5hbWUoYWN0ZXVyQ2xlYW5GaWxlUGF0aCkpXG4gICAgICAgIGZzLndyaXRlRmlsZVN5bmMoYWN0ZXVyQ2xlYW5GaWxlUGF0aCwgYWN0ZXVyQ2xlYW5Kc29uLCB7XG4gICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICBmb3IgKGNvbnN0IG9yZ2FuZVNwbGl0UGF0aCBvZiB3YWxrRGlyKGRhdGFzZXRSYXdEaXIsIFtcIm9yZ2FuZXNcIl0pKSB7XG4gICAgICAgIGNvbnN0IG9yZ2FuZUZpbGVuYW1lID0gb3JnYW5lU3BsaXRQYXRoW29yZ2FuZVNwbGl0UGF0aC5sZW5ndGggLSAxXVxuICAgICAgICBpZiAoIW9yZ2FuZUZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG9yZ2FuZVJhd0ZpbGVQYXRoID0gcGF0aC5qb2luKGRhdGFzZXRSYXdEaXIsIC4uLm9yZ2FuZVNwbGl0UGF0aClcbiAgICAgICAgaWYgKG9wdGlvbnMudmVyYm9zZSkge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGAgIENsZWFuaW5nIGZpbGU6ICR7b3JnYW5lUmF3RmlsZVBhdGh94oCmYClcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBvcmdhbmVSYXdKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMob3JnYW5lUmF3RmlsZVBhdGgsIHtcbiAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgIH0pXG4gICAgICAgIGNvbnN0IG9yZ2FuZSA9IEpTT04ucGFyc2Uob3JnYW5lUmF3SnNvbilcbiAgICAgICAgY2xlYW5PcmdhbmUob3JnYW5lKVxuICAgICAgICBjb25zdCBvcmdhbmVKc29uOiBzdHJpbmcgPSBKU09OLnN0cmluZ2lmeShvcmdhbmUsIG51bGwsIDIpXG5cbiAgICAgICAgLy8gVmFsaWRhdGUgZ2VuZXJhdGVkIEpTT04uXG4gICAgICAgIGNvbnN0IG9yZ2FuZUNsZWFuOiBPcmdhbmUgPSBBY3RldXJzRXRPcmdhbmVzQ29udmVydC50b09yZ2FuZShvcmdhbmVKc29uKVxuICAgICAgICBjb25zdCBvcmdhbmVDbGVhbkpzb246IHN0cmluZyA9XG4gICAgICAgICAgQWN0ZXVyc0V0T3JnYW5lc0NvbnZlcnQub3JnYW5lVG9Kc29uKG9yZ2FuZUNsZWFuKVxuXG4gICAgICAgIGNvbnN0IG9yZ2FuZUNsZWFuRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICAgICAgICBkYXRhc2V0Q2xlYW5EaXIsXG4gICAgICAgICAgLi4ub3JnYW5lU3BsaXRQYXRoLFxuICAgICAgICApXG4gICAgICAgIGZzLmVuc3VyZURpclN5bmMocGF0aC5kaXJuYW1lKG9yZ2FuZUNsZWFuRmlsZVBhdGgpKVxuICAgICAgICBmcy53cml0ZUZpbGVTeW5jKG9yZ2FuZUNsZWFuRmlsZVBhdGgsIG9yZ2FuZUNsZWFuSnNvbiwge1xuICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgaWYgKGNvbW1pdEFuZFB1c2goZGF0YXNldENsZWFuRGlyLCBvcHRpb25zLCBvcHRpb25zLnJlbW90ZSkpIHtcbiAgICAgICAgZXJyb3IgPSB0cnVlXG4gICAgICB9XG4gICAgICBpZiAoY29tbWl0QW5kUHVzaFVpZChkYXRhc2V0Q2xlYW5EaXIsIG9wdGlvbnMsIFtcImFjdGV1cnNcIiwgXCJvcmdhbmVzXCJdKSkge1xuICAgICAgICBlcnJvciA9IHRydWVcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAoZW5hYmxlZERhdGFzZXRzICYgRW5hYmxlZERhdGFzZXRzLkFnZW5kYXMpIHtcbiAgICBmb3IgKGNvbnN0IGRhdGFzZXQgb2YgY2hvb3NlbkRhdGFzZXRzLmFnZW5kYXMpIHtcbiAgICAgIGNvbnN0IGRhdGFzZXROYW1lID0gcGF0aC5iYXNlbmFtZShkYXRhc2V0LmZpbGVuYW1lLCBcIi5qc29uXCIpXG4gICAgICBpZiAob3B0aW9ucy5kYXRhc2V0ICYmIGRhdGFzZXROYW1lICE9PSBvcHRpb25zLmRhdGFzZXQpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cblxuICAgICAgaWYgKGdpdEdyb3VwVXJsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgZXhlY1N5bmMoYGdpdCBjbG9uZSAke2dpdEdyb3VwVXJsfS8ke2RhdGFzZXROYW1lfV9uZXR0b3llLmdpdGAsIHtcbiAgICAgICAgICBjd2Q6IGRhdGFEaXIsXG4gICAgICAgICAgZW52OiBwcm9jZXNzLmVudixcbiAgICAgICAgICBlbmNvZGluZzogXCJ1dGYtOFwiLFxuICAgICAgICAgIHN0ZGlvOiBbXCJpZ25vcmVcIiwgXCJpZ25vcmVcIiwgXCJwaXBlXCJdLFxuICAgICAgICB9KVxuICAgICAgfVxuICAgICAgYW5hbHl6ZUFuZFJlbW92ZShkYXRhc2V0TmFtZSwgb3B0aW9ucylcbiAgICAgIGNvbnN0IGRhdGFzZXRSYXdEaXI6IHN0cmluZyA9IHBhdGguam9pbihkYXRhRGlyLCBkYXRhc2V0TmFtZSlcbiAgICAgIGNvbnN0IGRhdGFzZXRDbGVhbkRpcjogc3RyaW5nID0gZGF0YXNldFJhd0RpciArIFwiX25ldHRveWVcIlxuICAgICAgZm9yIChjb25zdCByZXVuaW9uU3BsaXRQYXRoIG9mIHdhbGtEaXIoZGF0YXNldFJhd0RpcikpIHtcbiAgICAgICAgY29uc3QgcmV1bmlvbkZpbGVuYW1lID0gcmV1bmlvblNwbGl0UGF0aFtyZXVuaW9uU3BsaXRQYXRoLmxlbmd0aCAtIDFdXG4gICAgICAgIGlmICghcmV1bmlvbkZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJldW5pb25SYXdGaWxlUGF0aCA9IHBhdGguam9pbihkYXRhc2V0UmF3RGlyLCAuLi5yZXVuaW9uU3BsaXRQYXRoKVxuICAgICAgICBpZiAob3B0aW9ucy52ZXJib3NlKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coYCAgQ2xlYW5pbmcgZmlsZTogJHtyZXVuaW9uUmF3RmlsZVBhdGh94oCmYClcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXVuaW9uUmF3SnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKHJldW5pb25SYXdGaWxlUGF0aCwge1xuICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgfSlcbiAgICAgICAgY29uc3QgcmV1bmlvbiA9IEpTT04ucGFyc2UocmV1bmlvblJhd0pzb24pXG4gICAgICAgIGNsZWFuUmV1bmlvbihyZXVuaW9uKVxuICAgICAgICBjb25zdCByZXVuaW9uSnNvbjogc3RyaW5nID0gSlNPTi5zdHJpbmdpZnkocmV1bmlvbiwgbnVsbCwgMilcblxuICAgICAgICAvLyBWYWxpZGF0ZSBnZW5lcmF0ZWQgSlNPTi5cbiAgICAgICAgY29uc3QgcmV1bmlvbkNsZWFuOiBSZXVuaW9uID0gQWdlbmRhc0NvbnZlcnQudG9SZXVuaW9uKHJldW5pb25Kc29uKVxuICAgICAgICBjb25zdCByZXVuaW9uQ2xlYW5Kc29uOiBzdHJpbmcgPVxuICAgICAgICAgIEFnZW5kYXNDb252ZXJ0LnJldW5pb25Ub0pzb24ocmV1bmlvbkNsZWFuKVxuXG4gICAgICAgIGNvbnN0IHJldW5pb25DbGVhbkZpbGVQYXRoOiBzdHJpbmcgPSBwYXRoLmpvaW4oXG4gICAgICAgICAgZGF0YXNldENsZWFuRGlyLFxuICAgICAgICAgIC4uLnJldW5pb25TcGxpdFBhdGgsXG4gICAgICAgIClcbiAgICAgICAgZnMuZW5zdXJlRGlyU3luYyhwYXRoLmRpcm5hbWUocmV1bmlvbkNsZWFuRmlsZVBhdGgpKVxuICAgICAgICBmcy53cml0ZUZpbGVTeW5jKHJldW5pb25DbGVhbkZpbGVQYXRoLCByZXVuaW9uQ2xlYW5Kc29uLCB7XG4gICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICBpZiAoY29tbWl0QW5kUHVzaChkYXRhc2V0Q2xlYW5EaXIsIG9wdGlvbnMsIG9wdGlvbnMucmVtb3RlKSkge1xuICAgICAgICBlcnJvciA9IHRydWVcbiAgICAgIH1cbiAgICAgIGlmIChjb21taXRBbmRQdXNoVWlkKGRhdGFzZXRDbGVhbkRpciwgb3B0aW9ucywgW1wiLlwiXSkpIHtcbiAgICAgICAgZXJyb3IgPSB0cnVlXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKGVuYWJsZWREYXRhc2V0cyAmIEVuYWJsZWREYXRhc2V0cy5BbWVuZGVtZW50cykge1xuICAgIGZvciAoY29uc3QgZGF0YXNldCBvZiBjaG9vc2VuRGF0YXNldHMuYW1lbmRlbWVudHMpIHtcbiAgICAgIGNvbnN0IGRhdGFzZXROYW1lID0gcGF0aC5iYXNlbmFtZShkYXRhc2V0LmZpbGVuYW1lLCBcIi5qc29uXCIpXG4gICAgICBpZiAob3B0aW9ucy5kYXRhc2V0ICYmIGRhdGFzZXROYW1lICE9PSBvcHRpb25zLmRhdGFzZXQpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cblxuICAgICAgaWYgKGdpdEdyb3VwVXJsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgZXhlY1N5bmMoYGdpdCBjbG9uZSAke2dpdEdyb3VwVXJsfS8ke2RhdGFzZXROYW1lfV9uZXR0b3llLmdpdGAsIHtcbiAgICAgICAgICBjd2Q6IGRhdGFEaXIsXG4gICAgICAgICAgZW52OiBwcm9jZXNzLmVudixcbiAgICAgICAgICBlbmNvZGluZzogXCJ1dGYtOFwiLFxuICAgICAgICAgIHN0ZGlvOiBbXCJpZ25vcmVcIiwgXCJpZ25vcmVcIiwgXCJwaXBlXCJdLFxuICAgICAgICB9KVxuICAgICAgfVxuICAgICAgYW5hbHl6ZUFuZFJlbW92ZShkYXRhc2V0TmFtZSwgb3B0aW9ucylcbiAgICAgIGNvbnN0IGRhdGFzZXRSYXdEaXI6IHN0cmluZyA9IHBhdGguam9pbihkYXRhRGlyLCBkYXRhc2V0TmFtZSlcbiAgICAgIGNvbnN0IGRhdGFzZXRDbGVhbkRpcjogc3RyaW5nID0gZGF0YXNldFJhd0RpciArIFwiX25ldHRveWVcIlxuICAgICAgZm9yIChjb25zdCBhbWVuZGVtZW50U3BsaXRQYXRoIG9mIHdhbGtEaXIoZGF0YXNldFJhd0RpcikpIHtcbiAgICAgICAgY29uc3QgYW1lbmRlbWVudEZpbGVuYW1lID1cbiAgICAgICAgICBhbWVuZGVtZW50U3BsaXRQYXRoW2FtZW5kZW1lbnRTcGxpdFBhdGgubGVuZ3RoIC0gMV1cbiAgICAgICAgaWYgKCFhbWVuZGVtZW50RmlsZW5hbWUuZW5kc1dpdGgoXCIuanNvblwiKSkge1xuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYW1lbmRlbWVudFJhd0ZpbGVQYXRoID0gcGF0aC5qb2luKFxuICAgICAgICAgIGRhdGFzZXRSYXdEaXIsXG4gICAgICAgICAgLi4uYW1lbmRlbWVudFNwbGl0UGF0aCxcbiAgICAgICAgKVxuICAgICAgICBpZiAob3B0aW9ucy52ZXJib3NlKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coYCAgQ2xlYW5pbmcgZmlsZTogJHthbWVuZGVtZW50UmF3RmlsZVBhdGh94oCmYClcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBhbWVuZGVtZW50UmF3SnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKFxuICAgICAgICAgIGFtZW5kZW1lbnRSYXdGaWxlUGF0aCxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgICAgfSxcbiAgICAgICAgKVxuICAgICAgICBjb25zdCBhbWVuZGVtZW50ID0gSlNPTi5wYXJzZShhbWVuZGVtZW50UmF3SnNvbilcbiAgICAgICAgY2xlYW5BbWVuZGVtZW50KGFtZW5kZW1lbnQpXG4gICAgICAgIGNvbnN0IGFtZW5kZW1lbnRKc29uOiBzdHJpbmcgPSBKU09OLnN0cmluZ2lmeShhbWVuZGVtZW50LCBudWxsLCAyKVxuXG4gICAgICAgIC8vIFZhbGlkYXRlIGdlbmVyYXRlZCBKU09OLlxuICAgICAgICBjb25zdCBhbWVuZGVtZW50Q2xlYW46IEFtZW5kZW1lbnQgPVxuICAgICAgICAgIEFtZW5kZW1lbnRzQ29udmVydC50b0FtZW5kZW1lbnQoYW1lbmRlbWVudEpzb24pXG4gICAgICAgIGNvbnN0IGFtZW5kZW1lbnRDbGVhbkpzb246IHN0cmluZyA9XG4gICAgICAgICAgQW1lbmRlbWVudHNDb252ZXJ0LmFtZW5kZW1lbnRUb0pzb24oYW1lbmRlbWVudENsZWFuKVxuXG4gICAgICAgIGNvbnN0IGFtZW5kZW1lbnRDbGVhbkZpbGVQYXRoOiBzdHJpbmcgPSBwYXRoLmpvaW4oXG4gICAgICAgICAgZGF0YXNldENsZWFuRGlyLFxuICAgICAgICAgIC4uLmFtZW5kZW1lbnRTcGxpdFBhdGgsXG4gICAgICAgIClcbiAgICAgICAgZnMuZW5zdXJlRGlyU3luYyhwYXRoLmRpcm5hbWUoYW1lbmRlbWVudENsZWFuRmlsZVBhdGgpKVxuICAgICAgICBmcy53cml0ZUZpbGVTeW5jKGFtZW5kZW1lbnRDbGVhbkZpbGVQYXRoLCBhbWVuZGVtZW50Q2xlYW5Kc29uLCB7XG4gICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICBpZiAoY29tbWl0QW5kUHVzaChkYXRhc2V0Q2xlYW5EaXIsIG9wdGlvbnMsIG9wdGlvbnMucmVtb3RlKSkge1xuICAgICAgICBlcnJvciA9IHRydWVcbiAgICAgIH1cbiAgICAgIGlmIChjb21taXRBbmRQdXNoVWlkKGRhdGFzZXRDbGVhbkRpciwgb3B0aW9ucywgW1wiLlwiXSkpIHtcbiAgICAgICAgZXJyb3IgPSB0cnVlXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKGVuYWJsZWREYXRhc2V0cyAmIEVuYWJsZWREYXRhc2V0cy5Eb3NzaWVyc0xlZ2lzbGF0aWZzKSB7XG4gICAgZm9yIChjb25zdCBkYXRhc2V0IG9mIGNob29zZW5EYXRhc2V0cy5kb3NzaWVyc0xlZ2lzbGF0aWZzKSB7XG4gICAgICBjb25zdCBkYXRhc2V0TmFtZSA9IHBhdGguYmFzZW5hbWUoZGF0YXNldC5maWxlbmFtZSwgXCIuanNvblwiKVxuICAgICAgaWYgKG9wdGlvbnMuZGF0YXNldCAmJiBkYXRhc2V0TmFtZSAhPT0gb3B0aW9ucy5kYXRhc2V0KSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIGlmIChnaXRHcm91cFVybCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGV4ZWNTeW5jKGBnaXQgY2xvbmUgJHtnaXRHcm91cFVybH0vJHtkYXRhc2V0TmFtZX1fbmV0dG95ZS5naXRgLCB7XG4gICAgICAgICAgY3dkOiBkYXRhRGlyLFxuICAgICAgICAgIGVudjogcHJvY2Vzcy5lbnYsXG4gICAgICAgICAgZW5jb2Rpbmc6IFwidXRmLThcIixcbiAgICAgICAgICBzdGRpbzogW1wiaWdub3JlXCIsIFwiaWdub3JlXCIsIFwicGlwZVwiXSxcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIGFuYWx5emVBbmRSZW1vdmUoZGF0YXNldE5hbWUsIG9wdGlvbnMpXG4gICAgICBjb25zdCBkYXRhc2V0UmF3RGlyOiBzdHJpbmcgPSBwYXRoLmpvaW4oZGF0YURpciwgZGF0YXNldE5hbWUpXG4gICAgICBjb25zdCBkYXRhc2V0Q2xlYW5EaXI6IHN0cmluZyA9IGRhdGFzZXRSYXdEaXIgKyBcIl9uZXR0b3llXCJcbiAgICAgIGZvciAoY29uc3QgZG9jdW1lbnRTcGxpdFBhdGggb2Ygd2Fsa0RpcihkYXRhc2V0UmF3RGlyLCBbXCJkb2N1bWVudHNcIl0pKSB7XG4gICAgICAgIGNvbnN0IGRvY3VtZW50RmlsZW5hbWUgPSBkb2N1bWVudFNwbGl0UGF0aFtkb2N1bWVudFNwbGl0UGF0aC5sZW5ndGggLSAxXVxuICAgICAgICBpZiAoIWRvY3VtZW50RmlsZW5hbWUuZW5kc1dpdGgoXCIuanNvblwiKSkge1xuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZG9jdW1lbnRSYXdGaWxlUGF0aCA9IHBhdGguam9pbihcbiAgICAgICAgICBkYXRhc2V0UmF3RGlyLFxuICAgICAgICAgIC4uLmRvY3VtZW50U3BsaXRQYXRoLFxuICAgICAgICApXG4gICAgICAgIGlmIChvcHRpb25zLnZlcmJvc2UpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgICBDbGVhbmluZyBmaWxlOiAke2RvY3VtZW50UmF3RmlsZVBhdGh94oCmYClcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkb2N1bWVudFJhd0pzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhkb2N1bWVudFJhd0ZpbGVQYXRoLCB7XG4gICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICB9KVxuICAgICAgICBjb25zdCBkb2N1bWVudCA9IEpTT04ucGFyc2UoZG9jdW1lbnRSYXdKc29uKVxuICAgICAgICBjbGVhbkRvY3VtZW50T3JEaXZpc2lvbihkb2N1bWVudClcbiAgICAgICAgY29uc3QgZG9jdW1lbnRKc29uOiBzdHJpbmcgPSBKU09OLnN0cmluZ2lmeShkb2N1bWVudCwgbnVsbCwgMilcblxuICAgICAgICAvLyBWYWxpZGF0ZSBnZW5lcmF0ZWQgSlNPTi5cbiAgICAgICAgY29uc3QgZG9jdW1lbnRDbGVhbjogRG9jdW1lbnQgPVxuICAgICAgICAgIERvc3NpZXJzTGVnaXNsYXRpZnNDb252ZXJ0LnRvRG9jdW1lbnQoZG9jdW1lbnRKc29uKVxuICAgICAgICBjb25zdCBkb2N1bWVudENsZWFuSnNvbjogc3RyaW5nID1cbiAgICAgICAgICBEb3NzaWVyc0xlZ2lzbGF0aWZzQ29udmVydC5kb2N1bWVudFRvSnNvbihkb2N1bWVudENsZWFuKVxuXG4gICAgICAgIGNvbnN0IGRvY3VtZW50Q2xlYW5GaWxlUGF0aDogc3RyaW5nID0gcGF0aC5qb2luKFxuICAgICAgICAgIGRhdGFzZXRDbGVhbkRpcixcbiAgICAgICAgICAuLi5kb2N1bWVudFNwbGl0UGF0aCxcbiAgICAgICAgKVxuICAgICAgICBmcy5lbnN1cmVEaXJTeW5jKHBhdGguZGlybmFtZShkb2N1bWVudENsZWFuRmlsZVBhdGgpKVxuICAgICAgICBmcy53cml0ZUZpbGVTeW5jKGRvY3VtZW50Q2xlYW5GaWxlUGF0aCwgZG9jdW1lbnRDbGVhbkpzb24sIHtcbiAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIGZvciAoY29uc3QgZG9zc2llclNwbGl0UGF0aCBvZiB3YWxrRGlyKGRhdGFzZXRSYXdEaXIsIFtcImRvc3NpZXJzXCJdKSkge1xuICAgICAgICBjb25zdCBkb3NzaWVyRmlsZW5hbWUgPSBkb3NzaWVyU3BsaXRQYXRoW2Rvc3NpZXJTcGxpdFBhdGgubGVuZ3RoIC0gMV1cbiAgICAgICAgaWYgKCFkb3NzaWVyRmlsZW5hbWUuZW5kc1dpdGgoXCIuanNvblwiKSkge1xuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZG9zc2llclJhd0ZpbGVQYXRoID0gcGF0aC5qb2luKGRhdGFzZXRSYXdEaXIsIC4uLmRvc3NpZXJTcGxpdFBhdGgpXG4gICAgICAgIGlmIChvcHRpb25zLnZlcmJvc2UpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgICBDbGVhbmluZyBmaWxlOiAke2Rvc3NpZXJSYXdGaWxlUGF0aH3igKZgKVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRvc3NpZXJSYXdKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoZG9zc2llclJhd0ZpbGVQYXRoLCB7XG4gICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICB9KVxuICAgICAgICBjb25zdCBkb3NzaWVyID0gSlNPTi5wYXJzZShkb3NzaWVyUmF3SnNvbilcbiAgICAgICAgY2xlYW5Eb3NzaWVyUGFybGVtZW50YWlyZShkb3NzaWVyKVxuICAgICAgICBjb25zdCBkb3NzaWVySnNvbjogc3RyaW5nID0gSlNPTi5zdHJpbmdpZnkoZG9zc2llciwgbnVsbCwgMilcblxuICAgICAgICAvLyBWYWxpZGF0ZSBnZW5lcmF0ZWQgSlNPTi5cbiAgICAgICAgY29uc3QgZG9zc2llckNsZWFuOiBEb3NzaWVyUGFybGVtZW50YWlyZSA9XG4gICAgICAgICAgRG9zc2llcnNMZWdpc2xhdGlmc0NvbnZlcnQudG9Eb3NzaWVyUGFybGVtZW50YWlyZShkb3NzaWVySnNvbilcbiAgICAgICAgY29uc3QgZG9zc2llckNsZWFuSnNvbjogc3RyaW5nID1cbiAgICAgICAgICBEb3NzaWVyc0xlZ2lzbGF0aWZzQ29udmVydC5kb3NzaWVyUGFybGVtZW50YWlyZVRvSnNvbihkb3NzaWVyQ2xlYW4pXG5cbiAgICAgICAgY29uc3QgZG9zc2llckNsZWFuRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICAgICAgICBkYXRhc2V0Q2xlYW5EaXIsXG4gICAgICAgICAgLi4uZG9zc2llclNwbGl0UGF0aCxcbiAgICAgICAgKVxuICAgICAgICBmcy5lbnN1cmVEaXJTeW5jKHBhdGguZGlybmFtZShkb3NzaWVyQ2xlYW5GaWxlUGF0aCkpXG4gICAgICAgIGZzLndyaXRlRmlsZVN5bmMoZG9zc2llckNsZWFuRmlsZVBhdGgsIGRvc3NpZXJDbGVhbkpzb24sIHtcbiAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIGlmIChjb21taXRBbmRQdXNoKGRhdGFzZXRDbGVhbkRpciwgb3B0aW9ucywgb3B0aW9ucy5yZW1vdGUpKSB7XG4gICAgICAgIGVycm9yID0gdHJ1ZVxuICAgICAgfVxuICAgICAgaWYgKFxuICAgICAgICBjb21taXRBbmRQdXNoVWlkKGRhdGFzZXRDbGVhbkRpciwgb3B0aW9ucywgW1wiZG9jdW1lbnRzXCIsIFwiZG9zc2llcnNcIl0pXG4gICAgICApIHtcbiAgICAgICAgZXJyb3IgPSB0cnVlXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKGVuYWJsZWREYXRhc2V0cyAmIEVuYWJsZWREYXRhc2V0cy5TY3J1dGlucykge1xuICAgIGZvciAoY29uc3QgZGF0YXNldCBvZiBjaG9vc2VuRGF0YXNldHMuc2NydXRpbnMpIHtcbiAgICAgIGNvbnN0IGRhdGFzZXROYW1lID0gcGF0aC5iYXNlbmFtZShkYXRhc2V0LmZpbGVuYW1lLCBcIi5qc29uXCIpXG4gICAgICBpZiAob3B0aW9ucy5kYXRhc2V0ICYmIGRhdGFzZXROYW1lICE9PSBvcHRpb25zLmRhdGFzZXQpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cblxuICAgICAgaWYgKGdpdEdyb3VwVXJsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgZXhlY1N5bmMoYGdpdCBjbG9uZSAke2dpdEdyb3VwVXJsfS8ke2RhdGFzZXROYW1lfV9uZXR0b3llLmdpdGAsIHtcbiAgICAgICAgICBjd2Q6IGRhdGFEaXIsXG4gICAgICAgICAgZW52OiBwcm9jZXNzLmVudixcbiAgICAgICAgICBlbmNvZGluZzogXCJ1dGYtOFwiLFxuICAgICAgICAgIHN0ZGlvOiBbXCJpZ25vcmVcIiwgXCJpZ25vcmVcIiwgXCJwaXBlXCJdLFxuICAgICAgICB9KVxuICAgICAgfVxuICAgICAgYW5hbHl6ZUFuZFJlbW92ZShkYXRhc2V0TmFtZSwgb3B0aW9ucylcbiAgICAgIGNvbnN0IGRhdGFzZXRSYXdEaXI6IHN0cmluZyA9IHBhdGguam9pbihkYXRhRGlyLCBkYXRhc2V0TmFtZSlcbiAgICAgIGNvbnN0IGRhdGFzZXRDbGVhbkRpcjogc3RyaW5nID0gZGF0YXNldFJhd0RpciArIFwiX25ldHRveWVcIlxuICAgICAgZm9yIChjb25zdCBzY3J1dGluU3BsaXRQYXRoIG9mIHdhbGtEaXIoZGF0YXNldFJhd0RpcikpIHtcbiAgICAgICAgY29uc3Qgc2NydXRpbkZpbGVuYW1lID0gc2NydXRpblNwbGl0UGF0aFtzY3J1dGluU3BsaXRQYXRoLmxlbmd0aCAtIDFdXG4gICAgICAgIGlmICghc2NydXRpbkZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNjcnV0aW5SYXdGaWxlUGF0aCA9IHBhdGguam9pbihkYXRhc2V0UmF3RGlyLCAuLi5zY3J1dGluU3BsaXRQYXRoKVxuICAgICAgICBpZiAob3B0aW9ucy52ZXJib3NlKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coYCAgQ2xlYW5pbmcgZmlsZTogJHtzY3J1dGluUmF3RmlsZVBhdGh94oCmYClcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzY3J1dGluUmF3SnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKHNjcnV0aW5SYXdGaWxlUGF0aCwge1xuICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgfSlcbiAgICAgICAgY29uc3Qgc2NydXRpbiA9IEpTT04ucGFyc2Uoc2NydXRpblJhd0pzb24pXG4gICAgICAgIGNsZWFuU2NydXRpbihzY3J1dGluKVxuICAgICAgICBjb25zdCBzY3J1dGluSnNvbjogc3RyaW5nID0gSlNPTi5zdHJpbmdpZnkoc2NydXRpbiwgbnVsbCwgMilcblxuICAgICAgICAvLyBWYWxpZGF0ZSBnZW5lcmF0ZWQgSlNPTi5cbiAgICAgICAgY29uc3Qgc2NydXRpbkNsZWFuOiBTY3J1dGluID0gU2NydXRpbnNDb252ZXJ0LnRvU2NydXRpbihzY3J1dGluSnNvbilcbiAgICAgICAgY29uc3Qgc2NydXRpbkNsZWFuSnNvbjogc3RyaW5nID1cbiAgICAgICAgICBTY3J1dGluc0NvbnZlcnQuc2NydXRpblRvSnNvbihzY3J1dGluQ2xlYW4pXG5cbiAgICAgICAgY29uc3Qgc2NydXRpbkNsZWFuRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICAgICAgICBkYXRhc2V0Q2xlYW5EaXIsXG4gICAgICAgICAgLi4uc2NydXRpblNwbGl0UGF0aCxcbiAgICAgICAgKVxuICAgICAgICBmcy5lbnN1cmVEaXJTeW5jKHBhdGguZGlybmFtZShzY3J1dGluQ2xlYW5GaWxlUGF0aCkpXG4gICAgICAgIGZzLndyaXRlRmlsZVN5bmMoc2NydXRpbkNsZWFuRmlsZVBhdGgsIHNjcnV0aW5DbGVhbkpzb24sIHtcbiAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIGlmIChjb21taXRBbmRQdXNoKGRhdGFzZXRDbGVhbkRpciwgb3B0aW9ucywgb3B0aW9ucy5yZW1vdGUpKSB7XG4gICAgICAgIGVycm9yID0gdHJ1ZVxuICAgICAgfVxuICAgICAgaWYgKGNvbW1pdEFuZFB1c2hVaWQoZGF0YXNldENsZWFuRGlyLCBvcHRpb25zLCBbXCIuXCJdKSkge1xuICAgICAgICBlcnJvciA9IHRydWVcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBSZXN0b3JlIHN0YW5kYXJkIGNvbnZlcnNpb24gb2YgZGF0ZXMgdG8gSlNPTi5cbiAgRGF0ZS5wcm90b3R5cGUudG9KU09OID0gZXhpc3RpbmdEYXRlVG9Kc29uXG5cbiAgcmV0dXJuIGVycm9yXG59XG5cbmZ1bmN0aW9uIGFuYWx5emVBbmRSZW1vdmUoZGF0YXNldE5hbWU6IHN0cmluZywgb3B0aW9uczogYW55KTogYW55IHtcbiAgY29uc3QgZGF0YURpciA9IG9wdGlvbnMuZGF0YURpclxuICBjb25zdCBkYXRhc2V0UmF3RGlyOiBzdHJpbmcgPSBwYXRoLmpvaW4oZGF0YURpciwgZGF0YXNldE5hbWUpXG4gIGNvbnN0IGRhdGFzZXRDbGVhbkRpcjogc3RyaW5nID0gZGF0YXNldFJhd0RpciArIFwiX25ldHRveWVcIlxuICBpZiAoIW9wdGlvbnMuc2lsZW50KSB7XG4gICAgY29uc29sZS5sb2coYENsZWFuaW5nIGRpcmVjdG9yeTogJHtkYXRhc2V0Q2xlYW5EaXJ94oCmYClcbiAgfVxuICBmcy5lbnN1cmVEaXJTeW5jKGRhdGFzZXRDbGVhbkRpcilcbiAgZm9yIChjb25zdCBmaWxlbmFtZSBvZiBmcy5yZWFkZGlyU3luYyhkYXRhc2V0Q2xlYW5EaXIpKSB7XG4gICAgaWYgKGZpbGVuYW1lWzBdID09PSBcIi5cIikge1xuICAgICAgY29udGludWVcbiAgICB9XG4gICAgY29uc3QgcGF0aG5hbWUgPSBwYXRoLmpvaW4oZGF0YXNldENsZWFuRGlyLCBmaWxlbmFtZSlcbiAgICBmcy5yZW1vdmVTeW5jKHBhdGhuYW1lKVxuICB9XG59XG5cbmZ1bmN0aW9uIGNvbW1pdEFuZFB1c2goXG4gIHJlcG9zaXRvcnlEaXI6IHN0cmluZyxcbiAgb3B0aW9uczogYW55LFxuICByZW1vdGVzPzogc3RyaW5nW10sXG4pOiBib29sZWFuIHtcbiAgbGV0IGVycm9yID0gZmFsc2VcbiAgaWYgKG9wdGlvbnMuY29tbWl0KSB7XG4gICAgZ2l0LmNvbW1pdChyZXBvc2l0b3J5RGlyLCBcIk5vdXZlbGxlIG1vaXNzb25cIilcbiAgICBmb3IgKGNvbnN0IHJlbW90ZSBvZiByZW1vdGVzIHx8IFtdKSB7XG4gICAgICB0cnkge1xuICAgICAgICBleGVjU3luYyhgZ2l0IHB1c2ggJHtyZW1vdGV9IG1hc3RlcmAsIHtcbiAgICAgICAgICBjd2Q6IHJlcG9zaXRvcnlEaXIsXG4gICAgICAgICAgZW52OiBwcm9jZXNzLmVudixcbiAgICAgICAgICBlbmNvZGluZzogXCJ1dGYtOFwiLFxuICAgICAgICAgIHN0ZGlvOiBbXCJpZ25vcmVcIiwgXCJpZ25vcmVcIiwgXCJwaXBlXCJdLFxuICAgICAgICB9KVxuICAgICAgfSBjYXRjaCAoY2hpbGRQcm9jZXNzKSB7XG4gICAgICAgIC8vIERvbid0IHN0b3Agd2hlbiBwdXNoIGZhaWxzLlxuICAgICAgICBjb25zb2xlLmVycm9yKChjaGlsZFByb2Nlc3MgYXMgYW55KS5vdXRwdXQpXG4gICAgICAgIGVycm9yID0gdHJ1ZVxuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gZXJyb3Jcbn1cblxuZnVuY3Rpb24gY29tbWl0QW5kUHVzaFVpZChcbiAgcmVwb3NpdG9yeURpcjogc3RyaW5nLFxuICBvcHRpb25zOiBhbnksXG4gIHN1YmRpcmVjdG9yaWVzOiBhbnksXG4pOiBib29sZWFuIHtcbiAgbGV0IGVycm9yID0gZmFsc2VcbiAgaWYgKG9wdGlvbnMuY29tbWl0KSB7XG4gICAgZ2l0LnVpZEJyYW5jaFVwZGF0ZShcbiAgICAgIHJlcG9zaXRvcnlEaXIsXG4gICAgICBzdWJkaXJlY3RvcmllcyxcbiAgICAgIG9wdGlvbnNbXCJuby1yZXNldC1hZnRlci1jb21taXRcIl0sXG4gICAgKVxuICAgIGZvciAoY29uc3QgcmVtb3RlIG9mIG9wdGlvbnMucmVtb3RlIHx8IFtdKSB7XG4gICAgICB0cnkge1xuICAgICAgICBnaXQucnVuKHJlcG9zaXRvcnlEaXIsIGBwdXNoIC0tcXVpZXQgJHtyZW1vdGV9IHVpZDp1aWRgKVxuICAgICAgfSBjYXRjaCAoY2hpbGRQcm9jZXNzKSB7XG4gICAgICAgIGVycm9yID0gdHJ1ZVxuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gZXJyb3Jcbn1cblxuZnVuY3Rpb24gbWFpbihhcmd2OiBhbnkpOiBudW1iZXIge1xuICBjb25zdCBvcHRpb25zID0gcGFyc2VBcmdzKGFyZ3YpXG4gIGlmIChjbGVhblJlb3JnYW5pemVkRGF0YShvcHRpb25zKSkge1xuICAgIHJldHVybiAxXG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIDBcbiAgfVxufVxuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbmlmIChwcm9jZXNzLmFyZ3ZbMV0uZW5kc1dpdGgoXCJjbGVhbl9yZW9yZ2FuaXplZF9kYXRhLnRzXCIpKVxuICBwcm9jZXNzLmV4aXQobWFpbihwcm9jZXNzLmFyZ3YpKVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFTQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBS0E7QUFDQTtBQUNBO0FBS0E7QUFBdUU7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUV2RSxTQUFTQSxTQUFTLENBQUNDLElBQWMsRUFBTztFQUN0QyxJQUFNQyxrQkFBa0IsR0FBRyxDQUN6QjtJQUNFQyxLQUFLLEVBQUUsR0FBRztJQUNWQyxJQUFJLEVBQUUsK0RBQStEO0lBQ3JFQyxJQUFJLEVBQUUsT0FBTztJQUNiQyxJQUFJLEVBQUVDO0VBQ1IsQ0FBQyxFQUNEO0lBQ0VKLEtBQUssRUFBRSxHQUFHO0lBQ1ZDLElBQUksRUFBRSxvQkFBb0I7SUFDMUJDLElBQUksRUFBRSxRQUFRO0lBQ2RDLElBQUksRUFBRUU7RUFDUixDQUFDLEVBQ0Q7SUFDRUwsS0FBSyxFQUFFLEdBQUc7SUFDVkMsSUFBSSxFQUFFLDhCQUE4QjtJQUNwQ0MsSUFBSSxFQUFFLFNBQVM7SUFDZkMsSUFBSSxFQUFFQztFQUNSLENBQUMsRUFDRDtJQUNFSixLQUFLLEVBQUUsR0FBRztJQUNWTSxZQUFZLEVBQUUsQ0FBQyxL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
|