@tricoteuses/assemblee 1.0.7 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (134) hide show
  1. package/lib/api.js +3 -9
  2. package/lib/api.mjs +4 -5
  3. package/lib/bugs/acteur-00010/plugin.test.js +3 -50
  4. package/lib/bugs/acteur-00010/plugin.test.mjs +1 -1
  5. package/lib/bugs/acteur-00010.js +2 -57
  6. package/lib/bugs/acteur-00010.mjs +1 -6
  7. package/lib/bugs/agenda-00002/plugin.test.js +3 -53
  8. package/lib/bugs/agenda-00002/plugin.test.mjs +1 -3
  9. package/lib/bugs/agenda-00002.js +3 -148
  10. package/lib/bugs/agenda-00002.mjs +1 -28
  11. package/lib/bugs/agenda-00008/plugin.test.js +3 -52
  12. package/lib/bugs/agenda-00008/plugin.test.mjs +1 -1
  13. package/lib/bugs/agenda-00008.js +2 -61
  14. package/lib/bugs/agenda-00008.mjs +1 -5
  15. package/lib/bugs/agenda-00011/plugin.test.js +5 -99
  16. package/lib/bugs/agenda-00011/plugin.test.mjs +3 -3
  17. package/lib/bugs/agenda-00011.js +4 -105
  18. package/lib/bugs/agenda-00011.mjs +3 -29
  19. package/lib/bugs.js +3 -164
  20. package/lib/bugs.mjs +1 -26
  21. package/lib/cleaners/actes_legislatifs.js +11 -115
  22. package/lib/cleaners/actes_legislatifs.mjs +7 -82
  23. package/lib/cleaners/acteurs.js +12 -92
  24. package/lib/cleaners/acteurs.mjs +7 -38
  25. package/lib/cleaners/amendements.js +10 -103
  26. package/lib/cleaners/amendements.mjs +4 -58
  27. package/lib/cleaners/documents.js +5 -67
  28. package/lib/cleaners/documents.mjs +1 -37
  29. package/lib/cleaners/dossiers_legislatifs.js +5 -61
  30. package/lib/cleaners/dossiers_legislatifs.mjs +1 -29
  31. package/lib/cleaners/index.js +1 -9
  32. package/lib/cleaners/index.mjs +1 -1
  33. package/lib/cleaners/organes.js +1 -33
  34. package/lib/cleaners/organes.mjs +1 -17
  35. package/lib/cleaners/reunions.js +4 -119
  36. package/lib/cleaners/reunions.mjs +1 -64
  37. package/lib/cleaners/scrutins.js +10 -102
  38. package/lib/cleaners/scrutins.mjs +1 -48
  39. package/lib/cleaners/xml.js +8 -42
  40. package/lib/cleaners/xml.mjs +6 -8
  41. package/lib/datasets.js +14 -113
  42. package/lib/datasets.mjs +6 -46
  43. package/lib/dates.js +7 -37
  44. package/lib/dates.mjs +9 -14
  45. package/lib/dossiers_legislatifs.js +6 -68
  46. package/lib/dossiers_legislatifs.mjs +5 -36
  47. package/lib/file_systems.js +56 -139
  48. package/lib/file_systems.mjs +1 -9
  49. package/lib/git.js +4 -53
  50. package/lib/git.mjs +1 -12
  51. package/lib/index.js +1 -15
  52. package/lib/index.mjs +1 -1
  53. package/lib/inserters.js +23 -146
  54. package/lib/inserters.mjs +6 -87
  55. package/lib/loaders.js +44 -316
  56. package/lib/loaders.mjs +12 -135
  57. package/lib/organes.js +1 -7
  58. package/lib/organes.mjs +1 -4
  59. package/lib/parsers/documents.js +22 -151
  60. package/lib/parsers/documents.mjs +19 -81
  61. package/lib/parsers/index.js +1 -4
  62. package/lib/parsers/index.mjs +1 -1
  63. package/lib/parsers/recherche_amendements.js +302 -527
  64. package/lib/parsers/recherche_amendements.mjs +8 -31
  65. package/lib/raw_types/acteurs_et_organes.d.ts +1 -30
  66. package/lib/raw_types/acteurs_et_organes.js +5 -124
  67. package/lib/raw_types/acteurs_et_organes.mjs +5 -105
  68. package/lib/raw_types/agendas.js +6 -89
  69. package/lib/raw_types/agendas.mjs +9 -65
  70. package/lib/raw_types/amendements.d.ts +2 -0
  71. package/lib/raw_types/amendements.js +10 -90
  72. package/lib/raw_types/amendements.mjs +11 -69
  73. package/lib/raw_types/dossiers_legislatifs.js +6 -96
  74. package/lib/raw_types/dossiers_legislatifs.mjs +6 -73
  75. package/lib/raw_types/scrutins.js +6 -81
  76. package/lib/raw_types/scrutins.mjs +9 -57
  77. package/lib/scripts/bugs_helper.js +2 -181
  78. package/lib/scripts/bugs_helper.mjs +2 -39
  79. package/lib/scripts/clean_data.js +27 -143
  80. package/lib/scripts/clean_data.mjs +15 -34
  81. package/lib/scripts/clean_reorganized_data.js +76 -240
  82. package/lib/scripts/clean_reorganized_data.mjs +36 -99
  83. package/lib/scripts/diff_amendements.js +19 -79
  84. package/lib/scripts/diff_amendements.mjs +17 -35
  85. package/lib/scripts/document_dossiers_legislatifs.js +17 -142
  86. package/lib/scripts/document_dossiers_legislatifs.mjs +6 -90
  87. package/lib/scripts/get_today_reunions.js +4 -22
  88. package/lib/scripts/get_today_reunions.mjs +1 -7
  89. package/lib/scripts/merge_scrutins.js +3 -47
  90. package/lib/scripts/merge_scrutins.mjs +1 -9
  91. package/lib/scripts/parse_textes_lois.js +15 -44
  92. package/lib/scripts/parse_textes_lois.mjs +18 -19
  93. package/lib/scripts/raw_types_from_amendements.js +3 -95
  94. package/lib/scripts/raw_types_from_amendements.mjs +1 -16
  95. package/lib/scripts/reorganize_data.js +74 -294
  96. package/lib/scripts/reorganize_data.mjs +22 -133
  97. package/lib/scripts/retrieve_deputes_photos.js +6 -119
  98. package/lib/scripts/retrieve_deputes_photos.mjs +7 -33
  99. package/lib/scripts/retrieve_documents.js +4 -192
  100. package/lib/scripts/retrieve_documents.mjs +2 -50
  101. package/lib/scripts/retrieve_open_data.js +44 -116
  102. package/lib/scripts/retrieve_open_data.mjs +14 -19
  103. package/lib/scripts/retrieve_pending_amendments.js +4 -98
  104. package/lib/scripts/retrieve_pending_amendments.mjs +1 -14
  105. package/lib/scripts/retrieve_senateurs_photos.js +18 -114
  106. package/lib/scripts/retrieve_senateurs_photos.mjs +20 -48
  107. package/lib/scripts/retrieve_textes_lois.js +3 -122
  108. package/lib/scripts/retrieve_textes_lois.mjs +3 -21
  109. package/lib/scripts/test_load.js +2 -10
  110. package/lib/scripts/test_load.mjs +2 -1
  111. package/lib/scripts/test_load_big_files.js +2 -10
  112. package/lib/scripts/test_load_big_files.mjs +2 -1
  113. package/lib/scripts/validate_json.js +4 -119
  114. package/lib/scripts/validate_json.mjs +2 -36
  115. package/lib/shared_types/codes_actes.js +1 -24
  116. package/lib/shared_types/codes_actes.mjs +3 -10
  117. package/lib/strings.js +1 -5
  118. package/lib/strings.mjs +1 -1
  119. package/lib/types/acteurs_et_organes.js +9 -84
  120. package/lib/types/acteurs_et_organes.mjs +10 -63
  121. package/lib/types/agendas.js +8 -90
  122. package/lib/types/agendas.mjs +11 -66
  123. package/lib/types/amendements.d.ts +2 -0
  124. package/lib/types/amendements.js +12 -92
  125. package/lib/types/amendements.mjs +15 -70
  126. package/lib/types/dossiers_legislatifs.js +8 -96
  127. package/lib/types/dossiers_legislatifs.mjs +10 -72
  128. package/lib/types/legislatures.js +1 -3
  129. package/lib/types/legislatures.mjs +1 -2
  130. package/lib/types/scrutins.js +8 -82
  131. package/lib/types/scrutins.mjs +11 -58
  132. package/lib/urls.js +3 -27
  133. package/lib/urls.mjs +3 -21
  134. package/package.json +1 -1
@@ -7,8 +7,9 @@ export function parseTexteLoi(assembleeUrl, page) {
7
7
  let html = pageSegments[1].trim();
8
8
  assert(html.startsWith("<div"));
9
9
  assert(html.endsWith("</div>"));
10
- html = `<html${html.substring(4, html.length - 6)}</html>`; // Extract subdivisions from HTML.
10
+ html = `<html${html.substring(4, html.length - 6)}</html>`;
11
11
 
12
+ // Extract subdivisions from HTML.
12
13
  const {
13
14
  window
14
15
  } = new JSDOM(html);
@@ -19,7 +20,6 @@ export function parseTexteLoi(assembleeUrl, page) {
19
20
  const htmlElement = document.children[0];
20
21
  assert.strictEqual(htmlElement.children.length, 2);
21
22
  const bodyElement = htmlElement.children[1];
22
-
23
23
  if (assembleeUrl === "http://www.assemblee-nationale.fr/15/textes/0675.asp") {
24
24
  // Repair document.
25
25
  assert.strictEqual(bodyElement.children.length, 1);
@@ -27,20 +27,16 @@ export function parseTexteLoi(assembleeUrl, page) {
27
27
  assert.strictEqual(divElement.tagName, "DIV");
28
28
  const newDivElement = bodyElement.insertBefore(document.createElement("div"), divElement);
29
29
  bodyElement.insertBefore(document.createElement("br"), divElement);
30
-
31
30
  for (const divChild of [...divElement.children]) {
32
31
  if (divChild.getAttribute("class") === "a9ArticleNum") {
33
32
  break;
34
33
  }
35
-
36
34
  newDivElement.appendChild(divChild);
37
35
  }
38
36
  }
39
-
40
37
  if (bodyElement.children.length < 3) {
41
38
  // Occurs in http://www.assemblee-nationale.fr/15/textes/0326.asp.
42
39
  window.close(); // Free memory.
43
-
44
40
  return {
45
41
  error: {
46
42
  code: -1,
@@ -50,9 +46,8 @@ export function parseTexteLoi(assembleeUrl, page) {
50
46
  page
51
47
  };
52
48
  }
53
-
54
- assert.strictEqual(bodyElement.children[0].tagName, "DIV"); // First child is a DIV describing the document (Assemblée's header). Skip it for now.
55
-
49
+ assert.strictEqual(bodyElement.children[0].tagName, "DIV");
50
+ // First child is a DIV describing the document (Assemblée's header). Skip it for now.
56
51
  let bodyChild = bodyElement.children[1];
57
52
  assert.strictEqual(bodyChild.tagName, "BR");
58
53
  let alineaElement = null;
@@ -70,7 +65,6 @@ export function parseTexteLoi(assembleeUrl, page) {
70
65
  let subdivisionAlineasText = null;
71
66
  let subdivisionHeadersHtml = null;
72
67
  let subdivisionHeadersText = null;
73
-
74
68
  while (state !== null) {
75
69
  switch (state) {
76
70
  case "alineaElement":
@@ -78,30 +72,25 @@ export function parseTexteLoi(assembleeUrl, page) {
78
72
  case "DIV":
79
73
  state = "firstSubAlineaElement";
80
74
  break;
81
-
82
75
  case "H4":
83
76
  // TODO
84
77
  nextParentState = "nextAlineaElement";
85
78
  paragraphElement = alineaElement;
86
79
  state = "firstParagraphChild";
87
80
  break;
88
-
89
81
  case "P":
90
82
  nextParentState = "nextAlineaElement";
91
83
  paragraphElement = alineaElement;
92
84
  state = "firstParagraphChild";
93
85
  break;
94
-
95
86
  case "OL":
96
87
  // TODO
97
88
  state = "nextAlineaElement";
98
89
  break;
99
-
100
90
  case "TABLE":
101
91
  // TODO
102
92
  state = "nextAlineaElement";
103
93
  break;
104
-
105
94
  default:
106
95
  return {
107
96
  error: {
@@ -112,24 +101,18 @@ export function parseTexteLoi(assembleeUrl, page) {
112
101
  page
113
102
  };
114
103
  }
115
-
116
104
  break;
117
-
118
105
  case "firstAlineaElement":
119
106
  alineaElement = bodyChild.children[0];
120
-
121
107
  if (alineaElement === undefined) {
122
108
  // No alinea in current bodyChild: go to next bodyChild.
123
109
  state = "nextBodyChild";
124
110
  } else {
125
111
  state = "alineaElement";
126
112
  }
127
-
128
113
  break;
129
-
130
114
  case "firstParagraphChild":
131
115
  paragraphChild = paragraphElement.children[0];
132
-
133
116
  if (paragraphChild === undefined) {
134
117
  // No child in current paragraph: go to next parent element.
135
118
  state = nextParentState;
@@ -137,7 +120,6 @@ export function parseTexteLoi(assembleeUrl, page) {
137
120
  const headerText = paragraphElement.textContent;
138
121
  const nameComputed = (headerText || "").normalize("NFD").replace(/[\u0300-\u036f]/g, "").replace(/\(nouveau\)/, "").replace(/\(Pour coordination\)/, "").replace(/\(Supprimés?\)/, "").replace(/ /g, " ").replace(/[\-,.…]/g, "").trim().replace(/ {1,}/g, "_");
139
122
  const nameUpper = nameComputed.toUpperCase();
140
-
141
123
  if (nameUpper === "") {
142
124
  // Occurs in:
143
125
  // * http://www.assemblee-nationale.fr/15/textes/0445.asp
@@ -146,43 +128,40 @@ export function parseTexteLoi(assembleeUrl, page) {
146
128
  state = nextParentState;
147
129
  break;
148
130
  }
149
-
150
- const nextLevel = nameUpper.match(/^(RAPPORT_)?ANNEXE(_|$)/) !== null || nameUpper.match(/^ETAT_/) !== null ? 0 : nameUpper.match(/^TOME_/) !== null ? 1 : nameUpper.match(/^PARTIE_/) !== null || nameUpper.match(/^(PREMIERE|SECONDE|DEUXIEME|TROISIEME|QUATRIEME)_PARTIE(_|$)/) !== null ? 2 : nameUpper.match(/^LIVRE_/) !== null ? 3 : nameUpper.match(/^TITRE_/) !== null ? 4 : nameUpper.match(/^SOUSTITRE_/) !== null ? 5 : nameUpper.match(/^CHAPITRE_/) !== null ? 6 : nameUpper.match(/^SECTION_/) !== null ? 7 : nameUpper.match(/^SOUSSECTION_/) !== null ? 8 : nameUpper.match(/^ARTICLES?_/) !== null || // "Exposé des motifs" must be at the same level as article.
131
+ const nextLevel = nameUpper.match(/^(RAPPORT_)?ANNEXE(_|$)/) !== null || nameUpper.match(/^ETAT_/) !== null ? 0 : nameUpper.match(/^TOME_/) !== null ? 1 : nameUpper.match(/^PARTIE_/) !== null || nameUpper.match(/^(PREMIERE|SECONDE|DEUXIEME|TROISIEME|QUATRIEME)_PARTIE(_|$)/) !== null ? 2 : nameUpper.match(/^LIVRE_/) !== null ? 3 : nameUpper.match(/^TITRE_/) !== null ? 4 : nameUpper.match(/^SOUSTITRE_/) !== null ? 5 : nameUpper.match(/^CHAPITRE_/) !== null ? 6 : nameUpper.match(/^SECTION_/) !== null ? 7 : nameUpper.match(/^SOUSSECTION_/) !== null ? 8 : nameUpper.match(/^ARTICLES?_/) !== null ||
132
+ // "Exposé des motifs" must be at the same level as article.
151
133
  // "Exposé des motifs" without content:
152
134
  // * http://www.assemblee-nationale.fr/15/textes/0702.asp
153
135
  // "Exposé des motifs" with content:
154
136
  // * http://www.assemblee-nationale.fr/15/textes/1326.asp
155
137
  // * http://www.assemblee-nationale.fr/15/textes/1610.asp
156
138
  nameUpper.match(/^EXPOSE_DES_MOTIFS$/) !== null ? 9 : null;
157
-
158
139
  if (nextLevel === null && subdivisions.length === 0) {
159
- if (nameUpper.match(/^(PROJET|PROPOSITION)_DE_LOI(_|$)/) !== null) {// Occurs in:
140
+ if (nameUpper.match(/^(PROJET|PROPOSITION)_DE_LOI(_|$)/) !== null) {
141
+ // Occurs in:
160
142
  // * http://www.assemblee-nationale.fr/15/textes/0232.asp
161
143
  // * http://www.assemblee-nationale.fr/15/textes/0626.asp
162
144
  // * http://www.assemblee-nationale.fr/15/textes/0676.asp
163
- } else if (nameUpper === "JEUX_OLYMPIQUES_ET_PARALYMPIQUES_DE_2024") {// Occurs in http://www.assemblee-nationale.fr/15/textes/0676.asp
164
- } else if (nameUpper === "TEXTE_DE_LA_COMMISSION_MIXTE_PARITAIRE") {// Occurs in http://www.assemblee-nationale.fr/15/textes/1294.asp
145
+ } else if (nameUpper === "JEUX_OLYMPIQUES_ET_PARALYMPIQUES_DE_2024") {
146
+ // Occurs in http://www.assemblee-nationale.fr/15/textes/0676.asp
147
+ } else if (nameUpper === "TEXTE_DE_LA_COMMISSION_MIXTE_PARITAIRE") {
148
+ // Occurs in http://www.assemblee-nationale.fr/15/textes/1294.asp
165
149
  } else {
166
150
  console.log(`Unexpected nameUpper = "${nameUpper}" at beginning of "texte de loi" at ${assembleeUrl}`);
167
- } // Skip paragraph.
168
-
169
-
151
+ }
152
+ // Skip paragraph.
170
153
  state = nextParentState;
171
154
  break;
172
155
  }
173
-
174
156
  if (nextLevel !== null) {
175
157
  level = nextLevel;
176
-
177
158
  while (levels.length > 0 && level < levels[levels.length - 1]) {
178
159
  levels.pop();
179
160
  }
180
-
181
161
  if (levels.length === 0 || level > levels[levels.length - 1]) {
182
162
  levels.push(level);
183
- } // Articles & "Exposé des motifs" are the only divisions without second title.
184
-
185
-
163
+ }
164
+ // Articles & "Exposé des motifs" are the only divisions without second title.
186
165
  isMultiLinesHeader = nameUpper.match(/^ARTICLES?_/) === null && nameUpper.match(/^EXPOSE_DES_MOTIFS$/) === null;
187
166
  subdivisionAlineasHtml = [];
188
167
  subdivisionAlineasText = [];
@@ -202,64 +181,51 @@ export function parseTexteLoi(assembleeUrl, page) {
202
181
  }
203
182
  });
204
183
  }
205
-
206
184
  lineElements = [];
207
185
  state = "paragraphChild";
208
186
  }
209
-
210
187
  break;
211
-
212
188
  case "firstSubAlineaElement":
213
189
  subAlineaElement = alineaElement.children[0];
214
-
215
190
  if (subAlineaElement === undefined) {
216
191
  // No sub-alinea in current alinea: go to next alinea.
217
192
  state = "nextAlineaElement";
218
193
  } else {
219
194
  state = "subAlineaElement";
220
195
  }
221
-
222
196
  break;
223
-
224
197
  case "nextAlineaElement":
225
198
  alineaElement = alineaElement.nextElementSibling;
226
-
227
199
  if (alineaElement === null) {
228
200
  // The bodyChild has been fully parsed. Go to next bodyChild
229
201
  state = "nextBodyChild";
230
202
  } else {
231
203
  state = "alineaElement";
232
204
  }
233
-
234
205
  break;
235
-
236
206
  case "nextBodyChild":
237
207
  if (bodyChild.nextElementSibling === null) {
238
208
  // The document has been fully parsed.
239
209
  state = null;
240
210
  } else {
241
211
  bodyChild = bodyChild.nextElementSibling;
242
-
243
212
  if (bodyChild.tagName === "DIV") {
244
213
  state = "firstAlineaElement";
245
214
  } else {
246
215
  // <P/> is for footnotes
247
- assert(["BR", "HR", "P"].includes(bodyChild.tagName), `Unexpected tag name "${bodyChild.tagName}" for body child`); // Stay in the same state to go to next bodyChild.
216
+ assert(["BR", "HR", "P"].includes(bodyChild.tagName), `Unexpected tag name "${bodyChild.tagName}" for body child`);
217
+ // Stay in the same state to go to next bodyChild.
248
218
  }
249
219
  }
250
220
 
251
221
  break;
252
-
253
222
  case "nextParagraphChild":
254
223
  paragraphChild = paragraphChild.nextElementSibling;
255
-
256
224
  if (paragraphChild === null) {
257
225
  // The paragraph element has been fully parsed. Go to next parent element.
258
226
  const lineText = lineElements.map(element => element.textContent).join("").trim();
259
-
260
227
  if (lineText) {
261
228
  const lineHtml = lineElements.map(element => element.outerHTML).join("");
262
-
263
229
  if (subdivisionHeadersText.length === 0 || isMultiLinesHeader && subdivisionAlineasText.length === 0) {
264
230
  subdivisionHeadersHtml.push(lineHtml);
265
231
  subdivisionHeadersText.push(lineText);
@@ -268,31 +234,24 @@ export function parseTexteLoi(assembleeUrl, page) {
268
234
  subdivisionAlineasText.push(lineText);
269
235
  }
270
236
  }
271
-
272
237
  if (isMultiLinesHeader && subdivisionHeadersText.length >= 2) {
273
238
  isMultiLinesHeader = false;
274
239
  }
275
-
276
240
  lineElements = null;
277
241
  state = nextParentState;
278
242
  } else {
279
243
  state = "paragraphChild";
280
244
  }
281
-
282
245
  break;
283
-
284
246
  case "nextSubAlineaElement":
285
247
  subAlineaElement = subAlineaElement.nextElementSibling;
286
-
287
248
  if (subAlineaElement === null) {
288
249
  // The alineaElement has been fully parsed. Go to next alineaElement.
289
250
  state = "nextAlineaElement";
290
251
  } else {
291
252
  state = "subAlineaElement";
292
253
  }
293
-
294
254
  break;
295
-
296
255
  case "paragraphChild":
297
256
  switch (paragraphChild.tagName) {
298
257
  case "A":
@@ -300,14 +259,11 @@ export function parseTexteLoi(assembleeUrl, page) {
300
259
  lineElements.push(paragraphChild);
301
260
  break;
302
261
  }
303
-
304
262
  case "BR":
305
263
  {
306
264
  const lineText = lineElements.map(element => element.textContent).join("").trim();
307
-
308
265
  if (lineText) {
309
266
  const lineHtml = lineElements.map(element => element.outerHTML).join("");
310
-
311
267
  if (subdivisionHeadersText.length === 0 || isMultiLinesHeader && subdivisionAlineasText.length === 0) {
312
268
  subdivisionHeadersHtml.push(lineHtml);
313
269
  subdivisionHeadersText.push(lineText);
@@ -316,47 +272,38 @@ export function parseTexteLoi(assembleeUrl, page) {
316
272
  subdivisionAlineasText.push(lineText);
317
273
  }
318
274
  }
319
-
320
275
  lineElements = [];
321
276
  break;
322
277
  }
323
-
324
278
  case "DEL":
325
279
  {
326
280
  lineElements.push(paragraphChild);
327
281
  break;
328
282
  }
329
-
330
283
  case "IMG":
331
284
  {
332
285
  lineElements.push(paragraphChild);
333
286
  break;
334
287
  }
335
-
336
288
  case "SPAN":
337
289
  {
338
290
  const className = paragraphChild.getAttribute("class");
339
-
340
291
  switch (className) {
341
292
  case "aEloiPastille":
342
293
  {
343
294
  // Skip pastillé SPAN.
344
295
  break;
345
296
  }
346
-
347
297
  case "aEloiPastille0":
348
298
  {
349
299
  // Skip pastillé SPAN.
350
300
  break;
351
301
  }
352
-
353
302
  default:
354
303
  lineElements.push(paragraphChild);
355
304
  }
356
-
357
305
  break;
358
306
  }
359
-
360
307
  default:
361
308
  return {
362
309
  error: {
@@ -367,10 +314,8 @@ export function parseTexteLoi(assembleeUrl, page) {
367
314
  page
368
315
  };
369
316
  }
370
-
371
317
  state = "nextParagraphChild";
372
318
  break;
373
-
374
319
  case "subAlineaElement":
375
320
  switch (subAlineaElement.tagName) {
376
321
  case "P":
@@ -378,12 +323,10 @@ export function parseTexteLoi(assembleeUrl, page) {
378
323
  paragraphElement = subAlineaElement;
379
324
  state = "firstParagraphChild";
380
325
  break;
381
-
382
326
  case "TABLE":
383
327
  // TODO
384
328
  state = "nextSubAlineaElement";
385
329
  break;
386
-
387
330
  default:
388
331
  return {
389
332
  error: {
@@ -394,16 +337,13 @@ export function parseTexteLoi(assembleeUrl, page) {
394
337
  page
395
338
  };
396
339
  }
397
-
398
340
  break;
399
341
  state = "nextSubAlineaElement";
400
342
  break;
401
-
402
343
  default:
403
344
  throw `Unexpected state: ${state}`;
404
345
  }
405
346
  }
406
-
407
347
  window.close(); // Free memory.
408
348
 
409
349
  return {
@@ -417,7 +357,6 @@ export function parseTexteLoi(assembleeUrl, page) {
417
357
  export async function retrieveTexteLoiParsed(fetch, assembleeUrl) {
418
358
  const response = await fetch(assembleeUrl);
419
359
  const page = await response.text();
420
-
421
360
  if (!response.ok) {
422
361
  return {
423
362
  error: {
@@ -427,7 +366,6 @@ export async function retrieveTexteLoiParsed(fetch, assembleeUrl) {
427
366
  page
428
367
  };
429
368
  }
430
-
431
369
  return parseTexteLoi(assembleeUrl, page);
432
370
  }
433
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJhc3NlcnQiLCJKU0RPTSIsInBhcnNlVGV4dGVMb2kiLCJhc3NlbWJsZWVVcmwiLCJwYWdlIiwicGFnZVNlZ21lbnRzIiwic3BsaXQiLCJzdHJpY3RFcXVhbCIsImxlbmd0aCIsImh0bWwiLCJ0cmltIiwic3RhcnRzV2l0aCIsImVuZHNXaXRoIiwic3Vic3RyaW5nIiwid2luZG93IiwiZG9jdW1lbnQiLCJjaGlsZHJlbiIsImh0bWxFbGVtZW50IiwiYm9keUVsZW1lbnQiLCJkaXZFbGVtZW50IiwidGFnTmFtZSIsIm5ld0RpdkVsZW1lbnQiLCJpbnNlcnRCZWZvcmUiLCJjcmVhdGVFbGVtZW50IiwiZGl2Q2hpbGQiLCJnZXRBdHRyaWJ1dGUiLCJhcHBlbmRDaGlsZCIsImNsb3NlIiwiZXJyb3IiLCJjb2RlIiwibWVzc2FnZSIsImJvZHlDaGlsZCIsImFsaW5lYUVsZW1lbnQiLCJpc011bHRpTGluZXNIZWFkZXIiLCJsZXZlbCIsImxldmVscyIsImxpbmVFbGVtZW50cyIsIm5leHRQYXJlbnRTdGF0ZSIsInBhcmFncmFwaENoaWxkIiwicGFyYWdyYXBoRWxlbWVudCIsInN0YXRlIiwic3ViQWxpbmVhRWxlbWVudCIsInN1YmRpdmlzaW9ucyIsInN1YmRpdmlzaW9uQWxpbmVhc0h0bWwiLCJzdWJkaXZpc2lvbkFsaW5lYXNUZXh0Iiwic3ViZGl2aXNpb25IZWFkZXJzSHRtbCIsInN1YmRpdmlzaW9uSGVhZGVyc1RleHQiLCJ1bmRlZmluZWQiLCJoZWFkZXJUZXh0IiwidGV4dENvbnRlbnQiLCJuYW1lQ29tcHV0ZWQiLCJub3JtYWxpemUiLCJyZXBsYWNlIiwibmFtZVVwcGVyIiwidG9VcHBlckNhc2UiLCJuZXh0TGV2ZWwiLCJtYXRjaCIsImNvbnNvbGUiLCJsb2ciLCJwb3AiLCJwdXNoIiwiYWxpbmVhcyIsImhlYWRlcnMiLCJpZCIsInJlbGF0aXZlTGV2ZWwiLCJ0ZXh0IiwibmV4dEVsZW1lbnRTaWJsaW5nIiwiaW5jbHVkZXMiLCJsaW5lVGV4dCIsIm1hcCIsImVsZW1lbnQiLCJqb2luIiwibGluZUh0bWwiLCJvdXRlckhUTUwiLCJjbGFzc05hbWUiLCJ1cmwiLCJyZXRyaWV2ZVRleHRlTG9pUGFyc2VkIiwiZmV0Y2giLCJyZXNwb25zZSIsIm9rIiwic3RhdHVzIiwic3RhdHVzVGV4dCJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wYXJzZXJzL2RvY3VtZW50cy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXNzZXJ0IGZyb20gXCJhc3NlcnRcIlxuaW1wb3J0IHsgSlNET00gfSBmcm9tIFwianNkb21cIlxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VUZXh0ZUxvaShhc3NlbWJsZWVVcmw6IHN0cmluZywgcGFnZTogc3RyaW5nKSB7XG4gIC8vIFJlcGFpciBIVE1MLlxuICBjb25zdCBwYWdlU2VnbWVudHMgPSBwYWdlLnNwbGl0KFwiPC9zdHlsZT5cIilcbiAgYXNzZXJ0LnN0cmljdEVxdWFsKHBhZ2VTZWdtZW50cy5sZW5ndGgsIDIsIHBhZ2UpXG4gIGxldCBodG1sID0gcGFnZVNlZ21lbnRzWzFdLnRyaW0oKVxuICBhc3NlcnQoaHRtbC5zdGFydHNXaXRoKFwiPGRpdlwiKSlcbiAgYXNzZXJ0KGh0bWwuZW5kc1dpdGgoXCI8L2Rpdj5cIikpXG4gIGh0bWwgPSBgPGh0bWwke2h0bWwuc3Vic3RyaW5nKDQsIGh0bWwubGVuZ3RoIC0gNil9PC9odG1sPmBcblxuICAvLyBFeHRyYWN0IHN1YmRpdmlzaW9ucyBmcm9tIEhUTUwuXG4gIGNvbnN0IHsgd2luZG93IH0gPSBuZXcgSlNET00oaHRtbClcbiAgY29uc3QgeyBkb2N1bWVudCB9ID0gd2luZG93XG4gIGFzc2VydC5zdHJpY3RFcXVhbChkb2N1bWVudC5jaGlsZHJlbi5sZW5ndGgsIDEpXG4gIGNvbnN0IGh0bWxFbGVtZW50ID0gZG9jdW1lbnQuY2hpbGRyZW5bMF1cbiAgYXNzZXJ0LnN0cmljdEVxdWFsKGh0bWxFbGVtZW50LmNoaWxkcmVuLmxlbmd0aCwgMilcbiAgY29uc3QgYm9keUVsZW1lbnQgPSBodG1sRWxlbWVudC5jaGlsZHJlblsxXVxuICBpZiAoYXNzZW1ibGVlVXJsID09PSBcImh0dHA6Ly93d3cuYXNzZW1ibGVlLW5hdGlvbmFsZS5mci8xNS90ZXh0ZXMvMDY3NS5hc3BcIikge1xuICAgIC8vIFJlcGFpciBkb2N1bWVudC5cbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwoYm9keUVsZW1lbnQuY2hpbGRyZW4ubGVuZ3RoLCAxKVxuICAgIGNvbnN0IGRpdkVsZW1lbnQgPSBib2R5RWxlbWVudC5jaGlsZHJlblswXVxuICAgIGFzc2VydC5zdHJpY3RFcXVhbChkaXZFbGVtZW50LnRhZ05hbWUsIFwiRElWXCIpXG4gICAgY29uc3QgbmV3RGl2RWxlbWVudCA9IGJvZHlFbGVtZW50Lmluc2VydEJlZm9yZShcbiAgICAgIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiksXG4gICAgICBkaXZFbGVtZW50LFxuICAgIClcbiAgICBib2R5RWxlbWVudC5pbnNlcnRCZWZvcmUoZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImJyXCIpLCBkaXZFbGVtZW50KVxuICAgIGZvciAoY29uc3QgZGl2Q2hpbGQgb2YgWy4uLmRpdkVsZW1lbnQuY2hpbGRyZW5dKSB7XG4gICAgICBpZiAoZGl2Q2hpbGQuZ2V0QXR0cmlidXRlKFwiY2xhc3NcIikgPT09IFwiYTlBcnRpY2xlTnVtXCIpIHtcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICAgIG5ld0RpdkVsZW1lbnQuYXBwZW5kQ2hpbGQoZGl2Q2hpbGQpXG4gICAgfVxuICB9XG4gIGlmIChib2R5RWxlbWVudC5jaGlsZHJlbi5sZW5ndGggPCAzKSB7XG4gICAgLy8gT2NjdXJzIGluIGh0dHA6Ly93d3cuYXNzZW1ibGVlLW5hdGlvbmFsZS5mci8xNS90ZXh0ZXMvMDMyNi5hc3AuXG4gICAgd2luZG93LmNsb3NlKCkgLy8gRnJlZSBtZW1vcnkuXG4gICAgcmV0dXJuIHtcbiAgICAgIGVycm9yOiB7IGNvZGU6IC0xLCBtZXNzYWdlOiBcIlRleHRlIGRlIGxvaSBzYW5zIGNvbnRlbnVcIiB9LFxuICAgICAgaHRtbCxcbiAgICAgIHBhZ2UsXG4gICAgfVxuICB9XG4gIGFzc2VydC5zdHJpY3RFcXVhbChib2R5RWxlbWVudC5jaGlsZHJlblswXS50YWdOYW1lLCBcIkRJVlwiKVxuICAvLyBGaXJzdCBjaGlsZCBpcyBhIERJViBkZXNjcmliaW5nIHRoZSBkb2N1bWVudCAoQXNzZW1ibMOpZSdzIGhlYWRlcikuIFNraXAgaXQgZm9yIG5vdy5cbiAgbGV0IGJvZHlDaGlsZCA9IGJvZHlFbGVtZW50LmNoaWxkcmVuWzFdXG4gIGFzc2VydC5zdHJpY3RFcXVhbChib2R5Q2hpbGQudGFnTmFtZSwgXCJCUlwiKVxuICBsZXQgYWxpbmVhRWxlbWVudDogRWxlbWVudCB8IG51bGwgPSBudWxsXG4gIGxldCBpc011bHRpTGluZXNIZWFkZXI6IGJvb2xlYW4gPSBmYWxzZVxuICBsZXQgbGV2ZWw6IG51bWJlciB8IG51bGwgPSBudWxsXG4gIGxldCBsZXZlbHM6IG51bWJlcltdID0gW11cbiAgbGV0IGxpbmVFbGVtZW50czogRWxlbWVudFtdIHwgbnVsbCA9IG51bGxcbiAgbGV0IG5leHRQYXJlbnRTdGF0ZSA9IG51bGxcbiAgbGV0IHBhcmFncmFwaENoaWxkOiBFbGVtZW50IHwgbnVsbCA9IG51bGxcbiAgbGV0IHBhcmFncmFwaEVsZW1lbnQ6IEVsZW1lbnQgfCBudWxsID0gbnVsbFxuICBsZXQgc3RhdGU6IHN0cmluZyB8IG51bGwgPSBcIm5leHRCb2R5Q2hpbGRcIlxuICBsZXQgc3ViQWxpbmVhRWxlbWVudDogRWxlbWVudCB8IG51bGwgPSBudWxsXG4gIGNvbnN0IHN1YmRpdmlzaW9ucyA9IFtdXG4gIGxldCBzdWJkaXZpc2lvbkFsaW5lYXNIdG1sOiBzdHJpbmdbXSB8IG51bGwgPSBudWxsXG4gIGxldCBzdWJkaXZpc2lvbkFsaW5lYXNUZXh0OiBzdHJpbmdbXSB8IG51bGwgPSBudWxsXG4gIGxldCBzdWJkaXZpc2lvbkhlYWRlcnNIdG1sOiBzdHJpbmdbXSB8IG51bGwgPSBudWxsXG4gIGxldCBzdWJkaXZpc2lvbkhlYWRlcnNUZXh0OiBzdHJpbmdbXSB8IG51bGwgPSBudWxsXG4gIHdoaWxlIChzdGF0ZSAhPT0gbnVsbCkge1xuICAgIHN3aXRjaCAoc3RhdGUpIHtcbiAgICAgIGNhc2UgXCJhbGluZWFFbGVtZW50XCI6XG4gICAgICAgIHN3aXRjaCAoYWxpbmVhRWxlbWVudCEudGFnTmFtZSkge1xuICAgICAgICAgIGNhc2UgXCJESVZcIjpcbiAgICAgICAgICAgIHN0YXRlID0gXCJmaXJzdFN1YkFsaW5lYUVsZW1lbnRcIlxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICBjYXNlIFwiSDRcIjpcbiAgICAgICAgICAgIC8vIFRPRE9cbiAgICAgICAgICAgIG5leHRQYXJlbnRTdGF0ZSA9IFwibmV4dEFsaW5lYUVsZW1lbnRcIlxuICAgICAgICAgICAgcGFyYWdyYXBoRWxlbWVudCA9IGFsaW5lYUVsZW1lbnRcbiAgICAgICAgICAgIHN0YXRlID0gXCJmaXJzdFBhcmFncmFwaENoaWxkXCJcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgY2FzZSBcIlBcIjpcbiAgICAgICAgICAgIG5leHRQYXJlbnRTdGF0ZSA9IFwibmV4dEFsaW5lYUVsZW1lbnRcIlxuICAgICAgICAgICAgcGFyYWdyYXBoRWxlbWVudCA9IGFsaW5lYUVsZW1lbnRcbiAgICAgICAgICAgIHN0YXRlID0gXCJmaXJzdFBhcmFncmFwaENoaWxkXCJcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgY2FzZSBcIk9MXCI6XG4gICAgICAgICAgICAvLyBUT0RPXG4gICAgICAgICAgICBzdGF0ZSA9IFwibmV4dEFsaW5lYUVsZW1lbnRcIlxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICBjYXNlIFwiVEFCTEVcIjpcbiAgICAgICAgICAgIC8vIFRPRE9cbiAgICAgICAgICAgIHN0YXRlID0gXCJuZXh0QWxpbmVhRWxlbWVudFwiXG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBlcnJvcjoge1xuICAgICAgICAgICAgICAgIGNvZGU6IC0yLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGBVbmV4cGVjdGVkIHRhZyBuYW1lIGZvciBhbGluZWEgZWxlbWVudDogJHtcbiAgICAgICAgICAgICAgICAgIGFsaW5lYUVsZW1lbnQhLnRhZ05hbWVcbiAgICAgICAgICAgICAgICB9YCxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgaHRtbCxcbiAgICAgICAgICAgICAgcGFnZSxcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBicmVha1xuICAgICAgY2FzZSBcImZpcnN0QWxpbmVhRWxlbWVudFwiOlxuICAgICAgICBhbGluZWFFbGVtZW50ID0gYm9keUNoaWxkLmNoaWxkcmVuWzBdXG4gICAgICAgIGlmIChhbGluZWFFbGVtZW50ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAvLyBObyBhbGluZWEgaW4gY3VycmVudCBib2R5Q2hpbGQ6IGdvIHRvIG5leHQgYm9keUNoaWxkLlxuICAgICAgICAgIHN0YXRlID0gXCJuZXh0Qm9keUNoaWxkXCJcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzdGF0ZSA9IFwiYWxpbmVhRWxlbWVudFwiXG4gICAgICAgIH1cbiAgICAgICAgYnJlYWtcbiAgICAgIGNhc2UgXCJmaXJzdFBhcmFncmFwaENoaWxkXCI6XG4gICAgICAgIHBhcmFncmFwaENoaWxkID0gcGFyYWdyYXBoRWxlbWVudCEuY2hpbGRyZW5bMF1cbiAgICAgICAgaWYgKHBhcmFncmFwaENoaWxkID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAvLyBObyBjaGlsZCBpbiBjdXJyZW50IHBhcmFncmFwaDogZ28gdG8gbmV4dCBwYXJlbnQgZWxlbWVudC5cbiAgICAgICAgICBzdGF0ZSA9IG5leHRQYXJlbnRTdGF0ZVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IGhlYWRlclRleHQgPSBwYXJhZ3JhcGhFbGVtZW50IS50ZXh0Q29udGVudFxuICAgICAgICAgIGNvbnN0IG5hbWVDb21wdXRlZCA9IChoZWFkZXJUZXh0IHx8IFwiXCIpXG4gICAgICAgICAgICAubm9ybWFsaXplKFwiTkZEXCIpXG4gICAgICAgICAgICAucmVwbGFjZSgvW1xcdTAzMDAtXFx1MDM2Zl0vZywgXCJcIilcbiAgICAgICAgICAgIC5yZXBsYWNlKC9cXChub3V2ZWF1XFwpLywgXCJcIilcbiAgICAgICAgICAgIC5yZXBsYWNlKC9cXChQb3VyIGNvb3JkaW5hdGlvblxcKS8sIFwiXCIpXG4gICAgICAgICAgICAucmVwbGFjZSgvXFwoU3VwcHJpbcOpcz9cXCkvLCBcIlwiKVxuICAgICAgICAgICAgLnJlcGxhY2UoL8KgL2csIFwiIFwiKVxuICAgICAgICAgICAgLnJlcGxhY2UoL1tcXC0sLuKApl0vZywgXCJcIilcbiAgICAgICAgICAgIC50cmltKClcbiAgICAgICAgICAgIC5yZXBsYWNlKC8gezEsfS9nLCBcIl9cIilcbiAgICAgICAgICBjb25zdCBuYW1lVXBwZXIgPSBuYW1lQ29tcHV0ZWQudG9VcHBlckNhc2UoKVxuICAgICAgICAgIGlmIChuYW1lVXBwZXIgPT09IFwiXCIpIHtcbiAgICAgICAgICAgIC8vIE9jY3VycyBpbjpcbiAgICAgICAgICAgIC8vICogaHR0cDovL3d3dy5hc3NlbWJsZWUtbmF0aW9uYWxlLmZyLzE1L3RleHRlcy8wNDQ1LmFzcFxuICAgICAgICAgICAgLy8gKiBodHRwOi8vd3d3LmFzc2VtYmxlZS1uYXRpb25hbGUuZnIvMTUvdGV4dGVzLzA2MjYuYXNwXG4gICAgICAgICAgICAvLyBTa2lwIHBhcmFncmFwaC5cbiAgICAgICAgICAgIHN0YXRlID0gbmV4dFBhcmVudFN0YXRlXG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBuZXh0TGV2ZWwgPVxuICAgICAgICAgICAgbmFtZVVwcGVyLm1hdGNoKC9eKFJBUFBPUlRfKT9BTk5FWEUoX3wkKS8pICE9PSBudWxsIHx8XG4gICAgICAgICAgICBuYW1lVXBwZXIubWF0Y2goL15FVEFUXy8pICE9PSBudWxsXG4gICAgICAgICAgICAgID8gMFxuICAgICAgICAgICAgICA6IG5hbWVVcHBlci5tYXRjaCgvXlRPTUVfLykgIT09IG51bGxcbiAgICAgICAgICAgICAgPyAxXG4gICAgICAgICAgICAgIDogbmFtZVVwcGVyLm1hdGNoKC9eUEFSVElFXy8pICE9PSBudWxsIHx8XG4gICAgICAgICAgICAgICAgbmFtZVVwcGVyLm1hdGNoKFxuICAgICAgICAgICAgICAgICAgL14oUFJFTUlFUkV8U0VDT05ERXxERVVYSUVNRXxUUk9JU0lFTUV8UVVBVFJJRU1FKV9QQVJUSUUoX3wkKS8sXG4gICAgICAgICAgICAgICAgKSAhPT0gbnVsbFxuICAgICAgICAgICAgICA/IDJcbiAgICAgICAgICAgICAgOiBuYW1lVXBwZXIubWF0Y2goL15MSVZSRV8vKSAhPT0gbnVsbFxuICAgICAgICAgICAgICA/IDNcbiAgICAgICAgICAgICAgOiBuYW1lVXBwZXIubWF0Y2goL15USVRSRV8vKSAhPT0gbnVsbFxuICAgICAgICAgICAgICA/IDRcbiAgICAgICAgICAgICAgOiBuYW1lVXBwZXIubWF0Y2goL15TT1VTVElUUkVfLykgIT09IG51bGxcbiAgICAgICAgICAgICAgPyA1XG4gICAgICAgICAgICAgIDogbmFtZVVwcGVyLm1hdGNoKC9eQ0hBUElUUkVfLykgIT09IG51bGxcbiAgICAgICAgICAgICAgPyA2XG4gICAgICAgICAgICAgIDogbmFtZVVwcGVyLm1hdGNoKC9eU0VDVElPTl8vKSAhPT0gbnVsbFxuICAgICAgICAgICAgICA/IDdcbiAgICAgICAgICAgICAgOiBuYW1lVXBwZXIubWF0Y2goL15TT1VTU0VDVElPTl8vKSAhPT0gbnVsbFxuICAgICAgICAgICAgICA/IDhcbiAgICAgICAgICAgICAgOiBuYW1lVXBwZXIubWF0Y2goL15BUlRJQ0xFUz9fLykgIT09IG51bGwgfHxcbiAgICAgICAgICAgICAgICAvLyBcIkV4cG9zw6kgZGVzIG1vdGlmc1wiIG11c3QgYmUgYXQgdGhlIHNhbWUgbGV2ZWwgYXMgYXJ0aWNsZS5cbiAgICAgICAgICAgICAgICAvLyBcIkV4cG9zw6kgZGVzIG1vdGlmc1wiIHdpdGhvdXQgY29udGVudDpcbiAgICAgICAgICAgICAgICAvLyAqIGh0dHA6Ly93d3cuYXNzZW1ibGVlLW5hdGlvbmFsZS5mci8xNS90ZXh0ZXMvMDcwMi5hc3BcbiAgICAgICAgICAgICAgICAvLyBcIkV4cG9zw6kgZGVzIG1vdGlmc1wiIHdpdGggY29udGVudDpcbiAgICAgICAgICAgICAgICAvLyAqIGh0dHA6Ly93d3cuYXNzZW1ibGVlLW5hdGlvbmFsZS5mci8xNS90ZXh0ZXMvMTMyNi5hc3BcbiAgICAgICAgICAgICAgICAvLyAqIGh0dHA6Ly93d3cuYXNzZW1ibGVlLW5hdGlvbmFsZS5mci8xNS90ZXh0ZXMvMTYxMC5hc3BcbiAgICAgICAgICAgICAgICBuYW1lVXBwZXIubWF0Y2goL15FWFBPU0VfREVTX01PVElGUyQvKSAhPT0gbnVsbFxuICAgICAgICAgICAgICA/IDlcbiAgICAgICAgICAgICAgOiBudWxsXG4gICAgICAgICAgaWYgKG5leHRMZXZlbCA9PT0gbnVsbCAmJiBzdWJkaXZpc2lvbnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICBpZiAobmFtZVVwcGVyLm1hdGNoKC9eKFBST0pFVHxQUk9QT1NJVElPTilfREVfTE9JKF98JCkvKSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAvLyBPY2N1cnMgaW46XG4gICAgICAgICAgICAgIC8vICogaHR0cDovL3d3dy5hc3NlbWJsZWUtbmF0aW9uYWxlLmZyLzE1L3RleHRlcy8wMjMyLmFzcFxuICAgICAgICAgICAgICAvLyAqIGh0dHA6Ly93d3cuYXNzZW1ibGVlLW5hdGlvbmFsZS5mci8xNS90ZXh0ZXMvMDYyNi5hc3BcbiAgICAgICAgICAgICAgLy8gKiBodHRwOi8vd3d3LmFzc2VtYmxlZS1uYXRpb25hbGUuZnIvMTUvdGV4dGVzLzA2NzYuYXNwXG4gICAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgICBuYW1lVXBwZXIgPT09IFwiSkVVWF9PTFlNUElRVUVTX0VUX1BBUkFMWU1QSVFVRVNfREVfMjAyNFwiXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgLy8gT2NjdXJzIGluIGh0dHA6Ly93d3cuYXNzZW1ibGVlLW5hdGlvbmFsZS5mci8xNS90ZXh0ZXMvMDY3Ni5hc3BcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobmFtZVVwcGVyID09PSBcIlRFWFRFX0RFX0xBX0NPTU1JU1NJT05fTUlYVEVfUEFSSVRBSVJFXCIpIHtcbiAgICAgICAgICAgICAgLy8gT2NjdXJzIGluIGh0dHA6Ly93d3cuYXNzZW1ibGVlLW5hdGlvbmFsZS5mci8xNS90ZXh0ZXMvMTI5NC5hc3BcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgICAgIGBVbmV4cGVjdGVkIG5hbWVVcHBlciA9IFwiJHtuYW1lVXBwZXJ9XCIgYXQgYmVnaW5uaW5nIG9mIFwidGV4dGUgZGUgbG9pXCIgYXQgJHthc3NlbWJsZWVVcmx9YCxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gU2tpcCBwYXJhZ3JhcGguXG4gICAgICAgICAgICBzdGF0ZSA9IG5leHRQYXJlbnRTdGF0ZVxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKG5leHRMZXZlbCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgbGV2ZWwgPSBuZXh0TGV2ZWxcbiAgICAgICAgICAgIHdoaWxlIChsZXZlbHMubGVuZ3RoID4gMCAmJiBsZXZlbCA8IGxldmVsc1tsZXZlbHMubGVuZ3RoIC0gMV0pIHtcbiAgICAgICAgICAgICAgbGV2ZWxzLnBvcCgpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobGV2ZWxzLmxlbmd0aCA9PT0gMCB8fCBsZXZlbCA+IGxldmVsc1tsZXZlbHMubGVuZ3RoIC0gMV0pIHtcbiAgICAgICAgICAgICAgbGV2ZWxzLnB1c2gobGV2ZWwpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBBcnRpY2xlcyAmIFwiRXhwb3PDqSBkZXMgbW90aWZzXCIgYXJlIHRoZSBvbmx5IGRpdmlzaW9ucyB3aXRob3V0IHNlY29uZCB0aXRsZS5cbiAgICAgICAgICAgIGlzTXVsdGlMaW5lc0hlYWRlciA9XG4gICAgICAgICAgICAgIG5hbWVVcHBlci5tYXRjaCgvXkFSVElDTEVTP18vKSA9PT0gbnVsbCAmJlxuICAgICAgICAgICAgICBuYW1lVXBwZXIubWF0Y2goL15FWFBPU0VfREVTX01PVElGUyQvKSA9PT0gbnVsbFxuICAgICAgICAgICAgc3ViZGl2aXNpb25BbGluZWFzSHRtbCA9IFtdXG4gICAgICAgICAgICBzdWJkaXZpc2lvbkFsaW5lYXNUZXh0ID0gW11cbiAgICAgICAgICAgIHN1YmRpdmlzaW9uSGVhZGVyc0h0bWwgPSBbXVxuICAgICAgICAgICAgc3ViZGl2aXNpb25IZWFkZXJzVGV4dCA9IFtdXG4gICAgICAgICAgICBzdWJkaXZpc2lvbnMucHVzaCh7XG4gICAgICAgICAgICAgIGh0bWw6IHtcbiAgICAgICAgICAgICAgICBhbGluZWFzOiBzdWJkaXZpc2lvbkFsaW5lYXNIdG1sLFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHN1YmRpdmlzaW9uSGVhZGVyc0h0bWwsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIGlkOiBcIkRfXCIgKyBuYW1lQ29tcHV0ZWQsXG4gICAgICAgICAgICAgIGxldmVsOiBsZXZlbCArIDEsXG4gICAgICAgICAgICAgIHJlbGF0aXZlTGV2ZWw6IGxldmVscy5sZW5ndGgsXG4gICAgICAgICAgICAgIHRleHQ6IHtcbiAgICAgICAgICAgICAgICBhbGluZWFzOiBzdWJkaXZpc2lvbkFsaW5lYXNUZXh0LFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHN1YmRpdmlzaW9uSGVhZGVyc1RleHQsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH1cbiAgICAgICAgICBsaW5lRWxlbWVudHMgPSBbXVxuICAgICAgICAgIHN0YXRlID0gXCJwYXJhZ3JhcGhDaGlsZFwiXG4gICAgICAgIH1cbiAgICAgICAgYnJlYWtcbiAgICAgIGNhc2UgXCJmaXJzdFN1YkFsaW5lYUVsZW1lbnRcIjpcbiAgICAgICAgc3ViQWxpbmVhRWxlbWVudCA9IGFsaW5lYUVsZW1lbnQhLmNoaWxkcmVuWzBdXG4gICAgICAgIGlmIChzdWJBbGluZWFFbGVtZW50ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAvLyBObyBzdWItYWxpbmVhIGluIGN1cnJlbnQgYWxpbmVhOiBnbyB0byBuZXh0IGFsaW5lYS5cbiAgICAgICAgICBzdGF0ZSA9IFwibmV4dEFsaW5lYUVsZW1lbnRcIlxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHN0YXRlID0gXCJzdWJBbGluZWFFbGVtZW50XCJcbiAgICAgICAgfVxuICAgICAgICBicmVha1xuICAgICAgY2FzZSBcIm5leHRBbGluZWFFbGVtZW50XCI6XG4gICAgICAgIGFsaW5lYUVsZW1lbnQgPSBhbGluZWFFbGVtZW50IS5uZXh0RWxlbWVudFNpYmxpbmdcbiAgICAgICAgaWYgKGFsaW5lYUVsZW1lbnQgPT09IG51bGwpIHtcbiAgICAgICAgICAvLyBUaGUgYm9keUNoaWxkIGhhcyBiZWVuIGZ1bGx5IHBhcnNlZC4gR28gdG8gbmV4dCBib2R5Q2hpbGRcbiAgICAgICAgICBzdGF0ZSA9IFwibmV4dEJvZHlDaGlsZFwiXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc3RhdGUgPSBcImFsaW5lYUVsZW1lbnRcIlxuICAgICAgICB9XG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlIFwibmV4dEJvZHlDaGlsZFwiOlxuICAgICAgICBpZiAoYm9keUNoaWxkLm5leHRFbGVtZW50U2libGluZyA9PT0gbnVsbCkge1xuICAgICAgICAgIC8vIFRoZSBkb2N1bWVudCBoYXMgYmVlbiBmdWxseSBwYXJzZWQuXG4gICAgICAgICAgc3RhdGUgPSBudWxsXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYm9keUNoaWxkID0gYm9keUNoaWxkLm5leHRFbGVtZW50U2libGluZ1xuICAgICAgICAgIGlmIChib2R5Q2hpbGQudGFnTmFtZSA9PT0gXCJESVZcIikge1xuICAgICAgICAgICAgc3RhdGUgPSBcImZpcnN0QWxpbmVhRWxlbWVudFwiXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIDxQLz4gaXMgZm9yIGZvb3Rub3Rlc1xuICAgICAgICAgICAgYXNzZXJ0KFxuICAgICAgICAgICAgICBbXCJCUlwiLCBcIkhSXCIsIFwiUFwiXS5pbmNsdWRlcyhib2R5Q2hpbGQudGFnTmFtZSksXG4gICAgICAgICAgICAgIGBVbmV4cGVjdGVkIHRhZyBuYW1lIFwiJHtib2R5Q2hpbGQudGFnTmFtZX1cIiBmb3IgYm9keSBjaGlsZGAsXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAvLyBTdGF5IGluIHRoZSBzYW1lIHN0YXRlIHRvIGdvIHRvIG5leHQgYm9keUNoaWxkLlxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBicmVha1xuICAgICAgY2FzZSBcIm5leHRQYXJhZ3JhcGhDaGlsZFwiOlxuICAgICAgICBwYXJhZ3JhcGhDaGlsZCA9IHBhcmFncmFwaENoaWxkIS5uZXh0RWxlbWVudFNpYmxpbmdcbiAgICAgICAgaWYgKHBhcmFncmFwaENoaWxkID09PSBudWxsKSB7XG4gICAgICAgICAgLy8gVGhlIHBhcmFncmFwaCBlbGVtZW50IGhhcyBiZWVuIGZ1bGx5IHBhcnNlZC4gR28gdG8gbmV4dCBwYXJlbnQgZWxlbWVudC5cbiAgICAgICAgICBjb25zdCBsaW5lVGV4dCA9IGxpbmVFbGVtZW50cyFcbiAgICAgICAgICAgIC5tYXAoKGVsZW1lbnQpID0+IGVsZW1lbnQudGV4dENvbnRlbnQpXG4gICAgICAgICAgICAuam9pbihcIlwiKVxuICAgICAgICAgICAgLnRyaW0oKVxuICAgICAgICAgIGlmIChsaW5lVGV4dCkge1xuICAgICAgICAgICAgY29uc3QgbGluZUh0bWwgPSBsaW5lRWxlbWVudHMhXG4gICAgICAgICAgICAgIC5tYXAoKGVsZW1lbnQpID0+IGVsZW1lbnQub3V0ZXJIVE1MKVxuICAgICAgICAgICAgICAuam9pbihcIlwiKVxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICBzdWJkaXZpc2lvbkhlYWRlcnNUZXh0IS5sZW5ndGggPT09IDAgfHxcbiAgICAgICAgICAgICAgKGlzTXVsdGlMaW5lc0hlYWRlciAmJiBzdWJkaXZpc2lvbkFsaW5lYXNUZXh0IS5sZW5ndGggPT09IDApXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgc3ViZGl2aXNpb25IZWFkZXJzSHRtbCEucHVzaChsaW5lSHRtbClcbiAgICAgICAgICAgICAgc3ViZGl2aXNpb25IZWFkZXJzVGV4dCEucHVzaChsaW5lVGV4dClcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHN1YmRpdmlzaW9uQWxpbmVhc0h0bWwhLnB1c2gobGluZUh0bWwpXG4gICAgICAgICAgICAgIHN1YmRpdmlzaW9uQWxpbmVhc1RleHQhLnB1c2gobGluZVRleHQpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChpc011bHRpTGluZXNIZWFkZXIgJiYgc3ViZGl2aXNpb25IZWFkZXJzVGV4dCEubGVuZ3RoID49IDIpIHtcbiAgICAgICAgICAgIGlzTXVsdGlMaW5lc0hlYWRlciA9IGZhbHNlXG4gICAgICAgICAgfVxuICAgICAgICAgIGxpbmVFbGVtZW50cyA9IG51bGxcbiAgICAgICAgICBzdGF0ZSA9IG5leHRQYXJlbnRTdGF0ZVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHN0YXRlID0gXCJwYXJhZ3JhcGhDaGlsZFwiXG4gICAgICAgIH1cbiAgICAgICAgYnJlYWtcbiAgICAgIGNhc2UgXCJuZXh0U3ViQWxpbmVhRWxlbWVudFwiOlxuICAgICAgICBzdWJBbGluZWFFbGVtZW50ID0gc3ViQWxpbmVhRWxlbWVudCEubmV4dEVsZW1lbnRTaWJsaW5nXG4gICAgICAgIGlmIChzdWJBbGluZWFFbGVtZW50ID09PSBudWxsKSB7XG4gICAgICAgICAgLy8gVGhlIGFsaW5lYUVsZW1lbnQgaGFzIGJlZW4gZnVsbHkgcGFyc2VkLiBHbyB0byBuZXh0IGFsaW5lYUVsZW1lbnQuXG4gICAgICAgICAgc3RhdGUgPSBcIm5leHRBbGluZWFFbGVtZW50XCJcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzdGF0ZSA9IFwic3ViQWxpbmVhRWxlbWVudFwiXG4gICAgICAgIH1cbiAgICAgICAgYnJlYWtcbiAgICAgIGNhc2UgXCJwYXJhZ3JhcGhDaGlsZFwiOlxuICAgICAgICBzd2l0Y2ggKHBhcmFncmFwaENoaWxkIS50YWdOYW1lKSB7XG4gICAgICAgICAgY2FzZSBcIkFcIjoge1xuICAgICAgICAgICAgbGluZUVsZW1lbnRzIS5wdXNoKHBhcmFncmFwaENoaWxkISlcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgXCJCUlwiOiB7XG4gICAgICAgICAgICBjb25zdCBsaW5lVGV4dCA9IGxpbmVFbGVtZW50cyFcbiAgICAgICAgICAgICAgLm1hcCgoZWxlbWVudCkgPT4gZWxlbWVudC50ZXh0Q29udGVudClcbiAgICAgICAgICAgICAgLmpvaW4oXCJcIilcbiAgICAgICAgICAgICAgLnRyaW0oKVxuICAgICAgICAgICAgaWYgKGxpbmVUZXh0KSB7XG4gICAgICAgICAgICAgIGNvbnN0IGxpbmVIdG1sID0gbGluZUVsZW1lbnRzIVxuICAgICAgICAgICAgICAgIC5tYXAoKGVsZW1lbnQpID0+IGVsZW1lbnQub3V0ZXJIVE1MKVxuICAgICAgICAgICAgICAgIC5qb2luKFwiXCIpXG4gICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBzdWJkaXZpc2lvbkhlYWRlcnNUZXh0IS5sZW5ndGggPT09IDAgfHxcbiAgICAgICAgICAgICAgICAoaXNNdWx0aUxpbmVzSGVhZGVyICYmIHN1YmRpdmlzaW9uQWxpbmVhc1RleHQhLmxlbmd0aCA9PT0gMClcbiAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgc3ViZGl2aXNpb25IZWFkZXJzSHRtbCEucHVzaChsaW5lSHRtbClcbiAgICAgICAgICAgICAgICBzdWJkaXZpc2lvbkhlYWRlcnNUZXh0IS5wdXNoKGxpbmVUZXh0KVxuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHN1YmRpdmlzaW9uQWxpbmVhc0h0bWwhLnB1c2gobGluZUh0bWwpXG4gICAgICAgICAgICAgICAgc3ViZGl2aXNpb25BbGluZWFzVGV4dCEucHVzaChsaW5lVGV4dClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGluZUVsZW1lbnRzID0gW11cbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgXCJERUxcIjoge1xuICAgICAgICAgICAgbGluZUVsZW1lbnRzIS5wdXNoKHBhcmFncmFwaENoaWxkISlcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgXCJJTUdcIjoge1xuICAgICAgICAgICAgbGluZUVsZW1lbnRzIS5wdXNoKHBhcmFncmFwaENoaWxkISlcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgXCJTUEFOXCI6IHtcbiAgICAgICAgICAgIGNvbnN0IGNsYXNzTmFtZSA9IHBhcmFncmFwaENoaWxkIS5nZXRBdHRyaWJ1dGUoXCJjbGFzc1wiKVxuICAgICAgICAgICAgc3dpdGNoIChjbGFzc05hbWUpIHtcbiAgICAgICAgICAgICAgY2FzZSBcImFFbG9pUGFzdGlsbGVcIjoge1xuICAgICAgICAgICAgICAgIC8vIFNraXAgcGFzdGlsbMOpIFNQQU4uXG4gICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjYXNlIFwiYUVsb2lQYXN0aWxsZTBcIjoge1xuICAgICAgICAgICAgICAgIC8vIFNraXAgcGFzdGlsbMOpIFNQQU4uXG4gICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIGxpbmVFbGVtZW50cyEucHVzaChwYXJhZ3JhcGhDaGlsZCEpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIH1cbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgZXJyb3I6IHtcbiAgICAgICAgICAgICAgICBjb2RlOiAtMyxcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiBgVW5leHBlY3RlZCB0YWcgbmFtZSBmb3IgcGFyYWdyYXBoIGNoaWxkOiAke1xuICAgICAgICAgICAgICAgICAgcGFyYWdyYXBoQ2hpbGQhLnRhZ05hbWVcbiAgICAgICAgICAgICAgICB9YCxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgaHRtbCxcbiAgICAgICAgICAgICAgcGFnZSxcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBzdGF0ZSA9IFwibmV4dFBhcmFncmFwaENoaWxkXCJcbiAgICAgICAgYnJlYWtcbiAgICAgIGNhc2UgXCJzdWJBbGluZWFFbGVtZW50XCI6XG4gICAgICAgIHN3aXRjaCAoc3ViQWxpbmVhRWxlbWVudCEudGFnTmFtZSkge1xuICAgICAgICAgIGNhc2UgXCJQXCI6XG4gICAgICAgICAgICBuZXh0UGFyZW50U3RhdGUgPSBcIm5leHRTdWJBbGluZWFFbGVtZW50XCJcbiAgICAgICAgICAgIHBhcmFncmFwaEVsZW1lbnQgPSBzdWJBbGluZWFFbGVtZW50XG4gICAgICAgICAgICBzdGF0ZSA9IFwiZmlyc3RQYXJhZ3JhcGhDaGlsZFwiXG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIGNhc2UgXCJUQUJMRVwiOlxuICAgICAgICAgICAgLy8gVE9ET1xuICAgICAgICAgICAgc3RhdGUgPSBcIm5leHRTdWJBbGluZWFFbGVtZW50XCJcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIGVycm9yOiB7XG4gICAgICAgICAgICAgICAgY29kZTogLTQsXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogYFVuZXhwZWN0ZWQgdGFnIG5hbWUgZm9yIHN1YiBhbGluZWEgZWxlbWVudDogJHtcbiAgICAgICAgICAgICAgICAgIHN1YkFsaW5lYUVsZW1lbnQhLnRhZ05hbWVcbiAgICAgICAgICAgICAgICB9YCxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgaHRtbCxcbiAgICAgICAgICAgICAgcGFnZSxcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBicmVha1xuICAgICAgICBzdGF0ZSA9IFwibmV4dFN1YkFsaW5lYUVsZW1lbnRcIlxuICAgICAgICBicmVha1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgYFVuZXhwZWN0ZWQgc3RhdGU6ICR7c3RhdGV9YFxuICAgIH1cbiAgfVxuXG4gIHdpbmRvdy5jbG9zZSgpIC8vIEZyZWUgbWVtb3J5LlxuXG4gIHJldHVybiB7XG4gICAgZXJyb3I6IG51bGwsXG4gICAgaHRtbCxcbiAgICBwYWdlLFxuICAgIHN1YmRpdmlzaW9ucyxcbiAgICB1cmw6IGFzc2VtYmxlZVVybCxcbiAgfVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmV0cmlldmVUZXh0ZUxvaVBhcnNlZChcbiAgZmV0Y2g6IChcbiAgICB1cmw6IHN0cmluZyB8IFJlcXVlc3QsXG4gICAgaW5pdD86IFJlcXVlc3RJbml0IHwgdW5kZWZpbmVkLFxuICApID0+IFByb21pc2U8UmVzcG9uc2U+LFxuICBhc3NlbWJsZWVVcmw6IHN0cmluZyxcbikge1xuICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKGFzc2VtYmxlZVVybClcbiAgY29uc3QgcGFnZSA9IGF3YWl0IHJlc3BvbnNlLnRleHQoKVxuICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGVycm9yOiB7IGNvZGU6IHJlc3BvbnNlLnN0YXR1cywgbWVzc2FnZTogcmVzcG9uc2Uuc3RhdHVzVGV4dCB9LFxuICAgICAgcGFnZSxcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHBhcnNlVGV4dGVMb2koYXNzZW1ibGVlVXJsLCBwYWdlKVxufVxuIl0sIm1hcHBpbmdzIjoiQUFBQSxPQUFPQSxNQUFQLE1BQW1CLFFBQW5CO0FBQ0EsU0FBU0MsS0FBVCxRQUFzQixPQUF0QjtBQUVBLE9BQU8sU0FBU0MsYUFBVCxDQUF1QkMsWUFBdkIsRUFBNkNDLElBQTdDLEVBQTJEO0VBQ2hFO0VBQ0EsTUFBTUMsWUFBWSxHQUFHRCxJQUFJLENBQUNFLEtBQUwsQ0FBVyxVQUFYLENBQXJCO0VBQ0FOLE1BQU0sQ0FBQ08sV0FBUCxDQUFtQkYsWUFBWSxDQUFDRyxNQUFoQyxFQUF3QyxDQUF4QyxFQUEyQ0osSUFBM0M7RUFDQSxJQUFJSyxJQUFJLEdBQUdKLFlBQVksQ0FBQyxDQUFELENBQVosQ0FBZ0JLLElBQWhCLEVBQVg7RUFDQVYsTUFBTSxDQUFDUyxJQUFJLENBQUNFLFVBQUwsQ0FBZ0IsTUFBaEIsQ0FBRCxDQUFOO0VBQ0FYLE1BQU0sQ0FBQ1MsSUFBSSxDQUFDRyxRQUFMLENBQWMsUUFBZCxDQUFELENBQU47RUFDQUgsSUFBSSxHQUFJLFFBQU9BLElBQUksQ0FBQ0ksU0FBTCxDQUFlLENBQWYsRUFBa0JKLElBQUksQ0FBQ0QsTUFBTCxHQUFjLENBQWhDLENBQW1DLFNBQWxELENBUGdFLENBU2hFOztFQUNBLE1BQU07SUFBRU07RUFBRixJQUFhLElBQUliLEtBQUosQ0FBVVEsSUFBVixDQUFuQjtF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
371
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJhc3NlcnQiLCJKU0RPTSIsInBhcnNlVGV4dGVMb2kiLCJhc3NlbWJsZWVVcmwiLCJwYWdlIiwicGFnZVNlZ21lbnRzIiwic3BsaXQiLCJzdHJpY3RFcXVhbCIsImxlbmd0aCIsImh0bWwiLCJ0cmltIiwic3RhcnRzV2l0aCIsImVuZHNXaXRoIiwic3Vic3RyaW5nIiwid2luZG93IiwiZG9jdW1lbnQiLCJjaGlsZHJlbiIsImh0bWxFbGVtZW50IiwiYm9keUVsZW1lbnQiLCJkaXZFbGVtZW50IiwidGFnTmFtZSIsIm5ld0RpdkVsZW1lbnQiLCJpbnNlcnRCZWZvcmUiLCJjcmVhdGVFbGVtZW50IiwiZGl2Q2hpbGQiLCJnZXRBdHRyaWJ1dGUiLCJhcHBlbmRDaGlsZCIsImNsb3NlIiwiZXJyb3IiLCJjb2RlIiwibWVzc2FnZSIsImJvZHlDaGlsZCIsImFsaW5lYUVsZW1lbnQiLCJpc011bHRpTGluZXNIZWFkZXIiLCJsZXZlbCIsImxldmVscyIsImxpbmVFbGVtZW50cyIsIm5leHRQYXJlbnRTdGF0ZSIsInBhcmFncmFwaENoaWxkIiwicGFyYWdyYXBoRWxlbWVudCIsInN0YXRlIiwic3ViQWxpbmVhRWxlbWVudCIsInN1YmRpdmlzaW9ucyIsInN1YmRpdmlzaW9uQWxpbmVhc0h0bWwiLCJzdWJkaXZpc2lvbkFsaW5lYXNUZXh0Iiwic3ViZGl2aXNpb25IZWFkZXJzSHRtbCIsInN1YmRpdmlzaW9uSGVhZGVyc1RleHQiLCJ1bmRlZmluZWQiLCJoZWFkZXJUZXh0IiwidGV4dENvbnRlbnQiLCJuYW1lQ29tcHV0ZWQiLCJub3JtYWxpemUiLCJyZXBsYWNlIiwibmFtZVVwcGVyIiwidG9VcHBlckNhc2UiLCJuZXh0TGV2ZWwiLCJtYXRjaCIsImNvbnNvbGUiLCJsb2ciLCJwb3AiLCJwdXNoIiwiYWxpbmVhcyIsImhlYWRlcnMiLCJpZCIsInJlbGF0aXZlTGV2ZWwiLCJ0ZXh0IiwibmV4dEVsZW1lbnRTaWJsaW5nIiwiaW5jbHVkZXMiLCJsaW5lVGV4dCIsIm1hcCIsImVsZW1lbnQiLCJqb2luIiwibGluZUh0bWwiLCJvdXRlckhUTUwiLCJjbGFzc05hbWUiLCJ1cmwiLCJyZXRyaWV2ZVRleHRlTG9pUGFyc2VkIiwiZmV0Y2giLCJyZXNwb25zZSIsIm9rIiwic3RhdHVzIiwic3RhdHVzVGV4dCJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wYXJzZXJzL2RvY3VtZW50cy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXNzZXJ0IGZyb20gXCJhc3NlcnRcIlxuaW1wb3J0IHsgSlNET00gfSBmcm9tIFwianNkb21cIlxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VUZXh0ZUxvaShhc3NlbWJsZWVVcmw6IHN0cmluZywgcGFnZTogc3RyaW5nKSB7XG4gIC8vIFJlcGFpciBIVE1MLlxuICBjb25zdCBwYWdlU2VnbWVudHMgPSBwYWdlLnNwbGl0KFwiPC9zdHlsZT5cIilcbiAgYXNzZXJ0LnN0cmljdEVxdWFsKHBhZ2VTZWdtZW50cy5sZW5ndGgsIDIsIHBhZ2UpXG4gIGxldCBodG1sID0gcGFnZVNlZ21lbnRzWzFdLnRyaW0oKVxuICBhc3NlcnQoaHRtbC5zdGFydHNXaXRoKFwiPGRpdlwiKSlcbiAgYXNzZXJ0KGh0bWwuZW5kc1dpdGgoXCI8L2Rpdj5cIikpXG4gIGh0bWwgPSBgPGh0bWwke2h0bWwuc3Vic3RyaW5nKDQsIGh0bWwubGVuZ3RoIC0gNil9PC9odG1sPmBcblxuICAvLyBFeHRyYWN0IHN1YmRpdmlzaW9ucyBmcm9tIEhUTUwuXG4gIGNvbnN0IHsgd2luZG93IH0gPSBuZXcgSlNET00oaHRtbClcbiAgY29uc3QgeyBkb2N1bWVudCB9ID0gd2luZG93XG4gIGFzc2VydC5zdHJpY3RFcXVhbChkb2N1bWVudC5jaGlsZHJlbi5sZW5ndGgsIDEpXG4gIGNvbnN0IGh0bWxFbGVtZW50ID0gZG9jdW1lbnQuY2hpbGRyZW5bMF1cbiAgYXNzZXJ0LnN0cmljdEVxdWFsKGh0bWxFbGVtZW50LmNoaWxkcmVuLmxlbmd0aCwgMilcbiAgY29uc3QgYm9keUVsZW1lbnQgPSBodG1sRWxlbWVudC5jaGlsZHJlblsxXVxuICBpZiAoYXNzZW1ibGVlVXJsID09PSBcImh0dHA6Ly93d3cuYXNzZW1ibGVlLW5hdGlvbmFsZS5mci8xNS90ZXh0ZXMvMDY3NS5hc3BcIikge1xuICAgIC8vIFJlcGFpciBkb2N1bWVudC5cbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwoYm9keUVsZW1lbnQuY2hpbGRyZW4ubGVuZ3RoLCAxKVxuICAgIGNvbnN0IGRpdkVsZW1lbnQgPSBib2R5RWxlbWVudC5jaGlsZHJlblswXVxuICAgIGFzc2VydC5zdHJpY3RFcXVhbChkaXZFbGVtZW50LnRhZ05hbWUsIFwiRElWXCIpXG4gICAgY29uc3QgbmV3RGl2RWxlbWVudCA9IGJvZHlFbGVtZW50Lmluc2VydEJlZm9yZShcbiAgICAgIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiksXG4gICAgICBkaXZFbGVtZW50LFxuICAgIClcbiAgICBib2R5RWxlbWVudC5pbnNlcnRCZWZvcmUoZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImJyXCIpLCBkaXZFbGVtZW50KVxuICAgIGZvciAoY29uc3QgZGl2Q2hpbGQgb2YgWy4uLmRpdkVsZW1lbnQuY2hpbGRyZW5dKSB7XG4gICAgICBpZiAoZGl2Q2hpbGQuZ2V0QXR0cmlidXRlKFwiY2xhc3NcIikgPT09IFwiYTlBcnRpY2xlTnVtXCIpIHtcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICAgIG5ld0RpdkVsZW1lbnQuYXBwZW5kQ2hpbGQoZGl2Q2hpbGQpXG4gICAgfVxuICB9XG4gIGlmIChib2R5RWxlbWVudC5jaGlsZHJlbi5sZW5ndGggPCAzKSB7XG4gICAgLy8gT2NjdXJzIGluIGh0dHA6Ly93d3cuYXNzZW1ibGVlLW5hdGlvbmFsZS5mci8xNS90ZXh0ZXMvMDMyNi5hc3AuXG4gICAgd2luZG93LmNsb3NlKCkgLy8gRnJlZSBtZW1vcnkuXG4gICAgcmV0dXJuIHtcbiAgICAgIGVycm9yOiB7IGNvZGU6IC0xLCBtZXNzYWdlOiBcIlRleHRlIGRlIGxvaSBzYW5zIGNvbnRlbnVcIiB9LFxuICAgICAgaHRtbCxcbiAgICAgIHBhZ2UsXG4gICAgfVxuICB9XG4gIGFzc2VydC5zdHJpY3RFcXVhbChib2R5RWxlbWVudC5jaGlsZHJlblswXS50YWdOYW1lLCBcIkRJVlwiKVxuICAvLyBGaXJzdCBjaGlsZCBpcyBhIERJViBkZXNjcmliaW5nIHRoZSBkb2N1bWVudCAoQXNzZW1ibMOpZSdzIGhlYWRlcikuIFNraXAgaXQgZm9yIG5vdy5cbiAgbGV0IGJvZHlDaGlsZCA9IGJvZHlFbGVtZW50LmNoaWxkcmVuWzFdXG4gIGFzc2VydC5zdHJpY3RFcXVhbChib2R5Q2hpbGQudGFnTmFtZSwgXCJCUlwiKVxuICBsZXQgYWxpbmVhRWxlbWVudDogRWxlbWVudCB8IG51bGwgPSBudWxsXG4gIGxldCBpc011bHRpTGluZXNIZWFkZXI6IGJvb2xlYW4gPSBmYWxzZVxuICBsZXQgbGV2ZWw6IG51bWJlciB8IG51bGwgPSBudWxsXG4gIGxldCBsZXZlbHM6IG51bWJlcltdID0gW11cbiAgbGV0IGxpbmVFbGVtZW50czogRWxlbWVudFtdIHwgbnVsbCA9IG51bGxcbiAgbGV0IG5leHRQYXJlbnRTdGF0ZSA9IG51bGxcbiAgbGV0IHBhcmFncmFwaENoaWxkOiBFbGVtZW50IHwgbnVsbCA9IG51bGxcbiAgbGV0IHBhcmFncmFwaEVsZW1lbnQ6IEVsZW1lbnQgfCBudWxsID0gbnVsbFxuICBsZXQgc3RhdGU6IHN0cmluZyB8IG51bGwgPSBcIm5leHRCb2R5Q2hpbGRcIlxuICBsZXQgc3ViQWxpbmVhRWxlbWVudDogRWxlbWVudCB8IG51bGwgPSBudWxsXG4gIGNvbnN0IHN1YmRpdmlzaW9ucyA9IFtdXG4gIGxldCBzdWJkaXZpc2lvbkFsaW5lYXNIdG1sOiBzdHJpbmdbXSB8IG51bGwgPSBudWxsXG4gIGxldCBzdWJkaXZpc2lvbkFsaW5lYXNUZXh0OiBzdHJpbmdbXSB8IG51bGwgPSBudWxsXG4gIGxldCBzdWJkaXZpc2lvbkhlYWRlcnNIdG1sOiBzdHJpbmdbXSB8IG51bGwgPSBudWxsXG4gIGxldCBzdWJkaXZpc2lvbkhlYWRlcnNUZXh0OiBzdHJpbmdbXSB8IG51bGwgPSBudWxsXG4gIHdoaWxlIChzdGF0ZSAhPT0gbnVsbCkge1xuICAgIHN3aXRjaCAoc3RhdGUpIHtcbiAgICAgIGNhc2UgXCJhbGluZWFFbGVtZW50XCI6XG4gICAgICAgIHN3aXRjaCAoYWxpbmVhRWxlbWVudCEudGFnTmFtZSkge1xuICAgICAgICAgIGNhc2UgXCJESVZcIjpcbiAgICAgICAgICAgIHN0YXRlID0gXCJmaXJzdFN1YkFsaW5lYUVsZW1lbnRcIlxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICBjYXNlIFwiSDRcIjpcbiAgICAgICAgICAgIC8vIFRPRE9cbiAgICAgICAgICAgIG5leHRQYXJlbnRTdGF0ZSA9IFwibmV4dEFsaW5lYUVsZW1lbnRcIlxuICAgICAgICAgICAgcGFyYWdyYXBoRWxlbWVudCA9IGFsaW5lYUVsZW1lbnRcbiAgICAgICAgICAgIHN0YXRlID0gXCJmaXJzdFBhcmFncmFwaENoaWxkXCJcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgY2FzZSBcIlBcIjpcbiAgICAgICAgICAgIG5leHRQYXJlbnRTdGF0ZSA9IFwibmV4dEFsaW5lYUVsZW1lbnRcIlxuICAgICAgICAgICAgcGFyYWdyYXBoRWxlbWVudCA9IGFsaW5lYUVsZW1lbnRcbiAgICAgICAgICAgIHN0YXRlID0gXCJmaXJzdFBhcmFncmFwaENoaWxkXCJcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgY2FzZSBcIk9MXCI6XG4gICAgICAgICAgICAvLyBUT0RPXG4gICAgICAgICAgICBzdGF0ZSA9IFwibmV4dEFsaW5lYUVsZW1lbnRcIlxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICBjYXNlIFwiVEFCTEVcIjpcbiAgICAgICAgICAgIC8vIFRPRE9cbiAgICAgICAgICAgIHN0YXRlID0gXCJuZXh0QWxpbmVhRWxlbWVudFwiXG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBlcnJvcjoge1xuICAgICAgICAgICAgICAgIGNvZGU6IC0yLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGBVbmV4cGVjdGVkIHRhZyBuYW1lIGZvciBhbGluZWEgZWxlbWVudDogJHtcbiAgICAgICAgICAgICAgICAgIGFsaW5lYUVsZW1lbnQhLnRhZ05hbWVcbiAgICAgICAgICAgICAgICB9YCxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgaHRtbCxcbiAgICAgICAgICAgICAgcGFnZSxcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBicmVha1xuICAgICAgY2FzZSBcImZpcnN0QWxpbmVhRWxlbWVudFwiOlxuICAgICAgICBhbGluZWFFbGVtZW50ID0gYm9keUNoaWxkLmNoaWxkcmVuWzBdXG4gICAgICAgIGlmIChhbGluZWFFbGVtZW50ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAvLyBObyBhbGluZWEgaW4gY3VycmVudCBib2R5Q2hpbGQ6IGdvIHRvIG5leHQgYm9keUNoaWxkLlxuICAgICAgICAgIHN0YXRlID0gXCJuZXh0Qm9keUNoaWxkXCJcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzdGF0ZSA9IFwiYWxpbmVhRWxlbWVudFwiXG4gICAgICAgIH1cbiAgICAgICAgYnJlYWtcbiAgICAgIGNhc2UgXCJmaXJzdFBhcmFncmFwaENoaWxkXCI6XG4gICAgICAgIHBhcmFncmFwaENoaWxkID0gcGFyYWdyYXBoRWxlbWVudCEuY2hpbGRyZW5bMF1cbiAgICAgICAgaWYgKHBhcmFncmFwaENoaWxkID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAvLyBObyBjaGlsZCBpbiBjdXJyZW50IHBhcmFncmFwaDogZ28gdG8gbmV4dCBwYXJlbnQgZWxlbWVudC5cbiAgICAgICAgICBzdGF0ZSA9IG5leHRQYXJlbnRTdGF0ZVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IGhlYWRlclRleHQgPSBwYXJhZ3JhcGhFbGVtZW50IS50ZXh0Q29udGVudFxuICAgICAgICAgIGNvbnN0IG5hbWVDb21wdXRlZCA9IChoZWFkZXJUZXh0IHx8IFwiXCIpXG4gICAgICAgICAgICAubm9ybWFsaXplKFwiTkZEXCIpXG4gICAgICAgICAgICAucmVwbGFjZSgvW1xcdTAzMDAtXFx1MDM2Zl0vZywgXCJcIilcbiAgICAgICAgICAgIC5yZXBsYWNlKC9cXChub3V2ZWF1XFwpLywgXCJcIilcbiAgICAgICAgICAgIC5yZXBsYWNlKC9cXChQb3VyIGNvb3JkaW5hdGlvblxcKS8sIFwiXCIpXG4gICAgICAgICAgICAucmVwbGFjZSgvXFwoU3VwcHJpbcOpcz9cXCkvLCBcIlwiKVxuICAgICAgICAgICAgLnJlcGxhY2UoL8KgL2csIFwiIFwiKVxuICAgICAgICAgICAgLnJlcGxhY2UoL1tcXC0sLuKApl0vZywgXCJcIilcbiAgICAgICAgICAgIC50cmltKClcbiAgICAgICAgICAgIC5yZXBsYWNlKC8gezEsfS9nLCBcIl9cIilcbiAgICAgICAgICBjb25zdCBuYW1lVXBwZXIgPSBuYW1lQ29tcHV0ZWQudG9VcHBlckNhc2UoKVxuICAgICAgICAgIGlmIChuYW1lVXBwZXIgPT09IFwiXCIpIHtcbiAgICAgICAgICAgIC8vIE9jY3VycyBpbjpcbiAgICAgICAgICAgIC8vICogaHR0cDovL3d3dy5hc3NlbWJsZWUtbmF0aW9uYWxlLmZyLzE1L3RleHRlcy8wNDQ1LmFzcFxuICAgICAgICAgICAgLy8gKiBodHRwOi8vd3d3LmFzc2VtYmxlZS1uYXRpb25hbGUuZnIvMTUvdGV4dGVzLzA2MjYuYXNwXG4gICAgICAgICAgICAvLyBTa2lwIHBhcmFncmFwaC5cbiAgICAgICAgICAgIHN0YXRlID0gbmV4dFBhcmVudFN0YXRlXG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBuZXh0TGV2ZWwgPVxuICAgICAgICAgICAgbmFtZVVwcGVyLm1hdGNoKC9eKFJBUFBPUlRfKT9BTk5FWEUoX3wkKS8pICE9PSBudWxsIHx8XG4gICAgICAgICAgICBuYW1lVXBwZXIubWF0Y2goL15FVEFUXy8pICE9PSBudWxsXG4gICAgICAgICAgICAgID8gMFxuICAgICAgICAgICAgICA6IG5hbWVVcHBlci5tYXRjaCgvXlRPTUVfLykgIT09IG51bGxcbiAgICAgICAgICAgICAgPyAxXG4gICAgICAgICAgICAgIDogbmFtZVVwcGVyLm1hdGNoKC9eUEFSVElFXy8pICE9PSBudWxsIHx8XG4gICAgICAgICAgICAgICAgbmFtZVVwcGVyLm1hdGNoKFxuICAgICAgICAgICAgICAgICAgL14oUFJFTUlFUkV8U0VDT05ERXxERVVYSUVNRXxUUk9JU0lFTUV8UVVBVFJJRU1FKV9QQVJUSUUoX3wkKS8sXG4gICAgICAgICAgICAgICAgKSAhPT0gbnVsbFxuICAgICAgICAgICAgICA/IDJcbiAgICAgICAgICAgICAgOiBuYW1lVXBwZXIubWF0Y2goL15MSVZSRV8vKSAhPT0gbnVsbFxuICAgICAgICAgICAgICA/IDNcbiAgICAgICAgICAgICAgOiBuYW1lVXBwZXIubWF0Y2goL15USVRSRV8vKSAhPT0gbnVsbFxuICAgICAgICAgICAgICA/IDRcbiAgICAgICAgICAgICAgOiBuYW1lVXBwZXIubWF0Y2goL15TT1VTVElUUkVfLykgIT09IG51bGxcbiAgICAgICAgICAgICAgPyA1XG4gICAgICAgICAgICAgIDogbmFtZVVwcGVyLm1hdGNoKC9eQ0hBUElUUkVfLykgIT09IG51bGxcbiAgICAgICAgICAgICAgPyA2XG4gICAgICAgICAgICAgIDogbmFtZVVwcGVyLm1hdGNoKC9eU0VDVElPTl8vKSAhPT0gbnVsbFxuICAgICAgICAgICAgICA/IDdcbiAgICAgICAgICAgICAgOiBuYW1lVXBwZXIubWF0Y2goL15TT1VTU0VDVElPTl8vKSAhPT0gbnVsbFxuICAgICAgICAgICAgICA/IDhcbiAgICAgICAgICAgICAgOiBuYW1lVXBwZXIubWF0Y2goL15BUlRJQ0xFUz9fLykgIT09IG51bGwgfHxcbiAgICAgICAgICAgICAgICAvLyBcIkV4cG9zw6kgZGVzIG1vdGlmc1wiIG11c3QgYmUgYXQgdGhlIHNhbWUgbGV2ZWwgYXMgYXJ0aWNsZS5cbiAgICAgICAgICAgICAgICAvLyBcIkV4cG9zw6kgZGVzIG1vdGlmc1wiIHdpdGhvdXQgY29udGVudDpcbiAgICAgICAgICAgICAgICAvLyAqIGh0dHA6Ly93d3cuYXNzZW1ibGVlLW5hdGlvbmFsZS5mci8xNS90ZXh0ZXMvMDcwMi5hc3BcbiAgICAgICAgICAgICAgICAvLyBcIkV4cG9zw6kgZGVzIG1vdGlmc1wiIHdpdGggY29udGVudDpcbiAgICAgICAgICAgICAgICAvLyAqIGh0dHA6Ly93d3cuYXNzZW1ibGVlLW5hdGlvbmFsZS5mci8xNS90ZXh0ZXMvMTMyNi5hc3BcbiAgICAgICAgICAgICAgICAvLyAqIGh0dHA6Ly93d3cuYXNzZW1ibGVlLW5hdGlvbmFsZS5mci8xNS90ZXh0ZXMvMTYxMC5hc3BcbiAgICAgICAgICAgICAgICBuYW1lVXBwZXIubWF0Y2goL15FWFBPU0VfREVTX01PVElGUyQvKSAhPT0gbnVsbFxuICAgICAgICAgICAgICA/IDlcbiAgICAgICAgICAgICAgOiBudWxsXG4gICAgICAgICAgaWYgKG5leHRMZXZlbCA9PT0gbnVsbCAmJiBzdWJkaXZpc2lvbnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICBpZiAobmFtZVVwcGVyLm1hdGNoKC9eKFBST0pFVHxQUk9QT1NJVElPTilfREVfTE9JKF98JCkvKSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAvLyBPY2N1cnMgaW46XG4gICAgICAgICAgICAgIC8vICogaHR0cDovL3d3dy5hc3NlbWJsZWUtbmF0aW9uYWxlLmZyLzE1L3RleHRlcy8wMjMyLmFzcFxuICAgICAgICAgICAgICAvLyAqIGh0dHA6Ly93d3cuYXNzZW1ibGVlLW5hdGlvbmFsZS5mci8xNS90ZXh0ZXMvMDYyNi5hc3BcbiAgICAgICAgICAgICAgLy8gKiBodHRwOi8vd3d3LmFzc2VtYmxlZS1uYXRpb25hbGUuZnIvMTUvdGV4dGVzLzA2NzYuYXNwXG4gICAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgICBuYW1lVXBwZXIgPT09IFwiSkVVWF9PTFlNUElRVUVTX0VUX1BBUkFMWU1QSVFVRVNfREVfMjAyNFwiXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgLy8gT2NjdXJzIGluIGh0dHA6Ly93d3cuYXNzZW1ibGVlLW5hdGlvbmFsZS5mci8xNS90ZXh0ZXMvMDY3Ni5hc3BcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobmFtZVVwcGVyID09PSBcIlRFWFRFX0RFX0xBX0NPTU1JU1NJT05fTUlYVEVfUEFSSVRBSVJFXCIpIHtcbiAgICAgICAgICAgICAgLy8gT2NjdXJzIGluIGh0dHA6Ly93d3cuYXNzZW1ibGVlLW5hdGlvbmFsZS5mci8xNS90ZXh0ZXMvMTI5NC5hc3BcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgICAgIGBVbmV4cGVjdGVkIG5hbWVVcHBlciA9IFwiJHtuYW1lVXBwZXJ9XCIgYXQgYmVnaW5uaW5nIG9mIFwidGV4dGUgZGUgbG9pXCIgYXQgJHthc3NlbWJsZWVVcmx9YCxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gU2tpcCBwYXJhZ3JhcGguXG4gICAgICAgICAgICBzdGF0ZSA9IG5leHRQYXJlbnRTdGF0ZVxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKG5leHRMZXZlbCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgbGV2ZWwgPSBuZXh0TGV2ZWxcbiAgICAgICAgICAgIHdoaWxlIChsZXZlbHMubGVuZ3RoID4gMCAmJiBsZXZlbCA8IGxldmVsc1tsZXZlbHMubGVuZ3RoIC0gMV0pIHtcbiAgICAgICAgICAgICAgbGV2ZWxzLnBvcCgpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobGV2ZWxzLmxlbmd0aCA9PT0gMCB8fCBsZXZlbCA+IGxldmVsc1tsZXZlbHMubGVuZ3RoIC0gMV0pIHtcbiAgICAgICAgICAgICAgbGV2ZWxzLnB1c2gobGV2ZWwpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBBcnRpY2xlcyAmIFwiRXhwb3PDqSBkZXMgbW90aWZzXCIgYXJlIHRoZSBvbmx5IGRpdmlzaW9ucyB3aXRob3V0IHNlY29uZCB0aXRsZS5cbiAgICAgICAgICAgIGlzTXVsdGlMaW5lc0hlYWRlciA9XG4gICAgICAgICAgICAgIG5hbWVVcHBlci5tYXRjaCgvXkFSVElDTEVTP18vKSA9PT0gbnVsbCAmJlxuICAgICAgICAgICAgICBuYW1lVXBwZXIubWF0Y2goL15FWFBPU0VfREVTX01PVElGUyQvKSA9PT0gbnVsbFxuICAgICAgICAgICAgc3ViZGl2aXNpb25BbGluZWFzSHRtbCA9IFtdXG4gICAgICAgICAgICBzdWJkaXZpc2lvbkFsaW5lYXNUZXh0ID0gW11cbiAgICAgICAgICAgIHN1YmRpdmlzaW9uSGVhZGVyc0h0bWwgPSBbXVxuICAgICAgICAgICAgc3ViZGl2aXNpb25IZWFkZXJzVGV4dCA9IFtdXG4gICAgICAgICAgICBzdWJkaXZpc2lvbnMucHVzaCh7XG4gICAgICAgICAgICAgIGh0bWw6IHtcbiAgICAgICAgICAgICAgICBhbGluZWFzOiBzdWJkaXZpc2lvbkFsaW5lYXNIdG1sLFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHN1YmRpdmlzaW9uSGVhZGVyc0h0bWwsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIGlkOiBcIkRfXCIgKyBuYW1lQ29tcHV0ZWQsXG4gICAgICAgICAgICAgIGxldmVsOiBsZXZlbCArIDEsXG4gICAgICAgICAgICAgIHJlbGF0aXZlTGV2ZWw6IGxldmVscy5sZW5ndGgsXG4gICAgICAgICAgICAgIHRleHQ6IHtcbiAgICAgICAgICAgICAgICBhbGluZWFzOiBzdWJkaXZpc2lvbkFsaW5lYXNUZXh0LFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHN1YmRpdmlzaW9uSGVhZGVyc1RleHQsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH1cbiAgICAgICAgICBsaW5lRWxlbWVudHMgPSBbXVxuICAgICAgICAgIHN0YXRlID0gXCJwYXJhZ3JhcGhDaGlsZFwiXG4gICAgICAgIH1cbiAgICAgICAgYnJlYWtcbiAgICAgIGNhc2UgXCJmaXJzdFN1YkFsaW5lYUVsZW1lbnRcIjpcbiAgICAgICAgc3ViQWxpbmVhRWxlbWVudCA9IGFsaW5lYUVsZW1lbnQhLmNoaWxkcmVuWzBdXG4gICAgICAgIGlmIChzdWJBbGluZWFFbGVtZW50ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAvLyBObyBzdWItYWxpbmVhIGluIGN1cnJlbnQgYWxpbmVhOiBnbyB0byBuZXh0IGFsaW5lYS5cbiAgICAgICAgICBzdGF0ZSA9IFwibmV4dEFsaW5lYUVsZW1lbnRcIlxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHN0YXRlID0gXCJzdWJBbGluZWFFbGVtZW50XCJcbiAgICAgICAgfVxuICAgICAgICBicmVha1xuICAgICAgY2FzZSBcIm5leHRBbGluZWFFbGVtZW50XCI6XG4gICAgICAgIGFsaW5lYUVsZW1lbnQgPSBhbGluZWFFbGVtZW50IS5uZXh0RWxlbWVudFNpYmxpbmdcbiAgICAgICAgaWYgKGFsaW5lYUVsZW1lbnQgPT09IG51bGwpIHtcbiAgICAgICAgICAvLyBUaGUgYm9keUNoaWxkIGhhcyBiZWVuIGZ1bGx5IHBhcnNlZC4gR28gdG8gbmV4dCBib2R5Q2hpbGRcbiAgICAgICAgICBzdGF0ZSA9IFwibmV4dEJvZHlDaGlsZFwiXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc3RhdGUgPSBcImFsaW5lYUVsZW1lbnRcIlxuICAgICAgICB9XG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlIFwibmV4dEJvZHlDaGlsZFwiOlxuICAgICAgICBpZiAoYm9keUNoaWxkLm5leHRFbGVtZW50U2libGluZyA9PT0gbnVsbCkge1xuICAgICAgICAgIC8vIFRoZSBkb2N1bWVudCBoYXMgYmVlbiBmdWxseSBwYXJzZWQuXG4gICAgICAgICAgc3RhdGUgPSBudWxsXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYm9keUNoaWxkID0gYm9keUNoaWxkLm5leHRFbGVtZW50U2libGluZ1xuICAgICAgICAgIGlmIChib2R5Q2hpbGQudGFnTmFtZSA9PT0gXCJESVZcIikge1xuICAgICAgICAgICAgc3RhdGUgPSBcImZpcnN0QWxpbmVhRWxlbWVudFwiXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIDxQLz4gaXMgZm9yIGZvb3Rub3Rlc1xuICAgICAgICAgICAgYXNzZXJ0KFxuICAgICAgICAgICAgICBbXCJCUlwiLCBcIkhSXCIsIFwiUFwiXS5pbmNsdWRlcyhib2R5Q2hpbGQudGFnTmFtZSksXG4gICAgICAgICAgICAgIGBVbmV4cGVjdGVkIHRhZyBuYW1lIFwiJHtib2R5Q2hpbGQudGFnTmFtZX1cIiBmb3IgYm9keSBjaGlsZGAsXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAvLyBTdGF5IGluIHRoZSBzYW1lIHN0YXRlIHRvIGdvIHRvIG5leHQgYm9keUNoaWxkLlxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBicmVha1xuICAgICAgY2FzZSBcIm5leHRQYXJhZ3JhcGhDaGlsZFwiOlxuICAgICAgICBwYXJhZ3JhcGhDaGlsZCA9IHBhcmFncmFwaENoaWxkIS5uZXh0RWxlbWVudFNpYmxpbmdcbiAgICAgICAgaWYgKHBhcmFncmFwaENoaWxkID09PSBudWxsKSB7XG4gICAgICAgICAgLy8gVGhlIHBhcmFncmFwaCBlbGVtZW50IGhhcyBiZWVuIGZ1bGx5IHBhcnNlZC4gR28gdG8gbmV4dCBwYXJlbnQgZWxlbWVudC5cbiAgICAgICAgICBjb25zdCBsaW5lVGV4dCA9IGxpbmVFbGVtZW50cyFcbiAgICAgICAgICAgIC5tYXAoKGVsZW1lbnQpID0+IGVsZW1lbnQudGV4dENvbnRlbnQpXG4gICAgICAgICAgICAuam9pbihcIlwiKVxuICAgICAgICAgICAgLnRyaW0oKVxuICAgICAgICAgIGlmIChsaW5lVGV4dCkge1xuICAgICAgICAgICAgY29uc3QgbGluZUh0bWwgPSBsaW5lRWxlbWVudHMhXG4gICAgICAgICAgICAgIC5tYXAoKGVsZW1lbnQpID0+IGVsZW1lbnQub3V0ZXJIVE1MKVxuICAgICAgICAgICAgICAuam9pbihcIlwiKVxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICBzdWJkaXZpc2lvbkhlYWRlcnNUZXh0IS5sZW5ndGggPT09IDAgfHxcbiAgICAgICAgICAgICAgKGlzTXVsdGlMaW5lc0hlYWRlciAmJiBzdWJkaXZpc2lvbkFsaW5lYXNUZXh0IS5sZW5ndGggPT09IDApXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgc3ViZGl2aXNpb25IZWFkZXJzSHRtbCEucHVzaChsaW5lSHRtbClcbiAgICAgICAgICAgICAgc3ViZGl2aXNpb25IZWFkZXJzVGV4dCEucHVzaChsaW5lVGV4dClcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHN1YmRpdmlzaW9uQWxpbmVhc0h0bWwhLnB1c2gobGluZUh0bWwpXG4gICAgICAgICAgICAgIHN1YmRpdmlzaW9uQWxpbmVhc1RleHQhLnB1c2gobGluZVRleHQpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChpc011bHRpTGluZXNIZWFkZXIgJiYgc3ViZGl2aXNpb25IZWFkZXJzVGV4dCEubGVuZ3RoID49IDIpIHtcbiAgICAgICAgICAgIGlzTXVsdGlMaW5lc0hlYWRlciA9IGZhbHNlXG4gICAgICAgICAgfVxuICAgICAgICAgIGxpbmVFbGVtZW50cyA9IG51bGxcbiAgICAgICAgICBzdGF0ZSA9IG5leHRQYXJlbnRTdGF0ZVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHN0YXRlID0gXCJwYXJhZ3JhcGhDaGlsZFwiXG4gICAgICAgIH1cbiAgICAgICAgYnJlYWtcbiAgICAgIGNhc2UgXCJuZXh0U3ViQWxpbmVhRWxlbWVudFwiOlxuICAgICAgICBzdWJBbGluZWFFbGVtZW50ID0gc3ViQWxpbmVhRWxlbWVudCEubmV4dEVsZW1lbnRTaWJsaW5nXG4gICAgICAgIGlmIChzdWJBbGluZWFFbGVtZW50ID09PSBudWxsKSB7XG4gICAgICAgICAgLy8gVGhlIGFsaW5lYUVsZW1lbnQgaGFzIGJlZW4gZnVsbHkgcGFyc2VkLiBHbyB0byBuZXh0IGFsaW5lYUVsZW1lbnQuXG4gICAgICAgICAgc3RhdGUgPSBcIm5leHRBbGluZWFFbGVtZW50XCJcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzdGF0ZSA9IFwic3ViQWxpbmVhRWxlbWVudFwiXG4gICAgICAgIH1cbiAgICAgICAgYnJlYWtcbiAgICAgIGNhc2UgXCJwYXJhZ3JhcGhDaGlsZFwiOlxuICAgICAgICBzd2l0Y2ggKHBhcmFncmFwaENoaWxkIS50YWdOYW1lKSB7XG4gICAgICAgICAgY2FzZSBcIkFcIjoge1xuICAgICAgICAgICAgbGluZUVsZW1lbnRzIS5wdXNoKHBhcmFncmFwaENoaWxkISlcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgXCJCUlwiOiB7XG4gICAgICAgICAgICBjb25zdCBsaW5lVGV4dCA9IGxpbmVFbGVtZW50cyFcbiAgICAgICAgICAgICAgLm1hcCgoZWxlbWVudCkgPT4gZWxlbWVudC50ZXh0Q29udGVudClcbiAgICAgICAgICAgICAgLmpvaW4oXCJcIilcbiAgICAgICAgICAgICAgLnRyaW0oKVxuICAgICAgICAgICAgaWYgKGxpbmVUZXh0KSB7XG4gICAgICAgICAgICAgIGNvbnN0IGxpbmVIdG1sID0gbGluZUVsZW1lbnRzIVxuICAgICAgICAgICAgICAgIC5tYXAoKGVsZW1lbnQpID0+IGVsZW1lbnQub3V0ZXJIVE1MKVxuICAgICAgICAgICAgICAgIC5qb2luKFwiXCIpXG4gICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBzdWJkaXZpc2lvbkhlYWRlcnNUZXh0IS5sZW5ndGggPT09IDAgfHxcbiAgICAgICAgICAgICAgICAoaXNNdWx0aUxpbmVzSGVhZGVyICYmIHN1YmRpdmlzaW9uQWxpbmVhc1RleHQhLmxlbmd0aCA9PT0gMClcbiAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgc3ViZGl2aXNpb25IZWFkZXJzSHRtbCEucHVzaChsaW5lSHRtbClcbiAgICAgICAgICAgICAgICBzdWJkaXZpc2lvbkhlYWRlcnNUZXh0IS5wdXNoKGxpbmVUZXh0KVxuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHN1YmRpdmlzaW9uQWxpbmVhc0h0bWwhLnB1c2gobGluZUh0bWwpXG4gICAgICAgICAgICAgICAgc3ViZGl2aXNpb25BbGluZWFzVGV4dCEucHVzaChsaW5lVGV4dClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGluZUVsZW1lbnRzID0gW11cbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgXCJERUxcIjoge1xuICAgICAgICAgICAgbGluZUVsZW1lbnRzIS5wdXNoKHBhcmFncmFwaENoaWxkISlcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgXCJJTUdcIjoge1xuICAgICAgICAgICAgbGluZUVsZW1lbnRzIS5wdXNoKHBhcmFncmFwaENoaWxkISlcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgXCJTUEFOXCI6IHtcbiAgICAgICAgICAgIGNvbnN0IGNsYXNzTmFtZSA9IHBhcmFncmFwaENoaWxkIS5nZXRBdHRyaWJ1dGUoXCJjbGFzc1wiKVxuICAgICAgICAgICAgc3dpdGNoIChjbGFzc05hbWUpIHtcbiAgICAgICAgICAgICAgY2FzZSBcImFFbG9pUGFzdGlsbGVcIjoge1xuICAgICAgICAgICAgICAgIC8vIFNraXAgcGFzdGlsbMOpIFNQQU4uXG4gICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjYXNlIFwiYUVsb2lQYXN0aWxsZTBcIjoge1xuICAgICAgICAgICAgICAgIC8vIFNraXAgcGFzdGlsbMOpIFNQQU4uXG4gICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIGxpbmVFbGVtZW50cyEucHVzaChwYXJhZ3JhcGhDaGlsZCEpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIH1cbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgZXJyb3I6IHtcbiAgICAgICAgICAgICAgICBjb2RlOiAtMyxcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiBgVW5leHBlY3RlZCB0YWcgbmFtZSBmb3IgcGFyYWdyYXBoIGNoaWxkOiAke1xuICAgICAgICAgICAgICAgICAgcGFyYWdyYXBoQ2hpbGQhLnRhZ05hbWVcbiAgICAgICAgICAgICAgICB9YCxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgaHRtbCxcbiAgICAgICAgICAgICAgcGFnZSxcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBzdGF0ZSA9IFwibmV4dFBhcmFncmFwaENoaWxkXCJcbiAgICAgICAgYnJlYWtcbiAgICAgIGNhc2UgXCJzdWJBbGluZWFFbGVtZW50XCI6XG4gICAgICAgIHN3aXRjaCAoc3ViQWxpbmVhRWxlbWVudCEudGFnTmFtZSkge1xuICAgICAgICAgIGNhc2UgXCJQXCI6XG4gICAgICAgICAgICBuZXh0UGFyZW50U3RhdGUgPSBcIm5leHRTdWJBbGluZWFFbGVtZW50XCJcbiAgICAgICAgICAgIHBhcmFncmFwaEVsZW1lbnQgPSBzdWJBbGluZWFFbGVtZW50XG4gICAgICAgICAgICBzdGF0ZSA9IFwiZmlyc3RQYXJhZ3JhcGhDaGlsZFwiXG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIGNhc2UgXCJUQUJMRVwiOlxuICAgICAgICAgICAgLy8gVE9ET1xuICAgICAgICAgICAgc3RhdGUgPSBcIm5leHRTdWJBbGluZWFFbGVtZW50XCJcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIGVycm9yOiB7XG4gICAgICAgICAgICAgICAgY29kZTogLTQsXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogYFVuZXhwZWN0ZWQgdGFnIG5hbWUgZm9yIHN1YiBhbGluZWEgZWxlbWVudDogJHtcbiAgICAgICAgICAgICAgICAgIHN1YkFsaW5lYUVsZW1lbnQhLnRhZ05hbWVcbiAgICAgICAgICAgICAgICB9YCxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgaHRtbCxcbiAgICAgICAgICAgICAgcGFnZSxcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBicmVha1xuICAgICAgICBzdGF0ZSA9IFwibmV4dFN1YkFsaW5lYUVsZW1lbnRcIlxuICAgICAgICBicmVha1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgYFVuZXhwZWN0ZWQgc3RhdGU6ICR7c3RhdGV9YFxuICAgIH1cbiAgfVxuXG4gIHdpbmRvdy5jbG9zZSgpIC8vIEZyZWUgbWVtb3J5LlxuXG4gIHJldHVybiB7XG4gICAgZXJyb3I6IG51bGwsXG4gICAgaHRtbCxcbiAgICBwYWdlLFxuICAgIHN1YmRpdmlzaW9ucyxcbiAgICB1cmw6IGFzc2VtYmxlZVVybCxcbiAgfVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmV0cmlldmVUZXh0ZUxvaVBhcnNlZChcbiAgZmV0Y2g6IChcbiAgICB1cmw6IHN0cmluZyB8IFJlcXVlc3QsXG4gICAgaW5pdD86IFJlcXVlc3RJbml0IHwgdW5kZWZpbmVkLFxuICApID0+IFByb21pc2U8UmVzcG9uc2U+LFxuICBhc3NlbWJsZWVVcmw6IHN0cmluZyxcbikge1xuICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKGFzc2VtYmxlZVVybClcbiAgY29uc3QgcGFnZSA9IGF3YWl0IHJlc3BvbnNlLnRleHQoKVxuICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGVycm9yOiB7IGNvZGU6IHJlc3BvbnNlLnN0YXR1cywgbWVzc2FnZTogcmVzcG9uc2Uuc3RhdHVzVGV4dCB9LFxuICAgICAgcGFnZSxcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHBhcnNlVGV4dGVMb2koYXNzZW1ibGVlVXJsLCBwYWdlKVxufVxuIl0sIm1hcHBpbmdzIjoiQUFBQSxPQUFPQSxNQUFNLE1BQU0sUUFBUTtBQUMzQixTQUFTQyxLQUFLLFFBQVEsT0FBTztBQUU3QixPQUFPLFNBQVNDLGFBQWEsQ0FBQ0MsWUFBb0IsRUFBRUMsSUFBWSxFQUFFO0VBQ2hFO0VBQ0EsTUFBTUMsWUFBWSxHQUFHRCxJQUFJLENBQUNFLEtBQUssQ0FBQyxVQUFVLENBQUM7RUFDM0NOLE1BQU0sQ0FBQ08sV0FBVyxDQUFDRixZQUFZLENBQUNHLE1BQU0sRUFBRSxDQUFDLEVBQUVKLElBQUksQ0FBQztFQUNoRCxJQUFJSyxJQUFJLEdBQUdKLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQ0ssSUFBSSxFQUFFO0VBQ2pDVixNQUFNLENBQUNTLElBQUksQ0FBQ0UsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0VBQy9CWCxNQUFNLENBQUNTLElBQUksQ0FBQ0csUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0VBQy9CSCxJQUFJLEdBQUksUUFBT0EsSUFBSSxDQUFDSSxTQUFTLENBQUMsQ0FBQyxFQUFFSixJQUFJLENBQUNELE1BQU0sR0FBRyxDQUFDLENBQUUsU0FBUTs7RUFFMUQ7RUFDQSxNQUFNO0lBQUVNO0VBQU8sQ0FBQyxHQUFHLElBQUliLEtBQUssQ0FBQ1EsSUFBSSxDQUFDO0VBQ2xDLE1BQU07SUFB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
@@ -1,7 +1,6 @@
1
1
  "use strict";
2
2
 
3
3
  require("core-js/modules/es.object.define-property.js");
4
-
5
4
  Object.defineProperty(exports, "__esModule", {
6
5
  value: true
7
6
  });
@@ -29,8 +28,6 @@ Object.defineProperty(exports, "retrieveTexteLoiParsed", {
29
28
  return _documents.retrieveTexteLoiParsed;
30
29
  }
31
30
  });
32
-
33
31
  var _documents = require("./documents");
34
-
35
32
  var _recherche_amendements = require("./recherche_amendements");
36
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3BhcnNlcnMvaW5kZXgudHMiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHsgcGFyc2VUZXh0ZUxvaSwgcmV0cmlldmVUZXh0ZUxvaVBhcnNlZCB9IGZyb20gXCIuL2RvY3VtZW50c1wiXG5leHBvcnQge1xuICBpdGVyUmVjaGVyY2hlQW1lbmRlbWVudHMsXG4gIGl0ZXJSZWNoZXJjaGVSYXdBbWVuZGVtZW50cyxcbn0gZnJvbSBcIi4vcmVjaGVyY2hlX2FtZW5kZW1lbnRzXCJcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQSJ9
33
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3BhcnNlcnMvaW5kZXgudHMiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHsgcGFyc2VUZXh0ZUxvaSwgcmV0cmlldmVUZXh0ZUxvaVBhcnNlZCB9IGZyb20gXCIuL2RvY3VtZW50c1wiXG5leHBvcnQge1xuICBpdGVyUmVjaGVyY2hlQW1lbmRlbWVudHMsXG4gIGl0ZXJSZWNoZXJjaGVSYXdBbWVuZGVtZW50cyxcbn0gZnJvbSBcIi4vcmVjaGVyY2hlX2FtZW5kZW1lbnRzXCJcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFDQSJ9
@@ -1,3 +1,3 @@
1
1
  export { parseTexteLoi, retrieveTexteLoiParsed } from "./documents.mjs";
2
2
  export { iterRechercheAmendements, iterRechercheRawAmendements } from "./recherche_amendements.mjs";
3
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJwYXJzZVRleHRlTG9pIiwicmV0cmlldmVUZXh0ZUxvaVBhcnNlZCIsIml0ZXJSZWNoZXJjaGVBbWVuZGVtZW50cyIsIml0ZXJSZWNoZXJjaGVSYXdBbWVuZGVtZW50cyJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wYXJzZXJzL2luZGV4LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB7IHBhcnNlVGV4dGVMb2ksIHJldHJpZXZlVGV4dGVMb2lQYXJzZWQgfSBmcm9tIFwiLi9kb2N1bWVudHNcIlxuZXhwb3J0IHtcbiAgaXRlclJlY2hlcmNoZUFtZW5kZW1lbnRzLFxuICBpdGVyUmVjaGVyY2hlUmF3QW1lbmRlbWVudHMsXG59IGZyb20gXCIuL3JlY2hlcmNoZV9hbWVuZGVtZW50c1wiXG4iXSwibWFwcGluZ3MiOiJTQUFTQSxhLEVBQWVDLHNCO1NBRXRCQyx3QixFQUNBQywyQiJ9
3
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJwYXJzZVRleHRlTG9pIiwicmV0cmlldmVUZXh0ZUxvaVBhcnNlZCIsIml0ZXJSZWNoZXJjaGVBbWVuZGVtZW50cyIsIml0ZXJSZWNoZXJjaGVSYXdBbWVuZGVtZW50cyJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wYXJzZXJzL2luZGV4LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB7IHBhcnNlVGV4dGVMb2ksIHJldHJpZXZlVGV4dGVMb2lQYXJzZWQgfSBmcm9tIFwiLi9kb2N1bWVudHNcIlxuZXhwb3J0IHtcbiAgaXRlclJlY2hlcmNoZUFtZW5kZW1lbnRzLFxuICBpdGVyUmVjaGVyY2hlUmF3QW1lbmRlbWVudHMsXG59IGZyb20gXCIuL3JlY2hlcmNoZV9hbWVuZGVtZW50c1wiXG4iXSwibWFwcGluZ3MiOiJTQUFTQSxhQUFhLEVBQUVDLHNCQUFzQjtBQUFBLFNBRTVDQyx3QkFBd0IsRUFDeEJDLDJCQUEyQiJ9