@tricoteuses/assemblee
Version:
Retrieve, clean up & handle French Assemblée nationale's open data
265 lines (261 loc) • 34.3 kB
JavaScript
;
require("core-js/modules/es.symbol.js");
require("core-js/modules/es.symbol.description.js");
require("core-js/modules/es.symbol.iterator.js");
require("core-js/modules/es.array.from.js");
require("core-js/modules/es.array.iterator.js");
require("core-js/modules/es.array.slice.js");
require("core-js/modules/es.date.to-string.js");
require("core-js/modules/es.function.name.js");
require("core-js/modules/es.object.define-property.js");
require("core-js/modules/es.regexp.exec.js");
require("core-js/modules/es.regexp.to-string.js");
require("core-js/modules/es.string.iterator.js");
require("core-js/modules/web.dom-collections.iterator.js");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.cleanActeur = cleanActeur;
exports.cleanRapporteur = cleanRapporteur;
require("core-js/modules/es.array.filter.js");
require("core-js/modules/es.array.includes.js");
require("core-js/modules/es.array.is-array.js");
require("core-js/modules/es.array.map.js");
require("core-js/modules/es.array.sort.js");
require("core-js/modules/es.object.keys.js");
require("core-js/modules/es.object.to-string.js");
var _assert = _interopRequireDefault(require("assert"));
var _xml = require("./xml");
function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; }
function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, 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 o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }
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; } }
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; }
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); }
function cleanActeur(acteur) {
(0, _xml.cleanXmlArtefacts)(acteur);
_assert["default"].strictEqual(acteur.uid["@xsi:type"], "IdActeur_type");
acteur.uid = acteur.uid["#text"];
(0, _assert["default"])(acteur.uid);
var etatCivil = acteur.etatCivil;
{
(0, _xml.cleanXmlArtefacts)(etatCivil);
var ident = etatCivil.ident;
{
(0, _xml.cleanXmlArtefacts)(ident);
var infoNaissance = etatCivil.infoNaissance;
{
(0, _xml.cleanXmlArtefacts)(infoNaissance);
}
}
}
var profession = acteur.profession;
if (profession !== undefined) {
(0, _xml.cleanXmlArtefacts)(profession);
var socProcInsee = profession.socProcINSEE;
(0, _assert["default"])(socProcInsee);
(0, _xml.cleanXmlArtefacts)(socProcInsee);
delete profession.socProcINSEE;
profession.socProcInsee = socProcInsee;
}
var uriHatvp = acteur.uri_hatvp;
if (uriHatvp !== undefined) {
acteur.uriHatvp = uriHatvp;
delete acteur.uri_hatvp;
}
var adresses = acteur.adresses;
if (adresses !== undefined) {
adresses = adresses.adresse;
if (adresses === undefined) {
delete acteur.adresses;
adresses = undefined;
} else if (Array.isArray(adresses)) {
acteur.adresses = adresses;
} else {
_assert["default"].notStrictEqual(adresses, null);
_assert["default"].strictEqual(_typeof(adresses), "object");
acteur.adresses = adresses = [adresses];
}
if (adresses !== undefined) {
var _iterator = _createForOfIteratorHelper(adresses),
_step;
try {
for (_iterator.s(); !(_step = _iterator.n()).done;) {
var adresse = _step.value;
(0, _xml.cleanXmlArtefacts)(adresse);
var xsiType = adresse["@xsi:type"];
(0, _assert["default"])(["AdresseMail_Type", "AdressePostale_Type", "AdresseSiteWeb_Type", "AdresseTelephonique_Type"].includes(xsiType), "Unexpected \"@xsi:type\": ".concat(xsiType));
adresse.xsiType = xsiType;
delete adresse["@xsi:type"];
_assert["default"].notStrictEqual(adresse.uid, undefined);
_assert["default"].notStrictEqual(adresse.type, undefined);
_assert["default"].notStrictEqual(adresse.typeLibelle, undefined);
if (xsiType === "AdressePostale_Type") {
_assert["default"].strictEqual(adresse.adresseDeRattachement, undefined);
}
}
} catch (err) {
_iterator.e(err);
} finally {
_iterator.f();
}
}
}
var mandats = acteur.mandats;
if (mandats !== undefined) {
var mandat = mandats.mandat;
if (Array.isArray(mandat)) {
mandats = acteur.mandats = mandat;
} else if (_typeof(mandat) === "object") {
mandats = acteur.mandats = [mandat];
}
var _iterator2 = _createForOfIteratorHelper(mandats),
_step2;
try {
var _loop = function _loop() {
var mandat = _step2.value;
(0, _xml.cleanXmlArtefacts)(mandat);
var xsiType = mandat["@xsi:type"];
if (xsiType !== undefined) {
mandat.xsiType = xsiType;
delete mandat["@xsi:type"];
}
var infosQualite = mandat.infosQualite;
{
(0, _xml.cleanXmlArtefacts)(infosQualite);
}
var organes = mandat.organes;
delete mandat.organes;
var organesRefs = organes.organeRef;
(0, _assert["default"])(organesRefs);
if (!Array.isArray(organesRefs)) {
organesRefs = [organesRefs];
}
mandat.organesRefs = organesRefs;
var suppleant = mandat.suppleants;
delete mandat.suppleants;
if (suppleant) {
suppleant = suppleant.suppleant;
(0, _assert["default"])(suppleant);
mandat.suppleant = suppleant;
(0, _xml.cleanXmlArtefacts)(suppleant);
}
var election = mandat.election;
if (election !== undefined) {
(0, _xml.cleanXmlArtefacts)(election);
var lieu = election.lieu;
(0, _xml.cleanXmlArtefacts)(lieu);
}
var mandature = mandat.mandature;
if (mandature !== undefined) {
(0, _xml.cleanXmlArtefacts)(mandature);
}
_assert["default"].strictEqual(mandat.chambre, undefined);
// Replace collaborateurs with an array of collaborateurs.
var collaborateurs = mandat.collaborateurs;
if (collaborateurs !== undefined) {
var collaborateursArray = Array.isArray(collaborateurs) ? collaborateurs.filter(function (collaborateur) {
return collaborateur !== null;
}) : [collaborateurs];
collaborateurs = [];
collaborateursArray.map(function (_ref) {
var collaborateur = _ref.collaborateur;
if (Array.isArray(collaborateur)) {
var _iterator3 = _createForOfIteratorHelper(collaborateur),
_step3;
try {
for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
var collaborateurItem = _step3.value;
if (collaborateurItem !== null) {
collaborateurs.push(collaborateurItem);
}
}
} catch (err) {
_iterator3.e(err);
} finally {
_iterator3.f();
}
} else if (collaborateur) {
collaborateurs.push(collaborateur);
}
});
if (collaborateurs.length === 0) {
delete mandat.collaborateurs;
collaborateurs = undefined;
} else {
mandat.collaborateurs = collaborateurs;
}
var _iterator4 = _createForOfIteratorHelper(collaborateurs || []),
_step4;
try {
for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {
var collaborateur = _step4.value;
(0, _xml.cleanXmlArtefacts)(collaborateur);
_assert["default"].strictEqual(collaborateur.dateDebut, undefined);
_assert["default"].strictEqual(collaborateur.dateFin, undefined);
}
} catch (err) {
_iterator4.e(err);
} finally {
_iterator4.f();
}
}
var infosHorsSian = mandat.InfosHorsSIAN;
if (infosHorsSian !== undefined) {
(0, _xml.cleanXmlArtefacts)(infosHorsSian);
_assert["default"].strictEqual(infosHorsSian.HATVP_URI, undefined);
_assert["default"].strictEqual(Object.keys(infosHorsSian).length, 0);
delete mandat.InfosHorsSIAN;
}
};
for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
_loop();
}
// Sort mandats to ease comparison of different open data files.
} catch (err) {
_iterator2.e(err);
} finally {
_iterator2.f();
}
mandats.sort(function (a, b) {
return a.uid.length === b.uid.length ? a.uid.localeCompare(b.uid) : a.uid.length - b.uid.length;
});
}
var deports = acteur.deports;
if (deports !== undefined) {
var deport = deports.deport;
if (Array.isArray(deport)) {
deports = acteur.deports = deport;
} else if (_typeof(deport) === "object") {
deports = acteur.deports = [deport];
}
var _iterator5 = _createForOfIteratorHelper(deports),
_step5;
try {
for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {
var _deport = _step5.value;
(0, _xml.cleanXmlArtefacts)(_deport);
var cible = _deport.cible;
{
(0, _xml.cleanXmlArtefacts)(cible);
_assert["default"].strictEqual(cible.references, undefined);
}
}
// Sort deports to ease comparison of different open data files.
} catch (err) {
_iterator5.e(err);
} finally {
_iterator5.f();
}
deports.sort(function (a, b) {
return a.uid.length === b.uid.length ? a.uid.localeCompare(b.uid) : a.uid.length - b.uid.length;
});
}
}
function cleanRapporteur(rapporteur) {
var etudePlfRef = rapporteur.etudePLFRef;
if (rapporteur.etudePLFRef !== undefined) {
delete rapporteur.etudePLFRef;
rapporteur.etudePlfRef = etudePlfRef;
}
}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfYXNzZXJ0IiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfeG1sIiwiZSIsIl9fZXNNb2R1bGUiLCJfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlciIsInIiLCJ0IiwiU3ltYm9sIiwiaXRlcmF0b3IiLCJBcnJheSIsImlzQXJyYXkiLCJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCJsZW5ndGgiLCJfbiIsIkYiLCJzIiwibiIsImRvbmUiLCJ2YWx1ZSIsImYiLCJUeXBlRXJyb3IiLCJvIiwiYSIsInUiLCJjYWxsIiwibmV4dCIsIl9hcnJheUxpa2VUb0FycmF5IiwidG9TdHJpbmciLCJzbGljZSIsImNvbnN0cnVjdG9yIiwibmFtZSIsImZyb20iLCJ0ZXN0IiwiX3R5cGVvZiIsInByb3RvdHlwZSIsImNsZWFuQWN0ZXVyIiwiYWN0ZXVyIiwiY2xlYW5YbWxBcnRlZmFjdHMiLCJhc3NlcnQiLCJzdHJpY3RFcXVhbCIsInVpZCIsImV0YXRDaXZpbCIsImlkZW50IiwiaW5mb05haXNzYW5jZSIsInByb2Zlc3Npb24iLCJ1bmRlZmluZWQiLCJzb2NQcm9jSW5zZWUiLCJzb2NQcm9jSU5TRUUiLCJ1cmlIYXR2cCIsInVyaV9oYXR2cCIsImFkcmVzc2VzIiwiYWRyZXNzZSIsIm5vdFN0cmljdEVxdWFsIiwiX2l0ZXJhdG9yIiwiX3N0ZXAiLCJ4c2lUeXBlIiwiaW5jbHVkZXMiLCJjb25jYXQiLCJ0eXBlIiwidHlwZUxpYmVsbGUiLCJhZHJlc3NlRGVSYXR0YWNoZW1lbnQiLCJlcnIiLCJtYW5kYXRzIiwibWFuZGF0IiwiX2l0ZXJhdG9yMiIsIl9zdGVwMiIsIl9sb29wIiwiaW5mb3NRdWFsaXRlIiwib3JnYW5lcyIsIm9yZ2FuZXNSZWZzIiwib3JnYW5lUmVmIiwic3VwcGxlYW50Iiwic3VwcGxlYW50cyIsImVsZWN0aW9uIiwibGlldSIsIm1hbmRhdHVyZSIsImNoYW1icmUiLCJjb2xsYWJvcmF0ZXVycyIsImNvbGxhYm9yYXRldXJzQXJyYXkiLCJmaWx0ZXIiLCJjb2xsYWJvcmF0ZXVyIiwibWFwIiwiX3JlZiIsIl9pdGVyYXRvcjMiLCJfc3RlcDMiLCJjb2xsYWJvcmF0ZXVySXRlbSIsInB1c2giLCJfaXRlcmF0b3I0IiwiX3N0ZXA0IiwiZGF0ZURlYnV0IiwiZGF0ZUZpbiIsImluZm9zSG9yc1NpYW4iLCJJbmZvc0hvcnNTSUFOIiwiSEFUVlBfVVJJIiwiT2JqZWN0Iiwia2V5cyIsInNvcnQiLCJiIiwibG9jYWxlQ29tcGFyZSIsImRlcG9ydHMiLCJkZXBvcnQiLCJfaXRlcmF0b3I1IiwiX3N0ZXA1IiwiY2libGUiLCJyZWZlcmVuY2VzIiwiY2xlYW5SYXBwb3J0ZXVyIiwicmFwcG9ydGV1ciIsImV0dWRlUGxmUmVmIiwiZXR1ZGVQTEZSZWYiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvY2xlYW5lcnMvYWN0ZXVycy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXNzZXJ0IGZyb20gXCJhc3NlcnRcIlxuXG5pbXBvcnQgeyBjbGVhblhtbEFydGVmYWN0cyB9IGZyb20gXCIuL3htbFwiXG5cbmV4cG9ydCBmdW5jdGlvbiBjbGVhbkFjdGV1cihhY3RldXI6IGFueSk6IHZvaWQge1xuICBjbGVhblhtbEFydGVmYWN0cyhhY3RldXIpXG5cbiAgYXNzZXJ0LnN0cmljdEVxdWFsKGFjdGV1ci51aWRbXCJAeHNpOnR5cGVcIl0sIFwiSWRBY3RldXJfdHlwZVwiKVxuICBhY3RldXIudWlkID0gYWN0ZXVyLnVpZFtcIiN0ZXh0XCJdXG4gIGFzc2VydChhY3RldXIudWlkKVxuXG4gIGNvbnN0IGV0YXRDaXZpbCA9IGFjdGV1ci5ldGF0Q2l2aWxcbiAge1xuICAgIGNsZWFuWG1sQXJ0ZWZhY3RzKGV0YXRDaXZpbClcblxuICAgIGNvbnN0IGlkZW50ID0gZXRhdENpdmlsLmlkZW50XG4gICAge1xuICAgICAgY2xlYW5YbWxBcnRlZmFjdHMoaWRlbnQpXG5cbiAgICAgIGNvbnN0IGluZm9OYWlzc2FuY2UgPSBldGF0Q2l2aWwuaW5mb05haXNzYW5jZVxuICAgICAge1xuICAgICAgICBjbGVhblhtbEFydGVmYWN0cyhpbmZvTmFpc3NhbmNlKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHByb2Zlc3Npb24gPSBhY3RldXIucHJvZmVzc2lvblxuICBpZiAocHJvZmVzc2lvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgY2xlYW5YbWxBcnRlZmFjdHMocHJvZmVzc2lvbilcblxuICAgIGNvbnN0IHNvY1Byb2NJbnNlZSA9IHByb2Zlc3Npb24uc29jUHJvY0lOU0VFXG4gICAgYXNzZXJ0KHNvY1Byb2NJbnNlZSlcbiAgICBjbGVhblhtbEFydGVmYWN0cyhzb2NQcm9jSW5zZWUpXG4gICAgZGVsZXRlIHByb2Zlc3Npb24uc29jUHJvY0lOU0VFXG4gICAgcHJvZmVzc2lvbi5zb2NQcm9jSW5zZWUgPSBzb2NQcm9jSW5zZWVcbiAgfVxuXG4gIGNvbnN0IHVyaUhhdHZwID0gYWN0ZXVyLnVyaV9oYXR2cFxuICBpZiAodXJpSGF0dnAgIT09IHVuZGVmaW5lZCkge1xuICAgIGFjdGV1ci51cmlIYXR2cCA9IHVyaUhhdHZwXG4gICAgZGVsZXRlIGFjdGV1ci51cmlfaGF0dnBcbiAgfVxuXG4gIGxldCBhZHJlc3NlcyA9IGFjdGV1ci5hZHJlc3Nlc1xuICBpZiAoYWRyZXNzZXMgIT09IHVuZGVmaW5lZCkge1xuICAgIGFkcmVzc2VzID0gYWRyZXNzZXMuYWRyZXNzZVxuICAgIGlmIChhZHJlc3NlcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBkZWxldGUgYWN0ZXVyLmFkcmVzc2VzXG4gICAgICBhZHJlc3NlcyA9IHVuZGVmaW5lZFxuICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShhZHJlc3NlcykpIHtcbiAgICAgIGFjdGV1ci5hZHJlc3NlcyA9IGFkcmVzc2VzXG4gICAgfSBlbHNlIHtcbiAgICAgIGFzc2VydC5ub3RTdHJpY3RFcXVhbChhZHJlc3NlcywgbnVsbClcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbCh0eXBlb2YgYWRyZXNzZXMsIFwib2JqZWN0XCIpXG4gICAgICBhY3RldXIuYWRyZXNzZXMgPSBhZHJlc3NlcyA9IFthZHJlc3Nlc11cbiAgICB9XG4gICAgaWYgKGFkcmVzc2VzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGZvciAoY29uc3QgYWRyZXNzZSBvZiBhZHJlc3Nlcykge1xuICAgICAgICBjbGVhblhtbEFydGVmYWN0cyhhZHJlc3NlKVxuXG4gICAgICAgIGNvbnN0IHhzaVR5cGUgPSBhZHJlc3NlW1wiQHhzaTp0eXBlXCJdXG4gICAgICAgIGFzc2VydChcbiAgICAgICAgICBbXG4gICAgICAgICAgICBcIkFkcmVzc2VNYWlsX1R5cGVcIixcbiAgICAgICAgICAgIFwiQWRyZXNzZVBvc3RhbGVfVHlwZVwiLFxuICAgICAgICAgICAgXCJBZHJlc3NlU2l0ZVdlYl9UeXBlXCIsXG4gICAgICAgICAgICBcIkFkcmVzc2VUZWxlcGhvbmlxdWVfVHlwZVwiLFxuICAgICAgICAgIF0uaW5jbHVkZXMoeHNpVHlwZSksXG4gICAgICAgICAgYFVuZXhwZWN0ZWQgXCJAeHNpOnR5cGVcIjogJHt4c2lUeXBlfWAsXG4gICAgICAgIClcbiAgICAgICAgYWRyZXNzZS54c2lUeXBlID0geHNpVHlwZVxuICAgICAgICBkZWxldGUgYWRyZXNzZVtcIkB4c2k6dHlwZVwiXVxuXG4gICAgICAgIGFzc2VydC5ub3RTdHJpY3RFcXVhbChhZHJlc3NlLnVpZCwgdW5kZWZpbmVkKVxuICAgICAgICBhc3NlcnQubm90U3RyaWN0RXF1YWwoYWRyZXNzZS50eXBlLCB1bmRlZmluZWQpXG4gICAgICAgIGFzc2VydC5ub3RTdHJpY3RFcXVhbChhZHJlc3NlLnR5cGVMaWJlbGxlLCB1bmRlZmluZWQpXG5cbiAgICAgICAgaWYgKHhzaVR5cGUgPT09IFwiQWRyZXNzZVBvc3RhbGVfVHlwZVwiKSB7XG4gICAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGFkcmVzc2UuYWRyZXNzZURlUmF0dGFjaGVtZW50LCB1bmRlZmluZWQpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBsZXQgbWFuZGF0cyA9IGFjdGV1ci5tYW5kYXRzXG4gIGlmIChtYW5kYXRzICE9PSB1bmRlZmluZWQpIHtcbiAgICBsZXQgbWFuZGF0ID0gbWFuZGF0cy5tYW5kYXRcbiAgICBpZiAoQXJyYXkuaXNBcnJheShtYW5kYXQpKSB7XG4gICAgICBtYW5kYXRzID0gYWN0ZXVyLm1hbmRhdHMgPSBtYW5kYXRcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBtYW5kYXQgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgIG1hbmRhdHMgPSBhY3RldXIubWFuZGF0cyA9IFttYW5kYXRdXG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBtYW5kYXQgb2YgbWFuZGF0cykge1xuICAgICAgY2xlYW5YbWxBcnRlZmFjdHMobWFuZGF0KVxuXG4gICAgICBjb25zdCB4c2lUeXBlID0gbWFuZGF0W1wiQHhzaTp0eXBlXCJdXG4gICAgICBpZiAoeHNpVHlwZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIG1hbmRhdC54c2lUeXBlID0geHNpVHlwZVxuICAgICAgICBkZWxldGUgbWFuZGF0W1wiQHhzaTp0eXBlXCJdXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGluZm9zUXVhbGl0ZSA9IG1hbmRhdC5pbmZvc1F1YWxpdGVcbiAgICAgIHtcbiAgICAgICAgY2xlYW5YbWxBcnRlZmFjdHMoaW5mb3NRdWFsaXRlKVxuICAgICAgfVxuXG4gICAgICBjb25zdCBvcmdhbmVzID0gbWFuZGF0Lm9yZ2FuZXNcbiAgICAgIGRlbGV0ZSBtYW5kYXQub3JnYW5lc1xuICAgICAgbGV0IG9yZ2FuZXNSZWZzID0gb3JnYW5lcy5vcmdhbmVSZWZcbiAgICAgIGFzc2VydChvcmdhbmVzUmVmcylcbiAgICAgIGlmICghQXJyYXkuaXNBcnJheShvcmdhbmVzUmVmcykpIHtcbiAgICAgICAgb3JnYW5lc1JlZnMgPSBbb3JnYW5lc1JlZnNdXG4gICAgICB9XG4gICAgICBtYW5kYXQub3JnYW5lc1JlZnMgPSBvcmdhbmVzUmVmc1xuXG4gICAgICBsZXQgc3VwcGxlYW50ID0gbWFuZGF0LnN1cHBsZWFudHNcbiAgICAgIGRlbGV0ZSBtYW5kYXQuc3VwcGxlYW50c1xuICAgICAgaWYgKHN1cHBsZWFudCkge1xuICAgICAgICBzdXBwbGVhbnQgPSBzdXBwbGVhbnQuc3VwcGxlYW50XG4gICAgICAgIGFzc2VydChzdXBwbGVhbnQpXG4gICAgICAgIG1hbmRhdC5zdXBwbGVhbnQgPSBzdXBwbGVhbnRcblxuICAgICAgICBjbGVhblhtbEFydGVmYWN0cyhzdXBwbGVhbnQpXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGVsZWN0aW9uID0gbWFuZGF0LmVsZWN0aW9uXG4gICAgICBpZiAoZWxlY3Rpb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjbGVhblhtbEFydGVmYWN0cyhlbGVjdGlvbilcblxuICAgICAgICBjb25zdCBsaWV1ID0gZWxlY3Rpb24ubGlldVxuICAgICAgICBjbGVhblhtbEFydGVmYWN0cyhsaWV1KVxuICAgICAgfVxuXG4gICAgICBjb25zdCBtYW5kYXR1cmUgPSBtYW5kYXQubWFuZGF0dXJlXG4gICAgICBpZiAobWFuZGF0dXJlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY2xlYW5YbWxBcnRlZmFjdHMobWFuZGF0dXJlKVxuICAgICAgfVxuXG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwobWFuZGF0LmNoYW1icmUsIHVuZGVmaW5lZClcblxuICAgICAgLy8gUmVwbGFjZSBjb2xsYWJvcmF0ZXVycyB3aXRoIGFuIGFycmF5IG9mIGNvbGxhYm9yYXRldXJzLlxuICAgICAgbGV0IGNvbGxhYm9yYXRldXJzID0gbWFuZGF0LmNvbGxhYm9yYXRldXJzXG4gICAgICBpZiAoY29sbGFib3JhdGV1cnMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb25zdCBjb2xsYWJvcmF0ZXVyc0FycmF5ID0gQXJyYXkuaXNBcnJheShjb2xsYWJvcmF0ZXVycylcbiAgICAgICAgICA/IGNvbGxhYm9yYXRldXJzLmZpbHRlcigoY29sbGFib3JhdGV1cikgPT4gY29sbGFib3JhdGV1ciAhPT0gbnVsbClcbiAgICAgICAgICA6IFtjb2xsYWJvcmF0ZXVyc11cbiAgICAgICAgY29sbGFib3JhdGV1cnMgPSBbXVxuICAgICAgICBjb2xsYWJvcmF0ZXVyc0FycmF5Lm1hcCgoeyBjb2xsYWJvcmF0ZXVyIH0pID0+IHtcbiAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShjb2xsYWJvcmF0ZXVyKSkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBjb2xsYWJvcmF0ZXVySXRlbSBvZiBjb2xsYWJvcmF0ZXVyKSB7XG4gICAgICAgICAgICAgIGlmIChjb2xsYWJvcmF0ZXVySXRlbSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGNvbGxhYm9yYXRldXJzLnB1c2goY29sbGFib3JhdGV1ckl0ZW0pXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2UgaWYgKGNvbGxhYm9yYXRldXIpIHtcbiAgICAgICAgICAgIGNvbGxhYm9yYXRldXJzLnB1c2goY29sbGFib3JhdGV1cilcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICAgIGlmIChjb2xsYWJvcmF0ZXVycy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICBkZWxldGUgbWFuZGF0LmNvbGxhYm9yYXRldXJzXG4gICAgICAgICAgY29sbGFib3JhdGV1cnMgPSB1bmRlZmluZWRcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBtYW5kYXQuY29sbGFib3JhdGV1cnMgPSBjb2xsYWJvcmF0ZXVyc1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChjb25zdCBjb2xsYWJvcmF0ZXVyIG9mIGNvbGxhYm9yYXRldXJzIHx8IFtdKSB7XG4gICAgICAgICAgY2xlYW5YbWxBcnRlZmFjdHMoY29sbGFib3JhdGV1cilcblxuICAgICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChjb2xsYWJvcmF0ZXVyLmRhdGVEZWJ1dCwgdW5kZWZpbmVkKVxuICAgICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChjb2xsYWJvcmF0ZXVyLmRhdGVGaW4sIHVuZGVmaW5lZClcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjb25zdCBpbmZvc0hvcnNTaWFuID0gbWFuZGF0LkluZm9zSG9yc1NJQU5cbiAgICAgIGlmIChpbmZvc0hvcnNTaWFuICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY2xlYW5YbWxBcnRlZmFjdHMoaW5mb3NIb3JzU2lhbilcblxuICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoaW5mb3NIb3JzU2lhbi5IQVRWUF9VUkksIHVuZGVmaW5lZClcbiAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKE9iamVjdC5rZXlzKGluZm9zSG9yc1NpYW4pLmxlbmd0aCwgMClcbiAgICAgICAgZGVsZXRlIG1hbmRhdC5JbmZvc0hvcnNTSUFOXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gU29ydCBtYW5kYXRzIHRvIGVhc2UgY29tcGFyaXNvbiBvZiBkaWZmZXJlbnQgb3BlbiBkYXRhIGZpbGVzLlxuICAgIG1hbmRhdHMuc29ydCgoYTogeyB1aWQ6IHN0cmluZyB9LCBiOiB7IHVpZDogc3RyaW5nIH0pID0+XG4gICAgICBhLnVpZC5sZW5ndGggPT09IGIudWlkLmxlbmd0aFxuICAgICAgICA/IGEudWlkLmxvY2FsZUNvbXBhcmUoYi51aWQpXG4gICAgICAgIDogYS51aWQubGVuZ3RoIC0gYi51aWQubGVuZ3RoLFxuICAgIClcbiAgfVxuXG4gIGxldCBkZXBvcnRzID0gYWN0ZXVyLmRlcG9ydHNcbiAgaWYgKGRlcG9ydHMgIT09IHVuZGVmaW5lZCkge1xuICAgIGxldCBkZXBvcnQgPSBkZXBvcnRzLmRlcG9ydFxuICAgIGlmIChBcnJheS5pc0FycmF5KGRlcG9ydCkpIHtcbiAgICAgIGRlcG9ydHMgPSBhY3RldXIuZGVwb3J0cyA9IGRlcG9ydFxuICAgIH0gZWxzZSBpZiAodHlwZW9mIGRlcG9ydCA9PT0gXCJvYmplY3RcIikge1xuICAgICAgZGVwb3J0cyA9IGFjdGV1ci5kZXBvcnRzID0gW2RlcG9ydF1cbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGRlcG9ydCBvZiBkZXBvcnRzKSB7XG4gICAgICBjbGVhblhtbEFydGVmYWN0cyhkZXBvcnQpXG5cbiAgICAgIGNvbnN0IGNpYmxlID0gZGVwb3J0LmNpYmxlXG4gICAgICB7XG4gICAgICAgIGNsZWFuWG1sQXJ0ZWZhY3RzKGNpYmxlKVxuXG4gICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChjaWJsZS5yZWZlcmVuY2VzLCB1bmRlZmluZWQpXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gU29ydCBkZXBvcnRzIHRvIGVhc2UgY29tcGFyaXNvbiBvZiBkaWZmZXJlbnQgb3BlbiBkYXRhIGZpbGVzLlxuICAgIGRlcG9ydHMuc29ydCgoYTogeyB1aWQ6IHN0cmluZyB9LCBiOiB7IHVpZDogc3RyaW5nIH0pID0+XG4gICAgICBhLnVpZC5sZW5ndGggPT09IGIudWlkLmxlbmd0aFxuICAgICAgICA/IGEudWlkLmxvY2FsZUNvbXBhcmUoYi51aWQpXG4gICAgICAgIDogYS51aWQubGVuZ3RoIC0gYi51aWQubGVuZ3RoLFxuICAgIClcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY2xlYW5SYXBwb3J0ZXVyKHJhcHBvcnRldXI6IGFueSkge1xuICBjb25zdCBldHVkZVBsZlJlZiA9IHJhcHBvcnRldXIuZXR1ZGVQTEZSZWZcbiAgaWYgKHJhcHBvcnRldXIuZXR1ZGVQTEZSZWYgIT09IHVuZGVmaW5lZCkge1xuICAgIGRlbGV0ZSByYXBwb3J0ZXVyLmV0dWRlUExGUmVmXG4gICAgcmFwcG9ydGV1ci5ldHVkZVBsZlJlZiA9IGV0dWRlUGxmUmVmXG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsSUFBQUEsT0FBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBRUEsSUFBQUMsSUFBQSxHQUFBRCxPQUFBO0FBQXlDLFNBQUFELHVCQUFBRyxDQUFBLFdBQUFBLENBQUEsSUFBQUEs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LE9BQUEsQ0FBT21FLE1BQU0sTUFBSyxRQUFRLEVBQUU7TUFDckNELE9BQU8sR0FBRy9ELE1BQU0sQ0FBQytELE9BQU8sR0FBRyxDQUFDQyxNQUFNLENBQUM7SUFDckM7SUFBQyxJQUFBQyxVQUFBLEdBQUFqRywwQkFBQSxDQUVvQitGLE9BQU87TUFBQUcsTUFBQTtJQUFBO01BQTVCLEtBQUFELFVBQUEsQ0FBQXRGLENBQUEsTUFBQXVGLE1BQUEsR0FBQUQsVUFBQSxDQUFBckYsQ0FBQSxJQUFBQyxJQUFBLEdBQThCO1FBQUEsSUFBbkJtRixPQUFNLEdBQUFFLE1BQUEsQ0FBQXBGLEtBQUE7UUFDZixJQUFBbUIsc0JBQWlCLEVBQUMrRCxPQUFNLENBQUM7UUFFekIsSUFBTUcsS0FBSyxHQUFHSCxPQUFNLENBQUNHLEtBQUs7UUFDMUI7VUFDRSxJQUFBbEUsc0JBQWlCLEVBQUNrRSxLQUFLLENBQUM7VUFFeEJqRSxrQkFBTSxDQUFDQyxXQUFXLENBQUNnRSxLQUFLLENBQUNDLFVBQVUsRUFBRTNELFNBQVMsQ0FBQztRQUNqRDtNQUNGOztNQUVBO0lBQUEsU0FBQWdCLEdBQUE7TUFBQXdDLFVBQUEsQ0FBQW5HLENBQUEsQ0FBQTJELEdBQUE7SUFBQTtNQUFBd0MsVUFBQSxDQUFBbEYsQ0FBQTtJQUFBO0lBQ0FnRixPQUFPLENBQUNILElBQUksQ0FBQyxVQUFDMUUsQ0FBa0IsRUFBRTJFLENBQWtCO01BQUEsT0FDbEQzRSxDQUFDLENBQUNrQixHQUFHLENBQUM1QixNQUFNLEtBQUtxRixDQUFDLENBQUN6RCxHQUFHLENBQUM1QixNQUFNLEdBQ3pCVSxDQUFDLENBQUNrQixHQUFHLENBQUMwRCxhQUFhLENBQUNELENBQUMsQ0FBQ3pELEdBQUcsQ0FBQyxHQUMxQmxCLENBQUMsQ0FBQ2tCLEdBQUcsQ0FBQzVCLE1BQU0sR0FBR3FGLENBQUMsQ0FBQ3pELEdBQUcsQ0FBQzVCLE1BQU07SUFBQSxDQUNqQyxDQUFDO0VBQ0g7QUFDRjtBQUVPLFNBQVM2RixlQUFlQSxDQUFDQyxVQUFlLEVBQUU7RUFDL0MsSUFBTUMsV0FBVyxHQUFHRCxVQUFVLENBQUNFLFdBQVc7RUFDMUMsSUFBSUYsVUFBVSxDQUFDRSxXQUFXLEtBQUsvRCxTQUFTLEVBQUU7SUFDeEMsT0FBTzZELFVBQVUsQ0FBQ0UsV0FBVztJQUM3QkYsVUFBVSxDQUFDQyxXQUFXLEdBQUdBLFdBQVc7RUFDdEM7QUFDRiIsImlnbm9yZUxpc3QiOltdfQ==