@tricoteuses/assemblee
Version:
Retrieve, clean up & handle French Assemblée nationale's open data
208 lines • 26.7 kB
JavaScript
import { uncapitalizeFirstLetter } from "./strings.mjs";
import { CodeTypeOrgane } from "./types/acteurs_et_organes.mjs";
export let FinalStatus = /*#__PURE__*/function (FinalStatus) {
FinalStatus["Failure"] = "FAILURE";
FinalStatus["Success"] = "SUCCESS";
return FinalStatus;
}({});
export let StatusOnly = /*#__PURE__*/function (StatusOnly) {
StatusOnly["Failure"] = "FAILURE";
StatusOnly["InProgress"] = "IN_PROGRESS";
StatusOnly["Success"] = "SUCCESS";
return StatusOnly;
}({});
export function commissionFondUidFromDossier(dossier) {
if (dossier.actesLegislatifs !== undefined) {
for (const acte of walkActes(dossier.actesLegislatifs)) {
if (acte.codeActe.match(/^AN.*-COM-FOND-SAISIE$/) !== null && acte.organeRef !== undefined && acte.organeRef !== "PO211494" // Commission des finances du SÉNAT (=> erreur)
) {
return acte.organeRef;
}
}
}
return undefined;
}
export function statusFromCodierLibelle(libelle) {
switch (libelle) {
case "Accord":
case "adopté":
case "adopté, dans les conditions prévues à l'article 45, alinéa 3," + " de la Constitution":
case "adoptée":
case "adopté sans modification":
case "adoptée sans modification":
case "Conforme":
case "considérée comme définitive en application de l'article 151-7 du Règlement":
case "considérée comme définitive en application de l'article 151-9 du Règlement":
case "Motion adopté(e)":
return StatusOnly.Success;
case "Désaccord":
case "Motion rejeté(e)":
case "rejeté":
case "rejetée":
return StatusOnly.Failure;
case "adopté avec modifications":
case "adoptée avec modifications":
case "De droit (article 61 alinéa 1 de la Constitution)":
case "modifié":
case "modifiée":
case "Motion de censure 49-2":
case "Partiellement conforme":
return StatusOnly.InProgress;
case "Soixante députés au moins":
case "Soixante sénateurs au moins":
return CodeTypeOrgane.Constitu;
default:
return StatusOnly.InProgress;
}
}
export function stateFromActePath(dossier, actePath) {
const leafActe = actePath[actePath.length - 1];
let libelle = null;
switch (leafActe.xsiType) {
case "Adoption_Europe_Type":
libelle = leafActe.statutAdoption.libelle;
return {
currentStatus: statusFromCodierLibelle(libelle),
label: uncapitalizeFirstLetter(libelle)
};
case "ConclusionEtapeCC_Type":
libelle = leafActe.statutConclusion.libelle;
return {
currentStatus: statusFromCodierLibelle(libelle),
label: uncapitalizeFirstLetter(libelle)
};
case "Decision_Type":
{
libelle = leafActe.statutConclusion.libelle;
let currentStatus = statusFromCodierLibelle(libelle);
let finalStatus = undefined;
switch (dossier.procedureParlementaire.code) {
case "PROCEDURE_PARLEMENTAIRE_2":
// Proposition de loi ordinaire
// Not sure for other cases => To improve.
if (["rejeté", "rejetée"].includes(libelle) && dossier.actesLegislatifs !== undefined && dossier.actesLegislatifs.length === 1) {
finalStatus = FinalStatus.Failure;
}
break;
case "PROCEDURE_PARLEMENTAIRE_8": // Résolution
case "PROCEDURE_PARLEMENTAIRE_22":
// Résolution Article 34-1
if (currentStatus === StatusOnly.Success) {
finalStatus = FinalStatus.Success;
} else if (currentStatus === StatusOnly.Failure) {
finalStatus = FinalStatus.Failure;
}
break;
default:
break;
}
return {
currentStatus,
finalStatus,
label: uncapitalizeFirstLetter(libelle)
};
}
case "DecisionMotionCensure_Type":
libelle = leafActe.decision.libelle;
return {
currentStatus: statusFromCodierLibelle(libelle),
finalStatus:
// Not sure for other cases => To improve.
// Engagement de la responsabilité gouvernementale
dossier.procedureParlementaire.code === "PROCEDURE_PARLEMENTAIRE_13" && libelle === "Motion rejeté(e)" ? FinalStatus.Failure : FinalStatus.Success,
// TODO: Not sure of this `true` value
label: uncapitalizeFirstLetter(libelle)
};
case "DecisionRecevabiliteBureau_Type":
libelle = leafActe.decision.libelle;
return {
currentStatus: statusFromCodierLibelle(libelle),
label: uncapitalizeFirstLetter(libelle)
};
case "DeclarationGouvernement_Type":
libelle = leafActe.typeDeclaration.libelle;
return {
currentStatus: statusFromCodierLibelle(libelle),
label: uncapitalizeFirstLetter(libelle)
};
case "DepotMotionCensure_Type":
libelle = leafActe.typeMotionCensure.libelle;
return {
currentStatus: statusFromCodierLibelle(libelle),
label: uncapitalizeFirstLetter(libelle)
};
case "DepotRapport_Type":
if (["DossierCommissionEnquete_Type", "DossierMissionControle_Type", "DossierMissionInformation_Type"].includes(dossier.xsiType)) {
return {
currentStatus: actePath[0].organe.codeType,
finalStatus: FinalStatus.Success,
label: "rapport déposé"
};
}
return null;
case "MotionProcedure_Type":
libelle = leafActe.typeMotion.libelle;
return {
currentStatus: statusFromCodierLibelle(libelle),
label: uncapitalizeFirstLetter(libelle)
};
case "Promulgation_Type":
return {
currentStatus: StatusOnly.Success,
finalStatus: FinalStatus.Success,
label: "promulgué"
};
case "RetraitInitiative_Type":
return {
currentStatus: StatusOnly.Failure,
finalStatus: FinalStatus.Failure,
label: "retiré"
};
case "SaisineConseilConstit_Type":
libelle = leafActe.casSaisine.libelle;
return {
currentStatus: statusFromCodierLibelle(libelle),
label: uncapitalizeFirstLetter(libelle)
};
default:
// This acte gives no status.
return null;
}
}
export function stateFromActes(dossier, actePath, actes) {
if (actes !== undefined) {
for (const acte of [...actes].reverse()) {
const status = acte.actesLegislatifs ? stateFromActes(dossier, [...actePath, acte], acte.actesLegislatifs) : stateFromActePath(dossier, [...actePath, acte]);
if (status !== null) {
return status;
}
// No status found, continue with previous acte.
}
}
return null;
}
export function stateFromDossier(dossier) {
const status = stateFromActes(dossier, [], dossier.actesLegislatifs);
if (status !== null) {
return status;
}
return {
currentStatus: StatusOnly.InProgress,
label: "en cours"
};
}
export function* walkActes(actes) {
for (const acte of actes) {
yield acte;
if (acte.actesLegislatifs !== undefined) {
yield* walkActes(acte.actesLegislatifs);
}
}
}
export function* walkDocumentAndDivisions(documentOrDivision) {
yield documentOrDivision;
for (const division of documentOrDivision.divisions ?? []) {
yield* walkDocumentAndDivisions(division);
}
}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1bmNhcGl0YWxpemVGaXJzdExldHRlciIsIkNvZGVUeXBlT3JnYW5lIiwiRmluYWxTdGF0dXMiLCJTdGF0dXNPbmx5IiwiY29tbWlzc2lvbkZvbmRVaWRGcm9tRG9zc2llciIsImRvc3NpZXIiLCJhY3Rlc0xlZ2lzbGF0aWZzIiwidW5kZWZpbmVkIiwiYWN0ZSIsIndhbGtBY3RlcyIsImNvZGVBY3RlIiwibWF0Y2giLCJvcmdhbmVSZWYiLCJzdGF0dXNGcm9tQ29kaWVyTGliZWxsZSIsImxpYmVsbGUiLCJTdWNjZXNzIiwiRmFpbHVyZSIsIkluUHJvZ3Jlc3MiLCJDb25zdGl0dSIsInN0YXRlRnJvbUFjdGVQYXRoIiwiYWN0ZVBhdGgiLCJsZWFmQWN0ZSIsImxlbmd0aCIsInhzaVR5cGUiLCJzdGF0dXRBZG9wdGlvbiIsImN1cnJlbnRTdGF0dXMiLCJsYWJlbCIsInN0YXR1dENvbmNsdXNpb24iLCJmaW5hbFN0YXR1cyIsInByb2NlZHVyZVBhcmxlbWVudGFpcmUiLCJjb2RlIiwiaW5jbHVkZXMiLCJkZWNpc2lvbiIsInR5cGVEZWNsYXJhdGlvbiIsInR5cGVNb3Rpb25DZW5zdXJlIiwib3JnYW5lIiwiY29kZVR5cGUiLCJ0eXBlTW90aW9uIiwiY2FzU2Fpc2luZSIsInN0YXRlRnJvbUFjdGVzIiwiYWN0ZXMiLCJyZXZlcnNlIiwic3RhdHVzIiwic3RhdGVGcm9tRG9zc2llciIsIndhbGtEb2N1bWVudEFuZERpdmlzaW9ucyIsImRvY3VtZW50T3JEaXZpc2lvbiIsImRpdmlzaW9uIiwiZGl2aXNpb25zIl0sInNvdXJjZXMiOlsiLi4vc3JjL2Rvc3NpZXJzX2xlZ2lzbGF0aWZzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHVuY2FwaXRhbGl6ZUZpcnN0TGV0dGVyIH0gZnJvbSBcIi4vc3RyaW5nc1wiXG5pbXBvcnQgeyBDb2RlVHlwZU9yZ2FuZSB9IGZyb20gXCIuL3R5cGVzL2FjdGV1cnNfZXRfb3JnYW5lc1wiXG5pbXBvcnQgdHlwZSB7XG4gIERvc3NpZXJQYXJsZW1lbnRhaXJlLFxuICBBY3RlTGVnaXNsYXRpZixcbiAgRGl2aXNpb24sXG4gIERvY3VtZW50LFxufSBmcm9tIFwiLi90eXBlcy9kb3NzaWVyc19sZWdpc2xhdGlmc1wiXG5cbmV4cG9ydCBpbnRlcmZhY2UgRG9jdW1lbnRGaWxlSW5mb3Mge1xuICBmaWxlbmFtZT86IHN0cmluZ1xuICBzaGEyNTY/OiBzdHJpbmdcbiAgdXJsOiBzdHJpbmdcbiAgc3RhdHVzOiBudW1iZXJcbn1cblxuZXhwb3J0IHR5cGUgRG9jdW1lbnRGaWxlc0luZGV4ID0ge1xuICBodG1sPzogRG9jdW1lbnRGaWxlSW5mb3NbXVxuICBwZGY/OiBEb2N1bWVudEZpbGVJbmZvc1tdXG4gIFwicmF3LWh0bWxcIj86IERvY3VtZW50RmlsZUluZm9zW11cbn1cblxuZXhwb3J0IGVudW0gRmluYWxTdGF0dXMge1xuICBGYWlsdXJlID0gXCJGQUlMVVJFXCIsXG4gIFN1Y2Nlc3MgPSBcIlNVQ0NFU1NcIixcbn1cblxuaW50ZXJmYWNlIFN0YXRlIHtcbiAgY3VycmVudFN0YXR1czogU3RhdHVzXG4gIGZpbmFsU3RhdHVzPzogRmluYWxTdGF0dXNcbiAgbGFiZWw6IHN0cmluZ1xufVxuXG5leHBvcnQgdHlwZSBTdGF0dXMgPSBDb2RlVHlwZU9yZ2FuZSB8IFN0YXR1c09ubHlcblxuZXhwb3J0IGVudW0gU3RhdHVzT25seSB7XG4gIEZhaWx1cmUgPSBcIkZBSUxVUkVcIixcbiAgSW5Qcm9ncmVzcyA9IFwiSU5fUFJPR1JFU1NcIixcbiAgU3VjY2VzcyA9IFwiU1VDQ0VTU1wiLFxufVxuXG5leHBvcnQgZnVuY3Rpb24gY29tbWlzc2lvbkZvbmRVaWRGcm9tRG9zc2llcihcbiAgZG9zc2llcjogRG9zc2llclBhcmxlbWVudGFpcmUsXG4pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBpZiAoZG9zc2llci5hY3Rlc0xlZ2lzbGF0aWZzICE9PSB1bmRlZmluZWQpIHtcbiAgICBmb3IgKGNvbnN0IGFjdGUgb2Ygd2Fsa0FjdGVzKGRvc3NpZXIuYWN0ZXNMZWdpc2xhdGlmcykpIHtcbiAgICAgIGlmIChcbiAgICAgICAgKGFjdGUuY29kZUFjdGUgYXMgdW5rbm93biBhcyBzdHJpbmcpLm1hdGNoKC9eQU4uKi1DT00tRk9ORC1TQUlTSUUkLykgIT09XG4gICAgICAgICAgbnVsbCAmJlxuICAgICAgICBhY3RlLm9yZ2FuZVJlZiAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgIGFjdGUub3JnYW5lUmVmICE9PSBcIlBPMjExNDk0XCIgLy8gQ29tbWlzc2lvbiBkZXMgZmluYW5jZXMgZHUgU8OJTkFUICg9PiBlcnJldXIpXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuIGFjdGUub3JnYW5lUmVmXG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiB1bmRlZmluZWRcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXR1c0Zyb21Db2RpZXJMaWJlbGxlKGxpYmVsbGU6IHN0cmluZyk6IFN0YXR1cyB7XG4gIHN3aXRjaCAobGliZWxsZSkge1xuICAgIGNhc2UgXCJBY2NvcmRcIjpcbiAgICBjYXNlIFwiYWRvcHTDqVwiOlxuICAgIGNhc2UgXCJhZG9wdMOpLCBkYW5zIGxlcyBjb25kaXRpb25zIHByw6l2dWVzIMOgIGwnYXJ0aWNsZSA0NSwgYWxpbsOpYSAzLFwiICtcbiAgICAgIFwiIGRlIGxhIENvbnN0aXR1dGlvblwiOlxuICAgIGNhc2UgXCJhZG9wdMOpZVwiOlxuICAgIGNhc2UgXCJhZG9wdMOpIHNhbnMgbW9kaWZpY2F0aW9uXCI6XG4gICAgY2FzZSBcImFkb3B0w6llIHNhbnMgbW9kaWZpY2F0aW9uXCI6XG4gICAgY2FzZSBcIkNvbmZvcm1lXCI6XG4gICAgY2FzZSBcImNvbnNpZMOpcsOpZSBjb21tZSBkw6lmaW5pdGl2ZSBlbiBhcHBsaWNhdGlvbiBkZSBsJ2FydGljbGUgMTUxLTcgZHUgUsOoZ2xlbWVudFwiOlxuICAgIGNhc2UgXCJjb25zaWTDqXLDqWUgY29tbWUgZMOpZmluaXRpdmUgZW4gYXBwbGljYXRpb24gZGUgbCdhcnRpY2xlIDE1MS05IGR1IFLDqGdsZW1lbnRcIjpcbiAgICBjYXNlIFwiTW90aW9uIGFkb3B0w6koZSlcIjpcbiAgICAgIHJldHVybiBTdGF0dXNPbmx5LlN1Y2Nlc3NcbiAgICBjYXNlIFwiRMOpc2FjY29yZFwiOlxuICAgIGNhc2UgXCJNb3Rpb24gcmVqZXTDqShlKVwiOlxuICAgIGNhc2UgXCJyZWpldMOpXCI6XG4gICAgY2FzZSBcInJlamV0w6llXCI6XG4gICAgICByZXR1cm4gU3RhdHVzT25seS5GYWlsdXJlXG4gICAgY2FzZSBcImFkb3B0w6kgYXZlYyBtb2RpZmljYXRpb25zXCI6XG4gICAgY2FzZSBcImFkb3B0w6llIGF2ZWMgbW9kaWZpY2F0aW9uc1wiOlxuICAgIGNhc2UgXCJEZSBkcm9pdCAoYXJ0aWNsZSA2MSBhbGluw6lhIDEgZGUgbGEgQ29uc3RpdHV0aW9uKVwiOlxuICAgIGNhc2UgXCJtb2RpZmnDqVwiOlxuICAgIGNhc2UgXCJtb2RpZmnDqWVcIjpcbiAgICBjYXNlIFwiTW90aW9uIGRlIGNlbnN1cmUgNDktMlwiOlxuICAgIGNhc2UgXCJQYXJ0aWVsbGVtZW50IGNvbmZvcm1lXCI6XG4gICAgICByZXR1cm4gU3RhdHVzT25seS5JblByb2dyZXNzXG4gICAgY2FzZSBcIlNvaXhhbnRlIGTDqXB1dMOpcyBhdSBtb2luc1wiOlxuICAgIGNhc2UgXCJTb2l4YW50ZSBzw6luYXRldXJzIGF1IG1vaW5zXCI6XG4gICAgICByZXR1cm4gQ29kZVR5cGVPcmdhbmUuQ29uc3RpdHVcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIFN0YXR1c09ubHkuSW5Qcm9ncmVzc1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGF0ZUZyb21BY3RlUGF0aChcbiAgZG9zc2llcjogRG9zc2llclBhcmxlbWVudGFpcmUsXG4gIGFjdGVQYXRoOiBBY3RlTGVnaXNsYXRpZltdLFxuKTogU3RhdGUgfCBudWxsIHtcbiAgY29uc3QgbGVhZkFjdGUgPSBhY3RlUGF0aFthY3RlUGF0aC5sZW5ndGggLSAxXVxuICBsZXQgbGliZWxsZSA9IG51bGxcbiAgc3dpdGNoIChsZWFmQWN0ZS54c2lUeXBlKSB7XG4gICAgY2FzZSBcIkFkb3B0aW9uX0V1cm9wZV9UeXBlXCI6XG4gICAgICBsaWJlbGxlID0gbGVhZkFjdGUuc3RhdHV0QWRvcHRpb24hLmxpYmVsbGVcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGN1cnJlbnRTdGF0dXM6IHN0YXR1c0Zyb21Db2RpZXJMaWJlbGxlKGxpYmVsbGUpLFxuICAgICAgICBsYWJlbDogdW5jYXBpdGFsaXplRmlyc3RMZXR0ZXIobGliZWxsZSksXG4gICAgICB9XG4gICAgY2FzZSBcIkNvbmNsdXNpb25FdGFwZUNDX1R5cGVcIjpcbiAgICAgIGxpYmVsbGUgPSBsZWFmQWN0ZS5zdGF0dXRDb25jbHVzaW9uIS5saWJlbGxlXG4gICAgICByZXR1cm4ge1xuICAgICAgICBjdXJyZW50U3RhdHVzOiBzdGF0dXNGcm9tQ29kaWVyTGliZWxsZShsaWJlbGxlKSxcbiAgICAgICAgbGFiZWw6IHVuY2FwaXRhbGl6ZUZpcnN0TGV0dGVyKGxpYmVsbGUpLFxuICAgICAgfVxuICAgIGNhc2UgXCJEZWNpc2lvbl9UeXBlXCI6IHtcbiAgICAgIGxpYmVsbGUgPSBsZWFmQWN0ZS5zdGF0dXRDb25jbHVzaW9uIS5saWJlbGxlXG4gICAgICBsZXQgY3VycmVudFN0YXR1cyA9IHN0YXR1c0Zyb21Db2RpZXJMaWJlbGxlKGxpYmVsbGUpXG4gICAgICBsZXQgZmluYWxTdGF0dXMgPSB1bmRlZmluZWRcbiAgICAgIHN3aXRjaCAoZG9zc2llci5wcm9jZWR1cmVQYXJsZW1lbnRhaXJlLmNvZGUpIHtcbiAgICAgICAgY2FzZSBcIlBST0NFRFVSRV9QQVJMRU1FTlRBSVJFXzJcIjpcbiAgICAgICAgICAvLyBQcm9wb3NpdGlvbiBkZSBsb2kgb3JkaW5haXJlXG4gICAgICAgICAgLy8gTm90IHN1cmUgZm9yIG90aGVyIGNhc2VzID0+IFRvIGltcHJvdmUuXG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgW1wicmVqZXTDqVwiLCBcInJlamV0w6llXCJdLmluY2x1ZGVzKGxpYmVsbGUpICYmXG4gICAgICAgICAgICBkb3NzaWVyLmFjdGVzTGVnaXNsYXRpZnMgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgZG9zc2llci5hY3Rlc0xlZ2lzbGF0aWZzLmxlbmd0aCA9PT0gMVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgZmluYWxTdGF0dXMgPSBGaW5hbFN0YXR1cy5GYWlsdXJlXG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgXCJQUk9DRURVUkVfUEFSTEVNRU5UQUlSRV84XCI6IC8vIFLDqXNvbHV0aW9uXG4gICAgICAgIGNhc2UgXCJQUk9DRURVUkVfUEFSTEVNRU5UQUlSRV8yMlwiOlxuICAgICAgICAgIC8vIFLDqXNvbHV0aW9uIEFydGljbGUgMzQtMVxuICAgICAgICAgIGlmIChjdXJyZW50U3RhdHVzID09PSBTdGF0dXNPbmx5LlN1Y2Nlc3MpIHtcbiAgICAgICAgICAgIGZpbmFsU3RhdHVzID0gRmluYWxTdGF0dXMuU3VjY2Vzc1xuICAgICAgICAgIH0gZWxzZSBpZiAoY3VycmVudFN0YXR1cyA9PT0gU3RhdHVzT25seS5GYWlsdXJlKSB7XG4gICAgICAgICAgICBmaW5hbFN0YXR1cyA9IEZpbmFsU3RhdHVzLkZhaWx1cmVcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBicmVha1xuICAgICAgfVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY3VycmVudFN0YXR1cyxcbiAgICAgICAgZmluYWxTdGF0dXMsXG4gICAgICAgIGxhYmVsOiB1bmNhcGl0YWxpemVGaXJzdExldHRlcihsaWJlbGxlKSxcbiAgICAgIH1cbiAgICB9XG4gICAgY2FzZSBcIkRlY2lzaW9uTW90aW9uQ2Vuc3VyZV9UeXBlXCI6XG4gICAgICBsaWJlbGxlID0gbGVhZkFjdGUuZGVjaXNpb24hLmxpYmVsbGVcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGN1cnJlbnRTdGF0dXM6IHN0YXR1c0Zyb21Db2RpZXJMaWJlbGxlKGxpYmVsbGUpLFxuICAgICAgICBmaW5hbFN0YXR1czpcbiAgICAgICAgICAvLyBOb3Qgc3VyZSBmb3Igb3RoZXIgY2FzZXMgPT4gVG8gaW1wcm92ZS5cbiAgICAgICAgICAvLyBFbmdhZ2VtZW50IGRlIGxhIHJlc3BvbnNhYmlsaXTDqSBnb3V2ZXJuZW1lbnRhbGVcbiAgICAgICAgICBkb3NzaWVyLnByb2NlZHVyZVBhcmxlbWVudGFpcmUuY29kZSA9PT1cbiAgICAgICAgICAgIFwiUFJPQ0VEVVJFX1BBUkxFTUVOVEFJUkVfMTNcIiAmJiBsaWJlbGxlID09PSBcIk1vdGlvbiByZWpldMOpKGUpXCJcbiAgICAgICAgICAgID8gRmluYWxTdGF0dXMuRmFpbHVyZVxuICAgICAgICAgICAgOiBGaW5hbFN0YXR1cy5TdWNjZXNzLCAvLyBUT0RPOiBOb3Qgc3VyZSBvZiB0aGlzIGB0cnVlYCB2YWx1ZVxuICAgICAgICBsYWJlbDogdW5jYXBpdGFsaXplRmlyc3RMZXR0ZXIobGliZWxsZSksXG4gICAgICB9XG4gICAgY2FzZSBcIkRlY2lzaW9uUmVjZXZhYmlsaXRlQnVyZWF1X1R5cGVcIjpcbiAgICAgIGxpYmVsbGUgPSBsZWFmQWN0ZS5kZWNpc2lvbiEubGliZWxsZVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY3VycmVudFN0YXR1czogc3RhdHVzRnJvbUNvZGllckxpYmVsbGUobGliZWxsZSksXG4gICAgICAgIGxhYmVsOiB1bmNhcGl0YWxpemVGaXJzdExldHRlcihsaWJlbGxlKSxcbiAgICAgIH1cbiAgICBjYXNlIFwiRGVjbGFyYXRpb25Hb3V2ZXJuZW1lbnRfVHlwZVwiOlxuICAgICAgbGliZWxsZSA9IGxlYWZBY3RlLnR5cGVEZWNsYXJhdGlvbiEubGliZWxsZVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY3VycmVudFN0YXR1czogc3RhdHVzRnJvbUNvZGllckxpYmVsbGUobGliZWxsZSksXG4gICAgICAgIGxhYmVsOiB1bmNhcGl0YWxpemVGaXJzdExldHRlcihsaWJlbGxlKSxcbiAgICAgIH1cbiAgICBjYXNlIFwiRGVwb3RNb3Rpb25DZW5zdXJlX1R5cGVcIjpcbiAgICAgIGxpYmVsbGUgPSBsZWFmQWN0ZS50eXBlTW90aW9uQ2Vuc3VyZSEubGliZWxsZVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY3VycmVudFN0YXR1czogc3RhdHVzRnJvbUNvZGllckxpYmVsbGUobGliZWxsZSksXG4gICAgICAgIGxhYmVsOiB1bmNhcGl0YWxpemVGaXJzdExldHRlcihsaWJlbGxlKSxcbiAgICAgIH1cbiAgICBjYXNlIFwiRGVwb3RSYXBwb3J0X1R5cGVcIjpcbiAgICAgIGlmIChcbiAgICAgICAgW1xuICAgICAgICAgIFwiRG9zc2llckNvbW1pc3Npb25FbnF1ZXRlX1R5cGVcIixcbiAgICAgICAgICBcIkRvc3NpZXJNaXNzaW9uQ29udHJvbGVfVHlwZVwiLFxuICAgICAgICAgIFwiRG9zc2llck1pc3Npb25JbmZvcm1hdGlvbl9UeXBlXCIsXG4gICAgICAgIF0uaW5jbHVkZXMoZG9zc2llci54c2lUeXBlISlcbiAgICAgICkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGN1cnJlbnRTdGF0dXM6IGFjdGVQYXRoWzBdLm9yZ2FuZSEuY29kZVR5cGUsXG4gICAgICAgICAgZmluYWxTdGF0dXM6IEZpbmFsU3RhdHVzLlN1Y2Nlc3MsXG4gICAgICAgICAgbGFiZWw6IFwicmFwcG9ydCBkw6lwb3PDqVwiLFxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbFxuICAgIGNhc2UgXCJNb3Rpb25Qcm9jZWR1cmVfVHlwZVwiOlxuICAgICAgbGliZWxsZSA9IGxlYWZBY3RlLnR5cGVNb3Rpb24hLmxpYmVsbGVcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGN1cnJlbnRTdGF0dXM6IHN0YXR1c0Zyb21Db2RpZXJMaWJlbGxlKGxpYmVsbGUpLFxuICAgICAgICBsYWJlbDogdW5jYXBpdGFsaXplRmlyc3RMZXR0ZXIobGliZWxsZSksXG4gICAgICB9XG4gICAgY2FzZSBcIlByb211bGdhdGlvbl9UeXBlXCI6XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjdXJyZW50U3RhdHVzOiBTdGF0dXNPbmx5LlN1Y2Nlc3MsXG4gICAgICAgIGZpbmFsU3RhdHVzOiBGaW5hbFN0YXR1cy5TdWNjZXNzLFxuICAgICAgICBsYWJlbDogXCJwcm9tdWxndcOpXCIsXG4gICAgICB9XG4gICAgY2FzZSBcIlJldHJhaXRJbml0aWF0aXZlX1R5cGVcIjpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGN1cnJlbnRTdGF0dXM6IFN0YXR1c09ubHkuRmFpbHVyZSxcbiAgICAgICAgZmluYWxTdGF0dXM6IEZpbmFsU3RhdHVzLkZhaWx1cmUsXG4gICAgICAgIGxhYmVsOiBcInJldGlyw6lcIixcbiAgICAgIH1cbiAgICBjYXNlIFwiU2Fpc2luZUNvbnNlaWxDb25zdGl0X1R5cGVcIjpcbiAgICAgIGxpYmVsbGUgPSBsZWFmQWN0ZS5jYXNTYWlzaW5lIS5saWJlbGxlXG4gICAgICByZXR1cm4ge1xuICAgICAgICBjdXJyZW50U3RhdHVzOiBzdGF0dXNGcm9tQ29kaWVyTGliZWxsZShsaWJlbGxlKSxcbiAgICAgICAgbGFiZWw6IHVuY2FwaXRhbGl6ZUZpcnN0TGV0dGVyKGxpYmVsbGUpLFxuICAgICAgfVxuICAgIGRlZmF1bHQ6XG4gICAgICAvLyBUaGlzIGFjdGUgZ2l2ZXMgbm8gc3RhdHVzLlxuICAgICAgcmV0dXJuIG51bGxcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhdGVGcm9tQWN0ZXMoXG4gIGRvc3NpZXI6IERvc3NpZXJQYXJsZW1lbnRhaXJlLFxuICBhY3RlUGF0aDogQWN0ZUxlZ2lzbGF0aWZbXSxcbiAgYWN0ZXM/OiBBY3RlTGVnaXNsYXRpZltdLFxuKTogU3RhdGUgfCBudWxsIHtcbiAgaWYgKGFjdGVzICE9PSB1bmRlZmluZWQpIHtcbiAgICBmb3IgKGNvbnN0IGFjdGUgb2YgWy4uLmFjdGVzXS5yZXZlcnNlKCkpIHtcbiAgICAgIGNvbnN0IHN0YXR1cyA9IGFjdGUuYWN0ZXNMZWdpc2xhdGlmc1xuICAgICAgICA/IHN0YXRlRnJvbUFjdGVzKGRvc3NpZXIsIFsuLi5hY3RlUGF0aCwgYWN0ZV0sIGFjdGUuYWN0ZXNMZWdpc2xhdGlmcylcbiAgICAgICAgOiBzdGF0ZUZyb21BY3RlUGF0aChkb3NzaWVyLCBbLi4uYWN0ZVBhdGgsIGFjdGVdKVxuICAgICAgaWYgKHN0YXR1cyAhPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gc3RhdHVzXG4gICAgICB9XG4gICAgICAvLyBObyBzdGF0dXMgZm91bmQsIGNvbnRpbnVlIHdpdGggcHJldmlvdXMgYWN0ZS5cbiAgICB9XG4gIH1cbiAgcmV0dXJuIG51bGxcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXRlRnJvbURvc3NpZXIoZG9zc2llcjogRG9zc2llclBhcmxlbWVudGFpcmUpOiBTdGF0ZSB7XG4gIGNvbnN0IHN0YXR1cyA9IHN0YXRlRnJvbUFjdGVzKGRvc3NpZXIsIFtdLCBkb3NzaWVyLmFjdGVzTGVnaXNsYXRpZnMpXG4gIGlmIChzdGF0dXMgIT09IG51bGwpIHtcbiAgICByZXR1cm4gc3RhdHVzXG4gIH1cbiAgcmV0dXJuIHtcbiAgICBjdXJyZW50U3RhdHVzOiBTdGF0dXNPbmx5LkluUHJvZ3Jlc3MsXG4gICAgbGFiZWw6IFwiZW4gY291cnNcIixcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24qIHdhbGtBY3RlcyhcbiAgYWN0ZXM6IEFjdGVMZWdpc2xhdGlmW10sXG4pOiBHZW5lcmF0b3I8QWN0ZUxlZ2lzbGF0aWYsIHZvaWQsIHVua25vd24+IHtcbiAgZm9yIChjb25zdCBhY3RlIG9mIGFjdGVzKSB7XG4gICAgeWllbGQgYWN0ZVxuICAgIGlmIChhY3RlLmFjdGVzTGVnaXNsYXRpZnMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgeWllbGQqIHdhbGtBY3RlcyhhY3RlLmFjdGVzTGVnaXNsYXRpZnMpXG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiogd2Fsa0RvY3VtZW50QW5kRGl2aXNpb25zKFxuICBkb2N1bWVudE9yRGl2aXNpb246IERvY3VtZW50IHwgRGl2aXNpb24sXG4pOiBHZW5lcmF0b3I8RG9jdW1lbnQgfCBEaXZpc2lvbiwgdm9pZCwgdW5rbm93bj4ge1xuICB5aWVsZCBkb2N1bWVudE9yRGl2aXNpb25cbiAgZm9yIChjb25zdCBkaXZpc2lvbiBvZiBkb2N1bWVudE9yRGl2aXNpb24uZGl2aXNpb25zID8/IFtdKSB7XG4gICAgeWllbGQqIHdhbGtEb2N1bWVudEFuZERpdmlzaW9ucyhkaXZpc2lvbilcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiU0FBU0EsdUJBQXVCO0FBQUEsU0FDdkJDLGNBQWM7QUFxQnZCLFdBQVlDLFdBQVcsMEJBQVhBLFdBQVc7RUFBWEEsV0FBVztFQUFYQSxXQUFXO0VBQUEsT0FBWEEsV0FBVztBQUFBO0FBYXZCLFdBQVlDLFVBQVUsMEJBQVZBLFVBQVU7RUFBVkEsVUFBVTtFQUFWQSxVQUFVO0VBQVZBLFVBQVU7RUFBQSxPQUFWQSxVQUFVO0FBQUE7QUFNdEIsT0FBTyxTQUFTQyw0QkFBNEJBLENBQzFDQyxPQUE2QixFQUNUO0VBQ3BCLElBQUlBLE9BQU8sQ0FBQ0MsZ0JBQWdCLEtBQUtDLFNBQVMsRUFBRTtJQUMxQyxLQUFLLE1BQU1DLElBQUksSUFBSUMsU0FBUyxDQUFDSixPQUFPLENBQUNDLGdCQUFnQixDQUFDLEVBQUU7TUFDdEQsSUFDR0UsSUFBSSxDQUFDRSxRQUFRLENBQXVCQyxLQUFLLENBQUMsd0JBQXdCLENBQUMsS0FDbEUsSUFBSSxJQUNOSCxJQUFJLENBQUNJLFNBQVMsS0FBS0wsU0FBUyxJQUM1QkMsSUFBSSxDQUFDSSxTQUFTLEtBQUssVUFBVSxDQUFDO01BQUEsRUFDOUI7UUFDQSxPQUFPSixJQUFJLENBQUNJLFNBQVM7TUFDdkI7SUFDRjtFQUNGO0VBQ0EsT0FBT0wsU0FBUztBQUNsQjtBQUVBLE9BQU8sU0FBU00sdUJBQXVCQSxDQUFDQyxPQUFlLEVBQVU7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