UNPKG

@tricoteuses/assemblee

Version:

Retrieve, clean up & handle French Assemblée nationale's open data

312 lines (311 loc) 43.8 kB
"use strict"; require("core-js/modules/es.array.from.js"); require("core-js/modules/es.array.slice.js"); require("core-js/modules/es.function.name.js"); require("core-js/modules/es.object.define-property.js"); require("core-js/modules/es.regexp.to-string.js"); Object.defineProperty(exports, "__esModule", { value: true }); exports.cleanReunion = cleanReunion; 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.filter.js"); require("core-js/modules/es.array.is-array.js"); require("core-js/modules/es.array.iterator.js"); require("core-js/modules/es.date.to-string.js"); require("core-js/modules/es.object.to-string.js"); require("core-js/modules/es.regexp.exec.js"); require("core-js/modules/es.string.iterator.js"); require("core-js/modules/web.dom-collections.iterator.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 cleanCycleDeVie(cycleDeVie) { (0, _xml.cleanXmlArtefacts)(cycleDeVie); var chrono = cycleDeVie.chrono; (0, _assert["default"])(chrono); { (0, _xml.cleanXmlArtefacts)(chrono); var creation = chrono.creation; _assert["default"].strictEqual(_typeof(creation), "string"); creation = new Date(creation); chrono.creation = creation; var cloture = chrono.cloture; if (cloture !== undefined) { _assert["default"].strictEqual(_typeof(cloture), "string"); cloture = new Date(cloture); chrono.cloture = cloture; } } } function cleanReunion(reunion) { (0, _xml.cleanXmlArtefacts)(reunion); (0, _xml.cleanBooleanAttribute)(reunion, "captationVideo"); (0, _xml.cleanBooleanAttribute)(reunion, "comiteSecret"); (0, _xml.cleanBooleanAttribute)(reunion, "ouverturePresse"); var xsiType = reunion["@xsi:type"]; if (xsiType !== undefined) { reunion.xsiType = xsiType; delete reunion["@xsi:type"]; } var timestampDebut = reunion.timeStampDebut; _assert["default"].notStrictEqual(timestampDebut, undefined); reunion.timestampDebut = timestampDebut; delete reunion.timeStampDebut; var timestampFin = reunion.timeStampFin; if (timestampFin !== undefined) { _assert["default"].strictEqual(_typeof(timestampFin), "string"); timestampFin = new Date(timestampFin); reunion.timestampFin = timestampFin; delete reunion.timeStampFin; } var lieu = reunion.lieu; if (lieu !== undefined) { (0, _xml.cleanXmlArtefacts)(lieu); } var cycleDeVie = reunion.cycleDeVie; _assert["default"].notStrictEqual(cycleDeVie, undefined); cleanCycleDeVie(cycleDeVie); var demandeurs = reunion.demandeurs; if (demandeurs !== undefined) { var acteurs = demandeurs.acteur; if (acteurs !== undefined) { if (!Array.isArray(acteurs)) { _assert["default"].notStrictEqual(acteurs, null); _assert["default"].strictEqual(_typeof(acteurs), "object"); acteurs = [acteurs]; } demandeurs.acteurs = acteurs; delete demandeurs.acteur; var _iterator = _createForOfIteratorHelper(acteurs), _step; try { for (_iterator.s(); !(_step = _iterator.n()).done;) { var acteur = _step.value; (0, _xml.cleanXmlArtefacts)(acteur); } } catch (err) { _iterator.e(err); } finally { _iterator.f(); } } var organe = demandeurs.organe; if (organe !== undefined) { (0, _xml.cleanXmlArtefacts)(organe); } } var demandeur = reunion.demandeur; if (demandeur !== undefined) { _assert["default"].strictEqual(reunion.demandeurs, undefined); delete reunion.demandeur; var _acteur = demandeur.acteur; if (_acteur !== undefined) { _assert["default"].notStrictEqual(_acteur, null); _assert["default"].strictEqual(_typeof(_acteur), "object"); var _acteurs = [_acteur]; demandeur.acteurs = _acteurs; delete demandeur.acteur; reunion.demandeurs = demandeur; for (var _i = 0, _acteurs2 = _acteurs; _i < _acteurs2.length; _i++) { var _acteur2 = _acteurs2[_i]; (0, _xml.cleanXmlArtefacts)(_acteur2); } } var _organe = demandeur.organe; if (_organe !== undefined) { (0, _xml.cleanXmlArtefacts)(_organe); } } var participants = reunion.participants; if (participants !== undefined) { (0, _xml.cleanXmlArtefacts)(participants); var participantsInternes = participants.participantsInternes; if (participantsInternes !== undefined) { participantsInternes = participantsInternes.participantInterne; if (!Array.isArray(participantsInternes)) { _assert["default"].notStrictEqual(participantsInternes, null); _assert["default"].strictEqual(_typeof(participantsInternes), "object"); participantsInternes = [participantsInternes]; } participants.participantsInternes = participantsInternes; } var personnesAuditionnees = participants.personnesAuditionnees; if (personnesAuditionnees !== undefined) { personnesAuditionnees = personnesAuditionnees.personneAuditionnee; if (personnesAuditionnees === null) { delete participants.personnesAuditionnees; } else { if (!Array.isArray(personnesAuditionnees)) { // assert.notStrictEqual(personnesAuditionnees, null) _assert["default"].strictEqual(_typeof(personnesAuditionnees), "object"); personnesAuditionnees = [personnesAuditionnees]; } personnesAuditionnees = personnesAuditionnees.filter(function (personneAudionnee) { return personneAudionnee !== null; }); if (personnesAuditionnees.length > 0) { participants.personnesAuditionnees = personnesAuditionnees; } else { delete participants.personnesAuditionnees; } var _iterator2 = _createForOfIteratorHelper(personnesAuditionnees), _step2; try { for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) { var personneAudionnee = _step2.value; var _xsiType = personneAudionnee.uid["@xsi:type"]; (0, _assert["default"])(_xsiType); personneAudionnee.xsiType = _xsiType; var uid = personneAudionnee.uid["#text"]; (0, _assert["default"])(uid); personneAudionnee.uid = uid; var ident = personneAudionnee.ident; (0, _assert["default"])(ident); { (0, _xml.cleanXmlArtefacts)(ident); } } } catch (err) { _iterator2.e(err); } finally { _iterator2.f(); } } } } if (reunion.ODJ !== undefined) { var odj = reunion.ODJ; reunion.odj = odj; delete reunion.ODJ; { (0, _xml.cleanXmlArtefacts)(odj); var convocationOdj = odj.convocationODJ; if (convocationOdj !== undefined) { if (Array.isArray(convocationOdj.item)) { convocationOdj = convocationOdj.item; } else { (0, _assert["default"])(convocationOdj.item); convocationOdj = [convocationOdj.item]; } odj.convocationOdj = convocationOdj; delete odj.convocationODJ; } var resumeOdj = odj.resumeODJ; if (resumeOdj !== undefined) { if (Array.isArray(resumeOdj.item)) { resumeOdj = resumeOdj.item; } else { (0, _assert["default"])(resumeOdj.item); resumeOdj = [resumeOdj.item]; } odj.resumeOdj = resumeOdj; delete odj.resumeODJ; } var pointsOdj = odj.pointsODJ; if (pointsOdj !== undefined) { var pointOdj = pointsOdj.pointODJ; if (Array.isArray(pointOdj)) { pointsOdj = pointOdj; } else { (0, _assert["default"])(pointOdj); pointsOdj = [pointOdj]; } odj.pointsOdj = pointsOdj; var _iterator3 = _createForOfIteratorHelper(pointsOdj), _step3; try { for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) { var _pointOdj = _step3.value; (0, _xml.cleanXmlArtefacts)(_pointOdj); (0, _xml.cleanBooleanAttribute)(_pointOdj, "comiteSecret"); var _xsiType2 = _pointOdj["@xsi:type"]; if (_xsiType2 !== undefined) { _pointOdj.xsiType = _xsiType2; delete _pointOdj["@xsi:type"]; } var _cycleDeVie = _pointOdj.cycleDeVie; _assert["default"].notStrictEqual(_cycleDeVie, undefined); cleanCycleDeVie(_cycleDeVie); _assert["default"].strictEqual(_pointOdj.demandeurPoint, undefined); var dossiersLegislatifsRefs = _pointOdj.dossiersLegislatifsRefs; if (dossiersLegislatifsRefs !== undefined) { if (Array.isArray(dossiersLegislatifsRefs.dossierRef)) { dossiersLegislatifsRefs = dossiersLegislatifsRefs.dossierRef; } else { (0, _assert["default"])(dossiersLegislatifsRefs.dossierRef); dossiersLegislatifsRefs = [dossiersLegislatifsRefs.dossierRef]; } _pointOdj.dossiersLegislatifsRefs = dossiersLegislatifsRefs; } _pointOdj.typePointOdj = _pointOdj.typePointODJ; delete _pointOdj.typePointODJ; _assert["default"].strictEqual(_pointOdj.textesAssocies, undefined); _pointOdj.natureTravauxOdj = _pointOdj.natureTravauxODJ; delete _pointOdj.natureTravauxODJ; var dateConfPres = _pointOdj.dateConfPres; if (dateConfPres !== undefined) { _assert["default"].strictEqual(_typeof(dateConfPres), "string"); (0, _assert["default"])(/^\d{4}-\d{2}-\d{2}\+\d{2}:00$/.test(dateConfPres)); dateConfPres = new Date(dateConfPres.split("+")[0]); _pointOdj.dateConfPres = dateConfPres; } var dateLettreMinistre = _pointOdj.dateLettreMinistre; if (dateLettreMinistre !== undefined) { _assert["default"].strictEqual(_typeof(dateLettreMinistre), "string"); (0, _assert["default"])(/^\d{4}-\d{2}-\d{2}\+\d{2}:00$/.test(dateLettreMinistre)); dateLettreMinistre = new Date(dateLettreMinistre.split("+")[0]); _pointOdj.dateLettreMinistre = dateLettreMinistre; } } } catch (err) { _iterator3.e(err); } finally { _iterator3.f(); } delete odj.pointsODJ; } } } var identifiants = reunion.identifiants; if (identifiants !== undefined) { (0, _xml.cleanXmlArtefacts)(identifiants); var numSeanceJo = identifiants.numSeanceJO; if (numSeanceJo !== undefined) { identifiants.numSeanceJo = numSeanceJo; delete identifiants.numSeanceJO; } var idJo = identifiants.idJO; if (idJo !== undefined) { identifiants.idJo = idJo; delete identifiants.idJO; } var dateSeance = identifiants.DateSeance; _assert["default"].strictEqual(_typeof(dateSeance), "string"); (0, _assert["default"])(/^\d{4}-\d{2}-\d{2}\+\d{2}:00$/.test(dateSeance)); dateSeance = new Date(dateSeance.split("+")[0]); identifiants.dateSeance = dateSeance; delete identifiants.DateSeance; } var infosReunionsInternationale = reunion.infosReunionsInternationale; if (infosReunionsInternationale !== undefined) { (0, _xml.cleanXmlArtefacts)(infosReunionsInternationale); (0, _xml.cleanBooleanAttribute)(infosReunionsInternationale, "estReunionInternationale"); var listePays = infosReunionsInternationale.listePays; if (listePays !== undefined) { listePays = listePays.paysRef; if (!Array.isArray(listePays)) { _assert["default"].strictEqual(_typeof(listePays), "string"); listePays = [listePays]; } infosReunionsInternationale.listePays = listePays; } } } //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfYXNzZXJ0IiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfeG1sIiwiZSIsIl9fZXNNb2R1bGUiLCJfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlciIsInIiLCJ0IiwiU3ltYm9sIiwiaXRlcmF0b3IiLCJBcnJheSIsImlzQXJyYXkiLCJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCJsZW5ndGgiLCJfbiIsIkYiLCJzIiwibiIsImRvbmUiLCJ2YWx1ZSIsImYiLCJUeXBlRXJyb3IiLCJvIiwiYSIsInUiLCJjYWxsIiwibmV4dCIsIl9hcnJheUxpa2VUb0FycmF5IiwidG9TdHJpbmciLCJzbGljZSIsImNvbnN0cnVjdG9yIiwibmFtZSIsImZyb20iLCJ0ZXN0IiwiX3R5cGVvZiIsInByb3RvdHlwZSIsImNsZWFuQ3ljbGVEZVZpZSIsImN5Y2xlRGVWaWUiLCJjbGVhblhtbEFydGVmYWN0cyIsImNocm9ubyIsImFzc2VydCIsImNyZWF0aW9uIiwic3RyaWN0RXF1YWwiLCJEYXRlIiwiY2xvdHVyZSIsInVuZGVmaW5lZCIsImNsZWFuUmV1bmlvbiIsInJldW5pb24iLCJjbGVhbkJvb2xlYW5BdHRyaWJ1dGUiLCJ4c2lUeXBlIiwidGltZXN0YW1wRGVidXQiLCJ0aW1lU3RhbXBEZWJ1dCIsIm5vdFN0cmljdEVxdWFsIiwidGltZXN0YW1wRmluIiwidGltZVN0YW1wRmluIiwibGlldSIsImRlbWFuZGV1cnMiLCJhY3RldXJzIiwiYWN0ZXVyIiwiX2l0ZXJhdG9yIiwiX3N0ZXAiLCJlcnIiLCJvcmdhbmUiLCJkZW1hbmRldXIiLCJfaSIsIl9hY3RldXJzMiIsInBhcnRpY2lwYW50cyIsInBhcnRpY2lwYW50c0ludGVybmVzIiwicGFydGljaXBhbnRJbnRlcm5lIiwicGVyc29ubmVzQXVkaXRpb25uZWVzIiwicGVyc29ubmVBdWRpdGlvbm5lZSIsImZpbHRlciIsInBlcnNvbm5lQXVkaW9ubmVlIiwiX2l0ZXJhdG9yMiIsIl9zdGVwMiIsInVpZCIsImlkZW50IiwiT0RKIiwib2RqIiwiY29udm9jYXRpb25PZGoiLCJjb252b2NhdGlvbk9ESiIsIml0ZW0iLCJyZXN1bWVPZGoiLCJyZXN1bWVPREoiLCJwb2ludHNPZGoiLCJwb2ludHNPREoiLCJwb2ludE9kaiIsInBvaW50T0RKIiwiX2l0ZXJhdG9yMyIsIl9zdGVwMyIsImRlbWFuZGV1clBvaW50IiwiZG9zc2llcnNMZWdpc2xhdGlmc1JlZnMiLCJkb3NzaWVyUmVmIiwidHlwZVBvaW50T2RqIiwidHlwZVBvaW50T0RKIiwidGV4dGVzQXNzb2NpZXMiLCJuYXR1cmVUcmF2YXV4T2RqIiwibmF0dXJlVHJhdmF1eE9ESiIsImRhdGVDb25mUHJlcyIsInNwbGl0IiwiZGF0ZUxldHRyZU1pbmlzdHJlIiwiaWRlbnRpZmlhbnRzIiwibnVtU2VhbmNlSm8iLCJudW1TZWFuY2VKTyIsImlkSm8iLCJpZEpPIiwiZGF0ZVNlYW5jZSIsIkRhdGVTZWFuY2UiLCJpbmZvc1JldW5pb25zSW50ZXJuYXRpb25hbGUiLCJsaXN0ZVBheXMiLCJwYXlzUmVmIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NsZWFuZXJzL3JldW5pb25zLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhc3NlcnQgZnJvbSBcImFzc2VydFwiXG5cbmltcG9ydCB7IGNsZWFuQm9vbGVhbkF0dHJpYnV0ZSwgY2xlYW5YbWxBcnRlZmFjdHMgfSBmcm9tIFwiLi94bWxcIlxuXG5mdW5jdGlvbiBjbGVhbkN5Y2xlRGVWaWUoY3ljbGVEZVZpZTogYW55KTogdm9pZCB7XG4gIGNsZWFuWG1sQXJ0ZWZhY3RzKGN5Y2xlRGVWaWUpXG5cbiAgY29uc3QgY2hyb25vID0gY3ljbGVEZVZpZS5jaHJvbm9cbiAgYXNzZXJ0KGNocm9ubylcbiAge1xuICAgIGNsZWFuWG1sQXJ0ZWZhY3RzKGNocm9ubylcblxuICAgIGxldCBjcmVhdGlvbiA9IGNocm9uby5jcmVhdGlvblxuICAgIGFzc2VydC5zdHJpY3RFcXVhbCh0eXBlb2YgY3JlYXRpb24sIFwic3RyaW5nXCIpXG4gICAgY3JlYXRpb24gPSBuZXcgRGF0ZShjcmVhdGlvbilcbiAgICBjaHJvbm8uY3JlYXRpb24gPSBjcmVhdGlvblxuXG4gICAgbGV0IGNsb3R1cmUgPSBjaHJvbm8uY2xvdHVyZVxuICAgIGlmIChjbG90dXJlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbCh0eXBlb2YgY2xvdHVyZSwgXCJzdHJpbmdcIilcbiAgICAgIGNsb3R1cmUgPSBuZXcgRGF0ZShjbG90dXJlKVxuICAgICAgY2hyb25vLmNsb3R1cmUgPSBjbG90dXJlXG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjbGVhblJldW5pb24ocmV1bmlvbjogYW55KTogdm9pZCB7XG4gIGNsZWFuWG1sQXJ0ZWZhY3RzKHJldW5pb24pXG5cbiAgY2xlYW5Cb29sZWFuQXR0cmlidXRlKHJldW5pb24sIFwiY2FwdGF0aW9uVmlkZW9cIilcbiAgY2xlYW5Cb29sZWFuQXR0cmlidXRlKHJldW5pb24sIFwiY29taXRlU2VjcmV0XCIpXG4gIGNsZWFuQm9vbGVhbkF0dHJpYnV0ZShyZXVuaW9uLCBcIm91dmVydHVyZVByZXNzZVwiKVxuXG4gIGNvbnN0IHhzaVR5cGUgPSByZXVuaW9uW1wiQHhzaTp0eXBlXCJdXG4gIGlmICh4c2lUeXBlICE9PSB1bmRlZmluZWQpIHtcbiAgICByZXVuaW9uLnhzaVR5cGUgPSB4c2lUeXBlXG4gICAgZGVsZXRlIHJldW5pb25bXCJAeHNpOnR5cGVcIl1cbiAgfVxuXG4gIGNvbnN0IHRpbWVzdGFtcERlYnV0ID0gcmV1bmlvbi50aW1lU3RhbXBEZWJ1dFxuICBhc3NlcnQubm90U3RyaWN0RXF1YWwodGltZXN0YW1wRGVidXQsIHVuZGVmaW5lZClcbiAgcmV1bmlvbi50aW1lc3RhbXBEZWJ1dCA9IHRpbWVzdGFtcERlYnV0XG4gIGRlbGV0ZSByZXVuaW9uLnRpbWVTdGFtcERlYnV0XG5cbiAgbGV0IHRpbWVzdGFtcEZpbiA9IHJldW5pb24udGltZVN0YW1wRmluXG4gIGlmICh0aW1lc3RhbXBGaW4gIT09IHVuZGVmaW5lZCkge1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbCh0eXBlb2YgdGltZXN0YW1wRmluLCBcInN0cmluZ1wiKVxuICAgIHRpbWVzdGFtcEZpbiA9IG5ldyBEYXRlKHRpbWVzdGFtcEZpbilcbiAgICByZXVuaW9uLnRpbWVzdGFtcEZpbiA9IHRpbWVzdGFtcEZpblxuICAgIGRlbGV0ZSByZXVuaW9uLnRpbWVTdGFtcEZpblxuICB9XG5cbiAgY29uc3QgbGlldSA9IHJldW5pb24ubGlldVxuICBpZiAobGlldSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgY2xlYW5YbWxBcnRlZmFjdHMobGlldSlcbiAgfVxuXG4gIGNvbnN0IGN5Y2xlRGVWaWUgPSByZXVuaW9uLmN5Y2xlRGVWaWVcbiAgYXNzZXJ0Lm5vdFN0cmljdEVxdWFsKGN5Y2xlRGVWaWUsIHVuZGVmaW5lZClcbiAgY2xlYW5DeWNsZURlVmllKGN5Y2xlRGVWaWUpXG5cbiAgY29uc3QgZGVtYW5kZXVycyA9IHJldW5pb24uZGVtYW5kZXVyc1xuICBpZiAoZGVtYW5kZXVycyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgbGV0IGFjdGV1cnMgPSBkZW1hbmRldXJzLmFjdGV1clxuICAgIGlmIChhY3RldXJzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmICghQXJyYXkuaXNBcnJheShhY3RldXJzKSkge1xuICAgICAgICBhc3NlcnQubm90U3RyaWN0RXF1YWwoYWN0ZXVycywgbnVsbClcbiAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHR5cGVvZiBhY3RldXJzLCBcIm9iamVjdFwiKVxuICAgICAgICBhY3RldXJzID0gW2FjdGV1cnNdXG4gICAgICB9XG4gICAgICBkZW1hbmRldXJzLmFjdGV1cnMgPSBhY3RldXJzXG4gICAgICBkZWxldGUgZGVtYW5kZXVycy5hY3RldXJcblxuICAgICAgZm9yIChjb25zdCBhY3RldXIgb2YgYWN0ZXVycykge1xuICAgICAgICBjbGVhblhtbEFydGVmYWN0cyhhY3RldXIpXG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3Qgb3JnYW5lID0gZGVtYW5kZXVycy5vcmdhbmVcbiAgICBpZiAob3JnYW5lICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNsZWFuWG1sQXJ0ZWZhY3RzKG9yZ2FuZSlcbiAgICB9XG4gIH1cbiAgY29uc3QgZGVtYW5kZXVyID0gcmV1bmlvbi5kZW1hbmRldXJcbiAgaWYgKGRlbWFuZGV1ciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJldW5pb24uZGVtYW5kZXVycywgdW5kZWZpbmVkKVxuICAgIGRlbGV0ZSByZXVuaW9uLmRlbWFuZGV1clxuXG4gICAgbGV0IGFjdGV1ciA9IGRlbWFuZGV1ci5hY3RldXJcbiAgICBpZiAoYWN0ZXVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGFzc2VydC5ub3RTdHJpY3RFcXVhbChhY3RldXIsIG51bGwpXG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwodHlwZW9mIGFjdGV1ciwgXCJvYmplY3RcIilcbiAgICAgIGNvbnN0IGFjdGV1cnMgPSBbYWN0ZXVyXVxuICAgICAgZGVtYW5kZXVyLmFjdGV1cnMgPSBhY3RldXJzXG4gICAgICBkZWxldGUgZGVtYW5kZXVyLmFjdGV1clxuICAgICAgcmV1bmlvbi5kZW1hbmRldXJzID0gZGVtYW5kZXVyXG5cbiAgICAgIGZvciAoY29uc3QgYWN0ZXVyIG9mIGFjdGV1cnMpIHtcbiAgICAgICAgY2xlYW5YbWxBcnRlZmFjdHMoYWN0ZXVyKVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IG9yZ2FuZSA9IGRlbWFuZGV1ci5vcmdhbmVcbiAgICBpZiAob3JnYW5lICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNsZWFuWG1sQXJ0ZWZhY3RzKG9yZ2FuZSlcbiAgICB9XG4gIH1cblxuICBjb25zdCBwYXJ0aWNpcGFudHMgPSByZXVuaW9uLnBhcnRpY2lwYW50c1xuICBpZiAocGFydGljaXBhbnRzICE9PSB1bmRlZmluZWQpIHtcbiAgICBjbGVhblhtbEFydGVmYWN0cyhwYXJ0aWNpcGFudHMpXG5cbiAgICBsZXQgcGFydGljaXBhbnRzSW50ZXJuZXMgPSBwYXJ0aWNpcGFudHMucGFydGljaXBhbnRzSW50ZXJuZXNcbiAgICBpZiAocGFydGljaXBhbnRzSW50ZXJuZXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcGFydGljaXBhbnRzSW50ZXJuZXMgPSBwYXJ0aWNpcGFudHNJbnRlcm5lcy5wYXJ0aWNpcGFudEludGVybmVcbiAgICAgIGlmICghQXJyYXkuaXNBcnJheShwYXJ0aWNpcGFudHNJbnRlcm5lcykpIHtcbiAgICAgICAgYXNzZXJ0Lm5vdFN0cmljdEVxdWFsKHBhcnRpY2lwYW50c0ludGVybmVzLCBudWxsKVxuICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwodHlwZW9mIHBhcnRpY2lwYW50c0ludGVybmVzLCBcIm9iamVjdFwiKVxuICAgICAgICBwYXJ0aWNpcGFudHNJbnRlcm5lcyA9IFtwYXJ0aWNpcGFudHNJbnRlcm5lc11cbiAgICAgIH1cbiAgICAgIHBhcnRpY2lwYW50cy5wYXJ0aWNpcGFudHNJbnRlcm5lcyA9IHBhcnRpY2lwYW50c0ludGVybmVzXG4gICAgfVxuXG4gICAgbGV0IHBlcnNvbm5lc0F1ZGl0aW9ubmVlcyA9IHBhcnRpY2lwYW50cy5wZXJzb25uZXNBdWRpdGlvbm5lZXNcbiAgICBpZiAocGVyc29ubmVzQXVkaXRpb25uZWVzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHBlcnNvbm5lc0F1ZGl0aW9ubmVlcyA9IHBlcnNvbm5lc0F1ZGl0aW9ubmVlcy5wZXJzb25uZUF1ZGl0aW9ubmVlXG4gICAgICBpZiAocGVyc29ubmVzQXVkaXRpb25uZWVzID09PSBudWxsKSB7XG4gICAgICAgIGRlbGV0ZSBwYXJ0aWNpcGFudHMucGVyc29ubmVzQXVkaXRpb25uZWVzXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkocGVyc29ubmVzQXVkaXRpb25uZWVzKSkge1xuICAgICAgICAgIC8vIGFzc2VydC5ub3RTdHJpY3RFcXVhbChwZXJzb25uZXNBdWRpdGlvbm5lZXMsIG51bGwpXG4gICAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHR5cGVvZiBwZXJzb25uZXNBdWRpdGlvbm5lZXMsIFwib2JqZWN0XCIpXG4gICAgICAgICAgcGVyc29ubmVzQXVkaXRpb25uZWVzID0gW3BlcnNvbm5lc0F1ZGl0aW9ubmVlc11cbiAgICAgICAgfVxuICAgICAgICBwZXJzb25uZXNBdWRpdGlvbm5lZXMgPSBwZXJzb25uZXNBdWRpdGlvbm5lZXMuZmlsdGVyKFxuICAgICAgICAgIChwZXJzb25uZUF1ZGlvbm5lZTogYW55KSA9PiBwZXJzb25uZUF1ZGlvbm5lZSAhPT0gbnVsbCxcbiAgICAgICAgKVxuICAgICAgICBpZiAocGVyc29ubmVzQXVkaXRpb25uZWVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBwYXJ0aWNpcGFudHMucGVyc29ubmVzQXVkaXRpb25uZWVzID0gcGVyc29ubmVzQXVkaXRpb25uZWVzXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZGVsZXRlIHBhcnRpY2lwYW50cy5wZXJzb25uZXNBdWRpdGlvbm5lZXNcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoY29uc3QgcGVyc29ubmVBdWRpb25uZWUgb2YgcGVyc29ubmVzQXVkaXRpb25uZWVzKSB7XG4gICAgICAgICAgY29uc3QgeHNpVHlwZSA9IHBlcnNvbm5lQXVkaW9ubmVlLnVpZFtcIkB4c2k6dHlwZVwiXVxuICAgICAgICAgIGFzc2VydCh4c2lUeXBlKVxuICAgICAgICAgIHBlcnNvbm5lQXVkaW9ubmVlLnhzaVR5cGUgPSB4c2lUeXBlXG4gICAgICAgICAgY29uc3QgdWlkID0gcGVyc29ubmVBdWRpb25uZWUudWlkW1wiI3RleHRcIl1cbiAgICAgICAgICBhc3NlcnQodWlkKVxuICAgICAgICAgIHBlcnNvbm5lQXVkaW9ubmVlLnVpZCA9IHVpZFxuXG4gICAgICAgICAgY29uc3QgaWRlbnQgPSBwZXJzb25uZUF1ZGlvbm5lZS5pZGVudFxuICAgICAgICAgIGFzc2VydChpZGVudClcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjbGVhblhtbEFydGVmYWN0cyhpZGVudClcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAocmV1bmlvbi5PREogIT09IHVuZGVmaW5lZCkge1xuICAgIGNvbnN0IG9kaiA9IHJldW5pb24uT0RKXG4gICAgcmV1bmlvbi5vZGogPSBvZGpcbiAgICBkZWxldGUgcmV1bmlvbi5PREpcbiAgICB7XG4gICAgICBjbGVhblhtbEFydGVmYWN0cyhvZGopXG5cbiAgICAgIGxldCBjb252b2NhdGlvbk9kaiA9IG9kai5jb252b2NhdGlvbk9ESlxuICAgICAgaWYgKGNvbnZvY2F0aW9uT2RqICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoY29udm9jYXRpb25PZGouaXRlbSkpIHtcbiAgICAgICAgICBjb252b2NhdGlvbk9kaiA9IGNvbnZvY2F0aW9uT2RqLml0ZW1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBhc3NlcnQoY29udm9jYXRpb25PZGouaXRlbSlcbiAgICAgICAgICBjb252b2NhdGlvbk9kaiA9IFtjb252b2NhdGlvbk9kai5pdGVtXVxuICAgICAgICB9XG4gICAgICAgIG9kai5jb252b2NhdGlvbk9kaiA9IGNvbnZvY2F0aW9uT2RqXG4gICAgICAgIGRlbGV0ZSBvZGouY29udm9jYXRpb25PREpcbiAgICAgIH1cblxuICAgICAgbGV0IHJlc3VtZU9kaiA9IG9kai5yZXN1bWVPREpcbiAgICAgIGlmIChyZXN1bWVPZGogIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShyZXN1bWVPZGouaXRlbSkpIHtcbiAgICAgICAgICByZXN1bWVPZGogPSByZXN1bWVPZGouaXRlbVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGFzc2VydChyZXN1bWVPZGouaXRlbSlcbiAgICAgICAgICByZXN1bWVPZGogPSBbcmVzdW1lT2RqLml0ZW1dXG4gICAgICAgIH1cbiAgICAgICAgb2RqLnJlc3VtZU9kaiA9IHJlc3VtZU9kalxuICAgICAgICBkZWxldGUgb2RqLnJlc3VtZU9ESlxuICAgICAgfVxuXG4gICAgICBsZXQgcG9pbnRzT2RqID0gb2RqLnBvaW50c09ESlxuICAgICAgaWYgKHBvaW50c09kaiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGxldCBwb2ludE9kaiA9IHBvaW50c09kai5wb2ludE9ESlxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShwb2ludE9kaikpIHtcbiAgICAgICAgICBwb2ludHNPZGogPSBwb2ludE9kalxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGFzc2VydChwb2ludE9kailcbiAgICAgICAgICBwb2ludHNPZGogPSBbcG9pbnRPZGpdXG4gICAgICAgIH1cbiAgICAgICAgb2RqLnBvaW50c09kaiA9IHBvaW50c09kalxuXG4gICAgICAgIGZvciAoY29uc3QgcG9pbnRPZGogb2YgcG9pbnRzT2RqKSB7XG4gICAgICAgICAgY2xlYW5YbWxBcnRlZmFjdHMocG9pbnRPZGopXG5cbiAgICAgICAgICBjbGVhbkJvb2xlYW5BdHRyaWJ1dGUocG9pbnRPZGosIFwiY29taXRlU2VjcmV0XCIpXG5cbiAgICAgICAgICBjb25zdCB4c2lUeXBlID0gcG9pbnRPZGpbXCJAeHNpOnR5cGVcIl1cbiAgICAgICAgICBpZiAoeHNpVHlwZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBwb2ludE9kai54c2lUeXBlID0geHNpVHlwZVxuICAgICAgICAgICAgZGVsZXRlIHBvaW50T2RqW1wiQHhzaTp0eXBlXCJdXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgY3ljbGVEZVZpZSA9IHBvaW50T2RqLmN5Y2xlRGVWaWVcbiAgICAgICAgICBhc3NlcnQubm90U3RyaWN0RXF1YWwoY3ljbGVEZVZpZSwgdW5kZWZpbmVkKVxuICAgICAgICAgIGNsZWFuQ3ljbGVEZVZpZShjeWNsZURlVmllKVxuXG4gICAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHBvaW50T2RqLmRlbWFuZGV1clBvaW50LCB1bmRlZmluZWQpXG5cbiAgICAgICAgICBsZXQgZG9zc2llcnNMZWdpc2xhdGlmc1JlZnMgPSBwb2ludE9kai5kb3NzaWVyc0xlZ2lzbGF0aWZzUmVmc1xuICAgICAgICAgIGlmIChkb3NzaWVyc0xlZ2lzbGF0aWZzUmVmcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShkb3NzaWVyc0xlZ2lzbGF0aWZzUmVmcy5kb3NzaWVyUmVmKSkge1xuICAgICAgICAgICAgICBkb3NzaWVyc0xlZ2lzbGF0aWZzUmVmcyA9IGRvc3NpZXJzTGVnaXNsYXRpZnNSZWZzLmRvc3NpZXJSZWZcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGFzc2VydChkb3NzaWVyc0xlZ2lzbGF0aWZzUmVmcy5kb3NzaWVyUmVmKVxuICAgICAgICAgICAgICBkb3NzaWVyc0xlZ2lzbGF0aWZzUmVmcyA9IFtkb3NzaWVyc0xlZ2lzbGF0aWZzUmVmcy5kb3NzaWVyUmVmXVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcG9pbnRPZGouZG9zc2llcnNMZWdpc2xhdGlmc1JlZnMgPSBkb3NzaWVyc0xlZ2lzbGF0aWZzUmVmc1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHBvaW50T2RqLnR5cGVQb2ludE9kaiA9IHBvaW50T2RqLnR5cGVQb2ludE9ESlxuICAgICAgICAgIGRlbGV0ZSBwb2ludE9kai50eXBlUG9pbnRPREpcblxuICAgICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChwb2ludE9kai50ZXh0ZXNBc3NvY2llcywgdW5kZWZpbmVkKVxuXG4gICAgICAgICAgcG9pbnRPZGoubmF0dXJlVHJhdmF1eE9kaiA9IHBvaW50T2RqLm5hdHVyZVRyYXZhdXhPREpcbiAgICAgICAgICBkZWxldGUgcG9pbnRPZGoubmF0dXJlVHJhdmF1eE9ESlxuXG4gICAgICAgICAgbGV0IGRhdGVDb25mUHJlcyA9IHBvaW50T2RqLmRhdGVDb25mUHJlc1xuICAgICAgICAgIGlmIChkYXRlQ29uZlByZXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHR5cGVvZiBkYXRlQ29uZlByZXMsIFwic3RyaW5nXCIpXG4gICAgICAgICAgICBhc3NlcnQoL15cXGR7NH0tXFxkezJ9LVxcZHsyfVxcK1xcZHsyfTowMCQvLnRlc3QoZGF0ZUNvbmZQcmVzKSlcbiAgICAgICAgICAgIGRhdGVDb25mUHJlcyA9IG5ldyBEYXRlKGRhdGVDb25mUHJlcy5zcGxpdChcIitcIilbMF0pXG4gICAgICAgICAgICBwb2ludE9kai5kYXRlQ29uZlByZXMgPSBkYXRlQ29uZlByZXNcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBsZXQgZGF0ZUxldHRyZU1pbmlzdHJlID0gcG9pbnRPZGouZGF0ZUxldHRyZU1pbmlzdHJlXG4gICAgICAgICAgaWYgKGRhdGVMZXR0cmVNaW5pc3RyZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwodHlwZW9mIGRhdGVMZXR0cmVNaW5pc3RyZSwgXCJzdHJpbmdcIilcbiAgICAgICAgICAgIGFzc2VydCgvXlxcZHs0fS1cXGR7Mn0tXFxkezJ9XFwrXFxkezJ9OjAwJC8udGVzdChkYXRlTGV0dHJlTWluaXN0cmUpKVxuICAgICAgICAgICAgZGF0ZUxldHRyZU1pbmlzdHJlID0gbmV3IERhdGUoZGF0ZUxldHRyZU1pbmlzdHJlLnNwbGl0KFwiK1wiKVswXSlcbiAgICAgICAgICAgIHBvaW50T2RqLmRhdGVMZXR0cmVNaW5pc3RyZSA9IGRhdGVMZXR0cmVNaW5pc3RyZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBkZWxldGUgb2RqLnBvaW50c09ESlxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGlkZW50aWZpYW50cyA9IHJldW5pb24uaWRlbnRpZmlhbnRzXG4gIGlmIChpZGVudGlmaWFudHMgIT09IHVuZGVmaW5lZCkge1xuICAgIGNsZWFuWG1sQXJ0ZWZhY3RzKGlkZW50aWZpYW50cylcbiAgICBjb25zdCBudW1TZWFuY2VKbyA9IGlkZW50aWZpYW50cy5udW1TZWFuY2VKT1xuICAgIGlmIChudW1TZWFuY2VKbyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZGVudGlmaWFudHMubnVtU2VhbmNlSm8gPSBudW1TZWFuY2VKb1xuICAgICAgZGVsZXRlIGlkZW50aWZpYW50cy5udW1TZWFuY2VKT1xuICAgIH1cblxuICAgIGNvbnN0IGlkSm8gPSBpZGVudGlmaWFudHMuaWRKT1xuICAgIGlmIChpZEpvICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlkZW50aWZpYW50cy5pZEpvID0gaWRKb1xuICAgICAgZGVsZXRlIGlkZW50aWZpYW50cy5pZEpPXG4gICAgfVxuXG4gICAgbGV0IGRhdGVTZWFuY2UgPSBpZGVudGlmaWFudHMuRGF0ZVNlYW5jZVxuICAgIGFzc2VydC5zdHJpY3RFcXVhbCh0eXBlb2YgZGF0ZVNlYW5jZSwgXCJzdHJpbmdcIilcbiAgICBhc3NlcnQoL15cXGR7NH0tXFxkezJ9LVxcZHsyfVxcK1xcZHsyfTowMCQvLnRlc3QoZGF0ZVNlYW5jZSkpXG4gICAgZGF0ZVNlYW5jZSA9IG5ldyBEYXRlKGRhdGVTZWFuY2Uuc3BsaXQoXCIrXCIpWzBdKVxuICAgIGlkZW50aWZpYW50cy5kYXRlU2VhbmNlID0gZGF0ZVNlYW5jZVxuICAgIGRlbGV0ZSBpZGVudGlmaWFudHMuRGF0ZVNlYW5jZVxuICB9XG5cbiAgY29uc3QgaW5mb3NSZXVuaW9uc0ludGVybmF0aW9uYWxlID0gcmV1bmlvbi5pbmZvc1JldW5pb25zSW50ZXJuYXRpb25hbGVcbiAgaWYgKGluZm9zUmV1bmlvbnNJbnRlcm5hdGlvbmFsZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgY2xlYW5YbWxBcnRlZmFjdHMoaW5mb3NSZXVuaW9uc0ludGVybmF0aW9uYWxlKVxuXG4gICAgY2xlYW5Cb29sZWFuQXR0cmlidXRlKFxuICAgICAgaW5mb3NSZXVuaW9uc0ludGVybmF0aW9uYWxlLFxuICAgICAgXCJlc3RSZXVuaW9uSW50ZXJuYXRpb25hbGVcIixcbiAgICApXG5cbiAgICBsZXQgbGlzdGVQYXlzID0gaW5mb3NSZXVuaW9uc0ludGVybmF0aW9uYWxlLmxpc3RlUGF5c1xuICAgIGlmIChsaXN0ZVBheXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgbGlzdGVQYXlzID0gbGlzdGVQYXlzLnBheXNSZWZcbiAgICAgIGlmICghQXJyYXkuaXNBcnJheShsaXN0ZVBheXMpKSB7XG4gICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbCh0eXBlb2YgbGlzdGVQYXlzLCBcInN0cmluZ1wiKVxuICAgICAgICBsaXN0ZVBheXMgPSBbbGlzdGVQYXlzXVxuICAgICAgfVxuICAgICAgaW5mb3NSZXVuaW9uc0ludGVybmF0aW9uYWxlLmxpc3RlUGF5cyA9IGxpc3RlUGF5c1xuICAgIH1cbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsSUFBQUEsT0FBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBRUEsSUFBQUMsSUFBQSxHQUFBRCxPQUFBO0FBQWdFLFNBQUFELHVCQUFBRyxDQUFBLFdBQUFBLENBQUEsSUFBQUEsQ0FBQSxDQUFBQyxVQUFBLEdBQUFELENBQUEsZ0JBQUFBLENBQUE7QUFBQSxTQUFBRSwyQkFBQUMsQ0FBQSxFQUFBSCxDQUFBLFFBQUFJLENBQUEseUJBQUFDLE1BQUEsSUFBQUYsQ0FBQSxDQUFBRSxNQUFBLENBQUFDLFFBQUEsS0FBQUgsQ0FBQSxxQkFBQUMsQ0FBQSxRQUFBRyxLQUFBLENBQUFDLE9BQUEsQ0FBQUwsQ0FBQSxNQUFBQyxDQUFBLEdBQUFLLDJCQUFBLENBQUFOLENBQUEsTUFBQUgsQ0FBQSxJQUFBRyxDQUFBLHVCQUFBQSxDQUFBLENBQUFPLE1BQUEsSUFBQU4sQ0FBQSxLQUFBRCxDQUFBLEdBQUFDLENBQUEsT0FBQU8sRUFBQSxN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