@tricoteuses/senat 1.3.1 → 1.3.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 (253) hide show
  1. package/lib/config.d.ts +1 -0
  2. package/lib/config.js +14 -45
  3. package/lib/databases.js +86 -143
  4. package/lib/datasets.js +78 -83
  5. package/lib/index.d.ts +7 -4
  6. package/lib/index.js +42 -419
  7. package/lib/loaders.js +149 -654
  8. package/lib/model/ameli.js +83 -21
  9. package/lib/model/debats.js +0 -1
  10. package/lib/model/dosleg.d.ts +1 -1
  11. package/lib/model/dosleg.js +179 -73
  12. package/lib/model/index.d.ts +3 -3
  13. package/lib/model/index.js +12 -46
  14. package/lib/model/questions.js +68 -39
  15. package/lib/model/sens.js +383 -113
  16. package/lib/model/texte.js +220 -290
  17. package/lib/model/util.js +9 -26
  18. package/lib/raw_types/ameli.js +5 -6
  19. package/lib/raw_types/debats.js +5 -6
  20. package/lib/raw_types/dosleg.js +5 -6
  21. package/lib/raw_types/questions.js +5 -6
  22. package/lib/raw_types/sens.js +5 -6
  23. package/lib/raw_types_schemats/ameli.js +1 -43
  24. package/lib/raw_types_schemats/debats.js +1 -22
  25. package/lib/raw_types_schemats/dosleg.js +1 -96
  26. package/lib/raw_types_schemats/questions.js +1 -22
  27. package/lib/raw_types_schemats/sens.js +1 -112
  28. package/lib/scripts/convert_data.js +181 -631
  29. package/lib/scripts/datautil.js +17 -60
  30. package/lib/scripts/parse_textes.js +46 -129
  31. package/lib/scripts/retrieve_documents.js +247 -513
  32. package/lib/scripts/retrieve_open_data.js +211 -368
  33. package/lib/scripts/retrieve_senateurs_photos.js +144 -239
  34. package/lib/scripts/shared/cli_helpers.js +30 -30
  35. package/lib/scripts/shared/util.js +28 -94
  36. package/lib/strings.js +20 -45
  37. package/lib/types/ameli.d.ts +1 -1
  38. package/lib/types/ameli.js +14 -25
  39. package/lib/types/debats.d.ts +1 -1
  40. package/lib/types/debats.js +3 -21
  41. package/lib/types/dosleg.d.ts +1 -1
  42. package/lib/types/dosleg.js +152 -119
  43. package/lib/types/questions.d.ts +1 -1
  44. package/lib/types/questions.js +1 -13
  45. package/lib/types/sens.d.ts +1 -1
  46. package/lib/types/sens.js +1 -13
  47. package/lib/types/sessions.js +44 -49
  48. package/lib/types/texte.js +17 -22
  49. package/lib/validators/config.js +47 -111
  50. package/lib/validators/senat.js +1 -5
  51. package/package.json +16 -38
  52. package/lib/aggregates.d.ts +0 -52
  53. package/lib/aggregates.mjs +0 -930
  54. package/lib/aggregates.ts +0 -833
  55. package/lib/config.mjs +0 -16
  56. package/lib/config.ts +0 -26
  57. package/lib/data/legislatures.json +0 -38
  58. package/lib/databases.mjs +0 -57
  59. package/lib/databases.ts +0 -71
  60. package/lib/datasets.mjs +0 -78
  61. package/lib/datasets.ts +0 -118
  62. package/lib/fields.d.ts +0 -10
  63. package/lib/fields.mjs +0 -68
  64. package/lib/fields.ts +0 -29
  65. package/lib/index.mjs +0 -4
  66. package/lib/index.ts +0 -42
  67. package/lib/inserters.d.ts +0 -98
  68. package/lib/inserters.mjs +0 -500
  69. package/lib/inserters.ts +0 -521
  70. package/lib/loaders.mjs +0 -158
  71. package/lib/loaders.ts +0 -271
  72. package/lib/model/ameli.mjs +0 -84
  73. package/lib/model/ameli.ts +0 -100
  74. package/lib/model/debats.mjs +0 -1
  75. package/lib/model/debats.ts +0 -0
  76. package/lib/model/dosleg.mjs +0 -196
  77. package/lib/model/dosleg.ts +0 -240
  78. package/lib/model/index.mjs +0 -4
  79. package/lib/model/index.ts +0 -14
  80. package/lib/model/questions.mjs +0 -71
  81. package/lib/model/questions.ts +0 -93
  82. package/lib/model/sens.mjs +0 -415
  83. package/lib/model/sens.ts +0 -516
  84. package/lib/model/texte.mjs +0 -208
  85. package/lib/model/texte.ts +0 -229
  86. package/lib/model/util.mjs +0 -19
  87. package/lib/model/util.ts +0 -32
  88. package/lib/raw_types/ameli.mjs +0 -5
  89. package/lib/raw_types/ameli.ts +0 -951
  90. package/lib/raw_types/debats.mjs +0 -5
  91. package/lib/raw_types/debats.ts +0 -222
  92. package/lib/raw_types/dosleg.mjs +0 -5
  93. package/lib/raw_types/dosleg.ts +0 -3625
  94. package/lib/raw_types/questions.mjs +0 -5
  95. package/lib/raw_types/questions.ts +0 -427
  96. package/lib/raw_types/sens.mjs +0 -5
  97. package/lib/raw_types/sens.ts +0 -4499
  98. package/lib/raw_types_kysely/ameli.d.ts +0 -6
  99. package/lib/raw_types_kysely/ameli.mjs +0 -7
  100. package/lib/raw_types_kysely/ameli.ts +0 -6
  101. package/lib/raw_types_kysely/debats.d.ts +0 -6
  102. package/lib/raw_types_kysely/debats.mjs +0 -7
  103. package/lib/raw_types_kysely/debats.ts +0 -6
  104. package/lib/raw_types_kysely/dosleg.d.ts +0 -6
  105. package/lib/raw_types_kysely/dosleg.mjs +0 -7
  106. package/lib/raw_types_kysely/dosleg.ts +0 -6
  107. package/lib/raw_types_kysely/questions.d.ts +0 -6
  108. package/lib/raw_types_kysely/questions.mjs +0 -7
  109. package/lib/raw_types_kysely/questions.ts +0 -6
  110. package/lib/raw_types_kysely/sens.d.ts +0 -6
  111. package/lib/raw_types_kysely/sens.mjs +0 -7
  112. package/lib/raw_types_kysely/sens.ts +0 -6
  113. package/lib/raw_types_kysely/texte.d.ts +0 -45
  114. package/lib/raw_types_kysely/texte.mjs +0 -7
  115. package/lib/raw_types_kysely/texte.ts +0 -53
  116. package/lib/raw_types_schemats/ameli.mjs +0 -2
  117. package/lib/raw_types_schemats/ameli.ts +0 -601
  118. package/lib/raw_types_schemats/debats.mjs +0 -2
  119. package/lib/raw_types_schemats/debats.ts +0 -145
  120. package/lib/raw_types_schemats/dosleg.mjs +0 -2
  121. package/lib/raw_types_schemats/dosleg.ts +0 -2195
  122. package/lib/raw_types_schemats/questions.mjs +0 -2
  123. package/lib/raw_types_schemats/questions.ts +0 -251
  124. package/lib/raw_types_schemats/sens.mjs +0 -2
  125. package/lib/raw_types_schemats/sens.ts +0 -2907
  126. package/lib/scripts/convert_data.mjs +0 -181
  127. package/lib/scripts/convert_data.ts +0 -243
  128. package/lib/scripts/datautil.mjs +0 -16
  129. package/lib/scripts/datautil.ts +0 -19
  130. package/lib/scripts/images/transparent_150x192.jpg +0 -0
  131. package/lib/scripts/images/transparent_155x225.jpg +0 -0
  132. package/lib/scripts/parse_textes.mjs +0 -46
  133. package/lib/scripts/parse_textes.ts +0 -65
  134. package/lib/scripts/retrieve_documents.mjs +0 -249
  135. package/lib/scripts/retrieve_documents.ts +0 -298
  136. package/lib/scripts/retrieve_open_data.mjs +0 -217
  137. package/lib/scripts/retrieve_open_data.ts +0 -274
  138. package/lib/scripts/retrieve_senateurs_photos.mjs +0 -147
  139. package/lib/scripts/retrieve_senateurs_photos.ts +0 -177
  140. package/lib/scripts/retrieve_textes.d.ts +0 -1
  141. package/lib/scripts/retrieve_textes.mjs +0 -328
  142. package/lib/scripts/retrieve_textes.ts +0 -143
  143. package/lib/scripts/shared/cli_helpers.ts +0 -36
  144. package/lib/scripts/shared/util.ts +0 -33
  145. package/lib/src/aggregates.d.ts +0 -52
  146. package/lib/src/aggregates.mjs +0 -726
  147. package/lib/src/config.d.ts +0 -2
  148. package/lib/src/config.mjs +0 -16
  149. package/lib/src/databases.d.ts +0 -18
  150. package/lib/src/databases.mjs +0 -55
  151. package/lib/src/datasets.d.ts +0 -28
  152. package/lib/src/datasets.mjs +0 -78
  153. package/lib/src/fields.d.ts +0 -10
  154. package/lib/src/fields.mjs +0 -22
  155. package/lib/src/index.d.ts +0 -8
  156. package/lib/src/index.mjs +0 -7
  157. package/lib/src/inserters.d.ts +0 -98
  158. package/lib/src/inserters.mjs +0 -360
  159. package/lib/src/loaders.d.ts +0 -36
  160. package/lib/src/loaders.mjs +0 -107
  161. package/lib/src/model/ameli.d.ts +0 -4
  162. package/lib/src/model/ameli.js +0 -57
  163. package/lib/src/model/debats.d.ts +0 -4
  164. package/lib/src/model/debats.js +0 -43
  165. package/lib/src/model/dosleg.d.ts +0 -197
  166. package/lib/src/model/dosleg.js +0 -169
  167. package/lib/src/model/index.d.ts +0 -4
  168. package/lib/src/model/index.js +0 -4
  169. package/lib/src/model/questions.d.ts +0 -89
  170. package/lib/src/model/questions.js +0 -76
  171. package/lib/src/model/sens.d.ts +0 -390
  172. package/lib/src/model/sens.js +0 -339
  173. package/lib/src/model/texte.d.ts +0 -7
  174. package/lib/src/model/texte.js +0 -183
  175. package/lib/src/raw_types_kysely/ameli.d.ts +0 -915
  176. package/lib/src/raw_types_kysely/ameli.js +0 -5
  177. package/lib/src/raw_types_kysely/debats.d.ts +0 -207
  178. package/lib/src/raw_types_kysely/debats.js +0 -5
  179. package/lib/src/raw_types_kysely/dosleg.d.ts +0 -3532
  180. package/lib/src/raw_types_kysely/dosleg.js +0 -5
  181. package/lib/src/raw_types_kysely/questions.d.ts +0 -414
  182. package/lib/src/raw_types_kysely/questions.js +0 -5
  183. package/lib/src/raw_types_kysely/sens.d.ts +0 -4394
  184. package/lib/src/raw_types_kysely/sens.js +0 -5
  185. package/lib/src/raw_types_schemats/ameli.d.ts +0 -541
  186. package/lib/src/raw_types_schemats/ameli.js +0 -2
  187. package/lib/src/raw_types_schemats/debats.d.ts +0 -127
  188. package/lib/src/raw_types_schemats/debats.js +0 -2
  189. package/lib/src/raw_types_schemats/dosleg.d.ts +0 -2027
  190. package/lib/src/raw_types_schemats/dosleg.js +0 -2
  191. package/lib/src/raw_types_schemats/questions.d.ts +0 -231
  192. package/lib/src/raw_types_schemats/questions.js +0 -2
  193. package/lib/src/raw_types_schemats/sens.d.ts +0 -2709
  194. package/lib/src/raw_types_schemats/sens.js +0 -2
  195. package/lib/src/scripts/convert_data.d.ts +0 -1
  196. package/lib/src/scripts/convert_data.js +0 -95
  197. package/lib/src/scripts/datautil.d.ts +0 -5
  198. package/lib/src/scripts/datautil.js +0 -16
  199. package/lib/src/scripts/parse_textes.d.ts +0 -1
  200. package/lib/src/scripts/parse_textes.js +0 -47
  201. package/lib/src/scripts/retrieve_documents.d.ts +0 -1
  202. package/lib/src/scripts/retrieve_documents.js +0 -258
  203. package/lib/src/scripts/retrieve_open_data.d.ts +0 -1
  204. package/lib/src/scripts/retrieve_open_data.js +0 -214
  205. package/lib/src/scripts/retrieve_senateurs_photos.d.ts +0 -1
  206. package/lib/src/scripts/retrieve_senateurs_photos.js +0 -147
  207. package/lib/src/scripts/shared/cli_helpers.d.ts +0 -44
  208. package/lib/src/scripts/shared/cli_helpers.js +0 -32
  209. package/lib/src/scripts/shared/util.d.ts +0 -3
  210. package/lib/src/scripts/shared/util.js +0 -28
  211. package/lib/src/strings.d.ts +0 -1
  212. package/lib/src/strings.mjs +0 -18
  213. package/lib/src/types/ameli.d.ts +0 -10
  214. package/lib/src/types/ameli.js +0 -13
  215. package/lib/src/types/debats.d.ts +0 -4
  216. package/lib/src/types/debats.js +0 -2
  217. package/lib/src/types/dosleg.d.ts +0 -98
  218. package/lib/src/types/dosleg.js +0 -151
  219. package/lib/src/types/questions.d.ts +0 -2
  220. package/lib/src/types/questions.js +0 -1
  221. package/lib/src/types/sens.d.ts +0 -10
  222. package/lib/src/types/sens.js +0 -1
  223. package/lib/src/types/sessions.d.ts +0 -42
  224. package/lib/src/types/sessions.js +0 -43
  225. package/lib/src/types/texte.d.ts +0 -61
  226. package/lib/src/types/texte.js +0 -16
  227. package/lib/src/validators/config.d.ts +0 -1
  228. package/lib/src/validators/config.js +0 -54
  229. package/lib/src/validators/senat.d.ts +0 -0
  230. package/lib/src/validators/senat.js +0 -24
  231. package/lib/strings.mjs +0 -18
  232. package/lib/strings.ts +0 -26
  233. package/lib/types/ameli.mjs +0 -13
  234. package/lib/types/ameli.ts +0 -21
  235. package/lib/types/debats.mjs +0 -2
  236. package/lib/types/debats.ts +0 -6
  237. package/lib/types/dosleg.mjs +0 -151
  238. package/lib/types/dosleg.ts +0 -284
  239. package/lib/types/questions.mjs +0 -1
  240. package/lib/types/questions.ts +0 -3
  241. package/lib/types/sens.mjs +0 -1
  242. package/lib/types/sens.ts +0 -12
  243. package/lib/types/sessions.mjs +0 -43
  244. package/lib/types/sessions.ts +0 -42
  245. package/lib/types/texte.mjs +0 -16
  246. package/lib/types/texte.ts +0 -76
  247. package/lib/typings/windows-1252.d.js +0 -2
  248. package/lib/typings/windows-1252.d.mjs +0 -2
  249. package/lib/typings/windows-1252.d.ts +0 -11
  250. package/lib/validators/config.mjs +0 -54
  251. package/lib/validators/config.ts +0 -79
  252. package/lib/validators/senat.mjs +0 -24
  253. package/lib/validators/senat.ts +0 -26
@@ -1,643 +1,193 @@
1
1
  "use strict";
2
-
3
- function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
4
- require("core-js/modules/es.array.for-each.js");
5
- require("core-js/modules/es.array.from.js");
6
- require("core-js/modules/es.array.is-array.js");
7
- require("core-js/modules/es.array.slice.js");
8
- require("core-js/modules/es.date.to-string.js");
9
- require("core-js/modules/es.object.create.js");
10
- require("core-js/modules/es.object.define-property.js");
11
- require("core-js/modules/es.object.get-prototype-of.js");
12
- require("core-js/modules/es.object.set-prototype-of.js");
13
- require("core-js/modules/es.regexp.to-string.js");
14
- require("core-js/modules/web.dom-collections.for-each.js");
15
- require("core-js/modules/es.symbol.js");
16
- require("core-js/modules/es.symbol.description.js");
17
- require("core-js/modules/es.symbol.async-iterator.js");
18
- require("core-js/modules/es.symbol.iterator.js");
19
- require("core-js/modules/es.array.concat.js");
20
- require("core-js/modules/es.array.iterator.js");
21
- require("core-js/modules/es.array.join.js");
22
- require("core-js/modules/es.function.name.js");
23
- require("core-js/modules/es.object.to-string.js");
24
- require("core-js/modules/es.promise.js");
25
- require("core-js/modules/es.regexp.exec.js");
26
- require("core-js/modules/es.string.iterator.js");
27
- require("core-js/modules/web.dom-collections.iterator.js");
28
- require("core-js/modules/web.url.js");
29
- require("core-js/modules/web.url.to-json.js");
30
- require("core-js/modules/web.url-search-params.js");
31
- var _assert = _interopRequireDefault(require("assert"));
32
- var _commandLineArgs = _interopRequireDefault(require("command-line-args"));
33
- var _fsExtra = _interopRequireDefault(require("fs-extra"));
34
- var _path = _interopRequireDefault(require("path"));
35
- var _datasets = require("../datasets");
36
- var _loaders = require("../loaders");
37
- var _model = require("../model");
38
- var _dosleg = require("../model/dosleg");
39
- var _datautil = require("./datautil");
40
- var _cli_helpers = require("./shared/cli_helpers");
41
- var _util = require("./shared/util");
42
- function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; }
43
- function _regeneratorRuntime() { "use strict"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return r; }; var t, r = {}, e = Object.prototype, n = e.hasOwnProperty, o = "function" == typeof Symbol ? Symbol : {}, i = o.iterator || "@@iterator", a = o.asyncIterator || "@@asyncIterator", u = o.toStringTag || "@@toStringTag"; function c(t, r, e, n) { Object.defineProperty(t, r, { value: e, enumerable: !n, configurable: !n, writable: !n }); } try { c({}, ""); } catch (t) { c = function c(t, r, e) { return t[r] = e; }; } function h(r, e, n, o) { var i = e && e.prototype instanceof Generator ? e : Generator, a = Object.create(i.prototype); return c(a, "_invoke", function (r, e, n) { var o = 1; return function (i, a) { if (3 === o) throw Error("Generator is already running"); if (4 === o) { if ("throw" === i) throw a; return { value: t, done: !0 }; } for (n.method = i, n.arg = a;;) { var u = n.delegate; if (u) { var c = d(u, n); if (c) { if (c === f) continue; return c; } } if ("next" === n.method) n.sent = n._sent = n.arg;else if ("throw" === n.method) { if (1 === o) throw o = 4, n.arg; n.dispatchException(n.arg); } else "return" === n.method && n.abrupt("return", n.arg); o = 3; var h = s(r, e, n); if ("normal" === h.type) { if (o = n.done ? 4 : 2, h.arg === f) continue; return { value: h.arg, done: n.done }; } "throw" === h.type && (o = 4, n.method = "throw", n.arg = h.arg); } }; }(r, n, new Context(o || [])), !0), a; } function s(t, r, e) { try { return { type: "normal", arg: t.call(r, e) }; } catch (t) { return { type: "throw", arg: t }; } } r.wrap = h; var f = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var l = {}; c(l, i, function () { return this; }); var p = Object.getPrototypeOf, y = p && p(p(x([]))); y && y !== e && n.call(y, i) && (l = y); var v = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(l); function g(t) { ["next", "throw", "return"].forEach(function (r) { c(t, r, function (t) { return this._invoke(r, t); }); }); } function AsyncIterator(t, r) { function e(o, i, a, u) { var c = s(t[o], t, i); if ("throw" !== c.type) { var h = c.arg, f = h.value; return f && "object" == _typeof(f) && n.call(f, "__await") ? r.resolve(f.__await).then(function (t) { e("next", t, a, u); }, function (t) { e("throw", t, a, u); }) : r.resolve(f).then(function (t) { h.value = t, a(h); }, function (t) { return e("throw", t, a, u); }); } u(c.arg); } var o; c(this, "_invoke", function (t, n) { function i() { return new r(function (r, o) { e(t, n, r, o); }); } return o = o ? o.then(i, i) : i(); }, !0); } function d(r, e) { var n = e.method, o = r.i[n]; if (o === t) return e.delegate = null, "throw" === n && r.i["return"] && (e.method = "return", e.arg = t, d(r, e), "throw" === e.method) || "return" !== n && (e.method = "throw", e.arg = new TypeError("The iterator does not provide a '" + n + "' method")), f; var i = s(o, r.i, e.arg); if ("throw" === i.type) return e.method = "throw", e.arg = i.arg, e.delegate = null, f; var a = i.arg; return a ? a.done ? (e[r.r] = a.value, e.next = r.n, "return" !== e.method && (e.method = "next", e.arg = t), e.delegate = null, f) : a : (e.method = "throw", e.arg = new TypeError("iterator result is not an object"), e.delegate = null, f); } function w(t) { this.tryEntries.push(t); } function m(r) { var e = r[4] || {}; e.type = "normal", e.arg = t, r[4] = e; } function Context(t) { this.tryEntries = [[-1]], t.forEach(w, this), this.reset(!0); } function x(r) { if (null != r) { var e = r[i]; if (e) return e.call(r); if ("function" == typeof r.next) return r; if (!isNaN(r.length)) { var o = -1, a = function e() { for (; ++o < r.length;) if (n.call(r, o)) return e.value = r[o], e.done = !1, e; return e.value = t, e.done = !0, e; }; return a.next = a; } } throw new TypeError(_typeof(r) + " is not iterable"); } return GeneratorFunction.prototype = GeneratorFunctionPrototype, c(v, "constructor", GeneratorFunctionPrototype), c(GeneratorFunctionPrototype, "constructor", GeneratorFunction), c(GeneratorFunctionPrototype, u, GeneratorFunction.displayName = "GeneratorFunction"), r.isGeneratorFunction = function (t) { var r = "function" == typeof t && t.constructor; return !!r && (r === GeneratorFunction || "GeneratorFunction" === (r.displayName || r.name)); }, r.mark = function (t) { return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, c(t, u, "GeneratorFunction")), t.prototype = Object.create(v), t; }, r.awrap = function (t) { return { __await: t }; }, g(AsyncIterator.prototype), c(AsyncIterator.prototype, a, function () { return this; }), r.AsyncIterator = AsyncIterator, r.async = function (t, e, n, o, i) { void 0 === i && (i = Promise); var a = new AsyncIterator(h(t, e, n, o), i); return r.isGeneratorFunction(e) ? a : a.next().then(function (t) { return t.done ? t.value : a.next(); }); }, g(v), c(v, u, "Generator"), c(v, i, function () { return this; }), c(v, "toString", function () { return "[object Generator]"; }), r.keys = function (t) { var r = Object(t), e = []; for (var n in r) e.unshift(n); return function t() { for (; e.length;) if ((n = e.pop()) in r) return t.value = n, t.done = !1, t; return t.done = !0, t; }; }, r.values = x, Context.prototype = { constructor: Context, reset: function reset(r) { if (this.prev = this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = "next", this.arg = t, this.tryEntries.forEach(m), !r) for (var e in this) "t" === e.charAt(0) && n.call(this, e) && !isNaN(+e.slice(1)) && (this[e] = t); }, stop: function stop() { this.done = !0; var t = this.tryEntries[0][4]; if ("throw" === t.type) throw t.arg; return this.rval; }, dispatchException: function dispatchException(r) { if (this.done) throw r; var e = this; function n(t) { a.type = "throw", a.arg = r, e.next = t; } for (var o = e.tryEntries.length - 1; o >= 0; --o) { var i = this.tryEntries[o], a = i[4], u = this.prev, c = i[1], h = i[2]; if (-1 === i[0]) return n("end"), !1; if (!c && !h) throw Error("try statement without catch or finally"); if (null != i[0] && i[0] <= u) { if (u < c) return this.method = "next", this.arg = t, n(c), !0; if (u < h) return n(h), !1; } } }, abrupt: function abrupt(t, r) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var n = this.tryEntries[e]; if (n[0] > -1 && n[0] <= this.prev && this.prev < n[2]) { var o = n; break; } } o && ("break" === t || "continue" === t) && o[0] <= r && r <= o[2] && (o = null); var i = o ? o[4] : {}; return i.type = t, i.arg = r, o ? (this.method = "next", this.next = o[2], f) : this.complete(i); }, complete: function complete(t, r) { if ("throw" === t.type) throw t.arg; return "break" === t.type || "continue" === t.type ? this.next = t.arg : "return" === t.type ? (this.rval = this.arg = t.arg, this.method = "return", this.next = "end") : "normal" === t.type && r && (this.next = r), f; }, finish: function finish(t) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var e = this.tryEntries[r]; if (e[2] === t) return this.complete(e[4], e[3]), m(e), f; } }, "catch": function _catch(t) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var e = this.tryEntries[r]; if (e[0] === t) { var n = e[4]; if ("throw" === n.type) { var o = n.arg; m(e); } return o; } } throw Error("illegal catch attempt"); }, delegateYield: function delegateYield(r, e, n) { return this.delegate = { i: x(r), r: e, n: n }, "next" === this.method && (this.arg = t), f; } }, r; }
44
- function asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }
45
- function _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, "next", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, "throw", n); } _next(void 0); }); }; }
46
- function _toConsumableArray(r) { return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread(); }
47
- function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
48
- function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
49
- function _iterableToArray(r) { if ("undefined" != typeof Symbol && null != r[Symbol.iterator] || null != r["@@iterator"]) return Array.from(r); }
50
- function _arrayWithoutHoles(r) { if (Array.isArray(r)) return _arrayLikeToArray(r); }
51
- function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
52
- function _asyncIterator(r) { var n, t, o, e = 2; for ("undefined" != typeof Symbol && (t = Symbol.asyncIterator, o = Symbol.iterator); e--;) { if (t && null != (n = r[t])) return n.call(r); if (o && null != (n = r[o])) return new AsyncFromSyncIterator(n.call(r)); t = "@@asyncIterator", o = "@@iterator"; } throw new TypeError("Object is not async iterable"); }
53
- function AsyncFromSyncIterator(r) { function AsyncFromSyncIteratorContinuation(r) { if (Object(r) !== r) return Promise.reject(new TypeError(r + " is not an object.")); var n = r.done; return Promise.resolve(r.value).then(function (r) { return { value: r, done: n }; }); } return AsyncFromSyncIterator = function AsyncFromSyncIterator(r) { this.s = r, this.n = r.next; }, AsyncFromSyncIterator.prototype = { s: null, n: null, next: function next() { return AsyncFromSyncIteratorContinuation(this.n.apply(this.s, arguments)); }, "return": function _return(r) { var n = this.s["return"]; return void 0 === n ? Promise.resolve({ value: r, done: !0 }) : AsyncFromSyncIteratorContinuation(n.apply(this.s, arguments)); }, "throw": function _throw(r) { var n = this.s["return"]; return void 0 === n ? Promise.reject(r) : AsyncFromSyncIteratorContinuation(n.apply(this.s, arguments)); } }, new AsyncFromSyncIterator(r); }
54
- var optionsDefinitions = _toConsumableArray(_cli_helpers.commonOptions);
55
- var options = (0, _commandLineArgs["default"])(optionsDefinitions);
56
- var SENAT_TEXTE_XML_BASE_URL = "https://www.senat.fr/akomantoso/";
57
- var SENAT_TEXTE_BASE_URL = "https://www.senat.fr/leg/";
58
- var SENAT_EXPOSE_DES_MOTIFS_BASE_URL = "https://www.senat.fr/leg/exposes-des-motifs/";
59
- var SENAT_RAPPORT_BASE_URL = "https://www.senat.fr/rap/";
60
- function convertData() {
61
- return _convertData.apply(this, arguments);
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const assert_1 = __importDefault(require("assert"));
7
+ const command_line_args_1 = __importDefault(require("command-line-args"));
8
+ const fs_extra_1 = __importDefault(require("fs-extra"));
9
+ const path_1 = __importDefault(require("path"));
10
+ const datasets_1 = require("../datasets");
11
+ const loaders_1 = require("../loaders");
12
+ const model_1 = require("../model");
13
+ const dosleg_1 = require("../model/dosleg");
14
+ const datautil_1 = require("./datautil");
15
+ const cli_helpers_1 = require("./shared/cli_helpers");
16
+ const util_1 = require("./shared/util");
17
+ const optionsDefinitions = [...cli_helpers_1.commonOptions];
18
+ const options = (0, command_line_args_1.default)(optionsDefinitions);
19
+ const SENAT_TEXTE_XML_BASE_URL = "https://www.senat.fr/akomantoso/";
20
+ const SENAT_TEXTE_BASE_URL = "https://www.senat.fr/leg/";
21
+ const SENAT_EXPOSE_DES_MOTIFS_BASE_URL = "https://www.senat.fr/leg/exposes-des-motifs/";
22
+ const SENAT_RAPPORT_BASE_URL = "https://www.senat.fr/rap/";
23
+ async function convertData() {
24
+ const enabledDatasets = (0, datasets_1.getEnabledDatasets)(options["categories"]);
25
+ const dataDir = options["dataDir"];
26
+ (0, assert_1.default)(dataDir, "Missing argument: data directory");
27
+ console.time("data transformation time");
28
+ if (enabledDatasets & datasets_1.EnabledDatasets.Ameli) {
29
+ const dataset = datasets_1.datasets.ameli;
30
+ if (!options["silent"]) {
31
+ console.log(`Converting database ${dataset.database} data into files…`);
32
+ }
33
+ const ameliReorganizedRootDir = path_1.default.join(dataDir, dataset.database);
34
+ (0, util_1.ensureAndClearDir)(ameliReorganizedRootDir);
35
+ for await (const amendement of (0, model_1.findAllAmendements)()) {
36
+ if (options["verbose"]) {
37
+ console.log(`Converting ${amendement.numero} file…`);
38
+ }
39
+ const session = String(amendement.session) || datautil_1.UNDEFINED_SESSION;
40
+ const signetDossierLegislatif = amendement.signet_dossier_legislatif ||
41
+ `${amendement.nature_texte}-${amendement.numero_texte}`.toLowerCase();
42
+ const ameliReorganizedDir = path_1.default.join(ameliReorganizedRootDir, session, signetDossierLegislatif);
43
+ fs_extra_1.default.ensureDirSync(ameliReorganizedDir);
44
+ const amendementFileName = `${amendement.numero}.json`;
45
+ fs_extra_1.default.writeJSONSync(path_1.default.join(ameliReorganizedDir, amendementFileName), amendement, { spaces: 2 });
46
+ }
47
+ }
48
+ if (enabledDatasets & datasets_1.EnabledDatasets.DosLeg) {
49
+ const dataset = datasets_1.datasets.dosleg;
50
+ if (!options["silent"]) {
51
+ console.log(`Converting database ${dataset.database} data into files…`);
52
+ }
53
+ const doslegReorganizedRootDir = path_1.default.join(dataDir, dataset.database);
54
+ const dossiersReorganizedDir = path_1.default.join(doslegReorganizedRootDir, loaders_1.DOSLEG_DOSSIERS_FOLDER);
55
+ (0, util_1.ensureAndClearDir)(doslegReorganizedRootDir);
56
+ (0, util_1.ensureAndClearDir)(dossiersReorganizedDir);
57
+ for await (const loi of (0, model_1.findAllLois)()) {
58
+ if (options["verbose"]) {
59
+ console.log(`Converting ${loi.signet} file…`);
60
+ }
61
+ let loiReorganizedDir = path_1.default.join(dossiersReorganizedDir, datautil_1.UNDEFINED_SESSION);
62
+ const signetParts = datautil_1.SIGNET_STRUCTURE_REGEXP.exec(loi.signet)?.groups;
63
+ if (signetParts && "session" in signetParts) {
64
+ const { session } = signetParts;
65
+ const formattedSession = (0, datautil_1.formatToFourDigitSession)(session);
66
+ loiReorganizedDir = path_1.default.join(dossiersReorganizedDir, formattedSession);
67
+ }
68
+ fs_extra_1.default.ensureDirSync(loiReorganizedDir);
69
+ const loiFileName = `${loi.signet}.json`;
70
+ fs_extra_1.default.writeJSONSync(path_1.default.join(loiReorganizedDir, loiFileName), loi, {
71
+ spaces: 2,
72
+ });
73
+ }
74
+ await convertTexteUrls(dataDir);
75
+ await convertRapportUrls(dataDir);
76
+ }
77
+ if (enabledDatasets & datasets_1.EnabledDatasets.Questions) {
78
+ const dataset = datasets_1.datasets.questions;
79
+ if (!options["silent"]) {
80
+ console.log(`Converting database ${dataset.database} data into files…`);
81
+ }
82
+ const questionsReorganizedRootDir = path_1.default.join(dataDir, dataset.database);
83
+ (0, util_1.ensureAndClearDir)(questionsReorganizedRootDir);
84
+ for await (const question of (0, model_1.findAllQuestions)()) {
85
+ if (options["verbose"]) {
86
+ console.log(`Converting ${question.reference} file…`);
87
+ }
88
+ const legislature = question.legislature ? question.legislature : 0;
89
+ const questionReorganizedDir = path_1.default.join(questionsReorganizedRootDir, String(legislature));
90
+ fs_extra_1.default.ensureDirSync(questionReorganizedDir);
91
+ const questionFileName = `${question.reference}.json`;
92
+ fs_extra_1.default.writeJSONSync(path_1.default.join(questionReorganizedDir, questionFileName), question, { spaces: 2 });
93
+ }
94
+ }
95
+ if (enabledDatasets & datasets_1.EnabledDatasets.Sens) {
96
+ const dataset = datasets_1.datasets.sens;
97
+ if (!options["silent"]) {
98
+ console.log(`Converting database ${dataset.database} data into files…`);
99
+ }
100
+ const sensReorganizedRootDir = path_1.default.join(dataDir, dataset.database);
101
+ const senateursReorganizedDir = path_1.default.join(sensReorganizedRootDir, loaders_1.SENS_SENATEURS_FOLDER);
102
+ const circonscriptionsReorganizedDir = path_1.default.join(sensReorganizedRootDir, loaders_1.SENS_CIRCONSCRIPTIONS_FOLDER);
103
+ const organismesReorganizedDir = path_1.default.join(sensReorganizedRootDir, loaders_1.SENS_ORGANISMES_FOLDER);
104
+ (0, util_1.ensureAndClearDir)(sensReorganizedRootDir);
105
+ (0, util_1.ensureAndClearDir)(senateursReorganizedDir);
106
+ (0, util_1.ensureAndClearDir)(circonscriptionsReorganizedDir);
107
+ (0, util_1.ensureAndClearDir)(organismesReorganizedDir);
108
+ for await (const sen of (0, model_1.findAllSens)()) {
109
+ if (options["verbose"]) {
110
+ console.log(`Converting ${sen.matricule} file…`);
111
+ }
112
+ const senFileName = `${sen.matricule}.json`;
113
+ fs_extra_1.default.writeJSONSync(path_1.default.join(senateursReorganizedDir, senFileName), sen, {
114
+ spaces: 2,
115
+ });
116
+ }
117
+ for await (const circonscription of (0, model_1.findAllCirconscriptions)()) {
118
+ if (options["verbose"]) {
119
+ console.log(`Converting ${circonscription.identifiant} file…`);
120
+ }
121
+ const circonscriptionFileName = `${circonscription.identifiant}.json`;
122
+ fs_extra_1.default.writeJSONSync(path_1.default.join(circonscriptionsReorganizedDir, circonscriptionFileName), circonscription, { spaces: 2 });
123
+ }
124
+ for await (const organisme of (0, model_1.findAllOrganismes)()) {
125
+ if (options["verbose"]) {
126
+ console.log(`Converting ${organisme.code} file…`);
127
+ }
128
+ const organismeFileName = `${organisme.code}.json`;
129
+ fs_extra_1.default.writeJSONSync(path_1.default.join(organismesReorganizedDir, organismeFileName), organisme, { spaces: 2 });
130
+ }
131
+ }
132
+ if (!options["silent"]) {
133
+ console.timeEnd("data transformation time");
134
+ }
62
135
  }
63
- function _convertData() {
64
- _convertData = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee() {
65
- var enabledDatasets, dataDir, dataset, ameliReorganizedRootDir, _iteratorAbruptCompletion, _didIteratorError, _iteratorError, _iterator, _step, amendement, session, signetDossierLegislatif, ameliReorganizedDir, amendementFileName, _dataset, doslegReorganizedRootDir, dossiersReorganizedDir, _iteratorAbruptCompletion2, _didIteratorError2, _iteratorError2, _iterator2, _step2, loi, _SIGNET_STRUCTURE_REG, loiReorganizedDir, signetParts, _session, formattedSession, loiFileName, _dataset2, questionsReorganizedRootDir, _iteratorAbruptCompletion3, _didIteratorError3, _iteratorError3, _iterator3, _step3, question, legislature, questionReorganizedDir, questionFileName, _dataset3, sensReorganizedRootDir, senateursReorganizedDir, circonscriptionsReorganizedDir, organismesReorganizedDir, _iteratorAbruptCompletion4, _didIteratorError4, _iteratorError4, _iterator4, _step4, sen, senFileName, _iteratorAbruptCompletion5, _didIteratorError5, _iteratorError5, _iterator5, _step5, circonscription, circonscriptionFileName, _iteratorAbruptCompletion6, _didIteratorError6, _iteratorError6, _iterator6, _step6, organisme, organismeFileName;
66
- return _regeneratorRuntime().wrap(function _callee$(_context) {
67
- while (1) switch (_context.prev = _context.next) {
68
- case 0:
69
- enabledDatasets = (0, _datasets.getEnabledDatasets)(options.categories);
70
- dataDir = options.dataDir;
71
- (0, _assert["default"])(dataDir, "Missing argument: data directory");
72
- console.time("data transformation time");
73
- if (!(enabledDatasets & _datasets.EnabledDatasets.Ameli)) {
74
- _context.next = 43;
75
- break;
76
- }
77
- dataset = _datasets.datasets.ameli;
78
- if (!options.silent) {
79
- console.log("Converting database ".concat(dataset.database, " data into files\u2026"));
80
- }
81
- ameliReorganizedRootDir = _path["default"].join(dataDir, dataset.database);
82
- (0, _util.ensureAndClearDir)(ameliReorganizedRootDir);
83
- _iteratorAbruptCompletion = false;
84
- _didIteratorError = false;
85
- _context.prev = 11;
86
- _iterator = _asyncIterator((0, _model.findAllAmendements)());
87
- case 13:
88
- _context.next = 15;
89
- return _iterator.next();
90
- case 15:
91
- if (!(_iteratorAbruptCompletion = !(_step = _context.sent).done)) {
92
- _context.next = 27;
93
- break;
94
- }
95
- amendement = _step.value;
96
- if (options.verbose) {
97
- console.log("Converting ".concat(amendement.numero, " file\u2026"));
98
- }
99
- session = String(amendement.session) || _datautil.UNDEFINED_SESSION;
100
- signetDossierLegislatif = amendement.signet_dossier_legislatif || "".concat(amendement.nature_texte, "-").concat(amendement.numero_texte).toLowerCase();
101
- ameliReorganizedDir = _path["default"].join(ameliReorganizedRootDir, session, signetDossierLegislatif);
102
- _fsExtra["default"].ensureDirSync(ameliReorganizedDir);
103
- amendementFileName = "".concat(amendement.numero, ".json");
104
- _fsExtra["default"].writeJSONSync(_path["default"].join(ameliReorganizedDir, amendementFileName), amendement, {
105
- spaces: 2
106
- });
107
- case 24:
108
- _iteratorAbruptCompletion = false;
109
- _context.next = 13;
110
- break;
111
- case 27:
112
- _context.next = 33;
113
- break;
114
- case 29:
115
- _context.prev = 29;
116
- _context.t0 = _context["catch"](11);
117
- _didIteratorError = true;
118
- _iteratorError = _context.t0;
119
- case 33:
120
- _context.prev = 33;
121
- _context.prev = 34;
122
- if (!(_iteratorAbruptCompletion && _iterator["return"] != null)) {
123
- _context.next = 38;
124
- break;
125
- }
126
- _context.next = 38;
127
- return _iterator["return"]();
128
- case 38:
129
- _context.prev = 38;
130
- if (!_didIteratorError) {
131
- _context.next = 41;
132
- break;
133
- }
134
- throw _iteratorError;
135
- case 41:
136
- return _context.finish(38);
137
- case 42:
138
- return _context.finish(33);
139
- case 43:
140
- if (!(enabledDatasets & _datasets.EnabledDatasets.DosLeg)) {
141
- _context.next = 88;
142
- break;
143
- }
144
- _dataset = _datasets.datasets.dosleg;
145
- if (!options.silent) {
146
- console.log("Converting database ".concat(_dataset.database, " data into files\u2026"));
147
- }
148
- doslegReorganizedRootDir = _path["default"].join(dataDir, _dataset.database);
149
- dossiersReorganizedDir = _path["default"].join(doslegReorganizedRootDir, _loaders.DOSLEG_DOSSIERS_FOLDER);
150
- (0, _util.ensureAndClearDir)(doslegReorganizedRootDir);
151
- (0, _util.ensureAndClearDir)(dossiersReorganizedDir);
152
- _iteratorAbruptCompletion2 = false;
153
- _didIteratorError2 = false;
154
- _context.prev = 52;
155
- _iterator2 = _asyncIterator((0, _model.findAllLois)());
156
- case 54:
157
- _context.next = 56;
158
- return _iterator2.next();
159
- case 56:
160
- if (!(_iteratorAbruptCompletion2 = !(_step2 = _context.sent).done)) {
161
- _context.next = 68;
162
- break;
163
- }
164
- loi = _step2.value;
165
- if (options.verbose) {
166
- console.log("Converting ".concat(loi.signet, " file\u2026"));
167
- }
168
- loiReorganizedDir = _path["default"].join(dossiersReorganizedDir, _datautil.UNDEFINED_SESSION);
169
- signetParts = (_SIGNET_STRUCTURE_REG = _datautil.SIGNET_STRUCTURE_REGEXP.exec(loi.signet)) === null || _SIGNET_STRUCTURE_REG === void 0 ? void 0 : _SIGNET_STRUCTURE_REG.groups;
170
- if (signetParts) {
171
- _session = signetParts.session;
172
- formattedSession = (0, _datautil.formatToFourDigitSession)(_session);
173
- loiReorganizedDir = _path["default"].join(dossiersReorganizedDir, formattedSession);
174
- }
175
- _fsExtra["default"].ensureDirSync(loiReorganizedDir);
176
- loiFileName = "".concat(loi.signet, ".json");
177
- _fsExtra["default"].writeJSONSync(_path["default"].join(loiReorganizedDir, loiFileName), loi, {
178
- spaces: 2
179
- });
180
- case 65:
181
- _iteratorAbruptCompletion2 = false;
182
- _context.next = 54;
183
- break;
184
- case 68:
185
- _context.next = 74;
186
- break;
187
- case 70:
188
- _context.prev = 70;
189
- _context.t1 = _context["catch"](52);
190
- _didIteratorError2 = true;
191
- _iteratorError2 = _context.t1;
192
- case 74:
193
- _context.prev = 74;
194
- _context.prev = 75;
195
- if (!(_iteratorAbruptCompletion2 && _iterator2["return"] != null)) {
196
- _context.next = 79;
197
- break;
198
- }
199
- _context.next = 79;
200
- return _iterator2["return"]();
201
- case 79:
202
- _context.prev = 79;
203
- if (!_didIteratorError2) {
204
- _context.next = 82;
205
- break;
206
- }
207
- throw _iteratorError2;
208
- case 82:
209
- return _context.finish(79);
210
- case 83:
211
- return _context.finish(74);
212
- case 84:
213
- _context.next = 86;
214
- return convertTexteUrls(dataDir);
215
- case 86:
216
- _context.next = 88;
217
- return convertRapportUrls(dataDir);
218
- case 88:
219
- if (!(enabledDatasets & _datasets.EnabledDatasets.Questions)) {
220
- _context.next = 126;
221
- break;
222
- }
223
- _dataset2 = _datasets.datasets.questions;
224
- if (!options.silent) {
225
- console.log("Converting database ".concat(_dataset2.database, " data into files\u2026"));
226
- }
227
- questionsReorganizedRootDir = _path["default"].join(dataDir, _dataset2.database);
228
- (0, _util.ensureAndClearDir)(questionsReorganizedRootDir);
229
- _iteratorAbruptCompletion3 = false;
230
- _didIteratorError3 = false;
231
- _context.prev = 95;
232
- _iterator3 = _asyncIterator((0, _model.findAllQuestions)());
233
- case 97:
234
- _context.next = 99;
235
- return _iterator3.next();
236
- case 99:
237
- if (!(_iteratorAbruptCompletion3 = !(_step3 = _context.sent).done)) {
238
- _context.next = 110;
239
- break;
240
- }
241
- question = _step3.value;
242
- if (options.verbose) {
243
- console.log("Converting ".concat(question.reference, " file\u2026"));
244
- }
245
- legislature = question.legislature ? question.legislature : 0;
246
- questionReorganizedDir = _path["default"].join(questionsReorganizedRootDir, String(legislature));
247
- _fsExtra["default"].ensureDirSync(questionReorganizedDir);
248
- questionFileName = "".concat(question.reference, ".json");
249
- _fsExtra["default"].writeJSONSync(_path["default"].join(questionReorganizedDir, questionFileName), question, {
250
- spaces: 2
251
- });
252
- case 107:
253
- _iteratorAbruptCompletion3 = false;
254
- _context.next = 97;
255
- break;
256
- case 110:
257
- _context.next = 116;
258
- break;
259
- case 112:
260
- _context.prev = 112;
261
- _context.t2 = _context["catch"](95);
262
- _didIteratorError3 = true;
263
- _iteratorError3 = _context.t2;
264
- case 116:
265
- _context.prev = 116;
266
- _context.prev = 117;
267
- if (!(_iteratorAbruptCompletion3 && _iterator3["return"] != null)) {
268
- _context.next = 121;
269
- break;
270
- }
271
- _context.next = 121;
272
- return _iterator3["return"]();
273
- case 121:
274
- _context.prev = 121;
275
- if (!_didIteratorError3) {
276
- _context.next = 124;
277
- break;
278
- }
279
- throw _iteratorError3;
280
- case 124:
281
- return _context.finish(121);
282
- case 125:
283
- return _context.finish(116);
284
- case 126:
285
- if (!(enabledDatasets & _datasets.EnabledDatasets.Sens)) {
286
- _context.next = 227;
287
- break;
288
- }
289
- _dataset3 = _datasets.datasets.sens;
290
- if (!options.silent) {
291
- console.log("Converting database ".concat(_dataset3.database, " data into files\u2026"));
292
- }
293
- sensReorganizedRootDir = _path["default"].join(dataDir, _dataset3.database);
294
- senateursReorganizedDir = _path["default"].join(sensReorganizedRootDir, _loaders.SENS_SENATEURS_FOLDER);
295
- circonscriptionsReorganizedDir = _path["default"].join(sensReorganizedRootDir, _loaders.SENS_CIRCONSCRIPTIONS_FOLDER);
296
- organismesReorganizedDir = _path["default"].join(sensReorganizedRootDir, _loaders.SENS_ORGANISMES_FOLDER);
297
- (0, _util.ensureAndClearDir)(sensReorganizedRootDir);
298
- (0, _util.ensureAndClearDir)(senateursReorganizedDir);
299
- (0, _util.ensureAndClearDir)(circonscriptionsReorganizedDir);
300
- (0, _util.ensureAndClearDir)(organismesReorganizedDir);
301
- _iteratorAbruptCompletion4 = false;
302
- _didIteratorError4 = false;
303
- _context.prev = 139;
304
- _iterator4 = _asyncIterator((0, _model.findAllSens)());
305
- case 141:
306
- _context.next = 143;
307
- return _iterator4.next();
308
- case 143:
309
- if (!(_iteratorAbruptCompletion4 = !(_step4 = _context.sent).done)) {
310
- _context.next = 151;
311
- break;
312
- }
313
- sen = _step4.value;
314
- if (options.verbose) {
315
- console.log("Converting ".concat(sen.matricule, " file\u2026"));
316
- }
317
- senFileName = "".concat(sen.matricule, ".json");
318
- _fsExtra["default"].writeJSONSync(_path["default"].join(senateursReorganizedDir, senFileName), sen, {
319
- spaces: 2
320
- });
321
- case 148:
322
- _iteratorAbruptCompletion4 = false;
323
- _context.next = 141;
324
- break;
325
- case 151:
326
- _context.next = 157;
327
- break;
328
- case 153:
329
- _context.prev = 153;
330
- _context.t3 = _context["catch"](139);
331
- _didIteratorError4 = true;
332
- _iteratorError4 = _context.t3;
333
- case 157:
334
- _context.prev = 157;
335
- _context.prev = 158;
336
- if (!(_iteratorAbruptCompletion4 && _iterator4["return"] != null)) {
337
- _context.next = 162;
338
- break;
339
- }
340
- _context.next = 162;
341
- return _iterator4["return"]();
342
- case 162:
343
- _context.prev = 162;
344
- if (!_didIteratorError4) {
345
- _context.next = 165;
346
- break;
347
- }
348
- throw _iteratorError4;
349
- case 165:
350
- return _context.finish(162);
351
- case 166:
352
- return _context.finish(157);
353
- case 167:
354
- _iteratorAbruptCompletion5 = false;
355
- _didIteratorError5 = false;
356
- _context.prev = 169;
357
- _iterator5 = _asyncIterator((0, _model.findAllCirconscriptions)());
358
- case 171:
359
- _context.next = 173;
360
- return _iterator5.next();
361
- case 173:
362
- if (!(_iteratorAbruptCompletion5 = !(_step5 = _context.sent).done)) {
363
- _context.next = 181;
364
- break;
365
- }
366
- circonscription = _step5.value;
367
- if (options.verbose) {
368
- console.log("Converting ".concat(circonscription.identifiant, " file\u2026"));
369
- }
370
- circonscriptionFileName = "".concat(circonscription.identifiant, ".json");
371
- _fsExtra["default"].writeJSONSync(_path["default"].join(circonscriptionsReorganizedDir, circonscriptionFileName), circonscription, {
372
- spaces: 2
373
- });
374
- case 178:
375
- _iteratorAbruptCompletion5 = false;
376
- _context.next = 171;
377
- break;
378
- case 181:
379
- _context.next = 187;
380
- break;
381
- case 183:
382
- _context.prev = 183;
383
- _context.t4 = _context["catch"](169);
384
- _didIteratorError5 = true;
385
- _iteratorError5 = _context.t4;
386
- case 187:
387
- _context.prev = 187;
388
- _context.prev = 188;
389
- if (!(_iteratorAbruptCompletion5 && _iterator5["return"] != null)) {
390
- _context.next = 192;
391
- break;
392
- }
393
- _context.next = 192;
394
- return _iterator5["return"]();
395
- case 192:
396
- _context.prev = 192;
397
- if (!_didIteratorError5) {
398
- _context.next = 195;
399
- break;
400
- }
401
- throw _iteratorError5;
402
- case 195:
403
- return _context.finish(192);
404
- case 196:
405
- return _context.finish(187);
406
- case 197:
407
- _iteratorAbruptCompletion6 = false;
408
- _didIteratorError6 = false;
409
- _context.prev = 199;
410
- _iterator6 = _asyncIterator((0, _model.findAllOrganismes)());
411
- case 201:
412
- _context.next = 203;
413
- return _iterator6.next();
414
- case 203:
415
- if (!(_iteratorAbruptCompletion6 = !(_step6 = _context.sent).done)) {
416
- _context.next = 211;
417
- break;
418
- }
419
- organisme = _step6.value;
420
- if (options.verbose) {
421
- console.log("Converting ".concat(organisme.code, " file\u2026"));
422
- }
423
- organismeFileName = "".concat(organisme.code, ".json");
424
- _fsExtra["default"].writeJSONSync(_path["default"].join(organismesReorganizedDir, organismeFileName), organisme, {
425
- spaces: 2
426
- });
427
- case 208:
428
- _iteratorAbruptCompletion6 = false;
429
- _context.next = 201;
430
- break;
431
- case 211:
432
- _context.next = 217;
433
- break;
434
- case 213:
435
- _context.prev = 213;
436
- _context.t5 = _context["catch"](199);
437
- _didIteratorError6 = true;
438
- _iteratorError6 = _context.t5;
439
- case 217:
440
- _context.prev = 217;
441
- _context.prev = 218;
442
- if (!(_iteratorAbruptCompletion6 && _iterator6["return"] != null)) {
443
- _context.next = 222;
444
- break;
445
- }
446
- _context.next = 222;
447
- return _iterator6["return"]();
448
- case 222:
449
- _context.prev = 222;
450
- if (!_didIteratorError6) {
451
- _context.next = 225;
452
- break;
453
- }
454
- throw _iteratorError6;
455
- case 225:
456
- return _context.finish(222);
457
- case 226:
458
- return _context.finish(217);
459
- case 227:
460
- if (!options.silent) {
461
- console.timeEnd("data transformation time");
462
- }
463
- case 228:
464
- case "end":
465
- return _context.stop();
466
- }
467
- }, _callee, null, [[11, 29, 33, 43], [34,, 38, 42], [52, 70, 74, 84], [75,, 79, 83], [95, 112, 116, 126], [117,, 121, 125], [139, 153, 157, 167], [158,, 162, 166], [169, 183, 187, 197], [188,, 192, 196], [199, 213, 217, 227], [218,, 222, 226]]);
468
- }));
469
- return _convertData.apply(this, arguments);
470
- }
471
- function convertTexteUrls(_x) {
472
- return _convertTexteUrls.apply(this, arguments);
473
- }
474
- function _convertTexteUrls() {
475
- _convertTexteUrls = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee2(dataDir) {
476
- var textesDir, originalTextesDir, _iteratorAbruptCompletion7, _didIteratorError7, _iteratorError7, _iterator7, _step7, texte, _texte$session, texteName, texteDir, metadata;
477
- return _regeneratorRuntime().wrap(function _callee2$(_context2) {
478
- while (1) switch (_context2.prev = _context2.next) {
479
- case 0:
480
- textesDir = _path["default"].join(dataDir, _loaders.TEXTE_FOLDER);
481
- _fsExtra["default"].ensureDirSync(textesDir);
482
- originalTextesDir = _path["default"].join(textesDir, _loaders.TEXTE_ORIGINAL_FOLDER);
483
- _iteratorAbruptCompletion7 = false;
484
- _didIteratorError7 = false;
485
- _context2.prev = 5;
486
- _iterator7 = _asyncIterator((0, _dosleg.findSenatTexteUrls)(options.sessions));
487
- case 7:
488
- _context2.next = 9;
489
- return _iterator7.next();
490
- case 9:
491
- if (!(_iteratorAbruptCompletion7 = !(_step7 = _context2.sent).done)) {
492
- _context2.next = 19;
493
- break;
494
- }
495
- texte = _step7.value;
496
- texteName = _path["default"].parse(texte.url).name;
497
- texteDir = _path["default"].join(originalTextesDir, "".concat((_texte$session = texte.session) !== null && _texte$session !== void 0 ? _texte$session : _datautil.UNDEFINED_SESSION), texteName);
498
- _fsExtra["default"].ensureDirSync(texteDir);
499
- metadata = {
136
+ async function convertTexteUrls(dataDir) {
137
+ const textesDir = path_1.default.join(dataDir, loaders_1.TEXTE_FOLDER);
138
+ fs_extra_1.default.ensureDirSync(textesDir);
139
+ const originalTextesDir = path_1.default.join(textesDir, loaders_1.TEXTE_ORIGINAL_FOLDER);
140
+ for await (const texte of (0, dosleg_1.findSenatTexteUrls)(options["sessions"])) {
141
+ const texteName = path_1.default.parse(texte.url).name;
142
+ const texteDir = path_1.default.join(originalTextesDir, `${texte.session ?? datautil_1.UNDEFINED_SESSION}`, texteName);
143
+ fs_extra_1.default.ensureDirSync(texteDir);
144
+ const metadata = {
500
145
  name: texteName,
501
146
  session: texte.session,
502
- url_expose_des_motifs: texte.hasExposeDesMotifs ? new URL("".concat(texteName, "-expose.html"), SENAT_EXPOSE_DES_MOTIFS_BASE_URL) : undefined,
503
- url_xml: new URL("".concat(texteName, ".akn.xml"), SENAT_TEXTE_XML_BASE_URL),
504
- url_html: new URL("".concat(texteName, ".html"), SENAT_TEXTE_BASE_URL),
505
- url_pdf: new URL("".concat(texteName, ".pdf"), SENAT_TEXTE_BASE_URL)
506
- };
507
- _fsExtra["default"].writeJSONSync(_path["default"].join(texteDir, _loaders.DOCUMENT_METADATA_FILE), metadata, {
508
- spaces: 2
509
- });
510
- case 16:
511
- _iteratorAbruptCompletion7 = false;
512
- _context2.next = 7;
513
- break;
514
- case 19:
515
- _context2.next = 25;
516
- break;
517
- case 21:
518
- _context2.prev = 21;
519
- _context2.t0 = _context2["catch"](5);
520
- _didIteratorError7 = true;
521
- _iteratorError7 = _context2.t0;
522
- case 25:
523
- _context2.prev = 25;
524
- _context2.prev = 26;
525
- if (!(_iteratorAbruptCompletion7 && _iterator7["return"] != null)) {
526
- _context2.next = 30;
527
- break;
528
- }
529
- _context2.next = 30;
530
- return _iterator7["return"]();
531
- case 30:
532
- _context2.prev = 30;
533
- if (!_didIteratorError7) {
534
- _context2.next = 33;
535
- break;
536
- }
537
- throw _iteratorError7;
538
- case 33:
539
- return _context2.finish(30);
540
- case 34:
541
- return _context2.finish(25);
542
- case 35:
543
- case "end":
544
- return _context2.stop();
545
- }
546
- }, _callee2, null, [[5, 21, 25, 35], [26,, 30, 34]]);
547
- }));
548
- return _convertTexteUrls.apply(this, arguments);
549
- }
550
- function convertRapportUrls(_x2) {
551
- return _convertRapportUrls.apply(this, arguments);
147
+ url_expose_des_motifs: texte.hasExposeDesMotifs
148
+ ? new URL(`${texteName}-expose.html`, SENAT_EXPOSE_DES_MOTIFS_BASE_URL)
149
+ : undefined,
150
+ url_xml: new URL(`${texteName}.akn.xml`, SENAT_TEXTE_XML_BASE_URL),
151
+ url_html: new URL(`${texteName}.html`, SENAT_TEXTE_BASE_URL),
152
+ url_pdf: new URL(`${texteName}.pdf`, SENAT_TEXTE_BASE_URL),
153
+ };
154
+ fs_extra_1.default.writeJSONSync(path_1.default.join(texteDir, loaders_1.DOCUMENT_METADATA_FILE), metadata, {
155
+ spaces: 2,
156
+ });
157
+ }
552
158
  }
553
- function _convertRapportUrls() {
554
- _convertRapportUrls = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee3(dataDir) {
555
- var rapportsDir, _iteratorAbruptCompletion8, _didIteratorError8, _iteratorError8, _iterator8, _step8, rapport, _rapport$session, parsedRapportUrl, rapportName, rapportDir, rapportHtmlUrlBase, rapportHtmlUrl, rapportPdfUrlBase, rapportPdfUrl, metadata;
556
- return _regeneratorRuntime().wrap(function _callee3$(_context3) {
557
- while (1) switch (_context3.prev = _context3.next) {
558
- case 0:
559
- rapportsDir = _path["default"].join(dataDir, _loaders.RAPPORT_FOLDER);
560
- _fsExtra["default"].ensureDirSync(rapportsDir);
561
- _iteratorAbruptCompletion8 = false;
562
- _didIteratorError8 = false;
563
- _context3.prev = 4;
564
- _iterator8 = _asyncIterator((0, _dosleg.findSenatRapportUrls)(options.sessions));
565
- case 6:
566
- _context3.next = 8;
567
- return _iterator8.next();
568
- case 8:
569
- if (!(_iteratorAbruptCompletion8 = !(_step8 = _context3.sent).done)) {
570
- _context3.next = 23;
571
- break;
572
- }
573
- rapport = _step8.value;
574
- parsedRapportUrl = _path["default"].parse(rapport.url);
575
- rapportName = parsedRapportUrl.name;
576
- rapportDir = _path["default"].join(rapportsDir, "".concat((_rapport$session = rapport.session) !== null && _rapport$session !== void 0 ? _rapport$session : _datautil.UNDEFINED_SESSION), rapportName);
577
- _fsExtra["default"].ensureDirSync(rapportDir);
578
- rapportHtmlUrlBase = "".concat(rapportName, "_mono.html");
579
- rapportHtmlUrl = _path["default"].format({
159
+ async function convertRapportUrls(dataDir) {
160
+ const rapportsDir = path_1.default.join(dataDir, loaders_1.RAPPORT_FOLDER);
161
+ fs_extra_1.default.ensureDirSync(rapportsDir);
162
+ for await (const rapport of (0, dosleg_1.findSenatRapportUrls)(options["sessions"])) {
163
+ const parsedRapportUrl = path_1.default.parse(rapport.url);
164
+ const rapportName = parsedRapportUrl.name;
165
+ const rapportDir = path_1.default.join(rapportsDir, `${rapport.session ?? datautil_1.UNDEFINED_SESSION}`, rapportName);
166
+ fs_extra_1.default.ensureDirSync(rapportDir);
167
+ const rapportHtmlUrlBase = `${rapportName}_mono.html`;
168
+ const rapportHtmlUrl = path_1.default.format({
580
169
  dir: parsedRapportUrl.dir,
581
- base: rapportHtmlUrlBase
582
- });
583
- rapportPdfUrlBase = "".concat(rapportName, "1.pdf");
584
- rapportPdfUrl = _path["default"].format({
170
+ base: rapportHtmlUrlBase,
171
+ });
172
+ const rapportPdfUrlBase = `${rapportName}1.pdf`;
173
+ const rapportPdfUrl = path_1.default.format({
585
174
  dir: parsedRapportUrl.dir,
586
- base: rapportPdfUrlBase
587
- });
588
- metadata = {
175
+ base: rapportPdfUrlBase,
176
+ });
177
+ const metadata = {
589
178
  name: rapportName,
590
179
  session: rapport.session,
591
180
  url_html: new URL(rapportHtmlUrl, SENAT_RAPPORT_BASE_URL),
592
- url_pdf: new URL(rapportPdfUrl, SENAT_RAPPORT_BASE_URL)
593
- };
594
- _fsExtra["default"].writeJSONSync(_path["default"].join(rapportDir, _loaders.DOCUMENT_METADATA_FILE), metadata, {
595
- spaces: 2
596
- });
597
- case 20:
598
- _iteratorAbruptCompletion8 = false;
599
- _context3.next = 6;
600
- break;
601
- case 23:
602
- _context3.next = 29;
603
- break;
604
- case 25:
605
- _context3.prev = 25;
606
- _context3.t0 = _context3["catch"](4);
607
- _didIteratorError8 = true;
608
- _iteratorError8 = _context3.t0;
609
- case 29:
610
- _context3.prev = 29;
611
- _context3.prev = 30;
612
- if (!(_iteratorAbruptCompletion8 && _iterator8["return"] != null)) {
613
- _context3.next = 34;
614
- break;
615
- }
616
- _context3.next = 34;
617
- return _iterator8["return"]();
618
- case 34:
619
- _context3.prev = 34;
620
- if (!_didIteratorError8) {
621
- _context3.next = 37;
622
- break;
623
- }
624
- throw _iteratorError8;
625
- case 37:
626
- return _context3.finish(34);
627
- case 38:
628
- return _context3.finish(29);
629
- case 39:
630
- case "end":
631
- return _context3.stop();
632
- }
633
- }, _callee3, null, [[4, 25, 29, 39], [30,, 34, 38]]);
634
- }));
635
- return _convertRapportUrls.apply(this, arguments);
181
+ url_pdf: new URL(rapportPdfUrl, SENAT_RAPPORT_BASE_URL),
182
+ };
183
+ fs_extra_1.default.writeJSONSync(path_1.default.join(rapportDir, loaders_1.DOCUMENT_METADATA_FILE), metadata, {
184
+ spaces: 2,
185
+ });
186
+ }
636
187
  }
637
- convertData().then(function () {
638
- return process.exit(0);
639
- })["catch"](function (error) {
640
- console.log(error);
641
- process.exit(1);
188
+ convertData()
189
+ .then(() => process.exit(0))
190
+ .catch((error) => {
191
+ console.log(error);
192
+ process.exit(1);
642
193
  });
643
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfYXNzZXJ0IiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfY29tbWFuZExpbmVBcmdzIiwiX2ZzRXh0cmEiLCJfcGF0aCIsIl9kYXRhc2V0cyIsIl9sb2FkZXJzIiwiX21vZGVsIiwiX2Rvc2xlZyIsIl9kYXRhdXRpbCIsIl9jbGlfaGVscGVycyIsIl91dGlsIiwiZSIsIl9fZXNNb2R1bGUiLCJfcmVnZW5lcmF0b3JSdW50aW1lIiwiciIsInQiLCJPYmplY3QiLCJwcm90b3R5cGUiLCJuIiwiaGFzT3duUHJvcGVydHkiLCJvIiwiU3ltYm9sIiwiaSIsIml0ZXJhdG9yIiwiYSIsImFzeW5jSXRlcmF0b3IiLCJ1IiwidG9TdHJpbmdUYWciLCJjIiwiZGVmaW5lUHJvcGVydHkiLCJ2YWx1ZSIsImVudW1lcmFibGUiLCJjb25maWd1cmFibGUiLCJ3cml0YWJsZSIsImgiLCJHZW5lcmF0b3IiLCJjcmVhdGUiLCJFcnJvciIsImRvbmUiLCJtZXRob2QiLCJhcmciLCJkZWxlZ2F0ZSIsImQiLCJmIiwic2VudCIsIl9zZW50IiwiZGlzcGF0Y2hFeGNlcHRpb24iLCJhYnJ1cHQiLCJzIiwidHlwZSIsIkNvbnRleHQiLCJjYWxsIiwid3JhcCIsIkdlbmVyYXRvckZ1bmN0aW9uIiwiR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUiLCJsIiwicCIsImdldFByb3RvdHlwZU9mIiwieSIsIngiLCJ2IiwiZyIsImZvckVhY2giLCJfaW52b2tlIiwiQXN5bmNJdGVyYXRvciIsIl90eXBlb2YiLCJyZXNvbHZlIiwiX19hd2FpdCIsInRoZW4iLCJUeXBlRXJyb3IiLCJuZXh0IiwidyIsInRyeUVudHJpZXMiLCJwdXNoIiwibSIsInJlc2V0IiwiaXNOYU4iLCJsZW5ndGgiLCJkaXNwbGF5TmFtZSIsImlzR2VuZXJhdG9yRnVuY3Rpb24iLCJjb25zdHJ1Y3RvciIsIm5hbWUiLCJtYXJrIiwic2V0UHJvdG90eXBlT2YiLCJfX3Byb3RvX18iLCJhd3JhcCIsImFzeW5jIiwiUHJvbWlzZSIsImtleXMiLCJ1bnNoaWZ0IiwicG9wIiwidmFsdWVzIiwicHJldiIsImNoYXJBdCIsInNsaWNlIiwic3RvcCIsInJ2YWwiLCJjb21wbGV0ZSIsImZpbmlzaCIsIl9jYXRjaCIsImRlbGVnYXRlWWllbGQiLCJhc3luY0dlbmVyYXRvclN0ZXAiLCJfYXN5bmNUb0dlbmVyYXRvciIsImFyZ3VtZW50cyIsImFwcGx5IiwiX25leHQiLCJfdGhyb3ciLCJfdG9Db25zdW1hYmxlQXJyYXkiLCJfYXJyYXlXaXRob3V0SG9sZXMiLCJfaXRlcmFibGVUb0FycmF5IiwiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwiX25vbkl0ZXJhYmxlU3ByZWFkIiwiX2FycmF5TGlrZVRvQXJyYXkiLCJ0b1N0cmluZyIsIkFycmF5IiwiZnJvbSIsInRlc3QiLCJpc0FycmF5IiwiX2FzeW5jSXRlcmF0b3IiLCJBc3luY0Zyb21TeW5jSXRlcmF0b3IiLCJBc3luY0Zyb21TeW5jSXRlcmF0b3JDb250aW51YXRpb24iLCJyZWplY3QiLCJfcmV0dXJuIiwib3B0aW9uc0RlZmluaXRpb25zIiwiY29tbW9uT3B0aW9ucyIsIm9wdGlvbnMiLCJjb21tYW5kTGluZUFyZ3MiLCJTRU5BVF9URVhURV9YTUxfQkFTRV9VUkwiLCJTRU5BVF9URVhURV9CQVNFX1VSTCIsIlNFTkFUX0VYUE9TRV9ERVNfTU9USUZTX0JBU0VfVVJMIiwiU0VOQVRfUkFQUE9SVF9CQVNFX1VSTCIsImNvbnZlcnREYXRhIiwiX2NvbnZlcnREYXRhIiwiX2NhbGxlZSIsImVuYWJsZWREYXRhc2V0cyIsImRhdGFEaXIiLCJkYXRhc2V0IiwiYW1lbGlSZW9yZ2FuaXplZFJvb3REaXIiLCJfaXRlcmF0b3JBYnJ1cHRDb21wbGV0aW9uIiwiX2RpZEl0ZXJhdG9yRXJyb3IiLCJfaXRlcmF0b3JFcnJvciIsIl9pdGVyYXRvciIsIl9zdGVwIiwiYW1lbmRlbWVudCIsInNlc3Npb24iLCJzaWduZXREb3NzaWVyTGVnaXNsYXRpZiIsImFtZWxpUmVvcmdhbml6ZWREaXIiLCJhbWVuZGVtZW50RmlsZU5hbWUiLCJfZGF0YXNldCIsImRvc2xlZ1Jlb3JnYW5pemVkUm9vdERpciIsImRvc3NpZXJzUmVvcmdhbml6ZWREaXIiLCJfaXRlcmF0b3JBYnJ1cHRDb21wbGV0aW9uMiIsIl9kaWRJdGVyYXRvckVycm9yMiIsIl9pdGVyYXRvckVycm9yMiIsIl9pdGVyYXRvcjIiLCJfc3RlcDIiLCJsb2kiLCJfU0lHTkVUX1NUUlVDVFVSRV9SRUciLCJsb2lSZW9yZ2FuaXplZERpciIsInNpZ25ldFBhcnRzIiwiX3Nlc3Npb24iLCJmb3JtYXR0ZWRTZXNzaW9uIiwibG9pRmlsZU5hbWUiLCJfZGF0YXNldDIiLCJxdWVzdGlvbnNSZW9yZ2FuaXplZFJvb3REaXIiLCJfaXRlcmF0b3JBYnJ1cHRDb21wbGV0aW9uMyIsIl9kaWRJdGVyYXRvckVycm9yMyIsIl9pdGVyYXRvckVycm9yMyIsIl9pdGVyYXRvcjMiLCJfc3RlcDMiLCJxdWVzdGlvbiIsImxlZ2lzbGF0dXJlIiwicXVlc3Rpb25SZW9yZ2FuaXplZERpciIsInF1ZXN0aW9uRmlsZU5hbWUiLCJfZGF0YXNldDMiLCJzZW5zUmVvcmdhbml6ZWRSb290RGlyIiwic2VuYXRldXJzUmVvcmdhbml6ZWREaXIiLCJjaXJjb25zY3JpcHRpb25zUmVvcmdhbml6ZWREaXIiLCJvcmdhbmlzbWVzUmVvcmdhbml6ZWREaXIiLCJfaXRlcmF0b3JBYnJ1cHRDb21wbGV0aW9uNCIsIl9kaWRJdGVyYXRvckVycm9yNCIsIl9pdGVyYXRvckVycm9yNCIsIl9pdGVyYXRvcjQiLCJfc3RlcDQiLCJzZW4iLCJzZW5GaWxlTmFtZSIsIl9pdGVyYXRvckFicnVwdENvbXBsZXRpb241IiwiX2RpZEl0ZXJhdG9yRXJyb3I1IiwiX2l0ZXJhdG9yRXJyb3I1IiwiX2l0ZXJhdG9yNSIsIl9zdGVwNSIsImNpcmNvbnNjcmlwdGlvbiIsImNpcmNvbnNjcmlwdGlvbkZpbGVOYW1lIiwiX2l0ZXJhdG9yQWJydXB0Q29tcGxldGlvbjYiLCJfZGlkSXRlcmF0b3JFcnJvcjYiLCJfaXRlcmF0b3JFcnJvcjYiLCJfaXRlcmF0b3I2IiwiX3N0ZXA2Iiwib3JnYW5pc21lIiwib3JnYW5pc21lRmlsZU5hbWUiLCJfY2FsbGVlJCIsIl9jb250ZXh0IiwiZ2V0RW5hYmxlZERhdGFzZXRzIiwiY2F0ZWdvcmllcyIsImFzc2VydCIsImNvbnNvbGUiLCJ0aW1lIiwiRW5hYmxlZERhdGFzZXRzIiwiQW1lbGkiLCJkYXRhc2V0cyIsImFtZWxpIiwic2lsZW50IiwibG9nIiwiY29uY2F0IiwiZGF0YWJhc2UiLCJwYXRoIiwiam9pbiIsImVuc3VyZUFuZENsZWFyRGlyIiwiZmluZEFsbEFtZW5kZW1lbnRzIiwidmVyYm9zZSIsIm51bWVybyIsIlN0cmluZyIsIlVOREVGSU5FRF9TRVNTSU9OIiwic2lnbmV0X2Rvc3NpZXJfbGVnaXNsYXRpZiIsIm5hdHVyZV90ZXh0ZSIsIm51bWVyb190ZXh0ZSIsInRvTG93ZXJDYXNlIiwiZnMiLCJlbnN1cmVEaXJTeW5jIiwid3JpdGVKU09OU3luYyIsInNwYWNlcyIsInQwIiwiRG9zTGVnIiwiZG9zbGVnIiwiRE9TTEVHX0RPU1NJRVJTX0ZPTERFUiIsImZpbmRBbGxMb2lzIiwic2lnbmV0IiwiU0lHTkVUX1NUUlVDVFVSRV9SRUdFWFAiLCJleGVjIiwiZ3JvdXBzIiwiZm9ybWF0VG9Gb3VyRGlnaXRTZXNzaW9uIiwidDEiLCJjb252ZXJ0VGV4dGVVcmxzIiwiY29udmVydFJhcHBvcnRVcmxzIiwiUXVlc3Rpb25zIiwicXVlc3Rpb25zIiwiZmluZEFsbFF1ZXN0aW9ucyIsInJlZmVyZW5jZSIsInQyIiwiU2VucyIsInNlbnMiLCJTRU5TX1NFTkFURVVSU19GT0xERVIiLCJTRU5TX0NJUkNPTlNDUklQVElPTlNfRk9MREVSIiwiU0VOU19PUkdBTklTTUVTX0ZPTERFUiIsImZpbmRBbGxTZW5zIiwibWF0cmljdWxlIiwidDMiLCJmaW5kQWxsQ2lyY29uc2NyaXB0aW9ucyIsImlkZW50aWZpYW50IiwidDQiLCJmaW5kQWxsT3JnYW5pc21lcyIsImNvZGUiLCJ0NSIsInRpbWVFbmQiLCJfeCIsIl9jb252ZXJ0VGV4dGVVcmxzIiwiX2NhbGxlZTIiLCJ0ZXh0ZXNEaXIiLCJvcmlnaW5hbFRleHRlc0RpciIsIl9pdGVyYXRvckFicnVwdENvbXBsZXRpb243IiwiX2RpZEl0ZXJhdG9yRXJyb3I3IiwiX2l0ZXJhdG9yRXJyb3I3IiwiX2l0ZXJhdG9yNyIsIl9zdGVwNyIsInRleHRlIiwiX3RleHRlJHNlc3Npb24iLCJ0ZXh0ZU5hbWUiLCJ0ZXh0ZURpciIsIm1ldGFkYXRhIiwiX2NhbGxlZTIkIiwiX2NvbnRleHQyIiwiVEVYVEVfRk9MREVSIiwiVEVYVEVfT1JJR0lOQUxfRk9MREVSIiwiZmluZFNlbmF0VGV4dGVVcmxzIiwic2Vzc2lvbnMiLCJwYXJzZSIsInVybCIsInVybF9leHBvc2VfZGVzX21vdGlmcyIsImhhc0V4cG9zZURlc01vdGlmcyIsIlVSTCIsInVuZGVmaW5lZCIsInVybF94bWwiLCJ1cmxfaHRtbCIsInVybF9wZGYiLCJET0NVTUVOVF9NRVRBREFUQV9GSUxFIiwiX3gyIiwiX2NvbnZlcnRSYXBwb3J0VXJscyIsIl9jYWxsZWUzIiwicmFwcG9ydHNEaXIiLCJfaXRlcmF0b3JBYnJ1cHRDb21wbGV0aW9uOCIsIl9kaWRJdGVyYXRvckVycm9yOCIsIl9pdGVyYXRvckVycm9yOCIsIl9pdGVyYXRvcjgiLCJfc3RlcDgiLCJyYXBwb3J0IiwiX3JhcHBvcnQkc2Vzc2lvbiIsInBhcnNlZFJhcHBvcnRVcmwiLCJyYXBwb3J0TmFtZSIsInJhcHBvcnREaXIiLCJyYXBwb3J0SHRtbFVybEJhc2UiLCJyYXBwb3J0SHRtbFVybCIsInJhcHBvcnRQZGZVcmxCYXNlIiwicmFwcG9ydFBkZlVybCIsIl9jYWxsZWUzJCIsIl9jb250ZXh0MyIsIlJBUFBPUlRfRk9MREVSIiwiZmluZFNlbmF0UmFwcG9ydFVybHMiLCJmb3JtYXQiLCJkaXIiLCJiYXNlIiwicHJvY2VzcyIsImV4aXQiLCJlcnJvciJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zY3JpcHRzL2NvbnZlcnRfZGF0YS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXNzZXJ0IGZyb20gXCJhc3NlcnRcIlxuaW1wb3J0IGNvbW1hbmRMaW5lQXJncyBmcm9tIFwiY29tbWFuZC1saW5lLWFyZ3NcIlxuaW1wb3J0IGZzIGZyb20gXCJmcy1leHRyYVwiXG5pbXBvcnQgcGF0aCBmcm9tIFwicGF0aFwiXG5cbmltcG9ydCB7IGRhdGFzZXRzLCBFbmFibGVkRGF0YXNldHMsIGdldEVuYWJsZWREYXRhc2V0cyB9IGZyb20gXCIuLi9kYXRhc2V0c1wiXG5pbXBvcnQge1xuICBET0NVTUVOVF9NRVRBREFUQV9GSUxFLFxuICBET1NMRUdfRE9TU0lFUlNfRk9MREVSLFxuICBSQVBQT1JUX0ZPTERFUixcbiAgUmFwcG9ydE1ldGFkYXRhLFxuICBTRU5TX0NJUkNPTlNDUklQVElPTlNfRk9MREVSLFxuICBTRU5TX09SR0FOSVNNRVNfRk9MREVSLFxuICBTRU5TX1NFTkFURVVSU19GT0xERVIsXG4gIFRFWFRFX0ZPTERFUixcbiAgVEVYVEVfT1JJR0lOQUxfRk9MREVSLFxuICBUZXh0ZU1ldGFkYXRhLFxufSBmcm9tIFwiLi4vbG9hZGVyc1wiXG5pbXBvcnQge1xuICBmaW5kQWxsQW1lbmRlbWVudHMsXG4gIGZpbmRBbGxDaXJjb25zY3JpcHRpb25zLFxuICBmaW5kQWxsTG9pcyxcbiAgZmluZEFsbE9yZ2FuaXNtZXMsXG4gIGZpbmRBbGxRdWVzdGlvbnMsXG4gIGZpbmRBbGxTZW5zLFxufSBmcm9tIFwiLi4vbW9kZWxcIlxuaW1wb3J0IHsgZmluZFNlbmF0UmFwcG9ydFVybHMsIGZpbmRTZW5hdFRleHRlVXJscyB9IGZyb20gXCIuLi9tb2RlbC9kb3NsZWdcIlxuaW1wb3J0IHsgZm9ybWF0VG9Gb3VyRGlnaXRTZXNzaW9uLCBTSUdORVRfU1RSVUNUVVJFX1JFR0VYUCwgVU5ERUZJTkVEX1NFU1NJT04gfSBmcm9tIFwiLi9kYXRhdXRpbFwiXG5pbXBvcnQgeyBjb21tb25PcHRpb25zIH0gZnJvbSBcIi4vc2hhcmVkL2NsaV9oZWxwZXJzXCJcbmltcG9ydCB7IGVuc3VyZUFuZENsZWFyRGlyIH0gZnJvbSBcIi4vc2hhcmVkL3V0aWxcIlxuXG5jb25zdCBvcHRpb25zRGVmaW5pdGlvbnMgPSBbXG4gIC4uLmNvbW1vbk9wdGlvbnMsXG5dXG5jb25zdCBvcHRpb25zID0gY29tbWFuZExpbmVBcmdzKG9wdGlvbnNEZWZpbml0aW9ucylcblxuY29uc3QgU0VOQVRfVEVYVEVfWE1MX0JBU0VfVVJMID0gXCJodHRwczovL3d3dy5zZW5hdC5mci9ha29tYW50b3NvL1wiXG5jb25zdCBTRU5BVF9URVhURV9CQVNFX1VSTCA9IFwiaHR0cHM6Ly93d3cuc2VuYXQuZnIvbGVnL1wiXG5jb25zdCBTRU5BVF9FWFBPU0VfREVTX01PVElGU19CQVNFX1VSTCA9IFwiaHR0cHM6Ly93d3cuc2VuYXQuZnIvbGVnL2V4cG9zZXMtZGVzLW1vdGlmcy9cIlxuY29uc3QgU0VOQVRfUkFQUE9SVF9CQVNFX1VSTCA9IFwiaHR0cHM6Ly93d3cuc2VuYXQuZnIvcmFwL1wiXG5cbmFzeW5jIGZ1bmN0aW9uIGNvbnZlcnREYXRhICgpIHtcbiAgY29uc3QgZW5hYmxlZERhdGFzZXRzID0gZ2V0RW5hYmxlZERhdGFzZXRzKG9wdGlvbnMuY2F0ZWdvcmllcylcbiAgY29uc3QgZGF0YURpcjogc3RyaW5nID0gb3B0aW9ucy5kYXRhRGlyXG4gIGFzc2VydChkYXRhRGlyLCBcIk1pc3NpbmcgYXJndW1lbnQ6IGRhdGEgZGlyZWN0b3J5XCIpXG5cbiAgY29uc29sZS50aW1lKFwiZGF0YSB0cmFuc2Zvcm1hdGlvbiB0aW1lXCIpXG5cbiAgaWYgKGVuYWJsZWREYXRhc2V0cyAmIEVuYWJsZWREYXRhc2V0cy5BbWVsaSkge1xuICAgIGNvbnN0IGRhdGFzZXQgPSBkYXRhc2V0cy5hbWVsaVxuXG4gICAgaWYgKCFvcHRpb25zLnNpbGVudCkge1xuICAgICAgY29uc29sZS5sb2coYENvbnZlcnRpbmcgZGF0YWJhc2UgJHtkYXRhc2V0LmRhdGFiYXNlfSBkYXRhIGludG8gZmlsZXPigKZgKVxuICAgIH1cblxuICAgIGNvbnN0IGFtZWxpUmVvcmdhbml6ZWRSb290RGlyID0gcGF0aC5qb2luKGRhdGFEaXIsIGRhdGFzZXQuZGF0YWJhc2UpXG4gICAgZW5zdXJlQW5kQ2xlYXJEaXIoYW1lbGlSZW9yZ2FuaXplZFJvb3REaXIpXG5cbiAgICBmb3IgYXdhaXQgKGNvbnN0IGFtZW5kZW1lbnQgb2YgZmluZEFsbEFtZW5kZW1lbnRzKCkpIHtcbiAgICAgIGlmIChvcHRpb25zLnZlcmJvc2UpIHtcbiAgICAgICAgY29uc29sZS5sb2coYENvbnZlcnRpbmcgJHthbWVuZGVtZW50Lm51bWVyb30gZmlsZeKApmApXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHNlc3Npb24gPSBTdHJpbmcoYW1lbmRlbWVudC5zZXNzaW9uKSB8fCBVTkRFRklORURfU0VTU0lPTlxuICAgICAgY29uc3Qgc2lnbmV0RG9zc2llckxlZ2lzbGF0aWYgPSBhbWVuZGVtZW50LnNpZ25ldF9kb3NzaWVyX2xlZ2lzbGF0aWZcbiAgICAgICAgfHwgYCR7YW1lbmRlbWVudC5uYXR1cmVfdGV4dGV9LSR7YW1lbmRlbWVudC5udW1lcm9fdGV4dGV9YC50b0xvd2VyQ2FzZSgpXG4gICAgICBjb25zdCBhbWVsaVJlb3JnYW5pemVkRGlyID0gcGF0aC5qb2luKGFtZWxpUmVvcmdhbml6ZWRSb290RGlyLCBzZXNzaW9uLCBzaWduZXREb3NzaWVyTGVnaXNsYXRpZilcbiAgICAgIGZzLmVuc3VyZURpclN5bmMoYW1lbGlSZW9yZ2FuaXplZERpcilcbiAgICAgIGNvbnN0IGFtZW5kZW1lbnRGaWxlTmFtZSA9IGAke2FtZW5kZW1lbnQubnVtZXJvfS5qc29uYFxuICAgICAgZnMud3JpdGVKU09OU3luYyhwYXRoLmpvaW4oYW1lbGlSZW9yZ2FuaXplZERpciwgYW1lbmRlbWVudEZpbGVOYW1lKSwgYW1lbmRlbWVudCwgeyBzcGFjZXM6IDIgfSlcbiAgICB9XG4gIH1cblxuICBpZiAoZW5hYmxlZERhdGFzZXRzICYgRW5hYmxlZERhdGFzZXRzLkRvc0xlZykge1xuICAgIGNvbnN0IGRhdGFzZXQgPSBkYXRhc2V0cy5kb3NsZWdcblxuICAgIGlmICghb3B0aW9ucy5zaWxlbnQpIHtcbiAgICAgIGNvbnNvbGUubG9nKGBDb252ZXJ0aW5nIGRhdGFiYXNlICR7ZGF0YXNldC5kYXRhYmFzZX0gZGF0YSBpbnRvIGZpbGVz4oCmYClcbiAgICB9XG5cbiAgICBjb25zdCBkb3NsZWdSZW9yZ2FuaXplZFJvb3REaXIgPSBwYXRoLmpvaW4oZGF0YURpciwgZGF0YXNldC5kYXRhYmFzZSlcbiAgICBjb25zdCBkb3NzaWVyc1Jlb3JnYW5pemVkRGlyID0gcGF0aC5qb2luKGRvc2xlZ1Jlb3JnYW5pemVkUm9vdERpciwgRE9TTEVHX0RPU1NJRVJTX0ZPTERFUilcbiAgICBlbnN1cmVBbmRDbGVhckRpcihkb3NsZWdSZW9yZ2FuaXplZFJvb3REaXIpXG4gICAgZW5zdXJlQW5kQ2xlYXJEaXIoZG9zc2llcnNSZW9yZ2FuaXplZERpcilcblxuICAgIGZvciBhd2FpdCAoY29uc3QgbG9pIG9mIGZpbmRBbGxMb2lzKCkpIHtcbiAgICAgIGlmIChvcHRpb25zLnZlcmJvc2UpIHtcbiAgICAgICAgY29uc29sZS5sb2coYENvbnZlcnRpbmcgJHtsb2kuc2lnbmV0fSBmaWxl4oCmYClcbiAgICAgIH1cblxuICAgICAgbGV0IGxvaVJlb3JnYW5pemVkRGlyID0gcGF0aC5qb2luKGRvc3NpZXJzUmVvcmdhbml6ZWREaXIsIFVOREVGSU5FRF9TRVNTSU9OKVxuICAgICAgY29uc3Qgc2lnbmV0UGFydHMgPSBTSUdORVRfU1RSVUNUVVJFX1JFR0VYUC5leGVjKGxvaS5zaWduZXQpPy5ncm91cHNcbiAgICAgIGlmIChzaWduZXRQYXJ0cykge1xuICAgICAgICBjb25zdCB7IHNlc3Npb24gfSA9IHNpZ25ldFBhcnRzXG4gICAgICAgIGNvbnN0IGZvcm1hdHRlZFNlc3Npb24gPSBmb3JtYXRUb0ZvdXJEaWdpdFNlc3Npb24oc2Vzc2lvbilcbiAgICAgICAgbG9pUmVvcmdhbml6ZWREaXIgPSBwYXRoLmpvaW4oZG9zc2llcnNSZW9yZ2FuaXplZERpciwgZm9ybWF0dGVkU2Vzc2lvbilcbiAgICAgIH1cbiAgICAgIGZzLmVuc3VyZURpclN5bmMobG9pUmVvcmdhbml6ZWREaXIpXG5cbiAgICAgIGNvbnN0IGxvaUZpbGVOYW1lID0gYCR7bG9pLnNpZ25ldH0uanNvbmBcbiAgICAgIGZzLndyaXRlSlNPTlN5bmMocGF0aC5qb2luKGxvaVJlb3JnYW5pemVkRGlyLCBsb2lGaWxlTmFtZSksIGxvaSwgeyBzcGFjZXM6IDIgfSlcbiAgICB9XG5cbiAgICBhd2FpdCBjb252ZXJ0VGV4dGVVcmxzKGRhdGFEaXIpXG4gICAgYXdhaXQgY29udmVydFJhcHBvcnRVcmxzKGRhdGFEaXIpXG4gIH1cblxuICBpZiAoZW5hYmxlZERhdGFzZXRzICYgRW5hYmxlZERhdGFzZXRzLlF1ZXN0aW9ucykge1xuICAgIGNvbnN0IGRhdGFzZXQgPSBkYXRhc2V0cy5xdWVzdGlvbnNcblxuICAgIGlmICghb3B0aW9ucy5zaWxlbnQpIHtcbiAgICAgIGNvbnNvbGUubG9nKGBDb252ZXJ0aW5nIGRhdGFiYXNlICR7ZGF0YXNldC5kYXRhYmFzZX0gZGF0YSBpbnRvIGZpbGVz4oCmYClcbiAgICB9XG5cbiAgICBjb25zdCBxdWVzdGlvbnNSZW9yZ2FuaXplZFJvb3REaXIgPSBwYXRoLmpvaW4oZGF0YURpciwgZGF0YXNldC5kYXRhYmFzZSlcbiAgICBlbnN1cmVBbmRDbGVhckRpcihxdWVzdGlvbnNSZW9yZ2FuaXplZFJvb3REaXIpXG5cbiAgICBmb3IgYXdhaXQgKGNvbnN0IHF1ZXN0aW9uIG9mIGZpbmRBbGxRdWVzdGlvbnMoKSkge1xuICAgICAgaWYgKG9wdGlvbnMudmVyYm9zZSkge1xuICAgICAgICBjb25zb2xlLmxvZyhgQ29udmVydGluZyAke3F1ZXN0aW9uLnJlZmVyZW5jZX0gZmlsZeKApmApXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGxlZ2lzbGF0dXJlID0gcXVlc3Rpb24ubGVnaXNsYXR1cmUgPyBxdWVzdGlvbi5sZWdpc2xhdHVyZSA6IDBcbiAgICAgIGNvbnN0IHF1ZXN0aW9uUmVvcmdhbml6ZWREaXIgPSBwYXRoLmpvaW4ocXVlc3Rpb25zUmVvcmdhbml6ZWRSb290RGlyLCBTdHJpbmcobGVnaXNsYXR1cmUpKVxuICAgICAgZnMuZW5zdXJlRGlyU3luYyhxdWVzdGlvblJlb3JnYW5pemVkRGlyKVxuICAgICAgY29uc3QgcXVlc3Rpb25GaWxlTmFtZSA9IGAke3F1ZXN0aW9uLnJlZmVyZW5jZX0uanNvbmBcbiAgICAgIGZzLndyaXRlSlNPTlN5bmMocGF0aC5qb2luKHF1ZXN0aW9uUmVvcmdhbml6ZWREaXIsIHF1ZXN0aW9uRmlsZU5hbWUpLCBxdWVzdGlvbiwgeyBzcGFjZXM6IDIgfSlcbiAgICB9XG4gIH1cblxuICBpZiAoZW5hYmxlZERhdGFzZXRzICYgRW5hYmxlZERhdGFzZXRzLlNlbnMpIHtcbiAgICBjb25zdCBkYXRhc2V0ID0gZGF0YXNldHMuc2Vuc1xuXG4gICAgaWYgKCFvcHRpb25zLnNpbGVudCkge1xuICAgICAgY29uc29sZS5sb2coYENvbnZlcnRpbmcgZGF0YWJhc2UgJHtkYXRhc2V0LmRhdGFiYXNlfSBkYXRhIGludG8gZmlsZXPigKZgKVxuICAgIH1cblxuICAgIGNvbnN0IHNlbnNSZW9yZ2FuaXplZFJvb3REaXIgPSBwYXRoLmpvaW4oZGF0YURpciwgZGF0YXNldC5kYXRhYmFzZSlcbiAgICBjb25zdCBzZW5hdGV1cnNSZW9yZ2FuaXplZERpciA9IHBhdGguam9pbihzZW5zUmVvcmdhbml6ZWRSb290RGlyLCBTRU5TX1NFTkFURVVSU19GT0xERVIpXG4gICAgY29uc3QgY2lyY29uc2NyaXB0aW9uc1Jlb3JnYW5pemVkRGlyID0gcGF0aC5qb2luKHNlbnNSZW9yZ2FuaXplZFJvb3REaXIsIFNFTlNfQ0lSQ09OU0NSSVBUSU9OU19GT0xERVIpXG4gICAgY29uc3Qgb3JnYW5pc21lc1Jlb3JnYW5pemVkRGlyID0gcGF0aC5qb2luKHNlbnNSZW9yZ2FuaXplZFJvb3REaXIsIFNFTlNfT1JHQU5JU01FU19GT0xERVIpXG4gICAgZW5zdXJlQW5kQ2xlYXJEaXIoc2Vuc1Jlb3JnYW5pemVkUm9vdERpcilcbiAgICBlbnN1cmVBbmRDbGVhckRpcihzZW5hdGV1cnNSZW9yZ2FuaXplZERpcilcbiAgICBlbnN1cmVBbmRDbGVhckRpcihjaXJjb25zY3JpcHRpb25zUmVvcmdhbml6ZWREaXIpXG4gICAgZW5zdXJlQW5kQ2xlYXJEaXIob3JnYW5pc21lc1Jlb3JnYW5pemVkRGlyKVxuXG4gICAgZm9yIGF3YWl0IChjb25zdCBzZW4gb2YgZmluZEFsbFNlbnMoKSkge1xuICAgICAgaWYgKG9wdGlvbnMudmVyYm9zZSkge1xuICAgICAgICBjb25zb2xlLmxvZyhgQ29udmVydGluZyAke3Nlbi5tYXRyaWN1bGV9IGZpbGXigKZgKVxuICAgICAgfVxuXG4gICAgICBjb25zdCBzZW5GaWxlTmFtZSA9IGAke3Nlbi5tYXRyaWN1bGV9Lmpzb25gXG4gICAgICBmcy53cml0ZUpTT05TeW5jKHBhdGguam9pbihzZW5hdGV1cnNSZW9yZ2FuaXplZERpciwgc2VuRmlsZU5hbWUpLCBzZW4sIHsgc3BhY2VzOiAyIH0pXG4gICAgfVxuXG4gICAgZm9yIGF3YWl0IChjb25zdCBjaXJjb25zY3JpcHRpb24gb2YgZmluZEFsbENpcmNvbnNjcmlwdGlvbnMoKSkge1xuICAgICAgaWYgKG9wdGlvbnMudmVyYm9zZSkge1xuICAgICAgICBjb25zb2xlLmxvZyhgQ29udmVydGluZyAke2NpcmNvbnNjcmlwdGlvbi5pZGVudGlmaWFudH0gZmlsZeKApmApXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGNpcmNvbnNjcmlwdGlvbkZpbGVOYW1lID0gYCR7Y2lyY29uc2NyaXB0aW9uLmlkZW50aWZpYW50fS5qc29uYFxuICAgICAgZnMud3JpdGVKU09OU3luYyhcbiAgICAgICAgcGF0aC5qb2luKGNpcmNvbnNjcmlwdGlvbnNSZW9yZ2FuaXplZERpciwgY2lyY29uc2NyaXB0aW9uRmlsZU5hbWUpLCBjaXJjb25zY3JpcHRpb24sIHsgc3BhY2VzOiAyIH1cbiAgICAgIClcbiAgICB9XG5cbiAgICBmb3IgYXdhaXQgKGNvbnN0IG9yZ2FuaXNtZSBvZiBmaW5kQWxsT3JnYW5pc21lcygpKSB7XG4gICAgICBpZiAob3B0aW9ucy52ZXJib3NlKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBDb252ZXJ0aW5nICR7b3JnYW5pc21lLmNvZGV9IGZpbGXigKZgKVxuICAgICAgfVxuXG4gICAgICBjb25zdCBvcmdhbmlzbWVGaWxlTmFtZSA9IGAke29yZ2FuaXNtZS5jb2RlfS5qc29uYFxuICAgICAgZnMud3JpdGVKU09OU3luYyhwYXRoLmpvaW4ob3JnYW5pc21lc1Jlb3JnYW5pemVkRGlyLCBvcmdhbmlzbWVGaWxlTmFtZSksIG9yZ2FuaXNtZSwgeyBzcGFjZXM6IDIgfSlcbiAgICB9XG4gIH1cblxuICBpZiAoIW9wdGlvbnMuc2lsZW50KSB7XG4gICAgY29uc29sZS50aW1lRW5kKFwiZGF0YSB0cmFuc2Zvcm1hdGlvbiB0aW1lXCIpXG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gY29udmVydFRleHRlVXJscyAoZGF0YURpcjogc3RyaW5nKSB7XG4gIGNvbnN0IHRleHRlc0RpciA9IHBhdGguam9pbihkYXRhRGlyLCBURVhURV9GT0xERVIpXG4gIGZzLmVuc3VyZURpclN5bmModGV4dGVzRGlyKVxuXG4gIGNvbnN0IG9yaWdpbmFsVGV4dGVzRGlyID0gcGF0aC5qb2luKHRleHRlc0RpciwgVEVYVEVfT1JJR0lOQUxfRk9MREVSKVxuXG4gIGZvciBhd2FpdCAoY29uc3QgdGV4dGUgb2YgZmluZFNlbmF0VGV4dGVVcmxzKG9wdGlvbnMuc2Vzc2lvbnMpKSB7XG4gICAgY29uc3QgdGV4dGVOYW1lID0gcGF0aC5wYXJzZSh0ZXh0ZS51cmwpLm5hbWVcbiAgICBjb25zdCB0ZXh0ZURpciA9IHBhdGguam9pbihvcmlnaW5hbFRleHRlc0RpciwgYCR7dGV4dGUuc2Vzc2lvbiA/PyBVTkRFRklORURfU0VTU0lPTn1gLCB0ZXh0ZU5hbWUpXG4gICAgZnMuZW5zdXJlRGlyU3luYyh0ZXh0ZURpcilcblxuICAgIGNvbnN0IG1ldGFkYXRhOiBUZXh0ZU1ldGFkYXRhID0ge1xuICAgICAgbmFtZTogdGV4dGVOYW1lLFxuICAgICAgc2Vzc2lvbjogdGV4dGUuc2Vzc2lvbixcbiAgICAgIHVybF9leHBvc2VfZGVzX21vdGlmczogdGV4dGUuaGFzRXhwb3NlRGVzTW90aWZzID9cbiAgICAgICAgbmV3IFVSTChgJHt0ZXh0ZU5hbWV9LWV4cG9zZS5odG1sYCwgU0VOQVRfRVhQT1NFX0RFU19NT1RJRlNfQkFTRV9VUkwpIDogdW5kZWZpbmVkLFxuICAgICAgdXJsX3htbDogbmV3IFVSTChgJHt0ZXh0ZU5hbWV9LmFrbi54bWxgLCBTRU5BVF9URVhURV9YTUxfQkFTRV9VUkwpLFxuICAgICAgdXJsX2h0bWw6IG5ldyBVUkwoYCR7dGV4dGVOYW1lfS5odG1sYCwgU0VOQVRfVEVYVEVfQkFTRV9VUkwpLFxuICAgICAgdXJsX3BkZjogbmV3IFVSTChgJHt0ZXh0ZU5hbWV9LnBkZmAsIFNFTkFUX1RFWFRFX0JBU0VfVVJMKSxcbiAgICB9XG4gICAgZnMud3JpdGVKU09OU3luYyhwYXRoLmpvaW4odGV4dGVEaXIsIERPQ1VNRU5UX01FVEFEQVRBX0ZJTEUpLCBtZXRhZGF0YSwgeyBzcGFjZXM6IDIgfSlcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBjb252ZXJ0UmFwcG9ydFVybHMgKGRhdGFEaXI6IHN0cmluZykge1xuICBjb25zdCByYXBwb3J0c0RpciA9IHBhdGguam9pbihkYXRhRGlyLCBSQVBQT1JUX0ZPTERFUilcbiAgZnMuZW5zdXJlRGlyU3luYyhyYXBwb3J0c0RpcilcblxuICBmb3IgYXdhaXQgKGNvbnN0IHJhcHBvcnQgb2YgZmluZFNlbmF0UmFwcG9ydFVybHMob3B0aW9ucy5zZXNzaW9ucykpIHtcbiAgICBjb25zdCBwYXJzZWRSYXBwb3J0VXJsID0gcGF0aC5wYXJzZShyYXBwb3J0LnVybClcbiAgICBjb25zdCByYXBwb3J0TmFtZSA9IHBhcnNlZFJhcHBvcnRVcmwubmFtZVxuICAgIGNvbnN0IHJhcHBvcnREaXIgPSBwYXRoLmpvaW4ocmFwcG9ydHNEaXIsIGAke3JhcHBvcnQuc2Vzc2lvbiA/PyBVTkRFRklORURfU0VTU0lPTn1gLCByYXBwb3J0TmFtZSlcbiAgICBmcy5lbnN1cmVEaXJTeW5jKHJhcHBvcnREaXIpXG5cbiAgICBjb25zdCByYXBwb3J0SHRtbFVybEJhc2UgPSBgJHtyYXBwb3J0TmFtZX1fbW9uby5odG1sYFxuICAgIGNvbnN0IHJhcHBvcnRIdG1sVXJsID0gcGF0aC5mb3JtYXQoe1xuICAgICAgZGlyOiBwYXJzZWRSYXBwb3J0VXJsLmRpcixcbiAgICAgIGJhc2U6IHJhcHBvcnRIdG1sVXJsQmFzZSxcbiAgICB9KVxuXG4gICAgY29uc3QgcmFwcG9ydFBkZlVybEJhc2UgPSBgJHtyYXBwb3J0TmFtZX0xLnBkZmBcbiAgICBjb25zdCByYXBwb3J0UGRmVXJsID0gcGF0aC5mb3JtYXQoe1xuICAgICAgZGlyOiBwYXJzZWRSYXBwb3J0VXJsLmRpcixcbiAgICAgIGJhc2U6IHJhcHBvcnRQZGZVcmxCYXNlLFxuICAgIH0pXG5cbiAgICBjb25zdCBtZXRhZGF0YTogUmFwcG9ydE1ldGFkYXRhID0ge1xuICAgICAgbmFtZTogcmFwcG9ydE5hbWUsXG4gICAgICBzZXNzaW9uOiByYXBwb3J0LnNlc3Npb24sXG4gICAgICB1cmxfaHRtbDogbmV3IFVSTChyYXBwb3J0SHRtbFVybCwgU0VOQVRfUkFQUE9SVF9CQVNFX1VSTCksXG4gICAgICB1cmxfcGRmOiBuZXcgVVJMKHJhcHBvcnRQZGZVcmwsIFNFTkFUX1JBUFBPUlRfQkFTRV9VUkwpLFxuICAgIH1cbiAgICBmcy53cml0ZUpTT05TeW5jKHBhdGguam9pbihyYXBwb3J0RGlyLCBET0NVTUVOVF9NRVRBREFUQV9GSUxFKSwgbWV0YWRhdGEsIHsgc3BhY2VzOiAyIH0pXG4gIH1cbn1cblxuY29udmVydERhdGEoKVxuICAudGhlbigoKSA9PiBwcm9jZXNzLmV4aXQoMCkpXG4gIC5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICBjb25zb2xlLmxvZyhlcnJvcilcbiAgICBwcm9jZXNzLmV4aXQoMSlcbiAgfSlcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsSUFBQUEsT0FBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUMsZ0JBQUEsR0FBQUYsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFFLFFBQUEsR0FBQUgsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFHLEtBQUEsR0FBQUosc0JBQUEsQ0FBQUMsT0FBQTtBQUVBLElBQUFJLFNBQUEsR0FBQUosT0FBQTtBQUNBLElBQUFLLFFBQUEsR0FBQUwsT0FBQTtBQVlBLElBQUFNLE1BQUEsR0FBQU4sT0FBQTtBQVFBLElBQUFPLE9BQUEsR0FBQVAsT0FBQTtBQUNBLElBQUFRLFNBQUEsR0FBQVIsT0FBQTtBQUNBLElBQUFTLFlBQUEsR0FBQVQsT0FBQTtBQUNBLElBQUFVLEtBQUEsR0FBQVYsT0FBQTtBQUFpRCxTQUFBRCx1QkFBQVksQ0FBQSxXQUFBQSxDQUFBLElBQUFBLENBQUEsQ0FBQUMsVUFBQSxHQUFBRCxDQUFBLGdCQUFBQSxDQUFBO0FBQUEsU0FBQUUsb0JBQUEsa0JBNUJqRCxtS0FBQUEsbUJBQUEsWUFBQUEsb0JBQUEsV0FBQUMsQ0FBQSxTQUFBQyxDQUFBLEVBQUFELENBQUEsT0FBQUgsQ0FBQSxHQUFBSyxNQUFBLENBQUFDLFNBQUEsRUFBQUMsQ0FBQSxHQUFBUCxDQUFBLENBQUFRLGNBQUEsRUFBQUMsQ0FBQSx3QkFBQUMsTUFBQSxHQUFBQSxNQUFBLE9BQUFDLENBQUEsR0FBQUYsQ0FBQSxDQUFBRyxRQUFBLGtCQUFBQyxDQUFBLEdBQUFKLENBQUEsQ0FBQUssYUFBQSx1QkFBQUMsQ0FBQSxHQUFBTixDQUFBLENBQUFPLFdBQUEsOEJBQUFDLEVBQUFiLENBQUEsRUFBQUQsQ0FBQSxFQUFBSCxDQUFBLEVBQUFPLENBQUEsSUFBQUYsTUFBQSxDQUFBYSxj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QVc7WUFDakJuSyxPQUFPLEVBQUVnSyxPQUFPLENBQUNoSyxPQUFPO1lBQ3hCb0osUUFBUSxFQUFFLElBQUlILEdBQUcsQ0FBQ3FCLGNBQWMsRUFBRXBMLHNCQUFzQixDQUFDO1lBQ3pEbUssT0FBTyxFQUFFLElBQUlKLEdBQUcsQ0FBQ3VCLGFBQWEsRUFBRXRMLHNCQUFzQjtVQUN4RCxDQUFDO1VBQ0RpRyxtQkFBRSxDQUFDRSxhQUFhLENBQUNkLGdCQUFJLENBQUNDLElBQUksQ0FBQzRGLFVBQVUsRUFBRWQsK0JBQXNCLENBQUMsRUFBRWhCLFFBQVEsRUFBRTtZQUFFaEQsTUFBTSxFQUFFO1VBQUUsQ0FBQyxDQUFDO1FBQUE7VUFBQXFFLDBCQUFBO1VBQUFlLFNBQUEsQ0FBQXBQLElBQUE7VUFBQTtRQUFBO1VBQUFvUCxTQUFBLENBQUFwUCxJQUFBO1VBQUE7UUFBQTtVQUFBb1AsU0FBQSxDQUFBOU4sSUFBQTtVQUFBOE4sU0FBQSxDQUFBbkYsRUFBQSxHQUFBbUYsU0FBQTtVQUFBZCxrQkFBQTtVQUFBQyxlQUFBLEdBQUFhLFNBQUEsQ0FBQW5GLEVBQUE7UUFBQTtVQUFBbUYsU0FBQSxDQUFBOU4sSUFBQTtVQUFBOE4sU0FBQSxDQUFBOU4sSUFBQTtVQUFBLE1BQUErTSwwQkFBQSxJQUFBRyxVQUFBO1lBQUFZLFNBQUEsQ0FBQXBQLElBQUE7WUFBQTtVQUFBO1VBQUFvUCxTQUFBLENBQUFwUCxJQUFBO1VBQUEsT0FBQXdPLFVBQUE7UUFBQTtVQUFBWSxTQUFBLENBQUE5TixJQUFBO1VBQUEsS0FBQWdOLGtCQUFBO1lBQUFjLFNBQUEsQ0FBQXBQLElBQUE7WUFBQTtVQUFBO1VBQUEsTUFBQXVPLGVBQUE7UUFBQTtVQUFBLE9BQUFhLFNBQUEsQ0FBQXhOLE1BQUE7UUFBQTtVQUFBLE9BQUF3TixTQUFBLENBQUF4TixNQUFBO1FBQUE7UUFBQTtVQUFBLE9BQUF3TixTQUFBLENBQUEzTixJQUFBO01BQUE7SUFBQSxHQUFBME0sUUFBQTtFQUFBLENBRTNGO0VBQUEsT0FBQUQsbUJBQUEsQ0FBQWhNLEtBQUEsT0FBQUQsU0FBQTtBQUFBO0FBRUQ0QixXQUFXLENBQUMsQ0FBQyxDQUNWL0QsSUFBSSxDQUFDO0VBQUEsT0FBTTRQLE9BQU8sQ0FBQ0MsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUFBLEVBQUMsU0FDdEIsQ0FBQyxVQUFDQyxLQUFLLEVBQUs7RUFDaEJySCxPQUFPLENBQUNPLEdBQUcsQ0FBQzhHLEtBQUssQ0FBQztFQUNsQkYsT0FBTyxDQUFDQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ2pCLENBQUMsQ0FBQyIsImlnbm9yZUxpc3QiOltdfQ==