@tricoteuses/assemblee 1.0.7 → 1.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (134) hide show
  1. package/lib/api.js +3 -9
  2. package/lib/api.mjs +4 -5
  3. package/lib/bugs/acteur-00010/plugin.test.js +3 -50
  4. package/lib/bugs/acteur-00010/plugin.test.mjs +1 -1
  5. package/lib/bugs/acteur-00010.js +2 -57
  6. package/lib/bugs/acteur-00010.mjs +1 -6
  7. package/lib/bugs/agenda-00002/plugin.test.js +3 -53
  8. package/lib/bugs/agenda-00002/plugin.test.mjs +1 -3
  9. package/lib/bugs/agenda-00002.js +3 -148
  10. package/lib/bugs/agenda-00002.mjs +1 -28
  11. package/lib/bugs/agenda-00008/plugin.test.js +3 -52
  12. package/lib/bugs/agenda-00008/plugin.test.mjs +1 -1
  13. package/lib/bugs/agenda-00008.js +2 -61
  14. package/lib/bugs/agenda-00008.mjs +1 -5
  15. package/lib/bugs/agenda-00011/plugin.test.js +5 -99
  16. package/lib/bugs/agenda-00011/plugin.test.mjs +3 -3
  17. package/lib/bugs/agenda-00011.js +4 -105
  18. package/lib/bugs/agenda-00011.mjs +3 -29
  19. package/lib/bugs.js +3 -164
  20. package/lib/bugs.mjs +1 -26
  21. package/lib/cleaners/actes_legislatifs.js +11 -115
  22. package/lib/cleaners/actes_legislatifs.mjs +7 -82
  23. package/lib/cleaners/acteurs.js +12 -92
  24. package/lib/cleaners/acteurs.mjs +7 -38
  25. package/lib/cleaners/amendements.js +10 -103
  26. package/lib/cleaners/amendements.mjs +4 -58
  27. package/lib/cleaners/documents.js +5 -67
  28. package/lib/cleaners/documents.mjs +1 -37
  29. package/lib/cleaners/dossiers_legislatifs.js +5 -61
  30. package/lib/cleaners/dossiers_legislatifs.mjs +1 -29
  31. package/lib/cleaners/index.js +1 -9
  32. package/lib/cleaners/index.mjs +1 -1
  33. package/lib/cleaners/organes.js +1 -33
  34. package/lib/cleaners/organes.mjs +1 -17
  35. package/lib/cleaners/reunions.js +4 -119
  36. package/lib/cleaners/reunions.mjs +1 -64
  37. package/lib/cleaners/scrutins.js +10 -102
  38. package/lib/cleaners/scrutins.mjs +1 -48
  39. package/lib/cleaners/xml.js +8 -42
  40. package/lib/cleaners/xml.mjs +6 -8
  41. package/lib/datasets.js +14 -113
  42. package/lib/datasets.mjs +6 -46
  43. package/lib/dates.js +7 -37
  44. package/lib/dates.mjs +9 -14
  45. package/lib/dossiers_legislatifs.js +6 -68
  46. package/lib/dossiers_legislatifs.mjs +5 -36
  47. package/lib/file_systems.js +56 -139
  48. package/lib/file_systems.mjs +1 -9
  49. package/lib/git.js +4 -53
  50. package/lib/git.mjs +1 -12
  51. package/lib/index.js +1 -15
  52. package/lib/index.mjs +1 -1
  53. package/lib/inserters.js +23 -146
  54. package/lib/inserters.mjs +6 -87
  55. package/lib/loaders.js +44 -316
  56. package/lib/loaders.mjs +12 -135
  57. package/lib/organes.js +1 -7
  58. package/lib/organes.mjs +1 -4
  59. package/lib/parsers/documents.js +22 -151
  60. package/lib/parsers/documents.mjs +19 -81
  61. package/lib/parsers/index.js +1 -4
  62. package/lib/parsers/index.mjs +1 -1
  63. package/lib/parsers/recherche_amendements.js +302 -527
  64. package/lib/parsers/recherche_amendements.mjs +8 -31
  65. package/lib/raw_types/acteurs_et_organes.d.ts +1 -30
  66. package/lib/raw_types/acteurs_et_organes.js +5 -124
  67. package/lib/raw_types/acteurs_et_organes.mjs +5 -105
  68. package/lib/raw_types/agendas.js +6 -89
  69. package/lib/raw_types/agendas.mjs +9 -65
  70. package/lib/raw_types/amendements.d.ts +2 -0
  71. package/lib/raw_types/amendements.js +10 -90
  72. package/lib/raw_types/amendements.mjs +11 -69
  73. package/lib/raw_types/dossiers_legislatifs.js +6 -96
  74. package/lib/raw_types/dossiers_legislatifs.mjs +6 -73
  75. package/lib/raw_types/scrutins.js +6 -81
  76. package/lib/raw_types/scrutins.mjs +9 -57
  77. package/lib/scripts/bugs_helper.js +2 -181
  78. package/lib/scripts/bugs_helper.mjs +2 -39
  79. package/lib/scripts/clean_data.js +27 -143
  80. package/lib/scripts/clean_data.mjs +15 -34
  81. package/lib/scripts/clean_reorganized_data.js +76 -240
  82. package/lib/scripts/clean_reorganized_data.mjs +36 -99
  83. package/lib/scripts/diff_amendements.js +19 -79
  84. package/lib/scripts/diff_amendements.mjs +17 -35
  85. package/lib/scripts/document_dossiers_legislatifs.js +17 -142
  86. package/lib/scripts/document_dossiers_legislatifs.mjs +6 -90
  87. package/lib/scripts/get_today_reunions.js +4 -22
  88. package/lib/scripts/get_today_reunions.mjs +1 -7
  89. package/lib/scripts/merge_scrutins.js +3 -47
  90. package/lib/scripts/merge_scrutins.mjs +1 -9
  91. package/lib/scripts/parse_textes_lois.js +15 -44
  92. package/lib/scripts/parse_textes_lois.mjs +18 -19
  93. package/lib/scripts/raw_types_from_amendements.js +3 -95
  94. package/lib/scripts/raw_types_from_amendements.mjs +1 -16
  95. package/lib/scripts/reorganize_data.js +74 -294
  96. package/lib/scripts/reorganize_data.mjs +22 -133
  97. package/lib/scripts/retrieve_deputes_photos.js +6 -119
  98. package/lib/scripts/retrieve_deputes_photos.mjs +7 -33
  99. package/lib/scripts/retrieve_documents.js +4 -192
  100. package/lib/scripts/retrieve_documents.mjs +2 -50
  101. package/lib/scripts/retrieve_open_data.js +44 -116
  102. package/lib/scripts/retrieve_open_data.mjs +14 -19
  103. package/lib/scripts/retrieve_pending_amendments.js +4 -98
  104. package/lib/scripts/retrieve_pending_amendments.mjs +1 -14
  105. package/lib/scripts/retrieve_senateurs_photos.js +18 -114
  106. package/lib/scripts/retrieve_senateurs_photos.mjs +20 -48
  107. package/lib/scripts/retrieve_textes_lois.js +3 -122
  108. package/lib/scripts/retrieve_textes_lois.mjs +3 -21
  109. package/lib/scripts/test_load.js +2 -10
  110. package/lib/scripts/test_load.mjs +2 -1
  111. package/lib/scripts/test_load_big_files.js +2 -10
  112. package/lib/scripts/test_load_big_files.mjs +2 -1
  113. package/lib/scripts/validate_json.js +4 -119
  114. package/lib/scripts/validate_json.mjs +2 -36
  115. package/lib/shared_types/codes_actes.js +1 -24
  116. package/lib/shared_types/codes_actes.mjs +3 -10
  117. package/lib/strings.js +1 -5
  118. package/lib/strings.mjs +1 -1
  119. package/lib/types/acteurs_et_organes.js +9 -84
  120. package/lib/types/acteurs_et_organes.mjs +10 -63
  121. package/lib/types/agendas.js +8 -90
  122. package/lib/types/agendas.mjs +11 -66
  123. package/lib/types/amendements.d.ts +2 -0
  124. package/lib/types/amendements.js +12 -92
  125. package/lib/types/amendements.mjs +15 -70
  126. package/lib/types/dossiers_legislatifs.js +8 -96
  127. package/lib/types/dossiers_legislatifs.mjs +10 -72
  128. package/lib/types/legislatures.js +1 -3
  129. package/lib/types/legislatures.mjs +1 -2
  130. package/lib/types/scrutins.js +8 -82
  131. package/lib/types/scrutins.mjs +11 -58
  132. package/lib/urls.js +3 -27
  133. package/lib/urls.mjs +3 -21
  134. package/package.json +1 -1
@@ -1,107 +1,56 @@
1
1
  "use strict";
2
2
 
3
3
  function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
4
-
5
4
  require("core-js/modules/es.function.name.js");
6
-
7
5
  require("core-js/modules/es.array.from.js");
8
-
9
6
  require("core-js/modules/es.string.iterator.js");
10
-
11
7
  require("core-js/modules/es.symbol.js");
12
-
13
8
  require("core-js/modules/es.symbol.description.js");
14
-
15
9
  require("core-js/modules/es.symbol.iterator.js");
16
-
17
10
  require("core-js/modules/es.array.is-array.js");
18
-
19
11
  require("core-js/modules/es.promise.js");
20
-
12
+ require("core-js/modules/es.object.define-property.js");
21
13
  require("core-js/modules/es.symbol.async-iterator.js");
22
-
23
14
  require("core-js/modules/es.symbol.to-string-tag.js");
24
-
25
15
  require("core-js/modules/es.json.to-string-tag.js");
26
-
27
16
  require("core-js/modules/es.math.to-string-tag.js");
28
-
29
- require("core-js/modules/es.object.define-property.js");
30
-
31
17
  require("core-js/modules/es.object.create.js");
32
-
33
18
  require("core-js/modules/es.object.get-prototype-of.js");
34
-
35
19
  require("core-js/modules/es.array.for-each.js");
36
-
37
20
  require("core-js/modules/web.dom-collections.for-each.js");
38
-
39
21
  require("core-js/modules/es.object.set-prototype-of.js");
40
-
41
22
  require("core-js/modules/es.array.reverse.js");
42
-
43
23
  require("core-js/modules/es.regexp.exec.js");
44
-
45
24
  require("core-js/modules/es.string.match.js");
46
-
47
25
  require("core-js/modules/es.array.sort.js");
48
-
49
26
  require("core-js/modules/es.array.filter.js");
50
-
51
27
  require("core-js/modules/es.object.to-string.js");
52
-
53
28
  require("core-js/modules/es.object.values.js");
54
-
55
29
  require("core-js/modules/es.string.replace.js");
56
-
57
30
  require("core-js/modules/es.string.trim.js");
58
-
59
31
  require("core-js/modules/es.array.concat.js");
60
-
61
32
  require("core-js/modules/es.array.join.js");
62
-
63
33
  require("core-js/modules/es.array.slice.js");
64
-
65
34
  require("core-js/modules/es.array.iterator.js");
66
-
67
35
  require("core-js/modules/web.dom-collections.iterator.js");
68
-
69
36
  var _child_process = require("child_process");
70
-
71
37
  var _commandLineArgs = _interopRequireDefault(require("command-line-args"));
72
-
73
38
  var _fsExtra = _interopRequireDefault(require("fs-extra"));
74
-
75
39
  var _path = _interopRequireDefault(require("path"));
76
-
77
40
  var _datasets = require("../datasets");
78
-
79
41
  var _loaders = require("../loaders");
80
-
81
42
  var _acteurs_et_organes = require("../types/acteurs_et_organes");
82
-
83
43
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
84
-
85
- function _regeneratorRuntime() { "use strict"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return exports; }; var exports = {}, Op = Object.prototype, hasOwn = Op.hasOwnProperty, $Symbol = "function" == typeof Symbol ? Symbol : {}, iteratorSymbol = $Symbol.iterator || "@@iterator", asyncIteratorSymbol = $Symbol.asyncIterator || "@@asyncIterator", toStringTagSymbol = $Symbol.toStringTag || "@@toStringTag"; function define(obj, key, value) { return Object.defineProperty(obj, key, { value: value, enumerable: !0, configurable: !0, writable: !0 }), obj[key]; } try { define({}, ""); } catch (err) { define = function define(obj, key, value) { return obj[key] = value; }; } function wrap(innerFn, outerFn, self, tryLocsList) { var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator, generator = Object.create(protoGenerator.prototype), context = new Context(tryLocsList || []); return generator._invoke = function (innerFn, self, context) { var state = "suspendedStart"; return function (method, arg) { if ("executing" === state) throw new Error("Generator is already running"); if ("completed" === state) { if ("throw" === method) throw arg; return doneResult(); } for (context.method = method, context.arg = arg;;) { var delegate = context.delegate; if (delegate) { var delegateResult = maybeInvokeDelegate(delegate, context); if (delegateResult) { if (delegateResult === ContinueSentinel) continue; return delegateResult; } } if ("next" === context.method) context.sent = context._sent = context.arg;else if ("throw" === context.method) { if ("suspendedStart" === state) throw state = "completed", context.arg; context.dispatchException(context.arg); } else "return" === context.method && context.abrupt("return", context.arg); state = "executing"; var record = tryCatch(innerFn, self, context); if ("normal" === record.type) { if (state = context.done ? "completed" : "suspendedYield", record.arg === ContinueSentinel) continue; return { value: record.arg, done: context.done }; } "throw" === record.type && (state = "completed", context.method = "throw", context.arg = record.arg); } }; }(innerFn, self, context), generator; } function tryCatch(fn, obj, arg) { try { return { type: "normal", arg: fn.call(obj, arg) }; } catch (err) { return { type: "throw", arg: err }; } } exports.wrap = wrap; var ContinueSentinel = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var IteratorPrototype = {}; define(IteratorPrototype, iteratorSymbol, function () { return this; }); var getProto = Object.getPrototypeOf, NativeIteratorPrototype = getProto && getProto(getProto(values([]))); NativeIteratorPrototype && NativeIteratorPrototype !== Op && hasOwn.call(NativeIteratorPrototype, iteratorSymbol) && (IteratorPrototype = NativeIteratorPrototype); var Gp = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(IteratorPrototype); function defineIteratorMethods(prototype) { ["next", "throw", "return"].forEach(function (method) { define(prototype, method, function (arg) { return this._invoke(method, arg); }); }); } function AsyncIterator(generator, PromiseImpl) { function invoke(method, arg, resolve, reject) { var record = tryCatch(generator[method], generator, arg); if ("throw" !== record.type) { var result = record.arg, value = result.value; return value && "object" == _typeof(value) && hasOwn.call(value, "__await") ? PromiseImpl.resolve(value.__await).then(function (value) { invoke("next", value, resolve, reject); }, function (err) { invoke("throw", err, resolve, reject); }) : PromiseImpl.resolve(value).then(function (unwrapped) { result.value = unwrapped, resolve(result); }, function (error) { return invoke("throw", error, resolve, reject); }); } reject(record.arg); } var previousPromise; this._invoke = function (method, arg) { function callInvokeWithMethodAndArg() { return new PromiseImpl(function (resolve, reject) { invoke(method, arg, resolve, reject); }); } return previousPromise = previousPromise ? previousPromise.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); }; } function maybeInvokeDelegate(delegate, context) { var method = delegate.iterator[context.method]; if (undefined === method) { if (context.delegate = null, "throw" === context.method) { if (delegate.iterator["return"] && (context.method = "return", context.arg = undefined, maybeInvokeDelegate(delegate, context), "throw" === context.method)) return ContinueSentinel; context.method = "throw", context.arg = new TypeError("The iterator does not provide a 'throw' method"); } return ContinueSentinel; } var record = tryCatch(method, delegate.iterator, context.arg); if ("throw" === record.type) return context.method = "throw", context.arg = record.arg, context.delegate = null, ContinueSentinel; var info = record.arg; return info ? info.done ? (context[delegate.resultName] = info.value, context.next = delegate.nextLoc, "return" !== context.method && (context.method = "next", context.arg = undefined), context.delegate = null, ContinueSentinel) : info : (context.method = "throw", context.arg = new TypeError("iterator result is not an object"), context.delegate = null, ContinueSentinel); } function pushTryEntry(locs) { var entry = { tryLoc: locs[0] }; 1 in locs && (entry.catchLoc = locs[1]), 2 in locs && (entry.finallyLoc = locs[2], entry.afterLoc = locs[3]), this.tryEntries.push(entry); } function resetTryEntry(entry) { var record = entry.completion || {}; record.type = "normal", delete record.arg, entry.completion = record; } function Context(tryLocsList) { this.tryEntries = [{ tryLoc: "root" }], tryLocsList.forEach(pushTryEntry, this), this.reset(!0); } function values(iterable) { if (iterable) { var iteratorMethod = iterable[iteratorSymbol]; if (iteratorMethod) return iteratorMethod.call(iterable); if ("function" == typeof iterable.next) return iterable; if (!isNaN(iterable.length)) { var i = -1, next = function next() { for (; ++i < iterable.length;) { if (hasOwn.call(iterable, i)) return next.value = iterable[i], next.done = !1, next; } return next.value = undefined, next.done = !0, next; }; return next.next = next; } } return { next: doneResult }; } function doneResult() { return { value: undefined, done: !0 }; } return GeneratorFunction.prototype = GeneratorFunctionPrototype, define(Gp, "constructor", GeneratorFunctionPrototype), define(GeneratorFunctionPrototype, "constructor", GeneratorFunction), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, toStringTagSymbol, "GeneratorFunction"), exports.isGeneratorFunction = function (genFun) { var ctor = "function" == typeof genFun && genFun.constructor; return !!ctor && (ctor === GeneratorFunction || "GeneratorFunction" === (ctor.displayName || ctor.name)); }, exports.mark = function (genFun) { return Object.setPrototypeOf ? Object.setPrototypeOf(genFun, GeneratorFunctionPrototype) : (genFun.__proto__ = GeneratorFunctionPrototype, define(genFun, toStringTagSymbol, "GeneratorFunction")), genFun.prototype = Object.create(Gp), genFun; }, exports.awrap = function (arg) { return { __await: arg }; }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, asyncIteratorSymbol, function () { return this; }), exports.AsyncIterator = AsyncIterator, exports.async = function (innerFn, outerFn, self, tryLocsList, PromiseImpl) { void 0 === PromiseImpl && (PromiseImpl = Promise); var iter = new AsyncIterator(wrap(innerFn, outerFn, self, tryLocsList), PromiseImpl); return exports.isGeneratorFunction(outerFn) ? iter : iter.next().then(function (result) { return result.done ? result.value : iter.next(); }); }, defineIteratorMethods(Gp), define(Gp, toStringTagSymbol, "Generator"), define(Gp, iteratorSymbol, function () { return this; }), define(Gp, "toString", function () { return "[object Generator]"; }), exports.keys = function (object) { var keys = []; for (var key in object) { keys.push(key); } return keys.reverse(), function next() { for (; keys.length;) { var key = keys.pop(); if (key in object) return next.value = key, next.done = !1, next; } return next.done = !0, next; }; }, exports.values = values, Context.prototype = { constructor: Context, reset: function reset(skipTempReset) { if (this.prev = 0, this.next = 0, this.sent = this._sent = undefined, this.done = !1, this.delegate = null, this.method = "next", this.arg = undefined, this.tryEntries.forEach(resetTryEntry), !skipTempReset) for (var name in this) { "t" === name.charAt(0) && hasOwn.call(this, name) && !isNaN(+name.slice(1)) && (this[name] = undefined); } }, stop: function stop() { this.done = !0; var rootRecord = this.tryEntries[0].completion; if ("throw" === rootRecord.type) throw rootRecord.arg; return this.rval; }, dispatchException: function dispatchException(exception) { if (this.done) throw exception; var context = this; function handle(loc, caught) { return record.type = "throw", record.arg = exception, context.next = loc, caught && (context.method = "next", context.arg = undefined), !!caught; } for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i], record = entry.completion; if ("root" === entry.tryLoc) return handle("end"); if (entry.tryLoc <= this.prev) { var hasCatch = hasOwn.call(entry, "catchLoc"), hasFinally = hasOwn.call(entry, "finallyLoc"); if (hasCatch && hasFinally) { if (this.prev < entry.catchLoc) return handle(entry.catchLoc, !0); if (this.prev < entry.finallyLoc) return handle(entry.finallyLoc); } else if (hasCatch) { if (this.prev < entry.catchLoc) return handle(entry.catchLoc, !0); } else { if (!hasFinally) throw new Error("try statement without catch or finally"); if (this.prev < entry.finallyLoc) return handle(entry.finallyLoc); } } } }, abrupt: function abrupt(type, arg) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.tryLoc <= this.prev && hasOwn.call(entry, "finallyLoc") && this.prev < entry.finallyLoc) { var finallyEntry = entry; break; } } finallyEntry && ("break" === type || "continue" === type) && finallyEntry.tryLoc <= arg && arg <= finallyEntry.finallyLoc && (finallyEntry = null); var record = finallyEntry ? finallyEntry.completion : {}; return record.type = type, record.arg = arg, finallyEntry ? (this.method = "next", this.next = finallyEntry.finallyLoc, ContinueSentinel) : this.complete(record); }, complete: function complete(record, afterLoc) { if ("throw" === record.type) throw record.arg; return "break" === record.type || "continue" === record.type ? this.next = record.arg : "return" === record.type ? (this.rval = this.arg = record.arg, this.method = "return", this.next = "end") : "normal" === record.type && afterLoc && (this.next = afterLoc), ContinueSentinel; }, finish: function finish(finallyLoc) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.finallyLoc === finallyLoc) return this.complete(entry.completion, entry.afterLoc), resetTryEntry(entry), ContinueSentinel; } }, "catch": function _catch(tryLoc) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.tryLoc === tryLoc) { var record = entry.completion; if ("throw" === record.type) { var thrown = record.arg; resetTryEntry(entry); } return thrown; } } throw new Error("illegal catch attempt"); }, delegateYield: function delegateYield(iterable, resultName, nextLoc) { return this.delegate = { iterator: values(iterable), resultName: resultName, nextLoc: nextLoc }, "next" === this.method && (this.arg = undefined), ContinueSentinel; } }, exports; }
86
-
44
+ function _regeneratorRuntime() { "use strict"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return exports; }; var exports = {}, Op = Object.prototype, hasOwn = Op.hasOwnProperty, defineProperty = Object.defineProperty || function (obj, key, desc) { obj[key] = desc.value; }, $Symbol = "function" == typeof Symbol ? Symbol : {}, iteratorSymbol = $Symbol.iterator || "@@iterator", asyncIteratorSymbol = $Symbol.asyncIterator || "@@asyncIterator", toStringTagSymbol = $Symbol.toStringTag || "@@toStringTag"; function define(obj, key, value) { return Object.defineProperty(obj, key, { value: value, enumerable: !0, configurable: !0, writable: !0 }), obj[key]; } try { define({}, ""); } catch (err) { define = function define(obj, key, value) { return obj[key] = value; }; } function wrap(innerFn, outerFn, self, tryLocsList) { var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator, generator = Object.create(protoGenerator.prototype), context = new Context(tryLocsList || []); return defineProperty(generator, "_invoke", { value: makeInvokeMethod(innerFn, self, context) }), generator; } function tryCatch(fn, obj, arg) { try { return { type: "normal", arg: fn.call(obj, arg) }; } catch (err) { return { type: "throw", arg: err }; } } exports.wrap = wrap; var ContinueSentinel = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var IteratorPrototype = {}; define(IteratorPrototype, iteratorSymbol, function () { return this; }); var getProto = Object.getPrototypeOf, NativeIteratorPrototype = getProto && getProto(getProto(values([]))); NativeIteratorPrototype && NativeIteratorPrototype !== Op && hasOwn.call(NativeIteratorPrototype, iteratorSymbol) && (IteratorPrototype = NativeIteratorPrototype); var Gp = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(IteratorPrototype); function defineIteratorMethods(prototype) { ["next", "throw", "return"].forEach(function (method) { define(prototype, method, function (arg) { return this._invoke(method, arg); }); }); } function AsyncIterator(generator, PromiseImpl) { function invoke(method, arg, resolve, reject) { var record = tryCatch(generator[method], generator, arg); if ("throw" !== record.type) { var result = record.arg, value = result.value; return value && "object" == _typeof(value) && hasOwn.call(value, "__await") ? PromiseImpl.resolve(value.__await).then(function (value) { invoke("next", value, resolve, reject); }, function (err) { invoke("throw", err, resolve, reject); }) : PromiseImpl.resolve(value).then(function (unwrapped) { result.value = unwrapped, resolve(result); }, function (error) { return invoke("throw", error, resolve, reject); }); } reject(record.arg); } var previousPromise; defineProperty(this, "_invoke", { value: function value(method, arg) { function callInvokeWithMethodAndArg() { return new PromiseImpl(function (resolve, reject) { invoke(method, arg, resolve, reject); }); } return previousPromise = previousPromise ? previousPromise.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); } }); } function makeInvokeMethod(innerFn, self, context) { var state = "suspendedStart"; return function (method, arg) { if ("executing" === state) throw new Error("Generator is already running"); if ("completed" === state) { if ("throw" === method) throw arg; return doneResult(); } for (context.method = method, context.arg = arg;;) { var delegate = context.delegate; if (delegate) { var delegateResult = maybeInvokeDelegate(delegate, context); if (delegateResult) { if (delegateResult === ContinueSentinel) continue; return delegateResult; } } if ("next" === context.method) context.sent = context._sent = context.arg;else if ("throw" === context.method) { if ("suspendedStart" === state) throw state = "completed", context.arg; context.dispatchException(context.arg); } else "return" === context.method && context.abrupt("return", context.arg); state = "executing"; var record = tryCatch(innerFn, self, context); if ("normal" === record.type) { if (state = context.done ? "completed" : "suspendedYield", record.arg === ContinueSentinel) continue; return { value: record.arg, done: context.done }; } "throw" === record.type && (state = "completed", context.method = "throw", context.arg = record.arg); } }; } function maybeInvokeDelegate(delegate, context) { var method = delegate.iterator[context.method]; if (undefined === method) { if (context.delegate = null, "throw" === context.method) { if (delegate.iterator["return"] && (context.method = "return", context.arg = undefined, maybeInvokeDelegate(delegate, context), "throw" === context.method)) return ContinueSentinel; context.method = "throw", context.arg = new TypeError("The iterator does not provide a 'throw' method"); } return ContinueSentinel; } var record = tryCatch(method, delegate.iterator, context.arg); if ("throw" === record.type) return context.method = "throw", context.arg = record.arg, context.delegate = null, ContinueSentinel; var info = record.arg; return info ? info.done ? (context[delegate.resultName] = info.value, context.next = delegate.nextLoc, "return" !== context.method && (context.method = "next", context.arg = undefined), context.delegate = null, ContinueSentinel) : info : (context.method = "throw", context.arg = new TypeError("iterator result is not an object"), context.delegate = null, ContinueSentinel); } function pushTryEntry(locs) { var entry = { tryLoc: locs[0] }; 1 in locs && (entry.catchLoc = locs[1]), 2 in locs && (entry.finallyLoc = locs[2], entry.afterLoc = locs[3]), this.tryEntries.push(entry); } function resetTryEntry(entry) { var record = entry.completion || {}; record.type = "normal", delete record.arg, entry.completion = record; } function Context(tryLocsList) { this.tryEntries = [{ tryLoc: "root" }], tryLocsList.forEach(pushTryEntry, this), this.reset(!0); } function values(iterable) { if (iterable) { var iteratorMethod = iterable[iteratorSymbol]; if (iteratorMethod) return iteratorMethod.call(iterable); if ("function" == typeof iterable.next) return iterable; if (!isNaN(iterable.length)) { var i = -1, next = function next() { for (; ++i < iterable.length;) { if (hasOwn.call(iterable, i)) return next.value = iterable[i], next.done = !1, next; } return next.value = undefined, next.done = !0, next; }; return next.next = next; } } return { next: doneResult }; } function doneResult() { return { value: undefined, done: !0 }; } return GeneratorFunction.prototype = GeneratorFunctionPrototype, defineProperty(Gp, "constructor", { value: GeneratorFunctionPrototype, configurable: !0 }), defineProperty(GeneratorFunctionPrototype, "constructor", { value: GeneratorFunction, configurable: !0 }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, toStringTagSymbol, "GeneratorFunction"), exports.isGeneratorFunction = function (genFun) { var ctor = "function" == typeof genFun && genFun.constructor; return !!ctor && (ctor === GeneratorFunction || "GeneratorFunction" === (ctor.displayName || ctor.name)); }, exports.mark = function (genFun) { return Object.setPrototypeOf ? Object.setPrototypeOf(genFun, GeneratorFunctionPrototype) : (genFun.__proto__ = GeneratorFunctionPrototype, define(genFun, toStringTagSymbol, "GeneratorFunction")), genFun.prototype = Object.create(Gp), genFun; }, exports.awrap = function (arg) { return { __await: arg }; }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, asyncIteratorSymbol, function () { return this; }), exports.AsyncIterator = AsyncIterator, exports.async = function (innerFn, outerFn, self, tryLocsList, PromiseImpl) { void 0 === PromiseImpl && (PromiseImpl = Promise); var iter = new AsyncIterator(wrap(innerFn, outerFn, self, tryLocsList), PromiseImpl); return exports.isGeneratorFunction(outerFn) ? iter : iter.next().then(function (result) { return result.done ? result.value : iter.next(); }); }, defineIteratorMethods(Gp), define(Gp, toStringTagSymbol, "Generator"), define(Gp, iteratorSymbol, function () { return this; }), define(Gp, "toString", function () { return "[object Generator]"; }), exports.keys = function (val) { var object = Object(val), keys = []; for (var key in object) { keys.push(key); } return keys.reverse(), function next() { for (; keys.length;) { var key = keys.pop(); if (key in object) return next.value = key, next.done = !1, next; } return next.done = !0, next; }; }, exports.values = values, Context.prototype = { constructor: Context, reset: function reset(skipTempReset) { if (this.prev = 0, this.next = 0, this.sent = this._sent = undefined, this.done = !1, this.delegate = null, this.method = "next", this.arg = undefined, this.tryEntries.forEach(resetTryEntry), !skipTempReset) for (var name in this) { "t" === name.charAt(0) && hasOwn.call(this, name) && !isNaN(+name.slice(1)) && (this[name] = undefined); } }, stop: function stop() { this.done = !0; var rootRecord = this.tryEntries[0].completion; if ("throw" === rootRecord.type) throw rootRecord.arg; return this.rval; }, dispatchException: function dispatchException(exception) { if (this.done) throw exception; var context = this; function handle(loc, caught) { return record.type = "throw", record.arg = exception, context.next = loc, caught && (context.method = "next", context.arg = undefined), !!caught; } for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i], record = entry.completion; if ("root" === entry.tryLoc) return handle("end"); if (entry.tryLoc <= this.prev) { var hasCatch = hasOwn.call(entry, "catchLoc"), hasFinally = hasOwn.call(entry, "finallyLoc"); if (hasCatch && hasFinally) { if (this.prev < entry.catchLoc) return handle(entry.catchLoc, !0); if (this.prev < entry.finallyLoc) return handle(entry.finallyLoc); } else if (hasCatch) { if (this.prev < entry.catchLoc) return handle(entry.catchLoc, !0); } else { if (!hasFinally) throw new Error("try statement without catch or finally"); if (this.prev < entry.finallyLoc) return handle(entry.finallyLoc); } } } }, abrupt: function abrupt(type, arg) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.tryLoc <= this.prev && hasOwn.call(entry, "finallyLoc") && this.prev < entry.finallyLoc) { var finallyEntry = entry; break; } } finallyEntry && ("break" === type || "continue" === type) && finallyEntry.tryLoc <= arg && arg <= finallyEntry.finallyLoc && (finallyEntry = null); var record = finallyEntry ? finallyEntry.completion : {}; return record.type = type, record.arg = arg, finallyEntry ? (this.method = "next", this.next = finallyEntry.finallyLoc, ContinueSentinel) : this.complete(record); }, complete: function complete(record, afterLoc) { if ("throw" === record.type) throw record.arg; return "break" === record.type || "continue" === record.type ? this.next = record.arg : "return" === record.type ? (this.rval = this.arg = record.arg, this.method = "return", this.next = "end") : "normal" === record.type && afterLoc && (this.next = afterLoc), ContinueSentinel; }, finish: function finish(finallyLoc) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.finallyLoc === finallyLoc) return this.complete(entry.completion, entry.afterLoc), resetTryEntry(entry), ContinueSentinel; } }, "catch": function _catch(tryLoc) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.tryLoc === tryLoc) { var record = entry.completion; if ("throw" === record.type) { var thrown = record.arg; resetTryEntry(entry); } return thrown; } } throw new Error("illegal catch attempt"); }, delegateYield: function delegateYield(iterable, resultName, nextLoc) { return this.delegate = { iterator: values(iterable), resultName: resultName, nextLoc: nextLoc }, "next" === this.method && (this.arg = undefined), ContinueSentinel; } }, exports; }
87
45
  function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
88
-
89
46
  function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
90
-
91
47
  function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
92
-
93
48
  function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
94
-
95
49
  function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
96
-
97
50
  function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
98
-
99
51
  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(_e2) { throw _e2; }, 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(_e3) { didErr = true; err = _e3; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
100
-
101
52
  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); }
102
-
103
53
  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; }
104
-
105
54
  var optionsDefinitions = [{
106
55
  alias: "C",
107
56
  help: "clone repositories from given group (or organization) git URL",
@@ -134,11 +83,11 @@ var optionsDefinitions = [{
134
83
  name: "dataDir",
135
84
  type: String
136
85
  }];
137
- var options = (0, _commandLineArgs["default"])(optionsDefinitions); // const pipeline = util.promisify(stream.pipeline)
86
+ var options = (0, _commandLineArgs["default"])(optionsDefinitions);
87
+ // const pipeline = util.promisify(stream.pipeline)
138
88
 
139
89
  function commitAndPush(repositoryDir, commit, remotes) {
140
90
  var error = false;
141
-
142
91
  if (commit) {
143
92
  (0, _child_process.execSync)("git add .", {
144
93
  cwd: repositoryDir,
@@ -146,7 +95,6 @@ function commitAndPush(repositoryDir, commit, remotes) {
146
95
  encoding: "utf-8",
147
96
  stdio: ["ignore", "ignore", "pipe"]
148
97
  });
149
-
150
98
  try {
151
99
  (0, _child_process.execSync)('git commit -m "Nouvelle moisson"', {
152
100
  cwd: repositoryDir,
@@ -159,14 +107,11 @@ function commitAndPush(repositoryDir, commit, remotes) {
159
107
  throw childProcess;
160
108
  }
161
109
  }
162
-
163
110
  var _iterator = _createForOfIteratorHelper(remotes || []),
164
- _step;
165
-
111
+ _step;
166
112
  try {
167
113
  for (_iterator.s(); !(_step = _iterator.n()).done;) {
168
114
  var remote = _step.value;
169
-
170
115
  try {
171
116
  (0, _child_process.execSync)("git push ".concat(remote, " master"), {
172
117
  cwd: repositoryDir,
@@ -186,18 +131,14 @@ function commitAndPush(repositoryDir, commit, remotes) {
186
131
  _iterator.f();
187
132
  }
188
133
  }
189
-
190
134
  return error;
191
135
  }
192
-
193
136
  function retrievePhotosSenateurs() {
194
137
  return _retrievePhotosSenateurs.apply(this, arguments);
195
138
  }
196
-
197
139
  function _retrievePhotosSenateurs() {
198
140
  _retrievePhotosSenateurs = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee() {
199
141
  var dataDir, _loadAssembleeData, acteurByUid, senateurs, gitGroupUrl, photosDirName, photosDir, missingPhotoFilePath, _iterator4, _step4, senateur, ident, senateurStem, photoFilename, photoFilePath, photoTempFilename, photoTempFilePath, urlPhoto, _iterator5, _step5, _senateur2, _ident, _senateurStem2, photoByIdSenateur, rowsFilenames, senateurIndex, rowIndex, row, photosFilenames, _iterator6, _step6, _step6$value, columnIndex, _senateur, _senateurStem, _photoFilename, rowFilename, _i2, _rowsFilenames, _rowFilename, jsonFilePath;
200
-
201
142
  return _regeneratorRuntime().wrap(function _callee$(_context) {
202
143
  while (1) {
203
144
  switch (_context.prev = _context.next) {
@@ -206,35 +147,27 @@ function _retrievePhotosSenateurs() {
206
147
  _loadAssembleeData = (0, _loaders.loadAssembleeData)(dataDir, _datasets.EnabledDatasets.ActeursEtOrganes, options.legislature), acteurByUid = _loadAssembleeData.acteurByUid;
207
148
  senateurs = Object.values(acteurByUid).filter(function (acteur) {
208
149
  var mandats = acteur.mandats;
209
-
210
150
  if (!mandats) {
211
151
  return false;
212
152
  }
213
-
214
153
  var mandatSenateur = mandats.filter(function (mandat) {
215
- return mandat.xsiType === _acteurs_et_organes.TypeMandat.MandatParlementaireType && // mandat.legislature === options.legislature &&
154
+ return mandat.xsiType === _acteurs_et_organes.TypeMandat.MandatParlementaireType &&
155
+ // mandat.legislature === options.legislature &&
216
156
  mandat.typeOrgane === _acteurs_et_organes.CodeTypeOrgane.Senat;
217
157
  })[0];
218
-
219
158
  if (mandatSenateur === undefined) {
220
159
  return false;
221
160
  }
222
-
223
161
  var adresses = acteur.adresses;
224
-
225
162
  if (adresses === undefined) {
226
163
  return false;
227
164
  }
228
-
229
165
  var url = null;
230
-
231
166
  var _iterator3 = _createForOfIteratorHelper(adresses),
232
- _step3;
233
-
167
+ _step3;
234
168
  try {
235
169
  for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
236
170
  var adresse = _step3.value;
237
-
238
171
  if (adresse.xsiType === "AdresseSiteWeb_Type" && adresse.typeLibelle === "Url sénateur") {
239
172
  url = adresse.valElec;
240
173
  }
@@ -244,14 +177,12 @@ function _retrievePhotosSenateurs() {
244
177
  } finally {
245
178
  _iterator3.f();
246
179
  }
247
-
248
180
  return Boolean(url);
249
181
  }).sort(function (a, b) {
250
182
  return a.uid.length === b.uid.length ? a.uid.localeCompare(b.uid) : a.uid.length - b.uid.length;
251
183
  });
252
184
  gitGroupUrl = options.clone ? options.clone.trim().replace(/\/+$/, "") : undefined;
253
185
  photosDirName = "photos_senateurs";
254
-
255
186
  if (gitGroupUrl !== undefined) {
256
187
  (0, _child_process.execSync)("git clone ".concat(gitGroupUrl, "/").concat(photosDirName, ".git"), {
257
188
  cwd: dataDir,
@@ -260,15 +191,11 @@ function _retrievePhotosSenateurs() {
260
191
  stdio: ["ignore", "ignore", "pipe"]
261
192
  });
262
193
  }
263
-
264
194
  photosDir = _path["default"].join(dataDir, photosDirName); // Download photos.
265
-
266
195
  _fsExtra["default"].ensureDirSync(photosDir);
267
-
268
196
  if (options.fetch) {
269
197
  missingPhotoFilePath = "images/transparent_155x225.jpg";
270
198
  _iterator4 = _createForOfIteratorHelper(senateurs);
271
-
272
199
  try {
273
200
  for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {
274
201
  senateur = _step4.value;
@@ -279,10 +206,10 @@ function _retrievePhotosSenateurs() {
279
206
  photoTempFilename = "".concat(senateurStem, "_temp.jpg");
280
207
  photoTempFilePath = _path["default"].join(photosDir, photoTempFilename);
281
208
  urlPhoto = "https://www.senat.fr/senimg/".concat(photoFilename);
282
-
283
209
  if (!options.silent) {
284
210
  console.log("Loading photo ".concat(urlPhoto, " for ").concat(ident.prenom, " ").concat(ident.nom, "\u2026"));
285
- } // for (let retries = 0; retries < 3; retries++) {
211
+ }
212
+ // for (let retries = 0; retries < 3; retries++) {
286
213
  // const response = await fetch(urlPhoto)
287
214
  // if (response.ok) {
288
215
  // await pipeline(response.body, fs.createWriteStream(photoTempFilePath))
@@ -302,25 +229,21 @@ function _retrievePhotosSenateurs() {
302
229
  // break
303
230
  // }
304
231
  // }
305
-
306
-
307
232
  try {
308
233
  (0, _child_process.execSync)("wget --quiet -O ".concat(photoTempFilename, " ").concat(urlPhoto), {
309
234
  cwd: photosDir,
310
235
  env: process.env,
311
- encoding: "utf-8" // stdio: ["ignore", "ignore", "pipe"],
312
-
236
+ encoding: "utf-8"
237
+ // stdio: ["ignore", "ignore", "pipe"],
313
238
  });
314
239
 
315
240
  _fsExtra["default"].renameSync(photoTempFilePath, photoFilePath);
316
241
  } catch (error) {
317
242
  console.error(error);
318
-
319
243
  if (_fsExtra["default"].existsSync(photoFilePath)) {
320
244
  console.warn(" => Reusing existing image");
321
245
  } else {
322
246
  console.warn(" => Using blank image");
323
-
324
247
  _fsExtra["default"].copyFileSync(missingPhotoFilePath, photoFilePath);
325
248
  }
326
249
  }
@@ -330,40 +253,35 @@ function _retrievePhotosSenateurs() {
330
253
  } finally {
331
254
  _iterator4.f();
332
255
  }
333
- } // Resize photos to 155x225, because some haven't exactly this size.
334
-
256
+ }
335
257
 
258
+ // Resize photos to 155x225, because some haven't exactly this size.
336
259
  _iterator5 = _createForOfIteratorHelper(senateurs);
337
-
338
260
  try {
339
261
  for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {
340
262
  _senateur2 = _step5.value;
341
263
  _ident = _senateur2.etatCivil.ident;
342
264
  _senateurStem2 = stemFromSenateur(_senateur2);
343
-
344
265
  if (!options.silent) {
345
266
  console.log("Resizing photo ".concat(_senateurStem2, " for ").concat(_ident.prenom, " ").concat(_ident.nom, "\u2026"));
346
267
  }
347
-
348
268
  (0, _child_process.execSync)("gm convert -resize 155x225! ".concat(_senateurStem2, ".jpg ").concat(_senateurStem2, "_155x225.jpg"), {
349
269
  cwd: photosDir
350
270
  });
351
- } // Create a mosaic of photos.
271
+ }
352
272
 
273
+ // Create a mosaic of photos.
353
274
  } catch (err) {
354
275
  _iterator5.e(err);
355
276
  } finally {
356
277
  _iterator5.f();
357
278
  }
358
-
359
279
  photoByIdSenateur = {};
360
280
  rowsFilenames = [];
361
-
362
281
  for (senateurIndex = 0, rowIndex = 0; senateurIndex < senateurs.length; senateurIndex += 25, rowIndex++) {
363
282
  row = senateurs.slice(senateurIndex, senateurIndex + 25);
364
283
  photosFilenames = [];
365
284
  _iterator6 = _createForOfIteratorHelper(row.entries());
366
-
367
285
  try {
368
286
  for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) {
369
287
  _step6$value = _slicedToArray(_step6.value, 2), columnIndex = _step6$value[0], _senateur = _step6$value[1];
@@ -384,30 +302,22 @@ function _retrievePhotosSenateurs() {
384
302
  } finally {
385
303
  _iterator6.f();
386
304
  }
387
-
388
305
  rowFilename = "row-".concat(rowIndex, ".jpg");
389
306
  (0, _child_process.execSync)("gm convert ".concat(photosFilenames.join(" "), " +append ").concat(rowFilename), {
390
307
  cwd: photosDir
391
308
  });
392
309
  rowsFilenames.push(rowFilename);
393
310
  }
394
-
395
311
  (0, _child_process.execSync)("gm convert ".concat(rowsFilenames.join(" "), " -append senateurs.jpg"), {
396
312
  cwd: photosDir
397
313
  });
398
-
399
314
  for (_i2 = 0, _rowsFilenames = rowsFilenames; _i2 < _rowsFilenames.length; _i2++) {
400
315
  _rowFilename = _rowsFilenames[_i2];
401
-
402
316
  _fsExtra["default"].unlinkSync(_path["default"].join(photosDir, _rowFilename));
403
317
  }
404
-
405
318
  jsonFilePath = _path["default"].join(photosDir, "senateurs.json");
406
-
407
319
  _fsExtra["default"].writeFileSync(jsonFilePath, JSON.stringify(photoByIdSenateur, null, 2));
408
-
409
320
  return _context.abrupt("return", commitAndPush(photosDir, options.commit, options.remote));
410
-
411
321
  case 19:
412
322
  case "end":
413
323
  return _context.stop();
@@ -417,18 +327,14 @@ function _retrievePhotosSenateurs() {
417
327
  }));
418
328
  return _retrievePhotosSenateurs.apply(this, arguments);
419
329
  }
420
-
421
330
  function stemFromSenateur(senateur) {
422
331
  var adresses = senateur.adresses;
423
332
  var url = null;
424
-
425
333
  var _iterator2 = _createForOfIteratorHelper(adresses),
426
- _step2;
427
-
334
+ _step2;
428
335
  try {
429
336
  for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
430
337
  var adresse = _step2.value;
431
-
432
338
  if (adresse.xsiType === "AdresseSiteWeb_Type" && adresse.typeLibelle === "Url sénateur") {
433
339
  url = adresse.valElec;
434
340
  }
@@ -438,16 +344,14 @@ function stemFromSenateur(senateur) {
438
344
  } finally {
439
345
  _iterator2.f();
440
346
  }
441
-
442
347
  var match = url.match(/^https:\/\/www\.senat\.fr\/senateur\/(.*)\.html$/);
443
348
  var senateurStem = match[1];
444
349
  return senateurStem;
445
350
  }
446
-
447
351
  retrievePhotosSenateurs().then(function (error) {
448
352
  return process.exit(error ? 1 : 0);
449
353
  })["catch"](function (error) {
450
354
  console.log(error);
451
355
  process.exit(2);
452
356
  });
453
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJvcHRpb25zRGVmaW5pdGlvbnMiLCJhbGlhcyIsImhlbHAiLCJuYW1lIiwidHlwZSIsIlN0cmluZyIsIkJvb2xlYW4iLCJtdWx0aXBsZSIsImRlZmF1bHRPcHRpb24iLCJvcHRpb25zIiwiY29tbWFuZExpbmVBcmdzIiwiY29tbWl0QW5kUHVzaCIsInJlcG9zaXRvcnlEaXIiLCJjb21taXQiLCJyZW1vdGVzIiwiZXJyb3IiLCJleGVjU3luYyIsImN3ZCIsImVudiIsInByb2Nlc3MiLCJlbmNvZGluZyIsInN0ZGlvIiwiY2hpbGRQcm9jZXNzIiwic3RkZXJyIiwidGVzdCIsInN0ZG91dCIsImNvbnNvbGUiLCJvdXRwdXQiLCJyZW1vdGUiLCJyZXRyaWV2ZVBob3Rvc1NlbmF0ZXVycyIsImRhdGFEaXIiLCJsb2FkQXNzZW1ibGVlRGF0YSIsIkVuYWJsZWREYXRhc2V0cyIsIkFjdGV1cnNFdE9yZ2FuZXMiLCJsZWdpc2xhdHVyZSIsImFjdGV1ckJ5VWlkIiwic2VuYXRldXJzIiwiT2JqZWN0IiwidmFsdWVzIiwiZmlsdGVyIiwiYWN0ZXVyIiwibWFuZGF0cyIsIm1hbmRhdFNlbmF0ZXVyIiwibWFuZGF0IiwieHNpVHlwZSIsIlR5cGVNYW5kYXQiLCJNYW5kYXRQYXJsZW1lbnRhaXJlVHlwZSIsInR5cGVPcmdhbmUiLCJDb2RlVHlwZU9yZ2FuZSIsIlNlbmF0IiwidW5kZWZpbmVkIiwiYWRyZXNzZXMiLCJ1cmwiLCJhZHJlc3NlIiwidHlwZUxpYmVsbGUiLCJ2YWxFbGVjIiwic29ydCIsImEiLCJiIiwidWlkIiwibGVuZ3RoIiwibG9jYWxlQ29tcGFyZSIsImdpdEdyb3VwVXJsIiwiY2xvbmUiLCJ0cmltIiwicmVwbGFjZSIsInBob3Rvc0Rpck5hbWUiLCJwaG90b3NEaXIiLCJwYXRoIiwiam9pbiIsImZzIiwiZW5zdXJlRGlyU3luYyIsImZldGNoIiwibWlzc2luZ1Bob3RvRmlsZVBhdGgiLCJzZW5hdGV1ciIsImlkZW50IiwiZXRhdENpdmlsIiwic2VuYXRldXJTdGVtIiwic3RlbUZyb21TZW5hdGV1ciIsInBob3RvRmlsZW5hbWUiLCJwaG90b0ZpbGVQYXRoIiwicGhvdG9UZW1wRmlsZW5hbWUiLCJwaG90b1RlbXBGaWxlUGF0aCIsInVybFBob3RvIiwic2lsZW50IiwibG9nIiwicHJlbm9tIiwibm9tIiwicmVuYW1lU3luYyIsImV4aXN0c1N5bmMiLCJ3YXJuIiwiY29weUZpbGVTeW5jIiwicGhvdG9CeUlkU2VuYXRldXIiLCJyb3dzRmlsZW5hbWVzIiwic2VuYXRldXJJbmRleCIsInJvd0luZGV4Iiwicm93Iiwic2xpY2UiLCJwaG90b3NGaWxlbmFtZXMiLCJlbnRyaWVzIiwiY29sdW1uSW5kZXgiLCJwdXNoIiwiY2hlbWluIiwiY2hlbWluTW9zYWlxdWUiLCJoYXV0ZXVyIiwibGFyZ2V1ciIsInhNb3NhaXF1ZSIsInlNb3NhaXF1ZSIsInJvd0ZpbGVuYW1lIiwidW5saW5rU3luYyIsImpzb25GaWxlUGF0aCIsIndyaXRlRmlsZVN5bmMiLCJKU09OIiwic3RyaW5naWZ5IiwibWF0Y2giLCJ0aGVuIiwiZXhpdCJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zY3JpcHRzL3JldHJpZXZlX3NlbmF0ZXVyc19waG90b3MudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hpbGRQcm9jZXNzLCBleGVjU3luYyB9IGZyb20gXCJjaGlsZF9wcm9jZXNzXCJcbmltcG9ydCBjb21tYW5kTGluZUFyZ3MgZnJvbSBcImNvbW1hbmQtbGluZS1hcmdzXCJcbmltcG9ydCBmcyBmcm9tIFwiZnMtZXh0cmFcIlxuLy8gaW1wb3J0IGZldGNoIGZyb20gXCJub2RlLWZldGNoXCJcbmltcG9ydCBwYXRoIGZyb20gXCJwYXRoXCJcbi8vIGltcG9ydCBzdHJlYW0gZnJvbSBcInN0cmVhbVwiXG4vLyBpbXBvcnQgdXRpbCBmcm9tIFwidXRpbFwiXG5cbmltcG9ydCB7IEVuYWJsZWREYXRhc2V0cyB9IGZyb20gXCIuLi9kYXRhc2V0c1wiXG5pbXBvcnQgeyBsb2FkQXNzZW1ibGVlRGF0YSB9IGZyb20gXCIuLi9sb2FkZXJzXCJcbmltcG9ydCB7XG4gIEFjdGV1cixcbiAgQ29kZVR5cGVPcmdhbmUsXG4gIE1hbmRhdCxcbiAgUGhvdG8sXG4gIFR5cGVNYW5kYXQsXG59IGZyb20gXCIuLi90eXBlcy9hY3RldXJzX2V0X29yZ2FuZXNcIlxuXG5jb25zdCBvcHRpb25zRGVmaW5pdGlvbnMgPSBbXG4gIHtcbiAgICBhbGlhczogXCJDXCIsXG4gICAgaGVscDogXCJjbG9uZSByZXBvc2l0b3JpZXMgZnJvbSBnaXZlbiBncm91cCAob3Igb3JnYW5pemF0aW9uKSBnaXQgVVJMXCIsXG4gICAgbmFtZTogXCJjbG9uZVwiLFxuICAgIHR5cGU6IFN0cmluZyxcbiAgfSxcbiAge1xuICAgIGFsaWFzOiBcImNcIixcbiAgICBoZWxwOiBcImNvbW1pdCBwaG90b3NcIixcbiAgICBuYW1lOiBcImNvbW1pdFwiLFxuICAgIHR5cGU6IEJvb2xlYW4sXG4gIH0sXG4gIHtcbiAgICBhbGlhczogXCJmXCIsXG4gICAgaGVscDogXCJmZXRjaCBzw6luYXRldXJzJyBwaWN0dXJlcyBpbnN0ZWFkIG9mIHJldHJpZXZpbmcgdGhlbSBmcm9tIGZpbGVzXCIsXG4gICAgbmFtZTogXCJmZXRjaFwiLFxuICAgIHR5cGU6IEJvb2xlYW4sXG4gIH0sXG4gIHtcbiAgICBhbGlhczogXCJyXCIsXG4gICAgaGVscDogXCJwdXNoIGNvbW1pdCB0byBnaXZlbiByZW1vdGVcIixcbiAgICBtdWx0aXBsZTogdHJ1ZSxcbiAgICBuYW1lOiBcInJlbW90ZVwiLFxuICAgIHR5cGU6IFN0cmluZyxcbiAgfSxcbiAge1xuICAgIGFsaWFzOiBcInNcIixcbiAgICBoZWxwOiBcImRvbid0IGxvZyBhbnl0aGluZ1wiLFxuICAgIG5hbWU6IFwic2lsZW50XCIsXG4gICAgdHlwZTogQm9vbGVhbixcbiAgfSxcbiAge1xuICAgIGRlZmF1bHRPcHRpb246IHRydWUsXG4gICAgaGVscDogXCJkaXJlY3RvcnkgY29udGFpbmluZyBBc3NlbWJsw6llIG9wZW4gZGF0YSBmaWxlc1wiLFxuICAgIG5hbWU6IFwiZGF0YURpclwiLFxuICAgIHR5cGU6IFN0cmluZyxcbiAgfSxcbl1cbmNvbnN0IG9wdGlvbnMgPSBjb21tYW5kTGluZUFyZ3Mob3B0aW9uc0RlZmluaXRpb25zKVxuLy8gY29uc3QgcGlwZWxpbmUgPSB1dGlsLnByb21pc2lmeShzdHJlYW0ucGlwZWxpbmUpXG5cbmZ1bmN0aW9uIGNvbW1pdEFuZFB1c2goXG4gIHJlcG9zaXRvcnlEaXI6IHN0cmluZyxcbiAgY29tbWl0OiBib29sZWFuLFxuICByZW1vdGVzPzogc3RyaW5nW10sXG4pOiBib29sZWFuIHtcbiAgbGV0IGVycm9yID0gZmFsc2VcbiAgaWYgKGNvbW1pdCkge1xuICAgIGV4ZWNTeW5jKFwiZ2l0IGFkZCAuXCIsIHtcbiAgICAgIGN3ZDogcmVwb3NpdG9yeURpcixcbiAgICAgIGVudjogcHJvY2Vzcy5lbnYsXG4gICAgICBlbmNvZGluZzogXCJ1dGYtOFwiLFxuICAgICAgc3RkaW86IFtcImlnbm9yZVwiLCBcImlnbm9yZVwiLCBcInBpcGVcIl0sXG4gICAgfSlcbiAgICB0cnkge1xuICAgICAgZXhlY1N5bmMoJ2dpdCBjb21taXQgLW0gXCJOb3V2ZWxsZSBtb2lzc29uXCInLCB7XG4gICAgICAgIGN3ZDogcmVwb3NpdG9yeURpcixcbiAgICAgICAgZW52OiBwcm9jZXNzLmVudixcbiAgICAgICAgZW5jb2Rpbmc6IFwidXRmLThcIixcbiAgICAgIH0pXG4gICAgfSBjYXRjaCAoY2hpbGRQcm9jZXNzKSB7XG4gICAgICBpZiAoXG4gICAgICAgIChjaGlsZFByb2Nlc3MgYXMgQ2hpbGRQcm9jZXNzKS5zdGRlcnIgPT09IG51bGwgfHxcbiAgICAgICAgIS9ub3RoaW5nIHRvIGNvbW1pdC8udGVzdCgoY2hpbGRQcm9jZXNzIGFzIGFueSkuc3Rkb3V0KVxuICAgICAgKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoKGNoaWxkUHJvY2VzcyBhcyBhbnkpLm91dHB1dClcbiAgICAgICAgdGhyb3cgY2hpbGRQcm9jZXNzXG4gICAgICB9XG4gICAgfVxuICAgIGZvciAoY29uc3QgcmVtb3RlIG9mIHJlbW90ZXMgfHwgW10pIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGV4ZWNTeW5jKGBnaXQgcHVzaCAke3JlbW90ZX0gbWFzdGVyYCwge1xuICAgICAgICAgIGN3ZDogcmVwb3NpdG9yeURpcixcbiAgICAgICAgICBlbnY6IHByb2Nlc3MuZW52LFxuICAgICAgICAgIGVuY29kaW5nOiBcInV0Zi04XCIsXG4gICAgICAgICAgc3RkaW86IFtcImlnbm9yZVwiLCBcImlnbm9yZVwiLCBcInBpcGVcIl0sXG4gICAgICAgIH0pXG4gICAgICB9IGNhdGNoIChjaGlsZFByb2Nlc3MpIHtcbiAgICAgICAgLy8gRG9uJ3Qgc3RvcCB3aGVuIHB1c2ggZmFpbHMuXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoKGNoaWxkUHJvY2VzcyBhcyBhbnkpLm91dHB1dClcbiAgICAgICAgZXJyb3IgPSB0cnVlXG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBlcnJvclxufVxuXG5hc3luYyBmdW5jdGlvbiByZXRyaWV2ZVBob3Rvc1NlbmF0ZXVycygpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgY29uc3QgZGF0YURpciA9IG9wdGlvbnMuZGF0YURpclxuICBjb25zdCB7IGFjdGV1ckJ5VWlkIH0gPSBsb2FkQXNzZW1ibGVlRGF0YShcbiAgICBkYXRhRGlyLFxuICAgIEVuYWJsZWREYXRhc2V0cy5BY3RldXJzRXRPcmdhbmVzLFxuICAgIG9wdGlvbnMubGVnaXNsYXR1cmUsXG4gIClcbiAgY29uc3Qgc2VuYXRldXJzID0gT2JqZWN0LnZhbHVlcyhhY3RldXJCeVVpZClcbiAgICAuZmlsdGVyKChhY3RldXIpID0+IHtcbiAgICAgIGNvbnN0IHsgbWFuZGF0cyB9ID0gYWN0ZXVyXG4gICAgICBpZiAoIW1hbmRhdHMpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICB9XG4gICAgICBjb25zdCBtYW5kYXRTZW5hdGV1ciA9IG1hbmRhdHMuZmlsdGVyKFxuICAgICAgICAobWFuZGF0OiBNYW5kYXQpID0+XG4gICAgICAgICAgbWFuZGF0LnhzaVR5cGUgPT09IFR5cGVNYW5kYXQuTWFuZGF0UGFybGVtZW50YWlyZVR5cGUgJiZcbiAgICAgICAgICAvLyBtYW5kYXQubGVnaXNsYXR1cmUgPT09IG9wdGlvbnMubGVnaXNsYXR1cmUgJiZcbiAgICAgICAgICBtYW5kYXQudHlwZU9yZ2FuZSA9PT0gQ29kZVR5cGVPcmdhbmUuU2VuYXQsXG4gICAgICApWzBdXG4gICAgICBpZiAobWFuZGF0U2VuYXRldXIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgIH1cbiAgICAgIGNvbnN0IHsgYWRyZXNzZXMgfSA9IGFjdGV1clxuICAgICAgaWYgKGFkcmVzc2VzID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICB9XG4gICAgICBsZXQgdXJsID0gbnVsbFxuICAgICAgZm9yIChjb25zdCBhZHJlc3NlIG9mIGFkcmVzc2VzKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBhZHJlc3NlLnhzaVR5cGUgPT09IFwiQWRyZXNzZVNpdGVXZWJfVHlwZVwiICYmXG4gICAgICAgICAgYWRyZXNzZS50eXBlTGliZWxsZSA9PT0gXCJVcmwgc8OpbmF0ZXVyXCJcbiAgICAgICAgKSB7XG4gICAgICAgICAgdXJsID0gYWRyZXNzZS52YWxFbGVjXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBCb29sZWFuKHVybClcbiAgICB9KVxuICAgIC5zb3J0KChhLCBiKSA9PlxuICAgICAgYS51aWQubGVuZ3RoID09PSBiLnVpZC5sZW5ndGhcbiAgICAgICAgPyBhLnVpZC5sb2NhbGVDb21wYXJlKGIudWlkKVxuICAgICAgICA6IGEudWlkLmxlbmd0aCAtIGIudWlkLmxlbmd0aCxcbiAgICApXG5cbiAgY29uc3QgZ2l0R3JvdXBVcmwgPSBvcHRpb25zLmNsb25lXG4gICAgPyBvcHRpb25zLmNsb25lLnRyaW0oKS5yZXBsYWNlKC9cXC8rJC8sIFwiXCIpXG4gICAgOiB1bmRlZmluZWRcbiAgY29uc3QgcGhvdG9zRGlyTmFtZSA9IFwicGhvdG9zX3NlbmF0ZXVyc1wiXG4gIGlmIChnaXRHcm91cFVybCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgZXhlY1N5bmMoYGdpdCBjbG9uZSAke2dpdEdyb3VwVXJsfS8ke3Bob3Rvc0Rpck5hbWV9LmdpdGAsIHtcbiAgICAgIGN3ZDogZGF0YURpcixcbiAgICAgIGVudjogcHJvY2Vzcy5lbnYsXG4gICAgICBlbmNvZGluZzogXCJ1dGYtOFwiLFxuICAgICAgc3RkaW86IFtcImlnbm9yZVwiLCBcImlnbm9yZVwiLCBcInBpcGVcIl0sXG4gICAgfSlcbiAgfVxuICBjb25zdCBwaG90b3NEaXIgPSBwYXRoLmpvaW4oZGF0YURpciwgcGhvdG9zRGlyTmFtZSlcblxuICAvLyBEb3dubG9hZCBwaG90b3MuXG4gIGZzLmVuc3VyZURpclN5bmMocGhvdG9zRGlyKVxuICBpZiAob3B0aW9ucy5mZXRjaCkge1xuICAgIGNvbnN0IG1pc3NpbmdQaG90b0ZpbGVQYXRoID0gXCJpbWFnZXMvdHJhbnNwYXJlbnRfMTU1eDIyNS5qcGdcIlxuICAgIGZvciAoY29uc3Qgc2VuYXRldXIgb2Ygc2VuYXRldXJzKSB7XG4gICAgICBjb25zdCBpZGVudCA9IHNlbmF0ZXVyLmV0YXRDaXZpbC5pZGVudFxuICAgICAgY29uc3Qgc2VuYXRldXJTdGVtID0gc3RlbUZyb21TZW5hdGV1cihzZW5hdGV1cilcbiAgICAgIGNvbnN0IHBob3RvRmlsZW5hbWUgPSBgJHtzZW5hdGV1clN0ZW19LmpwZ2BcbiAgICAgIGNvbnN0IHBob3RvRmlsZVBhdGggPSBwYXRoLmpvaW4ocGhvdG9zRGlyLCBwaG90b0ZpbGVuYW1lKVxuICAgICAgY29uc3QgcGhvdG9UZW1wRmlsZW5hbWUgPSBgJHtzZW5hdGV1clN0ZW19X3RlbXAuanBnYFxuICAgICAgY29uc3QgcGhvdG9UZW1wRmlsZVBhdGggPSBwYXRoLmpvaW4ocGhvdG9zRGlyLCBwaG90b1RlbXBGaWxlbmFtZSlcbiAgICAgIGNvbnN0IHVybFBob3RvID0gYGh0dHBzOi8vd3d3LnNlbmF0LmZyL3NlbmltZy8ke3Bob3RvRmlsZW5hbWV9YFxuICAgICAgaWYgKCFvcHRpb25zLnNpbGVudCkge1xuICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICBgTG9hZGluZyBwaG90byAke3VybFBob3RvfSBmb3IgJHtpZGVudC5wcmVub219ICR7aWRlbnQubm9tfeKApmAsXG4gICAgICAgIClcbiAgICAgIH1cbiAgICAgIC8vIGZvciAobGV0IHJldHJpZXMgPSAwOyByZXRyaWVzIDwgMzsgcmV0cmllcysrKSB7XG4gICAgICAvLyAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2godXJsUGhvdG8pXG4gICAgICAvLyAgIGlmIChyZXNwb25zZS5vaykge1xuICAgICAgLy8gICAgIGF3YWl0IHBpcGVsaW5lKHJlc3BvbnNlLmJvZHksIGZzLmNyZWF0ZVdyaXRlU3RyZWFtKHBob3RvVGVtcEZpbGVQYXRoKSlcbiAgICAgIC8vICAgICBmcy5yZW5hbWVTeW5jKHBob3RvVGVtcEZpbGVQYXRoLCBwaG90b0ZpbGVQYXRoKVxuICAgICAgLy8gICAgIGJyZWFrXG4gICAgICAvLyAgIH1cbiAgICAgIC8vICAgaWYgKHJldHJpZXMgPj0gMikge1xuICAgICAgLy8gICAgIGNvbnNvbGUud2FybihgRmV0Y2ggZmFpbGVkOiAke3VybFBob3RvfSAoJHtpZGVudC5wcmVub219ICR7aWRlbnQubm9tfSlgKVxuICAgICAgLy8gICAgIGNvbnNvbGUud2FybihyZXNwb25zZS5zdGF0dXMsIHJlc3BvbnNlLnN0YXR1c1RleHQpXG4gICAgICAvLyAgICAgY29uc29sZS53YXJuKGF3YWl0IHJlc3BvbnNlLnRleHQoKSlcbiAgICAgIC8vICAgICBpZiAoZnMuZXhpc3RzU3luYyhwaG90b0ZpbGVQYXRoKSkge1xuICAgICAgLy8gICAgICAgY29uc29sZS53YXJuKFwiICA9PiBSZXVzaW5nIGV4aXN0aW5nIGltYWdlXCIpXG4gICAgICAvLyAgICAgfSBlbHNlIHtcbiAgICAgIC8vICAgICAgIGNvbnNvbGUud2FybihcIiAgPT4gVXNpbmcgYmxhbmsgaW1hZ2VcIilcbiAgICAgIC8vICAgICAgIGZzLmNvcHlGaWxlU3luYyhtaXNzaW5nUGhvdG9GaWxlUGF0aCwgcGhvdG9GaWxlUGF0aClcbiAgICAgIC8vICAgICB9XG4gICAgICAvLyAgICAgYnJlYWtcbiAgICAgIC8vICAgfVxuICAgICAgLy8gfVxuICAgICAgdHJ5IHtcbiAgICAgICAgZXhlY1N5bmMoYHdnZXQgLS1xdWlldCAtTyAke3Bob3RvVGVtcEZpbGVuYW1lfSAke3VybFBob3RvfWAsIHtcbiAgICAgICAgICBjd2Q6IHBob3Rvc0RpcixcbiAgICAgICAgICBlbnY6IHByb2Nlc3MuZW52LFxuICAgICAgICAgIGVuY29kaW5nOiBcInV0Zi04XCIsXG4gICAgICAgICAgLy8gc3RkaW86IFtcImlnbm9yZVwiLCBcImlnbm9yZVwiLCBcInBpcGVcIl0sXG4gICAgICAgIH0pXG4gICAgICAgIGZzLnJlbmFtZVN5bmMocGhvdG9UZW1wRmlsZVBhdGgsIHBob3RvRmlsZVBhdGgpXG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKVxuICAgICAgICBpZiAoZnMuZXhpc3RzU3luYyhwaG90b0ZpbGVQYXRoKSkge1xuICAgICAgICAgIGNvbnNvbGUud2FybihcIiAgPT4gUmV1c2luZyBleGlzdGluZyBpbWFnZVwiKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnNvbGUud2FybihcIiAgPT4gVXNpbmcgYmxhbmsgaW1hZ2VcIilcbiAgICAgICAgICBmcy5jb3B5RmlsZVN5bmMobWlzc2luZ1Bob3RvRmlsZVBhdGgsIHBob3RvRmlsZVBhdGgpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBSZXNpemUgcGhvdG9zIHRvIDE1NXgyMjUsIGJlY2F1c2Ugc29tZSBoYXZlbid0IGV4YWN0bHkgdGhpcyBzaXplLlxuICBmb3IgKGNvbnN0IHNlbmF0ZXVyIG9mIHNlbmF0ZXVycykge1xuICAgIGNvbnN0IGlkZW50ID0gc2VuYXRldXIuZXRhdENpdmlsLmlkZW50XG4gICAgY29uc3Qgc2VuYXRldXJTdGVtID0gc3RlbUZyb21TZW5hdGV1cihzZW5hdGV1cilcbiAgICBpZiAoIW9wdGlvbnMuc2lsZW50KSB7XG4gICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgYFJlc2l6aW5nIHBob3RvICR7c2VuYXRldXJTdGVtfSBmb3IgJHtpZGVudC5wcmVub219ICR7aWRlbnQubm9tfeKApmAsXG4gICAgICApXG4gICAgfVxuICAgIGV4ZWNTeW5jKFxuICAgICAgYGdtIGNvbnZlcnQgLXJlc2l6ZSAxNTV4MjI1ISAke3NlbmF0ZXVyU3RlbX0uanBnICR7c2VuYXRldXJTdGVtfV8xNTV4MjI1LmpwZ2AsXG4gICAgICB7XG4gICAgICAgIGN3ZDogcGhvdG9zRGlyLFxuICAgICAgfSxcbiAgICApXG4gIH1cblxuICAvLyBDcmVhdGUgYSBtb3NhaWMgb2YgcGhvdG9zLlxuICBjb25zdCBwaG90b0J5SWRTZW5hdGV1cjogeyBbdWlkOiBzdHJpbmddOiBQaG90byB9ID0ge31cbiAgY29uc3Qgcm93c0ZpbGVuYW1lczogc3RyaW5nW10gPSBbXVxuICBmb3IgKFxuICAgIGxldCBzZW5hdGV1ckluZGV4ID0gMCwgcm93SW5kZXggPSAwO1xuICAgIHNlbmF0ZXVySW5kZXggPCBzZW5hdGV1cnMubGVuZ3RoO1xuICAgIHNlbmF0ZXVySW5kZXggKz0gMjUsIHJvd0luZGV4KytcbiAgKSB7XG4gICAgY29uc3Qgcm93ID0gc2VuYXRldXJzLnNsaWNlKHNlbmF0ZXVySW5kZXgsIHNlbmF0ZXVySW5kZXggKyAyNSlcbiAgICBjb25zdCBwaG90b3NGaWxlbmFtZXM6IHN0cmluZ1tdID0gW11cbiAgICBmb3IgKGNvbnN0IFtjb2x1bW5JbmRleCwgc2VuYXRldXJdIG9mIHJvdy5lbnRyaWVzKCkpIHtcbiAgICAgIGNvbnN0IHNlbmF0ZXVyU3RlbSA9IHN0ZW1Gcm9tU2VuYXRldXIoc2VuYXRldXIpXG4gICAgICBjb25zdCBwaG90b0ZpbGVuYW1lID0gYCR7c2VuYXRldXJTdGVtfV8xNTV4MjI1LmpwZ2BcbiAgICAgIHBob3Rvc0ZpbGVuYW1lcy5wdXNoKHBob3RvRmlsZW5hbWUpXG4gICAgICBwaG90b0J5SWRTZW5hdGV1cltzZW5hdGV1ci51aWRdID0ge1xuICAgICAgICBjaGVtaW46IGBwaG90b3Nfc2VuYXRldXJzLyR7cGhvdG9GaWxlbmFtZX1gLFxuICAgICAgICBjaGVtaW5Nb3NhaXF1ZTogYHBob3Rvc19zZW5hdGV1cnMvc2VuYXRldXJzLmpwZ2AsXG4gICAgICAgIGhhdXRldXI6IDIyNSxcbiAgICAgICAgbGFyZ2V1cjogMTU1LFxuICAgICAgICB4TW9zYWlxdWU6IGNvbHVtbkluZGV4ICogMTU1LFxuICAgICAgICB5TW9zYWlxdWU6IHJvd0luZGV4ICogMjI1LFxuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCByb3dGaWxlbmFtZSA9IGByb3ctJHtyb3dJbmRleH0uanBnYFxuICAgIGV4ZWNTeW5jKGBnbSBjb252ZXJ0ICR7cGhvdG9zRmlsZW5hbWVzLmpvaW4oXCIgXCIpfSArYXBwZW5kICR7cm93RmlsZW5hbWV9YCwge1xuICAgICAgY3dkOiBwaG90b3NEaXIsXG4gICAgfSlcbiAgICByb3dzRmlsZW5hbWVzLnB1c2gocm93RmlsZW5hbWUpXG4gIH1cbiAgZXhlY1N5bmMoYGdtIGNvbnZlcnQgJHtyb3dzRmlsZW5hbWVzLmpvaW4oXCIgXCIpfSAtYXBwZW5kIHNlbmF0ZXVycy5qcGdgLCB7XG4gICAgY3dkOiBwaG90b3NEaXIsXG4gIH0pXG4gIGZvciAoY29uc3Qgcm93RmlsZW5hbWUgb2Ygcm93c0ZpbGVuYW1lcykge1xuICAgIGZzLnVubGlua1N5bmMocGF0aC5qb2luKHBob3Rvc0Rpciwgcm93RmlsZW5hbWUpKVxuICB9XG5cbiAgY29uc3QganNvbkZpbGVQYXRoID0gcGF0aC5qb2luKHBob3Rvc0RpciwgXCJzZW5hdGV1cnMuanNvblwiKVxuICBmcy53cml0ZUZpbGVTeW5jKGpzb25GaWxlUGF0aCwgSlNPTi5zdHJpbmdpZnkocGhvdG9CeUlkU2VuYXRldXIsIG51bGwsIDIpKVxuXG4gIHJldHVybiBjb21taXRBbmRQdXNoKHBob3Rvc0Rpciwgb3B0aW9ucy5jb21taXQsIG9wdGlvbnMucmVtb3RlKVxufVxuXG5mdW5jdGlvbiBzdGVtRnJvbVNlbmF0ZXVyKHNlbmF0ZXVyOiBBY3RldXIpIHtcbiAgY29uc3QgeyBhZHJlc3NlcyB9ID0gc2VuYXRldXJcbiAgbGV0IHVybCA9IG51bGxcbiAgZm9yIChjb25zdCBhZHJlc3NlIG9mIGFkcmVzc2VzISkge1xuICAgIGlmIChcbiAgICAgIGFkcmVzc2UueHNpVHlwZSA9PT0gXCJBZHJlc3NlU2l0ZVdlYl9UeXBlXCIgJiZcbiAgICAgIGFkcmVzc2UudHlwZUxpYmVsbGUgPT09IFwiVXJsIHPDqW5hdGV1clwiXG4gICAgKSB7XG4gICAgICB1cmwgPSBhZHJlc3NlLnZhbEVsZWNcbiAgICB9XG4gIH1cbiAgY29uc3QgbWF0Y2ggPSB1cmwhLm1hdGNoKC9eaHR0cHM6XFwvXFwvd3d3XFwuc2VuYXRcXC5mclxcL3NlbmF0ZXVyXFwvKC4qKVxcLmh0bWwkLylcbiAgY29uc3Qgc2VuYXRldXJTdGVtID0gbWF0Y2ghWzFdXG4gIHJldHVybiBzZW5hdGV1clN0ZW1cbn1cblxucmV0cmlldmVQaG90b3NTZW5hdGV1cnMoKVxuICAudGhlbigoZXJyb3IpID0+IHByb2Nlc3MuZXhpdChlcnJvciA/IDEgOiAwKSlcbiAgLmNhdGNoKChlcnJvcikgPT4ge1xuICAgIGNvbnNvbGUubG9nKGVycm9yKVxuICAgIHByb2Nlc3MuZXhpdCgyKVxuICB9KVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUVBOztBQUlBOztB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
357
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJvcHRpb25zRGVmaW5pdGlvbnMiLCJhbGlhcyIsImhlbHAiLCJuYW1lIiwidHlwZSIsIlN0cmluZyIsIkJvb2xlYW4iLCJtdWx0aXBsZSIsImRlZmF1bHRPcHRpb24iLCJvcHRpb25zIiwiY29tbWFuZExpbmVBcmdzIiwiY29tbWl0QW5kUHVzaCIsInJlcG9zaXRvcnlEaXIiLCJjb21taXQiLCJyZW1vdGVzIiwiZXJyb3IiLCJleGVjU3luYyIsImN3ZCIsImVudiIsInByb2Nlc3MiLCJlbmNvZGluZyIsInN0ZGlvIiwiY2hpbGRQcm9jZXNzIiwic3RkZXJyIiwidGVzdCIsInN0ZG91dCIsImNvbnNvbGUiLCJvdXRwdXQiLCJyZW1vdGUiLCJyZXRyaWV2ZVBob3Rvc1NlbmF0ZXVycyIsImRhdGFEaXIiLCJsb2FkQXNzZW1ibGVlRGF0YSIsIkVuYWJsZWREYXRhc2V0cyIsIkFjdGV1cnNFdE9yZ2FuZXMiLCJsZWdpc2xhdHVyZSIsImFjdGV1ckJ5VWlkIiwic2VuYXRldXJzIiwiT2JqZWN0IiwidmFsdWVzIiwiZmlsdGVyIiwiYWN0ZXVyIiwibWFuZGF0cyIsIm1hbmRhdFNlbmF0ZXVyIiwibWFuZGF0IiwieHNpVHlwZSIsIlR5cGVNYW5kYXQiLCJNYW5kYXRQYXJsZW1lbnRhaXJlVHlwZSIsInR5cGVPcmdhbmUiLCJDb2RlVHlwZU9yZ2FuZSIsIlNlbmF0IiwidW5kZWZpbmVkIiwiYWRyZXNzZXMiLCJ1cmwiLCJhZHJlc3NlIiwidHlwZUxpYmVsbGUiLCJ2YWxFbGVjIiwic29ydCIsImEiLCJiIiwidWlkIiwibGVuZ3RoIiwibG9jYWxlQ29tcGFyZSIsImdpdEdyb3VwVXJsIiwiY2xvbmUiLCJ0cmltIiwicmVwbGFjZSIsInBob3Rvc0Rpck5hbWUiLCJwaG90b3NEaXIiLCJwYXRoIiwiam9pbiIsImZzIiwiZW5zdXJlRGlyU3luYyIsImZldGNoIiwibWlzc2luZ1Bob3RvRmlsZVBhdGgiLCJzZW5hdGV1ciIsImlkZW50IiwiZXRhdENpdmlsIiwic2VuYXRldXJTdGVtIiwic3RlbUZyb21TZW5hdGV1ciIsInBob3RvRmlsZW5hbWUiLCJwaG90b0ZpbGVQYXRoIiwicGhvdG9UZW1wRmlsZW5hbWUiLCJwaG90b1RlbXBGaWxlUGF0aCIsInVybFBob3RvIiwic2lsZW50IiwibG9nIiwicHJlbm9tIiwibm9tIiwicmVuYW1lU3luYyIsImV4aXN0c1N5bmMiLCJ3YXJuIiwiY29weUZpbGVTeW5jIiwicGhvdG9CeUlkU2VuYXRldXIiLCJyb3dzRmlsZW5hbWVzIiwic2VuYXRldXJJbmRleCIsInJvd0luZGV4Iiwicm93Iiwic2xpY2UiLCJwaG90b3NGaWxlbmFtZXMiLCJlbnRyaWVzIiwiY29sdW1uSW5kZXgiLCJwdXNoIiwiY2hlbWluIiwiY2hlbWluTW9zYWlxdWUiLCJoYXV0ZXVyIiwibGFyZ2V1ciIsInhNb3NhaXF1ZSIsInlNb3NhaXF1ZSIsInJvd0ZpbGVuYW1lIiwidW5saW5rU3luYyIsImpzb25GaWxlUGF0aCIsIndyaXRlRmlsZVN5bmMiLCJKU09OIiwic3RyaW5naWZ5IiwibWF0Y2giLCJ0aGVuIiwiZXhpdCJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zY3JpcHRzL3JldHJpZXZlX3NlbmF0ZXVyc19waG90b3MudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hpbGRQcm9jZXNzLCBleGVjU3luYyB9IGZyb20gXCJjaGlsZF9wcm9jZXNzXCJcbmltcG9ydCBjb21tYW5kTGluZUFyZ3MgZnJvbSBcImNvbW1hbmQtbGluZS1hcmdzXCJcbmltcG9ydCBmcyBmcm9tIFwiZnMtZXh0cmFcIlxuLy8gaW1wb3J0IGZldGNoIGZyb20gXCJub2RlLWZldGNoXCJcbmltcG9ydCBwYXRoIGZyb20gXCJwYXRoXCJcbi8vIGltcG9ydCBzdHJlYW0gZnJvbSBcInN0cmVhbVwiXG4vLyBpbXBvcnQgdXRpbCBmcm9tIFwidXRpbFwiXG5cbmltcG9ydCB7IEVuYWJsZWREYXRhc2V0cyB9IGZyb20gXCIuLi9kYXRhc2V0c1wiXG5pbXBvcnQgeyBsb2FkQXNzZW1ibGVlRGF0YSB9IGZyb20gXCIuLi9sb2FkZXJzXCJcbmltcG9ydCB7XG4gIEFjdGV1cixcbiAgQ29kZVR5cGVPcmdhbmUsXG4gIE1hbmRhdCxcbiAgUGhvdG8sXG4gIFR5cGVNYW5kYXQsXG59IGZyb20gXCIuLi90eXBlcy9hY3RldXJzX2V0X29yZ2FuZXNcIlxuXG5jb25zdCBvcHRpb25zRGVmaW5pdGlvbnMgPSBbXG4gIHtcbiAgICBhbGlhczogXCJDXCIsXG4gICAgaGVscDogXCJjbG9uZSByZXBvc2l0b3JpZXMgZnJvbSBnaXZlbiBncm91cCAob3Igb3JnYW5pemF0aW9uKSBnaXQgVVJMXCIsXG4gICAgbmFtZTogXCJjbG9uZVwiLFxuICAgIHR5cGU6IFN0cmluZyxcbiAgfSxcbiAge1xuICAgIGFsaWFzOiBcImNcIixcbiAgICBoZWxwOiBcImNvbW1pdCBwaG90b3NcIixcbiAgICBuYW1lOiBcImNvbW1pdFwiLFxuICAgIHR5cGU6IEJvb2xlYW4sXG4gIH0sXG4gIHtcbiAgICBhbGlhczogXCJmXCIsXG4gICAgaGVscDogXCJmZXRjaCBzw6luYXRldXJzJyBwaWN0dXJlcyBpbnN0ZWFkIG9mIHJldHJpZXZpbmcgdGhlbSBmcm9tIGZpbGVzXCIsXG4gICAgbmFtZTogXCJmZXRjaFwiLFxuICAgIHR5cGU6IEJvb2xlYW4sXG4gIH0sXG4gIHtcbiAgICBhbGlhczogXCJyXCIsXG4gICAgaGVscDogXCJwdXNoIGNvbW1pdCB0byBnaXZlbiByZW1vdGVcIixcbiAgICBtdWx0aXBsZTogdHJ1ZSxcbiAgICBuYW1lOiBcInJlbW90ZVwiLFxuICAgIHR5cGU6IFN0cmluZyxcbiAgfSxcbiAge1xuICAgIGFsaWFzOiBcInNcIixcbiAgICBoZWxwOiBcImRvbid0IGxvZyBhbnl0aGluZ1wiLFxuICAgIG5hbWU6IFwic2lsZW50XCIsXG4gICAgdHlwZTogQm9vbGVhbixcbiAgfSxcbiAge1xuICAgIGRlZmF1bHRPcHRpb246IHRydWUsXG4gICAgaGVscDogXCJkaXJlY3RvcnkgY29udGFpbmluZyBBc3NlbWJsw6llIG9wZW4gZGF0YSBmaWxlc1wiLFxuICAgIG5hbWU6IFwiZGF0YURpclwiLFxuICAgIHR5cGU6IFN0cmluZyxcbiAgfSxcbl1cbmNvbnN0IG9wdGlvbnMgPSBjb21tYW5kTGluZUFyZ3Mob3B0aW9uc0RlZmluaXRpb25zKVxuLy8gY29uc3QgcGlwZWxpbmUgPSB1dGlsLnByb21pc2lmeShzdHJlYW0ucGlwZWxpbmUpXG5cbmZ1bmN0aW9uIGNvbW1pdEFuZFB1c2goXG4gIHJlcG9zaXRvcnlEaXI6IHN0cmluZyxcbiAgY29tbWl0OiBib29sZWFuLFxuICByZW1vdGVzPzogc3RyaW5nW10sXG4pOiBib29sZWFuIHtcbiAgbGV0IGVycm9yID0gZmFsc2VcbiAgaWYgKGNvbW1pdCkge1xuICAgIGV4ZWNTeW5jKFwiZ2l0IGFkZCAuXCIsIHtcbiAgICAgIGN3ZDogcmVwb3NpdG9yeURpcixcbiAgICAgIGVudjogcHJvY2Vzcy5lbnYsXG4gICAgICBlbmNvZGluZzogXCJ1dGYtOFwiLFxuICAgICAgc3RkaW86IFtcImlnbm9yZVwiLCBcImlnbm9yZVwiLCBcInBpcGVcIl0sXG4gICAgfSlcbiAgICB0cnkge1xuICAgICAgZXhlY1N5bmMoJ2dpdCBjb21taXQgLW0gXCJOb3V2ZWxsZSBtb2lzc29uXCInLCB7XG4gICAgICAgIGN3ZDogcmVwb3NpdG9yeURpcixcbiAgICAgICAgZW52OiBwcm9jZXNzLmVudixcbiAgICAgICAgZW5jb2Rpbmc6IFwidXRmLThcIixcbiAgICAgIH0pXG4gICAgfSBjYXRjaCAoY2hpbGRQcm9jZXNzKSB7XG4gICAgICBpZiAoXG4gICAgICAgIChjaGlsZFByb2Nlc3MgYXMgQ2hpbGRQcm9jZXNzKS5zdGRlcnIgPT09IG51bGwgfHxcbiAgICAgICAgIS9ub3RoaW5nIHRvIGNvbW1pdC8udGVzdCgoY2hpbGRQcm9jZXNzIGFzIGFueSkuc3Rkb3V0KVxuICAgICAgKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoKGNoaWxkUHJvY2VzcyBhcyBhbnkpLm91dHB1dClcbiAgICAgICAgdGhyb3cgY2hpbGRQcm9jZXNzXG4gICAgICB9XG4gICAgfVxuICAgIGZvciAoY29uc3QgcmVtb3RlIG9mIHJlbW90ZXMgfHwgW10pIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGV4ZWNTeW5jKGBnaXQgcHVzaCAke3JlbW90ZX0gbWFzdGVyYCwge1xuICAgICAgICAgIGN3ZDogcmVwb3NpdG9yeURpcixcbiAgICAgICAgICBlbnY6IHByb2Nlc3MuZW52LFxuICAgICAgICAgIGVuY29kaW5nOiBcInV0Zi04XCIsXG4gICAgICAgICAgc3RkaW86IFtcImlnbm9yZVwiLCBcImlnbm9yZVwiLCBcInBpcGVcIl0sXG4gICAgICAgIH0pXG4gICAgICB9IGNhdGNoIChjaGlsZFByb2Nlc3MpIHtcbiAgICAgICAgLy8gRG9uJ3Qgc3RvcCB3aGVuIHB1c2ggZmFpbHMuXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoKGNoaWxkUHJvY2VzcyBhcyBhbnkpLm91dHB1dClcbiAgICAgICAgZXJyb3IgPSB0cnVlXG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBlcnJvclxufVxuXG5hc3luYyBmdW5jdGlvbiByZXRyaWV2ZVBob3Rvc1NlbmF0ZXVycygpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgY29uc3QgZGF0YURpciA9IG9wdGlvbnMuZGF0YURpclxuICBjb25zdCB7IGFjdGV1ckJ5VWlkIH0gPSBsb2FkQXNzZW1ibGVlRGF0YShcbiAgICBkYXRhRGlyLFxuICAgIEVuYWJsZWREYXRhc2V0cy5BY3RldXJzRXRPcmdhbmVzLFxuICAgIG9wdGlvbnMubGVnaXNsYXR1cmUsXG4gIClcbiAgY29uc3Qgc2VuYXRldXJzID0gT2JqZWN0LnZhbHVlcyhhY3RldXJCeVVpZClcbiAgICAuZmlsdGVyKChhY3RldXIpID0+IHtcbiAgICAgIGNvbnN0IHsgbWFuZGF0cyB9ID0gYWN0ZXVyXG4gICAgICBpZiAoIW1hbmRhdHMpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICB9XG4gICAgICBjb25zdCBtYW5kYXRTZW5hdGV1ciA9IG1hbmRhdHMuZmlsdGVyKFxuICAgICAgICAobWFuZGF0OiBNYW5kYXQpID0+XG4gICAgICAgICAgbWFuZGF0LnhzaVR5cGUgPT09IFR5cGVNYW5kYXQuTWFuZGF0UGFybGVtZW50YWlyZVR5cGUgJiZcbiAgICAgICAgICAvLyBtYW5kYXQubGVnaXNsYXR1cmUgPT09IG9wdGlvbnMubGVnaXNsYXR1cmUgJiZcbiAgICAgICAgICBtYW5kYXQudHlwZU9yZ2FuZSA9PT0gQ29kZVR5cGVPcmdhbmUuU2VuYXQsXG4gICAgICApWzBdXG4gICAgICBpZiAobWFuZGF0U2VuYXRldXIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgIH1cbiAgICAgIGNvbnN0IHsgYWRyZXNzZXMgfSA9IGFjdGV1clxuICAgICAgaWYgKGFkcmVzc2VzID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICB9XG4gICAgICBsZXQgdXJsID0gbnVsbFxuICAgICAgZm9yIChjb25zdCBhZHJlc3NlIG9mIGFkcmVzc2VzKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBhZHJlc3NlLnhzaVR5cGUgPT09IFwiQWRyZXNzZVNpdGVXZWJfVHlwZVwiICYmXG4gICAgICAgICAgYWRyZXNzZS50eXBlTGliZWxsZSA9PT0gXCJVcmwgc8OpbmF0ZXVyXCJcbiAgICAgICAgKSB7XG4gICAgICAgICAgdXJsID0gYWRyZXNzZS52YWxFbGVjXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBCb29sZWFuKHVybClcbiAgICB9KVxuICAgIC5zb3J0KChhLCBiKSA9PlxuICAgICAgYS51aWQubGVuZ3RoID09PSBiLnVpZC5sZW5ndGhcbiAgICAgICAgPyBhLnVpZC5sb2NhbGVDb21wYXJlKGIudWlkKVxuICAgICAgICA6IGEudWlkLmxlbmd0aCAtIGIudWlkLmxlbmd0aCxcbiAgICApXG5cbiAgY29uc3QgZ2l0R3JvdXBVcmwgPSBvcHRpb25zLmNsb25lXG4gICAgPyBvcHRpb25zLmNsb25lLnRyaW0oKS5yZXBsYWNlKC9cXC8rJC8sIFwiXCIpXG4gICAgOiB1bmRlZmluZWRcbiAgY29uc3QgcGhvdG9zRGlyTmFtZSA9IFwicGhvdG9zX3NlbmF0ZXVyc1wiXG4gIGlmIChnaXRHcm91cFVybCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgZXhlY1N5bmMoYGdpdCBjbG9uZSAke2dpdEdyb3VwVXJsfS8ke3Bob3Rvc0Rpck5hbWV9LmdpdGAsIHtcbiAgICAgIGN3ZDogZGF0YURpcixcbiAgICAgIGVudjogcHJvY2Vzcy5lbnYsXG4gICAgICBlbmNvZGluZzogXCJ1dGYtOFwiLFxuICAgICAgc3RkaW86IFtcImlnbm9yZVwiLCBcImlnbm9yZVwiLCBcInBpcGVcIl0sXG4gICAgfSlcbiAgfVxuICBjb25zdCBwaG90b3NEaXIgPSBwYXRoLmpvaW4oZGF0YURpciwgcGhvdG9zRGlyTmFtZSlcblxuICAvLyBEb3dubG9hZCBwaG90b3MuXG4gIGZzLmVuc3VyZURpclN5bmMocGhvdG9zRGlyKVxuICBpZiAob3B0aW9ucy5mZXRjaCkge1xuICAgIGNvbnN0IG1pc3NpbmdQaG90b0ZpbGVQYXRoID0gXCJpbWFnZXMvdHJhbnNwYXJlbnRfMTU1eDIyNS5qcGdcIlxuICAgIGZvciAoY29uc3Qgc2VuYXRldXIgb2Ygc2VuYXRldXJzKSB7XG4gICAgICBjb25zdCBpZGVudCA9IHNlbmF0ZXVyLmV0YXRDaXZpbC5pZGVudFxuICAgICAgY29uc3Qgc2VuYXRldXJTdGVtID0gc3RlbUZyb21TZW5hdGV1cihzZW5hdGV1cilcbiAgICAgIGNvbnN0IHBob3RvRmlsZW5hbWUgPSBgJHtzZW5hdGV1clN0ZW19LmpwZ2BcbiAgICAgIGNvbnN0IHBob3RvRmlsZVBhdGggPSBwYXRoLmpvaW4ocGhvdG9zRGlyLCBwaG90b0ZpbGVuYW1lKVxuICAgICAgY29uc3QgcGhvdG9UZW1wRmlsZW5hbWUgPSBgJHtzZW5hdGV1clN0ZW19X3RlbXAuanBnYFxuICAgICAgY29uc3QgcGhvdG9UZW1wRmlsZVBhdGggPSBwYXRoLmpvaW4ocGhvdG9zRGlyLCBwaG90b1RlbXBGaWxlbmFtZSlcbiAgICAgIGNvbnN0IHVybFBob3RvID0gYGh0dHBzOi8vd3d3LnNlbmF0LmZyL3NlbmltZy8ke3Bob3RvRmlsZW5hbWV9YFxuICAgICAgaWYgKCFvcHRpb25zLnNpbGVudCkge1xuICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICBgTG9hZGluZyBwaG90byAke3VybFBob3RvfSBmb3IgJHtpZGVudC5wcmVub219ICR7aWRlbnQubm9tfeKApmAsXG4gICAgICAgIClcbiAgICAgIH1cbiAgICAgIC8vIGZvciAobGV0IHJldHJpZXMgPSAwOyByZXRyaWVzIDwgMzsgcmV0cmllcysrKSB7XG4gICAgICAvLyAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2godXJsUGhvdG8pXG4gICAgICAvLyAgIGlmIChyZXNwb25zZS5vaykge1xuICAgICAgLy8gICAgIGF3YWl0IHBpcGVsaW5lKHJlc3BvbnNlLmJvZHksIGZzLmNyZWF0ZVdyaXRlU3RyZWFtKHBob3RvVGVtcEZpbGVQYXRoKSlcbiAgICAgIC8vICAgICBmcy5yZW5hbWVTeW5jKHBob3RvVGVtcEZpbGVQYXRoLCBwaG90b0ZpbGVQYXRoKVxuICAgICAgLy8gICAgIGJyZWFrXG4gICAgICAvLyAgIH1cbiAgICAgIC8vICAgaWYgKHJldHJpZXMgPj0gMikge1xuICAgICAgLy8gICAgIGNvbnNvbGUud2FybihgRmV0Y2ggZmFpbGVkOiAke3VybFBob3RvfSAoJHtpZGVudC5wcmVub219ICR7aWRlbnQubm9tfSlgKVxuICAgICAgLy8gICAgIGNvbnNvbGUud2FybihyZXNwb25zZS5zdGF0dXMsIHJlc3BvbnNlLnN0YXR1c1RleHQpXG4gICAgICAvLyAgICAgY29uc29sZS53YXJuKGF3YWl0IHJlc3BvbnNlLnRleHQoKSlcbiAgICAgIC8vICAgICBpZiAoZnMuZXhpc3RzU3luYyhwaG90b0ZpbGVQYXRoKSkge1xuICAgICAgLy8gICAgICAgY29uc29sZS53YXJuKFwiICA9PiBSZXVzaW5nIGV4aXN0aW5nIGltYWdlXCIpXG4gICAgICAvLyAgICAgfSBlbHNlIHtcbiAgICAgIC8vICAgICAgIGNvbnNvbGUud2FybihcIiAgPT4gVXNpbmcgYmxhbmsgaW1hZ2VcIilcbiAgICAgIC8vICAgICAgIGZzLmNvcHlGaWxlU3luYyhtaXNzaW5nUGhvdG9GaWxlUGF0aCwgcGhvdG9GaWxlUGF0aClcbiAgICAgIC8vICAgICB9XG4gICAgICAvLyAgICAgYnJlYWtcbiAgICAgIC8vICAgfVxuICAgICAgLy8gfVxuICAgICAgdHJ5IHtcbiAgICAgICAgZXhlY1N5bmMoYHdnZXQgLS1xdWlldCAtTyAke3Bob3RvVGVtcEZpbGVuYW1lfSAke3VybFBob3RvfWAsIHtcbiAgICAgICAgICBjd2Q6IHBob3Rvc0RpcixcbiAgICAgICAgICBlbnY6IHByb2Nlc3MuZW52LFxuICAgICAgICAgIGVuY29kaW5nOiBcInV0Zi04XCIsXG4gICAgICAgICAgLy8gc3RkaW86IFtcImlnbm9yZVwiLCBcImlnbm9yZVwiLCBcInBpcGVcIl0sXG4gICAgICAgIH0pXG4gICAgICAgIGZzLnJlbmFtZVN5bmMocGhvdG9UZW1wRmlsZVBhdGgsIHBob3RvRmlsZVBhdGgpXG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKVxuICAgICAgICBpZiAoZnMuZXhpc3RzU3luYyhwaG90b0ZpbGVQYXRoKSkge1xuICAgICAgICAgIGNvbnNvbGUud2FybihcIiAgPT4gUmV1c2luZyBleGlzdGluZyBpbWFnZVwiKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnNvbGUud2FybihcIiAgPT4gVXNpbmcgYmxhbmsgaW1hZ2VcIilcbiAgICAgICAgICBmcy5jb3B5RmlsZVN5bmMobWlzc2luZ1Bob3RvRmlsZVBhdGgsIHBob3RvRmlsZVBhdGgpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBSZXNpemUgcGhvdG9zIHRvIDE1NXgyMjUsIGJlY2F1c2Ugc29tZSBoYXZlbid0IGV4YWN0bHkgdGhpcyBzaXplLlxuICBmb3IgKGNvbnN0IHNlbmF0ZXVyIG9mIHNlbmF0ZXVycykge1xuICAgIGNvbnN0IGlkZW50ID0gc2VuYXRldXIuZXRhdENpdmlsLmlkZW50XG4gICAgY29uc3Qgc2VuYXRldXJTdGVtID0gc3RlbUZyb21TZW5hdGV1cihzZW5hdGV1cilcbiAgICBpZiAoIW9wdGlvbnMuc2lsZW50KSB7XG4gICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgYFJlc2l6aW5nIHBob3RvICR7c2VuYXRldXJTdGVtfSBmb3IgJHtpZGVudC5wcmVub219ICR7aWRlbnQubm9tfeKApmAsXG4gICAgICApXG4gICAgfVxuICAgIGV4ZWNTeW5jKFxuICAgICAgYGdtIGNvbnZlcnQgLXJlc2l6ZSAxNTV4MjI1ISAke3NlbmF0ZXVyU3RlbX0uanBnICR7c2VuYXRldXJTdGVtfV8xNTV4MjI1LmpwZ2AsXG4gICAgICB7XG4gICAgICAgIGN3ZDogcGhvdG9zRGlyLFxuICAgICAgfSxcbiAgICApXG4gIH1cblxuICAvLyBDcmVhdGUgYSBtb3NhaWMgb2YgcGhvdG9zLlxuICBjb25zdCBwaG90b0J5SWRTZW5hdGV1cjogeyBbdWlkOiBzdHJpbmddOiBQaG90byB9ID0ge31cbiAgY29uc3Qgcm93c0ZpbGVuYW1lczogc3RyaW5nW10gPSBbXVxuICBmb3IgKFxuICAgIGxldCBzZW5hdGV1ckluZGV4ID0gMCwgcm93SW5kZXggPSAwO1xuICAgIHNlbmF0ZXVySW5kZXggPCBzZW5hdGV1cnMubGVuZ3RoO1xuICAgIHNlbmF0ZXVySW5kZXggKz0gMjUsIHJvd0luZGV4KytcbiAgKSB7XG4gICAgY29uc3Qgcm93ID0gc2VuYXRldXJzLnNsaWNlKHNlbmF0ZXVySW5kZXgsIHNlbmF0ZXVySW5kZXggKyAyNSlcbiAgICBjb25zdCBwaG90b3NGaWxlbmFtZXM6IHN0cmluZ1tdID0gW11cbiAgICBmb3IgKGNvbnN0IFtjb2x1bW5JbmRleCwgc2VuYXRldXJdIG9mIHJvdy5lbnRyaWVzKCkpIHtcbiAgICAgIGNvbnN0IHNlbmF0ZXVyU3RlbSA9IHN0ZW1Gcm9tU2VuYXRldXIoc2VuYXRldXIpXG4gICAgICBjb25zdCBwaG90b0ZpbGVuYW1lID0gYCR7c2VuYXRldXJTdGVtfV8xNTV4MjI1LmpwZ2BcbiAgICAgIHBob3Rvc0ZpbGVuYW1lcy5wdXNoKHBob3RvRmlsZW5hbWUpXG4gICAgICBwaG90b0J5SWRTZW5hdGV1cltzZW5hdGV1ci51aWRdID0ge1xuICAgICAgICBjaGVtaW46IGBwaG90b3Nfc2VuYXRldXJzLyR7cGhvdG9GaWxlbmFtZX1gLFxuICAgICAgICBjaGVtaW5Nb3NhaXF1ZTogYHBob3Rvc19zZW5hdGV1cnMvc2VuYXRldXJzLmpwZ2AsXG4gICAgICAgIGhhdXRldXI6IDIyNSxcbiAgICAgICAgbGFyZ2V1cjogMTU1LFxuICAgICAgICB4TW9zYWlxdWU6IGNvbHVtbkluZGV4ICogMTU1LFxuICAgICAgICB5TW9zYWlxdWU6IHJvd0luZGV4ICogMjI1LFxuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCByb3dGaWxlbmFtZSA9IGByb3ctJHtyb3dJbmRleH0uanBnYFxuICAgIGV4ZWNTeW5jKGBnbSBjb252ZXJ0ICR7cGhvdG9zRmlsZW5hbWVzLmpvaW4oXCIgXCIpfSArYXBwZW5kICR7cm93RmlsZW5hbWV9YCwge1xuICAgICAgY3dkOiBwaG90b3NEaXIsXG4gICAgfSlcbiAgICByb3dzRmlsZW5hbWVzLnB1c2gocm93RmlsZW5hbWUpXG4gIH1cbiAgZXhlY1N5bmMoYGdtIGNvbnZlcnQgJHtyb3dzRmlsZW5hbWVzLmpvaW4oXCIgXCIpfSAtYXBwZW5kIHNlbmF0ZXVycy5qcGdgLCB7XG4gICAgY3dkOiBwaG90b3NEaXIsXG4gIH0pXG4gIGZvciAoY29uc3Qgcm93RmlsZW5hbWUgb2Ygcm93c0ZpbGVuYW1lcykge1xuICAgIGZzLnVubGlua1N5bmMocGF0aC5qb2luKHBob3Rvc0Rpciwgcm93RmlsZW5hbWUpKVxuICB9XG5cbiAgY29uc3QganNvbkZpbGVQYXRoID0gcGF0aC5qb2luKHBob3Rvc0RpciwgXCJzZW5hdGV1cnMuanNvblwiKVxuICBmcy53cml0ZUZpbGVTeW5jKGpzb25GaWxlUGF0aCwgSlNPTi5zdHJpbmdpZnkocGhvdG9CeUlkU2VuYXRldXIsIG51bGwsIDIpKVxuXG4gIHJldHVybiBjb21taXRBbmRQdXNoKHBob3Rvc0Rpciwgb3B0aW9ucy5jb21taXQsIG9wdGlvbnMucmVtb3RlKVxufVxuXG5mdW5jdGlvbiBzdGVtRnJvbVNlbmF0ZXVyKHNlbmF0ZXVyOiBBY3RldXIpIHtcbiAgY29uc3QgeyBhZHJlc3NlcyB9ID0gc2VuYXRldXJcbiAgbGV0IHVybCA9IG51bGxcbiAgZm9yIChjb25zdCBhZHJlc3NlIG9mIGFkcmVzc2VzISkge1xuICAgIGlmIChcbiAgICAgIGFkcmVzc2UueHNpVHlwZSA9PT0gXCJBZHJlc3NlU2l0ZVdlYl9UeXBlXCIgJiZcbiAgICAgIGFkcmVzc2UudHlwZUxpYmVsbGUgPT09IFwiVXJsIHPDqW5hdGV1clwiXG4gICAgKSB7XG4gICAgICB1cmwgPSBhZHJlc3NlLnZhbEVsZWNcbiAgICB9XG4gIH1cbiAgY29uc3QgbWF0Y2ggPSB1cmwhLm1hdGNoKC9eaHR0cHM6XFwvXFwvd3d3XFwuc2VuYXRcXC5mclxcL3NlbmF0ZXVyXFwvKC4qKVxcLmh0bWwkLylcbiAgY29uc3Qgc2VuYXRldXJTdGVtID0gbWF0Y2ghWzFdXG4gIHJldHVybiBzZW5hdGV1clN0ZW1cbn1cblxucmV0cmlldmVQaG90b3NTZW5hdGV1cnMoKVxuICAudGhlbigoZXJyb3IpID0+IHByb2Nlc3MuZXhpdChlcnJvciA/IDEgOiAwKSlcbiAgLmNhdGNoKChlcnJvcikgPT4ge1xuICAgIGNvbnNvbGUubG9nKGVycm9yKVxuICAgIHByb2Nlc3MuZXhpdCgyKVxuICB9KVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUVBO0FBSUE7QUFDQTtBQUNBO0FBTW9DO0FBQUEsK0NBZnBDO0FBQUE7QUFBQTtB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