@tricoteuses/assemblee
Version:
Retrieve, clean up & handle French Assemblée nationale's open data
562 lines (559 loc) • 64.9 kB
JavaScript
// To parse this data:
//
// import { Convert, ComptesRendus } from "./file";
//
// const compteRendu = Convert.toComptesRendus(json);
//
// These functions will throw an error if the JSON doesn't
// match the expected interface, even if the JSON is valid.
export let Decision = /*#__PURE__*/function (Decision) {
Decision["AdoptionAmendementMainLev\xE9eAdt"] = "ADOPTION amendement (main lev\xE9e) adt";
Decision["AdoptionDUnArticleVote\xC0MainLev\xE9e"] = "ADOPTION d\u2019un article (vote \xE0 main lev\xE9e)";
Decision["AdoptionDUnSousAmendementMainLev\xE9eSsAdt"] = "ADOPTION d\u2019un sous-amendement (main lev\xE9e) ss-adt";
Decision["AdoptionDePlusieursAmendementsMainLev\xE9eAdts"] = "ADOPTION de plusieurs amendements (main lev\xE9e) adts";
Decision["AdoptionDePlusieursSousAmendementsMainLev\xE9eSsAdts"] = "ADOPTION de plusieurs sous-amendements (main lev\xE9e) ss-adts";
Decision["Empty"] = "";
Decision["RejetDUnAmendementMainLev\xE9eAdt"] = "REJET d\u2019un amendement (main lev\xE9e) adt";
Decision["RejetDUnArticleVote\xC0MainLev\xE9e"] = "REJET d\u2019un article (vote \xE0 main lev\xE9e)";
Decision["RejetDUnSousAmendementMainLev\xE9eSsAdt"] = "REJET d\u2019un sous-amendement (main lev\xE9e) ss-adt";
Decision["RejetDePlusieursAmendementsMainLev\xE9eAdts"] = "REJET de plusieurs amendements (main lev\xE9e) adts";
Decision["RejetDePlusieursSousAmendementsMainLev\xE9eSsAdts"] = "REJET de plusieurs sous-amendements (main lev\xE9e) ss-adts";
Decision["RejetMotionDeRejetPr\xE9alableMainLev\xE9e"] = "REJET motion de rejet pr\xE9alable (main lev\xE9e)";
return Decision;
}({});
// Converts JSON strings to/from your types
// and asserts the results of JSON.parse at runtime
export class Convert {
static toComptesRendus(json) {
return cast(JSON.parse(json), r("ComptesRendus"));
}
static comptesRendusToJson(value) {
return JSON.stringify(uncast(value, r("ComptesRendus")), null, 2);
}
static toCompteRendu(json) {
return cast(JSON.parse(json), r("CompteRendu"));
}
static compteRenduToJson(value) {
return JSON.stringify(uncast(value, r("CompteRendu")), null, 2);
}
}
function invalidValue(typ, val, key, parent = "") {
const prettyTyp = prettyTypeName(typ);
const parentText = parent ? ` on ${parent}` : "";
const keyText = key ? ` for key "${key}"` : "";
throw Error(`Invalid value${keyText}${parentText}. Expected ${prettyTyp} but got ${JSON.stringify(val)}`);
}
function prettyTypeName(typ) {
if (Array.isArray(typ)) {
if (typ.length === 2 && typ[0] === undefined) {
return `an optional ${prettyTypeName(typ[1])}`;
} else {
return `one of [${typ.map(a => {
return prettyTypeName(a);
}).join(", ")}]`;
}
} else if (typeof typ === "object" && typ.literal !== undefined) {
return typ.literal;
} else {
return typeof 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 = "", parent = "") {
function transformPrimitive(typ, val) {
if (typeof typ === typeof val) return val;
return invalidValue(typ, val, key, parent);
}
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, key, parent);
}
function transformEnum(cases, val) {
if (cases.indexOf(val) !== -1) return val;
return invalidValue(cases.map(a => {
return l(a);
}), val, key, parent);
}
function transformArray(typ, val) {
// val must be an array with no invalid elements
if (!Array.isArray(val)) return invalidValue(l("array"), val, key, parent);
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(l("Date"), val, key, parent);
}
return d;
}
function transformObject(props, additional, val) {
if (val === null || typeof val !== "object" || Array.isArray(val)) {
return invalidValue(l(ref || "object"), val, key, parent);
}
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, key, ref);
});
Object.getOwnPropertyNames(val).forEach(key => {
if (!Object.prototype.hasOwnProperty.call(props, key)) {
result[key] = transform(val[key], additional, getProps, key, ref);
}
});
return result;
}
if (typ === "any") return val;
if (typ === null) {
if (val === null) return val;
return invalidValue(typ, val, key, parent);
}
if (typ === false) return invalidValue(typ, val, key, parent);
let ref = undefined;
while (typeof typ === "object" && typ.ref !== undefined) {
ref = typ.ref;
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, key, parent);
}
// 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 l(typ) {
return {
literal: typ
};
}
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 = {
ComptesRendus: o([{
json: "comptesRendus",
js: "comptesRendus",
typ: a(r("CompteRendu"))
}], false),
CompteRendu: o([{
json: "schemaVersion",
js: "schemaVersion",
typ: u(undefined, "")
}, {
json: "uid",
js: "uid",
typ: u(undefined, "")
}, {
json: "seanceRef",
js: "seanceRef",
typ: ""
}, {
json: "sessionRef",
js: "sessionRef",
typ: ""
}, {
json: "metadonnees",
js: "metadonnees",
typ: r("Metadonnees")
}, {
json: "contenu",
js: "contenu",
typ: r("Contenu")
}], false),
Contenu: o([{
json: "quantiemes",
js: "quantiemes",
typ: r("Quantiemes")
}, {
json: "ouvertureSeance",
js: "ouvertureSeance",
typ: u(a(r("Point")), r("Point"))
}, {
json: "point",
js: "point",
typ: u(a(r("Point")), r("Point"))
}, {
json: "finSeance",
js: "finSeance",
typ: u(undefined, r("FinSeance"))
}, {
json: "paragraphe",
js: "paragraphe",
typ: u(undefined, a(r("Point")))
}], false),
FinSeance: o([{
json: "point",
js: "point",
typ: r("Point")
}], false),
Orateurs: o([{
json: "orateur",
js: "orateur",
typ: u(a(r("OrateurElement")), r("OrateurElement"))
}], false),
OrateurElement: o([{
json: "nom",
js: "nom",
typ: u(undefined, "")
}, {
json: "id",
js: "id",
typ: u(undefined, "")
}, {
json: "qualite",
js: "qualite",
typ: u(undefined, "")
}], false),
Texte: o([{
json: "_",
js: "_",
typ: u(undefined, "")
}, {
json: "id_syceron",
js: "id_syceron",
typ: u(undefined, "")
}, {
json: "stime",
js: "stime",
typ: u(undefined, "")
}, {
json: "sup",
js: "sup",
typ: u(undefined, "")
}, {
json: "lienAdt",
js: "lienAdt",
typ: u(undefined, u(a(r("Texte")), r("Texte")))
}], false),
Point: o([{
json: "nivpoint",
js: "nivpoint",
typ: u(undefined, "")
}, {
json: "valeur_ptsodj",
js: "valeur_ptsodj",
typ: u(undefined, "")
}, {
json: "ordinal_prise",
js: "ordinal_prise",
typ: u(undefined, "")
}, {
json: "id_preparation",
js: "id_preparation",
typ: u(undefined, "")
}, {
json: "ordre_absolu_seance",
js: "ordre_absolu_seance",
typ: u(undefined, "")
}, {
json: "code_grammaire",
js: "code_grammaire",
typ: u(undefined, "")
}, {
json: "code_style",
js: "code_style",
typ: u(undefined, "")
}, {
json: "code_parole",
js: "code_parole",
typ: u(undefined, "")
}, {
json: "sommaire",
js: "sommaire",
typ: u(undefined, "")
}, {
json: "id_syceron",
js: "id_syceron",
typ: u(undefined, "")
}, {
json: "valeur",
js: "valeur",
typ: u(undefined, "")
}, {
json: "orateurs",
js: "orateurs",
typ: u(r("Orateurs"), u("", undefined))
}, {
json: "texte",
js: "texte",
typ: u(r("Texte"), u("", undefined))
}, {
json: "paragraphe",
js: "paragraphe",
typ: u(undefined, u(a(r("Point")), r("Point")))
}, {
json: "interExtraction",
js: "interExtraction",
typ: u(undefined, u(a(r("Point")), r("Point")))
}, {
json: "point",
js: "point",
typ: u(undefined, u(a(r("Point")), r("Point")))
}, {
json: "structure",
js: "structure",
typ: u(undefined, "")
}, {
json: "id_acteur",
js: "id_acteur",
typ: u(undefined, "")
}, {
json: "id_mandat",
js: "id_mandat",
typ: u(undefined, "")
}, {
json: "id_nomination_oe",
js: "id_nomination_oe",
typ: u(undefined, "")
}, {
json: "id_nomination_op",
js: "id_nomination_op",
typ: u(undefined, "")
}, {
json: "orateur",
js: "orateur",
typ: u(undefined, "")
}, {
json: "bibard",
js: "bibard",
typ: u(undefined, "")
}, {
json: "art",
js: "art",
typ: u(undefined, "")
}, {
json: "adt",
js: "adt",
typ: u(undefined, "")
}, {
json: "ssadt",
js: "ssadt",
typ: u(undefined, "")
}, {
json: "roledebat",
js: "roledebat",
typ: u(undefined, "")
}, {
json: "type_debat",
js: "type_debat",
typ: u(undefined, "")
}, {
json: "changementPresidence",
js: "changementPresidence",
typ: u(undefined, r("Point"))
}, {
json: "decision",
js: "decision",
typ: u(undefined, r("Decision"))
}, {
json: "ouvertureSeance",
js: "ouvertureSeance",
typ: u(undefined, r("Point"))
}, {
json: "nom_orateur",
js: "nom_orateur",
typ: u(undefined, "")
}, {
json: "qualite",
js: "qualite",
typ: u(undefined, "")
}], false),
Quantiemes: o([{
json: "journee",
js: "journee",
typ: ""
}, {
json: "session",
js: "session",
typ: ""
}], false),
Metadonnees: o([{
json: "dateSeance",
js: "dateSeance",
typ: ""
}, {
json: "dateSeanceJour",
js: "dateSeanceJour",
typ: ""
}, {
json: "numSeanceJour",
js: "numSeanceJour",
typ: ""
}, {
json: "numSeance",
js: "numSeance",
typ: ""
}, {
json: "typeAssemblee",
js: "typeAssemblee",
typ: ""
}, {
json: "legislature",
js: "legislature",
typ: ""
}, {
json: "session",
js: "session",
typ: ""
}, {
json: "nomFichierJo",
js: "nomFichierJo",
typ: ""
}, {
json: "validite",
js: "validite",
typ: ""
}, {
json: "etat",
js: "etat",
typ: ""
}, {
json: "diffusion",
js: "diffusion",
typ: ""
}, {
json: "version",
js: "version",
typ: ""
}, {
json: "environnement",
js: "environnement",
typ: ""
}, {
json: "heureGeneration",
js: "heureGeneration",
typ: Date
}, {
json: "sommaire",
js: "sommaire",
typ: r("Sommaire")
}], false),
Sommaire: o([{
json: "presidentSeance",
js: "presidentSeance",
typ: r("Texte")
}, {
json: "sommaire1",
js: "sommaire1",
typ: u(a(r("SommaireElement")), r("SommaireElement"))
}, {
json: "sommaire3",
js: "sommaire3",
typ: u(undefined, u(a(r("SommaireElement")), r("SommaireElement")))
}, {
json: "sommaire2",
js: "sommaire2",
typ: u(undefined, u(a(r("SommaireElement")), r("SommaireElement")))
}, {
json: "para",
js: "para",
typ: u(undefined, u(a(r("Texte")), r("Texte")))
}], false),
SommaireElement: o([{
json: "valeur_pts_odj",
js: "valeur_pts_odj",
typ: u(undefined, "")
}, {
json: "titreStruct",
js: "titreStruct",
typ: u(undefined, r("TitreStruct"))
}, {
json: "para",
js: "para",
typ: u(undefined, u(a(u(r("Texte"), "")), r("Texte")))
}, {
json: "sommaire2",
js: "sommaire2",
typ: u(undefined, u(a(r("SommaireElement")), r("SommaireElement")))
}, {
json: "sommaire3",
js: "sommaire3",
typ: u(undefined, u(a(r("SommaireElement")), r("SommaireElement")))
}, {
json: "presidentSeance",
js: "presidentSeance",
typ: u(undefined, u(a(r("Texte")), r("Texte")))
}, {
json: "type_debat",
js: "type_debat",
typ: u(undefined, "")
}], false),
TitreStruct: o([{
json: "id_syceron",
js: "id_syceron",
typ: ""
}, {
json: "intitule",
js: "intitule",
typ: u(undefined, "")
}, {
json: "sousIntitule",
js: "sousIntitule",
typ: u(undefined, "")
}, {
json: "type_debat",
js: "type_debat",
typ: u(undefined, "")
}], false),
Decision: ["ADOPTION amendement (main levée) adt", "ADOPTION d’un article (vote à main levée)", "ADOPTION d’un sous-amendement (main levée) ss-adt", "ADOPTION de plusieurs amendements (main levée) adts", "ADOPTION de plusieurs sous-amendements (main levée) ss-adts", "", "REJET d’un amendement (main levée) adt", "REJET d’un article (vote à main levée)", "REJET d’un sous-amendement (main levée) ss-adt", "REJET de plusieurs amendements (main levée) adts", "REJET de plusieurs sous-amendements (main levée) ss-adts", "REJET motion de rejet préalable (main levée)"]
};
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJEZWNpc2lvbiIsIkNvbnZlcnQiLCJ0b0NvbXB0ZXNSZW5kdXMiLCJqc29uIiwiY2FzdCIsIkpTT04iLCJwYXJzZSIsInIiLCJjb21wdGVzUmVuZHVzVG9Kc29uIiwidmFsdWUiLCJzdHJpbmdpZnkiLCJ1bmNhc3QiLCJ0b0NvbXB0ZVJlbmR1IiwiY29tcHRlUmVuZHVUb0pzb24iLCJpbnZhbGlkVmFsdWUiLCJ0eXAiLCJ2YWwiLCJrZXkiLCJwYXJlbnQiLCJwcmV0dHlUeXAiLCJwcmV0dHlUeXBlTmFtZSIsInBhcmVudFRleHQiLCJrZXlUZXh0IiwiRXJyb3IiLCJBcnJheSIsImlzQXJyYXkiLCJsZW5ndGgiLCJ1bmRlZmluZWQiLCJtYXAiLCJhIiwiam9pbiIsImxpdGVyYWwiLCJqc29uVG9KU1Byb3BzIiwianNvblRvSlMiLCJwcm9wcyIsImZvckVhY2giLCJwIiwianMiLCJqc1RvSlNPTlByb3BzIiwianNUb0pTT04iLCJ0cmFuc2Zvcm0iLCJnZXRQcm9wcyIsInRyYW5zZm9ybVByaW1pdGl2ZSIsInRyYW5zZm9ybVVuaW9uIiwidHlwcyIsImwiLCJpIiwiXyIsInRyYW5zZm9ybUVudW0iLCJjYXNlcyIsImluZGV4T2YiLCJ0cmFuc2Zvcm1BcnJheSIsImVsIiwidHJhbnNmb3JtRGF0ZSIsImQiLCJEYXRlIiwiaXNOYU4iLCJ2YWx1ZU9mIiwidHJhbnNmb3JtT2JqZWN0IiwiYWRkaXRpb25hbCIsInJlZiIsInJlc3VsdCIsIk9iamVjdCIsImdldE93blByb3BlcnR5TmFtZXMiLCJwcm9wIiwidiIsInByb3RvdHlwZSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsInR5cGVNYXAiLCJ1bmlvbk1lbWJlcnMiLCJhcnJheUl0ZW1zIiwidSIsIm8iLCJuYW1lIiwiQ29tcHRlc1JlbmR1cyIsIkNvbXB0ZVJlbmR1IiwiQ29udGVudSIsIkZpblNlYW5jZSIsIk9yYXRldXJzIiwiT3JhdGV1ckVsZW1lbnQiLCJUZXh0ZSIsIlBvaW50IiwiUXVhbnRpZW1lcyIsIk1ldGFkb25uZWVzIiwiU29tbWFpcmUiLCJTb21tYWlyZUVsZW1lbnQiLCJUaXRyZVN0cnVjdCJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90eXBlcy9kZWJhdHMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gVG8gcGFyc2UgdGhpcyBkYXRhOlxuLy9cbi8vICAgaW1wb3J0IHsgQ29udmVydCwgQ29tcHRlc1JlbmR1cyB9IGZyb20gXCIuL2ZpbGVcIjtcbi8vXG4vLyAgIGNvbnN0IGNvbXB0ZVJlbmR1ID0gQ29udmVydC50b0NvbXB0ZXNSZW5kdXMoanNvbik7XG4vL1xuLy8gVGhlc2UgZnVuY3Rpb25zIHdpbGwgdGhyb3cgYW4gZXJyb3IgaWYgdGhlIEpTT04gZG9lc24ndFxuLy8gbWF0Y2ggdGhlIGV4cGVjdGVkIGludGVyZmFjZSwgZXZlbiBpZiB0aGUgSlNPTiBpcyB2YWxpZC5cblxuZXhwb3J0IGludGVyZmFjZSBDb21wdGVzUmVuZHVzIHtcbiAgY29tcHRlc1JlbmR1czogQ29tcHRlUmVuZHVbXVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIENvbXB0ZVJlbmR1IHtcbiAgc2NoZW1hVmVyc2lvbj86IHN0cmluZ1xuICB1aWQ6IHN0cmluZ1xuICBzZWFuY2VSZWY6IHN0cmluZ1xuICBzZXNzaW9uUmVmOiBzdHJpbmdcbiAgbWV0YWRvbm5lZXM6IE1ldGFkb25uZWVzXG4gIGNvbnRlbnU6IENvbnRlbnVcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDb250ZW51IHtcbiAgcXVhbnRpZW1lczogUXVhbnRpZW1lc1xuICBvdXZlcnR1cmVTZWFuY2U6IFBvaW50W10gfCBQb2ludFxuICBwb2ludDogUG9pbnRbXSB8IFBvaW50XG4gIGZpblNlYW5jZT86IEZpblNlYW5jZVxuICBwYXJhZ3JhcGhlPzogUG9pbnRbXVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIEZpblNlYW5jZSB7XG4gIHBvaW50OiBQb2ludFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIE9yYXRldXJzIHtcbiAgb3JhdGV1cjogT3JhdGV1ckVsZW1lbnRbXSB8IE9yYXRldXJFbGVtZW50XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgT3JhdGV1ckVsZW1lbnQge1xuICBub206IHN0cmluZyB8IHVuZGVmaW5lZFxuICBpZDogc3RyaW5nIHwgdW5kZWZpbmVkXG4gIHF1YWxpdGU6IHN0cmluZyB8IHVuZGVmaW5lZFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRleHRlIHtcbiAgXz86IHN0cmluZ1xuICBpZF9zeWNlcm9uPzogc3RyaW5nXG4gIHN0aW1lPzogc3RyaW5nXG4gIHN1cD86IHN0cmluZ1xuICBsaWVuQWR0PzogVGV4dGVbXSB8IFRleHRlXG59XG5cbmV4cG9ydCBlbnVtIERlY2lzaW9uIHtcbiAgQWRvcHRpb25BbWVuZGVtZW50TWFpbkxldsOpZUFkdCA9IFwiQURPUFRJT04gYW1lbmRlbWVudCAobWFpbiBsZXbDqWUpIGFkdFwiLFxuICBBZG9wdGlvbkRVbkFydGljbGVWb3Rlw4BNYWluTGV2w6llID0gXCJBRE9QVElPTiBk4oCZdW4gYXJ0aWNsZSAodm90ZSDDoCBtYWluIGxldsOpZSlcIixcbiAgQWRvcHRpb25EVW5Tb3VzQW1lbmRlbWVudE1haW5MZXbDqWVTc0FkdCA9IFwiQURPUFRJT04gZOKAmXVuIHNvdXMtYW1lbmRlbWVudCAobWFpbiBsZXbDqWUpIHNzLWFkdFwiLFxuICBBZG9wdGlvbkRlUGx1c2lldXJzQW1lbmRlbWVudHNNYWluTGV2w6llQWR0cyA9IFwiQURPUFRJT04gZGUgcGx1c2lldXJzIGFtZW5kZW1lbnRzIChtYWluIGxldsOpZSkgYWR0c1wiLFxuICBBZG9wdGlvbkRlUGx1c2lldXJzU291c0FtZW5kZW1lbnRzTWFpbkxldsOpZVNzQWR0cyA9IFwiQURPUFRJT04gZGUgcGx1c2lldXJzIHNvdXMtYW1lbmRlbWVudHMgKG1haW4gbGV2w6llKSBzcy1hZHRzXCIsXG4gIEVtcHR5ID0gXCJcIixcbiAgUmVqZXREVW5BbWVuZGVtZW50TWFpbkxldsOpZUFkdCA9IFwiUkVKRVQgZOKAmXVuIGFtZW5kZW1lbnQgKG1haW4gbGV2w6llKSBhZHRcIixcbiAgUmVqZXREVW5BcnRpY2xlVm90ZcOATWFpbkxldsOpZSA9IFwiUkVKRVQgZOKAmXVuIGFydGljbGUgKHZvdGUgw6AgbWFpbiBsZXbDqWUpXCIsXG4gIFJlamV0RFVuU291c0FtZW5kZW1lbnRNYWluTGV2w6llU3NBZHQgPSBcIlJFSkVUIGTigJl1biBzb3VzLWFtZW5kZW1lbnQgKG1haW4gbGV2w6llKSBzcy1hZHRcIixcbiAgUmVqZXREZVBsdXNpZXVyc0FtZW5kZW1lbnRzTWFpbkxldsOpZUFkdHMgPSBcIlJFSkVUIGRlIHBsdXNpZXVycyBhbWVuZGVtZW50cyAobWFpbiBsZXbDqWUpIGFkdHNcIixcbiAgUmVqZXREZVBsdXNpZXVyc1NvdXNBbWVuZGVtZW50c01haW5MZXbDqWVTc0FkdHMgPSBcIlJFSkVUIGRlIHBsdXNpZXVycyBzb3VzLWFtZW5kZW1lbnRzIChtYWluIGxldsOpZSkgc3MtYWR0c1wiLFxuICBSZWpldE1vdGlvbkRlUmVqZXRQcsOpYWxhYmxlTWFpbkxldsOpZSA9IFwiUkVKRVQgbW90aW9uIGRlIHJlamV0IHByw6lhbGFibGUgKG1haW4gbGV2w6llKVwiLFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFBvaW50IHtcbiAgbml2cG9pbnQ/OiBzdHJpbmdcbiAgdmFsZXVyX3B0c29kaj86IHN0cmluZ1xuICBvcmRpbmFsX3ByaXNlPzogc3RyaW5nXG4gIGlkX3ByZXBhcmF0aW9uPzogc3RyaW5nXG4gIG9yZHJlX2Fic29sdV9zZWFuY2U/OiBzdHJpbmdcbiAgY29kZV9ncmFtbWFpcmU/OiBzdHJpbmdcbiAgY29kZV9zdHlsZT86IHN0cmluZ1xuICBjb2RlX3Bhcm9sZT86IHN0cmluZ1xuICBzb21tYWlyZT86IHN0cmluZ1xuICBpZF9zeWNlcm9uPzogc3RyaW5nXG4gIHZhbGV1cj86IHN0cmluZ1xuICBvcmF0ZXVycz86IE9yYXRldXJzIHwgc3RyaW5nXG4gIHRleHRlPzogVGV4dGUgfCBzdHJpbmdcbiAgcGFyYWdyYXBoZT86IFBvaW50W10gfCBQb2ludFxuICBpbnRlckV4dHJhY3Rpb24/OiBQb2ludFtdIHwgUG9pbnRcbiAgcG9pbnQ/OiBQb2ludFtdIHwgUG9pbnRcbiAgc3RydWN0dXJlPzogc3RyaW5nXG4gIGlkX2FjdGV1cj86IHN0cmluZ1xuICBpZF9tYW5kYXQ/OiBzdHJpbmdcbiAgaWRfbm9taW5hdGlvbl9vZT86IHN0cmluZ1xuICBpZF9ub21pbmF0aW9uX29wPzogc3RyaW5nXG4gIG9yYXRldXI/OiBzdHJpbmdcbiAgYmliYXJkPzogc3RyaW5nXG4gIGFydD86IHN0cmluZ1xuICBhZHQ/OiBzdHJpbmdcbiAgc3NhZHQ/OiBzdHJpbmdcbiAgcm9sZWRlYmF0Pzogc3RyaW5nXG4gIGNoYW5nZW1lbnRQcmVzaWRlbmNlPzogUG9pbnRcbiAgdHlwZV9kZWJhdD86IHN0cmluZ1xuICBkZWNpc2lvbj86IERlY2lzaW9uXG4gIG91dmVydHVyZVNlYW5jZT86IFBvaW50XG4gIG5vbV9vcmF0ZXVyPzogc3RyaW5nXG4gIHF1YWxpdGU/OiBzdHJpbmdcbn1cblxuZXhwb3J0IGludGVyZmFjZSBRdWFudGllbWVzIHtcbiAgam91cm5lZTogc3RyaW5nXG4gIHNlc3Npb246IHN0cmluZ1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE1ldGFkb25uZWVzIHtcbiAgZGF0ZVNlYW5jZTogc3RyaW5nXG4gIGRhdGVTZWFuY2VKb3VyOiBzdHJpbmdcbiAgbnVtU2VhbmNlSm91cjogc3RyaW5nXG4gIG51bVNlYW5jZTogc3RyaW5nXG4gIHR5cGVBc3NlbWJsZWU6IHN0cmluZ1xuICBsZWdpc2xhdHVyZTogc3RyaW5nXG4gIHNlc3Npb246IHN0cmluZ1xuICBub21GaWNoaWVySm86IHN0cmluZ1xuICB2YWxpZGl0ZTogc3RyaW5nXG4gIGV0YXQ6IHN0cmluZ1xuICBkaWZmdXNpb246IHN0cmluZ1xuICB2ZXJzaW9uOiBzdHJpbmdcbiAgZW52aXJvbm5lbWVudDogc3RyaW5nXG4gIGhldXJlR2VuZXJhdGlvbjogRGF0ZVxuICBzb21tYWlyZTogU29tbWFpcmVcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTb21tYWlyZSB7XG4gIHByZXNpZGVudFNlYW5jZTogVGV4dGVcbiAgc29tbWFpcmUxOiBTb21tYWlyZUVsZW1lbnRbXSB8IFNvbW1haXJlRWxlbWVudFxuICBzb21tYWlyZTM/OiBTb21tYWlyZUVsZW1lbnRbXSB8IFNvbW1haXJlRWxlbWVudFxuICBzb21tYWlyZTI/OiBTb21tYWlyZUVsZW1lbnRbXSB8IFNvbW1haXJlRWxlbWVudFxuICBwYXJhPzogVGV4dGVbXSB8IFRleHRlXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU29tbWFpcmVFbGVtZW50IHtcbiAgdmFsZXVyX3B0c19vZGo/OiBzdHJpbmdcbiAgdGl0cmVTdHJ1Y3Q6IFRpdHJlU3RydWN0XG4gIHBhcmE/OiBBcnJheTxUZXh0ZSB8IHN0cmluZz4gfCBUZXh0ZVxuICBzb21tYWlyZTI/OiBTb21tYWlyZUVsZW1lbnRbXSB8IFNvbW1haXJlRWxlbWVudFxuICBzb21tYWlyZTM/OiBTb21tYWlyZUVsZW1lbnRbXSB8IFNvbW1haXJlRWxlbWVudFxuICBwcmVzaWRlbnRTZWFuY2U/OiBUZXh0ZVtdIHwgVGV4dGVcbiAgdHlwZV9kZWJhdD86IHN0cmluZ1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRpdHJlU3RydWN0IHtcbiAgaWRfc3ljZXJvbjogc3RyaW5nXG4gIGludGl0dWxlPzogc3RyaW5nXG4gIHNvdXNJbnRpdHVsZT86IHN0cmluZ1xuICB0eXBlX2RlYmF0Pzogc3RyaW5nXG59XG5cbi8vIENvbnZlcnRzIEpTT04gc3RyaW5ncyB0by9mcm9tIHlvdXIgdHlwZXNcbi8vIGFuZCBhc3NlcnRzIHRoZSByZXN1bHRzIG9mIEpTT04ucGFyc2UgYXQgcnVudGltZVxuZXhwb3J0IGNsYXNzIENvbnZlcnQge1xuICBwdWJsaWMgc3RhdGljIHRvQ29tcHRlc1JlbmR1cyhqc29uOiBzdHJpbmcpOiBDb21wdGVzUmVuZHVzIHtcbiAgICByZXR1cm4gY2FzdChKU09OLnBhcnNlKGpzb24pLCByKFwiQ29tcHRlc1JlbmR1c1wiKSlcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgY29tcHRlc1JlbmR1c1RvSnNvbih2YWx1ZTogQ29tcHRlc1JlbmR1cyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHVuY2FzdCh2YWx1ZSwgcihcIkNvbXB0ZXNSZW5kdXNcIikpLCBudWxsLCAyKVxuICB9XG5cbiAgcHVibGljIHN0YXRpYyB0b0NvbXB0ZVJlbmR1KGpzb246IHN0cmluZyk6IENvbXB0ZVJlbmR1IHtcbiAgICByZXR1cm4gY2FzdChKU09OLnBhcnNlKGpzb24pLCByKFwiQ29tcHRlUmVuZHVcIikpXG4gIH1cblxuICBwdWJsaWMgc3RhdGljIGNvbXB0ZVJlbmR1VG9Kc29uKHZhbHVlOiBDb21wdGVSZW5kdSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHVuY2FzdCh2YWx1ZSwgcihcIkNvbXB0ZVJlbmR1XCIpKSwgbnVsbCwgMilcbiAgfVxufVxuXG5mdW5jdGlvbiBpbnZhbGlkVmFsdWUodHlwOiBhbnksIHZhbDogYW55LCBrZXk6IGFueSwgcGFyZW50OiBhbnkgPSBcIlwiKTogbmV2ZXIge1xuICBjb25zdCBwcmV0dHlUeXAgPSBwcmV0dHlUeXBlTmFtZSh0eXApXG4gIGNvbnN0IHBhcmVudFRleHQgPSBwYXJlbnQgPyBgIG9uICR7cGFyZW50fWAgOiBcIlwiXG4gIGNvbnN0IGtleVRleHQgPSBrZXkgPyBgIGZvciBrZXkgXCIke2tleX1cImAgOiBcIlwiXG4gIHRocm93IEVycm9yKFxuICAgIGBJbnZhbGlkIHZhbHVlJHtrZXlUZXh0fSR7cGFyZW50VGV4dH0uIEV4cGVjdGVkICR7cHJldHR5VHlwfSBidXQgZ290ICR7SlNPTi5zdHJpbmdpZnkoXG4gICAgICB2YWwsXG4gICAgKX1gLFxuICApXG59XG5cbmZ1bmN0aW9uIHByZXR0eVR5cGVOYW1lKHR5cDogYW55KTogc3RyaW5nIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkodHlwKSkge1xuICAgIGlmICh0eXAubGVuZ3RoID09PSAyICYmIHR5cFswXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gYGFuIG9wdGlvbmFsICR7cHJldHR5VHlwZU5hbWUodHlwWzFdKX1gXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBgb25lIG9mIFske3R5cFxuICAgICAgICAubWFwKChhKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHByZXR0eVR5cGVOYW1lKGEpXG4gICAgICAgIH0pXG4gICAgICAgIC5qb2luKFwiLCBcIil9XWBcbiAgICB9XG4gIH0gZWxzZSBpZiAodHlwZW9mIHR5cCA9PT0gXCJvYmplY3RcIiAmJiB0eXAubGl0ZXJhbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIHR5cC5saXRlcmFsXG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHR5cGVvZiB0eXBcbiAgfVxufVxuXG5mdW5jdGlvbiBqc29uVG9KU1Byb3BzKHR5cDogYW55KTogYW55IHtcbiAgaWYgKHR5cC5qc29uVG9KUyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgY29uc3QgbWFwOiBhbnkgPSB7fVxuICAgIHR5cC5wcm9wcy5mb3JFYWNoKChwOiBhbnkpID0+IChtYXBbcC5qc29uXSA9IHsga2V5OiBwLmpzLCB0eXA6IHAudHlwIH0pKVxuICAgIHR5cC5qc29uVG9KUyA9IG1hcFxuICB9XG4gIHJldHVybiB0eXAuanNvblRvSlNcbn1cblxuZnVuY3Rpb24ganNUb0pTT05Qcm9wcyh0eXA6IGFueSk6IGFueSB7XG4gIGlmICh0eXAuanNUb0pTT04gPT09IHVuZGVmaW5lZCkge1xuICAgIGNvbnN0IG1hcDogYW55ID0ge31cbiAgICB0eXAucHJvcHMuZm9yRWFjaCgocDogYW55KSA9PiAobWFwW3AuanNdID0geyBrZXk6IHAuanNvbiwgdHlwOiBwLnR5cCB9KSlcbiAgICB0eXAuanNUb0pTT04gPSBtYXBcbiAgfVxuICByZXR1cm4gdHlwLmpzVG9KU09OXG59XG5cbmZ1bmN0aW9uIHRyYW5zZm9ybShcbiAgdmFsOiBhbnksXG4gIHR5cDogYW55LFxuICBnZXRQcm9wczogYW55LFxuICBrZXk6IGFueSA9IFwiXCIsXG4gIHBhcmVudDogYW55ID0gXCJcIixcbik6IGFueSB7XG4gIGZ1bmN0aW9uIHRyYW5zZm9ybVByaW1pdGl2ZSh0eXA6IHN0cmluZywgdmFsOiBhbnkpOiBhbnkge1xuICAgIGlmICh0eXBlb2YgdHlwID09PSB0eXBlb2YgdmFsKSByZXR1cm4gdmFsXG4gICAgcmV0dXJuIGludmFsaWRWYWx1ZSh0eXAsIHZhbCwga2V5LCBwYXJlbnQpXG4gIH1cblxuICBmdW5jdGlvbiB0cmFuc2Zvcm1Vbmlvbih0eXBzOiBhbnlbXSwgdmFsOiBhbnkpOiBhbnkge1xuICAgIC8vIHZhbCBtdXN0IHZhbGlkYXRlIGFnYWluc3Qgb25lIHR5cCBpbiB0eXBzXG4gICAgY29uc3QgbCA9IHR5cHMubGVuZ3RoXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsOyBpKyspIHtcbiAgICAgIGNvbnN0IHR5cCA9IHR5cHNbaV1cbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiB0cmFuc2Zvcm0odmFsLCB0eXAsIGdldFByb3BzKVxuICAgICAgfSBjYXRjaCAoXykge31cbiAgICB9XG4gICAgcmV0dXJuIGludmFsaWRWYWx1ZSh0eXBzLCB2YWwsIGtleSwgcGFyZW50KVxuICB9XG5cbiAgZnVuY3Rpb24gdHJhbnNmb3JtRW51bShjYXNlczogc3RyaW5nW10sIHZhbDogYW55KTogYW55IHtcbiAgICBpZiAoY2FzZXMuaW5kZXhPZih2YWwpICE9PSAtMSkgcmV0dXJuIHZhbFxuICAgIHJldHVybiBpbnZhbGlkVmFsdWUoXG4gICAgICBjYXNlcy5tYXAoKGEpID0+IHtcbiAgICAgICAgcmV0dXJuIGwoYSlcbiAgICAgIH0pLFxuICAgICAgdmFsLFxuICAgICAga2V5LFxuICAgICAgcGFyZW50LFxuICAgIClcbiAgfVxuXG4gIGZ1bmN0aW9uIHRyYW5zZm9ybUFycmF5KHR5cDogYW55LCB2YWw6IGFueSk6IGFueSB7XG4gICAgLy8gdmFsIG11c3QgYmUgYW4gYXJyYXkgd2l0aCBubyBpbnZhbGlkIGVsZW1lbnRzXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHZhbCkpIHJldHVybiBpbnZhbGlkVmFsdWUobChcImFycmF5XCIpLCB2YWwsIGtleSwgcGFyZW50KVxuICAgIHJldHVybiB2YWwubWFwKChlbCkgPT4gdHJhbnNmb3JtKGVsLCB0eXAsIGdldFByb3BzKSlcbiAgfVxuXG4gIGZ1bmN0aW9uIHRyYW5zZm9ybURhdGUodmFsOiBhbnkpOiBhbnkge1xuICAgIGlmICh2YWwgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiBudWxsXG4gICAgfVxuICAgIGNvbnN0IGQgPSBuZXcgRGF0ZSh2YWwpXG4gICAgaWYgKGlzTmFOKGQudmFsdWVPZigpKSkge1xuICAgICAgcmV0dXJuIGludmFsaWRWYWx1ZShsKFwiRGF0ZVwiKSwgdmFsLCBrZXksIHBhcmVudClcbiAgICB9XG4gICAgcmV0dXJuIGRcbiAgfVxuXG4gIGZ1bmN0aW9uIHRyYW5zZm9ybU9iamVjdChcbiAgICBwcm9wczogeyBbazogc3RyaW5nXTogYW55IH0sXG4gICAgYWRkaXRpb25hbDogYW55LFxuICAgIHZhbDogYW55LFxuICApOiBhbnkge1xuICAgIGlmICh2YWwgPT09IG51bGwgfHwgdHlwZW9mIHZhbCAhPT0gXCJvYmplY3RcIiB8fCBBcnJheS5pc0FycmF5KHZhbCkpIHtcbiAgICAgIHJldHVybiBpbnZhbGlkVmFsdWUobChyZWYgfHwgXCJvYmplY3RcIiksIHZhbCwga2V5LCBwYXJlbnQpXG4gICAgfVxuICAgIGNvbnN0IHJlc3VsdDogYW55ID0ge31cbiAgICBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhwcm9wcykuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICBjb25zdCBwcm9wID0gcHJvcHNba2V5XVxuICAgICAgY29uc3QgdiA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh2YWwsIGtleSlcbiAgICAgICAgPyB2YWxba2V5XVxuICAgICAgICA6IHVuZGVmaW5lZFxuICAgICAgcmVzdWx0W3Byb3Aua2V5XSA9IHRyYW5zZm9ybSh2LCBwcm9wLnR5cCwgZ2V0UHJvcHMsIGtleSwgcmVmKVxuICAgIH0pXG4gICAgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModmFsKS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgIGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHByb3BzLCBrZXkpKSB7XG4gICAgICAgIHJlc3VsdFtrZXldID0gdHJhbnNmb3JtKHZhbFtrZXldLCBhZGRpdGlvbmFsLCBnZXRQcm9wcywga2V5LCByZWYpXG4gICAgICB9XG4gICAgfSlcbiAgICByZXR1cm4gcmVzdWx0XG4gIH1cblxuICBpZiAodHlwID09PSBcImFueVwiKSByZXR1cm4gdmFsXG4gIGlmICh0eXAgPT09IG51bGwpIHtcbiAgICBpZiAodmFsID09PSBudWxsKSByZXR1cm4gdmFsXG4gICAgcmV0dXJuIGludmFsaWRWYWx1ZSh0eXAsIHZhbCwga2V5LCBwYXJlbnQpXG4gIH1cbiAgaWYgKHR5cCA9PT0gZmFsc2UpIHJldHVybiBpbnZhbGlkVmFsdWUodHlwLCB2YWwsIGtleSwgcGFyZW50KVxuICBsZXQgcmVmOiBhbnkgPSB1bmRlZmluZWRcbiAgd2hpbGUgKHR5cGVvZiB0eXAgPT09IFwib2JqZWN0XCIgJiYgdHlwLnJlZiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcmVmID0gdHlwLnJlZlxuICAgIHR5cCA9IHR5cGVNYXBbdHlwLnJlZl1cbiAgfVxuICBpZiAoQXJyYXkuaXNBcnJheSh0eXApKSByZXR1cm4gdHJhbnNmb3JtRW51bSh0eXAsIHZhbClcbiAgaWYgKHR5cGVvZiB0eXAgPT09IFwib2JqZWN0XCIpIHtcbiAgICByZXR1cm4gdHlwLmhhc093blByb3BlcnR5KFwidW5pb25NZW1iZXJzXCIpXG4gICAgICA/IHRyYW5zZm9ybVVuaW9uKHR5cC51bmlvbk1lbWJlcnMsIHZhbClcbiAgICAgIDogdHlwLmhhc093blByb3BlcnR5KFwiYXJyYXlJdGVtc1wiKVxuICAgICAgICA/IHRyYW5zZm9ybUFycmF5KHR5cC5hcnJheUl0ZW1zLCB2YWwpXG4gICAgICAgIDogdHlwLmhhc093blByb3BlcnR5KFwicHJvcHNcIilcbiAgICAgICAgICA/IHRyYW5zZm9ybU9iamVjdChnZXRQcm9wcyh0eXApLCB0eXAuYWRkaXRpb25hbCwgdmFsKVxuICAgICAgICAgIDogaW52YWxpZFZhbHVlKHR5cCwgdmFsLCBrZXksIHBhcmVudClcbiAgfVxuICAvLyBOdW1iZXJzIGNhbiBiZSBwYXJzZWQgYnkgRGF0ZSBidXQgc2hvdWxkbid0IGJlLlxuICBpZiAodHlwID09PSBEYXRlICYmIHR5cGVvZiB2YWwgIT09IFwibnVtYmVyXCIpIHJldHVybiB0cmFuc2Zvcm1EYXRlKHZhbClcbiAgcmV0dXJuIHRyYW5zZm9ybVByaW1pdGl2ZSh0eXAsIHZhbClcbn1cblxuZnVuY3Rpb24gY2FzdDxUPih2YWw6IGFueSwgdHlwOiBhbnkpOiBUIHtcbiAgcmV0dXJuIHRyYW5zZm9ybSh2YWwsIHR5cCwganNvblRvSlNQcm9wcylcbn1cblxuZnVuY3Rpb24gdW5jYXN0PFQ+KHZhbDogVCwgdHlwOiBhbnkpOiBhbnkge1xuICByZXR1cm4gdHJhbnNmb3JtKHZhbCwgdHlwLCBqc1RvSlNPTlByb3BzKVxufVxuXG5mdW5jdGlvbiBsKHR5cDogYW55KSB7XG4gIHJldHVybiB7IGxpdGVyYWw6IHR5cCB9XG59XG5cbmZ1bmN0aW9uIGEodHlwOiBhbnkpIHtcbiAgcmV0dXJuIHsgYXJyYXlJdGVtczogdHlwIH1cbn1cblxuZnVuY3Rpb24gdSguLi50eXBzOiBhbnlbXSkge1xuICByZXR1cm4geyB1bmlvbk1lbWJlcnM6IHR5cHMgfVxufVxuXG5mdW5jdGlvbiBvKHByb3BzOiBhbnlbXSwgYWRkaXRpb25hbDogYW55KSB7XG4gIHJldHVybiB7IHByb3BzLCBhZGRpdGlvbmFsIH1cbn1cblxuLy8gZnVuY3Rpb24gbShhZGRpdGlvbmFsOiBhbnkpIHtcbi8vICAgICByZXR1cm4geyBwcm9wczogW10sIGFkZGl0aW9uYWwgfTtcbi8vIH1cblxuZnVuY3Rpb24gcihuYW1lOiBzdHJpbmcpIHtcbiAgcmV0dXJuIHsgcmVmOiBuYW1lIH1cbn1cblxuY29uc3QgdHlwZU1hcDogYW55ID0ge1xuICBDb21wdGVzUmVuZHVzOiBvKFxuICAgIFt7IGpzb246IFwiY29tcHRlc1JlbmR1c1wiLCBqczogXCJjb21wdGVzUmVuZHVzXCIsIHR5cDogYShyKFwiQ29tcHRlUmVuZHVcIikpIH1dLFxuICAgIGZhbHNlLFxuICApLFxuICBDb21wdGVSZW5kdTogbyhcbiAgICBbXG4gICAgICB7IGpzb246IFwic2NoZW1hVmVyc2lvblwiLCBqczogXCJzY2hlbWFWZXJzaW9uXCIsIHR5cDogdSh1bmRlZmluZWQsIFwiXCIpIH0sXG4gICAgICB7IGpzb246IFwidWlkXCIsIGpzOiBcInVpZFwiLCB0eXA6IHUodW5kZWZpbmVkLCBcIlwiKSB9LFxuICAgICAgeyBqc29uOiBcInNlYW5jZVJlZlwiLCBqczogXCJzZWFuY2VSZWZcIiwgdHlwOiBcIlwiIH0sXG4gICAgICB7IGpzb246IFwic2Vzc2lvblJlZlwiLCBqczogXCJzZXNzaW9uUmVmXCIsIHR5cDogXCJcIiB9LFxuICAgICAgeyBqc29uOiBcIm1ldGFkb25uZWVzXCIsIGpzOiBcIm1ldGFkb25uZWVzXCIsIHR5cDogcihcIk1ldGFkb25uZWVzXCIpIH0sXG4gICAgICB7IGpzb246IFwiY29udGVudVwiLCBqczogXCJjb250ZW51XCIsIHR5cDogcihcIkNvbnRlbnVcIikgfSxcbiAgICBdLFxuICAgIGZhbHNlLFxuICApLFxuICBDb250ZW51OiBvKFxuICAgIFtcbiAgICAgIHsganNvbjogXCJxdWFudGllbWVzXCIsIGpzOiBcInF1YW50aWVtZXNcIiwgdHlwOiByKFwiUXVhbnRpZW1lc1wiKSB9LFxuICAgICAge1xuICAgICAgICBqc29uOiBcIm91dmVydHVyZVNlYW5jZVwiLFxuICAgICAgICBqczogXCJvdXZlcnR1cmVTZWFuY2VcIixcbiAgICAgICAgdHlwOiB1KGEocihcIlBvaW50XCIpKSwgcihcIlBvaW50XCIpKSxcbiAgICAgIH0sXG4gICAgICB7IGpzb246IFwicG9pbnRcIiwganM6IFwicG9pbnRcIiwgdHlwOiB1KGEocihcIlBvaW50XCIpKSwgcihcIlBvaW50XCIpKSB9LFxuICAgICAgeyBqc29uOiBcImZpblNlYW5jZVwiLCBqczogXCJmaW5TZWFuY2VcIiwgdHlwOiB1KHVuZGVmaW5lZCwgcihcIkZpblNlYW5jZVwiKSkgfSxcbiAgICAgIHtcbiAgICAgICAganNvbjogXCJwYXJhZ3JhcGhlXCIsXG4gICAgICAgIGpzOiBcInBhcmFncmFwaGVcIixcbiAgICAgICAgdHlwOiB1KHVuZGVmaW5lZCwgYShyKFwiUG9pbnRcIikpKSxcbiAgICAgIH0sXG4gICAgXSxcbiAgICBmYWxzZSxcbiAgKSxcbiAgRmluU2VhbmNlOiBvKFt7IGpzb246IFwicG9pbnRcIiwganM6IFwicG9pbnRcIiwgdHlwOiByKFwiUG9pbnRcIikgfV0sIGZhbHNlKSxcbiAgT3JhdGV1cnM6IG8oXG4gICAgW1xuICAgICAge1xuICAgICAgICBqc29uOiBcIm9yYXRldXJcIixcbiAgICAgICAganM6IFwib3JhdGV1clwiLFxuICAgICAgICB0eXA6IHUoYShyKFwiT3JhdGV1ckVsZW1lbnRcIikpLCByKFwiT3JhdGV1ckVsZW1lbnRcIikpLFxuICAgICAgfSxcbiAgICBdLFxuICAgIGZhbHNlLFxuICApLFxuICBPcmF0ZXVyRWxlbWVudDogbyhcbiAgICBbXG4gICAgICB7IGpzb246IFwibm9tXCIsIGpzOiBcIm5vbVwiLCB0eXA6IHUodW5kZWZpbmVkLCBcIlwiKSB9LFxuICAgICAgeyBqc29uOiBcImlkXCIsIGpzOiBcImlkXCIsIHR5cDogdSh1bmRlZmluZWQsIFwiXCIpIH0sXG4gICAgICB7IGpzb246IFwicXVhbGl0ZVwiLCBqczogXCJxdWFsaXRlXCIsIHR5cDogdSh1bmRlZmluZWQsIFwiXCIpIH0sXG4gICAgXSxcbiAgICBmYWxzZSxcbiAgKSxcbiAgVGV4dGU6IG8oXG4gICAgW1xuICAgICAgeyBqc29uOiBcIl9cIiwganM6IFwiX1wiLCB0eXA6IHUodW5kZWZpbmVkLCBcIlwiKSB9LFxuICAgICAgeyBqc29uOiBcImlkX3N5Y2Vyb25cIiwganM6IFwiaWRfc3ljZXJvblwiLCB0eXA6IHUodW5kZWZpbmVkLCBcIlwiKSB9LFxuICAgICAgeyBqc29uOiBcInN0aW1lXCIsIGpzOiBcInN0aW1lXCIsIHR5cDogdSh1bmRlZmluZWQsIFwiXCIpIH0sXG4gICAgICB7IGpzb246IFwic3VwXCIsIGpzOiBcInN1cFwiLCB0eXA6IHUodW5kZWZpbmVkLCBcIlwiKSB9LFxuICAgICAge1xuICAgICAgICBqc29uOiBcImxpZW5BZHRcIixcbiAgICAgICAganM6IFwibGllbkFkdFwiLFxuICAgICAgICB0eXA6IHUodW5kZWZpbmVkLCB1KGEocihcIlRleHRlXCIpKSwgcihcIlRleHRlXCIpKSksXG4gICAgICB9LFxuICAgIF0sXG4gICAgZmFsc2UsXG4gICksXG4gIFBvaW50OiBvKFxuICAgIFtcbiAgICAgIHsganNvbjogXCJuaXZwb2ludFwiLCBqczogXCJuaXZwb2ludFwiLCB0eXA6IHUodW5kZWZpbmVkLCBcIlwiKSB9LFxuICAgICAgeyBqc29uOiBcInZhbGV1cl9wdHNvZGpcIiwganM6IFwidmFsZXVyX3B0c29kalwiLCB0eXA6IHUodW5kZWZpbmVkLCBcIlwiKSB9LFxuICAgICAgeyBqc29uOiBcIm9yZGluYWxfcHJpc2VcIiwganM6IFwib3JkaW5hbF9wcmlzZVwiLCB0eXA6IHUodW5kZWZpbmVkLCBcIlwiKSB9LFxuICAgICAgeyBqc29uOiBcImlkX3ByZXBhcmF0aW9uXCIsIGpzOiBcImlkX3ByZXBhcmF0aW9uXCIsIHR5cDogdSh1bmRlZmluZWQsIFwiXCIpIH0sXG4gICAgICB7XG4gICAgICAgIGpzb246IFwib3JkcmVfYWJzb2x1X3NlYW5jZVwiLFxuICAgICAgICBqczogXCJvcmRyZV9hYnNvbHVfc2VhbmNlXCIsXG4gICAgICAgIHR5cDogdSh1bmRlZmluZWQsIFwiXCIpLFxuICAgICAgfSxcbiAgICAgIHsganNvbjogXCJjb2RlX2dyYW1tYWlyZVwiLCBqczogXCJjb2RlX2dyYW1tYWlyZVwiLCB0eXA6IHUodW5kZWZpbmVkLCBcIlwiKSB9LFxuICAgICAgeyBqc29uOiBcImNvZGVfc3R5bGVcIiwganM6IFwiY29kZV9zdHlsZVwiLCB0eXA6IHUodW5kZWZpbmVkLCBcIlwiKSB9LFxuICAgICAgeyBqc29uOiBcImNvZGVfcGFyb2xlXCIsIGpzOiBcImNvZGVfcGFyb2xlXCIsIHR5cDogdSh1bmRlZmluZWQsIFwiXCIpIH0sXG4gICAgICB7IGpzb246IFwic29tbWFpcmVcIiwganM6IFwic29tbWFpcmVcIiwgdHlwOiB1KHVuZGVmaW5lZCwgXCJcIikgfSxcbiAgICAgIHsganNvbjogXCJpZF9zeWNlcm9uXCIsIGpzOiBcImlkX3N5Y2Vyb25cIiwgdHlwOiB1KHVuZGVmaW5lZCwgXCJcIikgfSxcbiAgICAgIHsganNvbjogXCJ2YWxldXJcIiwganM6IFwidmFsZXVyXCIsIHR5cDogdSh1bmRlZmluZWQsIFwiXCIpIH0sXG4gICAgICB7XG4gICAgICAgIGpzb246IFwib3JhdGV1cnNcIixcbiAgICAgICAganM6IFwib3JhdGV1cnNcIixcbiAgICAgICAgdHlwOiB1KHIoXCJPcmF0ZXVyc1wiKSwgdShcIlwiLCB1bmRlZmluZWQpKSxcbiAgICAgIH0sXG4gICAgICB7IGpzb246IFwidGV4dGVcIiwganM6IFwidGV4dGVcIiwgdHlwOiB1KHIoXCJUZXh0ZVwiKSwgdShcIlwiLCB1bmRlZmluZWQpKSB9LFxuICAgICAge1xuICAgICAgICBqc29uOiBcInBhcmFncmFwaGVcIixcbiAgICAgICAganM6IFwicGFyYWdyYXBoZVwiLFxuICAgICAgICB0eXA6IHUodW5kZWZpbmVkLCB1KGEocihcIlBvaW50XCIpKSwgcihcIlBvaW50XCIpKSksXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBqc29uOiBcImludGVyRXh0cmFjdGlvblwiLFxuICAgICAgICBqczogXCJpbnRlckV4dHJhY3Rpb25cIixcbiAgICAgICAgdHlwOiB1KHVuZGVmaW5lZCwgdShhKHIoXCJQb2ludFwiKSksIHIoXCJQb2ludFwiKSkpLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAganNvbjogXCJwb2ludFwiLFxuICAgICAgICBqczogXCJwb2ludFwiLFxuICAgICAgICB0eXA6IHUodW5kZWZpbmVkLCB1KGEocihcIlBvaW50XCIpKSwgcihcIlBvaW50XCIpKSksXG4gICAgICB9LFxuICAgICAgeyBqc29uOiBcInN0cnVjdHVyZVwiLCBqczogXCJzdHJ1Y3R1cmVcIiwgdHlwOiB1KHVuZGVmaW5lZCwgXCJcIikgfSxcbiAgICAgIHsganNvbjogXCJpZF9hY3RldXJcIiwganM6IFwiaWRfYWN0ZXVyXCIsIHR5cDogdSh1bmRlZmluZWQsIFwiXCIpIH0sXG4gICAgICB7IGpzb246IFwiaWRfbWFuZGF0XCIsIGpzOiBcImlkX21hbmRhdFwiLCB0eXA6IHUodW5kZWZpbmVkLCBcIlwiKSB9LFxuICAgICAge1xuICAgICAgICBqc29uOiBcImlkX25vbWluYXRpb25fb2VcIixcbiAgICAgICAganM6IFwiaWRfbm9taW5hdGlvbl9vZVwiLFxuICAgICAgICB0eXA6IHUodW5kZWZpbmVkLCBcIlwiKSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGpzb246IFwiaWRfbm9taW5hdGlvbl9vcFwiLFxuICAgICAgICBqczogXCJpZF9ub21pbmF0aW9uX29wXCIsXG4gICAgICAgIHR5cDogdSh1bmRlZmluZWQsIFwiXCIpLFxuICAgICAgfSxcbiAgICAgIHsganNvbjogXCJvcmF0ZXVyXCIsIGpzOiBcIm9yYXRldXJcIiwgdHlwOiB1KHVuZGVmaW5lZCwgXCJcIikgfSxcbiAgICAgIHsganNvbjogXCJiaWJhcmRcIiwganM6IFwiYmliYXJkXCIsIHR5cDogdSh1bmRlZmluZWQsIFwiXCIpIH0sXG4gICAgICB7IGpzb246IFwiYXJ0XCIsIGpzOiBcImFydFwiLCB0eXA6IHUodW5kZWZpbmVkLCBcIlwiKSB9LFxuICAgICAgeyBqc29uOiBcImFkdFwiLCBqczogXCJhZHRcIiwgdHlwOiB1KHVuZGVmaW5lZCwgXCJcIikgfSxcbiAgICAgIHsganNvbjogXCJzc2FkdFwiLCBqczogXCJzc2FkdFwiLCB0eXA6IHUodW5kZWZpbmVkLCBcIlwiKSB9LFxuICAgICAgeyBqc29uOiBcInJvbGVkZWJhdFwiLCBqczogXCJyb2xlZGViYXRcIiwgdHlwOiB1KHVuZGVmaW5lZCwgXCJcIikgfSxcbiAgICAgIHsganNvbjogXCJ0eXBlX2RlYmF0XCIsIGpzOiBcInR5cGVfZGViYXRcIiwgdHlwOiB1KHVuZGVmaW5lZCwgXCJcIikgfSxcbiAgICAgIHtcbiAgICAgICAganNvbjogXCJjaGFuZ2VtZW50UHJlc2lkZW5jZVwiLFxuICAgICAgICBqczogXCJjaGFuZ2VtZW50UHJlc2lkZW5jZVwiLFxuICAgICAgICB0eXA6IHUodW5kZWZpbmVkLCByKFwiUG9pbnRcIikpLFxuICAgICAgfSxcbiAgICAgIHsganNvbjogXCJkZWNpc2lvblwiLCBqczogXCJkZWNpc2lvblwiLCB0eXA6IHUodW5kZWZpbmVkLCByKFwiRGVjaXNpb25cIikpIH0sXG4gICAgICB7XG4gICAgICAgIGpzb246IFwib3V2ZXJ0dXJlU2VhbmNlXCIsXG4gICAgICAgIGpzOiBcIm91dmVydHVyZVNlYW5jZVwiLFxuICAgICAgICB0eXA6IHUodW5kZWZpbmVkLCByKFwiUG9pbnRcIikpLFxuICAgICAgfSxcbiAgICAgIHsganNvbjogXCJub21fb3JhdGV1clwiLCBqczogXCJub21fb3JhdGV1clwiLCB0eXA6IHUodW5kZWZpbmVkLCBcIlwiKSB9LFxuICAgICAgeyBqc29uOiBcInF1YWxpdGVcIiwganM6IFwicXVhbGl0ZVwiLCB0eXA6IHUodW5kZWZpbmVkLCBcIlwiKSB9LFxuICAgIF0sXG4gICAgZmFsc2UsXG4gICksXG4gIFF1YW50aWVtZXM6IG8oXG4gICAgW1xuICAgICAgeyBqc29uOiBcImpvdXJuZWVcIiwganM6IFwiam91cm5lZVwiLCB0eXA6IFwiXCIgfSxcbiAgICAgIHsganNvbjogXCJzZXNzaW9uXCIsIGpzOiBcInNlc3Npb25cIiwgdHlwOiBcIlwiIH0sXG4gICAgXSxcbiAgICBmYWxzZSxcbiAgKSxcbiAgTWV0YWRvbm5lZXM6IG8oXG4gICAgW1xuICAgICAgeyBqc29uOiBcImRhdGVTZWFuY2VcIiwganM6IFwiZGF0ZVNlYW5jZVwiLCB0eXA6IFwiXCIgfSxcbiAgICAgIHsganNvbjogXCJkYXRlU2VhbmNlSm91clwiLCBqczogXCJkYXRlU2VhbmNlSm91clwiLCB0eXA6IFwiXCIgfSxcbiAgICAgIHsganNvbjogXCJudW1TZWFuY2VKb3VyXCIsIGpzOiBcIm51bVNlYW5jZUpvdXJcIiwgdHlwOiBcIlwiIH0sXG4gICAgICB7IGpzb246IFwibnVtU2VhbmNlXCIsIGpzOiBcIm51bVNlYW5jZVwiLCB0eXA6IFwiXCIgfSxcbiAgICAgIHsganNvbjogXCJ0eXBlQXNzZW1ibGVlXCIsIGpzOiBcInR5cGVBc3NlbWJsZWVcIiwgdHlwOiBcIlwiIH0sXG4gICAgICB7IGpzb246IFwibGVnaXNsYXR1cmVcIiwganM6IFwibGVnaXNsYXR1cmVcIiwgdHlwOiBcIlwiIH0sXG4gICAgICB7IGpzb246IFwic2Vzc2lvblwiLCBqczogXCJzZXNzaW9uXCIsIHR5cDogXCJcIiB9LFxuICAgICAgeyBqc29uOiBcIm5vbUZpY2hpZXJKb1wiLCBqczogXCJub21GaWNoaWVySm9cIiwgdHlwOiBcIlwiIH0sXG4gICAgICB7IGpzb246IFwidmFsaWRpdGVcIiwganM6IFwidmFsaWRpdGVcIiwgdHlwOiBcIlwiIH0sXG4gICAgICB7IGpzb246IFwiZXRhdFwiLCBqczogXCJldGF0XCIsIHR5cDogXCJcIiB9LFxuICAgICAgeyBqc29uOiBcImRpZmZ1c2lvblwiLCBqczogXCJkaWZmdXNpb25cIiwgdHlwOiBcIlwiIH0sXG4gICAgICB7IGpzb246IFwidmVyc2lvblwiLCBqczogXCJ2ZXJzaW9uXCIsIHR5cDogXCJcIiB9LFxuICAgICAgeyBqc29uOiBcImVudmlyb25uZW1lbnRcIiwganM6IFwiZW52aXJvbm5lbWVudFwiLCB0eXA6IFwiXCIgfSxcbiAgICAgIHsganNvbjogXCJoZXVyZUdlbmVyYXRpb25cIiwganM6IFwiaGV1cmVHZW5lcmF0aW9uXCIsIHR5cDogRGF0ZSB9LFxuICAgICAgeyBqc29uOiBcInNvbW1haXJlXCIsIGpzOiBcInNvbW1haXJlXCIsIHR5cDogcihcIlNvbW1haXJlXCIpIH0sXG4gICAgXSxcbiAgICBmYWxzZSxcbiAgKSxcbiAgU29tbWFpcmU6IG8oXG4gICAgW1xuICAgICAgeyBqc29uOiBcInByZXNpZGVudFNlYW5jZVwiLCBqczogXCJwcmVzaWRlbnRTZWFuY2VcIiwgdHlwOiByKFwiVGV4dGVcIikgfSxcbiAgICAgIHtcbiAgICAgICAganNvbjogXCJzb21tYWlyZTFcIixcbiAgICAgICAganM6IFwic29tbWFpcmUxXCIsXG4gICAgICAgIHR5cDogdShhKHIoXCJTb21tYWlyZUVsZW1lbnRcIikpLCByKFwiU29tbWFpcmVFbGVtZW50XCIpKSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGpzb246IFwic29tbWFpcmUzXCIsXG4gICAgICAgIGpzOiBcInNvbW1haXJlM1wiLFxuICAgICAgICB0eXA6IHUodW5kZWZpbmVkLCB1KGEocihcIlNvbW1haXJlRWxlbWVudFwiKSksIHIoXCJTb21tYWlyZUVsZW1lbnRcIikpKSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGpzb246IFwic29tbWFpcmUyXCIsXG4gICAgICAgIGpzOiBcInNvbW1haXJlMlwiLFxuICAgICAgICB0eXA6IHUodW5kZWZpbmVkLCB1KGEocihcIlNvbW1haXJlRWxlbWVudFwiKSksIHIoXCJTb21tYWlyZUVsZW1lbnRcIikpKSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGpzb246IFwicGFyYVwiLFxuICAgICAgICBqczogXCJwYXJhXCIsXG4gICAgICAgIHR5cDogdSh1bmRlZmluZWQsIHUoYShyKFwiVGV4dGVcIikpLCByKFwiVGV4dGVcIikpKSxcbiAgICAgIH0sXG4gICAgXSxcbiAgICBmYWxzZSxcbiAgKSxcbiAgU29tbWFpcmVFbGVtZW50OiBvKFxuICAgIFtcbiAgICAgIHsganNvbjogXCJ2YWxldXJfcHRzX29kalwiLCBqczogXCJ2YWxldXJfcHRzX29kalwiLCB0eXA6IHUodW5kZWZpbmVkLCBcIlwiKSB9LFxuICAgICAge1xuICAgICAgICBqc29uOiBcInRpdHJlU3RydWN0XCIsXG4gICAgICAgIGpzOiBcInRpdHJlU3RydWN0XCIsXG4gICAgICAgIHR5cDogdSh1bmRlZmluZWQsIHIoXCJUaXRyZVN0cnVjdFwiKSksXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBqc29uOiBcInBhcmFcIixcbiAgICAgICAganM6IFwicGFyYVwiLFxuICAgICAgICB0eXA6IHUodW5kZWZpbmVkLCB1KGEodShyKFwiVGV4dGVcIiksIFwiXCIpKSwgcihcIlRleHRlXCIpKSksXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBqc29uOiBcInNvbW1haXJlMlwiLFxuICAgICAgICBqczogXCJzb21tYWlyZTJcIixcbiAgICAgICAgdHlwOiB1KHVuZGVmaW5lZCwgdShhKHIoXCJTb21tYWlyZUVsZW1lbnRcIikpLCByKFwiU29tbWFpcmVFbGVtZW50XCIpKSksXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBqc29uOiBcInNvbW1haXJlM1wiLFxuICAgICAgICBqczogXCJzb21tYWlyZTNcIixcbiAgICAgICAgdHlwOiB1KHVuZGVmaW5lZCwgdShhKHIoXCJTb21tYWlyZUVsZW1lbnRcIikpLCByKFwiU29tbWFpcmVFbGVtZW50XCIpKSksXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBqc29uOiBcInByZXNpZGVudFNlYW5jZVwiLFxuICAgICAgICBqczogXCJwcmVzaWRlbnRTZWFuY2VcIixcbiAgICAgICAgdHlwOiB1KHVuZGVmaW5lZCwgdShhKHIoXCJUZXh0ZVwiKSksIHIoXCJUZXh0ZVwiKSkpLFxuICAgICAgfSxcbiAgICAgIHsganNvbjogXCJ0eXBlX2RlYmF0XCIsIGpzOiBcInR5cGVfZGViYXRcIiwgdHlwOiB1KHVuZGVmaW5lZCwgXCJcIikgfSxcbiAgICBdLFxuICAgIGZhbHNlLFxuICApLFxuICBUaXRyZVN0cnVjdDogbyhcbiAgICBbXG4gICAgICB7IGpzb246IFwiaWRfc3ljZXJvblwiLCBqczogXCJpZF9zeWNlcm9uXCIsIHR5cDogXCJcIiB9LFxuICAgICAgeyBqc29uOiBcImludGl0dWxlXCIsIGpzOiBcImludGl0dWxlXCIsIHR5cDogdSh1bmRlZmluZWQsIFwiXCIpIH0sXG4gICAgICB7IGpzb246IFwic291c0ludGl0dWxlXCIsIGpzOiBcInNvdXNJbnRpdHVsZVwiLCB0eXA6IHUodW5kZWZpbmVkLCBcIlwiKSB9LFxuICAgICAgeyBqc29uOiBcInR5cGVfZGViYXRcIiwganM6IFwidHlwZV9kZWJhdFwiLCB0eXA6IHUodW5kZWZpbmVkLCBcIlwiKSB9LFxuICAgIF0sXG4gICAgZmFsc2UsXG4gICksXG4gIERlY2lzaW9uOiBbXG4gICAgXCJBRE9QVElPTiBhbWVuZGVtZW50IChtYWluIGxldsOpZSkgYWR0XCIsXG4gICAgXCJBRE9QVElPTiBk4oCZdW4gYXJ0aWNsZSAodm90ZSDDoCBtYWluIGxldsOpZSlcIixcbiAgICBcIkFET1BUSU9OIGTigJl1biBzb3VzLWFtZW5kZW1lbnQgKG1haW4gbGV2w6llKSBzcy1hZHRcIixcbiAgICBcIkFET1BUSU9OIGRlIHBsdXNpZXVycyBhbWVuZGVtZW50cyAobWFpbiBsZXbDqWUpIGFkdHNcIixcbiAgICBcIkFET1BUSU9OIGRlIHBsdXNpZXVycyBzb3VzLWFtZW5kZW1lbnRzIChtYWluIGxldsOpZSkgc3MtYWR0c1wiLFxuICAgIFwiXCIsXG4gICAgXCJSRUpFVCBk4oCZdW4gYW1lbmRlbWVudCAobWFpbiBsZXbDqWUpIGFkdFwiLFxuICAgIFwiUkVKRVQgZOKAmXVuIGFydGljbGUgKHZvdGUgw6AgbWFpbiBsZXbDqWUpXCIsXG4gICAgXCJSRUpFVCBk4oCZdW4gc291cy1hbWVuZGVtZW50IChtYWluIGxldsOpZSkgc3MtYWR0XCIsXG4gICAgXCJSRUpFVCBkZSBwbHVzaWV1cnMgYW1lbmRlbWVudHMgKG1haW4gbGV2w6llKSBhZHRzXCIsXG4gICAgXCJSRUpFVCBkZSBwbHVzaWV1cnMgc291cy1hbWVuZGVtZW50cyAobWFpbiBsZXbDqWUpIHNzLWFkdHNcIixcbiAgICBcIlJFSkVUIG1vdGlvbiBkZSByZWpldCBwcsOpYWxhYmxlIChtYWluIGxldsOpZSlcIixcbiAgXSxcbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUE2Q0EsV0FBWUEsUUFBUSwwQkFBUkEsUUFBUTtFQUFSQSxRQUFRO0VBQVJBLFFBQVE7RUFBUkEsUUFBUTtFQUFSQSxRQUFRO0VBQVJBLFFBQVE7RUFBUkEsUUFBUTtFQUFSQSxRQUFRO0VBQVJBLFFBQVE7RUFBUkEsUUFBUTtFQUFSQSxRQUFRO0VBQVJBLFFBQVE7RUFBUkEsUUFBUTtFQUFBLE9BQVJBLFFBQVE7QUFBQTtBQW1HcEI7QUFDQTtBQUNBLE9BQU8sTUFBTUMsT0FBTyxDQUFDO0VBQ25CLE9BQWNDLGVBQWVBLENBQUNDLElBQVksRUFBaUI7SUFDekQsT0FBT0MsSUFBSSxDQUFDQyxJQUFJLENBQUNDLEtBQUssQ0FBQ0gsSUFBSSxDQUFDLEVBQUVJLENBQUMsQ0FBQyxlQUFlLENBQUMsQ0FBQztFQUNuRDtFQUVBLE9BQWNDLG1CQUFtQkEsQ0FBQ0MsS0FBb0IsRUFBVTtJQUM5RCxPQUFPSixJQUFJLENBQUNLLFNBQVMsQ0FBQ0MsTUFBTSxDQUFDRixLQUFLLEVBQUVGLENBQUMsQ0FBQyxlQUFlLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7RUFDbkU7RUFFQSxPQUFjSyxhQUFhQSxDQUFDVCxJQUFZLEVBQWU7SUFDckQsT0FBT0MsSUFBSSxDQUFDQyxJQUFJLENBQUNDLEtBQUssQ0FBQ0gsSUFBSSxDQUFDLEVBQUVJLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQztFQUNqRDtFQUVBLE9B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