@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
@@ -1,66 +1,38 @@
1
1
  "use strict";
2
2
 
3
3
  require("core-js/modules/es.symbol.js");
4
-
5
4
  require("core-js/modules/es.symbol.description.js");
6
-
7
5
  require("core-js/modules/es.symbol.iterator.js");
8
-
9
6
  require("core-js/modules/es.array.iterator.js");
10
-
11
7
  require("core-js/modules/es.string.iterator.js");
12
-
13
8
  require("core-js/modules/web.dom-collections.iterator.js");
14
-
15
9
  require("core-js/modules/es.array.slice.js");
16
-
17
10
  require("core-js/modules/es.function.name.js");
18
-
19
11
  require("core-js/modules/es.array.from.js");
20
-
21
12
  require("core-js/modules/es.regexp.exec.js");
22
-
23
13
  require("core-js/modules/es.object.define-property.js");
24
-
25
14
  Object.defineProperty(exports, "__esModule", {
26
15
  value: true
27
16
  });
28
17
  exports.cleanActeur = cleanActeur;
29
18
  exports.cleanRapporteur = cleanRapporteur;
30
-
31
19
  require("core-js/modules/es.array.is-array.js");
32
-
33
20
  require("core-js/modules/es.array.includes.js");
34
-
35
21
  require("core-js/modules/es.array.sort.js");
36
-
37
22
  require("core-js/modules/es.array.filter.js");
38
-
39
23
  require("core-js/modules/es.object.to-string.js");
40
-
41
24
  require("core-js/modules/es.array.map.js");
42
-
43
25
  require("core-js/modules/es.object.keys.js");
44
-
45
26
  var _assert = _interopRequireDefault(require("assert"));
46
-
47
27
  var _xml = require("./xml");
48
-
49
28
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
50
-
51
29
  function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
52
-
53
30
  function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
54
-
55
31
  function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
56
-
57
32
  function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
58
-
59
33
  function cleanActeur(acteur) {
60
34
  (0, _xml.cleanXmlArtefacts)(acteur);
61
-
62
35
  _assert["default"].strictEqual(acteur.uid["@xsi:type"], "IdActeur_type");
63
-
64
36
  acteur.uid = acteur.uid["#text"];
65
37
  (0, _assert["default"])(acteur.uid);
66
38
  var etatCivil = acteur.etatCivil;
@@ -76,7 +48,6 @@ function cleanActeur(acteur) {
76
48
  }
77
49
  }
78
50
  var profession = acteur.profession;
79
-
80
51
  if (profession !== undefined) {
81
52
  (0, _xml.cleanXmlArtefacts)(profession);
82
53
  var socProcInsee = profession.socProcINSEE;
@@ -85,19 +56,14 @@ function cleanActeur(acteur) {
85
56
  delete profession.socProcINSEE;
86
57
  profession.socProcInsee = socProcInsee;
87
58
  }
88
-
89
59
  var uriHatvp = acteur.uri_hatvp;
90
-
91
60
  if (uriHatvp !== undefined) {
92
61
  acteur.uriHatvp = uriHatvp;
93
62
  delete acteur.uri_hatvp;
94
63
  }
95
-
96
64
  var adresses = acteur.adresses;
97
-
98
65
  if (adresses !== undefined) {
99
66
  adresses = adresses.adresse;
100
-
101
67
  if (adresses === undefined) {
102
68
  delete acteur.adresses;
103
69
  adresses = undefined;
@@ -105,16 +71,12 @@ function cleanActeur(acteur) {
105
71
  acteur.adresses = adresses;
106
72
  } else {
107
73
  _assert["default"].notStrictEqual(adresses, null);
108
-
109
74
  _assert["default"].strictEqual(_typeof(adresses), "object");
110
-
111
75
  acteur.adresses = adresses = [adresses];
112
76
  }
113
-
114
77
  if (adresses !== undefined) {
115
78
  var _iterator = _createForOfIteratorHelper(adresses),
116
- _step;
117
-
79
+ _step;
118
80
  try {
119
81
  for (_iterator.s(); !(_step = _iterator.n()).done;) {
120
82
  var adresse = _step.value;
@@ -123,13 +85,9 @@ function cleanActeur(acteur) {
123
85
  (0, _assert["default"])(["AdresseMail_Type", "AdressePostale_Type", "AdresseSiteWeb_Type", "AdresseTelephonique_Type"].includes(xsiType), "Unexpected \"@xsi:type\": ".concat(xsiType));
124
86
  adresse.xsiType = xsiType;
125
87
  delete adresse["@xsi:type"];
126
-
127
88
  _assert["default"].notStrictEqual(adresse.uid, undefined);
128
-
129
89
  _assert["default"].notStrictEqual(adresse.type, undefined);
130
-
131
90
  _assert["default"].notStrictEqual(adresse.typeLibelle, undefined);
132
-
133
91
  if (xsiType === "AdressePostale_Type") {
134
92
  _assert["default"].strictEqual(adresse.adresseDeRattachement, undefined);
135
93
  }
@@ -141,32 +99,25 @@ function cleanActeur(acteur) {
141
99
  }
142
100
  }
143
101
  }
144
-
145
102
  var mandats = acteur.mandats;
146
-
147
103
  if (mandats !== undefined) {
148
104
  var mandat = mandats.mandat;
149
-
150
105
  if (Array.isArray(mandat)) {
151
106
  mandats = acteur.mandats = mandat;
152
107
  } else if (_typeof(mandat) === "object") {
153
108
  mandats = acteur.mandats = [mandat];
154
109
  }
155
-
156
110
  var _iterator2 = _createForOfIteratorHelper(mandats),
157
- _step2;
158
-
111
+ _step2;
159
112
  try {
160
113
  var _loop = function _loop() {
161
114
  var mandat = _step2.value;
162
115
  (0, _xml.cleanXmlArtefacts)(mandat);
163
116
  var xsiType = mandat["@xsi:type"];
164
-
165
117
  if (xsiType !== undefined) {
166
118
  mandat.xsiType = xsiType;
167
119
  delete mandat["@xsi:type"];
168
120
  }
169
-
170
121
  var infosQualite = mandat.infosQualite;
171
122
  {
172
123
  (0, _xml.cleanXmlArtefacts)(infosQualite);
@@ -175,41 +126,32 @@ function cleanActeur(acteur) {
175
126
  delete mandat.organes;
176
127
  var organesRefs = organes.organeRef;
177
128
  (0, _assert["default"])(organesRefs);
178
-
179
129
  if (!Array.isArray(organesRefs)) {
180
130
  organesRefs = [organesRefs];
181
131
  }
182
-
183
132
  mandat.organesRefs = organesRefs;
184
133
  var suppleant = mandat.suppleants;
185
134
  delete mandat.suppleants;
186
-
187
135
  if (suppleant) {
188
136
  suppleant = suppleant.suppleant;
189
137
  (0, _assert["default"])(suppleant);
190
138
  mandat.suppleant = suppleant;
191
139
  (0, _xml.cleanXmlArtefacts)(suppleant);
192
140
  }
193
-
194
141
  var election = mandat.election;
195
-
196
142
  if (election !== undefined) {
197
143
  (0, _xml.cleanXmlArtefacts)(election);
198
144
  var lieu = election.lieu;
199
145
  (0, _xml.cleanXmlArtefacts)(lieu);
200
146
  }
201
-
202
147
  var mandature = mandat.mandature;
203
-
204
148
  if (mandature !== undefined) {
205
149
  (0, _xml.cleanXmlArtefacts)(mandature);
206
150
  }
151
+ _assert["default"].strictEqual(mandat.chambre, undefined);
207
152
 
208
- _assert["default"].strictEqual(mandat.chambre, undefined); // Replace collaborateurs with an array of collaborateurs.
209
-
210
-
153
+ // Replace collaborateurs with an array of collaborateurs.
211
154
  var collaborateurs = mandat.collaborateurs;
212
-
213
155
  if (collaborateurs !== undefined) {
214
156
  var collaborateursArray = Array.isArray(collaborateurs) ? collaborateurs.filter(function (collaborateur) {
215
157
  return collaborateur !== null;
@@ -217,15 +159,12 @@ function cleanActeur(acteur) {
217
159
  collaborateurs = [];
218
160
  collaborateursArray.map(function (_ref) {
219
161
  var collaborateur = _ref.collaborateur;
220
-
221
162
  if (Array.isArray(collaborateur)) {
222
163
  var _iterator3 = _createForOfIteratorHelper(collaborateur),
223
- _step3;
224
-
164
+ _step3;
225
165
  try {
226
166
  for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
227
167
  var collaborateurItem = _step3.value;
228
-
229
168
  if (collaborateurItem !== null) {
230
169
  collaborateurs.push(collaborateurItem);
231
170
  }
@@ -239,24 +178,19 @@ function cleanActeur(acteur) {
239
178
  collaborateurs.push(collaborateur);
240
179
  }
241
180
  });
242
-
243
181
  if (collaborateurs.length === 0) {
244
182
  delete mandat.collaborateurs;
245
183
  collaborateurs = undefined;
246
184
  } else {
247
185
  mandat.collaborateurs = collaborateurs;
248
186
  }
249
-
250
187
  var _iterator4 = _createForOfIteratorHelper(collaborateurs || []),
251
- _step4;
252
-
188
+ _step4;
253
189
  try {
254
190
  for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {
255
191
  var collaborateur = _step4.value;
256
192
  (0, _xml.cleanXmlArtefacts)(collaborateur);
257
-
258
193
  _assert["default"].strictEqual(collaborateur.dateDebut, undefined);
259
-
260
194
  _assert["default"].strictEqual(collaborateur.dateFin, undefined);
261
195
  }
262
196
  } catch (err) {
@@ -265,49 +199,38 @@ function cleanActeur(acteur) {
265
199
  _iterator4.f();
266
200
  }
267
201
  }
268
-
269
202
  var infosHorsSian = mandat.InfosHorsSIAN;
270
-
271
203
  if (infosHorsSian !== undefined) {
272
204
  (0, _xml.cleanXmlArtefacts)(infosHorsSian);
273
-
274
205
  _assert["default"].strictEqual(infosHorsSian.HATVP_URI, undefined);
275
-
276
206
  _assert["default"].strictEqual(Object.keys(infosHorsSian).length, 0);
277
-
278
207
  delete mandat.InfosHorsSIAN;
279
208
  }
280
209
  };
281
-
282
210
  for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
283
211
  _loop();
284
- } // Sort mandats to ease comparison of different open data files.
212
+ }
285
213
 
214
+ // Sort mandats to ease comparison of different open data files.
286
215
  } catch (err) {
287
216
  _iterator2.e(err);
288
217
  } finally {
289
218
  _iterator2.f();
290
219
  }
291
-
292
220
  mandats.sort(function (a, b) {
293
221
  return a.uid.length === b.uid.length ? a.uid.localeCompare(b.uid) : a.uid.length - b.uid.length;
294
222
  });
295
223
  }
296
-
297
224
  var deports = acteur.deports;
298
-
299
225
  if (deports !== undefined) {
300
226
  var deport = deports.deport;
301
-
302
227
  if (Array.isArray(deport)) {
303
228
  deports = acteur.deports = deport;
304
229
  } else if (_typeof(deport) === "object") {
305
230
  deports = acteur.deports = [deport];
306
231
  }
307
-
308
232
  var _iterator5 = _createForOfIteratorHelper(deports),
309
- _step5;
310
-
233
+ _step5;
311
234
  try {
312
235
  for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {
313
236
  var _deport = _step5.value;
@@ -315,29 +238,26 @@ function cleanActeur(acteur) {
315
238
  var cible = _deport.cible;
316
239
  {
317
240
  (0, _xml.cleanXmlArtefacts)(cible);
318
-
319
241
  _assert["default"].strictEqual(cible.references, undefined);
320
242
  }
321
- } // Sort deports to ease comparison of different open data files.
243
+ }
322
244
 
245
+ // Sort deports to ease comparison of different open data files.
323
246
  } catch (err) {
324
247
  _iterator5.e(err);
325
248
  } finally {
326
249
  _iterator5.f();
327
250
  }
328
-
329
251
  deports.sort(function (a, b) {
330
252
  return a.uid.length === b.uid.length ? a.uid.localeCompare(b.uid) : a.uid.length - b.uid.length;
331
253
  });
332
254
  }
333
255
  }
334
-
335
256
  function cleanRapporteur(rapporteur) {
336
257
  var etudePlfRef = rapporteur.etudePLFRef;
337
-
338
258
  if (rapporteur.etudePLFRef !== undefined) {
339
259
  delete rapporteur.etudePLFRef;
340
260
  rapporteur.etudePlfRef = etudePlfRef;
341
261
  }
342
262
  }
343
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjbGVhbkFjdGV1ciIsImFjdGV1ciIsImNsZWFuWG1sQXJ0ZWZhY3RzIiwiYXNzZXJ0Iiwic3RyaWN0RXF1YWwiLCJ1aWQiLCJldGF0Q2l2aWwiLCJpZGVudCIsImluZm9OYWlzc2FuY2UiLCJwcm9mZXNzaW9uIiwidW5kZWZpbmVkIiwic29jUHJvY0luc2VlIiwic29jUHJvY0lOU0VFIiwidXJpSGF0dnAiLCJ1cmlfaGF0dnAiLCJhZHJlc3NlcyIsImFkcmVzc2UiLCJBcnJheSIsImlzQXJyYXkiLCJub3RTdHJpY3RFcXVhbCIsInhzaVR5cGUiLCJpbmNsdWRlcyIsInR5cGUiLCJ0eXBlTGliZWxsZSIsImFkcmVzc2VEZVJhdHRhY2hlbWVudCIsIm1hbmRhdHMiLCJtYW5kYXQiLCJpbmZvc1F1YWxpdGUiLCJvcmdhbmVzIiwib3JnYW5lc1JlZnMiLCJvcmdhbmVSZWYiLCJzdXBwbGVhbnQiLCJzdXBwbGVhbnRzIiwiZWxlY3Rpb24iLCJsaWV1IiwibWFuZGF0dXJlIiwiY2hhbWJyZSIsImNvbGxhYm9yYXRldXJzIiwiY29sbGFib3JhdGV1cnNBcnJheSIsImZpbHRlciIsImNvbGxhYm9yYXRldXIiLCJtYXAiLCJjb2xsYWJvcmF0ZXVySXRlbSIsInB1c2giLCJsZW5ndGgiLCJkYXRlRGVidXQiLCJkYXRlRmluIiwiaW5mb3NIb3JzU2lhbiIsIkluZm9zSG9yc1NJQU4iLCJIQVRWUF9VUkkiLCJPYmplY3QiLCJrZXlzIiwic29ydCIsImEiLCJiIiwibG9jYWxlQ29tcGFyZSIsImRlcG9ydHMiLCJkZXBvcnQiLCJjaWJsZSIsInJlZmVyZW5jZXMiLCJjbGVhblJhcHBvcnRldXIiLCJyYXBwb3J0ZXVyIiwiZXR1ZGVQbGZSZWYiLCJldHVkZVBMRlJlZiJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jbGVhbmVycy9hY3RldXJzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhc3NlcnQgZnJvbSBcImFzc2VydFwiXG5cbmltcG9ydCB7IGNsZWFuWG1sQXJ0ZWZhY3RzIH0gZnJvbSBcIi4veG1sXCJcblxuZXhwb3J0IGZ1bmN0aW9uIGNsZWFuQWN0ZXVyKGFjdGV1cjogYW55KTogdm9pZCB7XG4gIGNsZWFuWG1sQXJ0ZWZhY3RzKGFjdGV1cilcblxuICBhc3NlcnQuc3RyaWN0RXF1YWwoYWN0ZXVyLnVpZFtcIkB4c2k6dHlwZVwiXSwgXCJJZEFjdGV1cl90eXBlXCIpXG4gIGFjdGV1ci51aWQgPSBhY3RldXIudWlkW1wiI3RleHRcIl1cbiAgYXNzZXJ0KGFjdGV1ci51aWQpXG5cbiAgY29uc3QgZXRhdENpdmlsID0gYWN0ZXVyLmV0YXRDaXZpbFxuICB7XG4gICAgY2xlYW5YbWxBcnRlZmFjdHMoZXRhdENpdmlsKVxuXG4gICAgY29uc3QgaWRlbnQgPSBldGF0Q2l2aWwuaWRlbnRcbiAgICB7XG4gICAgICBjbGVhblhtbEFydGVmYWN0cyhpZGVudClcblxuICAgICAgY29uc3QgaW5mb05haXNzYW5jZSA9IGV0YXRDaXZpbC5pbmZvTmFpc3NhbmNlXG4gICAgICB7XG4gICAgICAgIGNsZWFuWG1sQXJ0ZWZhY3RzKGluZm9OYWlzc2FuY2UpXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY29uc3QgcHJvZmVzc2lvbiA9IGFjdGV1ci5wcm9mZXNzaW9uXG4gIGlmIChwcm9mZXNzaW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICBjbGVhblhtbEFydGVmYWN0cyhwcm9mZXNzaW9uKVxuXG4gICAgY29uc3Qgc29jUHJvY0luc2VlID0gcHJvZmVzc2lvbi5zb2NQcm9jSU5TRUVcbiAgICBhc3NlcnQoc29jUHJvY0luc2VlKVxuICAgIGNsZWFuWG1sQXJ0ZWZhY3RzKHNvY1Byb2NJbnNlZSlcbiAgICBkZWxldGUgcHJvZmVzc2lvbi5zb2NQcm9jSU5TRUVcbiAgICBwcm9mZXNzaW9uLnNvY1Byb2NJbnNlZSA9IHNvY1Byb2NJbnNlZVxuICB9XG5cbiAgY29uc3QgdXJpSGF0dnAgPSBhY3RldXIudXJpX2hhdHZwXG4gIGlmICh1cmlIYXR2cCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgYWN0ZXVyLnVyaUhhdHZwID0gdXJpSGF0dnBcbiAgICBkZWxldGUgYWN0ZXVyLnVyaV9oYXR2cFxuICB9XG5cbiAgbGV0IGFkcmVzc2VzID0gYWN0ZXVyLmFkcmVzc2VzXG4gIGlmIChhZHJlc3NlcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgYWRyZXNzZXMgPSBhZHJlc3Nlcy5hZHJlc3NlXG4gICAgaWYgKGFkcmVzc2VzID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGRlbGV0ZSBhY3RldXIuYWRyZXNzZXNcbiAgICAgIGFkcmVzc2VzID0gdW5kZWZpbmVkXG4gICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGFkcmVzc2VzKSkge1xuICAgICAgYWN0ZXVyLmFkcmVzc2VzID0gYWRyZXNzZXNcbiAgICB9IGVsc2Uge1xuICAgICAgYXNzZXJ0Lm5vdFN0cmljdEVxdWFsKGFkcmVzc2VzLCBudWxsKVxuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHR5cGVvZiBhZHJlc3NlcywgXCJvYmplY3RcIilcbiAgICAgIGFjdGV1ci5hZHJlc3NlcyA9IGFkcmVzc2VzID0gW2FkcmVzc2VzXVxuICAgIH1cbiAgICBpZiAoYWRyZXNzZXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgZm9yIChjb25zdCBhZHJlc3NlIG9mIGFkcmVzc2VzKSB7XG4gICAgICAgIGNsZWFuWG1sQXJ0ZWZhY3RzKGFkcmVzc2UpXG5cbiAgICAgICAgY29uc3QgeHNpVHlwZSA9IGFkcmVzc2VbXCJAeHNpOnR5cGVcIl1cbiAgICAgICAgYXNzZXJ0KFxuICAgICAgICAgIFtcbiAgICAgICAgICAgIFwiQWRyZXNzZU1haWxfVHlwZVwiLFxuICAgICAgICAgICAgXCJBZHJlc3NlUG9zdGFsZV9UeXBlXCIsXG4gICAgICAgICAgICBcIkFkcmVzc2VTaXRlV2ViX1R5cGVcIixcbiAgICAgICAgICAgIFwiQWRyZXNzZVRlbGVwaG9uaXF1ZV9UeXBlXCIsXG4gICAgICAgICAgXS5pbmNsdWRlcyh4c2lUeXBlKSxcbiAgICAgICAgICBgVW5leHBlY3RlZCBcIkB4c2k6dHlwZVwiOiAke3hzaVR5cGV9YCxcbiAgICAgICAgKVxuICAgICAgICBhZHJlc3NlLnhzaVR5cGUgPSB4c2lUeXBlXG4gICAgICAgIGRlbGV0ZSBhZHJlc3NlW1wiQHhzaTp0eXBlXCJdXG5cbiAgICAgICAgYXNzZXJ0Lm5vdFN0cmljdEVxdWFsKGFkcmVzc2UudWlkLCB1bmRlZmluZWQpXG4gICAgICAgIGFzc2VydC5ub3RTdHJpY3RFcXVhbChhZHJlc3NlLnR5cGUsIHVuZGVmaW5lZClcbiAgICAgICAgYXNzZXJ0Lm5vdFN0cmljdEVxdWFsKGFkcmVzc2UudHlwZUxpYmVsbGUsIHVuZGVmaW5lZClcblxuICAgICAgICBpZiAoeHNpVHlwZSA9PT0gXCJBZHJlc3NlUG9zdGFsZV9UeXBlXCIpIHtcbiAgICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoYWRyZXNzZS5hZHJlc3NlRGVSYXR0YWNoZW1lbnQsIHVuZGVmaW5lZClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGxldCBtYW5kYXRzID0gYWN0ZXVyLm1hbmRhdHNcbiAgaWYgKG1hbmRhdHMgIT09IHVuZGVmaW5lZCkge1xuICAgIGxldCBtYW5kYXQgPSBtYW5kYXRzLm1hbmRhdFxuICAgIGlmIChBcnJheS5pc0FycmF5KG1hbmRhdCkpIHtcbiAgICAgIG1hbmRhdHMgPSBhY3RldXIubWFuZGF0cyA9IG1hbmRhdFxuICAgIH0gZWxzZSBpZiAodHlwZW9mIG1hbmRhdCA9PT0gXCJvYmplY3RcIikge1xuICAgICAgbWFuZGF0cyA9IGFjdGV1ci5tYW5kYXRzID0gW21hbmRhdF1cbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IG1hbmRhdCBvZiBtYW5kYXRzKSB7XG4gICAgICBjbGVhblhtbEFydGVmYWN0cyhtYW5kYXQpXG5cbiAgICAgIGNvbnN0IHhzaVR5cGUgPSBtYW5kYXRbXCJAeHNpOnR5cGVcIl1cbiAgICAgIGlmICh4c2lUeXBlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgbWFuZGF0LnhzaVR5cGUgPSB4c2lUeXBlXG4gICAgICAgIGRlbGV0ZSBtYW5kYXRbXCJAeHNpOnR5cGVcIl1cbiAgICAgIH1cblxuICAgICAgY29uc3QgaW5mb3NRdWFsaXRlID0gbWFuZGF0LmluZm9zUXVhbGl0ZVxuICAgICAge1xuICAgICAgICBjbGVhblhtbEFydGVmYWN0cyhpbmZvc1F1YWxpdGUpXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG9yZ2FuZXMgPSBtYW5kYXQub3JnYW5lc1xuICAgICAgZGVsZXRlIG1hbmRhdC5vcmdhbmVzXG4gICAgICBsZXQgb3JnYW5lc1JlZnMgPSBvcmdhbmVzLm9yZ2FuZVJlZlxuICAgICAgYXNzZXJ0KG9yZ2FuZXNSZWZzKVxuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KG9yZ2FuZXNSZWZzKSkge1xuICAgICAgICBvcmdhbmVzUmVmcyA9IFtvcmdhbmVzUmVmc11cbiAgICAgIH1cbiAgICAgIG1hbmRhdC5vcmdhbmVzUmVmcyA9IG9yZ2FuZXNSZWZzXG5cbiAgICAgIGxldCBzdXBwbGVhbnQgPSBtYW5kYXQuc3VwcGxlYW50c1xuICAgICAgZGVsZXRlIG1hbmRhdC5zdXBwbGVhbnRzXG4gICAgICBpZiAoc3VwcGxlYW50KSB7XG4gICAgICAgIHN1cHBsZWFudCA9IHN1cHBsZWFudC5zdXBwbGVhbnRcbiAgICAgICAgYXNzZXJ0KHN1cHBsZWFudClcbiAgICAgICAgbWFuZGF0LnN1cHBsZWFudCA9IHN1cHBsZWFudFxuXG4gICAgICAgIGNsZWFuWG1sQXJ0ZWZhY3RzKHN1cHBsZWFudClcbiAgICAgIH1cblxuICAgICAgY29uc3QgZWxlY3Rpb24gPSBtYW5kYXQuZWxlY3Rpb25cbiAgICAgIGlmIChlbGVjdGlvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNsZWFuWG1sQXJ0ZWZhY3RzKGVsZWN0aW9uKVxuXG4gICAgICAgIGNvbnN0IGxpZXUgPSBlbGVjdGlvbi5saWV1XG4gICAgICAgIGNsZWFuWG1sQXJ0ZWZhY3RzKGxpZXUpXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG1hbmRhdHVyZSA9IG1hbmRhdC5tYW5kYXR1cmVcbiAgICAgIGlmIChtYW5kYXR1cmUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjbGVhblhtbEFydGVmYWN0cyhtYW5kYXR1cmUpXG4gICAgICB9XG5cbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChtYW5kYXQuY2hhbWJyZSwgdW5kZWZpbmVkKVxuXG4gICAgICAvLyBSZXBsYWNlIGNvbGxhYm9yYXRldXJzIHdpdGggYW4gYXJyYXkgb2YgY29sbGFib3JhdGV1cnMuXG4gICAgICBsZXQgY29sbGFib3JhdGV1cnMgPSBtYW5kYXQuY29sbGFib3JhdGV1cnNcbiAgICAgIGlmIChjb2xsYWJvcmF0ZXVycyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnN0IGNvbGxhYm9yYXRldXJzQXJyYXkgPSBBcnJheS5pc0FycmF5KGNvbGxhYm9yYXRldXJzKVxuICAgICAgICAgID8gY29sbGFib3JhdGV1cnMuZmlsdGVyKChjb2xsYWJvcmF0ZXVyKSA9PiBjb2xsYWJvcmF0ZXVyICE9PSBudWxsKVxuICAgICAgICAgIDogW2NvbGxhYm9yYXRldXJzXVxuICAgICAgICBjb2xsYWJvcmF0ZXVycyA9IFtdXG4gICAgICAgIGNvbGxhYm9yYXRldXJzQXJyYXkubWFwKCh7IGNvbGxhYm9yYXRldXIgfSkgPT4ge1xuICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGNvbGxhYm9yYXRldXIpKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGNvbGxhYm9yYXRldXJJdGVtIG9mIGNvbGxhYm9yYXRldXIpIHtcbiAgICAgICAgICAgICAgaWYgKGNvbGxhYm9yYXRldXJJdGVtICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgY29sbGFib3JhdGV1cnMucHVzaChjb2xsYWJvcmF0ZXVySXRlbSlcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSBpZiAoY29sbGFib3JhdGV1cikge1xuICAgICAgICAgICAgY29sbGFib3JhdGV1cnMucHVzaChjb2xsYWJvcmF0ZXVyKVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgICAgaWYgKGNvbGxhYm9yYXRldXJzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIGRlbGV0ZSBtYW5kYXQuY29sbGFib3JhdGV1cnNcbiAgICAgICAgICBjb2xsYWJvcmF0ZXVycyA9IHVuZGVmaW5lZFxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG1hbmRhdC5jb2xsYWJvcmF0ZXVycyA9IGNvbGxhYm9yYXRldXJzXG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGNvbnN0IGNvbGxhYm9yYXRldXIgb2YgY29sbGFib3JhdGV1cnMgfHwgW10pIHtcbiAgICAgICAgICBjbGVhblhtbEFydGVmYWN0cyhjb2xsYWJvcmF0ZXVyKVxuXG4gICAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGNvbGxhYm9yYXRldXIuZGF0ZURlYnV0LCB1bmRlZmluZWQpXG4gICAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGNvbGxhYm9yYXRldXIuZGF0ZUZpbiwgdW5kZWZpbmVkKVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGluZm9zSG9yc1NpYW4gPSBtYW5kYXQuSW5mb3NIb3JzU0lBTlxuICAgICAgaWYgKGluZm9zSG9yc1NpYW4gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjbGVhblhtbEFydGVmYWN0cyhpbmZvc0hvcnNTaWFuKVxuXG4gICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChpbmZvc0hvcnNTaWFuLkhBVFZQX1VSSSwgdW5kZWZpbmVkKVxuICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoT2JqZWN0LmtleXMoaW5mb3NIb3JzU2lhbikubGVuZ3RoLCAwKVxuICAgICAgICBkZWxldGUgbWFuZGF0LkluZm9zSG9yc1NJQU5cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBTb3J0IG1hbmRhdHMgdG8gZWFzZSBjb21wYXJpc29uIG9mIGRpZmZlcmVudCBvcGVuIGRhdGEgZmlsZXMuXG4gICAgbWFuZGF0cy5zb3J0KChhOiB7IHVpZDogc3RyaW5nIH0sIGI6IHsgdWlkOiBzdHJpbmcgfSkgPT5cbiAgICAgIGEudWlkLmxlbmd0aCA9PT0gYi51aWQubGVuZ3RoXG4gICAgICAgID8gYS51aWQubG9jYWxlQ29tcGFyZShiLnVpZClcbiAgICAgICAgOiBhLnVpZC5sZW5ndGggLSBiLnVpZC5sZW5ndGgsXG4gICAgKVxuICB9XG5cbiAgbGV0IGRlcG9ydHMgPSBhY3RldXIuZGVwb3J0c1xuICBpZiAoZGVwb3J0cyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgbGV0IGRlcG9ydCA9IGRlcG9ydHMuZGVwb3J0XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoZGVwb3J0KSkge1xuICAgICAgZGVwb3J0cyA9IGFjdGV1ci5kZXBvcnRzID0gZGVwb3J0XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgZGVwb3J0ID09PSBcIm9iamVjdFwiKSB7XG4gICAgICBkZXBvcnRzID0gYWN0ZXVyLmRlcG9ydHMgPSBbZGVwb3J0XVxuICAgIH1cblxuICAgIGZvciAoY29uc3QgZGVwb3J0IG9mIGRlcG9ydHMpIHtcbiAgICAgIGNsZWFuWG1sQXJ0ZWZhY3RzKGRlcG9ydClcblxuICAgICAgY29uc3QgY2libGUgPSBkZXBvcnQuY2libGVcbiAgICAgIHtcbiAgICAgICAgY2xlYW5YbWxBcnRlZmFjdHMoY2libGUpXG5cbiAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGNpYmxlLnJlZmVyZW5jZXMsIHVuZGVmaW5lZClcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBTb3J0IGRlcG9ydHMgdG8gZWFzZSBjb21wYXJpc29uIG9mIGRpZmZlcmVudCBvcGVuIGRhdGEgZmlsZXMuXG4gICAgZGVwb3J0cy5zb3J0KChhOiB7IHVpZDogc3RyaW5nIH0sIGI6IHsgdWlkOiBzdHJpbmcgfSkgPT5cbiAgICAgIGEudWlkLmxlbmd0aCA9PT0gYi51aWQubGVuZ3RoXG4gICAgICAgID8gYS51aWQubG9jYWxlQ29tcGFyZShiLnVpZClcbiAgICAgICAgOiBhLnVpZC5sZW5ndGggLSBiLnVpZC5sZW5ndGgsXG4gICAgKVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjbGVhblJhcHBvcnRldXIocmFwcG9ydGV1cjogYW55KSB7XG4gIGNvbnN0IGV0dWRlUGxmUmVmID0gcmFwcG9ydGV1ci5ldHVkZVBMRlJlZlxuICBpZiAocmFwcG9ydGV1ci5ldHVkZVBMRlJlZiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgZGVsZXRlIHJhcHBvcnRldXIuZXR1ZGVQTEZSZWZcbiAgICByYXBwb3J0ZXVyLmV0dWRlUGxmUmVmID0gZXR1ZGVQbGZSZWZcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBOztBQUVBOzs7Ozs7Ozs7Ozs7QUFFTyxTQUFTQSxXQUFULENBQXFCQyxNQUFyQixFQUF3QztFQUM3QyxJQUFBQyxzQkFBQSxFQUFrQkQsTUFBbEI7O0VBRUFFLGtCQUFBLENBQU9DLFdBQVAsQ0FBbUJILE1BQU0sQ0FBQ0ksR0FBUCxDQUFXLFdBQVgsQ0FBbkIsRUFBNEMsZUFBNUM7O0VBQ0FKLE1BQU0sQ0FBQ0ksR0FBUCxHQUFhSixNQUFNLENBQUNJLEdBQVAsQ0FBVyxPQUFYLENBQWI7RUFDQSxJQUFBRixrQkFBQSxFQUFPRixNQUFNLENBQUNJLEdBQWQ7RUFFQSxJQUFNQyxTQUFTLEdBQUdMLE1BQU0sQ0FBQ0ssU0FBekI7RUFDQTtJQUNFLElBQUFKLHNCQUFBLEVBQWtCSSxTQUFsQjtJQUVBLElBQU1DLEtBQUssR0FBR0QsU0FBUyxDQUFDQyxLQUF4QjtJQUNBO01BQ0UsSUFBQUwsc0JBQUEsRUFBa0JLLEtBQWxCO01BRUEsSUFBTUMsYUFBYSxHQUFHRixTQUFTLENBQUNFLGFBQWhDO01BQ0E7UUFDRSxJQUFBTixzQkFBQSxFQUFrQk0sYUFBbEI7TUFDRDtJQUNGO0VBQ0Y7RUFFRCxJQUFNQyxVQUFVLEdBQUdSLE1BQU0sQ0FBQ1EsVUFBMUI7O0VBQ0EsSUFBSUEs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
263
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjbGVhbkFjdGV1ciIsImFjdGV1ciIsImNsZWFuWG1sQXJ0ZWZhY3RzIiwiYXNzZXJ0Iiwic3RyaWN0RXF1YWwiLCJ1aWQiLCJldGF0Q2l2aWwiLCJpZGVudCIsImluZm9OYWlzc2FuY2UiLCJwcm9mZXNzaW9uIiwidW5kZWZpbmVkIiwic29jUHJvY0luc2VlIiwic29jUHJvY0lOU0VFIiwidXJpSGF0dnAiLCJ1cmlfaGF0dnAiLCJhZHJlc3NlcyIsImFkcmVzc2UiLCJBcnJheSIsImlzQXJyYXkiLCJub3RTdHJpY3RFcXVhbCIsInhzaVR5cGUiLCJpbmNsdWRlcyIsInR5cGUiLCJ0eXBlTGliZWxsZSIsImFkcmVzc2VEZVJhdHRhY2hlbWVudCIsIm1hbmRhdHMiLCJtYW5kYXQiLCJpbmZvc1F1YWxpdGUiLCJvcmdhbmVzIiwib3JnYW5lc1JlZnMiLCJvcmdhbmVSZWYiLCJzdXBwbGVhbnQiLCJzdXBwbGVhbnRzIiwiZWxlY3Rpb24iLCJsaWV1IiwibWFuZGF0dXJlIiwiY2hhbWJyZSIsImNvbGxhYm9yYXRldXJzIiwiY29sbGFib3JhdGV1cnNBcnJheSIsImZpbHRlciIsImNvbGxhYm9yYXRldXIiLCJtYXAiLCJjb2xsYWJvcmF0ZXVySXRlbSIsInB1c2giLCJsZW5ndGgiLCJkYXRlRGVidXQiLCJkYXRlRmluIiwiaW5mb3NIb3JzU2lhbiIsIkluZm9zSG9yc1NJQU4iLCJIQVRWUF9VUkkiLCJPYmplY3QiLCJrZXlzIiwic29ydCIsImEiLCJiIiwibG9jYWxlQ29tcGFyZSIsImRlcG9ydHMiLCJkZXBvcnQiLCJjaWJsZSIsInJlZmVyZW5jZXMiLCJjbGVhblJhcHBvcnRldXIiLCJyYXBwb3J0ZXVyIiwiZXR1ZGVQbGZSZWYiLCJldHVkZVBMRlJlZiJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jbGVhbmVycy9hY3RldXJzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhc3NlcnQgZnJvbSBcImFzc2VydFwiXG5cbmltcG9ydCB7IGNsZWFuWG1sQXJ0ZWZhY3RzIH0gZnJvbSBcIi4veG1sXCJcblxuZXhwb3J0IGZ1bmN0aW9uIGNsZWFuQWN0ZXVyKGFjdGV1cjogYW55KTogdm9pZCB7XG4gIGNsZWFuWG1sQXJ0ZWZhY3RzKGFjdGV1cilcblxuICBhc3NlcnQuc3RyaWN0RXF1YWwoYWN0ZXVyLnVpZFtcIkB4c2k6dHlwZVwiXSwgXCJJZEFjdGV1cl90eXBlXCIpXG4gIGFjdGV1ci51aWQgPSBhY3RldXIudWlkW1wiI3RleHRcIl1cbiAgYXNzZXJ0KGFjdGV1ci51aWQpXG5cbiAgY29uc3QgZXRhdENpdmlsID0gYWN0ZXVyLmV0YXRDaXZpbFxuICB7XG4gICAgY2xlYW5YbWxBcnRlZmFjdHMoZXRhdENpdmlsKVxuXG4gICAgY29uc3QgaWRlbnQgPSBldGF0Q2l2aWwuaWRlbnRcbiAgICB7XG4gICAgICBjbGVhblhtbEFydGVmYWN0cyhpZGVudClcblxuICAgICAgY29uc3QgaW5mb05haXNzYW5jZSA9IGV0YXRDaXZpbC5pbmZvTmFpc3NhbmNlXG4gICAgICB7XG4gICAgICAgIGNsZWFuWG1sQXJ0ZWZhY3RzKGluZm9OYWlzc2FuY2UpXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY29uc3QgcHJvZmVzc2lvbiA9IGFjdGV1ci5wcm9mZXNzaW9uXG4gIGlmIChwcm9mZXNzaW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICBjbGVhblhtbEFydGVmYWN0cyhwcm9mZXNzaW9uKVxuXG4gICAgY29uc3Qgc29jUHJvY0luc2VlID0gcHJvZmVzc2lvbi5zb2NQcm9jSU5TRUVcbiAgICBhc3NlcnQoc29jUHJvY0luc2VlKVxuICAgIGNsZWFuWG1sQXJ0ZWZhY3RzKHNvY1Byb2NJbnNlZSlcbiAgICBkZWxldGUgcHJvZmVzc2lvbi5zb2NQcm9jSU5TRUVcbiAgICBwcm9mZXNzaW9uLnNvY1Byb2NJbnNlZSA9IHNvY1Byb2NJbnNlZVxuICB9XG5cbiAgY29uc3QgdXJpSGF0dnAgPSBhY3RldXIudXJpX2hhdHZwXG4gIGlmICh1cmlIYXR2cCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgYWN0ZXVyLnVyaUhhdHZwID0gdXJpSGF0dnBcbiAgICBkZWxldGUgYWN0ZXVyLnVyaV9oYXR2cFxuICB9XG5cbiAgbGV0IGFkcmVzc2VzID0gYWN0ZXVyLmFkcmVzc2VzXG4gIGlmIChhZHJlc3NlcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgYWRyZXNzZXMgPSBhZHJlc3Nlcy5hZHJlc3NlXG4gICAgaWYgKGFkcmVzc2VzID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGRlbGV0ZSBhY3RldXIuYWRyZXNzZXNcbiAgICAgIGFkcmVzc2VzID0gdW5kZWZpbmVkXG4gICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGFkcmVzc2VzKSkge1xuICAgICAgYWN0ZXVyLmFkcmVzc2VzID0gYWRyZXNzZXNcbiAgICB9IGVsc2Uge1xuICAgICAgYXNzZXJ0Lm5vdFN0cmljdEVxdWFsKGFkcmVzc2VzLCBudWxsKVxuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHR5cGVvZiBhZHJlc3NlcywgXCJvYmplY3RcIilcbiAgICAgIGFjdGV1ci5hZHJlc3NlcyA9IGFkcmVzc2VzID0gW2FkcmVzc2VzXVxuICAgIH1cbiAgICBpZiAoYWRyZXNzZXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgZm9yIChjb25zdCBhZHJlc3NlIG9mIGFkcmVzc2VzKSB7XG4gICAgICAgIGNsZWFuWG1sQXJ0ZWZhY3RzKGFkcmVzc2UpXG5cbiAgICAgICAgY29uc3QgeHNpVHlwZSA9IGFkcmVzc2VbXCJAeHNpOnR5cGVcIl1cbiAgICAgICAgYXNzZXJ0KFxuICAgICAgICAgIFtcbiAgICAgICAgICAgIFwiQWRyZXNzZU1haWxfVHlwZVwiLFxuICAgICAgICAgICAgXCJBZHJlc3NlUG9zdGFsZV9UeXBlXCIsXG4gICAgICAgICAgICBcIkFkcmVzc2VTaXRlV2ViX1R5cGVcIixcbiAgICAgICAgICAgIFwiQWRyZXNzZVRlbGVwaG9uaXF1ZV9UeXBlXCIsXG4gICAgICAgICAgXS5pbmNsdWRlcyh4c2lUeXBlKSxcbiAgICAgICAgICBgVW5leHBlY3RlZCBcIkB4c2k6dHlwZVwiOiAke3hzaVR5cGV9YCxcbiAgICAgICAgKVxuICAgICAgICBhZHJlc3NlLnhzaVR5cGUgPSB4c2lUeXBlXG4gICAgICAgIGRlbGV0ZSBhZHJlc3NlW1wiQHhzaTp0eXBlXCJdXG5cbiAgICAgICAgYXNzZXJ0Lm5vdFN0cmljdEVxdWFsKGFkcmVzc2UudWlkLCB1bmRlZmluZWQpXG4gICAgICAgIGFzc2VydC5ub3RTdHJpY3RFcXVhbChhZHJlc3NlLnR5cGUsIHVuZGVmaW5lZClcbiAgICAgICAgYXNzZXJ0Lm5vdFN0cmljdEVxdWFsKGFkcmVzc2UudHlwZUxpYmVsbGUsIHVuZGVmaW5lZClcblxuICAgICAgICBpZiAoeHNpVHlwZSA9PT0gXCJBZHJlc3NlUG9zdGFsZV9UeXBlXCIpIHtcbiAgICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoYWRyZXNzZS5hZHJlc3NlRGVSYXR0YWNoZW1lbnQsIHVuZGVmaW5lZClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGxldCBtYW5kYXRzID0gYWN0ZXVyLm1hbmRhdHNcbiAgaWYgKG1hbmRhdHMgIT09IHVuZGVmaW5lZCkge1xuICAgIGxldCBtYW5kYXQgPSBtYW5kYXRzLm1hbmRhdFxuICAgIGlmIChBcnJheS5pc0FycmF5KG1hbmRhdCkpIHtcbiAgICAgIG1hbmRhdHMgPSBhY3RldXIubWFuZGF0cyA9IG1hbmRhdFxuICAgIH0gZWxzZSBpZiAodHlwZW9mIG1hbmRhdCA9PT0gXCJvYmplY3RcIikge1xuICAgICAgbWFuZGF0cyA9IGFjdGV1ci5tYW5kYXRzID0gW21hbmRhdF1cbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IG1hbmRhdCBvZiBtYW5kYXRzKSB7XG4gICAgICBjbGVhblhtbEFydGVmYWN0cyhtYW5kYXQpXG5cbiAgICAgIGNvbnN0IHhzaVR5cGUgPSBtYW5kYXRbXCJAeHNpOnR5cGVcIl1cbiAgICAgIGlmICh4c2lUeXBlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgbWFuZGF0LnhzaVR5cGUgPSB4c2lUeXBlXG4gICAgICAgIGRlbGV0ZSBtYW5kYXRbXCJAeHNpOnR5cGVcIl1cbiAgICAgIH1cblxuICAgICAgY29uc3QgaW5mb3NRdWFsaXRlID0gbWFuZGF0LmluZm9zUXVhbGl0ZVxuICAgICAge1xuICAgICAgICBjbGVhblhtbEFydGVmYWN0cyhpbmZvc1F1YWxpdGUpXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG9yZ2FuZXMgPSBtYW5kYXQub3JnYW5lc1xuICAgICAgZGVsZXRlIG1hbmRhdC5vcmdhbmVzXG4gICAgICBsZXQgb3JnYW5lc1JlZnMgPSBvcmdhbmVzLm9yZ2FuZVJlZlxuICAgICAgYXNzZXJ0KG9yZ2FuZXNSZWZzKVxuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KG9yZ2FuZXNSZWZzKSkge1xuICAgICAgICBvcmdhbmVzUmVmcyA9IFtvcmdhbmVzUmVmc11cbiAgICAgIH1cbiAgICAgIG1hbmRhdC5vcmdhbmVzUmVmcyA9IG9yZ2FuZXNSZWZzXG5cbiAgICAgIGxldCBzdXBwbGVhbnQgPSBtYW5kYXQuc3VwcGxlYW50c1xuICAgICAgZGVsZXRlIG1hbmRhdC5zdXBwbGVhbnRzXG4gICAgICBpZiAoc3VwcGxlYW50KSB7XG4gICAgICAgIHN1cHBsZWFudCA9IHN1cHBsZWFudC5zdXBwbGVhbnRcbiAgICAgICAgYXNzZXJ0KHN1cHBsZWFudClcbiAgICAgICAgbWFuZGF0LnN1cHBsZWFudCA9IHN1cHBsZWFudFxuXG4gICAgICAgIGNsZWFuWG1sQXJ0ZWZhY3RzKHN1cHBsZWFudClcbiAgICAgIH1cblxuICAgICAgY29uc3QgZWxlY3Rpb24gPSBtYW5kYXQuZWxlY3Rpb25cbiAgICAgIGlmIChlbGVjdGlvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNsZWFuWG1sQXJ0ZWZhY3RzKGVsZWN0aW9uKVxuXG4gICAgICAgIGNvbnN0IGxpZXUgPSBlbGVjdGlvbi5saWV1XG4gICAgICAgIGNsZWFuWG1sQXJ0ZWZhY3RzKGxpZXUpXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG1hbmRhdHVyZSA9IG1hbmRhdC5tYW5kYXR1cmVcbiAgICAgIGlmIChtYW5kYXR1cmUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjbGVhblhtbEFydGVmYWN0cyhtYW5kYXR1cmUpXG4gICAgICB9XG5cbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChtYW5kYXQuY2hhbWJyZSwgdW5kZWZpbmVkKVxuXG4gICAgICAvLyBSZXBsYWNlIGNvbGxhYm9yYXRldXJzIHdpdGggYW4gYXJyYXkgb2YgY29sbGFib3JhdGV1cnMuXG4gICAgICBsZXQgY29sbGFib3JhdGV1cnMgPSBtYW5kYXQuY29sbGFib3JhdGV1cnNcbiAgICAgIGlmIChjb2xsYWJvcmF0ZXVycyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnN0IGNvbGxhYm9yYXRldXJzQXJyYXkgPSBBcnJheS5pc0FycmF5KGNvbGxhYm9yYXRldXJzKVxuICAgICAgICAgID8gY29sbGFib3JhdGV1cnMuZmlsdGVyKChjb2xsYWJvcmF0ZXVyKSA9PiBjb2xsYWJvcmF0ZXVyICE9PSBudWxsKVxuICAgICAgICAgIDogW2NvbGxhYm9yYXRldXJzXVxuICAgICAgICBjb2xsYWJvcmF0ZXVycyA9IFtdXG4gICAgICAgIGNvbGxhYm9yYXRldXJzQXJyYXkubWFwKCh7IGNvbGxhYm9yYXRldXIgfSkgPT4ge1xuICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGNvbGxhYm9yYXRldXIpKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGNvbGxhYm9yYXRldXJJdGVtIG9mIGNvbGxhYm9yYXRldXIpIHtcbiAgICAgICAgICAgICAgaWYgKGNvbGxhYm9yYXRldXJJdGVtICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgY29sbGFib3JhdGV1cnMucHVzaChjb2xsYWJvcmF0ZXVySXRlbSlcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSBpZiAoY29sbGFib3JhdGV1cikge1xuICAgICAgICAgICAgY29sbGFib3JhdGV1cnMucHVzaChjb2xsYWJvcmF0ZXVyKVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgICAgaWYgKGNvbGxhYm9yYXRldXJzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIGRlbGV0ZSBtYW5kYXQuY29sbGFib3JhdGV1cnNcbiAgICAgICAgICBjb2xsYWJvcmF0ZXVycyA9IHVuZGVmaW5lZFxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG1hbmRhdC5jb2xsYWJvcmF0ZXVycyA9IGNvbGxhYm9yYXRldXJzXG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGNvbnN0IGNvbGxhYm9yYXRldXIgb2YgY29sbGFib3JhdGV1cnMgfHwgW10pIHtcbiAgICAgICAgICBjbGVhblhtbEFydGVmYWN0cyhjb2xsYWJvcmF0ZXVyKVxuXG4gICAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGNvbGxhYm9yYXRldXIuZGF0ZURlYnV0LCB1bmRlZmluZWQpXG4gICAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGNvbGxhYm9yYXRldXIuZGF0ZUZpbiwgdW5kZWZpbmVkKVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGluZm9zSG9yc1NpYW4gPSBtYW5kYXQuSW5mb3NIb3JzU0lBTlxuICAgICAgaWYgKGluZm9zSG9yc1NpYW4gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjbGVhblhtbEFydGVmYWN0cyhpbmZvc0hvcnNTaWFuKVxuXG4gICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChpbmZvc0hvcnNTaWFuLkhBVFZQX1VSSSwgdW5kZWZpbmVkKVxuICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoT2JqZWN0LmtleXMoaW5mb3NIb3JzU2lhbikubGVuZ3RoLCAwKVxuICAgICAgICBkZWxldGUgbWFuZGF0LkluZm9zSG9yc1NJQU5cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBTb3J0IG1hbmRhdHMgdG8gZWFzZSBjb21wYXJpc29uIG9mIGRpZmZlcmVudCBvcGVuIGRhdGEgZmlsZXMuXG4gICAgbWFuZGF0cy5zb3J0KChhOiB7IHVpZDogc3RyaW5nIH0sIGI6IHsgdWlkOiBzdHJpbmcgfSkgPT5cbiAgICAgIGEudWlkLmxlbmd0aCA9PT0gYi51aWQubGVuZ3RoXG4gICAgICAgID8gYS51aWQubG9jYWxlQ29tcGFyZShiLnVpZClcbiAgICAgICAgOiBhLnVpZC5sZW5ndGggLSBiLnVpZC5sZW5ndGgsXG4gICAgKVxuICB9XG5cbiAgbGV0IGRlcG9ydHMgPSBhY3RldXIuZGVwb3J0c1xuICBpZiAoZGVwb3J0cyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgbGV0IGRlcG9ydCA9IGRlcG9ydHMuZGVwb3J0XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoZGVwb3J0KSkge1xuICAgICAgZGVwb3J0cyA9IGFjdGV1ci5kZXBvcnRzID0gZGVwb3J0XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgZGVwb3J0ID09PSBcIm9iamVjdFwiKSB7XG4gICAgICBkZXBvcnRzID0gYWN0ZXVyLmRlcG9ydHMgPSBbZGVwb3J0XVxuICAgIH1cblxuICAgIGZvciAoY29uc3QgZGVwb3J0IG9mIGRlcG9ydHMpIHtcbiAgICAgIGNsZWFuWG1sQXJ0ZWZhY3RzKGRlcG9ydClcblxuICAgICAgY29uc3QgY2libGUgPSBkZXBvcnQuY2libGVcbiAgICAgIHtcbiAgICAgICAgY2xlYW5YbWxBcnRlZmFjdHMoY2libGUpXG5cbiAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGNpYmxlLnJlZmVyZW5jZXMsIHVuZGVmaW5lZClcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBTb3J0IGRlcG9ydHMgdG8gZWFzZSBjb21wYXJpc29uIG9mIGRpZmZlcmVudCBvcGVuIGRhdGEgZmlsZXMuXG4gICAgZGVwb3J0cy5zb3J0KChhOiB7IHVpZDogc3RyaW5nIH0sIGI6IHsgdWlkOiBzdHJpbmcgfSkgPT5cbiAgICAgIGEudWlkLmxlbmd0aCA9PT0gYi51aWQubGVuZ3RoXG4gICAgICAgID8gYS51aWQubG9jYWxlQ29tcGFyZShiLnVpZClcbiAgICAgICAgOiBhLnVpZC5sZW5ndGggLSBiLnVpZC5sZW5ndGgsXG4gICAgKVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjbGVhblJhcHBvcnRldXIocmFwcG9ydGV1cjogYW55KSB7XG4gIGNvbnN0IGV0dWRlUGxmUmVmID0gcmFwcG9ydGV1ci5ldHVkZVBMRlJlZlxuICBpZiAocmFwcG9ydGV1ci5ldHVkZVBMRlJlZiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgZGVsZXRlIHJhcHBvcnRldXIuZXR1ZGVQTEZSZWZcbiAgICByYXBwb3J0ZXVyLmV0dWRlUGxmUmVmID0gZXR1ZGVQbGZSZWZcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFFQTtBQUF5QztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBRWxDLFNBQVNBLFdBQVcsQ0FBQ0MsTUFBVyxFQUFRO0VBQzdDLElBQUFDLHNCQUFpQixFQUFDRCxNQUFNLENBQUM7RUFFekJFLGtCQUFNLENBQUNDLFdBQVcsQ0FBQ0gsTUFBTSxDQUFDSSxHQUFHLENBQUMsV0FBVyxDQUFDLEVBQUUsZUFBZSxDQUFDO0VBQzVESixNQUFNLENBQUNJLEdBQUcsR0FBR0osTUFBTSxDQUFDSSxHQUFHLENBQUMsT0FBTyxDQUFDO0VBQ2hDLElBQUFGLGtCQUFNLEVBQUNGLE1BQU0sQ0FBQ0ksR0FBRyxDQUFDO0VBRWxCLElBQU1DLFNBQVMsR0FBR0wsTUFBTSxDQUFDSyxTQUFTO0VBQ2xDO0lBQ0UsSUFBQUosc0JBQWlCLEVBQUNJLFNBQVMsQ0FBQztJQUU1QixJQUFNQyxLQUFLLEdBQUdELFNBQVMsQ0FBQ0MsS0FBSztJQUM3QjtNQUNFLElBQUFMLHNCQUFpQixFQUFDSyxLQUFLLENBQUM7TUFFeEIsSUFBTUMsYUFBYSxHQUFHRixTQUFTLENBQUNFLGFBQWE7TUFDN0M7UUFDRSxJQUFBTixzQkFBaUIsRUFBQ00sYUFBYSxDQUFDO01BQ2xDO0lBQ0Y7RUFDRjtFQUVBLElBQU1DLFVBQVUsR0FBR1IsTUFBTSxDQUFD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