@tricoteuses/assemblee 1.0.0-next.2 → 1.0.2

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 (135) hide show
  1. package/README.md +2 -0
  2. package/lib/api.js +23 -7
  3. package/lib/api.mjs +41 -0
  4. package/lib/bugs/acteur-00010/plugin.test.js +139 -33
  5. package/lib/bugs/acteur-00010/plugin.test.mjs +33 -0
  6. package/lib/bugs/acteur-00010.js +166 -24
  7. package/lib/bugs/acteur-00010.mjs +31 -0
  8. package/lib/bugs/agenda-00002/plugin.test.js +178 -52
  9. package/lib/bugs/agenda-00002/plugin.test.mjs +52 -0
  10. package/lib/bugs/agenda-00002.js +507 -143
  11. package/lib/bugs/agenda-00002.mjs +197 -0
  12. package/lib/bugs/agenda-00008/plugin.test.js +143 -31
  13. package/lib/bugs/agenda-00008/plugin.test.mjs +31 -0
  14. package/lib/bugs/agenda-00008.js +180 -25
  15. package/lib/bugs/agenda-00008.mjs +30 -0
  16. package/lib/bugs/agenda-00011/plugin.test.js +371 -156
  17. package/lib/bugs/agenda-00011/plugin.test.mjs +156 -0
  18. package/lib/bugs/agenda-00011.js +416 -117
  19. package/lib/bugs/agenda-00011.mjs +150 -0
  20. package/lib/bugs.js +591 -54
  21. package/lib/bugs.mjs +93 -0
  22. package/lib/cleaners/actes_legislatifs.js +149 -61
  23. package/lib/cleaners/actes_legislatifs.mjs +311 -0
  24. package/lib/cleaners/acteurs.js +255 -123
  25. package/lib/cleaners/acteurs.mjs +211 -0
  26. package/lib/cleaners/amendements.js +242 -117
  27. package/lib/cleaners/amendements.mjs +292 -0
  28. package/lib/cleaners/documents.js +147 -62
  29. package/lib/cleaners/documents.mjs +162 -0
  30. package/lib/cleaners/dossiers_legislatifs.js +132 -45
  31. package/lib/cleaners/dossiers_legislatifs.mjs +123 -0
  32. package/lib/cleaners/index.js +64 -8
  33. package/lib/cleaners/index.mjs +8 -0
  34. package/lib/cleaners/organes.js +54 -21
  35. package/lib/cleaners/organes.mjs +64 -0
  36. package/lib/cleaners/reunions.js +237 -127
  37. package/lib/cleaners/reunions.mjs +318 -0
  38. package/lib/cleaners/scrutins.js +261 -99
  39. package/lib/cleaners/scrutins.mjs +254 -0
  40. package/lib/cleaners/xml.js +81 -16
  41. package/lib/cleaners/xml.mjs +42 -0
  42. package/lib/datasets.js +284 -153
  43. package/lib/datasets.mjs +596 -0
  44. package/lib/dates.js +93 -34
  45. package/lib/dates.mjs +98 -0
  46. package/lib/dossiers_legislatifs.js +107 -33
  47. package/lib/dossiers_legislatifs.mjs +215 -0
  48. package/lib/file_systems.js +203 -35
  49. package/lib/file_systems.mjs +64 -0
  50. package/lib/git.js +139 -41
  51. package/lib/git.mjs +114 -0
  52. package/lib/index.js +310 -16
  53. package/lib/index.mjs +16 -0
  54. package/lib/inserters.js +355 -131
  55. package/lib/inserters.mjs +413 -0
  56. package/lib/loaders.js +900 -440
  57. package/lib/loaders.mjs +678 -0
  58. package/lib/organes.js +15 -5
  59. package/lib/organes.mjs +18 -0
  60. package/lib/parsers/documents.js +241 -89
  61. package/lib/parsers/documents.mjs +433 -0
  62. package/lib/parsers/index.js +36 -3
  63. package/lib/parsers/index.mjs +3 -0
  64. package/lib/parsers/recherche_amendements.js +616 -173
  65. package/lib/parsers/recherche_amendements.mjs +189 -0
  66. package/lib/raw_types/acteurs_et_organes.d.ts +36 -148
  67. package/lib/raw_types/acteurs_et_organes.js +228 -506
  68. package/lib/raw_types/acteurs_et_organes.mjs +1240 -0
  69. package/lib/raw_types/agendas.js +165 -75
  70. package/lib/raw_types/agendas.mjs +944 -0
  71. package/lib/raw_types/amendements.js +165 -77
  72. package/lib/raw_types/amendements.mjs +1040 -0
  73. package/lib/raw_types/dossiers_legislatifs.d.ts +1 -43
  74. package/lib/raw_types/dossiers_legislatifs.js +181 -143
  75. package/lib/raw_types/dossiers_legislatifs.mjs +1792 -0
  76. package/lib/raw_types/scrutins.js +144 -61
  77. package/lib/raw_types/scrutins.mjs +645 -0
  78. package/lib/scripts/bugs_helper.js +657 -155
  79. package/lib/scripts/bugs_helper.mjs +286 -0
  80. package/lib/scripts/clean_data.js +380 -145
  81. package/lib/scripts/clean_data.mjs +190 -0
  82. package/lib/scripts/clean_reorganized_data.js +627 -331
  83. package/lib/scripts/clean_reorganized_data.mjs +520 -0
  84. package/lib/scripts/diff_amendements.js +159 -73
  85. package/lib/scripts/diff_amendements.mjs +234 -0
  86. package/lib/scripts/document_dossiers_legislatifs.js +570 -288
  87. package/lib/scripts/document_dossiers_legislatifs.mjs +494 -0
  88. package/lib/scripts/get_today_reunions.js +37 -20
  89. package/lib/scripts/get_today_reunions.mjs +41 -0
  90. package/lib/scripts/merge_scrutins.js +121 -39
  91. package/lib/scripts/merge_scrutins.mjs +69 -0
  92. package/lib/scripts/parse_textes_lois.js +179 -125
  93. package/lib/scripts/parse_textes_lois.mjs +215 -0
  94. package/lib/scripts/raw_types_from_amendements.js +276 -77
  95. package/lib/scripts/raw_types_from_amendements.mjs +118 -0
  96. package/lib/scripts/reorganize_data.js +867 -446
  97. package/lib/scripts/reorganize_data.mjs +712 -0
  98. package/lib/scripts/retrieve_deputes_photos.js +378 -157
  99. package/lib/scripts/retrieve_deputes_photos.mjs +230 -0
  100. package/lib/scripts/retrieve_documents.js +648 -172
  101. package/lib/scripts/retrieve_documents.mjs +292 -0
  102. package/lib/scripts/retrieve_open_data.js +286 -85
  103. package/lib/scripts/retrieve_open_data.mjs +125 -0
  104. package/lib/scripts/retrieve_pending_amendments.js +302 -69
  105. package/lib/scripts/retrieve_pending_amendments.mjs +130 -0
  106. package/lib/scripts/retrieve_senateurs_photos.js +374 -198
  107. package/lib/scripts/retrieve_senateurs_photos.mjs +277 -0
  108. package/lib/scripts/retrieve_textes_lois.js +343 -89
  109. package/lib/scripts/retrieve_textes_lois.mjs +168 -0
  110. package/lib/scripts/test_load.js +30 -11
  111. package/lib/scripts/test_load.mjs +26 -0
  112. package/lib/scripts/test_load_big_files.js +30 -11
  113. package/lib/scripts/test_load_big_files.mjs +26 -0
  114. package/lib/scripts/validate_json.js +370 -120
  115. package/lib/scripts/validate_json.mjs +216 -0
  116. package/lib/shared_types/codes_actes.js +50 -15
  117. package/lib/shared_types/codes_actes.mjs +228 -0
  118. package/lib/strings.js +16 -3
  119. package/lib/strings.mjs +7 -0
  120. package/lib/types/acteurs_et_organes.js +156 -71
  121. package/lib/types/acteurs_et_organes.mjs +918 -0
  122. package/lib/types/agendas.js +154 -67
  123. package/lib/types/agendas.mjs +623 -0
  124. package/lib/types/amendements.js +166 -77
  125. package/lib/types/amendements.mjs +885 -0
  126. package/lib/types/dossiers_legislatifs.d.ts +1 -42
  127. package/lib/types/dossiers_legislatifs.js +182 -143
  128. package/lib/types/dossiers_legislatifs.mjs +1120 -0
  129. package/lib/types/legislatures.js +12 -3
  130. package/lib/types/legislatures.mjs +9 -0
  131. package/lib/types/scrutins.js +144 -61
  132. package/lib/types/scrutins.mjs +528 -0
  133. package/lib/urls.js +44 -25
  134. package/lib/urls.mjs +201 -0
  135. package/package.json +33 -12
package/lib/inserters.js CHANGED
@@ -1,9 +1,54 @@
1
+ "use strict";
2
+
3
+ require("core-js/modules/es.array.slice.js");
4
+
5
+ require("core-js/modules/es.object.to-string.js");
6
+
7
+ require("core-js/modules/es.function.name.js");
8
+
9
+ require("core-js/modules/es.array.from.js");
10
+
11
+ require("core-js/modules/es.string.iterator.js");
12
+
13
+ require("core-js/modules/es.regexp.exec.js");
14
+
15
+ require("core-js/modules/es.symbol.js");
16
+
17
+ require("core-js/modules/es.symbol.description.js");
18
+
19
+ require("core-js/modules/es.symbol.iterator.js");
20
+
21
+ require("core-js/modules/es.array.iterator.js");
22
+
23
+ require("core-js/modules/web.dom-collections.iterator.js");
24
+
25
+ require("core-js/modules/es.array.is-array.js");
26
+
27
+ require("core-js/modules/es.object.define-property.js");
28
+
29
+ Object.defineProperty(exports, "__esModule", {
30
+ value: true
31
+ });
32
+ exports.insertActeurReferences = insertActeurReferences;
33
+ exports.insertAmendementReferences = insertAmendementReferences;
34
+ exports.insertDocumentReferences = insertDocumentReferences;
35
+ exports.insertDossierReferences = insertDossierReferences;
36
+ exports.insertOrganeReferences = insertOrganeReferences;
37
+ exports.insertReunionReferences = insertReunionReferences;
38
+ exports.insertScrutinReferences = insertScrutinReferences;
39
+
40
+ 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; } } }; }
41
+
42
+ 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); }
43
+
44
+ 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; }
45
+
1
46
  function insertActeLegislatifReferences(acte, data, visitedUids) {
2
47
  if (!visitedUids.has(acte.uid)) {
3
48
  visitedUids.add(acte.uid);
4
49
 
5
50
  if (data.documentByUid !== undefined && acte.depotInitialLectureDefinitiveRef !== undefined) {
6
- const document = data.documentByUid[acte.depotInitialLectureDefinitiveRef];
51
+ var document = data.documentByUid[acte.depotInitialLectureDefinitiveRef];
7
52
 
8
53
  if (document !== undefined) {
9
54
  acte.depotInitialLectureDefinitive = document;
@@ -12,7 +57,7 @@ function insertActeLegislatifReferences(acte, data, visitedUids) {
12
57
  }
13
58
 
14
59
  if (data.organeByUid !== undefined && acte.organeRef !== undefined) {
15
- const organe = data.organeByUid[acte.organeRef];
60
+ var organe = data.organeByUid[acte.organeRef];
16
61
 
17
62
  if (organe !== undefined) {
18
63
  acte.organe = organe;
@@ -21,41 +66,62 @@ function insertActeLegislatifReferences(acte, data, visitedUids) {
21
66
  }
22
67
 
23
68
  if (data.organeByUid !== undefined && acte.provenanceRef !== undefined) {
24
- const organe = data.organeByUid[acte.provenanceRef];
69
+ var _organe = data.organeByUid[acte.provenanceRef];
25
70
 
26
- if (organe !== undefined) {
27
- acte.provenance = organe;
28
- insertOrganeReferences(organe, data, visitedUids);
71
+ if (_organe !== undefined) {
72
+ acte.provenance = _organe;
73
+ insertOrganeReferences(_organe, data, visitedUids);
29
74
  }
30
75
  }
31
76
 
32
77
  if (data.acteurByUid !== undefined && acte.rapporteurs !== undefined) {
33
- for (const rapporteur of acte.rapporteurs) {
34
- const acteur = data.acteurByUid[rapporteur.acteurRef];
78
+ var _iterator = _createForOfIteratorHelper(acte.rapporteurs),
79
+ _step;
35
80
 
36
- if (acteur !== undefined) {
37
- rapporteur.acteur = acteur;
38
- insertActeurReferences(acteur, data, visitedUids);
81
+ try {
82
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
83
+ var rapporteur = _step.value;
84
+ var acteur = data.acteurByUid[rapporteur.acteurRef];
85
+
86
+ if (acteur !== undefined) {
87
+ rapporteur.acteur = acteur;
88
+ insertActeurReferences(acteur, data, visitedUids);
89
+ }
39
90
  }
91
+ } catch (err) {
92
+ _iterator.e(err);
93
+ } finally {
94
+ _iterator.f();
40
95
  }
41
96
  }
42
97
 
43
98
  if (data.reunionByUid !== undefined && acte.reunionRef !== undefined) {
44
- const reunion = data.reunionByUid[acte.reunionRef];
99
+ var reunion = data.reunionByUid[acte.reunionRef];
45
100
 
46
101
  if (reunion !== undefined) {
47
102
  acte.reunion = reunion;
48
103
  insertReunionReferences(reunion, data, visitedUids);
49
104
 
50
105
  if (acte.odjRef !== undefined) {
51
- const odj = reunion.odj;
106
+ var odj = reunion.odj;
52
107
 
53
108
  if (odj !== undefined && odj.pointsOdj !== undefined) {
54
- for (const pointOdj of odj.pointsOdj) {
55
- if (pointOdj.uid === acte.odjRef) {
56
- acte.odj = pointOdj;
57
- break;
109
+ var _iterator2 = _createForOfIteratorHelper(odj.pointsOdj),
110
+ _step2;
111
+
112
+ try {
113
+ for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
114
+ var pointOdj = _step2.value;
115
+
116
+ if (pointOdj.uid === acte.odjRef) {
117
+ acte.odj = pointOdj;
118
+ break;
119
+ }
58
120
  }
121
+ } catch (err) {
122
+ _iterator2.e(err);
123
+ } finally {
124
+ _iterator2.f();
59
125
  }
60
126
  }
61
127
  }
@@ -63,89 +129,140 @@ function insertActeLegislatifReferences(acte, data, visitedUids) {
63
129
  }
64
130
 
65
131
  if (data.documentByUid !== undefined && acte.texteAdopteRef !== undefined) {
66
- const document = data.documentByUid[acte.texteAdopteRef];
132
+ var _document = data.documentByUid[acte.texteAdopteRef];
67
133
 
68
- if (document !== undefined) {
69
- acte.texteAdopte = document;
70
- insertDocumentReferences(document, data, visitedUids);
134
+ if (_document !== undefined) {
135
+ acte.texteAdopte = _document;
136
+ insertDocumentReferences(_document, data, visitedUids);
71
137
  }
72
138
  }
73
139
 
74
140
  if (data.documentByUid !== undefined && acte.texteAssocieRef !== undefined) {
75
- const document = data.documentByUid[acte.texteAssocieRef];
141
+ var _document2 = data.documentByUid[acte.texteAssocieRef];
76
142
 
77
- if (document !== undefined) {
78
- acte.texteAssocie = document;
79
- insertDocumentReferences(document, data, visitedUids);
143
+ if (_document2 !== undefined) {
144
+ acte.texteAssocie = _document2;
145
+ insertDocumentReferences(_document2, data, visitedUids);
80
146
  }
81
147
  }
82
148
 
83
149
  if (data.documentByUid !== undefined && acte.textesAssocies !== undefined) {
84
- for (const texteAssocie of acte.textesAssocies) {
85
- const document = data.documentByUid[texteAssocie.texteAssocieRef];
150
+ var _iterator3 = _createForOfIteratorHelper(acte.textesAssocies),
151
+ _step3;
152
+
153
+ try {
154
+ for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
155
+ var texteAssocie = _step3.value;
156
+ var _document3 = data.documentByUid[texteAssocie.texteAssocieRef];
86
157
 
87
- if (document !== undefined) {
88
- texteAssocie.texteAssocie = document;
89
- insertDocumentReferences(document, data, visitedUids);
158
+ if (_document3 !== undefined) {
159
+ texteAssocie.texteAssocie = _document3;
160
+ insertDocumentReferences(_document3, data, visitedUids);
161
+ }
90
162
  }
163
+ } catch (err) {
164
+ _iterator3.e(err);
165
+ } finally {
166
+ _iterator3.f();
91
167
  }
92
168
  }
93
169
 
94
170
  if (data.scrutinByUid !== undefined && acte.voteRefs !== undefined) {
95
- const scrutins = [];
171
+ var scrutins = [];
96
172
 
97
- for (const voteRef of acte.voteRefs) {
98
- const scrutin = data.scrutinByUid[voteRef];
173
+ var _iterator4 = _createForOfIteratorHelper(acte.voteRefs),
174
+ _step4;
99
175
 
100
- if (scrutin !== undefined) {
101
- scrutins.push(scrutin);
102
- insertScrutinReferences(scrutin, data, visitedUids);
176
+ try {
177
+ for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {
178
+ var voteRef = _step4.value;
179
+ var scrutin = data.scrutinByUid[voteRef];
180
+
181
+ if (scrutin !== undefined) {
182
+ scrutins.push(scrutin);
183
+ insertScrutinReferences(scrutin, data, visitedUids);
184
+ }
103
185
  }
186
+ } catch (err) {
187
+ _iterator4.e(err);
188
+ } finally {
189
+ _iterator4.f();
104
190
  }
105
191
 
106
192
  acte.votes = scrutins;
107
193
  }
108
194
 
109
- for (const childActe of acte.actesLegislatifs || []) {
110
- insertActeLegislatifReferences(childActe, data, visitedUids);
195
+ var _iterator5 = _createForOfIteratorHelper(acte.actesLegislatifs || []),
196
+ _step5;
197
+
198
+ try {
199
+ for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {
200
+ var childActe = _step5.value;
201
+ insertActeLegislatifReferences(childActe, data, visitedUids);
202
+ }
203
+ } catch (err) {
204
+ _iterator5.e(err);
205
+ } finally {
206
+ _iterator5.f();
111
207
  }
112
208
  }
113
209
 
114
210
  return acte;
115
211
  }
116
212
 
117
- export function insertActeurReferences(acteur, data, visitedUids) {
213
+ function insertActeurReferences(acteur, data, visitedUids) {
118
214
  if (!visitedUids.has(acteur.uid)) {
119
215
  visitedUids.add(acteur.uid);
120
216
 
121
217
  if (data.organeByUid !== undefined) {
122
- for (const mandat of acteur.mandats || []) {
123
- const organes = [];
218
+ var _iterator6 = _createForOfIteratorHelper(acteur.mandats || []),
219
+ _step6;
124
220
 
125
- for (const organeRef of mandat.organesRefs) {
126
- const organe = data.organeByUid[organeRef];
221
+ try {
222
+ for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) {
223
+ var mandat = _step6.value;
224
+ var organes = [];
127
225
 
128
- if (organe !== undefined) {
129
- organes.push(organe);
130
- insertOrganeReferences(organe, data, visitedUids);
226
+ var _iterator7 = _createForOfIteratorHelper(mandat.organesRefs),
227
+ _step7;
228
+
229
+ try {
230
+ for (_iterator7.s(); !(_step7 = _iterator7.n()).done;) {
231
+ var organeRef = _step7.value;
232
+ var organe = data.organeByUid[organeRef];
233
+
234
+ if (organe !== undefined) {
235
+ organes.push(organe);
236
+ insertOrganeReferences(organe, data, visitedUids);
237
+ }
238
+ }
239
+ } catch (err) {
240
+ _iterator7.e(err);
241
+ } finally {
242
+ _iterator7.f();
131
243
  }
132
- }
133
244
 
134
- mandat.organes = organes;
245
+ mandat.organes = organes;
246
+ }
247
+ } catch (err) {
248
+ _iterator6.e(err);
249
+ } finally {
250
+ _iterator6.f();
135
251
  }
136
252
  }
137
253
  }
138
254
 
139
255
  return acteur;
140
256
  }
141
- export function insertAmendementReferences(amendement, data, visitedUids) {
257
+
258
+ function insertAmendementReferences(amendement, data, visitedUids) {
142
259
  if (!visitedUids.has(amendement.uid)) {
143
260
  visitedUids.add(amendement.uid);
144
- const signataires = amendement.signataires;
145
- const auteur = signataires.auteur;
261
+ var signataires = amendement.signataires;
262
+ var auteur = signataires.auteur;
146
263
 
147
264
  if (data.acteurByUid !== undefined && auteur.acteurRef !== undefined) {
148
- const acteur = data.acteurByUid[auteur.acteurRef];
265
+ var acteur = data.acteurByUid[auteur.acteurRef];
149
266
 
150
267
  if (acteur !== undefined) {
151
268
  auteur.acteur = acteur;
@@ -154,7 +271,7 @@ export function insertAmendementReferences(amendement, data, visitedUids) {
154
271
  }
155
272
 
156
273
  if (data.organeByUid !== undefined && auteur.auteurRapporteurOrganeRef !== undefined) {
157
- const auteurRapporteurOrgane = data.organeByUid[auteur.auteurRapporteurOrganeRef];
274
+ var auteurRapporteurOrgane = data.organeByUid[auteur.auteurRapporteurOrganeRef];
158
275
 
159
276
  if (auteurRapporteurOrgane !== undefined) {
160
277
  auteur.auteurRapporteurOrgane = auteurRapporteurOrgane;
@@ -163,7 +280,7 @@ export function insertAmendementReferences(amendement, data, visitedUids) {
163
280
  }
164
281
 
165
282
  if (data.organeByUid !== undefined && auteur.gouvernementRef !== undefined) {
166
- const gouvernement = data.organeByUid[auteur.gouvernementRef];
283
+ var gouvernement = data.organeByUid[auteur.gouvernementRef];
167
284
 
168
285
  if (gouvernement !== undefined) {
169
286
  auteur.gouvernement = gouvernement;
@@ -172,7 +289,7 @@ export function insertAmendementReferences(amendement, data, visitedUids) {
172
289
  }
173
290
 
174
291
  if (data.organeByUid !== undefined && auteur.groupePolitiqueRef !== undefined) {
175
- const organe = data.organeByUid[auteur.groupePolitiqueRef];
292
+ var organe = data.organeByUid[auteur.groupePolitiqueRef];
176
293
 
177
294
  if (organe !== undefined) {
178
295
  auteur.groupePolitique = organe;
@@ -181,18 +298,28 @@ export function insertAmendementReferences(amendement, data, visitedUids) {
181
298
  }
182
299
 
183
300
  if (data.acteurByUid !== undefined) {
184
- const cosignatairesRefs = signataires.cosignatairesRefs;
301
+ var cosignatairesRefs = signataires.cosignatairesRefs;
185
302
 
186
303
  if (cosignatairesRefs !== undefined) {
187
- const cosignataires = [];
304
+ var cosignataires = [];
305
+
306
+ var _iterator8 = _createForOfIteratorHelper(signataires.cosignatairesRefs || []),
307
+ _step8;
188
308
 
189
- for (const cosignataireRef of signataires.cosignatairesRefs || []) {
190
- const cosignataire = data.acteurByUid[cosignataireRef];
309
+ try {
310
+ for (_iterator8.s(); !(_step8 = _iterator8.n()).done;) {
311
+ var cosignataireRef = _step8.value;
312
+ var cosignataire = data.acteurByUid[cosignataireRef];
191
313
 
192
- if (cosignataire !== undefined) {
193
- cosignataires.push(cosignataire);
194
- insertActeurReferences(cosignataire, data, visitedUids);
314
+ if (cosignataire !== undefined) {
315
+ cosignataires.push(cosignataire);
316
+ insertActeurReferences(cosignataire, data, visitedUids);
317
+ }
195
318
  }
319
+ } catch (err) {
320
+ _iterator8.e(err);
321
+ } finally {
322
+ _iterator8.f();
196
323
  }
197
324
 
198
325
  signataires.cosignataires = cosignataires;
@@ -204,30 +331,40 @@ export function insertAmendementReferences(amendement, data, visitedUids) {
204
331
  }
205
332
 
206
333
  function insertDivisionReferences(division, data, visitedUids) {
207
- for (const auteur of division.auteurs) {
208
- const acteurSummary = auteur.acteur;
334
+ var _iterator9 = _createForOfIteratorHelper(division.auteurs),
335
+ _step9;
209
336
 
210
- if (data.acteurByUid !== undefined && acteurSummary !== undefined) {
211
- const acteur = data.acteurByUid[acteurSummary.acteurRef];
337
+ try {
338
+ for (_iterator9.s(); !(_step9 = _iterator9.n()).done;) {
339
+ var auteur = _step9.value;
340
+ var acteurSummary = auteur.acteur;
212
341
 
213
- if (acteur !== undefined) {
214
- acteurSummary.acteur = acteur;
215
- insertActeurReferences(acteur, data, visitedUids);
342
+ if (data.acteurByUid !== undefined && acteurSummary !== undefined) {
343
+ var acteur = data.acteurByUid[acteurSummary.acteurRef];
344
+
345
+ if (acteur !== undefined) {
346
+ acteurSummary.acteur = acteur;
347
+ insertActeurReferences(acteur, data, visitedUids);
348
+ }
216
349
  }
217
- }
218
350
 
219
- if (data.organeByUid !== undefined && auteur.organeRef !== undefined) {
220
- const organe = data.organeByUid[auteur.organeRef];
351
+ if (data.organeByUid !== undefined && auteur.organeRef !== undefined) {
352
+ var organe = data.organeByUid[auteur.organeRef];
221
353
 
222
- if (organe !== undefined) {
223
- auteur.organe = organe;
224
- insertOrganeReferences(organe, data, visitedUids);
354
+ if (organe !== undefined) {
355
+ auteur.organe = organe;
356
+ insertOrganeReferences(organe, data, visitedUids);
357
+ }
225
358
  }
226
359
  }
360
+ } catch (err) {
361
+ _iterator9.e(err);
362
+ } finally {
363
+ _iterator9.f();
227
364
  }
228
365
 
229
366
  if (data.dossierByUid !== undefined) {
230
- const dossier = data.dossierByUid[division.dossierRef];
367
+ var dossier = data.dossierByUid[division.dossierRef];
231
368
 
232
369
  if (dossier !== undefined) {
233
370
  division.dossier = dossier;
@@ -235,41 +372,61 @@ function insertDivisionReferences(division, data, visitedUids) {
235
372
  }
236
373
  }
237
374
 
238
- for (const childDivision of division.divisions || []) {
239
- insertDivisionReferences(childDivision, data, visitedUids);
375
+ var _iterator10 = _createForOfIteratorHelper(division.divisions || []),
376
+ _step10;
377
+
378
+ try {
379
+ for (_iterator10.s(); !(_step10 = _iterator10.n()).done;) {
380
+ var childDivision = _step10.value;
381
+ insertDivisionReferences(childDivision, data, visitedUids);
382
+ }
383
+ } catch (err) {
384
+ _iterator10.e(err);
385
+ } finally {
386
+ _iterator10.f();
240
387
  }
241
388
 
242
389
  return division;
243
390
  }
244
391
 
245
- export function insertDocumentReferences(document, data, visitedUids) {
392
+ function insertDocumentReferences(document, data, visitedUids) {
246
393
  if (!visitedUids.has(document.uid)) {
247
394
  visitedUids.add(document.uid);
248
395
 
249
- for (const auteur of document.auteurs) {
250
- const acteurSummary = auteur.acteur;
396
+ var _iterator11 = _createForOfIteratorHelper(document.auteurs),
397
+ _step11;
251
398
 
252
- if (data.acteurByUid !== undefined && acteurSummary !== undefined) {
253
- const acteur = data.acteurByUid[acteurSummary.acteurRef];
399
+ try {
400
+ for (_iterator11.s(); !(_step11 = _iterator11.n()).done;) {
401
+ var auteur = _step11.value;
402
+ var acteurSummary = auteur.acteur;
254
403
 
255
- if (acteur !== undefined) {
256
- acteurSummary.acteur = acteur;
257
- insertActeurReferences(acteur, data, visitedUids);
404
+ if (data.acteurByUid !== undefined && acteurSummary !== undefined) {
405
+ var acteur = data.acteurByUid[acteurSummary.acteurRef];
406
+
407
+ if (acteur !== undefined) {
408
+ acteurSummary.acteur = acteur;
409
+ insertActeurReferences(acteur, data, visitedUids);
410
+ }
258
411
  }
259
- }
260
412
 
261
- if (data.organeByUid !== undefined && auteur.organeRef !== undefined) {
262
- const organe = data.organeByUid[auteur.organeRef];
413
+ if (data.organeByUid !== undefined && auteur.organeRef !== undefined) {
414
+ var organe = data.organeByUid[auteur.organeRef];
263
415
 
264
- if (organe !== undefined) {
265
- auteur.organe = organe;
266
- insertOrganeReferences(organe, data, visitedUids);
416
+ if (organe !== undefined) {
417
+ auteur.organe = organe;
418
+ insertOrganeReferences(organe, data, visitedUids);
419
+ }
267
420
  }
268
421
  }
422
+ } catch (err) {
423
+ _iterator11.e(err);
424
+ } finally {
425
+ _iterator11.f();
269
426
  }
270
427
 
271
428
  if (data.dossierByUid !== undefined) {
272
- const dossier = data.dossierByUid[document.dossierRef];
429
+ var dossier = data.dossierByUid[document.dossierRef];
273
430
 
274
431
  if (dossier !== undefined) {
275
432
  document.dossier = dossier;
@@ -277,46 +434,90 @@ export function insertDocumentReferences(document, data, visitedUids) {
277
434
  }
278
435
  }
279
436
 
280
- for (const division of document.divisions || []) {
281
- insertDivisionReferences(division, data, visitedUids);
437
+ var _iterator12 = _createForOfIteratorHelper(document.divisions || []),
438
+ _step12;
439
+
440
+ try {
441
+ for (_iterator12.s(); !(_step12 = _iterator12.n()).done;) {
442
+ var division = _step12.value;
443
+ insertDivisionReferences(division, data, visitedUids);
444
+ }
445
+ } catch (err) {
446
+ _iterator12.e(err);
447
+ } finally {
448
+ _iterator12.f();
282
449
  }
283
450
  }
284
451
 
285
452
  return document;
286
453
  }
287
- export function insertDossierReferences(dossier, data, visitedUids) {
454
+
455
+ function insertDossierReferences(dossier, data, visitedUids) {
288
456
  if (!visitedUids.has(dossier.uid)) {
457
+ var _dossier$actesLegisla;
458
+
289
459
  visitedUids.add(dossier.uid);
290
460
 
291
- for (const acte of dossier.actesLegislatifs ?? []) {
292
- insertActeLegislatifReferences(acte, data, visitedUids);
461
+ var _iterator13 = _createForOfIteratorHelper((_dossier$actesLegisla = dossier.actesLegislatifs) !== null && _dossier$actesLegisla !== void 0 ? _dossier$actesLegisla : []),
462
+ _step13;
463
+
464
+ try {
465
+ for (_iterator13.s(); !(_step13 = _iterator13.n()).done;) {
466
+ var acte = _step13.value;
467
+ insertActeLegislatifReferences(acte, data, visitedUids);
468
+ }
469
+ } catch (err) {
470
+ _iterator13.e(err);
471
+ } finally {
472
+ _iterator13.f();
293
473
  }
294
474
 
295
- const initiateur = dossier.initiateur;
475
+ var initiateur = dossier.initiateur;
296
476
 
297
477
  if (initiateur !== undefined) {
298
478
  if (data.acteurByUid !== undefined) {
299
- for (const acteurSummary of initiateur.acteurs || []) {
300
- const acteur = data.acteurByUid[acteurSummary.acteurRef];
479
+ var _iterator14 = _createForOfIteratorHelper(initiateur.acteurs || []),
480
+ _step14;
301
481
 
302
- if (acteur !== undefined) {
303
- acteurSummary.acteur = acteur;
304
- insertActeurReferences(acteur, data, visitedUids);
305
- }
482
+ try {
483
+ for (_iterator14.s(); !(_step14 = _iterator14.n()).done;) {
484
+ var acteurSummary = _step14.value;
485
+ var acteur = data.acteurByUid[acteurSummary.acteurRef];
306
486
 
307
- if (acteur !== undefined && acteurSummary.mandatRef !== undefined) {
308
- for (const mandat of acteur.mandats || []) {
309
- if (mandat.uid === acteurSummary.mandatRef) {
310
- acteurSummary.mandat = mandat;
311
- break;
487
+ if (acteur !== undefined) {
488
+ acteurSummary.acteur = acteur;
489
+ insertActeurReferences(acteur, data, visitedUids);
490
+ }
491
+
492
+ if (acteur !== undefined && acteurSummary.mandatRef !== undefined) {
493
+ var _iterator15 = _createForOfIteratorHelper(acteur.mandats || []),
494
+ _step15;
495
+
496
+ try {
497
+ for (_iterator15.s(); !(_step15 = _iterator15.n()).done;) {
498
+ var mandat = _step15.value;
499
+
500
+ if (mandat.uid === acteurSummary.mandatRef) {
501
+ acteurSummary.mandat = mandat;
502
+ break;
503
+ }
504
+ }
505
+ } catch (err) {
506
+ _iterator15.e(err);
507
+ } finally {
508
+ _iterator15.f();
312
509
  }
313
510
  }
314
511
  }
512
+ } catch (err) {
513
+ _iterator14.e(err);
514
+ } finally {
515
+ _iterator14.f();
315
516
  }
316
517
  }
317
518
 
318
519
  if (data.organeByUid !== undefined && initiateur.organeRef !== undefined) {
319
- const organe = data.organeByUid[initiateur.organeRef];
520
+ var organe = data.organeByUid[initiateur.organeRef];
320
521
 
321
522
  if (organe !== undefined) {
322
523
  initiateur.organe = organe;
@@ -328,12 +529,13 @@ export function insertDossierReferences(dossier, data, visitedUids) {
328
529
 
329
530
  return dossier;
330
531
  }
331
- export function insertOrganeReferences(organe, data, visitedUids) {
532
+
533
+ function insertOrganeReferences(organe, data, visitedUids) {
332
534
  if (!visitedUids.has(organe.uid)) {
333
535
  visitedUids.add(organe.uid);
334
536
 
335
537
  if (data.organeByUid !== undefined && organe.organeParentRef !== undefined) {
336
- const organeParent = data.organeByUid[organe.organeParentRef];
538
+ var organeParent = data.organeByUid[organe.organeParentRef];
337
539
 
338
540
  if (organeParent !== undefined) {
339
541
  organe.organeParent = organeParent;
@@ -345,28 +547,39 @@ export function insertOrganeReferences(organe, data, visitedUids) {
345
547
 
346
548
  return organe;
347
549
  }
348
- export function insertReunionReferences(reunion, data, visitedUids) {
550
+
551
+ function insertReunionReferences(reunion, data, visitedUids) {
349
552
  if (!visitedUids.has(reunion.uid)) {
350
553
  visitedUids.add(reunion.uid);
351
- const demandeurs = reunion.demandeurs;
554
+ var demandeurs = reunion.demandeurs;
352
555
 
353
556
  if (demandeurs !== undefined) {
354
557
  if (data.acteurByUid !== undefined) {
355
- for (const acteurSummary of demandeurs.acteurs || []) {
356
- const acteur = data.acteurByUid[acteurSummary.acteurRef];
558
+ var _iterator16 = _createForOfIteratorHelper(demandeurs.acteurs || []),
559
+ _step16;
357
560
 
358
- if (acteur !== undefined) {
359
- acteurSummary.acteur = acteur;
360
- insertActeurReferences(acteur, data, visitedUids);
561
+ try {
562
+ for (_iterator16.s(); !(_step16 = _iterator16.n()).done;) {
563
+ var acteurSummary = _step16.value;
564
+ var acteur = data.acteurByUid[acteurSummary.acteurRef];
565
+
566
+ if (acteur !== undefined) {
567
+ acteurSummary.acteur = acteur;
568
+ insertActeurReferences(acteur, data, visitedUids);
569
+ }
361
570
  }
571
+ } catch (err) {
572
+ _iterator16.e(err);
573
+ } finally {
574
+ _iterator16.f();
362
575
  }
363
576
  }
364
577
 
365
578
  if (data.organeByUid !== undefined) {
366
- const organeSummary = demandeurs.organe;
579
+ var organeSummary = demandeurs.organe;
367
580
 
368
581
  if (organeSummary !== undefined) {
369
- const organe = data.organeByUid[organeSummary.organeRef];
582
+ var organe = data.organeByUid[organeSummary.organeRef];
370
583
 
371
584
  if (organe !== undefined) {
372
585
  organeSummary.organe = organe;
@@ -377,7 +590,7 @@ export function insertReunionReferences(reunion, data, visitedUids) {
377
590
  }
378
591
 
379
592
  if (data.organeByUid !== undefined && reunion.organeReuniRef !== undefined) {
380
- const organeReuni = data.organeByUid[reunion.organeReuniRef];
593
+ var organeReuni = data.organeByUid[reunion.organeReuniRef];
381
594
 
382
595
  if (organeReuni !== undefined) {
383
596
  reunion.organeReuni = organeReuni;
@@ -386,16 +599,26 @@ export function insertReunionReferences(reunion, data, visitedUids) {
386
599
  }
387
600
 
388
601
  if (data.acteurByUid !== undefined) {
389
- const participants = reunion.participants;
602
+ var participants = reunion.participants;
390
603
 
391
604
  if (participants !== undefined) {
392
- for (const participantInterne of participants.participantsInternes || []) {
393
- const acteur = data.acteurByUid[participantInterne.acteurRef];
605
+ var _iterator17 = _createForOfIteratorHelper(participants.participantsInternes || []),
606
+ _step17;
394
607
 
395
- if (acteur !== undefined) {
396
- participantInterne.acteur = acteur;
397
- insertActeurReferences(acteur, data, visitedUids);
608
+ try {
609
+ for (_iterator17.s(); !(_step17 = _iterator17.n()).done;) {
610
+ var participantInterne = _step17.value;
611
+ var _acteur = data.acteurByUid[participantInterne.acteurRef];
612
+
613
+ if (_acteur !== undefined) {
614
+ participantInterne.acteur = _acteur;
615
+ insertActeurReferences(_acteur, data, visitedUids);
616
+ }
398
617
  }
618
+ } catch (err) {
619
+ _iterator17.e(err);
620
+ } finally {
621
+ _iterator17.f();
399
622
  }
400
623
  }
401
624
  }
@@ -403,11 +626,12 @@ export function insertReunionReferences(reunion, data, visitedUids) {
403
626
 
404
627
  return reunion;
405
628
  }
406
- export function insertScrutinReferences(scrutin, _data, visitedUids) {
629
+
630
+ function insertScrutinReferences(scrutin, _data, visitedUids) {
407
631
  if (!visitedUids.has(scrutin.uid)) {
408
632
  visitedUids.add(scrutin.uid); // TODO
409
633
  }
410
634
 
411
635
  return scrutin;
412
636
  }
413
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJpbnNlcnRBY3RlTGVnaXNsYXRpZlJlZmVyZW5jZXMiLCJhY3RlIiwiZGF0YSIsInZpc2l0ZWRVaWRzIiwiaGFzIiwidWlkIiwiYWRkIiwiZG9jdW1lbnRCeVVpZCIsInVuZGVmaW5lZCIsImRlcG90SW5pdGlhbExlY3R1cmVEZWZpbml0aXZlUmVmIiwiZG9jdW1lbnQiLCJkZXBvdEluaXRpYWxMZWN0dXJlRGVmaW5pdGl2ZSIsImluc2VydERvY3VtZW50UmVmZXJlbmNlcyIsIm9yZ2FuZUJ5VWlkIiwib3JnYW5lUmVmIiwib3JnYW5lIiwiaW5zZXJ0T3JnYW5lUmVmZXJlbmNlcyIsInByb3ZlbmFuY2VSZWYiLCJwcm92ZW5hbmNlIiwiYWN0ZXVyQnlVaWQiLCJyYXBwb3J0ZXVycyIsInJhcHBvcnRldXIiLCJhY3RldXIiLCJhY3RldXJSZWYiLCJpbnNlcnRBY3RldXJSZWZlcmVuY2VzIiwicmV1bmlvbkJ5VWlkIiwicmV1bmlvblJlZiIsInJldW5pb24iLCJpbnNlcnRSZXVuaW9uUmVmZXJlbmNlcyIsIm9kalJlZiIsIm9kaiIsInBvaW50c09kaiIsInBvaW50T2RqIiwidGV4dGVBZG9wdGVSZWYiLCJ0ZXh0ZUFkb3B0ZSIsInRleHRlQXNzb2NpZVJlZiIsInRleHRlQXNzb2NpZSIsInRleHRlc0Fzc29jaWVzIiwic2NydXRpbkJ5VWlkIiwidm90ZVJlZnMiLCJzY3J1dGlucyIsInZvdGVSZWYiLCJzY3J1dGluIiwicHVzaCIsImluc2VydFNjcnV0aW5SZWZlcmVuY2VzIiwidm90ZXMiLCJjaGlsZEFjdGUiLCJhY3Rlc0xlZ2lzbGF0aWZzIiwibWFuZGF0IiwibWFuZGF0cyIsIm9yZ2FuZXMiLCJvcmdhbmVzUmVmcyIsImluc2VydEFtZW5kZW1lbnRSZWZlcmVuY2VzIiwiYW1lbmRlbWVudCIsInNpZ25hdGFpcmVzIiwiYXV0ZXVyIiwiYXV0ZXVyUmFwcG9ydGV1ck9yZ2FuZVJlZiIsImF1dGV1clJhcHBvcnRldXJPcmdhbmUiLCJnb3V2ZXJuZW1lbnRSZWYiLCJnb3V2ZXJuZW1lbnQiLCJncm91cGVQb2xpdGlxdWVSZWYiLCJncm91cGVQb2xpdGlxdWUiLCJjb3NpZ25hdGFpcmVzUmVmcyIsImNvc2lnbmF0YWlyZXMiLCJjb3NpZ25hdGFpcmVSZWYiLCJjb3NpZ25hdGFpcmUiLCJpbnNlcnREaXZpc2lvblJlZmVyZW5jZXMiLCJkaXZpc2lvbiIsImF1dGV1cnMiLCJhY3RldXJTdW1tYXJ5IiwiZG9zc2llckJ5VWlkIiwiZG9zc2llciIsImRvc3NpZXJSZWYiLCJpbnNlcnREb3NzaWVyUmVmZXJlbmNlcyIsImNoaWxkRGl2aXNpb24iLCJkaXZpc2lvbnMiLCJpbml0aWF0ZXVyIiwiYWN0ZXVycyIsIm1hbmRhdFJlZiIsIm9yZ2FuZVBhcmVudFJlZiIsIm9yZ2FuZVBhcmVudCIsImRlbWFuZGV1cnMiLCJvcmdhbmVTdW1tYXJ5Iiwib3JnYW5lUmV1bmlSZWYiLCJvcmdhbmVSZXVuaSIsInBhcnRpY2lwYW50cyIsInBhcnRpY2lwYW50SW50ZXJuZSIsInBhcnRpY2lwYW50c0ludGVybmVzIiwiX2RhdGEiXSwic291cmNlcyI6WyIuLi9zcmMvaW5zZXJ0ZXJzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFjdGV1ciwgT3JnYW5lIH0gZnJvbSBcIi4vdHlwZXMvYWN0ZXVyc19ldF9vcmdhbmVzXCJcbmltcG9ydCB7IFJldW5pb24gfSBmcm9tIFwiLi90eXBlcy9hZ2VuZGFzXCJcbmltcG9ydCB7IEFtZW5kZW1lbnQgfSBmcm9tIFwiLi90eXBlcy9hbWVuZGVtZW50c1wiXG5pbXBvcnQge1xuICBBY3RlTGVnaXNsYXRpZixcbiAgRGl2aXNpb24sXG4gIERvY3VtZW50LFxuICBEb3NzaWVyUGFybGVtZW50YWlyZSxcbn0gZnJvbSBcIi4vdHlwZXMvZG9zc2llcnNfbGVnaXNsYXRpZnNcIlxuaW1wb3J0IHsgU2NydXRpbiB9IGZyb20gXCIuL3R5cGVzL3NjcnV0aW5zXCJcblxuZXhwb3J0IGludGVyZmFjZSBPdXRwdXREYXRhIHtcbiAgcmVhZG9ubHkgYWN0ZXVyQnlVaWQ/OiB7IFt1aWQ6IHN0cmluZ106IEFjdGV1ciB9XG4gIHJlYWRvbmx5IGFtZW5kZW1lbnRCeVVpZD86IHsgW3VpZDogc3RyaW5nXTogQW1lbmRlbWVudCB9XG4gIHJlYWRvbmx5IGRvY3VtZW50QnlVaWQ/OiB7IFt1aWQ6IHN0cmluZ106IERvY3VtZW50IH1cbiAgcmVhZG9ubHkgZG9zc2llckJ5VWlkPzogeyBbdWlkOiBzdHJpbmddOiBEb3NzaWVyUGFybGVtZW50YWlyZSB9XG4gIHJlYWRvbmx5IG9yZ2FuZUJ5VWlkPzogeyBbdWlkOiBzdHJpbmddOiBPcmdhbmUgfVxuICByZWFkb25seSByZXVuaW9uQnlVaWQ/OiB7IFt1aWQ6IHN0cmluZ106IFJldW5pb24gfVxuICByZWFkb25seSBzY3J1dGluQnlVaWQ/OiB7IFt1aWQ6IHN0cmluZ106IFNjcnV0aW4gfVxufVxuXG5mdW5jdGlvbiBpbnNlcnRBY3RlTGVnaXNsYXRpZlJlZmVyZW5jZXMoXG4gIGFjdGU6IEFjdGVMZWdpc2xhdGlmLFxuICBkYXRhOiBPdXRwdXREYXRhLFxuICB2aXNpdGVkVWlkczogU2V0PHN0cmluZz4sXG4pIHtcbiAgaWYgKCF2aXNpdGVkVWlkcy5oYXMoYWN0ZS51aWQpKSB7XG4gICAgdmlzaXRlZFVpZHMuYWRkKGFjdGUudWlkKVxuXG4gICAgaWYgKFxuICAgICAgZGF0YS5kb2N1bWVudEJ5VWlkICE9PSB1bmRlZmluZWQgJiZcbiAgICAgIGFjdGUuZGVwb3RJbml0aWFsTGVjdHVyZURlZmluaXRpdmVSZWYgIT09IHVuZGVmaW5lZFxuICAgICkge1xuICAgICAgY29uc3QgZG9jdW1lbnQgPSBkYXRhLmRvY3VtZW50QnlVaWRbYWN0ZS5kZXBvdEluaXRpYWxMZWN0dXJlRGVmaW5pdGl2ZVJlZl1cbiAgICAgIGlmIChkb2N1bWVudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGFjdGUuZGVwb3RJbml0aWFsTGVjdHVyZURlZmluaXRpdmUgPSBkb2N1bWVudFxuICAgICAgICBpbnNlcnREb2N1bWVudFJlZmVyZW5jZXMoZG9jdW1lbnQsIGRhdGEsIHZpc2l0ZWRVaWRzKVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoZGF0YS5vcmdhbmVCeVVpZCAhPT0gdW5kZWZpbmVkICYmIGFjdGUub3JnYW5lUmVmICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IG9yZ2FuZSA9IGRhdGEub3JnYW5lQnlVaWRbYWN0ZS5vcmdhbmVSZWZdXG4gICAgICBpZiAob3JnYW5lICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgYWN0ZS5vcmdhbmUgPSBvcmdhbmVcbiAgICAgICAgaW5zZXJ0T3JnYW5lUmVmZXJlbmNlcyhvcmdhbmUsIGRhdGEsIHZpc2l0ZWRVaWRzKVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoZGF0YS5vcmdhbmVCeVVpZCAhPT0gdW5kZWZpbmVkICYmIGFjdGUucHJvdmVuYW5jZVJlZiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCBvcmdhbmUgPSBkYXRhLm9yZ2FuZUJ5VWlkW2FjdGUucHJvdmVuYW5jZVJlZl1cbiAgICAgIGlmIChvcmdhbmUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBhY3RlLnByb3ZlbmFuY2UgPSBvcmdhbmVcbiAgICAgICAgaW5zZXJ0T3JnYW5lUmVmZXJlbmNlcyhvcmdhbmUsIGRhdGEsIHZpc2l0ZWRVaWRzKVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoZGF0YS5hY3RldXJCeVVpZCAhPT0gdW5kZWZpbmVkICYmIGFjdGUucmFwcG9ydGV1cnMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgZm9yIChjb25zdCByYXBwb3J0ZXVyIG9mIGFjdGUucmFwcG9ydGV1cnMpIHtcbiAgICAgICAgY29uc3QgYWN0ZXVyID0gZGF0YS5hY3RldXJCeVVpZFtyYXBwb3J0ZXVyLmFjdGV1clJlZl1cbiAgICAgICAgaWYgKGFjdGV1ciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgcmFwcG9ydGV1ci5hY3RldXIgPSBhY3RldXJcbiAgICAgICAgICBpbnNlcnRBY3RldXJSZWZlcmVuY2VzKGFjdGV1ciwgZGF0YSwgdmlzaXRlZFVpZHMpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGRhdGEucmV1bmlvbkJ5VWlkICE9PSB1bmRlZmluZWQgJiYgYWN0ZS5yZXVuaW9uUmVmICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IHJldW5pb24gPSBkYXRhLnJldW5pb25CeVVpZFthY3RlLnJldW5pb25SZWZdXG4gICAgICBpZiAocmV1bmlvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGFjdGUucmV1bmlvbiA9IHJldW5pb25cbiAgICAgICAgaW5zZXJ0UmV1bmlvblJlZmVyZW5jZXMocmV1bmlvbiwgZGF0YSwgdmlzaXRlZFVpZHMpXG4gICAgICAgIGlmIChhY3RlLm9kalJlZiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgY29uc3Qgb2RqID0gcmV1bmlvbi5vZGpcbiAgICAgICAgICBpZiAob2RqICE9PSB1bmRlZmluZWQgJiYgb2RqLnBvaW50c09kaiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHBvaW50T2RqIG9mIG9kai5wb2ludHNPZGopIHtcbiAgICAgICAgICAgICAgaWYgKHBvaW50T2RqLnVpZCA9PT0gYWN0ZS5vZGpSZWYpIHtcbiAgICAgICAgICAgICAgICBhY3RlLm9kaiA9IHBvaW50T2RqXG4gICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoZGF0YS5kb2N1bWVudEJ5VWlkICE9PSB1bmRlZmluZWQgJiYgYWN0ZS50ZXh0ZUFkb3B0ZVJlZiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCBkb2N1bWVudCA9IGRhdGEuZG9jdW1lbnRCeVVpZFthY3RlLnRleHRlQWRvcHRlUmVmXVxuICAgICAgaWYgKGRvY3VtZW50ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgYWN0ZS50ZXh0ZUFkb3B0ZSA9IGRvY3VtZW50XG4gICAgICAgIGluc2VydERvY3VtZW50UmVmZXJlbmNlcyhkb2N1bWVudCwgZGF0YSwgdmlzaXRlZFVpZHMpXG4gICAgICB9XG4gICAgfVxuICAgIGlmIChcbiAgICAgIGRhdGEuZG9jdW1lbnRCeVVpZCAhPT0gdW5kZWZpbmVkICYmXG4gICAgICBhY3RlLnRleHRlQXNzb2NpZVJlZiAhPT0gdW5kZWZpbmVkXG4gICAgKSB7XG4gICAgICBjb25zdCBkb2N1bWVudCA9IGRhdGEuZG9jdW1lbnRCeVVpZFthY3RlLnRleHRlQXNzb2NpZVJlZl1cbiAgICAgIGlmIChkb2N1bWVudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGFjdGUudGV4dGVBc3NvY2llID0gZG9jdW1lbnRcbiAgICAgICAgaW5zZXJ0RG9jdW1lbnRSZWZlcmVuY2VzKGRvY3VtZW50LCBkYXRhLCB2aXNpdGVkVWlkcylcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGRhdGEuZG9jdW1lbnRCeVVpZCAhPT0gdW5kZWZpbmVkICYmIGFjdGUudGV4dGVzQXNzb2NpZXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgZm9yIChjb25zdCB0ZXh0ZUFzc29jaWUgb2YgYWN0ZS50ZXh0ZXNBc3NvY2llcykge1xuICAgICAgICBjb25zdCBkb2N1bWVudCA9IGRhdGEuZG9jdW1lbnRCeVVpZFt0ZXh0ZUFzc29jaWUudGV4dGVBc3NvY2llUmVmXVxuICAgICAgICBpZiAoZG9jdW1lbnQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHRleHRlQXNzb2NpZS50ZXh0ZUFzc29jaWUgPSBkb2N1bWVudFxuICAgICAgICAgIGluc2VydERvY3VtZW50UmVmZXJlbmNlcyhkb2N1bWVudCwgZGF0YSwgdmlzaXRlZFVpZHMpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGRhdGEuc2NydXRpbkJ5VWlkICE9PSB1bmRlZmluZWQgJiYgYWN0ZS52b3RlUmVmcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCBzY3J1dGlucyA9IFtdXG4gICAgICBmb3IgKGNvbnN0IHZvdGVSZWYgb2YgYWN0ZS52b3RlUmVmcykge1xuICAgICAgICBjb25zdCBzY3J1dGluID0gZGF0YS5zY3J1dGluQnlVaWRbdm90ZVJlZl1cbiAgICAgICAgaWYgKHNjcnV0aW4gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHNjcnV0aW5zLnB1c2goc2NydXRpbilcbiAgICAgICAgICBpbnNlcnRTY3J1dGluUmVmZXJlbmNlcyhzY3J1dGluLCBkYXRhLCB2aXNpdGVkVWlkcylcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgYWN0ZS52b3RlcyA9IHNjcnV0aW5zXG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBjaGlsZEFjdGUgb2YgYWN0ZS5hY3Rlc0xlZ2lzbGF0aWZzIHx8IFtdKSB7XG4gICAgICBpbnNlcnRBY3RlTGVnaXNsYXRpZlJlZmVyZW5jZXMoY2hpbGRBY3RlLCBkYXRhLCB2aXNpdGVkVWlkcylcbiAgICB9XG4gIH1cblxuICByZXR1cm4gYWN0ZVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5zZXJ0QWN0ZXVyUmVmZXJlbmNlcyhcbiAgYWN0ZXVyOiBBY3RldXIsXG4gIGRhdGE6IE91dHB1dERhdGEsXG4gIHZpc2l0ZWRVaWRzOiBTZXQ8c3RyaW5nPixcbikge1xuICBpZiAoIXZpc2l0ZWRVaWRzLmhhcyhhY3RldXIudWlkKSkge1xuICAgIHZpc2l0ZWRVaWRzLmFkZChhY3RldXIudWlkKVxuXG4gICAgaWYgKGRhdGEub3JnYW5lQnlVaWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgZm9yIChjb25zdCBtYW5kYXQgb2YgYWN0ZXVyLm1hbmRhdHMgfHwgW10pIHtcbiAgICAgICAgY29uc3Qgb3JnYW5lcyA9IFtdXG4gICAgICAgIGZvciAoY29uc3Qgb3JnYW5lUmVmIG9mIG1hbmRhdC5vcmdhbmVzUmVmcykge1xuICAgICAgICAgIGNvbnN0IG9yZ2FuZSA9IGRhdGEub3JnYW5lQnlVaWRbb3JnYW5lUmVmXVxuICAgICAgICAgIGlmIChvcmdhbmUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgb3JnYW5lcy5wdXNoKG9yZ2FuZSlcbiAgICAgICAgICAgIGluc2VydE9yZ2FuZVJlZmVyZW5jZXMob3JnYW5lLCBkYXRhLCB2aXNpdGVkVWlkcylcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgbWFuZGF0Lm9yZ2FuZXMgPSBvcmdhbmVzXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGFjdGV1clxufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5zZXJ0QW1lbmRlbWVudFJlZmVyZW5jZXMoXG4gIGFtZW5kZW1lbnQ6IEFtZW5kZW1lbnQsXG4gIGRhdGE6IE91dHB1dERhdGEsXG4gIHZpc2l0ZWRVaWRzOiBTZXQ8c3RyaW5nPixcbikge1xuICBpZiAoIXZpc2l0ZWRVaWRzLmhhcyhhbWVuZGVtZW50LnVpZCkpIHtcbiAgICB2aXNpdGVkVWlkcy5hZGQoYW1lbmRlbWVudC51aWQpXG5cbiAgICBjb25zdCBzaWduYXRhaXJlcyA9IGFtZW5kZW1lbnQuc2lnbmF0YWlyZXNcbiAgICBjb25zdCBhdXRldXIgPSBzaWduYXRhaXJlcy5hdXRldXJcbiAgICBpZiAoZGF0YS5hY3RldXJCeVVpZCAhPT0gdW5kZWZpbmVkICYmIGF1dGV1ci5hY3RldXJSZWYgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgYWN0ZXVyID0gZGF0YS5hY3RldXJCeVVpZFthdXRldXIuYWN0ZXVyUmVmXVxuICAgICAgaWYgKGFjdGV1ciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGF1dGV1ci5hY3RldXIgPSBhY3RldXJcbiAgICAgICAgaW5zZXJ0QWN0ZXVyUmVmZXJlbmNlcyhhY3RldXIsIGRhdGEsIHZpc2l0ZWRVaWRzKVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoXG4gICAgICBkYXRhLm9yZ2FuZUJ5VWlkICE9PSB1bmRlZmluZWQgJiZcbiAgICAgIGF1dGV1ci5hdXRldXJSYXBwb3J0ZXVyT3JnYW5lUmVmICE9PSB1bmRlZmluZWRcbiAgICApIHtcbiAgICAgIGNvbnN0IGF1dGV1clJhcHBvcnRldXJPcmdhbmUgPVxuICAgICAgICBkYXRhLm9yZ2FuZUJ5VWlkW2F1dGV1ci5hdXRldXJSYXBwb3J0ZXVyT3JnYW5lUmVmXVxuICAgICAgaWYgKGF1dGV1clJhcHBvcnRldXJPcmdhbmUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBhdXRldXIuYXV0ZXVyUmFwcG9ydGV1ck9yZ2FuZSA9IGF1dGV1clJhcHBvcnRldXJPcmdhbmVcbiAgICAgICAgaW5zZXJ0T3JnYW5lUmVmZXJlbmNlcyhhdXRldXJSYXBwb3J0ZXVyT3JnYW5lLCBkYXRhLCB2aXNpdGVkVWlkcylcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKFxuICAgICAgZGF0YS5vcmdhbmVCeVVpZCAhPT0gdW5kZWZpbmVkICYmXG4gICAgICBhdXRldXIuZ291dmVybmVtZW50UmVmICE9PSB1bmRlZmluZWRcbiAgICApIHtcbiAgICAgIGNvbnN0IGdvdXZlcm5lbWVudCA9IGRhdGEub3JnYW5lQnlVaWRbYXV0ZXVyLmdvdXZlcm5lbWVudFJlZl1cbiAgICAgIGlmIChnb3V2ZXJuZW1lbnQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBhdXRldXIuZ291dmVybmVtZW50ID0gZ291dmVybmVtZW50XG4gICAgICAgIGluc2VydE9yZ2FuZVJlZmVyZW5jZXMoZ291dmVybmVtZW50LCBkYXRhLCB2aXNpdGVkVWlkcylcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKFxuICAgICAgZGF0YS5vcmdhbmVCeVVpZCAhPT0gdW5kZWZpbmVkICYmXG4gICAgICBhdXRldXIuZ3JvdXBlUG9saXRpcXVlUmVmICE9PSB1bmRlZmluZWRcbiAgICApIHtcbiAgICAgIGNvbnN0IG9yZ2FuZSA9IGRhdGEub3JnYW5lQnlVaWRbYXV0ZXVyLmdyb3VwZVBvbGl0aXF1ZVJlZl1cbiAgICAgIGlmIChvcmdhbmUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBhdXRldXIuZ3JvdXBlUG9saXRpcXVlID0gb3JnYW5lXG4gICAgICAgIGluc2VydE9yZ2FuZVJlZmVyZW5jZXMob3JnYW5lLCBkYXRhLCB2aXNpdGVkVWlkcylcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGRhdGEuYWN0ZXVyQnlVaWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgY29zaWduYXRhaXJlc1JlZnMgPSBzaWduYXRhaXJlcy5jb3NpZ25hdGFpcmVzUmVmc1xuICAgICAgaWYgKGNvc2lnbmF0YWlyZXNSZWZzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29uc3QgY29zaWduYXRhaXJlcyA9IFtdXG4gICAgICAgIGZvciAoY29uc3QgY29zaWduYXRhaXJlUmVmIG9mIHNpZ25hdGFpcmVzLmNvc2lnbmF0YWlyZXNSZWZzIHx8IFtdKSB7XG4gICAgICAgICAgY29uc3QgY29zaWduYXRhaXJlID0gZGF0YS5hY3RldXJCeVVpZFtjb3NpZ25hdGFpcmVSZWZdXG4gICAgICAgICAgaWYgKGNvc2lnbmF0YWlyZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBjb3NpZ25hdGFpcmVzLnB1c2goY29zaWduYXRhaXJlKVxuICAgICAgICAgICAgaW5zZXJ0QWN0ZXVyUmVmZXJlbmNlcyhjb3NpZ25hdGFpcmUsIGRhdGEsIHZpc2l0ZWRVaWRzKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBzaWduYXRhaXJlcy5jb3NpZ25hdGFpcmVzID0gY29zaWduYXRhaXJlc1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBhbWVuZGVtZW50XG59XG5cbmZ1bmN0aW9uIGluc2VydERpdmlzaW9uUmVmZXJlbmNlcyhcbiAgZGl2aXNpb246IERpdmlzaW9uLFxuICBkYXRhOiBPdXRwdXREYXRhLFxuICB2aXNpdGVkVWlkczogU2V0PHN0cmluZz4sXG4pIHtcbiAgZm9yIChjb25zdCBhdXRldXIgb2YgZGl2aXNpb24uYXV0ZXVycykge1xuICAgIGNvbnN0IGFjdGV1clN1bW1hcnkgPSBhdXRldXIuYWN0ZXVyXG4gICAgaWYgKGRhdGEuYWN0ZXVyQnlVaWQgIT09IHVuZGVmaW5lZCAmJiBhY3RldXJTdW1tYXJ5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IGFjdGV1ciA9IGRhdGEuYWN0ZXVyQnlVaWRbYWN0ZXVyU3VtbWFyeS5hY3RldXJSZWZdXG4gICAgICBpZiAoYWN0ZXVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgYWN0ZXVyU3VtbWFyeS5hY3RldXIgPSBhY3RldXJcbiAgICAgICAgaW5zZXJ0QWN0ZXVyUmVmZXJlbmNlcyhhY3RldXIsIGRhdGEsIHZpc2l0ZWRVaWRzKVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChkYXRhLm9yZ2FuZUJ5VWlkICE9PSB1bmRlZmluZWQgJiYgYXV0ZXVyLm9yZ2FuZVJlZiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCBvcmdhbmUgPSBkYXRhLm9yZ2FuZUJ5VWlkW2F1dGV1ci5vcmdhbmVSZWZdXG4gICAgICBpZiAob3JnYW5lICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgYXV0ZXVyLm9yZ2FuZSA9IG9yZ2FuZVxuICAgICAgICBpbnNlcnRPcmdhbmVSZWZlcmVuY2VzKG9yZ2FuZSwgZGF0YSwgdmlzaXRlZFVpZHMpXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKGRhdGEuZG9zc2llckJ5VWlkICE9PSB1bmRlZmluZWQpIHtcbiAgICBjb25zdCBkb3NzaWVyID0gZGF0YS5kb3NzaWVyQnlVaWRbZGl2aXNpb24uZG9zc2llclJlZl1cbiAgICBpZiAoZG9zc2llciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBkaXZpc2lvbi5kb3NzaWVyID0gZG9zc2llclxuICAgICAgaW5zZXJ0RG9zc2llclJlZmVyZW5jZXMoZG9zc2llciwgZGF0YSwgdmlzaXRlZFVpZHMpXG4gICAgfVxuICB9XG5cbiAgZm9yIChjb25zdCBjaGlsZERpdmlzaW9uIG9mIGRpdmlzaW9uLmRpdmlzaW9ucyB8fCBbXSkge1xuICAgIGluc2VydERpdmlzaW9uUmVmZXJlbmNlcyhjaGlsZERpdmlzaW9uLCBkYXRhLCB2aXNpdGVkVWlkcylcbiAgfVxuXG4gIHJldHVybiBkaXZpc2lvblxufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5zZXJ0RG9jdW1lbnRSZWZlcmVuY2VzKFxuICBkb2N1bWVudDogRG9jdW1lbnQsXG4gIGRhdGE6IE91dHB1dERhdGEsXG4gIHZpc2l0ZWRVaWRzOiBTZXQ8c3RyaW5nPixcbikge1xuICBpZiAoIXZpc2l0ZWRVaWRzLmhhcyhkb2N1bWVudC51aWQpKSB7XG4gICAgdmlzaXRlZFVpZHMuYWRkKGRvY3VtZW50LnVpZClcblxuICAgIGZvciAoY29uc3QgYXV0ZXVyIG9mIGRvY3VtZW50LmF1dGV1cnMpIHtcbiAgICAgIGNvbnN0IGFjdGV1clN1bW1hcnkgPSBhdXRldXIuYWN0ZXVyXG4gICAgICBpZiAoZGF0YS5hY3RldXJCeVVpZCAhPT0gdW5kZWZpbmVkICYmIGFjdGV1clN1bW1hcnkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb25zdCBhY3RldXIgPSBkYXRhLmFjdGV1ckJ5VWlkW2FjdGV1clN1bW1hcnkuYWN0ZXVyUmVmXVxuICAgICAgICBpZiAoYWN0ZXVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBhY3RldXJTdW1tYXJ5LmFjdGV1ciA9IGFjdGV1clxuICAgICAgICAgIGluc2VydEFjdGV1clJlZmVyZW5jZXMoYWN0ZXVyLCBkYXRhLCB2aXNpdGVkVWlkcylcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoZGF0YS5vcmdhbmVCeVVpZCAhPT0gdW5kZWZpbmVkICYmIGF1dGV1ci5vcmdhbmVSZWYgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb25zdCBvcmdhbmUgPSBkYXRhLm9yZ2FuZUJ5VWlkW2F1dGV1ci5vcmdhbmVSZWZdXG4gICAgICAgIGlmIChvcmdhbmUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGF1dGV1ci5vcmdhbmUgPSBvcmdhbmVcbiAgICAgICAgICBpbnNlcnRPcmdhbmVSZWZlcmVuY2VzKG9yZ2FuZSwgZGF0YSwgdmlzaXRlZFVpZHMpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZGF0YS5kb3NzaWVyQnlVaWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgZG9zc2llciA9IGRhdGEuZG9zc2llckJ5VWlkW2RvY3VtZW50LmRvc3NpZXJSZWZdXG4gICAgICBpZiAoZG9zc2llciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGRvY3VtZW50LmRvc3NpZXIgPSBkb3NzaWVyXG4gICAgICAgIGluc2VydERvc3NpZXJSZWZlcmVuY2VzKGRvc3NpZXIsIGRhdGEsIHZpc2l0ZWRVaWRzKVxuICAgICAgfVxuICAgIH1cblxuICAgIGZvciAoY29uc3QgZGl2aXNpb24gb2YgZG9jdW1lbnQuZGl2aXNpb25zIHx8IFtdKSB7XG4gICAgICBpbnNlcnREaXZpc2lvblJlZmVyZW5jZXMoZGl2aXNpb24sIGRhdGEsIHZpc2l0ZWRVaWRzKVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBkb2N1bWVudFxufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5zZXJ0RG9zc2llclJlZmVyZW5jZXMoXG4gIGRvc3NpZXI6IERvc3NpZXJQYXJsZW1lbnRhaXJlLFxuICBkYXRhOiBPdXRwdXREYXRhLFxuICB2aXNpdGVkVWlkczogU2V0PHN0cmluZz4sXG4pIHtcbiAgaWYgKCF2aXNpdGVkVWlkcy5oYXMoZG9zc2llci51aWQpKSB7XG4gICAgdmlzaXRlZFVpZHMuYWRkKGRvc3NpZXIudWlkKVxuXG4gICAgZm9yIChjb25zdCBhY3RlIG9mIGRvc3NpZXIuYWN0ZXNMZWdpc2xhdGlmcyA/PyBbXSkge1xuICAgICAgaW5zZXJ0QWN0ZUxlZ2lzbGF0aWZSZWZlcmVuY2VzKGFjdGUsIGRhdGEsIHZpc2l0ZWRVaWRzKVxuICAgIH1cblxuICAgIGNvbnN0IGluaXRpYXRldXIgPSBkb3NzaWVyLmluaXRpYXRldXJcbiAgICBpZiAoaW5pdGlhdGV1ciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAoZGF0YS5hY3RldXJCeVVpZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGZvciAoY29uc3QgYWN0ZXVyU3VtbWFyeSBvZiBpbml0aWF0ZXVyLmFjdGV1cnMgfHwgW10pIHtcbiAgICAgICAgICBjb25zdCBhY3RldXIgPSBkYXRhLmFjdGV1ckJ5VWlkW2FjdGV1clN1bW1hcnkuYWN0ZXVyUmVmXVxuICAgICAgICAgIGlmIChhY3RldXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgYWN0ZXVyU3VtbWFyeS5hY3RldXIgPSBhY3RldXJcbiAgICAgICAgICAgIGluc2VydEFjdGV1clJlZmVyZW5jZXMoYWN0ZXVyLCBkYXRhLCB2aXNpdGVkVWlkcylcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGFjdGV1ciAhPT0gdW5kZWZpbmVkICYmIGFjdGV1clN1bW1hcnkubWFuZGF0UmVmICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgbWFuZGF0IG9mIGFjdGV1ci5tYW5kYXRzIHx8IFtdKSB7XG4gICAgICAgICAgICAgIGlmIChtYW5kYXQudWlkID09PSBhY3RldXJTdW1tYXJ5Lm1hbmRhdFJlZikge1xuICAgICAgICAgICAgICAgIGFjdGV1clN1bW1hcnkubWFuZGF0ID0gbWFuZGF0XG4gICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKFxuICAgICAgICBkYXRhLm9yZ2FuZUJ5VWlkICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgaW5pdGlhdGV1ci5vcmdhbmVSZWYgIT09IHVuZGVmaW5lZFxuICAgICAgKSB7XG4gICAgICAgIGNvbnN0IG9yZ2FuZSA9IGRhdGEub3JnYW5lQnlVaWRbaW5pdGlhdGV1ci5vcmdhbmVSZWZdXG4gICAgICAgIGlmIChvcmdhbmUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGluaXRpYXRldXIub3JnYW5lID0gb3JnYW5lXG4gICAgICAgICAgaW5zZXJ0T3JnYW5lUmVmZXJlbmNlcyhvcmdhbmUsIGRhdGEsIHZpc2l0ZWRVaWRzKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGRvc3NpZXJcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGluc2VydE9yZ2FuZVJlZmVyZW5jZXMoXG4gIG9yZ2FuZTogT3JnYW5lLFxuICBkYXRhOiBPdXRwdXREYXRhLFxuICB2aXNpdGVkVWlkczogU2V0PHN0cmluZz4sXG4pIHtcbiAgaWYgKCF2aXNpdGVkVWlkcy5oYXMob3JnYW5lLnVpZCkpIHtcbiAgICB2aXNpdGVkVWlkcy5hZGQob3JnYW5lLnVpZClcblxuICAgIGlmIChcbiAgICAgIGRhdGEub3JnYW5lQnlVaWQgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgb3JnYW5lLm9yZ2FuZVBhcmVudFJlZiAhPT0gdW5kZWZpbmVkXG4gICAgKSB7XG4gICAgICBjb25zdCBvcmdhbmVQYXJlbnQgPSBkYXRhLm9yZ2FuZUJ5VWlkW29yZ2FuZS5vcmdhbmVQYXJlbnRSZWZdXG4gICAgICBpZiAob3JnYW5lUGFyZW50ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgb3JnYW5lLm9yZ2FuZVBhcmVudCA9IG9yZ2FuZVBhcmVudFxuICAgICAgICBpbnNlcnRPcmdhbmVSZWZlcmVuY2VzKG9yZ2FuZVBhcmVudCwgZGF0YSwgdmlzaXRlZFVpZHMpXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gVE9ET1xuICB9XG5cbiAgcmV0dXJuIG9yZ2FuZVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5zZXJ0UmV1bmlvblJlZmVyZW5jZXMoXG4gIHJldW5pb246IFJldW5pb24sXG4gIGRhdGE6IE91dHB1dERhdGEsXG4gIHZpc2l0ZWRVaWRzOiBTZXQ8c3RyaW5nPixcbikge1xuICBpZiAoIXZpc2l0ZWRVaWRzLmhhcyhyZXVuaW9uLnVpZCkpIHtcbiAgICB2aXNpdGVkVWlkcy5hZGQocmV1bmlvbi51aWQpXG5cbiAgICBjb25zdCBkZW1hbmRldXJzID0gcmV1bmlvbi5kZW1hbmRldXJzXG4gICAgaWYgKGRlbWFuZGV1cnMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKGRhdGEuYWN0ZXVyQnlVaWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBmb3IgKGNvbnN0IGFjdGV1clN1bW1hcnkgb2YgZGVtYW5kZXVycy5hY3RldXJzIHx8IFtdKSB7XG4gICAgICAgICAgY29uc3QgYWN0ZXVyID0gZGF0YS5hY3RldXJCeVVpZFthY3RldXJTdW1tYXJ5LmFjdGV1clJlZl1cbiAgICAgICAgICBpZiAoYWN0ZXVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGFjdGV1clN1bW1hcnkuYWN0ZXVyID0gYWN0ZXVyXG4gICAgICAgICAgICBpbnNlcnRBY3RldXJSZWZlcmVuY2VzKGFjdGV1ciwgZGF0YSwgdmlzaXRlZFVpZHMpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoZGF0YS5vcmdhbmVCeVVpZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnN0IG9yZ2FuZVN1bW1hcnkgPSBkZW1hbmRldXJzLm9yZ2FuZVxuICAgICAgICBpZiAob3JnYW5lU3VtbWFyeSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgY29uc3Qgb3JnYW5lID0gZGF0YS5vcmdhbmVCeVVpZFtvcmdhbmVTdW1tYXJ5Lm9yZ2FuZVJlZl1cbiAgICAgICAgICBpZiAob3JnYW5lICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIG9yZ2FuZVN1bW1hcnkub3JnYW5lID0gb3JnYW5lXG4gICAgICAgICAgICBpbnNlcnRPcmdhbmVSZWZlcmVuY2VzKG9yZ2FuZSwgZGF0YSwgdmlzaXRlZFVpZHMpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChcbiAgICAgIGRhdGEub3JnYW5lQnlVaWQgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgcmV1bmlvbi5vcmdhbmVSZXVuaVJlZiAhPT0gdW5kZWZpbmVkXG4gICAgKSB7XG4gICAgICBjb25zdCBvcmdhbmVSZXVuaSA9IGRhdGEub3JnYW5lQnlVaWRbcmV1bmlvbi5vcmdhbmVSZXVuaVJlZl1cbiAgICAgIGlmIChvcmdhbmVSZXVuaSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldW5pb24ub3JnYW5lUmV1bmkgPSBvcmdhbmVSZXVuaVxuICAgICAgICBpbnNlcnRPcmdhbmVSZWZlcmVuY2VzKG9yZ2FuZVJldW5pLCBkYXRhLCB2aXNpdGVkVWlkcylcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGRhdGEuYWN0ZXVyQnlVaWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgcGFydGljaXBhbnRzID0gcmV1bmlvbi5wYXJ0aWNpcGFudHNcbiAgICAgIGlmIChwYXJ0aWNpcGFudHMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBmb3IgKGNvbnN0IHBhcnRpY2lwYW50SW50ZXJuZSBvZiBwYXJ0aWNpcGFudHMucGFydGljaXBhbnRzSW50ZXJuZXMgfHxcbiAgICAgICAgICBbXSkge1xuICAgICAgICAgIGNvbnN0IGFjdGV1ciA9IGRhdGEuYWN0ZXVyQnlVaWRbcGFydGljaXBhbnRJbnRlcm5lLmFjdGV1clJlZl1cbiAgICAgICAgICBpZiAoYWN0ZXVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHBhcnRpY2lwYW50SW50ZXJuZS5hY3RldXIgPSBhY3RldXJcbiAgICAgICAgICAgIGluc2VydEFjdGV1clJlZmVyZW5jZXMoYWN0ZXVyLCBkYXRhLCB2aXNpdGVkVWlkcylcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gcmV1bmlvblxufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5zZXJ0U2NydXRpblJlZmVyZW5jZXMoXG4gIHNjcnV0aW46IFNjcnV0aW4sXG4gIF9kYXRhOiBPdXRwdXREYXRhLFxuICB2aXNpdGVkVWlkczogU2V0PHN0cmluZz4sXG4pIHtcbiAgaWYgKCF2aXNpdGVkVWlkcy5oYXMoc2NydXRpbi51aWQpKSB7XG4gICAgdmlzaXRlZFVpZHMuYWRkKHNjcnV0aW4udWlkKVxuXG4gICAgLy8gVE9ET1xuICB9XG5cbiAgcmV0dXJuIHNjcnV0aW5cbn1cbiJdLCJtYXBwaW5ncyI6IkFBcUJBLFNBQVNBLDhCQUFULENBQ0VDLElBREYsRUFFRUMsSUFGRixFQUdFQyxXQUhGLEVBSUU7RUFDQSxJQUFJLENBQUNBLFdBQVcsQ0FBQ0MsR0FBWixDQUFnQkgsSUFBSSxDQUFDSSxHQUFyQixDQUFMLEVBQWdDO0lBQzlCRixXQUFXLENBQUNHLEdBQVosQ0FBZ0JMLElBQUksQ0FBQ0ksR0FBckI7O0lBRUEsSUFDRUgsSUFBSSxDQUFDSyxhQUFMLEtBQXVCQyxTQUF2QixJQUNBUCxJQUFJLENBQUNRLGdDQUFMLEtBQTBDRCxTQUY1QyxFQUdFO01BQ0EsTUFBTUUsUUFBUSxHQUFHUixJQUFJLENBQUNLLGFBQUwsQ0FBbUJOLElBQUksQ0FBQ1EsZ0NBQXhCLENBQWpCOztNQUNBLElBQUlDLFFBQVEsS0FBS0YsU0FBakIsRUFBNEI7UUFDMUJQLElBQUksQ0FBQ1UsNkJBQUwsR0FBcUNELFFBQXJDO1FBQ0FFLHdCQUF3QixDQUFDRixRQUFELEVBQVdSLElBQVgsRUFBaUJDLFdBQWpCLENBQXhCO01BQ0Q7SUFDRjs7SUFDRCxJQUFJRCxJQUFJLENBQUNXLFdBQUwsS0FBcUJMLFNBQXJCLElBQWtDUCxJQUFJLENBQUNhLFNBQUwsS0FBbUJOLFNBQXpELEVBQW9FO01BQ2xFLE1BQU1PLE1BQU0sR0FBR2IsSUFBSSxDQUFDVyxXQUFMLENBQWlCWixJQUFJLENBQUNhLFNBQXRCLENBQWY7O01BQ0EsSUFBSUMsTUFBTSxLQUFLUCxTQUFmLEVBQTBCO1FBQ3hCUCxJQUFJLENBQUNjLE1BQUwsR0FBY0EsTUFBZDtRQUNBQyxzQkFBc0IsQ0FBQ0QsTUFBRCxFQUFTYixJQUFULEVBQWVDLFdBQWYsQ0FBdEI7TUFDRDtJQUNGOztJQUNELElBQUlELElBQUksQ0FBQ1csV0FBTCxLQUFxQkws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
637
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJpbnNlcnRBY3RlTGVnaXNsYXRpZlJlZmVyZW5jZXMiLCJhY3RlIiwiZGF0YSIsInZpc2l0ZWRVaWRzIiwiaGFzIiwidWlkIiwiYWRkIiwiZG9jdW1lbnRCeVVpZCIsInVuZGVmaW5lZCIsImRlcG90SW5pdGlhbExlY3R1cmVEZWZpbml0aXZlUmVmIiwiZG9jdW1lbnQiLCJkZXBvdEluaXRpYWxMZWN0dXJlRGVmaW5pdGl2ZSIsImluc2VydERvY3VtZW50UmVmZXJlbmNlcyIsIm9yZ2FuZUJ5VWlkIiwib3JnYW5lUmVmIiwib3JnYW5lIiwiaW5zZXJ0T3JnYW5lUmVmZXJlbmNlcyIsInByb3ZlbmFuY2VSZWYiLCJwcm92ZW5hbmNlIiwiYWN0ZXVyQnlVaWQiLCJyYXBwb3J0ZXVycyIsInJhcHBvcnRldXIiLCJhY3RldXIiLCJhY3RldXJSZWYiLCJpbnNlcnRBY3RldXJSZWZlcmVuY2VzIiwicmV1bmlvbkJ5VWlkIiwicmV1bmlvblJlZiIsInJldW5pb24iLCJpbnNlcnRSZXVuaW9uUmVmZXJlbmNlcyIsIm9kalJlZiIsIm9kaiIsInBvaW50c09kaiIsInBvaW50T2RqIiwidGV4dGVBZG9wdGVSZWYiLCJ0ZXh0ZUFkb3B0ZSIsInRleHRlQXNzb2NpZVJlZiIsInRleHRlQXNzb2NpZSIsInRleHRlc0Fzc29jaWVzIiwic2NydXRpbkJ5VWlkIiwidm90ZVJlZnMiLCJzY3J1dGlucyIsInZvdGVSZWYiLCJzY3J1dGluIiwicHVzaCIsImluc2VydFNjcnV0aW5SZWZlcmVuY2VzIiwidm90ZXMiLCJhY3Rlc0xlZ2lzbGF0aWZzIiwiY2hpbGRBY3RlIiwibWFuZGF0cyIsIm1hbmRhdCIsIm9yZ2FuZXMiLCJvcmdhbmVzUmVmcyIsImluc2VydEFtZW5kZW1lbnRSZWZlcmVuY2VzIiwiYW1lbmRlbWVudCIsInNpZ25hdGFpcmVzIiwiYXV0ZXVyIiwiYXV0ZXVyUmFwcG9ydGV1ck9yZ2FuZVJlZiIsImF1dGV1clJhcHBvcnRldXJPcmdhbmUiLCJnb3V2ZXJuZW1lbnRSZWYiLCJnb3V2ZXJuZW1lbnQiLCJncm91cGVQb2xpdGlxdWVSZWYiLCJncm91cGVQb2xpdGlxdWUiLCJjb3NpZ25hdGFpcmVzUmVmcyIsImNvc2lnbmF0YWlyZXMiLCJjb3NpZ25hdGFpcmVSZWYiLCJjb3NpZ25hdGFpcmUiLCJpbnNlcnREaXZpc2lvblJlZmVyZW5jZXMiLCJkaXZpc2lvbiIsImF1dGV1cnMiLCJhY3RldXJTdW1tYXJ5IiwiZG9zc2llckJ5VWlkIiwiZG9zc2llciIsImRvc3NpZXJSZWYiLCJpbnNlcnREb3NzaWVyUmVmZXJlbmNlcyIsImRpdmlzaW9ucyIsImNoaWxkRGl2aXNpb24iLCJpbml0aWF0ZXVyIiwiYWN0ZXVycyIsIm1hbmRhdFJlZiIsIm9yZ2FuZVBhcmVudFJlZiIsIm9yZ2FuZVBhcmVudCIsImRlbWFuZGV1cnMiLCJvcmdhbmVTdW1tYXJ5Iiwib3JnYW5lUmV1bmlSZWYiLCJvcmdhbmVSZXVuaSIsInBhcnRpY2lwYW50cyIsInBhcnRpY2lwYW50c0ludGVybmVzIiwicGFydGljaXBhbnRJbnRlcm5lIiwiX2RhdGEiXSwic291cmNlcyI6WyIuLi9zcmMvaW5zZXJ0ZXJzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFjdGV1ciwgT3JnYW5lIH0gZnJvbSBcIi4vdHlwZXMvYWN0ZXVyc19ldF9vcmdhbmVzXCJcbmltcG9ydCB7IFJldW5pb24gfSBmcm9tIFwiLi90eXBlcy9hZ2VuZGFzXCJcbmltcG9ydCB7IEFtZW5kZW1lbnQgfSBmcm9tIFwiLi90eXBlcy9hbWVuZGVtZW50c1wiXG5pbXBvcnQge1xuICBBY3RlTGVnaXNsYXRpZixcbiAgRGl2aXNpb24sXG4gIERvY3VtZW50LFxuICBEb3NzaWVyUGFybGVtZW50YWlyZSxcbn0gZnJvbSBcIi4vdHlwZXMvZG9zc2llcnNfbGVnaXNsYXRpZnNcIlxuaW1wb3J0IHsgU2NydXRpbiB9IGZyb20gXCIuL3R5cGVzL3NjcnV0aW5zXCJcblxuZXhwb3J0IGludGVyZmFjZSBPdXRwdXREYXRhIHtcbiAgcmVhZG9ubHkgYWN0ZXVyQnlVaWQ/OiB7IFt1aWQ6IHN0cmluZ106IEFjdGV1ciB9XG4gIHJlYWRvbmx5IGFtZW5kZW1lbnRCeVVpZD86IHsgW3VpZDogc3RyaW5nXTogQW1lbmRlbWVudCB9XG4gIHJlYWRvbmx5IGRvY3VtZW50QnlVaWQ/OiB7IFt1aWQ6IHN0cmluZ106IERvY3VtZW50IH1cbiAgcmVhZG9ubHkgZG9zc2llckJ5VWlkPzogeyBbdWlkOiBzdHJpbmddOiBEb3NzaWVyUGFybGVtZW50YWlyZSB9XG4gIHJlYWRvbmx5IG9yZ2FuZUJ5VWlkPzogeyBbdWlkOiBzdHJpbmddOiBPcmdhbmUgfVxuICByZWFkb25seSByZXVuaW9uQnlVaWQ/OiB7IFt1aWQ6IHN0cmluZ106IFJldW5pb24gfVxuICByZWFkb25seSBzY3J1dGluQnlVaWQ/OiB7IFt1aWQ6IHN0cmluZ106IFNjcnV0aW4gfVxufVxuXG5mdW5jdGlvbiBpbnNlcnRBY3RlTGVnaXNsYXRpZlJlZmVyZW5jZXMoXG4gIGFjdGU6IEFjdGVMZWdpc2xhdGlmLFxuICBkYXRhOiBPdXRwdXREYXRhLFxuICB2aXNpdGVkVWlkczogU2V0PHN0cmluZz4sXG4pIHtcbiAgaWYgKCF2aXNpdGVkVWlkcy5oYXMoYWN0ZS51aWQpKSB7XG4gICAgdmlzaXRlZFVpZHMuYWRkKGFjdGUudWlkKVxuXG4gICAgaWYgKFxuICAgICAgZGF0YS5kb2N1bWVudEJ5VWlkICE9PSB1bmRlZmluZWQgJiZcbiAgICAgIGFjdGUuZGVwb3RJbml0aWFsTGVjdHVyZURlZmluaXRpdmVSZWYgIT09IHVuZGVmaW5lZFxuICAgICkge1xuICAgICAgY29uc3QgZG9jdW1lbnQgPSBkYXRhLmRvY3VtZW50QnlVaWRbYWN0ZS5kZXBvdEluaXRpYWxMZWN0dXJlRGVmaW5pdGl2ZVJlZl1cbiAgICAgIGlmIChkb2N1bWVudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGFjdGUuZGVwb3RJbml0aWFsTGVjdHVyZURlZmluaXRpdmUgPSBkb2N1bWVudFxuICAgICAgICBpbnNlcnREb2N1bWVudFJlZmVyZW5jZXMoZG9jdW1lbnQsIGRhdGEsIHZpc2l0ZWRVaWRzKVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoZGF0YS5vcmdhbmVCeVVpZCAhPT0gdW5kZWZpbmVkICYmIGFjdGUub3JnYW5lUmVmICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IG9yZ2FuZSA9IGRhdGEub3JnYW5lQnlVaWRbYWN0ZS5vcmdhbmVSZWZdXG4gICAgICBpZiAob3JnYW5lICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgYWN0ZS5vcmdhbmUgPSBvcmdhbmVcbiAgICAgICAgaW5zZXJ0T3JnYW5lUmVmZXJlbmNlcyhvcmdhbmUsIGRhdGEsIHZpc2l0ZWRVaWRzKVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoZGF0YS5vcmdhbmVCeVVpZCAhPT0gdW5kZWZpbmVkICYmIGFjdGUucHJvdmVuYW5jZVJlZiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCBvcmdhbmUgPSBkYXRhLm9yZ2FuZUJ5VWlkW2FjdGUucHJvdmVuYW5jZVJlZl1cbiAgICAgIGlmIChvcmdhbmUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBhY3RlLnByb3ZlbmFuY2UgPSBvcmdhbmVcbiAgICAgICAgaW5zZXJ0T3JnYW5lUmVmZXJlbmNlcyhvcmdhbmUsIGRhdGEsIHZpc2l0ZWRVaWRzKVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoZGF0YS5hY3RldXJCeVVpZCAhPT0gdW5kZWZpbmVkICYmIGFjdGUucmFwcG9ydGV1cnMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgZm9yIChjb25zdCByYXBwb3J0ZXVyIG9mIGFjdGUucmFwcG9ydGV1cnMpIHtcbiAgICAgICAgY29uc3QgYWN0ZXVyID0gZGF0YS5hY3RldXJCeVVpZFtyYXBwb3J0ZXVyLmFjdGV1clJlZl1cbiAgICAgICAgaWYgKGFjdGV1ciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgcmFwcG9ydGV1ci5hY3RldXIgPSBhY3RldXJcbiAgICAgICAgICBpbnNlcnRBY3RldXJSZWZlcmVuY2VzKGFjdGV1ciwgZGF0YSwgdmlzaXRlZFVpZHMpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGRhdGEucmV1bmlvbkJ5VWlkICE9PSB1bmRlZmluZWQgJiYgYWN0ZS5yZXVuaW9uUmVmICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IHJldW5pb24gPSBkYXRhLnJldW5pb25CeVVpZFthY3RlLnJldW5pb25SZWZdXG4gICAgICBpZiAocmV1bmlvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGFjdGUucmV1bmlvbiA9IHJldW5pb25cbiAgICAgICAgaW5zZXJ0UmV1bmlvblJlZmVyZW5jZXMocmV1bmlvbiwgZGF0YSwgdmlzaXRlZFVpZHMpXG4gICAgICAgIGlmIChhY3RlLm9kalJlZiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgY29uc3Qgb2RqID0gcmV1bmlvbi5vZGpcbiAgICAgICAgICBpZiAob2RqICE9PSB1bmRlZmluZWQgJiYgb2RqLnBvaW50c09kaiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHBvaW50T2RqIG9mIG9kai5wb2ludHNPZGopIHtcbiAgICAgICAgICAgICAgaWYgKHBvaW50T2RqLnVpZCA9PT0gYWN0ZS5vZGpSZWYpIHtcbiAgICAgICAgICAgICAgICBhY3RlLm9kaiA9IHBvaW50T2RqXG4gICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoZGF0YS5kb2N1bWVudEJ5VWlkICE9PSB1bmRlZmluZWQgJiYgYWN0ZS50ZXh0ZUFkb3B0ZVJlZiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCBkb2N1bWVudCA9IGRhdGEuZG9jdW1lbnRCeVVpZFthY3RlLnRleHRlQWRvcHRlUmVmXVxuICAgICAgaWYgKGRvY3VtZW50ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgYWN0ZS50ZXh0ZUFkb3B0ZSA9IGRvY3VtZW50XG4gICAgICAgIGluc2VydERvY3VtZW50UmVmZXJlbmNlcyhkb2N1bWVudCwgZGF0YSwgdmlzaXRlZFVpZHMpXG4gICAgICB9XG4gICAgfVxuICAgIGlmIChcbiAgICAgIGRhdGEuZG9jdW1lbnRCeVVpZCAhPT0gdW5kZWZpbmVkICYmXG4gICAgICBhY3RlLnRleHRlQXNzb2NpZVJlZiAhPT0gdW5kZWZpbmVkXG4gICAgKSB7XG4gICAgICBjb25zdCBkb2N1bWVudCA9IGRhdGEuZG9jdW1lbnRCeVVpZFthY3RlLnRleHRlQXNzb2NpZVJlZl1cbiAgICAgIGlmIChkb2N1bWVudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGFjdGUudGV4dGVBc3NvY2llID0gZG9jdW1lbnRcbiAgICAgICAgaW5zZXJ0RG9jdW1lbnRSZWZlcmVuY2VzKGRvY3VtZW50LCBkYXRhLCB2aXNpdGVkVWlkcylcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGRhdGEuZG9jdW1lbnRCeVVpZCAhPT0gdW5kZWZpbmVkICYmIGFjdGUudGV4dGVzQXNzb2NpZXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgZm9yIChjb25zdCB0ZXh0ZUFzc29jaWUgb2YgYWN0ZS50ZXh0ZXNBc3NvY2llcykge1xuICAgICAgICBjb25zdCBkb2N1bWVudCA9IGRhdGEuZG9jdW1lbnRCeVVpZFt0ZXh0ZUFzc29jaWUudGV4dGVBc3NvY2llUmVmXVxuICAgICAgICBpZiAoZG9jdW1lbnQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHRleHRlQXNzb2NpZS50ZXh0ZUFzc29jaWUgPSBkb2N1bWVudFxuICAgICAgICAgIGluc2VydERvY3VtZW50UmVmZXJlbmNlcyhkb2N1bWVudCwgZGF0YSwgdmlzaXRlZFVpZHMpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGRhdGEuc2NydXRpbkJ5VWlkICE9PSB1bmRlZmluZWQgJiYgYWN0ZS52b3RlUmVmcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCBzY3J1dGlucyA9IFtdXG4gICAgICBmb3IgKGNvbnN0IHZvdGVSZWYgb2YgYWN0ZS52b3RlUmVmcykge1xuICAgICAgICBjb25zdCBzY3J1dGluID0gZGF0YS5zY3J1dGluQnlVaWRbdm90ZVJlZl1cbiAgICAgICAgaWYgKHNjcnV0aW4gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHNjcnV0aW5zLnB1c2goc2NydXRpbilcbiAgICAgICAgICBpbnNlcnRTY3J1dGluUmVmZXJlbmNlcyhzY3J1dGluLCBkYXRhLCB2aXNpdGVkVWlkcylcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgYWN0ZS52b3RlcyA9IHNjcnV0aW5zXG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBjaGlsZEFjdGUgb2YgYWN0ZS5hY3Rlc0xlZ2lzbGF0aWZzIHx8IFtdKSB7XG4gICAgICBpbnNlcnRBY3RlTGVnaXNsYXRpZlJlZmVyZW5jZXMoY2hpbGRBY3RlLCBkYXRhLCB2aXNpdGVkVWlkcylcbiAgICB9XG4gIH1cblxuICByZXR1cm4gYWN0ZVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5zZXJ0QWN0ZXVyUmVmZXJlbmNlcyhcbiAgYWN0ZXVyOiBBY3RldXIsXG4gIGRhdGE6IE91dHB1dERhdGEsXG4gIHZpc2l0ZWRVaWRzOiBTZXQ8c3RyaW5nPixcbikge1xuICBpZiAoIXZpc2l0ZWRVaWRzLmhhcyhhY3RldXIudWlkKSkge1xuICAgIHZpc2l0ZWRVaWRzLmFkZChhY3RldXIudWlkKVxuXG4gICAgaWYgKGRhdGEub3JnYW5lQnlVaWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgZm9yIChjb25zdCBtYW5kYXQgb2YgYWN0ZXVyLm1hbmRhdHMgfHwgW10pIHtcbiAgICAgICAgY29uc3Qgb3JnYW5lcyA9IFtdXG4gICAgICAgIGZvciAoY29uc3Qgb3JnYW5lUmVmIG9mIG1hbmRhdC5vcmdhbmVzUmVmcykge1xuICAgICAgICAgIGNvbnN0IG9yZ2FuZSA9IGRhdGEub3JnYW5lQnlVaWRbb3JnYW5lUmVmXVxuICAgICAgICAgIGlmIChvcmdhbmUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgb3JnYW5lcy5wdXNoKG9yZ2FuZSlcbiAgICAgICAgICAgIGluc2VydE9yZ2FuZVJlZmVyZW5jZXMob3JnYW5lLCBkYXRhLCB2aXNpdGVkVWlkcylcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgbWFuZGF0Lm9yZ2FuZXMgPSBvcmdhbmVzXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGFjdGV1clxufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5zZXJ0QW1lbmRlbWVudFJlZmVyZW5jZXMoXG4gIGFtZW5kZW1lbnQ6IEFtZW5kZW1lbnQsXG4gIGRhdGE6IE91dHB1dERhdGEsXG4gIHZpc2l0ZWRVaWRzOiBTZXQ8c3RyaW5nPixcbikge1xuICBpZiAoIXZpc2l0ZWRVaWRzLmhhcyhhbWVuZGVtZW50LnVpZCkpIHtcbiAgICB2aXNpdGVkVWlkcy5hZGQoYW1lbmRlbWVudC51aWQpXG5cbiAgICBjb25zdCBzaWduYXRhaXJlcyA9IGFtZW5kZW1lbnQuc2lnbmF0YWlyZXNcbiAgICBjb25zdCBhdXRldXIgPSBzaWduYXRhaXJlcy5hdXRldXJcbiAgICBpZiAoZGF0YS5hY3RldXJCeVVpZCAhPT0gdW5kZWZpbmVkICYmIGF1dGV1ci5hY3RldXJSZWYgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgYWN0ZXVyID0gZGF0YS5hY3RldXJCeVVpZFthdXRldXIuYWN0ZXVyUmVmXVxuICAgICAgaWYgKGFjdGV1ciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGF1dGV1ci5hY3RldXIgPSBhY3RldXJcbiAgICAgICAgaW5zZXJ0QWN0ZXVyUmVmZXJlbmNlcyhhY3RldXIsIGRhdGEsIHZpc2l0ZWRVaWRzKVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoXG4gICAgICBkYXRhLm9yZ2FuZUJ5VWlkICE9PSB1bmRlZmluZWQgJiZcbiAgICAgIGF1dGV1ci5hdXRldXJSYXBwb3J0ZXVyT3JnYW5lUmVmICE9PSB1bmRlZmluZWRcbiAgICApIHtcbiAgICAgIGNvbnN0IGF1dGV1clJhcHBvcnRldXJPcmdhbmUgPVxuICAgICAgICBkYXRhLm9yZ2FuZUJ5VWlkW2F1dGV1ci5hdXRldXJSYXBwb3J0ZXVyT3JnYW5lUmVmXVxuICAgICAgaWYgKGF1dGV1clJhcHBvcnRldXJPcmdhbmUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBhdXRldXIuYXV0ZXVyUmFwcG9ydGV1ck9yZ2FuZSA9IGF1dGV1clJhcHBvcnRldXJPcmdhbmVcbiAgICAgICAgaW5zZXJ0T3JnYW5lUmVmZXJlbmNlcyhhdXRldXJSYXBwb3J0ZXVyT3JnYW5lLCBkYXRhLCB2aXNpdGVkVWlkcylcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKFxuICAgICAgZGF0YS5vcmdhbmVCeVVpZCAhPT0gdW5kZWZpbmVkICYmXG4gICAgICBhdXRldXIuZ291dmVybmVtZW50UmVmICE9PSB1bmRlZmluZWRcbiAgICApIHtcbiAgICAgIGNvbnN0IGdvdXZlcm5lbWVudCA9IGRhdGEub3JnYW5lQnlVaWRbYXV0ZXVyLmdvdXZlcm5lbWVudFJlZl1cbiAgICAgIGlmIChnb3V2ZXJuZW1lbnQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBhdXRldXIuZ291dmVybmVtZW50ID0gZ291dmVybmVtZW50XG4gICAgICAgIGluc2VydE9yZ2FuZVJlZmVyZW5jZXMoZ291dmVybmVtZW50LCBkYXRhLCB2aXNpdGVkVWlkcylcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKFxuICAgICAgZGF0YS5vcmdhbmVCeVVpZCAhPT0gdW5kZWZpbmVkICYmXG4gICAgICBhdXRldXIuZ3JvdXBlUG9saXRpcXVlUmVmICE9PSB1bmRlZmluZWRcbiAgICApIHtcbiAgICAgIGNvbnN0IG9yZ2FuZSA9IGRhdGEub3JnYW5lQnlVaWRbYXV0ZXVyLmdyb3VwZVBvbGl0aXF1ZVJlZl1cbiAgICAgIGlmIChvcmdhbmUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBhdXRldXIuZ3JvdXBlUG9saXRpcXVlID0gb3JnYW5lXG4gICAgICAgIGluc2VydE9yZ2FuZVJlZmVyZW5jZXMob3JnYW5lLCBkYXRhLCB2aXNpdGVkVWlkcylcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGRhdGEuYWN0ZXVyQnlVaWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgY29zaWduYXRhaXJlc1JlZnMgPSBzaWduYXRhaXJlcy5jb3NpZ25hdGFpcmVzUmVmc1xuICAgICAgaWYgKGNvc2lnbmF0YWlyZXNSZWZzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29uc3QgY29zaWduYXRhaXJlcyA9IFtdXG4gICAgICAgIGZvciAoY29uc3QgY29zaWduYXRhaXJlUmVmIG9mIHNpZ25hdGFpcmVzLmNvc2lnbmF0YWlyZXNSZWZzIHx8IFtdKSB7XG4gICAgICAgICAgY29uc3QgY29zaWduYXRhaXJlID0gZGF0YS5hY3RldXJCeVVpZFtjb3NpZ25hdGFpcmVSZWZdXG4gICAgICAgICAgaWYgKGNvc2lnbmF0YWlyZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBjb3NpZ25hdGFpcmVzLnB1c2goY29zaWduYXRhaXJlKVxuICAgICAgICAgICAgaW5zZXJ0QWN0ZXVyUmVmZXJlbmNlcyhjb3NpZ25hdGFpcmUsIGRhdGEsIHZpc2l0ZWRVaWRzKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBzaWduYXRhaXJlcy5jb3NpZ25hdGFpcmVzID0gY29zaWduYXRhaXJlc1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBhbWVuZGVtZW50XG59XG5cbmZ1bmN0aW9uIGluc2VydERpdmlzaW9uUmVmZXJlbmNlcyhcbiAgZGl2aXNpb246IERpdmlzaW9uLFxuICBkYXRhOiBPdXRwdXREYXRhLFxuICB2aXNpdGVkVWlkczogU2V0PHN0cmluZz4sXG4pIHtcbiAgZm9yIChjb25zdCBhdXRldXIgb2YgZGl2aXNpb24uYXV0ZXVycykge1xuICAgIGNvbnN0IGFjdGV1clN1bW1hcnkgPSBhdXRldXIuYWN0ZXVyXG4gICAgaWYgKGRhdGEuYWN0ZXVyQnlVaWQgIT09IHVuZGVmaW5lZCAmJiBhY3RldXJTdW1tYXJ5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IGFjdGV1ciA9IGRhdGEuYWN0ZXVyQnlVaWRbYWN0ZXVyU3VtbWFyeS5hY3RldXJSZWZdXG4gICAgICBpZiAoYWN0ZXVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgYWN0ZXVyU3VtbWFyeS5hY3RldXIgPSBhY3RldXJcbiAgICAgICAgaW5zZXJ0QWN0ZXVyUmVmZXJlbmNlcyhhY3RldXIsIGRhdGEsIHZpc2l0ZWRVaWRzKVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChkYXRhLm9yZ2FuZUJ5VWlkICE9PSB1bmRlZmluZWQgJiYgYXV0ZXVyLm9yZ2FuZVJlZiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCBvcmdhbmUgPSBkYXRhLm9yZ2FuZUJ5VWlkW2F1dGV1ci5vcmdhbmVSZWZdXG4gICAgICBpZiAob3JnYW5lICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgYXV0ZXVyLm9yZ2FuZSA9IG9yZ2FuZVxuICAgICAgICBpbnNlcnRPcmdhbmVSZWZlcmVuY2VzKG9yZ2FuZSwgZGF0YSwgdmlzaXRlZFVpZHMpXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKGRhdGEuZG9zc2llckJ5VWlkICE9PSB1bmRlZmluZWQpIHtcbiAgICBjb25zdCBkb3NzaWVyID0gZGF0YS5kb3NzaWVyQnlVaWRbZGl2aXNpb24uZG9zc2llclJlZl1cbiAgICBpZiAoZG9zc2llciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBkaXZpc2lvbi5kb3NzaWVyID0gZG9zc2llclxuICAgICAgaW5zZXJ0RG9zc2llclJlZmVyZW5jZXMoZG9zc2llciwgZGF0YSwgdmlzaXRlZFVpZHMpXG4gICAgfVxuICB9XG5cbiAgZm9yIChjb25zdCBjaGlsZERpdmlzaW9uIG9mIGRpdmlzaW9uLmRpdmlzaW9ucyB8fCBbXSkge1xuICAgIGluc2VydERpdmlzaW9uUmVmZXJlbmNlcyhjaGlsZERpdmlzaW9uLCBkYXRhLCB2aXNpdGVkVWlkcylcbiAgfVxuXG4gIHJldHVybiBkaXZpc2lvblxufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5zZXJ0RG9jdW1lbnRSZWZlcmVuY2VzKFxuICBkb2N1bWVudDogRG9jdW1lbnQsXG4gIGRhdGE6IE91dHB1dERhdGEsXG4gIHZpc2l0ZWRVaWRzOiBTZXQ8c3RyaW5nPixcbikge1xuICBpZiAoIXZpc2l0ZWRVaWRzLmhhcyhkb2N1bWVudC51aWQpKSB7XG4gICAgdmlzaXRlZFVpZHMuYWRkKGRvY3VtZW50LnVpZClcblxuICAgIGZvciAoY29uc3QgYXV0ZXVyIG9mIGRvY3VtZW50LmF1dGV1cnMpIHtcbiAgICAgIGNvbnN0IGFjdGV1clN1bW1hcnkgPSBhdXRldXIuYWN0ZXVyXG4gICAgICBpZiAoZGF0YS5hY3RldXJCeVVpZCAhPT0gdW5kZWZpbmVkICYmIGFjdGV1clN1bW1hcnkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb25zdCBhY3RldXIgPSBkYXRhLmFjdGV1ckJ5VWlkW2FjdGV1clN1bW1hcnkuYWN0ZXVyUmVmXVxuICAgICAgICBpZiAoYWN0ZXVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBhY3RldXJTdW1tYXJ5LmFjdGV1ciA9IGFjdGV1clxuICAgICAgICAgIGluc2VydEFjdGV1clJlZmVyZW5jZXMoYWN0ZXVyLCBkYXRhLCB2aXNpdGVkVWlkcylcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoZGF0YS5vcmdhbmVCeVVpZCAhPT0gdW5kZWZpbmVkICYmIGF1dGV1ci5vcmdhbmVSZWYgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb25zdCBvcmdhbmUgPSBkYXRhLm9yZ2FuZUJ5VWlkW2F1dGV1ci5vcmdhbmVSZWZdXG4gICAgICAgIGlmIChvcmdhbmUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGF1dGV1ci5vcmdhbmUgPSBvcmdhbmVcbiAgICAgICAgICBpbnNlcnRPcmdhbmVSZWZlcmVuY2VzKG9yZ2FuZSwgZGF0YSwgdmlzaXRlZFVpZHMpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZGF0YS5kb3NzaWVyQnlVaWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgZG9zc2llciA9IGRhdGEuZG9zc2llckJ5VWlkW2RvY3VtZW50LmRvc3NpZXJSZWZdXG4gICAgICBpZiAoZG9zc2llciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGRvY3VtZW50LmRvc3NpZXIgPSBkb3NzaWVyXG4gICAgICAgIGluc2VydERvc3NpZXJSZWZlcmVuY2VzKGRvc3NpZXIsIGRhdGEsIHZpc2l0ZWRVaWRzKVxuICAgICAgfVxuICAgIH1cblxuICAgIGZvciAoY29uc3QgZGl2aXNpb24gb2YgZG9jdW1lbnQuZGl2aXNpb25zIHx8IFtdKSB7XG4gICAgICBpbnNlcnREaXZpc2lvblJlZmVyZW5jZXMoZGl2aXNpb24sIGRhdGEsIHZpc2l0ZWRVaWRzKVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBkb2N1bWVudFxufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5zZXJ0RG9zc2llclJlZmVyZW5jZXMoXG4gIGRvc3NpZXI6IERvc3NpZXJQYXJsZW1lbnRhaXJlLFxuICBkYXRhOiBPdXRwdXREYXRhLFxuICB2aXNpdGVkVWlkczogU2V0PHN0cmluZz4sXG4pIHtcbiAgaWYgKCF2aXNpdGVkVWlkcy5oYXMoZG9zc2llci51aWQpKSB7XG4gICAgdmlzaXRlZFVpZHMuYWRkKGRvc3NpZXIudWlkKVxuXG4gICAgZm9yIChjb25zdCBhY3RlIG9mIGRvc3NpZXIuYWN0ZXNMZWdpc2xhdGlmcyA/PyBbXSkge1xuICAgICAgaW5zZXJ0QWN0ZUxlZ2lzbGF0aWZSZWZlcmVuY2VzKGFjdGUsIGRhdGEsIHZpc2l0ZWRVaWRzKVxuICAgIH1cblxuICAgIGNvbnN0IGluaXRpYXRldXIgPSBkb3NzaWVyLmluaXRpYXRldXJcbiAgICBpZiAoaW5pdGlhdGV1ciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAoZGF0YS5hY3RldXJCeVVpZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGZvciAoY29uc3QgYWN0ZXVyU3VtbWFyeSBvZiBpbml0aWF0ZXVyLmFjdGV1cnMgfHwgW10pIHtcbiAgICAgICAgICBjb25zdCBhY3RldXIgPSBkYXRhLmFjdGV1ckJ5VWlkW2FjdGV1clN1bW1hcnkuYWN0ZXVyUmVmXVxuICAgICAgICAgIGlmIChhY3RldXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgYWN0ZXVyU3VtbWFyeS5hY3RldXIgPSBhY3RldXJcbiAgICAgICAgICAgIGluc2VydEFjdGV1clJlZmVyZW5jZXMoYWN0ZXVyLCBkYXRhLCB2aXNpdGVkVWlkcylcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGFjdGV1ciAhPT0gdW5kZWZpbmVkICYmIGFjdGV1clN1bW1hcnkubWFuZGF0UmVmICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgbWFuZGF0IG9mIGFjdGV1ci5tYW5kYXRzIHx8IFtdKSB7XG4gICAgICAgICAgICAgIGlmIChtYW5kYXQudWlkID09PSBhY3RldXJTdW1tYXJ5Lm1hbmRhdFJlZikge1xuICAgICAgICAgICAgICAgIGFjdGV1clN1bW1hcnkubWFuZGF0ID0gbWFuZGF0XG4gICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKFxuICAgICAgICBkYXRhLm9yZ2FuZUJ5VWlkICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgaW5pdGlhdGV1ci5vcmdhbmVSZWYgIT09IHVuZGVmaW5lZFxuICAgICAgKSB7XG4gICAgICAgIGNvbnN0IG9yZ2FuZSA9IGRhdGEub3JnYW5lQnlVaWRbaW5pdGlhdGV1ci5vcmdhbmVSZWZdXG4gICAgICAgIGlmIChvcmdhbmUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGluaXRpYXRldXIub3JnYW5lID0gb3JnYW5lXG4gICAgICAgICAgaW5zZXJ0T3JnYW5lUmVmZXJlbmNlcyhvcmdhbmUsIGRhdGEsIHZpc2l0ZWRVaWRzKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGRvc3NpZXJcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGluc2VydE9yZ2FuZVJlZmVyZW5jZXMoXG4gIG9yZ2FuZTogT3JnYW5lLFxuICBkYXRhOiBPdXRwdXREYXRhLFxuICB2aXNpdGVkVWlkczogU2V0PHN0cmluZz4sXG4pIHtcbiAgaWYgKCF2aXNpdGVkVWlkcy5oYXMob3JnYW5lLnVpZCkpIHtcbiAgICB2aXNpdGVkVWlkcy5hZGQob3JnYW5lLnVpZClcblxuICAgIGlmIChcbiAgICAgIGRhdGEub3JnYW5lQnlVaWQgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgb3JnYW5lLm9yZ2FuZVBhcmVudFJlZiAhPT0gdW5kZWZpbmVkXG4gICAgKSB7XG4gICAgICBjb25zdCBvcmdhbmVQYXJlbnQgPSBkYXRhLm9yZ2FuZUJ5VWlkW29yZ2FuZS5vcmdhbmVQYXJlbnRSZWZdXG4gICAgICBpZiAob3JnYW5lUGFyZW50ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgb3JnYW5lLm9yZ2FuZVBhcmVudCA9IG9yZ2FuZVBhcmVudFxuICAgICAgICBpbnNlcnRPcmdhbmVSZWZlcmVuY2VzKG9yZ2FuZVBhcmVudCwgZGF0YSwgdmlzaXRlZFVpZHMpXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gVE9ET1xuICB9XG5cbiAgcmV0dXJuIG9yZ2FuZVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5zZXJ0UmV1bmlvblJlZmVyZW5jZXMoXG4gIHJldW5pb246IFJldW5pb24sXG4gIGRhdGE6IE91dHB1dERhdGEsXG4gIHZpc2l0ZWRVaWRzOiBTZXQ8c3RyaW5nPixcbikge1xuICBpZiAoIXZpc2l0ZWRVaWRzLmhhcyhyZXVuaW9uLnVpZCkpIHtcbiAgICB2aXNpdGVkVWlkcy5hZGQocmV1bmlvbi51aWQpXG5cbiAgICBjb25zdCBkZW1hbmRldXJzID0gcmV1bmlvbi5kZW1hbmRldXJzXG4gICAgaWYgKGRlbWFuZGV1cnMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKGRhdGEuYWN0ZXVyQnlVaWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBmb3IgKGNvbnN0IGFjdGV1clN1bW1hcnkgb2YgZGVtYW5kZXVycy5hY3RldXJzIHx8IFtdKSB7XG4gICAgICAgICAgY29uc3QgYWN0ZXVyID0gZGF0YS5hY3RldXJCeVVpZFthY3RldXJTdW1tYXJ5LmFjdGV1clJlZl1cbiAgICAgICAgICBpZiAoYWN0ZXVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGFjdGV1clN1bW1hcnkuYWN0ZXVyID0gYWN0ZXVyXG4gICAgICAgICAgICBpbnNlcnRBY3RldXJSZWZlcmVuY2VzKGFjdGV1ciwgZGF0YSwgdmlzaXRlZFVpZHMpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoZGF0YS5vcmdhbmVCeVVpZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnN0IG9yZ2FuZVN1bW1hcnkgPSBkZW1hbmRldXJzLm9yZ2FuZVxuICAgICAgICBpZiAob3JnYW5lU3VtbWFyeSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgY29uc3Qgb3JnYW5lID0gZGF0YS5vcmdhbmVCeVVpZFtvcmdhbmVTdW1tYXJ5Lm9yZ2FuZVJlZl1cbiAgICAgICAgICBpZiAob3JnYW5lICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIG9yZ2FuZVN1bW1hcnkub3JnYW5lID0gb3JnYW5lXG4gICAgICAgICAgICBpbnNlcnRPcmdhbmVSZWZlcmVuY2VzKG9yZ2FuZSwgZGF0YSwgdmlzaXRlZFVpZHMpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChcbiAgICAgIGRhdGEub3JnYW5lQnlVaWQgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgcmV1bmlvbi5vcmdhbmVSZXVuaVJlZiAhPT0gdW5kZWZpbmVkXG4gICAgKSB7XG4gICAgICBjb25zdCBvcmdhbmVSZXVuaSA9IGRhdGEub3JnYW5lQnlVaWRbcmV1bmlvbi5vcmdhbmVSZXVuaVJlZl1cbiAgICAgIGlmIChvcmdhbmVSZXVuaSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldW5pb24ub3JnYW5lUmV1bmkgPSBvcmdhbmVSZXVuaVxuICAgICAgICBpbnNlcnRPcmdhbmVSZWZlcmVuY2VzKG9yZ2FuZVJldW5pLCBkYXRhLCB2aXNpdGVkVWlkcylcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGRhdGEuYWN0ZXVyQnlVaWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgcGFydGljaXBhbnRzID0gcmV1bmlvbi5wYXJ0aWNpcGFudHNcbiAgICAgIGlmIChwYXJ0aWNpcGFudHMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBmb3IgKGNvbnN0IHBhcnRpY2lwYW50SW50ZXJuZSBvZiBwYXJ0aWNpcGFudHMucGFydGljaXBhbnRzSW50ZXJuZXMgfHxcbiAgICAgICAgICBbXSkge1xuICAgICAgICAgIGNvbnN0IGFjdGV1ciA9IGRhdGEuYWN0ZXVyQnlVaWRbcGFydGljaXBhbnRJbnRlcm5lLmFjdGV1clJlZl1cbiAgICAgICAgICBpZiAoYWN0ZXVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHBhcnRpY2lwYW50SW50ZXJuZS5hY3RldXIgPSBhY3RldXJcbiAgICAgICAgICAgIGluc2VydEFjdGV1clJlZmVyZW5jZXMoYWN0ZXVyLCBkYXRhLCB2aXNpdGVkVWlkcylcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gcmV1bmlvblxufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5zZXJ0U2NydXRpblJlZmVyZW5jZXMoXG4gIHNjcnV0aW46IFNjcnV0aW4sXG4gIF9kYXRhOiBPdXRwdXREYXRhLFxuICB2aXNpdGVkVWlkczogU2V0PHN0cmluZz4sXG4pIHtcbiAgaWYgKCF2aXNpdGVkVWlkcy5oYXMoc2NydXRpbi51aWQpKSB7XG4gICAgdmlzaXRlZFVpZHMuYWRkKHNjcnV0aW4udWlkKVxuXG4gICAgLy8gVE9ET1xuICB9XG5cbiAgcmV0dXJuIHNjcnV0aW5cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBcUJBLFNBQVNBLDhCQUFULENBQ0VDLElBREYsRUFFRUMsSUFGRixFQUdFQyxXQUhGLEVBSUU7RUFDQSxJQUFJLENBQUNBLFdBQVcsQ0FBQ0MsR0FBWixDQUFnQkgsSUFBSSxDQUFDSSxHQUFyQixDQUFMLEVBQWdDO0lBQzlCRixXQUFXLENBQUNHLEdBQVosQ0FBZ0JMLElBQUksQ0FBQ0ksR0FBckI7O0lBRUEsSUFDRUgsSUFBSSxDQUFDSyxhQUFMLEtBQXVCQyxTQUF2QixJQUNBUCxJQUFJLENBQUNRLGdDQUFMLEtBQTBDRCxTQUY1QyxFQUdFO01BQ0EsSUFBTUUsUUFBUSxHQUFHUixJQUFJLENBQUNLLGFBQUwsQ0FBbUJOLElBQUksQ0FBQ1EsZ0NBQXhCLENBQWpCOztNQUNBLElBQUlDLFFBQVEsS0FBS0YsU0FBakIsRUFBNEI7UUFDMUJQLElBQUksQ0FBQ1UsNkJBQUwsR0FBcUNELFFBQXJDO1FBQ0FFLHdCQUF3QixDQUFDRixRQUFELEVBQVdSLElBQVgsRUFBaUJDLFdBQWpCLENBQXhCO01BQ0Q7SUFDRjs7SUFDRCxJQUFJRCxJQUFJLENBQUNXLFdBQUwsS0FBcUJMLFNBQXJCLElBQWtDUCxJQUFJLENBQUNhLFNBQUwsS0FBbUJOLFNBQXpELEVBQW9FO01BQ2xFLElBQU1PLE1BQU0sR0FBR2IsSUFBSSxDQUFDVyxXQUFMLENBQWlCWixJQUFJLENBQUNhLFNBQXRCLENBQWY7O01BQ0EsSUFBSUMsTUFBTSxLQUFLUCxTQUFmLEVBQTBCO1FBQ3hCUCxJQUFJLENBQUNjLE1BQUwsR0FBY0EsTUFBZDtRQUNBQyxzQkFBc0IsQ0FBQ0QsTUFBRCxFQUFTYixJQUFULEVBQWVDLFdBQWYsQ0FBdEI7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