UNPKG

@tricoteuses/assemblee

Version:

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

619 lines (616 loc) 69.5 kB
"use strict"; require("core-js/modules/es.symbol.js"); require("core-js/modules/es.symbol.description.js"); require("core-js/modules/es.symbol.iterator.js"); require("core-js/modules/es.array.iterator.js"); require("core-js/modules/es.object.define-property.js"); require("core-js/modules/es.string.iterator.js"); require("core-js/modules/web.dom-collections.iterator.js"); Object.defineProperty(exports, "__esModule", { value: true }); exports.Decision = exports.Convert = void 0; require("core-js/modules/es.symbol.to-primitive.js"); require("core-js/modules/es.array.concat.js"); require("core-js/modules/es.array.for-each.js"); require("core-js/modules/es.array.index-of.js"); require("core-js/modules/es.array.is-array.js"); require("core-js/modules/es.array.join.js"); require("core-js/modules/es.array.map.js"); require("core-js/modules/es.date.to-json.js"); require("core-js/modules/es.date.to-primitive.js"); require("core-js/modules/es.date.to-string.js"); require("core-js/modules/es.number.constructor.js"); require("core-js/modules/es.object.get-own-property-names.js"); require("core-js/modules/es.object.keys.js"); require("core-js/modules/es.object.to-string.js"); require("core-js/modules/web.dom-collections.for-each.js"); function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); } function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } } function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; } function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } // 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. var Decision = exports.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 var Convert = exports.Convert = /*#__PURE__*/function () { function Convert() { _classCallCheck(this, Convert); } return _createClass(Convert, null, [{ key: "toComptesRendus", value: function toComptesRendus(json) { return cast(JSON.parse(json), r("ComptesRendus")); } }, { key: "comptesRendusToJson", value: function comptesRendusToJson(value) { return JSON.stringify(uncast(value, r("ComptesRendus")), null, 2); } }, { key: "toCompteRendu", value: function toCompteRendu(json) { return cast(JSON.parse(json), r("CompteRendu")); } }, { key: "compteRenduToJson", value: function compteRenduToJson(value) { return JSON.stringify(uncast(value, r("CompteRendu")), null, 2); } }]); }(); function invalidValue(typ, val, key) { var parent = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : ""; var prettyTyp = prettyTypeName(typ); var parentText = parent ? " on ".concat(parent) : ""; var keyText = key ? " for key \"".concat(key, "\"") : ""; throw Error("Invalid value".concat(keyText).concat(parentText, ". Expected ").concat(prettyTyp, " but got ").concat(JSON.stringify(val))); } function prettyTypeName(typ) { if (Array.isArray(typ)) { if (typ.length === 2 && typ[0] === undefined) { return "an optional ".concat(prettyTypeName(typ[1])); } else { return "one of [".concat(typ.map(function (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) { var map = {}; typ.props.forEach(function (p) { return map[p.json] = { key: p.js, typ: p.typ }; }); typ.jsonToJS = map; } return typ.jsonToJS; } function jsToJSONProps(typ) { if (typ.jsToJSON === undefined) { var map = {}; typ.props.forEach(function (p) { return map[p.js] = { key: p.json, typ: p.typ }; }); typ.jsToJSON = map; } return typ.jsToJSON; } function transform(val, typ, getProps) { var key = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : ""; var parent = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : ""; 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 var l = typs.length; for (var i = 0; i < l; i++) { var _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(function (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(function (el) { return transform(el, typ, getProps); }); } function transformDate(val) { if (val === null) { return null; } var 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); } var result = {}; Object.getOwnPropertyNames(props).forEach(function (key) { var prop = props[key]; var v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined; result[prop.key] = transform(v, prop.typ, getProps, key, ref); }); Object.getOwnPropertyNames(val).forEach(function (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); var 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() { for (var _len = arguments.length, typs = new Array(_len), _key = 0; _key < _len; _key++) { typs[_key] = arguments[_key]; } return { unionMembers: typs }; } function o(props, additional) { return { props: props, additional: additional }; } // function m(additional: any) { // return { props: [], additional }; // } function r(name) { return { ref: name }; } var 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,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJEZWNpc2lvbiIsImV4cG9ydHMiLCJDb252ZXJ0IiwiX2NsYXNzQ2FsbENoZWNrIiwiX2NyZWF0ZUNsYXNzIiwia2V5IiwidmFsdWUiLCJ0b0NvbXB0ZXNSZW5kdXMiLCJqc29uIiwiY2FzdCIsIkpTT04iLCJwYXJzZSIsInIiLCJjb21wdGVzUmVuZHVzVG9Kc29uIiwic3RyaW5naWZ5IiwidW5jYXN0IiwidG9Db21wdGVSZW5kdSIsImNvbXB0ZVJlbmR1VG9Kc29uIiwiaW52YWxpZFZhbHVlIiwidHlwIiwidmFsIiwicGFyZW50IiwiYXJndW1lbnRzIiwibGVuZ3RoIiwidW5kZWZpbmVkIiwicHJldHR5VHlwIiwicHJldHR5VHlwZU5hbWUiLCJwYXJlbnRUZXh0IiwiY29uY2F0Iiwia2V5VGV4dCIsIkVycm9yIiwiQXJyYXkiLCJpc0FycmF5IiwibWFwIiwiYSIsImpvaW4iLCJfdHlwZW9mIiwibGl0ZXJhbCIsImpzb25Ub0pTUHJvcHMiLCJqc29uVG9KUyIsInByb3BzIiwiZm9yRWFjaCIsInAiLCJqcyIsImpzVG9KU09OUHJvcHMiLCJqc1RvSlNPTiIsInRyYW5zZm9ybSIsImdldFByb3BzIiwidHJhbnNmb3JtUHJpbWl0aXZlIiwidHJhbnNmb3JtVW5pb24iLCJ0eXBzIiwibCIsImkiLCJfIiwidHJhbnNmb3JtRW51bSIsImNhc2VzIiwiaW5kZXhPZiIsInRyYW5zZm9ybUFycmF5IiwiZWwiLCJ0cmFuc2Zvcm1EYXRlIiwiZCIsIkRhdGUiLCJpc05hTiIsInZhbHVlT2YiLCJ0cmFuc2Zvcm1PYmplY3QiLCJhZGRpdGlvbmFsIiwicmVmIiwicmVzdWx0IiwiT2JqZWN0IiwiZ2V0T3duUHJvcGVydHlOYW1lcyIsInByb3AiLCJ2IiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwidHlwZU1hcCIsInVuaW9uTWVtYmVycyIsImFycmF5SXRlbXMiLCJ1IiwiX2xlbiIsIl9rZXkiLCJvIiwibmFtZSIsIkNvbXB0ZXNSZW5kdXMiLCJDb21wdGVSZW5kdSIsIkNvbnRlbnUiLCJGaW5TZWFuY2UiLCJPcmF0ZXVycyIsIk9yYXRldXJFbGVtZW50IiwiVGV4dGUiLCJQb2ludCIsIlF1YW50aWVtZXMiLCJNZXRhZG9ubmVlcyIsIlNvbW1haXJlIiwiU29tbWFpcmVFbGVtZW50IiwiVGl0cmVTdHJ1Y3QiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvdHlwZXMvZGViYXRzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIFRvIHBhcnNlIHRoaXMgZGF0YTpcbi8vXG4vLyAgIGltcG9ydCB7IENvbnZlcnQsIENvbXB0ZXNSZW5kdXMgfSBmcm9tIFwiLi9maWxlXCI7XG4vL1xuLy8gICBjb25zdCBjb21wdGVSZW5kdSA9IENvbnZlcnQudG9Db21wdGVzUmVuZHVzKGpzb24pO1xuLy9cbi8vIFRoZXNlIGZ1bmN0aW9ucyB3aWxsIHRocm93IGFuIGVycm9yIGlmIHRoZSBKU09OIGRvZXNuJ3Rcbi8vIG1hdGNoIHRoZSBleHBlY3RlZCBpbnRlcmZhY2UsIGV2ZW4gaWYgdGhlIEpTT04gaXMgdmFsaWQuXG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29tcHRlc1JlbmR1cyB7XG4gIGNvbXB0ZXNSZW5kdXM6IENvbXB0ZVJlbmR1W11cbn1cblxuZXhwb3J0IGludGVyZmFjZSBDb21wdGVSZW5kdSB7XG4gIHNjaGVtYVZlcnNpb24/OiBzdHJpbmdcbiAgdWlkOiBzdHJpbmdcbiAgc2VhbmNlUmVmOiBzdHJpbmdcbiAgc2Vzc2lvblJlZjogc3RyaW5nXG4gIG1ldGFkb25uZWVzOiBNZXRhZG9ubmVlc1xuICBjb250ZW51OiBDb250ZW51XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29udGVudSB7XG4gIHF1YW50aWVtZXM6IFF1YW50aWVtZXNcbiAgb3V2ZXJ0dXJlU2VhbmNlOiBQb2ludFtdIHwgUG9pbnRcbiAgcG9pbnQ6IFBvaW50W10gfCBQb2ludFxuICBmaW5TZWFuY2U/OiBGaW5TZWFuY2VcbiAgcGFyYWdyYXBoZT86IFBvaW50W11cbn1cblxuZXhwb3J0IGludGVyZmFjZSBGaW5TZWFuY2Uge1xuICBwb2ludDogUG9pbnRcbn1cblxuZXhwb3J0IGludGVyZmFjZSBPcmF0ZXVycyB7XG4gIG9yYXRldXI6IE9yYXRldXJFbGVtZW50W10gfCBPcmF0ZXVyRWxlbWVudFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIE9yYXRldXJFbGVtZW50IHtcbiAgbm9tOiBzdHJpbmcgfCB1bmRlZmluZWRcbiAgaWQ6IHN0cmluZyB8IHVuZGVmaW5lZFxuICBxdWFsaXRlOiBzdHJpbmcgfCB1bmRlZmluZWRcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUZXh0ZSB7XG4gIF8/OiBzdHJpbmdcbiAgaWRfc3ljZXJvbj86IHN0cmluZ1xuICBzdGltZT86IHN0cmluZ1xuICBzdXA/OiBzdHJpbmdcbiAgbGllbkFkdD86IFRleHRlW10gfCBUZXh0ZVxufVxuXG5leHBvcnQgZW51bSBEZWNpc2lvbiB7XG4gIEFkb3B0aW9uQW1lbmRlbWVudE1haW5MZXbDqWVBZHQgPSBcIkFET1BUSU9OIGFtZW5kZW1lbnQgKG1haW4gbGV2w6llKSBhZHRcIixcbiAgQWRvcHRpb25EVW5BcnRpY2xlVm90ZcOATWFpbkxldsOpZSA9IFwiQURPUFRJT04gZOKAmXVuIGFydGljbGUgKHZvdGUgw6AgbWFpbiBsZXbDqWUpXCIsXG4gIEFkb3B0aW9uRFVuU291c0FtZW5kZW1lbnRNYWluTGV2w6llU3NBZHQgPSBcIkFET1BUSU9OIGTigJl1biBzb3VzLWFtZW5kZW1lbnQgKG1haW4gbGV2w6llKSBzcy1hZHRcIixcbiAgQWRvcHRpb25EZVBsdXNpZXVyc0FtZW5kZW1lbnRzTWFpbkxldsOpZUFkdHMgPSBcIkFET1BUSU9OIGRlIHBsdXNpZXVycyBhbWVuZGVtZW50cyAobWFpbiBsZXbDqWUpIGFkdHNcIixcbiAgQWRvcHRpb25EZVBsdXNpZXVyc1NvdXNBbWVuZGVtZW50c01haW5MZXbDqWVTc0FkdHMgPSBcIkFET1BUSU9OIGRlIHBsdXNpZXVycyBzb3VzLWFtZW5kZW1lbnRzIChtYWluIGxldsOpZSkgc3MtYWR0c1wiLFxuICBFbXB0eSA9IFwiXCIsXG4gIFJlamV0RFVuQW1lbmRlbWVudE1haW5MZXbDqWVBZHQgPSBcIlJFSkVUIGTigJl1biBhbWVuZGVtZW50IChtYWluIGxldsOpZSkgYWR0XCIsXG4gIFJlamV0RFVuQXJ0aWNsZVZvdGXDgE1haW5MZXbDqWUgPSBcIlJFSkVUIGTigJl1biBhcnRpY2xlICh2b3RlIMOgIG1haW4gbGV2w6llKVwiLFxuICBSZWpldERVblNvdXNBbWVuZGVtZW50TWFpbkxldsOpZVNzQWR0ID0gXCJSRUpFVCBk4oCZdW4gc291cy1hbWVuZGVtZW50IChtYWluIGxldsOpZSkgc3MtYWR0XCIsXG4gIFJlamV0RGVQbHVzaWV1cnNBbWVuZGVtZW50c01haW5MZXbDqWVBZHRzID0gXCJSRUpFVCBkZSBwbHVzaWV1cnMgYW1lbmRlbWVudHMgKG1haW4gbGV2w6llKSBhZHRzXCIsXG4gIFJlamV0RGVQbHVzaWV1cnNTb3VzQW1lbmRlbWVudHNNYWluTGV2w6llU3NBZHRzID0gXCJSRUpFVCBkZSBwbHVzaWV1cnMgc291cy1hbWVuZGVtZW50cyAobWFpbiBsZXbDqWUpIHNzLWFkdHNcIixcbiAgUmVqZXRNb3Rpb25EZVJlamV0UHLDqWFsYWJsZU1haW5MZXbDqWUgPSBcIlJFSkVUIG1vdGlvbiBkZSByZWpldCBwcsOpYWxhYmxlIChtYWluIGxldsOpZSlcIixcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQb2ludCB7XG4gIG5pdnBvaW50Pzogc3RyaW5nXG4gIHZhbGV1cl9wdHNvZGo/OiBzdHJpbmdcbiAgb3JkaW5hbF9wcmlzZT86IHN0cmluZ1xuICBpZF9wcmVwYXJhdGlvbj86IHN0cmluZ1xuICBvcmRyZV9hYnNvbHVfc2VhbmNlPzogc3RyaW5nXG4gIGNvZGVfZ3JhbW1haXJlPzogc3RyaW5nXG4gIGNvZGVfc3R5bGU/OiBzdHJpbmdcbiAgY29kZV9wYXJvbGU/OiBzdHJpbmdcbiAgc29tbWFpcmU/OiBzdHJpbmdcbiAgaWRfc3ljZXJvbj86IHN0cmluZ1xuICB2YWxldXI/OiBzdHJpbmdcbiAgb3JhdGV1cnM/OiBPcmF0ZXVycyB8IHN0cmluZ1xuICB0ZXh0ZT86IFRleHRlIHwgc3RyaW5nXG4gIHBhcmFncmFwaGU/OiBQb2ludFtdIHwgUG9pbnRcbiAgaW50ZXJFeHRyYWN0aW9uPzogUG9pbnRbXSB8IFBvaW50XG4gIHBvaW50PzogUG9pbnRbXSB8IFBvaW50XG4gIHN0cnVjdHVyZT86IHN0cmluZ1xuICBpZF9hY3RldXI/OiBzdHJpbmdcbiAgaWRfbWFuZGF0Pzogc3RyaW5nXG4gIGlkX25vbWluYXRpb25fb2U/OiBzdHJpbmdcbiAgaWRfbm9taW5hdGlvbl9vcD86IHN0cmluZ1xuICBvcmF0ZXVyPzogc3RyaW5nXG4gIGJpYmFyZD86IHN0cmluZ1xuICBhcnQ/OiBzdHJpbmdcbiAgYWR0Pzogc3RyaW5nXG4gIHNzYWR0Pzogc3RyaW5nXG4gIHJvbGVkZWJhdD86IHN0cmluZ1xuICBjaGFuZ2VtZW50UHJlc2lkZW5jZT86IFBvaW50XG4gIHR5cGVfZGViYXQ/OiBzdHJpbmdcbiAgZGVjaXNpb24/OiBEZWNpc2lvblxuICBvdXZlcnR1cmVTZWFuY2U/OiBQb2ludFxuICBub21fb3JhdGV1cj86IHN0cmluZ1xuICBxdWFsaXRlPzogc3RyaW5nXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUXVhbnRpZW1lcyB7XG4gIGpvdXJuZWU6IHN0cmluZ1xuICBzZXNzaW9uOiBzdHJpbmdcbn1cblxuZXhwb3J0IGludGVyZmFjZSBNZXRhZG9ubmVlcyB7XG4gIGRhdGVTZWFuY2U6IHN0cmluZ1xuICBkYXRlU2VhbmNlSm91cjogc3RyaW5nXG4gIG51bVNlYW5jZUpvdXI6IHN0cmluZ1xuICBudW1TZWFuY2U6IHN0cmluZ1xuICB0eXBlQXNzZW1ibGVlOiBzdHJpbmdcbiAgbGVnaXNsYXR1cmU6IHN0cmluZ1xuICBzZXNzaW9uOiBzdHJpbmdcbiAgbm9tRmljaGllckpvOiBzdHJpbmdcbiAgdmFsaWRpdGU6IHN0cmluZ1xuICBldGF0OiBzdHJpbmdcbiAgZGlmZnVzaW9uOiBzdHJpbmdcbiAgdmVyc2lvbjogc3RyaW5nXG4gIGVudmlyb25uZW1lbnQ6IHN0cmluZ1xuICBoZXVyZUdlbmVyYXRpb246IERhdGVcbiAgc29tbWFpcmU6IFNvbW1haXJlXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU29tbWFpcmUge1xuICBwcmVzaWRlbnRTZWFuY2U6IFRleHRlXG4gIHNvbW1haXJlMTogU29tbWFpcmVFbGVtZW50W10gfCBTb21tYWlyZUVsZW1lbnRcbiAgc29tbWFpcmUzPzogU29tbWFpcmVFbGVtZW50W10gfCBTb21tYWlyZUVsZW1lbnRcbiAgc29tbWFpcmUyPzogU29tbWFpcmVFbGVtZW50W10gfCBTb21tYWlyZUVsZW1lbnRcbiAgcGFyYT86IFRleHRlW10gfCBUZXh0ZVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNvbW1haXJlRWxlbWVudCB7XG4gIHZhbGV1cl9wdHNfb2RqPzogc3RyaW5nXG4gIHRpdHJlU3RydWN0OiBUaXRyZVN0cnVjdFxuICBwYXJhPzogQXJyYXk8VGV4dGUgfCBzdHJpbmc+IHwgVGV4dGVcbiAgc29tbWFpcmUyPzogU29tbWFpcmVFbGVtZW50W10gfCBTb21tYWlyZUVsZW1lbnRcbiAgc29tbWFpcmUzPzogU29tbWFpcmVFbGVtZW50W10gfCBTb21tYWlyZUVsZW1lbnRcbiAgcHJlc2lkZW50U2VhbmNlPzogVGV4dGVbXSB8IFRleHRlXG4gIHR5cGVfZGViYXQ/OiBzdHJpbmdcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUaXRyZVN0cnVjdCB7XG4gIGlkX3N5Y2Vyb246IHN0cmluZ1xuICBpbnRpdHVsZT86IHN0cmluZ1xuICBzb3VzSW50aXR1bGU/OiBzdHJpbmdcbiAgdHlwZV9kZWJhdD86IHN0cmluZ1xufVxuXG4vLyBDb252ZXJ0cyBKU09OIHN0cmluZ3MgdG8vZnJvbSB5b3VyIHR5cGVzXG4vLyBhbmQgYXNzZXJ0cyB0aGUgcmVzdWx0cyBvZiBKU09OLnBhcnNlIGF0IHJ1bnRpbWVcbmV4cG9ydCBjbGFzcyBDb252ZXJ0IHtcbiAgcHVibGljIHN0YXRpYyB0b0NvbXB0ZXNSZW5kdXMoanNvbjogc3RyaW5nKTogQ29tcHRlc1JlbmR1cyB7XG4gICAgcmV0dXJuIGNhc3QoSlNPTi5wYXJzZShqc29uKSwgcihcIkNvbXB0ZXNSZW5kdXNcIikpXG4gIH1cblxuICBwdWJsaWMgc3RhdGljIGNvbXB0ZXNSZW5kdXNUb0pzb24odmFsdWU6IENvbXB0ZXNSZW5kdXMpOiBzdHJpbmcge1xuICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh1bmNhc3QodmFsdWUsIHIoXCJDb21wdGVzUmVuZHVzXCIpKSwgbnVsbCwgMilcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgdG9Db21wdGVSZW5kdShqc29uOiBzdHJpbmcpOiBDb21wdGVSZW5kdSB7XG4gICAgcmV0dXJuIGNhc3QoSlNPTi5wYXJzZShqc29uKSwgcihcIkNvbXB0ZVJlbmR1XCIpKVxuICB9XG5cbiAgcHVibGljIHN0YXRpYyBjb21wdGVSZW5kdVRvSnNvbih2YWx1ZTogQ29tcHRlUmVuZHUpOiBzdHJpbmcge1xuICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh1bmNhc3QodmFsdWUsIHIoXCJDb21wdGVSZW5kdVwiKSksIG51bGwsIDIpXG4gIH1cbn1cblxuZnVuY3Rpb24gaW52YWxpZFZhbHVlKHR5cDogYW55LCB2YWw6IGFueSwga2V5OiBhbnksIHBhcmVudDogYW55ID0gXCJcIik6IG5ldmVyIHtcbiAgY29uc3QgcHJldHR5VHlwID0gcHJldHR5VHlwZU5hbWUodHlwKVxuICBjb25zdCBwYXJlbnRUZXh0ID0gcGFyZW50ID8gYCBvbiAke3BhcmVudH1gIDogXCJcIlxuICBjb25zdCBrZXlUZXh0ID0ga2V5ID8gYCBmb3Iga2V5IFwiJHtrZXl9XCJgIDogXCJcIlxuICB0aHJvdyBFcnJvcihcbiAgICBgSW52YWxpZCB2YWx1ZSR7a2V5VGV4dH0ke3BhcmVudFRleHR9LiBFeHBlY3RlZCAke3ByZXR0eVR5cH0gYnV0IGdvdCAke0pTT04uc3RyaW5naWZ5KFxuICAgICAgdmFsLFxuICAgICl9YCxcbiAgKVxufVxuXG5mdW5jdGlvbiBwcmV0dHlUeXBlTmFtZSh0eXA6IGFueSk6IHN0cmluZyB7XG4gIGlmIChBcnJheS5pc0FycmF5KHR5cCkpIHtcbiAgICBpZiAodHlwLmxlbmd0aCA9PT0gMiAmJiB0eXBbMF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIGBhbiBvcHRpb25hbCAke3ByZXR0eVR5cGVOYW1lKHR5cFsxXSl9YFxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gYG9uZSBvZiBbJHt0eXBcbiAgICAgICAgLm1hcCgoYSkgPT4ge1xuICAgICAgICAgIHJldHVybiBwcmV0dHlUeXBlTmFtZShhKVxuICAgICAgICB9KVxuICAgICAgICAuam9pbihcIiwgXCIpfV1gXG4gICAgfVxuICB9IGVsc2UgaWYgKHR5cGVvZiB0eXAgPT09IFwib2JqZWN0XCIgJiYgdHlwLmxpdGVyYWwgIT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiB0eXAubGl0ZXJhbFxuICB9IGVsc2Uge1xuICAgIHJldHVybiB0eXBlb2YgdHlwXG4gIH1cbn1cblxuZnVuY3Rpb24ganNvblRvSlNQcm9wcyh0eXA6IGFueSk6IGFueSB7XG4gIGlmICh0eXAuanNvblRvSlMgPT09IHVuZGVmaW5lZCkge1xuICAgIGNvbnN0IG1hcDogYW55ID0ge31cbiAgICB0eXAucHJvcHMuZm9yRWFjaCgocDogYW55KSA9PiAobWFwW3AuanNvbl0gPSB7IGtleTogcC5qcywgdHlwOiBwLnR5cCB9KSlcbiAgICB0eXAuanNvblRvSlMgPSBtYXBcbiAgfVxuICByZXR1cm4gdHlwLmpzb25Ub0pTXG59XG5cbmZ1bmN0aW9uIGpzVG9KU09OUHJvcHModHlwOiBhbnkpOiBhbnkge1xuICBpZiAodHlwLmpzVG9KU09OID09PSB1bmRlZmluZWQpIHtcbiAgICBjb25zdCBtYXA6IGFueSA9IHt9XG4gICAgdHlwLnByb3BzLmZvckVhY2goKHA6IGFueSkgPT4gKG1hcFtwLmpzXSA9IHsga2V5OiBwLmpzb24sIHR5cDogcC50eXAgfSkpXG4gICAgdHlwLmpzVG9KU09OID0gbWFwXG4gIH1cbiAgcmV0dXJuIHR5cC5qc1RvSlNPTlxufVxuXG5mdW5jdGlvbiB0cmFuc2Zvcm0oXG4gIHZhbDogYW55LFxuICB0eXA6IGFueSxcbiAgZ2V0UHJvcHM6IGFueSxcbiAga2V5OiBhbnkgPSBcIlwiLFxuICBwYXJlbnQ6IGFueSA9IFwiXCIsXG4pOiBhbnkge1xuICBmdW5jdGlvbiB0cmFuc2Zvcm1QcmltaXRpdmUodHlwOiBzdHJpbmcsIHZhbDogYW55KTogYW55IHtcbiAgICBpZiAodHlwZW9mIHR5cCA9PT0gdHlwZW9mIHZhbCkgcmV0dXJuIHZhbFxuICAgIHJldHVybiBpbnZhbGlkVmFsdWUodHlwLCB2YWwsIGtleSwgcGFyZW50KVxuICB9XG5cbiAgZnVuY3Rpb24gdHJhbnNmb3JtVW5pb24odHlwczogYW55W10sIHZhbDogYW55KTogYW55IHtcbiAgICAvLyB2YWwgbXVzdCB2YWxpZGF0ZSBhZ2FpbnN0IG9uZSB0eXAgaW4gdHlwc1xuICAgIGNvbnN0IGwgPSB0eXBzLmxlbmd0aFxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbDsgaSsrKSB7XG4gICAgICBjb25zdCB0eXAgPSB0eXBzW2ldXG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gdHJhbnNmb3JtKHZhbCwgdHlwLCBnZXRQcm9wcylcbiAgICAgIH0gY2F0Y2ggKF8pIHt9XG4gICAgfVxuICAgIHJldHVybiBpbnZhbGlkVmFsdWUodHlwcywgdmFsLCBrZXksIHBhcmVudClcbiAgfVxuXG4gIGZ1bmN0aW9uIHRyYW5zZm9ybUVudW0oY2FzZXM6IHN0cmluZ1tdLCB2YWw6IGFueSk6IGFueSB7XG4gICAgaWYgKGNhc2VzLmluZGV4T2YodmFsKSAhPT0gLTEpIHJldHVybiB2YWxcbiAgICByZXR1cm4gaW52YWxpZFZhbHVlKFxuICAgICAgY2FzZXMubWFwKChhKSA9PiB7XG4gICAgICAgIHJldHVybiBsKGEpXG4gICAgICB9KSxcbiAgICAgIHZhbCxcbiAgICAgIGtleSxcbiAgICAgIHBhcmVudCxcbiAgICApXG4gIH1cblxuICBmdW5jdGlvbiB0cmFuc2Zvcm1BcnJheSh0eXA6IGFueSwgdmFsOiBhbnkpOiBhbnkge1xuICAgIC8vIHZhbCBtdXN0IGJlIGFuIGFycmF5IHdpdGggbm8gaW52YWxpZCBlbGVtZW50c1xuICAgIGlmICghQXJyYXkuaXNBcnJheSh2YWwpKSByZXR1cm4gaW52YWxpZFZhbHVlKGwoXCJhcnJheVwiKSwgdmFsLCBrZXksIHBhcmVudClcbiAgICByZXR1cm4gdmFsLm1hcCgoZWwpID0+IHRyYW5zZm9ybShlbCwgdHlwLCBnZXRQcm9wcykpXG4gIH1cblxuICBmdW5jdGlvbiB0cmFuc2Zvcm1EYXRlKHZhbDogYW55KTogYW55IHtcbiAgICBpZiAodmFsID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gbnVsbFxuICAgIH1cbiAgICBjb25zdCBkID0gbmV3IERhdGUodmFsKVxuICAgIGlmIChpc05hTihkLnZhbHVlT2YoKSkpIHtcbiAgICAgIHJldHVybiBpbnZhbGlkVmFsdWUobChcIkRhdGVcIiksIHZhbCwga2V5LCBwYXJlbnQpXG4gICAgfVxuICAgIHJldHVybiBkXG4gIH1cblxuICBmdW5jdGlvbiB0cmFuc2Zvcm1PYmplY3QoXG4gICAgcHJvcHM6IHsgW2s6IHN0cmluZ106IGFueSB9LFxuICAgIGFkZGl0aW9uYWw6IGFueSxcbiAgICB2YWw6IGFueSxcbiAgKTogYW55IHtcbiAgICBpZiAodmFsID09PSBudWxsIHx8IHR5cGVvZiB2YWwgIT09IFwib2JqZWN0XCIgfHwgQXJyYXkuaXNBcnJheSh2YWwpKSB7XG4gICAgICByZXR1cm4gaW52YWxpZFZhbHVlKGwocmVmIHx8IFwib2JqZWN0XCIpLCB2YWwsIGtleSwgcGFyZW50KVxuICAgIH1cbiAgICBjb25zdCByZXN1bHQ6IGFueSA9IHt9XG4gICAgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMocHJvcHMpLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgY29uc3QgcHJvcCA9IHByb3BzW2tleV1cbiAgICAgIGNvbnN0IHYgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodmFsLCBrZXkpXG4gICAgICAgID8gdmFsW2tleV1cbiAgICAgICAgOiB1bmRlZmluZWRcbiAgICAgIHJlc3VsdFtwcm9wLmtleV0gPSB0cmFuc2Zvcm0odiwgcHJvcC50eXAsIGdldFByb3BzLCBrZXksIHJlZilcbiAgICB9KVxuICAgIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHZhbCkuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChwcm9wcywga2V5KSkge1xuICAgICAgICByZXN1bHRba2V5XSA9IHRyYW5zZm9ybSh2YWxba2V5XSwgYWRkaXRpb25hbCwgZ2V0UHJvcHMsIGtleSwgcmVmKVxuICAgICAgfVxuICAgIH0pXG4gICAgcmV0dXJuIHJlc3VsdFxuICB9XG5cbiAgaWYgKHR5cCA9PT0gXCJhbnlcIikgcmV0dXJuIHZhbFxuICBpZiAodHlwID09PSBudWxsKSB7XG4gICAgaWYgKHZhbCA9PT0gbnVsbCkgcmV0dXJuIHZhbFxuICAgIHJldHVybiBpbnZhbGlkVmFsdWUodHlwLCB2YWwsIGtleSwgcGFyZW50KVxuICB9XG4gIGlmICh0eXAgPT09IGZhbHNlKSByZXR1cm4gaW52YWxpZFZhbHVlKHR5cCwgdmFsLCBrZXksIHBhcmVudClcbiAgbGV0IHJlZjogYW55ID0gdW5kZWZpbmVkXG4gIHdoaWxlICh0eXBlb2YgdHlwID09PSBcIm9iamVjdFwiICYmIHR5cC5yZWYgIT09IHVuZGVmaW5lZCkge1xuICAgIHJlZiA9IHR5cC5yZWZcbiAgICB0eXAgPSB0eXBlTWFwW3R5cC5yZWZdXG4gIH1cbiAgaWYgKEFycmF5LmlzQXJyYXkodHlwKSkgcmV0dXJuIHRyYW5zZm9ybUVudW0odHlwLCB2YWwpXG4gIGlmICh0eXBlb2YgdHlwID09PSBcIm9iamVjdFwiKSB7XG4gICAgcmV0dXJuIHR5cC5oYXNPd25Qcm9wZXJ0eShcInVuaW9uTWVtYmVyc1wiKVxuICAgICAgPyB0cmFuc2Zvcm1Vbmlvbih0eXAudW5pb25NZW1iZXJzLCB2YWwpXG4gICAgICA6IHR5cC5oYXNPd25Qcm9wZXJ0eShcImFycmF5SXRlbXNcIilcbiAgICAgICAgPyB0cmFuc2Zvcm1BcnJheSh0eXAuYXJyYXlJdGVtcywgdmFsKVxuICAgICAgICA6IHR5cC5oYXNPd25Qcm9wZXJ0eShcInByb3BzXCIpXG4gICAgICAgICAgPyB0cmFuc2Zvcm1PYmplY3QoZ2V0UHJvcHModHlwKSwgdHlwLmFkZGl0aW9uYWwsIHZhbClcbiAgICAgICAgICA6IGludmFsaWRWYWx1ZSh0eXAsIHZhbCwga2V5LCBwYXJlbnQpXG4gIH1cbiAgLy8gTnVtYmVycyBjYW4gYmUgcGFyc2VkIGJ5IERhdGUgYnV0IHNob3VsZG4ndCBiZS5cbiAgaWYgKHR5cCA9PT0gRGF0ZSAmJiB0eXBlb2YgdmFsICE9PSBcIm51bWJlclwiKSByZXR1cm4gdHJhbnNmb3JtRGF0ZSh2YWwpXG4gIHJldHVybiB0cmFuc2Zvcm1QcmltaXRpdmUodHlwLCB2YWwpXG59XG5cbmZ1bmN0aW9uIGNhc3Q8VD4odmFsOiBhbnksIHR5cDogYW55KTogVCB7XG4gIHJldHVybiB0cmFuc2Zvcm0odmFsLCB0eXAsIGpzb25Ub0pTUHJvcHMpXG59XG5cbmZ1bmN0aW9uIHVuY2FzdDxUPih2YWw6IFQsIHR5cDogYW55KTogYW55IHtcbiAgcmV0dXJuIHRyYW5zZm9ybSh2YWwsIHR5cCwganNUb0pTT05Qcm9wcylcbn1cblxuZnVuY3Rpb24gbCh0eXA6IGFueSkge1xuICByZXR1cm4geyBsaXRlcmFsOiB0eXAgfVxufVxuXG5mdW5jdGlvbiBhKHR5cDogYW55KSB7XG4gIHJldHVybiB7IGFycmF5SXRlbXM6IHR5cCB9XG59XG5cbmZ1bmN0aW9uIHUoLi4udHlwczogYW55W10pIHtcbiAgcmV0dXJuIHsgdW5pb25NZW1iZXJzOiB0eXBzIH1cbn1cblxuZnVuY3Rpb24gbyhwcm9wczogYW55W10sIGFkZGl0aW9uYWw6IGFueSkge1xuICByZXR1cm4geyBwcm9wcywgYWRkaXRpb25hbCB9XG59XG5cbi8vIGZ1bmN0aW9uIG0oYWRkaXRpb25hbDogYW55KSB7XG4vLyAgICAgcmV0dXJuIHsgcHJvcHM6IFtdLCBhZGRpdGlvbmFsIH07XG4vLyB9XG5cbmZ1bmN0aW9uIHIobmFtZTogc3RyaW5nKSB7XG4gIHJldHVybiB7IHJlZjogbmFtZSB9XG59XG5cbmNvbnN0IHR5cGVNYXA6IGFueSA9IHtcbiAgQ29tcHRlc1JlbmR1czogbyhcbiAgICBbeyBqc29uOiBcImNvbXB0ZXNSZW5kdXNcIiwganM6IFwiY29tcHRlc1JlbmR1c1wiLCB0eXA6IGEocihcIkNvbXB0ZVJlbmR1XCIpKSB9XSxcbiAgICBmYWxzZSxcbiAgKSxcbiAgQ29tcHRlUmVuZHU6IG8oXG4gICAgW1xuICAgICAgeyBqc29uOiBcInNjaGVtYVZlcnNpb25cIiwganM6IFwic2NoZW1hVmVyc2lvblwiLCB0eXA6IHUodW5kZWZpbmVkLCBcIlwiKSB9LFxuICAgICAgeyBqc29uOiBcInVpZFwiLCBqczogXCJ1aWRcIiwgdHlwOiB1KHVuZGVmaW5lZCwgXCJcIikgfSxcbiAgICAgIHsganNvbjogXCJzZWFuY2VSZWZcIiwganM6IFwic2VhbmNlUmVmXCIsIHR5cDogXCJcIiB9LFxuICAgICAgeyBqc29uOiBcInNlc3Npb25SZWZcIiwganM6IFwic2Vzc2lvblJlZlwiLCB0eXA6IFwiXCIgfSxcbiAgICAgIHsganNvbjogXCJtZXRhZG9ubmVlc1wiLCBqczogXCJtZXRhZG9ubmVlc1wiLCB0eXA6IHIoXCJNZXRhZG9ubmVlc1wiKSB9LFxuICAgICAgeyBqc29uOiBcImNvbnRlbnVcIiwganM6IFwiY29udGVudVwiLCB0eXA6IHIoXCJDb250ZW51XCIpIH0sXG4gICAgXSxcbiAgICBmYWxzZSxcbiAgKSxcbiAgQ29udGVudTogbyhcbiAgICBbXG4gICAgICB7IGpzb246IFwicXVhbnRpZW1lc1wiLCBqczogXCJxdWFudGllbWVzXCIsIHR5cDogcihcIlF1YW50aWVtZXNcIikgfSxcbiAgICAgIHtcbiAgICAgICAganNvbjogXCJvdXZlcnR1cmVTZWFuY2VcIixcbiAgICAgICAganM6IFwib3V2ZXJ0dXJlU2VhbmNlXCIsXG4gICAgICAgIHR5cDogdShhKHIoXCJQb2ludFwiKSksIHIoXCJQb2ludFwiKSksXG4gICAgICB9LFxuICAgICAgeyBqc29uOiBcInBvaW50XCIsIGpzOiBcInBvaW50XCIsIHR5cDogdShhKHIoXCJQb2ludFwiKSksIHIoXCJQb2ludFwiKSkgfSxcbiAgICAgIHsganNvbjogXCJmaW5TZWFuY2VcIiwganM6IFwiZmluU2VhbmNlXCIsIHR5cDogdSh1bmRlZmluZWQsIHIoXCJGaW5TZWFuY2VcIikpIH0sXG4gICAgICB7XG4gICAgICAgIGpzb246IFwicGFyYWdyYXBoZVwiLFxuICAgICAgICBqczogXCJwYXJhZ3JhcGhlXCIsXG4gICAgICAgIHR5cDogdSh1bmRlZmluZWQsIGEocihcIlBvaW50XCIpKSksXG4gICAgICB9LFxuICAgIF0sXG4gICAgZmFsc2UsXG4gICksXG4gIEZpblNlYW5jZTogbyhbeyBqc29uOiBcInBvaW50XCIsIGpzOiBcInBvaW50XCIsIHR5cDogcihcIlBvaW50XCIpIH1dLCBmYWxzZSksXG4gIE9yYXRldXJzOiBvKFxuICAgIFtcbiAgICAgIHtcbiAgICAgICAganNvbjogXCJvcmF0ZXVyXCIsXG4gICAgICAgIGpzOiBcIm9yYXRldXJcIixcbiAgICAgICAgdHlwOiB1KGEocihcIk9yYXRldXJFbGVtZW50XCIpKSwgcihcIk9yYXRldXJFbGVtZW50XCIpKSxcbiAgICAgIH0sXG4gICAgXSxcbiAgICBmYWxzZSxcbiAgKSxcbiAgT3JhdGV1ckVsZW1lbnQ6IG8oXG4gICAgW1xuICAgICAgeyBqc29uOiBcIm5vbVwiLCBqczogXCJub21cIiwgdHlwOiB1KHVuZGVmaW5lZCwgXCJcIikgfSxcbiAgICAgIHsganNvbjogXCJpZFwiLCBqczogXCJpZFwiLCB0eXA6IHUodW5kZWZpbmVkLCBcIlwiKSB9LFxuICAgICAgeyBqc29uOiBcInF1YWxpdGVcIiwganM6IFwicXVhbGl0ZVwiLCB0eXA6IHUodW5kZWZpbmVkLCBcIlwiKSB9LFxuICAgIF0sXG4gICAgZmFsc2UsXG4gICksXG4gIFRleHRlOiBvKFxuICAgIFtcbiAgICAgIHsganNvbjogXCJfXCIsIGpzOiBcIl9cIiwgdHlwOiB1KHVuZGVmaW5lZCwgXCJcIikgfSxcbiAgICAgIHsganNvbjogXCJpZF9zeWNlcm9uXCIsIGpzOiBcImlkX3N5Y2Vyb25cIiwgdHlwOiB1KHVuZGVmaW5lZCwgXCJcIikgfSxcbiAgICAgIHsganNvbjogXCJzdGltZVwiLCBqczogXCJzdGltZVwiLCB0eXA6IHUodW5kZWZpbmVkLCBcIlwiKSB9LFxuICAgICAgeyBqc29uOiBcInN1cFwiLCBqczogXCJzdXBcIiwgdHlwOiB1KHVuZGVmaW5lZCwgXCJcIikgfSxcbiAgICAgIHtcbiAgICAgICAganNvbjogXCJsaWVuQWR0XCIsXG4gICAgICAgIGpzOiBcImxpZW5BZHRcIixcbiAgICAgICAgdHlwOiB1KHVuZGVmaW5lZCwgdShhKHIoXCJUZXh0ZVwiKSksIHIoXCJUZXh0ZVwiKSkpLFxuICAgICAgfSxcbiAgICBdLFxuICAgIGZhbHNlLFxuICApLFxuICBQb2ludDogbyhcbiAgICBbXG4gICAgICB7IGpzb246IFwibml2cG9pbnRcIiwganM6IFwibml2cG9pbnRcIiwgdHlwOiB1KHVuZGVmaW5lZCwgXCJcIikgfSxcbiAgICAgIHsganNvbjogXCJ2YWxldXJfcHRzb2RqXCIsIGpzOiBcInZhbGV1cl9wdHNvZGpcIiwgdHlwOiB1KHVuZGVmaW5lZCwgXCJcIikgfSxcbiAgICAgIHsganNvbjogXCJvcmRpbmFsX3ByaXNlXCIsIGpzOiBcIm9yZGluYWxfcHJpc2VcIiwgdHlwOiB1KHVuZGVmaW5lZCwgXCJcIikgfSxcbiAgICAgIHsganNvbjogXCJpZF9wcmVwYXJhdGlvblwiLCBqczogXCJpZF9wcmVwYXJhdGlvblwiLCB0eXA6IHUodW5kZWZpbmVkLCBcIlwiKSB9LFxuICAgICAge1xuICAgICAgICBqc29uOiBcIm9yZHJlX2Fic29sdV9zZWFuY2VcIixcbiAgICAgICAganM6IFwib3JkcmVfYWJzb2x1X3NlYW5jZVwiLFxuICAgICAgICB0eXA6IHUodW5kZWZpbmVkLCBcIlwiKSxcbiAgICAgIH0sXG4gICAgICB7IGpzb246IFwiY29kZV9ncmFtbWFpcmVcIiwganM6IFwiY29kZV9ncmFtbWFpcmVcIiwgdHlwOiB1KHVuZGVmaW5lZCwgXCJcIikgfSxcbiAgICAgIHsganNvbjogXCJjb2RlX3N0eWxlXCIsIGpzOiBcImNvZGVfc3R5bGVcIiwgdHlwOiB1KHVuZGVmaW5lZCwgXCJcIikgfSxcbiAgICAgIHsganNvbjogXCJjb2RlX3Bhcm9sZVwiLCBqczogXCJjb2RlX3Bhcm9sZVwiLCB0eXA6IHUodW5kZWZpbmVkLCBcIlwiKSB9LFxuICAgICAgeyBqc29uOiBcInNvbW1haXJlXCIsIGpzOiBcInNvbW1haXJlXCIsIHR5cDogdSh1bmRlZmluZWQsIFwiXCIpIH0sXG4gICAgICB7IGpzb246IFwiaWRfc3ljZXJvblwiLCBqczogXCJpZF9zeWNlcm9uXCIsIHR5cDogdSh1bmRlZmluZWQsIFwiXCIpIH0sXG4gICAgICB7IGpzb246IFwidmFsZXVyXCIsIGpzOiBcInZhbGV1clwiLCB0eXA6IHUodW5kZWZpbmVkLCBcIlwiKSB9LFxuICAgICAge1xuICAgICAgICBqc29uOiBcIm9yYXRldXJzXCIsXG4gICAgICAgIGpzOiBcIm9yYXRldXJzXCIsXG4gICAgICAgIHR5cDogdShyKFwiT3JhdGV1cnNcIiksIHUoXCJcIiwgdW5kZWZpbmVkKSksXG4gICAgICB9LFxuICAgICAgeyBqc29uOiBcInRleHRlXCIsIGpzOiBcInRleHRlXCIsIHR5cDogdShyKFwiVGV4dGVcIiksIHUoXCJcIiwgdW5kZWZpbmVkKSkgfSxcbiAgICAgIHtcbiAgICAgICAganNvbjogXCJwYXJhZ3JhcGhlXCIsXG4gICAgICAgIGpzOiBcInBhcmFncmFwaGVcIixcbiAgICAgICAgdHlwOiB1KHVuZGVmaW5lZCwgdShhKHIoXCJQb2ludFwiKSksIHIoXCJQb2ludFwiKSkpLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAganNvbjogXCJpbnRlckV4dHJhY3Rpb25cIixcbiAgICAgICAganM6IFwiaW50ZXJFeHRyYWN0aW9uXCIsXG4gICAgICAgIHR5cDogdSh1bmRlZmluZWQsIHUoYShyKFwiUG9pbnRcIikpLCByKFwiUG9pbnRcIikpKSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGpzb246IFwicG9pbnRcIixcbiAgICAgICAganM6IFwicG9pbnRcIixcbiAgICAgICAgdHlwOiB1KHVuZGVmaW5lZCwgdShhKHIoXCJQb2ludFwiKSksIHIoXCJQb2ludFwiKSkpLFxuICAgICAgfSxcbiAgICAgIHsganNvbjogXCJzdHJ1Y3R1cmVcIiwganM6IFwic3RydWN0dXJlXCIsIHR5cDogdSh1bmRlZmluZWQsIFwiXCIpIH0sXG4gICAgICB7IGpzb246IFwiaWRfYWN0ZXVyXCIsIGpzOiBcImlkX2FjdGV1clwiLCB0eXA6IHUodW5kZWZpbmVkLCBcIlwiKSB9LFxuICAgICAgeyBqc29uOiBcImlkX21hbmRhdFwiLCBqczogXCJpZF9tYW5kYXRcIiwgdHlwOiB1KHVuZGVmaW5lZCwgXCJcIikgfSxcbiAgICAgIHtcbiAgICAgICAganNvbjogXCJpZF9ub21pbmF0aW9uX29lXCIsXG4gICAgICAgIGpzOiBcImlkX25vbWluYXRpb25fb2VcIixcbiAgICAgICAgdHlwOiB1KHVuZGVmaW5lZCwgXCJcIiksXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBqc29uOiBcImlkX25vbWluYXRpb25fb3BcIixcbiAgICAgICAganM6IFwiaWRfbm9taW5hdGlvbl9vcFwiLFxuICAgICAgICB0eXA6IHUodW5kZWZpbmVkLCBcIlwiKSxcbiAgICAgIH0sXG4gICAgICB7IGpzb246IFwib3JhdGV1clwiLCBqczogXCJvcmF0ZXVyXCIsIHR5cDogdSh1bmRlZmluZWQsIFwiXCIpIH0sXG4gICAgICB7IGpzb246IFwiYmliYXJkXCIsIGpzOiBcImJpYmFyZFwiLCB0eXA6IHUodW5kZWZpbmVkLCBcIlwiKSB9LFxuICAgICAgeyBqc29uOiBcImFydFwiLCBqczogXCJhcnRcIiwgdHlwOiB1KHVuZGVmaW5lZCwgXCJcIikgfSxcbiAgICAgIHsganNvbjogXCJhZHRcIiwganM6IFwiYWR0XCIsIHR5cDogdSh1bmRlZmluZWQsIFwiXCIpIH0sXG4gICAgICB7IGpzb246IFwic3NhZHRcIiwganM6IFwic3NhZHRcIiwgdHlwOiB1KHVuZGVmaW5lZCwgXCJcIikgfSxcbiAgICAgIHsganNvbjogXCJyb2xlZGViYXRcIiwganM6IFwicm9sZWRlYmF0XCIsIHR5cDogdSh1bmRlZmluZWQsIFwiXCIpIH0sXG4gICAgICB7IGpzb246IFwidHlwZV9kZWJhdFwiLCBqczogXCJ0eXBlX2RlYmF0XCIsIHR5cDogdSh1bmRlZmluZWQsIFwiXCIpIH0sXG4gICAgICB7XG4gICAgICAgIGpzb246IFwiY2hhbmdlbWVudFByZXNpZGVuY2VcIixcbiAgICAgICAganM6IFwiY2hhbmdlbWVudFByZXNpZGVuY2VcIixcbiAgICAgICAgdHlwOiB1KHVuZGVmaW5lZCwgcihcIlBvaW50XCIpKSxcbiAgICAgIH0sXG4gICAgICB7IGpzb246IFwiZGVjaXNpb25cIiwganM6IFwiZGVjaXNpb25cIiwgdHlwOiB1KHVuZGVmaW5lZCwgcihcIkRlY2lzaW9uXCIpKSB9LFxuICAgICAge1xuICAgICAgICBqc29uOiBcIm91dmVydHVyZVNlYW5jZVwiLFxuICAgICAgICBqczogXCJvdXZlcnR1cmVTZWFuY2VcIixcbiAgICAgICAgdHlwOiB1KHVuZGVmaW5lZCwgcihcIlBvaW50XCIpKSxcbiAgICAgIH0sXG4gICAgICB7IGpzb246IFwibm9tX29yYXRldXJcIiwganM6IFwibm9tX29yYXRldXJcIiwgdHlwOiB1KHVuZGVmaW5lZCwgXCJcIikgfSxcbiAgICAgIHsganNvbjogXCJxdWFsaXRlXCIsIGpzOiBcInF1YWxpdGVcIiwgdHlwOiB1KHVuZGVmaW5lZCwgXCJcIikgfSxcbiAgICBdLFxuICAgIGZhbHNlLFxuICApLFxuICBRdWFudGllbWVzOiBvKFxuICAgIFtcbiAgICAgIHsganNvbjogXCJqb3VybmVlXCIsIGpzOiBcImpvdXJuZWVcIiwgdHlwOiBcIlwiIH0sXG4gICAgICB7IGpzb246IFwic2Vzc2lvblwiLCBqczogXCJzZXNzaW9uXCIsIHR5cDogXCJcIiB9LFxuICAgIF0sXG4gICAgZmFsc2UsXG4gICksXG4gIE1ldGFkb25uZWVzOiBvKFxuICAgIFtcbiAgICAgIHsganNvbjogXCJkYXRlU2VhbmNlXCIsIGpzOiBcImRhdGVTZWFuY2VcIiwgdHlwOiBcIlwiIH0sXG4gICAgICB7IGpzb246IFwiZGF0ZVNlYW5jZUpvdXJcIiwganM6IFwiZGF0ZVNlYW5jZUpvdXJcIiwgdHlwOiBcIlwiIH0sXG4gICAgICB7IGpzb246IFwibnVtU2VhbmNlSm91clwiLCBqczogXCJudW1TZWFuY2VKb3VyXCIsIHR5cDogXCJcIiB9LFxuICAgICAgeyBqc29uOiBcIm51bVNlYW5jZVwiLCBqczogXCJudW1TZWFuY2VcIiwgdHlwOiBcIlwiIH0sXG4gICAgICB7IGpzb246IFwidHlwZUFzc2VtYmxlZVwiLCBqczogXCJ0eXBlQXNzZW1ibGVlXCIsIHR5cDogXCJcIiB9LFxuICAgICAgeyBqc29uOiBcImxlZ2lzbGF0dXJlXCIsIGpzOiBcImxlZ2lzbGF0dXJlXCIsIHR5cDogXCJcIiB9LFxuICAgICAgeyBqc29uOiBcInNlc3Npb25cIiwganM6IFwic2Vzc2lvblwiLCB0eXA6IFwiXCIgfSxcbiAgICAgIHsganNvbjogXCJub21GaWNoaWVySm9cIiwganM6IFwibm9tRmljaGllckpvXCIsIHR5cDogXCJcIiB9LFxuICAgICAgeyBqc29uOiBcInZhbGlkaXRlXCIsIGpzOiBcInZhbGlkaXRlXCIsIHR5cDogXCJcIiB9LFxuICAgICAgeyBqc29uOiBcImV0YXRcIiwganM6IFwiZXRhdFwiLCB0eXA6IFwiXCIgfSxcbiAgICAgIHsganNvbjogXCJkaWZmdXNpb25cIiwganM6IFwiZGlmZnVzaW9uXCIsIHR5cDogXCJcIiB9LFxuICAgICAgeyBqc29uOiBcInZlcnNpb25cIiwganM6IFwidmVyc2lvblwiLCB0eXA6IFwiXCIgfSxcbiAgICAgIHsganNvbjogXCJlbnZpcm9ubmVtZW50XCIsIGpzOiBcImVudmlyb25uZW1lbnRcIiwgdHlwOiBcIlwiIH0sXG4gICAgICB7IGpzb246IFwiaGV1cmVHZW5lcmF0aW9uXCIsIGpzOiBcImhldXJlR2VuZXJhdGlvblwiLCB0eXA6IERhdGUgfSxcbiAgICAgIHsganNvbjogXCJzb21tYWlyZVwiLCBqczogXCJzb21tYWlyZVwiLCB0eXA6IHIoXCJTb21tYWlyZVwiKSB9LFxuICAgIF0sXG4gICAgZmFsc2UsXG4gICksXG4gIFNvbW1haXJlOiBvKFxuICAgIFtcbiAgICAgIHsganNvbjogXCJwcmVzaWRlbnRTZWFuY2VcIiwganM6IFwicHJlc2lkZW50U2VhbmNlXCIsIHR5cDogcihcIlRleHRlXCIpIH0sXG4gICAgICB7XG4gICAgICAgIGpzb246IFwic29tbWFpcmUxXCIsXG4gICAgICAgIGpzOiBcInNvbW1haXJlMVwiLFxuICAgICAgICB0eXA6IHUoYShyKFwiU29tbWFpcmVFbGVtZW50XCIpKSwgcihcIlNvbW1haXJlRWxlbWVudFwiKSksXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBqc29uOiBcInNvbW1haXJlM1wiLFxuICAgICAgICBqczogXCJzb21tYWlyZTNcIixcbiAgICAgICAgdHlwOiB1KHVuZGVmaW5lZCwgdShhKHIoXCJTb21tYWlyZUVsZW1lbnRcIikpLCByKFwiU29tbWFpcmVFbGVtZW50XCIpKSksXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBqc29uOiBcInNvbW1haXJlMlwiLFxuICAgICAgICBqczogXCJzb21tYWlyZTJcIixcbiAgICAgICAgdHlwOiB1KHVuZGVmaW5lZCwgdShhKHIoXCJTb21tYWlyZUVsZW1lbnRcIikpLCByKFwiU29tbWFpcmVFbGVtZW50XCIpKSksXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBqc29uOiBcInBhcmFcIixcbiAgICAgICAganM6IFwicGFyYVwiLFxuICAgICAgICB0eXA6IHUodW5kZWZpbmVkLCB1KGEocihcIlRleHRlXCIpKSwgcihcIlRleHRlXCIpKSksXG4gICAgICB9LFxuICAgIF0sXG4gICAgZmFsc2UsXG4gICksXG4gIFNvbW1haXJlRWxlbWVudDogbyhcbiAgICBbXG4gICAgICB7IGpzb246IFwidmFsZXVyX3B0c19vZGpcIiwganM6IFwidmFsZXVyX3B0c19vZGpcIiwgdHlwOiB1KHVuZGVmaW5lZCwgXCJcIikgfSxcbiAgICAgIHtcbiAgICAgICAganNvbjogXCJ0aXRyZVN0cnVjdFwiLFxuICAgICAgICBqczogXCJ0aXRyZVN0cnVjdFwiLFxuICAgICAgICB0eXA6IHUodW5kZWZpbmVkLCByKFwiVGl0cmVTdHJ1Y3RcIikpLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAganNvbjogXCJwYXJhXCIsXG4gICAgICAgIGpzOiBcInBhcmFcIixcbiAgICAgICAgdHlwOiB1KHVuZGVmaW5lZCwgdShhKHUocihcIlRleHRlXCIpLCBcIlwiKSksIHIoXCJUZXh0ZVwiKSkpLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAganNvbjogXCJzb21tYWlyZTJcIixcbiAgICAgICAganM6IFwic29tbWFpcmUyXCIsXG4gICAgICAgIHR5cDogdSh1bmRlZmluZWQsIHUoYShyKFwiU29tbWFpcmVFbGVtZW50XCIpKSwgcihcIlNvbW1haXJlRWxlbWVudFwiKSkpLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAganNvbjogXCJzb21tYWlyZTNcIixcbiAgICAgICAganM6IFwic29tbWFpcmUzXCIsXG4gICAgICAgIHR5cDogdSh1bmRlZmluZWQsIHUoYShyKFwiU29tbWFpcmVFbGVtZW50XCIpKSwgcihcIlNvbW1haXJlRWxlbWVudFwiKSkpLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAganNvbjogXCJwcmVzaWRlbnRTZWFuY2VcIixcbiAgICAgICAganM6IFwicHJlc2lkZW50U2VhbmNlXCIsXG4gICAgICAgIHR5cDogdSh1bmRlZmluZWQsIHUoYShyKFwiVGV4dGVcIikpLCByKFwiVGV4dGVcIikpKSxcbiAgICAgIH0sXG4gICAgICB7IGpzb246IFwidHlwZV9kZWJhdFwiLCBqczogXCJ0eXBlX2RlYmF0XCIsIHR5cDogdSh1bmRlZmluZWQsIFwiXCIpIH0sXG4gICAgXSxcbiAgICBmYWxzZSxcbiAgKSxcbiAgVGl0cmVTdHJ1Y3Q6IG8oXG4gICAgW1xuICAgICAgeyBqc29uOiBcImlkX3N5Y2Vyb25cIiwganM6IFwiaWRfc3ljZXJvblwiLCB0eXA6IFwiXCIgfSxcbiAgICAgIHsganNvbjogXCJpbnRpdHVsZVwiLCBqczogXCJpbnRpdHVsZVwiLCB0eXA6IHUodW5kZWZpbmVkLCBcIlwiKSB9LFxuICAgICAgeyBqc29uOiBcInNvdXNJbnRpdHVsZVwiLCBqczogXCJzb3VzSW50aXR1bGVcIiwgdHlwOiB1KHVuZGVmaW5lZCwgXCJcIikgfSxcbiAgICAgIHsganNvbjogXCJ0eXBlX2RlYmF0XCIsIGpzOiBcInR5cGVfZGViYXRcIiwgdHlwOiB1KHVuZGVmaW5lZCwgXCJcIikgfSxcbiAgICBdLFxuICAgIGZhbHNlLFxuICApLFxuICBEZWNpc2lvbjogW1xuICAgIFwiQURPUFRJT04gYW1lbmRlbWVudCAobWFpbiBsZXbDqWUpIGFkdFwiLFxuICAgIFwiQURPUFRJT04gZOKAmXVuIGFydGljbGUgKHZvdGUgw6AgbWFpbiBsZXbDqWUpXCIsXG4gICAgXCJBRE9QVElPTiBk4oCZdW4gc291cy1hbWVuZGVtZW50IChtYWluIGxldsOpZSkgc3MtYWR0XCIsXG4gICAgXCJBRE9QVElPTiBkZSBwbHVzaWV1cnMgYW1lbmRlbWVudHMgKG1haW4gbGV2w6llKSBhZHRzXCIsXG4gICAgXCJBRE9QVElPTiBkZSBwbHVzaWV1cnMgc291cy1hbWVuZGVtZW50cyAobWFpbiBsZXbDqWUpIHNzLWFkdHNcIixcbiAgICBcIlwiLFxuICAgIFwiUkVKRVQgZOKAmXVuIGFtZW5kZW1lbnQgKG1haW4gbGV2w6llKSBhZHRcIixcbiAgICBcIlJFSkVUIGTigJl1biBhcnRpY2xlICh2b3RlIMOgIG1haW4gbGV2w6llKVwiLFxuICAgIFwiUkVKRVQgZOKAmXVuIHNvdXMtYW1lbmRlbWVudCAobWFpbiBsZXbDqWUpIHNzLWFkdFwiLFxuICAgIFwiUkVKRVQgZGUgcGx1c2lldXJzIGFtZW5kZW1lbnRzIChtYWluIGxldsOpZSkgYWR0c1wiLFxuICAgIFwiUkVKRVQgZGUgcGx1c2lldXJzIHNvdXMtYW1lbmRlbWVudHMgKG1haW4gbGV2w6llKSBzcy1hZHRzXCIsXG4gICAgXCJSRUpFVCBtb3Rpb24gZGUgcmVqZXQgcHLDqWFsYWJsZSAobWFpbiBsZXbDqWUpXCIsXG4gIF0sXG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUEsSUE2Q1lBLFFBQVEsR0FBQUMsT0FBQSxDQUFBRCxRQUFBLDBCQUFSQSxRQUFRO0VBQVJBLFFBQVE7RUFBUkEsUUFBUTtFQUFSQSxRQUFRO0VBQVJBLFFBQVE7RUFBUkEsUUFBUTtFQUFSQSxRQUFRO0VBQVJBLFFBQVE7RUFBUkEsUUFBUTtFQUFSQSxRQUFRO0VBQVJBLFFBQVE7RUFBUkEsUUFBUTtFQUFSQSxRQUFRO0VBQUEsT0FBUkEsUUFBUTtBQUFBO0FBbUdwQjtBQUNBO0FBQUEsSUFDYUUsT0FBTyxHQUFBRCxPQUFBLENBQUFDLE9BQUE7RUFBQSxTQUFBQSxRQUFBO0lBQUFDLGVBQUEsT0FBQUQsT0FBQTtFQUFBO0VBQUEsT0FBQUUsWUFBQSxDQUFBRixPQUFBO0lBQUFHLEdBQUE7SUFBQUMsS0FBQSxFQUNsQixTQUFjQyxlQUFlQSxDQUFDQyxJQUFZLEVBQWlCO01BQ3pELE9BQU9DLElBQUksQ0FBQ0MsSUFBSSxDQUFDQyxLQUFLLENBQUNILElBQUksQ0FBQyxFQUFFSSxDQUFDLENBQUMsZUFBZSxDQUFDLENBQUM7SUFDbkQ7RUFBQztJQUFBUCxHQUFBO0lBQUFDLEtBQUEsRUFFRCxTQUFjTyxtQkFBbUJBLENBQUNQLEtBQW9CLEVBQVU7TUFDOUQsT0FBT0ksSUFBSSxDQUFDSSxTQUFTLENBQUNDLE1BQU0sQ0FBQ1QsS0FBSyxFQUFFTSxDQUFDLENBQUMsZUFBZSxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ25FO0VBQUM7SUFBQVAsR0FBQTtJQUFBQyxLQUFBLEVBRUQsU0FBY1UsYUFBYUEsQ0FBQ1IsSUFBWSxFQUFlO01BQ3JELE9BQU9DLElBQUksQ0FBQ0MsSUFBSSxDQUFDQyxLQUFLLENBQUNILElBQUksQ0FBQyxFQUFFSSxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDakQ7RUFBQztJQUFBUCxHQUFBO0lBQUFDLEtBQUEsRUFFRCxTQUFjVyxpQkFBaUJBLENBQUNYLEtBQWtCLEVBQVU7TUFDMUQsT0FBT0ksSUFBSSxDQUFDSSxTQUFTLENBQUNDLE1BQU0sQ0FBQ1QsS0FBSyxFQUFFTSxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ2pFO0VBQUM7QUFBQTtBQUdILFNBQVNNLFlBQVlBLENBQUNDLEdBQVEsRUFBRUMsR0FBUSxFQUFFZixHQUFRLEVBQTJCO0VBQUEsSUFBekJnQixNQUFXLEdBQUFDLFNBQUEsQ0FBQUMsTUFBQSxRQUFBRCxTQUFBLFFBQUFFLFNBQUEsR0FBQUYsU0FBQSxNQUFHLEVBQUU7RUFDbEUsSUFBTUcsU0FBUyxHQUFHQyxjQUFjLENBQUNQLEdBQUcsQ0FBQztFQUNyQyxJQUFNUSxVQUFVLEdBQUdOLE1BQU0sVUFBQU8sTUFBQSxDQUFVUCxNQUFNLElBQUssRUFBRTtFQUNoRCxJQUFNUSxPQUFPLEdBQUd4QixHQUFHLGlCQUFBdUIsTUFBQSxDQUFnQnZCLEdBQUcsVUFBTSxFQUFFO0VBQzlDLE1BQU15QixLQUFLLGlCQUFBRixNQUFBLENBQ09DLE9BQU8sRUFBQUQsTUFBQSxDQUFHRCxVQUFVLGlCQUFBQyxNQUFBLENBQWNILFNBQVMsZUFBQUcsTUFBQSxDQUFZbEIsSUFBSSxDQUFDSSxTQUFTLENBQ25GTSxHQUNGLENBQUMsQ0FDSCxDQUFDO0FBQ0g7QUFFQSxTQUFTTSxjQUFjQSxDQUFDUCxHQUFRLEVBQVU7RUFDeEMsSUFBSVksS0FBSyxDQUFDQyxPQUFPLENBQUNiLEdBQUcsQ0FBQyxFQUFFO0lBQ3RCLElBQUlBLEdBQUcsQ0FBQ0ksTUFBTSxLQUFLLENBQUMsSUFBSUosR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLSyxTQUFTLEVBQUU7TUFDNUMsc0JBQUFJLE1BQUEsQ0FBc0JGLGNBQWMsQ0FBQ1AsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzlDLENBQUMsTUFBTTtNQUNMLGtCQUFBUyxNQUFBLENBQWtCVCxHQUFHLENBQ2xCYyxHQUFHLENBQUMsVUFBQ0MsQ0FBQyxFQUFLO1FBQ1YsT0FBT1IsY0FBYyxDQUFDUSxDQUFDLENBQUM7TUFDMUIsQ0FBQyxDQUFDLENBQ0RDLElBQUksQ0FBQyxJQUFJLENBQUM7SUFDZjtFQUNGLENBQUMsTUFBTSxJQUFJQyxPQUFBLENBQU9qQixHQUFHLE1BQUssUUFBUSxJQUFJQSxHQUFHLENBQUNrQixPQUFPLEtBQUtiLFNBQVMsRUFBRTtJQUMvRCxPQUFPTCxHQUFHLENBQUNrQixPQUFPO0VBQ3BCLENBQUMsTUFBTTtJQUNMLE9BQUFELE9BQUEsQ0FBY2pCLEdBQUc7RUFDbkI7QUFDRjtBQUVBLFNBQVNtQixhQUFhQSxDQUFDbkIsR0FBUSxFQUFPO0VBQ3BDLElBQUlBLEdBQUcsQ0FBQ29CLFFBQVEsS0FBS2YsU0FBUyxFQUFFO0lBQzlCLElBQU1TLEdBQVEsR0FBRyxDQUFDLENBQUM7SUFDbkJkLEdBQUcsQ0FBQ3FCLEtBQUssQ0FBQ0MsT0FBTyxDQUFDLFVBQUNDLENBQU07TUFBQSxPQUFNVCxHQUFHLENBQUNTLENBQUMsQ0FBQ2xDLElBQUksQ0FBQyxHQUFHO1FBQUVILEdBQUcsRUFBRXFDLENBQUMsQ0FBQ0MsRUFBRTtRQUFFeEIsR0FBRyxFQUFFdUIsQ0FBQyxDQUFDdkI7TUFBSSxDQUFDO0lBQUEsQ0FBQyxDQUFDO0lBQ3hFQSxHQUFHLENBQUNvQixRQUFRLEdBQUdOLEdBQUc7RUFDcEI7RUFDQSxPQUFPZCxHQUFHLENBQUNvQixRQUFRO0FBQ3JCO0FBRUEsU0FBU0ssYUFBYUEsQ0FBQ3pCLEdBQVEsRUFBTztFQUNwQyxJQUFJQSxHQUFHLENBQUMwQixRQUFRLEtBQUtyQixTQUFTLEVBQUU7SUFDOUIsSUFBTVMsR0FBUSxHQUFHLENBQUMsQ0FBQztJQUNuQmQsR0FBRyxDQUFDcUIsS0FBSyxDQUFDQyxPQUFPLENBQUMsVUFBQ0MsQ0FBTTtNQUFBLE9BQU1ULEdBQUcsQ0FBQ1MsQ0FBQyxDQUFDQyxFQUFFLENBQUMsR0FBRztRQUFFdEMsR0FBRyxFQUFFcUMsQ0FBQyxDQUFDbEMsSUFBSTtRQUFFVyxHQUFHLEVBQUV1QixDQUFDLENBQUN2QjtNQUFJLENBQUM7SUFBQSxDQUFDLENBQUM7SUFDeEVBLEdBQUcsQ0FBQzBCLFFBQVEsR0FBR1osR0FBRztFQUNwQjtFQUNBLE9BQU9kLEdBQUcsQ0FBQzBCLFFBQVE7QUFDckI7QUFFQSxTQUFTQyxTQUFTQSxDQUNoQjFCLEdBQVEsRUFDUkQsR0FBUSxFQUNSNEIsUUFBYSxFQUdSO0VBQUEsSUFGTDFDLEdBQVEsR0FBQWlCLFNBQUEsQ0FBQUMsTUFBQSxRQUFBRCxTQUFBLFFBQUFFLFNBQUEsR0FBQUYsU0FBQSxNQUFHLEVBQUU7RUFBQSxJQUNiRCxNQUFXLEdBQUFDLFNBQUEsQ0FBQUMsTUFBQSxRQUFBRCxTQUFBLFFBQUFFLFNBQUEsR0FBQUYsU0FBQSxNQUFHLEVBQUU7RUFFaEIsU0FBUzBCLGtCQUFrQkEsQ0FBQzdCLEdBQVcsRUFBRUMsR0FBUSxFQUFPO0lBQ3RELElBQUlnQixPQUFBLENBQU9qQixHQUFHLE1BQUFpQixPQUFBLENBQVloQixHQUFHLEdBQUUsT0FBT0EsR0FBRztJQUN6QyxPQUFPRixZQUFZLENBQUNDLEdBQUcsRUFBRUMsR0FBRyxFQUFFZixHQUFHLEVBQUVnQixNQUFNLENBQUM7RUFDNUM7RUFFQSxTQUFTNEIsY0FBY0EsQ0FBQ0MsSUFBVyxFQUFFOUIsR0FBUSxFQUFPO0lBQ2xEO0lBQ0EsSUFBTStCLENBQUMsR0FBR0QsSUFBSSxDQUFDM0IsTUFBTTtJQUNyQixLQUFLLElBQUk2QixDQUFDLEdBQUcsQ0FBQyxFQUFFQSxDQUFDLEdBQUdELENBQUMsRUFBRUMsQ0FBQyxFQUFFLEVBQUU7TUFDMUIsSUFBTWpDLElBQUcsR0FBRytCLElBQUksQ0FBQ0UsQ0FBQyxDQUFDO01BQ25CLElBQUk7UUFDRixPQUFPTixTQUFTLENBQUMxQixHQUFHLEVBQUVELElBQUcsRUFBRTRCLFFBQVEsQ0FBQztNQUN0QyxDQUFDLENBQUMsT0FBT00sQ0FBQyxFQUFFLENBQUM7SUFDZjtJQUNBLE9BQU9uQyxZQUFZLENBQUNnQyxJQUFJLEVBQUU5QixHQUFHLEVBQUVmLEdBQUcsRUFBRWdCLE1BQU0sQ0FBQztFQUM3QztFQUVBLFNBQVNpQyxhQUFhQSxDQUFDQyxLQUFlLEVBQUVuQyxHQUFRLEVBQU87SUFDckQsSUFBSW1DLEtBQUssQ0FBQ0MsT0FBTyxDQUFDcEMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsT0FBT0EsR0FBRztJQUN6QyxPQUFPRixZQUFZLENBQ2pCcUMsS0FBSyxDQUFDdEIsR0FBRyxDQU