UNPKG

@tricoteuses/assemblee

Version:

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

227 lines (226 loc) 28.8 kB
import assert from "assert"; import { cleanBooleanAttribute, cleanXmlArtefacts } from "./xml.mjs"; import { AvantAApres } from "../types/amendements.mjs"; export function cleanAmendement(amendement) { cleanXmlArtefacts(amendement); const signataires = amendement.signataires; { cleanXmlArtefacts(signataires); const auteur = signataires.auteur; { cleanXmlArtefacts(auteur); } if (signataires.cosignataires !== undefined) { const acteurRef = signataires.cosignataires.acteurRef; if (Array.isArray(acteurRef)) { signataires.cosignatairesRefs = acteurRef; } else { assert(acteurRef); signataires.cosignatairesRefs = [acteurRef]; } delete signataires.cosignataires; } let libelle = signataires.libelle; if (libelle !== undefined) { libelle = libelle.split(" ").filter(Boolean).join(" "); if (libelle) { signataires.libelle = libelle; } else { delete signataires.libelle; } } } const pointeurFragmentTexte = amendement.pointeurFragmentTexte; { cleanXmlArtefacts(pointeurFragmentTexte); const division = pointeurFragmentTexte.division; if (division !== undefined) { cleanXmlArtefacts(division); let avantAApres = division.avant_A_Apres; if (avantAApres !== undefined) { delete division.avant_A_Apres; if (avantAApres === "Après") { avantAApres = AvantAApres.Apres; } division.avantAApres = avantAApres; } } const amendementStandard = pointeurFragmentTexte.amendementStandard; if (amendementStandard !== undefined) { cleanXmlArtefacts(amendementStandard); const alinea = amendementStandard.alinea; if (alinea !== undefined) { cleanXmlArtefacts(alinea); let avantAApres = alinea.avant_A_Apres; if (avantAApres !== undefined) { delete alinea.avant_A_Apres; if (avantAApres === "Après") { avantAApres = AvantAApres.Apres; } else if (![AvantAApres.A, AvantAApres.Apres, AvantAApres.Avant].includes(avantAApres)) { avantAApres = AvantAApres.A; } alinea.avantAApres = avantAApres; } pointeurFragmentTexte.alinea = alinea; } delete pointeurFragmentTexte.amendementStandard; } } const corps = amendement.corps; if (corps !== undefined) { cleanXmlArtefacts(corps); const contenuAuteur = corps.contenuAuteur; if (contenuAuteur !== undefined) { cleanXmlArtefacts(contenuAuteur); const avantAppel = contenuAuteur.avantAppel; if (avantAppel !== undefined) { cleanXmlArtefacts(avantAppel); cleanDispositifAmdtCreditPLF(avantAppel.dispositifAmdtCreditPLF, { rectificatif: false }); cleanDispositifAmdtCreditPLF(avantAppel.dispositifAmdtCreditPLFR, { rectificatif: true }); if (Object.keys(avantAppel).length === 0) { delete contenuAuteur.avantAppel; } } assert.strictEqual(contenuAuteur.annexeExposeSommaire, undefined); cleanDispositifAmdtCreditPLF(contenuAuteur.dispositifAmdtCreditPLF, { rectificatif: false }); cleanDispositifAmdtCreditPLF(contenuAuteur.dispositifAmdtCreditPLFR, { rectificatif: true }); } } const cycleDeVie = amendement.cycleDeVie; if (cycleDeVie !== undefined) { cleanXmlArtefacts(cycleDeVie); const etatDesTraitements = cycleDeVie.etatDesTraitements; { cleanXmlArtefacts(etatDesTraitements); const etat = etatDesTraitements.etat; { cleanXmlArtefacts(etat); } const sousEtat = etatDesTraitements.sousEtat; if (sousEtat !== undefined) { cleanXmlArtefacts(sousEtat); } } } if (amendement.representations !== undefined) { const representation = amendement.representations.representation; assert(!Array.isArray(representation)); amendement.representation = representation; delete amendement.representations; { cleanXmlArtefacts(representation); assert.strictEqual(representation.repSource, undefined); assert.strictEqual(representation.offset, undefined); assert.strictEqual(representation.dateDispoRepresentation, undefined); const statutRepresentation = representation.statutRepresentation; { cleanBooleanAttribute(statutRepresentation, "canonique"); cleanBooleanAttribute(statutRepresentation, "enregistrement"); cleanBooleanAttribute(statutRepresentation, "officielle"); cleanBooleanAttribute(statutRepresentation, "transcription"); cleanBooleanAttribute(statutRepresentation, "verbatim"); } } } const loiReference = amendement.loiReference; if (loiReference !== undefined) { cleanXmlArtefacts(loiReference); } const discussionCommune = amendement.discussionCommune; if (discussionCommune !== undefined) { cleanXmlArtefacts(discussionCommune); } const discussionIdentique = amendement.discussionIdentique; if (discussionIdentique !== undefined) { cleanXmlArtefacts(discussionIdentique); } } function cleanDispositifAmdtCreditPLF(dispositifAmdtCreditPLF, { rectificatif }) { if (dispositifAmdtCreditPLF !== undefined) { const listeProgrammes = dispositifAmdtCreditPLF.listeProgrammes?.programme; if (listeProgrammes !== undefined) { if (Array.isArray(listeProgrammes)) { dispositifAmdtCreditPLF.listeProgrammes = listeProgrammes; } else { assert(listeProgrammes); dispositifAmdtCreditPLF.listeProgrammes = [listeProgrammes]; } for (const programme of dispositifAmdtCreditPLF.listeProgrammes) { cleanXmlArtefacts(programme); if (programme.lignesCredits !== undefined) { let lignesCredits = programme.lignesCredits.ligneCredit; if (lignesCredits === undefined) { delete programme.lignesCredits; } else { if (!Array.isArray(lignesCredits)) { assert(lignesCredits); lignesCredits = [lignesCredits]; } programme.lignesCredits = lignesCredits; } if (lignesCredits !== undefined) { for (const ligneCredit of lignesCredits) { if (rectificatif) { cleanLigneCreditPLFR(ligneCredit); } else { cleanXmlArtefacts(ligneCredit); } } } } } } } } function cleanLigneCreditPLFR(ligneCreditPLFR) { cleanXmlArtefacts(ligneCreditPLFR); if (ligneCreditPLFR.lignesCredits !== undefined) { let lignesCredits = ligneCreditPLFR.lignesCredits.ligneCredit; if (lignesCredits === undefined) { delete ligneCreditPLFR.lignesCredits; } else { if (!Array.isArray(lignesCredits)) { assert(lignesCredits); lignesCredits = [lignesCredits]; } ligneCreditPLFR.lignesCredits = lignesCredits; } if (lignesCredits !== undefined) { for (const ligneCredit of lignesCredits) { cleanLigneCreditPLFR(ligneCredit); } } } } export function cleanTexteLegislatif(texteLegislatif) { cleanXmlArtefacts(texteLegislatif); // Note: The following fields in `texteLegislatif.amendements` are currently ignored: // * "#text"?: string; // * offset?: null; // * nom?: Nom; // * avant_A_Apres?: DivisionAvantAApres; // * dateDepot?: Date; // * documentURI?: string; // Because it seems they should belong to an "amendement". let amendement = texteLegislatif.amendements.amendement; if (Array.isArray(amendement)) { texteLegislatif.amendements = amendement; } else { assert(amendement); texteLegislatif.amendements = [amendement]; } for (const amendement of texteLegislatif.amendements) { cleanAmendement(amendement); } } //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJhc3NlcnQiLCJjbGVhbkJvb2xlYW5BdHRyaWJ1dGUiLCJjbGVhblhtbEFydGVmYWN0cyIsIkF2YW50QUFwcmVzIiwiY2xlYW5BbWVuZGVtZW50IiwiYW1lbmRlbWVudCIsInNpZ25hdGFpcmVzIiwiYXV0ZXVyIiwiY29zaWduYXRhaXJlcyIsInVuZGVmaW5lZCIsImFjdGV1clJlZiIsIkFycmF5IiwiaXNBcnJheSIsImNvc2lnbmF0YWlyZXNSZWZzIiwibGliZWxsZSIsInNwbGl0IiwiZmlsdGVyIiwiQm9vbGVhbiIsImpvaW4iLCJwb2ludGV1ckZyYWdtZW50VGV4dGUiLCJkaXZpc2lvbiIsImF2YW50QUFwcmVzIiwiYXZhbnRfQV9BcHJlcyIsIkFwcmVzIiwiYW1lbmRlbWVudFN0YW5kYXJkIiwiYWxpbmVhIiwiQSIsIkF2YW50IiwiaW5jbHVkZXMiLCJjb3JwcyIsImNvbnRlbnVBdXRldXIiLCJhdmFudEFwcGVsIiwiY2xlYW5EaXNwb3NpdGlmQW1kdENyZWRpdFBMRiIsImRpc3Bvc2l0aWZBbWR0Q3JlZGl0UExGIiwicmVjdGlmaWNhdGlmIiwiZGlzcG9zaXRpZkFtZHRDcmVkaXRQTEZSIiwiT2JqZWN0Iiwia2V5cyIsImxlbmd0aCIsInN0cmljdEVxdWFsIiwiYW5uZXhlRXhwb3NlU29tbWFpcmUiLCJjeWNsZURlVmllIiwiZXRhdERlc1RyYWl0ZW1lbnRzIiwiZXRhdCIsInNvdXNFdGF0IiwicmVwcmVzZW50YXRpb25zIiwicmVwcmVzZW50YXRpb24iLCJyZXBTb3VyY2UiLCJvZmZzZXQiLCJkYXRlRGlzcG9SZXByZXNlbnRhdGlvbiIsInN0YXR1dFJlcHJlc2VudGF0aW9uIiwibG9pUmVmZXJlbmNlIiwiZGlzY3Vzc2lvbkNvbW11bmUiLCJkaXNjdXNzaW9uSWRlbnRpcXVlIiwibGlzdGVQcm9ncmFtbWVzIiwicHJvZ3JhbW1lIiwibGlnbmVzQ3JlZGl0cyIsImxpZ25lQ3JlZGl0IiwiY2xlYW5MaWduZUNyZWRpdFBMRlIiLCJsaWduZUNyZWRpdFBMRlIiLCJjbGVhblRleHRlTGVnaXNsYXRpZiIsInRleHRlTGVnaXNsYXRpZiIsImFtZW5kZW1lbnRzIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NsZWFuZXJzL2FtZW5kZW1lbnRzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhc3NlcnQgZnJvbSBcImFzc2VydFwiXG5cbmltcG9ydCB7IGNsZWFuQm9vbGVhbkF0dHJpYnV0ZSwgY2xlYW5YbWxBcnRlZmFjdHMgfSBmcm9tIFwiLi94bWxcIlxuaW1wb3J0IHsgQXZhbnRBQXByZXMgfSBmcm9tIFwiLi4vdHlwZXMvYW1lbmRlbWVudHNcIlxuXG5leHBvcnQgZnVuY3Rpb24gY2xlYW5BbWVuZGVtZW50KGFtZW5kZW1lbnQ6IGFueSk6IHZvaWQge1xuICBjbGVhblhtbEFydGVmYWN0cyhhbWVuZGVtZW50KVxuXG4gIGNvbnN0IHNpZ25hdGFpcmVzID0gYW1lbmRlbWVudC5zaWduYXRhaXJlc1xuICB7XG4gICAgY2xlYW5YbWxBcnRlZmFjdHMoc2lnbmF0YWlyZXMpXG5cbiAgICBjb25zdCBhdXRldXIgPSBzaWduYXRhaXJlcy5hdXRldXJcbiAgICB7XG4gICAgICBjbGVhblhtbEFydGVmYWN0cyhhdXRldXIpXG4gICAgfVxuXG4gICAgaWYgKHNpZ25hdGFpcmVzLmNvc2lnbmF0YWlyZXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgYWN0ZXVyUmVmID0gc2lnbmF0YWlyZXMuY29zaWduYXRhaXJlcy5hY3RldXJSZWZcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KGFjdGV1clJlZikpIHtcbiAgICAgICAgc2lnbmF0YWlyZXMuY29zaWduYXRhaXJlc1JlZnMgPSBhY3RldXJSZWZcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFzc2VydChhY3RldXJSZWYpXG4gICAgICAgIHNpZ25hdGFpcmVzLmNvc2lnbmF0YWlyZXNSZWZzID0gW2FjdGV1clJlZl1cbiAgICAgIH1cbiAgICAgIGRlbGV0ZSBzaWduYXRhaXJlcy5jb3NpZ25hdGFpcmVzXG4gICAgfVxuXG4gICAgbGV0IGxpYmVsbGUgPSBzaWduYXRhaXJlcy5saWJlbGxlXG4gICAgaWYgKGxpYmVsbGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgbGliZWxsZSA9IGxpYmVsbGUuc3BsaXQoXCIgXCIpLmZpbHRlcihCb29sZWFuKS5qb2luKFwiIFwiKVxuICAgICAgaWYgKGxpYmVsbGUpIHtcbiAgICAgICAgc2lnbmF0YWlyZXMubGliZWxsZSA9IGxpYmVsbGVcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRlbGV0ZSBzaWduYXRhaXJlcy5saWJlbGxlXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY29uc3QgcG9pbnRldXJGcmFnbWVudFRleHRlID0gYW1lbmRlbWVudC5wb2ludGV1ckZyYWdtZW50VGV4dGVcbiAge1xuICAgIGNsZWFuWG1sQXJ0ZWZhY3RzKHBvaW50ZXVyRnJhZ21lbnRUZXh0ZSlcblxuICAgIGNvbnN0IGRpdmlzaW9uID0gcG9pbnRldXJGcmFnbWVudFRleHRlLmRpdmlzaW9uXG4gICAgaWYgKGRpdmlzaW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNsZWFuWG1sQXJ0ZWZhY3RzKGRpdmlzaW9uKVxuXG4gICAgICBsZXQgYXZhbnRBQXByZXMgPSBkaXZpc2lvbi5hdmFudF9BX0FwcmVzXG4gICAgICBpZiAoYXZhbnRBQXByZXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBkZWxldGUgZGl2aXNpb24uYXZhbnRfQV9BcHJlc1xuICAgICAgICBpZiAoYXZhbnRBQXByZXMgPT09IFwiQXByw6hzXCIpIHtcbiAgICAgICAgICBhdmFudEFBcHJlcyA9IEF2YW50QUFwcmVzLkFwcmVzXG4gICAgICAgIH1cbiAgICAgICAgZGl2aXNpb24uYXZhbnRBQXByZXMgPSBhdmFudEFBcHJlc1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGFtZW5kZW1lbnRTdGFuZGFyZCA9IHBvaW50ZXVyRnJhZ21lbnRUZXh0ZS5hbWVuZGVtZW50U3RhbmRhcmRcbiAgICBpZiAoYW1lbmRlbWVudFN0YW5kYXJkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNsZWFuWG1sQXJ0ZWZhY3RzKGFtZW5kZW1lbnRTdGFuZGFyZClcblxuICAgICAgY29uc3QgYWxpbmVhID0gYW1lbmRlbWVudFN0YW5kYXJkLmFsaW5lYVxuICAgICAgaWYgKGFsaW5lYSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNsZWFuWG1sQXJ0ZWZhY3RzKGFsaW5lYSlcblxuICAgICAgICBsZXQgYXZhbnRBQXByZXMgPSBhbGluZWEuYXZhbnRfQV9BcHJlc1xuICAgICAgICBpZiAoYXZhbnRBQXByZXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGRlbGV0ZSBhbGluZWEuYXZhbnRfQV9BcHJlc1xuICAgICAgICAgIGlmIChhdmFudEFBcHJlcyA9PT0gXCJBcHLDqHNcIikge1xuICAgICAgICAgICAgYXZhbnRBQXByZXMgPSBBdmFudEFBcHJlcy5BcHJlc1xuICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICAhW0F2YW50QUFwcmVzLkEsIEF2YW50QUFwcmVzLkFwcmVzLCBBdmFudEFBcHJlcy5BdmFudF0uaW5jbHVkZXMoXG4gICAgICAgICAgICAgIGF2YW50QUFwcmVzLFxuICAgICAgICAgICAgKVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgYXZhbnRBQXByZXMgPSBBdmFudEFBcHJlcy5BXG4gICAgICAgICAgfVxuICAgICAgICAgIGFsaW5lYS5hdmFudEFBcHJlcyA9IGF2YW50QUFwcmVzXG4gICAgICAgIH1cblxuICAgICAgICBwb2ludGV1ckZyYWdtZW50VGV4dGUuYWxpbmVhID0gYWxpbmVhXG4gICAgICB9XG4gICAgICBkZWxldGUgcG9pbnRldXJGcmFnbWVudFRleHRlLmFtZW5kZW1lbnRTdGFuZGFyZFxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGNvcnBzID0gYW1lbmRlbWVudC5jb3Jwc1xuICBpZiAoY29ycHMgIT09IHVuZGVmaW5lZCkge1xuICAgIGNsZWFuWG1sQXJ0ZWZhY3RzKGNvcnBzKVxuXG4gICAgY29uc3QgY29udGVudUF1dGV1ciA9IGNvcnBzLmNvbnRlbnVBdXRldXJcbiAgICBpZiAoY29udGVudUF1dGV1ciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjbGVhblhtbEFydGVmYWN0cyhjb250ZW51QXV0ZXVyKVxuXG4gICAgICBjb25zdCBhdmFudEFwcGVsID0gY29udGVudUF1dGV1ci5hdmFudEFwcGVsXG4gICAgICBpZiAoYXZhbnRBcHBlbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNsZWFuWG1sQXJ0ZWZhY3RzKGF2YW50QXBwZWwpXG5cbiAgICAgICAgY2xlYW5EaXNwb3NpdGlmQW1kdENyZWRpdFBMRihhdmFudEFwcGVsLmRpc3Bvc2l0aWZBbWR0Q3JlZGl0UExGLCB7XG4gICAgICAgICAgcmVjdGlmaWNhdGlmOiBmYWxzZSxcbiAgICAgICAgfSlcbiAgICAgICAgY2xlYW5EaXNwb3NpdGlmQW1kdENyZWRpdFBMRihhdmFudEFwcGVsLmRpc3Bvc2l0aWZBbWR0Q3JlZGl0UExGUiwge1xuICAgICAgICAgIHJlY3RpZmljYXRpZjogdHJ1ZSxcbiAgICAgICAgfSlcblxuICAgICAgICBpZiAoT2JqZWN0LmtleXMoYXZhbnRBcHBlbCkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgZGVsZXRlIGNvbnRlbnVBdXRldXIuYXZhbnRBcHBlbFxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChjb250ZW51QXV0ZXVyLmFubmV4ZUV4cG9zZVNvbW1haXJlLCB1bmRlZmluZWQpXG5cbiAgICAgIGNsZWFuRGlzcG9zaXRpZkFtZHRDcmVkaXRQTEYoY29udGVudUF1dGV1ci5kaXNwb3NpdGlmQW1kdENyZWRpdFBMRiwge1xuICAgICAgICByZWN0aWZpY2F0aWY6IGZhbHNlLFxuICAgICAgfSlcbiAgICAgIGNsZWFuRGlzcG9zaXRpZkFtZHRDcmVkaXRQTEYoY29udGVudUF1dGV1ci5kaXNwb3NpdGlmQW1kdENyZWRpdFBMRlIsIHtcbiAgICAgICAgcmVjdGlmaWNhdGlmOiB0cnVlLFxuICAgICAgfSlcbiAgICB9XG4gIH1cblxuICBjb25zdCBjeWNsZURlVmllID0gYW1lbmRlbWVudC5jeWNsZURlVmllXG4gIGlmIChjeWNsZURlVmllICE9PSB1bmRlZmluZWQpIHtcbiAgICBjbGVhblhtbEFydGVmYWN0cyhjeWNsZURlVmllKVxuXG4gICAgY29uc3QgZXRhdERlc1RyYWl0ZW1lbnRzID0gY3ljbGVEZVZpZS5ldGF0RGVzVHJhaXRlbWVudHNcbiAgICB7XG4gICAgICBjbGVhblhtbEFydGVmYWN0cyhldGF0RGVzVHJhaXRlbWVudHMpXG5cbiAgICAgIGNvbnN0IGV0YXQgPSBldGF0RGVzVHJhaXRlbWVudHMuZXRhdFxuICAgICAge1xuICAgICAgICBjbGVhblhtbEFydGVmYWN0cyhldGF0KVxuICAgICAgfVxuXG4gICAgICBjb25zdCBzb3VzRXRhdCA9IGV0YXREZXNUcmFpdGVtZW50cy5zb3VzRXRhdFxuICAgICAgaWYgKHNvdXNFdGF0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY2xlYW5YbWxBcnRlZmFjdHMoc291c0V0YXQpXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKGFtZW5kZW1lbnQucmVwcmVzZW50YXRpb25zICE9PSB1bmRlZmluZWQpIHtcbiAgICBjb25zdCByZXByZXNlbnRhdGlvbiA9IGFtZW5kZW1lbnQucmVwcmVzZW50YXRpb25zLnJlcHJlc2VudGF0aW9uXG4gICAgYXNzZXJ0KCFBcnJheS5pc0FycmF5KHJlcHJlc2VudGF0aW9uKSlcbiAgICBhbWVuZGVtZW50LnJlcHJlc2VudGF0aW9uID0gcmVwcmVzZW50YXRpb25cbiAgICBkZWxldGUgYW1lbmRlbWVudC5yZXByZXNlbnRhdGlvbnNcbiAgICB7XG4gICAgICBjbGVhblhtbEFydGVmYWN0cyhyZXByZXNlbnRhdGlvbilcblxuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlcHJlc2VudGF0aW9uLnJlcFNvdXJjZSwgdW5kZWZpbmVkKVxuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlcHJlc2VudGF0aW9uLm9mZnNldCwgdW5kZWZpbmVkKVxuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlcHJlc2VudGF0aW9uLmRhdGVEaXNwb1JlcHJlc2VudGF0aW9uLCB1bmRlZmluZWQpXG5cbiAgICAgIGNvbnN0IHN0YXR1dFJlcHJlc2VudGF0aW9uID0gcmVwcmVzZW50YXRpb24uc3RhdHV0UmVwcmVzZW50YXRpb25cbiAgICAgIHtcbiAgICAgICAgY2xlYW5Cb29sZWFuQXR0cmlidXRlKHN0YXR1dFJlcHJlc2VudGF0aW9uLCBcImNhbm9uaXF1ZVwiKVxuICAgICAgICBjbGVhbkJvb2xlYW5BdHRyaWJ1dGUoc3RhdHV0UmVwcmVzZW50YXRpb24sIFwiZW5yZWdpc3RyZW1lbnRcIilcbiAgICAgICAgY2xlYW5Cb29sZWFuQXR0cmlidXRlKHN0YXR1dFJlcHJlc2VudGF0aW9uLCBcIm9mZmljaWVsbGVcIilcbiAgICAgICAgY2xlYW5Cb29sZWFuQXR0cmlidXRlKHN0YXR1dFJlcHJlc2VudGF0aW9uLCBcInRyYW5zY3JpcHRpb25cIilcbiAgICAgICAgY2xlYW5Cb29sZWFuQXR0cmlidXRlKHN0YXR1dFJlcHJlc2VudGF0aW9uLCBcInZlcmJhdGltXCIpXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY29uc3QgbG9pUmVmZXJlbmNlID0gYW1lbmRlbWVudC5sb2lSZWZlcmVuY2VcbiAgaWYgKGxvaVJlZmVyZW5jZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgY2xlYW5YbWxBcnRlZmFjdHMobG9pUmVmZXJlbmNlKVxuICB9XG5cbiAgY29uc3QgZGlzY3Vzc2lvbkNvbW11bmUgPSBhbWVuZGVtZW50LmRpc2N1c3Npb25Db21tdW5lXG4gIGlmIChkaXNjdXNzaW9uQ29tbXVuZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgY2xlYW5YbWxBcnRlZmFjdHMoZGlzY3Vzc2lvbkNvbW11bmUpXG4gIH1cblxuICBjb25zdCBkaXNjdXNzaW9uSWRlbnRpcXVlID0gYW1lbmRlbWVudC5kaXNjdXNzaW9uSWRlbnRpcXVlXG4gIGlmIChkaXNjdXNzaW9uSWRlbnRpcXVlICE9PSB1bmRlZmluZWQpIHtcbiAgICBjbGVhblhtbEFydGVmYWN0cyhkaXNjdXNzaW9uSWRlbnRpcXVlKVxuICB9XG59XG5cbmZ1bmN0aW9uIGNsZWFuRGlzcG9zaXRpZkFtZHRDcmVkaXRQTEYoXG4gIGRpc3Bvc2l0aWZBbWR0Q3JlZGl0UExGOiBhbnksXG4gIHsgcmVjdGlmaWNhdGlmIH06IHsgcmVjdGlmaWNhdGlmOiBib29sZWFuIH0sXG4pOiB2b2lkIHtcbiAgaWYgKGRpc3Bvc2l0aWZBbWR0Q3JlZGl0UExGICE9PSB1bmRlZmluZWQpIHtcbiAgICBjb25zdCBsaXN0ZVByb2dyYW1tZXMgPSBkaXNwb3NpdGlmQW1kdENyZWRpdFBMRi5saXN0ZVByb2dyYW1tZXM/LnByb2dyYW1tZVxuICAgIGlmIChsaXN0ZVByb2dyYW1tZXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkobGlzdGVQcm9ncmFtbWVzKSkge1xuICAgICAgICBkaXNwb3NpdGlmQW1kdENyZWRpdFBMRi5saXN0ZVByb2dyYW1tZXMgPSBsaXN0ZVByb2dyYW1tZXNcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFzc2VydChsaXN0ZVByb2dyYW1tZXMpXG4gICAgICAgIGRpc3Bvc2l0aWZBbWR0Q3JlZGl0UExGLmxpc3RlUHJvZ3JhbW1lcyA9IFtsaXN0ZVByb2dyYW1tZXNdXG4gICAgICB9XG5cbiAgICAgIGZvciAoY29uc3QgcHJvZ3JhbW1lIG9mIGRpc3Bvc2l0aWZBbWR0Q3JlZGl0UExGLmxpc3RlUHJvZ3JhbW1lcykge1xuICAgICAgICBjbGVhblhtbEFydGVmYWN0cyhwcm9ncmFtbWUpXG5cbiAgICAgICAgaWYgKHByb2dyYW1tZS5saWduZXNDcmVkaXRzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBsZXQgbGlnbmVzQ3JlZGl0cyA9IHByb2dyYW1tZS5saWduZXNDcmVkaXRzLmxpZ25lQ3JlZGl0XG4gICAgICAgICAgaWYgKGxpZ25lc0NyZWRpdHMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgZGVsZXRlIHByb2dyYW1tZS5saWduZXNDcmVkaXRzXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShsaWduZXNDcmVkaXRzKSkge1xuICAgICAgICAgICAgICBhc3NlcnQobGlnbmVzQ3JlZGl0cylcbiAgICAgICAgICAgICAgbGlnbmVzQ3JlZGl0cyA9IFtsaWduZXNDcmVkaXRzXVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcHJvZ3JhbW1lLmxpZ25lc0NyZWRpdHMgPSBsaWduZXNDcmVkaXRzXG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChsaWduZXNDcmVkaXRzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgbGlnbmVDcmVkaXQgb2YgbGlnbmVzQ3JlZGl0cykge1xuICAgICAgICAgICAgICBpZiAocmVjdGlmaWNhdGlmKSB7XG4gICAgICAgICAgICAgICAgY2xlYW5MaWduZUNyZWRpdFBMRlIobGlnbmVDcmVkaXQpXG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY2xlYW5YbWxBcnRlZmFjdHMobGlnbmVDcmVkaXQpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gY2xlYW5MaWduZUNyZWRpdFBMRlIobGlnbmVDcmVkaXRQTEZSOiBhbnkpOiB2b2lkIHtcbiAgY2xlYW5YbWxBcnRlZmFjdHMobGlnbmVDcmVkaXRQTEZSKVxuXG4gIGlmIChsaWduZUNyZWRpdFBMRlIubGlnbmVzQ3JlZGl0cyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgbGV0IGxpZ25lc0NyZWRpdHMgPSBsaWduZUNyZWRpdFBMRlIubGlnbmVzQ3JlZGl0cy5saWduZUNyZWRpdFxuICAgIGlmIChsaWduZXNDcmVkaXRzID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGRlbGV0ZSBsaWduZUNyZWRpdFBMRlIubGlnbmVzQ3JlZGl0c1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkobGlnbmVzQ3JlZGl0cykpIHtcbiAgICAgICAgYXNzZXJ0KGxpZ25lc0NyZWRpdHMpXG4gICAgICAgIGxpZ25lc0NyZWRpdHMgPSBbbGlnbmVzQ3JlZGl0c11cbiAgICAgIH1cbiAgICAgIGxpZ25lQ3JlZGl0UExGUi5saWduZXNDcmVkaXRzID0gbGlnbmVzQ3JlZGl0c1xuICAgIH1cbiAgICBpZiAobGlnbmVzQ3JlZGl0cyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBmb3IgKGNvbnN0IGxpZ25lQ3JlZGl0IG9mIGxpZ25lc0NyZWRpdHMpIHtcbiAgICAgICAgY2xlYW5MaWduZUNyZWRpdFBMRlIobGlnbmVDcmVkaXQpXG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjbGVhblRleHRlTGVnaXNsYXRpZih0ZXh0ZUxlZ2lzbGF0aWY6IGFueSk6IHZvaWQge1xuICBjbGVhblhtbEFydGVmYWN0cyh0ZXh0ZUxlZ2lzbGF0aWYpXG5cbiAgLy8gTm90ZTogVGhlIGZvbGxvd2luZyBmaWVsZHMgaW4gYHRleHRlTGVnaXNsYXRpZi5hbWVuZGVtZW50c2AgYXJlIGN1cnJlbnRseSBpZ25vcmVkOlxuICAvLyAqIFwiI3RleHRcIj86ICAgICAgIHN0cmluZztcbiAgLy8gKiBvZmZzZXQ/OiAgICAgICAgbnVsbDtcbiAgLy8gKiBub20/OiAgICAgICAgICAgTm9tO1xuICAvLyAqIGF2YW50X0FfQXByZXM/OiBEaXZpc2lvbkF2YW50QUFwcmVzO1xuICAvLyAqIGRhdGVEZXBvdD86ICAgICBEYXRlO1xuICAvLyAqIGRvY3VtZW50VVJJPzogICBzdHJpbmc7XG4gIC8vIEJlY2F1c2UgaXQgc2VlbXMgdGhleSBzaG91bGQgYmVsb25nIHRvIGFuIFwiYW1lbmRlbWVudFwiLlxuICBsZXQgYW1lbmRlbWVudCA9IHRleHRlTGVnaXNsYXRpZi5hbWVuZGVtZW50cy5hbWVuZGVtZW50XG4gIGlmIChBcnJheS5pc0FycmF5KGFtZW5kZW1lbnQpKSB7XG4gICAgdGV4dGVMZWdpc2xhdGlmLmFtZW5kZW1lbnRzID0gYW1lbmRlbWVudFxuICB9IGVsc2Uge1xuICAgIGFzc2VydChhbWVuZGVtZW50KVxuICAgIHRleHRlTGVnaXNsYXRpZi5hbWVuZGVtZW50cyA9IFthbWVuZGVtZW50XVxuICB9XG5cbiAgZm9yIChjb25zdCBhbWVuZGVtZW50IG9mIHRleHRlTGVnaXNsYXRpZi5hbWVuZGVtZW50cykge1xuICAgIGNsZWFuQW1lbmRlbWVudChhbWVuZGVtZW50KVxuICB9XG59XG4iXSwibWFwcGluZ3MiOiJBQUFBLE9BQU9BLE1BQU0sTUFBTSxRQUFRO0FBQUEsU0FFbEJDLHFCQUFxQixFQUFFQyxpQkFBaUI7QUFBQSxTQUN4Q0MsV0FBVztBQUVwQixPQUFPLFNBQVNDLGVBQWVBLENBQUNDLFVBQWUsRUFBUTtFQUNyREgsaUJBQWlCLENBQUNHLFVBQVUsQ0FBQztFQUU3QixNQUFNQyxXQUFXLEdBQUdELFVBQVUsQ0FBQ0MsV0FBVztFQUMxQztJQUNFSixpQkFBaUIsQ0FBQ0ksV0FBVyxDQUFDO0lBRTlCLE1BQU1DLE1BQU0sR0FBR0QsV0FBVyxDQUFDQyxNQUFNO0lBQ2pDO01BQ0VMLGlCQUFpQixDQUFDSyxNQUFNLENBQUM7SUFDM0I7SUFFQSxJQUFJRCxXQUFXLENBQUNFLGFBQWEsS0FBS0MsU0FBUyxFQUFFO01BQzNDLE1BQU1DLFNBQVMsR0FBR0osV0FBVyxDQUFDRSxhQUFhLENBQUNFLFNBQVM7TUFDckQsSUFBSUMsS0FBSyxDQUFDQyxPQUFPLENBQUNGLFNBQVMsQ0FBQyxFQUFFO1FBQzVCSixXQUFXLENBQUNPLGlCQUFpQixHQUFHSCxTQUFTO01BQzNDLENBQUMsTUFBTTtRQUNMVixNQUFNLENBQUNVLFNBQVMsQ0FBQztRQUNqQkosV0FBVyxDQUFDTyxpQkFBaUIsR0FBRyxDQUFDSCxT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