@tricoteuses/assemblee 1.0.7 → 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.js +6 -96
- package/lib/raw_types/dossiers_legislatifs.mjs +6 -73
- 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,10 +1,8 @@
|
|
|
1
1
|
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
2
|
-
|
|
3
2
|
import commandLineArgs from "command-line-args";
|
|
4
3
|
import commandLineUsage from "command-line-usage";
|
|
5
4
|
import assert from "assert";
|
|
6
5
|
import { load, getFiles } from "../file_systems.mjs";
|
|
7
|
-
|
|
8
6
|
function parseArgs(argv) {
|
|
9
7
|
const optionsDefinitions = [{
|
|
10
8
|
description: "pathname to a JSON file or a glob pattern to JSON files",
|
|
@@ -34,163 +32,118 @@ function parseArgs(argv) {
|
|
|
34
32
|
const options = commandLineArgs(optionsDefinitions, {
|
|
35
33
|
argv: argv
|
|
36
34
|
});
|
|
37
|
-
|
|
38
35
|
if (!("help" in options) && !("data" in options)) {
|
|
39
36
|
console.error("--data is mandatory");
|
|
40
37
|
options.help = true;
|
|
41
38
|
}
|
|
42
|
-
|
|
43
39
|
if ("help" in options) {
|
|
44
40
|
const usage = commandLineUsage(sections);
|
|
45
41
|
console.warn(usage);
|
|
46
42
|
return null;
|
|
47
43
|
}
|
|
48
|
-
|
|
49
44
|
return options;
|
|
50
45
|
}
|
|
51
|
-
|
|
52
46
|
function eqSet(as, bs) {
|
|
53
47
|
if (as.size !== bs.size) return false;
|
|
54
|
-
|
|
55
48
|
for (var a of as) if (!bs.has(a)) return false;
|
|
56
|
-
|
|
57
49
|
return true;
|
|
58
50
|
}
|
|
59
|
-
|
|
60
51
|
class Code2Pattern {
|
|
61
52
|
constructor(pattern, children) {
|
|
62
53
|
_defineProperty(this, "_pattern_", void 0);
|
|
63
|
-
|
|
64
54
|
_defineProperty(this, "_match_count_", void 0);
|
|
65
|
-
|
|
66
55
|
this._pattern_ = pattern;
|
|
67
56
|
this._match_count_ = 0;
|
|
68
57
|
Object.assign(this, children);
|
|
69
58
|
}
|
|
70
|
-
|
|
71
59
|
}
|
|
72
|
-
|
|
73
60
|
class Code2PatternComFond extends Code2Pattern {
|
|
74
61
|
constructor() {
|
|
75
62
|
super("^/SAISIE/(/NOMIN/)*(/REUNION/)*(/RAPPORT/)*$", {});
|
|
76
63
|
}
|
|
77
|
-
|
|
78
64
|
}
|
|
79
|
-
|
|
80
65
|
class LectureMapping {
|
|
81
66
|
constructor() {
|
|
82
67
|
_defineProperty(this, "libelle", {});
|
|
83
|
-
|
|
84
68
|
_defineProperty(this, "codes", new Set());
|
|
85
69
|
}
|
|
86
|
-
|
|
87
70
|
static isLecture(acte) {
|
|
88
71
|
return acte.codeActe.match(LectureMapping.codes_lecture_regexp);
|
|
89
72
|
}
|
|
90
|
-
|
|
91
73
|
static getType(acte) {
|
|
92
74
|
if (acte.codeActe.match(/^AN/)) return "AN";else if (acte.codeActe.match(/^SN/)) return "SN";else throw Error(`${acte.codeActe} does not start with AN or SN`);
|
|
93
75
|
}
|
|
94
|
-
|
|
95
76
|
static map(codeActe) {
|
|
96
77
|
return codeActe.replace(LectureMapping.codes_lecture_regexp, `lecture$1`);
|
|
97
78
|
}
|
|
98
|
-
|
|
99
79
|
static getCodeActe(acte) {
|
|
100
80
|
if (!LectureMapping.isLecture(acte)) return;
|
|
101
81
|
return LectureMapping.map(acte.codeActe);
|
|
102
82
|
}
|
|
103
|
-
|
|
104
83
|
add(acte) {
|
|
105
84
|
this.codes.add(acte.codeActe);
|
|
106
85
|
const type = LectureMapping.getType(acte);
|
|
107
86
|
if (!(acte.libelleActe.nomCanonique in this.libelle)) this.libelle[acte.libelleActe.nomCanonique] = new Set();
|
|
108
87
|
this.libelle[acte.libelleActe.nomCanonique].add(type);
|
|
109
88
|
}
|
|
110
|
-
|
|
111
89
|
remap(acte, codeActe) {
|
|
112
90
|
acte.codeActe = codeActe;
|
|
113
91
|
let types = this.libelle[acte.libelleActe.nomCanonique];
|
|
114
|
-
|
|
115
92
|
if (!(types.has("SN") && types.has("AN"))) {
|
|
116
93
|
if (types.has("SN")) acte.libelleActe.nomCanonique += " (Sénat)";else if (types.has("AN")) acte.libelleActe.nomCanonique += " (Assemblée Nationale)";
|
|
117
94
|
}
|
|
118
95
|
}
|
|
119
|
-
|
|
120
96
|
mergeCodes(codes) {
|
|
121
97
|
for (const c of Array.from(this.codes)) codes.add(c);
|
|
122
98
|
}
|
|
123
|
-
|
|
124
99
|
printAnchors() {
|
|
125
100
|
for (const code of Array.from(this.codes)) console.log(`.. _${code}:`);
|
|
126
101
|
}
|
|
127
|
-
|
|
128
102
|
getCodes() {
|
|
129
103
|
return Array.from(this.codes).join(",");
|
|
130
104
|
}
|
|
131
|
-
|
|
132
105
|
}
|
|
133
|
-
|
|
134
106
|
_defineProperty(LectureMapping, "codes_lecture", ["AN1", "SN1", "ANNLEC", "SNNLEC", "ANLDEF", "AN2", "SN2", "SN3"]);
|
|
135
|
-
|
|
136
107
|
_defineProperty(LectureMapping, "codes_lecture_regexp", new RegExp("^(?:" + LectureMapping.codes_lecture.join("|") + ")(-.*)?$"));
|
|
137
|
-
|
|
138
108
|
class LectureMapper {
|
|
139
109
|
constructor() {
|
|
140
110
|
_defineProperty(this, "mapping", {});
|
|
141
111
|
}
|
|
142
|
-
|
|
143
112
|
has(codeActe) {
|
|
144
113
|
return codeActe in this.mapping;
|
|
145
114
|
}
|
|
146
|
-
|
|
147
115
|
collect(acte) {
|
|
148
116
|
const codeActe = LectureMapping.getCodeActe(acte);
|
|
149
|
-
|
|
150
117
|
if (codeActe != undefined) {
|
|
151
118
|
let lectures = this.mapping;
|
|
152
119
|
if (!(codeActe in lectures)) lectures[codeActe] = new LectureMapping();
|
|
153
120
|
lectures[codeActe].add(acte);
|
|
154
121
|
}
|
|
155
122
|
}
|
|
156
|
-
|
|
157
123
|
remap(acte) {
|
|
158
124
|
const codeActe = LectureMapping.getCodeActe(acte);
|
|
159
125
|
if (codeActe != undefined) this.mapping[codeActe].remap(acte, codeActe);
|
|
160
126
|
}
|
|
161
|
-
|
|
162
127
|
mergeCodes(codes, codeActe) {
|
|
163
128
|
this.mapping[codeActe].mergeCodes(codes);
|
|
164
129
|
}
|
|
165
|
-
|
|
166
130
|
printAnchors(codeActe) {
|
|
167
131
|
this.mapping[codeActe].printAnchors();
|
|
168
132
|
}
|
|
169
|
-
|
|
170
133
|
getCodes(codeActe) {
|
|
171
134
|
return this.mapping[codeActe].getCodes();
|
|
172
135
|
}
|
|
173
|
-
|
|
174
136
|
}
|
|
175
|
-
|
|
176
137
|
class ActesDocumentation {
|
|
177
138
|
constructor(sanityChecks, verbose = false) {
|
|
178
139
|
_defineProperty(this, "verbose", void 0);
|
|
179
|
-
|
|
180
140
|
_defineProperty(this, "sanityChecks", void 0);
|
|
181
|
-
|
|
182
141
|
_defineProperty(this, "lectureMapper", new LectureMapper());
|
|
183
|
-
|
|
184
142
|
_defineProperty(this, "remappedProcedures", {});
|
|
185
|
-
|
|
186
143
|
_defineProperty(this, "anchorsPrinted", {});
|
|
187
|
-
|
|
188
144
|
_defineProperty(this, "anchors", new Set());
|
|
189
|
-
|
|
190
145
|
_defineProperty(this, "codes", {});
|
|
191
|
-
|
|
192
146
|
_defineProperty(this, "procedures", null);
|
|
193
|
-
|
|
194
147
|
_defineProperty(this, "code2pattern", new Code2Pattern(null, {
|
|
195
148
|
"Procédure législative": new Code2Pattern("^(((/lecture/)+)|((/lecture/)+/CMP/(/lecture/)*))(/CC/)?(/PROM/)?(/AN-APPLI/)?$", {
|
|
196
149
|
lecture: new Code2Pattern("^(/DEPOT/)?(/DPTLETTRECT/)?(/ETI/)?(/AVCE/)?(/DGVT/)?(/ACIN/)?(/MOTION/)*(/PROCACC/)?(/COM/)?((/DEBATS/)+)?(/RTRINI/)?$", {
|
|
@@ -269,13 +222,11 @@ class ActesDocumentation {
|
|
|
269
222
|
lecture: new Code2Pattern("^(/DEPOT/)?$", {})
|
|
270
223
|
})
|
|
271
224
|
}));
|
|
272
|
-
|
|
273
225
|
this.verbose = verbose;
|
|
274
226
|
this.sanityChecks = sanityChecks;
|
|
275
227
|
this.procedures = {};
|
|
276
228
|
this.code2pattern._match_count_++;
|
|
277
229
|
}
|
|
278
|
-
|
|
279
230
|
walkFiles(data, action) {
|
|
280
231
|
for (const file of getFiles(data)) {
|
|
281
232
|
const dossier = load(file);
|
|
@@ -284,56 +235,47 @@ class ActesDocumentation {
|
|
|
284
235
|
action(this.procedures[procedure], dossier.actesLegislatifs, this.code2pattern[procedure], null);
|
|
285
236
|
}
|
|
286
237
|
}
|
|
287
|
-
|
|
288
238
|
collectFiles(data) {
|
|
289
239
|
this.walkFiles(data, (_actes, actesLegislatifs, _c2p, _parent) => {
|
|
290
240
|
this.collect(actesLegislatifs);
|
|
291
241
|
});
|
|
292
242
|
}
|
|
293
|
-
|
|
294
243
|
processFiles(data) {
|
|
295
244
|
this.walkFiles(data, (actes, actesLegislatifs, c2p, parent) => {
|
|
296
245
|
this.merge(actes, actesLegislatifs, c2p, parent);
|
|
297
246
|
});
|
|
298
247
|
if (this.sanityChecks) this.validate();
|
|
299
248
|
}
|
|
300
|
-
|
|
301
249
|
remapActes(actes) {
|
|
302
250
|
let results = [];
|
|
303
|
-
|
|
304
251
|
for (const acte of actes) {
|
|
305
|
-
this.lectureMapper.remap(acte);
|
|
252
|
+
this.lectureMapper.remap(acte);
|
|
306
253
|
|
|
254
|
+
// CC-SAISIE- suffix does not imply a hierarchy
|
|
307
255
|
acte.codeActe = acte.codeActe.replace(/^CC-SAISIE.*/, "CC-SAISIE");
|
|
308
256
|
results.push(acte);
|
|
309
257
|
}
|
|
310
|
-
|
|
311
258
|
return results;
|
|
312
259
|
}
|
|
313
|
-
|
|
314
260
|
collectActes(actes) {
|
|
315
261
|
let results = [];
|
|
316
|
-
|
|
317
262
|
for (const acte of actes) {
|
|
318
263
|
this.lectureMapper.collect(acte);
|
|
319
264
|
results.push(acte);
|
|
320
265
|
}
|
|
321
|
-
|
|
322
266
|
return results;
|
|
323
267
|
}
|
|
324
|
-
|
|
325
268
|
remapProcedure(procedure) {
|
|
326
269
|
const merge_procedures = new Map([["Proposition de loi ordinaire", "Procédure législative"], ["Projet de loi ordinaire", "Procédure législative"], ["Projet de ratification des traités et conventions", "Procédure législative"], ["Projet ou proposition de loi organique", "Procédure législative"], ["Projet ou proposition de loi constitutionnelle", "Procédure législative"], ["Projet de loi de finances de l'année", "Procédure législative"], ["Projet de loi de finances rectificative", "Procédure législative"], ["Projet de loi de financement de la sécurité sociale", "Procédure législative"]]);
|
|
327
|
-
|
|
328
270
|
if (merge_procedures.has(procedure)) {
|
|
329
271
|
this.remappedProcedures[procedure] = null;
|
|
330
272
|
return merge_procedures.get(procedure);
|
|
331
273
|
} else {
|
|
332
274
|
return procedure;
|
|
333
275
|
}
|
|
334
|
-
}
|
|
335
|
-
|
|
276
|
+
}
|
|
336
277
|
|
|
278
|
+
// return the codeActes in the same order they appear in the regexp
|
|
337
279
|
orderedCodes(codes, c2p, parent) {
|
|
338
280
|
codes = new Set(codes);
|
|
339
281
|
if (!this.sanityChecks) return codes;
|
|
@@ -344,21 +286,18 @@ class ActesDocumentation {
|
|
|
344
286
|
assert(eqSet(ordered, codes), `${[...ordered]} != ${[...codes]}`);
|
|
345
287
|
return ordered;
|
|
346
288
|
}
|
|
347
|
-
|
|
348
289
|
validateChronology(actesLegislatifs, c2p, parent) {
|
|
349
290
|
const pattern = c2p["_pattern_"];
|
|
350
291
|
const sequence = actesLegislatifs.map(x => `/${x.codeActe}/`.replace(`/${parent}-`, "/")).join("");
|
|
351
292
|
assert(sequence.match(new RegExp(pattern)), `${pattern} does not match ${sequence}`);
|
|
352
293
|
c2p._match_count_++;
|
|
353
294
|
}
|
|
354
|
-
|
|
355
295
|
mergeActe(actes, acte, c2p, parent) {
|
|
356
296
|
let code = acte.codeActe;
|
|
357
297
|
let shortCode = code.replace(new RegExp(`^${parent}-`), "");
|
|
358
298
|
shortCode = shortCode.replace(/-(AN|SN)$/, "");
|
|
359
299
|
this.codes[shortCode] = null;
|
|
360
300
|
let name = acte.libelleActe.nomCanonique;
|
|
361
|
-
|
|
362
301
|
if (!(code in actes)) {
|
|
363
302
|
actes[code] = {
|
|
364
303
|
type: acte.xsiType,
|
|
@@ -369,33 +308,25 @@ class ActesDocumentation {
|
|
|
369
308
|
} else {
|
|
370
309
|
actes[code].name.add(name);
|
|
371
310
|
}
|
|
372
|
-
|
|
373
311
|
if ("actesLegislatifs" in acte) this.merge(actes[code].actes, acte.actesLegislatifs, c2p[code], code);
|
|
374
312
|
}
|
|
375
|
-
|
|
376
313
|
merge(actes, actesLegislatifs, c2p, parent) {
|
|
377
314
|
const l = this.remapActes(actesLegislatifs);
|
|
378
315
|
this.validateChronology(l, c2p, parent);
|
|
379
|
-
|
|
380
316
|
for (const acte of l) this.mergeActe(actes, acte, c2p, parent);
|
|
381
317
|
}
|
|
382
|
-
|
|
383
318
|
collect(actesLegislatifs) {
|
|
384
319
|
for (const acte of this.collectActes(actesLegislatifs)) if ("actesLegislatifs" in acte) this.collect(acte.actesLegislatifs);
|
|
385
320
|
}
|
|
386
|
-
|
|
387
321
|
validateLevel(c2p, path) {
|
|
388
322
|
assert(c2p._match_count_ > 0, `${path} is never used`);
|
|
389
|
-
|
|
390
323
|
for (const [key, value] of Object.entries(c2p)) {
|
|
391
324
|
if (value != null && value.constructor.name == "Code2Pattern") this.validateLevel(value, path.concat([key]));
|
|
392
325
|
}
|
|
393
326
|
}
|
|
394
|
-
|
|
395
327
|
validate() {
|
|
396
328
|
this.validateLevel(this.code2pattern, []);
|
|
397
329
|
}
|
|
398
|
-
|
|
399
330
|
printEntry(sections, entry, codes) {
|
|
400
331
|
const title = `\`${entry}\`__`;
|
|
401
332
|
console.log(title);
|
|
@@ -403,32 +334,26 @@ class ActesDocumentation {
|
|
|
403
334
|
console.log(underline);
|
|
404
335
|
console.log(codes);
|
|
405
336
|
}
|
|
406
|
-
|
|
407
337
|
addAnchors(key) {
|
|
408
338
|
if (key in this.anchorsPrinted) return;
|
|
409
339
|
if (this.lectureMapper.has(key)) this.lectureMapper.mergeCodes(this.anchors, key);else this.anchors.add(key);
|
|
410
340
|
}
|
|
411
|
-
|
|
412
341
|
printAnchors(key) {
|
|
413
342
|
if (key in this.anchorsPrinted) return;
|
|
414
343
|
this.anchorsPrinted[key] = null;
|
|
415
344
|
if (this.lectureMapper.has(key)) this.lectureMapper.printAnchors(key);else console.log(`.. _${key}:`);
|
|
416
345
|
}
|
|
417
|
-
|
|
418
346
|
getCodes(key, shortCode) {
|
|
419
347
|
if (key in this.anchorsPrinted) return `cf \\*${shortCode}\\*`;
|
|
420
348
|
if (this.lectureMapper.has(key)) return this.lectureMapper.getCodes(key);else return key;
|
|
421
349
|
}
|
|
422
|
-
|
|
423
350
|
renameCMP(key, name) {
|
|
424
351
|
if (key.startsWith("CMP")) {
|
|
425
352
|
if (key.endsWith("-SN")) return `${name} (Sénat)`;else if (key.endsWith("-AN")) return `${name} (Assemblée Nationale)`;else return name;
|
|
426
353
|
} else return name;
|
|
427
354
|
}
|
|
428
|
-
|
|
429
355
|
printLevel(actes, sections, c2p, parent) {
|
|
430
356
|
const keys = this.orderedCodes(Object.keys(actes), c2p, parent);
|
|
431
|
-
|
|
432
357
|
for (const key of keys) {
|
|
433
358
|
const value = actes[key];
|
|
434
359
|
let name = Array.from(value.name).join(", ");
|
|
@@ -442,25 +367,20 @@ class ActesDocumentation {
|
|
|
442
367
|
if (Object.keys(value.actes).length > 0) this.printLevel(value.actes, sections.substring(1), c2p[key], key);
|
|
443
368
|
}
|
|
444
369
|
}
|
|
445
|
-
|
|
446
370
|
printCodes() {
|
|
447
371
|
for (const key of Object.keys(this.codes)) console.log(`.. _${key}TOC: http://`);
|
|
448
372
|
}
|
|
449
|
-
|
|
450
373
|
printAnchorsIndex() {
|
|
451
374
|
for (const code of Array.from(this.anchors)) console.log(`* :ref:\`${code} <${code}>\``);
|
|
452
375
|
}
|
|
453
|
-
|
|
454
376
|
getAggregated(procedure) {
|
|
455
377
|
if (procedure == "Procédure législative") {
|
|
456
378
|
const remapped = Object.keys(this.remappedProcedures).join(", ");
|
|
457
379
|
return ` (agrégation de ${remapped})`;
|
|
458
380
|
} else return "";
|
|
459
381
|
}
|
|
460
|
-
|
|
461
382
|
print() {
|
|
462
383
|
this.anchorsPrinted = {};
|
|
463
|
-
|
|
464
384
|
for (const [key, actes] of Object.entries(this.procedures)) {
|
|
465
385
|
const code = key.replace(/ +/g, "_");
|
|
466
386
|
this.codes[code] = null;
|
|
@@ -471,13 +391,10 @@ class ActesDocumentation {
|
|
|
471
391
|
console.log(underline);
|
|
472
392
|
this.printLevel(actes, "-~.'", this.code2pattern[key], null);
|
|
473
393
|
}
|
|
474
|
-
|
|
475
394
|
this.printCodes();
|
|
476
395
|
this.printAnchorsIndex();
|
|
477
396
|
}
|
|
478
|
-
|
|
479
397
|
}
|
|
480
|
-
|
|
481
398
|
function main(argv) {
|
|
482
399
|
const options = parseArgs(argv);
|
|
483
400
|
if (options === null) return 1;
|
|
@@ -487,8 +404,7 @@ function main(argv) {
|
|
|
487
404
|
doc.print();
|
|
488
405
|
return 0;
|
|
489
406
|
}
|
|
490
|
-
/* istanbul ignore if */
|
|
491
|
-
|
|
492
407
|
|
|
408
|
+
/* istanbul ignore if */
|
|
493
409
|
if (process.argv[1].endsWith("document_dossiers_legislatifs.ts")) process.exit(main(process.argv));
|
|
494
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjb21tYW5kTGluZUFyZ3MiLCJjb21tYW5kTGluZVVzYWdlIiwiYXNzZXJ0IiwibG9hZCIsImdldEZpbGVzIiwicGFyc2VBcmdzIiwiYXJndiIsIm9wdGlvbnNEZWZpbml0aW9ucyIsImRlc2NyaXB0aW9uIiwiZGVmYXVsdE9wdGlvbiIsIm11bHRpcGxlIiwibmFtZSIsInR5cGUiLCJTdHJpbmciLCJCb29sZWFuIiwic2VjdGlvbnMiLCJoZWFkZXIiLCJjb250ZW50Iiwib3B0aW9uTGlzdCIsIm9wdGlvbnMiLCJjb25zb2xlIiwiZXJyb3IiLCJoZWxwIiwidXNhZ2UiLCJ3YXJuIiwiZXFTZXQiLCJhcyIsImJzIiwic2l6ZSIsImEiLCJoYXMiLCJDb2RlMlBhdHRlcm4iLCJjb25zdHJ1Y3RvciIsInBhdHRlcm4iLCJjaGlsZHJlbiIsIl9wYXR0ZXJuXyIsIl9tYXRjaF9jb3VudF8iLCJPYmplY3QiLCJhc3NpZ24iLCJDb2RlMlBhdHRlcm5Db21Gb25kIiwiTGVjdHVyZU1hcHBpbmciLCJTZXQiLCJpc0xlY3R1cmUiLCJhY3RlIiwiY29kZUFjdGUiLCJtYXRjaCIsImNvZGVzX2xlY3R1cmVfcmVnZXhwIiwiZ2V0VHlwZSIsIkVycm9yIiwibWFwIiwicmVwbGFjZSIsImdldENvZGVBY3RlIiwiYWRkIiwiY29kZXMiLCJsaWJlbGxlQWN0ZSIsIm5vbUNhbm9uaXF1ZSIsImxpYmVsbGUiLCJyZW1hcCIsInR5cGVzIiwibWVyZ2VDb2RlcyIsImMiLCJBcnJheSIsImZyb20iLCJwcmludEFuY2hvcnMiLCJjb2RlIiwibG9nIiwiZ2V0Q29kZXMiLCJqb2luIiwiUmVnRXhwIiwiY29kZXNfbGVjdHVyZSIsIkxlY3R1cmVNYXBwZXIiLCJtYXBwaW5nIiwiY29sbGVjdCIsInVuZGVmaW5lZCIsImxlY3R1cmVzIiwiQWN0ZXNEb2N1bWVudGF0aW9uIiwic2FuaXR5Q2hlY2tzIiwidmVyYm9zZSIsImxlY3R1cmUiLCJDTVAiLCJDQyIsIlBST00iLCJBTjIxIiwiQU5MVU5JIiwiUsOpc29sdXRpb24iLCJBTjIwIiwiRVUiLCJJbW11bml0w6kiLCJwcm9jZWR1cmVzIiwiY29kZTJwYXR0ZXJuIiwid2Fsa0ZpbGVzIiwiZGF0YSIsImFjdGlvbiIsImZpbGUiLCJkb3NzaWVyIiwicHJvY2VkdXJlIiwicmVtYXBQcm9jZWR1cmUiLCJwcm9jZWR1cmVQYXJsZW1lbnRhaXJlIiwiYWN0ZXNMZWdpc2xhdGlmcyIsImNvbGxlY3RGaWxlcyIsIl9hY3RlcyIsIl9jMnAiLCJfcGFyZW50IiwicHJvY2Vzc0ZpbGVzIiwiYWN0ZXMiLCJjMnAiLCJwYXJlbnQiLCJtZXJnZSIsInZhbGlkYXRlIiwicmVtYXBBY3RlcyIsInJlc3VsdHMiLCJsZWN0dXJlTWFwcGVyIiwicHVzaCIsImNvbGxlY3RBY3RlcyIsIm1lcmdlX3Byb2NlZHVyZXMiLCJNYXAiLCJyZW1hcHBlZFByb2NlZHVyZXMiLCJnZXQiLCJvcmRlcmVkQ29kZXMiLCJvcmRlcmVkIiwieCIsInZhbGlkYXRlQ2hyb25vbG9neSIsInNlcXVlbmNlIiwibWVyZ2VBY3RlIiwic2hvcnRDb2RlIiwieHNpVHlwZSIsImwiLCJ2YWxpZGF0ZUxldmVsIiwicGF0aCIsImtleSIsInZhbHVlIiwiZW50cmllcyIsImNvbmNhdCIsInByaW50RW50cnkiLCJlbnRyeSIsInRpdGxlIiwidW5kZXJsaW5lIiwibGVuZ3RoIiwiYWRkQW5jaG9ycyIsImFuY2hvcnNQcmludGVkIiwiYW5jaG9ycyIsInJlbmFtZUNNUCIsInN0YXJ0c1dpdGgiLCJlbmRzV2l0aCIsInByaW50TGV2ZWwiLCJrZXlzIiwic3Vic3RyaW5nIiwicHJpbnRDb2RlcyIsInByaW50QW5jaG9yc0luZGV4IiwiZ2V0QWdncmVnYXRlZCIsInJlbWFwcGVkIiwicHJpbnQiLCJhZ2dyZWdhdGVkIiwibWFpbiIsImRvYyIsInByb2Nlc3MiLCJleGl0Il0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NjcmlwdHMvZG9jdW1lbnRfZG9zc2llcnNfbGVnaXNsYXRpZnMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGNvbW1hbmRMaW5lQXJncyBmcm9tIFwiY29tbWFuZC1saW5lLWFyZ3NcIlxuaW1wb3J0IGNvbW1hbmRMaW5lVXNhZ2UgZnJvbSBcImNvbW1hbmQtbGluZS11c2FnZVwiXG5pbXBvcnQgYXNzZXJ0IGZyb20gXCJhc3NlcnRcIlxuaW1wb3J0IHsgbG9hZCwgZ2V0RmlsZXMgfSBmcm9tIFwiLi4vZmlsZV9zeXN0ZW1zXCJcblxuZnVuY3Rpb24gcGFyc2VBcmdzKGFyZ3Y6IHN0cmluZ1tdKTogYW55IHtcbiAgY29uc3Qgb3B0aW9uc0RlZmluaXRpb25zID0gW1xuICAgIHtcbiAgICAgIGRlc2NyaXB0aW9uOiBcInBhdGhuYW1lIHRvIGEgSlNPTiBmaWxlIG9yIGEgZ2xvYiBwYXR0ZXJuIHRvIEpTT04gZmlsZXNcIixcbiAgICAgIGRlZmF1bHRPcHRpb246IHRydWUsXG4gICAgICBtdWx0aXBsZTogdHJ1ZSxcbiAgICAgIG5hbWU6IFwiZGF0YVwiLFxuICAgICAgdHlwZTogU3RyaW5nLFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogXCJuby1zYW5pdHktY2hlY2tzXCIsXG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVzY3JpcHRpb246IFwiRG8gbm90IHBlcmZvcm0gc2FuaXR5IGNoZWNrcy5cIixcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6IFwidmVyYm9zZVwiLFxuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlc2NyaXB0aW9uOiBcImluY3JlYXNlIHZlcmJvc2l0eVwiLFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogXCJoZWxwXCIsXG4gICAgICBkZXNjcmlwdGlvbjogXCJQcmludCB0aGlzIHVzYWdlIGd1aWRlLlwiLFxuICAgIH0sXG4gIF1cbiAgY29uc3Qgc2VjdGlvbnMgPSBbXG4gICAge1xuICAgICAgaGVhZGVyOiBcIkFpZGUgw6AgbGEgZG9jdW1lbnRhdGlvbiBkdSBkb3NzaWVyIGzDqWdpc2xhdGlmXCIsXG4gICAgICBjb250ZW50OiBcIkfDqW7DqHJlIHVuZSBoacOpcmFyY2hpZSBkZXMgYWN0ZXMgbMOpZ2lzbGF0aWZzXCIsXG4gICAgfSxcbiAgICB7XG4gICAgICBoZWFkZXI6IFwiT3B0aW9uc1wiLFxuICAgICAgb3B0aW9uTGlzdDogb3B0aW9uc0RlZmluaXRpb25zLFxuICAgIH0sXG4gIF1cbiAgY29uc3Qgb3B0aW9ucyA9IGNvbW1hbmRMaW5lQXJncyhvcHRpb25zRGVmaW5pdGlvbnMsIHtcbiAgICBhcmd2OiBhcmd2LFxuICB9KVxuICBpZiAoIShcImhlbHBcIiBpbiBvcHRpb25zKSAmJiAhKFwiZGF0YVwiIGluIG9wdGlvbnMpKSB7XG4gICAgY29uc29sZS5lcnJvcihcIi0tZGF0YSBpcyBtYW5kYXRvcnlcIilcbiAgICBvcHRpb25zLmhlbHAgPSB0cnVlXG4gIH1cbiAgaWYgKFwiaGVscFwiIGluIG9wdGlvbnMpIHtcbiAgICBjb25zdCB1c2FnZSA9IGNvbW1hbmRMaW5lVXNhZ2Uoc2VjdGlvbnMpXG4gICAgY29uc29sZS53YXJuKHVzYWdlKVxuICAgIHJldHVybiBudWxsXG4gIH1cbiAgcmV0dXJuIG9wdGlvbnNcbn1cblxuZnVuY3Rpb24gZXFTZXQoYXM6IFNldDxzdHJpbmc+LCBiczogU2V0PHN0cmluZz4pOiBib29sZWFuIHtcbiAgaWYgKGFzLnNpemUgIT09IGJzLnNpemUpIHJldHVybiBmYWxzZVxuICBmb3IgKHZhciBhIG9mIGFzKSBpZiAoIWJzLmhhcyhhKSkgcmV0dXJuIGZhbHNlXG4gIHJldHVybiB0cnVlXG59XG5cbmNsYXNzIENvZGUyUGF0dGVybiB7XG4gIF9wYXR0ZXJuXzogYW55XG4gIF9tYXRjaF9jb3VudF86IG51bWJlclxuICBjb25zdHJ1Y3RvcihwYXR0ZXJuOiBhbnksIGNoaWxkcmVuOiBhbnkpIHtcbiAgICB0aGlzLl9wYXR0ZXJuXyA9IHBhdHRlcm5cbiAgICB0aGlzLl9tYXRjaF9jb3VudF8gPSAwXG4gICAgT2JqZWN0LmFzc2lnbih0aGlzLCBjaGlsZHJlbilcbiAgfVxufVxuXG5jbGFzcyBDb2RlMlBhdHRlcm5Db21Gb25kIGV4dGVuZHMgQ29kZTJQYXR0ZXJuIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoXCJeL1NBSVNJRS8oL05PTUlOLykqKC9SRVVOSU9OLykqKC9SQVBQT1JULykqJFwiLCB7fSlcbiAgfVxufVxuXG5jbGFzcyBMZWN0dXJlTWFwcGluZyB7XG4gIGxpYmVsbGU6IGFueSA9IHt9XG4gIGNvZGVzOiBhbnkgPSBuZXcgU2V0KClcblxuICBzdGF0aWMgY29kZXNfbGVjdHVyZTogc3RyaW5nW10gPSBbXG4gICAgXCJBTjFcIixcbiAgICBcIlNOMVwiLFxuICAgIFwiQU5OTEVDXCIsXG4gICAgXCJTTk5MRUNcIixcbiAgICBcIkFOTERFRlwiLFxuICAgIFwiQU4yXCIsXG4gICAgXCJTTjJcIixcbiAgICBcIlNOM1wiLFxuICBdXG4gIHN0YXRpYyBjb2Rlc19sZWN0dXJlX3JlZ2V4cDogYW55ID0gbmV3IFJlZ0V4cChcbiAgICBcIl4oPzpcIiArIExlY3R1cmVNYXBwaW5nLmNvZGVzX2xlY3R1cmUuam9pbihcInxcIikgKyBcIikoLS4qKT8kXCIsXG4gIClcblxuICBzdGF0aWMgaXNMZWN0dXJlKGFjdGU6IGFueSkge1xuICAgIHJldHVybiBhY3RlLmNvZGVBY3RlLm1hdGNoKExlY3R1cmVNYXBwaW5nLmNvZGVzX2xlY3R1cmVfcmVnZXhwKVxuICB9XG5cbiAgc3RhdGljIGdldFR5cGUoYWN0ZTogYW55KSB7XG4gICAgaWYgKGFjdGUuY29kZUFjdGUubWF0Y2goL15BTi8pKSByZXR1cm4gXCJBTlwiXG4gICAgZWxzZSBpZiAoYWN0ZS5jb2RlQWN0ZS5tYXRjaCgvXlNOLykpIHJldHVybiBcIlNOXCJcbiAgICBlbHNlIHRocm93IEVycm9yKGAke2FjdGUuY29kZUFjdGV9IGRvZXMgbm90IHN0YXJ0IHdpdGggQU4gb3IgU05gKVxuICB9XG5cbiAgc3RhdGljIG1hcChjb2RlQWN0ZTogYW55KSB7XG4gICAgcmV0dXJuIGNvZGVBY3RlLnJlcGxhY2UoTGVjdHVyZU1hcHBpbmcuY29kZXNfbGVjdHVyZV9yZWdleHAsIGBsZWN0dXJlJDFgKVxuICB9XG5cbiAgc3RhdGljIGdldENvZGVBY3RlKGFjdGU6IGFueSkge1xuICAgIGlmICghTGVjdHVyZU1hcHBpbmcuaXNMZWN0dXJlKGFjdGUpKSByZXR1cm5cblxuICAgIHJldHVybiBMZWN0dXJlTWFwcGluZy5tYXAoYWN0ZS5jb2RlQWN0ZSlcbiAgfVxuXG4gIGFkZChhY3RlOiBhbnkpIHtcbiAgICB0aGlzLmNvZGVzLmFkZChhY3RlLmNvZGVBY3RlKVxuXG4gICAgY29uc3QgdHlwZSA9IExlY3R1cmVNYXBwaW5nLmdldFR5cGUoYWN0ZSlcblxuICAgIGlmICghKGFjdGUubGliZWxsZUFjdGUubm9tQ2Fub25pcXVlIGluIHRoaXMubGliZWxsZSkpXG4gICAgICB0aGlzLmxpYmVsbGVbYWN0ZS5saWJlbGxlQWN0ZS5ub21DYW5vbmlxdWVdID0gbmV3IFNldCgpXG4gICAgdGhpcy5saWJlbGxlW2FjdGUubGliZWxsZUFjdGUubm9tQ2Fub25pcXVlXS5hZGQodHlwZSlcbiAgfVxuXG4gIHJlbWFwKGFjdGU6IGFueSwgY29kZUFjdGU6IHN0cmluZykge1xuICAgIGFjdGUuY29kZUFjdGUgPSBjb2RlQWN0ZVxuXG4gICAgbGV0IHR5cGVzID0gdGhpcy5saWJlbGxlW2FjdGUubGliZWxsZUFjdGUubm9tQ2Fub25pcXVlXVxuICAgIGlmICghKHR5cGVzLmhhcyhcIlNOXCIpICYmIHR5cGVzLmhhcyhcIkFOXCIpKSkge1xuICAgICAgaWYgKHR5cGVzLmhhcyhcIlNOXCIpKSBhY3RlLmxpYmVsbGVBY3RlLm5vbUNhbm9uaXF1ZSArPSBcIiAoU8OpbmF0KVwiXG4gICAgICBlbHNlIGlmICh0eXBlcy5oYXMoXCJBTlwiKSlcbiAgICAgICAgYWN0ZS5saWJlbGxlQWN0ZS5ub21DYW5vbmlxdWUgKz0gXCIgKEFzc2VtYmzDqWUgTmF0aW9uYWxlKVwiXG4gICAgfVxuICB9XG5cbiAgbWVyZ2VDb2Rlcyhjb2RlczogYW55KSB7XG4gICAgZm9yIChjb25zdCBjIG9mIEFycmF5LmZyb20odGhpcy5jb2RlcykpIGNvZGVzLmFkZChjKVxuICB9XG5cbiAgcHJpbnRBbmNob3JzKCkge1xuICAgIGZvciAoY29uc3QgY29kZSBvZiBBcnJheS5mcm9tKHRoaXMuY29kZXMpKSBjb25zb2xlLmxvZyhgLi4gXyR7Y29kZX06YClcbiAgfVxuXG4gIGdldENvZGVzKCkge1xuICAgIHJldHVybiBBcnJheS5mcm9tKHRoaXMuY29kZXMpLmpvaW4oXCIsXCIpXG4gIH1cbn1cblxuY2xhc3MgTGVjdHVyZU1hcHBlciB7XG4gIG1hcHBpbmc6IGFueSA9IHt9XG5cbiAgaGFzKGNvZGVBY3RlOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gY29kZUFjdGUgaW4gdGhpcy5tYXBwaW5nXG4gIH1cblxuICBjb2xsZWN0KGFjdGU6IGFueSkge1xuICAgIGNvbnN0IGNvZGVBY3RlID0gTGVjdHVyZU1hcHBpbmcuZ2V0Q29kZUFjdGUoYWN0ZSlcbiAgICBpZiAoY29kZUFjdGUgIT0gdW5kZWZpbmVkKSB7XG4gICAgICBsZXQgbGVjdHVyZXMgPSB0aGlzLm1hcHBpbmdcbiAgICAgIGlmICghKGNvZGVBY3RlIGluIGxlY3R1cmVzKSkgbGVjdHVyZXNbY29kZUFjdGVdID0gbmV3IExlY3R1cmVNYXBwaW5nKClcbiAgICAgIGxlY3R1cmVzW2NvZGVBY3RlXS5hZGQoYWN0ZSlcbiAgICB9XG4gIH1cblxuICByZW1hcChhY3RlOiBhbnkpIHtcbiAgICBjb25zdCBjb2RlQWN0ZSA9IExlY3R1cmVNYXBwaW5nLmdldENvZGVBY3RlKGFjdGUpXG4gICAgaWYgKGNvZGVBY3RlICE9IHVuZGVmaW5lZCkgdGhpcy5tYXBwaW5nW2NvZGVBY3RlXS5yZW1hcChhY3RlLCBjb2RlQWN0ZSlcbiAgfVxuXG4gIG1lcmdlQ29kZXMoY29kZXM6IGFueSwgY29kZUFjdGU6IHN0cmluZykge1xuICAgIHRoaXMubWFwcGluZ1tjb2RlQWN0ZV0ubWVyZ2VDb2Rlcyhjb2RlcylcbiAgfVxuXG4gIHByaW50QW5jaG9ycyhjb2RlQWN0ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5tYXBwaW5nW2NvZGVBY3RlXS5wcmludEFuY2hvcnMoKVxuICB9XG5cbiAgZ2V0Q29kZXMoY29kZUFjdGU6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLm1hcHBpbmdbY29kZUFjdGVdLmdldENvZGVzKClcbiAgfVxufVxuXG5jbGFzcyBBY3Rlc0RvY3VtZW50YXRpb24ge1xuICB2ZXJib3NlOiBib29sZWFuXG4gIHNhbml0eUNoZWNrczogYm9vbGVhblxuICBsZWN0dXJlTWFwcGVyOiBhbnkgPSBuZXcgTGVjdHVyZU1hcHBlcigpXG4gIHJlbWFwcGVkUHJvY2VkdXJlczogYW55ID0ge31cbiAgYW5jaG9yc1ByaW50ZWQ6IGFueSA9IHt9XG4gIGFuY2hvcnM6IGFueSA9IG5ldyBTZXQoKVxuICBjb2RlczogYW55ID0ge31cbiAgcHJvY2VkdXJlczogYW55ID0gbnVsbFxuICBjb2RlMnBhdHRlcm46IGFueSA9IG5ldyBDb2RlMlBhdHRlcm4obnVsbCwge1xuICAgIFwiUHJvY8OpZHVyZSBsw6lnaXNsYXRpdmVcIjogbmV3IENvZGUyUGF0dGVybihcbiAgICAgIFwiXigoKC9sZWN0dXJlLykrKXwoKC9sZWN0dXJlLykrL0NNUC8oL2xlY3R1cmUvKSopKSgvQ0MvKT8oL1BST00vKT8oL0FOLUFQUExJLyk/JFwiLFxuICAgICAge1xuICAgICAgICBsZWN0dXJlOiBuZXcgQ29kZTJQYXR0ZXJuKFxuICAgICAgICAgIFwiXigvREVQT1QvKT8oL0RQVExFVFRSRUNULyk/KC9FVEkvKT8oL0FWQ0UvKT8oL0RHVlQvKT8oL0FDSU4vKT8oL01PVElPTi8pKigvUFJPQ0FDQy8pPygvQ09NLyk/KCgvREVCQVRTLykrKT8oL1JUUklOSS8pPyRcIixcbiAgICAgICAgICB7XG4gICAgICAgICAgICBcImxlY3R1cmUtQ09NXCI6IG5ldyBDb2RlMlBhdHRlcm4oXCJeKC9GT05EL3wvQVZJUy8pKyRcIiwge1xuICAgICAgICAgICAgICBcImxlY3R1cmUtQ09NLUZPTkRcIjogbmV3IENvZGUyUGF0dGVybkNvbUZvbmQoKSxcbiAgICAgICAgICAgICAgXCJsZWN0dXJlLUNPTS1BVklTXCI6IG5ldyBDb2RlMlBhdHRlcm5Db21Gb25kKCksXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIFwibGVjdHVyZS1ERUJBVFNcIjogbmV3IENvZGUyUGF0dGVybihcbiAgICAgICAgICAgICAgXCJeKC9TRUFOQ0UvKSooKC9NT1RJT04vKT8oL01PVElPTi1WT1RFLykrKT8oL0RFQy8pPyRcIixcbiAgICAgICAgICAgICAge30sXG4gICAgICAgICAgICApLFxuICAgICAgICAgIH0sXG4gICAgICAgICksXG4gICAgICAgIENNUDogbmV3IENvZGUyUGF0dGVybihcbiAgICAgICAgICBcIl4oL0RFUE9UL3wvU0FJU0lFLyl7MSwyfSgvQ09NLyk/KC9ERUMvKT8oL0RFQkFUUy1BTi8vREVCQVRTLVNOLyk/XCIsXG4gICAgICAgICAge1xuICAgICAgICAgICAgXCJDTVAtQ09NXCI6IG5ldyBDb2RlMlBhdHRlcm4oXG4gICAgICAgICAgICAgIFwiXigvTk9NSU4vKT8oL1JBUFBPUlQtQU4vfC9SQVBQT1JULVNOLyl7Mn0kXCIsXG4gICAgICAgICAgICAgIHt9LFxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIFwiQ01QLURFQkFUUy1BTlwiOiBuZXcgQ29kZTJQYXR0ZXJuKFwiXigvU0VBTkNFLykqKC9ERUMvKT8kXCIsIHt9KSxcbiAgICAgICAgICAgIFwiQ01QLURFQkFUUy1TTlwiOiBuZXcgQ29kZTJQYXR0ZXJuKFwiXigvU0VBTkNFLykqKC9ERUMvKT8kXCIsIHt9KSxcbiAgICAgICAgICB9LFxuICAgICAgICApLFxuICAgICAgICBDQzogbmV3IENvZGUyUGF0dGVybihcIl4oL1NBSVNJRS8pKygvQ09OQ0xVU0lPTi8pPyRcIiwge30pLFxuICAgICAgICBQUk9NOiBuZXcgQ29kZTJQYXR0ZXJuKFwiXigvUFVCLyk/JFwiLCB7fSksXG4gICAgICAgIFwiQU4tQVBQTElcIjogbmV3IENvZGUyUGF0dGVybihcIl4oL1JBUFBPUlQvKT8kXCIsIHt9KSxcbiAgICAgIH0sXG4gICAgKSxcbiAgICBcIkFsbG9jdXRpb24gZHUgUHLDqXNpZGVudCBkZSBsJ0Fzc2VtYmzDqWUgbmF0aW9uYWxlXCI6IG5ldyBDb2RlMlBhdHRlcm4oXG4gICAgICBcIl4vQU4yMS8kXCIsXG4gICAgICB7XG4gICAgICAgIEFOMjE6IG5ldyBDb2RlMlBhdHRlcm4oXCJeKC9BUEFOLyk/JFwiLCB7fSksXG4gICAgICB9LFxuICAgICksXG4gICAgXCJSw6lzb2x1dGlvbiBBcnRpY2xlIDM0LTFcIjogbmV3IENvZGUyUGF0dGVybihcIl4oL0FOTFVOSS8pPyRcIiwge1xuICAgICAgQU5MVU5JOiBuZXcgQ29kZTJQYXR0ZXJuKFwiXigvREVQT1QvKT8oL0RFQkFUUy8pPygvUlRSSU5JLyk/JFwiLCB7XG4gICAgICAgIFwiQU5MVU5JLURFQkFUU1wiOiBuZXcgQ29kZTJQYXR0ZXJuKFwiXigvU0VBTkNFLykrKC9ERUMvKT8kXCIsIHt9KSxcbiAgICAgIH0pLFxuICAgIH0pLFxuICAgIFLDqXNvbHV0aW9uOiBuZXcgQ29kZTJQYXR0ZXJuKFwiXigvQU5MVU5JLyk/KC9DQy8pPyRcIiwge1xuICAgICAgQU5MVU5JOiBuZXcgQ29kZTJQYXR0ZXJuKFwiXigvREVQT1QvKT8oL0NPTS8pPygvREVCQVRTL3wvUlRSSU5JLyk/JFwiLCB7XG4gICAgICAgIFwiQU5MVU5JLUNPTVwiOiBuZXcgQ29kZTJQYXR0ZXJuKFwiXigvQ0FFLyk/KC9GT05ELyk/JFwiLCB7XG4gICAgICAgICAgXCJBTkxVTkktQ09NLUZPTkRcIjogbmV3IENvZGUyUGF0dGVybkNvbUZvbmQoKSxcbiAgICAgICAgICBcIkFOTFVOSS1DT00tQ0FFXCI6IG5ldyBDb2RlMlBhdHRlcm4oXG4gICAgICAgICAgICBcIl4oL1NBSVNJRS8pPygvTk9NSU4vKT8oL1JFVU5JT04vKT8oL1JBUFBPUlQvKT8oL0RFQy8pPyRcIixcbiAgICAgICAgICAgIHt9LFxuICAgICAgICAgICksXG4gICAgICAgIH0pLFxuICAgICAgICBcIkFOTFVOSS1ERUJBVFNcIjogbmV3IENvZGUyUGF0dGVybihcIl4oL1NFQU5DRS8pKigvREVDLyk/JFwiLCB7fSksXG4gICAgICB9KSxcbiAgICAgIENDOiBuZXcgQ29kZTJQYXR0ZXJuKFwiXigvU0FJU0lFLyk/KC9DT05DTFVTSU9OLyk/JFwiLCB7fSksXG4gICAgfSksXG4gICAgXCJSYXBwb3J0IGQnaW5mb3JtYXRpb24gc2FucyBtaXNzaW9uXCI6IG5ldyBDb2RlMlBhdHRlcm4oXG4gICAgICBcIl4oL0FOMjAvKT8oL0VVLyk/JFwiLFxuICAgICAge1xuICAgICAgICBBTjIwOiBuZXcgQ29kZTJQYXR0ZXJuKFwiXigvUkFQUE9SVC8pPyRcIiwge30pLFxuICAgICAgICBFVTogbmV3IENvZGUyUGF0dGVybihcIl4oL0RFQy8pKyRcIiwge30pLFxuICAgICAgfSxcbiAgICApLFxuICAgIFwiTWlzc2lvbiBkJ2luZm9ybWF0aW9uXCI6IG5ldyBDb2RlMlBhdHRlcm4oXCJeKC9BTjIwLyk/JFwiLCB7XG4gICAgICBBTjIwOiBuZXcgQ29kZTJQYXR0ZXJuKFwiXigvTUlTSU5GLyk/JFwiLCB7XG4gICAgICAgIFwiQU4yMC1NSVNJTkZcIjogbmV3IENvZGUyUGF0dGVybihcbiAgICAgICAgICBcIl4oL0NSRUEvKT8oL05PTUlOLyk/KC9SQVBQT1JULyk/JFwiLFxuICAgICAgICAgIHt9LFxuICAgICAgICApLFxuICAgICAgfSksXG4gICAgfSksXG4gICAgXCJDb21taXNzaW9uIGQnZW5xdcOqdGVcIjogbmV3IENvZGUyUGF0dGVybihcIl4oL0FOMjAvKT8kXCIsIHtcbiAgICAgIEFOMjA6IG5ldyBDb2RlMlBhdHRlcm4oXCJeKC9DT01FTlEvKT8kXCIsIHtcbiAgICAgICAgXCJBTjIwLUNPTUVOUVwiOiBuZXcgQ29kZTJQYXR0ZXJuKFxuICAgICAgICAgIFwiXigvQ1JFQS8pPygvTk9NSU4vKT8oL1JBUFBPUlQvKT8kXCIsXG4gICAgICAgICAge30sXG4gICAgICAgICksXG4gICAgICB9KSxcbiAgICB9KSxcbiAgICBcIkVuZ2FnZW1lbnQgZGUgbGEgcmVzcG9uc2FiaWxpdMOpIGdvdXZlcm5lbWVudGFsZVwiOiBuZXcgQ29kZTJQYXR0ZXJuKFxuICAgICAgXCJeL0FOMjEvJFwiLFxuICAgICAge1xuICAgICAgICBBTjIxOiBuZXcgQ29kZTJQYXR0ZXJuKFwiXigoKC9NT1RJT04vKSovREVCQVRTLyl8KC9ER1ZULykpezEsMn0kXCIsIHtcbiAgICAgICAgICBcIkFOMjEtREVCQVRTXCI6IG5ldyBDb2RlMlBhdHRlcm4oXCJeKC9TRUFOQ0UvKSooL01PVElPTi1WT1RFLykqJFwiLCB7fSksXG4gICAgICAgIH0pLFxuICAgICAgfSxcbiAgICApLFxuICAgIFwiTW90aW9uIHLDqWbDqXJlbmRhaXJlXCI6IG5ldyBDb2RlMlBhdHRlcm4oXCJeKC9sZWN0dXJlLykrJFwiLCB7XG4gICAgICBsZWN0dXJlOiBuZXcgQ29kZTJQYXR0ZXJuKFwiXigvREVQT1QvKT8oL0NPTS8pPygvREVCQVRTLyk/JFwiLCB7XG4gICAgICAgIFwibGVjdHVyZS1DT01cIjogbmV3IENvZGUyUGF0dGVybihcIl4oL0ZPTkQvKT8kXCIsIHtcbiAgICAgICAgICBcImxlY3R1cmUtQ09NLUZPTkRcIjogbmV3IENvZGUyUGF0dGVybihcbiAgICAgICAgICAgIFwiXigvU0FJU0lFLyk/KC9OT01JTi8pKigvUkFQUE9SVC8pKiRcIixcbiAgICAgICAgICAgIHt9LFxuICAgICAgICAgICksXG4gICAgICAgIH0pLFxuICAgICAgICBcImxlY3R1cmUtREVCQVRTXCI6IG5ldyBDb2RlMlBhdHRlcm4oXCJeKC9ERUMvKT8kXCIsIHt9KSxcbiAgICAgIH0pLFxuICAgIH0pLFxuICAgIEltbXVuaXTDqTogbmV3IENvZGUyUGF0dGVybihcIl4oL0FOTFVOSS8pKyRcIiwge1xuICAgICAgQU5MVU5JOiBuZXcgQ29kZTJQYXR0ZXJuKFwiXigvREVQT1QvKT8oL0NPTS8pPygvREVCQVRTLyk/KC9SVFJJTkkvKT8kXCIsIHtcbiAgICAgICAgXCJBTkxVTkktQ09NXCI6IG5ldyBDb2RlMlBhdHRlcm4oXCJeKC9GT05ELyk/JFwiLCB7XG4gICAgICAgICAgXCJBTkxVTkktQ09NLUZPTkRcIjogbmV3IENvZGUyUGF0dGVybihcbiAgICAgICAgICAgIFwiXigvU0FJU0lFLyk/KC9OT01JTi8pKigvUkFQUE9SVC8pKiRcIixcbiAgICAgICAgICAgIHt9LFxuICAgICAgICAgICksXG4gICAgICAgIH0pLFxuICAgICAgICBcIkFOTFVOSS1ERUJBVFNcIjogbmV3IENvZGUyUGF0dGVybihcIl4oL1NFQU5DRS8pPygvREVDLykkXCIsIHt9KSxcbiAgICAgIH0pLFxuICAgIH0pLFxuICAgIFwiUmVzcG9uc2FiaWxpdMOpIHDDqW5hbGUgZHUgcHLDqXNpZGVudCBkZSBsYSByw6lwdWJsaXF1ZVwiOiBuZXcgQ29kZTJQYXR0ZXJuKFxuICAgICAgXCJeL2xlY3R1cmUvJFwiLFxuICAgICAge1xuICAgICAgICBsZWN0dXJlOiBuZXcgQ29kZTJQYXR0ZXJuKFwiXigvREVQT1QvKT8oL1JFQ0JVUkVBVS8pPyRcIiwge30pLFxuICAgICAgfSxcbiAgICApLFxuICAgIFwiUHJvcG9zaXRpb24gZGUgbG9pIHByw6lzZW50w6llIGVuIGFwcGxpY2F0aW9uIGRlIGwnYXJ0aWNsZSAxMSBkZSBsYSBDb25zdGl0dXRpb25cIjpcbiAgICAgIG5ldyBDb2RlMlBhdHRlcm4oXCJeL2xlY3R1cmUvJFwiLCB7XG4gICAgICAgIGxlY3R1cmU6IG5ldyBDb2RlMlBhdHRlcm4oXCJeKC9ERVBPVC8pPyRcIiwge30pLFxuICAgICAgfSksXG4gIH0pXG5cbiAgY29uc3RydWN0b3Ioc2FuaXR5Q2hlY2tzOiBib29sZWFuLCB2ZXJib3NlOiBib29sZWFuID0gZmFsc2UpIHtcbiAgICB0aGlzLnZlcmJvc2UgPSB2ZXJib3NlXG4gICAgdGhpcy5zYW5pdHlDaGVja3MgPSBzYW5pdHlDaGVja3NcbiAgICB0aGlzLnByb2NlZHVyZXMgPSB7fVxuICAgIHRoaXMuY29kZTJwYXR0ZXJuLl9tYXRjaF9jb3VudF8rK1xuICB9XG5cbiAgd2Fsa0ZpbGVzKGRhdGE6IHN0cmluZ1tdLCBhY3Rpb246IGFueSkge1xuICAgIGZvciAoY29uc3QgZmlsZSBvZiBnZXRGaWxlcyhkYXRhKSkge1xuICAgICAgY29uc3QgZG9zc2llciA9IGxvYWQoZmlsZSlcbiAgICAgIGxldCBwcm9jZWR1cmU6IHN0cmluZyA9IHRoaXMucmVtYXBQcm9jZWR1cmUoXG4gICAgICAgIGRvc3NpZXIucHJvY2VkdXJlUGFybGVtZW50YWlyZS5saWJlbGxlLFxuICAgICAgKVxuICAgICAgaWYgKCEocHJvY2VkdXJlIGluIHRoaXMucHJvY2VkdXJlcykpIHRoaXMucHJvY2VkdXJlc1twcm9jZWR1cmVdID0ge31cbiAgICAgIGFjdGlvbihcbiAgICAgICAgdGhpcy5wcm9jZWR1cmVzW3Byb2NlZHVyZV0sXG4gICAgICAgIGRvc3NpZXIuYWN0ZXNMZWdpc2xhdGlmcyxcbiAgICAgICAgdGhpcy5jb2RlMnBhdHRlcm5bcHJvY2VkdXJlXSxcbiAgICAgICAgbnVsbCxcbiAgICAgIClcbiAgICB9XG4gIH1cblxuICBjb2xsZWN0RmlsZXMoZGF0YTogc3RyaW5nW10pIHtcbiAgICB0aGlzLndhbGtGaWxlcyhcbiAgICAgIGRhdGEsXG4gICAgICAoX2FjdGVzOiBhbnksIGFjdGVzTGVnaXNsYXRpZnM6IGFueSwgX2MycDogYW55LCBfcGFyZW50OiBzdHJpbmcpID0+IHtcbiAgICAgICAgdGhpcy5jb2xsZWN0KGFjdGVzTGVnaXNsYXRpZnMpXG4gICAgICB9LFxuICAgIClcbiAgfVxuXG4gIHByb2Nlc3NGaWxlcyhkYXRhOiBzdHJpbmdbXSkge1xuICAgIHRoaXMud2Fsa0ZpbGVzKFxuICAgICAgZGF0YSxcbiAgICAgIChhY3RlczogYW55LCBhY3Rlc0xlZ2lzbGF0aWZzOiBhbnksIGMycDogYW55LCBwYXJlbnQ6IHN0cmluZykgPT4ge1xuICAgICAgICB0aGlzLm1lcmdlKGFjdGVzLCBhY3Rlc0xlZ2lzbGF0aWZzLCBjMnAsIHBhcmVudClcbiAgICAgIH0sXG4gICAgKVxuICAgIGlmICh0aGlzLnNhbml0eUNoZWNrcykgdGhpcy52YWxpZGF0ZSgpXG4gIH1cblxuICByZW1hcEFjdGVzKGFjdGVzOiBhbnkpOiBhbnkge1xuICAgIGxldCByZXN1bHRzID0gW11cbiAgICBmb3IgKGNvbnN0IGFjdGUgb2YgYWN0ZXMpIHtcbiAgICAgIHRoaXMubGVjdHVyZU1hcHBlci5yZW1hcChhY3RlKVxuXG4gICAgICAvLyBDQy1TQUlTSUUtIHN1ZmZpeCBkb2VzIG5vdCBpbXBseSBhIGhpZXJhcmNoeVxuICAgICAgYWN0ZS5jb2RlQWN0ZSA9IGFjdGUuY29kZUFjdGUucmVwbGFjZSgvXkNDLVNBSVNJRS4qLywgXCJDQy1TQUlTSUVcIilcblxuICAgICAgcmVzdWx0cy5wdXNoKGFjdGUpXG4gICAgfVxuICAgIHJldHVybiByZXN1bHRzXG4gIH1cblxuICBjb2xsZWN0QWN0ZXMoYWN0ZXM6IGFueSk6IGFueSB7XG4gICAgbGV0IHJlc3VsdHMgPSBbXVxuICAgIGZvciAoY29uc3QgYWN0ZSBvZiBhY3Rlcykge1xuICAgICAgdGhpcy5sZWN0dXJlTWFwcGVyLmNvbGxlY3QoYWN0ZSlcblxuICAgICAgcmVzdWx0cy5wdXNoKGFjdGUpXG4gICAgfVxuICAgIHJldHVybiByZXN1bHRzXG4gIH1cblxuICByZW1hcFByb2NlZHVyZShwcm9jZWR1cmU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgbWVyZ2VfcHJvY2VkdXJlczogTWFwPHN0cmluZywgYW55PiA9IG5ldyBNYXAoW1xuICAgICAgW1wiUHJvcG9zaXRpb24gZGUgbG9pIG9yZGluYWlyZVwiLCBcIlByb2PDqWR1cmUgbMOpZ2lzbGF0aXZlXCJdLFxuICAgICAgW1wiUHJvamV0IGRlIGxvaSBvcmRpbmFpcmVcIiwgXCJQcm9jw6lkdXJlIGzDqWdpc2xhdGl2ZVwiXSxcbiAgICAgIFtcbiAgICAgICAgXCJQcm9qZXQgZGUgcmF0aWZpY2F0aW9uIGRlcyB0cmFpdMOpcyBldCBjb252ZW50aW9uc1wiLFxuICAgICAgICBcIlByb2PDqWR1cmUgbMOpZ2lzbGF0aXZlXCIsXG4gICAgICBdLFxuICAgICAgW1wiUHJvamV0IG91IHByb3Bvc2l0aW9uIGRlIGxvaSBvcmdhbmlxdWVcIiwgXCJQcm9jw6lkdXJlIGzDqWdpc2xhdGl2ZVwiXSxcbiAgICAgIFtcbiAgICAgICAgXCJQcm9qZXQgb3UgcHJvcG9zaXRpb24gZGUgbG9pIGNvbnN0aXR1dGlvbm5lbGxlXCIsXG4gICAgICAgIFwiUHJvY8OpZHVyZSBsw6lnaXNsYXRpdmVcIixcbiAgICAgIF0sXG4gICAgICBbXCJQcm9qZXQgZGUgbG9pIGRlIGZpbmFuY2VzIGRlIGwnYW5uw6llXCIsIFwiUHJvY8OpZHVyZSBsw6lnaXNsYXRpdmVcIl0sXG4gICAgICBbXCJQcm9qZXQgZGUgbG9pIGRlIGZpbmFuY2VzIHJlY3RpZmljYXRpdmVcIiwgXCJQcm9jw6lkdXJlIGzDqWdpc2xhdGl2ZVwiXSxcbiAgICAgIFtcbiAgICAgICAgXCJQcm9qZXQgZGUgbG9pIGRlIGZpbmFuY2VtZW50IGRlIGxhIHPDqWN1cml0w6kgc29jaWFsZVwiLFxuICAgICAgICBcIlByb2PDqWR1cmUgbMOpZ2lzbGF0aXZlXCIsXG4gICAgICBdLFxuICAgIF0pXG4gICAgaWYgKG1lcmdlX3Byb2NlZHVyZXMuaGFzKHByb2NlZHVyZSkpIHtcbiAgICAgIHRoaXMucmVtYXBwZWRQcm9jZWR1cmVzW3Byb2NlZHVyZV0gPSBudWxsXG4gICAgICByZXR1cm4gbWVyZ2VfcHJvY2VkdXJlcy5nZXQocHJvY2VkdXJlKVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gcHJvY2VkdXJlXG4gICAgfVxuICB9XG5cbiAgLy8gcmV0dXJuIHRoZSBjb2RlQWN0ZXMgaW4gdGhlIHNhbWUgb3JkZXIgdGhleSBhcHBlYXIgaW4gdGhlIHJlZ2V4cFxuICBvcmRlcmVkQ29kZXMoY29kZXM6IGFueSwgYzJwOiBhbnksIHBhcmVudDogc3RyaW5nKTogU2V0PHN0cmluZz4ge1xuICAgIGNvZGVzID0gbmV3IFNldChjb2RlcylcbiAgICBpZiAoIXRoaXMuc2FuaXR5Q2hlY2tzKSByZXR1cm4gY29kZXNcbiAgICBsZXQgb3JkZXJlZCA9IGMycFtcIl9wYXR0ZXJuX1wiXS5tYXRjaChuZXcgUmVnRXhwKFwiLy4qPy9cIiwgXCJnXCIpKVxuICAgIG9yZGVyZWQgPSBvcmRlcmVkLm1hcCgoeDogc3RyaW5nKSA9PiB4LnJlcGxhY2UobmV3IFJlZ0V4cChcIi8oLiopL1wiKSwgXCIkMVwiKSlcbiAgICBpZiAocGFyZW50ICE9IG51bGwpIG9yZGVyZWQgPSBvcmRlcmVkLm1hcCgoeDogc3RyaW5nKSA9PiBgJHtwYXJlbnR9LSR7eH1gKVxuICAgIG9yZGVyZWQgPSBuZXcgU2V0KG9yZGVyZWQpXG4gICAgYXNzZXJ0KGVxU2V0KG9yZGVyZWQsIGNvZGVzKSwgYCR7Wy4uLm9yZGVyZWRdfSAhPSAke1suLi5jb2Rlc119YClcbiAgICByZXR1cm4gb3JkZXJlZFxuICB9XG5cbiAgdmFsaWRhdGVDaHJvbm9sb2d5KGFjdGVzTGVnaXNsYXRpZnM6IGFueSwgYzJwOiBhbnksIHBhcmVudDogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgcGF0dGVybiA9IGMycFtcIl9wYXR0ZXJuX1wiXVxuICAgIGNvbnN0IHNlcXVlbmNlID0gYWN0ZXNMZWdpc2xhdGlmc1xuICAgICAgLm1hcCgoeDogYW55KSA9PiBgLyR7eC5jb2RlQWN0ZX0vYC5yZXBsYWNlKGAvJHtwYXJlbnR9LWAsIFwiL1wiKSlcbiAgICAgIC5qb2luKFwiXCIpXG4gICAgYXNzZXJ0KFxuICAgICAgc2VxdWVuY2UubWF0Y2gobmV3IFJlZ0V4cChwYXR0ZXJuKSksXG4gICAgICBgJHtwYXR0ZXJufSBkb2VzIG5vdCBtYXRjaCAke3NlcXVlbmNlfWAsXG4gICAgKVxuICAgIGMycC5fbWF0Y2hfY291bnRfKytcbiAgfVxuXG4gIG1lcmdlQWN0ZShhY3RlczogYW55LCBhY3RlOiBhbnksIGMycDogYW55LCBwYXJlbnQ6IHN0cmluZyk6IHZvaWQge1xuICAgIGxldCBjb2RlOiBzdHJpbmcgPSBhY3RlLmNvZGVBY3RlXG4gICAgbGV0IHNob3J0Q29kZTogc3RyaW5nID0gY29kZS5yZXBsYWNlKG5ldyBSZWdFeHAoYF4ke3BhcmVudH0tYCksIFwiXCIpXG4gICAgc2hvcnRDb2RlID0gc2hvcnRDb2RlLnJlcGxhY2UoLy0oQU58U04pJC8sIFwiXCIpXG4gICAgdGhpcy5jb2Rlc1tzaG9ydENvZGVdID0gbnVsbFxuICAgIGxldCBuYW1lOiBzdHJpbmcgPSBhY3RlLmxpYmVsbGVBY3RlLm5vbUNhbm9uaXF1ZVxuICAgIGlmICghKGNvZGUgaW4gYWN0ZXMpKSB7XG4gICAgICBhY3Rlc1tjb2RlXSA9IHtcbiAgICAgICAgdHlwZTogYWN0ZS54c2lUeXBlLFxuICAgICAgICBuYW1lOiBuZXcgU2V0KFtuYW1lXSksXG4gICAgICAgIHNob3J0Q29kZTogc2hvcnRDb2RlLFxuICAgICAgICBhY3Rlczoge30sXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGFjdGVzW2NvZGVdLm5hbWUuYWRkKG5hbWUpXG4gICAgfVxuICAgIGlmIChcImFjdGVzTGVnaXNsYXRpZnNcIiBpbiBhY3RlKVxuICAgICAgdGhpcy5tZXJnZShhY3Rlc1tjb2RlXS5hY3RlcywgYWN0ZS5hY3Rlc0xlZ2lzbGF0aWZzLCBjMnBbY29kZV0sIGNvZGUpXG4gIH1cblxuICBtZXJnZShhY3RlczogYW55LCBhY3Rlc0xlZ2lzbGF0aWZzOiBhbnksIGMycDogYW55LCBwYXJlbnQ6IGFueSk6IHZvaWQge1xuICAgIGNvbnN0IGwgPSB0aGlzLnJlbWFwQWN0ZXMoYWN0ZXNMZWdpc2xhdGlmcylcbiAgICB0aGlzLnZhbGlkYXRlQ2hyb25vbG9neShsLCBjMnAsIHBhcmVudClcbiAgICBmb3IgKGNvbnN0IGFjdGUgb2YgbCkgdGhpcy5tZXJnZUFjdGUoYWN0ZXMsIGFjdGUsIGMycCwgcGFyZW50KVxuICB9XG5cbiAgY29sbGVjdChhY3Rlc0xlZ2lzbGF0aWZzOiBhbnkpOiB2b2lkIHtcbiAgICBmb3IgKGNvbnN0IGFjdGUgb2YgdGhpcy5jb2xsZWN0QWN0ZXMoYWN0ZXNMZWdpc2xhdGlmcykpXG4gICAgICBpZiAoXCJhY3Rlc0xlZ2lzbGF0aWZzXCIgaW4gYWN0ZSkgdGhpcy5jb2xsZWN0KGFjdGUuYWN0ZXNMZWdpc2xhdGlmcylcbiAgfVxuXG4gIHZhbGlkYXRlTGV2ZWwoYzJwOiBhbnksIHBhdGg6IGFueSkge1xuICAgIGFzc2VydChjMnAuX21hdGNoX2NvdW50XyA+IDAsIGAke3BhdGh9IGlzIG5ldmVyIHVzZWRgKVxuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGMycCkgYXMgW3N0cmluZywgYW55XVtdKSB7XG4gICAgICBpZiAodmFsdWUgIT0gbnVsbCAmJiB2YWx1ZS5jb25zdHJ1Y3Rvci5uYW1lID09IFwiQ29kZTJQYXR0ZXJuXCIpXG4gICAgICAgIHRoaXMudmFsaWRhdGVMZXZlbCh2YWx1ZSwgcGF0aC5jb25jYXQoW2tleV0pKVxuICAgIH1cbiAgfVxuXG4gIHZhbGlkYXRlKCkge1xuICAgIHRoaXMudmFsaWRhdGVMZXZlbCh0aGlzLmNvZGUycGF0dGVybiwgW10pXG4gIH1cblxuICBwcmludEVudHJ5KHNlY3Rpb25zOiBzdHJpbmcsIGVudHJ5OiBzdHJpbmcsIGNvZGVzOiBzdHJpbmcpIHtcbiAgICBjb25zdCB0aXRsZSA9IGBcXGAke2VudHJ5fVxcYF9fYFxuICAgIGNvbnNvbGUubG9nKHRpdGxlKVxuICAgIGNvbnN0IHVuZGVybGluZSA9IG5ldyBBcnJheSh0aXRsZS5sZW5ndGggKyAxKS5qb2luKHNlY3Rpb25zWzBdKVxuICAgIGNvbnNvbGUubG9nKHVuZGVybGluZSlcbiAgICBjb25zb2xlLmxvZyhjb2RlcylcbiAgfVxuXG4gIGFkZEFuY2hvcnMoa2V5OiBzdHJpbmcpIHtcbiAgICBpZiAoa2V5IGluIHRoaXMuYW5jaG9yc1ByaW50ZWQpIHJldHVyblxuICAgIGlmICh0aGlzLmxlY3R1cmVNYXBwZXIuaGFzKGtleSkpXG4gICAgICB0aGlzLmxlY3R1cmVNYXBwZXIubWVyZ2VDb2Rlcyh0aGlzLmFuY2hvcnMsIGtleSlcbiAgICBlbHNlIHRoaXMuYW5jaG9ycy5hZGQoa2V5KVxuICB9XG5cbiAgcHJpbnRBbmNob3JzKGtleTogc3RyaW5nKSB7XG4gICAgaWYgKGtleSBpbiB0aGlzLmFuY2hvcnNQcmludGVkKSByZXR1cm5cbiAgICB0aGlzLmFuY2hvcnNQcmludGVkW2tleV0gPSBudWxsXG4gICAgaWYgKHRoaXMubGVjdHVyZU1hcHBlci5oYXMoa2V5KSkgdGhpcy5sZWN0dXJlTWFwcGVyLnByaW50QW5jaG9ycyhrZXkpXG4gICAgZWxzZSBjb25zb2xlLmxvZyhgLi4gXyR7a2V5fTpgKVxuICB9XG5cbiAgZ2V0Q29kZXMoa2V5OiBzdHJpbmcsIHNob3J0Q29kZTogc3RyaW5nKSB7XG4gICAgaWYgKGtleSBpbiB0aGlzLmFuY2hvcnNQcmludGVkKSByZXR1cm4gYGNmIFxcXFwqJHtzaG9ydENvZGV9XFxcXCpgXG4gICAgaWYgKHRoaXMubGVjdHVyZU1hcHBlci5oYXMoa2V5KSkgcmV0dXJuIHRoaXMubGVjdHVyZU1hcHBlci5nZXRDb2RlcyhrZXkpXG4gICAgZWxzZSByZXR1cm4ga2V5XG4gIH1cblxuICByZW5hbWVDTVAoa2V5OiBzdHJpbmcsIG5hbWU6IHN0cmluZykge1xuICAgIGlmIChrZXkuc3RhcnRzV2l0aChcIkNNUFwiKSkge1xuICAgICAgaWYgKGtleS5lbmRzV2l0aChcIi1TTlwiKSkgcmV0dXJuIGAke25hbWV9IChTw6luYXQpYFxuICAgICAgZWxzZSBpZiAoa2V5LmVuZHNXaXRoKFwiLUFOXCIpKSByZXR1cm4gYCR7bmFtZX0gKEFzc2VtYmzDqWUgTmF0aW9uYWxlKWBcbiAgICAgIGVsc2UgcmV0dXJuIG5hbWVcbiAgICB9IGVsc2UgcmV0dXJuIG5hbWVcbiAgfVxuXG4gIHByaW50TGV2ZWwoYWN0ZXM6IGFueSwgc2VjdGlvbnM6IHN0cmluZywgYzJwOiBhbnksIHBhcmVudDogYW55KSB7XG4gICAgY29uc3Qga2V5czogU2V0PHN0cmluZz4gPSB0aGlzLm9yZGVyZWRDb2RlcyhPYmplY3Qua2V5cyhhY3RlcyksIGMycCwgcGFyZW50KVxuICAgIGZvciAoY29uc3Qga2V5IG9mIGtleXMpIHtcbiAgICAgIGNvbnN0IHZhbHVlID0gYWN0ZXNba2V5XVxuICAgICAgbGV0IG5hbWUgPSBBcnJheS5mcm9tKHZhbHVlLm5hbWUpLmpvaW4oXCIsIFwiKVxuICAgICAgbmFtZSA9IHRoaXMucmVuYW1lQ01QKGtleSwgbmFtZSlcbiAgICAgIGNvbnN0IGNvZGVzID0gdGhpcy5nZXRDb2RlcyhrZXksIHZhbHVlLnNob3J0Q29kZSlcbiAgICAgIHRoaXMuYWRkQW5jaG9ycyhrZXkpXG4gICAgICB0aGlzLnByaW50QW5jaG9ycyhrZXkpXG4gICAgICBjb25zb2xlLmxvZyhcIlwiKVxuICAgICAgdGhpcy5wcmludEVudHJ5KHNlY3Rpb25zLCBgJHtuYW1lfSA8JHt2YWx1ZS5zaG9ydENvZGV9VE9DXz5gLCBjb2RlcylcbiAgICAgIGNvbnNvbGUubG9nKFwiXCIpXG4gICAgICBpZiAoT2JqZWN0LmtleXModmFsdWUuYWN0ZXMpLmxlbmd0aCA+IDApXG4gICAgICAgIHRoaXMucHJpbnRMZXZlbCh2YWx1ZS5hY3Rlcywgc2VjdGlvbnMuc3Vic3RyaW5nKDEpLCBjMnBba2V5XSwga2V5KVxuICAgIH1cbiAgfVxuXG4gIHByaW50Q29kZXMoKSB7XG4gICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXModGhpcy5jb2RlcykpXG4gICAgICBjb25zb2xlLmxvZyhgLi4gXyR7a2V5fVRPQzogaHR0cDovL2ApXG4gIH1cblxuICBwcmludEFuY2hvcnNJbmRleCgpIHtcbiAgICBmb3IgKGNvbnN0IGNvZGUgb2YgQXJyYXkuZnJvbSh0aGlzLmFuY2hvcnMpKVxuICAgICAgY29uc29sZS5sb2coYCogOnJlZjpcXGAke2NvZGV9IDwke2NvZGV9PlxcYGApXG4gIH1cblxuICBnZXRBZ2dyZWdhdGVkKHByb2NlZHVyZTogc3RyaW5nKSB7XG4gICAgaWYgKHByb2NlZHVyZSA9PSBcIlByb2PDqWR1cmUgbMOpZ2lzbGF0aXZlXCIpIHtcbiAgICAgIGNvbnN0IHJlbWFwcGVkID0gT2JqZWN0LmtleXModGhpcy5yZW1hcHBlZFByb2NlZHVyZXMpLmpvaW4oXCIsIFwiKVxuICAgICAgcmV0dXJuIGAgKGFncsOpZ2F0aW9uIGRlICR7cmVtYXBwZWR9KWBcbiAgICB9IGVsc2UgcmV0dXJuIFwiXCJcbiAgfVxuXG4gIHByaW50KCk6IHZvaWQge1xuICAgIHRoaXMuYW5jaG9yc1ByaW50ZWQgPSB7fVxuICAgIGZvciAoY29uc3QgW2tleSwgYWN0ZXNdIG9mIE9iamVjdC5lbnRyaWVzKHRoaXMucHJvY2VkdXJlcykgYXMgW1xuICAgICAgc3RyaW5nLFxuICAgICAgYW55LFxuICAgIF1bXSkge1xuICAgICAgY29uc3QgY29kZSA9IGtleS5yZXBsYWNlKC8gKy9nLCBcIl9cIilcbiAgICAgIHRoaXMuY29kZXNbY29kZV0gPSBudWxsXG4gICAgICBjb25zdCBhZ2dyZWdhdGVkID0gdGhpcy5nZXRBZ2dyZWdhdGVkKGtleSlcbiAgICAgIGNvbnN0IHRpdGxlID0gYFxcYCR7a2V5fSA8JHtjb2RlfVRPQ18+XFxgX18ke2FnZ3JlZ2F0ZWR9YFxuICAgICAgY29uc29sZS5sb2codGl0bGUpXG4gICAgICBjb25zdCB1bmRlcmxpbmUgPSBuZXcgQXJyYXkodGl0bGUubGVuZ3RoICsgMSkuam9pbihcIj1cIilcbiAgICAgIGNvbnNvbGUubG9nKHVuZGVybGluZSlcbiAgICAgIHRoaXMucHJpbnRMZXZlbChhY3RlcywgXCItfi4nXCIsIHRoaXMuY29kZTJwYXR0ZXJuW2tleV0sIG51bGwpXG4gICAgfVxuICAgIHRoaXMucHJpbnRDb2RlcygpXG4gICAgdGhpcy5wcmludEFuY2hvcnNJbmRleCgpXG4gIH1cbn1cblxuZnVuY3Rpb24gbWFpbihhcmd2OiBhbnkpOiBudW1iZXIge1xuICBjb25zdCBvcHRpb25zID0gcGFyc2VBcmdzKGFyZ3YpXG4gIGlmIChvcHRpb25zID09PSBudWxsKSByZXR1cm4gMVxuICBsZXQgZG9jID0gbmV3IEFjdGVzRG9jdW1lbnRhdGlvbihcbiAgICAhb3B0aW9uc1tcIm5vLXNhbml0eS1jaGVja3NcIl0sXG4gICAgb3B0aW9ucy52ZXJib3NlLFxuICApXG4gIGRvYy5jb2xsZWN0RmlsZXMob3B0aW9ucy5kYXRhKVxuICBkb2MucHJvY2Vzc0ZpbGVzKG9wdGlvbnMuZGF0YSlcbiAgZG9jLnByaW50KClcbiAgcmV0dXJuIDBcbn1cblxuLyogaXN0YW5idWwgaWdub3JlIGlmICovXG5pZiAocHJvY2Vzcy5hcmd2WzFdLmVuZHNXaXRoKFwiZG9jdW1lbnRfZG9zc2llcnNfbGVnaXNsYXRpZnMudHNcIikpXG4gIHByb2Nlc3MuZXhpdChtYWluKHByb2Nlc3MuYXJndikpXG4iXSwibWFwcGluZ3MiOiI7O0FBQUEsT0FBT0EsZUFBUCxNQUE0QixtQkFBNUI7QUFDQSxPQUFPQyxnQkFBUCxNQUE2QixvQkFBN0I7QUFDQSxPQUFPQyxNQUFQLE1BQW1CLFFBQW5CO1NBQ1NDLEksRUFBTUMsUTs7QUFFZixTQUFTQyxTQUFULENBQW1CQyxJQUFuQixFQUF3QztFQUN0QyxNQUFNQyxrQkFBa0IsR0FBRyxDQUN6QjtJQUNFQyxXQUFXLEVBQUUseURBRGY7SUFFRUMsYUFBYSxFQUFFLElBRmpCO0lBR0VDLFFBQVEsRUFBRSxJQUhaO0lBSUVDLElBQUksRUFBRSxNQUpSO0lBS0VDLElBQUksRUFBRUM7RUFMUixDQUR5QixFQVF6QjtJQUNFRixJQUFJLEVBQUUsa0JBRFI7SUFFRUMsSUFBSSxFQUFFRSxPQUZSO0lBR0VOLFdBQVcsRUFBRTtFQUhmLENBUnlCLEVBYXpCO0lBQ0VHLElBQUksRUFBRSxTQURSO0lBRUVDLElBQUksRUFBRUUsT0FGUjtJQUdFTixXQUFXLEVBQUU7RUFIZixDQWJ5QixFQWtCekI7SUFDRUcsSUFBSSxFQUFFLE1BRFI7SUFFRUgsV0FBVyxFQUFFO0VBRmYsQ0FsQnlCLENBQTNCO0VBdUJBLE1BQU1PLFFBQVEsR0FBRyxDQUNmO0lBQ0VDLE1BQU0sRUFBRSwrQ0FEVjtJQUVF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
|
|
410
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjb21tYW5kTGluZUFyZ3MiLCJjb21tYW5kTGluZVVzYWdlIiwiYXNzZXJ0IiwibG9hZCIsImdldEZpbGVzIiwicGFyc2VBcmdzIiwiYXJndiIsIm9wdGlvbnNEZWZpbml0aW9ucyIsImRlc2NyaXB0aW9uIiwiZGVmYXVsdE9wdGlvbiIsIm11bHRpcGxlIiwibmFtZSIsInR5cGUiLCJTdHJpbmciLCJCb29sZWFuIiwic2VjdGlvbnMiLCJoZWFkZXIiLCJjb250ZW50Iiwib3B0aW9uTGlzdCIsIm9wdGlvbnMiLCJjb25zb2xlIiwiZXJyb3IiLCJoZWxwIiwidXNhZ2UiLCJ3YXJuIiwiZXFTZXQiLCJhcyIsImJzIiwic2l6ZSIsImEiLCJoYXMiLCJDb2RlMlBhdHRlcm4iLCJjb25zdHJ1Y3RvciIsInBhdHRlcm4iLCJjaGlsZHJlbiIsIl9wYXR0ZXJuXyIsIl9tYXRjaF9jb3VudF8iLCJPYmplY3QiLCJhc3NpZ24iLCJDb2RlMlBhdHRlcm5Db21Gb25kIiwiTGVjdHVyZU1hcHBpbmciLCJTZXQiLCJpc0xlY3R1cmUiLCJhY3RlIiwiY29kZUFjdGUiLCJtYXRjaCIsImNvZGVzX2xlY3R1cmVfcmVnZXhwIiwiZ2V0VHlwZSIsIkVycm9yIiwibWFwIiwicmVwbGFjZSIsImdldENvZGVBY3RlIiwiYWRkIiwiY29kZXMiLCJsaWJlbGxlQWN0ZSIsIm5vbUNhbm9uaXF1ZSIsImxpYmVsbGUiLCJyZW1hcCIsInR5cGVzIiwibWVyZ2VDb2RlcyIsImMiLCJBcnJheSIsImZyb20iLCJwcmludEFuY2hvcnMiLCJjb2RlIiwibG9nIiwiZ2V0Q29kZXMiLCJqb2luIiwiUmVnRXhwIiwiY29kZXNfbGVjdHVyZSIsIkxlY3R1cmVNYXBwZXIiLCJtYXBwaW5nIiwiY29sbGVjdCIsInVuZGVmaW5lZCIsImxlY3R1cmVzIiwiQWN0ZXNEb2N1bWVudGF0aW9uIiwic2FuaXR5Q2hlY2tzIiwidmVyYm9zZSIsImxlY3R1cmUiLCJDTVAiLCJDQyIsIlBST00iLCJBTjIxIiwiQU5MVU5JIiwiUsOpc29sdXRpb24iLCJBTjIwIiwiRVUiLCJJbW11bml0w6kiLCJwcm9jZWR1cmVzIiwiY29kZTJwYXR0ZXJuIiwid2Fsa0ZpbGVzIiwiZGF0YSIsImFjdGlvbiIsImZpbGUiLCJkb3NzaWVyIiwicHJvY2VkdXJlIiwicmVtYXBQcm9jZWR1cmUiLCJwcm9jZWR1cmVQYXJsZW1lbnRhaXJlIiwiYWN0ZXNMZWdpc2xhdGlmcyIsImNvbGxlY3RGaWxlcyIsIl9hY3RlcyIsIl9jMnAiLCJfcGFyZW50IiwicHJvY2Vzc0ZpbGVzIiwiYWN0ZXMiLCJjMnAiLCJwYXJlbnQiLCJtZXJnZSIsInZhbGlkYXRlIiwicmVtYXBBY3RlcyIsInJlc3VsdHMiLCJsZWN0dXJlTWFwcGVyIiwicHVzaCIsImNvbGxlY3RBY3RlcyIsIm1lcmdlX3Byb2NlZHVyZXMiLCJNYXAiLCJyZW1hcHBlZFByb2NlZHVyZXMiLCJnZXQiLCJvcmRlcmVkQ29kZXMiLCJvcmRlcmVkIiwieCIsInZhbGlkYXRlQ2hyb25vbG9neSIsInNlcXVlbmNlIiwibWVyZ2VBY3RlIiwic2hvcnRDb2RlIiwieHNpVHlwZSIsImwiLCJ2YWxpZGF0ZUxldmVsIiwicGF0aCIsImtleSIsInZhbHVlIiwiZW50cmllcyIsImNvbmNhdCIsInByaW50RW50cnkiLCJlbnRyeSIsInRpdGxlIiwidW5kZXJsaW5lIiwibGVuZ3RoIiwiYWRkQW5jaG9ycyIsImFuY2hvcnNQcmludGVkIiwiYW5jaG9ycyIsInJlbmFtZUNNUCIsInN0YXJ0c1dpdGgiLCJlbmRzV2l0aCIsInByaW50TGV2ZWwiLCJrZXlzIiwic3Vic3RyaW5nIiwicHJpbnRDb2RlcyIsInByaW50QW5jaG9yc0luZGV4IiwiZ2V0QWdncmVnYXRlZCIsInJlbWFwcGVkIiwicHJpbnQiLCJhZ2dyZWdhdGVkIiwibWFpbiIsImRvYyIsInByb2Nlc3MiLCJleGl0Il0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NjcmlwdHMvZG9jdW1lbnRfZG9zc2llcnNfbGVnaXNsYXRpZnMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGNvbW1hbmRMaW5lQXJncyBmcm9tIFwiY29tbWFuZC1saW5lLWFyZ3NcIlxuaW1wb3J0IGNvbW1hbmRMaW5lVXNhZ2UgZnJvbSBcImNvbW1hbmQtbGluZS11c2FnZVwiXG5pbXBvcnQgYXNzZXJ0IGZyb20gXCJhc3NlcnRcIlxuaW1wb3J0IHsgbG9hZCwgZ2V0RmlsZXMgfSBmcm9tIFwiLi4vZmlsZV9zeXN0ZW1zXCJcblxuZnVuY3Rpb24gcGFyc2VBcmdzKGFyZ3Y6IHN0cmluZ1tdKTogYW55IHtcbiAgY29uc3Qgb3B0aW9uc0RlZmluaXRpb25zID0gW1xuICAgIHtcbiAgICAgIGRlc2NyaXB0aW9uOiBcInBhdGhuYW1lIHRvIGEgSlNPTiBmaWxlIG9yIGEgZ2xvYiBwYXR0ZXJuIHRvIEpTT04gZmlsZXNcIixcbiAgICAgIGRlZmF1bHRPcHRpb246IHRydWUsXG4gICAgICBtdWx0aXBsZTogdHJ1ZSxcbiAgICAgIG5hbWU6IFwiZGF0YVwiLFxuICAgICAgdHlwZTogU3RyaW5nLFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogXCJuby1zYW5pdHktY2hlY2tzXCIsXG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVzY3JpcHRpb246IFwiRG8gbm90IHBlcmZvcm0gc2FuaXR5IGNoZWNrcy5cIixcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6IFwidmVyYm9zZVwiLFxuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlc2NyaXB0aW9uOiBcImluY3JlYXNlIHZlcmJvc2l0eVwiLFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogXCJoZWxwXCIsXG4gICAgICBkZXNjcmlwdGlvbjogXCJQcmludCB0aGlzIHVzYWdlIGd1aWRlLlwiLFxuICAgIH0sXG4gIF1cbiAgY29uc3Qgc2VjdGlvbnMgPSBbXG4gICAge1xuICAgICAgaGVhZGVyOiBcIkFpZGUgw6AgbGEgZG9jdW1lbnRhdGlvbiBkdSBkb3NzaWVyIGzDqWdpc2xhdGlmXCIsXG4gICAgICBjb250ZW50OiBcIkfDqW7DqHJlIHVuZSBoacOpcmFyY2hpZSBkZXMgYWN0ZXMgbMOpZ2lzbGF0aWZzXCIsXG4gICAgfSxcbiAgICB7XG4gICAgICBoZWFkZXI6IFwiT3B0aW9uc1wiLFxuICAgICAgb3B0aW9uTGlzdDogb3B0aW9uc0RlZmluaXRpb25zLFxuICAgIH0sXG4gIF1cbiAgY29uc3Qgb3B0aW9ucyA9IGNvbW1hbmRMaW5lQXJncyhvcHRpb25zRGVmaW5pdGlvbnMsIHtcbiAgICBhcmd2OiBhcmd2LFxuICB9KVxuICBpZiAoIShcImhlbHBcIiBpbiBvcHRpb25zKSAmJiAhKFwiZGF0YVwiIGluIG9wdGlvbnMpKSB7XG4gICAgY29uc29sZS5lcnJvcihcIi0tZGF0YSBpcyBtYW5kYXRvcnlcIilcbiAgICBvcHRpb25zLmhlbHAgPSB0cnVlXG4gIH1cbiAgaWYgKFwiaGVscFwiIGluIG9wdGlvbnMpIHtcbiAgICBjb25zdCB1c2FnZSA9IGNvbW1hbmRMaW5lVXNhZ2Uoc2VjdGlvbnMpXG4gICAgY29uc29sZS53YXJuKHVzYWdlKVxuICAgIHJldHVybiBudWxsXG4gIH1cbiAgcmV0dXJuIG9wdGlvbnNcbn1cblxuZnVuY3Rpb24gZXFTZXQoYXM6IFNldDxzdHJpbmc+LCBiczogU2V0PHN0cmluZz4pOiBib29sZWFuIHtcbiAgaWYgKGFzLnNpemUgIT09IGJzLnNpemUpIHJldHVybiBmYWxzZVxuICBmb3IgKHZhciBhIG9mIGFzKSBpZiAoIWJzLmhhcyhhKSkgcmV0dXJuIGZhbHNlXG4gIHJldHVybiB0cnVlXG59XG5cbmNsYXNzIENvZGUyUGF0dGVybiB7XG4gIF9wYXR0ZXJuXzogYW55XG4gIF9tYXRjaF9jb3VudF86IG51bWJlclxuICBjb25zdHJ1Y3RvcihwYXR0ZXJuOiBhbnksIGNoaWxkcmVuOiBhbnkpIHtcbiAgICB0aGlzLl9wYXR0ZXJuXyA9IHBhdHRlcm5cbiAgICB0aGlzLl9tYXRjaF9jb3VudF8gPSAwXG4gICAgT2JqZWN0LmFzc2lnbih0aGlzLCBjaGlsZHJlbilcbiAgfVxufVxuXG5jbGFzcyBDb2RlMlBhdHRlcm5Db21Gb25kIGV4dGVuZHMgQ29kZTJQYXR0ZXJuIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoXCJeL1NBSVNJRS8oL05PTUlOLykqKC9SRVVOSU9OLykqKC9SQVBQT1JULykqJFwiLCB7fSlcbiAgfVxufVxuXG5jbGFzcyBMZWN0dXJlTWFwcGluZyB7XG4gIGxpYmVsbGU6IGFueSA9IHt9XG4gIGNvZGVzOiBhbnkgPSBuZXcgU2V0KClcblxuICBzdGF0aWMgY29kZXNfbGVjdHVyZTogc3RyaW5nW10gPSBbXG4gICAgXCJBTjFcIixcbiAgICBcIlNOMVwiLFxuICAgIFwiQU5OTEVDXCIsXG4gICAgXCJTTk5MRUNcIixcbiAgICBcIkFOTERFRlwiLFxuICAgIFwiQU4yXCIsXG4gICAgXCJTTjJcIixcbiAgICBcIlNOM1wiLFxuICBdXG4gIHN0YXRpYyBjb2Rlc19sZWN0dXJlX3JlZ2V4cDogYW55ID0gbmV3IFJlZ0V4cChcbiAgICBcIl4oPzpcIiArIExlY3R1cmVNYXBwaW5nLmNvZGVzX2xlY3R1cmUuam9pbihcInxcIikgKyBcIikoLS4qKT8kXCIsXG4gIClcblxuICBzdGF0aWMgaXNMZWN0dXJlKGFjdGU6IGFueSkge1xuICAgIHJldHVybiBhY3RlLmNvZGVBY3RlLm1hdGNoKExlY3R1cmVNYXBwaW5nLmNvZGVzX2xlY3R1cmVfcmVnZXhwKVxuICB9XG5cbiAgc3RhdGljIGdldFR5cGUoYWN0ZTogYW55KSB7XG4gICAgaWYgKGFjdGUuY29kZUFjdGUubWF0Y2goL15BTi8pKSByZXR1cm4gXCJBTlwiXG4gICAgZWxzZSBpZiAoYWN0ZS5jb2RlQWN0ZS5tYXRjaCgvXlNOLykpIHJldHVybiBcIlNOXCJcbiAgICBlbHNlIHRocm93IEVycm9yKGAke2FjdGUuY29kZUFjdGV9IGRvZXMgbm90IHN0YXJ0IHdpdGggQU4gb3IgU05gKVxuICB9XG5cbiAgc3RhdGljIG1hcChjb2RlQWN0ZTogYW55KSB7XG4gICAgcmV0dXJuIGNvZGVBY3RlLnJlcGxhY2UoTGVjdHVyZU1hcHBpbmcuY29kZXNfbGVjdHVyZV9yZWdleHAsIGBsZWN0dXJlJDFgKVxuICB9XG5cbiAgc3RhdGljIGdldENvZGVBY3RlKGFjdGU6IGFueSkge1xuICAgIGlmICghTGVjdHVyZU1hcHBpbmcuaXNMZWN0dXJlKGFjdGUpKSByZXR1cm5cblxuICAgIHJldHVybiBMZWN0dXJlTWFwcGluZy5tYXAoYWN0ZS5jb2RlQWN0ZSlcbiAgfVxuXG4gIGFkZChhY3RlOiBhbnkpIHtcbiAgICB0aGlzLmNvZGVzLmFkZChhY3RlLmNvZGVBY3RlKVxuXG4gICAgY29uc3QgdHlwZSA9IExlY3R1cmVNYXBwaW5nLmdldFR5cGUoYWN0ZSlcblxuICAgIGlmICghKGFjdGUubGliZWxsZUFjdGUubm9tQ2Fub25pcXVlIGluIHRoaXMubGliZWxsZSkpXG4gICAgICB0aGlzLmxpYmVsbGVbYWN0ZS5saWJlbGxlQWN0ZS5ub21DYW5vbmlxdWVdID0gbmV3IFNldCgpXG4gICAgdGhpcy5saWJlbGxlW2FjdGUubGliZWxsZUFjdGUubm9tQ2Fub25pcXVlXS5hZGQodHlwZSlcbiAgfVxuXG4gIHJlbWFwKGFjdGU6IGFueSwgY29kZUFjdGU6IHN0cmluZykge1xuICAgIGFjdGUuY29kZUFjdGUgPSBjb2RlQWN0ZVxuXG4gICAgbGV0IHR5cGVzID0gdGhpcy5saWJlbGxlW2FjdGUubGliZWxsZUFjdGUubm9tQ2Fub25pcXVlXVxuICAgIGlmICghKHR5cGVzLmhhcyhcIlNOXCIpICYmIHR5cGVzLmhhcyhcIkFOXCIpKSkge1xuICAgICAgaWYgKHR5cGVzLmhhcyhcIlNOXCIpKSBhY3RlLmxpYmVsbGVBY3RlLm5vbUNhbm9uaXF1ZSArPSBcIiAoU8OpbmF0KVwiXG4gICAgICBlbHNlIGlmICh0eXBlcy5oYXMoXCJBTlwiKSlcbiAgICAgICAgYWN0ZS5saWJlbGxlQWN0ZS5ub21DYW5vbmlxdWUgKz0gXCIgKEFzc2VtYmzDqWUgTmF0aW9uYWxlKVwiXG4gICAgfVxuICB9XG5cbiAgbWVyZ2VDb2Rlcyhjb2RlczogYW55KSB7XG4gICAgZm9yIChjb25zdCBjIG9mIEFycmF5LmZyb20odGhpcy5jb2RlcykpIGNvZGVzLmFkZChjKVxuICB9XG5cbiAgcHJpbnRBbmNob3JzKCkge1xuICAgIGZvciAoY29uc3QgY29kZSBvZiBBcnJheS5mcm9tKHRoaXMuY29kZXMpKSBjb25zb2xlLmxvZyhgLi4gXyR7Y29kZX06YClcbiAgfVxuXG4gIGdldENvZGVzKCkge1xuICAgIHJldHVybiBBcnJheS5mcm9tKHRoaXMuY29kZXMpLmpvaW4oXCIsXCIpXG4gIH1cbn1cblxuY2xhc3MgTGVjdHVyZU1hcHBlciB7XG4gIG1hcHBpbmc6IGFueSA9IHt9XG5cbiAgaGFzKGNvZGVBY3RlOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gY29kZUFjdGUgaW4gdGhpcy5tYXBwaW5nXG4gIH1cblxuICBjb2xsZWN0KGFjdGU6IGFueSkge1xuICAgIGNvbnN0IGNvZGVBY3RlID0gTGVjdHVyZU1hcHBpbmcuZ2V0Q29kZUFjdGUoYWN0ZSlcbiAgICBpZiAoY29kZUFjdGUgIT0gdW5kZWZpbmVkKSB7XG4gICAgICBsZXQgbGVjdHVyZXMgPSB0aGlzLm1hcHBpbmdcbiAgICAgIGlmICghKGNvZGVBY3RlIGluIGxlY3R1cmVzKSkgbGVjdHVyZXNbY29kZUFjdGVdID0gbmV3IExlY3R1cmVNYXBwaW5nKClcbiAgICAgIGxlY3R1cmVzW2NvZGVBY3RlXS5hZGQoYWN0ZSlcbiAgICB9XG4gIH1cblxuICByZW1hcChhY3RlOiBhbnkpIHtcbiAgICBjb25zdCBjb2RlQWN0ZSA9IExlY3R1cmVNYXBwaW5nLmdldENvZGVBY3RlKGFjdGUpXG4gICAgaWYgKGNvZGVBY3RlICE9IHVuZGVmaW5lZCkgdGhpcy5tYXBwaW5nW2NvZGVBY3RlXS5yZW1hcChhY3RlLCBjb2RlQWN0ZSlcbiAgfVxuXG4gIG1lcmdlQ29kZXMoY29kZXM6IGFueSwgY29kZUFjdGU6IHN0cmluZykge1xuICAgIHRoaXMubWFwcGluZ1tjb2RlQWN0ZV0ubWVyZ2VDb2Rlcyhjb2RlcylcbiAgfVxuXG4gIHByaW50QW5jaG9ycyhjb2RlQWN0ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5tYXBwaW5nW2NvZGVBY3RlXS5wcmludEFuY2hvcnMoKVxuICB9XG5cbiAgZ2V0Q29kZXMoY29kZUFjdGU6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLm1hcHBpbmdbY29kZUFjdGVdLmdldENvZGVzKClcbiAgfVxufVxuXG5jbGFzcyBBY3Rlc0RvY3VtZW50YXRpb24ge1xuICB2ZXJib3NlOiBib29sZWFuXG4gIHNhbml0eUNoZWNrczogYm9vbGVhblxuICBsZWN0dXJlTWFwcGVyOiBhbnkgPSBuZXcgTGVjdHVyZU1hcHBlcigpXG4gIHJlbWFwcGVkUHJvY2VkdXJlczogYW55ID0ge31cbiAgYW5jaG9yc1ByaW50ZWQ6IGFueSA9IHt9XG4gIGFuY2hvcnM6IGFueSA9IG5ldyBTZXQoKVxuICBjb2RlczogYW55ID0ge31cbiAgcHJvY2VkdXJlczogYW55ID0gbnVsbFxuICBjb2RlMnBhdHRlcm46IGFueSA9IG5ldyBDb2RlMlBhdHRlcm4obnVsbCwge1xuICAgIFwiUHJvY8OpZHVyZSBsw6lnaXNsYXRpdmVcIjogbmV3IENvZGUyUGF0dGVybihcbiAgICAgIFwiXigoKC9sZWN0dXJlLykrKXwoKC9sZWN0dXJlLykrL0NNUC8oL2xlY3R1cmUvKSopKSgvQ0MvKT8oL1BST00vKT8oL0FOLUFQUExJLyk/JFwiLFxuICAgICAge1xuICAgICAgICBsZWN0dXJlOiBuZXcgQ29kZTJQYXR0ZXJuKFxuICAgICAgICAgIFwiXigvREVQT1QvKT8oL0RQVExFVFRSRUNULyk/KC9FVEkvKT8oL0FWQ0UvKT8oL0RHVlQvKT8oL0FDSU4vKT8oL01PVElPTi8pKigvUFJPQ0FDQy8pPygvQ09NLyk/KCgvREVCQVRTLykrKT8oL1JUUklOSS8pPyRcIixcbiAgICAgICAgICB7XG4gICAgICAgICAgICBcImxlY3R1cmUtQ09NXCI6IG5ldyBDb2RlMlBhdHRlcm4oXCJeKC9GT05EL3wvQVZJUy8pKyRcIiwge1xuICAgICAgICAgICAgICBcImxlY3R1cmUtQ09NLUZPTkRcIjogbmV3IENvZGUyUGF0dGVybkNvbUZvbmQoKSxcbiAgICAgICAgICAgICAgXCJsZWN0dXJlLUNPTS1BVklTXCI6IG5ldyBDb2RlMlBhdHRlcm5Db21Gb25kKCksXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIFwibGVjdHVyZS1ERUJBVFNcIjogbmV3IENvZGUyUGF0dGVybihcbiAgICAgICAgICAgICAgXCJeKC9TRUFOQ0UvKSooKC9NT1RJT04vKT8oL01PVElPTi1WT1RFLykrKT8oL0RFQy8pPyRcIixcbiAgICAgICAgICAgICAge30sXG4gICAgICAgICAgICApLFxuICAgICAgICAgIH0sXG4gICAgICAgICksXG4gICAgICAgIENNUDogbmV3IENvZGUyUGF0dGVybihcbiAgICAgICAgICBcIl4oL0RFUE9UL3wvU0FJU0lFLyl7MSwyfSgvQ09NLyk/KC9ERUMvKT8oL0RFQkFUUy1BTi8vREVCQVRTLVNOLyk/XCIsXG4gICAgICAgICAge1xuICAgICAgICAgICAgXCJDTVAtQ09NXCI6IG5ldyBDb2RlMlBhdHRlcm4oXG4gICAgICAgICAgICAgIFwiXigvTk9NSU4vKT8oL1JBUFBPUlQtQU4vfC9SQVBQT1JULVNOLyl7Mn0kXCIsXG4gICAgICAgICAgICAgIHt9LFxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIFwiQ01QLURFQkFUUy1BTlwiOiBuZXcgQ29kZTJQYXR0ZXJuKFwiXigvU0VBTkNFLykqKC9ERUMvKT8kXCIsIHt9KSxcbiAgICAgICAgICAgIFwiQ01QLURFQkFUUy1TTlwiOiBuZXcgQ29kZTJQYXR0ZXJuKFwiXigvU0VBTkNFLykqKC9ERUMvKT8kXCIsIHt9KSxcbiAgICAgICAgICB9LFxuICAgICAgICApLFxuICAgICAgICBDQzogbmV3IENvZGUyUGF0dGVybihcIl4oL1NBSVNJRS8pKygvQ09OQ0xVU0lPTi8pPyRcIiwge30pLFxuICAgICAgICBQUk9NOiBuZXcgQ29kZTJQYXR0ZXJuKFwiXigvUFVCLyk/JFwiLCB7fSksXG4gICAgICAgIFwiQU4tQVBQTElcIjogbmV3IENvZGUyUGF0dGVybihcIl4oL1JBUFBPUlQvKT8kXCIsIHt9KSxcbiAgICAgIH0sXG4gICAgKSxcbiAgICBcIkFsbG9jdXRpb24gZHUgUHLDqXNpZGVudCBkZSBsJ0Fzc2VtYmzDqWUgbmF0aW9uYWxlXCI6IG5ldyBDb2RlMlBhdHRlcm4oXG4gICAgICBcIl4vQU4yMS8kXCIsXG4gICAgICB7XG4gICAgICAgIEFOMjE6IG5ldyBDb2RlMlBhdHRlcm4oXCJeKC9BUEFOLyk/JFwiLCB7fSksXG4gICAgICB9LFxuICAgICksXG4gICAgXCJSw6lzb2x1dGlvbiBBcnRpY2xlIDM0LTFcIjogbmV3IENvZGUyUGF0dGVybihcIl4oL0FOTFVOSS8pPyRcIiwge1xuICAgICAgQU5MVU5JOiBuZXcgQ29kZTJQYXR0ZXJuKFwiXigvREVQT1QvKT8oL0RFQkFUUy8pPygvUlRSSU5JLyk/JFwiLCB7XG4gICAgICAgIFwiQU5MVU5JLURFQkFUU1wiOiBuZXcgQ29kZTJQYXR0ZXJuKFwiXigvU0VBTkNFLykrKC9ERUMvKT8kXCIsIHt9KSxcbiAgICAgIH0pLFxuICAgIH0pLFxuICAgIFLDqXNvbHV0aW9uOiBuZXcgQ29kZTJQYXR0ZXJuKFwiXigvQU5MVU5JLyk/KC9DQy8pPyRcIiwge1xuICAgICAgQU5MVU5JOiBuZXcgQ29kZTJQYXR0ZXJuKFwiXigvREVQT1QvKT8oL0NPTS8pPygvREVCQVRTL3wvUlRSSU5JLyk/JFwiLCB7XG4gICAgICAgIFwiQU5MVU5JLUNPTVwiOiBuZXcgQ29kZTJQYXR0ZXJuKFwiXigvQ0FFLyk/KC9GT05ELyk/JFwiLCB7XG4gICAgICAgICAgXCJBTkxVTkktQ09NLUZPTkRcIjogbmV3IENvZGUyUGF0dGVybkNvbUZvbmQoKSxcbiAgICAgICAgICBcIkFOTFVOSS1DT00tQ0FFXCI6IG5ldyBDb2RlMlBhdHRlcm4oXG4gICAgICAgICAgICBcIl4oL1NBSVNJRS8pPygvTk9NSU4vKT8oL1JFVU5JT04vKT8oL1JBUFBPUlQvKT8oL0RFQy8pPyRcIixcbiAgICAgICAgICAgIHt9LFxuICAgICAgICAgICksXG4gICAgICAgIH0pLFxuICAgICAgICBcIkFOTFVOSS1ERUJBVFNcIjogbmV3IENvZGUyUGF0dGVybihcIl4oL1NFQU5DRS8pKigvREVDLyk/JFwiLCB7fSksXG4gICAgICB9KSxcbiAgICAgIENDOiBuZXcgQ29kZTJQYXR0ZXJuKFwiXigvU0FJU0lFLyk/KC9DT05DTFVTSU9OLyk/JFwiLCB7fSksXG4gICAgfSksXG4gICAgXCJSYXBwb3J0IGQnaW5mb3JtYXRpb24gc2FucyBtaXNzaW9uXCI6IG5ldyBDb2RlMlBhdHRlcm4oXG4gICAgICBcIl4oL0FOMjAvKT8oL0VVLyk/JFwiLFxuICAgICAge1xuICAgICAgICBBTjIwOiBuZXcgQ29kZTJQYXR0ZXJuKFwiXigvUkFQUE9SVC8pPyRcIiwge30pLFxuICAgICAgICBFVTogbmV3IENvZGUyUGF0dGVybihcIl4oL0RFQy8pKyRcIiwge30pLFxuICAgICAgfSxcbiAgICApLFxuICAgIFwiTWlzc2lvbiBkJ2luZm9ybWF0aW9uXCI6IG5ldyBDb2RlMlBhdHRlcm4oXCJeKC9BTjIwLyk/JFwiLCB7XG4gICAgICBBTjIwOiBuZXcgQ29kZTJQYXR0ZXJuKFwiXigvTUlTSU5GLyk/JFwiLCB7XG4gICAgICAgIFwiQU4yMC1NSVNJTkZcIjogbmV3IENvZGUyUGF0dGVybihcbiAgICAgICAgICBcIl4oL0NSRUEvKT8oL05PTUlOLyk/KC9SQVBQT1JULyk/JFwiLFxuICAgICAgICAgIHt9LFxuICAgICAgICApLFxuICAgICAgfSksXG4gICAgfSksXG4gICAgXCJDb21taXNzaW9uIGQnZW5xdcOqdGVcIjogbmV3IENvZGUyUGF0dGVybihcIl4oL0FOMjAvKT8kXCIsIHtcbiAgICAgIEFOMjA6IG5ldyBDb2RlMlBhdHRlcm4oXCJeKC9DT01FTlEvKT8kXCIsIHtcbiAgICAgICAgXCJBTjIwLUNPTUVOUVwiOiBuZXcgQ29kZTJQYXR0ZXJuKFxuICAgICAgICAgIFwiXigvQ1JFQS8pPygvTk9NSU4vKT8oL1JBUFBPUlQvKT8kXCIsXG4gICAgICAgICAge30sXG4gICAgICAgICksXG4gICAgICB9KSxcbiAgICB9KSxcbiAgICBcIkVuZ2FnZW1lbnQgZGUgbGEgcmVzcG9uc2FiaWxpdMOpIGdvdXZlcm5lbWVudGFsZVwiOiBuZXcgQ29kZTJQYXR0ZXJuKFxuICAgICAgXCJeL0FOMjEvJFwiLFxuICAgICAge1xuICAgICAgICBBTjIxOiBuZXcgQ29kZTJQYXR0ZXJuKFwiXigoKC9NT1RJT04vKSovREVCQVRTLyl8KC9ER1ZULykpezEsMn0kXCIsIHtcbiAgICAgICAgICBcIkFOMjEtREVCQVRTXCI6IG5ldyBDb2RlMlBhdHRlcm4oXCJeKC9TRUFOQ0UvKSooL01PVElPTi1WT1RFLykqJFwiLCB7fSksXG4gICAgICAgIH0pLFxuICAgICAgfSxcbiAgICApLFxuICAgIFwiTW90aW9uIHLDqWbDqXJlbmRhaXJlXCI6IG5ldyBDb2RlMlBhdHRlcm4oXCJeKC9sZWN0dXJlLykrJFwiLCB7XG4gICAgICBsZWN0dXJlOiBuZXcgQ29kZTJQYXR0ZXJuKFwiXigvREVQT1QvKT8oL0NPTS8pPygvREVCQVRTLyk/JFwiLCB7XG4gICAgICAgIFwibGVjdHVyZS1DT01cIjogbmV3IENvZGUyUGF0dGVybihcIl4oL0ZPTkQvKT8kXCIsIHtcbiAgICAgICAgICBcImxlY3R1cmUtQ09NLUZPTkRcIjogbmV3IENvZGUyUGF0dGVybihcbiAgICAgICAgICAgIFwiXigvU0FJU0lFLyk/KC9OT01JTi8pKigvUkFQUE9SVC8pKiRcIixcbiAgICAgICAgICAgIHt9LFxuICAgICAgICAgICksXG4gICAgICAgIH0pLFxuICAgICAgICBcImxlY3R1cmUtREVCQVRTXCI6IG5ldyBDb2RlMlBhdHRlcm4oXCJeKC9ERUMvKT8kXCIsIHt9KSxcbiAgICAgIH0pLFxuICAgIH0pLFxuICAgIEltbXVuaXTDqTogbmV3IENvZGUyUGF0dGVybihcIl4oL0FOTFVOSS8pKyRcIiwge1xuICAgICAgQU5MVU5JOiBuZXcgQ29kZTJQYXR0ZXJuKFwiXigvREVQT1QvKT8oL0NPTS8pPygvREVCQVRTLyk/KC9SVFJJTkkvKT8kXCIsIHtcbiAgICAgICAgXCJBTkxVTkktQ09NXCI6IG5ldyBDb2RlMlBhdHRlcm4oXCJeKC9GT05ELyk/JFwiLCB7XG4gICAgICAgICAgXCJBTkxVTkktQ09NLUZPTkRcIjogbmV3IENvZGUyUGF0dGVybihcbiAgICAgICAgICAgIFwiXigvU0FJU0lFLyk/KC9OT01JTi8pKigvUkFQUE9SVC8pKiRcIixcbiAgICAgICAgICAgIHt9LFxuICAgICAgICAgICksXG4gICAgICAgIH0pLFxuICAgICAgICBcIkFOTFVOSS1ERUJBVFNcIjogbmV3IENvZGUyUGF0dGVybihcIl4oL1NFQU5DRS8pPygvREVDLykkXCIsIHt9KSxcbiAgICAgIH0pLFxuICAgIH0pLFxuICAgIFwiUmVzcG9uc2FiaWxpdMOpIHDDqW5hbGUgZHUgcHLDqXNpZGVudCBkZSBsYSByw6lwdWJsaXF1ZVwiOiBuZXcgQ29kZTJQYXR0ZXJuKFxuICAgICAgXCJeL2xlY3R1cmUvJFwiLFxuICAgICAge1xuICAgICAgICBsZWN0dXJlOiBuZXcgQ29kZTJQYXR0ZXJuKFwiXigvREVQT1QvKT8oL1JFQ0JVUkVBVS8pPyRcIiwge30pLFxuICAgICAgfSxcbiAgICApLFxuICAgIFwiUHJvcG9zaXRpb24gZGUgbG9pIHByw6lzZW50w6llIGVuIGFwcGxpY2F0aW9uIGRlIGwnYXJ0aWNsZSAxMSBkZSBsYSBDb25zdGl0dXRpb25cIjpcbiAgICAgIG5ldyBDb2RlMlBhdHRlcm4oXCJeL2xlY3R1cmUvJFwiLCB7XG4gICAgICAgIGxlY3R1cmU6IG5ldyBDb2RlMlBhdHRlcm4oXCJeKC9ERVBPVC8pPyRcIiwge30pLFxuICAgICAgfSksXG4gIH0pXG5cbiAgY29uc3RydWN0b3Ioc2FuaXR5Q2hlY2tzOiBib29sZWFuLCB2ZXJib3NlOiBib29sZWFuID0gZmFsc2UpIHtcbiAgICB0aGlzLnZlcmJvc2UgPSB2ZXJib3NlXG4gICAgdGhpcy5zYW5pdHlDaGVja3MgPSBzYW5pdHlDaGVja3NcbiAgICB0aGlzLnByb2NlZHVyZXMgPSB7fVxuICAgIHRoaXMuY29kZTJwYXR0ZXJuLl9tYXRjaF9jb3VudF8rK1xuICB9XG5cbiAgd2Fsa0ZpbGVzKGRhdGE6IHN0cmluZ1tdLCBhY3Rpb246IGFueSkge1xuICAgIGZvciAoY29uc3QgZmlsZSBvZiBnZXRGaWxlcyhkYXRhKSkge1xuICAgICAgY29uc3QgZG9zc2llciA9IGxvYWQoZmlsZSlcbiAgICAgIGxldCBwcm9jZWR1cmU6IHN0cmluZyA9IHRoaXMucmVtYXBQcm9jZWR1cmUoXG4gICAgICAgIGRvc3NpZXIucHJvY2VkdXJlUGFybGVtZW50YWlyZS5saWJlbGxlLFxuICAgICAgKVxuICAgICAgaWYgKCEocHJvY2VkdXJlIGluIHRoaXMucHJvY2VkdXJlcykpIHRoaXMucHJvY2VkdXJlc1twcm9jZWR1cmVdID0ge31cbiAgICAgIGFjdGlvbihcbiAgICAgICAgdGhpcy5wcm9jZWR1cmVzW3Byb2NlZHVyZV0sXG4gICAgICAgIGRvc3NpZXIuYWN0ZXNMZWdpc2xhdGlmcyxcbiAgICAgICAgdGhpcy5jb2RlMnBhdHRlcm5bcHJvY2VkdXJlXSxcbiAgICAgICAgbnVsbCxcbiAgICAgIClcbiAgICB9XG4gIH1cblxuICBjb2xsZWN0RmlsZXMoZGF0YTogc3RyaW5nW10pIHtcbiAgICB0aGlzLndhbGtGaWxlcyhcbiAgICAgIGRhdGEsXG4gICAgICAoX2FjdGVzOiBhbnksIGFjdGVzTGVnaXNsYXRpZnM6IGFueSwgX2MycDogYW55LCBfcGFyZW50OiBzdHJpbmcpID0+IHtcbiAgICAgICAgdGhpcy5jb2xsZWN0KGFjdGVzTGVnaXNsYXRpZnMpXG4gICAgICB9LFxuICAgIClcbiAgfVxuXG4gIHByb2Nlc3NGaWxlcyhkYXRhOiBzdHJpbmdbXSkge1xuICAgIHRoaXMud2Fsa0ZpbGVzKFxuICAgICAgZGF0YSxcbiAgICAgIChhY3RlczogYW55LCBhY3Rlc0xlZ2lzbGF0aWZzOiBhbnksIGMycDogYW55LCBwYXJlbnQ6IHN0cmluZykgPT4ge1xuICAgICAgICB0aGlzLm1lcmdlKGFjdGVzLCBhY3Rlc0xlZ2lzbGF0aWZzLCBjMnAsIHBhcmVudClcbiAgICAgIH0sXG4gICAgKVxuICAgIGlmICh0aGlzLnNhbml0eUNoZWNrcykgdGhpcy52YWxpZGF0ZSgpXG4gIH1cblxuICByZW1hcEFjdGVzKGFjdGVzOiBhbnkpOiBhbnkge1xuICAgIGxldCByZXN1bHRzID0gW11cbiAgICBmb3IgKGNvbnN0IGFjdGUgb2YgYWN0ZXMpIHtcbiAgICAgIHRoaXMubGVjdHVyZU1hcHBlci5yZW1hcChhY3RlKVxuXG4gICAgICAvLyBDQy1TQUlTSUUtIHN1ZmZpeCBkb2VzIG5vdCBpbXBseSBhIGhpZXJhcmNoeVxuICAgICAgYWN0ZS5jb2RlQWN0ZSA9IGFjdGUuY29kZUFjdGUucmVwbGFjZSgvXkNDLVNBSVNJRS4qLywgXCJDQy1TQUlTSUVcIilcblxuICAgICAgcmVzdWx0cy5wdXNoKGFjdGUpXG4gICAgfVxuICAgIHJldHVybiByZXN1bHRzXG4gIH1cblxuICBjb2xsZWN0QWN0ZXMoYWN0ZXM6IGFueSk6IGFueSB7XG4gICAgbGV0IHJlc3VsdHMgPSBbXVxuICAgIGZvciAoY29uc3QgYWN0ZSBvZiBhY3Rlcykge1xuICAgICAgdGhpcy5sZWN0dXJlTWFwcGVyLmNvbGxlY3QoYWN0ZSlcblxuICAgICAgcmVzdWx0cy5wdXNoKGFjdGUpXG4gICAgfVxuICAgIHJldHVybiByZXN1bHRzXG4gIH1cblxuICByZW1hcFByb2NlZHVyZShwcm9jZWR1cmU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgbWVyZ2VfcHJvY2VkdXJlczogTWFwPHN0cmluZywgYW55PiA9IG5ldyBNYXAoW1xuICAgICAgW1wiUHJvcG9zaXRpb24gZGUgbG9pIG9yZGluYWlyZVwiLCBcIlByb2PDqWR1cmUgbMOpZ2lzbGF0aXZlXCJdLFxuICAgICAgW1wiUHJvamV0IGRlIGxvaSBvcmRpbmFpcmVcIiwgXCJQcm9jw6lkdXJlIGzDqWdpc2xhdGl2ZVwiXSxcbiAgICAgIFtcbiAgICAgICAgXCJQcm9qZXQgZGUgcmF0aWZpY2F0aW9uIGRlcyB0cmFpdMOpcyBldCBjb252ZW50aW9uc1wiLFxuICAgICAgICBcIlByb2PDqWR1cmUgbMOpZ2lzbGF0aXZlXCIsXG4gICAgICBdLFxuICAgICAgW1wiUHJvamV0IG91IHByb3Bvc2l0aW9uIGRlIGxvaSBvcmdhbmlxdWVcIiwgXCJQcm9jw6lkdXJlIGzDqWdpc2xhdGl2ZVwiXSxcbiAgICAgIFtcbiAgICAgICAgXCJQcm9qZXQgb3UgcHJvcG9zaXRpb24gZGUgbG9pIGNvbnN0aXR1dGlvbm5lbGxlXCIsXG4gICAgICAgIFwiUHJvY8OpZHVyZSBsw6lnaXNsYXRpdmVcIixcbiAgICAgIF0sXG4gICAgICBbXCJQcm9qZXQgZGUgbG9pIGRlIGZpbmFuY2VzIGRlIGwnYW5uw6llXCIsIFwiUHJvY8OpZHVyZSBsw6lnaXNsYXRpdmVcIl0sXG4gICAgICBbXCJQcm9qZXQgZGUgbG9pIGRlIGZpbmFuY2VzIHJlY3RpZmljYXRpdmVcIiwgXCJQcm9jw6lkdXJlIGzDqWdpc2xhdGl2ZVwiXSxcbiAgICAgIFtcbiAgICAgICAgXCJQcm9qZXQgZGUgbG9pIGRlIGZpbmFuY2VtZW50IGRlIGxhIHPDqWN1cml0w6kgc29jaWFsZVwiLFxuICAgICAgICBcIlByb2PDqWR1cmUgbMOpZ2lzbGF0aXZlXCIsXG4gICAgICBdLFxuICAgIF0pXG4gICAgaWYgKG1lcmdlX3Byb2NlZHVyZXMuaGFzKHByb2NlZHVyZSkpIHtcbiAgICAgIHRoaXMucmVtYXBwZWRQcm9jZWR1cmVzW3Byb2NlZHVyZV0gPSBudWxsXG4gICAgICByZXR1cm4gbWVyZ2VfcHJvY2VkdXJlcy5nZXQocHJvY2VkdXJlKVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gcHJvY2VkdXJlXG4gICAgfVxuICB9XG5cbiAgLy8gcmV0dXJuIHRoZSBjb2RlQWN0ZXMgaW4gdGhlIHNhbWUgb3JkZXIgdGhleSBhcHBlYXIgaW4gdGhlIHJlZ2V4cFxuICBvcmRlcmVkQ29kZXMoY29kZXM6IGFueSwgYzJwOiBhbnksIHBhcmVudDogc3RyaW5nKTogU2V0PHN0cmluZz4ge1xuICAgIGNvZGVzID0gbmV3IFNldChjb2RlcylcbiAgICBpZiAoIXRoaXMuc2FuaXR5Q2hlY2tzKSByZXR1cm4gY29kZXNcbiAgICBsZXQgb3JkZXJlZCA9IGMycFtcIl9wYXR0ZXJuX1wiXS5tYXRjaChuZXcgUmVnRXhwKFwiLy4qPy9cIiwgXCJnXCIpKVxuICAgIG9yZGVyZWQgPSBvcmRlcmVkLm1hcCgoeDogc3RyaW5nKSA9PiB4LnJlcGxhY2UobmV3IFJlZ0V4cChcIi8oLiopL1wiKSwgXCIkMVwiKSlcbiAgICBpZiAocGFyZW50ICE9IG51bGwpIG9yZGVyZWQgPSBvcmRlcmVkLm1hcCgoeDogc3RyaW5nKSA9PiBgJHtwYXJlbnR9LSR7eH1gKVxuICAgIG9yZGVyZWQgPSBuZXcgU2V0KG9yZGVyZWQpXG4gICAgYXNzZXJ0KGVxU2V0KG9yZGVyZWQsIGNvZGVzKSwgYCR7Wy4uLm9yZGVyZWRdfSAhPSAke1suLi5jb2Rlc119YClcbiAgICByZXR1cm4gb3JkZXJlZFxuICB9XG5cbiAgdmFsaWRhdGVDaHJvbm9sb2d5KGFjdGVzTGVnaXNsYXRpZnM6IGFueSwgYzJwOiBhbnksIHBhcmVudDogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgcGF0dGVybiA9IGMycFtcIl9wYXR0ZXJuX1wiXVxuICAgIGNvbnN0IHNlcXVlbmNlID0gYWN0ZXNMZWdpc2xhdGlmc1xuICAgICAgLm1hcCgoeDogYW55KSA9PiBgLyR7eC5jb2RlQWN0ZX0vYC5yZXBsYWNlKGAvJHtwYXJlbnR9LWAsIFwiL1wiKSlcbiAgICAgIC5qb2luKFwiXCIpXG4gICAgYXNzZXJ0KFxuICAgICAgc2VxdWVuY2UubWF0Y2gobmV3IFJlZ0V4cChwYXR0ZXJuKSksXG4gICAgICBgJHtwYXR0ZXJufSBkb2VzIG5vdCBtYXRjaCAke3NlcXVlbmNlfWAsXG4gICAgKVxuICAgIGMycC5fbWF0Y2hfY291bnRfKytcbiAgfVxuXG4gIG1lcmdlQWN0ZShhY3RlczogYW55LCBhY3RlOiBhbnksIGMycDogYW55LCBwYXJlbnQ6IHN0cmluZyk6IHZvaWQge1xuICAgIGxldCBjb2RlOiBzdHJpbmcgPSBhY3RlLmNvZGVBY3RlXG4gICAgbGV0IHNob3J0Q29kZTogc3RyaW5nID0gY29kZS5yZXBsYWNlKG5ldyBSZWdFeHAoYF4ke3BhcmVudH0tYCksIFwiXCIpXG4gICAgc2hvcnRDb2RlID0gc2hvcnRDb2RlLnJlcGxhY2UoLy0oQU58U04pJC8sIFwiXCIpXG4gICAgdGhpcy5jb2Rlc1tzaG9ydENvZGVdID0gbnVsbFxuICAgIGxldCBuYW1lOiBzdHJpbmcgPSBhY3RlLmxpYmVsbGVBY3RlLm5vbUNhbm9uaXF1ZVxuICAgIGlmICghKGNvZGUgaW4gYWN0ZXMpKSB7XG4gICAgICBhY3Rlc1tjb2RlXSA9IHtcbiAgICAgICAgdHlwZTogYWN0ZS54c2lUeXBlLFxuICAgICAgICBuYW1lOiBuZXcgU2V0KFtuYW1lXSksXG4gICAgICAgIHNob3J0Q29kZTogc2hvcnRDb2RlLFxuICAgICAgICBhY3Rlczoge30sXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGFjdGVzW2NvZGVdLm5hbWUuYWRkKG5hbWUpXG4gICAgfVxuICAgIGlmIChcImFjdGVzTGVnaXNsYXRpZnNcIiBpbiBhY3RlKVxuICAgICAgdGhpcy5tZXJnZShhY3Rlc1tjb2RlXS5hY3RlcywgYWN0ZS5hY3Rlc0xlZ2lzbGF0aWZzLCBjMnBbY29kZV0sIGNvZGUpXG4gIH1cblxuICBtZXJnZShhY3RlczogYW55LCBhY3Rlc0xlZ2lzbGF0aWZzOiBhbnksIGMycDogYW55LCBwYXJlbnQ6IGFueSk6IHZvaWQge1xuICAgIGNvbnN0IGwgPSB0aGlzLnJlbWFwQWN0ZXMoYWN0ZXNMZWdpc2xhdGlmcylcbiAgICB0aGlzLnZhbGlkYXRlQ2hyb25vbG9neShsLCBjMnAsIHBhcmVudClcbiAgICBmb3IgKGNvbnN0IGFjdGUgb2YgbCkgdGhpcy5tZXJnZUFjdGUoYWN0ZXMsIGFjdGUsIGMycCwgcGFyZW50KVxuICB9XG5cbiAgY29sbGVjdChhY3Rlc0xlZ2lzbGF0aWZzOiBhbnkpOiB2b2lkIHtcbiAgICBmb3IgKGNvbnN0IGFjdGUgb2YgdGhpcy5jb2xsZWN0QWN0ZXMoYWN0ZXNMZWdpc2xhdGlmcykpXG4gICAgICBpZiAoXCJhY3Rlc0xlZ2lzbGF0aWZzXCIgaW4gYWN0ZSkgdGhpcy5jb2xsZWN0KGFjdGUuYWN0ZXNMZWdpc2xhdGlmcylcbiAgfVxuXG4gIHZhbGlkYXRlTGV2ZWwoYzJwOiBhbnksIHBhdGg6IGFueSkge1xuICAgIGFzc2VydChjMnAuX21hdGNoX2NvdW50XyA+IDAsIGAke3BhdGh9IGlzIG5ldmVyIHVzZWRgKVxuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGMycCkgYXMgW3N0cmluZywgYW55XVtdKSB7XG4gICAgICBpZiAodmFsdWUgIT0gbnVsbCAmJiB2YWx1ZS5jb25zdHJ1Y3Rvci5uYW1lID09IFwiQ29kZTJQYXR0ZXJuXCIpXG4gICAgICAgIHRoaXMudmFsaWRhdGVMZXZlbCh2YWx1ZSwgcGF0aC5jb25jYXQoW2tleV0pKVxuICAgIH1cbiAgfVxuXG4gIHZhbGlkYXRlKCkge1xuICAgIHRoaXMudmFsaWRhdGVMZXZlbCh0aGlzLmNvZGUycGF0dGVybiwgW10pXG4gIH1cblxuICBwcmludEVudHJ5KHNlY3Rpb25zOiBzdHJpbmcsIGVudHJ5OiBzdHJpbmcsIGNvZGVzOiBzdHJpbmcpIHtcbiAgICBjb25zdCB0aXRsZSA9IGBcXGAke2VudHJ5fVxcYF9fYFxuICAgIGNvbnNvbGUubG9nKHRpdGxlKVxuICAgIGNvbnN0IHVuZGVybGluZSA9IG5ldyBBcnJheSh0aXRsZS5sZW5ndGggKyAxKS5qb2luKHNlY3Rpb25zWzBdKVxuICAgIGNvbnNvbGUubG9nKHVuZGVybGluZSlcbiAgICBjb25zb2xlLmxvZyhjb2RlcylcbiAgfVxuXG4gIGFkZEFuY2hvcnMoa2V5OiBzdHJpbmcpIHtcbiAgICBpZiAoa2V5IGluIHRoaXMuYW5jaG9yc1ByaW50ZWQpIHJldHVyblxuICAgIGlmICh0aGlzLmxlY3R1cmVNYXBwZXIuaGFzKGtleSkpXG4gICAgICB0aGlzLmxlY3R1cmVNYXBwZXIubWVyZ2VDb2Rlcyh0aGlzLmFuY2hvcnMsIGtleSlcbiAgICBlbHNlIHRoaXMuYW5jaG9ycy5hZGQoa2V5KVxuICB9XG5cbiAgcHJpbnRBbmNob3JzKGtleTogc3RyaW5nKSB7XG4gICAgaWYgKGtleSBpbiB0aGlzLmFuY2hvcnNQcmludGVkKSByZXR1cm5cbiAgICB0aGlzLmFuY2hvcnNQcmludGVkW2tleV0gPSBudWxsXG4gICAgaWYgKHRoaXMubGVjdHVyZU1hcHBlci5oYXMoa2V5KSkgdGhpcy5sZWN0dXJlTWFwcGVyLnByaW50QW5jaG9ycyhrZXkpXG4gICAgZWxzZSBjb25zb2xlLmxvZyhgLi4gXyR7a2V5fTpgKVxuICB9XG5cbiAgZ2V0Q29kZXMoa2V5OiBzdHJpbmcsIHNob3J0Q29kZTogc3RyaW5nKSB7XG4gICAgaWYgKGtleSBpbiB0aGlzLmFuY2hvcnNQcmludGVkKSByZXR1cm4gYGNmIFxcXFwqJHtzaG9ydENvZGV9XFxcXCpgXG4gICAgaWYgKHRoaXMubGVjdHVyZU1hcHBlci5oYXMoa2V5KSkgcmV0dXJuIHRoaXMubGVjdHVyZU1hcHBlci5nZXRDb2RlcyhrZXkpXG4gICAgZWxzZSByZXR1cm4ga2V5XG4gIH1cblxuICByZW5hbWVDTVAoa2V5OiBzdHJpbmcsIG5hbWU6IHN0cmluZykge1xuICAgIGlmIChrZXkuc3RhcnRzV2l0aChcIkNNUFwiKSkge1xuICAgICAgaWYgKGtleS5lbmRzV2l0aChcIi1TTlwiKSkgcmV0dXJuIGAke25hbWV9IChTw6luYXQpYFxuICAgICAgZWxzZSBpZiAoa2V5LmVuZHNXaXRoKFwiLUFOXCIpKSByZXR1cm4gYCR7bmFtZX0gKEFzc2VtYmzDqWUgTmF0aW9uYWxlKWBcbiAgICAgIGVsc2UgcmV0dXJuIG5hbWVcbiAgICB9IGVsc2UgcmV0dXJuIG5hbWVcbiAgfVxuXG4gIHByaW50TGV2ZWwoYWN0ZXM6IGFueSwgc2VjdGlvbnM6IHN0cmluZywgYzJwOiBhbnksIHBhcmVudDogYW55KSB7XG4gICAgY29uc3Qga2V5czogU2V0PHN0cmluZz4gPSB0aGlzLm9yZGVyZWRDb2RlcyhPYmplY3Qua2V5cyhhY3RlcyksIGMycCwgcGFyZW50KVxuICAgIGZvciAoY29uc3Qga2V5IG9mIGtleXMpIHtcbiAgICAgIGNvbnN0IHZhbHVlID0gYWN0ZXNba2V5XVxuICAgICAgbGV0IG5hbWUgPSBBcnJheS5mcm9tKHZhbHVlLm5hbWUpLmpvaW4oXCIsIFwiKVxuICAgICAgbmFtZSA9IHRoaXMucmVuYW1lQ01QKGtleSwgbmFtZSlcbiAgICAgIGNvbnN0IGNvZGVzID0gdGhpcy5nZXRDb2RlcyhrZXksIHZhbHVlLnNob3J0Q29kZSlcbiAgICAgIHRoaXMuYWRkQW5jaG9ycyhrZXkpXG4gICAgICB0aGlzLnByaW50QW5jaG9ycyhrZXkpXG4gICAgICBjb25zb2xlLmxvZyhcIlwiKVxuICAgICAgdGhpcy5wcmludEVudHJ5KHNlY3Rpb25zLCBgJHtuYW1lfSA8JHt2YWx1ZS5zaG9ydENvZGV9VE9DXz5gLCBjb2RlcylcbiAgICAgIGNvbnNvbGUubG9nKFwiXCIpXG4gICAgICBpZiAoT2JqZWN0LmtleXModmFsdWUuYWN0ZXMpLmxlbmd0aCA+IDApXG4gICAgICAgIHRoaXMucHJpbnRMZXZlbCh2YWx1ZS5hY3Rlcywgc2VjdGlvbnMuc3Vic3RyaW5nKDEpLCBjMnBba2V5XSwga2V5KVxuICAgIH1cbiAgfVxuXG4gIHByaW50Q29kZXMoKSB7XG4gICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXModGhpcy5jb2RlcykpXG4gICAgICBjb25zb2xlLmxvZyhgLi4gXyR7a2V5fVRPQzogaHR0cDovL2ApXG4gIH1cblxuICBwcmludEFuY2hvcnNJbmRleCgpIHtcbiAgICBmb3IgKGNvbnN0IGNvZGUgb2YgQXJyYXkuZnJvbSh0aGlzLmFuY2hvcnMpKVxuICAgICAgY29uc29sZS5sb2coYCogOnJlZjpcXGAke2NvZGV9IDwke2NvZGV9PlxcYGApXG4gIH1cblxuICBnZXRBZ2dyZWdhdGVkKHByb2NlZHVyZTogc3RyaW5nKSB7XG4gICAgaWYgKHByb2NlZHVyZSA9PSBcIlByb2PDqWR1cmUgbMOpZ2lzbGF0aXZlXCIpIHtcbiAgICAgIGNvbnN0IHJlbWFwcGVkID0gT2JqZWN0LmtleXModGhpcy5yZW1hcHBlZFByb2NlZHVyZXMpLmpvaW4oXCIsIFwiKVxuICAgICAgcmV0dXJuIGAgKGFncsOpZ2F0aW9uIGRlICR7cmVtYXBwZWR9KWBcbiAgICB9IGVsc2UgcmV0dXJuIFwiXCJcbiAgfVxuXG4gIHByaW50KCk6IHZvaWQge1xuICAgIHRoaXMuYW5jaG9yc1ByaW50ZWQgPSB7fVxuICAgIGZvciAoY29uc3QgW2tleSwgYWN0ZXNdIG9mIE9iamVjdC5lbnRyaWVzKHRoaXMucHJvY2VkdXJlcykgYXMgW1xuICAgICAgc3RyaW5nLFxuICAgICAgYW55LFxuICAgIF1bXSkge1xuICAgICAgY29uc3QgY29kZSA9IGtleS5yZXBsYWNlKC8gKy9nLCBcIl9cIilcbiAgICAgIHRoaXMuY29kZXNbY29kZV0gPSBudWxsXG4gICAgICBjb25zdCBhZ2dyZWdhdGVkID0gdGhpcy5nZXRBZ2dyZWdhdGVkKGtleSlcbiAgICAgIGNvbnN0IHRpdGxlID0gYFxcYCR7a2V5fSA8JHtjb2RlfVRPQ18+XFxgX18ke2FnZ3JlZ2F0ZWR9YFxuICAgICAgY29uc29sZS5sb2codGl0bGUpXG4gICAgICBjb25zdCB1bmRlcmxpbmUgPSBuZXcgQXJyYXkodGl0bGUubGVuZ3RoICsgMSkuam9pbihcIj1cIilcbiAgICAgIGNvbnNvbGUubG9nKHVuZGVybGluZSlcbiAgICAgIHRoaXMucHJpbnRMZXZlbChhY3RlcywgXCItfi4nXCIsIHRoaXMuY29kZTJwYXR0ZXJuW2tleV0sIG51bGwpXG4gICAgfVxuICAgIHRoaXMucHJpbnRDb2RlcygpXG4gICAgdGhpcy5wcmludEFuY2hvcnNJbmRleCgpXG4gIH1cbn1cblxuZnVuY3Rpb24gbWFpbihhcmd2OiBhbnkpOiBudW1iZXIge1xuICBjb25zdCBvcHRpb25zID0gcGFyc2VBcmdzKGFyZ3YpXG4gIGlmIChvcHRpb25zID09PSBudWxsKSByZXR1cm4gMVxuICBsZXQgZG9jID0gbmV3IEFjdGVzRG9jdW1lbnRhdGlvbihcbiAgICAhb3B0aW9uc1tcIm5vLXNhbml0eS1jaGVja3NcIl0sXG4gICAgb3B0aW9ucy52ZXJib3NlLFxuICApXG4gIGRvYy5jb2xsZWN0RmlsZXMob3B0aW9ucy5kYXRhKVxuICBkb2MucHJvY2Vzc0ZpbGVzKG9wdGlvbnMuZGF0YSlcbiAgZG9jLnByaW50KClcbiAgcmV0dXJuIDBcbn1cblxuLyogaXN0YW5idWwgaWdub3JlIGlmICovXG5pZiAocHJvY2Vzcy5hcmd2WzFdLmVuZHNXaXRoKFwiZG9jdW1lbnRfZG9zc2llcnNfbGVnaXNsYXRpZnMudHNcIikpXG4gIHByb2Nlc3MuZXhpdChtYWluKHByb2Nlc3MuYXJndikpXG4iXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPQSxlQUFlLE1BQU0sbUJBQW1CO0FBQy9DLE9BQU9DLGdCQUFnQixNQUFNLG9CQUFvQjtBQUNqRCxPQUFPQyxNQUFNLE1BQU0sUUFBUTtBQUFBLFNBQ2xCQyxJQUFJLEVBQUVDLFFBQVE7QUFFdkIsU0FBU0MsU0FBUyxDQUFDQyxJQUFjLEVBQU87RUFDdEMsTUFBTUMsa0JBQWtCLEdBQUcsQ0FDekI7SUFDRUMsV0FBVyxFQUFFLHlEQUF5RDtJQUN0RUMsYUFBYSxFQUFFLElBQUk7SUFDbkJDLFFBQVEsRUFBRSxJQUFJO0lBQ2RDLElBQUksRUFBRSxNQUFNO0lBQ1pDLElBQUksRUFBRUM7RUFDUixDQUFDLEVBQ0Q7SUFDRUYsSUFBSSxFQUFFLGtCQUFrQjtJQUN4QkMsSUFBSSxFQUFFRSxPQUFPO0lBQ2JOLFdBQVcsRUFBRTtFQUNmLENBQUMsRUFDRDtJQUNFRyxJQUFJLEVBQUUsU0FBUztJQUNmQyxJQUFJLEVBQUVFLE9BQU87SUFDYk4sV0FBVyxFQUFFO0VBQ2YsQ0FBQyxFQUNEO0lBQ0VHLElBQUksRUFBRSxNQUFNO0lBQ1pILFdBQVcsRUFBRTtFQUNmLENBQUMsQ0FDRjtFQUNELE1BQU1PLFFBQVEsR0FBRyxDQUNmO0lBQ0VDLE1BQU0sRUFBRSwrQ0FBK0M7SUFD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
|