@tricoteuses/assemblee 1.0.6 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/api.js +3 -9
- package/lib/api.mjs +4 -5
- package/lib/bugs/acteur-00010/plugin.test.js +3 -50
- package/lib/bugs/acteur-00010/plugin.test.mjs +1 -1
- package/lib/bugs/acteur-00010.js +2 -57
- package/lib/bugs/acteur-00010.mjs +1 -6
- package/lib/bugs/agenda-00002/plugin.test.js +3 -53
- package/lib/bugs/agenda-00002/plugin.test.mjs +1 -3
- package/lib/bugs/agenda-00002.js +3 -148
- package/lib/bugs/agenda-00002.mjs +1 -28
- package/lib/bugs/agenda-00008/plugin.test.js +3 -52
- package/lib/bugs/agenda-00008/plugin.test.mjs +1 -1
- package/lib/bugs/agenda-00008.js +2 -61
- package/lib/bugs/agenda-00008.mjs +1 -5
- package/lib/bugs/agenda-00011/plugin.test.js +5 -99
- package/lib/bugs/agenda-00011/plugin.test.mjs +3 -3
- package/lib/bugs/agenda-00011.js +4 -105
- package/lib/bugs/agenda-00011.mjs +3 -29
- package/lib/bugs.js +3 -164
- package/lib/bugs.mjs +1 -26
- package/lib/cleaners/actes_legislatifs.js +11 -115
- package/lib/cleaners/actes_legislatifs.mjs +7 -82
- package/lib/cleaners/acteurs.js +12 -92
- package/lib/cleaners/acteurs.mjs +7 -38
- package/lib/cleaners/amendements.js +10 -103
- package/lib/cleaners/amendements.mjs +4 -58
- package/lib/cleaners/documents.js +5 -67
- package/lib/cleaners/documents.mjs +1 -37
- package/lib/cleaners/dossiers_legislatifs.js +5 -61
- package/lib/cleaners/dossiers_legislatifs.mjs +1 -29
- package/lib/cleaners/index.js +1 -9
- package/lib/cleaners/index.mjs +1 -1
- package/lib/cleaners/organes.js +1 -33
- package/lib/cleaners/organes.mjs +1 -17
- package/lib/cleaners/reunions.js +4 -119
- package/lib/cleaners/reunions.mjs +1 -64
- package/lib/cleaners/scrutins.js +10 -102
- package/lib/cleaners/scrutins.mjs +1 -48
- package/lib/cleaners/xml.js +8 -42
- package/lib/cleaners/xml.mjs +6 -8
- package/lib/datasets.js +14 -113
- package/lib/datasets.mjs +6 -46
- package/lib/dates.js +7 -37
- package/lib/dates.mjs +9 -14
- package/lib/dossiers_legislatifs.js +6 -68
- package/lib/dossiers_legislatifs.mjs +5 -36
- package/lib/file_systems.js +56 -139
- package/lib/file_systems.mjs +1 -9
- package/lib/git.js +4 -53
- package/lib/git.mjs +1 -12
- package/lib/index.js +1 -15
- package/lib/index.mjs +1 -1
- package/lib/inserters.js +23 -146
- package/lib/inserters.mjs +6 -87
- package/lib/loaders.js +44 -316
- package/lib/loaders.mjs +12 -135
- package/lib/organes.js +1 -7
- package/lib/organes.mjs +1 -4
- package/lib/parsers/documents.js +22 -151
- package/lib/parsers/documents.mjs +19 -81
- package/lib/parsers/index.js +1 -4
- package/lib/parsers/index.mjs +1 -1
- package/lib/parsers/recherche_amendements.js +302 -527
- package/lib/parsers/recherche_amendements.mjs +8 -31
- package/lib/raw_types/acteurs_et_organes.d.ts +1 -30
- package/lib/raw_types/acteurs_et_organes.js +5 -124
- package/lib/raw_types/acteurs_et_organes.mjs +5 -105
- package/lib/raw_types/agendas.js +6 -89
- package/lib/raw_types/agendas.mjs +9 -65
- package/lib/raw_types/amendements.d.ts +2 -0
- package/lib/raw_types/amendements.js +10 -90
- package/lib/raw_types/amendements.mjs +11 -69
- package/lib/raw_types/dossiers_legislatifs.d.ts +16 -115
- package/lib/raw_types/dossiers_legislatifs.js +26 -435
- package/lib/raw_types/dossiers_legislatifs.mjs +26 -412
- package/lib/raw_types/scrutins.js +6 -81
- package/lib/raw_types/scrutins.mjs +9 -57
- package/lib/scripts/bugs_helper.js +2 -181
- package/lib/scripts/bugs_helper.mjs +2 -39
- package/lib/scripts/clean_data.js +27 -143
- package/lib/scripts/clean_data.mjs +15 -34
- package/lib/scripts/clean_reorganized_data.js +76 -240
- package/lib/scripts/clean_reorganized_data.mjs +36 -99
- package/lib/scripts/diff_amendements.js +19 -79
- package/lib/scripts/diff_amendements.mjs +17 -35
- package/lib/scripts/document_dossiers_legislatifs.js +17 -142
- package/lib/scripts/document_dossiers_legislatifs.mjs +6 -90
- package/lib/scripts/get_today_reunions.js +4 -22
- package/lib/scripts/get_today_reunions.mjs +1 -7
- package/lib/scripts/merge_scrutins.js +3 -47
- package/lib/scripts/merge_scrutins.mjs +1 -9
- package/lib/scripts/parse_textes_lois.js +15 -44
- package/lib/scripts/parse_textes_lois.mjs +18 -19
- package/lib/scripts/raw_types_from_amendements.js +3 -95
- package/lib/scripts/raw_types_from_amendements.mjs +1 -16
- package/lib/scripts/reorganize_data.js +74 -294
- package/lib/scripts/reorganize_data.mjs +22 -133
- package/lib/scripts/retrieve_deputes_photos.js +6 -119
- package/lib/scripts/retrieve_deputes_photos.mjs +7 -33
- package/lib/scripts/retrieve_documents.js +4 -192
- package/lib/scripts/retrieve_documents.mjs +2 -50
- package/lib/scripts/retrieve_open_data.js +44 -116
- package/lib/scripts/retrieve_open_data.mjs +14 -19
- package/lib/scripts/retrieve_pending_amendments.js +4 -98
- package/lib/scripts/retrieve_pending_amendments.mjs +1 -14
- package/lib/scripts/retrieve_senateurs_photos.js +18 -114
- package/lib/scripts/retrieve_senateurs_photos.mjs +20 -48
- package/lib/scripts/retrieve_textes_lois.js +3 -122
- package/lib/scripts/retrieve_textes_lois.mjs +3 -21
- package/lib/scripts/test_load.js +2 -10
- package/lib/scripts/test_load.mjs +2 -1
- package/lib/scripts/test_load_big_files.js +2 -10
- package/lib/scripts/test_load_big_files.mjs +2 -1
- package/lib/scripts/validate_json.js +4 -119
- package/lib/scripts/validate_json.mjs +2 -36
- package/lib/shared_types/codes_actes.js +1 -24
- package/lib/shared_types/codes_actes.mjs +3 -10
- package/lib/strings.js +1 -5
- package/lib/strings.mjs +1 -1
- package/lib/types/acteurs_et_organes.js +9 -84
- package/lib/types/acteurs_et_organes.mjs +10 -63
- package/lib/types/agendas.js +8 -90
- package/lib/types/agendas.mjs +11 -66
- package/lib/types/amendements.d.ts +2 -0
- package/lib/types/amendements.js +12 -92
- package/lib/types/amendements.mjs +15 -70
- package/lib/types/dossiers_legislatifs.js +8 -96
- package/lib/types/dossiers_legislatifs.mjs +10 -72
- package/lib/types/legislatures.js +1 -3
- package/lib/types/legislatures.mjs +1 -2
- package/lib/types/scrutins.js +8 -82
- package/lib/types/scrutins.mjs +11 -58
- package/lib/urls.js +3 -27
- package/lib/urls.mjs +3 -21
- package/package.json +1 -1
|
@@ -47,10 +47,8 @@ const optionsDefinitions = [{
|
|
|
47
47
|
}];
|
|
48
48
|
const options = commandLineArgs(optionsDefinitions);
|
|
49
49
|
const pipeline = util.promisify(stream.pipeline);
|
|
50
|
-
|
|
51
50
|
function commitAndPush(repositoryDir, commit, remotes) {
|
|
52
51
|
let error = false;
|
|
53
|
-
|
|
54
52
|
if (commit) {
|
|
55
53
|
execSync("git add .", {
|
|
56
54
|
cwd: repositoryDir,
|
|
@@ -58,7 +56,6 @@ function commitAndPush(repositoryDir, commit, remotes) {
|
|
|
58
56
|
encoding: "utf-8",
|
|
59
57
|
stdio: ["ignore", "ignore", "pipe"]
|
|
60
58
|
});
|
|
61
|
-
|
|
62
59
|
try {
|
|
63
60
|
execSync('git commit -m "Nouvelle moisson"', {
|
|
64
61
|
cwd: repositoryDir,
|
|
@@ -71,7 +68,6 @@ function commitAndPush(repositoryDir, commit, remotes) {
|
|
|
71
68
|
throw childProcess;
|
|
72
69
|
}
|
|
73
70
|
}
|
|
74
|
-
|
|
75
71
|
for (const remote of remotes || []) {
|
|
76
72
|
try {
|
|
77
73
|
execSync(`git push ${remote} master`, {
|
|
@@ -87,10 +83,8 @@ function commitAndPush(repositoryDir, commit, remotes) {
|
|
|
87
83
|
}
|
|
88
84
|
}
|
|
89
85
|
}
|
|
90
|
-
|
|
91
86
|
return error;
|
|
92
87
|
}
|
|
93
|
-
|
|
94
88
|
async function retrievePhotosDeputes() {
|
|
95
89
|
const dataDir = options.dataDir;
|
|
96
90
|
const {
|
|
@@ -100,17 +94,14 @@ async function retrievePhotosDeputes() {
|
|
|
100
94
|
const {
|
|
101
95
|
mandats
|
|
102
96
|
} = acteur;
|
|
103
|
-
|
|
104
97
|
if (!mandats) {
|
|
105
98
|
return false;
|
|
106
99
|
}
|
|
107
|
-
|
|
108
100
|
const mandatDeputeLegislature = mandats.filter(mandat => mandat.xsiType === TypeMandat.MandatParlementaireType && mandat.legislature === options.legislature && mandat.typeOrgane === CodeTypeOrgane.Assemblee)[0];
|
|
109
101
|
return mandatDeputeLegislature !== undefined;
|
|
110
102
|
}).sort((a, b) => a.uid.length === b.uid.length ? a.uid.localeCompare(b.uid) : a.uid.length - b.uid.length);
|
|
111
103
|
const gitGroupUrl = options.clone ? options.clone.trim().replace(/\/+$/, "") : undefined;
|
|
112
104
|
const photosDirName = `photos_deputes_${options.legislature}`;
|
|
113
|
-
|
|
114
105
|
if (gitGroupUrl !== undefined) {
|
|
115
106
|
execSync(`git clone ${gitGroupUrl}/${photosDirName}.git`, {
|
|
116
107
|
cwd: dataDir,
|
|
@@ -119,14 +110,12 @@ async function retrievePhotosDeputes() {
|
|
|
119
110
|
stdio: ["ignore", "ignore", "pipe"]
|
|
120
111
|
});
|
|
121
112
|
}
|
|
113
|
+
const photosDir = path.join(dataDir, photosDirName);
|
|
122
114
|
|
|
123
|
-
|
|
124
|
-
|
|
115
|
+
// Download photos.
|
|
125
116
|
fs.ensureDirSync(photosDir);
|
|
126
|
-
|
|
127
117
|
if (options.fetch) {
|
|
128
118
|
const missingPhotoFilePath = "images/transparent_150x192.jpg";
|
|
129
|
-
|
|
130
119
|
for (const depute of deputesLegislature) {
|
|
131
120
|
const ident = depute.etatCivil.ident;
|
|
132
121
|
const numeroDepute = depute.uid.substring(2);
|
|
@@ -135,60 +124,50 @@ async function retrievePhotosDeputes() {
|
|
|
135
124
|
const photoTempFilename = `${numeroDepute}_temp.jpg`;
|
|
136
125
|
const photoTempFilePath = path.join(photosDir, photoTempFilename);
|
|
137
126
|
const urlPhoto = `http://www2.assemblee-nationale.fr/static/tribun/${options.legislature}/photos/${photoFilename}`;
|
|
138
|
-
|
|
139
127
|
if (!options.silent) {
|
|
140
128
|
console.log(`Loading photo ${urlPhoto} for ${ident.prenom} ${ident.nom}…`);
|
|
141
129
|
}
|
|
142
|
-
|
|
143
130
|
for (let retries = 0; retries < 3; retries++) {
|
|
144
131
|
const response = await fetch(urlPhoto);
|
|
145
|
-
|
|
146
132
|
if (response.ok) {
|
|
147
133
|
await pipeline(response.body, fs.createWriteStream(photoTempFilePath));
|
|
148
134
|
fs.renameSync(photoTempFilePath, photoFilePath);
|
|
149
135
|
break;
|
|
150
136
|
}
|
|
151
|
-
|
|
152
137
|
if (retries >= 2) {
|
|
153
138
|
console.warn(`Fetch failed: ${urlPhoto} (${ident.prenom} ${ident.nom})`);
|
|
154
139
|
console.warn(response.status, response.statusText);
|
|
155
140
|
console.warn(await response.text());
|
|
156
|
-
|
|
157
141
|
if (fs.existsSync(photoFilePath)) {
|
|
158
142
|
console.warn(" => Reusing existing image");
|
|
159
143
|
} else {
|
|
160
144
|
console.warn(" => Using blank image");
|
|
161
145
|
fs.copyFileSync(missingPhotoFilePath, photoFilePath);
|
|
162
146
|
}
|
|
163
|
-
|
|
164
147
|
break;
|
|
165
148
|
}
|
|
166
149
|
}
|
|
167
150
|
}
|
|
168
|
-
}
|
|
169
|
-
|
|
151
|
+
}
|
|
170
152
|
|
|
153
|
+
// Resize photos to 150x192, because some haven't exactly this size.
|
|
171
154
|
for (const depute of deputesLegislature) {
|
|
172
155
|
const ident = depute.etatCivil.ident;
|
|
173
156
|
const numeroDepute = depute.uid.substring(2);
|
|
174
|
-
|
|
175
157
|
if (!options.silent) {
|
|
176
158
|
console.log(`Resizing photo ${numeroDepute} for ${ident.prenom} ${ident.nom}…`);
|
|
177
159
|
}
|
|
178
|
-
|
|
179
160
|
execSync(`gm convert -resize 150x192! ${numeroDepute}.jpg ${numeroDepute}_150x192.jpg`, {
|
|
180
161
|
cwd: photosDir
|
|
181
162
|
});
|
|
182
|
-
}
|
|
183
|
-
|
|
163
|
+
}
|
|
184
164
|
|
|
165
|
+
// Create a mosaic of photos.
|
|
185
166
|
const photoByIdDepute = {};
|
|
186
167
|
const rowsFilenames = [];
|
|
187
|
-
|
|
188
168
|
for (let deputeIndex = 0, rowIndex = 0; deputeIndex < deputesLegislature.length; deputeIndex += 25, rowIndex++) {
|
|
189
169
|
const row = deputesLegislature.slice(deputeIndex, deputeIndex + 25);
|
|
190
170
|
const photosFilenames = [];
|
|
191
|
-
|
|
192
171
|
for (const [columnIndex, depute] of row.entries()) {
|
|
193
172
|
const numeroDepute = depute.uid.substring(2);
|
|
194
173
|
const photoFilename = `${numeroDepute}_150x192.jpg`;
|
|
@@ -202,29 +181,24 @@ async function retrievePhotosDeputes() {
|
|
|
202
181
|
yMosaique: rowIndex * 192
|
|
203
182
|
};
|
|
204
183
|
}
|
|
205
|
-
|
|
206
184
|
const rowFilename = `row-${rowIndex}.jpg`;
|
|
207
185
|
execSync(`gm convert ${photosFilenames.join(" ")} +append ${rowFilename}`, {
|
|
208
186
|
cwd: photosDir
|
|
209
187
|
});
|
|
210
188
|
rowsFilenames.push(rowFilename);
|
|
211
189
|
}
|
|
212
|
-
|
|
213
190
|
execSync(`gm convert ${rowsFilenames.join(" ")} -append deputes.jpg`, {
|
|
214
191
|
cwd: photosDir
|
|
215
192
|
});
|
|
216
|
-
|
|
217
193
|
for (const rowFilename of rowsFilenames) {
|
|
218
194
|
fs.unlinkSync(path.join(photosDir, rowFilename));
|
|
219
195
|
}
|
|
220
|
-
|
|
221
196
|
const jsonFilePath = path.join(photosDir, "deputes.json");
|
|
222
197
|
fs.writeFileSync(jsonFilePath, JSON.stringify(photoByIdDepute, null, 2));
|
|
223
198
|
return commitAndPush(photosDir, options.commit, options.remote);
|
|
224
199
|
}
|
|
225
|
-
|
|
226
200
|
retrievePhotosDeputes().then(error => process.exit(error ? 1 : 0)).catch(error => {
|
|
227
201
|
console.log(error);
|
|
228
202
|
process.exit(2);
|
|
229
203
|
});
|
|
230
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJleGVjU3luYyIsImNvbW1hbmRMaW5lQXJncyIsImZzIiwiZmV0Y2giLCJwYXRoIiwic3RyZWFtIiwidXRpbCIsIkVuYWJsZWREYXRhc2V0cyIsImxvYWRBc3NlbWJsZWVEYXRhIiwiQ29kZVR5cGVPcmdhbmUiLCJUeXBlTWFuZGF0Iiwib3B0aW9uc0RlZmluaXRpb25zIiwiYWxpYXMiLCJoZWxwIiwibmFtZSIsInR5cGUiLCJTdHJpbmciLCJCb29sZWFuIiwiZGVmYXVsdFZhbHVlIiwibXVsdGlwbGUiLCJkZWZhdWx0T3B0aW9uIiwib3B0aW9ucyIsInBpcGVsaW5lIiwicHJvbWlzaWZ5IiwiY29tbWl0QW5kUHVzaCIsInJlcG9zaXRvcnlEaXIiLCJjb21taXQiLCJyZW1vdGVzIiwiZXJyb3IiLCJjd2QiLCJlbnYiLCJwcm9jZXNzIiwiZW5jb2RpbmciLCJzdGRpbyIsImNoaWxkUHJvY2VzcyIsInN0ZGVyciIsInRlc3QiLCJzdGRvdXQiLCJjb25zb2xlIiwib3V0cHV0IiwicmVtb3RlIiwicmV0cmlldmVQaG90b3NEZXB1dGVzIiwiZGF0YURpciIsImFjdGV1ckJ5VWlkIiwiQWN0ZXVyc0V0T3JnYW5lcyIsImxlZ2lzbGF0dXJlIiwiZGVwdXRlc0xlZ2lzbGF0dXJlIiwiT2JqZWN0IiwidmFsdWVzIiwiZmlsdGVyIiwiYWN0ZXVyIiwibWFuZGF0cyIsIm1hbmRhdERlcHV0ZUxlZ2lzbGF0dXJlIiwibWFuZGF0IiwieHNpVHlwZSIsIk1hbmRhdFBhcmxlbWVudGFpcmVUeXBlIiwidHlwZU9yZ2FuZSIsIkFzc2VtYmxlZSIsInVuZGVmaW5lZCIsInNvcnQiLCJhIiwiYiIsInVpZCIsImxlbmd0aCIsImxvY2FsZUNvbXBhcmUiLCJnaXRHcm91cFVybCIsImNsb25lIiwidHJpbSIsInJlcGxhY2UiLCJwaG90b3NEaXJOYW1lIiwicGhvdG9zRGlyIiwiam9pbiIsImVuc3VyZURpclN5bmMiLCJtaXNzaW5nUGhvdG9GaWxlUGF0aCIsImRlcHV0ZSIsImlkZW50IiwiZXRhdENpdmlsIiwibnVtZXJvRGVwdXRlIiwic3Vic3RyaW5nIiwicGhvdG9GaWxlbmFtZSIsInBob3RvRmlsZVBhdGgiLCJwaG90b1RlbXBGaWxlbmFtZSIsInBob3RvVGVtcEZpbGVQYXRoIiwidXJsUGhvdG8iLCJzaWxlbnQiLCJsb2ciLCJwcmVub20iLCJub20iLCJyZXRyaWVzIiwicmVzcG9uc2UiLCJvayIsImJvZHkiLCJjcmVhdGVXcml0ZVN0cmVhbSIsInJlbmFtZVN5bmMiLCJ3YXJuIiwic3RhdHVzIiwic3RhdHVzVGV4dCIsInRleHQiLCJleGlzdHNTeW5jIiwiY29weUZpbGVTeW5jIiwicGhvdG9CeUlkRGVwdXRlIiwicm93c0ZpbGVuYW1lcyIsImRlcHV0ZUluZGV4Iiwicm93SW5kZXgiLCJyb3ciLCJzbGljZSIsInBob3Rvc0ZpbGVuYW1lcyIsImNvbHVtbkluZGV4IiwiZW50cmllcyIsInB1c2giLCJjaGVtaW4iLCJjaGVtaW5Nb3NhaXF1ZSIsImhhdXRldXIiLCJsYXJnZXVyIiwieE1vc2FpcXVlIiwieU1vc2FpcXVlIiwicm93RmlsZW5hbWUiLCJ1bmxpbmtTeW5jIiwianNvbkZpbGVQYXRoIiwid3JpdGVGaWxlU3luYyIsIkpTT04iLCJzdHJpbmdpZnkiLCJ0aGVuIiwiZXhpdCIsImNhdGNoIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NjcmlwdHMvcmV0cmlldmVfZGVwdXRlc19waG90b3MudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hpbGRQcm9jZXNzLCBleGVjU3luYyB9IGZyb20gXCJjaGlsZF9wcm9jZXNzXCJcbmltcG9ydCBjb21tYW5kTGluZUFyZ3MgZnJvbSBcImNvbW1hbmQtbGluZS1hcmdzXCJcbmltcG9ydCBmcyBmcm9tIFwiZnMtZXh0cmFcIlxuaW1wb3J0IGZldGNoIGZyb20gXCJub2RlLWZldGNoXCJcbmltcG9ydCBwYXRoIGZyb20gXCJwYXRoXCJcbmltcG9ydCBzdHJlYW0gZnJvbSBcInN0cmVhbVwiXG5pbXBvcnQgdXRpbCBmcm9tIFwidXRpbFwiXG5cbmltcG9ydCB7IEVuYWJsZWREYXRhc2V0cyB9IGZyb20gXCIuLi9kYXRhc2V0c1wiXG5pbXBvcnQgeyBsb2FkQXNzZW1ibGVlRGF0YSB9IGZyb20gXCIuLi9sb2FkZXJzXCJcbmltcG9ydCB7XG4gIENvZGVUeXBlT3JnYW5lLFxuICBNYW5kYXQsXG4gIFBob3RvLFxuICBUeXBlTWFuZGF0LFxufSBmcm9tIFwiLi4vdHlwZXMvYWN0ZXVyc19ldF9vcmdhbmVzXCJcblxuY29uc3Qgb3B0aW9uc0RlZmluaXRpb25zID0gW1xuICB7XG4gICAgYWxpYXM6IFwiQ1wiLFxuICAgIGhlbHA6IFwiY2xvbmUgcmVwb3NpdG9yaWVzIGZyb20gZ2l2ZW4gZ3JvdXAgKG9yIG9yZ2FuaXphdGlvbikgZ2l0IFVSTFwiLFxuICAgIG5hbWU6IFwiY2xvbmVcIixcbiAgICB0eXBlOiBTdHJpbmcsXG4gIH0sXG4gIHtcbiAgICBhbGlhczogXCJjXCIsXG4gICAgaGVscDogXCJjb21taXQgcGhvdG9zXCIsXG4gICAgbmFtZTogXCJjb21taXRcIixcbiAgICB0eXBlOiBCb29sZWFuLFxuICB9LFxuICB7XG4gICAgYWxpYXM6IFwiZlwiLFxuICAgIGhlbHA6IFwiZmV0Y2ggZMOpcHV0w6lzJyBwaWN0dXJlcyBpbnN0ZWFkIG9mIHJldHJpZXZpbmcgdGhlbSBmcm9tIGZpbGVzXCIsXG4gICAgbmFtZTogXCJmZXRjaFwiLFxuICAgIHR5cGU6IEJvb2xlYW4sXG4gIH0sXG4gIHtcbiAgICBhbGlhczogXCJsXCIsXG4gICAgZGVmYXVsdFZhbHVlOiBcIjE2XCIsXG4gICAgbmFtZTogXCJsZWdpc2xhdHVyZVwiLFxuICAgIHR5cGU6IFN0cmluZyxcbiAgfSxcbiAge1xuICAgIGFsaWFzOiBcInJcIixcbiAgICBoZWxwOiBcInB1c2ggY29tbWl0IHRvIGdpdmVuIHJlbW90ZVwiLFxuICAgIG11bHRpcGxlOiB0cnVlLFxuICAgIG5hbWU6IFwicmVtb3RlXCIsXG4gICAgdHlwZTogU3RyaW5nLFxuICB9LFxuICB7XG4gICAgYWxpYXM6IFwic1wiLFxuICAgIGhlbHA6IFwiZG9uJ3QgbG9nIGFueXRoaW5nXCIsXG4gICAgbmFtZTogXCJzaWxlbnRcIixcbiAgICB0eXBlOiBCb29sZWFuLFxuICB9LFxuICB7XG4gICAgZGVmYXVsdE9wdGlvbjogdHJ1ZSxcbiAgICBoZWxwOiBcImRpcmVjdG9yeSBjb250YWluaW5nIEFzc2VtYmzDqWUgb3BlbiBkYXRhIGZpbGVzXCIsXG4gICAgbmFtZTogXCJkYXRhRGlyXCIsXG4gICAgdHlwZTogU3RyaW5nLFxuICB9LFxuXVxuY29uc3Qgb3B0aW9ucyA9IGNvbW1hbmRMaW5lQXJncyhvcHRpb25zRGVmaW5pdGlvbnMpXG5jb25zdCBwaXBlbGluZSA9IHV0aWwucHJvbWlzaWZ5KHN0cmVhbS5waXBlbGluZSlcblxuZnVuY3Rpb24gY29tbWl0QW5kUHVzaChcbiAgcmVwb3NpdG9yeURpcjogc3RyaW5nLFxuICBjb21taXQ6IGJvb2xlYW4sXG4gIHJlbW90ZXM/OiBzdHJpbmdbXSxcbik6IGJvb2xlYW4ge1xuICBsZXQgZXJyb3IgPSBmYWxzZVxuICBpZiAoY29tbWl0KSB7XG4gICAgZXhlY1N5bmMoXCJnaXQgYWRkIC5cIiwge1xuICAgICAgY3dkOiByZXBvc2l0b3J5RGlyLFxuICAgICAgZW52OiBwcm9jZXNzLmVudixcbiAgICAgIGVuY29kaW5nOiBcInV0Zi04XCIsXG4gICAgICBzdGRpbzogW1wiaWdub3JlXCIsIFwiaWdub3JlXCIsIFwicGlwZVwiXSxcbiAgICB9KVxuICAgIHRyeSB7XG4gICAgICBleGVjU3luYygnZ2l0IGNvbW1pdCAtbSBcIk5vdXZlbGxlIG1vaXNzb25cIicsIHtcbiAgICAgICAgY3dkOiByZXBvc2l0b3J5RGlyLFxuICAgICAgICBlbnY6IHByb2Nlc3MuZW52LFxuICAgICAgICBlbmNvZGluZzogXCJ1dGYtOFwiLFxuICAgICAgfSlcbiAgICB9IGNhdGNoIChjaGlsZFByb2Nlc3MpIHtcbiAgICAgIGlmIChcbiAgICAgICAgKGNoaWxkUHJvY2VzcyBhcyBDaGlsZFByb2Nlc3MpLnN0ZGVyciA9PT0gbnVsbCB8fFxuICAgICAgICAhL25vdGhpbmcgdG8gY29tbWl0Ly50ZXN0KChjaGlsZFByb2Nlc3MgYXMgYW55KS5zdGRvdXQpXG4gICAgICApIHtcbiAgICAgICAgY29uc29sZS5lcnJvcigoY2hpbGRQcm9jZXNzIGFzIGFueSkub3V0cHV0KVxuICAgICAgICB0aHJvdyBjaGlsZFByb2Nlc3NcbiAgICAgIH1cbiAgICB9XG4gICAgZm9yIChjb25zdCByZW1vdGUgb2YgcmVtb3RlcyB8fCBbXSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgZXhlY1N5bmMoYGdpdCBwdXNoICR7cmVtb3RlfSBtYXN0ZXJgLCB7XG4gICAgICAgICAgY3dkOiByZXBvc2l0b3J5RGlyLFxuICAgICAgICAgIGVudjogcHJvY2Vzcy5lbnYsXG4gICAgICAgICAgZW5jb2Rpbmc6IFwidXRmLThcIixcbiAgICAgICAgICBzdGRpbzogW1wiaWdub3JlXCIsIFwiaWdub3JlXCIsIFwicGlwZVwiXSxcbiAgICAgICAgfSlcbiAgICAgIH0gY2F0Y2ggKGNoaWxkUHJvY2Vzcykge1xuICAgICAgICAvLyBEb24ndCBzdG9wIHdoZW4gcHVzaCBmYWlscy5cbiAgICAgICAgY29uc29sZS5lcnJvcigoY2hpbGRQcm9jZXNzIGFzIGFueSkub3V0cHV0KVxuICAgICAgICBlcnJvciA9IHRydWVcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIGVycm9yXG59XG5cbmFzeW5jIGZ1bmN0aW9uIHJldHJpZXZlUGhvdG9zRGVwdXRlcygpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgY29uc3QgZGF0YURpciA9IG9wdGlvbnMuZGF0YURpclxuICBjb25zdCB7IGFjdGV1ckJ5VWlkIH0gPSBsb2FkQXNzZW1ibGVlRGF0YShcbiAgICBkYXRhRGlyLFxuICAgIEVuYWJsZWREYXRhc2V0cy5BY3RldXJzRXRPcmdhbmVzLFxuICAgIG9wdGlvbnMubGVnaXNsYXR1cmUsXG4gIClcbiAgY29uc3QgZGVwdXRlc0xlZ2lzbGF0dXJlID0gT2JqZWN0LnZhbHVlcyhhY3RldXJCeVVpZClcbiAgICAuZmlsdGVyKChhY3RldXIpID0+IHtcbiAgICAgIGNvbnN0IHsgbWFuZGF0cyB9ID0gYWN0ZXVyXG4gICAgICBpZiAoIW1hbmRhdHMpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICB9XG4gICAgICBjb25zdCBtYW5kYXREZXB1dGVMZWdpc2xhdHVyZSA9IG1hbmRhdHMuZmlsdGVyKFxuICAgICAgICAobWFuZGF0OiBNYW5kYXQpID0+XG4gICAgICAgICAgbWFuZGF0LnhzaVR5cGUgPT09IFR5cGVNYW5kYXQuTWFuZGF0UGFybGVtZW50YWlyZVR5cGUgJiZcbiAgICAgICAgICBtYW5kYXQubGVnaXNsYXR1cmUgPT09IG9wdGlvbnMubGVnaXNsYXR1cmUgJiZcbiAgICAgICAgICBtYW5kYXQudHlwZU9yZ2FuZSA9PT0gQ29kZVR5cGVPcmdhbmUuQXNzZW1ibGVlLFxuICAgICAgKVswXVxuICAgICAgcmV0dXJuIG1hbmRhdERlcHV0ZUxlZ2lzbGF0dXJlICE9PSB1bmRlZmluZWRcbiAgICB9KVxuICAgIC5zb3J0KChhLCBiKSA9PlxuICAgICAgYS51aWQubGVuZ3RoID09PSBiLnVpZC5sZW5ndGhcbiAgICAgICAgPyBhLnVpZC5sb2NhbGVDb21wYXJlKGIudWlkKVxuICAgICAgICA6IGEudWlkLmxlbmd0aCAtIGIudWlkLmxlbmd0aCxcbiAgICApXG5cbiAgY29uc3QgZ2l0R3JvdXBVcmwgPSBvcHRpb25zLmNsb25lXG4gICAgPyBvcHRpb25zLmNsb25lLnRyaW0oKS5yZXBsYWNlKC9cXC8rJC8sIFwiXCIpXG4gICAgOiB1bmRlZmluZWRcbiAgY29uc3QgcGhvdG9zRGlyTmFtZSA9IGBwaG90b3NfZGVwdXRlc18ke29wdGlvbnMubGVnaXNsYXR1cmV9YFxuICBpZiAoZ2l0R3JvdXBVcmwgIT09IHVuZGVmaW5lZCkge1xuICAgIGV4ZWNTeW5jKGBnaXQgY2xvbmUgJHtnaXRHcm91cFVybH0vJHtwaG90b3NEaXJOYW1lfS5naXRgLCB7XG4gICAgICBjd2Q6IGRhdGFEaXIsXG4gICAgICBlbnY6IHByb2Nlc3MuZW52LFxuICAgICAgZW5jb2Rpbmc6IFwidXRmLThcIixcbiAgICAgIHN0ZGlvOiBbXCJpZ25vcmVcIiwgXCJpZ25vcmVcIiwgXCJwaXBlXCJdLFxuICAgIH0pXG4gIH1cbiAgY29uc3QgcGhvdG9zRGlyID0gcGF0aC5qb2luKGRhdGFEaXIsIHBob3Rvc0Rpck5hbWUpXG5cbiAgLy8gRG93bmxvYWQgcGhvdG9zLlxuICBmcy5lbnN1cmVEaXJTeW5jKHBob3Rvc0RpcilcbiAgaWYgKG9wdGlvbnMuZmV0Y2gpIHtcbiAgICBjb25zdCBtaXNzaW5nUGhvdG9GaWxlUGF0aCA9IFwiaW1hZ2VzL3RyYW5zcGFyZW50XzE1MHgxOTIuanBnXCJcbiAgICBmb3IgKGNvbnN0IGRlcHV0ZSBvZiBkZXB1dGVzTGVnaXNsYXR1cmUpIHtcbiAgICAgIGNvbnN0IGlkZW50ID0gZGVwdXRlLmV0YXRDaXZpbC5pZGVudFxuICAgICAgY29uc3QgbnVtZXJvRGVwdXRlID0gZGVwdXRlLnVpZC5zdWJzdHJpbmcoMilcbiAgICAgIGNvbnN0IHBob3RvRmlsZW5hbWUgPSBgJHtudW1lcm9EZXB1dGV9LmpwZ2BcbiAgICAgIGNvbnN0IHBob3RvRmlsZVBhdGggPSBwYXRoLmpvaW4ocGhvdG9zRGlyLCBwaG90b0ZpbGVuYW1lKVxuICAgICAgY29uc3QgcGhvdG9UZW1wRmlsZW5hbWUgPSBgJHtudW1lcm9EZXB1dGV9X3RlbXAuanBnYFxuICAgICAgY29uc3QgcGhvdG9UZW1wRmlsZVBhdGggPSBwYXRoLmpvaW4ocGhvdG9zRGlyLCBwaG90b1RlbXBGaWxlbmFtZSlcbiAgICAgIGNvbnN0IHVybFBob3RvID0gYGh0dHA6Ly93d3cyLmFzc2VtYmxlZS1uYXRpb25hbGUuZnIvc3RhdGljL3RyaWJ1bi8ke29wdGlvbnMubGVnaXNsYXR1cmV9L3Bob3Rvcy8ke3Bob3RvRmlsZW5hbWV9YFxuICAgICAgaWYgKCFvcHRpb25zLnNpbGVudCkge1xuICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICBgTG9hZGluZyBwaG90byAke3VybFBob3RvfSBmb3IgJHtpZGVudC5wcmVub219ICR7aWRlbnQubm9tfeKApmAsXG4gICAgICAgIClcbiAgICAgIH1cbiAgICAgIGZvciAobGV0IHJldHJpZXMgPSAwOyByZXRyaWVzIDwgMzsgcmV0cmllcysrKSB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2godXJsUGhvdG8pXG4gICAgICAgIGlmIChyZXNwb25zZS5vaykge1xuICAgICAgICAgIGF3YWl0IHBpcGVsaW5lKHJlc3BvbnNlLmJvZHksIGZzLmNyZWF0ZVdyaXRlU3RyZWFtKHBob3RvVGVtcEZpbGVQYXRoKSlcbiAgICAgICAgICBmcy5yZW5hbWVTeW5jKHBob3RvVGVtcEZpbGVQYXRoLCBwaG90b0ZpbGVQYXRoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJldHJpZXMgPj0gMikge1xuICAgICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICAgIGBGZXRjaCBmYWlsZWQ6ICR7dXJsUGhvdG99ICgke2lkZW50LnByZW5vbX0gJHtpZGVudC5ub219KWAsXG4gICAgICAgICAgKVxuICAgICAgICAgIGNvbnNvbGUud2FybihyZXNwb25zZS5zdGF0dXMsIHJlc3BvbnNlLnN0YXR1c1RleHQpXG4gICAgICAgICAgY29uc29sZS53YXJuKGF3YWl0IHJlc3BvbnNlLnRleHQoKSlcbiAgICAgICAgICBpZiAoZnMuZXhpc3RzU3luYyhwaG90b0ZpbGVQYXRoKSkge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKFwiICA9PiBSZXVzaW5nIGV4aXN0aW5nIGltYWdlXCIpXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybihcIiAgPT4gVXNpbmcgYmxhbmsgaW1hZ2VcIilcbiAgICAgICAgICAgIGZzLmNvcHlGaWxlU3luYyhtaXNzaW5nUGhvdG9GaWxlUGF0aCwgcGhvdG9GaWxlUGF0aClcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIFJlc2l6ZSBwaG90b3MgdG8gMTUweDE5MiwgYmVjYXVzZSBzb21lIGhhdmVuJ3QgZXhhY3RseSB0aGlzIHNpemUuXG4gIGZvciAoY29uc3QgZGVwdXRlIG9mIGRlcHV0ZXNMZWdpc2xhdHVyZSkge1xuICAgIGNvbnN0IGlkZW50ID0gZGVwdXRlLmV0YXRDaXZpbC5pZGVudFxuICAgIGNvbnN0IG51bWVyb0RlcHV0ZSA9IGRlcHV0ZS51aWQuc3Vic3RyaW5nKDIpXG4gICAgaWYgKCFvcHRpb25zLnNpbGVudCkge1xuICAgICAgY29uc29sZS5sb2coXG4gICAgICAgIGBSZXNpemluZyBwaG90byAke251bWVyb0RlcHV0ZX0gZm9yICR7aWRlbnQucHJlbm9tfSAke2lkZW50Lm5vbX3igKZgLFxuICAgICAgKVxuICAgIH1cbiAgICBleGVjU3luYyhcbiAgICAgIGBnbSBjb252ZXJ0IC1yZXNpemUgMTUweDE5MiEgJHtudW1lcm9EZXB1dGV9LmpwZyAke251bWVyb0RlcHV0ZX1fMTUweDE5Mi5qcGdgLFxuICAgICAge1xuICAgICAgICBjd2Q6IHBob3Rvc0RpcixcbiAgICAgIH0sXG4gICAgKVxuICB9XG5cbiAgLy8gQ3JlYXRlIGEgbW9zYWljIG9mIHBob3Rvcy5cbiAgY29uc3QgcGhvdG9CeUlkRGVwdXRlOiB7IFt1aWQ6IHN0cmluZ106IFBob3RvIH0gPSB7fVxuICBjb25zdCByb3dzRmlsZW5hbWVzOiBzdHJpbmdbXSA9IFtdXG4gIGZvciAoXG4gICAgbGV0IGRlcHV0ZUluZGV4ID0gMCwgcm93SW5kZXggPSAwO1xuICAgIGRlcHV0ZUluZGV4IDwgZGVwdXRlc0xlZ2lzbGF0dXJlLmxlbmd0aDtcbiAgICBkZXB1dGVJbmRleCArPSAyNSwgcm93SW5kZXgrK1xuICApIHtcbiAgICBjb25zdCByb3cgPSBkZXB1dGVzTGVnaXNsYXR1cmUuc2xpY2UoZGVwdXRlSW5kZXgsIGRlcHV0ZUluZGV4ICsgMjUpXG4gICAgY29uc3QgcGhvdG9zRmlsZW5hbWVzOiBzdHJpbmdbXSA9IFtdXG4gICAgZm9yIChjb25zdCBbY29sdW1uSW5kZXgsIGRlcHV0ZV0gb2Ygcm93LmVudHJpZXMoKSkge1xuICAgICAgY29uc3QgbnVtZXJvRGVwdXRlID0gZGVwdXRlLnVpZC5zdWJzdHJpbmcoMilcbiAgICAgIGNvbnN0IHBob3RvRmlsZW5hbWUgPSBgJHtudW1lcm9EZXB1dGV9XzE1MHgxOTIuanBnYFxuICAgICAgcGhvdG9zRmlsZW5hbWVzLnB1c2gocGhvdG9GaWxlbmFtZSlcbiAgICAgIHBob3RvQnlJZERlcHV0ZVtkZXB1dGUudWlkXSA9IHtcbiAgICAgICAgY2hlbWluOiBgcGhvdG9zX2RlcHV0ZXNfJHtvcHRpb25zLmxlZ2lzbGF0dXJlfS8ke3Bob3RvRmlsZW5hbWV9YCxcbiAgICAgICAgY2hlbWluTW9zYWlxdWU6IGBwaG90b3NfZGVwdXRlc18ke29wdGlvbnMubGVnaXNsYXR1cmV9L2RlcHV0ZXMuanBnYCxcbiAgICAgICAgaGF1dGV1cjogMTkyLFxuICAgICAgICBsYXJnZXVyOiAxNTAsXG4gICAgICAgIHhNb3NhaXF1ZTogY29sdW1uSW5kZXggKiAxNTAsXG4gICAgICAgIHlNb3NhaXF1ZTogcm93SW5kZXggKiAxOTIsXG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IHJvd0ZpbGVuYW1lID0gYHJvdy0ke3Jvd0luZGV4fS5qcGdgXG4gICAgZXhlY1N5bmMoYGdtIGNvbnZlcnQgJHtwaG90b3NGaWxlbmFtZXMuam9pbihcIiBcIil9ICthcHBlbmQgJHtyb3dGaWxlbmFtZX1gLCB7XG4gICAgICBjd2Q6IHBob3Rvc0RpcixcbiAgICB9KVxuICAgIHJvd3NGaWxlbmFtZXMucHVzaChyb3dGaWxlbmFtZSlcbiAgfVxuICBleGVjU3luYyhgZ20gY29udmVydCAke3Jvd3NGaWxlbmFtZXMuam9pbihcIiBcIil9IC1hcHBlbmQgZGVwdXRlcy5qcGdgLCB7XG4gICAgY3dkOiBwaG90b3NEaXIsXG4gIH0pXG4gIGZvciAoY29uc3Qgcm93RmlsZW5hbWUgb2Ygcm93c0ZpbGVuYW1lcykge1xuICAgIGZzLnVubGlua1N5bmMocGF0aC5qb2luKHBob3Rvc0Rpciwgcm93RmlsZW5hbWUpKVxuICB9XG5cbiAgY29uc3QganNvbkZpbGVQYXRoID0gcGF0aC5qb2luKHBob3Rvc0RpciwgXCJkZXB1dGVzLmpzb25cIilcbiAgZnMud3JpdGVGaWxlU3luYyhqc29uRmlsZVBhdGgsIEpTT04uc3RyaW5naWZ5KHBob3RvQnlJZERlcHV0ZSwgbnVsbCwgMikpXG5cbiAgcmV0dXJuIGNvbW1pdEFuZFB1c2gocGhvdG9zRGlyLCBvcHRpb25zLmNvbW1pdCwgb3B0aW9ucy5yZW1vdGUpXG59XG5cbnJldHJpZXZlUGhvdG9zRGVwdXRlcygpXG4gIC50aGVuKChlcnJvcikgPT4gcHJvY2Vzcy5leGl0KGVycm9yID8gMSA6IDApKVxuICAuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgY29uc29sZS5sb2coZXJyb3IpXG4gICAgcHJvY2Vzcy5leGl0KDIpXG4gIH0pXG4iXSwibWFwcGluZ3MiOiJBQUFBLFNBQXVCQSxRQUF2QixRQUF1QyxlQUF2QztBQUNBLE9BQU9DLGVBQVAsTUFBNEIsbUJBQTVCO0FBQ0EsT0FBT0MsRUFBUCxNQUFlLFVBQWY7QUFDQSxPQUFPQyxLQUFQLE1BQWtCLFlBQWxCO0FBQ0EsT0FBT0MsSUFBUCxNQUFpQixNQUFqQjtBQUNBLE9BQU9DLE1BQVAsTUFBbUIsUUFBbkI7QUFDQSxPQUFPQyxJQUFQLE1BQWlCLE1BQWpCO1NBRVNDLGU7U0FDQUMsaUI7U0FFUEMsYyxFQUdBQyxVO0FBR0YsTUFBTUMsa0JBQWtCLEdBQUcsQ0FDekI7RUFDRUMsS0FBSyxFQUFFLEdBRFQ7RUFFRUMsSUFBSSxFQUFFLCtEQUZSO0VBR0VDLElBQUksRUFBRSxPQUhSO0VBSUVDLElBQUksRUFBRUM7QUFKUixDQUR5QixFQU96QjtFQUNFSixLQUFLLEVBQUUsR0FEVDtFQUVFQyxJQUFJLEVBQUUsZUFGUjtFQUdFQyxJ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
|
|
204
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJleGVjU3luYyIsImNvbW1hbmRMaW5lQXJncyIsImZzIiwiZmV0Y2giLCJwYXRoIiwic3RyZWFtIiwidXRpbCIsIkVuYWJsZWREYXRhc2V0cyIsImxvYWRBc3NlbWJsZWVEYXRhIiwiQ29kZVR5cGVPcmdhbmUiLCJUeXBlTWFuZGF0Iiwib3B0aW9uc0RlZmluaXRpb25zIiwiYWxpYXMiLCJoZWxwIiwibmFtZSIsInR5cGUiLCJTdHJpbmciLCJCb29sZWFuIiwiZGVmYXVsdFZhbHVlIiwibXVsdGlwbGUiLCJkZWZhdWx0T3B0aW9uIiwib3B0aW9ucyIsInBpcGVsaW5lIiwicHJvbWlzaWZ5IiwiY29tbWl0QW5kUHVzaCIsInJlcG9zaXRvcnlEaXIiLCJjb21taXQiLCJyZW1vdGVzIiwiZXJyb3IiLCJjd2QiLCJlbnYiLCJwcm9jZXNzIiwiZW5jb2RpbmciLCJzdGRpbyIsImNoaWxkUHJvY2VzcyIsInN0ZGVyciIsInRlc3QiLCJzdGRvdXQiLCJjb25zb2xlIiwib3V0cHV0IiwicmVtb3RlIiwicmV0cmlldmVQaG90b3NEZXB1dGVzIiwiZGF0YURpciIsImFjdGV1ckJ5VWlkIiwiQWN0ZXVyc0V0T3JnYW5lcyIsImxlZ2lzbGF0dXJlIiwiZGVwdXRlc0xlZ2lzbGF0dXJlIiwiT2JqZWN0IiwidmFsdWVzIiwiZmlsdGVyIiwiYWN0ZXVyIiwibWFuZGF0cyIsIm1hbmRhdERlcHV0ZUxlZ2lzbGF0dXJlIiwibWFuZGF0IiwieHNpVHlwZSIsIk1hbmRhdFBhcmxlbWVudGFpcmVUeXBlIiwidHlwZU9yZ2FuZSIsIkFzc2VtYmxlZSIsInVuZGVmaW5lZCIsInNvcnQiLCJhIiwiYiIsInVpZCIsImxlbmd0aCIsImxvY2FsZUNvbXBhcmUiLCJnaXRHcm91cFVybCIsImNsb25lIiwidHJpbSIsInJlcGxhY2UiLCJwaG90b3NEaXJOYW1lIiwicGhvdG9zRGlyIiwiam9pbiIsImVuc3VyZURpclN5bmMiLCJtaXNzaW5nUGhvdG9GaWxlUGF0aCIsImRlcHV0ZSIsImlkZW50IiwiZXRhdENpdmlsIiwibnVtZXJvRGVwdXRlIiwic3Vic3RyaW5nIiwicGhvdG9GaWxlbmFtZSIsInBob3RvRmlsZVBhdGgiLCJwaG90b1RlbXBGaWxlbmFtZSIsInBob3RvVGVtcEZpbGVQYXRoIiwidXJsUGhvdG8iLCJzaWxlbnQiLCJsb2ciLCJwcmVub20iLCJub20iLCJyZXRyaWVzIiwicmVzcG9uc2UiLCJvayIsImJvZHkiLCJjcmVhdGVXcml0ZVN0cmVhbSIsInJlbmFtZVN5bmMiLCJ3YXJuIiwic3RhdHVzIiwic3RhdHVzVGV4dCIsInRleHQiLCJleGlzdHNTeW5jIiwiY29weUZpbGVTeW5jIiwicGhvdG9CeUlkRGVwdXRlIiwicm93c0ZpbGVuYW1lcyIsImRlcHV0ZUluZGV4Iiwicm93SW5kZXgiLCJyb3ciLCJzbGljZSIsInBob3Rvc0ZpbGVuYW1lcyIsImNvbHVtbkluZGV4IiwiZW50cmllcyIsInB1c2giLCJjaGVtaW4iLCJjaGVtaW5Nb3NhaXF1ZSIsImhhdXRldXIiLCJsYXJnZXVyIiwieE1vc2FpcXVlIiwieU1vc2FpcXVlIiwicm93RmlsZW5hbWUiLCJ1bmxpbmtTeW5jIiwianNvbkZpbGVQYXRoIiwid3JpdGVGaWxlU3luYyIsIkpTT04iLCJzdHJpbmdpZnkiLCJ0aGVuIiwiZXhpdCIsImNhdGNoIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NjcmlwdHMvcmV0cmlldmVfZGVwdXRlc19waG90b3MudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hpbGRQcm9jZXNzLCBleGVjU3luYyB9IGZyb20gXCJjaGlsZF9wcm9jZXNzXCJcbmltcG9ydCBjb21tYW5kTGluZUFyZ3MgZnJvbSBcImNvbW1hbmQtbGluZS1hcmdzXCJcbmltcG9ydCBmcyBmcm9tIFwiZnMtZXh0cmFcIlxuaW1wb3J0IGZldGNoIGZyb20gXCJub2RlLWZldGNoXCJcbmltcG9ydCBwYXRoIGZyb20gXCJwYXRoXCJcbmltcG9ydCBzdHJlYW0gZnJvbSBcInN0cmVhbVwiXG5pbXBvcnQgdXRpbCBmcm9tIFwidXRpbFwiXG5cbmltcG9ydCB7IEVuYWJsZWREYXRhc2V0cyB9IGZyb20gXCIuLi9kYXRhc2V0c1wiXG5pbXBvcnQgeyBsb2FkQXNzZW1ibGVlRGF0YSB9IGZyb20gXCIuLi9sb2FkZXJzXCJcbmltcG9ydCB7XG4gIENvZGVUeXBlT3JnYW5lLFxuICBNYW5kYXQsXG4gIFBob3RvLFxuICBUeXBlTWFuZGF0LFxufSBmcm9tIFwiLi4vdHlwZXMvYWN0ZXVyc19ldF9vcmdhbmVzXCJcblxuY29uc3Qgb3B0aW9uc0RlZmluaXRpb25zID0gW1xuICB7XG4gICAgYWxpYXM6IFwiQ1wiLFxuICAgIGhlbHA6IFwiY2xvbmUgcmVwb3NpdG9yaWVzIGZyb20gZ2l2ZW4gZ3JvdXAgKG9yIG9yZ2FuaXphdGlvbikgZ2l0IFVSTFwiLFxuICAgIG5hbWU6IFwiY2xvbmVcIixcbiAgICB0eXBlOiBTdHJpbmcsXG4gIH0sXG4gIHtcbiAgICBhbGlhczogXCJjXCIsXG4gICAgaGVscDogXCJjb21taXQgcGhvdG9zXCIsXG4gICAgbmFtZTogXCJjb21taXRcIixcbiAgICB0eXBlOiBCb29sZWFuLFxuICB9LFxuICB7XG4gICAgYWxpYXM6IFwiZlwiLFxuICAgIGhlbHA6IFwiZmV0Y2ggZMOpcHV0w6lzJyBwaWN0dXJlcyBpbnN0ZWFkIG9mIHJldHJpZXZpbmcgdGhlbSBmcm9tIGZpbGVzXCIsXG4gICAgbmFtZTogXCJmZXRjaFwiLFxuICAgIHR5cGU6IEJvb2xlYW4sXG4gIH0sXG4gIHtcbiAgICBhbGlhczogXCJsXCIsXG4gICAgZGVmYXVsdFZhbHVlOiBcIjE2XCIsXG4gICAgbmFtZTogXCJsZWdpc2xhdHVyZVwiLFxuICAgIHR5cGU6IFN0cmluZyxcbiAgfSxcbiAge1xuICAgIGFsaWFzOiBcInJcIixcbiAgICBoZWxwOiBcInB1c2ggY29tbWl0IHRvIGdpdmVuIHJlbW90ZVwiLFxuICAgIG11bHRpcGxlOiB0cnVlLFxuICAgIG5hbWU6IFwicmVtb3RlXCIsXG4gICAgdHlwZTogU3RyaW5nLFxuICB9LFxuICB7XG4gICAgYWxpYXM6IFwic1wiLFxuICAgIGhlbHA6IFwiZG9uJ3QgbG9nIGFueXRoaW5nXCIsXG4gICAgbmFtZTogXCJzaWxlbnRcIixcbiAgICB0eXBlOiBCb29sZWFuLFxuICB9LFxuICB7XG4gICAgZGVmYXVsdE9wdGlvbjogdHJ1ZSxcbiAgICBoZWxwOiBcImRpcmVjdG9yeSBjb250YWluaW5nIEFzc2VtYmzDqWUgb3BlbiBkYXRhIGZpbGVzXCIsXG4gICAgbmFtZTogXCJkYXRhRGlyXCIsXG4gICAgdHlwZTogU3RyaW5nLFxuICB9LFxuXVxuY29uc3Qgb3B0aW9ucyA9IGNvbW1hbmRMaW5lQXJncyhvcHRpb25zRGVmaW5pdGlvbnMpXG5jb25zdCBwaXBlbGluZSA9IHV0aWwucHJvbWlzaWZ5KHN0cmVhbS5waXBlbGluZSlcblxuZnVuY3Rpb24gY29tbWl0QW5kUHVzaChcbiAgcmVwb3NpdG9yeURpcjogc3RyaW5nLFxuICBjb21taXQ6IGJvb2xlYW4sXG4gIHJlbW90ZXM/OiBzdHJpbmdbXSxcbik6IGJvb2xlYW4ge1xuICBsZXQgZXJyb3IgPSBmYWxzZVxuICBpZiAoY29tbWl0KSB7XG4gICAgZXhlY1N5bmMoXCJnaXQgYWRkIC5cIiwge1xuICAgICAgY3dkOiByZXBvc2l0b3J5RGlyLFxuICAgICAgZW52OiBwcm9jZXNzLmVudixcbiAgICAgIGVuY29kaW5nOiBcInV0Zi04XCIsXG4gICAgICBzdGRpbzogW1wiaWdub3JlXCIsIFwiaWdub3JlXCIsIFwicGlwZVwiXSxcbiAgICB9KVxuICAgIHRyeSB7XG4gICAgICBleGVjU3luYygnZ2l0IGNvbW1pdCAtbSBcIk5vdXZlbGxlIG1vaXNzb25cIicsIHtcbiAgICAgICAgY3dkOiByZXBvc2l0b3J5RGlyLFxuICAgICAgICBlbnY6IHByb2Nlc3MuZW52LFxuICAgICAgICBlbmNvZGluZzogXCJ1dGYtOFwiLFxuICAgICAgfSlcbiAgICB9IGNhdGNoIChjaGlsZFByb2Nlc3MpIHtcbiAgICAgIGlmIChcbiAgICAgICAgKGNoaWxkUHJvY2VzcyBhcyBDaGlsZFByb2Nlc3MpLnN0ZGVyciA9PT0gbnVsbCB8fFxuICAgICAgICAhL25vdGhpbmcgdG8gY29tbWl0Ly50ZXN0KChjaGlsZFByb2Nlc3MgYXMgYW55KS5zdGRvdXQpXG4gICAgICApIHtcbiAgICAgICAgY29uc29sZS5lcnJvcigoY2hpbGRQcm9jZXNzIGFzIGFueSkub3V0cHV0KVxuICAgICAgICB0aHJvdyBjaGlsZFByb2Nlc3NcbiAgICAgIH1cbiAgICB9XG4gICAgZm9yIChjb25zdCByZW1vdGUgb2YgcmVtb3RlcyB8fCBbXSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgZXhlY1N5bmMoYGdpdCBwdXNoICR7cmVtb3RlfSBtYXN0ZXJgLCB7XG4gICAgICAgICAgY3dkOiByZXBvc2l0b3J5RGlyLFxuICAgICAgICAgIGVudjogcHJvY2Vzcy5lbnYsXG4gICAgICAgICAgZW5jb2Rpbmc6IFwidXRmLThcIixcbiAgICAgICAgICBzdGRpbzogW1wiaWdub3JlXCIsIFwiaWdub3JlXCIsIFwicGlwZVwiXSxcbiAgICAgICAgfSlcbiAgICAgIH0gY2F0Y2ggKGNoaWxkUHJvY2Vzcykge1xuICAgICAgICAvLyBEb24ndCBzdG9wIHdoZW4gcHVzaCBmYWlscy5cbiAgICAgICAgY29uc29sZS5lcnJvcigoY2hpbGRQcm9jZXNzIGFzIGFueSkub3V0cHV0KVxuICAgICAgICBlcnJvciA9IHRydWVcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIGVycm9yXG59XG5cbmFzeW5jIGZ1bmN0aW9uIHJldHJpZXZlUGhvdG9zRGVwdXRlcygpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgY29uc3QgZGF0YURpciA9IG9wdGlvbnMuZGF0YURpclxuICBjb25zdCB7IGFjdGV1ckJ5VWlkIH0gPSBsb2FkQXNzZW1ibGVlRGF0YShcbiAgICBkYXRhRGlyLFxuICAgIEVuYWJsZWREYXRhc2V0cy5BY3RldXJzRXRPcmdhbmVzLFxuICAgIG9wdGlvbnMubGVnaXNsYXR1cmUsXG4gIClcbiAgY29uc3QgZGVwdXRlc0xlZ2lzbGF0dXJlID0gT2JqZWN0LnZhbHVlcyhhY3RldXJCeVVpZClcbiAgICAuZmlsdGVyKChhY3RldXIpID0+IHtcbiAgICAgIGNvbnN0IHsgbWFuZGF0cyB9ID0gYWN0ZXVyXG4gICAgICBpZiAoIW1hbmRhdHMpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICB9XG4gICAgICBjb25zdCBtYW5kYXREZXB1dGVMZWdpc2xhdHVyZSA9IG1hbmRhdHMuZmlsdGVyKFxuICAgICAgICAobWFuZGF0OiBNYW5kYXQpID0+XG4gICAgICAgICAgbWFuZGF0LnhzaVR5cGUgPT09IFR5cGVNYW5kYXQuTWFuZGF0UGFybGVtZW50YWlyZVR5cGUgJiZcbiAgICAgICAgICBtYW5kYXQubGVnaXNsYXR1cmUgPT09IG9wdGlvbnMubGVnaXNsYXR1cmUgJiZcbiAgICAgICAgICBtYW5kYXQudHlwZU9yZ2FuZSA9PT0gQ29kZVR5cGVPcmdhbmUuQXNzZW1ibGVlLFxuICAgICAgKVswXVxuICAgICAgcmV0dXJuIG1hbmRhdERlcHV0ZUxlZ2lzbGF0dXJlICE9PSB1bmRlZmluZWRcbiAgICB9KVxuICAgIC5zb3J0KChhLCBiKSA9PlxuICAgICAgYS51aWQubGVuZ3RoID09PSBiLnVpZC5sZW5ndGhcbiAgICAgICAgPyBhLnVpZC5sb2NhbGVDb21wYXJlKGIudWlkKVxuICAgICAgICA6IGEudWlkLmxlbmd0aCAtIGIudWlkLmxlbmd0aCxcbiAgICApXG5cbiAgY29uc3QgZ2l0R3JvdXBVcmwgPSBvcHRpb25zLmNsb25lXG4gICAgPyBvcHRpb25zLmNsb25lLnRyaW0oKS5yZXBsYWNlKC9cXC8rJC8sIFwiXCIpXG4gICAgOiB1bmRlZmluZWRcbiAgY29uc3QgcGhvdG9zRGlyTmFtZSA9IGBwaG90b3NfZGVwdXRlc18ke29wdGlvbnMubGVnaXNsYXR1cmV9YFxuICBpZiAoZ2l0R3JvdXBVcmwgIT09IHVuZGVmaW5lZCkge1xuICAgIGV4ZWNTeW5jKGBnaXQgY2xvbmUgJHtnaXRHcm91cFVybH0vJHtwaG90b3NEaXJOYW1lfS5naXRgLCB7XG4gICAgICBjd2Q6IGRhdGFEaXIsXG4gICAgICBlbnY6IHByb2Nlc3MuZW52LFxuICAgICAgZW5jb2Rpbmc6IFwidXRmLThcIixcbiAgICAgIHN0ZGlvOiBbXCJpZ25vcmVcIiwgXCJpZ25vcmVcIiwgXCJwaXBlXCJdLFxuICAgIH0pXG4gIH1cbiAgY29uc3QgcGhvdG9zRGlyID0gcGF0aC5qb2luKGRhdGFEaXIsIHBob3Rvc0Rpck5hbWUpXG5cbiAgLy8gRG93bmxvYWQgcGhvdG9zLlxuICBmcy5lbnN1cmVEaXJTeW5jKHBob3Rvc0RpcilcbiAgaWYgKG9wdGlvbnMuZmV0Y2gpIHtcbiAgICBjb25zdCBtaXNzaW5nUGhvdG9GaWxlUGF0aCA9IFwiaW1hZ2VzL3RyYW5zcGFyZW50XzE1MHgxOTIuanBnXCJcbiAgICBmb3IgKGNvbnN0IGRlcHV0ZSBvZiBkZXB1dGVzTGVnaXNsYXR1cmUpIHtcbiAgICAgIGNvbnN0IGlkZW50ID0gZGVwdXRlLmV0YXRDaXZpbC5pZGVudFxuICAgICAgY29uc3QgbnVtZXJvRGVwdXRlID0gZGVwdXRlLnVpZC5zdWJzdHJpbmcoMilcbiAgICAgIGNvbnN0IHBob3RvRmlsZW5hbWUgPSBgJHtudW1lcm9EZXB1dGV9LmpwZ2BcbiAgICAgIGNvbnN0IHBob3RvRmlsZVBhdGggPSBwYXRoLmpvaW4ocGhvdG9zRGlyLCBwaG90b0ZpbGVuYW1lKVxuICAgICAgY29uc3QgcGhvdG9UZW1wRmlsZW5hbWUgPSBgJHtudW1lcm9EZXB1dGV9X3RlbXAuanBnYFxuICAgICAgY29uc3QgcGhvdG9UZW1wRmlsZVBhdGggPSBwYXRoLmpvaW4ocGhvdG9zRGlyLCBwaG90b1RlbXBGaWxlbmFtZSlcbiAgICAgIGNvbnN0IHVybFBob3RvID0gYGh0dHA6Ly93d3cyLmFzc2VtYmxlZS1uYXRpb25hbGUuZnIvc3RhdGljL3RyaWJ1bi8ke29wdGlvbnMubGVnaXNsYXR1cmV9L3Bob3Rvcy8ke3Bob3RvRmlsZW5hbWV9YFxuICAgICAgaWYgKCFvcHRpb25zLnNpbGVudCkge1xuICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICBgTG9hZGluZyBwaG90byAke3VybFBob3RvfSBmb3IgJHtpZGVudC5wcmVub219ICR7aWRlbnQubm9tfeKApmAsXG4gICAgICAgIClcbiAgICAgIH1cbiAgICAgIGZvciAobGV0IHJldHJpZXMgPSAwOyByZXRyaWVzIDwgMzsgcmV0cmllcysrKSB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2godXJsUGhvdG8pXG4gICAgICAgIGlmIChyZXNwb25zZS5vaykge1xuICAgICAgICAgIGF3YWl0IHBpcGVsaW5lKHJlc3BvbnNlLmJvZHksIGZzLmNyZWF0ZVdyaXRlU3RyZWFtKHBob3RvVGVtcEZpbGVQYXRoKSlcbiAgICAgICAgICBmcy5yZW5hbWVTeW5jKHBob3RvVGVtcEZpbGVQYXRoLCBwaG90b0ZpbGVQYXRoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJldHJpZXMgPj0gMikge1xuICAgICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICAgIGBGZXRjaCBmYWlsZWQ6ICR7dXJsUGhvdG99ICgke2lkZW50LnByZW5vbX0gJHtpZGVudC5ub219KWAsXG4gICAgICAgICAgKVxuICAgICAgICAgIGNvbnNvbGUud2FybihyZXNwb25zZS5zdGF0dXMsIHJlc3BvbnNlLnN0YXR1c1RleHQpXG4gICAgICAgICAgY29uc29sZS53YXJuKGF3YWl0IHJlc3BvbnNlLnRleHQoKSlcbiAgICAgICAgICBpZiAoZnMuZXhpc3RzU3luYyhwaG90b0ZpbGVQYXRoKSkge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKFwiICA9PiBSZXVzaW5nIGV4aXN0aW5nIGltYWdlXCIpXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybihcIiAgPT4gVXNpbmcgYmxhbmsgaW1hZ2VcIilcbiAgICAgICAgICAgIGZzLmNvcHlGaWxlU3luYyhtaXNzaW5nUGhvdG9GaWxlUGF0aCwgcGhvdG9GaWxlUGF0aClcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIFJlc2l6ZSBwaG90b3MgdG8gMTUweDE5MiwgYmVjYXVzZSBzb21lIGhhdmVuJ3QgZXhhY3RseSB0aGlzIHNpemUuXG4gIGZvciAoY29uc3QgZGVwdXRlIG9mIGRlcHV0ZXNMZWdpc2xhdHVyZSkge1xuICAgIGNvbnN0IGlkZW50ID0gZGVwdXRlLmV0YXRDaXZpbC5pZGVudFxuICAgIGNvbnN0IG51bWVyb0RlcHV0ZSA9IGRlcHV0ZS51aWQuc3Vic3RyaW5nKDIpXG4gICAgaWYgKCFvcHRpb25zLnNpbGVudCkge1xuICAgICAgY29uc29sZS5sb2coXG4gICAgICAgIGBSZXNpemluZyBwaG90byAke251bWVyb0RlcHV0ZX0gZm9yICR7aWRlbnQucHJlbm9tfSAke2lkZW50Lm5vbX3igKZgLFxuICAgICAgKVxuICAgIH1cbiAgICBleGVjU3luYyhcbiAgICAgIGBnbSBjb252ZXJ0IC1yZXNpemUgMTUweDE5MiEgJHtudW1lcm9EZXB1dGV9LmpwZyAke251bWVyb0RlcHV0ZX1fMTUweDE5Mi5qcGdgLFxuICAgICAge1xuICAgICAgICBjd2Q6IHBob3Rvc0RpcixcbiAgICAgIH0sXG4gICAgKVxuICB9XG5cbiAgLy8gQ3JlYXRlIGEgbW9zYWljIG9mIHBob3Rvcy5cbiAgY29uc3QgcGhvdG9CeUlkRGVwdXRlOiB7IFt1aWQ6IHN0cmluZ106IFBob3RvIH0gPSB7fVxuICBjb25zdCByb3dzRmlsZW5hbWVzOiBzdHJpbmdbXSA9IFtdXG4gIGZvciAoXG4gICAgbGV0IGRlcHV0ZUluZGV4ID0gMCwgcm93SW5kZXggPSAwO1xuICAgIGRlcHV0ZUluZGV4IDwgZGVwdXRlc0xlZ2lzbGF0dXJlLmxlbmd0aDtcbiAgICBkZXB1dGVJbmRleCArPSAyNSwgcm93SW5kZXgrK1xuICApIHtcbiAgICBjb25zdCByb3cgPSBkZXB1dGVzTGVnaXNsYXR1cmUuc2xpY2UoZGVwdXRlSW5kZXgsIGRlcHV0ZUluZGV4ICsgMjUpXG4gICAgY29uc3QgcGhvdG9zRmlsZW5hbWVzOiBzdHJpbmdbXSA9IFtdXG4gICAgZm9yIChjb25zdCBbY29sdW1uSW5kZXgsIGRlcHV0ZV0gb2Ygcm93LmVudHJpZXMoKSkge1xuICAgICAgY29uc3QgbnVtZXJvRGVwdXRlID0gZGVwdXRlLnVpZC5zdWJzdHJpbmcoMilcbiAgICAgIGNvbnN0IHBob3RvRmlsZW5hbWUgPSBgJHtudW1lcm9EZXB1dGV9XzE1MHgxOTIuanBnYFxuICAgICAgcGhvdG9zRmlsZW5hbWVzLnB1c2gocGhvdG9GaWxlbmFtZSlcbiAgICAgIHBob3RvQnlJZERlcHV0ZVtkZXB1dGUudWlkXSA9IHtcbiAgICAgICAgY2hlbWluOiBgcGhvdG9zX2RlcHV0ZXNfJHtvcHRpb25zLmxlZ2lzbGF0dXJlfS8ke3Bob3RvRmlsZW5hbWV9YCxcbiAgICAgICAgY2hlbWluTW9zYWlxdWU6IGBwaG90b3NfZGVwdXRlc18ke29wdGlvbnMubGVnaXNsYXR1cmV9L2RlcHV0ZXMuanBnYCxcbiAgICAgICAgaGF1dGV1cjogMTkyLFxuICAgICAgICBsYXJnZXVyOiAxNTAsXG4gICAgICAgIHhNb3NhaXF1ZTogY29sdW1uSW5kZXggKiAxNTAsXG4gICAgICAgIHlNb3NhaXF1ZTogcm93SW5kZXggKiAxOTIsXG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IHJvd0ZpbGVuYW1lID0gYHJvdy0ke3Jvd0luZGV4fS5qcGdgXG4gICAgZXhlY1N5bmMoYGdtIGNvbnZlcnQgJHtwaG90b3NGaWxlbmFtZXMuam9pbihcIiBcIil9ICthcHBlbmQgJHtyb3dGaWxlbmFtZX1gLCB7XG4gICAgICBjd2Q6IHBob3Rvc0RpcixcbiAgICB9KVxuICAgIHJvd3NGaWxlbmFtZXMucHVzaChyb3dGaWxlbmFtZSlcbiAgfVxuICBleGVjU3luYyhgZ20gY29udmVydCAke3Jvd3NGaWxlbmFtZXMuam9pbihcIiBcIil9IC1hcHBlbmQgZGVwdXRlcy5qcGdgLCB7XG4gICAgY3dkOiBwaG90b3NEaXIsXG4gIH0pXG4gIGZvciAoY29uc3Qgcm93RmlsZW5hbWUgb2Ygcm93c0ZpbGVuYW1lcykge1xuICAgIGZzLnVubGlua1N5bmMocGF0aC5qb2luKHBob3Rvc0Rpciwgcm93RmlsZW5hbWUpKVxuICB9XG5cbiAgY29uc3QganNvbkZpbGVQYXRoID0gcGF0aC5qb2luKHBob3Rvc0RpciwgXCJkZXB1dGVzLmpzb25cIilcbiAgZnMud3JpdGVGaWxlU3luYyhqc29uRmlsZVBhdGgsIEpTT04uc3RyaW5naWZ5KHBob3RvQnlJZERlcHV0ZSwgbnVsbCwgMikpXG5cbiAgcmV0dXJuIGNvbW1pdEFuZFB1c2gocGhvdG9zRGlyLCBvcHRpb25zLmNvbW1pdCwgb3B0aW9ucy5yZW1vdGUpXG59XG5cbnJldHJpZXZlUGhvdG9zRGVwdXRlcygpXG4gIC50aGVuKChlcnJvcikgPT4gcHJvY2Vzcy5leGl0KGVycm9yID8gMSA6IDApKVxuICAuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgY29uc29sZS5sb2coZXJyb3IpXG4gICAgcHJvY2Vzcy5leGl0KDIpXG4gIH0pXG4iXSwibWFwcGluZ3MiOiJBQUFBLFNBQXVCQSxRQUFRLFFBQVEsZUFBZTtBQUN0RCxPQUFPQyxlQUFlLE1BQU0sbUJBQW1CO0FBQy9DLE9BQU9DLEVBQUUsTUFBTSxVQUFVO0FBQ3pCLE9BQU9DLEtBQUssTUFBTSxZQUFZO0FBQzlCLE9BQU9DLElBQUksTUFBTSxNQUFNO0FBQ3ZCLE9BQU9DLE1BQU0sTUFBTSxRQUFRO0FBQzNCLE9BQU9DLElBQUksTUFBTSxNQUFNO0FBQUEsU0FFZEMsZUFBZTtBQUFBLFNBQ2ZDLGlCQUFpQjtBQUFBLFNBRXhCQyxjQUFjLEVBR2RDLFVBQVU7QUFHWixNQUFNQyxrQkFBa0IsR0FBRyxDQUN6QjtFQUNFQyxLQUFLLEVBQUUsR0FBRztFQUNWQyxJQUFJLEVBQUUsK0RBQStEO0VBQ3JFQyxJQUFJLEVBQUUsT0FBTztFQUNiQyxJQUFJLEVBQUVDO0FBQ1IsQ0FBQyxFQUNEO0VBQ0VKLEtBQUssRUFBRSxHQUFHO0VBQ1ZDLElBQUksRUFBRSxlQUFlO0VBQ3JCQyxJQUFJLEVBQUUsUUFBUTtFQUNkQyxJQUFJLEVBQUVFO0FBQ1IsQ0FBQyxFQUNEO0VBQ0VMLEtBQUssRUFBRSxHQUFHO0VBQ1ZDLElBQUksRUFBRSwrREFBK0Q7RUFDckVDLElBQUksRUFBRSxPQUFPO0VBQ2JDLElBQUksRUFBRUU7QUFDUixDQUFDLEVBQ0Q7RUFDRUwsS0FBSyxFQUFFLEdBQUc7RUFDVk0sWUFBWSxFQUFFLElBQUk7RUFDbEJKLElBQUksRUFBRSxhQUFhO0VBQ25CQyxJQUFJLEVBQUVDO0FBQ1IsQ0FBQyxFQUNEO0VBQ0VKLEtBQUssRUFBRSxHQUFHO0VBQ1ZDLElBQUksRUFBRSw2QkFBNkI7RUFDbkNNLFFBQVEsRUFBRSxJQUFJO0VBQ2RMLElBQUksRUFBRSxRQUFRO0VBQ2RDLElBQUksRUFBRUM7QUFDUixDQUFDLEVBQ0Q7RUFDRUosS0FBSyxFQUFFLEdBQUc7RUFDVkMsSUFBSSxFQUFFLG9CQUFvQjtFQUMxQkMsSUFBSSxFQUFFLFFBQVE7RUFDZEMsSUFBSSxFQUFFRTtBQUNSLENBQUMsRUFDRDtFQUNFRyxhQUFhLEVBQUUsSUFBSTtFQUNuQlAsSUFBSSxFQUFFLGdEQUFnRDtFQUN0REMsSUFBSSxFQUFFLFNBQVM7RUFDZkMsSUFBSSxFQUFFQztBQUNSLENBQUMsQ0FDRjtBQUNELE1BQU1LLE9BQU8sR0FBR3BCLGVBQWUsQ0FBQ1Usa0JBQWtCLENBQUM7QUFDbkQsTUFBTVcsUUFBUSxHQUFHaEIsSUFBSSxDQUFDaUIsU0FBUyxDQUFDbEIsTUFBTSxDQUFDaUIsUUFBUSxDQUFDO0FBRWhELFNBQVNFLGFBQWEsQ0FDcEJDLGFBQXFCLEVBQ3JCQyxNQUFlLEVBQ2ZDLE9BQWtCLEVBQ1Q7RUFDVCxJQUFJQyxLQUFLLEdBQUcsS0FBSztFQUNqQixJQUFJRixNQUFNLEVBQUU7SUFDVjFCLFFBQVEsQ0FBQyxXQUFXLEVBQUU7TUFDcEI2QixHQUFHLEVBQUVKLGFBQWE7TUFDbEJLLEdBQUcsRUFBRUMsT0FBTyxDQUFDRCxHQUFHO01BQ2hCRSxRQUFRLEVBQUUsT0FBTztNQUNqQkMsS0FBSyxFQUFFLENBQUMsUUFBUSxFQUFFLFFBQVEsRUFBRSxNQUFNO0lBQ3BDLENBQUMsQ0FBQztJQUNGLElBQUk7TUFDRmpDLFFBQVEsQ0FBQyxrQ0FBa0MsRUFBRTtRQUMzQzZCLEdBQUcsRUFBRUosYUFBYTtRQUNsQkssR0FBRyxFQUFFQyxPQUFPLENBQUNELEdBQUc7UUFDaEJFLFFBQVEsRUFBRTtNQUNaLENBQUMsQ0FBQztJQUNKLENBQUMsQ0FBQyxPQUFPRSxZQUFZLEVBQUU7TUFDckIsSUFDR0EsWUFBWSxDQUFrQkMsTUFBTSxLQUFLLElBQUksSUFDOUMsQ0FBQyxtQkFBbUIsQ0FBQ0MsSUFBSSxDQUFFRixZQUFZLENBQVNHLE1BQU0sQ0FBQyxFQUN2RDtRQUNBQyxPQUFPLENBQUNWLEtBQUssQ0FBRU0sWUFBWSxDQUFTSyxNQUFNLENBQUM7UUFDM0MsTUFBTUwsWUFBWTtNQUNwQjtJQUNGO0lBQ0EsS0FBSyxNQUFNTSxNQUFNLElBQUliLE9BQU8sSUFBSSxFQUFFLEVBQUU7TUFDbEMsSUFBSTtRQUNGM0IsUUFBUSxDQUFFLFlBQVd3QyxNQUFPLFNBQVEsRUFBRTtVQUNwQ1gsR0FBRyxFQUFFSixhQUFhO1VBQ2xCSyxHQUFHLEVBQUVDLE9BQU8sQ0FBQ0QsR0FBRztVQUNoQkUsUUFBUSxFQUFFLE9BQU87VUFDakJDLEtBQUssRUFBRSxDQUFDLFFBQVEsRUFBRSxRQUFRLEVBQUUsTUFBTTtRQUNwQyxDQUFDLENBQUM7TUFDSixDQUFDLENBQUMsT0FBT0MsWUFBWSxFQUFFO1FBQ3JCO1FBQ0FJLE9BQU8sQ0FBQ1YsS0FBSyxDQUFFTSxZQUFZLENBQVNLLE1BQU0sQ0FBQztRQUMzQ1gsS0FBSyxHQUFHLElBQUk7TUFDZDtJQUNGO0VBQ0Y7RUFDQSxPQUFPQSxLQUFLO0FBQ2Q7QUFFQSxlQUFlYSxxQkFBcUIsR0FBcUI7RUFDdkQsTUFBTUMsT0FBTyxHQUFHckIsT0FBTyxDQUFDcUIsT0FBTztFQUMvQixNQUFNO0lBQUVDO0VBQVksQ0FBQyxHQUFHbkMsaUJBQWlCLENBQ3ZDa0MsT0FBTyxFQUNQbkMsZUFBZSxDQUFDcUMsZ0JBQWdCLEVBQ2hDdkIsT0FBTyxDQUFDd0IsV0FBVyxDQUNwQjtFQUNELE1BQU1DLGtCQUFrQixHQUFHQyxNQUFNLENBQUNDLE1BQU0sQ0FBQ0wsV0FBVyxDQUFDLENBQ2xETSxNQUFNLENBQUVDLE1BQU0sSUFBSztJQUNsQixNQUFNO01BQUVDO0lBQVEsQ0FBQyxHQUFHRCxNQUFNO0lBQzFCLElBQUksQ0FBQ0MsT0FBTyxFQUFFO01BQ1osT0FBTyxLQUFLO0lBQ2Q7SUFDQSxNQUFNQyx1QkFBdUIsR0FBR0QsT0FBTyxDQUFDRixNQUFNLENBQzNDSSxNQUFjLElBQ2JBLE1BQU0sQ0FBQ0MsT0FBTyxLQUFLNUMsVUFBVSxDQUFDNkMsdUJBQXVCLElBQ3JERixNQUFNLENBQUNSLFdBQVcsS0FBS3hCLE9BQU8sQ0FBQ3dCLFdBQVcsSUFDMUNRLE1BQU0sQ0FBQ0csVUFBVSxLQUFLL0MsY0FBYyxDQUFDZ0QsU0FBUyxDQUNqRCxDQUFDLENBQUMsQ0FBQztJQUNKLE9BQU9MLHVCQUF1QixLQUFLTSxTQUFTO0VBQzlDLENBQUMsQ0FBQyxDQUNEQyxJQUFJLENBQUMsQ0FBQ0MsQ0FBQyxFQUFFQyxDQUFDLEtBQ1RELENBQUMsQ0FBQ0UsR0FBRyxDQUFDQyxNQUFNLEtBQUtGLENBQUMsQ0FBQ0MsR0FBRyxDQUFDQyxNQUFNLEdBQ3pCSCxDQUFDLENBQUNFLEdBQUcsQ0FBQ0UsYUFBYSxDQUFDSCxDQUFDLENBQUNDLEdBQUcsQ0FBQyxHQUMxQkYsQ0FBQyxDQUFDRSxHQUFHLENBQUNDLE1BQU0sR0FBR0YsQ0FBQyxDQUFDQyxHQUFHLENBQUNDLE1BQU0sQ0FDaEM7RUFFSCxNQUFNRSxXQUFXLEdBQUc1QyxPQUFPLENBQUM2QyxLQUFLLEdBQzdCN0MsT0FBTyxDQUFDNkMsS0FBSyxDQUFDQyxJQUFJLEVBQUUsQ0FBQ0MsT0FBTyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsR0FDeENWLFNBQVM7RUFDYixNQUFNVyxhQUFhLEdBQUksa0JBQWlCaEQsT0FBTyxDQUFDd0IsV0FBWSxFQUFDO0VBQzdELElBQUlvQixXQUFXLEtBQUtQLFNBQVMsRUFBRTtJQUM3QjFELFFBQVEsQ0FBRSxhQUFZaUUsV0FBWSxJQUFHSSxhQUFjLE1BQUssRUFBRTtNQUN4RHhDLEdBQUcsRUFBRWEsT0FBTztNQUNaWixHQUFHLEVBQUVDLE9BQU8sQ0FBQ0QsR0FBRztNQUNoQkUsUUFBUSxFQUFFLE9BQU87TUFDakJDLEtBQUssRUFBRSxDQUFDLFFBQVEsRUFBRSxRQUFRLEVBQUUsTUFBTTtJQUNwQyxDQUFDLENBQUM7RUFDSjtFQUNBLE1BQU1xQyxTQUFTLEdBQUdsRSxJQUFJLENBQUNtRSxJQUFJLENBQUM3QixPQUFPLEVBQUUyQixhQUFhLENBQUM7O0VBRW5EO0VBQ0FuRSxFQUFFLENBQUNzRSxhQUFhLENBQUNGLFNBQVMsQ0FBQztFQUMzQixJQUFJakQsT0FBTyxDQUFDbEIsS0FBSyxFQUFFO0lBQ2pCLE1BQU1zRSxvQkFBb0IsR0FBRyxnQ0FBZ0M7SUFDN0QsS0FBSyxNQUFNQyxNQUFNLElBQUk1QixrQkFBa0IsRUFBRTtNQUN2QyxNQUFNNkIsS0FBSyxHQUFHRCxNQUFNLENBQUNFLFNBQVMsQ0FBQ0QsS0FBSztNQUNwQyxNQUFNRSxZQUFZLEdBQUdILE1BQU0sQ0FBQ1osR0FBRyxDQUFDZ0IsU0FBUyxDQUFDLENBQUMsQ0FBQztNQUM1QyxNQUFNQyxhQUFhLEdBQUksR0FBRUYsWUFBYSxNQUFLO01BQzNDLE1BQU1HLGFBQWEsR0FBRzVFLElBQUksQ0FBQ21FLElBQUksQ0FBQ0QsU0FBUyxFQUFFUyxhQUFhLENBQUM7TUFDekQsTUFBTUUsaUJBQWlCLEdBQUksR0FBRUosWUFBYSxXQUFVO01BQ3BELE1BQU1LLGlCQUFpQixHQUFHOUUsSUFBSSxDQUFDbUUsSUFBSSxDQUFDRCxTQUFTLEVBQUVXLGlCQUFpQixDQUFDO01BQ2pFLE1BQU1FLFFBQVEsR0FBSSxvREFBbUQ5RCxPQUFPLENBQUN3QixXQUFZLFdBQVVrQyxhQUFjLEVBQUM7TUFDbEgsSUFBSSxDQUFDMUQsT0FBTyxDQUFDK0QsTUFBTSxFQUFFO1FBQ25COUMsT0FBTyxDQUFDK0MsR0FBRyxDQUNSLGlCQUFnQkYsUUFBUyxRQUFPUixLQUFLLENBQUNXLE1BQU8sSUFBR1gsS0FBSyxDQUFDWSxHQUFJLEdBQUUsQ0FDOUQ7TUFDSDtNQUNBLEtBQUssSUFBSUMsT0FBTyxHQUFHLENBQUMsRUFBRUEsT0FBTyxHQUFHLENBQUMsRUFBRUEsT0FBTyxFQUFFLEVBQUU7UUFDNUMsTUFBTUMsUUFBUSxHQUFHLE1BQU10RixLQUFLLENBQUNnRixRQUFRLENBQUM7UUFDdEMsSUFBSU0sUUFBUSxDQUFDQyxFQUFFLEVBQUU7VUFDZixNQUFNcEUsUUFBUSxDQUFDbUUsUUFBUSxDQUFDRSxJQUFJLEVBQUV6RixFQUFFLENBQUMwRixpQkFBaUIsQ0FBQ1YsaUJBQWlCLENBQUMsQ0FBQztVQUN0RWhGLEVBQUUsQ0FBQzJGLFVBQVUsQ0FBQ1gsaUJBQWlCLEVBQUVGLGFBQWEsQ0FBQztVQUMvQztRQUNGO1FBQ0EsSUFBSVEsT0FBTyxJQUFJLENBQUMsRUFBRTtVQUNoQmxELE9BQU8sQ0FBQ3dELElBQUksQ0FDVCxpQkFBZ0JYLFFBQVMsS0FBSVIsS0FBSyxDQUFDVyxNQUFPLElBQUdYLEtBQUssQ0FBQ1ksR0FBSSxHQUFFLENBQzNEO1VBQ0RqRCxPQUFPLENBQUN3RCxJQUFJLENBQUNMLFFBQVEsQ0FBQ00sTUFBTSxFQUFFTixRQUFRLENBQUNPLFVBQVUsQ0FBQztVQUNsRDFELE9BQU8sQ0FBQ3dELElBQUksQ0FBQyxNQUFNTCxRQUFRLENBQUNRLElBQUksRUFBRSxDQUFDO1VBQ25DLElBQUkvRixFQUFFLENBQUNnRyxVQUFVLENBQUNsQixhQUFhLENBQUMsRUFBRTtZQUNoQzFDLE9BQU8sQ0FBQ3dELElBQUksQ0FBQyw2QkFBNkIsQ0FBQztVQUM3QyxDQUFDLE1BQU07WUFDTHhELE9BQU8sQ0FBQ3dELElBQUksQ0FBQyx3QkFBd0IsQ0FBQztZQUN0QzVGLEVBQUUsQ0FBQ2lHLFlBQVksQ0FBQzFCLG9CQUFvQixFQUFFTyxhQUFhLENBQUM7VUFDdEQ7VUFDQTtRQUNGO01BQ0Y7SUFDRjtFQUNGOztFQUVBO0VBQ0EsS0FBSyxNQUFNTixNQUFNLElBQUk1QixrQkFBa0IsRUFBRTtJQUN2QyxNQUFNNkIsS0FBSyxHQUFHRCxNQUFNLENBQUNFLFNBQVMsQ0FBQ0QsS0FBSztJQUNwQyxNQUFNRSxZQUFZLEdBQUdILE1BQU0sQ0FBQ1osR0FBRyxDQUFDZ0IsU0FBUyxDQUFDLENBQUMsQ0FBQztJQUM1QyxJQUFJLENBQUN6RCxPQUFPLENBQUMrRCxNQUFNLEVBQUU7TUFDbkI5QyxPQUFPLENBQUMrQyxHQUFHLENBQ1Isa0JBQWlCUixZQUFhLFFBQU9GLEtBQUssQ0FBQ1csTUFBTyxJQUFHWCxLQUFLLENBQUNZLEdBQUksR0FBRSxDQUNuRTtJQUNIO0lBQ0F2RixRQUFRLENBQ0wsK0JBQThCNkUsWUFBYSxRQUFPQSxZQUFhLGNBQWEsRUFDN0U7TUFDRWhELEdBQUcsRUFBRXlDO0lBQ1AsQ0FBQyxDQUNGO0VBQ0g7O0VBRUE7RUFDQSxNQUFNOEIsZUFBeUMsR0FBRyxDQUFDLENBQUM7RUFDcEQsTUFBTUMsYUFBdUIsR0FBRyxFQUFFO0VBQ2xDLEtBQ0UsSUFBSUMsV0FBVyxHQUFHLENBQUMsRUFBRUMsUUFBUSxHQUFHLENBQUMsRUFDakNELFdBQVcsR0FBR3hELGtCQUFrQixDQUFDaUIsTUFBTSxFQUN2Q3VDLFdBQVcsSUFBSSxFQUFFLEVBQUVDLFFBQVEsRUFBRSxFQUM3QjtJQUNBLE1BQU1DLEdBQUcsR0FBRzFELGtCQUFrQixDQUFDMkQsS0FBSyxDQUFDSCxXQUFXLEVBQUVBLFdBQVcsR0FBRyxFQUFFLENBQUM7SUFDbkUsTUFBTUksZUFBeUIsR0FBRyxFQUFFO0lBQ3BDLEtBQUssTUFBTSxDQUFDQyxXQUFXLEVBQUVqQyxNQUFNLENBQUMsSUFBSThCLEdBQUcsQ0FBQ0ksT0FBTyxFQUFFLEVBQUU7TUFDakQsTUFBTS9CLFlBQVksR0FBR0gsTUFBTSxDQUFDWixHQUFHLENBQUNnQixTQUFTLENBQUMsQ0FBQyxDQUFDO01BQzVDLE1BQU1DLGFBQWEsR0FBSSxHQUFFRixZQUFhLGNBQWE7TUFDbkQ2QixlQUFlLENBQUNHLElBQUksQ0FBQzlCLGFBQWEsQ0FBQztNQUNuQ3FCLGVBQWUsQ0FBQzFCLE1BQU0sQ0FBQ1osR0FBRyxDQUFDLEdBQUc7UUFDNUJnRCxNQUFNLEVBQUcsa0JBQWlCekYsT0FBTyxDQUFDd0IsV0FBWSxJQUFHa0MsYUFBYyxFQUFDO1FBQ2hFZ0MsY0FBYyxFQUFHLGtCQUFpQjFGLE9BQU8sQ0FBQ3dCLFdBQVksY0FBYTtRQUNuRW1FLE9BQU8sRUFBRSxHQUFHO1FBQ1pDLE9BQU8sRUFBRSxHQUFHO1FBQ1pDLFNBQVMsRUFBRVAsV0FBVyxHQUFHLEdBQUc7UUFDNUJRLFNBQVMsRUFBRVosUUFBUSxHQUFHO01BQ3hCLENBQUM7SUFDSDtJQUNBLE1BQU1hLFdBQVcsR0FBSSxPQUFNYixRQUFTLE1BQUs7SUFDekN2RyxRQUFRLENBQUUsY0FBYTBHLGVBQWUsQ0FBQ25DLElBQUksQ0FBQyxHQUFHLENBQUUsWUFBVzZDLFdBQVksRUFBQyxFQUFFO01BQ3pFdkYsR0FBRyxFQUFFeUM7SUFDUCxDQUFDLENBQUM7SUFDRitCLGFBQWEsQ0FBQ1EsSUFBSSxDQUFDTyxXQUFXLENBQUM7RUFDakM7RUFDQXBILFFBQVEsQ0FBRSxjQUFhcUcsYUFBYSxDQUFDOUIsSUFBSSxDQUFDLEdBQUcsQ0FBRSxzQkFBcUIsRUFBRTtJQUNwRTFDLEdBQUcsRUFBRXlDO0VBQ1AsQ0FBQyxDQUFDO0VBQ0YsS0FBSyxNQUFNOEMsV0FBVyxJQUFJZixhQUFhLEVBQUU7SUFDdkNuRyxFQUFFLENBQUNtSCxVQUFVLENBQUNqSCxJQUFJLENBQUNtRSxJQUFJLENBQUNELFNBQVMsRUFBRThDLFdBQVcsQ0FBQyxDQUFDO0VBQ2xEO0VBRUEsTUFBTUUsWUFBWSxHQUFHbEgsSUFBSSxDQUFDbUUsSUFBSSxDQUFDRCxTQUFTLEVBQUUsY0FBYyxDQUFDO0VBQ3pEcEUsRUFBRSxDQUFDcUgsYUFBYSxDQUFDRCxZQUFZLEVBQUVFLElBQUksQ0FBQ0MsU0FBUyxDQUFDckIsZUFBZSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztFQUV4RSxPQUFPNUUsYUFBYSxDQUFDOEMsU0FBUyxFQUFFakQsT0FBTyxDQUFDSyxNQUFNLEVBQUVMLE9BQU8sQ0FBQ21CLE1BQU0sQ0FBQztBQUNqRTtBQUVBQyxxQkFBcUIsRUFBRSxDQUNwQmlGLElBQUksQ0FBRTlGLEtBQUssSUFBS0csT0FBTyxDQUFDNEYsSUFBSSxDQUFDL0YsS0FBSyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUM1Q2dHLEtBQUssQ0FBRWhHLEtBQUssSUFBSztFQUNoQlUsT0FBTyxDQUFDK0MsR0FBRyxDQUFDekQsS0FBSyxDQUFDO0VBQ2xCRyxPQUFPLENBQUM0RixJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ2pCLENBQUMsQ0FBQyJ9
|