@tricoteuses/assemblee 1.5.7 → 1.6.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/README.md +15 -0
- package/lib/api.js +1 -1
- package/lib/api.mjs +1 -1
- package/lib/bugs/acteur-00010/plugin.test.js +1 -1
- package/lib/bugs/acteur-00010/plugin.test.mjs +1 -1
- package/lib/bugs/acteur-00010.js +1 -1
- package/lib/bugs/acteur-00010.mjs +1 -1
- package/lib/bugs/agenda-00002/plugin.test.js +1 -1
- package/lib/bugs/agenda-00002/plugin.test.mjs +1 -1
- package/lib/bugs/agenda-00002.js +1 -1
- package/lib/bugs/agenda-00002.mjs +1 -1
- package/lib/bugs/agenda-00008/plugin.test.js +1 -1
- package/lib/bugs/agenda-00008/plugin.test.mjs +1 -1
- package/lib/bugs/agenda-00008.js +1 -1
- package/lib/bugs/agenda-00008.mjs +1 -1
- package/lib/bugs/agenda-00011/plugin.test.js +1 -1
- package/lib/bugs/agenda-00011/plugin.test.mjs +1 -1
- package/lib/bugs/agenda-00011.js +1 -1
- package/lib/bugs/agenda-00011.mjs +1 -1
- package/lib/bugs.js +1 -1
- package/lib/bugs.mjs +1 -1
- package/lib/cleaners/actes_legislatifs.d.ts +1 -0
- package/lib/cleaners/actes_legislatifs.js +33 -15
- package/lib/cleaners/actes_legislatifs.mjs +32 -15
- package/lib/cleaners/acteurs.js +1 -1
- package/lib/cleaners/acteurs.mjs +1 -1
- package/lib/cleaners/amendements.js +1 -1
- package/lib/cleaners/amendements.mjs +1 -1
- package/lib/cleaners/debats.js +1 -1
- package/lib/cleaners/debats.mjs +1 -1
- package/lib/cleaners/documents.js +1 -1
- package/lib/cleaners/documents.mjs +1 -1
- package/lib/cleaners/dossiers_legislatifs.js +2 -27
- package/lib/cleaners/dossiers_legislatifs.mjs +3 -28
- package/lib/cleaners/index.js +1 -1
- package/lib/cleaners/index.mjs +1 -1
- package/lib/cleaners/organes.js +1 -1
- package/lib/cleaners/organes.mjs +1 -1
- package/lib/cleaners/questions.js +1 -1
- package/lib/cleaners/questions.mjs +1 -1
- package/lib/cleaners/reunions.js +1 -1
- package/lib/cleaners/reunions.mjs +1 -1
- package/lib/cleaners/scrutins.js +1 -1
- package/lib/cleaners/scrutins.mjs +1 -1
- package/lib/cleaners/xml.js +1 -1
- package/lib/cleaners/xml.mjs +1 -1
- package/lib/datasets.js +1 -1
- package/lib/datasets.mjs +1 -1
- package/lib/dates.js +1 -1
- package/lib/dates.mjs +1 -1
- package/lib/dossiers_legislatifs.js +1 -1
- package/lib/dossiers_legislatifs.mjs +1 -1
- package/lib/file_systems.js +1 -1
- package/lib/file_systems.mjs +1 -1
- package/lib/git.js +1 -1
- package/lib/git.mjs +1 -1
- package/lib/index.js +1 -1
- package/lib/index.mjs +1 -1
- package/lib/inserters.js +1 -1
- package/lib/inserters.mjs +1 -1
- package/lib/loaders.d.ts +18 -9
- package/lib/loaders.js +318 -253
- package/lib/loaders.mjs +64 -10
- package/lib/organes.js +1 -1
- package/lib/organes.mjs +1 -1
- package/lib/parsers/documents.js +1 -1
- package/lib/parsers/documents.mjs +1 -1
- package/lib/parsers/index.js +1 -1
- package/lib/parsers/index.mjs +1 -1
- package/lib/parsers/recherche_amendements.js +1 -1
- package/lib/parsers/recherche_amendements.mjs +1 -1
- package/lib/raw_types/acteurs_et_organes.js +1 -1
- package/lib/raw_types/acteurs_et_organes.mjs +1 -1
- package/lib/raw_types/agendas.js +1 -1
- package/lib/raw_types/agendas.mjs +1 -1
- package/lib/raw_types/amendements.js +1 -1
- package/lib/raw_types/amendements.mjs +1 -1
- package/lib/raw_types/debats.js +1 -1
- package/lib/raw_types/debats.mjs +1 -1
- package/lib/raw_types/dossiers_legislatifs.d.ts +17 -9
- package/lib/raw_types/dossiers_legislatifs.js +37 -16
- package/lib/raw_types/dossiers_legislatifs.mjs +37 -14
- package/lib/raw_types/questions.js +1 -1
- package/lib/raw_types/questions.mjs +1 -1
- package/lib/raw_types/scrutins.js +1 -1
- package/lib/raw_types/scrutins.mjs +1 -1
- package/lib/scripts/bugs_helper.js +1 -1
- package/lib/scripts/bugs_helper.mjs +1 -1
- package/lib/scripts/clean_reorganized_data.js +2 -2
- package/lib/scripts/clean_reorganized_data.mjs +2 -2
- package/lib/scripts/diff_amendements.js +1 -1
- package/lib/scripts/diff_amendements.mjs +1 -1
- package/lib/scripts/document_dossiers_legislatifs.js +1 -1
- package/lib/scripts/document_dossiers_legislatifs.mjs +1 -1
- package/lib/scripts/get_today_reunions.js +1 -1
- package/lib/scripts/get_today_reunions.mjs +1 -1
- package/lib/scripts/merge_scrutins.js +1 -1
- package/lib/scripts/merge_scrutins.mjs +1 -1
- package/lib/scripts/parse_textes_lois.js +1 -1
- package/lib/scripts/parse_textes_lois.mjs +1 -1
- package/lib/scripts/raw_types_from_amendements.js +1 -1
- package/lib/scripts/raw_types_from_amendements.mjs +1 -1
- package/lib/scripts/reorganize_data.js +68 -61
- package/lib/scripts/reorganize_data.mjs +68 -61
- package/lib/scripts/retrieve_deputes_photos.js +1 -1
- package/lib/scripts/retrieve_deputes_photos.mjs +1 -1
- package/lib/scripts/retrieve_documents.js +1 -1
- package/lib/scripts/retrieve_documents.mjs +1 -1
- package/lib/scripts/retrieve_open_data.js +1 -1
- package/lib/scripts/retrieve_open_data.mjs +1 -1
- package/lib/scripts/retrieve_pending_amendments.js +1 -1
- package/lib/scripts/retrieve_pending_amendments.mjs +1 -1
- package/lib/scripts/retrieve_senateurs_photos.js +1 -1
- package/lib/scripts/retrieve_senateurs_photos.mjs +1 -1
- package/lib/scripts/retrieve_textes_lois.js +1 -1
- package/lib/scripts/retrieve_textes_lois.mjs +1 -1
- package/lib/scripts/test_load.js +1 -1
- package/lib/scripts/test_load.mjs +1 -1
- package/lib/scripts/test_load_big_files.js +1 -1
- package/lib/scripts/test_load_big_files.mjs +1 -1
- package/lib/scripts/validate_json.js +1 -1
- package/lib/scripts/validate_json.mjs +1 -1
- package/lib/shared_types/codes_actes.d.ts +4 -0
- package/lib/shared_types/codes_actes.js +5 -1
- package/lib/shared_types/codes_actes.mjs +5 -1
- package/lib/strings.js +1 -1
- package/lib/strings.mjs +1 -1
- package/lib/types/acteurs_et_organes.js +1 -1
- package/lib/types/acteurs_et_organes.mjs +1 -1
- package/lib/types/agendas.js +1 -1
- package/lib/types/agendas.mjs +1 -1
- package/lib/types/amendements.js +1 -1
- package/lib/types/amendements.mjs +1 -1
- package/lib/types/debats.js +1 -1
- package/lib/types/debats.mjs +1 -1
- package/lib/types/dossiers_legislatifs.d.ts +11 -0
- package/lib/types/dossiers_legislatifs.js +30 -3
- package/lib/types/dossiers_legislatifs.mjs +29 -2
- package/lib/types/legislatures.js +1 -1
- package/lib/types/legislatures.mjs +1 -1
- package/lib/types/questions.js +1 -1
- package/lib/types/questions.mjs +1 -1
- package/lib/types/scrutins.js +1 -1
- package/lib/types/scrutins.mjs +1 -1
- package/lib/urls.js +1 -1
- package/lib/urls.mjs +1 -1
- package/package.json +4 -3
package/lib/loaders.mjs
CHANGED
|
@@ -20,6 +20,7 @@ const dossierUidRegex = /^DL(R\d+)(L\d+)N(\d+)$/;
|
|
|
20
20
|
const reunionUidRegex = /^RU(AN|CG|SN)(R\d+)(L\d+)([AS]\d{4})(IDC|IDFL?|IDS)(\d+)$/;
|
|
21
21
|
const scrutinUidRegex = /^VTAN(R\d+)(L\d+)V(\d+)$/;
|
|
22
22
|
export function* iterLoadAssembleeActeurs(dataDir, legislature, {
|
|
23
|
+
noValidation = false,
|
|
23
24
|
log = false
|
|
24
25
|
} = {}) {
|
|
25
26
|
const acteursUid = new Set();
|
|
@@ -43,7 +44,12 @@ export function* iterLoadAssembleeActeurs(dataDir, legislature, {
|
|
|
43
44
|
const acteurJson = fs.readFileSync(acteurFilePath, {
|
|
44
45
|
encoding: "utf8"
|
|
45
46
|
});
|
|
46
|
-
|
|
47
|
+
let acteur;
|
|
48
|
+
if (noValidation) {
|
|
49
|
+
acteur = JSON.parse(acteurJson);
|
|
50
|
+
} else {
|
|
51
|
+
acteur = ActeursEtOrganesConvert.toActeur(acteurJson);
|
|
52
|
+
}
|
|
47
53
|
// Keep the first existing "acteur", because the first wrapper is the most complete.
|
|
48
54
|
if (acteursUid.has(acteur.uid)) {
|
|
49
55
|
continue;
|
|
@@ -57,6 +63,7 @@ export function* iterLoadAssembleeActeurs(dataDir, legislature, {
|
|
|
57
63
|
}
|
|
58
64
|
}
|
|
59
65
|
export function* iterLoadAssembleeAmendements(dataDir, legislature, {
|
|
66
|
+
noValidation = false,
|
|
60
67
|
log = false
|
|
61
68
|
} = {}) {
|
|
62
69
|
const amendementsUid = new Set();
|
|
@@ -80,7 +87,12 @@ export function* iterLoadAssembleeAmendements(dataDir, legislature, {
|
|
|
80
87
|
const amendementJson = fs.readFileSync(amendementFilePath, {
|
|
81
88
|
encoding: "utf8"
|
|
82
89
|
});
|
|
83
|
-
|
|
90
|
+
let amendement;
|
|
91
|
+
if (noValidation) {
|
|
92
|
+
amendement = JSON.parse(amendementJson);
|
|
93
|
+
} else {
|
|
94
|
+
amendement = AmendementsConvert.toAmendement(amendementJson);
|
|
95
|
+
}
|
|
84
96
|
if (amendementsUid.has(amendement.uid)) {
|
|
85
97
|
continue;
|
|
86
98
|
}
|
|
@@ -93,6 +105,7 @@ export function* iterLoadAssembleeAmendements(dataDir, legislature, {
|
|
|
93
105
|
}
|
|
94
106
|
}
|
|
95
107
|
export function* iterLoadAssembleeDocuments(dataDir, legislature, {
|
|
108
|
+
noValidation = false,
|
|
96
109
|
log = false
|
|
97
110
|
} = {}) {
|
|
98
111
|
const documentsUid = new Set();
|
|
@@ -116,7 +129,12 @@ export function* iterLoadAssembleeDocuments(dataDir, legislature, {
|
|
|
116
129
|
const documentJson = fs.readFileSync(documentFilePath, {
|
|
117
130
|
encoding: "utf8"
|
|
118
131
|
});
|
|
119
|
-
|
|
132
|
+
let document;
|
|
133
|
+
if (noValidation) {
|
|
134
|
+
document = JSON.parse(documentJson);
|
|
135
|
+
} else {
|
|
136
|
+
document = DossiersLegislatifsConvert.toDocument(documentJson);
|
|
137
|
+
}
|
|
120
138
|
if (documentsUid.has(document.uid)) {
|
|
121
139
|
continue;
|
|
122
140
|
}
|
|
@@ -129,6 +147,7 @@ export function* iterLoadAssembleeDocuments(dataDir, legislature, {
|
|
|
129
147
|
}
|
|
130
148
|
}
|
|
131
149
|
export function* iterLoadAssembleeDossiersParlementaires(dataDir, legislature, {
|
|
150
|
+
noValidation = false,
|
|
132
151
|
log = false
|
|
133
152
|
} = {}) {
|
|
134
153
|
const dossiersParlementairesUid = new Set();
|
|
@@ -152,7 +171,12 @@ export function* iterLoadAssembleeDossiersParlementaires(dataDir, legislature, {
|
|
|
152
171
|
const dossierParlementaireJson = fs.readFileSync(dossierParlementaireFilePath, {
|
|
153
172
|
encoding: "utf8"
|
|
154
173
|
});
|
|
155
|
-
|
|
174
|
+
let dossierParlementaire;
|
|
175
|
+
if (noValidation) {
|
|
176
|
+
dossierParlementaire = JSON.parse(dossierParlementaireJson);
|
|
177
|
+
} else {
|
|
178
|
+
dossierParlementaire = DossiersLegislatifsConvert.toDossierParlementaire(dossierParlementaireJson);
|
|
179
|
+
}
|
|
156
180
|
if (dossiersParlementairesUid.has(dossierParlementaire.uid)) {
|
|
157
181
|
continue;
|
|
158
182
|
}
|
|
@@ -165,6 +189,7 @@ export function* iterLoadAssembleeDossiersParlementaires(dataDir, legislature, {
|
|
|
165
189
|
}
|
|
166
190
|
}
|
|
167
191
|
export function* iterLoadAssembleeOrganes(dataDir, legislature, {
|
|
192
|
+
noValidation = false,
|
|
168
193
|
log = false
|
|
169
194
|
} = {}) {
|
|
170
195
|
const organesUid = new Set();
|
|
@@ -188,7 +213,12 @@ export function* iterLoadAssembleeOrganes(dataDir, legislature, {
|
|
|
188
213
|
const organeJson = fs.readFileSync(organeFilePath, {
|
|
189
214
|
encoding: "utf8"
|
|
190
215
|
});
|
|
191
|
-
|
|
216
|
+
let organe;
|
|
217
|
+
if (noValidation) {
|
|
218
|
+
organe = JSON.parse(organeJson);
|
|
219
|
+
} else {
|
|
220
|
+
organe = ActeursEtOrganesConvert.toOrgane(organeJson);
|
|
221
|
+
}
|
|
192
222
|
// Keep the first existing "organe", because the first wrapper is the most complete.
|
|
193
223
|
if (organesUid.has(organe.uid)) {
|
|
194
224
|
continue;
|
|
@@ -202,6 +232,7 @@ export function* iterLoadAssembleeOrganes(dataDir, legislature, {
|
|
|
202
232
|
}
|
|
203
233
|
}
|
|
204
234
|
export function* iterLoadAssembleeReunions(dataDir, legislature, {
|
|
235
|
+
noValidation = false,
|
|
205
236
|
log = false
|
|
206
237
|
} = {}) {
|
|
207
238
|
const reunionsUid = new Set();
|
|
@@ -225,7 +256,12 @@ export function* iterLoadAssembleeReunions(dataDir, legislature, {
|
|
|
225
256
|
const reunionJson = fs.readFileSync(reunionFilePath, {
|
|
226
257
|
encoding: "utf8"
|
|
227
258
|
});
|
|
228
|
-
|
|
259
|
+
let reunion;
|
|
260
|
+
if (noValidation) {
|
|
261
|
+
reunion = JSON.parse(reunionJson);
|
|
262
|
+
} else {
|
|
263
|
+
reunion = AgendasConvert.toReunion(reunionJson);
|
|
264
|
+
}
|
|
229
265
|
if (reunionsUid.has(reunion.uid)) {
|
|
230
266
|
continue;
|
|
231
267
|
}
|
|
@@ -238,6 +274,7 @@ export function* iterLoadAssembleeReunions(dataDir, legislature, {
|
|
|
238
274
|
}
|
|
239
275
|
}
|
|
240
276
|
export function* iterLoadAssembleeScrutins(dataDir, legislature, {
|
|
277
|
+
noValidation = false,
|
|
241
278
|
log = false
|
|
242
279
|
} = {}) {
|
|
243
280
|
const scrutinsUid = new Set();
|
|
@@ -261,7 +298,12 @@ export function* iterLoadAssembleeScrutins(dataDir, legislature, {
|
|
|
261
298
|
const scrutinJson = fs.readFileSync(scrutinFilePath, {
|
|
262
299
|
encoding: "utf8"
|
|
263
300
|
});
|
|
264
|
-
|
|
301
|
+
let scrutin;
|
|
302
|
+
if (noValidation) {
|
|
303
|
+
scrutin = JSON.parse(scrutinJson);
|
|
304
|
+
} else {
|
|
305
|
+
scrutin = ScrutinsConvert.toScrutin(scrutinJson);
|
|
306
|
+
}
|
|
265
307
|
if (scrutinsUid.has(scrutin.uid)) {
|
|
266
308
|
continue;
|
|
267
309
|
}
|
|
@@ -274,6 +316,7 @@ export function* iterLoadAssembleeScrutins(dataDir, legislature, {
|
|
|
274
316
|
}
|
|
275
317
|
}
|
|
276
318
|
export function* iterLoadAssembleeQuestions(dataDir, legislature, {
|
|
319
|
+
noValidation = false,
|
|
277
320
|
log = false
|
|
278
321
|
} = {}) {
|
|
279
322
|
const questionsUid = new Set();
|
|
@@ -297,7 +340,12 @@ export function* iterLoadAssembleeQuestions(dataDir, legislature, {
|
|
|
297
340
|
const questionJson = fs.readFileSync(questionFilePath, {
|
|
298
341
|
encoding: "utf8"
|
|
299
342
|
});
|
|
300
|
-
|
|
343
|
+
let question;
|
|
344
|
+
if (noValidation) {
|
|
345
|
+
question = JSON.parse(questionJson);
|
|
346
|
+
} else {
|
|
347
|
+
question = QuestionsConvert.toQuestion(questionJson);
|
|
348
|
+
}
|
|
301
349
|
if (questionsUid.has(question.uid)) {
|
|
302
350
|
continue;
|
|
303
351
|
}
|
|
@@ -310,6 +358,7 @@ export function* iterLoadAssembleeQuestions(dataDir, legislature, {
|
|
|
310
358
|
}
|
|
311
359
|
}
|
|
312
360
|
export function* iterLoadAssembleeComptesRendus(dataDir, legislature, {
|
|
361
|
+
noValidation = false,
|
|
313
362
|
log = false
|
|
314
363
|
} = {}) {
|
|
315
364
|
const comptesRendusUid = new Set();
|
|
@@ -333,7 +382,12 @@ export function* iterLoadAssembleeComptesRendus(dataDir, legislature, {
|
|
|
333
382
|
const compteRenduJson = fs.readFileSync(compteRenduFilePath, {
|
|
334
383
|
encoding: "utf8"
|
|
335
384
|
});
|
|
336
|
-
|
|
385
|
+
let compteRendu;
|
|
386
|
+
if (noValidation) {
|
|
387
|
+
compteRendu = JSON.parse(compteRenduJson);
|
|
388
|
+
} else {
|
|
389
|
+
compteRendu = ComptesRendusConvert.toCompteRendu(compteRenduJson);
|
|
390
|
+
}
|
|
337
391
|
if (comptesRendusUid.has(compteRendu.uid)) {
|
|
338
392
|
continue;
|
|
339
393
|
}
|
|
@@ -1070,4 +1124,4 @@ export function pathFromUid(dataDir, uid, dataRegexp) {
|
|
|
1070
1124
|
fs.ensureDirSync(numeroMilliersDir);
|
|
1071
1125
|
return path.join(numeroMilliersDir, uid);
|
|
1072
1126
|
}
|
|
1073
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJhc3NlcnQiLCJmcyIsInBhdGgiLCJFbmFibGVkRGF0YXNldHMiLCJkYXRhc2V0cyIsIndhbGtEaXIiLCJDb252ZXJ0IiwiQWN0ZXVyc0V0T3JnYW5lc0NvbnZlcnQiLCJBZ2VuZGFzQ29udmVydCIsIkFtZW5kZW1lbnRzQ29udmVydCIsIkRvc3NpZXJzTGVnaXNsYXRpZnNDb252ZXJ0IiwiTGVnaXNsYXR1cmUiLCJTY3J1dGluc0NvbnZlcnQiLCJRdWVzdGlvbnNDb252ZXJ0IiwiQ29tcHRlc1JlbmR1c0NvbnZlcnQiLCJkb2N1bWVudFVpZFJlZ2V4IiwiZG9zc2llclVpZFJlZ2V4IiwicmV1bmlvblVpZFJlZ2V4Iiwic2NydXRpblVpZFJlZ2V4IiwiaXRlckxvYWRBc3NlbWJsZWVBY3RldXJzIiwiZGF0YURpciIsImxlZ2lzbGF0dXJlIiwibG9nIiwiYWN0ZXVyc1VpZCIsIlNldCIsImRhdGFzZXQiLCJhY3RldXJzRXRPcmdhbmVzIiwiaWdub3JlRm9yV2ViIiwiQWxsIiwiZGF0YXNldERpciIsImpvaW4iLCJmaWxlbmFtZSIsInJlcGxhY2UiLCJhY3RldXJTcGxpdFBhdGgiLCJhY3RldXJGaWxlbmFtZSIsImxlbmd0aCIsImVuZHNXaXRoIiwiYWN0ZXVyRmlsZVBhdGgiLCJjb25zb2xlIiwiYWN0ZXVySnNvbiIsInJlYWRGaWxlU3luYyIsImVuY29kaW5nIiwiYWN0ZXVyIiwidG9BY3RldXIiLCJoYXMiLCJ1aWQiLCJhZGQiLCJkYXRhc2V0TGVnaXNsYXR1cmUiLCJpdGVyTG9hZEFzc2VtYmxlZUFtZW5kZW1lbnRzIiwiYW1lbmRlbWVudHNVaWQiLCJhbWVuZGVtZW50cyIsImFtZW5kZW1lbnRTcGxpdFBhdGgiLCJhbWVuZGVtZW50RmlsZW5hbWUiLCJhbWVuZGVtZW50RmlsZVBhdGgiLCJhbWVuZGVtZW50SnNvbiIsImFtZW5kZW1lbnQiLCJ0b0FtZW5kZW1lbnQiLCJpdGVyTG9hZEFzc2VtYmxlZURvY3VtZW50cyIsImRvY3VtZW50c1VpZCIsImRvc3NpZXJzTGVnaXNsYXRpZnMiLCJkb2N1bWVudFNwbGl0UGF0aCIsImRvY3VtZW50RmlsZW5hbWUiLCJkb2N1bWVudEZpbGVQYXRoIiwiZG9jdW1lbnRKc29uIiwiZG9jdW1lbnQiLCJ0b0RvY3VtZW50IiwiaXRlckxvYWRBc3NlbWJsZWVEb3NzaWVyc1BhcmxlbWVudGFpcmVzIiwiZG9zc2llcnNQYXJsZW1lbnRhaXJlc1VpZCIsImRvc3NpZXJQYXJsZW1lbnRhaXJlU3BsaXRQYXRoIiwiZG9zc2llclBhcmxlbWVudGFpcmVGaWxlbmFtZSIsImRvc3NpZXJQYXJsZW1lbnRhaXJlRmlsZVBhdGgiLCJkb3NzaWVyUGFybGVtZW50YWlyZUpzb24iLCJkb3NzaWVyUGFybGVtZW50YWlyZSIsInRvRG9zc2llclBhcmxlbWVudGFpcmUiLCJpdGVyTG9hZEFzc2VtYmxlZU9yZ2FuZXMiLCJvcmdhbmVzVWlkIiwib3JnYW5lU3BsaXRQYXRoIiwib3JnYW5lRmlsZW5hbWUiLCJvcmdhbmVGaWxlUGF0aCIsIm9yZ2FuZUpzb24iLCJvcmdhbmUiLCJ0b09yZ2FuZSIsIml0ZXJMb2FkQXNzZW1ibGVlUmV1bmlvbnMiLCJyZXVuaW9uc1VpZCIsImFnZW5kYXMiLCJyZXVuaW9uU3BsaXRQYXRoIiwicmV1bmlvbkZpbGVuYW1lIiwicmV1bmlvbkZpbGVQYXRoIiwicmV1bmlvbkpzb24iLCJyZXVuaW9uIiwidG9SZXVuaW9uIiwiaXRlckxvYWRBc3NlbWJsZWVTY3J1dGlucyIsInNjcnV0aW5zVWlkIiwic2NydXRpbnMiLCJzY3J1dGluU3BsaXRQYXRoIiwic2NydXRpbkZpbGVuYW1lIiwic2NydXRpbkZpbGVQYXRoIiwic2NydXRpbkpzb24iLCJzY3J1dGluIiwidG9TY3J1dGluIiwiaXRlckxvYWRBc3NlbWJsZWVRdWVzdGlvbnMiLCJxdWVzdGlvbnNVaWQiLCJxdWVzdGlvbnMiLCJxdWVzdGlvblNwbGl0UGF0aCIsInF1ZXN0aW9uRmlsZW5hbWUiLCJxdWVzdGlvbkZpbGVQYXRoIiwicXVlc3Rpb25Kc29uIiwicXVlc3Rpb24iLCJ0b1F1ZXN0aW9uIiwiaXRlckxvYWRBc3NlbWJsZWVDb21wdGVzUmVuZHVzIiwiY29tcHRlc1JlbmR1c1VpZCIsImNvbXB0ZXNSZW5kdXNTZWFuY2VzIiwiY29tcHRlUmVuZHVTcGxpdFBhdGgiLCJjb21wdGVSZW5kdUZpbGVuYW1lIiwiY29tcHRlUmVuZHVGaWxlUGF0aCIsImNvbXB0ZVJlbmR1SnNvbiIsImNvbXB0ZVJlbmR1IiwidG9Db21wdGVSZW5kdSIsImxvYWRBc3NlbWJsZWVEYXRhIiwiZW5hYmxlZERhdGFzZXRzIiwiYWN0ZXVyQnlVaWQiLCJvcmdhbmVCeVVpZCIsIkFjdGV1cnNFdE9yZ2FuZXMiLCJ1bmRlZmluZWQiLCJyZXVuaW9uQnlVaWQiLCJyZXVuaW9uc0J5RGF5IiwicmV1bmlvbnNCeURvc3NpZXJVaWQiLCJBZ2VuZGFzIiwiZGF5IiwidGltZXN0YW1wRGVidXQiLCJ0b0lTT1N0cmluZyIsInNwbGl0IiwicmV1bmlvbnNBdERheSIsInB1c2giLCJvZGoiLCJwb2ludE9kaiIsInBvaW50c09kaiIsImRvc3NpZXJMZWdpc2xhdGlmUmVmIiwiZG9zc2llcnNMZWdpc2xhdGlmc1JlZnMiLCJyZXVuaW9uc0F0RG9zc2llclVpZCIsImFtZW5kZW1lbnRCeVVpZCIsIkFtZW5kZW1lbnRzIiwiZG9jdW1lbnRCeVVpZCIsImRvc3NpZXJQYXJsZW1lbnRhaXJlQnlTZW5hdENoZW1pbiIsImRvc3NpZXJQYXJsZW1lbnRhaXJlQnlUaXRyZUNoZW1pbiIsImRvc3NpZXJQYXJsZW1lbnRhaXJlQnlVaWQiLCJEb3NzaWVyc0xlZ2lzbGF0aWZzIiwiZG9zc2llclNwbGl0UGF0aCIsImRvc3NpZXJGaWxlbmFtZSIsImRvc3NpZXJGaWxlUGF0aCIsImRvc3NpZXJKc29uIiwiZG9zc2llciIsInRpdHJlRG9zc2llciIsInNlbmF0Q2hlbWluIiwidGl0cmVDaGVtaW4iLCJwaG90b0J5VWlkIiwiUGhvdG9zIiwianNvbkZpbGVQYXRoIiwiU2VpemUiLCJleGlzdHNTeW5jIiwianNvbiIsIk9iamVjdCIsImFzc2lnbiIsIkpTT04iLCJwYXJzZSIsInNjcnV0aW5CeVVpZCIsIlNjcnV0aW5zIiwicXVlc3Rpb25CeVVpZCIsIlF1ZXN0aW9ucyIsImNvbXB0ZVJlbmR1QnlVaWQiLCJDb21wdGVzUmVuZHVzU2VhbmNlcyIsImNvbXB0ZVJlbmR1UGF0aCIsImxvYWRBc3NlbWJsZWVEYXRhRnJvbUJpZ0ZpbGVzIiwidG9BY3RldXJzRXRPcmdhbmVzIiwiYWN0ZXVycyIsIm9yZ2FuZXMiLCJ0b0FnZW5kYXMiLCJyZXVuaW9ucyIsInRvQW1lbmRlbWVudHMiLCJ0ZXh0ZUxlZ2lzbGF0aWYiLCJ0ZXh0ZXNMZWdpc2xhdGlmcyIsInRvRG9zc2llcnNMZWdpc2xhdGlmcyIsImRvc3NpZXJzUGFybGVtZW50YWlyZXMiLCJ0b1NjcnV0aW5zIiwidG9RdWVzdGlvbnMiLCJjb21wdGVzUmVuZHVzIiwidG9Db21wdGVzUmVuZHVzIiwibG9hZEFzc2VtYmxlZURvY3VtZW50RmlsZSIsImZvcm1hdHMiLCJkb2N1bWVudHNEaXIiLCJkb2N1bWVudERpciIsInBhdGhGcm9tRG9jdW1lbnRVaWQiLCJpbmRleFBhdGgiLCJwYXRoRXhpc3RzU3luYyIsImluZGV4IiwicmVhZEpzb25TeW5jIiwiZm9ybWF0IiwidXJsIiwibG9hZEFzc2VtYmxlZVBob3Rvc0RlcHV0ZXMiLCJsb2FkQXNzZW1ibGVlUGhvdG9zU2VuYXRldXJzIiwibWF0Y2giLCJub3RTdHJpY3RFcXVhbCIsImdyb3VwcyIsImRvY3VtZW50VHlwZSIsImRvY3VtZW50VHlwZTIiLCJjaGFtYnJlRGlyIiwiY2hhbWJyZSIsImNoYW1icmUyIiwicmVwdWJsaXF1ZURpciIsInJlcHVibGlxdWUiLCJyZXB1YmxpcXVlMiIsImxlZ2lzbGF0dXJlRGlyIiwibGVnaXNsYXR1cmUyIiwiZXRhdCIsImVuc3VyZURpclN5bmMiLCJldGF0RGlyIiwibnVtZXJvIiwibnVtZXJvMiIsInN1YnN0cmluZyIsIm51bWVyb01pbGxpZXJzRGlyIiwicGF0aEZyb21Eb3NzaWVyUGFybGVtZW50YWlyZVVpZCIsImRvc3NpZXJzRGlyIiwiZXhlYyIsInBhdGhGcm9tUmV1bmlvblVpZCIsInJldW5pb25zRGlyIiwic2Vzc2lvbkRpciIsImlkRGlyIiwibnVtZXJvTWlsbGlvbnNEaXIiLCJwYXRoRnJvbVNjcnV0aW5VaWQiLCJzY3J1dGluc0RpciIsInBhdGhGcm9tVWlkIiwiZGF0YVJlZ2V4cCJdLCJzb3VyY2VzIjpbIi4uL3NyYy9sb2FkZXJzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vLyBMb2FkIGRhdGEgZnJvbSBmaWxlc1xuXG5pbXBvcnQgYXNzZXJ0IGZyb20gXCJhc3NlcnRcIlxuaW1wb3J0IGZzIGZyb20gXCJmcy1leHRyYVwiXG5pbXBvcnQgcGF0aCBmcm9tIFwicGF0aFwiXG5cbmV4cG9ydCB7IEVuYWJsZWREYXRhc2V0cyB9IGZyb20gXCIuL2RhdGFzZXRzXCJcbmltcG9ydCB7IGRhdGFzZXRzLCBFbmFibGVkRGF0YXNldHMgfSBmcm9tIFwiLi9kYXRhc2V0c1wiXG5pbXBvcnQgdHlwZSB7IERvY3VtZW50RmlsZXNJbmRleCB9IGZyb20gXCIuL2Rvc3NpZXJzX2xlZ2lzbGF0aWZzXCJcbmV4cG9ydCB7IHdhbGtEaXIgfSBmcm9tIFwiLi9maWxlX3N5c3RlbXNcIlxuaW1wb3J0IHsgd2Fsa0RpciB9IGZyb20gXCIuL2ZpbGVfc3lzdGVtc1wiXG5pbXBvcnQge1xuICBBY3RldXIsXG4gIENvbnZlcnQgYXMgQWN0ZXVyc0V0T3JnYW5lc0NvbnZlcnQsXG4gIE9yZ2FuZSxcbiAgUGhvdG8sXG59IGZyb20gXCIuL3R5cGVzL2FjdGV1cnNfZXRfb3JnYW5lc1wiXG5pbXBvcnQgeyBDb252ZXJ0IGFzIEFnZW5kYXNDb252ZXJ0LCBSZXVuaW9uIH0gZnJvbSBcIi4vdHlwZXMvYWdlbmRhc1wiXG5pbXBvcnQgeyBBbWVuZGVtZW50LCBDb252ZXJ0IGFzIEFtZW5kZW1lbnRzQ29udmVydCB9IGZyb20gXCIuL3R5cGVzL2FtZW5kZW1lbnRzXCJcbmltcG9ydCB7XG4gIENvbnZlcnQgYXMgRG9zc2llcnNMZWdpc2xhdGlmc0NvbnZlcnQsXG4gIERvY3VtZW50LFxuICBEb3NzaWVyUGFybGVtZW50YWlyZSxcbn0gZnJvbSBcIi4vdHlwZXMvZG9zc2llcnNfbGVnaXNsYXRpZnNcIlxuaW1wb3J0IHsgTGVnaXNsYXR1cmUgfSBmcm9tIFwiLi90eXBlcy9sZWdpc2xhdHVyZXNcIlxuaW1wb3J0IHsgQ29udmVydCBhcyBTY3J1dGluc0NvbnZlcnQsIFNjcnV0aW4gfSBmcm9tIFwiLi90eXBlcy9zY3J1dGluc1wiXG5pbXBvcnQgeyBDb252ZXJ0IGFzIFF1ZXN0aW9uc0NvbnZlcnQsIFF1ZXN0aW9uIH0gZnJvbSBcIi4vdHlwZXMvcXVlc3Rpb25zXCJcbmltcG9ydCB7IENvbnZlcnQgYXMgQ29tcHRlc1JlbmR1c0NvbnZlcnQsIENvbXB0ZVJlbmR1IH0gZnJvbSBcIi4vdHlwZXMvZGViYXRzXCJcbmltcG9ydCB7IERvY3VtZW50VXJsRm9ybWF0IH0gZnJvbSBcIi4vdXJsc1wiXG5cbmV4cG9ydCBpbnRlcmZhY2UgRGF0YSB7XG4gIHJlYWRvbmx5IGFjdGV1ckJ5VWlkOiB7IFt1aWQ6IHN0cmluZ106IEFjdGV1ciB9XG4gIHJlYWRvbmx5IGFtZW5kZW1lbnRCeVVpZDogeyBbdWlkOiBzdHJpbmddOiBBbWVuZGVtZW50IH1cbiAgcmVhZG9ubHkgZG9jdW1lbnRCeVVpZDogeyBbdWlkOiBzdHJpbmddOiBEb2N1bWVudCB9XG4gIHJlYWRvbmx5IGRvc3NpZXJQYXJsZW1lbnRhaXJlQnlTZW5hdENoZW1pbjoge1xuICAgIFt1aWQ6IHN0cmluZ106IERvc3NpZXJQYXJsZW1lbnRhaXJlXG4gIH1cbiAgcmVhZG9ubHkgZG9zc2llclBhcmxlbWVudGFpcmVCeVRpdHJlQ2hlbWluOiB7XG4gICAgW3VpZDogc3RyaW5nXTogRG9zc2llclBhcmxlbWVudGFpcmVcbiAgfVxuICByZWFkb25seSBkb3NzaWVyUGFybGVtZW50YWlyZUJ5VWlkOiB7IFt1aWQ6IHN0cmluZ106IERvc3NpZXJQYXJsZW1lbnRhaXJlIH1cbiAgcmVhZG9ubHkgb3JnYW5lQnlVaWQ6IHsgW3VpZDogc3RyaW5nXTogT3JnYW5lIH1cbiAgcmVhZG9ubHkgcGhvdG9CeVVpZDogeyBbdWlkOiBzdHJpbmddOiBQaG90byB9XG4gIHJlYWRvbmx5IHJldW5pb25CeVVpZDogeyBbdWlkOiBzdHJpbmddOiBSZXVuaW9uIH1cbiAgcmVhZG9ubHkgcmV1bmlvbnNCeURheTogeyBbZGF5OiBzdHJpbmddOiBSZXVuaW9uW10gfVxuICByZWFkb25seSByZXVuaW9uc0J5RG9zc2llclVpZDogeyBbZG9zc2llclVpZDogc3RyaW5nXTogUmV1bmlvbltdIH1cbiAgcmVhZG9ubHkgc2NydXRpbkJ5VWlkOiB7IFt1aWQ6IHN0cmluZ106IFNjcnV0aW4gfVxuICByZWFkb25seSBxdWVzdGlvbkJ5VWlkOiB7IFt1aWQ6IHN0cmluZ106IFF1ZXN0aW9uIH1cbiAgcmVhZG9ubHkgY29tcHRlUmVuZHVCeVVpZDogeyBbdWlkOiBzdHJpbmddOiBDb21wdGVSZW5kdSB9XG59XG5cbmNvbnN0IGRvY3VtZW50VWlkUmVnZXggPVxuICAvXigoPzxkb2N1bWVudFR5cGU+QUNJTnxBTENOfEFWQ0V8QVZJU3xERUNMfEVUREl8TEVUVHxNRVNTfE1JT058UElPTnxQTlJFfFBSSkx8UkFQUHxSSU5GfFJJT04pKD88Y2hhbWJyZT5BTnxTTikoPzxyZXB1YmxpcXVlPlJcXGQrKVtMU10oPzxsZWdpc2xhdHVyZT5cXGQrKSg/PGV0YXQ+QnxCVEF8QlRDfFRBUCkoPzxudW1lcm8+XFxkKykoLS4qKT8pfCgoPzxkb2N1bWVudFR5cGUyPk1JT04pKD88Y2hhbWJyZTI+QU58U04pKD88cmVwdWJsaXF1ZTI+UlxcZCspW0xTXSg/PGxlZ2lzbGF0dXJlMj5cXGQrKS1OKD88bnVtZXJvMj5cXGQrKSkkL1xuY29uc3QgZG9zc2llclVpZFJlZ2V4ID0gL15ETChSXFxkKykoTFxcZCspTihcXGQrKSQvXG5jb25zdCByZXVuaW9uVWlkUmVnZXggPVxuICAvXlJVKEFOfENHfFNOKShSXFxkKykoTFxcZCspKFtBU11cXGR7NH0pKElEQ3xJREZMP3xJRFMpKFxcZCspJC9cbmNvbnN0IHNjcnV0aW5VaWRSZWdleCA9IC9eVlRBTihSXFxkKykoTFxcZCspVihcXGQrKSQvXG5cbmV4cG9ydCBmdW5jdGlvbiogaXRlckxvYWRBc3NlbWJsZWVBY3RldXJzKFxuICBkYXRhRGlyOiBzdHJpbmcsXG4gIGxlZ2lzbGF0dXJlOiBMZWdpc2xhdHVyZSxcbiAgeyBsb2cgPSBmYWxzZSB9ID0ge30sXG4pOiBHZW5lcmF0b3I8XG4gIHsgYWN0ZXVyOiBBY3RldXI7IGRhdGFzZXRMZWdpc2xhdHVyZTogTGVnaXNsYXR1cmUgfSxcbiAgdm9pZCxcbiAgdW5rbm93blxuPiB7XG4gIGNvbnN0IGFjdGV1cnNVaWQgPSBuZXcgU2V0PHN0cmluZz4oKVxuICBmb3IgKGNvbnN0IGRhdGFzZXQgb2YgZGF0YXNldHMuYWN0ZXVyc0V0T3JnYW5lcykge1xuICAgIGlmIChkYXRhc2V0Lmlnbm9yZUZvcldlYikge1xuICAgICAgY29udGludWVcbiAgICB9XG4gICAgaWYgKFxuICAgICAgbGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgZGF0YXNldC5sZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICBsZWdpc2xhdHVyZSAhPT0gZGF0YXNldC5sZWdpc2xhdHVyZVxuICAgICkge1xuICAgICAgY29udGludWVcbiAgICB9XG4gICAgY29uc3QgZGF0YXNldERpciA9IHBhdGguam9pbihcbiAgICAgIGRhdGFEaXIsXG4gICAgICBkYXRhc2V0LmZpbGVuYW1lLnJlcGxhY2UoL1xcLmpzb24kLywgXCJfbmV0dG95ZVwiKSxcbiAgICApXG5cbiAgICBmb3IgKGNvbnN0IGFjdGV1clNwbGl0UGF0aCBvZiB3YWxrRGlyKGRhdGFzZXREaXIsIFtcImFjdGV1cnNcIl0pKSB7XG4gICAgICBjb25zdCBhY3RldXJGaWxlbmFtZSA9IGFjdGV1clNwbGl0UGF0aFthY3RldXJTcGxpdFBhdGgubGVuZ3RoIC0gMV1cbiAgICAgIGlmICghYWN0ZXVyRmlsZW5hbWUuZW5kc1dpdGgoXCIuanNvblwiKSkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgY29uc3QgYWN0ZXVyRmlsZVBhdGggPSBwYXRoLmpvaW4oZGF0YXNldERpciwgLi4uYWN0ZXVyU3BsaXRQYXRoKVxuICAgICAgaWYgKGxvZykge1xuICAgICAgICBjb25zb2xlLmxvZyhgTG9hZGluZyBmaWxlOiAke2FjdGV1ckZpbGVQYXRofeKApmApXG4gICAgICB9XG4gICAgICBjb25zdCBhY3RldXJKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoYWN0ZXVyRmlsZVBhdGgsIHtcbiAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgfSlcbiAgICAgIGNvbnN0IGFjdGV1ciA9IEFjdGV1cnNFdE9yZ2FuZXNDb252ZXJ0LnRvQWN0ZXVyKGFjdGV1ckpzb24pXG4gICAgICAvLyBLZWVwIHRoZSBmaXJzdCBleGlzdGluZyBcImFjdGV1clwiLCBiZWNhdXNlIHRoZSBmaXJzdCB3cmFwcGVyIGlzIHRoZSBtb3N0IGNvbXBsZXRlLlxuICAgICAgaWYgKGFjdGV1cnNVaWQuaGFzKGFjdGV1ci51aWQpKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBhY3RldXJzVWlkLmFkZChhY3RldXIudWlkKVxuICAgICAgeWllbGQgeyBhY3RldXIsIGRhdGFzZXRMZWdpc2xhdHVyZTogZGF0YXNldC5sZWdpc2xhdHVyZSB9XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiogaXRlckxvYWRBc3NlbWJsZWVBbWVuZGVtZW50cyhcbiAgZGF0YURpcjogc3RyaW5nLFxuICBsZWdpc2xhdHVyZTogTGVnaXNsYXR1cmUsXG4gIHsgbG9nID0gZmFsc2UgfSA9IHt9LFxuKTogR2VuZXJhdG9yPFxuICB7IGFtZW5kZW1lbnQ6IEFtZW5kZW1lbnQ7IGRhdGFzZXRMZWdpc2xhdHVyZTogTGVnaXNsYXR1cmUgfSxcbiAgdm9pZCxcbiAgdW5rbm93blxuPiB7XG4gIGNvbnN0IGFtZW5kZW1lbnRzVWlkID0gbmV3IFNldDxzdHJpbmc+KClcbiAgZm9yIChjb25zdCBkYXRhc2V0IG9mIGRhdGFzZXRzLmFtZW5kZW1lbnRzKSB7XG4gICAgaWYgKGRhdGFzZXQuaWdub3JlRm9yV2ViKSB7XG4gICAgICBjb250aW51ZVxuICAgIH1cbiAgICBpZiAoXG4gICAgICBsZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICBkYXRhc2V0LmxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgIGxlZ2lzbGF0dXJlICE9PSBkYXRhc2V0LmxlZ2lzbGF0dXJlXG4gICAgKSB7XG4gICAgICBjb250aW51ZVxuICAgIH1cbiAgICBjb25zdCBkYXRhc2V0RGlyID0gcGF0aC5qb2luKFxuICAgICAgZGF0YURpcixcbiAgICAgIGRhdGFzZXQuZmlsZW5hbWUucmVwbGFjZSgvXFwuanNvbiQvLCBcIl9uZXR0b3llXCIpLFxuICAgIClcblxuICAgIGZvciAoY29uc3QgYW1lbmRlbWVudFNwbGl0UGF0aCBvZiB3YWxrRGlyKGRhdGFzZXREaXIpKSB7XG4gICAgICBjb25zdCBhbWVuZGVtZW50RmlsZW5hbWUgPVxuICAgICAgICBhbWVuZGVtZW50U3BsaXRQYXRoW2FtZW5kZW1lbnRTcGxpdFBhdGgubGVuZ3RoIC0gMV1cbiAgICAgIGlmICghYW1lbmRlbWVudEZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGNvbnN0IGFtZW5kZW1lbnRGaWxlUGF0aCA9IHBhdGguam9pbihkYXRhc2V0RGlyLCAuLi5hbWVuZGVtZW50U3BsaXRQYXRoKVxuICAgICAgaWYgKGxvZykge1xuICAgICAgICBjb25zb2xlLmxvZyhgTG9hZGluZyBmaWxlOiAke2FtZW5kZW1lbnRGaWxlUGF0aH3igKZgKVxuICAgICAgfVxuICAgICAgY29uc3QgYW1lbmRlbWVudEpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhhbWVuZGVtZW50RmlsZVBhdGgsIHtcbiAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgfSlcbiAgICAgIGNvbnN0IGFtZW5kZW1lbnQgPSBBbWVuZGVtZW50c0NvbnZlcnQudG9BbWVuZGVtZW50KGFtZW5kZW1lbnRKc29uKVxuICAgICAgaWYgKGFtZW5kZW1lbnRzVWlkLmhhcyhhbWVuZGVtZW50LnVpZCkpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGFtZW5kZW1lbnRzVWlkLmFkZChhbWVuZGVtZW50LnVpZClcbiAgICAgIHlpZWxkIHsgYW1lbmRlbWVudCwgZGF0YXNldExlZ2lzbGF0dXJlOiBkYXRhc2V0LmxlZ2lzbGF0dXJlIH1cbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uKiBpdGVyTG9hZEFzc2VtYmxlZURvY3VtZW50cyhcbiAgZGF0YURpcjogc3RyaW5nLFxuICBsZWdpc2xhdHVyZTogTGVnaXNsYXR1cmUsXG4gIHsgbG9nID0gZmFsc2UgfSA9IHt9LFxuKTogR2VuZXJhdG9yPFxuICB7IGRvY3VtZW50OiBEb2N1bWVudDsgZGF0YXNldExlZ2lzbGF0dXJlOiBMZWdpc2xhdHVyZSB9LFxuICB2b2lkLFxuICB1bmtub3duXG4+IHtcbiAgY29uc3QgZG9jdW1lbnRzVWlkID0gbmV3IFNldDxzdHJpbmc+KClcbiAgZm9yIChjb25zdCBkYXRhc2V0IG9mIGRhdGFzZXRzLmRvc3NpZXJzTGVnaXNsYXRpZnMpIHtcbiAgICBpZiAoZGF0YXNldC5pZ25vcmVGb3JXZWIpIHtcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuICAgIGlmIChcbiAgICAgIGxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgIGRhdGFzZXQubGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgbGVnaXNsYXR1cmUgIT09IGRhdGFzZXQubGVnaXNsYXR1cmVcbiAgICApIHtcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuICAgIGNvbnN0IGRhdGFzZXREaXIgPSBwYXRoLmpvaW4oXG4gICAgICBkYXRhRGlyLFxuICAgICAgZGF0YXNldC5maWxlbmFtZS5yZXBsYWNlKC9cXC5qc29uJC8sIFwiX25ldHRveWVcIiksXG4gICAgKVxuXG4gICAgZm9yIChjb25zdCBkb2N1bWVudFNwbGl0UGF0aCBvZiB3YWxrRGlyKGRhdGFzZXREaXIsIFtcImRvY3VtZW50c1wiXSkpIHtcbiAgICAgIGNvbnN0IGRvY3VtZW50RmlsZW5hbWUgPSBkb2N1bWVudFNwbGl0UGF0aFtkb2N1bWVudFNwbGl0UGF0aC5sZW5ndGggLSAxXVxuICAgICAgaWYgKCFkb2N1bWVudEZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGNvbnN0IGRvY3VtZW50RmlsZVBhdGggPSBwYXRoLmpvaW4oZGF0YXNldERpciwgLi4uZG9jdW1lbnRTcGxpdFBhdGgpXG4gICAgICBpZiAobG9nKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBMb2FkaW5nIGZpbGU6ICR7ZG9jdW1lbnRGaWxlUGF0aH3igKZgKVxuICAgICAgfVxuICAgICAgY29uc3QgZG9jdW1lbnRKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoZG9jdW1lbnRGaWxlUGF0aCwge1xuICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICB9KVxuICAgICAgY29uc3QgZG9jdW1lbnQgPSBEb3NzaWVyc0xlZ2lzbGF0aWZzQ29udmVydC50b0RvY3VtZW50KGRvY3VtZW50SnNvbilcbiAgICAgIGlmIChkb2N1bWVudHNVaWQuaGFzKGRvY3VtZW50LnVpZCkpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGRvY3VtZW50c1VpZC5hZGQoZG9jdW1lbnQudWlkKVxuICAgICAgeWllbGQgeyBkb2N1bWVudCwgZGF0YXNldExlZ2lzbGF0dXJlOiBkYXRhc2V0LmxlZ2lzbGF0dXJlIH1cbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uKiBpdGVyTG9hZEFzc2VtYmxlZURvc3NpZXJzUGFybGVtZW50YWlyZXMoXG4gIGRhdGFEaXI6IHN0cmluZyxcbiAgbGVnaXNsYXR1cmU6IExlZ2lzbGF0dXJlLFxuICB7IGxvZyA9IGZhbHNlIH0gPSB7fSxcbik6IEdlbmVyYXRvcjxcbiAge1xuICAgIGRvc3NpZXJQYXJsZW1lbnRhaXJlOiBEb3NzaWVyUGFybGVtZW50YWlyZVxuICAgIGRhdGFzZXRMZWdpc2xhdHVyZTogTGVnaXNsYXR1cmVcbiAgfSxcbiAgdm9pZCxcbiAgdW5rbm93blxuPiB7XG4gIGNvbnN0IGRvc3NpZXJzUGFybGVtZW50YWlyZXNVaWQgPSBuZXcgU2V0PHN0cmluZz4oKVxuICBmb3IgKGNvbnN0IGRhdGFzZXQgb2YgZGF0YXNldHMuZG9zc2llcnNMZWdpc2xhdGlmcykge1xuICAgIGlmIChkYXRhc2V0Lmlnbm9yZUZvcldlYikge1xuICAgICAgY29udGludWVcbiAgICB9XG4gICAgaWYgKFxuICAgICAgbGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgZGF0YXNldC5sZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICBsZWdpc2xhdHVyZSAhPT0gZGF0YXNldC5sZWdpc2xhdHVyZVxuICAgICkge1xuICAgICAgY29udGludWVcbiAgICB9XG4gICAgY29uc3QgZGF0YXNldERpciA9IHBhdGguam9pbihcbiAgICAgIGRhdGFEaXIsXG4gICAgICBkYXRhc2V0LmZpbGVuYW1lLnJlcGxhY2UoL1xcLmpzb24kLywgXCJfbmV0dG95ZVwiKSxcbiAgICApXG5cbiAgICBmb3IgKGNvbnN0IGRvc3NpZXJQYXJsZW1lbnRhaXJlU3BsaXRQYXRoIG9mIHdhbGtEaXIoZGF0YXNldERpciwgW1xuICAgICAgXCJkb3NzaWVyc1wiLFxuICAgIF0pKSB7XG4gICAgICBjb25zdCBkb3NzaWVyUGFybGVtZW50YWlyZUZpbGVuYW1lID1cbiAgICAgICAgZG9zc2llclBhcmxlbWVudGFpcmVTcGxpdFBhdGhbZG9zc2llclBhcmxlbWVudGFpcmVTcGxpdFBhdGgubGVuZ3RoIC0gMV1cbiAgICAgIGlmICghZG9zc2llclBhcmxlbWVudGFpcmVGaWxlbmFtZS5lbmRzV2l0aChcIi5qc29uXCIpKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBjb25zdCBkb3NzaWVyUGFybGVtZW50YWlyZUZpbGVQYXRoID0gcGF0aC5qb2luKFxuICAgICAgICBkYXRhc2V0RGlyLFxuICAgICAgICAuLi5kb3NzaWVyUGFybGVtZW50YWlyZVNwbGl0UGF0aCxcbiAgICAgIClcbiAgICAgIGlmIChsb2cpIHtcbiAgICAgICAgY29uc29sZS5sb2coYExvYWRpbmcgZmlsZTogJHtkb3NzaWVyUGFybGVtZW50YWlyZUZpbGVQYXRofeKApmApXG4gICAgICB9XG4gICAgICBjb25zdCBkb3NzaWVyUGFybGVtZW50YWlyZUpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhcbiAgICAgICAgZG9zc2llclBhcmxlbWVudGFpcmVGaWxlUGF0aCxcbiAgICAgICAge1xuICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgfSxcbiAgICAgIClcbiAgICAgIGNvbnN0IGRvc3NpZXJQYXJsZW1lbnRhaXJlID1cbiAgICAgICAgRG9zc2llcnNMZWdpc2xhdGlmc0NvbnZlcnQudG9Eb3NzaWVyUGFybGVtZW50YWlyZShcbiAgICAgICAgICBkb3NzaWVyUGFybGVtZW50YWlyZUpzb24sXG4gICAgICAgIClcbiAgICAgIGlmIChkb3NzaWVyc1BhcmxlbWVudGFpcmVzVWlkLmhhcyhkb3NzaWVyUGFybGVtZW50YWlyZS51aWQpKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBkb3NzaWVyc1BhcmxlbWVudGFpcmVzVWlkLmFkZChkb3NzaWVyUGFybGVtZW50YWlyZS51aWQpXG4gICAgICB5aWVsZCB7IGRvc3NpZXJQYXJsZW1lbnRhaXJlLCBkYXRhc2V0TGVnaXNsYXR1cmU6IGRhdGFzZXQubGVnaXNsYXR1cmUgfVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24qIGl0ZXJMb2FkQXNzZW1ibGVlT3JnYW5lcyhcbiAgZGF0YURpcjogc3RyaW5nLFxuICBsZWdpc2xhdHVyZTogTGVnaXNsYXR1cmUsXG4gIHsgbG9nID0gZmFsc2UgfSA9IHt9LFxuKTogR2VuZXJhdG9yPFxuICB7IG9yZ2FuZTogT3JnYW5lOyBkYXRhc2V0TGVnaXNsYXR1cmU6IExlZ2lzbGF0dXJlIH0sXG4gIHZvaWQsXG4gIHVua25vd25cbj4ge1xuICBjb25zdCBvcmdhbmVzVWlkID0gbmV3IFNldDxzdHJpbmc+KClcbiAgZm9yIChjb25zdCBkYXRhc2V0IG9mIGRhdGFzZXRzLmFjdGV1cnNFdE9yZ2FuZXMpIHtcbiAgICBpZiAoZGF0YXNldC5pZ25vcmVGb3JXZWIpIHtcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuICAgIGlmIChcbiAgICAgIGxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgIGRhdGFzZXQubGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgbGVnaXNsYXR1cmUgIT09IGRhdGFzZXQubGVnaXNsYXR1cmVcbiAgICApIHtcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuICAgIGNvbnN0IGRhdGFzZXREaXIgPSBwYXRoLmpvaW4oXG4gICAgICBkYXRhRGlyLFxuICAgICAgZGF0YXNldC5maWxlbmFtZS5yZXBsYWNlKC9cXC5qc29uJC8sIFwiX25ldHRveWVcIiksXG4gICAgKVxuXG4gICAgZm9yIChjb25zdCBvcmdhbmVTcGxpdFBhdGggb2Ygd2Fsa0RpcihkYXRhc2V0RGlyLCBbXCJvcmdhbmVzXCJdKSkge1xuICAgICAgY29uc3Qgb3JnYW5lRmlsZW5hbWUgPSBvcmdhbmVTcGxpdFBhdGhbb3JnYW5lU3BsaXRQYXRoLmxlbmd0aCAtIDFdXG4gICAgICBpZiAoIW9yZ2FuZUZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGNvbnN0IG9yZ2FuZUZpbGVQYXRoID0gcGF0aC5qb2luKGRhdGFzZXREaXIsIC4uLm9yZ2FuZVNwbGl0UGF0aClcbiAgICAgIGlmIChsb2cpIHtcbiAgICAgICAgY29uc29sZS5sb2coYExvYWRpbmcgZmlsZTogJHtvcmdhbmVGaWxlUGF0aH3igKZgKVxuICAgICAgfVxuICAgICAgY29uc3Qgb3JnYW5lSnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKG9yZ2FuZUZpbGVQYXRoLCB7XG4gICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgIH0pXG4gICAgICBjb25zdCBvcmdhbmUgPSBBY3RldXJzRXRPcmdhbmVzQ29udmVydC50b09yZ2FuZShvcmdhbmVKc29uKVxuICAgICAgLy8gS2VlcCB0aGUgZmlyc3QgZXhpc3RpbmcgXCJvcmdhbmVcIiwgYmVjYXVzZSB0aGUgZmlyc3Qgd3JhcHBlciBpcyB0aGUgbW9zdCBjb21wbGV0ZS5cbiAgICAgIGlmIChvcmdhbmVzVWlkLmhhcyhvcmdhbmUudWlkKSkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgb3JnYW5lc1VpZC5hZGQob3JnYW5lLnVpZClcbiAgICAgIHlpZWxkIHsgb3JnYW5lLCBkYXRhc2V0TGVnaXNsYXR1cmU6IGRhdGFzZXQubGVnaXNsYXR1cmUgfVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24qIGl0ZXJMb2FkQXNzZW1ibGVlUmV1bmlvbnMoXG4gIGRhdGFEaXI6IHN0cmluZyxcbiAgbGVnaXNsYXR1cmU6IExlZ2lzbGF0dXJlLFxuICB7IGxvZyA9IGZhbHNlIH0gPSB7fSxcbik6IEdlbmVyYXRvcjxcbiAgeyByZXVuaW9uOiBSZXVuaW9uOyBkYXRhc2V0TGVnaXNsYXR1cmU6IExlZ2lzbGF0dXJlIH0sXG4gIHZvaWQsXG4gIHVua25vd25cbj4ge1xuICBjb25zdCByZXVuaW9uc1VpZCA9IG5ldyBTZXQ8c3RyaW5nPigpXG4gIGZvciAoY29uc3QgZGF0YXNldCBvZiBkYXRhc2V0cy5hZ2VuZGFzKSB7XG4gICAgaWYgKGRhdGFzZXQuaWdub3JlRm9yV2ViKSB7XG4gICAgICBjb250aW51ZVxuICAgIH1cbiAgICBpZiAoXG4gICAgICBsZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICBkYXRhc2V0LmxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgIGxlZ2lzbGF0dXJlICE9PSBkYXRhc2V0LmxlZ2lzbGF0dXJlXG4gICAgKSB7XG4gICAgICBjb250aW51ZVxuICAgIH1cbiAgICBjb25zdCBkYXRhc2V0RGlyID0gcGF0aC5qb2luKFxuICAgICAgZGF0YURpcixcbiAgICAgIGRhdGFzZXQuZmlsZW5hbWUucmVwbGFjZSgvXFwuanNvbiQvLCBcIl9uZXR0b3llXCIpLFxuICAgIClcblxuICAgIGZvciAoY29uc3QgcmV1bmlvblNwbGl0UGF0aCBvZiB3YWxrRGlyKGRhdGFzZXREaXIpKSB7XG4gICAgICBjb25zdCByZXVuaW9uRmlsZW5hbWUgPSByZXVuaW9uU3BsaXRQYXRoW3JldW5pb25TcGxpdFBhdGgubGVuZ3RoIC0gMV1cbiAgICAgIGlmICghcmV1bmlvbkZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGNvbnN0IHJldW5pb25GaWxlUGF0aCA9IHBhdGguam9pbihkYXRhc2V0RGlyLCAuLi5yZXVuaW9uU3BsaXRQYXRoKVxuICAgICAgaWYgKGxvZykge1xuICAgICAgICBjb25zb2xlLmxvZyhgTG9hZGluZyBmaWxlOiAke3JldW5pb25GaWxlUGF0aH3igKZgKVxuICAgICAgfVxuICAgICAgY29uc3QgcmV1bmlvbkpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhyZXVuaW9uRmlsZVBhdGgsIHtcbiAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgfSlcbiAgICAgIGNvbnN0IHJldW5pb24gPSBBZ2VuZGFzQ29udmVydC50b1JldW5pb24ocmV1bmlvbkpzb24pXG4gICAgICBpZiAocmV1bmlvbnNVaWQuaGFzKHJldW5pb24udWlkKSkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgcmV1bmlvbnNVaWQuYWRkKHJldW5pb24udWlkKVxuICAgICAgeWllbGQgeyByZXVuaW9uLCBkYXRhc2V0TGVnaXNsYXR1cmU6IGRhdGFzZXQubGVnaXNsYXR1cmUgfVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24qIGl0ZXJMb2FkQXNzZW1ibGVlU2NydXRpbnMoXG4gIGRhdGFEaXI6IHN0cmluZyxcbiAgbGVnaXNsYXR1cmU6IExlZ2lzbGF0dXJlLFxuICB7IGxvZyA9IGZhbHNlIH0gPSB7fSxcbik6IEdlbmVyYXRvcjxcbiAgeyBzY3J1dGluOiBTY3J1dGluOyBkYXRhc2V0TGVnaXNsYXR1cmU6IExlZ2lzbGF0dXJlIH0sXG4gIHZvaWQsXG4gIHVua25vd25cbj4ge1xuICBjb25zdCBzY3J1dGluc1VpZCA9IG5ldyBTZXQ8c3RyaW5nPigpXG4gIGZvciAoY29uc3QgZGF0YXNldCBvZiBkYXRhc2V0cy5zY3J1dGlucykge1xuICAgIGlmIChkYXRhc2V0Lmlnbm9yZUZvcldlYikge1xuICAgICAgY29udGludWVcbiAgICB9XG4gICAgaWYgKFxuICAgICAgbGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgZGF0YXNldC5sZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICBsZWdpc2xhdHVyZSAhPT0gZGF0YXNldC5sZWdpc2xhdHVyZVxuICAgICkge1xuICAgICAgY29udGludWVcbiAgICB9XG4gICAgY29uc3QgZGF0YXNldERpciA9IHBhdGguam9pbihcbiAgICAgIGRhdGFEaXIsXG4gICAgICBkYXRhc2V0LmZpbGVuYW1lLnJlcGxhY2UoL1xcLmpzb24kLywgXCJfbmV0dG95ZVwiKSxcbiAgICApXG5cbiAgICBmb3IgKGNvbnN0IHNjcnV0aW5TcGxpdFBhdGggb2Ygd2Fsa0RpcihkYXRhc2V0RGlyKSkge1xuICAgICAgY29uc3Qgc2NydXRpbkZpbGVuYW1lID0gc2NydXRpblNwbGl0UGF0aFtzY3J1dGluU3BsaXRQYXRoLmxlbmd0aCAtIDFdXG4gICAgICBpZiAoIXNjcnV0aW5GaWxlbmFtZS5lbmRzV2l0aChcIi5qc29uXCIpKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBjb25zdCBzY3J1dGluRmlsZVBhdGggPSBwYXRoLmpvaW4oZGF0YXNldERpciwgLi4uc2NydXRpblNwbGl0UGF0aClcbiAgICAgIGlmIChsb2cpIHtcbiAgICAgICAgY29uc29sZS5sb2coYExvYWRpbmcgZmlsZTogJHtzY3J1dGluRmlsZVBhdGh94oCmYClcbiAgICAgIH1cbiAgICAgIGNvbnN0IHNjcnV0aW5Kc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoc2NydXRpbkZpbGVQYXRoLCB7XG4gICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgIH0pXG4gICAgICBjb25zdCBzY3J1dGluID0gU2NydXRpbnNDb252ZXJ0LnRvU2NydXRpbihzY3J1dGluSnNvbilcbiAgICAgIGlmIChzY3J1dGluc1VpZC5oYXMoc2NydXRpbi51aWQpKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBzY3J1dGluc1VpZC5hZGQoc2NydXRpbi51aWQpXG4gICAgICB5aWVsZCB7IHNjcnV0aW4sIGRhdGFzZXRMZWdpc2xhdHVyZTogZGF0YXNldC5sZWdpc2xhdHVyZSB9XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiogaXRlckxvYWRBc3NlbWJsZWVRdWVzdGlvbnMoXG4gIGRhdGFEaXI6IHN0cmluZyxcbiAgbGVnaXNsYXR1cmU6IExlZ2lzbGF0dXJlLFxuICB7IGxvZyA9IGZhbHNlIH0gPSB7fSxcbik6IEdlbmVyYXRvcjxcbiAgeyBxdWVzdGlvbjogUXVlc3Rpb247IGRhdGFzZXRMZWdpc2xhdHVyZTogTGVnaXNsYXR1cmUgfSxcbiAgdm9pZCxcbiAgdW5rbm93blxuPiB7XG4gIGNvbnN0IHF1ZXN0aW9uc1VpZCA9IG5ldyBTZXQ8c3RyaW5nPigpXG4gIGZvciAoY29uc3QgZGF0YXNldCBvZiBkYXRhc2V0cy5xdWVzdGlvbnMpIHtcbiAgICBpZiAoZGF0YXNldC5pZ25vcmVGb3JXZWIpIHtcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuICAgIGlmIChcbiAgICAgIGxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgIGRhdGFzZXQubGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgbGVnaXNsYXR1cmUgIT09IGRhdGFzZXQubGVnaXNsYXR1cmVcbiAgICApIHtcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuICAgIGNvbnN0IGRhdGFzZXREaXIgPSBwYXRoLmpvaW4oXG4gICAgICBkYXRhRGlyLFxuICAgICAgZGF0YXNldC5maWxlbmFtZS5yZXBsYWNlKC9cXC5qc29uJC8sIFwiX25ldHRveWVcIiksXG4gICAgKVxuXG4gICAgZm9yIChjb25zdCBxdWVzdGlvblNwbGl0UGF0aCBvZiB3YWxrRGlyKGRhdGFzZXREaXIpKSB7XG4gICAgICBjb25zdCBxdWVzdGlvbkZpbGVuYW1lID0gcXVlc3Rpb25TcGxpdFBhdGhbcXVlc3Rpb25TcGxpdFBhdGgubGVuZ3RoIC0gMV1cbiAgICAgIGlmICghcXVlc3Rpb25GaWxlbmFtZS5lbmRzV2l0aChcIi5qc29uXCIpKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBjb25zdCBxdWVzdGlvbkZpbGVQYXRoID0gcGF0aC5qb2luKGRhdGFzZXREaXIsIC4uLnF1ZXN0aW9uU3BsaXRQYXRoKVxuICAgICAgaWYgKGxvZykge1xuICAgICAgICBjb25zb2xlLmxvZyhgTG9hZGluZyBmaWxlOiAke3F1ZXN0aW9uRmlsZVBhdGh94oCmYClcbiAgICAgIH1cbiAgICAgIGNvbnN0IHF1ZXN0aW9uSnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKHF1ZXN0aW9uRmlsZVBhdGgsIHtcbiAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgfSlcbiAgICAgIGNvbnN0IHF1ZXN0aW9uID0gUXVlc3Rpb25zQ29udmVydC50b1F1ZXN0aW9uKHF1ZXN0aW9uSnNvbilcbiAgICAgIGlmIChxdWVzdGlvbnNVaWQuaGFzKHF1ZXN0aW9uLnVpZCkpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIHF1ZXN0aW9uc1VpZC5hZGQocXVlc3Rpb24udWlkKVxuICAgICAgeWllbGQgeyBxdWVzdGlvbiwgZGF0YXNldExlZ2lzbGF0dXJlOiBkYXRhc2V0LmxlZ2lzbGF0dXJlIH1cbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uKiBpdGVyTG9hZEFzc2VtYmxlZUNvbXB0ZXNSZW5kdXMoXG4gIGRhdGFEaXI6IHN0cmluZyxcbiAgbGVnaXNsYXR1cmU6IExlZ2lzbGF0dXJlLFxuICB7IGxvZyA9IGZhbHNlIH0gPSB7fSxcbik6IEdlbmVyYXRvcjxcbiAgeyBjb21wdGVSZW5kdTogQ29tcHRlUmVuZHU7IGRhdGFzZXRMZWdpc2xhdHVyZTogTGVnaXNsYXR1cmUgfSxcbiAgdm9pZCxcbiAgdW5rbm93blxuPiB7XG4gIGNvbnN0IGNvbXB0ZXNSZW5kdXNVaWQgPSBuZXcgU2V0PHN0cmluZz4oKVxuICBmb3IgKGNvbnN0IGRhdGFzZXQgb2YgZGF0YXNldHMuY29tcHRlc1JlbmR1c1NlYW5jZXMpIHtcbiAgICBpZiAoZGF0YXNldC5pZ25vcmVGb3JXZWIpIHtcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuICAgIGlmIChcbiAgICAgIGxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgIGRhdGFzZXQubGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgbGVnaXNsYXR1cmUgIT09IGRhdGFzZXQubGVnaXNsYXR1cmVcbiAgICApIHtcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuICAgIGNvbnN0IGRhdGFzZXREaXIgPSBwYXRoLmpvaW4oXG4gICAgICBkYXRhRGlyLFxuICAgICAgZGF0YXNldC5maWxlbmFtZS5yZXBsYWNlKC9cXC54bWwkLywgXCJfbmV0dG95ZVwiKSxcbiAgICApXG5cbiAgICBmb3IgKGNvbnN0IGNvbXB0ZVJlbmR1U3BsaXRQYXRoIG9mIHdhbGtEaXIoZGF0YXNldERpcikpIHtcbiAgICAgIGNvbnN0IGNvbXB0ZVJlbmR1RmlsZW5hbWUgPVxuICAgICAgICBjb21wdGVSZW5kdVNwbGl0UGF0aFtjb21wdGVSZW5kdVNwbGl0UGF0aC5sZW5ndGggLSAxXVxuICAgICAgaWYgKCFjb21wdGVSZW5kdUZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGNvbnN0IGNvbXB0ZVJlbmR1RmlsZVBhdGggPSBwYXRoLmpvaW4oZGF0YXNldERpciwgLi4uY29tcHRlUmVuZHVTcGxpdFBhdGgpXG4gICAgICBpZiAobG9nKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBMb2FkaW5nIGZpbGU6ICR7Y29tcHRlUmVuZHVGaWxlUGF0aH3igKZgKVxuICAgICAgfVxuICAgICAgY29uc3QgY29tcHRlUmVuZHVKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoY29tcHRlUmVuZHVGaWxlUGF0aCwge1xuICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICB9KVxuICAgICAgY29uc3QgY29tcHRlUmVuZHUgPSBDb21wdGVzUmVuZHVzQ29udmVydC50b0NvbXB0ZVJlbmR1KGNvbXB0ZVJlbmR1SnNvbilcbiAgICAgIGlmIChjb21wdGVzUmVuZHVzVWlkLmhhcyhjb21wdGVSZW5kdS51aWQpKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBjb21wdGVzUmVuZHVzVWlkLmFkZChjb21wdGVSZW5kdS51aWQpXG4gICAgICB5aWVsZCB7IGNvbXB0ZVJlbmR1LCBkYXRhc2V0TGVnaXNsYXR1cmU6IGRhdGFzZXQubGVnaXNsYXR1cmUgfVxuICAgIH1cbiAgfVxufVxuXG4vLy8gTG9hZCBkYXRhIGZyb20gc3BsaXQgZmlsZXMuXG4vLy8gRGVwcmVjYXRlZDogVXNlIGl0ZXJMb2FkLi4uIGl0ZXJhdG9ycyBpbnN0ZWFkLlxuZXhwb3J0IGZ1bmN0aW9uIGxvYWRBc3NlbWJsZWVEYXRhKFxuICBkYXRhRGlyOiBzdHJpbmcsXG4gIGVuYWJsZWREYXRhc2V0czogRW5hYmxlZERhdGFzZXRzLFxuICBsZWdpc2xhdHVyZTogTGVnaXNsYXR1cmUsXG4gIHsgbG9nID0gZmFsc2UgfSA9IHt9LFxuKTogRGF0YSB7XG4gIGNvbnN0IGFjdGV1ckJ5VWlkOiB7IFt1aWQ6IHN0cmluZ106IEFjdGV1ciB9ID0ge31cbiAgY29uc3Qgb3JnYW5lQnlVaWQ6IHsgW3VpZDogc3RyaW5nXTogT3JnYW5lIH0gPSB7fVxuICBpZiAoZW5hYmxlZERhdGFzZXRzICYgRW5hYmxlZERhdGFzZXRzLkFjdGV1cnNFdE9yZ2FuZXMpIHtcbiAgICBmb3IgKGNvbnN0IGRhdGFzZXQgb2YgZGF0YXNldHMuYWN0ZXVyc0V0T3JnYW5lcykge1xuICAgICAgaWYgKGRhdGFzZXQuaWdub3JlRm9yV2ViKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBpZiAoXG4gICAgICAgIGxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgICAgZGF0YXNldC5sZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICAgIGxlZ2lzbGF0dXJlICE9PSBkYXRhc2V0LmxlZ2lzbGF0dXJlXG4gICAgICApIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGNvbnN0IGRhdGFzZXREaXIgPSBwYXRoLmpvaW4oXG4gICAgICAgIGRhdGFEaXIsXG4gICAgICAgIGRhdGFzZXQuZmlsZW5hbWUucmVwbGFjZSgvXFwuanNvbiQvLCBcIl9uZXR0b3llXCIpLFxuICAgICAgKVxuXG4gICAgICBmb3IgKGNvbnN0IGFjdGV1clNwbGl0UGF0aCBvZiB3YWxrRGlyKGRhdGFzZXREaXIsIFtcImFjdGV1cnNcIl0pKSB7XG4gICAgICAgIGNvbnN0IGFjdGV1ckZpbGVuYW1lID0gYWN0ZXVyU3BsaXRQYXRoW2FjdGV1clNwbGl0UGF0aC5sZW5ndGggLSAxXVxuICAgICAgICBpZiAoIWFjdGV1ckZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGFjdGV1ckZpbGVQYXRoID0gcGF0aC5qb2luKGRhdGFzZXREaXIsIC4uLmFjdGV1clNwbGl0UGF0aClcbiAgICAgICAgaWYgKGxvZykge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGBMb2FkaW5nIGZpbGU6ICR7YWN0ZXVyRmlsZVBhdGh94oCmYClcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBhY3RldXJKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoYWN0ZXVyRmlsZVBhdGgsIHtcbiAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgIH0pXG4gICAgICAgIGNvbnN0IGFjdGV1ciA9IEFjdGV1cnNFdE9yZ2FuZXNDb252ZXJ0LnRvQWN0ZXVyKGFjdGV1ckpzb24pXG4gICAgICAgIC8vIEtlZXAgdGhlIGZpcnN0IGV4aXN0aW5nIFwiYWN0ZXVyXCIsIGJlY2F1c2UgdGhlIGZpcnN0IHdyYXBwZXIgaXMgdGhlIG1vc3QgY29tcGxldGUuXG4gICAgICAgIGlmIChhY3RldXJCeVVpZFthY3RldXIudWlkXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgYWN0ZXVyQnlVaWRbYWN0ZXVyLnVpZF0gPSBhY3RldXJcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBmb3IgKGNvbnN0IG9yZ2FuZVNwbGl0UGF0aCBvZiB3YWxrRGlyKGRhdGFzZXREaXIsIFtcIm9yZ2FuZXNcIl0pKSB7XG4gICAgICAgIGNvbnN0IG9yZ2FuZUZpbGVuYW1lID0gb3JnYW5lU3BsaXRQYXRoW29yZ2FuZVNwbGl0UGF0aC5sZW5ndGggLSAxXVxuICAgICAgICBpZiAoIW9yZ2FuZUZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG9yZ2FuZUZpbGVQYXRoID0gcGF0aC5qb2luKGRhdGFzZXREaXIsIC4uLm9yZ2FuZVNwbGl0UGF0aClcbiAgICAgICAgaWYgKGxvZykge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGBMb2FkaW5nIGZpbGU6ICR7b3JnYW5lRmlsZVBhdGh94oCmYClcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBvcmdhbmVKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMob3JnYW5lRmlsZVBhdGgsIHtcbiAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgIH0pXG4gICAgICAgIGNvbnN0IG9yZ2FuZSA9IEFjdGV1cnNFdE9yZ2FuZXNDb252ZXJ0LnRvT3JnYW5lKG9yZ2FuZUpzb24pXG4gICAgICAgIC8vIEtlZXAgdGhlIGZpcnN0IGV4aXN0aW5nIFwib3JnYW5lXCIsIGJlY2F1c2UgdGhlIGZpcnN0IHdyYXBwZXIgaXMgdGhlIG1vc3QgY29tcGxldGUuXG4gICAgICAgIGlmIChvcmdhbmVCeVVpZFtvcmdhbmUudWlkXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgb3JnYW5lQnlVaWRbb3JnYW5lLnVpZF0gPSBvcmdhbmVcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHJldW5pb25CeVVpZDogeyBbdWlkOiBzdHJpbmddOiBSZXVuaW9uIH0gPSB7fVxuICBjb25zdCByZXVuaW9uc0J5RGF5OiB7IFtkYXk6IHN0cmluZ106IFJldW5pb25bXSB9ID0ge31cbiAgY29uc3QgcmV1bmlvbnNCeURvc3NpZXJVaWQ6IHsgW2Rvc3NpZXJVaWQ6IHN0cmluZ106IFJldW5pb25bXSB9ID0ge31cbiAgaWYgKGVuYWJsZWREYXRhc2V0cyAmIEVuYWJsZWREYXRhc2V0cy5BZ2VuZGFzKSB7XG4gICAgZm9yIChjb25zdCBkYXRhc2V0IG9mIGRhdGFzZXRzLmFnZW5kYXMpIHtcbiAgICAgIGlmIChkYXRhc2V0Lmlnbm9yZUZvcldlYikge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgaWYgKFxuICAgICAgICBsZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICAgIGRhdGFzZXQubGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgICBsZWdpc2xhdHVyZSAhPT0gZGF0YXNldC5sZWdpc2xhdHVyZVxuICAgICAgKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBjb25zdCBkYXRhc2V0RGlyID0gcGF0aC5qb2luKFxuICAgICAgICBkYXRhRGlyLFxuICAgICAgICBkYXRhc2V0LmZpbGVuYW1lLnJlcGxhY2UoL1xcLmpzb24kLywgXCJfbmV0dG95ZVwiKSxcbiAgICAgIClcbiAgICAgIGZvciAoY29uc3QgcmV1bmlvblNwbGl0UGF0aCBvZiB3YWxrRGlyKGRhdGFzZXREaXIpKSB7XG4gICAgICAgIGNvbnN0IHJldW5pb25GaWxlbmFtZSA9IHJldW5pb25TcGxpdFBhdGhbcmV1bmlvblNwbGl0UGF0aC5sZW5ndGggLSAxXVxuICAgICAgICBpZiAoIXJldW5pb25GaWxlbmFtZS5lbmRzV2l0aChcIi5qc29uXCIpKSB7XG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXVuaW9uRmlsZVBhdGggPSBwYXRoLmpvaW4oZGF0YXNldERpciwgLi4ucmV1bmlvblNwbGl0UGF0aClcbiAgICAgICAgaWYgKGxvZykge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGBMb2FkaW5nIGZpbGU6ICR7cmV1bmlvbkZpbGVQYXRofeKApmApXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmV1bmlvbkpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhyZXVuaW9uRmlsZVBhdGgsIHtcbiAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgIH0pXG4gICAgICAgIGNvbnN0IHJldW5pb24gPSBBZ2VuZGFzQ29udmVydC50b1JldW5pb24ocmV1bmlvbkpzb24pXG4gICAgICAgIGlmIChyZXVuaW9uQnlVaWRbcmV1bmlvbi51aWRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICByZXVuaW9uQnlVaWRbcmV1bmlvbi51aWRdID0gcmV1bmlvblxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZGF5ID0gcmV1bmlvbi50aW1lc3RhbXBEZWJ1dC50b0lTT1N0cmluZygpLnNwbGl0KFwiVFwiKVswXVxuICAgICAgICBsZXQgcmV1bmlvbnNBdERheSA9IHJldW5pb25zQnlEYXlbZGF5XVxuICAgICAgICBpZiAocmV1bmlvbnNBdERheSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgcmV1bmlvbnNBdERheSA9IHJldW5pb25zQnlEYXlbZGF5XSA9IFtdXG4gICAgICAgIH1cbiAgICAgICAgcmV1bmlvbnNBdERheS5wdXNoKHJldW5pb24pXG5cbiAgICAgICAgY29uc3Qgb2RqID0gcmV1bmlvbi5vZGpcbiAgICAgICAgaWYgKG9kaiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgZm9yIChjb25zdCBwb2ludE9kaiBvZiBvZGoucG9pbnRzT2RqIHx8IFtdKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGRvc3NpZXJMZWdpc2xhdGlmUmVmIG9mIHBvaW50T2RqLmRvc3NpZXJzTGVnaXNsYXRpZnNSZWZzIHx8XG4gICAgICAgICAgICAgIFtdKSB7XG4gICAgICAgICAgICAgIGxldCByZXVuaW9uc0F0RG9zc2llclVpZCA9XG4gICAgICAgICAgICAgICAgcmV1bmlvbnNCeURvc3NpZXJVaWRbZG9zc2llckxlZ2lzbGF0aWZSZWZdXG4gICAgICAgICAgICAgIGlmIChyZXVuaW9uc0F0RG9zc2llclVpZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgcmV1bmlvbnNBdERvc3NpZXJVaWQgPSByZXVuaW9uc0J5RG9zc2llclVpZFtcbiAgICAgICAgICAgICAgICAgIGRvc3NpZXJMZWdpc2xhdGlmUmVmXG4gICAgICAgICAgICAgICAgXSA9IFtdXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmV1bmlvbnNBdERvc3NpZXJVaWQucHVzaChyZXVuaW9uKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGFtZW5kZW1lbnRCeVVpZDogeyBbdWlkOiBzdHJpbmddOiBBbWVuZGVtZW50IH0gPSB7fVxuICBpZiAoZW5hYmxlZERhdGFzZXRzICYgRW5hYmxlZERhdGFzZXRzLkFtZW5kZW1lbnRzKSB7XG4gICAgZm9yIChjb25zdCBkYXRhc2V0IG9mIGRhdGFzZXRzLmFtZW5kZW1lbnRzKSB7XG4gICAgICBpZiAoZGF0YXNldC5pZ25vcmVGb3JXZWIpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGlmIChcbiAgICAgICAgbGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgICBkYXRhc2V0LmxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgICAgbGVnaXNsYXR1cmUgIT09IGRhdGFzZXQubGVnaXNsYXR1cmVcbiAgICAgICkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgY29uc3QgZGF0YXNldERpciA9IHBhdGguam9pbihcbiAgICAgICAgZGF0YURpcixcbiAgICAgICAgZGF0YXNldC5maWxlbmFtZS5yZXBsYWNlKC9cXC5qc29uJC8sIFwiX25ldHRveWVcIiksXG4gICAgICApXG5cbiAgICAgIGZvciAoY29uc3QgYW1lbmRlbWVudFNwbGl0UGF0aCBvZiB3YWxrRGlyKGRhdGFzZXREaXIpKSB7XG4gICAgICAgIGNvbnN0IGFtZW5kZW1lbnRGaWxlbmFtZSA9XG4gICAgICAgICAgYW1lbmRlbWVudFNwbGl0UGF0aFthbWVuZGVtZW50U3BsaXRQYXRoLmxlbmd0aCAtIDFdXG4gICAgICAgIGlmICghYW1lbmRlbWVudEZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGFtZW5kZW1lbnRGaWxlUGF0aCA9IHBhdGguam9pbihkYXRhc2V0RGlyLCAuLi5hbWVuZGVtZW50U3BsaXRQYXRoKVxuICAgICAgICBpZiAobG9nKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coYExvYWRpbmcgZmlsZTogJHthbWVuZGVtZW50RmlsZVBhdGh94oCmYClcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBhbWVuZGVtZW50SnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKGFtZW5kZW1lbnRGaWxlUGF0aCwge1xuICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgfSlcbiAgICAgICAgY29uc3QgYW1lbmRlbWVudCA9IEFtZW5kZW1lbnRzQ29udmVydC50b0FtZW5kZW1lbnQoYW1lbmRlbWVudEpzb24pXG4gICAgICAgIGlmIChhbWVuZGVtZW50QnlVaWRbYW1lbmRlbWVudC51aWRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBhbWVuZGVtZW50QnlVaWRbYW1lbmRlbWVudC51aWRdID0gYW1lbmRlbWVudFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY29uc3QgZG9jdW1lbnRCeVVpZDogeyBbdWlkOiBzdHJpbmddOiBEb2N1bWVudCB9ID0ge31cbiAgY29uc3QgZG9zc2llclBhcmxlbWVudGFpcmVCeVNlbmF0Q2hlbWluOiB7XG4gICAgW3VpZDogc3RyaW5nXTogRG9zc2llclBhcmxlbWVudGFpcmVcbiAgfSA9IHt9XG4gIGNvbnN0IGRvc3NpZXJQYXJsZW1lbnRhaXJlQnlUaXRyZUNoZW1pbjoge1xuICAgIFt1aWQ6IHN0cmluZ106IERvc3NpZXJQYXJsZW1lbnRhaXJlXG4gIH0gPSB7fVxuICBjb25zdCBkb3NzaWVyUGFybGVtZW50YWlyZUJ5VWlkOiB7IFt1aWQ6IHN0cmluZ106IERvc3NpZXJQYXJsZW1lbnRhaXJlIH0gPSB7fVxuICBpZiAoZW5hYmxlZERhdGFzZXRzICYgRW5hYmxlZERhdGFzZXRzLkRvc3NpZXJzTGVnaXNsYXRpZnMpIHtcbiAgICBmb3IgKGNvbnN0IGRhdGFzZXQgb2YgZGF0YXNldHMuZG9zc2llcnNMZWdpc2xhdGlmcykge1xuICAgICAgaWYgKGRhdGFzZXQuaWdub3JlRm9yV2ViKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBpZiAoXG4gICAgICAgIGxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgICAgZGF0YXNldC5sZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICAgIGxlZ2lzbGF0dXJlICE9PSBkYXRhc2V0LmxlZ2lzbGF0dXJlXG4gICAgICApIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGNvbnN0IGRhdGFzZXREaXIgPSBwYXRoLmpvaW4oXG4gICAgICAgIGRhdGFEaXIsXG4gICAgICAgIGRhdGFzZXQuZmlsZW5hbWUucmVwbGFjZSgvXFwuanNvbiQvLCBcIl9uZXR0b3llXCIpLFxuICAgICAgKVxuXG4gICAgICBmb3IgKGNvbnN0IGRvY3VtZW50U3BsaXRQYXRoIG9mIHdhbGtEaXIoZGF0YXNldERpciwgW1wiZG9jdW1lbnRzXCJdKSkge1xuICAgICAgICBjb25zdCBkb2N1bWVudEZpbGVuYW1lID0gZG9jdW1lbnRTcGxpdFBhdGhbZG9jdW1lbnRTcGxpdFBhdGgubGVuZ3RoIC0gMV1cbiAgICAgICAgaWYgKCFkb2N1bWVudEZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRvY3VtZW50RmlsZVBhdGggPSBwYXRoLmpvaW4oZGF0YXNldERpciwgLi4uZG9jdW1lbnRTcGxpdFBhdGgpXG4gICAgICAgIGlmIChsb2cpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgTG9hZGluZyBmaWxlOiAke2RvY3VtZW50RmlsZVBhdGh94oCmYClcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkb2N1bWVudEpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhkb2N1bWVudEZpbGVQYXRoLCB7XG4gICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICB9KVxuICAgICAgICBjb25zdCBkb2N1bWVudCA9IERvc3NpZXJzTGVnaXNsYXRpZnNDb252ZXJ0LnRvRG9jdW1lbnQoZG9jdW1lbnRKc29uKVxuICAgICAgICBpZiAoZG9jdW1lbnRCeVVpZFtkb2N1bWVudC51aWRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBkb2N1bWVudEJ5VWlkW2RvY3VtZW50LnVpZF0gPSBkb2N1bWVudFxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGZvciAoY29uc3QgZG9zc2llclNwbGl0UGF0aCBvZiB3YWxrRGlyKGRhdGFzZXREaXIsIFtcImRvc3NpZXJzXCJdKSkge1xuICAgICAgICBjb25zdCBkb3NzaWVyRmlsZW5hbWUgPSBkb3NzaWVyU3BsaXRQYXRoW2Rvc3NpZXJTcGxpdFBhdGgubGVuZ3RoIC0gMV1cbiAgICAgICAgaWYgKCFkb3NzaWVyRmlsZW5hbWUuZW5kc1dpdGgoXCIuanNvblwiKSkge1xuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZG9zc2llckZpbGVQYXRoID0gcGF0aC5qb2luKGRhdGFzZXREaXIsIC4uLmRvc3NpZXJTcGxpdFBhdGgpXG4gICAgICAgIGlmIChsb2cpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgTG9hZGluZyBmaWxlOiAke2Rvc3NpZXJGaWxlUGF0aH3igKZgKVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRvc3NpZXJKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoZG9zc2llckZpbGVQYXRoLCB7XG4gICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICB9KVxuICAgICAgICBjb25zdCBkb3NzaWVyID1cbiAgICAgICAgICBEb3NzaWVyc0xlZ2lzbGF0aWZzQ29udmVydC50b0Rvc3NpZXJQYXJsZW1lbnRhaXJlKGRvc3NpZXJKc29uKVxuICAgICAgICBjb25zdCB0aXRyZURvc3NpZXIgPSBkb3NzaWVyLnRpdHJlRG9zc2llclxuICAgICAgICBpZiAoXG4gICAgICAgICAgdGl0cmVEb3NzaWVyLnNlbmF0Q2hlbWluICYmXG4gICAgICAgICAgZG9zc2llclBhcmxlbWVudGFpcmVCeVNlbmF0Q2hlbWluW3RpdHJlRG9zc2llci5zZW5hdENoZW1pbl0gPT09XG4gICAgICAgICAgICB1bmRlZmluZWRcbiAgICAgICAgKSB7XG4gICAgICAgICAgZG9zc2llclBhcmxlbWVudGFpcmVCeVNlbmF0Q2hlbWluW3RpdHJlRG9zc2llci5zZW5hdENoZW1pbl0gPSBkb3NzaWVyXG4gICAgICAgIH1cbiAgICAgICAgaWYgKFxuICAgICAgICAgIHRpdHJlRG9zc2llci50aXRyZUNoZW1pbiAmJlxuICAgICAgICAgIGRvc3NpZXJQYXJsZW1lbnRhaXJlQnlUaXRyZUNoZW1pblt0aXRyZURvc3NpZXIudGl0cmVDaGVtaW5dID09PVxuICAgICAgICAgICAgdW5kZWZpbmVkXG4gICAgICAgICkge1xuICAgICAgICAgIGRvc3NpZXJQYXJsZW1lbnRhaXJlQnlUaXRyZUNoZW1pblt0aXRyZURvc3NpZXIudGl0cmVDaGVtaW5dID0gZG9zc2llclxuICAgICAgICB9XG4gICAgICAgIGlmIChkb3NzaWVyUGFybGVtZW50YWlyZUJ5VWlkW2Rvc3NpZXIudWlkXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgZG9zc2llclBhcmxlbWVudGFpcmVCeVVpZFtkb3NzaWVyLnVpZF0gPSBkb3NzaWVyXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBsZXQgcGhvdG9CeVVpZDogeyBbdWlkOiBzdHJpbmddOiBQaG90byB9ID0ge31cbiAgaWYgKGVuYWJsZWREYXRhc2V0cyAmIEVuYWJsZWREYXRhc2V0cy5QaG90b3MpIHtcbiAgICB7XG4gICAgICBjb25zdCBqc29uRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICAgICAgZGF0YURpcixcbiAgICAgICAgYHBob3Rvc19kZXB1dGVzXyR7XG4gICAgICAgICAgLy8gVE9ETzogSGFuZGxlIExlZ2lzbGF0dXJlLkFsbC5cbiAgICAgICAgICBsZWdpc2xhdHVyZSA9PT0gTGVnaXNsYXR1cmUuQWxsID8gTGVnaXNsYXR1cmUuU2VpemUgOiBsZWdpc2xhdHVyZVxuICAgICAgICB9YCxcbiAgICAgICAgXCJkZXB1dGVzLmpzb25cIixcbiAgICAgIClcbiAgICAgIGlmIChmcy5leGlzdHNTeW5jKGpzb25GaWxlUGF0aCkpIHtcbiAgICAgICAgaWYgKGxvZykge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGBMb2FkaW5nIGZpbGU6ICR7anNvbkZpbGVQYXRofWApXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QganNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKGpzb25GaWxlUGF0aCwgeyBlbmNvZGluZzogXCJ1dGY4XCIgfSlcbiAgICAgICAgT2JqZWN0LmFzc2lnbihwaG90b0J5VWlkLCBKU09OLnBhcnNlKGpzb24pKVxuICAgICAgfSBlbHNlIGlmIChsb2cpIHtcbiAgICAgICAgY29uc29sZS5sb2coYElnbm9yaW5nIG1pc3NpbmcgZmlsZTogJHtqc29uRmlsZVBhdGh9YClcbiAgICAgIH1cbiAgICB9XG5cbiAgICB7XG4gICAgICBjb25zdCBqc29uRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICAgICAgZGF0YURpcixcbiAgICAgICAgXCJwaG90b3Nfc2VuYXRldXJzXCIsXG4gICAgICAgIFwic2VuYXRldXJzLmpzb25cIixcbiAgICAgIClcbiAgICAgIGlmIChmcy5leGlzdHNTeW5jKGpzb25GaWxlUGF0aCkpIHtcbiAgICAgICAgaWYgKGxvZykge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGBMb2FkaW5nIGZpbGU6ICR7anNvbkZpbGVQYXRofWApXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QganNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKGpzb25GaWxlUGF0aCwgeyBlbmNvZGluZzogXCJ1dGY4XCIgfSlcbiAgICAgICAgT2JqZWN0LmFzc2lnbihwaG90b0J5VWlkLCBKU09OLnBhcnNlKGpzb24pKVxuICAgICAgfSBlbHNlIGlmIChsb2cpIHtcbiAgICAgICAgY29uc29sZS5sb2coYElnbm9yaW5nIG1pc3NpbmcgZmlsZTogJHtqc29uRmlsZVBhdGh9YClcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjb25zdCBzY3J1dGluQnlVaWQ6IHsgW3VpZDogc3RyaW5nXTogU2NydXRpbiB9ID0ge31cbiAgaWYgKGVuYWJsZWREYXRhc2V0cyAmIEVuYWJsZWREYXRhc2V0cy5TY3J1dGlucykge1xuICAgIGZvciAoY29uc3QgZGF0YXNldCBvZiBkYXRhc2V0cy5zY3J1dGlucykge1xuICAgICAgaWYgKGRhdGFzZXQuaWdub3JlRm9yV2ViKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBpZiAoXG4gICAgICAgIGxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgICAgZGF0YXNldC5sZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICAgIGxlZ2lzbGF0dXJlICE9PSBkYXRhc2V0LmxlZ2lzbGF0dXJlXG4gICAgICApIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGNvbnN0IGRhdGFzZXREaXIgPSBwYXRoLmpvaW4oXG4gICAgICAgIGRhdGFEaXIsXG4gICAgICAgIGRhdGFzZXQuZmlsZW5hbWUucmVwbGFjZSgvXFwuanNvbiQvLCBcIl9uZXR0b3llXCIpLFxuICAgICAgKVxuXG4gICAgICBmb3IgKGNvbnN0IHNjcnV0aW5TcGxpdFBhdGggb2Ygd2Fsa0RpcihkYXRhc2V0RGlyKSkge1xuICAgICAgICBjb25zdCBzY3J1dGluRmlsZW5hbWUgPSBzY3J1dGluU3BsaXRQYXRoW3NjcnV0aW5TcGxpdFBhdGgubGVuZ3RoIC0gMV1cbiAgICAgICAgaWYgKCFzY3J1dGluRmlsZW5hbWUuZW5kc1dpdGgoXCIuanNvblwiKSkge1xuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc2NydXRpbkZpbGVQYXRoID0gcGF0aC5qb2luKGRhdGFzZXREaXIsIC4uLnNjcnV0aW5TcGxpdFBhdGgpXG4gICAgICAgIGlmIChsb2cpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgTG9hZGluZyBmaWxlOiAke3NjcnV0aW5GaWxlUGF0aH3igKZgKVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNjcnV0aW5Kc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoc2NydXRpbkZpbGVQYXRoLCB7XG4gICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICB9KVxuICAgICAgICBjb25zdCBzY3J1dGluID0gU2NydXRpbnNDb252ZXJ0LnRvU2NydXRpbihzY3J1dGluSnNvbilcbiAgICAgICAgaWYgKHNjcnV0aW5CeVVpZFtzY3J1dGluLnVpZF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHNjcnV0aW5CeVVpZFtzY3J1dGluLnVpZF0gPSBzY3J1dGluXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjb25zdCBxdWVzdGlvbkJ5VWlkOiB7IFt1aWQ6IHN0cmluZ106IFF1ZXN0aW9uIH0gPSB7fVxuICBpZiAoZW5hYmxlZERhdGFzZXRzICYgRW5hYmxlZERhdGFzZXRzLlF1ZXN0aW9ucykge1xuICAgIGZvciAoY29uc3QgZGF0YXNldCBvZiBkYXRhc2V0cy5xdWVzdGlvbnMpIHtcbiAgICAgIGlmIChkYXRhc2V0Lmlnbm9yZUZvcldlYikge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgaWYgKFxuICAgICAgICBsZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICAgIGRhdGFzZXQubGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgICBsZWdpc2xhdHVyZSAhPT0gZGF0YXNldC5sZWdpc2xhdHVyZVxuICAgICAgKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBjb25zdCBkYXRhc2V0RGlyID0gcGF0aC5qb2luKFxuICAgICAgICBkYXRhRGlyLFxuICAgICAgICBkYXRhc2V0LmZpbGVuYW1lLnJlcGxhY2UoL1xcLmpzb24kLywgXCJfbmV0dG95ZVwiKSxcbiAgICAgIClcblxuICAgICAgZm9yIChjb25zdCBxdWVzdGlvblNwbGl0UGF0aCBvZiB3YWxrRGlyKGRhdGFzZXREaXIpKSB7XG4gICAgICAgIGNvbnN0IHF1ZXN0aW9uRmlsZW5hbWUgPSBxdWVzdGlvblNwbGl0UGF0aFtxdWVzdGlvblNwbGl0UGF0aC5sZW5ndGggLSAxXVxuICAgICAgICBpZiAoIXF1ZXN0aW9uRmlsZW5hbWUuZW5kc1dpdGgoXCIuanNvblwiKSkge1xuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcXVlc3Rpb25GaWxlUGF0aCA9IHBhdGguam9pbihkYXRhc2V0RGlyLCAuLi5xdWVzdGlvblNwbGl0UGF0aClcbiAgICAgICAgaWYgKGxvZykge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGBMb2FkaW5nIGZpbGU6ICR7cXVlc3Rpb25GaWxlUGF0aH3igKZgKVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHF1ZXN0aW9uSnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKHF1ZXN0aW9uRmlsZVBhdGgsIHtcbiAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgIH0pXG4gICAgICAgIGNvbnN0IHF1ZXN0aW9uID0gUXVlc3Rpb25zQ29udmVydC50b1F1ZXN0aW9uKHF1ZXN0aW9uSnNvbilcbiAgICAgICAgaWYgKHF1ZXN0aW9uQnlVaWRbcXVlc3Rpb24udWlkXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgcXVlc3Rpb25CeVVpZFtxdWVzdGlvbi51aWRdID0gcXVlc3Rpb25cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGNvbXB0ZVJlbmR1QnlVaWQ6IHsgW3VpZDogc3RyaW5nXTogQ29tcHRlUmVuZHUgfSA9IHt9XG4gIGlmIChlbmFibGVkRGF0YXNldHMgJiBFbmFibGVkRGF0YXNldHMuQ29tcHRlc1JlbmR1c1NlYW5jZXMpIHtcbiAgICBmb3IgKGNvbnN0IGRhdGFzZXQgb2YgZGF0YXNldHMuY29tcHRlc1JlbmR1c1NlYW5jZXMpIHtcbiAgICAgIGlmIChkYXRhc2V0Lmlnbm9yZUZvcldlYikge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgaWYgKFxuICAgICAgICBsZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICAgIGRhdGFzZXQubGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgICBsZWdpc2xhdHVyZSAhPT0gZGF0YXNldC5sZWdpc2xhdHVyZVxuICAgICAgKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBjb25zdCBkYXRhc2V0RGlyID0gcGF0aC5qb2luKFxuICAgICAgICBkYXRhRGlyLFxuICAgICAgICBkYXRhc2V0LmZpbGVuYW1lLnJlcGxhY2UoL1xcLmpzb24kLywgXCJfbmV0dG95ZVwiKSxcbiAgICAgIClcblxuICAgICAgZm9yIChjb25zdCBjb21wdGVSZW5kdVBhdGggb2Ygd2Fsa0RpcihkYXRhc2V0RGlyKSkge1xuICAgICAgICBjb25zdCBjb21wdGVSZW5kdUZpbGVuYW1lID0gY29tcHRlUmVuZHVQYXRoW2NvbXB0ZVJlbmR1UGF0aC5sZW5ndGggLSAxXVxuICAgICAgICBpZiAoIWNvbXB0ZVJlbmR1RmlsZW5hbWUuZW5kc1dpdGgoXCIuanNvblwiKSkge1xuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY29tcHRlUmVuZHVGaWxlUGF0aCA9IHBhdGguam9pbihkYXRhc2V0RGlyLCAuLi5jb21wdGVSZW5kdVBhdGgpXG4gICAgICAgIGlmIChsb2cpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgTG9hZGluZyBmaWxlOiAke2NvbXB0ZVJlbmR1RmlsZVBhdGh94oCmYClcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjb21wdGVSZW5kdUpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhjb21wdGVSZW5kdUZpbGVQYXRoLCB7XG4gICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICB9KVxuICAgICAgICBjb25zdCBjb21wdGVSZW5kdSA9IENvbXB0ZXNSZW5kdXNDb252ZXJ0LnRvQ29tcHRlUmVuZHUoY29tcHRlUmVuZHVKc29uKVxuICAgICAgICBpZiAoY29tcHRlUmVuZHVCeVVpZFtjb21wdGVSZW5kdS51aWRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBjb21wdGVSZW5kdUJ5VWlkW2NvbXB0ZVJlbmR1LnVpZF0gPSBjb21wdGVSZW5kdVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBhY3RldXJCeVVpZCxcbiAgICBhbWVuZGVtZW50QnlVaWQsXG4gICAgZG9jdW1lbnRCeVVpZCxcbiAgICBkb3NzaWVyUGFybGVtZW50YWlyZUJ5U2VuYXRDaGVtaW4sXG4gICAgZG9zc2llclBhcmxlbWVudGFpcmVCeVRpdHJlQ2hlbWluLFxuICAgIGRvc3NpZXJQYXJsZW1lbnRhaXJlQnlVaWQsXG4gICAgb3JnYW5lQnlVaWQsXG4gICAgcGhvdG9CeVVpZCxcbiAgICByZXVuaW9uQnlVaWQsXG4gICAgcmV1bmlvbnNCeURheSxcbiAgICByZXVuaW9uc0J5RG9zc2llclVpZCxcbiAgICBzY3J1dGluQnlVaWQsXG4gICAgcXVlc3Rpb25CeVVpZCxcbiAgICBjb21wdGVSZW5kdUJ5VWlkLFxuICB9XG59XG5cbi8vLyBMb2FkIGRhdGEgZnJvbSBiaWcgbW9ub2x5dGljIGZpbGVzLlxuLy8vIERlcHJlY2F0ZWQ6IEFzc2VtYmzDqWUgbmF0aW9uYWxlIG9wZW4gZGF0YSBubyBtb3JlIHVzZXMgbW9ub2x5dGljIGZpbGVzLlxuZXhwb3J0IGZ1bmN0aW9uIGxvYWRBc3NlbWJsZWVEYXRhRnJvbUJpZ0ZpbGVzKFxuICBkYXRhRGlyOiBzdHJpbmcsXG4gIGVuYWJsZWREYXRhc2V0czogRW5hYmxlZERhdGFzZXRzLFxuICBsZWdpc2xhdHVyZTogTGVnaXNsYXR1cmUsXG4gIHsgbG9nID0gZmFsc2UgfSA9IHt9LFxuKTogRGF0YSB7XG4gIGNvbnN0IGFjdGV1ckJ5VWlkOiB7IFt1aWQ6IHN0cmluZ106IEFjdGV1ciB9ID0ge31cbiAgY29uc3Qgb3JnYW5lQnlVaWQ6IHsgW3VpZDogc3RyaW5nXTogT3JnYW5lIH0gPSB7fVxuICBpZiAoZW5hYmxlZERhdGFzZXRzICYgRW5hYmxlZERhdGFzZXRzLkFjdGV1cnNFdE9yZ2FuZXMpIHtcbiAgICBmb3IgKGNvbnN0IGRhdGFzZXQgb2YgZGF0YXNldHMuYWN0ZXVyc0V0T3JnYW5lcykge1xuICAgICAgaWYgKGRhdGFzZXQuaWdub3JlRm9yV2ViKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBpZiAoXG4gICAgICAgIGxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgICAgZGF0YXNldC5sZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICAgIGxlZ2lzbGF0dXJlICE9PSBkYXRhc2V0LmxlZ2lzbGF0dXJlXG4gICAgICApIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGNvbnN0IGpzb25GaWxlUGF0aDogc3RyaW5nID0gcGF0aC5qb2luKFxuICAgICAgICBkYXRhRGlyLFxuICAgICAgICBkYXRhc2V0LmZpbGVuYW1lLnJlcGxhY2UoL1xcLmpzb24kLywgXCJfbmV0dG95ZS5qc29uXCIpLFxuICAgICAgKVxuICAgICAgaWYgKGxvZykge1xuICAgICAgICBjb25zb2xlLmxvZyhgTG9hZGluZyBmaWxlOiAke2pzb25GaWxlUGF0aH1gKVxuICAgICAgfVxuICAgICAgY29uc3QganNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKGpzb25GaWxlUGF0aCwgeyBlbmNvZGluZzogXCJ1dGY4XCIgfSlcbiAgICAgIGNvbnN0IGFjdGV1cnNFdE9yZ2FuZXMgPSBBY3RldXJzRXRPcmdhbmVzQ29udmVydC50b0FjdGV1cnNFdE9yZ2FuZXMoanNvbilcbiAgICAgIGZvciAoY29uc3QgYWN0ZXVyIG9mIGFjdGV1cnNFdE9yZ2FuZXMuYWN0ZXVycykge1xuICAgICAgICAvLyBLZWVwIHRoZSBmaXJzdCBleGlzdGluZyBcImFjdGV1clwiLCBiZWNhdXNlIHRoZSBmaXJzdCB3cmFwcGVyIGlzIHRoZSBtb3N0IGNvbXBsZXRlLlxuICAgICAgICBpZiAoYWN0ZXVyQnlVaWRbYWN0ZXVyLnVpZF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGFjdGV1ckJ5VWlkW2FjdGV1ci51aWRdID0gYWN0ZXVyXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGZvciAoY29uc3Qgb3JnYW5lIG9mIGFjdGV1cnNFdE9yZ2FuZXMub3JnYW5lcykge1xuICAgICAgICAvLyBLZWVwIHRoZSBmaXJzdCBleGlzdGluZyBcIm9yZ2FuZVwiLCBiZWNhdXNlIHRoZSBmaXJzdCB3cmFwcGVyIGlzIHRoZSBtb3N0IGNvbXBsZXRlLlxuICAgICAgICBpZiAob3JnYW5lQnlVaWRbb3JnYW5lLnVpZF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIG9yZ2FuZUJ5VWlkW29yZ2FuZS51aWRdID0gb3JnYW5lXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjb25zdCByZXVuaW9uQnlVaWQ6IHsgW3VpZDogc3RyaW5nXTogUmV1bmlvbiB9ID0ge31cbiAgY29uc3QgcmV1bmlvbnNCeURheTogeyBbZGF5OiBzdHJpbmddOiBSZXVuaW9uW10gfSA9IHt9XG4gIGNvbnN0IHJldW5pb25zQnlEb3NzaWVyVWlkOiB7IFtkb3NzaWVyVWlkOiBzdHJpbmddOiBSZXVuaW9uW10gfSA9IHt9XG4gIGlmIChlbmFibGVkRGF0YXNldHMgJiBFbmFibGVkRGF0YXNldHMuQWdlbmRhcykge1xuICAgIGZvciAoY29uc3QgZGF0YXNldCBvZiBkYXRhc2V0cy5hZ2VuZGFzKSB7XG4gICAgICBpZiAoZGF0YXNldC5pZ25vcmVGb3JXZWIpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGlmIChcbiAgICAgICAgbGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgICBkYXRhc2V0LmxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgICAgbGVnaXNsYXR1cmUgIT09IGRhdGFzZXQubGVnaXNsYXR1cmVcbiAgICAgICkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgY29uc3QganNvbkZpbGVQYXRoOiBzdHJpbmcgPSBwYXRoLmpvaW4oXG4gICAgICAgIGRhdGFEaXIsXG4gICAgICAgIGRhdGFzZXQuZmlsZW5hbWUucmVwbGFjZSgvXFwuanNvbiQvLCBcIl9uZXR0b3llLmpzb25cIiksXG4gICAgICApXG4gICAgICBpZiAobG9nKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBMb2FkaW5nIGZpbGU6ICR7anNvbkZpbGVQYXRofWApXG4gICAgICB9XG4gICAgICBjb25zdCBqc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoanNvbkZpbGVQYXRoLCB7IGVuY29kaW5nOiBcInV0ZjhcIiB9KVxuICAgICAgY29uc3QgYWdlbmRhcyA9IEFnZW5kYXNDb252ZXJ0LnRvQWdlbmRhcyhqc29uKVxuICAgICAgZm9yIChjb25zdCByZXVuaW9uIG9mIGFnZW5kYXMucmV1bmlvbnMpIHtcbiAgICAgICAgaWYgKHJldW5pb25CeVVpZFtyZXVuaW9uLnVpZF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHJldW5pb25CeVVpZFtyZXVuaW9uLnVpZF0gPSByZXVuaW9uXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBkYXkgPSByZXVuaW9uLnRpbWVzdGFtcERlYnV0LnRvSVNPU3RyaW5nKCkuc3BsaXQoXCJUXCIpWzBdXG4gICAgICAgIGxldCByZXVuaW9uc0F0RGF5ID0gcmV1bmlvbnNCeURheVtkYXldXG4gICAgICAgIGlmIChyZXVuaW9uc0F0RGF5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICByZXVuaW9uc0F0RGF5ID0gcmV1bmlvbnNCeURheVtkYXldID0gW11cbiAgICAgICAgfVxuICAgICAgICByZXVuaW9uc0F0RGF5LnB1c2gocmV1bmlvbilcblxuICAgICAgICBjb25zdCBvZGogPSByZXVuaW9uLm9kalxuICAgICAgICBpZiAob2RqICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBmb3IgKGNvbnN0IHBvaW50T2RqIG9mIG9kai5wb2ludHNPZGogfHwgW10pIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgZG9zc2llckxlZ2lzbGF0aWZSZWYgb2YgcG9pbnRPZGouZG9zc2llcnNMZWdpc2xhdGlmc1JlZnMgfHxcbiAgICAgICAgICAgICAgW10pIHtcbiAgICAgICAgICAgICAgbGV0IHJldW5pb25zQXREb3NzaWVyVWlkID1cbiAgICAgICAgICAgICAgICByZXVuaW9uc0J5RG9zc2llclVpZFtkb3NzaWVyTGVnaXNsYXRpZlJlZl1cbiAgICAgICAgICAgICAgaWYgKHJldW5pb25zQXREb3NzaWVyVWlkID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICByZXVuaW9uc0F0RG9zc2llclVpZCA9IHJldW5pb25zQnlEb3NzaWVyVWlkW1xuICAgICAgICAgICAgICAgICAgZG9zc2llckxlZ2lzbGF0aWZSZWZcbiAgICAgICAgICAgICAgICBdID0gW11cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXVuaW9uc0F0RG9zc2llclVpZC5wdXNoKHJldW5pb24pXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY29uc3QgYW1lbmRlbWVudEJ5VWlkOiB7IFt1aWQ6IHN0cmluZ106IEFtZW5kZW1lbnQgfSA9IHt9XG4gIGlmIChlbmFibGVkRGF0YXNldHMgJiBFbmFibGVkRGF0YXNldHMuQW1lbmRlbWVudHMpIHtcbiAgICBmb3IgKGNvbnN0IGRhdGFzZXQgb2YgZGF0YXNldHMuYW1lbmRlbWVudHMpIHtcbiAgICAgIGlmIChkYXRhc2V0Lmlnbm9yZUZvcldlYikge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgaWYgKFxuICAgICAgICBsZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICAgIGRhdGFzZXQubGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgICBsZWdpc2xhdHVyZSAhPT0gZGF0YXNldC5sZWdpc2xhdHVyZVxuICAgICAgKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBjb25zdCBqc29uRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICAgICAgZGF0YURpcixcbiAgICAgICAgZGF0YXNldC5maWxlbmFtZS5yZXBsYWNlKC9cXC5qc29uJC8sIFwiX25ldHRveWUuanNvblwiKSxcbiAgICAgIClcbiAgICAgIGlmIChsb2cpIHtcbiAgICAgICAgY29uc29sZS5sb2coYExvYWRpbmcgZmlsZTogJHtqc29uRmlsZVBhdGh9YClcbiAgICAgIH1cbiAgICAgIGNvbnN0IGpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhqc29uRmlsZVBhdGgsIHsgZW5jb2Rpbmc6IFwidXRmOFwiIH0pXG4gICAgICBjb25zdCBhbWVuZGVtZW50cyA9IEFtZW5kZW1lbnRzQ29udmVydC50b0FtZW5kZW1lbnRzKGpzb24pXG4gICAgICBmb3IgKGNvbnN0IHRleHRlTGVnaXNsYXRpZiBvZiBhbWVuZGVtZW50cy50ZXh0ZXNMZWdpc2xhdGlmcykge1xuICAgICAgICBmb3IgKGNvbnN0IGFtZW5kZW1lbnQgb2YgdGV4dGVMZWdpc2xhdGlmLmFtZW5kZW1lbnRzKSB7XG4gICAgICAgICAgaWYgKGFtZW5kZW1lbnRCeVVpZFthbWVuZGVtZW50LnVpZF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgYW1lbmRlbWVudEJ5VWlkW2FtZW5kZW1lbnQudWlkXSA9IGFtZW5kZW1lbnRcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjb25zdCBkb2N1bWVudEJ5VWlkOiB7IFt1aWQ6IHN0cmluZ106IERvY3VtZW50IH0gPSB7fVxuICBjb25zdCBkb3NzaWVyUGFybGVtZW50YWlyZUJ5U2VuYXRDaGVtaW46IHtcbiAgICBbdWlkOiBzdHJpbmddOiBEb3NzaWVyUGFybGVtZW50YWlyZVxuICB9ID0ge31cbiAgY29uc3QgZG9zc2llclBhcmxlbWVudGFpcmVCeVRpdHJlQ2hlbWluOiB7XG4gICAgW3VpZDogc3RyaW5nXTogRG9zc2llclBhcmxlbWVudGFpcmVcbiAgfSA9IHt9XG4gIGNvbnN0IGRvc3NpZXJQYXJsZW1lbnRhaXJlQnlVaWQ6IHsgW3VpZDogc3RyaW5nXTogRG9zc2llclBhcmxlbWVudGFpcmUgfSA9IHt9XG4gIGlmIChlbmFibGVkRGF0YXNldHMgJiBFbmFibGVkRGF0YXNldHMuRG9zc2llcnNMZWdpc2xhdGlmcykge1xuICAgIGZvciAoY29uc3QgZGF0YXNldCBvZiBkYXRhc2V0cy5kb3NzaWVyc0xlZ2lzbGF0aWZzKSB7XG4gICAgICBpZiAoZGF0YXNldC5pZ25vcmVGb3JXZWIpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGlmIChcbiAgICAgICAgbGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgICBkYXRhc2V0LmxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgICAgbGVnaXNsYXR1cmUgIT09IGRhdGFzZXQubGVnaXNsYXR1cmVcbiAgICAgICkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgY29uc3QganNvbkZpbGVQYXRoOiBzdHJpbmcgPSBwYXRoLmpvaW4oXG4gICAgICAgIGRhdGFEaXIsXG4gICAgICAgIGRhdGFzZXQuZmlsZW5hbWUucmVwbGFjZSgvXFwuanNvbiQvLCBcIl9uZXR0b3llLmpzb25cIiksXG4gICAgICApXG4gICAgICBpZiAobG9nKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBMb2FkaW5nIGZpbGU6ICR7anNvbkZpbGVQYXRofWApXG4gICAgICB9XG4gICAgICBjb25zdCBqc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoanNvbkZpbGVQYXRoLCB7IGVuY29kaW5nOiBcInV0ZjhcIiB9KVxuICAgICAgY29uc3QgZG9zc2llcnNMZWdpc2xhdGlmcyA9XG4gICAgICAgIERvc3NpZXJzTGVnaXNsYXRpZnNDb252ZXJ0LnRvRG9zc2llcnNMZWdpc2xhdGlmcyhqc29uKVxuICAgICAgZm9yIChjb25zdCBkb2N1bWVudCBvZiBkb3NzaWVyc0xlZ2lzbGF0aWZzLnRleHRlc0xlZ2lzbGF0aWZzKSB7XG4gICAgICAgIGlmIChkb2N1bWVudEJ5VWlkW2RvY3VtZW50LnVpZF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGRvY3VtZW50QnlVaWRbZG9jdW1lbnQudWlkXSA9IGRvY3VtZW50XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGZvciAoY29uc3QgZG9zc2llciBvZiBkb3NzaWVyc0xlZ2lzbGF0aWZzLmRvc3NpZXJzUGFybGVtZW50YWlyZXMpIHtcbiAgICAgICAgY29uc3QgdGl0cmVEb3NzaWVyID0gZG9zc2llci50aXRyZURvc3NpZXJcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHRpdHJlRG9zc2llci5zZW5hdENoZW1pbiAmJlxuICAgICAgICAgIGRvc3NpZXJQYXJsZW1lbnRhaXJlQnlTZW5hdENoZW1pblt0aXRyZURvc3NpZXIuc2VuYXRDaGVtaW5dID09PVxuICAgICAgICAgICAgdW5kZWZpbmVkXG4gICAgICAgICkge1xuICAgICAgICAgIGRvc3NpZXJQYXJsZW1lbnRhaXJlQnlTZW5hdENoZW1pblt0aXRyZURvc3NpZXIuc2VuYXRDaGVtaW5dID0gZG9zc2llclxuICAgICAgICB9XG4gICAgICAgIGlmIChcbiAgICAgICAgICB0aXRyZURvc3NpZXIudGl0cmVDaGVtaW4gJiZcbiAgICAgICAgICBkb3NzaWVyUGFybGVtZW50YWlyZUJ5VGl0cmVDaGVtaW5bdGl0cmVEb3NzaWVyLnRpdHJlQ2hlbWluXSA9PT1cbiAgICAgICAgICAgIHVuZGVmaW5lZFxuICAgICAgICApIHtcbiAgICAgICAgICBkb3NzaWVyUGFybGVtZW50YWlyZUJ5VGl0cmVDaGVtaW5bdGl0cmVEb3NzaWVyLnRpdHJlQ2hlbWluXSA9IGRvc3NpZXJcbiAgICAgICAgfVxuICAgICAgICBpZiAoZG9zc2llclBhcmxlbWVudGFpcmVCeVVpZFtkb3NzaWVyLnVpZF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGRvc3NpZXJQYXJsZW1lbnRhaXJlQnlVaWRbZG9zc2llci51aWRdID0gZG9zc2llclxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY29uc3QgcGhvdG9CeVVpZDogeyBbdWlkOiBzdHJpbmddOiBQaG90byB9ID0ge31cbiAgaWYgKGVuYWJsZWREYXRhc2V0cyAmIEVuYWJsZWREYXRhc2V0cy5QaG90b3MpIHtcbiAgICBjb25zdCBwaG90b0J5VWlkID0ge31cblxuICAgIHtcbiAgICAgIGNvbnN0IGpzb25GaWxlUGF0aDogc3RyaW5nID0gcGF0aC5qb2luKFxuICAgICAgICBkYXRhRGlyLFxuICAgICAgICBgcGhvdG9zX2RlcHV0ZXNfJHtcbiAgICAgICAgICAvLyBUT0RPOiBIYW5kbGUgTGVnaXNsYXR1cmUuQWxsLlxuICAgICAgICAgIGxlZ2lzbGF0dXJlID09PSBMZWdpc2xhdHVyZS5BbGwgPyBMZWdpc2xhdHVyZS5TZWl6ZSA6IGxlZ2lzbGF0dXJlXG4gICAgICAgIH1gLFxuICAgICAgICBcImRlcHV0ZXMuanNvblwiLFxuICAgICAgKVxuICAgICAgaWYgKGZzLmV4aXN0c1N5bmMoanNvbkZpbGVQYXRoKSkge1xuICAgICAgICBpZiAobG9nKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coYExvYWRpbmcgZmlsZTogJHtqc29uRmlsZVBhdGh9YClcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBqc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoanNvbkZpbGVQYXRoLCB7IGVuY29kaW5nOiBcInV0ZjhcIiB9KVxuICAgICAgICBPYmplY3QuYXNzaWduKHBob3RvQnlVaWQsIEpTT04ucGFyc2UoanNvbikpXG4gICAgICB9IGVsc2UgaWYgKGxvZykge1xuICAgICAgICBjb25zb2xlLmxvZyhgSWdub3JpbmcgbWlzc2luZyBmaWxlOiAke2pzb25GaWxlUGF0aH1gKVxuICAgICAgfVxuICAgIH1cblxuICAgIHtcbiAgICAgIGNvbnN0IGpzb25GaWxlUGF0aDogc3RyaW5nID0gcGF0aC5qb2luKFxuICAgICAgICBkYXRhRGlyLFxuICAgICAgICBcInBob3Rvc19zZW5hdGV1cnNcIixcbiAgICAgICAgXCJzZW5hdGV1cnMuanNvblwiLFxuICAgICAgKVxuICAgICAgaWYgKGZzLmV4aXN0c1N5bmMoanNvbkZpbGVQYXRoKSkge1xuICAgICAgICBpZiAobG9nKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coYExvYWRpbmcgZmlsZTogJHtqc29uRmlsZVBhdGh9YClcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBqc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoanNvbkZpbGVQYXRoLCB7IGVuY29kaW5nOiBcInV0ZjhcIiB9KVxuICAgICAgICBPYmplY3QuYXNzaWduKHBob3RvQnlVaWQsIEpTT04ucGFyc2UoanNvbikpXG4gICAgICB9IGVsc2UgaWYgKGxvZykge1xuICAgICAgICBjb25zb2xlLmxvZyhgSWdub3JpbmcgbWlzc2luZyBmaWxlOiAke2pzb25GaWxlUGF0aH1gKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHNjcnV0aW5CeVVpZDogeyBbdWlkOiBzdHJpbmddOiBTY3J1dGluIH0gPSB7fVxuICBpZiAoZW5hYmxlZERhdGFzZXRzICYgRW5hYmxlZERhdGFzZXRzLlNjcnV0aW5zKSB7XG4gICAgZm9yIChjb25zdCBkYXRhc2V0IG9mIGRhdGFzZXRzLnNjcnV0aW5zKSB7XG4gICAgICBpZiAoZGF0YXNldC5pZ25vcmVGb3JXZWIpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGlmIChcbiAgICAgICAgbGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgICBkYXRhc2V0LmxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgICAgbGVnaXNsYXR1cmUgIT09IGRhdGFzZXQubGVnaXNsYXR1cmVcbiAgICAgICkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgY29uc3QganNvbkZpbGVQYXRoOiBzdHJpbmcgPSBwYXRoLmpvaW4oXG4gICAgICAgIGRhdGFEaXIsXG4gICAgICAgIGRhdGFzZXQuZmlsZW5hbWUucmVwbGFjZSgvXFwuanNvbiQvLCBcIl9uZXR0b3llLmpzb25cIiksXG4gICAgICApXG4gICAgICBpZiAobG9nKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBMb2FkaW5nIGZpbGU6ICR7anNvbkZpbGVQYXRofWApXG4gICAgICB9XG4gICAgICBjb25zdCBqc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoanNvbkZpbGVQYXRoLCB7IGVuY29kaW5nOiBcInV0ZjhcIiB9KVxuICAgICAgY29uc3Qgc2NydXRpbnMgPSBTY3J1dGluc0NvbnZlcnQudG9TY3J1dGlucyhqc29uKVxuICAgICAgZm9yIChjb25zdCBzY3J1dGluIG9mIHNjcnV0aW5zLnNjcnV0aW5zKSB7XG4gICAgICAgIGlmIChzY3J1dGluQnlVaWRbc2NydXRpbi51aWRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBzY3J1dGluQnlVaWRbc2NydXRpbi51aWRdID0gc2NydXRpblxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY29uc3QgcXVlc3Rpb25CeVVpZDogeyBbdWlkOiBzdHJpbmddOiBRdWVzdGlvbiB9ID0ge31cbiAgaWYgKGVuYWJsZWREYXRhc2V0cyAmIEVuYWJsZWREYXRhc2V0cy5RdWVzdGlvbnMpIHtcbiAgICBmb3IgKGNvbnN0IGRhdGFzZXQgb2YgZGF0YXNldHMucXVlc3Rpb25zKSB7XG4gICAgICBpZiAoZGF0YXNldC5pZ25vcmVGb3JXZWIpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGlmIChcbiAgICAgICAgbGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgICBkYXRhc2V0LmxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgICAgbGVnaXNsYXR1cmUgIT09IGRhdGFzZXQubGVnaXNsYXR1cmVcbiAgICAgICkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgY29uc3QganNvbkZpbGVQYXRoOiBzdHJpbmcgPSBwYXRoLmpvaW4oXG4gICAgICAgIGRhdGFEaXIsXG4gICAgICAgIGRhdGFzZXQuZmlsZW5hbWUucmVwbGFjZSgvXFwuanNvbiQvLCBcIl9uZXR0b3llLmpzb25cIiksXG4gICAgICApXG4gICAgICBpZiAobG9nKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBMb2FkaW5nIGZpbGU6ICR7anNvbkZpbGVQYXRofWApXG4gICAgICB9XG4gICAgICBjb25zdCBqc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoanNvbkZpbGVQYXRoLCB7IGVuY29kaW5nOiBcInV0ZjhcIiB9KVxuICAgICAgY29uc3QgcXVlc3Rpb25zID0gUXVlc3Rpb25zQ29udmVydC50b1F1ZXN0aW9ucyhqc29uKVxuICAgICAgZm9yIChjb25zdCBxdWVzdGlvbiBvZiBxdWVzdGlvbnMucXVlc3Rpb25zKSB7XG4gICAgICAgIGlmIChxdWVzdGlvbkJ5VWlkW3F1ZXN0aW9uLnVpZF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHF1ZXN0aW9uQnlVaWRbcXVlc3Rpb24udWlkXSA9IHF1ZXN0aW9uXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjb25zdCBjb21wdGVSZW5kdUJ5VWlkOiB7IFt1aWQ6IHN0cmluZ106IENvbXB0ZVJlbmR1IH0gPSB7fVxuICBpZiAoZW5hYmxlZERhdGFzZXRzICYgRW5hYmxlZERhdGFzZXRzLkNvbXB0ZXNSZW5kdXNTZWFuY2VzKSB7XG4gICAgZm9yIChjb25zdCBkYXRhc2V0IG9mIGRhdGFzZXRzLmNvbXB0ZXNSZW5kdXNTZWFuY2VzKSB7XG4gICAgICBpZiAoZGF0YXNldC5pZ25vcmVGb3JXZWIpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGlmIChcbiAgICAgICAgbGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgICBkYXRhc2V0LmxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgICAgbGVnaXNsYXR1cmUgIT09IGRhdGFzZXQubGVnaXNsYXR1cmVcbiAgICAgICkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgY29uc3QganNvbkZpbGVQYXRoOiBzdHJpbmcgPSBwYXRoLmpvaW4oXG4gICAgICAgIGRhdGFEaXIsXG4gICAgICAgIGRhdGFzZXQuZmlsZW5hbWUucmVwbGFjZSgvXFwuanNvbiQvLCBcIl9uZXR0b3llLmpzb25cIiksXG4gICAgICApXG4gICAgICBpZiAobG9nKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBMb2FkaW5nIGZpbGU6ICR7anNvbkZpbGVQYXRofWApXG4gICAgICB9XG4gICAgICBjb25zdCBqc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoanNvbkZpbGVQYXRoLCB7IGVuY29kaW5nOiBcInV0ZjhcIiB9KVxuICAgICAgY29uc3QgY29tcHRlc1JlbmR1cyA9IENvbXB0ZXNSZW5kdXNDb252ZXJ0LnRvQ29tcHRlc1JlbmR1cyhqc29uKVxuICAgICAgZm9yIChjb25zdCBjb21wdGVSZW5kdSBvZiBjb21wdGVzUmVuZHVzLmNvbXB0ZXNSZW5kdXMpIHtcbiAgICAgICAgaWYgKGNvbXB0ZVJlbmR1QnlVaWRbY29tcHRlUmVuZHUudWlkXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgY29tcHRlUmVuZHVCeVVpZFtjb21wdGVSZW5kdS51aWRdID0gY29tcHRlUmVuZHVcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgYWN0ZXVyQnlVaWQsXG4gICAgYW1lbmRlbWVudEJ5VWlkLFxuICAgIGRvY3VtZW50QnlVaWQsXG4gICAgZG9zc2llclBhcmxlbWVudGFpcmVCeVNlbmF0Q2hlbWluLFxuICAgIGRvc3NpZXJQYXJsZW1lbnRhaXJlQnlUaXRyZUNoZW1pbixcbiAgICBkb3NzaWVyUGFybGVtZW50YWlyZUJ5VWlkLFxuICAgIG9yZ2FuZUJ5VWlkLFxuICAgIHBob3RvQnlVaWQsXG4gICAgcmV1bmlvbkJ5VWlkLFxuICAgIHJldW5pb25zQnlEYXksXG4gICAgcmV1bmlvbnNCeURvc3NpZXJVaWQsXG4gICAgc2NydXRpbkJ5VWlkLFxuICAgIHF1ZXN0aW9uQnlVaWQsXG4gICAgY29tcHRlUmVuZHVCeVVpZCxcbiAgfVxufVxuXG4vKipcbiAqIFJlYWQgaW5mb3Mgb2YgYSBkb2N1bWVudCBvciBhIGRpdmlzaW9uIG9mIGEgZG9jdW1lbnQgZnJvbSBmaWxlIHN5c3RlbVxuICpcbiAqIEBwYXJhbSBkYXRhRGlyXG4gKiBAcGFyYW0gdWlkIFVJRCBvZiBhIGRvY3VtZW50IG9yIGEgZGl2aXNpb25cbiAqIEBwYXJhbSBmb3JtYXRzIHJlcXVlc3RlZCBmb3JtYXRzIG9mIHRoZSBkb2N1bWVudCBpbiBkZWNyZWFzaW5nIHByZWZlcmVuY2Ugb3JkZXJcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxvYWRBc3NlbWJsZWVEb2N1bWVudEZpbGUoXG4gIGRhdGFEaXI6IHN0cmluZyxcbiAgdWlkOiBzdHJpbmcsXG4gIGZvcm1hdHM6IERvY3VtZW50VXJsRm9ybWF0W10sXG4pOlxuICB8IHtcbiAgICAgIGZvcm1hdDogRG9jdW1lbnRVcmxGb3JtYXRcbiAgICAgIHBhdGg6IHN0cmluZ1xuICAgICAgdXJsOiBzdHJpbmdcbiAgICB9XG4gIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgZG9jdW1lbnRzRGlyID0gcGF0aC5qb2luKGRhdGFEaXIsIFwiRG9jdW1lbnRzXCIpXG4gIGNvbnN0IGRvY3VtZW50RGlyID0gcGF0aEZyb21Eb2N1bWVudFVpZChkb2N1bWVudHNEaXIsIHVpZClcbiAgY29uc3QgaW5kZXhQYXRoID0gcGF0aC5qb2luKGRvY3VtZW50RGlyLCBcImluZGV4Lmpzb25cIilcbiAgaWYgKCFmcy5wYXRoRXhpc3RzU3luYyhpbmRleFBhdGgpKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZFxuICB9XG4gIGNvbnN0IGluZGV4ID0gZnMucmVhZEpzb25TeW5jKGluZGV4UGF0aCkgYXMgRG9jdW1lbnRGaWxlc0luZGV4XG4gIGZvciAoY29uc3QgZm9ybWF0IG9mIGZvcm1hdHMpIHtcbiAgICBmb3IgKGNvbnN0IHsgZmlsZW5hbWUsIHVybCB9IG9mIGluZGV4W2Zvcm1hdF0gPz8gW10pIHtcbiAgICAgIGlmIChmaWxlbmFtZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICByZXR1cm4geyBmb3JtYXQsIHBhdGg6IHBhdGguam9pbihkb2N1bWVudERpciwgZmlsZW5hbWUpLCB1cmwgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gdW5kZWZpbmVkXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsb2FkQXNzZW1ibGVlUGhvdG9zRGVwdXRlcyhcbiAgZGF0YURpcjogc3RyaW5nLFxuICBsZWdpc2xhdHVyZTogTGVnaXNsYXR1cmUsXG4gIHsgbG9nID0gZmFsc2UgfSA9IHt9LFxuKTogeyBbdWlkOiBzdHJpbmddOiBQaG90byB9IHtcbiAgY29uc3QganNvbkZpbGVQYXRoOiBzdHJpbmcgPSBwYXRoLmpvaW4oXG4gICAgZGF0YURpcixcbiAgICBgcGhvdG9zX2RlcHV0ZXNfJHtcbiAgICAgIC8vIFRPRE86IEhhbmRsZSBMZWdpc2xhdHVyZS5BbGwuXG4gICAgICBsZWdpc2xhdHVyZSA9PT0gTGVnaXNsYXR1cmUuQWxsID8gTGVnaXNsYXR1cmUuU2VpemUgOiBsZWdpc2xhdHVyZVxuICAgIH1gLFxuICAgIFwiZGVwdXRlcy5qc29uXCIsXG4gIClcbiAgaWYgKGxvZykge1xuICAgIGNvbnNvbGUubG9nKGBMb2FkaW5nIGZpbGU6ICR7anNvbkZpbGVQYXRofWApXG4gIH1cbiAgY29uc3QganNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKGpzb25GaWxlUGF0aCwgeyBlbmNvZGluZzogXCJ1dGY4XCIgfSlcbiAgcmV0dXJuIEpTT04ucGFyc2UoanNvbikgYXMgeyBbdWlkOiBzdHJpbmddOiBQaG90byB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsb2FkQXNzZW1ibGVlUGhvdG9zU2VuYXRldXJzKFxuICBkYXRhRGlyOiBzdHJpbmcsXG4gIHsgbG9nID0gZmFsc2UgfSA9IHt9LFxuKTogeyBbdWlkOiBzdHJpbmddOiBQaG90byB9IHtcbiAgY29uc3QganNvbkZpbGVQYXRoOiBzdHJpbmcgPSBwYXRoLmpvaW4oXG4gICAgZGF0YURpcixcbiAgICBcInBob3Rvc19zZW5hdGV1cnNcIixcbiAgICBcInNlbmF0ZXVycy5qc29uXCIsXG4gIClcbiAgaWYgKGxvZykge1xuICAgIGNvbnNvbGUubG9nKGBMb2FkaW5nIGZpbGU6ICR7anNvbkZpbGVQYXRofWApXG4gIH1cbiAgY29uc3QganNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKGpzb25GaWxlUGF0aCwgeyBlbmNvZGluZzogXCJ1dGY4XCIgfSlcbiAgcmV0dXJuIEpTT04ucGFyc2UoanNvbikgYXMgeyBbdWlkOiBzdHJpbmddOiBQaG90byB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXRoRnJvbURvY3VtZW50VWlkKGRvY3VtZW50c0Rpcjogc3RyaW5nLCB1aWQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IG1hdGNoID0gdWlkLm1hdGNoKGRvY3VtZW50VWlkUmVnZXgpXG4gIGFzc2VydC5ub3RTdHJpY3RFcXVhbChcbiAgICBtYXRjaCxcbiAgICBudWxsLFxuICAgIGBVbmV4cGVjdGVkIHN0cnVjdHVyZSBmb3IgZG9jdW1lbnQgVUlEOiAke3VpZH1gLFxuICApXG4gIGNvbnN0IGdyb3VwcyA9IG1hdGNoIS5ncm91cHMgYXMgeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfVxuICBjb25zdCBkb2N1bWVudFR5cGUgPSBwYXRoLmpvaW4oXG4gICAgZG9jdW1lbnRzRGlyLFxuICAgIGdyb3Vwcy5kb2N1bWVudFR5cGUgPz8gZ3JvdXBzLmRvY3VtZW50VHlwZTIsXG4gIClcbiAgY29uc3QgY2hhbWJyZURpciA9IHBhdGguam9pbihkb2N1bWVudFR5cGUsIGdyb3Vwcy5jaGFtYnJlID8/IGdyb3Vwcy5jaGFtYnJlMilcbiAgY29uc3QgcmVwdWJsaXF1ZURpciA9IHBhdGguam9pbihcbiAgICBjaGFtYnJlRGlyLFxuICAgIGdyb3Vwcy5yZXB1YmxpcXVlID8/IGdyb3Vwcy5yZXB1YmxpcXVlMixcbiAgKVxuICBjb25zdCBsZWdpc2xhdHVyZURpciA9IHBhdGguam9pbihcbiAgICByZXB1YmxpcXVlRGlyLFxuICAgIGdyb3Vwcy5sZWdpc2xhdHVyZSA/PyBncm91cHMubGVnaXNsYXR1cmUyLFxuICApXG4gIGNvbnN0IGV0YXQgPSBncm91cHMuZXRhdFxuICBpZiAoZXRhdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgZnMuZW5zdXJlRGlyU3luYyhsZWdpc2xhdHVyZURpcilcbiAgICByZXR1cm4gcGF0aC5qb2luKGxlZ2lzbGF0dXJlRGlyLCB1aWQpXG4gIH1cbiAgY29uc3QgZXRhdERpciA9IHBhdGguam9pbihsZWdpc2xhdHVyZURpciwgZXRhdClcbiAgbGV0IG51bWVybyA9IFwiMDAwMDAwXCIgKyAoZ3JvdXBzLm51bWVybyA/PyBncm91cHMubnVtZXJvMilcbiAgbnVtZXJvID0gbnVtZXJvLnN1YnN0cmluZyhudW1lcm8ubGVuZ3RoIC0gNilcbiAgY29uc3QgbnVtZXJvTWlsbGllcnNEaXIgPSBwYXRoLmpvaW4oZXRhdERpciwgbnVtZXJvLnN1YnN0cmluZygwLCAzKSlcbiAgZnMuZW5zdXJlRGlyU3luYyhudW1lcm9NaWxsaWVyc0RpcilcbiAgcmV0dXJuIHBhdGguam9pbihudW1lcm9NaWxsaWVyc0RpciwgdWlkKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcGF0aEZyb21Eb3NzaWVyUGFybGVtZW50YWlyZVVpZChcbiAgZG9zc2llcnNEaXI6IHN0cmluZyxcbiAgdWlkOiBzdHJpbmcsXG4pOiBzdHJpbmcge1xuICBjb25zdCBtYXRjaCA9IGRvc3NpZXJVaWRSZWdleC5leGVjKHVpZClcbiAgYXNzZXJ0Lm5vdFN0cmljdEVxdWFsKFxuICAgIG1hdGNoLFxuICAgIG51bGwsXG4gICAgYFVuZXhwZWN0ZWQgc3RydWN0dXJlIGZvciBkb3NzaWVyIHBhcmxlbWVudGFpcmUgVUlEOiAke3VpZH1gLFxuICApXG4gIGNvbnN0IHJlcHVibGlxdWVEaXIgPSBwYXRoLmpvaW4oZG9zc2llcnNEaXIsIG1hdGNoIVsxXSlcbiAgY29uc3QgbGVnaXNsYXR1cmVEaXIgPSBwYXRoLmpvaW4ocmVwdWJsaXF1ZURpciwgbWF0Y2ghWzJdKVxuICBsZXQgbnVtZXJvID0gXCIwMDAwMDBcIiArIG1hdGNoIVszXVxuICBudW1lcm8gPSBudW1lcm8uc3Vic3RyaW5nKG51bWVyby5sZW5ndGggLSA2KVxuICBjb25zdCBudW1lcm9NaWxsaWVyc0RpciA9IHBhdGguam9pbihsZWdpc2xhdHVyZURpciwgbnVtZXJvLnN1YnN0cmluZygwLCAzKSlcbiAgZnMuZW5zdXJlRGlyU3luYyhudW1lcm9NaWxsaWVyc0RpcilcbiAgcmV0dXJuIHBhdGguam9pbihudW1lcm9NaWxsaWVyc0RpciwgdWlkKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcGF0aEZyb21SZXVuaW9uVWlkKHJldW5pb25zRGlyOiBzdHJpbmcsIHVpZDogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgbWF0Y2ggPSByZXVuaW9uVWlkUmVnZXguZXhlYyh1aWQpXG4gIGFzc2VydC5ub3RTdHJpY3RFcXVhbChcbiAgICBtYXRjaCxcbiAgICBudWxsLFxuICAgIGBVbmV4cGVjdGVkIHN0cnVjdHVyZSBmb3IgcmV1bmlvbiBVSUQ6ICR7dWlkfWAsXG4gIClcbiAgY29uc3QgY2hhbWJyZURpciA9IHBhdGguam9pbihyZXVuaW9uc0RpciwgbWF0Y2ghWzFdKVxuICBjb25zdCByZXB1YmxpcXVlRGlyID0gcGF0aC5qb2luKGNoYW1icmVEaXIsIG1hdGNoIVsyXSlcbiAgY29uc3QgbGVnaXNsYXR1cmVEaXIgPSBwYXRoLmpvaW4ocmVwdWJsaXF1ZURpciwgbWF0Y2ghWzNdKVxuICBjb25zdCBzZXNzaW9uRGlyID0gcGF0aC5qb2luKGxlZ2lzbGF0dXJlRGlyLCBtYXRjaCFbNF0pXG4gIGNvbnN0IGlkRGlyID0gcGF0aC5qb2luKHNlc3Npb25EaXIsIG1hdGNoIVs1XSlcbiAgbGV0IG51bWVybyA9IFwiMDAwMDAwMDAwXCIgKyBtYXRjaCFbNl1cbiAgbnVtZXJvID0gbnVtZXJvLnN1YnN0cmluZyhudW1lcm8ubGVuZ3RoIC0gOSlcbiAgY29uc3QgbnVtZXJvTWlsbGlvbnNEaXIgPSBwYXRoLmpvaW4oaWREaXIsIG51bWVyby5zdWJzdHJpbmcoMCwgMykpXG4gIGNvbnN0IG51bWVyb01pbGxpZXJzRGlyID0gcGF0aC5qb2luKG51bWVyb01pbGxpb25zRGlyLCBudW1lcm8uc3Vic3RyaW5nKDMsIDMpKVxuICBmcy5lbnN1cmVEaXJTeW5jKG51bWVyb01pbGxpZXJzRGlyKVxuICByZXR1cm4gcGF0aC5qb2luKG51bWVyb01pbGxpZXJzRGlyLCB1aWQpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXRoRnJvbVNjcnV0aW5VaWQoc2NydXRpbnNEaXI6IHN0cmluZywgdWlkOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBtYXRjaCA9IHNjcnV0aW5VaWRSZWdleC5leGVjKHVpZClcbiAgYXNzZXJ0Lm5vdFN0cmljdEVxdWFsKFxuICAgIG1hdGNoLFxuICAgIG51bGwsXG4gICAgYFVuZXhwZWN0ZWQgc3RydWN0dXJlIGZvciBzY3J1dGluIFVJRDogJHt1aWR9YCxcbiAgKVxuICBjb25zdCByZXB1YmxpcXVlRGlyID0gcGF0aC5qb2luKHNjcnV0aW5zRGlyLCBtYXRjaCFbMV0pXG4gIGNvbnN0IGxlZ2lzbGF0dXJlRGlyID0gcGF0aC5qb2luKHJlcHVibGlxdWVEaXIsIG1hdGNoIVsyXSlcbiAgbGV0IG51bWVybyA9IFwiMDAwMDAwXCIgKyBtYXRjaCFbM11cbiAgbnVtZXJvID0gbnVtZXJvLnN1YnN0cmluZyhudW1lcm8ubGVuZ3RoIC0gNilcbiAgY29uc3QgbnVtZXJvTWlsbGllcnNEaXIgPSBwYXRoLmpvaW4obGVnaXNsYXR1cmVEaXIsIG51bWVyby5zdWJzdHJpbmcoMCwgMykpXG4gIGZzLmVuc3VyZURpclN5bmMobnVtZXJvTWlsbGllcnNEaXIpXG4gIHJldHVybiBwYXRoLmpvaW4obnVtZXJvTWlsbGllcnNEaXIsIHVpZClcbn1cblxuLy8gR2V0IHN0YW5kYXJkIHBhdGggZm9yIG9iamVjdCB3aXRoIHVpZCA6IHJlcHVibGlxdWUgPiBsZWdpc2xhdHVyZSA+IGdyb3VwIG9iamVjdHMgYnkgdGhvdXNhbmRzXG5leHBvcnQgZnVuY3Rpb24gcGF0aEZyb21VaWQoXG4gIGRhdGFEaXI6IHN0cmluZyxcbiAgdWlkOiBzdHJpbmcsXG4gIGRhdGFSZWdleHA6IFJlZ0V4cCxcbik6IHN0cmluZyB7XG4gIGNvbnN0IG1hdGNoID0gZGF0YVJlZ2V4cC5leGVjKHVpZClcbiAgYXNzZXJ0Lm5vdFN0cmljdEVxdWFsKFxuICAgIG1hdGNoLFxuICAgIG51bGwsXG4gICAgYFVuZXhwZWN0ZWQgc3RydWN0dXJlIGZvciBvYmplY3Qgd2l0aCBVSUQ6ICR7dWlkfWAsXG4gIClcbiAgY29uc3QgcmVwdWJsaXF1ZURpciA9IHBhdGguam9pbihkYXRhRGlyLCBtYXRjaCFbMV0pXG4gIGNvbnN0IGxlZ2lzbGF0dXJlRGlyID0gcGF0aC5qb2luKHJlcHVibGlxdWVEaXIsIG1hdGNoIVsyXSlcbiAgbGV0IG51bWVybyA9IFwiMDAwMDAwXCIgKyBtYXRjaCFbM11cbiAgbnVtZXJvID0gbnVtZXJvLnN1YnN0cmluZyhudW1lcm8ubGVuZ3RoIC0gNilcbiAgY29uc3QgbnVtZXJvTWlsbGllcnNEaXIgPSBwYXRoLmpvaW4obGVnaXNsYXR1cmVEaXIsIG51bWVyby5zdWJzdHJpbmcoMCwgMykpXG4gIGZzLmVuc3VyZURpclN5bmMobnVtZXJvTWlsbGllcnNEaXIpXG4gIHJldHVybiBwYXRoLmpvaW4obnVtZXJvTWlsbGllcnNEaXIsIHVpZClcbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUE7O0FBRUEsT0FBT0EsTUFBTSxNQUFNLFFBQVE7QUFDM0IsT0FBT0MsRUFBRSxNQUFNLFVBQVU7QUFDekIsT0FBT0MsSUFBSSxNQUFNLE1BQU07QUFBQSxTQUVkQyxlQUFlO0FBQUEsU0FDZkMsUUFBUSxFQUFFRCxlQUFlO0FBQUEsU0FFekJFLE9BQU87QUFBQSxTQUNQQSxPQUFPO0FBQUEsU0FHZEMsT0FBTyxJQUFJQyx1QkFBdUI7QUFBQSxTQUkzQkQsT0FBTyxJQUFJRSxjQUFjO0FBQUEsU0FDYkYsT0FBTyxJQUFJRyxrQkFBa0I7QUFBQSxTQUVoREgsT0FBTyxJQUFJSSwwQkFBMEI7QUFBQSxTQUk5QkMsV0FBVztBQUFBLFNBQ1hMLE9BQU8sSUFBSU0sZUFBZTtBQUFBLFNBQzFCTixPQUFPLElBQUlPLGdCQUFnQjtBQUFBLFNBQzNCUCxPQUFPLElBQUlRLG9CQUFvQjtBQXdCeEMsTUFBTUMsZ0JBQWdCLEdBQ3BCLDhTQUE4UztBQUNoVCxNQUFNQyxlQUFlLEdBQUcsd0JBQXdCO0FBQ2hELE1BQU1DLGVBQWUsR0FDbkIsMkRBQTJEO0FBQzdELE1BQU1DLGVBQWUsR0FBRywwQkFBMEI7QUFFbEQsT0FBTyxVQUFVQyx3QkFBd0JBLENBQ3ZDQyxPQUFlLEVBQ2ZDLFdBQXdCLEVBQ3hCO0VBQUVDLEdBQUcsR0FBRztBQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsRUFLcEI7RUFDQSxNQUFNQyxVQUFVLEdBQUcsSUFBSUMsR0FBRyxDQUFTLENBQUM7RUFDcEMsS0FBSyxNQUFNQyxPQUFPLElBQUlyQixRQUFRLENBQUNzQixnQkFBZ0IsRUFBRTtJQUMvQyxJQUFJRCxPQUFPLENBQUNFLFlBQVksRUFBRTtNQUN4QjtJQUNGO0lBQ0EsSUFDRU4sV0FBVyxLQUFLVixXQUFXLENBQUNpQixHQUFHLElBQy9CSCxPQUFPLENBQUNKLFdBQVcsS0FBS1YsV0FBVyxDQUFDaUIsR0FBRyxJQUN2Q1AsV0FBVyxLQUFLSSxPQUFPLENBQUNKLFdBQVcsRUFDbkM7TUFDQTtJQUNGO0lBQ0EsTUFBTVEsVUFBVSxHQUFHM0IsSUFBSSxDQUFDNEIsSUFBSSxDQUMxQlYsT0FBTyxFQUNQSyxPQUFPLENBQUNNLFFBQVEsQ0FBQ0MsT0FBTyxDQUFDLFNBQVMsRUFBRSxVQUFVLENBQ2hELENBQUM7SUFFRCxLQUFLLE1BQU1DLGVBQWUsSUFBSTVCLE9BQU8sQ0FBQ3dCLFVBQVUsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUU7TUFDOUQsTUFBTUssY0FBYyxHQUFHRCxlQUFlLENBQUNBLGVBQWUsQ0FBQ0UsTUFBTSxHQUFHLENBQUMsQ0FBQztNQUNsRSxJQUFJLENBQUNELGNBQWMsQ0FBQ0UsUUFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFO1FBQ3JDO01BQ0Y7TUFDQSxNQUFNQyxjQUFjLEdBQUduQyxJQUFJLENBQUM0QixJQUFJLENBQUNELFVBQVUsRUFBRSxHQUFHSSxlQUFlLENBQUM7TUFDaEUsSUFBSVgsR0FBRyxFQUFFO1FBQ1BnQixPQUFPLENBQUNoQixHQUFHLENBQUUsaUJBQWdCZSxjQUFlLEdBQUUsQ0FBQztNQUNqRDtNQUNBLE1BQU1FLFVBQWtCLEdBQUd0QyxFQUFFLENBQUN1QyxZQUFZLENBQUNILGNBQWMsRUFBRTtRQUN6REksUUFBUSxFQUFFO01BQ1osQ0FBQyxDQUFDO01BQ0YsTUFBTUMsTUFBTSxHQUFHbkMsdUJBQXVCLENBQUNvQyxRQUFRLENBQUNKLFVBQVUsQ0FBQztNQUMzRDtNQUNBLElBQUloQixVQUFVLENBQUNxQixHQUFHLENBQUNGLE1BQU0sQ0FBQ0csR0FBRyxDQUFDLEVBQUU7UUFDOUI7TUFDRjtNQUNBdEIsVUFBVSxDQUFDdUIsR0FBRyxDQUFDSixNQUFNLENBQUNHLEdBQUcsQ0FBQztNQUMxQixNQUFNO1FBQUVILE1BQU07UUFBRUssa0JBQWtCLEVBQUV0QixPQUFPLENBQUNKO01BQVksQ0FBQztJQUMzRDtFQUNGO0FBQ0Y7QUFFQSxPQUFPLFVBQVUyQiw0QkFBNEJBLENBQzNDNUIsT0FBZSxFQUNmQyxXQUF3QixFQUN4QjtFQUFFQyxHQUFHLEdBQUc7QUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBS3BCO0VBQ0EsTUFBTTJCLGNBQWMsR0FBRyxJQUFJekIsR0FBRyxDQUFTLENBQUM7RUFDeEMsS0FBSyxNQUFNQyxPQUFPLElBQUlyQixRQUFRLENBQUM4QyxXQUFXLEVBQUU7SUFDMUMsSUFBSXpCLE9BQU8sQ0FBQ0UsWUFBWSxFQUFFO01BQ3hCO0lBQ0Y7SUFDQSxJQUNFTixXQUFXLEtBQUtWLFdBQVcsQ0FBQ2lCLEdBQUcsSUFDL0JILE9BQU8sQ0FBQ0osV0FBVyxLQUFLVixXQUFXLENBQUNpQixHQUFHLElBQ3ZDUCxXQUFXLEtBQUtJLE9BQU8sQ0FBQ0osV0FBVyxFQUNuQztNQUNBO0lBQ0Y7SUFDQSxNQUFNUSxVQUFVLEdBQUczQixJQUFJLENBQUM0QixJQUFJLENBQzFCVixPQUFPLEVBQ1BLLE9BQU8sQ0FBQ00sUUFBUSxDQUFDQyxPQUFPLENBQUMsU0FBUyxFQUFFLFVBQVUsQ0FDaEQsQ0FBQztJQUVELEtBQUssTUFBTW1CLG1CQUFtQixJQUFJOUMsT0FBTyxDQUFDd0IsVUFBVSxDQUFDLEVBQUU7TUFDckQsTUFBTXVCLGtCQUFrQixHQUN0QkQsbUJBQW1CLENBQUNBLG1CQUFtQixDQUFDaEIsTUFBTSxHQUFHLENBQUMsQ0FBQztNQUNyRCxJQUFJLENBQUNpQixrQkFBa0IsQ0FBQ2hCLFFBQVEsQ0FBQyxPQUFPLENBQUMsRUFBRTtRQUN6QztNQUNGO01BQ0EsTUFBTWlCLGtCQUFrQixHQUFHbkQsSUFBSSxDQUFDNEIsSUFBSSxDQUFDRCxVQUFVLEVBQUUsR0FBR3NCLG1CQUFtQixDQUFDO01BQ3hFLElBQUk3QixHQUFHLEVBQUU7UUFDUGdCLE9BQU8sQ0FBQ2hCLEdBQUcsQ0FBRSxpQkFBZ0IrQixrQkFBbUIsR0FBRSxDQUFDO01BQ3JEO01BQ0EsTUFBTUMsY0FBc0IsR0FBR3JELEVBQUUsQ0FBQ3VDLFlBQVksQ0FBQ2Esa0JBQWtCLEVBQUU7UUFDakVaLFFBQVEsRUFBRTtNQUNaLENBQUMsQ0FBQztNQUNGLE1BQU1jLFVBQVUsR0FBRzlDLGtCQUFrQixDQUFDK0MsWUFBWSxDQUFDRixjQUFjLENBQUM7TUFDbEUsSUFBSUwsY0FBYyxDQUFDTCxHQUFHLENBQUNXLFVBQVUsQ0FBQ1YsR0FBRyxDQUFDLEVBQUU7UUFDdEM7TUFDRjtNQUNBSSxjQUFjLENBQUNILEdBQUcsQ0FBQ1MsVUFBVSxDQUFDVixHQUFHLENBQUM7TUFDbEMsTUFBTTtRQUFFVSxVQUFVO1FBQUVSLGtCQUFrQixFQUFFdEIsT0FBTyxDQUFDSjtNQUFZLENBQUM7SUFDL0Q7RUFDRjtBQUNGO0FBRUEsT0FBTyxVQUFVb0MsMEJBQTBCQSxDQUN6Q3JDLE9BQWUsRUFDZkMsV0FBd0IsRUFDeEI7RUFBRUMsR0FBRyxHQUFHO0FBQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUtwQjtFQUNBLE1BQU1vQyxZQUFZLEdBQUcsSUFBSWxDLEdBQUcsQ0FBUyxDQUFDO0VBQ3RDLEtBQUssTUFBTUMsT0FBTyxJQUFJckIsUUFBUSxDQUFDdUQsbUJBQW1CLEVBQUU7SUFDbEQsSUFBSWxDLE9BQU8sQ0FBQ0UsWUFBWSxFQUFFO01BQ3hCO0lBQ0Y7SUFDQSxJQUNFTixXQUFXLEtBQUtWLFdBQVcsQ0FBQ2lCLEdBQUcsSUFDL0JILE9BQU8sQ0FBQ0osV0FBVyxLQUFLVixXQUFXLENBQUNpQixHQUFHLElBQ3ZDUCxXQUFXLEtBQUtJLE9BQU8sQ0FBQ0osV0FBVyxFQUNuQztNQUNBO0lBQ0Y7SUFDQSxNQUFNUSxVQUFVLEdBQUczQixJQUFJLENBQUM0QixJQUFJLENBQzFCVixPQUFPLEVBQ1BLLE9BQU8sQ0FBQ00sUUFBUSxDQUFDQyxPQUFPLENBQUMsU0FBUyxFQUFFLFVBQVUsQ0FDaEQsQ0FBQztJQUVELEtBQUssTUFBTTRCLGlCQUFpQixJQUFJdkQsT0FBTyxDQUFDd0IsVUFBVSxFQUFFLENBQUMsV0FBVyxDQUFDLENBQUMsRUFBRTtNQUNsRSxNQUFNZ0MsZ0JBQWdCLEdBQUdELGlCQUFpQixDQUFDQSxpQkFBaUIsQ0FBQ3pCLE1BQU0sR0FBRyxDQUFDLENBQUM7TUFDeEUsSUFBSSxDQUFDMEIsZ0JBQWdCLENBQUN6QixRQUFRLENBQUMsT0FBTyxDQUFDLEVBQUU7UUFDdkM7TUFDRjtNQUNBLE1BQU0wQixnQkFBZ0IsR0FBRzVELElBQUksQ0FBQzRCLElBQUksQ0FBQ0QsVUFBVSxFQUFFLEdBQUcrQixpQkFBaUIsQ0FBQztNQUNwRSxJQUFJdEMsR0FBRyxFQUFFO1FBQ1BnQixPQUFPLENBQUNoQixHQUFHLENBQUUsaUJBQWdCd0MsZ0JBQWlCLEdBQUUsQ0FBQztNQUNuRDtNQUNBLE1BQU1DLFlBQW9CLEdBQUc5RCxFQUFFLENBQUN1QyxZQUFZLENBQUNzQixnQkFBZ0IsRUFBRTtRQUM3RHJCLFFBQVEsRUFBRTtNQUNaLENBQUMsQ0FBQztNQUNGLE1BQU11QixRQUFRLEdBQUd0RCwwQkFBMEIsQ0FBQ3VELFVBQVUsQ0FBQ0YsWUFBWSxDQUFDO01BQ3BFLElBQUlMLFlBQVksQ0FBQ2QsR0FBRyxDQUFDb0IsUUFBUSxDQUFDbkIsR0FBRyxDQUFDLEVBQUU7UUFDbEM7TUFDRjtNQUNBYSxZQUFZLENBQUNaLEdBQUcsQ0FBQ2tCLFFBQVEsQ0FBQ25CLEdBQUcsQ0FBQztNQUM5QixNQUFNO1FBQUVtQixRQUFRO1FBQUVqQixrQkFBa0IsRUFBRXRCLE9BQU8sQ0FBQ0o7TUFBWSxDQUFDO0lBQzdEO0VBQ0Y7QUFDRjtBQUVBLE9BQU8sVUFBVTZDLHVDQUF1Q0EsQ0FDdEQ5QyxPQUFlLEVBQ2ZDLFdBQXdCLEVBQ3hCO0VBQUVDLEdBQUcsR0FBRztBQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsRUFRcEI7RUFDQSxNQUFNNkMseUJBQXlCLEdBQUcsSUFBSTNDLEdBQUcsQ0FBUyxDQUFDO0VBQ25ELEtBQUssTUFBTUMsT0FBTyxJQUFJckIsUUFBUSxDQUFDdUQsbUJBQW1CLEVBQUU7SUFDbEQsSUFBSWxDLE9BQU8sQ0FBQ0UsWUFBWSxFQUFFO01BQ3hCO0lBQ0Y7SUFDQSxJQUNFTixXQUFXLEtBQUtWLFdBQVcsQ0FBQ2lCLEdBQUcsSUFDL0JILE9BQU8sQ0FBQ0osV0FBVyxLQUFLVixXQUFXLENBQUNpQixHQUFHLElBQ3ZDUCxXQUFXLEtBQUtJLE9BQU8sQ0FBQ0osV0FBVyxFQUNuQztNQUNBO0lBQ0Y7SUFDQSxNQUFNUSxVQUFVLEdBQUczQixJQUFJLENBQUM0QixJQUFJLENBQzFCVixPQUFPLEVBQ1BLLE9BQU8sQ0FBQ00sUUFBUSxDQUFDQyxPQUFPLENBQUMsU0FBUyxFQUFFLFVBQVUsQ0FDaEQsQ0FBQztJQUVELEtBQUssTUFBTW9DLDZCQUE2QixJQUFJL0QsT0FBTyxDQUFDd0IsVUFBVSxFQUFFLENBQzlELFVBQVUsQ0FDWCxDQUFDLEVBQUU7TUFDRixNQUFNd0MsNEJBQTRCLEdBQ2hDRCw2QkFBNkIsQ0FBQ0EsNkJBQTZCLENBQUNqQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO01BQ3pFLElBQUksQ0FBQ2tDLDRCQUE0QixDQUFDakMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFO1FBQ25EO01BQ0Y7TUFDQSxNQUFNa0MsNEJBQTRCLEdBQUdwRSxJQUFJLENBQUM0QixJQUFJLENBQzVDRCxVQUFVLEVBQ1YsR0FBR3VDLDZCQUNMLENBQUM7TUFDRCxJQUFJOUMsR0FBRyxFQUFFO1FBQ1BnQixPQUFPLENBQUNoQixHQUFHLENBQUUsaUJBQWdCZ0QsNEJBQTZCLEdBQUUsQ0FBQztNQUMvRDtNQUNBLE1BQU1DLHdCQUFnQyxHQUFHdEUsRUFBRSxDQUFDdUMsWUFBWSxDQUN0RDhCLDRCQUE0QixFQUM1QjtRQUNFN0IsUUFBUSxFQUFFO01BQ1osQ0FDRixDQUFDO01BQ0QsTUFBTStCLG9CQUFvQixHQUN4QjlELDBCQUEwQixDQUFDK0Qsc0JBQXNCLENBQy9DRix3QkFDRixDQUFDO01BQ0gsSUFBSUoseUJBQXlCLENBQUN2QixHQUFHLENBQUM0QixvQkFBb0IsQ0FBQzNCLEdBQUcsQ0FBQyxFQUFFO1FBQzNEO01BQ0Y7TUFDQXNCLHlCQUF5QixDQUFDckIsR0FBRyxDQUFDMEIsb0JBQW9CLENBQUMzQixHQUFHLENBQUM7TUFDdkQsTUFBTTtRQUFFMkIsb0JBQW9CO1FBQUV6QixrQkFBa0IsRUFBRXRCLE9BQU8sQ0FBQ0o7TUFBWSxDQUFDO0lBQ3pFO0VBQ0Y7QUFDRjtBQUVBLE9BQU8sVUFBVXFELHdCQUF3QkEsQ0FDdkN0RCxPQUFlLEVBQ2ZDLFdBQXdCLEVBQ3hCO0VBQUVDLEdBQUcsR0FBRztBQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsRUFLcEI7RUFDQSxNQUFNcUQsVUFBVSxHQUFHLElBQUluRCxHQUFHLENBQVMsQ0FBQztFQUNwQyxLQUFLLE1BQU1DLE9BQU8sSUFBSXJCLFFBQVEsQ0FBQ3NCLGdCQUFnQixFQUFFO0lBQy9DLElBQUlELE9BQU8sQ0FBQ0UsWUFBWSxFQUFFO01BQ3hCO0lBQ0Y7SUFDQSxJQUNFTixXQUFXLEtBQUtWLFdBQVcsQ0FBQ2lCLEdBQUcsSUFDL0JILE9BQU8sQ0FBQ0osV0FBVyxLQUFLVixXQUFXLENBQUNpQixHQUFHLElBQ3ZDUCxXQUFXLEtBQUtJLE9BQU8sQ0FBQ0osV0FBVyxFQUNuQztNQUNBO0lBQ0Y7SUFDQSxNQUFNUSxVQUFVLEdBQUczQixJQUFJLENBQUM0QixJQUFJLENBQzFCVixPQUFPLEVBQ1BLLE9BQU8sQ0FBQ00sUUFBUSxDQUFDQyxPQUFPLENBQUMsU0FBUyxFQUFFLFVBQVUsQ0FDaEQsQ0FBQztJQUVELEtBQUssTUFBTTRDLGVBQWUsSUFBSXZFLE9BQU8sQ0FBQ3dCLFVBQVUsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUU7TUFDOUQsTUFBTWdELGNBQWMsR0FBR0QsZUFBZSxDQUFDQSxlQUFlLENBQUN6QyxNQUFNLEdBQUcsQ0FBQyxDQUFDO01BQ2xFLElBQUksQ0FBQzBDLGNBQWMsQ0FBQ3pDLFFBQVEsQ0FBQyxPQUFPLENBQUMsRUFBRTtRQUNyQztNQUNGO01BQ0EsTUFBTTBDLGNBQWMsR0FBRzVFLElBQUksQ0FBQzRCLElBQUksQ0FBQ0QsVUFBVSxFQUFFLEdBQUcrQyxlQUFlLENBQUM7TUFDaEUsSUFBSXRELEdBQUcsRUFBRTtRQUNQZ0IsT0FBTyxDQUFDaEIsR0FBRyxDQUFFLGlCQUFnQndELGNBQWUsR0FBRSxDQUFDO01BQ2pEO01BQ0EsTUFBTUMsVUFBa0IsR0FBRzlFLEVBQUUsQ0FBQ3VDLFlBQVksQ0FBQ3NDLGNBQWMsRUFBRTtRQUN6RHJDLFFBQVEsRUFBRTtNQUNaLENBQUMsQ0FBQztNQUNGLE1BQU11QyxNQUFNLEdBQUd6RSx1QkFBdUIsQ0FBQzBFLFFBQVEsQ0FBQ0YsVUFBVSxDQUFDO01BQzNEO01BQ0EsSUFBSUosVUFBVSxDQUFDL0IsR0FBRyxDQUFDb0MsTUFBTSxDQUFDbkMsR0FBRyxDQUFDLEVBQUU7UUFDOUI7TUFDRjtNQUNBOEIsVUFBVSxDQUFDN0IsR0FBRyxDQUFDa0MsTUFBTSxDQUFDbkMsR0FBRyxDQUFDO01BQzFCLE1BQU07UUFBRW1DLE1BQU07UUFBRWpDLGtCQUFrQixFQUFFdEIsT0FBTyxDQUFDSjtNQUFZLENBQUM7SUFDM0Q7RUFDRjtBQUNGO0FBRUEsT0FBTyxVQUFVNkQseUJBQXlCQSxDQUN4QzlELE9BQWUsRUFDZkMsV0FBd0IsRUFDeEI7RUFBRUMsR0FBRyxHQUFHO0FBQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUtwQjtFQUNBLE1BQU02RCxXQUFXLEdBQUcsSUFBSTNELEdBQUcsQ0FBUyxDQUFDO0VBQ3JDLEtBQUssTUFBTUMsT0FBTyxJQUFJckIsUUFBUSxDQUFDZ0YsT0FBTyxFQUFFO0lBQ3RDLElBQUkzRCxPQUFPLENBQUNFLFlBQVksRUFBRTtNQUN4QjtJQUNGO0lBQ0EsSUFDRU4sV0FBVyxLQUFLVixXQUFXLENBQUNpQixHQUFHLElBQy9CSCxPQUFPLENBQUNKLFdBQVcsS0FBS1YsV0FBVyxDQUFDaUIsR0FBRyxJQUN2Q1AsV0FBVyxLQUFLSSxPQUFPLENBQUNKLFdBQVcsRUFDbkM7TUFDQTtJQUNGO0lBQ0EsTUFBTVEsVUFBVSxHQUFHM0IsSUFBSSxDQUFDNEIsSUFBSSxDQUMxQlYsT0FBTyxFQUNQSyxPQUFPLENBQUNNLFFBQVEsQ0FBQ0MsT0FBTyxDQUFDLFNBQVMsRUFBRSxVQUFVLENBQ2hELENBQUM7SUFFRCxLQUFLLE1BQU1xRCxnQkFBZ0IsSUFBSWhGLE9BQU8sQ0FBQ3dCLFVBQVUsQ0FBQyxFQUFFO01BQ2xELE1BQU15RCxlQUFlLEdBQUdELGdCQUFnQixDQUFDQSxnQkFBZ0IsQ0FBQ2xELE1BQU0sR0FBRyxDQUFDLENBQUM7TUFDckUsSUFBSSxDQUFDbUQsZUFBZSxDQUFDbEQsUUFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFO1FBQ3RDO01BQ0Y7TUFDQSxNQUFNbUQsZUFBZSxHQUFHckYsSUFBSSxDQUFDNEIsSUFBSSxDQUFDRCxVQUFVLEVBQUUsR0FBR3dELGdCQUFnQixDQUFDO01BQ2xFLElBQUkvRCxHQUFHLEVBQUU7UUFDUGdCLE9BQU8sQ0FBQ2hCLEdBQUcsQ0FBRSxpQkFBZ0JpRSxlQUFnQixHQUFFLENBQUM7TUFDbEQ7TUFDQSxNQUFNQyxXQUFtQixHQUFHdkYsRUFBRSxDQUFDdUMsWUFBWSxDQUFDK0MsZUFBZSxFQUFFO1FBQzNEOUMsUUFBUSxFQUFFO01BQ1osQ0FBQyxDQUFDO01BQ0YsTUFBTWdELE9BQU8sR0FBR2pGLGNBQWMsQ0FBQ2tGLFNBQVMsQ0FBQ0YsV0FBVyxDQUFDO01BQ3JELElBQUlMLFdBQVcsQ0FBQ3ZDLEdBQUcsQ0FBQzZDLE9BQU8sQ0FBQzVDLEdBQUcsQ0FBQyxFQUFFO1FBQ2hDO01BQ0Y7TUFDQXNDLFdBQVcsQ0FBQ3JDLEdBQUcsQ0FBQzJDLE9BQU8sQ0FBQzVDLEdBQUcsQ0FBQztNQUM1QixNQUFNO1FBQUU0QyxPQUFPO1FBQUUxQyxrQkFBa0IsRUFBRXRCLE9BQU8sQ0FBQ0o7TUFBWSxDQUFDO0lBQzVEO0VBQ0Y7QUFDRjtBQUVBLE9BQU8sVUFBVXNFLHlCQUF5QkEsQ0FDeEN2RSxPQUFlLEVBQ2ZDLFdBQXdCLEVBQ3hCO0VBQUVDLEdBQUcsR0FBRztBQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsRUFLcEI7RUFDQSxNQUFNc0UsV0FBVyxHQUFHLElBQUlwRSxHQUFHLENBQVMsQ0FBQztFQUNyQyxLQUFLLE1BQU1DLE9BQU8sSUFBSXJCLFFBQVEsQ0FBQ3lGLFFBQVEsRUFBRTtJQUN2QyxJQUFJcEUsT0FBTyxDQUFDRSxZQUFZLEVBQUU7TUFDeEI7SUFDRjtJQUNBLElBQ0VOLFdBQVcsS0FBS1YsV0FBVyxDQUFDaUIsR0FBRyxJQUMvQkgsT0FBTyxDQUFDSixXQUFXLEtBQUtWLFdBQVcsQ0FBQ2lCLEdBQUcsSUFDdkNQLFdBQVcsS0FBS0ksT0FBTyxDQUFDSixXQUFXLEVBQ25DO01BQ0E7SUFDRjtJQUNBLE1BQU1RLFVBQVUsR0FBRzNCLElBQUksQ0FBQzRCLElBQUksQ0FDMUJWLE9BQU8sRUFDUEssT0FBTyxDQUFDTSxRQUFRLENBQUNDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsVUFBVSxDQUNoRCxDQUFDO0lBRUQsS0FBSyxNQUFNOEQsZ0JBQWdCLElBQUl6RixPQUFPLENBQUN3QixVQUFVLENBQUMsRUFBRTtNQUNsRCxNQUFNa0UsZUFBZSxHQUFHRCxnQkFBZ0IsQ0FBQ0EsZ0JBQWdCLENBQUMzRCxNQUFNLEdBQUcsQ0FBQyxDQUFDO01BQ3JFLElBQUksQ0FBQzRELGVBQWUsQ0FBQzNELFFBQVEsQ0FBQyxPQUFPLENBQUMsRUFBRTtRQUN0QztNQUNGO01BQ0EsTUFBTTRELGVBQWUsR0FBRzlGLElBQUksQ0FBQzRCLElBQUksQ0FBQ0QsVUFBVSxFQUFFLEdBQUdpRSxnQkFBZ0IsQ0FBQztNQUNsRSxJQUFJeEUsR0FBRyxFQUFFO1FBQ1BnQixPQUFPLENBQUNoQixHQUFHLENBQUUsaUJBQWdCMEUsZUFBZ0IsR0FBRSxDQUFDO01BQ2xEO01BQ0EsTUFBTUMsV0FBbUIsR0FBR2hHLEVBQUUsQ0FBQ3VDLFlBQVksQ0FBQ3dELGVBQWUsRUFBRTtRQUMzRHZELFFBQVEsRUFBRTtNQUNaLENBQUMsQ0FBQztNQUNGLE1BQU15RCxPQUFPLEdBQUd0RixlQUFlLENBQUN1RixTQUFTLENBQUNGLFdBQVcsQ0FBQztNQUN0RCxJQUFJTCxXQUFXLENBQUNoRCxHQUFHLENBQUNzRCxPQUFPLENBQUNyRCxHQUFHLENBQUMsRUFBRTtRQUNoQztNQUNGO01BQ0ErQyxXQUFXLENBQUM5QyxHQUFHLENBQUNvRCxPQUFPLENBQUNyRCxHQUFHLENBQUM7TUFDNUIsTUFBTTtRQUFFcUQsT0FBTztRQUFFbkQsa0JBQWtCLEVBQUV0QixPQUFPLENBQUNKO01BQVksQ0FBQztJQUM1RDtFQUNGO0FBQ0Y7QUFFQSxPQUFPLFVBQVUrRSwwQkFBMEJBLENBQ3pDaEYsT0FBZSxFQUNmQyxXQUF3QixFQUN4QjtFQUFFQyxHQUFHLEdBQUc7QUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBS3BCO0VBQ0EsTUFBTStFLFlBQVksR0FBRyxJQUFJN0UsR0FBRyxDQUFTLENBQUM7RUFDdEMsS0FBSyxNQUFNQyxPQUFPLElBQUlyQixRQUFRLENBQUNrRyxTQUFTLEVBQUU7SUFDeEMsSUFBSTdFLE9BQU8sQ0FBQ0UsWUFBWSxFQUFFO01BQ3hCO0lBQ0Y7SUFDQSxJQUNFTixXQUFXLEtBQUtWLFdBQVcsQ0FBQ2lCLEdBQUcsSUFDL0JILE9BQU8sQ0FBQ0osV0FBVyxLQUFLVixXQUFXLENBQUNpQixHQUFHLElBQ3ZDUCxXQUFXLEtBQUtJLE9BQU8sQ0FBQ0osV0FBVyxFQUNuQztNQUNBO0lBQ0Y7SUFDQSxNQUFNUSxVQUFVLEdBQUczQixJQUFJLENBQUM0QixJQUFJLENBQzFCVixPQUFPLEVBQ1BLLE9BQU8sQ0FBQ00sUUFBUSxDQUFDQyxPQUFPLENBQUMsU0FBUyxFQUFFLFVBQVUsQ0FDaEQsQ0FBQztJQUVELEtBQUssTUFBTXVFLGlCQUFpQixJQUFJbEcsT0FBTyxDQUFDd0IsVUFBVSxDQUFDLEVBQUU7TUFDbkQsTUFBTTJFLGdCQUFnQixHQUFHRCxpQkFBaUIsQ0FBQ0EsaUJBQWlCLENBQUNwRSxNQUFNLEdBQUcsQ0FBQyxDQUFDO01BQ3hFLElBQUksQ0FBQ3FFLGdCQUFnQixDQUFDcEUsUUFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFO1FBQ3ZDO01BQ0Y7TUFDQSxNQUFNcUUsZ0JBQWdCLEdBQUd2RyxJQUFJLENBQUM0QixJQUFJLENBQUNELFVBQVUsRUFBRSxHQUFHMEUsaUJBQWlCLENBQUM7TUFDcEUsSUFBSWpGLEdBQUcsRUFBRTtRQUNQZ0IsT0FBTyxDQUFDaEIsR0FBRyxDQUFFLGlCQUFnQm1GLGdCQUFpQixHQUFFLENBQUM7TUFDbkQ7TUFDQSxNQUFNQyxZQUFvQixHQUFHekcsRUFBRSxDQUFDdUMsWUFBWSxDQUFDaUUsZ0JBQWdCLEVBQUU7UUFDN0RoRSxRQUFRLEVBQUU7TUFDWixDQUFDLENBQUM7TUFDRixNQUFNa0UsUUFBUSxHQUFHOUYsZ0JBQWdCLENBQUMrRixVQUFVLENBQUNGLFlBQVksQ0FBQztNQUMxRCxJQUFJTCxZQUFZLENBQUN6RCxHQUFHLENBQUMrRCxRQUFRLENBQUM5RCxHQUFHLENBQUMsRUFBRTtRQUNsQztNQUNGO01BQ0F3RCxZQUFZLENBQUN2RCxHQUFHLENBQUM2RCxRQUFRLENBQUM5RCxHQUFHLENBQUM7TUFDOUIsTUFBTTtRQUFFOEQsUUFBUTtRQUFFNUQsa0JBQWtCLEVBQUV0QixPQUFPLENBQUNKO01BQVksQ0FBQztJQUM3RDtFQUNGO0FBQ0Y7QUFFQSxPQUFPLFVBQVV3Riw4QkFBOEJBLENBQzdDekYsT0FBZSxFQUNmQyxXQUF3QixFQUN4QjtFQUFFQyxHQUFHLEdBQUc7QUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBS3BCO0VBQ0EsTUFBTXdGLGdCQUFnQixHQUFHLElBQUl0RixHQUFHLENBQVMsQ0FBQztFQUMxQyxLQUFLLE1BQU1DLE9BQU8sSUFBSXJCLFFBQVEsQ0FBQzJHLG9CQUFvQixFQUFFO0lBQ25ELElBQUl0RixPQUFPLENBQUNFLFlBQVksRUFBRTtNQUN4QjtJQUNGO0lBQ0EsSUFDRU4sV0FBVyxLQUFLVixXQUFXLENBQUNpQixHQUFHLElBQy9CSCxPQUFPLENBQUNKLFdBQVcsS0FBS1YsV0FBVyxDQUFDaUIsR0FBRyxJQUN2Q1AsV0FBVyxLQUFLSSxPQUFPLENBQUNKLFdBQVcsRUFDbkM7TUFDQTtJQUNGO0lBQ0EsTUFBTVEsVUFBVSxHQUFHM0IsSUFBSSxDQUFDNEIsSUFBSSxDQUMxQlYsT0FBTyxFQUNQSyxPQUFPLENBQUNNLFFBQVEsQ0FBQ0MsT0FBTyxDQUFDLFFBQVEsRUFBRSxVQUFVLENBQy9DLENBQUM7SUFFRCxLQUFLLE1BQU1nRixvQkFBb0IsSUFBSTNHLE9BQU8sQ0FBQ3dCLFVBQVUsQ0FBQyxFQUFFO01BQ3RELE1BQU1vRixtQkFBbUIsR0FDdkJELG9CQUFvQixDQUFDQSxvQkFBb0IsQ0FBQzdFLE1BQU0sR0FBRyxDQUFDLENBQUM7TUFDdkQsSUFBSSxDQUFDOEUsbUJBQW1CLENBQUM3RSxRQUFRLENBQUMsT0FBTyxDQUFDLEVBQUU7UUFDMUM7TUFDRjtNQUNBLE1BQU04RSxtQkFBbUIsR0FBR2hILElBQUksQ0FBQzRCLElBQUksQ0FBQ0QsVUFBVSxFQUFFLEdBQUdtRixvQkFBb0IsQ0FBQztNQUMxRSxJQUFJMUYsR0FBRyxFQUFFO1FBQ1BnQixPQUFPLENBQUNoQixHQUFHLENBQUUsaUJBQWdCNEYsbUJBQW9CLEdBQUUsQ0FBQztNQUN0RDtNQUNBLE1BQU1DLGVBQXVCLEdBQUdsSCxFQUFFLENBQUN1QyxZQUFZLENBQUMwRSxtQkFBbUIsRUFBRTtRQUNuRXpFLFFBQVEsRUFBRTtNQUNaLENBQUMsQ0FBQztNQUNGLE1BQU0yRSxXQUFXLEdBQUd0RyxvQkFBb0IsQ0FBQ3VHLGFBQWEsQ0FBQ0YsZUFBZSxDQUFDO01BQ3ZFLElBQUlMLGdCQUFnQixDQUFDbEUsR0FBRyxDQUFDd0UsV0FBVyxDQUFDdkUsR0FBRyxDQUFDLEVBQUU7UUFDekM7TUFDRjtNQUNBaUUsZ0JBQWdCLENBQUNoRSxHQUFHLENBQUNzRSxXQUFXLENBQUN2RSxHQUFHLENBQUM7TUFDckMsTUFBTTtRQUFFdUUsV0FBVztRQUFFckUsa0JBQWtCLEVBQUV0QixPQUFPLENBQUNKO01BQVksQ0FBQztJQUNoRTtFQUNGO0FBQ0Y7O0FBRUE7QUFDQTtBQUNBLE9BQU8sU0FBU2lHLGlCQUFpQkEsQ0FDL0JsRyxPQUFlLEVBQ2ZtRyxlQUFnQyxFQUNoQ2xHLFdBQXdCLEVBQ3hCO0VBQUVDLEdBQUcsR0FBRztBQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsRUFDZDtFQUNOLE1BQU1rRyxXQUFzQyxHQUFHLENBQUMsQ0FBQztFQUNqRCxNQUFNQyxXQUFzQyxHQUFHLENBQUMsQ0FBQztFQUNqRCxJQUFJRixlQUFlLEdBQUdwSCxlQUFlLENBQUN1SCxnQkFBZ0IsRUFBRTtJQUN0RCxLQUFLLE1BQU1qRyxPQUFPLElBQUlyQixRQUFRLENBQUNzQixnQkFBZ0IsRUFBRTtNQUMvQyxJQUFJRCxPQUFPLENBQUNFLFlBQVksRUFBRTtRQUN4QjtNQUNGO01BQ0EsSUFDRU4sV0FBVyxLQUFLVixXQUFXLENBQUNpQixHQUFHLElBQy9CSCxPQUFPLENBQUNKLFdBQVcsS0FBS1YsV0FBVyxDQUFDaUIsR0FBRyxJQUN2Q1AsV0FBVyxLQUFLSSxPQUFPLENBQUNKLFdBQVcsRUFDbkM7UUFDQTtNQUNGO01BQ0EsTUFBTVEsVUFBVSxHQUFHM0IsSUFBSSxDQUFDNEIsSUFBSSxDQUMxQlYsT0FBTyxFQUNQSyxPQUFPLENBQUNNLFFBQVEsQ0FBQ0MsT0FBTyxDQUFDLFNBQVMsRUFBRSxVQUFVLENBQ2hELENBQUM7TUFFRCxLQUFLLE1BQU1DLGVBQWUsSUFBSTVCLE9BQU8sQ0FBQ3dCLFVBQVUsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUU7UUFDOUQsTUFBTUssY0FBYyxHQUFHRCxlQUFlLENBQUNBLGVBQWUsQ0FBQ0UsTUFBTSxHQUFHLENBQUMsQ0FBQztRQUNsRSxJQUFJLENBQUNELGNBQWMsQ0FBQ0UsUUFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFO1VBQ3JDO1FBQ0Y7UUFDQSxNQUFNQyxjQUFjLEdBQUduQyxJQUFJLENBQUM0QixJQUFJLENBQUNELFVBQVUsRUFBRSxHQUFHSSxlQUFlLENBQUM7UUFDaEUsSUFBSVgsR0FBRyxFQUFFO1VBQ1BnQixPQUFPLENBQUNoQixHQUFHLENBQUUsaUJBQWdCZSxjQUFlLEdBQUUsQ0FBQztRQUNqRDtRQUNBLE1BQU1FLFVBQWtCLEdBQUd0QyxFQUFFLENBQUN1QyxZQUFZLENBQUNILGNBQWMsRUFBRTtVQUN6REksUUFBUSxFQUFFO1FBQ1osQ0FBQyxDQUFDO1FBQ0YsTUFBTUMsTUFBTSxHQUFHbkMsdUJBQXVCLENBQUNvQyxRQUFRLENBQUNKLFVBQVUsQ0FBQztRQUMzRDtRQUNBLElBQUlpRixXQUFXLENBQUM5RSxNQUFNLENBQUNHLEdBQUcsQ0FBQyxLQUFLOEUsU0FBUyxFQUFFO1VBQ3pDSCxXQUFXLENBQUM5RSxNQUFNLENBQUNHLEdBQUcsQ0FBQyxHQUFHSCxNQUFNO1FBQ2xDO01BQ0Y7TUFFQSxLQUFLLE1BQU1rQyxlQUFlLElBQUl2RSxPQUFPLENBQUN3QixVQUFVLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFO1FBQzlELE1BQU1nRCxjQUFjLEdBQUdELGVBQWUsQ0FBQ0EsZUFBZSxDQUFDekMsTUFBTSxHQUFHLENBQUMsQ0FBQztRQUNsRSxJQUFJLENBQUMwQyxjQUFjLENBQUN6QyxRQUFRLENBQUMsT0FBTyxDQUFDLEVBQUU7VUFDckM7UUFDRjtRQUNBLE1BQU0wQyxjQUFjLEdBQUc1RSxJQUFJLENBQUM0QixJQUFJLENBQUNELFVBQVUsRUFBRSxHQUFHK0MsZUFBZSxDQUFDO1FBQ2hFLElBQUl0RCxHQUFHLEVBQUU7VUFDUGdCLE9BQU8sQ0FBQ2hCLEdBQUcsQ0FBRSxpQkFBZ0J3RCxjQUFlLEdBQUUsQ0FBQztRQUNqRDtRQUNBLE1BQU1DLFVBQWtCLEdBQUc5RSxFQUFFLENBQUN1QyxZQUFZLENBQUNzQyxjQUFjLEVBQUU7VUFDekRyQyxRQUFRLEVBQUU7UUFDWixDQUFDLENBQUM7UUFDRixNQUFNdUMsTUFBTSxHQUFHekUsdUJBQXVCLENBQUMwRSxRQUFRLENBQUNGLFVBQVUsQ0FBQztRQUMzRDtRQUNBLElBQUkwQyxXQUFXLENBQUN6QyxNQUFNLENBQUNuQyxHQUFHLENBQUMsS0FBSzhFLFNBQVMsRUFBRTtVQUN6Q0YsV0FBVyxDQUFDekMsTUFBTSxDQUFDbkMsR0FBRyxDQUFDLEdBQUdtQyxNQUFNO1FBQ2xDO01BQ0Y7SUFDRjtFQUNGO0VBRUEsTUFBTTRDLFlBQXdDLEdBQUcsQ0FBQyxDQUFDO0VBQ25ELE1BQU1DLGFBQTJDLEdBQUcsQ0FBQyxDQUFDO0VBQ3RELE1BQU1DLG9CQUF5RCxHQUFHLENBQUMsQ0FBQztFQUNwRSxJQUFJUCxlQUFlLEdBQUdwSCxlQUFlLENBQUM0SCxPQUFPLEVBQUU7SUFDN0MsS0FBSyxNQUFNdEcsT0FBTyxJQUFJckIsUUFBUSxDQUFDZ0YsT0FBTyxFQUFFO01BQ3RDLElBQUkzRCxPQUFPLENBQUNFLFlBQVksRUFBRTtRQUN4QjtNQUNGO01BQ0EsSUFDRU4sV0FBVyxLQUFLVixXQUFXLENBQUNpQixHQUFHLElBQy9CSCxPQUFPLENBQUNKLFdBQVcsS0FBS1YsV0FBVyxDQUFDaUIsR0FBRyxJQUN2Q1AsV0FBVyxLQUFLSSxPQUFPLENBQUNKLFdBQVcsRUFDbkM7UUFDQTtNQUNGO01BQ0EsTUFBTVEsVUFBVSxHQUFHM0IsSUFBSSxDQUFDNEIsSUFBSSxDQUMxQlYsT0FBTyxFQUNQSyxPQUFPLENBQUNNLFFBQVEsQ0FBQ0MsT0FBTyxDQUFDLFNBQVMsRUFBRSxVQUFVLENBQ2hELENBQUM7TUFDRCxLQUFLLE1BQU1xRCxnQkFBZ0IsSUFBSWhGLE9BQU8sQ0FBQ3dCLFVBQVUsQ0FBQyxFQUFFO1FBQ2xELE1BQU15RCxlQUFlLEdBQUdELGdCQUFnQixDQUFDQSxnQkFBZ0IsQ0FBQ2xELE1BQU0sR0FBRyxDQUFDLENBQUM7UUFDckUsSUFBSSxDQUFDbUQsZUFBZSxDQUFDbEQsUUFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFO1VBQ3RDO1FBQ0Y7UUFDQSxNQUFNbUQsZUFBZSxHQUFHckYsSUFBSSxDQUFDNEIsSUFBSSxDQUFDRCxVQUFVLEVBQUUsR0FBR3dELGdCQUFnQixDQUFDO1FBQ2xFLElBQUkvRCxHQUFHLEVBQUU7VUFDUGdCLE9BQU8sQ0FBQ2hCLEdBQUcsQ0FBRSxpQkFBZ0JpRSxlQUFnQixHQUFFLENBQUM7UUFDbEQ7UUFDQSxNQUFNQyxXQUFtQixHQUFHdkYsRUFBRSxDQUFDdUMsWUFBWSxDQUFDK0MsZUFBZSxFQUFFO1VBQzNEOUMsUUFBUSxFQUFFO1FBQ1osQ0FBQyxDQUFDO1FBQ0YsTUFBTWdELE9BQU8sR0FBR2pGLGNBQWMsQ0FBQ2tGLFNBQVMsQ0FBQ0YsV0FBVyxDQUFDO1FBQ3JELElBQUlvQyxZQUFZLENBQUNuQyxPQUFPLENBQUM1QyxHQUFHLENBQUMsS0FBSzhFLFNBQVMsRUFBRTtVQUMzQ0MsWUFBWSxDQUFDbkMsT0FBTyxDQUFDNUMsR0FBRyxDQUFDLEdBQUc0QyxPQUFPO1FBQ3JDO1FBRUEsTUFBTXVDLEdBQUcsR0FBR3ZDLE9BQU8sQ0FBQ3dDLGNBQWMsQ0FBQ0MsV0FBVyxDQUFDLENBQUMsQ0FBQ0MsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM5RCxJQUFJQyxhQUFhLEdBQUdQLGFBQWEsQ0FBQ0csR0FBRyxDQUFDO1FBQ3RDLElBQUlJLGFBQWEsS0FBS1QsU0FBUyxFQUFFO1VBQy9CUyxhQUFhLEdBQUdQLGFBQWEsQ0FBQ0csR0FBRyxDQUFDLEdBQUcsRUFBRTtRQUN6QztRQUNBSSxhQUFhLENBQUNDLElBQUksQ0FBQzVDLE9BQU8sQ0FBQztRQUUzQixNQUFNNkMsR0FBRyxHQUFHN0MsT0FBTyxDQUFDNkMsR0FBRztRQUN2QixJQUFJQSxHQUFHLEtBQUtYLFNBQVMsRUFBRTtVQUNyQixLQUFLLE1BQU1ZLFFBQVEsSUFBSUQsR0FBRyxDQUFDRSxTQUFTLElBQUksRUFBRSxFQUFFO1lBQzFDLEtBQUssTUFBTUMsb0JBQW9CLElBQUlGLFFBQVEsQ0FBQ0csdUJBQXVCLElBQ2pFLEVBQUUsRUFBRTtjQUNKLElBQUlDLG9CQUFvQixHQUN0QmIsb0JBQW9CLENBQUNXLG9CQUFvQixDQUFDO2NBQzVDLElBQUlFLG9CQUFvQixLQUFLaEIsU0FBUyxFQUFFO2dCQUN0Q2dCLG9CQUFvQixHQUFHYixvQkFBb0IsQ0FDekNXLG9CQUFvQixDQUNyQixHQUFHLEVBQUU7Y0FDUjtjQUNBRSxvQkFBb0IsQ0FBQ04sSUFBSSxDQUFDNUMsT0FBTyxDQUFDO1lBQ3BDO1VBQ0Y7UUFDRjtNQUNGO0lBQ0Y7RUFDRjtFQUVBLE1BQU1tRCxlQUE4QyxHQUFHLENBQUMsQ0FBQztFQUN6RCxJQUFJckIsZUFBZSxHQUFHcEgsZUFBZSxDQUFDMEksV0FBVyxFQUFFO0lBQ2pELEtBQUssTUFBTXBILE9BQU8sSUFBSXJCLFFBQVEsQ0FBQzhDLFdBQVcsRUFBRTtNQUMxQyxJQUFJekIsT0FBTyxDQUFDRSxZQUFZLEVBQUU7UUFDeEI7TUFDRjtNQUNBLElBQ0VOLFdBQVcsS0FBS1YsV0FBVyxDQUFDaUIsR0FBRyxJQUMvQkgsT0FBTyxDQUFDSixXQUFXLEtBQUtWLFdBQVcsQ0FBQ2lCLEdBQUcsSUFDdkNQLFdBQVcsS0FBS0ksT0FBTyxDQUFDSixXQUFXLEVBQ25DO1FBQ0E7TUFDRjtNQUNBLE1BQU1RLFVBQVUsR0FBRzNCLElBQUksQ0FBQzRCLElBQUksQ0FDMUJWLE9BQU8sRUFDUEssT0FBTyxDQUFDTSxRQUFRLENBQUNDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsVUFBVSxDQUNoRCxDQUFDO01BRUQsS0FBSyxNQUFNbUIsbUJBQW1CLElBQUk5QyxPQUFPLENBQUN3QixVQUFVLENBQUMsRUFBRTtRQUNyRCxNQUFNdUIsa0JBQWtCLEdBQ3RCRCxtQkFBbUIsQ0FBQ0EsbUJBQW1CLENBQUNoQixNQUFNLEdBQUcsQ0FBQyxDQUFDO1FBQ3JELElBQUksQ0FBQ2lCLGtCQUFrQixDQUFDaEIsUUFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFO1VBQ3pDO1FBQ0Y7UUFDQSxNQUFNaUIsa0JBQWtCLEdBQUduRCxJQUFJLENBQUM0QixJQUFJLENBQUNELFVBQVUsRUFBRSxHQUFHc0IsbUJBQW1CLENBQUM7UUFDeEUsSUFBSTdCLEdBQUcsRUFBRTtVQUNQZ0IsT0FBTyxDQUFDaEIsR0FBRyxDQUFFLGlCQUFnQitCLGtCQUFtQixHQUFFLENBQUM7UUFDckQ7UUFDQSxNQUFNQyxjQUFzQixHQUFHckQsRUFBRSxDQUFDdUMsWUFBWSxDQUFDYSxrQkFBa0IsRUFBRTtVQUNqRVosUUFBUSxFQUFFO1FBQ1osQ0FBQyxDQUFDO1FBQ0YsTUFBTWMsVUFBVSxHQUFHOUMsa0JBQWtCLENBQUMrQyxZQUFZLENBQUNGLGNBQWMsQ0FBQztRQUNsRSxJQUFJc0YsZUFBZSxDQUFDckYsVUFBVSxDQUFDVixHQUFHLENBQUMsS0FBSzhFLFNBQVMsRUFBRTtVQUNqRGlCLGVBQWUsQ0FBQ3JGLFVBQVUsQ0FBQ1YsR0FBRyxDQUFDLEdBQUdVLFVBQVU7UUFDOUM7TUFDRjtJQUNGO0VBQ0Y7RUFFQSxNQUFNdUYsYUFBMEMsR0FBRyxDQUFDLENBQUM7RUFDckQsTUFBTUMsaUNBRUwsR0FBRyxDQUFDLENBQUM7RUFDTixNQUFNQyxpQ0FFTCxHQUFHLENBQUMsQ0FBQztFQUNOLE1BQU1DLHlCQUFrRSxHQUFHLENBQUMsQ0FBQztFQUM3RSxJQUFJMUIsZUFBZSxHQUFHcEgsZUFBZSxDQUFDK0ksbUJBQW1CLEVBQUU7SUFDekQsS0FBSyxNQUFNekgsT0FBTyxJQUFJckIsUUFBUSxDQUFDdUQsbUJBQW1CLEVBQUU7TUFDbEQsSUFBSWxDLE9BQU8sQ0FBQ0UsWUFBWSxFQUFFO1FBQ3hCO01BQ0Y7TUFDQSxJQUNFTixXQUFXLEtBQUtWLFdBQVcsQ0FBQ2lCLEdBQUcsSUFDL0JILE9BQU8sQ0FBQ0osV0FBVyxLQUFLVixXQUFXLENBQUNpQixHQUFHLElBQ3ZDUCxXQUFXLEtBQUtJLE9BQU8sQ0FBQ0osV0FBVyxFQUNuQztRQUNBO01BQ0Y7TUFDQSxNQUFNUSxVQUFVLEdBQUczQixJQUFJLENBQUM0QixJQUFJLENBQzFCVixPQUFPLEVBQ1BLLE9BQU8sQ0FBQ00sUUFBUSxDQUFDQyxPQUFPLENBQUMsU0FBUyxFQUFFLFVBQVUsQ0FDaEQsQ0FBQztNQUVELEtBQUssTUFBTTRCLGlCQUFpQixJQUFJdkQsT0FBTyxDQUFDd0IsVUFBVSxFQUFFLENBQUMsV0FBVyxDQUFDLENBQUMsRUFBRTtRQUNsRSxNQUFNZ0MsZ0JBQWdCLEdBQUdELGlCQUFpQixDQUFDQSxpQkFBaUIsQ0FBQ3pCLE1BQU0sR0FBRyxDQUFDLENBQUM7UUFDeEUsSUFBSSxDQUFDMEIsZ0JBQWdCLENBQUN6QixRQUFRLENBQUMsT0FBTyxDQUFDLEVBQUU7VUFDdkM7UUFDRjtRQUNBLE1BQU0wQixnQkFBZ0IsR0FBRzVELElBQUksQ0FBQzRCLElBQUksQ0FBQ0QsVUFBVSxFQUFFLEdBQUcrQixpQkFBaUIsQ0FBQztRQUNwRSxJQUFJdEMsR0FBRyxFQUFFO1VBQ1BnQixPQUFPLENBQUNoQixHQUFHLENBQUUsaUJBQWdCd0MsZ0JBQWlCLEdBQUUsQ0FBQztRQUNuRDtRQUNBLE1BQU1DLFlBQW9CLEdBQUc5RCxFQUFFLENBQUN1QyxZQUFZLENBQUNzQixnQkFBZ0IsRUFBRTtVQUM3RHJCLFFBQVEsRUFBRTtRQUNaLENBQUMsQ0FBQztRQUNGLE1BQU11QixRQUFRLEdBQUd0RCwwQkFBMEIsQ0FBQ3VELFVBQVUsQ0FBQ0YsWUFBWSxDQUFDO1FBQ3BFLElBQUkrRSxhQUFhLENBQUM5RSxRQUFRLENBQUNuQixHQUFHLENBQUMsS0FBSzhFLFNBQVMsRUFBRTtVQUM3Q21CLGFBQWEsQ0FBQzlFLFFBQVEsQ0FBQ25CLEdBQUcsQ0FBQyxHQUFHbUIsUUFBUTtRQUN4QztNQUNGO01BRUEsS0FBSyxNQUFNbUYsZ0JBQWdCLElBQUk5SSxPQUFPLENBQUN3QixVQUFVLEVBQUUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxFQUFFO1FBQ2hFLE1BQU11SCxlQUFlLEdBQUdELGdCQUFnQixDQUFDQSxnQkFBZ0IsQ0FBQ2hILE1BQU0sR0FBRyxDQUFDLENBQUM7UUFDckUsSUFBSSxDQUFDaUgsZUFBZSxDQUFDaEgsUUFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFO1VBQ3RDO1FBQ0Y7UUFDQSxNQUFNaUgsZUFBZSxHQUFHbkosSUFBSSxDQUFDNEIsSUFBSSxDQUFDRCxVQUFVLEVBQUUsR0FBR3NILGdCQUFnQixDQUFDO1FBQ2xFLElBQUk3SCxHQUFHLEVBQUU7VUFDUGdCLE9BQU8sQ0FBQ2hCLEdBQUcsQ0FBRSxpQkFBZ0IrSCxlQUFnQixHQUFFLENBQUM7UUFDbEQ7UUFDQSxNQUFNQyxXQUFtQixHQUFHckosRUFBRSxDQUFDdUMsWUFBWSxDQUFDNkcsZUFBZSxFQUFFO1VBQzNENUcsUUFBUSxFQUFFO1FBQ1osQ0FBQyxDQUFDO1FBQ0YsTUFBTThHLE9BQU8sR0FDWDdJLDBCQUEwQixDQUFDK0Qsc0JBQXNCLENBQUM2RSxXQUFXLENBQUM7UUFDaEUsTUFBTUUsWUFBWSxHQUFHRCxPQUFPLENBQUNDLFlBQVk7UUFDekMsSUFDRUEsWUFBWSxDQUFDQyxXQUFXLElBQ3hCVixpQ0FBaUMsQ0FBQ1MsWUFBWSxDQUFDQyxXQUFXLENBQUMsS0FDekQ5QixTQUFTLEVBQ1g7VUFDQW9CLGlDQUFpQyxDQUFDUyxZQUFZLENBQUNDLFdBQVcsQ0FBQyxHQUFHRixPQUFPO1FBQ3ZFO1FBQ0EsSUFDRUMsWUFBWSxDQUFDRSxXQUFXLElBQ3hCVixpQ0FBaUMsQ0FBQ1EsWUFBWSxDQUFDRSxXQUFXLENBQUMsS0FDekQvQixTQUFTLEVBQ1g7VUFDQXFCLGlDQUFpQyxDQUFDUSxZQUFZLENBQUNFLFdBQVcsQ0FBQyxHQUFHSCxPQUFPO1FBQ3ZFO1FBQ0EsSUFBSU4seUJBQXlCLENBQUNNLE9BQU8sQ0FBQzFHLEdBQUcsQ0FBQyxLQUFLOEUsU0FBUyxFQUFFO1VBQ3hEc0IseUJBQXlCLENBQUNNLE9BQU8sQ0FBQzFHLEdBQUcsQ0FBQyxHQUFHMEcsT0FBTztRQUNsRDtNQUNGO0lBQ0Y7RUFDRjtFQUVBLElBQUlJLFVBQW9DLEdBQUcsQ0FBQyxDQUFDO0VBQzdDLElBQUlwQyxlQUFlLEdBQUdwSCxlQUFlLENBQUN5SixNQUFNLEVBQUU7SUFDNUM7TUFDRSxNQUFNQyxZQUFvQixHQUFHM0osSUFBSSxDQUFDNEIsSUFBSSxDQUNwQ1YsT0FBTyxFQUNOO01BQ0M7TUFDQUMsV0FBVyxLQUFLVixXQUFXLENBQUNpQixHQUFHLEdBQUdqQixXQUFXLENBQUNtSixLQUFLLEdBQUd6SSxXQUN2RCxFQUFDLEVBQ0YsY0FDRixDQUFDO01BQ0QsSUFBSXBCLEVBQUUsQ0FBQzhKLFVBQVUsQ0FBQ0YsWUFBWSxDQUFDLEVBQUU7UUFDL0IsSUFBSXZJLEdBQUcsRUFBRTtVQUNQZ0IsT0FBTyxDQUFDaEIsR0FBRyxDQUFFLGlCQUFnQnVJLFlBQWEsRUFBQyxDQUFDO1FBQzlDO1FBQ0EsTUFBTUcsSUFBWSxHQUFHL0osRUFBRSxDQUFDdUMsWUFBWSxDQUFDcUgsWUFBWSxFQUFFO1VBQUVwSCxRQUFRLEVBQUU7UUFBTyxDQUFDLENBQUM7UUFDeEV3SCxNQUFNLENBQUNDLE1BQU0sQ0FBQ1AsVUFBVSxFQUFFUSxJQUFJLENBQUNDLEtBQUssQ0FBQ0osSUFBSSxDQUFDLENBQUM7TUFDN0MsQ0FBQyxNQUFNLElBQUkxSSxHQUFHLEVBQUU7UUFDZGdCLE9BQU8sQ0FBQ2hCLEdBQUcsQ0FBRSwwQkFBeUJ1SSxZQUFhLEVBQUMsQ0FBQztNQUN2RDtJQUNGO0lBRUE7TUFDRSxNQUFNQSxZQUFvQixHQUFHM0osSUFBSSxDQUFDNEIsSUFBSSxDQUNwQ1YsT0FBTyxFQUNQLGtCQUFrQixFQUNsQixnQkFDRixDQUFDO01BQ0QsSUFBSW5CLEVBQUUsQ0FBQzhKLFVBQVUsQ0FBQ0YsWUFBWSxDQUFDLEVBQUU7UUFDL0IsSUFBSXZJLEdBQUcsRUFBRTtVQUNQZ0IsT0FBTyxDQUFDaEIsR0FBRyxDQUFFLGlCQUFnQnVJLFlBQWEsRUFBQyxDQUFDO1FBQzlDO1FBQ0EsTUFBTUcsSUFBWSxHQUFHL0osRUFBRSxDQUFDdUMsWUFBWSxDQUFDcUgsWUFBWSxFQUFFO1VBQUVwSCxRQUFRLEVBQUU7UUFBTyxDQUFDLENBQUM7UUFDeEV3SCxNQUFNLENBQUNDLE1BQU0sQ0FBQ1AsVUFBVSxFQUFFUSxJQUFJLENBQUNDLEtBQUssQ0FBQ0osSUFBSSxDQUFDLENBQUM7TUFDN0MsQ0FBQyxNQUFNLElBQUkxSSxHQUFHLEVBQUU7UUFDZGdCLE9BQU8sQ0FBQ2hCLEdBQUcsQ0FBRSwwQkFBeUJ1SSxZQUFhLEVBQUMsQ0FBQztNQUN2RDtJQUNGO0VBQ0Y7RUFFQSxNQUFNUSxZQUF3QyxHQUFHLENBQUMsQ0FBQztFQUNuRCxJQUFJOUMsZUFBZSxHQUFHcEgsZUFBZSxDQUFDbUssUUFBUSxFQUFFO0lBQzlDLEtBQUssTUFBTTdJLE9BQU8sSUFBSXJCLFFBQVEsQ0FBQ3lGLFFBQVEsRUFBRTtNQUN2QyxJQUFJcEUsT0FBTyxDQUFDRSxZQUFZLEVBQUU7UUFDeEI7TUFDRjtNQUNBLElBQ0VOLFdBQVcsS0FBS1YsV0FBVyxDQUFDaUIsR0FBRyxJQUMvQkgsT0FBTyxDQUFDSixXQUFXLEtBQUtWLFdBQVcsQ0FBQ2lCLEdBQUcsSUFDdkNQLFdBQVcsS0FBS0ksT0FBTyxDQUFDSixXQUFXLEVBQ25DO1FBQ0E7TUFDRjtNQUNBLE1BQU1RLFVBQVUsR0FBRzNCLElBQUksQ0FBQzRCLElBQUksQ0FDMUJWLE9BQU8sRUFDUEssT0FBTyxDQUFDTSxRQUFRLENBQUNDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsVUFBVSxDQUNoRCxDQUFDO01BRUQsS0FBSyxNQUFNOEQsZ0JBQWdCLElBQUl6RixPQUFPLENBQUN3QixVQUFVLENBQUMsRUFBRTtRQUNsRCxNQUFNa0UsZUFBZSxHQUFHRCxnQkFBZ0IsQ0FBQ0EsZ0JBQWdCLENBQUMzRCxNQUFNLEdBQUcsQ0FBQyxDQUFDO1FBQ3JFLElBQUksQ0FBQzRELGVBQWUsQ0FBQzNELFFBQVEsQ0FBQyxPQUFPLENBQUMsRUFBRTtVQUN0QztRQUNGO1FBQ0EsTUFBTTRELGVBQWUsR0FBRzlGLElBQUksQ0FBQzRCLElBQUksQ0FBQ0QsVUFBVSxFQUFFLEdBQUdpRSxnQkFBZ0IsQ0FBQztRQUNsRSxJQUFJeEUsR0FBRyxFQUFFO1VBQ1BnQixPQUFPLENBQUNoQixHQUFHLENBQUUsaUJBQWdCMEUsZUFBZ0IsR0FBRSxDQUFDO1FBQ2xEO1FBQ0EsTUFBTUMsV0FBbUIsR0FBR2hHLEVBQUUsQ0FBQ3VDLFlBQVksQ0FBQ3dELGVBQWUsRUFBRTtVQUMzRHZELFFBQVEsRUFBRTtRQUNaLENBQUMsQ0FBQztRQUNGLE1BQU15RCxPQUFPLEdBQUd0RixlQUFlLENBQUN1RixTQUFTLENBQUNGLFdBQVcsQ0FBQztRQUN0RCxJQUFJb0UsWUFBWSxDQUFDbkUsT0FBTyxDQUFDckQsR0FBRyxDQUFDLEtBQUs4RSxTQUFTLEVBQUU7VUFDM0MwQyxZQUFZLENBQUNuRSxPQUFPLENBQUNyRCxHQUFHLENBQUMsR0FBR3FELE9BQU87UUFDckM7TUFDRjtJQUNGO0VBQ0Y7RUFFQSxNQUFNcUUsYUFBMEMsR0FBRyxDQUFDLENBQUM7RUFDckQsSUFBSWhELGVBQWUsR0FBR3BILGVBQWUsQ0FBQ3FLLFNBQVMsRUFBRTtJQUMvQyxLQUFLLE1BQU0vSSxPQUFPLElBQUlyQixRQUFRLENBQUNrRyxTQUFTLEVBQUU7TUFDeEMsSUFBSTdFLE9BQU8sQ0FBQ0UsWUFBWSxFQUFFO1FBQ3hCO01BQ0Y7TUFDQSxJQUNFTixXQUFXLEtBQUtWLFdBQVcsQ0FBQ2lCLEdBQUcsSUFDL0JILE9BQU8sQ0FBQ0osV0FBVyxLQUFLVixXQUFXLENBQUNpQixHQUFHLElBQ3ZDUCxXQUFXLEtBQUtJLE9BQU8sQ0FBQ0osV0FBVyxFQUNuQztRQUNBO01BQ0Y7TUFDQSxNQUFNUSxVQUFVLEdBQUczQixJQUFJLENBQUM0QixJQUFJLENBQzFCVixPQUFPLEVBQ1BLLE9BQU8sQ0FBQ00sUUFBUSxDQUFDQyxPQUFPLENBQUMsU0FBUyxFQUFFLFVBQVUsQ0FDaEQsQ0FBQztNQUVELEtBQUssTUFBTXVFLGlCQUFpQixJQUFJbEcsT0FBTyxDQUFDd0IsVUFBVSxDQUFDLEVBQUU7UUFDbkQsTUFBTTJFLGdCQUFnQixHQUFHRCxpQkFBaUIsQ0FBQ0EsaUJBQWlCLENBQUNwRSxNQUFNLEdBQUcsQ0FBQyxDQUFDO1FBQ3hFLElBQUksQ0FBQ3FFLGdCQUFnQixDQUFDcEUsUUFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFO1VBQ3ZDO1FBQ0Y7UUFDQSxNQUFNcUUsZ0JBQWdCLEdBQUd2RyxJQUFJLENBQUM0QixJQUFJLENBQUNELFVBQVUsRUFBRSxHQUFHMEUsaUJBQWlCLENBQUM7UUFDcEUsSUFBSWpGLEdBQUcsRUFBRTtVQUNQZ0IsT0FBTyxDQUFDaEIsR0FBRyxDQUFFLGlCQUFnQm1GLGdCQUFpQixHQUFFLENBQUM7UUFDbkQ7UUFDQSxNQUFNQyxZQUFvQixHQUFHekcsRUFBRSxDQUFDdUMsWUFBWSxDQUFDaUUsZ0JBQWdCLEVBQUU7VUFDN0RoRSxRQUFRLEVBQUU7UUFDWixDQUFDLENBQUM7UUFDRixNQUFNa0UsUUFBUSxHQUFHOUYsZ0JBQWdCLENBQUMrRixVQUFVLENBQUNGLFlBQVksQ0FBQztRQUMxRCxJQUFJNkQsYUFBYSxDQUFDNUQsUUFBUSxDQUFDOUQsR0FBRyxDQUFDLEtBQUs4RSxTQUFTLEVBQUU7VUFDN0M0QyxhQUFhLENBQUM1RCxRQUFRLENBQUM5RCxHQUFHLENBQUMsR0FBRzhELFFBQVE7UUFDeEM7TUFDRjtJQUNGO0VBQ0Y7RUFFQSxNQUFNOEQsZ0JBQWdELEdBQUcsQ0FBQyxDQUFDO0VBQzNELElBQUlsRCxlQUFlLEdBQUdwSCxlQUFlLENBQUN1SyxvQkFBb0IsRUFBRTtJQUMxRCxLQUFLLE1BQU1qSixPQUFPLElBQUlyQixRQUFRLENBQUMyRyxvQkFBb0IsRUFBRTtNQUNuRCxJQUFJdEYsT0FBTyxDQUFDRSxZQUFZLEVBQUU7UUFDeEI7TUFDRjtNQUNBLElBQ0VOLFdBQVcsS0FBS1YsV0FBVyxDQUFDaUIsR0FBRyxJQUMvQkgsT0FBTyxDQUFDSixXQUFXLEtBQUtWLFdBQVcsQ0FBQ2lCLEdBQUcsSUFDdkNQLFdBQVcsS0FBS0ksT0FBTyxDQUFDSixXQUFXLEVBQ25DO1FBQ0E7TUFDRjtNQUNBLE1BQU1RLFVBQVUsR0FBRzNCLElBQUksQ0FBQzRCLElBQUksQ0FDMUJWLE9BQU8sRUFDUEssT0FBTyxDQUFDTSxRQUFRLENBQUNDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsVUFBVSxDQUNoRCxDQUFDO01BRUQsS0FBSyxNQUFNMkksZUFBZSxJQUFJdEssT0FBTyxDQUFDd0IsVUFBVSxDQUFDLEVBQUU7UUFDakQsTUFBTW9GLG1CQUFtQixHQUFHMEQsZUFBZSxDQUFDQSxlQUFlLENBQUN4SSxNQUFNLEdBQUcsQ0FBQyxDQUFDO1FBQ3ZFLElBQUksQ0FBQzhFLG1CQUFtQixDQUFDN0UsUUFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFO1VBQzFDO1FBQ0Y7UUFDQSxNQUFNOEUsbUJBQW1CLEdBQUdoSCxJQUFJLENBQUM0QixJQUFJLENBQUNELFVBQVUsRUFBRSxHQUFHOEksZUFBZSxDQUFDO1FBQ3JFLElBQUlySixHQUFHLEVBQUU7VUFDUGdCLE9BQU8sQ0FBQ2hCLEdBQUcsQ0FBRSxpQkFBZ0I0RixtQkFBb0IsR0FBRSxDQUFDO1FBQ3REO1FBQ0EsTUFBTUMsZUFBdUIsR0FBR2xILEVBQUUsQ0FBQ3VDLFlBQVksQ0FBQzBFLG1CQUFtQixFQUFFO1VBQ25FekUsUUFBUSxFQUFFO1FBQ1osQ0FBQyxDQUFDO1FBQ0YsTUFBTTJFLFdBQVcsR0FBR3RHLG9CQUFvQixDQUFDdUcsYUFBYSxDQUFDRixlQUFlLENBQUM7UUFDdkUsSUFBSXNELGdCQUFnQixDQUFDckQsV0FBVyxDQUFDdkUsR0FBRyxDQUFDLEtBQUs4RSxTQUFTLEVBQUU7VUFDbkQ4QyxnQkFBZ0IsQ0FBQ3JELFdBQVcsQ0FBQ3ZFLEdBQUcsQ0FBQyxHQUFHdUUsV0FBVztRQUNqRDtNQUNGO0lBQ0Y7RUFDRjtFQUVBLE9BQU87SUFDTEksV0FBVztJQUNYb0IsZUFBZTtJQUNmRSxhQUFhO0lBQ2JDLGlDQUFpQztJQUNqQ0MsaUNBQWlDO0lBQ2pDQyx5QkFBeUI7SUFDekJ4QixXQUFXO0lBQ1hrQyxVQUFVO0lBQ1YvQixZQUFZO0lBQ1pDLGFBQWE7SUFDYkMsb0JBQW9CO0lBQ3BCdUMsWUFBWTtJQUNaRSxhQUFhO0lBQ2JFO0VBQ0YsQ0FBQztBQUNIOztBQUVBO0FBQ0E7QUFDQSxPQUFPLFNBQVNHLDZCQUE2QkEsQ0FDM0N4SixPQUFlLEVBQ2ZtRyxlQUFnQyxFQUNoQ2xHLFdBQXdCLEVBQ3hCO0VBQUVDLEdBQUcsR0FBRztBQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsRUFDZDtFQUNOLE1BQU1rRyxXQUFzQyxHQUFHLENBQUMsQ0FBQztFQUNqRCxNQUFNQyxXQUFzQyxHQUFHLENBQUMsQ0FBQztFQUNqRCxJQUFJRixlQUFlLEdBQUdwSCxlQUFlLENBQUN1SCxnQkFBZ0IsRUFBRTtJQUN0RCxLQUFLLE1BQU1qRyxPQUFPLElBQUlyQixRQUFRLENBQUNzQixnQkFBZ0IsRUFBRTtNQUMvQyxJQUFJRCxPQUFPLENBQUNFLFlBQVksRUFBRTtRQUN4QjtNQUNGO01BQ0EsSUFDRU4sV0FBVyxLQUFLVixXQUFXLENBQUNpQixHQUFHLElBQy9CSCxPQUFPLENBQUNKLFdBQVcsS0FBS1YsV0FBVyxDQUFDaUIsR0FBRyxJQUN2Q1AsV0FBVyxLQUFLSSxPQUFPLENBQUNKLFdBQVcsRUFDbkM7UUFDQTtNQUNGO01BQ0EsTUFBTXdJLFlBQW9CLEdBQUczSixJQUFJLENBQUM0QixJQUFJLENBQ3BDVixPQUFPLEVBQ1BLLE9BQU8sQ0FBQ00sUUFBUSxDQUFDQyxPQUFPLENBQUMsU0FBUyxFQUFFLGVBQWUsQ0FDckQsQ0FBQztNQUNELElBQUlWLEdBQUcsRUFBRTtRQUNQZ0IsT0FBTyxDQUFDaEIsR0FBRyxDQUFFLGlCQUFnQnVJLFlBQWEsRUFBQyxDQUFDO01BQzlDO01BQ0EsTUFBTUcsSUFBWSxHQUFHL0osRUFBRSxDQUFDdUMsWUFBWSxDQUFDcUgsWUFBWSxFQUFFO1FBQUVwSCxRQUFRLEVBQUU7TUFBTyxDQUFDLENBQUM7TUFDeEUsTUFBTWYsZ0JBQWdCLEdBQUduQix1QkFBdUIsQ0FBQ3NLLGtCQUFrQixDQUFDYixJQUFJLENBQUM7TUFDekUsS0FBSyxNQUFNdEgsTUFBTSxJQUFJaEIsZ0JBQWdCLENBQUNvSixPQUFPLEVBQUU7UUFDN0M7UUFDQSxJQUFJdEQsV0FBVyxDQUFDOUUsTUFBTSxDQUFDRyxHQUFHLENBQUMsS0FBSzhFLFNBQVMsRUFBRTtVQUN6Q0gsV0FBVyxDQUFDOUUsTUFBTSxDQUFDRyxHQUFHLENBQUMsR0FBR0gsTUFBTTtRQUNsQztNQUNGO01BQ0EsS0FBSyxNQUFNc0MsTUFBTSxJQUFJdEQsZ0JBQWdCLENBQUNxSixPQUFPLEVBQUU7UUFDN0M7UUFDQSxJQUFJdEQsV0FBVyxDQUFDekMsTUFBTSxDQUFDbkMsR0FBRyxDQUFDLEtBQUs4RSxTQUFTLEVBQUU7VUFDekNGLFdBQVcsQ0FBQ3pDLE1BQU0sQ0FBQ25DLEdBQUcsQ0FBQyxHQUFHbUMsTUFBTTtRQUNsQztNQUNGO0lBQ0Y7RUFDRjtFQUVBLE1BQU00QyxZQUF3QyxHQUFHLENBQUMsQ0FBQztFQUNuRCxNQUFNQyxhQUEyQyxHQUFHLENBQUMsQ0FBQztFQUN0RCxNQUFNQyxvQkFBeUQsR0FBRyxDQUFDLENBQUM7RUFDcEUsSUFBSVAsZUFBZSxHQUFHcEgsZUFBZSxDQUFDNEgsT0FBTyxFQUFFO0lBQzdDLEtBQUssTUFBTXRHLE9BQU8sSUFBSXJCLFFBQVEsQ0FBQ2dGLE9BQU8sRUFBRTtNQUN0QyxJQUFJM0QsT0FBTyxDQUFDRSxZQUFZLEVBQUU7UUFDeEI7TUFDRjtNQUNBLElBQ0VOLFdBQVcsS0FBS1YsV0FBVyxDQUFDaUIsR0FBRyxJQUMvQkgsT0FBTyxDQUFDSixXQUFXLEtBQUtWLFdBQVcsQ0FBQ2lCLEdBQUcsSUFDdkNQLFdBQVcsS0FBS0ksT0FBTyxDQUFDSixXQUFXLEVBQ25DO1FBQ0E7TUFDRjtNQUNBLE1BQU13SSxZQUFvQixHQUFHM0osSUFBSSxDQUFDNEIsSUFBSSxDQUNwQ1YsT0FBTyxFQUNQSyxPQUFPLENBQUNNLFFBQVEsQ0FBQ0MsT0FBTyxDQUFDLFNBQVMsRUFBRSxlQUFlLENBQ3JELENBQUM7TUFDRCxJQUFJVixHQUFHLEVBQUU7UUFDUGdCLE9BQU8sQ0FBQ2hCLEdBQUcsQ0FBRSxpQkFBZ0J1SSxZQUFhLEVBQUMsQ0FBQztNQUM5QztNQUNBLE1BQU1HLElBQVksR0FBRy9KLEVBQUUsQ0FBQ3VDLFlBQVksQ0FBQ3FILFlBQVksRUFBRTtRQUFFcEgsUUFBUSxFQUFFO01BQU8sQ0FBQyxDQUFDO01BQ3hFLE1BQU0yQyxPQUFPLEdBQUc1RSxjQUFjLENBQUN3SyxTQUFTLENBQUNoQixJQUFJLENBQUM7TUFDOUMsS0FBSyxNQUFNdkUsT0FBTyxJQUFJTCxPQUFPLENBQUM2RixRQUFRLEVBQUU7UUFDdEMsSUFBSXJELFlBQVksQ0FBQ25DLE9BQU8sQ0FBQzVDLEdBQUcsQ0FBQyxLQUFLOEUsU0FBUyxFQUFFO1VBQzNDQyxZQUFZLENBQUNuQyxPQUFPLENBQUM1QyxHQUFHLENBQUMsR0FBRzRDLE9BQU87UUFDckM7UUFFQSxNQUFNdUMsR0FBRyxHQUFHdkMsT0FBTyxDQUFDd0MsY0FBYyxDQUFDQyxXQUFXLENBQUMsQ0FBQyxDQUFDQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzlELElBQUlDLGFBQWEsR0FBR1AsYUFBYSxDQUFDRyxHQUFHLENBQUM7UUFDdEMsSUFBSUksYUFBYSxLQUFLVCxTQUFTLEVBQUU7VUFDL0JTLGFBQWEsR0FBR1AsYUFBYSxDQUFDRyxHQUFHLENBQUMsR0FBRyxFQUFFO1FBQ3pDO1FBQ0FJLGFBQWEsQ0FBQ0MsSUFBSSxDQUFDNUMsT0FBTyxDQUFDO1FBRTNCLE1BQU02QyxHQUFHLEdBQUc3QyxPQUFPLENBQUM2QyxHQUFHO1FBQ3ZCLElBQUlBLEdBQUcsS0FBS1gsU0FBUyxFQUFFO1VBQ3JCLEtBQUssTUFBTVksUUFBUSxJQUFJRCxHQUFHLENBQUNFLFNBQVMsSUFBSSxFQUFFLEVBQUU7WUFDMUMsS0FBSyxNQUFNQyxvQkFBb0IsSUFBSUYsUUFBUSxDQUFDRyx1QkFBdUIsSUFDakUsRUFBRSxFQUFFO2NBQ0osSUFBSUMsb0JBQW9CLEdBQ3RCYixvQkFBb0IsQ0FBQ1csb0JBQW9CLENBQUM7Y0FDNUMsSUFBSUUsb0JBQW9CLEtBQUtoQixTQUFTLEVBQUU7Z0JBQ3RDZ0Isb0JBQW9CLEdBQUdiLG9CQUFvQixDQUN6Q1csb0JBQW9CLENBQ3JCLEdBQUcsRUFBRTtjQUNSO2NBQ0FFLG9CQUFvQixDQUFDTixJQUFJLENBQUM1QyxPQUFPLENBQUM7WUFDcEM7VUFDRjtRQUNGO01BQ0Y7SUFDRjtFQUNGO0VBRUEsTUFBTW1ELGVBQThDLEdBQUcsQ0FBQyxDQUFDO0VBQ3pELElBQUlyQixlQUFlLEdBQUdwSCxlQUFlLENBQUMwSSxXQUFXLEVBQUU7SUFDakQsS0FBSyxNQUFNcEgsT0FBTyxJQUFJckIsUUFBUSxDQUFDOEMsV0FBVyxFQUFFO01BQzFDLElBQUl6QixPQUFPLENBQUNFLFlBQVksRUFBRTtRQUN4QjtNQUNGO01BQ0EsSUFDRU4sV0FBVyxLQUFLVixXQUFXLENBQUNpQixHQUFHLElBQy9CSCxPQUFPLENBQUNKLFdBQVcsS0FBS1YsV0FBVyxDQUFDaUIsR0FBRyxJQUN2Q1AsV0FBVyxLQUFLSSxPQUFPLENBQUNKLFdBQVcsRUFDbkM7UUFDQTtNQUNGO01BQ0EsTUFBTXdJLFlBQW9CLEdBQUczSixJQUFJLENBQUM0QixJQUFJLENBQ3BDVixPQUFPLEVBQ1BLLE9BQU8sQ0FBQ00sUUFBUSxDQUFDQyxPQUFPLENBQUMsU0FBUyxFQUFFLGVBQWUsQ0FDckQsQ0FBQztNQUNELElBQUlWLEdBQUcsRUFBRTtRQUNQZ0IsT0FBTyxDQUFDaEIsR0FBRyxDQUFFLGlCQUFnQnVJLFlBQWEsRUFBQyxDQUFDO01BQzlDO01BQ0EsTUFBTUcsSUFBWSxHQUFHL0osRUFBRSxDQUFDdUMsWUFBWSxDQUFDcUgsWUFBWSxFQUFFO1FBQUVwSCxRQUFRLEVBQUU7TUFBTyxDQUFDLENBQUM7TUFDeEUsTUFBTVMsV0FBVyxHQUFHekMsa0JBQWtCLENBQUN5SyxhQUFhLENBQUNsQixJQUFJLENBQUM7TUFDMUQsS0FBSyxNQUFNbUIsZUFBZSxJQUFJakksV0FBVyxDQUFDa0ksaUJBQWlCLEVBQUU7UUFDM0QsS0FBSyxNQUFNN0gsVUFBVSxJQUFJNEgsZUFBZSxDQUFDakksV0FBVyxFQUFFO1VBQ3BELElBQUkwRixlQUFlLENBQUNyRixVQUFVLENBQUNWLEdBQUcsQ0FBQyxLQUFLOEUsU0FBUyxFQUFFO1lBQ2pEaUIsZUFBZSxDQUFDckYsVUFBVSxDQUFDVixHQUFHLENBQUMsR0FBR1UsVUFBVTtVQUM5QztRQUNGO01BQ0Y7SUFDRjtFQUNGO0VBRUEsTUFBTXVGLGFBQTBDLEdBQUcsQ0FBQyxDQUFDO0VBQ3JELE1BQU1DLGlDQUVMLEdBQUcsQ0FBQyxDQUFDO0VBQ04sTUFBTUMsaUNBRUwsR0FBRyxDQUFDLENBQUM7RUFDTixNQUFNQyx5QkFBa0UsR0FBRyxDQUFDLENBQUM7RUFDN0UsSUFBSTFCLGVBQWUsR0FBR3BILGVBQWUsQ0FBQytJLG1CQUFtQixFQUFFO0lBQ3pELEtBQUssTUFBTXpILE9BQU8sSUFBSXJCLFFBQVEsQ0FBQ3VELG1CQUFtQixFQUFFO01BQ2xELElBQUlsQyxPQUFPLENBQUNFLFlBQVksRUFBRTtRQUN4QjtNQUNGO01BQ0EsSUFDRU4sV0FBVyxLQUFLVixXQUFXLENBQUNpQixHQUFHLElBQy9CSCxPQUFPLENBQUNKLFdBQVcsS0FBS1YsV0FBVyxDQUFDaUIsR0FBRyxJQUN2Q1AsV0FBVyxLQUFLSSxPQUFPLENBQUNKLFdBQVcsRUFDbkM7UUFDQTtNQUNGO01BQ0EsTUFBTXdJLFlBQW9CLEdBQUczSixJQUFJLENBQUM0QixJQUFJLENBQ3BDVixPQUFPLEVBQ1BLLE9BQU8sQ0FBQ00sUUFBUSxDQUFDQyxPQUFPLENBQUMsU0FBUyxFQUFFLGVBQWUsQ0FDckQsQ0FBQztNQUNELElBQUlWLEdBQUcsRUFBRTtRQUNQZ0IsT0FBTyxDQUFDaEIsR0FBRyxDQUFFLGlCQUFnQnVJLFlBQWEsRUFBQyxDQUFDO01BQzlDO01BQ0EsTUFBTUcsSUFBWSxHQUFHL0osRUFBRSxDQUFDdUMsWUFBWSxDQUFDcUgsWUFBWSxFQUFFO1FBQUVwSCxRQUFRLEVBQUU7TUFBTyxDQUFDLENBQUM7TUFDeEUsTUFBTWtCLG1CQUFtQixHQUN2QmpELDBCQUEwQixDQUFDMksscUJBQXFCLENBQUNyQixJQUFJLENBQUM7TUFDeEQsS0FBSyxNQUFNaEcsUUFBUSxJQUFJTCxtQkFBbUIsQ0FBQ3lILGlCQUFpQixFQUFFO1FBQzVELElBQUl0QyxhQUFhLENBQUM5RSxRQUFRLENBQUNuQixHQUFHLENBQUMsS0FBSzhFLFNBQVMsRUFBRTtVQUM3Q21CLGFBQWEsQ0FBQzlFLFFBQVEsQ0FBQ25CLEdBQUcsQ0FBQyxHQUFHbUIsUUFBUTtRQUN4QztNQUNGO01BQ0EsS0FBSyxNQUFNdUYsT0FBTyxJQUFJNUYsbUJBQW1CLENBQUMySCxzQkFBc0IsRUFBRTtRQUNoRSxNQUFNOUIsWUFBWSxHQUFHRCxPQUFPLENBQUNDLFlBQVk7UUFDekMsSUFDRUEsWUFBWSxDQUFDQyxXQUFXLElBQ3hCVixpQ0FBaUMsQ0FBQ1MsWUFBWSxDQUFDQyxXQUFXLENBQUMsS0FDekQ5QixTQUFTLEVBQ1g7VUFDQW9CLGlDQUFpQyxDQUFDUyxZQUFZLENBQUNDLFdBQVcsQ0FBQyxHQUFHRixPQUFPO1FBQ3ZFO1FBQ0EsSUFDRUMsWUFBWSxDQUFDRSxXQUFXLElBQ3hCVixpQ0FBaUMsQ0FBQ1EsWUFBWSxDQUFDRSxXQUFXLENBQUMsS0FDekQvQixTQUFTLEVBQ1g7VUFDQXFCLGlDQUFpQyxDQUFDUSxZQUFZLENBQUNFLFdBQVcsQ0FBQyxHQUFHSCxPQUFPO1FBQ3ZFO1FBQ0EsSUFBSU4seUJBQXlCLENBQUNNLE9BQU8sQ0FBQzFHLEdBQUcsQ0FBQyxLQUFLOEUsU0FBUyxFQUFFO1VBQ3hEc0IseUJBQXlCLENBQUNNLE9BQU8sQ0FBQzFHLEdBQUcsQ0FBQyxHQUFHMEcsT0FBTztRQUNsRDtNQUNGO0lBQ0Y7RUFDRjtFQUVBLE1BQU1JLFVBQW9DLEdBQUcsQ0FBQyxDQUFDO0VBQy9DLElBQUlwQyxlQUFlLEdBQUdwSCxlQUFlLENBQUN5SixNQUFNLEVBQUU7SUFDNUMsTUFBTUQsVUFBVSxHQUFHLENBQUMsQ0FBQztJQUVyQjtNQUNFLE1BQU1FLFlBQW9CLEdBQUczSixJQUFJLENBQUM0QixJQUFJLENBQ3BDVixPQUFPLEVBQ047TUFDQztNQUNBQyxXQUFXLEtBQUtWLFdBQVcsQ0FBQ2lCLEdBQUcsR0FBR2pCLFdBQVcsQ0FBQ21KLEtBQUssR0FBR3pJLFdBQ3ZELEVBQUMsRUFDRixjQUNGLENBQUM7TUFDRCxJQUFJcEIsRUFBRSxDQUFDOEosVUFBVSxDQUFDRixZQUFZLENBQUMsRUFBRTtRQUMvQixJQUFJdkksR0FBRyxFQUFFO1VBQ1BnQixPQUFPLENBQUNoQixHQUFHLENBQUUsaUJBQWdCdUksWUFBYSxFQUFDLENBQUM7UUFDOUM7UUFDQSxNQUFNRyxJQUFZLEdBQUcvSixFQUFFLENBQUN1QyxZQUFZLENBQUNxSCxZQUFZLEVBQUU7VUFBRXBILFFBQVEsRUFBRTtRQUFPLENBQUMsQ0FBQztRQUN4RXdILE1BQU0sQ0FBQ0MsTUFBTSxDQUFDUCxVQUFVLEVBQUVRLElBQUksQ0FBQ0MsS0FBSyxDQUFDSixJQUFJLENBQUMsQ0FBQztNQUM3QyxDQUFDLE1BQU0sSUFBSTFJLEdBQUcsRUFBRTtRQUNkZ0IsT0FBTyxDQUFDaEIsR0FBRyxDQUFFLDBCQUF5QnVJLFlBQWEsRUFBQyxDQUFDO01BQ3ZEO0lBQ0Y7SUFFQTtNQUNFLE1BQU1BLFlBQW9CLEdBQUczSixJQUFJLENBQUM0QixJQUFJLENBQ3BDVixPQUFPLEVBQ1Asa0JBQWtCLEVBQ2xCLGdCQUNGLENBQUM7TUFDRCxJQUFJbkIsRUFBRSxDQUFDOEosVUFBVSxDQUFDRixZQUFZLENBQUMsRUFBRTtRQUMvQixJQUFJdkksR0FBRyxFQUFFO1VBQ1BnQixPQUFPLENBQUNoQixHQUFHLENBQUUsaUJBQWdCdUksWUFBYSxFQUFDLENBQUM7UUFDOUM7UUFDQSxNQUFNRyxJQUFZLEdBQUcvSixFQUFFLENBQUN1QyxZQUFZLENBQUNxSCxZQUFZLEVBQUU7VUFBRXBILFFBQVEsRUFBRTtRQUFPLENBQUMsQ0FBQztRQUN4RXdILE1BQU0sQ0FBQ0MsTUFBTSxDQUFDUCxVQUFVLEVBQUVRLElBQUksQ0FBQ0MsS0FBSyxDQUFDSixJQUFJLENBQUMsQ0FBQztNQUM3QyxDQUFDLE1BQU0sSUFBSTFJLEdBQUcsRUFBRTtRQUNkZ0IsT0FBTyxDQUFDaEIsR0FBRyxDQUFFLDBCQUF5QnVJLFlBQWEsRUFBQyxDQUFDO01BQ3ZEO0lBQ0Y7RUFDRjtFQUVBLE1BQU1RLFlBQXdDLEdBQUcsQ0FBQyxDQUFDO0VBQ25ELElBQUk5QyxlQUFlLEdBQUdwSCxlQUFlLENBQUNtSyxRQUFRLEVBQUU7SUFDOUMsS0FBSyxNQUFNN0ksT0FBTyxJQUFJckIsUUFBUSxDQUFDeUYsUUFBUSxFQUFFO01BQ3ZDLElBQUlwRSxPQUFPLENBQUNFLFlBQVksRUFBRTtRQUN4QjtNQUNGO01BQ0EsSUFDRU4sV0FBVyxLQUFLVixXQUFXLENBQUNpQixHQUFHLElBQy9CSCxPQUFPLENBQUNKLFdBQVcsS0FBS1YsV0FBVyxDQUFDaUIsR0FBRyxJQUN2Q1AsV0FBVyxLQUFLSSxPQUFPLENBQUNKLFdBQVcsRUFDbkM7UUFDQTtNQUNGO01BQ0EsTUFBTXdJLFlBQW9CLEdBQUczSixJQUFJLENBQUM0QixJQUFJLENBQ3BDVixPQUFPLEVBQ1BLLE9BQU8sQ0FBQ00sUUFBUSxDQUFDQyxPQUFPLENBQUMsU0FBUyxFQUFFLGVBQWUsQ0FDckQsQ0FBQztNQUNELElBQUlWLEdBQUcsRUFBRTtRQUNQZ0IsT0FBTyxDQUFDaEIsR0FBRyxDQUFFLGlCQUFnQnVJLFlBQWEsRUFBQyxDQUFDO01BQzlDO01BQ0EsTUFBTUcsSUFBWSxHQUFHL0osRUFBRSxDQUFDdUMsWUFBWSxDQUFDcUgsWUFBWSxFQUFFO1FBQUVwSCxRQUFRLEVBQUU7TUFBTyxDQUFDLENBQUM7TUFDeEUsTUFBTW9ELFFBQVEsR0FBR2pGLGVBQWUsQ0FBQzJLLFVBQVUsQ0FBQ3ZCLElBQUksQ0FBQztNQUNqRCxLQUFLLE1BQU05RCxPQUFPLElBQUlMLFFBQVEsQ0FBQ0EsUUFBUSxFQUFFO1FBQ3ZDLElBQUl3RSxZQUFZLENBQUNuRSxPQUFPLENBQUNyRCxHQUFHLENBQUMsS0FBSzhFLFNBQVMsRUFBRTtVQUMzQzBDLFlBQVksQ0FBQ25FLE9BQU8sQ0FBQ3JELEdBQUcsQ0FBQyxHQUFHcUQsT0FBTztRQUNyQztNQUNGO0lBQ0Y7RUFDRjtFQUVBLE1BQU1xRSxhQUEwQyxHQUFHLENBQUMsQ0FBQztFQUNyRCxJQUFJaEQsZUFBZSxHQUFHcEgsZUFBZSxDQUFDcUssU0FBUyxFQUFFO0lBQy9DLEtBQUssTUFBTS9JLE9BQU8sSUFBSXJCLFFBQVEsQ0FBQ2tHLFNBQVMsRUFBRTtNQUN4QyxJQUFJN0UsT0FBTyxDQUFDRSxZQUFZLEVBQUU7UUFDeEI7TUFDRjtNQUNBLElBQ0VOLFdBQVcsS0FBS1YsV0FBVyxDQUFDaUIsR0FBRyxJQUMvQkgsT0FBTyxDQUFDSixXQUFXLEtBQUtWLFdBQVcsQ0FBQ2lCLEdBQUcsSUFDdkNQLFdBQVcsS0FBS0ksT0FBTyxDQUFDSixXQUFXLEVBQ25DO1FBQ0E7TUFDRjtNQUNBLE1BQU13SSxZQUFvQixHQUFHM0osSUFBSSxDQUFDNEIsSUFBSSxDQUNwQ1YsT0FBTyxFQUNQSyxPQUFPLENBQUNNLFFBQVEsQ0FBQ0MsT0FBTyxDQUFDLFNBQVMsRUFBRSxlQUFlLENBQ3JELENBQUM7TUFDRCxJQUFJVixHQUFHLEVBQUU7UUFDUGdCLE9BQU8sQ0FBQ2hCLEdBQUcsQ0FBRSxpQkFBZ0J1SSxZQUFhLEVBQUMsQ0FBQztNQUM5QztNQUNBLE1BQU1HLElBQVksR0FBRy9KLEVBQUUsQ0FBQ3VDLFlBQVksQ0FBQ3FILFlBQVksRUFBRTtRQUFFcEgsUUFBUSxFQUFFO01BQU8sQ0FBQyxDQUFDO01BQ3hFLE1BQU02RCxTQUFTLEdBQUd6RixnQkFBZ0IsQ0FBQzJLLFdBQVcsQ0FBQ3hCLElBQUksQ0FBQztNQUNwRCxLQUFLLE1BQU1yRCxRQUFRLElBQUlMLFNBQVMsQ0FBQ0EsU0FBUyxFQUFFO1FBQzFDLElBQUlpRSxhQUFhLENBQUM1RCxRQUFRLENBQUM5RCxHQUFHLENBQUMsS0FBSzhFLFNBQVMsRUFBRTtVQUM3QzRDLGFBQWEsQ0FBQzVELFFBQVEsQ0FBQzlELEdBQUcsQ0FBQyxHQUFHOEQsUUFBUTtRQUN4QztNQUNGO0lBQ0Y7RUFDRjtFQUVBLE1BQU04RCxnQkFBZ0QsR0FBRyxDQUFDLENBQUM7RUFDM0QsSUFBSWxELGVBQWUsR0FBR3BILGVBQWUsQ0FBQ3VLLG9CQUFvQixFQUFFO0lBQzFELEtBQUssTUFBTWpKLE9BQU8sSUFBSXJCLFFBQVEsQ0FBQzJHLG9CQUFvQixFQUFFO01BQ25ELElBQUl0RixPQUFPLENBQUNFLFlBQVksRUFBRTtRQUN4QjtNQUNGO01BQ0EsSUFDRU4sV0FBVyxLQUFLVixXQUFXLENBQUNpQixHQUFHLElBQy9CSCxPQUFPLENBQUNKLFdBQVcsS0FBS1YsV0FBVyxDQUFDaUIsR0FBRyxJQUN2Q1AsV0FBVyxLQUFLSSxPQUFPLENBQUNKLFdBQVcsRUFDbkM7UUFDQTtNQUNGO01BQ0EsTUFBTXdJLFlBQW9CLEdBQUczSixJQUFJLENBQUM0QixJQUFJLENBQ3BDVixPQUFPLEVBQ1BLLE9BQU8sQ0FBQ00sUUFBUSxDQUFDQyxPQUFPLENBQUMsU0FBUyxFQUFFLGVBQWUsQ0FDckQsQ0FBQztNQUNELElBQUlWLEdBQUcsRUFBRTtRQUNQZ0IsT0FBTyxDQUFDaEIsR0FBRyxDQUFFLGlCQUFnQnVJLFlBQWEsRUFBQyxDQUFDO01BQzlDO01BQ0EsTUFBTUcsSUFBWSxHQUFHL0osRUFBRSxDQUFDdUMsWUFBWSxDQUFDcUgsWUFBWSxFQUFFO1FBQUVwSCxRQUFRLEVBQUU7TUFBTyxDQUFDLENBQUM7TUFDeEUsTUFBTWdKLGFBQWEsR0FBRzNLLG9CQUFvQixDQUFDNEssZUFBZSxDQUFDMUIsSUFBSSxDQUFDO01BQ2hFLEtBQUssTUFBTTVDLFdBQVcsSUFBSXFFLGFBQWEsQ0FBQ0EsYUFBYSxFQUFFO1FBQ3JELElBQUloQixnQkFBZ0IsQ0FBQ3JELFdBQVcsQ0FBQ3ZFLEdBQUcsQ0FBQyxLQUFLOEUsU0FBUyxFQUFFO1VBQ25EOEMsZ0JBQWdCLENBQUNyRCxXQUFXLENBQUN2RSxHQUFHLENBQUMsR0FBR3VFLFdBQVc7UUFDakQ7TUFDRjtJQUNGO0VBQ0Y7RUFFQSxPQUFPO0lBQ0xJLFdBQVc7SUFDWG9CLGVBQWU7SUFDZkUsYUFBYTtJQUNiQyxpQ0FBaUM7SUFDakNDLGlDQUFpQztJQUNqQ0MseUJBQXlCO0lBQ3pCeEIsV0FBVztJQUNYa0MsVUFBVTtJQUNWL0IsWUFBWTtJQUNaQyxhQUFhO0lBQ2JDLG9CQUFvQjtJQUNwQnVDLFlBQVk7SUFDWkUsYUFBYTtJQUNiRTtFQUNGLENBQUM7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU8sU0FBU2tCLHlCQUF5QkEsQ0FDdkN2SyxPQUFlLEVBQ2Z5QixHQUFXLEVBQ1grSSxPQUE0QixFQU9oQjtFQUNaLE1BQU1DLFlBQVksR0FBRzNMLElBQUksQ0FBQzRCLElBQUksQ0FBQ1YsT0FBTyxFQUFFLFdBQVcsQ0FBQztFQUNwRCxNQUFNMEssV0FBVyxHQUFHQyxtQkFBbUIsQ0FBQ0YsWUFBWSxFQUFFaEosR0FBRyxDQUFDO0VBQzFELE1BQU1tSixTQUFTLEdBQUc5TCxJQUFJLENBQUM0QixJQUFJLENBQUNnSyxXQUFXLEVBQUUsWUFBWSxDQUFDO0VBQ3RELElBQUksQ0FBQzdMLEVBQUUsQ0FBQ2dNLGNBQWMsQ0FBQ0QsU0FBUyxDQUFDLEVBQUU7SUFDakMsT0FBT3JFLFNBQVM7RUFDbEI7RUFDQSxNQUFNdUUsS0FBSyxHQUFHak0sRUFBRSxDQUFDa00sWUFBWSxDQUFDSCxTQUFTLENBQXVCO0VBQzlELEtBQUssTUFBTUksTUFBTSxJQUFJUixPQUFPLEVBQUU7SUFDNUIsS0FBSyxNQUFNO01BQUU3SixRQUFRO01BQUVzSztJQUFJLENBQUMsSUFBSUgsS0FBSyxDQUFDRSxNQUFNLENBQUMsSUFBSSxFQUFFLEVBQUU7TUFDbkQsSUFBSXJLLFFBQVEsS0FBSzRGLFNBQVMsRUFBRTtRQUMxQjtNQUNGO01BQ0EsT0FBTztRQUFFeUUsTUFBTTtRQUFFbE0sSUFBSSxFQUFFQSxJQUFJLENBQUM0QixJQUFJLENBQUNnSyxXQUFXLEVBQUUvSixRQUFRLENBQUM7UUFBRXNLO01BQUksQ0FBQztJQUNoRTtFQUNGO0VBQ0EsT0FBTzFFLFNBQVM7QUFDbEI7QUFFQSxPQUFPLFNBQVMyRSwwQkFBMEJBLENBQ3hDbEwsT0FBZSxFQUNmQyxXQUF3QixFQUN4QjtFQUFFQyxHQUFHLEdBQUc7QUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQ007RUFDMUIsTUFBTXVJLFlBQW9CLEdBQUczSixJQUFJLENBQUM0QixJQUFJLENBQ3BDVixPQUFPLEVBQ047RUFDQztFQUNBQyxXQUFXLEtBQUtWLFdBQVcsQ0FBQ2lCLEdBQUcsR0FBR2pCLFdBQVcsQ0FBQ21KLEtBQUssR0FBR3pJLFdBQ3ZELEVBQUMsRUFDRixjQUNGLENBQUM7RUFDRCxJQUFJQyxHQUFHLEVBQUU7SUFDUGdCLE9BQU8sQ0FBQ2hCLEdBQUcsQ0FBRSxpQkFBZ0J1SSxZQUFhLEVBQUMsQ0FBQztFQUM5QztFQUNBLE1BQU1HLElBQVksR0FBRy9KLEVBQUUsQ0FBQ3VDLFlBQVksQ0FBQ3FILFlBQVksRUFBRTtJQUFFcEgsUUFBUSxFQUFFO0VBQU8sQ0FBQyxDQUFDO0VBQ3hFLE9BQU8wSCxJQUFJLENBQUNDLEtBQUssQ0FBQ0osSUFBSSxDQUFDO0FBQ3pCO0FBRUEsT0FBTyxTQUFTdUMsNEJBQTRCQSxDQUMxQ25MLE9BQWUsRUFDZjtFQUFFRSxHQUFHLEdBQUc7QUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQ007RUFDMUIsTUFBTXVJLFlBQW9CLEdBQUczSixJQUFJLENBQUM0QixJQUFJLENBQ3BDVixPQUFPLEVBQ1Asa0JBQWtCLEVBQ2xCLGdCQUNGLENBQUM7RUFDRCxJQUFJRSxHQUFHLEVBQUU7SUFDUGdCLE9BQU8sQ0FBQ2hCLEdBQUcsQ0FBRSxpQkFBZ0J1SSxZQUFhLEVBQUMsQ0FBQztFQUM5QztFQUNBLE1BQU1HLElBQVksR0FBRy9KLEVBQUUsQ0FBQ3VDLFlBQVksQ0FBQ3FILFlBQVksRUFBRTtJQUFFcEgsUUFBUSxFQUFFO0VBQU8sQ0FBQyxDQUFDO0VBQ3hFLE9BQU8wSCxJQUFJLENBQUNDLEtBQUssQ0FBQ0osSUFBSSxDQUFDO0FBQ3pCO0FBRUEsT0FBTyxTQUFTK0IsbUJBQW1CQSxDQUFDRixZQUFvQixFQUFFaEosR0FBVyxFQUFVO0VBQzdFLE1BQU0ySixLQUFLLEdBQUczSixHQUFHLENBQUMySixLQUFLLENBQUN6TCxnQkFBZ0IsQ0FBQztFQUN6Q2YsTUFBTSxDQUFDeU0sY0FBYyxDQUNuQkQsS0FBSyxFQUNMLElBQUksRUFDSCwwQ0FBeUMzSixHQUFJLEVBQ2hELENBQUM7RUFDRCxNQUFNNkosTUFBTSxHQUFHRixLQUFLLENBQUVFLE1BQW1DO0VBQ3pELE1BQU1DLFlBQVksR0FBR3pNLElBQUksQ0FBQzRCLElBQUksQ0FDNUIrSixZQUFZLEVBQ1phLE1BQU0sQ0FBQ0MsWUFBWSxJQUFJRCxNQUFNLENBQUNFLGFBQ2hDLENBQUM7RUFDRCxNQUFNQyxVQUFVLEdBQUczTSxJQUFJLENBQUM0QixJQUFJLENBQUM2SyxZQUFZLEVBQUVELE1BQU0sQ0FBQ0ksT0FBTyxJQUFJSixNQUFNLENBQUNLLFFBQVEsQ0FBQztFQUM3RSxNQUFNQyxhQUFhLEdBQUc5TSxJQUFJLENBQUM0QixJQUFJLENBQzdCK0ssVUFBVSxFQUNWSCxNQUFNLENBQUNPLFVBQVUsSUFBSVAsTUFBTSxDQUFDUSxXQUM5QixDQUFDO0VBQ0QsTUFBTUMsY0FBYyxHQUFHak4sSUFBSSxDQUFDNEIsSUFBSSxDQUM5QmtMLGFBQWEsRUFDYk4sTUFBTSxDQUFDckwsV0FBVyxJQUFJcUwsTUFBTSxDQUFDVSxZQUMvQixDQUFDO0VBQ0QsTUFBTUMsSUFBSSxHQUFHWCxNQUFNLENBQUNXLElBQUk7RUFDeEIsSUFBSUEsSUFBSSxLQUFLMUYsU0FBUyxFQUFFO0lBQ3RCMUgsRUFBRSxDQUFDcU4sYUFBYSxDQUFDSCxjQUFjLENBQUM7SUFDaEMsT0FBT2pOLElBQUksQ0FBQzRCLElBQUksQ0FBQ3FMLGNBQWMsRUFBRXRLLEdBQUcsQ0FBQztFQUN2QztFQUNBLE1BQU0wSyxPQUFPLEdBQUdyTixJQUFJLENBQUM0QixJQUFJLENBQUNxTCxjQUFjLEVBQUVFLElBQUksQ0FBQztFQUMvQyxJQUFJRyxNQUFNLEdBQUcsUUFBUSxJQUFJZCxNQUFNLENBQUNjLE1BQU0sSUFBSWQsTUFBTSxDQUFDZSxPQUFPLENBQUM7RUFDekRELE1BQU0sR0FBR0EsTUFBTSxDQUFDRSxTQUFTLENBQUNGLE1BQU0sQ0FBQ3JMLE1BQU0sR0FBRyxDQUFDLENBQUM7RUFDNUMsTUFBTXdMLGlCQUFpQixHQUFHek4sSUFBSSxDQUFDNEIsSUFBSSxDQUFDeUwsT0FBTyxFQUFFQyxNQUFNLENBQUNFLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7RUFDcEV6TixFQUFFLENBQUNxTixhQUFhLENBQUNLLGlCQUFpQixDQUFDO0VBQ25DLE9BQU96TixJQUFJLENBQUM0QixJQUFJLENBQUM2TCxpQkFBaUIsRUFBRTlLLEdBQUcsQ0FBQztBQUMxQztBQUVBLE9BQU8sU0FBUytLLCtCQUErQkEsQ0FDN0NDLFdBQW1CLEVBQ25CaEwsR0FBVyxFQUNIO0VBQ1IsTUFBTTJKLEtBQUssR0FBR3hMLGVBQWUsQ0FBQzhNLElBQUksQ0FBQ2pMLEdBQUcsQ0FBQztFQUN2QzdDLE1BQU0sQ0FBQ3lNLGNBQWMsQ0FDbkJELEtBQUssRUFDTCxJQUFJLEVBQ0gsdURBQXNEM0osR0FBSSxFQUM3RCxDQUFDO0VBQ0QsTUFBTW1LLGFBQWEsR0FBRzlNLElBQUksQ0FBQzRCLElBQUksQ0FBQytMLFdBQVcsRUFBRXJCLEtBQUssQ0FBRSxDQUFDLENBQUMsQ0FBQztFQUN2RCxNQUFNVyxjQUFjLEdBQUdqTixJQUFJLENBQUM0QixJQUFJLENBQUNrTCxhQUFhLEVBQUVSLEtBQUssQ0FBRSxDQUFDLENBQUMsQ0FBQztFQUMxRCxJQUFJZ0IsTUFBTSxHQUFHLFFBQVEsR0FBR2hCLEtBQUssQ0FBRSxDQUFDLENBQUM7RUFDakNnQixNQUFNLEdBQUdBLE1BQU0sQ0FBQ0UsU0FBUyxDQUFDRixNQUFNLENBQUNyTCxNQUFNLEdBQUcsQ0FBQyxDQUFDO0VBQzVDLE1BQU13TCxpQkFBaUIsR0FBR3pOLElBQUksQ0FBQzRCLElBQUksQ0FBQ3FMLGNBQWMsRUFBRUssTUFBTSxDQUFDRSxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0VBQzNFek4sRUFBRSxDQUFDcU4sYUFBYSxDQUFDSyxpQkFBaUIsQ0FBQztFQUNuQyxPQUFPek4sSUFBSSxDQUFDNEIsSUFBSSxDQUFDNkwsaUJBQWlCLEVBQUU5SyxHQUFHLENBQUM7QUFDMUM7QUFFQSxPQUFPLFNBQVNrTCxrQkFBa0JBLENBQUNDLFdBQW1CLEVBQUVuTCxHQUFXLEVBQVU7RUFDM0UsTUFBTTJKLEtBQUssR0FBR3ZMLGVBQWUsQ0FBQzZNLElBQUksQ0FBQ2pMLEdBQUcsQ0FBQztFQUN2QzdDLE1BQU0sQ0FBQ3lNLGNBQWMsQ0FDbkJELEtBQUssRUFDTCxJQUFJLEVBQ0gseUNBQXdDM0osR0FBSSxFQUMvQyxDQUFDO0VBQ0QsTUFBTWdLLFVBQVUsR0FBRzNNLElBQUksQ0FBQzRCLElBQUksQ0FBQ2tNLFdBQVcsRUFBRXhCLEtBQUssQ0FBRSxDQUFDLENBQUMsQ0FBQztFQUNwRCxNQUFNUSxhQUFhLEdBQUc5TSxJQUFJLENBQUM0QixJQUFJLENBQUMrSyxVQUFVLEVBQUVMLEtBQUssQ0FBRSxDQUFDLENBQUMsQ0FBQztFQUN0RCxNQUFNVyxjQUFjLEdBQUdqTixJQUFJLENBQUM0QixJQUFJLENBQUNrTCxhQUFhLEVBQUVSLEtBQUssQ0FBRSxDQUFDLENBQUMsQ0FBQztFQUMxRCxNQUFNeUIsVUFBVSxHQUFHL04sSUFBSSxDQUFDNEIsSUFBSSxDQUFDcUwsY0FBYyxFQUFFWCxLQUFLLENBQUUsQ0FBQyxDQUFDLENBQUM7RUFDdkQsTUFBTTBCLEtBQUssR0FBR2hPLElBQUksQ0FBQzRCLElBQUksQ0FBQ21NLFVBQVUsRUFBRXpCLEtBQUssQ0FBRSxDQUFDLENBQUMsQ0FBQztFQUM5QyxJQUFJZ0IsTUFBTSxHQUFHLFdBQVcsR0FBR2hCLEtBQUssQ0FBRSxDQUFDLENBQUM7RUFDcENnQixNQUFNLEdBQUdBLE1BQU0sQ0FBQ0UsU0FBUyxDQUFDRixNQUFNLENBQUNyTCxNQUFNLEdBQUcsQ0FBQyxDQUFDO0VBQzVDLE1BQU1nTSxpQkFBaUIsR0FBR2pPLElBQUksQ0FBQzRCLElBQUksQ0FBQ29NLEtBQUssRUFBRVYsTUFBTSxDQUFDRSxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0VBQ2xFLE1BQU1DLGlCQUFpQixHQUFHek4sSUFBSSxDQUFDNEIsSUFBSSxDQUFDcU0saUJBQWlCLEVBQUVYLE1BQU0sQ0FBQ0UsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztFQUM5RXpOLEVBQUUsQ0FBQ3FOLGFBQWEsQ0FBQ0ssaUJBQWlCLENBQUM7RUFDbkMsT0FBT3pOLElBQUksQ0FBQzRCLElBQUksQ0FBQzZMLGlCQUFpQixFQUFFOUssR0FBRyxDQUFDO0FBQzFDO0FBRUEsT0FBTyxTQUFTdUwsa0JBQWtCQSxDQUFDQyxXQUFtQixFQUFFeEwsR0FBVyxFQUFVO0VBQzNFLE1BQU0ySixLQUFLLEdBQUd0TCxlQUFlLENBQUM0TSxJQUFJLENBQUNqTCxHQUFHLENBQUM7RUFDdkM3QyxNQUFNLENBQUN5TSxjQUFjLENBQ25CRCxLQUFLLEVBQ0wsSUFBSSxFQUNILHlDQUF3QzNKLEdBQUksRUFDL0MsQ0FBQztFQUNELE1BQU1tSyxhQUFhLEdBQUc5TSxJQUFJLENBQUM0QixJQUFJLENBQUN1TSxXQUFXLEVBQUU3QixLQUFLLENBQUUsQ0FBQyxDQUFDLENBQUM7RUFDdkQsTUFBTVcsY0FBYyxHQUFHak4sSUFBSSxDQUFDNEIsSUFBSSxDQUFDa0wsYUFBYSxFQUFFUixLQUFLLENBQUUsQ0FBQyxDQUFDLENBQUM7RUFDMUQsSUFBSWdCLE1BQU0sR0FBRyxRQUFRLEdBQUdoQixLQUFLLENBQUUsQ0FBQyxDQUFDO0VBQ2pDZ0IsTUFBTSxHQUFHQSxNQUFNLENBQUNFLFNBQVMsQ0FBQ0YsTUFBTSxDQUFDckwsTUFBTSxHQUFHLENBQUMsQ0FBQztFQUM1QyxNQUFNd0wsaUJBQWlCLEdBQUd6TixJQUFJLENBQUM0QixJQUFJLENBQUNxTCxjQUFjLEVBQUVLLE1BQU0sQ0FBQ0UsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztFQUMzRXpOLEVBQUUsQ0FBQ3FOLGFBQWEsQ0FBQ0ssaUJBQWlCLENBQUM7RUFDbkMsT0FBT3pOLElBQUksQ0FBQzRCLElBQUksQ0FBQzZMLGlCQUFpQixFQUFFOUssR0FBRyxDQUFDO0FBQzFDOztBQUVBO0FBQ0EsT0FBTyxTQUFTeUwsV0FBV0EsQ0FDekJsTixPQUFlLEVBQ2Z5QixHQUFXLEVBQ1gwTCxVQUFrQixFQUNWO0VBQ1IsTUFBTS9CLEtBQUssR0FBRytCLFVBQVUsQ0FBQ1QsSUFBSSxDQUFDakwsR0FBRyxDQUFDO0VBQ2xDN0MsTUFBTSxDQUFDeU0sY0FBYyxDQUNuQkQsS0FBSyxFQUNMLElBQUksRUFDSCw2Q0FBNEMzSixHQUFJLEVBQ25ELENBQUM7RUFDRCxNQUFNbUssYUFBYSxHQUFHOU0sSUFBSSxDQUFDNEIsSUFBSSxDQUFDVixPQUFPLEVBQUVvTCxLQUFLLENBQUUsQ0FBQyxDQUFDLENBQUM7RUFDbkQsTUFBTVcsY0FBYyxHQUFHak4sSUFBSSxDQUFDNEIsSUFBSSxDQUFDa0wsYUFBYSxFQUFFUixLQUFLLENBQUUsQ0FBQyxDQUFDLENBQUM7RUFDMUQsSUFBSWdCLE1BQU0sR0FBRyxRQUFRLEdBQUdoQixLQUFLLENBQUUsQ0FBQyxDQUFDO0VBQ2pDZ0IsTUFBTSxHQUFHQSxNQUFNLENBQUNFLFNBQVMsQ0FBQ0YsTUFBTSxDQUFDckwsTUFBTSxHQUFHLENBQUMsQ0FBQztFQUM1QyxNQUFNd0wsaUJBQWlCLEdBQUd6TixJQUFJLENBQUM0QixJQUFJLENBQUNxTCxjQUFjLEVBQUVLLE1BQU0sQ0FBQ0UsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztFQUMzRXpOLEVBQUUsQ0FBQ3FOLGFBQWEsQ0FBQ0ssaUJBQWlCLENBQUM7RUFDbkMsT0FBT3pOLElBQUksQ0FBQzRCLElBQUksQ0FBQzZMLGlCQUFpQixFQUFFOUssR0FBRyxDQUFDO0FBQzFDIn0=
|
|
1127
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJhc3NlcnQiLCJmcyIsInBhdGgiLCJFbmFibGVkRGF0YXNldHMiLCJkYXRhc2V0cyIsIndhbGtEaXIiLCJDb252ZXJ0IiwiQWN0ZXVyc0V0T3JnYW5lc0NvbnZlcnQiLCJBZ2VuZGFzQ29udmVydCIsIkFtZW5kZW1lbnRzQ29udmVydCIsIkRvc3NpZXJzTGVnaXNsYXRpZnNDb252ZXJ0IiwiTGVnaXNsYXR1cmUiLCJTY3J1dGluc0NvbnZlcnQiLCJRdWVzdGlvbnNDb252ZXJ0IiwiQ29tcHRlc1JlbmR1c0NvbnZlcnQiLCJkb2N1bWVudFVpZFJlZ2V4IiwiZG9zc2llclVpZFJlZ2V4IiwicmV1bmlvblVpZFJlZ2V4Iiwic2NydXRpblVpZFJlZ2V4IiwiaXRlckxvYWRBc3NlbWJsZWVBY3RldXJzIiwiZGF0YURpciIsImxlZ2lzbGF0dXJlIiwibm9WYWxpZGF0aW9uIiwibG9nIiwiYWN0ZXVyc1VpZCIsIlNldCIsImRhdGFzZXQiLCJhY3RldXJzRXRPcmdhbmVzIiwiaWdub3JlRm9yV2ViIiwiQWxsIiwiZGF0YXNldERpciIsImpvaW4iLCJmaWxlbmFtZSIsInJlcGxhY2UiLCJhY3RldXJTcGxpdFBhdGgiLCJhY3RldXJGaWxlbmFtZSIsImxlbmd0aCIsImVuZHNXaXRoIiwiYWN0ZXVyRmlsZVBhdGgiLCJjb25zb2xlIiwiYWN0ZXVySnNvbiIsInJlYWRGaWxlU3luYyIsImVuY29kaW5nIiwiYWN0ZXVyIiwiSlNPTiIsInBhcnNlIiwidG9BY3RldXIiLCJoYXMiLCJ1aWQiLCJhZGQiLCJkYXRhc2V0TGVnaXNsYXR1cmUiLCJpdGVyTG9hZEFzc2VtYmxlZUFtZW5kZW1lbnRzIiwiYW1lbmRlbWVudHNVaWQiLCJhbWVuZGVtZW50cyIsImFtZW5kZW1lbnRTcGxpdFBhdGgiLCJhbWVuZGVtZW50RmlsZW5hbWUiLCJhbWVuZGVtZW50RmlsZVBhdGgiLCJhbWVuZGVtZW50SnNvbiIsImFtZW5kZW1lbnQiLCJ0b0FtZW5kZW1lbnQiLCJpdGVyTG9hZEFzc2VtYmxlZURvY3VtZW50cyIsImRvY3VtZW50c1VpZCIsImRvc3NpZXJzTGVnaXNsYXRpZnMiLCJkb2N1bWVudFNwbGl0UGF0aCIsImRvY3VtZW50RmlsZW5hbWUiLCJkb2N1bWVudEZpbGVQYXRoIiwiZG9jdW1lbnRKc29uIiwiZG9jdW1lbnQiLCJ0b0RvY3VtZW50IiwiaXRlckxvYWRBc3NlbWJsZWVEb3NzaWVyc1BhcmxlbWVudGFpcmVzIiwiZG9zc2llcnNQYXJsZW1lbnRhaXJlc1VpZCIsImRvc3NpZXJQYXJsZW1lbnRhaXJlU3BsaXRQYXRoIiwiZG9zc2llclBhcmxlbWVudGFpcmVGaWxlbmFtZSIsImRvc3NpZXJQYXJsZW1lbnRhaXJlRmlsZVBhdGgiLCJkb3NzaWVyUGFybGVtZW50YWlyZUpzb24iLCJkb3NzaWVyUGFybGVtZW50YWlyZSIsInRvRG9zc2llclBhcmxlbWVudGFpcmUiLCJpdGVyTG9hZEFzc2VtYmxlZU9yZ2FuZXMiLCJvcmdhbmVzVWlkIiwib3JnYW5lU3BsaXRQYXRoIiwib3JnYW5lRmlsZW5hbWUiLCJvcmdhbmVGaWxlUGF0aCIsIm9yZ2FuZUpzb24iLCJvcmdhbmUiLCJ0b09yZ2FuZSIsIml0ZXJMb2FkQXNzZW1ibGVlUmV1bmlvbnMiLCJyZXVuaW9uc1VpZCIsImFnZW5kYXMiLCJyZXVuaW9uU3BsaXRQYXRoIiwicmV1bmlvbkZpbGVuYW1lIiwicmV1bmlvbkZpbGVQYXRoIiwicmV1bmlvbkpzb24iLCJyZXVuaW9uIiwidG9SZXVuaW9uIiwiaXRlckxvYWRBc3NlbWJsZWVTY3J1dGlucyIsInNjcnV0aW5zVWlkIiwic2NydXRpbnMiLCJzY3J1dGluU3BsaXRQYXRoIiwic2NydXRpbkZpbGVuYW1lIiwic2NydXRpbkZpbGVQYXRoIiwic2NydXRpbkpzb24iLCJzY3J1dGluIiwidG9TY3J1dGluIiwiaXRlckxvYWRBc3NlbWJsZWVRdWVzdGlvbnMiLCJxdWVzdGlvbnNVaWQiLCJxdWVzdGlvbnMiLCJxdWVzdGlvblNwbGl0UGF0aCIsInF1ZXN0aW9uRmlsZW5hbWUiLCJxdWVzdGlvbkZpbGVQYXRoIiwicXVlc3Rpb25Kc29uIiwicXVlc3Rpb24iLCJ0b1F1ZXN0aW9uIiwiaXRlckxvYWRBc3NlbWJsZWVDb21wdGVzUmVuZHVzIiwiY29tcHRlc1JlbmR1c1VpZCIsImNvbXB0ZXNSZW5kdXNTZWFuY2VzIiwiY29tcHRlUmVuZHVTcGxpdFBhdGgiLCJjb21wdGVSZW5kdUZpbGVuYW1lIiwiY29tcHRlUmVuZHVGaWxlUGF0aCIsImNvbXB0ZVJlbmR1SnNvbiIsImNvbXB0ZVJlbmR1IiwidG9Db21wdGVSZW5kdSIsImxvYWRBc3NlbWJsZWVEYXRhIiwiZW5hYmxlZERhdGFzZXRzIiwiYWN0ZXVyQnlVaWQiLCJvcmdhbmVCeVVpZCIsIkFjdGV1cnNFdE9yZ2FuZXMiLCJ1bmRlZmluZWQiLCJyZXVuaW9uQnlVaWQiLCJyZXVuaW9uc0J5RGF5IiwicmV1bmlvbnNCeURvc3NpZXJVaWQiLCJBZ2VuZGFzIiwiZGF5IiwidGltZXN0YW1wRGVidXQiLCJ0b0lTT1N0cmluZyIsInNwbGl0IiwicmV1bmlvbnNBdERheSIsInB1c2giLCJvZGoiLCJwb2ludE9kaiIsInBvaW50c09kaiIsImRvc3NpZXJMZWdpc2xhdGlmUmVmIiwiZG9zc2llcnNMZWdpc2xhdGlmc1JlZnMiLCJyZXVuaW9uc0F0RG9zc2llclVpZCIsImFtZW5kZW1lbnRCeVVpZCIsIkFtZW5kZW1lbnRzIiwiZG9jdW1lbnRCeVVpZCIsImRvc3NpZXJQYXJsZW1lbnRhaXJlQnlTZW5hdENoZW1pbiIsImRvc3NpZXJQYXJsZW1lbnRhaXJlQnlUaXRyZUNoZW1pbiIsImRvc3NpZXJQYXJsZW1lbnRhaXJlQnlVaWQiLCJEb3NzaWVyc0xlZ2lzbGF0aWZzIiwiZG9zc2llclNwbGl0UGF0aCIsImRvc3NpZXJGaWxlbmFtZSIsImRvc3NpZXJGaWxlUGF0aCIsImRvc3NpZXJKc29uIiwiZG9zc2llciIsInRpdHJlRG9zc2llciIsInNlbmF0Q2hlbWluIiwidGl0cmVDaGVtaW4iLCJwaG90b0J5VWlkIiwiUGhvdG9zIiwianNvbkZpbGVQYXRoIiwiU2VpemUiLCJleGlzdHNTeW5jIiwianNvbiIsIk9iamVjdCIsImFzc2lnbiIsInNjcnV0aW5CeVVpZCIsIlNjcnV0aW5zIiwicXVlc3Rpb25CeVVpZCIsIlF1ZXN0aW9ucyIsImNvbXB0ZVJlbmR1QnlVaWQiLCJDb21wdGVzUmVuZHVzU2VhbmNlcyIsImNvbXB0ZVJlbmR1UGF0aCIsImxvYWRBc3NlbWJsZWVEYXRhRnJvbUJpZ0ZpbGVzIiwidG9BY3RldXJzRXRPcmdhbmVzIiwiYWN0ZXVycyIsIm9yZ2FuZXMiLCJ0b0FnZW5kYXMiLCJyZXVuaW9ucyIsInRvQW1lbmRlbWVudHMiLCJ0ZXh0ZUxlZ2lzbGF0aWYiLCJ0ZXh0ZXNMZWdpc2xhdGlmcyIsInRvRG9zc2llcnNMZWdpc2xhdGlmcyIsImRvc3NpZXJzUGFybGVtZW50YWlyZXMiLCJ0b1NjcnV0aW5zIiwidG9RdWVzdGlvbnMiLCJjb21wdGVzUmVuZHVzIiwidG9Db21wdGVzUmVuZHVzIiwibG9hZEFzc2VtYmxlZURvY3VtZW50RmlsZSIsImZvcm1hdHMiLCJkb2N1bWVudHNEaXIiLCJkb2N1bWVudERpciIsInBhdGhGcm9tRG9jdW1lbnRVaWQiLCJpbmRleFBhdGgiLCJwYXRoRXhpc3RzU3luYyIsImluZGV4IiwicmVhZEpzb25TeW5jIiwiZm9ybWF0IiwidXJsIiwibG9hZEFzc2VtYmxlZVBob3Rvc0RlcHV0ZXMiLCJsb2FkQXNzZW1ibGVlUGhvdG9zU2VuYXRldXJzIiwibWF0Y2giLCJub3RTdHJpY3RFcXVhbCIsImdyb3VwcyIsImRvY3VtZW50VHlwZSIsImRvY3VtZW50VHlwZTIiLCJjaGFtYnJlRGlyIiwiY2hhbWJyZSIsImNoYW1icmUyIiwicmVwdWJsaXF1ZURpciIsInJlcHVibGlxdWUiLCJyZXB1YmxpcXVlMiIsImxlZ2lzbGF0dXJlRGlyIiwibGVnaXNsYXR1cmUyIiwiZXRhdCIsImVuc3VyZURpclN5bmMiLCJldGF0RGlyIiwibnVtZXJvIiwibnVtZXJvMiIsInN1YnN0cmluZyIsIm51bWVyb01pbGxpZXJzRGlyIiwicGF0aEZyb21Eb3NzaWVyUGFybGVtZW50YWlyZVVpZCIsImRvc3NpZXJzRGlyIiwiZXhlYyIsInBhdGhGcm9tUmV1bmlvblVpZCIsInJldW5pb25zRGlyIiwic2Vzc2lvbkRpciIsImlkRGlyIiwibnVtZXJvTWlsbGlvbnNEaXIiLCJwYXRoRnJvbVNjcnV0aW5VaWQiLCJzY3J1dGluc0RpciIsInBhdGhGcm9tVWlkIiwiZGF0YVJlZ2V4cCJdLCJzb3VyY2VzIjpbIi4uL3NyYy9sb2FkZXJzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vLyBMb2FkIGRhdGEgZnJvbSBmaWxlc1xuXG5pbXBvcnQgYXNzZXJ0IGZyb20gXCJhc3NlcnRcIlxuaW1wb3J0IGZzIGZyb20gXCJmcy1leHRyYVwiXG5pbXBvcnQgcGF0aCBmcm9tIFwicGF0aFwiXG5cbmV4cG9ydCB7IEVuYWJsZWREYXRhc2V0cyB9IGZyb20gXCIuL2RhdGFzZXRzXCJcbmltcG9ydCB7IGRhdGFzZXRzLCBFbmFibGVkRGF0YXNldHMgfSBmcm9tIFwiLi9kYXRhc2V0c1wiXG5pbXBvcnQgdHlwZSB7IERvY3VtZW50RmlsZXNJbmRleCB9IGZyb20gXCIuL2Rvc3NpZXJzX2xlZ2lzbGF0aWZzXCJcbmV4cG9ydCB7IHdhbGtEaXIgfSBmcm9tIFwiLi9maWxlX3N5c3RlbXNcIlxuaW1wb3J0IHsgd2Fsa0RpciB9IGZyb20gXCIuL2ZpbGVfc3lzdGVtc1wiXG5pbXBvcnQge1xuICBBY3RldXIsXG4gIENvbnZlcnQgYXMgQWN0ZXVyc0V0T3JnYW5lc0NvbnZlcnQsXG4gIE9yZ2FuZSxcbiAgUGhvdG8sXG59IGZyb20gXCIuL3R5cGVzL2FjdGV1cnNfZXRfb3JnYW5lc1wiXG5pbXBvcnQgeyBDb252ZXJ0IGFzIEFnZW5kYXNDb252ZXJ0LCBSZXVuaW9uIH0gZnJvbSBcIi4vdHlwZXMvYWdlbmRhc1wiXG5pbXBvcnQgeyBBbWVuZGVtZW50LCBDb252ZXJ0IGFzIEFtZW5kZW1lbnRzQ29udmVydCB9IGZyb20gXCIuL3R5cGVzL2FtZW5kZW1lbnRzXCJcbmltcG9ydCB7XG4gIENvbnZlcnQgYXMgRG9zc2llcnNMZWdpc2xhdGlmc0NvbnZlcnQsXG4gIERvY3VtZW50LFxuICBEb3NzaWVyUGFybGVtZW50YWlyZSxcbn0gZnJvbSBcIi4vdHlwZXMvZG9zc2llcnNfbGVnaXNsYXRpZnNcIlxuaW1wb3J0IHsgTGVnaXNsYXR1cmUgfSBmcm9tIFwiLi90eXBlcy9sZWdpc2xhdHVyZXNcIlxuaW1wb3J0IHsgQ29udmVydCBhcyBTY3J1dGluc0NvbnZlcnQsIFNjcnV0aW4gfSBmcm9tIFwiLi90eXBlcy9zY3J1dGluc1wiXG5pbXBvcnQgeyBDb252ZXJ0IGFzIFF1ZXN0aW9uc0NvbnZlcnQsIFF1ZXN0aW9uIH0gZnJvbSBcIi4vdHlwZXMvcXVlc3Rpb25zXCJcbmltcG9ydCB7IENvbnZlcnQgYXMgQ29tcHRlc1JlbmR1c0NvbnZlcnQsIENvbXB0ZVJlbmR1IH0gZnJvbSBcIi4vdHlwZXMvZGViYXRzXCJcbmltcG9ydCB7IERvY3VtZW50VXJsRm9ybWF0IH0gZnJvbSBcIi4vdXJsc1wiXG5cbmV4cG9ydCBpbnRlcmZhY2UgRGF0YSB7XG4gIHJlYWRvbmx5IGFjdGV1ckJ5VWlkOiB7IFt1aWQ6IHN0cmluZ106IEFjdGV1ciB9XG4gIHJlYWRvbmx5IGFtZW5kZW1lbnRCeVVpZDogeyBbdWlkOiBzdHJpbmddOiBBbWVuZGVtZW50IH1cbiAgcmVhZG9ubHkgZG9jdW1lbnRCeVVpZDogeyBbdWlkOiBzdHJpbmddOiBEb2N1bWVudCB9XG4gIHJlYWRvbmx5IGRvc3NpZXJQYXJsZW1lbnRhaXJlQnlTZW5hdENoZW1pbjoge1xuICAgIFt1aWQ6IHN0cmluZ106IERvc3NpZXJQYXJsZW1lbnRhaXJlXG4gIH1cbiAgcmVhZG9ubHkgZG9zc2llclBhcmxlbWVudGFpcmVCeVRpdHJlQ2hlbWluOiB7XG4gICAgW3VpZDogc3RyaW5nXTogRG9zc2llclBhcmxlbWVudGFpcmVcbiAgfVxuICByZWFkb25seSBkb3NzaWVyUGFybGVtZW50YWlyZUJ5VWlkOiB7IFt1aWQ6IHN0cmluZ106IERvc3NpZXJQYXJsZW1lbnRhaXJlIH1cbiAgcmVhZG9ubHkgb3JnYW5lQnlVaWQ6IHsgW3VpZDogc3RyaW5nXTogT3JnYW5lIH1cbiAgcmVhZG9ubHkgcGhvdG9CeVVpZDogeyBbdWlkOiBzdHJpbmddOiBQaG90byB9XG4gIHJlYWRvbmx5IHJldW5pb25CeVVpZDogeyBbdWlkOiBzdHJpbmddOiBSZXVuaW9uIH1cbiAgcmVhZG9ubHkgcmV1bmlvbnNCeURheTogeyBbZGF5OiBzdHJpbmddOiBSZXVuaW9uW10gfVxuICByZWFkb25seSByZXVuaW9uc0J5RG9zc2llclVpZDogeyBbZG9zc2llclVpZDogc3RyaW5nXTogUmV1bmlvbltdIH1cbiAgcmVhZG9ubHkgc2NydXRpbkJ5VWlkOiB7IFt1aWQ6IHN0cmluZ106IFNjcnV0aW4gfVxuICByZWFkb25seSBxdWVzdGlvbkJ5VWlkOiB7IFt1aWQ6IHN0cmluZ106IFF1ZXN0aW9uIH1cbiAgcmVhZG9ubHkgY29tcHRlUmVuZHVCeVVpZDogeyBbdWlkOiBzdHJpbmddOiBDb21wdGVSZW5kdSB9XG59XG5cbmNvbnN0IGRvY3VtZW50VWlkUmVnZXggPVxuICAvXigoPzxkb2N1bWVudFR5cGU+QUNJTnxBTENOfEFWQ0V8QVZJU3xERUNMfEVUREl8TEVUVHxNRVNTfE1JT058UElPTnxQTlJFfFBSSkx8UkFQUHxSSU5GfFJJT04pKD88Y2hhbWJyZT5BTnxTTikoPzxyZXB1YmxpcXVlPlJcXGQrKVtMU10oPzxsZWdpc2xhdHVyZT5cXGQrKSg/PGV0YXQ+QnxCVEF8QlRDfFRBUCkoPzxudW1lcm8+XFxkKykoLS4qKT8pfCgoPzxkb2N1bWVudFR5cGUyPk1JT04pKD88Y2hhbWJyZTI+QU58U04pKD88cmVwdWJsaXF1ZTI+UlxcZCspW0xTXSg/PGxlZ2lzbGF0dXJlMj5cXGQrKS1OKD88bnVtZXJvMj5cXGQrKSkkL1xuY29uc3QgZG9zc2llclVpZFJlZ2V4ID0gL15ETChSXFxkKykoTFxcZCspTihcXGQrKSQvXG5jb25zdCByZXVuaW9uVWlkUmVnZXggPVxuICAvXlJVKEFOfENHfFNOKShSXFxkKykoTFxcZCspKFtBU11cXGR7NH0pKElEQ3xJREZMP3xJRFMpKFxcZCspJC9cbmNvbnN0IHNjcnV0aW5VaWRSZWdleCA9IC9eVlRBTihSXFxkKykoTFxcZCspVihcXGQrKSQvXG5cbmV4cG9ydCBmdW5jdGlvbiogaXRlckxvYWRBc3NlbWJsZWVBY3RldXJzKFxuICBkYXRhRGlyOiBzdHJpbmcsXG4gIGxlZ2lzbGF0dXJlOiBMZWdpc2xhdHVyZSxcbiAgeyBub1ZhbGlkYXRpb24gPSBmYWxzZSwgbG9nID0gZmFsc2UgfSA9IHt9LFxuKTogR2VuZXJhdG9yPFxuICB7IGFjdGV1cjogQWN0ZXVyOyBkYXRhc2V0TGVnaXNsYXR1cmU6IExlZ2lzbGF0dXJlIH0sXG4gIHZvaWQsXG4gIHVua25vd25cbj4ge1xuICBjb25zdCBhY3RldXJzVWlkID0gbmV3IFNldDxzdHJpbmc+KClcbiAgZm9yIChjb25zdCBkYXRhc2V0IG9mIGRhdGFzZXRzLmFjdGV1cnNFdE9yZ2FuZXMpIHtcbiAgICBpZiAoZGF0YXNldC5pZ25vcmVGb3JXZWIpIHtcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuICAgIGlmIChcbiAgICAgIGxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgIGRhdGFzZXQubGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgbGVnaXNsYXR1cmUgIT09IGRhdGFzZXQubGVnaXNsYXR1cmVcbiAgICApIHtcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuICAgIGNvbnN0IGRhdGFzZXREaXIgPSBwYXRoLmpvaW4oXG4gICAgICBkYXRhRGlyLFxuICAgICAgZGF0YXNldC5maWxlbmFtZS5yZXBsYWNlKC9cXC5qc29uJC8sIFwiX25ldHRveWVcIiksXG4gICAgKVxuXG4gICAgZm9yIChjb25zdCBhY3RldXJTcGxpdFBhdGggb2Ygd2Fsa0RpcihkYXRhc2V0RGlyLCBbXCJhY3RldXJzXCJdKSkge1xuICAgICAgY29uc3QgYWN0ZXVyRmlsZW5hbWUgPSBhY3RldXJTcGxpdFBhdGhbYWN0ZXVyU3BsaXRQYXRoLmxlbmd0aCAtIDFdXG4gICAgICBpZiAoIWFjdGV1ckZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGNvbnN0IGFjdGV1ckZpbGVQYXRoID0gcGF0aC5qb2luKGRhdGFzZXREaXIsIC4uLmFjdGV1clNwbGl0UGF0aClcbiAgICAgIGlmIChsb2cpIHtcbiAgICAgICAgY29uc29sZS5sb2coYExvYWRpbmcgZmlsZTogJHthY3RldXJGaWxlUGF0aH3igKZgKVxuICAgICAgfVxuICAgICAgY29uc3QgYWN0ZXVySnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKGFjdGV1ckZpbGVQYXRoLCB7XG4gICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgIH0pXG4gICAgICBsZXQgYWN0ZXVyOiBBY3RldXI7XG4gICAgICBpZihub1ZhbGlkYXRpb24pIHtcbiAgICAgICAgYWN0ZXVyID0gSlNPTi5wYXJzZShhY3RldXJKc29uKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFjdGV1ciA9IEFjdGV1cnNFdE9yZ2FuZXNDb252ZXJ0LnRvQWN0ZXVyKGFjdGV1ckpzb24pXG4gICAgICB9XG4gICAgICAvLyBLZWVwIHRoZSBmaXJzdCBleGlzdGluZyBcImFjdGV1clwiLCBiZWNhdXNlIHRoZSBmaXJzdCB3cmFwcGVyIGlzIHRoZSBtb3N0IGNvbXBsZXRlLlxuICAgICAgaWYgKGFjdGV1cnNVaWQuaGFzKGFjdGV1ci51aWQpKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBhY3RldXJzVWlkLmFkZChhY3RldXIudWlkKVxuICAgICAgeWllbGQgeyBhY3RldXIsIGRhdGFzZXRMZWdpc2xhdHVyZTogZGF0YXNldC5sZWdpc2xhdHVyZSB9XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiogaXRlckxvYWRBc3NlbWJsZWVBbWVuZGVtZW50cyhcbiAgZGF0YURpcjogc3RyaW5nLFxuICBsZWdpc2xhdHVyZTogTGVnaXNsYXR1cmUsXG4gIHsgbm9WYWxpZGF0aW9uID0gZmFsc2UsIGxvZyA9IGZhbHNlIH0gPSB7fSxcbik6IEdlbmVyYXRvcjxcbiAgeyBhbWVuZGVtZW50OiBBbWVuZGVtZW50OyBkYXRhc2V0TGVnaXNsYXR1cmU6IExlZ2lzbGF0dXJlIH0sXG4gIHZvaWQsXG4gIHVua25vd25cbj4ge1xuICBjb25zdCBhbWVuZGVtZW50c1VpZCA9IG5ldyBTZXQ8c3RyaW5nPigpXG4gIGZvciAoY29uc3QgZGF0YXNldCBvZiBkYXRhc2V0cy5hbWVuZGVtZW50cykge1xuICAgIGlmIChkYXRhc2V0Lmlnbm9yZUZvcldlYikge1xuICAgICAgY29udGludWVcbiAgICB9XG4gICAgaWYgKFxuICAgICAgbGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgZGF0YXNldC5sZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICBsZWdpc2xhdHVyZSAhPT0gZGF0YXNldC5sZWdpc2xhdHVyZVxuICAgICkge1xuICAgICAgY29udGludWVcbiAgICB9XG4gICAgY29uc3QgZGF0YXNldERpciA9IHBhdGguam9pbihcbiAgICAgIGRhdGFEaXIsXG4gICAgICBkYXRhc2V0LmZpbGVuYW1lLnJlcGxhY2UoL1xcLmpzb24kLywgXCJfbmV0dG95ZVwiKSxcbiAgICApXG5cbiAgICBmb3IgKGNvbnN0IGFtZW5kZW1lbnRTcGxpdFBhdGggb2Ygd2Fsa0RpcihkYXRhc2V0RGlyKSkge1xuICAgICAgY29uc3QgYW1lbmRlbWVudEZpbGVuYW1lID1cbiAgICAgICAgYW1lbmRlbWVudFNwbGl0UGF0aFthbWVuZGVtZW50U3BsaXRQYXRoLmxlbmd0aCAtIDFdXG4gICAgICBpZiAoIWFtZW5kZW1lbnRGaWxlbmFtZS5lbmRzV2l0aChcIi5qc29uXCIpKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBjb25zdCBhbWVuZGVtZW50RmlsZVBhdGggPSBwYXRoLmpvaW4oZGF0YXNldERpciwgLi4uYW1lbmRlbWVudFNwbGl0UGF0aClcbiAgICAgIGlmIChsb2cpIHtcbiAgICAgICAgY29uc29sZS5sb2coYExvYWRpbmcgZmlsZTogJHthbWVuZGVtZW50RmlsZVBhdGh94oCmYClcbiAgICAgIH1cbiAgICAgIGNvbnN0IGFtZW5kZW1lbnRKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoYW1lbmRlbWVudEZpbGVQYXRoLCB7XG4gICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgIH0pXG4gICAgICBsZXQgYW1lbmRlbWVudDogQW1lbmRlbWVudDtcbiAgICAgIGlmKG5vVmFsaWRhdGlvbikge1xuICAgICAgICBhbWVuZGVtZW50ID0gSlNPTi5wYXJzZShhbWVuZGVtZW50SnNvbik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhbWVuZGVtZW50ID0gQW1lbmRlbWVudHNDb252ZXJ0LnRvQW1lbmRlbWVudChhbWVuZGVtZW50SnNvbilcbiAgICAgIH1cbiAgICAgIGlmIChhbWVuZGVtZW50c1VpZC5oYXMoYW1lbmRlbWVudC51aWQpKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBhbWVuZGVtZW50c1VpZC5hZGQoYW1lbmRlbWVudC51aWQpXG4gICAgICB5aWVsZCB7IGFtZW5kZW1lbnQsIGRhdGFzZXRMZWdpc2xhdHVyZTogZGF0YXNldC5sZWdpc2xhdHVyZSB9XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiogaXRlckxvYWRBc3NlbWJsZWVEb2N1bWVudHMoXG4gIGRhdGFEaXI6IHN0cmluZyxcbiAgbGVnaXNsYXR1cmU6IExlZ2lzbGF0dXJlLFxuICB7IG5vVmFsaWRhdGlvbiA9IGZhbHNlLCBsb2cgPSBmYWxzZSB9ID0ge30sXG4pOiBHZW5lcmF0b3I8XG4gIHsgZG9jdW1lbnQ6IERvY3VtZW50OyBkYXRhc2V0TGVnaXNsYXR1cmU6IExlZ2lzbGF0dXJlIH0sXG4gIHZvaWQsXG4gIHVua25vd25cbj4ge1xuICBjb25zdCBkb2N1bWVudHNVaWQgPSBuZXcgU2V0PHN0cmluZz4oKVxuICBmb3IgKGNvbnN0IGRhdGFzZXQgb2YgZGF0YXNldHMuZG9zc2llcnNMZWdpc2xhdGlmcykge1xuICAgIGlmIChkYXRhc2V0Lmlnbm9yZUZvcldlYikge1xuICAgICAgY29udGludWVcbiAgICB9XG4gICAgaWYgKFxuICAgICAgbGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgZGF0YXNldC5sZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICBsZWdpc2xhdHVyZSAhPT0gZGF0YXNldC5sZWdpc2xhdHVyZVxuICAgICkge1xuICAgICAgY29udGludWVcbiAgICB9XG4gICAgY29uc3QgZGF0YXNldERpciA9IHBhdGguam9pbihcbiAgICAgIGRhdGFEaXIsXG4gICAgICBkYXRhc2V0LmZpbGVuYW1lLnJlcGxhY2UoL1xcLmpzb24kLywgXCJfbmV0dG95ZVwiKSxcbiAgICApXG5cbiAgICBmb3IgKGNvbnN0IGRvY3VtZW50U3BsaXRQYXRoIG9mIHdhbGtEaXIoZGF0YXNldERpciwgW1wiZG9jdW1lbnRzXCJdKSkge1xuICAgICAgY29uc3QgZG9jdW1lbnRGaWxlbmFtZSA9IGRvY3VtZW50U3BsaXRQYXRoW2RvY3VtZW50U3BsaXRQYXRoLmxlbmd0aCAtIDFdXG4gICAgICBpZiAoIWRvY3VtZW50RmlsZW5hbWUuZW5kc1dpdGgoXCIuanNvblwiKSkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgY29uc3QgZG9jdW1lbnRGaWxlUGF0aCA9IHBhdGguam9pbihkYXRhc2V0RGlyLCAuLi5kb2N1bWVudFNwbGl0UGF0aClcbiAgICAgIGlmIChsb2cpIHtcbiAgICAgICAgY29uc29sZS5sb2coYExvYWRpbmcgZmlsZTogJHtkb2N1bWVudEZpbGVQYXRofeKApmApXG4gICAgICB9XG4gICAgICBjb25zdCBkb2N1bWVudEpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhkb2N1bWVudEZpbGVQYXRoLCB7XG4gICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgIH0pXG4gICAgICBsZXQgZG9jdW1lbnQ6IERvY3VtZW50XG4gICAgICBpZihub1ZhbGlkYXRpb24pIHtcbiAgICAgICAgZG9jdW1lbnQgPSBKU09OLnBhcnNlKGRvY3VtZW50SnNvbilcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRvY3VtZW50ID0gRG9zc2llcnNMZWdpc2xhdGlmc0NvbnZlcnQudG9Eb2N1bWVudChkb2N1bWVudEpzb24pXG4gICAgICB9XG4gICAgICBpZiAoZG9jdW1lbnRzVWlkLmhhcyhkb2N1bWVudC51aWQpKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBkb2N1bWVudHNVaWQuYWRkKGRvY3VtZW50LnVpZClcbiAgICAgIHlpZWxkIHsgZG9jdW1lbnQsIGRhdGFzZXRMZWdpc2xhdHVyZTogZGF0YXNldC5sZWdpc2xhdHVyZSB9XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiogaXRlckxvYWRBc3NlbWJsZWVEb3NzaWVyc1BhcmxlbWVudGFpcmVzKFxuICBkYXRhRGlyOiBzdHJpbmcsXG4gIGxlZ2lzbGF0dXJlOiBMZWdpc2xhdHVyZSxcbiAgeyBub1ZhbGlkYXRpb24gPSBmYWxzZSwgbG9nID0gZmFsc2UgfSA9IHt9LFxuKTogR2VuZXJhdG9yPFxuICB7XG4gICAgZG9zc2llclBhcmxlbWVudGFpcmU6IERvc3NpZXJQYXJsZW1lbnRhaXJlXG4gICAgZGF0YXNldExlZ2lzbGF0dXJlOiBMZWdpc2xhdHVyZVxuICB9LFxuICB2b2lkLFxuICB1bmtub3duXG4+IHtcbiAgY29uc3QgZG9zc2llcnNQYXJsZW1lbnRhaXJlc1VpZCA9IG5ldyBTZXQ8c3RyaW5nPigpXG4gIGZvciAoY29uc3QgZGF0YXNldCBvZiBkYXRhc2V0cy5kb3NzaWVyc0xlZ2lzbGF0aWZzKSB7XG4gICAgaWYgKGRhdGFzZXQuaWdub3JlRm9yV2ViKSB7XG4gICAgICBjb250aW51ZVxuICAgIH1cbiAgICBpZiAoXG4gICAgICBsZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICBkYXRhc2V0LmxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgIGxlZ2lzbGF0dXJlICE9PSBkYXRhc2V0LmxlZ2lzbGF0dXJlXG4gICAgKSB7XG4gICAgICBjb250aW51ZVxuICAgIH1cbiAgICBjb25zdCBkYXRhc2V0RGlyID0gcGF0aC5qb2luKFxuICAgICAgZGF0YURpcixcbiAgICAgIGRhdGFzZXQuZmlsZW5hbWUucmVwbGFjZSgvXFwuanNvbiQvLCBcIl9uZXR0b3llXCIpLFxuICAgIClcblxuICAgIGZvciAoY29uc3QgZG9zc2llclBhcmxlbWVudGFpcmVTcGxpdFBhdGggb2Ygd2Fsa0RpcihkYXRhc2V0RGlyLCBbXG4gICAgICBcImRvc3NpZXJzXCIsXG4gICAgXSkpIHtcbiAgICAgIGNvbnN0IGRvc3NpZXJQYXJsZW1lbnRhaXJlRmlsZW5hbWUgPVxuICAgICAgICBkb3NzaWVyUGFybGVtZW50YWlyZVNwbGl0UGF0aFtkb3NzaWVyUGFybGVtZW50YWlyZVNwbGl0UGF0aC5sZW5ndGggLSAxXVxuICAgICAgaWYgKCFkb3NzaWVyUGFybGVtZW50YWlyZUZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGNvbnN0IGRvc3NpZXJQYXJsZW1lbnRhaXJlRmlsZVBhdGggPSBwYXRoLmpvaW4oXG4gICAgICAgIGRhdGFzZXREaXIsXG4gICAgICAgIC4uLmRvc3NpZXJQYXJsZW1lbnRhaXJlU3BsaXRQYXRoLFxuICAgICAgKVxuICAgICAgaWYgKGxvZykge1xuICAgICAgICBjb25zb2xlLmxvZyhgTG9hZGluZyBmaWxlOiAke2Rvc3NpZXJQYXJsZW1lbnRhaXJlRmlsZVBhdGh94oCmYClcbiAgICAgIH1cbiAgICAgIGNvbnN0IGRvc3NpZXJQYXJsZW1lbnRhaXJlSnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKFxuICAgICAgICBkb3NzaWVyUGFybGVtZW50YWlyZUZpbGVQYXRoLFxuICAgICAgICB7XG4gICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICB9LFxuICAgICAgKVxuXG4gICAgICBsZXQgZG9zc2llclBhcmxlbWVudGFpcmU6IERvc3NpZXJQYXJsZW1lbnRhaXJlXG4gICAgICBpZihub1ZhbGlkYXRpb24pIHtcbiAgICAgICAgZG9zc2llclBhcmxlbWVudGFpcmUgPSBKU09OLnBhcnNlKGRvc3NpZXJQYXJsZW1lbnRhaXJlSnNvbilcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRvc3NpZXJQYXJsZW1lbnRhaXJlID1cbiAgICAgICAgRG9zc2llcnNMZWdpc2xhdGlmc0NvbnZlcnQudG9Eb3NzaWVyUGFybGVtZW50YWlyZShcbiAgICAgICAgICBkb3NzaWVyUGFybGVtZW50YWlyZUpzb24sXG4gICAgICAgIClcbiAgICAgIH1cbiAgICAgIFxuICAgICAgaWYgKGRvc3NpZXJzUGFybGVtZW50YWlyZXNVaWQuaGFzKGRvc3NpZXJQYXJsZW1lbnRhaXJlLnVpZCkpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGRvc3NpZXJzUGFybGVtZW50YWlyZXNVaWQuYWRkKGRvc3NpZXJQYXJsZW1lbnRhaXJlLnVpZClcbiAgICAgIHlpZWxkIHsgZG9zc2llclBhcmxlbWVudGFpcmUsIGRhdGFzZXRMZWdpc2xhdHVyZTogZGF0YXNldC5sZWdpc2xhdHVyZSB9XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiogaXRlckxvYWRBc3NlbWJsZWVPcmdhbmVzKFxuICBkYXRhRGlyOiBzdHJpbmcsXG4gIGxlZ2lzbGF0dXJlOiBMZWdpc2xhdHVyZSxcbiAgeyBub1ZhbGlkYXRpb24gPSBmYWxzZSwgbG9nID0gZmFsc2UgfSA9IHt9LFxuKTogR2VuZXJhdG9yPFxuICB7IG9yZ2FuZTogT3JnYW5lOyBkYXRhc2V0TGVnaXNsYXR1cmU6IExlZ2lzbGF0dXJlIH0sXG4gIHZvaWQsXG4gIHVua25vd25cbj4ge1xuICBjb25zdCBvcmdhbmVzVWlkID0gbmV3IFNldDxzdHJpbmc+KClcbiAgZm9yIChjb25zdCBkYXRhc2V0IG9mIGRhdGFzZXRzLmFjdGV1cnNFdE9yZ2FuZXMpIHtcbiAgICBpZiAoZGF0YXNldC5pZ25vcmVGb3JXZWIpIHtcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuICAgIGlmIChcbiAgICAgIGxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgIGRhdGFzZXQubGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgbGVnaXNsYXR1cmUgIT09IGRhdGFzZXQubGVnaXNsYXR1cmVcbiAgICApIHtcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuICAgIGNvbnN0IGRhdGFzZXREaXIgPSBwYXRoLmpvaW4oXG4gICAgICBkYXRhRGlyLFxuICAgICAgZGF0YXNldC5maWxlbmFtZS5yZXBsYWNlKC9cXC5qc29uJC8sIFwiX25ldHRveWVcIiksXG4gICAgKVxuXG4gICAgZm9yIChjb25zdCBvcmdhbmVTcGxpdFBhdGggb2Ygd2Fsa0RpcihkYXRhc2V0RGlyLCBbXCJvcmdhbmVzXCJdKSkge1xuICAgICAgY29uc3Qgb3JnYW5lRmlsZW5hbWUgPSBvcmdhbmVTcGxpdFBhdGhbb3JnYW5lU3BsaXRQYXRoLmxlbmd0aCAtIDFdXG4gICAgICBpZiAoIW9yZ2FuZUZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGNvbnN0IG9yZ2FuZUZpbGVQYXRoID0gcGF0aC5qb2luKGRhdGFzZXREaXIsIC4uLm9yZ2FuZVNwbGl0UGF0aClcbiAgICAgIGlmIChsb2cpIHtcbiAgICAgICAgY29uc29sZS5sb2coYExvYWRpbmcgZmlsZTogJHtvcmdhbmVGaWxlUGF0aH3igKZgKVxuICAgICAgfVxuICAgICAgY29uc3Qgb3JnYW5lSnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKG9yZ2FuZUZpbGVQYXRoLCB7XG4gICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgIH0pXG4gICAgICBsZXQgb3JnYW5lOiBPcmdhbmVcbiAgICAgIGlmKG5vVmFsaWRhdGlvbikge1xuICAgICAgICBvcmdhbmUgPSBKU09OLnBhcnNlKG9yZ2FuZUpzb24pXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvcmdhbmUgPSBBY3RldXJzRXRPcmdhbmVzQ29udmVydC50b09yZ2FuZShvcmdhbmVKc29uKVxuICAgICAgfVxuICAgICAgLy8gS2VlcCB0aGUgZmlyc3QgZXhpc3RpbmcgXCJvcmdhbmVcIiwgYmVjYXVzZSB0aGUgZmlyc3Qgd3JhcHBlciBpcyB0aGUgbW9zdCBjb21wbGV0ZS5cbiAgICAgIGlmIChvcmdhbmVzVWlkLmhhcyhvcmdhbmUudWlkKSkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgb3JnYW5lc1VpZC5hZGQob3JnYW5lLnVpZClcbiAgICAgIHlpZWxkIHsgb3JnYW5lLCBkYXRhc2V0TGVnaXNsYXR1cmU6IGRhdGFzZXQubGVnaXNsYXR1cmUgfVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24qIGl0ZXJMb2FkQXNzZW1ibGVlUmV1bmlvbnMoXG4gIGRhdGFEaXI6IHN0cmluZyxcbiAgbGVnaXNsYXR1cmU6IExlZ2lzbGF0dXJlLFxuICB7IG5vVmFsaWRhdGlvbiA9IGZhbHNlLCBsb2cgPSBmYWxzZSB9ID0ge30sXG4pOiBHZW5lcmF0b3I8XG4gIHsgcmV1bmlvbjogUmV1bmlvbjsgZGF0YXNldExlZ2lzbGF0dXJlOiBMZWdpc2xhdHVyZSB9LFxuICB2b2lkLFxuICB1bmtub3duXG4+IHtcbiAgY29uc3QgcmV1bmlvbnNVaWQgPSBuZXcgU2V0PHN0cmluZz4oKVxuICBmb3IgKGNvbnN0IGRhdGFzZXQgb2YgZGF0YXNldHMuYWdlbmRhcykge1xuICAgIGlmIChkYXRhc2V0Lmlnbm9yZUZvcldlYikge1xuICAgICAgY29udGludWVcbiAgICB9XG4gICAgaWYgKFxuICAgICAgbGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgZGF0YXNldC5sZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICBsZWdpc2xhdHVyZSAhPT0gZGF0YXNldC5sZWdpc2xhdHVyZVxuICAgICkge1xuICAgICAgY29udGludWVcbiAgICB9XG4gICAgY29uc3QgZGF0YXNldERpciA9IHBhdGguam9pbihcbiAgICAgIGRhdGFEaXIsXG4gICAgICBkYXRhc2V0LmZpbGVuYW1lLnJlcGxhY2UoL1xcLmpzb24kLywgXCJfbmV0dG95ZVwiKSxcbiAgICApXG5cbiAgICBmb3IgKGNvbnN0IHJldW5pb25TcGxpdFBhdGggb2Ygd2Fsa0RpcihkYXRhc2V0RGlyKSkge1xuICAgICAgY29uc3QgcmV1bmlvbkZpbGVuYW1lID0gcmV1bmlvblNwbGl0UGF0aFtyZXVuaW9uU3BsaXRQYXRoLmxlbmd0aCAtIDFdXG4gICAgICBpZiAoIXJldW5pb25GaWxlbmFtZS5lbmRzV2l0aChcIi5qc29uXCIpKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBjb25zdCByZXVuaW9uRmlsZVBhdGggPSBwYXRoLmpvaW4oZGF0YXNldERpciwgLi4ucmV1bmlvblNwbGl0UGF0aClcbiAgICAgIGlmIChsb2cpIHtcbiAgICAgICAgY29uc29sZS5sb2coYExvYWRpbmcgZmlsZTogJHtyZXVuaW9uRmlsZVBhdGh94oCmYClcbiAgICAgIH1cbiAgICAgIGNvbnN0IHJldW5pb25Kc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMocmV1bmlvbkZpbGVQYXRoLCB7XG4gICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgIH0pXG5cbiAgICAgIGxldCByZXVuaW9uOiBSZXVuaW9uXG4gICAgICBpZihub1ZhbGlkYXRpb24pIHtcbiAgICAgICAgcmV1bmlvbiA9IEpTT04ucGFyc2UocmV1bmlvbkpzb24pXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXVuaW9uID0gQWdlbmRhc0NvbnZlcnQudG9SZXVuaW9uKHJldW5pb25Kc29uKVxuICAgICAgfVxuXG4gICAgICBpZiAocmV1bmlvbnNVaWQuaGFzKHJldW5pb24udWlkKSkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgcmV1bmlvbnNVaWQuYWRkKHJldW5pb24udWlkKVxuICAgICAgeWllbGQgeyByZXVuaW9uLCBkYXRhc2V0TGVnaXNsYXR1cmU6IGRhdGFzZXQubGVnaXNsYXR1cmUgfVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24qIGl0ZXJMb2FkQXNzZW1ibGVlU2NydXRpbnMoXG4gIGRhdGFEaXI6IHN0cmluZyxcbiAgbGVnaXNsYXR1cmU6IExlZ2lzbGF0dXJlLFxuICB7IG5vVmFsaWRhdGlvbiA9IGZhbHNlLCBsb2cgPSBmYWxzZSB9ID0ge30sXG4pOiBHZW5lcmF0b3I8XG4gIHsgc2NydXRpbjogU2NydXRpbjsgZGF0YXNldExlZ2lzbGF0dXJlOiBMZWdpc2xhdHVyZSB9LFxuICB2b2lkLFxuICB1bmtub3duXG4+IHtcbiAgY29uc3Qgc2NydXRpbnNVaWQgPSBuZXcgU2V0PHN0cmluZz4oKVxuICBmb3IgKGNvbnN0IGRhdGFzZXQgb2YgZGF0YXNldHMuc2NydXRpbnMpIHtcbiAgICBpZiAoZGF0YXNldC5pZ25vcmVGb3JXZWIpIHtcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuICAgIGlmIChcbiAgICAgIGxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgIGRhdGFzZXQubGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgbGVnaXNsYXR1cmUgIT09IGRhdGFzZXQubGVnaXNsYXR1cmVcbiAgICApIHtcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuICAgIGNvbnN0IGRhdGFzZXREaXIgPSBwYXRoLmpvaW4oXG4gICAgICBkYXRhRGlyLFxuICAgICAgZGF0YXNldC5maWxlbmFtZS5yZXBsYWNlKC9cXC5qc29uJC8sIFwiX25ldHRveWVcIiksXG4gICAgKVxuXG4gICAgZm9yIChjb25zdCBzY3J1dGluU3BsaXRQYXRoIG9mIHdhbGtEaXIoZGF0YXNldERpcikpIHtcbiAgICAgIGNvbnN0IHNjcnV0aW5GaWxlbmFtZSA9IHNjcnV0aW5TcGxpdFBhdGhbc2NydXRpblNwbGl0UGF0aC5sZW5ndGggLSAxXVxuICAgICAgaWYgKCFzY3J1dGluRmlsZW5hbWUuZW5kc1dpdGgoXCIuanNvblwiKSkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgY29uc3Qgc2NydXRpbkZpbGVQYXRoID0gcGF0aC5qb2luKGRhdGFzZXREaXIsIC4uLnNjcnV0aW5TcGxpdFBhdGgpXG4gICAgICBpZiAobG9nKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBMb2FkaW5nIGZpbGU6ICR7c2NydXRpbkZpbGVQYXRofeKApmApXG4gICAgICB9XG4gICAgICBjb25zdCBzY3J1dGluSnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKHNjcnV0aW5GaWxlUGF0aCwge1xuICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICB9KVxuICAgICAgXG4gICAgICBsZXQgc2NydXRpbjogU2NydXRpblxuICAgICAgaWYobm9WYWxpZGF0aW9uKSB7XG4gICAgICAgIHNjcnV0aW4gPSBKU09OLnBhcnNlKHNjcnV0aW5Kc29uKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2NydXRpbiA9IFNjcnV0aW5zQ29udmVydC50b1NjcnV0aW4oc2NydXRpbkpzb24pXG4gICAgICB9XG5cbiAgICAgIGlmIChzY3J1dGluc1VpZC5oYXMoc2NydXRpbi51aWQpKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBzY3J1dGluc1VpZC5hZGQoc2NydXRpbi51aWQpXG4gICAgICB5aWVsZCB7IHNjcnV0aW4sIGRhdGFzZXRMZWdpc2xhdHVyZTogZGF0YXNldC5sZWdpc2xhdHVyZSB9XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiogaXRlckxvYWRBc3NlbWJsZWVRdWVzdGlvbnMoXG4gIGRhdGFEaXI6IHN0cmluZyxcbiAgbGVnaXNsYXR1cmU6IExlZ2lzbGF0dXJlLFxuICB7IG5vVmFsaWRhdGlvbiA9IGZhbHNlLCBsb2cgPSBmYWxzZSB9ID0ge30sXG4pOiBHZW5lcmF0b3I8XG4gIHsgcXVlc3Rpb246IFF1ZXN0aW9uOyBkYXRhc2V0TGVnaXNsYXR1cmU6IExlZ2lzbGF0dXJlIH0sXG4gIHZvaWQsXG4gIHVua25vd25cbj4ge1xuICBjb25zdCBxdWVzdGlvbnNVaWQgPSBuZXcgU2V0PHN0cmluZz4oKVxuICBmb3IgKGNvbnN0IGRhdGFzZXQgb2YgZGF0YXNldHMucXVlc3Rpb25zKSB7XG4gICAgaWYgKGRhdGFzZXQuaWdub3JlRm9yV2ViKSB7XG4gICAgICBjb250aW51ZVxuICAgIH1cbiAgICBpZiAoXG4gICAgICBsZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICBkYXRhc2V0LmxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgIGxlZ2lzbGF0dXJlICE9PSBkYXRhc2V0LmxlZ2lzbGF0dXJlXG4gICAgKSB7XG4gICAgICBjb250aW51ZVxuICAgIH1cbiAgICBjb25zdCBkYXRhc2V0RGlyID0gcGF0aC5qb2luKFxuICAgICAgZGF0YURpcixcbiAgICAgIGRhdGFzZXQuZmlsZW5hbWUucmVwbGFjZSgvXFwuanNvbiQvLCBcIl9uZXR0b3llXCIpLFxuICAgIClcblxuICAgIGZvciAoY29uc3QgcXVlc3Rpb25TcGxpdFBhdGggb2Ygd2Fsa0RpcihkYXRhc2V0RGlyKSkge1xuICAgICAgY29uc3QgcXVlc3Rpb25GaWxlbmFtZSA9IHF1ZXN0aW9uU3BsaXRQYXRoW3F1ZXN0aW9uU3BsaXRQYXRoLmxlbmd0aCAtIDFdXG4gICAgICBpZiAoIXF1ZXN0aW9uRmlsZW5hbWUuZW5kc1dpdGgoXCIuanNvblwiKSkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgY29uc3QgcXVlc3Rpb25GaWxlUGF0aCA9IHBhdGguam9pbihkYXRhc2V0RGlyLCAuLi5xdWVzdGlvblNwbGl0UGF0aClcbiAgICAgIGlmIChsb2cpIHtcbiAgICAgICAgY29uc29sZS5sb2coYExvYWRpbmcgZmlsZTogJHtxdWVzdGlvbkZpbGVQYXRofeKApmApXG4gICAgICB9XG4gICAgICBjb25zdCBxdWVzdGlvbkpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhxdWVzdGlvbkZpbGVQYXRoLCB7XG4gICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgIH0pXG5cbiAgICAgIGxldCBxdWVzdGlvbjogUXVlc3Rpb25cbiAgICAgIGlmKG5vVmFsaWRhdGlvbikge1xuICAgICAgICBxdWVzdGlvbiA9IEpTT04ucGFyc2UocXVlc3Rpb25Kc29uKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcXVlc3Rpb24gPSBRdWVzdGlvbnNDb252ZXJ0LnRvUXVlc3Rpb24ocXVlc3Rpb25Kc29uKVxuICAgICAgfVxuXG4gICAgICBpZiAocXVlc3Rpb25zVWlkLmhhcyhxdWVzdGlvbi51aWQpKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBxdWVzdGlvbnNVaWQuYWRkKHF1ZXN0aW9uLnVpZClcbiAgICAgIHlpZWxkIHsgcXVlc3Rpb24sIGRhdGFzZXRMZWdpc2xhdHVyZTogZGF0YXNldC5sZWdpc2xhdHVyZSB9XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiogaXRlckxvYWRBc3NlbWJsZWVDb21wdGVzUmVuZHVzKFxuICBkYXRhRGlyOiBzdHJpbmcsXG4gIGxlZ2lzbGF0dXJlOiBMZWdpc2xhdHVyZSxcbiAgeyBub1ZhbGlkYXRpb24gPSBmYWxzZSwgbG9nID0gZmFsc2UgfSA9IHt9LFxuKTogR2VuZXJhdG9yPFxuICB7IGNvbXB0ZVJlbmR1OiBDb21wdGVSZW5kdTsgZGF0YXNldExlZ2lzbGF0dXJlOiBMZWdpc2xhdHVyZSB9LFxuICB2b2lkLFxuICB1bmtub3duXG4+IHtcbiAgY29uc3QgY29tcHRlc1JlbmR1c1VpZCA9IG5ldyBTZXQ8c3RyaW5nPigpXG4gIGZvciAoY29uc3QgZGF0YXNldCBvZiBkYXRhc2V0cy5jb21wdGVzUmVuZHVzU2VhbmNlcykge1xuICAgIGlmIChkYXRhc2V0Lmlnbm9yZUZvcldlYikge1xuICAgICAgY29udGludWVcbiAgICB9XG4gICAgaWYgKFxuICAgICAgbGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgZGF0YXNldC5sZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICBsZWdpc2xhdHVyZSAhPT0gZGF0YXNldC5sZWdpc2xhdHVyZVxuICAgICkge1xuICAgICAgY29udGludWVcbiAgICB9XG4gICAgY29uc3QgZGF0YXNldERpciA9IHBhdGguam9pbihcbiAgICAgIGRhdGFEaXIsXG4gICAgICBkYXRhc2V0LmZpbGVuYW1lLnJlcGxhY2UoL1xcLnhtbCQvLCBcIl9uZXR0b3llXCIpLFxuICAgIClcblxuICAgIGZvciAoY29uc3QgY29tcHRlUmVuZHVTcGxpdFBhdGggb2Ygd2Fsa0RpcihkYXRhc2V0RGlyKSkge1xuICAgICAgY29uc3QgY29tcHRlUmVuZHVGaWxlbmFtZSA9XG4gICAgICAgIGNvbXB0ZVJlbmR1U3BsaXRQYXRoW2NvbXB0ZVJlbmR1U3BsaXRQYXRoLmxlbmd0aCAtIDFdXG4gICAgICBpZiAoIWNvbXB0ZVJlbmR1RmlsZW5hbWUuZW5kc1dpdGgoXCIuanNvblwiKSkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgY29uc3QgY29tcHRlUmVuZHVGaWxlUGF0aCA9IHBhdGguam9pbihkYXRhc2V0RGlyLCAuLi5jb21wdGVSZW5kdVNwbGl0UGF0aClcbiAgICAgIGlmIChsb2cpIHtcbiAgICAgICAgY29uc29sZS5sb2coYExvYWRpbmcgZmlsZTogJHtjb21wdGVSZW5kdUZpbGVQYXRofeKApmApXG4gICAgICB9XG4gICAgICBjb25zdCBjb21wdGVSZW5kdUpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhjb21wdGVSZW5kdUZpbGVQYXRoLCB7XG4gICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgIH0pXG5cbiAgICAgIGxldCBjb21wdGVSZW5kdTogQ29tcHRlUmVuZHVcbiAgICAgIGlmKG5vVmFsaWRhdGlvbikge1xuICAgICAgICBjb21wdGVSZW5kdSA9IEpTT04ucGFyc2UoY29tcHRlUmVuZHVKc29uKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29tcHRlUmVuZHUgPSBDb21wdGVzUmVuZHVzQ29udmVydC50b0NvbXB0ZVJlbmR1KGNvbXB0ZVJlbmR1SnNvbilcbiAgICAgIH1cbiAgICAgIGlmIChjb21wdGVzUmVuZHVzVWlkLmhhcyhjb21wdGVSZW5kdS51aWQpKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBjb21wdGVzUmVuZHVzVWlkLmFkZChjb21wdGVSZW5kdS51aWQpXG4gICAgICB5aWVsZCB7IGNvbXB0ZVJlbmR1LCBkYXRhc2V0TGVnaXNsYXR1cmU6IGRhdGFzZXQubGVnaXNsYXR1cmUgfVxuICAgIH1cbiAgfVxufVxuXG4vLy8gTG9hZCBkYXRhIGZyb20gc3BsaXQgZmlsZXMuXG4vLy8gRGVwcmVjYXRlZDogVXNlIGl0ZXJMb2FkLi4uIGl0ZXJhdG9ycyBpbnN0ZWFkLlxuZXhwb3J0IGZ1bmN0aW9uIGxvYWRBc3NlbWJsZWVEYXRhKFxuICBkYXRhRGlyOiBzdHJpbmcsXG4gIGVuYWJsZWREYXRhc2V0czogRW5hYmxlZERhdGFzZXRzLFxuICBsZWdpc2xhdHVyZTogTGVnaXNsYXR1cmUsXG4gIHsgbG9nID0gZmFsc2UgfSA9IHt9LFxuKTogRGF0YSB7XG4gIGNvbnN0IGFjdGV1ckJ5VWlkOiB7IFt1aWQ6IHN0cmluZ106IEFjdGV1ciB9ID0ge31cbiAgY29uc3Qgb3JnYW5lQnlVaWQ6IHsgW3VpZDogc3RyaW5nXTogT3JnYW5lIH0gPSB7fVxuICBpZiAoZW5hYmxlZERhdGFzZXRzICYgRW5hYmxlZERhdGFzZXRzLkFjdGV1cnNFdE9yZ2FuZXMpIHtcbiAgICBmb3IgKGNvbnN0IGRhdGFzZXQgb2YgZGF0YXNldHMuYWN0ZXVyc0V0T3JnYW5lcykge1xuICAgICAgaWYgKGRhdGFzZXQuaWdub3JlRm9yV2ViKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBpZiAoXG4gICAgICAgIGxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgICAgZGF0YXNldC5sZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICAgIGxlZ2lzbGF0dXJlICE9PSBkYXRhc2V0LmxlZ2lzbGF0dXJlXG4gICAgICApIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGNvbnN0IGRhdGFzZXREaXIgPSBwYXRoLmpvaW4oXG4gICAgICAgIGRhdGFEaXIsXG4gICAgICAgIGRhdGFzZXQuZmlsZW5hbWUucmVwbGFjZSgvXFwuanNvbiQvLCBcIl9uZXR0b3llXCIpLFxuICAgICAgKVxuXG4gICAgICBmb3IgKGNvbnN0IGFjdGV1clNwbGl0UGF0aCBvZiB3YWxrRGlyKGRhdGFzZXREaXIsIFtcImFjdGV1cnNcIl0pKSB7XG4gICAgICAgIGNvbnN0IGFjdGV1ckZpbGVuYW1lID0gYWN0ZXVyU3BsaXRQYXRoW2FjdGV1clNwbGl0UGF0aC5sZW5ndGggLSAxXVxuICAgICAgICBpZiAoIWFjdGV1ckZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGFjdGV1ckZpbGVQYXRoID0gcGF0aC5qb2luKGRhdGFzZXREaXIsIC4uLmFjdGV1clNwbGl0UGF0aClcbiAgICAgICAgaWYgKGxvZykge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGBMb2FkaW5nIGZpbGU6ICR7YWN0ZXVyRmlsZVBhdGh94oCmYClcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBhY3RldXJKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoYWN0ZXVyRmlsZVBhdGgsIHtcbiAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgIH0pXG4gICAgICAgIGNvbnN0IGFjdGV1ciA9IEFjdGV1cnNFdE9yZ2FuZXNDb252ZXJ0LnRvQWN0ZXVyKGFjdGV1ckpzb24pXG4gICAgICAgIC8vIEtlZXAgdGhlIGZpcnN0IGV4aXN0aW5nIFwiYWN0ZXVyXCIsIGJlY2F1c2UgdGhlIGZpcnN0IHdyYXBwZXIgaXMgdGhlIG1vc3QgY29tcGxldGUuXG4gICAgICAgIGlmIChhY3RldXJCeVVpZFthY3RldXIudWlkXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgYWN0ZXVyQnlVaWRbYWN0ZXVyLnVpZF0gPSBhY3RldXJcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBmb3IgKGNvbnN0IG9yZ2FuZVNwbGl0UGF0aCBvZiB3YWxrRGlyKGRhdGFzZXREaXIsIFtcIm9yZ2FuZXNcIl0pKSB7XG4gICAgICAgIGNvbnN0IG9yZ2FuZUZpbGVuYW1lID0gb3JnYW5lU3BsaXRQYXRoW29yZ2FuZVNwbGl0UGF0aC5sZW5ndGggLSAxXVxuICAgICAgICBpZiAoIW9yZ2FuZUZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG9yZ2FuZUZpbGVQYXRoID0gcGF0aC5qb2luKGRhdGFzZXREaXIsIC4uLm9yZ2FuZVNwbGl0UGF0aClcbiAgICAgICAgaWYgKGxvZykge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGBMb2FkaW5nIGZpbGU6ICR7b3JnYW5lRmlsZVBhdGh94oCmYClcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBvcmdhbmVKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMob3JnYW5lRmlsZVBhdGgsIHtcbiAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgIH0pXG4gICAgICAgIGNvbnN0IG9yZ2FuZSA9IEFjdGV1cnNFdE9yZ2FuZXNDb252ZXJ0LnRvT3JnYW5lKG9yZ2FuZUpzb24pXG4gICAgICAgIC8vIEtlZXAgdGhlIGZpcnN0IGV4aXN0aW5nIFwib3JnYW5lXCIsIGJlY2F1c2UgdGhlIGZpcnN0IHdyYXBwZXIgaXMgdGhlIG1vc3QgY29tcGxldGUuXG4gICAgICAgIGlmIChvcmdhbmVCeVVpZFtvcmdhbmUudWlkXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgb3JnYW5lQnlVaWRbb3JnYW5lLnVpZF0gPSBvcmdhbmVcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHJldW5pb25CeVVpZDogeyBbdWlkOiBzdHJpbmddOiBSZXVuaW9uIH0gPSB7fVxuICBjb25zdCByZXVuaW9uc0J5RGF5OiB7IFtkYXk6IHN0cmluZ106IFJldW5pb25bXSB9ID0ge31cbiAgY29uc3QgcmV1bmlvbnNCeURvc3NpZXJVaWQ6IHsgW2Rvc3NpZXJVaWQ6IHN0cmluZ106IFJldW5pb25bXSB9ID0ge31cbiAgaWYgKGVuYWJsZWREYXRhc2V0cyAmIEVuYWJsZWREYXRhc2V0cy5BZ2VuZGFzKSB7XG4gICAgZm9yIChjb25zdCBkYXRhc2V0IG9mIGRhdGFzZXRzLmFnZW5kYXMpIHtcbiAgICAgIGlmIChkYXRhc2V0Lmlnbm9yZUZvcldlYikge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgaWYgKFxuICAgICAgICBsZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICAgIGRhdGFzZXQubGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgICBsZWdpc2xhdHVyZSAhPT0gZGF0YXNldC5sZWdpc2xhdHVyZVxuICAgICAgKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBjb25zdCBkYXRhc2V0RGlyID0gcGF0aC5qb2luKFxuICAgICAgICBkYXRhRGlyLFxuICAgICAgICBkYXRhc2V0LmZpbGVuYW1lLnJlcGxhY2UoL1xcLmpzb24kLywgXCJfbmV0dG95ZVwiKSxcbiAgICAgIClcbiAgICAgIGZvciAoY29uc3QgcmV1bmlvblNwbGl0UGF0aCBvZiB3YWxrRGlyKGRhdGFzZXREaXIpKSB7XG4gICAgICAgIGNvbnN0IHJldW5pb25GaWxlbmFtZSA9IHJldW5pb25TcGxpdFBhdGhbcmV1bmlvblNwbGl0UGF0aC5sZW5ndGggLSAxXVxuICAgICAgICBpZiAoIXJldW5pb25GaWxlbmFtZS5lbmRzV2l0aChcIi5qc29uXCIpKSB7XG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXVuaW9uRmlsZVBhdGggPSBwYXRoLmpvaW4oZGF0YXNldERpciwgLi4ucmV1bmlvblNwbGl0UGF0aClcbiAgICAgICAgaWYgKGxvZykge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGBMb2FkaW5nIGZpbGU6ICR7cmV1bmlvbkZpbGVQYXRofeKApmApXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmV1bmlvbkpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhyZXVuaW9uRmlsZVBhdGgsIHtcbiAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgIH0pXG4gICAgICAgIGNvbnN0IHJldW5pb24gPSBBZ2VuZGFzQ29udmVydC50b1JldW5pb24ocmV1bmlvbkpzb24pXG4gICAgICAgIGlmIChyZXVuaW9uQnlVaWRbcmV1bmlvbi51aWRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICByZXVuaW9uQnlVaWRbcmV1bmlvbi51aWRdID0gcmV1bmlvblxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZGF5ID0gcmV1bmlvbi50aW1lc3RhbXBEZWJ1dC50b0lTT1N0cmluZygpLnNwbGl0KFwiVFwiKVswXVxuICAgICAgICBsZXQgcmV1bmlvbnNBdERheSA9IHJldW5pb25zQnlEYXlbZGF5XVxuICAgICAgICBpZiAocmV1bmlvbnNBdERheSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgcmV1bmlvbnNBdERheSA9IHJldW5pb25zQnlEYXlbZGF5XSA9IFtdXG4gICAgICAgIH1cbiAgICAgICAgcmV1bmlvbnNBdERheS5wdXNoKHJldW5pb24pXG5cbiAgICAgICAgY29uc3Qgb2RqID0gcmV1bmlvbi5vZGpcbiAgICAgICAgaWYgKG9kaiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgZm9yIChjb25zdCBwb2ludE9kaiBvZiBvZGoucG9pbnRzT2RqIHx8IFtdKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGRvc3NpZXJMZWdpc2xhdGlmUmVmIG9mIHBvaW50T2RqLmRvc3NpZXJzTGVnaXNsYXRpZnNSZWZzIHx8XG4gICAgICAgICAgICAgIFtdKSB7XG4gICAgICAgICAgICAgIGxldCByZXVuaW9uc0F0RG9zc2llclVpZCA9XG4gICAgICAgICAgICAgICAgcmV1bmlvbnNCeURvc3NpZXJVaWRbZG9zc2llckxlZ2lzbGF0aWZSZWZdXG4gICAgICAgICAgICAgIGlmIChyZXVuaW9uc0F0RG9zc2llclVpZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgcmV1bmlvbnNBdERvc3NpZXJVaWQgPSByZXVuaW9uc0J5RG9zc2llclVpZFtcbiAgICAgICAgICAgICAgICAgIGRvc3NpZXJMZWdpc2xhdGlmUmVmXG4gICAgICAgICAgICAgICAgXSA9IFtdXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmV1bmlvbnNBdERvc3NpZXJVaWQucHVzaChyZXVuaW9uKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGFtZW5kZW1lbnRCeVVpZDogeyBbdWlkOiBzdHJpbmddOiBBbWVuZGVtZW50IH0gPSB7fVxuICBpZiAoZW5hYmxlZERhdGFzZXRzICYgRW5hYmxlZERhdGFzZXRzLkFtZW5kZW1lbnRzKSB7XG4gICAgZm9yIChjb25zdCBkYXRhc2V0IG9mIGRhdGFzZXRzLmFtZW5kZW1lbnRzKSB7XG4gICAgICBpZiAoZGF0YXNldC5pZ25vcmVGb3JXZWIpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGlmIChcbiAgICAgICAgbGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgICBkYXRhc2V0LmxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgICAgbGVnaXNsYXR1cmUgIT09IGRhdGFzZXQubGVnaXNsYXR1cmVcbiAgICAgICkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgY29uc3QgZGF0YXNldERpciA9IHBhdGguam9pbihcbiAgICAgICAgZGF0YURpcixcbiAgICAgICAgZGF0YXNldC5maWxlbmFtZS5yZXBsYWNlKC9cXC5qc29uJC8sIFwiX25ldHRveWVcIiksXG4gICAgICApXG5cbiAgICAgIGZvciAoY29uc3QgYW1lbmRlbWVudFNwbGl0UGF0aCBvZiB3YWxrRGlyKGRhdGFzZXREaXIpKSB7XG4gICAgICAgIGNvbnN0IGFtZW5kZW1lbnRGaWxlbmFtZSA9XG4gICAgICAgICAgYW1lbmRlbWVudFNwbGl0UGF0aFthbWVuZGVtZW50U3BsaXRQYXRoLmxlbmd0aCAtIDFdXG4gICAgICAgIGlmICghYW1lbmRlbWVudEZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGFtZW5kZW1lbnRGaWxlUGF0aCA9IHBhdGguam9pbihkYXRhc2V0RGlyLCAuLi5hbWVuZGVtZW50U3BsaXRQYXRoKVxuICAgICAgICBpZiAobG9nKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coYExvYWRpbmcgZmlsZTogJHthbWVuZGVtZW50RmlsZVBhdGh94oCmYClcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBhbWVuZGVtZW50SnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKGFtZW5kZW1lbnRGaWxlUGF0aCwge1xuICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgfSlcbiAgICAgICAgY29uc3QgYW1lbmRlbWVudCA9IEFtZW5kZW1lbnRzQ29udmVydC50b0FtZW5kZW1lbnQoYW1lbmRlbWVudEpzb24pXG4gICAgICAgIGlmIChhbWVuZGVtZW50QnlVaWRbYW1lbmRlbWVudC51aWRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBhbWVuZGVtZW50QnlVaWRbYW1lbmRlbWVudC51aWRdID0gYW1lbmRlbWVudFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY29uc3QgZG9jdW1lbnRCeVVpZDogeyBbdWlkOiBzdHJpbmddOiBEb2N1bWVudCB9ID0ge31cbiAgY29uc3QgZG9zc2llclBhcmxlbWVudGFpcmVCeVNlbmF0Q2hlbWluOiB7XG4gICAgW3VpZDogc3RyaW5nXTogRG9zc2llclBhcmxlbWVudGFpcmVcbiAgfSA9IHt9XG4gIGNvbnN0IGRvc3NpZXJQYXJsZW1lbnRhaXJlQnlUaXRyZUNoZW1pbjoge1xuICAgIFt1aWQ6IHN0cmluZ106IERvc3NpZXJQYXJsZW1lbnRhaXJlXG4gIH0gPSB7fVxuICBjb25zdCBkb3NzaWVyUGFybGVtZW50YWlyZUJ5VWlkOiB7IFt1aWQ6IHN0cmluZ106IERvc3NpZXJQYXJsZW1lbnRhaXJlIH0gPSB7fVxuICBpZiAoZW5hYmxlZERhdGFzZXRzICYgRW5hYmxlZERhdGFzZXRzLkRvc3NpZXJzTGVnaXNsYXRpZnMpIHtcbiAgICBmb3IgKGNvbnN0IGRhdGFzZXQgb2YgZGF0YXNldHMuZG9zc2llcnNMZWdpc2xhdGlmcykge1xuICAgICAgaWYgKGRhdGFzZXQuaWdub3JlRm9yV2ViKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBpZiAoXG4gICAgICAgIGxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgICAgZGF0YXNldC5sZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICAgIGxlZ2lzbGF0dXJlICE9PSBkYXRhc2V0LmxlZ2lzbGF0dXJlXG4gICAgICApIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGNvbnN0IGRhdGFzZXREaXIgPSBwYXRoLmpvaW4oXG4gICAgICAgIGRhdGFEaXIsXG4gICAgICAgIGRhdGFzZXQuZmlsZW5hbWUucmVwbGFjZSgvXFwuanNvbiQvLCBcIl9uZXR0b3llXCIpLFxuICAgICAgKVxuXG4gICAgICBmb3IgKGNvbnN0IGRvY3VtZW50U3BsaXRQYXRoIG9mIHdhbGtEaXIoZGF0YXNldERpciwgW1wiZG9jdW1lbnRzXCJdKSkge1xuICAgICAgICBjb25zdCBkb2N1bWVudEZpbGVuYW1lID0gZG9jdW1lbnRTcGxpdFBhdGhbZG9jdW1lbnRTcGxpdFBhdGgubGVuZ3RoIC0gMV1cbiAgICAgICAgaWYgKCFkb2N1bWVudEZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRvY3VtZW50RmlsZVBhdGggPSBwYXRoLmpvaW4oZGF0YXNldERpciwgLi4uZG9jdW1lbnRTcGxpdFBhdGgpXG4gICAgICAgIGlmIChsb2cpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgTG9hZGluZyBmaWxlOiAke2RvY3VtZW50RmlsZVBhdGh94oCmYClcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkb2N1bWVudEpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhkb2N1bWVudEZpbGVQYXRoLCB7XG4gICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICB9KVxuICAgICAgICBjb25zdCBkb2N1bWVudCA9IERvc3NpZXJzTGVnaXNsYXRpZnNDb252ZXJ0LnRvRG9jdW1lbnQoZG9jdW1lbnRKc29uKVxuICAgICAgICBpZiAoZG9jdW1lbnRCeVVpZFtkb2N1bWVudC51aWRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBkb2N1bWVudEJ5VWlkW2RvY3VtZW50LnVpZF0gPSBkb2N1bWVudFxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGZvciAoY29uc3QgZG9zc2llclNwbGl0UGF0aCBvZiB3YWxrRGlyKGRhdGFzZXREaXIsIFtcImRvc3NpZXJzXCJdKSkge1xuICAgICAgICBjb25zdCBkb3NzaWVyRmlsZW5hbWUgPSBkb3NzaWVyU3BsaXRQYXRoW2Rvc3NpZXJTcGxpdFBhdGgubGVuZ3RoIC0gMV1cbiAgICAgICAgaWYgKCFkb3NzaWVyRmlsZW5hbWUuZW5kc1dpdGgoXCIuanNvblwiKSkge1xuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZG9zc2llckZpbGVQYXRoID0gcGF0aC5qb2luKGRhdGFzZXREaXIsIC4uLmRvc3NpZXJTcGxpdFBhdGgpXG4gICAgICAgIGlmIChsb2cpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgTG9hZGluZyBmaWxlOiAke2Rvc3NpZXJGaWxlUGF0aH3igKZgKVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRvc3NpZXJKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoZG9zc2llckZpbGVQYXRoLCB7XG4gICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICB9KVxuICAgICAgICBjb25zdCBkb3NzaWVyID1cbiAgICAgICAgICBEb3NzaWVyc0xlZ2lzbGF0aWZzQ29udmVydC50b0Rvc3NpZXJQYXJsZW1lbnRhaXJlKGRvc3NpZXJKc29uKVxuICAgICAgICBjb25zdCB0aXRyZURvc3NpZXIgPSBkb3NzaWVyLnRpdHJlRG9zc2llclxuICAgICAgICBpZiAoXG4gICAgICAgICAgdGl0cmVEb3NzaWVyLnNlbmF0Q2hlbWluICYmXG4gICAgICAgICAgZG9zc2llclBhcmxlbWVudGFpcmVCeVNlbmF0Q2hlbWluW3RpdHJlRG9zc2llci5zZW5hdENoZW1pbl0gPT09XG4gICAgICAgICAgICB1bmRlZmluZWRcbiAgICAgICAgKSB7XG4gICAgICAgICAgZG9zc2llclBhcmxlbWVudGFpcmVCeVNlbmF0Q2hlbWluW3RpdHJlRG9zc2llci5zZW5hdENoZW1pbl0gPSBkb3NzaWVyXG4gICAgICAgIH1cbiAgICAgICAgaWYgKFxuICAgICAgICAgIHRpdHJlRG9zc2llci50aXRyZUNoZW1pbiAmJlxuICAgICAgICAgIGRvc3NpZXJQYXJsZW1lbnRhaXJlQnlUaXRyZUNoZW1pblt0aXRyZURvc3NpZXIudGl0cmVDaGVtaW5dID09PVxuICAgICAgICAgICAgdW5kZWZpbmVkXG4gICAgICAgICkge1xuICAgICAgICAgIGRvc3NpZXJQYXJsZW1lbnRhaXJlQnlUaXRyZUNoZW1pblt0aXRyZURvc3NpZXIudGl0cmVDaGVtaW5dID0gZG9zc2llclxuICAgICAgICB9XG4gICAgICAgIGlmIChkb3NzaWVyUGFybGVtZW50YWlyZUJ5VWlkW2Rvc3NpZXIudWlkXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgZG9zc2llclBhcmxlbWVudGFpcmVCeVVpZFtkb3NzaWVyLnVpZF0gPSBkb3NzaWVyXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBsZXQgcGhvdG9CeVVpZDogeyBbdWlkOiBzdHJpbmddOiBQaG90byB9ID0ge31cbiAgaWYgKGVuYWJsZWREYXRhc2V0cyAmIEVuYWJsZWREYXRhc2V0cy5QaG90b3MpIHtcbiAgICB7XG4gICAgICBjb25zdCBqc29uRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICAgICAgZGF0YURpcixcbiAgICAgICAgYHBob3Rvc19kZXB1dGVzXyR7XG4gICAgICAgICAgLy8gVE9ETzogSGFuZGxlIExlZ2lzbGF0dXJlLkFsbC5cbiAgICAgICAgICBsZWdpc2xhdHVyZSA9PT0gTGVnaXNsYXR1cmUuQWxsID8gTGVnaXNsYXR1cmUuU2VpemUgOiBsZWdpc2xhdHVyZVxuICAgICAgICB9YCxcbiAgICAgICAgXCJkZXB1dGVzLmpzb25cIixcbiAgICAgIClcbiAgICAgIGlmIChmcy5leGlzdHNTeW5jKGpzb25GaWxlUGF0aCkpIHtcbiAgICAgICAgaWYgKGxvZykge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGBMb2FkaW5nIGZpbGU6ICR7anNvbkZpbGVQYXRofWApXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QganNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKGpzb25GaWxlUGF0aCwgeyBlbmNvZGluZzogXCJ1dGY4XCIgfSlcbiAgICAgICAgT2JqZWN0LmFzc2lnbihwaG90b0J5VWlkLCBKU09OLnBhcnNlKGpzb24pKVxuICAgICAgfSBlbHNlIGlmIChsb2cpIHtcbiAgICAgICAgY29uc29sZS5sb2coYElnbm9yaW5nIG1pc3NpbmcgZmlsZTogJHtqc29uRmlsZVBhdGh9YClcbiAgICAgIH1cbiAgICB9XG5cbiAgICB7XG4gICAgICBjb25zdCBqc29uRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICAgICAgZGF0YURpcixcbiAgICAgICAgXCJwaG90b3Nfc2VuYXRldXJzXCIsXG4gICAgICAgIFwic2VuYXRldXJzLmpzb25cIixcbiAgICAgIClcbiAgICAgIGlmIChmcy5leGlzdHNTeW5jKGpzb25GaWxlUGF0aCkpIHtcbiAgICAgICAgaWYgKGxvZykge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGBMb2FkaW5nIGZpbGU6ICR7anNvbkZpbGVQYXRofWApXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QganNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKGpzb25GaWxlUGF0aCwgeyBlbmNvZGluZzogXCJ1dGY4XCIgfSlcbiAgICAgICAgT2JqZWN0LmFzc2lnbihwaG90b0J5VWlkLCBKU09OLnBhcnNlKGpzb24pKVxuICAgICAgfSBlbHNlIGlmIChsb2cpIHtcbiAgICAgICAgY29uc29sZS5sb2coYElnbm9yaW5nIG1pc3NpbmcgZmlsZTogJHtqc29uRmlsZVBhdGh9YClcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjb25zdCBzY3J1dGluQnlVaWQ6IHsgW3VpZDogc3RyaW5nXTogU2NydXRpbiB9ID0ge31cbiAgaWYgKGVuYWJsZWREYXRhc2V0cyAmIEVuYWJsZWREYXRhc2V0cy5TY3J1dGlucykge1xuICAgIGZvciAoY29uc3QgZGF0YXNldCBvZiBkYXRhc2V0cy5zY3J1dGlucykge1xuICAgICAgaWYgKGRhdGFzZXQuaWdub3JlRm9yV2ViKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBpZiAoXG4gICAgICAgIGxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgICAgZGF0YXNldC5sZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICAgIGxlZ2lzbGF0dXJlICE9PSBkYXRhc2V0LmxlZ2lzbGF0dXJlXG4gICAgICApIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGNvbnN0IGRhdGFzZXREaXIgPSBwYXRoLmpvaW4oXG4gICAgICAgIGRhdGFEaXIsXG4gICAgICAgIGRhdGFzZXQuZmlsZW5hbWUucmVwbGFjZSgvXFwuanNvbiQvLCBcIl9uZXR0b3llXCIpLFxuICAgICAgKVxuXG4gICAgICBmb3IgKGNvbnN0IHNjcnV0aW5TcGxpdFBhdGggb2Ygd2Fsa0RpcihkYXRhc2V0RGlyKSkge1xuICAgICAgICBjb25zdCBzY3J1dGluRmlsZW5hbWUgPSBzY3J1dGluU3BsaXRQYXRoW3NjcnV0aW5TcGxpdFBhdGgubGVuZ3RoIC0gMV1cbiAgICAgICAgaWYgKCFzY3J1dGluRmlsZW5hbWUuZW5kc1dpdGgoXCIuanNvblwiKSkge1xuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc2NydXRpbkZpbGVQYXRoID0gcGF0aC5qb2luKGRhdGFzZXREaXIsIC4uLnNjcnV0aW5TcGxpdFBhdGgpXG4gICAgICAgIGlmIChsb2cpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgTG9hZGluZyBmaWxlOiAke3NjcnV0aW5GaWxlUGF0aH3igKZgKVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNjcnV0aW5Kc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoc2NydXRpbkZpbGVQYXRoLCB7XG4gICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICB9KVxuICAgICAgICBjb25zdCBzY3J1dGluID0gU2NydXRpbnNDb252ZXJ0LnRvU2NydXRpbihzY3J1dGluSnNvbilcbiAgICAgICAgaWYgKHNjcnV0aW5CeVVpZFtzY3J1dGluLnVpZF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHNjcnV0aW5CeVVpZFtzY3J1dGluLnVpZF0gPSBzY3J1dGluXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjb25zdCBxdWVzdGlvbkJ5VWlkOiB7IFt1aWQ6IHN0cmluZ106IFF1ZXN0aW9uIH0gPSB7fVxuICBpZiAoZW5hYmxlZERhdGFzZXRzICYgRW5hYmxlZERhdGFzZXRzLlF1ZXN0aW9ucykge1xuICAgIGZvciAoY29uc3QgZGF0YXNldCBvZiBkYXRhc2V0cy5xdWVzdGlvbnMpIHtcbiAgICAgIGlmIChkYXRhc2V0Lmlnbm9yZUZvcldlYikge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgaWYgKFxuICAgICAgICBsZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICAgIGRhdGFzZXQubGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgICBsZWdpc2xhdHVyZSAhPT0gZGF0YXNldC5sZWdpc2xhdHVyZVxuICAgICAgKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBjb25zdCBkYXRhc2V0RGlyID0gcGF0aC5qb2luKFxuICAgICAgICBkYXRhRGlyLFxuICAgICAgICBkYXRhc2V0LmZpbGVuYW1lLnJlcGxhY2UoL1xcLmpzb24kLywgXCJfbmV0dG95ZVwiKSxcbiAgICAgIClcblxuICAgICAgZm9yIChjb25zdCBxdWVzdGlvblNwbGl0UGF0aCBvZiB3YWxrRGlyKGRhdGFzZXREaXIpKSB7XG4gICAgICAgIGNvbnN0IHF1ZXN0aW9uRmlsZW5hbWUgPSBxdWVzdGlvblNwbGl0UGF0aFtxdWVzdGlvblNwbGl0UGF0aC5sZW5ndGggLSAxXVxuICAgICAgICBpZiAoIXF1ZXN0aW9uRmlsZW5hbWUuZW5kc1dpdGgoXCIuanNvblwiKSkge1xuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcXVlc3Rpb25GaWxlUGF0aCA9IHBhdGguam9pbihkYXRhc2V0RGlyLCAuLi5xdWVzdGlvblNwbGl0UGF0aClcbiAgICAgICAgaWYgKGxvZykge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGBMb2FkaW5nIGZpbGU6ICR7cXVlc3Rpb25GaWxlUGF0aH3igKZgKVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHF1ZXN0aW9uSnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKHF1ZXN0aW9uRmlsZVBhdGgsIHtcbiAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgIH0pXG4gICAgICAgIGNvbnN0IHF1ZXN0aW9uID0gUXVlc3Rpb25zQ29udmVydC50b1F1ZXN0aW9uKHF1ZXN0aW9uSnNvbilcbiAgICAgICAgaWYgKHF1ZXN0aW9uQnlVaWRbcXVlc3Rpb24udWlkXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgcXVlc3Rpb25CeVVpZFtxdWVzdGlvbi51aWRdID0gcXVlc3Rpb25cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGNvbXB0ZVJlbmR1QnlVaWQ6IHsgW3VpZDogc3RyaW5nXTogQ29tcHRlUmVuZHUgfSA9IHt9XG4gIGlmIChlbmFibGVkRGF0YXNldHMgJiBFbmFibGVkRGF0YXNldHMuQ29tcHRlc1JlbmR1c1NlYW5jZXMpIHtcbiAgICBmb3IgKGNvbnN0IGRhdGFzZXQgb2YgZGF0YXNldHMuY29tcHRlc1JlbmR1c1NlYW5jZXMpIHtcbiAgICAgIGlmIChkYXRhc2V0Lmlnbm9yZUZvcldlYikge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgaWYgKFxuICAgICAgICBsZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICAgIGRhdGFzZXQubGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgICBsZWdpc2xhdHVyZSAhPT0gZGF0YXNldC5sZWdpc2xhdHVyZVxuICAgICAgKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBjb25zdCBkYXRhc2V0RGlyID0gcGF0aC5qb2luKFxuICAgICAgICBkYXRhRGlyLFxuICAgICAgICBkYXRhc2V0LmZpbGVuYW1lLnJlcGxhY2UoL1xcLmpzb24kLywgXCJfbmV0dG95ZVwiKSxcbiAgICAgIClcblxuICAgICAgZm9yIChjb25zdCBjb21wdGVSZW5kdVBhdGggb2Ygd2Fsa0RpcihkYXRhc2V0RGlyKSkge1xuICAgICAgICBjb25zdCBjb21wdGVSZW5kdUZpbGVuYW1lID0gY29tcHRlUmVuZHVQYXRoW2NvbXB0ZVJlbmR1UGF0aC5sZW5ndGggLSAxXVxuICAgICAgICBpZiAoIWNvbXB0ZVJlbmR1RmlsZW5hbWUuZW5kc1dpdGgoXCIuanNvblwiKSkge1xuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY29tcHRlUmVuZHVGaWxlUGF0aCA9IHBhdGguam9pbihkYXRhc2V0RGlyLCAuLi5jb21wdGVSZW5kdVBhdGgpXG4gICAgICAgIGlmIChsb2cpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgTG9hZGluZyBmaWxlOiAke2NvbXB0ZVJlbmR1RmlsZVBhdGh94oCmYClcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjb21wdGVSZW5kdUpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhjb21wdGVSZW5kdUZpbGVQYXRoLCB7XG4gICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICB9KVxuICAgICAgICBjb25zdCBjb21wdGVSZW5kdSA9IENvbXB0ZXNSZW5kdXNDb252ZXJ0LnRvQ29tcHRlUmVuZHUoY29tcHRlUmVuZHVKc29uKVxuICAgICAgICBpZiAoY29tcHRlUmVuZHVCeVVpZFtjb21wdGVSZW5kdS51aWRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBjb21wdGVSZW5kdUJ5VWlkW2NvbXB0ZVJlbmR1LnVpZF0gPSBjb21wdGVSZW5kdVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBhY3RldXJCeVVpZCxcbiAgICBhbWVuZGVtZW50QnlVaWQsXG4gICAgZG9jdW1lbnRCeVVpZCxcbiAgICBkb3NzaWVyUGFybGVtZW50YWlyZUJ5U2VuYXRDaGVtaW4sXG4gICAgZG9zc2llclBhcmxlbWVudGFpcmVCeVRpdHJlQ2hlbWluLFxuICAgIGRvc3NpZXJQYXJsZW1lbnRhaXJlQnlVaWQsXG4gICAgb3JnYW5lQnlVaWQsXG4gICAgcGhvdG9CeVVpZCxcbiAgICByZXVuaW9uQnlVaWQsXG4gICAgcmV1bmlvbnNCeURheSxcbiAgICByZXVuaW9uc0J5RG9zc2llclVpZCxcbiAgICBzY3J1dGluQnlVaWQsXG4gICAgcXVlc3Rpb25CeVVpZCxcbiAgICBjb21wdGVSZW5kdUJ5VWlkLFxuICB9XG59XG5cbi8vLyBMb2FkIGRhdGEgZnJvbSBiaWcgbW9ub2x5dGljIGZpbGVzLlxuLy8vIERlcHJlY2F0ZWQ6IEFzc2VtYmzDqWUgbmF0aW9uYWxlIG9wZW4gZGF0YSBubyBtb3JlIHVzZXMgbW9ub2x5dGljIGZpbGVzLlxuZXhwb3J0IGZ1bmN0aW9uIGxvYWRBc3NlbWJsZWVEYXRhRnJvbUJpZ0ZpbGVzKFxuICBkYXRhRGlyOiBzdHJpbmcsXG4gIGVuYWJsZWREYXRhc2V0czogRW5hYmxlZERhdGFzZXRzLFxuICBsZWdpc2xhdHVyZTogTGVnaXNsYXR1cmUsXG4gIHsgbG9nID0gZmFsc2UgfSA9IHt9LFxuKTogRGF0YSB7XG4gIGNvbnN0IGFjdGV1ckJ5VWlkOiB7IFt1aWQ6IHN0cmluZ106IEFjdGV1ciB9ID0ge31cbiAgY29uc3Qgb3JnYW5lQnlVaWQ6IHsgW3VpZDogc3RyaW5nXTogT3JnYW5lIH0gPSB7fVxuICBpZiAoZW5hYmxlZERhdGFzZXRzICYgRW5hYmxlZERhdGFzZXRzLkFjdGV1cnNFdE9yZ2FuZXMpIHtcbiAgICBmb3IgKGNvbnN0IGRhdGFzZXQgb2YgZGF0YXNldHMuYWN0ZXVyc0V0T3JnYW5lcykge1xuICAgICAgaWYgKGRhdGFzZXQuaWdub3JlRm9yV2ViKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBpZiAoXG4gICAgICAgIGxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgICAgZGF0YXNldC5sZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICAgIGxlZ2lzbGF0dXJlICE9PSBkYXRhc2V0LmxlZ2lzbGF0dXJlXG4gICAgICApIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGNvbnN0IGpzb25GaWxlUGF0aDogc3RyaW5nID0gcGF0aC5qb2luKFxuICAgICAgICBkYXRhRGlyLFxuICAgICAgICBkYXRhc2V0LmZpbGVuYW1lLnJlcGxhY2UoL1xcLmpzb24kLywgXCJfbmV0dG95ZS5qc29uXCIpLFxuICAgICAgKVxuICAgICAgaWYgKGxvZykge1xuICAgICAgICBjb25zb2xlLmxvZyhgTG9hZGluZyBmaWxlOiAke2pzb25GaWxlUGF0aH1gKVxuICAgICAgfVxuICAgICAgY29uc3QganNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKGpzb25GaWxlUGF0aCwgeyBlbmNvZGluZzogXCJ1dGY4XCIgfSlcbiAgICAgIGNvbnN0IGFjdGV1cnNFdE9yZ2FuZXMgPSBBY3RldXJzRXRPcmdhbmVzQ29udmVydC50b0FjdGV1cnNFdE9yZ2FuZXMoanNvbilcbiAgICAgIGZvciAoY29uc3QgYWN0ZXVyIG9mIGFjdGV1cnNFdE9yZ2FuZXMuYWN0ZXVycykge1xuICAgICAgICAvLyBLZWVwIHRoZSBmaXJzdCBleGlzdGluZyBcImFjdGV1clwiLCBiZWNhdXNlIHRoZSBmaXJzdCB3cmFwcGVyIGlzIHRoZSBtb3N0IGNvbXBsZXRlLlxuICAgICAgICBpZiAoYWN0ZXVyQnlVaWRbYWN0ZXVyLnVpZF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGFjdGV1ckJ5VWlkW2FjdGV1ci51aWRdID0gYWN0ZXVyXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGZvciAoY29uc3Qgb3JnYW5lIG9mIGFjdGV1cnNFdE9yZ2FuZXMub3JnYW5lcykge1xuICAgICAgICAvLyBLZWVwIHRoZSBmaXJzdCBleGlzdGluZyBcIm9yZ2FuZVwiLCBiZWNhdXNlIHRoZSBmaXJzdCB3cmFwcGVyIGlzIHRoZSBtb3N0IGNvbXBsZXRlLlxuICAgICAgICBpZiAob3JnYW5lQnlVaWRbb3JnYW5lLnVpZF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIG9yZ2FuZUJ5VWlkW29yZ2FuZS51aWRdID0gb3JnYW5lXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjb25zdCByZXVuaW9uQnlVaWQ6IHsgW3VpZDogc3RyaW5nXTogUmV1bmlvbiB9ID0ge31cbiAgY29uc3QgcmV1bmlvbnNCeURheTogeyBbZGF5OiBzdHJpbmddOiBSZXVuaW9uW10gfSA9IHt9XG4gIGNvbnN0IHJldW5pb25zQnlEb3NzaWVyVWlkOiB7IFtkb3NzaWVyVWlkOiBzdHJpbmddOiBSZXVuaW9uW10gfSA9IHt9XG4gIGlmIChlbmFibGVkRGF0YXNldHMgJiBFbmFibGVkRGF0YXNldHMuQWdlbmRhcykge1xuICAgIGZvciAoY29uc3QgZGF0YXNldCBvZiBkYXRhc2V0cy5hZ2VuZGFzKSB7XG4gICAgICBpZiAoZGF0YXNldC5pZ25vcmVGb3JXZWIpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGlmIChcbiAgICAgICAgbGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgICBkYXRhc2V0LmxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgICAgbGVnaXNsYXR1cmUgIT09IGRhdGFzZXQubGVnaXNsYXR1cmVcbiAgICAgICkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgY29uc3QganNvbkZpbGVQYXRoOiBzdHJpbmcgPSBwYXRoLmpvaW4oXG4gICAgICAgIGRhdGFEaXIsXG4gICAgICAgIGRhdGFzZXQuZmlsZW5hbWUucmVwbGFjZSgvXFwuanNvbiQvLCBcIl9uZXR0b3llLmpzb25cIiksXG4gICAgICApXG4gICAgICBpZiAobG9nKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBMb2FkaW5nIGZpbGU6ICR7anNvbkZpbGVQYXRofWApXG4gICAgICB9XG4gICAgICBjb25zdCBqc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoanNvbkZpbGVQYXRoLCB7IGVuY29kaW5nOiBcInV0ZjhcIiB9KVxuICAgICAgY29uc3QgYWdlbmRhcyA9IEFnZW5kYXNDb252ZXJ0LnRvQWdlbmRhcyhqc29uKVxuICAgICAgZm9yIChjb25zdCByZXVuaW9uIG9mIGFnZW5kYXMucmV1bmlvbnMpIHtcbiAgICAgICAgaWYgKHJldW5pb25CeVVpZFtyZXVuaW9uLnVpZF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHJldW5pb25CeVVpZFtyZXVuaW9uLnVpZF0gPSByZXVuaW9uXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBkYXkgPSByZXVuaW9uLnRpbWVzdGFtcERlYnV0LnRvSVNPU3RyaW5nKCkuc3BsaXQoXCJUXCIpWzBdXG4gICAgICAgIGxldCByZXVuaW9uc0F0RGF5ID0gcmV1bmlvbnNCeURheVtkYXldXG4gICAgICAgIGlmIChyZXVuaW9uc0F0RGF5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICByZXVuaW9uc0F0RGF5ID0gcmV1bmlvbnNCeURheVtkYXldID0gW11cbiAgICAgICAgfVxuICAgICAgICByZXVuaW9uc0F0RGF5LnB1c2gocmV1bmlvbilcblxuICAgICAgICBjb25zdCBvZGogPSByZXVuaW9uLm9kalxuICAgICAgICBpZiAob2RqICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBmb3IgKGNvbnN0IHBvaW50T2RqIG9mIG9kai5wb2ludHNPZGogfHwgW10pIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgZG9zc2llckxlZ2lzbGF0aWZSZWYgb2YgcG9pbnRPZGouZG9zc2llcnNMZWdpc2xhdGlmc1JlZnMgfHxcbiAgICAgICAgICAgICAgW10pIHtcbiAgICAgICAgICAgICAgbGV0IHJldW5pb25zQXREb3NzaWVyVWlkID1cbiAgICAgICAgICAgICAgICByZXVuaW9uc0J5RG9zc2llclVpZFtkb3NzaWVyTGVnaXNsYXRpZlJlZl1cbiAgICAgICAgICAgICAgaWYgKHJldW5pb25zQXREb3NzaWVyVWlkID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICByZXVuaW9uc0F0RG9zc2llclVpZCA9IHJldW5pb25zQnlEb3NzaWVyVWlkW1xuICAgICAgICAgICAgICAgICAgZG9zc2llckxlZ2lzbGF0aWZSZWZcbiAgICAgICAgICAgICAgICBdID0gW11cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXVuaW9uc0F0RG9zc2llclVpZC5wdXNoKHJldW5pb24pXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY29uc3QgYW1lbmRlbWVudEJ5VWlkOiB7IFt1aWQ6IHN0cmluZ106IEFtZW5kZW1lbnQgfSA9IHt9XG4gIGlmIChlbmFibGVkRGF0YXNldHMgJiBFbmFibGVkRGF0YXNldHMuQW1lbmRlbWVudHMpIHtcbiAgICBmb3IgKGNvbnN0IGRhdGFzZXQgb2YgZGF0YXNldHMuYW1lbmRlbWVudHMpIHtcbiAgICAgIGlmIChkYXRhc2V0Lmlnbm9yZUZvcldlYikge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgaWYgKFxuICAgICAgICBsZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICAgIGRhdGFzZXQubGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgICBsZWdpc2xhdHVyZSAhPT0gZGF0YXNldC5sZWdpc2xhdHVyZVxuICAgICAgKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBjb25zdCBqc29uRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICAgICAgZGF0YURpcixcbiAgICAgICAgZGF0YXNldC5maWxlbmFtZS5yZXBsYWNlKC9cXC5qc29uJC8sIFwiX25ldHRveWUuanNvblwiKSxcbiAgICAgIClcbiAgICAgIGlmIChsb2cpIHtcbiAgICAgICAgY29uc29sZS5sb2coYExvYWRpbmcgZmlsZTogJHtqc29uRmlsZVBhdGh9YClcbiAgICAgIH1cbiAgICAgIGNvbnN0IGpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhqc29uRmlsZVBhdGgsIHsgZW5jb2Rpbmc6IFwidXRmOFwiIH0pXG4gICAgICBjb25zdCBhbWVuZGVtZW50cyA9IEFtZW5kZW1lbnRzQ29udmVydC50b0FtZW5kZW1lbnRzKGpzb24pXG4gICAgICBmb3IgKGNvbnN0IHRleHRlTGVnaXNsYXRpZiBvZiBhbWVuZGVtZW50cy50ZXh0ZXNMZWdpc2xhdGlmcykge1xuICAgICAgICBmb3IgKGNvbnN0IGFtZW5kZW1lbnQgb2YgdGV4dGVMZWdpc2xhdGlmLmFtZW5kZW1lbnRzKSB7XG4gICAgICAgICAgaWYgKGFtZW5kZW1lbnRCeVVpZFthbWVuZGVtZW50LnVpZF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgYW1lbmRlbWVudEJ5VWlkW2FtZW5kZW1lbnQudWlkXSA9IGFtZW5kZW1lbnRcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjb25zdCBkb2N1bWVudEJ5VWlkOiB7IFt1aWQ6IHN0cmluZ106IERvY3VtZW50IH0gPSB7fVxuICBjb25zdCBkb3NzaWVyUGFybGVtZW50YWlyZUJ5U2VuYXRDaGVtaW46IHtcbiAgICBbdWlkOiBzdHJpbmddOiBEb3NzaWVyUGFybGVtZW50YWlyZVxuICB9ID0ge31cbiAgY29uc3QgZG9zc2llclBhcmxlbWVudGFpcmVCeVRpdHJlQ2hlbWluOiB7XG4gICAgW3VpZDogc3RyaW5nXTogRG9zc2llclBhcmxlbWVudGFpcmVcbiAgfSA9IHt9XG4gIGNvbnN0IGRvc3NpZXJQYXJsZW1lbnRhaXJlQnlVaWQ6IHsgW3VpZDogc3RyaW5nXTogRG9zc2llclBhcmxlbWVudGFpcmUgfSA9IHt9XG4gIGlmIChlbmFibGVkRGF0YXNldHMgJiBFbmFibGVkRGF0YXNldHMuRG9zc2llcnNMZWdpc2xhdGlmcykge1xuICAgIGZvciAoY29uc3QgZGF0YXNldCBvZiBkYXRhc2V0cy5kb3NzaWVyc0xlZ2lzbGF0aWZzKSB7XG4gICAgICBpZiAoZGF0YXNldC5pZ25vcmVGb3JXZWIpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGlmIChcbiAgICAgICAgbGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgICBkYXRhc2V0LmxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgICAgbGVnaXNsYXR1cmUgIT09IGRhdGFzZXQubGVnaXNsYXR1cmVcbiAgICAgICkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgY29uc3QganNvbkZpbGVQYXRoOiBzdHJpbmcgPSBwYXRoLmpvaW4oXG4gICAgICAgIGRhdGFEaXIsXG4gICAgICAgIGRhdGFzZXQuZmlsZW5hbWUucmVwbGFjZSgvXFwuanNvbiQvLCBcIl9uZXR0b3llLmpzb25cIiksXG4gICAgICApXG4gICAgICBpZiAobG9nKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBMb2FkaW5nIGZpbGU6ICR7anNvbkZpbGVQYXRofWApXG4gICAgICB9XG4gICAgICBjb25zdCBqc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoanNvbkZpbGVQYXRoLCB7IGVuY29kaW5nOiBcInV0ZjhcIiB9KVxuICAgICAgY29uc3QgZG9zc2llcnNMZWdpc2xhdGlmcyA9XG4gICAgICAgIERvc3NpZXJzTGVnaXNsYXRpZnNDb252ZXJ0LnRvRG9zc2llcnNMZWdpc2xhdGlmcyhqc29uKVxuICAgICAgZm9yIChjb25zdCBkb2N1bWVudCBvZiBkb3NzaWVyc0xlZ2lzbGF0aWZzLnRleHRlc0xlZ2lzbGF0aWZzKSB7XG4gICAgICAgIGlmIChkb2N1bWVudEJ5VWlkW2RvY3VtZW50LnVpZF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGRvY3VtZW50QnlVaWRbZG9jdW1lbnQudWlkXSA9IGRvY3VtZW50XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGZvciAoY29uc3QgZG9zc2llciBvZiBkb3NzaWVyc0xlZ2lzbGF0aWZzLmRvc3NpZXJzUGFybGVtZW50YWlyZXMpIHtcbiAgICAgICAgY29uc3QgdGl0cmVEb3NzaWVyID0gZG9zc2llci50aXRyZURvc3NpZXJcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHRpdHJlRG9zc2llci5zZW5hdENoZW1pbiAmJlxuICAgICAgICAgIGRvc3NpZXJQYXJsZW1lbnRhaXJlQnlTZW5hdENoZW1pblt0aXRyZURvc3NpZXIuc2VuYXRDaGVtaW5dID09PVxuICAgICAgICAgICAgdW5kZWZpbmVkXG4gICAgICAgICkge1xuICAgICAgICAgIGRvc3NpZXJQYXJsZW1lbnRhaXJlQnlTZW5hdENoZW1pblt0aXRyZURvc3NpZXIuc2VuYXRDaGVtaW5dID0gZG9zc2llclxuICAgICAgICB9XG4gICAgICAgIGlmIChcbiAgICAgICAgICB0aXRyZURvc3NpZXIudGl0cmVDaGVtaW4gJiZcbiAgICAgICAgICBkb3NzaWVyUGFybGVtZW50YWlyZUJ5VGl0cmVDaGVtaW5bdGl0cmVEb3NzaWVyLnRpdHJlQ2hlbWluXSA9PT1cbiAgICAgICAgICAgIHVuZGVmaW5lZFxuICAgICAgICApIHtcbiAgICAgICAgICBkb3NzaWVyUGFybGVtZW50YWlyZUJ5VGl0cmVDaGVtaW5bdGl0cmVEb3NzaWVyLnRpdHJlQ2hlbWluXSA9IGRvc3NpZXJcbiAgICAgICAgfVxuICAgICAgICBpZiAoZG9zc2llclBhcmxlbWVudGFpcmVCeVVpZFtkb3NzaWVyLnVpZF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGRvc3NpZXJQYXJsZW1lbnRhaXJlQnlVaWRbZG9zc2llci51aWRdID0gZG9zc2llclxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY29uc3QgcGhvdG9CeVVpZDogeyBbdWlkOiBzdHJpbmddOiBQaG90byB9ID0ge31cbiAgaWYgKGVuYWJsZWREYXRhc2V0cyAmIEVuYWJsZWREYXRhc2V0cy5QaG90b3MpIHtcbiAgICBjb25zdCBwaG90b0J5VWlkID0ge31cblxuICAgIHtcbiAgICAgIGNvbnN0IGpzb25GaWxlUGF0aDogc3RyaW5nID0gcGF0aC5qb2luKFxuICAgICAgICBkYXRhRGlyLFxuICAgICAgICBgcGhvdG9zX2RlcHV0ZXNfJHtcbiAgICAgICAgICAvLyBUT0RPOiBIYW5kbGUgTGVnaXNsYXR1cmUuQWxsLlxuICAgICAgICAgIGxlZ2lzbGF0dXJlID09PSBMZWdpc2xhdHVyZS5BbGwgPyBMZWdpc2xhdHVyZS5TZWl6ZSA6IGxlZ2lzbGF0dXJlXG4gICAgICAgIH1gLFxuICAgICAgICBcImRlcHV0ZXMuanNvblwiLFxuICAgICAgKVxuICAgICAgaWYgKGZzLmV4aXN0c1N5bmMoanNvbkZpbGVQYXRoKSkge1xuICAgICAgICBpZiAobG9nKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coYExvYWRpbmcgZmlsZTogJHtqc29uRmlsZVBhdGh9YClcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBqc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoanNvbkZpbGVQYXRoLCB7IGVuY29kaW5nOiBcInV0ZjhcIiB9KVxuICAgICAgICBPYmplY3QuYXNzaWduKHBob3RvQnlVaWQsIEpTT04ucGFyc2UoanNvbikpXG4gICAgICB9IGVsc2UgaWYgKGxvZykge1xuICAgICAgICBjb25zb2xlLmxvZyhgSWdub3JpbmcgbWlzc2luZyBmaWxlOiAke2pzb25GaWxlUGF0aH1gKVxuICAgICAgfVxuICAgIH1cblxuICAgIHtcbiAgICAgIGNvbnN0IGpzb25GaWxlUGF0aDogc3RyaW5nID0gcGF0aC5qb2luKFxuICAgICAgICBkYXRhRGlyLFxuICAgICAgICBcInBob3Rvc19zZW5hdGV1cnNcIixcbiAgICAgICAgXCJzZW5hdGV1cnMuanNvblwiLFxuICAgICAgKVxuICAgICAgaWYgKGZzLmV4aXN0c1N5bmMoanNvbkZpbGVQYXRoKSkge1xuICAgICAgICBpZiAobG9nKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coYExvYWRpbmcgZmlsZTogJHtqc29uRmlsZVBhdGh9YClcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBqc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoanNvbkZpbGVQYXRoLCB7IGVuY29kaW5nOiBcInV0ZjhcIiB9KVxuICAgICAgICBPYmplY3QuYXNzaWduKHBob3RvQnlVaWQsIEpTT04ucGFyc2UoanNvbikpXG4gICAgICB9IGVsc2UgaWYgKGxvZykge1xuICAgICAgICBjb25zb2xlLmxvZyhgSWdub3JpbmcgbWlzc2luZyBmaWxlOiAke2pzb25GaWxlUGF0aH1gKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHNjcnV0aW5CeVVpZDogeyBbdWlkOiBzdHJpbmddOiBTY3J1dGluIH0gPSB7fVxuICBpZiAoZW5hYmxlZERhdGFzZXRzICYgRW5hYmxlZERhdGFzZXRzLlNjcnV0aW5zKSB7XG4gICAgZm9yIChjb25zdCBkYXRhc2V0IG9mIGRhdGFzZXRzLnNjcnV0aW5zKSB7XG4gICAgICBpZiAoZGF0YXNldC5pZ25vcmVGb3JXZWIpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGlmIChcbiAgICAgICAgbGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgICBkYXRhc2V0LmxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgICAgbGVnaXNsYXR1cmUgIT09IGRhdGFzZXQubGVnaXNsYXR1cmVcbiAgICAgICkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgY29uc3QganNvbkZpbGVQYXRoOiBzdHJpbmcgPSBwYXRoLmpvaW4oXG4gICAgICAgIGRhdGFEaXIsXG4gICAgICAgIGRhdGFzZXQuZmlsZW5hbWUucmVwbGFjZSgvXFwuanNvbiQvLCBcIl9uZXR0b3llLmpzb25cIiksXG4gICAgICApXG4gICAgICBpZiAobG9nKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBMb2FkaW5nIGZpbGU6ICR7anNvbkZpbGVQYXRofWApXG4gICAgICB9XG4gICAgICBjb25zdCBqc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoanNvbkZpbGVQYXRoLCB7IGVuY29kaW5nOiBcInV0ZjhcIiB9KVxuICAgICAgY29uc3Qgc2NydXRpbnMgPSBTY3J1dGluc0NvbnZlcnQudG9TY3J1dGlucyhqc29uKVxuICAgICAgZm9yIChjb25zdCBzY3J1dGluIG9mIHNjcnV0aW5zLnNjcnV0aW5zKSB7XG4gICAgICAgIGlmIChzY3J1dGluQnlVaWRbc2NydXRpbi51aWRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBzY3J1dGluQnlVaWRbc2NydXRpbi51aWRdID0gc2NydXRpblxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY29uc3QgcXVlc3Rpb25CeVVpZDogeyBbdWlkOiBzdHJpbmddOiBRdWVzdGlvbiB9ID0ge31cbiAgaWYgKGVuYWJsZWREYXRhc2V0cyAmIEVuYWJsZWREYXRhc2V0cy5RdWVzdGlvbnMpIHtcbiAgICBmb3IgKGNvbnN0IGRhdGFzZXQgb2YgZGF0YXNldHMucXVlc3Rpb25zKSB7XG4gICAgICBpZiAoZGF0YXNldC5pZ25vcmVGb3JXZWIpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGlmIChcbiAgICAgICAgbGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgICBkYXRhc2V0LmxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgICAgbGVnaXNsYXR1cmUgIT09IGRhdGFzZXQubGVnaXNsYXR1cmVcbiAgICAgICkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgY29uc3QganNvbkZpbGVQYXRoOiBzdHJpbmcgPSBwYXRoLmpvaW4oXG4gICAgICAgIGRhdGFEaXIsXG4gICAgICAgIGRhdGFzZXQuZmlsZW5hbWUucmVwbGFjZSgvXFwuanNvbiQvLCBcIl9uZXR0b3llLmpzb25cIiksXG4gICAgICApXG4gICAgICBpZiAobG9nKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBMb2FkaW5nIGZpbGU6ICR7anNvbkZpbGVQYXRofWApXG4gICAgICB9XG4gICAgICBjb25zdCBqc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoanNvbkZpbGVQYXRoLCB7IGVuY29kaW5nOiBcInV0ZjhcIiB9KVxuICAgICAgY29uc3QgcXVlc3Rpb25zID0gUXVlc3Rpb25zQ29udmVydC50b1F1ZXN0aW9ucyhqc29uKVxuICAgICAgZm9yIChjb25zdCBxdWVzdGlvbiBvZiBxdWVzdGlvbnMucXVlc3Rpb25zKSB7XG4gICAgICAgIGlmIChxdWVzdGlvbkJ5VWlkW3F1ZXN0aW9uLnVpZF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHF1ZXN0aW9uQnlVaWRbcXVlc3Rpb24udWlkXSA9IHF1ZXN0aW9uXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjb25zdCBjb21wdGVSZW5kdUJ5VWlkOiB7IFt1aWQ6IHN0cmluZ106IENvbXB0ZVJlbmR1IH0gPSB7fVxuICBpZiAoZW5hYmxlZERhdGFzZXRzICYgRW5hYmxlZERhdGFzZXRzLkNvbXB0ZXNSZW5kdXNTZWFuY2VzKSB7XG4gICAgZm9yIChjb25zdCBkYXRhc2V0IG9mIGRhdGFzZXRzLmNvbXB0ZXNSZW5kdXNTZWFuY2VzKSB7XG4gICAgICBpZiAoZGF0YXNldC5pZ25vcmVGb3JXZWIpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGlmIChcbiAgICAgICAgbGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgICBkYXRhc2V0LmxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgICAgbGVnaXNsYXR1cmUgIT09IGRhdGFzZXQubGVnaXNsYXR1cmVcbiAgICAgICkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgY29uc3QganNvbkZpbGVQYXRoOiBzdHJpbmcgPSBwYXRoLmpvaW4oXG4gICAgICAgIGRhdGFEaXIsXG4gICAgICAgIGRhdGFzZXQuZmlsZW5hbWUucmVwbGFjZSgvXFwuanNvbiQvLCBcIl9uZXR0b3llLmpzb25cIiksXG4gICAgICApXG4gICAgICBpZiAobG9nKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBMb2FkaW5nIGZpbGU6ICR7anNvbkZpbGVQYXRofWApXG4gICAgICB9XG4gICAgICBjb25zdCBqc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoanNvbkZpbGVQYXRoLCB7IGVuY29kaW5nOiBcInV0ZjhcIiB9KVxuICAgICAgY29uc3QgY29tcHRlc1JlbmR1cyA9IENvbXB0ZXNSZW5kdXNDb252ZXJ0LnRvQ29tcHRlc1JlbmR1cyhqc29uKVxuICAgICAgZm9yIChjb25zdCBjb21wdGVSZW5kdSBvZiBjb21wdGVzUmVuZHVzLmNvbXB0ZXNSZW5kdXMpIHtcbiAgICAgICAgaWYgKGNvbXB0ZVJlbmR1QnlVaWRbY29tcHRlUmVuZHUudWlkXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgY29tcHRlUmVuZHVCeVVpZFtjb21wdGVSZW5kdS51aWRdID0gY29tcHRlUmVuZHVcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgYWN0ZXVyQnlVaWQsXG4gICAgYW1lbmRlbWVudEJ5VWlkLFxuICAgIGRvY3VtZW50QnlVaWQsXG4gICAgZG9zc2llclBhcmxlbWVudGFpcmVCeVNlbmF0Q2hlbWluLFxuICAgIGRvc3NpZXJQYXJsZW1lbnRhaXJlQnlUaXRyZUNoZW1pbixcbiAgICBkb3NzaWVyUGFybGVtZW50YWlyZUJ5VWlkLFxuICAgIG9yZ2FuZUJ5VWlkLFxuICAgIHBob3RvQnlVaWQsXG4gICAgcmV1bmlvbkJ5VWlkLFxuICAgIHJldW5pb25zQnlEYXksXG4gICAgcmV1bmlvbnNCeURvc3NpZXJVaWQsXG4gICAgc2NydXRpbkJ5VWlkLFxuICAgIHF1ZXN0aW9uQnlVaWQsXG4gICAgY29tcHRlUmVuZHVCeVVpZCxcbiAgfVxufVxuXG4vKipcbiAqIFJlYWQgaW5mb3Mgb2YgYSBkb2N1bWVudCBvciBhIGRpdmlzaW9uIG9mIGEgZG9jdW1lbnQgZnJvbSBmaWxlIHN5c3RlbVxuICpcbiAqIEBwYXJhbSBkYXRhRGlyXG4gKiBAcGFyYW0gdWlkIFVJRCBvZiBhIGRvY3VtZW50IG9yIGEgZGl2aXNpb25cbiAqIEBwYXJhbSBmb3JtYXRzIHJlcXVlc3RlZCBmb3JtYXRzIG9mIHRoZSBkb2N1bWVudCBpbiBkZWNyZWFzaW5nIHByZWZlcmVuY2Ugb3JkZXJcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxvYWRBc3NlbWJsZWVEb2N1bWVudEZpbGUoXG4gIGRhdGFEaXI6IHN0cmluZyxcbiAgdWlkOiBzdHJpbmcsXG4gIGZvcm1hdHM6IERvY3VtZW50VXJsRm9ybWF0W10sXG4pOlxuICB8IHtcbiAgICAgIGZvcm1hdDogRG9jdW1lbnRVcmxGb3JtYXRcbiAgICAgIHBhdGg6IHN0cmluZ1xuICAgICAgdXJsOiBzdHJpbmdcbiAgICB9XG4gIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgZG9jdW1lbnRzRGlyID0gcGF0aC5qb2luKGRhdGFEaXIsIFwiRG9jdW1lbnRzXCIpXG4gIGNvbnN0IGRvY3VtZW50RGlyID0gcGF0aEZyb21Eb2N1bWVudFVpZChkb2N1bWVudHNEaXIsIHVpZClcbiAgY29uc3QgaW5kZXhQYXRoID0gcGF0aC5qb2luKGRvY3VtZW50RGlyLCBcImluZGV4Lmpzb25cIilcbiAgaWYgKCFmcy5wYXRoRXhpc3RzU3luYyhpbmRleFBhdGgpKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZFxuICB9XG4gIGNvbnN0IGluZGV4ID0gZnMucmVhZEpzb25TeW5jKGluZGV4UGF0aCkgYXMgRG9jdW1lbnRGaWxlc0luZGV4XG4gIGZvciAoY29uc3QgZm9ybWF0IG9mIGZvcm1hdHMpIHtcbiAgICBmb3IgKGNvbnN0IHsgZmlsZW5hbWUsIHVybCB9IG9mIGluZGV4W2Zvcm1hdF0gPz8gW10pIHtcbiAgICAgIGlmIChmaWxlbmFtZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICByZXR1cm4geyBmb3JtYXQsIHBhdGg6IHBhdGguam9pbihkb2N1bWVudERpciwgZmlsZW5hbWUpLCB1cmwgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gdW5kZWZpbmVkXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsb2FkQXNzZW1ibGVlUGhvdG9zRGVwdXRlcyhcbiAgZGF0YURpcjogc3RyaW5nLFxuICBsZWdpc2xhdHVyZTogTGVnaXNsYXR1cmUsXG4gIHsgbG9nID0gZmFsc2UgfSA9IHt9LFxuKTogeyBbdWlkOiBzdHJpbmddOiBQaG90byB9IHtcbiAgY29uc3QganNvbkZpbGVQYXRoOiBzdHJpbmcgPSBwYXRoLmpvaW4oXG4gICAgZGF0YURpcixcbiAgICBgcGhvdG9zX2RlcHV0ZXNfJHtcbiAgICAgIC8vIFRPRE86IEhhbmRsZSBMZWdpc2xhdHVyZS5BbGwuXG4gICAgICBsZWdpc2xhdHVyZSA9PT0gTGVnaXNsYXR1cmUuQWxsID8gTGVnaXNsYXR1cmUuU2VpemUgOiBsZWdpc2xhdHVyZVxuICAgIH1gLFxuICAgIFwiZGVwdXRlcy5qc29uXCIsXG4gIClcbiAgaWYgKGxvZykge1xuICAgIGNvbnNvbGUubG9nKGBMb2FkaW5nIGZpbGU6ICR7anNvbkZpbGVQYXRofWApXG4gIH1cbiAgY29uc3QganNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKGpzb25GaWxlUGF0aCwgeyBlbmNvZGluZzogXCJ1dGY4XCIgfSlcbiAgcmV0dXJuIEpTT04ucGFyc2UoanNvbikgYXMgeyBbdWlkOiBzdHJpbmddOiBQaG90byB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsb2FkQXNzZW1ibGVlUGhvdG9zU2VuYXRldXJzKFxuICBkYXRhRGlyOiBzdHJpbmcsXG4gIHsgbG9nID0gZmFsc2UgfSA9IHt9LFxuKTogeyBbdWlkOiBzdHJpbmddOiBQaG90byB9IHtcbiAgY29uc3QganNvbkZpbGVQYXRoOiBzdHJpbmcgPSBwYXRoLmpvaW4oXG4gICAgZGF0YURpcixcbiAgICBcInBob3Rvc19zZW5hdGV1cnNcIixcbiAgICBcInNlbmF0ZXVycy5qc29uXCIsXG4gIClcbiAgaWYgKGxvZykge1xuICAgIGNvbnNvbGUubG9nKGBMb2FkaW5nIGZpbGU6ICR7anNvbkZpbGVQYXRofWApXG4gIH1cbiAgY29uc3QganNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKGpzb25GaWxlUGF0aCwgeyBlbmNvZGluZzogXCJ1dGY4XCIgfSlcbiAgcmV0dXJuIEpTT04ucGFyc2UoanNvbikgYXMgeyBbdWlkOiBzdHJpbmddOiBQaG90byB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXRoRnJvbURvY3VtZW50VWlkKGRvY3VtZW50c0Rpcjogc3RyaW5nLCB1aWQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IG1hdGNoID0gdWlkLm1hdGNoKGRvY3VtZW50VWlkUmVnZXgpXG4gIGFzc2VydC5ub3RTdHJpY3RFcXVhbChcbiAgICBtYXRjaCxcbiAgICBudWxsLFxuICAgIGBVbmV4cGVjdGVkIHN0cnVjdHVyZSBmb3IgZG9jdW1lbnQgVUlEOiAke3VpZH1gLFxuICApXG4gIGNvbnN0IGdyb3VwcyA9IG1hdGNoIS5ncm91cHMgYXMgeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfVxuICBjb25zdCBkb2N1bWVudFR5cGUgPSBwYXRoLmpvaW4oXG4gICAgZG9jdW1lbnRzRGlyLFxuICAgIGdyb3Vwcy5kb2N1bWVudFR5cGUgPz8gZ3JvdXBzLmRvY3VtZW50VHlwZTIsXG4gIClcbiAgY29uc3QgY2hhbWJyZURpciA9IHBhdGguam9pbihkb2N1bWVudFR5cGUsIGdyb3Vwcy5jaGFtYnJlID8/IGdyb3Vwcy5jaGFtYnJlMilcbiAgY29uc3QgcmVwdWJsaXF1ZURpciA9IHBhdGguam9pbihcbiAgICBjaGFtYnJlRGlyLFxuICAgIGdyb3Vwcy5yZXB1YmxpcXVlID8/IGdyb3Vwcy5yZXB1YmxpcXVlMixcbiAgKVxuICBjb25zdCBsZWdpc2xhdHVyZURpciA9IHBhdGguam9pbihcbiAgICByZXB1YmxpcXVlRGlyLFxuICAgIGdyb3Vwcy5sZWdpc2xhdHVyZSA/PyBncm91cHMubGVnaXNsYXR1cmUyLFxuICApXG4gIGNvbnN0IGV0YXQgPSBncm91cHMuZXRhdFxuICBpZiAoZXRhdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgZnMuZW5zdXJlRGlyU3luYyhsZWdpc2xhdHVyZURpcilcbiAgICByZXR1cm4gcGF0aC5qb2luKGxlZ2lzbGF0dXJlRGlyLCB1aWQpXG4gIH1cbiAgY29uc3QgZXRhdERpciA9IHBhdGguam9pbihsZWdpc2xhdHVyZURpciwgZXRhdClcbiAgbGV0IG51bWVybyA9IFwiMDAwMDAwXCIgKyAoZ3JvdXBzLm51bWVybyA/PyBncm91cHMubnVtZXJvMilcbiAgbnVtZXJvID0gbnVtZXJvLnN1YnN0cmluZyhudW1lcm8ubGVuZ3RoIC0gNilcbiAgY29uc3QgbnVtZXJvTWlsbGllcnNEaXIgPSBwYXRoLmpvaW4oZXRhdERpciwgbnVtZXJvLnN1YnN0cmluZygwLCAzKSlcbiAgZnMuZW5zdXJlRGlyU3luYyhudW1lcm9NaWxsaWVyc0RpcilcbiAgcmV0dXJuIHBhdGguam9pbihudW1lcm9NaWxsaWVyc0RpciwgdWlkKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcGF0aEZyb21Eb3NzaWVyUGFybGVtZW50YWlyZVVpZChcbiAgZG9zc2llcnNEaXI6IHN0cmluZyxcbiAgdWlkOiBzdHJpbmcsXG4pOiBzdHJpbmcge1xuICBjb25zdCBtYXRjaCA9IGRvc3NpZXJVaWRSZWdleC5leGVjKHVpZClcbiAgYXNzZXJ0Lm5vdFN0cmljdEVxdWFsKFxuICAgIG1hdGNoLFxuICAgIG51bGwsXG4gICAgYFVuZXhwZWN0ZWQgc3RydWN0dXJlIGZvciBkb3NzaWVyIHBhcmxlbWVudGFpcmUgVUlEOiAke3VpZH1gLFxuICApXG4gIGNvbnN0IHJlcHVibGlxdWVEaXIgPSBwYXRoLmpvaW4oZG9zc2llcnNEaXIsIG1hdGNoIVsxXSlcbiAgY29uc3QgbGVnaXNsYXR1cmVEaXIgPSBwYXRoLmpvaW4ocmVwdWJsaXF1ZURpciwgbWF0Y2ghWzJdKVxuICBsZXQgbnVtZXJvID0gXCIwMDAwMDBcIiArIG1hdGNoIVszXVxuICBudW1lcm8gPSBudW1lcm8uc3Vic3RyaW5nKG51bWVyby5sZW5ndGggLSA2KVxuICBjb25zdCBudW1lcm9NaWxsaWVyc0RpciA9IHBhdGguam9pbihsZWdpc2xhdHVyZURpciwgbnVtZXJvLnN1YnN0cmluZygwLCAzKSlcbiAgZnMuZW5zdXJlRGlyU3luYyhudW1lcm9NaWxsaWVyc0RpcilcbiAgcmV0dXJuIHBhdGguam9pbihudW1lcm9NaWxsaWVyc0RpciwgdWlkKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcGF0aEZyb21SZXVuaW9uVWlkKHJldW5pb25zRGlyOiBzdHJpbmcsIHVpZDogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgbWF0Y2ggPSByZXVuaW9uVWlkUmVnZXguZXhlYyh1aWQpXG4gIGFzc2VydC5ub3RTdHJpY3RFcXVhbChcbiAgICBtYXRjaCxcbiAgICBudWxsLFxuICAgIGBVbmV4cGVjdGVkIHN0cnVjdHVyZSBmb3IgcmV1bmlvbiBVSUQ6ICR7dWlkfWAsXG4gIClcbiAgY29uc3QgY2hhbWJyZURpciA9IHBhdGguam9pbihyZXVuaW9uc0RpciwgbWF0Y2ghWzFdKVxuICBjb25zdCByZXB1YmxpcXVlRGlyID0gcGF0aC5qb2luKGNoYW1icmVEaXIsIG1hdGNoIVsyXSlcbiAgY29uc3QgbGVnaXNsYXR1cmVEaXIgPSBwYXRoLmpvaW4ocmVwdWJsaXF1ZURpciwgbWF0Y2ghWzNdKVxuICBjb25zdCBzZXNzaW9uRGlyID0gcGF0aC5qb2luKGxlZ2lzbGF0dXJlRGlyLCBtYXRjaCFbNF0pXG4gIGNvbnN0IGlkRGlyID0gcGF0aC5qb2luKHNlc3Npb25EaXIsIG1hdGNoIVs1XSlcbiAgbGV0IG51bWVybyA9IFwiMDAwMDAwMDAwXCIgKyBtYXRjaCFbNl1cbiAgbnVtZXJvID0gbnVtZXJvLnN1YnN0cmluZyhudW1lcm8ubGVuZ3RoIC0gOSlcbiAgY29uc3QgbnVtZXJvTWlsbGlvbnNEaXIgPSBwYXRoLmpvaW4oaWREaXIsIG51bWVyby5zdWJzdHJpbmcoMCwgMykpXG4gIGNvbnN0IG51bWVyb01pbGxpZXJzRGlyID0gcGF0aC5qb2luKG51bWVyb01pbGxpb25zRGlyLCBudW1lcm8uc3Vic3RyaW5nKDMsIDMpKVxuICBmcy5lbnN1cmVEaXJTeW5jKG51bWVyb01pbGxpZXJzRGlyKVxuICByZXR1cm4gcGF0aC5qb2luKG51bWVyb01pbGxpZXJzRGlyLCB1aWQpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXRoRnJvbVNjcnV0aW5VaWQoc2NydXRpbnNEaXI6IHN0cmluZywgdWlkOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBtYXRjaCA9IHNjcnV0aW5VaWRSZWdleC5leGVjKHVpZClcbiAgYXNzZXJ0Lm5vdFN0cmljdEVxdWFsKFxuICAgIG1hdGNoLFxuICAgIG51bGwsXG4gICAgYFVuZXhwZWN0ZWQgc3RydWN0dXJlIGZvciBzY3J1dGluIFVJRDogJHt1aWR9YCxcbiAgKVxuICBjb25zdCByZXB1YmxpcXVlRGlyID0gcGF0aC5qb2luKHNjcnV0aW5zRGlyLCBtYXRjaCFbMV0pXG4gIGNvbnN0IGxlZ2lzbGF0dXJlRGlyID0gcGF0aC5qb2luKHJlcHVibGlxdWVEaXIsIG1hdGNoIVsyXSlcbiAgbGV0IG51bWVybyA9IFwiMDAwMDAwXCIgKyBtYXRjaCFbM11cbiAgbnVtZXJvID0gbnVtZXJvLnN1YnN0cmluZyhudW1lcm8ubGVuZ3RoIC0gNilcbiAgY29uc3QgbnVtZXJvTWlsbGllcnNEaXIgPSBwYXRoLmpvaW4obGVnaXNsYXR1cmVEaXIsIG51bWVyby5zdWJzdHJpbmcoMCwgMykpXG4gIGZzLmVuc3VyZURpclN5bmMobnVtZXJvTWlsbGllcnNEaXIpXG4gIHJldHVybiBwYXRoLmpvaW4obnVtZXJvTWlsbGllcnNEaXIsIHVpZClcbn1cblxuLy8gR2V0IHN0YW5kYXJkIHBhdGggZm9yIG9iamVjdCB3aXRoIHVpZCA6IHJlcHVibGlxdWUgPiBsZWdpc2xhdHVyZSA+IGdyb3VwIG9iamVjdHMgYnkgdGhvdXNhbmRzXG5leHBvcnQgZnVuY3Rpb24gcGF0aEZyb21VaWQoXG4gIGRhdGFEaXI6IHN0cmluZyxcbiAgdWlkOiBzdHJpbmcsXG4gIGRhdGFSZWdleHA6IFJlZ0V4cCxcbik6IHN0cmluZyB7XG4gIGNvbnN0IG1hdGNoID0gZGF0YVJlZ2V4cC5leGVjKHVpZClcbiAgYXNzZXJ0Lm5vdFN0cmljdEVxdWFsKFxuICAgIG1hdGNoLFxuICAgIG51bGwsXG4gICAgYFVuZXhwZWN0ZWQgc3RydWN0dXJlIGZvciBvYmplY3Qgd2l0aCBVSUQ6ICR7dWlkfWAsXG4gIClcbiAgY29uc3QgcmVwdWJsaXF1ZURpciA9IHBhdGguam9pbihkYXRhRGlyLCBtYXRjaCFbMV0pXG4gIGNvbnN0IGxlZ2lzbGF0dXJlRGlyID0gcGF0aC5qb2luKHJlcHVibGlxdWVEaXIsIG1hdGNoIVsyXSlcbiAgbGV0IG51bWVybyA9IFwiMDAwMDAwXCIgKyBtYXRjaCFbM11cbiAgbnVtZXJvID0gbnVtZXJvLnN1YnN0cmluZyhudW1lcm8ubGVuZ3RoIC0gNilcbiAgY29uc3QgbnVtZXJvTWlsbGllcnNEaXIgPSBwYXRoLmpvaW4obGVnaXNsYXR1cmVEaXIsIG51bWVyby5zdWJzdHJpbmcoMCwgMykpXG4gIGZzLmVuc3VyZURpclN5bmMobnVtZXJvTWlsbGllcnNEaXIpXG4gIHJldHVybiBwYXRoLmpvaW4obnVtZXJvTWlsbGllcnNEaXIsIHVpZClcbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUE7O0FBRUEsT0FBT0EsTUFBTSxNQUFNLFFBQVE7QUFDM0IsT0FBT0MsRUFBRSxNQUFNLFVBQVU7QUFDekIsT0FBT0MsSUFBSSxNQUFNLE1BQU07QUFBQSxTQUVkQyxlQUFlO0FBQUEsU0FDZkMsUUFBUSxFQUFFRCxlQUFlO0FBQUEsU0FFekJFLE9BQU87QUFBQSxTQUNQQSxPQUFPO0FBQUEsU0FHZEMsT0FBTyxJQUFJQyx1QkFBdUI7QUFBQSxTQUkzQkQsT0FBTyxJQUFJRSxjQUFjO0FBQUEsU0FDYkYsT0FBTyxJQUFJRyxrQkFBa0I7QUFBQSxTQUVoREgsT0FBTyxJQUFJSSwwQkFBMEI7QUFBQSxTQUk5QkMsV0FBVztBQUFBLFNBQ1hMLE9BQU8sSUFBSU0sZUFBZTtBQUFBLFNBQzFCTixPQUFPLElBQUlPLGdCQUFnQjtBQUFBLFNBQzNCUCxPQUFPLElBQUlRLG9CQUFvQjtBQXdCeEMsTUFBTUMsZ0JBQWdCLEdBQ3BCLDhTQUE4UztBQUNoVCxNQUFNQyxlQUFlLEdBQUcsd0JBQXdCO0FBQ2hELE1BQU1DLGVBQWUsR0FDbkIsMkRBQTJEO0FBQzdELE1BQU1DLGVBQWUsR0FBRywwQkFBMEI7QUFFbEQsT0FBTyxVQUFVQyx3QkFBd0JBLENBQ3ZDQyxPQUFlLEVBQ2ZDLFdBQXdCLEVBQ3hCO0VBQUVDLFlBQVksR0FBRyxLQUFLO0VBQUVDLEdBQUcsR0FBRztBQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsRUFLMUM7RUFDQSxNQUFNQyxVQUFVLEdBQUcsSUFBSUMsR0FBRyxDQUFTLENBQUM7RUFDcEMsS0FBSyxNQUFNQyxPQUFPLElBQUl0QixRQUFRLENBQUN1QixnQkFBZ0IsRUFBRTtJQUMvQyxJQUFJRCxPQUFPLENBQUNFLFlBQVksRUFBRTtNQUN4QjtJQUNGO0lBQ0EsSUFDRVAsV0FBVyxL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
|