@tricoteuses/assemblee 1.1.9 → 1.1.11

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 (129) hide show
  1. package/LICENSE.md +5 -1
  2. package/README.md +69 -178
  3. package/lib/bugs/acteur-00010/plugin.test.js +1 -1
  4. package/lib/bugs/agenda-00002/plugin.test.js +1 -1
  5. package/lib/bugs/agenda-00002/plugin.test.mjs +1 -1
  6. package/lib/bugs/agenda-00002.js +3 -3
  7. package/lib/bugs/agenda-00002.mjs +2 -2
  8. package/lib/bugs/agenda-00008/plugin.test.js +1 -1
  9. package/lib/bugs/agenda-00011/plugin.test.js +1 -1
  10. package/lib/bugs/agenda-00011/plugin.test.mjs +1 -1
  11. package/lib/bugs/agenda-00011.js +1 -1
  12. package/lib/bugs/agenda-00011.mjs +1 -1
  13. package/lib/bugs.js +1 -1
  14. package/lib/bugs.mjs +1 -1
  15. package/lib/cleaners/acteurs.js +1 -1
  16. package/lib/cleaners/acteurs.mjs +1 -1
  17. package/lib/cleaners/amendements.js +1 -1
  18. package/lib/cleaners/amendements.mjs +1 -1
  19. package/lib/cleaners/debats.d.ts +1 -0
  20. package/lib/cleaners/debats.js +12 -0
  21. package/lib/cleaners/debats.mjs +5 -0
  22. package/lib/cleaners/index.d.ts +2 -0
  23. package/lib/cleaners/index.js +15 -1
  24. package/lib/cleaners/index.mjs +3 -1
  25. package/lib/cleaners/questions.d.ts +1 -0
  26. package/lib/cleaners/questions.js +12 -0
  27. package/lib/cleaners/questions.mjs +5 -0
  28. package/lib/cleaners/reunions.js +1 -1
  29. package/lib/cleaners/reunions.mjs +1 -1
  30. package/lib/cleaners/xml.js +12 -6
  31. package/lib/cleaners/xml.mjs +12 -6
  32. package/lib/datasets.d.ts +5 -1
  33. package/lib/datasets.js +62 -4
  34. package/lib/datasets.mjs +62 -4
  35. package/lib/dates.js +1 -1
  36. package/lib/dates.mjs +1 -1
  37. package/lib/dossiers_legislatifs.js +1 -1
  38. package/lib/dossiers_legislatifs.mjs +1 -1
  39. package/lib/file_systems.js +4 -4
  40. package/lib/file_systems.mjs +2 -2
  41. package/lib/git.js +1 -1
  42. package/lib/git.mjs +1 -1
  43. package/lib/loaders.d.ts +21 -0
  44. package/lib/loaders.js +608 -202
  45. package/lib/loaders.mjs +200 -3
  46. package/lib/organes.js +1 -1
  47. package/lib/organes.mjs +1 -1
  48. package/lib/parsers/documents.js +1 -1
  49. package/lib/parsers/documents.mjs +1 -1
  50. package/lib/parsers/recherche_amendements.js +3 -2
  51. package/lib/parsers/recherche_amendements.mjs +1 -1
  52. package/lib/raw_types/acteurs_et_organes.js +1 -1
  53. package/lib/raw_types/acteurs_et_organes.mjs +1 -1
  54. package/lib/raw_types/agendas.js +1 -1
  55. package/lib/raw_types/agendas.mjs +1 -1
  56. package/lib/raw_types/amendements.d.ts +2 -0
  57. package/lib/raw_types/amendements.js +5 -3
  58. package/lib/raw_types/amendements.mjs +5 -3
  59. package/lib/raw_types/debats.d.ts +190 -0
  60. package/lib/raw_types/debats.js +816 -0
  61. package/lib/raw_types/debats.mjs +758 -0
  62. package/lib/raw_types/dossiers_legislatifs.js +11 -2
  63. package/lib/raw_types/dossiers_legislatifs.mjs +1 -1
  64. package/lib/raw_types/questions.d.ts +129 -0
  65. package/lib/raw_types/questions.js +497 -0
  66. package/lib/raw_types/questions.mjs +439 -0
  67. package/lib/raw_types/scrutins.js +1 -1
  68. package/lib/raw_types/scrutins.mjs +1 -1
  69. package/lib/scripts/bugs_helper.js +1 -1
  70. package/lib/scripts/bugs_helper.mjs +1 -1
  71. package/lib/scripts/clean_reorganized_data.js +174 -24
  72. package/lib/scripts/clean_reorganized_data.mjs +127 -13
  73. package/lib/scripts/diff_amendements.js +1 -1
  74. package/lib/scripts/diff_amendements.mjs +1 -1
  75. package/lib/scripts/document_dossiers_legislatifs.js +1 -1
  76. package/lib/scripts/document_dossiers_legislatifs.mjs +1 -1
  77. package/lib/scripts/get_today_reunions.js +1 -1
  78. package/lib/scripts/get_today_reunions.mjs +1 -1
  79. package/lib/scripts/merge_scrutins.js +1 -1
  80. package/lib/scripts/merge_scrutins.mjs +1 -1
  81. package/lib/scripts/parse_textes_lois.js +4 -3
  82. package/lib/scripts/parse_textes_lois.mjs +1 -1
  83. package/lib/scripts/raw_types_from_amendements.js +1 -1
  84. package/lib/scripts/raw_types_from_amendements.mjs +1 -1
  85. package/lib/scripts/reorganize_data.js +189 -7
  86. package/lib/scripts/reorganize_data.mjs +136 -8
  87. package/lib/scripts/retrieve_deputes_photos.js +7 -1
  88. package/lib/scripts/retrieve_deputes_photos.mjs +7 -1
  89. package/lib/scripts/retrieve_documents.js +1 -1
  90. package/lib/scripts/retrieve_documents.mjs +1 -1
  91. package/lib/scripts/retrieve_open_data.js +105 -37
  92. package/lib/scripts/retrieve_open_data.mjs +34 -2
  93. package/lib/scripts/retrieve_pending_amendments.js +7 -1
  94. package/lib/scripts/retrieve_pending_amendments.mjs +7 -1
  95. package/lib/scripts/retrieve_senateurs_photos.js +10 -2
  96. package/lib/scripts/retrieve_senateurs_photos.mjs +7 -1
  97. package/lib/scripts/retrieve_textes_lois.js +1 -1
  98. package/lib/scripts/retrieve_textes_lois.mjs +1 -1
  99. package/lib/scripts/test_load.js +1 -1
  100. package/lib/scripts/test_load.mjs +1 -1
  101. package/lib/scripts/test_load_big_files.js +1 -1
  102. package/lib/scripts/test_load_big_files.mjs +1 -1
  103. package/lib/scripts/validate_json.js +1 -1
  104. package/lib/scripts/validate_json.mjs +1 -1
  105. package/lib/strings.js +1 -1
  106. package/lib/strings.mjs +1 -1
  107. package/lib/types/acteurs_et_organes.js +1 -1
  108. package/lib/types/acteurs_et_organes.mjs +1 -1
  109. package/lib/types/agendas.js +1 -1
  110. package/lib/types/agendas.mjs +1 -1
  111. package/lib/types/amendements.d.ts +2 -0
  112. package/lib/types/amendements.js +5 -3
  113. package/lib/types/amendements.mjs +5 -3
  114. package/lib/types/debats.d.ts +184 -0
  115. package/lib/types/debats.js +805 -0
  116. package/lib/types/debats.mjs +747 -0
  117. package/lib/types/dossiers_legislatifs.js +11 -2
  118. package/lib/types/dossiers_legislatifs.mjs +1 -1
  119. package/lib/types/questions.d.ts +122 -0
  120. package/lib/types/questions.js +482 -0
  121. package/lib/types/questions.mjs +424 -0
  122. package/lib/types/scrutins.js +1 -1
  123. package/lib/types/scrutins.mjs +1 -1
  124. package/lib/urls.js +1 -1
  125. package/lib/urls.mjs +1 -1
  126. package/package.json +14 -6
  127. package/lib/scripts/clean_data.d.ts +0 -1
  128. package/lib/scripts/clean_data.js +0 -309
  129. package/lib/scripts/clean_data.mjs +0 -171
@@ -1,309 +0,0 @@
1
- "use strict";
2
-
3
- require("core-js/modules/es.array.slice.js");
4
- require("core-js/modules/es.function.name.js");
5
- require("core-js/modules/es.array.from.js");
6
- require("core-js/modules/es.string.iterator.js");
7
- require("core-js/modules/es.symbol.js");
8
- require("core-js/modules/es.symbol.description.js");
9
- require("core-js/modules/es.symbol.iterator.js");
10
- require("core-js/modules/es.array.iterator.js");
11
- require("core-js/modules/web.dom-collections.iterator.js");
12
- require("core-js/modules/es.array.is-array.js");
13
- require("core-js/modules/es.date.to-json.js");
14
- require("core-js/modules/es.date.to-string.js");
15
- require("core-js/modules/es.array.map.js");
16
- require("core-js/modules/es.array.reduce.js");
17
- require("core-js/modules/es.object.to-string.js");
18
- require("core-js/modules/es.array.join.js");
19
- require("core-js/modules/es.regexp.exec.js");
20
- require("core-js/modules/es.string.replace.js");
21
- var _assert = _interopRequireDefault(require("assert"));
22
- var _commandLineArgs = _interopRequireDefault(require("command-line-args"));
23
- var _fs = _interopRequireDefault(require("fs"));
24
- var _path = _interopRequireDefault(require("path"));
25
- var _acteurs = require("../cleaners/acteurs");
26
- var _amendements = require("../cleaners/amendements");
27
- var _documents = require("../cleaners/documents");
28
- var _dossiers_legislatifs = require("../cleaners/dossiers_legislatifs");
29
- var _organes = require("../cleaners/organes");
30
- var _reunions = require("../cleaners/reunions");
31
- var _scrutins = require("../cleaners/scrutins");
32
- var _datasets = require("../datasets");
33
- var _dates = require("../dates");
34
- var _acteurs_et_organes = require("../types/acteurs_et_organes");
35
- var _agendas = require("../types/agendas");
36
- var _amendements2 = require("../types/amendements");
37
- var _dossiers_legislatifs2 = require("../types/dossiers_legislatifs");
38
- var _scrutins2 = require("../types/scrutins");
39
- var _acteurs_et_organes2 = require("../raw_types/acteurs_et_organes");
40
- var _agendas2 = require("../raw_types/agendas");
41
- var _amendements3 = require("../raw_types/amendements");
42
- var _dossiers_legislatifs3 = require("../raw_types/dossiers_legislatifs");
43
- var _scrutins3 = require("../raw_types/scrutins");
44
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
45
- 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; } } }; }
46
- 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); }
47
- 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; }
48
- var optionsDefinitions = [{
49
- alias: "k",
50
- defaultValue: ["All"],
51
- help: "categories of datasets to reorganize",
52
- multiple: true,
53
- name: "categories",
54
- type: String
55
- }, {
56
- defaultOption: true,
57
- help: "directory containing Assemblée open data files",
58
- name: "dataDir",
59
- type: String
60
- }];
61
- var options = (0, _commandLineArgs["default"])(optionsDefinitions);
62
- function cleanData(dataDir) {
63
- Date.prototype.toJSON = _dates.patchedDateToJson;
64
- options.categories.map(function (datasetName) {
65
- return _assert["default"].notStrictEqual(_datasets.EnabledDatasets[datasetName], undefined, "Unknown name of dataset: ".concat(datasetName));
66
- });
67
- var enabledDatasets = options.categories.reduce(function (enabledDatasets, datasetName) {
68
- return enabledDatasets | _datasets.EnabledDatasets[datasetName];
69
- }, _datasets.EnabledDatasets.None);
70
- if (enabledDatasets & _datasets.EnabledDatasets.ActeursEtOrganes) {
71
- var _iterator = _createForOfIteratorHelper(_datasets.datasets.acteursEtOrganes),
72
- _step;
73
- try {
74
- for (_iterator.s(); !(_step = _iterator.n()).done;) {
75
- var dataset = _step.value;
76
- var rawJsonFilePath = _path["default"].join(dataDir, dataset.filename);
77
- console.log("Loading file: ".concat(rawJsonFilePath));
78
- var rawJson = _fs["default"].readFileSync(rawJsonFilePath, {
79
- encoding: "utf8"
80
- });
81
- var acteursEtOrganes = _acteurs_et_organes2.Convert.toActeursEtOrganes(rawJson);
82
- // const acteurs = jp.query(acteursEtOrganes, "$.export.acteurs.acteur")[0]
83
- var organes = acteursEtOrganes["export"].organes.organe;
84
- acteursEtOrganes.organes = organes;
85
- var acteurs = acteursEtOrganes["export"].acteurs.acteur;
86
- acteursEtOrganes.acteurs = acteurs;
87
- delete acteursEtOrganes["export"];
88
- var _iterator2 = _createForOfIteratorHelper(acteurs),
89
- _step2;
90
- try {
91
- for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
92
- var acteur = _step2.value;
93
- (0, _acteurs.cleanActeur)(acteur);
94
- }
95
- } catch (err) {
96
- _iterator2.e(err);
97
- } finally {
98
- _iterator2.f();
99
- }
100
- var _iterator3 = _createForOfIteratorHelper(organes),
101
- _step3;
102
- try {
103
- for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
104
- var organe = _step3.value;
105
- (0, _organes.cleanOrgane)(organe);
106
- }
107
- } catch (err) {
108
- _iterator3.e(err);
109
- } finally {
110
- _iterator3.f();
111
- }
112
- var acteursEtOrganesJson = JSON.stringify(acteursEtOrganes, null, 2);
113
- // Validate generated JSON.
114
- var acteursEtOrganesClean = _acteurs_et_organes.Convert.toActeursEtOrganes(acteursEtOrganesJson);
115
- var acteursEtOrganesCleanJson = _acteurs_et_organes.Convert.acteursEtOrganesToJson(acteursEtOrganesClean);
116
- var jsonFilePath = _path["default"].join(dataDir, dataset.filename.replace(/\.json$/, "_nettoye.json"));
117
- _fs["default"].writeFileSync(jsonFilePath, acteursEtOrganesCleanJson, {
118
- encoding: "utf8"
119
- });
120
- }
121
- } catch (err) {
122
- _iterator.e(err);
123
- } finally {
124
- _iterator.f();
125
- }
126
- }
127
- if (enabledDatasets & _datasets.EnabledDatasets.Agendas) {
128
- var _iterator4 = _createForOfIteratorHelper(_datasets.datasets.agendas),
129
- _step4;
130
- try {
131
- for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {
132
- var _dataset = _step4.value;
133
- var _rawJsonFilePath = _path["default"].join(dataDir, _dataset.filename);
134
- console.log("Loading file: ".concat(_rawJsonFilePath));
135
- var _rawJson = _fs["default"].readFileSync(_rawJsonFilePath, {
136
- encoding: "utf8"
137
- });
138
- var agendas = _agendas2.Convert.toAgendas(_rawJson);
139
- agendas.reunions = agendas.reunions.reunion;
140
- var _iterator5 = _createForOfIteratorHelper(agendas.reunions),
141
- _step5;
142
- try {
143
- for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {
144
- var reunion = _step5.value;
145
- (0, _reunions.cleanReunion)(reunion);
146
- }
147
- } catch (err) {
148
- _iterator5.e(err);
149
- } finally {
150
- _iterator5.f();
151
- }
152
- var agendasJson = JSON.stringify(agendas, null, 2);
153
- // Validate generated JSON.
154
- var agendasClean = _agendas.Convert.toAgendas(agendasJson);
155
- var agendasCleanJson = _agendas.Convert.agendasToJson(agendasClean);
156
- var _jsonFilePath = _path["default"].join(dataDir, _dataset.filename.replace(/\.json$/, "_nettoye.json"));
157
- _fs["default"].writeFileSync(_jsonFilePath, agendasCleanJson, {
158
- encoding: "utf8"
159
- });
160
- }
161
- } catch (err) {
162
- _iterator4.e(err);
163
- } finally {
164
- _iterator4.f();
165
- }
166
- }
167
- if (enabledDatasets & _datasets.EnabledDatasets.Amendements) {
168
- var _iterator6 = _createForOfIteratorHelper(_datasets.datasets.amendements),
169
- _step6;
170
- try {
171
- for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) {
172
- var _dataset2 = _step6.value;
173
- var _rawJsonFilePath2 = _path["default"].join(dataDir, _dataset2.filename);
174
- console.log("Loading file: ".concat(_rawJsonFilePath2));
175
- var _rawJson2 = _fs["default"].readFileSync(_rawJsonFilePath2, {
176
- encoding: "utf8"
177
- });
178
- var amendements = _amendements3.Convert.toAmendements(_rawJson2);
179
- amendements.textesLegislatifs = amendements.textesEtAmendements.texteleg;
180
- delete amendements.textesEtAmendements;
181
- var _iterator7 = _createForOfIteratorHelper(amendements.textesLegislatifs),
182
- _step7;
183
- try {
184
- for (_iterator7.s(); !(_step7 = _iterator7.n()).done;) {
185
- var texteLegislatif = _step7.value;
186
- (0, _amendements.cleanTexteLegislatif)(texteLegislatif);
187
- }
188
- } catch (err) {
189
- _iterator7.e(err);
190
- } finally {
191
- _iterator7.f();
192
- }
193
- var amendementsJson = JSON.stringify(amendements, null, 2);
194
- // Validate generated JSON.
195
- var amendementsClean = _amendements2.Convert.toAmendements(amendementsJson);
196
- var amendementsCleanJson = _amendements2.Convert.amendementsToJson(amendementsClean);
197
- var _jsonFilePath2 = _path["default"].join(dataDir, _dataset2.filename.replace(/\.json$/, "_nettoye.json"));
198
- _fs["default"].writeFileSync(_jsonFilePath2, amendementsCleanJson, {
199
- encoding: "utf8"
200
- });
201
- }
202
- } catch (err) {
203
- _iterator6.e(err);
204
- } finally {
205
- _iterator6.f();
206
- }
207
- }
208
- if (enabledDatasets & _datasets.EnabledDatasets.DossiersLegislatifs) {
209
- var _iterator8 = _createForOfIteratorHelper(_datasets.datasets.dossiersLegislatifs),
210
- _step8;
211
- try {
212
- for (_iterator8.s(); !(_step8 = _iterator8.n()).done;) {
213
- var _dataset3 = _step8.value;
214
- var _rawJsonFilePath3 = _path["default"].join(dataDir, _dataset3.filename);
215
- console.log("Loading file: ".concat(_rawJsonFilePath3));
216
- var _rawJson3 = _fs["default"].readFileSync(_rawJsonFilePath3, {
217
- encoding: "utf8"
218
- });
219
- var dossiersLegislatifs = _dossiers_legislatifs3.Convert.toDossiersLegislatifs(_rawJson3);
220
- dossiersLegislatifs.textesLegislatifs = dossiersLegislatifs["export"].textesLegislatifs.document;
221
- dossiersLegislatifs.dossiersParlementaires = dossiersLegislatifs["export"].dossiersLegislatifs.dossier.map(function (dossier) {
222
- return dossier.dossierParlementaire;
223
- });
224
- delete dossiersLegislatifs["export"];
225
- var _iterator9 = _createForOfIteratorHelper(dossiersLegislatifs.textesLegislatifs),
226
- _step9;
227
- try {
228
- for (_iterator9.s(); !(_step9 = _iterator9.n()).done;) {
229
- var document = _step9.value;
230
- (0, _documents.cleanDocumentOrDivision)(document);
231
- }
232
- } catch (err) {
233
- _iterator9.e(err);
234
- } finally {
235
- _iterator9.f();
236
- }
237
- var _iterator10 = _createForOfIteratorHelper(dossiersLegislatifs.dossiersParlementaires),
238
- _step10;
239
- try {
240
- for (_iterator10.s(); !(_step10 = _iterator10.n()).done;) {
241
- var dossierParlementaire = _step10.value;
242
- (0, _dossiers_legislatifs.cleanDossierParlementaire)(dossierParlementaire);
243
- }
244
- } catch (err) {
245
- _iterator10.e(err);
246
- } finally {
247
- _iterator10.f();
248
- }
249
- var dossiersLegislatifsJson = JSON.stringify(dossiersLegislatifs, null, 2);
250
- // Validate generated JSON.
251
- var dossiersLegislatifsClean = _dossiers_legislatifs2.Convert.toDossiersLegislatifs(dossiersLegislatifsJson);
252
- var dossiersLegislatifsCleanJson = _dossiers_legislatifs2.Convert.dossiersLegislatifsToJson(dossiersLegislatifsClean);
253
- var _jsonFilePath3 = _path["default"].join(dataDir, _dataset3.filename.replace(/\.json$/, "_nettoye.json"));
254
- _fs["default"].writeFileSync(_jsonFilePath3, dossiersLegislatifsCleanJson, {
255
- encoding: "utf8"
256
- });
257
- }
258
- } catch (err) {
259
- _iterator8.e(err);
260
- } finally {
261
- _iterator8.f();
262
- }
263
- }
264
- if (enabledDatasets & _datasets.EnabledDatasets.Scrutins) {
265
- var _iterator11 = _createForOfIteratorHelper(_datasets.datasets.scrutins),
266
- _step11;
267
- try {
268
- for (_iterator11.s(); !(_step11 = _iterator11.n()).done;) {
269
- var _dataset4 = _step11.value;
270
- var _rawJsonFilePath4 = _path["default"].join(dataDir, _dataset4.filename);
271
- console.log("Loading file: ".concat(_rawJsonFilePath4));
272
- var _rawJson4 = _fs["default"].readFileSync(_rawJsonFilePath4, {
273
- encoding: "utf8"
274
- });
275
- var scrutins = _scrutins3.Convert.toScrutins(_rawJson4);
276
- scrutins.scrutins = scrutins.scrutins.scrutin;
277
- var _iterator12 = _createForOfIteratorHelper(scrutins.scrutins),
278
- _step12;
279
- try {
280
- for (_iterator12.s(); !(_step12 = _iterator12.n()).done;) {
281
- var scrutin = _step12.value;
282
- (0, _scrutins.cleanScrutin)(scrutin);
283
- }
284
- } catch (err) {
285
- _iterator12.e(err);
286
- } finally {
287
- _iterator12.f();
288
- }
289
- var scrutinsJson = JSON.stringify(scrutins, null, 2);
290
- // Validate generated JSON.
291
- var scrutinsClean = _scrutins2.Convert.toScrutins(scrutinsJson);
292
- var scrutinsCleanJson = _scrutins2.Convert.scrutinsToJson(scrutinsClean);
293
- var _jsonFilePath4 = _path["default"].join(dataDir, _dataset4.filename.replace(/\.json$/, "_nettoye.json"));
294
- _fs["default"].writeFileSync(_jsonFilePath4, scrutinsCleanJson, {
295
- encoding: "utf8"
296
- });
297
- }
298
- } catch (err) {
299
- _iterator11.e(err);
300
- } finally {
301
- _iterator11.f();
302
- }
303
- }
304
-
305
- // Restore standard conversion of dates to JSON.
306
- Date.prototype.toJSON = _dates.existingDateToJson;
307
- }
308
- cleanData(options.dataDir);
309
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfYXNzZXJ0IiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfY29tbWFuZExpbmVBcmdzIiwiX2ZzIiwiX3BhdGgiLCJfYWN0ZXVycyIsIl9hbWVuZGVtZW50cyIsIl9kb2N1bWVudHMiLCJfZG9zc2llcnNfbGVnaXNsYXRpZnMiLCJfb3JnYW5lcyIsIl9yZXVuaW9ucyIsIl9zY3J1dGlucyIsIl9kYXRhc2V0cyIsIl9kYXRlcyIsIl9hY3RldXJzX2V0X29yZ2FuZXMiLCJfYWdlbmRhcyIsIl9hbWVuZGVtZW50czIiLCJfZG9zc2llcnNfbGVnaXNsYXRpZnMyIiwiX3NjcnV0aW5zMiIsIl9hY3RldXJzX2V0X29yZ2FuZXMyIiwiX2FnZW5kYXMyIiwiX2FtZW5kZW1lbnRzMyIsIl9kb3NzaWVyc19sZWdpc2xhdGlmczMiLCJfc2NydXRpbnMzIiwib2JqIiwiX19lc01vZHVsZSIsIl9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyIiwibyIsImFsbG93QXJyYXlMaWtlIiwiaXQiLCJTeW1ib2wiLCJpdGVyYXRvciIsIkFycmF5IiwiaXNBcnJheSIsIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsImxlbmd0aCIsImkiLCJGIiwicyIsIm4iLCJkb25lIiwidmFsdWUiLCJlIiwiX2UiLCJmIiwiVHlwZUVycm9yIiwibm9ybWFsQ29tcGxldGlvbiIsImRpZEVyciIsImVyciIsImNhbGwiLCJzdGVwIiwibmV4dCIsIl9lMiIsIm1pbkxlbiIsIl9hcnJheUxpa2VUb0FycmF5IiwiT2JqZWN0IiwicHJvdG90eXBlIiwidG9TdHJpbmciLCJzbGljZSIsImNvbnN0cnVjdG9yIiwibmFtZSIsImZyb20iLCJ0ZXN0IiwiYXJyIiwibGVuIiwiYXJyMiIsIm9wdGlvbnNEZWZpbml0aW9ucyIsImFsaWFzIiwiZGVmYXVsdFZhbHVlIiwiaGVscCIsIm11bHRpcGxlIiwidHlwZSIsIlN0cmluZyIsImRlZmF1bHRPcHRpb24iLCJvcHRpb25zIiwiY29tbWFuZExpbmVBcmdzIiwiY2xlYW5EYXRhIiwiZGF0YURpciIsIkRhdGUiLCJ0b0pTT04iLCJwYXRjaGVkRGF0ZVRvSnNvbiIsImNhdGVnb3JpZXMiLCJtYXAiLCJkYXRhc2V0TmFtZSIsImFzc2VydCIsIm5vdFN0cmljdEVxdWFsIiwiRW5hYmxlZERhdGFzZXRzIiwidW5kZWZpbmVkIiwiY29uY2F0IiwiZW5hYmxlZERhdGFzZXRzIiwicmVkdWNlIiwiTm9uZSIsIkFjdGV1cnNFdE9yZ2FuZXMiLCJfaXRlcmF0b3IiLCJkYXRhc2V0cyIsImFjdGV1cnNFdE9yZ2FuZXMiLCJfc3RlcCIsImRhdGFzZXQiLCJyYXdKc29uRmlsZVBhdGgiLCJwYXRoIiwiam9pbiIsImZpbGVuYW1lIiwiY29uc29sZSIsImxvZyIsInJhd0pzb24iLCJmcyIsInJlYWRGaWxlU3luYyIsImVuY29kaW5nIiwiQWN0ZXVyc0V0T3JnYW5lc1Jhd0NvbnZlcnQiLCJ0b0FjdGV1cnNFdE9yZ2FuZXMiLCJvcmdhbmVzIiwib3JnYW5lIiwiYWN0ZXVycyIsImFjdGV1ciIsIl9pdGVyYXRvcjIiLCJfc3RlcDIiLCJjbGVhbkFjdGV1ciIsIl9pdGVyYXRvcjMiLCJfc3RlcDMiLCJjbGVhbk9yZ2FuZSIsImFjdGV1cnNFdE9yZ2FuZXNKc29uIiwiSlNPTiIsInN0cmluZ2lmeSIsImFjdGV1cnNFdE9yZ2FuZXNDbGVhbiIsIkFjdGV1cnNFdE9yZ2FuZXNDb252ZXJ0IiwiYWN0ZXVyc0V0T3JnYW5lc0NsZWFuSnNvbiIsImFjdGV1cnNFdE9yZ2FuZXNUb0pzb24iLCJqc29uRmlsZVBhdGgiLCJyZXBsYWNlIiwid3JpdGVGaWxlU3luYyIsIkFnZW5kYXMiLCJfaXRlcmF0b3I0IiwiYWdlbmRhcyIsIl9zdGVwNCIsIkFnZW5kYXNSYXdDb252ZXJ0IiwidG9BZ2VuZGFzIiwicmV1bmlvbnMiLCJyZXVuaW9uIiwiX2l0ZXJhdG9yNSIsIl9zdGVwNSIsImNsZWFuUmV1bmlvbiIsImFnZW5kYXNKc29uIiwiYWdlbmRhc0NsZWFuIiwiQWdlbmRhc0NvbnZlcnQiLCJhZ2VuZGFzQ2xlYW5Kc29uIiwiYWdlbmRhc1RvSnNvbiIsIkFtZW5kZW1lbnRzIiwiX2l0ZXJhdG9yNiIsImFtZW5kZW1lbnRzIiwiX3N0ZXA2IiwiQW1lbmRlbWVudHNSYXdDb252ZXJ0IiwidG9BbWVuZGVtZW50cyIsInRleHRlc0xlZ2lzbGF0aWZzIiwidGV4dGVzRXRBbWVuZGVtZW50cyIsInRleHRlbGVnIiwiX2l0ZXJhdG9yNyIsIl9zdGVwNyIsInRleHRlTGVnaXNsYXRpZiIsImNsZWFuVGV4dGVMZWdpc2xhdGlmIiwiYW1lbmRlbWVudHNKc29uIiwiYW1lbmRlbWVudHNDbGVhbiIsIkFtZW5kZW1lbnRzQ29udmVydCIsImFtZW5kZW1lbnRzQ2xlYW5Kc29uIiwiYW1lbmRlbWVudHNUb0pzb24iLCJEb3NzaWVyc0xlZ2lzbGF0aWZzIiwiX2l0ZXJhdG9yOCIsImRvc3NpZXJzTGVnaXNsYXRpZnMiLCJfc3RlcDgiLCJEb3NzaWVyc0xlZ2lzbGF0aWZzUmF3Q29udmVydCIsInRvRG9zc2llcnNMZWdpc2xhdGlmcyIsImRvY3VtZW50IiwiZG9zc2llcnNQYXJsZW1lbnRhaXJlcyIsImRvc3NpZXIiLCJkb3NzaWVyUGFybGVtZW50YWlyZSIsIl9pdGVyYXRvcjkiLCJfc3RlcDkiLCJjbGVhbkRvY3VtZW50T3JEaXZpc2lvbiIsIl9pdGVyYXRvcjEwIiwiX3N0ZXAxMCIsImNsZWFuRG9zc2llclBhcmxlbWVudGFpcmUiLCJkb3NzaWVyc0xlZ2lzbGF0aWZzSnNvbiIsImRvc3NpZXJzTGVnaXNsYXRpZnNDbGVhbiIsIkRvc3NpZXJzTGVnaXNsYXRpZnNDb252ZXJ0IiwiZG9zc2llcnNMZWdpc2xhdGlmc0NsZWFuSnNvbiIsImRvc3NpZXJzTGVnaXNsYXRpZnNUb0pzb24iLCJTY3J1dGlucyIsIl9pdGVyYXRvcjExIiwic2NydXRpbnMiLCJfc3RlcDExIiwiU2NydXRpbnNSYXdDb252ZXJ0IiwidG9TY3J1dGlucyIsInNjcnV0aW4iLCJfaXRlcmF0b3IxMiIsIl9zdGVwMTIiLCJjbGVhblNjcnV0aW4iLCJzY3J1dGluc0pzb24iLCJzY3J1dGluc0NsZWFuIiwiU2NydXRpbnNDb252ZXJ0Iiwic2NydXRpbnNDbGVhbkpzb24iLCJzY3J1dGluc1RvSnNvbiIsImV4aXN0aW5nRGF0ZVRvSnNvbiJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zY3JpcHRzL2NsZWFuX2RhdGEudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGFzc2VydCBmcm9tIFwiYXNzZXJ0XCJcbmltcG9ydCBjb21tYW5kTGluZUFyZ3MgZnJvbSBcImNvbW1hbmQtbGluZS1hcmdzXCJcbmltcG9ydCBmcyBmcm9tIFwiZnNcIlxuaW1wb3J0IHBhdGggZnJvbSBcInBhdGhcIlxuXG5pbXBvcnQgeyBjbGVhbkFjdGV1ciB9IGZyb20gXCIuLi9jbGVhbmVycy9hY3RldXJzXCJcbmltcG9ydCB7IGNsZWFuVGV4dGVMZWdpc2xhdGlmIH0gZnJvbSBcIi4uL2NsZWFuZXJzL2FtZW5kZW1lbnRzXCJcbmltcG9ydCB7IGNsZWFuRG9jdW1lbnRPckRpdmlzaW9uIH0gZnJvbSBcIi4uL2NsZWFuZXJzL2RvY3VtZW50c1wiXG5pbXBvcnQgeyBjbGVhbkRvc3NpZXJQYXJsZW1lbnRhaXJlIH0gZnJvbSBcIi4uL2NsZWFuZXJzL2Rvc3NpZXJzX2xlZ2lzbGF0aWZzXCJcbmltcG9ydCB7IGNsZWFuT3JnYW5lIH0gZnJvbSBcIi4uL2NsZWFuZXJzL29yZ2FuZXNcIlxuaW1wb3J0IHsgY2xlYW5SZXVuaW9uIH0gZnJvbSBcIi4uL2NsZWFuZXJzL3JldW5pb25zXCJcbmltcG9ydCB7IGNsZWFuU2NydXRpbiB9IGZyb20gXCIuLi9jbGVhbmVycy9zY3J1dGluc1wiXG5pbXBvcnQgeyBkYXRhc2V0cywgRW5hYmxlZERhdGFzZXRzIH0gZnJvbSBcIi4uL2RhdGFzZXRzXCJcbmltcG9ydCB7IGV4aXN0aW5nRGF0ZVRvSnNvbiwgcGF0Y2hlZERhdGVUb0pzb24gfSBmcm9tIFwiLi4vZGF0ZXNcIlxuaW1wb3J0IHtcbiAgQWN0ZXVyc0V0T3JnYW5lcyxcbiAgQ29udmVydCBhcyBBY3RldXJzRXRPcmdhbmVzQ29udmVydCxcbn0gZnJvbSBcIi4uL3R5cGVzL2FjdGV1cnNfZXRfb3JnYW5lc1wiXG5pbXBvcnQgeyBBZ2VuZGFzLCBDb252ZXJ0IGFzIEFnZW5kYXNDb252ZXJ0IH0gZnJvbSBcIi4uL3R5cGVzL2FnZW5kYXNcIlxuaW1wb3J0IHtcbiAgQW1lbmRlbWVudHMsXG4gIENvbnZlcnQgYXMgQW1lbmRlbWVudHNDb252ZXJ0LFxufSBmcm9tIFwiLi4vdHlwZXMvYW1lbmRlbWVudHNcIlxuaW1wb3J0IHtcbiAgRG9zc2llcnNMZWdpc2xhdGlmcyxcbiAgQ29udmVydCBhcyBEb3NzaWVyc0xlZ2lzbGF0aWZzQ29udmVydCxcbn0gZnJvbSBcIi4uL3R5cGVzL2Rvc3NpZXJzX2xlZ2lzbGF0aWZzXCJcbmltcG9ydCB7IENvbnZlcnQgYXMgU2NydXRpbnNDb252ZXJ0LCBTY3J1dGlucyB9IGZyb20gXCIuLi90eXBlcy9zY3J1dGluc1wiXG5pbXBvcnQgeyBDb252ZXJ0IGFzIEFjdGV1cnNFdE9yZ2FuZXNSYXdDb252ZXJ0IH0gZnJvbSBcIi4uL3Jhd190eXBlcy9hY3RldXJzX2V0X29yZ2FuZXNcIlxuaW1wb3J0IHsgQ29udmVydCBhcyBBZ2VuZGFzUmF3Q29udmVydCB9IGZyb20gXCIuLi9yYXdfdHlwZXMvYWdlbmRhc1wiXG5pbXBvcnQgeyBDb252ZXJ0IGFzIEFtZW5kZW1lbnRzUmF3Q29udmVydCB9IGZyb20gXCIuLi9yYXdfdHlwZXMvYW1lbmRlbWVudHNcIlxuaW1wb3J0IHtcbiAgQ29udmVydCBhcyBEb3NzaWVyc0xlZ2lzbGF0aWZzUmF3Q29udmVydCxcbiAgRG9zc2llciBhcyBEb3NzaWVyUmF3LFxufSBmcm9tIFwiLi4vcmF3X3R5cGVzL2Rvc3NpZXJzX2xlZ2lzbGF0aWZzXCJcbmltcG9ydCB7IENvbnZlcnQgYXMgU2NydXRpbnNSYXdDb252ZXJ0IH0gZnJvbSBcIi4uL3Jhd190eXBlcy9zY3J1dGluc1wiXG5cbmNvbnN0IG9wdGlvbnNEZWZpbml0aW9ucyA9IFtcbiAge1xuICAgIGFsaWFzOiBcImtcIixcbiAgICBkZWZhdWx0VmFsdWU6IFtcIkFsbFwiXSxcbiAgICBoZWxwOiBcImNhdGVnb3JpZXMgb2YgZGF0YXNldHMgdG8gcmVvcmdhbml6ZVwiLFxuICAgIG11bHRpcGxlOiB0cnVlLFxuICAgIG5hbWU6IFwiY2F0ZWdvcmllc1wiLFxuICAgIHR5cGU6IFN0cmluZyxcbiAgfSxcbiAge1xuICAgIGRlZmF1bHRPcHRpb246IHRydWUsXG4gICAgaGVscDogXCJkaXJlY3RvcnkgY29udGFpbmluZyBBc3NlbWJsw6llIG9wZW4gZGF0YSBmaWxlc1wiLFxuICAgIG5hbWU6IFwiZGF0YURpclwiLFxuICAgIHR5cGU6IFN0cmluZyxcbiAgfSxcbl1cbmNvbnN0IG9wdGlvbnMgPSBjb21tYW5kTGluZUFyZ3Mob3B0aW9uc0RlZmluaXRpb25zKVxuXG5mdW5jdGlvbiBjbGVhbkRhdGEoZGF0YURpcjogc3RyaW5nKTogdm9pZCB7XG4gIERhdGUucHJvdG90eXBlLnRvSlNPTiA9IHBhdGNoZWREYXRlVG9Kc29uXG5cbiAgb3B0aW9ucy5jYXRlZ29yaWVzLm1hcCgoZGF0YXNldE5hbWU6IHN0cmluZykgPT5cbiAgICBhc3NlcnQubm90U3RyaWN0RXF1YWwoXG4gICAgICAoRW5hYmxlZERhdGFzZXRzIGFzIGFueSBhcyB7IFtuYW1lOiBzdHJpbmddOiBFbmFibGVkRGF0YXNldHMgfSlbXG4gICAgICAgIGRhdGFzZXROYW1lXG4gICAgICBdLFxuICAgICAgdW5kZWZpbmVkLFxuICAgICAgYFVua25vd24gbmFtZSBvZiBkYXRhc2V0OiAke2RhdGFzZXROYW1lfWAsXG4gICAgKSxcbiAgKVxuICBjb25zdCBlbmFibGVkRGF0YXNldHMgPSBvcHRpb25zLmNhdGVnb3JpZXMucmVkdWNlKFxuICAgIChlbmFibGVkRGF0YXNldHM6IEVuYWJsZWREYXRhc2V0cywgZGF0YXNldE5hbWU6IHN0cmluZyk6IEVuYWJsZWREYXRhc2V0cyA9PlxuICAgICAgZW5hYmxlZERhdGFzZXRzIHxcbiAgICAgIChFbmFibGVkRGF0YXNldHMgYXMgYW55IGFzIHsgW25hbWU6IHN0cmluZ106IEVuYWJsZWREYXRhc2V0cyB9KVtcbiAgICAgICAgZGF0YXNldE5hbWVcbiAgICAgIF0sXG4gICAgRW5hYmxlZERhdGFzZXRzLk5vbmUsXG4gIClcblxuICBpZiAoZW5hYmxlZERhdGFzZXRzICYgRW5hYmxlZERhdGFzZXRzLkFjdGV1cnNFdE9yZ2FuZXMpIHtcbiAgICBmb3IgKGNvbnN0IGRhdGFzZXQgb2YgZGF0YXNldHMuYWN0ZXVyc0V0T3JnYW5lcykge1xuICAgICAgY29uc3QgcmF3SnNvbkZpbGVQYXRoOiBzdHJpbmcgPSBwYXRoLmpvaW4oZGF0YURpciwgZGF0YXNldC5maWxlbmFtZSlcbiAgICAgIGNvbnNvbGUubG9nKGBMb2FkaW5nIGZpbGU6ICR7cmF3SnNvbkZpbGVQYXRofWApXG4gICAgICBjb25zdCByYXdKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMocmF3SnNvbkZpbGVQYXRoLCB7XG4gICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgIH0pXG5cbiAgICAgIGNvbnN0IGFjdGV1cnNFdE9yZ2FuZXM6IGFueSA9XG4gICAgICAgIEFjdGV1cnNFdE9yZ2FuZXNSYXdDb252ZXJ0LnRvQWN0ZXVyc0V0T3JnYW5lcyhyYXdKc29uKVxuICAgICAgLy8gY29uc3QgYWN0ZXVycyA9IGpwLnF1ZXJ5KGFjdGV1cnNFdE9yZ2FuZXMsIFwiJC5leHBvcnQuYWN0ZXVycy5hY3RldXJcIilbMF1cbiAgICAgIGNvbnN0IG9yZ2FuZXMgPSBhY3RldXJzRXRPcmdhbmVzLmV4cG9ydC5vcmdhbmVzLm9yZ2FuZVxuICAgICAgYWN0ZXVyc0V0T3JnYW5lcy5vcmdhbmVzID0gb3JnYW5lc1xuICAgICAgY29uc3QgYWN0ZXVycyA9IGFjdGV1cnNFdE9yZ2FuZXMuZXhwb3J0LmFjdGV1cnMuYWN0ZXVyXG4gICAgICBhY3RldXJzRXRPcmdhbmVzLmFjdGV1cnMgPSBhY3RldXJzXG4gICAgICBkZWxldGUgYWN0ZXVyc0V0T3JnYW5lcy5leHBvcnRcblxuICAgICAgZm9yIChjb25zdCBhY3RldXIgb2YgYWN0ZXVycykge1xuICAgICAgICBjbGVhbkFjdGV1cihhY3RldXIpXG4gICAgICB9XG5cbiAgICAgIGZvciAoY29uc3Qgb3JnYW5lIG9mIG9yZ2FuZXMpIHtcbiAgICAgICAgY2xlYW5PcmdhbmUob3JnYW5lKVxuICAgICAgfVxuXG4gICAgICBjb25zdCBhY3RldXJzRXRPcmdhbmVzSnNvbjogc3RyaW5nID0gSlNPTi5zdHJpbmdpZnkoXG4gICAgICAgIGFjdGV1cnNFdE9yZ2FuZXMsXG4gICAgICAgIG51bGwsXG4gICAgICAgIDIsXG4gICAgICApXG4gICAgICAvLyBWYWxpZGF0ZSBnZW5lcmF0ZWQgSlNPTi5cbiAgICAgIGNvbnN0IGFjdGV1cnNFdE9yZ2FuZXNDbGVhbjogQWN0ZXVyc0V0T3JnYW5lcyA9XG4gICAgICAgIEFjdGV1cnNFdE9yZ2FuZXNDb252ZXJ0LnRvQWN0ZXVyc0V0T3JnYW5lcyhhY3RldXJzRXRPcmdhbmVzSnNvbilcbiAgICAgIGNvbnN0IGFjdGV1cnNFdE9yZ2FuZXNDbGVhbkpzb246IHN0cmluZyA9XG4gICAgICAgIEFjdGV1cnNFdE9yZ2FuZXNDb252ZXJ0LmFjdGV1cnNFdE9yZ2FuZXNUb0pzb24oYWN0ZXVyc0V0T3JnYW5lc0NsZWFuKVxuICAgICAgY29uc3QganNvbkZpbGVQYXRoOiBzdHJpbmcgPSBwYXRoLmpvaW4oXG4gICAgICAgIGRhdGFEaXIsXG4gICAgICAgIGRhdGFzZXQuZmlsZW5hbWUucmVwbGFjZSgvXFwuanNvbiQvLCBcIl9uZXR0b3llLmpzb25cIiksXG4gICAgICApXG4gICAgICBmcy53cml0ZUZpbGVTeW5jKGpzb25GaWxlUGF0aCwgYWN0ZXVyc0V0T3JnYW5lc0NsZWFuSnNvbiwge1xuICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICB9KVxuICAgIH1cbiAgfVxuXG4gIGlmIChlbmFibGVkRGF0YXNldHMgJiBFbmFibGVkRGF0YXNldHMuQWdlbmRhcykge1xuICAgIGZvciAoY29uc3QgZGF0YXNldCBvZiBkYXRhc2V0cy5hZ2VuZGFzKSB7XG4gICAgICBjb25zdCByYXdKc29uRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihkYXRhRGlyLCBkYXRhc2V0LmZpbGVuYW1lKVxuICAgICAgY29uc29sZS5sb2coYExvYWRpbmcgZmlsZTogJHtyYXdKc29uRmlsZVBhdGh9YClcbiAgICAgIGNvbnN0IHJhd0pzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhyYXdKc29uRmlsZVBhdGgsIHtcbiAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgfSlcblxuICAgICAgY29uc3QgYWdlbmRhczogYW55ID0gQWdlbmRhc1Jhd0NvbnZlcnQudG9BZ2VuZGFzKHJhd0pzb24pXG4gICAgICBhZ2VuZGFzLnJldW5pb25zID0gYWdlbmRhcy5yZXVuaW9ucy5yZXVuaW9uXG5cbiAgICAgIGZvciAoY29uc3QgcmV1bmlvbiBvZiBhZ2VuZGFzLnJldW5pb25zKSB7XG4gICAgICAgIGNsZWFuUmV1bmlvbihyZXVuaW9uKVxuICAgICAgfVxuXG4gICAgICBjb25zdCBhZ2VuZGFzSnNvbjogc3RyaW5nID0gSlNPTi5zdHJpbmdpZnkoYWdlbmRhcywgbnVsbCwgMilcbiAgICAgIC8vIFZhbGlkYXRlIGdlbmVyYXRlZCBKU09OLlxuICAgICAgY29uc3QgYWdlbmRhc0NsZWFuOiBBZ2VuZGFzID0gQWdlbmRhc0NvbnZlcnQudG9BZ2VuZGFzKGFnZW5kYXNKc29uKVxuICAgICAgY29uc3QgYWdlbmRhc0NsZWFuSnNvbjogc3RyaW5nID1cbiAgICAgICAgQWdlbmRhc0NvbnZlcnQuYWdlbmRhc1RvSnNvbihhZ2VuZGFzQ2xlYW4pXG4gICAgICBjb25zdCBqc29uRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICAgICAgZGF0YURpcixcbiAgICAgICAgZGF0YXNldC5maWxlbmFtZS5yZXBsYWNlKC9cXC5qc29uJC8sIFwiX25ldHRveWUuanNvblwiKSxcbiAgICAgIClcbiAgICAgIGZzLndyaXRlRmlsZVN5bmMoanNvbkZpbGVQYXRoLCBhZ2VuZGFzQ2xlYW5Kc29uLCB7IGVuY29kaW5nOiBcInV0ZjhcIiB9KVxuICAgIH1cbiAgfVxuXG4gIGlmIChlbmFibGVkRGF0YXNldHMgJiBFbmFibGVkRGF0YXNldHMuQW1lbmRlbWVudHMpIHtcbiAgICBmb3IgKGNvbnN0IGRhdGFzZXQgb2YgZGF0YXNldHMuYW1lbmRlbWVudHMpIHtcbiAgICAgIGNvbnN0IHJhd0pzb25GaWxlUGF0aDogc3RyaW5nID0gcGF0aC5qb2luKGRhdGFEaXIsIGRhdGFzZXQuZmlsZW5hbWUpXG4gICAgICBjb25zb2xlLmxvZyhgTG9hZGluZyBmaWxlOiAke3Jhd0pzb25GaWxlUGF0aH1gKVxuICAgICAgY29uc3QgcmF3SnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKHJhd0pzb25GaWxlUGF0aCwge1xuICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICB9KVxuXG4gICAgICBjb25zdCBhbWVuZGVtZW50czogYW55ID0gQW1lbmRlbWVudHNSYXdDb252ZXJ0LnRvQW1lbmRlbWVudHMocmF3SnNvbilcbiAgICAgIGFtZW5kZW1lbnRzLnRleHRlc0xlZ2lzbGF0aWZzID0gYW1lbmRlbWVudHMudGV4dGVzRXRBbWVuZGVtZW50cy50ZXh0ZWxlZ1xuICAgICAgZGVsZXRlIGFtZW5kZW1lbnRzLnRleHRlc0V0QW1lbmRlbWVudHNcblxuICAgICAgZm9yIChjb25zdCB0ZXh0ZUxlZ2lzbGF0aWYgb2YgYW1lbmRlbWVudHMudGV4dGVzTGVnaXNsYXRpZnMpIHtcbiAgICAgICAgY2xlYW5UZXh0ZUxlZ2lzbGF0aWYodGV4dGVMZWdpc2xhdGlmKVxuICAgICAgfVxuXG4gICAgICBjb25zdCBhbWVuZGVtZW50c0pzb246IHN0cmluZyA9IEpTT04uc3RyaW5naWZ5KGFtZW5kZW1lbnRzLCBudWxsLCAyKVxuICAgICAgLy8gVmFsaWRhdGUgZ2VuZXJhdGVkIEpTT04uXG4gICAgICBjb25zdCBhbWVuZGVtZW50c0NsZWFuOiBBbWVuZGVtZW50cyA9XG4gICAgICAgIEFtZW5kZW1lbnRzQ29udmVydC50b0FtZW5kZW1lbnRzKGFtZW5kZW1lbnRzSnNvbilcbiAgICAgIGNvbnN0IGFtZW5kZW1lbnRzQ2xlYW5Kc29uOiBzdHJpbmcgPVxuICAgICAgICBBbWVuZGVtZW50c0NvbnZlcnQuYW1lbmRlbWVudHNUb0pzb24oYW1lbmRlbWVudHNDbGVhbilcbiAgICAgIGNvbnN0IGpzb25GaWxlUGF0aDogc3RyaW5nID0gcGF0aC5qb2luKFxuICAgICAgICBkYXRhRGlyLFxuICAgICAgICBkYXRhc2V0LmZpbGVuYW1lLnJlcGxhY2UoL1xcLmpzb24kLywgXCJfbmV0dG95ZS5qc29uXCIpLFxuICAgICAgKVxuICAgICAgZnMud3JpdGVGaWxlU3luYyhqc29uRmlsZVBhdGgsIGFtZW5kZW1lbnRzQ2xlYW5Kc29uLCB7IGVuY29kaW5nOiBcInV0ZjhcIiB9KVxuICAgIH1cbiAgfVxuXG4gIGlmIChlbmFibGVkRGF0YXNldHMgJiBFbmFibGVkRGF0YXNldHMuRG9zc2llcnNMZWdpc2xhdGlmcykge1xuICAgIGZvciAoY29uc3QgZGF0YXNldCBvZiBkYXRhc2V0cy5kb3NzaWVyc0xlZ2lzbGF0aWZzKSB7XG4gICAgICBjb25zdCByYXdKc29uRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihkYXRhRGlyLCBkYXRhc2V0LmZpbGVuYW1lKVxuICAgICAgY29uc29sZS5sb2coYExvYWRpbmcgZmlsZTogJHtyYXdKc29uRmlsZVBhdGh9YClcbiAgICAgIGNvbnN0IHJhd0pzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhyYXdKc29uRmlsZVBhdGgsIHtcbiAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgfSlcblxuICAgICAgY29uc3QgZG9zc2llcnNMZWdpc2xhdGlmczogYW55ID1cbiAgICAgICAgRG9zc2llcnNMZWdpc2xhdGlmc1Jhd0NvbnZlcnQudG9Eb3NzaWVyc0xlZ2lzbGF0aWZzKHJhd0pzb24pXG4gICAgICBkb3NzaWVyc0xlZ2lzbGF0aWZzLnRleHRlc0xlZ2lzbGF0aWZzID1cbiAgICAgICAgZG9zc2llcnNMZWdpc2xhdGlmcy5leHBvcnQudGV4dGVzTGVnaXNsYXRpZnMuZG9jdW1lbnRcbiAgICAgIGRvc3NpZXJzTGVnaXNsYXRpZnMuZG9zc2llcnNQYXJsZW1lbnRhaXJlcyA9IChcbiAgICAgICAgZG9zc2llcnNMZWdpc2xhdGlmcy5leHBvcnQuZG9zc2llcnNMZWdpc2xhdGlmcy5kb3NzaWVyIGFzIERvc3NpZXJSYXdbXVxuICAgICAgKS5tYXAoKGRvc3NpZXIpID0+IGRvc3NpZXIuZG9zc2llclBhcmxlbWVudGFpcmUpXG4gICAgICBkZWxldGUgZG9zc2llcnNMZWdpc2xhdGlmcy5leHBvcnRcblxuICAgICAgZm9yIChjb25zdCBkb2N1bWVudCBvZiBkb3NzaWVyc0xlZ2lzbGF0aWZzLnRleHRlc0xlZ2lzbGF0aWZzKSB7XG4gICAgICAgIGNsZWFuRG9jdW1lbnRPckRpdmlzaW9uKGRvY3VtZW50KVxuICAgICAgfVxuXG4gICAgICBmb3IgKGNvbnN0IGRvc3NpZXJQYXJsZW1lbnRhaXJlIG9mIGRvc3NpZXJzTGVnaXNsYXRpZnMuZG9zc2llcnNQYXJsZW1lbnRhaXJlcykge1xuICAgICAgICBjbGVhbkRvc3NpZXJQYXJsZW1lbnRhaXJlKGRvc3NpZXJQYXJsZW1lbnRhaXJlKVxuICAgICAgfVxuXG4gICAgICBjb25zdCBkb3NzaWVyc0xlZ2lzbGF0aWZzSnNvbjogc3RyaW5nID0gSlNPTi5zdHJpbmdpZnkoXG4gICAgICAgIGRvc3NpZXJzTGVnaXNsYXRpZnMsXG4gICAgICAgIG51bGwsXG4gICAgICAgIDIsXG4gICAgICApXG4gICAgICAvLyBWYWxpZGF0ZSBnZW5lcmF0ZWQgSlNPTi5cbiAgICAgIGNvbnN0IGRvc3NpZXJzTGVnaXNsYXRpZnNDbGVhbjogRG9zc2llcnNMZWdpc2xhdGlmcyA9XG4gICAgICAgIERvc3NpZXJzTGVnaXNsYXRpZnNDb252ZXJ0LnRvRG9zc2llcnNMZWdpc2xhdGlmcyhcbiAgICAgICAgICBkb3NzaWVyc0xlZ2lzbGF0aWZzSnNvbixcbiAgICAgICAgKVxuICAgICAgY29uc3QgZG9zc2llcnNMZWdpc2xhdGlmc0NsZWFuSnNvbjogc3RyaW5nID1cbiAgICAgICAgRG9zc2llcnNMZWdpc2xhdGlmc0NvbnZlcnQuZG9zc2llcnNMZWdpc2xhdGlmc1RvSnNvbihcbiAgICAgICAgICBkb3NzaWVyc0xlZ2lzbGF0aWZzQ2xlYW4sXG4gICAgICAgIClcbiAgICAgIGNvbnN0IGpzb25GaWxlUGF0aDogc3RyaW5nID0gcGF0aC5qb2luKFxuICAgICAgICBkYXRhRGlyLFxuICAgICAgICBkYXRhc2V0LmZpbGVuYW1lLnJlcGxhY2UoL1xcLmpzb24kLywgXCJfbmV0dG95ZS5qc29uXCIpLFxuICAgICAgKVxuICAgICAgZnMud3JpdGVGaWxlU3luYyhqc29uRmlsZVBhdGgsIGRvc3NpZXJzTGVnaXNsYXRpZnNDbGVhbkpzb24sIHtcbiAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgfSlcbiAgICB9XG4gIH1cblxuICBpZiAoZW5hYmxlZERhdGFzZXRzICYgRW5hYmxlZERhdGFzZXRzLlNjcnV0aW5zKSB7XG4gICAgZm9yIChjb25zdCBkYXRhc2V0IG9mIGRhdGFzZXRzLnNjcnV0aW5zKSB7XG4gICAgICBjb25zdCByYXdKc29uRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihkYXRhRGlyLCBkYXRhc2V0LmZpbGVuYW1lKVxuICAgICAgY29uc29sZS5sb2coYExvYWRpbmcgZmlsZTogJHtyYXdKc29uRmlsZVBhdGh9YClcbiAgICAgIGNvbnN0IHJhd0pzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhyYXdKc29uRmlsZVBhdGgsIHtcbiAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgfSlcblxuICAgICAgY29uc3Qgc2NydXRpbnM6IGFueSA9IFNjcnV0aW5zUmF3Q29udmVydC50b1NjcnV0aW5zKHJhd0pzb24pXG4gICAgICBzY3J1dGlucy5zY3J1dGlucyA9IHNjcnV0aW5zLnNjcnV0aW5zLnNjcnV0aW5cblxuICAgICAgZm9yIChjb25zdCBzY3J1dGluIG9mIHNjcnV0aW5zLnNjcnV0aW5zKSB7XG4gICAgICAgIGNsZWFuU2NydXRpbihzY3J1dGluKVxuICAgICAgfVxuXG4gICAgICBjb25zdCBzY3J1dGluc0pzb246IHN0cmluZyA9IEpTT04uc3RyaW5naWZ5KHNjcnV0aW5zLCBudWxsLCAyKVxuICAgICAgLy8gVmFsaWRhdGUgZ2VuZXJhdGVkIEpTT04uXG4gICAgICBjb25zdCBzY3J1dGluc0NsZWFuOiBTY3J1dGlucyA9IFNjcnV0aW5zQ29udmVydC50b1NjcnV0aW5zKHNjcnV0aW5zSnNvbilcbiAgICAgIGNvbnN0IHNjcnV0aW5zQ2xlYW5Kc29uOiBzdHJpbmcgPVxuICAgICAgICBTY3J1dGluc0NvbnZlcnQuc2NydXRpbnNUb0pzb24oc2NydXRpbnNDbGVhbilcbiAgICAgIGNvbnN0IGpzb25GaWxlUGF0aDogc3RyaW5nID0gcGF0aC5qb2luKFxuICAgICAgICBkYXRhRGlyLFxuICAgICAgICBkYXRhc2V0LmZpbGVuYW1lLnJlcGxhY2UoL1xcLmpzb24kLywgXCJfbmV0dG95ZS5qc29uXCIpLFxuICAgICAgKVxuICAgICAgZnMud3JpdGVGaWxlU3luYyhqc29uRmlsZVBhdGgsIHNjcnV0aW5zQ2xlYW5Kc29uLCB7IGVuY29kaW5nOiBcInV0ZjhcIiB9KVxuICAgIH1cbiAgfVxuXG4gIC8vIFJlc3RvcmUgc3RhbmRhcmQgY29udmVyc2lvbiBvZiBkYXRlcyB0byBKU09OLlxuICBEYXRlLnByb3RvdHlwZS50b0pTT04gPSBleGlzdGluZ0RhdGVUb0pzb25cbn1cblxuY2xlYW5EYXRhKG9wdGlvbnMuZGF0YURpcilcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxJQUFBQSxPQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBQyxnQkFBQSxH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
@@ -1,171 +0,0 @@
1
- import assert from "assert";
2
- import commandLineArgs from "command-line-args";
3
- import fs from "fs";
4
- import path from "path";
5
- import { cleanActeur } from "../cleaners/acteurs.mjs";
6
- import { cleanTexteLegislatif } from "../cleaners/amendements.mjs";
7
- import { cleanDocumentOrDivision } from "../cleaners/documents.mjs";
8
- import { cleanDossierParlementaire } from "../cleaners/dossiers_legislatifs.mjs";
9
- import { cleanOrgane } from "../cleaners/organes.mjs";
10
- import { cleanReunion } from "../cleaners/reunions.mjs";
11
- import { cleanScrutin } from "../cleaners/scrutins.mjs";
12
- import { datasets, EnabledDatasets } from "../datasets.mjs";
13
- import { existingDateToJson, patchedDateToJson } from "../dates.mjs";
14
- import { Convert as ActeursEtOrganesConvert } from "../types/acteurs_et_organes.mjs";
15
- import { Convert as AgendasConvert } from "../types/agendas.mjs";
16
- import { Convert as AmendementsConvert } from "../types/amendements.mjs";
17
- import { Convert as DossiersLegislatifsConvert } from "../types/dossiers_legislatifs.mjs";
18
- import { Convert as ScrutinsConvert } from "../types/scrutins.mjs";
19
- import { Convert as ActeursEtOrganesRawConvert } from "../raw_types/acteurs_et_organes.mjs";
20
- import { Convert as AgendasRawConvert } from "../raw_types/agendas.mjs";
21
- import { Convert as AmendementsRawConvert } from "../raw_types/amendements.mjs";
22
- import { Convert as DossiersLegislatifsRawConvert } from "../raw_types/dossiers_legislatifs.mjs";
23
- import { Convert as ScrutinsRawConvert } from "../raw_types/scrutins.mjs";
24
- const optionsDefinitions = [{
25
- alias: "k",
26
- defaultValue: ["All"],
27
- help: "categories of datasets to reorganize",
28
- multiple: true,
29
- name: "categories",
30
- type: String
31
- }, {
32
- defaultOption: true,
33
- help: "directory containing Assemblée open data files",
34
- name: "dataDir",
35
- type: String
36
- }];
37
- const options = commandLineArgs(optionsDefinitions);
38
- function cleanData(dataDir) {
39
- Date.prototype.toJSON = patchedDateToJson;
40
- options.categories.map(datasetName => assert.notStrictEqual(EnabledDatasets[datasetName], undefined, `Unknown name of dataset: ${datasetName}`));
41
- const enabledDatasets = options.categories.reduce((enabledDatasets, datasetName) => enabledDatasets | EnabledDatasets[datasetName], EnabledDatasets.None);
42
- if (enabledDatasets & EnabledDatasets.ActeursEtOrganes) {
43
- for (const dataset of datasets.acteursEtOrganes) {
44
- const rawJsonFilePath = path.join(dataDir, dataset.filename);
45
- console.log(`Loading file: ${rawJsonFilePath}`);
46
- const rawJson = fs.readFileSync(rawJsonFilePath, {
47
- encoding: "utf8"
48
- });
49
- const acteursEtOrganes = ActeursEtOrganesRawConvert.toActeursEtOrganes(rawJson);
50
- // const acteurs = jp.query(acteursEtOrganes, "$.export.acteurs.acteur")[0]
51
- const organes = acteursEtOrganes.export.organes.organe;
52
- acteursEtOrganes.organes = organes;
53
- const acteurs = acteursEtOrganes.export.acteurs.acteur;
54
- acteursEtOrganes.acteurs = acteurs;
55
- delete acteursEtOrganes.export;
56
- for (const acteur of acteurs) {
57
- cleanActeur(acteur);
58
- }
59
- for (const organe of organes) {
60
- cleanOrgane(organe);
61
- }
62
- const acteursEtOrganesJson = JSON.stringify(acteursEtOrganes, null, 2);
63
- // Validate generated JSON.
64
- const acteursEtOrganesClean = ActeursEtOrganesConvert.toActeursEtOrganes(acteursEtOrganesJson);
65
- const acteursEtOrganesCleanJson = ActeursEtOrganesConvert.acteursEtOrganesToJson(acteursEtOrganesClean);
66
- const jsonFilePath = path.join(dataDir, dataset.filename.replace(/\.json$/, "_nettoye.json"));
67
- fs.writeFileSync(jsonFilePath, acteursEtOrganesCleanJson, {
68
- encoding: "utf8"
69
- });
70
- }
71
- }
72
- if (enabledDatasets & EnabledDatasets.Agendas) {
73
- for (const dataset of datasets.agendas) {
74
- const rawJsonFilePath = path.join(dataDir, dataset.filename);
75
- console.log(`Loading file: ${rawJsonFilePath}`);
76
- const rawJson = fs.readFileSync(rawJsonFilePath, {
77
- encoding: "utf8"
78
- });
79
- const agendas = AgendasRawConvert.toAgendas(rawJson);
80
- agendas.reunions = agendas.reunions.reunion;
81
- for (const reunion of agendas.reunions) {
82
- cleanReunion(reunion);
83
- }
84
- const agendasJson = JSON.stringify(agendas, null, 2);
85
- // Validate generated JSON.
86
- const agendasClean = AgendasConvert.toAgendas(agendasJson);
87
- const agendasCleanJson = AgendasConvert.agendasToJson(agendasClean);
88
- const jsonFilePath = path.join(dataDir, dataset.filename.replace(/\.json$/, "_nettoye.json"));
89
- fs.writeFileSync(jsonFilePath, agendasCleanJson, {
90
- encoding: "utf8"
91
- });
92
- }
93
- }
94
- if (enabledDatasets & EnabledDatasets.Amendements) {
95
- for (const dataset of datasets.amendements) {
96
- const rawJsonFilePath = path.join(dataDir, dataset.filename);
97
- console.log(`Loading file: ${rawJsonFilePath}`);
98
- const rawJson = fs.readFileSync(rawJsonFilePath, {
99
- encoding: "utf8"
100
- });
101
- const amendements = AmendementsRawConvert.toAmendements(rawJson);
102
- amendements.textesLegislatifs = amendements.textesEtAmendements.texteleg;
103
- delete amendements.textesEtAmendements;
104
- for (const texteLegislatif of amendements.textesLegislatifs) {
105
- cleanTexteLegislatif(texteLegislatif);
106
- }
107
- const amendementsJson = JSON.stringify(amendements, null, 2);
108
- // Validate generated JSON.
109
- const amendementsClean = AmendementsConvert.toAmendements(amendementsJson);
110
- const amendementsCleanJson = AmendementsConvert.amendementsToJson(amendementsClean);
111
- const jsonFilePath = path.join(dataDir, dataset.filename.replace(/\.json$/, "_nettoye.json"));
112
- fs.writeFileSync(jsonFilePath, amendementsCleanJson, {
113
- encoding: "utf8"
114
- });
115
- }
116
- }
117
- if (enabledDatasets & EnabledDatasets.DossiersLegislatifs) {
118
- for (const dataset of datasets.dossiersLegislatifs) {
119
- const rawJsonFilePath = path.join(dataDir, dataset.filename);
120
- console.log(`Loading file: ${rawJsonFilePath}`);
121
- const rawJson = fs.readFileSync(rawJsonFilePath, {
122
- encoding: "utf8"
123
- });
124
- const dossiersLegislatifs = DossiersLegislatifsRawConvert.toDossiersLegislatifs(rawJson);
125
- dossiersLegislatifs.textesLegislatifs = dossiersLegislatifs.export.textesLegislatifs.document;
126
- dossiersLegislatifs.dossiersParlementaires = dossiersLegislatifs.export.dossiersLegislatifs.dossier.map(dossier => dossier.dossierParlementaire);
127
- delete dossiersLegislatifs.export;
128
- for (const document of dossiersLegislatifs.textesLegislatifs) {
129
- cleanDocumentOrDivision(document);
130
- }
131
- for (const dossierParlementaire of dossiersLegislatifs.dossiersParlementaires) {
132
- cleanDossierParlementaire(dossierParlementaire);
133
- }
134
- const dossiersLegislatifsJson = JSON.stringify(dossiersLegislatifs, null, 2);
135
- // Validate generated JSON.
136
- const dossiersLegislatifsClean = DossiersLegislatifsConvert.toDossiersLegislatifs(dossiersLegislatifsJson);
137
- const dossiersLegislatifsCleanJson = DossiersLegislatifsConvert.dossiersLegislatifsToJson(dossiersLegislatifsClean);
138
- const jsonFilePath = path.join(dataDir, dataset.filename.replace(/\.json$/, "_nettoye.json"));
139
- fs.writeFileSync(jsonFilePath, dossiersLegislatifsCleanJson, {
140
- encoding: "utf8"
141
- });
142
- }
143
- }
144
- if (enabledDatasets & EnabledDatasets.Scrutins) {
145
- for (const dataset of datasets.scrutins) {
146
- const rawJsonFilePath = path.join(dataDir, dataset.filename);
147
- console.log(`Loading file: ${rawJsonFilePath}`);
148
- const rawJson = fs.readFileSync(rawJsonFilePath, {
149
- encoding: "utf8"
150
- });
151
- const scrutins = ScrutinsRawConvert.toScrutins(rawJson);
152
- scrutins.scrutins = scrutins.scrutins.scrutin;
153
- for (const scrutin of scrutins.scrutins) {
154
- cleanScrutin(scrutin);
155
- }
156
- const scrutinsJson = JSON.stringify(scrutins, null, 2);
157
- // Validate generated JSON.
158
- const scrutinsClean = ScrutinsConvert.toScrutins(scrutinsJson);
159
- const scrutinsCleanJson = ScrutinsConvert.scrutinsToJson(scrutinsClean);
160
- const jsonFilePath = path.join(dataDir, dataset.filename.replace(/\.json$/, "_nettoye.json"));
161
- fs.writeFileSync(jsonFilePath, scrutinsCleanJson, {
162
- encoding: "utf8"
163
- });
164
- }
165
- }
166
-
167
- // Restore standard conversion of dates to JSON.
168
- Date.prototype.toJSON = existingDateToJson;
169
- }
170
- cleanData(options.dataDir);
171
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJhc3NlcnQiLCJjb21tYW5kTGluZUFyZ3MiLCJmcyIsInBhdGgiLCJjbGVhbkFjdGV1ciIsImNsZWFuVGV4dGVMZWdpc2xhdGlmIiwiY2xlYW5Eb2N1bWVudE9yRGl2aXNpb24iLCJjbGVhbkRvc3NpZXJQYXJsZW1lbnRhaXJlIiwiY2xlYW5PcmdhbmUiLCJjbGVhblJldW5pb24iLCJjbGVhblNjcnV0aW4iLCJkYXRhc2V0cyIsIkVuYWJsZWREYXRhc2V0cyIsImV4aXN0aW5nRGF0ZVRvSnNvbiIsInBhdGNoZWREYXRlVG9Kc29uIiwiQ29udmVydCIsIkFjdGV1cnNFdE9yZ2FuZXNDb252ZXJ0IiwiQWdlbmRhc0NvbnZlcnQiLCJBbWVuZGVtZW50c0NvbnZlcnQiLCJEb3NzaWVyc0xlZ2lzbGF0aWZzQ29udmVydCIsIlNjcnV0aW5zQ29udmVydCIsIkFjdGV1cnNFdE9yZ2FuZXNSYXdDb252ZXJ0IiwiQWdlbmRhc1Jhd0NvbnZlcnQiLCJBbWVuZGVtZW50c1Jhd0NvbnZlcnQiLCJEb3NzaWVyc0xlZ2lzbGF0aWZzUmF3Q29udmVydCIsIlNjcnV0aW5zUmF3Q29udmVydCIsIm9wdGlvbnNEZWZpbml0aW9ucyIsImFsaWFzIiwiZGVmYXVsdFZhbHVlIiwiaGVscCIsIm11bHRpcGxlIiwibmFtZSIsInR5cGUiLCJTdHJpbmciLCJkZWZhdWx0T3B0aW9uIiwib3B0aW9ucyIsImNsZWFuRGF0YSIsImRhdGFEaXIiLCJEYXRlIiwicHJvdG90eXBlIiwidG9KU09OIiwiY2F0ZWdvcmllcyIsIm1hcCIsImRhdGFzZXROYW1lIiwibm90U3RyaWN0RXF1YWwiLCJ1bmRlZmluZWQiLCJlbmFibGVkRGF0YXNldHMiLCJyZWR1Y2UiLCJOb25lIiwiQWN0ZXVyc0V0T3JnYW5lcyIsImRhdGFzZXQiLCJhY3RldXJzRXRPcmdhbmVzIiwicmF3SnNvbkZpbGVQYXRoIiwiam9pbiIsImZpbGVuYW1lIiwiY29uc29sZSIsImxvZyIsInJhd0pzb24iLCJyZWFkRmlsZVN5bmMiLCJlbmNvZGluZyIsInRvQWN0ZXVyc0V0T3JnYW5lcyIsIm9yZ2FuZXMiLCJleHBvcnQiLCJvcmdhbmUiLCJhY3RldXJzIiwiYWN0ZXVyIiwiYWN0ZXVyc0V0T3JnYW5lc0pzb24iLCJKU09OIiwic3RyaW5naWZ5IiwiYWN0ZXVyc0V0T3JnYW5lc0NsZWFuIiwiYWN0ZXVyc0V0T3JnYW5lc0NsZWFuSnNvbiIsImFjdGV1cnNFdE9yZ2FuZXNUb0pzb24iLCJqc29uRmlsZVBhdGgiLCJyZXBsYWNlIiwid3JpdGVGaWxlU3luYyIsIkFnZW5kYXMiLCJhZ2VuZGFzIiwidG9BZ2VuZGFzIiwicmV1bmlvbnMiLCJyZXVuaW9uIiwiYWdlbmRhc0pzb24iLCJhZ2VuZGFzQ2xlYW4iLCJhZ2VuZGFzQ2xlYW5Kc29uIiwiYWdlbmRhc1RvSnNvbiIsIkFtZW5kZW1lbnRzIiwiYW1lbmRlbWVudHMiLCJ0b0FtZW5kZW1lbnRzIiwidGV4dGVzTGVnaXNsYXRpZnMiLCJ0ZXh0ZXNFdEFtZW5kZW1lbnRzIiwidGV4dGVsZWciLCJ0ZXh0ZUxlZ2lzbGF0aWYiLCJhbWVuZGVtZW50c0pzb24iLCJhbWVuZGVtZW50c0NsZWFuIiwiYW1lbmRlbWVudHNDbGVhbkpzb24iLCJhbWVuZGVtZW50c1RvSnNvbiIsIkRvc3NpZXJzTGVnaXNsYXRpZnMiLCJkb3NzaWVyc0xlZ2lzbGF0aWZzIiwidG9Eb3NzaWVyc0xlZ2lzbGF0aWZzIiwiZG9jdW1lbnQiLCJkb3NzaWVyc1BhcmxlbWVudGFpcmVzIiwiZG9zc2llciIsImRvc3NpZXJQYXJsZW1lbnRhaXJlIiwiZG9zc2llcnNMZWdpc2xhdGlmc0pzb24iLCJkb3NzaWVyc0xlZ2lzbGF0aWZzQ2xlYW4iLCJkb3NzaWVyc0xlZ2lzbGF0aWZzQ2xlYW5Kc29uIiwiZG9zc2llcnNMZWdpc2xhdGlmc1RvSnNvbiIsIlNjcnV0aW5zIiwic2NydXRpbnMiLCJ0b1NjcnV0aW5zIiwic2NydXRpbiIsInNjcnV0aW5zSnNvbiIsInNjcnV0aW5zQ2xlYW4iLCJzY3J1dGluc0NsZWFuSnNvbiIsInNjcnV0aW5zVG9Kc29uIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NjcmlwdHMvY2xlYW5fZGF0YS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXNzZXJ0IGZyb20gXCJhc3NlcnRcIlxuaW1wb3J0IGNvbW1hbmRMaW5lQXJncyBmcm9tIFwiY29tbWFuZC1saW5lLWFyZ3NcIlxuaW1wb3J0IGZzIGZyb20gXCJmc1wiXG5pbXBvcnQgcGF0aCBmcm9tIFwicGF0aFwiXG5cbmltcG9ydCB7IGNsZWFuQWN0ZXVyIH0gZnJvbSBcIi4uL2NsZWFuZXJzL2FjdGV1cnNcIlxuaW1wb3J0IHsgY2xlYW5UZXh0ZUxlZ2lzbGF0aWYgfSBmcm9tIFwiLi4vY2xlYW5lcnMvYW1lbmRlbWVudHNcIlxuaW1wb3J0IHsgY2xlYW5Eb2N1bWVudE9yRGl2aXNpb24gfSBmcm9tIFwiLi4vY2xlYW5lcnMvZG9jdW1lbnRzXCJcbmltcG9ydCB7IGNsZWFuRG9zc2llclBhcmxlbWVudGFpcmUgfSBmcm9tIFwiLi4vY2xlYW5lcnMvZG9zc2llcnNfbGVnaXNsYXRpZnNcIlxuaW1wb3J0IHsgY2xlYW5PcmdhbmUgfSBmcm9tIFwiLi4vY2xlYW5lcnMvb3JnYW5lc1wiXG5pbXBvcnQgeyBjbGVhblJldW5pb24gfSBmcm9tIFwiLi4vY2xlYW5lcnMvcmV1bmlvbnNcIlxuaW1wb3J0IHsgY2xlYW5TY3J1dGluIH0gZnJvbSBcIi4uL2NsZWFuZXJzL3NjcnV0aW5zXCJcbmltcG9ydCB7IGRhdGFzZXRzLCBFbmFibGVkRGF0YXNldHMgfSBmcm9tIFwiLi4vZGF0YXNldHNcIlxuaW1wb3J0IHsgZXhpc3RpbmdEYXRlVG9Kc29uLCBwYXRjaGVkRGF0ZVRvSnNvbiB9IGZyb20gXCIuLi9kYXRlc1wiXG5pbXBvcnQge1xuICBBY3RldXJzRXRPcmdhbmVzLFxuICBDb252ZXJ0IGFzIEFjdGV1cnNFdE9yZ2FuZXNDb252ZXJ0LFxufSBmcm9tIFwiLi4vdHlwZXMvYWN0ZXVyc19ldF9vcmdhbmVzXCJcbmltcG9ydCB7IEFnZW5kYXMsIENvbnZlcnQgYXMgQWdlbmRhc0NvbnZlcnQgfSBmcm9tIFwiLi4vdHlwZXMvYWdlbmRhc1wiXG5pbXBvcnQge1xuICBBbWVuZGVtZW50cyxcbiAgQ29udmVydCBhcyBBbWVuZGVtZW50c0NvbnZlcnQsXG59IGZyb20gXCIuLi90eXBlcy9hbWVuZGVtZW50c1wiXG5pbXBvcnQge1xuICBEb3NzaWVyc0xlZ2lzbGF0aWZzLFxuICBDb252ZXJ0IGFzIERvc3NpZXJzTGVnaXNsYXRpZnNDb252ZXJ0LFxufSBmcm9tIFwiLi4vdHlwZXMvZG9zc2llcnNfbGVnaXNsYXRpZnNcIlxuaW1wb3J0IHsgQ29udmVydCBhcyBTY3J1dGluc0NvbnZlcnQsIFNjcnV0aW5zIH0gZnJvbSBcIi4uL3R5cGVzL3NjcnV0aW5zXCJcbmltcG9ydCB7IENvbnZlcnQgYXMgQWN0ZXVyc0V0T3JnYW5lc1Jhd0NvbnZlcnQgfSBmcm9tIFwiLi4vcmF3X3R5cGVzL2FjdGV1cnNfZXRfb3JnYW5lc1wiXG5pbXBvcnQgeyBDb252ZXJ0IGFzIEFnZW5kYXNSYXdDb252ZXJ0IH0gZnJvbSBcIi4uL3Jhd190eXBlcy9hZ2VuZGFzXCJcbmltcG9ydCB7IENvbnZlcnQgYXMgQW1lbmRlbWVudHNSYXdDb252ZXJ0IH0gZnJvbSBcIi4uL3Jhd190eXBlcy9hbWVuZGVtZW50c1wiXG5pbXBvcnQge1xuICBDb252ZXJ0IGFzIERvc3NpZXJzTGVnaXNsYXRpZnNSYXdDb252ZXJ0LFxuICBEb3NzaWVyIGFzIERvc3NpZXJSYXcsXG59IGZyb20gXCIuLi9yYXdfdHlwZXMvZG9zc2llcnNfbGVnaXNsYXRpZnNcIlxuaW1wb3J0IHsgQ29udmVydCBhcyBTY3J1dGluc1Jhd0NvbnZlcnQgfSBmcm9tIFwiLi4vcmF3X3R5cGVzL3NjcnV0aW5zXCJcblxuY29uc3Qgb3B0aW9uc0RlZmluaXRpb25zID0gW1xuICB7XG4gICAgYWxpYXM6IFwia1wiLFxuICAgIGRlZmF1bHRWYWx1ZTogW1wiQWxsXCJdLFxuICAgIGhlbHA6IFwiY2F0ZWdvcmllcyBvZiBkYXRhc2V0cyB0byByZW9yZ2FuaXplXCIsXG4gICAgbXVsdGlwbGU6IHRydWUsXG4gICAgbmFtZTogXCJjYXRlZ29yaWVzXCIsXG4gICAgdHlwZTogU3RyaW5nLFxuICB9LFxuICB7XG4gICAgZGVmYXVsdE9wdGlvbjogdHJ1ZSxcbiAgICBoZWxwOiBcImRpcmVjdG9yeSBjb250YWluaW5nIEFzc2VtYmzDqWUgb3BlbiBkYXRhIGZpbGVzXCIsXG4gICAgbmFtZTogXCJkYXRhRGlyXCIsXG4gICAgdHlwZTogU3RyaW5nLFxuICB9LFxuXVxuY29uc3Qgb3B0aW9ucyA9IGNvbW1hbmRMaW5lQXJncyhvcHRpb25zRGVmaW5pdGlvbnMpXG5cbmZ1bmN0aW9uIGNsZWFuRGF0YShkYXRhRGlyOiBzdHJpbmcpOiB2b2lkIHtcbiAgRGF0ZS5wcm90b3R5cGUudG9KU09OID0gcGF0Y2hlZERhdGVUb0pzb25cblxuICBvcHRpb25zLmNhdGVnb3JpZXMubWFwKChkYXRhc2V0TmFtZTogc3RyaW5nKSA9PlxuICAgIGFzc2VydC5ub3RTdHJpY3RFcXVhbChcbiAgICAgIChFbmFibGVkRGF0YXNldHMgYXMgYW55IGFzIHsgW25hbWU6IHN0cmluZ106IEVuYWJsZWREYXRhc2V0cyB9KVtcbiAgICAgICAgZGF0YXNldE5hbWVcbiAgICAgIF0sXG4gICAgICB1bmRlZmluZWQsXG4gICAgICBgVW5rbm93biBuYW1lIG9mIGRhdGFzZXQ6ICR7ZGF0YXNldE5hbWV9YCxcbiAgICApLFxuICApXG4gIGNvbnN0IGVuYWJsZWREYXRhc2V0cyA9IG9wdGlvbnMuY2F0ZWdvcmllcy5yZWR1Y2UoXG4gICAgKGVuYWJsZWREYXRhc2V0czogRW5hYmxlZERhdGFzZXRzLCBkYXRhc2V0TmFtZTogc3RyaW5nKTogRW5hYmxlZERhdGFzZXRzID0+XG4gICAgICBlbmFibGVkRGF0YXNldHMgfFxuICAgICAgKEVuYWJsZWREYXRhc2V0cyBhcyBhbnkgYXMgeyBbbmFtZTogc3RyaW5nXTogRW5hYmxlZERhdGFzZXRzIH0pW1xuICAgICAgICBkYXRhc2V0TmFtZVxuICAgICAgXSxcbiAgICBFbmFibGVkRGF0YXNldHMuTm9uZSxcbiAgKVxuXG4gIGlmIChlbmFibGVkRGF0YXNldHMgJiBFbmFibGVkRGF0YXNldHMuQWN0ZXVyc0V0T3JnYW5lcykge1xuICAgIGZvciAoY29uc3QgZGF0YXNldCBvZiBkYXRhc2V0cy5hY3RldXJzRXRPcmdhbmVzKSB7XG4gICAgICBjb25zdCByYXdKc29uRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihkYXRhRGlyLCBkYXRhc2V0LmZpbGVuYW1lKVxuICAgICAgY29uc29sZS5sb2coYExvYWRpbmcgZmlsZTogJHtyYXdKc29uRmlsZVBhdGh9YClcbiAgICAgIGNvbnN0IHJhd0pzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhyYXdKc29uRmlsZVBhdGgsIHtcbiAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgfSlcblxuICAgICAgY29uc3QgYWN0ZXVyc0V0T3JnYW5lczogYW55ID1cbiAgICAgICAgQWN0ZXVyc0V0T3JnYW5lc1Jhd0NvbnZlcnQudG9BY3RldXJzRXRPcmdhbmVzKHJhd0pzb24pXG4gICAgICAvLyBjb25zdCBhY3RldXJzID0ganAucXVlcnkoYWN0ZXVyc0V0T3JnYW5lcywgXCIkLmV4cG9ydC5hY3RldXJzLmFjdGV1clwiKVswXVxuICAgICAgY29uc3Qgb3JnYW5lcyA9IGFjdGV1cnNFdE9yZ2FuZXMuZXhwb3J0Lm9yZ2FuZXMub3JnYW5lXG4gICAgICBhY3RldXJzRXRPcmdhbmVzLm9yZ2FuZXMgPSBvcmdhbmVzXG4gICAgICBjb25zdCBhY3RldXJzID0gYWN0ZXVyc0V0T3JnYW5lcy5leHBvcnQuYWN0ZXVycy5hY3RldXJcbiAgICAgIGFjdGV1cnNFdE9yZ2FuZXMuYWN0ZXVycyA9IGFjdGV1cnNcbiAgICAgIGRlbGV0ZSBhY3RldXJzRXRPcmdhbmVzLmV4cG9ydFxuXG4gICAgICBmb3IgKGNvbnN0IGFjdGV1ciBvZiBhY3RldXJzKSB7XG4gICAgICAgIGNsZWFuQWN0ZXVyKGFjdGV1cilcbiAgICAgIH1cblxuICAgICAgZm9yIChjb25zdCBvcmdhbmUgb2Ygb3JnYW5lcykge1xuICAgICAgICBjbGVhbk9yZ2FuZShvcmdhbmUpXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGFjdGV1cnNFdE9yZ2FuZXNKc29uOiBzdHJpbmcgPSBKU09OLnN0cmluZ2lmeShcbiAgICAgICAgYWN0ZXVyc0V0T3JnYW5lcyxcbiAgICAgICAgbnVsbCxcbiAgICAgICAgMixcbiAgICAgIClcbiAgICAgIC8vIFZhbGlkYXRlIGdlbmVyYXRlZCBKU09OLlxuICAgICAgY29uc3QgYWN0ZXVyc0V0T3JnYW5lc0NsZWFuOiBBY3RldXJzRXRPcmdhbmVzID1cbiAgICAgICAgQWN0ZXVyc0V0T3JnYW5lc0NvbnZlcnQudG9BY3RldXJzRXRPcmdhbmVzKGFjdGV1cnNFdE9yZ2FuZXNKc29uKVxuICAgICAgY29uc3QgYWN0ZXVyc0V0T3JnYW5lc0NsZWFuSnNvbjogc3RyaW5nID1cbiAgICAgICAgQWN0ZXVyc0V0T3JnYW5lc0NvbnZlcnQuYWN0ZXVyc0V0T3JnYW5lc1RvSnNvbihhY3RldXJzRXRPcmdhbmVzQ2xlYW4pXG4gICAgICBjb25zdCBqc29uRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICAgICAgZGF0YURpcixcbiAgICAgICAgZGF0YXNldC5maWxlbmFtZS5yZXBsYWNlKC9cXC5qc29uJC8sIFwiX25ldHRveWUuanNvblwiKSxcbiAgICAgIClcbiAgICAgIGZzLndyaXRlRmlsZVN5bmMoanNvbkZpbGVQYXRoLCBhY3RldXJzRXRPcmdhbmVzQ2xlYW5Kc29uLCB7XG4gICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgIH0pXG4gICAgfVxuICB9XG5cbiAgaWYgKGVuYWJsZWREYXRhc2V0cyAmIEVuYWJsZWREYXRhc2V0cy5BZ2VuZGFzKSB7XG4gICAgZm9yIChjb25zdCBkYXRhc2V0IG9mIGRhdGFzZXRzLmFnZW5kYXMpIHtcbiAgICAgIGNvbnN0IHJhd0pzb25GaWxlUGF0aDogc3RyaW5nID0gcGF0aC5qb2luKGRhdGFEaXIsIGRhdGFzZXQuZmlsZW5hbWUpXG4gICAgICBjb25zb2xlLmxvZyhgTG9hZGluZyBmaWxlOiAke3Jhd0pzb25GaWxlUGF0aH1gKVxuICAgICAgY29uc3QgcmF3SnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKHJhd0pzb25GaWxlUGF0aCwge1xuICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICB9KVxuXG4gICAgICBjb25zdCBhZ2VuZGFzOiBhbnkgPSBBZ2VuZGFzUmF3Q29udmVydC50b0FnZW5kYXMocmF3SnNvbilcbiAgICAgIGFnZW5kYXMucmV1bmlvbnMgPSBhZ2VuZGFzLnJldW5pb25zLnJldW5pb25cblxuICAgICAgZm9yIChjb25zdCByZXVuaW9uIG9mIGFnZW5kYXMucmV1bmlvbnMpIHtcbiAgICAgICAgY2xlYW5SZXVuaW9uKHJldW5pb24pXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGFnZW5kYXNKc29uOiBzdHJpbmcgPSBKU09OLnN0cmluZ2lmeShhZ2VuZGFzLCBudWxsLCAyKVxuICAgICAgLy8gVmFsaWRhdGUgZ2VuZXJhdGVkIEpTT04uXG4gICAgICBjb25zdCBhZ2VuZGFzQ2xlYW46IEFnZW5kYXMgPSBBZ2VuZGFzQ29udmVydC50b0FnZW5kYXMoYWdlbmRhc0pzb24pXG4gICAgICBjb25zdCBhZ2VuZGFzQ2xlYW5Kc29uOiBzdHJpbmcgPVxuICAgICAgICBBZ2VuZGFzQ29udmVydC5hZ2VuZGFzVG9Kc29uKGFnZW5kYXNDbGVhbilcbiAgICAgIGNvbnN0IGpzb25GaWxlUGF0aDogc3RyaW5nID0gcGF0aC5qb2luKFxuICAgICAgICBkYXRhRGlyLFxuICAgICAgICBkYXRhc2V0LmZpbGVuYW1lLnJlcGxhY2UoL1xcLmpzb24kLywgXCJfbmV0dG95ZS5qc29uXCIpLFxuICAgICAgKVxuICAgICAgZnMud3JpdGVGaWxlU3luYyhqc29uRmlsZVBhdGgsIGFnZW5kYXNDbGVhbkpzb24sIHsgZW5jb2Rpbmc6IFwidXRmOFwiIH0pXG4gICAgfVxuICB9XG5cbiAgaWYgKGVuYWJsZWREYXRhc2V0cyAmIEVuYWJsZWREYXRhc2V0cy5BbWVuZGVtZW50cykge1xuICAgIGZvciAoY29uc3QgZGF0YXNldCBvZiBkYXRhc2V0cy5hbWVuZGVtZW50cykge1xuICAgICAgY29uc3QgcmF3SnNvbkZpbGVQYXRoOiBzdHJpbmcgPSBwYXRoLmpvaW4oZGF0YURpciwgZGF0YXNldC5maWxlbmFtZSlcbiAgICAgIGNvbnNvbGUubG9nKGBMb2FkaW5nIGZpbGU6ICR7cmF3SnNvbkZpbGVQYXRofWApXG4gICAgICBjb25zdCByYXdKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMocmF3SnNvbkZpbGVQYXRoLCB7XG4gICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgIH0pXG5cbiAgICAgIGNvbnN0IGFtZW5kZW1lbnRzOiBhbnkgPSBBbWVuZGVtZW50c1Jhd0NvbnZlcnQudG9BbWVuZGVtZW50cyhyYXdKc29uKVxuICAgICAgYW1lbmRlbWVudHMudGV4dGVzTGVnaXNsYXRpZnMgPSBhbWVuZGVtZW50cy50ZXh0ZXNFdEFtZW5kZW1lbnRzLnRleHRlbGVnXG4gICAgICBkZWxldGUgYW1lbmRlbWVudHMudGV4dGVzRXRBbWVuZGVtZW50c1xuXG4gICAgICBmb3IgKGNvbnN0IHRleHRlTGVnaXNsYXRpZiBvZiBhbWVuZGVtZW50cy50ZXh0ZXNMZWdpc2xhdGlmcykge1xuICAgICAgICBjbGVhblRleHRlTGVnaXNsYXRpZih0ZXh0ZUxlZ2lzbGF0aWYpXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGFtZW5kZW1lbnRzSnNvbjogc3RyaW5nID0gSlNPTi5zdHJpbmdpZnkoYW1lbmRlbWVudHMsIG51bGwsIDIpXG4gICAgICAvLyBWYWxpZGF0ZSBnZW5lcmF0ZWQgSlNPTi5cbiAgICAgIGNvbnN0IGFtZW5kZW1lbnRzQ2xlYW46IEFtZW5kZW1lbnRzID1cbiAgICAgICAgQW1lbmRlbWVudHNDb252ZXJ0LnRvQW1lbmRlbWVudHMoYW1lbmRlbWVudHNKc29uKVxuICAgICAgY29uc3QgYW1lbmRlbWVudHNDbGVhbkpzb246IHN0cmluZyA9XG4gICAgICAgIEFtZW5kZW1lbnRzQ29udmVydC5hbWVuZGVtZW50c1RvSnNvbihhbWVuZGVtZW50c0NsZWFuKVxuICAgICAgY29uc3QganNvbkZpbGVQYXRoOiBzdHJpbmcgPSBwYXRoLmpvaW4oXG4gICAgICAgIGRhdGFEaXIsXG4gICAgICAgIGRhdGFzZXQuZmlsZW5hbWUucmVwbGFjZSgvXFwuanNvbiQvLCBcIl9uZXR0b3llLmpzb25cIiksXG4gICAgICApXG4gICAgICBmcy53cml0ZUZpbGVTeW5jKGpzb25GaWxlUGF0aCwgYW1lbmRlbWVudHNDbGVhbkpzb24sIHsgZW5jb2Rpbmc6IFwidXRmOFwiIH0pXG4gICAgfVxuICB9XG5cbiAgaWYgKGVuYWJsZWREYXRhc2V0cyAmIEVuYWJsZWREYXRhc2V0cy5Eb3NzaWVyc0xlZ2lzbGF0aWZzKSB7XG4gICAgZm9yIChjb25zdCBkYXRhc2V0IG9mIGRhdGFzZXRzLmRvc3NpZXJzTGVnaXNsYXRpZnMpIHtcbiAgICAgIGNvbnN0IHJhd0pzb25GaWxlUGF0aDogc3RyaW5nID0gcGF0aC5qb2luKGRhdGFEaXIsIGRhdGFzZXQuZmlsZW5hbWUpXG4gICAgICBjb25zb2xlLmxvZyhgTG9hZGluZyBmaWxlOiAke3Jhd0pzb25GaWxlUGF0aH1gKVxuICAgICAgY29uc3QgcmF3SnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKHJhd0pzb25GaWxlUGF0aCwge1xuICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICB9KVxuXG4gICAgICBjb25zdCBkb3NzaWVyc0xlZ2lzbGF0aWZzOiBhbnkgPVxuICAgICAgICBEb3NzaWVyc0xlZ2lzbGF0aWZzUmF3Q29udmVydC50b0Rvc3NpZXJzTGVnaXNsYXRpZnMocmF3SnNvbilcbiAgICAgIGRvc3NpZXJzTGVnaXNsYXRpZnMudGV4dGVzTGVnaXNsYXRpZnMgPVxuICAgICAgICBkb3NzaWVyc0xlZ2lzbGF0aWZzLmV4cG9ydC50ZXh0ZXNMZWdpc2xhdGlmcy5kb2N1bWVudFxuICAgICAgZG9zc2llcnNMZWdpc2xhdGlmcy5kb3NzaWVyc1BhcmxlbWVudGFpcmVzID0gKFxuICAgICAgICBkb3NzaWVyc0xlZ2lzbGF0aWZzLmV4cG9ydC5kb3NzaWVyc0xlZ2lzbGF0aWZzLmRvc3NpZXIgYXMgRG9zc2llclJhd1tdXG4gICAgICApLm1hcCgoZG9zc2llcikgPT4gZG9zc2llci5kb3NzaWVyUGFybGVtZW50YWlyZSlcbiAgICAgIGRlbGV0ZSBkb3NzaWVyc0xlZ2lzbGF0aWZzLmV4cG9ydFxuXG4gICAgICBmb3IgKGNvbnN0IGRvY3VtZW50IG9mIGRvc3NpZXJzTGVnaXNsYXRpZnMudGV4dGVzTGVnaXNsYXRpZnMpIHtcbiAgICAgICAgY2xlYW5Eb2N1bWVudE9yRGl2aXNpb24oZG9jdW1lbnQpXG4gICAgICB9XG5cbiAgICAgIGZvciAoY29uc3QgZG9zc2llclBhcmxlbWVudGFpcmUgb2YgZG9zc2llcnNMZWdpc2xhdGlmcy5kb3NzaWVyc1BhcmxlbWVudGFpcmVzKSB7XG4gICAgICAgIGNsZWFuRG9zc2llclBhcmxlbWVudGFpcmUoZG9zc2llclBhcmxlbWVudGFpcmUpXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGRvc3NpZXJzTGVnaXNsYXRpZnNKc29uOiBzdHJpbmcgPSBKU09OLnN0cmluZ2lmeShcbiAgICAgICAgZG9zc2llcnNMZWdpc2xhdGlmcyxcbiAgICAgICAgbnVsbCxcbiAgICAgICAgMixcbiAgICAgIClcbiAgICAgIC8vIFZhbGlkYXRlIGdlbmVyYXRlZCBKU09OLlxuICAgICAgY29uc3QgZG9zc2llcnNMZWdpc2xhdGlmc0NsZWFuOiBEb3NzaWVyc0xlZ2lzbGF0aWZzID1cbiAgICAgICAgRG9zc2llcnNMZWdpc2xhdGlmc0NvbnZlcnQudG9Eb3NzaWVyc0xlZ2lzbGF0aWZzKFxuICAgICAgICAgIGRvc3NpZXJzTGVnaXNsYXRpZnNKc29uLFxuICAgICAgICApXG4gICAgICBjb25zdCBkb3NzaWVyc0xlZ2lzbGF0aWZzQ2xlYW5Kc29uOiBzdHJpbmcgPVxuICAgICAgICBEb3NzaWVyc0xlZ2lzbGF0aWZzQ29udmVydC5kb3NzaWVyc0xlZ2lzbGF0aWZzVG9Kc29uKFxuICAgICAgICAgIGRvc3NpZXJzTGVnaXNsYXRpZnNDbGVhbixcbiAgICAgICAgKVxuICAgICAgY29uc3QganNvbkZpbGVQYXRoOiBzdHJpbmcgPSBwYXRoLmpvaW4oXG4gICAgICAgIGRhdGFEaXIsXG4gICAgICAgIGRhdGFzZXQuZmlsZW5hbWUucmVwbGFjZSgvXFwuanNvbiQvLCBcIl9uZXR0b3llLmpzb25cIiksXG4gICAgICApXG4gICAgICBmcy53cml0ZUZpbGVTeW5jKGpzb25GaWxlUGF0aCwgZG9zc2llcnNMZWdpc2xhdGlmc0NsZWFuSnNvbiwge1xuICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICB9KVxuICAgIH1cbiAgfVxuXG4gIGlmIChlbmFibGVkRGF0YXNldHMgJiBFbmFibGVkRGF0YXNldHMuU2NydXRpbnMpIHtcbiAgICBmb3IgKGNvbnN0IGRhdGFzZXQgb2YgZGF0YXNldHMuc2NydXRpbnMpIHtcbiAgICAgIGNvbnN0IHJhd0pzb25GaWxlUGF0aDogc3RyaW5nID0gcGF0aC5qb2luKGRhdGFEaXIsIGRhdGFzZXQuZmlsZW5hbWUpXG4gICAgICBjb25zb2xlLmxvZyhgTG9hZGluZyBmaWxlOiAke3Jhd0pzb25GaWxlUGF0aH1gKVxuICAgICAgY29uc3QgcmF3SnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKHJhd0pzb25GaWxlUGF0aCwge1xuICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICB9KVxuXG4gICAgICBjb25zdCBzY3J1dGluczogYW55ID0gU2NydXRpbnNSYXdDb252ZXJ0LnRvU2NydXRpbnMocmF3SnNvbilcbiAgICAgIHNjcnV0aW5zLnNjcnV0aW5zID0gc2NydXRpbnMuc2NydXRpbnMuc2NydXRpblxuXG4gICAgICBmb3IgKGNvbnN0IHNjcnV0aW4gb2Ygc2NydXRpbnMuc2NydXRpbnMpIHtcbiAgICAgICAgY2xlYW5TY3J1dGluKHNjcnV0aW4pXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHNjcnV0aW5zSnNvbjogc3RyaW5nID0gSlNPTi5zdHJpbmdpZnkoc2NydXRpbnMsIG51bGwsIDIpXG4gICAgICAvLyBWYWxpZGF0ZSBnZW5lcmF0ZWQgSlNPTi5cbiAgICAgIGNvbnN0IHNjcnV0aW5zQ2xlYW46IFNjcnV0aW5zID0gU2NydXRpbnNDb252ZXJ0LnRvU2NydXRpbnMoc2NydXRpbnNKc29uKVxuICAgICAgY29uc3Qgc2NydXRpbnNDbGVhbkpzb246IHN0cmluZyA9XG4gICAgICAgIFNjcnV0aW5zQ29udmVydC5zY3J1dGluc1RvSnNvbihzY3J1dGluc0NsZWFuKVxuICAgICAgY29uc3QganNvbkZpbGVQYXRoOiBzdHJpbmcgPSBwYXRoLmpvaW4oXG4gICAgICAgIGRhdGFEaXIsXG4gICAgICAgIGRhdGFzZXQuZmlsZW5hbWUucmVwbGFjZSgvXFwuanNvbiQvLCBcIl9uZXR0b3llLmpzb25cIiksXG4gICAgICApXG4gICAgICBmcy53cml0ZUZpbGVTeW5jKGpzb25GaWxlUGF0aCwgc2NydXRpbnNDbGVhbkpzb24sIHsgZW5jb2Rpbmc6IFwidXRmOFwiIH0pXG4gICAgfVxuICB9XG5cbiAgLy8gUmVzdG9yZSBzdGFuZGFyZCBjb252ZXJzaW9uIG9mIGRhdGVzIHRvIEpTT04uXG4gIERhdGUucHJvdG90eXBlLnRvSlNPTiA9IGV4aXN0aW5nRGF0ZVRvSnNvblxufVxuXG5jbGVhbkRhdGEob3B0aW9ucy5kYXRhRGlyKVxuIl0sIm1hcHBpbmdzIjoiQUFBQSxPQUFPQSxNQUFNLE1BQU0sUUFBUTtBQUMzQixPQUFPQyxlQUFlLE1BQU0sbUJBQW1CO0FBQy9DLE9BQU9DLEVBQUUsTUFBTSxJQUFJO0FBQ25CLE9BQU9DLElBQUksTUFBTSxNQUFNO0FBQUEsU0FFZEMsV0FBVztBQUFBLFNBQ1hDLG9CQUFvQjtBQUFBLFNBQ3BCQyx1QkFBdUI7QUFBQSxTQUN2QkMseUJBQXlC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