UNPKG

@tricoteuses/assemblee

Version:

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

842 lines (838 loc) 94.9 kB
// To parse this data: // // import { Convert, Amendement, Amendements } from "./file"; // // const amendement = Convert.toAmendement(json); // const amendements = Convert.toAmendements(json); // // These functions will throw an error if the JSON doesn't // match the expected interface, even if the JSON is valid. export let AccordGouvernementDepotHorsDelai = /*#__PURE__*/function (AccordGouvernementDepotHorsDelai) { AccordGouvernementDepotHorsDelai["Accord"] = "Accord"; AccordGouvernementDepotHorsDelai["SansObjet"] = "Sans objet"; return AccordGouvernementDepotHorsDelai; }({}); export let Action = /*#__PURE__*/function (Action) { Action["Cr\xE9ation"] = "cr\xE9ation"; Action["Modification"] = "modification"; Action["Suppression"] = "suppression"; return Action; }({}); export let EtatAmendementCode = /*#__PURE__*/function (EtatAmendementCode) { EtatAmendementCode["AC"] = "AC"; EtatAmendementCode["At"] = "AT"; EtatAmendementCode["Di"] = "DI"; EtatAmendementCode["Effac\xE9"] = "effac\xE9"; EtatAmendementCode["Er"] = "ER"; EtatAmendementCode["Et"] = "ET"; EtatAmendementCode["IR"] = "IR"; EtatAmendementCode["Irr127"] = "IRR127"; EtatAmendementCode["Irr20"] = "IRR20"; EtatAmendementCode["Irr37"] = "IRR37"; EtatAmendementCode["Irr38"] = "IRR38"; EtatAmendementCode["Irr41"] = "IRR41"; EtatAmendementCode["Irr42"] = "IRR42"; EtatAmendementCode["Irr45"] = "IRR45"; EtatAmendementCode["Irr48"] = "IRR48"; EtatAmendementCode["Irr53"] = "IRR53"; EtatAmendementCode["Irrai"] = "IRRAI"; EtatAmendementCode["Irraif"] = "IRRAIF"; EtatAmendementCode["Irrd"] = "IRRD"; EtatAmendementCode["Irrhc"] = "IRRHC"; // Irrecevable, hors champ EtatAmendementCode["Irrhd"] = "IRRHD"; EtatAmendementCode["Irrsa"] = "IRRSA"; EtatAmendementCode["R"] = "R"; EtatAmendementCode["Rt"] = "RT"; EtatAmendementCode["T"] = "T"; return EtatAmendementCode; }({}); export let EtatAmendementLibelle = /*#__PURE__*/function (EtatAmendementLibelle) { EtatAmendementLibelle["ADiscuter"] = "A discuter"; EtatAmendementLibelle["AD\xE9poser"] = "A d\xE9poser"; EtatAmendementLibelle["Discut\xE9"] = "Discut\xE9"; EtatAmendementLibelle["Effac\xE9"] = "effac\xE9"; EtatAmendementLibelle["EnRecevabilit\xE9"] = "En recevabilit\xE9"; EtatAmendementLibelle["EnTraitement"] = "En traitement"; EtatAmendementLibelle["Irrecevable"] = "Irrecevable"; EtatAmendementLibelle["Irrecevable40"] = "Irrecevable 40"; EtatAmendementLibelle["Retir\xE9"] = "Retir\xE9"; return EtatAmendementLibelle; }({}); export let SortAmendement = /*#__PURE__*/function (SortAmendement) { SortAmendement["Adopt\xE9"] = "Adopt\xE9"; SortAmendement["AutreIrrecevabilit\xE9"] = "Autre irrecevabilit\xE9"; SortAmendement["AutreIrrecevabilit\xE940"] = "Autre irrecevabilit\xE9 40"; SortAmendement["AutresIrrLOLF"] = "Autres irr LOLF"; SortAmendement["AutresIrrLOLFSS"] = "Autres irr LOLFSS"; SortAmendement["Cavalier45"] = "Cavalier (45)"; SortAmendement["CavalierBudg\xE9taire"] = "Cavalier budg\xE9taire"; SortAmendement["CavalierSocial"] = "Cavalier social"; SortAmendement["ChampDeLHabilitation38"] = "Champ de l'habilitation (38)"; SortAmendement["Charge"] = "Charge"; SortAmendement["Cmp45"] = "CMP (45)"; SortAmendement["Cr\xE9dits"] = "Cr\xE9dits"; SortAmendement["DispositionR\xE9glementaire37"] = "Disposition r\xE9glementaire (37)"; SortAmendement["DomaineDeLaLoi41"] = "Domaine de la loi (41)"; SortAmendement["DomaineLoiOrganique127"] = "Domaine loi organique (127)"; SortAmendement["Doublon"] = "Doublon"; SortAmendement["Entonnoir45"] = "Entonnoir (45)"; SortAmendement["Gage"] = "Gage"; SortAmendement["HorsChamp"] = "Hors champ"; SortAmendement["HorsD\xE9lais"] = "Hors-d\xE9lais"; SortAmendement["Injonction20"] = "Injonction (20)"; SortAmendement["IrrEnPremi\xE8rePartie"] = "Irr en premi\xE8re partie"; SortAmendement["IrrEnSecondePartie"] = "Irr en seconde partie"; SortAmendement["Lolf"] = "LOLF"; SortAmendement["Lolfss"] = "LOLFSS"; SortAmendement["NonSoutenu"] = "Non soutenu"; SortAmendement["OrdreDuJour48"] = "Ordre du jour (48)"; SortAmendement["R"] = "R"; SortAmendement["RatificationTrait\xE953"] = "Ratification trait\xE9 (53)"; SortAmendement["Rejet\xE9"] = "Rejet\xE9"; SortAmendement["Retir\xE9"] = "Retir\xE9"; SortAmendement["Retir\xE9Apr\xE8sPublication"] = "Retir\xE9 apr\xE8s publication"; SortAmendement["Retir\xE9AvantPublication"] = "Retir\xE9 avant publication"; SortAmendement["SatisfaitOuInop\xE9rant42"] = "Satisfait ou inop\xE9rant (42)"; SortAmendement["SousAmendement98"] = "Sous-amendement (98)"; SortAmendement["Tomb\xE9"] = "Tomb\xE9"; return SortAmendement; }({}); export let TypePosition = /*#__PURE__*/function (TypePosition) { TypePosition["Dernier"] = "Dernier"; TypePosition["Milieu"] = "Milieu"; TypePosition["Premier"] = "Premier"; return TypePosition; }({}); export let AvantAApres = /*#__PURE__*/function (AvantAApres) { AvantAApres["A"] = "A"; AvantAApres["Apres"] = "Apres"; AvantAApres["Avant"] = "Avant"; return AvantAApres; }({}); export let DivisionType = /*#__PURE__*/function (DivisionType) { DivisionType["Annexe"] = "ANNEXE"; DivisionType["Article"] = "ARTICLE"; DivisionType["Chapitre"] = "CHAPITRE"; DivisionType["Titre"] = "TITRE"; return DivisionType; }({}); export let CodeEtat = /*#__PURE__*/function (CodeEtat) { CodeEtat["B"] = "B"; CodeEtat["C"] = "C"; CodeEtat["D"] = "D"; return CodeEtat; }({}); export let Nom = /*#__PURE__*/function (Nom) { Nom["Pdf"] = "PDF"; return Nom; }({}); export let TypeMimeType = /*#__PURE__*/function (TypeMimeType) { TypeMimeType["Application"] = "application"; return TypeMimeType; }({}); export let TypeAuteur = /*#__PURE__*/function (TypeAuteur) { TypeAuteur["D\xE9put\xE9"] = "D\xE9put\xE9"; TypeAuteur["Gouvernement"] = "Gouvernement"; TypeAuteur["Rapporteur"] = "Rapporteur"; return TypeAuteur; }({}); // Converts JSON strings to/from your types // and asserts the results of JSON.parse at runtime export class Convert { static toAmendement(json) { return cast(JSON.parse(json), r("Amendement")); } static amendementToJson(value) { return JSON.stringify(uncast(value, r("Amendement")), null, 2); } static toAmendements(json) { return cast(JSON.parse(json), r("Amendements")); } static amendementsToJson(value) { return JSON.stringify(uncast(value, r("Amendements")), null, 2); } static toTexteLegislatif(json) { return cast(JSON.parse(json), r("TexteLegislatif")); } static texteLegislatifToJson(value) { return JSON.stringify(uncast(value, r("TexteLegislatif")), null, 2); } } function invalidValue(typ, val, key = "") { if (key) { throw Error(`Invalid value for key "${key}". Expected type ${JSON.stringify(typ)} but got ${JSON.stringify(val)}`); } throw Error(`Invalid value ${JSON.stringify(val)} for type ${JSON.stringify(typ)}`); } function jsonToJSProps(typ) { if (typ.jsonToJS === undefined) { const map = {}; typ.props.forEach(p => map[p.json] = { key: p.js, typ: p.typ }); typ.jsonToJS = map; } return typ.jsonToJS; } function jsToJSONProps(typ) { if (typ.jsToJSON === undefined) { const map = {}; typ.props.forEach(p => map[p.js] = { key: p.json, typ: p.typ }); typ.jsToJSON = map; } return typ.jsToJSON; } function transform(val, typ, getProps, key = "") { function transformPrimitive(typ, val) { if (typeof typ === typeof val) return val; return invalidValue(typ, val, key); } function transformUnion(typs, val) { // val must validate against one typ in typs const l = typs.length; for (let i = 0; i < l; i++) { const typ = typs[i]; try { return transform(val, typ, getProps); } catch (_) {} } return invalidValue(typs, val); } function transformEnum(cases, val) { if (cases.indexOf(val) !== -1) return val; return invalidValue(cases, val); } function transformArray(typ, val) { // val must be an array with no invalid elements if (!Array.isArray(val)) return invalidValue("array", val); return val.map(el => transform(el, typ, getProps)); } function transformDate(val) { if (val === null) { return null; } const d = new Date(val); if (isNaN(d.valueOf())) { return invalidValue("Date", val); } return d; } function transformObject(props, additional, val) { if (val === null || typeof val !== "object" || Array.isArray(val)) { return invalidValue("object", val); } const result = {}; Object.getOwnPropertyNames(props).forEach(key => { const prop = props[key]; const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined; result[prop.key] = transform(v, prop.typ, getProps, prop.key); }); Object.getOwnPropertyNames(val).forEach(key => { if (!Object.prototype.hasOwnProperty.call(props, key)) { result[key] = transform(val[key], additional, getProps, key); } }); return result; } if (typ === "any") return val; if (typ === null) { if (val === null) return val; return invalidValue(typ, val); } // if (typ === false) return invalidValue(typ, val) while (typeof typ === "object" && typ.ref !== undefined) { typ = typeMap[typ.ref]; } if (Array.isArray(typ)) return transformEnum(typ, val); if (typeof typ === "object") { return typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val) : typ.hasOwnProperty("arrayItems") ? transformArray(typ.arrayItems, val) : typ.hasOwnProperty("props") ? transformObject(getProps(typ), typ.additional, val) : invalidValue(typ, val); } // Numbers can be parsed by Date but shouldn't be. if (typ === Date && typeof val !== "number") return transformDate(val); return transformPrimitive(typ, val); } function cast(val, typ) { return transform(val, typ, jsonToJSProps); } function uncast(val, typ) { return transform(val, typ, jsToJSONProps); } function a(typ) { return { arrayItems: typ }; } function u(...typs) { return { unionMembers: typs }; } function o(props, additional) { return { props, additional }; } // function m(additional: any) { // return { props: [], additional } // } function r(name) { return { ref: name }; } const typeMap = { Amendements: o([{ json: "textesLegislatifs", js: "textesLegislatifs", typ: a(r("TexteLegislatif")) }], false), TexteLegislatif: o([{ json: "refTexteLegislatif", js: "refTexteLegislatif", typ: "" }, { json: "amendements", js: "amendements", typ: r("AmendementsClass") }], false), AmendementsClass: o([{ json: "amendement", js: "amendement", typ: a(r("Amendement")) }], false), AmendementWrapper: o([{ json: "amendement", js: "amendement", typ: r("Amendement") }], false), Amendement: o([{ json: "uid", js: "uid", typ: "" }, { json: "chronotag", js: "chronotag", typ: "" }, { json: "legislature", js: "legislature", typ: "" }, { json: "identification", js: "identification", typ: r("Identification") }, { json: "examenRef", js: "examenRef", typ: "" }, { json: "texteLegislatifRef", js: "texteLegislatifRef", typ: "" }, { json: "triAmendement", js: "triAmendement", typ: u(undefined, "") }, { json: "cardinaliteAmdtMultiples", js: "cardinaliteAmdtMultiples", typ: u(undefined, "") }, { json: "amendementParentRef", js: "amendementParentRef", typ: u(undefined, "") }, { json: "signataires", js: "signataires", typ: r("Signataires") }, { json: "pointeurFragmentTexte", js: "pointeurFragmentTexte", typ: r("PointeurFragmentTexte") }, { json: "corps", js: "corps", typ: u(undefined, r("Corps")) }, { json: "cycleDeVie", js: "cycleDeVie", typ: r("CycleDeVie") }, { json: "representation", js: "representation", typ: u(undefined, r("Representation")) }, { json: "seanceDiscussionRef", js: "seanceDiscussionRef", typ: u(undefined, "") }, { json: "article99", js: "article99", typ: "" }, { json: "loiReference", js: "loiReference", typ: u(undefined, r("LoiReference")) }, { json: "discussionCommune", js: "discussionCommune", typ: u(undefined, r("Discussion")) }, { json: "discussionIdentique", js: "discussionIdentique", typ: u(undefined, r("Discussion")) }, { json: "accordGouvernementDepotHorsDelai", js: "accordGouvernementDepotHorsDelai", typ: r("AccordGouvernementDepotHorsDelai") }], false), Corps: o([{ json: "cartoucheInformatif", js: "cartoucheInformatif", typ: u(undefined, "") }, { json: "contenuAuteur", js: "contenuAuteur", typ: u(undefined, r("ContenuAuteur")) }], false), ContenuAuteur: o([{ json: "dispositif", js: "dispositif", typ: u(undefined, "") }, { json: "avantAppel", js: "avantAppel", typ: u(undefined, r("AvantAppel")) }, { json: "exposeSommaire", js: "exposeSommaire", typ: u(undefined, "") }, { json: "dispositifAmdtCreditPLF", js: "dispositifAmdtCreditPLF", typ: u(undefined, r("DispositifAmdtCreditPLF")) }, { json: "dispositifAmdtCreditPLFR", js: "dispositifAmdtCreditPLFR", typ: u(undefined, r("DispositifAmdtCreditPLFR")) }], false), AvantAppel: o([{ json: "dispositif", js: "dispositif", typ: u(undefined, "") }, { json: "dispositifAmdtCreditPLF", js: "dispositifAmdtCreditPLF", typ: u(undefined, r("DispositifAmdtCreditPLF")) }, { json: "dispositifAmdtCreditPLFR", js: "dispositifAmdtCreditPLFR", typ: u(undefined, r("DispositifAmdtCreditPLFR")) }], false), DispositifAmdtCreditPLF: o([{ json: "listeProgrammes", js: "listeProgrammes", typ: u(undefined, a(r("ProgrammePlf"))) }, { json: "soldeAE", js: "soldeAE", typ: u(undefined, "") }, { json: "soldeCP", js: "soldeCP", typ: u(undefined, "") }, { json: "cpEgalAe", js: "cpEgalAe", typ: "" }], false), ProgrammePlf: o([{ json: "libelle", js: "libelle", typ: "" }, { json: "programmeRef", js: "programmeRef", typ: "" }, { json: "autorisationEngagement", js: "autorisationEngagement", typ: "" }, { json: "creditPaiement", js: "creditPaiement", typ: "" }, { json: "action", js: "action", typ: r("Action") }, { json: "lignesCredits", js: "lignesCredits", typ: u(undefined, a(r("LigneCreditPLF"))) }], false), LigneCreditPLF: o([{ json: "id", js: "id", typ: "" }, { json: "libelle", js: "libelle", typ: "" }, { json: "autorisationEngagement", js: "autorisationEngagement", typ: "" }, { json: "creditPaiement", js: "creditPaiement", typ: "" }, { json: "action", js: "action", typ: r("Action") }], false), DispositifAmdtCreditPLFR: o([{ json: "listeProgrammes", js: "listeProgrammes", typ: u(undefined, a(r("LigneCreditPLFR"))) }, { json: "totalAE", js: "totalAE", typ: u(undefined, r("Total")) }, { json: "totalCP", js: "totalCP", typ: u(undefined, r("Total")) }, { json: "cpEgalAe", js: "cpEgalAe", typ: "" }], false), LigneCreditPLFR: o([{ json: "libelle", js: "libelle", typ: "" }, { json: "programmeRef", js: "programmeRef", typ: u(undefined, "") }, { json: "autorisationEngagementSupplementaire", js: "autorisationEngagementSupplementaire", typ: "" }, { json: "creditPaiementSupplementaire", js: "creditPaiementSupplementaire", typ: "" }, { json: "autorisationEngagementAnnule", js: "autorisationEngagementAnnule", typ: "" }, { json: "creditPaiementAnnule", js: "creditPaiementAnnule", typ: "" }, { json: "action", js: "action", typ: r("Action") }, { json: "lignesCredits", js: "lignesCredits", typ: u(undefined, a(r("LigneCreditPLFR"))) }, { json: "id", js: "id", typ: u(undefined, "") }], false), Total: o([{ json: "supplementaire", js: "supplementaire", typ: "" }, { json: "annule", js: "annule", typ: "" }, { json: "solde", js: "solde", typ: "" }], false), CycleDeVie: o([{ json: "dateDepot", js: "dateDepot", typ: u(undefined, Date) }, { json: "datePublication", js: "datePublication", typ: u(undefined, Date) }, { json: "soumisArticle40", js: "soumisArticle40", typ: "" }, { json: "etatDesTraitements", js: "etatDesTraitements", typ: r("EtatDesTraitements") }, { json: "dateSort", js: "dateSort", typ: u(undefined, Date) }, { json: "sort", js: "sort", typ: u(undefined, r("SortAmendement")) }], false), EtatDesTraitements: o([{ json: "etat", js: "etat", typ: r("EtatAmendement") }, { json: "sousEtat", js: "sousEtat", typ: u(undefined, r("SousEtatAmendement")) }], false), EtatAmendement: o([{ json: "code", js: "code", typ: r("EtatAmendementCode") }, { json: "libelle", js: "libelle", typ: r("EtatAmendementLibelle") }], false), SousEtatAmendement: o([{ json: "code", js: "code", typ: r("EtatAmendementCode") }, { json: "libelle", js: "libelle", typ: r("SortAmendement") }], false), Discussion: o([{ json: "idDiscussion", js: "idDiscussion", typ: u(undefined, "") }, { json: "typePosition", js: "typePosition", typ: u(undefined, r("TypePosition")) }], false), Identification: o([{ json: "numeroLong", js: "numeroLong", typ: "" }, { json: "numeroOrdreDepot", js: "numeroOrdreDepot", typ: "" }, { json: "prefixeOrganeExamen", js: "prefixeOrganeExamen", typ: "" }, { json: "numeroRect", js: "numeroRect", typ: "" }], false), LoiReference: o([{ json: "codeLoi", js: "codeLoi", typ: u(undefined, "") }, { json: "divisionCodeLoi", js: "divisionCodeLoi", typ: u(undefined, "") }], false), PointeurFragmentTexte: o([{ json: "division", js: "division", typ: u(undefined, r("Division")) }, { json: "alinea", js: "alinea", typ: u(undefined, r("Alinea")) }, { json: "missionVisee", js: "missionVisee", typ: u(undefined, r("MissionVisee")) }], false), Alinea: o([{ json: "avantAApres", js: "avantAApres", typ: u(undefined, r("AvantAApres")) }, { json: "numero", js: "numero", typ: u(undefined, "") }, { json: "alineaDesignation", js: "alineaDesignation", typ: u(undefined, "") }], false), Division: o([{ json: "titre", js: "titre", typ: u(undefined, "") }, { json: "articleDesignationCourte", js: "articleDesignationCourte", typ: u(undefined, "") }, { json: "articleDesignation", js: "articleDesignation", typ: u(undefined, "") }, { json: "type", js: "type", typ: r("DivisionType") }, { json: "avantAApres", js: "avantAApres", typ: r("AvantAApres") }, { json: "divisionRattachee", js: "divisionRattachee", typ: u(undefined, "") }, { json: "articleAdditionnel", js: "articleAdditionnel", typ: "" }, { json: "chapitreAdditionnel", js: "chapitreAdditionnel", typ: "" }, { json: "urlDivisionTexteVise", js: "urlDivisionTexteVise", typ: u(undefined, "") }], false), MissionVisee: o([{ json: "codeEtat", js: "codeEtat", typ: r("CodeEtat") }, { json: "codeMissionMinefi", js: "codeMissionMinefi", typ: "" }, { json: "libelleMission", js: "libelleMission", typ: "" }, { json: "missionRef", js: "missionRef", typ: "" }], false), Representation: o([{ json: "nom", js: "nom", typ: r("Nom") }, { json: "typeMime", js: "typeMime", typ: r("TypeMime") }, { json: "statutRepresentation", js: "statutRepresentation", typ: r("StatutRepresentation") }, { json: "contenu", js: "contenu", typ: r("Contenu") }], false), Contenu: o([{ json: "documentURI", js: "documentURI", typ: "" }], false), StatutRepresentation: o([{ json: "verbatim", js: "verbatim", typ: false }, { json: "canonique", js: "canonique", typ: false }, { json: "officielle", js: "officielle", typ: false }, { json: "transcription", js: "transcription", typ: false }, { json: "enregistrement", js: "enregistrement", typ: false }], false), TypeMime: o([{ json: "type", js: "type", typ: r("TypeMimeType") }, { json: "subType", js: "subType", typ: r("Nom") }], false), Signataires: o([{ json: "auteur", js: "auteur", typ: r("Auteur") }, { json: "cosignatairesRefs", js: "cosignatairesRefs", typ: u(undefined, a("")) }, { json: "suffixe", js: "suffixe", typ: u(undefined, "") }, { json: "libelle", js: "libelle", typ: u(undefined, "") }], false), Auteur: o([{ json: "typeAuteur", js: "typeAuteur", typ: r("TypeAuteur") }, { json: "gouvernementRef", js: "gouvernementRef", typ: u(undefined, "") }, { json: "acteurRef", js: "acteurRef", typ: u(undefined, "") }, { json: "groupePolitiqueRef", js: "groupePolitiqueRef", typ: u(undefined, "") }, { json: "auteurRapporteurOrganeRef", js: "auteurRapporteurOrganeRef", typ: u(undefined, "") }], false), AccordGouvernementDepotHorsDelai: ["Accord", "Sans objet"], Action: ["création", "modification", "suppression"], EtatAmendementCode: ["AC", "AT", "DI", "effacé", "ER", "ET", "IR", "IRR127", "IRR20", "IRR37", "IRR38", "IRR41", "IRR42", "IRR45", "IRR48", "IRR53", "IRRAI", "IRRAIF", "IRRD", "IRRHC", "IRRHD", "IRRSA", "R", "RT", "T"], EtatAmendementLibelle: ["A discuter", "A déposer", "Discuté", "effacé", "En recevabilité", "En traitement", "Irrecevable", "Irrecevable 40", "Retiré"], SortAmendement: ["Adopté", "Autre irrecevabilité", "Autre irrecevabilité 40", "Autres irr LOLF", "Autres irr LOLFSS", "Cavalier (45)", "Cavalier budgétaire", "Cavalier social", "Champ de l'habilitation (38)", "Charge", "CMP (45)", "Crédits", "Disposition réglementaire (37)", "Domaine de la loi (41)", "Domaine loi organique (127)", "Doublon", "Entonnoir (45)", "Gage", "Hors champ", "Hors-délais", "Injonction (20)", "Irr en première partie", "Irr en seconde partie", "LOLF", "LOLFSS", "Non soutenu", "Ordre du jour (48)", "R", "Ratification traité (53)", "Rejeté", "Retiré", "Retiré après publication", "Retiré avant publication", "Satisfait ou inopérant (42)", "Sous-amendement (98)", "Tombé"], TypePosition: ["Dernier", "Milieu", "Premier"], AvantAApres: ["A", "Apres", "Avant"], DivisionType: ["ANNEXE", "ARTICLE", "CHAPITRE", "TITRE"], CodeEtat: ["B", "C", "D"], Nom: ["PDF"], TypeMimeType: ["application"], TypeAuteur: ["Député", "Gouvernement", "Rapporteur"] }; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJBY2NvcmRHb3V2ZXJuZW1lbnREZXBvdEhvcnNEZWxhaSIsIkFjdGlvbiIsIkV0YXRBbWVuZGVtZW50Q29kZSIsIkV0YXRBbWVuZGVtZW50TGliZWxsZSIsIlNvcnRBbWVuZGVtZW50IiwiVHlwZVBvc2l0aW9uIiwiQXZhbnRBQXByZXMiLCJEaXZpc2lvblR5cGUiLCJDb2RlRXRhdCIsIk5vbSIsIlR5cGVNaW1lVHlwZSIsIlR5cGVBdXRldXIiLCJDb252ZXJ0IiwidG9BbWVuZGVtZW50IiwianNvbiIsImNhc3QiLCJKU09OIiwicGFyc2UiLCJyIiwiYW1lbmRlbWVudFRvSnNvbiIsInZhbHVlIiwic3RyaW5naWZ5IiwidW5jYXN0IiwidG9BbWVuZGVtZW50cyIsImFtZW5kZW1lbnRzVG9Kc29uIiwidG9UZXh0ZUxlZ2lzbGF0aWYiLCJ0ZXh0ZUxlZ2lzbGF0aWZUb0pzb24iLCJpbnZhbGlkVmFsdWUiLCJ0eXAiLCJ2YWwiLCJrZXkiLCJFcnJvciIsImpzb25Ub0pTUHJvcHMiLCJqc29uVG9KUyIsInVuZGVmaW5lZCIsIm1hcCIsInByb3BzIiwiZm9yRWFjaCIsInAiLCJqcyIsImpzVG9KU09OUHJvcHMiLCJqc1RvSlNPTiIsInRyYW5zZm9ybSIsImdldFByb3BzIiwidHJhbnNmb3JtUHJpbWl0aXZlIiwidHJhbnNmb3JtVW5pb24iLCJ0eXBzIiwibCIsImxlbmd0aCIsImkiLCJfIiwidHJhbnNmb3JtRW51bSIsImNhc2VzIiwiaW5kZXhPZiIsInRyYW5zZm9ybUFycmF5IiwiQXJyYXkiLCJpc0FycmF5IiwiZWwiLCJ0cmFuc2Zvcm1EYXRlIiwiZCIsIkRhdGUiLCJpc05hTiIsInZhbHVlT2YiLCJ0cmFuc2Zvcm1PYmplY3QiLCJhZGRpdGlvbmFsIiwicmVzdWx0IiwiT2JqZWN0IiwiZ2V0T3duUHJvcGVydHlOYW1lcyIsInByb3AiLCJ2IiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwicmVmIiwidHlwZU1hcCIsInVuaW9uTWVtYmVycyIsImFycmF5SXRlbXMiLCJhIiwidSIsIm8iLCJuYW1lIiwiQW1lbmRlbWVudHMiLCJUZXh0ZUxlZ2lzbGF0aWYiLCJBbWVuZGVtZW50c0NsYXNzIiwiQW1lbmRlbWVudFdyYXBwZXIiLCJBbWVuZGVtZW50IiwiQ29ycHMiLCJDb250ZW51QXV0ZXVyIiwiQXZhbnRBcHBlbCIsIkRpc3Bvc2l0aWZBbWR0Q3JlZGl0UExGIiwiUHJvZ3JhbW1lUGxmIiwiTGlnbmVDcmVkaXRQTEYiLCJEaXNwb3NpdGlmQW1kdENyZWRpdFBMRlIiLCJMaWduZUNyZWRpdFBMRlIiLCJUb3RhbCIsIkN5Y2xlRGVWaWUiLCJFdGF0RGVzVHJhaXRlbWVudHMiLCJFdGF0QW1lbmRlbWVudCIsIlNvdXNFdGF0QW1lbmRlbWVudCIsIkRpc2N1c3Npb24iLCJJZGVudGlmaWNhdGlvbiIsIkxvaVJlZmVyZW5jZSIsIlBvaW50ZXVyRnJhZ21lbnRUZXh0ZSIsIkFsaW5lYSIsIkRpdmlzaW9uIiwiTWlzc2lvblZpc2VlIiwiUmVwcmVzZW50YXRpb24iLCJDb250ZW51IiwiU3RhdHV0UmVwcmVzZW50YXRpb24iLCJUeXBlTWltZSIsIlNpZ25hdGFpcmVzIiwiQXV0ZXVyIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3R5cGVzL2FtZW5kZW1lbnRzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIFRvIHBhcnNlIHRoaXMgZGF0YTpcbi8vXG4vLyAgIGltcG9ydCB7IENvbnZlcnQsIEFtZW5kZW1lbnQsIEFtZW5kZW1lbnRzIH0gZnJvbSBcIi4vZmlsZVwiO1xuLy9cbi8vICAgY29uc3QgYW1lbmRlbWVudCA9IENvbnZlcnQudG9BbWVuZGVtZW50KGpzb24pO1xuLy8gICBjb25zdCBhbWVuZGVtZW50cyA9IENvbnZlcnQudG9BbWVuZGVtZW50cyhqc29uKTtcbi8vXG4vLyBUaGVzZSBmdW5jdGlvbnMgd2lsbCB0aHJvdyBhbiBlcnJvciBpZiB0aGUgSlNPTiBkb2Vzbid0XG4vLyBtYXRjaCB0aGUgZXhwZWN0ZWQgaW50ZXJmYWNlLCBldmVuIGlmIHRoZSBKU09OIGlzIHZhbGlkLlxuXG5pbXBvcnQgeyBBY3RldXIsIE9yZ2FuZSB9IGZyb20gXCIuL2FjdGV1cnNfZXRfb3JnYW5lc1wiXG5cbmV4cG9ydCBpbnRlcmZhY2UgQW1lbmRlbWVudHMge1xuICB0ZXh0ZXNMZWdpc2xhdGlmczogVGV4dGVMZWdpc2xhdGlmW11cbn1cblxuZXhwb3J0IGludGVyZmFjZSBUZXh0ZUxlZ2lzbGF0aWYge1xuICByZWZUZXh0ZUxlZ2lzbGF0aWY6IHN0cmluZ1xuICBhbWVuZGVtZW50czogQW1lbmRlbWVudFtdXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQW1lbmRlbWVudCB7XG4gIHNjaGVtYVZlcnNpb24/OiBzdHJpbmdcbiAgdWlkOiBzdHJpbmdcbiAgY2hyb25vdGFnOiBzdHJpbmdcbiAgbGVnaXNsYXR1cmU6IHN0cmluZ1xuICBpZGVudGlmaWNhdGlvbjogSWRlbnRpZmljYXRpb25cbiAgZXhhbWVuUmVmOiBzdHJpbmdcbiAgdGV4dGVMZWdpc2xhdGlmUmVmOiBzdHJpbmdcbiAgdHJpQW1lbmRlbWVudD86IHN0cmluZ1xuICBjYXJkaW5hbGl0ZUFtZHRNdWx0aXBsZXM/OiBzdHJpbmdcbiAgYW1lbmRlbWVudFBhcmVudFJlZj86IHN0cmluZ1xuICBzaWduYXRhaXJlczogU2lnbmF0YWlyZXNcbiAgcG9pbnRldXJGcmFnbWVudFRleHRlOiBQb2ludGV1ckZyYWdtZW50VGV4dGVcbiAgY29ycHM/OiBDb3Jwc1xuICBjeWNsZURlVmllOiBDeWNsZURlVmllXG4gIHJlcHJlc2VudGF0aW9uPzogUmVwcmVzZW50YXRpb25cbiAgc2VhbmNlRGlzY3Vzc2lvblJlZj86IHN0cmluZ1xuICBhcnRpY2xlOTk6IHN0cmluZ1xuICBsb2lSZWZlcmVuY2U/OiBMb2lSZWZlcmVuY2VcbiAgZGlzY3Vzc2lvbkNvbW11bmU/OiBEaXNjdXNzaW9uXG4gIGRpc2N1c3Npb25JZGVudGlxdWU/OiBEaXNjdXNzaW9uXG4gIGFjY29yZEdvdXZlcm5lbWVudERlcG90SG9yc0RlbGFpOiBBY2NvcmRHb3V2ZXJuZW1lbnREZXBvdEhvcnNEZWxhaVxufVxuXG5leHBvcnQgZW51bSBBY2NvcmRHb3V2ZXJuZW1lbnREZXBvdEhvcnNEZWxhaSB7XG4gIEFjY29yZCA9IFwiQWNjb3JkXCIsXG4gIFNhbnNPYmpldCA9IFwiU2FucyBvYmpldFwiLFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIENvcnBzIHtcbiAgY2FydG91Y2hlSW5mb3JtYXRpZj86IHN0cmluZ1xuICBjb250ZW51QXV0ZXVyPzogQ29udGVudUF1dGV1clxufVxuXG5leHBvcnQgaW50ZXJmYWNlIENvbnRlbnVBdXRldXIge1xuICBkaXNwb3NpdGlmPzogc3RyaW5nXG4gIGF2YW50QXBwZWw/OiBBdmFudEFwcGVsXG4gIGV4cG9zZVNvbW1haXJlPzogc3RyaW5nXG4gIGRpc3Bvc2l0aWZBbWR0Q3JlZGl0UExGPzogRGlzcG9zaXRpZkFtZHRDcmVkaXRQTEZcbiAgZGlzcG9zaXRpZkFtZHRDcmVkaXRQTEZSPzogRGlzcG9zaXRpZkFtZHRDcmVkaXRQTEZSXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXZhbnRBcHBlbCB7XG4gIGRpc3Bvc2l0aWY/OiBzdHJpbmdcbiAgZGlzcG9zaXRpZkFtZHRDcmVkaXRQTEY/OiBEaXNwb3NpdGlmQW1kdENyZWRpdFBMRlxuICBkaXNwb3NpdGlmQW1kdENyZWRpdFBMRlI/OiBEaXNwb3NpdGlmQW1kdENyZWRpdFBMRlJcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEaXNwb3NpdGlmQW1kdENyZWRpdFBMRiB7XG4gIGxpc3RlUHJvZ3JhbW1lcz86IFByb2dyYW1tZVBsZltdXG4gIHNvbGRlQUU/OiBzdHJpbmdcbiAgc29sZGVDUD86IHN0cmluZ1xuICBjcEVnYWxBZTogc3RyaW5nXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUHJvZ3JhbW1lUGxmIHtcbiAgbGliZWxsZTogc3RyaW5nXG4gIHByb2dyYW1tZVJlZjogc3RyaW5nXG4gIGF1dG9yaXNhdGlvbkVuZ2FnZW1lbnQ6IHN0cmluZ1xuICBjcmVkaXRQYWllbWVudDogc3RyaW5nXG4gIGFjdGlvbjogQWN0aW9uXG4gIGxpZ25lc0NyZWRpdHM/OiBMaWduZUNyZWRpdFBMRltdXG59XG5cbmV4cG9ydCBlbnVtIEFjdGlvbiB7XG4gIENyw6lhdGlvbiA9IFwiY3LDqWF0aW9uXCIsXG4gIE1vZGlmaWNhdGlvbiA9IFwibW9kaWZpY2F0aW9uXCIsXG4gIFN1cHByZXNzaW9uID0gXCJzdXBwcmVzc2lvblwiLFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIExpZ25lQ3JlZGl0UExGIHtcbiAgaWQ6IHN0cmluZ1xuICBsaWJlbGxlOiBzdHJpbmdcbiAgYXV0b3Jpc2F0aW9uRW5nYWdlbWVudDogc3RyaW5nXG4gIGNyZWRpdFBhaWVtZW50OiBzdHJpbmdcbiAgYWN0aW9uOiBBY3Rpb25cbn1cblxuZXhwb3J0IGludGVyZmFjZSBEaXNwb3NpdGlmQW1kdENyZWRpdFBMRlIge1xuICBsaXN0ZVByb2dyYW1tZXM/OiBMaWduZUNyZWRpdFBMRlJbXVxuICB0b3RhbEFFPzogVG90YWxcbiAgdG90YWxDUD86IFRvdGFsXG4gIGNwRWdhbEFlOiBzdHJpbmdcbn1cblxuZXhwb3J0IGludGVyZmFjZSBMaWduZUNyZWRpdFBMRlIge1xuICBsaWJlbGxlOiBzdHJpbmdcbiAgcHJvZ3JhbW1lUmVmPzogc3RyaW5nXG4gIGF1dG9yaXNhdGlvbkVuZ2FnZW1lbnRTdXBwbGVtZW50YWlyZTogc3RyaW5nXG4gIGNyZWRpdFBhaWVtZW50U3VwcGxlbWVudGFpcmU6IHN0cmluZ1xuICBhdXRvcmlzYXRpb25FbmdhZ2VtZW50QW5udWxlOiBzdHJpbmdcbiAgY3JlZGl0UGFpZW1lbnRBbm51bGU6IHN0cmluZ1xuICBhY3Rpb246IEFjdGlvblxuICBsaWduZXNDcmVkaXRzPzogTGlnbmVDcmVkaXRQTEZSW11cbiAgaWQ/OiBzdHJpbmdcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUb3RhbCB7XG4gIHN1cHBsZW1lbnRhaXJlOiBzdHJpbmdcbiAgYW5udWxlOiBzdHJpbmdcbiAgc29sZGU6IHN0cmluZ1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEN5Y2xlRGVWaWUge1xuICBkYXRlRGVwb3Q/OiBEYXRlXG4gIGRhdGVQdWJsaWNhdGlvbj86IERhdGVcbiAgc291bWlzQXJ0aWNsZTQwOiBzdHJpbmdcbiAgZXRhdERlc1RyYWl0ZW1lbnRzOiBFdGF0RGVzVHJhaXRlbWVudHNcbiAgZGF0ZVNvcnQ/OiBEYXRlXG4gIHNvcnQ/OiBTb3J0QW1lbmRlbWVudFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIEV0YXREZXNUcmFpdGVtZW50cyB7XG4gIGV0YXQ6IEV0YXRBbWVuZGVtZW50XG4gIHNvdXNFdGF0PzogU291c0V0YXRBbWVuZGVtZW50XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRXRhdEFtZW5kZW1lbnQge1xuICBjb2RlOiBFdGF0QW1lbmRlbWVudENvZGVcbiAgbGliZWxsZTogRXRhdEFtZW5kZW1lbnRMaWJlbGxlXG59XG5cbmV4cG9ydCBlbnVtIEV0YXRBbWVuZGVtZW50Q29kZSB7XG4gIEFDID0gXCJBQ1wiLFxuICBBdCA9IFwiQVRcIixcbiAgRGkgPSBcIkRJXCIsXG4gIEVmZmFjw6kgPSBcImVmZmFjw6lcIixcbiAgRXIgPSBcIkVSXCIsXG4gIEV0ID0gXCJFVFwiLFxuICBJUiA9IFwiSVJcIixcbiAgSXJyMTI3ID0gXCJJUlIxMjdcIixcbiAgSXJyMjAgPSBcIklSUjIwXCIsXG4gIElycjM3ID0gXCJJUlIzN1wiLFxuICBJcnIzOCA9IFwiSVJSMzhcIixcbiAgSXJyNDEgPSBcIklSUjQxXCIsXG4gIElycjQyID0gXCJJUlI0MlwiLFxuICBJcnI0NSA9IFwiSVJSNDVcIixcbiAgSXJyNDggPSBcIklSUjQ4XCIsXG4gIElycjUzID0gXCJJUlI1M1wiLFxuICBJcnJhaSA9IFwiSVJSQUlcIixcbiAgSXJyYWlmID0gXCJJUlJBSUZcIixcbiAgSXJyZCA9IFwiSVJSRFwiLFxuICBJcnJoYyA9IFwiSVJSSENcIiwgLy8gSXJyZWNldmFibGUsIGhvcnMgY2hhbXBcbiAgSXJyaGQgPSBcIklSUkhEXCIsXG4gIElycnNhID0gXCJJUlJTQVwiLFxuICBSID0gXCJSXCIsXG4gIFJ0ID0gXCJSVFwiLFxuICBUID0gXCJUXCIsXG59XG5cbmV4cG9ydCBlbnVtIEV0YXRBbWVuZGVtZW50TGliZWxsZSB7XG4gIEFEaXNjdXRlciA9IFwiQSBkaXNjdXRlclwiLFxuICBBRMOpcG9zZXIgPSBcIkEgZMOpcG9zZXJcIixcbiAgRGlzY3V0w6kgPSBcIkRpc2N1dMOpXCIsXG4gIEVmZmFjw6kgPSBcImVmZmFjw6lcIixcbiAgRW5SZWNldmFiaWxpdMOpID0gXCJFbiByZWNldmFiaWxpdMOpXCIsXG4gIEVuVHJhaXRlbWVudCA9IFwiRW4gdHJhaXRlbWVudFwiLFxuICBJcnJlY2V2YWJsZSA9IFwiSXJyZWNldmFibGVcIixcbiAgSXJyZWNldmFibGU0MCA9IFwiSXJyZWNldmFibGUgNDBcIixcbiAgUmV0aXLDqSA9IFwiUmV0aXLDqVwiLFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNvdXNFdGF0QW1lbmRlbWVudCB7XG4gIGNvZGU6IEV0YXRBbWVuZGVtZW50Q29kZVxuICBsaWJlbGxlOiBTb3J0QW1lbmRlbWVudFxufVxuXG5leHBvcnQgZW51bSBTb3J0QW1lbmRlbWVudCB7XG4gIEFkb3B0w6kgPSBcIkFkb3B0w6lcIixcbiAgQXV0cmVJcnJlY2V2YWJpbGl0w6kgPSBcIkF1dHJlIGlycmVjZXZhYmlsaXTDqVwiLFxuICBBdXRyZUlycmVjZXZhYmlsaXTDqTQwID0gXCJBdXRyZSBpcnJlY2V2YWJpbGl0w6kgNDBcIixcbiAgQXV0cmVzSXJyTE9MRiA9IFwiQXV0cmVzIGlyciBMT0xGXCIsXG4gIEF1dHJlc0lyckxPTEZTUyA9IFwiQXV0cmVzIGlyciBMT0xGU1NcIixcbiAgQ2F2YWxpZXI0NSA9IFwiQ2F2YWxpZXIgKDQ1KVwiLFxuICBDYXZhbGllckJ1ZGfDqXRhaXJlID0gXCJDYXZhbGllciBidWRnw6l0YWlyZVwiLFxuICBDYXZhbGllclNvY2lhbCA9IFwiQ2F2YWxpZXIgc29jaWFsXCIsXG4gIENoYW1wRGVMSGFiaWxpdGF0aW9uMzggPSBcIkNoYW1wIGRlIGwnaGFiaWxpdGF0aW9uICgzOClcIixcbiAgQ2hhcmdlID0gXCJDaGFyZ2VcIixcbiAgQ21wNDUgPSBcIkNNUCAoNDUpXCIsXG4gIENyw6lkaXRzID0gXCJDcsOpZGl0c1wiLFxuICBEaXNwb3NpdGlvblLDqWdsZW1lbnRhaXJlMzcgPSBcIkRpc3Bvc2l0aW9uIHLDqWdsZW1lbnRhaXJlICgzNylcIixcbiAgRG9tYWluZURlTGFMb2k0MSA9IFwiRG9tYWluZSBkZSBsYSBsb2kgKDQxKVwiLFxuICBEb21haW5lTG9pT3JnYW5pcXVlMTI3ID0gXCJEb21haW5lIGxvaSBvcmdhbmlxdWUgKDEyNylcIixcbiAgRG91YmxvbiA9IFwiRG91YmxvblwiLFxuICBFbnRvbm5vaXI0NSA9IFwiRW50b25ub2lyICg0NSlcIixcbiAgR2FnZSA9IFwiR2FnZVwiLFxuICBIb3JzQ2hhbXAgPSBcIkhvcnMgY2hhbXBcIixcbiAgSG9yc0TDqWxhaXMgPSBcIkhvcnMtZMOpbGFpc1wiLFxuICBJbmpvbmN0aW9uMjAgPSBcIkluam9uY3Rpb24gKDIwKVwiLFxuICBJcnJFblByZW1pw6hyZVBhcnRpZSA9IFwiSXJyIGVuIHByZW1pw6hyZSBwYXJ0aWVcIixcbiAgSXJyRW5TZWNvbmRlUGFydGllID0gXCJJcnIgZW4gc2Vjb25kZSBwYXJ0aWVcIixcbiAgTG9sZiA9IFwiTE9MRlwiLFxuICBMb2xmc3MgPSBcIkxPTEZTU1wiLFxuICBOb25Tb3V0ZW51ID0gXCJOb24gc291dGVudVwiLFxuICBPcmRyZUR1Sm91cjQ4ID0gXCJPcmRyZSBkdSBqb3VyICg0OClcIixcbiAgUiA9IFwiUlwiLFxuICBSYXRpZmljYXRpb25UcmFpdMOpNTMgPSBcIlJhdGlmaWNhdGlvbiB0cmFpdMOpICg1MylcIixcbiAgUmVqZXTDqSA9IFwiUmVqZXTDqVwiLFxuICBSZXRpcsOpID0gXCJSZXRpcsOpXCIsXG4gIFJldGlyw6lBcHLDqHNQdWJsaWNhdGlvbiA9IFwiUmV0aXLDqSBhcHLDqHMgcHVibGljYXRpb25cIixcbiAgUmV0aXLDqUF2YW50UHVibGljYXRpb24gPSBcIlJldGlyw6kgYXZhbnQgcHVibGljYXRpb25cIixcbiAgU2F0aXNmYWl0T3VJbm9ww6lyYW50NDIgPSBcIlNhdGlzZmFpdCBvdSBpbm9ww6lyYW50ICg0MilcIixcbiAgU291c0FtZW5kZW1lbnQ5OCA9IFwiU291cy1hbWVuZGVtZW50ICg5OClcIixcbiAgVG9tYsOpID0gXCJUb21iw6lcIixcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEaXNjdXNzaW9uIHtcbiAgaWREaXNjdXNzaW9uPzogc3RyaW5nXG4gIHR5cGVQb3NpdGlvbj86IFR5cGVQb3NpdGlvblxufVxuXG5leHBvcnQgZW51bSBUeXBlUG9zaXRpb24ge1xuICBEZXJuaWVyID0gXCJEZXJuaWVyXCIsXG4gIE1pbGlldSA9IFwiTWlsaWV1XCIsXG4gIFByZW1pZXIgPSBcIlByZW1pZXJcIixcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJZGVudGlmaWNhdGlvbiB7XG4gIG51bWVyb0xvbmc6IHN0cmluZ1xuICBudW1lcm9PcmRyZURlcG90OiBzdHJpbmdcbiAgcHJlZml4ZU9yZ2FuZUV4YW1lbjogc3RyaW5nXG4gIG51bWVyb1JlY3Q6IHN0cmluZ1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIExvaVJlZmVyZW5jZSB7XG4gIGNvZGVMb2k/OiBzdHJpbmdcbiAgZGl2aXNpb25Db2RlTG9pPzogc3RyaW5nXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUG9pbnRldXJGcmFnbWVudFRleHRlIHtcbiAgZGl2aXNpb24/OiBEaXZpc2lvblxuICBhbGluZWE/OiBBbGluZWFcbiAgbWlzc2lvblZpc2VlPzogTWlzc2lvblZpc2VlXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQWxpbmVhIHtcbiAgYXZhbnRBQXByZXM/OiBBdmFudEFBcHJlc1xuICBudW1lcm8/OiBzdHJpbmdcbiAgYWxpbmVhRGVzaWduYXRpb24/OiBzdHJpbmdcbn1cblxuZXhwb3J0IGVudW0gQXZhbnRBQXByZXMge1xuICBBID0gXCJBXCIsXG4gIEFwcmVzID0gXCJBcHJlc1wiLFxuICBBdmFudCA9IFwiQXZhbnRcIixcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEaXZpc2lvbiB7XG4gIHRpdHJlPzogc3RyaW5nXG4gIGFydGljbGVEZXNpZ25hdGlvbkNvdXJ0ZT86IHN0cmluZ1xuICBhcnRpY2xlRGVzaWduYXRpb24/OiBzdHJpbmdcbiAgdHlwZTogRGl2aXNpb25UeXBlXG4gIGF2YW50QUFwcmVzOiBBdmFudEFBcHJlc1xuICBkaXZpc2lvblJhdHRhY2hlZT86IHN0cmluZ1xuICBhcnRpY2xlQWRkaXRpb25uZWw6IHN0cmluZ1xuICBjaGFwaXRyZUFkZGl0aW9ubmVsOiBzdHJpbmdcbiAgdXJsRGl2aXNpb25UZXh0ZVZpc2U/OiBzdHJpbmdcbn1cblxuZXhwb3J0IGVudW0gRGl2aXNpb25UeXBlIHtcbiAgQW5uZXhlID0gXCJBTk5FWEVcIixcbiAgQXJ0aWNsZSA9IFwiQVJUSUNMRVwiLFxuICBDaGFwaXRyZSA9IFwiQ0hBUElUUkVcIixcbiAgVGl0cmUgPSBcIlRJVFJFXCIsXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTWlzc2lvblZpc2VlIHtcbiAgY29kZUV0YXQ6IENvZGVFdGF0XG4gIGNvZGVNaXNzaW9uTWluZWZpOiBzdHJpbmdcbiAgbGliZWxsZU1pc3Npb246IHN0cmluZ1xuICBtaXNzaW9uUmVmOiBzdHJpbmdcbn1cblxuZXhwb3J0IGVudW0gQ29kZUV0YXQge1xuICBCID0gXCJCXCIsXG4gIEMgPSBcIkNcIixcbiAgRCA9IFwiRFwiLFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJlcHJlc2VudGF0aW9uIHtcbiAgbm9tOiBOb21cbiAgdHlwZU1pbWU6IFR5cGVNaW1lXG4gIHN0YXR1dFJlcHJlc2VudGF0aW9uOiBTdGF0dXRSZXByZXNlbnRhdGlvblxuICBjb250ZW51OiBDb250ZW51XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29udGVudSB7XG4gIGRvY3VtZW50VVJJOiBzdHJpbmdcbn1cblxuZXhwb3J0IGVudW0gTm9tIHtcbiAgUGRmID0gXCJQREZcIixcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTdGF0dXRSZXByZXNlbnRhdGlvbiB7XG4gIHZlcmJhdGltOiBib29sZWFuXG4gIGNhbm9uaXF1ZTogYm9vbGVhblxuICBvZmZpY2llbGxlOiBib29sZWFuXG4gIHRyYW5zY3JpcHRpb246IGJvb2xlYW5cbiAgZW5yZWdpc3RyZW1lbnQ6IGJvb2xlYW5cbn1cblxuZXhwb3J0IGludGVyZmFjZSBUeXBlTWltZSB7XG4gIHR5cGU6IFR5cGVNaW1lVHlwZVxuICBzdWJUeXBlOiBOb21cbn1cblxuZXhwb3J0IGVudW0gVHlwZU1pbWVUeXBlIHtcbiAgQXBwbGljYXRpb24gPSBcImFwcGxpY2F0aW9uXCIsXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2lnbmF0YWlyZXMge1xuICBhdXRldXI6IEF1dGV1clxuICBjb3NpZ25hdGFpcmVzUmVmcz86IHN0cmluZ1tdXG4gIGNvc2lnbmF0YWlyZXM/OiBBY3RldXJbXSAvLyBBZGRlZCBieSBUcmljb3RldXNlc1xuICBzdWZmaXhlPzogc3RyaW5nXG4gIGxpYmVsbGU/OiBzdHJpbmdcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBdXRldXIge1xuICB0eXBlQXV0ZXVyOiBUeXBlQXV0ZXVyXG4gIGdvdXZlcm5lbWVudFJlZj86IHN0cmluZ1xuICBnb3V2ZXJuZW1lbnQ/OiBPcmdhbmUgLy8gQWRkZWQgYnkgVHJpY290ZXVzZXNcbiAgYWN0ZXVyUmVmPzogc3RyaW5nXG4gIGFjdGV1cj86IEFjdGV1ciAvLyBBZGRlZCBieSBUcmljb3RldXNlc1xuICBncm91cGVQb2xpdGlxdWVSZWY/OiBzdHJpbmdcbiAgZ3JvdXBlUG9saXRpcXVlPzogT3JnYW5lIC8vIEFkZGVkIGJ5IFRyaWNvdGV1c2VzXG4gIGF1dGV1clJhcHBvcnRldXJPcmdhbmVSZWY/OiBzdHJpbmdcbiAgYXV0ZXVyUmFwcG9ydGV1ck9yZ2FuZT86IE9yZ2FuZSAvLyBBZGRlZCBieSBUcmljb3RldXNlc1xufVxuXG5leHBvcnQgZW51bSBUeXBlQXV0ZXVyIHtcbiAgRMOpcHV0w6kgPSBcIkTDqXB1dMOpXCIsXG4gIEdvdXZlcm5lbWVudCA9IFwiR291dmVybmVtZW50XCIsXG4gIFJhcHBvcnRldXIgPSBcIlJhcHBvcnRldXJcIixcbn1cblxuLy8gQ29udmVydHMgSlNPTiBzdHJpbmdzIHRvL2Zyb20geW91ciB0eXBlc1xuLy8gYW5kIGFzc2VydHMgdGhlIHJlc3VsdHMgb2YgSlNPTi5wYXJzZSBhdCBydW50aW1lXG5leHBvcnQgY2xhc3MgQ29udmVydCB7XG4gIHB1YmxpYyBzdGF0aWMgdG9BbWVuZGVtZW50KGpzb246IHN0cmluZyk6IEFtZW5kZW1lbnQge1xuICAgIHJldHVybiBjYXN0KEpTT04ucGFyc2UoanNvbiksIHIoXCJBbWVuZGVtZW50XCIpKVxuICB9XG5cbiAgcHVibGljIHN0YXRpYyBhbWVuZGVtZW50VG9Kc29uKHZhbHVlOiBBbWVuZGVtZW50KTogc3RyaW5nIHtcbiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkodW5jYXN0KHZhbHVlLCByKFwiQW1lbmRlbWVudFwiKSksIG51bGwsIDIpXG4gIH1cblxuICBwdWJsaWMgc3RhdGljIHRvQW1lbmRlbWVudHMoanNvbjogc3RyaW5nKTogQW1lbmRlbWVudHMge1xuICAgIHJldHVybiBjYXN0KEpTT04ucGFyc2UoanNvbiksIHIoXCJBbWVuZGVtZW50c1wiKSlcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgYW1lbmRlbWVudHNUb0pzb24odmFsdWU6IEFtZW5kZW1lbnRzKTogc3RyaW5nIHtcbiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkodW5jYXN0KHZhbHVlLCByKFwiQW1lbmRlbWVudHNcIikpLCBudWxsLCAyKVxuICB9XG5cbiAgcHVibGljIHN0YXRpYyB0b1RleHRlTGVnaXNsYXRpZihqc29uOiBzdHJpbmcpOiBUZXh0ZUxlZ2lzbGF0aWYge1xuICAgIHJldHVybiBjYXN0KEpTT04ucGFyc2UoanNvbiksIHIoXCJUZXh0ZUxlZ2lzbGF0aWZcIikpXG4gIH1cblxuICBwdWJsaWMgc3RhdGljIHRleHRlTGVnaXNsYXRpZlRvSnNvbih2YWx1ZTogVGV4dGVMZWdpc2xhdGlmKTogc3RyaW5nIHtcbiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkodW5jYXN0KHZhbHVlLCByKFwiVGV4dGVMZWdpc2xhdGlmXCIpKSwgbnVsbCwgMilcbiAgfVxufVxuXG5mdW5jdGlvbiBpbnZhbGlkVmFsdWUodHlwOiBhbnksIHZhbDogYW55LCBrZXk6IGFueSA9IFwiXCIpOiBuZXZlciB7XG4gIGlmIChrZXkpIHtcbiAgICB0aHJvdyBFcnJvcihcbiAgICAgIGBJbnZhbGlkIHZhbHVlIGZvciBrZXkgXCIke2tleX1cIi4gRXhwZWN0ZWQgdHlwZSAke0pTT04uc3RyaW5naWZ5KFxuICAgICAgICB0eXAsXG4gICAgICApfSBidXQgZ290ICR7SlNPTi5zdHJpbmdpZnkodmFsKX1gLFxuICAgIClcbiAgfVxuICB0aHJvdyBFcnJvcihcbiAgICBgSW52YWxpZCB2YWx1ZSAke0pTT04uc3RyaW5naWZ5KHZhbCl9IGZvciB0eXBlICR7SlNPTi5zdHJpbmdpZnkodHlwKX1gLFxuICApXG59XG5cbmZ1bmN0aW9uIGpzb25Ub0pTUHJvcHModHlwOiBhbnkpOiBhbnkge1xuICBpZiAodHlwLmpzb25Ub0pTID09PSB1bmRlZmluZWQpIHtcbiAgICBjb25zdCBtYXA6IGFueSA9IHt9XG4gICAgdHlwLnByb3BzLmZvckVhY2goKHA6IGFueSkgPT4gKG1hcFtwLmpzb25dID0geyBrZXk6IHAuanMsIHR5cDogcC50eXAgfSkpXG4gICAgdHlwLmpzb25Ub0pTID0gbWFwXG4gIH1cbiAgcmV0dXJuIHR5cC5qc29uVG9KU1xufVxuXG5mdW5jdGlvbiBqc1RvSlNPTlByb3BzKHR5cDogYW55KTogYW55IHtcbiAgaWYgKHR5cC5qc1RvSlNPTiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgY29uc3QgbWFwOiBhbnkgPSB7fVxuICAgIHR5cC5wcm9wcy5mb3JFYWNoKChwOiBhbnkpID0+IChtYXBbcC5qc10gPSB7IGtleTogcC5qc29uLCB0eXA6IHAudHlwIH0pKVxuICAgIHR5cC5qc1RvSlNPTiA9IG1hcFxuICB9XG4gIHJldHVybiB0eXAuanNUb0pTT05cbn1cblxuZnVuY3Rpb24gdHJhbnNmb3JtKHZhbDogYW55LCB0eXA6IGFueSwgZ2V0UHJvcHM6IGFueSwga2V5OiBhbnkgPSBcIlwiKTogYW55IHtcbiAgZnVuY3Rpb24gdHJhbnNmb3JtUHJpbWl0aXZlKHR5cDogc3RyaW5nLCB2YWw6IGFueSk6IGFueSB7XG4gICAgaWYgKHR5cGVvZiB0eXAgPT09IHR5cGVvZiB2YWwpIHJldHVybiB2YWxcbiAgICByZXR1cm4gaW52YWxpZFZhbHVlKHR5cCwgdmFsLCBrZXkpXG4gIH1cblxuICBmdW5jdGlvbiB0cmFuc2Zvcm1Vbmlvbih0eXBzOiBhbnlbXSwgdmFsOiBhbnkpOiBhbnkge1xuICAgIC8vIHZhbCBtdXN0IHZhbGlkYXRlIGFnYWluc3Qgb25lIHR5cCBpbiB0eXBzXG4gICAgY29uc3QgbCA9IHR5cHMubGVuZ3RoXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsOyBpKyspIHtcbiAgICAgIGNvbnN0IHR5cCA9IHR5cHNbaV1cbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiB0cmFuc2Zvcm0odmFsLCB0eXAsIGdldFByb3BzKVxuICAgICAgfSBjYXRjaCAoXykge31cbiAgICB9XG4gICAgcmV0dXJuIGludmFsaWRWYWx1ZSh0eXBzLCB2YWwpXG4gIH1cblxuICBmdW5jdGlvbiB0cmFuc2Zvcm1FbnVtKGNhc2VzOiBzdHJpbmdbXSwgdmFsOiBhbnkpOiBhbnkge1xuICAgIGlmIChjYXNlcy5pbmRleE9mKHZhbCkgIT09IC0xKSByZXR1cm4gdmFsXG4gICAgcmV0dXJuIGludmFsaWRWYWx1ZShjYXNlcywgdmFsKVxuICB9XG5cbiAgZnVuY3Rpb24gdHJhbnNmb3JtQXJyYXkodHlwOiBhbnksIHZhbDogYW55KTogYW55IHtcbiAgICAvLyB2YWwgbXVzdCBiZSBhbiBhcnJheSB3aXRoIG5vIGludmFsaWQgZWxlbWVudHNcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkodmFsKSkgcmV0dXJuIGludmFsaWRWYWx1ZShcImFycmF5XCIsIHZhbClcbiAgICByZXR1cm4gdmFsLm1hcCgoZWwpID0+IHRyYW5zZm9ybShlbCwgdHlwLCBnZXRQcm9wcykpXG4gIH1cblxuICBmdW5jdGlvbiB0cmFuc2Zvcm1EYXRlKHZhbDogYW55KTogYW55IHtcbiAgICBpZiAodmFsID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gbnVsbFxuICAgIH1cbiAgICBjb25zdCBkID0gbmV3IERhdGUodmFsKVxuICAgIGlmIChpc05hTihkLnZhbHVlT2YoKSkpIHtcbiAgICAgIHJldHVybiBpbnZhbGlkVmFsdWUoXCJEYXRlXCIsIHZhbClcbiAgICB9XG4gICAgcmV0dXJuIGRcbiAgfVxuXG4gIGZ1bmN0aW9uIHRyYW5zZm9ybU9iamVjdChcbiAgICBwcm9wczogeyBbazogc3RyaW5nXTogYW55IH0sXG4gICAgYWRkaXRpb25hbDogYW55LFxuICAgIHZhbDogYW55LFxuICApOiBhbnkge1xuICAgIGlmICh2YWwgPT09IG51bGwgfHwgdHlwZW9mIHZhbCAhPT0gXCJvYmplY3RcIiB8fCBBcnJheS5pc0FycmF5KHZhbCkpIHtcbiAgICAgIHJldHVybiBpbnZhbGlkVmFsdWUoXCJvYmplY3RcIiwgdmFsKVxuICAgIH1cbiAgICBjb25zdCByZXN1bHQ6IGFueSA9IHt9XG4gICAgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMocHJvcHMpLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgY29uc3QgcHJvcCA9IHByb3BzW2tleV1cbiAgICAgIGNvbnN0IHYgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodmFsLCBrZXkpXG4gICAgICAgID8gdmFsW2tleV1cbiAgICAgICAgOiB1bmRlZmluZWRcbiAgICAgIHJlc3VsdFtwcm9wLmtleV0gPSB0cmFuc2Zvcm0odiwgcHJvcC50eXAsIGdldFByb3BzLCBwcm9wLmtleSlcbiAgICB9KVxuICAgIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHZhbCkuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChwcm9wcywga2V5KSkge1xuICAgICAgICByZXN1bHRba2V5XSA9IHRyYW5zZm9ybSh2YWxba2V5XSwgYWRkaXRpb25hbCwgZ2V0UHJvcHMsIGtleSlcbiAgICAgIH1cbiAgICB9KVxuICAgIHJldHVybiByZXN1bHRcbiAgfVxuXG4gIGlmICh0eXAgPT09IFwiYW55XCIpIHJldHVybiB2YWxcbiAgaWYgKHR5cCA9PT0gbnVsbCkge1xuICAgIGlmICh2YWwgPT09IG51bGwpIHJldHVybiB2YWxcbiAgICByZXR1cm4gaW52YWxpZFZhbHVlKHR5cCwgdmFsKVxuICB9XG4gIC8vIGlmICh0eXAgPT09IGZhbHNlKSByZXR1cm4gaW52YWxpZFZhbHVlKHR5cCwgdmFsKVxuICB3aGlsZSAodHlwZW9mIHR5cCA9PT0gXCJvYmplY3RcIiAmJiB0eXAucmVmICE9PSB1bmRlZmluZWQpIHtcbiAgICB0eXAgPSB0eXBlTWFwW3R5cC5yZWZdXG4gIH1cbiAgaWYgKEFycmF5LmlzQXJyYXkodHlwKSkgcmV0dXJuIHRyYW5zZm9ybUVudW0odHlwLCB2YWwpXG4gIGlmICh0eXBlb2YgdHlwID09PSBcIm9iamVjdFwiKSB7XG4gICAgcmV0dXJuIHR5cC5oYXNPd25Qcm9wZXJ0eShcInVuaW9uTWVtYmVyc1wiKVxuICAgICAgPyB0cmFuc2Zvcm1Vbmlvbih0eXAudW5pb25NZW1iZXJzLCB2YWwpXG4gICAgICA6IHR5cC5oYXNPd25Qcm9wZXJ0eShcImFycmF5SXRlbXNcIilcbiAgICAgICAgPyB0cmFuc2Zvcm1BcnJheSh0eXAuYXJyYXlJdGVtcywgdmFsKVxuICAgICAgICA6IHR5cC5oYXNPd25Qcm9wZXJ0eShcInByb3BzXCIpXG4gICAgICAgICAgPyB0cmFuc2Zvcm1PYmplY3QoZ2V0UHJvcHModHlwKSwgdHlwLmFkZGl0aW9uYWwsIHZhbClcbiAgICAgICAgICA6IGludmFsaWRWYWx1ZSh0eXAsIHZhbClcbiAgfVxuICAvLyBOdW1iZXJzIGNhbiBiZSBwYXJzZWQgYnkgRGF0ZSBidXQgc2hvdWxkbid0IGJlLlxuICBpZiAodHlwID09PSBEYXRlICYmIHR5cGVvZiB2YWwgIT09IFwibnVtYmVyXCIpIHJldHVybiB0cmFuc2Zvcm1EYXRlKHZhbClcbiAgcmV0dXJuIHRyYW5zZm9ybVByaW1pdGl2ZSh0eXAsIHZhbClcbn1cblxuZnVuY3Rpb24gY2FzdDxUPih2YWw6IGFueSwgdHlwOiBhbnkpOiBUIHtcbiAgcmV0dXJuIHRyYW5zZm9ybSh2YWwsIHR5cCwganNvblRvSlNQcm9wcylcbn1cblxuZnVuY3Rpb24gdW5jYXN0PFQ+KHZhbDogVCwgdHlwOiBhbnkpOiBhbnkge1xuICByZXR1cm4gdHJhbnNmb3JtKHZhbCwgdHlwLCBqc1RvSlNPTlByb3BzKVxufVxuXG5mdW5jdGlvbiBhKHR5cDogYW55KSB7XG4gIHJldHVybiB7IGFycmF5SXRlbXM6IHR5cCB9XG59XG5cbmZ1bmN0aW9uIHUoLi4udHlwczogYW55W10pIHtcbiAgcmV0dXJuIHsgdW5pb25NZW1iZXJzOiB0eXBzIH1cbn1cblxuZnVuY3Rpb24gbyhwcm9wczogYW55W10sIGFkZGl0aW9uYWw6IGFueSkge1xuICByZXR1cm4geyBwcm9wcywgYWRkaXRpb25hbCB9XG59XG5cbi8vIGZ1bmN0aW9uIG0oYWRkaXRpb25hbDogYW55KSB7XG4vLyAgIHJldHVybiB7IHByb3BzOiBbXSwgYWRkaXRpb25hbCB9XG4vLyB9XG5cbmZ1bmN0aW9uIHIobmFtZTogc3RyaW5nKSB7XG4gIHJldHVybiB7IHJlZjogbmFtZSB9XG59XG5cbmNvbnN0IHR5cGVNYXA6IGFueSA9IHtcbiAgQW1lbmRlbWVudHM6IG8oXG4gICAgW1xuICAgICAge1xuICAgICAgICBqc29uOiBcInRleHRlc0xlZ2lzbGF0aWZzXCIsXG4gICAgICAgIGpzOiBcInRleHRlc0xlZ2lzbGF0aWZzXCIsXG4gICAgICAgIHR5cDogYShyKFwiVGV4dGVMZWdpc2xhdGlmXCIpKSxcbiAgICAgIH0sXG4gICAgXSxcbiAgICBmYWxzZSxcbiAgKSxcbiAgVGV4dGVMZWdpc2xhdGlmOiBvKFxuICAgIFtcbiAgICAgIHsganNvbjogXCJyZWZUZXh0ZUxlZ2lzbGF0aWZcIiwganM6IFwicmVmVGV4dGVMZWdpc2xhdGlmXCIsIHR5cDogXCJcIiB9LFxuICAgICAgeyBqc29uOiBcImFtZW5kZW1lbnRzXCIsIGpzOiBcImFtZW5kZW1lbnRzXCIsIHR5cDogcihcIkFtZW5kZW1lbnRzQ2xhc3NcIikgfSxcbiAgICBdLFxuICAgIGZhbHNlLFxuICApLFxuICBBbWVuZGVtZW50c0NsYXNzOiBvKFxuICAgIFt7IGpzb246IFwiYW1lbmRlbWVudFwiLCBqczogXCJhbWVuZGVtZW50XCIsIHR5cDogYShyKFwiQW1lbmRlbWVudFwiKSkgfV0sXG4gICAgZmFsc2UsXG4gICksXG4gIEFtZW5kZW1lbnRXcmFwcGVyOiBvKFxuICAgIFt7IGpzb246IFwiYW1lbmRlbWVudFwiLCBqczogXCJhbWVuZGVtZW50XCIsIHR5cDogcihcIkFtZW5kZW1lbnRcIikgfV0sXG4gICAgZmFsc2UsXG4gICksXG4gIEFtZW5kZW1lbnQ6IG8oXG4gICAgW1xuICAgICAgeyBqc29uOiBcInVpZFwiLCBqczogXCJ1aWRcIiwgdHlwOiBcIlwiIH0sXG4gICAgICB7IGpzb246IFwiY2hyb25vdGFnXCIsIGpzOiBcImNocm9ub3RhZ1wiLCB0eXA6IFwiXCIgfSxcbiAgICAgIHsganNvbjogXCJsZWdpc2xhdHVyZVwiLCBqczogXCJsZWdpc2xhdHVyZVwiLCB0eXA6IFwiXCIgfSxcbiAgICAgIHtcbiAgICAgICAganNvbjogXCJpZGVudGlmaWNhdGlvblwiLFxuICAgICAgICBqczogXCJpZGVudGlmaWNhdGlvblwiLFxuICAgICAgICB0eXA6IHIoXCJJZGVudGlmaWNhdGlvblwiKSxcbiAgICAgIH0sXG4gICAgICB7IGpzb246IFwiZXhhbWVuUmVmXCIsIGpzOiBcImV4YW1lblJlZlwiLCB0eXA6IFwiXCIgfSxcbiAgICAgIHsganNvbjogXCJ0ZXh0ZUxlZ2lzbGF0aWZSZWZcIiwganM6IFwidGV4dGVMZWdpc2xhdGlmUmVmXCIsIHR5cDogXCJcIiB9LFxuICAgICAgeyBqc29uOiBcInRyaUFtZW5kZW1lbnRcIiwganM6IFwidHJpQW1lbmRlbWVudFwiLCB0eXA6IHUodW5kZWZpbmVkLCBcIlwiKSB9LFxuICAgICAge1xuICAgICAgICBqc29uOiBcImNhcmRpbmFsaXRlQW1kdE11bHRpcGxlc1wiLFxuICAgICAgICBqczogXCJjYXJkaW5hbGl0ZUFtZHRNdWx0aXBsZXNcIixcbiAgICAgICAgdHlwOiB1KHVuZGVmaW5lZCwgXCJcIiksXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBqc29uOiBcImFtZW5kZW1lbnRQYXJlbnRSZWZcIixcbiAgICAgICAganM6IFwiYW1lbmRlbWVudFBhcmVudFJlZlwiLFxuICAgICAgICB0eXA6IHUodW5kZWZpbmVkLCBcIlwiKSxcbiAgICAgIH0sXG4gICAgICB7IGpzb246IFwic2lnbmF0YWlyZXNcIiwganM6IFwic2lnbmF0YWlyZXNcIiwgdHlwOiByKFwiU2lnbmF0YWlyZXNcIikgfSxcbiAgICAgIHtcbiAgICAgICAganNvbjogXCJwb2ludGV1ckZyYWdtZW50VGV4dGVcIixcbiAgICAgICAganM6IFwicG9pbnRldXJGcmFnbWVudFRleHRlXCIsXG4gICAgICAgIHR5cDogcihcIlBvaW50ZXVyRnJhZ21lbnRUZXh0ZVwiKSxcbiAgICAgIH0sXG4gICAgICB7IGpzb246IFwiY29ycHNcIiwganM6IFwiY29ycHNcIiwgdHlwOiB1KHVuZGVmaW5lZCwgcihcIkNvcnBzXCIpKSB9LFxuICAgICAgeyBqc29uOiBcImN5Y2xlRGVWaWVcIiwganM6IFwiY3ljbGVEZVZpZVwiLCB0eXA6IHIoXCJDeWNsZURlVmllXCIpIH0sXG4gICAgICB7XG4gICAgICAgIGpzb246IFwicmVwcmVzZW50YXRpb25cIixcbiAgICAgICAganM6IFwicmVwcmVzZW50YXRpb25cIixcbiAgICAgICAgdHlwOiB1KHVuZGVmaW5lZCwgcihcIlJlcHJlc2VudGF0aW9uXCIpKSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGpzb246IFwic2VhbmNlRGlzY3Vzc2lvblJlZlwiLFxuICAgICAgICBqczogXCJzZWFuY2VEaXNjdXNzaW9uUmVmXCIsXG4gICAgICAgIHR5cDogdSh1bmRlZmluZWQsIFwiXCIpLFxuICAgICAgfSxcbiAgICAgIHsganNvbjogXCJhcnRpY2xlOTlcIiwganM6IFwiYXJ0aWNsZTk5XCIsIHR5cDogXCJcIiB9LFxuICAgICAge1xuICAgICAgICBqc29uOiBcImxvaVJlZmVyZW5jZVwiLFxuICAgICAgICBqczogXCJsb2lSZWZlcmVuY2VcIixcbiAgICAgICAgdHlwOiB1KHVuZGVmaW5lZCwgcihcIkxvaVJlZmVyZW5jZVwiKSksXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBqc29uOiBcImRpc2N1c3Npb25Db21tdW5lXCIsXG4gICAgICAgIGpzOiBcImRpc2N1c3Npb25Db21tdW5lXCIsXG4gICAgICAgIHR5cDogdSh1bmRlZmluZWQsIHIoXCJEaXNjdXNzaW9uXCIpKSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGpzb246IFwiZGlzY3Vzc2lvbklkZW50aXF1ZVwiLFxuICAgICAgICBqczogXCJkaXNjdXNzaW9uSWRlbnRpcXVlXCIsXG4gICAgICAgIHR5cDogdSh1bmRlZmluZWQsIHIoXCJEaXNjdXNzaW9uXCIpKSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGpzb246IFwiYWNjb3JkR291dmVybmVtZW50RGVwb3RIb3JzRGVsYWlcIixcbiAgICAgICAganM6IFwiYWNjb3JkR291dmVybmVtZW50RGVwb3RIb3JzRGVsYWlcIixcbiAgICAgICAgdHlwOiByKFwiQWNjb3JkR291dmVybmVtZW50RGVwb3RIb3JzRGVsYWlcIiksXG4gICAgICB9LFxuICAgIF0sXG4gICAgZmFsc2UsXG4gICksXG4gIENvcnBzOiBvKFxuICAgIFtcbiAgICAgIHtcbiAgICAgICAganNvbjogXCJjYXJ0b3VjaGVJbmZvcm1hdGlmXCIsXG4gICAgICAgIGpzOiBcImNhcnRvdWNoZUluZm9ybWF0aWZcIixcbiAgICAgICAgdHlwOiB1KHVuZGVmaW5lZCwgXCJcIiksXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBqc29uOiBcImNvbnRlbnVBdXRldXJcIixcbiAgICAgICAganM6IFwiY29udGVudUF1dGV1clwiLFxuICAgICAgICB0eXA6IHUodW5kZWZpbmVkLCByKFwiQ29udGVudUF1dGV1clwiKSksXG4gICAgICB9LFxuICAgIF0sXG4gICAgZmFsc2UsXG4gICksXG4gIENvbnRlbnVBdXRldXI6IG8oXG4gICAgW1xuICAgICAgeyBqc29uOiBcImRpc3Bvc2l0aWZcIiwganM6IFwiZGlzcG9zaXRpZlwiLCB0eXA6IHUodW5kZWZpbmVkLCBcIlwiKSB9LFxuICAgICAge1xuICAgICAgICBqc29uOiBcImF2YW50QXBwZWxcIixcbiAgICAgICAganM6IFwiYXZhbnRBcHBlbFwiLFxuICAgICAgICB0eXA6IHUodW5kZWZpbmVkLCByKFwiQXZhbnRBcHBlbFwiKSksXG4gICAgICB9LFxuICAgICAgeyBqc29uOiBcImV4cG9zZVNvbW1haXJlXCIsIGpzOiBcImV4cG9zZVNvbW1haXJlXCIsIHR5cDogdSh1bmRlZmluZWQsIFwiXCIpIH0sXG4gICAgICB7XG4gICAgICAgIGpzb246IFwiZGlzcG9zaXRpZkFtZHRDcmVkaXRQTEZcIixcbiAgICAgICAganM6IFwiZGlzcG9zaXRpZkFtZHRDcmVkaXRQTEZcIixcbiAgICAgICAgdHlwOiB1KHVuZGVmaW5lZCwgcihcIkRpc3Bvc2l0aWZBbWR0Q3JlZGl0UExGXCIpKSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGpzb246IFwiZGlzcG9zaXRpZkFtZHRDcmVkaXRQTEZSXCIsXG4gICAgICAgIGpzOiBcImRpc3Bvc2l0aWZBbWR0Q3JlZGl0UExGUlwiLFxuICAgICAgICB0eXA6IHUodW5kZWZpbmVkLCByKFwiRGlzcG9zaXRpZkFtZHRDcmVkaXRQTEZSXCIpKSxcbiAgICAgIH0sXG4gICAgXSxcbiAgICBmYWxzZSxcbiAgKSxcbiAgQXZhbnRBcHBlbDogbyhcbiAgICBbXG4gICAgICB7IGpzb246IFwiZGlzcG9zaXRpZlwiLCBqczogXCJkaXNwb3NpdGlmXCIsIHR5cDogdSh1bmRlZmluZWQsIFwiXCIpIH0sXG4gICAgICB7XG4gICAgICAgIGpzb246IFwiZGlzcG9zaXRpZkFtZHRDcmVkaXRQTEZcIixcbiAgICAgICAganM6IFwiZGlzcG9zaXRpZkFtZHRDcmVkaXRQTEZcIixcbiAgICAgICAgdHlwOiB1KHVuZGVmaW5lZCwgcihcIkRpc3Bvc2l0aWZBbWR0Q3JlZGl0UExGXCIpKSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGpzb246IFwiZGlzcG9zaXRpZkFtZHRDcmVkaXRQTEZSXCIsXG4gICAgICAgIGpzOiBcImRpc3Bvc2l0aWZBbWR0Q3JlZGl0UExGUlwiLFxuICAgICAgICB0eXA6IHUodW5kZWZpbmVkLCByKFwiRGlzcG9zaXRpZkFtZHRDcmVkaXRQTEZSXCIpKSxcbiAgICAgIH0sXG4gICAgXSxcbiAgICBmYWxzZSxcbiAgKSxcbiAgRGlzcG9zaXRpZkFtZHRDcmVkaXRQTEY6IG8oXG4gICAgW1xuICAgICAge1xuICAgICAgICBqc29uOiBcImxpc3RlUHJvZ3JhbW1lc1wiLFxuICAgICAgICBqczogXCJsaXN0ZVByb2dyYW1tZXNcIixcbiAgICAgICAgdHlwOiB1KHVuZGVmaW5lZCwgYShyKFwiUHJvZ3JhbW1lUGxmXCIpKSksXG4gICAgICB9LFxuICAgICAgeyBqc29uOiBcInNvbGRlQUVcIiwganM6IFwic29sZGVBRVwiLCB0eXA6IHUodW5kZWZpbmVkLCBcIlwiKSB9LFxuICAgICAgeyBqc29uOiBcInNvbGRlQ1BcIiwganM6IFwic29sZGVDUFwiLCB0eXA6IHUodW5kZWZpbmVkLCBcIlwiKSB9LFxuICAgICAgeyBqc29uOiBcImNwRWdhbEFlXCIsIGpzOiBcImNwRWdhbEFlXCIsIHR5cDogXCJcIiB9LFxuICAgIF0sXG4gICAgZmFsc2UsXG4gICksXG4gIFByb2dyYW1tZVBsZjogbyhcbiAgICBbXG4gICAgICB7IGpzb246IFwibGliZWxsZVwiLCBqczogXCJsaWJlbGxlXCIsIHR5cDogXCJcIiB9LFxuICAgICAgeyBqc29uOiBcInByb2dyYW1tZVJlZlwiLCBqczogXCJwcm9ncmFtbWVSZWZcIiwgdHlwOiBcIlwiIH0sXG4gICAgICB7IGpzb2