UNPKG

@tricoteuses/assemblee

Version:

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

253 lines (248 loc) 30.7 kB
import assert from "assert"; import { cleanRapporteur } from "./acteurs.mjs"; import { cleanXmlArtefacts } from "./xml.mjs"; export function cleanActeLegislatif(acteLegislatif) { cleanXmlArtefacts(acteLegislatif); const xsiType = acteLegislatif["@xsi:type"]; if (xsiType !== undefined) { acteLegislatif.xsiType = xsiType; delete acteLegislatif["@xsi:type"]; } // let auteursRefs = acteLegislatif.auteurs; if (auteursRefs !== undefined) { auteursRefs = auteursRefs.acteurRef; if (!Array.isArray(auteursRefs)) { assert(auteursRefs); auteursRefs = [auteursRefs]; } acteLegislatif.auteursRefs = auteursRefs; delete acteLegislatif.auteurs; } const casSaisine = acteLegislatif.casSaisine; if (casSaisine !== undefined) { cleanTypeDeclaration(casSaisine); } const contributionInternaute = acteLegislatif.contributionInternaute; if (contributionInternaute !== undefined) { cleanXmlArtefacts(contributionInternaute); } assert.strictEqual(acteLegislatif.dateRetrait, undefined); const decision = acteLegislatif.decision; if (decision !== undefined) { cleanTypeDeclaration(decision); } const infoJo = acteLegislatif.infoJO; if (infoJo !== undefined) { cleanInfoJo(infoJo); acteLegislatif.infoJo = infoJo; delete acteLegislatif.infoJO; } const infoJoce = acteLegislatif.infoJOCE; if (infoJoce !== undefined) { acteLegislatif.infoJoce = infoJoce; delete acteLegislatif.infoJOCE; const refJoce = infoJoce.refJOCE; if (refJoce !== undefined) { infoJoce.refJoce = refJoce; delete infoJoce.refJOCE; } const dateJoce = infoJoce.dateJOCE; if (dateJoce !== undefined) { infoJoce.dateJoce = dateJoce; delete infoJoce.dateJOCE; } } let infoJoRect = acteLegislatif.infoJORect; if (infoJoRect !== undefined) { if (!Array.isArray(infoJoRect)) { infoJoRect = [infoJoRect]; } acteLegislatif.infoJoRect = infoJoRect; delete acteLegislatif.infoJORect; for (const infoJoRectItem of infoJoRect) { cleanInfoJo(infoJoRectItem); } } // Convert acteLegislatif.initiateur and acteLegislatif.initiateurs to an Initiateur. cleanActeOuDossierInitiateur(acteLegislatif); let initiateur = acteLegislatif.initiateurs; if (initiateur !== undefined) { assert.strictEqual(acteLegislatif.initiateur, undefined); if (initiateur.acteurRef === undefined) { assert.notStrictEqual(initiateur.organeRef, undefined); } else { if (!Array.isArray(initiateur)) { assert(initiateur); initiateur = [initiateur]; } initiateur = { acteurs: initiateur }; } acteLegislatif.initiateur = initiateur; delete acteLegislatif.initiateurs; } assert.strictEqual(acteLegislatif.odSeancejRef, undefined); const provenanceRef = acteLegislatif.provenance; if (provenanceRef !== undefined) { delete acteLegislatif.provenance; acteLegislatif.provenanceRef = provenanceRef; } let rapporteurs = acteLegislatif.rapporteurs; if (rapporteurs !== undefined) { rapporteurs = rapporteurs.rapporteur; if (!Array.isArray(rapporteurs)) { assert(rapporteurs); rapporteurs = [rapporteurs]; } acteLegislatif.rapporteurs = rapporteurs; for (const rapporteur of rapporteurs) { cleanRapporteur(rapporteur); } } const referenceNor = acteLegislatif.referenceNOR; if (referenceNor !== undefined) { acteLegislatif.referenceNor = referenceNor; delete acteLegislatif.referenceNOR; } assert.strictEqual(acteLegislatif.reunion, undefined); const statutAdoption = acteLegislatif.statutAdoption; if (statutAdoption !== undefined) { cleanTypeDeclaration(statutAdoption); } const statutConclusion = acteLegislatif.statutConclusion; if (statutConclusion !== undefined) { cleanTypeDeclaration(statutConclusion); if (statutConclusion.famCode === "TSORTFnull") { // Occured once in https://git.en-root.org/tricoteuses/data/assemblee-brut/Dossiers_Legislatifs_XV/commit/8383800fe7d993da7b596c5b20fadc31c4df3835 delete acteLegislatif.statutConclusion; } } const texteAdopteRef = acteLegislatif.texteAdopte; if (texteAdopteRef !== undefined) { delete acteLegislatif.texteAdopte; acteLegislatif.texteAdopteRef = texteAdopteRef; } const texteAssocieRef = acteLegislatif.texteAssocie; if (texteAssocieRef !== undefined) { delete acteLegislatif.texteAssocie; acteLegislatif.texteAssocieRef = texteAssocieRef; } let textesAssocies = acteLegislatif.textesAssocies; if (textesAssocies !== undefined) { textesAssocies = textesAssocies.texteAssocie; if (!Array.isArray(textesAssocies)) { assert(textesAssocies); textesAssocies = [textesAssocies]; } acteLegislatif.textesAssocies = textesAssocies; for (const texteAssocie of textesAssocies) { const texteAssocieRef = texteAssocie.refTexteAssocie; if (texteAssocieRef !== undefined) { delete texteAssocie.refTexteAssocie; texteAssocie.texteAssocieRef = texteAssocieRef; } } } const typeDeclaration = acteLegislatif.typeDeclaration; if (typeDeclaration !== undefined) { cleanTypeDeclaration(typeDeclaration); } const typeMotion = acteLegislatif.typeMotion; if (typeMotion !== undefined) { cleanTypeDeclaration(typeMotion); } const typeMotionCensure = acteLegislatif.typeMotionCensure; if (typeMotionCensure !== undefined) { cleanTypeDeclaration(typeMotionCensure); } let voteRefs = acteLegislatif.voteRefs; if (voteRefs !== undefined) { voteRefs = voteRefs.voteRef; if (!Array.isArray(voteRefs)) { assert(voteRefs); voteRefs = [voteRefs]; } acteLegislatif.voteRefs = voteRefs; } // let actesLegislatifs = acteLegislatif.actesLegislatifs; if (actesLegislatifs !== undefined) { actesLegislatifs = actesLegislatifs.acteLegislatif; if (!Array.isArray(actesLegislatifs)) { assert(actesLegislatifs); actesLegislatifs = [actesLegislatifs]; } acteLegislatif.actesLegislatifs = actesLegislatifs; for (const acteLegislatif of actesLegislatifs) { cleanActeLegislatif(acteLegislatif); } } } export function cleanActeOuDossierInitiateur(acteOuDossier) { const initiateur = acteOuDossier.initiateur; if (initiateur !== undefined) { let acteurs = initiateur.acteurs; if (acteurs !== undefined) { acteurs = acteurs.acteur; if (!Array.isArray(acteurs)) { assert(acteurs); acteurs = [acteurs]; } if (acteurs.length > 0) { initiateur.acteurs = acteurs; } else { delete initiateur.acteurs; } } let organeRef = initiateur.organes; if (organeRef !== undefined) { organeRef = organeRef.organe.organeRef.uid; assert.notStrictEqual(organeRef, undefined); initiateur.organeRef = organeRef; delete initiateur.organes; } if (initiateur.acteurs === undefined && initiateur.organeRef === undefined) { delete acteOuDossier.initiateur; } } } function cleanInfoJo(infoJo) { cleanXmlArtefacts(infoJo); const typeJo = infoJo.typeJO; if (typeJo !== undefined) { infoJo.typeJo = typeJo; delete infoJo.typeJO; } const dateJo = infoJo.dateJO; if (dateJo !== undefined) { infoJo.dateJo = dateJo; delete infoJo.dateJO; } assert.strictEqual(infoJo.pageJO, undefined); const numJo = infoJo.numJO; if (numJo !== undefined) { infoJo.numJo = numJo; delete infoJo.numJO; } const referenceNor = infoJo.referenceNOR; if (referenceNor !== undefined) { infoJo.referenceNor = referenceNor; delete infoJo.referenceNOR; } } function cleanTypeDeclaration(typeDeclaration) { typeDeclaration.famCode = typeDeclaration.fam_code; delete typeDeclaration.fam_code; assert(typeDeclaration.famCode); if (!typeDeclaration.libelle) { // Occured once in https://git.en-root.org/tricoteuses/data/assemblee-brut/Dossiers_Legislatifs_XV/commit/8383800fe7d993da7b596c5b20fadc31c4df3835: // "statutConclusion": { // "fam_code": "TSORTFnull" // }, // This famCode is an error. typeDeclaration.libelle = typeDeclaration.famCode; } } //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJhc3NlcnQiLCJjbGVhblJhcHBvcnRldXIiLCJjbGVhblhtbEFydGVmYWN0cyIsImNsZWFuQWN0ZUxlZ2lzbGF0aWYiLCJhY3RlTGVnaXNsYXRpZiIsInhzaVR5cGUiLCJ1bmRlZmluZWQiLCJhdXRldXJzUmVmcyIsImF1dGV1cnMiLCJhY3RldXJSZWYiLCJBcnJheSIsImlzQXJyYXkiLCJjYXNTYWlzaW5lIiwiY2xlYW5UeXBlRGVjbGFyYXRpb24iLCJjb250cmlidXRpb25JbnRlcm5hdXRlIiwic3RyaWN0RXF1YWwiLCJkYXRlUmV0cmFpdCIsImRlY2lzaW9uIiwiaW5mb0pvIiwiaW5mb0pPIiwiY2xlYW5JbmZvSm8iLCJpbmZvSm9jZSIsImluZm9KT0NFIiwicmVmSm9jZSIsInJlZkpPQ0UiLCJkYXRlSm9jZSIsImRhdGVKT0NFIiwiaW5mb0pvUmVjdCIsImluZm9KT1JlY3QiLCJpbmZvSm9SZWN0SXRlbSIsImNsZWFuQWN0ZU91RG9zc2llckluaXRpYXRldXIiLCJpbml0aWF0ZXVyIiwiaW5pdGlhdGV1cnMiLCJub3RTdHJpY3RFcXVhbCIsIm9yZ2FuZVJlZiIsImFjdGV1cnMiLCJvZFNlYW5jZWpSZWYiLCJwcm92ZW5hbmNlUmVmIiwicHJvdmVuYW5jZSIsInJhcHBvcnRldXJzIiwicmFwcG9ydGV1ciIsInJlZmVyZW5jZU5vciIsInJlZmVyZW5jZU5PUiIsInJldW5pb24iLCJzdGF0dXRBZG9wdGlvbiIsInN0YXR1dENvbmNsdXNpb24iLCJmYW1Db2RlIiwidGV4dGVBZG9wdGVSZWYiLCJ0ZXh0ZUFkb3B0ZSIsInRleHRlQXNzb2NpZVJlZiIsInRleHRlQXNzb2NpZSIsInRleHRlc0Fzc29jaWVzIiwicmVmVGV4dGVBc3NvY2llIiwidHlwZURlY2xhcmF0aW9uIiwidHlwZU1vdGlvbiIsInR5cGVNb3Rpb25DZW5zdXJlIiwidm90ZVJlZnMiLCJ2b3RlUmVmIiwiYWN0ZXNMZWdpc2xhdGlmcyIsImFjdGVPdURvc3NpZXIiLCJhY3RldXIiLCJsZW5ndGgiLCJvcmdhbmVzIiwib3JnYW5lIiwidWlkIiwidHlwZUpvIiwidHlwZUpPIiwiZGF0ZUpvIiwiZGF0ZUpPIiwicGFnZUpPIiwibnVtSm8iLCJudW1KTyIsImZhbV9jb2RlIiwibGliZWxsZSJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jbGVhbmVycy9hY3Rlc19sZWdpc2xhdGlmcy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXNzZXJ0IGZyb20gXCJhc3NlcnRcIlxuXG5pbXBvcnQgeyBjbGVhblJhcHBvcnRldXIgfSBmcm9tIFwiLi9hY3RldXJzXCJcbmltcG9ydCB7IGNsZWFuWG1sQXJ0ZWZhY3RzIH0gZnJvbSBcIi4veG1sXCJcblxuZXhwb3J0IGZ1bmN0aW9uIGNsZWFuQWN0ZUxlZ2lzbGF0aWYoYWN0ZUxlZ2lzbGF0aWY6IGFueSk6IHZvaWQge1xuICBjbGVhblhtbEFydGVmYWN0cyhhY3RlTGVnaXNsYXRpZilcblxuICBjb25zdCB4c2lUeXBlID0gYWN0ZUxlZ2lzbGF0aWZbXCJAeHNpOnR5cGVcIl1cbiAgaWYgKHhzaVR5cGUgIT09IHVuZGVmaW5lZCkge1xuICAgIGFjdGVMZWdpc2xhdGlmLnhzaVR5cGUgPSB4c2lUeXBlXG4gICAgZGVsZXRlIGFjdGVMZWdpc2xhdGlmW1wiQHhzaTp0eXBlXCJdXG4gIH1cblxuICAvL1xuXG4gIGxldCBhdXRldXJzUmVmcyA9IGFjdGVMZWdpc2xhdGlmLmF1dGV1cnNcbiAgaWYgKGF1dGV1cnNSZWZzICE9PSB1bmRlZmluZWQpIHtcbiAgICBhdXRldXJzUmVmcyA9IGF1dGV1cnNSZWZzLmFjdGV1clJlZlxuICAgIGlmICghQXJyYXkuaXNBcnJheShhdXRldXJzUmVmcykpIHtcbiAgICAgIGFzc2VydChhdXRldXJzUmVmcylcbiAgICAgIGF1dGV1cnNSZWZzID0gW2F1dGV1cnNSZWZzXVxuICAgIH1cbiAgICBhY3RlTGVnaXNsYXRpZi5hdXRldXJzUmVmcyA9IGF1dGV1cnNSZWZzXG4gICAgZGVsZXRlIGFjdGVMZWdpc2xhdGlmLmF1dGV1cnNcbiAgfVxuXG4gIGNvbnN0IGNhc1NhaXNpbmUgPSBhY3RlTGVnaXNsYXRpZi5jYXNTYWlzaW5lXG4gIGlmIChjYXNTYWlzaW5lICE9PSB1bmRlZmluZWQpIHtcbiAgICBjbGVhblR5cGVEZWNsYXJhdGlvbihjYXNTYWlzaW5lKVxuICB9XG5cbiAgY29uc3QgY29udHJpYnV0aW9uSW50ZXJuYXV0ZSA9IGFjdGVMZWdpc2xhdGlmLmNvbnRyaWJ1dGlvbkludGVybmF1dGVcbiAgaWYgKGNvbnRyaWJ1dGlvbkludGVybmF1dGUgIT09IHVuZGVmaW5lZCkge1xuICAgIGNsZWFuWG1sQXJ0ZWZhY3RzKGNvbnRyaWJ1dGlvbkludGVybmF1dGUpXG4gIH1cblxuICBhc3NlcnQuc3RyaWN0RXF1YWwoYWN0ZUxlZ2lzbGF0aWYuZGF0ZVJldHJhaXQsIHVuZGVmaW5lZClcblxuICBjb25zdCBkZWNpc2lvbiA9IGFjdGVMZWdpc2xhdGlmLmRlY2lzaW9uXG4gIGlmIChkZWNpc2lvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgY2xlYW5UeXBlRGVjbGFyYXRpb24oZGVjaXNpb24pXG4gIH1cblxuICBjb25zdCBpbmZvSm8gPSBhY3RlTGVnaXNsYXRpZi5pbmZvSk9cbiAgaWYgKGluZm9KbyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgY2xlYW5JbmZvSm8oaW5mb0pvKVxuICAgIGFjdGVMZWdpc2xhdGlmLmluZm9KbyA9IGluZm9Kb1xuICAgIGRlbGV0ZSBhY3RlTGVnaXNsYXRpZi5pbmZvSk9cbiAgfVxuXG4gIGNvbnN0IGluZm9Kb2NlID0gYWN0ZUxlZ2lzbGF0aWYuaW5mb0pPQ0VcbiAgaWYgKGluZm9Kb2NlICE9PSB1bmRlZmluZWQpIHtcbiAgICBhY3RlTGVnaXNsYXRpZi5pbmZvSm9jZSA9IGluZm9Kb2NlXG4gICAgZGVsZXRlIGFjdGVMZWdpc2xhdGlmLmluZm9KT0NFXG5cbiAgICBjb25zdCByZWZKb2NlID0gaW5mb0pvY2UucmVmSk9DRVxuICAgIGlmIChyZWZKb2NlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGluZm9Kb2NlLnJlZkpvY2UgPSByZWZKb2NlXG4gICAgICBkZWxldGUgaW5mb0pvY2UucmVmSk9DRVxuICAgIH1cblxuICAgIGNvbnN0IGRhdGVKb2NlID0gaW5mb0pvY2UuZGF0ZUpPQ0VcbiAgICBpZiAoZGF0ZUpvY2UgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaW5mb0pvY2UuZGF0ZUpvY2UgPSBkYXRlSm9jZVxuICAgICAgZGVsZXRlIGluZm9Kb2NlLmRhdGVKT0NFXG4gICAgfVxuICB9XG5cbiAgbGV0IGluZm9Kb1JlY3QgPSBhY3RlTGVnaXNsYXRpZi5pbmZvSk9SZWN0XG4gIGlmIChpbmZvSm9SZWN0ICE9PSB1bmRlZmluZWQpIHtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoaW5mb0pvUmVjdCkpIHtcbiAgICAgIGluZm9Kb1JlY3QgPSBbaW5mb0pvUmVjdF1cbiAgICB9XG4gICAgYWN0ZUxlZ2lzbGF0aWYuaW5mb0pvUmVjdCA9IGluZm9Kb1JlY3RcbiAgICBkZWxldGUgYWN0ZUxlZ2lzbGF0aWYuaW5mb0pPUmVjdFxuXG4gICAgZm9yIChjb25zdCBpbmZvSm9SZWN0SXRlbSBvZiBpbmZvSm9SZWN0KSB7XG4gICAgICBjbGVhbkluZm9KbyhpbmZvSm9SZWN0SXRlbSlcbiAgICB9XG4gIH1cblxuICAvLyBDb252ZXJ0IGFjdGVMZWdpc2xhdGlmLmluaXRpYXRldXIgYW5kIGFjdGVMZWdpc2xhdGlmLmluaXRpYXRldXJzIHRvIGFuIEluaXRpYXRldXIuXG4gIGNsZWFuQWN0ZU91RG9zc2llckluaXRpYXRldXIoYWN0ZUxlZ2lzbGF0aWYpXG4gIGxldCBpbml0aWF0ZXVyID0gYWN0ZUxlZ2lzbGF0aWYuaW5pdGlhdGV1cnNcbiAgaWYgKGluaXRpYXRldXIgIT09IHVuZGVmaW5lZCkge1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChhY3RlTGVnaXNsYXRpZi5pbml0aWF0ZXVyLCB1bmRlZmluZWQpXG4gICAgaWYgKGluaXRpYXRldXIuYWN0ZXVyUmVmID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGFzc2VydC5ub3RTdHJpY3RFcXVhbChpbml0aWF0ZXVyLm9yZ2FuZVJlZiwgdW5kZWZpbmVkKVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkoaW5pdGlhdGV1cikpIHtcbiAgICAgICAgYXNzZXJ0KGluaXRpYXRldXIpXG4gICAgICAgIGluaXRpYXRldXIgPSBbaW5pdGlhdGV1cl1cbiAgICAgIH1cbiAgICAgIGluaXRpYXRldXIgPSB7XG4gICAgICAgIGFjdGV1cnM6IGluaXRpYXRldXIsXG4gICAgICB9XG4gICAgfVxuICAgIGFjdGVMZWdpc2xhdGlmLmluaXRpYXRldXIgPSBpbml0aWF0ZXVyXG4gICAgZGVsZXRlIGFjdGVMZWdpc2xhdGlmLmluaXRpYXRldXJzXG4gIH1cblxuICBhc3NlcnQuc3RyaWN0RXF1YWwoYWN0ZUxlZ2lzbGF0aWYub2RTZWFuY2VqUmVmLCB1bmRlZmluZWQpXG5cbiAgY29uc3QgcHJvdmVuYW5jZVJlZiA9IGFjdGVMZWdpc2xhdGlmLnByb3ZlbmFuY2VcbiAgaWYgKHByb3ZlbmFuY2VSZWYgIT09IHVuZGVmaW5lZCkge1xuICAgIGRlbGV0ZSBhY3RlTGVnaXNsYXRpZi5wcm92ZW5hbmNlXG4gICAgYWN0ZUxlZ2lzbGF0aWYucHJvdmVuYW5jZVJlZiA9IHByb3ZlbmFuY2VSZWZcbiAgfVxuXG4gIGxldCByYXBwb3J0ZXVycyA9IGFjdGVMZWdpc2xhdGlmLnJhcHBvcnRldXJzXG4gIGlmIChyYXBwb3J0ZXVycyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcmFwcG9ydGV1cnMgPSByYXBwb3J0ZXVycy5yYXBwb3J0ZXVyXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHJhcHBvcnRldXJzKSkge1xuICAgICAgYXNzZXJ0KHJhcHBvcnRldXJzKVxuICAgICAgcmFwcG9ydGV1cnMgPSBbcmFwcG9ydGV1cnNdXG4gICAgfVxuICAgIGFjdGVMZWdpc2xhdGlmLnJhcHBvcnRldXJzID0gcmFwcG9ydGV1cnNcbiAgICBmb3IgKGNvbnN0IHJhcHBvcnRldXIgb2YgcmFwcG9ydGV1cnMpIHtcbiAgICAgIGNsZWFuUmFwcG9ydGV1cihyYXBwb3J0ZXVyKVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHJlZmVyZW5jZU5vciA9IGFjdGVMZWdpc2xhdGlmLnJlZmVyZW5jZU5PUlxuICBpZiAocmVmZXJlbmNlTm9yICE9PSB1bmRlZmluZWQpIHtcbiAgICBhY3RlTGVnaXNsYXRpZi5yZWZlcmVuY2VOb3IgPSByZWZlcmVuY2VOb3JcbiAgICBkZWxldGUgYWN0ZUxlZ2lzbGF0aWYucmVmZXJlbmNlTk9SXG4gIH1cblxuICBhc3NlcnQuc3RyaWN0RXF1YWwoYWN0ZUxlZ2lzbGF0aWYucmV1bmlvbiwgdW5kZWZpbmVkKVxuXG4gIGNvbnN0IHN0YXR1dEFkb3B0aW9uID0gYWN0ZUxlZ2lzbGF0aWYuc3RhdHV0QWRvcHRpb25cbiAgaWYgKHN0YXR1dEFkb3B0aW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICBjbGVhblR5cGVEZWNsYXJhdGlvbihzdGF0dXRBZG9wdGlvbilcbiAgfVxuXG4gIGNvbnN0IHN0YXR1dENvbmNsdXNpb24gPSBhY3RlTGVnaXNsYXRpZi5zdGF0dXRDb25jbHVzaW9uXG4gIGlmIChzdGF0dXRDb25jbHVzaW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICBjbGVhblR5cGVEZWNsYXJhdGlvbihzdGF0dXRDb25jbHVzaW9uKVxuICAgIGlmIChzdGF0dXRDb25jbHVzaW9uLmZhbUNvZGUgPT09IFwiVFNPUlRGbnVsbFwiKSB7XG4gICAgICAvLyBPY2N1cmVkIG9uY2UgaW4gaHR0cHM6Ly9naXQuZW4tcm9vdC5vcmcvdHJpY290ZXVzZXMvZGF0YS9hc3NlbWJsZWUtYnJ1dC9Eb3NzaWVyc19MZWdpc2xhdGlmc19YVi9jb21taXQvODM4MzgwMGZlN2Q5OTNkYTdiNTk2YzViMjBmYWRjMzFjNGRmMzgzNVxuICAgICAgZGVsZXRlIGFjdGVMZWdpc2xhdGlmLnN0YXR1dENvbmNsdXNpb25cbiAgICB9XG4gIH1cblxuICBjb25zdCB0ZXh0ZUFkb3B0ZVJlZiA9IGFjdGVMZWdpc2xhdGlmLnRleHRlQWRvcHRlXG4gIGlmICh0ZXh0ZUFkb3B0ZVJlZiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgZGVsZXRlIGFjdGVMZWdpc2xhdGlmLnRleHRlQWRvcHRlXG4gICAgYWN0ZUxlZ2lzbGF0aWYudGV4dGVBZG9wdGVSZWYgPSB0ZXh0ZUFkb3B0ZVJlZlxuICB9XG5cbiAgY29uc3QgdGV4dGVBc3NvY2llUmVmID0gYWN0ZUxlZ2lzbGF0aWYudGV4dGVBc3NvY2llXG4gIGlmICh0ZXh0ZUFzc29jaWVSZWYgIT09IHVuZGVmaW5lZCkge1xuICAgIGRlbGV0ZSBhY3RlTGVnaXNsYXRpZi50ZXh0ZUFzc29jaWVcbiAgICBhY3RlTGVnaXNsYXRpZi50ZXh0ZUFzc29jaWVSZWYgPSB0ZXh0ZUFzc29jaWVSZWZcbiAgfVxuXG4gIGxldCB0ZXh0ZXNBc3NvY2llcyA9IGFjdGVMZWdpc2xhdGlmLnRleHRlc0Fzc29jaWVzXG4gIGlmICh0ZXh0ZXNBc3NvY2llcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgdGV4dGVzQXNzb2NpZXMgPSB0ZXh0ZXNBc3NvY2llcy50ZXh0ZUFzc29jaWVcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkodGV4dGVzQXNzb2NpZXMpKSB7XG4gICAgICBhc3NlcnQodGV4dGVzQXNzb2NpZXMpXG4gICAgICB0ZXh0ZXNBc3NvY2llcyA9IFt0ZXh0ZXNBc3NvY2llc11cbiAgICB9XG4gICAgYWN0ZUxlZ2lzbGF0aWYudGV4dGVzQXNzb2NpZXMgPSB0ZXh0ZXNBc3NvY2llc1xuXG4gICAgZm9yIChjb25zdCB0ZXh0ZUFzc29jaWUgb2YgdGV4dGVzQXNzb2NpZXMpIHtcbiAgICAgIGNvbnN0IHRleHRlQXNzb2NpZVJlZiA9IHRleHRlQXNzb2NpZS5yZWZUZXh0ZUFzc29jaWVcbiAgICAgIGlmICh0ZXh0ZUFzc29jaWVSZWYgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBkZWxldGUgdGV4dGVBc3NvY2llLnJlZlRleHRlQXNzb2NpZVxuICAgICAgICB0ZXh0ZUFzc29jaWUudGV4dGVBc3NvY2llUmVmID0gdGV4dGVBc3NvY2llUmVmXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY29uc3QgdHlwZURlY2xhcmF0aW9uID0gYWN0ZUxlZ2lzbGF0aWYudHlwZURlY2xhcmF0aW9uXG4gIGlmICh0eXBlRGVjbGFyYXRpb24gIT09IHVuZGVmaW5lZCkge1xuICAgIGNsZWFuVHlwZURlY2xhcmF0aW9uKHR5cGVEZWNsYXJhdGlvbilcbiAgfVxuXG4gIGNvbnN0IHR5cGVNb3Rpb24gPSBhY3RlTGVnaXNsYXRpZi50eXBlTW90aW9uXG4gIGlmICh0eXBlTW90aW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICBjbGVhblR5cGVEZWNsYXJhdGlvbih0eXBlTW90aW9uKVxuICB9XG5cbiAgY29uc3QgdHlwZU1vdGlvbkNlbnN1cmUgPSBhY3RlTGVnaXNsYXRpZi50eXBlTW90aW9uQ2Vuc3VyZVxuICBpZiAodHlwZU1vdGlvbkNlbnN1cmUgIT09IHVuZGVmaW5lZCkge1xuICAgIGNsZWFuVHlwZURlY2xhcmF0aW9uKHR5cGVNb3Rpb25DZW5zdXJlKVxuICB9XG5cbiAgbGV0IHZvdGVSZWZzID0gYWN0ZUxlZ2lzbGF0aWYudm90ZVJlZnNcbiAgaWYgKHZvdGVSZWZzICE9PSB1bmRlZmluZWQpIHtcbiAgICB2b3RlUmVmcyA9IHZvdGVSZWZzLnZvdGVSZWZcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkodm90ZVJlZnMpKSB7XG4gICAgICBhc3NlcnQodm90ZVJlZnMpXG4gICAgICB2b3RlUmVmcyA9IFt2b3RlUmVmc11cbiAgICB9XG4gICAgYWN0ZUxlZ2lzbGF0aWYudm90ZVJlZnMgPSB2b3RlUmVmc1xuICB9XG5cbiAgLy9cblxuICBsZXQgYWN0ZXNMZWdpc2xhdGlmcyA9IGFjdGVMZWdpc2xhdGlmLmFjdGVzTGVnaXNsYXRpZnNcbiAgaWYgKGFjdGVzTGVnaXNsYXRpZnMgIT09IHVuZGVmaW5lZCkge1xuICAgIGFjdGVzTGVnaXNsYXRpZnMgPSBhY3Rlc0xlZ2lzbGF0aWZzLmFjdGVMZWdpc2xhdGlmXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGFjdGVzTGVnaXNsYXRpZnMpKSB7XG4gICAgICBhc3NlcnQoYWN0ZXNMZWdpc2xhdGlmcylcbiAgICAgIGFjdGVzTGVnaXNsYXRpZnMgPSBbYWN0ZXNMZWdpc2xhdGlmc11cbiAgICB9XG4gICAgYWN0ZUxlZ2lzbGF0aWYuYWN0ZXNMZWdpc2xhdGlmcyA9IGFjdGVzTGVnaXNsYXRpZnNcbiAgICBmb3IgKGNvbnN0IGFjdGVMZWdpc2xhdGlmIG9mIGFjdGVzTGVnaXNsYXRpZnMpIHtcbiAgICAgIGNsZWFuQWN0ZUxlZ2lzbGF0aWYoYWN0ZUxlZ2lzbGF0aWYpXG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjbGVhbkFjdGVPdURvc3NpZXJJbml0aWF0ZXVyKGFjdGVPdURvc3NpZXI6IGFueSk6IHZvaWQge1xuICBjb25zdCBpbml0aWF0ZXVyID0gYWN0ZU91RG9zc2llci5pbml0aWF0ZXVyXG4gIGlmIChpbml0aWF0ZXVyICE9PSB1bmRlZmluZWQpIHtcbiAgICBsZXQgYWN0ZXVycyA9IGluaXRpYXRldXIuYWN0ZXVyc1xuICAgIGlmIChhY3RldXJzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGFjdGV1cnMgPSBhY3RldXJzLmFjdGV1clxuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGFjdGV1cnMpKSB7XG4gICAgICAgIGFzc2VydChhY3RldXJzKVxuICAgICAgICBhY3RldXJzID0gW2FjdGV1cnNdXG4gICAgICB9XG4gICAgICBpZiAoYWN0ZXVycy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGluaXRpYXRldXIuYWN0ZXVycyA9IGFjdGV1cnNcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRlbGV0ZSBpbml0aWF0ZXVyLmFjdGV1cnNcbiAgICAgIH1cbiAgICB9XG5cbiAgICBsZXQgb3JnYW5lUmVmID0gaW5pdGlhdGV1ci5vcmdhbmVzXG4gICAgaWYgKG9yZ2FuZVJlZiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBvcmdhbmVSZWYgPSBvcmdhbmVSZWYub3JnYW5lLm9yZ2FuZVJlZi51aWRcbiAgICAgIGFzc2VydC5ub3RTdHJpY3RFcXVhbChvcmdhbmVSZWYsIHVuZGVmaW5lZClcbiAgICAgIGluaXRpYXRldXIub3JnYW5lUmVmID0gb3JnYW5lUmVmXG4gICAgICBkZWxldGUgaW5pdGlhdGV1ci5vcmdhbmVzXG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgaW5pdGlhdGV1ci5hY3RldXJzID09PSB1bmRlZmluZWQgJiZcbiAgICAgIGluaXRpYXRldXIub3JnYW5lUmVmID09PSB1bmRlZmluZWRcbiAgICApIHtcbiAgICAgIGRlbGV0ZSBhY3RlT3VEb3NzaWVyLmluaXRpYXRldXJcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gY2xlYW5JbmZvSm8oaW5mb0pvOiBhbnkpOiB2b2lkIHtcbiAgY2xlYW5YbWxBcnRlZmFjdHMoaW5mb0pvKVxuXG4gIGNvbnN0IHR5cGVKbyA9IGluZm9Kby50eXBlSk9cbiAgaWYgKHR5cGVKbyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgaW5mb0pvLnR5cGVKbyA9IHR5cGVKb1xuICAgIGRlbGV0ZSBpbmZvSm8udHlwZUpPXG4gIH1cblxuICBjb25zdCBkYXRlSm8gPSBpbmZvSm8uZGF0ZUpPXG4gIGlmIChkYXRlSm8gIT09IHVuZGVmaW5lZCkge1xuICAgIGluZm9Kby5kYXRlSm8gPSBkYXRlSm9cbiAgICBkZWxldGUgaW5mb0pvLmRhdGVKT1xuICB9XG5cbiAgYXNzZXJ0LnN0cmljdEVxdWFsKGluZm9Kby5wYWdlSk8sIHVuZGVmaW5lZClcblxuICBjb25zdCBudW1KbyA9IGluZm9Kby5udW1KT1xuICBpZiAobnVtSm8gIT09IHVuZGVmaW5lZCkge1xuICAgIGluZm9Kby5udW1KbyA9IG51bUpvXG4gICAgZGVsZXRlIGluZm9Kby5udW1KT1xuICB9XG5cbiAgY29uc3QgcmVmZXJlbmNlTm9yID0gaW5mb0pvLnJlZmVyZW5jZU5PUlxuICBpZiAocmVmZXJlbmNlTm9yICE9PSB1bmRlZmluZWQpIHtcbiAgICBpbmZvSm8ucmVmZXJlbmNlTm9yID0gcmVmZXJlbmNlTm9yXG4gICAgZGVsZXRlIGluZm9Kby5yZWZlcmVuY2VOT1JcbiAgfVxufVxuXG5mdW5jdGlvbiBjbGVhblR5cGVEZWNsYXJhdGlvbih0eXBlRGVjbGFyYXRpb246IGFueSkge1xuICB0eXBlRGVjbGFyYXRpb24uZmFtQ29kZSA9IHR5cGVEZWNsYXJhdGlvbi5mYW1fY29kZVxuICBkZWxldGUgdHlwZURlY2xhcmF0aW9uLmZhbV9jb2RlXG4gIGFzc2VydCh0eXBlRGVjbGFyYXRpb24uZmFtQ29kZSlcblxuICBpZiAoIXR5cGVEZWNsYXJhdGlvbi5saWJlbGxlKSB7XG4gICAgLy8gT2NjdXJlZCBvbmNlIGluIGh0dHBzOi8vZ2l0LmVuLXJvb3Qub3JnL3RyaWNvdGV1c2VzL2RhdGEvYXNzZW1ibGVlLWJydXQvRG9zc2llcnNfTGVnaXNsYXRpZnNfWFYvY29tbWl0LzgzODM4MDBmZTdkOTkzZGE3YjU5NmM1YjIwZmFkYzMxYzRkZjM4MzU6XG4gICAgLy8gXCJzdGF0dXRDb25jbHVzaW9uXCI6IHtcbiAgICAvLyAgIFwiZmFtX2NvZGVcIjogXCJUU09SVEZudWxsXCJcbiAgICAvLyB9LFxuICAgIC8vIFRoaXMgZmFtQ29kZSBpcyBhbiBlcnJvci5cbiAgICB0eXBlRGVjbGFyYXRpb24ubGliZWxsZSA9IHR5cGVEZWNsYXJhdGlvbi5mYW1Db2RlXG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUEsT0FBT0EsTUFBTSxNQUFNLFFBQVE7QUFBQSxTQUVsQkMsZUFBZTtBQUFBLFNBQ2ZDLGlCQUFpQjtBQUUxQixPQUFPLFNBQVNDLG1CQUFtQkEsQ0FBQ0MsY0FBbUIsRUFBUTtFQUM3REYsaUJBQWlCLENBQUNFLGNBQWMsQ0FBQztFQUVqQyxNQUFNQyxPQUFPLEdBQUdELGNBQWMsQ0FBQyxXQUFXLENBQUM7RUFDM0MsSUFBSUMsT0FBTyxLQUFLQyxTQUFTLEVBQUU7SUFDekJGLGNBQWMsQ0FBQ0MsT0FBTyxHQUFHQSxPQUFPO0lBQ2hDLE9BQU9ELGNBQWMsQ0FBQyxXQUFXLENB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