@tricoteuses/assemblee 1.1.5 → 1.1.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/api.js +1 -1
- package/lib/bugs/acteur-00010/plugin.test.js +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.js +2 -2
- package/lib/bugs/agenda-00002.mjs +2 -2
- package/lib/bugs/agenda-00008/plugin.test.js +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.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.js +1 -1
- package/lib/cleaners/actes_legislatifs.mjs +1 -1
- 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/documents.js +1 -1
- package/lib/cleaners/documents.mjs +1 -1
- package/lib/cleaners/dossiers_legislatifs.js +1 -1
- package/lib/cleaners/dossiers_legislatifs.mjs +1 -1
- package/lib/cleaners/index.js +1 -1
- package/lib/cleaners/organes.js +1 -1
- package/lib/cleaners/organes.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 +16 -7
- package/lib/dates.mjs +15 -6
- package/lib/dossiers_legislatifs.js +1 -1
- package/lib/dossiers_legislatifs.mjs +1 -1
- package/lib/file_systems.js +2 -2
- package/lib/file_systems.mjs +2 -2
- package/lib/git.d.ts +2 -1
- package/lib/git.js +77 -44
- package/lib/git.mjs +48 -25
- package/lib/index.js +1 -1
- package/lib/inserters.js +1 -1
- package/lib/inserters.mjs +1 -1
- package/lib/loaders.d.ts +52 -2
- package/lib/loaders.js +961 -187
- package/lib/loaders.mjs +285 -3
- 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/recherche_amendements.js +39 -32
- package/lib/parsers/recherche_amendements.mjs +5 -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/dossiers_legislatifs.js +1 -1
- package/lib/raw_types/dossiers_legislatifs.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 +3 -3
- package/lib/scripts/bugs_helper.mjs +3 -3
- package/lib/scripts/clean_data.js +1 -1
- package/lib/scripts/clean_data.mjs +1 -1
- package/lib/scripts/clean_reorganized_data.js +63 -61
- package/lib/scripts/clean_reorganized_data.mjs +55 -48
- 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/merge_scrutins.js +1 -1
- package/lib/scripts/merge_scrutins.mjs +1 -1
- package/lib/scripts/parse_textes_lois.js +5 -48
- package/lib/scripts/parse_textes_lois.mjs +5 -49
- 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 +231 -239
- package/lib/scripts/reorganize_data.mjs +50 -59
- package/lib/scripts/retrieve_deputes_photos.js +86 -107
- package/lib/scripts/retrieve_deputes_photos.mjs +21 -42
- package/lib/scripts/retrieve_documents.js +3 -3
- package/lib/scripts/retrieve_documents.mjs +3 -3
- package/lib/scripts/retrieve_open_data.js +29 -22
- package/lib/scripts/retrieve_open_data.mjs +9 -4
- package/lib/scripts/retrieve_pending_amendments.js +73 -81
- package/lib/scripts/retrieve_pending_amendments.mjs +19 -26
- package/lib/scripts/retrieve_senateurs_photos.js +65 -87
- package/lib/scripts/retrieve_senateurs_photos.mjs +21 -42
- package/lib/scripts/retrieve_textes_lois.js +32 -71
- package/lib/scripts/retrieve_textes_lois.mjs +6 -44
- package/lib/scripts/test_load.js +1 -1
- package/lib/scripts/test_load_big_files.js +1 -1
- package/lib/scripts/validate_json.js +3 -3
- package/lib/scripts/validate_json.mjs +3 -3
- package/lib/shared_types/codes_actes.js +1 -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/dossiers_legislatifs.js +1 -1
- package/lib/types/dossiers_legislatifs.mjs +1 -1
- package/lib/types/legislatures.js +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 +6 -5
package/lib/loaders.mjs
CHANGED
|
@@ -17,8 +17,263 @@ const documentUidRegex = /^(ACIN|ALCN|AVCE|AVIS|DECL|ETDI|LETT|MESS|PION|PNRE|PR
|
|
|
17
17
|
const dossierUidRegex = /^DL(R\d+)(L\d+)N(\d+)$/;
|
|
18
18
|
const reunionUidRegex = /^RU(AN|CG|SN)(R\d+)(L\d+)([AS]\d{4})(IDC|IDFL?|IDS)(\d+)$/;
|
|
19
19
|
const scrutinUidRegex = /^VTAN(R\d+)(L\d+)V(\d+)$/;
|
|
20
|
+
export function* iterLoadAssembleeActeurs(dataDir, legislature, {
|
|
21
|
+
log = false
|
|
22
|
+
} = {}) {
|
|
23
|
+
const acteursUid = new Set();
|
|
24
|
+
for (const dataset of datasets.acteursEtOrganes) {
|
|
25
|
+
if (dataset.ignoreForWeb) {
|
|
26
|
+
continue;
|
|
27
|
+
}
|
|
28
|
+
if (legislature !== Legislature.All && dataset.legislature !== Legislature.All && legislature !== dataset.legislature) {
|
|
29
|
+
continue;
|
|
30
|
+
}
|
|
31
|
+
const datasetDir = path.join(dataDir, dataset.filename.replace(/\.json$/, "_nettoye"));
|
|
32
|
+
for (const acteurSplitPath of walkDir(datasetDir, ["acteurs"])) {
|
|
33
|
+
const acteurFilename = acteurSplitPath[acteurSplitPath.length - 1];
|
|
34
|
+
if (!acteurFilename.endsWith(".json")) {
|
|
35
|
+
continue;
|
|
36
|
+
}
|
|
37
|
+
const acteurFilePath = path.join(datasetDir, ...acteurSplitPath);
|
|
38
|
+
if (log) {
|
|
39
|
+
console.log(`Loading file: ${acteurFilePath}…`);
|
|
40
|
+
}
|
|
41
|
+
const acteurJson = fs.readFileSync(acteurFilePath, {
|
|
42
|
+
encoding: "utf8"
|
|
43
|
+
});
|
|
44
|
+
const acteur = ActeursEtOrganesConvert.toActeur(acteurJson);
|
|
45
|
+
// Keep the first existing "acteur", because the first wrapper is the most complete.
|
|
46
|
+
if (acteursUid.has(acteur.uid)) {
|
|
47
|
+
continue;
|
|
48
|
+
}
|
|
49
|
+
acteursUid.add(acteur.uid);
|
|
50
|
+
yield {
|
|
51
|
+
acteur,
|
|
52
|
+
datasetLegislature: dataset.legislature
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
export function* iterLoadAssembleeAmendements(dataDir, legislature, {
|
|
58
|
+
log = false
|
|
59
|
+
} = {}) {
|
|
60
|
+
const amendementsUid = new Set();
|
|
61
|
+
for (const dataset of datasets.amendements) {
|
|
62
|
+
if (dataset.ignoreForWeb) {
|
|
63
|
+
continue;
|
|
64
|
+
}
|
|
65
|
+
if (legislature !== Legislature.All && dataset.legislature !== Legislature.All && legislature !== dataset.legislature) {
|
|
66
|
+
continue;
|
|
67
|
+
}
|
|
68
|
+
const datasetDir = path.join(dataDir, dataset.filename.replace(/\.json$/, "_nettoye"));
|
|
69
|
+
for (const amendementSplitPath of walkDir(datasetDir)) {
|
|
70
|
+
const amendementFilename = amendementSplitPath[amendementSplitPath.length - 1];
|
|
71
|
+
if (!amendementFilename.endsWith(".json")) {
|
|
72
|
+
continue;
|
|
73
|
+
}
|
|
74
|
+
const amendementFilePath = path.join(datasetDir, ...amendementSplitPath);
|
|
75
|
+
if (log) {
|
|
76
|
+
console.log(`Loading file: ${amendementFilePath}…`);
|
|
77
|
+
}
|
|
78
|
+
const amendementJson = fs.readFileSync(amendementFilePath, {
|
|
79
|
+
encoding: "utf8"
|
|
80
|
+
});
|
|
81
|
+
const amendement = AmendementsConvert.toAmendement(amendementJson);
|
|
82
|
+
if (amendementsUid.has(amendement.uid)) {
|
|
83
|
+
continue;
|
|
84
|
+
}
|
|
85
|
+
amendementsUid.add(amendement.uid);
|
|
86
|
+
yield {
|
|
87
|
+
amendement,
|
|
88
|
+
datasetLegislature: dataset.legislature
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
export function* iterLoadAssembleeDocuments(dataDir, legislature, {
|
|
94
|
+
log = false
|
|
95
|
+
} = {}) {
|
|
96
|
+
const documentsUid = new Set();
|
|
97
|
+
for (const dataset of datasets.dossiersLegislatifs) {
|
|
98
|
+
if (dataset.ignoreForWeb) {
|
|
99
|
+
continue;
|
|
100
|
+
}
|
|
101
|
+
if (legislature !== Legislature.All && dataset.legislature !== Legislature.All && legislature !== dataset.legislature) {
|
|
102
|
+
continue;
|
|
103
|
+
}
|
|
104
|
+
const datasetDir = path.join(dataDir, dataset.filename.replace(/\.json$/, "_nettoye"));
|
|
105
|
+
for (const documentSplitPath of walkDir(datasetDir, ["documents"])) {
|
|
106
|
+
const documentFilename = documentSplitPath[documentSplitPath.length - 1];
|
|
107
|
+
if (!documentFilename.endsWith(".json")) {
|
|
108
|
+
continue;
|
|
109
|
+
}
|
|
110
|
+
const documentFilePath = path.join(datasetDir, ...documentSplitPath);
|
|
111
|
+
if (log) {
|
|
112
|
+
console.log(`Loading file: ${documentFilePath}…`);
|
|
113
|
+
}
|
|
114
|
+
const documentJson = fs.readFileSync(documentFilePath, {
|
|
115
|
+
encoding: "utf8"
|
|
116
|
+
});
|
|
117
|
+
const document = DossiersLegislatifsConvert.toDocument(documentJson);
|
|
118
|
+
if (documentsUid.has(document.uid)) {
|
|
119
|
+
continue;
|
|
120
|
+
}
|
|
121
|
+
documentsUid.add(document.uid);
|
|
122
|
+
yield {
|
|
123
|
+
document,
|
|
124
|
+
datasetLegislature: dataset.legislature
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
export function* iterLoadAssembleeDossiersParlementaires(dataDir, legislature, {
|
|
130
|
+
log = false
|
|
131
|
+
} = {}) {
|
|
132
|
+
const dossiersParlementairesUid = new Set();
|
|
133
|
+
for (const dataset of datasets.dossiersLegislatifs) {
|
|
134
|
+
if (dataset.ignoreForWeb) {
|
|
135
|
+
continue;
|
|
136
|
+
}
|
|
137
|
+
if (legislature !== Legislature.All && dataset.legislature !== Legislature.All && legislature !== dataset.legislature) {
|
|
138
|
+
continue;
|
|
139
|
+
}
|
|
140
|
+
const datasetDir = path.join(dataDir, dataset.filename.replace(/\.json$/, "_nettoye"));
|
|
141
|
+
for (const dossierParlementaireSplitPath of walkDir(datasetDir, ["dossiers"])) {
|
|
142
|
+
const dossierParlementaireFilename = dossierParlementaireSplitPath[dossierParlementaireSplitPath.length - 1];
|
|
143
|
+
if (!dossierParlementaireFilename.endsWith(".json")) {
|
|
144
|
+
continue;
|
|
145
|
+
}
|
|
146
|
+
const dossierParlementaireFilePath = path.join(datasetDir, ...dossierParlementaireSplitPath);
|
|
147
|
+
if (log) {
|
|
148
|
+
console.log(`Loading file: ${dossierParlementaireFilePath}…`);
|
|
149
|
+
}
|
|
150
|
+
const dossierParlementaireJson = fs.readFileSync(dossierParlementaireFilePath, {
|
|
151
|
+
encoding: "utf8"
|
|
152
|
+
});
|
|
153
|
+
const dossierParlementaire = DossiersLegislatifsConvert.toDossierParlementaire(dossierParlementaireJson);
|
|
154
|
+
if (dossiersParlementairesUid.has(dossierParlementaire.uid)) {
|
|
155
|
+
continue;
|
|
156
|
+
}
|
|
157
|
+
dossiersParlementairesUid.add(dossierParlementaire.uid);
|
|
158
|
+
yield {
|
|
159
|
+
dossierParlementaire,
|
|
160
|
+
datasetLegislature: dataset.legislature
|
|
161
|
+
};
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
export function* iterLoadAssembleeOrganes(dataDir, legislature, {
|
|
166
|
+
log = false
|
|
167
|
+
} = {}) {
|
|
168
|
+
const organesUid = new Set();
|
|
169
|
+
for (const dataset of datasets.acteursEtOrganes) {
|
|
170
|
+
if (dataset.ignoreForWeb) {
|
|
171
|
+
continue;
|
|
172
|
+
}
|
|
173
|
+
if (legislature !== Legislature.All && dataset.legislature !== Legislature.All && legislature !== dataset.legislature) {
|
|
174
|
+
continue;
|
|
175
|
+
}
|
|
176
|
+
const datasetDir = path.join(dataDir, dataset.filename.replace(/\.json$/, "_nettoye"));
|
|
177
|
+
for (const organeSplitPath of walkDir(datasetDir, ["organes"])) {
|
|
178
|
+
const organeFilename = organeSplitPath[organeSplitPath.length - 1];
|
|
179
|
+
if (!organeFilename.endsWith(".json")) {
|
|
180
|
+
continue;
|
|
181
|
+
}
|
|
182
|
+
const organeFilePath = path.join(datasetDir, ...organeSplitPath);
|
|
183
|
+
if (log) {
|
|
184
|
+
console.log(`Loading file: ${organeFilePath}…`);
|
|
185
|
+
}
|
|
186
|
+
const organeJson = fs.readFileSync(organeFilePath, {
|
|
187
|
+
encoding: "utf8"
|
|
188
|
+
});
|
|
189
|
+
const organe = ActeursEtOrganesConvert.toOrgane(organeJson);
|
|
190
|
+
// Keep the first existing "organe", because the first wrapper is the most complete.
|
|
191
|
+
if (organesUid.has(organe.uid)) {
|
|
192
|
+
continue;
|
|
193
|
+
}
|
|
194
|
+
organesUid.add(organe.uid);
|
|
195
|
+
yield {
|
|
196
|
+
organe,
|
|
197
|
+
datasetLegislature: dataset.legislature
|
|
198
|
+
};
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
export function* iterLoadAssembleeReunions(dataDir, legislature, {
|
|
203
|
+
log = false
|
|
204
|
+
} = {}) {
|
|
205
|
+
const reunionsUid = new Set();
|
|
206
|
+
for (const dataset of datasets.agendas) {
|
|
207
|
+
if (dataset.ignoreForWeb) {
|
|
208
|
+
continue;
|
|
209
|
+
}
|
|
210
|
+
if (legislature !== Legislature.All && dataset.legislature !== Legislature.All && legislature !== dataset.legislature) {
|
|
211
|
+
continue;
|
|
212
|
+
}
|
|
213
|
+
const datasetDir = path.join(dataDir, dataset.filename.replace(/\.json$/, "_nettoye"));
|
|
214
|
+
for (const reunionSplitPath of walkDir(datasetDir)) {
|
|
215
|
+
const reunionFilename = reunionSplitPath[reunionSplitPath.length - 1];
|
|
216
|
+
if (!reunionFilename.endsWith(".json")) {
|
|
217
|
+
continue;
|
|
218
|
+
}
|
|
219
|
+
const reunionFilePath = path.join(datasetDir, ...reunionSplitPath);
|
|
220
|
+
if (log) {
|
|
221
|
+
console.log(`Loading file: ${reunionFilePath}…`);
|
|
222
|
+
}
|
|
223
|
+
const reunionJson = fs.readFileSync(reunionFilePath, {
|
|
224
|
+
encoding: "utf8"
|
|
225
|
+
});
|
|
226
|
+
const reunion = AgendasConvert.toReunion(reunionJson);
|
|
227
|
+
if (reunionsUid.has(reunion.uid)) {
|
|
228
|
+
continue;
|
|
229
|
+
}
|
|
230
|
+
reunionsUid.add(reunion.uid);
|
|
231
|
+
yield {
|
|
232
|
+
reunion,
|
|
233
|
+
datasetLegislature: dataset.legislature
|
|
234
|
+
};
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
export function* iterLoadAssembleeScrutins(dataDir, legislature, {
|
|
239
|
+
log = false
|
|
240
|
+
} = {}) {
|
|
241
|
+
const scrutinsUid = new Set();
|
|
242
|
+
for (const dataset of datasets.scrutins) {
|
|
243
|
+
if (dataset.ignoreForWeb) {
|
|
244
|
+
continue;
|
|
245
|
+
}
|
|
246
|
+
if (legislature !== Legislature.All && dataset.legislature !== Legislature.All && legislature !== dataset.legislature) {
|
|
247
|
+
continue;
|
|
248
|
+
}
|
|
249
|
+
const datasetDir = path.join(dataDir, dataset.filename.replace(/\.json$/, "_nettoye"));
|
|
250
|
+
for (const scrutinSplitPath of walkDir(datasetDir)) {
|
|
251
|
+
const scrutinFilename = scrutinSplitPath[scrutinSplitPath.length - 1];
|
|
252
|
+
if (!scrutinFilename.endsWith(".json")) {
|
|
253
|
+
continue;
|
|
254
|
+
}
|
|
255
|
+
const scrutinFilePath = path.join(datasetDir, ...scrutinSplitPath);
|
|
256
|
+
if (log) {
|
|
257
|
+
console.log(`Loading file: ${scrutinFilePath}…`);
|
|
258
|
+
}
|
|
259
|
+
const scrutinJson = fs.readFileSync(scrutinFilePath, {
|
|
260
|
+
encoding: "utf8"
|
|
261
|
+
});
|
|
262
|
+
const scrutin = ScrutinsConvert.toScrutin(scrutinJson);
|
|
263
|
+
if (scrutinsUid.has(scrutin.uid)) {
|
|
264
|
+
continue;
|
|
265
|
+
}
|
|
266
|
+
scrutinsUid.add(scrutin.uid);
|
|
267
|
+
yield {
|
|
268
|
+
scrutin,
|
|
269
|
+
datasetLegislature: dataset.legislature
|
|
270
|
+
};
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
}
|
|
20
274
|
|
|
21
|
-
|
|
275
|
+
/// Load data from split files.
|
|
276
|
+
/// Deprecated: Use iterLoad... iterators instead.
|
|
22
277
|
export function loadAssembleeData(dataDir, enabledDatasets, legislature, {
|
|
23
278
|
log = false
|
|
24
279
|
} = {}) {
|
|
@@ -283,7 +538,8 @@ export function loadAssembleeData(dataDir, enabledDatasets, legislature, {
|
|
|
283
538
|
};
|
|
284
539
|
}
|
|
285
540
|
|
|
286
|
-
|
|
541
|
+
/// Load data from big monolytic files.
|
|
542
|
+
/// Deprecated: Assemblée nationale open data no more uses monolytic files.
|
|
287
543
|
export function loadAssembleeDataFromBigFiles(dataDir, enabledDatasets, legislature, {
|
|
288
544
|
log = false
|
|
289
545
|
} = {}) {
|
|
@@ -501,6 +757,32 @@ export function loadAssembleeDataFromBigFiles(dataDir, enabledDatasets, legislat
|
|
|
501
757
|
scrutinByUid
|
|
502
758
|
};
|
|
503
759
|
}
|
|
760
|
+
export function loadAssembleePhotosDeputes(dataDir, legislature, {
|
|
761
|
+
log = false
|
|
762
|
+
} = {}) {
|
|
763
|
+
const jsonFilePath = path.join(dataDir, `photos_deputes_${
|
|
764
|
+
// TODO: Handle Legislature.All.
|
|
765
|
+
legislature === Legislature.All ? Legislature.Seize : legislature}`, "deputes.json");
|
|
766
|
+
if (log) {
|
|
767
|
+
console.log(`Loading file: ${jsonFilePath}`);
|
|
768
|
+
}
|
|
769
|
+
const json = fs.readFileSync(jsonFilePath, {
|
|
770
|
+
encoding: "utf8"
|
|
771
|
+
});
|
|
772
|
+
return JSON.parse(json);
|
|
773
|
+
}
|
|
774
|
+
export function loadAssembleePhotosSenateurs(dataDir, {
|
|
775
|
+
log = false
|
|
776
|
+
} = {}) {
|
|
777
|
+
const jsonFilePath = path.join(dataDir, "photos_senateurs", "senateurs.json");
|
|
778
|
+
if (log) {
|
|
779
|
+
console.log(`Loading file: ${jsonFilePath}`);
|
|
780
|
+
}
|
|
781
|
+
const json = fs.readFileSync(jsonFilePath, {
|
|
782
|
+
encoding: "utf8"
|
|
783
|
+
});
|
|
784
|
+
return JSON.parse(json);
|
|
785
|
+
}
|
|
504
786
|
export function pathFromDocumentUid(documentsDir, uid) {
|
|
505
787
|
const match = documentUidRegex.exec(uid);
|
|
506
788
|
assert.notStrictEqual(match, null, `Unexpected structure for document UID: ${uid}`);
|
|
@@ -552,4 +834,4 @@ export function pathFromScrutinUid(scrutinsDir, uid) {
|
|
|
552
834
|
fs.ensureDirSync(numeroMilliersDir);
|
|
553
835
|
return path.join(numeroMilliersDir, uid);
|
|
554
836
|
}
|
|
555
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJhc3NlcnQiLCJmcyIsInBhdGgiLCJFbmFibGVkRGF0YXNldHMiLCJkYXRhc2V0cyIsIndhbGtEaXIiLCJDb252ZXJ0IiwiQWN0ZXVyc0V0T3JnYW5lc0NvbnZlcnQiLCJBZ2VuZGFzQ29udmVydCIsIkFtZW5kZW1lbnRzQ29udmVydCIsIkRvc3NpZXJzTGVnaXNsYXRpZnNDb252ZXJ0IiwiTGVnaXNsYXR1cmUiLCJTY3J1dGluc0NvbnZlcnQiLCJkb2N1bWVudFVpZFJlZ2V4IiwiZG9zc2llclVpZFJlZ2V4IiwicmV1bmlvblVpZFJlZ2V4Iiwic2NydXRpblVpZFJlZ2V4IiwibG9hZEFzc2VtYmxlZURhdGEiLCJkYXRhRGlyIiwiZW5hYmxlZERhdGFzZXRzIiwibGVnaXNsYXR1cmUiLCJsb2ciLCJhY3RldXJCeVVpZCIsIm9yZ2FuZUJ5VWlkIiwiQWN0ZXVyc0V0T3JnYW5lcyIsImRhdGFzZXQiLCJhY3RldXJzRXRPcmdhbmVzIiwiaWdub3JlRm9yV2ViIiwiQWxsIiwiZGF0YXNldERpciIsImpvaW4iLCJmaWxlbmFtZSIsInJlcGxhY2UiLCJhY3RldXJTcGxpdFBhdGgiLCJhY3RldXJGaWxlbmFtZSIsImxlbmd0aCIsImVuZHNXaXRoIiwiYWN0ZXVyRmlsZVBhdGgiLCJjb25zb2xlIiwiYWN0ZXVySnNvbiIsInJlYWRGaWxlU3luYyIsImVuY29kaW5nIiwiYWN0ZXVyIiwidG9BY3RldXIiLCJ1aWQiLCJ1bmRlZmluZWQiLCJvcmdhbmVTcGxpdFBhdGgiLCJvcmdhbmVGaWxlbmFtZSIsIm9yZ2FuZUZpbGVQYXRoIiwib3JnYW5lSnNvbiIsIm9yZ2FuZSIsInRvT3JnYW5lIiwicmV1bmlvbkJ5VWlkIiwicmV1bmlvbnNCeURheSIsInJldW5pb25zQnlEb3NzaWVyVWlkIiwiQWdlbmRhcyIsImFnZW5kYXMiLCJyZXVuaW9uU3BsaXRQYXRoIiwicmV1bmlvbkZpbGVuYW1lIiwicmV1bmlvbkZpbGVQYXRoIiwicmV1bmlvbkpzb24iLCJyZXVuaW9uIiwidG9SZXVuaW9uIiwiZGF5IiwidGltZXN0YW1wRGVidXQiLCJ0b0lTT1N0cmluZyIsInNwbGl0IiwicmV1bmlvbnNBdERheSIsInB1c2giLCJvZGoiLCJwb2ludE9kaiIsInBvaW50c09kaiIsImRvc3NpZXJMZWdpc2xhdGlmUmVmIiwiZG9zc2llcnNMZWdpc2xhdGlmc1JlZnMiLCJyZXVuaW9uc0F0RG9zc2llclVpZCIsImFtZW5kZW1lbnRCeVVpZCIsIkFtZW5kZW1lbnRzIiwiYW1lbmRlbWVudHMiLCJhbWVuZGVtZW50U3BsaXRQYXRoIiwiYW1lbmRlbWVudEZpbGVuYW1lIiwiYW1lbmRlbWVudEZpbGVQYXRoIiwiYW1lbmRlbWVudEpzb24iLCJhbWVuZGVtZW50IiwidG9BbWVuZGVtZW50IiwiZG9jdW1lbnRCeVVpZCIsImRvc3NpZXJQYXJsZW1lbnRhaXJlQnlTZW5hdENoZW1pbiIsImRvc3NpZXJQYXJsZW1lbnRhaXJlQnlUaXRyZUNoZW1pbiIsImRvc3NpZXJQYXJsZW1lbnRhaXJlQnlVaWQiLCJEb3NzaWVyc0xlZ2lzbGF0aWZzIiwiZG9zc2llcnNMZWdpc2xhdGlmcyIsImRvY3VtZW50U3BsaXRQYXRoIiwiZG9jdW1lbnRGaWxlbmFtZSIsImRvY3VtZW50RmlsZVBhdGgiLCJkb2N1bWVudEpzb24iLCJkb2N1bWVudCIsInRvRG9jdW1lbnQiLCJkb3NzaWVyU3BsaXRQYXRoIiwiZG9zc2llckZpbGVuYW1lIiwiZG9zc2llckZpbGVQYXRoIiwiZG9zc2llckpzb24iLCJkb3NzaWVyIiwidG9Eb3NzaWVyUGFybGVtZW50YWlyZSIsInRpdHJlRG9zc2llciIsInNlbmF0Q2hlbWluIiwidGl0cmVDaGVtaW4iLCJwaG90b0J5VWlkIiwiUGhvdG9zIiwianNvbkZpbGVQYXRoIiwiU2VpemUiLCJleGlzdHNTeW5jIiwianNvbiIsIk9iamVjdCIsImFzc2lnbiIsIkpTT04iLCJwYXJzZSIsInNjcnV0aW5CeVVpZCIsIlNjcnV0aW5zIiwic2NydXRpbnMiLCJzY3J1dGluU3BsaXRQYXRoIiwic2NydXRpbkZpbGVuYW1lIiwic2NydXRpbkZpbGVQYXRoIiwic2NydXRpbkpzb24iLCJzY3J1dGluIiwidG9TY3J1dGluIiwibG9hZEFzc2VtYmxlZURhdGFGcm9tQmlnRmlsZXMiLCJ0b0FjdGV1cnNFdE9yZ2FuZXMiLCJhY3RldXJzIiwib3JnYW5lcyIsInRvQWdlbmRhcyIsInJldW5pb25zIiwidG9BbWVuZGVtZW50cyIsInRleHRlTGVnaXNsYXRpZiIsInRleHRlc0xlZ2lzbGF0aWZzIiwidG9Eb3NzaWVyc0xlZ2lzbGF0aWZzIiwiZG9zc2llcnNQYXJsZW1lbnRhaXJlcyIsInRvU2NydXRpbnMiLCJwYXRoRnJvbURvY3VtZW50VWlkIiwiZG9jdW1lbnRzRGlyIiwibWF0Y2giLCJleGVjIiwibm90U3RyaWN0RXF1YWwiLCJkb2N1bWVudFR5cGUiLCJjaGFtYnJlRGlyIiwicmVwdWJsaXF1ZURpciIsImxlZ2lzbGF0dXJlRGlyIiwiZXRhdERpciIsIm51bWVybyIsInN1YnN0ciIsIm51bWVyb01pbGxpZXJzRGlyIiwiZW5zdXJlRGlyU3luYyIsInBhdGhGcm9tRG9zc2llclBhcmxlbWVudGFpcmVVaWQiLCJkb3NzaWVyc0RpciIsInBhdGhGcm9tUmV1bmlvblVpZCIsInJldW5pb25zRGlyIiwic2Vzc2lvbkRpciIsImlkRGlyIiwibnVtZXJvTWlsbGlvbnNEaXIiLCJwYXRoRnJvbVNjcnV0aW5VaWQiLCJzY3J1dGluc0RpciJdLCJzb3VyY2VzIjpbIi4uL3NyYy9sb2FkZXJzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vLyBMb2FkIGRhdGEgZnJvbSBmaWxlc1xuXG5pbXBvcnQgYXNzZXJ0IGZyb20gXCJhc3NlcnRcIlxuaW1wb3J0IGZzIGZyb20gXCJmcy1leHRyYVwiXG5pbXBvcnQgcGF0aCBmcm9tIFwicGF0aFwiXG5cbmV4cG9ydCB7IEVuYWJsZWREYXRhc2V0cyB9IGZyb20gXCIuL2RhdGFzZXRzXCJcbmltcG9ydCB7IGRhdGFzZXRzLCBFbmFibGVkRGF0YXNldHMgfSBmcm9tIFwiLi9kYXRhc2V0c1wiXG5leHBvcnQgeyB3YWxrRGlyIH0gZnJvbSBcIi4vZmlsZV9zeXN0ZW1zXCJcbmltcG9ydCB7IHdhbGtEaXIgfSBmcm9tIFwiLi9maWxlX3N5c3RlbXNcIlxuaW1wb3J0IHtcbiAgQWN0ZXVyLFxuICBDb252ZXJ0IGFzIEFjdGV1cnNFdE9yZ2FuZXNDb252ZXJ0LFxuICBPcmdhbmUsXG4gIFBob3RvLFxufSBmcm9tIFwiLi90eXBlcy9hY3RldXJzX2V0X29yZ2FuZXNcIlxuaW1wb3J0IHsgQ29udmVydCBhcyBBZ2VuZGFzQ29udmVydCwgUmV1bmlvbiB9IGZyb20gXCIuL3R5cGVzL2FnZW5kYXNcIlxuaW1wb3J0IHsgQW1lbmRlbWVudCwgQ29udmVydCBhcyBBbWVuZGVtZW50c0NvbnZlcnQgfSBmcm9tIFwiLi90eXBlcy9hbWVuZGVtZW50c1wiXG5pbXBvcnQge1xuICBDb252ZXJ0IGFzIERvc3NpZXJzTGVnaXNsYXRpZnNDb252ZXJ0LFxuICBEb2N1bWVudCxcbiAgRG9zc2llclBhcmxlbWVudGFpcmUsXG59IGZyb20gXCIuL3R5cGVzL2Rvc3NpZXJzX2xlZ2lzbGF0aWZzXCJcbmltcG9ydCB7IExlZ2lzbGF0dXJlIH0gZnJvbSBcIi4vdHlwZXMvbGVnaXNsYXR1cmVzXCJcbmltcG9ydCB7IENvbnZlcnQgYXMgU2NydXRpbnNDb252ZXJ0LCBTY3J1dGluIH0gZnJvbSBcIi4vdHlwZXMvc2NydXRpbnNcIlxuXG5leHBvcnQgaW50ZXJmYWNlIERhdGEge1xuICByZWFkb25seSBhY3RldXJCeVVpZDogeyBbdWlkOiBzdHJpbmddOiBBY3RldXIgfVxuICByZWFkb25seSBhbWVuZGVtZW50QnlVaWQ6IHsgW3VpZDogc3RyaW5nXTogQW1lbmRlbWVudCB9XG4gIHJlYWRvbmx5IGRvY3VtZW50QnlVaWQ6IHsgW3VpZDogc3RyaW5nXTogRG9jdW1lbnQgfVxuICByZWFkb25seSBkb3NzaWVyUGFybGVtZW50YWlyZUJ5U2VuYXRDaGVtaW46IHtcbiAgICBbdWlkOiBzdHJpbmddOiBEb3NzaWVyUGFybGVtZW50YWlyZVxuICB9XG4gIHJlYWRvbmx5IGRvc3NpZXJQYXJsZW1lbnRhaXJlQnlUaXRyZUNoZW1pbjoge1xuICAgIFt1aWQ6IHN0cmluZ106IERvc3NpZXJQYXJsZW1lbnRhaXJlXG4gIH1cbiAgcmVhZG9ubHkgZG9zc2llclBhcmxlbWVudGFpcmVCeVVpZDogeyBbdWlkOiBzdHJpbmddOiBEb3NzaWVyUGFybGVtZW50YWlyZSB9XG4gIHJlYWRvbmx5IG9yZ2FuZUJ5VWlkOiB7IFt1aWQ6IHN0cmluZ106IE9yZ2FuZSB9XG4gIHJlYWRvbmx5IHBob3RvQnlVaWQ6IHsgW3VpZDogc3RyaW5nXTogUGhvdG8gfVxuICByZWFkb25seSByZXVuaW9uQnlVaWQ6IHsgW3VpZDogc3RyaW5nXTogUmV1bmlvbiB9XG4gIHJlYWRvbmx5IHJldW5pb25zQnlEYXk6IHsgW2RheTogc3RyaW5nXTogUmV1bmlvbltdIH1cbiAgcmVhZG9ubHkgcmV1bmlvbnNCeURvc3NpZXJVaWQ6IHsgW2Rvc3NpZXJVaWQ6IHN0cmluZ106IFJldW5pb25bXSB9XG4gIHJlYWRvbmx5IHNjcnV0aW5CeVVpZDogeyBbdWlkOiBzdHJpbmddOiBTY3J1dGluIH1cbn1cblxuY29uc3QgZG9jdW1lbnRVaWRSZWdleCA9XG4gIC9eKEFDSU58QUxDTnxBVkNFfEFWSVN8REVDTHxFVERJfExFVFR8TUVTU3xQSU9OfFBOUkV8UFJKTHxSQVBQfFJJTkZ8UklPTikoQU58U04pKFJcXGQrKVtMU10oXFxkKykoQnxCVEF8QlRDfFRBUCkoXFxkKykoLS4qKT8kL1xuY29uc3QgZG9zc2llclVpZFJlZ2V4ID0gL15ETChSXFxkKykoTFxcZCspTihcXGQrKSQvXG5jb25zdCByZXVuaW9uVWlkUmVnZXggPVxuICAvXlJVKEFOfENHfFNOKShSXFxkKykoTFxcZCspKFtBU11cXGR7NH0pKElEQ3xJREZMP3xJRFMpKFxcZCspJC9cbmNvbnN0IHNjcnV0aW5VaWRSZWdleCA9IC9eVlRBTihSXFxkKykoTFxcZCspVihcXGQrKSQvXG5cbi8qKiBMb2FkIGRhdGEgZnJvbSBzcGxpdCBmaWxlcy4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsb2FkQXNzZW1ibGVlRGF0YShcbiAgZGF0YURpcjogc3RyaW5nLFxuICBlbmFibGVkRGF0YXNldHM6IEVuYWJsZWREYXRhc2V0cyxcbiAgbGVnaXNsYXR1cmU6IExlZ2lzbGF0dXJlLFxuICB7IGxvZyA9IGZhbHNlIH0gPSB7fSxcbik6IERhdGEge1xuICBjb25zdCBhY3RldXJCeVVpZDogeyBbdWlkOiBzdHJpbmddOiBBY3RldXIgfSA9IHt9XG4gIGNvbnN0IG9yZ2FuZUJ5VWlkOiB7IFt1aWQ6IHN0cmluZ106IE9yZ2FuZSB9ID0ge31cbiAgaWYgKGVuYWJsZWREYXRhc2V0cyAmIEVuYWJsZWREYXRhc2V0cy5BY3RldXJzRXRPcmdhbmVzKSB7XG4gICAgZm9yIChjb25zdCBkYXRhc2V0IG9mIGRhdGFzZXRzLmFjdGV1cnNFdE9yZ2FuZXMpIHtcbiAgICAgIGlmIChkYXRhc2V0Lmlnbm9yZUZvcldlYikge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgaWYgKFxuICAgICAgICBsZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICAgIGRhdGFzZXQubGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgICBsZWdpc2xhdHVyZSAhPT0gZGF0YXNldC5sZWdpc2xhdHVyZVxuICAgICAgKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBjb25zdCBkYXRhc2V0RGlyID0gcGF0aC5qb2luKFxuICAgICAgICBkYXRhRGlyLFxuICAgICAgICBkYXRhc2V0LmZpbGVuYW1lLnJlcGxhY2UoL1xcLmpzb24kLywgXCJfbmV0dG95ZVwiKSxcbiAgICAgIClcblxuICAgICAgZm9yIChjb25zdCBhY3RldXJTcGxpdFBhdGggb2Ygd2Fsa0RpcihkYXRhc2V0RGlyLCBbXCJhY3RldXJzXCJdKSkge1xuICAgICAgICBjb25zdCBhY3RldXJGaWxlbmFtZSA9IGFjdGV1clNwbGl0UGF0aFthY3RldXJTcGxpdFBhdGgubGVuZ3RoIC0gMV1cbiAgICAgICAgaWYgKCFhY3RldXJGaWxlbmFtZS5lbmRzV2l0aChcIi5qc29uXCIpKSB7XG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBhY3RldXJGaWxlUGF0aCA9IHBhdGguam9pbihkYXRhc2V0RGlyLCAuLi5hY3RldXJTcGxpdFBhdGgpXG4gICAgICAgIGlmIChsb2cpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgTG9hZGluZyBmaWxlOiAke2FjdGV1ckZpbGVQYXRofeKApmApXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYWN0ZXVySnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKGFjdGV1ckZpbGVQYXRoLCB7XG4gICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICB9KVxuICAgICAgICBjb25zdCBhY3RldXIgPSBBY3RldXJzRXRPcmdhbmVzQ29udmVydC50b0FjdGV1cihhY3RldXJKc29uKVxuICAgICAgICAvLyBLZWVwIHRoZSBmaXJzdCBleGlzdGluZyBcImFjdGV1clwiLCBiZWNhdXNlIHRoZSBmaXJzdCB3cmFwcGVyIGlzIHRoZSBtb3N0IGNvbXBsZXRlLlxuICAgICAgICBpZiAoYWN0ZXVyQnlVaWRbYWN0ZXVyLnVpZF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGFjdGV1ckJ5VWlkW2FjdGV1ci51aWRdID0gYWN0ZXVyXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgZm9yIChjb25zdCBvcmdhbmVTcGxpdFBhdGggb2Ygd2Fsa0RpcihkYXRhc2V0RGlyLCBbXCJvcmdhbmVzXCJdKSkge1xuICAgICAgICBjb25zdCBvcmdhbmVGaWxlbmFtZSA9IG9yZ2FuZVNwbGl0UGF0aFtvcmdhbmVTcGxpdFBhdGgubGVuZ3RoIC0gMV1cbiAgICAgICAgaWYgKCFvcmdhbmVGaWxlbmFtZS5lbmRzV2l0aChcIi5qc29uXCIpKSB7XG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBvcmdhbmVGaWxlUGF0aCA9IHBhdGguam9pbihkYXRhc2V0RGlyLCAuLi5vcmdhbmVTcGxpdFBhdGgpXG4gICAgICAgIGlmIChsb2cpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgTG9hZGluZyBmaWxlOiAke29yZ2FuZUZpbGVQYXRofeKApmApXG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgb3JnYW5lSnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKG9yZ2FuZUZpbGVQYXRoLCB7XG4gICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICB9KVxuICAgICAgICBjb25zdCBvcmdhbmUgPSBBY3RldXJzRXRPcmdhbmVzQ29udmVydC50b09yZ2FuZShvcmdhbmVKc29uKVxuICAgICAgICAvLyBLZWVwIHRoZSBmaXJzdCBleGlzdGluZyBcIm9yZ2FuZVwiLCBiZWNhdXNlIHRoZSBmaXJzdCB3cmFwcGVyIGlzIHRoZSBtb3N0IGNvbXBsZXRlLlxuICAgICAgICBpZiAob3JnYW5lQnlVaWRbb3JnYW5lLnVpZF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIG9yZ2FuZUJ5VWlkW29yZ2FuZS51aWRdID0gb3JnYW5lXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjb25zdCByZXVuaW9uQnlVaWQ6IHsgW3VpZDogc3RyaW5nXTogUmV1bmlvbiB9ID0ge31cbiAgY29uc3QgcmV1bmlvbnNCeURheTogeyBbZGF5OiBzdHJpbmddOiBSZXVuaW9uW10gfSA9IHt9XG4gIGNvbnN0IHJldW5pb25zQnlEb3NzaWVyVWlkOiB7IFtkb3NzaWVyVWlkOiBzdHJpbmddOiBSZXVuaW9uW10gfSA9IHt9XG4gIGlmIChlbmFibGVkRGF0YXNldHMgJiBFbmFibGVkRGF0YXNldHMuQWdlbmRhcykge1xuICAgIGZvciAoY29uc3QgZGF0YXNldCBvZiBkYXRhc2V0cy5hZ2VuZGFzKSB7XG4gICAgICBpZiAoZGF0YXNldC5pZ25vcmVGb3JXZWIpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGlmIChcbiAgICAgICAgbGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgICBkYXRhc2V0LmxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgICAgbGVnaXNsYXR1cmUgIT09IGRhdGFzZXQubGVnaXNsYXR1cmVcbiAgICAgICkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgY29uc3QgZGF0YXNldERpciA9IHBhdGguam9pbihcbiAgICAgICAgZGF0YURpcixcbiAgICAgICAgZGF0YXNldC5maWxlbmFtZS5yZXBsYWNlKC9cXC5qc29uJC8sIFwiX25ldHRveWVcIiksXG4gICAgICApXG4gICAgICBmb3IgKGNvbnN0IHJldW5pb25TcGxpdFBhdGggb2Ygd2Fsa0RpcihkYXRhc2V0RGlyKSkge1xuICAgICAgICBjb25zdCByZXVuaW9uRmlsZW5hbWUgPSByZXVuaW9uU3BsaXRQYXRoW3JldW5pb25TcGxpdFBhdGgubGVuZ3RoIC0gMV1cbiAgICAgICAgaWYgKCFyZXVuaW9uRmlsZW5hbWUuZW5kc1dpdGgoXCIuanNvblwiKSkge1xuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmV1bmlvbkZpbGVQYXRoID0gcGF0aC5qb2luKGRhdGFzZXREaXIsIC4uLnJldW5pb25TcGxpdFBhdGgpXG4gICAgICAgIGlmIChsb2cpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgTG9hZGluZyBmaWxlOiAke3JldW5pb25GaWxlUGF0aH3igKZgKVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJldW5pb25Kc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMocmV1bmlvbkZpbGVQYXRoLCB7XG4gICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICB9KVxuICAgICAgICBjb25zdCByZXVuaW9uID0gQWdlbmRhc0NvbnZlcnQudG9SZXVuaW9uKHJldW5pb25Kc29uKVxuICAgICAgICBpZiAocmV1bmlvbkJ5VWlkW3JldW5pb24udWlkXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgcmV1bmlvbkJ5VWlkW3JldW5pb24udWlkXSA9IHJldW5pb25cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGRheSA9IHJldW5pb24udGltZXN0YW1wRGVidXQudG9JU09TdHJpbmcoKS5zcGxpdChcIlRcIilbMF1cbiAgICAgICAgbGV0IHJldW5pb25zQXREYXkgPSByZXVuaW9uc0J5RGF5W2RheV1cbiAgICAgICAgaWYgKHJldW5pb25zQXREYXkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHJldW5pb25zQXREYXkgPSByZXVuaW9uc0J5RGF5W2RheV0gPSBbXVxuICAgICAgICB9XG4gICAgICAgIHJldW5pb25zQXREYXkucHVzaChyZXVuaW9uKVxuXG4gICAgICAgIGNvbnN0IG9kaiA9IHJldW5pb24ub2RqXG4gICAgICAgIGlmIChvZGogIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGZvciAoY29uc3QgcG9pbnRPZGogb2Ygb2RqLnBvaW50c09kaiB8fCBbXSkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBkb3NzaWVyTGVnaXNsYXRpZlJlZiBvZiBwb2ludE9kai5kb3NzaWVyc0xlZ2lzbGF0aWZzUmVmcyB8fFxuICAgICAgICAgICAgICBbXSkge1xuICAgICAgICAgICAgICBsZXQgcmV1bmlvbnNBdERvc3NpZXJVaWQgPVxuICAgICAgICAgICAgICAgIHJldW5pb25zQnlEb3NzaWVyVWlkW2Rvc3NpZXJMZWdpc2xhdGlmUmVmXVxuICAgICAgICAgICAgICBpZiAocmV1bmlvbnNBdERvc3NpZXJVaWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHJldW5pb25zQXREb3NzaWVyVWlkID0gcmV1bmlvbnNCeURvc3NpZXJVaWRbXG4gICAgICAgICAgICAgICAgICBkb3NzaWVyTGVnaXNsYXRpZlJlZlxuICAgICAgICAgICAgICAgIF0gPSBbXVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJldW5pb25zQXREb3NzaWVyVWlkLnB1c2gocmV1bmlvbilcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjb25zdCBhbWVuZGVtZW50QnlVaWQ6IHsgW3VpZDogc3RyaW5nXTogQW1lbmRlbWVudCB9ID0ge31cbiAgaWYgKGVuYWJsZWREYXRhc2V0cyAmIEVuYWJsZWREYXRhc2V0cy5BbWVuZGVtZW50cykge1xuICAgIGZvciAoY29uc3QgZGF0YXNldCBvZiBkYXRhc2V0cy5hbWVuZGVtZW50cykge1xuICAgICAgaWYgKGRhdGFzZXQuaWdub3JlRm9yV2ViKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBpZiAoXG4gICAgICAgIGxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgICAgZGF0YXNldC5sZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICAgIGxlZ2lzbGF0dXJlICE9PSBkYXRhc2V0LmxlZ2lzbGF0dXJlXG4gICAgICApIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGNvbnN0IGRhdGFzZXREaXIgPSBwYXRoLmpvaW4oXG4gICAgICAgIGRhdGFEaXIsXG4gICAgICAgIGRhdGFzZXQuZmlsZW5hbWUucmVwbGFjZSgvXFwuanNvbiQvLCBcIl9uZXR0b3llXCIpLFxuICAgICAgKVxuXG4gICAgICBmb3IgKGNvbnN0IGFtZW5kZW1lbnRTcGxpdFBhdGggb2Ygd2Fsa0RpcihkYXRhc2V0RGlyKSkge1xuICAgICAgICBjb25zdCBhbWVuZGVtZW50RmlsZW5hbWUgPVxuICAgICAgICAgIGFtZW5kZW1lbnRTcGxpdFBhdGhbYW1lbmRlbWVudFNwbGl0UGF0aC5sZW5ndGggLSAxXVxuICAgICAgICBpZiAoIWFtZW5kZW1lbnRGaWxlbmFtZS5lbmRzV2l0aChcIi5qc29uXCIpKSB7XG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBhbWVuZGVtZW50RmlsZVBhdGggPSBwYXRoLmpvaW4oZGF0YXNldERpciwgLi4uYW1lbmRlbWVudFNwbGl0UGF0aClcbiAgICAgICAgaWYgKGxvZykge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGBMb2FkaW5nIGZpbGU6ICR7YW1lbmRlbWVudEZpbGVQYXRofeKApmApXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYW1lbmRlbWVudEpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhhbWVuZGVtZW50RmlsZVBhdGgsIHtcbiAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgIH0pXG4gICAgICAgIGNvbnN0IGFtZW5kZW1lbnQgPSBBbWVuZGVtZW50c0NvbnZlcnQudG9BbWVuZGVtZW50KGFtZW5kZW1lbnRKc29uKVxuICAgICAgICBpZiAoYW1lbmRlbWVudEJ5VWlkW2FtZW5kZW1lbnQudWlkXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgYW1lbmRlbWVudEJ5VWlkW2FtZW5kZW1lbnQudWlkXSA9IGFtZW5kZW1lbnRcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGRvY3VtZW50QnlVaWQ6IHsgW3VpZDogc3RyaW5nXTogRG9jdW1lbnQgfSA9IHt9XG4gIGNvbnN0IGRvc3NpZXJQYXJsZW1lbnRhaXJlQnlTZW5hdENoZW1pbjoge1xuICAgIFt1aWQ6IHN0cmluZ106IERvc3NpZXJQYXJsZW1lbnRhaXJlXG4gIH0gPSB7fVxuICBjb25zdCBkb3NzaWVyUGFybGVtZW50YWlyZUJ5VGl0cmVDaGVtaW46IHtcbiAgICBbdWlkOiBzdHJpbmddOiBEb3NzaWVyUGFybGVtZW50YWlyZVxuICB9ID0ge31cbiAgY29uc3QgZG9zc2llclBhcmxlbWVudGFpcmVCeVVpZDogeyBbdWlkOiBzdHJpbmddOiBEb3NzaWVyUGFybGVtZW50YWlyZSB9ID0ge31cbiAgaWYgKGVuYWJsZWREYXRhc2V0cyAmIEVuYWJsZWREYXRhc2V0cy5Eb3NzaWVyc0xlZ2lzbGF0aWZzKSB7XG4gICAgZm9yIChjb25zdCBkYXRhc2V0IG9mIGRhdGFzZXRzLmRvc3NpZXJzTGVnaXNsYXRpZnMpIHtcbiAgICAgIGlmIChkYXRhc2V0Lmlnbm9yZUZvcldlYikge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgaWYgKFxuICAgICAgICBsZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICAgIGRhdGFzZXQubGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgICBsZWdpc2xhdHVyZSAhPT0gZGF0YXNldC5sZWdpc2xhdHVyZVxuICAgICAgKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBjb25zdCBkYXRhc2V0RGlyID0gcGF0aC5qb2luKFxuICAgICAgICBkYXRhRGlyLFxuICAgICAgICBkYXRhc2V0LmZpbGVuYW1lLnJlcGxhY2UoL1xcLmpzb24kLywgXCJfbmV0dG95ZVwiKSxcbiAgICAgIClcblxuICAgICAgZm9yIChjb25zdCBkb2N1bWVudFNwbGl0UGF0aCBvZiB3YWxrRGlyKGRhdGFzZXREaXIsIFtcImRvY3VtZW50c1wiXSkpIHtcbiAgICAgICAgY29uc3QgZG9jdW1lbnRGaWxlbmFtZSA9IGRvY3VtZW50U3BsaXRQYXRoW2RvY3VtZW50U3BsaXRQYXRoLmxlbmd0aCAtIDFdXG4gICAgICAgIGlmICghZG9jdW1lbnRGaWxlbmFtZS5lbmRzV2l0aChcIi5qc29uXCIpKSB7XG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkb2N1bWVudEZpbGVQYXRoID0gcGF0aC5qb2luKGRhdGFzZXREaXIsIC4uLmRvY3VtZW50U3BsaXRQYXRoKVxuICAgICAgICBpZiAobG9nKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coYExvYWRpbmcgZmlsZTogJHtkb2N1bWVudEZpbGVQYXRofeKApmApXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZG9jdW1lbnRKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoZG9jdW1lbnRGaWxlUGF0aCwge1xuICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgfSlcbiAgICAgICAgY29uc3QgZG9jdW1lbnQgPSBEb3NzaWVyc0xlZ2lzbGF0aWZzQ29udmVydC50b0RvY3VtZW50KGRvY3VtZW50SnNvbilcbiAgICAgICAgaWYgKGRvY3VtZW50QnlVaWRbZG9jdW1lbnQudWlkXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgZG9jdW1lbnRCeVVpZFtkb2N1bWVudC51aWRdID0gZG9jdW1lbnRcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBmb3IgKGNvbnN0IGRvc3NpZXJTcGxpdFBhdGggb2Ygd2Fsa0RpcihkYXRhc2V0RGlyLCBbXCJkb3NzaWVyc1wiXSkpIHtcbiAgICAgICAgY29uc3QgZG9zc2llckZpbGVuYW1lID0gZG9zc2llclNwbGl0UGF0aFtkb3NzaWVyU3BsaXRQYXRoLmxlbmd0aCAtIDFdXG4gICAgICAgIGlmICghZG9zc2llckZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRvc3NpZXJGaWxlUGF0aCA9IHBhdGguam9pbihkYXRhc2V0RGlyLCAuLi5kb3NzaWVyU3BsaXRQYXRoKVxuICAgICAgICBpZiAobG9nKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coYExvYWRpbmcgZmlsZTogJHtkb3NzaWVyRmlsZVBhdGh94oCmYClcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkb3NzaWVySnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKGRvc3NpZXJGaWxlUGF0aCwge1xuICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgfSlcbiAgICAgICAgY29uc3QgZG9zc2llciA9XG4gICAgICAgICAgRG9zc2llcnNMZWdpc2xhdGlmc0NvbnZlcnQudG9Eb3NzaWVyUGFybGVtZW50YWlyZShkb3NzaWVySnNvbilcbiAgICAgICAgY29uc3QgdGl0cmVEb3NzaWVyID0gZG9zc2llci50aXRyZURvc3NpZXJcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHRpdHJlRG9zc2llci5zZW5hdENoZW1pbiAmJlxuICAgICAgICAgIGRvc3NpZXJQYXJsZW1lbnRhaXJlQnlTZW5hdENoZW1pblt0aXRyZURvc3NpZXIuc2VuYXRDaGVtaW5dID09PVxuICAgICAgICAgICAgdW5kZWZpbmVkXG4gICAgICAgICkge1xuICAgICAgICAgIGRvc3NpZXJQYXJsZW1lbnRhaXJlQnlTZW5hdENoZW1pblt0aXRyZURvc3NpZXIuc2VuYXRDaGVtaW5dID0gZG9zc2llclxuICAgICAgICB9XG4gICAgICAgIGlmIChcbiAgICAgICAgICB0aXRyZURvc3NpZXIudGl0cmVDaGVtaW4gJiZcbiAgICAgICAgICBkb3NzaWVyUGFybGVtZW50YWlyZUJ5VGl0cmVDaGVtaW5bdGl0cmVEb3NzaWVyLnRpdHJlQ2hlbWluXSA9PT1cbiAgICAgICAgICAgIHVuZGVmaW5lZFxuICAgICAgICApIHtcbiAgICAgICAgICBkb3NzaWVyUGFybGVtZW50YWlyZUJ5VGl0cmVDaGVtaW5bdGl0cmVEb3NzaWVyLnRpdHJlQ2hlbWluXSA9IGRvc3NpZXJcbiAgICAgICAgfVxuICAgICAgICBpZiAoZG9zc2llclBhcmxlbWVudGFpcmVCeVVpZFtkb3NzaWVyLnVpZF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGRvc3NpZXJQYXJsZW1lbnRhaXJlQnlVaWRbZG9zc2llci51aWRdID0gZG9zc2llclxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgbGV0IHBob3RvQnlVaWQ6IHsgW3VpZDogc3RyaW5nXTogUGhvdG8gfSA9IHt9XG4gIGlmIChlbmFibGVkRGF0YXNldHMgJiBFbmFibGVkRGF0YXNldHMuUGhvdG9zKSB7XG4gICAge1xuICAgICAgY29uc3QganNvbkZpbGVQYXRoOiBzdHJpbmcgPSBwYXRoLmpvaW4oXG4gICAgICAgIGRhdGFEaXIsXG4gICAgICAgIGBwaG90b3NfZGVwdXRlc18ke1xuICAgICAgICAgIC8vIFRPRE86IEhhbmRsZSBMZWdpc2xhdHVyZS5BbGwuXG4gICAgICAgICAgbGVnaXNsYXR1cmUgPT09IExlZ2lzbGF0dXJlLkFsbCA/IExlZ2lzbGF0dXJlLlNlaXplIDogbGVnaXNsYXR1cmVcbiAgICAgICAgfWAsXG4gICAgICAgIFwiZGVwdXRlcy5qc29uXCIsXG4gICAgICApXG4gICAgICBpZiAoZnMuZXhpc3RzU3luYyhqc29uRmlsZVBhdGgpKSB7XG4gICAgICAgIGlmIChsb2cpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgTG9hZGluZyBmaWxlOiAke2pzb25GaWxlUGF0aH1gKVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhqc29uRmlsZVBhdGgsIHsgZW5jb2Rpbmc6IFwidXRmOFwiIH0pXG4gICAgICAgIE9iamVjdC5hc3NpZ24ocGhvdG9CeVVpZCwgSlNPTi5wYXJzZShqc29uKSlcbiAgICAgIH0gZWxzZSBpZiAobG9nKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBJZ25vcmluZyBtaXNzaW5nIGZpbGU6ICR7anNvbkZpbGVQYXRofWApXG4gICAgICB9XG4gICAgfVxuXG4gICAge1xuICAgICAgY29uc3QganNvbkZpbGVQYXRoOiBzdHJpbmcgPSBwYXRoLmpvaW4oXG4gICAgICAgIGRhdGFEaXIsXG4gICAgICAgIFwicGhvdG9zX3NlbmF0ZXVyc1wiLFxuICAgICAgICBcInNlbmF0ZXVycy5qc29uXCIsXG4gICAgICApXG4gICAgICBpZiAoZnMuZXhpc3RzU3luYyhqc29uRmlsZVBhdGgpKSB7XG4gICAgICAgIGlmIChsb2cpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgTG9hZGluZyBmaWxlOiAke2pzb25GaWxlUGF0aH1gKVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhqc29uRmlsZVBhdGgsIHsgZW5jb2Rpbmc6IFwidXRmOFwiIH0pXG4gICAgICAgIE9iamVjdC5hc3NpZ24ocGhvdG9CeVVpZCwgSlNPTi5wYXJzZShqc29uKSlcbiAgICAgIH0gZWxzZSBpZiAobG9nKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBJZ25vcmluZyBtaXNzaW5nIGZpbGU6ICR7anNvbkZpbGVQYXRofWApXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY29uc3Qgc2NydXRpbkJ5VWlkOiB7IFt1aWQ6IHN0cmluZ106IFNjcnV0aW4gfSA9IHt9XG4gIGlmIChlbmFibGVkRGF0YXNldHMgJiBFbmFibGVkRGF0YXNldHMuU2NydXRpbnMpIHtcbiAgICBmb3IgKGNvbnN0IGRhdGFzZXQgb2YgZGF0YXNldHMuc2NydXRpbnMpIHtcbiAgICAgIGlmIChkYXRhc2V0Lmlnbm9yZUZvcldlYikge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgaWYgKFxuICAgICAgICBsZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICAgIGRhdGFzZXQubGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgICBsZWdpc2xhdHVyZSAhPT0gZGF0YXNldC5sZWdpc2xhdHVyZVxuICAgICAgKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBjb25zdCBkYXRhc2V0RGlyID0gcGF0aC5qb2luKFxuICAgICAgICBkYXRhRGlyLFxuICAgICAgICBkYXRhc2V0LmZpbGVuYW1lLnJlcGxhY2UoL1xcLmpzb24kLywgXCJfbmV0dG95ZVwiKSxcbiAgICAgIClcblxuICAgICAgZm9yIChjb25zdCBzY3J1dGluU3BsaXRQYXRoIG9mIHdhbGtEaXIoZGF0YXNldERpcikpIHtcbiAgICAgICAgY29uc3Qgc2NydXRpbkZpbGVuYW1lID0gc2NydXRpblNwbGl0UGF0aFtzY3J1dGluU3BsaXRQYXRoLmxlbmd0aCAtIDFdXG4gICAgICAgIGlmICghc2NydXRpbkZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNjcnV0aW5GaWxlUGF0aCA9IHBhdGguam9pbihkYXRhc2V0RGlyLCAuLi5zY3J1dGluU3BsaXRQYXRoKVxuICAgICAgICBpZiAobG9nKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coYExvYWRpbmcgZmlsZTogJHtzY3J1dGluRmlsZVBhdGh94oCmYClcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzY3J1dGluSnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKHNjcnV0aW5GaWxlUGF0aCwge1xuICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgfSlcbiAgICAgICAgY29uc3Qgc2NydXRpbiA9IFNjcnV0aW5zQ29udmVydC50b1NjcnV0aW4oc2NydXRpbkpzb24pXG4gICAgICAgIGlmIChzY3J1dGluQnlVaWRbc2NydXRpbi51aWRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBzY3J1dGluQnlVaWRbc2NydXRpbi51aWRdID0gc2NydXRpblxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBhY3RldXJCeVVpZCxcbiAgICBhbWVuZGVtZW50QnlVaWQsXG4gICAgZG9jdW1lbnRCeVVpZCxcbiAgICBkb3NzaWVyUGFybGVtZW50YWlyZUJ5U2VuYXRDaGVtaW4sXG4gICAgZG9zc2llclBhcmxlbWVudGFpcmVCeVRpdHJlQ2hlbWluLFxuICAgIGRvc3NpZXJQYXJsZW1lbnRhaXJlQnlVaWQsXG4gICAgb3JnYW5lQnlVaWQsXG4gICAgcGhvdG9CeVVpZCxcbiAgICByZXVuaW9uQnlVaWQsXG4gICAgcmV1bmlvbnNCeURheSxcbiAgICByZXVuaW9uc0J5RG9zc2llclVpZCxcbiAgICBzY3J1dGluQnlVaWQsXG4gIH1cbn1cblxuLyoqIExvYWQgZGF0YSBmcm9tIGJpZyBtb25vbHl0aWMgZmlsZXMuICovXG5leHBvcnQgZnVuY3Rpb24gbG9hZEFzc2VtYmxlZURhdGFGcm9tQmlnRmlsZXMoXG4gIGRhdGFEaXI6IHN0cmluZyxcbiAgZW5hYmxlZERhdGFzZXRzOiBFbmFibGVkRGF0YXNldHMsXG4gIGxlZ2lzbGF0dXJlOiBMZWdpc2xhdHVyZSxcbiAgeyBsb2cgPSBmYWxzZSB9ID0ge30sXG4pOiBEYXRhIHtcbiAgY29uc3QgYWN0ZXVyQnlVaWQ6IHsgW3VpZDogc3RyaW5nXTogQWN0ZXVyIH0gPSB7fVxuICBjb25zdCBvcmdhbmVCeVVpZDogeyBbdWlkOiBzdHJpbmddOiBPcmdhbmUgfSA9IHt9XG4gIGlmIChlbmFibGVkRGF0YXNldHMgJiBFbmFibGVkRGF0YXNldHMuQWN0ZXVyc0V0T3JnYW5lcykge1xuICAgIGZvciAoY29uc3QgZGF0YXNldCBvZiBkYXRhc2V0cy5hY3RldXJzRXRPcmdhbmVzKSB7XG4gICAgICBpZiAoZGF0YXNldC5pZ25vcmVGb3JXZWIpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGlmIChcbiAgICAgICAgbGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgICBkYXRhc2V0LmxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgICAgbGVnaXNsYXR1cmUgIT09IGRhdGFzZXQubGVnaXNsYXR1cmVcbiAgICAgICkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgY29uc3QganNvbkZpbGVQYXRoOiBzdHJpbmcgPSBwYXRoLmpvaW4oXG4gICAgICAgIGRhdGFEaXIsXG4gICAgICAgIGRhdGFzZXQuZmlsZW5hbWUucmVwbGFjZSgvXFwuanNvbiQvLCBcIl9uZXR0b3llLmpzb25cIiksXG4gICAgICApXG4gICAgICBpZiAobG9nKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBMb2FkaW5nIGZpbGU6ICR7anNvbkZpbGVQYXRofWApXG4gICAgICB9XG4gICAgICBjb25zdCBqc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoanNvbkZpbGVQYXRoLCB7IGVuY29kaW5nOiBcInV0ZjhcIiB9KVxuICAgICAgY29uc3QgYWN0ZXVyc0V0T3JnYW5lcyA9IEFjdGV1cnNFdE9yZ2FuZXNDb252ZXJ0LnRvQWN0ZXVyc0V0T3JnYW5lcyhqc29uKVxuICAgICAgZm9yIChjb25zdCBhY3RldXIgb2YgYWN0ZXVyc0V0T3JnYW5lcy5hY3RldXJzKSB7XG4gICAgICAgIC8vIEtlZXAgdGhlIGZpcnN0IGV4aXN0aW5nIFwiYWN0ZXVyXCIsIGJlY2F1c2UgdGhlIGZpcnN0IHdyYXBwZXIgaXMgdGhlIG1vc3QgY29tcGxldGUuXG4gICAgICAgIGlmIChhY3RldXJCeVVpZFthY3RldXIudWlkXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgYWN0ZXVyQnlVaWRbYWN0ZXVyLnVpZF0gPSBhY3RldXJcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZm9yIChjb25zdCBvcmdhbmUgb2YgYWN0ZXVyc0V0T3JnYW5lcy5vcmdhbmVzKSB7XG4gICAgICAgIC8vIEtlZXAgdGhlIGZpcnN0IGV4aXN0aW5nIFwib3JnYW5lXCIsIGJlY2F1c2UgdGhlIGZpcnN0IHdyYXBwZXIgaXMgdGhlIG1vc3QgY29tcGxldGUuXG4gICAgICAgIGlmIChvcmdhbmVCeVVpZFtvcmdhbmUudWlkXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgb3JnYW5lQnlVaWRbb3JnYW5lLnVpZF0gPSBvcmdhbmVcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHJldW5pb25CeVVpZDogeyBbdWlkOiBzdHJpbmddOiBSZXVuaW9uIH0gPSB7fVxuICBjb25zdCByZXVuaW9uc0J5RGF5OiB7IFtkYXk6IHN0cmluZ106IFJldW5pb25bXSB9ID0ge31cbiAgY29uc3QgcmV1bmlvbnNCeURvc3NpZXJVaWQ6IHsgW2Rvc3NpZXJVaWQ6IHN0cmluZ106IFJldW5pb25bXSB9ID0ge31cbiAgaWYgKGVuYWJsZWREYXRhc2V0cyAmIEVuYWJsZWREYXRhc2V0cy5BZ2VuZGFzKSB7XG4gICAgZm9yIChjb25zdCBkYXRhc2V0IG9mIGRhdGFzZXRzLmFnZW5kYXMpIHtcbiAgICAgIGlmIChkYXRhc2V0Lmlnbm9yZUZvcldlYikge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgaWYgKFxuICAgICAgICBsZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICAgIGRhdGFzZXQubGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgICBsZWdpc2xhdHVyZSAhPT0gZGF0YXNldC5sZWdpc2xhdHVyZVxuICAgICAgKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBjb25zdCBqc29uRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICAgICAgZGF0YURpcixcbiAgICAgICAgZGF0YXNldC5maWxlbmFtZS5yZXBsYWNlKC9cXC5qc29uJC8sIFwiX25ldHRveWUuanNvblwiKSxcbiAgICAgIClcbiAgICAgIGlmIChsb2cpIHtcbiAgICAgICAgY29uc29sZS5sb2coYExvYWRpbmcgZmlsZTogJHtqc29uRmlsZVBhdGh9YClcbiAgICAgIH1cbiAgICAgIGNvbnN0IGpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhqc29uRmlsZVBhdGgsIHsgZW5jb2Rpbmc6IFwidXRmOFwiIH0pXG4gICAgICBjb25zdCBhZ2VuZGFzID0gQWdlbmRhc0NvbnZlcnQudG9BZ2VuZGFzKGpzb24pXG4gICAgICBmb3IgKGNvbnN0IHJldW5pb24gb2YgYWdlbmRhcy5yZXVuaW9ucykge1xuICAgICAgICBpZiAocmV1bmlvbkJ5VWlkW3JldW5pb24udWlkXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgcmV1bmlvbkJ5VWlkW3JldW5pb24udWlkXSA9IHJldW5pb25cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGRheSA9IHJldW5pb24udGltZXN0YW1wRGVidXQudG9JU09TdHJpbmcoKS5zcGxpdChcIlRcIilbMF1cbiAgICAgICAgbGV0IHJldW5pb25zQXREYXkgPSByZXVuaW9uc0J5RGF5W2RheV1cbiAgICAgICAgaWYgKHJldW5pb25zQXREYXkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHJldW5pb25zQXREYXkgPSByZXVuaW9uc0J5RGF5W2RheV0gPSBbXVxuICAgICAgICB9XG4gICAgICAgIHJldW5pb25zQXREYXkucHVzaChyZXVuaW9uKVxuXG4gICAgICAgIGNvbnN0IG9kaiA9IHJldW5pb24ub2RqXG4gICAgICAgIGlmIChvZGogIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGZvciAoY29uc3QgcG9pbnRPZGogb2Ygb2RqLnBvaW50c09kaiB8fCBbXSkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBkb3NzaWVyTGVnaXNsYXRpZlJlZiBvZiBwb2ludE9kai5kb3NzaWVyc0xlZ2lzbGF0aWZzUmVmcyB8fFxuICAgICAgICAgICAgICBbXSkge1xuICAgICAgICAgICAgICBsZXQgcmV1bmlvbnNBdERvc3NpZXJVaWQgPVxuICAgICAgICAgICAgICAgIHJldW5pb25zQnlEb3NzaWVyVWlkW2Rvc3NpZXJMZWdpc2xhdGlmUmVmXVxuICAgICAgICAgICAgICBpZiAocmV1bmlvbnNBdERvc3NpZXJVaWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHJldW5pb25zQXREb3NzaWVyVWlkID0gcmV1bmlvbnNCeURvc3NpZXJVaWRbXG4gICAgICAgICAgICAgICAgICBkb3NzaWVyTGVnaXNsYXRpZlJlZlxuICAgICAgICAgICAgICAgIF0gPSBbXVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJldW5pb25zQXREb3NzaWVyVWlkLnB1c2gocmV1bmlvbilcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjb25zdCBhbWVuZGVtZW50QnlVaWQ6IHsgW3VpZDogc3RyaW5nXTogQW1lbmRlbWVudCB9ID0ge31cbiAgaWYgKGVuYWJsZWREYXRhc2V0cyAmIEVuYWJsZWREYXRhc2V0cy5BbWVuZGVtZW50cykge1xuICAgIGZvciAoY29uc3QgZGF0YXNldCBvZiBkYXRhc2V0cy5hbWVuZGVtZW50cykge1xuICAgICAgaWYgKGRhdGFzZXQuaWdub3JlRm9yV2ViKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBpZiAoXG4gICAgICAgIGxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgICAgZGF0YXNldC5sZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICAgIGxlZ2lzbGF0dXJlICE9PSBkYXRhc2V0LmxlZ2lzbGF0dXJlXG4gICAgICApIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGNvbnN0IGpzb25GaWxlUGF0aDogc3RyaW5nID0gcGF0aC5qb2luKFxuICAgICAgICBkYXRhRGlyLFxuICAgICAgICBkYXRhc2V0LmZpbGVuYW1lLnJlcGxhY2UoL1xcLmpzb24kLywgXCJfbmV0dG95ZS5qc29uXCIpLFxuICAgICAgKVxuICAgICAgaWYgKGxvZykge1xuICAgICAgICBjb25zb2xlLmxvZyhgTG9hZGluZyBmaWxlOiAke2pzb25GaWxlUGF0aH1gKVxuICAgICAgfVxuICAgICAgY29uc3QganNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKGpzb25GaWxlUGF0aCwgeyBlbmNvZGluZzogXCJ1dGY4XCIgfSlcbiAgICAgIGNvbnN0IGFtZW5kZW1lbnRzID0gQW1lbmRlbWVudHNDb252ZXJ0LnRvQW1lbmRlbWVudHMoanNvbilcbiAgICAgIGZvciAoY29uc3QgdGV4dGVMZWdpc2xhdGlmIG9mIGFtZW5kZW1lbnRzLnRleHRlc0xlZ2lzbGF0aWZzKSB7XG4gICAgICAgIGZvciAoY29uc3QgYW1lbmRlbWVudCBvZiB0ZXh0ZUxlZ2lzbGF0aWYuYW1lbmRlbWVudHMpIHtcbiAgICAgICAgICBpZiAoYW1lbmRlbWVudEJ5VWlkW2FtZW5kZW1lbnQudWlkXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBhbWVuZGVtZW50QnlVaWRbYW1lbmRlbWVudC51aWRdID0gYW1lbmRlbWVudFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGRvY3VtZW50QnlVaWQ6IHsgW3VpZDogc3RyaW5nXTogRG9jdW1lbnQgfSA9IHt9XG4gIGNvbnN0IGRvc3NpZXJQYXJsZW1lbnRhaXJlQnlTZW5hdENoZW1pbjoge1xuICAgIFt1aWQ6IHN0cmluZ106IERvc3NpZXJQYXJsZW1lbnRhaXJlXG4gIH0gPSB7fVxuICBjb25zdCBkb3NzaWVyUGFybGVtZW50YWlyZUJ5VGl0cmVDaGVtaW46IHtcbiAgICBbdWlkOiBzdHJpbmddOiBEb3NzaWVyUGFybGVtZW50YWlyZVxuICB9ID0ge31cbiAgY29uc3QgZG9zc2llclBhcmxlbWVudGFpcmVCeVVpZDogeyBbdWlkOiBzdHJpbmddOiBEb3NzaWVyUGFybGVtZW50YWlyZSB9ID0ge31cbiAgaWYgKGVuYWJsZWREYXRhc2V0cyAmIEVuYWJsZWREYXRhc2V0cy5Eb3NzaWVyc0xlZ2lzbGF0aWZzKSB7XG4gICAgZm9yIChjb25zdCBkYXRhc2V0IG9mIGRhdGFzZXRzLmRvc3NpZXJzTGVnaXNsYXRpZnMpIHtcbiAgICAgIGlmIChkYXRhc2V0Lmlnbm9yZUZvcldlYikge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgaWYgKFxuICAgICAgICBsZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICAgIGRhdGFzZXQubGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgICBsZWdpc2xhdHVyZSAhPT0gZGF0YXNldC5sZWdpc2xhdHVyZVxuICAgICAgKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBjb25zdCBqc29uRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICAgICAgZGF0YURpcixcbiAgICAgICAgZGF0YXNldC5maWxlbmFtZS5yZXBsYWNlKC9cXC5qc29uJC8sIFwiX25ldHRveWUuanNvblwiKSxcbiAgICAgIClcbiAgICAgIGlmIChsb2cpIHtcbiAgICAgICAgY29uc29sZS5sb2coYExvYWRpbmcgZmlsZTogJHtqc29uRmlsZVBhdGh9YClcbiAgICAgIH1cbiAgICAgIGNvbnN0IGpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhqc29uRmlsZVBhdGgsIHsgZW5jb2Rpbmc6IFwidXRmOFwiIH0pXG4gICAgICBjb25zdCBkb3NzaWVyc0xlZ2lzbGF0aWZzID1cbiAgICAgICAgRG9zc2llcnNMZWdpc2xhdGlmc0NvbnZlcnQudG9Eb3NzaWVyc0xlZ2lzbGF0aWZzKGpzb24pXG4gICAgICBmb3IgKGNvbnN0IGRvY3VtZW50IG9mIGRvc3NpZXJzTGVnaXNsYXRpZnMudGV4dGVzTGVnaXNsYXRpZnMpIHtcbiAgICAgICAgaWYgKGRvY3VtZW50QnlVaWRbZG9jdW1lbnQudWlkXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgZG9jdW1lbnRCeVVpZFtkb2N1bWVudC51aWRdID0gZG9jdW1lbnRcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZm9yIChjb25zdCBkb3NzaWVyIG9mIGRvc3NpZXJzTGVnaXNsYXRpZnMuZG9zc2llcnNQYXJsZW1lbnRhaXJlcykge1xuICAgICAgICBjb25zdCB0aXRyZURvc3NpZXIgPSBkb3NzaWVyLnRpdHJlRG9zc2llclxuICAgICAgICBpZiAoXG4gICAgICAgICAgdGl0cmVEb3NzaWVyLnNlbmF0Q2hlbWluICYmXG4gICAgICAgICAgZG9zc2llclBhcmxlbWVudGFpcmVCeVNlbmF0Q2hlbWluW3RpdHJlRG9zc2llci5zZW5hdENoZW1pbl0gPT09XG4gICAgICAgICAgICB1bmRlZmluZWRcbiAgICAgICAgKSB7XG4gICAgICAgICAgZG9zc2llclBhcmxlbWVudGFpcmVCeVNlbmF0Q2hlbWluW3RpdHJlRG9zc2llci5zZW5hdENoZW1pbl0gPSBkb3NzaWVyXG4gICAgICAgIH1cbiAgICAgICAgaWYgKFxuICAgICAgICAgIHRpdHJlRG9zc2llci50aXRyZUNoZW1pbiAmJlxuICAgICAgICAgIGRvc3NpZXJQYXJsZW1lbnRhaXJlQnlUaXRyZUNoZW1pblt0aXRyZURvc3NpZXIudGl0cmVDaGVtaW5dID09PVxuICAgICAgICAgICAgdW5kZWZpbmVkXG4gICAgICAgICkge1xuICAgICAgICAgIGRvc3NpZXJQYXJsZW1lbnRhaXJlQnlUaXRyZUNoZW1pblt0aXRyZURvc3NpZXIudGl0cmVDaGVtaW5dID0gZG9zc2llclxuICAgICAgICB9XG4gICAgICAgIGlmIChkb3NzaWVyUGFybGVtZW50YWlyZUJ5VWlkW2Rvc3NpZXIudWlkXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgZG9zc2llclBhcmxlbWVudGFpcmVCeVVpZFtkb3NzaWVyLnVpZF0gPSBkb3NzaWVyXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjb25zdCBwaG90b0J5VWlkOiB7IFt1aWQ6IHN0cmluZ106IFBob3RvIH0gPSB7fVxuICBpZiAoZW5hYmxlZERhdGFzZXRzICYgRW5hYmxlZERhdGFzZXRzLlBob3Rvcykge1xuICAgIGNvbnN0IHBob3RvQnlVaWQgPSB7fVxuXG4gICAge1xuICAgICAgY29uc3QganNvbkZpbGVQYXRoOiBzdHJpbmcgPSBwYXRoLmpvaW4oXG4gICAgICAgIGRhdGFEaXIsXG4gICAgICAgIGBwaG90b3NfZGVwdXRlc18ke1xuICAgICAgICAgIC8vIFRPRE86IEhhbmRsZSBMZWdpc2xhdHVyZS5BbGwuXG4gICAgICAgICAgbGVnaXNsYXR1cmUgPT09IExlZ2lzbGF0dXJlLkFsbCA/IExlZ2lzbGF0dXJlLlNlaXplIDogbGVnaXNsYXR1cmVcbiAgICAgICAgfWAsXG4gICAgICAgIFwiZGVwdXRlcy5qc29uXCIsXG4gICAgICApXG4gICAgICBpZiAoZnMuZXhpc3RzU3luYyhqc29uRmlsZVBhdGgpKSB7XG4gICAgICAgIGlmIChsb2cpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgTG9hZGluZyBmaWxlOiAke2pzb25GaWxlUGF0aH1gKVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhqc29uRmlsZVBhdGgsIHsgZW5jb2Rpbmc6IFwidXRmOFwiIH0pXG4gICAgICAgIE9iamVjdC5hc3NpZ24ocGhvdG9CeVVpZCwgSlNPTi5wYXJzZShqc29uKSlcbiAgICAgIH0gZWxzZSBpZiAobG9nKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBJZ25vcmluZyBtaXNzaW5nIGZpbGU6ICR7anNvbkZpbGVQYXRofWApXG4gICAgICB9XG4gICAgfVxuXG4gICAge1xuICAgICAgY29uc3QganNvbkZpbGVQYXRoOiBzdHJpbmcgPSBwYXRoLmpvaW4oXG4gICAgICAgIGRhdGFEaXIsXG4gICAgICAgIFwicGhvdG9zX3NlbmF0ZXVyc1wiLFxuICAgICAgICBcInNlbmF0ZXVycy5qc29uXCIsXG4gICAgICApXG4gICAgICBpZiAoZnMuZXhpc3RzU3luYyhqc29uRmlsZVBhdGgpKSB7XG4gICAgICAgIGlmIChsb2cpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgTG9hZGluZyBmaWxlOiAke2pzb25GaWxlUGF0aH1gKVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhqc29uRmlsZVBhdGgsIHsgZW5jb2Rpbmc6IFwidXRmOFwiIH0pXG4gICAgICAgIE9iamVjdC5hc3NpZ24ocGhvdG9CeVVpZCwgSlNPTi5wYXJzZShqc29uKSlcbiAgICAgIH0gZWxzZSBpZiAobG9nKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBJZ25vcmluZyBtaXNzaW5nIGZpbGU6ICR7anNvbkZpbGVQYXRofWApXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY29uc3Qgc2NydXRpbkJ5VWlkOiB7IFt1aWQ6IHN0cmluZ106IFNjcnV0aW4gfSA9IHt9XG4gIGlmIChlbmFibGVkRGF0YXNldHMgJiBFbmFibGVkRGF0YXNldHMuU2NydXRpbnMpIHtcbiAgICBmb3IgKGNvbnN0IGRhdGFzZXQgb2YgZGF0YXNldHMuc2NydXRpbnMpIHtcbiAgICAgIGlmIChkYXRhc2V0Lmlnbm9yZUZvcldlYikge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgaWYgKFxuICAgICAgICBsZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICAgIGRhdGFzZXQubGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgICBsZWdpc2xhdHVyZSAhPT0gZGF0YXNldC5sZWdpc2xhdHVyZVxuICAgICAgKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBjb25zdCBqc29uRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICAgICAgZGF0YURpcixcbiAgICAgICAgZGF0YXNldC5maWxlbmFtZS5yZXBsYWNlKC9cXC5qc29uJC8sIFwiX25ldHRveWUuanNvblwiKSxcbiAgICAgIClcbiAgICAgIGlmIChsb2cpIHtcbiAgICAgICAgY29uc29sZS5sb2coYExvYWRpbmcgZmlsZTogJHtqc29uRmlsZVBhdGh9YClcbiAgICAgIH1cbiAgICAgIGNvbnN0IGpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhqc29uRmlsZVBhdGgsIHsgZW5jb2Rpbmc6IFwidXRmOFwiIH0pXG4gICAgICBjb25zdCBzY3J1dGlucyA9IFNjcnV0aW5zQ29udmVydC50b1NjcnV0aW5zKGpzb24pXG4gICAgICBmb3IgKGNvbnN0IHNjcnV0aW4gb2Ygc2NydXRpbnMuc2NydXRpbnMpIHtcbiAgICAgICAgaWYgKHNjcnV0aW5CeVVpZFtzY3J1dGluLnVpZF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHNjcnV0aW5CeVVpZFtzY3J1dGluLnVpZF0gPSBzY3J1dGluXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGFjdGV1ckJ5VWlkLFxuICAgIGFtZW5kZW1lbnRCeVVpZCxcbiAgICBkb2N1bWVudEJ5VWlkLFxuICAgIGRvc3NpZXJQYXJsZW1lbnRhaXJlQnlTZW5hdENoZW1pbixcbiAgICBkb3NzaWVyUGFybGVtZW50YWlyZUJ5VGl0cmVDaGVtaW4sXG4gICAgZG9zc2llclBhcmxlbWVudGFpcmVCeVVpZCxcbiAgICBvcmdhbmVCeVVpZCxcbiAgICBwaG90b0J5VWlkLFxuICAgIHJldW5pb25CeVVpZCxcbiAgICByZXVuaW9uc0J5RGF5LFxuICAgIHJldW5pb25zQnlEb3NzaWVyVWlkLFxuICAgIHNjcnV0aW5CeVVpZCxcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcGF0aEZyb21Eb2N1bWVudFVpZChkb2N1bWVudHNEaXI6IHN0cmluZywgdWlkOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBtYXRjaCA9IGRvY3VtZW50VWlkUmVnZXguZXhlYyh1aWQpXG4gIGFzc2VydC5ub3RTdHJpY3RFcXVhbChcbiAgICBtYXRjaCxcbiAgICBudWxsLFxuICAgIGBVbmV4cGVjdGVkIHN0cnVjdHVyZSBmb3IgZG9jdW1lbnQgVUlEOiAke3VpZH1gLFxuICApXG4gIGNvbnN0IGRvY3VtZW50VHlwZSA9IHBhdGguam9pbihkb2N1bWVudHNEaXIsIG1hdGNoIVsxXSlcbiAgY29uc3QgY2hhbWJyZURpciA9IHBhdGguam9pbihkb2N1bWVudFR5cGUsIG1hdGNoIVsyXSlcbiAgY29uc3QgcmVwdWJsaXF1ZURpciA9IHBhdGguam9pbihjaGFtYnJlRGlyLCBtYXRjaCFbM10pXG4gIGNvbnN0IGxlZ2lzbGF0dXJlRGlyID0gcGF0aC5qb2luKHJlcHVibGlxdWVEaXIsIG1hdGNoIVs0XSlcbiAgY29uc3QgZXRhdERpciA9IHBhdGguam9pbihsZWdpc2xhdHVyZURpciwgbWF0Y2ghWzVdKVxuICBsZXQgbnVtZXJvID0gXCIwMDAwMDBcIiArIG1hdGNoIVs2XVxuICBudW1lcm8gPSBudW1lcm8uc3Vic3RyKG51bWVyby5sZW5ndGggLSA2KVxuICBjb25zdCBudW1lcm9NaWxsaWVyc0RpciA9IHBhdGguam9pbihldGF0RGlyLCBudW1lcm8uc3Vic3RyKDAsIDMpKVxuICBmcy5lbnN1cmVEaXJTeW5jKG51bWVyb01pbGxpZXJzRGlyKVxuICByZXR1cm4gcGF0aC5qb2luKG51bWVyb01pbGxpZXJzRGlyLCB1aWQpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXRoRnJvbURvc3NpZXJQYXJsZW1lbnRhaXJlVWlkKFxuICBkb3NzaWVyc0Rpcjogc3RyaW5nLFxuICB1aWQ6IHN0cmluZyxcbik6IHN0cmluZyB7XG4gIGNvbnN0IG1hdGNoID0gZG9zc2llclVpZFJlZ2V4LmV4ZWModWlkKVxuICBhc3NlcnQubm90U3RyaWN0RXF1YWwoXG4gICAgbWF0Y2gsXG4gICAgbnVsbCxcbiAgICBgVW5leHBlY3RlZCBzdHJ1Y3R1cmUgZm9yIGRvc3NpZXIgcGFybGVtZW50YWlyZSBVSUQ6ICR7dWlkfWAsXG4gIClcbiAgY29uc3QgcmVwdWJsaXF1ZURpciA9IHBhdGguam9pbihkb3NzaWVyc0RpciwgbWF0Y2ghWzFdKVxuICBjb25zdCBsZWdpc2xhdHVyZURpciA9IHBhdGguam9pbihyZXB1YmxpcXVlRGlyLCBtYXRjaCFbMl0pXG4gIGxldCBudW1lcm8gPSBcIjAwMDAwMFwiICsgbWF0Y2ghWzNdXG4gIG51bWVybyA9IG51bWVyby5zdWJzdHIobnVtZXJvLmxlbmd0aCAtIDYpXG4gIGNvbnN0IG51bWVyb01pbGxpZXJzRGlyID0gcGF0aC5qb2luKGxlZ2lzbGF0dXJlRGlyLCBudW1lcm8uc3Vic3RyKDAsIDMpKVxuICBmcy5lbnN1cmVEaXJTeW5jKG51bWVyb01pbGxpZXJzRGlyKVxuICByZXR1cm4gcGF0aC5qb2luKG51bWVyb01pbGxpZXJzRGlyLCB1aWQpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXRoRnJvbVJldW5pb25VaWQocmV1bmlvbnNEaXI6IHN0cmluZywgdWlkOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBtYXRjaCA9IHJldW5pb25VaWRSZWdleC5leGVjKHVpZClcbiAgYXNzZXJ0Lm5vdFN0cmljdEVxdWFsKFxuICAgIG1hdGNoLFxuICAgIG51bGwsXG4gICAgYFVuZXhwZWN0ZWQgc3RydWN0dXJlIGZvciByZXVuaW9uIFVJRDogJHt1aWR9YCxcbiAgKVxuICBjb25zdCBjaGFtYnJlRGlyID0gcGF0aC5qb2luKHJldW5pb25zRGlyLCBtYXRjaCFbMV0pXG4gIGNvbnN0IHJlcHVibGlxdWVEaXIgPSBwYXRoLmpvaW4oY2hhbWJyZURpciwgbWF0Y2ghWzJdKVxuICBjb25zdCBsZWdpc2xhdHVyZURpciA9IHBhdGguam9pbihyZXB1YmxpcXVlRGlyLCBtYXRjaCFbM10pXG4gIGNvbnN0IHNlc3Npb25EaXIgPSBwYXRoLmpvaW4obGVnaXNsYXR1cmVEaXIsIG1hdGNoIVs0XSlcbiAgY29uc3QgaWREaXIgPSBwYXRoLmpvaW4oc2Vzc2lvbkRpciwgbWF0Y2ghWzVdKVxuICBsZXQgbnVtZXJvID0gXCIwMDAwMDAwMDBcIiArIG1hdGNoIVs2XVxuICBudW1lcm8gPSBudW1lcm8uc3Vic3RyKG51bWVyby5sZW5ndGggLSA5KVxuICBjb25zdCBudW1lcm9NaWxsaW9uc0RpciA9IHBhdGguam9pbihpZERpciwgbnVtZXJvLnN1YnN0cigwLCAzKSlcbiAgY29uc3QgbnVtZXJvTWlsbGllcnNEaXIgPSBwYXRoLmpvaW4obnVtZXJvTWlsbGlvbnNEaXIsIG51bWVyby5zdWJzdHIoMywgMykpXG4gIGZzLmVuc3VyZURpclN5bmMobnVtZXJvTWlsbGllcnNEaXIpXG4gIHJldHVybiBwYXRoLmpvaW4obnVtZXJvTWlsbGllcnNEaXIsIHVpZClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhdGhGcm9tU2NydXRpblVpZChzY3J1dGluc0Rpcjogc3RyaW5nLCB1aWQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IG1hdGNoID0gc2NydXRpblVpZFJlZ2V4LmV4ZWModWlkKVxuICBhc3NlcnQubm90U3RyaWN0RXF1YWwoXG4gICAgbWF0Y2gsXG4gICAgbnVsbCxcbiAgICBgVW5leHBlY3RlZCBzdHJ1Y3R1cmUgZm9yIHNjcnV0aW4gVUlEOiAke3VpZH1gLFxuICApXG4gIGNvbnN0IHJlcHVibGlxdWVEaXIgPSBwYXRoLmpvaW4oc2NydXRpbnNEaXIsIG1hdGNoIVsxXSlcbiAgY29uc3QgbGVnaXNsYXR1cmVEaXIgPSBwYXRoLmpvaW4ocmVwdWJsaXF1ZURpciwgbWF0Y2ghWzJdKVxuICBsZXQgbnVtZXJvID0gXCIwMDAwMDBcIiArIG1hdGNoIVszXVxuICBudW1lcm8gPSBudW1lcm8uc3Vic3RyKG51bWVyby5sZW5ndGggLSA2KVxuICBjb25zdCBudW1lcm9NaWxsaWVyc0RpciA9IHBhdGguam9pbihsZWdpc2xhdHVyZURpciwgbnVtZXJvLnN1YnN0cigwLCAzKSlcbiAgZnMuZW5zdXJlRGlyU3luYyhudW1lcm9NaWxsaWVyc0RpcilcbiAgcmV0dXJuIHBhdGguam9pbihudW1lcm9NaWxsaWVyc0RpciwgdWlkKVxufVxuIl0sIm1hcHBpbmdzIjoiQUFBQTs7QUFFQSxPQUFPQSxNQUFNLE1BQU0sUUFBUTtBQUMzQixPQUFPQyxFQUFFLE1BQU0sVUFBVTtBQUN6QixPQUFPQyxJQUFJLE1BQU0sTUFBTTtBQUFBLFNBRWRDLGVBQWU7QUFBQSxTQUNmQyxRQUFRLEVBQUVELGVBQWU7QUFBQSxTQUN6QkUsT0FBTztBQUFBLFNBQ1BBLE9BQU87QUFBQSxTQUdkQyxPQUFPLElBQUlDLHVCQUF1QjtBQUFBLFNBSTNCRCxPQUFPLElBQUlFLGNBQWM7QUFBQSxTQUNiRixPQUFPLElBQUlHLGtCQUFrQjtBQUFBLFNBRWhESCxPQUFPLElBQUlJLDBCQUEwQjtBQUFBLFNBSTlCQyxXQUFXO0FBQUEsU0FDWEwsT0FBTyxJQUFJTSxlQUFlO0FBcUJuQyxNQUFNQyxnQkFBZ0IsR0FDcEIsMkhBQTJIO0FBQzdILE1BQU1DLGVBQWUsR0FB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
|
|
837
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJhc3NlcnQiLCJmcyIsInBhdGgiLCJFbmFibGVkRGF0YXNldHMiLCJkYXRhc2V0cyIsIndhbGtEaXIiLCJDb252ZXJ0IiwiQWN0ZXVyc0V0T3JnYW5lc0NvbnZlcnQiLCJBZ2VuZGFzQ29udmVydCIsIkFtZW5kZW1lbnRzQ29udmVydCIsIkRvc3NpZXJzTGVnaXNsYXRpZnNDb252ZXJ0IiwiTGVnaXNsYXR1cmUiLCJTY3J1dGluc0NvbnZlcnQiLCJkb2N1bWVudFVpZFJlZ2V4IiwiZG9zc2llclVpZFJlZ2V4IiwicmV1bmlvblVpZFJlZ2V4Iiwic2NydXRpblVpZFJlZ2V4IiwiaXRlckxvYWRBc3NlbWJsZWVBY3RldXJzIiwiZGF0YURpciIsImxlZ2lzbGF0dXJlIiwibG9nIiwiYWN0ZXVyc1VpZCIsIlNldCIsImRhdGFzZXQiLCJhY3RldXJzRXRPcmdhbmVzIiwiaWdub3JlRm9yV2ViIiwiQWxsIiwiZGF0YXNldERpciIsImpvaW4iLCJmaWxlbmFtZSIsInJlcGxhY2UiLCJhY3RldXJTcGxpdFBhdGgiLCJhY3RldXJGaWxlbmFtZSIsImxlbmd0aCIsImVuZHNXaXRoIiwiYWN0ZXVyRmlsZVBhdGgiLCJjb25zb2xlIiwiYWN0ZXVySnNvbiIsInJlYWRGaWxlU3luYyIsImVuY29kaW5nIiwiYWN0ZXVyIiwidG9BY3RldXIiLCJoYXMiLCJ1aWQiLCJhZGQiLCJkYXRhc2V0TGVnaXNsYXR1cmUiLCJpdGVyTG9hZEFzc2VtYmxlZUFtZW5kZW1lbnRzIiwiYW1lbmRlbWVudHNVaWQiLCJhbWVuZGVtZW50cyIsImFtZW5kZW1lbnRTcGxpdFBhdGgiLCJhbWVuZGVtZW50RmlsZW5hbWUiLCJhbWVuZGVtZW50RmlsZVBhdGgiLCJhbWVuZGVtZW50SnNvbiIsImFtZW5kZW1lbnQiLCJ0b0FtZW5kZW1lbnQiLCJpdGVyTG9hZEFzc2VtYmxlZURvY3VtZW50cyIsImRvY3VtZW50c1VpZCIsImRvc3NpZXJzTGVnaXNsYXRpZnMiLCJkb2N1bWVudFNwbGl0UGF0aCIsImRvY3VtZW50RmlsZW5hbWUiLCJkb2N1bWVudEZpbGVQYXRoIiwiZG9jdW1lbnRKc29uIiwiZG9jdW1lbnQiLCJ0b0RvY3VtZW50IiwiaXRlckxvYWRBc3NlbWJsZWVEb3NzaWVyc1BhcmxlbWVudGFpcmVzIiwiZG9zc2llcnNQYXJsZW1lbnRhaXJlc1VpZCIsImRvc3NpZXJQYXJsZW1lbnRhaXJlU3BsaXRQYXRoIiwiZG9zc2llclBhcmxlbWVudGFpcmVGaWxlbmFtZSIsImRvc3NpZXJQYXJsZW1lbnRhaXJlRmlsZVBhdGgiLCJkb3NzaWVyUGFybGVtZW50YWlyZUpzb24iLCJkb3NzaWVyUGFybGVtZW50YWlyZSIsInRvRG9zc2llclBhcmxlbWVudGFpcmUiLCJpdGVyTG9hZEFzc2VtYmxlZU9yZ2FuZXMiLCJvcmdhbmVzVWlkIiwib3JnYW5lU3BsaXRQYXRoIiwib3JnYW5lRmlsZW5hbWUiLCJvcmdhbmVGaWxlUGF0aCIsIm9yZ2FuZUpzb24iLCJvcmdhbmUiLCJ0b09yZ2FuZSIsIml0ZXJMb2FkQXNzZW1ibGVlUmV1bmlvbnMiLCJyZXVuaW9uc1VpZCIsImFnZW5kYXMiLCJyZXVuaW9uU3BsaXRQYXRoIiwicmV1bmlvbkZpbGVuYW1lIiwicmV1bmlvbkZpbGVQYXRoIiwicmV1bmlvbkpzb24iLCJyZXVuaW9uIiwidG9SZXVuaW9uIiwiaXRlckxvYWRBc3NlbWJsZWVTY3J1dGlucyIsInNjcnV0aW5zVWlkIiwic2NydXRpbnMiLCJzY3J1dGluU3BsaXRQYXRoIiwic2NydXRpbkZpbGVuYW1lIiwic2NydXRpbkZpbGVQYXRoIiwic2NydXRpbkpzb24iLCJzY3J1dGluIiwidG9TY3J1dGluIiwibG9hZEFzc2VtYmxlZURhdGEiLCJlbmFibGVkRGF0YXNldHMiLCJhY3RldXJCeVVpZCIsIm9yZ2FuZUJ5VWlkIiwiQWN0ZXVyc0V0T3JnYW5lcyIsInVuZGVmaW5lZCIsInJldW5pb25CeVVpZCIsInJldW5pb25zQnlEYXkiLCJyZXVuaW9uc0J5RG9zc2llclVpZCIsIkFnZW5kYXMiLCJkYXkiLCJ0aW1lc3RhbXBEZWJ1dCIsInRvSVNPU3RyaW5nIiwic3BsaXQiLCJyZXVuaW9uc0F0RGF5IiwicHVzaCIsIm9kaiIsInBvaW50T2RqIiwicG9pbnRzT2RqIiwiZG9zc2llckxlZ2lzbGF0aWZSZWYiLCJkb3NzaWVyc0xlZ2lzbGF0aWZzUmVmcyIsInJldW5pb25zQXREb3NzaWVyVWlkIiwiYW1lbmRlbWVudEJ5VWlkIiwiQW1lbmRlbWVudHMiLCJkb2N1bWVudEJ5VWlkIiwiZG9zc2llclBhcmxlbWVudGFpcmVCeVNlbmF0Q2hlbWluIiwiZG9zc2llclBhcmxlbWVudGFpcmVCeVRpdHJlQ2hlbWluIiwiZG9zc2llclBhcmxlbWVudGFpcmVCeVVpZCIsIkRvc3NpZXJzTGVnaXNsYXRpZnMiLCJkb3NzaWVyU3BsaXRQYXRoIiwiZG9zc2llckZpbGVuYW1lIiwiZG9zc2llckZpbGVQYXRoIiwiZG9zc2llckpzb24iLCJkb3NzaWVyIiwidGl0cmVEb3NzaWVyIiwic2VuYXRDaGVtaW4iLCJ0aXRyZUNoZW1pbiIsInBob3RvQnlVaWQiLCJQaG90b3MiLCJqc29uRmlsZVBhdGgiLCJTZWl6ZSIsImV4aXN0c1N5bmMiLCJqc29uIiwiT2JqZWN0IiwiYXNzaWduIiwiSlNPTiIsInBhcnNlIiwic2NydXRpbkJ5VWlkIiwiU2NydXRpbnMiLCJsb2FkQXNzZW1ibGVlRGF0YUZyb21CaWdGaWxlcyIsInRvQWN0ZXVyc0V0T3JnYW5lcyIsImFjdGV1cnMiLCJvcmdhbmVzIiwidG9BZ2VuZGFzIiwicmV1bmlvbnMiLCJ0b0FtZW5kZW1lbnRzIiwidGV4dGVMZWdpc2xhdGlmIiwidGV4dGVzTGVnaXNsYXRpZnMiLCJ0b0Rvc3NpZXJzTGVnaXNsYXRpZnMiLCJkb3NzaWVyc1BhcmxlbWVudGFpcmVzIiwidG9TY3J1dGlucyIsImxvYWRBc3NlbWJsZWVQaG90b3NEZXB1dGVzIiwibG9hZEFzc2VtYmxlZVBob3Rvc1NlbmF0ZXVycyIsInBhdGhGcm9tRG9jdW1lbnRVaWQiLCJkb2N1bWVudHNEaXIiLCJtYXRjaCIsImV4ZWMiLCJub3RTdHJpY3RFcXVhbCIsImRvY3VtZW50VHlwZSIsImNoYW1icmVEaXIiLCJyZXB1YmxpcXVlRGlyIiwibGVnaXNsYXR1cmVEaXIiLCJldGF0RGlyIiwibnVtZXJvIiwic3Vic3RyIiwibnVtZXJvTWlsbGllcnNEaXIiLCJlbnN1cmVEaXJTeW5jIiwicGF0aEZyb21Eb3NzaWVyUGFybGVtZW50YWlyZVVpZCIsImRvc3NpZXJzRGlyIiwicGF0aEZyb21SZXVuaW9uVWlkIiwicmV1bmlvbnNEaXIiLCJzZXNzaW9uRGlyIiwiaWREaXIiLCJudW1lcm9NaWxsaW9uc0RpciIsInBhdGhGcm9tU2NydXRpblVpZCIsInNjcnV0aW5zRGlyIl0sInNvdXJjZXMiOlsiLi4vc3JjL2xvYWRlcnMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8vIExvYWQgZGF0YSBmcm9tIGZpbGVzXG5cbmltcG9ydCBhc3NlcnQgZnJvbSBcImFzc2VydFwiXG5pbXBvcnQgZnMgZnJvbSBcImZzLWV4dHJhXCJcbmltcG9ydCBwYXRoIGZyb20gXCJwYXRoXCJcblxuZXhwb3J0IHsgRW5hYmxlZERhdGFzZXRzIH0gZnJvbSBcIi4vZGF0YXNldHNcIlxuaW1wb3J0IHsgZGF0YXNldHMsIEVuYWJsZWREYXRhc2V0cyB9IGZyb20gXCIuL2RhdGFzZXRzXCJcbmV4cG9ydCB7IHdhbGtEaXIgfSBmcm9tIFwiLi9maWxlX3N5c3RlbXNcIlxuaW1wb3J0IHsgd2Fsa0RpciB9IGZyb20gXCIuL2ZpbGVfc3lzdGVtc1wiXG5pbXBvcnQge1xuICBBY3RldXIsXG4gIENvbnZlcnQgYXMgQWN0ZXVyc0V0T3JnYW5lc0NvbnZlcnQsXG4gIE9yZ2FuZSxcbiAgUGhvdG8sXG59IGZyb20gXCIuL3R5cGVzL2FjdGV1cnNfZXRfb3JnYW5lc1wiXG5pbXBvcnQgeyBDb252ZXJ0IGFzIEFnZW5kYXNDb252ZXJ0LCBSZXVuaW9uIH0gZnJvbSBcIi4vdHlwZXMvYWdlbmRhc1wiXG5pbXBvcnQgeyBBbWVuZGVtZW50LCBDb252ZXJ0IGFzIEFtZW5kZW1lbnRzQ29udmVydCB9IGZyb20gXCIuL3R5cGVzL2FtZW5kZW1lbnRzXCJcbmltcG9ydCB7XG4gIENvbnZlcnQgYXMgRG9zc2llcnNMZWdpc2xhdGlmc0NvbnZlcnQsXG4gIERvY3VtZW50LFxuICBEb3NzaWVyUGFybGVtZW50YWlyZSxcbn0gZnJvbSBcIi4vdHlwZXMvZG9zc2llcnNfbGVnaXNsYXRpZnNcIlxuaW1wb3J0IHsgTGVnaXNsYXR1cmUgfSBmcm9tIFwiLi90eXBlcy9sZWdpc2xhdHVyZXNcIlxuaW1wb3J0IHsgQ29udmVydCBhcyBTY3J1dGluc0NvbnZlcnQsIFNjcnV0aW4gfSBmcm9tIFwiLi90eXBlcy9zY3J1dGluc1wiXG5cbmV4cG9ydCBpbnRlcmZhY2UgRGF0YSB7XG4gIHJlYWRvbmx5IGFjdGV1ckJ5VWlkOiB7IFt1aWQ6IHN0cmluZ106IEFjdGV1ciB9XG4gIHJlYWRvbmx5IGFtZW5kZW1lbnRCeVVpZDogeyBbdWlkOiBzdHJpbmddOiBBbWVuZGVtZW50IH1cbiAgcmVhZG9ubHkgZG9jdW1lbnRCeVVpZDogeyBbdWlkOiBzdHJpbmddOiBEb2N1bWVudCB9XG4gIHJlYWRvbmx5IGRvc3NpZXJQYXJsZW1lbnRhaXJlQnlTZW5hdENoZW1pbjoge1xuICAgIFt1aWQ6IHN0cmluZ106IERvc3NpZXJQYXJsZW1lbnRhaXJlXG4gIH1cbiAgcmVhZG9ubHkgZG9zc2llclBhcmxlbWVudGFpcmVCeVRpdHJlQ2hlbWluOiB7XG4gICAgW3VpZDogc3RyaW5nXTogRG9zc2llclBhcmxlbWVudGFpcmVcbiAgfVxuICByZWFkb25seSBkb3NzaWVyUGFybGVtZW50YWlyZUJ5VWlkOiB7IFt1aWQ6IHN0cmluZ106IERvc3NpZXJQYXJsZW1lbnRhaXJlIH1cbiAgcmVhZG9ubHkgb3JnYW5lQnlVaWQ6IHsgW3VpZDogc3RyaW5nXTogT3JnYW5lIH1cbiAgcmVhZG9ubHkgcGhvdG9CeVVpZDogeyBbdWlkOiBzdHJpbmddOiBQaG90byB9XG4gIHJlYWRvbmx5IHJldW5pb25CeVVpZDogeyBbdWlkOiBzdHJpbmddOiBSZXVuaW9uIH1cbiAgcmVhZG9ubHkgcmV1bmlvbnNCeURheTogeyBbZGF5OiBzdHJpbmddOiBSZXVuaW9uW10gfVxuICByZWFkb25seSByZXVuaW9uc0J5RG9zc2llclVpZDogeyBbZG9zc2llclVpZDogc3RyaW5nXTogUmV1bmlvbltdIH1cbiAgcmVhZG9ubHkgc2NydXRpbkJ5VWlkOiB7IFt1aWQ6IHN0cmluZ106IFNjcnV0aW4gfVxufVxuXG5jb25zdCBkb2N1bWVudFVpZFJlZ2V4ID1cbiAgL14oQUNJTnxBTENOfEFWQ0V8QVZJU3xERUNMfEVUREl8TEVUVHxNRVNTfFBJT058UE5SRXxQUkpMfFJBUFB8UklORnxSSU9OKShBTnxTTikoUlxcZCspW0xTXShcXGQrKShCfEJUQXxCVEN8VEFQKShcXGQrKSgtLiopPyQvXG5jb25zdCBkb3NzaWVyVWlkUmVnZXggPSAvXkRMKFJcXGQrKShMXFxkKylOKFxcZCspJC9cbmNvbnN0IHJldW5pb25VaWRSZWdleCA9XG4gIC9eUlUoQU58Q0d8U04pKFJcXGQrKShMXFxkKykoW0FTXVxcZHs0fSkoSURDfElERkw/fElEUykoXFxkKykkL1xuY29uc3Qgc2NydXRpblVpZFJlZ2V4ID0gL15WVEFOKFJcXGQrKShMXFxkKylWKFxcZCspJC9cblxuZXhwb3J0IGZ1bmN0aW9uKiBpdGVyTG9hZEFzc2VtYmxlZUFjdGV1cnMoXG4gIGRhdGFEaXI6IHN0cmluZyxcbiAgbGVnaXNsYXR1cmU6IExlZ2lzbGF0dXJlLFxuICB7IGxvZyA9IGZhbHNlIH0gPSB7fSxcbik6IEdlbmVyYXRvcjxcbiAgeyBhY3RldXI6IEFjdGV1cjsgZGF0YXNldExlZ2lzbGF0dXJlOiBMZWdpc2xhdHVyZSB9LFxuICB2b2lkLFxuICB1bmtub3duXG4+IHtcbiAgY29uc3QgYWN0ZXVyc1VpZCA9IG5ldyBTZXQ8c3RyaW5nPigpXG4gIGZvciAoY29uc3QgZGF0YXNldCBvZiBkYXRhc2V0cy5hY3RldXJzRXRPcmdhbmVzKSB7XG4gICAgaWYgKGRhdGFzZXQuaWdub3JlRm9yV2ViKSB7XG4gICAgICBjb250aW51ZVxuICAgIH1cbiAgICBpZiAoXG4gICAgICBsZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICBkYXRhc2V0LmxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgIGxlZ2lzbGF0dXJlICE9PSBkYXRhc2V0LmxlZ2lzbGF0dXJlXG4gICAgKSB7XG4gICAgICBjb250aW51ZVxuICAgIH1cbiAgICBjb25zdCBkYXRhc2V0RGlyID0gcGF0aC5qb2luKFxuICAgICAgZGF0YURpcixcbiAgICAgIGRhdGFzZXQuZmlsZW5hbWUucmVwbGFjZSgvXFwuanNvbiQvLCBcIl9uZXR0b3llXCIpLFxuICAgIClcblxuICAgIGZvciAoY29uc3QgYWN0ZXVyU3BsaXRQYXRoIG9mIHdhbGtEaXIoZGF0YXNldERpciwgW1wiYWN0ZXVyc1wiXSkpIHtcbiAgICAgIGNvbnN0IGFjdGV1ckZpbGVuYW1lID0gYWN0ZXVyU3BsaXRQYXRoW2FjdGV1clNwbGl0UGF0aC5sZW5ndGggLSAxXVxuICAgICAgaWYgKCFhY3RldXJGaWxlbmFtZS5lbmRzV2l0aChcIi5qc29uXCIpKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBjb25zdCBhY3RldXJGaWxlUGF0aCA9IHBhdGguam9pbihkYXRhc2V0RGlyLCAuLi5hY3RldXJTcGxpdFBhdGgpXG4gICAgICBpZiAobG9nKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBMb2FkaW5nIGZpbGU6ICR7YWN0ZXVyRmlsZVBhdGh94oCmYClcbiAgICAgIH1cbiAgICAgIGNvbnN0IGFjdGV1ckpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhhY3RldXJGaWxlUGF0aCwge1xuICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICB9KVxuICAgICAgY29uc3QgYWN0ZXVyID0gQWN0ZXVyc0V0T3JnYW5lc0NvbnZlcnQudG9BY3RldXIoYWN0ZXVySnNvbilcbiAgICAgIC8vIEtlZXAgdGhlIGZpcnN0IGV4aXN0aW5nIFwiYWN0ZXVyXCIsIGJlY2F1c2UgdGhlIGZpcnN0IHdyYXBwZXIgaXMgdGhlIG1vc3QgY29tcGxldGUuXG4gICAgICBpZiAoYWN0ZXVyc1VpZC5oYXMoYWN0ZXVyLnVpZCkpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGFjdGV1cnNVaWQuYWRkKGFjdGV1ci51aWQpXG4gICAgICB5aWVsZCB7IGFjdGV1ciwgZGF0YXNldExlZ2lzbGF0dXJlOiBkYXRhc2V0LmxlZ2lzbGF0dXJlIH1cbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uKiBpdGVyTG9hZEFzc2VtYmxlZUFtZW5kZW1lbnRzKFxuICBkYXRhRGlyOiBzdHJpbmcsXG4gIGxlZ2lzbGF0dXJlOiBMZWdpc2xhdHVyZSxcbiAgeyBsb2cgPSBmYWxzZSB9ID0ge30sXG4pOiBHZW5lcmF0b3I8XG4gIHsgYW1lbmRlbWVudDogQW1lbmRlbWVudDsgZGF0YXNldExlZ2lzbGF0dXJlOiBMZWdpc2xhdHVyZSB9LFxuICB2b2lkLFxuICB1bmtub3duXG4+IHtcbiAgY29uc3QgYW1lbmRlbWVudHNVaWQgPSBuZXcgU2V0PHN0cmluZz4oKVxuICBmb3IgKGNvbnN0IGRhdGFzZXQgb2YgZGF0YXNldHMuYW1lbmRlbWVudHMpIHtcbiAgICBpZiAoZGF0YXNldC5pZ25vcmVGb3JXZWIpIHtcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuICAgIGlmIChcbiAgICAgIGxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgIGRhdGFzZXQubGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgbGVnaXNsYXR1cmUgIT09IGRhdGFzZXQubGVnaXNsYXR1cmVcbiAgICApIHtcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuICAgIGNvbnN0IGRhdGFzZXREaXIgPSBwYXRoLmpvaW4oXG4gICAgICBkYXRhRGlyLFxuICAgICAgZGF0YXNldC5maWxlbmFtZS5yZXBsYWNlKC9cXC5qc29uJC8sIFwiX25ldHRveWVcIiksXG4gICAgKVxuXG4gICAgZm9yIChjb25zdCBhbWVuZGVtZW50U3BsaXRQYXRoIG9mIHdhbGtEaXIoZGF0YXNldERpcikpIHtcbiAgICAgIGNvbnN0IGFtZW5kZW1lbnRGaWxlbmFtZSA9XG4gICAgICAgIGFtZW5kZW1lbnRTcGxpdFBhdGhbYW1lbmRlbWVudFNwbGl0UGF0aC5sZW5ndGggLSAxXVxuICAgICAgaWYgKCFhbWVuZGVtZW50RmlsZW5hbWUuZW5kc1dpdGgoXCIuanNvblwiKSkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgY29uc3QgYW1lbmRlbWVudEZpbGVQYXRoID0gcGF0aC5qb2luKGRhdGFzZXREaXIsIC4uLmFtZW5kZW1lbnRTcGxpdFBhdGgpXG4gICAgICBpZiAobG9nKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBMb2FkaW5nIGZpbGU6ICR7YW1lbmRlbWVudEZpbGVQYXRofeKApmApXG4gICAgICB9XG4gICAgICBjb25zdCBhbWVuZGVtZW50SnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKGFtZW5kZW1lbnRGaWxlUGF0aCwge1xuICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICB9KVxuICAgICAgY29uc3QgYW1lbmRlbWVudCA9IEFtZW5kZW1lbnRzQ29udmVydC50b0FtZW5kZW1lbnQoYW1lbmRlbWVudEpzb24pXG4gICAgICBpZiAoYW1lbmRlbWVudHNVaWQuaGFzKGFtZW5kZW1lbnQudWlkKSkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgYW1lbmRlbWVudHNVaWQuYWRkKGFtZW5kZW1lbnQudWlkKVxuICAgICAgeWllbGQgeyBhbWVuZGVtZW50LCBkYXRhc2V0TGVnaXNsYXR1cmU6IGRhdGFzZXQubGVnaXNsYXR1cmUgfVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24qIGl0ZXJMb2FkQXNzZW1ibGVlRG9jdW1lbnRzKFxuICBkYXRhRGlyOiBzdHJpbmcsXG4gIGxlZ2lzbGF0dXJlOiBMZWdpc2xhdHVyZSxcbiAgeyBsb2cgPSBmYWxzZSB9ID0ge30sXG4pOiBHZW5lcmF0b3I8XG4gIHsgZG9jdW1lbnQ6IERvY3VtZW50OyBkYXRhc2V0TGVnaXNsYXR1cmU6IExlZ2lzbGF0dXJlIH0sXG4gIHZvaWQsXG4gIHVua25vd25cbj4ge1xuICBjb25zdCBkb2N1bWVudHNVaWQgPSBuZXcgU2V0PHN0cmluZz4oKVxuICBmb3IgKGNvbnN0IGRhdGFzZXQgb2YgZGF0YXNldHMuZG9zc2llcnNMZWdpc2xhdGlmcykge1xuICAgIGlmIChkYXRhc2V0Lmlnbm9yZUZvcldlYikge1xuICAgICAgY29udGludWVcbiAgICB9XG4gICAgaWYgKFxuICAgICAgbGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgZGF0YXNldC5sZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICBsZWdpc2xhdHVyZSAhPT0gZGF0YXNldC5sZWdpc2xhdHVyZVxuICAgICkge1xuICAgICAgY29udGludWVcbiAgICB9XG4gICAgY29uc3QgZGF0YXNldERpciA9IHBhdGguam9pbihcbiAgICAgIGRhdGFEaXIsXG4gICAgICBkYXRhc2V0LmZpbGVuYW1lLnJlcGxhY2UoL1xcLmpzb24kLywgXCJfbmV0dG95ZVwiKSxcbiAgICApXG5cbiAgICBmb3IgKGNvbnN0IGRvY3VtZW50U3BsaXRQYXRoIG9mIHdhbGtEaXIoZGF0YXNldERpciwgW1wiZG9jdW1lbnRzXCJdKSkge1xuICAgICAgY29uc3QgZG9jdW1lbnRGaWxlbmFtZSA9IGRvY3VtZW50U3BsaXRQYXRoW2RvY3VtZW50U3BsaXRQYXRoLmxlbmd0aCAtIDFdXG4gICAgICBpZiAoIWRvY3VtZW50RmlsZW5hbWUuZW5kc1dpdGgoXCIuanNvblwiKSkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgY29uc3QgZG9jdW1lbnRGaWxlUGF0aCA9IHBhdGguam9pbihkYXRhc2V0RGlyLCAuLi5kb2N1bWVudFNwbGl0UGF0aClcbiAgICAgIGlmIChsb2cpIHtcbiAgICAgICAgY29uc29sZS5sb2coYExvYWRpbmcgZmlsZTogJHtkb2N1bWVudEZpbGVQYXRofeKApmApXG4gICAgICB9XG4gICAgICBjb25zdCBkb2N1bWVudEpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhkb2N1bWVudEZpbGVQYXRoLCB7XG4gICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgIH0pXG4gICAgICBjb25zdCBkb2N1bWVudCA9IERvc3NpZXJzTGVnaXNsYXRpZnNDb252ZXJ0LnRvRG9jdW1lbnQoZG9jdW1lbnRKc29uKVxuICAgICAgaWYgKGRvY3VtZW50c1VpZC5oYXMoZG9jdW1lbnQudWlkKSkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgZG9jdW1lbnRzVWlkLmFkZChkb2N1bWVudC51aWQpXG4gICAgICB5aWVsZCB7IGRvY3VtZW50LCBkYXRhc2V0TGVnaXNsYXR1cmU6IGRhdGFzZXQubGVnaXNsYXR1cmUgfVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24qIGl0ZXJMb2FkQXNzZW1ibGVlRG9zc2llcnNQYXJsZW1lbnRhaXJlcyhcbiAgZGF0YURpcjogc3RyaW5nLFxuICBsZWdpc2xhdHVyZTogTGVnaXNsYXR1cmUsXG4gIHsgbG9nID0gZmFsc2UgfSA9IHt9LFxuKTogR2VuZXJhdG9yPFxuICB7XG4gICAgZG9zc2llclBhcmxlbWVudGFpcmU6IERvc3NpZXJQYXJsZW1lbnRhaXJlXG4gICAgZGF0YXNldExlZ2lzbGF0dXJlOiBMZWdpc2xhdHVyZVxuICB9LFxuICB2b2lkLFxuICB1bmtub3duXG4+IHtcbiAgY29uc3QgZG9zc2llcnNQYXJsZW1lbnRhaXJlc1VpZCA9IG5ldyBTZXQ8c3RyaW5nPigpXG4gIGZvciAoY29uc3QgZGF0YXNldCBvZiBkYXRhc2V0cy5kb3NzaWVyc0xlZ2lzbGF0aWZzKSB7XG4gICAgaWYgKGRhdGFzZXQuaWdub3JlRm9yV2ViKSB7XG4gICAgICBjb250aW51ZVxuICAgIH1cbiAgICBpZiAoXG4gICAgICBsZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICBkYXRhc2V0LmxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgIGxlZ2lzbGF0dXJlICE9PSBkYXRhc2V0LmxlZ2lzbGF0dXJlXG4gICAgKSB7XG4gICAgICBjb250aW51ZVxuICAgIH1cbiAgICBjb25zdCBkYXRhc2V0RGlyID0gcGF0aC5qb2luKFxuICAgICAgZGF0YURpcixcbiAgICAgIGRhdGFzZXQuZmlsZW5hbWUucmVwbGFjZSgvXFwuanNvbiQvLCBcIl9uZXR0b3llXCIpLFxuICAgIClcblxuICAgIGZvciAoY29uc3QgZG9zc2llclBhcmxlbWVudGFpcmVTcGxpdFBhdGggb2Ygd2Fsa0RpcihkYXRhc2V0RGlyLCBbXG4gICAgICBcImRvc3NpZXJzXCIsXG4gICAgXSkpIHtcbiAgICAgIGNvbnN0IGRvc3NpZXJQYXJsZW1lbnRhaXJlRmlsZW5hbWUgPVxuICAgICAgICBkb3NzaWVyUGFybGVtZW50YWlyZVNwbGl0UGF0aFtkb3NzaWVyUGFybGVtZW50YWlyZVNwbGl0UGF0aC5sZW5ndGggLSAxXVxuICAgICAgaWYgKCFkb3NzaWVyUGFybGVtZW50YWlyZUZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGNvbnN0IGRvc3NpZXJQYXJsZW1lbnRhaXJlRmlsZVBhdGggPSBwYXRoLmpvaW4oXG4gICAgICAgIGRhdGFzZXREaXIsXG4gICAgICAgIC4uLmRvc3NpZXJQYXJsZW1lbnRhaXJlU3BsaXRQYXRoLFxuICAgICAgKVxuICAgICAgaWYgKGxvZykge1xuICAgICAgICBjb25zb2xlLmxvZyhgTG9hZGluZyBmaWxlOiAke2Rvc3NpZXJQYXJsZW1lbnRhaXJlRmlsZVBhdGh94oCmYClcbiAgICAgIH1cbiAgICAgIGNvbnN0IGRvc3NpZXJQYXJsZW1lbnRhaXJlSnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKFxuICAgICAgICBkb3NzaWVyUGFybGVtZW50YWlyZUZpbGVQYXRoLFxuICAgICAgICB7XG4gICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICB9LFxuICAgICAgKVxuICAgICAgY29uc3QgZG9zc2llclBhcmxlbWVudGFpcmUgPVxuICAgICAgICBEb3NzaWVyc0xlZ2lzbGF0aWZzQ29udmVydC50b0Rvc3NpZXJQYXJsZW1lbnRhaXJlKFxuICAgICAgICAgIGRvc3NpZXJQYXJsZW1lbnRhaXJlSnNvbixcbiAgICAgICAgKVxuICAgICAgaWYgKGRvc3NpZXJzUGFybGVtZW50YWlyZXNVaWQuaGFzKGRvc3NpZXJQYXJsZW1lbnRhaXJlLnVpZCkpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGRvc3NpZXJzUGFybGVtZW50YWlyZXNVaWQuYWRkKGRvc3NpZXJQYXJsZW1lbnRhaXJlLnVpZClcbiAgICAgIHlpZWxkIHsgZG9zc2llclBhcmxlbWVudGFpcmUsIGRhdGFzZXRMZWdpc2xhdHVyZTogZGF0YXNldC5sZWdpc2xhdHVyZSB9XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiogaXRlckxvYWRBc3NlbWJsZWVPcmdhbmVzKFxuICBkYXRhRGlyOiBzdHJpbmcsXG4gIGxlZ2lzbGF0dXJlOiBMZWdpc2xhdHVyZSxcbiAgeyBsb2cgPSBmYWxzZSB9ID0ge30sXG4pOiBHZW5lcmF0b3I8XG4gIHsgb3JnYW5lOiBPcmdhbmU7IGRhdGFzZXRMZWdpc2xhdHVyZTogTGVnaXNsYXR1cmUgfSxcbiAgdm9pZCxcbiAgdW5rbm93blxuPiB7XG4gIGNvbnN0IG9yZ2FuZXNVaWQgPSBuZXcgU2V0PHN0cmluZz4oKVxuICBmb3IgKGNvbnN0IGRhdGFzZXQgb2YgZGF0YXNldHMuYWN0ZXVyc0V0T3JnYW5lcykge1xuICAgIGlmIChkYXRhc2V0Lmlnbm9yZUZvcldlYikge1xuICAgICAgY29udGludWVcbiAgICB9XG4gICAgaWYgKFxuICAgICAgbGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgZGF0YXNldC5sZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICBsZWdpc2xhdHVyZSAhPT0gZGF0YXNldC5sZWdpc2xhdHVyZVxuICAgICkge1xuICAgICAgY29udGludWVcbiAgICB9XG4gICAgY29uc3QgZGF0YXNldERpciA9IHBhdGguam9pbihcbiAgICAgIGRhdGFEaXIsXG4gICAgICBkYXRhc2V0LmZpbGVuYW1lLnJlcGxhY2UoL1xcLmpzb24kLywgXCJfbmV0dG95ZVwiKSxcbiAgICApXG5cbiAgICBmb3IgKGNvbnN0IG9yZ2FuZVNwbGl0UGF0aCBvZiB3YWxrRGlyKGRhdGFzZXREaXIsIFtcIm9yZ2FuZXNcIl0pKSB7XG4gICAgICBjb25zdCBvcmdhbmVGaWxlbmFtZSA9IG9yZ2FuZVNwbGl0UGF0aFtvcmdhbmVTcGxpdFBhdGgubGVuZ3RoIC0gMV1cbiAgICAgIGlmICghb3JnYW5lRmlsZW5hbWUuZW5kc1dpdGgoXCIuanNvblwiKSkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgY29uc3Qgb3JnYW5lRmlsZVBhdGggPSBwYXRoLmpvaW4oZGF0YXNldERpciwgLi4ub3JnYW5lU3BsaXRQYXRoKVxuICAgICAgaWYgKGxvZykge1xuICAgICAgICBjb25zb2xlLmxvZyhgTG9hZGluZyBmaWxlOiAke29yZ2FuZUZpbGVQYXRofeKApmApXG4gICAgICB9XG4gICAgICBjb25zdCBvcmdhbmVKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMob3JnYW5lRmlsZVBhdGgsIHtcbiAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgfSlcbiAgICAgIGNvbnN0IG9yZ2FuZSA9IEFjdGV1cnNFdE9yZ2FuZXNDb252ZXJ0LnRvT3JnYW5lKG9yZ2FuZUpzb24pXG4gICAgICAvLyBLZWVwIHRoZSBmaXJzdCBleGlzdGluZyBcIm9yZ2FuZVwiLCBiZWNhdXNlIHRoZSBmaXJzdCB3cmFwcGVyIGlzIHRoZSBtb3N0IGNvbXBsZXRlLlxuICAgICAgaWYgKG9yZ2FuZXNVaWQuaGFzKG9yZ2FuZS51aWQpKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBvcmdhbmVzVWlkLmFkZChvcmdhbmUudWlkKVxuICAgICAgeWllbGQgeyBvcmdhbmUsIGRhdGFzZXRMZWdpc2xhdHVyZTogZGF0YXNldC5sZWdpc2xhdHVyZSB9XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiogaXRlckxvYWRBc3NlbWJsZWVSZXVuaW9ucyhcbiAgZGF0YURpcjogc3RyaW5nLFxuICBsZWdpc2xhdHVyZTogTGVnaXNsYXR1cmUsXG4gIHsgbG9nID0gZmFsc2UgfSA9IHt9LFxuKTogR2VuZXJhdG9yPFxuICB7IHJldW5pb246IFJldW5pb247IGRhdGFzZXRMZWdpc2xhdHVyZTogTGVnaXNsYXR1cmUgfSxcbiAgdm9pZCxcbiAgdW5rbm93blxuPiB7XG4gIGNvbnN0IHJldW5pb25zVWlkID0gbmV3IFNldDxzdHJpbmc+KClcbiAgZm9yIChjb25zdCBkYXRhc2V0IG9mIGRhdGFzZXRzLmFnZW5kYXMpIHtcbiAgICBpZiAoZGF0YXNldC5pZ25vcmVGb3JXZWIpIHtcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuICAgIGlmIChcbiAgICAgIGxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgIGRhdGFzZXQubGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgbGVnaXNsYXR1cmUgIT09IGRhdGFzZXQubGVnaXNsYXR1cmVcbiAgICApIHtcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuICAgIGNvbnN0IGRhdGFzZXREaXIgPSBwYXRoLmpvaW4oXG4gICAgICBkYXRhRGlyLFxuICAgICAgZGF0YXNldC5maWxlbmFtZS5yZXBsYWNlKC9cXC5qc29uJC8sIFwiX25ldHRveWVcIiksXG4gICAgKVxuXG4gICAgZm9yIChjb25zdCByZXVuaW9uU3BsaXRQYXRoIG9mIHdhbGtEaXIoZGF0YXNldERpcikpIHtcbiAgICAgIGNvbnN0IHJldW5pb25GaWxlbmFtZSA9IHJldW5pb25TcGxpdFBhdGhbcmV1bmlvblNwbGl0UGF0aC5sZW5ndGggLSAxXVxuICAgICAgaWYgKCFyZXVuaW9uRmlsZW5hbWUuZW5kc1dpdGgoXCIuanNvblwiKSkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgY29uc3QgcmV1bmlvbkZpbGVQYXRoID0gcGF0aC5qb2luKGRhdGFzZXREaXIsIC4uLnJldW5pb25TcGxpdFBhdGgpXG4gICAgICBpZiAobG9nKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBMb2FkaW5nIGZpbGU6ICR7cmV1bmlvbkZpbGVQYXRofeKApmApXG4gICAgICB9XG4gICAgICBjb25zdCByZXVuaW9uSnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKHJldW5pb25GaWxlUGF0aCwge1xuICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICB9KVxuICAgICAgY29uc3QgcmV1bmlvbiA9IEFnZW5kYXNDb252ZXJ0LnRvUmV1bmlvbihyZXVuaW9uSnNvbilcbiAgICAgIGlmIChyZXVuaW9uc1VpZC5oYXMocmV1bmlvbi51aWQpKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICByZXVuaW9uc1VpZC5hZGQocmV1bmlvbi51aWQpXG4gICAgICB5aWVsZCB7IHJldW5pb24sIGRhdGFzZXRMZWdpc2xhdHVyZTogZGF0YXNldC5sZWdpc2xhdHVyZSB9XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiogaXRlckxvYWRBc3NlbWJsZWVTY3J1dGlucyhcbiAgZGF0YURpcjogc3RyaW5nLFxuICBsZWdpc2xhdHVyZTogTGVnaXNsYXR1cmUsXG4gIHsgbG9nID0gZmFsc2UgfSA9IHt9LFxuKTogR2VuZXJhdG9yPFxuICB7IHNjcnV0aW46IFNjcnV0aW47IGRhdGFzZXRMZWdpc2xhdHVyZTogTGVnaXNsYXR1cmUgfSxcbiAgdm9pZCxcbiAgdW5rbm93blxuPiB7XG4gIGNvbnN0IHNjcnV0aW5zVWlkID0gbmV3IFNldDxzdHJpbmc+KClcbiAgZm9yIChjb25zdCBkYXRhc2V0IG9mIGRhdGFzZXRzLnNjcnV0aW5zKSB7XG4gICAgaWYgKGRhdGFzZXQuaWdub3JlRm9yV2ViKSB7XG4gICAgICBjb250aW51ZVxuICAgIH1cbiAgICBpZiAoXG4gICAgICBsZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICBkYXRhc2V0LmxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgIGxlZ2lzbGF0dXJlICE9PSBkYXRhc2V0LmxlZ2lzbGF0dXJlXG4gICAgKSB7XG4gICAgICBjb250aW51ZVxuICAgIH1cbiAgICBjb25zdCBkYXRhc2V0RGlyID0gcGF0aC5qb2luKFxuICAgICAgZGF0YURpcixcbiAgICAgIGRhdGFzZXQuZmlsZW5hbWUucmVwbGFjZSgvXFwuanNvbiQvLCBcIl9uZXR0b3llXCIpLFxuICAgIClcblxuICAgIGZvciAoY29uc3Qgc2NydXRpblNwbGl0UGF0aCBvZiB3YWxrRGlyKGRhdGFzZXREaXIpKSB7XG4gICAgICBjb25zdCBzY3J1dGluRmlsZW5hbWUgPSBzY3J1dGluU3BsaXRQYXRoW3NjcnV0aW5TcGxpdFBhdGgubGVuZ3RoIC0gMV1cbiAgICAgIGlmICghc2NydXRpbkZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGNvbnN0IHNjcnV0aW5GaWxlUGF0aCA9IHBhdGguam9pbihkYXRhc2V0RGlyLCAuLi5zY3J1dGluU3BsaXRQYXRoKVxuICAgICAgaWYgKGxvZykge1xuICAgICAgICBjb25zb2xlLmxvZyhgTG9hZGluZyBmaWxlOiAke3NjcnV0aW5GaWxlUGF0aH3igKZgKVxuICAgICAgfVxuICAgICAgY29uc3Qgc2NydXRpbkpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhzY3J1dGluRmlsZVBhdGgsIHtcbiAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgfSlcbiAgICAgIGNvbnN0IHNjcnV0aW4gPSBTY3J1dGluc0NvbnZlcnQudG9TY3J1dGluKHNjcnV0aW5Kc29uKVxuICAgICAgaWYgKHNjcnV0aW5zVWlkLmhhcyhzY3J1dGluLnVpZCkpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIHNjcnV0aW5zVWlkLmFkZChzY3J1dGluLnVpZClcbiAgICAgIHlpZWxkIHsgc2NydXRpbiwgZGF0YXNldExlZ2lzbGF0dXJlOiBkYXRhc2V0LmxlZ2lzbGF0dXJlIH1cbiAgICB9XG4gIH1cbn1cblxuLy8vIExvYWQgZGF0YSBmcm9tIHNwbGl0IGZpbGVzLlxuLy8vIERlcHJlY2F0ZWQ6IFVzZSBpdGVyTG9hZC4uLiBpdGVyYXRvcnMgaW5zdGVhZC5cbmV4cG9ydCBmdW5jdGlvbiBsb2FkQXNzZW1ibGVlRGF0YShcbiAgZGF0YURpcjogc3RyaW5nLFxuICBlbmFibGVkRGF0YXNldHM6IEVuYWJsZWREYXRhc2V0cyxcbiAgbGVnaXNsYXR1cmU6IExlZ2lzbGF0dXJlLFxuICB7IGxvZyA9IGZhbHNlIH0gPSB7fSxcbik6IERhdGEge1xuICBjb25zdCBhY3RldXJCeVVpZDogeyBbdWlkOiBzdHJpbmddOiBBY3RldXIgfSA9IHt9XG4gIGNvbnN0IG9yZ2FuZUJ5VWlkOiB7IFt1aWQ6IHN0cmluZ106IE9yZ2FuZSB9ID0ge31cbiAgaWYgKGVuYWJsZWREYXRhc2V0cyAmIEVuYWJsZWREYXRhc2V0cy5BY3RldXJzRXRPcmdhbmVzKSB7XG4gICAgZm9yIChjb25zdCBkYXRhc2V0IG9mIGRhdGFzZXRzLmFjdGV1cnNFdE9yZ2FuZXMpIHtcbiAgICAgIGlmIChkYXRhc2V0Lmlnbm9yZUZvcldlYikge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgaWYgKFxuICAgICAgICBsZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICAgIGRhdGFzZXQubGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgICBsZWdpc2xhdHVyZSAhPT0gZGF0YXNldC5sZWdpc2xhdHVyZVxuICAgICAgKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBjb25zdCBkYXRhc2V0RGlyID0gcGF0aC5qb2luKFxuICAgICAgICBkYXRhRGlyLFxuICAgICAgICBkYXRhc2V0LmZpbGVuYW1lLnJlcGxhY2UoL1xcLmpzb24kLywgXCJfbmV0dG95ZVwiKSxcbiAgICAgIClcblxuICAgICAgZm9yIChjb25zdCBhY3RldXJTcGxpdFBhdGggb2Ygd2Fsa0RpcihkYXRhc2V0RGlyLCBbXCJhY3RldXJzXCJdKSkge1xuICAgICAgICBjb25zdCBhY3RldXJGaWxlbmFtZSA9IGFjdGV1clNwbGl0UGF0aFthY3RldXJTcGxpdFBhdGgubGVuZ3RoIC0gMV1cbiAgICAgICAgaWYgKCFhY3RldXJGaWxlbmFtZS5lbmRzV2l0aChcIi5qc29uXCIpKSB7XG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBhY3RldXJGaWxlUGF0aCA9IHBhdGguam9pbihkYXRhc2V0RGlyLCAuLi5hY3RldXJTcGxpdFBhdGgpXG4gICAgICAgIGlmIChsb2cpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgTG9hZGluZyBmaWxlOiAke2FjdGV1ckZpbGVQYXRofeKApmApXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYWN0ZXVySnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKGFjdGV1ckZpbGVQYXRoLCB7XG4gICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICB9KVxuICAgICAgICBjb25zdCBhY3RldXIgPSBBY3RldXJzRXRPcmdhbmVzQ29udmVydC50b0FjdGV1cihhY3RldXJKc29uKVxuICAgICAgICAvLyBLZWVwIHRoZSBmaXJzdCBleGlzdGluZyBcImFjdGV1clwiLCBiZWNhdXNlIHRoZSBmaXJzdCB3cmFwcGVyIGlzIHRoZSBtb3N0IGNvbXBsZXRlLlxuICAgICAgICBpZiAoYWN0ZXVyQnlVaWRbYWN0ZXVyLnVpZF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGFjdGV1ckJ5VWlkW2FjdGV1ci51aWRdID0gYWN0ZXVyXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgZm9yIChjb25zdCBvcmdhbmVTcGxpdFBhdGggb2Ygd2Fsa0RpcihkYXRhc2V0RGlyLCBbXCJvcmdhbmVzXCJdKSkge1xuICAgICAgICBjb25zdCBvcmdhbmVGaWxlbmFtZSA9IG9yZ2FuZVNwbGl0UGF0aFtvcmdhbmVTcGxpdFBhdGgubGVuZ3RoIC0gMV1cbiAgICAgICAgaWYgKCFvcmdhbmVGaWxlbmFtZS5lbmRzV2l0aChcIi5qc29uXCIpKSB7XG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBvcmdhbmVGaWxlUGF0aCA9IHBhdGguam9pbihkYXRhc2V0RGlyLCAuLi5vcmdhbmVTcGxpdFBhdGgpXG4gICAgICAgIGlmIChsb2cpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgTG9hZGluZyBmaWxlOiAke29yZ2FuZUZpbGVQYXRofeKApmApXG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgb3JnYW5lSnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKG9yZ2FuZUZpbGVQYXRoLCB7XG4gICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICB9KVxuICAgICAgICBjb25zdCBvcmdhbmUgPSBBY3RldXJzRXRPcmdhbmVzQ29udmVydC50b09yZ2FuZShvcmdhbmVKc29uKVxuICAgICAgICAvLyBLZWVwIHRoZSBmaXJzdCBleGlzdGluZyBcIm9yZ2FuZVwiLCBiZWNhdXNlIHRoZSBmaXJzdCB3cmFwcGVyIGlzIHRoZSBtb3N0IGNvbXBsZXRlLlxuICAgICAgICBpZiAob3JnYW5lQnlVaWRbb3JnYW5lLnVpZF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIG9yZ2FuZUJ5VWlkW29yZ2FuZS51aWRdID0gb3JnYW5lXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjb25zdCByZXVuaW9uQnlVaWQ6IHsgW3VpZDogc3RyaW5nXTogUmV1bmlvbiB9ID0ge31cbiAgY29uc3QgcmV1bmlvbnNCeURheTogeyBbZGF5OiBzdHJpbmddOiBSZXVuaW9uW10gfSA9IHt9XG4gIGNvbnN0IHJldW5pb25zQnlEb3NzaWVyVWlkOiB7IFtkb3NzaWVyVWlkOiBzdHJpbmddOiBSZXVuaW9uW10gfSA9IHt9XG4gIGlmIChlbmFibGVkRGF0YXNldHMgJiBFbmFibGVkRGF0YXNldHMuQWdlbmRhcykge1xuICAgIGZvciAoY29uc3QgZGF0YXNldCBvZiBkYXRhc2V0cy5hZ2VuZGFzKSB7XG4gICAgICBpZiAoZGF0YXNldC5pZ25vcmVGb3JXZWIpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGlmIChcbiAgICAgICAgbGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgICBkYXRhc2V0LmxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgICAgbGVnaXNsYXR1cmUgIT09IGRhdGFzZXQubGVnaXNsYXR1cmVcbiAgICAgICkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgY29uc3QgZGF0YXNldERpciA9IHBhdGguam9pbihcbiAgICAgICAgZGF0YURpcixcbiAgICAgICAgZGF0YXNldC5maWxlbmFtZS5yZXBsYWNlKC9cXC5qc29uJC8sIFwiX25ldHRveWVcIiksXG4gICAgICApXG4gICAgICBmb3IgKGNvbnN0IHJldW5pb25TcGxpdFBhdGggb2Ygd2Fsa0RpcihkYXRhc2V0RGlyKSkge1xuICAgICAgICBjb25zdCByZXVuaW9uRmlsZW5hbWUgPSByZXVuaW9uU3BsaXRQYXRoW3JldW5pb25TcGxpdFBhdGgubGVuZ3RoIC0gMV1cbiAgICAgICAgaWYgKCFyZXVuaW9uRmlsZW5hbWUuZW5kc1dpdGgoXCIuanNvblwiKSkge1xuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmV1bmlvbkZpbGVQYXRoID0gcGF0aC5qb2luKGRhdGFzZXREaXIsIC4uLnJldW5pb25TcGxpdFBhdGgpXG4gICAgICAgIGlmIChsb2cpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgTG9hZGluZyBmaWxlOiAke3JldW5pb25GaWxlUGF0aH3igKZgKVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJldW5pb25Kc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMocmV1bmlvbkZpbGVQYXRoLCB7XG4gICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICB9KVxuICAgICAgICBjb25zdCByZXVuaW9uID0gQWdlbmRhc0NvbnZlcnQudG9SZXVuaW9uKHJldW5pb25Kc29uKVxuICAgICAgICBpZiAocmV1bmlvbkJ5VWlkW3JldW5pb24udWlkXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgcmV1bmlvbkJ5VWlkW3JldW5pb24udWlkXSA9IHJldW5pb25cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGRheSA9IHJldW5pb24udGltZXN0YW1wRGVidXQudG9JU09TdHJpbmcoKS5zcGxpdChcIlRcIilbMF1cbiAgICAgICAgbGV0IHJldW5pb25zQXREYXkgPSByZXVuaW9uc0J5RGF5W2RheV1cbiAgICAgICAgaWYgKHJldW5pb25zQXREYXkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHJldW5pb25zQXREYXkgPSByZXVuaW9uc0J5RGF5W2RheV0gPSBbXVxuICAgICAgICB9XG4gICAgICAgIHJldW5pb25zQXREYXkucHVzaChyZXVuaW9uKVxuXG4gICAgICAgIGNvbnN0IG9kaiA9IHJldW5pb24ub2RqXG4gICAgICAgIGlmIChvZGogIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGZvciAoY29uc3QgcG9pbnRPZGogb2Ygb2RqLnBvaW50c09kaiB8fCBbXSkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBkb3NzaWVyTGVnaXNsYXRpZlJlZiBvZiBwb2ludE9kai5kb3NzaWVyc0xlZ2lzbGF0aWZzUmVmcyB8fFxuICAgICAgICAgICAgICBbXSkge1xuICAgICAgICAgICAgICBsZXQgcmV1bmlvbnNBdERvc3NpZXJVaWQgPVxuICAgICAgICAgICAgICAgIHJldW5pb25zQnlEb3NzaWVyVWlkW2Rvc3NpZXJMZWdpc2xhdGlmUmVmXVxuICAgICAgICAgICAgICBpZiAocmV1bmlvbnNBdERvc3NpZXJVaWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHJldW5pb25zQXREb3NzaWVyVWlkID0gcmV1bmlvbnNCeURvc3NpZXJVaWRbXG4gICAgICAgICAgICAgICAgICBkb3NzaWVyTGVnaXNsYXRpZlJlZlxuICAgICAgICAgICAgICAgIF0gPSBbXVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJldW5pb25zQXREb3NzaWVyVWlkLnB1c2gocmV1bmlvbilcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjb25zdCBhbWVuZGVtZW50QnlVaWQ6IHsgW3VpZDogc3RyaW5nXTogQW1lbmRlbWVudCB9ID0ge31cbiAgaWYgKGVuYWJsZWREYXRhc2V0cyAmIEVuYWJsZWREYXRhc2V0cy5BbWVuZGVtZW50cykge1xuICAgIGZvciAoY29uc3QgZGF0YXNldCBvZiBkYXRhc2V0cy5hbWVuZGVtZW50cykge1xuICAgICAgaWYgKGRhdGFzZXQuaWdub3JlRm9yV2ViKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBpZiAoXG4gICAgICAgIGxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgICAgZGF0YXNldC5sZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICAgIGxlZ2lzbGF0dXJlICE9PSBkYXRhc2V0LmxlZ2lzbGF0dXJlXG4gICAgICApIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGNvbnN0IGRhdGFzZXREaXIgPSBwYXRoLmpvaW4oXG4gICAgICAgIGRhdGFEaXIsXG4gICAgICAgIGRhdGFzZXQuZmlsZW5hbWUucmVwbGFjZSgvXFwuanNvbiQvLCBcIl9uZXR0b3llXCIpLFxuICAgICAgKVxuXG4gICAgICBmb3IgKGNvbnN0IGFtZW5kZW1lbnRTcGxpdFBhdGggb2Ygd2Fsa0RpcihkYXRhc2V0RGlyKSkge1xuICAgICAgICBjb25zdCBhbWVuZGVtZW50RmlsZW5hbWUgPVxuICAgICAgICAgIGFtZW5kZW1lbnRTcGxpdFBhdGhbYW1lbmRlbWVudFNwbGl0UGF0aC5sZW5ndGggLSAxXVxuICAgICAgICBpZiAoIWFtZW5kZW1lbnRGaWxlbmFtZS5lbmRzV2l0aChcIi5qc29uXCIpKSB7XG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBhbWVuZGVtZW50RmlsZVBhdGggPSBwYXRoLmpvaW4oZGF0YXNldERpciwgLi4uYW1lbmRlbWVudFNwbGl0UGF0aClcbiAgICAgICAgaWYgKGxvZykge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGBMb2FkaW5nIGZpbGU6ICR7YW1lbmRlbWVudEZpbGVQYXRofeKApmApXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYW1lbmRlbWVudEpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhhbWVuZGVtZW50RmlsZVBhdGgsIHtcbiAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgIH0pXG4gICAgICAgIGNvbnN0IGFtZW5kZW1lbnQgPSBBbWVuZGVtZW50c0NvbnZlcnQudG9BbWVuZGVtZW50KGFtZW5kZW1lbnRKc29uKVxuICAgICAgICBpZiAoYW1lbmRlbWVudEJ5VWlkW2FtZW5kZW1lbnQudWlkXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgYW1lbmRlbWVudEJ5VWlkW2FtZW5kZW1lbnQudWlkXSA9IGFtZW5kZW1lbnRcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGRvY3VtZW50QnlVaWQ6IHsgW3VpZDogc3RyaW5nXTogRG9jdW1lbnQgfSA9IHt9XG4gIGNvbnN0IGRvc3NpZXJQYXJsZW1lbnRhaXJlQnlTZW5hdENoZW1pbjoge1xuICAgIFt1aWQ6IHN0cmluZ106IERvc3NpZXJQYXJsZW1lbnRhaXJlXG4gIH0gPSB7fVxuICBjb25zdCBkb3NzaWVyUGFybGVtZW50YWlyZUJ5VGl0cmVDaGVtaW46IHtcbiAgICBbdWlkOiBzdHJpbmddOiBEb3NzaWVyUGFybGVtZW50YWlyZVxuICB9ID0ge31cbiAgY29uc3QgZG9zc2llclBhcmxlbWVudGFpcmVCeVVpZDogeyBbdWlkOiBzdHJpbmddOiBEb3NzaWVyUGFybGVtZW50YWlyZSB9ID0ge31cbiAgaWYgKGVuYWJsZWREYXRhc2V0cyAmIEVuYWJsZWREYXRhc2V0cy5Eb3NzaWVyc0xlZ2lzbGF0aWZzKSB7XG4gICAgZm9yIChjb25zdCBkYXRhc2V0IG9mIGRhdGFzZXRzLmRvc3NpZXJzTGVnaXNsYXRpZnMpIHtcbiAgICAgIGlmIChkYXRhc2V0Lmlnbm9yZUZvcldlYikge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgaWYgKFxuICAgICAgICBsZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICAgIGRhdGFzZXQubGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgICBsZWdpc2xhdHVyZSAhPT0gZGF0YXNldC5sZWdpc2xhdHVyZVxuICAgICAgKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBjb25zdCBkYXRhc2V0RGlyID0gcGF0aC5qb2luKFxuICAgICAgICBkYXRhRGlyLFxuICAgICAgICBkYXRhc2V0LmZpbGVuYW1lLnJlcGxhY2UoL1xcLmpzb24kLywgXCJfbmV0dG95ZVwiKSxcbiAgICAgIClcblxuICAgICAgZm9yIChjb25zdCBkb2N1bWVudFNwbGl0UGF0aCBvZiB3YWxrRGlyKGRhdGFzZXREaXIsIFtcImRvY3VtZW50c1wiXSkpIHtcbiAgICAgICAgY29uc3QgZG9jdW1lbnRGaWxlbmFtZSA9IGRvY3VtZW50U3BsaXRQYXRoW2RvY3VtZW50U3BsaXRQYXRoLmxlbmd0aCAtIDFdXG4gICAgICAgIGlmICghZG9jdW1lbnRGaWxlbmFtZS5lbmRzV2l0aChcIi5qc29uXCIpKSB7XG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkb2N1bWVudEZpbGVQYXRoID0gcGF0aC5qb2luKGRhdGFzZXREaXIsIC4uLmRvY3VtZW50U3BsaXRQYXRoKVxuICAgICAgICBpZiAobG9nKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coYExvYWRpbmcgZmlsZTogJHtkb2N1bWVudEZpbGVQYXRofeKApmApXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZG9jdW1lbnRKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoZG9jdW1lbnRGaWxlUGF0aCwge1xuICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgfSlcbiAgICAgICAgY29uc3QgZG9jdW1lbnQgPSBEb3NzaWVyc0xlZ2lzbGF0aWZzQ29udmVydC50b0RvY3VtZW50KGRvY3VtZW50SnNvbilcbiAgICAgICAgaWYgKGRvY3VtZW50QnlVaWRbZG9jdW1lbnQudWlkXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgZG9jdW1lbnRCeVVpZFtkb2N1bWVudC51aWRdID0gZG9jdW1lbnRcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBmb3IgKGNvbnN0IGRvc3NpZXJTcGxpdFBhdGggb2Ygd2Fsa0RpcihkYXRhc2V0RGlyLCBbXCJkb3NzaWVyc1wiXSkpIHtcbiAgICAgICAgY29uc3QgZG9zc2llckZpbGVuYW1lID0gZG9zc2llclNwbGl0UGF0aFtkb3NzaWVyU3BsaXRQYXRoLmxlbmd0aCAtIDFdXG4gICAgICAgIGlmICghZG9zc2llckZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRvc3NpZXJGaWxlUGF0aCA9IHBhdGguam9pbihkYXRhc2V0RGlyLCAuLi5kb3NzaWVyU3BsaXRQYXRoKVxuICAgICAgICBpZiAobG9nKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coYExvYWRpbmcgZmlsZTogJHtkb3NzaWVyRmlsZVBhdGh94oCmYClcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkb3NzaWVySnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKGRvc3NpZXJGaWxlUGF0aCwge1xuICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgfSlcbiAgICAgICAgY29uc3QgZG9zc2llciA9XG4gICAgICAgICAgRG9zc2llcnNMZWdpc2xhdGlmc0NvbnZlcnQudG9Eb3NzaWVyUGFybGVtZW50YWlyZShkb3NzaWVySnNvbilcbiAgICAgICAgY29uc3QgdGl0cmVEb3NzaWVyID0gZG9zc2llci50aXRyZURvc3NpZXJcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHRpdHJlRG9zc2llci5zZW5hdENoZW1pbiAmJlxuICAgICAgICAgIGRvc3NpZXJQYXJsZW1lbnRhaXJlQnlTZW5hdENoZW1pblt0aXRyZURvc3NpZXIuc2VuYXRDaGVtaW5dID09PVxuICAgICAgICAgICAgdW5kZWZpbmVkXG4gICAgICAgICkge1xuICAgICAgICAgIGRvc3NpZXJQYXJsZW1lbnRhaXJlQnlTZW5hdENoZW1pblt0aXRyZURvc3NpZXIuc2VuYXRDaGVtaW5dID0gZG9zc2llclxuICAgICAgICB9XG4gICAgICAgIGlmIChcbiAgICAgICAgICB0aXRyZURvc3NpZXIudGl0cmVDaGVtaW4gJiZcbiAgICAgICAgICBkb3NzaWVyUGFybGVtZW50YWlyZUJ5VGl0cmVDaGVtaW5bdGl0cmVEb3NzaWVyLnRpdHJlQ2hlbWluXSA9PT1cbiAgICAgICAgICAgIHVuZGVmaW5lZFxuICAgICAgICApIHtcbiAgICAgICAgICBkb3NzaWVyUGFybGVtZW50YWlyZUJ5VGl0cmVDaGVtaW5bdGl0cmVEb3NzaWVyLnRpdHJlQ2hlbWluXSA9IGRvc3NpZXJcbiAgICAgICAgfVxuICAgICAgICBpZiAoZG9zc2llclBhcmxlbWVudGFpcmVCeVVpZFtkb3NzaWVyLnVpZF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGRvc3NpZXJQYXJsZW1lbnRhaXJlQnlVaWRbZG9zc2llci51aWRdID0gZG9zc2llclxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgbGV0IHBob3RvQnlVaWQ6IHsgW3VpZDogc3RyaW5nXTogUGhvdG8gfSA9IHt9XG4gIGlmIChlbmFibGVkRGF0YXNldHMgJiBFbmFibGVkRGF0YXNldHMuUGhvdG9zKSB7XG4gICAge1xuICAgICAgY29uc3QganNvbkZpbGVQYXRoOiBzdHJpbmcgPSBwYXRoLmpvaW4oXG4gICAgICAgIGRhdGFEaXIsXG4gICAgICAgIGBwaG90b3NfZGVwdXRlc18ke1xuICAgICAgICAgIC8vIFRPRE86IEhhbmRsZSBMZWdpc2xhdHVyZS5BbGwuXG4gICAgICAgICAgbGVnaXNsYXR1cmUgPT09IExlZ2lzbGF0dXJlLkFsbCA/IExlZ2lzbGF0dXJlLlNlaXplIDogbGVnaXNsYXR1cmVcbiAgICAgICAgfWAsXG4gICAgICAgIFwiZGVwdXRlcy5qc29uXCIsXG4gICAgICApXG4gICAgICBpZiAoZnMuZXhpc3RzU3luYyhqc29uRmlsZVBhdGgpKSB7XG4gICAgICAgIGlmIChsb2cpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgTG9hZGluZyBmaWxlOiAke2pzb25GaWxlUGF0aH1gKVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhqc29uRmlsZVBhdGgsIHsgZW5jb2Rpbmc6IFwidXRmOFwiIH0pXG4gICAgICAgIE9iamVjdC5hc3NpZ24ocGhvdG9CeVVpZCwgSlNPTi5wYXJzZShqc29uKSlcbiAgICAgIH0gZWxzZSBpZiAobG9nKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBJZ25vcmluZyBtaXNzaW5nIGZpbGU6ICR7anNvbkZpbGVQYXRofWApXG4gICAgICB9XG4gICAgfVxuXG4gICAge1xuICAgICAgY29uc3QganNvbkZpbGVQYXRoOiBzdHJpbmcgPSBwYXRoLmpvaW4oXG4gICAgICAgIGRhdGFEaXIsXG4gICAgICAgIFwicGhvdG9zX3NlbmF0ZXVyc1wiLFxuICAgICAgICBcInNlbmF0ZXVycy5qc29uXCIsXG4gICAgICApXG4gICAgICBpZiAoZnMuZXhpc3RzU3luYyhqc29uRmlsZVBhdGgpKSB7XG4gICAgICAgIGlmIChsb2cpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgTG9hZGluZyBmaWxlOiAke2pzb25GaWxlUGF0aH1gKVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhqc29uRmlsZVBhdGgsIHsgZW5jb2Rpbmc6IFwidXRmOFwiIH0pXG4gICAgICAgIE9iamVjdC5hc3NpZ24ocGhvdG9CeVVpZCwgSlNPTi5wYXJzZShqc29uKSlcbiAgICAgIH0gZWxzZSBpZiAobG9nKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBJZ25vcmluZyBtaXNzaW5nIGZpbGU6ICR7anNvbkZpbGVQYXRofWApXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY29uc3Qgc2NydXRpbkJ5VWlkOiB7IFt1aWQ6IHN0cmluZ106IFNjcnV0aW4gfSA9IHt9XG4gIGlmIChlbmFibGVkRGF0YXNldHMgJiBFbmFibGVkRGF0YXNldHMuU2NydXRpbnMpIHtcbiAgICBmb3IgKGNvbnN0IGRhdGFzZXQgb2YgZGF0YXNldHMuc2NydXRpbnMpIHtcbiAgICAgIGlmIChkYXRhc2V0Lmlnbm9yZUZvcldlYikge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgaWYgKFxuICAgICAgICBsZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICAgIGRhdGFzZXQubGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgICBsZWdpc2xhdHVyZSAhPT0gZGF0YXNldC5sZWdpc2xhdHVyZVxuICAgICAgKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBjb25zdCBkYXRhc2V0RGlyID0gcGF0aC5qb2luKFxuICAgICAgICBkYXRhRGlyLFxuICAgICAgICBkYXRhc2V0LmZpbGVuYW1lLnJlcGxhY2UoL1xcLmpzb24kLywgXCJfbmV0dG95ZVwiKSxcbiAgICAgIClcblxuICAgICAgZm9yIChjb25zdCBzY3J1dGluU3BsaXRQYXRoIG9mIHdhbGtEaXIoZGF0YXNldERpcikpIHtcbiAgICAgICAgY29uc3Qgc2NydXRpbkZpbGVuYW1lID0gc2NydXRpblNwbGl0UGF0aFtzY3J1dGluU3BsaXRQYXRoLmxlbmd0aCAtIDFdXG4gICAgICAgIGlmICghc2NydXRpbkZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNjcnV0aW5GaWxlUGF0aCA9IHBhdGguam9pbihkYXRhc2V0RGlyLCAuLi5zY3J1dGluU3BsaXRQYXRoKVxuICAgICAgICBpZiAobG9nKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coYExvYWRpbmcgZmlsZTogJHtzY3J1dGluRmlsZVBhdGh94oCmYClcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzY3J1dGluSnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKHNjcnV0aW5GaWxlUGF0aCwge1xuICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgfSlcbiAgICAgICAgY29uc3Qgc2NydXRpbiA9IFNjcnV0aW5zQ29udmVydC50b1NjcnV0aW4oc2NydXRpbkpzb24pXG4gICAgICAgIGlmIChzY3J1dGluQnlVaWRbc2NydXRpbi51aWRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBzY3J1dGluQnlVaWRbc2NydXRpbi51aWRdID0gc2NydXRpblxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBhY3RldXJCeVVpZCxcbiAgICBhbWVuZGVtZW50QnlVaWQsXG4gICAgZG9jdW1lbnRCeVVpZCxcbiAgICBkb3NzaWVyUGFybGVtZW50YWlyZUJ5U2VuYXRDaGVtaW4sXG4gICAgZG9zc2llclBhcmxlbWVudGFpcmVCeVRpdHJlQ2hlbWluLFxuICAgIGRvc3NpZXJQYXJsZW1lbnRhaXJlQnlVaWQsXG4gICAgb3JnYW5lQnlVaWQsXG4gICAgcGhvdG9CeVVpZCxcbiAgICByZXVuaW9uQnlVaWQsXG4gICAgcmV1bmlvbnNCeURheSxcbiAgICByZXVuaW9uc0J5RG9zc2llclVpZCxcbiAgICBzY3J1dGluQnlVaWQsXG4gIH1cbn1cblxuLy8vIExvYWQgZGF0YSBmcm9tIGJpZyBtb25vbHl0aWMgZmlsZXMuXG4vLy8gRGVwcmVjYXRlZDogQXNzZW1ibMOpZSBuYXRpb25hbGUgb3BlbiBkYXRhIG5vIG1vcmUgdXNlcyBtb25vbHl0aWMgZmlsZXMuXG5leHBvcnQgZnVuY3Rpb24gbG9hZEFzc2VtYmxlZURhdGFGcm9tQmlnRmlsZXMoXG4gIGRhdGFEaXI6IHN0cmluZyxcbiAgZW5hYmxlZERhdGFzZXRzOiBFbmFibGVkRGF0YXNldHMsXG4gIGxlZ2lzbGF0dXJlOiBMZWdpc2xhdHVyZSxcbiAgeyBsb2cgPSBmYWxzZSB9ID0ge30sXG4pOiBEYXRhIHtcbiAgY29uc3QgYWN0ZXVyQnlVaWQ6IHsgW3VpZDogc3RyaW5nXTogQWN0ZXVyIH0gPSB7fVxuICBjb25zdCBvcmdhbmVCeVVpZDogeyBbdWlkOiBzdHJpbmddOiBPcmdhbmUgfSA9IHt9XG4gIGlmIChlbmFibGVkRGF0YXNldHMgJiBFbmFibGVkRGF0YXNldHMuQWN0ZXVyc0V0T3JnYW5lcykge1xuICAgIGZvciAoY29uc3QgZGF0YXNldCBvZiBkYXRhc2V0cy5hY3RldXJzRXRPcmdhbmVzKSB7XG4gICAgICBpZiAoZGF0YXNldC5pZ25vcmVGb3JXZWIpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGlmIChcbiAgICAgICAgbGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgICBkYXRhc2V0LmxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgICAgbGVnaXNsYXR1cmUgIT09IGRhdGFzZXQubGVnaXNsYXR1cmVcbiAgICAgICkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgY29uc3QganNvbkZpbGVQYXRoOiBzdHJpbmcgPSBwYXRoLmpvaW4oXG4gICAgICAgIGRhdGFEaXIsXG4gICAgICAgIGRhdGFzZXQuZmlsZW5hbWUucmVwbGFjZSgvXFwuanNvbiQvLCBcIl9uZXR0b3llLmpzb25cIiksXG4gICAgICApXG4gICAgICBpZiAobG9nKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBMb2FkaW5nIGZpbGU6ICR7anNvbkZpbGVQYXRofWApXG4gICAgICB9XG4gICAgICBjb25zdCBqc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoanNvbkZpbGVQYXRoLCB7IGVuY29kaW5nOiBcInV0ZjhcIiB9KVxuICAgICAgY29uc3QgYWN0ZXVyc0V0T3JnYW5lcyA9IEFjdGV1cnNFdE9yZ2FuZXNDb252ZXJ0LnRvQWN0ZXVyc0V0T3JnYW5lcyhqc29uKVxuICAgICAgZm9yIChjb25zdCBhY3RldXIgb2YgYWN0ZXVyc0V0T3JnYW5lcy5hY3RldXJzKSB7XG4gICAgICAgIC8vIEtlZXAgdGhlIGZpcnN0IGV4aXN0aW5nIFwiYWN0ZXVyXCIsIGJlY2F1c2UgdGhlIGZpcnN0IHdyYXBwZXIgaXMgdGhlIG1vc3QgY29tcGxldGUuXG4gICAgICAgIGlmIChhY3RldXJCeVVpZFthY3RldXIudWlkXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgYWN0ZXVyQnlVaWRbYWN0ZXVyLnVpZF0gPSBhY3RldXJcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZm9yIChjb25zdCBvcmdhbmUgb2YgYWN0ZXVyc0V0T3JnYW5lcy5vcmdhbmVzKSB7XG4gICAgICAgIC8vIEtlZXAgdGhlIGZpcnN0IGV4aXN0aW5nIFwib3JnYW5lXCIsIGJlY2F1c2UgdGhlIGZpcnN0IHdyYXBwZXIgaXMgdGhlIG1vc3QgY29tcGxldGUuXG4gICAgICAgIGlmIChvcmdhbmVCeVVpZFtvcmdhbmUudWlkXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgb3JnYW5lQnlVaWRbb3JnYW5lLnVpZF0gPSBvcmdhbmVcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHJldW5pb25CeVVpZDogeyBbdWlkOiBzdHJpbmddOiBSZXVuaW9uIH0gPSB7fVxuICBjb25zdCByZXVuaW9uc0J5RGF5OiB7IFtkYXk6IHN0cmluZ106IFJldW5pb25bXSB9ID0ge31cbiAgY29uc3QgcmV1bmlvbnNCeURvc3NpZXJVaWQ6IHsgW2Rvc3NpZXJVaWQ6IHN0cmluZ106IFJldW5pb25bXSB9ID0ge31cbiAgaWYgKGVuYWJsZWREYXRhc2V0cyAmIEVuYWJsZWREYXRhc2V0cy5BZ2VuZGFzKSB7XG4gICAgZm9yIChjb25zdCBkYXRhc2V0IG9mIGRhdGFzZXRzLmFnZW5kYXMpIHtcbiAgICAgIGlmIChkYXRhc2V0Lmlnbm9yZUZvcldlYikge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgaWYgKFxuICAgICAgICBsZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICAgIGRhdGFzZXQubGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgICBsZWdpc2xhdHVyZSAhPT0gZGF0YXNldC5sZWdpc2xhdHVyZVxuICAgICAgKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBjb25zdCBqc29uRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICAgICAgZGF0YURpcixcbiAgICAgICAgZGF0YXNldC5maWxlbmFtZS5yZXBsYWNlKC9cXC5qc29uJC8sIFwiX25ldHRveWUuanNvblwiKSxcbiAgICAgIClcbiAgICAgIGlmIChsb2cpIHtcbiAgICAgICAgY29uc29sZS5sb2coYExvYWRpbmcgZmlsZTogJHtqc29uRmlsZVBhdGh9YClcbiAgICAgIH1cbiAgICAgIGNvbnN0IGpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhqc29uRmlsZVBhdGgsIHsgZW5jb2Rpbmc6IFwidXRmOFwiIH0pXG4gICAgICBjb25zdCBhZ2VuZGFzID0gQWdlbmRhc0NvbnZlcnQudG9BZ2VuZGFzKGpzb24pXG4gICAgICBmb3IgKGNvbnN0IHJldW5pb24gb2YgYWdlbmRhcy5yZXVuaW9ucykge1xuICAgICAgICBpZiAocmV1bmlvbkJ5VWlkW3JldW5pb24udWlkXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgcmV1bmlvbkJ5VWlkW3JldW5pb24udWlkXSA9IHJldW5pb25cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGRheSA9IHJldW5pb24udGltZXN0YW1wRGVidXQudG9JU09TdHJpbmcoKS5zcGxpdChcIlRcIilbMF1cbiAgICAgICAgbGV0IHJldW5pb25zQXREYXkgPSByZXVuaW9uc0J5RGF5W2RheV1cbiAgICAgICAgaWYgKHJldW5pb25zQXREYXkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHJldW5pb25zQXREYXkgPSByZXVuaW9uc0J5RGF5W2RheV0gPSBbXVxuICAgICAgICB9XG4gICAgICAgIHJldW5pb25zQXREYXkucHVzaChyZXVuaW9uKVxuXG4gICAgICAgIGNvbnN0IG9kaiA9IHJldW5pb24ub2RqXG4gICAgICAgIGlmIChvZGogIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGZvciAoY29uc3QgcG9pbnRPZGogb2Ygb2RqLnBvaW50c09kaiB8fCBbXSkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBkb3NzaWVyTGVnaXNsYXRpZlJlZiBvZiBwb2ludE9kai5kb3NzaWVyc0xlZ2lzbGF0aWZzUmVmcyB8fFxuICAgICAgICAgICAgICBbXSkge1xuICAgICAgICAgICAgICBsZXQgcmV1bmlvbnNBdERvc3NpZXJVaWQgPVxuICAgICAgICAgICAgICAgIHJldW5pb25zQnlEb3NzaWVyVWlkW2Rvc3NpZXJMZWdpc2xhdGlmUmVmXVxuICAgICAgICAgICAgICBpZiAocmV1bmlvbnNBdERvc3NpZXJVaWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHJldW5pb25zQXREb3NzaWVyVWlkID0gcmV1bmlvbnNCeURvc3NpZXJVaWRbXG4gICAgICAgICAgICAgICAgICBkb3NzaWVyTGVnaXNsYXRpZlJlZlxuICAgICAgICAgICAgICAgIF0gPSBbXVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJldW5pb25zQXREb3NzaWVyVWlkLnB1c2gocmV1bmlvbilcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjb25zdCBhbWVuZGVtZW50QnlVaWQ6IHsgW3VpZDogc3RyaW5nXTogQW1lbmRlbWVudCB9ID0ge31cbiAgaWYgKGVuYWJsZWREYXRhc2V0cyAmIEVuYWJsZWREYXRhc2V0cy5BbWVuZGVtZW50cykge1xuICAgIGZvciAoY29uc3QgZGF0YXNldCBvZiBkYXRhc2V0cy5hbWVuZGVtZW50cykge1xuICAgICAgaWYgKGRhdGFzZXQuaWdub3JlRm9yV2ViKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBpZiAoXG4gICAgICAgIGxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgICAgZGF0YXNldC5sZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICAgIGxlZ2lzbGF0dXJlICE9PSBkYXRhc2V0LmxlZ2lzbGF0dXJlXG4gICAgICApIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGNvbnN0IGpzb25GaWxlUGF0aDogc3RyaW5nID0gcGF0aC5qb2luKFxuICAgICAgICBkYXRhRGlyLFxuICAgICAgICBkYXRhc2V0LmZpbGVuYW1lLnJlcGxhY2UoL1xcLmpzb24kLywgXCJfbmV0dG95ZS5qc29uXCIpLFxuICAgICAgKVxuICAgICAgaWYgKGxvZykge1xuICAgICAgICBjb25zb2xlLmxvZyhgTG9hZGluZyBmaWxlOiAke2pzb25GaWxlUGF0aH1gKVxuICAgICAgfVxuICAgICAgY29uc3QganNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKGpzb25GaWxlUGF0aCwgeyBlbmNvZGluZzogXCJ1dGY4XCIgfSlcbiAgICAgIGNvbnN0IGFtZW5kZW1lbnRzID0gQW1lbmRlbWVudHNDb252ZXJ0LnRvQW1lbmRlbWVudHMoanNvbilcbiAgICAgIGZvciAoY29uc3QgdGV4dGVMZWdpc2xhdGlmIG9mIGFtZW5kZW1lbnRzLnRleHRlc0xlZ2lzbGF0aWZzKSB7XG4gICAgICAgIGZvciAoY29uc3QgYW1lbmRlbWVudCBvZiB0ZXh0ZUxlZ2lzbGF0aWYuYW1lbmRlbWVudHMpIHtcbiAgICAgICAgICBpZiAoYW1lbmRlbWVudEJ5VWlkW2FtZW5kZW1lbnQudWlkXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBhbWVuZGVtZW50QnlVaWRbYW1lbmRlbWVudC51aWRdID0gYW1lbmRlbWVudFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGRvY3VtZW50QnlVaWQ6IHsgW3VpZDogc3RyaW5nXTogRG9jdW1lbnQgfSA9IHt9XG4gIGNvbnN0IGRvc3NpZXJQYXJsZW1lbnRhaXJlQnlTZW5hdENoZW1pbjoge1xuICAgIFt1aWQ6IHN0cmluZ106IERvc3NpZXJQYXJsZW1lbnRhaXJlXG4gIH0gPSB7fVxuICBjb25zdCBkb3NzaWVyUGFybGVtZW50YWlyZUJ5VGl0cmVDaGVtaW46IHtcbiAgICBbdWlkOiBzdHJpbmddOiBEb3NzaWVyUGFybGVtZW50YWlyZVxuICB9ID0ge31cbiAgY29uc3QgZG9zc2llclBhcmxlbWVudGFpcmVCeVVpZDogeyBbdWlkOiBzdHJpbmddOiBEb3NzaWVyUGFybGVtZW50YWlyZSB9ID0ge31cbiAgaWYgKGVuYWJsZWREYXRhc2V0cyAmIEVuYWJsZWREYXRhc2V0cy5Eb3NzaWVyc0xlZ2lzbGF0aWZzKSB7XG4gICAgZm9yIChjb25zdCBkYXRhc2V0IG9mIGRhdGFzZXRzLmRvc3NpZXJzTGVnaXNsYXRpZnMpIHtcbiAgICAgIGlmIChkYXRhc2V0Lmlnbm9yZUZvcldlYikge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgaWYgKFxuICAgICAgICBsZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICAgIGRhdGFzZXQubGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgICBsZWdpc2xhdHVyZSAhPT0gZGF0YXNldC5sZWdpc2xhdHVyZVxuICAgICAgKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBjb25zdCBqc29uRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICAgICAgZGF0YURpcixcbiAgICAgICAgZGF0YXNldC5maWxlbmFtZS5yZXBsYWNlKC9cXC5qc29uJC8sIFwiX25ldHRveWUuanNvblwiKSxcbiAgICAgIClcbiAgICAgIGlmIChsb2cpIHtcbiAgICAgICAgY29uc29sZS5sb2coYExvYWRpbmcgZmlsZTogJHtqc29uRmlsZVBhdGh9YClcbiAgICAgIH1cbiAgICAgIGNvbnN0IGpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhqc29uRmlsZVBhdGgsIHsgZW5jb2Rpbmc6IFwidXRmOFwiIH0pXG4gICAgICBjb25zdCBkb3NzaWVyc0xlZ2lzbGF0aWZzID1cbiAgICAgICAgRG9zc2llcnNMZWdpc2xhdGlmc0NvbnZlcnQudG9Eb3NzaWVyc0xlZ2lzbGF0aWZzKGpzb24pXG4gICAgICBmb3IgKGNvbnN0IGRvY3VtZW50IG9mIGRvc3NpZXJzTGVnaXNsYXRpZnMudGV4dGVzTGVnaXNsYXRpZnMpIHtcbiAgICAgICAgaWYgKGRvY3VtZW50QnlVaWRbZG9jdW1lbnQudWlkXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgZG9jdW1lbnRCeVVpZFtkb2N1bWVudC51aWRdID0gZG9jdW1lbnRcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZm9yIChjb25zdCBkb3NzaWVyIG9mIGRvc3NpZXJzTGVnaXNsYXRpZnMuZG9zc2llcnNQYXJsZW1lbnRhaXJlcykge1xuICAgICAgICBjb25zdCB0aXRyZURvc3NpZXIgPSBkb3NzaWVyLnRpdHJlRG9zc2llclxuICAgICAgICBpZiAoXG4gICAgICAgICAgdGl0cmVEb3NzaWVyLnNlbmF0Q2hlbWluICYmXG4gICAgICAgICAgZG9zc2llclBhcmxlbWVudGFpcmVCeVNlbmF0Q2hlbWluW3RpdHJlRG9zc2llci5zZW5hdENoZW1pbl0gPT09XG4gICAgICAgICAgICB1bmRlZmluZWRcbiAgICAgICAgKSB7XG4gICAgICAgICAgZG9zc2llclBhcmxlbWVudGFpcmVCeVNlbmF0Q2hlbWluW3RpdHJlRG9zc2llci5zZW5hdENoZW1pbl0gPSBkb3NzaWVyXG4gICAgICAgIH1cbiAgICAgICAgaWYgKFxuICAgICAgICAgIHRpdHJlRG9zc2llci50aXRyZUNoZW1pbiAmJlxuICAgICAgICAgIGRvc3NpZXJQYXJsZW1lbnRhaXJlQnlUaXRyZUNoZW1pblt0aXRyZURvc3NpZXIudGl0cmVDaGVtaW5dID09PVxuICAgICAgICAgICAgdW5kZWZpbmVkXG4gICAgICAgICkge1xuICAgICAgICAgIGRvc3NpZXJQYXJsZW1lbnRhaXJlQnlUaXRyZUNoZW1pblt0aXRyZURvc3NpZXIudGl0cmVDaGVtaW5dID0gZG9zc2llclxuICAgICAgICB9XG4gICAgICAgIGlmIChkb3NzaWVyUGFybGVtZW50YWlyZUJ5VWlkW2Rvc3NpZXIudWlkXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgZG9zc2llclBhcmxlbWVudGFpcmVCeVVpZFtkb3NzaWVyLnVpZF0gPSBkb3NzaWVyXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjb25zdCBwaG90b0J5VWlkOiB7IFt1aWQ6IHN0cmluZ106IFBob3RvIH0gPSB7fVxuICBpZiAoZW5hYmxlZERhdGFzZXRzICYgRW5hYmxlZERhdGFzZXRzLlBob3Rvcykge1xuICAgIGNvbnN0IHBob3RvQnlVaWQgPSB7fVxuXG4gICAge1xuICAgICAgY29uc3QganNvbkZpbGVQYXRoOiBzdHJpbmcgPSBwYXRoLmpvaW4oXG4gICAgICAgIGRhdGFEaXIsXG4gICAgICAgIGBwaG90b3NfZGVwdXRlc18ke1xuICAgICAgICAgIC8vIFRPRE86IEhhbmRsZSBMZWdpc2xhdHVyZS5BbGwuXG4gICAgICAgICAgbGVnaXNsYXR1cmUgPT09IExlZ2lzbGF0dXJlLkFsbCA/IExlZ2lzbGF0dXJlLlNlaXplIDogbGVnaXNsYXR1cmVcbiAgICAgICAgfWAsXG4gICAgICAgIFwiZGVwdXRlcy5qc29uXCIsXG4gICAgICApXG4gICAgICBpZiAoZnMuZXhpc3RzU3luYyhqc29uRmlsZVBhdGgpKSB7XG4gICAgICAgIGlmIChsb2cpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgTG9hZGluZyBmaWxlOiAke2pzb25GaWxlUGF0aH1gKVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhqc29uRmlsZVBhdGgsIHsgZW5jb2Rpbmc6IFwidXRmOFwiIH0pXG4gICAgICAgIE9iamVjdC5hc3NpZ24ocGhvdG9CeVVpZCwgSlNPTi5wYXJzZShqc29uKSlcbiAgICAgIH0gZWxzZSBpZiAobG9nKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBJZ25vcmluZyBtaXNzaW5nIGZpbGU6ICR7anNvbkZpbGVQYXRofWApXG4gICAgICB9XG4gICAgfVxuXG4gICAge1xuICAgICAgY29uc3QganNvbkZpbGVQYXRoOiBzdHJpbmcgPSBwYXRoLmpvaW4oXG4gICAgICAgIGRhdGFEaXIsXG4gICAgICAgIFwicGhvdG9zX3NlbmF0ZXVyc1wiLFxuICAgICAgICBcInNlbmF0ZXVycy5qc29uXCIsXG4gICAgICApXG4gICAgICBpZiAoZnMuZXhpc3RzU3luYyhqc29uRmlsZVBhdGgpKSB7XG4gICAgICAgIGlmIChsb2cpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgTG9hZGluZyBmaWxlOiAke2pzb25GaWxlUGF0aH1gKVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhqc29uRmlsZVBhdGgsIHsgZW5jb2Rpbmc6IFwidXRmOFwiIH0pXG4gICAgICAgIE9iamVjdC5hc3NpZ24ocGhvdG9CeVVpZCwgSlNPTi5wYXJzZShqc29uKSlcbiAgICAgIH0gZWxzZSBpZiAobG9nKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBJZ25vcmluZyBtaXNzaW5nIGZpbGU6ICR7anNvbkZpbGVQYXRofWApXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY29uc3Qgc2NydXRpbkJ5VWlkOiB7IFt1aWQ6IHN0cmluZ106IFNjcnV0aW4gfSA9IHt9XG4gIGlmIChlbmFibGVkRGF0YXNldHMgJiBFbmFibGVkRGF0YXNldHMuU2NydXRpbnMpIHtcbiAgICBmb3IgKGNvbnN0IGRhdGFzZXQgb2YgZGF0YXNldHMuc2NydXRpbnMpIHtcbiAgICAgIGlmIChkYXRhc2V0Lmlnbm9yZUZvcldlYikge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgaWYgKFxuICAgICAgICBsZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICAgIGRhdGFzZXQubGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgICBsZWdpc2xhdHVyZSAhPT0gZGF0YXNldC5sZWdpc2xhdHVyZVxuICAgICAgKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBjb25zdCBqc29uRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICAgICAgZGF0YURpcixcbiAgICAgICAgZGF0YXNldC5maWxlbmFtZS5yZXBsYWNlKC9cXC5qc29uJC8sIFwiX25ldHRveWUuanNvblwiKSxcbiAgICAgIClcbiAgICAgIGlmIChsb2cpIHtcbiAgICAgICAgY29uc29sZS5sb2coYExvYWRpbmcgZmlsZTogJHtqc29uRmlsZVBhdGh9YClcbiAgICAgIH1cbiAgICAgIGNvbnN0IGpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhqc29uRmlsZVBhdGgsIHsgZW5jb2Rpbmc6IFwidXRmOFwiIH0pXG4gICAgICBjb25zdCBzY3J1dGlucyA9IFNjcnV0aW5zQ29udmVydC50b1NjcnV0aW5zKGpzb24pXG4gICAgICBmb3IgKGNvbnN0IHNjcnV0aW4gb2Ygc2NydXRpbnMuc2NydXRpbnMpIHtcbiAgICAgICAgaWYgKHNjcnV0aW5CeVVpZFtzY3J1dGluLnVpZF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHNjcnV0aW5CeVVpZFtzY3J1dGluLnVpZF0gPSBzY3J1dGluXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGFjdGV1ckJ5VWlkLFxuICAgIGFtZW5kZW1lbnRCeVVpZCxcbiAgICBkb2N1bWVudEJ5VWlkLFxuICAgIGRvc3NpZXJQYXJsZW1lbnRhaXJlQnlTZW5hdENoZW1pbixcbiAgICBkb3NzaWVyUGFybGVtZW50YWlyZUJ5VGl0cmVDaGVtaW4sXG4gICAgZG9zc2llclBhcmxlbWVudGFpcmVCeVVpZCxcbiAgICBvcmdhbmVCeVVpZCxcbiAgICBwaG90b0J5VWlkLFxuICAgIHJldW5pb25CeVVpZCxcbiAgICByZXVuaW9uc0J5RGF5LFxuICAgIHJldW5pb25zQnlEb3NzaWVyVWlkLFxuICAgIHNjcnV0aW5CeVVpZCxcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gbG9hZEFzc2VtYmxlZVBob3Rvc0RlcHV0ZXMoXG4gIGRhdGFEaXI6IHN0cmluZyxcbiAgbGVnaXNsYXR1cmU6IExlZ2lzbGF0dXJlLFxuICB7IGxvZyA9IGZhbHNlIH0gPSB7fSxcbik6IHsgW3VpZDogc3RyaW5nXTogUGhvdG8gfSB7XG4gIGNvbnN0IGpzb25GaWxlUGF0aDogc3RyaW5nID0gcGF0aC5qb2luKFxuICAgIGRhdGFEaXIsXG4gICAgYHBob3Rvc19kZXB1dGVzXyR7XG4gICAgICAvLyBUT0RPOiBIYW5kbGUgTGVnaXNsYXR1cmUuQWxsLlxuICAgICAgbGVnaXNsYXR1cmUgPT09IExlZ2lzbGF0dXJlLkFsbCA/IExlZ2lzbGF0dXJlLlNlaXplIDogbGVnaXNsYXR1cmVcbiAgICB9YCxcbiAgICBcImRlcHV0ZXMuanNvblwiLFxuICApXG4gIGlmIChsb2cpIHtcbiAgICBjb25zb2xlLmxvZyhgTG9hZGluZyBmaWxlOiAke2pzb25GaWxlUGF0aH1gKVxuICB9XG4gIGNvbnN0IGpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhqc29uRmlsZVBhdGgsIHsgZW5jb2Rpbmc6IFwidXRmOFwiIH0pXG4gIHJldHVybiBKU09OLnBhcnNlKGpzb24pIGFzIHsgW3VpZDogc3RyaW5nXTogUGhvdG8gfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gbG9hZEFzc2VtYmxlZVBob3Rvc1NlbmF0ZXVycyhcbiAgZGF0YURpcjogc3RyaW5nLFxuICB7IGxvZyA9IGZhbHNlIH0gPSB7fSxcbik6IHsgW3VpZDogc3RyaW5nXTogUGhvdG8gfSB7XG4gIGNvbnN0IGpzb25GaWxlUGF0aDogc3RyaW5nID0gcGF0aC5qb2luKFxuICAgIGRhdGFEaXIsXG4gICAgXCJwaG90b3Nfc2VuYXRldXJzXCIsXG4gICAgXCJzZW5hdGV1cnMuanNvblwiLFxuICApXG4gIGlmIChsb2cpIHtcbiAgICBjb25zb2xlLmxvZyhgTG9hZGluZyBmaWxlOiAke2pzb25GaWxlUGF0aH1gKVxuICB9XG4gIGNvbnN0IGpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhqc29uRmlsZVBhdGgsIHsgZW5jb2Rpbmc6IFwidXRmOFwiIH0pXG4gIHJldHVybiBKU09OLnBhcnNlKGpzb24pIGFzIHsgW3VpZDogc3RyaW5nXTogUGhvdG8gfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcGF0aEZyb21Eb2N1bWVudFVpZChkb2N1bWVudHNEaXI6IHN0cmluZywgdWlkOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBtYXRjaCA9IGRvY3VtZW50VWlkUmVnZXguZXhlYyh1aWQpXG4gIGFzc2VydC5ub3RTdHJpY3RFcXVhbChcbiAgICBtYXRjaCxcbiAgICBudWxsLFxuICAgIGBVbmV4cGVjdGVkIHN0cnVjdHVyZSBmb3IgZG9jdW1lbnQgVUlEOiAke3VpZH1gLFxuICApXG4gIGNvbnN0IGRvY3VtZW50VHlwZSA9IHBhdGguam9pbihkb2N1bWVudHNEaXIsIG1hdGNoIVsxXSlcbiAgY29uc3QgY2hhbWJyZURpciA9IHBhdGguam9pbihkb2N1bWVudFR5cGUsIG1hdGNoIVsyXSlcbiAgY29uc3QgcmVwdWJsaXF1ZURpciA9IHBhdGguam9pbihjaGFtYnJlRGlyLCBtYXRjaCFbM10pXG4gIGNvbnN0IGxlZ2lzbGF0dXJlRGlyID0gcGF0aC5qb2luKHJlcHVibGlxdWVEaXIsIG1hdGNoIVs0XSlcbiAgY29uc3QgZXRhdERpciA9IHBhdGguam9pbihsZWdpc2xhdHVyZURpciwgbWF0Y2ghWzVdKVxuICBsZXQgbnVtZXJvID0gXCIwMDAwMDBcIiArIG1hdGNoIVs2XVxuICBudW1lcm8gPSBudW1lcm8uc3Vic3RyKG51bWVyby5sZW5ndGggLSA2KVxuICBjb25zdCBudW1lcm9NaWxsaWVyc0RpciA9IHBhdGguam9pbihldGF0RGlyLCBudW1lcm8uc3Vic3RyKDAsIDMpKVxuICBmcy5lbnN1cmVEaXJTeW5jKG51bWVyb01pbGxpZXJzRGlyKVxuICByZXR1cm4gcGF0aC5qb2luKG51bWVyb01pbGxpZXJzRGlyLCB1aWQpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXRoRnJvbURvc3NpZXJQYXJsZW1lbnRhaXJlVWlkKFxuICBkb3NzaWVyc0Rpcjogc3RyaW5nLFxuICB1aWQ6IHN0cmluZyxcbik6IHN0cmluZyB7XG4gIGNvbnN0IG1hdGNoID0gZG9zc2llclVpZFJlZ2V4LmV4ZWModWlkKVxuICBhc3NlcnQubm90U3RyaWN0RXF1YWwoXG4gICAgbWF0Y2gsXG4gICAgbnVsbCxcbiAgICBgVW5leHBlY3RlZCBzdHJ1Y3R1cmUgZm9yIGRvc3NpZXIgcGFybGVtZW50YWlyZSBVSUQ6ICR7dWlkfWAsXG4gIClcbiAgY29uc3QgcmVwdWJsaXF1ZURpciA9IHBhdGguam9pbihkb3NzaWVyc0RpciwgbWF0Y2ghWzFdKVxuICBjb25zdCBsZWdpc2xhdHVyZURpciA9IHBhdGguam9pbihyZXB1YmxpcXVlRGlyLCBtYXRjaCFbMl0pXG4gIGxldCBudW1lcm8gPSBcIjAwMDAwMFwiICsgbWF0Y2ghWzNdXG4gIG51bWVybyA9IG51bWVyby5zdWJzdHIobnVtZXJvLmxlbmd0aCAtIDYpXG4gIGNvbnN0IG51bWVyb01pbGxpZXJzRGlyID0gcGF0aC5qb2luKGxlZ2lzbGF0dXJlRGlyLCBudW1lcm8uc3Vic3RyKDAsIDMpKVxuICBmcy5lbnN1cmVEaXJTeW5jKG51bWVyb01pbGxpZXJzRGlyKVxuICByZXR1cm4gcGF0aC5qb2luKG51bWVyb01pbGxpZXJzRGlyLCB1aWQpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXRoRnJvbVJldW5pb25VaWQocmV1bmlvbnNEaXI6IHN0cmluZywgdWlkOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBtYXRjaCA9IHJldW5pb25VaWRSZWdleC5leGVjKHVpZClcbiAgYXNzZXJ0Lm5vdFN0cmljdEVxdWFsKFxuICAgIG1hdGNoLFxuICAgIG51bGwsXG4gICAgYFVuZXhwZWN0ZWQgc3RydWN0dXJlIGZvciByZXVuaW9uIFVJRDogJHt1aWR9YCxcbiAgKVxuICBjb25zdCBjaGFtYnJlRGlyID0gcGF0aC5qb2luKHJldW5pb25zRGlyLCBtYXRjaCFbMV0pXG4gIGNvbnN0IHJlcHVibGlxdWVEaXIgPSBwYXRoLmpvaW4oY2hhbWJyZURpciwgbWF0Y2ghWzJdKVxuICBjb25zdCBsZWdpc2xhdHVyZURpciA9IHBhdGguam9pbihyZXB1YmxpcXVlRGlyLCBtYXRjaCFbM10pXG4gIGNvbnN0IHNlc3Npb25EaXIgPSBwYXRoLmpvaW4obGVnaXNsYXR1cmVEaXIsIG1hdGNoIVs0XSlcbiAgY29uc3QgaWREaXIgPSBwYXRoLmpvaW4oc2Vzc2lvbkRpciwgbWF0Y2ghWzVdKVxuICBsZXQgbnVtZXJvID0gXCIwMDAwMDAwMDBcIiArIG1hdGNoIVs2XVxuICBudW1lcm8gPSBudW1lcm8uc3Vic3RyKG51bWVyby5sZW5ndGggLSA5KVxuICBjb25zdCBudW1lcm9NaWxsaW9uc0RpciA9IHBhdGguam9pbihpZERpciwgbnVtZXJvLnN1YnN0cigwLCAzKSlcbiAgY29uc3QgbnVtZXJvTWlsbGllcnNEaXIgPSBwYXRoLmpvaW4obnVtZXJvTWlsbGlvbnNEaXIsIG51bWVyby5zdWJzdHIoMywgMykpXG4gIGZzLmVuc3VyZURpclN5bmMobnVtZXJvTWlsbGllcnNEaXIpXG4gIHJldHVybiBwYXRoLmpvaW4obnVtZXJvTWlsbGllcnNEaXIsIHVpZClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhdGhGcm9tU2NydXRpblVpZChzY3J1dGluc0Rpcjogc3RyaW5nLCB1aWQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IG1hdGNoID0gc2NydXRpblVpZFJlZ2V4LmV4ZWModWlkKVxuICBhc3NlcnQubm90U3RyaWN0RXF1YWwoXG4gICAgbWF0Y2gsXG4gICAgbnVsbCxcbiAgICBgVW5leHBlY3RlZCBzdHJ1Y3R1cmUgZm9yIHNjcnV0aW4gVUlEOiAke3VpZH1gLFxuICApXG4gIGNvbnN0IHJlcHVibGlxdWVEaXIgPSBwYXRoLmpvaW4oc2NydXRpbnNEaXIsIG1hdGNoIVsxXSlcbiAgY29uc3QgbGVnaXNsYXR1cmVEaXIgPSBwYXRoLmpvaW4ocmVwdWJsaXF1ZURpciwgbWF0Y2ghWzJdKVxuICBsZXQgbnVtZXJvID0gXCIwMDAwMDBcIiArIG1hdGNoIVszXVxuICBudW1lcm8gPSBudW1lcm8uc3Vic3RyKG51bWVyby5sZW5ndGggLSA2KVxuICBjb25zdCBudW1lcm9NaWxsaWVyc0RpciA9IHBhdGguam9pbihsZWdpc2xhdHVyZURpciwgbnVtZXJvLnN1YnN0cigwLCAzKSlcbiAgZnMuZW5zdXJlRGlyU3luYyhudW1lcm9NaWxsaWVyc0RpcilcbiAgcmV0dXJuIHBhdGguam9pbihudW1lcm9NaWxsaWVyc0RpciwgdWlkKVxufVxuIl0sIm1hcHBpbmdzIjoiQUFBQTs7QUFFQSxPQUFPQSxNQUFNLE1BQU0sUUFBUTtBQUMzQixPQUFPQyxFQUFFLE1BQU0sVUFBVTtBQUN6QixPQUFPQyxJQUFJLE1BQU0sTUFBTTtBQUFBLFNBRWRDLGVBQWU7QUFBQSxTQUNmQyxRQUFRLEVBQUVELGVBQWU7QUFBQSxTQUN6QkUsT0FBTztBQUFBLFNBQ1BBLE9BQU87QUFBQSxTQUdkQyxPQUFPLElBQUlDLHVCQUF1QjtBQUFBLFNBSTNCRCxPQUFPLElBQUlFLGNBQWM7QUFBQSxTQUNiRixPQUFPLElBQUlHLGtCQUFrQjtBQUFBLFNBRWhESCxPQUFPLElBQUlJLDBCQUEwQjtBQUFBLFNBSTlCQyxXQUFXO0FBQUEsU0FDWEwsT0FBTyxJQUFJTSxlQUFlO0FBcUJuQyxNQUFNQyxnQkFBZ0IsR0FDcEIsMkhBQTJIO0FBQzdILE1BQU1DLGVBQWUsR0FBRyx3QkFBd0I7QUFDaEQsTUFBTUMsZUFBZSxHQUNuQiwyREFBMkQ7QUFDN0QsTUFBTUMsZUFBZSxHQUFHLDBCQUEwQjtBQUVsRCxPQUFPLFVBQVVDLHdCQUF3QkEsQ0FDdkNDLE9BQWUsRUFDZkMsV0FBd0IsRUFDeEI7RUFBRUMsR0FBRyxHQUFHO0FBQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUtwQjtFQUNBLE1BQU1DLFVBQVUsR0FBRyxJQUFJQyxHQUFHLEVBQVU7RUFDcEMsS0FBSyxNQUFNQyxPQUFPLElBQUluQixRQUFRLENBQUNvQixnQkFBZ0IsRUFBRTtJQUMvQyxJQUFJRCxPQUFPLENBQUNFLFlBQVksRUFBRTtNQUN4QjtJQUNGO0lBQ0EsSUFDRU4sV0FBVyxLQUFLUixXQUFXLENBQUNl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
|