File manager - Edit - /home/wwwroot/camplus.hk/master.camplus.hk/public_html/assets/custom/survey-creator/survey-creator.js
Back
/*! * SurveyJS Creator v1.1.22 * (c) Devsoft Baltic O� - http://surveyjs.io/ * Github: https://github.com/surveyjs/survey-creator * License: https://surveyjs.io/Licenses#BuildSurvey */ (function webpackUniversalModuleDefinition(root, factory) { if(typeof exports === 'object' && typeof module === 'object') module.exports = factory(require("knockout"), require("survey-knockout")); else if(typeof define === 'function' && define.amd) define("SurveyCreator", ["knockout", "survey-knockout"], factory); else if(typeof exports === 'object') exports["SurveyCreator"] = factory(require("knockout"), require("survey-knockout")); else root["SurveyCreator"] = factory(root["ko"], root["Survey"]); })(this, function(__WEBPACK_EXTERNAL_MODULE_1__, __WEBPACK_EXTERNAL_MODULE_2__) { return /******/ (function(modules) { // webpackBootstrap /******/ // The module cache /******/ var installedModules = {}; /******/ /******/ // The require function /******/ function __webpack_require__(moduleId) { /******/ /******/ // Check if module is in cache /******/ if(installedModules[moduleId]) /******/ return installedModules[moduleId].exports; /******/ /******/ // Create a new module (and put it into the cache) /******/ var module = installedModules[moduleId] = { /******/ i: moduleId, /******/ l: false, /******/ exports: {} /******/ }; /******/ /******/ // Execute the module function /******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); /******/ /******/ // Flag the module as loaded /******/ module.l = true; /******/ /******/ // Return the exports of the module /******/ return module.exports; /******/ } /******/ /******/ /******/ // expose the modules object (__webpack_modules__) /******/ __webpack_require__.m = modules; /******/ /******/ // expose the module cache /******/ __webpack_require__.c = installedModules; /******/ /******/ // identity function for calling harmony imports with the correct context /******/ __webpack_require__.i = function(value) { return value; }; /******/ /******/ // define getter function for harmony exports /******/ __webpack_require__.d = function(exports, name, getter) { /******/ if(!__webpack_require__.o(exports, name)) { /******/ Object.defineProperty(exports, name, { /******/ configurable: false, /******/ enumerable: true, /******/ get: getter /******/ }); /******/ } /******/ }; /******/ /******/ // getDefaultExport function for compatibility with non-harmony modules /******/ __webpack_require__.n = function(module) { /******/ var getter = module && module.__esModule ? /******/ function getDefault() { return module['default']; } : /******/ function getModuleExports() { return module; }; /******/ __webpack_require__.d(getter, 'a', getter); /******/ return getter; /******/ }; /******/ /******/ // Object.prototype.hasOwnProperty.call /******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; /******/ /******/ // __webpack_public_path__ /******/ __webpack_require__.p = ""; /******/ /******/ // Load entry module and return exports /******/ return __webpack_require__(__webpack_require__.s = 20); /******/ }) /************************************************************************/ /******/ ([ /* 0 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__localization_english__ = __webpack_require__(28); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_survey_knockout__ = __webpack_require__(2); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_survey_knockout___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_survey_knockout__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return editorLocalization; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return defaultStrings; }); var editorLocalization = { camelCaseBreaking: true, currentLocale: "", locales: {}, getString: function (strName, locale) { if (locale === void 0) { locale = null; } var loc = this.getLocale(locale); var defaultLocale = this.getLocale("en"); var path = strName.split("."); var obj = loc; for (var i = 0; i < path.length; i++) { obj = obj[path[i]]; if (!obj && obj !== "") { if (loc === defaultLocale) return path[i]; return this.getString(strName, "en"); } } return obj; }, hasString: function (strName, locale) { if (locale === void 0) { locale = null; } var loc = this.getLocale(locale); var path = strName.split("."); var obj = loc; for (var i = 0; i < path.length; i++) { obj = obj[path[i]]; if (!obj && obj !== "") return false; } return true; }, getLocaleName: function (loc, defaultLocale) { if (defaultLocale === void 0) { defaultLocale = null; } var localeNames = __WEBPACK_IMPORTED_MODULE_1_survey_knockout__["surveyLocalization"]["localeNames"]; if (!defaultLocale) { defaultLocale = __WEBPACK_IMPORTED_MODULE_1_survey_knockout__["surveyLocalization"].defaultLocale; } return !!loc ? localeNames[loc] : editorLocalization .getString("ed.defaultLocale")["format"](localeNames[defaultLocale]); }, getPropertyName: function (strName, locale) { if (locale === void 0) { locale = null; } var obj = this.getProperty(strName, locale); var name = obj["name"]; if (!!name) { return name != strName ? name : this.getAutoPropertyName(name); } return obj; }, getPropertyTitle: function (strName, locale) { if (locale === void 0) { locale = null; } var obj = this.getProperty(strName, locale); if (obj["title"]) return obj["title"]; return ""; }, getPropertyInEditor: function (strName, locale) { if (locale === void 0) { locale = null; } var obj = this.getString("pe." + strName, locale); if (obj !== strName) return obj; return this.getProperty(strName); }, getProperty: function (strName, locale) { if (locale === void 0) { locale = null; } var obj = this.getString("p." + strName, locale); if (obj !== strName) return obj; var pos = strName.indexOf("_"); if (pos < -1) return this.getAutoPropertyName(obj); strName = strName.substr(pos + 1); obj = this.getString("p." + strName, locale); if (obj !== strName) return obj; return this.getAutoPropertyName(obj); }, getAutoPropertyName: function (propName) { if (!propName || !this.camelCaseBreaking) return propName; var res = propName[0].toUpperCase(); for (var i = 1; i < propName.length; i++) { if (propName[i] === propName[i].toUpperCase()) { res += " "; } res += propName[i]; } return res; }, getPropertyValue: function (value, locale) { if (locale === void 0) { locale = null; } return this.getValueInternal(value, "pv", locale); }, getValidatorName: function (name, locale) { if (locale === void 0) { locale = null; } return this.getValueInternal(name, "validators", locale); }, getTriggerName: function (name, locale) { if (locale === void 0) { locale = null; } return this.getValueInternal(name, "triggers", locale); }, getLocale: function (locale) { if (!locale) locale = this.currentLocale; var loc = locale ? this.locales[locale] : defaultStrings; if (!loc) loc = defaultStrings; return loc; }, getValueInternal: function (value, prefix, locale) { if (locale === void 0) { locale = null; } if (value === "" || value === null || value === undefined) return ""; value = value.toString(); var loc = this.getLocale(locale); var res = loc[prefix] ? loc[prefix][value] : null; if (!res) res = defaultStrings[prefix][value]; return res ? res : value; }, getLocales: function () { var res = []; res.push(""); for (var key in this.locales) { res.push(key); } return res; } }; var defaultStrings = __WEBPACK_IMPORTED_MODULE_0__localization_english__["a" /* enStrings */]; /***/ }), /* 1 */ /***/ (function(module, exports) { module.exports = __WEBPACK_EXTERNAL_MODULE_1__; /***/ }), /* 2 */ /***/ (function(module, exports) { module.exports = __WEBPACK_EXTERNAL_MODULE_2__; /***/ }), /* 3 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* unused harmony export __assign */ /* harmony export (immutable) */ __webpack_exports__["a"] = __extends; var __assign = Object["assign"] || function (target) { for (var s, i = 1, n = arguments.length; i < n; i++) { s = arguments[i]; for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) target[p] = s[p]; } return target; }; function __extends(thisClass, baseClass) { for (var p in baseClass) if (baseClass.hasOwnProperty(p)) thisClass[p] = baseClass[p]; function __() { this.constructor = thisClass; } thisClass.prototype = baseClass === null ? Object.create(baseClass) : ((__.prototype = baseClass.prototype), new __()); } /***/ }), /* 4 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(3); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_knockout__ = __webpack_require__(1); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_knockout___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_knockout__); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_survey_knockout__ = __webpack_require__(2); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_survey_knockout___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_survey_knockout__); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__propertyEditorBase__ = __webpack_require__(13); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__propertyCustomEditor__ = __webpack_require__(31); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__editorLocalization__ = __webpack_require__(0); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return SurveyPropertyEditorFactory; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return SurveyStringPropertyEditor; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "c", function() { return SurveyDropdownPropertyEditor; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "d", function() { return SurveyBooleanPropertyEditor; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "e", function() { return SurveyNumberPropertyEditor; }); var SurveyPropertyEditorFactory = /** @class */ (function () { function SurveyPropertyEditorFactory() { } SurveyPropertyEditorFactory.getOperators = function () { var operators = [ "empty", "notempty", "equal", "notequal", "contains", "notcontains", "anyof", "allof", "greater", "less", "greaterorequal", "lessorequal" ]; var result = []; for (var i = 0; i < operators.length; i++) { var name = operators[i]; result.push({ name: name, text: __WEBPACK_IMPORTED_MODULE_5__editorLocalization__["a" /* editorLocalization */].getString("op." + name) }); } return result; }; SurveyPropertyEditorFactory.registerEditor = function (name, creator, editableClassName) { if (editableClassName === void 0) { editableClassName = null; } SurveyPropertyEditorFactory.creatorList[name] = creator; var className = editableClassName ? editableClassName : name; SurveyPropertyEditorFactory.creatorByClassList[className] = creator; }; SurveyPropertyEditorFactory.registerCustomEditor = function (name, widgetJSON) { SurveyPropertyEditorFactory.widgetRegisterList[name] = widgetJSON; }; SurveyPropertyEditorFactory.unregisterCustomEditor = function (name) { delete SurveyPropertyEditorFactory.widgetRegisterList[name]; }; SurveyPropertyEditorFactory.createEditor = function (property, func) { var editorType = property.type; if (SurveyPropertyEditorFactory.isDropdownEditor(property) && (!editorType || editorType == SurveyPropertyEditorFactory.defaultEditor)) { editorType = "dropdown"; } var propertyEditor = SurveyPropertyEditorFactory.createCustomEditor(editorType, property); if (!propertyEditor) { var creator = SurveyPropertyEditorFactory.creatorList[editorType]; if (creator) propertyEditor = creator(property); } if (!propertyEditor) { if (property.isArray && __WEBPACK_IMPORTED_MODULE_2_survey_knockout__["Serializer"].isDescendantOf(property.className, "itemvalue")) { var creator = SurveyPropertyEditorFactory.creatorList["itemvalue[]"]; if (creator) propertyEditor = creator(property); } } if (!propertyEditor) { creator = SurveyPropertyEditorFactory.findParentCreator(editorType); propertyEditor = creator(property); } propertyEditor.onChanged = func; return propertyEditor; }; SurveyPropertyEditorFactory.isDropdownEditor = function (property) { if (property["hasChoices"] !== undefined) return property["hasChoices"] === true; return property.choices != null; }; SurveyPropertyEditorFactory.createCustomEditor = function (name, property) { var widgetJSON = SurveyPropertyEditorFactory.widgetRegisterList[name]; if (!widgetJSON) return null; return new __WEBPACK_IMPORTED_MODULE_4__propertyCustomEditor__["a" /* SurveyPropertyCustomEditor */](property, widgetJSON); }; SurveyPropertyEditorFactory.findParentCreator = function (name) { var jsonClass = __WEBPACK_IMPORTED_MODULE_2_survey_knockout__["Serializer"].findClass(name); while (jsonClass && jsonClass.parentName) { var creator = SurveyPropertyEditorFactory.creatorByClassList[jsonClass.parentName]; if (creator) return creator; jsonClass = __WEBPACK_IMPORTED_MODULE_2_survey_knockout__["Serializer"].findClass(jsonClass.parentName); } return SurveyPropertyEditorFactory.creatorList[SurveyPropertyEditorFactory.defaultEditor]; }; SurveyPropertyEditorFactory.defaultEditor = "string"; SurveyPropertyEditorFactory.creatorList = {}; SurveyPropertyEditorFactory.creatorByClassList = {}; SurveyPropertyEditorFactory.widgetRegisterList = {}; return SurveyPropertyEditorFactory; }()); var SurveyStringPropertyEditor = /** @class */ (function (_super) { __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__["a" /* __extends */])(SurveyStringPropertyEditor, _super); function SurveyStringPropertyEditor(property) { return _super.call(this, property) || this; } Object.defineProperty(SurveyStringPropertyEditor.prototype, "editorType", { get: function () { return "string"; }, enumerable: true, configurable: true }); return SurveyStringPropertyEditor; }(__WEBPACK_IMPORTED_MODULE_3__propertyEditorBase__["a" /* SurveyPropertyEditorBase */])); var SurveyDropdownPropertyEditor = /** @class */ (function (_super) { __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__["a" /* __extends */])(SurveyDropdownPropertyEditor, _super); function SurveyDropdownPropertyEditor(property) { var _this = _super.call(this, property) || this; _this.koChoices = __WEBPACK_IMPORTED_MODULE_1_knockout__["observableArray"]([]); _this.koHasFocus = __WEBPACK_IMPORTED_MODULE_1_knockout__["observable"](false); var self = _this; _this.koHasFocus.subscribe(function (newValue) { //TODO isDynamicChoices obsolete, use dependsOn attribute if (newValue && self.property["isDynamicChoices"]) { self.updateChoices(); } }); return _this; } Object.defineProperty(SurveyDropdownPropertyEditor.prototype, "editorType", { get: function () { return "dropdown"; }, enumerable: true, configurable: true }); SurveyDropdownPropertyEditor.prototype.getValueText = function (value) { if (this.property.name === "locale") { var text = __WEBPACK_IMPORTED_MODULE_5__editorLocalization__["a" /* editorLocalization */].getLocaleName(value); if (text) return text; } if (this.property.name === "cellType") { var text = __WEBPACK_IMPORTED_MODULE_5__editorLocalization__["a" /* editorLocalization */].getString("qt." + value); if (text) return text; } return __WEBPACK_IMPORTED_MODULE_5__editorLocalization__["a" /* editorLocalization */].getPropertyValue(value); }; SurveyDropdownPropertyEditor.prototype.setObject = function (value) { _super.prototype.setObject.call(this, value); this.beginValueUpdating(); if (this.koChoices().length == 0) { this.updateChoices(); } this.endValueUpdating(); }; SurveyDropdownPropertyEditor.prototype.updateDynamicProperties = function () { _super.prototype.updateDynamicProperties.call(this); this.updateChoices(); }; SurveyDropdownPropertyEditor.prototype.updateChoices = function () { var choices = this.getPropertyChoices(); this.setChoices(choices); }; SurveyDropdownPropertyEditor.prototype.setChoices = function (choices) { choices = this.makeChoicesLocalizable(choices); if (!!choices && Array.isArray(choices)) { this.koChoices(choices); } }; SurveyDropdownPropertyEditor.prototype.makeChoicesLocalizable = function (choices) { if (!choices) return choices; var res = new Array(); __WEBPACK_IMPORTED_MODULE_2_survey_knockout__["ItemValue"].setData(res, choices); for (var i = 0; i < res.length; i++) { var value = res[i].value; var text = this.getValueText(value); if (text != value) { res[i].text = text; } } return res; }; SurveyDropdownPropertyEditor.prototype.getPropertyChoices = function () { if (!this.property) return null; if (!!this.object) { var obj = this.object; this.object["getEditingPropertyValue"] = function (name) { if (!!obj.editingProperties && obj.editingProperties[name] != undefined) return obj.editingProperties[name]; return obj[name]; }; } var self = this; return this.property["getChoices"](this.object, function (choices) { self.setChoices(choices); }); }; return SurveyDropdownPropertyEditor; }(__WEBPACK_IMPORTED_MODULE_3__propertyEditorBase__["a" /* SurveyPropertyEditorBase */])); var SurveyBooleanPropertyEditor = /** @class */ (function (_super) { __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__["a" /* __extends */])(SurveyBooleanPropertyEditor, _super); function SurveyBooleanPropertyEditor(property) { return _super.call(this, property) || this; } Object.defineProperty(SurveyBooleanPropertyEditor.prototype, "editorType", { get: function () { return "boolean"; }, enumerable: true, configurable: true }); Object.defineProperty(SurveyBooleanPropertyEditor.prototype, "alwaysShowEditor", { get: function () { return true; }, enumerable: true, configurable: true }); Object.defineProperty(SurveyBooleanPropertyEditor.prototype, "canShowDisplayNameOnTop", { get: function () { return false; }, enumerable: true, configurable: true }); SurveyBooleanPropertyEditor.prototype.getValueText = function (value) { return __WEBPACK_IMPORTED_MODULE_5__editorLocalization__["a" /* editorLocalization */].getPropertyValue(value); }; return SurveyBooleanPropertyEditor; }(__WEBPACK_IMPORTED_MODULE_3__propertyEditorBase__["a" /* SurveyPropertyEditorBase */])); var SurveyNumberPropertyEditor = /** @class */ (function (_super) { __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__["a" /* __extends */])(SurveyNumberPropertyEditor, _super); function SurveyNumberPropertyEditor(property) { return _super.call(this, property) || this; } Object.defineProperty(SurveyNumberPropertyEditor.prototype, "editorType", { get: function () { return "number"; }, enumerable: true, configurable: true }); SurveyNumberPropertyEditor.prototype.getCorrectedValue = function (value) { if (!value) return value; if (typeof value === "string" || value instanceof String) { value = Number(value); if (!value) value = 0; } return _super.prototype.getCorrectedValue.call(this, value); }; return SurveyNumberPropertyEditor; }(__WEBPACK_IMPORTED_MODULE_3__propertyEditorBase__["a" /* SurveyPropertyEditorBase */])); SurveyPropertyEditorFactory.registerEditor("string", function (property) { return new SurveyStringPropertyEditor(property); }); SurveyPropertyEditorFactory.registerEditor("dropdown", function (property) { return new SurveyDropdownPropertyEditor(property); }); SurveyPropertyEditorFactory.registerEditor("boolean", function (property) { return new SurveyBooleanPropertyEditor(property); }); SurveyPropertyEditorFactory.registerEditor("number", function (property) { return new SurveyNumberPropertyEditor(property); }); /***/ }), /* 5 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__editorLocalization__ = __webpack_require__(0); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return ObjType; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return SurveyHelper; }); var ObjType; (function (ObjType) { ObjType[ObjType["Unknown"] = 0] = "Unknown"; ObjType[ObjType["Survey"] = 1] = "Survey"; ObjType[ObjType["Page"] = 2] = "Page"; ObjType[ObjType["Panel"] = 3] = "Panel"; ObjType[ObjType["Question"] = 4] = "Question"; })(ObjType || (ObjType = {})); var SurveyHelper = /** @class */ (function () { function SurveyHelper() { } SurveyHelper.getNewPageName = function (objs) { return SurveyHelper.getNewName(objs, __WEBPACK_IMPORTED_MODULE_0__editorLocalization__["a" /* editorLocalization */].getString("ed.newPageName")); }; SurveyHelper.getNewQuestionName = function (objs) { return SurveyHelper.getNewName(objs, __WEBPACK_IMPORTED_MODULE_0__editorLocalization__["a" /* editorLocalization */].getString("ed.newQuestionName")); }; SurveyHelper.getNewPanelName = function (objs) { return SurveyHelper.getNewName(objs, __WEBPACK_IMPORTED_MODULE_0__editorLocalization__["a" /* editorLocalization */].getString("ed.newPanelName")); }; SurveyHelper.generateNewName = function (name) { var pos = name.length; while (pos > 0 && name[pos - 1] >= "0" && name[pos - 1] <= "9") { pos--; } var base = name.substr(0, pos); var num = 0; if (pos < name.length) { num = parseInt(name.substr(pos)); } num++; return base + num; }; SurveyHelper.getNewName = function (objs, baseName) { var hash = {}; for (var i = 0; i < objs.length; i++) { hash[objs[i].name] = true; } var num = 1; while (true) { if (!hash[baseName + num.toString()]) break; num++; } return baseName + num.toString(); }; SurveyHelper.getObjectType = function (obj) { if (!obj || !obj["getType"]) return ObjType.Unknown; if (obj.getType() == "page") return ObjType.Page; if (obj.getType() == "panel") return ObjType.Panel; if (obj.getType() == "survey") return ObjType.Survey; if (obj["name"]) return ObjType.Question; return ObjType.Unknown; }; SurveyHelper.getObjectTypeStr = function (obj) { var objType = SurveyHelper.getObjectType(obj); if (objType === ObjType.Survey) return "survey"; if (objType === ObjType.Page) return "page"; if (objType === ObjType.Panel) return "panel"; if (objType === ObjType.Question) return "question"; return "unknown"; }; SurveyHelper.getObjectName = function (obj, showObjectTitle) { if (showObjectTitle === void 0) { showObjectTitle = false; } if (showObjectTitle && obj["title"]) return obj["title"]; if (obj["name"]) return obj["name"]; var objType = SurveyHelper.getObjectType(obj); if (objType != ObjType.Page) return ""; var data = obj["data"]; if (!data) data = obj["survey"]; //TODO var index = data.pages.indexOf(obj); return "[Page " + (index + 1) + "]"; }; SurveyHelper.getElements = function (element, includeHidden) { if (includeHidden === void 0) { includeHidden = false; } if (!element) return []; if (element.getElementsInDesign) return element.getElementsInDesign(includeHidden); if (element.elements) return element.elements; return []; }; SurveyHelper.isPropertyVisible = function (obj, property, options) { if (options === void 0) { options = null; } if (!property || !property.visible) return false; if (!!property.isVisible && !!obj.getLayoutType && !property["isVisible"](obj.getLayoutType(), null)) return false; var canShow = !!options ? function (object, property) { return options.onCanShowPropertyCallback(object, property); } : null; if (!!canShow && !canShow(obj, property)) return false; return true; }; SurveyHelper.scrollIntoViewIfNeeded = function (el) { if (!el || !el.scrollIntoView) return; var rect = el.getBoundingClientRect(); var scrollableDiv = SurveyHelper.getScrollableDiv(el); if (!scrollableDiv) return; var height = scrollableDiv.clientHeight; if (rect.top < scrollableDiv.offsetTop) { el.scrollIntoView(); } else { var offsetTop = height + scrollableDiv.offsetTop; if (rect.bottom > offsetTop && rect.height < height) { el.scrollIntoView(false); } } }; SurveyHelper.getScrollableDiv = function (el) { while (!!el) { if (!!el.id && el.id.indexOf("scrollableDiv") > -1) return el; if (!el.offsetParent) return null; el = el.offsetParent; } return null; }; return SurveyHelper; }()); /***/ }), /* 6 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(3); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_knockout__ = __webpack_require__(1); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_knockout___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_knockout__); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__editorLocalization__ = __webpack_require__(0); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_survey_knockout__ = __webpack_require__(2); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_survey_knockout___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_3_survey_knockout__); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__utils_utils__ = __webpack_require__(8); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__stylesmanager__ = __webpack_require__(22); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return SurveyForDesigner; }); /* harmony export (immutable) */ __webpack_exports__["d"] = createAfterRenderHandler; /* harmony export (immutable) */ __webpack_exports__["b"] = registerAdorner; /* harmony export (immutable) */ __webpack_exports__["c"] = removeAdorners; /* unused harmony export applyAdornerClass */ var SurveyForDesigner = /** @class */ (function (_super) { __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__["a" /* __extends */])(SurveyForDesigner, _super); function SurveyForDesigner(jsonObj, renderedElement, css) { if (jsonObj === void 0) { jsonObj = null; } if (renderedElement === void 0) { renderedElement = null; } if (css === void 0) { css = null; } var _this = _super.call(this, jsonObj, renderedElement, css) || this; _this.onSelectedElementChanged = new __WEBPACK_IMPORTED_MODULE_3_survey_knockout__["Event"](); _this.onEditButtonClick = new __WEBPACK_IMPORTED_MODULE_3_survey_knockout__["Event"](); _this.onGetMenuItems = new __WEBPACK_IMPORTED_MODULE_3_survey_knockout__["Event"](); _this.onElementDoubleClick = new __WEBPACK_IMPORTED_MODULE_3_survey_knockout__["Event"](); var self = _this; _this.setDesignMode(true); _this.onAfterRenderPage.add(function (sender, options) { options.page["onAfterRenderPage"](options.htmlElement); }); _this.editQuestionClick = function () { self.onEditButtonClick.fire(self, null); }; _this.onUpdateQuestionCssClasses.add(onUpdateQuestionCssClasses); _this.onUpdatePanelCssClasses.add(onUpdateQuestionCssClasses); return _this; } SurveyForDesigner.prototype.updateElementAllowingOptions = function (obj) { if (this.onUpdateElementAllowingOptions && obj["allowingOptions"]) { obj["allowingOptions"].obj = obj; this.onUpdateElementAllowingOptions(obj["allowingOptions"]); } }; SurveyForDesigner.prototype.getMenuItems = function (obj) { var items = []; var options = { obj: obj, items: items }; this.onGetMenuItems.fire(this, options); return options.items; }; Object.defineProperty(SurveyForDesigner.prototype, "selectedElement", { get: function () { return this.selectedElementValue; }, set: function (value) { if (value && value.selectedElementInDesign) value = value.selectedElementInDesign; if (value == this.selectedElementValue) return; var oldValue = this.selectedElementValue; this.selectedElementValue = value; if (oldValue != null && oldValue["onSelectedElementChanged"]) { oldValue["onSelectedElementChanged"](); } if (this.selectedElementValue != null && this.selectedElementValue["onSelectedElementChanged"]) { this.selectedElementValue["onSelectedElementChanged"](); } this.onSelectedElementChanged.fire(this, { oldElement: oldValue, newElement: value }); }, enumerable: true, configurable: true }); SurveyForDesigner.prototype.doElementDoubleClick = function (obj) { this.onElementDoubleClick.fire(this, { element: obj }); }; SurveyForDesigner.prototype.getEditorLocString = function (value) { return __WEBPACK_IMPORTED_MODULE_2__editorLocalization__["a" /* editorLocalization */].getString(value); }; return SurveyForDesigner; }(__WEBPACK_IMPORTED_MODULE_3_survey_knockout__["Survey"])); function getSurvey(el) { if (!el) return null; var res = el["survey"]; if (res) return res; return el["data"]; } function panelBaseOnCreating(self) { self.dragEnterCounter = 0; self.emptyElement = null; self.rowCount = __WEBPACK_IMPORTED_MODULE_1_knockout__["computed"](function () { var rows = !!self["koRow"] ? self["koRows"]() : self.rows; return rows.length; }, self); self.rowCount.subscribe(function (value) { if (self.emptyElement) { self.emptyElement.style.display = value > 0 ? "none" : ""; } }); } function elementOnCreating(surveyElement) { surveyElement.allowingOptions = { allowDelete: true, allowEdit: true, allowCopy: true, allowAddToToolbox: true, allowDragging: true, allowChangeType: true, allowShowHideTitle: true, allowChangeRequired: true }; surveyElement.dragDropHelperValue = null; surveyElement.dragDropHelper = function () { if (surveyElement.dragDropHelperValue == null) { surveyElement.dragDropHelperValue = getSurvey(surveyElement)["dragDropHelper"]; } return surveyElement.dragDropHelperValue; }; surveyElement.renderedElement = null; surveyElement.koIsDragging = __WEBPACK_IMPORTED_MODULE_1_knockout__["observable"](false); surveyElement.koIsSelected = __WEBPACK_IMPORTED_MODULE_1_knockout__["observable"](false); surveyElement.koIsDragging.subscribe(function (newValue) { if (surveyElement.renderedElement) { surveyElement.renderedElement.style.opacity = newValue ? 0.4 : 1; } }); surveyElement.koIsSelected.subscribe(function (newValue) { if (surveyElement.renderedElement) { if (newValue) { surveyElement.renderedElement.classList.add("svd_q_selected", "svd-main-border-color"); } else { surveyElement.renderedElement.classList.remove("svd_q_selected", "svd-main-border-color"); } } }); } function createQuestionDesignItem(obj, item) { var res = document.createElement("li"); var btn = document.createElement("button"); btn.innerText = item.text; var onClick = item.onClick; btn.onclick = function () { onClick(obj, item); }; btn.className = "btn btn-primary btn-sm btn-xs"; res.appendChild(btn); return res; } function createAfterRenderHandler(creator, survey) { return function elementOnAfterRendering(domElement, surveyElement, isPanel, disable) { surveyElement.renderedElement = domElement; surveyElement.renderedElement.classList.add("svd_question"); if (__WEBPACK_IMPORTED_MODULE_5__stylesmanager__["a" /* StylesManager */].currentTheme() === "bootstrap") { surveyElement.renderedElement.classList.add("svd-dark-bg-color"); } surveyElement.renderedElement.classList.add("svd_q_design_border"); var isRowLayout = !surveyElement.getLayoutType || surveyElement.getLayoutType() == "row"; var opt = surveyElement.allowingOptions; opt.allowCopy = opt.allowCopy && isRowLayout; opt.allowAddToToolbox = opt.allowAddToToolbox && isRowLayout; opt.allowChangeType = opt.allowChangeType && isRowLayout; opt.allowShowHideTitle = opt.allowShowHideTitle && isRowLayout; opt.allowChangeRequired = opt.allowChangeRequired && isRowLayout; getSurvey(surveyElement).updateElementAllowingOptions(surveyElement); if (surveyElement.koIsSelected()) { surveyElement.renderedElement.classList.add("svd_q_selected", "svd-main-border-color"); } domElement.onclick = function (e) { if (!e["markEvent"]) { e["markEvent"] = true; if (surveyElement.parent) { getSurvey(surveyElement)["selectedElement"] = surveyElement; } } }; disable = disable && !(surveyElement.getType() == "paneldynamic"); //TODO if (disable) { var childs = domElement.childNodes; for (var i = 0; i < childs.length; i++) { if (childs[i].style) childs[i].style.pointerEvents = "none"; } } if (creator.readOnly) return; surveyElement.dragDropHelper().attachToElement(domElement, surveyElement); domElement.tabindex = "0"; domElement.onkeyup = function (e) { var activeElement = !!document && document.activeElement; if (!!activeElement && !!activeElement["dataset"] && activeElement["dataset"].svdInfo === "adorner") { return; } var char = e.which || e.keyCode; if (char === 0x13 || char === 0x20) { domElement.click(); } }; // el.onkeydown = function(e) { // if (e.witch == 46) getSurvey(surveyElement).deleteCurrentObjectClick(); // return true; // }; domElement.ondblclick = function (e) { getSurvey(surveyElement).doElementDoubleClick(surveyElement); }; var setTabIndex = function (element) { element.tabIndex = -1; }; ["input", "select", "textarea"].forEach(function (sel) { var elements = domElement.querySelectorAll(sel); for (var i = 0; i < elements.length; i++) { setTabIndex(elements[i]); } }); addAdorner(domElement, surveyElement); }; } var adornersConfig = {}; function registerAdorner(name, adorner) { if (!adornersConfig[name]) { adornersConfig[name] = []; } adornersConfig[name].push(adorner); } function removeAdorners(names) { if (names === void 0) { names = undefined; } if (names !== undefined) { (names || []).forEach(function (name) { return delete adornersConfig[name]; }); } else { adornersConfig = {}; } } function onUpdateQuestionCssClasses(survey, options) { var classes = options.panel ? options.cssClasses.panel : options.cssClasses; Object.keys(adornersConfig).forEach(function (element) { adornersConfig[element].forEach(function (adorner) { var classesElementName = adorner.getElementName(options.question || options.panel); var adornerMarkerClass = adorner.getMarkerClass(options.question || options.panel); classes[classesElementName] = applyAdornerClass(classes[classesElementName], adornerMarkerClass); }); }); } function applyAdornerClass(classes, adornerClass) { var result = classes; if (!!adornerClass) { result = !!result ? result + " " + adornerClass : adornerClass; } return result; } function filterNestedQuestions(rootQuestionNode, elements) { var targetElements = []; for (var i = 0; i < elements.length; i++) { var questionElement = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_4__utils_utils__["b" /* findParentNode */])("svd_question", elements[i]); if (questionElement === rootQuestionNode) { targetElements.push(elements[i]); } } return targetElements; } function addAdorner(node, model) { Object.keys(adornersConfig).forEach(function (element) { adornersConfig[element].forEach(function (adorner) { var elementClass = adorner.getMarkerClass(model); if (!!elementClass) { var elements = node.querySelectorAll("." + elementClass.replace(/\s/g, ".")); var temp = []; for (var i = 0; i < elements.length; i++) { temp.push(elements[i]); } elements = temp; if (node.className.split(" ").indexOf(elementClass) !== -1) { elements.unshift(node); } elements = filterNestedQuestions(node, elements); if (elements.length === 0 && node.className.indexOf(elementClass) !== -1) { elements = [node]; } if (elements.length > 0) { adorner.afterRender(elements, model, getSurvey(model).getEditor()); } } }); }); } __WEBPACK_IMPORTED_MODULE_3_survey_knockout__["Page"].prototype["onCreating"] = function () { panelBaseOnCreating(this); }; __WEBPACK_IMPORTED_MODULE_3_survey_knockout__["Page"].prototype["onAfterRenderPage"] = function (el) { if (!getSurvey(this).isDesignMode) return; var self = this; var dragDropHelper = getSurvey(this)["dragDropHelper"]; this.dragEnterCounter = 0; el.ondragenter = function (e) { e.preventDefault(); self.dragEnterCounter++; }; el.ondragleave = function (e) { self.dragEnterCounter--; if (self.dragEnterCounter === 0) dragDropHelper.doLeavePage(e); }; el.ondragover = function (e) { return false; }; el.ondrop = function (e) { dragDropHelper.doDrop(e); }; }; __WEBPACK_IMPORTED_MODULE_3_survey_knockout__["Panel"].prototype["onCreating"] = function () { panelBaseOnCreating(this); elementOnCreating(this); }; __WEBPACK_IMPORTED_MODULE_3_survey_knockout__["Panel"].prototype["onSelectedElementChanged"] = function () { if (getSurvey(this) == null) return; this.koIsSelected(getSurvey(this)["selectedElementValue"] == this); }; if (!!__WEBPACK_IMPORTED_MODULE_3_survey_knockout__["FlowPanel"]) { __WEBPACK_IMPORTED_MODULE_3_survey_knockout__["FlowPanel"].prototype["onCreating"] = function () { //TODO this.placeHolder = "Enter here text or drop a question"; elementOnCreating(this); }; __WEBPACK_IMPORTED_MODULE_3_survey_knockout__["FlowPanel"].prototype["onSelectedElementChanged"] = function () { if (getSurvey(this) == null) return; this.koIsSelected(getSurvey(this)["selectedElementValue"] == this); }; } var questionPrototype = !!__WEBPACK_IMPORTED_MODULE_3_survey_knockout__["QuestionBase"] ? __WEBPACK_IMPORTED_MODULE_3_survey_knockout__["QuestionBase"].prototype : __WEBPACK_IMPORTED_MODULE_3_survey_knockout__["Question"].prototype; questionPrototype["onCreating"] = function () { elementOnCreating(this); }; questionPrototype["onSelectedElementChanged"] = function () { if (getSurvey(this) == null) return; this.koIsSelected(getSurvey(this)["selectedElementValue"] == this); }; __WEBPACK_IMPORTED_MODULE_3_survey_knockout__["QuestionSelectBaseImplementor"].prototype["onCreated"] = function () { var _this = this; var q = this.question; var updateTriggerFunction = function () { setTimeout(function () { return q["koElementType"].notifySubscribers(); }, 0); }; [ "choices", "hasOther", "hasComment", "hasNone", "hasSelectAll", "colCount" ].forEach(function (propertyName) { return _this.question.registerFunctionOnPropertyValueChanged(propertyName, updateTriggerFunction); }); }; /***/ }), /* 7 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(3); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_knockout__ = __webpack_require__(1); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_knockout___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_knockout__); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__propertyEditorBase__ = __webpack_require__(13); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__propertyEditorFactory__ = __webpack_require__(4); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__editorLocalization__ = __webpack_require__(0); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__utils_utils__ = __webpack_require__(8); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_6_rmodal__ = __webpack_require__(43); /* unused harmony export SurveyPropertyModalEditorCustomWidget */ /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return SurveyPropertyModalEditor; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return SurveyPropertyTextEditor; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "c", function() { return SurveyPropertyHtmlEditor; }); var SurveyPropertyModalEditorCustomWidget = /** @class */ (function () { function SurveyPropertyModalEditorCustomWidget(json) { this.json = json; } SurveyPropertyModalEditorCustomWidget.prototype.afterRender = function (editor, el) { if (this.json && this.json.afterRender) { if (!el.id) { el.id = SurveyPropertyModalEditorCustomWidget.customWidgetName + SurveyPropertyModalEditorCustomWidget.customWidgetId; SurveyPropertyModalEditorCustomWidget.customWidgetId++; } this.json.afterRender(editor, el); if (this.json.destroy) { var self = this; __WEBPACK_IMPORTED_MODULE_1_knockout__["utils"].domNodeDisposal.addDisposeCallback(el, function () { self.destroy(editor, el); }); } } }; SurveyPropertyModalEditorCustomWidget.prototype.destroy = function (editor, el) { if (this.json && this.json.destroy) { this.json.destroy(editor, el); } }; SurveyPropertyModalEditorCustomWidget.customWidgetId = 1; SurveyPropertyModalEditorCustomWidget.customWidgetName = "modalEditorCustomWidget"; return SurveyPropertyModalEditorCustomWidget; }()); var SurveyPropertyModalEditor = /** @class */ (function (_super) { __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__["a" /* __extends */])(SurveyPropertyModalEditor, _super); function SurveyPropertyModalEditor(property) { var _this = _super.call(this, property) || this; _this.isShowingModalValue = false; _this.koTitleCaption = __WEBPACK_IMPORTED_MODULE_1_knockout__["observable"](""); _this.koHtmlTop = __WEBPACK_IMPORTED_MODULE_1_knockout__["observable"](""); _this.koHtmlBottom = __WEBPACK_IMPORTED_MODULE_1_knockout__["observable"](""); if (_this.property) { _this.koTitleCaption(__WEBPACK_IMPORTED_MODULE_4__editorLocalization__["a" /* editorLocalization */] .getString("pe.editProperty")["format"](__WEBPACK_IMPORTED_MODULE_4__editorLocalization__["a" /* editorLocalization */].getPropertyName(_this.property.name))); } _this.modalName = "modelEditor" + _this.editorType + SurveyPropertyModalEditor.idCounter; SurveyPropertyModalEditor.idCounter++; _this.modalNameTarget = "#" + _this.modalName; var self = _this; _this.koShowApplyButton = __WEBPACK_IMPORTED_MODULE_1_knockout__["observable"](true); self.onHideModal = function () { }; self.onApplyClick = function () { self.apply(); }; self.onOkClick = function () { self.apply(); if (!self.koHasError()) self.onHideModal(); }; self.onResetClick = function () { self.updateValue(); self.onHideModal(); }; self.onShowModal = function () { self.beforeShow(); var modal = new __WEBPACK_IMPORTED_MODULE_6_rmodal__["a" /* default */](document.querySelector(self.modalNameTarget), { bodyClass: "", closeTimeout: 100, dialogOpenClass: "animated fadeInDown", focus: false }); modal.open(); document.addEventListener("keydown", function (ev) { modal.keydown(ev); }, false); self.onHideModal = function () { self.beforeCloseModal(); modal.close(); }; if (!!this.elements) { __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_5__utils_utils__["c" /* focusFirstControl */])(this.elements); } }; self.koAfterRender = function (el, con) { return self.afterRender(el, con); }; return _this; } SurveyPropertyModalEditor.registerCustomWidget = function (editorType, json) { if (!SurveyPropertyModalEditor.customWidgets) SurveyPropertyModalEditor.customWidgets = {}; SurveyPropertyModalEditor.customWidgets[editorType] = new SurveyPropertyModalEditorCustomWidget(json); }; SurveyPropertyModalEditor.getCustomWidget = function (editorType) { if (!SurveyPropertyModalEditor.customWidgets) return null; return SurveyPropertyModalEditor.customWidgets[editorType]; }; SurveyPropertyModalEditor.prototype.setup = function () { _super.prototype.setup.call(this); this.beforeShow(); }; Object.defineProperty(SurveyPropertyModalEditor.prototype, "isModal", { get: function () { return true; }, enumerable: true, configurable: true }); Object.defineProperty(SurveyPropertyModalEditor.prototype, "isShowingModal", { get: function () { return this.isShowingModalValue; }, enumerable: true, configurable: true }); SurveyPropertyModalEditor.prototype.beforeShow = function () { this.isShowingModalValue = true; this.updateValue(); }; SurveyPropertyModalEditor.prototype.beforeCloseModal = function () { this.isShowingModalValue = false; }; SurveyPropertyModalEditor.prototype.onOptionsChanged = function () { this.koShowApplyButton = __WEBPACK_IMPORTED_MODULE_1_knockout__["observable"](!this.options || this.options.showApplyButtonInEditors); }; SurveyPropertyModalEditor.prototype.setObject = function (value) { this.editingObject = value; _super.prototype.setObject.call(this, value); if (this.options && this.property) { var html = this.options.onPropertyEditorModalShowDescriptionCallback(this.property.name, value); if (html) { if (html.top) this.koHtmlTop(html.top); if (html.bottom) this.koHtmlBottom(html.bottom); } } }; Object.defineProperty(SurveyPropertyModalEditor.prototype, "isEditable", { get: function () { return false; }, enumerable: true, configurable: true }); SurveyPropertyModalEditor.prototype.afterRender = function (elements, con) { this.elements = elements; var customWidget = SurveyPropertyModalEditor.getCustomWidget(this.editorType); if (!!customWidget) { var el = this.GetFirstNonTextElement(elements); var tEl = elements[0]; if (tEl.nodeName == "#text") tEl.data = ""; tEl = elements[elements.length - 1]; if (tEl.nodeName == "#text") tEl.data = ""; customWidget.afterRender(this, el); } __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_5__utils_utils__["c" /* focusFirstControl */])(elements); }; SurveyPropertyModalEditor.prototype.GetFirstNonTextElement = function (elements) { if (!elements || !elements.length) return; for (var i = 0; i < elements.length; i++) { if (elements[i].nodeName != "#text" && elements[i].nodeName != "#comment") return elements[i]; } return null; }; SurveyPropertyModalEditor.idCounter = 1; return SurveyPropertyModalEditor; }(__WEBPACK_IMPORTED_MODULE_2__propertyEditorBase__["a" /* SurveyPropertyEditorBase */])); var SurveyPropertyTextEditor = /** @class */ (function (_super) { __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__["a" /* __extends */])(SurveyPropertyTextEditor, _super); function SurveyPropertyTextEditor(property) { var _this = _super.call(this, property) || this; _this.koTextValue = __WEBPACK_IMPORTED_MODULE_1_knockout__["observable"](); var self = _this; _this.koTextValue.subscribe(function (newValue) { self.onkoTextValueChanged(newValue); }); return _this; } Object.defineProperty(SurveyPropertyTextEditor.prototype, "editorType", { get: function () { return "text"; }, enumerable: true, configurable: true }); Object.defineProperty(SurveyPropertyTextEditor.prototype, "isEditable", { get: function () { return true; }, enumerable: true, configurable: true }); SurveyPropertyTextEditor.prototype.getValueText = function (value) { if (!value) return null; var str = value; if (str.length > 20) { str = str.substr(0, 20) + "..."; } return str; }; SurveyPropertyTextEditor.prototype.onkoTextValueChanged = function (newValue) { }; SurveyPropertyTextEditor.prototype.onValueChanged = function () { this.koTextValue(this.editingValue); }; SurveyPropertyTextEditor.prototype.onBeforeApply = function () { this.setValueCore(this.koTextValue()); }; return SurveyPropertyTextEditor; }(SurveyPropertyModalEditor)); var SurveyPropertyHtmlEditor = /** @class */ (function (_super) { __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__["a" /* __extends */])(SurveyPropertyHtmlEditor, _super); function SurveyPropertyHtmlEditor(property) { return _super.call(this, property) || this; } Object.defineProperty(SurveyPropertyHtmlEditor.prototype, "editorType", { get: function () { return "html"; }, enumerable: true, configurable: true }); return SurveyPropertyHtmlEditor; }(SurveyPropertyTextEditor)); __WEBPACK_IMPORTED_MODULE_3__propertyEditorFactory__["a" /* SurveyPropertyEditorFactory */].registerEditor("text", function (property) { return new SurveyPropertyTextEditor(property); }); __WEBPACK_IMPORTED_MODULE_3__propertyEditorFactory__["a" /* SurveyPropertyEditorFactory */].registerEditor("html", function (property) { return new SurveyPropertyHtmlEditor(property); }); /***/ }), /* 8 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_knockout__ = __webpack_require__(1); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_knockout___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_knockout__); /* harmony export (immutable) */ __webpack_exports__["a"] = getNextValue; /* harmony export (immutable) */ __webpack_exports__["b"] = findParentNode; /* harmony export (immutable) */ __webpack_exports__["c"] = focusFirstControl; function getNumericFromString(str) { if (!str) return ""; var num = ""; for (var i = str.length - 1; i >= 0; i--) { if (str[i] >= "0" && str[i] <= "9") { num = str[i] + num; } } return num; } var opositeValues = { true: "false", True: "False", TRUE: "FALSE", false: "true", False: "True", FALSE: "TRUE", yes: "no", Yes: "No", YES: "NO", no: "yes", No: "Yes", NO: "YES" }; function getOpositValue(str) { if (!!opositeValues[str]) return opositeValues[str]; return null; } function getNextValue(prefix, values) { if (values.length > 0) var oposite = getOpositValue(values[values.length - 1]); if (oposite && values.indexOf(oposite) < 0) return oposite; var numStr = ""; var baseStr = ""; for (var i = values.length - 1; i >= 0; i--) { var str = values[i]; numStr = getNumericFromString(str); if (!!numStr) { baseStr = str.substr(0, str.length - numStr.length); break; } } if (!!numStr) { var num = parseInt(numStr); while (values.indexOf(baseStr + num) > -1) { num++; } return baseStr + num; } return prefix + 1; } function findParentNode(className, sourceNode) { var parent = sourceNode; while (!!parent && !parent.classList.contains(className)) { parent = parent.parentElement; } return parent; } function focusFirstControl(renderedElements) { for (var i = 0; i < renderedElements.length; i++) { if (typeof renderedElements[i].getElementsByClassName === "function") { var elements = (renderedElements[i].getElementsByClassName("form-control")); if (elements.length === 0 && renderedElements[i].className.indexOf("form-control") !== -1) { elements = [renderedElements[i]]; } if (elements.length > 0) { var element = elements[0]; if (element.tagName.toLowerCase() !== "a") { setTimeout(function () { return element.focus({ preventScroll: true }); }, 10); break; } } } } } __WEBPACK_IMPORTED_MODULE_0_knockout__["bindingHandlers"]["trueclick"] = { init: function (element, valueAccessor, allBindingsAccessor) { element.onclick = function () { return true; }; } }; __WEBPACK_IMPORTED_MODULE_0_knockout__["bindingHandlers"]["key2click"] = { init: function (element, valueAccessor, allBindingsAccessor) { element.onkeyup = function (ev) { var char = ev.which || ev.keyCode; if (char === 13 || char === 32) { element.click(); } else if (char === 27) { element.blur(); } }; } }; __WEBPACK_IMPORTED_MODULE_0_knockout__["bindingHandlers"]["clickNoFocus"] = { init: function (element, valueAccessor, allBindingsAccessor, viewModel) { element.onclick = function (ev) { valueAccessor().call(viewModel, viewModel, ev); setTimeout(function () { element.blur(); }, 1); return true; }; } }; /***/ }), /* 9 */ /***/ (function(module, exports, __webpack_require__) { var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_RESULT__;/**! * Sortable * @author RubaXa <trash@rubaxa.org> * @license MIT */ (function sortableModule(factory) { "use strict"; if (true) { !(__WEBPACK_AMD_DEFINE_FACTORY__ = (factory), __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? (__WEBPACK_AMD_DEFINE_FACTORY__.call(exports, __webpack_require__, exports, module)) : __WEBPACK_AMD_DEFINE_FACTORY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); } else if (typeof module != "undefined" && typeof module.exports != "undefined") { module.exports = factory(); } else { /* jshint sub:true */ window["Sortable"] = factory(); } })(function sortableFactory() { "use strict"; if (typeof window == "undefined" || !window.document) { return function sortableError() { throw new Error("Sortable.js requires a window with a document"); }; } var dragEl, parentEl, ghostEl, cloneEl, rootEl, nextEl, lastDownEl, scrollEl, scrollParentEl, scrollCustomFn, lastEl, lastCSS, lastParentCSS, oldIndex, newIndex, activeGroup, putSortable, autoScroll = {}, tapEvt, touchEvt, moved, /** @const */ R_SPACE = /\s+/g, R_FLOAT = /left|right|inline/, expando = 'Sortable' + (new Date).getTime(), win = window, document = win.document, parseInt = win.parseInt, $ = win.jQuery || win.Zepto, Polymer = win.Polymer, captureMode = false, supportDraggable = !!('draggable' in document.createElement('div')), supportCssPointerEvents = (function (el) { // false when IE11 if (!!navigator.userAgent.match(/Trident.*rv[ :]?11\./)) { return false; } el = document.createElement('x'); el.style.cssText = 'pointer-events:auto'; return el.style.pointerEvents === 'auto'; })(), _silent = false, abs = Math.abs, min = Math.min, savedInputChecked = [], touchDragOverListeners = [], _autoScroll = _throttle(function (/**Event*/evt, /**Object*/options, /**HTMLElement*/rootEl) { // Bug: https://bugzilla.mozilla.org/show_bug.cgi?id=505521 if (rootEl && options.scroll) { var _this = rootEl[expando], el, rect, sens = options.scrollSensitivity, speed = options.scrollSpeed, x = evt.clientX, y = evt.clientY, winWidth = window.innerWidth, winHeight = window.innerHeight, vx, vy, scrollOffsetX, scrollOffsetY ; // Delect scrollEl if (scrollParentEl !== rootEl) { scrollEl = options.scroll; scrollParentEl = rootEl; scrollCustomFn = options.scrollFn; if (scrollEl === true) { scrollEl = rootEl; do { if ((scrollEl.offsetWidth < scrollEl.scrollWidth) || (scrollEl.offsetHeight < scrollEl.scrollHeight) ) { break; } /* jshint boss:true */ } while (scrollEl = scrollEl.parentNode); } } if (scrollEl) { el = scrollEl; rect = scrollEl.getBoundingClientRect(); vx = (abs(rect.right - x) <= sens) - (abs(rect.left - x) <= sens); vy = (abs(rect.bottom - y) <= sens) - (abs(rect.top - y) <= sens); } if (!(vx || vy)) { vx = (winWidth - x <= sens) - (x <= sens); vy = (winHeight - y <= sens) - (y <= sens); /* jshint expr:true */ (vx || vy) && (el = win); } if (autoScroll.vx !== vx || autoScroll.vy !== vy || autoScroll.el !== el) { autoScroll.el = el; autoScroll.vx = vx; autoScroll.vy = vy; clearInterval(autoScroll.pid); if (el) { autoScroll.pid = setInterval(function () { scrollOffsetY = vy ? vy * speed : 0; scrollOffsetX = vx ? vx * speed : 0; if ('function' === typeof(scrollCustomFn)) { return scrollCustomFn.call(_this, scrollOffsetX, scrollOffsetY, evt); } if (el === win) { win.scrollTo(win.pageXOffset + scrollOffsetX, win.pageYOffset + scrollOffsetY); } else { el.scrollTop += scrollOffsetY; el.scrollLeft += scrollOffsetX; } }, 24); } } } }, 30), _prepareGroup = function (options) { function toFn(value, pull) { if (value === void 0 || value === true) { value = group.name; } if (typeof value === 'function') { return value; } else { return function (to, from) { var fromGroup = from.options.group.name; return pull ? value : value && (value.join ? value.indexOf(fromGroup) > -1 : (fromGroup == value) ); }; } } var group = {}; var originalGroup = options.group; if (!originalGroup || typeof originalGroup != 'object') { originalGroup = {name: originalGroup}; } group.name = originalGroup.name; group.checkPull = toFn(originalGroup.pull, true); group.checkPut = toFn(originalGroup.put); group.revertClone = originalGroup.revertClone; options.group = group; } ; /** * @class Sortable * @param {HTMLElement} el * @param {Object} [options] */ function Sortable(el, options) { if (!(el && el.nodeType && el.nodeType === 1)) { throw 'Sortable: `el` must be HTMLElement, and not ' + {}.toString.call(el); } this.el = el; // root element this.options = options = _extend({}, options); // Export instance el[expando] = this; // Default options var defaults = { group: Math.random(), sort: true, disabled: false, store: null, handle: null, scroll: true, scrollSensitivity: 30, scrollSpeed: 10, draggable: /[uo]l/i.test(el.nodeName) ? 'li' : '>*', ghostClass: 'sortable-ghost', chosenClass: 'sortable-chosen', dragClass: 'sortable-drag', ignore: 'a, img', filter: null, preventOnFilter: true, animation: 0, setData: function (dataTransfer, dragEl) { dataTransfer.setData('Text', dragEl.textContent); }, dropBubble: false, dragoverBubble: false, dataIdAttr: 'data-id', delay: 0, forceFallback: false, fallbackClass: 'sortable-fallback', fallbackOnBody: false, fallbackTolerance: 0, fallbackOffset: {x: 0, y: 0} }; // Set default options for (var name in defaults) { !(name in options) && (options[name] = defaults[name]); } _prepareGroup(options); // Bind all private methods for (var fn in this) { if (fn.charAt(0) === '_' && typeof this[fn] === 'function') { this[fn] = this[fn].bind(this); } } // Setup drag mode this.nativeDraggable = options.forceFallback ? false : supportDraggable; // Bind events _on(el, 'mousedown', this._onTapStart); _on(el, 'touchstart', this._onTapStart); _on(el, 'pointerdown', this._onTapStart); if (this.nativeDraggable) { _on(el, 'dragover', this); _on(el, 'dragenter', this); } touchDragOverListeners.push(this._onDragOver); // Restore sorting options.store && this.sort(options.store.get(this)); } Sortable.prototype = /** @lends Sortable.prototype */ { constructor: Sortable, _onTapStart: function (/** Event|TouchEvent */evt) { var _this = this, el = this.el, options = this.options, preventOnFilter = options.preventOnFilter, type = evt.type, touch = evt.touches && evt.touches[0], target = (touch || evt).target, originalTarget = evt.target.shadowRoot && (evt.path && evt.path[0]) || target, filter = options.filter, startIndex; _saveInputCheckedState(el); // Don't trigger start event when an element is been dragged, otherwise the evt.oldindex always wrong when set option.group. if (dragEl) { return; } if (/mousedown|pointerdown/.test(type) && evt.button !== 0 || options.disabled) { return; // only left button or enabled } target = _closest(target, options.draggable, el); if (!target) { return; } if (lastDownEl === target) { // Ignoring duplicate `down` return; } // Get the index of the dragged element within its parent startIndex = _index(target, options.draggable); // Check filter if (typeof filter === 'function') { if (filter.call(this, evt, target, this)) { _dispatchEvent(_this, originalTarget, 'filter', target, el, startIndex); preventOnFilter && evt.preventDefault(); return; // cancel dnd } } else if (filter) { filter = filter.split(',').some(function (criteria) { criteria = _closest(originalTarget, criteria.trim(), el); if (criteria) { _dispatchEvent(_this, criteria, 'filter', target, el, startIndex); return true; } }); if (filter) { preventOnFilter && evt.preventDefault(); return; // cancel dnd } } if (options.handle && !_closest(originalTarget, options.handle, el)) { return; } // Prepare `dragstart` this._prepareDragStart(evt, touch, target, startIndex); }, _prepareDragStart: function (/** Event */evt, /** Touch */touch, /** HTMLElement */target, /** Number */startIndex) { var _this = this, el = _this.el, options = _this.options, ownerDocument = el.ownerDocument, dragStartFn; if (target && !dragEl && (target.parentNode === el)) { tapEvt = evt; rootEl = el; dragEl = target; parentEl = dragEl.parentNode; nextEl = dragEl.nextSibling; lastDownEl = target; activeGroup = options.group; oldIndex = startIndex; this._lastX = (touch || evt).clientX; this._lastY = (touch || evt).clientY; dragEl.style['will-change'] = 'transform'; dragStartFn = function () { // Delayed drag has been triggered // we can re-enable the events: touchmove/mousemove _this._disableDelayedDrag(); // Make the element draggable dragEl.draggable = _this.nativeDraggable; // Chosen item _toggleClass(dragEl, options.chosenClass, true); // Bind the events: dragstart/dragend _this._triggerDragStart(evt, touch); // Drag start event _dispatchEvent(_this, rootEl, 'choose', dragEl, rootEl, oldIndex); }; // Disable "draggable" options.ignore.split(',').forEach(function (criteria) { _find(dragEl, criteria.trim(), _disableDraggable); }); _on(ownerDocument, 'mouseup', _this._onDrop); _on(ownerDocument, 'touchend', _this._onDrop); _on(ownerDocument, 'touchcancel', _this._onDrop); _on(ownerDocument, 'pointercancel', _this._onDrop); _on(ownerDocument, 'selectstart', _this); if (options.delay) { // If the user moves the pointer or let go the click or touch // before the delay has been reached: // disable the delayed drag _on(ownerDocument, 'mouseup', _this._disableDelayedDrag); _on(ownerDocument, 'touchend', _this._disableDelayedDrag); _on(ownerDocument, 'touchcancel', _this._disableDelayedDrag); _on(ownerDocument, 'mousemove', _this._disableDelayedDrag); _on(ownerDocument, 'touchmove', _this._disableDelayedDrag); _on(ownerDocument, 'pointermove', _this._disableDelayedDrag); _this._dragStartTimer = setTimeout(dragStartFn, options.delay); } else { dragStartFn(); } } }, _disableDelayedDrag: function () { var ownerDocument = this.el.ownerDocument; clearTimeout(this._dragStartTimer); _off(ownerDocument, 'mouseup', this._disableDelayedDrag); _off(ownerDocument, 'touchend', this._disableDelayedDrag); _off(ownerDocument, 'touchcancel', this._disableDelayedDrag); _off(ownerDocument, 'mousemove', this._disableDelayedDrag); _off(ownerDocument, 'touchmove', this._disableDelayedDrag); _off(ownerDocument, 'pointermove', this._disableDelayedDrag); }, _triggerDragStart: function (/** Event */evt, /** Touch */touch) { touch = touch || (evt.pointerType == 'touch' ? evt : null); if (touch) { // Touch device support tapEvt = { target: dragEl, clientX: touch.clientX, clientY: touch.clientY }; this._onDragStart(tapEvt, 'touch'); } else if (!this.nativeDraggable) { this._onDragStart(tapEvt, true); } else { _on(dragEl, 'dragend', this); _on(rootEl, 'dragstart', this._onDragStart); } try { if (document.selection) { // Timeout neccessary for IE9 setTimeout(function () { document.selection.empty(); }); } else { window.getSelection().removeAllRanges(); } } catch (err) { } }, _dragStarted: function () { if (rootEl && dragEl) { var options = this.options; // Apply effect _toggleClass(dragEl, options.ghostClass, true); _toggleClass(dragEl, options.dragClass, false); Sortable.active = this; // Drag start event _dispatchEvent(this, rootEl, 'start', dragEl, rootEl, oldIndex); } else { this._nulling(); } }, _emulateDragOver: function () { if (touchEvt) { if (this._lastX === touchEvt.clientX && this._lastY === touchEvt.clientY) { return; } this._lastX = touchEvt.clientX; this._lastY = touchEvt.clientY; if (!supportCssPointerEvents) { _css(ghostEl, 'display', 'none'); } var target = document.elementFromPoint(touchEvt.clientX, touchEvt.clientY), parent = target, i = touchDragOverListeners.length; if (parent) { do { if (parent[expando]) { while (i--) { touchDragOverListeners[i]({ clientX: touchEvt.clientX, clientY: touchEvt.clientY, target: target, rootEl: parent }); } break; } target = parent; // store last element } /* jshint boss:true */ while (parent = parent.parentNode); } if (!supportCssPointerEvents) { _css(ghostEl, 'display', ''); } } }, _onTouchMove: function (/**TouchEvent*/evt) { if (tapEvt) { var options = this.options, fallbackTolerance = options.fallbackTolerance, fallbackOffset = options.fallbackOffset, touch = evt.touches ? evt.touches[0] : evt, dx = (touch.clientX - tapEvt.clientX) + fallbackOffset.x, dy = (touch.clientY - tapEvt.clientY) + fallbackOffset.y, translate3d = evt.touches ? 'translate3d(' + dx + 'px,' + dy + 'px,0)' : 'translate(' + dx + 'px,' + dy + 'px)'; // only set the status to dragging, when we are actually dragging if (!Sortable.active) { if (fallbackTolerance && min(abs(touch.clientX - this._lastX), abs(touch.clientY - this._lastY)) < fallbackTolerance ) { return; } this._dragStarted(); } // as well as creating the ghost element on the document body this._appendGhost(); moved = true; touchEvt = touch; _css(ghostEl, 'webkitTransform', translate3d); _css(ghostEl, 'mozTransform', translate3d); _css(ghostEl, 'msTransform', translate3d); _css(ghostEl, 'transform', translate3d); evt.preventDefault(); } }, _appendGhost: function () { if (!ghostEl) { var rect = dragEl.getBoundingClientRect(), css = _css(dragEl), options = this.options, ghostRect; ghostEl = dragEl.cloneNode(true); _toggleClass(ghostEl, options.ghostClass, false); _toggleClass(ghostEl, options.fallbackClass, true); _toggleClass(ghostEl, options.dragClass, true); _css(ghostEl, 'top', rect.top - parseInt(css.marginTop, 10)); _css(ghostEl, 'left', rect.left - parseInt(css.marginLeft, 10)); _css(ghostEl, 'width', rect.width); _css(ghostEl, 'height', rect.height); _css(ghostEl, 'opacity', '0.8'); _css(ghostEl, 'position', 'fixed'); _css(ghostEl, 'zIndex', '100000'); _css(ghostEl, 'pointerEvents', 'none'); options.fallbackOnBody && document.body.appendChild(ghostEl) || rootEl.appendChild(ghostEl); // Fixing dimensions. ghostRect = ghostEl.getBoundingClientRect(); _css(ghostEl, 'width', rect.width * 2 - ghostRect.width); _css(ghostEl, 'height', rect.height * 2 - ghostRect.height); } }, _onDragStart: function (/**Event*/evt, /**boolean*/useFallback) { var dataTransfer = evt.dataTransfer, options = this.options; this._offUpEvents(); if (activeGroup.checkPull(this, this, dragEl, evt)) { cloneEl = _clone(dragEl); cloneEl.draggable = false; cloneEl.style['will-change'] = ''; _css(cloneEl, 'display', 'none'); _toggleClass(cloneEl, this.options.chosenClass, false); rootEl.insertBefore(cloneEl, dragEl); _dispatchEvent(this, rootEl, 'clone', dragEl); } _toggleClass(dragEl, options.dragClass, true); if (useFallback) { if (useFallback === 'touch') { // Bind touch events _on(document, 'touchmove', this._onTouchMove); _on(document, 'touchend', this._onDrop); _on(document, 'touchcancel', this._onDrop); _on(document, 'pointermove', this._onTouchMove); _on(document, 'pointerup', this._onDrop); } else { // Old brwoser _on(document, 'mousemove', this._onTouchMove); _on(document, 'mouseup', this._onDrop); } this._loopId = setInterval(this._emulateDragOver, 50); } else { if (dataTransfer) { dataTransfer.effectAllowed = 'move'; options.setData && options.setData.call(this, dataTransfer, dragEl); } _on(document, 'drop', this); setTimeout(this._dragStarted, 0); } }, _onDragOver: function (/**Event*/evt) { var el = this.el, target, dragRect, targetRect, revert, options = this.options, group = options.group, activeSortable = Sortable.active, isOwner = (activeGroup === group), isMovingBetweenSortable = false, canSort = options.sort; if (evt.preventDefault !== void 0) { evt.preventDefault(); !options.dragoverBubble && evt.stopPropagation(); } if (dragEl.animated) { return; } moved = true; if (activeSortable && !options.disabled && (isOwner ? canSort || (revert = !rootEl.contains(dragEl)) // Reverting item into the original list : ( putSortable === this || ( (activeSortable.lastPullMode = activeGroup.checkPull(this, activeSortable, dragEl, evt)) && group.checkPut(this, activeSortable, dragEl, evt) ) ) ) && (evt.rootEl === void 0 || evt.rootEl === this.el) // touch fallback ) { // Smart auto-scrolling _autoScroll(evt, options, this.el); if (_silent) { return; } target = _closest(evt.target, options.draggable, el); dragRect = dragEl.getBoundingClientRect(); if (putSortable !== this) { putSortable = this; isMovingBetweenSortable = true; } if (revert) { _cloneHide(activeSortable, true); parentEl = rootEl; // actualization if (cloneEl || nextEl) { rootEl.insertBefore(dragEl, cloneEl || nextEl); } else if (!canSort) { rootEl.appendChild(dragEl); } return; } if ((el.children.length === 0) || (el.children[0] === ghostEl) || (el === evt.target) && (_ghostIsLast(el, evt)) ) { //assign target only if condition is true if (el.children.length !== 0 && el.children[0] !== ghostEl && el === evt.target) { target = el.lastElementChild; } if (target) { if (target.animated) { return; } targetRect = target.getBoundingClientRect(); } _cloneHide(activeSortable, isOwner); if (_onMove(rootEl, el, dragEl, dragRect, target, targetRect, evt) !== false) { if (!dragEl.contains(el)) { el.appendChild(dragEl); parentEl = el; // actualization } this._animate(dragRect, dragEl); target && this._animate(targetRect, target); } } else if (target && !target.animated && target !== dragEl && (target.parentNode[expando] !== void 0)) { if (lastEl !== target) { lastEl = target; lastCSS = _css(target); lastParentCSS = _css(target.parentNode); } targetRect = target.getBoundingClientRect(); var width = targetRect.right - targetRect.left, height = targetRect.bottom - targetRect.top, floating = R_FLOAT.test(lastCSS.cssFloat + lastCSS.display) || (lastParentCSS.display == 'flex' && lastParentCSS['flex-direction'].indexOf('row') === 0), isWide = (target.offsetWidth > dragEl.offsetWidth), isLong = (target.offsetHeight > dragEl.offsetHeight), halfway = (floating ? (evt.clientX - targetRect.left) / width : (evt.clientY - targetRect.top) / height) > 0.5, nextSibling = target.nextElementSibling, after = false ; if (floating) { var elTop = dragEl.offsetTop, tgTop = target.offsetTop; if (elTop === tgTop) { after = (target.previousElementSibling === dragEl) && !isWide || halfway && isWide; } else if (target.previousElementSibling === dragEl || dragEl.previousElementSibling === target) { after = (evt.clientY - targetRect.top) / height > 0.5; } else { after = tgTop > elTop; } } else if (!isMovingBetweenSortable) { after = (nextSibling !== dragEl) && !isLong || halfway && isLong; } var moveVector = _onMove(rootEl, el, dragEl, dragRect, target, targetRect, evt, after); if (moveVector !== false) { if (moveVector === 1 || moveVector === -1) { after = (moveVector === 1); } _silent = true; setTimeout(_unsilent, 30); _cloneHide(activeSortable, isOwner); if (!dragEl.contains(el)) { if (after && !nextSibling) { el.appendChild(dragEl); } else { target.parentNode.insertBefore(dragEl, after ? nextSibling : target); } } parentEl = dragEl.parentNode; // actualization this._animate(dragRect, dragEl); this._animate(targetRect, target); } } } }, _animate: function (prevRect, target) { var ms = this.options.animation; if (ms) { var currentRect = target.getBoundingClientRect(); if (prevRect.nodeType === 1) { prevRect = prevRect.getBoundingClientRect(); } _css(target, 'transition', 'none'); _css(target, 'transform', 'translate3d(' + (prevRect.left - currentRect.left) + 'px,' + (prevRect.top - currentRect.top) + 'px,0)' ); target.offsetWidth; // repaint _css(target, 'transition', 'all ' + ms + 'ms'); _css(target, 'transform', 'translate3d(0,0,0)'); clearTimeout(target.animated); target.animated = setTimeout(function () { _css(target, 'transition', ''); _css(target, 'transform', ''); target.animated = false; }, ms); } }, _offUpEvents: function () { var ownerDocument = this.el.ownerDocument; _off(document, 'touchmove', this._onTouchMove); _off(document, 'pointermove', this._onTouchMove); _off(ownerDocument, 'mouseup', this._onDrop); _off(ownerDocument, 'touchend', this._onDrop); _off(ownerDocument, 'pointerup', this._onDrop); _off(ownerDocument, 'touchcancel', this._onDrop); _off(ownerDocument, 'pointercancel', this._onDrop); _off(ownerDocument, 'selectstart', this); }, _onDrop: function (/**Event*/evt) { var el = this.el, options = this.options; clearInterval(this._loopId); clearInterval(autoScroll.pid); clearTimeout(this._dragStartTimer); // Unbind events _off(document, 'mousemove', this._onTouchMove); if (this.nativeDraggable) { _off(document, 'drop', this); _off(el, 'dragstart', this._onDragStart); } this._offUpEvents(); if (evt) { if (moved) { evt.preventDefault(); !options.dropBubble && evt.stopPropagation(); } ghostEl && ghostEl.parentNode && ghostEl.parentNode.removeChild(ghostEl); if (rootEl === parentEl || Sortable.active.lastPullMode !== 'clone') { // Remove clone cloneEl && cloneEl.parentNode && cloneEl.parentNode.removeChild(cloneEl); } if (dragEl) { if (this.nativeDraggable) { _off(dragEl, 'dragend', this); } _disableDraggable(dragEl); dragEl.style['will-change'] = ''; // Remove class's _toggleClass(dragEl, this.options.ghostClass, false); _toggleClass(dragEl, this.options.chosenClass, false); // Drag stop event _dispatchEvent(this, rootEl, 'unchoose', dragEl, rootEl, oldIndex); if (rootEl !== parentEl) { newIndex = _index(dragEl, options.draggable); if (newIndex >= 0) { // Add event _dispatchEvent(null, parentEl, 'add', dragEl, rootEl, oldIndex, newIndex); // Remove event _dispatchEvent(this, rootEl, 'remove', dragEl, rootEl, oldIndex, newIndex); // drag from one list and drop into another _dispatchEvent(null, parentEl, 'sort', dragEl, rootEl, oldIndex, newIndex); _dispatchEvent(this, rootEl, 'sort', dragEl, rootEl, oldIndex, newIndex); } } else { if (dragEl.nextSibling !== nextEl) { // Get the index of the dragged element within its parent newIndex = _index(dragEl, options.draggable); if (newIndex >= 0) { // drag & drop within the same list _dispatchEvent(this, rootEl, 'update', dragEl, rootEl, oldIndex, newIndex); _dispatchEvent(this, rootEl, 'sort', dragEl, rootEl, oldIndex, newIndex); } } } if (Sortable.active) { /* jshint eqnull:true */ if (newIndex == null || newIndex === -1) { newIndex = oldIndex; } _dispatchEvent(this, rootEl, 'end', dragEl, rootEl, oldIndex, newIndex); // Save sorting this.save(); } } } this._nulling(); }, _nulling: function() { rootEl = dragEl = parentEl = ghostEl = nextEl = cloneEl = lastDownEl = scrollEl = scrollParentEl = tapEvt = touchEvt = moved = newIndex = lastEl = lastCSS = putSortable = activeGroup = Sortable.active = null; savedInputChecked.forEach(function (el) { el.checked = true; }); savedInputChecked.length = 0; }, handleEvent: function (/**Event*/evt) { switch (evt.type) { case 'drop': case 'dragend': this._onDrop(evt); break; case 'dragover': case 'dragenter': if (dragEl) { this._onDragOver(evt); _globalDragOver(evt); } break; case 'selectstart': evt.preventDefault(); break; } }, /** * Serializes the item into an array of string. * @returns {String[]} */ toArray: function () { var order = [], el, children = this.el.children, i = 0, n = children.length, options = this.options; for (; i < n; i++) { el = children[i]; if (_closest(el, options.draggable, this.el)) { order.push(el.getAttribute(options.dataIdAttr) || _generateId(el)); } } return order; }, /** * Sorts the elements according to the array. * @param {String[]} order order of the items */ sort: function (order) { var items = {}, rootEl = this.el; this.toArray().forEach(function (id, i) { var el = rootEl.children[i]; if (_closest(el, this.options.draggable, rootEl)) { items[id] = el; } }, this); order.forEach(function (id) { if (items[id]) { rootEl.removeChild(items[id]); rootEl.appendChild(items[id]); } }); }, /** * Save the current sorting */ save: function () { var store = this.options.store; store && store.set(this); }, /** * For each element in the set, get the first element that matches the selector by testing the element itself and traversing up through its ancestors in the DOM tree. * @param {HTMLElement} el * @param {String} [selector] default: `options.draggable` * @returns {HTMLElement|null} */ closest: function (el, selector) { return _closest(el, selector || this.options.draggable, this.el); }, /** * Set/get option * @param {string} name * @param {*} [value] * @returns {*} */ option: function (name, value) { var options = this.options; if (value === void 0) { return options[name]; } else { options[name] = value; if (name === 'group') { _prepareGroup(options); } } }, /** * Destroy */ destroy: function () { var el = this.el; el[expando] = null; _off(el, 'mousedown', this._onTapStart); _off(el, 'touchstart', this._onTapStart); _off(el, 'pointerdown', this._onTapStart); if (this.nativeDraggable) { _off(el, 'dragover', this); _off(el, 'dragenter', this); } // Remove draggable attributes Array.prototype.forEach.call(el.querySelectorAll('[draggable]'), function (el) { el.removeAttribute('draggable'); }); touchDragOverListeners.splice(touchDragOverListeners.indexOf(this._onDragOver), 1); this._onDrop(); this.el = el = null; } }; function _cloneHide(sortable, state) { if (sortable.lastPullMode !== 'clone') { state = true; } if (cloneEl && (cloneEl.state !== state)) { _css(cloneEl, 'display', state ? 'none' : ''); if (!state) { if (cloneEl.state) { if (sortable.options.group.revertClone) { rootEl.insertBefore(cloneEl, nextEl); sortable._animate(dragEl, cloneEl); } else { rootEl.insertBefore(cloneEl, dragEl); } } } cloneEl.state = state; } } function _closest(/**HTMLElement*/el, /**String*/selector, /**HTMLElement*/ctx) { if (el) { ctx = ctx || document; do { if ((selector === '>*' && el.parentNode === ctx) || _matches(el, selector)) { return el; } /* jshint boss:true */ } while (el = _getParentOrHost(el)); } return null; } function _getParentOrHost(el) { var parent = el.host; return (parent && parent.nodeType) ? parent : el.parentNode; } function _globalDragOver(/**Event*/evt) { if (evt.dataTransfer) { evt.dataTransfer.dropEffect = 'move'; } evt.preventDefault(); } function _on(el, event, fn) { el.addEventListener(event, fn, captureMode); } function _off(el, event, fn) { el.removeEventListener(event, fn, captureMode); } function _toggleClass(el, name, state) { if (el) { if (el.classList) { el.classList[state ? 'add' : 'remove'](name); } else { var className = (' ' + el.className + ' ').replace(R_SPACE, ' ').replace(' ' + name + ' ', ' '); el.className = (className + (state ? ' ' + name : '')).replace(R_SPACE, ' '); } } } function _css(el, prop, val) { var style = el && el.style; if (style) { if (val === void 0) { if (document.defaultView && document.defaultView.getComputedStyle) { val = document.defaultView.getComputedStyle(el, ''); } else if (el.currentStyle) { val = el.currentStyle; } return prop === void 0 ? val : val[prop]; } else { if (!(prop in style)) { prop = '-webkit-' + prop; } style[prop] = val + (typeof val === 'string' ? '' : 'px'); } } } function _find(ctx, tagName, iterator) { if (ctx) { var list = ctx.getElementsByTagName(tagName), i = 0, n = list.length; if (iterator) { for (; i < n; i++) { iterator(list[i], i); } } return list; } return []; } function _dispatchEvent(sortable, rootEl, name, targetEl, fromEl, startIndex, newIndex) { sortable = (sortable || rootEl[expando]); var evt = document.createEvent('Event'), options = sortable.options, onName = 'on' + name.charAt(0).toUpperCase() + name.substr(1); evt.initEvent(name, true, true); evt.to = rootEl; evt.from = fromEl || rootEl; evt.item = targetEl || rootEl; evt.clone = cloneEl; evt.oldIndex = startIndex; evt.newIndex = newIndex; rootEl.dispatchEvent(evt); if (options[onName]) { options[onName].call(sortable, evt); } } function _onMove(fromEl, toEl, dragEl, dragRect, targetEl, targetRect, originalEvt, willInsertAfter) { var evt, sortable = fromEl[expando], onMoveFn = sortable.options.onMove, retVal; evt = document.createEvent('Event'); evt.initEvent('move', true, true); evt.to = toEl; evt.from = fromEl; evt.dragged = dragEl; evt.draggedRect = dragRect; evt.related = targetEl || toEl; evt.relatedRect = targetRect || toEl.getBoundingClientRect(); evt.willInsertAfter = willInsertAfter; fromEl.dispatchEvent(evt); if (onMoveFn) { retVal = onMoveFn.call(sortable, evt, originalEvt); } return retVal; } function _disableDraggable(el) { el.draggable = false; } function _unsilent() { _silent = false; } /** @returns {HTMLElement|false} */ function _ghostIsLast(el, evt) { var lastEl = el.lastElementChild, rect = lastEl.getBoundingClientRect(); // 5 — min delta // abs — нельзя добавлять, а то глюки при наведении сверху return (evt.clientY - (rect.top + rect.height) > 5) || (evt.clientX - (rect.left + rect.width) > 5); } /** * Generate id * @param {HTMLElement} el * @returns {String} * @private */ function _generateId(el) { var str = el.tagName + el.className + el.src + el.href + el.textContent, i = str.length, sum = 0; while (i--) { sum += str.charCodeAt(i); } return sum.toString(36); } /** * Returns the index of an element within its parent for a selected set of * elements * @param {HTMLElement} el * @param {selector} selector * @return {number} */ function _index(el, selector) { var index = 0; if (!el || !el.parentNode) { return -1; } while (el && (el = el.previousElementSibling)) { if ((el.nodeName.toUpperCase() !== 'TEMPLATE') && (selector === '>*' || _matches(el, selector))) { index++; } } return index; } function _matches(/**HTMLElement*/el, /**String*/selector) { if (el) { selector = selector.split('.'); var tag = selector.shift().toUpperCase(), re = new RegExp('\\s(' + selector.join('|') + ')(?=\\s)', 'g'); return ( (tag === '' || el.nodeName.toUpperCase() == tag) && (!selector.length || ((' ' + el.className + ' ').match(re) || []).length == selector.length) ); } return false; } function _throttle(callback, ms) { var args, _this; return function () { if (args === void 0) { args = arguments; _this = this; setTimeout(function () { if (args.length === 1) { callback.call(_this, args[0]); } else { callback.apply(_this, args); } args = void 0; }, ms); } }; } function _extend(dst, src) { if (dst && src) { for (var key in src) { if (src.hasOwnProperty(key)) { dst[key] = src[key]; } } } return dst; } function _clone(el) { return $ ? $(el).clone(true)[0] : (Polymer && Polymer.dom ? Polymer.dom(el).cloneNode(true) : el.cloneNode(true) ); } function _saveInputCheckedState(root) { var inputs = root.getElementsByTagName('input'); var idx = inputs.length; while (idx--) { var el = inputs[idx]; el.checked && savedInputChecked.push(el); } } // Fixed #973: _on(document, 'touchmove', function (evt) { if (Sortable.active) { evt.preventDefault(); } }); try { window.addEventListener('test', null, Object.defineProperty({}, 'passive', { get: function () { captureMode = { capture: false, passive: false }; } })); } catch (err) {} // Export utils Sortable.utils = { on: _on, off: _off, css: _css, find: _find, is: function (el, selector) { return !!_closest(el, selector, el); }, extend: _extend, throttle: _throttle, closest: _closest, toggleClass: _toggleClass, clone: _clone, index: _index }; /** * Create sortable instance * @param {HTMLElement} el * @param {Object} [options] */ Sortable.create = function (el, options) { return new Sortable(el, options); }; // Export Sortable.version = '1.6.1'; return Sortable; }); /***/ }), /* 10 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_survey_knockout__ = __webpack_require__(2); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_survey_knockout___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_survey_knockout__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return EditableObject; }); var EditableObject = /** @class */ (function () { function EditableObject(obj) { this.objValue = obj; this.editableObjValue = this.createEditableObj(); } EditableObject.getOrigionalSurvey = function (survey) { return !!survey && !!survey["origionalObj"] ? survey["origionalObj"] : survey; }; Object.defineProperty(EditableObject.prototype, "obj", { get: function () { return this.objValue; }, enumerable: true, configurable: true }); Object.defineProperty(EditableObject.prototype, "editableObj", { get: function () { return this.editableObjValue; }, enumerable: true, configurable: true }); EditableObject.prototype.isPropertyChanged = function (propertyName) { return !__WEBPACK_IMPORTED_MODULE_0_survey_knockout__["Helpers"].isTwoValueEquals(this.obj[propertyName], this.editableObj[propertyName]); }; EditableObject.prototype.apply = function (propertyName) { if (!this.isPropertyChanged(propertyName)) return; this.obj[propertyName] = this.editableObj[propertyName]; }; EditableObject.prototype.reset = function () { this.assignProperties(this.editableObj); }; EditableObject.prototype.createEditableObj = function () { var type = this.obj.getType(); var res = __WEBPACK_IMPORTED_MODULE_0_survey_knockout__["Serializer"].createClass(type); if (res == null && type == "survey") { res = new __WEBPACK_IMPORTED_MODULE_0_survey_knockout__["Survey"](); } this.assignProperties(res); if (type == "matrixdropdowncolumn") { res["colOwner"] = this.obj["colOwner"]; } if (type != "survey") { if (!!res["setSurveyImpl"]) { res["setSurveyImpl"](this.obj["survey"]); } else { if (!!this.obj["survey"] && !res["survey"]) { res["survey"] = this.obj["survey"]; } } } if (!!this.obj["parent"]) { res["parent"] = this.obj["parent"]; } res["isCopy"] = true; res["origionalObj"] = this.obj; return res; }; EditableObject.prototype.assignProperties = function (obj) { new __WEBPACK_IMPORTED_MODULE_0_survey_knockout__["JsonObject"]().toObject(this.getObjJson(), obj); }; EditableObject.prototype.getObjJson = function () { var jsonObj = new __WEBPACK_IMPORTED_MODULE_0_survey_knockout__["JsonObject"](); jsonObj.lightSerializing = true; return jsonObj.toJsonObject(this.obj); }; return EditableObject; }()); /***/ }), /* 11 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(3); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_knockout__ = __webpack_require__(1); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_knockout___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_knockout__); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_survey_knockout__ = __webpack_require__(2); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_survey_knockout___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_survey_knockout__); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__surveyjsObjects__ = __webpack_require__(6); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__editorLocalization__ = __webpack_require__(0); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_5_sortablejs__ = __webpack_require__(9); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_5_sortablejs___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_5_sortablejs__); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__title_editor__ = __webpack_require__(19); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__utils_utils__ = __webpack_require__(8); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_8__item_editor_scss__ = __webpack_require__(84); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_8__item_editor_scss___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_8__item_editor_scss__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return itemAdorner; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "c", function() { return createAddItemHandler; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return createAddItemElement; }); /* unused harmony export createCustomElement */ /* unused harmony export itemDraggableAdorner */ var templateHtml = __webpack_require__(137); var ItemInplaceEditor = /** @class */ (function (_super) { __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__["a" /* __extends */])(ItemInplaceEditor, _super); function ItemInplaceEditor(name, question, item, rootElement, editor) { var _this = _super.call(this, name, rootElement) || this; _this.question = question; _this.item = item; _this.editor = editor; return _this; } ItemInplaceEditor.prototype.deleteItem = function (model, event) { if (this.question.otherItem === this.item) { this.question.hasOther = false; } else if (this.question["selectAllItem"] === this.item) { this.question["hasSelectAll"] = false; } else if (this.question["noneItem"] === this.item) { this.question["hasNone"] = false; } else { var index = model.question.choices.indexOf(model.item); model.question.choices.splice(index, 1); } this.editor.onQuestionEditorChanged(this.question); }; Object.defineProperty(ItemInplaceEditor.prototype, "isDraggable", { get: function () { return (this.question.otherItem !== this.item && this.question["selectAllItem"] !== this.item && this.question["noneItem"] !== this.item); }, enumerable: true, configurable: true }); Object.defineProperty(ItemInplaceEditor.prototype, "isLastItem", { get: function () { return this.question.choices.length === 1; }, enumerable: true, configurable: true }); return ItemInplaceEditor; }(__WEBPACK_IMPORTED_MODULE_6__title_editor__["b" /* TitleInplaceEditor */])); __WEBPACK_IMPORTED_MODULE_1_knockout__["components"].register("item-editor", { viewModel: { createViewModel: function (params, componentInfo) { var model = new ItemInplaceEditor(params.target[params.name], params.question, params.item, componentInfo.element, params.editor); var property = __WEBPACK_IMPORTED_MODULE_2_survey_knockout__["Serializer"].findProperty(params.target.getType(), params.name); model.valueChanged = function (newValue) { var options = { propertyName: property.name, obj: params.item, value: newValue, newValue: null, doValidation: false }; params.editor.onValueChangingCallback(options); newValue = options.newValue === null ? options.value : options.newValue; if (!newValue && params.name == "value") { newValue = params.item.value; } params.target[params.name] = newValue; params.editor.onPropertyValueChanged(property, params.target, newValue); !!params.valueChanged && params.valueChanged(params.target, property.name, newValue); }; return model; } }, template: templateHtml }); var itemAdorner = { inplaceEditForValues: false, getMarkerClass: function (model) { return !!model.parent && !!model.choices && typeof model.getType === "function" && model.getType() !== "imagepicker" ? "item_editable" : ""; }, getElementName: function (model) { return "controlLabel"; }, afterRender: function (elements, model, editor) { for (var i = 0; i < elements.length; i++) { elements[i].onclick = function (e) { return e.preventDefault(); }; var decoration = document.createElement("span"); decoration.className = "svda-adorner-root"; var itemValue = __WEBPACK_IMPORTED_MODULE_1_knockout__["dataFor"](elements[i]); var propertyName = itemAdorner.inplaceEditForValues ? "value" : "text"; var target = itemValue; if (itemValue === model["selectAllItem"]) { target = model; propertyName = "selectAllText"; } if (itemValue === model["noneItemValue"]) { target = model; propertyName = "noneText"; } if (itemValue === model["otherItemValue"]) { target = model; propertyName = "otherText"; } decoration.innerHTML = "<item-editor params='name: \"" + propertyName + "\", target: target, item: item, question: question, editor: editor'></item-editor>"; elements[i].appendChild(decoration); __WEBPACK_IMPORTED_MODULE_1_knockout__["applyBindings"]({ item: itemValue, question: model, target: target, editor: editor }, decoration); __WEBPACK_IMPORTED_MODULE_1_knockout__["tasks"].runEarly(); editor.onAdornerRenderedCallback(model, "choices-label", decoration, itemValue); } } }; __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_3__surveyjsObjects__["b" /* registerAdorner */])("choices-label", itemAdorner); var createAddItemHandler = function (question, onItemAdded, onItemAdding) { if (onItemAdding === void 0) { onItemAdding = null; } return function () { var nextValue = null; var values = question.choices.map(function (item) { return item.itemValue; }); var itemText = __WEBPACK_IMPORTED_MODULE_2_survey_knockout__["surveyLocalization"].getString("choices_Item"); nextValue = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_7__utils_utils__["a" /* getNextValue */])(itemText, values); var itemValue = new __WEBPACK_IMPORTED_MODULE_2_survey_knockout__["ItemValue"](nextValue); itemValue.locOwner = { getLocale: function () { if (!!question["getLocale"]) return question.getLocale(); return ""; }, getMarkdownHtml: function (text) { return text; }, getProcessedText: function (text) { return text; } }; !!onItemAdding && onItemAdding(itemValue); question.choices = question.choices.concat([itemValue]); itemValue = question.choices.filter(function (choiceItem) { return choiceItem.value === itemValue.value; })[0]; !!onItemAdded && onItemAdded(itemValue); }; }; var createAddItemElement = function (handler) { var addNew = document.createElement("div"); addNew.title = __WEBPACK_IMPORTED_MODULE_4__editorLocalization__["a" /* editorLocalization */].getString("pe.addItem"); addNew.className = "sv_technical svda-add-new-item svd-primary-icon svda-add-custom-item"; addNew.onclick = handler; var svgElem = document.createElementNS("http://www.w3.org/2000/svg", "svg"); svgElem.setAttribute("class", "svd-svg-icon"); svgElem.style.width = "12px"; svgElem.style.height = "12px"; var useElem = document.createElementNS("http://www.w3.org/2000/svg", "use"); useElem.setAttributeNS("http://www.w3.org/1999/xlink", "xlink:href", "#icon-inplaceplus"); svgElem.appendChild(useElem); addNew.appendChild(svgElem); // var title = document.createElement("span"); // title.innerHTML = addNew.title; // addNew.appendChild(title); return addNew; }; var createCustomElement = function (title, handler) { var element = document.createElement("div"); element.title = title; element.className = "sv_technical svda-add-new-item svda-add-custom-item"; element.onclick = handler; var titleEl = document.createElement("span"); titleEl.innerHTML = element.title; element.appendChild(titleEl); return element; }; var itemDraggableAdorner = { getMarkerClass: function (model) { return !!model.parent && !!model.choices && typeof model.getType === "function" && model.getType() !== "imagepicker" ? "item_draggable" : ""; }, getElementName: function (model) { return "item"; }, afterRender: function (elements, model, editor) { var itemsRoot = []; for (var i = 0; i < elements.length; i++) { if (itemsRoot.indexOf(elements[i].parentElement) === -1) { itemsRoot.push(elements[i].parentElement); } } for (var i = 0; i < elements.length; i++) { var itemValue = __WEBPACK_IMPORTED_MODULE_1_knockout__["dataFor"](elements[i]); if (itemValue === model["selectAllItemValue"] || itemValue === model["noneItemValue"] || itemValue === model["otherItemValue"]) { elements[i].classList.remove("item_draggable"); } } itemsRoot.forEach(function (itemRoot) { return __WEBPACK_IMPORTED_MODULE_5_sortablejs___default.a.create(itemRoot, { handle: ".svda-drag-handle", group: model.id, draggable: ".item_draggable", animation: 150, onEnd: function (evt) { var oldIndex = evt.oldIndex; var newIndex = evt.newIndex; var choices = model.choices; var choice = choices[evt.oldIndex]; if (model.hasColumns) { choice = __WEBPACK_IMPORTED_MODULE_1_knockout__["dataFor"](evt.item); var columnContent = __WEBPACK_IMPORTED_MODULE_1_knockout__["dataFor"](evt.item.parentElement); var itemBefore = columnContent && columnContent[newIndex]; oldIndex = choices.indexOf(choice); newIndex = choices.indexOf(itemBefore); } choices.splice(oldIndex, 1); choices.splice(newIndex, 0, choice); editor.onQuestionEditorChanged(model); } }); }); var addNew = createAddItemElement(createAddItemHandler(model, function (itemValue) { editor.onQuestionEditorChanged(model); }, function (itemValue) { editor.onItemValueAddedCallback(model, "choices", itemValue, model.choices); })); var raiseChangingEvent = function (target, propertyName, newValue) { var options = { propertyName: propertyName, obj: target, value: newValue, newValue: null, doValidation: false }; editor.onValueChangingCallback(options); newValue = options.newValue === null ? options.value : options.newValue; return newValue; }; var raiseChangedEvent = function (target, propertyName, newValue) { if (typeof target.getType === "function") { var property = __WEBPACK_IMPORTED_MODULE_2_survey_knockout__["Serializer"].findProperty(target.getType(), propertyName); editor.onPropertyValueChanged(property, target, newValue); } }; itemsRoot[0].appendChild(addNew); if (editor.canShowObjectProperty(model, "hasOther")) { itemsRoot[0].appendChild(createCustomElement(__WEBPACK_IMPORTED_MODULE_4__editorLocalization__["a" /* editorLocalization */].getString("pe.addOther"), function () { var newValue = !model.hasOther; newValue = raiseChangingEvent(model, "hasOther", newValue); model.hasOther = newValue; raiseChangedEvent(model, "hasOther", newValue); })); } if (model.hasSelectAll !== undefined && editor.canShowObjectProperty(model, "hasSelectAll")) { itemsRoot[0].appendChild(createCustomElement(__WEBPACK_IMPORTED_MODULE_4__editorLocalization__["a" /* editorLocalization */].getString("pe.addSelectAll"), function () { var newValue = !model.hasSelectAll; newValue = raiseChangingEvent(model, "hasSelectAll", newValue); model.hasSelectAll = newValue; raiseChangedEvent(model, "hasSelectAll", newValue); })); } if (model.hasNone !== undefined && editor.canShowObjectProperty(model, "hasNone")) { itemsRoot[0].appendChild(createCustomElement(__WEBPACK_IMPORTED_MODULE_4__editorLocalization__["a" /* editorLocalization */].getString("pe.addNone"), function () { var newValue = !model.hasNone; newValue = raiseChangingEvent(model, "hasNone", newValue); model.hasNone = newValue; raiseChangedEvent(model, "hasNone", newValue); })); } } }; __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_3__surveyjsObjects__["b" /* registerAdorner */])("choices-draggable", itemDraggableAdorner); /***/ }), /* 12 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_knockout__ = __webpack_require__(1); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_knockout___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_knockout__); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__propertyEditors_propertyEditorFactory__ = __webpack_require__(4); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return SurveyObjectProperty; }); var SurveyObjectProperty = /** @class */ (function () { function SurveyObjectProperty(property, onPropertyChanged, propertyEditorOptions) { if (onPropertyChanged === void 0) { onPropertyChanged = null; } if (propertyEditorOptions === void 0) { propertyEditorOptions = null; } this.property = property; this.koIsShowEditor = __WEBPACK_IMPORTED_MODULE_0_knockout__["observable"](false); this.onPropertyChanged = onPropertyChanged; this.name = this.property.name; this.disabled = property["readOnly"]; var self = this; var onItemChanged = function (newValue) { self.onEditorValueChanged(newValue); }; this.editor = __WEBPACK_IMPORTED_MODULE_1__propertyEditors_propertyEditorFactory__["a" /* SurveyPropertyEditorFactory */].createEditor(property, onItemChanged); this.editor.onGetLocale = this.doOnGetLocale; this.editor.options = propertyEditorOptions; this.editorType = this.editor.editorType; this.editorTypeTemplate = this.editor.editorTypeTemplate; this.isActive = false; this.koVisible = __WEBPACK_IMPORTED_MODULE_0_knockout__["observable"](this.isVisible()); } Object.defineProperty(SurveyObjectProperty.prototype, "displayName", { get: function () { return this.editor.displayName; }, enumerable: true, configurable: true }); Object.defineProperty(SurveyObjectProperty.prototype, "title", { get: function () { return this.editor.title; }, enumerable: true, configurable: true }); Object.defineProperty(SurveyObjectProperty.prototype, "isActive", { get: function () { return this.isActiveValue; }, set: function (val) { if (this.isActive == val) return; this.isActiveValue = val; this.koIsShowEditor(!this.disabled && (this.editor.alwaysShowEditor || this.isActive)); }, enumerable: true, configurable: true }); Object.defineProperty(SurveyObjectProperty.prototype, "koValue", { get: function () { return this.editor.koValue; }, enumerable: true, configurable: true }); Object.defineProperty(SurveyObjectProperty.prototype, "koText", { get: function () { return this.editor.koText; }, enumerable: true, configurable: true }); Object.defineProperty(SurveyObjectProperty.prototype, "koIsDefault", { get: function () { return this.editor.koIsDefault; }, enumerable: true, configurable: true }); SurveyObjectProperty.prototype.doOnGetLocale = function () { if (this.object && this.object["getLocale"]) return this.object.getLocale(); return ""; }; Object.defineProperty(SurveyObjectProperty.prototype, "object", { get: function () { return this.objectValue; }, set: function (value) { this.objectValue = value; this.editor.object = value; this.updateDependedProperties(); this.updateDynamicProperties(); }, enumerable: true, configurable: true }); SurveyObjectProperty.prototype.updateDynamicProperties = function () { this.koVisible(this.isVisible()); this.editor.updateDynamicProperties(); }; SurveyObjectProperty.prototype.isVisible = function () { if (!this.object) return true; var layout = !!this.object.getLayoutType ? this.object.getLayoutType() : ""; if (!!this.property.isVisible && !this.property["isVisible"](layout, this.object)) return false; return true; }; SurveyObjectProperty.prototype.onEditorValueChanged = function (newValue) { if (this.object) { if (!!this.onPropertyChanged) this.onPropertyChanged(this, newValue); if (!!this.onChanged) this.onChanged(newValue); } this.updateDependedProperties(); }; SurveyObjectProperty.prototype.updateDependedProperties = function () { if (!this.object || !this.onDependedPropertyUpdateCallback) return; if (!this.property["getDependedProperties"]) return; var props = this.property["getDependedProperties"](); if (!props) return; for (var i = 0; i < props.length; i++) { this.onDependedPropertyUpdateCallback(props[i]); } }; return SurveyObjectProperty; }()); /***/ }), /* 13 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_knockout__ = __webpack_require__(1); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_knockout___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_knockout__); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_survey_knockout__ = __webpack_require__(2); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_survey_knockout___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_survey_knockout__); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__editorLocalization__ = __webpack_require__(0); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return SurveyPropertyEditorBase; }); var SurveyPropertyEditorBase = /** @class */ (function () { function SurveyPropertyEditorBase(property) { this.editingValue_ = null; this.isApplyinNewValue = false; this.valueUpdatingCounter = 0; this.optionsValue = null; this.isRequriedValue = false; this.isCustomDisplayName = false; this._displayNameValue = __WEBPACK_IMPORTED_MODULE_0_knockout__["observable"](); this.isTabProperty = false; this.isInplaceProperty = false; this.iskoValueChanging = false; this.property_ = property; var self = this; this.koValue = __WEBPACK_IMPORTED_MODULE_0_knockout__["observable"](); this.koValue.subscribe(function (newValue) { self.onkoValueChanged(newValue); }); this.koText = __WEBPACK_IMPORTED_MODULE_0_knockout__["computed"](function () { return self.getValueText(self.koValue()); }); this.koIsDefault = __WEBPACK_IMPORTED_MODULE_0_knockout__["computed"](function () { return self.property ? self.property.isDefaultValue(self.koValue()) : false; }); this.koHasError = __WEBPACK_IMPORTED_MODULE_0_knockout__["observable"](false); this.koErrorText = __WEBPACK_IMPORTED_MODULE_0_knockout__["observable"](""); this.koDisplayError = __WEBPACK_IMPORTED_MODULE_0_knockout__["computed"](function () { return self.koHasError() && !!self.koErrorText(); }); this.koMaxLength = __WEBPACK_IMPORTED_MODULE_0_knockout__["computed"](function () { return !!self.property && !!self.property["maxLength"] && self.property["maxLength"] > 0 ? self.property["maxLength"] : 524288; }); this.koMaxValue = __WEBPACK_IMPORTED_MODULE_0_knockout__["computed"](function () { return !!self.property && !!self.property["maxValue"] ? self.property["maxValue"] : ""; }); this.koMinValue = __WEBPACK_IMPORTED_MODULE_0_knockout__["computed"](function () { return !!self.property && !!self.property["minValue"] ? self.property["minValue"] : ""; }); this.setIsRequired(); this.setTitleAndDisplayName(); this.readOnly = __WEBPACK_IMPORTED_MODULE_0_knockout__["observable"](this.getReadOnly()); } Object.defineProperty(SurveyPropertyEditorBase.prototype, "displayNameValue", { get: function () { return this._displayNameValue(); }, set: function (val) { this._displayNameValue(val); }, enumerable: true, configurable: true }); ; ; SurveyPropertyEditorBase.prototype.setup = function () { }; SurveyPropertyEditorBase.prototype.beforeShow = function () { }; Object.defineProperty(SurveyPropertyEditorBase.prototype, "editorType", { get: function () { throw "editorType is not defined"; }, enumerable: true, configurable: true }); Object.defineProperty(SurveyPropertyEditorBase.prototype, "editorTypeTemplate", { get: function () { return this.editorType; }, enumerable: true, configurable: true }); Object.defineProperty(SurveyPropertyEditorBase.prototype, "property", { get: function () { return this.property_; }, enumerable: true, configurable: true }); Object.defineProperty(SurveyPropertyEditorBase.prototype, "defaultValue", { get: function () { return this.property.defaultValue; }, enumerable: true, configurable: true }); Object.defineProperty(SurveyPropertyEditorBase.prototype, "editablePropertyName", { get: function () { return this.property ? this.property.name : ""; }, enumerable: true, configurable: true }); SurveyPropertyEditorBase.prototype.getReadOnly = function () { var res = this.property ? this.property.readOnly : false; if (!!this.options && !!this.property && !!this.object) { res = this.options.onIsEditorReadOnlyCallback(this.object, this, res); } return res; }; Object.defineProperty(SurveyPropertyEditorBase.prototype, "alwaysShowEditor", { get: function () { return false; }, enumerable: true, configurable: true }); Object.defineProperty(SurveyPropertyEditorBase.prototype, "title", { get: function () { return this.titleValue; }, enumerable: true, configurable: true }); Object.defineProperty(SurveyPropertyEditorBase.prototype, "isDiplayNameVisible", { get: function () { return ((!this.isTabProperty || !this.isModal) && !this.isInplaceProperty && this.displayName !== "."); }, enumerable: true, configurable: true }); Object.defineProperty(SurveyPropertyEditorBase.prototype, "displayName", { get: function () { return this.displayNameValue; }, set: function (val) { this.isCustomDisplayName = true; this.displayNameValue = val; }, enumerable: true, configurable: true }); Object.defineProperty(SurveyPropertyEditorBase.prototype, "showDisplayNameOnTop", { get: function () { return this.isDiplayNameVisible && this.canShowDisplayNameOnTop; }, enumerable: true, configurable: true }); Object.defineProperty(SurveyPropertyEditorBase.prototype, "canShowDisplayNameOnTop", { get: function () { return true; }, enumerable: true, configurable: true }); Object.defineProperty(SurveyPropertyEditorBase.prototype, "contentTemplateName", { get: function () { var res = "propertyeditor"; if (this.isModal) { res += "-modalcontent"; } else { res += "-" + this.editorTypeTemplate; } return res; }, enumerable: true, configurable: true }); Object.defineProperty(SurveyPropertyEditorBase.prototype, "isModal", { get: function () { return false; }, enumerable: true, configurable: true }); Object.defineProperty(SurveyPropertyEditorBase.prototype, "object", { get: function () { return this.objectValue; }, set: function (value) { this.setObjectCore(value); }, enumerable: true, configurable: true }); SurveyPropertyEditorBase.prototype.setObjectCore = function (value) { var _this = this; this.objectValue = value; if (typeof value.registerFunctionOnPropertyValueChanged === "function") { value.registerFunctionOnPropertyValueChanged(this.property.name, function () { return _this.updateValue(); }, this.property.name); } this.setIsRequired(); this.setTitleAndDisplayName(); this.setObject(this.object); this.updateValue(); if (this.options && this.property) { this.options.onPropertyEditorObjectSetCallback(this.property.name, this.object, this); this.readOnly(this.getReadOnly()); } }; SurveyPropertyEditorBase.prototype.getValueText = function (value) { return value; }; Object.defineProperty(SurveyPropertyEditorBase.prototype, "editingValue", { get: function () { return this.editingValue_; }, set: function (value) { value = this.getCorrectedValue(value); this.setValueCore(value); this.onValueChanged(); }, enumerable: true, configurable: true }); SurveyPropertyEditorBase.prototype.hasError = function () { this.koHasError(this.checkForErrors()); return this.koHasError(); }; SurveyPropertyEditorBase.prototype.getLocString = function (name) { return __WEBPACK_IMPORTED_MODULE_2__editorLocalization__["a" /* editorLocalization */].getString(name); }; SurveyPropertyEditorBase.prototype.hasLocString = function (name) { return __WEBPACK_IMPORTED_MODULE_2__editorLocalization__["a" /* editorLocalization */].hasString(name); }; Object.defineProperty(SurveyPropertyEditorBase.prototype, "isCurrentValueEmpty", { get: function () { return this.isValueEmpty(this.koValue()); }, enumerable: true, configurable: true }); SurveyPropertyEditorBase.prototype.checkForErrors = function () { var errorText = ""; if (this.isRequired || this.checkForItemValue()) { var er = this.isCurrentValueEmpty; if (er) { errorText = this.getLocString("pe.propertyIsEmpty"); } } if (!errorText && this.property && this.options && this.options.onGetErrorTextOnValidationCallback) { errorText = this.options.onGetErrorTextOnValidationCallback(this.property.name, this.object, this.editingValue); } this.koErrorText(errorText); return errorText !== ""; }; SurveyPropertyEditorBase.prototype.checkForItemValue = function () { //TODO Problem is in 882ca3ac commit. ItemValue without value should be invalid. Need to better fix for the problem. return (this.property && this.property.name === "value" && this.objectValue && typeof this.objectValue.getType === "function" && this.objectValue.getType() === "itemvalue"); }; Object.defineProperty(SurveyPropertyEditorBase.prototype, "isRequired", { get: function () { return this.isRequriedValue; }, enumerable: true, configurable: true }); SurveyPropertyEditorBase.prototype.setIsRequired = function () { this.isRequriedValue = !!this.property ? this.property.isRequired : false; }; SurveyPropertyEditorBase.prototype.setTitleAndDisplayName = function () { if (this.isCustomDisplayName) return; this.displayNameValue = this.property ? this.property.name : ""; this.titleValue = ""; if (!this.property) return; var locName = this.property.name; this.displayNameValue = __WEBPACK_IMPORTED_MODULE_2__editorLocalization__["a" /* editorLocalization */].getPropertyName(locName); var title = __WEBPACK_IMPORTED_MODULE_2__editorLocalization__["a" /* editorLocalization */].getPropertyTitle(locName); this.titleValue = title; }; SurveyPropertyEditorBase.prototype.onBeforeApply = function () { }; SurveyPropertyEditorBase.prototype.apply = function () { this.onBeforeApply(); if (this.hasError()) return false; this.isApplyinNewValue = true; this.koValue(this.editingValue); this.isApplyinNewValue = false; return true; }; Object.defineProperty(SurveyPropertyEditorBase.prototype, "locale", { get: function () { if (this.onGetLocale) return this.onGetLocale(); return ""; }, enumerable: true, configurable: true }); SurveyPropertyEditorBase.prototype.getLocale = function () { return this.locale; }; SurveyPropertyEditorBase.prototype.getMarkdownHtml = function (text) { return text; }; SurveyPropertyEditorBase.prototype.getProcessedText = function (text) { return text; }; Object.defineProperty(SurveyPropertyEditorBase.prototype, "options", { get: function () { return this.optionsValue; }, set: function (value) { this.optionsValue = value; this.onOptionsChanged(); }, enumerable: true, configurable: true }); SurveyPropertyEditorBase.prototype.onOptionsChanged = function () { }; SurveyPropertyEditorBase.prototype.setValueCore = function (value) { this.editingValue_ = value; }; SurveyPropertyEditorBase.prototype.setObject = function (value) { if (this.options) { var editorOptions = this.createEditorOptions(); this.options.onSetPropertyEditorOptionsCallback(this.editablePropertyName, value, editorOptions); this.onSetEditorOptions(editorOptions); } }; SurveyPropertyEditorBase.prototype.createEditorOptions = function () { return {}; }; SurveyPropertyEditorBase.prototype.onSetEditorOptions = function (editorOptions) { }; SurveyPropertyEditorBase.prototype.onValueChanged = function () { }; SurveyPropertyEditorBase.prototype.getCorrectedValue = function (value) { if (!this.property) return value; if (!__WEBPACK_IMPORTED_MODULE_1_survey_knockout__["Helpers"].isValueEmpty(this.property["minValue"])) { if (value < this.property["minValue"]) return this.property["minValue"]; } if (!__WEBPACK_IMPORTED_MODULE_1_survey_knockout__["Helpers"].isValueEmpty(this.property["maxValue"])) { if (value > this.property["maxValue"]) return this.property["maxValue"]; } return value; }; SurveyPropertyEditorBase.prototype.beginValueUpdating = function () { this.valueUpdatingCounter++; }; SurveyPropertyEditorBase.prototype.endValueUpdating = function () { if (this.valueUpdatingCounter > 0) { this.valueUpdatingCounter--; } }; SurveyPropertyEditorBase.prototype.updateValue = function () { this.beginValueUpdating(); this.koValue(this.getValue()); this.editingValue = this.koValue.peek(); if (this.onValueUpdated) this.onValueUpdated(this.editingValue); this.endValueUpdating(); }; SurveyPropertyEditorBase.prototype.getValue = function () { return this.property && this.object ? this.property.getPropertyValue(this.object) : null; }; SurveyPropertyEditorBase.prototype.onkoValueChanged = function (newValue) { if (this.valueUpdatingCounter > 0 || this.iskoValueChanging) return; this.iskoValueChanging = true; newValue = this.getCorrectedValue(newValue); if (this.options && this.property && this.object) { var options = { propertyName: this.property.name, obj: this.object, value: this.getValue(), newValue: newValue, doValidation: false }; this.updateEditingProperties(newValue); this.options.onValueChangingCallback(options); if (!this.isValueEmpty(options.newValue)) { newValue = options.newValue; this.koValue(newValue); } if (options.doValidation) { this.hasError(); } } this.updateEditingProperties(newValue); if (!this.isApplyinNewValue) { this.editingValue = newValue; } this.iskoValueChanging = false; if (this.property && this.object && this.getValue() == newValue) return; if (this.onChanged != null) this.onChanged(newValue); }; SurveyPropertyEditorBase.prototype.updateEditingProperties = function (newValue) { if (!this.isModal && !!this.object) { if (!this.object.editingProperties) { this.object.editingProperties = {}; } this.object.editingProperties[this.property.name] = newValue; } }; SurveyPropertyEditorBase.prototype.isValueEmpty = function (val) { return __WEBPACK_IMPORTED_MODULE_1_survey_knockout__["Helpers"].isValueEmpty(val); }; SurveyPropertyEditorBase.prototype.updateDynamicProperties = function () { }; SurveyPropertyEditorBase.prototype.keyDownHandler = function (property, event) { var surveyEditor = property.editor.options; if (!!surveyEditor) { surveyEditor.onPropertyEditorKeyDownCallback(property.property.name, property.obj, property.editor, event); } return true; }; return SurveyPropertyEditorBase; }()); /***/ }), /* 14 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(3); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_knockout__ = __webpack_require__(1); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_knockout___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_knockout__); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__propertyModalEditor__ = __webpack_require__(7); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__editorLocalization__ = __webpack_require__(0); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return SurveyPropertyItemsEditor; }); var SurveyPropertyItemsEditor = /** @class */ (function (_super) { __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__["a" /* __extends */])(SurveyPropertyItemsEditor, _super); function SurveyPropertyItemsEditor(property) { var _this = _super.call(this, property) || this; _this.sortableOptions = { handle: ".svd-drag-handle", animation: 150 }; _this.koItems = __WEBPACK_IMPORTED_MODULE_1_knockout__["observableArray"](); _this.editingValue = []; _this.koAllowAddRemoveItems = __WEBPACK_IMPORTED_MODULE_1_knockout__["observable"](true); var self = _this; self.onDeleteClick = function (item) { self.koItems.remove(item); }; self.onClearClick = function (item) { self.koItems.removeAll(); }; self.onAddClick = function () { self.AddItem(); }; return _this; } SurveyPropertyItemsEditor.prototype.getValueText = function (value) { var len = value ? value.length : 0; return __WEBPACK_IMPORTED_MODULE_3__editorLocalization__["a" /* editorLocalization */].getString("pe.items")["format"](len); }; SurveyPropertyItemsEditor.prototype.getCorrectedValue = function (value) { if (value == null || !Array.isArray(value)) value = []; return _super.prototype.getCorrectedValue.call(this, value); }; SurveyPropertyItemsEditor.prototype.createEditorOptions = function () { return { allowAddRemoveItems: true }; }; SurveyPropertyItemsEditor.prototype.onSetEditorOptions = function (editorOptions) { this.koAllowAddRemoveItems(editorOptions.allowAddRemoveItems); }; SurveyPropertyItemsEditor.prototype.AddItem = function () { this.koItems.push(this.createEditorItemCore()); }; SurveyPropertyItemsEditor.prototype.setupItems = function () { this.koItems(this.getItemsFromValue(this.editingValue)); }; SurveyPropertyItemsEditor.prototype.onValueChanged = function () { if (this.isShowingModal) { this.setupItems(); } }; SurveyPropertyItemsEditor.prototype.setup = function () { _super.prototype.setup.call(this); this.updateValue(); }; SurveyPropertyItemsEditor.prototype.getItemsFromValue = function (value) { if (value === void 0) { value = null; } var items = []; if (!value) value = this.editingValue; for (var i = 0; i < value.length; i++) { items.push(this.createEditorItemCore(value[i])); } return items; }; Object.defineProperty(SurveyPropertyItemsEditor.prototype, "isCurrentValueEmpty", { get: function () { return this.koItems().length == 0; }, enumerable: true, configurable: true }); SurveyPropertyItemsEditor.prototype.onBeforeApply = function () { var items = []; var internalItems = this.koItems(); for (var i = 0; i < internalItems.length; i++) { items.push(this.createItemFromEditorItem(internalItems[i])); } this.setValueCore(items); }; SurveyPropertyItemsEditor.prototype.createEditorItemCore = function (item) { if (item === void 0) { item = null; } var editorItem = !!item ? this.createEditorItem(item) : this.createNewEditorItem(); if (!!editorItem.onCreated) { editorItem.onCreated(); } return editorItem; }; SurveyPropertyItemsEditor.prototype.createNewEditorItem = function () { throw "Override 'createNewEditorItem' method"; }; SurveyPropertyItemsEditor.prototype.createEditorItem = function (item) { return item; }; SurveyPropertyItemsEditor.prototype.createItemFromEditorItem = function (editorItem) { return editorItem; }; return SurveyPropertyItemsEditor; }(__WEBPACK_IMPORTED_MODULE_2__propertyModalEditor__["a" /* SurveyPropertyModalEditor */])); /***/ }), /* 15 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(3); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_knockout__ = __webpack_require__(1); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_knockout___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_knockout__); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_survey_knockout__ = __webpack_require__(2); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_survey_knockout___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_survey_knockout__); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__propertyItemsEditor__ = __webpack_require__(14); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__questionEditors_questionEditor__ = __webpack_require__(17); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__editorLocalization__ = __webpack_require__(0); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__objectProperty__ = __webpack_require__(12); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__questionEditors_questionEditorDefinition__ = __webpack_require__(18); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return SurveyNestedPropertyEditor; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return SurveyNestedPropertyEditorItem; }); /* unused harmony export SurveyNestedPropertyEditorColumn */ /* unused harmony export SurveyNestedPropertyEditorEditorCell */ var SurveyNestedPropertyEditor = /** @class */ (function (_super) { __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__["a" /* __extends */])(SurveyNestedPropertyEditor, _super); function SurveyNestedPropertyEditor(property) { var _this = _super.call(this, property) || this; _this.koColumnsValue = __WEBPACK_IMPORTED_MODULE_1_knockout__["observable"]([]); _this.createColumns(); var self = _this; _this.koEditItem = __WEBPACK_IMPORTED_MODULE_1_knockout__["observable"](null); _this.koIsList = __WEBPACK_IMPORTED_MODULE_1_knockout__["observable"](true); _this.koActiveView = __WEBPACK_IMPORTED_MODULE_1_knockout__["observable"]("form"); _this.koEditItem.subscribe(function (newValue) { self.koIsList(self.koEditItem() == null); self.onListDetailViewChanged(); }); _this.onEditItemClick = function (item) { self.koEditItem(item); }; _this.onCancelEditItemClick = function () { var editItem = self.koEditItem(); if (editItem.itemEditor && editItem.itemEditor.hasError()) return; self.koEditItem(null); }; _this.koEditorName = __WEBPACK_IMPORTED_MODULE_1_knockout__["computed"](function () { return self.getEditorName(); }); return _this; } Object.defineProperty(SurveyNestedPropertyEditor.prototype, "canShowDisplayNameOnTop", { get: function () { return false; }, enumerable: true, configurable: true }); Object.defineProperty(SurveyNestedPropertyEditor.prototype, "columns", { get: function () { return this.koColumnsValue(); }, enumerable: true, configurable: true }); SurveyNestedPropertyEditor.prototype.beforeShow = function () { _super.prototype.beforeShow.call(this); this.koEditItem(null); }; SurveyNestedPropertyEditor.prototype.createColumns = function () { var result = []; var properties = this.getProperties(); for (var i = 0; i < properties.length; i++) { result.push(new SurveyNestedPropertyEditorColumn(properties[i])); } this.koColumnsValue(result); }; SurveyNestedPropertyEditor.prototype.getProperties = function () { return []; }; SurveyNestedPropertyEditor.prototype.getPropertiesNames = function (definitionName, defaultNames) { var res = []; var properties = __WEBPACK_IMPORTED_MODULE_7__questionEditors_questionEditorDefinition__["a" /* SurveyQuestionEditorDefinition */].getProperties(definitionName); if (properties) { for (var i = 0; i < properties.length; i++) { var prop = properties[i]; res.push(prop.name ? prop.name : prop); } } if (res.length == 0) { res = defaultNames; } return res; }; SurveyNestedPropertyEditor.prototype.getPropertiesByNames = function (className, names) { var res = []; for (var i = 0; i < names.length; i++) { var name = names[i]; name.name ? name.name : name; var prop = __WEBPACK_IMPORTED_MODULE_2_survey_knockout__["Serializer"].findProperty(className, name); if (prop && prop.visible) { res.push(prop); } } return res; }; SurveyNestedPropertyEditor.prototype.getEditorName = function () { return ""; }; SurveyNestedPropertyEditor.prototype.onListDetailViewChanged = function () { }; SurveyNestedPropertyEditor.prototype.checkForErrors = function () { var result = false; for (var i = 0; i < this.koItems().length; i++) { result = result || this.koItems()[i].hasError(); } return _super.prototype.checkForErrors.call(this) || result; }; SurveyNestedPropertyEditor.prototype.onBeforeApply = function () { var internalItems = this.koItems(); for (var i = 0; i < internalItems.length; i++) { internalItems[i].apply(); } _super.prototype.onBeforeApply.call(this); }; return SurveyNestedPropertyEditor; }(__WEBPACK_IMPORTED_MODULE_3__propertyItemsEditor__["a" /* SurveyPropertyItemsEditor */])); var SurveyNestedPropertyEditorItem = /** @class */ (function () { function SurveyNestedPropertyEditorItem(obj, getColumns, options) { var _this = this; this.obj = obj; this.getColumns = getColumns; this.koCellsValue = __WEBPACK_IMPORTED_MODULE_1_knockout__["observableArray"](); this.options = options; this.koHasDetails = __WEBPACK_IMPORTED_MODULE_1_knockout__["observable"](true); __WEBPACK_IMPORTED_MODULE_1_knockout__["computed"](function () { var columns = _this.getColumns(); _this.koCellsValue([]); for (var i = 0; i < columns.length; i++) { _this.koCellsValue.push(new SurveyNestedPropertyEditorEditorCell(obj, columns[i].property, _this.options)); } }); } SurveyNestedPropertyEditorItem.prototype.getClassName = function () { return ""; }; Object.defineProperty(SurveyNestedPropertyEditorItem.prototype, "columns", { get: function () { return this.getColumns(); }, enumerable: true, configurable: true }); SurveyNestedPropertyEditorItem.prototype.onCreated = function () { this.updateDetailButton(); }; SurveyNestedPropertyEditorItem.prototype.updateDetailButton = function () { this.koHasDetails(__WEBPACK_IMPORTED_MODULE_7__questionEditors_questionEditorDefinition__["a" /* SurveyQuestionEditorDefinition */].hasTabsToShow(this.getClassName())); }; Object.defineProperty(SurveyNestedPropertyEditorItem.prototype, "itemEditor", { get: function () { if (!this.itemEditorValue) this.itemEditorValue = this.createSurveyQuestionEditor(); return this.itemEditorValue; }, enumerable: true, configurable: true }); Object.defineProperty(SurveyNestedPropertyEditorItem.prototype, "cells", { get: function () { return this.koCellsValue(); }, enumerable: true, configurable: true }); SurveyNestedPropertyEditorItem.prototype.hasError = function () { if (this.itemEditorValue && this.itemEditorValue.hasError()) return true; var res = false; for (var i = 0; i < this.cells.length; i++) { res = this.cells[i].hasError || res; } return res; }; SurveyNestedPropertyEditorItem.prototype.resetSurveyQuestionEditor = function () { this.itemEditorValue = null; }; SurveyNestedPropertyEditorItem.prototype.createSurveyQuestionEditor = function () { return new __WEBPACK_IMPORTED_MODULE_4__questionEditors_questionEditor__["b" /* SurveyQuestionEditor */](this.obj, this.getClassName(), this.options); }; SurveyNestedPropertyEditorItem.prototype.apply = function () { if (this.itemEditorValue) this.itemEditorValue.apply(); }; return SurveyNestedPropertyEditorItem; }()); var SurveyNestedPropertyEditorColumn = /** @class */ (function () { function SurveyNestedPropertyEditorColumn(property) { this.property = property; } Object.defineProperty(SurveyNestedPropertyEditorColumn.prototype, "text", { get: function () { var text = __WEBPACK_IMPORTED_MODULE_5__editorLocalization__["a" /* editorLocalization */].hasString("pel." + this.property.name) ? this.getLocText("pel.") : this.getLocText("pe."); return text ? text : this.property.name; }, enumerable: true, configurable: true }); SurveyNestedPropertyEditorColumn.prototype.getLocText = function (prefix) { return __WEBPACK_IMPORTED_MODULE_5__editorLocalization__["a" /* editorLocalization */].getString(prefix + this.property.name); }; return SurveyNestedPropertyEditorColumn; }()); var SurveyNestedPropertyEditorEditorCell = /** @class */ (function () { function SurveyNestedPropertyEditorEditorCell(obj, property, options) { if (options === void 0) { options = null; } this.obj = obj; this.property = property; this.options = options; var self = this; var propEvent = function (property, newValue) { self.value = newValue; }; this.objectPropertyValue = new __WEBPACK_IMPORTED_MODULE_6__objectProperty__["a" /* SurveyObjectProperty */](this.property, propEvent, this.options); this.objectPropertyValue.editor.isInplaceProperty = true; this.objectProperty.object = obj; } Object.defineProperty(SurveyNestedPropertyEditorEditorCell.prototype, "objectProperty", { get: function () { return this.objectPropertyValue; }, enumerable: true, configurable: true }); Object.defineProperty(SurveyNestedPropertyEditorEditorCell.prototype, "editor", { get: function () { return this.objectProperty.editor; }, enumerable: true, configurable: true }); Object.defineProperty(SurveyNestedPropertyEditorEditorCell.prototype, "koValue", { get: function () { return this.objectProperty.editor.koValue; }, enumerable: true, configurable: true }); Object.defineProperty(SurveyNestedPropertyEditorEditorCell.prototype, "value", { get: function () { return this.property.getValue(this.obj); }, set: function (val) { this.obj[this.property.name] = val; }, enumerable: true, configurable: true }); Object.defineProperty(SurveyNestedPropertyEditorEditorCell.prototype, "hasError", { get: function () { return this.editor.hasError(); }, enumerable: true, configurable: true }); return SurveyNestedPropertyEditorEditorCell; }()); /***/ }), /* 16 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(3); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_knockout__ = __webpack_require__(1); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_knockout___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_knockout__); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_survey_knockout__ = __webpack_require__(2); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_survey_knockout___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_survey_knockout__); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__propertyItemsEditor__ = __webpack_require__(14); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__questionEditors_questionEditor__ = __webpack_require__(17); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return SurveyPropertyOneSelectedEditor; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return SurveyPropertyOneSelectedItem; }); var SurveyPropertyOneSelectedEditor = /** @class */ (function (_super) { __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__["a" /* __extends */])(SurveyPropertyOneSelectedEditor, _super); function SurveyPropertyOneSelectedEditor(property) { var _this = _super.call(this, property) || this; _this.selectedObjectEditor = __WEBPACK_IMPORTED_MODULE_1_knockout__["observable"](null); _this.koSelected = __WEBPACK_IMPORTED_MODULE_1_knockout__["observable"](null); var self = _this; _this.koAvailableClasses = __WEBPACK_IMPORTED_MODULE_1_knockout__["observableArray"](_this.getAvailableClasses()); _this.koSelected.subscribe(function (newValue) { if (!!self.selectedObjectEditor()) { self.selectedObjectEditor().apply(); } var editor = newValue != null ? new __WEBPACK_IMPORTED_MODULE_4__questionEditors_questionEditor__["b" /* SurveyQuestionEditor */](newValue.obj, null, self.options) : null; self.selectedObjectEditor(editor); }); _this.onDeleteClick = function () { if (self.readOnly()) return; self.koItems.remove(self.koSelected()); }; _this.onAddClick = function (item) { self.addNewItem(!!item ? item.value : null); }; return _this; } SurveyPropertyOneSelectedEditor.prototype.onBeforeApply = function () { if (!!this.selectedObjectEditor()) { this.selectedObjectEditor().apply(); } _super.prototype.onBeforeApply.call(this); }; Object.defineProperty(SurveyPropertyOneSelectedEditor.prototype, "editorTypeTemplate", { get: function () { return "oneselected"; }, enumerable: true, configurable: true }); Object.defineProperty(SurveyPropertyOneSelectedEditor.prototype, "editorType", { get: function () { return "oneselected"; }, enumerable: true, configurable: true }); SurveyPropertyOneSelectedEditor.prototype.createOneSelectedItem = function (obj) { return new SurveyPropertyOneSelectedItem(obj); }; SurveyPropertyOneSelectedEditor.prototype.getObjClassName = function () { return this.currentObjClassName; }; SurveyPropertyOneSelectedEditor.prototype.getAvailableClasses = function () { return []; }; SurveyPropertyOneSelectedEditor.prototype.addNewItem = function (className) { this.currentObjClassName = className; this.AddItem(); this.koSelected(this.koItems()[this.koItems().length - 1]); }; SurveyPropertyOneSelectedEditor.prototype.onValueChanged = function () { _super.prototype.onValueChanged.call(this); if (this.koSelected) { this.koSelected(this.koItems().length > 0 ? this.koItems()[0] : null); } }; SurveyPropertyOneSelectedEditor.prototype.createEditorItem = function (item) { var jsonObj = new __WEBPACK_IMPORTED_MODULE_2_survey_knockout__["JsonObject"](); var newItem = __WEBPACK_IMPORTED_MODULE_2_survey_knockout__["Serializer"].createClass(item.getType()); jsonObj.toObject(item.toJSON(), newItem); this.setItemProperties(newItem); return this.createOneSelectedItem(newItem); }; SurveyPropertyOneSelectedEditor.prototype.createNewEditorItem = function () { return this.createEditorItem(__WEBPACK_IMPORTED_MODULE_2_survey_knockout__["Serializer"].createClass(this.getObjClassName())); }; SurveyPropertyOneSelectedEditor.prototype.createItemFromEditorItem = function (editorItem) { var item = editorItem; delete item.obj["survey"]; return item.obj; }; SurveyPropertyOneSelectedEditor.prototype.setItemProperties = function (obj) { if (this.object) { obj["survey"] = this.object.getType() == "survey" ? this.object : this.object.survey; } obj.locOwner = this; }; return SurveyPropertyOneSelectedEditor; }(__WEBPACK_IMPORTED_MODULE_3__propertyItemsEditor__["a" /* SurveyPropertyItemsEditor */])); var SurveyPropertyOneSelectedItem = /** @class */ (function () { function SurveyPropertyOneSelectedItem(obj) { this.obj = obj; this.koText = __WEBPACK_IMPORTED_MODULE_1_knockout__["observable"](this.getText()); } SurveyPropertyOneSelectedItem.prototype.getText = function () { return ""; }; SurveyPropertyOneSelectedItem.prototype.objectChanged = function () { this.koText(this.getText()); }; return SurveyPropertyOneSelectedItem; }()); /***/ }), /* 17 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_knockout__ = __webpack_require__(1); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_knockout___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_knockout__); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__editorLocalization__ = __webpack_require__(0); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__questionEditorProperties__ = __webpack_require__(35); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__questionEditorDefinition__ = __webpack_require__(18); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_4_survey_knockout__ = __webpack_require__(2); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_4_survey_knockout___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_4_survey_knockout__); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_5_rmodal__ = __webpack_require__(43); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__surveyHelper__ = __webpack_require__(5); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__utils_utils__ = __webpack_require__(8); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_8__propertyEditors_editableObject__ = __webpack_require__(10); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return SurveyPropertyEditorShowWindow; }); /* unused harmony export SurveyQuestionProperties */ /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return SurveyQuestionEditor; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "c", function() { return SurveyQuestionEditorTab; }); var SurveyPropertyEditorShowWindow = /** @class */ (function () { function SurveyPropertyEditorShowWindow() { this.koVisible = __WEBPACK_IMPORTED_MODULE_0_knockout__["observable"](false); this.koEditor = __WEBPACK_IMPORTED_MODULE_0_knockout__["observable"](null); } SurveyPropertyEditorShowWindow.prototype.show = function (question, elWindow, onChanged, options, onClosed) { if (options === void 0) { options = null; } if (onClosed === void 0) { onClosed = null; } var editor = new SurveyQuestionEditor(question, null, options); editor.onChanged = onChanged; this.koEditor(editor); this.koVisible(true); var modal = new __WEBPACK_IMPORTED_MODULE_5_rmodal__["a" /* default */](elWindow, { bodyClass: "", closeTimeout: 100, dialogOpenClass: "animated fadeIn", focus: false, afterClose: function () { if (onClosed) onClosed(); } }); modal.open(); document.addEventListener("keydown", function (ev) { modal.keydown(ev); }, false); editor.onHideWindow = function () { modal.close(); }; }; return SurveyPropertyEditorShowWindow; }()); var SurveyQuestionProperties = /** @class */ (function () { function SurveyQuestionProperties(obj, options) { if (options === void 0) { options = null; } this.obj = obj; this.options = options; this.properties = __WEBPACK_IMPORTED_MODULE_4_survey_knockout__["Serializer"].getPropertiesByObj(this.obj); this.editorDefinition = __WEBPACK_IMPORTED_MODULE_3__questionEditorDefinition__["a" /* SurveyQuestionEditorDefinition */].getAllDefinitionsByClass(this.obj.getType()); } SurveyQuestionProperties.prototype.getProperty = function (propertyName) { var property = this.getPropertyCore(propertyName); if (!property) return null; return __WEBPACK_IMPORTED_MODULE_6__surveyHelper__["b" /* SurveyHelper */].isPropertyVisible(this.obj, property, this.options) ? property : null; }; SurveyQuestionProperties.prototype.getPropertyCore = function (propertyName) { for (var i = 0; i < this.properties.length; i++) { if (this.properties[i].name == propertyName) return this.properties[i]; } return null; }; SurveyQuestionProperties.prototype.getProperties = function (tab) { var _this = this; return this.editorDefinition .reduce(function (a, b) { return a.concat(b.properties); }, [ { name: tab.name, tab: tab.name } ]) .filter(function (prop) { return prop !== undefined && typeof prop !== "string" && prop.tab === tab.name; }) .map(function (prop) { return typeof prop !== "string" && _this.getPropertyCore(prop.name); }) .filter(function (prop) { return !!prop && ((prop.name == tab.name && tab.visible === true) || __WEBPACK_IMPORTED_MODULE_6__surveyHelper__["b" /* SurveyHelper */].isPropertyVisible(_this.obj, prop, _this.options)); }); }; return SurveyQuestionProperties; }()); var SurveyQuestionEditor = /** @class */ (function () { function SurveyQuestionEditor(obj, className, options) { if (className === void 0) { className = null; } if (options === void 0) { options = null; } this.className = className; this.options = options; this.koActiveTab = __WEBPACK_IMPORTED_MODULE_0_knockout__["observable"](); this.koTitle = __WEBPACK_IMPORTED_MODULE_0_knockout__["observable"](); this.editableObject = new __WEBPACK_IMPORTED_MODULE_8__propertyEditors_editableObject__["a" /* EditableObject */](obj); var self = this; if (!this.className && this.obj.getType) { this.className = this.obj.getType(); } this.properties = new SurveyQuestionProperties(this.editableObj, this.options); self.onApplyClick = function () { self.apply(); }; self.onOkClick = function () { self.doCloseWindow(false); }; self.onResetClick = function () { self.doCloseWindow(true); }; this.onTabClick = function (tab) { self.koActiveTab(tab.name); }; var tabs = this.buildTabs(); this.koTabs = __WEBPACK_IMPORTED_MODULE_0_knockout__["observableArray"](tabs); tabs.forEach(function (tab) { return tab.beforeShow(); }); if (tabs.length > 0) { this.koActiveTab(tabs[0].name); } this.koShowApplyButton = __WEBPACK_IMPORTED_MODULE_0_knockout__["observable"](!this.options || this.options.showApplyButtonInEditors); this.koTitle(this.getTitle()); } Object.defineProperty(SurveyQuestionEditor.prototype, "obj", { get: function () { return this.editableObject.obj; }, enumerable: true, configurable: true }); Object.defineProperty(SurveyQuestionEditor.prototype, "editableObj", { get: function () { return this.editableObject.editableObj; }, enumerable: true, configurable: true }); Object.defineProperty(SurveyQuestionEditor.prototype, "readOnly", { get: function () { return !!this.options && this.options.readOnly; }, enumerable: true, configurable: true }); SurveyQuestionEditor.prototype.getTitle = function () { var res; if (this.editableObj["name"]) { res = __WEBPACK_IMPORTED_MODULE_1__editorLocalization__["a" /* editorLocalization */] .getString("pe.qEditorTitle")["format"](this.editableObj["name"]); } else { res = __WEBPACK_IMPORTED_MODULE_1__editorLocalization__["a" /* editorLocalization */].getString("pe.surveyEditorTitle"); } if (!!this.options && this.options.onGetElementEditorTitleCallback) { res = this.options.onGetElementEditorTitleCallback(this.editableObj, res); } return res; }; SurveyQuestionEditor.prototype.doCloseWindow = function (isCancel) { var appliedSuccesfull = false; if (!isCancel) { appliedSuccesfull = this.apply(); } if (isCancel || appliedSuccesfull) { var tabs = this.koTabs(); for (var i = 0; i < tabs.length; i++) { tabs[i].doCloseWindow(); } if (this.onHideWindow) this.onHideWindow(); } }; SurveyQuestionEditor.prototype.hasError = function () { var tabs = this.koTabs(); for (var i = 0; i < tabs.length; i++) { if (tabs[i].hasError()) { this.koActiveTab(tabs[i].name); return true; } } return false; }; SurveyQuestionEditor.prototype.reset = function () { this.editableObject.reset(); var tabs = this.koTabs(); for (var i = 0; i < tabs.length; i++) { tabs[i].reset(); } }; SurveyQuestionEditor.prototype.apply = function () { var res = true; var isFirstError = false; var tabs = this.koTabs(); for (var i = 0; i < tabs.length; i++) { var tabRes = tabs[i].apply(); if (!tabRes) { tabs[i].expand(); if (!isFirstError) { this.koActiveTab(tabs[i].name); isFirstError = true; } } res = tabRes && res; } if (res) { for (var i = 0; i < tabs.length; i++) { tabs[i].applyToObj(this.obj); } if (this.onChanged) { this.onChanged(this.obj); } } return res; }; SurveyQuestionEditor.prototype.getPropertyEditorByName = function (propertyName) { var tabs = this.koTabs(); for (var i = 0; i < tabs.length; i++) { var res = tabs[i].getPropertyEditorByName(propertyName); if (!!res) return res; } return res; }; SurveyQuestionEditor.prototype.buildTabs = function () { var tabs = []; var self = this; var properties = new __WEBPACK_IMPORTED_MODULE_2__questionEditorProperties__["a" /* SurveyQuestionEditorProperties */](this.editableObj, __WEBPACK_IMPORTED_MODULE_3__questionEditorDefinition__["a" /* SurveyQuestionEditorDefinition */].getProperties(this.className), this.options, null, function (propName) { return self.getQuestionEditorPropertyByName(propName); }); if (__WEBPACK_IMPORTED_MODULE_3__questionEditorDefinition__["a" /* SurveyQuestionEditorDefinition */].isGeneralTabVisible(this.className)) { tabs.push(new SurveyQuestionEditorTab(this.editableObj, properties, "general")); } this.addPropertiesTabs(tabs); return tabs; }; SurveyQuestionEditor.prototype.addPropertiesTabs = function (tabs) { var self = this; var tabNames = __WEBPACK_IMPORTED_MODULE_3__questionEditorDefinition__["a" /* SurveyQuestionEditorDefinition */].getTabs(this.className); for (var i = 0; i < tabNames.length; i++) { var tabItem = tabNames[i]; var properties = this.properties.getProperties(tabItem); if (properties.length > 0) { var propertyTab = new SurveyQuestionEditorTab(this.editableObj, new __WEBPACK_IMPORTED_MODULE_2__questionEditorProperties__["a" /* SurveyQuestionEditorProperties */](this.editableObj, properties, this.options, tabItem, function (propName) { return self.getQuestionEditorPropertyByName(propName); }), tabItem.name); propertyTab.title = tabItem.title; tabs.push(propertyTab); } } }; SurveyQuestionEditor.prototype.getQuestionEditorPropertyByName = function (propName) { if (!this.koTabs) return null; var tabs = this.koTabs(); for (var i = 0; i < tabs.length; i++) { var res = tabs[i].getPropertyEditorByName(propName); if (!!res) return res; } return null; }; Object.defineProperty(SurveyQuestionEditor.prototype, "useTabsInElementEditor", { get: function () { return (!!this.options && this.options.useTabsInElementEditor && this.koTabs().length > 1); }, enumerable: true, configurable: true }); return SurveyQuestionEditor; }()); var SurveyQuestionEditorTab = /** @class */ (function () { function SurveyQuestionEditorTab(obj, properties, _name) { if (properties === void 0) { properties = null; } this.obj = obj; this.properties = properties; this._name = _name; } SurveyQuestionEditorTab.prototype.expand = function () { if (!!this.onExpand) this.onExpand(); }; SurveyQuestionEditorTab.prototype.koAfterRender = function (elements, context) { __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_7__utils_utils__["c" /* focusFirstControl */])(elements); }; Object.defineProperty(SurveyQuestionEditorTab.prototype, "name", { get: function () { return this._name; }, enumerable: true, configurable: true }); Object.defineProperty(SurveyQuestionEditorTab.prototype, "title", { get: function () { if (this.titleValue) return this.titleValue; var str = __WEBPACK_IMPORTED_MODULE_1__editorLocalization__["a" /* editorLocalization */].getString("pe.tabs." + this.name); return str ? str : this.name; }, set: function (value) { this.titleValue = value; }, enumerable: true, configurable: true }); Object.defineProperty(SurveyQuestionEditorTab.prototype, "htmlTemplate", { get: function () { return "questioneditortab"; }, enumerable: true, configurable: true }); Object.defineProperty(SurveyQuestionEditorTab.prototype, "templateObject", { get: function () { return this; }, enumerable: true, configurable: true }); SurveyQuestionEditorTab.prototype.hasError = function () { return this.properties.hasError(); }; SurveyQuestionEditorTab.prototype.beforeShow = function () { this.properties.beforeShow(); }; SurveyQuestionEditorTab.prototype.reset = function () { this.properties.reset(); }; SurveyQuestionEditorTab.prototype.apply = function () { return this.properties.apply(); }; SurveyQuestionEditorTab.prototype.applyToObj = function (obj) { return this.properties.applyToObj(obj); }; SurveyQuestionEditorTab.prototype.getPropertyEditorByName = function (propertyName) { return this.properties.getPropertyEditorByName(propertyName); }; SurveyQuestionEditorTab.prototype.doCloseWindow = function () { }; SurveyQuestionEditorTab.prototype.getValue = function (property) { return property.getPropertyValue(this.obj); }; return SurveyQuestionEditorTab; }()); /***/ }), /* 18 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_survey_knockout__ = __webpack_require__(2); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_survey_knockout___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_survey_knockout__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return SurveyQuestionEditorDefinition; }); var SurveyQuestionEditorDefinition = /** @class */ (function () { function SurveyQuestionEditorDefinition() { } SurveyQuestionEditorDefinition.getProperties = function (className) { var properties = []; var allDefinitions = SurveyQuestionEditorDefinition.getAllDefinitionsByClass(className); for (var i = 0; i < allDefinitions.length; i++) { var def = allDefinitions[i]; if (def.properties) { for (var j = 0; j < def.properties.length; j++) { if (!def.properties[j]["tab"] || def.properties[j]["tab"] === "general") { properties.push(def.properties[j]); } } } } return properties; }; SurveyQuestionEditorDefinition.hasTabsToShow = function (className) { return (SurveyQuestionEditorDefinition.isGeneralTabVisible(className) || SurveyQuestionEditorDefinition.getTabs(className).length > 0); }; SurveyQuestionEditorDefinition.isGeneralTabVisible = function (className) { var allDefinitions = SurveyQuestionEditorDefinition.getAllDefinitionsByClass(className); for (var i = 0; i < allDefinitions.length; i++) { var def = allDefinitions[i]; if (def.tabs) { for (var j = 0; j < def.tabs.length; j++) { var tab = def.tabs[j]; if (tab.name == "general") return tab.visible !== false; } } } return true; }; SurveyQuestionEditorDefinition.getTabs = function (className) { var tabs = []; var allDefinitions = SurveyQuestionEditorDefinition.getAllDefinitionsByClass(className); var tabsNamesHash = {}; for (var i = allDefinitions.length - 1; i >= 0; i--) { var def = allDefinitions[i]; if (def.tabs) { for (var j = 0; j < def.tabs.length; j++) { var tab = def.tabs[j]; if (tabsNamesHash[tab.name]) continue; tabsNamesHash[tab.name] = true; if (tab.visible !== false) { tabs.push(tab); } } } } tabs.sort(function (a, b) { return a.index < b.index ? -1 : a.index > b.index ? 1 : 0; }); return tabs; }; SurveyQuestionEditorDefinition.getAllDefinitionsByClass = function (className) { var result = []; if (className.indexOf("@") > -1 && SurveyQuestionEditorDefinition.definition[className]) { result.push(SurveyQuestionEditorDefinition.definition[className]); return result; } var curClassName = className; while (curClassName) { var metaClass = (__WEBPACK_IMPORTED_MODULE_0_survey_knockout__["Serializer"].findClass(curClassName)); if (!metaClass) break; if (SurveyQuestionEditorDefinition.definition[metaClass.name]) { result.unshift(SurveyQuestionEditorDefinition.definition[metaClass.name]); } curClassName = metaClass.parentName; } if (result.length == 0) { var properties = __WEBPACK_IMPORTED_MODULE_0_survey_knockout__["Serializer"].getProperties(className); var classRes = { properties: [] }; for (var i = 0; i < properties.length; i++) { if (properties[i].isVisible(null)) { classRes.properties.push(properties[i].name); } } result.push(classRes); } return result; }; SurveyQuestionEditorDefinition.definition = { question: { properties: [ "name", "title", "description", { name: "visible", category: "checks" }, { name: "isRequired", category: "checks" }, { name: "startWithNewLine", category: "checks" } ], tabs: [ { name: "visibleIf", index: 100 }, { name: "enableIf", index: 110 } ] }, comment: { properties: ["rows", "placeHolder"] }, file: { properties: [ { name: "showPreview", category: "imageChecks" }, { name: "storeDataAsText", category: "imageChecks" }, "maxSize", "imageHeight", "imageWidth" ] }, html: { tabs: [{ name: "html", index: 10 }] }, matrixdropdownbase: { properties: ["cellType", "columnsLocation"], tabs: [ { name: "columns", index: 10 }, { name: "rows", index: 11 }, { name: "choices", index: 12 } ] }, matrixdynamic: { properties: ["rowCount", "addRowLocation", "addRowText", "removeRowText"] }, matrixdropdown: { properties: ["totalText"] }, matrix: { properties: ["isAllRowRequired"], tabs: [{ name: "columns", index: 10 }, { name: "rows", index: 11 }] }, multipletext: { properties: ["colCount"], tabs: [{ name: "items", index: 10 }] }, rating: { properties: [ "rateMin", "rateMax", "rateStep", "minRateDescription", "maxRateDescription" ], tabs: [{ name: "rateValues", index: 10 }] }, selectbase: { properties: [ { name: "hasOther", tab: "choices" }, { name: "otherText", tab: "choices" }, "choicesOrder", "colCount" ], tabs: [ { name: "choices", index: 10 }, { name: "choicesByUrl", index: 11 }, { name: "validators", index: 200 } ] }, "itemvalue[]@choices": { title: "Rules", tabs: [ { name: "general", visible: false }, { name: "visibleIf", visible: true }, { name: "enableIf", visible: true } ] }, "itemvalue[]@rows": { title: "Rules", tabs: [ { name: "general", visible: false }, { name: "visibleIf", visible: true } ] }, "itemvalue[]@columns": { title: "Rules", tabs: [ { name: "general", visible: false }, { name: "visibleIf", visible: true } ] }, checkbox: { properties: [ { name: "hasSelectAll", tab: "choices" }, { name: "selectAllText", tab: "choices" }, { name: "hasNone", tab: "choices" }, { name: "noneText", tab: "choices" } ] }, radiogroup: {}, dropdown: { properties: [ "optionsCaption", { name: "choicesMin", tab: "choices" }, { name: "choicesMax", tab: "choices" }, { name: "choicesStep", tab: "choices" } ] }, text: { properties: ["inputType", "placeHolder"], tabs: [{ name: "validators", index: 200 }] }, boolean: { properties: ["label"] }, expression: { properties: ["currency", "displayStyle", "format"], tabs: [{ name: "expression", index: 10 }] }, matrixdropdowncolumn: { properties: [ "isRequired", "cellType", "name", "title", { name: "totalType", tab: "totals" }, { name: "totalDisplayStyle", tab: "totals" }, { name: "totalCurrency", tab: "totals" }, { name: "totalFormat", tab: "totals" }, { name: "totalExpression", tab: "totals" } ] }, "matrixdropdowncolumn@default": { properties: ["width"], tabs: [ { name: "general", visible: false }, { name: "visibleIf", index: 12 }, { name: "enableIf", index: 20 }, { name: "requiredIf", index: 30 }, { name: "totals", index: 40 } ] }, "matrixdropdowncolumn@checkbox": { properties: ["hasOther", "otherText", "choicesOrder", "colCount", "width"], tabs: [ { name: "choices", index: 10 }, { name: "choicesByUrl", index: 11 }, { name: "visibleIf", index: 12 }, { name: "enableIf", index: 20 }, { name: "requiredIf", index: 30 }, { name: "totals", index: 40 } ] }, "matrixdropdowncolumn@radiogroup": { properties: ["hasOther", "otherText", "choicesOrder", "colCount", "width"], tabs: [ { name: "choices", index: 10 }, { name: "choicesByUrl", index: 11 }, { name: "visibleIf", index: 12 }, { name: "enableIf", index: 20 }, { name: "requiredIf", index: 30 }, { name: "totals", index: 40 } ] }, "matrixdropdowncolumn@dropdown": { properties: ["hasOther", "otherText", "choicesOrder", "optionsCaption", "width"], tabs: [ { name: "choices", index: 10 }, { name: "choicesByUrl", index: 11 }, { name: "visibleIf", index: 12 }, { name: "enableIf", index: 20 }, { name: "requiredIf", index: 30 }, { name: "totals", index: 40 } ] }, "matrixdropdowncolumn@text": { properties: ["inputType", "placeHolder", "maxLength", "width"], tabs: [ { name: "validators", index: 10 }, { name: "visibleIf", index: 12 }, { name: "enableIf", index: 20 }, { name: "requiredIf", index: 30 }, { name: "totals", index: 40 } ] }, "matrixdropdowncolumn@comment": { properties: ["rows", "placeHolder", "maxLength", "width"], tabs: [ { name: "validators", index: 10 }, { name: "visibleIf", index: 12 }, { name: "enableIf", index: 20 }, { name: "requiredIf", index: 30 }, { name: "totals", index: 40 } ] }, "matrixdropdowncolumn@boolean": { properties: ["defaultValue", "width"], tabs: [ { name: "visibleIf", index: 12 }, { name: "enableIf", index: 20 }, { name: "requiredIf", index: 30 }, { name: "totals", index: 40 } ] }, "matrixdropdowncolumn@expression": { properties: ["name", "displayStyle", "currency", "width"], tabs: [{ name: "expression", index: 10 }, { name: "totals", index: 40 }] }, multipletextitem: { properties: [ "inputType", "maxLength", "placeHolder", "requiredErrorText" ], tabs: [{ name: "validators", index: 10 }] }, paneldynamic: { properties: [ { name: "renderMode", category: "render" }, { name: "allowAddPanel", category: "render" }, { name: "allowRemovePanel", category: "render" }, "panelAddText", "panelRemoveText" ], tabs: [{ name: "templateTitle", index: 10 }] }, panel: { properties: ["name", "title", { name: "visible", category: "checks" }], tabs: [{ name: "visibleIf", index: 100 }] }, page: { properties: [ "name", "title", "description", { name: "visible", category: "checks" }, "questionsOrder" ], tabs: [{ name: "visibleIf", index: 100 }] }, survey: { properties: [ "title", "description", "showTitle", "locale", "mode", "clearInvisibleValues", "cookieName", { name: "sendResultOnPageNext", category: "data" }, { name: "storeOthersAsComment", category: "data" }, { name: "showPageTitles", category: "page" }, { name: "showPageNumbers", category: "page" }, { name: "pagePrevText", tab: "navigation" }, { name: "pageNextText", tab: "navigation" }, { name: "completeText", tab: "navigation" }, { name: "startSurveyText", tab: "navigation" }, { name: "showNavigationButtons", tab: "navigation", category: "navbuttons" }, { name: "showPrevButton", tab: "navigation", category: "navbuttons" }, { name: "firstPageIsStarted", tab: "navigation", category: "navpages" }, { name: "showCompletedPage", tab: "navigation", category: "navpages" }, { name: "goNextPageAutomatic", tab: "navigation", category: "navopt" }, { name: "showProgressBar", tab: "navigation", category: "navopt" }, { name: "isSinglePage", tab: "navigation" }, { name: "questionTitleLocation", tab: "question" }, { name: "requiredText", tab: "question" }, { name: "questionStartIndex", tab: "question" }, { name: "showQuestionNumbers", tab: "question" }, { name: "questionTitleTemplate", tab: "question" }, { name: "questionErrorLocation", tab: "question" }, { name: "focusFirstQuestionAutomatic", tab: "question" }, { name: "questionsOrder", tab: "question" }, { name: "maxTimeToFinish", tab: "timer" }, { name: "maxTimeToFinishPage", tab: "timer" }, { name: "showTimerPanel", tab: "timer", category: "check" }, { name: "showTimerPanelMode", tab: "timer", category: "check" } ], tabs: [ { name: "navigation", index: 10 }, { name: "question", index: 20 }, { name: "completedHtml", index: 70 }, { name: "completedHtmlOnCondition", index: 75 }, { name: "loadingHtml", index: 80 }, { name: "timer", index: 90 }, { name: "calculatedValues", index: 95 }, { name: "triggers", index: 100 } ] } }; return SurveyQuestionEditorDefinition; }()); /***/ }), /* 19 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_knockout__ = __webpack_require__(1); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_knockout___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_knockout__); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__surveyjsObjects__ = __webpack_require__(6); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__editorLocalization__ = __webpack_require__(0); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__title_editor_scss__ = __webpack_require__(89); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__title_editor_scss___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_3__title_editor_scss__); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_4_survey_knockout__ = __webpack_require__(2); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_4_survey_knockout___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_4_survey_knockout__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return TitleInplaceEditor; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return titleAdorner; }); /* unused harmony export itemTitleAdorner */ var templateHtml = __webpack_require__(141); var FRIENDLY_PADDING = 36; function resizeInput(target) { var computedStyle = window.getComputedStyle(target); target.style.width = getTextWidth(target.value, computedStyle.font) + FRIENDLY_PADDING + "px"; } /** * Uses canvas.measureText to compute and return the width of the given text of given font in pixels. * * @param {String} text The text to be rendered. * @param {String} font The css font descriptor that text is to be rendered with (e.g. "bold 14px verdana"). * * @see https://stackoverflow.com/questions/118241/calculate-text-width-with-javascript/21015393#21015393 */ var cachedCanvas; function getTextWidth(text, font) { // re-use canvas object for better performance var canvas = cachedCanvas || (cachedCanvas = document.createElement("canvas")); var context = canvas.getContext("2d"); context.font = font; var metrics = context.measureText(text); return metrics.width; } var TitleInplaceEditor = /** @class */ (function () { function TitleInplaceEditor(name, rootElement) { var _this = this; this.rootElement = rootElement; this.editingName = __WEBPACK_IMPORTED_MODULE_0_knockout__["observable"](); this.prevName = __WEBPACK_IMPORTED_MODULE_0_knockout__["observable"](); this.isEditing = __WEBPACK_IMPORTED_MODULE_0_knockout__["observable"](false); this.hideEditor = function () { _this.isEditing(false); _this.forNeibours(function (element) { element.style.display = element.dataset["sjsOldDisplay"]; }); }; this.startEdit = function (model, event) { _this.editingName(_this.prevName()); _this.isEditing(true); _this.forNeibours(function (element) { element.dataset["sjsOldDisplay"] = element.style.display; element.style.display = "none"; }); var inputElem = _this.rootElement.getElementsByTagName("input")[0]; inputElem.focus(); resizeInput(inputElem); }; this.postEdit = function () { if (_this.prevName() !== _this.editingName()) { _this.prevName(_this.editingName()); !!_this.valueChanged && _this.valueChanged(_this.editingName()); } _this.hideEditor(); }; this.cancelEdit = function () { _this.editingName(_this.prevName()); _this.hideEditor(); }; this.nameEditorKeypress = function (model, event) { resizeInput(event.target); if (event.keyCode === 13) { _this.postEdit(); } else if (event.keyCode === 27) { _this.cancelEdit(); } }; this.editingName(name); this.prevName(name); this.forNeibours(function (element) { return (element.onclick = function (e) { _this.startEdit(_this, e); e.preventDefault(); }); }); } TitleInplaceEditor.prototype.forNeibours = function (func) { if (!this.rootElement.parentElement || !this.rootElement.parentElement.parentElement) return; var holder = this.rootElement.parentElement.parentElement; for (var i = 0; i < holder.children.length - 1; i++) { var element = holder.children[i]; if (element.className.indexOf("svda-custom-content") === -1) { func(element); } } }; TitleInplaceEditor.prototype.getLocString = function (str) { return __WEBPACK_IMPORTED_MODULE_2__editorLocalization__["a" /* editorLocalization */].getString(str); }; return TitleInplaceEditor; }()); __WEBPACK_IMPORTED_MODULE_0_knockout__["components"].register("title-editor", { viewModel: { createViewModel: function (params, componentInfo) { var model = new TitleInplaceEditor(params.model[params.name], componentInfo.element); __WEBPACK_IMPORTED_MODULE_0_knockout__["computed"](function () { model.prevName(__WEBPACK_IMPORTED_MODULE_0_knockout__["unwrap"](params.model[params.name])); }); var property = __WEBPACK_IMPORTED_MODULE_4_survey_knockout__["Serializer"].findProperty(params.model.getType(), params.name); model.valueChanged = function (newValue) { var options = { propertyName: property.name, obj: params.model, value: newValue, newValue: null, doValidation: false }; params.editor.onValueChangingCallback(options); newValue = options.newValue === null ? options.value : options.newValue; params.model[params.name] = newValue; params.editor.onPropertyValueChanged(property, params.model, newValue); }; return model; } }, template: templateHtml }); var titleAdorner = { getMarkerClass: function (model) { return "title_editable"; }, getElementName: function (model) { return "title"; }, afterRender: function (elements, model, editor) { var decoration = document.createElement("span"); decoration.innerHTML = "<title-editor params='name: \"title\", model: model, editor: editor'></title-editor>"; elements[0].appendChild(decoration); __WEBPACK_IMPORTED_MODULE_0_knockout__["applyBindings"]({ model: model, editor: editor }, decoration); __WEBPACK_IMPORTED_MODULE_0_knockout__["tasks"].runEarly(); editor.onAdornerRenderedCallback(model, "title", decoration); } }; __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__surveyjsObjects__["b" /* registerAdorner */])("title", titleAdorner); var itemTitleAdorner = { getMarkerClass: function (model) { return !!model.items ? "item_title_editable title_editable" : ""; }, getElementName: function (model) { return "itemTitle"; }, afterRender: function (elements, model, editor) { for (var i = 0; i < elements.length; i++) { var decoration = document.createElement("span"); decoration.innerHTML = "<title-editor params='name: \"title\", model: model, editor: editor'></title-editor>"; elements[i].appendChild(decoration); __WEBPACK_IMPORTED_MODULE_0_knockout__["applyBindings"]({ model: model.items[i], editor: editor }, decoration); __WEBPACK_IMPORTED_MODULE_0_knockout__["tasks"].runEarly(); editor.onAdornerRenderedCallback(model, "item-title", decoration, model.items[i]); } } }; __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__surveyjsObjects__["b" /* registerAdorner */])("item-title", itemTitleAdorner); /***/ }), /* 20 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__utils_custom_checkbox_scss__ = __webpack_require__(46); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__utils_custom_checkbox_scss___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0__utils_custom_checkbox_scss__); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__utils_custom_select_scss__ = __webpack_require__(47); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__utils_custom_select_scss___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1__utils_custom_select_scss__); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__utils_ddmenu_scss__ = __webpack_require__(48); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__utils_ddmenu_scss___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2__utils_ddmenu_scss__); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__main_scss__ = __webpack_require__(45); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__main_scss___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_3__main_scss__); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__localization_english__ = __webpack_require__(28); /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "enStrings", function() { return __WEBPACK_IMPORTED_MODULE_4__localization_english__["a"]; }); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__editorLocalization__ = __webpack_require__(0); /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "editorLocalization", function() { return __WEBPACK_IMPORTED_MODULE_5__editorLocalization__["a"]; }); /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "defaultStrings", function() { return __WEBPACK_IMPORTED_MODULE_5__editorLocalization__["b"]; }); /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "localization", function() { return __WEBPACK_IMPORTED_MODULE_5__editorLocalization__["a"]; }); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__dragdrophelper__ = __webpack_require__(27); /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "DragDropHelper", function() { return __WEBPACK_IMPORTED_MODULE_6__dragdrophelper__["a"]; }); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__propertyEditors_editableObject__ = __webpack_require__(10); /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "EditableObject", function() { return __WEBPACK_IMPORTED_MODULE_7__propertyEditors_editableObject__["a"]; }); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_8__propertyEditors_surveyElementSelector__ = __webpack_require__(34); /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "SurveyElementSelector", function() { return __WEBPACK_IMPORTED_MODULE_8__propertyEditors_surveyElementSelector__["a"]; }); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_9__propertyEditors_propertyEditorBase__ = __webpack_require__(13); /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "SurveyPropertyEditorBase", function() { return __WEBPACK_IMPORTED_MODULE_9__propertyEditors_propertyEditorBase__["a"]; }); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_10__propertyEditors_propertyCustomEditor__ = __webpack_require__(31); /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "SurveyPropertyCustomEditor", function() { return __WEBPACK_IMPORTED_MODULE_10__propertyEditors_propertyCustomEditor__["a"]; }); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_11__propertyEditors_propertyEditorFactory__ = __webpack_require__(4); /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "SurveyPropertyEditorFactory", function() { return __WEBPACK_IMPORTED_MODULE_11__propertyEditors_propertyEditorFactory__["a"]; }); /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "SurveyStringPropertyEditor", function() { return __WEBPACK_IMPORTED_MODULE_11__propertyEditors_propertyEditorFactory__["b"]; }); /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "SurveyDropdownPropertyEditor", function() { return __WEBPACK_IMPORTED_MODULE_11__propertyEditors_propertyEditorFactory__["c"]; }); /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "SurveyBooleanPropertyEditor", function() { return __WEBPACK_IMPORTED_MODULE_11__propertyEditors_propertyEditorFactory__["d"]; }); /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "SurveyNumberPropertyEditor", function() { return __WEBPACK_IMPORTED_MODULE_11__propertyEditors_propertyEditorFactory__["e"]; }); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_12__propertyEditors_propertyTextItemsEditor__ = __webpack_require__(78); /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "SurveyPropertyTextItemsEditor", function() { return __WEBPACK_IMPORTED_MODULE_12__propertyEditors_propertyTextItemsEditor__["a"]; }); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_13__propertyEditors_propertyItemsEditor__ = __webpack_require__(14); /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "SurveyPropertyItemsEditor", function() { return __WEBPACK_IMPORTED_MODULE_13__propertyEditors_propertyItemsEditor__["a"]; }); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_14__propertyEditors_propertyItemValuesEditor__ = __webpack_require__(74); /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "SurveyPropertyItemValuesEditor", function() { return __WEBPACK_IMPORTED_MODULE_14__propertyEditors_propertyItemValuesEditor__["a"]; }); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_15__propertyEditors_propertyMultipleValuesEditor__ = __webpack_require__(76); /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "SurveyPropertyMultipleValuesEditor", function() { return __WEBPACK_IMPORTED_MODULE_15__propertyEditors_propertyMultipleValuesEditor__["a"]; }); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_16__propertyEditors_propertyNestedPropertyEditor__ = __webpack_require__(15); /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "SurveyNestedPropertyEditor", function() { return __WEBPACK_IMPORTED_MODULE_16__propertyEditors_propertyNestedPropertyEditor__["a"]; }); /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "SurveyNestedPropertyEditorItem", function() { return __WEBPACK_IMPORTED_MODULE_16__propertyEditors_propertyNestedPropertyEditor__["b"]; }); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_17__propertyEditors_propertyMatrixDropdownColumnsEditor__ = __webpack_require__(75); /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "SurveyPropertyDropdownColumnsEditor", function() { return __WEBPACK_IMPORTED_MODULE_17__propertyEditors_propertyMatrixDropdownColumnsEditor__["a"]; }); /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "SurveyPropertyMatrixDropdownColumnsItem", function() { return __WEBPACK_IMPORTED_MODULE_17__propertyEditors_propertyMatrixDropdownColumnsEditor__["b"]; }); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_18__propertyEditors_propertyModalEditor__ = __webpack_require__(7); /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "SurveyPropertyModalEditor", function() { return __WEBPACK_IMPORTED_MODULE_18__propertyEditors_propertyModalEditor__["a"]; }); /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "SurveyPropertyTextEditor", function() { return __WEBPACK_IMPORTED_MODULE_18__propertyEditors_propertyModalEditor__["b"]; }); /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "SurveyPropertyHtmlEditor", function() { return __WEBPACK_IMPORTED_MODULE_18__propertyEditors_propertyModalEditor__["c"]; }); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_19__propertyEditors_propertyConditionEditor__ = __webpack_require__(21); /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "SurveyPropertyConditionEditor", function() { return __WEBPACK_IMPORTED_MODULE_19__propertyEditors_propertyConditionEditor__["a"]; }); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_20__propertyEditors_propertyRestfullEditor__ = __webpack_require__(77); /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "SurveyPropertyResultfullEditor", function() { return __WEBPACK_IMPORTED_MODULE_20__propertyEditors_propertyRestfullEditor__["a"]; }); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_21__propertyEditors_propertyDefaultValueEditor__ = __webpack_require__(32); /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "SurveyPropertyDefaultValueEditor", function() { return __WEBPACK_IMPORTED_MODULE_21__propertyEditors_propertyDefaultValueEditor__["a"]; }); /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "SurveyPropertyDefaultRowValueEditor", function() { return __WEBPACK_IMPORTED_MODULE_21__propertyEditors_propertyDefaultValueEditor__["b"]; }); /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "SurveyPropertyDefaultPanelValueEditor", function() { return __WEBPACK_IMPORTED_MODULE_21__propertyEditors_propertyDefaultValueEditor__["c"]; }); /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "SurveyPropertySetEditor", function() { return __WEBPACK_IMPORTED_MODULE_21__propertyEditors_propertyDefaultValueEditor__["d"]; }); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_22__propertyEditors_propertyTriggersEditor__ = __webpack_require__(33); /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "SurveyPropertyTriggersEditor", function() { return __WEBPACK_IMPORTED_MODULE_22__propertyEditors_propertyTriggersEditor__["a"]; }); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_23__propertyEditors_propertyHtmlConditionEditor__ = __webpack_require__(73); /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "SurveyPropertyHtmlConditionEditor", function() { return __WEBPACK_IMPORTED_MODULE_23__propertyEditors_propertyHtmlConditionEditor__["a"]; }); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_24__propertyEditors_propertyCalculatedValues__ = __webpack_require__(71); /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "SurveyPropertyCalculatedValueEditor", function() { return __WEBPACK_IMPORTED_MODULE_24__propertyEditors_propertyCalculatedValues__["a"]; }); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_25__propertyEditors_propertyValidatorsEditor__ = __webpack_require__(79); /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "SurveyPropertyValidatorsEditor", function() { return __WEBPACK_IMPORTED_MODULE_25__propertyEditors_propertyValidatorsEditor__["a"]; }); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_26__propertyEditors_propertyCellsEditor__ = __webpack_require__(72); /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "SurveyPropertyCellsEditor", function() { return __WEBPACK_IMPORTED_MODULE_26__propertyEditors_propertyCellsEditor__["a"]; }); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_27__surveyObjects__ = __webpack_require__(39); /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "SurveyObjects", function() { return __WEBPACK_IMPORTED_MODULE_27__surveyObjects__["a"]; }); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_28__questionEditors_questionEditorProperties__ = __webpack_require__(35); /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "SurveyQuestionEditorProperties", function() { return __WEBPACK_IMPORTED_MODULE_28__questionEditors_questionEditorProperties__["a"]; }); /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "SurveyQuestionEditorRow", function() { return __WEBPACK_IMPORTED_MODULE_28__questionEditors_questionEditorProperties__["b"]; }); /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "SurveyQuestionEditorProperty", function() { return __WEBPACK_IMPORTED_MODULE_28__questionEditors_questionEditorProperties__["c"]; }); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_29__questionEditors_questionEditorDefinition__ = __webpack_require__(18); /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "SurveyQuestionEditorDefinition", function() { return __WEBPACK_IMPORTED_MODULE_29__questionEditors_questionEditorDefinition__["a"]; }); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_30__questionEditors_questionEditor__ = __webpack_require__(17); /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "SurveyPropertyEditorShowWindow", function() { return __WEBPACK_IMPORTED_MODULE_30__questionEditors_questionEditor__["a"]; }); /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "SurveyQuestionEditor", function() { return __WEBPACK_IMPORTED_MODULE_30__questionEditors_questionEditor__["b"]; }); /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "SurveyQuestionEditorTab", function() { return __WEBPACK_IMPORTED_MODULE_30__questionEditors_questionEditor__["c"]; }); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_31__questionToolbox__ = __webpack_require__(36); /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "QuestionToolbox", function() { return __WEBPACK_IMPORTED_MODULE_31__questionToolbox__["a"]; }); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_32__objectProperty__ = __webpack_require__(12); /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "SurveyObjectProperty", function() { return __WEBPACK_IMPORTED_MODULE_32__objectProperty__["a"]; }); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_33__objectEditor__ = __webpack_require__(30); /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "SurveyObjectEditor", function() { return __WEBPACK_IMPORTED_MODULE_33__objectEditor__["a"]; }); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_34__pagesEditor__ = __webpack_require__(70); /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "PagesEditor", function() { return __WEBPACK_IMPORTED_MODULE_34__pagesEditor__["a"]; }); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_35__textWorker__ = __webpack_require__(23); /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "SurveyTextWorker", function() { return __WEBPACK_IMPORTED_MODULE_35__textWorker__["a"]; }); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_36__surveyHelper__ = __webpack_require__(5); /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "ObjType", function() { return __WEBPACK_IMPORTED_MODULE_36__surveyHelper__["a"]; }); /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "SurveyHelper", function() { return __WEBPACK_IMPORTED_MODULE_36__surveyHelper__["b"]; }); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_37__surveylive__ = __webpack_require__(40); /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "SurveyLiveTester", function() { return __WEBPACK_IMPORTED_MODULE_37__surveylive__["a"]; }); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_38__surveyEmbedingWindow__ = __webpack_require__(38); /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "SurveyEmbedingWindow", function() { return __WEBPACK_IMPORTED_MODULE_38__surveyEmbedingWindow__["a"]; }); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_39__questionconverter__ = __webpack_require__(37); /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "QuestionConverter", function() { return __WEBPACK_IMPORTED_MODULE_39__questionconverter__["a"]; }); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_40__undoredo__ = __webpack_require__(42); /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "SurveyUndoRedo", function() { return __WEBPACK_IMPORTED_MODULE_40__undoredo__["a"]; }); /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "UndoRedoItem", function() { return __WEBPACK_IMPORTED_MODULE_40__undoredo__["b"]; }); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_41__logic__ = __webpack_require__(29); /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "SurveyLogic", function() { return __WEBPACK_IMPORTED_MODULE_41__logic__["a"]; }); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_42__surveyjsObjects__ = __webpack_require__(6); /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "SurveyForDesigner", function() { return __WEBPACK_IMPORTED_MODULE_42__surveyjsObjects__["a"]; }); /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "registerAdorner", function() { return __WEBPACK_IMPORTED_MODULE_42__surveyjsObjects__["b"]; }); /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "removeAdorners", function() { return __WEBPACK_IMPORTED_MODULE_42__surveyjsObjects__["c"]; }); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_43__extentions__ = __webpack_require__(54); /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "Extentions", function() { return __WEBPACK_IMPORTED_MODULE_43__extentions__["a"]; }); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_44__editor__ = __webpack_require__(24); /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "SurveyEditor", function() { return __WEBPACK_IMPORTED_MODULE_44__editor__["a"]; }); /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "SurveyCreator", function() { return __WEBPACK_IMPORTED_MODULE_44__editor__["b"]; }); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_45__manage__ = __webpack_require__(69); /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "SurveysManager", function() { return __WEBPACK_IMPORTED_MODULE_45__manage__["a"]; }); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_46__stylesmanager__ = __webpack_require__(22); /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "StylesManager", function() { return __WEBPACK_IMPORTED_MODULE_46__stylesmanager__["a"]; }); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_47__localization_danish__ = __webpack_require__(55); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_48__localization_french__ = __webpack_require__(56); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_49__localization_german__ = __webpack_require__(57); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_50__localization_italian__ = __webpack_require__(60); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_51__localization_indonesian__ = __webpack_require__(59); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_52__localization_korean__ = __webpack_require__(61); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_53__localization_persian__ = __webpack_require__(63); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_54__localization_polish__ = __webpack_require__(64); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_55__localization_portuguese__ = __webpack_require__(65); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_56__localization_simplified_chinese__ = __webpack_require__(66); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_57__localization_spanish__ = __webpack_require__(67); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_58__localization_traditional_chinese__ = __webpack_require__(68); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_59__localization_norwegian__ = __webpack_require__(62); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_60__localization_hungarian__ = __webpack_require__(58); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_61__translation__ = __webpack_require__(41); /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "Translation", function() { return __WEBPACK_IMPORTED_MODULE_61__translation__["a"]; }); /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "TranslationGroup", function() { return __WEBPACK_IMPORTED_MODULE_61__translation__["b"]; }); /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "TranslationItem", function() { return __WEBPACK_IMPORTED_MODULE_61__translation__["c"]; }); /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "TranslationItemBase", function() { return __WEBPACK_IMPORTED_MODULE_61__translation__["d"]; }); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_62__adorners_title_editor__ = __webpack_require__(19); /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "titleAdorner", function() { return __WEBPACK_IMPORTED_MODULE_62__adorners_title_editor__["a"]; }); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_63__adorners_item_editor__ = __webpack_require__(11); /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "itemAdorner", function() { return __WEBPACK_IMPORTED_MODULE_63__adorners_item_editor__["a"]; }); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_64__adorners_label_editor__ = __webpack_require__(51); /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "labelAdorner", function() { return __WEBPACK_IMPORTED_MODULE_64__adorners_label_editor__["a"]; }); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_65__adorners_question_actions__ = __webpack_require__(26); /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "questionActionsAdorner", function() { return __WEBPACK_IMPORTED_MODULE_65__adorners_question_actions__["a"]; }); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_66__adorners_select_items_editor__ = __webpack_require__(53); /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "selectItemsEditorAdorner", function() { return __WEBPACK_IMPORTED_MODULE_66__adorners_select_items_editor__["a"]; }); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_67__adorners_rating_item_editor__ = __webpack_require__(52); /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "ratingItemAdorner", function() { return __WEBPACK_IMPORTED_MODULE_67__adorners_rating_item_editor__["a"]; }); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_68__adorners_image_items__ = __webpack_require__(50); /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "imageItemsAdorner", function() { return __WEBPACK_IMPORTED_MODULE_68__adorners_image_items__["a"]; }); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_69__adorners_flowpanel_actions__ = __webpack_require__(49); /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "flowpanelActionsAdorner", function() { return __WEBPACK_IMPORTED_MODULE_69__adorners_flowpanel_actions__["a"]; }); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_70__utils_accordion__ = __webpack_require__(80); /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "AccordionItemModel", function() { return __WEBPACK_IMPORTED_MODULE_70__utils_accordion__["a"]; }); /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "AccordionModel", function() { return __WEBPACK_IMPORTED_MODULE_70__utils_accordion__["b"]; }); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_71__utils_splitter__ = __webpack_require__(81); /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "SplitterComponentViewModel", function() { return __WEBPACK_IMPORTED_MODULE_71__utils_splitter__["a"]; }); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_72__propertyEditors_propertyOneSelectedEditor__ = __webpack_require__(16); /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "SurveyPropertyOneSelectedEditor", function() { return __WEBPACK_IMPORTED_MODULE_72__propertyEditors_propertyOneSelectedEditor__["a"]; }); /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "SurveyPropertyOneSelectedItem", function() { return __WEBPACK_IMPORTED_MODULE_72__propertyEditors_propertyOneSelectedEditor__["b"]; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Version", function() { return Version; }); // styles var Version; Version = "" + "1.1.22"; //localization //adorners /***/ }), /* 21 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(3); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_knockout__ = __webpack_require__(1); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_knockout___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_knockout__); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_survey_knockout__ = __webpack_require__(2); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_survey_knockout___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_survey_knockout__); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__propertyModalEditor__ = __webpack_require__(7); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__propertyEditorFactory__ = __webpack_require__(4); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__editableObject__ = __webpack_require__(10); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__editorLocalization__ = __webpack_require__(0); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return SurveyPropertyConditionEditor; }); /* unused harmony export doGetCompletions */ /* unused harmony export insertMatch */ var SurveyPropertyConditionEditor = /** @class */ (function (_super) { __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__["a" /* __extends */])(SurveyPropertyConditionEditor, _super); function SurveyPropertyConditionEditor(property, _type, syntaxCheckMethodName) { if (_type === void 0) { _type = "condition"; } if (syntaxCheckMethodName === void 0) { syntaxCheckMethodName = "createCondition"; } var _this = _super.call(this, property) || this; _this._type = _type; _this.syntaxCheckMethodName = syntaxCheckMethodName; _this.availableOperators = []; _this.showHelpText = true; _this.isValueChanging = false; _this.addConditionQuestionsHash = {}; if (!SurveyPropertyConditionEditor.emptySurvey) { SurveyPropertyConditionEditor.emptySurvey = !!_this.options && _this.options.createSurvey({}, "conditionEditor"); } _this.availableOperators = __WEBPACK_IMPORTED_MODULE_4__propertyEditorFactory__["a" /* SurveyPropertyEditorFactory */].getOperators(); _this.koIsValid = __WEBPACK_IMPORTED_MODULE_1_knockout__["observable"](true); _this.koAddConditionQuestions = __WEBPACK_IMPORTED_MODULE_1_knockout__["observableArray"](); _this.koAddConditionQuestion = __WEBPACK_IMPORTED_MODULE_1_knockout__["observable"](""); _this.koAddConditionOperator = __WEBPACK_IMPORTED_MODULE_1_knockout__["observable"](""); _this.koAddConditionValue = __WEBPACK_IMPORTED_MODULE_1_knockout__["observable"](""); _this.koAddConditionType = __WEBPACK_IMPORTED_MODULE_1_knockout__["observable"]("and"); _this.koHasValueSurvey = __WEBPACK_IMPORTED_MODULE_1_knockout__["observable"](false); _this.koValueSurvey = __WEBPACK_IMPORTED_MODULE_1_knockout__["observable"](SurveyPropertyConditionEditor.emptySurvey); var self = _this; _this.koAddConditionQuestion.subscribe(function (newValue) { self.koAddConditionValue(""); self.onValueSurveyChanged(newValue, self.koAddConditionOperator()); }); _this.koAddConditionOperator.subscribe(function (newValue) { self.onValueSurveyChanged(self.koAddConditionQuestion(), newValue); }); _this.koAddConditionValue.subscribe(function (newValue) { if (self.koHasValueSurvey()) { var newParsedValue = !newValue ? {} : JSON.parse(newValue); self.isValueChanging = true; self.koValueSurvey().setValue("question", newParsedValue); self.isValueChanging = false; } }); _this.koCanAddCondition = __WEBPACK_IMPORTED_MODULE_1_knockout__["computed"](function () { return (this.koAddConditionQuestion() != "" && this.koAddConditionQuestion() != undefined && this.koAddConditionOperator() != "" && (!this.koCanAddConditionValue() || this.koAddConditionValue() != "")); }, _this); _this.koShowAddConditionType = __WEBPACK_IMPORTED_MODULE_1_knockout__["computed"](function () { if (!this.koIsValid()) return false; var text = this.koTextValue(); if (text) text = text.trim(); return text; }, _this); _this.koAddConditionButtonText = __WEBPACK_IMPORTED_MODULE_1_knockout__["computed"](function () { var name = this.koIsValid() ? "conditionButtonAdd" : "conditionButtonReplace"; return __WEBPACK_IMPORTED_MODULE_6__editorLocalization__["a" /* editorLocalization */].getPropertyInEditor(name); }, _this); _this.koCanAddConditionValue = __WEBPACK_IMPORTED_MODULE_1_knockout__["computed"](function () { return self.canShowValueByOperator(self.koAddConditionOperator()); }, _this); _this.koAddContionValueEnabled = __WEBPACK_IMPORTED_MODULE_1_knockout__["computed"](function () { return self.koCanAddConditionValue() && !self.koHasValueSurvey(); }, _this); _this.onConditionAddClick = function () { self.addCondition(); }; _this.resetAddConditionValues(); return _this; } SurveyPropertyConditionEditor.prototype.beforeShow = function () { _super.prototype.beforeShow.call(this); this.koAddConditionQuestion(""); this.addConditionQuestionsHash = {}; this.koAddConditionQuestions(this.allConditionQuestions); }; Object.defineProperty(SurveyPropertyConditionEditor.prototype, "editorType", { get: function () { return this._type; }, enumerable: true, configurable: true }); Object.defineProperty(SurveyPropertyConditionEditor.prototype, "availableQuestions", { get: function () { var survey = this.getSurvey(); return !!survey ? survey.getAllQuestions() : []; }, enumerable: true, configurable: true }); SurveyPropertyConditionEditor.prototype.getSurvey = function () { if (this.object instanceof __WEBPACK_IMPORTED_MODULE_2_survey_knockout__["SurveyModel"]) { return this.getOrigionalSurvey(this.object); } if (this.object instanceof __WEBPACK_IMPORTED_MODULE_2_survey_knockout__["MatrixDropdownColumn"] && !!this.object.colOwner) return this.object.colOwner["survey"]; if (!!this.object && !!this.object.survey) return this.getOrigionalSurvey(this.object.survey); return null; }; SurveyPropertyConditionEditor.prototype.getOrigionalSurvey = function (survey) { return __WEBPACK_IMPORTED_MODULE_5__editableObject__["a" /* EditableObject */].getOrigionalSurvey(survey); }; Object.defineProperty(SurveyPropertyConditionEditor.prototype, "allConditionQuestions", { get: function () { var res = this.getConditionQuetions(); res.sort(function (a, b) { return a.text.localeCompare(b.text); }); return res; }, enumerable: true, configurable: true }); Object.defineProperty(SurveyPropertyConditionEditor.prototype, "isExpressionValid", { get: function () { var text = this.koTextValue(); if (!text) return false; var runner = new __WEBPACK_IMPORTED_MODULE_2_survey_knockout__["ConditionRunner"](text); return runner.canRun(); }, enumerable: true, configurable: true }); SurveyPropertyConditionEditor.prototype.getConditionQuetions = function () { if (!this.object) return []; var res = []; var questions = this.availableQuestions; if (questions.length > 0) { for (var i = 0; i < questions.length; i++) { if (this.object == questions[i]) continue; questions[i].addConditionObjectsByContext(res, this.object); } this.addConditionQuestionsHash = {}; for (var i = 0; i < res.length; i++) { if (!this.options || !this.options.showTitlesInExpressions) { res[i].text = res[i].name; } this.addConditionQuestionsHash[res[i].name] = res[i].question; } } this.addCalculatedValues(res); !!this.options && this.options.onConditionQuestionsGetListCallback(this.editablePropertyName, this.object, this, res); return res; }; SurveyPropertyConditionEditor.prototype.addCalculatedValues = function (res) { var survey = this.getSurvey(); if (!survey) return; var values = survey.calculatedValues; for (var i = 0; i < values.length; i++) { var name = values[i].name; res.push({ name: name, text: name, question: null }); } }; SurveyPropertyConditionEditor.prototype.onValueSurveyChanged = function (questionName, operator) { if (!this.canShowValueByOperator(operator) || !questionName || !this.getSurvey()) { this.koHasValueSurvey(false); return; } var json = this.getQuestionConditionJson(questionName, operator); this.koHasValueSurvey(!!json && !!json.type); if (this.koHasValueSurvey()) { this.koValueSurvey(this.createValueSurvey(json, questionName)); var question = this.koValueSurvey().getQuestionByName("question"); if (!!question && !question.isEmpty()) { this.koAddConditionValue(JSON.stringify(question.value)); } } }; SurveyPropertyConditionEditor.prototype.deleteConditionProperties = function (json) { delete json["visible"]; delete json["visibleIf"]; delete json["enable"]; delete json["enableIf"]; }; SurveyPropertyConditionEditor.prototype.createValueSurvey = function (qjson, questionName) { qjson.name = "question"; qjson.title = __WEBPACK_IMPORTED_MODULE_6__editorLocalization__["a" /* editorLocalization */].getString("pe.conditionValueQuestionTitle"); this.deleteConditionProperties(qjson); if (!!qjson.choices) { for (var i = 0; i < qjson.choices.length; i++) { this.deleteConditionProperties(qjson.choices[i]); } } var json = { questions: [], showNavigationButtons: false, showQuestionNumbers: "off" }; json.questions.push(qjson); var survey = !!this.options ? this.options.createSurvey(json, "conditionEditor") : new __WEBPACK_IMPORTED_MODULE_2_survey_knockout__["Survey"](json); var self = this; survey.onValueChanged.add(function (survey, options) { if (!self.isValueChanging) { self.koAddConditionValue(JSON.stringify(options.value)); } }); if (this.options) { var propName = !!this.property ? this.property.name : ""; this.options.onConditionValueSurveyCreatedCallBack(questionName, propName, this.object, this, survey); } return survey; }; SurveyPropertyConditionEditor.prototype.getQuestionByName = function (questionName) { if (!this.getSurvey()) return null; return this.addConditionQuestionsHash[questionName]; }; SurveyPropertyConditionEditor.prototype.getQuestionValueByName = function (questionName) { var question = this.getQuestionByName(questionName); if (question && question.name != question.getValueName()) return questionName.replace(question.name, question.getValueName()); return questionName; }; SurveyPropertyConditionEditor.prototype.getQuestionConditionJson = function (questionName, operator) { var path = ""; var question = this.getQuestionByName(questionName); if (!question) return null; var path = questionName.substr(question.name.length); if (!!path && path[0] == ".") { path = path.substr(1); } var json = question && question.getConditionJson ? question.getConditionJson(operator, path) : null; return json && (json.type !== "text" || json.inputType) ? json : null; }; SurveyPropertyConditionEditor.prototype.canShowValueByOperator = function (operator) { return operator != "empty" && operator != "notempty"; }; Object.defineProperty(SurveyPropertyConditionEditor.prototype, "hasAceEditor", { get: function () { return (typeof ace !== "undefined" && typeof ace.require("ace/ext/language_tools") !== "undefined"); }, enumerable: true, configurable: true }); Object.defineProperty(SurveyPropertyConditionEditor.prototype, "addConditionQuestionOptions", { get: function () { return __WEBPACK_IMPORTED_MODULE_6__editorLocalization__["a" /* editorLocalization */].getString("pe.conditionSelectQuestion"); }, enumerable: true, configurable: true }); SurveyPropertyConditionEditor.prototype.addCondition = function () { if (!this.koCanAddCondition()) return; var text = ""; if (this.koShowAddConditionType()) { text = this.koTextValue() + " " + this.koAddConditionType() + " "; } text += "{" + this.getQuestionValueByName(this.koAddConditionQuestion()) + "} " + this.getAddConditionOperator(); if (this.koCanAddConditionValue()) { text += " " + this.getAddConditionValue(); } this.koTextValue(text); this.resetAddConditionValues(); }; SurveyPropertyConditionEditor.prototype.onBeforeApply = function () { if (!this.koTextValue() && this.koCanAddCondition()) { this.addCondition(); } _super.prototype.onBeforeApply.call(this); }; SurveyPropertyConditionEditor.prototype.getAddConditionOperator = function () { var op = this.koAddConditionOperator(); if (op == "equal") return "="; if (op == "notequal") return "<>"; if (op == "greater") return ">"; if (op == "less") return "<"; if (op == "greaterorequal") return ">="; if (op == "lessorequal") return "<="; return op; }; SurveyPropertyConditionEditor.prototype.getAddConditionValue = function () { var val = this.koAddConditionValue(); if (!val) return val; if (val == "true" || val == "false") return val; if (!isNaN(val)) return val; if (val[0] == "[") return val.replace(/(?!^)(['])(?!$)/g, "\\$1"); if (!this.isQuote(val[0])) val = "'" + val; if (!this.isQuote(val[val.length - 1])) val = val + "'"; return val.replace(/(?!^)(['"])(?!$)/g, "\\$1"); }; SurveyPropertyConditionEditor.prototype.isQuote = function (ch) { return ch == "'" || ch == '"'; }; SurveyPropertyConditionEditor.prototype.onkoTextValueChanged = function (newValue) { if (!newValue) { this.koIsValid(true); } else { var conditionParser = new __WEBPACK_IMPORTED_MODULE_2_survey_knockout__["ConditionsParser"](); conditionParser[this.syntaxCheckMethodName](newValue); this.koIsValid(!conditionParser.error); } }; SurveyPropertyConditionEditor.prototype.resetAddConditionValues = function () { this.koAddConditionQuestion(""); this.koAddConditionOperator("equal"); this.koAddConditionValue(""); }; SurveyPropertyConditionEditor.emptySurvey = undefined; return SurveyPropertyConditionEditor; }(__WEBPACK_IMPORTED_MODULE_3__propertyModalEditor__["b" /* SurveyPropertyTextEditor */])); __WEBPACK_IMPORTED_MODULE_4__propertyEditorFactory__["a" /* SurveyPropertyEditorFactory */].registerEditor("condition", function (property) { return new SurveyPropertyConditionEditor(property, "condition", "createCondition"); }); __WEBPACK_IMPORTED_MODULE_4__propertyEditorFactory__["a" /* SurveyPropertyEditorFactory */].registerEditor("expression", function (property) { return new SurveyPropertyConditionEditor(property, "expression", "parseExpression"); }); var operations = [ { value: "and", title: "logical 'and' operator" }, { value: "&&", title: "logical 'and' operator" }, { value: "or", title: "logical 'or' operator" }, { value: "||", title: "logical 'or' operator" }, { value: "empty", title: "returns true if the left operand is empty {questionName} empty" }, { value: "notempty", title: "returns true if the left operand is not empty {questionName} notempty" }, { value: "=", title: "returns true if two values are equal {questionName} = 5, {questionName} == 'abc', {questionName} equal 124" }, { value: "==", title: "returns true if two values are equal {questionName} = 5, {questionName} == 'abc', {questionName} equal 124" }, { value: "equal", title: "returns true if two values are equal {questionName} = 5, {questionName} == 'abc', {questionName} equal 124" }, { value: "<>", title: "returns true if two values are not equal {questionName} <> 5, {questionName} != 'abc', {questionName} notequal 124" }, { value: "!=", title: "returns true if two values are not equal {questionName} <> 5, {questionName} != 'abc', {questionName} notequal 124" }, { value: "notequal", title: "returns true if two values are not equal {questionName} <> 5, {questionName} != 'abc', {questionName} notequal 124" }, { value: ">", title: "returns true if the left operand greater then the second operand {questionName} > 2, {questionName} greater 'a'" }, { value: "greater", title: "returns true if the left operand greater then the second operand {questionName} > 2, {questionName} greater 'a'" }, { value: "<", title: "returns true if the left operand less then the second operand {questionName} < 2, {questionName} less 'a'" }, { value: "less", title: "returns true if the left operand less then the second operand {questionName} < 2, {questionName} less 'a'" }, { value: ">=", title: "returns true if the left operand equal or greater then the second operand {questionName} >= 2, {questionName} greaterorequal 'a'" }, { value: "greaterorequal", title: "returns true if the left operand equal or greater then the second operand {questionName} >= 2, {questionName} greaterorequal 'a'" }, { value: "<=", title: "returns true if the left operand equal or less then the second operand {questionName} <= 2, {questionName} lessorequal 'a'" }, { value: "lessorequal", title: "returns true if the left operand equal or less then the second operand {questionName} <= 2, {questionName} lessorequal 'a'" }, { value: "contains", title: "return true if the left operand is an array and it contains a value of the second operand {questionName} contains 'a'" }, { value: "notcontains", title: "return true if the left operand is an array and it does not contain a value of the second operand" }, { value: "anyof", title: "return true if the left operand is an array and it contains any value of the second array operand" }, { value: "allof", title: "return true if the left operand is an array and it contains all values of the second array operand" } ]; var createAnnotations = function (condition, syntaxCheckMethodName) { condition = condition || ""; var annotations = new Array(); var conditionParser = new __WEBPACK_IMPORTED_MODULE_2_survey_knockout__["ConditionsParser"](); conditionParser[syntaxCheckMethodName](condition); if (!!condition && conditionParser.error) { var toErrorSubstring = condition.substring(0, conditionParser.error.at); var column = toErrorSubstring.length - toErrorSubstring.lastIndexOf("\n"); var annotation = { row: condition.match(/\n/g) ? condition.match(/\n/g).length : 0, column: column, text: conditionParser.error.code + " (" + column + ")", type: "error" }; annotations.push(annotation); } return annotations; }; var ID_REGEXP = /[a-zA-Z_0-9{\*\/\<\>\=\!\$\.\-\u00A2-\uFFFF]/; function doGetCompletions(prevIdentifier, prefix, config, completer) { if (completer === void 0) { completer = null; } var completions = []; var currentQuestion = config.question; var usableQuestions = (config.questions || []).filter(function (q) { return q !== currentQuestion; }); if (!!usableQuestions || currentQuestion instanceof __WEBPACK_IMPORTED_MODULE_2_survey_knockout__["MatrixDropdownColumn"] || currentQuestion.data instanceof __WEBPACK_IMPORTED_MODULE_2_survey_knockout__["QuestionPanelDynamicItem"]) { if (prevIdentifier === "row" && currentQuestion instanceof __WEBPACK_IMPORTED_MODULE_2_survey_knockout__["MatrixDropdownColumn"]) { completions = currentQuestion.colOwner["columns"] .filter(function (e) { return e.name !== currentQuestion.name; }) .map(function (column) { return { name: "", value: "{row." + column.name + "}", some: "", meta: column.title, identifierRegex: ID_REGEXP }; }); } else if (prevIdentifier === "panel" && currentQuestion.data instanceof __WEBPACK_IMPORTED_MODULE_2_survey_knockout__["QuestionPanelDynamicItem"]) { var panel = currentQuestion.data.panel; completions = panel.elements .filter(function (e) { return e.name !== currentQuestion.name; }) .map(function (element) { return { name: "", value: "{panel." + element.name + "}", some: "", meta: element.name, identifierRegex: ID_REGEXP }; }); } else { var operationsFiltered = operations.filter(function (op) { return !prefix || op.value.indexOf(prefix) !== -1; }); var questionsFiltered = usableQuestions.filter(function (op) { return !prefix || op.name.indexOf(prefix) !== -1; }); if (currentQuestion instanceof __WEBPACK_IMPORTED_MODULE_2_survey_knockout__["MatrixDropdownColumn"]) { completions.push({ name: "", value: "{row.", some: "", meta: __WEBPACK_IMPORTED_MODULE_6__editorLocalization__["a" /* editorLocalization */].getString(__WEBPACK_IMPORTED_MODULE_6__editorLocalization__["b" /* defaultStrings */].pe.aceEditorRowTitle), identifierRegex: ID_REGEXP }); } else if (!!currentQuestion && currentQuestion.data instanceof __WEBPACK_IMPORTED_MODULE_2_survey_knockout__["QuestionPanelDynamicItem"]) { completions.push({ name: "", value: "{panel.", some: "", meta: __WEBPACK_IMPORTED_MODULE_6__editorLocalization__["a" /* editorLocalization */].getString(__WEBPACK_IMPORTED_MODULE_6__editorLocalization__["b" /* defaultStrings */].pe.aceEditorPanelTitle), identifierRegex: ID_REGEXP }); } completions = completions .concat(questionsFiltered.map(function (q) { return { completer: completer, name: "", value: "{" + q.name + "}", some: "", meta: q.title, identifierRegex: ID_REGEXP }; })) .concat(operationsFiltered.map(function (op) { return { name: "", value: op.value, some: "", meta: op.title, identifierRegex: ID_REGEXP }; })); } } return completions; } function insertMatch(editor, data) { if (editor.completer.completions.filterText) { var allRanges = editor.selection.getAllRanges(); for (var rangeIndex = 0, range; (range = allRanges[rangeIndex]); rangeIndex++) { range.start.column -= editor.completer.completions.filterText.length; var rangeText = editor.session.getTextRange(range); if (rangeText.indexOf("{") !== 0) { var extRange = range.clone(); extRange.start.column--; if (editor.session.getTextRange(extRange).indexOf("{") === 0) { range = extRange; } } editor.session.remove(range); } } editor.execCommand("insertstring", data.value || data); } __WEBPACK_IMPORTED_MODULE_1_knockout__["bindingHandlers"].aceEditor = { init: function (element, options) { var configs = options(); var langTools = ace.require("ace/ext/language_tools"); var langUtils = ace.require("ace/autocomplete/util"); var editor = ace.edit(element); var objectEditor = configs.editor; var isUpdating = false; editor.setOption("useWorker", false); editor.getSession().on("change", function () { var errors = createAnnotations(editor.getValue(), objectEditor.syntaxCheckMethodName); isUpdating = true; objectEditor.koTextValue(editor.getValue()); isUpdating = false; // objectEditor.koHasError(errors.length > 0); // if (errors.length > 0) { // objectEditor.koErrorText(errors[0].text); // } editor.getSession().setAnnotations(errors); }); editor.on("focus", function () { editor.setReadOnly(objectEditor.readOnly()); }); var updateCallback = function () { if (!isUpdating) { editor.setValue(objectEditor.koTextValue() || ""); } }; var valueSubscription = objectEditor.koTextValue.subscribe(updateCallback); updateCallback(); var completer = { identifierRegexps: [ID_REGEXP], insertMatch: insertMatch, getCompletions: function (editor, session, pos, prefix, callback) { var prevIdentifier = langUtils.retrievePrecedingIdentifier(session.getLine(pos.row), pos.column - 1); var completions = doGetCompletions(prevIdentifier, prefix, configs, completer); callback(null, completions); }, getDocTooltip: function (item) { item.docHTML = "<div style='max-width: 300px; white-space: normal;'>" + item.meta + "</div>"; } }; langTools.setCompleters([completer]); editor.setOptions({ enableBasicAutocompletion: true, enableLiveAutocompletion: true }); __WEBPACK_IMPORTED_MODULE_1_knockout__["utils"].domNodeDisposal.addDisposeCallback(element, function () { editor.destroy(); valueSubscription.dispose(); }); editor.focus(); } }; /***/ }), /* 22 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_survey_knockout__ = __webpack_require__(2); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_survey_knockout___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_survey_knockout__); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_knockout__ = __webpack_require__(1); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_knockout___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_knockout__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return StylesManager; }); var StylesManager = /** @class */ (function () { function StylesManager() { this.sheet = null; this.sheet = StylesManager.findSheet(StylesManager.SurveyJSStylesSheetId); if (!this.sheet) { this.sheet = StylesManager.createSheet(StylesManager.SurveyJSStylesSheetId); this.initializeStyles(this.sheet); } } StylesManager.findSheet = function (styleSheetId) { for (var i = 0; i < document.styleSheets.length; i++) { if (!!document.styleSheets[i].ownerNode && document.styleSheets[i].ownerNode["id"] === styleSheetId) { return document.styleSheets[i]; } } return null; }; StylesManager.createSheet = function (styleSheetId) { var style = document.createElement("style"); style.id = styleSheetId; // Add a media (and/or media query) here if you'd like! // style.setAttribute("media", "screen") // style.setAttribute("media", "only screen and (max-width : 1024px)") style.appendChild(document.createTextNode("")); document.head.appendChild(style); return style.sheet; }; StylesManager.applyTheme = function (themeName, themeSelector) { if (themeName === void 0) { themeName = "default"; } if (themeSelector === void 0) { themeSelector = ".svd_container"; } StylesManager.currentTheme(themeName); StylesManager.applySurveyTheme(themeName); var sheet = StylesManager.findSheet(themeName + themeSelector); if (!sheet) { sheet = StylesManager.createSheet(themeName + themeSelector); var theme_1 = StylesManager.ThemeColors[themeName] || StylesManager.ThemeColors["default"]; var ThemeCss_1; if (["bootstrap", "bootstrapmaterial"].indexOf(themeName) !== -1) { ThemeCss_1 = StylesManager[themeName + "ThemeCss"]; } else { ThemeCss_1 = StylesManager.ThemeCss; } Object.keys(ThemeCss_1).forEach(function (selector) { var cssRuleText = ThemeCss_1[selector]; Object.keys(theme_1).forEach(function (colorVariableName) { return (cssRuleText = cssRuleText.replace(new RegExp("\\" + colorVariableName, "g"), theme_1[colorVariableName])); }); sheet.insertRule(themeSelector + selector + " { " + cssRuleText + " }", 0); }); } }; StylesManager.applySurveyTheme = function (themeName) { if (["bootstrap", "bootstrapmaterial", "modern"].indexOf(themeName) !== -1) { __WEBPACK_IMPORTED_MODULE_0_survey_knockout__["Survey"].cssType = themeName; } else { __WEBPACK_IMPORTED_MODULE_0_survey_knockout__["Survey"].cssType = "default"; } __WEBPACK_IMPORTED_MODULE_0_survey_knockout__["StylesManager"].applyTheme(themeName); }; StylesManager.prototype.initializeStyles = function (sheet) { Object.keys(StylesManager.Styles).forEach(function (selector) { return sheet.insertRule(selector + " { " + StylesManager.Styles[selector] + " }", 0); }); }; StylesManager.SurveyJSStylesSheetId = "surveyjs"; StylesManager.Styles = {}; StylesManager.ThemeColors = { default: { "$primary-color": "#1ab394", "$secondary-color": "#1ab394", "$primary-text-color": "#676a6c", "$secondary-text-color": "#a7a7a7", "$inverted-text-color": "#ffffff", "$primary-hover-color": "#18a689", "$selection-border-color": "#1ab394", "$primary-icon-color": "#3d4d5d", "$primary-bg-color": "#fff", "$secondary-bg-color": "#f4f4f4", "$primary-border-color": "#e7eaec", "$secondary-border-color": "#ddd" }, orange: { "$primary-color": "#f78119", "$secondary-color": "#4a4a4a", "$primary-text-color": "#676a6c", "$secondary-text-color": "#a7a7a7", "$inverted-text-color": "#ffffff", "$primary-hover-color": "#e77109", "$selection-border-color": "#4a4a4a", "$primary-icon-color": "#3d4d5d", "$primary-bg-color": "#fff", "$secondary-bg-color": "#f4f4f4", "$primary-border-color": "#e7eaec", "$secondary-border-color": "#ddd" }, darkblue: { "$primary-color": "#3c4f6d", "$secondary-color": "#3c4f6d", "$primary-text-color": "#676a6c", "$secondary-text-color": "#a7a7a7", "$inverted-text-color": "#ffffff", "$primary-hover-color": "#2c3f5d", "$selection-border-color": "#4a4a4a", "$primary-icon-color": "#3d4d5d", "$primary-bg-color": "#fff", "$secondary-bg-color": "#f4f4f4", "$primary-border-color": "#e7eaec", "$secondary-border-color": "#ddd" }, darkrose: { "$primary-color": "#68656e", "$secondary-color": "#68656e", "$primary-text-color": "#676a6c", "$secondary-text-color": "#a7a7a7", "$inverted-text-color": "#ffffff", "$primary-hover-color": "#57545e", "$selection-border-color": "#4a4a4a", "$primary-icon-color": "#3d4d5d", "$primary-bg-color": "#fff", "$secondary-bg-color": "#f4f4f4", "$primary-border-color": "#e7eaec", "$secondary-border-color": "#ddd" }, stone: { "$primary-color": "#0f0f33", "$secondary-color": "#0f0f33", "$primary-text-color": "#676a6c", "$secondary-text-color": "#a7a7a7", "$inverted-text-color": "#ffffff", "$primary-hover-color": "#000023", "$selection-border-color": "#cdccd2", "$primary-icon-color": "#3d4d5d", "$primary-bg-color": "#fff", "$secondary-bg-color": "#f4f4f4", "$primary-border-color": "#e7eaec", "$secondary-border-color": "#ddd" }, winter: { "$primary-color": "#5ac8fa", "$secondary-color": "#5ac8fa", "$primary-text-color": "#676a6c", "$secondary-text-color": "#a7a7a7", "$inverted-text-color": "#ffffff", "$primary-hover-color": "#4ad8ea", "$selection-border-color": "#82b8da", "$primary-icon-color": "#3d4d5d", "$primary-bg-color": "#fff", "$secondary-bg-color": "#f4f4f4", "$primary-border-color": "#e7eaec", "$secondary-border-color": "#ddd" }, winterstone: { "$primary-color": "#3c3b40", "$secondary-color": "#3c3b40", "$primary-text-color": "#676a6c", "$secondary-text-color": "#a7a7a7", "$inverted-text-color": "#ffffff", "$primary-hover-color": "#1c1b20", "$selection-border-color": "#b8b8b8", "$primary-icon-color": "#3d4d5d", "$primary-bg-color": "#fff", "$secondary-bg-color": "#f4f4f4", "$primary-border-color": "#e7eaec", "$secondary-border-color": "#ddd" } }; StylesManager.ThemeCss = { ".svd_container": "color: $primary-text-color;", ".svd_container a:focus, .svd_container select:focus, .svd_container span:focus, .svd_container div:focus, .svd_container tr:focus, .svd_container input[type='checkbox']:focus + span.checkmark": "outline-color: $primary-color;", ".svd_container .svd_toolbar button:focus": "outline-color: $primary-text-color;", ".svd_container a": "color: $primary-color;", ".svd_container a:hover": "color: $primary-hover-color;", ".svd_container .svd-main-color": "color: $primary-color;", ".svd_container .svd-main-border-color": "border-color: $selection-border-color;", ".svd_container .svd-main-background-color": "background-color: $primary-color;", ".svd_container .svd-light-background-color": "background-color: $primary-border-color;", ".svd_container .btn-primary": "color: $inverted-text-color; background-color: $secondary-color; border-color: $secondary-color;", ".svd_container .btn-link": "color: $primary-text-color; background-color: $secondary-bg-color; border-color: $secondary-bg-color;", ".svd_container .svd-svg-icon": "fill: $primary-icon-color;", ".svd_container .icon-white .svd-svg-icon": "fill: $primary-bg-color;", ".svd_container .svd-primary-icon .svd-svg-icon": "fill: $primary-color;", ".svd_container .svd-secondary-icon .svd-svg-icon": "fill: $secondary-color;", ".svd_container .icon-gearactive .svd-svg-icon": "fill: $primary-color;", ".svd_container .nav-tabs a": "color: $primary-text-color", ".svd_container .nav-tabs > li.active > a": "color: $primary-color", ".svd_container .nav-item.active .nav-link": "background-color: $primary-bg-color;", ".svd_container .sjs-cb-container:hover input ~ .checkmark": "background-color: $dd-menu-border", ".svd_container .sjs-cb-container:hover input:checked ~ .checkmark": "background-color: $primary-hover-color", ".svd_container .svd_custom_select:before": "background-color: $primary-color;", ".svd_container .form-control:focus": "border-color: $primary-color;", ".svd_container .svd-light-text-color": "color: $secondary-text-color;", ".svd-light-bg-color": "background-color: $primary-bg-color;", ".svd_container .svd-light-bg-color": "background-color: $primary-bg-color;", ".svd_container .svd_toolbar li.active a": "background-color: $primary-color; color: $primary-bg-color;", ".svd_container .svd_selected_page": "border-bottom: 1px solid $primary-bg-color;", ".svd_container .editor-tabs > li > a:hover": "background-color: $secondary-bg-color; border-bottom: 1px solid $secondary-bg-color;", ".svd_container .editor-tabs > li > a:focus": "background-color: $secondary-bg-color; border-bottom: 1px solid $secondary-bg-color;", ".svd_container .editor-tabs > li.active > a": "color: $primary-color; background-color: $secondary-bg-color; border: 1px solid $primary-border-color; border-bottom-color: $secondary-bg-color;", ".svd_container .svd-light-border-color": "border-color: $primary-border-color", ".svd_container .svd-dark-border-color": "border-color: $secondary-border-color", ".svd_container .select2-container--default.select2-container--open .select2-selection--single .select2-selection__arrow": "background: $primary-color;", ".svd_container .select2-container .select2-selection--single .select2-selection__arrow": "background: $primary-color;", ".svd_container .svd_custom_select": "background-color: $primary-bg-color;", ".svd_container .question_actions.svd_question:hover": "border-top: 1px solid $primary-color;", ".svd_container .panel_actions.svd_question:hover": "border-top: 1px solid $primary-color;" }; StylesManager.bootstrapThemeCss = { ".svd_container.sv_bootstrap_css": "color: $primary-text-color;", ".svd_container.sv_bootstrap_css a:focus, .svd_container.sv_bootstrap_css select:focus, .svd_container.sv_bootstrap_css span:focus, .svd_container.sv_bootstrap_css div:focus, .svd_container.sv_bootstrap_css tr:focus, .svd_container.sv_bootstrap_css input[type='checkbox']:focus + span.checkmark": "outline-color: $primary-color;", ".svd_container.sv_bootstrap_css .svd_toolbar button:focus": "outline-color: $primary-text-color;", ".svd_container.sv_bootstrap_css a": "color: $primary-color;", ".svd_container.sv_bootstrap_css a:hover": "color: $primary-hover-color;", ".svd_container.sv_bootstrap_css .svd-main-color": "color: $primary-color;", ".svd_container.sv_bootstrap_css .svd-main-border-color": "border-color: $selection-border-color;", ".svd_container.sv_bootstrap_css .svd-main-background-color": "background-color: $primary-color;", ".svd_container.sv_bootstrap_css .svd-light-background-color": "background-color: $primary-border-color;", ".svd_container.sv_bootstrap_css .btn-primary": "color: $inverted-text-color; background-color: $secondary-color; border-color: $secondary-color;", ".svd_container.sv_bootstrap_css .btn-link": "color: $primary-text-color; background-color: $secondary-bg-color; border-color: $secondary-bg-color;", ".svd_container.sv_bootstrap_css .svd-svg-icon": "fill: $primary-icon-color;", ".svd_container.sv_bootstrap_css .icon-white .svd-svg-icon": "fill: $primary-bg-color;", ".svd_container.sv_bootstrap_css .svd-primary-icon .svd-svg-icon": "fill: $primary-color;", ".svd_container.sv_bootstrap_css .svd-secondary-icon .svd-svg-icon": "fill: $secondary-color;", ".svd_container.sv_bootstrap_css .icon-gearactive .svd-svg-icon": "fill: $primary-color;", ".svd_container.sv_bootstrap_css .nav-tabs a": "color: $primary-text-color;", ".svd_container.sv_bootstrap_css .nav-tabs > li.active > a": "color: $primary-color;", ".svd_container.sv_bootstrap_css .nav-item.active .nav-link": "background-color: $primary-bg-color;", ".svd_container.sv_bootstrap_css .sjs-cb-container:hover input ~ .checkmark": "background-color: $dd-menu-border", ".svd_container.sv_bootstrap_css .sjs-cb-container:hover input:checked ~ .checkmark": "background-color: $primary-hover-color", ".svd_container.sv_bootstrap_css .svd_custom_select:before": "background-color: $primary-color;", ".svd_container.sv_bootstrap_css .form-control:focus": "border-color: $primary-color;", ".svd_container.sv_bootstrap_css .svd-light-text-color": "color: $secondary-text-color;", ".svd-light-bg-color": "background-color: $primary-bg-color;", ".svd_container.sv_bootstrap_css .svd-light-bg-color": "background-color: $primary-bg-color;", ".svd_container.sv_bootstrap_css .svd_toolbar li.active a": "background-color: $primary-color; color: $primary-bg-color;", ".svd_container.sv_bootstrap_css .svd_selected_page": "border-bottom: 1px solid $primary-bg-color;", ".svd_container.sv_bootstrap_css .editor-tabs > li > a:hover": "background-color: $secondary-bg-color; border-bottom: 1px solid $secondary-bg-color;", ".svd_container.sv_bootstrap_css .editor-tabs > li > a:focus": "background-color: $secondary-bg-color; border-bottom: 1px solid $secondary-bg-color", ".svd_container.sv_bootstrap_css .editor-tabs > li.active > a": "color: $primary-color; background-color: $secondary-bg-color; border: 1px solid $primary-border-color; border-bottom-color: $secondary-bg-color;", ".svd_container.sv_bootstrap_css .svd-light-border-color": "border-color: $primary-border-color", ".svd_container.sv_bootstrap_css .svd-dark-border-color": "border-color: $secondary-border-color", ".svd_container.sv_bootstrap_css .select2-container--default.select2-container--open .select2-selection--single .select2-selection__arrow": "background: $primary-color;", ".svd_container.sv_bootstrap_css .select2-container .select2-selection--single .select2-selection__arrow": "background: $primary-color;", ".svd_container.sv_bootstrap_css .modal-tabs": "background: transparent; padding-bottom: 10px;", ".svd_container.sv_bootstrap_css .modal-tabs > li > a": "color: $primary-text-color; border: 1px solid transparent;", ".svd_container.sv_bootstrap_css .modal-tabs > li > a:hover": "color: $primary-color; border-bottom: 1px solid $inverted-text-color;", ".svd_container.sv_bootstrap_css .modal-tabs > li > a:focus": "$primary-color; border-bottom: 1px solid $inverted-text-color;", ".svd_container.sv_bootstrap_css .modal-tabs > li.active > a": "color: $primary-color; border: 1px solid $primary-border-color; border-bottom-color: $inverted-text-color;", ".svd_container.sv_bootstrap_css .form-group.is-focused .form-control": "background-image: linear-gradient($primary-color, $primary-color), linear-gradient(#D2D2D2, #D2D2D2);", ".svd_container.sv_bootstrap_css .form-group.is-focused label": "color:$primary-color;", ".svd_container.sv_bootstrap_css .question_actions.svd_question:hover": "border-top: 1px solid $primary-color;", ".svd_container.sv_bootstrap_css .panel_actions.svd_question:hover": "border-top: 1px solid $primary-color;" }; StylesManager.bootstrapmaterialThemeCss = { ".svd_container.sv_bootstrapmaterial_css": "color: $primary-text-color;", ".svd_container.sv_bootstrapmaterial_css a": "color: $primary-color;", ".svd_container.sv_bootstrapmaterial_css a:hover": "color: $primary-hover-color;", ".svd_container.sv_bootstrapmaterial_css .svd-main-color": "color: $primary-color;", ".svd_container.sv_bootstrapmaterial_css .svd-main-border-color": "border-color: $selection-border-color;", ".svd_container.sv_bootstrapmaterial_css .svd-main-background-color": "background-color: $primary-color;", ".svd_container.sv_bootstrapmaterial_css .svd-light-background-color": "background-color: $primary-border-color;", ".svd_container.sv_bootstrapmaterial_css .btn-primary": "color: $inverted-text-color; background-color: $secondary-color; border-color: $secondary-color;", ".svd_container.sv_bootstrapmaterial_css .btn-secondary": "background-color: $primary-border-color;", ".svd_container.sv_bootstrapmaterial_css .btn-secondary:hover": "opacity: 0.8;", ".svd_container.sv_bootstrapmaterial_css .btn-link": "color: $primary-text-color; background-color: $secondary-bg-color; border-color: $secondary-bg-color;", ".svd_container.sv_bootstrapmaterial_css .svd-svg-icon": "fill: $primary-icon-color;", ".svd_container.sv_bootstrapmaterial_css .icon-white .svd-svg-icon": "fill: $primary-bg-color;", ".svd_container.sv_bootstrapmaterial_css .svd-primary-icon .svd-svg-icon": "fill: $primary-color;", ".svd_container.sv_bootstrapmaterial_css .svd-secondary-icon .svd-svg-icon": "fill: $secondary-color;", ".svd_container.sv_bootstrapmaterial_css .icon-gearactive .svd-svg-icon": "fill: $primary-color;", ".svd_container.sv_bootstrapmaterial_css .nav-tabs a": "color: $primary-text-color !important;", ".svd_container.sv_bootstrapmaterial_css .nav-tabs > li.active > a": "color: $primary-color !important;", ".svd_container.sv_bootstrapmaterial_css .nav-item.active .nav-link": "background-color: $primary-bg-color !important;", ".svd_container.sv_bootstrapmaterial_css .sjs-cb-container:hover input ~ .checkmark": "background-color: $dd-menu-border", ".svd_container.sv_bootstrapmaterial_css .sjs-cb-container:hover input:checked ~ .checkmark": "background-color: $primary-hover-color", ".svd_container.sv_bootstrapmaterial_css .svd_custom_select:before": "background-color: $primary-color;", ".svd_container.sv_bootstrapmaterial_css .form-control:focus": "border-color: $primary-color;", ".svd_container.sv_bootstrapmaterial_css .svd-light-text-color": "color: $secondary-text-color;", ".svd-light-bg-color": "background-color: $primary-bg-color;", ".svd_container.sv_bootstrapmaterial_css .svd-light-bg-color": "background-color: $primary-bg-color;", ".svd_container.sv_bootstrapmaterial_css .svd_toolbar li.active a": "background-color: $primary-color; color: $primary-bg-color;", ".svd_container.sv_bootstrapmaterial_css .svd_selected_page": "border-bottom: 1px solid $primary-bg-color;", ".svd_container.sv_bootstrapmaterial_css .editor-tabs > li > a:hover": "background-color: $secondary-bg-color !important; border-bottom: 1px solid $secondary-bg-color !important;", ".svd_container.sv_bootstrapmaterial_css .editor-tabs > li > a:focus": "background-color: $secondary-bg-color !important; border-bottom: 1px solid $secondary-bg-color !important", ".svd_container.sv_bootstrapmaterial_css .editor-tabs > li.active > a": "color: $primary-color !important; background-color: $secondary-bg-color !important; border: 1px solid $primary-border-color !important; border-bottom-color: $secondary-bg-color !important;", ".svd_container.sv_bootstrapmaterial_css .svd-light-border-color": "border-color: $primary-border-color", ".svd_container.sv_bootstrapmaterial_css .svd-dark-border-color": "border-color: $secondary-border-color", ".svd_container.sv_bootstrapmaterial_css .select2-container--default.select2-container--open .select2-selection--single .select2-selection__arrow": "background: $primary-color;", ".svd_container.sv_bootstrapmaterial_css .select2-container .select2-selection--single .select2-selection__arrow": "background: $primary-color;", ".svd_container.sv_bootstrapmaterial_css .svd_properties_grid .glyphicon-edit": "background-color: $primary-color;", ".svd_container.sv_bootstrapmaterial_css .svd_properties_grid .glyphicon-edit:hover": "background-color: $primary-hover-color;", ".svd_container.sv_bootstrapmaterial_css .modal-tabs": "background: transparent; padding-bottom: 10px;", ".svd_container.sv_bootstrapmaterial_css .modal-tabs > li > a": "color: $primary-text-color !important; border: 1px solid transparent !important;", ".svd_container.sv_bootstrapmaterial_css .modal-tabs > li > a:hover": "color: $primary-color !important; border-bottom: 1px solid $inverted-text-color !important;", ".svd_container.sv_bootstrapmaterial_css .modal-tabs > li > a:focus": "$primary-color !important; border-bottom: 1px solid $inverted-text-color !important;", ".svd_container.sv_bootstrapmaterial_css .modal-tabs > li.active > a": "color: $primary-color !important; border: 1px solid $primary-border-color !important; border-bottom-color: $inverted-text-color !important;", ".svd_container.sv_bootstrapmaterial_css .form-group.is-focused .form-control": "background-image: linear-gradient($primary-color, $primary-color), linear-gradient(#D2D2D2, #D2D2D2);", ".svd_container.sv_bootstrapmaterial_css .form-group.is-focused label": "color:$primary-color;", ".svd_container.sv_bootstrapmaterial_css .question_actions.svd_question:hover": "border-top: 1px solid $primary-color;", ".svd_container.sv_bootstrapmaterial_css .panel_actions.svd_question:hover": "border-top: 1px solid $primary-color;" }; StylesManager.currentTheme = __WEBPACK_IMPORTED_MODULE_1_knockout__["observable"]("bootstrap"); return StylesManager; }()); /***/ }), /* 23 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(3); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__json5__ = __webpack_require__(25); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_survey_knockout__ = __webpack_require__(2); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_survey_knockout___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_survey_knockout__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return SurveyTextWorker; }); var TextParserPropery = /** @class */ (function () { function TextParserPropery() { } return TextParserPropery; }()); var SurveyForTextWorker = /** @class */ (function (_super) { __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__["a" /* __extends */])(SurveyForTextWorker, _super); function SurveyForTextWorker(jsonObj) { return _super.call(this, jsonObj) || this; } Object.defineProperty(SurveyForTextWorker.prototype, "isDesignMode", { get: function () { return true; }, enumerable: true, configurable: true }); return SurveyForTextWorker; }(__WEBPACK_IMPORTED_MODULE_2_survey_knockout__["Survey"])); var SurveyTextWorker = /** @class */ (function () { function SurveyTextWorker(text) { this.text = text; if (!this.text || this.text.trim() == "") { this.text = "{}"; } this.errors = []; this.process(); } Object.defineProperty(SurveyTextWorker.prototype, "survey", { get: function () { return this.surveyValue; }, enumerable: true, configurable: true }); Object.defineProperty(SurveyTextWorker.prototype, "isJsonCorrect", { get: function () { return this.surveyValue != null; }, enumerable: true, configurable: true }); SurveyTextWorker.prototype.process = function () { try { this.jsonValue = new __WEBPACK_IMPORTED_MODULE_1__json5__["a" /* SurveyJSON5 */](1).parse(this.text); } catch (error) { this.errors.push({ pos: { start: error.at, end: -1 }, text: error.message }); } if (this.jsonValue != null) { this.updateJsonPositions(this.jsonValue); var pureJsonValue = new __WEBPACK_IMPORTED_MODULE_1__json5__["a" /* SurveyJSON5 */]().parse(this.text); this.surveyValue = new SurveyForTextWorker(pureJsonValue); if (this.surveyValue.jsonErrors != null) { for (var i = 0; i < this.surveyValue.jsonErrors.length; i++) { var error = this.surveyValue.jsonErrors[i]; this.errors.push({ pos: { start: error.at, end: -1 }, text: error.getFullDescription() }); } } } this.surveyObjects = this.createSurveyObjects(); this.setEditorPositionByChartAt(this.surveyObjects); this.setEditorPositionByChartAt(this.errors); }; SurveyTextWorker.prototype.updateJsonPositions = function (jsonObj) { jsonObj["pos"]["self"] = jsonObj; for (var key in jsonObj) { var obj = jsonObj[key]; if (obj && obj["pos"]) { jsonObj["pos"][key] = obj["pos"]; this.updateJsonPositions(obj); } } }; SurveyTextWorker.prototype.createSurveyObjects = function () { var result = []; if (this.surveyValue == null) return result; this.isSurveyAsPage = false; for (var i = 0; i < this.surveyValue.pages.length; i++) { var page = this.surveyValue.pages[i]; if (i == 0 && !page["pos"]) { page["pos"] = this.surveyValue["pos"]; this.isSurveyAsPage = true; } result.push(page); for (var j = 0; j < page.questions.length; j++) { result.push(page.questions[j]); } } return result; }; SurveyTextWorker.prototype.setEditorPositionByChartAt = function (objects) { if (objects == null || objects.length == 0) return; var position = { row: 0, column: 0 }; var atObjectsArray = this.getAtArray(objects); var startAt = 0; for (var i = 0; i < atObjectsArray.length; i++) { var at = atObjectsArray[i].at; position = this.getPostionByChartAt(position, startAt, at); var obj = atObjectsArray[i].obj; if (!obj.position) obj.position = {}; if (at == obj.pos.start) { obj.position.start = position; } else { if (at == obj.pos.end) { obj.position.end = position; } } startAt = at; } }; SurveyTextWorker.prototype.getPostionByChartAt = function (startPosition, startAt, at) { var result = { row: startPosition.row, column: startPosition.column }; var curChar = startAt; while (curChar < at) { if (this.text.charAt(curChar) == SurveyTextWorker.newLineChar) { result.row++; result.column = 0; } else { result.column++; } curChar++; } return result; }; SurveyTextWorker.prototype.getAtArray = function (objects) { var result = []; for (var i = 0; i < objects.length; i++) { var obj = objects[i]; var pos = obj.pos; if (!pos) continue; result.push({ at: pos.start, obj: obj }); if (pos.end > 0) { result.push({ at: pos.end, obj: obj }); } } return result.sort(function (el1, el2) { if (el1.at > el2.at) return 1; if (el1.at < el2.at) return -1; return 0; }); }; return SurveyTextWorker; }()); /***/ }), /* 24 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(3); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_knockout__ = __webpack_require__(1); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_knockout___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_knockout__); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__editorLocalization__ = __webpack_require__(0); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__objectEditor__ = __webpack_require__(30); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__surveylive__ = __webpack_require__(40); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__surveyEmbedingWindow__ = __webpack_require__(38); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__surveyObjects__ = __webpack_require__(39); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__questionconverter__ = __webpack_require__(37); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_8__questionEditors_questionEditor__ = __webpack_require__(17); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_9__surveyJSONEditor__ = __webpack_require__(144); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_10__textWorker__ = __webpack_require__(23); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_11__undoredo__ = __webpack_require__(42); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_12__surveyHelper__ = __webpack_require__(5); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_13__dragdrophelper__ = __webpack_require__(27); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_14__questionToolbox__ = __webpack_require__(36); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_15__json5__ = __webpack_require__(25); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_16_survey_knockout__ = __webpack_require__(2); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_16_survey_knockout___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_16_survey_knockout__); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_17__surveyjsObjects__ = __webpack_require__(6); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_18__stylesmanager__ = __webpack_require__(22); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_19__adorners_item_editor__ = __webpack_require__(11); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_20__translation__ = __webpack_require__(41); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_21__logic__ = __webpack_require__(29); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return SurveyCreator; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return SurveyEditor; }); var templateEditorHtml = __webpack_require__(142); /** * Survey Creator is WYSIWYG editor. */ var SurveyCreator = /** @class */ (function () { /** * The Survey Creator constructor. * @param renderedElement HtmlElement or html element id where survey creator will be rendered * @param options survey creator options. The following options are available: showJSONEditorTab, * showTestSurveyTab, showEmbededSurveyTab, showTranslationTab, inplaceEditForValues, useTabsInElementEditor, * showPropertyGrid, showToolbox, allowModifyPages * questionTypes, showOptions, generateValidJSON, isAutoSave, designerHeight, showErrorOnFailedSave, showObjectTitles, showTitlesInExpressions, * showPagesInTestSurveyTab, showDefaultLanguageInTestSurveyTab, showInvisibleElementsInTestSurveyTab */ function SurveyCreator(renderedElement, options) { var _this = this; if (renderedElement === void 0) { renderedElement = null; } if (options === void 0) { options = null; } this._haveCommercialLicense = __WEBPACK_IMPORTED_MODULE_1_knockout__["observable"](false); this.surveyValue = __WEBPACK_IMPORTED_MODULE_1_knockout__["observable"](); this.stateValue = ""; this.dragDropHelper = null; this.showJSONEditorTabValue = __WEBPACK_IMPORTED_MODULE_1_knockout__["observable"](false); this.showTestSurveyTabValue = __WEBPACK_IMPORTED_MODULE_1_knockout__["observable"](false); this.showEmbededSurveyTabValue = __WEBPACK_IMPORTED_MODULE_1_knockout__["observable"](false); this.showTranslationTabValue = __WEBPACK_IMPORTED_MODULE_1_knockout__["observable"](false); this.showLogicTabValue = __WEBPACK_IMPORTED_MODULE_1_knockout__["observable"](false); this.select2 = null; this.alwaySaveTextInPropertyEditorsValue = false; this.showApplyButtonValue = true; this.isRTLValue = false; /** * If set to true (default value) the creator scrolls to a new element. A new element can be added from Toolbox or by copying. */ this.scrollToNewElement = true; /** * You need to set this property to true if you want to use tabs instead of accordion in the popup element's editor. * @see useTabsInElementEditor */ this.useTabsInElementEditor = false; /** * You need to set this property to true if you want to show titles instead of names in pages editor and object selector. * @see onShowObjectDisplayName */ this.showObjectTitles = false; /** * You need to set this property to true if you want to show titles instead of names in expression editor. */ this.showTitlesInExpressions = false; /** * Set this property to false to hide the pages selector in the Test Survey Tab */ this.showPagesInTestSurveyTab = true; /** * Set this property to false to disable pages adding, editing and deleting */ this.allowModifyPages = true; /** * The default value is _"auto"_. It shows the language selector if there are more than two languages are using in the survey. * It shows only used languages in the survey. * Set this property to _false_ to hide the default language selector in the Test Survey Tab. * Set it to _true_ to show this selector even if there is only one language in the survey * Set it to _all_ to show the selector with all available languages (30+) */ this.showDefaultLanguageInTestSurveyTab = "auto"; /** * Set this property to false to hide the show invisible element checkbox in the Test Survey Tab */ this.showInvisibleElementsInTestSurveyTab = true; /** * This property is assign to the survey.surveyId property on showing in the "Embed Survey" tab. * @see showEmbededSurveyTab */ this.surveyId = null; /** * This property is assign to the survey.surveyPostId property on showing in the "Embed Survey" tab. * @see showEmbededSurveyTab */ this.surveyPostId = null; /** * The event is called before undo happens. * <br/> options.canUndo a boolean value. It is true by default. Set it false to hide prevent undo operation. */ this.onBeforeUndo = new __WEBPACK_IMPORTED_MODULE_16_survey_knockout__["Event"](); /** * The event is called before redo happens. * <br/> options.canRedo a boolean value. It is true by default. Set it false to hide prevent redo operation. */ this.onBeforeRedo = new __WEBPACK_IMPORTED_MODULE_16_survey_knockout__["Event"](); /** * The event is called after undo happens. * <br/> options.state is an undo/redo item. */ this.onAfterUndo = new __WEBPACK_IMPORTED_MODULE_16_survey_knockout__["Event"](); /** * The event is called after redo happens. * <br/> options.state is an undo/redo item. */ this.onAfterRedo = new __WEBPACK_IMPORTED_MODULE_16_survey_knockout__["Event"](); /** * The event is called on changing the selected element. You may change the new selected element by changing the property options.newSelectedElement to your own * <br/> options.newSelectedElement the element that is going to be selected in the survey desiger: question, panel, page or survey. */ this.onSelectedElementChanging = new __WEBPACK_IMPORTED_MODULE_16_survey_knockout__["Event"](); /** * The event is called after the selected element is changed. * <br/> options.newSelectedElement the new selected element in the survey desiger: question, panel, page or survey. */ this.onSelectedElementChanged = new __WEBPACK_IMPORTED_MODULE_16_survey_knockout__["Event"](); /** * The event is called before showing a property in the Property Grid or in Question Editor. * <br/> sender the survey creator object that fires the event * <br/> options.obj the survey object, Survey, Page, Panel or Question * <br/> options.property the object property (Survey.JsonObjectProperty object). It has name, className, type, visible, readOnly and other properties. * <br/> options.canShow a boolean value. It is true by default. Set it false to hide the property from the Property Grid and in Question Editor. */ this.onShowingProperty = new __WEBPACK_IMPORTED_MODULE_16_survey_knockout__["Event"](); /** * Obsolete, please use onShowingProperty event. * The event is called before showing a property in the Property Grid or in Question Editor. * <br/> sender the survey creator object that fires the event * <br/> options.obj the survey object, Survey, Page, Panel or Question * <br/> options.property the object property (Survey.JsonObjectProperty object). It has name, className, type, visible, readOnly and other properties. * <br/> options.canShow a boolean value. It is true by default. Set it false to hide the property from the Property Grid or in Question Editor * @see onShowingProperty */ this.onCanShowProperty = this.onShowingProperty; /** * The event is called when creator tab has been rendered. * <br/> sender the survey creator object that fires the event * <br/> options.tabName the name of the rendered tab * <br/> options.elements the rendered elements * <br/> options.model current context model * <br/> options.tabData the data of the rendered tab */ this.onEditorTabRendered = new __WEBPACK_IMPORTED_MODULE_16_survey_knockout__["Event"](); /** * The event is called when creator active tab is changed. * <br/> sender the survey creator object that fires the event * <br/> options.tabName the name of new active tab */ this.onActiveTabChanged = new __WEBPACK_IMPORTED_MODULE_16_survey_knockout__["Event"](); /** * The event is called on setting a readOnly property of the property editor. By default the property.readOnly property is used. * You may changed it and make the property editor read only or enabled for a particular object. * <br/> sender the survey creator object that fires the event * <br/> options.obj the survey object, Survey, Page, Panel or Question * <br/> options.property the object property (Survey.JsonObjectProperty object). It has name, className, type, visible, readOnly and other properties. * <br/> options.readOnly a boolean value. It has value equals to options.readOnly property by default. You may change it. */ this.onGetPropertyReadOnly = new __WEBPACK_IMPORTED_MODULE_16_survey_knockout__["Event"](); /** * The event allows you to custom sort properties in the Property Grid. It is a compare function. You should set options.result to -1 or 1 by comparing options.property1 and options.property2. * <br/> sender the survey creator object that fires the event * <br/> options.obj the survey object, Survey, Page, Panel or Question * <br/> options.property1 the left object property (Survey.JsonObjectProperty object). * <br/> options.property2 the right object property (Survey.JsonObjectProperty object). * <br/> options.result the result of comparing. It can be 0 (use default behavior), -1 options.property1 is less than options.property2 or 1 options.property1 is more than options.property2 */ this.onCustomSortProperty = new __WEBPACK_IMPORTED_MODULE_16_survey_knockout__["Event"](); /** * The event allows to display the custom name for objects: questions, pages and panels. By default the object name is using. You may show object title by setting showObjectTitles property to true. * Use this event, if you want custom display name for objects. * <br/> sender the survey creator object that fires the event * <br/> options.obj the survey object, Survey, Page, Panel or Question * <br/> options.displayName change this property to show your custom display name for the object * @see showObjectTitles */ this.onGetObjectDisplayName = new __WEBPACK_IMPORTED_MODULE_16_survey_knockout__["Event"](); /** * The event allows you modify DOM element for a property in the Property Grid. For example, you may change it's styles. * <br/> sender the survey creator object that fires the event * <br/> options.obj the survey object, Survey, Page, Panel or Question * <br/> options.htmlElement the html element (html table row in our case) that renders the property display name and it's editor. * <br/> options.property object property (Survey.JsonObjectProperty object). * <br/> options.propertyEditor the property Editor. */ this.onPropertyAfterRender = new __WEBPACK_IMPORTED_MODULE_16_survey_knockout__["Event"](); /** * The event is called on deleting an element (question/panel/page) from the survey. Typically, when a user click the delete from the element menu. * <br/> sender the survey creator object that fires the event * <br/> options.element an instance of the deleting element * <br/> options.elementType the type of the element: 'question', 'panel' or 'page'. * <br/> options.allowing set it to false to cancel the element deleting */ this.onElementDeleting = new __WEBPACK_IMPORTED_MODULE_16_survey_knockout__["Event"](); /** * The event is called on adding a new question into the survey. Typically, when a user dropped a Question from the Question Toolbox into designer Survey area. * <br/> sender the survey creator object that fires the event * <br/> options.question a new added survey question. Survey.Question object * <br/> options.page the survey Page object where question has been added. */ this.onQuestionAdded = new __WEBPACK_IMPORTED_MODULE_16_survey_knockout__["Event"](); /** * The event is called when an end-user double click on an element (question/panel). * <br/> sender the survey creator object that fires the event * <br/> options.element an instance of the element */ this.onElementDoubleClick = new __WEBPACK_IMPORTED_MODULE_16_survey_knockout__["Event"](); /** * The event is called on adding a new Survey.ItemValue object. It uses as an element in choices array in Radiogroup, checkbox and dropdown questions or Matrix columns and rows properties. * Use this event, to set ItemValue.value and ItemValue.text properties by default or set a value to the custom property. * <br/> sender the survey creator object that fires the event * <br /> options.obj the object that contains the itemsValues array, for example selector, rating and single choice matrix questions. * <br/> options.propertyName the object property Name. It can be "choices" for selector questions or rateValues for rating question or columns/rows for single choice matrix. * <br/> options.newItem a new created Survey.ItemValue object. * <br/> options.itemValues an editing Survey.ItemValue array. newItem object is not added yet into this array. */ this.onItemValueAdded = new __WEBPACK_IMPORTED_MODULE_16_survey_knockout__["Event"](); /** * The event is called when a user adds a new column into MatrixDropdown or MatrixDynamic questions. Use it to set some properties of Survey.MatrixDropdownColumn by default, for example name or a custom property. * <br/> sender the survey creator object that fires the event * <br/> options.matrix a matrix question where column is located, matrix.columns. * <br/> options.newColumn a new created Survey.MatrixDropdownColumn object. * <br/> options.columns editable columns objects. They can be different from options.matrix.columns. options.columns and options.matrix.columns are equal after user press Apply or Cancel and options.columns will be set to options.matrix.columns or reset to initial state. */ this.onMatrixColumnAdded = new __WEBPACK_IMPORTED_MODULE_16_survey_knockout__["Event"](); /** * The event is called on adding a new panel into the survey. Typically, when a user dropped a Panel from the Question Toolbox into designer Survey area. * <br/> sender the survey creator object that fires the event * <br/> options.panel a new added survey panel. Survey.Panel object * <br/> options.page the survey Page object where question has been added. */ this.onPanelAdded = new __WEBPACK_IMPORTED_MODULE_16_survey_knockout__["Event"](); /** * The event is called on adding a new page into the survey. * <br/> sender the survey creator object that fires the event * <br/> options.page the new survey Page object. */ this.onPageAdded = new __WEBPACK_IMPORTED_MODULE_16_survey_knockout__["Event"](); /** * The event is called when a survey is changed in the designer. A new page/question/page is added or existing is removed, a property is changed and so on. * <br/> sender the survey creator object that fires the event * <br/> options object contains the information about certain modifications * <br/> options.type contains string constant describing certain modification * <br/> Available values: * <br/> * <br/> options.type: "ADDED_FROM_TOOLBOX" * <br/> options.question: newly added question * <br/> * <br/> options.type: "PAGE_ADDED" * <br/> options.newValue: newly created page * <br/> * <br/> options.type: "PAGE_MOVED" * <br/> options.page: page has been moved * <br/> options.indexFrom: pevious index * <br/> options.indexTo: new index * <br/> * <br/> options.type: "QUESTION_CONVERTED" * <br/> options.className: the converted class name * <br/> options.oldValue: pevious object * <br/> options.newValue: the new object, converted from oldVale to the given class name * <br/> * <br/> options.type: "QUESTION_CHANGED_BY_EDITOR" * <br/> options.question: question has been edited in the popup question editor * <br/> * <br/> options.type: "PROPERTY_CHANGED" * <br/> options.name: the name of the property has been changed * <br/> options.target: the object containing the changed property * <br/> options.oldValue: the previous value of the changed property * <br/> options.newValue: the new value of the changed property * <br/> * <br/> options.type: "OBJECT_DELETED" * <br/> options.target: deleted object * <br/> * <br/> options.type: "VIEW_TYPE_CHANGED" * <br/> options.newType: new type of the creator view: editor or designer * <br/> * <br/> options.type: "DO_DROP" * <br/> options.page: the page of the drap/drop operation * <br/> options.source: the source dragged object * <br/> options.target: the drop target * <br/> options.newElement: a new element. It is defined if a user drops question or panel from the toolbox * <br/> * <br/> options.type: "TRANSLATIONS_CHANGED" * <br/> * <br/> options.type: "LOGIC_CHANGED" * <br/> options.item: the survey logic item. It has expression and operations (list of operations) properties * <br/> options.changeType: There are three possible values: "new", "modify" and "delete" */ this.onModified = new __WEBPACK_IMPORTED_MODULE_16_survey_knockout__["Event"](); /** * The event is fired on changing question, panel or page name. * <br/> sender the survey creator object that fires the event * <br/> options.obj the object (question, panel or page) * <br/> options.oldName the previous name of the element * <br/> options.newName the new name of the element */ this.onElementNameChanged = new __WEBPACK_IMPORTED_MODULE_16_survey_knockout__["Event"](); /** * The event is fired when the survey creator creates a survey object (Survey.Survey). * <br/> sender the survey creator object that fires the event * <br/> options.survey the survey object showing in the creator. * <br/> options.reason indicates what component of the creator requests the survey. */ this.onSurveyInstanceCreated = new __WEBPACK_IMPORTED_MODULE_16_survey_knockout__["Event"](); /** * The event is fired when the survey creator is initialized and a survey object (Survey.Survey) is created. * <br/> sender the survey creator object that fires the event * <br/> options.survey the survey object showing in the creator. */ this.onDesignerSurveyCreated = new __WEBPACK_IMPORTED_MODULE_16_survey_knockout__["Event"](); /** * The event is fired when the survey creator runs the survey in the test mode. * <br/> sender the survey creator object that fires the event * <br/> options.survey the survey object showing in the "Test survey" tab. */ this.onTestSurveyCreated = new __WEBPACK_IMPORTED_MODULE_16_survey_knockout__["Event"](); /** * Use this event to control Property Editors UI. * <br/> sender the survey creator object that fires the event * <br/> options.obj the survey object which property is edited in the Property Editor. * <br/> options.propertyName the name of the edited property. * <br/> options.editorOptions options that can be changed. * <br/> options.editorOptions.allowAddRemoveItems a boolean property, true by default. Set it false to disable add/remove items in array properties. For example 'choices', 'columns', 'rows'. * <br/> options.editorOptions.showTextView a boolean property, true by default. Set it false to disable "Fast Entry" tab for "choices" property. * <br/> options.editorOptions.itemsEntryType a string property, 'form' by default. Set it 'fast' to show "Fast Entry" tab for "choices" property by default. */ this.onSetPropertyEditorOptions = new __WEBPACK_IMPORTED_MODULE_16_survey_knockout__["Event"](); /** * Use this event to show a custom error in the Question Editor on pressing Apply or OK buttons, if the values are not set correctly. The error will be displayed under the property editor. * <br/> sender the survey creator object that fires the event * <br/> options.obj the survey object which property is edited in the Property Editor. * <br/> options.propertyName the name of the edited property. * <br/> options.value the property value. * <br/> options.error the error you want to display. Set the empty string (the default value) or null if there is no errors. * @see onPropertyValueChanging */ this.onPropertyValidationCustomError = new __WEBPACK_IMPORTED_MODULE_16_survey_knockout__["Event"](); /** * Use this event to change the value entered in the property editor. You may call a validation, so an end user sees the error immediately * <br/> sender the survey creator object that fires the event * <br/> options.obj the survey object which property is edited in the Property Editor. * <br/> options.propertyName the name of the edited property. * <br/> options.value the property value. * <br/> options.newValue set the corrected value into this property. Leave it null if you are ok with the entered value. * <br/> options.doValidation set the value to true to call the property validation. If there is an error, the user sees it immediately. * @see onPropertyValidationCustomError */ this.onPropertyValueChanging = new __WEBPACK_IMPORTED_MODULE_16_survey_knockout__["Event"](); /** * Use this event to change the value entered in the property editor. You may call a validation, so an end user sees the error immediately * <br/> sender the survey creator object that fires the event * <br/> options.obj the survey object which property is edited in the Property Editor. * <br/> options.propertyName the name of the edited property. * <br/> options.editor the instance of Property Editor. * @see onPropertyValueChanging */ this.onPropertyEditorObjectAssign = new __WEBPACK_IMPORTED_MODULE_16_survey_knockout__["Event"](); /** * Use this event to modify the survey that used on setting value for condition/expression properties, like visibleIf, enableIf and so on. * <br/> sender the survey creator object that fires the event * <br/> options.obj the survey object which property is edited in the Property Editor. * <br/> options.propertyName the name of the edited property. * <br/> options.editor the instance of Property Editor. * <br/> options.valueQuestionName the name of the question that shows in the survey for choosing the value * <br/> options.survey the instance of the survey that allows to choose the value. You may modify it before it shows to the end-user */ this.onConditionValueSurveyCreated = new __WEBPACK_IMPORTED_MODULE_16_survey_knockout__["Event"](); /** * Use this event to modify the list (name and titles) od the questions available in a condition editor. * <br/> sender the survey creator object that fires the event * <br/> options.obj the survey object which property is edited in the Property Editor. * <br/> options.propertyName the name of the edited property. * <br/> options.editor the instance of Property Editor. * <br/> options.list the the list of the questions available for condition */ this.onConditionQuestionsGetList = new __WEBPACK_IMPORTED_MODULE_16_survey_knockout__["Event"](); /** * Use this event to process key down event in a property editor * <br/> sender the survey creator object that fires the event * <br/> options.obj the survey object which property is edited in the Property Editor. * <br/> options.propertyName the name of the edited property. * <br/> options.editor the instance of Property Editor. * <br/> options.event the instance of mouse event. */ this.onPropertyEditorKeyDown = new __WEBPACK_IMPORTED_MODULE_16_survey_knockout__["Event"](); /** * Use this event to disable some operations for an element (question/panel). * <br/> sender the survey creator object that fires the event * <br/> options.obj the survey object question/panel * <br/> options.allowDelete set it to false to disable deleting the object * <br/> options.allowEdit set it to false to disable calling the modal Editor * <br/> options.allowCopy set it to false to disable copying the object * <br/> options.allowAddToToolbox set it to false to disable adding element to Toolbox * <br/> options.allowDragging set it to false to disable adding element to Toolbox * <br/> options.allowChangeType set it to false to disable changing element type */ this.onElementAllowOperations = new __WEBPACK_IMPORTED_MODULE_16_survey_knockout__["Event"](); /** * Use this event to add/remove/modify the element (question/panel) menu items. * <br/> sender the survey creator object that fires the event * <br/> options.obj the survey object which property is edited in the Property Editor. * <br/> options.items the list of menu items. It has two requried fields: text and onClick: function(obj: Survey.Base) {} and optional name field. * @see onElementAllowOperations */ this.onDefineElementMenuItems = new __WEBPACK_IMPORTED_MODULE_16_survey_knockout__["Event"](); /** * Use this event to show the description on the top or/and bottom of the property modal editor. * <br/> sender the survey creator object that fires the event * <br/> options.obj the survey object which property is edited in the Property Editor. * <br/> options.propertyName the property name * <br/> options.htmlTop the html that you want to see on the top of the modal window * <br/> options.htmlBottom the html that you want to see on the bottom of the modal window */ this.onShowPropertyModalEditorDescription = new __WEBPACK_IMPORTED_MODULE_16_survey_knockout__["Event"](); /** * Use this event to change the text showing in the dropdown of the property grid. * <br/> sender the survey creator object that fires the event * <br/> options.obj the survey object. * <br/> options.text the current object text, commonly it is a name. You must change this attribute */ this.onGetObjectTextInPropertyGrid = new __WEBPACK_IMPORTED_MODULE_16_survey_knockout__["Event"](); this.koAutoSave = __WEBPACK_IMPORTED_MODULE_1_knockout__["observable"](false); /** * The event is called when end-user addes new element (question or panel) into the survey toolbox. * It calls before adding the element into toolbox and it allows to change the toolbox item attributes using options.itemOptions parameter * <br/> sender the survey creator object that fires the event * <br/> options.element is a new added element * <br/> options.itemOptions a json object that allows you to override question properties. Attributes are: name, title, isCopied, iconName, json and category. * @see onCustomElementAddedIntoToolbox */ this.onCustomElementAddingIntoToolbox = new __WEBPACK_IMPORTED_MODULE_16_survey_knockout__["Event"](); /** * The event is called when end-user addes new element (question or panel) into the survey toolbox. * <br/> sender the survey creator object that fires the event * <br/> options.element is a new added element * @see onCustomElementAddingIntoToolbox */ this.onCustomElementAddedIntoToolbox = new __WEBPACK_IMPORTED_MODULE_16_survey_knockout__["Event"](); /** * The event is fired on uploading the file. There are two properties in options: options.name options.callback. * <br/> sender the survey creator object that fires the event * <br/> name: name, file: file, accept: accept * <br/> file the Javascript File object * <br/> callback called on upload complete * @see uploadFile */ this.onUploadFile = new __WEBPACK_IMPORTED_MODULE_16_survey_knockout__["Event"](); /** * The method is called when the translation from csv file is imported. * @see translation * @see showTranslationTab */ this.onTranslationImported = new __WEBPACK_IMPORTED_MODULE_16_survey_knockout__["Event"](); /** * Use this event to control drag&drop operations. * <br/> sender the survey creator object that fires the event. * <br/> options.survey the editing survey object. * <br/> options.allow set it to false to disable dragging. * <br/> options.target a target element that is dragging. * <br/> options.source a source element. It can be null, if it is a new element, dragging from toolbox. * <br/> options.parent a page or panel where target element is dragging. * <br/> options.insertBefore an element before the target element is dragging. It can be null if parent container (page or panel) is empty or dragging an element under the last element of the container. * <br/> options.insertAfter an element after the target element is dragging. It can be null if parent container (page or panel) is empty or dragging element to the top of the parent container. */ this.onDragDropAllow = new __WEBPACK_IMPORTED_MODULE_16_survey_knockout__["Event"](); /** * Use this event to get access rendered adorder. * <br/> sender the survey creator object that fires the event. * <br/> options.survey the editing survey object. * <br/> options.question the survey element of the adorner. * <br/> options.adorner the adorner id. * <br/> options.element a root adorner element. * <br/> options.context a context for adorner element, e.g. current item of a select base question. */ this.onAdornerRendered = new __WEBPACK_IMPORTED_MODULE_16_survey_knockout__["Event"](); /** * The event is called after user closes the popup element editor. * <br/> options.element the edited element. * <br/> options.isCanceled indicated user clicked Cancel. */ this.onElementEditorClosed = new __WEBPACK_IMPORTED_MODULE_16_survey_knockout__["Event"](); /** * Set it to false to suppress an alert message about error on saving the survey into database. */ this.showErrorOnFailedSave = true; this.koShowState = __WEBPACK_IMPORTED_MODULE_1_knockout__["observable"](false); this.koReadOnly = __WEBPACK_IMPORTED_MODULE_1_knockout__["observable"](false); this.koShowPropertyGrid = __WEBPACK_IMPORTED_MODULE_1_knockout__["observable"](true); this.koShowToolbox = __WEBPACK_IMPORTED_MODULE_1_knockout__["observable"](true); this.koHideAdvancedSettings = __WEBPACK_IMPORTED_MODULE_1_knockout__["observable"](false); this.koState = __WEBPACK_IMPORTED_MODULE_1_knockout__["observable"](""); this.tabs = __WEBPACK_IMPORTED_MODULE_1_knockout__["observableArray"](); this.themeCss = __WEBPACK_IMPORTED_MODULE_1_knockout__["computed"](function () { return ["bootstrap", "bootstrapmaterial"].indexOf(__WEBPACK_IMPORTED_MODULE_18__stylesmanager__["a" /* StylesManager */].currentTheme()) === -1 ? "sv_default_css" : "sv_" + __WEBPACK_IMPORTED_MODULE_18__stylesmanager__["a" /* StylesManager */].currentTheme() + "_css"; }); /** * The list of toolbar items. You may add/remove/replace them. * @see IToolbarItem */ this.toolbarItems = __WEBPACK_IMPORTED_MODULE_1_knockout__["observableArray"](); /** * The delay on saving survey JSON on autoSave in ms. It is 500 ms by default. * If during this period of time an end-user modify survey, then the last version will be saved only. Set to 0 to save immediately. * @see isAutoSave */ this.autoSaveDelay = 500; this.autoSaveTimerId = null; this.saveNo = 0; this.showExternalHelpLink = __WEBPACK_IMPORTED_MODULE_1_knockout__["observable"](false); /** * Add a new page into the editing survey. */ this.addPage = function () { var name = __WEBPACK_IMPORTED_MODULE_12__surveyHelper__["b" /* SurveyHelper */].getNewPageName(_this.pages()); var page = _this.survey.addNewPage(name); _this.pages.valueHasMutated(); //TODO why this is need ? (ko problem) _this.addPageToUI(page); _this.setModified({ type: "PAGE_ADDED", newValue: page }); }; this.deletePage = function () { _this.deleteCurrentObject(); _this.pages.valueHasMutated(); //TODO why this is need ? (ko problem) }; this.movePage = function (indexFrom, indexTo) { var page = _this.pages()[indexTo]; _this.surveyObjects.survey = null; // TODO may be we don't need this hack _this.surveyObjects.survey = _this.survey; _this.surveyObjects.selectObject(page); _this.setModified({ type: "PAGE_MOVED", page: page, indexFrom: indexFrom, indexTo: indexTo }); }; this.newQuestions = []; this.newPanels = []; this.isCurrentPageEmpty = __WEBPACK_IMPORTED_MODULE_1_knockout__["computed"](function () { return !!_this.surveyValue() && !!_this.surveyValue().koCurrentPage() && _this.getRows(_this.surveyValue().koCurrentPage()).length === 0; }); this.showQuestionEditor = function (element, onClose) { if (onClose === void 0) { onClose = null; } var self = _this; var elWindow = _this.renderedElement ? (_this.renderedElement.querySelector("#surveyquestioneditorwindow")) : null; var isCanceled = true; _this.showEditorOldName = element["name"]; _this.questionEditorWindow.show(element, elWindow, function (question) { self.onQuestionEditorChanged(question); isCanceled = false; }, _this, function () { if (onClose) onClose(isCanceled); self.onElementEditorClosed.fire(self, { isCanceled: isCanceled, element: element }); }); }; //TODO why this is need ? (ko problem) this.dirtyPageUpdate = function () { var selectedObject = _this.koSelectedObject().value; if (__WEBPACK_IMPORTED_MODULE_12__surveyHelper__["b" /* SurveyHelper */].getObjectType(selectedObject) !== __WEBPACK_IMPORTED_MODULE_12__surveyHelper__["a" /* ObjType */].Page) { if (__WEBPACK_IMPORTED_MODULE_12__surveyHelper__["b" /* SurveyHelper */].getObjectType(selectedObject) === __WEBPACK_IMPORTED_MODULE_12__surveyHelper__["a" /* ObjType */].Question && !!selectedObject["koElementType"]) { selectedObject["koElementType"].notifySubscribers(); } return; } _this.pages.notifySubscribers(); _this.surveyObjects.selectObject(selectedObject); }; /** * Create a new page with the same elements and place it next to the current one. It returns the new created Survey.Page * @param page A copied Survey.Page */ this.copyPage = function (page) { var newPage = _this.copyElement(page); var index = _this.pages.indexOf(page); if (index > -1) { _this.pages.splice(index + 1, 0, newPage); } else { _this.pages.push(newPage); } _this.addPageToUI(newPage); _this.setModified({ type: "PAGE_ADDED", newValue: newPage }); return newPage; }; this.onEditorTabRenderedCallback = function (tabName, elements, model, tabData) { _this.onEditorTabRendered.fire(_this, { tabName: tabName, elements: elements, model: model, tabData: tabData }); }; this.koShowOptions = __WEBPACK_IMPORTED_MODULE_1_knockout__["observable"](); this.koGenerateValidJSON = __WEBPACK_IMPORTED_MODULE_1_knockout__["observable"](true); this.koDesignerHeight = __WEBPACK_IMPORTED_MODULE_1_knockout__["observable"](); this.koShowPagesToolbox = __WEBPACK_IMPORTED_MODULE_1_knockout__["observable"](true); this.setOptions(options); this.koCanDeleteObject = __WEBPACK_IMPORTED_MODULE_1_knockout__["observable"](false); var self = this; __WEBPACK_IMPORTED_MODULE_18__stylesmanager__["a" /* StylesManager */].applyTheme(__WEBPACK_IMPORTED_MODULE_18__stylesmanager__["a" /* StylesManager */].currentTheme()); this.pages = __WEBPACK_IMPORTED_MODULE_1_knockout__["observableArray"](); this.koShowSaveButton = __WEBPACK_IMPORTED_MODULE_1_knockout__["observable"](false); this.koTestSurveyWidth = __WEBPACK_IMPORTED_MODULE_1_knockout__["observable"]("100%"); this.saveButtonClick = function () { self.doSave(); }; this.koObjects = __WEBPACK_IMPORTED_MODULE_1_knockout__["observableArray"](); window["sel"] = this.koSelectedObject; this.koSelectedObject = __WEBPACK_IMPORTED_MODULE_1_knockout__["observable"](); this.koSelectedObject.subscribe(function (newValue) { self.selectedObjectChanged(newValue != null ? newValue.value : null); }); this.koGenerateValidJSON.subscribe(function (newValue) { if (!self.options) self.options = {}; self.options.generateValidJSON = newValue; if (self.generateValidJSONChangedCallback) self.generateValidJSONChangedCallback(newValue); }); this.surveyObjects = new __WEBPACK_IMPORTED_MODULE_6__surveyObjects__["a" /* SurveyObjects */](this.koObjects, this.koSelectedObject, function (obj) { return self.getObjectDisplayName(obj); }); this.surveyObjects.getItemTextCallback = function (obj, text) { var options = { obj: obj, text: text }; self.onGetObjectTextInPropertyGrid.fire(self, options); return options.text; }; this.selectPage = function (page) { _this.surveyObjects.selectObject(page); }; this.undoRedo = new __WEBPACK_IMPORTED_MODULE_11__undoredo__["a" /* SurveyUndoRedo */](); this.selectedObjectEditorValue = new __WEBPACK_IMPORTED_MODULE_3__objectEditor__["a" /* SurveyObjectEditor */](this); this.selectedObjectEditorValue.onSortPropertyCallback = function (obj, property1, property2) { return self.onCustomSortPropertyObjectProperty(obj, property1, property2); }; this.selectedObjectEditorValue.onPropertyValueChanged.add(function (sender, options) { options.updatedValue = self.onPropertyValueChanged(options.property, options.object, options.newValue); }); this.selectedObjectEditorValue.onAfterRenderCallback = function (obj, htmlElement, prop) { if (self.onPropertyAfterRender.isEmpty) return; var options = { obj: obj, htmlElement: htmlElement, property: prop.property, propertyEditor: prop.editor }; self.onPropertyAfterRender.fire(self, options); }; this.questionEditorWindow = new __WEBPACK_IMPORTED_MODULE_8__questionEditors_questionEditor__["a" /* SurveyPropertyEditorShowWindow */](); this.surveyLive = new __WEBPACK_IMPORTED_MODULE_4__surveylive__["a" /* SurveyLiveTester */](this); this.surveyEmbeding = new __WEBPACK_IMPORTED_MODULE_5__surveyEmbedingWindow__["a" /* SurveyEmbedingWindow */](); this.translationValue = new __WEBPACK_IMPORTED_MODULE_20__translation__["a" /* Translation */](this.createSurvey({}, "translation")); this.translation.importFinishedCallback = function () { self.onTranslationImported.fire(self, {}); }; this.translation.availableTranlationsChangedCallback = function () { _this.setModified({ type: "TRANSLATIONS_CHANGED" }); }; this.translation.tranlationChangedCallback = function (locale, name, value, context) { _this.setModified({ type: "TRANSLATIONS_CHANGED", locale: locale, name: name, value: value, context: context }); }; this.logicValue = new __WEBPACK_IMPORTED_MODULE_21__logic__["a" /* SurveyLogic */](this.createSurvey({}, "logic")); this.logic.onChangedCallback = function (item, changeType) { _this.setModified({ type: "LOGIC_CHANGED", item: item, changeType: changeType }); }; this.toolboxValue = new __WEBPACK_IMPORTED_MODULE_14__questionToolbox__["a" /* QuestionToolbox */](this.options && this.options.questionTypes ? this.options.questionTypes : null); this.koViewType = __WEBPACK_IMPORTED_MODULE_1_knockout__["observable"]("designer"); this.koViewType.subscribe(function (newValue) { self.onActiveTabChanged.fire(self, { tabName: newValue }); }); this.koIsShowDesigner = __WEBPACK_IMPORTED_MODULE_1_knockout__["computed"](function () { return self.koViewType() == "designer"; }); this.generateValidJSONClick = function () { self.koGenerateValidJSON(true); }; this.generateReadableJSONClick = function () { self.koGenerateValidJSON(false); }; this.runSurveyClick = function () { self.showLiveSurvey(); }; this.deleteObjectClick = function () { self.deleteCurrentObject(); }; this.draggingToolboxItem = function (item, e) { self.doDraggingToolboxItem(item.json, e); }; this.clickToolboxItem = function (item) { self.doClickToolboxItem(item.json); }; this.dragEnd = function (item, e) { self.dragDropHelper.end(); }; this.doUndoClick = function () { var options = { canUndo: true }; self.onBeforeUndo.fire(self, options); if (options.canUndo) { var item = self.undoRedo.undo(); self.doUndoRedo(item); self.onAfterUndo.fire(self, { state: item }); } }; this.doRedoClick = function () { var options = { canRedo: true }; self.onBeforeRedo.fire(self, options); if (options.canRedo) { var item = self.undoRedo.redo(); self.doUndoRedo(item); self.onAfterRedo.fire(self, { state: item }); } }; this.jsonEditor = new __WEBPACK_IMPORTED_MODULE_9__surveyJSONEditor__["a" /* SurveyJSONEditor */](); __WEBPACK_IMPORTED_MODULE_1_knockout__["computed"](function () { _this.jsonEditor.readOnly = _this.readOnly; }); __WEBPACK_IMPORTED_MODULE_1_knockout__["computed"](function () { _this.tabs([]); _this.tabs.push({ name: "designer", title: _this.getLocString("ed.designer"), template: "se-tab-designer", data: _this, action: function () { return _this.showDesigner(); } }); if (_this.showTestSurveyTab) { _this.tabs.push({ name: "test", title: _this.getLocString("ed.testSurvey"), template: "se-tab-test", data: _this, action: function () { return _this.showTestSurvey(); } }); } if (_this.showLogicTab) { _this.tabs.push({ name: "logic", title: _this.getLocString("ed.logic"), template: "surveylogic", data: _this.logic, action: function () { return _this.showLogicEditor(); } }); } if (_this.showJSONEditorTab) { _this.tabs.push({ name: "editor", title: _this.getLocString("ed.jsonEditor"), template: "jsoneditor", data: _this.jsonEditor, action: function () { return _this.showJsonEditor(); } }); } if (_this.showEmbededSurveyTab) { _this.tabs.push({ name: "embed", title: _this.getLocString("ed.embedSurvey"), template: "surveyembeding", data: _this.surveyEmbeding, action: function () { return _this.showEmbedEditor(); } }); } if (_this.showTranslationTab) { _this.tabs.push({ name: "translation", title: _this.getLocString("ed.translation"), template: "translation", data: _this.translation, action: function () { return _this.showTranslationEditor(); } }); } }); if (renderedElement) { this.render(renderedElement); } this.text = ""; this.addToolbarItems(); } Object.defineProperty(SurveyCreator.prototype, "haveCommercialLicense", { /** * You have right to set this property to true if you have bought the commercial licence only. * It will remove the text about non-commerical usage on the top of the widget. * Setting this property true without having a commercial licence is illegal. * @see haveCommercialLicense */ get: function () { return this._haveCommercialLicense(); }, set: function (val) { this._haveCommercialLicense(val); }, enumerable: true, configurable: true }); Object.defineProperty(SurveyCreator.prototype, "inplaceEditForValues", { /** * You need to set this property to true if you want to inplace edit item values instead of texts. * @see inplaceEditForValues */ get: function () { return __WEBPACK_IMPORTED_MODULE_19__adorners_item_editor__["a" /* itemAdorner */].inplaceEditForValues; }, set: function (val) { __WEBPACK_IMPORTED_MODULE_19__adorners_item_editor__["a" /* itemAdorner */].inplaceEditForValues = val; }, enumerable: true, configurable: true }); Object.defineProperty(SurveyCreator.prototype, "isAutoSave", { /** * A boolean property, false by default. Set it to true to call protected doSave method automatically on survey changing. */ get: function () { return this.koAutoSave(); }, set: function (newVal) { this.koAutoSave(newVal); }, enumerable: true, configurable: true }); Object.defineProperty(SurveyCreator.prototype, "showState", { /** * A boolean property, false by default. Set it to true to show the state in the toolbar (saving/saved). */ get: function () { return this.koShowState(); }, set: function (newVal) { this.koShowState(newVal); }, enumerable: true, configurable: true }); Object.defineProperty(SurveyCreator.prototype, "readOnly", { /** * A boolean property, false by default. Set it to true to deny editing. */ get: function () { return this.koReadOnly(); }, set: function (newVal) { this.koReadOnly(newVal); }, enumerable: true, configurable: true }); SurveyCreator.prototype.addToolbarItems = function () { var _this = this; this.toolbarItems.push({ id: "svd-undo", icon: "icon-actionundo", visible: this.koIsShowDesigner, enabled: this.undoRedo.koCanUndo, action: this.doUndoClick, title: this.getLocString("ed.undo") }); this.toolbarItems.push({ id: "svd-redo", icon: "icon-actionredo", visible: this.koIsShowDesigner, enabled: this.undoRedo.koCanRedo, action: this.doRedoClick, title: this.getLocString("ed.redo") }); this.toolbarItems.push({ id: "svd-survey-settings", icon: "icon-actionsettings", visible: this.koIsShowDesigner, enabled: false, action: function () { _this.surveyObjects.selectObject(_this.survey); _this.showQuestionEditor(_this.survey); }, title: this.getLocString("ed.settings") }); this.toolbarItems.push({ id: "svd-options", visible: __WEBPACK_IMPORTED_MODULE_1_knockout__["computed"](function () { return _this.koIsShowDesigner() && _this.koShowOptions(); }), title: this.getLocString("ed.options"), template: "svd-toolbar-options", items: __WEBPACK_IMPORTED_MODULE_1_knockout__["observableArray"]([ { id: "svd-valid-json", visible: true, css: __WEBPACK_IMPORTED_MODULE_1_knockout__["computed"](function () { return (_this.koGenerateValidJSON() ? "active" : ""); }), action: this.generateValidJSONClick, title: this.getLocString("ed.generateValidJSON") }, { id: "svd-readable-json", visible: true, css: __WEBPACK_IMPORTED_MODULE_1_knockout__["computed"](function () { return (!_this.koGenerateValidJSON() ? "active" : ""); }), action: this.generateReadableJSONClick, title: this.getLocString("ed.generateReadableJSON") } ]) }); this.toolbarItems.push({ id: "svd-test", visible: __WEBPACK_IMPORTED_MODULE_1_knockout__["computed"](function () { return _this.koViewType() === "test"; }), title: __WEBPACK_IMPORTED_MODULE_1_knockout__["computed"](function () { return _this.getLocString("ed.testSurveyWidth") + " " + _this.koTestSurveyWidth(); }), template: "svd-toolbar-options", items: __WEBPACK_IMPORTED_MODULE_1_knockout__["observableArray"]([ { id: "svd-100-json", visible: true, action: function () { return _this.koTestSurveyWidth("100%"); }, title: "100%" }, { id: "svd-1200px-json", visible: true, action: function () { return _this.koTestSurveyWidth("1200px"); }, title: "1200px" }, { id: "svd-1000px-json", visible: true, action: function () { return _this.koTestSurveyWidth("1000px"); }, title: "1000px" }, { id: "svd-800px-json", visible: true, action: function () { return _this.koTestSurveyWidth("800px"); }, title: "800px" }, { id: "svd-600px-json", visible: true, action: function () { return _this.koTestSurveyWidth("600px"); }, title: "600px" }, { id: "svd-400px-json", visible: true, action: function () { return _this.koTestSurveyWidth("400px"); }, title: "400px" } ]) }); this.toolbarItems.push({ id: "svd-save", visible: this.koShowSaveButton, action: this.saveButtonClick, innerCss: "svd_save_btn", title: this.getLocString("ed.saveSurvey") }); this.toolbarItems.push({ id: "svd-state", visible: this.koShowState, css: "svd_state", innerCss: __WEBPACK_IMPORTED_MODULE_1_knockout__["computed"](function () { return "icon-" + _this.koState(); }), title: __WEBPACK_IMPORTED_MODULE_1_knockout__["computed"](function () { return _this.getLocString("ed." + _this.koState()); }), template: "svd-toolbar-state" }); }; SurveyCreator.prototype.setOptions = function (options) { if (!options) options = {}; if (!options.hasOwnProperty("generateValidJSON")) options.generateValidJSON = true; this.options = options; this.showLogicTabValue(typeof options.showLogicTab !== "undefined" ? options.showLogicTab : false); this.showJSONEditorTabValue(typeof options.showJSONEditorTab !== "undefined" ? options.showJSONEditorTab : true); this.showTestSurveyTabValue(typeof options.showTestSurveyTab !== "undefined" ? options.showTestSurveyTab : true); this.showEmbededSurveyTabValue(typeof options.showEmbededSurveyTab !== "undefined" ? options.showEmbededSurveyTab : false); this.showTranslationTabValue(typeof options.showTranslationTab !== "undefined" ? options.showTranslationTab : false); this.showLogicTabValue(typeof options.showLogicTab !== "undefined" ? options.showLogicTab : false); this.haveCommercialLicense = typeof options.haveCommercialLicense !== "undefined" ? options.haveCommercialLicense : false; this.inplaceEditForValues = typeof options.inplaceEditForValues !== "undefined" ? options.inplaceEditForValues : false; this.showObjectTitles = typeof options.showObjectTitles !== "undefined" ? options.showObjectTitles : false; this.showTitlesInExpressions = typeof options.showTitlesInExpressions !== "undefined" ? options.showTitlesInExpressions : false; this.useTabsInElementEditor = typeof options.useTabsInElementEditor !== "undefined" ? options.useTabsInElementEditor : false; this.showState = typeof options.showState !== "undefined" ? options.showState : false; this.koShowOptions(typeof options.showOptions !== "undefined" ? options.showOptions : false); this.showPropertyGrid = typeof options.showPropertyGrid !== "undefined" ? options.showPropertyGrid : true; this.showToolbox = typeof options.showToolbox !== "undefined" ? options.showToolbox : true; this.koGenerateValidJSON(this.options.generateValidJSON); this.isAutoSave = typeof options.isAutoSave !== "undefined" ? options.isAutoSave : false; this.showErrorOnFailedSave = typeof options.showErrorOnFailedSave !== "undefined" ? options.showErrorOnFailedSave : true; this.isRTLValue = typeof options.isRTL !== "undefined" ? options.isRTL : false; this.scrollToNewElement = typeof options.scrollToNewElement !== "undefined" ? options.scrollToNewElement : true; if (options.designerHeight) { this.koDesignerHeight(options.designerHeight); } if (options.objectsIntend) { __WEBPACK_IMPORTED_MODULE_6__surveyObjects__["a" /* SurveyObjects */].intend = options.objectsIntend; } if (typeof options.showPagesToolbox !== "undefined") { this.koShowPagesToolbox(options.showPagesToolbox); } if (typeof options.readOnly !== "undefined") { this.koReadOnly(options.readOnly); } if (typeof options.showPagesInTestSurveyTab !== "undefined") { this.showPagesInTestSurveyTab = options.showPagesInTestSurveyTab; } if (typeof options.showDefaultLanguageInTestSurveyTab !== "undefined") { this.showDefaultLanguageInTestSurveyTab = options.showDefaultLanguageInTestSurveyTab; } if (typeof options.showInvisibleElementsInTestSurveyTab !== "undefined") { this.showInvisibleElementsInTestSurveyTab = options.showInvisibleElementsInTestSurveyTab; } if (typeof options.allowModifyPages !== "undefined") { this.allowModifyPages = options.allowModifyPages; } }; Object.defineProperty(SurveyCreator.prototype, "survey", { /** * The editing survey object (Survey.Survey) */ get: function () { return this.surveyValue(); }, enumerable: true, configurable: true }); Object.defineProperty(SurveyCreator.prototype, "selectedObjectEditor", { get: function () { return this.selectedObjectEditorValue; }, enumerable: true, configurable: true }); /** * Use this method to force update this element in editor. * @param element Survey.Question is element to update */ SurveyCreator.prototype.update = function (element) { element["koElementType"].notifySubscribers(); }; /** * Call this method to render the Survey Creator. * @param element HtmlElement or html element id where survey creator will be rendered * @param options survey creator options. The following options are available: showJSONEditorTab, showTestSurveyTab, showEmbededSurveyTab, * showTranslationTab, showLogicTab, showOptions, generateValidJSON, isAutoSave, designerHeight. */ SurveyCreator.prototype.render = function (element, options) { if (element === void 0) { element = null; } if (options === void 0) { options = null; } if (options) this.setOptions(options); var self = this; if (element && typeof element == "string") { element = document.getElementById(element); } if (element) { this.renderedElement = element; } element = this.renderedElement; if (!element) return; element.innerHTML = templateEditorHtml; self.applyBinding(); }; SurveyCreator.prototype.loadSurvey = function (surveyId) { var self = this; new __WEBPACK_IMPORTED_MODULE_16_survey_knockout__["dxSurveyService"]().loadSurvey(surveyId, function (success, result, response) { if (success && result) { self.text = JSON.stringify(result); } }); }; Object.defineProperty(SurveyCreator.prototype, "text", { /** * The Survey JSON as a text. Use it to get Survey JSON or change it. * @see JSON */ get: function () { if (this.koViewType() == "editor") return this.jsonEditor.text; return this.getSurveyTextFromDesigner(); }, set: function (value) { this.changeText(value, true); }, enumerable: true, configurable: true }); Object.defineProperty(SurveyCreator.prototype, "JSON", { /** * The Survey JSON. Use it to get Survey JSON or change it. * @see text */ get: function () { return this.survey.toJSON(); }, set: function (val) { if (this.koViewType() == "editor") { this.setTextValue(JSON.stringify(val)); } else { this.initSurveyWithJSON(val, true); } }, enumerable: true, configurable: true }); /** * Set JSON as text into survey. Clear undo/redo states optionally. * @param value JSON as text * @param clearState default false. Set this parameter to true to clear undo/redo states. */ SurveyCreator.prototype.changeText = function (value, clearState) { if (clearState === void 0) { clearState = false; } var textWorker = new __WEBPACK_IMPORTED_MODULE_10__textWorker__["a" /* SurveyTextWorker */](value); if (textWorker.isJsonCorrect) { this.initSurveyWithJSON(textWorker.survey.toJSON(), clearState); } else { this.setTextValue(value); this.koViewType("editor"); } }; SurveyCreator.prototype.initSurveyWithJSON = function (json, clearState) { this.initSurvey(json); this.showDesigner(); this.setUndoRedoCurrentState(clearState); }; Object.defineProperty(SurveyCreator.prototype, "toolbox", { /** * Toolbox object. Contains information about Question toolbox items. * @see QuestionToolbox */ get: function () { return this.toolboxValue; }, enumerable: true, configurable: true }); Object.defineProperty(SurveyCreator.prototype, "translation", { /** * Return the translation mode object. * @see showTranslationTab */ get: function () { return this.translationValue; }, enumerable: true, configurable: true }); Object.defineProperty(SurveyCreator.prototype, "logic", { /** * Return the logic mode object. * @see showLogicTab */ get: function () { return this.logicValue; }, enumerable: true, configurable: true }); Object.defineProperty(SurveyCreator.prototype, "customToolboxQuestionMaxCount", { /** * Get and set the maximum of copied questions/panels in the toolbox. The default value is 3 */ get: function () { return this.toolbox.copiedItemMaxCount; }, set: function (value) { this.toolbox.copiedItemMaxCount = value; }, enumerable: true, configurable: true }); Object.defineProperty(SurveyCreator.prototype, "state", { /** * Returns the creator state. It may return empty string or "saving" and "saved". */ get: function () { return this.stateValue; }, enumerable: true, configurable: true }); SurveyCreator.prototype.setState = function (value) { this.stateValue = value; this.koState(this.state); }; SurveyCreator.prototype.doAutoSave = function () { if (this.autoSaveDelay <= 0) { this.doSave(); return; } if (!!this.autoSaveTimerId) { clearTimeout(this.autoSaveTimerId); } var self = this; this.autoSaveTimerId = setTimeout(function () { clearTimeout(self.autoSaveTimerId); self.autoSaveTimerId = null; self.doSave(); }, this.autoSaveDelay); }; SurveyCreator.prototype.doSave = function () { this.setState("saving"); if (this.saveSurveyFunc) { this.saveNo++; var self = this; this.saveSurveyFunc(this.saveNo, function doSaveCallback(no, isSuccess) { if (self.saveNo === no) { if (isSuccess) { self.setState("saved"); } else { if (self.showErrorOnFailedSave) { alert(self.getLocString("ed.saveError")); } self.setState("modified"); } } }); } }; SurveyCreator.prototype.setModified = function (options) { if (options === void 0) { options = null; } this.setState("modified"); this.setUndoRedoCurrentState(); this.onModified.fire(this, options); this.isAutoSave && this.doAutoSave(); }; /** * Undo the latest user operation. Returns true if it performes successful. */ SurveyCreator.prototype.undo = function () { if (!this.undoRedo.koCanUndo()) return false; this.doUndoRedo(this.undoRedo.undo()); return true; }; /** * Redo the latest undo operation. Returns true if it performes successful. */ SurveyCreator.prototype.redo = function () { if (!this.undoRedo.koCanRedo()) return false; this.doUndoRedo(this.undoRedo.redo()); return true; }; SurveyCreator.prototype.setUndoRedoCurrentState = function (clearState) { if (clearState === void 0) { clearState = false; } if (clearState) { this.undoRedo.clear(); } var selObj = this.koSelectedObject() ? this.koSelectedObject().value : null; this.undoRedo.setCurrent(this.surveyValue(), selObj ? selObj.name : null); }; Object.defineProperty(SurveyCreator.prototype, "saveSurveyFunc", { /** * Assign to this property a function that will be called on clicking the 'Save' button or on any change if isAutoSave equals true. * @see isAutoSave */ get: function () { return this.saveSurveyFuncValue; }, set: function (value) { this.saveSurveyFuncValue = value; this.koShowSaveButton(value != null && !this.isAutoSave); }, enumerable: true, configurable: true }); Object.defineProperty(SurveyCreator.prototype, "showOptions", { /** * Set it to true to show "Options" menu and to false to hide the menu */ get: function () { return this.koShowOptions(); }, set: function (value) { this.koShowOptions(value); }, enumerable: true, configurable: true }); Object.defineProperty(SurveyCreator.prototype, "showPropertyGrid", { /** * Set it to false to completely hide the Property Grid on the right. It allows to edit the properties of the selected object (question/panel/page/survey). */ get: function () { return this.koShowPropertyGrid(); }, set: function (value) { this.koShowPropertyGrid(value); this.koHideAdvancedSettings(!value); }, enumerable: true, configurable: true }); Object.defineProperty(SurveyCreator.prototype, "showToolbox", { /** * Set it to false to hide the question toolbox on the left. */ get: function () { return this.koShowToolbox(); }, set: function (value) { this.koShowToolbox(value); }, enumerable: true, configurable: true }); Object.defineProperty(SurveyCreator.prototype, "hideAdvancedSettings", { /** * Set it to false to temporary hide the Property Grid on the right side of the creator. User will be able to show the Property Grid again via the click on the 'Advanced' label. It allows to edit the properties of the selected object (question/panel/page/survey). */ get: function () { return this.koHideAdvancedSettings(); }, set: function (value) { this.koHideAdvancedSettings(value); }, enumerable: true, configurable: true }); Object.defineProperty(SurveyCreator.prototype, "showJSONEditorTab", { /** * Set it to true to show "JSON Editor" tab and to false to hide the tab */ get: function () { return this.showJSONEditorTabValue(); }, set: function (value) { this.showJSONEditorTabValue(value); }, enumerable: true, configurable: true }); Object.defineProperty(SurveyCreator.prototype, "showTestSurveyTab", { /** * Set it to true to show "Test Survey" tab and to false to hide the tab */ get: function () { return this.showTestSurveyTabValue(); }, set: function (value) { this.showTestSurveyTabValue(value); }, enumerable: true, configurable: true }); Object.defineProperty(SurveyCreator.prototype, "showEmbededSurveyTab", { /** * Set it to true to show "Embed Survey" tab and to false to hide the tab */ get: function () { return this.showEmbededSurveyTabValue(); }, set: function (value) { this.showEmbededSurveyTabValue(value); }, enumerable: true, configurable: true }); Object.defineProperty(SurveyCreator.prototype, "showTranslationTab", { /** * Set it to true to show "Translation" tab and to false to hide the tab */ get: function () { return this.showTranslationTabValue(); }, set: function (value) { this.showTranslationTabValue(value); }, enumerable: true, configurable: true }); Object.defineProperty(SurveyCreator.prototype, "showLogicTab", { /** * Set it to true to show "Logic" tab and to false to hide the tab */ get: function () { return this.showLogicTabValue(); }, set: function (value) { this.showLogicTabValue(value); }, enumerable: true, configurable: true }); Object.defineProperty(SurveyCreator.prototype, "isRTL", { /** * Set it to true to activate RTL support */ get: function () { return this.isRTLValue; }, set: function (value) { this.isRTLValue = value; }, enumerable: true, configurable: true }); SurveyCreator.prototype.canShowObjectProperty = function (object, propertyName) { if (!object || !object.getType) { return true; } var property = __WEBPACK_IMPORTED_MODULE_16_survey_knockout__["Serializer"].findProperty(object.getType(), propertyName); return this.onCanShowObjectProperty(object, property); }; SurveyCreator.prototype.onCanShowObjectProperty = function (object, property) { var options = { obj: object, property: property, canShow: true }; this.onCanShowProperty.fire(this, options); return options.canShow; }; SurveyCreator.prototype.onCustomSortPropertyObjectProperty = function (object, property1, property2) { if (this.onCustomSortProperty.isEmpty) return 0; var options = { obj: object, property1: property1, property2: property2, result: 0 }; this.onCustomSortProperty.fire(this, options); return options.result; }; SurveyCreator.prototype.setTextValue = function (value) { this.jsonEditor.text = value; }; /** * Returns the localized string by it's id * @param str the string id. */ SurveyCreator.prototype.getLocString = function (str) { return __WEBPACK_IMPORTED_MODULE_2__editorLocalization__["a" /* editorLocalization */].getString(str); }; SurveyCreator.prototype.addPageToUI = function (page) { this.surveyObjects.addPage(page); }; SurveyCreator.prototype.doOnQuestionAdded = function (question, parentPanel) { if (!this.dragDropHelper.isMoving) { var page = this.getPageByElement(question); var options = { question: question, page: page }; this.onQuestionAdded.fire(this, options); } if (parentPanel.elements.indexOf(question) !== -1) { this.surveyObjects.addElement(question, parentPanel); } }; SurveyCreator.prototype.doOnElementRemoved = function (element) { this.surveyObjects.removeObject(element); }; SurveyCreator.prototype.doOnPanelAdded = function (panel, parentPanel) { if (!this.dragDropHelper.isMoving) { var page = this.getPageByElement(panel); var options = { panel: panel, page: page }; this.onPanelAdded.fire(this, options); } if (parentPanel.elements.indexOf(panel) !== -1) { this.surveyObjects.addElement(panel, parentPanel); } }; SurveyCreator.prototype.doOnPageAdded = function (page) { var options = { page: page }; this.onPageAdded.fire(this, options); }; SurveyCreator.prototype.onPropertyValueChanged = function (property, obj, newValue) { var oldValue = obj[property.name]; if (property.name === "page" && typeof newValue === "string") { obj[property.name] = obj.survey.getPageByName(newValue); } else { obj[property.name] = newValue; } if (property.name == "name") { var newName = this.generateUniqueName(obj, newValue); this.updateConditions(oldValue, newName); this.onElementNameChanged.fire(this, { obj: obj, oldName: oldValue, newName: newName }); if (newName != newValue) { return newName; } } if (property.name == "name" || property.name == "title") { this.surveyObjects.nameChanged(obj); } if (property.name === "name") { this.dirtyPageUpdate(); //TODO why this is need ? (ko problem) } else if (property.name === "page") { this.selectPage(newValue); this.surveyObjects.selectObject(obj); } this.setModified({ type: "PROPERTY_CHANGED", name: property.name, target: obj, oldValue: oldValue, newValue: newValue }); //TODO add a flag to a property, may change other properties if (property.name == "locale" || property.name == "hasComment" || property.name == "hasSelectAll" || property.name == "hasNone" || property.name == "hasOther") { this.selectedObjectEditorValue.objectChanged(); } return null; }; SurveyCreator.prototype.doUndoRedo = function (item) { this.initSurvey(item.surveyJSON); if (item.selectedObjName) { var selObj = this.findObjByName(item.selectedObjName); if (selObj) { this.surveyObjects.selectObject(selObj); } } this.setState("modified"); this.isAutoSave && this.doSave(); }; SurveyCreator.prototype.findObjByName = function (name) { var page = this.survey.getPageByName(name); if (page) return page; var question = this.survey.getQuestionByName(name); if (question) return question; return null; }; SurveyCreator.prototype.canSwitchViewType = function (newType) { if (newType && this.koViewType() == newType) return false; if (this.koViewType() == "designer") { this.jsonEditor.text = this.getSurveyTextFromDesigner(); } if ((this.koViewType() == "translation" || this.koViewType() == "logic") && newType == "designer") { this.survey.render(); } if (this.koViewType() != "editor") return true; if (!this.jsonEditor.isJsonCorrect) { alert(this.getLocString("ed.correctJSON")); return false; } if (!this.readOnly) { this.initSurvey(new __WEBPACK_IMPORTED_MODULE_16_survey_knockout__["JsonObject"]().toJsonObject(this.jsonEditor.survey)); this.setModified({ type: "VIEW_TYPE_CHANGED", newType: newType }); } return true; }; Object.defineProperty(SurveyCreator.prototype, "showingViewName", { /** * Returns the current show view name. The possible returns values are: * "designer", "editor", "test", "embed", "logic" and "translation". * @see showDesigner * @see showTestSurvey * @see showJsonEditor * @see showLogicEditor * @see showTranslationEditor * @see showEmbedEditor */ get: function () { return this.koViewType(); }, enumerable: true, configurable: true }); /** * Change the active view/tab. It will return false if it can't change the current tab. * @param viewName name of new active view (tab). The following values are available: "designer", "editor", "test", "embed" and "translation". */ SurveyCreator.prototype.makeNewViewActive = function (viewName) { if (!this.canSwitchViewType(viewName)) return false; if (viewName == "editor") { this.jsonEditor.show(this.getSurveyTextFromDesigner()); } if (viewName == "test") { this.showLiveSurvey(); } if (viewName == "embed") { this.showSurveyEmbeding(); } if (viewName == "translation") { this.showSurveyTranslation(); } this.koViewType(viewName); return true; }; /** * Make a "Survey Designer" tab active. */ SurveyCreator.prototype.showDesigner = function () { this.makeNewViewActive("designer"); }; /** * Make a "JSON Editor" tab active. */ SurveyCreator.prototype.showJsonEditor = function () { this.makeNewViewActive("editor"); }; /** * Make a "Test Survey" tab active. */ SurveyCreator.prototype.showTestSurvey = function () { this.makeNewViewActive("test"); }; /** * Make a "Embed Survey" tab active. */ SurveyCreator.prototype.showEmbedEditor = function () { this.makeNewViewActive("embed"); }; /** * Make a "Translation" tab active. */ SurveyCreator.prototype.showTranslationEditor = function () { this.makeNewViewActive("translation"); }; /** * Make a "Logic" tab active. */ SurveyCreator.prototype.showLogicEditor = function () { if (!this.canSwitchViewType("logic")) return; this.showSurveyLogic(); this.koViewType("logic"); }; SurveyCreator.prototype.getSurveyTextFromDesigner = function () { var json = this.survey.toJSON(); if (this.options && this.options.generateValidJSON) return JSON.stringify(json, null, 1); return new __WEBPACK_IMPORTED_MODULE_15__json5__["a" /* SurveyJSON5 */]().stringify(json, null, 1); }; SurveyCreator.prototype.getPageByElement = function (obj) { var page = this.survey.getPageByElement(obj); if (page) return page; return this.surveyObjects.getSelectedObjectPage(obj); }; Object.defineProperty(SurveyCreator.prototype, "selectedElement", { /** * Get or set the current selected object in the Creator. It can be a question, panel, page or survey itself. */ get: function () { return !!this.koSelectedObject() ? this.koSelectedObject().value : null; }, set: function (val) { this.surveyObjects.selectObject(val); }, enumerable: true, configurable: true }); SurveyCreator.prototype.selectedObjectChanged = function (obj) { var options = { newSelectedElement: obj }; this.onSelectedElementChanging.fire(this, options); if (obj != options.newSelectedElement) { this.surveyObjects.selectObject(options.newSelectedElement); return; } var canDeleteObject = false; this.selectedObjectEditorValue.selectedObject = obj; var objType = __WEBPACK_IMPORTED_MODULE_12__surveyHelper__["b" /* SurveyHelper */].getObjectType(obj); if (objType == __WEBPACK_IMPORTED_MODULE_12__surveyHelper__["a" /* ObjType */].Page) { this.survey.currentPage = obj; canDeleteObject = this.pages().length > 1; } if (objType == __WEBPACK_IMPORTED_MODULE_12__surveyHelper__["a" /* ObjType */].Question || objType == __WEBPACK_IMPORTED_MODULE_12__surveyHelper__["a" /* ObjType */].Panel) { this.survey.selectedElement = obj; canDeleteObject = true; this.survey.currentPage = this.getPageByElement(obj); var id = obj["id"]; if (this.renderedElement && id && this.survey.currentPage) { var el_1 = this.renderedElement.querySelector("#" + id); __WEBPACK_IMPORTED_MODULE_12__surveyHelper__["b" /* SurveyHelper */].scrollIntoViewIfNeeded(el_1); } } else { this.survey.selectedElement = null; } this.koCanDeleteObject(canDeleteObject); //Select2 work-around if (this.renderedElement && this.select2) { var el = (this.renderedElement.querySelector("#select2-objectSelector-container")); //TODO if (el) { var item = this.surveyObjects.koSelected(); if (item && item.text) { el.innerText = item.text(); } } } this.onSelectedElementChanged.fire(this, options); }; SurveyCreator.prototype.applyBinding = function () { var _this = this; if (this.renderedElement == null) return; __WEBPACK_IMPORTED_MODULE_1_knockout__["cleanNode"](this.renderedElement); __WEBPACK_IMPORTED_MODULE_1_knockout__["applyBindings"](this, this.renderedElement); this.surveyjs = (this.renderedElement.querySelector("#surveyjs")); if (this.surveyjs) { var self = this; this.surveyjs.onkeydown = function (e) { if (!e) return; // if (e.keyCode == 46) self.deleteQuestion(); if (e.keyCode == 38 || e.keyCode == 40) { self.selectQuestion(e.keyCode == 38); } }; } this.initSurvey(this.getDefaultSurveyJson()); this.setUndoRedoCurrentState(true); this.jsonEditor.init((this.renderedElement.querySelector("#surveyjsJSONEditor"))); if (typeof jQuery !== "undefined" && jQuery()["select2"]) { var options = { width: "100%" }; if (this.isRTLValue) { options.dir = "rtl"; } var $objectSelector = jQuery("#objectSelector"); this.select2 = $objectSelector["select2"](options); $objectSelector.on("select2:select", function (sel_evt) { _this.koSelectedObject(sel_evt.target.value); }); } }; SurveyCreator.prototype.getDefaultSurveyJson = function () { var json = new __WEBPACK_IMPORTED_MODULE_15__json5__["a" /* SurveyJSON5 */]().parse(SurveyCreator.defaultNewSurveyText); if (json["pages"] && json["pages"]["length"] > 0 && json["pages"][0]["name"]) { json["pages"][0]["name"] = __WEBPACK_IMPORTED_MODULE_2__editorLocalization__["a" /* editorLocalization */].getString("ed.newPageName") + "1"; } return json; }; SurveyCreator.prototype.createSurvey = function (json, reason, surveyType) { if (json === void 0) { json = {}; } if (reason === void 0) { reason = "designer"; } if (surveyType === void 0) { surveyType = __WEBPACK_IMPORTED_MODULE_16_survey_knockout__["Survey"]; } var survey = new surveyType(json); this.onSurveyInstanceCreated.fire(this, { survey: survey, reason: reason }); return survey; }; SurveyCreator.prototype.initSurvey = function (json) { var _this = this; var self = this; this.surveyValue((this.createSurvey({}, "designer", __WEBPACK_IMPORTED_MODULE_17__surveyjsObjects__["a" /* SurveyForDesigner */]))); this.dragDropHelper = new __WEBPACK_IMPORTED_MODULE_13__dragdrophelper__["a" /* DragDropHelper */](this.survey, function (options) { self.setModified(options); }, this.renderedElement); this.dragDropHelper.readOnly = this.readOnly; this.surveyValue().getEditor = function () { return self; }; this.surveyValue().setJsonObject(json); if (this.surveyValue().isEmpty) { this.surveyValue().setJsonObject(this.getDefaultSurveyJson()); } __WEBPACK_IMPORTED_MODULE_16_survey_knockout__["surveyLocalization"].currentLocale = this.surveyValue()["locale"]; this.surveyValue().dragDropHelper = this.dragDropHelper; this.surveyValue().onUpdateElementAllowingOptions = function (options) { self.onElementAllowOperations.fire(self, options); }; var afterRenderElementHandler = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_17__surveyjsObjects__["d" /* createAfterRenderHandler */])(this, this.surveyValue()); this.surveyValue().onAfterRenderQuestion.add(function (sender, options) { afterRenderElementHandler(options.htmlElement, options.question, false, true); }); this.surveyValue().onAfterRenderPanel.add(function (sender, options) { if (options.panel.getType() === "flowpanel") { afterRenderElementHandler(options.htmlElement, options.panel, true, options.panel.koIsDragging()); var pnlEl = options.htmlElement.querySelector("f-panel"); if (!!pnlEl) { if (!!pnlEl.className) { pnlEl.className += " svd_flowpanel"; } else { pnlEl.className = "svd_flowpanel"; } } } else { if (options.panel.elements.length == 0) { options.panel.emptyElement = addEmptyPanelElement(_this.surveyValue(), options.htmlElement, options.panel.dragDropHelper(), options.panel); } afterRenderElementHandler(options.htmlElement, options.panel, true, options.panel.koIsDragging()); } }); this.surveyValue().onDragDropAllow.add(function (sender, options) { options.survey = sender; self.onDragDropAllow.fire(self, options); }); this.surveyValue().onGetMenuItems.add(function (sender, options) { if (_this.readOnly) { return; } var opts = options.obj.allowingOptions; if (!opts) opts = {}; if (opts.allowEdit) { options.items.push({ name: "editelement", text: _this.getLocString("survey.edit"), hasTitle: true, onClick: function (question) { return _this.showQuestionEditor(question); } }); } if (opts.allowDelete) { var deleteLocaleName = options.obj.isPanel ? "survey.deletePanel" : "survey.deleteQuestion"; options.items.push({ name: "delete", text: self.getLocString(deleteLocaleName), onClick: function (selObj) { self.deleteObject(selObj); } }); } if (opts.allowShowHideTitle && typeof options.obj.titleLocation !== "undefined") { var isShowTitle = __WEBPACK_IMPORTED_MODULE_1_knockout__["observable"](options.obj.titleLocation !== "hidden"); options.items.push({ name: "showtitle", text: _this.getLocString("pe.showTitle"), icon: __WEBPACK_IMPORTED_MODULE_1_knockout__["computed"](function () { if (isShowTitle()) { return "icon-actionshowtitle"; } return "icon-actionhidetitle"; }), onClick: function (question) { if (question.titleLocation !== "hidden") { question.titleLocation = "hidden"; if (question.getType() === "boolean") { question["showTitle"] = false; } } else { question.titleLocation = "default"; if (question.getType() === "boolean") { question["showTitle"] = true; } } isShowTitle(question.titleLocation !== "hidden"); _this.onQuestionEditorChanged(question); } }); } if (opts.allowChangeRequired && typeof options.obj.isRequired !== "undefined") { var isRequired = __WEBPACK_IMPORTED_MODULE_1_knockout__["computed"](function () { return options.obj.isRequired; }); options.items.push({ name: "isrequired", text: _this.getLocString("pe.isRequired"), icon: __WEBPACK_IMPORTED_MODULE_1_knockout__["computed"](function () { if (isRequired()) { return "icon-actionisrequired"; } return "icon-actionnotrequired"; }), onClick: function (question) { question.isRequired = !question.isRequired; _this.onQuestionEditorChanged(question); } }); } if (options.items.length > 0) { options.items.push({ template: "action-separator" }); } if (opts.allowCopy) { options.items.push({ name: "copy", text: self.getLocString("survey.copy"), onClick: function (selObj) { self.fastCopyQuestion(selObj); } }); } if (opts.allowAddToToolbox) { options.items.push({ name: "addtotoolbox", text: self.getLocString("survey.addToToolbox"), onClick: function (selObj) { self.addCustomToolboxQuestion(selObj); } }); } if (opts.allowChangeType) { if (options.items.length > 0) { options.items.push({ template: "action-separator" }); } var currentType = options.obj.getType(); var convertClasses = __WEBPACK_IMPORTED_MODULE_7__questionconverter__["a" /* QuestionConverter */].getConvertToClasses(currentType, _this.toolbox.itemNames); var allowChangeType = convertClasses.length > 0; var createTypeByClass = function (className) { return { name: _this.getLocString("qt." + className), value: className }; }; var availableTypes = [createTypeByClass(currentType)]; for (var i = 0; i < convertClasses.length; i++) { var className = convertClasses[i]; availableTypes.push(createTypeByClass(className)); } options.items.push({ text: _this.getLocString("qt." + currentType), title: _this.getLocString("survey.convertTo"), type: currentType, allowChangeType: allowChangeType, template: "convert-action", availableTypes: availableTypes, onConvertType: function (data, event) { var newType = event.target.value; _this.convertCurrentObject(options.obj, newType); } }); } if (opts.allowDragging) { options.items.push({ name: "dragelement", needFocus: false, text: self.getLocString("survey.drag"), onClick: function (selObj) { } }); } self.onDefineElementMenuItems.fire(self, options); }); this.onDesignerSurveyCreated.fire(this, { survey: this.surveyValue() }); this.survey.render(this.surveyjs); this.surveyObjects.survey = this.survey; this.pages(this.survey.pages); this.surveyValue().onSelectedElementChanged.add(function (sender, options) { self.surveyObjects.selectObject(sender["selectedElement"]); }); this.surveyValue().onEditButtonClick.add(function (sender) { self.showQuestionEditor(self.koSelectedObject().value); }); this.surveyValue().onElementDoubleClick.add(function (sender, options) { self.onElementDoubleClick.fire(self, options); }); this.surveyValue().onProcessHtml.add(function (sender, options) { options.html = self.processHtml(options.html); }); this.surveyValue().onQuestionAdded.add(function (sender, options) { self.doOnQuestionAdded(options.question, options.parentPanel); }); this.surveyValue().onQuestionRemoved.add(function (sender, options) { self.doOnElementRemoved(options.question); }); this.surveyValue().onPanelAdded.add(function (sender, options) { self.doOnPanelAdded(options.panel, options.parentPanel); }); this.surveyValue().onPanelRemoved.add(function (sender, options) { self.doOnElementRemoved(options.panel); }); var pAdded = this.surveyValue()["onPageAdded"]; if (pAdded && pAdded.add) { pAdded.add(function (sender, options) { self.doOnPageAdded(options.page); }); } }; SurveyCreator.prototype.processHtml = function (html) { if (!html) return html; var scriptRegEx = /<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi; while (scriptRegEx.test(html)) { html = html.replace(scriptRegEx, ""); } return html; }; SurveyCreator.prototype.doDraggingToolboxItem = function (json, e) { this.dragDropHelper.startDragToolboxItem(e, this.getNewName(json["type"]), json); }; SurveyCreator.prototype.doClickToolboxItem = function (json) { if (!this.readOnly) { var newElement = this.createNewElement(json); this.doClickQuestionCore(newElement); } }; SurveyCreator.prototype.copyElement = function (element) { var json = new __WEBPACK_IMPORTED_MODULE_16_survey_knockout__["JsonObject"]().toJsonObject(element); json.type = element.getType(); return this.createNewElement(json); }; SurveyCreator.prototype.getRows = function (pnl) { return !!pnl["koRows"] ? pnl["koRows"]() : pnl.rows; }; SurveyCreator.prototype.dragOverQuestionsEditor = function (data, e) { data.survey.dragDropHelper.doDragDropOver(e, data.survey.currentPage); return false; }; SurveyCreator.prototype.dropOnQuestionsEditor = function (data, e) { data.survey.dragDropHelper.doDrop(e); }; SurveyCreator.prototype.createNewElement = function (json) { var newElement = __WEBPACK_IMPORTED_MODULE_16_survey_knockout__["Serializer"].createClass(json["type"]); new __WEBPACK_IMPORTED_MODULE_16_survey_knockout__["JsonObject"]().toObject(json, newElement); this.setNewNames(newElement); return newElement; }; SurveyCreator.prototype.setNewNames = function (element) { this.newQuestions = []; this.newPanels = []; this.setNewNamesCore(element); }; SurveyCreator.prototype.setNewNamesCore = function (element) { var elType = element["getType"](); element.name = this.getNewName(elType); if (element.isPanel || elType == "page") { if (element.isPanel) { this.newPanels.push(element); } var panel = element; for (var i = 0; i < panel.elements.length; i++) { this.setNewNamesCore(panel.elements[i]); } } else { this.newQuestions.push(element); } }; SurveyCreator.prototype.generateUniqueName = function (el, newName) { while (!this.isNameUnique(el, newName)) { newName = __WEBPACK_IMPORTED_MODULE_12__surveyHelper__["b" /* SurveyHelper */].generateNewName(newName); } return newName; }; SurveyCreator.prototype.isNameUnique = function (el, newName) { if (!this.isNameUniqueInArray(this.survey.pages, el, newName)) return false; if (!this.isNameUniqueInArray(this.survey.getAllPanels(), el, newName)) return false; return this.isNameUniqueInArray(this.survey.getAllQuestions(), el, newName); }; SurveyCreator.prototype.isNameUniqueInArray = function (elements, el, newName) { newName = newName.toLowerCase(); for (var i = 0; i < elements.length; i++) { if (elements[i] != el && elements[i].name.toLowerCase() == newName) return false; } return true; }; SurveyCreator.prototype.getNewName = function (type) { if (type == "page") return __WEBPACK_IMPORTED_MODULE_12__surveyHelper__["b" /* SurveyHelper */].getNewPageName(this.pages()); return type == "panel" || type == "flowpanel" ? this.getNewPanelName() : this.getNewQuestionName(); }; SurveyCreator.prototype.getNewQuestionName = function () { return __WEBPACK_IMPORTED_MODULE_12__surveyHelper__["b" /* SurveyHelper */].getNewQuestionName(this.getAllQuestions()); }; SurveyCreator.prototype.getNewPanelName = function () { return __WEBPACK_IMPORTED_MODULE_12__surveyHelper__["b" /* SurveyHelper */].getNewPanelName(this.getAllPanels()); }; SurveyCreator.prototype.getAllQuestions = function () { var result = []; for (var i = 0; i < this.pages().length; i++) { this.addElements(this.pages()[i].elements, false, result); } this.addElements(this.newPanels, false, result); this.addElements(this.newQuestions, false, result); return result; }; SurveyCreator.prototype.getAllPanels = function () { var result = []; for (var i = 0; i < this.pages().length; i++) { this.addElements(this.pages()[i].elements, true, result); } this.addElements(this.newPanels, true, result); this.addElements(this.newQuestions, true, result); return result; }; SurveyCreator.prototype.addElements = function (elements, isPanel, result) { for (var i = 0; i < elements.length; i++) { if (elements[i].isPanel === isPanel) { result.push(elements[i]); } this.addElements(__WEBPACK_IMPORTED_MODULE_12__surveyHelper__["b" /* SurveyHelper */].getElements(elements[i]), isPanel, result); } }; SurveyCreator.prototype.doClickQuestionCore = function (element, modifiedType) { if (modifiedType === void 0) { modifiedType = "ADDED_FROM_TOOLBOX"; } var parent = this.survey.currentPage; var index = -1; var elElement = this.survey.selectedElement; if (elElement && elElement.parent) { parent = elElement.parent; index = parent.elements.indexOf(this.survey.selectedElement); if (index > -1) index++; } parent.addElement(element, index); if (this.renderedElement && this.scrollToNewElement) { __WEBPACK_IMPORTED_MODULE_12__surveyHelper__["b" /* SurveyHelper */].scrollIntoViewIfNeeded(this.renderedElement.querySelector("#" + element["id"])); } this.setModified({ type: modifiedType, question: element }); }; SurveyCreator.prototype.deleteQuestion = function () { var question = this.getSelectedObjAsQuestion(); if (question) { this.deleteCurrentObject(); } }; SurveyCreator.prototype.selectQuestion = function (isUp) { var question = this.getSelectedObjAsQuestion(); if (question) { this.surveyObjects.selectNextQuestion(isUp); } }; SurveyCreator.prototype.getSelectedObjAsQuestion = function () { var obj = this.koSelectedObject().value; if (!obj) return null; return __WEBPACK_IMPORTED_MODULE_12__surveyHelper__["b" /* SurveyHelper */].getObjectType(obj) == __WEBPACK_IMPORTED_MODULE_12__surveyHelper__["a" /* ObjType */].Question ? obj : null; }; SurveyCreator.prototype.deleteCurrentObject = function () { this.deleteObject(this.koSelectedObject().value); }; SurveyCreator.prototype.editCurrentObject = function () { this.showQuestionEditor(this.koSelectedObject().value); }; SurveyCreator.prototype.convertCurrentObject = function (obj, className) { var newQuestion = __WEBPACK_IMPORTED_MODULE_7__questionconverter__["a" /* QuestionConverter */].convertObject(obj, className); this.setModified({ type: "QUESTION_CONVERTED", className: className, oldValue: obj, newValue: newQuestion }); }; /** * Show the creator dialog. The element can be a question, panel, page or survey * @param element The survey element */ SurveyCreator.prototype.showElementEditor = function (element, onClose) { this.showQuestionEditor(element, onClose); }; SurveyCreator.prototype.updateConditions = function (oldName, newName) { new __WEBPACK_IMPORTED_MODULE_21__logic__["a" /* SurveyLogic */](this.survey).renameQuestion(oldName, newName); }; SurveyCreator.prototype.onQuestionEditorChanged = function (question) { if (!!question.name && !this.isNameUnique(question, question.name)) { question.name = this.generateUniqueName(question, question.name); } if (!!this.showEditorOldName && !!question.name && this.showEditorOldName != question.name) { this.updateConditions(this.showEditorOldName, question.name); this.showEditorOldName = ""; } this.surveyObjects.nameChanged(question); this.selectedObjectEditorValue.objectChanged(); this.dirtyPageUpdate(); //TODO why this is need ? (ko problem) this.setModified({ type: "QUESTION_CHANGED_BY_EDITOR", question: question }); }; /** * Add a question into Toolbox object * @param question an added Survey.Question * @see toolbox */ SurveyCreator.prototype.addCustomToolboxQuestion = function (question) { var options = {}; this.onCustomElementAddingIntoToolbox.fire(this, { element: question, itemOptions: options }); this.toolbox.addCopiedItem(question, options); this.onCustomElementAddedIntoToolbox.fire(this, { element: question }); }; /** * Copy a question to the active page * @param question A copied Survey.Question */ SurveyCreator.prototype.fastCopyQuestion = function (question) { var newElement = this.copyElement(question); this.doClickQuestionCore(newElement, "ELEMENT_COPIED"); }; /** * Delete an element in the survey. It can be a question, a panel or a page. * @param element a survey element. */ SurveyCreator.prototype.deleteElement = function (element) { this.deleteObject(element); }; SurveyCreator.prototype.deleteObject = function (obj) { var options = { element: obj, elementType: __WEBPACK_IMPORTED_MODULE_12__surveyHelper__["b" /* SurveyHelper */].getObjectType(obj), allowing: true }; this.onElementDeleting.fire(this, options); if (!options.allowing) return; this.surveyObjects.removeObject(obj); var objType = __WEBPACK_IMPORTED_MODULE_12__surveyHelper__["b" /* SurveyHelper */].getObjectType(obj); if (objType == __WEBPACK_IMPORTED_MODULE_12__surveyHelper__["a" /* ObjType */].Page) { this.survey.removePage(obj); } else { this.survey.currentPage.removeElement(obj); this.survey.selectedElement = null; this.surveyObjects.selectObject(this.survey.currentPage); } this.setModified({ type: "OBJECT_DELETED", target: obj }); }; Object.defineProperty(SurveyCreator.prototype, "surveyLiveTester", { get: function () { return this.surveyLive; }, enumerable: true, configurable: true }); SurveyCreator.prototype.showLiveSurvey = function () { var self = this; this.surveyLive.onSurveyCreatedCallback = function (survey) { self.onTestSurveyCreated.fire(self, { survey: survey }); }; this.surveyLive.setJSON(this.getSurveyJSON()); var options = { showPagesInTestSurveyTab: this.showPagesInTestSurveyTab, showDefaultLanguageInTestSurveyTab: this .showDefaultLanguageInTestSurveyTab, showInvisibleElementsInTestSurveyTab: this .showInvisibleElementsInTestSurveyTab }; this.surveyLive.onGetObjectDisplayName = function (obj) { return self.getObjectDisplayName(obj); }; this.surveyLive.show(options); }; SurveyCreator.prototype.showSurveyEmbeding = function () { var json = this.getSurveyJSON(); this.surveyEmbeding.json = json; this.surveyEmbeding.surveyId = this.surveyId; this.surveyEmbeding.surveyPostId = this.surveyPostId; this.surveyEmbeding.generateValidJSON = this.options && this.options.generateValidJSON; this.surveyEmbeding.show(); }; SurveyCreator.prototype.showSurveyTranslation = function () { this.translation.survey = this.survey; }; SurveyCreator.prototype.showSurveyLogic = function () { this.logic.update(this.survey, this); }; SurveyCreator.prototype.getSurveyJSON = function () { if (this.koIsShowDesigner() || this.koViewType() == "translation" || this.koViewType() == "logic") return new __WEBPACK_IMPORTED_MODULE_16_survey_knockout__["JsonObject"]().toJsonObject(this.survey); if (this.jsonEditor.isJsonCorrect) return new __WEBPACK_IMPORTED_MODULE_16_survey_knockout__["JsonObject"]().toJsonObject(this.jsonEditor.survey); return null; }; SurveyCreator.prototype.createAnnotations = function (text, errors) { var annotations = new Array(); for (var i = 0; i < errors.length; i++) { var error = errors[i]; var annotation = { row: error.position.start.row, column: error.position.start.column, text: error.text, type: "error" }; annotations.push(annotation); } return annotations; }; SurveyCreator.prototype.getObjectDisplayName = function (obj) { var displayName = __WEBPACK_IMPORTED_MODULE_12__surveyHelper__["b" /* SurveyHelper */].getObjectName(obj, this.showObjectTitles); var options = { obj: obj, displayName: displayName }; this.onGetObjectDisplayName.fire(this, options); return options.displayName; }; Object.defineProperty(SurveyCreator.prototype, "alwaySaveTextInPropertyEditors", { //implements ISurveyObjectEditorOptions get: function () { return this.alwaySaveTextInPropertyEditorsValue; }, set: function (value) { this.alwaySaveTextInPropertyEditorsValue = value; }, enumerable: true, configurable: true }); Object.defineProperty(SurveyCreator.prototype, "showApplyButtonInEditors", { get: function () { return this.showApplyButtonValue; }, set: function (value) { this.showApplyButtonValue = value; }, enumerable: true, configurable: true }); SurveyCreator.prototype.onCanShowPropertyCallback = function (object, property) { return this.onCanShowObjectProperty(object, property); }; SurveyCreator.prototype.onIsEditorReadOnlyCallback = function (obj, editor, readOnly) { var proposedValue = this.readOnly || readOnly; if (this.onGetPropertyReadOnly.isEmpty) return proposedValue; var options = { obj: obj, property: editor.property, readOnly: proposedValue, propertyName: editor.property.name }; this.onGetPropertyReadOnly.fire(this, options); return options.readOnly; }; SurveyCreator.prototype.onItemValueAddedCallback = function (obj, propertyName, itemValue, itemValues) { var options = { obj: obj, propertyName: propertyName, newItem: itemValue, itemValues: itemValues }; this.onItemValueAdded.fire(this, options); }; SurveyCreator.prototype.onMatrixDropdownColumnAddedCallback = function (matrix, column, columns) { var options = { newColumn: column, matrix: matrix, columns: columns }; this.onMatrixColumnAdded.fire(this, options); }; SurveyCreator.prototype.onSetPropertyEditorOptionsCallback = function (propertyName, obj, editorOptions) { var options = { propertyName: propertyName, obj: obj, editorOptions: editorOptions }; this.onSetPropertyEditorOptions.fire(this, options); }; SurveyCreator.prototype.onGetErrorTextOnValidationCallback = function (propertyName, obj, value) { var options = { propertyName: propertyName, obj: obj, value: value, error: "" }; this.onPropertyValidationCustomError.fire(this, options); return options.error; }; SurveyCreator.prototype.onValueChangingCallback = function (options) { this.onPropertyValueChanging.fire(this, options); }; SurveyCreator.prototype.onPropertyEditorKeyDownCallback = function (propertyName, obj, editor, event) { var options = { propertyName: propertyName, obj: obj, editor: editor, event: event }; this.onPropertyEditorKeyDown.fire(this, options); }; SurveyCreator.prototype.onPropertyEditorObjectSetCallback = function (propertyName, obj, editor) { var options = { propertyName: propertyName, obj: obj, editor: editor }; this.onPropertyEditorObjectAssign.fire(this, options); }; SurveyCreator.prototype.onPropertyEditorModalShowDescriptionCallback = function (propertyName, obj) { var options = { obj: obj, propertyName: propertyName, htmlTop: "", htmlBottom: "" }; this.onShowPropertyModalEditorDescription.fire(this, options); var res = { top: options.htmlTop, bottom: options.htmlBottom }; return res; }; SurveyCreator.prototype.onGetElementEditorTitleCallback = function (obj, title) { return title; }; SurveyCreator.prototype.onConditionValueSurveyCreatedCallBack = function (valueQuestionName, propertyName, obj, editor, survey) { var options = { valueQuestionName: valueQuestionName, propertyName: propertyName, obj: obj, editor: editor, survey: survey }; this.onConditionValueSurveyCreated.fire(this, options); }; SurveyCreator.prototype.onConditionQuestionsGetListCallback = function (propertyName, obj, editor, list) { var options = { propertyName: propertyName, obj: obj, editor: editor, list: list }; this.onConditionQuestionsGetList.fire(this, options); }; SurveyCreator.prototype.onAdornerRenderedCallback = function (question, adorner, element, context) { var options = { survey: this.survey, question: question, adorner: adorner, element: element, context: context }; this.onAdornerRendered.fire(this, options); }; /** * Upload the files on a server * @param files files to upload * @param uploadingCallback a call back function to get the status on uploading the file and operation result - URI of the uploaded file */ SurveyCreator.prototype.uploadFiles = function (files, uploadingCallback) { if (this.onUploadFile.isEmpty) { var fileReader_1 = new FileReader(); fileReader_1.onload = function (e) { uploadingCallback("success", fileReader_1.result); }; fileReader_1.readAsDataURL(files[0]); } else { this.onUploadFile.fire(this, { files: files || [], callback: uploadingCallback }); } }; SurveyCreator.defaultNewSurveyText = "{ pages: [ { name: 'page1'}] }"; return SurveyCreator; }()); __WEBPACK_IMPORTED_MODULE_1_knockout__["components"].register("survey-widget", { viewModel: function (params) { this.survey = params.survey; }, template: "<!-- ko if: $data.survey --><!-- ko template: { name: 'survey-content', data: survey, afterRender: $parent.koEventAfterRender } --><!-- /ko --><!-- /ko -->" }); __WEBPACK_IMPORTED_MODULE_1_knockout__["components"].register("svg-icon", { viewModel: { createViewModel: function (params, componentInfo) { __WEBPACK_IMPORTED_MODULE_1_knockout__["computed"](function () { var size = (__WEBPACK_IMPORTED_MODULE_1_knockout__["unwrap"](params.size) || 16) + "px"; var svgElem = componentInfo.element.childNodes[0]; svgElem.style.width = size; svgElem.style.height = size; var node = svgElem.childNodes[0]; node.setAttributeNS("http://www.w3.org/1999/xlink", "xlink:href", "#" + __WEBPACK_IMPORTED_MODULE_1_knockout__["unwrap"](params.iconName)); }); } }, template: "<svg class='svd-svg-icon'><use></use></svg>" }); var SurveyEditor = /** @class */ (function (_super) { __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__["a" /* __extends */])(SurveyEditor, _super); function SurveyEditor(renderedElement, options) { if (renderedElement === void 0) { renderedElement = null; } if (options === void 0) { options = null; } return _super.call(this, renderedElement, options) || this; } return SurveyEditor; }(SurveyCreator)); function addEmptyPanelElement(survey, root, dragDropHelper, panel) { var eDiv = document.createElement("div"); eDiv.className = "well card card-block"; eDiv.ondragover = function (e) { dragDropHelper.doDragDropOver(e, panel); }; var eSpan = document.createElement("span"); eSpan.textContent = survey.getEditorLocString("survey.dropQuestion"); eDiv.appendChild(eSpan); root.appendChild(eDiv); return eDiv; } /***/ }), /* 25 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return SurveyJSON5; }); // This file is based on JSON5, http://json5.org/ // The modification for getting object and properties location 'at' were maden. var SurveyJSON5 = /** @class */ (function () { function SurveyJSON5(parseType) { if (parseType === void 0) { parseType = 0; } this.parseType = parseType; } SurveyJSON5.prototype.parse = function (source, reviver, startFrom, endAt) { if (reviver === void 0) { reviver = null; } if (startFrom === void 0) { startFrom = 0; } if (endAt === void 0) { endAt = -1; } var result; this.text = String(source); this.at = startFrom; this.endAt = endAt; this.ch = " "; result = this.value(); this.white(); if (this.ch) { this.error("Syntax error"); } // If there is a reviver function, we recursively walk the new structure, // passing each name/value pair to the reviver function for possible // transformation, starting with a temporary root object that holds the result // in an empty key. If there is not a reviver function, we simply return the // result. return typeof reviver === "function" ? (function walk(holder, key) { var k, v, value = holder[key]; if (value && typeof value === "object") { for (k in value) { if (Object.prototype.hasOwnProperty.call(value, k)) { v = walk(value, k); if (v !== undefined) { value[k] = v; } else { delete value[k]; } } } } return reviver.call(holder, key, value); })({ "": result }, "") : result; }; SurveyJSON5.prototype.error = function (m) { // Call error when something is wrong. var error = new SyntaxError(); error.message = m; error["at"] = this.at; throw error; }; SurveyJSON5.prototype.next = function (c) { if (c === void 0) { c = null; } // If a c parameter is provided, verify that it matches the current character. if (c && c !== this.ch) { this.error("Expected '" + c + "' instead of '" + this.ch + "'"); } // Get the this.next character. When there are no more characters, // return the empty string. this.ch = this.chartAt(); this.at += 1; return this.ch; }; SurveyJSON5.prototype.peek = function () { // Get the this.next character without consuming it or // assigning it to the this.ch varaible. return this.chartAt(); }; SurveyJSON5.prototype.chartAt = function () { if (this.endAt > -1 && this.at >= this.endAt) return ""; return this.text.charAt(this.at); }; SurveyJSON5.prototype.identifier = function () { // Parse an identifier. Normally, reserved words are disallowed here, but we // only use this for unquoted object keys, where reserved words are allowed, // so we don't check for those here. References: // - http://es5.github.com/#x7.6 // - https://developer.mozilla.org/en/Core_JavaScript_1.5_Guide/Core_Language_Features#Variables // - http://docstore.mik.ua/orelly/webprog/jscript/ch02_07.htm // TODO Identifiers can have Unicode "letters" in them; add support for those. var key = this.ch; // Identifiers must start with a letter, _ or $. if (this.ch !== "_" && this.ch !== "$" && (this.ch < "a" || this.ch > "z") && (this.ch < "A" || this.ch > "Z")) { this.error("Bad identifier"); } // Subsequent characters can contain digits. while (this.next() && (this.ch === "_" || this.ch === "$" || (this.ch >= "a" && this.ch <= "z") || (this.ch >= "A" && this.ch <= "Z") || (this.ch >= "0" && this.ch <= "9"))) { key += this.ch; } return key; }; SurveyJSON5.prototype.number = function () { // Parse a number value. var number, sign = "", string = "", base = 10; if (this.ch === "-" || this.ch === "+") { sign = this.ch; this.next(this.ch); } // support for Infinity (could tweak to allow other words): if (this.ch === "I") { number = this.word(); if (typeof number !== "number" || isNaN(number)) { this.error("Unexpected word for number"); } return sign === "-" ? -number : number; } // support for NaN if (this.ch === "N") { number = this.word(); if (!isNaN(number)) { this.error("expected word to be NaN"); } // ignore sign as -NaN also is NaN return number; } if (this.ch === "0") { string += this.ch; this.next(); if (this.ch === "x" || this.ch === "X") { string += this.ch; this.next(); base = 16; } else if (this.ch >= "0" && this.ch <= "9") { this.error("Octal literal"); } } switch (base) { case 10: while (this.ch >= "0" && this.ch <= "9") { string += this.ch; this.next(); } if (this.ch === ".") { string += "."; while (this.next() && this.ch >= "0" && this.ch <= "9") { string += this.ch; } } if (this.ch === "e" || this.ch === "E") { string += this.ch; this.next(); if (this.ch === "-" || this.ch === "+") { string += this.ch; this.next(); } while (this.ch >= "0" && this.ch <= "9") { string += this.ch; this.next(); } } break; case 16: while ((this.ch >= "0" && this.ch <= "9") || (this.ch >= "A" && this.ch <= "F") || (this.ch >= "a" && this.ch <= "f")) { string += this.ch; this.next(); } break; } if (sign === "-") { number = -string; } else { number = +string; } if (!isFinite(number)) { this.error("Bad number"); } else { return number; } }; SurveyJSON5.prototype.string = function () { // Parse a string value. var hex, i, string = "", delim, // double quote or single quote uffff; // When parsing for string values, we must look for ' or " and \ characters. if (this.ch === '"' || this.ch === "'") { delim = this.ch; while (this.next()) { if (this.ch === delim) { this.next(); return string; } else if (this.ch === "\\") { this.next(); if (this.ch === "u") { uffff = 0; for (i = 0; i < 4; i += 1) { hex = parseInt(this.next(), 16); if (!isFinite(hex)) { break; } uffff = uffff * 16 + hex; } string += String.fromCharCode(uffff); } else if (this.ch === "\r") { if (this.peek() === "\n") { this.next(); } } else if (typeof SurveyJSON5.escapee[this.ch] === "string") { string += SurveyJSON5.escapee[this.ch]; } else { break; } } else if (this.ch === "\n") { // unescaped newlines are invalid; see: // https://github.com/aseemk/json5/issues/24 // TODO this feels special-cased; are there other // invalid unescaped chars? break; } else { string += this.ch; } } } this.error("Bad string"); }; SurveyJSON5.prototype.inlineComment = function () { // Skip an inline comment, assuming this is one. The current character should // be the second / character in the // pair that begins this inline comment. // To finish the inline comment, we look for a newline or the end of the text. if (this.ch !== "/") { this.error("Not an inline comment"); } do { this.next(); if (this.ch === "\n" || this.ch === "\r") { this.next(); return; } } while (this.ch); }; SurveyJSON5.prototype.blockComment = function () { // Skip a block comment, assuming this is one. The current character should be // the * character in the /* pair that begins this block comment. // To finish the block comment, we look for an ending */ pair of characters, // but we also watch for the end of text before the comment is terminated. if (this.ch !== "*") { this.error("Not a block comment"); } do { this.next(); while (this.ch === "*") { this.next("*"); if (this.ch === "/") { this.next("/"); return; } } } while (this.ch); this.error("Unterminated block comment"); }; SurveyJSON5.prototype.comment = function () { // Skip a comment, whether inline or block-level, assuming this is one. // Comments always begin with a / character. if (this.ch !== "/") { this.error("Not a comment"); } this.next("/"); if (this.ch === "/") { this.inlineComment(); } else if (this.ch === "*") { this.blockComment(); } else { this.error("Unrecognized comment"); } }; SurveyJSON5.prototype.white = function () { // Skip whitespace and comments. // Note that we're detecting comments by only a single / character. // This works since regular expressions are not valid JSON(5), but this will // break if there are other valid values that begin with a / character! while (this.ch) { if (this.ch === "/") { this.comment(); } else if (SurveyJSON5.ws.indexOf(this.ch) >= 0) { this.next(); } else { return; } } }; SurveyJSON5.prototype.word = function () { // true, false, or null. switch (this.ch) { case "t": this.next("t"); this.next("r"); this.next("u"); this.next("e"); return true; case "f": this.next("f"); this.next("a"); this.next("l"); this.next("s"); this.next("e"); return false; case "n": this.next("n"); this.next("u"); this.next("l"); this.next("l"); return null; case "I": this.next("I"); this.next("n"); this.next("f"); this.next("i"); this.next("n"); this.next("i"); this.next("t"); this.next("y"); return Infinity; case "N": this.next("N"); this.next("a"); this.next("N"); return NaN; } this.error("Unexpected '" + this.ch + "'"); }; SurveyJSON5.prototype.array = function () { // Parse an array value. var array = []; if (this.ch === "[") { this.next("["); this.white(); while (this.ch) { if (this.ch === "]") { this.next("]"); return array; // Potentially empty array } // ES5 allows omitting elements in arrays, e.g. [,] and // [,null]. We don't allow this in JSON5. if (this.ch === ",") { this.error("Missing array element"); } else { array.push(this.value()); } this.white(); // If there's no comma after this value, this needs to // be the end of the array. if (this.ch !== ",") { this.next("]"); return array; } this.next(","); this.white(); } } this.error("Bad array"); }; SurveyJSON5.prototype.object = function () { // Parse an object value. var key, start, isFirstProperty = true, object = {}; if (this.parseType > 0) { object[SurveyJSON5.positionName] = { start: this.at - 1 }; } if (this.ch === "{") { this.next("{"); this.white(); start = this.at - 1; while (this.ch) { if (this.ch === "}") { if (this.parseType > 0) { object[SurveyJSON5.positionName].end = start; } this.next("}"); return object; // Potentially empty object } // Keys can be unquoted. If they are, they need to be // valid JS identifiers. if (this.ch === '"' || this.ch === "'") { key = this.string(); } else { key = this.identifier(); } this.white(); if (this.parseType > 1) { object[SurveyJSON5.positionName][key] = { start: start, valueStart: this.at }; } this.next(":"); object[key] = this.value(); if (this.parseType > 1) { start = this.at - 1; object[SurveyJSON5.positionName][key].valueEnd = start; object[SurveyJSON5.positionName][key].end = start; } this.white(); // If there's no comma after this pair, this needs to be // the end of the object. if (this.ch !== ",") { if (this.parseType > 1) { object[SurveyJSON5.positionName][key].valueEnd--; object[SurveyJSON5.positionName][key].end--; } if (this.parseType > 0) { object[SurveyJSON5.positionName].end = this.at - 1; } this.next("}"); return object; } if (this.parseType > 1) { object[SurveyJSON5.positionName][key].valueEnd--; if (!isFirstProperty) { object[SurveyJSON5.positionName][key].end--; } } this.next(","); this.white(); isFirstProperty = false; } } this.error("Bad object"); }; SurveyJSON5.prototype.value = function () { // Parse a JSON value. It could be an object, an array, a string, a number, // or a word. this.white(); switch (this.ch) { case "{": return this.object(); case "[": return this.array(); case '"': case "'": return this.string(); case "-": case "+": case ".": return this.number(); default: return this.ch >= "0" && this.ch <= "9" ? this.number() : this.word(); } }; SurveyJSON5.prototype.stringify = function (obj, replacer, space) { if (replacer === void 0) { replacer = null; } if (space === void 0) { space = null; } if (replacer && (typeof replacer !== "function" && !this.isArray(replacer))) { throw new Error("Replacer must be a function or an array"); } this.replacer = replacer; this.indentStr = this.getIndent(space); this.objStack = []; // special case...when undefined is used inside of // a compound object/array, return null. // but when top-level, return undefined var topLevelHolder = { "": obj }; if (obj === undefined) { return this.getReplacedValueOrUndefined(topLevelHolder, "", true); } return this.internalStringify(topLevelHolder, "", true); }; SurveyJSON5.prototype.getIndent = function (space) { if (space) { if (typeof space === "string") { return space; } else if (typeof space === "number" && space >= 0) { return this.makeIndent(" ", space, true); } } return ""; }; SurveyJSON5.prototype.getReplacedValueOrUndefined = function (holder, key, isTopLevel) { var value = holder[key]; // Replace the value with its toJSON value first, if possible if (value && value.toJSON && typeof value.toJSON === "function") { value = value.toJSON(); } // If the user-supplied replacer if a function, call it. If it's an array, check objects' string keys for // presence in the array (removing the key/value pair from the resulting JSON if the key is missing). if (typeof this.replacer === "function") { return this.replacer.call(holder, key, value); } else if (this.replacer) { if (isTopLevel || this.isArray(holder) || this.replacer.indexOf(key) >= 0) { return value; } else { return undefined; } } else { return value; } }; SurveyJSON5.prototype.isWordChar = function (char) { return ((char >= "a" && char <= "z") || (char >= "A" && char <= "Z") || (char >= "0" && char <= "9") || char === "_" || char === "$"); }; SurveyJSON5.prototype.isWordStart = function (char) { return ((char >= "a" && char <= "z") || (char >= "A" && char <= "Z") || char === "_" || char === "$"); }; SurveyJSON5.prototype.isWord = function (key) { if (typeof key !== "string") { return false; } if (!this.isWordStart(key[0])) { return false; } var i = 1, length = key.length; while (i < length) { if (!this.isWordChar(key[i])) { return false; } i++; } return true; }; // polyfills SurveyJSON5.prototype.isArray = function (obj) { if (Array.isArray) { return Array.isArray(obj); } else { return Object.prototype.toString.call(obj) === "[object Array]"; } }; SurveyJSON5.prototype.isDate = function (obj) { return Object.prototype.toString.call(obj) === "[object Date]"; }; SurveyJSON5.prototype.isNaN = function (val) { return typeof val === "number" && val !== val; }; SurveyJSON5.prototype.checkForCircular = function (obj) { for (var i = 0; i < this.objStack.length; i++) { if (this.objStack[i] === obj) { throw new TypeError("Converting circular structure to JSON"); } } }; SurveyJSON5.prototype.makeIndent = function (str, num, noNewLine) { if (noNewLine === void 0) { noNewLine = false; } if (!str) { return ""; } // indentation no more than 10 chars if (str.length > 10) { str = str.substring(0, 10); } var indent = noNewLine ? "" : "\n"; for (var i = 0; i < num; i++) { indent += str; } return indent; }; SurveyJSON5.prototype.escapeString = function (str) { // If the string contains no control characters, no quote characters, and no // backslash characters, then we can safely slap some quotes around it. // Otherwise we must also replace the offending characters with safe escape // sequences. SurveyJSON5.escapable.lastIndex = 0; return SurveyJSON5.escapable.test(str) ? '"' + str.replace(SurveyJSON5.escapable, function (a) { var c = SurveyJSON5.meta[a]; return typeof c === "string" ? c : "\\u" + ("0000" + a.charCodeAt(0).toString(16)).slice(-4); }) + '"' : '"' + str + '"'; }; // End SurveyJSON5.prototype.internalStringify = function (holder, key, isTopLevel) { var buffer, res; // Replace the value, if necessary var obj_part = this.getReplacedValueOrUndefined(holder, key, isTopLevel); if (obj_part && !this.isDate(obj_part)) { // unbox objects // don't unbox dates, since will turn it into number obj_part = obj_part.valueOf(); } switch (typeof obj_part) { case "boolean": return obj_part.toString(); case "number": if (isNaN(obj_part) || !isFinite(obj_part)) { return "null"; } return obj_part.toString(); case "string": return this.escapeString(obj_part.toString()); case "object": if (obj_part === null) { return "null"; } else if (this.isArray(obj_part)) { this.checkForCircular(obj_part); buffer = "["; this.objStack.push(obj_part); for (var i = 0; i < obj_part.length; i++) { res = this.internalStringify(obj_part, i, false); buffer += this.makeIndent(this.indentStr, this.objStack.length); if (res === null || typeof res === "undefined") { buffer += "null"; } else { buffer += res; } if (i < obj_part.length - 1) { buffer += ","; } else if (this.indentStr) { buffer += "\n"; } } this.objStack.pop(); buffer += this.makeIndent(this.indentStr, this.objStack.length, true) + "]"; } else { this.checkForCircular(obj_part); buffer = "{"; var nonEmpty = false; this.objStack.push(obj_part); for (var prop in obj_part) { if (obj_part.hasOwnProperty(prop)) { var value = this.internalStringify(obj_part, prop, false); isTopLevel = false; if (typeof value !== "undefined" && value !== null) { buffer += this.makeIndent(this.indentStr, this.objStack.length); nonEmpty = true; var propKey = this.isWord(prop) ? prop : this.escapeString(prop); buffer += propKey + ":" + (this.indentStr ? " " : "") + value + ","; } } } this.objStack.pop(); if (nonEmpty) { buffer = buffer.substring(0, buffer.length - 1) + this.makeIndent(this.indentStr, this.objStack.length) + "}"; } else { buffer = "{}"; } } return buffer; default: // functions and undefined should be ignored return undefined; } }; SurveyJSON5.positionName = "pos"; SurveyJSON5.escapee = { "'": "'", '"': '"', "\\": "\\", "/": "/", "\n": "", b: "\b", f: "\f", n: "\n", r: "\r", t: "\t" }; SurveyJSON5.ws = [" ", "\t", "\r", "\n", "\v", "\f", "\xA0", "\uFEFF"]; // Copied from Crokford's implementation of JSON // See https://github.com/douglascrockford/JSON-js/blob/e39db4b7e6249f04a195e7dd0840e610cc9e941e/json2.js#L195 // Begin SurveyJSON5.cx = /[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g; SurveyJSON5.escapable = /[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g; SurveyJSON5.meta = { // table of character substitutions "\b": "\\b", "\t": "\\t", "\n": "\\n", "\f": "\\f", "\r": "\\r", '"': '\\"', "\\": "\\\\" }; return SurveyJSON5; }()); /***/ }), /* 26 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_knockout__ = __webpack_require__(1); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_knockout___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_knockout__); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__surveyjsObjects__ = __webpack_require__(6); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__editorLocalization__ = __webpack_require__(0); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__question_actions_scss__ = __webpack_require__(86); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__question_actions_scss___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_3__question_actions_scss__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return QuestionActionsAdorner; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return questionActionsAdorner; }); /* unused harmony export panelActionsAdorner */ var templateHtml = __webpack_require__(138); var QuestionActionsAdorner = /** @class */ (function () { function QuestionActionsAdorner(question, editor) { this.question = question; this.editor = editor; this.actions = __WEBPACK_IMPORTED_MODULE_0_knockout__["observableArray"](); var surveyForDesigner = editor.survey; this.actions(surveyForDesigner.getMenuItems(question)); } QuestionActionsAdorner.prototype.getStyle = function (model) { if (!!model.icon) { return __WEBPACK_IMPORTED_MODULE_0_knockout__["unwrap"](model.icon); } return "icon-action" + model.name; }; QuestionActionsAdorner.prototype.localize = function (entryString) { return __WEBPACK_IMPORTED_MODULE_2__editorLocalization__["a" /* editorLocalization */].getString(entryString); }; return QuestionActionsAdorner; }()); __WEBPACK_IMPORTED_MODULE_0_knockout__["components"].register("question-actions", { viewModel: { createViewModel: function (params, componentInfo) { var model = new QuestionActionsAdorner(params.question, params.editor); return model; } }, template: templateHtml }); var questionActionsAdorner = { getMarkerClass: function (model) { return !model.isPanel ? "question_actions" : ""; }, getElementName: function (model) { return "mainRoot"; }, afterRender: function (elements, model, editor) { var decoration = document.createElement("div"); decoration.className = "svda-question-actions"; decoration.innerHTML = "<question-actions params='question: model, editor: editor'></question-actions>"; elements[0].appendChild(decoration); __WEBPACK_IMPORTED_MODULE_0_knockout__["applyBindings"]({ model: model, editor: editor }, decoration); __WEBPACK_IMPORTED_MODULE_0_knockout__["tasks"].runEarly(); editor.onAdornerRenderedCallback(model, "question-actions", decoration); } }; __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__surveyjsObjects__["b" /* registerAdorner */])("question-actions", questionActionsAdorner); var panelActionsAdorner = { getMarkerClass: function (model) { return !!model.isPanel && !!model.parent && model.getType() !== "flowpanel" ? "panel_actions" : ""; }, getElementName: function (model) { return "container"; }, afterRender: questionActionsAdorner.afterRender }; __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__surveyjsObjects__["b" /* registerAdorner */])("panel-actions", panelActionsAdorner); /***/ }), /* 27 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_knockout__ = __webpack_require__(1); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_knockout___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_knockout__); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_survey_knockout__ = __webpack_require__(2); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_survey_knockout___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_survey_knockout__); /* unused harmony export DragDropTargetElement */ /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return DragDropHelper; }); if (!!__WEBPACK_IMPORTED_MODULE_0_knockout__["options"]) { __WEBPACK_IMPORTED_MODULE_0_knockout__["options"].useOnlyNativeEvents = true; } var DragDropTargetElement = /** @class */ (function () { function DragDropTargetElement(page, target, source, nestedPanelDepth) { if (nestedPanelDepth === void 0) { nestedPanelDepth = -1; } this.page = page; this.target = target; this.source = source; page.dragDropStart(source, target, nestedPanelDepth); } DragDropTargetElement.prototype.moveTo = function (destination, isBottom, isEdge) { if (isEdge === void 0) { isEdge = false; } //console.log(!!destination ? destination.name : "null"); return this.page.dragDropMoveTo(destination, isBottom, isEdge); }; DragDropTargetElement.prototype.doDrop = function () { this.clearCore(); return this.page.dragDropFinish(); }; DragDropTargetElement.prototype.clear = function () { this.clearCore(); this.page.dragDropFinish(true); }; DragDropTargetElement.prototype.clearCore = function () { if (!!this.target) { this.target["koIsDragging"](false); } }; return DragDropTargetElement; }()); var DragDropHelper = /** @class */ (function () { function DragDropHelper(data, onModifiedCallback, parent) { if (parent === void 0) { parent = null; } this.data = data; this.scrollableElement = null; this.ddTarget = null; this.id = DragDropHelper.counter++; this.isScrollStop = true; this.readOnly = false; this.onModifiedCallback = onModifiedCallback; this.scrollableElement = parent && parent.querySelector("#scrollableDiv"); this.prevCoordinates = { x: -1, y: -1 }; } DragDropHelper.prototype.attachToElement = function (domElement, surveyElement) { var isFlowPanel = surveyElement.isPanel && typeof surveyElement.getChildrenLayoutType === "function" && surveyElement.getChildrenLayoutType() === "flow"; var isFlowPanelInChrome = isFlowPanel && !!window["chrome"]; domElement.style.opacity = surveyElement.koIsDragging() ? 0.4 : 1; domElement.draggable = surveyElement.allowingOptions.allowDragging && !isFlowPanel; if (isFlowPanelInChrome) { domElement.onpaste = function doPaste(e, el) { e.preventDefault(); var clipData = window["clipboardData"]; if (!!clipData) { var content = clipData.getData("text"); if (window.getSelection) { var selObj = window.getSelection(); var selRange = selObj.getRangeAt(0); selRange.deleteContents(); selRange.insertNode(document.createTextNode(content)); } } else if ((e.originalEvent || e).clipboardData) { content = (e.originalEvent || e).clipboardData.getData("text/plain"); document.execCommand("insertText", false, content); } return true; }; } domElement.ondragover = function (e) { if (!surveyElement.allowingOptions.allowDragging) return false; if (isFlowPanel) return surveyElement .dragDropHelper() .doDragDropOverFlow(e, surveyElement); if (!e["markEvent"]) { e["markEvent"] = true; surveyElement.dragDropHelper().doDragDropOver(e, surveyElement, true); return false; } }; domElement.ondrop = function (e) { var helper = surveyElement.dragDropHelper(); var preventDefault = !(isFlowPanel && !!helper.ddTarget && !!helper.ddTarget.source && helper.ddTarget.source.parent == surveyElement); //Fix the bug for chrome in contenteditable if (isFlowPanelInChrome && (!helper.ddTarget || !helper.ddTarget.destination || helper.ddTarget.destination.isLayoutTypeSupported("flow"))) { var content = e.dataTransfer.getData("text"); var dropRange = null; if (!!document.caretRangeFromPoint) { dropRange = document.caretRangeFromPoint(e.clientX, e.clientY); } else { if (!!document.caretPositionFromPoint) { dropRange = document.caretPositionFromPoint(e.clientX, e.clientY); } } if (!!dropRange) { preventDefault = true; e.preventDefault(); if (surveyElement["isDragStarted"]) { var selObj = window.getSelection(); if (!!selObj && selObj.rangeCount > 0) { var selRange = selObj.getRangeAt(0); if (!!selRange) { selRange.deleteContents(); } } } dropRange.insertNode(document.createTextNode(content)); var selection = window.getSelection(); if (!!selection) { selection.removeAllRanges(); selection.addRange(dropRange); } } } if (!e["markEvent"]) { e["markEvent"] = true; helper.doDrop(e, preventDefault); } }; if (!isFlowPanel) { domElement.ondragstart = function (e) { var target = e.target || e.srcElement; if (!!target && !!target.contains && target.contains(document.activeElement)) { e.preventDefault(); return false; } if (!surveyElement.allowingOptions.allowDragging) return false; if (!e["markEvent"]) { e["markEvent"] = true; surveyElement.dragDropHelper().startDragQuestion(e, surveyElement); } e.cancelBubble = true; }; } else { domElement.ondragstart = function (e) { surveyElement.isDragStarted = true; if (!e["markEvent"]) { e["markEvent"] = true; if (!surveyElement.dragDropHelper().getData(e).text) { surveyElement.dragDropHelper().startDragQuestion(e, surveyElement); } } }; } domElement.ondragend = function (e) { delete surveyElement["isDragStarted"]; surveyElement.dragDropHelper().end(); }; }; Object.defineProperty(DragDropHelper.prototype, "survey", { get: function () { return this.data; }, enumerable: true, configurable: true }); DragDropHelper.prototype.startDragQuestion = function (event, element) { var json = new __WEBPACK_IMPORTED_MODULE_1_survey_knockout__["JsonObject"]().toJsonObject(element); json["type"] = element.getType(); this.prepareData(event, element.name, json, element); }; DragDropHelper.prototype.startDragToolboxItem = function (event, elementName, elementJson) { this.prepareData(event, elementName, elementJson, null); event.cancelBubble = true; }; DragDropHelper.prototype.isSurveyDragging = function (event) { if (!event) return false; var data = this.getData(event).text; return data && data.indexOf(DragDropHelper.dataStart) == 0; }; DragDropHelper.prototype.doDragDropOver = function (event, element, isEdge) { if (isEdge === void 0) { isEdge = false; } event = this.isCanDragContinue(event, element); if (!event) return; var bottomInfo = this.isBottom(event); if (element.isPage && element.elements.length > 0) { var lastEl = element.elements[element.elements.length - 1]; if (!this.isBottomThanElement(event, lastEl)) return; element = lastEl; bottomInfo.isEdge = true; bottomInfo.isBottom = true; } isEdge = element.isPanel ? isEdge && bottomInfo.isEdge : true; if (element.isPanel && !isEdge && element.elements.length > 0) return; this.ddTarget.moveTo(element, bottomInfo.isBottom, isEdge); }; DragDropHelper.prototype.doDragDropOverFlow = function (event, element) { if (!!this.ddTarget) { event = this.isCanDragContinue(event, element); if (!event) return true; var bottomInfo = this.isBottom(event); return this.ddTarget.moveTo(element, bottomInfo.isBottom, bottomInfo.isEdge); } return true; }; DragDropHelper.prototype.isCanDragContinue = function (event, element) { event = this.getEvent(event); if (this.isSameCoordinates(event)) return null; this.checkScrollY(event); if (!element || !this.isSurveyDragging(event) || this.isSamePlace(event, element)) return null; return event; }; DragDropHelper.prototype.end = function () { if (this.ddTarget) { this.ddTarget.clear(); } this.isScrollStop = true; this.clearData(); }; Object.defineProperty(DragDropHelper.prototype, "isMoving", { get: function () { return this.ddTarget && this.ddTarget.source; }, enumerable: true, configurable: true }); DragDropHelper.prototype.doDrop = function (event, prevedDefault) { if (prevedDefault === void 0) { prevedDefault = true; } if (event.stopPropagation) { event.stopPropagation(); } if (this.isSurveyDragging(event)) { if (prevedDefault) { event.preventDefault(); } if (!this.readOnly) { var newElement = this.ddTarget.doDrop(); if (this.onModifiedCallback) this.onModifiedCallback({ type: "DO_DROP", page: this.ddTarget.page, source: this.ddTarget.source, target: this.ddTarget.target, newElement: this.ddTarget.source ? null : newElement, moveToParent: newElement.parent, moveToIndex: !!newElement.parent ? newElement.parent.elements.indexOf(newElement) : -1 }); } } this.end(); }; DragDropHelper.prototype.doLeavePage = function (event) { if (!!this.ddTarget) { this.ddTarget.moveTo(null, false); } }; DragDropHelper.prototype.createTargetElement = function (elementName, json) { if (!elementName || !json) return null; var targetElement = null; targetElement = __WEBPACK_IMPORTED_MODULE_1_survey_knockout__["Serializer"].createClass(json["type"]); new __WEBPACK_IMPORTED_MODULE_1_survey_knockout__["JsonObject"]().toObject(json, targetElement); targetElement.name = elementName; if (targetElement["setSurveyImpl"]) { targetElement["setSurveyImpl"](this.survey); } else { targetElement["setData"](this.survey); } targetElement.renderWidth = "100%"; targetElement["koIsDragging"](true); return targetElement; }; DragDropHelper.prototype.isBottom = function (event) { event = this.getEvent(event); var height = event.currentTarget["clientHeight"]; var y = event.offsetY; if (event.hasOwnProperty("layerX")) { y = event["layerY"] - event.currentTarget["offsetTop"]; } return { isBottom: y > height / 2, isEdge: y <= DragDropHelper.edgeHeight || height - y <= DragDropHelper.edgeHeight }; }; DragDropHelper.prototype.isBottomThanElement = function (event, lastEl) { var el = lastEl.renderedElement; if (!el) return false; event = this.getEvent(event); var elY = el.offsetTop + el.clientHeight; var y = event.offsetY; if (event.hasOwnProperty("layerX")) { y = event["layerY"] - event.currentTarget["offsetTop"]; } return y > elY; }; DragDropHelper.prototype.isSameCoordinates = function (event) { var res = Math.abs(event.pageX - this.prevCoordinates.x) > 5 || Math.abs(event.pageY - this.prevCoordinates.y) > 5; if (res) { this.prevCoordinates.x = event.pageX; this.prevCoordinates.y = event.pageY; } return !res; }; DragDropHelper.prototype.isSamePlace = function (event, element) { var prev = DragDropHelper.prevEvent; if (prev.element != element || Math.abs(event.clientX - prev.x) > 5 || Math.abs(event.clientY - prev.y) > 5) { prev.element = element; prev.x = event.clientX; prev.y = event.clientY; return false; } return true; }; DragDropHelper.prototype.checkScrollY = function (e) { if (!this.scrollableElement) return; var y = this.getScrollableElementPosY(e); if (y < 0) return; this.isScrollStop = true; var height = this.scrollableElement["clientHeight"]; if (y < DragDropHelper.ScrollOffset && y >= 0) { this.isScrollStop = false; this.doScrollY(-1); } if (height - y < DragDropHelper.ScrollOffset && height >= y) { this.isScrollStop = false; this.doScrollY(1); } }; DragDropHelper.prototype.doScrollY = function (step) { var el = this.scrollableElement; var scrollY = el.scrollTop + step; if (scrollY < 0) { this.isScrollStop = true; return; } el.scrollTop = scrollY; var self = this; if (!this.isScrollStop) { setTimeout(function () { self.doScrollY(step); }, DragDropHelper.ScrollDelay); } }; DragDropHelper.prototype.getScrollableElementPosY = function (e) { if (!this.scrollableElement || !e.currentTarget) return -1; var el = e.currentTarget; var offsetTop = 0; while (el && el != this.scrollableElement) { offsetTop += el["offsetTop"]; el = el["offsetParent"]; } return (e.offsetY + e.currentTarget["offsetTop"] - this.scrollableElement.offsetTop - this.scrollableElement.scrollTop); }; DragDropHelper.prototype.getEvent = function (event) { return event["originalEvent"] ? event["originalEvent"] : event; }; DragDropHelper.prototype.getY = function (element) { var result = 0; while (element) { result += element.offsetTop - element.scrollTop + element.clientTop; element = element.offsetParent; } return result; }; DragDropHelper.prototype.prepareData = function (event, elementName, json, source) { var str = DragDropHelper.dataStart + elementName + "}"; this.setData(event, str); var targetElement = this.createTargetElement(elementName, json); this.ddTarget = new DragDropTargetElement(this.survey.currentPage, targetElement, source, DragDropHelper.nestedPanelDepth); }; DragDropHelper.prototype.setData = function (event, text) { if (event["originalEvent"]) { event = event["originalEvent"]; } if (event.dataTransfer) { event.dataTransfer.setData("Text", text); event.dataTransfer.effectAllowed = "copy"; } DragDropHelper.dragData = { text: text }; }; DragDropHelper.prototype.getData = function (event) { if (event["originalEvent"]) { event = event["originalEvent"]; } if (event.dataTransfer) { var text = event.dataTransfer.getData("Text"); if (text) { DragDropHelper.dragData.text = text; } } return DragDropHelper.dragData; }; DragDropHelper.prototype.clearData = function () { this.ddTarget = null; // We should reset ddTarget to null due to the https://surveyjs.answerdesk.io/ticket/details/T1003 - onQuestionAdded not fired after D&D DragDropHelper.dragData = { text: "", json: null }; var prev = DragDropHelper.prevEvent; prev.element = null; prev.x = -1; prev.y = -1; this.prevCoordinates.x = -1; this.prevCoordinates.y = -1; }; DragDropHelper.edgeHeight = 20; DragDropHelper.nestedPanelDepth = -1; DragDropHelper.dataStart = "{element:"; DragDropHelper.dragData = { text: "", json: null }; DragDropHelper.prevEvent = { element: null, x: -1, y: -1 }; DragDropHelper.counter = 1; DragDropHelper.ScrollDelay = 30; DragDropHelper.ScrollOffset = 100; return DragDropHelper; }()); /***/ }), /* 28 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return enStrings; }); //Uncomment this line on creating a translation file //import { editorLocalization, defaultStrings } from "../editorLocalization"; var enStrings = { //survey templates survey: { edit: "Edit", externalHelpLink: "Watch and learn how to create surveys", externalHelpLinkUrl: "https://www.youtube.com/channel/UCH2ru9okIcooNZfpIbyq4qQ?view_as=subscriber", dropQuestion: "Please drop a question here from the Toolbox on the left.", copy: "Copy", addToToolbox: "Add to toolbox", deletePanel: "Delete Panel", deleteQuestion: "Delete Question", convertTo: "Convert to", drag: "Drag element" }, //questionTypes qt: { default: "Default", checkbox: "Checkbox", comment: "Comment", imagepicker: "Image picker", dropdown: "Dropdown", file: "File", html: "Html", matrix: "Matrix (single choice)", matrixdropdown: "Matrix (multiple choice)", matrixdynamic: "Matrix (dynamic rows)", multipletext: "Multiple Text", panel: "Panel", paneldynamic: "Panel (dynamic panels)", radiogroup: "Radiogroup", rating: "Rating", text: "Single Input", boolean: "Boolean", expression: "Expression (read-only)", flowpanel: "Flow Panel" }, //Strings in Editor ed: { defaultLocale: "Default ({0})", survey: "Survey", settings: "Survey Settings", opjectPropertiesHeader: "Advanced", showObjectProperties: "Show Object Properties", hideObjectProperties: "Hide Object Properties", editSurvey: "Edit Survey", addNewPage: "Add New Page", moveRight: "Scroll to the Right", moveLeft: "Scroll to the Left", deletePage: "Delete Page", editPage: "Edit Page", edit: "Edit", newPageName: "page", newQuestionName: "question", newPanelName: "panel", newTextItemName: "text", testSurvey: "Test Survey", testSurveyAgain: "Test Survey Again", testSurveyWidth: "Survey width: ", logic: "Survey Logic", embedSurvey: "Embed Survey", translation: "Translation", saveSurvey: "Save Survey", designer: "Survey Designer", jsonEditor: "JSON Editor", undo: "Undo", redo: "Redo", options: "Options", generateValidJSON: "Generate Valid JSON", generateReadableJSON: "Generate Readable JSON", toolbox: "Toolbox", toolboxGeneralCategory: "General", delSelObject: "Delete selected object", editSelObject: "Edit selected object", correctJSON: "Please correct JSON.", surveyResults: "Survey Result: ", surveyResultsTable: "As Table", surveyResultsJson: "As JSON", resultsTitle: "Question Title", resultsName: "Question Name", resultsValue: "Answer Value", resultsDisplayValue: "Display Value", modified: "Modified", saving: "Saving", saved: "Saved", saveError: "Error! Editor content is not saved.", translationAddLanguage: "Select language to translate", translationShowAllStrings: "Show all strings", translationShowAllPages: "Show all pages", translationNoStrings: "No strings to translate. Please, change the filter.", translationExportToSCVButton: "Export to CSV", translationImportFromSCVButton: "Import from CSV", translationMergeLocaleWithDefault: "Merge {0} with default locale", bold: "Bold", italic: "Italic", underline: "Underline", fpAddQuestion: "Add question...", completedHtmlOnConditionItemText: "Show if:", lg: { //Logic tab strings page_visibilityName: "Page visibility", panel_visibilityName: "Panel visibility", panel_enableName: "Panel enable/disable", question_visibilityName: "Question visibility", question_enableName: "Question enable/disable", question_requireName: "Question optional required", trigger_completeName: "Complete survey", trigger_setvalueName: "Set question value", trigger_copyvalueName: "Copy question value", trigger_skipName: "Skip to question", trigger_runExpressionName: "Run custom expression", completedHtmlOnConditionName: "Custom 'Thank you page' text", page_visibilityDescription: "Make the page visible when the logic expression returns true. Otherwise keep it invisible.", panel_visibilityDescription: "Make the panel visible when the logic expression returns true. Otherwise keep it invisible.", panel_enableDescription: "Make the panel, and all elements inside it, enable when the logic expression returns true. Otherwise keep them disabled.", question_visibilityDescription: "Make the question visible when the logic expression returns true. Otherwise keep it invisible.", question_enableDescription: "Make the question enable when the logic expression returns true. Otherwise keep it disabled.", question_requireDescription: "Question becomes required when the logic expression returns true.", trigger_completeDescription: "When the logic expression returns true then the survey becomes completed and an end-user see the 'Thank you page'.", trigger_setvalueDescription: "When question values, that are used in the logic expression, are changed and the logic expression returns true, then the value is set to the selected question.", trigger_copyvalueDescription: "When question values, that are used in the logic expression, are changed and the logic expression returns true, then the value of one selected question is copied to another selected question.", trigger_skipDescription: "When the logic expression returns true then the survey skip to / focus the selected question.", trigger_runExpressionDescription: "When the logic expression returns true, then the custom expression is performed. You may optionally set this expression result into the selected question", completedHtmlOnConditionDescription: "If the logic expression returns true, then the default text for the 'Thank you page' is changed to the given one.", itemExpressionText: "When expression: '{0}' returns true:", page_visibilityText: "Make page {0} visible", panel_visibilityText: "Make panel {0} visible", panel_enableText: "Make panel {0} enable", question_visibilityText: "Make question {0} visible", question_enableText: "Make question {0} enable", question_requireText: "Make question {0} required", trigger_completeText: "Survey becomes completed", trigger_setvalueText: "Set into question: {0} value {1}", trigger_copyvalueText: "Copy into question: {0} value from question {1}", trigger_skipText: "Survey skip to the question {0}", trigger_runExpressionText1: "Run expression: '{0}'", trigger_runExpressionText2: " and set it's result into question: {0}", completedHtmlOnConditionText: "Show custom text for the 'Thank you page'.", expressionEditorTitle: "Setup the logic expression", deleteOperation: "Delete operation", addNewOperation: "Add New Operation(s)", expressionInvalid: "The logic expression is empty or invalid. Please correct it.", noOperationError: "Please, add at least one operation.", operationInvalid: "Please, fix problems in your operation(s)." } }, //Property names in table headers pel: { isRequired: "Required?" }, //Property Editors pe: { apply: "Apply", ok: "OK", save: "Save", cancel: "Cancel", reset: "Reset", close: "Close", delete: "Delete", add: "Add", addNew: "Add New", addItem: "Click to add an item...", addOther: "Other", addSelectAll: "Select All", addNone: "None", removeAll: "Remove All", edit: "Edit", back: "Return without saving", saveAndBack: "Save and return", itemValueEdit: "Visible If", editChoices: "Edit Choices", move: "Move", empty: "<empty>", notEmpty: "<edit value>", fastEntry: "Fast Entry", formEntry: "Form Entry", testService: "Test the service", itemSelectorEmpty: "Please select the element", conditionSelectQuestion: "Select question...", conditionSelectPage: "Select page...", conditionSelectPanel: "Select panel...", conditionValueQuestionTitle: "Please enter/select the value", conditionButtonAdd: "Add", conditionButtonReplace: "Replace", conditionHelp: "Please enter a boolean expression. It should return true to keep the question/page visible. For example: {question1} = 'value1' or ({question2} * {question4} > 20 and {question3} < 5)", expressionHelp: "Please enter an expression. You may use curly brackets to get access to the question values: '{question1} + {question2}', '({price}*{quantity}) * (100 - {discount})'", aceEditorHelp: "Press ctrl+space to get expression completion hint", aceEditorRowTitle: "Current row", aceEditorPanelTitle: "Current panel", showMore: "For more details please check the documentation", conditionShowMoreUrl: "https://surveyjs.io/Documentation/LibraryParameter?id=Question¶meter=visibleIf", assistantTitle: "Available questions:", cellsEmptyRowsColumns: "There is should be at least one column or row", propertyIsEmpty: "Please enter a value", value: "Value", text: "Text", rowid: "Row ID", imageLink: "Image Link", columnEdit: "Edit column: {0}", itemEdit: "Edit item: {0}", url: "URL", path: "Path", valueName: "Value name", titleName: "Title name", hasOther: "Has other item", otherText: "Other item text", hasNone: "Has none item", noneText: "None item text", hasSelectAll: "Has select all item", selectAllText: "Select all item text", choicesMin: "Minimum value for auto generated items", choicesMax: "Maximum value for auto generated items", choicesStep: "The difference between auto generated items", name: "Name", title: "Title", cellType: "Cell type", colCount: "Column count", choicesOrder: "Select choices order", visible: "Is visible?", isRequired: "Is required?", isAllRowRequired: "Require answer for all rows", requiredErrorText: "Required error text", startWithNewLine: "Is start with new line?", rows: "Row count", placeHolder: "Input place holder", showPreview: "Is image preview shown?", storeDataAsText: "Store file content in JSON result as text", maxSize: "Maximum file size in bytes", imageHeight: "Image height", imageWidth: "Image width", rowCount: "Row count", columnLayout: "Columns layout", addRowLocation: "Add row button location", addRowText: "Add row button text", removeRowText: "Remove row button text", rateMin: "Minimum rate", rateMax: "Maximum rate", rateStep: "Rate step", minRateDescription: "Minimum rate description", maxRateDescription: "Maximum rate description", inputType: "Input type", optionsCaption: "Options caption", defaultValue: "Default value", cellsDefaultRow: "Default cells texts", surveyEditorTitle: "Edit survey settings", qEditorTitle: "Edit: {0}", maxLength: "Maximum length", //survey showTitle: "Show/hide title", locale: "Default language", simulator: "Choose device", landscapeOrientation: "Landscape", mode: "Mode (edit/read only)", clearInvisibleValues: "Clear invisible values", cookieName: "Cookie name (to disable run survey two times locally)", sendResultOnPageNext: "Send survey results on page next", storeOthersAsComment: "Store 'others' value in separate field", showPageTitles: "Show page titles", showPageNumbers: "Show page numbers", pagePrevText: "Page previous button text", pageNextText: "Page next button text", completeText: "Complete button text", startSurveyText: "Start button text", showNavigationButtons: "Show navigation buttons (default navigation)", showPrevButton: "Show previous button (user may return on previous page)", firstPageIsStarted: "The first page in the survey is a started page.", showCompletedPage: "Show the completed page at the end (completedHtml)", goNextPageAutomatic: "On answering all questions, go to the next page automatically", showProgressBar: "Show progress bar", questionTitleLocation: "Question title location", requiredText: "The question required symbol(s)", questionStartIndex: "Question start index (1, 2 or 'A', 'a')", showQuestionNumbers: "Show question numbers", questionTitleTemplate: "Question title template, default is: '{no}. {require} {title}'", questionErrorLocation: "Question error location", focusFirstQuestionAutomatic: "Focus first question on changing the page", questionsOrder: "Elements order on the page", maxTimeToFinish: "Maximum time to finish the survey", maxTimeToFinishPage: "Maximum time to finish a page in the survey", showTimerPanel: "Show timer panel", showTimerPanelMode: "Show timer panel mode", renderMode: "Render mode", allowAddPanel: "Allow adding a panel", allowRemovePanel: "Allow removing the panel", panelAddText: "Adding panel text", panelRemoveText: "Removing panel text", isSinglePage: "Show all elements on one page", html: "Html", expression: "Expression", minValue: "Minimum value", maxValue: "Maximum value", minLength: "Minimum length", allowDigits: "Allow digits", minCount: "Minimum count", maxCount: "Maximum count", regex: "Regular expression", totalText: "Total text", totalType: "Total type", totalExpression: "Total expression", totalDisplayStyle: "Total display style", totalCurrency: "Total currency", totalFormat: "Total format", tabs: { general: "General", fileOptions: "Options", html: "Html Editor", columns: "Columns", rows: "Rows", choices: "Choices", items: "Items", visibleIf: "Visible If", enableIf: "Enable If", requiredIf: "Required If", rateValues: "Rate Values", choicesByUrl: "Choices from Web", matrixChoices: "Default Choices", multipleTextItems: "Text Inputs", validators: "Validators", navigation: "Navigation", question: "Question", completedHtml: "Completed Html", completedHtmlOnCondition: "Completed Html on Condition", loadingHtml: "Loading Html", timer: "Timer/Quiz", calculatedValues: "Calculated Values", triggers: "Triggers", templateTitle: "Template title", totals: "Totals" }, editProperty: "Edit property '{0}'", items: "[ Items: {0} ]", enterNewValue: "Please, enter the value.", noquestions: "There is no any question in the survey.", createtrigger: "Please create a trigger", triggerOn: "On ", triggerMakePagesVisible: "Make pages visible:", triggerMakeQuestionsVisible: "Make elements visible:", triggerCompleteText: "Complete the survey if succeed.", triggerNotSet: "The trigger is not set", triggerRunIf: "Run if", triggerSetToName: "Change value of: ", triggerFromName: "Copy value from: ", triggerRunExpression: "Run this Expression:", triggerSetValue: "to: ", triggerGotoName: "Go to the question:", triggerIsVariable: "Do not put the variable into the survey result.", triggerRunExpressionEmpty: "Please enter a valid expression" }, //Property values pv: { true: "true", false: "false", inherit: "inherit", show: "show", hide: "hide", default: "default", initial: "initial", random: "random", collapsed: "collapsed", expanded: "expanded", none: "none", asc: "ascending", desc: "descending", indeterminate: "indeterminate", decimal: "decimal", currency: "currency", percent: "percent", firstExpanded: "firstExpanded", off: "off", onPanel: "onPanel", onSurvey: "onSurvey", list: "list", progressTop: "progressTop", progressBottom: "progressBottom", progressTopBottom: "progressTopBottom", horizontal: "horizontal", vertical: "vertical", top: "top", bottom: "bottom", topBottom: "top and bottom", left: "left", color: "color", date: "date", datetime: "datetime", "datetime-local": "datetime-local", email: "email", month: "month", number: "number", password: "password", range: "range", tel: "tel", text: "text", time: "time", url: "url", week: "week", hidden: "hidden", on: "on", onPage: "onPage", edit: "edit", display: "display", onComplete: "onComplete", onHidden: "onHidden", all: "all", page: "page", survey: "survey", onNextPage: "onNextPage", onValueChanged: "onValueChanged" }, //Operators op: { empty: "is empty", notempty: "is not empty", equal: "equals", notequal: "not equals", contains: "contains", notcontains: "not contains", anyof: "any of", allof: "all of", greater: "greater", less: "less", greaterorequal: "greater or equals", lessorequal: "less or equals" }, //Embed window ew: { angular: "Use Angular version", jquery: "Use jQuery version", knockout: "Use Knockout version", react: "Use React version", vue: "Use Vue version", bootstrap: "For bootstrap framework", standard: "No bootstrap", showOnPage: "Show survey on a page", showInWindow: "Show survey in a window", loadFromServer: "Load Survey JSON from server", titleScript: "Scripts and styles", titleHtml: "HTML", titleJavaScript: "JavaScript" }, //Test Survey ts: { selectPage: "Select the page to test it:", showInvisibleElements: "Show invisible elements" }, validators: { answercountvalidator: "answer count", emailvalidator: "e-mail", expressionvalidator: "expression", numericvalidator: "numeric", regexvalidator: "regex", textvalidator: "text" }, triggers: { completetrigger: "complete survey", setvaluetrigger: "set value", copyvaluetrigger: "copy value", skiptrigger: "skip to question", runexpressiontrigger: "run expression", visibletrigger: "change visibility (deprecated)" }, //Properties p: { name: "name", title: { name: "title", title: "Leave it empty, if it is the same as 'Name'" }, navigationButtonsVisibility: "navigationButtonsVisibility", questionsOrder: "questionsOrder", maxTimeToFinish: "maxTimeToFinish", visible: "visible", visibleIf: "visibleIf", questionTitleLocation: "questionTitleLocation", description: "description", state: "state", isRequired: "isRequired", requiredIf: "requiredIf", indent: "indent", requiredErrorText: "requiredErrorText", startWithNewLine: "startWithNewLine", innerIndent: "innerIndent", page: "page", width: "width", commentText: "commentText", valueName: "valueName", enableIf: "enableIf", defaultValue: "defaultValue", correctAnswer: "correctAnswer", readOnly: "readOnly", validators: "validators", titleLocation: "titleLocation", hasComment: "hasComment", hasOther: "hasOther", choices: "choices", choicesOrder: "choicesOrder", choicesByUrl: "choicesByUrl", otherText: "otherText", otherErrorText: "otherErrorText", storeOthersAsComment: "storeOthersAsComment", label: "label", showTitle: "showTitle", valueTrue: "valueTrue", valueFalse: "valueFalse", cols: "cols", rows: "rows", placeHolder: "placeHolder", optionsCaption: "optionsCaption", expression: "expression", format: "format", displayStyle: "displayStyle", currency: "currency", useGrouping: "useGrouping", showPreview: "showPreview", allowMultiple: "allowMultiple", imageHeight: "imageHeight", imageWidth: "imageWidth", storeDataAsText: "storeDataAsText", maxSize: "maxSize", html: "html", columns: "columns", cells: "cells", isAllRowRequired: "isAllRowRequired", horizontalScroll: "horizontalScroll", cellType: "cellType", columnsLayout: "columnsLayout", columnColCount: "columnColCount", columnMinWidth: "columnMinWidth", rowCount: "rowCount", minRowCount: "minRowCount", maxRowCount: "maxRowCount", keyName: "keyName", keyDuplicationError: "keyDuplicationError", confirmDelete: "confirmDelete", confirmDeleteText: "confirmDeleteText", addRowLocation: "addRowLocation", addRowText: "addRowText", removeRowText: "removeRowText", items: "items", itemSize: "itemSize", colCount: "colCount", templateTitle: "templateTitle", templateDescription: "templateDescription", allowAddPanel: "allowAddPanel", allowRemovePanel: "allowRemovePanel", panelCount: "panelCount", minPanelCount: "minPanelCount", maxPanelCount: "maxPanelCount", panelsState: "panelsState", panelAddText: "panelAddText", panelRemoveText: "panelRemoveText", panelPrevText: "panelPrevText", panelNextText: "panelNextText", showQuestionNumbers: "showQuestionNumbers", showRangeInProgress: "showRangeInProgress", renderMode: "renderMode", templateTitleLocation: "templateTitleLocation", rateValues: "rateValues", rateMin: "rateMin", rateMax: "rateMax", rateStep: "rateStep", minRateDescription: "minRateDescription", maxRateDescription: "maxRateDescription", inputType: "inputType", size: "size", locale: "locale", focusFirstQuestionAutomatic: "focusFirstQuestionAutomatic", completedHtml: "completedHtml", completedBeforeHtml: "completedBeforeHtml", loadingHtml: "loadingHtml", triggers: "triggers", cookieName: "cookieName", sendResultOnPageNext: "sendResultOnPageNext", showNavigationButtons: "showNavigationButtons", showPrevButton: "showPrevButton", showPageTitles: "showPageTitles", showCompletedPage: "showCompletedPage", showPageNumbers: "showPageNumbers", questionErrorLocation: "questionErrorLocation", showProgressBar: "showProgressBar", mode: "mode", goNextPageAutomatic: "goNextPageAutomatic", checkErrorsMode: "checkErrorsMode", clearInvisibleValues: "clearInvisibleValues", startSurveyText: "startSurveyText", pagePrevText: "pagePrevText", pageNextText: "pageNextText", completeText: "completeText", requiredText: "requiredText", questionStartIndex: "questionStartIndex", questionTitleTemplate: "questionTitleTemplate", firstPageIsStarted: "firstPageIsStarted", isSinglePage: "isSinglePage", maxTimeToFinishPage: "maxTimeToFinishPage", showTimerPanel: "showTimerPanel", showTimerPanelMode: "showTimerPanelMode", defaultPanelValue: "defaultPanelValue", defaultRowValue: "defaultRowValue", hasNone: "hasNone", noneText: "noneText", text: "text" } }; //Uncomment this line on creating a translation file. You should replace "en" and enStrings with your locale ("fr", "de" and so on) and your variable. //editorLocalization.locales["en"] = enStrings; /***/ }), /* 29 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_knockout__ = __webpack_require__(1); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_knockout___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_knockout__); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_survey_knockout__ = __webpack_require__(2); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_survey_knockout___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_survey_knockout__); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__propertyEditors_propertyConditionEditor__ = __webpack_require__(21); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__propertyEditors_propertyTriggersEditor__ = __webpack_require__(33); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__propertyEditors_surveyElementSelector__ = __webpack_require__(34); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__editorLocalization__ = __webpack_require__(0); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__expressionToDisplayText__ = __webpack_require__(44); /* unused harmony export SurveyLogicType */ /* unused harmony export SurveyLogicOperation */ /* unused harmony export SurveyLogicItem */ /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return SurveyLogic; }); function getLogicString(name) { return __WEBPACK_IMPORTED_MODULE_5__editorLocalization__["a" /* editorLocalization */].getString("ed.lg." + name); } var SurveyLogicType = /** @class */ (function () { function SurveyLogicType(logicType, survey, options) { if (options === void 0) { options = null; } this.logicType = logicType; this.survey = survey; this.options = options; this.hasUniqueItem = false; this.koVisible = __WEBPACK_IMPORTED_MODULE_0_knockout__["observable"](true); this.update(); } SurveyLogicType.expressionToDisplayText = function (survey, options, expression) { if (!options || !options.showTitlesInExpressions) return expression; return new __WEBPACK_IMPORTED_MODULE_6__expressionToDisplayText__["a" /* ExpressionToDisplayText */](survey, options).toDisplayText(expression); }; Object.defineProperty(SurveyLogicType.prototype, "name", { get: function () { return this.logicType.name; }, enumerable: true, configurable: true }); Object.defineProperty(SurveyLogicType.prototype, "baseClass", { get: function () { return this.logicType.baseClass; }, enumerable: true, configurable: true }); Object.defineProperty(SurveyLogicType.prototype, "propertyName", { get: function () { return this.logicType.propertyName; }, enumerable: true, configurable: true }); Object.defineProperty(SurveyLogicType.prototype, "templateName", { get: function () { if (this.isTrigger) return "propertyeditorcontent-trigger-content"; return !!this.logicType.templateName ? this.logicType.templateName : "elementselector"; }, enumerable: true, configurable: true }); SurveyLogicType.prototype.update = function (operations) { if (operations === void 0) { operations = null; } this.hasUniqueItem = this.isUniqueItem && this.hasThisOperation(operations); this.koVisible(this.visible); }; Object.defineProperty(SurveyLogicType.prototype, "visible", { get: function () { if (!this.showInUI) return false; if (this.hasUniqueItem) return false; if (!!this.logicType.showIf) return this.logicType.showIf(this.survey); return true; }, enumerable: true, configurable: true }); Object.defineProperty(SurveyLogicType.prototype, "showTitlesInExpression", { get: function () { return !!this.options && this.options.showTitlesInExpressions; }, enumerable: true, configurable: true }); Object.defineProperty(SurveyLogicType.prototype, "hasItemSelector", { get: function () { return !!this.baseClass && this.showInUI && !this.canCreateNewElement(); }, enumerable: true, configurable: true }); SurveyLogicType.prototype.createItemSelector = function () { if (!this.hasItemSelector) return null; var res = new __WEBPACK_IMPORTED_MODULE_4__propertyEditors_surveyElementSelector__["a" /* SurveyElementSelector */](this.survey, this.baseClass, this.showTitlesInExpression); res.disabledPropertyName = this.propertyName; return res; }; Object.defineProperty(SurveyLogicType.prototype, "showInUI", { get: function () { return this.logicType.showInUI !== false; }, enumerable: true, configurable: true }); SurveyLogicType.prototype.canCreateNewElement = function () { return !!this.logicType.createNewElement || this.isTrigger; }; Object.defineProperty(SurveyLogicType.prototype, "isTrigger", { get: function () { return !!this.baseClass && this.baseClass.indexOf("trigger") > -1; }, enumerable: true, configurable: true }); SurveyLogicType.prototype.createNewElement = function (survey) { if (!!this.logicType.createNewElement) return this.logicType.createNewElement(survey); if (this.isTrigger) return this.createTriggerElement(survey); return null; }; SurveyLogicType.prototype.saveElement = function (op) { if (!!this.logicType.saveElement) { this.logicType.saveElement(this.survey, op); } if (this.isTrigger) { this.saveTriggerElement(op); } }; SurveyLogicType.prototype.createTemplateObject = function (element) { if (!!this.logicType.createTemplateObject) return this.logicType.createTemplateObject(element); if (this.isTrigger) return this.createTriggerTemplateObject(element); return null; }; Object.defineProperty(SurveyLogicType.prototype, "isUniqueItem", { get: function () { return this.logicType.isUniqueItem === true; }, enumerable: true, configurable: true }); Object.defineProperty(SurveyLogicType.prototype, "questionNames", { get: function () { return this.logicType.questionNames; }, enumerable: true, configurable: true }); Object.defineProperty(SurveyLogicType.prototype, "displayName", { get: function () { return getLogicString(this.name + "Name"); }, enumerable: true, configurable: true }); Object.defineProperty(SurveyLogicType.prototype, "description", { get: function () { return getLogicString(this.name + "Description"); }, enumerable: true, configurable: true }); SurveyLogicType.prototype.getDisplayText = function (element) { var str = getLogicString(this.name + "Text"); if (!!this.logicType.getDisplayText) return this.logicType.getDisplayText(element, str, this); var name = ""; if (!!this.logicType.getDisplayTextName) { name = this.logicType.getDisplayTextName(element); } else { if (!!element && !!element["name"]) { name = element["name"]; } } if (!!name) { return str["format"](this.formatElName(name)); } return str; }; SurveyLogicType.prototype.formatElName = function (name) { if (this.showTitlesInExpression && !!this.survey) { var question = this.survey.getQuestionByName(name); if (!!question && !!question.title) { name = question.title; } } return "{" + name + "}"; }; SurveyLogicType.prototype.formatExpression = function (expression) { return SurveyLogicType.expressionToDisplayText(this.survey, this.options, expression); }; SurveyLogicType.prototype.hasThisOperation = function (operations) { if (!operations) return false; for (var i = 0; i < operations.length; i++) { if (operations[i].logicType == this) return true; } return false; }; SurveyLogicType.prototype.createTriggerElement = function (survey) { var res = (__WEBPACK_IMPORTED_MODULE_1_survey_knockout__["Serializer"].createClass(this.baseClass)); res["survey"] = survey; res.setOwner(survey); return res; }; SurveyLogicType.prototype.saveTriggerElement = function (op) { var trigger = op.element; op.templateObject.applyProperties(trigger); var survey = this.survey; if (!!survey && survey.triggers.indexOf(trigger) < 0 && !!trigger.expression) { survey.triggers.push(trigger); } }; SurveyLogicType.prototype.createTriggerTemplateObject = function (element) { return __WEBPACK_IMPORTED_MODULE_3__propertyEditors_propertyTriggersEditor__["a" /* SurveyPropertyTriggersEditor */].createTriggerEditor(this.survey, element, this.options); }; return SurveyLogicType; }()); var SurveyLogicOperation = /** @class */ (function () { function SurveyLogicOperation(logicType, element) { this.logicType = logicType; this.itemSelectorValue = null; this.koElement = __WEBPACK_IMPORTED_MODULE_0_knockout__["observable"](element); this.itemSelectorValue = this.logicType.createItemSelector(); if (this.itemSelector) { var self = this; this.itemSelector.element = element; this.itemSelector.onValueChangedCallback = function (newValue) { self.element = self.itemSelector.element; }; } this.templateObjectValue = logicType.createTemplateObject(this.element); } Object.defineProperty(SurveyLogicOperation.prototype, "template", { get: function () { return this.logicType.templateName; }, enumerable: true, configurable: true }); Object.defineProperty(SurveyLogicOperation.prototype, "templateObject", { get: function () { return !!this.templateObjectValue ? this.templateObjectValue : this.itemSelector; }, enumerable: true, configurable: true }); Object.defineProperty(SurveyLogicOperation.prototype, "element", { get: function () { return this.koElement(); }, set: function (val) { this.koElement(val); }, enumerable: true, configurable: true }); Object.defineProperty(SurveyLogicOperation.prototype, "itemSelector", { get: function () { return this.itemSelectorValue; }, enumerable: true, configurable: true }); SurveyLogicOperation.prototype.apply = function (expression, isRenaming) { if (isRenaming === void 0) { isRenaming = false; } if (!!this.element) { this.element[this.logicType.propertyName] = expression; if (!isRenaming) { this.logicType.saveElement(this); } } }; SurveyLogicOperation.prototype.renameQuestion = function (oldName, newName) { if (!this.element) return; var names = this.questionNames; for (var i = 0; i < names.length; i++) { var str = this.element[names[i]]; if (!!str && str.toLowerCase() == oldName.toLowerCase()) { this.element[names[i]] = newName; } } }; SurveyLogicOperation.prototype.equals = function (op) { return this.logicType === op.logicType && this.element === op.element; }; Object.defineProperty(SurveyLogicOperation.prototype, "name", { get: function () { return this.logicType.displayName; }, enumerable: true, configurable: true }); Object.defineProperty(SurveyLogicOperation.prototype, "text", { get: function () { return this.logicType.getDisplayText(this.element); }, enumerable: true, configurable: true }); Object.defineProperty(SurveyLogicOperation.prototype, "deleteOperationText", { get: function () { return getLogicString("deleteOperation"); }, enumerable: true, configurable: true }); SurveyLogicOperation.prototype.hasError = function () { if (!!this.itemSelector) return this.itemSelector.hasError(); if (!!this.templateObject && !!this.templateObject.hasError) return this.templateObject.hasError(); return false; }; Object.defineProperty(SurveyLogicOperation.prototype, "questionNames", { get: function () { if (!this.logicType.questionNames) return []; return this.logicType.questionNames; }, enumerable: true, configurable: true }); return SurveyLogicOperation; }()); var SurveyLogicItem = /** @class */ (function () { function SurveyLogicItem(owner, expression) { if (expression === void 0) { expression = ""; } this.owner = owner; this.expression = expression; this.id = ++SurveyLogicItem.counter; this.removedOperations = []; this.koOperations = __WEBPACK_IMPORTED_MODULE_0_knockout__["observableArray"](); } Object.defineProperty(SurveyLogicItem.prototype, "name", { get: function () { return "logicItem" + this.id; }, enumerable: true, configurable: true }); Object.defineProperty(SurveyLogicItem.prototype, "title", { get: function () { var res = this.getExpressionAsDisplayText(); if (!!res && res.length > 50) { res = res.substr(1, 50) + "..."; } return res; }, enumerable: true, configurable: true }); SurveyLogicItem.prototype.edit = function () { if (!!this.owner) { this.owner.editItem(this); } }; SurveyLogicItem.prototype.remove = function () { if (!!this.owner) { this.owner.removeItem(this); } }; Object.defineProperty(SurveyLogicItem.prototype, "isReadOnly", { get: function () { return !!this.owner && this.owner.readOnly; }, enumerable: true, configurable: true }); Object.defineProperty(SurveyLogicItem.prototype, "operations", { get: function () { return this.koOperations(); }, enumerable: true, configurable: true }); SurveyLogicItem.prototype.addOperation = function (lt, element) { if (element === void 0) { element = null; } var op = new SurveyLogicOperation(lt, element); this.koOperations.push(op); lt.update(this.operations); return op; }; SurveyLogicItem.prototype.removeOperation = function (op) { this.removedOperations.push(op); var index = this.koOperations().indexOf(op); if (index > -1) { this.koOperations.splice(index, 1); if (!!op.logicType) { op.logicType.update(this.operations); } } }; SurveyLogicItem.prototype.apply = function (expression) { this.removeSameOperations(); for (var i = 0; i < this.removedOperations.length; i++) { this.removedOperations[i].apply(""); } this.removedOperations = []; this.applyExpression(expression, false); }; SurveyLogicItem.prototype.renameQuestion = function (oldName, newName) { if (!oldName || !newName) return; this.renameQuestionInExpression(oldName, newName); var ops = this.operations; for (var i = 0; i < ops.length; i++) { ops[i].renameQuestion(oldName, newName); } }; Object.defineProperty(SurveyLogicItem.prototype, "expressionText", { get: function () { return __WEBPACK_IMPORTED_MODULE_5__editorLocalization__["a" /* editorLocalization */] .getString("ed.lg.itemExpressionText")["format"](this.getExpressionAsDisplayText()); }, enumerable: true, configurable: true }); SurveyLogicItem.prototype.getExpressionAsDisplayText = function () { return !!this.owner ? this.owner.getExpressionAsDisplayText(this.expression) : this.expression; }; Object.defineProperty(SurveyLogicItem.prototype, "editText", { get: function () { return __WEBPACK_IMPORTED_MODULE_5__editorLocalization__["a" /* editorLocalization */].getString("pe.edit"); }, enumerable: true, configurable: true }); Object.defineProperty(SurveyLogicItem.prototype, "deleteText", { get: function () { return __WEBPACK_IMPORTED_MODULE_5__editorLocalization__["a" /* editorLocalization */].getString("pe.delete"); }, enumerable: true, configurable: true }); SurveyLogicItem.prototype.renameQuestionInExpression = function (oldName, newName) { if (!this.expression) return; var newExpression = this.expression; var expression = this.expression.toLocaleLowerCase(); oldName = "{" + oldName.toLowerCase() + "}"; newName = "{" + newName + "}"; var index = expression.lastIndexOf(oldName, expression.length); while (index > -1) { newExpression = newExpression.substring(0, index) + newName + newExpression.substr(index + oldName.length, +newExpression.length); expression = expression.substring(0, index); index = expression.lastIndexOf(oldName, expression.length); } if (newExpression != this.expression) { this.applyExpression(newExpression, true); } }; SurveyLogicItem.prototype.applyExpression = function (expression, isRenaming) { this.expression = expression; var ops = this.operations; for (var i = 0; i < ops.length; i++) { ops[i].apply(expression, isRenaming); } }; SurveyLogicItem.prototype.removeSameOperations = function () { var ops = this.operations; for (var i = ops.length - 1; i >= 0; i--) { for (var j = i - 1; j >= 0; j--) { if (ops[i].equals(ops[j])) { this.removeOperation(ops[i]); break; } } } }; SurveyLogicItem.counter = 0; return SurveyLogicItem; }()); var SurveyLogic = /** @class */ (function () { function SurveyLogic(survey, options) { if (options === void 0) { options = null; } this.survey = survey; this.options = options; this.invisibleItems = []; this.createExpressionPropertyEditor(); this.koItems = __WEBPACK_IMPORTED_MODULE_0_knockout__["observableArray"](); this.koLogicTypes = __WEBPACK_IMPORTED_MODULE_0_knockout__["observableArray"](); this.koMode = __WEBPACK_IMPORTED_MODULE_0_knockout__["observable"]("view"); this.koReadOnly = __WEBPACK_IMPORTED_MODULE_0_knockout__["observable"](this.readOnly); this.koErrorText = __WEBPACK_IMPORTED_MODULE_0_knockout__["observable"](""); var self = this; this.koDisplayError = __WEBPACK_IMPORTED_MODULE_0_knockout__["computed"](function () { return !!self.koErrorText(); }); this.koAddNew = function () { self.addNew(); }; this.koEditItem = function (item) { self.editItem(item); }; this.koRemoveItem = function (item) { self.removeItem(item); }; this.koShowView = function () { self.mode = "view"; }; this.koSaveAndShowView = function () { if (self.saveEditableItem()) { self.mode = "view"; } }; this.koSaveEditableItem = function () { self.saveEditableItem(); }; this.koAddNewOperation = function (logicType) { self.addNewOperation(logicType); }; this.koRemoveOperation = function (op) { self.removeOperation(op); }; this.koEditableItem = __WEBPACK_IMPORTED_MODULE_0_knockout__["observable"](null); this.update(); } SurveyLogic.hasNeededElements = function (elements, propName) { if (!elements || !Array.isArray(elements)) return false; for (var i = 0; i < elements.length; i++) { var el = elements[i]; if (!el[propName]) { return true; } } return false; }; SurveyLogic.prototype.getTypeByName = function (name) { for (var i = 0; i < this.logicTypes.length; i++) { if (this.logicTypes[i].name == name) return this.logicTypes[i]; } return null; }; SurveyLogic.prototype.update = function (survey, options) { if (survey === void 0) { survey = null; } if (options === void 0) { options = null; } if (!!survey) { this.survey = survey; } if (!!options) { this.options = options; } this.koLogicTypes(this.createLogicTypes()); this.updateVisibleItems(); this.invisibleItems = this.buildItems(false); this.koReadOnly(this.readOnly); this.mode = "view"; this.expressionEditor.object = this.survey; this.expressionEditor.options = this.options; this.expressionEditor.displayName = getLogicString("expressionEditorTitle"); this.expressionEditor.showHelpText = false; this.expressionEditor.beforeShow(); }; SurveyLogic.prototype.updateVisibleItems = function () { this.koItems(this.buildItems(true)); this.koEditableItem(null); this.koErrorText(""); }; Object.defineProperty(SurveyLogic.prototype, "readOnly", { get: function () { return !!this.options && this.options.readOnly; }, enumerable: true, configurable: true }); SurveyLogic.prototype.saveEditableItem = function () { if (!this.editableItem || this.hasError()) return false; this.expressionEditor.apply(); this.editableItem.apply(this.expressionEditor.editingValue); var isNew = this.koItems.indexOf(this.editableItem) < 0; if (isNew) { this.koItems.push(this.editableItem); } this.onItemChanged(this.editableItem, isNew ? "new" : "modify"); return true; }; SurveyLogic.prototype.onItemChanged = function (item, changeType) { if (!!this.onChangedCallback) { this.onChangedCallback(item, changeType); } }; Object.defineProperty(SurveyLogic.prototype, "items", { get: function () { return this.koItems(); }, enumerable: true, configurable: true }); Object.defineProperty(SurveyLogic.prototype, "logicTypes", { get: function () { return this.koLogicTypes(); }, enumerable: true, configurable: true }); Object.defineProperty(SurveyLogic.prototype, "editableItem", { get: function () { return this.koEditableItem(); }, enumerable: true, configurable: true }); SurveyLogic.prototype.renameQuestion = function (oldName, newName) { this.renameQuestionCore(oldName, newName, this.items); this.renameQuestionCore(oldName, newName, this.invisibleItems); }; SurveyLogic.prototype.hasError = function () { if (!this.editableItem) return false; var text = ""; if (!this.isExpressionValid) { text = getLogicString("expressionInvalid"); } var ops = this.editableItem.operations; if (!text && ops.length == 0) { text = getLogicString("noOperationError"); } if (!text) { for (var i = 0; i < ops.length; i++) { if (ops[i].hasError()) { text = getLogicString("operationInvalid"); } } } this.koErrorText(text); return !!text; }; Object.defineProperty(SurveyLogic.prototype, "addNewOperationText", { get: function () { return getLogicString("addNewOperation"); }, enumerable: true, configurable: true }); Object.defineProperty(SurveyLogic.prototype, "isExpressionValid", { get: function () { return this.expressionEditor.isExpressionValid; }, enumerable: true, configurable: true }); SurveyLogic.prototype.renameQuestionCore = function (oldName, newName, items) { for (var i = 0; i < items.length; i++) { items[i].renameQuestion(oldName, newName); } }; Object.defineProperty(SurveyLogic.prototype, "mode", { /** * There are 3 modes: view, new, edit */ get: function () { return this.koMode(); }, set: function (val) { if (val !== "view" && val !== "new" && val !== "edit") return; if (this.mode == val) return; var oldMode = this.mode; if (val == "new" || val == "edit") { this.updateLogicTypes(); } if ((oldMode == "new" || oldMode == "edit") && val == "view") { this.updateVisibleItems(); } this.koMode(val); }, enumerable: true, configurable: true }); SurveyLogic.prototype.addNew = function () { this.koEditableItem(new SurveyLogicItem(this)); this.expressionEditor.editingValue = ""; this.mode = "new"; }; SurveyLogic.prototype.editItem = function (item) { this.koEditableItem(item); this.expressionEditor.editingValue = item.expression; this.mode = "edit"; }; SurveyLogic.prototype.removeItem = function (item) { item.apply(""); var index = this.koItems.indexOf(item); if (index > -1) { this.koItems.splice(index, 1); } this.onItemChanged(item, "delete"); }; SurveyLogic.prototype.addNewOperation = function (logicType) { var element = logicType.createNewElement(this.survey); return this.editableItem.addOperation(logicType, element); }; SurveyLogic.prototype.removeOperation = function (op) { this.editableItem.removeOperation(op); }; SurveyLogic.prototype.getExpressionAsDisplayText = function (expression) { return SurveyLogicType.expressionToDisplayText(this.survey, this.options, expression); }; SurveyLogic.prototype.buildItems = function (showInUI) { var res = []; var hash = {}; var elements = this.getAllElements(); for (var i = 0; i < elements.length; i++) { this.buildItemsByElement(elements[i], res, hash, showInUI); } return res; }; SurveyLogic.prototype.getAllElements = function () { var res = []; this.AddElements(this.survey.pages, res); this.AddElements(this.survey.getAllQuestions(), res); this.AddElements(this.survey.getAllPanels(), res); this.AddElements(this.survey.triggers, res); this.AddElements(this.survey.completedHtmlOnCondition, res); this.AddElements(this.survey.calculatedValues, res); this.AddElements(this.getMatrixColumns(), res); this.AddElements(this.getValidators(), res); this.AddElements(this.getItemValues(), res); return res; }; SurveyLogic.prototype.getMatrixColumns = function () { var res = []; var questions = this.survey.getAllQuestions(); for (var i = 0; i < questions.length; i++) { var q = questions[i]; var columns = q["columns"]; if (!columns) continue; var prop = __WEBPACK_IMPORTED_MODULE_1_survey_knockout__["Serializer"].findProperty(q.getType(), "columns"); if (!prop || prop.className !== "matrixdropdowncolumn") continue; this.AddElements(columns, res); } return res; }; SurveyLogic.prototype.getValidators = function () { var res = []; var questions = this.survey.getAllQuestions(); for (var i = 0; i < questions.length; i++) { this.AddElements(questions[i].validators, res); } return res; }; SurveyLogic.prototype.getItemValues = function () { var res = []; var questions = this.survey.getAllQuestions(); for (var i = 0; i < questions.length; i++) { var q = questions[i]; var choices = q["choices"]; if (!choices) continue; var prop = __WEBPACK_IMPORTED_MODULE_1_survey_knockout__["Serializer"].findProperty(q.getType(), "choices"); if (!prop || prop.type !== "itemvalue[]") continue; this.AddElements(choices, res); } return res; }; SurveyLogic.prototype.updateLogicTypes = function () { var lts = this.logicTypes; for (var i = 0; i < lts.length; i++) { lts[i].update(); } }; SurveyLogic.prototype.AddElements = function (src, dest) { for (var i = 0; i < src.length; i++) { dest.push(src[i]); } }; SurveyLogic.prototype.buildItemsByElement = function (element, dest, hash, showInUI) { var types = this.getElementAllTypes(element); for (var i = 0; i < this.logicTypes.length; i++) { var lt = this.logicTypes[i]; if (lt.showInUI !== showInUI) continue; var expression = element[lt.propertyName]; if (types.indexOf(lt.baseClass) > -1 && !__WEBPACK_IMPORTED_MODULE_1_survey_knockout__["Helpers"].isValueEmpty(expression)) { var key = this.getExpressionHashKey(expression); var item = hash[key]; if (!item) { item = new SurveyLogicItem(this, expression); hash[key] = item; dest.push(item); } item.addOperation(lt, element); } } }; SurveyLogic.prototype.getExpressionHashKey = function (expression) { return expression.replace(" ", "").toLowerCase(); }; SurveyLogic.prototype.getElementAllTypes = function (element) { var types = []; var type = element.getType(); types.push(type); while (!!type && type != "base") { var cl = __WEBPACK_IMPORTED_MODULE_1_survey_knockout__["Serializer"].findClass(type); if (!cl) break; type = cl.parentName; if (!!type) { types.push(type); } } return types; }; SurveyLogic.prototype.createLogicTypes = function () { var res = []; for (var i = 0; i < SurveyLogic.types.length; i++) { res.push(new SurveyLogicType(SurveyLogic.types[i], this.survey, this.options)); } return res; }; SurveyLogic.prototype.getExpressionProperty = function () { var property = __WEBPACK_IMPORTED_MODULE_1_survey_knockout__["Serializer"].findProperty("survey", "hiddenLogic"); if (!!property) return property; __WEBPACK_IMPORTED_MODULE_1_survey_knockout__["Serializer"].addProperty("survey", { name: "hiddenLogic:condition", visible: false, isSerializable: false }); return __WEBPACK_IMPORTED_MODULE_1_survey_knockout__["Serializer"].findProperty("survey", "hiddenLogic"); }; SurveyLogic.prototype.createExpressionPropertyEditor = function () { this.expressionEditor = new __WEBPACK_IMPORTED_MODULE_2__propertyEditors_propertyConditionEditor__["a" /* SurveyPropertyConditionEditor */](this.getExpressionProperty()); this.expressionEditor.object = this.survey; }; SurveyLogic.types = [ { name: "page_visibility", baseClass: "page", propertyName: "visibleIf", showIf: function (survey) { return (survey.pages.length > 1 && SurveyLogic.hasNeededElements(survey.pages, "visibleIf")); } }, { name: "panel_visibility", baseClass: "panel", propertyName: "visibleIf", showIf: function (survey) { return SurveyLogic.hasNeededElements(survey.getAllPanels(), "visibleIf"); } }, { name: "panel_enable", baseClass: "panel", propertyName: "enableIf", showIf: function (survey) { return SurveyLogic.hasNeededElements(survey.getAllPanels(), "enableIf"); } }, { name: "question_visibility", baseClass: "question", propertyName: "visibleIf", showIf: function (survey) { return SurveyLogic.hasNeededElements(survey.getAllQuestions(), "visibleIf"); } }, { name: "question_enable", baseClass: "question", propertyName: "enableIf", showIf: function (survey) { return SurveyLogic.hasNeededElements(survey.getAllQuestions(), "enableIf"); } }, { name: "question_require", baseClass: "question", propertyName: "requiredIf", showIf: function (survey) { return SurveyLogic.hasNeededElements(survey.getAllQuestions(), "requiredIf"); } }, { name: "expression_expression", baseClass: "expression", propertyName: "expression", showInUI: false }, { name: "matrixdropdowncolumn_visibleIf", baseClass: "matrixdropdowncolumn", propertyName: "visibleIf", showInUI: false }, { name: "matrixdropdowncolumn_enableIf", baseClass: "matrixdropdowncolumn", propertyName: "enableIf", showInUI: false }, { name: "matrixdropdowncolumn_requiredIf", baseClass: "matrixdropdowncolumn", propertyName: "requiredIf", showInUI: false }, { name: "matrixdropdowncolumn_totalExpression", baseClass: "matrixdropdowncolumn", propertyName: "totalExpression", showInUI: false }, { name: "trigger_complete", baseClass: "completetrigger", propertyName: "expression", isUniqueItem: true }, { name: "trigger_setvalue", baseClass: "setvaluetrigger", propertyName: "expression", questionNames: ["setToName"], getDisplayText: function (element, formatStr, lt) { return formatStr["format"](lt.formatElName(element["setToName"]), element["setValue"]); } }, { name: "trigger_copyvalue", baseClass: "copyvaluetrigger", propertyName: "expression", questionNames: ["setToName", "fromName"], getDisplayText: function (element, formatStr, lt) { return formatStr["format"](lt.formatElName(element["setToName"]), lt.formatElName(element["fromName"])); } }, { name: "trigger_skip", baseClass: "skiptrigger", propertyName: "expression", questionNames: ["gotoName"], isUniqueItem: true, getDisplayTextName: function (element) { return element["gotoName"]; } }, { name: "trigger_runExpression", baseClass: "runexpressiontrigger", propertyName: "expression", questionNames: ["setToName"], getDisplayText: function (element, formatStr, lt) { var res = getLogicString("trigger_runExpressionText1"); res = res["format"](lt.formatExpression(element["runExpression"])); var setToName = element["setToName"]; if (!!setToName) { var str = getLogicString("trigger_runExpressionText2"); res += str["format"](lt.formatElName(element["setToName"])); } return res; } }, { name: "completedHtmlOnCondition", baseClass: "htmlconditionitem", propertyName: "expression", isUniqueItem: true, templateName: "propertyeditorcontent-html", createNewElement: function (survey) { return new __WEBPACK_IMPORTED_MODULE_1_survey_knockout__["HtmlConditionItem"](); }, createTemplateObject: function (element) { var item = element; return { koValue: __WEBPACK_IMPORTED_MODULE_0_knockout__["observable"](item.html), readOnly: false }; }, saveElement: function (survey, op) { var item = op.element; item.html = op.templateObject.koValue(); if (survey.completedHtmlOnCondition.indexOf(item) < 0) { survey.completedHtmlOnCondition.push(item); } } }, { name: "trigger_runExpression_Expression", baseClass: "runexpressiontrigger", propertyName: "runExpression", showInUI: false }, { name: "question_expressionValidator", baseClass: "expressionvalidator", propertyName: "expression", showInUI: false }, { name: "matrix_rowsVisibleIf", baseClass: "matrix", propertyName: "rowsVisibleIf", showInUI: false }, { name: "matrix_columnsVisibleIf", baseClass: "matrix", propertyName: "columnsVisibleIf", showInUI: false }, { name: "matrixdropdown_rowsVisibleIf", baseClass: "matrixdropdown", propertyName: "rowsVisibleIf", showInUI: false }, { name: "select_choicesVisibleIf", baseClass: "selectbase", propertyName: "choicesVisibleIf", showInUI: false }, { name: "select_choicesEnableIf", baseClass: "selectbase", propertyName: "choicesEnableIf", showInUI: false }, { name: "itemvalue_visibleIf", baseClass: "itemvalue", propertyName: "visibleIf", showInUI: false }, { name: "itemvalue_enableIf", baseClass: "itemvalue", propertyName: "enableIf", showInUI: false }, { name: "calculatedValue", baseClass: "calculatedvalue", propertyName: "expression", showInUI: false } ]; return SurveyLogic; }()); /***/ }), /* 30 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_knockout__ = __webpack_require__(1); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_knockout___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_knockout__); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_survey_knockout__ = __webpack_require__(2); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_survey_knockout___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_survey_knockout__); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__objectProperty__ = __webpack_require__(12); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__surveyHelper__ = __webpack_require__(5); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return SurveyObjectEditor; }); var SurveyObjectEditor = /** @class */ (function () { function SurveyObjectEditor(propertyEditorOptions) { var _this = this; if (propertyEditorOptions === void 0) { propertyEditorOptions = null; } this.propertyEditorOptions = propertyEditorOptions; this.oldActiveProperty = null; this.koProperties = __WEBPACK_IMPORTED_MODULE_0_knockout__["observableArray"](); this.koActiveProperty = __WEBPACK_IMPORTED_MODULE_0_knockout__["observable"](); this.koHasObject = __WEBPACK_IMPORTED_MODULE_0_knockout__["observable"](); this.onPropertyValueChanged = new __WEBPACK_IMPORTED_MODULE_1_survey_knockout__["Event"](); this.koActiveProperty.subscribe(function (newValue) { if (_this.oldActiveProperty === newValue) return; if (_this.oldActiveProperty) _this.oldActiveProperty.isActive = false; _this.oldActiveProperty = newValue; if (newValue) newValue.isActive = true; }); var self = this; this.koAfterRender = function (el, con) { self.afterRender(el, con); }; } Object.defineProperty(SurveyObjectEditor.prototype, "selectedObject", { get: function () { return this.selectedObjectValue; }, set: function (value) { if (this.selectedObjectValue == value) return; this.koHasObject(value != null); this.selectedObjectValue = value; this.updateProperties(); this.updatePropertiesObject(); }, enumerable: true, configurable: true }); SurveyObjectEditor.prototype.getPropertyEditor = function (name) { var properties = this.koProperties(); for (var i = 0; i < properties.length; i++) { if (properties[i].name == name) return properties[i]; } return null; }; SurveyObjectEditor.prototype.changeActiveProperty = function (property) { this.koActiveProperty(property); }; SurveyObjectEditor.prototype.objectChanged = function () { this.updatePropertiesObject(); }; SurveyObjectEditor.prototype.afterRender = function (elements, prop) { if (!__WEBPACK_IMPORTED_MODULE_1_survey_knockout__["SurveyElement"] || !__WEBPACK_IMPORTED_MODULE_1_survey_knockout__["SurveyElement"].GetFirstNonTextElement || !this.onAfterRenderCallback) return; var el = __WEBPACK_IMPORTED_MODULE_1_survey_knockout__["SurveyElement"].GetFirstNonTextElement(elements); var tEl = elements[0]; if (tEl.nodeName === "#text") tEl.data = ""; tEl = elements[elements.length - 1]; if (tEl.nodeName === "#text") tEl.data = ""; this.onAfterRenderCallback(this.selectedObject, el, prop); }; SurveyObjectEditor.prototype.updateProperties = function () { var _this = this; if (!this.selectedObject || !this.selectedObject.getType) { this.koProperties([]); this.koActiveProperty(null); return; } var properties = __WEBPACK_IMPORTED_MODULE_1_survey_knockout__["Serializer"].getPropertiesByObj(this.selectedObject); var objectProperties = []; var self = this; var propEvent = function (property, newValue) { if (property.property.isRequired && __WEBPACK_IMPORTED_MODULE_1_survey_knockout__["Helpers"].isValueEmpty(newValue)) { property.koValue(property.object[property.name]); return; } var options = { property: property.property, object: property.object, newValue: newValue, updatedValue: null }; self.onPropertyValueChanged.fire(_this, options); if (!!options.updatedValue && options.updatedValue != options.newValue) { property.koValue(options.updatedValue); } }; var visibleProperties = []; for (var i = 0; i < properties.length; i++) { if (!this.canShowProperty(properties[i])) continue; visibleProperties.push(properties[i]); } var sortEvent = function (a, b) { var res = 0; if (self.onSortPropertyCallback) { res = self.onSortPropertyCallback(self.selectedObject, a.property, b.property); } if (res) return res; if (a.displayName == b.displayName) return 0; if (a.displayName > b.displayName) return 1; return -1; }; for (var i = 0; i < visibleProperties.length; i++) { var objectProperty = new __WEBPACK_IMPORTED_MODULE_2__objectProperty__["a" /* SurveyObjectProperty */](visibleProperties[i], propEvent, this.propertyEditorOptions); objectProperty.editor.isInplaceProperty = true; objectProperty.onDependedPropertyUpdateCallback = function (propName) { self.updatePropertyEditor(propName); }; objectProperties.push(objectProperty); } objectProperties.sort(sortEvent); this.koProperties(objectProperties); var propEditor = this.getPropertyEditor("name"); if (!propEditor && objectProperties.length > 0) { propEditor = this.getPropertyEditor(objectProperties[0].name); } if (propEditor) { this.koActiveProperty(propEditor); } }; SurveyObjectEditor.prototype.updatePropertyEditor = function (propName) { var propEd = this.getPropertyEditor(propName); if (!!propEd) { propEd.object = this.selectedObject; propEd.updateDynamicProperties(); } }; SurveyObjectEditor.prototype.canShowProperty = function (property) { return __WEBPACK_IMPORTED_MODULE_3__surveyHelper__["b" /* SurveyHelper */].isPropertyVisible(this.selectedObject, property, this.propertyEditorOptions); }; SurveyObjectEditor.prototype.updatePropertiesObject = function () { var properties = this.koProperties(); for (var i = 0; i < properties.length; i++) { properties[i].object = this.selectedObject; } }; return SurveyObjectEditor; }()); /***/ }), /* 31 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(3); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__propertyEditorBase__ = __webpack_require__(13); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return SurveyPropertyCustomEditor; }); var SurveyPropertyCustomEditor = /** @class */ (function (_super) { __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__["a" /* __extends */])(SurveyPropertyCustomEditor, _super); function SurveyPropertyCustomEditor(property, widgetJSON) { if (widgetJSON === void 0) { widgetJSON = null; } var _this = _super.call(this, property) || this; _this.isValueChanging = false; _this.widgetJSONValue = widgetJSON; var self = _this; _this["koAfterRender"] = function (el, con) { self.doAfterRender(el, con); }; return _this; } Object.defineProperty(SurveyPropertyCustomEditor.prototype, "editorType", { get: function () { return "custom"; }, enumerable: true, configurable: true }); Object.defineProperty(SurveyPropertyCustomEditor.prototype, "widgetJSON", { get: function () { return this.widgetJSONValue; }, enumerable: true, configurable: true }); SurveyPropertyCustomEditor.prototype.onValueChanged = function () { if (this.isValueChanging) return; this.isValueChanging = true; _super.prototype.onValueChanged.call(this); if (this.onValueChangedCallback) this.onValueChangedCallback(this.editingValue); this.isValueChanging = false; }; SurveyPropertyCustomEditor.prototype.checkForErrors = function () { var res = _super.prototype.checkForErrors.call(this); if (!!res) return res; var errorText = this.widgetValidate(); if (!!errorText) { this.koErrorText(errorText); } return !!errorText; }; Object.defineProperty(SurveyPropertyCustomEditor.prototype, "widgetRender", { get: function () { return this.widgetJSON ? this.widgetJSON.render : null; }, enumerable: true, configurable: true }); SurveyPropertyCustomEditor.prototype.widgetValidate = function () { if (this.widgetJSON && this.widgetJSON.validate) { return this.widgetJSON.validate(this, this.koValue()); } return null; }; SurveyPropertyCustomEditor.prototype.doAfterRender = function (elements, con) { var el = elements[0]; if (!!el && this.widgetRender) this.widgetRender(this, el); }; return SurveyPropertyCustomEditor; }(__WEBPACK_IMPORTED_MODULE_1__propertyEditorBase__["a" /* SurveyPropertyEditorBase */])); /***/ }), /* 32 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(3); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_knockout__ = __webpack_require__(1); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_knockout___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_knockout__); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_survey_knockout__ = __webpack_require__(2); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_survey_knockout___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_survey_knockout__); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__propertyModalEditor__ = __webpack_require__(7); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__editorLocalization__ = __webpack_require__(0); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__propertyEditorFactory__ = __webpack_require__(4); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return SurveyPropertyDefaultValueEditor; }); /* unused harmony export SurveyPropertyDefaultRowValueEditorBase */ /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return SurveyPropertyDefaultRowValueEditor; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "c", function() { return SurveyPropertyDefaultPanelValueEditor; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "d", function() { return SurveyPropertySetEditor; }); var SurveyPropertyDefaultValueEditor = /** @class */ (function (_super) { __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__["a" /* __extends */])(SurveyPropertyDefaultValueEditor, _super); function SurveyPropertyDefaultValueEditor(property) { var _this = _super.call(this, property) || this; _this.koSurvey = __WEBPACK_IMPORTED_MODULE_1_knockout__["observable"](!!_this.options && _this.options.createSurvey({}, "defaultValueEditor")); return _this; } SurveyPropertyDefaultValueEditor.createJsonFromQuestion = function (obj, readOnly) { var qjson = new __WEBPACK_IMPORTED_MODULE_2_survey_knockout__["JsonObject"]().toJsonObject(obj); qjson.name = SurveyPropertyDefaultValueEditor.defaultQuestionName; qjson.type = obj.getType(); if (qjson.type == "expression") { qjson.type = "text"; } qjson.titleLocation = "hidden"; //qjson.showClearButton = true; qjson.storeOthersAsComment = false; qjson.readOnly = readOnly; SurveyPropertyDefaultValueEditor.deleteConditionProperties(qjson); if (!!qjson.choices) { for (var i = 0; i < qjson.choices.length; i++) { SurveyPropertyDefaultValueEditor.deleteConditionProperties(qjson.choices[i]); } } return qjson; }; SurveyPropertyDefaultValueEditor.deleteConditionProperties = function (json) { delete json["visible"]; delete json["visibleIf"]; delete json["enable"]; delete json["enableIf"]; delete json["valueName"]; }; SurveyPropertyDefaultValueEditor.createSurveyFromJsonQuestion = function (questionJson, options) { var json = { questions: [], showNavigationButtons: false, showQuestionNumbers: "off" }; json.questions.push(questionJson); return !!options ? options.createSurvey(json, "defaultValueEditor") : new __WEBPACK_IMPORTED_MODULE_2_survey_knockout__["Survey"](json); }; SurveyPropertyDefaultValueEditor.prototype.resetText = function () { return __WEBPACK_IMPORTED_MODULE_4__editorLocalization__["a" /* editorLocalization */].getString("pe.reset"); }; SurveyPropertyDefaultValueEditor.prototype.resetValue = function (model) { model.koSurvey().data = {}; }; SurveyPropertyDefaultValueEditor.prototype.getValueText = function (value) { if (!value) return __WEBPACK_IMPORTED_MODULE_4__editorLocalization__["a" /* editorLocalization */].getString("pe.empty"); return JSON.stringify(value); }; SurveyPropertyDefaultValueEditor.prototype.beforeShow = function () { _super.prototype.beforeShow.call(this); this.createSurvey(); }; SurveyPropertyDefaultValueEditor.prototype.onBeforeApply = function () { if (!this.survey) return; this.setValueCore(this.getSurveyResult()); }; Object.defineProperty(SurveyPropertyDefaultValueEditor.prototype, "editorType", { get: function () { return "value"; }, enumerable: true, configurable: true }); SurveyPropertyDefaultValueEditor.prototype.createSurvey = function () { this.survey = SurveyPropertyDefaultValueEditor.createSurveyFromJsonQuestion(this.buildQuestionJson(), this.options); this.survey.setValue(SurveyPropertyDefaultValueEditor.defaultQuestionName, this.getSurveyInitialValue()); this.koSurvey(this.survey); }; SurveyPropertyDefaultValueEditor.prototype.buildQuestionJson = function () { return SurveyPropertyDefaultValueEditor.createJsonFromQuestion(this.object, this.readOnly()); }; SurveyPropertyDefaultValueEditor.prototype.getSurveyInitialValue = function () { return this.editingValue; }; SurveyPropertyDefaultValueEditor.prototype.getSurveyResult = function () { return this.survey.getValue(SurveyPropertyDefaultValueEditor.defaultQuestionName); }; SurveyPropertyDefaultValueEditor.defaultQuestionName = "question"; return SurveyPropertyDefaultValueEditor; }(__WEBPACK_IMPORTED_MODULE_3__propertyModalEditor__["a" /* SurveyPropertyModalEditor */])); var SurveyPropertyDefaultRowValueEditorBase = /** @class */ (function (_super) { __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__["a" /* __extends */])(SurveyPropertyDefaultRowValueEditorBase, _super); function SurveyPropertyDefaultRowValueEditorBase(property) { return _super.call(this, property) || this; } Object.defineProperty(SurveyPropertyDefaultRowValueEditorBase.prototype, "editorTypeTemplate", { get: function () { return "value"; }, enumerable: true, configurable: true }); SurveyPropertyDefaultRowValueEditorBase.prototype.getSurveyInitialValue = function () { var res = this.editingValue; if (!res) return res; if (!Array.isArray(res)) { res = [res]; } return res; }; SurveyPropertyDefaultRowValueEditorBase.prototype.getSurveyResult = function () { var res = _super.prototype.getSurveyResult.call(this); if (res && Array.isArray(res)) { if (res.length == 0) return null; return res[0]; } return res; }; return SurveyPropertyDefaultRowValueEditorBase; }(SurveyPropertyDefaultValueEditor)); var SurveyPropertyDefaultRowValueEditor = /** @class */ (function (_super) { __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__["a" /* __extends */])(SurveyPropertyDefaultRowValueEditor, _super); function SurveyPropertyDefaultRowValueEditor(property) { return _super.call(this, property) || this; } SurveyPropertyDefaultRowValueEditor.prototype.buildQuestionJson = function () { var qjson = _super.prototype.buildQuestionJson.call(this); qjson.rowCount = 1; qjson.minRowCount = 1; qjson.maxRowCount = 1; qjson.columnsLocation = "vertical"; return qjson; }; Object.defineProperty(SurveyPropertyDefaultRowValueEditor.prototype, "editorType", { get: function () { return "rowvalue"; }, enumerable: true, configurable: true }); return SurveyPropertyDefaultRowValueEditor; }(SurveyPropertyDefaultRowValueEditorBase)); var SurveyPropertyDefaultPanelValueEditor = /** @class */ (function (_super) { __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__["a" /* __extends */])(SurveyPropertyDefaultPanelValueEditor, _super); function SurveyPropertyDefaultPanelValueEditor(property) { return _super.call(this, property) || this; } SurveyPropertyDefaultPanelValueEditor.prototype.buildQuestionJson = function () { var qjson = _super.prototype.buildQuestionJson.call(this); qjson.panelCount = 1; qjson.minPanelCount = 1; qjson.maxPanelCount = 1; return qjson; }; Object.defineProperty(SurveyPropertyDefaultPanelValueEditor.prototype, "editorType", { get: function () { return "panelvalue"; }, enumerable: true, configurable: true }); return SurveyPropertyDefaultPanelValueEditor; }(SurveyPropertyDefaultRowValueEditorBase)); var SurveyPropertySetEditor = /** @class */ (function (_super) { __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__["a" /* __extends */])(SurveyPropertySetEditor, _super); function SurveyPropertySetEditor(property) { return _super.call(this, property) || this; } Object.defineProperty(SurveyPropertySetEditor.prototype, "editorType", { get: function () { return "set"; }, enumerable: true, configurable: true }); Object.defineProperty(SurveyPropertySetEditor.prototype, "editorTypeTemplate", { get: function () { return "value"; }, enumerable: true, configurable: true }); SurveyPropertySetEditor.prototype.getSurveyInitialValue = function () { var res = this.editingValue; if (!res) return res; if (!Array.isArray(res)) { res = [res]; } return res; }; SurveyPropertySetEditor.prototype.buildQuestionJson = function () { var question = new __WEBPACK_IMPORTED_MODULE_2_survey_knockout__["QuestionCheckbox"]("q1"); var hasTagbox = !!__WEBPACK_IMPORTED_MODULE_2_survey_knockout__["Serializer"].findClass("tagbox"); question.hasSelectAll = !hasTagbox; if (!!this.property) { question.choices = this.property.getChoices(this.object); } var json = SurveyPropertyDefaultValueEditor.createJsonFromQuestion(question, this.readOnly()); if (hasTagbox) { json.type = "tagbox"; } return json; }; return SurveyPropertySetEditor; }(SurveyPropertyDefaultValueEditor)); __WEBPACK_IMPORTED_MODULE_5__propertyEditorFactory__["a" /* SurveyPropertyEditorFactory */].registerEditor("value", function (property) { return new SurveyPropertyDefaultValueEditor(property); }); __WEBPACK_IMPORTED_MODULE_5__propertyEditorFactory__["a" /* SurveyPropertyEditorFactory */].registerEditor("rowvalue", function (property) { return new SurveyPropertyDefaultRowValueEditor(property); }); __WEBPACK_IMPORTED_MODULE_5__propertyEditorFactory__["a" /* SurveyPropertyEditorFactory */].registerEditor("panelvalue", function (property) { return new SurveyPropertyDefaultPanelValueEditor(property); }); __WEBPACK_IMPORTED_MODULE_5__propertyEditorFactory__["a" /* SurveyPropertyEditorFactory */].registerEditor("set", function (property) { return new SurveyPropertySetEditor(property); }); /***/ }), /* 33 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(3); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_knockout__ = __webpack_require__(1); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_knockout___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_knockout__); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_survey_knockout__ = __webpack_require__(2); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_survey_knockout___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_survey_knockout__); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__propertyItemsEditor__ = __webpack_require__(14); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__editorLocalization__ = __webpack_require__(0); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__propertyEditorFactory__ = __webpack_require__(4); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__propertyConditionEditor__ = __webpack_require__(21); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__propertyDefaultValueEditor__ = __webpack_require__(32); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_8__entries__ = __webpack_require__(20); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_9__expressionToDisplayText__ = __webpack_require__(44); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_10__editableObject__ = __webpack_require__(10); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return SurveyPropertyTriggersEditor; }); /* unused harmony export SurveyPropertyTrigger */ /* unused harmony export SurveyPropertyVisibleTrigger */ /* unused harmony export SurveyPropertySetValueTrigger */ /* unused harmony export SurveyPropertyCopyValueTrigger */ /* unused harmony export SurveyPropertySkipTrigger */ /* unused harmony export SurveyPropertyRunExpressionTrigger */ /* unused harmony export SurveyPropertyTriggerObjects */ var SurveyPropertyTriggersEditor = /** @class */ (function (_super) { __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__["a" /* __extends */])(SurveyPropertyTriggersEditor, _super); function SurveyPropertyTriggersEditor(property) { var _this = _super.call(this, property) || this; _this.availableTriggers = []; _this.triggerClasses = []; var self = _this; _this.onDeleteClick = function () { if (self.readOnly()) return; self.koItems.remove(self.koSelected()); }; _this.onAddClick = function (item) { self.addItem(item.value); }; _this.koSelected = __WEBPACK_IMPORTED_MODULE_1_knockout__["observable"](null); _this.koSelected.subscribe(function (newValue) { if (!!newValue) { newValue.beforeShow(); } }); _this.koPages = __WEBPACK_IMPORTED_MODULE_1_knockout__["observableArray"](); _this.koQuestions = __WEBPACK_IMPORTED_MODULE_1_knockout__["observableArray"](); _this.koElements = __WEBPACK_IMPORTED_MODULE_1_knockout__["observableArray"](); _this.triggerClasses = __WEBPACK_IMPORTED_MODULE_2_survey_knockout__["Serializer"].getChildrenClasses("surveytrigger", true); _this.availableTriggers = _this.getAvailableTriggers(); _this.koTriggers = __WEBPACK_IMPORTED_MODULE_1_knockout__["observableArray"](_this.getLocalizedTriggers()); return _this; } SurveyPropertyTriggersEditor.createTriggerEditor = function (survey, trigger, options) { trigger["survey"] = survey; if (trigger.getType() == "setvaluetrigger") return new SurveyPropertySetValueTrigger(survey, trigger, options); if (trigger.getType() == "copyvaluetrigger") return new SurveyPropertyCopyValueTrigger(survey, trigger, options); if (trigger.getType() == "skiptrigger") return new SurveyPropertySkipTrigger(survey, trigger, options); if (trigger.getType() == "runexpressiontrigger") return new SurveyPropertyRunExpressionTrigger(survey, trigger, options); return new SurveyPropertyTrigger(survey, trigger, options); }; Object.defineProperty(SurveyPropertyTriggersEditor.prototype, "editorType", { get: function () { return "triggers"; }, enumerable: true, configurable: true }); SurveyPropertyTriggersEditor.prototype.onValueChanged = function () { if (this.editingObject) { var allQuestions = this.getOrigionalSurvey().getAllQuestions(); this.koPages(this.getElements(this.getOrigionalSurvey().pages)); this.koQuestions(this.getElements(allQuestions)); this.koElements(this.getElements(this.getAllElements())); } _super.prototype.onValueChanged.call(this); if (this.koSelected) { this.koSelected(this.koItems().length > 0 ? this.koItems()[0] : null); } }; //TODO this code should be in the library SurveyPropertyTriggersEditor.prototype.getAllElements = function () { var res = []; var pages = this.getOrigionalSurvey().pages; for (var i = 0; i < pages.length; i++) { this.addElemenetsIntoList(pages[i], res); } return res; }; SurveyPropertyTriggersEditor.prototype.addElemenetsIntoList = function (element, list) { var elements = element.getElementsInDesign(false); if (!elements) return; for (var i = 0; i < elements.length; i++) { list.push(elements[i]); this.addElemenetsIntoList(elements[i], list); } }; SurveyPropertyTriggersEditor.prototype.addItem = function (triggerType) { var trigger = __WEBPACK_IMPORTED_MODULE_2_survey_knockout__["Serializer"].createClass(triggerType); var triggerItem = this.createPropertyTrigger(trigger); this.koItems.push(triggerItem); this.koSelected(triggerItem); }; SurveyPropertyTriggersEditor.prototype.createEditorItem = function (item) { var jsonObj = new __WEBPACK_IMPORTED_MODULE_2_survey_knockout__["JsonObject"](); var trigger = __WEBPACK_IMPORTED_MODULE_2_survey_knockout__["Serializer"].createClass(item.getType()); jsonObj.toObject(item, trigger); return this.createPropertyTrigger(trigger); }; SurveyPropertyTriggersEditor.prototype.createItemFromEditorItem = function (editorItem) { var editorTrigger = editorItem; return editorTrigger.createTrigger(); }; SurveyPropertyTriggersEditor.prototype.getLocalizedTriggers = function () { var res = []; for (var i = 0; i < this.availableTriggers.length; i++) { var name = this.availableTriggers[i]; res.push({ value: name, text: __WEBPACK_IMPORTED_MODULE_4__editorLocalization__["a" /* editorLocalization */].getTriggerName(name) }); } return res; }; SurveyPropertyTriggersEditor.prototype.getAvailableTriggers = function () { var result = []; for (var i = 0; i < this.triggerClasses.length; i++) { var name = this.triggerClasses[i].name; if (name == "visibletrigger") continue; result.push(name); } return result; }; SurveyPropertyTriggersEditor.prototype.getElements = function (items) { var _this = this; var elements = []; var options = this.options; items.forEach(function (item) { var element = {}; element.name = item.name; element.text = item.name; if (_this.options && _this.options.showTitlesInExpressions && item["title"]) { element.text = item.title; } if (item.isPage) { element.page = item; } else { element.question = item; } elements.push(element); }); options && options.onConditionQuestionsGetListCallback(this.editablePropertyName, this, options, elements); return elements; }; SurveyPropertyTriggersEditor.prototype.createPropertyTrigger = function (trigger) { var survey = this.getSurvey(); trigger["survey"] = survey; if (trigger.getType() == "visibletrigger") { return new SurveyPropertyVisibleTrigger(survey, trigger, this.options, this.koPages, this.koElements); } return SurveyPropertyTriggersEditor.createTriggerEditor(survey, trigger, this.options); }; SurveyPropertyTriggersEditor.prototype.getSurvey = function () { return !!this.object ? this.object : this.editingObject; }; SurveyPropertyTriggersEditor.prototype.getOrigionalSurvey = function () { return __WEBPACK_IMPORTED_MODULE_10__editableObject__["a" /* EditableObject */].getOrigionalSurvey(this.getSurvey()); }; return SurveyPropertyTriggersEditor; }(__WEBPACK_IMPORTED_MODULE_3__propertyItemsEditor__["a" /* SurveyPropertyItemsEditor */])); var SurveyPropertyTrigger = /** @class */ (function () { function SurveyPropertyTrigger(survey, trigger, options) { this.survey = survey; this.trigger = trigger; this.options = options; this.conditionEditor = null; this.triggerType = trigger.getType(); this.koType = __WEBPACK_IMPORTED_MODULE_1_knockout__["observable"](this.triggerType); var expressionProperty = __WEBPACK_IMPORTED_MODULE_2_survey_knockout__["Serializer"].findProperty("trigger", "expression"); this.conditionEditor = new __WEBPACK_IMPORTED_MODULE_6__propertyConditionEditor__["a" /* SurveyPropertyConditionEditor */](expressionProperty); this.conditionEditor.options = options; this.conditionEditor.showHelpText = false; if (!this.trigger.expression) { this.trigger.expression = this.trigger.buildExpression(); } this.conditionEditor.object = this.trigger; var self = this; this.koIsValid = __WEBPACK_IMPORTED_MODULE_1_knockout__["computed"](function () { var text = self.conditionEditor.koTextValue(); return !!text; }); this.koText = __WEBPACK_IMPORTED_MODULE_1_knockout__["computed"](function () { return self.getText(); }); } SurveyPropertyTrigger.prototype.beforeShow = function () { this.conditionEditor.beforeShow(); }; SurveyPropertyTrigger.prototype.hasError = function () { return false; }; SurveyPropertyTrigger.prototype.createTrigger = function () { var trigger = (__WEBPACK_IMPORTED_MODULE_2_survey_knockout__["Serializer"].createClass(this.triggerType)); trigger["expression"] = this.conditionEditor.koTextValue(); this.applyProperties(trigger); return trigger; }; SurveyPropertyTrigger.prototype.applyProperties = function (trigger) { }; SurveyPropertyTrigger.prototype.getText = function () { if (!this.koIsValid()) return __WEBPACK_IMPORTED_MODULE_4__editorLocalization__["a" /* editorLocalization */].getString("pe.triggerNotSet"); var res = this.conditionEditor.koTextValue(); if (!res) return ""; if (!!this.options && this.options.showTitlesInExpressions) { res = new __WEBPACK_IMPORTED_MODULE_9__expressionToDisplayText__["a" /* ExpressionToDisplayText */](this.survey).toDisplayText(res); } return __WEBPACK_IMPORTED_MODULE_4__editorLocalization__["a" /* editorLocalization */].getString("pe.triggerRunIf") + ": " + res; }; Object.defineProperty(SurveyPropertyTrigger.prototype, "setToNameOptions", { get: function () { return __WEBPACK_IMPORTED_MODULE_4__editorLocalization__["a" /* editorLocalization */].getString("pe.conditionSelectQuestion"); }, enumerable: true, configurable: true }); SurveyPropertyTrigger.prototype.createElementSelector = function (koValue) { var res = new __WEBPACK_IMPORTED_MODULE_8__entries__["SurveyElementSelector"](this.survey, "question", !!this.options && this.options.showTitlesInExpressions); res.value = koValue(); res.onValueChangedCallback = function (newValue) { koValue(newValue); }; return res; }; return SurveyPropertyTrigger; }()); var SurveyPropertyVisibleTrigger = /** @class */ (function (_super) { __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__["a" /* __extends */])(SurveyPropertyVisibleTrigger, _super); function SurveyPropertyVisibleTrigger(valueSurvey, trigger, options, koPages, koQuestions) { var _this = _super.call(this, valueSurvey, trigger, options) || this; _this.valueSurvey = valueSurvey; _this.trigger = trigger; _this.options = options; _this.pages = new SurveyPropertyTriggerObjects(__WEBPACK_IMPORTED_MODULE_4__editorLocalization__["a" /* editorLocalization */].getString("pe.triggerMakePagesVisible"), koPages(), trigger.pages); _this.questions = new SurveyPropertyTriggerObjects(__WEBPACK_IMPORTED_MODULE_4__editorLocalization__["a" /* editorLocalization */].getString("pe.triggerMakeQuestionsVisible"), koQuestions(), trigger.questions); return _this; } SurveyPropertyVisibleTrigger.prototype.applyProperties = function (trigger) { _super.prototype.applyProperties.call(this, trigger); var tr = trigger; tr.pages = this.pages.koChoosen().map(function (o) { return o.name; }); tr.questions = this.questions.koChoosen().map(function (o) { return o.name; }); }; return SurveyPropertyVisibleTrigger; }(SurveyPropertyTrigger)); var SurveyPropertySetValueTrigger = /** @class */ (function (_super) { __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__["a" /* __extends */])(SurveyPropertySetValueTrigger, _super); function SurveyPropertySetValueTrigger(survey, trigger, options) { var _this = _super.call(this, survey, trigger, options) || this; _this.survey = survey; _this.trigger = trigger; _this.options = options; if (!SurveyPropertySetValueTrigger.emptySurvey) { SurveyPropertySetValueTrigger.emptySurvey = !!options && options.createSurvey({}, "triggersEditor"); } _this.koSurvey = __WEBPACK_IMPORTED_MODULE_1_knockout__["observable"](SurveyPropertySetValueTrigger.emptySurvey); _this.koHasSurvey = __WEBPACK_IMPORTED_MODULE_1_knockout__["observable"](false); _this.kosetToName = __WEBPACK_IMPORTED_MODULE_1_knockout__["observable"](trigger.setToName); _this.kosetValue = __WEBPACK_IMPORTED_MODULE_1_knockout__["observable"](trigger.setValue); _this.koisVariable = __WEBPACK_IMPORTED_MODULE_1_knockout__["observable"](trigger.isVariable); _this.setToNameSelector = _this.createElementSelector(_this.kosetToName); var self = _this; _this.kosetToName.subscribe(function (newValue) { if (!self.koisVariable()) { self.kosetValue(null); } self.buildSurvey(); }); _this.koisVariable.subscribe(function (newValue) { self.kosetToName(""); self.kosetValue(null); self.buildSurvey(); }); _this.buildSurvey(); return _this; } SurveyPropertySetValueTrigger.prototype.hasError = function () { return this.setToNameSelector.hasError(); }; SurveyPropertySetValueTrigger.prototype.applyProperties = function (trigger) { _super.prototype.applyProperties.call(this, trigger); var tr = trigger; tr.setToName = this.kosetToName(); tr.setValue = this.kosetValue(); tr.isVariable = this.koisVariable(); }; SurveyPropertySetValueTrigger.prototype.buildSurvey = function () { var question = !this.koisVariable() && !!this.kosetToName() ? this.survey.getQuestionByName(this.kosetToName()) : null; if (!question) { this.valueSurvey = null; this.koHasSurvey(false); this.koSurvey(SurveyPropertySetValueTrigger.emptySurvey); return; } var qJson = __WEBPACK_IMPORTED_MODULE_7__propertyDefaultValueEditor__["a" /* SurveyPropertyDefaultValueEditor */].createJsonFromQuestion(question, false); qJson.titleLocation = "top"; qJson.title = __WEBPACK_IMPORTED_MODULE_4__editorLocalization__["a" /* editorLocalization */].getString("pe.triggerSetValue"); this.valueSurvey = __WEBPACK_IMPORTED_MODULE_7__propertyDefaultValueEditor__["a" /* SurveyPropertyDefaultValueEditor */].createSurveyFromJsonQuestion(qJson, this.options); this.valueSurvey.setValue("question", this.kosetValue()); var self = this; this.valueSurvey.onValueChanged.add(function (sender, options) { self.kosetValue(options.value); }); this.koSurvey(this.valueSurvey); this.koHasSurvey(true); }; SurveyPropertySetValueTrigger.emptySurvey = undefined; return SurveyPropertySetValueTrigger; }(SurveyPropertyTrigger)); var SurveyPropertyCopyValueTrigger = /** @class */ (function (_super) { __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__["a" /* __extends */])(SurveyPropertyCopyValueTrigger, _super); function SurveyPropertyCopyValueTrigger(survey, trigger, options) { var _this = _super.call(this, survey, trigger, options) || this; _this.survey = survey; _this.trigger = trigger; _this.kosetToName = __WEBPACK_IMPORTED_MODULE_1_knockout__["observable"](trigger["setToName"]); _this.kofromName = __WEBPACK_IMPORTED_MODULE_1_knockout__["observable"](trigger["fromName"]); _this.setToNameSelector = _this.createElementSelector(_this.kosetToName); _this.fromNameSelector = _this.createElementSelector(_this.kofromName); return _this; } SurveyPropertyCopyValueTrigger.prototype.hasError = function () { var a = this.setToNameSelector.hasError(); var b = this.fromNameSelector.hasError(); return a || b; }; SurveyPropertyCopyValueTrigger.prototype.applyProperties = function (trigger) { _super.prototype.applyProperties.call(this, trigger); var tr = trigger; tr.setToName = this.kosetToName(); tr.fromName = this.kofromName(); }; return SurveyPropertyCopyValueTrigger; }(SurveyPropertyTrigger)); var SurveyPropertySkipTrigger = /** @class */ (function (_super) { __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__["a" /* __extends */])(SurveyPropertySkipTrigger, _super); function SurveyPropertySkipTrigger(survey, trigger, options) { var _this = _super.call(this, survey, trigger, options) || this; _this.survey = survey; _this.trigger = trigger; _this.koGotoName = __WEBPACK_IMPORTED_MODULE_1_knockout__["observable"](trigger["gotoName"]); _this.gotoNameSelector = _this.createElementSelector(_this.koGotoName); return _this; } SurveyPropertySkipTrigger.prototype.hasError = function () { return this.gotoNameSelector.hasError(); }; SurveyPropertySkipTrigger.prototype.applyProperties = function (trigger) { _super.prototype.applyProperties.call(this, trigger); trigger["gotoName"] = this.koGotoName(); }; return SurveyPropertySkipTrigger; }(SurveyPropertyTrigger)); var SurveyPropertyRunExpressionTrigger = /** @class */ (function (_super) { __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__["a" /* __extends */])(SurveyPropertyRunExpressionTrigger, _super); function SurveyPropertyRunExpressionTrigger(survey, trigger, options) { var _this = _super.call(this, survey, trigger, options) || this; _this.survey = survey; _this.trigger = trigger; _this.kosetToName = __WEBPACK_IMPORTED_MODULE_1_knockout__["observable"](trigger["setToName"]); _this.korunExpression = __WEBPACK_IMPORTED_MODULE_1_knockout__["observable"](trigger["runExpression"]); _this.setToNameSelector = _this.createElementSelector(_this.kosetToName); _this.koErrorText = __WEBPACK_IMPORTED_MODULE_1_knockout__["observable"](""); var self = _this; _this.koDisplayError = __WEBPACK_IMPORTED_MODULE_1_knockout__["computed"](function () { return !!self.koErrorText(); }); return _this; } SurveyPropertyRunExpressionTrigger.prototype.hasError = function () { var text = !this.korunExpression() ? __WEBPACK_IMPORTED_MODULE_4__editorLocalization__["a" /* editorLocalization */].getString("pe.triggerRunExpressionEmpty") : ""; this.koErrorText(text); return !!text; }; SurveyPropertyRunExpressionTrigger.prototype.applyProperties = function (trigger) { _super.prototype.applyProperties.call(this, trigger); trigger["setToName"] = this.kosetToName(); trigger["runExpression"] = this.korunExpression(); }; return SurveyPropertyRunExpressionTrigger; }(SurveyPropertyTrigger)); var SurveyPropertyTriggerObjects = /** @class */ (function () { function SurveyPropertyTriggerObjects(title, allObjects, choosenObjects) { var _this = this; this.title = title; this.koObjects = __WEBPACK_IMPORTED_MODULE_1_knockout__["observableArray"](); this.koChoosen = __WEBPACK_IMPORTED_MODULE_1_knockout__["observableArray"](); this.koSelected = __WEBPACK_IMPORTED_MODULE_1_knockout__["observable"](); this.koChoosenSelected = __WEBPACK_IMPORTED_MODULE_1_knockout__["observable"](); this.deleteItem = function () { _this.changeItems(_this.koChoosenSelected(), _this.koChoosen, _this.koObjects); }; this.addItem = function () { _this.changeItems(_this.koSelected(), _this.koObjects, _this.koChoosen); }; allObjects.forEach(function (obj) { if (choosenObjects.indexOf(obj.name) !== -1) { _this.koChoosen.push(obj); } else { _this.koObjects.push(obj); } }); } SurveyPropertyTriggerObjects.prototype.changeItems = function (item, removedFrom, addTo) { if (!item) return; removedFrom.remove(item); addTo.push(item); removedFrom.sort(); addTo.sort(); }; return SurveyPropertyTriggerObjects; }()); __WEBPACK_IMPORTED_MODULE_5__propertyEditorFactory__["a" /* SurveyPropertyEditorFactory */].registerEditor("triggers", function (property) { return new SurveyPropertyTriggersEditor(property); }); /***/ }), /* 34 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_knockout__ = __webpack_require__(1); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_knockout___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_knockout__); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__editorLocalization__ = __webpack_require__(0); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__editableObject__ = __webpack_require__(10); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return SurveyElementSelector; }); var SurveyElementSelector = /** @class */ (function () { function SurveyElementSelector(survey, elementType, showTitle, optionsCaptionName) { if (elementType === void 0) { elementType = "question"; } if (showTitle === void 0) { showTitle = false; } if (optionsCaptionName === void 0) { optionsCaptionName = ""; } this.survey = survey; this.disableCallback = false; this.selectedValues = []; this.survey = __WEBPACK_IMPORTED_MODULE_2__editableObject__["a" /* EditableObject */].getOrigionalSurvey(this.survey); this.showTitle = showTitle; this.optionsCaptionValue = this.getOptionsText(optionsCaptionName, elementType); this.koValue = __WEBPACK_IMPORTED_MODULE_0_knockout__["observable"](""); var self = this; this.koValue.subscribe(function (newValue) { if (self.disableCallback || !self.onValueChangedCallback) return; self.onValueChangedCallback(newValue); }); this.koElements = __WEBPACK_IMPORTED_MODULE_0_knockout__["observableArray"](this.buildElements(elementType)); this.koHasFocus = __WEBPACK_IMPORTED_MODULE_0_knockout__["observable"](false); this.koHasFocus.subscribe(function (newValue) { if (newValue) { self.updateItems(); } }); this.koErrorText = __WEBPACK_IMPORTED_MODULE_0_knockout__["observable"](""); this.koDisplayError = __WEBPACK_IMPORTED_MODULE_0_knockout__["computed"](function () { return !!self.koErrorText(); }); } Object.defineProperty(SurveyElementSelector.prototype, "value", { get: function () { return this.koValue(); }, set: function (val) { this.disableCallback = true; this.koValue(val); this.selectedValues.push(val); this.disableCallback = false; }, enumerable: true, configurable: true }); Object.defineProperty(SurveyElementSelector.prototype, "element", { get: function () { var el = this.findItemByName(this.value); return !!el ? el.element : null; }, set: function (val) { var el = this.findItemByElement(val); if (!!el) { this.value = el.name; } }, enumerable: true, configurable: true }); SurveyElementSelector.prototype.findItemByName = function (name) { if (!name) return null; var items = this.koElements(); for (var i = 0; i < items.length; i++) { if (items[i].name == name) return items[i]; } return null; }; SurveyElementSelector.prototype.findItemByElement = function (el) { if (!el) return null; var items = this.koElements(); for (var i = 0; i < items.length; i++) { if (items[i].element === el) return items[i]; } return null; }; Object.defineProperty(SurveyElementSelector.prototype, "optionsCaption", { get: function () { return this.optionsCaptionValue; }, enumerable: true, configurable: true }); SurveyElementSelector.prototype.updateItems = function () { if (!this.disabledPropertyName) return; var items = this.koElements(); for (var i = 0; i < items.length; i++) { var item = items[i]; var disabled = !!item.element[this.disabledPropertyName] && this.selectedValues.indexOf(item.name) < 0; item.koDisabled(disabled); } }; SurveyElementSelector.prototype.hasError = function () { var text = !this.element ? __WEBPACK_IMPORTED_MODULE_1__editorLocalization__["a" /* editorLocalization */].getString("pe.itemSelectorEmpty") : ""; this.koErrorText(text); return !!text; }; SurveyElementSelector.prototype.buildElements = function (elementType) { var elements = []; if (elementType == "question") { elements = this.survey.getAllQuestions(); } if (elementType == "page") { elements = this.survey.pages; } if (elementType == "panel") { elements = this.survey.getAllPanels(); } var res = []; for (var i = 0; i < elements.length; i++) { var el = elements[i]; var text = ""; if (this.showTitle) { text = el.locTitle.renderedHtml; } if (!text) text = el.name; res.push({ name: el.name, text: text, element: el, koDisabled: __WEBPACK_IMPORTED_MODULE_0_knockout__["observable"](false) }); } return res; }; SurveyElementSelector.prototype.getOptionsText = function (optionsCaptionName, elementType) { if (!optionsCaptionName) { optionsCaptionName = elementType == "page" ? "pe.conditionSelectPage" : elementType == "panel" ? "pe.conditionSelectPanel" : "pe.conditionSelectQuestion"; } return __WEBPACK_IMPORTED_MODULE_1__editorLocalization__["a" /* editorLocalization */].getString(optionsCaptionName); }; return SurveyElementSelector; }()); /***/ }), /* 35 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__editorLocalization__ = __webpack_require__(0); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_survey_knockout__ = __webpack_require__(2); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_survey_knockout___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_survey_knockout__); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__objectProperty__ = __webpack_require__(12); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__surveyHelper__ = __webpack_require__(5); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "c", function() { return SurveyQuestionEditorProperty; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return SurveyQuestionEditorRow; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return SurveyQuestionEditorProperties; }); var SurveyQuestionEditorProperty = /** @class */ (function () { function SurveyQuestionEditorProperty(obj, property, displayName, options, isTabProperty, getEditorPropertyByName) { if (options === void 0) { options = null; } if (isTabProperty === void 0) { isTabProperty = false; } if (getEditorPropertyByName === void 0) { getEditorPropertyByName = null; } this.obj = obj; this.property = property; this.getEditorPropertyByName = getEditorPropertyByName; var self = this; this.objectPropertyValue = new __WEBPACK_IMPORTED_MODULE_2__objectProperty__["a" /* SurveyObjectProperty */](this.property, function (property, newValue) { self.onPropertyChanged(property, newValue); }, options); this.editor.isTabProperty = isTabProperty; if (!displayName) { displayName = __WEBPACK_IMPORTED_MODULE_0__editorLocalization__["a" /* editorLocalization */].getPropertyInEditor(this.property.name); } if (displayName) this.editor.displayName = displayName; this.objectProperty.onDependedPropertyUpdateCallback = function (propertyName) { self.updateDependedProperty(propertyName); }; this.objectProperty.object = obj; this.editor.setup(); } Object.defineProperty(SurveyQuestionEditorProperty.prototype, "objectProperty", { get: function () { return this.objectPropertyValue; }, enumerable: true, configurable: true }); Object.defineProperty(SurveyQuestionEditorProperty.prototype, "editor", { get: function () { return this.objectProperty.editor; }, enumerable: true, configurable: true }); SurveyQuestionEditorProperty.prototype.hasError = function () { return this.editor.hasError(); }; SurveyQuestionEditorProperty.prototype.apply = function () { if (this.editor.apply()) { this.obj[this.property.name] = this.editor.koValue(); return true; } return false; }; SurveyQuestionEditorProperty.prototype.applyToObj = function (obj) { if (__WEBPACK_IMPORTED_MODULE_1_survey_knockout__["Helpers"].isTwoValueEquals(obj[this.property.name], this.obj[this.property.name])) return; obj[this.property.name] = this.obj[this.property.name]; }; SurveyQuestionEditorProperty.prototype.reset = function () { this.editor.koValue(this.property.getPropertyValue(this.obj)); }; SurveyQuestionEditorProperty.prototype.beforeShow = function () { this.editor.beforeShow(); this.objectProperty.updateDynamicProperties(); }; SurveyQuestionEditorProperty.prototype.onPropertyChanged = function (property, newValue) { this.obj[this.property.name] = newValue; }; SurveyQuestionEditorProperty.prototype.updateDependedProperty = function (propertyName) { if (!this.getEditorPropertyByName) return; var prop = this.getEditorPropertyByName(propertyName); if (!!prop) { prop.objectProperty.updateDynamicProperties(); } }; return SurveyQuestionEditorProperty; }()); var SurveyQuestionEditorRow = /** @class */ (function () { function SurveyQuestionEditorRow(obj, getEditorPropertyByName) { if (getEditorPropertyByName === void 0) { getEditorPropertyByName = null; } this.obj = obj; this.getEditorPropertyByName = getEditorPropertyByName; this.properties = []; } SurveyQuestionEditorRow.prototype.addProperty = function (property, displayName, options, isTabProperty) { this.properties.push(new SurveyQuestionEditorProperty(this.obj, property, displayName, options, isTabProperty, this.getEditorPropertyByName)); }; SurveyQuestionEditorRow.prototype.hasError = function () { var isError = false; for (var i = 0; i < this.properties.length; i++) { isError = this.properties[i].hasError() || isError; } return isError; }; return SurveyQuestionEditorRow; }()); var SurveyQuestionEditorProperties = /** @class */ (function () { function SurveyQuestionEditorProperties(obj, properties, options, tab, getEditorPropertyByName) { if (options === void 0) { options = null; } if (tab === void 0) { tab = null; } if (getEditorPropertyByName === void 0) { getEditorPropertyByName = null; } this.obj = obj; this.options = options; this.tab = tab; this.getEditorPropertyByName = getEditorPropertyByName; this.isTabProperty = false; this.rows = []; this.isTabProperty = !!tab; this.properties = __WEBPACK_IMPORTED_MODULE_1_survey_knockout__["Serializer"].getPropertiesByObj(this.obj); this.buildRows(properties); } SurveyQuestionEditorProperties.prototype.apply = function () { var res = true; this.performForAllProperties(function (p) { return (res = p.apply() && res); }); return res; }; SurveyQuestionEditorProperties.prototype.applyToObj = function (obj) { this.performForAllProperties(function (p) { return p.applyToObj(obj); }); }; SurveyQuestionEditorProperties.prototype.reset = function () { this.performForAllProperties(function (p) { return p.reset(); }); }; SurveyQuestionEditorProperties.prototype.beforeShow = function () { this.performForAllProperties(function (p) { return p.beforeShow(); }); if (this.getAllProperties().length === 1 && this.isTabProperty && this.tab.visible !== undefined) { this.getAllProperties()[0].objectProperty.koVisible(this.tab.visible); } }; SurveyQuestionEditorProperties.prototype.hasError = function () { var isError = false; for (var i = 0; i < this.rows.length; i++) { isError = this.rows[i].hasError() || isError; } return isError; }; SurveyQuestionEditorProperties.prototype.getPropertyEditorByName = function (propertyName) { var props = this.getAllProperties(); for (var i = 0; i < props.length; i++) { if (props[i].property.name == propertyName) return props[i]; } }; SurveyQuestionEditorProperties.prototype.performForAllProperties = function (func) { var props = this.getAllProperties(); for (var i = 0; i < props.length; i++) { func(props[i]); } }; SurveyQuestionEditorProperties.prototype.getAllProperties = function () { var res = []; for (var i = 0; i < this.rows.length; i++) { for (var j = 0; j < this.rows[i].properties.length; j++) { res.push(this.rows[i].properties[j]); } } return res; }; SurveyQuestionEditorProperties.prototype.buildRows = function (properties) { for (var i = 0; i < properties.length; i++) { var name = this.getName(properties[i]); var jsonProperty = this.getProperty(name); if (!jsonProperty) continue; var row = this.getRowByCategory(properties[i].category); if (!row) { row = new SurveyQuestionEditorRow(this.obj, this.getEditorPropertyByName); if (properties[i].category) row.category = properties[i].category; this.rows.push(row); } row.addProperty(jsonProperty, properties[i].title, this.options, properties.length === 1 && this.isTabProperty); } }; SurveyQuestionEditorProperties.prototype.getName = function (prop) { if (!prop) return null; if (typeof prop === "string") return prop; if (prop.name) return prop.name; return null; }; SurveyQuestionEditorProperties.prototype.getRowByCategory = function (category) { if (!category) return null; for (var i = 0; i < this.rows.length; i++) { if (this.rows[i].category == category) return this.rows[i]; } return null; }; SurveyQuestionEditorProperties.prototype.getProperty = function (propertyName) { if (!propertyName) return null; var property = null; for (var i = 0; i < this.properties.length; i++) { if (this.properties[i].name == propertyName) { property = this.properties[i]; break; } } if (!property) return null; if (!!this.tab && property.name == this.tab.name && this.tab.visible === true) return property; return __WEBPACK_IMPORTED_MODULE_3__surveyHelper__["b" /* SurveyHelper */].isPropertyVisible(this.obj, property, this.options) ? property : null; }; return SurveyQuestionEditorProperties; }()); /***/ }), /* 36 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_knockout__ = __webpack_require__(1); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_knockout___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_knockout__); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_survey_knockout__ = __webpack_require__(2); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_survey_knockout___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_survey_knockout__); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__editorLocalization__ = __webpack_require__(0); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return QuestionToolbox; }); /** * The list of Toolbox items. */ var QuestionToolbox = /** @class */ (function () { function QuestionToolbox(supportedQuestions) { if (supportedQuestions === void 0) { supportedQuestions = null; } this.supportedQuestions = supportedQuestions; this._orderedQuestions = [ "text", "checkbox", "radiogroup", "dropdown", "comment", "rating", "imagepicker", "boolean", "html" ]; this._questionDefaultSettings = { imagepicker: function () { return { choices: [ { value: "lion", imageLink: "https://surveyjs.io/Content/Images/examples/image-picker/lion.jpg" }, { value: "giraffe", imageLink: "https://surveyjs.io/Content/Images/examples/image-picker/giraffe.jpg" }, { value: "panda", imageLink: "https://surveyjs.io/Content/Images/examples/image-picker/panda.jpg" }, { value: "camel", imageLink: "https://surveyjs.io/Content/Images/examples/image-picker/camel.jpg" } ] }; } }; /** * The maximum number of copied toolbox items. If an user adding copiedItemMaxCount + 1 item, the first added item will be removed. */ this.copiedItemMaxCount = 3; this.allowExpandMultipleCategoriesValue = false; this.keepAllCategoriesExpandedValue = false; this.itemsValue = []; this.koItems = __WEBPACK_IMPORTED_MODULE_0_knockout__["observableArray"](); this.koCategories = __WEBPACK_IMPORTED_MODULE_0_knockout__["observableArray"](); this.koActiveCategory = __WEBPACK_IMPORTED_MODULE_0_knockout__["observable"](""); this.koHasCategories = __WEBPACK_IMPORTED_MODULE_0_knockout__["observable"](false); this.koCanCollapseCategories = __WEBPACK_IMPORTED_MODULE_0_knockout__["observable"](true); this.createDefaultItems(supportedQuestions); var self = this; this.koActiveCategory.subscribe(function (newValue) { for (var i = 0; i < self.koCategories().length; i++) { var category = self.koCategories()[i]; category.koCollapsed(category.name !== newValue); } }); } Object.defineProperty(QuestionToolbox.prototype, "orderedQuestions", { /** * Modify this array to change the toolbox items order. */ get: function () { return this._orderedQuestions; }, set: function (questions) { this._orderedQuestions = questions; this.reorderItems(); }, enumerable: true, configurable: true }); Object.defineProperty(QuestionToolbox.prototype, "jsonText", { /** * The Array of Toolbox items as Text JSON. */ get: function () { return JSON.stringify(this.itemsValue); }, set: function (value) { this.itemsValue = value ? JSON.parse(value) : []; this.onItemsChanged(); }, enumerable: true, configurable: true }); Object.defineProperty(QuestionToolbox.prototype, "copiedJsonText", { /** * The Array of copied Toolbox items as Text JSON. */ get: function () { return JSON.stringify(this.copiedItems); }, set: function (value) { var newItems = value ? JSON.parse(value) : []; this.clearCopiedItems(); for (var i = 0; i < newItems.length; i++) { newItems[i].isCopied = true; this.addItem(newItems[i]); } }, enumerable: true, configurable: true }); Object.defineProperty(QuestionToolbox.prototype, "items", { /** * The Array of Toolbox items. */ get: function () { return this.itemsValue; }, enumerable: true, configurable: true }); Object.defineProperty(QuestionToolbox.prototype, "itemNames", { get: function () { var res = []; for (var i = 0; i < this.items.length; i++) { res.push(this.items[i].name); } return res; }, enumerable: true, configurable: true }); Object.defineProperty(QuestionToolbox.prototype, "copiedItems", { /** * The Array of copied Toolbox items */ get: function () { var result = []; for (var i = 0; i < this.itemsValue.length; i++) { if (this.itemsValue[i].isCopied) result.push(this.itemsValue[i]); } return result; }, enumerable: true, configurable: true }); /** * Add toolbox items into the Toolbox * @param items the list of new items * @param clearAll set it to true to clear all previous items. */ QuestionToolbox.prototype.addItems = function (items, clearAll) { if (clearAll === void 0) { clearAll = false; } if (clearAll) { this.clearItems(); } for (var i = 0; i < items.length; i++) { this.itemsValue.push(items[i]); } this.onItemsChanged(); }; /** * Add a copied Question into Toolbox * @param question a copied Survey.Question * @param options a json object that allows you to override question properties. Attributes are: name, title, tooltip, isCopied, iconName, json and category. */ QuestionToolbox.prototype.addCopiedItem = function (question, options) { if (options === void 0) { options = null; } if (!options) options = {}; var name = !!options.name ? options.name : question.name; var title = !!options.title ? options.title : name; var tooltip = !!options.tooltip ? options.tooltip : title; var item = { name: name, title: title, tooltip: tooltip, isCopied: options.isCopied !== false, iconName: !!options.iconName ? options.iconName : "icon-default", json: !!options.json ? options.json : this.getQuestionJSON(question), category: !!options.category ? options.category : "" }; if (this.replaceItem(item)) return; var copied = this.copiedItems; if (this.copiedItemMaxCount > 0 && copied.length == this.copiedItemMaxCount) this.removeItem(copied[this.copiedItemMaxCount - 1].name); this.addItem(item); }; /** * Add a toolbox item * @param item the toolbox item description * @see IQuestionToolboxItem */ QuestionToolbox.prototype.addItem = function (item) { this.correctItem(item); this.itemsValue.push(item); this.onItemsChanged(); }; QuestionToolbox.prototype.correctItem = function (item) { if (!item.title) item.title = item.name; if (!item.tooltip) item.tooltip = item.title; }; /** * Add a new toolbox item, add delete the old item with the same name * @param item the toolbox item description * @see IQuestionToolboxItem */ QuestionToolbox.prototype.replaceItem = function (item) { this.correctItem(item); var index = this.indexOf(item.name); if (index < 0) return; this.itemsValue[index] = item; this.onItemsChanged(); return true; }; /** * Remove a toolbox item by it's name * @param name toolbox item name * @see IQuestionToolboxItem */ QuestionToolbox.prototype.removeItem = function (name) { var index = this.indexOf(name); if (index < 0) return false; this.itemsValue.splice(index, 1); this.onItemsChanged(); return true; }; /** * Remove all toolbox items. */ QuestionToolbox.prototype.clearItems = function () { this.itemsValue = []; this.onItemsChanged(); }; /** * Remove all copied toolbox items. */ QuestionToolbox.prototype.clearCopiedItems = function () { var removedItems = this.copiedItems; for (var i = 0; i < removedItems.length; i++) { this.removeItem(removedItems[i].name); } }; /** * Returns toolbox item by its name. Returns null if there is no toolbox item with this name * @param name */ QuestionToolbox.prototype.getItemByName = function (name) { var index = this.indexOf(name); return index > -1 ? this.itemsValue[index] : null; }; Object.defineProperty(QuestionToolbox.prototype, "allowExpandMultipleCategories", { /** * Set it to true, to allow end-user to expand more than one category. There will no active category in this case * @see activeCategory */ get: function () { return this.allowExpandMultipleCategoriesValue; }, set: function (val) { this.allowExpandMultipleCategoriesValue = val; this.updateCategoriesState(); }, enumerable: true, configurable: true }); Object.defineProperty(QuestionToolbox.prototype, "keepAllCategoriesExpanded", { /** * Set it to true to expand all categories and hide expand/collapse category buttons */ get: function () { return this.keepAllCategoriesExpandedValue; }, set: function (val) { this.keepAllCategoriesExpandedValue = val; this.koCanCollapseCategories(!this.keepAllCategoriesExpanded); this.updateCategoriesState(); }, enumerable: true, configurable: true }); QuestionToolbox.prototype.updateCategoriesState = function () { var noActive = this.allowExpandMultipleCategories || this.keepAllCategoriesExpanded; if (noActive) { this.activeCategory = ""; if (this.keepAllCategoriesExpanded) { this.expandAllCategories(); } } else { if (this.koCategories().length > 0) { this.activeCategory = this.koCategories()[0].name; } } }; /** * Change the category of the toolbox item * @param name the toolbox item name * @param category new category name */ QuestionToolbox.prototype.changeCategory = function (name, category) { this.changeCategories([{ name: name, category: category }]); }; /** * Change categories for several toolbox items. * @param changedItems the array of objects {name: "your toolbox item name", category: "new category name"} */ QuestionToolbox.prototype.changeCategories = function (changedItems) { for (var i = 0; i < changedItems.length; i++) { var item = changedItems[i]; var toolboxItem = this.getItemByName(item.name); if (toolboxItem) { toolboxItem.category = item.category; } } this.onItemsChanged(); }; Object.defineProperty(QuestionToolbox.prototype, "activeCategory", { /** * Set and get and active category. This property doesn't work if allowExpandMultipleCategories is true. Its default value is empty. * @see allowExpandMultipleCategories * @see expandCategory * @see collapseCategory */ get: function () { return this.koActiveCategory(); }, set: function (val) { this.koActiveCategory(val); }, enumerable: true, configurable: true }); QuestionToolbox.prototype.doCategoryClick = function (categoryName) { if (this.keepAllCategoriesExpanded) return; if (this.allowExpandMultipleCategories) { var category = this.getCategoryByName(categoryName); if (category) { category.koCollapsed(!category.koCollapsed()); } } else { this.activeCategory = categoryName; } }; /** * Expand a category by its name. If allowExpandMultipleCategories is false (default value), all other categories become collapsed * @param categoryName the category name * @see allowExpandMultipleCategories * @see collapseCategory */ QuestionToolbox.prototype.expandCategory = function (categoryName) { if (this.allowExpandMultipleCategories) { var category = this.getCategoryByName(categoryName); if (category) { category.koCollapsed(false); } } else { this.activeCategory = categoryName; } }; /** * Collapse a category by its name. If allowExpandMultipleCategories is false (default value) this function does nothing * @param categoryName the category name * @see allowExpandMultipleCategories */ QuestionToolbox.prototype.collapseCategory = function (categoryName) { if (!this.allowExpandMultipleCategories) return; var category = this.getCategoryByName(categoryName); if (category) { category.koCollapsed(true); } }; /** * Expand all categories. If allowExpandMultipleCategories is false (default value) this function does nothing * @see allowExpandMultipleCategories */ QuestionToolbox.prototype.expandAllCategories = function () { this.expandCollapseAllCategories(false); }; /** * Collapse all categories. If allowExpandMultipleCategories is false (default value) this function does nothing * @see allowExpandMultipleCategories */ QuestionToolbox.prototype.collapseAllCategories = function () { this.expandCollapseAllCategories(true); }; QuestionToolbox.prototype.expandCollapseAllCategories = function (isCollapsed) { var categories = this.koCategories(); for (var i = 0; i < categories.length; i++) { categories[i].koCollapsed(isCollapsed); } }; QuestionToolbox.prototype.getCategoryByName = function (categoryName) { var categories = this.koCategories(); for (var i = 0; i < categories.length; i++) { var category = categories[i]; if (category.name === categoryName) return category; } return null; }; QuestionToolbox.prototype.onItemsChanged = function () { this.koItems([]); this.koItems(this.itemsValue); var categories = []; var categoriesHash = {}; var prevActiveCategory = this.koActiveCategory(); var self = this; for (var i = 0; i < this.itemsValue.length; i++) { var item = this.itemsValue[i]; var categoryName = item.category ? item.category : __WEBPACK_IMPORTED_MODULE_2__editorLocalization__["a" /* editorLocalization */].getString("ed.toolboxGeneralCategory"); //TODO if (!categoriesHash[categoryName]) { var category = { name: categoryName, items: [], koCollapsed: __WEBPACK_IMPORTED_MODULE_0_knockout__["observable"](categoryName !== prevActiveCategory), expand: function () { self.doCategoryClick(this.name); } }; categoriesHash[categoryName] = category; categories.push(category); } categoriesHash[categoryName].items.push(item); } this.koCategories(categories); if (!this.allowExpandMultipleCategories) { if (prevActiveCategory && categoriesHash[prevActiveCategory]) { this.koActiveCategory(prevActiveCategory); } else { this.koActiveCategory(categories.length > 0 ? categories[0].name : ""); } } else { if (categories.length > 0) { categories[0].koCollapsed(false); } } this.koHasCategories(categories.length > 1); }; QuestionToolbox.prototype.indexOf = function (name) { for (var i = 0; i < this.itemsValue.length; i++) { if (this.itemsValue[i].name == name) return i; } return -1; }; QuestionToolbox.prototype.reorderItems = function () { var _this = this; this.itemsValue.sort(function (i1, i2) { var index1 = _this._orderedQuestions.indexOf(i1.name); if (index1 === -1) index1 = Number.MAX_VALUE; var index2 = _this._orderedQuestions.indexOf(i2.name); if (index2 === -1) index2 = Number.MAX_VALUE; return index1 - index2; }); this.onItemsChanged(); }; QuestionToolbox.prototype.createDefaultItems = function (supportedQuestions) { this.clearItems(); var questions = this.getQuestionTypes(supportedQuestions); for (var i = 0; i < questions.length; i++) { var name = questions[i]; var question = __WEBPACK_IMPORTED_MODULE_1_survey_knockout__["ElementFactory"].Instance.createElement(name, "q1"); if (!question) { question = __WEBPACK_IMPORTED_MODULE_1_survey_knockout__["Serializer"].createClass(name); } var json = this.getQuestionJSON(question); var title = __WEBPACK_IMPORTED_MODULE_2__editorLocalization__["a" /* editorLocalization */].getString("qt." + name); var item = { name: name, iconName: "icon-" + name, title: title, tooltip: title, json: json, isCopied: false, category: "" }; this.itemsValue.push(item); } this.registerCustomWidgets(); this.onItemsChanged(); }; QuestionToolbox.prototype.registerCustomWidgets = function () { var inst = __WEBPACK_IMPORTED_MODULE_1_survey_knockout__["CustomWidgetCollection"].Instance; if (!inst.getActivatedBy) return; var widgets = inst.widgets; for (var i = 0; i < widgets.length; i++) { if (inst.getActivatedBy(widgets[i].name) != "customtype") continue; var widgetJson = widgets[i].widgetJson; if (!widgetJson.widgetIsLoaded || !widgetJson.widgetIsLoaded()) continue; var iconName = widgetJson.iconName ? widgetJson.iconName : "icon-default"; var title = __WEBPACK_IMPORTED_MODULE_2__editorLocalization__["a" /* editorLocalization */].getString("qt." + widgetJson.name); if (!title || title == widgetJson.name) title = widgetJson.title; if (!title) title = widgetJson.name; var json = widgetJson.defaultJSON ? widgetJson.defaultJSON : {}; if (!json.type) { json.type = widgetJson.name; } var item = { name: widgetJson.name, iconName: iconName, title: title, tooltip: title, json: json, isCopied: false, category: "" }; this.itemsValue.push(item); } }; QuestionToolbox.prototype.getQuestionJSON = function (question) { var json = new __WEBPACK_IMPORTED_MODULE_1_survey_knockout__["JsonObject"]().toJsonObject(question); json.type = question.getType(); if (!!this._questionDefaultSettings[json.type]) { var defaultSettings = this._questionDefaultSettings[json.type](); for (var key in defaultSettings) { json[key] = defaultSettings[key]; } } return json; }; QuestionToolbox.prototype.getQuestionTypes = function (supportedQuestions) { var allTypes = __WEBPACK_IMPORTED_MODULE_1_survey_knockout__["ElementFactory"].Instance.getAllTypes(); if (!supportedQuestions || supportedQuestions.length == 0) supportedQuestions = allTypes; var questions = []; for (var i = 0; i < this.orderedQuestions.length; i++) { var name = this.orderedQuestions[i]; if (supportedQuestions.indexOf(name) > -1 && allTypes.indexOf(name) > -1) questions.push(name); } for (var i = 0; i < supportedQuestions.length; i++) { var name = supportedQuestions[i]; if (questions.indexOf(supportedQuestions[i]) < 0 && allTypes.indexOf(name) > -1) questions.push(name); } return questions; }; return QuestionToolbox; }()); /***/ }), /* 37 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_survey_knockout__ = __webpack_require__(2); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_survey_knockout___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_survey_knockout__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return QuestionConverter; }); var QuestionConverter = /** @class */ (function () { function QuestionConverter() { } QuestionConverter.addConvertInfo = function (className, convertToClassName) { if (!QuestionConverter.convertInfo[className]) { QuestionConverter.convertInfo[className] = []; } QuestionConverter.convertInfo[className].push(convertToClassName); }; QuestionConverter.getConvertToClasses = function (className, availableTypes) { if (availableTypes === void 0) { availableTypes = null; } var res = QuestionConverter.convertInfo[className]; if (!res) return []; if (!!availableTypes && Array.isArray(availableTypes) && availableTypes.length > 0) { for (var i = res.length - 1; i >= 0; i--) { if (availableTypes.indexOf(res[i]) < 0) { res.splice(i, 1); } } } return !!res ? res : []; }; QuestionConverter.convertObject = function (obj, convertToClass) { if (!obj || !obj.parent || convertToClass == obj.getType()) return null; var newQuestion = __WEBPACK_IMPORTED_MODULE_0_survey_knockout__["QuestionFactory"].Instance.createQuestion(convertToClass, obj.name); var jsonObj = new __WEBPACK_IMPORTED_MODULE_0_survey_knockout__["JsonObject"](); var json = jsonObj.toJsonObject(obj); jsonObj.toObject(json, newQuestion); var panel = obj.parent; var index = panel.elements.indexOf(obj); panel.removeElement(obj); panel.addElement(newQuestion, index); return newQuestion; }; QuestionConverter.convertInfo = {}; return QuestionConverter; }()); function createDefaultQuestionConverterItems() { var classes = __WEBPACK_IMPORTED_MODULE_0_survey_knockout__["Serializer"].getChildrenClasses("selectbase", true); for (var i = 0; i < classes.length; i++) { for (var j = 0; j < classes.length; j++) { if (i == j) continue; QuestionConverter.addConvertInfo(classes[i].name, classes[j].name); } } QuestionConverter.addConvertInfo("text", "comment"); QuestionConverter.addConvertInfo("comment", "text"); } createDefaultQuestionConverterItems(); /***/ }), /* 38 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_knockout__ = __webpack_require__(1); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_knockout___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_knockout__); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_survey_knockout__ = __webpack_require__(2); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_survey_knockout___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_survey_knockout__); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__json5__ = __webpack_require__(25); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return SurveyEmbedingWindow; }); var SurveyEmbedingWindow = /** @class */ (function () { function SurveyEmbedingWindow() { this.surveyId = null; this.surveyPostId = null; this.generateValidJSON = false; this.surveyJSVersion = __WEBPACK_IMPORTED_MODULE_1_survey_knockout__["Version"]; this.surveyCDNPath = "https://surveyjs.azureedge.net/"; this.platformSurveyJSPrefix = { angular: "angular", jquery: "jquery", knockout: "ko", react: "react", vue: "vue" }; this.platformJSonPage = { angular: "@Component({\n selector: 'ng-app',\n template: \n <div id='surveyElement'></div>\",\n})\nexport class AppComponent {\n ngOnInit() {\n var survey = new Survey.Model(surveyJSON);\n survey.onComplete.add(sendDataToServer);\n Survey.SurveyNG.render(\"surveyElement\", { model: survey });\n }\n}", jquery: 'var survey = new Survey.Model(surveyJSON);\n$("#surveyContainer").Survey({\n model: survey,\n onComplete: sendDataToServer\n});', knockout: 'var survey = new Survey.Model(surveyJSON, "surveyContainer");\nsurvey.onComplete.add(sendDataToServer);', react: 'ReactDOM.render(\n <Survey.Survey json={ surveyJSON } onComplete={ sendDataToServer } />, document.getElementById("surveyContainer"));', vue: "var survey = new Survey.Model(surveyJSON);\nnew Vue({ el: '#surveyContainer', data: { survey: survey } });" }; this.platformJSonWindow = { angular: "@Component({\n selector: 'ng-app',\n template: \n <div id='surveyElement'></div>\",\n})\nexport class AppComponent {\n ngOnInit() {\n var survey = new Survey.Model(surveyJSON);\n survey.onComplete.add(sendDataToServer);\n Survey.SurveyWindowNG.render(\"surveyElement\", { model: survey });\n }\n}", jquery: 'var survey = new Survey.Model(surveyJSON);\n$("#surveyContainer").SurveyWindow({\n model: survey,\n onComplete: sendDataToServer\n});', knockout: "var survey = new Survey.Model(surveyJSON);\nsurveyWindow.show();\nsurvey.onComplete.add(sendDataToServer);", react: 'ReactDOM.render(\n <Survey.SurveyWindow json={ surveyJSON } onComplete={ sendDataToServer } />, document.getElementById("surveyContainer"));', vue: "" }; this.platformHtmlonPage = { angular: "<ng-app></ng-app>", jquery: '<div id="surveyContainer"></div>', knockout: '<div id="surveyContainer"></div>', react: '<div id="surveyContainer"></div>', vue: '<div id="surveyContainer"><survey :survey="survey"></survey></div>' }; this.platformHtmlonWindow = { angular: "<ng-app></ng-app>", jquery: '<div id="surveyContainer"></div>', knockout: "", react: '<div id="surveyContainer"></div>', vue: "<div id='surveyContainer'><survey-window :survey='survey'></survey-window></div>" }; var self = this; this.koLibraryVersion = __WEBPACK_IMPORTED_MODULE_0_knockout__["observable"]("jquery"); this.koShowAsWindow = __WEBPACK_IMPORTED_MODULE_0_knockout__["observable"]("page"); this.koScriptUsing = __WEBPACK_IMPORTED_MODULE_0_knockout__["observable"]("bootstrap"); this.koHasIds = __WEBPACK_IMPORTED_MODULE_0_knockout__["observable"](false); this.koLoadSurvey = __WEBPACK_IMPORTED_MODULE_0_knockout__["observable"](false); this.koHeadText = __WEBPACK_IMPORTED_MODULE_0_knockout__["observable"](""); this.koJavaText = __WEBPACK_IMPORTED_MODULE_0_knockout__["observable"](""); this.koBodyText = __WEBPACK_IMPORTED_MODULE_0_knockout__["observable"](""); this.koVisibleHtml = __WEBPACK_IMPORTED_MODULE_0_knockout__["computed"](function () { return (self.koShowAsWindow() == "page" || self.platformHtmlonWindow[self.koLibraryVersion()] != ""); }); this.koLibraryVersion.subscribe(function (newValue) { self.setHeadText(); self.setJavaTest(); self.setBodyText(); }); this.koShowAsWindow.subscribe(function (newValue) { self.setJavaTest(); self.setBodyText(); }); this.koScriptUsing.subscribe(function (newValue) { self.setHeadText(); self.setJavaTest(); }); this.koLoadSurvey.subscribe(function (newValue) { self.setJavaTest(); }); this.surveyEmbedingHead = null; } Object.defineProperty(SurveyEmbedingWindow.prototype, "json", { get: function () { return this.jsonValue; }, set: function (value) { this.jsonValue = value; }, enumerable: true, configurable: true }); Object.defineProperty(SurveyEmbedingWindow.prototype, "hasAceEditor", { get: function () { return typeof ace !== "undefined"; }, enumerable: true, configurable: true }); SurveyEmbedingWindow.prototype.show = function () { if (this.hasAceEditor && this.surveyEmbedingHead == null) { this.surveyEmbedingHead = this.createEditor("surveyEmbedingHead"); this.surveyEmbedingBody = this.createEditor("surveyEmbedingBody"); this.surveyEmbedingJava = this.createEditor("surveyEmbedingJava"); } this.koHasIds(this.surveyId && this.surveyPostId); this.setBodyText(); this.setHeadText(); this.setJavaTest(); }; SurveyEmbedingWindow.prototype.setBodyText = function () { this.setTextToEditor(this.surveyEmbedingBody, this.koBodyText, this.platformHtmlonPage[this.koLibraryVersion()]); }; Object.defineProperty(SurveyEmbedingWindow.prototype, "getCDNPath", { get: function () { return this.surveyCDNPath + this.surveyJSVersion + "/"; }, enumerable: true, configurable: true }); SurveyEmbedingWindow.prototype.setHeadText = function () { var str = "<!-- Your platform (" + this.koLibraryVersion() + ") scripts. -->\n"; if (this.koScriptUsing() != "bootstrap") { str += '\n<link href="' + this.getCDNPath + 'survey.css" type="text/css" rel="stylesheet" />'; } str += '\n<script src="' + this.getCDNPath + "survey." + this.platformSurveyJSPrefix[this.koLibraryVersion()] + '.min.js"></script>'; this.setTextToEditor(this.surveyEmbedingHead, this.koHeadText, str); }; SurveyEmbedingWindow.prototype.setJavaTest = function () { this.setTextToEditor(this.surveyEmbedingJava, this.koJavaText, this.getJavaText()); }; SurveyEmbedingWindow.prototype.createEditor = function (elementName) { var editor = ace.edit(elementName); editor.setTheme("ace/theme/monokai"); editor.session.setMode("ace/mode/json"); editor.setShowPrintMargin(false); editor.renderer.setShowGutter(false); editor.setReadOnly(true); return editor; }; SurveyEmbedingWindow.prototype.getJavaText = function () { var isOnPage = this.koShowAsWindow() == "page"; var str = this.getSaveFunc() + "\n\n"; str += isOnPage ? this.platformJSonPage[this.koLibraryVersion()] : this.platformJSonWindow[this.koLibraryVersion()]; var jsonText = "var surveyJSON = " + this.getJsonText() + "\n\n"; return this.getSetCss() + "\n" + jsonText + str; }; SurveyEmbedingWindow.prototype.getSetCss = function () { if (this.koScriptUsing() != "bootstrap") return ""; return "Survey.StylesManager.applyTheme(\"bootstrap\");\n"; }; SurveyEmbedingWindow.prototype.getSaveFunc = function () { return ("function sendDataToServer(survey) {\n" + this.getSaveFuncCode() + "\n}"); }; SurveyEmbedingWindow.prototype.getSaveFuncCode = function () { if (this.koHasIds()) return " survey.sendResult('" + this.surveyPostId + "');"; return " //send Ajax request to your web server.\n alert(\"The results are:\" + JSON.stringify(survey.data));"; }; SurveyEmbedingWindow.prototype.getJsonText = function () { if (this.koHasIds() && this.koLoadSurvey()) { return "{ surveyId: '" + this.surveyId + "'}"; } if (this.generateValidJSON) return JSON.stringify(this.json); return new __WEBPACK_IMPORTED_MODULE_2__json5__["a" /* SurveyJSON5 */]().stringify(this.json); }; SurveyEmbedingWindow.prototype.setTextToEditor = function (editor, koText, text) { if (editor) editor.setValue(text); if (koText) koText(text); }; return SurveyEmbedingWindow; }()); /***/ }), /* 39 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_knockout__ = __webpack_require__(1); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_knockout___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_knockout__); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__surveyHelper__ = __webpack_require__(5); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__editorLocalization__ = __webpack_require__(0); /* unused harmony export SurveyObjectItem */ /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return SurveyObjects; }); var SurveyObjectItem = /** @class */ (function () { function SurveyObjectItem() { this.level = 0; } return SurveyObjectItem; }()); var SurveyObjects = /** @class */ (function () { function SurveyObjects(koObjects, koSelected, getObjectDisplayName) { if (getObjectDisplayName === void 0) { getObjectDisplayName = null; } this.koObjects = koObjects; this.koSelected = koSelected; this.getObjectDisplayName = getObjectDisplayName; } Object.defineProperty(SurveyObjects.prototype, "survey", { get: function () { return this.surveyValue; }, set: function (value) { if (this.survey == value) return; this.surveyValue = value; this.rebuild(); }, enumerable: true, configurable: true }); SurveyObjects.prototype.addPage = function (page) { this.addElement(page, null); }; SurveyObjects.prototype.addElement = function (element, parent) { var parentIndex = parent != null ? this.getItemIndex(parent) : 0; if (parentIndex < 0) return; var elements = parent != null ? this.getElements(parent) : this.survey.pages; var elementIndex = elements.indexOf(element); var newIndex = elementIndex + 1 + parentIndex; if (elementIndex > 0) { var prevElement = elements[elementIndex - 1]; newIndex = this.getItemIndex(prevElement) + this.getAllElementCount(prevElement) + 1; } var item = this.createItem(element, this.koObjects()[parentIndex]); this.addItem(item, newIndex); var objs = []; this.buildElements(objs, this.getElements(element), item); for (var i = 0; i < objs.length; i++) { this.koObjects.splice(newIndex + 1 + i, 0, objs[i]); } this.koSelected(item); }; SurveyObjects.prototype.selectObject = function (obj) { var objs = this.koObjects(); for (var i = 0; i < objs.length; i++) { if (objs[i].value == obj) { this.koSelected(objs[i]); return; } } }; SurveyObjects.prototype.getSelectedObjectPage = function (obj) { if (obj === void 0) { obj = null; } if (!this.survey) return null; if (!obj) { if (!this.koSelected()) return; obj = this.koSelected().value; } var objs = this.koObjects(); var index = this.getItemIndex(obj); while (index > 0) { var item = objs[index]; if (item.level == 1) return item.value; index--; } return null; }; SurveyObjects.prototype.removeObject = function (obj) { var index = this.getItemIndex(obj); if (index < 0) return; var countToRemove = 1 + this.getAllElementCount(obj); this.koObjects.splice(index, countToRemove); }; SurveyObjects.prototype.nameChanged = function (obj) { var index = this.getItemIndex(obj); if (index < 0) return; this.koObjects()[index].text(this.getText(this.koObjects()[index])); }; SurveyObjects.prototype.selectNextQuestion = function (isUp) { var question = this.getSelectedQuestion(); var itemIndex = this.getItemIndex(question); if (itemIndex < 0) return question; var objs = this.koObjects(); var newItemIndex = itemIndex + (isUp ? -1 : 1); if (newItemIndex < objs.length && __WEBPACK_IMPORTED_MODULE_1__surveyHelper__["b" /* SurveyHelper */].getObjectType(objs[newItemIndex].value) == __WEBPACK_IMPORTED_MODULE_1__surveyHelper__["a" /* ObjType */].Question) { itemIndex = newItemIndex; } else { newItemIndex = itemIndex; while (newItemIndex < objs.length && __WEBPACK_IMPORTED_MODULE_1__surveyHelper__["b" /* SurveyHelper */].getObjectType(objs[newItemIndex].value) == __WEBPACK_IMPORTED_MODULE_1__surveyHelper__["a" /* ObjType */].Question) { itemIndex = newItemIndex; newItemIndex += isUp ? 1 : -1; } } this.koSelected(objs[itemIndex]); }; SurveyObjects.prototype.getAllElementCount = function (element) { var elements = this.getElements(element); var res = 0; for (var i = 0; i < elements.length; i++) { res += 1 + this.getAllElementCount(elements[i]); } return res; }; SurveyObjects.prototype.getSelectedQuestion = function () { if (!this.koSelected()) return null; var obj = this.koSelected().value; if (!obj) return null; return __WEBPACK_IMPORTED_MODULE_1__surveyHelper__["b" /* SurveyHelper */].getObjectType(obj) == __WEBPACK_IMPORTED_MODULE_1__surveyHelper__["a" /* ObjType */].Question ? obj : null; }; SurveyObjects.prototype.addItem = function (item, index) { if (index > this.koObjects().length) { this.koObjects.push(item); } else { this.koObjects.splice(index, 0, item); } }; SurveyObjects.prototype.rebuild = function () { var objs = []; if (this.survey == null) { this.koObjects(objs); this.selectObject(null); return; } var root = this.createItem(this.survey, null); objs.push(root); for (var i = 0; i < this.survey.pages.length; i++) { var page = this.survey.pages[i]; var pageItem = this.createItem(page, root); objs.push(pageItem); this.buildElements(objs, this.getElements(page), pageItem); } this.koObjects(objs); this.selectObject(this.survey); }; SurveyObjects.prototype.getElements = function (element) { return __WEBPACK_IMPORTED_MODULE_1__surveyHelper__["b" /* SurveyHelper */].getElements(element); }; SurveyObjects.prototype.buildElements = function (objs, elements, parentItem) { for (var i = 0; i < elements.length; i++) { var el = elements[i]; var item = this.createItem(el, parentItem); objs.push(item); this.buildElements(objs, this.getElements(el), item); } }; SurveyObjects.prototype.createItem = function (value, parent) { var item = new SurveyObjectItem(); item.value = value; item.level = parent != null ? parent.level + 1 : 0; item.text = __WEBPACK_IMPORTED_MODULE_0_knockout__["observable"](this.getText(item)); return item; }; SurveyObjects.prototype.getItemIndex = function (value) { if (!value) return -1; if (value["selectedElementInDesign"]) value = value["selectedElementInDesign"]; var objs = this.koObjects(); for (var i = 0; i < objs.length; i++) { if (objs[i].value == value) return i; } return -1; }; SurveyObjects.prototype.getText = function (item) { if (item.level == 0) return __WEBPACK_IMPORTED_MODULE_2__editorLocalization__["a" /* editorLocalization */].getString("ed.survey"); var intend = SurveyObjects.intend; for (var i = 1; i < item.level; i++) { intend += SurveyObjects.intend; } var text = !!this.getObjectDisplayName ? this.getObjectDisplayName(item.value) : __WEBPACK_IMPORTED_MODULE_1__surveyHelper__["b" /* SurveyHelper */].getObjectName(item.value, false); if (this.getItemTextCallback) { text = this.getItemTextCallback(item.value, text); } return intend + text; }; SurveyObjects.intend = "."; return SurveyObjects; }()); /***/ }), /* 40 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_knockout__ = __webpack_require__(1); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_knockout___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_knockout__); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__editorLocalization__ = __webpack_require__(0); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_survey_knockout__ = __webpack_require__(2); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_survey_knockout___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_survey_knockout__); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__simulator_scss__ = __webpack_require__(90); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__simulator_scss___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_3__simulator_scss__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return SurveyLiveTester; }); /* unused harmony export DEFAULT_MONITOR_DPI */ /* unused harmony export simulatorDevices */ var SurveyLiveTester = /** @class */ (function () { function SurveyLiveTester(surveyProvider) { var _this = this; this.surveyProvider = surveyProvider; this.koIsRunning = __WEBPACK_IMPORTED_MODULE_0_knockout__["observable"](true); this.koResultText = __WEBPACK_IMPORTED_MODULE_0_knockout__["observable"](""); this.koResultData = __WEBPACK_IMPORTED_MODULE_0_knockout__["observableArray"](); this.koResultViewType = __WEBPACK_IMPORTED_MODULE_0_knockout__["observable"]("table"); this.koPages = __WEBPACK_IMPORTED_MODULE_0_knockout__["observableArray"]([]); this.koActivePage = __WEBPACK_IMPORTED_MODULE_0_knockout__["observable"](null); this.koShowInvisibleElements = __WEBPACK_IMPORTED_MODULE_0_knockout__["observable"](false); this.onGetObjectDisplayName = null; this.koShowPagesInTestSurveyTab = __WEBPACK_IMPORTED_MODULE_0_knockout__["observable"](true); this.koShowDefaultLanguageInTestSurveyTab = __WEBPACK_IMPORTED_MODULE_0_knockout__["observable"](true); this.koShowInvisibleElementsInTestSurveyTab = __WEBPACK_IMPORTED_MODULE_0_knockout__["observable"](true); this._simulatorEnabled = __WEBPACK_IMPORTED_MODULE_0_knockout__["observable"](true); this._simulatorScaleEnabled = __WEBPACK_IMPORTED_MODULE_0_knockout__["observable"](true); this.simulatorOptions = { device: "desktop", orientation: "l", // scale: 1, considerDPI: true }; this.koActiveDevice = __WEBPACK_IMPORTED_MODULE_0_knockout__["observable"]("desktop"); this.koDevices = __WEBPACK_IMPORTED_MODULE_0_knockout__["observableArray"](Object.keys(simulatorDevices) .filter(function (key) { return !!simulatorDevices[key].title; }) .map(function (key) { return { text: simulatorDevices[key].title, value: key }; })); this.koLandscapeOrientation = __WEBPACK_IMPORTED_MODULE_0_knockout__["observable"](true); this.koHasFrame = __WEBPACK_IMPORTED_MODULE_0_knockout__["computed"](function () { var device = simulatorDevices[_this.koActiveDevice()]; return _this.simulatorEnabled && device.deviceType !== "desktop"; }); this.koSimulatorFrame = __WEBPACK_IMPORTED_MODULE_0_knockout__["computed"](function () { if (!_this.koHasFrame) { return undefined; } var device = simulatorDevices[_this.koActiveDevice()]; var scale = DEFAULT_MONITOR_DPI / (device.ppi / device.cssPixelRatio); var width = ((_this.koLandscapeOrientation() ? device.height : device.width) / device.cssPixelRatio) * scale; var height = ((_this.koLandscapeOrientation() ? device.width : device.height) / device.cssPixelRatio) * scale; var offsetRatioX = _this.koLandscapeOrientation() ? 0.15 : 0.165; var offsetRatioY = _this.koLandscapeOrientation() ? 0.17 : 0.155; return { scale: _this.simulatorScaleEnabled ? scale * 2 : 1, width: width, height: height, frameWidth: width * 1.33, frameHeight: height * 1.34, frameX: width * offsetRatioX, frameY: height * offsetRatioY }; }); var self = this; this.survey = this.surveyProvider.createSurvey({}, "test"); this.selectTestClick = function () { self.testAgain(); }; this.selectPageClick = function (pageItem) { if (self.survey) { if (self.survey.state == "starting") { self.survey.start(); } self.survey.currentPage = pageItem.page; } }; this.koActivePage.subscribe(function (newValue) { if (!!newValue) { self.survey.currentPage = newValue; } }); this.koShowInvisibleElements.subscribe(function (newValue) { self.survey.showInvisibleElements = newValue; }); this.setPageDisable = function (option, item) { __WEBPACK_IMPORTED_MODULE_0_knockout__["applyBindingsToNode"](option, { disable: item.koDisabled }, item); }; this.koLanguages = __WEBPACK_IMPORTED_MODULE_0_knockout__["observable"](this.getLanguages()); this.koActiveLanguage = __WEBPACK_IMPORTED_MODULE_0_knockout__["observable"](""); this.koActiveLanguage.subscribe(function (newValue) { if (self.survey.locale == newValue) return; self.survey.locale = newValue; self.koSurvey(self.survey); }); this.koSurvey = __WEBPACK_IMPORTED_MODULE_0_knockout__["observable"](this.survey); this.koActiveDevice.subscribe(function (newValue) { if (!!_this.simulator) { _this.simulatorOptions.device = newValue || "desktop"; _this.simulator.options(_this.simulatorOptions); } }); this.koLandscapeOrientation.subscribe(function (newValue) { if (!!_this.simulator) { _this.simulatorOptions.orientation = newValue ? "l" : "p"; _this.simulator.options(_this.simulatorOptions); } }); } Object.defineProperty(SurveyLiveTester.prototype, "simulatorEnabled", { get: function () { return this._simulatorEnabled(); }, set: function (value) { this._simulatorEnabled(value); }, enumerable: true, configurable: true }); Object.defineProperty(SurveyLiveTester.prototype, "simulatorScaleEnabled", { get: function () { return this._simulatorScaleEnabled(); }, set: function (value) { this._simulatorScaleEnabled(value); }, enumerable: true, configurable: true }); SurveyLiveTester.prototype.setJSON = function (json) { this.json = json; if (json != null) { if (json.cookieName) { delete json.cookieName; } } this.survey = json ? this.surveyProvider.createSurvey(json, "test") : this.surveyProvider.createSurvey({}, "test"); if (this.onSurveyCreatedCallback) this.onSurveyCreatedCallback(this.survey); var self = this; this.survey.onComplete.add(function (sender) { self.koIsRunning(false); self.koResultText(JSON.stringify(self.survey.data, null, 4)); var addCollapsed = function (items) { items.forEach(function (item) { if (!!item && item.isNode) { item.collapsed = __WEBPACK_IMPORTED_MODULE_0_knockout__["observable"](true); item.data = addCollapsed(item.data || []); } }); return items.filter(function (item) { return !!item; }); }; var plainData = self.survey.getPlainData({ includeEmpty: false }); plainData = addCollapsed(plainData); self.koResultData(plainData); }); this.survey.onStarted.add(function (sender) { self.setActivePageItem(self.survey.currentPage, true); }); this.survey.onCurrentPageChanged.add(function (sender, options) { self.koActivePage(options.newCurrentPage); self.setActivePageItem(options.oldCurrentPage, false); self.setActivePageItem(options.newCurrentPage, true); }); this.survey.onPageVisibleChanged.add(function (sender, options) { self.updatePageItem(options.page); }); }; SurveyLiveTester.prototype.updatePageItem = function (page) { var item = this.getPageItemByPage(page); if (item) { item.koVisible(page.isVisible); item.koDisabled(!page.isVisible); } }; SurveyLiveTester.prototype.show = function (options) { if (options === void 0) { options = null; } var pages = []; for (var i = 0; i < this.survey.pages.length; i++) { var page = this.survey.pages[i]; pages.push({ page: page, title: this.onGetObjectDisplayName ? this.onGetObjectDisplayName(page) : page.name, koVisible: __WEBPACK_IMPORTED_MODULE_0_knockout__["observable"](page.isVisible), koDisabled: __WEBPACK_IMPORTED_MODULE_0_knockout__["observable"](!page.isVisible), koActive: __WEBPACK_IMPORTED_MODULE_0_knockout__["observable"](this.survey.state == "running" && page === this.survey.currentPage) }); } if (!!options && options.showPagesInTestSurveyTab != undefined) { this.koShowPagesInTestSurveyTab(options.showPagesInTestSurveyTab); } if (!!options && options.showDefaultLanguageInTestSurveyTab != undefined) { this.setDefaultLanguageOption(options.showDefaultLanguageInTestSurveyTab); } if (!!options && options.showInvisibleElementsInTestSurveyTab != undefined) { this.koShowInvisibleElementsInTestSurveyTab(options.showInvisibleElementsInTestSurveyTab); } this.koShowInvisibleElements(false); this.koPages(pages); this.koSurvey(this.survey); this.koActivePage(this.survey.currentPage); this.koActiveLanguage(this.survey.locale); this.koIsRunning(true); }; Object.defineProperty(SurveyLiveTester.prototype, "testSurveyAgainText", { get: function () { return __WEBPACK_IMPORTED_MODULE_1__editorLocalization__["a" /* editorLocalization */].getString("ed.testSurveyAgain"); }, enumerable: true, configurable: true }); Object.defineProperty(SurveyLiveTester.prototype, "surveyResultsText", { get: function () { return __WEBPACK_IMPORTED_MODULE_1__editorLocalization__["a" /* editorLocalization */].getString("ed.surveyResults"); }, enumerable: true, configurable: true }); Object.defineProperty(SurveyLiveTester.prototype, "resultsTitle", { get: function () { return __WEBPACK_IMPORTED_MODULE_1__editorLocalization__["a" /* editorLocalization */].getString("ed.resultsTitle"); }, enumerable: true, configurable: true }); Object.defineProperty(SurveyLiveTester.prototype, "resultsName", { get: function () { return __WEBPACK_IMPORTED_MODULE_1__editorLocalization__["a" /* editorLocalization */].getString("ed.resultsName"); }, enumerable: true, configurable: true }); Object.defineProperty(SurveyLiveTester.prototype, "resultsValue", { get: function () { return __WEBPACK_IMPORTED_MODULE_1__editorLocalization__["a" /* editorLocalization */].getString("ed.resultsValue"); }, enumerable: true, configurable: true }); Object.defineProperty(SurveyLiveTester.prototype, "resultsDisplayValue", { get: function () { return __WEBPACK_IMPORTED_MODULE_1__editorLocalization__["a" /* editorLocalization */].getString("ed.resultsDisplayValue"); }, enumerable: true, configurable: true }); Object.defineProperty(SurveyLiveTester.prototype, "selectPageText", { get: function () { return __WEBPACK_IMPORTED_MODULE_1__editorLocalization__["a" /* editorLocalization */].getString("ts.selectPage"); }, enumerable: true, configurable: true }); Object.defineProperty(SurveyLiveTester.prototype, "showInvisibleElementsText", { get: function () { return __WEBPACK_IMPORTED_MODULE_1__editorLocalization__["a" /* editorLocalization */].getString("ts.showInvisibleElements"); }, enumerable: true, configurable: true }); SurveyLiveTester.prototype.selectTableClick = function (model) { model.koResultViewType("table"); }; SurveyLiveTester.prototype.selectJsonClick = function (model) { model.koResultViewType("text"); }; Object.defineProperty(SurveyLiveTester.prototype, "localeText", { get: function () { return __WEBPACK_IMPORTED_MODULE_1__editorLocalization__["a" /* editorLocalization */].getString("pe.locale"); }, enumerable: true, configurable: true }); Object.defineProperty(SurveyLiveTester.prototype, "simulatorText", { get: function () { return __WEBPACK_IMPORTED_MODULE_1__editorLocalization__["a" /* editorLocalization */].getString("pe.simulator"); }, enumerable: true, configurable: true }); Object.defineProperty(SurveyLiveTester.prototype, "landscapeOrientationText", { get: function () { return __WEBPACK_IMPORTED_MODULE_1__editorLocalization__["a" /* editorLocalization */].getString("pe.landscapeOrientation"); }, enumerable: true, configurable: true }); SurveyLiveTester.prototype.testAgain = function () { this.setJSON(this.json); this.show(); }; SurveyLiveTester.prototype.setDefaultLanguageOption = function (opt) { var vis = opt === true || opt === "all" || (opt === "auto" && this.survey.getUsedLocales().length > 1); this.koShowDefaultLanguageInTestSurveyTab(vis); if (vis) { this.koLanguages(this.getLanguages(opt !== "all" ? this.survey.getUsedLocales() : null)); } }; SurveyLiveTester.prototype.setActivePageItem = function (page, val) { var item = this.getPageItemByPage(page); if (item) { item.koActive(val); } }; SurveyLiveTester.prototype.getPageItemByPage = function (page) { var items = this.koPages(); for (var i = 0; i < items.length; i++) { if (items[i].page === page) return items[i]; } return null; }; SurveyLiveTester.prototype.getLanguages = function (usedLanguages) { if (usedLanguages === void 0) { usedLanguages = null; } var res = []; var locales = !!usedLanguages && usedLanguages.length > 1 ? usedLanguages : __WEBPACK_IMPORTED_MODULE_2_survey_knockout__["surveyLocalization"].getLocales(); for (var i = 0; i < locales.length; i++) { var loc = locales[i]; res.push({ value: loc, text: __WEBPACK_IMPORTED_MODULE_1__editorLocalization__["a" /* editorLocalization */].getLocaleName(loc) }); } return res; }; SurveyLiveTester.prototype.koEventAfterRender = function (element, survey) { survey.onRendered.fire(self, {}); survey["afterRenderSurvey"](element); }; return SurveyLiveTester; }()); var DEFAULT_MONITOR_DPI = 102.69; var simulatorDevices = { desktop: { deviceType: "desktop", title: "Desktop" }, // desktop_1280x720: { // cssPixelRatio: 1, // ppi: DEFAULT_MONITOR_DPI, // width: 720, // height: 1280, // deviceType: "desktop", // title: "Desktop 1280x720" // }, // desktop_1440x900: { // cssPixelRatio: 1, // ppi: DEFAULT_MONITOR_DPI, // width: 900, // height: 1440, // deviceType: "desktop", // title: "Desktop 1440x900" // }, // desktop_1920x1080: { // cssPixelRatio: 1, // ppi: DEFAULT_MONITOR_DPI, // width: 1080, // height: 1920, // deviceType: "desktop", // title: "Desktop 1920x1080" // }, iPhone: { cssPixelRatio: 2, ppi: 326, width: 640, height: 960, deviceType: "phone", title: "iPhone" }, iPhone5: { cssPixelRatio: 2, ppi: 326, width: 640, height: 1136, deviceType: "phone", title: "iPhone 5" }, iPhone6: { cssPixelRatio: 2, ppi: 326, width: 750, height: 1334, deviceType: "phone", title: "iPhone 6" }, iPhone6plus: { cssPixelRatio: 2, ppi: 401, width: 1080, height: 1920, deviceType: "phone", title: "iPhone 6 Plus" }, iPhone8: { cssPixelRatio: 2, ppi: 326, width: 750, height: 1334, deviceType: "phone", title: "iPhone 8" }, iPhone8plus: { cssPixelRatio: 2, ppi: 401, width: 1080, height: 1920, deviceType: "phone", title: "iPhone 8 Plus" }, iPhoneX: { cssPixelRatio: 2, ppi: 458, width: 1125, height: 2436, deviceType: "phone", title: "iPhone X" }, iPhoneXmax: { cssPixelRatio: 2, ppi: 458, width: 1242, height: 2688, deviceType: "phone", title: "iPhone X Max" }, iPad: { cssPixelRatio: 2, ppi: 264, width: 1536, height: 2048, deviceType: "tablet", title: "iPad" }, iPadMini: { cssPixelRatio: 1, ppi: 163, width: 768, height: 1024, deviceType: "tablet", title: "iPad Mini" }, iPadPro: { cssPixelRatio: 1, ppi: 264, width: 1688, height: 2388, deviceType: "tablet", title: 'iPad Pro 11"' }, iPadPro13: { cssPixelRatio: 1, ppi: 264, width: 2048, height: 2732, deviceType: "tablet", title: 'iPad Pro 12,9"' }, androidPhone: { cssPixelRatio: 2, ppi: 316, width: 720, height: 1280, deviceType: "phone", title: "Android Phone" }, androidTablet: { cssPixelRatio: 1.5, ppi: 149, width: 800, height: 1280, deviceType: "tablet", title: "Android Tablet" }, win10Phone: { cssPixelRatio: 1, ppi: 152, width: 330, height: 568, deviceType: "phone", title: "Windows 10 Phone" }, msSurface: { cssPixelRatio: 1, ppi: 148, width: 768, height: 1366, deviceType: "tablet", title: "MS Surface" }, genericPhone: { cssPixelRatio: 1, deviceType: "phone", title: "" } }; /***/ }), /* 41 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(3); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_knockout__ = __webpack_require__(1); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_knockout___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_knockout__); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_survey_knockout__ = __webpack_require__(2); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_survey_knockout___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_survey_knockout__); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__editorLocalization__ = __webpack_require__(0); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "d", function() { return TranslationItemBase; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "c", function() { return TranslationItem; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return TranslationGroup; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return Translation; }); var TranslationItemBase = /** @class */ (function () { function TranslationItemBase(name) { this.name = name; } Object.defineProperty(TranslationItemBase.prototype, "isGroup", { get: function () { return false; }, enumerable: true, configurable: true }); TranslationItemBase.prototype.fillLocales = function (locales) { }; TranslationItemBase.prototype.mergeLocaleWithDefault = function (loc) { }; return TranslationItemBase; }()); var TranslationItem = /** @class */ (function (_super) { __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__["a" /* __extends */])(TranslationItem, _super); function TranslationItem(name, locString, defaultValue, translation, context) { if (defaultValue === void 0) { defaultValue = ""; } var _this = _super.call(this, name) || this; _this.name = name; _this.locString = locString; _this.defaultValue = defaultValue; _this.translation = translation; _this.context = context; _this.values = {}; return _this; } Object.defineProperty(TranslationItem.prototype, "text", { get: function () { return __WEBPACK_IMPORTED_MODULE_3__editorLocalization__["a" /* editorLocalization */].getPropertyName(this.name); }, enumerable: true, configurable: true }); TranslationItem.prototype.koValue = function (loc) { if (!!this.values[loc]) return this.values[loc]; var val = __WEBPACK_IMPORTED_MODULE_1_knockout__["observable"](this.locString.getLocaleText(loc)); var self = this; val.subscribe(function (newValue) { self.locString.setLocaleText(loc, newValue); !!self.translation.tranlationChangedCallback && self.translation.tranlationChangedCallback(loc, self.name, newValue, self.context); }); this.values[loc] = val; return val; }; TranslationItem.prototype.fillLocales = function (locales) { var json = this.locString.getJson(); if (!json || typeof json === "string") return; for (var key in json) { if (!!key && locales.indexOf(key) < 0 && key !== __WEBPACK_IMPORTED_MODULE_2_survey_knockout__["LocalizableString"].defaultLocale) { locales.push(key); } } }; TranslationItem.prototype.mergeLocaleWithDefault = function (loc) { var locText = this.locString.getLocaleText(loc); if (!locText) return; this.locString.setLocaleText("", locText); this.locString.setLocaleText(loc, null); }; return TranslationItem; }(TranslationItemBase)); var TranslationGroup = /** @class */ (function (_super) { __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__["a" /* __extends */])(TranslationGroup, _super); function TranslationGroup(name, obj, translation) { if (translation === void 0) { translation = null; } var _this = _super.call(this, name) || this; _this.name = name; _this.obj = obj; _this.translation = translation; _this.koExpanded = __WEBPACK_IMPORTED_MODULE_1_knockout__["observable"](false); _this.reset(); return _this; } Object.defineProperty(TranslationGroup.prototype, "items", { get: function () { return this.itemValues; }, enumerable: true, configurable: true }); Object.defineProperty(TranslationGroup.prototype, "locItems", { get: function () { var res = []; for (var i = 0; i < this.items.length; i++) { if (!this.items[i].isGroup) { res.push(this.items[i]); } } return res; }, enumerable: true, configurable: true }); Object.defineProperty(TranslationGroup.prototype, "groups", { get: function () { var res = []; for (var i = 0; i < this.items.length; i++) { if (this.items[i].isGroup) { res.push(this.items[i]); } } return res; }, enumerable: true, configurable: true }); Object.defineProperty(TranslationGroup.prototype, "isGroup", { get: function () { return true; }, enumerable: true, configurable: true }); Object.defineProperty(TranslationGroup.prototype, "koLocales", { get: function () { return !!this.translation ? this.translation.koLocales : null; }, enumerable: true, configurable: true }); Object.defineProperty(TranslationGroup.prototype, "localeCount", { get: function () { if (!this.koLocales()) return 0; var locales = this.koLocales(); var res = 0; for (var i = 0; i < locales.length; i++) { if (locales[i].koVisible()) res++; } return res; }, enumerable: true, configurable: true }); Object.defineProperty(TranslationGroup.prototype, "locWidth", { get: function () { var count = this.localeCount; if (count < 2) return "100%"; return Math.floor(100 / count).toString() + "%"; }, enumerable: true, configurable: true }); TranslationGroup.prototype.getLocaleName = function (loc) { return this.translation ? this.translation.getLocaleName(loc) : __WEBPACK_IMPORTED_MODULE_3__editorLocalization__["a" /* editorLocalization */].getLocaleName(loc); }; TranslationGroup.prototype.reset = function () { this.itemValues = []; this.fillItems(); }; TranslationGroup.prototype.fillLocales = function (locales) { for (var i = 0; i < this.items.length; i++) { this.items[i].fillLocales(locales); } }; Object.defineProperty(TranslationGroup.prototype, "showAllStrings", { get: function () { return !!this.translation ? this.translation.showAllStrings : true; }, enumerable: true, configurable: true }); Object.defineProperty(TranslationGroup.prototype, "hasItems", { get: function () { if (this.locItems.length > 0) return true; var groups = this.groups; for (var i = 0; i < groups.length; i++) { if (groups[i].hasItems) return true; } return false; }, enumerable: true, configurable: true }); TranslationGroup.prototype.mergeLocaleWithDefault = function (loc) { for (var i = 0; i < this.itemValues.length; i++) { this.itemValues[i].mergeLocaleWithDefault(loc); } }; TranslationGroup.prototype.fillItems = function () { if (this.isItemValueArray(this.obj)) { this.createItemValues(); return; } if (!this.obj || !this.obj.getType) return; var properties = __WEBPACK_IMPORTED_MODULE_2_survey_knockout__["Serializer"].getPropertiesByObj(this.obj); for (var i = 0; i < properties.length; i++) { var property = properties[i]; if (!property.isSerializable && !property.isLocalizable) continue; if (property.isLocalizable) { if (!property.readOnly && property.visible) { var defaultValue = this.getDefaultValue(property); var locStr = (this.obj[property.serializationProperty]); if (!locStr) continue; if (!this.showAllStrings && !defaultValue && locStr.isEmpty) continue; this.itemValues.push(new TranslationItem(property.name, locStr, defaultValue, this.translation, this.obj)); } } else { var value = this.obj[property.name]; if (!!value && Array.isArray(value) && value.length > 0) { //If ItemValue array? if (this.isItemValueArray(value)) { var group = new TranslationGroup(property.name, value, this.translation); if (group.hasItems) { this.itemValues.push(group); } } else { this.createGroups(value, property); } } } } this.itemValues.sort(function (a, b) { if (!a.name) return -1; if (!b.name) return 1; return a.name.localeCompare(b.name); }); }; TranslationGroup.prototype.getDefaultValue = function (property) { if (property.name == "title" && property.isLocalizable && !!property.serializationProperty) { var locStr = (this.obj[property.serializationProperty]); if (!!locStr && this.obj.getType() != "page" && (!!locStr.onGetTextCallback || locStr["onRenderedHtmlCallback"])) return this.obj["name"]; } return ""; }; TranslationGroup.prototype.isItemValueArray = function (val) { return (!!val && Array.isArray(val) && val.length > 0 && !!val[0] && !!val[0]["getType"] && !!val[0]["setData"] && !!val[0]["setLocText"]); }; TranslationGroup.prototype.createGroups = function (value, property) { for (var i = 0; i < value.length; i++) { var obj = value[i]; if (!!obj && obj.getType) { var name = obj["name"]; if (!name) { name = property.name + "[" + i.toString() + "]"; } var group = new TranslationGroup(name, obj, this.translation); if (group.hasItems) { this.itemValues.push(group); } } } }; TranslationGroup.prototype.createItemValues = function () { for (var i = 0; i < this.obj.length; i++) { var val = this.obj[i]; var canAdd = this.showAllStrings || !val.locText.isEmpty || isNaN(val.value); if (canAdd) { this.itemValues.push(new TranslationItem(val.value, val.locText, val.value, this.translation, val)); } } }; return TranslationGroup; }(TranslationItemBase)); var Translation = /** @class */ (function () { function Translation(survey, showAllStrings) { if (showAllStrings === void 0) { showAllStrings = false; } this.koLocales = __WEBPACK_IMPORTED_MODULE_1_knockout__["observableArray"]([ { locale: "", koVisible: __WEBPACK_IMPORTED_MODULE_1_knockout__["observable"](true), koEnabled: __WEBPACK_IMPORTED_MODULE_1_knockout__["observable"](true) } ]); this.koRoot = __WEBPACK_IMPORTED_MODULE_1_knockout__["observable"](null); this.koShowAllStrings = __WEBPACK_IMPORTED_MODULE_1_knockout__["observable"](showAllStrings); this.koIsEmpty = __WEBPACK_IMPORTED_MODULE_1_knockout__["observable"](true); this.koAvailableLanguages = __WEBPACK_IMPORTED_MODULE_1_knockout__["observableArray"](); this.koSelectedLanguageToAdd = __WEBPACK_IMPORTED_MODULE_1_knockout__["observable"](null); this.koFilteredPage = __WEBPACK_IMPORTED_MODULE_1_knockout__["observable"](); this.koCanMergeLocaleWithDefault = __WEBPACK_IMPORTED_MODULE_1_knockout__["observable"](false); this.koMergeLocaleWithDefaultText = __WEBPACK_IMPORTED_MODULE_1_knockout__["computed"](function () { if (!this.koCanMergeLocaleWithDefault()) return ""; var locText = this.getLocaleName(this.defaultLocale); return __WEBPACK_IMPORTED_MODULE_3__editorLocalization__["a" /* editorLocalization */] .getString("ed.translationMergeLocaleWithDefault")["format"](locText); }, this); this.koFilteredPages = __WEBPACK_IMPORTED_MODULE_1_knockout__["observableArray"]([ { value: null, text: this.showAllPagesText } ]); var self = this; this.koSelectedLanguageToAdd.subscribe(function (newValue) { if (!!newValue) { self.addLocale(newValue.value); } }); this.koShowAllStrings.subscribe(function (newValue) { self.reset(); }); this.koFilteredPage.subscribe(function (newValue) { self.reset(); }); this.koExportToSCVFile = function () { self.exportToSCVFile("survey_translation.csv"); }; this.koImportFromSCVFile = function (el) { if (el.files.length < 1) return; self.importFromSCVFile(el.files[0]); el.value = ""; }; this.koMergeLocaleWithDefault = function () { self.mergeLocaleWithDefault(); }; this.survey = survey; } Object.defineProperty(Translation.prototype, "survey", { get: function () { return this.surveyValue; }, set: function (val) { this.surveyValue = val; this.updateFilteredPages(); this.reset(); }, enumerable: true, configurable: true }); Object.defineProperty(Translation.prototype, "root", { get: function () { return this.rootValue; }, enumerable: true, configurable: true }); Object.defineProperty(Translation.prototype, "filteredPage", { get: function () { return this.koFilteredPage(); }, set: function (val) { this.koFilteredPage(val); }, enumerable: true, configurable: true }); Translation.prototype.reset = function () { var rootObj = !!this.filteredPage ? this.filteredPage : this.survey; var rootName = !!this.filteredPage ? rootObj["name"] : "survey"; this.rootValue = new TranslationGroup(rootName, rootObj, this); this.root.reset(); this.resetLocales(); this.koIsEmpty(!this.root.hasItems); this.koRoot(this.root); }; Object.defineProperty(Translation.prototype, "locales", { get: function () { var res = []; var locales = this.koLocales(); for (var i = 0; i < locales.length; i++) { res.push(locales[i].locale); } return res; }, enumerable: true, configurable: true }); Object.defineProperty(Translation.prototype, "defaultLocale", { get: function () { return !!this.survey.locale ? this.survey.locale : __WEBPACK_IMPORTED_MODULE_2_survey_knockout__["surveyLocalization"].defaultLocale; }, enumerable: true, configurable: true }); Translation.prototype.getLocaleName = function (loc) { return __WEBPACK_IMPORTED_MODULE_3__editorLocalization__["a" /* editorLocalization */].getLocaleName(loc, this.defaultLocale); }; Translation.prototype.hasLocale = function (locale) { var locales = this.koLocales(); for (var i = 0; i < locales.length; i++) { if (locales[i].locale == locale) return true; } return false; }; Translation.prototype.addLocale = function (locale) { if (!this.hasLocale(locale)) { var locs = this.locales; locs.push(locale); this.setLocales(locs); } }; Translation.prototype.resetLocales = function () { var locales = [""]; this.root.fillLocales(locales); this.setLocales(locales); }; Translation.prototype.getSelectedLocales = function () { var res = []; var locs = this.koLocales(); for (var i = 0; i < locs.length; i++) { if (locs[i].koVisible()) res.push(locs[i].locale); } return res; }; Translation.prototype.setSelectedLocales = function (selectedLocales) { selectedLocales = selectedLocales || []; for (var i = 0; i < selectedLocales.length; i++) { if (!this.hasLocale(selectedLocales[i])) { this.addLocale(selectedLocales[i]); } } var res = []; var locs = this.koLocales(); for (var i = 0; i < locs.length; i++) { var enabled = this.isLocaleEnabled(locs[i].locale); locs[i].koVisible(enabled && selectedLocales.indexOf(locs[i].locale) > -1); locs[i].koEnabled(enabled); } return res; }; Object.defineProperty(Translation.prototype, "selectLanguageOptionsCaption", { get: function () { return __WEBPACK_IMPORTED_MODULE_3__editorLocalization__["a" /* editorLocalization */].getString("ed.translationAddLanguage"); }, enumerable: true, configurable: true }); Object.defineProperty(Translation.prototype, "showAllStrings", { get: function () { return this.koShowAllStrings(); }, set: function (val) { this.koShowAllStrings(val); }, enumerable: true, configurable: true }); Object.defineProperty(Translation.prototype, "showAllStringsText", { get: function () { return __WEBPACK_IMPORTED_MODULE_3__editorLocalization__["a" /* editorLocalization */].getString("ed.translationShowAllStrings"); }, enumerable: true, configurable: true }); Object.defineProperty(Translation.prototype, "showAllPagesText", { get: function () { return __WEBPACK_IMPORTED_MODULE_3__editorLocalization__["a" /* editorLocalization */].getString("ed.translationShowAllPages"); }, enumerable: true, configurable: true }); Object.defineProperty(Translation.prototype, "noStringsText", { get: function () { return __WEBPACK_IMPORTED_MODULE_3__editorLocalization__["a" /* editorLocalization */].getString("ed.translationNoStrings"); }, enumerable: true, configurable: true }); Object.defineProperty(Translation.prototype, "exportToCSVText", { get: function () { return __WEBPACK_IMPORTED_MODULE_3__editorLocalization__["a" /* editorLocalization */].getString("ed.translationExportToSCVButton"); }, enumerable: true, configurable: true }); Object.defineProperty(Translation.prototype, "importFromCSVText", { get: function () { return __WEBPACK_IMPORTED_MODULE_3__editorLocalization__["a" /* editorLocalization */].getString("ed.translationImportFromSCVButton"); }, enumerable: true, configurable: true }); Translation.prototype.exportToCSV = function () { var res = []; var title = ""; var visLocales = this.getVisibleLocales(); for (var i = 0; i < visLocales.length; i++) { title += Translation.csvDelimiter + (!!visLocales[i] ? visLocales[i] : "default"); } res.push(title); var itemsHash = {}; this.fillItemsHash("", this.root, itemsHash); for (var key in itemsHash) { var line = key; var item = itemsHash[key]; for (var i = 0; i < visLocales.length; i++) { var val = item.locString.getLocaleText(visLocales[i]); if (!val && i == 0) { val = item.defaultValue; } line += Translation.csvDelimiter + val; } res.push(line); } return res.join(Translation.newLineDelimiter); }; Translation.prototype.importFromCSV = function (str) { if (!str) return; var lines = str.split(Translation.newLineDelimiter); if (lines.length < 2) return; var locales = this.readLocales(lines[0]); var translation = new Translation(this.survey, true); var itemsHash = []; this.fillItemsHash("", translation.root, itemsHash); for (var i = 1; i < lines.length; i++) { if (!lines[i]) continue; var vals = lines[i].split(Translation.csvDelimiter); var name = vals[0].trim(); if (!name) continue; var item = itemsHash[name]; if (!item) continue; this.updateItemWithStrings(item, vals, locales); } this.reset(); if (this.importFinishedCallback) this.importFinishedCallback(); }; Translation.prototype.exportToSCVFile = function (fileName) { var data = this.exportToCSV(); var blob = new Blob([data], { type: "text/csv" }); if (window.navigator.msSaveOrOpenBlob) { window.navigator.msSaveBlob(blob, fileName); } else { var elem = window.document.createElement("a"); elem.href = window.URL.createObjectURL(blob); elem.download = fileName; document.body.appendChild(elem); elem.click(); document.body.removeChild(elem); } }; Translation.prototype.importFromSCVFile = function (file) { var fileReader = new FileReader(); var self = this; fileReader.onload = function (e) { self.importFromCSV(fileReader.result); }; fileReader.readAsText(file); }; Translation.prototype.mergeLocaleWithDefault = function () { if (!this.hasLocale(this.defaultLocale)) return; this.root.mergeLocaleWithDefault(this.defaultLocale); this.koLocales([ { locale: "", koVisible: __WEBPACK_IMPORTED_MODULE_1_knockout__["observable"](true), koEnabled: __WEBPACK_IMPORTED_MODULE_1_knockout__["observable"](true) } ]); this.reset(); }; Translation.prototype.updateItemWithStrings = function (item, values, locales) { for (var i = 0; i < values.length - 1 && i < locales.length; i++) { var val = values[i + 1].trim(); if (!val) continue; item.koValue(locales[i])(val); } }; Translation.prototype.getVisibleLocales = function () { var res = []; var locales = this.koLocales(); for (var i = 0; i < locales.length; i++) { if (locales[i].koVisible()) { res.push(locales[i].locale); } } return res; }; Translation.prototype.readLocales = function (str) { var res = []; if (!str) return res; var locs = str.split(Translation.csvDelimiter); for (var i = 1; i < locs.length; i++) { var loc = locs[i].trim(); if (loc == "default") loc = ""; res.push(loc); } return res; }; Translation.prototype.fillItemsHash = function (parentName, group, itemsHash) { var name = parentName; if (!!name) name += "."; name += group.name; var items = group.locItems; for (var i = 0; i < items.length; i++) { itemsHash[name + "." + items[i].name] = items[i]; } var groups = group.groups; for (var i = 0; i < groups.length; i++) { this.fillItemsHash(name, groups[i], itemsHash); } }; Translation.prototype.setLocales = function (locs) { var locales = this.koLocales(); for (var i = 0; i < locs.length; i++) { var loc = locs[i]; if (this.hasLocale(loc)) continue; var enabled = this.isLocaleEnabled(loc); locales.push({ locale: loc, koVisible: __WEBPACK_IMPORTED_MODULE_1_knockout__["observable"](enabled), koEnabled: __WEBPACK_IMPORTED_MODULE_1_knockout__["observable"](enabled) }); } this.koLocales(locales); this.koCanMergeLocaleWithDefault(this.hasLocale(this.defaultLocale)); this.updateAvailableTranlations(); }; Translation.prototype.isLocaleEnabled = function (locale) { if (!locale) return true; var supported = __WEBPACK_IMPORTED_MODULE_2_survey_knockout__["surveyLocalization"].supportedLocales; if (!supported || supported.length <= 0) return true; return supported.indexOf(locale) > -1; }; Translation.prototype.updateAvailableTranlations = function () { var res = []; var locales = __WEBPACK_IMPORTED_MODULE_2_survey_knockout__["surveyLocalization"].getLocales(); for (var i = 0; i < locales.length; i++) { var loc = locales[i]; if (!loc) continue; if (this.hasLocale(loc)) continue; if (loc == this.defaultLocale) continue; res.push({ value: loc, text: __WEBPACK_IMPORTED_MODULE_3__editorLocalization__["a" /* editorLocalization */].getLocaleName(loc) }); } this.koSelectedLanguageToAdd(null); this.koAvailableLanguages(res); !!this.availableTranlationsChangedCallback && this.availableTranlationsChangedCallback(); }; Translation.prototype.updateFilteredPages = function () { var res = [{ value: null, text: this.showAllPagesText }]; for (var i = 0; i < this.survey.pages.length; i++) { var page = this.survey.pages[i]; res.push({ value: page, text: page.name }); } this.koFilteredPages(res); }; Translation.csvDelimiter = "|"; Translation.newLineDelimiter = "\n"; return Translation; }()); /***/ }), /* 42 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_knockout__ = __webpack_require__(1); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_knockout___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_knockout__); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_survey_knockout__ = __webpack_require__(2); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_survey_knockout___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_survey_knockout__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return SurveyUndoRedo; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return UndoRedoItem; }); var SurveyUndoRedo = /** @class */ (function () { function SurveyUndoRedo() { this.index = -1; this.maximumCount = 10; this.items = []; this.koCanUndo = __WEBPACK_IMPORTED_MODULE_0_knockout__["observable"](false); this.koCanRedo = __WEBPACK_IMPORTED_MODULE_0_knockout__["observable"](false); } SurveyUndoRedo.prototype.clear = function () { this.items = []; this.koCanUndo(false); this.koCanRedo(false); }; SurveyUndoRedo.prototype.setCurrent = function (survey, selectedObjName) { var item = new UndoRedoItem(); item.surveyJSON = new __WEBPACK_IMPORTED_MODULE_1_survey_knockout__["JsonObject"]().toJsonObject(survey); item.selectedObjName = selectedObjName; if (this.index < this.items.length - 1) { this.items.splice(this.index + 1); } this.items.push(item); this.removeOldData(); this.index = this.items.length - 1; this.updateCanUndoRedo(); }; SurveyUndoRedo.prototype.undo = function () { if (!this.canUndo) return null; return this.doUndoRedo(-1); }; SurveyUndoRedo.prototype.redo = function () { if (!this.canRedo) return null; return this.doUndoRedo(1); }; SurveyUndoRedo.prototype.updateCanUndoRedo = function () { this.koCanUndo(this.canUndo); this.koCanRedo(this.canRedo); }; SurveyUndoRedo.prototype.doUndoRedo = function (dIndex) { this.index += dIndex; this.updateCanUndoRedo(); return this.index >= 0 && this.index < this.items.length ? this.items[this.index] : null; }; Object.defineProperty(SurveyUndoRedo.prototype, "canUndo", { get: function () { return this.index >= 1 && this.index < this.items.length; }, enumerable: true, configurable: true }); Object.defineProperty(SurveyUndoRedo.prototype, "canRedo", { get: function () { return this.items.length > 1 && this.index < this.items.length - 1; }, enumerable: true, configurable: true }); SurveyUndoRedo.prototype.removeOldData = function () { if (this.items.length - 1 < this.maximumCount) return; this.items.splice(0, this.items.length - this.maximumCount - 1); }; return SurveyUndoRedo; }()); var UndoRedoItem = /** @class */ (function () { function UndoRedoItem() { } return UndoRedoItem; }()); /***/ }), /* 43 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; var is = function (obj, type) { return Object.prototype.toString.call(obj).toLowerCase() === ("[object " + type + "]"); }; var addClass = function (el, cls) { var arr = el.className .split(/\s+/) .filter(function (c) { return !!c && c == cls; }); if (!arr.length) { el.className += " " + cls; } }; var removeClass = function (el, cls) { el.className = el.className .split(/\s+/) .filter(function (c) { return !!c && c != cls; }) .join(' '); }; var RModal = function RModal(el, opts) { var this$1 = this; this.opened = false; this.opts = { bodyClass: 'modal-open' , dialogClass: 'modal-dialog' , dialogOpenClass: 'bounceInDown' , dialogCloseClass: 'bounceOutUp' , focus: true , focusElements: [ 'a[href]', 'area[href]', 'input:not([disabled]):not([type=hidden])' , 'button:not([disabled])', 'select:not([disabled])' , 'textarea:not([disabled])', 'iframe', 'object', 'embed' , '*[tabindex]', '*[contenteditable]' ] , escapeClose: true , content: null , closeTimeout: 500 }; Object.keys(opts || {}) .forEach(function (key) { /* istanbul ignore else */ if (opts[key] !== undefined) { this$1.opts[key] = opts[key]; } }); this.overlay = el; this.dialog = el.querySelector(("." + (this.opts.dialogClass))); if (this.opts.content) { this.content(this.opts.content); } }; RModal.prototype.open = function open (content) { var this$1 = this; this.content(content); if (!is(this.opts.beforeOpen, 'function')) { return this._doOpen(); } this.opts.beforeOpen(function () { this$1._doOpen(); }); }; RModal.prototype._doOpen = function _doOpen () { addClass(document.body, this.opts.bodyClass); removeClass(this.dialog, this.opts.dialogCloseClass); addClass(this.dialog, this.opts.dialogOpenClass); this.overlay.style.display = 'block'; if (this.opts.focus) { this.focusOutElement = document.activeElement; this.focus(); } if (is(this.opts.afterOpen, 'function')) { this.opts.afterOpen(); } this.opened = true; }; RModal.prototype.close = function close () { var this$1 = this; if (!is(this.opts.beforeClose, 'function')) { return this._doClose(); } this.opts.beforeClose(function () { this$1._doClose(); }); }; RModal.prototype._doClose = function _doClose () { var this$1 = this; removeClass(this.dialog, this.opts.dialogOpenClass); addClass(this.dialog, this.opts.dialogCloseClass); removeClass(document.body, this.opts.bodyClass); if (this.opts.focus) { this.focus(this.focusOutElement); } if (is(this.opts.afterClose, 'function')) { this.opts.afterClose(); } this.opened = false; setTimeout(function () { this$1.overlay.style.display = 'none'; }, this.opts.closeTimeout); }; RModal.prototype.content = function content (html) { if (html === undefined) { return this.dialog.innerHTML; } this.dialog.innerHTML = html; }; RModal.prototype.elements = function elements (selector, fallback) { fallback = fallback || window.navigator.appVersion.indexOf('MSIE 9.0') > -1; selector = is(selector, 'array') ? selector.join(',') : selector; return [].filter.call( this.dialog.querySelectorAll(selector) , function (element) { if (fallback) { var style = window.getComputedStyle(element); return style.display !== 'none' && style.visibility !== 'hidden'; } return element.offsetParent !== null; } ); }; RModal.prototype.focus = function focus (el) { el = el || this.elements(this.opts.focusElements)[0] || this.dialog.firstChild; if (el && is(el.focus, 'function')) { el.focus(); } }; RModal.prototype.keydown = function keydown (ev) { if (this.opts.escapeClose && ev.which == 27) { this.close(); } function stopEvent() { ev.preventDefault(); ev.stopPropagation(); } if (this.opened && ev.which == 9 && this.dialog.contains(ev.target)) { var elements = this.elements(this.opts.focusElements) , first = elements[0] , last = elements[elements.length - 1]; if (first == last) { stopEvent(); } else if (ev.target == first && ev.shiftKey) { stopEvent(); last.focus(); } else if (ev.target == last && !ev.shiftKey) { stopEvent(); first.focus(); } } }; RModal.prototype.version = '1.0.31'; RModal.version = '1.0.31'; /* harmony default export */ __webpack_exports__["a"] = RModal; //# sourceMappingURL=index.es.js.map /***/ }), /* 44 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_survey_knockout__ = __webpack_require__(2); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_survey_knockout___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_survey_knockout__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return ExpressionToDisplayText; }); var ExpressionToDisplayText = /** @class */ (function () { function ExpressionToDisplayText(survey, options) { if (options === void 0) { options = null; } this.survey = survey; this.options = options; } ExpressionToDisplayText.prototype.toDisplayText = function (expression) { if (!this.survey || (!!this.options && !this.options.showTitlesInExpressions)) return expression; var parser = new __WEBPACK_IMPORTED_MODULE_0_survey_knockout__["ConditionsParser"](); var node = parser.parseExpression(expression); if (!node) return expression; if (!!node["getType"]) return this.toDisplayTextCore(node, expression); var variables = []; node.setVariables(variables); return this.replaceVariables(expression, variables); }; ExpressionToDisplayText.prototype.toDisplayTextCore = function (node, expression) { this.currentQuestion = null; var self = this; var strFunc = function (op) { if (op["getType"]() == "variable") { return self.getQuestionText(op); } if (op["getType"]() == "const") { return self.getDisplayText(op); } if (op["getType"]() == "binary") { self.proceedBinary(op); } return undefined; }; return node["toString"](strFunc); }; ExpressionToDisplayText.prototype.getQuestionText = function (op) { var question = this.survey.getQuestionByName(op["variable"]); if (!question || !question.title) return undefined; return "{" + question.title + "}"; }; ExpressionToDisplayText.prototype.getDisplayText = function (op) { if (!this.currentQuestion) return undefined; var res = this.currentQuestion["getDisplayValue"](true, op["correctValue"]); return !!res ? new __WEBPACK_IMPORTED_MODULE_0_survey_knockout__["Const"](res).toString() : undefined; }; ExpressionToDisplayText.prototype.proceedBinary = function (op) { if (op["isArithmetic"] || op["isConjunction"]) { this.currentQuestion = null; return; } this.currentQuestion = this.getQuestionFromOperands(op["leftOperand"], op["rightOperand"]); if (!this.currentQuestion) { this.currentQuestion = this.getQuestionFromOperands(op["rightOperand"], op["leftOperand"]); } }; ExpressionToDisplayText.prototype.getQuestionFromOperands = function (op1, op2) { if (!op1 || !op2) return null; if (op1["getType"]() != "variable") return null; var op2Type = op2["getType"](); if (op2Type != "const" && op2Type != "function" && op2Type != "array") return null; return this.survey.getQuestionByName(op1["variable"]); }; ExpressionToDisplayText.prototype.replaceVariables = function (expression, variables) { for (var i = 0; i < variables.length; i++) { expression = this.replaceVariable(expression, variables[i]); } return expression; }; ExpressionToDisplayText.prototype.replaceVariable = function (expression, variable) { var question = this.survey.getQuestionByName(variable); if (!question || !question.title) return expression; return expression.replace("{" + variable + "}", "{" + question.title + "}"); }; return ExpressionToDisplayText; }()); /***/ }), /* 45 */ /***/ (function(module, exports) { // removed by extract-text-webpack-plugin /***/ }), /* 46 */ /***/ (function(module, exports) { // removed by extract-text-webpack-plugin /***/ }), /* 47 */ /***/ (function(module, exports) { // removed by extract-text-webpack-plugin /***/ }), /* 48 */ /***/ (function(module, exports) { // removed by extract-text-webpack-plugin /***/ }), /* 49 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(3); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_knockout__ = __webpack_require__(1); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_knockout___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_knockout__); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__surveyjsObjects__ = __webpack_require__(6); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__flowpanel_actions_scss__ = __webpack_require__(82); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__flowpanel_actions_scss___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_3__flowpanel_actions_scss__); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__question_actions__ = __webpack_require__(26); /* unused harmony export FlowPanelActionsAdorner */ /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return flowpanelActionsAdorner; }); var templateHtml = __webpack_require__(135); //import { Survey } from 'survey-knockout'; var FlowPanelActionsAdorner = /** @class */ (function (_super) { __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__["a" /* __extends */])(FlowPanelActionsAdorner, _super); function FlowPanelActionsAdorner(question, editor, adornerElement) { var _this = _super.call(this, question, editor) || this; _this.adornerElement = adornerElement; var self = _this; var surveyForDesgner = editor.survey; var fPanel = self.adornerElement.parentElement.parentElement.getElementsByTagName("f-panel")[0]; var createWrappingFunction = function (tag) { return function () { var selection = document.getSelection(); if (!!selection && selection.rangeCount > 0) { var selectedText = selection.toString(); if (!!selectedText) { question.content = question.content.replace(selectedText, "<" + tag + ">" + selectedText + "</" + tag + ">"); // var range = selection.getRangeAt(0); // range.deleteContents(); // range.insertNode( // document.createTextNode( // "<" + tag + ">" + selectedText + "</" + tag + ">" // ) // ); } } }; }; _this.actions.splice(0, 0, { name: "bold", text: _this.localize("ed.bold") || "B", onClick: createWrappingFunction("b") }); _this.actions.splice(1, 0, { name: "italic", text: _this.localize("ed.italic") || "I", onClick: createWrappingFunction("i") }); _this.actions.splice(2, 0, { name: "underline", text: _this.localize("ed.underline") || "U", onClick: createWrappingFunction("u") }); _this.actions.splice(3, 0, { name: "fpAddQuestion", text: _this.localize("ed.fpAddQuestion"), title: _this.localize("ed.fpAddQuestion"), hasTitle: true, template: "fp-add-question", availableTypes: ["text", "boolean", "radiogroup", "checkbox"], onAddQuestion: (function (data, event) { var questionType = event.target.value; if (!!questionType) { var newElelentName = editor.getNewName(questionType); question.addNewQuestion(questionType, newElelentName); // question.content += "{" + newElelentName + "}"; // var selection = document.getSelection(); // if (!!selection) { // var range = new Range(); // selection.addRange(range); // range.insertNode( // document.createTextNode("{" + newElelentName + "}") // ); // } event.target.value = ""; } }) }); _this.actions.splice(4, 0, { template: "action-separator" }); return _this; } return FlowPanelActionsAdorner; }(__WEBPACK_IMPORTED_MODULE_4__question_actions__["b" /* QuestionActionsAdorner */])); __WEBPACK_IMPORTED_MODULE_1_knockout__["components"].register("flowpanel-actions", { viewModel: { createViewModel: function (params, componentInfo) { return new FlowPanelActionsAdorner(params.question, params.editor, (componentInfo.element)); } }, template: templateHtml }); var flowpanelActionsAdorner = { getMarkerClass: function (model) { return model.getType() === "flowpanel" ? "panel_actions" : ""; }, getElementName: function (model) { return "container"; }, afterRender: function (elements, model, editor) { var decoration = document.createElement("div"); decoration.className = "svda-question-actions"; decoration.innerHTML = "<flowpanel-actions params='question: model, editor: editor'></question-flowpanel>"; elements[0].appendChild(decoration); __WEBPACK_IMPORTED_MODULE_1_knockout__["applyBindings"]({ model: model, editor: editor }, decoration); __WEBPACK_IMPORTED_MODULE_1_knockout__["tasks"].runEarly(); editor.onAdornerRenderedCallback(model, "flowpanel-actions", decoration); } }; __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__surveyjsObjects__["b" /* registerAdorner */])("flowpanel-actions", flowpanelActionsAdorner); /***/ }), /* 50 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_knockout__ = __webpack_require__(1); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_knockout___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_knockout__); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_survey_knockout__ = __webpack_require__(2); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_survey_knockout___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_survey_knockout__); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__surveyjsObjects__ = __webpack_require__(6); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__editorLocalization__ = __webpack_require__(0); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_4_sortablejs__ = __webpack_require__(9); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_4_sortablejs___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_4_sortablejs__); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__item_editor__ = __webpack_require__(11); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__utils_utils__ = __webpack_require__(8); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__image_items_scss__ = __webpack_require__(83); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__image_items_scss___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_7__image_items_scss__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return imageItemsAdorner; }); /* unused harmony export addImageItemAdorner */ var templateHtml = __webpack_require__(136); var ImageItemInplaceEditor = /** @class */ (function () { function ImageItemInplaceEditor(name, question, item, rootElement, editor, itemsRoot) { var _this = this; this.name = name; this.question = question; this.item = item; this.rootElement = rootElement; this.editor = editor; this.itemsRoot = itemsRoot; this.imageChoosen = function (event) { var input = _this.itemsRoot.getElementsByClassName("svda-choose-file")[0]; if (!window["FileReader"]) return; if (!input || !input.files || input.files.length < 1) return; var files = []; for (var i = 0; i < input.files.length; i++) { files.push(input.files[i]); } _this.valueChanged && _this.valueChanged(files); }; } ImageItemInplaceEditor.prototype.deleteItem = function (model, event) { if (model.question.choices.length > 1) { var index = model.question.choices.indexOf(model.item); model.question.choices.splice(index, 1); this.editor.onQuestionEditorChanged(this.question); } }; Object.defineProperty(ImageItemInplaceEditor.prototype, "isLastItem", { get: function () { return this.question.choices.length === 1; }, enumerable: true, configurable: true }); ImageItemInplaceEditor.prototype.chooseImage = function (model, event) { var fileInput = this.itemsRoot.getElementsByClassName("svda-choose-file")[0]; fileInput.value = ""; fileInput.onchange = this.imageChoosen; fileInput.click(); }; ImageItemInplaceEditor.prototype.getLocString = function (str) { return __WEBPACK_IMPORTED_MODULE_3__editorLocalization__["a" /* editorLocalization */].getString(str); }; return ImageItemInplaceEditor; }()); __WEBPACK_IMPORTED_MODULE_0_knockout__["components"].register("image-item-editor", { viewModel: { createViewModel: function (params, componentInfo) { var model = new ImageItemInplaceEditor(params.target[params.name], params.question, params.item, componentInfo.element, params.editor, params.itemsRoot); var property = __WEBPACK_IMPORTED_MODULE_1_survey_knockout__["Serializer"].findProperty("imageitemvalue", //params.target.getType(), params.name); model.valueChanged = function (files) { if (!files[0]) return; params.editor.uploadFiles(files, function (_, link) { var options = { propertyName: property.name, obj: params.item, value: link, newValue: null, doValidation: false }; params.editor.onValueChangingCallback(options); link = options.newValue === null ? options.value : options.newValue; params.target[params.name] = link; params.editor.onPropertyValueChanged(property, params.target, link); params.editor.onQuestionEditorChanged(params.question); }); }; return model; } }, template: templateHtml }); var imageItemsAdorner = { getMarkerClass: function (model) { return typeof model.getType === "function" && model.getType() === "imagepicker" ? "image_item_editable" : ""; }, getElementName: function (model) { return "item"; }, afterRender: function (elements, model, editor) { var itemsRoot = elements[0].parentElement; for (var i = 0; i < elements.length; i++) { elements[i].onclick = function (e) { return e.preventDefault(); }; var decoration = document.createElement("span"); decoration.className = "svda-adorner-root"; decoration.innerHTML = "<image-item-editor params='name: \"imageLink\", target: target, item: item, question: question, editor: editor, itemsRoot: itemsRoot'></image-item-editor>"; elements[i].appendChild(decoration); __WEBPACK_IMPORTED_MODULE_0_knockout__["applyBindings"]({ item: model.choices[i], question: model, target: model.choices[i], editor: editor, itemsRoot: itemsRoot }, decoration); __WEBPACK_IMPORTED_MODULE_0_knockout__["tasks"].runEarly(); editor.onAdornerRenderedCallback(model, "image-items", decoration, model.choices[i]); } var sortable = __WEBPACK_IMPORTED_MODULE_4_sortablejs___default.a.create(itemsRoot, { handle: ".svda-drag-handle", draggable: ".image_item_editable", animation: 150, onEnd: function (evt) { var choices = model.choices; var choice = choices[evt.oldIndex]; choices.splice(evt.oldIndex, 1); choices.splice(evt.newIndex, 0, choice); editor.onQuestionEditorChanged(model); } }); var input = document.createElement("input"); input.type = "file"; input.accept = "image/*"; input.className = "svda-choose-file"; input.style.position = "absolute"; input.style.opacity = "0"; itemsRoot.appendChild(input); } }; __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__surveyjsObjects__["b" /* registerAdorner */])("image-items", imageItemsAdorner); var addImageItemAdorner = { getMarkerClass: function (model) { return typeof model.getType === "function" && model.getType() === "imagepicker" ? "sv_imagepicker_root" : ""; }, getElementName: function (model) { return "root"; }, afterRender: function (elements, model, editor) { var itemsRoot = elements[0]; var addItemElement = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_5__item_editor__["b" /* createAddItemElement */])(function () { var fileInput = (itemsRoot.getElementsByClassName("svda-choose-file")[0]); fileInput.value = ""; fileInput.onchange = function (event) { if (!fileInput || !fileInput.files || fileInput.files.length < 1) return; var files = []; for (var i = 0; i < fileInput.files.length; i++) { files.push(fileInput.files[i]); } var itemText = __WEBPACK_IMPORTED_MODULE_1_survey_knockout__["surveyLocalization"].getString("choices_Item"); var nextValue = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_6__utils_utils__["a" /* getNextValue */])(itemText, (model.choices || []).map(function (c) { return c.value; })); var itemValue = new __WEBPACK_IMPORTED_MODULE_1_survey_knockout__["ItemValue"](nextValue, undefined, "imageitemvalue"); itemValue.locOwner = { getLocale: function () { if (!!model["getLocale"]) return model.getLocale(); return ""; }, getMarkdownHtml: function (text) { return text; }, getProcessedText: function (text) { return text; } }; model.choices = model.choices.concat([itemValue]); itemValue = model.choices[model.choices.length - 1]; editor.onQuestionEditorChanged(model); editor.onItemValueAddedCallback(model, "choices", itemValue, model.choices); var property = __WEBPACK_IMPORTED_MODULE_1_survey_knockout__["Serializer"].findProperty("imageitemvalue", "imageLink"); editor.uploadFiles(files, function (_, link) { var options = { propertyName: property.name, obj: itemValue, value: link, newValue: null, doValidation: false }; editor.onValueChangingCallback(options); link = options.newValue === null ? options.value : options.newValue; itemValue["imageLink"] = link; editor.onPropertyValueChanged(property, itemValue, link); editor.onQuestionEditorChanged(model); }); }; fileInput.click(); }); addItemElement.style.width = (model["imageWidth"] || 200) + 10 + "px"; addItemElement.style.height = (model["imageHeight"] || 150) + 10 + "px"; addItemElement.style.lineHeight = addItemElement.style.height; itemsRoot.appendChild(addItemElement); var input = document.createElement("input"); input.type = "file"; input.accept = "image/*"; input.className = "svda-choose-file"; input.style.position = "absolute"; input.style.opacity = "0"; itemsRoot.appendChild(input); } }; __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__surveyjsObjects__["b" /* registerAdorner */])("add-image-item", addImageItemAdorner); /***/ }), /* 51 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_knockout__ = __webpack_require__(1); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_knockout___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_knockout__); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__label_editor_scss__ = __webpack_require__(85); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__label_editor_scss___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1__label_editor_scss__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return labelAdorner; }); var labelAdorner = { getMarkerClass: function (model) { if (model.getType() === "boolean") { return "label_editable"; } return ""; }, getElementName: function (model) { return "label"; }, afterRender: function (elements, model, editor) { var decoration = document.createElement("span"); decoration.innerHTML = "<title-editor params='name: \"title\", model: model, editor: editor'></title-editor>"; elements[0].onclick = function (e) { return e.preventDefault(); }; elements[0].appendChild(decoration); __WEBPACK_IMPORTED_MODULE_0_knockout__["applyBindings"]({ model: model, editor: editor }, decoration); __WEBPACK_IMPORTED_MODULE_0_knockout__["tasks"].runEarly(); editor.onAdornerRenderedCallback(model, "label", decoration); } }; //registerAdorner("label", labelAdorner); /***/ }), /* 52 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(3); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_knockout__ = __webpack_require__(1); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_knockout___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_knockout__); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_survey_knockout__ = __webpack_require__(2); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_survey_knockout___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_survey_knockout__); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__surveyjsObjects__ = __webpack_require__(6); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__editorLocalization__ = __webpack_require__(0); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__title_editor__ = __webpack_require__(19); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__utils_utils__ = __webpack_require__(8); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__rating_item_editor_scss__ = __webpack_require__(87); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__rating_item_editor_scss___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_7__rating_item_editor_scss__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return ratingItemAdorner; }); var templateHtml = __webpack_require__(139); var RatingItemEditor = /** @class */ (function (_super) { __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__["a" /* __extends */])(RatingItemEditor, _super); function RatingItemEditor(name, question, item, rootElement, editor) { var _this = _super.call(this, name, rootElement) || this; _this.question = question; _this.item = item; _this.editor = editor; return _this; } RatingItemEditor.prototype.deleteItem = function (model, event) { var question = model.question; var index = question.visibleRateValues .map(function (item) { return item.value; }) .indexOf(model.item.value); if (question.rateValues.length === 0 && index === question.visibleRateValues.length - 1) { question.rateMax -= question.rateStep; } else { if (question.rateValues.length === 0) { question.rateValues = question.visibleRateValues; } question.rateValues.splice(index, 1); } model.editor.onQuestionEditorChanged(question); }; Object.defineProperty(RatingItemEditor.prototype, "isLastItem", { get: function () { return this.question.visibleRateValues.length === 1; }, enumerable: true, configurable: true }); return RatingItemEditor; }(__WEBPACK_IMPORTED_MODULE_5__title_editor__["b" /* TitleInplaceEditor */])); __WEBPACK_IMPORTED_MODULE_1_knockout__["components"].register("rating-item-editor", { viewModel: { createViewModel: function (params, componentInfo) { var model = new RatingItemEditor(params.target[params.name], params.question, params.item, componentInfo.element, params.editor); var question = params.question; var property = __WEBPACK_IMPORTED_MODULE_2_survey_knockout__["Serializer"].findProperty(params.target.getType(), params.name); model.valueChanged = function (newValue) { if (question.rateValues.length === 0) { question.rateValues = question.visibleRateValues; var index = question.rateValues .map(function (item) { return item.value; }) .indexOf(params.item.value); question.rateValues[index] = params.target; } params.target[params.name] = newValue; params.editor.onQuestionEditorChanged(question); }; return model; } }, template: templateHtml }); var createAddItemHandler = function (question, onItemAdded, onItemAdding) { if (onItemAdding === void 0) { onItemAdding = null; } return function () { if (question.rateValues.length === 0) { question.rateMax += question.rateStep; } else { var nextValue = null; var values = question.rateValues.map(function (item) { return item.itemValue; }); var itemText = __WEBPACK_IMPORTED_MODULE_2_survey_knockout__["surveyLocalization"].getString("choices_Item"); nextValue = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_6__utils_utils__["a" /* getNextValue */])(itemText, values); var itemValue = new __WEBPACK_IMPORTED_MODULE_2_survey_knockout__["ItemValue"](nextValue); !!onItemAdding && onItemAdding(itemValue); itemValue.locOwner = { getLocale: function () { if (!!question["getLocale"]) return question.getLocale(); return ""; }, getMarkdownHtml: function (text) { return text; }, getProcessedText: function (text) { return text; } }; question.rateValues = question.rateValues.concat([itemValue]); } !!onItemAdded && onItemAdded(itemValue); }; }; var ratingItemAdorner = { getMarkerClass: function (model) { return !!model.visibleRateValues ? "item_editable" : ""; }, getElementName: function (model) { return "itemText"; }, afterRender: function (elements, model, editor) { for (var i = 0; i < elements.length; i++) { elements[i].onclick = function (e) { return e.preventDefault(); }; var decoration = document.createElement("span"); decoration.innerHTML = "<rating-item-editor params='name: \"text\", target: target, item: item, question: question, editor: editor'></rating-item-editor>"; elements[i].appendChild(decoration); var item = model.visibleRateValues[i]; __WEBPACK_IMPORTED_MODULE_1_knockout__["applyBindings"]({ item: item, question: model, target: item, editor: editor }, decoration); __WEBPACK_IMPORTED_MODULE_1_knockout__["tasks"].runEarly(); editor.onAdornerRenderedCallback(model, "rating-item", decoration, item); } var addNew = document.createElement("span"); addNew.title = __WEBPACK_IMPORTED_MODULE_4__editorLocalization__["a" /* editorLocalization */].getString("pe.addItem"); addNew.className = "svda-add-new-rating-item icon-inplace-add-item svd-primary-icon"; addNew.onclick = createAddItemHandler(model, function (itemValue) { editor.onQuestionEditorChanged(model); editor.onItemValueAddedCallback(model, "rateValues", itemValue, model.visibleRateValues); }, function (itemValue) { editor.onItemValueAddedCallback(model, "rateValues", itemValue, model.visibleRateValues); }); var svgElem = document.createElementNS("http://www.w3.org/2000/svg", "svg"); svgElem.setAttribute("class", "svd-svg-icon"); svgElem.style.width = "12px"; svgElem.style.height = "12px"; var useElem = document.createElementNS("http://www.w3.org/2000/svg", "use"); useElem.setAttributeNS("http://www.w3.org/1999/xlink", "xlink:href", "#icon-inplaceplus"); svgElem.appendChild(useElem); addNew.appendChild(svgElem); var parent = elements[0].parentElement.parentElement; parent.appendChild(addNew); } }; __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_3__surveyjsObjects__["b" /* registerAdorner */])("rating-item", ratingItemAdorner); /***/ }), /* 53 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_knockout__ = __webpack_require__(1); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_knockout___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_knockout__); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_survey_knockout__ = __webpack_require__(2); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_survey_knockout___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_survey_knockout__); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_sortablejs__ = __webpack_require__(9); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_sortablejs___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_sortablejs__); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__surveyjsObjects__ = __webpack_require__(6); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__editorLocalization__ = __webpack_require__(0); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__item_editor__ = __webpack_require__(11); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__select_items_editor_scss__ = __webpack_require__(88); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__select_items_editor_scss___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_6__select_items_editor_scss__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return selectItemsEditorAdorner; }); var templateHtml = __webpack_require__(140); __WEBPACK_IMPORTED_MODULE_0_knockout__["components"].register("select-items-editor", { viewModel: { createViewModel: function (params, componentInfo) { var isExpanded = __WEBPACK_IMPORTED_MODULE_0_knockout__["observable"](selectItemsEditorAdorner.isExpanded); var choices = __WEBPACK_IMPORTED_MODULE_0_knockout__["observableArray"](params.question.choices); var otherText = __WEBPACK_IMPORTED_MODULE_0_knockout__["observable"](params.question.otherText); var sortableElement = componentInfo.element.parentElement.getElementsByClassName("svda-select-items-collection")[0]; var sortable = null; // var property = Survey.Serializer.findProperty( // params.question.getType(), // "choices" // ); var raiseChangingEvent = function (target, propertyName, newValue) { var options = { propertyName: propertyName, obj: target, value: newValue, newValue: null, doValidation: false }; params.editor.onValueChangingCallback(options); newValue = options.newValue === null ? options.value : options.newValue; return newValue; }; var raiseChangedEvent = function (target, propertyName, newValue) { if (typeof target.getType === "function") { var property = __WEBPACK_IMPORTED_MODULE_1_survey_knockout__["Serializer"].findProperty(target.getType(), propertyName); params.editor.onPropertyValueChanged(property, target, newValue); } }; return { choices: choices, valueName: params.valueName, question: params.question, editor: params.editor, isExpanded: isExpanded, toggle: function () { return isExpanded(!isExpanded()); }, addOther: function () { var newValue = !params.question.hasOther; newValue = raiseChangingEvent(params.question, "hasOther", newValue); params.question.hasOther = newValue; raiseChangedEvent(params.question, "hasOther", newValue); }, addItem: __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_5__item_editor__["c" /* createAddItemHandler */])(params.question, function (itemValue) { // var options = { // propertyName: "choices", // obj: params.question, // value: params.question.choices, // newValue: null, // doValidation: false // }; // params.editor.onValueChangingCallback(options); choices(params.question.choices); }, function (itemValue) { params.editor.onItemValueAddedCallback(params.question, "choices", itemValue, params.question.choices); // params.editor.onPropertyValueChanged( // property, // params.question, // params.question.choices // ); params.editor.onQuestionEditorChanged(params.question); }), getLocString: function (str) { return __WEBPACK_IMPORTED_MODULE_4__editorLocalization__["a" /* editorLocalization */].getString(str); }, choicesRendered: function () { if (sortable) { sortable.destroy(); } sortable = __WEBPACK_IMPORTED_MODULE_2_sortablejs___default.a.create(sortableElement, { handle: ".svda-drag-handle", draggable: ".item_draggable", animation: 150, onEnd: function (evt) { var newChoices = [].concat(params.question.choices); var choice = newChoices[evt.oldIndex]; newChoices.splice(evt.oldIndex, 1); newChoices.splice(evt.newIndex, 0, choice); params.question.choices = newChoices; choices(newChoices); } }); }, valueChanged: function (itemValue, propertyName, newValue) { var newChoices = [].concat(params.question.choices); choices([]); choices(newChoices); __WEBPACK_IMPORTED_MODULE_0_knockout__["tasks"].runEarly(); params.editor.onAdornerRenderedCallback(params.question, "select-choices", componentInfo.element); }, otherText: otherText, otherValueChanged: function (itemValue, propertyName, newValue) { otherText(params.question.otherText); } }; } }, template: templateHtml }); var selectItemsEditorAdorner = { getMarkerClass: function (model) { return !!model.parent && !!model.choices ? "select_items_editor" : ""; }, getElementName: function (model) { return "selectWrapper"; }, afterRender: function (elements, model, editor) { elements[0].onclick = function (e) { return e.preventDefault(); }; var decoration = document.createElement("div"); decoration.innerHTML = "<select-items-editor params='question: question, editor: editor, valueName: \"" + (__WEBPACK_IMPORTED_MODULE_5__item_editor__["a" /* itemAdorner */].inplaceEditForValues ? "value" : "text") + "\"'></select-items-editor>"; elements[0].appendChild(decoration); __WEBPACK_IMPORTED_MODULE_0_knockout__["applyBindings"]({ question: model, editor: editor }, decoration); __WEBPACK_IMPORTED_MODULE_0_knockout__["tasks"].runEarly(); editor.onAdornerRenderedCallback(model, "select-choices", decoration); }, isExpanded: true }; __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_3__surveyjsObjects__["b" /* registerAdorner */])("select-choices", selectItemsEditorAdorner); /***/ }), /* 54 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__propertyEditors_propertyEditorFactory__ = __webpack_require__(4); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return Extentions; }); var Extentions = /** @class */ (function () { function Extentions() { } Extentions.registerCustomPropertyEditor = function (name, widgetJSON) { __WEBPACK_IMPORTED_MODULE_0__propertyEditors_propertyEditorFactory__["a" /* SurveyPropertyEditorFactory */].registerCustomEditor(name, widgetJSON); }; Extentions.unregisterCustomPropertyEditor = function (name) { __WEBPACK_IMPORTED_MODULE_0__propertyEditors_propertyEditorFactory__["a" /* SurveyPropertyEditorFactory */].unregisterCustomEditor(name); }; Extentions.registerPropertyEditor = function (name, creator) { __WEBPACK_IMPORTED_MODULE_0__propertyEditors_propertyEditorFactory__["a" /* SurveyPropertyEditorFactory */].registerEditor(name, creator); }; return Extentions; }()); /***/ }), /* 55 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__editorLocalization__ = __webpack_require__(0); /* unused harmony export danishStrings */ var danishStrings = { //survey templates survey: { edit: "Rediger", dropQuestion: "Træk et spørgsmål hertil fra paletten til venstre.", copy: "Kopier", addToToolbox: "Tilføj til paletten", deletePanel: "Slet panel", deleteQuestion: "Slet spørgsmål", convertTo: "Konverter til", drag: "Træk element" }, //questionTypes qt: { default: "Standard", checkbox: "Afkrydsningsfelt", comment: "Kommentar", imagepicker: "Billedvælger", dropdown: "Dropdown", file: "Fil", html: "Html", matrix: "Matrice (ét valg)", matrixdropdown: "Matrice (flere valg)", matrixdynamic: "Matrice (dynamiske rækker)", multipletext: "Flere tekstfelter", panel: "Panel", paneldynamic: "Panel (dynamiske paneler)", radiogroup: "Alternativknap", rating: "Vurdering", text: "Tekstfelt", boolean: "Sandt/falsk", expression: "Udtryk" }, //Strings in Editor ed: { defaultLocale: "Standard ({0})", survey: "Undersøgelse", settings: "Indstillinger for undersøgelse", editSurvey: "Rediger undersøgelse", addNewPage: "Tilføj ny side", moveRight: "Gå til højre", moveLeft: "Gå til venstre", deletePage: "Slet side", editPage: "Rediger side", edit: "Rediger", newPageName: "side", newQuestionName: "spørgsmål", newPanelName: "panel", testSurvey: "Afprøv undersøgelse", testSurveyAgain: "Afprøv undersøgelse igen", testSurveyWidth: "Bredde af undersøgelse: ", embedSurvey: "Indlejr undersøgelse", translation: "Oversættelse", saveSurvey: "Gem undersøgelse", designer: "Undersøgelsesdesigner", jsonEditor: "JSON Editor", undo: "Fortryd", redo: "Annuller fortryd", options: "Indstillinger", generateValidJSON: "Generer gylding JSON", generateReadableJSON: "Generer læsbar JSON", toolbox: "Værktøjskasse", toolboxGeneralCategory: "Generelt", delSelObject: "Slet valgt objekt", editSelObject: "Rediger valgt objekt", correctJSON: "Ret venligst JSON.", surveyResults: "Undersøgelsesresultat: ", modified: "Ændret", saving: "Gemmer", saved: "Gemt", saveError: "Fejl! Undersøgelsen er ikke blevet gemt.", translationAddLanguage: "Vælg et sprog at oversætte", translationShowAllStrings: "Vis alle tekststrenge", translationShowAllPages: "Vis alle sider", translationNoStrings: "Ingen tekststrenge at oversætte. Ret filteret.", translationExportToSCVButton: "Eksporter til CSV", translationImportFromSCVButton: "Importer fra CSV", translationMergeLocaleWithDefault: "Flet {0} med standardsprog" }, //Property names in table headers pel: { isRequired: "Påkrævet?" }, //Property Editors pe: { apply: "Anvend", ok: "OK", cancel: "Annuller", reset: "Nulstil", close: "Luk", delete: "Slet", addNew: "Tilføj ny", addItem: "Klik for at tilføje...", removeAll: "Fjern alle", edit: "Rediger", itemValueEdit: "Synlig hvis", editChoices: "Rediger valgmuligheder", move: "Flyt", empty: "<tom>", notEmpty: "<redigér værdi>", fastEntry: "Fast Entry", formEntry: "Form Entry", testService: "Test the service", conditionSelectQuestion: "Vælg spørgsmål...", conditionValueQuestionTitle: "Indtast/vælg værdi", conditionButtonAdd: "Tilføj", conditionButtonReplace: "Erstat", conditionHelp: "Indtast et boolsk udtryk. Det skal returnere true for at holde spørgsmålet/siden synlig. For eksempel: {question1} = 'value1' or ({question2} * {question4} > 20 and {question3} < 5)", expressionHelp: "Indtast et udtryk. Du kan bruge krølle-parenteser for at få adgang til svarene: '{question1} + {question2}', '({price}*{quantity}) * (100 - {discount})'", aceEditorHelp: "Tast ctrl+space for hjælp til at afslutte udtrykket", aceEditorRowTitle: "Aktuel række", aceEditorPanelTitle: "Aktuelt panel", showMore: "Se dokumentationen for flere informationer", conditionShowMoreUrl: "https://surveyjs.io/Documentation/LibraryParameter?id=Question¶meter=visibleIf", assistantTitle: "Tilgængelige spørgsmål:", cellsEmptyRowsColumns: "Der skal være mindst én kolonne eller række", propertyIsEmpty: "Indtast en værdi", value: "Værdi", text: "Tekst", rowid: "Række ID", imageLink: "Billedlink", columnEdit: "Rediger kolonne: {0}", itemEdit: "Redigér: {0}", url: "URL", path: "Sti", valueName: "Værdiens navn", titleName: "Titelnavn", hasOther: "Har andet element", otherText: "Andet element tekst", name: "Navn", title: "Titel", cellType: "Celletype", colCount: "Antal kolonner", choicesOrder: "Vælg rækkefølge på valg", visible: "Er synlig?", isRequired: "Er påkrævet?", startWithNewLine: "Skal starte med ny linie?", rows: "Antal rækker", placeHolder: "Hint-tekst", showPreview: "Vises forhåndsvisning af billeder?", storeDataAsText: "Gem filindhold i JSON-resultat som tekst", maxSize: "Maksimal filstørrelse i bytes", imageHeight: "Billedhøjde", imageWidth: "Billedbredde", rowCount: "Antal rækker", columnLayout: "Kolonnelayout", addRowLocation: "Tilføj række knapplacering", addRowText: "Tilføj række knaptekst", removeRowText: "Fjern række knaptekst", minRateDescription: "Beskriv laveste vurdering", maxRateDescription: "Beskriv højeste vurdering", inputType: "Inputtype", optionsCaption: "Muligheder tekst", defaultValue: "Standardværdi", cellsDefaultRow: "Standard celletekst", surveyEditorTitle: "Rediger undersøgelsesindstillinger", qEditorTitle: "Redigér: {0}", maxLength: "Maximal længde", //survey showTitle: "Vis/skjul titel", locale: "Standardsprog", mode: "Mode (rediger/skrivebeskyttet)", clearInvisibleValues: "Fjern usynlige værdier", cookieName: "Cookienavn (for at undgå at afvikle undersøgelsen to gange lokalt)", sendResultOnPageNext: "Send undersøgelsesresultatet ved næste side", storeOthersAsComment: "Gem 'others' værdien i et seperat felt", showPageTitles: "Vis sidetitler", showPageNumbers: "Vis sidenumre", pagePrevText: "Forrige side knaptekst", pageNextText: "Næste side knaptekst", completeText: "Færdig knaptekst", startSurveyText: "Start knaptekst", showNavigationButtons: "Vis navigationsknapper (standard navigation)", showPrevButton: "Vis forrige knap (brugeren må gå tilbage til forrige side)", firstPageIsStarted: "Den første side in undersøgelsen er starten på undersøgelsen.", showCompletedPage: "Vis afslutningssiden til slut (completedHtml)", goNextPageAutomatic: "Gå til næste side automatisk når alle spørgsmål er besvaret", showProgressBar: "Vis fremdriftslinje", questionTitleLocation: "Spørgsmålstitel placering", requiredText: "Påkrævet spørgsmålssymbol(er)", questionStartIndex: "Spørgsmål startindex (1, 2 eller 'A', 'a')", showQuestionNumbers: "Vis spørgsmålsnumre", questionTitleTemplate: "Spørgsmålstitel template, standard er: '{no}. {require} {title}'", questionErrorLocation: "Spørgsmålsfejl placering", focusFirstQuestionAutomatic: "Fokusér første spørgsmål ved sideskift", questionsOrder: "Rækkefølge af spørgsmål på siden", maxTimeToFinish: "Maximal tid til at gennemføre undersøgelsen", maxTimeToFinishPage: "Maximal tid til at gennemføre en side i undersøgelsen", showTimerPanel: "Vis tidspanel", showTimerPanelMode: "Vis tidspanel tilstand", renderMode: "Renderingstilstand", allowAddPanel: "Tillad at tilføje et panel", allowRemovePanel: "Tillad at fjerne et panel", panelAddText: "Tilføj panel tekst", panelRemoveText: "Fjern panel tekst", isSinglePage: "Vis alle elementer på én side", tabs: { general: "Generelt", fileOptions: "Indstillinger", html: "Html-editor", columns: "Kolonner", rows: "Rækker", choices: "Valgmuligheder", items: "Elementer", visibleIf: "Synlig hvis", enableIf: "Aktiv hvis", rateValues: "Bedøm-værdier", choicesByUrl: "Valgmuligheder fra Web", matrixChoices: "Standard valgmuligheder", multipleTextItems: "Tekst inputmuligheder", validators: "Valideringer", navigation: "Navigation", question: "Spørgsmål", completedHtml: "Færdig Html", loadingHtml: "Indlæser Html", timer: "Tid/Quiz", triggers: "Triggere", templateTitle: "Skabelon titel" }, editProperty: "Rediger egenskab '{0}'", items: "[ Element: {0} ]", enterNewValue: "Indtast værdien.", noquestions: "Der er ingen spørgsmål i undersøgelsen.", createtrigger: "Opret en trigger", triggerOn: "På ", triggerMakePagesVisible: "Gør sider synlige:", triggerMakeQuestionsVisible: "Gør spørgsmål synlige:", triggerCompleteText: "Aflslut spørgeskema ved at fortsætte.", triggerNotSet: "Triggerer er ikke sat", triggerRunIf: "Afvikl hvis", triggerSetToName: "Ændr værdien af: ", triggerFromName: "Kopier værdi fra: ", triggerRunExpression: "Afvikl dette udtryk:", triggerSetValue: "til: ", triggerIsVariable: "Gem ikke variablen i undersøgelsesresultatet." }, //Property values pv: { true: "true", false: "false", inherit: "inherit", show: "show", hide: "hide", default: "default", initial: "initial", random: "random", collapsed: "collapsed", expanded: "expanded", none: "none", asc: "ascending", desc: "descending", indeterminate: "indeterminate", decimal: "decimal", currency: "currency", percent: "percent", firstExpanded: "firstExpanded", off: "off", onPanel: "onPanel", onSurvey: "onSurvey", list: "list", progressTop: "progressTop", progressBottom: "progressBottom", progressTopBottom: "progressTopBottom", horizontal: "horizontal", vertical: "vertical", top: "top", bottom: "bottom", topBottom: "top and bottom", left: "left", color: "color", date: "date", datetime: "datetime", "datetime-local": "datetime-local", email: "email", month: "month", number: "number", password: "password", range: "range", tel: "tel", text: "text", time: "time", url: "url", week: "week", hidden: "hidden", on: "on", onPage: "onPage", edit: "edit", display: "display", onComplete: "onComplete", onHidden: "onHidden", all: "all", page: "page", survey: "survey", onNextPage: "onNextPage", onValueChanged: "onValueChanged" }, //Operators op: { empty: "is empty", notempty: "is not empty", equal: "equals", notequal: "not equals", contains: "contains", notcontains: "not contains", greater: "greater", less: "less", greaterorequal: "greater or equals", lessorequal: "less or equals" }, //Embed window ew: { angular: "Benyt Angular version", jquery: "Benyt jQuery version", knockout: "Benyt Knockout version", react: "Benyt React version", vue: "Benyt Vue version", bootstrap: "For bootstrap framework", standard: "Ingen bootstrap", showOnPage: "Vis undersøgelsen på en side", showInWindow: "Vis undersøgelsen i et vindue", loadFromServer: "Hent undersøgelsen som JSON fra serveren", titleScript: "Scripts og styles", titleHtml: "HTML", titleJavaScript: "JavaScript" }, //Test Survey ts: { selectPage: "Vælg siden for at teste den:" }, validators: { answercountvalidator: "answer count", emailvalidator: "e-mail", expressionvalidator: "expression", numericvalidator: "numeric", regexvalidator: "regex", textvalidator: "text" }, triggers: { completetrigger: "undersøgelse gennemført", setvaluetrigger: "sæt værdi", copyvaluetrigger: "kopiér værdi", runexpressiontrigger: "afvikl udtry", visibletrigger: "skift synlighed" }, //Properties p: { name: "navn", title: { name: "titel", title: "Lad den være tom hvis det er det samme som 'Navn'" }, navigationButtonsVisibility: "navigationButtonsVisibility", questionsOrder: "questionsOrder", maxTimeToFinish: "maxTimeToFinish", visible: "visible", visibleIf: "visibleIf", questionTitleLocation: "questionTitleLocation", description: "description", state: "state", isRequired: "isRequired", indent: "indent", requiredErrorText: "requiredErrorText", startWithNewLine: "startWithNewLine", innerIndent: "innerIndent", page: "page", width: "width", commentText: "commentText", valueName: "valueName", enableIf: "enableIf", defaultValue: "defaultValue", correctAnswer: "correctAnswer", readOnly: "readOnly", validators: "validators", titleLocation: "titleLocation", hasComment: "hasComment", hasOther: "hasOther", choices: "choices", choicesOrder: "choicesOrder", choicesByUrl: "choicesByUrl", otherText: "otherText", otherErrorText: "otherErrorText", storeOthersAsComment: "storeOthersAsComment", label: "label", showTitle: "showTitle", valueTrue: "valueTrue", valueFalse: "valueFalse", cols: "cols", rows: "rows", placeHolder: "placeHolder", optionsCaption: "optionsCaption", expression: "expression", format: "format", displayStyle: "displayStyle", currency: "currency", useGrouping: "useGrouping", showPreview: "showPreview", allowMultiple: "allowMultiple", imageHeight: "imageHeight", imageWidth: "imageWidth", storeDataAsText: "storeDataAsText", maxSize: "maxSize", html: "html", columns: "columns", cells: "cells", isAllRowRequired: "isAllRowRequired", horizontalScroll: "horizontalScroll", cellType: "cellType", columnsLayout: "columnsLayout", columnColCount: "columnColCount", columnMinWidth: "columnMinWidth", rowCount: "rowCount", minRowCount: "minRowCount", maxRowCount: "maxRowCount", keyName: "keyName", keyDuplicationError: "keyDuplicationError", confirmDelete: "confirmDelete", confirmDeleteText: "confirmDeleteText", addRowLocation: "addRowLocation", addRowText: "addRowText", removeRowText: "removeRowText", items: "items", itemSize: "itemSize", colCount: "colCount", templateTitle: "templateTitle", templateDescription: "templateDescription", allowAddPanel: "allowAddPanel", allowRemovePanel: "allowRemovePanel", panelCount: "panelCount", minPanelCount: "minPanelCount", maxPanelCount: "maxPanelCount", panelsState: "panelsState", panelAddText: "panelAddText", panelRemoveText: "panelRemoveText", panelPrevText: "panelPrevText", panelNextText: "panelNextText", showQuestionNumbers: "showQuestionNumbers", showRangeInProgress: "showRangeInProgress", renderMode: "renderMode", templateTitleLocation: "templateTitleLocation", rateValues: "rateValues", rateMin: "rateMin", rateMax: "rateMax", rateStep: "rateStep", minRateDescription: "minRateDescription", maxRateDescription: "maxRateDescription", inputType: "inputType", size: "size", locale: "locale", focusFirstQuestionAutomatic: "focusFirstQuestionAutomatic", completedHtml: "completedHtml", completedBeforeHtml: "completedBeforeHtml", loadingHtml: "loadingHtml", triggers: "triggers", cookieName: "cookieName", sendResultOnPageNext: "sendResultOnPageNext", showNavigationButtons: "showNavigationButtons", showPrevButton: "showPrevButton", showPageTitles: "showPageTitles", showCompletedPage: "showCompletedPage", showPageNumbers: "showPageNumbers", questionErrorLocation: "questionErrorLocation", showProgressBar: "showProgressBar", mode: "mode", goNextPageAutomatic: "goNextPageAutomatic", checkErrorsMode: "checkErrorsMode", clearInvisibleValues: "clearInvisibleValues", startSurveyText: "startSurveyText", pagePrevText: "pagePrevText", pageNextText: "pageNextText", completeText: "completeText", requiredText: "requiredText", questionStartIndex: "questionStartIndex", questionTitleTemplate: "questionTitleTemplate", firstPageIsStarted: "firstPageIsStarted", isSinglePage: "isSinglePage", maxTimeToFinishPage: "maxTimeToFinishPage", showTimerPanel: "showTimerPanel", showTimerPanelMode: "showTimerPanelMode", defaultPanelValue: "defaultPanelValue", defaultRowValue: "defaultRowValue", hasNone: "hasNone", noneText: "noneText", text: "text", minValue: "minimum value", maxValue: "maximum value", minLength: "minumum length", maxLength: "maximum length", allowDigits: "allow digits", minCount: "minumum count", maxCount: "maximum count", regex: "regular expression" } }; __WEBPACK_IMPORTED_MODULE_0__editorLocalization__["a" /* editorLocalization */].locales["da"] = danishStrings; /***/ }), /* 56 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__editorLocalization__ = __webpack_require__(0); var frenchTranslation = { //Survey templates survey: { edit: "Éditer", dropQuestion: "Déposer votre question ici.", copy: "Copier", addToToolbox: "Ajouter à la boîte à outils", deletePanel: "Supprimer le panneau", deleteQuestion: "Supprimer la question", convertTo: "Convertir en" }, //questionTypes qt: { default: "Par défaut", checkbox: "Cases à cocher", comment: "Commentaire", imagepicker: "Choix d'image", dropdown: "Liste déroulante", file: "Fichier", html: "HTML", matrix: "Matrice (choix unique)", matrixdropdown: "Matrice (choix multiples)", matrixdynamic: "Matrice (lignes dynamiques)", multipletext: "Champ multilignes", panel: "Panneau", paneldynamic: "Panneau (panneaux dynamiques)", radiogroup: "Boutons radio", rating: "Évaluation", text: "Champ texte", boolean: "Booléen", expression: "Expression" }, //Strings in Editor ed: { survey: "Questionnaire", editSurvey: "Éditer le questionnaire", settings: "Configuration du questionnaire", opjectPropertiesHeader: "Propriétés", showObjectProperties: "Afficher les propriétés", hideObjectProperties: "Cacher les propriétés", addNewPage: "Ajouter une page", moveRight: "Défiler à droite", moveLeft: "Défiler à gauche", deletePage: "Supprimer une page", editPage: "Éditer une page", edit: "Éditer", newPageName: "page", newQuestionName: "question", newPanelName: "panneau", newTextItemName: "texte", testSurvey: "Tester le questionnaire", testSurveyAgain: "Tester à nouveau le questionnaire", testSurveyWidth: "Largeur du questionnaire : ", embedSurvey: "Intégrer le questionnaire", translation: "Traduction", saveSurvey: "Sauvegarder le questionnaire", designer: "Éditeur de questionnaire", jsonEditor: "Éditer JSON", undo: "Annuler", redo: "Rétablir", options: "Options", generateValidJSON: "Générer un JSON valide", generateReadableJSON: "Générer un JSON lisible", toolbox: "Boîte à outils", toolboxGeneralCategory: "Général", delSelObject: "Supprimer l'objet sélectionné", editSelObject: "Éditer l'objet sélectionné", correctJSON: "SVP corrigez le JSON", surveyResults: "Résultat du questionnaire : ", surveyResultsTable: "Comme tableau", surveyResultsJson: "Comme JSON", resultsTitle: "Titre de la question", resultsName: "Nom de la question", resultsValue: "Valeur de la réponse", resultsDisplayValue: "Valeur affichée", modified: "Modifié", saving: "Sauvegarde en cours", saved: "Sauvegardé", saveError: "Erreur! Le contenu de l'éditeur n'a pas été sauvegardé.", translationAddLanguage: "Choisir langue à traduire", translationShowAllStrings: "Afficher tous les termes", translationShowAllPages: "Afficher toutes les pages", translationNoStrings: "Aucun terme à traduire. Veuillez modifier le filtre.", translationExportToSCVButton: "Exporter en CSV", translationImportFromSCVButton: "Importer d'un CSV", translationMergeLocaleWithDefault: "Fusionner {0} avec langue par défaut", bold: "Gras", italic: "Italique", underline: "Souligné", fpAddQuestion: "Ajouter question...", completedHtmlOnConditionItemText: "Afficher si :", }, //Property names in table headers pel: { isRequired: "Obligatoire ?" }, //Property Editors pe: { apply: "Appliquer", ok: "OK", cancel: "Annuler", reset: "Réinitialiser", close: "Fermer", delete: "Supprimer", addNew: "Ajouter un nouveau", addItem: "Cliquer pour ajouter un item...", addOther: "Autre", addSelectAll: "Tout sélectionner", addNone: "Aucun", removeAll: "Tout supprimer", edit: "Éditer", move: "Déplacer", empty: "<vide>", notEmpty: "<éditer la valeur>", fastEntry: "Ajout rapide", formEntry: "Ajout via formulaire", testService: "Tester le service", conditionSelectQuestion: "Sélectionner une question...", conditionButtonAdd: "Ajouter", conditionButtonReplace: "Remplacer", conditionHelp: 'Veuillez entrer une expression booléenne. Elle doit retourner Vrai(true) pour garder la question/page visible. Par exemple: {question1} = "valeur1" or ({question2} = 3 and {question3} < 5)', expressionHelp: "Veuillez entrer une expression. Vous pouvez utiliser des accolades pour accéder aux valeurs des questions '{question1} + {question2}', '({prix}*{quantite}) * (100 - {remise})'", aceEditorHelp: "Appuyer sur Ctrl + espace pour obtenir une aide pour la saisie d'expression", aceEditorRowTitle: "Ligne courante", aceEditorPanelTitle: "Panneau courant", showMore: "Pour plus d'informations, veuillez vous référer à la documentation", assistantTitle: "Questions disponibles :", cellsEmptyRowsColumns: "Il faut au minimum une ligne ou une colonne", propertyIsEmpty: "Veuillez entrer une valeur pour la propriété", value: "Valeur", text: "Texte", rowid: "ID Ligne", imageLink: "URL de l'image", columnEdit: "Éditer la colonne: {0}", itemEdit: "Éditer l'item: {0}", url: "URL", path: "Chemin", valueName: "Nom de la valeur", titleName: "Nom du titre", hasOther: "Contient un item \"Autre\"", otherText: "Texte item \"Autre\"", hasNone: "Contient un item \"Aucun\"", noneText: "Texte item \"Aucun\"", hasSelectAll: "Contient un item \"Tout sélectionner\"", selectAllText: "Texte item \"Tout sélectionner\"", choicesMin: "Valeur minimum pour les items générés automatiquement", choicesMax: "Valeur maximum pour les items générés automatiquement", choicesStep: "Différence entre items générés automatiquement", name: "Nom", title: "Titre", cellType: "Type de cellule", colCount: "Nombre de colonnes", choicesOrder: "Sélectionner l'ordre des choix", visible: "Est visible ?", isRequired: "Est obligatoire ?", isAllRowRequired: "Réponse obligatoire pour toutes les lignes", requiredErrorText: "Message d'erreur lorsque obligatoire", startWithNewLine: "Commencer avec une nouvelle ligne ?", rows: "Nombre de lignes", placeHolder: "Placeholder (indice dans le champ)", showPreview: "L'aperçu d'image est-il affiché ?", storeDataAsText: "Stocker le contenu du fichier dans le résultat JSON sous forme de texte", maxSize: "Taille maximum du fichier en octets", imageHeight: "Hauteur de l'image", imageWidth: "Largeur de l'image", rowCount: "Nombre de lignes", addRowLocation: 'Alignement bouton "Ajouter une ligne"', addRowText: 'Texte bouton "Ajouter une ligne"', removeRowText: 'Texte bouton "Supprimer une ligne"', rateMin: "Note minimum", rateMax: "Note maximum", rateStep: "Intervalle des notes", minRateDescription: "Description note minimum", maxRateDescription: "Description note maximum", inputType: "Type de champ", optionsCaption: "Texte par défaut", defaultValue: "Valeur par défaut", cellsDefaultRow: "Texte de cellule par défaut", surveyEditorTitle: "Éditer les préférences du questionnaire", qEditorTitle: "Éditer la question: {0}", maxLength: "Longueur maximum", //survey showTitle: "Afficher/cacher le titre", locale: "Langue par défaut", simulator: "Choisir appareil", landscapeOrientation: "Paysage", mode: "Mode (édition/lecture seule)", clearInvisibleValues: "Effacer les valeurs invisibles", cookieName: "Nom du cookie (pour empêcher de compléter 2 fois le questionnaire localement)", sendResultOnPageNext: "Envoyer les résultats au changement de page", storeOthersAsComment: 'Sauvegarder la valeur "Autres" dans un champ séparé', showPageTitles: "Afficher les titres de pages", showPageNumbers: "Afficher les numéros de pages", pagePrevText: "Texte bouton page précédente", pageNextText: "Texte bouton page suivante", completeText: "Texte bouton terminer", startSurveyText: "Texte bouton commencer", showNavigationButtons: "Afficher les boutons de navigation (navigation par défaut)", showPrevButton: "Afficher le bouton précédent (l'utilisateur pourra retourner sur la page précédente)", firstPageIsStarted: "La première page du questionnaire est une page de démarrage.", showCompletedPage: 'Afficher la page "terminé" à la fin (completedHtml)', goNextPageAutomatic: "Aller à la page suivante automatiquement pour toutes les questions", showProgressBar: "Afficher la barre de progression", questionTitleLocation: "Emplacement du titre de la question", requiredText: "La question requiert un/des symbole(s)", questionStartIndex: "Index de départ de la question (1, 2 ou 'A', 'a')", showQuestionNumbers: "Afficher les numéros de questions", questionTitleTemplate: "Gabarit du titre de question, par défaut : '{no}. {require} {title}'", questionErrorLocation: "Emplacement de l'erreur", focusFirstQuestionAutomatic: "Focus sur la première question au changement de page", questionsOrder: "Ordre des éléments sur la page", maxTimeToFinish: "Temps maximum pour terminer le questionnaire", maxTimeToFinishPage: "Temps maximum pour terminer une page", showTimerPanel: "Afficher le panneau chronomètre", showTimerPanelMode: "Mode d'affichage du panneau chronomètre", renderMode: "Mode de rendu", allowAddPanel: "Autoriser l'ajout du panneau", allowRemovePanel: "Autoriser la suppression du panneau", panelAddText: "Ajouter un panneau texte", panelRemoveText: "Supprimer le panneau texte", isSinglePage: "Afficher tous les éléments sur une seule page", expression: "Expression", minValue: "Valeur minimum", maxValue: "Valeur maximum", minLength: "Longueur minimum", allowDigits: "Permettre chiffres", minCount: "Nombre minimum", maxCount: "Nombre maximum", regex: "Expression régulière", tabs: { general: "Général", fileOptions: "Options", html: "Éditeur HTML", columns: "Colonnes", rows: "Lignes", choices: "Choix", visibleIf: "Visible si", enableIf: "Actif si", requiredIf: "Requis si", rateValues: "Barème", choicesByUrl: "Choix depuis API web", matrixChoices: "Choix par défaut", multipleTextItems: "Champs texte multiples", validators: "Validateurs", navigation: "Navigation", question: "Question", completedHtml: "HTML de fin", completedHtmlOnCondition: "HTML de fin avec condition", loadingHtml: "HTML de chargement", timer: "Chronomètre/Quiz", calculatedValues: "Variables", triggers: "Déclencheurs", templateTitle: "Titre de gabarit", totals: "Totaux" }, editProperty: 'Éditer la propriété "{0}"', items: "[ Éléments: {0} ]", enterNewValue: "Veuillez saisir la valeur.", noquestions: "Il n'y a aucune question dans le questionnaire.", createtrigger: "Veuillez créer un déclencheur", triggerOn: "Quand ", triggerMakePagesVisible: "Rendre les pages visibles :", triggerMakeQuestionsVisible: "Rendre les questions visibles :", triggerCompleteText: "Terminer le questionnaire en cas de succès.", triggerNotSet: "Le déclencheur n'est pas défini", triggerRunIf: "Exécuter si", triggerSetToName: "Changer la valeur de : ", triggerFromName: "Copier la valeur de : ", triggerRunExpression: "Exécuter cette expression :", triggerSetValue: "à : ", triggerGotoName: "Aller à la question :", triggerIsVariable: "Ne placez pas la variable dans le résultat du questionnaire.", triggerRunExpressionEmpty: "Veuillez entrer une expression valide" }, //Property values pv: { true: "vrai", false: "faux", inherit: "hérité", show: "afficher", hide: "masquer", default: "par défaut", initial: "initial", random: "aléatoire", collapsed: "replié", expanded: "déployé", none: "aucun", asc: "ascendant", desc: "descendant", indeterminate: "indeterminé", decimal: "décimal", currency: "monnaie", percent: "pourcentage", firstExpanded: "déployé en premier", off: "désactivé", onPanel: "panneau", onSurvey: "questionnaire", list: "liste", progressTop: "Progression en haut", progressBottom: "Progression en bas", progressTopBottom: "Progression en haut et en bas", top: "haut", bottom: "bas", topBottom: "haut et bas", left: "gauche", color: "couleur", date: "date", datetime: "heure", "datetime-local": "heure locale", email: "email", month: "mois", number: "nombre", password: "mot de passe", range: "jauge", tel: "tél.", text: "texte", time: "heure", url: "URL", week: "semaine", hidden: "masqué", on: "activé", onPage: "page", edit: "éditer", display: "affichage", onComplete: "onComplete", onHidden: "onHidden", all: "tous", page: "page", survey: "questionnaire" }, //Operators op: { empty: "est vide", notempty: "n'est pas vide", equal: "égal", notequal: "n'est pas égal", contains: "contient", notcontains: "ne contient pas", anyof: "n'importe quel de", allof: "tout de", greater: "supérieur", less: "inférieur", greaterorequal: "supérieur ou égal", lessorequal: "inférieur ou égal" }, //Embed window ew: { angular: "Utiliser la version Angular", jquery: "Utiliser la version jQuery", knockout: "Utiliser la version Knockout", react: "Utiliser la version React", vue: "Utiliser la version Vue", bootstrap: "Pour le framework Bootstrap", standard: "Sans Bootstrap", showOnPage: "Afficher le questionnaire dans une page", showInWindow: "Afficher le questionnaire dans une fenêtre", loadFromServer: "Charger le JSON du questionnaire depuis un serveur", titleScript: "Scripts et styles", titleHtml: "HTML", titleJavaScript: "JavaScript" }, //Test Survey ts: { selectPage: "Sélectionner une page pour la tester", showInvisibleElements: "Afficher les éléments invisibles" }, //Validators validators: { answercountvalidator: "total de réponses", emailvalidator: "e-mail", numericvalidator: "numérique", regexvalidator: "regex", textvalidator: "texte" }, //Triggers triggers: { completetrigger: "terminer le questionnaire", setvaluetrigger: "définir la valeur", copyvaluetrigger: "copier la valeur", skiptrigger: "sauter à la question", runexpressiontrigger: "exécuter expression", visibletrigger: "modifier la visibilité" }, //Properties p: { name: "Nom", title: { name: "Titre", title: 'Laissez vide, si même texte que le "Nom"' }, navigationButtonsVisibility: "Visibilité des boutons de navigation", questionsOrder: "Ordre des questions", maxTimeToFinish: "Temps maximum pour terminer", visible: "Visible", visibleIf: "Visible si ", questionTitleLocation: "Emplacement titre question", description: "Description", state: "État", isRequired: "Obligatoire ?", requiredErrorText: "Message d'erreur text obligatoire", startWithNewLine: "Commencer avec une nouvelle ligne", innerIndent: "Indentation", page: "page", width: "largeur", commentText: "Description champ commentaire", valueName: "Nom de la valeur", enableIf: "Activer si", defaultValue: "Valeur par défaut", correctAnswer: "Bonne réponse", readOnly: "Lecture seule", validators: "Validateurs", titleLocation: "Emplacement du titre", hasComment: "Champ commentaire ?", hasOther: "Choix autre ?", choices: "Choix", choicesOrder: "Ordre des choix", choicesByUrl: "Choix par API", otherText: "Autre texte", otherErrorText: 'Texte d\'erreur champ "Autre"', storeOthersAsComment: "Sauvegarder choix autre comme commentaire", label: "Intitulé", showTitle: "Afficher le titre", valueTrue: "Valeur vrai", valueFalse: "Valeur faux", cols: "Colonnes", rows: "Nombre de lignes", placeHolder: "PlaceHolder (indice dans le champ)", optionsCaption: "Texte par défaut", expression: "Expression", format: "Format", displayStyle: "Style d'affichage", currency: "Monnaie", useGrouping: "Utiliser les groupes", showPreview: "Voir la prévisualisation", allowMultiple: "Autoriser multiples", imageHeight: "Hauteur de l'image", imageWidth: "Largeur de l'image", storeDataAsText: "Stocker les données comme du texte", maxSize: "Taille maximum", html: "HTML", columns: "Colonnes", cells: "Cellules", horizontalScroll: "Scroll horizontal", cellType: "Type de cellule", columnColCount: "Nombre de colonnes", columnMinWidth: "Largeur minimale des colonnes", rowCount: "Nombre de lignes", minRowCount: "Nombre de lignes minimum", maxRowCount: "Nombre de lignes maximum", keyName: "Nom de la clé", keyDuplicationError: "Erreur de clés multiples", confirmDelete: "Confirmation de suppression", confirmDeleteText: "Texte de confirmation de suppression", addRowText: "Bouton ajouter une ligne", removeRowText: "Bouton supprimer une ligne", items: "Items", itemSize: "Nombre maximum de caractères", colCount: "Nombre de colonnes", templateTitle: "Titre de gabarit", templateDescription: "Description du gabarit", allowAddPanel: "Autoriser l'ajout de panneau", allowRemovePanel: "Autoriser la suppression de panneau", panelCount: "Nombre de panneaux", minPanelCount: "Nombre minimum de panneaux", maxPanelCount: "Nombre maximum de panneaux", panelsState: "État des panneaux", panelAddText: "Texte d'ajout des panneaux", panelRemoveText: "Texte de suppression des panneaux", panelPrevText: "Texte panneau précédent", panelNextText: "Texte panneau suivant", showQuestionNumbers: "Numérotation des questions", showRangeInProgress: "Afficher la progression", renderMode: "Mode de rendu", templateTitleLocation: "Emplacement du titre de gabarit", rateValues: "Barème", rateMin: "Valeur minimum", rateMax: "Valeur maximum", rateStep: "Pas", minRateDescription: "Description note minimum", maxRateDescription: "Description note maximum", inputType: "Type de champ", size: "Nombre maximum de caractères", focusFirstQuestionAutomatic: "Focus automatique sur la première question", completedHtml: "HTML questionnaire finalisé", completedBeforeHtml: "HTML avant complétion du questionnaire", loadingHtml: "HTML de chargement", triggers: "Déclencheurs", cookieName: "Nom du cookie", sendResultOnPageNext: "Envoyer les résultats au changement de page", showNavigationButtons: "Boutons de navigation", showPrevButton: "Afficher le bouton précédent", showPageTitles: "Titre des pages", showCompletedPage: "Voir la page formulaire complété ?", showPageNumbers: "Numérotation des pages", questionErrorLocation: "Emplacement des erreurs", showProgressBar: "Barre de progression", mode: "Mode d'affichage", goNextPageAutomatic: "Aller à la page suivante automatiquement", clearInvisibleValues: "Cacher les valeurs invisibles", startSurveyText: "Texte de démarrage du questionnaire", pagePrevText: "Bouton page précédente", pageNextText: "Bouton page suivante", completeText: "Texte questionnaire finalisé", requiredText: "Texte pour les champs obligatoires", questionStartIndex: "Index de numérotation des questions", questionTitleTemplate: "Template d'affichage des questions", firstPageIsStarted: "Commence à la première page", isSinglePage: "Affiché sur une page", maxTimeToFinishPage: "Temps maximum pour finir la page", showTimerPanel: "Afficher le panneau chronomètre", showTimerPanelMode: "Mode d'affichage du panneau chronomètre", indent: "Indentation", isAllRowRequired: "Toutes les lignes sont-elle obligatoires ?", locale: "Langue" } }; __WEBPACK_IMPORTED_MODULE_0__editorLocalization__["a" /* editorLocalization */].locales["fr"] = frenchTranslation; /***/ }), /* 57 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__editorLocalization__ = __webpack_require__(0); var germanTranslation = { //survey templates survey: { edit: "Bearbeiten", dropQuestion: "Frage bitte hier platzieren.", copy: "Kopieren", addToToolbox: "Zur Werkzeugleiste hinzufügen", deletePanel: "Panel löschen", deleteQuestion: "Frage löschen" }, //questionTypes qt: { checkbox: "Checkbox", comment: "Kommentar", dropdown: "Aufklappmenü", file: "Datei", html: "Html", matrix: "Matrix (einfache Auswahl)", matrixdropdown: "Matrix (mehrfache Auswahl)", matrixdynamic: "Matrix (dynamische Zeilen)", multipletext: "Mehrzeiliger Text", panel: "Panel", paneldynamic: "Panel (dynamische Panels)", radiogroup: "Radiogruppe", rating: "Bewertung", text: "Einfache Eingabe", boolean: "Boolean" }, //Strings in Editor ed: { survey: "Umfrage", addNewPage: "Neue Seite hinzufügen", newPageName: "Seite", newQuestionName: "Frage", newPanelName: "Panel", testSurvey: "Testumfrage", testSurveyAgain: "Testumfrage wiederholen", testSurveyWidth: "Umfragebreite: ", embedSurvey: "Umfrage einfügen", saveSurvey: " Umfrage speichern", designer: "Umfrage Designer", jsonEditor: "JSON Editor", undo: "Rückgängig", redo: "Wiederherstellen", options: "Optionen", generateValidJSON: "Generiere gültiges JSON", generateReadableJSON: "Generiere lesbares JSON", toolbox: "Werkzeugleiste", delSelObject: "Lösche markiertes Objekt", correctJSON: "Bitte JSON korrigieren.", surveyResults: "Umfrageergebnis: " }, //Property names in table headers pel: { isRequired: "Erforderlich?" }, //Property Editors pe: { apply: "Anwenden", ok: "OK", cancel: "Abbrechen", reset: "Zurücksetzen", close: "Schliessen", delete: "Löschen", addNew: "Neu hinzufügen", removeAll: "Alles löschen", edit: "Bearbeiten", empty: "<leer>", fastEntry: "Schnell-Eintrag", formEntry: "Formular-Eintrag", testService: "Service testen", expressionHelp: "Bitte geben Sie eine booleschen Ausdruck ein. Es muss 'true' retournieren um die Frage/Seite anzuzeigen. zum Beispiel: {question1} = 'value1' or ({question2} = 3 and {question3} < 5)", propertyIsEmpty: "Bitte geben Sie einen Wert ein", value: "Wert", text: "Text", columnEdit: "Spalte bearbeiten: {0}", itemEdit: "Element bearbeiten: {0}", hasOther: "Hat ein anderes Element", name: "Name", title: "Titel", cellType: "Zellentyp", colCount: "Spaltenanzahl", choicesOrder: "Wähle Auswahlreihenfolge", visible: "Ist es sichtbar?", isRequired: "Ist es erforderlich?", startWithNewLine: "In neuer Zeile beginnen?", rows: "Zeilenanzahl", placeHolder: "Platzhalter eingeben", showPreview: "Wird eine Bildvorschau angezeigt?", storeDataAsText: "Speicher Dateininhalt des JSON-Resultats als Text", maxSize: "Maximale Dateigrösse in Bytes", imageHeight: "Bildhöhe", imageWidth: "Bildbreite", rowCount: "Zeilenanzahl", addRowText: "Zeilenknopftext hinzufügen", removeRowText: "Zeilenknopftext löschen", minRateDescription: "Bewertungsbeschreibung minimieren", maxRateDescription: "Bewertungsbeschreibung maximieren", inputType: "Eingabetyp", optionsCaption: "Auswahlbeschriftung", qEditorTitle: "Frage bearbeiten: {0}", tabs: { general: "Allgemein", fileOptions: "Optionen", html: "Html Editor", columns: "Spalten", rows: "Zeilen", choices: "Auswahlmöglichkeiten", visibleIf: "Sichtbar wenn", rateValues: "Bewertungswerte", choicesByUrl: "Auswahlmöglichkeiten vom Internet", matrixChoices: "Standardauswahl", multipleTextItems: "Texteingabe", validators: "Überprüfung" }, editProperty: "Eigenschaft bearbeiten '{0}'", items: "[ Gegenstand: {0} ]", enterNewValue: "Bitte einen Wert eingeben.", noquestions: "Die Umfrage enthält keine Frage.", createtrigger: "Bitte einen Trigger eingeben.", triggerOn: "Ein ", triggerMakePagesVisible: "Seiten sichtbar machen:", triggerMakeQuestionsVisible: "Elemente sichtbar machen:", triggerCompleteText: "Bei Erfolg die Umfrage abschliessen.", triggerNotSet: "Kein Trigger eingerichtet", triggerRunIf: "Ausführen wenn", triggerSetToName: "Ändere Wert von: ", triggerSetValue: "auf: ", triggerIsVariable: "Variable nicht im Umfrageergebnis einbinden." }, //Property values pv: { true: "true", false: "false" }, //Operators op: { empty: "ist leer", notempty: "ist nicht leer", equal: "ist gleich", notequal: "ist ungleich", contains: "enthält", notcontains: "enthält nicht", greater: "grösser als", less: "kleiner als", greaterorequal: "grösser oder kleiner als", lessorequal: "kleiner oder ist gleich" }, //Embed window ew: { angular: "Angular-Version benutzen", jquery: "jQuery-Version benutzen", knockout: "Knockout-Version benutzen", react: "React-Version benutzen", vue: "Vue-Version benutzen", bootstrap: "Als Bootstrap Framework", standard: "Kein Bootstrap", showOnPage: "Zeige Umfrage auf Seite", showInWindow: "Zeige Umfrage als Fenster", loadFromServer: "Lade Umfrage als JSON vom Server", titleScript: "Skripte und Styles", titleHtml: "HTML", titleJavaScript: "JavaScript" }, validators: { answercountvalidator: "Anzahl Antworten", emailvalidator: "E-Mail", numericvalidator: "numerisch", regexvalidator: "regex", textvalidator: "text" }, triggers: { completetrigger: "Umfrage abschliessen", setvaluetrigger: "Wert setzen", visibletrigger: "Sichtbarkeit ändern" }, //Properties p: { name: "Name", title: { name: "Titel", title: "Bitte leer lassen, falls gleich wie 'Name'" }, survey_title: { name: "Titel", title: "Wird auf jeder Seite angezeigt." }, page_title: { name: "title", title: "Seitentitel" } } }; __WEBPACK_IMPORTED_MODULE_0__editorLocalization__["a" /* editorLocalization */].locales["de"] = germanTranslation; /***/ }), /* 58 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__editorLocalization__ = __webpack_require__(0); /* unused harmony export huStrings */ var huStrings = { //survey templates survey: { edit: "Szerkesztés", externalHelpLink: "Nézze meg, hogyan kell kérdőíveket készíteni.", externalHelpLinkUrl: "https://www.youtube.com/channel/UCH2ru9okIcooNZfpIbyq4qQ?view_as=subscriber", dropQuestion: "Kérem dobjon ide egy kérdést a bal oldali menüből.", copy: "Másolás", addToToolbox: "Hozzáadás az eszköztárhoz", deletePanel: "Panel eltávolítása", deleteQuestion: "Kérdés eltávolítása", convertTo: "Konvertálás", drag: "Elem mozgatása" }, //questionTypes qt: { default: "Alapértelmezett", checkbox: "Jelölőnégyzet", comment: "Megjegyzés", imagepicker: "Képválasztó", dropdown: "Legördülő", file: "Állomány", html: "HTML", matrix: "Mátrix (egyválasztós)", matrixdropdown: "Mátrix (többválasztós)", matrixdynamic: "Mátrix (dinamikus)", multipletext: "Többsoros szöveg", panel: "Panel", paneldynamic: "Panel (dinamikus)", radiogroup: "Választógomb", rating: "Értékelés", text: "Egysoros szöveg", boolean: "Igaz-hamis", expression: "Kifejezés (csak olvasható)", flowpanel: "Folyamat" }, //Strings in Editor ed: { defaultLocale: "Alapértelmezett ({0})", survey: "Kérdőív", settings: "Kérdőívbeállítások", opjectPropertiesHeader: "Haladó", showObjectProperties: "Tulajdonságok mutatása", hideObjectProperties: "Tulajdonságok elrejtése", editSurvey: "Kérdőív szerkesztése", addNewPage: "Új lap felvétele", moveRight: "Görgetés jobbra", moveLeft: "Görgetés balra", deletePage: "Lap eltávolítása", editPage: "Lap szerkesztése", edit: "Szerkesztés", newPageName: "lap", newQuestionName: "kérdés", newPanelName: "panel", newTextItemName: "szöveg", testSurvey: "Próba", testSurveyAgain: "Próba ismét", testSurveyWidth: "Kérdőív szélessége: ", embedSurvey: "Kérdőív beágyazása", translation: "Fordítás", saveSurvey: "Kérdőív mentése", designer: "Kérdőívtervező", jsonEditor: "JSON szerkesztő", undo: "Mégse", redo: "Ismét", options: "Beállítások", generateValidJSON: "Érvényes JSON generálása", generateReadableJSON: "Olvasható JSON generálása", toolbox: "Eszköztár", toolboxGeneralCategory: "Általános", delSelObject: "Kijelölt elem eltávolítása", editSelObject: "Kijelölt elem szerkesztése", correctJSON: "Kérem javítsa a JSON-t.", surveyResults: "Kérdőív eredménye: ", surveyResultsTable: "Táblaként", surveyResultsJson: "JSON-ként", resultsTitle: "Kérdés címe", resultsName: "Kérdés megnevezése", resultsValue: "Válasz értéke", resultsDisplayValue: "Kijelzett értéke", modified: "Módosított", saving: "Mentés folyamatban", saved: "Mentve", saveError: "Hiba! A szerkesztő értéke nem került mentésre.", translationAddLanguage: "Válasszon egy nyelvet a fordításhoz.", translationShowAllStrings: "Összes szöveg mutatása", translationShowAllPages: "Összes lap mutatása", translationNoStrings: "Nincs fordítható szöveg. Kérem változtasson a szűrési feltételeken.", translationExportToSCVButton: "Mentés CSV-ként", translationImportFromSCVButton: "Betöltés CSV-ből.", translationMergeLocaleWithDefault: "{0} összefűzése az alapértelmezett szöveggel.", bold: "Félkövér", italic: "Dőlt", underline: "Aláhúzott", fpAddQuestion: "Kérdés felvétele...", completedHtmlOnConditionItemText: "Mutatás ha:" }, //Property names in table headers pel: { isRequired: "Kötelező?" }, //Property Editors pe: { apply: "Alkalmaz", ok: "OK", cancel: "Mégsem", reset: "Visszaállítás", close: "Bezárás", delete: "Eltávolítás", addNew: "Új felvétele", addItem: "Kattintson egy elem felvételéhez...", addOther: "Egyéb", addSelectAll: "Összes kijelölése", addNone: "Semmi", removeAll: "Összes eltávolítása", edit: "Szerkesztés", itemValueEdit: "Látható ha", editChoices: "Lehetőségek szerkesztése", move: "Mozgatás", empty: "<üres>", notEmpty: "<érték szerkesztése>", fastEntry: "Gyors felvétel", formEntry: "Felvétel űrlappal", testService: "Szolgáltatás tesztelése", conditionSelectQuestion: "Válasszon kérdést...", conditionValueQuestionTitle: "Kérem adjon meg, vagy válasszon értéket", conditionButtonAdd: "Felvétel", conditionButtonReplace: "Csere", conditionHelp: "Kérem adjon meg egy igaz-hamis kifejezést. Igaz visszatérési értékkel kell rendelkeznie, hogy a kérdés vagy a lap látható maradjon. Például: {question1} = 'value1' or ({question2} * {question4} > 20 and {question3} < 5)", expressionHelp: "Kérem adjon meg egy kifejezést. Használjon kapcsos zárójeleket, hogy elérje a kérdések aktuális értékét. Például: '{question1} + {question2}', '({price}*{quantity}) * (100 - {discount})'", aceEditorHelp: "Nyomja meg a ctrl+space billentyűkombinációt a kifejezés befejezésére vonatkozó segítségért.", aceEditorRowTitle: "Jelenlegi sor", aceEditorPanelTitle: "Jelenlegi panel", showMore: "További információért kérem tekintse meg a dokumentációt", conditionShowMoreUrl: "https://surveyjs.io/Documentation/LibraryParameter?id=Question¶meter=visibleIf", assistantTitle: "Elérhető kérdések:", cellsEmptyRowsColumns: "Legalább egy sornak vagy egy oszlopnak lennie kell", propertyIsEmpty: "Kérem adjon meg egy értéket", value: "Érték", text: "Szöveg", rowid: "Sor ID", imageLink: "Kép URL", columnEdit: "Oszlop szerkesztése: {0}", itemEdit: "Elem szerkesztése: {0}", url: "URL", path: "Útvonal", valueName: "Érték megnevezése", titleName: "Cím megnevezése", hasOther: "Rendelkezik egyéb értékkel", otherText: "Az egyéb érték szövege", name: "Megnevezés", title: "Cím", cellType: "Cellatípus", colCount: "Oszlopok száma", choicesOrder: "Válassza ki a lehetőséget rendezését", visible: "Látható?", isRequired: "Kötelező?", startWithNewLine: "Új sorban kezdődik?", rows: "Sorok száma", placeHolder: "Mező kitöltőszövege", showPreview: "A kép előnézete látható?", storeDataAsText: "Az állomány tartalmát tárolja a JSON-ben, szövegként", maxSize: "Maximális állományméret byte-ban", imageHeight: "Kép magassága", imageWidth: "Kép szélessége", rowCount: "Sorok száma", columnLayout: "Oszlopok elrendezése", addRowLocation: "'Új sor felvétele' gomb elhelyezése", addRowText: "'Új sor felvétele' gomb szövege", removeRowText: "'Sor eltávolítása' gomb szövege", rateMin: "Legkisebb szorzó", rateMax: "Legnagyobb szorzó", rateStep: "Szorzó lépésköze", minRateDescription: "Legkisebb szorzó leírása", maxRateDescription: "Legnagyobb szorzó leírása", inputType: "Mező típusa", optionsCaption: "Beállítások felirata", defaultValue: "Alapértelmezett érték", cellsDefaultRow: "Cellák alapértelmezett szövege", surveyEditorTitle: "Kérdőív beállításainak módosítása", qEditorTitle: "Szerkesztés: {0}", maxLength: "Maximális hossz", //survey showTitle: "Cím mutatása/elrejtése", locale: "Alapértelmezett nyelv", mode: "Mód (szerkesztés/megtekintés)", clearInvisibleValues: "Nemlátható értékek törlése", cookieName: "Süti megnevezése (a kérdőív csak egyszer kitölthető)", sendResultOnPageNext: "Kérdőív értékének küldése a következő lapra lépéskor", storeOthersAsComment: "Az 'egyéb' mező értékének tárolása külön mezőben", showPageTitles: "Lapok címének mutatása", showPageNumbers: "Lapok számának mutatása", pagePrevText: "'Előző lap' gomb felirata", pageNextText: "'Következő lap' gomb felirata", completeText: "'Befejezés' gomb felirata", startSurveyText: "'Kezdés' gomb felirata", showNavigationButtons: "Navigációs gombok mutatása (alapértelmezett navigáció)", showPrevButton: "'Előző lap' gomb mutatása", firstPageIsStarted: "Az megkezdett lap a kérdőív első oldala.", showCompletedPage: "Befejező szöveg mutatása a kérdőív befejezésekor", goNextPageAutomatic: "Minden kérdés megválaszolásakor automatikusan a következő lapra lépés", showProgressBar: "Előrehaladás-mutató megjelenítése", questionTitleLocation: "Kérdés címének helye", requiredText: "Kötelező szimbólum", questionStartIndex: "Kérdés kezdőindexe (1, 2 vagy 'A', 'a')", showQuestionNumbers: "Kérdés számának mutatása", questionTitleTemplate: "Kérdés címének sablonja: '{szám}. {kötelező} {cím}'", questionErrorLocation: "Kérdés hibaüzenetének helyzete", focusFirstQuestionAutomatic: "Első kérdés automatikus kijelölése lapváltás esetén", questionsOrder: "Elemek rendezése a lapon", maxTimeToFinish: "A kérdőív kitöltésére fordítható maximális idő", maxTimeToFinishPage: "Egy lap kitöltésére fordítható maximális idő", showTimerPanel: "Időzító mutatása", showTimerPanelMode: "Időzító módja", renderMode: "Megjelenítés módja", allowAddPanel: "Új panel hozzáadásának engedélyezése", allowRemovePanel: "Panel eltávolításának engedélyezése", panelAddText: "'Új panel felvétele' gomb szövege", panelRemoveText: "'Panel eltávolítása' gomb szövege", isSinglePage: "Minden elem mutatása egy lapon", html: "HTML", expression: "Kifejezés", minValue: "Minimális érték", maxValue: "Maximális érték", minLength: "Minimális hossz", allowDigits: "Számjegyek engedélyezése", minCount: "Minimális darabszám", maxCount: "Maximális darabszám", regex: "Reguláris kifejezés", tabs: { general: "Általános", fileOptions: "Beállítások", html: "HTML szerkesztő", columns: "Oszlopok", rows: "Sorok", choices: "Lehetőségek", items: "Elemek", visibleIf: "Látható ha", enableIf: "Engedélyezve ha", requiredIf: "Kötelező ha", rateValues: "Szorzó értékek", choicesByUrl: "Lehetőségek a webről", matrixChoices: "Alapértelmezett lehetőségek", multipleTextItems: "Szövegmezők", validators: "Validátorok", navigation: "Navigáció", question: "Kérdés", completedHtml: "Befejező szöveg (HTML)", completedHtmlOnCondition: "Befejző szöveg mutatásának feltétele", loadingHtml: "Betöltő szöveg (HTML)", timer: "Időzítő/Kvíz", triggers: "Eseményvezérlők", templateTitle: "Sablon címe" }, editProperty: "Tulajdonság szerkesztése '{0}'", items: "[ Elemek: {0} ]", enterNewValue: "Kérem, adja meg az értéket.", noquestions: "Nincsenek kérdések a kérdőívben.", createtrigger: "Kérem hozzon létre egy eseményvezérlőt", triggerOn: "Be ", triggerMakePagesVisible: "Lapok láthatóvá tétele:", triggerMakeQuestionsVisible: "Elemek láthatóvá tétele:", triggerCompleteText: "Kérdőív befejezése, ha sikeres.", triggerNotSet: "Nincs eseménykezelő beállítva", triggerRunIf: "Futtatás ha", triggerSetToName: "A következő értékének cseréje: ", triggerFromName: "A következő értékének másolása: ", triggerRunExpression: "A következő kifejezés futtatása:", triggerSetValue: "erre: ", triggerIsVariable: "Ne mentse az eredményt a kérdőív eredményébe." }, //Property values pv: { true: "igaz", false: "hamis", inherit: "öröklött", show: "mutatás", hide: "elrejtés", default: "alapértelmezett", initial: "kezdeti", random: "véletlen", collapsed: "csukott", expanded: "nyitott", none: "semmi", asc: "növekvő", desc: "csökkenő", indeterminate: "határozatlan", decimal: "deimális", currency: "pénz", percent: "százalék", firstExpanded: "első nyitva", off: "ki", onPanel: "a panelen", onSurvey: "a kérdőíven", list: "lista", progressTop: "felül", progressBottom: "alul", progressTopBottom: "alül és felül", horizontal: "horizontális", vertical: "vertikális", top: "fent", bottom: "lent", topBottom: "fent és lent", left: "bal", color: "szín", date: "dátum", datetime: "dátum és idő", "datetime-local": "helyi dátum és idő", email: "email", month: "hónap", number: "szám", password: "jelszó", range: "intervallum", tel: "telefon", text: "szöveg", time: "idő", url: "URL", week: "hét", hidden: "rejtett", on: "be", onPage: "a lapon", edit: "szerkesztés", display: "mutatás", onComplete: "befejezéskor", onHidden: "eltűnéskor", all: "összes", page: "lap", survey: "kérdőív", onNextPage: "a következő lapra lépéskor", onValueChanged: "az érték változásakor" }, //Operators op: { empty: "üres", notempty: "nem üres", equal: "megegyezik", notequal: "nem egyezik meg", contains: "tartalmazza", notcontains: "nem tartalmazza", greater: "nagyobb mint", less: "kisebb mint", greaterorequal: "nagyobb vagy egyenlő", lessorequal: "kisebb vagy egyenlő" }, //Embed window ew: { angular: "Angular verzió használata", jquery: "jQuery verzió használata", knockout: "Knockout verzió használata", react: "React verzió használata", vue: "Vue verzió használata", bootstrap: "Használat Bootstrap frameworkkel", standard: "Használat Bootstrap framework nélkül", showOnPage: "Kérdőív mutatása a lapon", showInWindow: "Kérdőív mutatása egy ablakban", loadFromServer: "Kérdőív JSON betöltése a szerverről", titleScript: "Szkriptek és stíluslapok", titleHtml: "HTML", titleJavaScript: "JavaScript" }, //Test Survey ts: { selectPage: "Válassza ki a tesztelni kívánt lapot:", showInvisibleElements: "Nemlátható elemek megjelnítése" }, validators: { answercountvalidator: "válaszok száma", emailvalidator: "e-mail", expressionvalidator: "kifejezés", numericvalidator: "szám", regexvalidator: "reguláris kifejezés", textvalidator: "szöveg" }, triggers: { completetrigger: "kérdőív befejezése", setvaluetrigger: "érték beállítása", copyvaluetrigger: "érték másolása", runexpressiontrigger: "kifejezés futtatása", visibletrigger: "láthatóság megváltoztatása (már nincs használatban)" }, //Properties p: { name: "Megnevezés", title: { name: "Cím", title: "Hagyja üresen, ha megegyezik a 'Megnevezés'-el" }, navigationButtonsVisibility: "Navigációs gombok láthatósága", questionsOrder: "Kérdések rendezése", maxTimeToFinish: "Kitöltése fordítható maximális idő", visible: "Látható", visibleIf: "Látható ha", questionTitleLocation: "Kérdés címének elhelyezése", description: "Leírás", state: "Állapot", isRequired: "Kötelező", requiredIf: "Kötelező ha", indent: "Bekezdés", requiredErrorText: "Kötelező hibaüzenet", startWithNewLine: "Új sorban kezdődik", innerIndent: "Belső bekezdés", page: "Lap", width: "Szélesség", commentText: "Megjegyzés szövege", valueName: "Érték megnevezése", enableIf: "Engedélyezve ha", defaultValue: "Alapértelmezett érték", correctAnswer: "Helyes érték", readOnly: "Csak olvasható", validators: "Validátorok", titleLocation: "Cím elhelyezése", hasComment: "Van megjegyzés", hasOther: "Van 'egyéb'", choices: "Lehetőségek", choicesOrder: "Lehetőségek rendezése", choicesByUrl: "Lehetőségek a webről", otherText: "'Egyéb' szöveg", otherErrorText: "'Egyéb' hibaüzenet", storeOthersAsComment: "'Egyéb' tárolása megjegyzésként", label: "Cimke", showTitle: "Cím mutatása", valueTrue: "Érték igaz", valueFalse: "Érték hamis", cols: "Oszlopok", rows: "Sorok", placeHolder: "Helykitöltő", optionsCaption: "'Beállítások' felirata", expression: "Kifejezés", format: "Formátum", displayStyle: "Megjelenítés stílusa", currency: "Pénz", useGrouping: "Csoportosítás", showPreview: "Előnézet mutatása", allowMultiple: "Több engedélyezése", imageHeight: "Kép magassága", imageWidth: "Kép szélessége", storeDataAsText: "'Egyéb' tárolása szövegként", maxSize: "Maximális méret", html: "HTML", columns: "Oszlopok", cells: "Cellák", isAllRowRequired: "Minden sor kötelező", horizontalScroll: "Horizontális görgetés", cellType: "Cellatípus", columnsLayout: "Oszlopok elrendezése", columnColCount: "Oszlopok száma", columnMinWidth: "Oszlop minimális szélessége", rowCount: "Sorok száma", minRowCount: "Sorok minimális száma", maxRowCount: "Sorok maximális száma", keyName: "Kulcs megnevezése", keyDuplicationError: "Kulcs duplikációs hibaüzenete", confirmDelete: "Eltávolítás megerősítése", confirmDeleteText: "Eltávolíáts megerősítése kérdés", addRowLocation: "'Új sor felvétele' gomb elhelyezése", addRowText: "'Új sor felvétele' gomb szövege", removeRowText: "'Sor eltávolítása' gomb szövege", items: "Elemek", itemSize: "Elem mérete", colCount: "Oszlopok száma", templateTitle: "Sablon címe", templateDescription: "Sablon leírása", allowAddPanel: "Új panel felvételének engedélyezése", allowRemovePanel: "Panel eltávolításának engedélyezése", panelCount: "Panelek száma", minPanelCount: "Panelek minimális száma", maxPanelCount: "Panelek maximális száma", panelsState: "Panelek állapota", panelAddText: "'Új panel felvétele' gomb szövege", panelRemoveText: "'Panel eltávolítása' gomb szövege", panelPrevText: "'Előző panel' gomb szövege", panelNextText: "'Következő panel' szövege", showQuestionNumbers: "Kérdés számának mutatása", showRangeInProgress: "Előrehaladás-mutató ", renderMode: "Megjelenítés módja", templateTitleLocation: "Sablon címének elhelyezése", rateValues: "Szorzó értékek", rateMin: "Legkisebb szorzó", rateMax: "Legnagyobb szorzó", rateStep: "Szorzó lépésköze", minRateDescription: "Legkisebb szorzó leírása", maxRateDescription: "Legnagyobb szorzó leírása", inputType: "Mező típusa", size: "Méret", locale: "Alapértelmezett nyelv", focusFirstQuestionAutomatic: "Első kérdés automatikus kijelölése lapváltás esetén", completedHtml: "Befejező szöveg (HTML)", completedBeforeHtml: "Befejezés előtti szöveg (HTML)", loadingHtml: "Betöltő szöveg (HTML)", triggers: "Eseményvezérlők", cookieName: "Süti megnevezése", sendResultOnPageNext: "Kérdőív értékének küldése a következő lapra lépéskor", showNavigationButtons: "Navigációs gombok mutatása (alapértelmezett navigáció)", showPrevButton: "'Előző lap' gomb mutatása", showPageTitles: "Lapok címének mutatása", showCompletedPage: "Befejező szöveg mutatása a kérdőív befejezésekor", showPageNumbers: "Lapok számának mutatása", questionErrorLocation: "Kérdés hibaüzenetének helyzete", showProgressBar: "Előrehaladás-mutató megjelenítése", mode: "Mód (szerkesztés/megtekintés)", goNextPageAutomatic: "Minden kérdés megválaszolásakor automatikusan a következő lapra lépés", checkErrorsMode: "Hibavizsgálat", clearInvisibleValues: "Nemlátható értékek törlése", startSurveyText: "'Kezdés' gomb felirata", pagePrevText: "'Előző lap' gomb felirata", pageNextText: "'Következő lap' gomb felirata", completeText: "'Befejezés' gomb felirata", requiredText: "Kötelező szimbólum", questionStartIndex: "Kérdés kezdőindexe (1, 2 vagy 'A', 'a')", questionTitleTemplate: "Kérdés címének sablonja: '{szám}. {kötelező} {cím}'", firstPageIsStarted: "Az megkezdett lap a kérdőív első oldala.", isSinglePage: "Minden elem mutatása egy lapon", maxTimeToFinishPage: "Egy lap kitöltésére fordítható maximális idő", showTimerPanel: "Időzítő mutatása", showTimerPanelMode: "Időzítő módja", defaultPanelValue: "Panel alapértelmezett értéke", defaultRowValue: "Sor alapértelmezett értéke", hasNone: "Lehet üres", noneText: "Üres szöveg", text: "Szöveg" } }; __WEBPACK_IMPORTED_MODULE_0__editorLocalization__["a" /* editorLocalization */].locales["hu"] = huStrings; /***/ }), /* 59 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__editorLocalization__ = __webpack_require__(0); /* unused harmony export indonesianStrings */ var indonesianStrings = { //survey templates survey: { edit: "Ubah", externalHelpLink: "Tonton dan pelajari cara membuat survei", externalHelpLinkUrl: "https://www.youtube.com/channel/UCH2ru9okIcooNZfpIbyq4qQ?view_as=subscriber", dropQuestion: "Silahkan letakkan pertanyaan di sini dari Kotak Perkakas di sebelah kiri.", copy: "Salin", addToToolbox: "Tambahkan ke Kotak Perkakas", deletePanel: "Hapus Panel", deleteQuestion: "Hapus Pertanyaan", convertTo: "Mengubah ke", drag: "Tarik elemen" }, //questionTypes qt: { default: "Default", checkbox: "Kotak Centang", comment: "Komentar", imagepicker: "Gambar", dropdown: "Kotak Kombo", file: "Berkas", html: "Html", matrix: "Matriks (pilihan tunggal)", matrixdropdown: "Matriks (pilihan ganda)", matrixdynamic: "Matriks (baris dinamis)", multipletext: "Teks Ganda", panel: "Panel", paneldynamic: "Panel (panel dinamis)", radiogroup: "Pilihan Ganda", rating: "Peringkat", text: "Input Tunggal", boolean: "Boolean", expression: "Ekspresi (dibaca saja)", flowpanel: "Panel Aliran" }, //Strings in Editor ed: { defaultLocale: "Default ({0})", survey: "Survei", settings: "Pengaturan Survei", opjectPropertiesHeader: "Lanjutan", showObjectProperties: "Tampilkan Properti Obyek", hideObjectProperties: "Sembunyikan Properti Obyek", editSurvey: "Ubah Survei", addNewPage: "Tambah Halaman Baru", moveRight: "Geser ke Kanan", moveLeft: "Geser ke Kiri", deletePage: "Hapus Halaman", editPage: "Ubah Halaman", edit: "Ubah", newPageName: "halaman", newQuestionName: "pertanyaan", newPanelName: "panel", testSurvey: "Coba Survei", testSurveyAgain: "Coba Survei Lagi", testSurveyWidth: "Lebar survei: ", embedSurvey: "Embed Survei", translation: "Terjemahan", saveSurvey: "Simpan Survei", designer: "Rancangan Survei", jsonEditor: "Pengubah JSON", undo: "Urungkan", redo: "Ulangi", options: "Pilihan", generateValidJSON: "Hasilkan JSON yang Valid", generateReadableJSON: "Hasilkan JSON yang dapat dibaca", toolbox: "Kotak Perkakas", toolboxGeneralCategory: "Umum", delSelObject: "Hapus objek yang dipilih", editSelObject: "Ubah objek yang dipilih", correctJSON: "Please correct JSON.", surveyResults: "Hasil survei: ", surveyResultsTable: "Sebagai tabel", surveyResultsJson: "Sebagai JSON", resultsTitle: "Judul Pertanyaan", resultsName: "Nama Pertanyaan", resultsValue: "Nilai Jawaban", resultsDisplayValue: "Tampilkan Nilai", modified: "Dimodifikasi", saving: "Menyimpan", saved: "Tersimpan", saveError: "Error! Konten editor tidak berhasil disimpan.", translationAddLanguage: "Pilih bahasa untuk terjemahan", translationShowAllStrings: "Tampilkan seluruh string", translationShowAllPages: "Tampilkan seluruh halaman", translationNoStrings: "Tidak ada string diterjemahkan. Silahkan ganti penyaring.", translationExportToSCVButton: "Eksport ke CSV", translationImportFromSCVButton: "Import dari CSV", translationMergeLocaleWithDefault: "Gabungkan {0} dengan default locale", bold: "Tebal", italic: "Miring", underline: "Garis Bawah", fpAddQuestion: "Tambah pertanyaan...", completedHtmlOnConditionItemText: "Tampilkan jika:" }, //Property names in table headers pel: { isRequired: "Wajib?" }, //Property Editors pe: { apply: "Terapkan", ok: "OK", cancel: "Batal", reset: "Reset", close: "Tutup", delete: "Hapus", addNew: "Tambahkan Baru", addItem: "Klik untuk menambahkan sebuah item...", removeAll: "Hapus Semua", edit: "Ubah", itemValueEdit: "Ditampilkan Jika", editChoices: "Ubah Pilihan", move: "Pindah", empty: "<kosong>", notEmpty: "<ubah nilai>", fastEntry: "Entri Cepat", formEntry: "Entri Form", testService: "Coba layanan", conditionSelectQuestion: "Pilih pertanyaan...", conditionValueQuestionTitle: "Silahkan masukkan/pilih nilai", conditionButtonAdd: "Tambah", conditionButtonReplace: "Ganti", conditionHelp: "Silahkan masukkan ekspresi boolean. Harus mengembalikan 'benar' agar pertanyaan dapat terlihat. Contoh: {question1} = 'nilai1' or ({question2} * {question4} > 20 and {question3} < 5)", expressionHelp: "Silahkan masukan sebuah ekspresi. Anda dapat menggunakan kurung kurawal untuk mendapatkan akses pada nilai pertanyaan: '{question1} + {question2}', '({price}*{quantity}) * (100 - {discount})'", aceEditorHelp: "Tekan ctrl+spasi untuk mendapatkan petunjuk penyelesaian ekspresi", aceEditorRowTitle: "Baris saat ini", aceEditorPanelTitle: "Panel saat ini", showMore: "Untuk detil selanjutnya silahkan periksa dokumentasi", conditionShowMoreUrl: "https://surveyjs.io/Documentation/LibraryParameter?id=Question¶meter=visibleIf", assistantTitle: "Pertanyaan tersedia:", cellsEmptyRowsColumns: "Harus ada setidaknya satu kolom atau baris", propertyIsEmpty: "Silahkan masukkan nilai", value: "Nilai", text: "Teks", rowid: "ID baris", imageLink: "Link Gambar", columnEdit: "Ubah kolom: {0}", itemEdit: "Ubah item: {0}", url: "URL", path: "Path", valueName: "Nama nilai", titleName: "Nama judul", hasOther: "Memiliki item lain", otherText: "Teks item lain", name: "Nama", title: "Judul", cellType: "Jenis sel", colCount: "Jumlah kolom", choicesOrder: "Tentukan urutan pilihan", visible: "Terlihat?", isRequired: "Wajib?", startWithNewLine: "Mulai dengan baris baru?", rows: "Jumlah baris", placeHolder: "Masukkan placeholder", showPreview: "Tunjukkan tinjauan gambar?", storeDataAsText: "Simpan konten berkas dalam hasil JSON sebagai teks", maxSize: "Ukuran maksimum berkas dalam byte", imageHeight: "Tinggi gambar", imageWidth: "Lebar gambar", rowCount: "Jumlah baris", columnLayout: "Tata letak kolom", addRowLocation: "Tambah lokasi tombol baris", addRowText: "Teks tambah tombol baris", removeRowText: "Teks hapus tombol baris", minRateDescription: "Deskripsi nilai minimum", maxRateDescription: "Deskripsi nilai maksimum", inputType: "Jenis masukan", optionsCaption: "Keterangan pilihan", defaultValue: "Nilai standar", cellsDefaultRow: "Teks sel standar", surveyEditorTitle: "Ubah pengaturan survei", qEditorTitle: "Ubah: {0}", maxLength: "Panjang maksimum", //survey showTitle: "Tampilkan/sembunyikan judul", locale: "Bahasa standar", mode: "Mode (ubah/baca saja)", clearInvisibleValues: "Bersihkan nilai tak terlihat", cookieName: "Nama cookie (untuk menonaktifkan menjalankan survei dua kali secara lokal)", sendResultOnPageNext: "Kirim hasil survei pada halaman selanjutnya", storeOthersAsComment: "Simpan nilai 'lainnya' pada bidang lainnya", showPageTitles: "Tampilkan judul halaman", showPageNumbers: "Tampilkan nomor halaman", pagePrevText: "Teks halaman tombol sebelumnya", pageNextText: "Teks halaman tombol selanjutnya", completeText: "Teks tombol selesai", startSurveyText: "Teks tombol mulai", showNavigationButtons: "Tampilkan tombol navigasi (navigasi standar)", showPrevButton: "Tampilkan tombol sebelumnya (pengguna mungkin kembali ke halaman sebelumnya)", firstPageIsStarted: "Halaman pertama pada survei adalah halaman yang telah dimulai.", showCompletedPage: "Tampilkan keseluruhan halaman di akhir (completedHtml)", goNextPageAutomatic: "Setelah menjawa seluruh pertanyaan, pergi ke halaman berikutnya secara otomatis", showProgressBar: "Tampilkan progress bar", questionTitleLocation: "Lokasi judul pertanyaan", requiredText: "Simbil pertanyaan wajib", questionStartIndex: "Indeks mulai pertanyaan (1, 2 atau 'A', 'a')", showQuestionNumbers: "Tampilkan nomor pertanyaan", questionTitleTemplate: "Template Judul Pertanyaan, default adalah: '{no}. {require} {title}'", questionErrorLocation: "Lokasi Pertanyaan Error", focusFirstQuestionAutomatic: "Fokus ke pertanyaan pertama saat pergantian halaman", questionsOrder: "Urutakan elemen pada halaan", maxTimeToFinish: "Waktu maksimum untuk menyelesaikan survei", maxTimeToFinishPage: "Waktu maksimum untuk menyelesaikan suatu halaman", showTimerPanel: "Tampilkan panel pengatur waktu", showTimerPanelMode: "Tampilkan mode panel pengatur waktu", renderMode: "Mode render", allowAddPanel: "Bolehkan penambahan panel", allowRemovePanel: "Bolehkan penghapusan panel", panelAddText: "Teks tambah panel", panelRemoveText: "Teks hapus panel", isSinglePage: "Tampilkan seluruh elemen pada halaman", html: "Html", expression: "Ekspresi", minValue: "Nilai minimum", maxValue: "Nilai maksimum", minLength: "Panjang minimum", allowDigits: "Bolehkan angka", minCount: "Hitungan minimum", maxCount: "Hitungan maksimum", regex: "Ekspresi reguler", totalText: "Total teks", totalType: "Total jenis", totalExpression: "Total ekspresi", totalDisplayStyle: "Total gaya tampilan", totalCurrency: "Total mata uang", totalFormat: "Total format", tabs: { general: "Umum", fileOptions: "Pilihan berkas", html: "Editor Html", columns: "Kolom", rows: "Baris", choices: "Pilihan", items: "Barang", visibleIf: "Terlihat Jika", enableIf: "Memungkinkan Jika", requiredIf: "Wajib Jika", rateValues: "Nilai Tingkat", choicesByUrl: "Pilih dari Web", matrixChoices: "Pilihan Standar", multipleTextItems: "Masukan Teks", validators: "Validator", navigation: "Navigasi", question: "Pertanyaan", completedHtml: "Html Selesai", loadingHtml: "Memuat Html", timer: "Pengatur Waktu/Kuis", triggers: "Trigger", templateTitle: "Judul templat", totals: "Total" }, editProperty: "Ubah properti '{0}'", items: "[ Barang: {0} ]", enterNewValue: "Silahkan masukkan nilai", noquestions: "Tidak ada pertanyaan dalam survei.", createtrigger: "Silahkan buat sebuah trigger", triggerOn: "On ", triggerMakePagesVisible: "Buat halaman terlihat:", triggerMakeQuestionsVisible: "Buat elemen terlihat:", triggerCompleteText: "Selesaikan survei jika sukses.", triggerNotSet: "Trigger belum diatur", triggerRunIf: "Berjalan jika", triggerSetToName: "Ubah nilai dari: ", triggerFromName: "Salin nilai dari: ", triggerRunExpression: "Jalankan ekspresi ini:", triggerSetValue: "ke: ", triggerIsVariable: "Jangan meletakkan variabel ke hasil survey." }, //Property values pv: { true: "benar", false: "salah", inherit: "inherit", show: "tampilkan", hide: "sembunyikan", default: "standar", initial: "inisial", random: "acak", collapsed: "dilipat", expanded: "direntangkan", none: "tidak ada", asc: "naik", desc: "turun", indeterminate: "tidak tentu", decimal: "desimal", currency: "mata uang", percent: "persen", firstExpanded: "perluasanPertama", off: "mati", onPanel: "pada Panel", onSurvey: "pada Survei", list: "daftar", progressTop: "progress atas", progressBottom: "progress bawah", progressTopBottom: "progress atas bawah", horizontal: "horizontal", vertical: "vertikal", top: "atas", bottom: "bawah", topBottom: "atas dan bawah", left: "kiri", color: "warna", date: "tanggal", datetime: "tanggal&waktu", "datetime-local": "tanggal&waktu-lokal", email: "surel", month: "bulan", number: "nomor", password: "kata sandi", range: "rentang", tel: "telepon", text: "teks", time: "waktu", url: "url", week: "minggu", hidden: "tersembunyi", on: "nyala", onPage: "pada halaman", edit: "ubah", display: "tampilan", onComplete: "saat selesai", onHidden: "saat tersembunyi", all: "semua", page: "halaman", survey: "survei", onNextPage: "pada halaman selanjutnya", onValueChanged: "saat nilai berubah" }, //Operators op: { empty: "kosong", notempty: "tidak kosong", equal: "sama dengan", notequal: "tidak sama dengan", contains: "mengandung", notcontains: "tidak mengandung", greater: "lebih besar", less: "lebih kecil", greaterorequal: "lebih besar atau sama dengan", lessorequal: "lebih kecil atau sama dengan" }, //Embed window ew: { angular: "Gunakan versi Angular", jquery: "Gunakan versi JQuery", knockout: "Gunakan versi Knockout", react: "Gunakan versi React", vue: "Gunakan versi Vue", bootstrap: "Untuk framework bootstrap", standard: "Tidak ada bootstrap", showOnPage: "Tampilkan survei pada sebuah halaman", showInWindow: "Tampilkan survei pada sebuah jendela", loadFromServer: "Muat survei JSON dari server", titleScript: "Skrip dan gaya", titleHtml: "HTML", titleJavaScript: "JavaScript" }, //Test Survey ts: { selectPage: "Pilih halaman untuk dicoba:", showInvisibleElements: "Tampilkan elemen tak terlihat", emptySurveyText: "Tidak ada halaman atau pertanyaan yang tersedia di survei ini." }, validators: { answercountvalidator: "jumlah jawaban", emailvalidator: "surel", expressionvalidator: "ekspresi", numericvalidator: "numerik", regexvalidator: "ekspresi reguler", textvalidator: "teks" }, triggers: { completetrigger: "selesaikan survei", setvaluetrigger: "atur nilai", copyvaluetrigger: "salin nilai", runexpressiontrigger: "jalankan ekspresi", visibletrigger: "ubah visibilitas" }, //Properties p: { name: "nama", title: { name: "judul", title: "Biarkan kosong, jika sama dengan 'Nama'" }, navigationButtonsVisibility: "visibilitas tombol navigasi", questionsOrder: "urutan pertanyaan", maxTimeToFinish: "waktu maks untuk menyelesaikan", visible: "terlihat", visibleIf: "terlihat jika", questionTitleLocation: "lokasi judul pertanyaan", description: "deskripsi", state: "keadaan", isRequired: "wajib", requiredIf: "wajib jika", indent: "indentansi", requiredErrorText: "teks error wajib", startWithNewLine: "mulai dengan baris baru", innerIndent: "inden dalam", page: "halaman", width: "lebar", commentText: "teks komentar", valueName: "nama nilai", enableIf: "aktif jika", defaultValue: "nilai default", correctAnswer: "jawaban benar", readOnly: "baca saja", validators: "validator", titleLocation: "lokasi judul", hasComment: "memiliki komentar", hasOther: "memiliki lainnya", choices: "pilihan", choicesOrder: "urutkan pilihan", choicesByUrl: "pilihan dari URL", otherText: "teks lainnya", otherErrorText: "teks error lainnya", storeOthersAsComment: "simpan lainnnya sebagai komentar", label: "label", showTitle: "tampilkan judul", valueTrue: "nilai benar", valueFalse: "nilai salah", cols: "kolom", rows: "baris", placeHolder: "placeHolder", optionsCaption: "keterangan pilihan", expression: "ekspresi", format: "format", displayStyle: "gaya tampilan", currency: "mata uang", useGrouping: "gunakan kelompok", showPreview: "tampilkan pratinjau", allowMultiple: "bolehkan ganda", imageHeight: "tinggi gambar", imageWidth: "lebar gambar", storeDataAsText: "simpan data sebagai teks", maxSize: "ukuran maks", html: "html", columns: "kolom", cells: "sel", isAllRowRequired: "semuaBarisWajib", horizontalScroll: "horizontalScroll", cellType: "jenisSel", columnsLayout: "tataLetakKolom", columnColCount: "jumlahKolom", columnMinWidth: "lebarMinimalKolom", rowCount: "jumlahBaris", minRowCount: "jumlahBarisMin", maxRowCount: "jumlahBarisMaks", keyName: "namaKunci", keyDuplicationError: "kesalahanDuplikasiKunci ", confirmDelete: "konfirmasiHapus", confirmDeleteText: "teksKonfirmasiHapus", addRowLocation: "tambahLokasiBaris", addRowText: "teksTambahBaris", removeRowText: "teksHapusBaris", items: "items", itemSize: "ukuranBarang", colCount: "jumlahKolom", templateTitle: "judulTemplat", templateDescription: "deskripsiTemplat", allowAddPanel: "bolehkanTambahPanel", allowRemovePanel: "bolehkanHapusPanel", panelCount: "jumlahPanel", minPanelCount: "jumlahMinimumPanel", maxPanelCount: "jumlahMaksimumPanel", panelsState: "keadaanPanel", panelAddText: "teksTambahPanel", panelRemoveText: "teksHapusPanel", panelPrevText: "teksPanelSebelumnya", panelNextText: "teksPanelSelanjutnya", showQuestionNumbers: "tampilkanNomorPertanyaan", showRangeInProgress: "tampilkanRentangBerlangsung", renderMode: "modeRender", templateTitleLocation: "lokasiJudulTemplat", rateValues: "nilaiTingkat", rateMin: "tingkatMinimum", rateMax: "tingkatMaksimum", rateStep: "langkahTingkat", minRateDescription: "deskripsiTingkatMinimum", maxRateDescription: "deskripsiTingkatMaksimum", inputType: "jenisMasukan", size: "ukuran", locale: "Lokal", focusFirstQuestionAutomatic: "focusFirstQuestionAutomatic", completedHtml: "HtmlSelesai", completedBeforeHtml: "completedBeforeHtml", loadingHtml: "loadingHtml", triggers: "Trigger", cookieName: "namaCookie", sendResultOnPageNext: "Kirim hasil ke halaman selanjutnya", showNavigationButtons: "Tampilkan Tombol Navigasi", showPrevButton: "Tampilkan Tombol Sebelumnya", showPageTitles: "Tampilkan Judul Halaman", showCompletedPage: "Tampilkan Keseluruhan Halaman", showPageNumbers: "Tampilkan Nomor Halaman", questionErrorLocation: "Lokasi Pertanyaan Error", showProgressBar: "Tampilkan progress bar", mode: "mode", goNextPageAutomatic: "Ke Halaman Selanjutnya Otomatis", checkErrorsMode: "Mode Periksa Error", clearInvisibleValues: "Bersihkan Nilai Tak Terlihat", startSurveyText: "teksMulaiSurvei", pagePrevText: "teksHalamanSebelumnya", pageNextText: "teksHalamanSelanjutnya", completeText: "teksSelesai", requiredText: "teksWajib", questionStartIndex: "Index Mulai Pertanyaan", questionTitleTemplate: "Template Judul Pertanyaan", firstPageIsStarted: "Halaman Pertama Dimulai", isSinglePage: "Halaman Tunggal?", maxTimeToFinishPage: "Waktu Maks untuk Menyelesaikan Halaman", showTimerPanel: "Tampilkan Panel Pengatur Waktu", showTimerPanelMode: "Tampilkan showTimerPanelMode", defaultPanelValue: "nilai panel default", defaultRowValue: "nilai baris default", hasNone: "Memiliki None", noneText: "Non-teks", text: "teks", } }; __WEBPACK_IMPORTED_MODULE_0__editorLocalization__["a" /* editorLocalization */].locales["id"] = indonesianStrings; /***/ }), /* 60 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__editorLocalization__ = __webpack_require__(0); var italianTranslation = { // strings for survey templates survey: { edit: "Modifica", dropQuestion: "Aggiungi una domanda qui", copy: "Copia", addToToolbox: "Aggiungi alla toolbox", deletePanel: "Elimina pannello", deleteQuestion: "Elimina domanda", convertTo: "Converti a" }, // strings for question types qt: { checkbox: "Casella di controllo ", comment: "Commento", dropdown: "Combo", file: "Archivio", html: "Html", matrix: "Matrice (unica opzione)", matrixdropdown: "Matrice (opzioni multiple)", matrixdynamic: "Matrice (dinamica)", multipletext: "Testo multiplo", panel: "Pannello", paneldynamic: "Pannello (dinamico)", radiogroup: "Opzione multipla", rating: "Valutazione", text: "Testo semplice", expression: "Espressione" }, // strings for editor ed: { defaultLocale: "Default ({0})", survey: "Questionario", settings: "Impostazioni Questionario", editSurvey: "Modifica Questionario", addNewPage: "Aggiungi Nuova Pagina", deletePage: "Elimina Pagina", editPage: "Modifica Pagina", newPageName: "pagina", newQuestionName: "domanda", newPanelName: "pannello", testSurvey: "Testa questionario", testSurveyAgain: "Testa questionario di nuovo", testSurveyWidth: "Larghezza questionario:", embedSurvey: "Includi questionario", saveSurvey: "Salva questionario", designer: "Disegna", jsonEditor: "Modifica JSON", undo: "Annulla", redo: "Ripeti", options: "Opzioni", generateValidJSON: "Genera JSON valido", generateReadableJSON: "Genera JSON leggibile", toolbox: "Strumenti", delSelObject: "Elimina oggetto selezionato", editSelObject: "Modifica oggetto selezionato", correctJSON: "Per favore, correggi il tuo JSON", surveyResults: "Risultati del questionario: ", modified: "Modificato", saving: "Salvataggio", saved: "Salvato" }, //Property names in table headers pel: { isRequired: "Richiesto" }, // strings for property editors pe: { apply: "Applica", ok: "Accetta", cancel: "Annulla", reset: "Reimposta", close: "Chiudi", delete: "Elimina", addNew: "Nuovo", removeAll: "Elimina tutto", edit: "Modifica", empty: "<vuoto>", notEmpty: "<modifica valore>", fastEntry: "Inserimento rapido", formEntry: "Inserimento con dati ", testService: "Test del servizio", conditionSelectQuestion: "Seleziona domanda...", conditionButtonAdd: "Aggiungi", conditionButtonReplace: "Sostituisci", conditionHelp: "Per favore, inserire una espressione booleana. Dovrebbe restituire true per mantenere la domanda/pagina visibile. Ad esempio: {domanda1} = 'valore1' or ({domanda2} * {domanda4} > 20 and {domanda3} < 5)", expressionHelp: "Per favore inserire una espressione. Puoi usare parentesi graffe per ottenere l'accesso ai valori delle domande: '{domanda1} + {domanda2}', '({prezzo}*{qta}) * (100 - {sconto})'", aceEditorHelp: "Premi ctrl+space per ottenere un suggerimento sul completamento dell'espressione", aceEditorRowTitle: "Riga corrente", aceEditorPanelTitle: "Pannello Corrente", showMore: "Per favore, per maggiori dettagli guardare la documentazione", assistantTitle: "Domande disponibili:", cellsEmptyRowsColumns: "Dovrebbe esserci almeno una colonna o riga", propertyIsEmpty: "Per favore, inserire un valore per la propietà", value: "Valore", text: "Testo", columnEdit: "Modifica colonna: {0}", itemEdit: "Modifica elemento: {0}", url: "URL", path: "Percorso", valueName: "Nome Valore", titleName: "Nome Titolo", hasOther: "Altri elementi", otherText: "Testo altri elementi", name: "Nome", title: "Titolo", cellType: "Tipo di cella", colCount: "Numero di colonne", choicesOrder: "Seleziona altre opzioni", visible: "Visibile", isRequired: "Richiesto", startWithNewLine: "Nuova linea", rows: "Numero di righe", placeHolder: "Testo di riferimento", showPreview: "Mostra anteprima", storeDataAsText: "Vedi il contenuto JSON come testo", maxSize: "Dimensione massima in bytes", imageHeight: "Altezza immagine", imageWidth: "Larghezza immagine", rowCount: "Numero delle righe", addRowText: "Testo del pulsante per aggiungere una nuova righa", removeRowText: "Testo del pulsante per eliminare una righa", minRateDescription: "Descrizione del valore minimo", maxRateDescription: "Descrizione del valore massimo", inputType: "Tipo di inserimento", optionsCaption: "Titolo dell'opzione", defaultValue: "Valore default", cellsDefaultRow: "Valore default celle", surveyEditorTitle: "Edit survey settings", qEditorTitle: "Modifica domanda: {0}", //survey showTitle: "Mostra/nascondi titolo", locale: "Lingua Default", mode: "Modalità (modifica/sola lettura)", clearInvisibleValues: "Pulischi valori non visibili", cookieName: "Nome cookie (per disabilitare esegui il questionario due volte in locale)", sendResultOnPageNext: "Invia i risultati del sondaggio alla pagina successiva", storeOthersAsComment: "Memorizza il valore 'altri' in campi separati", showPageTitles: "Visualizza titoli pagina", showPageNumbers: "Visualizza numeri pagina", pagePrevText: "Testo bottone pagina precedente", pageNextText: "Testo bottone pagina successiva", completeText: "Testo bottone Completato", startSurveyText: "Testo bottone Inizia", showNavigationButtons: "Visualizza bottoni di navigazione (navigazione di default)", showPrevButton: "Visualizza bottone precedente(l'utente può tornare alla pagina precedente)", firstPageIsStarted: "La prima pagina nel questionario è la pagina iniziale.", showCompletedPage: "Visualizza la pagina completata alla fine del questionario (completedHtml)", goNextPageAutomatic: "Rispondendo a tutte le domande, vai alla pagina successiva in automatico.", showProgressBar: "Visualizza barra di avanzamento", questionTitleLocation: "Posizione titolo domanda", requiredText: "Simbolo domanda obbligatoria, esempio (*)", questionStartIndex: "La domanda inizia con l'indice (1, 2 oppure 'A', 'a')", showQuestionNumbers: "Visualizza i numeri di domanda", questionTitleTemplate: "Template titolo della domanda, il default è: '{no}. {require} {title}'", questionErrorLocation: "Posizione notifica errore sulla domanda", focusFirstQuestionAutomatic: "Sul cambio pagina, posiziona il cursore sulla prima domanda", questionsOrder: "Ordine di elementi sulla pagina", maxTimeToFinish: "Tempo massimo per terminare il sondaggio", maxTimeToFinishPage: "Tempo massimo per terminare una pagina del sondaggio", showTimerPanel: "Visualizza pannello timer", showTimerPanelMode: "Visualizza modalità timer pannello", renderMode: "Modalità di rendering", allowAddPanel: "Consenti l'aggiunta di un pannello", allowRemovePanel: "Consenti la rimozione di un pannello", panelAddText: "Aggiungi testo pannello", panelRemoveText: "Remuovi testo pannello", isSinglePage: "Visualizza tutti gli elementi su una pagina", tabs: { general: "Generale", fileOptions: "Opzioni", html: "Modifica Html", columns: "Colonne", rows: "Righe", choices: "Scelte", visibleIf: "Visibile se", rateValues: "Valori della classifica", choicesByUrl: "Opzioni dal Web", matrixChoices: "Opzioni predefinite", multipleTextItems: "Voci di testo", validators: "Validazioni", navigation: "Navigazione", question: "Domanda", completedHtml: "Html questionario completato", loadingHtml: "Html caricamento questionario", timer: "Timer/Quiz", triggers: "Triggers", templateTitle: "Template titolo" }, editProperty: "Modifca propietà '{0}'", items: "[ Elemento: {0} ]", enterNewValue: "Si prega di inserire il valore.", noquestions: "Non c'è alcun dubbio nel questionario.", createtrigger: "Si prega di creare un trigger", triggerOn: "Attivazione ", triggerMakePagesVisible: "Rendere visibili le pagine:", triggerMakeQuestionsVisible: "Rendere visibili le domande:", triggerCompleteText: "Completare il questionario, in caso di successo.", triggerNotSet: "Non impostato", triggerRunIf: "Esegui se", triggerSetToName: "Cambia il valore a: ", triggerSetValue: "a: ", triggerIsVariable: "Non posizionare la variabile del risultato del questionario" }, // strings for operators op: { empty: "è vuoto", notempty: "non è vuoto ", equal: "è uguale a", notequal: "non è uguale a", contains: "contiene", notcontains: "non contiene", greater: "maggiore", less: "minore", greaterorequal: "maggiore o uguale", lessorequal: "minore o uguale" }, // strings for embed window ew: { angular: "Versione per Angular", jquery: "Versione per jQuery", knockout: "Versione per Knockout", react: "Versione per React", vue: "Versione per Vue", bootstrap: "Per framework bootstrap", standard: "No bootstrap", showOnPage: "Visualizza in questa pagina", showInWindow: "Visualizza in una finestra", loadFromServer: "Carica JSON dal server", titleScript: "Scripts e stili", titleHtml: "HTML", titleJavaScript: "JavaScript" }, //Test Survey ts: { selectPage: "Seleziona la pagina da testare:", showInvisibleElements: "Mostra elementi nascosti" }, validators: { answercountvalidator: "numero risposte", emailvalidator: "e-mail", numericvalidator: "numerico", regexvalidator: "regex", textvalidator: "testo" }, triggers: { completetrigger: "completa questionario", setvaluetrigger: "setta valore", visibletrigger: "cambia visibilità" }, //Properties p: { name: "Nome", title: { name: "Titolo", title: "Lascialo vuoto, se è uguale a 'Nome'" }, visible: "Visibile", visibleIf: "Visibile Se", description: "Descrizione", isRequired: "Richiesto", requiredIf: "Richiesto Se", page: "Pagina", width: "Larghezza", enableIf: "Abilitato se", defaultValue: "Valore di default", readOnly: "Sola Lettura", hasComment: "Ha un commento", hasOther: "Ha altro", choices: "Scelte", choicesOrder: "Ordine Scelte", choicesByUrl: "Url Scelte", label: "label", showTitle: "Mostra Titolo", valueTrue: "Valore True", valueFalse: "Valore False", cols: "Colonne", rows: "Righe", currency: "Valuta", showPreview: "Visualizza Anteprima", html: "html", rateValues: "Valori della classifica", size: "Dimensione", locale: "locale", minValue: "Valore minimo", maxValue: "Valore massimo", minLength: "Lunghezza minima", maxLength: "Lunghezza massima", allowDigits: "Consenti cifre", regex: "Espressione regolare" } }; __WEBPACK_IMPORTED_MODULE_0__editorLocalization__["a" /* editorLocalization */].locales["it"] = italianTranslation; /***/ }), /* 61 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__editorLocalization__ = __webpack_require__(0); /* unused harmony export koreanStrings */ var koreanStrings = { //survey templates survey: { edit: "편집", dropQuestion: "왼쪽 도구상자에서 질문을 여기에 놓으십시오.", copy: "복사", addToToolbox: "도구상자에 추가", deletePanel: "패널 삭제", deleteQuestion: "질문 삭제", convertTo: "다음으로 변경", drag: "항목 끌어오기" }, //questionTypes qt: { default: "기본값", checkbox: "체크박스", comment: "설명", dropdown: "드롭다운", file: "파일", html: "HTML", matrix: "행렬 (단일 선택)", matrixdropdown: "행렬 (복수 선택)", matrixdynamic: "행렬 (동적 행)", multipletext: "텍스트 상자 그룹", panel: "패널", paneldynamic: "패널 (동적 패널)", radiogroup: "라디오 그룹", rating: "등급", text: "텍스트 상자", boolean: "불린(boolean)", expression: "표현식" }, //Strings in Editor ed: { survey: "설문지", settings: "설정", editSurvey: "설문지 편집", addNewPage: "새 페이지 추가", moveRight: "오른쪽으로 스크롤", moveLeft: "왼쪽으로 스크롤", deletePage: "페이지 삭제", editPage: "페이지 편집", edit: "편집", newPageName: "페이지", newQuestionName: "질문", newPanelName: "패널", testSurvey: "테스트 설문지", testSurveyAgain: "테스트 설문지 다시하기", testSurveyWidth: "설문지 너비: ", embedSurvey: "내장 설문지", saveSurvey: "설문지 저장", designer: "설문지 디자인", jsonEditor: "JSON 편집기", undo: "실행 취소", redo: "복원", options: "옵션", generateValidJSON: "JSON 데이터 생성", generateReadableJSON: "생성 JSON 데이터 읽기", toolbox: "도구상자", toolboxGeneralCategory: "일반", delSelObject: "선택한 객체 삭제", editSelObject: "선택한 객체 편집", correctJSON: "JSON 데이터를 수정하십시오.", surveyResults: "설문 결과: ", modified: "수정됨", saving: "저장중", saved: "저장됨" }, //Property names in table headers pel: { isRequired: "필수입니까?" }, //Property Editors pe: { apply: "적용", ok: "확인", cancel: "취소", reset: "재설정", close: "닫기", delete: "삭제", addNew: "새로 만들기", addItem: "항목을 추가하려면 클립하십시오.", removeAll: "모두 삭제", edit: "편집", itemValueEdit: "조건 충족 시 보기", editChoices: "선택사항 편집", move: "이동", empty: "<비어있음>", notEmpty: "<편집 값>", fastEntry: "빠른 입력", formEntry: "양식 입력", testService: "서비스 테스트", conditionSelectQuestion: "질문 선택...", conditionValueQuestionTitle: "값을 입력하거나 선택하십시오.", conditionButtonAdd: "추가", conditionButtonReplace: "바꾸기", conditionHelp: "불린 식을 입력하십시오. 질문 혹은 페이지를 계속 볼 수 있게 하려면 참값을 반환해야 합니다. 예를 들면: {질문1} = '값1' or ({질문2} * {질문4} > 20 and {질문3} < 5)", expressionHelp: "식을 입력하십시오. 다음과 같은 질문 값에 접근하려면 중괄호를 이용하십시오: '{질문1} + {질문2}', '({가격}*{수량}) * (100 - {할인})'", aceEditorHelp: "ctrl+space를 눌러 완성된 수식에 대한 힌트를 얻으십시오", aceEditorRowTitle: "현재 행", aceEditorPanelTitle: "현재 패널", showMore: "자세한 내용은 설명서를 확인하십시오.", conditionShowMoreUrl: "https://surveyjs.io/Documentation/LibraryParameter?id=Question¶meter=visibleIf", assistantTitle: "유효 질문:", cellsEmptyRowsColumns: "최소한 하나의 열 또는 행이 있어야 합니다.", propertyIsEmpty: "값을 입력하십시오", value: "값", text: "텍스트", columnEdit: "열 편집: {0}", itemEdit: "항목 편집: {0}", url: "URL", path: "경로", valueName: "값 이름", titleName: "제목 이름", hasOther: "다른 항목이 있습니다", otherText: "기타 항목 텍스트", name: "이름", title: "제목", cellType: "셀 유형", colCount: "열 개수", choicesOrder: "항목 순서 선택", visible: "보입니까??", isRequired: "필수입니까?", startWithNewLine: "새 줄로 시작하겠습니까?", rows: "행 수", placeHolder: "입력 자리 표시자 ", showPreview: "이미지 미리보기가 표시됩니까?", storeDataAsText: "파일 내용을 JSON 결과에 텍스트로 저장", maxSize: "최대 파일 크기(bytes)", imageHeight: "이미지 높이", imageWidth: "이미지 너비", rowCount: "행 수", columnsLocation: "열 위치", addRowLocation: "행 버튼 위치 추가", addRowText: "행 버튼 텍스트 추가", removeRowText: "행 버튼 텍스트 제거", minRateDescription: "최소 설명 길이", maxRateDescription: "최대 설명 길이", inputType: "입력 유형", optionsCaption: "옵션 캡션", defaultValue: "기본값", cellsDefaultRow: "기본 셀 텍스트", surveyEditorTitle: "설문지 설정 편집", qEditorTitle: "편집: {0}", //survey showTitle: "제목 표시/숨김", locale: "기본 언어", mode: "모드(편집/읽기전용)", clearInvisibleValues: "보이지 않는 값 지우기", cookieName: "쿠키 이름(로컬에서 설문 조사를 두 번 사용하지 않도록 설정)", sendResultOnPageNext: "다음 페이지에서 설문 조사 결과 보내기", storeOthersAsComment: "다른 사용자의 값을 별도의 필드에 저장", showPageTitles: "페이지 제목 표시", showPageNumbers: "페이지 번호 표시", pagePrevText: "이전 페이지 버튼 텍스트", pageNextText: "다음 페이지 버튼 텍스트", completeText: "완료 버튼 텍스트", startSurveyText: "시작 버튼 텍스트", showNavigationButtons: "탐색 버튼 표시 (기본 탐색)", showPrevButton: "이전 버튼 표시 (사용자가 이전 페이지로 돌아갈 수 있음)", firstPageIsStarted: "설문지의 첫 번째 페이지는 시작 페이지입니다", showCompletedPage: "끝 부분에 완료된 페이지 표시 (완료된 HTML)", goNextPageAutomatic: "모든 질문에 응답 후 자동으로 다음 페이지로 이동", showProgressBar: "진행률 막대 표시", questionTitleLocation: "질문 제목 위치", requiredText: "질문에 필요한 기호", questionStartIndex: "질문 시작 색인 (1, 2 또는 'A', 'a')", showQuestionNumbers: "질문 번호 표시", questionTitleTemplate: "질문 제목 템플릿입니다. 기본값: '{no}. {require} {title}'", questionErrorLocation: "질문 위치 오류", focusFirstQuestionAutomatic: "페이지 변경시 첫 번째 질문에 초점", questionsOrder: "페이지의 요소 순서", maxTimeToFinish: "설문 조사를 마칠 수있는 최대 시간", maxTimeToFinishPage: "설문 조사에서 페이지를 마칠 수있는 최대 시간", showTimerPanel: "타이머 패널 표시", showTimerPanelMode: "타이머 패널 모드 표시", renderMode: "렌더링 모드", allowAddPanel: "패널 추가 허용", allowRemovePanel: "패널 제거 허용", panelAddText: "패널 텍스트 추가", panelRemoveText: "패널 텍스트 삭제", isSinglePage: "한 페이지에 모든 요소 표시", tabs: { general: "일반", fileOptions: "옵션", html: "Html 편집기", columns: "열", rows: "행", choices: "선택", items: "항목", visibleIf: "조건 충족시 보기", enableIf: "조건 충족시 허용", rateValues: "길이 값", choicesByUrl: "웹에서 선택", matrixChoices: "기본 선택", multipleTextItems: "텍스트 입력", validators: "유효성 검사기", navigation: "탐색", question: "질문", completedHtml: "완료된 HTML", loadingHtml: "HTML 로드 중", timer: "타이머 / 퀴즈", triggers: "트리거", templateTitle: "템플릿 제목" }, editProperty: "편집 속성 '{0}'", items: "[ 항목: {0} ]", enterNewValue: "값을 입력하십시오.", noquestions: "설문 조사에는 어떤 질문도 없습니다.", createtrigger: "트리거를 만드십시오", triggerOn: "트리거 켜기", triggerMakePagesVisible: "페이지 표시:", triggerMakeQuestionsVisible: "요소 표시:", triggerCompleteText: "조건 충족 시 설문 조사를 작성하십시오.", triggerNotSet: "트리거가 설정되지 않았습니다.", triggerRunIf: "다음 조건 충족 시 실행", triggerSetToName: "다음 값 변경: ", triggerSetValue: "다음으로 수정: ", triggerIsVariable: "변수를 설문 결과에 넣지 마십시오." }, //Property values pv: { true: "참", false: "거짓", inherit: "상속", show: "보기", hide: "숨기기", default: "기본값", initial: "초기값", random: "무작위", collapsed: "축소", expanded: "확장", none: "없음", asc: "오름차순", desc: "내림차순", indeterminate: "불확정", decimal: "진수", currency: "화폐", percent: "퍼센트", firstExpanded: "우선 확장", off: "꺼짐", onPanel: "패널에서", onSurvey: "설문에서", list: "목록", progressTop: "상단 진행률", progressBottom: "하단 진행률", progressTopBottom: "상하단 진행률", horizontal: "가로", vertical: "세로", top: "위", bottom: "아래", topBottom: "위아래", left: "왼쪽", color: "색상", date: "날짜", datetime: "날짜/시간", "datetime-local": "현지 날짜/시간", email: "이메일", month: "월", number: "숫자", password: "패스워드", range: "범위", tel: "tel", text: "텍스트", time: "시간", url: "URL", week: "주", hidden: "숨김", on: "켜기", onPage: "페이지 켜기", edit: "편집", display: "디스플레이", onComplete: "완료", onHidden: "숨김", all: "모두", page: "페이지", survey: "설문지", onNextPage: "다음 페이지로", onValueChanged: "값 변경" }, //Operators op: { empty: "비어있습니다", notempty: "비어있지 않습니다", equal: "같습니다", notequal: "같지 않습니다", contains: "포함합니다", notcontains: "포함하지 않습니다", greater: "큰", less: "작은", greaterorequal: "크거나 같음", lessorequal: "작거나 같음" }, //Embed window ew: { angular: "Angular 버전 사용", jquery: "jQuery 버전 사용", knockout: "Knockout 버전 사용", react: "React 버전 사용", vue: "Vue 버전 사용", bootstrap: "부트 스트랩 프레임", standard: "부트 스트랩 없음", showOnPage: "페이지에서 설문조사 보기", showInWindow: "윈도우 창에서 설문조사 보기", loadFromServer: "서버에서 설문조사 JSON 실행", titleScript: "스크립트 및 스타일", titleHtml: "HTML", titleJavaScript: "자바스크립트" }, //Test Survey ts: { selectPage: "테스트 할 페이지를 선택하십시오:" }, validators: { answercountvalidator: "답 개수", emailvalidator: "이메일", expressionvalidator: "표현식", numericvalidator: "숫자", regexvalidator: "정규식", textvalidator: "텍스트" }, triggers: { completetrigger: "설문 완료", setvaluetrigger: "값 설정", visibletrigger: "선명도 변경" }, //Properties p: { name: "이름", title: { name: "제목", title: "'이름'과 같은 경우 비워 둡니다." }, navigationButtonsVisibility: "탐색 버튼 선명도", questionsOrder: "질문 순서", maxTimeToFinish: "최대 완료 시간", visible: "보기", visibleIf: "조건 충족시 보기", questionTitleLocation: "질문 제목 위치", description: "설명", state: "state", isRequired: "필수", indent: "들여쓰기", requiredErrorText: "필수 오류 텍스트", startWithNewLine: "새 줄로 시작", innerIndent: "안으로 들여쓰기", page: "페이지", width: "너비", commentText: "메모 텍스트", valueName: "이름값", enableIf: "조건 충족시 허가", defaultValue: "기본값", correctAnswer: "답안 수정", readOnly: "읽기 전용", validators: "유효성 검사기", titleLocation: "제목 위치", hasComment: "답변", hasOther: "다른 답변 허용", choices: "선택", choicesOrder: "기타 선택", choicesByUrl: "URL을 통한 선택", otherText: "기타 텍스트", otherErrorText: "기타 오류 텍스트", storeOthersAsComment: "기타 답변 저장", label: "라벨", showTitle: "제목 표시", valueTrue: "참값", valueFalse: "거짓값", cols: "열", rows: "행", placeHolder: "자리 표시자", optionsCaption: "옵션 캡션", expression: "표현식", format: "포맷", displayStyle: "디스플레이 스타일", currency: "화폐", useGrouping: "그룹 사용", showPreview: "미리보기 보기", allowMultiple: "다수 허용", imageHeight: "이미지 높이", imageWidth: "이미지 너비", storeDataAsText: "텍스트로 데이터 저장", maxSize: "최대 크기", html: "HTML", columns: "열", cells: "셀", isAllRowRequired: "모두 필수 행입니까", horizontalScroll: "가로 스크롤바", cellType: "셀 유형", columnsLocation: "열 위치", columnColCount: "열 개수", columnMinWidth: "열 최소 너비", rowCount: "행 수", minRowCount: "최소 행 개수", maxRowCount: "최대 행 개수", keyName: "keyName", keyDuplicationError: "주요 복제 에러", confirmDelete: "삭제 확인", confirmDeleteText: "텍스트 삭제 확인", addRowLocation: "행 위치 추가", addRowText: "행 텍스트 추가", removeRowText: "행 텍스트 제거", items: "항목", itemSize: "항목 크기", colCount: "열 개수", templateTitle: "템플릿 이름", templateDescription: "템플릿 설명", allowAddPanel: "패널 추가 허용", allowRemovePanel: "패널 제거 허용", panelCount: "패널 개수", minPanelCount: "최소 패널 개수", maxPanelCount: "최대 패널 개수", panelsState: "panelsState", panelAddText: "패널 텍스트 추가", panelRemoveText: "패널 텍스트 제거", panelPrevText: "이전 패널 텍스트", panelNextText: "다음 패널 텍스트", showQuestionNumbers: "질문 개수 보기", showRangeInProgress: "진행중인 범위 보기", renderMode: "renderMode", templateTitleLocation: "템플릿 이름 위치", rateValues: "길이값", rateMin: "최소 길이", rateMax: "최대 길이", rateStep: "rateStep", minRateDescription: "최소 설명 길이", maxRateDescription: "최대 설명 길이", inputType: "입력 유형", size: "크기", locale: "로컬", focusFirstQuestionAutomatic: "첫 질문 자동 초점", completedHtml: "완료된 HTML", completedBeforeHtml: "완료된 이전 HTML", loadingHtml: "HTML 로드", triggers: "트리거", cookieName: "쿠키 이름", sendResultOnPageNext: "현 페이지로 결과 전송", showNavigationButtons: "탐색 버튼 보기", showPrevButton: "뒤로가기 버튼 보기", showPageTitles: "페이지 제목 보기", showCompletedPage: "완료 페이지 보기", showPageNumbers: "페이지 수 보기", questionErrorLocation: "질문 오류 위치", showProgressBar: "진행 상태바 보기", mode: "모드", goNextPageAutomatic: "다음 페이지로 자동으로 넘어가기", checkErrorsMode: "오류 모드 확인", clearInvisibleValues: "보이지 않는 변수 제거", startSurveyText: "설문 테스트 시작", pagePrevText: "이전 텍스트 페이지", pageNextText: "다음 텍스트 페이지", completeText: "완료 텍스트", requiredText: "필수 텍스트", questionStartIndex: "질문 시작 색인", questionTitleTemplate: "질문 제목 템플릿", firstPageIsStarted: "첫 페이지에서 시작", isSinglePage: "단일 페이지", maxTimeToFinishPage: "페이지 종료 최대 시간", showTimerPanel: "타이머 패널 보기", showTimerPanelMode: "타이머 패널 모드 보기", text: "텍스트", minValue: "최소값", maxValue: "최대값", minLength: "최소 길이", maxLength: "최대 길이", allowDigits: "숫자 허용", minCount: "최소 개수", maxCount: "최대 개수", regex: "정규 표현식" } }; __WEBPACK_IMPORTED_MODULE_0__editorLocalization__["a" /* editorLocalization */].locales["ko"] = koreanStrings; /***/ }), /* 62 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__editorLocalization__ = __webpack_require__(0); /* unused harmony export nbStrings */ //Uncomment this line on creating a translation file var nbStrings = { //survey templates survey: { edit: "Rediger", dropQuestion: "Dra og slipp et spørsmål her fra Verktøylisten til venstre.", copy: "Kopier", addToToolbox: "Legg til Verktøylisten", deletePanel: "Slett Panel", deleteQuestion: "Slett spørsmål", convertTo: "Konverter til", drag: "Dra element" }, //questionTypes qt: { default: "Standard", checkbox: "Sjekkboks", comment: "Kommentar", imagepicker: "Bilde-velger", dropdown: "Nedtrekksliste", file: "Fil", html: "Html", matrix: "Matrise (enkelvalg)", matrixdropdown: "Matrise (flere valg)", matrixdynamic: "Matrise (dynamiske rader)", multipletext: "Flerlinje tekst", panel: "Panel", paneldynamic: "Panel (dynamisk panel)", radiogroup: "Radiogruppe", rating: "Rangering", text: "Enkel tekst", boolean: "Boolean", expression: "Formel" }, //Strings in Editor ed: { defaultLocale: "Standard ({0})", survey: "Skjema", settings: "Skjema innstillinger", editSurvey: "Rediger skjema", addNewPage: "Legg til ny side", moveRight: "Bla til høyre", moveLeft: "Bla til venstre", deletePage: "Slett side", editPage: "Rediger side", edit: "Rediger", newPageName: "side", newQuestionName: "spørsmål", newPanelName: "panel", testSurvey: "Test skjema", testSurveyAgain: "Test skjema igjen", testSurveyWidth: "Skjema bredde: ", embedSurvey: "Integrer skjema", translation: "Oversettelse", saveSurvey: "Lagre skjema", designer: "Skjema Designer", jsonEditor: "JSON Redigering", undo: "Angre", redo: "Gjenta", options: "Alternativer", generateValidJSON: "Lag gyldig JSON", generateReadableJSON: "Lag lesbar JSON", toolbox: "Verktøyliste", toolboxGeneralCategory: "Generelt", delSelObject: "Slett valgte elementer", editSelObject: "Rediger valgte elementer", correctJSON: "Vennligst korriger JSON.", surveyResults: "Skjema resultat: ", surveyResultsTable: "Som tabell", surveyResultsJson: "Som JSON", resultsTitle: "Spørsmål tittel", resultsName: "Spørsmål navn", resultsValue: "Svar verdi", resultsDisplayValue: "Vist verdi", modified: "Endret", saving: "Lagrer", saved: "Lagret", saveError: "Feil! Skjema innhold er ikke lagret.", translationAddLanguage: "Velg språk for oversetting", translationShowAllStrings: "Vis alle strenger", translationShowAllPages: "Vis alle sider", translationNoStrings: "Ingen strenger å oversette. Vennligst endre filteret.", translationExportToSCVButton: "Eksporter til CSV", translationImportFromSCVButton: "Importer fra CSV", translationMergeLocaleWithDefault: "Flett {0} med standard språk" }, //Property names in table headers pel: { isRequired: "Nødvendig?" }, //Property Editors pe: { apply: "Bruk", ok: "OK", cancel: "Avbryt", reset: "Tilbakestill", close: "Lukk", delete: "Slett", addNew: "Legg til ny", addItem: "Klikk for å legge til...", removeAll: "Fjern alt", edit: "Rediger", itemValueEdit: "Synlig dersom", editChoices: "Rediger valg", move: "Flytt", empty: "<tom>", notEmpty: "<rediger verdi>", fastEntry: "Rask innfylling", formEntry: "Innfylling i skjema", testService: "Sjekk tjenesten", conditionSelectQuestion: "Velg spørsmål...", conditionValueQuestionTitle: "Vennligst skriv inn/velg verdi", conditionButtonAdd: "Legg til", conditionButtonReplace: "Erstatt", conditionHelp: "Skriv inn et boolsk uttrykk. Det burde returnere SANN for å gjøre spørsmål/side synlig. For eksempel: {question1} = 'value1' or ({question2} * {question4} > 20 and {question3} < 5)", expressionHelp: "Vennligst skriv inn et uttrykk. Du kan bruke klammeparenteser for å få tilgang til spørsmåls verdiene: '{question1} + {question2}', '({price}*{quantity}) * (100 - {discount})'", aceEditorHelp: "Trykk ctrl+mellomrom for å få hint til å fullføre uttrykk", aceEditorRowTitle: "Gjeldende rad", aceEditorPanelTitle: "Gjeldende panel", showMore: "For mer detaljer - se dokumentasjonen", conditionShowMoreUrl: "https://surveyjs.io/Documentation/LibraryParameter?id=Question¶meter=visibleIf", assistantTitle: "Tilgjengelige spørsmål:", cellsEmptyRowsColumns: "Det må være minst 1 kolonne eller rad", propertyIsEmpty: "Vennligst fyll inn en verdi", value: "Verdi", text: "Tekst", rowid: "Rad ID", imageLink: "Bilde lenke", columnEdit: "Rediger kolonne: {0}", itemEdit: "Rediger element: {0}", url: "URL", path: "Sti", valueName: "Verdi navn", titleName: "Tittel navn", hasOther: "Har annet element", otherText: "Annet element tekst", name: "Navn", title: "Tittel", cellType: "Celle type", colCount: "Antall kolonner", choicesOrder: "Velg rekkefølge på valg", visible: "Er synlig?", isRequired: "Er nødvendig?", startWithNewLine: "Er start med ny linje?", rows: "Antall rader", placeHolder: "Inndate plassholder", showPreview: "Er forhåndsvisning av bilde vist?", storeDataAsText: "Lagre fil innhold i JSON resultat som tekst", maxSize: "Maksimum filstørrelse i bytes", imageHeight: "Bilde høyde", imageWidth: "Bilde bredde", rowCount: "Antall rader", columnLayout: "Oppsett kolonner", addRowLocation: "Legg til rad knapp plassering", addRowText: "Legg til rad knapp tekst", removeRowText: "Fjern rad knapp tekst", minRateDescription: "Beskrivelse Minimum vudering", maxRateDescription: "Beskrivelse Maksimum vurdering", inputType: "Inndata type", optionsCaption: "Tekst for alternativer", defaultValue: "Standard verdi", cellsDefaultRow: "Standard celle tekster", surveyEditorTitle: "Rediger skjema innstillinger", qEditorTitle: "Rediger: {0}", maxLength: "Maksimum lengde", //survey showTitle: "Vis/skjul tittel", locale: "Standard språk", mode: "Modus (redigere/kun lesing)", clearInvisibleValues: "Fjern usynlige verdier", cookieName: "Informasjonskapsel navn (for å hindre bruk av skjema to ganger localt)", sendResultOnPageNext: "Send skjema resultat ved neste side", storeOthersAsComment: "Lagre 'andre' verdier i et separat felt", showPageTitles: "Vis sidetitel", showPageNumbers: "Vis sidenummer", pagePrevText: "Forrige side knapp tekst", pageNextText: "Neste side knapp tekst", completeText: "Fullfør knapp tekst", startSurveyText: "Start knapp tekst", showNavigationButtons: "Vis navigasjonsknapper (standard navigering)", showPrevButton: "Vis forrige knapp (bruker kan gå til forrige side)", firstPageIsStarted: "Den første siden i skjema er startside.", showCompletedPage: "Vis ferdigsiden på slutten (completedHtml)", goNextPageAutomatic: "Når en har svart alle spørsmål, gå til neste side automatisk", showProgressBar: "Vis fremdriftslinje", questionTitleLocation: "Spørsmål tittel plassering", requiredText: "Svar nødvendig symbol(er)", questionStartIndex: "Spørsmål startindeks (1, 2 eller 'A', 'a')", showQuestionNumbers: "Vis spørsmålsnummer", questionTitleTemplate: "Spørsmål tittel mal, standard er: '{no}. {require} {title}'", questionErrorLocation: "Spørsmål feil plassering", focusFirstQuestionAutomatic: "Sett fokus på første spørsmål når en endrer side", questionsOrder: "Rekkefølge på elementer på siden", maxTimeToFinish: "Maks tid for å gjøre ferdig skjema", maxTimeToFinishPage: "Maks tid til å gjøre ferdig en side i skjema", showTimerPanel: "Vis tidtaking", showTimerPanelMode: "Vis tidtaking modus", renderMode: "Gjengivelse modus", allowAddPanel: "Tillat å legge til panel", allowRemovePanel: "Tillat å fjerne panel", panelAddText: "Legg til panel tekst", panelRemoveText: "Fjern panel tekst", isSinglePage: "Vis alle elementer på en side", tabs: { general: "Generelt", fileOptions: "Alternativer", html: "Html-editor", columns: "Kolonner", rows: "Rader", choices: "Valg", items: "Elementer", visibleIf: "Synlig hvis", enableIf: "Tilgjengelig hvis", rateValues: "Rangering verdier", choicesByUrl: "Valg fra web", matrixChoices: "Standard valg", multipleTextItems: "Tekst inndata", validators: "Valideringer", navigation: "Navigering", question: "Spørsmål", completedHtml: "Fullført Html", loadingHtml: "Laster Html", timer: "Tidtaker/Quiz", triggers: "Triggere", templateTitle: "Mal tittel" }, editProperty: "Rediger egenskap '{0}'", items: "[ Elementer: {0} ]", enterNewValue: "Vennligst skriv inn en verdi.", noquestions: "Der er ingen spørsmål i skjema.", createtrigger: "Vennligst lag en trigger", triggerOn: "Når ", triggerMakePagesVisible: "Gjør sider synlige:", triggerMakeQuestionsVisible: "Gjør elementer synlige:", triggerCompleteText: "Fullfør skjema dersom vellykket.", triggerNotSet: "Trigger er ikke satt", triggerRunIf: "Kjør dersom", triggerSetToName: "Endre verdien av: ", triggerFromName: "Kopier verdi fra: ", triggerRunExpression: "Kjør dette uttrykket:", triggerSetValue: "til: ", triggerIsVariable: "Ikke legg variabelen i resultatet." }, //Property values pv: { true: "true", false: "false", inherit: "inherit", show: "show", hide: "hide", default: "default", initial: "initial", random: "random", collapsed: "collapsed", expanded: "expanded", none: "none", asc: "ascending", desc: "descending", indeterminate: "indeterminate", decimal: "decimal", currency: "currency", percent: "percent", firstExpanded: "firstExpanded", off: "off", onPanel: "onPanel", onSurvey: "onSurvey", list: "list", progressTop: "progressTop", progressBottom: "progressBottom", progressTopBottom: "progressTopBottom", horizontal: "horizontal", vertical: "vertical", top: "top", bottom: "bottom", topBottom: "top and bottom", left: "left", color: "color", date: "date", datetime: "datetime", "datetime-local": "datetime-local", email: "email", month: "month", number: "number", password: "password", range: "range", tel: "tel", text: "text", time: "time", url: "url", week: "week", hidden: "hidden", on: "on", onPage: "onPage", edit: "edit", display: "display", onComplete: "onComplete", onHidden: "onHidden", all: "all", page: "page", survey: "survey", onNextPage: "onNextPage", onValueChanged: "onValueChanged" }, //Operators op: { empty: "is empty", notempty: "is not empty", equal: "equals", notequal: "not equals", contains: "contains", notcontains: "not contains", greater: "greater", less: "less", greaterorequal: "greater or equals", lessorequal: "less or equals" }, //Embed window ew: { angular: "Bruk Angular versjon", jquery: "Bruk jQuery versjon", knockout: "Bruk Knockout versjon", react: "Bruk React versjon", vue: "Bruk Vue versjon", bootstrap: "For bootstrap framework", standard: "Ingen bootstrap", showOnPage: "Vis skjema på en side", showInWindow: "Vis skjema i et vindu", loadFromServer: "Hent skjema som JSON fra serveren", titleScript: "Scripts og styles", titleHtml: "HTML", titleJavaScript: "JavaScript" }, //Test Survey ts: { selectPage: "Velg siden for å teste den:", showInvisibleElements: "Vis usynlige elementer" }, validators: { answercountvalidator: "answer count", emailvalidator: "e-mail", expressionvalidator: "expression", numericvalidator: "numeric", regexvalidator: "regex", textvalidator: "text" }, triggers: { completetrigger: "skjema fullført", setvaluetrigger: "sett verdi", copyvaluetrigger: "kopier verdi", runexpressiontrigger: "kjør uttrykk", visibletrigger: "endre synlighet" }, //Properties p: { name: "name", title: { name: "title", title: "La den være tom hvis det er samme som 'Name'" }, navigationButtonsVisibility: "navigationButtonsVisibility", questionsOrder: "questionsOrder", maxTimeToFinish: "maxTimeToFinish", visible: "visible", visibleIf: "visibleIf", questionTitleLocation: "questionTitleLocation", description: "description", state: "state", isRequired: "isRequired", indent: "indent", requiredErrorText: "requiredErrorText", startWithNewLine: "startWithNewLine", innerIndent: "innerIndent", page: "page", width: "width", commentText: "commentText", valueName: "valueName", enableIf: "enableIf", defaultValue: "defaultValue", correctAnswer: "correctAnswer", readOnly: "readOnly", validators: "validators", titleLocation: "titleLocation", hasComment: "hasComment", hasOther: "hasOther", choices: "choices", choicesOrder: "choicesOrder", choicesByUrl: "choicesByUrl", otherText: "otherText", otherErrorText: "otherErrorText", storeOthersAsComment: "storeOthersAsComment", label: "label", showTitle: "showTitle", valueTrue: "valueTrue", valueFalse: "valueFalse", cols: "cols", rows: "rows", placeHolder: "placeHolder", optionsCaption: "optionsCaption", expression: "expression", format: "format", displayStyle: "displayStyle", currency: "currency", useGrouping: "useGrouping", showPreview: "showPreview", allowMultiple: "allowMultiple", imageHeight: "imageHeight", imageWidth: "imageWidth", storeDataAsText: "storeDataAsText", maxSize: "maxSize", html: "html", columns: "columns", cells: "cells", isAllRowRequired: "isAllRowRequired", horizontalScroll: "horizontalScroll", cellType: "cellType", columnsLayout: "columnsLayout", columnColCount: "columnColCount", columnMinWidth: "columnMinWidth", rowCount: "rowCount", minRowCount: "minRowCount", maxRowCount: "maxRowCount", keyName: "keyName", keyDuplicationError: "keyDuplicationError", confirmDelete: "confirmDelete", confirmDeleteText: "confirmDeleteText", addRowLocation: "addRowLocation", addRowText: "addRowText", removeRowText: "removeRowText", items: "items", itemSize: "itemSize", colCount: "colCount", templateTitle: "templateTitle", templateDescription: "templateDescription", allowAddPanel: "allowAddPanel", allowRemovePanel: "allowRemovePanel", panelCount: "panelCount", minPanelCount: "minPanelCount", maxPanelCount: "maxPanelCount", panelsState: "panelsState", panelAddText: "panelAddText", panelRemoveText: "panelRemoveText", panelPrevText: "panelPrevText", panelNextText: "panelNextText", showQuestionNumbers: "showQuestionNumbers", showRangeInProgress: "showRangeInProgress", renderMode: "renderMode", templateTitleLocation: "templateTitleLocation", rateValues: "rateValues", rateMin: "rateMin", rateMax: "rateMax", rateStep: "rateStep", minRateDescription: "minRateDescription", maxRateDescription: "maxRateDescription", inputType: "inputType", size: "size", locale: "locale", focusFirstQuestionAutomatic: "focusFirstQuestionAutomatic", completedHtml: "completedHtml", completedBeforeHtml: "completedBeforeHtml", loadingHtml: "loadingHtml", triggers: "triggers", cookieName: "cookieName", sendResultOnPageNext: "sendResultOnPageNext", showNavigationButtons: "showNavigationButtons", showPrevButton: "showPrevButton", showPageTitles: "showPageTitles", showCompletedPage: "showCompletedPage", showPageNumbers: "showPageNumbers", questionErrorLocation: "questionErrorLocation", showProgressBar: "showProgressBar", mode: "mode", goNextPageAutomatic: "goNextPageAutomatic", checkErrorsMode: "checkErrorsMode", clearInvisibleValues: "clearInvisibleValues", startSurveyText: "startSurveyText", pagePrevText: "pagePrevText", pageNextText: "pageNextText", completeText: "completeText", requiredText: "requiredText", questionStartIndex: "questionStartIndex", questionTitleTemplate: "questionTitleTemplate", firstPageIsStarted: "firstPageIsStarted", isSinglePage: "isSinglePage", maxTimeToFinishPage: "maxTimeToFinishPage", showTimerPanel: "showTimerPanel", showTimerPanelMode: "showTimerPanelMode", defaultPanelValue: "defaultPanelValue", defaultRowValue: "defaultRowValue", hasNone: "hasNone", noneText: "noneText", text: "text", minValue: "minimum value", maxValue: "maximum value", minLength: "minumum length", maxLength: "maximum length", allowDigits: "allow digits", minCount: "minumum count", maxCount: "maximum count", regex: "regular expression" } }; //Uncomment this line on creating a translation file. You should replace "en" and enStrings with your locale ("fr", "de" and so on) and your variable. __WEBPACK_IMPORTED_MODULE_0__editorLocalization__["a" /* editorLocalization */].locales["nb"] = nbStrings; /***/ }), /* 63 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__editorLocalization__ = __webpack_require__(0); var persianStrings = { //survey templates survey: { edit: "ویرایش", externalHelpLink: "Watch and learn how to create surveys", externalHelpLinkUrl: "https://www.youtube.com/channel/UCH2ru9okIcooNZfpIbyq4qQ?view_as=subscriber", dropQuestion: "لطفا از جعبه ابزار سوالی در اینجا قرار دهید", copy: "کپی", addToToolbox: "افزودن به جعبه ابزار", deletePanel: "حذف پنل", deleteQuestion: "حذف سوال", convertTo: "تبدیل به", drag: "Drag element" }, //questionTypes qt: { default: "Default", checkbox: "چند انتخابی", comment: "نظر", imagepicker: "Image picker", dropdown: "لیست انتخابی", file: "فایل", html: "Html", matrix: "ماتریس (تک انتخابی)", matrixdropdown: "ماتریس (چند انتخابی)", matrixdynamic: "ماتریس (سطرهای داینامیک)", multipletext: "متن چند خطی", panel: "پنل", paneldynamic: "پنل (پنل های داینامیک)", radiogroup: "تک انتخابی", rating: "رتبه بندی", text: "متن تک خطی", boolean: "صحیح و غلط", expression: "توصیفی", flowpanel: "Flow Panel" }, //Strings in Editor ed: { defaultLocale: "پیش فرض ({0})", survey: "نظرسنجی", settings: "Survey Settings", opjectPropertiesHeader: "Advanced", showObjectProperties: "Show Object Properties", hideObjectProperties: "Hide Object Properties", editSurvey: "ویرایش نظرسنجی", addNewPage: "درج صفحه جدید", moveRight: "اسکرول به راست", moveLeft: "اسکرول به چپ", deletePage: "حذف صفحه", editPage: "ویرایش صفحه", edit: "ویرایش", newPageName: "صفحه", newQuestionName: "سوال", newPanelName: "پنل", newTextItemName: "text", testSurvey: "آزمایش نظرسنجی", testSurveyAgain: "آزمایش دوباره نظرسنجی", testSurveyWidth: "عرض نظرسنجی: ", logic: "Survey Logic", embedSurvey: "نظرسنجی توکار", translation: "ترجمه", saveSurvey: "ذخیره نظرسنجی", designer: "طراح نظرسنجی", jsonEditor: "ویرایشگر JSON", undo: "بازگردانی", redo: "بازانجام", options: "انتخاب ها", generateValidJSON: "تولید کد معتبر JSON", generateReadableJSON: "تولید کد خوانا JSON", toolbox: "جعبه ابزار", toolboxGeneralCategory: "عمومی", delSelObject: "حذف مورد انتخابی", editSelObject: "ویرایش مورد انتخابی", correctJSON: "لطفا JSON را تصحیح کنید.", surveyResults: "نتایج نظرسنجی: ", surveyResultsTable: "به صورت جدول", surveyResultsJson: "به صورت JSON", resultsTitle: "عنوان سوال", resultsName: "نام سوال", resultsValue: "محتوای پاسخ", resultsDisplayValue: "محتوای نمایشی", modified: "تغییر داده شده", saving: "در حال ذخیره", saved: "ذخیره شد", saveError: "خطا! محتوای ویرایشگر ذخیره نشده است.", translationAddLanguage: "زبانی را برای ترجمه انتخاب کنید", translationShowAllStrings: "نمایش تمام عبارات", translationShowAllPages: "نمایش تمام صفحات", translationNoStrings: "هیچ عبارتی برای ترجمه نیست، لطفا فیلتر را عوض کنید.", translationExportToSCVButton: "برون بری به CSV", translationImportFromSCVButton: "برون ریزی از CSV", translationMergeLocaleWithDefault: "ادغام {0} با زبان پیش فرض", bold: "Bold", italic: "Italic", underline: "Underline", fpAddQuestion: "Add question...", completedHtmlOnConditionItemText: "Show if:", lg: { //Logic tab strings page_visibilityName: "قابلیت رویت صفحه ", panel_visibilityName: "قابلیت رویت پنل", panel_enableName: "فعال/غیرفعال کردن پنل ", question_visibilityName: " قابلیت رویت سوال", question_enableName: "فعال/غیرفعال کردن سوال ", question_requireName: "سوال اختیاری موردنیاز", trigger_completeName: "تکمیل نظرسنجی", trigger_setvalueName: "تنظیم عنوان سوال", trigger_copyvalueName: "کپی مقدار سوال", trigger_skipName: "رد کردن سوال ", trigger_runExpressionName: "اجرای متن شفارشی مورد نظر", completedHtmlOnConditionName: "متن سفارشی صفحه 'تشکر' ", page_visibilityDescription: "زمانی که عبارت منطقی مقدار صحیح برمی گرداند صفحه را قابل مشاهده کنید، در غیراینصورت آن را غیرقابل مشاهده نگه دارید.", panel_visibilityDescription: "اگر عبارت منطقی مقدار صحیح بر میگرداند، پنل را فعال کنید، در غیر اینصورت آن را غیرقابل مشاهده نگه دارید.", panel_enableDescription: "یک پنل ایجاد کنید و همه المان های داخل آن را در صورتی که عبارت منطقی مقدار صحیح بر می گرداند را فعال کنید، در غیر اینصورت آن ها را غیرفعال نگه دارید.", question_visibilityDescription: "زمانی که عبارت منطقی مقدار صحیح را برمی گرداند، سوال را قابل مشاهده کنید، در غیر اینصورت آن را غیرمشاهده نگه دارید.", question_enableDescription: "زمانی که عبارت منطقی مقدار صحیح برمی گرداند، سوال را فعال کنید، در غیر اینصورت آن را غیرفعال نگه دارید.", question_requireDescription: "زمانی که عبارت منطقی مقدار صحیح را بر می گرداند، سوال اجبار ی می شود.", trigger_completeDescription: "زمانی که عبارت منطقی مقدار صحیح را بر می گرداند، و بررسی تکمیل می شود،کاربر نهایی صفحه 'تشکر' را مشاهده می کند.", trigger_setvalueDescription: "زمانی که مقدار سوالی که در عبارت منطقی استفاده شده است تغییر می یابد و عبارت منطقی مقدار صحیح را بر می گرداند، آنگاه مقدار برای سوال انتخاب شده تنظیم می شود.", trigger_copyvalueDescription: "زمانی که مقدارهای سوال که در عبارت منطقی استفاده شده اند، تغییر می یابد و عبارت منطقی مقدار صحیح را بر می گرداند، سپس مقدار یکی از سوال های انتخاب شده در سوال دیگر انتخاب شده کپی می شود.", trigger_skipDescription: "When the logic expression returns true then the survey skip to / focus the selected question.", trigger_runExpressionDescription: "اگر عبارت منطقی مقدار صحیح برگرداند، آنگاه عبارت سفارشی اجرا می شود. شما ممکن است به طور اختیاری این نتیجه را به سوال انتخاب شده تبدیل کنید.", completedHtmlOnConditionDescription: " اگر عبارت منطقی مقدار صحیح برگرداند متن صفحه 'تشکر' به متن داده شده تغییر می یابد.", itemExpressionText: "زمانی که عبارت {0} مقدار صحیح بر می گرداند", page_visibilityText: "صفحه {0} را قابل مشاهده کنید.", panel_visibilityText: "پنل {0} را قابل مشاهده کنید.", panel_enableText: "فعال کردن پنل {0}", question_visibilityText: "سوال {0} را قابل مشاهده کنید.", question_enableText: "فعال کردن سوال {0}", question_requireText: "ایجاد سوال {0} اجباری", trigger_completeText: "بررسی نظرسنجی تمام شد", trigger_setvalueText: "در سوال {0} مقدار {1} را قرار دهید", trigger_copyvalueText: "مقدار سوال {0} را از سوال {1} کپی کنید.", trigger_skipText: "رد کردن نظرسنجی برای سوال {0}", trigger_runExpressionText1: "اجرای عبارت '{0}' ", trigger_runExpressionText2: "و نتیجه آن را داخل سوال {0} ذخیره کنید", completedHtmlOnConditionText: "نمایش متن سفارشی برای صفحه 'تشکر'", expressionEditorTitle: "عبارت منطقی را تنظیم کنید", deleteOperation: "حذف عملکرد", addNewOperation: "اضافه کردن سوال (های) جدید", expressionInvalid: "عبارت منطقی خالی یا نادرست است. لطفا آن را تضحیح کنید", noOperationError: "لطفا حداقل یک عملکرد را اضافه نمایید", operationInvalid: "لطفا مشکلات مربوط به عملکرد(های) خود را برطرف نمایید." } }, //Property names in table headers pel: { isRequired: "اجباری؟" }, //Property Editors pe: { apply: "اعمال", ok: "تایید", save: "Save", cancel: "لغو", reset: "بازنشانی", close: "بستن", delete: "حذف", add: "Add", addNew: "افزودن", addItem: "برای اضافه کردن یک آیتم کلیک کنید...", addOther: "سایر", addSelectAll: "انتخاب همه", addNone: "هیچکدام", removeAll: "حذف همه", edit: "ویرایش", back: "بازگشت بدون ذخیره", saveAndBack: "ذخیره و بازگشت", itemValueEdit: "قابل مشاهده اگر", editChoices: "ویرایش انتخاب ها", move: "جابجایی", empty: "<خالی>", notEmpty: "<ویرایش مقدار>", fastEntry: "تکمیل سریع", formEntry: "تکمیل فرم", testService: "بررسی سرویس", itemSelectorEmpty: "لطفا یک المان را انتخاب کنید ", conditionSelectQuestion: "انتخاب سوال...", conditionSelectPage: "انتخاب صفحه...", conditionSelectPanel: "انتخاب پنل...", conditionValueQuestionTitle: "لطفا مقدار را انتخاب / وارد کنید", conditionButtonAdd: "اضافه", conditionButtonReplace: "جایگزین", conditionHelp: "لطفا یک مقدار بولین توصیفی وارد کنید که صحیح یا غلط را برگرداند تا صفحه سوالات نمایش داده شود. برای مثال: {question1} = 'value1' or ({question2} * {question4} > 20 and {question3} < 5)", expressionHelp: "لطفا یک عبارت توصیفی را وارد کنید. شما ممکن است از کروشه برای دسترسی به مقدار سوالات استفاده کنید. برای مثال: {question1} = 'value1' or ({question2} = 3 and {question3} < 5)", aceEditorHelp: "برای مشاهده نکات تکمیلی ctrl+space را بفشارید", aceEditorRowTitle: "سطر فعلی", aceEditorPanelTitle: "پنل فعلی", showMore: "برای اطلاعات بیشتر لطفا سند راهنما را مطالعه کنید", conditionShowMoreUrl: "https://surveyjs.io/Documentation/LibraryParameter?id=Question¶meter=visibleIf", assistantTitle: "سوالات موجود:", cellsEmptyRowsColumns: "حداقل باید یک سطر یا ستون وجود داشته باشد.", propertyIsEmpty: "لطفا یک مقدار وارد کنید", value: "مقدار", text: "متن", rowid: "Row ID", imageLink: "لینک تصویر", columnEdit: "ویرایش ستون: {0}", itemEdit: "ویرایش آیتم: {0}", url: "URL", path: "Path", valueName: "نام مقدار", titleName: "نام عنوان", hasOther: "دارای آیتم دیگر", otherText: "سایر آیتم های متن", hasNone: "هیچ آیتمی ندارد", noneText: "هیچ آیتم متنی وجود ندارد", hasSelectAll: "همه موارد انتخاب شده است", selectAllText: "انتخاب همه آیتم های متن", choicesMin: "حداقل مقدار برای ایجاد خودکار آیتم ها", choicesMax: "حداکثر مقدار برای ایجاد خود آیتم ها", choicesStep: "تفاوت بین موارد تولید شده خودکار", name: "نام", title: "عنوان", cellType: "نوع سلول", colCount: "تعداد ستون", choicesOrder: "ترتیب گزینه را انتخاب کنید", visible: "نمایش داده شود؟", isRequired: "ضروری است؟", isAllRowRequired: "نیاز به پاسخ برای همه سطرها", requiredErrorText: "متن خطای موردنیاز", startWithNewLine: "با سطر جدید شروع شود؟", rows: "تعداد سطر", placeHolder: "نگهدارنده متن", showPreview: "پیش نمایش تصویر نشان داده شود؟", storeDataAsText: "ذخیره کردن محتوای فایل در JSON به عنوان متن", maxSize: "حداکثر سایز به بایت", imageHeight: "ارتفاع تصویر", imageWidth: "عرض تصویر", rowCount: "تعداد سطر", columnLayout: "قالب ستون ها", addRowLocation: "اضافه کردن موقعیت دکمه سطری", addRowText: "متن دکمه درج سطر", removeRowText: "متن دکمه حذف سطر", rateMin: "حداقل میزان", rateMax: "حداکثر میزان", rateStep: "میزان مراحل", minRateDescription: "توضیح حداقل امتیاز", maxRateDescription: "توضیح حداکثر امتیاز", inputType: "نوع ورودی", optionsCaption: "نوشته انتخاب ها", defaultValue: "مقدار پیش فرض", cellsDefaultRow: "متن پیش فرض سلول ها", surveyEditorTitle: "ویرایش نظرسنجی", qEditorTitle: "ویرایش سوال: {0}", maxLength: "ماکزیمم طول", //survey showTitle: "نمایش/پنهان کردن عنوان", locale: "زبان پیش فرض", simulator: "انتخاب دستگاه", landscapeOrientation: "Landscape", mode: "حالت (ویرایش/خواندن)", clearInvisibleValues: "پاکسازی مقادیر پنهان", cookieName: "نام کوکی (به منظور جلوگیری از اجرای دوباره نظرسنجی)", sendResultOnPageNext: "ارسال نتایج نظرسنجی در صفحه بعدی", storeOthersAsComment: "ذخیره مقدار 'سایر' در فیلد جداگانه", showPageTitles: "نمایش عنوان صفحات", showPageNumbers: "نمایش شماره صفحات", pagePrevText: "متن دکمه صفحه قبلی", pageNextText: "متن دکمه صفحه بعدی", completeText: "متن دکمه تکمیل نظرسنجی", startSurveyText: "متن دکمه شروع نظرسنجی", showNavigationButtons: "نمایش دکمه های ناوبری (ناوبری پیش فرض)", showPrevButton: "نمایش دکمه قبلی (کاربر ممکن است به صفحه قبل برگردد)", firstPageIsStarted: "صفحه اول در نظرسنجی نقطه آغازین آن است.", showCompletedPage: "نمایش صفحه اتمام نظرسنجی در پایان (completedHtml)", goNextPageAutomatic: "با پاسخگویی به تمام سوالات، به صورت اتوماتیک به صفحه بعد برود", showProgressBar: "نمایش نشانگر پیشرفت", questionTitleLocation: "محل عنوان سوال", requiredText: "سوالات نشان دار اجباری هستند", questionStartIndex: "نمایه شروع سوالات (۱،۲ یا a و b)", showQuestionNumbers: "نمایش شماره های سوالات", questionTitleTemplate: "قالب عنوان سوال، به صورت پیش فرض: '{no}. {require} {title}'", questionErrorLocation: "محل خطای سوال", focusFirstQuestionAutomatic: "تمرکز بر روی اولین سوال با تغییر صفحه", questionsOrder: "ترتیب المان ها در صفحه", maxTimeToFinish: "نهایت زمان برای اتمام نظرسنجی", maxTimeToFinishPage: "نهایت زمان برای اتمام این صفحه نظرسنجی", showTimerPanel: "نمایش پنل زمان سنج", showTimerPanelMode: "نمایش حالت پنل زمان سنج", renderMode: "حالت رندر", allowAddPanel: "اجازه افزودن پنل", allowRemovePanel: "اجازه حذف پنل", panelAddText: "متن افزودن پنل", panelRemoveText: "متن حذف پنل", isSinglePage: "نمایش تمام المان ها در یک صفحه", html: "Html", expression: "عبارت", minValue: "حداقل مقدار", maxValue: "حداکثر مقدار", minLength: "حداقل طول", allowDigits: "امکان ورود اعداد", minCount: "حداقل تعداد ", maxCount: "حداکثر مقدار", regex: "فرمت صحیح عبارت ", totalText: "متن کامل", totalType: "نوع کامل", totalExpression: "عبارت کامل", totalDisplayStyle: "سبک نمایش کل", totalCurrency: "مجموع ارز", totalFormat: "مجموع فرمت", tabs: { general: "عمومی", fileOptions: "انتخاب ها", html: "ویرایشگر HTML", columns: "ستون ها", rows: "سطرها", choices: "انتخاب ها", items: "آیتم ها", visibleIf: "نمایش در صورت", enableIf: "فعال اگر", requiredIf: "مورد نیاز ااگر", rateValues: "مقادیر رتبه بندی", choicesByUrl: "انتخاب ها از وب", matrixChoices: "انتخاب های پیشفرض", multipleTextItems: "فیلدهای متنی", validators: "اعتبارسنجی ها", navigation: "ناوبری", question: "سوال", completedHtml: "HTML صفحه تکمیل نظرسنجی", completedHtmlOnCondition: "Html در شرط کامل شد", loadingHtml: "HTML بارگزاری", timer: "زمان سنج/کوئیز", calculatedValues: "مقادیر محاسبه شد", triggers: "اجرا کننده", templateTitle: "عنوان قالب", totals: "جمع کل" }, editProperty: "ویرایش خصوصیت '{0}'", items: "[ آیتم ها: {0} ]", enterNewValue: "لطفا یک مقدار وارد کنید", noquestions: "سوالی در پرسشنامه درج نشده", createtrigger: "اجرا کننده ای بسازید", triggerOn: "در ", triggerMakePagesVisible: "صفحات را قابل نمایش کن:", triggerMakeQuestionsVisible: "سوالات را قابل نمایش کن:", triggerCompleteText: "پرسشنامه را تکمیل کن اگر موفق بود.", triggerNotSet: "اجرا کننده تنظیم نشده.", triggerRunIf: "اجرا در صورت", triggerSetToName: "تعییر مقدار از: ", triggerFromName: "کپی مقدار از: ", triggerRunExpression: "اجرای این عبارت", triggerSetValue: "به: ", triggerIsVariable: "عدم درج متغییر در نتایج پرسشنامه", triggerRunExpressionEmpty: "لطفا عبارت معتبری وارد نمایید" }, //Property values pv: { true: "صحیح", false: "غلط", inherit: "ارث بری", show: "آشکار", hide: "پنهان", default: "پیش فرض", initial: "اولیه", random: "تصادفی", collapsed: "جمع شده", expanded: "باز شده", none: "هیچ کدام", asc: "صعودی", desc: "نزولی", indeterminate: "نامشخص", decimal: "اعشاری", currency: "ارز", percent: "درصد", firstExpanded: "firstExpanded", off: "خاموش", onPanel: "روی پنل", onSurvey: "روی نظرسنجی", list: "لیست", progressTop: "progressTop", progressBottom: "progressBottom", progressTopBottom: "progressTopBottom", horizontal: "افقی", vertical: "عمودی", top: "بالا", bottom: "پایین", topBottom: "بالا و پایین", left: "چپ", color: "رنگ", date: "تاریخ", datetime: "تاریخ و ساعت", "datetime-local": "تاریخ و سوال پیش فرض", email: "ایمیل", month: "ماه", number: "عدد", password: "رمزعبور", range: "دامنه", tel: "تلفن", text: "متن", time: "زمان", url: "url", week: "هفته", hidden: "مخفی", on: "روشن", onPage: "روی صفحه", edit: "ویرایش", display: "نمایش", onComplete: "به محض تمام شدن", onHidden: "به محض مخفی شدن", all: "تمام", page: "صفحه", survey: "نظرسنجی", onNextPage: "به محض صفحه بعدی", onValueChanged: "به محض تغییر مقدار" }, //Operators op: { empty: "خالی باشد", notempty: "خالی نباشد", equal: "مساوی باشد", notequal: "مساوی نباشد", contains: "شامل", notcontains: "شامل نباشد", anyof: "هرکدام", allof: "همه", greater: "بزرگتر", less: "کوچکتر", greaterorequal: "بزرگتر یا مساوی", lessorequal: "کوچکتر یا مساوی" }, //Embed window ew: { angular: "استفاده از نسخه Angular", jquery: "استفاده از نسخه jQuery", knockout: "استفاده از نسخه ناک اوت", react: "استفاده از نسخه React", vue: "استفاده از نسخه Vue", bootstrap: "برای فریم ورک بوتسترپ", standard: "بدون بوتسترپ", showOnPage: "نمایش نظرسنجی در یک صفحه", showInWindow: "نمایش نظرسنجی در یک پنجره", loadFromServer: "بارگزاری JSON از سرور", titleScript: "اسکریپت و شیوه نمایش", titleHtml: "HTML", titleJavaScript: "جاوااسکریپت" }, //Test Survey ts: { selectPage: "صفحه ای را برای آزمایش انتخاب کنید:", showInvisibleElements: "نمایش المان های مخفی" }, validators: { answercountvalidator: "تعداد پاسخ", emailvalidator: "ایمیل", numericvalidator: "عدد", regexvalidator: "regex", textvalidator: "متن" }, triggers: { completetrigger: "تکمیل نظرسنجی", setvaluetrigger: "تنظیم مقدار", copyvaluetrigger: "کپی مقدار", skiptrigger: "رد کردن سوال ", runexpressiontrigger: "اجرای عبارت", visibletrigger: "تغییر وضعیت دیده شدن" }, //Properties p: { name: "نام", title: { name: "عنوان", title: "اگر خالی باشد مانند نام درج می شود" }, survey_title: { name: "عنوان", title: "در تمام صفحات دیده می شود" }, page_title: { name: "عنوان", title: "عنوان صفحه" }, navigationButtonsVisibility: "پدیداری دکمه های ناوبری", questionsOrder: "ترتیب سوالات", maxTimeToFinish: "حداکثر زمان برای تکمیل", visible: "آشکار", visibleIf: "آشکار اگر", questionTitleLocation: "موقعیت عنوان سوال", description: "توضیحات", state: "وضعیت", isRequired: "اجباری؟", requiredIf: "اجبار اگر؟", indent: "indent", requiredErrorText: "متن خطای اجباری", startWithNewLine: "شروع با خط جدید ", innerIndent: "تو رفتگی داخلی", page: "صفحه", width: "عرض", commentText: "متن نظر", valueName: "نام مقدار", enableIf: "فعال اگر", defaultValue: "مقدار پیش فرض", correctAnswer: "پاسخ صحیح", readOnly: "فقط خوانش", validators: "اعتبارسنج ها", titleLocation: "titleLocation", hasComment: "نظر دارد؟", hasOther: "سایر دارد؟", choices: "گزینه ها", choicesOrder: "ترتیب گزینه ها", choicesByUrl: "گزینه ها با لینک", otherText: "متن سایر", otherErrorText: "متن خطای سایر", storeOthersAsComment: "ذخیره سایر به صورت نظر", label: "برچسب", showTitle: "نامیش عنوان", valueTrue: "valueTrue", valueFalse: "valueFalse", cols: "ستون ها", rows: "سطر ها", placeHolder: "placeHolder", optionsCaption: "optionsCaption", expression: "expression", format: "فرمت", displayStyle: "سبک نمایش", currency: "ارز", useGrouping: "useGrouping", showPreview: "پیش نمایش", allowMultiple: "اجازه چند انتخابی", imageHeight: "طول عکس", imageWidth: "عرض عکس", storeDataAsText: "ذخیره داده به صورت متنی", maxSize: "نهایت حجم", html: "html", columns: "ستون ها", cells: "سلول ها", isAllRowRequired: "آیا تمام سطرها اجباری اند؟", horizontalScroll: "اسکرول افقی", cellType: "نوع سلول", columnsLayout: "columnsLayout", columnColCount: "columnColCount", columnMinWidth: "columnMinWidth", rowCount: "تعداد سطر", minRowCount: "حداقل تعداد سطر", maxRowCount: "حداکثر تعداد سطر", keyName: "keyName", keyDuplicationError: "keyDuplicationError", confirmDelete: "تاییدیه حذف", confirmDeleteText: "متن تاییدیه حذف", addRowLocation: "addRowLocation", addRowText: "افزودن متن سطر", removeRowText: "حذف متن سطر", items: "items", itemSize: "itemSize", colCount: "colCount", templateTitle: "templateTitle", templateDescription: "templateDescription", allowAddPanel: "allowAddPanel", allowRemovePanel: "allowRemovePanel", panelCount: "panelCount", minPanelCount: "minPanelCount", maxPanelCount: "maxPanelCount", panelsState: "panelsState", panelAddText: "panelAddText", panelRemoveText: "panelRemoveText", panelPrevText: "panelPrevText", panelNextText: "panelNextText", showQuestionNumbers: "showQuestionNumbers", showRangeInProgress: "showRangeInProgress", renderMode: "renderMode", templateTitleLocation: "templateTitleLocation", rateValues: "rateValues", rateMin: "rateMin", rateMax: "rateMax", rateStep: "rateStep", minRateDescription: "minRateDescription", maxRateDescription: "maxRateDescription", inputType: "inputType", size: "حجم", locale: "زبان", focusFirstQuestionAutomatic: "focusFirstQuestionAutomatic", completedHtml: "completedHtml", completedBeforeHtml: "completedBeforeHtml", loadingHtml: "loadingHtml", triggers: "triggers", cookieName: "cookieName", sendResultOnPageNext: "sendResultOnPageNext", showNavigationButtons: "showNavigationButtons", showPrevButton: "showPrevButton", showPageTitles: "showPageTitles", showCompletedPage: "showCompletedPage", showPageNumbers: "showPageNumbers", questionErrorLocation: "questionErrorLocation", showProgressBar: "showProgressBar", mode: "mode", goNextPageAutomatic: "goNextPageAutomatic", checkErrorsMode: "checkErrorsMode", clearInvisibleValues: "clearInvisibleValues", startSurveyText: "startSurveyText", pagePrevText: "pagePrevText", pageNextText: "pageNextText", completeText: "completeText", requiredText: "requiredText", questionStartIndex: "questionStartIndex", questionTitleTemplate: "questionTitleTemplate", firstPageIsStarted: "firstPageIsStarted", isSinglePage: "isSinglePage", maxTimeToFinishPage: "maxTimeToFinishPage", showTimerPanel: "showTimerPanel", showTimerPanelMode: "showTimerPanelMode", defaultPanelValue: "defaultPanelValue", defaultRowValue: "defaultRowValue", hasNone: "hasNone", noneText: "noneText", text: "متن", minValue: "حداقل مقدار", maxValue: "حداکثر مقدار", minLength: "حداقل طول", maxLength: "حداکثر طول", allowDigits: "اجازه عدد", minCount: "حداقل تعداد", maxCount: "حداکثر تعداد", regex: "regular expression" } }; __WEBPACK_IMPORTED_MODULE_0__editorLocalization__["a" /* editorLocalization */].locales["fa"] = persianStrings; /***/ }), /* 64 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__editorLocalization__ = __webpack_require__(0); var polishStrings = { //survey templates survey: { edit: "Edytuj", dropQuestion: "Przeciągnij pytanie.", copy: "Kopiuj", addToToolbox: "Dodaj do palety", deletePanel: "Usuń panel", deleteQuestion: "Usuń pytanie", convertTo: "Konwertuj na" }, //questionTypes qt: { checkbox: "Wielokrotny wybór", comment: "Komentarz", dropdown: "Lista wyboru", file: "Plik", html: "Html", matrix: "Macierz (jednokrotny wybór)", matrixdropdown: "Matrix (wielokrotny wybór)", matrixdynamic: "Matrix (dynamiczne wiersze)", multipletext: "Wiele linii tekstu", panel: "Panel", paneldynamic: "Panel (dynamiczne panele)", radiogroup: "Jednokrotny wybór", rating: "Ocena", text: "Pojedyncza odpowiedź", boolean: "Prawda/Fałsz", expression: "Wyrażenie" }, //Strings in Editor ed: { survey: "Ankieta", Survey: "Ankieta", editSurvey: "Edytuj ankietę", addNewPage: "Dodaj nową sekcję", deletePage: "Usuń sekcję", editPage: "Edytuj sekcję", newPageName: "sekcja", newQuestionName: "pytanie", newPanelName: "panel", testSurvey: "Testuj ankietę", testSurveyAgain: "Testuj ponownie", testSurveyWidth: "Szerokość ankiety: ", embedSurvey: "Embed Survey", saveSurvey: "Zapisz ankietę", designer: "Projektant ankiety", jsonEditor: "JSON Editor", undo: "Cofnij", redo: "Ponów", options: "Opcje", generateValidJSON: "Generate Valid JSON", generateReadableJSON: "Generate Readable JSON", toolbox: "Paleta", delSelObject: "Usuń wybrany element", correctJSON: "Please correct JSON.", surveyResults: "Wynik ankiety: ", modified: "Zmodyfikowana", saving: "Trwa zapis", saved: "Zapisano" }, //Property names in table headers pel: { isRequired: "Wymagane?" }, //Property Editors pe: { apply: "Zastosuj", ok: "OK", cancel: "Anuluj", reset: "Resetuj", close: "Zamknij", delete: "Usuń", addNew: "Dodaj nową", removeAll: "Usuń wszystkie", edit: "Edytuj", empty: "<pusty>", fastEntry: "Szybkie wprowadzanie", formEntry: "Formularz", testService: "Testuj usługę", conditionHelp: "Podaj wyrażenie, które zwróci wartość prawda/fałsz. Jeśli chcesz, aby sekcja lub pytanie pozostały widoczne - powinno zwrócić prawdę. Przykład: {pytanie1} = 'wartość1' or ({pytanie2} * {pytanie4} > 20 and {pytanie3} < 5)", expressionHelp: "Please enter an expression. You may use curly brackets to get access to the question values: '{question1} + {question2}', '({price}*{quantity}) * (100 - {discount})'", aceEditorHelp: "Press ctrl+space to get expression completion hint", aceEditorRowTitle: "Current row", aceEditorPanelTitle: "Current panel", showMore: "For more details please check the documentation", assistantTitle: "Available questions:", propertyIsEmpty: "Podaj wartość", value: "Wartość", text: "Etykieta", columnEdit: "Edit column: {0}", itemEdit: "Edit item: {0}", url: "URL", path: "Path", valueName: "Value name", titleName: "Title name", hasOther: "Czy możliwa własna odpowiedź", otherText: "Other item text", name: "Nazwa", title: "Etykieta", cellType: "Typ komórki", colCount: "Liczba kolumn", choicesOrder: "Kolejność odpowiedzi", visible: "Czy widoczne?", isRequired: "Czy wymagalne?", startWithNewLine: "Czy rozpoczyna się nową linią?", rows: "Liczba wierszy", placeHolder: "Input place holder", showPreview: "Is image preview shown?", storeDataAsText: "Store file content in JSON result as text", maxSize: "Maximum file size in bytes", imageHeight: "Image height", imageWidth: "Image width", rowCount: "Row count", addRowText: "Add row button text", removeRowText: "Remove row button text", minRateDescription: "Opis najniższej oceny", maxRateDescription: "Opis najwyższej oceny", inputType: "Input type", optionsCaption: "Options caption", defaultValue: "Default value", surveyEditorTitle: "Edytuj ankietę", qEditorTitle: "Edytuj: {0}", //survey showTitle: "Pokaż/ukryj tytuł", locale: "Domyślny język", mode: "Tryb (edycja/podgląd)", clearInvisibleValues: "Usuń niewidoczne odpowiedzi", cookieName: "Cookie name (to disable run survey two times locally)", sendResultOnPageNext: "Send survey results on page next", storeOthersAsComment: "Store 'others' value in separate field", showPageTitles: "Show page titles", showPageNumbers: "Show page numbers", pagePrevText: "Page previous button text", pageNextText: "Page next button text", completeText: "Complete button text", startSurveyText: "Start button text", showNavigationButtons: "Show navigation buttons (default navigation)", showPrevButton: "Show previous button (user may return on previous page)", firstPageIsStarted: "The first page in the survey is a started page.", showCompletedPage: "Show the completed page at the end (completedHtml)", goNextPageAutomatic: "On answering all questions, go to the next page automatically", showProgressBar: "Show progress bar", questionTitleLocation: "Question title location", requiredText: "The question required symbol(s)", questionStartIndex: "Question start index (1, 2 or 'A', 'a')", showQuestionNumbers: "Show question numbers", questionTitleTemplate: "Question title template, default is: '{no}. {require} {title}'", questionErrorLocation: "Question error location", focusFirstQuestionAutomatic: "Focus first question on changing the page", questionsOrder: "Elements order on the page", maxTimeToFinish: "Maximum time to finish the survey", maxTimeToFinishPage: "Maximum time to finish a page in the survey", showTimerPanel: "Show timer panel", showTimerPanelMode: "Show timer panel mode", renderMode: "Render mode", allowAddPanel: "Allow adding a panel", allowRemovePanel: "Allow removing the panel", panelAddText: "Adding panel text", panelRemoveText: "Removing panel text", isSinglePage: "Show all elements on one page", tabs: { general: "Ogólne", fileOptions: "Options", html: "Html Editor", columns: "Kolumny", rows: "Wiersze", choices: "Odpowiedzi", visibleIf: "Widoczne jeśli", enableIf: "Enable If", rateValues: "Wartość oceny", choicesByUrl: "Odpowiedzi z webserwisu", matrixChoices: "Default Choices", multipleTextItems: "Text Inputs", validators: "Validators", navigation: "Navigation", question: "Question", completedHtml: "Completed Html", loadingHtml: "Loading Html", timer: "Timer/Quiz", triggers: "Triggers", templateTitle: "Template title" }, editProperty: "Edit property '{0}'", items: "[ Items: {0} ]", enterNewValue: "Please, enter the value.", noquestions: "There is no any question in the survey.", createtrigger: "Please create a trigger", triggerOn: "On ", triggerMakePagesVisible: "Make pages visible:", triggerMakeQuestionsVisible: "Make elements visible:", triggerCompleteText: "Complete the survey if succeed.", triggerNotSet: "The trigger is not set", triggerRunIf: "Run if", triggerSetToName: "Change value of: ", triggerSetValue: "to: ", triggerIsVariable: "Do not put the variable into the survey result." }, //Property values pv: { true: "prawda", false: "fałsz" }, //Operators op: { empty: "is empty", notempty: "is not empty", equal: "equals", notequal: "not equals", contains: "contains", notcontains: "not contains", greater: "greater", less: "less", greaterorequal: "greater or equals", lessorequal: "Less or Equals" }, //Embed window ew: { angular: "Use Angular version", jquery: "Use jQuery version", knockout: "Use Knockout version", react: "Use React version", vue: "Use Vue version", bootstrap: "For bootstrap framework", standard: "No bootstrap", showOnPage: "Show survey on a page", showInWindow: "Show survey in a window", loadFromServer: "Load Survey JSON from server", titleScript: "Scripts and styles", titleHtml: "HTML", titleJavaScript: "JavaScript" }, //Test Survey ts: { selectPage: "Wybierz stronę, aby ją przetestować:" }, validators: { answercountvalidator: "answer count", emailvalidator: "e-mail", numericvalidator: "numeric", regexvalidator: "regex", textvalidator: "text" }, triggers: { completetrigger: "complete survey", setvaluetrigger: "set value", visibletrigger: "change visibility" }, //Properties p: { name: "nazwa", title: { name: "tytuł", title: "Pozostaw pusty, jeśli ma być taki sam, jak 'Nazwa'" }, page_title: { name: "tytuł", title: "Tytuł sekcji" } } }; __WEBPACK_IMPORTED_MODULE_0__editorLocalization__["a" /* editorLocalization */].locales["pl"] = polishStrings; /***/ }), /* 65 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__editorLocalization__ = __webpack_require__(0); var portugueseTranslation = { //survey templates survey: { edit: "Editar", dropQuestion: "Por favor arraste uma pergunta aqui.", copy: "Copiar", addToToolbox: "Adicionar à toolbox", deletePanel: "Remover Painel", deleteQuestion: "Remover Pergunta", convertTo: "Converter para", drag: "Arrastar elemento" }, //questionTypes qt: { default: "Default", checkbox: "Checkbox", comment: "Comentário", imagepicker: "Selecionador de imagem", dropdown: "Dropdown", file: "Arquivo", html: "Html", matrix: "Matriz (opção única)", matrixdropdown: "Matriz (multiplas opções)", matrixdynamic: "Matriz (linhas dinâmicas)", multipletext: "Texto múltiplo", panel: "Painel", paneldynamic: "Painel (painéis dinâmicos)", radiogroup: "Radiogroup", rating: "Rating", text: "Texto único", boolean: "Boleano", expression: "Expressão" }, //Strings in Editor ed: { defaultLocale: "Default ({0})", survey: "Pesquisa", settings: "Configurações da Pesquisa", editSurvey: "Editar Pesquisa", addNewPage: "Adicionar Nova Página", moveRight: "Role para direita", moveLeft: "Role para esquerda", deletePage: "Deletar Página", editPage: "Editar Página", edit: "Editar", newPageName: "página", newQuestionName: "pergunta", newPanelName: "painel", testSurvey: "Testar pesquisa", testSurveyAgain: "Testar pesquisa novamente", testSurveyWidth: "Tamanho do pesquisa: ", embedSurvey: "Incorporar Pesquisa", translation: "Tradução", saveSurvey: "Salvar Pesquisa", designer: "Designer de Pesquisa", jsonEditor: "Editor de JSON", undo: "Desfazer", redo: "Refazer", options: "Opções", generateValidJSON: "Gerar JSON válido", generateReadableJSON: "Gerar JSON legível", toolbox: "Toolbox", toolboxGeneralCategory: "Geral", delSelObject: "Apagar objeto selecionado", editSelObject: "Editar objeto selecionado", correctJSON: "Por favor corrija o JSON.", surveyResults: "Resultado da pesquisa: ", surveyResultsTable: "Como Tabela", surveyResultsJson: "Como JSON", resultsTitle: "Título da Pergunta", resultsName: "Nome da Pergunta", resultsValue: "Valor da Resposta", resultsDisplayValue: "Mostrar Valor", modified: "Modificado", saving: "Salvando", saved: "Salvo", saveError: "Erro! Conteúdo do editor não foi salvo.", translationAddLanguage: "Selecione o idioma para traduzir", translationShowAllStrings: "Mostrar todas strings", translationShowAllPages: "Mostrar todas páginas", translationNoStrings: "Nenhuma string para traduzir. Por favor, altere o filtro.", translationExportToSCVButton: "Exportar para CSV", translationImportFromSCVButton: "Importar de CSV", translationMergeLocaleWithDefault: "Combinar {0} com o idioma default" }, //Property names in table headers pel: { isRequired: "Obrigatório?" }, //Property Editors pe: { apply: "Aplicar", ok: "OK", cancel: "Cancelar", reset: "Limpar", close: "Fechar", delete: "Apagar", addNew: "Adicionar Novo", addItem: "Clique para adicionar um item...", removeAll: "Remover Todos", edit: "Editar", itemValueEdit: "Visível Se", editChoices: "Editar Opções", move: "Mover", empty: "<vazio>", notEmpty: "<editar valor>", fastEntry: "Entrada Rápida", formEntry: "Entrada com formulário", testService: "Testar o serviço", conditionSelectQuestion: "Selecionar pergunta...", conditionValueQuestionTitle: "Por favor, entre/selecione o valor", conditionButtonAdd: "Add", conditionButtonReplace: "Substituir", conditionHelp: "Por favor, entre com uma expressão boleana. Deve retornar verdadeiro para manter a pergunta/página visível. Por exemplo: {´pergunta1} = 'valor1' ou ({pergunta2} * {pergunta4} > 20 e {pergunta3} < 5)", expressionHelp: "Por favor informe uma expressão boleana. Ela deve retornar verdadeiro para manter a pergunta/página visível. Por exemplo: {´pergunta1} = 'valor1' or ({pergunta2} = 3 and {pergunta3} < 5)", aceEditorHelp: "Pressione ctrl+space para autocompletar", aceEditorRowTitle: "Linha atual", aceEditorPanelTitle: "Painel atual", showMore: "Para mais detalhes, por favor visite a documentação", conditionShowMoreUrl: "https://surveyjs.io/Documentation/LibraryParameter?id=Question¶meter=visibleIf", assistantTitle: "Perguntas disponíveis:", cellsEmptyRowsColumns: "Deve haver ao menos uma coluna ou linha", propertyIsEmpty: "Por favor informe um valor na propriedade", value: "Valor", text: "Texto", rowid: "ID da Linha", imageLink: "Link da Imagem", columnEdit: "Editar coluna: {0}", itemEdit: "Editar item: {0}", url: "URL", path: "Caminho", valueName: "Nome do valor", titleName: "Nome do título", hasOther: "Tem item 'outros'", otherText: "Texto do item 'outros'", name: "Nome", title: "Título", cellType: "Tipo de célula", colCount: "Contagem de células", choicesOrder: "Selecione a ordem das alternativas", visible: "É visível?", isRequired: "É obrigatório?", startWithNewLine: "Começa com uma nova linha?", rows: "Contagem de linhas", placeHolder: "Texto de referência", showPreview: "Mostra pré-visualização de imagem?", storeDataAsText: "Gravar conteúdo de arquivo no resultado JSON como texto", maxSize: "Tamanho máximo de arquivo em bytes", imageHeight: "Altura da imagem", imageWidth: "Largura da imagem", rowCount: "Contagem de linhas", columnLayout: "Layout das colunas", addRowLocation: "Localização do botão de adicionar linha", addRowText: "Texto do botão para adicionar linhas", removeRowText: "Texto do botão para remover linhas", minRateDescription: "Descrição de qualificação mínima", maxRateDescription: "Descrição de qualificação máxima", inputType: "Tipo de entrada", optionsCaption: "Título de opção", defaultValue: "Valor default", cellsDefaultRow: "Texto default das células", surveyEditorTitle: "Editar configurações da pesquisa", qEditorTitle: "Editar pergunta: {0}", maxLength: "Tamanho máximo", //survey showTitle: "Mostrar/ocultar título", locale: "Idioma default", mode: "Modo (editável/somente leitura)", clearInvisibleValues: "Limpar valores invisíveis", cookieName: "Nome do cookie (para desativar rode a pesquisa duas vezes localmente)", sendResultOnPageNext: "Enviar resultado da pesquisa na página seguinte", storeOthersAsComment: "Armazenar 'outros' valores em um campo separado", showPageTitles: "Mostrar título da página", showPageNumbers: "Mostrar número da página", pagePrevText: "Texto para botão de página anterior", pageNextText: "Texto para botão de página seguinte", completeText: "Texto para botão de completar", startSurveyText: "Texto para botão de começar", showNavigationButtons: "Mostrar botões de navegação (navegação default)", showPrevButton: "Mostrar botão de voltar (usuário pode retornar para página anterior)", firstPageIsStarted: "Primeira página da pesquisa é a página de início.", showCompletedPage: "Mostrar a página de conclusão no final (completedHtml)", goNextPageAutomatic: "Ao responder todas as perguntas, ir automaticamente para a próxima página", showProgressBar: "Mostrar barra de progresso", questionTitleLocation: "Localização do título da pergunta", requiredText: "Símbolo(s) para perguntas obrigatórias", questionStartIndex: "Index das perguntas (1, 2 or 'A', 'a')", showQuestionNumbers: "Mostrar número das perguntas", questionTitleTemplate: "Template do título da pergunta, default é: '{no}. {obrigatório} {título}'", questionErrorLocation: "Localização do erro da pergunta", focusFirstQuestionAutomatic: "Focar automaticamente na primeira pergunta ao trocar de página", questionsOrder: "Ordenar elementos na página", maxTimeToFinish: "Tempo máximo para finalizar pesquisa", maxTimeToFinishPage: "Tempo máximo para finalizar página da pesquisa", showTimerPanel: "Mostrar o painel de cronômetro", showTimerPanelMode: "Mostrar painel de modo de cronômetro", renderMode: "Modo de renderização", allowAddPanel: "Permitir adicionar painel", allowRemovePanel: "Permitir remover painel", panelAddText: "Texto de adicionar painel", panelRemoveText: "Texto de remover painel", isSinglePage: "Mostrar todos elementos em uma página", tabs: { general: "Geral", fileOptions: "Opções", html: "Editor Html", columns: "Colunas", rows: "Linhas", choices: "Opções", items: "Itens", visibleIf: "Visível se", enableIf: "Habilitar se", requiredIf: "Obrigatório se", rateValues: "Valores de qualificação", choicesByUrl: "Opções com origem na Web", matrixChoices: "Opções padrão", multipleTextItems: "Entradas de texto", validators: "Validadores", navigation: "Navegação", question: "Pergunta", completedHtml: "Completo Html", loadingHtml: "Carregando Html", timer: "Cronômetro/Quiz", triggers: "Triggers", templateTitle: "Título do template" }, editProperty: "Editar propriedade '{0}'", items: "[ Items: {0} ]", enterNewValue: "Por favor, informe o valor.", noquestions: "Não há nenhuma pergunta na pesquisa.", createtrigger: "Por favor, crie um gatilho", triggerOn: "Ligado ", triggerMakePagesVisible: "Tornar páginas visíveis:", triggerMakeQuestionsVisible: "Tornar perguntas visíves:", triggerCompleteText: "Completar a pesquisa se obtiver êxito.", triggerNotSet: "O gatilho não está definido", triggerRunIf: "Executar se", triggerSetToName: "Mudar o valor de: ", triggerFromName: "Copiar valor de: ", triggerRunExpression: "Rodar essa expressão:", triggerSetValue: "para: ", triggerIsVariable: "Não colocar a variável no resultado da pesquisa." }, //Property values pv: { true: "verdadeiro", false: "falso", inherit: "inherit", show: "mostrar", hide: "ocultar", default: "default", initial: "inicial", random: "aleatório", collapsed: "colapsado", expanded: "expandido", none: "nenhum", asc: "ascendente", desc: "descendente", indeterminate: "indeterminado", decimal: "decimal", currency: "moeda", percent: "percentagem", firstExpanded: "primeiro expandido", off: "desligado", onPanel: "no painel", onSurvey: "na pesquisa", list: "lista", progressTop: "progresso superior", progressBottom: "progresso inferior", progressTopBottom: "progresso superior inferior", horizontal: "horizontal", vertical: "vertical", top: "superior", bottom: "inferior", topBottom: "superior and bottom", left: "esquerda", color: "cor", date: "data", datetime: "data e hora", "datetime-local": "data e hora - local", email: "email", month: "mês", number: "número", password: "senha", range: "intervalo", tel: "tel", text: "texto", time: "hora", url: "url", week: "semana", hidden: "oculto", on: "ligado", onPage: "na página", edit: "editar", display: "mostrar", onComplete: "ao completar", onHidden: "ao ocultar", all: "todos", page: "página", survey: "pesquisa", onNextPage: "na página seguinte", onValueChanged: "ao mudar valor" }, //Operators op: { empty: "está vazio", notempty: "não está vazio", equal: "é igual", notequal: "não é igual", contains: "contém", notcontains: "não contém", greater: "maior", less: "menor", greaterorequal: "maior ou igual", lessorequal: "menor ou igual" }, //Embed window ew: { angular: "Usar versão Angular", jquery: "Usar versão jQuery", knockout: "Usar versão Knockout", react: "Usar versão React", vue: "Usar versão Vue", bootstrap: "Para framework bootstrap", standard: "Sem bootstrap", showOnPage: "Mostrar pesquisa em uma página", showInWindow: "Mostrar pesquisa em uma janela", loadFromServer: "Carregar JSON da pesquisa de um servidor", titleScript: "Scripts e estilos", titleHtml: "HTML", titleJavaScript: "JavaScript" }, //Test Survey ts: { selectPage: "Selecione a página para testar:", showInvisibleElements: "Mostrar elementos invisíveis" }, validators: { answercountvalidator: "contador de respostas", emailvalidator: "e-mail", expressionvalidator: "expressão", numericvalidator: "numérico", regexvalidator: "regex", textvalidator: "texto" }, triggers: { completetrigger: "completar pesquisa", setvaluetrigger: "definir valor", copyvaluetrigger: "copiar valor", runexpressiontrigger: "rodar expressão", visibletrigger: "alterar visibilidade" }, //Properties p: { name: "nome", title: { name: "título", title: "Deixar vazio se for o mesmo que 'Nome'" }, navigationButtonsVisibility: "Visibilidade dos botões de navegação", questionsOrder: "Ordenar elementos na página", maxTimeToFinish: "Tempo máximo para finalizar pesquisa", visible: "Visível?", visibleIf: "Visível se", questionTitleLocation: "Localização do título da pergunta", description: "Descrição", state: "Estado", isRequired: "Obrigatório?", requiredIf: "Obrigatório se", indent: "Indentação", requiredErrorText: "Texto de erro para obrigatório", startWithNewLine: "Começar com uma nova linha", innerIndent: "Indentação interna", page: "Página", width: "Largura", commentText: "Texto do comentário", valueName: "Nome do valor", enableIf: "Habilitar se", defaultValue: "Valor default", correctAnswer: "Resposta correta", readOnly: "Somente leitura", validators: "Validadores", titleLocation: "Localização do título", hasComment: "Tem comentário", hasOther: "Tem item 'outros'", choices: "Opções", choicesOrder: "Selecione a ordem das alternativas", choicesByUrl: "Opções com origem na Web", otherText: "Texto do item 'outros'", otherErrorText: "Texto de erro da opção 'outros'", storeOthersAsComment: "Armazenar 'outros' valores em um campo separado", label: "Label", showTitle: "Mostrar título", valueTrue: "Valor verdadeiro", valueFalse: "Valor falso", cols: "Colunas", rows: "Linhas", placeHolder: "placeholder", optionsCaption: "Título das opções", expression: "Expressão", format: "Formato", displayStyle: "Mostrar estilo", currency: "Moeda", useGrouping: "Usar agrupamento", showPreview: "Mostrar preview", allowMultiple: "Permitir múltiplos", imageHeight: "Altura da imagem", imageWidth: "Largura da imagem", storeDataAsText: "Armazenar dados como texto", maxSize: "Tamanho máximo", html: "html", columns: "Colunas", cells: "Células", isAllRowRequired: "Todas linhas são obrigatórias", horizontalScroll: "Scroll horizontal", cellType: "Tipo de célula", columnsLayout: "Layout de colunas", columnColCount: "Contador de células de coluna", columnMinWidth: "Largura mínima da coluna", rowCount: "Contagem de linhas", minRowCount: "Contagem de linhas mínima", maxRowCount: "Contagem de linhas máxima", keyName: "Nome da chave", keyDuplicationError: "Erro de chave duplicada", confirmDelete: "Confirmar deleção", confirmDeleteText: "Texto de confirmar deleção", addRowLocation: "Localização do botão de adicionar linha", addRowText: "Texto do botão para adicionar linhas", removeRowText: "Texto do botão para remover linhas", items: "Itens", itemSize: "Tamanho do item", colCount: "Contagem de células", templateTitle: "Título do template", templateDescription: "Descrição do template", allowAddPanel: "Permitir adicionar painel", allowRemovePanel: "Permitir remover painel", panelCount: "Contador do painel", minPanelCount: "Contador do painel mínimo", maxPanelCount: "Contador do painel máximo", panelsState: "Estado dos painéis", panelAddText: "Texto de adicionar painel", panelRemoveText: "Texto de remover painel", panelPrevText: "Texto do painel anterior", panelNextText: "Texto do próximo painel", showQuestionNumbers: "Mostrar número das perguntas", showRangeInProgress: "showRangeInProgress", renderMode: "Modo de renderização", templateTitleLocation: "Localização do título do template", rateValues: "Valores de qualificação", rateMin: "Qualificação mínima", rateMax: "Qualificação máxima", rateStep: "Incremento da qualificação", minRateDescription: "Descrição de qualificação mínima", maxRateDescription: "Descrição de qualificação máxima", inputType: "Tipo de entrada", size: "Tamanho", locale: "Localidade", focusFirstQuestionAutomatic: "Focar automaticamente na primeira pergunta", completedHtml: "Completo Html", completedBeforeHtml: "Completo Html antes", loadingHtml: "Carregando Html", triggers: "Triggers", cookieName: "Nome do cookie", sendResultOnPageNext: "Enviar resultado da pesquisa na página seguinte", showNavigationButtons: "Mostrar botões de navegação (navegação default)", showPrevButton: "Mostrar botão de voltar (usuário pode retornar para página anterior)", showPageTitles: "Mostrar título da página", showCompletedPage: "Mostrar a página de conclusão no final (completedHtml)", showPageNumbers: "Mostrar número da página", questionErrorLocation: "Localização do erro da pergunta", showProgressBar: "Mostrar barra de progresso", mode: "Modo", goNextPageAutomatic: "Ao responder todas as perguntas, ir automaticamente para a próxima página", checkErrorsMode: "Modo de verificação de erros", clearInvisibleValues: "Limpar valores invisíveis", startSurveyText: "Texto para botão de começar", pagePrevText: "Texto para botão de página anterior", pageNextText: "Texto para botão de página seguinte", completeText: "Texto para botão de completar", requiredText: "Símbolo(s) para perguntas obrigatórias", questionStartIndex: "Index das perguntas (1, 2 or 'A', 'a')", questionTitleTemplate: "Template do título da pergunta, default é: '{no}. {obrigatório} {título}'", firstPageIsStarted: "Primeira página da pesquisa é a página de início.", isSinglePage: "Mostrar todos elementos em uma página", maxTimeToFinishPage: "Tempo máximo para finalizar página da pesquisa", showTimerPanel: "Mostrar o painel de cronômetro", showTimerPanelMode: "Mostrar painel de modo de cronômetro", defaultPanelValue: "valor default do painel", defaultRowValue: "valor default da linha", hasNone: "não tem nenhum", noneText: "nenhum texto", text: "texto", minValue: "valor mínimo", maxValue: "valor máximo", minLength: "tamanho mínimo", maxLength: "tamanho máximo", allowDigits: "permitir dígitos", minCount: "contador mínimo", maxCount: "contador máximo", regex: "expressão regular" } }; __WEBPACK_IMPORTED_MODULE_0__editorLocalization__["a" /* editorLocalization */].locales["pt"] = portugueseTranslation; /***/ }), /* 66 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__editorLocalization__ = __webpack_require__(0); var simplifiedChineseTranslation = { // strings for survey templates survey: { edit: "编辑", externalHelpLink: "教学小片", externalHelpLinkUrl: "https://www.youtube.com/channel/UCH2ru9okIcooNZfpIbyq4qQ?view_as=subscriber", dropQuestion: "从左侧工具箱拖个问题", copy: "复制", addToToolbox: "添加到工具箱", deletePanel: "删除面板", deleteQuestion: "删除题目", convertTo: "转变为", drag: "拖放元件" }, // strings for question types qt: { default: "默认", checkbox: "多项选择", comment: "多行文本", imagepicker: "选图片", dropdown: "下拉框", file: "文件上传", html: "Html 代码", matrix: "矩阵 (单选题)", matrixdropdown: "矩阵 (下拉框)", matrixdynamic: "矩阵 (动态问题)", multipletext: "文本框组", panel: "面板", paneldynamic: "面板(动态)", radiogroup: "单项选择", rating: "评分", text: "单行文本", boolean: "逻辑项", expression: "表达式(只读)", flowpanel: "流面板" }, // strings for editor ed: { defaultLocale: "默认语言 ({0})", survey: "调查问卷", settings: "问卷设置", opjectPropertiesHeader: "高级", showObjectProperties: "显示属性", hideObjectProperties: "隐藏属性", editSurvey: "修改", addNewPage: "添加新页面", moveRight: "滚动到右侧", moveLeft: "滚动到左侧", deletePage: "删除页面", editPage: "编辑页面", edit: "编辑", newPageName: "页面", newQuestionName: "问题", newPanelName: "面板", newTextItemName: "文本", testSurvey: "测试问卷", testSurveyAgain: "再次测试问卷", testSurveyWidth: "问卷宽度: ", embedSurvey: "将问卷嵌入网页", translation: "转换", saveSurvey: "保存问卷", designer: "问卷设计器", jsonEditor: "JSON 编辑器", undo: "撤销", redo: "恢复", options: "选项", generateValidJSON: "生成 JSON 数据", generateReadableJSON: "生成易读的 JSON 数据", toolbox: "工具箱", toolboxGeneralCategory: "一般", delSelObject: "删除所选对象", editSelObject: "编辑所选对象", correctJSON: "请修正 JSON 数据", surveyResults: "问卷结果: ", surveyResultsTable: "表格形式", surveyResultsJson: "JSON形式", resultsTitle: "问题标题", resultsName: "问题名称", resultsValue: "答案名称", resultsDisplayValue: "显示答案", modified: "已修改", saving: "保存中...", saved: "已保存", saveError: "错误,未保存", translationAddLanguage: "语言选择", translationShowAllStrings: "全部名词", translationShowAllPages: "全部页面", translationNoStrings: "未翻译,重新选", translationExportToSCVButton: "导出CSV", translationImportFromSCVButton: "导入CSV", translationMergeLocaleWithDefault: "同默认合并 {0} ", bold: "加粗", italic: "斜体", underline: "下划线", fpAddQuestion: "添加问题", completedHtmlOnConditionItemText: "显示 if:" }, //Property names in table headers pel: { isRequired: "是否为必填项?" }, // strings for property editors pe: { apply: "应用", ok: "确定", cancel: "取消", reset: "重置", close: "关闭", delete: "删除", addNew: "新建", addItem: "添加项...", addOther: "其他", addSelectAll: "全选", addNone: "无", removeAll: "全部删除", edit: "编辑器", itemValueEdit: "Visible If", editChoices: "编辑选项", move: "移动", empty: "<空>", notEmpty: "<编辑值>", fastEntry: "快速输入", formEntry: "表单输入", testService: "测试服务", conditionSelectQuestion: "选择问题...", conditionValueQuestionTitle: "选择值", conditionButtonAdd: "添加", conditionButtonReplace: "替换", conditionHelp: "请输入一个布尔表达式。当布尔值为真,问题/页面可见。例如:{question1} = 'value1' or ({question2} * {question4} > 20 and {question3} < 5)", expressionHelp: "请输入一项条件判断。当条件判断为真时问题/页面将可见。例如: {question1} = 'value1' or ({question2} = 3 and {question3} < 5)", aceEditorHelp: "trl+space公式补完提示", aceEditorRowTitle: "当前行", aceEditorPanelTitle: "当前面板", showMore: "更多细节请查看文档", conditionShowMoreUrl: "https://surveyjs.io/Documentation/LibraryParameter?id=Question¶meter=visibleIf", assistantTitle: "Available questions:", cellsEmptyRowsColumns: "至少有1行", propertyIsEmpty: "请为该属性设定一个值", value: "值", text: "显示文本", rowid: "行号", imageLink: "图片链接", columnEdit: "编辑列: {0}", itemEdit: "编辑选项: {0}", url: "URL", path: "路径", valueName: "值名", titleName: "标题名", hasOther: "可添加其他答案?", otherText: "其他答案文本", hasNone: "无", noneText: "无文本", hasSelectAll: "有全选项", selectAllText: "选择全部文本", choicesMin: "选项最小值", choicesMax: "选项最大值", choicesStep: "选项间隔", name: "题目名", title: "题目文本", cellType: "单元格类型", colCount: "列数", choicesOrder: "设置选项顺序", visible: "是否可见?", isRequired: "是否为必填项?", requiredErrorText: "错误文字", startWithNewLine: "问题是否新起一行?", rows: "文本框行数", placeHolder: "占位文本", showPreview: "是否显示图像预览?", storeDataAsText: "以 JSON 文本方式存储文件", maxSize: "文件最大尺寸 (Bytes)", imageHeight: "图片高度", imageWidth: "图片宽度", rowCount: "默认行数", columnLayout: "列布局", addRowLocation: "添加行按钮位置", addRowText: "添加条目按钮文本", removeRowText: "删除条目按钮文本", rateMin: "最小评分", rateMax: "最大评分", rateStep: "评分间隔", minRateDescription: "最小值提示", maxRateDescription: "最大值提示", inputType: "文本框类型", optionsCaption: "下拉框提示语", defaultValue: "默认值", cellsDefaultRow: "Default cells texts", surveyEditorTitle: "问卷设置", qEditorTitle: "编辑问题: {0}", maxLength: "最大长度", showTitle: "显示/隐藏 标题", locale: "默认语言", mode: "模式 (编辑/只读)", clearInvisibleValues: "清除隐藏值", cookieName: "Cookie名,避免多次运行)", sendResultOnPageNext: "切换页时保存结果", storeOthersAsComment: "其他值单独储存", showPageTitles: "显示页面标题", showPageNumbers: "显示页数", pagePrevText: "前一页按钮文本", pageNextText: "后一页按钮文本", completeText: "完成按钮文本", startSurveyText: "开始按钮文本", showNavigationButtons: "显示导航按钮 (默认导航)", showPrevButton: "显示前一页按钮 (用户可返回至前一页面)", firstPageIsStarted: "调查的第一页面为起始页.", showCompletedPage: "结尾展示完成后的页面 (completedHtml)", goNextPageAutomatic: "回答本页所有问题后,自动跳转到下一页", showProgressBar: "显示进度条", questionTitleLocation: "问题的标题位置", requiredText: "问题必填标志", questionStartIndex: "问题起始标志 (1, 2 or 'A', 'a')", showQuestionNumbers: "显示问题编号", questionTitleTemplate: "问题标题模板, 默认为: '{no}. {require} {title}'", questionErrorLocation: "问题错误定位", focusFirstQuestionAutomatic: "改变页面时聚焦在第一个问题", questionsOrder: "页内问题顺序", maxTimeToFinish: "完成调查的最长时间", maxTimeToFinishPage: "完成调查中页面的最长时间", showTimerPanel: "显示计时器面板", showTimerPanelMode: "显示计时器面板模式", renderMode: "渲染模式", allowAddPanel: "允许添加面板", allowRemovePanel: "允许删除面板", panelAddText: "添加面板文本", panelRemoveText: "删除面板文本", isSinglePage: "在一个页面上展示所有元素", html: "Html", expression: "公式", minValue: "最小值", maxValue: "最大值", minLength: "最小长度", allowDigits: "允许的位数", minCount: "最小数量", maxCount: "最大数量", regex: "正则表达式", totalText: "总文本", totalType: "总类型", totalExpression: "总公式", totalDisplayStyle: "总显示风格", totalCurrency: "总currency", totalFormat: "总格式", tabs: { general: "一般", navigation: "导航", question: "问题", completedHtml: "完成后的Html", loadingHtml: "加载中的Html", timer: "问卷计时器", trigger: "触发器", fileOptions: "选项", html: "HTML 编辑器", columns: "设置列", rows: "设置行", choices: "设置选项", visibleIf: "设置可见条件", enableIf: "设置有效条件", rateValues: "设置评分值", choicesByUrl: "通过 URL 导入选项", matrixChoices: "默认选项", multipleTextItems: "文本输入", validators: "校验规则" }, editProperty: "编辑属性: '{0}'", items: "[ 项目数量: {0} ]", enterNewValue: "请设定值", noquestions: "问卷中还没有创建任何问题", createtrigger: "请创建触发器", triggerOn: "当 ", triggerMakePagesVisible: "使页面可见:", triggerMakeQuestionsVisible: "使问题可见:", triggerCompleteText: "如果满足条件,则完成问卷", triggerNotSet: "触发器尚未设置", triggerRunIf: "满足下列条件时执行", triggerSetToName: "修改下列问题值: ", triggerFromName: "复制值: ", triggerRunExpression: "运行公式:", triggerSetValue: "修改为: ", triggerIsVariable: "在问卷提交结果中不要包含该变量" }, pv: { true: "真", false: "假", inherit: "继承", show: "显示", hide: "隐藏", default: "默认", initial: "初始化", random: "随机", collapsed: "折叠", expanded: "扩展", none: "无", asc: "升序", desc: "降序", indeterminate: "indeterminate", decimal: "数字", currency: "货币", percent: "百分数", firstExpanded: "firstExpanded", off: "关闭", onPanel: "面板上", onSurvey: "问卷上", list: "列表", progressTop: "progressTop", progressBottom: "progressBottom", progressTopBottom: "progressTopBottom", horizontal: "水平", vertical: "垂直", top: "顶", bottom: "底", topBottom: "顶和底", left: "左", color: "颜色", date: "日期", datetime: "时间", "datetime-local": "时间格式", email: "email", month: "月", number: "数字", password: "密码", range: "范围", tel: "电话", text: "text", time: "时间", url: "url", week: "周", hidden: "隐藏", on: "开", onPage: "页面上", edit: "编辑", display: "仅显示", onComplete: "完成时", onHidden: "隐藏中", all: "全部", page: "页", survey: "问卷", onNextPage: "下一页时", onValueChanged: "值变动时" }, // strings for operators op: { empty: "为空", notempty: "不为空", equal: "等于", notequal: "不等于", contains: "包含", notcontains: "不包含", anyof: "任意", allof: "全部", greater: "大于", less: "小于", greaterorequal: "大于等于", lessorequal: "小于等于" }, // strings for embed window ew: { angular: "使用 Angular 时", jquery: "使用 JQuery 时", knockout: "使用 Knockout 时", react: "使用 React 时", vue: "使用 Vue 时", bootstrap: "使用 Bootstrap 时", standard: "不使用 Bootstrap 时", showOnPage: "嵌入页面显示", showInWindow: "使用单独的问卷窗口", loadFromServer: "从服务器加载问卷 JSON 数据", titleScript: "脚本和样式", titleHtml: "HTML", titleJavaScript: "JavaScript" }, ts: { selectPage: "选择测试页", showInvisibleElements: "显示隐藏元件" }, validators: { answercountvalidator: "数量检查", emailvalidator: "Email", expressionvalidator: "公式", numericvalidator: "数字", regexvalidator: "正则表达式", textvalidator: "文本" }, triggers: { completetrigger: "完成问卷", setvaluetrigger: "设置问题值", copyvaluetrigger: "复制值", runexpressiontrigger: "运行公式", visibletrigger: "修改可见性" }, // strings of properties p: { name: "名字", title: { name: "标题", title: "如果与名字相同,请设置为空值" }, navigationButtonsVisibility: "导航按钮可见", questionsOrder: "页面中元素的顺序", maxTimeToFinish: "完成调查的最长时间", visible: "可见", visibleIf: "条件可见", questionTitleLocation: "问题的标题位置", description: "说明", state: "状态", isRequired: "必选", requiredIf: "是否必选", indent: "缩进", requiredErrorText: "必填错误", startWithNewLine: "允许问题在新行", innerIndent: "缩进", page: "所在页面", width: "宽度", commentText: "备注文本", valueName: "值名", enableIf: "设置有效条件", defaultValue: "默认值", correctAnswer: "正确答案", readOnly: "只读", validators: "有效性", titleLocation: "标题位置", hasComment: "有备注", hasOther: "允许其他答案", choices: "选项", choicesOrder: "选项排序", choicesByUrl: "Url选项", otherText: "其他答案文本", otherErrorText: "其他错误", storeOthersAsComment: "其他值单独储存", label: "标签", showTitle: "显示/隐藏 标题", valueTrue: "选是的值", valueFalse: "不选的值", cols: "列", rows: "行", placeHolder: "占位", optionsCaption: "optionsCaption", expression: "公式", format: "格式", displayStyle: "显示风格", currency: "货币", useGrouping: "useGrouping", showPreview: "预览", allowMultiple: "允许多选", imageHeight: "图高", imageWidth: "图宽", storeDataAsText: "文本方式存储文件", maxSize: "最大号", html: "html", columns: "columns", cells: "单元", isAllRowRequired: "所有行必填", horizontalScroll: "滚动", cellType: "单元格类型", columnsLayout: "列布局", columnColCount: "列数", columnMinWidth: "列最小宽度", rowCount: "行数", minRowCount: "最小行数", maxRowCount: "最大行数", keyName: "键值名", keyDuplicationError: "键值重复", confirmDelete: "确认删除", confirmDeleteText: "确认删除文本", addRowLocation: "添加行位置", addRowText: "添加行文本", removeRowText: "删除文本", items: "items", itemSize: "itemSize", colCount: "列数", templateTitle: "模板标题", templateDescription: "模板描述", allowAddPanel: "允许添加面板", allowRemovePanel: "允许删除面板", panelCount: "面板数", minPanelCount: "最小面板数", maxPanelCount: "最大面板数", panelsState: "panelsState", panelAddText: "添加面板文本", panelRemoveText: "删除面板文本", panelPrevText: "前一项文字", panelNextText: "下一项文字", showQuestionNumbers: "显示问题编号", showRangeInProgress: "showRangeInProgress", renderMode: "渲染模式", templateTitleLocation: "模板标题位置", rateValues: "打分值", rateMin: "最小分", rateMax: "最大分", rateStep: "分值间距", minRateDescription: "最小分描述", maxRateDescription: "最大分描述", inputType: "inputType", size: "size", locale: "默认语言", focusFirstQuestionAutomatic: "改变页面时聚焦在第一个问题", completedHtml: "完成后的Html", completedBeforeHtml: "completedBeforeHtml", loadingHtml: "加载页面", triggers: "触发器", cookieName: "Cookie名,避免多次运行)", sendResultOnPageNext: "切换页时保存结果", showNavigationButtons: "显示导航按钮 (默认导航)", showPrevButton: "显示前一页按钮 (用户可返回至前一页面)", showPageTitles: "显示页面标题", showCompletedPage: "结尾展示完成后的页面 (completedHtml)", showPageNumbers: "显示页数", questionErrorLocation: "问题错误定位", showProgressBar: "显示进度条", mode: "模式 (编辑/只读)", goNextPageAutomatic: "回答本页所有问题后,自动跳转到下一页", checkErrorsMode: "查错模式", clearInvisibleValues: "清除隐藏值", startSurveyText: "开始按钮文本", pagePrevText: "前一页按钮文本", pageNextText: "后一页按钮文本", completeText: "完成按钮文本", requiredText: "问题必填标志", questionStartIndex: "问题起始标志 (1, 2 or 'A', 'a')", questionTitleTemplate: "问题标题模板, 默认为: '{no}. {require} {title}'", firstPageIsStarted: "调查的第一页面为起始页.", isSinglePage: "在一个页面上展示所有元素", maxTimeToFinishPage: "完成调查中页面的最长时间", showTimerPanel: "显示计时器面板", showTimerPanelMode: "显示计时器面板模式", defaultPanelValue: "默认面板值", defaultRowValue: "默认行值", hasNone: "都不选项", noneText: "无文本", text: "文本", defaultVaule: "默认选项", "survey_title": { name: "标题", title: "问卷标题在每页上都会显示" }, "page_title": { name: "标题", title: "页面标题" } } }; __WEBPACK_IMPORTED_MODULE_0__editorLocalization__["a" /* editorLocalization */].locales["zh-cn"] = simplifiedChineseTranslation; /***/ }), /* 67 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__editorLocalization__ = __webpack_require__(0); var spanishTranslation = { // strings for survey templates survey: { edit: "Editar", dropQuestion: "Por favor coloque una pregunta aquí de la caja de herramientas en la izquierda.", copy: "Copiar", addToToolbox: "Añadir a la caja de herramientas", deletePanel: "Eliminar Panel", deleteQuestion: "Borrar Pregunta", convertTo: "Convertir a", drag: "Arrastrar Elemento" }, //questionTypes qt: { default: "Predefinido", checkbox: "Checkbox", comment: "Comentario", dropdown: "Dropdown", file: "Archivo", html: "Html", matrix: "Matriz (elección única)", matrixdropdown: "Matriz (elección múltiple)", matrixdynamic: "Matriz (filas dinámicas)", multipletext: "Texto múltiple", panel: "Panel", paneldynamic: "Panel (paneles dinámicos)", radiogroup: "Grupo de radio", rating: "Rating", text: "Entrada sencilla", boolean: "Booleano", expression: "Expresión" }, //Strings in Editor ed: { survey: "Encuesta", settings: "Ajustar Encuesta", editSurvey: "Editar Encuesta", addNewPage: "Añadir Nueva Página", moveRight: "Moverse hacia la derecha", moveLeft: "Moverse hacia la izquierda", deletePage: "Borrar Página", editPage: "Editar Página", edit: "Editar", newPageName: "página", newQuestionName: "pregunta", newPanelName: "panel", testSurvey: "Probar Encuesta", testSurveyAgain: "Probar Encuesta Otra Vez", testSurveyWidth: "Ancho de Encuesta: ", embedSurvey: "Empotrar Encuesta", saveSurvey: "Guardar Encuesta", designer: "Diseñador de Encuesta", jsonEditor: "Editor de JSON", undo: "Deshacer", redo: "Rehacer", options: "Opciones", generateValidJSON: "Generar JSON válido", generateReadableJSON: "Generar JSON legible", toolbox: "Caja de herramientas", toolboxGeneralCategory: "Categoría General", delSelObject: "Borrar objeto seleccionado", editSelObject: "Editar objeto seleccionado", correctJSON: "Por favor corrija JSON.", surveyResults: "Resultado de Encuesta: ", modified: "Modificado", saving: "Salvando", saved: "Salvado" }, //Property names in table headers pel: { isRequired: "Requerido?" }, //Property Editors pe: { apply: "Aplicar", ok: "OK", cancel: "Cancelar", reset: "Restaurar", close: "Cerrar", delete: "Borrar", addNew: "Añadir nuevo", addItem: "Click para añadir articulo...", removeAll: "Quitar todos", edit: "Editar", itemValueEdit: "Visible Si", editChoices: "Editar Opciones", move: "Mover", empty: "<vacío>", notEmpty: "<editar valor>", fastEntry: "Entrada rápida", formEntry: "Entrar en forma", testService: "Pruebe el servicio", conditionSelectQuestion: "Seleccionar pregunta...", conditionValueQuestionTitle: "Porfavor selecciona el valor", conditionButtonAdd: "Añadir", conditionButtonReplace: "Reemplazar", conditionHelp: "Por favor proporcione una expresión booleana. Debería regresar verdadero para mantener la pregunta/página visible. Por ejemplo: {pregunta1} = 'valor1' or ({pregunta2} * {pregunta4} > 20 and {pregunta3} < 5)", expressionHelp: "Por favor proporcione una expresión. Puede hacer uso de llaves para tener acceso a los valores de la pregunta: '{pregunta1} + {pregunta2}', '({precio}*{cantidad}) * (100 - {descuento})'", aceEditorHelp: "Presione ctrl+espacio para obtener un indicio de completado de expresión", aceEditorRowTitle: "Fila actual", aceEditorPanelTitle: "Panel actual", showMore: "Por favor use la documentación para más detalles", conditionShowMoreUrl: "https://surveyjs.io/Documentation/LibraryParameter?id=Question¶meter=visibleIf", assistantTitle: "Preguntas disponibles:", cellsEmptyRowsColumns: "Debe haber al menos una columna o fila", propertyIsEmpty: "Por favor proporcione un valor", value: "Valor", text: "Texto", columnEdit: "Editar columna: {0}", itemEdit: "Editar artículo: {0}", url: "URL", path: "trayecto", valueName: "Nombre del valor", titleName: "Título", hasOther: "Tiene otro artículo", otherText: "Texto de otro artículo", name: "Nombre", title: "Título", cellType: "Tipo de celda", colCount: "Conteo de columnas", choicesOrder: "Orden de selección de elecciones", visible: "Es visible?", isRequired: "Es requerido?", startWithNewLine: "Es inicio con nueva línea?", rows: "Conteo de filas", placeHolder: "Marcador de entrada", showPreview: "Se muestra avance de imagen?", storeDataAsText: "Guardar contenido de archivo en resultado JSON como texto", maxSize: "Tamaño máximo de archivo en bytes", imageHeight: "Altura de imagen", imageWidth: "Ancho de imagen", rowCount: "Conteo de filas", columnsLocation: "Columns location", addRowLocation: "Agregar ubicación de botón de fila", addRowText: "Añadir texto de boton de fila", removeRowText: "Quitar texto de boton de fila", minRateDescription: "Descripción de la tasa mínima", maxRateDescription: "Descripción de la tarifa máxima", inputType: "Tipo de entrada", optionsCaption: "Leyenda de opciones", defaultValue: "Valor de defecto", cellsDefaultRow: "Textos de celdas por defecto", surveyEditorTitle: "Editar ajustes de encuesta", qEditorTitle: "Editar: {0}", //survey showTitle: "Mostrar/esconder título", locale: "Lenguaje de defecto", mode: "Modo (editar/solo lectura)", clearInvisibleValues: "Borrar valores invisibles", cookieName: "Nombre de Cookie (para deshabilitar corra encuesta dos veces localmente)", sendResultOnPageNext: "Mandar resultados de encuesta en página siguiente", storeOthersAsComment: "Guardar valor 'otros' en campo separado", showPageTitles: "Mostrar títulos de página", showPageNumbers: "Mostrar números de página", pagePrevText: "Texto de botón de página previa", pageNextText: "Texto de botón de página próxima", completeText: "Texto de botón de completado", startSurveyText: "Texto de botón de inicio", showNavigationButtons: "Mostrar botones de navigación (navegación de defecto)", showPrevButton: "Mostrar botón previo (el usuario puede regresar en página previa)", firstPageIsStarted: "La primera página en la encuesta es una página iniciada.", showCompletedPage: "Mostrar la página completada al final (completedHtml)", goNextPageAutomatic: "Al contestar todas las preguntas, ir a la próxima página automáticamente", showProgressBar: "Mostrar barra de progreso", questionTitleLocation: "Localización de título de pregunta", requiredText: "La pregunta requiere de símbolo(s)", questionStartIndex: "Índice de inicio de pregunta (1, 2 o 'A', 'a')", showQuestionNumbers: "Mostrar números de preguntas", questionTitleTemplate: "Plantilla de título de pregunta, defecto es: '{no}. {require} {title}'", questionErrorLocation: "Error en ubucación de la pregunta", focusFirstQuestionAutomatic: "Foco en primera pregunta al cambiar la página", questionsOrder: "Órden de elementos en la página", maxTimeToFinish: "Tiempo máximo para finalizar la encuesta", maxTimeToFinishPage: "Tiempo máximo para finalizar una página en la encuesta", showTimerPanel: "Mostrar panel de temporizador", showTimerPanelMode: "Modo de muestra de panel de temporizador", renderMode: "Modo de interpretador", allowAddPanel: "Permitir adición de un panel", allowRemovePanel: "Permitir remoción del panel", panelAddText: "Añadiendo texto de panel", panelRemoveText: "Quitando texto de panel", isSinglePage: "Mostrar todos los elementos en una página", tabs: { general: "General", fileOptions: "Opciones", html: "Editor Html", columns: "Columnas", rows: "Filas", choices: "Opciones", items: "Elementos", visibleIf: "Visible Si", enableIf: "Habilitar Si", rateValues: "Valores de tasa", choicesByUrl: "Opciones de la Web", matrixChoices: "Opciones de defecto", multipleTextItems: "Entradas de texto", validators: "Validadores", navigation: "Navegación", question: "Pregunta", completedHtml: "Html Completado", loadingHtml: "Cargando Html", timer: "Temporizador/Quiz", triggers: "Disparadores", templateTitle: "Título de plantilla" }, editProperty: "Editar propiedad '{0}'", items: "[ Items: {0} ]", enterNewValue: "Por favor, proporcione el valor.", noquestions: "No hay ni una pregunta en la encuesta.", createtrigger: "Por favor cree un disparador", triggerOn: "En ", triggerMakePagesVisible: "Hacer páginas visibles:", triggerMakeQuestionsVisible: "Hacer elementos visibles:", triggerCompleteText: "Complete la encuesta en caso de éxito.", triggerNotSet: "El disparador no está configurado", triggerRunIf: "Correr si", triggerSetToName: "Cambiar valor de: ", triggerSetValue: "a: ", triggerIsVariable: "No poner la variable en el resultado de la encuesta." }, //Property values pv: { true: "verdadero", false: "falso", inherit: "heredar", show: "mostrar", hide: "ocultar", default: "predefinido", initial: "inicial", random: "aleatorio", collapsed: "colapsado", expanded: "expandido", none: "ninguna", asc: "ascendente", desc: "descendente", indeterminate: "indeterminado", decimal: "decimal", currency: "moneda", percent: "por ciento", firstExpanded: "primeroExpandido", off: "apagado", onPanel: "onPanel", onSurvey: "onSurvey", list: "lista", progressTop: "progresoArriba", progressBottom: "progresoAbajo", progressTopBottom: "progresoArribaAbajo", horizontal: "horizontal", vertical: "vertical", top: "arriba", bottom: "abajo", topBottom: "arriba y abajo", left: "izquierda", color: "color", date: "fecha", datetime: "fecha y hora", "datetime-local": "fechaHora-local", email: "correo electrónico", month: "mes", number: "número", password: "contraseña", range: "rango", tel: "teléfono", text: "texto", time: "tiempo", url: "url", week: "semana", hidden: "oculto", on: "encendido", onPage: "onPage", edit: "editar", display: "mostrar", onComplete: "Cuando se complete", onHidden: "Cuando se oculte", all: "todo", page: "página", survey: "encuesta", onNextPage: "Cuando se cambie de página", onValueChanged: "Cuando el valor cambie" }, //Operators op: { empty: "es vacío", notempty: "no es vacío", equal: "igual a", notequal: "no igual a", contains: "contiene", notcontains: "no contiene", greater: "mayor", less: "menor", greaterorequal: "mayor o igual a", lessorequal: "menor or igual a" }, //Embed window ew: { angular: "Use versión Angular", jquery: "Use versión jQuery", knockout: "Use versión Knockout", react: "Use versión React", vue: "Use versión Vue", bootstrap: "Para entorno bootstrap", standard: "No bootstrap", showOnPage: "Mostrar encuesta en una página", showInWindow: "Mostrar encuesta en una ventana", loadFromServer: "Cargar JSON de encuesta del servidor", titleScript: "Scripts y estilos", titleHtml: "HTML", titleJavaScript: "JavaScript" }, //Test Survey ts: { selectPage: "Seleccione la página para probarla:" }, validators: { answercountvalidator: "cuenta de respuestas", emailvalidator: "e-mail", expressionvalidator: "expresión", numericvalidator: "numerico", regexvalidator: "regex", textvalidator: "texto" }, triggers: { completetrigger: "encuesta completa", setvaluetrigger: "valor ajustado", visibletrigger: "cambio de visibilidad" }, //Properties p: { name: "nombre", title: { name: "título", title: "Dejarlo vacío, si es igual que 'Nombre'" }, page_title: { name: "título", title: "Título de página" }, navigationButtonsVisibility: "Visibilidad de botones de navegación", questionsOrder: "Orden de las preguntas", maxTimeToFinish: "Tiempo máximo para terminar", visible: "Visible", visibleIf: "Visible Si", questionTitleLocation: "preguntaTituloLocacion", description: "Descripción", state: "Estado", isRequired: "Es Requerido", indent: "Indentar", requiredErrorText: "Texto del error", startWithNewLine: "Comenzar con una nueva línea", innerIndent: "Identación interna", page: "Página", width: "Ancho", commentText: "Texto del Comentario", valueName: "Nombre del valor", enableIf: "Habilitado Si", defaultValue: "Valor por defecto", correctAnswer: "Respuesta correcta", readOnly: "Solo Lectura", validators: "Validadores", titleLocation: "Titulo de la ubicación", hasComment: "Tiene Comentario", hasOther: "Tiene Otro", choices: "Elecciones", choicesOrder: "Orden de las opciones", choicesByUrl: "Opciones por URL", otherText: "Otro Texto", otherErrorText: "Texto del error para otro", storeOthersAsComment: "Guardar otros como comentario", label: "Etiqueta", showTitle: "Mostrar Título", valueTrue: "Valor Verdadero", valueFalse: "Valor Falso", cols: "Columnas", rows: "Filas", placeHolder: "Marcador de entrada", optionsCaption: "Opciones de Título", expression: "Expresión", format: "Formato", displayStyle: "Estilo de visualización", currency: "Moneda", useGrouping: "Usar agrupación", showPreview: "Mostrar vista previa", allowMultiple: "Permitir múltiples", imageHeight: "Altura de la imagen", imageWidth: "Ancho de la imagen", storeDataAsText: "Almacenar datos como texto", maxSize: "Tamaño máximo", html: "html", columns: "columnas", cells: "celdas", isAllRowRequired: "Se requieren todas las filas", horizontalScroll: "Desplazamiento horizontal", cellType: "Tipo de celda", columnsLocation: "Columnas de Locación", columnColCount: "Conteo de columna", columnMinWidth: "Ancho mínimo de columna", rowCount: "Conteo de fila", minRowCount: "Conteo mínima de fila", maxRowCount: "Conteo máxima de fila", keyName: "Nombre clave", keyDuplicationError: "Mensaje de error para clave de duplicada", confirmDelete: "Confirmación de eliminación", confirmDeleteText: "Texto de la confirmación para eliminación", addRowLocation: "Agrega fila de ubicación", addRowText: "Agregar texto de la fila", removeRowText: "Quitar texto de la fila", items: "ítems", itemSize: "Tamaño del ítem", colCount: "Conteo de columnas", templateTitle: "Título de la plantilla", templateDescription: "Descripción de la platilla", allowAddPanel: "Permitir agregar panel", allowRemovePanel: "Permitir eliminar panel", panelCount: "Conteo de panel", minPanelCount: "Conteo mínimo de panel", maxPanelCount: "Conteo máximo de panel", panelsState: "Paneles de Estado", panelAddText: "Agregar texto al panel", panelRemoveText: "Eliminar texto al panel", panelPrevText: "Texto anterior del panel", panelNextText: "Texto siguiente del panel", showQuestionNumbers: "Nostrar números de pregunta", showRangeInProgress: "Mostrar el rango de progreso", renderMode: "Modo renderizado", templateTitleLocation: "Plantilla del Título Ubicación", rateValues: "Valores de tarifa", rateMin: "Tarifa mínima", rateMax: "Tarifa máxima", rateStep: "Pasos de tarifa", minRateDescription: "Descripción mínima de tarifa", maxRateDescription: "Descripción máxima de tarifa", inputType: "Tipo de entrada", size: "Tamaño", locale: "Lugar", focusFirstQuestionAutomatic: "Enfocar primera pregunta automática", completedHtml: "HTML Completado", completedBeforeHtml: "Completado antes de HTML", loadingHtml: "Cargando HTML", triggers: "Disparadores", cookieName: "Nombre de la cookie", sendResultOnPageNext: "Enviar resultado a la página siguiente", showNavigationButtons: "Mostrar botones de navegación", showPrevButton: "Mostrar botón anterior", showPageTitles: "Mostrar Títulos de la página", showCompletedPage: "Mostrar página completada", showPageNumbers: "Mostrar los números de página", questionErrorLocation: "Pregunta error ubicación", showProgressBar: "Mostrar barra de progreso", mode: "Modo", goNextPageAutomatic: "Ir a la siguiente página automática", checkErrorsMode: "Verifica el modo de errores", clearInvisibleValues: "Limpiar en valores visibles", startSurveyText: "Comenzar el texto de la encuesta", pagePrevText: "Texto anterior de la página", pageNextText: "Texto siguiente de la página", completeText: "Texto completado de la página", requiredText: "Texto requerido", questionStartIndex: "Índice de inicio de pregunta", questionTitleTemplate: "Título platilla de la pregunta", firstPageIsStarted: "Se inicia la primera página", isSinglePage: "Es una sola página", maxTimeToFinishPage: "Tiempo máximo para terminar la página", showTimerPanel: "Mostrar tiempo del panel", showTimerPanelMode: "Mostrar tiempo del modo panel", text: "texto", minValue: "Valor mínimo", maxValue: "Valor máximo", minLength: "Largo mínimo", maxLength: "Largo máximo", allowDigits: "Permitir dígitos", minCount: "Conteo mínimo", maxCount: "Conteo máximo", regex: "Expresión regular" } }; __WEBPACK_IMPORTED_MODULE_0__editorLocalization__["a" /* editorLocalization */].locales["es"] = spanishTranslation; /***/ }), /* 68 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__editorLocalization__ = __webpack_require__(0); var traditionalChineseTranslation = { // strings for survey templates survey: { edit: "編輯", dropQuestion: "請將問題放置於此", copy: "複製", addToToolbox: "添加到工具箱", deletePanel: "刪除面板", deleteQuestion: "刪除題目", convertTo: "轉變為" }, // strings for question types qt: { checkbox: "多項選擇", comment: "多行文本框", dropdown: "下拉框", file: "文件上傳", html: "Html 代碼", matrix: "矩陣 (單選題)", matrixdropdown: "矩陣 (下拉框)", matrixdynamic: "矩陣 (動態問題)", multipletext: "文本框組", panel: "面板", paneldynamic: "面板(動態)", radiogroup: "單項選擇", rating: "評分", text: "文本框", boolean: "布林選項", expression: "表達式" }, // strings for editor ed: { survey: "調查問卷", editSurvey: "修改", addNewPage: "添加新頁面", deletePage: "刪除頁面", editPage: "編輯頁面", newPageName: "頁面", newQuestionName: "問題", newPanelName: "面板", testSurvey: "測試問卷", testSurveyAgain: "再次測試問卷", testSurveyWidth: "問卷寬度: ", embedSurvey: "將問卷嵌入網頁", saveSurvey: "保存問卷", designer: "問卷設計器", jsonEditor: "JSON 編輯器", undo: "還原", redo: "重做", options: "選項", generateValidJSON: "生成 JSON", generateReadableJSON: "生成易讀的 JSON", toolbox: "工具箱", delSelObject: "刪除所選對象", editSelObject: "編輯所選對象", correctJSON: "修正 JSON", surveyResults: "問卷結果: ", modified: "已修改", saving: "保存中...", saved: "已保存" }, //Property names in table headers pel: { isRequired: "是否為必填項?" }, // strings for property editors pe: { apply: "應用", ok: "確定", cancel: "取消", reset: "重置", close: "關閉", delete: "刪除", addNew: "新建", removeAll: "全部刪除", edit: "編輯器", empty: "<空>", fastEntry: "快速輸入", formEntry: "表單輸入", testService: "測試服務", showMore: "更多細節...", conditionHelp: "請輸入一個布林表達式。當布林值為真,問題/頁面可見。例如:{question1} = 'value1' or ({question2} * {question4} > 20 and {question3} < 5)", expressionHelp: "請輸入一項條件判斷。當條件判斷為真時問題/頁面將可見。例如: {question1} = 'value1' or ({question2} = 3 and {question3} < 5)", propertyIsEmpty: "請為該屬性設定一個值", value: "值", text: "顯示文本", columnEdit: "編輯列: {0}", itemEdit: "編輯選項: {0}", hasOther: "可添加其他答案?", otherText: "其他答案文本", url: "URL", path: "Path", valueName: "Value name", titleName: "Title name", name: "題目名", title: "題目文本", cellType: "單元格類型", colCount: "列數", choicesOrder: "設置選項順序", visible: "是否可見?", isRequired: "是否為必填項?", startWithNewLine: "問題是否新起一行?", rows: "文本框行數", placeHolder: "占位文本", showPreview: "是否顯示圖像預覽?", storeDataAsText: "以 JSON 文本方式存儲文件", maxSize: "文件最大尺寸 (Bytes)", imageHeight: "圖片高度", imageWidth: "圖片寬度", rowCount: "默認行數", addRowText: "添加條目按鈕文本", removeRowText: "刪除條目按鈕文本", minRateDescription: "最小值提示", maxRateDescription: "最大值提示", inputType: "文本框類型", optionsCaption: "下拉框提示語", qEditorTitle: "編輯問題: {0}", //survey showTitle: "顯示/隱藏 標題", locale: "默認語言", mode: "模式 (編輯/只讀)", clearInvisibleValues: "清除隱藏值", cookieName: "Cookie name (to disable run survey two times locally)", sendResultOnPageNext: "Send survey results on page next", storeOthersAsComment: "Store 'others' value in separate field", showPageTitles: "顯示頁面標題", showPageNumbers: "顯示頁數", pagePrevText: "前一頁按鈕文本", pageNextText: "後一頁按鈕文本", completeText: "完成按鈕文本", startSurveyText: "開始按鈕文本", showNavigationButtons: "顯示導航按鈕 (默認導航)", showPrevButton: "顯示前一頁按鈕 (用戶可返回至前一頁面)", firstPageIsStarted: "調查的第一頁面為起始頁.", showCompletedPage: "結尾展示完成後的頁面 (completedHtml)", goNextPageAutomatic: "回答本頁所有問題後,自動跳轉到下一頁", showProgressBar: "顯示進度條", questionTitleLocation: "問題的標題位置", requiredText: "The question required symbol(s)", questionStartIndex: "問題起始標誌 (1, 2 or 'A', 'a')", showQuestionNumbers: "顯示問題編號", questionTitleTemplate: "問題標題模板, 默認為: '{no}. {require} {title}'", questionErrorLocation: "問題錯誤定位", focusFirstQuestionAutomatic: "改變頁面時聚焦在第一個問題", questionsOrder: "Elements order on the page", maxTimeToFinish: "完成調查的最長時間", maxTimeToFinishPage: "完成調查中頁面的最長時間", showTimerPanel: "顯示計時器面板", showTimerPanelMode: "顯示計時器面板模式", renderMode: "渲染模式", allowAddPanel: "允許添加面板", allowRemovePanel: "允許刪除面板", panelAddText: "添加面板文本", panelRemoveText: "刪除面板文本", isSinglePage: "在一個頁面上展示所有元素", tabs: { general: "通用項", navigation: "導航", question: "問題", completedHtml: "完成後的Html", loadingHtml: "加載中的Html", timer: "問卷計時器", trigger: "觸發器", fileOptions: "選項", html: "HTML 編輯器", columns: "設置列", rows: "設置行", choices: "設置選項", visibleIf: "設置可見條件", enableIf: "Enable If", rateValues: "設置評分值", choicesByUrl: "通過 URL 導入選項", matrixChoices: "默認選項", multipleTextItems: "文本輸入", validators: "校驗規則" }, editProperty: "編輯屬性: '{0}'", items: "[ 項目數量: {0} ]", enterNewValue: "請設定值", noquestions: "問卷中還沒有創建任何問題", createtrigger: "請創建觸發器", triggerOn: "當 ", triggerMakePagesVisible: "使頁面可見:", triggerMakeQuestionsVisible: "使問題可見:", triggerCompleteText: "如果滿足條件,則完成問卷", triggerNotSet: "觸發器尚未設置", triggerRunIf: "滿足下列條件時執行", triggerSetToName: "修改下列問題值: ", triggerSetValue: "修改為: ", triggerIsVariable: "在問卷提交結果中不要包含該變量" }, // strings for operators op: { empty: "為空", notempty: "不為空", equal: "等於", notequal: "不等於", contains: "包含", notcontains: "不包含", greater: "大於", less: "小於", greaterorequal: "大於等於", lessorequal: "小於等於" }, // strings for embed window ew: { angular: "使用 Angular 時", jquery: "使用 JQuery 時", knockout: "使用 Knockout 時", react: "使用 React 時", vue: "使用 Vue 時", bootstrap: "使用 Bootstrap 時", standard: "不使用 Bootstrap 時", showOnPage: "嵌入頁面顯示", showInWindow: "使用單獨的問卷視窗", loadFromServer: "從服務器加載問卷 JSON 數據", titleScript: "腳本和樣式", titleHtml: "HTML", titleJavaScript: "JavaScript" }, validators: { answercountvalidator: "數量檢查", emailvalidator: "Email", numericvalidator: "數字", regexvalidator: "正則表達式", textvalidator: "文本" }, triggers: { completetrigger: "完成問卷", setvaluetrigger: "設置問題值", visibletrigger: "修改可見性" }, // strings of properties p: { commentText: "備註文本", choices: "選項", choicesByUrl: "Url選項", choicesOrder: "選項排序", colCount: "列數", correctAnswer: "正確答案", defaultVaule: "預設選項", description: "說明", enableIf: "允許判斷", hasComment: "hasComment", hasOther: "允許其他答案", otherText: "其他答案文本", page: "所在頁面", readOnly: "只讀", indent: "縮排", isRequired: "必填", requiredErrorText: "requiredErrorText", otherErrorText: "requiredErrorText", startWithNewLine: "允許問題在新行", //survey showTitle: "顯示/隱藏 標題", locale: "默認語言", mode: "模式 (編輯/只讀)", clearInvisibleValues: "清除隱藏值", cookieName: "Cookie name (to disable run survey two times locally)", sendResultOnPageNext: "Send survey results on page next", storeOthersAsComment: "Store 'others' value in separate field", showPageTitles: "顯示頁面標題", showPageNumbers: "顯示頁數", pagePrevText: "前一頁按鈕文本", pageNextText: "後一頁按鈕文本", completeText: "完成按鈕文本", startSurveyText: "開始按鈕文本", showNavigationButtons: "顯示導航按鈕 (默認導航)", showPrevButton: "顯示前一頁按鈕 (用戶可返回至前一頁面)", firstPageIsStarted: "調查的第一頁面為起始頁.", showCompletedPage: "結尾展示完成後的頁面 (completedHtml)", goNextPageAutomatic: "回答本頁所有問題後,自動跳轉到下一頁", showProgressBar: "顯示進度條", questionTitleLocation: "問題的標題位置", requiredText: "The question required symbol(s)", questionStartIndex: "問題起始標志 (1, 2 or 'A', 'a')", showQuestionNumbers: "顯示問題編號", questionTitleTemplate: "問題標題模板, 默認為: '{no}. {require} {title}'", questionErrorLocation: "問題錯誤定位", focusFirstQuestionAutomatic: "改變頁面時聚焦在第一個問題", questionsOrder: "頁面中元素的順序", maxTimeToFinish: "完成調查的最長時間", maxTimeToFinishPage: "完成調查中頁面的最長時間", showTimerPanel: "顯示計時器面板", showTimerPanelMode: "顯示計時器面板模式", renderMode: "渲染模式", allowAddPanel: "允許添加面板", allowRemovePanel: "允許刪除面板", panelAddText: "添加面板文本", panelRemoveText: "刪除面板文本", isSinglePage: "在一個頁面上展示所有元素", name: "名字", title: { name: "標題", title: "如果與名字相同,請設置為空值" }, survey_title: { name: "標題", title: "問卷標題在每頁上都會顯示" }, page_title: { name: "標題", title: "頁面標題" } } }; __WEBPACK_IMPORTED_MODULE_0__editorLocalization__["a" /* editorLocalization */].locales["zh-tw"] = traditionalChineseTranslation; /***/ }), /* 69 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(3); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_knockout__ = __webpack_require__(1); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_knockout___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_knockout__); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_survey_knockout__ = __webpack_require__(2); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_survey_knockout___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_survey_knockout__); /* unused harmony export SurveyDescription */ /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return SurveysManager; }); var ServiceAPI = /** @class */ (function (_super) { __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__["a" /* __extends */])(ServiceAPI, _super); function ServiceAPI(baseUrl, accessKey) { var _this = _super.call(this) || this; _this.baseUrl = baseUrl; _this.accessKey = accessKey; return _this; } ServiceAPI.prototype.getActiveSurveys = function (onLoad) { var xhr = new XMLHttpRequest(); xhr.open("GET", this.baseUrl + "/getActive?accessKey=" + this.accessKey); xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); xhr.onload = function () { var result = xhr.response ? JSON.parse(xhr.response) : null; onLoad(xhr.status == 200, result, xhr.response); }; xhr.send(); }; ServiceAPI.prototype.createSurvey = function (name, onCreate) { var xhr = new XMLHttpRequest(); xhr.open("GET", this.baseUrl + "/create?accessKey=" + this.accessKey + "&name=" + name); xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); xhr.onload = function () { var result = xhr.response ? JSON.parse(xhr.response) : null; onCreate(xhr.status == 200, result, xhr.response); }; xhr.send(); }; ServiceAPI.prototype.saveSurvey = function (id, json, onSave) { var xhr = new XMLHttpRequest(); xhr.open("POST", this.baseUrl + "/changeJson?accessKey=" + this.accessKey); xhr.setRequestHeader("Content-Type", "application/json;charset=UTF-8"); xhr.onload = function () { var result = xhr.response ? JSON.parse(xhr.response) : null; !!onSave && onSave(xhr.status == 200, result, xhr.response); }; xhr.send(JSON.stringify({ Id: id, Json: json, Text: json })); }; ServiceAPI.prototype.updateSurveyName = function (id, name, onUpdate) { var xhr = new XMLHttpRequest(); xhr.open("GET", this.baseUrl + "/changeName/" + id + "?accessKey=" + this.accessKey + "&name=" + name); xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); xhr.onload = function () { var result = xhr.response ? JSON.parse(xhr.response) : null; !!onUpdate && onUpdate(xhr.status == 200, result, xhr.response); }; xhr.send(); }; return ServiceAPI; }(__WEBPACK_IMPORTED_MODULE_2_survey_knockout__["dxSurveyService"])); var SurveyDescription = /** @class */ (function () { function SurveyDescription(name, createdAt, id, resultId, postId) { if (name === void 0) { name = __WEBPACK_IMPORTED_MODULE_1_knockout__["observable"](""); } if (createdAt === void 0) { createdAt = new Date(Date.now()).toDateString(); } if (id === void 0) { id = ""; } if (resultId === void 0) { resultId = ""; } if (postId === void 0) { postId = ""; } this.name = name; this.createdAt = createdAt; this.id = id; this.resultId = resultId; this.postId = postId; } return SurveyDescription; }()); var SurveysManager = /** @class */ (function () { function SurveysManager(baseUrl, accessKey, editor) { var _this = this; this.baseUrl = baseUrl; this.accessKey = accessKey; this.editor = editor; this.isEditMode = __WEBPACK_IMPORTED_MODULE_1_knockout__["observable"](false); this.surveyId = __WEBPACK_IMPORTED_MODULE_1_knockout__["observable"](); this.surveys = __WEBPACK_IMPORTED_MODULE_1_knockout__["observableArray"](); this.currentSurvey = __WEBPACK_IMPORTED_MODULE_1_knockout__["observable"](); this.currentSurveyName = __WEBPACK_IMPORTED_MODULE_1_knockout__["observable"](""); this.isLoading = __WEBPACK_IMPORTED_MODULE_1_knockout__["observable"](false); this.nameEditorKeypress = function (model, event) { if (event.keyCode === 13) { _this.edit(model, event); } else if (event.keyCode === 27) { _this.isEditMode(false); } }; var hash = window.location.hash; if (hash.indexOf("#") === 0) { this.surveyId(hash.slice(1)); } this.api = new ServiceAPI(baseUrl + SurveysManager.serviceUrlPath, accessKey); editor.isAutoSave = true; editor.showState = true; editor.saveSurveyFunc = function (saveNo, callback) { if (!editor.surveyId && !_this.surveyId()) { _this.addHandler(function (success) { return callback(saveNo, success); }); } if (!!editor.surveyId || !!_this.surveyId()) { _this.api.saveSurvey(editor.surveyId || _this.surveyId(), editor.text, function (success) { return callback(saveNo, success); }); } }; this.surveys(this.getSurveys()); if (!this.surveyId()) { this.currentSurvey(this.surveys()[0]); } else { var survey = this.surveys().filter(function (s) { return s.id === _this.surveyId(); })[0]; if (!!survey) { this.currentSurvey(survey); this.surveyId(undefined); } else { editor.loadSurvey(this.surveyId()); } } var onCurrentSurveyChanged = function (survey) { if (!!survey) { _this.surveyId(undefined); window.location.hash = "#" + survey.id; if (editor.surveyId === survey.id) return; editor.loadSurvey(survey.id); editor.surveyId = survey.id; editor.surveyPostId = survey.postId; } else { if (!_this.surveyId()) { editor.surveyId = ""; editor.surveyPostId = ""; window.location.hash = ""; editor.text = ""; } } }; this.currentSurvey.subscribe(onCurrentSurveyChanged); onCurrentSurveyChanged(this.currentSurvey()); var currentSurveyCanBeAttached = __WEBPACK_IMPORTED_MODULE_1_knockout__["observable"](false); __WEBPACK_IMPORTED_MODULE_1_knockout__["computed"](function () { var survey = _this.currentSurvey(); currentSurveyCanBeAttached(false); if (!!survey) { _this.api.updateSurveyName(survey.id, survey.name.peek(), function (success) { currentSurveyCanBeAttached(success); }); } }); this.toolbarItem = { id: "svd-attach-survey", template: "attach-survey", visible: currentSurveyCanBeAttached, action: __WEBPACK_IMPORTED_MODULE_1_knockout__["computed"](function () { return "https://dxsurvey.com/Home/AttachSurvey/" + (_this.currentSurvey() && _this.currentSurvey().id); }), css: "link-to-attach", innerCss: "icon-cloud", title: "Attach survey to your SurveyJS service account..." }; } SurveysManager.prototype.getSurveys = function () { return JSON.parse(window.localStorage.getItem(SurveysManager.StorageKey) || "[]").map(function (item) { return new SurveyDescription(__WEBPACK_IMPORTED_MODULE_1_knockout__["observable"](item.name), item.createdAt, item.id, item.resultId, item.postId); }); }; SurveysManager.prototype.setSurveys = function (surveys) { window.localStorage.setItem(SurveysManager.StorageKey, __WEBPACK_IMPORTED_MODULE_1_knockout__["toJSON"](surveys)); }; SurveysManager.prototype.edit = function (model, event) { var survey = this.currentSurvey(); if (!!survey) { if (this.isEditMode()) { survey.name(this.currentSurveyName()); this.setSurveys(this.surveys()); this.api.updateSurveyName(survey.id, survey.name()); this.isEditMode(false); } else { this.currentSurveyName(survey.name()); this.isEditMode(true); event.target.parentNode.parentElement .getElementsByTagName("input")[0] .focus(); } } }; SurveysManager.prototype.addHandler = function (onAdd) { var _this = this; this.isLoading(true); this.api.createSurvey("NewSurvey", function (success, result, response) { var newSurveyDescription = new SurveyDescription(__WEBPACK_IMPORTED_MODULE_1_knockout__["observable"](result.Name), result.CreatedAt, result.Id, result.ResultId, result.PostId); _this.surveys.push(newSurveyDescription); _this.setSurveys(_this.surveys()); _this.editor.surveyId = result.Id; _this.editor.surveyPostId = result.PostId; _this.api.saveSurvey(result.Id, _this.editor.text); _this.currentSurvey(newSurveyDescription); _this.isLoading(false); onAdd && onAdd(success, result, response); }); }; SurveysManager.prototype.add = function () { this.addHandler(); }; SurveysManager.prototype.remove = function () { if (confirm("Do you really want to remove current survey?")) { this.surveys.remove(this.currentSurvey()); this.setSurveys(this.surveys()); this.currentSurvey(this.surveys()[0]); } }; Object.defineProperty(SurveysManager.prototype, "cssEdit", { get: function () { return this.isEditMode() ? "icon-saved" : "icon-edit"; }, enumerable: true, configurable: true }); Object.defineProperty(SurveysManager.prototype, "cssAdd", { get: function () { return !this.surveyId() ? "icon-new" : "icon-fork"; }, enumerable: true, configurable: true }); Object.defineProperty(SurveysManager.prototype, "titleEdit", { get: function () { return this.isEditMode() ? "Save survey name" : "Edit survey name"; }, enumerable: true, configurable: true }); Object.defineProperty(SurveysManager.prototype, "titleAdd", { get: function () { return !this.surveyId() ? "Add new survey" : "Fork this survey"; }, enumerable: true, configurable: true }); SurveysManager.serviceUrlPath = "/api/MySurveys"; SurveysManager.StorageKey = "mySurveys"; return SurveysManager; }()); /***/ }), /* 70 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_knockout__ = __webpack_require__(1); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_knockout___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_knockout__); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__surveyHelper__ = __webpack_require__(5); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__editorLocalization__ = __webpack_require__(0); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__vendor_knockout_sortable_js__ = __webpack_require__(148); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__vendor_knockout_sortable_js___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_3__vendor_knockout_sortable_js__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return PagesEditor; }); var PagesEditor = /** @class */ (function () { function PagesEditor(editor, element) { var _this = this; this.editor = editor; this.element = element; this.isNeedAutoScroll = true; this.isDraggingPage = __WEBPACK_IMPORTED_MODULE_0_knockout__["observable"](false); this.prevPagesForSelector = []; this._selectedPage = __WEBPACK_IMPORTED_MODULE_0_knockout__["observable"](); this.getDisplayText = function (page) { return _this.editor.getObjectDisplayName(page); }; this.pageSelection = __WEBPACK_IMPORTED_MODULE_0_knockout__["computed"]({ read: function () { return _this._selectedPage(); }, write: function (newVal) { if (!!newVal && typeof newVal.getType === "function") { _this.selectedPage = newVal; } else { if (_this.editor.pages().length > 0) { _this.addPage(); } } } }); this.onPageClick = function (model, event) { _this.isNeedAutoScroll = false; _this.editor.selectPage(model); event.stopPropagation(); _this.updateMenuPosition(); }; this.getPageClass = function (page) { var result = page === _this.selectedPage ? "svd_selected_page svd-light-bg-color" : ""; if (_this.editor.pages().indexOf(page) !== _this.editor.pages().length - 1) { result += " svd-border-right-none"; } return result; }; this.getPageMenuIconClass = function (page) { return page === _this.selectedPage && _this.isActive() ? "icon-gearactive" : "icon-gear"; }; this.showActions = function (page) { return page === _this.selectedPage && _this.isActive(); }; this._readOnly = __WEBPACK_IMPORTED_MODULE_0_knockout__["observable"](false); this.pagesSelection = __WEBPACK_IMPORTED_MODULE_0_knockout__["computed"](function () { if (!_this.isDraggingPage()) { _this.prevPagesForSelector = _this.editor.pages(); if (!_this.readOnly) { _this.prevPagesForSelector = _this.prevPagesForSelector.concat([ { name: _this.getLocString("ed.addNewPage") } ]); } } return _this.prevPagesForSelector; }); this._selectedPage(this.editor.pages()[0]); this.editor.koSelectedObject.subscribe(function (newVal) { if (!_this.isActive()) { if (!!editor.survey.currentPage && editor.survey.currentPage != _this._selectedPage()) { _this._selectedPage(editor.survey.currentPage); } return; } _this._selectedPage(newVal.value); if (_this.isNeedAutoScroll) { _this.scrollToSelectedPage(); } else { _this.isNeedAutoScroll = true; } }); } PagesEditor.prototype.addPage = function () { this.editor.addPage(); }; PagesEditor.prototype.copyPage = function (page) { this.editor.copyPage(page); }; PagesEditor.prototype.deletePage = function () { this.editor.deletePage(); }; PagesEditor.prototype.showPageSettings = function (page) { this.editor.showQuestionEditor(page); }; Object.defineProperty(PagesEditor.prototype, "sortableOptions", { get: function () { var _this = this; return { onStart: function (evt) { _this.isDraggingPage(true); }, onEnd: function (evt) { _this.isNeedAutoScroll = false; _this.editor.movePage(evt.oldIndex, evt.newIndex); _this.isDraggingPage(false); }, handle: ".svd-page-name", animation: 150 }; }, enumerable: true, configurable: true }); Object.defineProperty(PagesEditor.prototype, "selectedPage", { get: function () { return this._selectedPage(); }, set: function (newPage) { this.editor.selectPage(newPage); }, enumerable: true, configurable: true }); PagesEditor.prototype.isLastPage = function () { return this.editor.pages().length === 1; }; PagesEditor.prototype.moveLeft = function (model, event) { var pagesElement = this.element.querySelector(".svd-pages"); pagesElement.scrollLeft -= 50; this.updateMenuPosition(); }; PagesEditor.prototype.moveRight = function (model, event) { var pagesElement = this.element.querySelector(".svd-pages"); pagesElement.scrollLeft += 50; this.updateMenuPosition(); }; PagesEditor.prototype.scrollToSelectedPage = function () { var pagesElement = this.element.querySelector(".svd-pages"); if (!pagesElement) return; var index = this.editor.pages().indexOf(this.selectedPage); var pageElement = pagesElement.children[index]; if (!pageElement) return; pagesElement.scrollLeft = pageElement.offsetLeft - pagesElement.offsetLeft - pagesElement.offsetWidth / 2; this.updateMenuPosition(); }; // onKeyDown(el: any, e: KeyboardEvent) { // if (this.koPages().length <= 1) return; // var pages = this.koPages(); // var pageIndex = -1; // for (var i = 0; i < pages.length; i++) { // if (pages[i].page && pages[i].koSelected()) { // pageIndex = i; // } // } // if (pageIndex < 0) return; // if (e.keyCode == 46 && this.onDeletePageCallback) // this.onDeletePageCallback(el.page); // if ((e.keyCode == 37 || e.keyCode == 39) && this.onSelectPageCallback) { // pageIndex += e.keyCode == 37 ? -1 : 1; // if (pageIndex < 0) pageIndex = pages.length - 1; // if (pageIndex >= pages.length) pageIndex = 0; // var page = pages[pageIndex].page; // this.onSelectPageCallback(page); // this.setSelectedPage(page); // } // } PagesEditor.prototype.onWheel = function (model, event) { var pagesElement = model.element.querySelector(".svd-pages"); event = event || window.event; if (!!event.originalEvent) { event = event.originalEvent; } var delta = event.deltaY || event.detail || event.wheelDelta; pagesElement.scrollLeft -= delta; event.preventDefault ? event.preventDefault() : (event.returnValue = false); this.updateMenuPosition(); }; PagesEditor.prototype.updateMenuPosition = function () { var pagesElement = this.element.querySelector(".svd-pages"); var menuElements = pagesElement.getElementsByClassName("svd-page-actions"); for (var i = 0; i < menuElements.length; i++) { menuElements[i].style.left = menuElements[i].parentElement.offsetLeft - pagesElement.scrollLeft + "px"; } }; PagesEditor.prototype.getLocString = function (str) { return __WEBPACK_IMPORTED_MODULE_2__editorLocalization__["a" /* editorLocalization */].getString(str); }; PagesEditor.prototype.isActive = function () { var selectedObject = this.editor.koSelectedObject(); if (!selectedObject) return; return __WEBPACK_IMPORTED_MODULE_1__surveyHelper__["b" /* SurveyHelper */].getObjectType(selectedObject.value) === __WEBPACK_IMPORTED_MODULE_1__surveyHelper__["a" /* ObjType */].Page; }; Object.defineProperty(PagesEditor.prototype, "readOnly", { /** * A boolean property, false by default. Set it to true to deny pages editing. */ get: function () { return (this.editor.readOnly || !this.editor.allowModifyPages || this._readOnly()); }, set: function (newVal) { this._readOnly(newVal); }, enumerable: true, configurable: true }); return PagesEditor; }()); __WEBPACK_IMPORTED_MODULE_0_knockout__["components"].register("pages-editor", { viewModel: { createViewModel: function (params, componentInfo) { return new PagesEditor(params.editor, componentInfo.element); } }, template: { element: "svd-page-selector-template" } }); /***/ }), /* 71 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(3); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__propertyOneSelectedEditor__ = __webpack_require__(16); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__propertyEditorFactory__ = __webpack_require__(4); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__surveyHelper__ = __webpack_require__(5); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return SurveyPropertyCalculatedValueEditor; }); /* unused harmony export SurveyPropertyCalculatedValueItem */ var SurveyPropertyCalculatedValueEditor = /** @class */ (function (_super) { __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__["a" /* __extends */])(SurveyPropertyCalculatedValueEditor, _super); function SurveyPropertyCalculatedValueEditor(property) { return _super.call(this, property) || this; } Object.defineProperty(SurveyPropertyCalculatedValueEditor.prototype, "editorType", { get: function () { return "calculatedvalues"; }, enumerable: true, configurable: true }); SurveyPropertyCalculatedValueEditor.prototype.getObjClassName = function () { return "calculatedvalue"; }; SurveyPropertyCalculatedValueEditor.prototype.createNewEditorItem = function () { var res = _super.prototype.createNewEditorItem.call(this); res.obj.name = __WEBPACK_IMPORTED_MODULE_3__surveyHelper__["b" /* SurveyHelper */].getNewName(this.getObjs(), this.itemBaseName); return res; }; SurveyPropertyCalculatedValueEditor.prototype.createOneSelectedItem = function (obj) { var _this = this; return new SurveyPropertyCalculatedValueItem(obj, function (name, obj, oldName) { return _this.correctName(name, obj, oldName); }); }; SurveyPropertyCalculatedValueEditor.prototype.correctName = function (name, obj, oldName) { var res = this.isNameCorrect(name, obj); if (!res && !!oldName) { this.changeProperty("name", oldName); } return res; }; SurveyPropertyCalculatedValueEditor.prototype.changeProperty = function (propertyName, value) { if (!this.selectedObjectEditor()) return; var propEditor = this.selectedObjectEditor().getPropertyEditorByName(propertyName); if (!propEditor || !propEditor.editor) return; propEditor.editor.koValue(value); }; SurveyPropertyCalculatedValueEditor.prototype.isNameCorrect = function (name, obj) { if (!name || !name.replace(" ", "")) return false; var items = this.getObjs(); for (var i = 0; i < items.length; i++) { if (items[i] == obj) continue; if (items[i].name == name) return false; } return true; }; Object.defineProperty(SurveyPropertyCalculatedValueEditor.prototype, "itemBaseName", { get: function () { return SurveyPropertyCalculatedValueEditor.ValueBaseName; }, enumerable: true, configurable: true }); SurveyPropertyCalculatedValueEditor.prototype.getObjs = function () { var res = []; var items = this.koItems(); for (var i = 0; i < items.length; i++) { if (!items[i] || !items[i].obj) continue; res.push(items[i].obj); } return res; }; SurveyPropertyCalculatedValueEditor.ValueBaseName = "var"; return SurveyPropertyCalculatedValueEditor; }(__WEBPACK_IMPORTED_MODULE_1__propertyOneSelectedEditor__["a" /* SurveyPropertyOneSelectedEditor */])); var SurveyPropertyCalculatedValueItem = /** @class */ (function (_super) { __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__["a" /* __extends */])(SurveyPropertyCalculatedValueItem, _super); function SurveyPropertyCalculatedValueItem(obj, correctName) { var _this = _super.call(this, obj) || this; _this.obj = obj; _this.correctName = correctName; obj["oldName"] = obj["name"]; var self = _this; obj.registerFunctionOnPropertyValueChanged("expression", function () { self.objectChanged(); }); obj.registerFunctionOnPropertyValueChanged("name", function () { self.nameChanged(); }); return _this; } SurveyPropertyCalculatedValueItem.prototype.nameChanged = function () { var name = this.obj["name"]; if (this.obj["oldName"] == name) return; if (this.correctName && !this.correctName(name, this.obj, this.obj["oldName"])) { this.obj["name"] = this.obj["oldName"]; return; } this.obj["oldName"] = name; this.objectChanged(); }; SurveyPropertyCalculatedValueItem.prototype.getText = function () { var expression = this.obj["expression"]; var name = this.obj["name"]; return name + " = " + (!!expression ? expression : "?"); }; return SurveyPropertyCalculatedValueItem; }(__WEBPACK_IMPORTED_MODULE_1__propertyOneSelectedEditor__["b" /* SurveyPropertyOneSelectedItem */])); __WEBPACK_IMPORTED_MODULE_2__propertyEditorFactory__["a" /* SurveyPropertyEditorFactory */].registerEditor("calculatedvalues", function (property) { return new SurveyPropertyCalculatedValueEditor(property); }); /***/ }), /* 72 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(3); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_knockout__ = __webpack_require__(1); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_knockout___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_knockout__); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_survey_knockout__ = __webpack_require__(2); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_survey_knockout___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_survey_knockout__); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__propertyModalEditor__ = __webpack_require__(7); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__editorLocalization__ = __webpack_require__(0); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__propertyEditorFactory__ = __webpack_require__(4); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return SurveyPropertyCellsEditor; }); var SurveyPropertyCellsEditor = /** @class */ (function (_super) { __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__["a" /* __extends */])(SurveyPropertyCellsEditor, _super); function SurveyPropertyCellsEditor(property) { var _this = _super.call(this, property) || this; _this.koRows = __WEBPACK_IMPORTED_MODULE_1_knockout__["observableArray"](); _this.koColumns = __WEBPACK_IMPORTED_MODULE_1_knockout__["observableArray"](); _this.koCanEdit = __WEBPACK_IMPORTED_MODULE_1_knockout__["observable"](false); return _this; } SurveyPropertyCellsEditor.prototype.getValueText = function (value) { var strName = !value ? "empty" : "notEmpty"; return __WEBPACK_IMPORTED_MODULE_4__editorLocalization__["a" /* editorLocalization */].getPropertyInEditor(strName); }; SurveyPropertyCellsEditor.prototype.beforeShow = function () { _super.prototype.beforeShow.call(this); this.setupCells(); }; SurveyPropertyCellsEditor.prototype.onBeforeApply = function () { if (!this.canEdit) return; var matrix = new __WEBPACK_IMPORTED_MODULE_2_survey_knockout__["QuestionMatrix"](""); matrix.setSurveyImpl(this.object.survey); matrix.rows = this.rows; matrix.columns = this.columns; matrix.cells = this.object.cells; var rows = this.koRows(); for (var i = 0; i < rows.length; i++) { var row = rows[i]; var cells = row.koCells(); for (var j = 0; j < matrix.columns.length; j++) { if (row.rowIndex < 0) { matrix.setDefaultCellText(j, cells[j].text()); } else { matrix.setCellText(rows[i].rowIndex, j, cells[j].text()); } } } if (!matrix.cells.isEmpty) { this.koValue(matrix.cells); } else { this.koValue(null); } }; Object.defineProperty(SurveyPropertyCellsEditor.prototype, "editorType", { get: function () { return "cells"; }, enumerable: true, configurable: true }); SurveyPropertyCellsEditor.prototype.onValueChanged = function () { if (this.isShowingModal) { this.setupCells(); } }; Object.defineProperty(SurveyPropertyCellsEditor.prototype, "canEdit", { get: function () { return this.rows.length > 0 && this.columns.length > 0; }, enumerable: true, configurable: true }); Object.defineProperty(SurveyPropertyCellsEditor.prototype, "rows", { get: function () { return this.object && this.object.rows ? this.object.rows : []; }, enumerable: true, configurable: true }); Object.defineProperty(SurveyPropertyCellsEditor.prototype, "columns", { get: function () { return this.object && this.object.columns ? this.object.columns : []; }, enumerable: true, configurable: true }); SurveyPropertyCellsEditor.prototype.getCellText = function (rowIndex, columnIndex) { if (rowIndex < 0) return this.object.getDefaultCellText(columnIndex); return this.object.getCellText(rowIndex, columnIndex); }; SurveyPropertyCellsEditor.prototype.setupCells = function () { this.koRows([]); this.koColumns([]); this.koCanEdit(this.canEdit); if (!this.canEdit) return; var cols = []; for (var i = 0; i < this.columns.length; i++) { cols.push(this.columns[i].text); } var rows = []; rows.push(this.createRow(-1, __WEBPACK_IMPORTED_MODULE_4__editorLocalization__["a" /* editorLocalization */].getString("pe.cellsDefaultRow"))); for (var i = 0; i < this.rows.length; i++) { rows.push(this.createRow(i, this.rows[i].text)); } this.koColumns(cols); this.koRows(rows); }; SurveyPropertyCellsEditor.prototype.createRow = function (rowIndex, rowText) { var row = { rowIndex: rowIndex, rowText: rowText, koCells: __WEBPACK_IMPORTED_MODULE_1_knockout__["observableArray"]() }; var cells = []; for (var i = 0; i < this.columns.length; i++) { cells.push({ text: __WEBPACK_IMPORTED_MODULE_1_knockout__["observable"](this.getCellText(rowIndex, i)) }); } row.koCells(cells); return row; }; return SurveyPropertyCellsEditor; }(__WEBPACK_IMPORTED_MODULE_3__propertyModalEditor__["a" /* SurveyPropertyModalEditor */])); __WEBPACK_IMPORTED_MODULE_5__propertyEditorFactory__["a" /* SurveyPropertyEditorFactory */].registerEditor("cells", function (property) { return new SurveyPropertyCellsEditor(property); }); /***/ }), /* 73 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(3); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__propertyOneSelectedEditor__ = __webpack_require__(16); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__propertyEditorFactory__ = __webpack_require__(4); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__entries__ = __webpack_require__(20); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return SurveyPropertyHtmlConditionEditor; }); /* unused harmony export SurveyPropertyHtmlConditionItem */ var SurveyPropertyHtmlConditionEditor = /** @class */ (function (_super) { __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__["a" /* __extends */])(SurveyPropertyHtmlConditionEditor, _super); function SurveyPropertyHtmlConditionEditor(property) { return _super.call(this, property) || this; } Object.defineProperty(SurveyPropertyHtmlConditionEditor.prototype, "editorType", { get: function () { return "htmlconditions"; }, enumerable: true, configurable: true }); SurveyPropertyHtmlConditionEditor.prototype.getObjClassName = function () { return "htmlconditionitem"; }; SurveyPropertyHtmlConditionEditor.prototype.createOneSelectedItem = function (obj) { return new SurveyPropertyHtmlConditionItem(obj); }; return SurveyPropertyHtmlConditionEditor; }(__WEBPACK_IMPORTED_MODULE_1__propertyOneSelectedEditor__["a" /* SurveyPropertyOneSelectedEditor */])); var SurveyPropertyHtmlConditionItem = /** @class */ (function (_super) { __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__["a" /* __extends */])(SurveyPropertyHtmlConditionItem, _super); function SurveyPropertyHtmlConditionItem(obj) { var _this = _super.call(this, obj) || this; _this.obj = obj; var self = _this; obj.registerFunctionOnPropertyValueChanged("expression", function () { self.objectChanged(); }); return _this; } SurveyPropertyHtmlConditionItem.prototype.getText = function () { var expression = this.obj["expression"]; return (__WEBPACK_IMPORTED_MODULE_3__entries__["editorLocalization"].getString("ed.completedHtmlOnConditionItemText") + " " + (!!expression ? expression : "?")); }; return SurveyPropertyHtmlConditionItem; }(__WEBPACK_IMPORTED_MODULE_1__propertyOneSelectedEditor__["b" /* SurveyPropertyOneSelectedItem */])); __WEBPACK_IMPORTED_MODULE_2__propertyEditorFactory__["a" /* SurveyPropertyEditorFactory */].registerEditor("htmlconditions", function (property) { return new SurveyPropertyHtmlConditionEditor(property); }); /***/ }), /* 74 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(3); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_knockout__ = __webpack_require__(1); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_knockout___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_knockout__); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_survey_knockout__ = __webpack_require__(2); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_survey_knockout___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_survey_knockout__); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__editorLocalization__ = __webpack_require__(0); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__propertyEditorFactory__ = __webpack_require__(4); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__utils_utils__ = __webpack_require__(8); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__questionEditors_questionEditorDefinition__ = __webpack_require__(18); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__propertyNestedPropertyEditor__ = __webpack_require__(15); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_8__entries__ = __webpack_require__(20); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return SurveyPropertyItemValuesEditor; }); /* unused harmony export SurveyPropertyItemValuesEditorItem */ var SurveyPropertyItemValuesEditor = /** @class */ (function (_super) { __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__["a" /* __extends */])(SurveyPropertyItemValuesEditor, _super); function SurveyPropertyItemValuesEditor(property) { var _this = _super.call(this, property) || this; _this.optionsShowTextView = true; _this.koShowTextView = __WEBPACK_IMPORTED_MODULE_1_knockout__["observable"](true); var self = _this; if (property) { _this.detailDefinition = __WEBPACK_IMPORTED_MODULE_6__questionEditors_questionEditorDefinition__["a" /* SurveyQuestionEditorDefinition */].definition[_this.getItemValueClassName()]; } _this.koItemsText = __WEBPACK_IMPORTED_MODULE_1_knockout__["observable"](""); _this.koHasDetails = __WEBPACK_IMPORTED_MODULE_1_knockout__["observable"](true); _this.koActiveView.subscribe(function (newValue) { if (newValue == "form") self.updateItems(self.koItemsText()); else self.koItemsText(self.getItemsText()); }); _this.changeToTextViewClick = function () { self.koActiveView("text"); }; _this.changeToFormViewClick = function () { self.koActiveView("form"); }; _this.modalName = "modelEditor" + "itemvalues" + __WEBPACK_IMPORTED_MODULE_8__entries__["SurveyPropertyModalEditor"].idCounter; __WEBPACK_IMPORTED_MODULE_8__entries__["SurveyPropertyModalEditor"].idCounter++; _this.modalNameTarget = "#" + _this.modalName; return _this; } Object.defineProperty(SurveyPropertyItemValuesEditor.prototype, "editorType", { get: function () { return "itemvalue[]"; }, enumerable: true, configurable: true }); Object.defineProperty(SurveyPropertyItemValuesEditor.prototype, "editorTypeTemplate", { get: function () { return "itemvalues"; }, enumerable: true, configurable: true }); Object.defineProperty(SurveyPropertyItemValuesEditor.prototype, "hasDetailButton", { get: function () { return !!this.detailDefinition; }, enumerable: true, configurable: true }); SurveyPropertyItemValuesEditor.prototype.getItemValueClassName = function () { return this.property ? this.editorType + "@" + this.property.name : ""; }; SurveyPropertyItemValuesEditor.prototype.getEditorName = function () { if (!this.koEditItem() || !this.koEditItem().item) return ""; return __WEBPACK_IMPORTED_MODULE_3__editorLocalization__["a" /* editorLocalization */] .getString("pe.itemEdit")["format"](this.koEditItem().item.value); }; SurveyPropertyItemValuesEditor.prototype.beforeShow = function () { _super.prototype.beforeShow.call(this); var props = this.getDefinedProperties(); if (!!props && props.length > 0) { this.createColumns(); } this.koHasDetails(this.hasDetailsProperties()); }; SurveyPropertyItemValuesEditor.prototype.getProperties = function () { var props = this.getDefinedProperties(); if (!!props && props.length > 0) return props; return this.getDefaultProperties(); }; SurveyPropertyItemValuesEditor.prototype.getDefinedProperties = function () { if (!this.property || !this.object || !this.object.getType) return []; var properties = __WEBPACK_IMPORTED_MODULE_6__questionEditors_questionEditorDefinition__["a" /* SurveyQuestionEditorDefinition */].getProperties(this.object.getType() + "@" + this.property.name); if (properties && properties.length > 0) { return this.getPropertiesByNames(this.property.className, properties); } return []; }; SurveyPropertyItemValuesEditor.prototype.getDefaultProperties = function () { var properties = __WEBPACK_IMPORTED_MODULE_2_survey_knockout__["Serializer"].getProperties(this.property.className); var res = []; for (var i = 0; i < properties.length; i++) { if (!properties[i].visible) continue; res.push(properties[i]); } return res; }; SurveyPropertyItemValuesEditor.prototype.createEditorOptions = function () { var options = _super.prototype.createEditorOptions.call(this); options.showTextView = true; options.itemsEntryType = (this.options["options"] && this.options["options"].itemValuesEditorEntryType) || "form"; return options; }; SurveyPropertyItemValuesEditor.prototype.onSetEditorOptions = function (editorOptions) { _super.prototype.onSetEditorOptions.call(this, editorOptions); this.optionsShowTextView = editorOptions.showTextView; this.updateShowTextViewVisibility(); this.koActiveView(editorOptions.itemsEntryType || "form"); }; SurveyPropertyItemValuesEditor.prototype.createNewEditorItem = function () { var _this = this; var nextValue = null; var values = this.koItems().map(function (item) { return item.item.itemValue; }); var itemText = this.property.getBaseValue(); if (!itemText) { itemText = __WEBPACK_IMPORTED_MODULE_2_survey_knockout__["surveyLocalization"].getString("choices_Item"); } nextValue = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_5__utils_utils__["a" /* getNextValue */])(itemText, values); var itemValue = this.createEditorItemValueCore(nextValue); if (this.options) { this.options.onItemValueAddedCallback(this.object, this.editablePropertyName, itemValue, values); } return new SurveyPropertyItemValuesEditorItem(itemValue, function () { return _this.columns; }, this.options, this.getItemValueClassName()); }; SurveyPropertyItemValuesEditor.prototype.createEditorItem = function (item) { var _this = this; var itemValue = this.createEditorItemValueCore(null); itemValue.setData(item); return new SurveyPropertyItemValuesEditorItem(itemValue, function () { return _this.columns; }, this.options, this.getItemValueClassName()); }; SurveyPropertyItemValuesEditor.prototype.createEditorItemValueCore = function (item) { var itemValue = __WEBPACK_IMPORTED_MODULE_2_survey_knockout__["Serializer"].createClass(this.property.className); itemValue.setData(item); if (this.object) { itemValue["survey"] = this.object.survey; itemValue["object"] = this.object; } itemValue.locOwner = this; return itemValue; }; SurveyPropertyItemValuesEditor.prototype.createItemFromEditorItem = function (editorItem) { var item = editorItem.item; var alwaySaveTextInPropertyEditors = this.options && this.options.alwaySaveTextInPropertyEditors; if (!alwaySaveTextInPropertyEditors && item.text == item.value && !this.isTextLocalized(item)) { item.text = null; } var itemValue = __WEBPACK_IMPORTED_MODULE_2_survey_knockout__["Serializer"].createClass(item.getType()); itemValue.setData(item); delete itemValue["survey"]; delete itemValue["object"]; return itemValue; }; SurveyPropertyItemValuesEditor.prototype.isTextLocalized = function (item) { return Object.keys(item.locText.values).length > 1; }; SurveyPropertyItemValuesEditor.prototype.onValueChanged = function () { _super.prototype.onValueChanged.call(this); if (this.isShowingModal) { if (this.koActiveView() !== "form") { this.koItemsText(this.getItemsText()); } } this.updateShowTextViewVisibility(); }; SurveyPropertyItemValuesEditor.prototype.onBeforeApply = function () { if (this.koActiveView() !== "form") { this.updateItems(this.koItemsText()); } _super.prototype.onBeforeApply.call(this); }; SurveyPropertyItemValuesEditor.prototype.onListDetailViewChanged = function () { _super.prototype.onListDetailViewChanged.call(this); this.updateShowTextViewVisibility(); }; SurveyPropertyItemValuesEditor.prototype.updateItems = function (text) { var items = []; if (text) { var properties = this.getProperties(); var texts = text.split("\n"); for (var i = 0; i < texts.length; i++) { if (!texts[i]) continue; var elements = texts[i].split(__WEBPACK_IMPORTED_MODULE_2_survey_knockout__["ItemValue"].Separator); var valueItem = __WEBPACK_IMPORTED_MODULE_2_survey_knockout__["Serializer"].createClass(this.property.className); properties.forEach(function (p, i) { valueItem[p.name] = elements[i]; }); items.push(valueItem); } } this.koItems(this.getItemsFromValue(items)); }; SurveyPropertyItemValuesEditor.prototype.getItemsText = function () { return this.koItems() .filter(function (item) { return !item.cells[0].hasError; }) .map(function (item) { return item.cells .map(function (cell) { return cell.value || ""; }) .join(__WEBPACK_IMPORTED_MODULE_2_survey_knockout__["ItemValue"].Separator) .replace(/\|$/, ""); }) .join("\n"); }; SurveyPropertyItemValuesEditor.prototype.updateShowTextViewVisibility = function () { if (!this.koShowTextView) return; if (!this.optionsShowTextView || this.columns.length == 0) { this.koShowTextView(false); return; } this.koShowTextView(this.isValuePropertyVisible() && !this.hasVisibleIfOrEnableIf() && !this.hasMultipleLanguage()); }; SurveyPropertyItemValuesEditor.prototype.hasMultipleLanguage = function () { var items = this.koItems(); for (var i = 0; i < items.length; i++) { if (items[i].item.locText.hasNonDefaultText()) return true; } return false; }; SurveyPropertyItemValuesEditor.prototype.isValuePropertyVisible = function () { var valueProp = __WEBPACK_IMPORTED_MODULE_2_survey_knockout__["Serializer"].findProperty("itemvalue", "value"); return !!valueProp && valueProp.visible && !valueProp.readOnly; }; SurveyPropertyItemValuesEditor.prototype.hasVisibleIfOrEnableIf = function () { var items = this.koItems(); for (var i = 0; i < items.length; i++) { if (!!items[i].item.visibleIf || items[i].item.enableIf) return true; } return false; }; SurveyPropertyItemValuesEditor.prototype.hasDetailsProperties = function () { return true; }; return SurveyPropertyItemValuesEditor; }(__WEBPACK_IMPORTED_MODULE_7__propertyNestedPropertyEditor__["a" /* SurveyNestedPropertyEditor */])); var SurveyPropertyItemValuesEditorItem = /** @class */ (function (_super) { __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__["a" /* __extends */])(SurveyPropertyItemValuesEditorItem, _super); function SurveyPropertyItemValuesEditorItem(item, getColumns, options, className) { if (className === void 0) { className = ""; } var _this = _super.call(this, item, getColumns, options) || this; _this.item = item; _this.className = className; return _this; } SurveyPropertyItemValuesEditorItem.prototype.getClassName = function () { return !!this.className ? this.className : this.obj.getType(); }; return SurveyPropertyItemValuesEditorItem; }(__WEBPACK_IMPORTED_MODULE_7__propertyNestedPropertyEditor__["b" /* SurveyNestedPropertyEditorItem */])); __WEBPACK_IMPORTED_MODULE_4__propertyEditorFactory__["a" /* SurveyPropertyEditorFactory */].registerEditor("itemvalue[]", function (property) { return new SurveyPropertyItemValuesEditor(property); }, "itemvalue"); /***/ }), /* 75 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(3); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_survey_knockout__ = __webpack_require__(2); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_survey_knockout___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_survey_knockout__); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__editorLocalization__ = __webpack_require__(0); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__propertyNestedPropertyEditor__ = __webpack_require__(15); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__propertyEditorFactory__ = __webpack_require__(4); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__utils_utils__ = __webpack_require__(8); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return SurveyPropertyDropdownColumnsEditor; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return SurveyPropertyMatrixDropdownColumnsItem; }); var SurveyPropertyDropdownColumnsEditor = /** @class */ (function (_super) { __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__["a" /* __extends */])(SurveyPropertyDropdownColumnsEditor, _super); function SurveyPropertyDropdownColumnsEditor(property) { return _super.call(this, property) || this; } Object.defineProperty(SurveyPropertyDropdownColumnsEditor.prototype, "editorType", { get: function () { return "matrixdropdowncolumns"; }, enumerable: true, configurable: true }); SurveyPropertyDropdownColumnsEditor.prototype.getEditorName = function () { if (!this.koEditItem()) return ""; return __WEBPACK_IMPORTED_MODULE_2__editorLocalization__["a" /* editorLocalization */] .getString("pe.columnEdit")["format"](this.koEditItem().column.name); }; SurveyPropertyDropdownColumnsEditor.prototype.createNewEditorItem = function () { var _this = this; var newColumn = this.createEditorColumnItemCore(null); newColumn.name = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_5__utils_utils__["a" /* getNextValue */])("", this.getColumnNames()); var columns = []; for (var i = 0; i < this.koItems().length; i++) { columns.push(this.koItems()[i].column); } columns.push(newColumn); if (this.options) { this.options.onMatrixDropdownColumnAddedCallback(this.object, newColumn, columns); } return new SurveyPropertyMatrixDropdownColumnsItem(newColumn, function () { return _this.columns; }, this.options); }; SurveyPropertyDropdownColumnsEditor.prototype.createEditorItem = function (item) { var _this = this; var newColumn = this.createEditorColumnItemCore(item); return new SurveyPropertyMatrixDropdownColumnsItem(newColumn, function () { return _this.columns; }, this.options); }; SurveyPropertyDropdownColumnsEditor.prototype.createItemFromEditorItem = function (editorItem) { var newColumn = new __WEBPACK_IMPORTED_MODULE_1_survey_knockout__["MatrixDropdownColumn"](""); var json = new __WEBPACK_IMPORTED_MODULE_1_survey_knockout__["JsonObject"]().toJsonObject(editorItem.column); new __WEBPACK_IMPORTED_MODULE_1_survey_knockout__["JsonObject"]().toObject(json, newColumn); return newColumn; }; SurveyPropertyDropdownColumnsEditor.prototype.createEditorColumnItemCore = function (item) { var newColumn = new __WEBPACK_IMPORTED_MODULE_1_survey_knockout__["MatrixDropdownColumn"](""); newColumn["object"] = this.object; newColumn.colOwner = this.object; if (item) { var json = new __WEBPACK_IMPORTED_MODULE_1_survey_knockout__["JsonObject"]().toJsonObject(item); new __WEBPACK_IMPORTED_MODULE_1_survey_knockout__["JsonObject"]().toObject(json, newColumn); } return newColumn; }; SurveyPropertyDropdownColumnsEditor.prototype.getProperties = function () { var names = this.getPropertiesNames("matrixdropdowncolumn", [ "isRequired", "cellType", "name", "title" ]); return this.getPropertiesByNames("matrixdropdowncolumn", names); }; SurveyPropertyDropdownColumnsEditor.prototype.getColumnNames = function () { var res = []; var items = this.koItems(); for (var i = 0; i < items.length; i++) { var name = items[i].column.name; if (!!name) { res.push(name); } } return res; }; return SurveyPropertyDropdownColumnsEditor; }(__WEBPACK_IMPORTED_MODULE_3__propertyNestedPropertyEditor__["a" /* SurveyNestedPropertyEditor */])); var SurveyPropertyMatrixDropdownColumnsItem = /** @class */ (function (_super) { __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__["a" /* __extends */])(SurveyPropertyMatrixDropdownColumnsItem, _super); function SurveyPropertyMatrixDropdownColumnsItem(column, getColumns, options) { if (options === void 0) { options = null; } var _this = _super.call(this, column, getColumns, options) || this; _this.column = column; var self = _this; column.registerFunctionOnPropertyValueChanged("cellType", function () { self.resetSurveyQuestionEditor(); }, "colEdit"); return _this; } SurveyPropertyMatrixDropdownColumnsItem.prototype.getClassName = function () { var base = "matrixdropdowncolumn@"; if (!this.column["object"] || this.obj.cellType !== "default") { return base + this.obj.cellType; } else { return base + this.column["object"].cellType; } }; return SurveyPropertyMatrixDropdownColumnsItem; }(__WEBPACK_IMPORTED_MODULE_3__propertyNestedPropertyEditor__["b" /* SurveyNestedPropertyEditorItem */])); __WEBPACK_IMPORTED_MODULE_4__propertyEditorFactory__["a" /* SurveyPropertyEditorFactory */].registerEditor("matrixdropdowncolumns", function (property) { return new SurveyPropertyDropdownColumnsEditor(property); }); /***/ }), /* 76 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(3); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_knockout__ = __webpack_require__(1); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_knockout___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_knockout__); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_survey_knockout__ = __webpack_require__(2); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_survey_knockout___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_survey_knockout__); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__propertyModalEditor__ = __webpack_require__(7); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__editorLocalization__ = __webpack_require__(0); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__propertyEditorFactory__ = __webpack_require__(4); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return SurveyPropertyMultipleValuesEditor; }); var SurveyPropertyMultipleValuesEditor = /** @class */ (function (_super) { __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__["a" /* __extends */])(SurveyPropertyMultipleValuesEditor, _super); function SurveyPropertyMultipleValuesEditor(property) { var _this = _super.call(this, property) || this; _this.items = []; _this.koEditingValue = __WEBPACK_IMPORTED_MODULE_1_knockout__["observableArray"](); _this.koCategories = __WEBPACK_IMPORTED_MODULE_1_knockout__["observableArray"](); _this.koCategories = __WEBPACK_IMPORTED_MODULE_1_knockout__["observableArray"](); _this.updateChoices(); return _this; } SurveyPropertyMultipleValuesEditor.prototype.getValueText = function (value) { if (!value) return __WEBPACK_IMPORTED_MODULE_4__editorLocalization__["a" /* editorLocalization */].getString("pe.empty"); if (!Array.isArray(value)) value = [value]; var str = "["; for (var i = 0; i < value.length; i++) { if (i > 0) str += ", "; str += this.getTextByItemValue(value[i]); } str += "]"; return str; }; SurveyPropertyMultipleValuesEditor.prototype.setObject = function (value) { _super.prototype.setObject.call(this, value); this.updateChoices(); this.setEditingValue(); }; SurveyPropertyMultipleValuesEditor.prototype.updateValue = function () { _super.prototype.updateValue.call(this); this.setEditingValue(); }; SurveyPropertyMultipleValuesEditor.prototype.onBeforeApply = function () { this.koValue([].concat(this.koEditingValue())); }; Object.defineProperty(SurveyPropertyMultipleValuesEditor.prototype, "editorType", { get: function () { return "multiplevalues"; }, enumerable: true, configurable: true }); SurveyPropertyMultipleValuesEditor.prototype.getBackgroundCls = function (value) { return this.koEditingValue().indexOf("" + value) === -1 ? "svd-light-background-color" : "svd-main-background-color"; }; SurveyPropertyMultipleValuesEditor.prototype.updateDynamicProperties = function () { _super.prototype.updateDynamicProperties.call(this); this.updateChoices(); }; SurveyPropertyMultipleValuesEditor.prototype.setChoices = function (choices) { if (!choices || !Array.isArray(choices) || !choices.length) return; __WEBPACK_IMPORTED_MODULE_2_survey_knockout__["ItemValue"].setData(this.items, choices); this.setCategories(choices); this.items.sort(function (a, b) { var ca = !!a.category ? a.category : ""; var cb = !!b.category ? b.category : ""; if (ca != cb) return ca < cb ? -1 : 1; ca = !!a.text ? a.text : ""; cb = !!b.text ? b.text : ""; if (ca != cb) return ca < cb ? -1 : 1; if (ca.value < cb.value) return -1; if (ca.value > cb.value) return 1; return 0; }); this.koCategories(this.buildCategories()); }; SurveyPropertyMultipleValuesEditor.prototype.updateChoices = function () { var self = this; var choices = this.property["getChoices"](this.object, function (choices) { self.setChoices(choices); }); this.setChoices(choices); }; SurveyPropertyMultipleValuesEditor.prototype.getTextByItemValue = function (val) { for (var i = 0; i < this.items.length; i++) { if (this.items[i].value == val) return this.items[i].text; } return val; }; SurveyPropertyMultipleValuesEditor.prototype.setEditingValue = function () { var val = this.koValue(); if (val == null || val == undefined) val = []; if (!Array.isArray(val)) val = [val]; this.koEditingValue(val); }; SurveyPropertyMultipleValuesEditor.prototype.setCategories = function (choices) { for (var i = 0; i < this.items.length; i++) { if (!!choices[i].category) { this.items[i].category = choices[i].category; } } }; SurveyPropertyMultipleValuesEditor.prototype.buildCategories = function () { var res = []; var curCategory = ""; var category = null; for (var i = 0; i < this.items.length; i++) { var item = this.items[i]; var itemCategory = !!item.category ? item.category : ""; if (category == null || curCategory != itemCategory) { curCategory = itemCategory; category = { koTitleVisible: __WEBPACK_IMPORTED_MODULE_1_knockout__["observable"](curCategory != ""), koCategory: __WEBPACK_IMPORTED_MODULE_1_knockout__["observable"](curCategory), koItems: __WEBPACK_IMPORTED_MODULE_1_knockout__["observableArray"](), editor: this }; res.push(category); } category.koItems.push(item); } return res; }; return SurveyPropertyMultipleValuesEditor; }(__WEBPACK_IMPORTED_MODULE_3__propertyModalEditor__["a" /* SurveyPropertyModalEditor */])); __WEBPACK_IMPORTED_MODULE_5__propertyEditorFactory__["a" /* SurveyPropertyEditorFactory */].registerEditor("multiplevalues", function (property) { return new SurveyPropertyMultipleValuesEditor(property); }); /***/ }), /* 77 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(3); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_knockout__ = __webpack_require__(1); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_knockout___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_knockout__); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_survey_knockout__ = __webpack_require__(2); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_survey_knockout___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_survey_knockout__); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__propertyModalEditor__ = __webpack_require__(7); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__editorLocalization__ = __webpack_require__(0); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__propertyEditorFactory__ = __webpack_require__(4); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return SurveyPropertyResultfullEditor; }); /* unused harmony export SurveyPropertyResultfullEditorItem */ var SurveyPropertyResultfullEditor = /** @class */ (function (_super) { __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__["a" /* __extends */])(SurveyPropertyResultfullEditor, _super); function SurveyPropertyResultfullEditor(property) { var _this = _super.call(this, property) || this; _this.items = []; _this.koItems = __WEBPACK_IMPORTED_MODULE_1_knockout__["observableArray"](); _this.createSurvey(); return _this; } Object.defineProperty(SurveyPropertyResultfullEditor.prototype, "editorType", { get: function () { return "restfull"; }, enumerable: true, configurable: true }); Object.defineProperty(SurveyPropertyResultfullEditor.prototype, "restfullValue", { get: function () { if (this.editingObject) return this.editingObject[this.property.name]; if (this.editingValue) return this.editingValue; return null; }, enumerable: true, configurable: true }); SurveyPropertyResultfullEditor.prototype.getValueText = function (value) { if (!value || !value.url) return __WEBPACK_IMPORTED_MODULE_4__editorLocalization__["a" /* editorLocalization */].getString("pe.empty"); var str = value.url; if (str.length > 20) { str = str.substr(0, 20) + "..."; } return str; }; SurveyPropertyResultfullEditor.prototype.addItem = function (propName, val) { var self = this; this.items.push(new SurveyPropertyResultfullEditorItem(propName, val ? val[propName] : "", function (item) { self.onItemValueChanged(item); })); }; SurveyPropertyResultfullEditor.prototype.onItemValueChanged = function (item) { this.question.choicesByUrl[item.name] = item.koValue(); this.run(); }; SurveyPropertyResultfullEditor.prototype.onValueChanged = function () { var val = this.restfullValue; this.items = []; this.addItem("url", val); this.addItem("path", val); this.addItem("valueName", val); this.addItem("titleName", val); if (val && val["getCustomPropertiesNames"]) { var customProperties = val["getCustomPropertiesNames"](); for (var i = 0; i < customProperties.length; i++) { var propName = customProperties[i]; if (propName === "visibleIfName") continue; //TODO remove later this.addItem(propName, val); } } this.koItems(this.items); }; SurveyPropertyResultfullEditor.prototype.onBeforeApply = function () { var val = new __WEBPACK_IMPORTED_MODULE_2_survey_knockout__["ChoicesRestfull"](); val["owner"] = this.editingObject; for (var i = 0; i < this.items.length; i++) { var item = this.items[i]; val[item.name] = item.koValue(); } this.setValueCore(val); }; SurveyPropertyResultfullEditor.prototype.run = function () { this.question.choicesByUrl.run(); }; SurveyPropertyResultfullEditor.prototype.createSurvey = function () { this.survey = !!this.options ? this.options.createSurvey({}, "restfulEditor") : new __WEBPACK_IMPORTED_MODULE_2_survey_knockout__["Survey"](); this.survey.showNavigationButtons = false; this.survey.showQuestionNumbers = "off"; var page = this.survey.addNewPage("page1"); this.question = page.addNewQuestion("dropdown", "q1"); this.question.title = __WEBPACK_IMPORTED_MODULE_4__editorLocalization__["a" /* editorLocalization */].getString("pe.testService"); this.question.choices = []; }; return SurveyPropertyResultfullEditor; }(__WEBPACK_IMPORTED_MODULE_3__propertyModalEditor__["a" /* SurveyPropertyModalEditor */])); var SurveyPropertyResultfullEditorItem = /** @class */ (function () { function SurveyPropertyResultfullEditorItem(name, val, onValueChanged) { this.name = name; this.onValueChanged = onValueChanged; this.isSetttingValue = false; this.koValue = __WEBPACK_IMPORTED_MODULE_1_knockout__["observable"](val ? val : ""); var self = this; this.koValue.subscribe(function (newValue) { if (!self.isSetttingValue) { self.onValueChanged(self); } }); } SurveyPropertyResultfullEditorItem.prototype.setValue = function (val) { this.isSetttingValue = true; this.koValue(val); this.isSetttingValue = false; }; return SurveyPropertyResultfullEditorItem; }()); __WEBPACK_IMPORTED_MODULE_5__propertyEditorFactory__["a" /* SurveyPropertyEditorFactory */].registerEditor("restfull", function (property) { return new SurveyPropertyResultfullEditor(property); }); /***/ }), /* 78 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(3); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_survey_knockout__ = __webpack_require__(2); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_survey_knockout___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_survey_knockout__); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__surveyHelper__ = __webpack_require__(5); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__editorLocalization__ = __webpack_require__(0); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__propertyNestedPropertyEditor__ = __webpack_require__(15); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__propertyEditorFactory__ = __webpack_require__(4); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return SurveyPropertyTextItemsEditor; }); /* unused harmony export SurveyPropertyTextItemsItem */ var SurveyPropertyTextItemsEditor = /** @class */ (function (_super) { __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__["a" /* __extends */])(SurveyPropertyTextItemsEditor, _super); function SurveyPropertyTextItemsEditor(property) { return _super.call(this, property) || this; } Object.defineProperty(SurveyPropertyTextItemsEditor.prototype, "editorType", { get: function () { return "textitems"; }, enumerable: true, configurable: true }); SurveyPropertyTextItemsEditor.prototype.getEditorName = function () { if (!this.koEditItem()) return ""; return this.koEditItem().text; }; SurveyPropertyTextItemsEditor.prototype.createNewEditorItem = function () { var _this = this; var newItem = new __WEBPACK_IMPORTED_MODULE_1_survey_knockout__["MultipleTextItem"](this.getNewName()); newItem["object"] = this.object; //newColumn.colOwner = TODO set colOwner. return new SurveyPropertyTextItemsItem(newItem, function () { return _this.columns; }, this.options); }; SurveyPropertyTextItemsEditor.prototype.createEditorItem = function (item) { var _this = this; return new SurveyPropertyTextItemsItem(item, function () { return _this.columns; }, this.options); }; SurveyPropertyTextItemsEditor.prototype.createItemFromEditorItem = function (editorItem) { var newItem = new __WEBPACK_IMPORTED_MODULE_1_survey_knockout__["MultipleTextItem"](); var json = new __WEBPACK_IMPORTED_MODULE_1_survey_knockout__["JsonObject"]().toJsonObject(editorItem.item); new __WEBPACK_IMPORTED_MODULE_1_survey_knockout__["JsonObject"]().toObject(json, newItem); return newItem; }; SurveyPropertyTextItemsEditor.prototype.getProperties = function () { var names = this.getPropertiesNames("multipletext@items", [ "isRequired", "name", "title" ]); return this.getPropertiesByNames("multipletextitem", names); }; SurveyPropertyTextItemsEditor.prototype.getNewName = function () { var objs = []; var items = this.koItems(); for (var i = 0; i < items.length; i++) { var item = items[i].item; if (!!item) { objs.push({ name: item.name }); } } return __WEBPACK_IMPORTED_MODULE_2__surveyHelper__["b" /* SurveyHelper */].getNewName(objs, __WEBPACK_IMPORTED_MODULE_3__editorLocalization__["a" /* editorLocalization */].getString("ed.newTextItemName")); }; return SurveyPropertyTextItemsEditor; }(__WEBPACK_IMPORTED_MODULE_4__propertyNestedPropertyEditor__["a" /* SurveyNestedPropertyEditor */])); var SurveyPropertyTextItemsItem = /** @class */ (function (_super) { __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__["a" /* __extends */])(SurveyPropertyTextItemsItem, _super); function SurveyPropertyTextItemsItem(item, getColumns, options) { var _this = _super.call(this, item, getColumns, options) || this; _this.item = item; return _this; } SurveyPropertyTextItemsItem.prototype.getClassName = function () { return "multipletextitem"; }; Object.defineProperty(SurveyPropertyTextItemsItem.prototype, "text", { get: function () { return __WEBPACK_IMPORTED_MODULE_3__editorLocalization__["a" /* editorLocalization */] .getString("pe.columnEdit")["format"](this.item.name); }, enumerable: true, configurable: true }); return SurveyPropertyTextItemsItem; }(__WEBPACK_IMPORTED_MODULE_4__propertyNestedPropertyEditor__["b" /* SurveyNestedPropertyEditorItem */])); __WEBPACK_IMPORTED_MODULE_5__propertyEditorFactory__["a" /* SurveyPropertyEditorFactory */].registerEditor("textitems", function (property) { return new SurveyPropertyTextItemsEditor(property); }); /***/ }), /* 79 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(3); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_survey_knockout__ = __webpack_require__(2); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_survey_knockout___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_survey_knockout__); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__propertyOneSelectedEditor__ = __webpack_require__(16); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__editorLocalization__ = __webpack_require__(0); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__propertyEditorFactory__ = __webpack_require__(4); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return SurveyPropertyValidatorsEditor; }); /* unused harmony export SurveyPropertyValidatorItem */ var SurveyPropertyValidatorsEditor = /** @class */ (function (_super) { __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__["a" /* __extends */])(SurveyPropertyValidatorsEditor, _super); function SurveyPropertyValidatorsEditor(property) { return _super.call(this, property) || this; } Object.defineProperty(SurveyPropertyValidatorsEditor.prototype, "editorType", { get: function () { return "validators"; }, enumerable: true, configurable: true }); SurveyPropertyValidatorsEditor.prototype.createOneSelectedItem = function (obj) { return new SurveyPropertyValidatorItem(obj); }; SurveyPropertyValidatorsEditor.prototype.getAvailableClasses = function () { var classes = __WEBPACK_IMPORTED_MODULE_1_survey_knockout__["Serializer"].getChildrenClasses("surveyvalidator", true); var res = []; for (var i = 0; i < classes.length; i++) { var name = classes[i].name; res.push({ value: name, text: __WEBPACK_IMPORTED_MODULE_3__editorLocalization__["a" /* editorLocalization */].getValidatorName(name) }); } return res; }; return SurveyPropertyValidatorsEditor; }(__WEBPACK_IMPORTED_MODULE_2__propertyOneSelectedEditor__["a" /* SurveyPropertyOneSelectedEditor */])); var SurveyPropertyValidatorItem = /** @class */ (function (_super) { __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_tslib__["a" /* __extends */])(SurveyPropertyValidatorItem, _super); function SurveyPropertyValidatorItem(obj) { var _this = _super.call(this, obj) || this; _this.obj = obj; return _this; } SurveyPropertyValidatorItem.prototype.getText = function () { return __WEBPACK_IMPORTED_MODULE_3__editorLocalization__["a" /* editorLocalization */].getValidatorName(this.obj.getType()); }; return SurveyPropertyValidatorItem; }(__WEBPACK_IMPORTED_MODULE_2__propertyOneSelectedEditor__["b" /* SurveyPropertyOneSelectedItem */])); __WEBPACK_IMPORTED_MODULE_4__propertyEditorFactory__["a" /* SurveyPropertyEditorFactory */].registerEditor("validators", function (property) { return new SurveyPropertyValidatorsEditor(property); }); /***/ }), /* 80 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_knockout__ = __webpack_require__(1); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_knockout___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_knockout__); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__accordion_scss__ = __webpack_require__(91); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__accordion_scss___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1__accordion_scss__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return AccordionItemModel; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return AccordionModel; }); var template = __webpack_require__(143); var AccordionItemModel = /** @class */ (function () { function AccordionItemModel(data, template) { var _this = this; this.data = data; this.template = template; this.collapsed = __WEBPACK_IMPORTED_MODULE_0_knockout__["observable"](true); this.toggle = function () { _this.collapsed(!_this.collapsed()); if (!_this.collapsed() && !!document) { var el = document.getElementById("editor_tab_id_" + _this.data.name); if (!!el) { el.scrollIntoView(false); } } }; var self = this; data.onExpand = function () { self.collapsed(false); }; } Object.defineProperty(AccordionItemModel.prototype, "title", { get: function () { return this.data.title; }, enumerable: true, configurable: true }); return AccordionItemModel; }()); var AccordionModel = /** @class */ (function () { function AccordionModel(params) { this.tabs = __WEBPACK_IMPORTED_MODULE_0_knockout__["computed"](function () { var res = __WEBPACK_IMPORTED_MODULE_0_knockout__["unwrap"](params.tabs) .map(function (tabData) { return new AccordionItemModel(tabData, __WEBPACK_IMPORTED_MODULE_0_knockout__["unwrap"](params.template)); }); if (res.length > 0) { res[0].collapsed(false); } return res; }); this.showHeader = __WEBPACK_IMPORTED_MODULE_0_knockout__["computed"](function () { return params.tabs().length > 1; }); } return AccordionModel; }()); __WEBPACK_IMPORTED_MODULE_0_knockout__["components"].register("svd-accordion", { viewModel: AccordionModel, template: template }); /***/ }), /* 81 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_knockout__ = __webpack_require__(1); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_knockout___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_knockout__); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__splitter_scss__ = __webpack_require__(92); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__splitter_scss___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1__splitter_scss__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return SplitterComponentViewModel; }); var SplitterComponentViewModel = /** @class */ (function () { function SplitterComponentViewModel(params, componentInfo) { var splitterElement = componentInfo.element; var container = componentInfo.element.parentElement; var siblings = []; var minLeft = params.minLeft || 10; var minRight = params.minRight || 10; for (var i = 0; i < container.children.length; i++) { siblings.push(container.children[i]); } var splitterElementIndex = siblings.indexOf(splitterElement); var leftElement = siblings[splitterElementIndex - 1]; var rightElement = siblings[splitterElementIndex + 1]; var onresize = function () { splitterElement.style.left = siblings .slice(0, splitterElementIndex) .reduce(function (w, s) { return w + s.offsetWidth; }, 0) - splitterElement.offsetWidth + "px"; }; window.addEventListener("resize", onresize); onresize(); var onmousemove = function (event) { var newLeft = leftElement.offsetWidth + event.movementX; var newRight = rightElement.offsetWidth - event.movementX; if (newLeft > minLeft && newRight > minRight) { splitterElement.style.left = splitterElement.offsetLeft + event.movementX + "px"; var leftWidth = (newLeft / container.offsetWidth) * 100 + "%"; var rightWidth = (newRight / container.offsetWidth) * 100 + "%"; leftElement.style.width = leftWidth; leftElement.style.maxWidth = leftWidth; leftElement.style.flexBasis = leftWidth; rightElement.style.width = rightWidth; rightElement.style.maxWidth = rightWidth; rightElement.style.flexBasis = rightWidth; } }; var onmouseup = function () { splitterElement.className = splitterElement.className.replace(/\ssvd-active-splitter/g, ""); document.removeEventListener("mousemove", onmousemove); document.removeEventListener("mouseleave", onmouseup); document.removeEventListener("mouseup", onmouseup); }; splitterElement.onmousedown = function () { splitterElement.className += " svd-active-splitter"; document.addEventListener("mousemove", onmousemove); document.addEventListener("mouseleave", onmouseup); document.addEventListener("mouseup", onmouseup); }; } return SplitterComponentViewModel; }()); __WEBPACK_IMPORTED_MODULE_0_knockout__["components"].register("svd-splitter", { viewModel: { createViewModel: function (params, componentInfo) { return new SplitterComponentViewModel(params, componentInfo); } }, template: '<div class="svd-splitter"></div>' }); /***/ }), /* 82 */ /***/ (function(module, exports) { // removed by extract-text-webpack-plugin /***/ }), /* 83 */ /***/ (function(module, exports) { // removed by extract-text-webpack-plugin /***/ }), /* 84 */ /***/ (function(module, exports) { // removed by extract-text-webpack-plugin /***/ }), /* 85 */ /***/ (function(module, exports) { // removed by extract-text-webpack-plugin /***/ }), /* 86 */ /***/ (function(module, exports) { // removed by extract-text-webpack-plugin /***/ }), /* 87 */ /***/ (function(module, exports) { // removed by extract-text-webpack-plugin /***/ }), /* 88 */ /***/ (function(module, exports) { // removed by extract-text-webpack-plugin /***/ }), /* 89 */ /***/ (function(module, exports) { // removed by extract-text-webpack-plugin /***/ }), /* 90 */ /***/ (function(module, exports) { // removed by extract-text-webpack-plugin /***/ }), /* 91 */ /***/ (function(module, exports) { // removed by extract-text-webpack-plugin /***/ }), /* 92 */ /***/ (function(module, exports) { // removed by extract-text-webpack-plugin /***/ }), /* 93 */ /***/ (function(module, exports) { module.exports = "<svg style=\"display:none;\"><defs><rect id=\"device-l-b\" width=\"330\" height=\"651\" x=\"719.5\" y=\"298.5\" rx=\"20\"> </rect><filter id=\"device-l-a\" width=\"145.5%\" height=\"123%\" x=\"-22.7%\" y=\"-11.5%\" filterUnits=\"objectBoundingBox\"> <feOffset in=\"SourceAlpha\" result=\"shadowOffsetOuter1\"></feOffset><feGaussianBlur stdDeviation=\"25\" in=\"shadowOffsetOuter1\" result=\"shadowBlurOuter1\"></feGaussianBlur><feColorMatrix values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.1 0\" in=\"shadowBlurOuter1\"></feColorMatrix></filter><rect id=\"device-p-b\" width=\"330\" height=\"651\" x=\"120\" y=\"458\" rx=\"20\"> </rect><filter id=\"device-p-a\" width=\"145.5%\" height=\"123%\" x=\"-22.7%\" y=\"-11.5%\" filterUnits=\"objectBoundingBox\"> <feOffset in=\"SourceAlpha\" result=\"shadowOffsetOuter1\"></feOffset><feGaussianBlur stdDeviation=\"25\" in=\"shadowOffsetOuter1\" result=\"shadowBlurOuter1\"></feGaussianBlur><feColorMatrix values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.1 0\" in=\"shadowBlurOuter1\"></feColorMatrix></filter></defs><symbol viewBox=\"0 0 16 16\" id=\"icon-actionaddtotoolbox\"><path d=\"M7.3 8H1v2h5.2c.2-.7.6-1.4 1.1-2zM10 6.2V5H1v2h7.3c.5-.3 1.1-.6 1.7-.8zM1 2h9v2H1zM11.5 7C9 7 7 9 7 11.5S9 16 11.5 16s4.5-2 4.5-4.5S14 7 11.5 7zm2.5 5h-2v2h-1v-2H9v-1h2V9h1v2h2v1z\"></path></symbol><symbol viewBox=\"0 0 16 16\" id=\"icon-actionbold\"><path d=\"M1 1v5h2V4h3v8H4v2h7v-2H9V4h3v2h2V1z\"></path></symbol><symbol viewBox=\"0 0 16 16\" id=\"icon-actionconvertto\"><path d=\"M3 10L0 7h6zM13 7l3 3h-6z\"></path><path d=\"M8 4c1.5 0 2.8.8 3.4 2h2.2c-.8-2.3-3-4-5.7-4C4.7 2 2 4.7 2 8h2c0-2.2 1.8-4 4-4zM11.9 9c-.4 1.7-2 3-3.9 3-1 0-1.9-.4-2.6-1H2.8c1 1.8 3 3 5.2 3 3 0 5.4-2.2 5.9-5h-2z\"></path></symbol><symbol viewBox=\"0 0 16 16\" id=\"icon-actioncopy\"><path d=\"M2 6h9v9H2z\"></path><path d=\"M5 3v2h7v7h2V3z\"></path></symbol><symbol viewBox=\"0 0 16 16\" id=\"icon-actiondelete\"><path d=\"M8 2C4.7 2 2 4.7 2 8s2.7 6 6 6 6-2.7 6-6-2.7-6-6-6zm3 8l-1 1-2-2-2 2-1-1 2-2-2-2 1-1 2 2 2-2 1 1-2 2 2 2z\"></path></symbol><symbol viewBox=\"0 0 32 32\" id=\"icon-actiondragelement\"><path d=\"M4 10h24a2 2 0 0 0 0-4H4a2 2 0 0 0 0 4zm24 4H4a2 2 0 0 0 0 4h24a2 2 0 0 0 0-4zm0 8H4a2 2 0 0 0 0 4h24a2 2 0 0 0 0-4z\"></path></symbol><symbol viewBox=\"0 0 16 16\" id=\"icon-actioneditelement\"><path d=\"M1 15h4l-4-4zM7 5l-5 5 4 4 5-5zM14 6l-4-4-2 2 4 4zM9 14h5v1H9z\"></path></symbol><symbol viewBox=\"0 0 16 16\" id=\"icon-actionfontlarger\"><path d=\"M7 6H5l-3 8H1v1h4v-1H4l.67-2h2.67L8 14H7v1h4v-1h-1L7 6zm-2 5l1-3 1 3H5zM15 3h-2V1h-2v2H9v2h2v2h2V5h2z\"></path></symbol><symbol viewBox=\"0 0 16 16\" id=\"icon-actionfontsmaller\"><path d=\"M7 5H5l-3 8H1v1h4v-1H4l.67-2h2.67L8 13H7v1h4v-1h-1L7 5zm-2 5l1-3 1 3H5zM9 2h6v2H9z\"></path></symbol><symbol viewBox=\"0 0 16 16\" id=\"icon-actionhidetitle\"><path d=\"M15.7 7.7c-.1-.1-1.5-1.7-3.4-3L15 2l-1-1-2.9 2.9C10.1 3.4 9 3 8 3 4.3 3 .4 7.5.3 7.7L0 8l.3.3c.1.1 1.5 1.7 3.4 3L1 14l1 1 2.9-2.9c1 .5 2.1.9 3.1.9 3.7 0 7.6-4.5 7.7-4.7L16 8l-.3-.3zM2 8c.8-.8 3.4-3 6-3 .6 0 .6 0 0 0-1.7 0-3 1.3-3 3 0 .6.2 1.1.4 1.6l-.6.6C3.5 9.4 2.5 8.5 2 8zm6 3c-.6 0-.6 0 0 0 1.7 0 3-1.3 3-3 0-.6-.2-1.1-.4-1.6l.6-.6c1.3.8 2.3 1.7 2.8 2.2-.8.8-3.4 3-6 3z\"></path></symbol><symbol viewBox=\"0 0 16 16\" id=\"icon-actionisrequired\"><circle cx=\"7.5\" cy=\"13.5\" r=\"1.5\"></circle><path d=\"M8 10l1-9H6l1 9z\"></path></symbol><symbol viewBox=\"0 0 16 16\" id=\"icon-actionitalic\"><path d=\"M14 1H2L1 4h1l.33-1H7L5 13H3v1h6v-1H7L9 3h4.33L13 4h1l1-3z\"></path></symbol><symbol viewBox=\"0 0 16 16\" id=\"icon-actionnotrequired\"><path d=\"M14 1L8.4 6.6 9 1H6l.8 7.2L1 14l1 1L15 2z\"></path><circle cx=\"7.5\" cy=\"13.5\" r=\"1.5\"></circle></symbol><symbol viewBox=\"0 0 12 12\" id=\"icon-actionredo\"><path d=\"M6 0c1.66 0 3.14.69 4.23 1.78L12 .01V5H7l1.82-1.82A3.975 3.975 0 0 0 6 2C3.79 2 2 3.79 2 6s1.79 4 4 4a4.01 4.01 0 0 0 3.71-2.52L11.4 8.6A5.994 5.994 0 0 1 6 12c-3.31 0-6-2.69-6-6s2.69-6 6-6z\"></path></symbol><symbol viewBox=\"0 0 12 12\" id=\"icon-actionsettings\"><path d=\"M12 7V5H9.86c-.1-.36-.24-.7-.43-1.02l1.52-1.52-1.41-1.41-1.52 1.52c-.32-.18-.66-.33-1.02-.42V0H5v2.15c-.36.09-.7.24-1.02.42L2.46 1.05 1.05 2.46l1.52 1.52c-.19.32-.33.66-.43 1.02H0v2h2.14c.09.36.24.71.42 1.02L1.05 9.54l1.41 1.41 1.51-1.51c.32.19.66.33 1.03.43V12h2V9.87c.37-.09.71-.24 1.02-.43l1.51 1.51 1.41-1.41-1.5-1.52c.18-.31.33-.66.42-1.02H12zM6 8.01c-1.1 0-2-.9-2-2s.9-2 2-2 2 .9 2 2-.9 2-2 2z\"></path></symbol><symbol viewBox=\"0 0 16 16\" id=\"icon-actionshowtitle\"><path d=\"M15.7 7.7C15.6 7.5 11.7 3 8 3S.4 7.5.3 7.7L0 8l.3.3c.1.2 4 4.7 7.7 4.7s7.6-4.5 7.7-4.7L16 8l-.3-.3zM8 11c-2.6 0-5.2-2.2-6-3 .8-.8 3.4-3 6-3s5.2 2.2 6 3c-.8.8-3.4 3-6 3z\"></path><circle cx=\"8\" cy=\"8\" r=\"3\"></circle></symbol><symbol viewBox=\"0 0 16 16\" id=\"icon-actionunderline\"><path class=\"st0\" d=\"M2 13h12v1H2z\"></path><path d=\"M13 1H2v3h1V3h4v8H5v1h6v-1H9V3h4v1h1V1z\"></path></symbol><symbol viewBox=\"0 0 12 12\" id=\"icon-actionundo\"><path d=\"M6 0C4.34 0 2.86.69 1.77 1.78L0 .01V5h5L3.18 3.19C3.9 2.46 4.89 2 6 2c2.21 0 4 1.79 4 4s-1.79 4-4 4a4.01 4.01 0 0 1-3.71-2.52L.6 8.6C1.57 10.61 3.62 12 6 12c3.31 0 6-2.69 6-6S9.31 0 6 0z\"></path></symbol><symbol viewBox=\"0 0 16 16\" id=\"icon-add\"><path d=\"M14 7h-4V3H7v4H3v3h4v4h3v-4h4z\"></path></symbol><symbol viewBox=\"0 0 10 10\" id=\"icon-arrow_down_10x10\"><path d=\"M2 2L0 4l5 5 5-5-2-2-3 3z\"></path></symbol><symbol viewBox=\"0 0 10 10\" id=\"icon-arrow_up_10x10\"><path d=\"M8 9l2-2-5-5-5 5 2 2 3-3z\"></path></symbol><symbol viewBox=\"0 0 34 34\" id=\"icon-arrowdown_34x34\"><style><![CDATA[.st0{fill:#fff}]]></style><path class=\"st0\" d=\"M12 16l2-2 3 3 3-3 2 2-5 5z\"></path></symbol><symbol viewBox=\"0 0 24 24\" id=\"icon-cloud_24x24\"><style><![CDATA[.st0{fill:#1ab394}]]></style><path class=\"st0\" d=\"M75 6.5C75 4.6 73.4 3 71.5 3S68 4.6 68 6.5c0 1.4.8 2.6 2 3.2-.2 1-.7 1.8-1.7 2.3-.4.2-.9.4-1.3.6-.8.3-1.7.6-2.5.9-.2.1-.3.1-.5.2v-6c1.2-.6 2-1.8 2-3.2C66 2.6 64.4 1 62.5 1S59 2.6 59 4.5c0 1.4.8 2.6 2 3.2v9.7c-1.2.6-2 1.8-2 3.2 0 1.8 1.6 3.4 3.5 3.4s3.5-1.6 3.5-3.5c0-1.4-.8-2.6-2-3.2.1-.5.4-1 .9-1.2.3-.1.6-.3 1-.4 1.1-.4 2.1-.7 3.2-1.2 1.4-.6 2.5-1.5 3.1-2.9.2-.4.3-1.1.4-1.8C74 9.3 75 8.1 75 6.5zM62.5 3c.8 0 1.5.7 1.5 1.5S63.3 6 62.5 6 61 5.3 61 4.5 61.7 3 62.5 3zm0 19c-.8 0-1.5-.7-1.5-1.5s.7-1.5 1.5-1.5 1.5.7 1.5 1.5-.7 1.5-1.5 1.5zM70 6.5c0-.8.7-1.5 1.5-1.5s1.5.7 1.5 1.5S72.3 8 71.5 8 70 7.3 70 6.5zM9 18l1 1 2-2v6h2v-6l2 2 1-1-4-4z\"></path><path class=\"st0\" d=\"M20.9 7.9c.1-.3.1-.6.1-.9 0-2.8-2.2-5-5-5-2.6 0-4.7 1.9-4.9 4.4C10.3 5.6 9.2 5 8 5 5.8 5 4 6.8 4 9v.2c-1.7.4-3 1.3-3 3.8 0 2.3 2.4 3 4 3h3l5-5 5 5c2.8 0 5-1.2 5-4 0-1.7-.8-3.1-2.1-4.1z\"></path></symbol><symbol viewBox=\"0 0 16 16\" id=\"icon-autocomplete\"><style><![CDATA[.st0{fill:#3d4d5d}]]></style><path class=\"st0\" d=\"M15 6H7v10h9v-1H8v-2h7v2h1V6h-1zm0 6H8v-2h7v2zm0-3H8V7h7v2zM3 10H1V4h2V3H0v8h3zM14 5h1V3H6v1h8zM5 1h1V0H3v1h1v11H3v1h3v-1H5z\"></path></symbol><symbol viewBox=\"0 0 16 16\" id=\"icon-barrating\"><style><![CDATA[.st0{fill:#3d4d5d}]]></style><path class=\"st0\" d=\"M12.1 15l-4.6-2.4L2.9 15l.9-5.1L0 6.3l5.2-.7L7.5 1l2.3 4.6 5.2.7-3.8 3.6.9 5.1z\"></path></symbol><symbol viewBox=\"0 0 16 16\" id=\"icon-datepicker\"><style><![CDATA[.st0{fill:#3d4d5d}]]></style><path class=\"st0\" d=\"M3 7h2v2H3zM7 11h2v2H7zM3 11h2v2H3zM11 11h2v2h-2zM11 7h2v2h-2zM10 6H6v4h4V6zM9 9H7V7h2v2zM4 0h1v3H4zM11 0h1v3h-1z\"></path><path class=\"st0\" d=\"M13 2v2h-3V2H6v2H3V2H0v14h16V2h-3zm2 13H1V5h14v10z\"></path></symbol><symbol viewBox=\"0 0 16 16\" id=\"icon-editor\"><style><![CDATA[.st0{fill:#3d4d5d}]]></style><path class=\"st0\" d=\"M1 3h2v5H2v1h4V8H5V3h2v1h1V1H0v3h1zM10 5h6v1h-6zM10 8h6v1h-6zM0 11h16v1H0zM0 14h16v1H0z\"></path></symbol><symbol viewBox=\"0 0 16 16\" id=\"icon-microphone\"><style><![CDATA[.st0{fill:#3d4d5d}]]></style><path class=\"st0\" d=\"M11 3.4C11 2.1 9.9 1 8.6 1h-.2C7.1 1 6 2.1 6 3.4V5h5V3.4zM8.4 10h.3C9.9 10 11 8.9 11 7.6V6H6v1.6C6 8.9 7.1 10 8.4 10z\"></path><path class=\"st0\" d=\"M12 6v.9c0 2.2-1.6 4.1-3.5 4.1S5 9.1 5 6.9V6H4v1c0 2.5 1.8 4.6 4 4.9V14H6v1h5v-1H9v-2.1c2.2-.3 4-2.4 4-4.9V6h-1z\"></path></symbol><symbol viewBox=\"0 0 16 16\" id=\"icon-nouislider\"><style><![CDATA[.st0{fill:#3d4d5d}]]></style><path class=\"st0\" d=\"M0 10h16v2H0zM2 4v3l2 2 2-2V4zM10 4v3l2 2 2-2V4z\"></path></symbol><symbol viewBox=\"0 0 16 16\" id=\"icon-signaturepad\"><style><![CDATA[.st0{fill:#3d4d5d}]]></style><path class=\"st0\" d=\"M0 0v15h16V0H0zm15 14H1V1h14v13z\"></path><path class=\"st0\" d=\"M2.6 10.2c.1.1.1.2.2.3-.2.3-.4.6-.7.8l.7.7c.2-.3.5-.6.7-.9h.1c.2.1.9.1 1.1.1 1.5-.1 2.3-.5 2.8-.8h.1l.6.3h.6c.7-.1 1.9-.8 2.5-1.2.2-.1.5-.3.5-.3v.2c0 .2 0 .3.1.5.1.3.3.4.6.5.2 0 .4 0 .5-.1.1-.3.8-1 1-1.3V8c-.1.1-.3.2-.4.4-.2.2-.5.4-.8.6l-.1.1v-.3c0-.2 0-.4-.1-.5-.1-.4-.5-.6-.9-.4-.1.1-.4.2-.6.4-.9.6-2 1.2-2.2 1.3-.1 0-.2.1-.4.1l.1-.1c.3-.3.7-.6.9-1 .2-.3.3-.6.3-.9 0-.4 0-.7-.2-1.1-.1-.3-.4-.6-.8-.7-.2-.1-.4-.1-.7 0-.2.1-.5.2-.7.4-.3.3-.5.6-.6 1-.1.2-.1.5-.1.7 0 .4 0 .7.1 1.1 0 .2.1.3.2.5-.6.3-1.5.7-2.8.6v-.1c0-.1.1-.3.2-.4.4-.7.7-1.4.9-2.1.2-.6.3-1.3.3-1.9V4.3c0-.3-.1-.6-.3-.8-.2-.4-.6-.6-1-.5-.3.1-.5.2-.7.4-.3.2-.6.5-.8.9-.2.5-.4 1-.6 1.6-.1.5-.2 1-.2 1.5s0 1 .1 1.4c.1.6.3 1 .5 1.4zm5-2.5c.1-.2.2-.5.4-.6.2-.2.4-.2.7-.2.1 0 .2.1.2.2.1.3.1.6-.1.8-.2.3-.4.6-.6.8-.2.2-.3.3-.5.4-.1-.1-.1-.2-.1-.4v-1zM3 6.7c.1-.6.3-1.3.6-1.8.1-.3.3-.5.5-.8.1 0 .2-.1.2-.1.1-.1.2 0 .3.1.1.1.1.3.1.4 0 .4.1.9 0 1.3 0 .8-.2 1.6-.5 2.3-.3.5-.5 1-.8 1.5-.1 0-.2-.1-.2-.2-.2-.6-.3-1.2-.3-1.8 0-.3.1-.6.1-.9z\"></path></symbol><symbol viewBox=\"0 0 16 16\" id=\"icon-sortablejs\"><style><![CDATA[.st0{fill:#3d4d5d}]]></style><path class=\"st0\" d=\"M7 1h9v2H7zM9 6h7v2H9zM11 11h5v2h-5zM5 10l1 1c-2.2 0-4-1.8-4-4 0-1.9 1.3-3.4 3-3.9v-2C2.2 1.5 0 4 0 7c0 3.3 2.7 6 5.9 6H6l-1 1 1 1 3-3-3-3-1 1z\"></path></symbol><symbol viewBox=\"0 0 16 16\" id=\"icon-tagbox\"><style><![CDATA[.st0{fill:#3d4d5d}]]></style><path class=\"st0\" d=\"M15 11H0V5h15v6zM1 10h13V6H1v4z\"></path><path class=\"st0\" d=\"M2 7h4v2H2zM7 7h4v2H7z\"></path></symbol><symbol viewBox=\"0 0 24 24\" id=\"icon-delete_24x24\"><path fill-rule=\"evenodd\" clip-rule=\"evenodd\" fill=\"#1AB394\" d=\"M6 8l2-2 4 4 4-4 2 2-4 4 4 4-2 2-4-4-4 4-2-2 4-4-4-4z\"></path></symbol><symbol viewBox=\"0 0 24 24\" id=\"icon-edit\"><g fill-rule=\"evenodd\" clip-rule=\"evenodd\"><path d=\"M19 4l-9 9 4 4 9-9-4-4zM8 15v4h4l-4-4zM1 17v2h4v-2H1z\"></path></g></symbol><symbol viewBox=\"0 0 16 16\" id=\"icon-boolean\"><path d=\"M0 16h10V6H0v10zm2-6l2 2 4-4 1 1-5 5-3-3 1-1z\"></path><path d=\"M5 1v4h1V2h8v8h-3v1h4V1z\"></path></symbol><symbol viewBox=\"0 0 16 16\" id=\"icon-checkbox\"><path d=\"M1 1v14h14V1H1zm6 10L4 8l1-1 2 2 4-4 1 1-5 5z\"></path></symbol><symbol viewBox=\"0 0 16 16\" id=\"icon-comment\"><path d=\"M8 2C4.1 2 1 4.2 1 7c0 1.9 1.5 3.6 3.8 4.4C4.6 13.1 3 14 3 14s1.5-.2 2.7-.9c.4-.2.9-.8 1.3-1.2.3.1.6.1 1 .1 3.9 0 7-2.2 7-5s-3.1-5-7-5zM4 8c-.6 0-1-.4-1-1s.4-1 1-1 1 .4 1 1-.4 1-1 1zm4 0c-.6 0-1-.4-1-1s.4-1 1-1 1 .4 1 1-.4 1-1 1zm4 0c-.6 0-1-.4-1-1s.4-1 1-1 1 .4 1 1-.4 1-1 1z\"></path></symbol><symbol viewBox=\"0 0 16 16\" id=\"icon-default\"><path d=\"M0 4h4V0H0v4zm6 0h4V0H6v4zm6-4v4h4V0h-4zM0 10h4V6H0v4zm6 0h4V6H6v4zm6 0h4V6h-4v4zM0 16h4v-4H0v4zm6 0h4v-4H6v4zm6 0h4v-4h-4v4z\"></path></symbol><symbol viewBox=\"0 0 16 16\" id=\"icon-dropdown\"><path d=\"M1 1v6h14V1H1zm10 5L8 3l1-1 2 2 2-2 1 1-3 3zm-8 5h12V9H3v2zm0 4h12v-2H3v2z\"></path></symbol><symbol viewBox=\"0 0 16 16\" id=\"icon-expression\"><path d=\"M15 9l-4 4-2-2-1 1 3 3 5-5zM4 4v1h2v1H3v3h4V4H4zm2 4H4V7h2v1zM8 8h1v1H8z\"></path><path d=\"M1 1h13v7l1-1V0H0v12h6l1-1H1z\"></path><path d=\"M10 4h1v1h-1zM9 5h1v1H9zM11 5h1v1h-1zM11 3h1v1h-1zM9 3h1v1H9z\"></path></symbol><symbol viewBox=\"0 0 16 16\" id=\"icon-file\"><path d=\"M9 0v5h5z\"></path><path d=\"M8 0H2v16h12V6H8z\"></path></symbol><symbol viewBox=\"0 0 16 16\" id=\"icon-flowpanel\"><path d=\"M14 4h2v1h-2zM0 4h2v1H0zM14 6h2v1h-2zM0 6h2v1H0zM14 8h2v1h-2zM0 8h2v1H0zM14 10h2v1h-2zM0 10h2v1H0zM0 2h16v1H0zM0 0h16v1H0zM0 12h16v1H0zM0 14h16v1H0zM11 4L7 8 5 6 4 7l3 3 5-5z\"></path></symbol><symbol viewBox=\"0 0 16 16\" id=\"icon-html\"><path d=\"M4 4L0 8l4 4 1-1-3-3 3-3zM11 4l-1 1 3 3-3 3 1 1 4-4z\"></path></symbol><symbol viewBox=\"0 0 16 16\" id=\"icon-imagepicker\"><style><![CDATA[.st0{fill:#3d4d5d}]]></style><path class=\"st0\" d=\"M15 14H0V1h15v13zM1 13h13V2H1v11z\"></path><path class=\"st0\" d=\"M2 3v9h11V3H2zm4 1c.6 0 1 .4 1 1s-.4 1-1 1-1-.4-1-1 .4-1 1-1zm-3 7l2-3 1 1 2-3 4 5H3z\"></path></symbol><symbol viewBox=\"0 0 16 16\" id=\"icon-matrix\"><path d=\"M4 1C2.3 1 1 2.3 1 4s1.3 3 3 3 3-1.3 3-3-1.3-3-3-3zm0 5c-1.1 0-2-.9-2-2s.9-2 2-2 2 .9 2 2-.9 2-2 2z\"></path><circle cx=\"4\" cy=\"4\" r=\"1\"></circle><path d=\"M12 7c1.7 0 3-1.3 3-3s-1.3-3-3-3-3 1.3-3 3 1.3 3 3 3zm0-5c1.1 0 2 .9 2 2s-.9 2-2 2-2-.9-2-2 .9-2 2-2zM4 9c-1.7 0-3 1.3-3 3s1.3 3 3 3 3-1.3 3-3-1.3-3-3-3zm0 5c-1.1 0-2-.9-2-2s.9-2 2-2 2 .9 2 2-.9 2-2 2zM12 9c-1.7 0-3 1.3-3 3s1.3 3 3 3 3-1.3 3-3-1.3-3-3-3zm0 5c-1.1 0-2-.9-2-2s.9-2 2-2 2 .9 2 2-.9 2-2 2z\"></path></symbol><symbol viewBox=\"0 0 16 16\" id=\"icon-matrixdropdown\"><path d=\"M4 1C2.3 1 1 2.3 1 4s1.3 3 3 3 3-1.3 3-3-1.3-3-3-3zm0 5c-1.1 0-2-.9-2-2s.9-2 2-2 2 .9 2 2-.9 2-2 2z\"></path><circle cx=\"4\" cy=\"4\" r=\"1\"></circle><path d=\"M12 7c1.7 0 3-1.3 3-3s-1.3-3-3-3-3 1.3-3 3 1.3 3 3 3zm0-5c1.1 0 2 .9 2 2s-.9 2-2 2-2-.9-2-2 .9-2 2-2zM4 9c-1.7 0-3 1.3-3 3s1.3 3 3 3 3-1.3 3-3-1.3-3-3-3zm0 5c-1.1 0-2-.9-2-2s.9-2 2-2 2 .9 2 2-.9 2-2 2z\"></path><circle cx=\"4\" cy=\"12\" r=\"1\"></circle><path d=\"M12 9c-1.7 0-3 1.3-3 3s1.3 3 3 3 3-1.3 3-3-1.3-3-3-3zm0 5c-1.1 0-2-.9-2-2s.9-2 2-2 2 .9 2 2-.9 2-2 2z\"></path></symbol><symbol viewBox=\"0 0 16 16\" id=\"icon-matrixdynamic\"><path d=\"M3 1C1.3 1 0 2.3 0 4s1.3 3 3 3 3-1.3 3-3-1.3-3-3-3zm0 5c-1.1 0-2-.9-2-2s.9-2 2-2 2 .9 2 2-.9 2-2 2z\"></path><circle cx=\"3\" cy=\"4\" r=\"1\"></circle><path d=\"M11 7c1.7 0 3-1.3 3-3s-1.3-3-3-3-3 1.3-3 3 1.3 3 3 3zm0-5c1.1 0 2 .9 2 2s-.9 2-2 2-2-.9-2-2 .9-2 2-2zM3 9c-1.7 0-3 1.3-3 3s1.3 3 3 3 3-1.3 3-3-1.3-3-3-3zm0 5c-1.1 0-2-.9-2-2s.9-2 2-2 2 .9 2 2-.9 2-2 2zM8 15h2l-2-2zM9.03 11.99l4.03-4.03 1.98 1.98-4.03 4.03z\"></path></symbol><symbol viewBox=\"0 0 16 16\" id=\"icon-multipletext\"><path d=\"M0 2v12h16V2H0zm5 9H2V9h3v2zm0-4H2V5h3v2zm9 4H7V9h7v2zm0-4H7V5h7v2z\"></path></symbol><symbol viewBox=\"0 0 16 16\" id=\"icon-panel_dynamic\"><path d=\"M2 8h10v1H2zM2 11h8l1-1H2zM9 16h2l-2-2zM14 9l-4 4 2 2 4-4zM3 3v2H2l2 2 2-2H5V3zM11 5V3H9v2H8l2 2 2-2z\"></path><path d=\"M1 1h12v7l1-1V0H0v14h7l1-1H1z\"></path></symbol><symbol viewBox=\"0 0 16 16\" id=\"icon-panel\"><path d=\"M0 0v16h16V0H0zm15 15H1V1h14v14z\"></path><path d=\"M2 12h12v2H2zM2 9h12v2H2zM11 8L8 5h2V2h2v3h2zM5 8L2 5h2V2h2v3h2z\"></path></symbol><symbol viewBox=\"0 0 16 16\" id=\"icon-paneldynamic\"><path d=\"M2 8h10v1H2zM2 11h8l1-1H2zM9 16h2l-2-2zM14 9l-4 4 2 2 4-4zM3 3v2H2l2 2 2-2H5V3zM11 5V3H9v2H8l2 2 2-2z\"></path><path d=\"M1 1h12v7l1-1V0H0v14h7l1-1H1z\"></path></symbol><symbol viewBox=\"0 0 16 16\" id=\"icon-radiogroup\"><path d=\"M3 1C1.3 1 0 2.3 0 4s1.3 3 3 3 3-1.3 3-3-1.3-3-3-3zm0 4c-.6 0-1-.4-1-1s.4-1 1-1 1 .4 1 1-.4 1-1 1zm0 4c-1.7 0-3 1.3-3 3s1.3 3 3 3 3-1.3 3-3-1.3-3-3-3zm0 4c-.6 0-1-.4-1-1s.4-1 1-1 1 .4 1 1-.4 1-1 1zM8 3v2h8V3H8zm0 10h8v-2H8v2z\"></path></symbol><symbol viewBox=\"0 0 16 16\" id=\"icon-rating\"><path d=\"M0 7h1l1-1v5h1V5H2L0 7zm5 5h5V4H5v8zm1-5h2V6H6V5h3v3H7v2h2v1H6V7zm6-2v1h2v1h-2v1h2v2h-2v1h3V5h-3z\"></path></symbol><symbol viewBox=\"0 0 16 16\" id=\"icon-text\"><path d=\"M2 1v3h1V3h4v10H5v1h6v-1H9V3h4v1h1V1H2z\"></path></symbol><symbol viewBox=\"0 0 24 24\" id=\"icon-fork_24x24\"><path opacity=\".9\" d=\"M-40-20c-1.2 0-2-.9-2-2v-2c0-1.1.9-2 2-2h.1c1.1 0 2 .9 2 2v2.1c-.1 1-1 1.9-2.1 1.9z\"></path><path opacity=\".5\" d=\"M-40-2c-1.2 0-2-.9-2-2v-2c0-1.1.9-2 2-2h.1c1.1 0 2 .9 2 2v2c-.1 1.1-1 2-2.1 2z\"></path><path opacity=\".2\" d=\"M-52-14c0-1.2.9-2 2-2h2.1c1.1 0 2 .9 2 2v.1c0 1.1-.9 2-2 2H-50c-1.1-.1-2-1-2-2.1z\"></path><path opacity=\".7\" d=\"M-34-14c0-1.2.9-2 2-2h2.1c1.1 0 2 .9 2 2v.1c0 1.1-.9 2-2 2H-32c-1.1-.1-2-1-2-2.1z\"></path><path opacity=\".1\" d=\"M-44.5-18.6c-.8.8-2.1.8-2.8.1l-1.2-1.2c-.8-.8-.8-2 0-2.8l.1-.1c.8-.8 2-.8 2.8 0l1.2 1.2c.7.8.7 2.1-.1 2.8z\"></path><path opacity=\".6\" d=\"M-31.5-5.5c-.8.8-2.1.8-2.8.1l-1.2-1.2c-.8-.8-.8-2 0-2.8l.1-.1c.8-.8 2-.8 2.8 0l1.2 1.2c.7.8.7 2-.1 2.8z\"></path><path opacity=\".3\" d=\"M-48.5-5.5c-.8-.8-.8-2.1-.1-2.8l1.2-1.2c.8-.8 2-.8 2.8 0l.1.1c.8.8.8 2 0 2.8l-1.2 1.2c-.7.7-2 .7-2.8-.1z\"></path><path opacity=\".8\" d=\"M-35.4-18.5c-.8-.8-.8-2.1-.1-2.8l1.2-1.2c.8-.8 2-.8 2.8 0l.1.1c.8.8.8 2 0 2.8l-1.2 1.2c-.8.7-2.1.7-2.8-.1z\"></path><path opacity=\".9\" fill=\"#9D9FA1\" d=\"M-22-13l2-2 4 4 9-9 2 2-11 11z\"></path><path d=\"M41-19h-1.2c-.2-.7-.4-1.3-.8-1.9l.8-.8c.4-.4.4-1 0-1.4l-.7-.7c-.4-.4-1-.4-1.4 0l-.8.8c-.6-.4-1.2-.6-1.9-.8V-25c0-.5-.5-1-1-1h-1c-.5 0-1 .5-1 1v1.2c-.7.2-1.3.4-1.9.8l-.8-.8c-.4-.4-1-.4-1.4 0l-.7.7c-.4.4-.4 1 0 1.4l.8.8c-.4.6-.6 1.2-.8 1.9H26c-.5 0-1 .5-1 1v1c0 .5.5 1 1 1h1.2c.2.7.4 1.3.8 1.9l-.8.8c-.4.4-.4 1 0 1.4l.7.7c.4.4 1 .4 1.4 0l.8-.8c.6.4 1.2.6 1.9.8v1.2c0 .5.5 1 1 1h1c.5 0 1-.5 1-1v-1.2c.7-.2 1.3-.4 1.9-.8l.8.8c.4.4 1 .4 1.4 0l.7-.7c.4-.4.4-1 0-1.4l-.8-.8c.4-.6.6-1.2.8-1.9H41c.5 0 1-.5 1-1v-1c0-.5-.5-1-1-1zm-7.5 5.5c-2.2 0-4-1.8-4-4s1.8-4 4-4 4 1.8 4 4-1.8 4-4 4z\"></path><path opacity=\".9\" fill=\"#9D9FA1\" d=\"M13-15v-3h-1.2c-.1-.4-.3-.8-.5-1.2l.9-.9-2.2-2-.9.9c-.4-.2-.8-.4-1.2-.5V-23H5v1.2c-.4.1-.8.3-1.2.5l-.8-.8L.8-20l.9.9c-.2.4-.4.8-.5 1.2H0v3h1.2c.1.4.3.8.5 1.2l-.9.7L3-10.8l.9-.9c.4.2.8.4 1.2.5v1.2h3v-1.2c.4-.1.8-.3 1.2-.5l.9.9 2.1-2.1-.9-.9c.2-.4.4-.8.5-1.2H13zm-6.5 1.5c-1.7 0-3-1.3-3-3s1.3-3 3-3 3 1.3 3 3-1.3 3-3 3z\"></path><path opacity=\".6\" fill=\"#9D9FA1\" d=\"M23-9v-2h-1.1c-.1-.4-.2-.7-.4-1l.8-.8-1.4-1.4-.9.8c-.3-.2-.7-.3-1-.4V-15h-2v1.1c-.4.1-.7.2-1 .4l-.8-.8-1.4 1.4.8.8c-.2.3-.3.7-.4 1H13v2h1.1c.1.4.2.7.4 1l-.8.8 1.4 1.4.9-.7c.3.2.7.3 1 .4V-5h2v-1.1c.4-.1.7-.2 1-.4l.8.8 1.4-1.4-.8-.9c.2-.3.3-.7.4-1H23zm-5 1c-1.1 0-2-.9-2-2s.9-2 2-2 2 .9 2 2-.9 2-2 2z\"></path><path opacity=\".5\" fill=\"#9D9FA1\" d=\"M-69-7h3v5h-3z\"></path><path opacity=\".9\" fill=\"#9D9FA1\" d=\"M-69-23h3v5h-3z\"></path><path opacity=\".2\" fill=\"#9D9FA1\" d=\"M-72.993-13.993v3h-5v-3z\"></path><path opacity=\".7\" fill=\"#9D9FA1\" d=\"M-56.993-13.993v3h-5v-3z\"></path><path opacity=\".6\" fill=\"#9D9FA1\" d=\"M-64.615-7.549l2.121-2.12 3.536 3.535-2.122 2.121z\"></path><path opacity=\".1\" fill=\"#9D9FA1\" d=\"M-75.98-18.791l2.121-2.122 3.536 3.536-2.122 2.121z\"></path><path opacity=\".3\" fill=\"#9D9FA1\" d=\"M-72.505-9.669l2.121 2.121-3.535 3.536-2.122-2.121z\"></path><path opacity=\".8\" fill=\"#9D9FA1\" d=\"M-61.14-20.912l2.121 2.121-3.535 3.536-2.122-2.121z\"></path><path fill=\"#1AB394\" d=\"M21 6.5C21 4.6 19.4 3 17.5 3S14 4.6 14 6.5c0 1.4.8 2.6 2 3.2-.2 1-.7 1.8-1.7 2.3-.4.2-.9.4-1.3.6-.8.3-1.7.6-2.5.9-.2.1-.3.1-.5.2v-6c1.2-.6 2-1.8 2-3.2C12 2.6 10.4 1 8.5 1S5 2.6 5 4.5c0 1.4.8 2.6 2 3.2v9.7c-1.2.6-2 1.8-2 3.2C5 22.4 6.6 24 8.5 24s3.5-1.6 3.5-3.5c0-1.4-.8-2.6-2-3.2.1-.5.4-1 .9-1.2.3-.1.6-.3 1-.4 1.1-.4 2.1-.7 3.2-1.2 1.4-.6 2.5-1.5 3.1-2.9.2-.4.3-1.1.4-1.8C20 9.3 21 8.1 21 6.5zM8.5 3c.8 0 1.5.7 1.5 1.5S9.3 6 8.5 6 7 5.3 7 4.5 7.7 3 8.5 3zm0 19c-.8 0-1.5-.7-1.5-1.5S7.7 19 8.5 19s1.5.7 1.5 1.5S9.3 22 8.5 22zM16 6.5c0-.8.7-1.5 1.5-1.5s1.5.7 1.5 1.5S18.3 8 17.5 8 16 7.3 16 6.5z\"></path></symbol><symbol viewBox=\"0 0 12 12\" id=\"icon-gear\"><path d=\"M12 7V5H9.9c-.1-.4-.3-.7-.5-1l1.5-1.5-1.4-1.4L8 2.6c-.3-.2-.6-.4-1-.5V0H5v2.1c-.4.1-.7.3-1 .5L2.5 1.1 1.1 2.5 2.6 4c-.2.3-.4.6-.5 1H0v2h2.1c.1.4.2.7.4 1L1.1 9.5l1.4 1.4L4 9.4c.3.2.7.3 1 .4V12h2V9.9c.4-.1.7-.2 1-.4L9.5 11l1.4-1.4L9.4 8c.2-.3.3-.7.4-1H12zM6 8c-1.1 0-2-.9-2-2s.9-2 2-2 2 .9 2 2-.9 2-2 2z\"></path></symbol><symbol viewBox=\"0 0 12 12\" id=\"icon-gearactive\"><path d=\"M12 7V5H9.9c-.1-.4-.3-.7-.5-1l1.5-1.5-1.4-1.4L8 2.6c-.3-.2-.6-.4-1-.5V0H5v2.1c-.4.1-.7.3-1 .5L2.5 1.1 1.1 2.5 2.6 4c-.2.3-.4.6-.5 1H0v2h2.1c.1.4.2.7.4 1L1.1 9.5l1.4 1.4L4 9.4c.3.2.7.3 1 .4V12h2V9.9c.4-.1.7-.2 1-.4L9.5 11l1.4-1.4L9.4 8c.2-.3.3-.7.4-1H12zM6 8c-1.1 0-2-.9-2-2s.9-2 2-2 2 .9 2 2-.9 2-2 2z\"></path></symbol><symbol viewBox=\"0 0 12 12\" id=\"icon-inplacecheck\"><path d=\"M2 7l1-1 2 2 5-5 1 1-6 6z\"></path></symbol><symbol viewBox=\"0 0 12 12\" id=\"icon-inplacedelete\"><path d=\"M3 2L2 3l3 3-3 3 1 1 3-3 3 3 1-1-3-3 3-3-1-1-3 3z\"></path></symbol><symbol viewBox=\"0 0 12 12\" id=\"icon-inplacedraggable\"><path d=\"M0 4h7v7H0z\"></path><path d=\"M2 3h6v6h1V2H2z\"></path><path d=\"M4 1h6v6h1V0H4z\"></path></symbol><symbol viewBox=\"0 0 12 12\" id=\"icon-inplaceedit\"><path d=\"M1 11h3L1 8zM6 3L2 7l3 3 4-4zM11 4L8 1 7 2l3 3zM7 10h5v1H7z\"></path></symbol><symbol viewBox=\"0 0 12 12\" id=\"icon-inplaceplus\"><path d=\"M11 5H7V1H5v4H1v2h4v4h2V7h4z\"></path></symbol><symbol viewBox=\"0 0 16 16\" id=\"icon-left\"><path d=\"M11 12l-2 2-6-6 6-6 2 2-4 4z\"></path></symbol><symbol viewBox=\"0 0 24 24\" id=\"icon-new_24x24\"><path fill=\"#1AB394\" d=\"M18 11h-5V6h-3v5H5v3h5v5h3v-5h5z\"></path></symbol><symbol viewBox=\"0 0 20 20\" id=\"icon-noncommercial\"><path d=\"M10 0C4.5 0 0 4.5 0 10s4.5 10 10 10 10-4.5 10-10S15.5 0 10 0zM2 10c0-1.4.4-2.8 1.1-3.9l7.6 7.6c-.3.1-.6.2-.9.2-1.1 0-2.1-.4-3-1.1l-1 1.8c.2.2.5.5.9.7s.9.4 1.4.5c.3.1.6.1.9.2v1h2v-1.3c.5-.1.9-.3 1.2-.5l1.7 1.7c-1.1.7-2.5 1.1-3.9 1.1-4.4 0-8-3.6-8-8zm14.1 5.1l-2.4-2.4v-.3c0-.6-.1-1.2-.3-1.6s-.5-.7-.8-.9c-.3-.2-.7-.4-1.1-.5l-1.2-.3c-.1-.1-.2-.1-.4-.2L8.4 7.4c0-.3.2-.6.4-.8.3-.2.7-.3 1.3-.3.8 0 1.6.3 2.4 1l.9-1.8c-.5-.4-1-.7-1.6-.9-.3-.1-.6-.2-.9-.2V3H9v1.4c-.7.1-1.3.3-1.7.7-.2.2-.4.4-.5.7L4.9 3.9C6.3 2.7 8 2 10 2c4.4 0 8 3.6 8 8 0 2-.7 3.7-1.9 5.1z\"></path></symbol><symbol viewBox=\"0 0 16 16\" id=\"icon-right\"><path d=\"M5 4l2-2 6 6-6 6-2-2 4-4z\"></path></symbol><symbol id=\"icon-device-l\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(-509 -409)\"><g transform=\"rotate(-90 884.5 624)\"><use fill=\"#000\" filter=\"url(#device-l-a)\" xlink:href=\"#device-l-b\"></use><use fill=\"#FFF\" xlink:href=\"#device-l-b\"></use></g><rect width=\"70\" height=\"8\" x=\"540\" y=\"628\" fill=\"#F4F4F4\" fill-rule=\"nonzero\" transform=\"rotate(-90 575 632)\" rx=\"4\"></rect><circle cx=\"575\" cy=\"585\" r=\"4\" fill=\"#F4F4F4\" fill-rule=\"nonzero\" transform=\"rotate(-90 575 585)\"></circle><path fill=\"#F4F4F4\" fill-rule=\"nonzero\" d=\"M592 784V464h568v320z\"></path><path fill=\"#E7E7E7\" fill-rule=\"nonzero\" d=\"M592 464v320h568V464H592zm569-1v322H591V463h570z\"></path><circle cx=\"1186\" cy=\"624\" r=\"15\" fill=\"#F4F4F4\"></circle></g></symbol><symbol id=\"icon-device-p\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(-70 -408)\"><use fill=\"#000\" filter=\"url(#device-p-a)\" xlink:href=\"#device-p-b\"></use><use fill=\"#FFF\" xlink:href=\"#device-p-b\"></use><rect width=\"70\" height=\"8\" x=\"242\" y=\"470\" fill=\"#F4F4F4\" fill-rule=\"nonzero\" rx=\"4\"></rect><circle cx=\"324\" cy=\"474\" r=\"4\" fill=\"#F4F4F4\" fill-rule=\"nonzero\"></circle><path fill=\"#E7E7E7\" fill-rule=\"nonzero\" d=\"M124 490h322v570H124V490zm1 1v568h320V491H125z\"></path><path fill=\"#F4F4F4\" fill-rule=\"nonzero\" d=\"M125 491h320v568H125z\"></path><circle cx=\"285\" cy=\"1084\" r=\"15\" fill=\"#F4F4F4\"></circle></g></symbol><symbol viewBox=\"0 0 24 24\" id=\"icon-modified\"><path opacity=\".9\" d=\"M14 11V8h-1.2c-.1-.4-.3-.8-.5-1.2l.9-.8L11 3.8l-.9.9c-.3-.2-.7-.4-1.1-.5V3H6v1.2c-.4.1-.8.3-1.2.5L4 3.8 1.8 6l.9.9c-.2.3-.4.7-.5 1.1H1v3h1.2c.1.4.3.8.5 1.2l-.9.8L4 15.2l.9-.9c.4.2.8.4 1.2.5V16h3v-1.2c.4-.1.8-.3 1.2-.5l.9.9 2.1-2.1-.9-.9c.2-.4.4-.8.5-1.2H14zm-6.5 1.5c-1.7 0-3-1.3-3-3s1.3-3 3-3 3 1.3 3 3-1.3 3-3 3z\"></path><path opacity=\".6\" d=\"M24 17v-2h-1.1c-.1-.4-.2-.7-.4-1l.8-.8-1.4-1.4-.9.8c-.3-.2-.7-.3-1-.4V11h-2v1.1c-.4.1-.7.2-1 .4l-.8-.8-1.4 1.4.8.8c-.2.3-.3.7-.4 1H14v2h1.1c.1.4.2.7.4 1l-.8.8 1.4 1.4.8-.8c.3.2.7.3 1 .4V21h2v-1.1c.4-.1.7-.2 1-.4l.8.8 1.4-1.4-.7-.9c.2-.3.3-.7.4-1H24zm-5 1c-1.1 0-2-.9-2-2s.9-2 2-2 2 .9 2 2-.9 2-2 2z\"></path></symbol><symbol viewBox=\"0 0 24 24\" id=\"icon-saved\"><path opacity=\".9\" d=\"M4 13l2-2 4 4 9-9 2 2-11 11z\"></path></symbol><symbol viewBox=\"0 0 24 24\" id=\"icon-saving\"><path opacity=\".5\" d=\"M10 17h3v5h-3z\"></path><path opacity=\".9\" d=\"M10 1h3v5h-3z\"></path><path opacity=\".2\" d=\"M6 10v3H1v-3z\"></path><path opacity=\".7\" d=\"M22 10v3h-5v-3z\"></path><path opacity=\".6\" d=\"M14.39 16.45l2.12-2.121 3.536 3.535-2.121 2.121z\"></path><path opacity=\".1\" d=\"M2.954 5.136l2.121-2.121L8.61 6.55 6.49 8.672z\"></path><path opacity=\".3\" d=\"M6.49 14.328l2.12 2.122-3.535 3.535-2.121-2.121z\"></path><path opacity=\".8\" d=\"M17.925 3.015l2.121 2.12-3.535 3.536-2.122-2.12z\"></path></symbol></svg>"; /***/ }), /* 94 */ /***/ (function(module, exports) { module.exports = "<script type=\"text/html\" id=\"convert-action\">\n <span class=\"svda_question_action\">\n <!-- ko if: allowChangeType -->\n <select onmousewheel=\"return false;\" class=\"svda_current_type svd-main-color svd-light-bg-color\" data-bind=\"foreach: availableTypes, event: { change: onConvertType }, attr: {title: title}\">\n <option class=\"svd-light-bg-color\" data-bind=\"text: $data.name, value: $data.value, attr:{selected: $data.value === $parent.type ? 'selected': null}\"></option>\n </select>\n <!-- /ko -->\n <!-- ko ifnot: allowChangeType -->\n <span data-bind=\"text: text\" class=\"svda_current_type svd-main-color\"> </span>\n <!-- /ko -->\n </span>\n</script>\n\n<script type=\"text/html\" id=\"action-separator\">\n <span class=\"svda_action_separator svd-dark-border-color\">\n </span>\n</script>\n\n<script type=\"text/html\" id=\"fp-add-question\">\n <span class=\"svda_question_action\">\n <select onmousewheel=\"return false;\" class=\"svda_current_type svd-main-color svd-light-bg-color\" data-bind=\"event: { change: onAddQuestion }, attr: {title: title}\">\n <option class=\"svd-light-bg-color\" data-bind=\"text: title, value: undefined\"></option>\n <!-- ko foreach: availableTypes -->\n <option class=\"svd-light-bg-color\" data-bind=\"text: $data.name || $data, value: $data.value || $data\"></option>\n <!-- /ko -->\n </select>\n </span>\n</script>\n"; /***/ }), /* 95 */ /***/ (function(module, exports) { module.exports = "<div class=\"svd_container svd-light-bg-color\" data-bind=\"css: themeCss\">\n <!-- ko ifnot: haveCommercialLicense -->\n <div class=\"svd_commercial_container\">\n <a\n class=\"svd_commercial_text\"\n href=\"https://surveyjs.io/Licenses#BuildSurvey\"\n target=\"_blank\"\n >\n <span>\n <svg-icon\n class=\"svd-primary-icon\"\n params=\"iconName: 'icon-noncommercial', size: 20\"\n ></svg-icon>\n </span>\n <span class=\"svd_commercial_product svd-main-color\"\n >SurveyJS Creator</span\n >\n <span class=\"svd_noncommercial_use svd-light-text-color\"\n >for non-commercial use only</span\n >\n </a>\n </div>\n <!-- /ko -->\n <ul\n class=\"navbar-default container-fluid nav nav-tabs editor-tabs svd-light-bg-color\"\n >\n <!-- ko foreach: tabs -->\n <li\n class=\"nav-item\"\n data-bind=\"css: {active: $parent.koViewType() == name}\"\n >\n <a class=\"nav-link\" href=\"#\" data-bind=\"click: action, text: title\"></a>\n </li>\n <!-- /ko -->\n </ul>\n <div class=\"panel card svd_content svd-dark-bg-color\">\n <!-- ko foreach: tabs -->\n <div data-bind=\"visible: $parent.koViewType() == name\">\n <!-- ko template: { name: template, data: data, afterRender: function(element, model) { $parent.onEditorTabRenderedCallback(name, element, model, $data); } } -->\n <!-- /ko -->\n </div>\n <!-- /ko -->\n </div>\n <div\n data-bind=\"template: { name: 'questioneditor', data: questionEditorWindow }\"\n ></div>\n</div>\n"; /***/ }), /* 96 */ /***/ (function(module, exports) { module.exports = "<script type=\"text/html\" id=\"jsoneditor\">\n <div data-bind=\"visible: !hasAceEditor\">\n <textarea class=\"svd_json_editor_area\" data-bind=\"textInput:koText, disable: readOnly\"></textarea>\n <!-- ko foreach: koErrors -->\n <div>\n <span>Error: </span><span data-bind=\"text: text\"></span>\n </div>\n <!-- /ko -->\n </div>\n <div id=\"surveyjsJSONEditor\" class=\"svd_json_editor\"></div>\n</script>"; /***/ }), /* 97 */ /***/ (function(module, exports) { module.exports = "<script type=\"text/html\" id=\"surveys-manage\">\n <div class=\"svd-manage\">\n <div class=\"svd-manage-mask\" data-bind=\"visible: isLoading\"></div>\n <div class=\"svd-manage-control svd-light-border-color\">\n <select onmousewheel=\"return false;\" class=\"svd-manage-select\" data-bind=\"visible: !isEditMode(), options: surveys,\n optionsText: 'name',\n value: currentSurvey,\n optionsCaption: 'Choose survey to edit or start editing and survey will be saved automatically...'\"></select>\n <input type=\"text\" class=\"svd-manage-name\" data-bind=\"visible: isEditMode, value: currentSurveyName, event: { keyup: nameEditorKeypress }\"\n />\n </div>\n <div class=\"svd-manage-buttons\">\n <span class=\"icon\" data-bind=\"visible: currentSurvey, click: edit, css: cssEdit, attr: { title: titleEdit }\"></span>\n <span class=\"icon\" data-bind=\"visible: !isEditMode(), click: add, css: cssAdd, attr: { title: titleAdd }\"></span>\n <span class=\"icon icon-delete\" title=\"Delete current survey\" data-bind=\"visible: !isEditMode() && !surveyId() && currentSurvey(), click:remove\"></span>\n </div>\n </div>\n</script>\n<script type=\"text/html\" id=\"attach-survey\">\n <a target=\"_blank\" href=\"#\" data-bind=\"attr: { href: action, title: title }\">\n <span class=\"icon\" data-bind=\"css: innerCss\"></span>\n <span data-bind=\"text: title\"></span>\n </a>\n</script>"; /***/ }), /* 98 */ /***/ (function(module, exports) { module.exports = "<script type=\"text/html\" id=\"objecteditor\">\n <table class=\"table svd_table-nowrap svd_properties_grid\">\n <tbody data-bind=\"foreach: koProperties\">\n <!-- ko template: { name: 'objecteditorproperty', afterRender: $parent.koAfterRender } -->\n <!-- /ko -->\n </tbody>\n </table>\n</script>\n<script type=\"text/html\" id=\"objecteditorproperty\">\n <tr data-bind=\"visible: koVisible, click: $parent.changeActiveProperty($data), css: {'active': $parent.koActiveProperty() == $data}, attr: { 'data-property': name }\">\n <td width=\"50%\">\n <span data-bind=\"text: displayName, attr: {title: title || displayName}\"></span>\n </td>\n <td class=\"svd-light-text-color form-group\" width=\"50%\">\n <div data-bind=\"event: { keydown: $data.editor.keyDownHandler }\">\n <!-- ko template: { name: 'propertyeditor-' + editorTypeTemplate, data: $data.editor } -->\n <!-- /ko -->\n </div>\n </td>\n </tr>\n</script>\n"; /***/ }), /* 99 */ /***/ (function(module, exports) { module.exports = "<script type=\"text/html\" id=\"svd-page-selector-template\">\n <div class=\"svd-page-selector svd_custom_select svd-light-bg-color svd-light-border-color\">\n <select onmousewheel=\"return false;\" data-bind=\"options: pagesSelection, value: pageSelection, optionsText: getDisplayText\"></select>\n </div>\n <div tabindex=\"0\" class=\"svd-page-scroller-arrow\" data-bind=\"key2click, clickNoFocus: moveLeft, attr: {title: getLocString('ed.moveLeft')}\">\n <span>\n <svg-icon class=\"svd-secondary-icon\" params=\"iconName: 'icon-left'\"></svg-icon>\n </span>\n </div>\n\n <div class=\"svd-pages\" data-bind=\"sortable: {foreach: editor.pages, options: sortableOptions}, event: {wheel: onWheel}\">\n <div tabindex=\"0\" class=\"svd-page svd-light-border-color\" data-bind=\"key2click, css: $parent.getPageClass($data), clickNoFocus: $parent.onPageClick\">\n <span class=\"svd-page-name\" data-bind=\"text: $parent.getDisplayText($data)\"></span>\n <span class=\"svd-page-actions-container\">\n <svg-icon data-bind=\"css: $parent.getPageMenuIconClass($data)\" params=\"iconName: $parent.getPageMenuIconClass($data), size: 12\"></svg-icon>\n <!-- ko ifnot: $parent.readOnly -->\n <div style=\"position: static\">\n <div class=\"svd-page-actions svd-dark-border-color svd-light-bg-color\" data-bind=\"visible: $parent.showActions($data)\">\n <span class=\"svd-page-action\" data-bind=\"click: function(model, event) {$parent.showPageSettings($data); event.stopPropagation();}, attr: {title: $parent.getLocString('ed.editPage')}\">\n <span>\n <svg-icon class=\"svd-primary-icon\" params=\"iconName: 'icon-actioneditelement'\"></svg-icon>\n </span>\n <span class=\"svd-main-color\" data-bind=\"text: $parent.getLocString('ed.edit')\"></span>\n </span>\n <span class=\"svd-page-action\" data-bind=\"click: function(model, event) {$parent.deletePage($data); event.stopPropagation();}, attr: {title: $parent.getLocString('ed.deletePage')}, visible: !$parent.isLastPage()\">\n <svg-icon class=\"svd-primary-icon\" params=\"iconName: 'icon-actiondelete'\"></svg-icon>\n </span>\n <span class=\"svda_action_separator svd-dark-border-color\" data-bind=\"visible: !$parent.isLastPage()\"></span>\n <span class=\"svd-page-action\" data-bind=\"click: function(model, event) {$parent.copyPage($data); event.stopPropagation();}, attr: {title: $parent.getLocString('survey.Copy')}\">\n <svg-icon class=\"svd-primary-icon\" params=\"iconName: 'icon-actioncopy'\"></svg-icon>\n </span>\n </div>\n </div>\n <!-- /ko -->\n </span>\n </div>\n </div>\n <div tabindex=\"0\" class=\"svd-page-scroller-arrow\" data-bind=\"key2click, clickNoFocus: moveRight, attr: {title: getLocString('ed.moveRight')}\">\n <span>\n <svg-icon class=\"svd-secondary-icon\" params=\"iconName: 'icon-right'\"></svg-icon>\n </span>\n </div>\n <!-- ko ifnot: readOnly -->\n <div tabindex=\"0\" class=\"svd-page-add\" data-bind=\"key2click, clickNoFocus: addPage, attr: {title: getLocString('ed.addNewPage')}\">\n <span>\n <svg-icon class=\"svd-secondary-icon\" params=\"iconName: 'icon-add'\"></svg-icon>\n </span>\n </div>\n <!-- /ko -->\n</script>\n"; /***/ }), /* 100 */ /***/ (function(module, exports) { module.exports = "<script type=\"text/html\" id=\"elementselector\">\n <!-- ko template: {name: 'propertyeditor-error', data: $data} --><!-- /ko -->\n <div class=\"form-control svd_custom_select\">\n <select onmousewheel=\"return false;\" data-bind=\"if: true, value: koValue, optionsCaption: optionsCaption, valueAllowUnset: true, hasFocus: koHasFocus\">\n <option value=\"\" data-bind=\"text: optionsCaption\"></option>\n <!-- ko foreach: koElements -->\n <option data-bind=\"attr: { disabled: koDisabled, value: name }, text:text\"></option>\n <!-- /ko -->\n </select>\n </div>\n</script>\n"; /***/ }), /* 101 */ /***/ (function(module, exports) { module.exports = "<script type=\"text/html\" id=\"propertyeditor-boolean\">\n <div class=\"sjs-cb-wrapper\">\n <label>\n <div class=\"sjs-cb-container\">\n <input class=\"svd_editor_control\" type=\"checkbox\" data-bind=\"checked: koValue, disable: $data.readOnly\">\n <span class=\"checkmark\" data-bind=\"css: { 'svd-main-background-color': koValue, 'svd-light-background-color': !koValue() }\"></span>\n <!-- ko if: $data.isDiplayNameVisible -->\n <span class=\"sjs-cb-label\" data-bind=\"text: $data.displayName\"></span>\n <!-- /ko -->\n </div>\n </label>\n </div>\n</script>"; /***/ }), /* 102 */ /***/ (function(module, exports) { module.exports = "<script type=\"text/html\" id=\"propertyeditor-cells\">\n <!-- ko template: { name: 'propertyeditor-modal', data: $data } -->\n <!-- /ko -->\n</script>\n<script type=\"text/html\" id=\"propertyeditorcontent-cells\">\n <div class=\"panel card\">\n <div data-bind=\"visible:!koCanEdit(), text: $root.getLocString('pe.cellsEmptyRowsColumns')\"></div>\n <div data-bind=\"visible: koCanEdit\" style=\"overflow:auto\">\n <table class=\"table\">\n <thead>\n <tr>\n <th></th>\n <!-- ko foreach: koColumns -->\n <th>\n <span data-bind=\"text:$data\"></span>\n </th>\n <!-- /ko -->\n </tr>\n </thead>\n <tbody>\n <!-- ko foreach: koRows -->\n <tr>\n <td>\n <span data-bind=\"text:rowText\"></span>\n </td>\n <!-- ko foreach: koCells -->\n <td style=\"min-width:120px\" class=\"form-group\">\n <textarea rows=\"2\" cols=\"25\" class=\"form-control\" data-bind=\"textInput:text\"></textarea>\n </td>\n <!-- /ko -->\n </tr>\n <!-- /ko -->\n </tbody>\n </table>\n </div>\n </div>\n</script>"; /***/ }), /* 103 */ /***/ (function(module, exports) { module.exports = "<script type=\"text/html\" id=\"propertyeditor-condition\">\n <!-- ko template: { name: 'propertyeditor-modal', data: $data } -->\n <!-- /ko -->\n</script>\n\n<script type=\"text/html\" id=\"propertyeditorcontent-condition\">\n <div class=\"propertyeditor-condition\">\n <div class=\"form-inline form-group\">\n <div class=\"form-control svd_custom_select\">\n <select onmousewheel=\"return false;\" style=\"max-width:200px\" data-bind=\"if: true, value: koAddConditionQuestion\">\n <option value=\"\" data-bind=\"text: addConditionQuestionOptions, attr: {title: addConditionQuestionOptions}\" ></option>\n <!-- ko foreach: koAddConditionQuestions -->\n <option data-bind=\"value: name, text: (text || '').substring(0, 80), attr: {title: text}\" ></option>\n <!-- /ko -->\n </select>\n </div>\n <div class=\"form-control svd_custom_select\">\n <select onmousewheel=\"return false;\" data-bind=\"options:availableOperators, optionsValue: 'name', optionsText: 'text', value:koAddConditionOperator\"></select>\n </div>\n <input class=\"form-control\" type=\"text\" data-bind=\"textInput:koAddConditionValue, enable: koAddContionValueEnabled\" style=\"width:120px\"\n />\n <input type=\"button\" class=\"form-control btn btn-primary\" data-bind=\"enable: koCanAddCondition() && !readOnly(), click: onConditionAddClick, value: koAddConditionButtonText\"\n />\n <div class=\"svd_wrap_elements\" data-bind=\"visible:koHasValueSurvey\">\n <survey-widget params=\"survey: koValueSurvey\"></survey-widget>\n </div>\n </div>\n <!-- ko if: $parent.hasAceEditor -->\n <span data-bind=\"text:$data.getLocString('pe.aceEditorHelp')\"></span>\n <div id=\"expression-ace-editor\" style=\"height: 150px; width: 100%;\" data-bind=\"value:koValue, aceEditor:{questions: $parent.availableQuestions, question: $data.editingObject, editor: $parent}\"></div>\n <!-- /ko -->\n\n <!-- ko if: !$parent.hasAceEditor -->\n <textarea class=\"svd-dark-border-color\" data-bind=\"value:koTextValue, disable: readOnly\" rows=\"3\" autofocus=\"autofocus\"></textarea>\n <!-- /ko -->\n\n <!-- <div class=\"assistant\">\n <div class=\"assistant-title\" data-bind=\"text:$data.getLocString('pe.assistantTitle')\"></div>\n <div class=\"assistant-content\" data-bind=\"foreach:availableQuestions\">\n <div class=\"assistant-item\" data-bind=\" text:name, click:function () { $parent.insertQuestion($data, $element); } \"></div>\n </div>\n </div> -->\n <!-- ko if: showHelpText -->\n <span data-bind=\"text:$data.getLocString('pe.conditionHelp')\" style=\"white-space:normal \"></span>\n <div data-bind=\"visible: $data.hasLocString('pe.conditionShowMoreUrl')\">\n <a data-bind=\"attr: { href: $data.getLocString('pe.conditionShowMoreUrl')}, text:$data.getLocString('pe.showMore')\" target=\"_blank\"></a>\n </div>\n <!-- /ko -->\n </div>\n</script>\n"; /***/ }), /* 104 */ /***/ (function(module, exports) { module.exports = "<script type=\"text/html\" id=\"propertyeditor-custom\">\n <!-- ko template: { name: \"propertyeditor-customcontent\", data: $data, afterRender: $data.koAfterRender } --><!-- /ko -->\n</script>\n<script type=\"text/html\" id=\"propertyeditor-customcontent\"><div></div></script>"; /***/ }), /* 105 */ /***/ (function(module, exports) { module.exports = "<script type=\"text/html\" id=\"propertyeditor-value\">\n <!-- ko template: { name: 'propertyeditor-modal', data: $data } -->\n <!-- /ko -->\n</script>\n\n<script type=\"text/html\" id=\"propertyeditorcontent-value\">\n <form>\n <div class=\"svd_wrap_elements\">\n <survey-widget params=\"survey: koSurvey\"></survey-widget>\n </div>\n </form>\n <button type=\"button\" class=\"btn btn-sm btn-danger\" data-bind=\"click: resetValue, text: resetText()\"></button>\n</script>"; /***/ }), /* 106 */ /***/ (function(module, exports) { module.exports = "<script type=\"text/html\" id=\"propertyeditor-dropdown\">\n <div class=\"svd_custom_select svd_property_editor_dropdown\">\n <select onmousewheel=\"return false;\" class=\"form-control svd_editor_control\" data-bind=\"value: koValue, disable: readOnly, options: koChoices, optionsValue: 'value', optionsText: 'text', valueAllowUnset: true, hasFocus: koHasFocus\" style=\"width:100%\"></select>\n </div>\n</script>\n"; /***/ }), /* 107 */ /***/ (function(module, exports) { module.exports = "<script type=\"text/html\" id=\"propertyeditor-error\">\n <div class=\"alert alert-danger\" role=\"alert\" data-bind=\"visible:koDisplayError\">\n <span class=\"glyphicon glyphicon-exclamation-sign\" aria-hidden=\"true\"></span>\n <span class=\"sr-only\">Error:</span>\n <span data-bind=\"text:koErrorText\"></span>\n </div>\n</script>"; /***/ }), /* 108 */ /***/ (function(module, exports) { module.exports = "<script type=\"text/html\" id=\"propertyeditor-expression\">\n <!-- ko template: { name: 'propertyeditor-modal', data: $data } -->\n <!-- /ko -->\n</script>\n\n<script type=\"text/html\" id=\"propertyeditorcontent-expression\">\n <div class=\"propertyeditor-expression\">\n <!-- ko if: $parent.hasAceEditor -->\n <span data-bind=\"text:$root.getLocString('pe.aceEditorHelp')\"></span>\n <div id=\"expression-ace-editor\" style=\"height: 150px; width: 100%;\" data-bind=\"value:koValue, aceEditor: {questions: $parent.availableQuestions, question: $data.editingObject, editor: $parent}\"></div>\n <!-- /ko -->\n\n <!-- ko if: !$parent.hasAceEditor -->\n <textarea class=\"svd-dark-border-color\" data-bind=\"value:koTextValue\" rows=\"3\" autofocus=\"autofocus\"></textarea>\n <!-- /ko -->\n <!-- <div class=\"assistant\">\n <div class=\"assistant-title\" data-bind=\"text:$root.getLocString('pe.assistantTitle')\"></div>\n <div class=\"assistant-content\" data-bind=\"foreach:availableQuestions\">\n <div class=\"assistant-item\" data-bind=\"text:name, click:function () { $parent.insertQuestion($data, $element); } \"></div>\n </div>\n </div> -->\n <!-- ko if: showHelpText -->\n <span data-bind=\"text:$root.getLocString('pe.expressionHelp')\" style=\"white-space:normal\"></span>\n <!-- <div>\n <a data-bind=\"text:$root.getLocString('pe.showMore')\" target=\"_blank\" href=\"https://surveyjs.io/Documentation/LibraryParameter?id=Question¶meter=visibleIf\"></a>\n </div> -->\n <!-- /ko -->\n </div>\n</script>\n"; /***/ }), /* 109 */ /***/ (function(module, exports) { module.exports = "<script type=\"text/html\" id=\"propertyeditor-html\">\n <!-- ko template: { name: 'propertyeditor-modal', data: $data } --><!-- /ko -->\n</script>\n\n<script type=\"text/html\" id=\"propertyeditorcontent-html\">\n <textarea class=\"form-control\" data-bind=\"value:koValue, disable: readOnly\" style=\"width:100%;height:auto\" rows=\"10\" autofocus=\"autofocus\"></textarea>\n</script>\n"; /***/ }), /* 110 */ /***/ (function(module, exports) { module.exports = "<script type=\"text/html\" id=\"propertyeditor-itemvalues\">\n <!-- ko template: { name: 'propertyeditor-modal' } -->\n <!-- /ko -->\n</script>\n<script type=\"text/html\" id=\"propertyeditorcontent-itemvalues\">\n <div style=\"margin-bottom:3px\" data-bind=\"visible: koIsList() && koShowTextView()\">\n <button class=\"btn btn-sm btn-xs\" data-bind=\"css: {'btn-primary': koActiveView() === 'form', 'btn-link': koActiveView() !== 'form'}, click:changeToFormViewClick, text: $root.getLocString('pe.formEntry')\"></button>\n <button class=\"btn btn-sm btn-xs\" data-bind=\"css: {'btn-primary': koActiveView() !== 'form', 'btn-link': koActiveView() === 'form'}, click:changeToTextViewClick, text: $root.getLocString('pe.fastEntry')\"></button>\n </div>\n <div data-bind=\"visible: koActiveView() == 'form'\">\n <!-- ko template: { name: 'propertyeditorcontent-nesteditems', data: $data } -->\n <!-- /ko -->\n </div>\n <div data-bind=\"visible:koIsList() && koActiveView() != 'form'\">\n <textarea class=\"form-control\" data-bind=\"textInput: koItemsText\" style=\"overflow-y: auto; overflow-x:hidden; max-height:400px; min-height:250px; width:100%\"></textarea>\n </div>\n</script>"; /***/ }), /* 111 */ /***/ (function(module, exports) { module.exports = "<script type=\"text/html\" id=\"propertyeditor-matrixdropdowncolumns\">\n <!-- ko template: { name: 'propertyeditor-modal', data: $data } -->\n <!-- /ko -->\n</script>\n<script type=\"text/html\" id=\"propertyeditorcontent-matrixdropdowncolumns\">\n <!-- ko template: { name: 'propertyeditorcontent-nesteditems', data: $data } -->\n <!-- /ko -->\n</script>"; /***/ }), /* 112 */ /***/ (function(module, exports) { module.exports = "<script type=\"text/html\" id=\"propertyeditor-modal\">\n <div class=\"input-group form-group\" data-bind=\"visible:!$data.isEditable\">\n <a tabindex=\"0\" class=\"form-control\" data-bind=\"key2click, click: $data.onShowModal, attr: {'data-target' : modalNameTarget}\">\n <span data-bind=\"text: koText\"></span>\n </a>\n <div class=\"input-group-addon\">\n <span class=\"glyphicon glyphicon-edit\" aria-hidden=\"true\" data-bind=\"click: $data.onShowModal, attr: {'data-target' : modalNameTarget}, text: $root.getLocString('pe.edit')\"></span>\n </div>\n </div>\n <div class=\"input-group form-group\" data-bind=\"visible:$data.isEditable\">\n <input class=\"form-control svd_editor_control\" type=\"text\" data-bind=\"value: koValue, disable: readOnly\" />\n <div class=\"input-group-addon\">\n <span class=\"glyphicon glyphicon-edit\" aria-hidden=\"true\" data-bind=\"click: $data.onShowModal, attr: {'data-target' : modalNameTarget}, text: $root.getLocString('pe.edit')\"></span>\n </div>\n </div>\n\n <div data-bind=\"attr: {id : modalName}\" class=\"modal\" role=\"dialog\">\n <div class=\"modal-dialog\">\n <div class=\"modal-content\">\n <div class=\"modal-header\">\n <button type=\"button\" class=\"close\" data-bind=\"click: onResetClick\">×</button>\n <h4 class=\"modal-title\" data-bind=\"text:$data.koTitleCaption\"></h4>\n </div>\n <div class=\"modal-body svd_notopbottompaddings\">\n <!-- ko template: {name: 'propertyeditor-error', data: $data} -->\n <!-- /ko -->\n <!-- ko template: { name: 'propertyeditor-modalcontent', data: $data } -->\n <!-- /ko -->\n </div>\n <div class=\"modal-footer\">\n <input type=\"button\" class=\"btn btn-primary\" data-bind=\"visible: $data.koShowApplyButton, disable: readOnly, click: $data.onApplyClick, value: $root.getLocString('pe.apply')\"\n style=\"width:100px\" />\n <input type=\"button\" class=\"btn btn-default btn-secondary\" data-bind=\"click: $data.onOkClick, disable: readOnly, value: $root.getLocString('pe.ok')\"\n style=\"width:100px\" />\n <input type=\"button\" class=\"btn btn-primary\" data-bind=\"click: $data.onResetClick, value: $root.getLocString('pe.cancel')\"\n style=\"width:100px\" />\n </div>\n </div>\n </div>\n </div>\n</script>\n"; /***/ }), /* 113 */ /***/ (function(module, exports) { module.exports = "<script type=\"text/html\" id=\"propertyeditor-modalcontent\">\n <div data-bind=\"html: $data.koHtmlTop\"></div>\n <!-- ko template: { name: 'propertyeditorcontent-' + editorTypeTemplate, data: $data, afterRender: $data.koAfterRender } -->\n <!-- /ko -->\n <div data-bind=\"html: $data.koHtmlBottom\"></div>\n</script>"; /***/ }), /* 114 */ /***/ (function(module, exports) { module.exports = "<script type=\"text/html\" id=\"propertyeditor-multiplevalues\">\n <!-- ko template: { name: 'propertyeditor-modal', data: $data } -->\n <!-- /ko -->\n</script>\n<script\n type=\"text/html\"\n class=\"btn-xs\"\n id=\"propertyeditorcontent-multiplevalues\"\n>\n <div style=\"white-space: normal\">\n <!-- ko foreach: { data: koCategories, as: 'cat'} -->\n <div class=\"svd-logic-item-header\" data-bind=\"visible: cat.koTitleVisible\"><span data-bind=\"text: cat.koCategory()\"></span></div>\n <!-- ko foreach: { data: cat.koItems, as: 'item'} -->\n <div class=\"sjs-cb-wrapper\" style=\"display: inline-block;\">\n <label>\n <div class=\"sjs-cb-container\">\n <input type=\"checkbox\" data-bind=\"attr: {value: item.value}, checked: cat.editor.koEditingValue\" />\n <span class=\"checkmark\" data-bind=\"css: cat.editor.getBackgroundCls(item.value)\">\n <span class=\"check\"></span>\n </span>\n <span class=\"sjs-cb-label\" style=\"position: static;\" data-bind=\"text: item.text\"></span>\n </div>\n </label>\n </div>\n <!-- /ko -->\n <!-- /ko -->\n </div>\n</script>\n"; /***/ }), /* 115 */ /***/ (function(module, exports) { module.exports = "<script type=\"text/html\" id=\"propertyeditorcontent-nested\">\n <div style=\"padding-left: 10px;\">\n <button type=\"button\" class=\"btn btn-sm btn-secondary\" data-bind=\"click: onCancelEditItemClick\">\n <span class=\"glyphicon glyphicon-list-alt\"></span>\n </button>\n <span data-bind=\"text: koEditorName\"></span>\n <!-- ko template: { name: \"questioneditor-content\", data: koEditItem().itemEditor } -->\n <!-- /ko -->\n </div>\n</script>\n"; /***/ }), /* 116 */ /***/ (function(module, exports) { module.exports = "<script type=\"text/html\" id=\"propertyeditorcontent-nesteditems\">\n <div data-bind=\"visible: koIsList\" style=\"overflow-y: auto; overflow-x:hidden; max-height:400px;min-height:200px\">\n <table class=\"svd_items_table\">\n <thead>\n <tr>\n <th></th>\n <!-- ko foreach: columns -->\n <th data-bind=\"text: text\"></th>\n <!-- /ko -->\n <th></th>\n </tr>\n </thead>\n <tbody data-bind=\"sortable: { foreach: koItems, options: { handle: '.svd-drag-handle', animation: 150 } }\">\n <tr>\n <td class=\"svd-itemvalue-actions-container\">\n <div class=\"svd-drag-handle svd-itemvalue-action\">\n ☰\n </div>\n <button type=\"button\" class=\"btn btn-default btn-secondary svd-textitems-edit svd-itemvalue-action\" data-bind=\"visible: $data.koHasDetails, click: $parent.onEditItemClick\">\n <span class=\"glyphicon glyphicon-edit\" data-bind=\"text: $root.getLocString('pe.edit')\"></span>\n </button>\n </td>\n <!-- ko foreach: cells -->\n <td class=\"form-group\">\n <!-- ko template: { name: 'propertyeditor', data: objectProperty.editor } -->\n <!-- /ko -->\n </td>\n <!-- /ko -->\n <td class=\"svd-textitems-column\">\n <button type=\"button\" class=\"btn btn-sm btn-danger\" data-bind=\"visible: $parent.koAllowAddRemoveItems, click: $parent.onDeleteClick\">\n <span class=\"glyphicon glyphicon-remove\" aria-hidden=\"true\"></span>\n </button>\n </td>\n </tr>\n </tbody>\n </table>\n <div class=\"svd-items-control-footer\" data-bind=\"visible: koAllowAddRemoveItems\">\n <input type=\"button\" class=\"btn btn-primary\" data-bind=\"click: onAddClick, value: $root.getLocString('pe.addNew')\" />\n <input type=\"button\" class=\"btn btn-danger\" data-bind=\"click: onClearClick, value: $root.getLocString('pe.removeAll')\" />\n </div>\n </div>\n <!-- ko if: !koIsList() -->\n <!-- ko template: { name: \"propertyeditorcontent-nested\", data: $data } -->\n <!-- /ko -->\n <!-- /ko -->\n</script>\n"; /***/ }), /* 117 */ /***/ (function(module, exports) { module.exports = "<script type=\"text/html\" id=\"propertyeditor-number\">\n <input class=\"form-control svd_editor_control\" type=\"number\" data-bind=\"value: koValue, disable: readOnly, attr: {max: koMaxValue, min: koMinValue}\" style=\"width:100%\" />\n</script>\n"; /***/ }), /* 118 */ /***/ (function(module, exports) { module.exports = "<script type=\"text/html\" id=\"propertyeditor-oneselected\">\n <!-- ko template: { name: 'propertyeditor-modal', data: $data } -->\n <!-- /ko -->\n</script>\n<script type=\"text/html\" id=\"propertyeditorcontent-oneselected\">\n <div class=\"propertyeditor-validators\">\n <div class=\"input-group form-group\">\n <!-- ko if: koAvailableClasses().length == 0 -->\n <span class=\"input-group-addon first-addon\" data-bind=\"visible: koAllowAddRemoveItems() && !readOnly(), click: onAddClick\">\n <span class=\"glyphicon glyphicon-plus\" data-bind=\"click: function() { $element.parentElement.focus(); }\"></span>\n </span>\n <!-- /ko -->\n <!-- ko if: koAvailableClasses().length > 0 -->\n <div class=\"input-group-addon first-addon\" data-bind=\"visible: koAllowAddRemoveItems() && !readOnly()\">\n <div class=\"ddmenu-container\">\n <div style=\"-webkit-tap-highlight-color:rgba(0,0,0,0)\" data-bind=\"trueclick\"></div>\n\n <div class=\"ddmenu\">\n <span tabindex=\"0\">\n <span class=\"glyphicon glyphicon-plus svd-main-color\" data-bind=\"click: function() { $element.parentElement.focus(); }\"></span>\n </span>\n\n <div tabindex=\"0\" data-bind=\"trueclick\"></div>\n <ul class=\"svd-light-bg-color\">\n <!-- ko foreach: koAvailableClasses -->\n <li>\n <a href=\"#\" data-bind=\"click: $parent.onAddClick\">\n <span data-bind=\"text:$data.text\"></span>\n </a>\n </li>\n <!-- /ko -->\n </ul>\n </div>\n </div>\n </div>\n <!-- /ko -->\n <div class=\"form-control svd_custom_select\">\n <select onmousewheel=\"return false;\" data-bind=\"options: koItems, optionsText: 'koText', value: koSelected\"></select>\n </div>\n <span class=\"input-group-addon btn-danger\" data-bind=\"visible: koAllowAddRemoveItems, enable: koSelected() != null, click: onDeleteClick\">\n <span class=\"glyphicon glyphicon-remove\"></span>\n </span>\n </div>\n <!-- ko if: selectedObjectEditor() != null -->\n <!-- ko template: { name: \"questioneditor-content\", data: selectedObjectEditor() } --><!-- /ko -->\n <!-- /ko -->\n </div>\n</script>\n"; /***/ }), /* 119 */ /***/ (function(module, exports) { module.exports = "<script type=\"text/html\" id=\"propertyeditor-restfull\">\n <!-- ko template: { name: 'propertyeditor-modal', data: $data } -->\n <!-- /ko -->\n</script>\n\n<script type=\"text/html\" id=\"propertyeditorcontent-restfull\">\n <form>\n <div class=\"form-group\" data-bind=\"foreach: koItems\">\n <div class=\"form-group\">\n <label data-bind=\"attr: {for: name}, text: $root.getLocString('pe.'+name)\"></label>\n <input type=\"text\" data-bind=\"attr: {id: name}, value:koValue\" class=\"form-control\"></input>\n </div>\n </div>\n <div class=\"form-group\">\n <label for=\"titleName\">\n <span data-bind=\"text:$root.getLocString('pe.testService')\"></span>\n </label>\n <div class=\"form-control svd_custom_select\" style=\"display: block;\">\n <select onmousewheel=\"return false;\" data-bind=\"options: question.visibleChoices, optionsText: 'text', optionsValue: 'value', optionsCaption: question.optionsCaption\"></select>\n </div>\n </div>\n </form>\n</script>\n"; /***/ }), /* 120 */ /***/ (function(module, exports) { module.exports = "<script type=\"text/html\" id=\"propertyeditor-string\">\n <input class=\"form-control svd_editor_control\" type=\"text\" data-bind=\"value: koValue, disable: readOnly, attr: {placeholder: defaultValue, maxLength: koMaxLength}\" style=\"width:100%\" />\n</script>\n"; /***/ }), /* 121 */ /***/ (function(module, exports) { module.exports = "<script type=\"text/html\" id=\"propertyeditor-text\">\n <!-- ko template: { name: 'propertyeditor-modal', data: $data } --><!-- /ko -->\n</script>\n\n<script type=\"text/html\" id=\"propertyeditorcontent-text\">\n <textarea class=\"form-control\" data-bind=\"value:koValue, disable: readOnly, attr: {rows: isDiplayNameVisible ? '2' : '5', maxLength: koMaxLength}\" style=\"width:100%;height:auto\" autofocus=\"autofocus\"></textarea>\n</script>\n"; /***/ }), /* 122 */ /***/ (function(module, exports) { module.exports = "<script type=\"text/html\" id=\"propertyeditor-textitems\">\n <!-- ko template: { name: 'propertyeditor-modal', data: $data } -->\n <!-- /ko -->\n</script>\n<script type=\"text/html\" id=\"propertyeditorcontent-textitems\">\n <!-- ko template: { name: 'propertyeditorcontent-nesteditems', data: $data } -->\n <!-- /ko -->\n</script>"; /***/ }), /* 123 */ /***/ (function(module, exports) { module.exports = "<script type=\"text/html\" id=\"propertyeditor-triggers\">\n <!-- ko template: { name: 'propertyeditor-modal', data: $data } -->\n <!-- /ko -->\n</script>\n<script type=\"text/html\" id=\"propertyeditorcontent-triggers\">\n <div class=\"propertyeditor-triggers\">\n <div class=\"input-group form-group\">\n <div class=\"input-group-addon first-addon\" data-bind=\"visible: koAllowAddRemoveItems() && !readOnly()\">\n <div class=\"ddmenu-container\">\n <div style=\"-webkit-tap-highlight-color:rgba(0,0,0,0)\" data-bind=\"trueclick\"></div>\n\n <div class=\"ddmenu\">\n <span tabindex=\"0\" data-bind=\"attr: { title: $root.getLocString('pe.addNew') }\">\n <span class=\"glyphicon glyphicon-plus svd-main-color\" data-bind=\"click: function() { $element.parentElement.focus(); }\"></span>\n </span>\n <div tabindex=\"0\" data-bind=\"trueclick\"></div>\n <ul class=\"svd-light-bg-color\">\n <!-- ko foreach: koTriggers -->\n <li>\n <a data-bind=\"click: $parent.onAddClick, text:$data.text\"></a>\n </li>\n <!-- /ko -->\n </ul>\n </div>\n </div>\n </div>\n <div class=\"form-control svd_custom_select\">\n <select onmousewheel=\"return false;\" data-bind=\"options: koItems, optionsText: 'koText', value: koSelected\"></select>\n </div>\n <span data-bind=\"visible: koAllowAddRemoveItems, attr: { title: $root.getLocString('pe.delete') }, enable: koSelected() != null && !readOnly(), click: onDeleteClick\"\n class=\"input-group-addon btn-danger\">\n <span class=\"glyphicon glyphicon-remove\"></span>\n </span>\n </div>\n <div data-bind=\"visible: koSelected() == null\">\n <div data-bind=\"visible: koQuestions().length == 0, text: $root.getLocString('pe.noquestions')\"></div>\n <div data-bind=\"visible: koQuestions().length > 0, text: $root.getLocString('pe.createtrigger')\"></div>\n </div>\n <div data-bind=\"visible: koSelected() != null\">\n <div data-bind=\"with: koSelected\">\n <!-- ko template: { name: 'propertyeditorcontent-condition', data: conditionEditor } -->\n <!-- /ko -->\n <!-- ko template: { name: 'propertyeditorcontent-trigger-content', data: $data } -->\n <!-- /ko -->\n </div>\n </div>\n </div>\n</script>\n<script type=\"text/html\" id=\"propertyeditorcontent-trigger-content\">\n <!-- ko if: koType() == 'visibletrigger' -->\n <div class=\"row\">\n <div class=\"col-lg-6 col-sm-6\">\n <!-- ko template: { name: 'propertyeditor-triggersitems', data: pages } -->\n <!-- /ko -->\n </div>\n <div class=\"col-lg-6 col-sm-6\">\n <!-- ko template: { name: 'propertyeditor-triggersitems', data: questions } -->\n <!-- /ko -->\n </div>\n </div>\n <!-- /ko -->\n <!-- ko if: koType() == 'completetrigger' -->\n <div class=\"row\">\n <div style=\"margin: 10px\" data-bind=\"text: $root.getLocString('pe.triggerCompleteText')\"></div>\n </div>\n <!-- /ko -->\n <!-- ko if: koType() == 'setvaluetrigger' -->\n <div class=\"row col-lg-12 col-sm-12\">\n <div data-bind=\"text: $root.getLocString('pe.triggerSetToName')\"></div>\n </div>\n <div class=\"row\">\n <div class=\"col-lg-12 col-sm-12\">\n <div class=\"form-group\">\n <!-- ko template: { name: \"elementselector\", data: setToNameSelector } --><!-- /ko -->\n </div>\n </div>\n <div class=\"col-lg-12 col-sm-12\">\n <div class=\"form-group\" data-bind=\"visible:koHasSurvey\">\n <survey-widget params=\"survey: koSurvey\"></survey-widget>\n </div>\n </div>\n </div>\n <!-- /ko -->\n <!-- ko if: koType() == 'copyvaluetrigger' -->\n <div class=\"row\">\n <div class=\"col-lg-6 col-sm-6\">\n <div class=\"form-group\">\n <div data-bind=\"text: $root.getLocString('pe.triggerSetToName')\"></div>\n <!-- ko template: { name: \"elementselector\", data: setToNameSelector } --><!-- /ko -->\n </div>\n </div>\n <div class=\"col-lg-6 col-sm-6\">\n <div class=\"form-group\">\n <div data-bind=\"text: $root.getLocString('pe.triggerFromName')\"></div>\n <!-- ko template: { name: \"elementselector\", data: fromNameSelector } --><!-- /ko -->\n </div>\n </div>\n </div>\n <!-- /ko -->\n <!-- ko if: koType() == 'skiptrigger' -->\n <div class=\"row\">\n <div class=\"form-group col-lg-12 col-sm-12\">\n <div data-bind=\"text: $root.getLocString('pe.triggerGotoName')\"></div>\n <!-- ko template: { name: \"elementselector\", data: gotoNameSelector } --><!-- /ko -->\n </div>\n </div>\n <!-- /ko -->\n <!-- ko if: koType() == 'runexpressiontrigger' -->\n <div class=\"row\">\n <div class=\"form-group col-lg-12 col-sm-12\">\n <div data-bind=\"text: $root.getLocString('pe.triggerSetToName')\"></div>\n <!-- ko template: { name: \"elementselector\", data: setToNameSelector } --><!-- /ko -->\n <div data-bind=\"text: $root.getLocString('pe.triggerRunExpression')\"></div>\n <!-- ko template: {name: 'propertyeditor-error', data: $data} --><!-- /ko -->\n <textarea class=\"form-control\" type=\"text\" data-bind=\"value:korunExpression\" rows=\"3\"></textarea>\n </div>\n </div>\n <!-- /ko -->\n</script>\n"; /***/ }), /* 124 */ /***/ (function(module, exports) { module.exports = "<script type=\"text/html\" id=\"propertyeditor-triggersitems\">\n <div>\n <div class=\"form-group\" data-bind=\"text: title\"></div>\n <div class=\"form-group input-group\">\n <select onmousewheel=\"return false;\" class=\"form-control\" multiple=\"multiple\" data-bind=\"options:koChoosen, value: koChoosenSelected, optionsText: 'text'\"></select>\n <span class=\"input-group-addon btn-danger\" data-bind=\"click: deleteItem\">\n <span class=\"glyphicon glyphicon-remove\"></span>\n </span>\n </div>\n <div class=\"form-group input-group\">\n <div class=\"form-control svd_custom_select\">\n <select onmousewheel=\"return false;\" data-bind=\"options:koObjects, value: koSelected, optionsText: 'text'\"></select>\n </div>\n <span class=\"input-group-addon btn-default\" data-bind=\"click: addItem\">\n <span class=\"glyphicon glyphicon-plus svd-main-color\"></span>\n </span>\n </div>\n </div>\n</script>\n"; /***/ }), /* 125 */ /***/ (function(module, exports) { module.exports = "<script type=\"text/html\" id=\"propertyeditor\">\n <label data-bind=\"text:displayName, visible: showDisplayNameOnTop\"></label>\n <!-- ko template: {name: 'propertyeditor-error', data: $data} -->\n <!-- /ko -->\n <!-- ko template: {name: $data.contentTemplateName, data: $data} -->\n <!-- /ko -->\n</script>"; /***/ }), /* 126 */ /***/ (function(module, exports) { module.exports = "<script type=\"text/html\" id=\"questioneditor-content\">\n <!-- ko if: $data.useTabsInElementEditor -->\n <ul class=\"nav nav-tabs modal-tabs\" data-bind=\"foreach: koTabs\">\n <li class=\"nav-item\" role=\"presentation\" data-bind=\"css: {active: $parent.koActiveTab() == $data.name}, click: $parent.onTabClick\">\n <a class=\"nav-link\" data-bind=\"css: {active: $parent.koActiveTab() == $data.name}\">\n <span data-bind=\"text:$data.title\"></span>\n </a>\n </li>\n </ul>\n <!-- ko foreach: koTabs -->\n <div data-bind=\"if: $parent.koActiveTab() === $data.name\" style=\"margin-top:5px\">\n <!-- ko template: { name: $data.htmlTemplate, data: $data.templateObject, afterRender: $data.koAfterRender } -->\n <!-- /ko -->\n </div>\n <!-- /ko -->\n <!-- /ko -->\n <!-- ko ifnot: $data.useTabsInElementEditor -->\n <svd-accordion params=\"tabs: koTabs, template: 'svd-editor-tab-template'\"></svd-accordion>\n <!-- /ko -->\n</script>\n\n<script type=\"text/html\" id=\"svd-editor-tab-template\">\n <!-- ko template: { name: $data.htmlTemplate, data: $data.templateObject, afterRender: $data.koAfterRender } -->\n <!-- /ko -->\n</script>"; /***/ }), /* 127 */ /***/ (function(module, exports) { module.exports = "<script type=\"text/html\" id=\"questioneditor\">\n <div id=\"surveyquestioneditorwindow\" class=\"modal\" data-bind=\"with:koEditor\">\n <div class=\"modal-dialog\">\n <div class=\"modal-content\">\n <div class=\"modal-header\">\n <button type=\"button\" class=\"close\" data-bind=\"click: onResetClick\">×</button>\n <h4 class=\"modal-title\" data-bind=\"text:koTitle\"></h4>\n </div>\n <div class=\"modal-body svd_notopbottompaddings\">\n <!-- ko template: { name: \"questioneditor-content\", data: $data } -->\n <!-- /ko -->\n </div>\n <div class=\"modal-footer\">\n <input type=\"button\" class=\"btn btn-primary\" data-bind=\"visible: koShowApplyButton, disable: readOnly, click: onApplyClick, value: $root.getLocString('pe.apply')\"\n style=\"width:100px\" />\n <input type=\"button\" class=\"btn btn-default btn-secondary\" data-bind=\"click: onOkClick, disable: readOnly, value: $root.getLocString('pe.ok')\"\n style=\"width:100px\" />\n <input type=\"button\" class=\"btn btn-primary\" data-bind=\"click: onResetClick, value: $root.getLocString('pe.cancel')\" style=\"width:100px\"\n />\n </div>\n </div>\n </div>\n </div>\n</script>\n"; /***/ }), /* 128 */ /***/ (function(module, exports) { module.exports = "<script type=\"text/html\" id=\"questioneditortab\">\n <div class=\"row\" data-bind=\"css: 'svd-popup-editor-tab-' + name, attr: {id: 'editor_tab_id_' + name}\">\n <div class=\"col-sm-12\">\n <!-- ko foreach: properties.rows -->\n <div class=\"form-group\">\n <!-- ko foreach: properties -->\n <div data-bind=\"visible: objectProperty.koVisible, event: { keydown: objectProperty.editor.keyDownHandler }, attr: { 'data-property': property.name }\">\n <!-- ko template: { name: 'propertyeditor', data: objectProperty.editor } --><!-- /ko -->\n </div>\n <!-- /ko -->\n </div>\n <!-- /ko -->\n </div>\n </div>\n</script>\n"; /***/ }), /* 129 */ /***/ (function(module, exports) { module.exports = "<script type=\"text/html\" id=\"surveyembeding\">\n <div class=\"row\">\n <div class=\"form-control svd_custom_select svd_embed_tab\">\n <select onmousewheel=\"return false;\" data-bind=\"if: true, value:koLibraryVersion\">\n <option value=\"angular\" data-bind=\"text: $root.getLocString('ew.angular')\"></option>\n <option value=\"jquery\" data-bind=\"text: $root.getLocString('ew.jquery')\"></option>\n <option value=\"knockout\" data-bind=\"text: $root.getLocString('ew.knockout')\"></option>\n <option value=\"react\" data-bind=\"text: $root.getLocString('ew.react')\"></option>\n <option value=\"vue\" data-bind=\"text: $root.getLocString('ew.vue')\"></option>\n </select>\n </div>\n <div class=\"form-control svd_custom_select svd_embed_tab\">\n <select onmousewheel=\"return false;\" data-bind=\"if: true, value:koScriptUsing\">\n <option value=\"bootstrap\" data-bind=\"text: $root.getLocString('ew.bootstrap')\"></option>\n <option value=\"standard\" data-bind=\"text: $root.getLocString('ew.standard')\"></option>\n </select>\n </div>\n <div class=\"form-control svd_custom_select svd_embed_tab\">\n <select onmousewheel=\"return false;\" data-bind=\"if: true, value:koShowAsWindow\">\n <option value=\"page\" data-bind=\"text: $root.getLocString('ew.showOnPage')\"></option>\n <option value=\"window\" data-bind=\"text: $root.getLocString('ew.showInWindow')\"></option>\n </select>\n </div>\n <label class=\"checkbox-inline form-check-label\" data-bind=\"visible:koHasIds\">\n <input type=\"checkbox\" data-bind=\"checked:koLoadSurvey\" />\n <span data-bind=\"text: $root.getLocString('ew.loadFromServer')\"></span>\n </label>\n </div>\n <div class=\"panel card\">\n <div class=\"panel-heading card-header\" data-bind=\"text: $root.getLocString('ew.titleScript')\"></div>\n <div data-bind=\"visible:hasAceEditor\">\n <div id=\"surveyEmbedingHead\" style=\"height:70px;width:100%\"></div>\n </div>\n <textarea data-bind=\"visible:!hasAceEditor, text: koHeadText\" style=\"height:70px;width:100%\"></textarea>\n </div>\n <div class=\"panel card\" data-bind=\"visible: koVisibleHtml\">\n <div class=\"panel-heading card-header\" data-bind=\"text: $root.getLocString('ew.titleHtml')\"></div>\n <div data-bind=\"visible:hasAceEditor\">\n <div id=\"surveyEmbedingBody\" style=\"height:30px;width:100%\"></div>\n </div>\n <textarea data-bind=\"visible:!hasAceEditor, text: koBodyText\" style=\"height:30px;width:100%\"></textarea>\n </div>\n <div class=\"panel card\">\n <div class=\"panel-heading card-header\" data-bind=\"text: $root.getLocString('ew.titleJavaScript')\"></div>\n <div data-bind=\"visible:hasAceEditor\">\n <div id=\"surveyEmbedingJava\" style=\"height:300px;width:100%\"></div>\n </div>\n <textarea data-bind=\"visible:!hasAceEditor, text: koJavaText\" style=\"height:300px;width:100%\"></textarea>\n </div>\n</script>"; /***/ }), /* 130 */ /***/ (function(module, exports, __webpack_require__) { module.exports = "<script type=\"text/html\" id=\"surveylive\">\n <div data-bind=\"visible: koIsRunning()\">\n <span data-bind=\"visible: koPages().length > 1 && koShowPagesInTestSurveyTab()\">\n <label for=\"testSurveyPageChanged\" data-bind=\"text: selectPageText\"></label>\n <span id=\"testSurveyPageChanged\">\n <select onmousewheel=\"return false;\" class=\"form-control\" data-bind=\"options: koPages, optionsText: 'title', optionsValue: 'page', value: koActivePage, optionsAfterRender: setPageDisable\"></select>\n </span>\n </span>\n <span data-bind=\"visible: koShowDefaultLanguageInTestSurveyTab\">\n <label for=\"testSurveyLocale\" data-bind=\"text: localeText\"></label>\n <span id=\"testSurveyLocale\">\n <select onmousewheel=\"return false;\" class=\"form-control\" data-bind=\"options: koLanguages, value: koActiveLanguage, optionsText:'text', optionsValue: 'value'\"></select>\n </span>\n </span>\n <label id=\"testShowInvisibleElements\" data-bind=\"visible: koShowInvisibleElementsInTestSurveyTab\">\n <div class=\"sjs-cb-container\">\n <input class=\"svd_editor_control\" type=\"checkbox\" data-bind=\"checked: koShowInvisibleElements\">\n <span class=\"checkmark\" data-bind=\"css: { 'svd-main-background-color': koShowInvisibleElements(), 'svd-light-background-color': !koShowInvisibleElements() }\"></span>\n <span class=\"sjs-cb-label\" data-bind=\"text: showInvisibleElementsText\"></span>\n </div>\n </label>\n <!-- ko if: simulatorEnabled -->\n <span>\n <label for=\"testDeviceSelector\" data-bind=\"text: simulatorText\"></label>\n <span id=\"testDeviceSelector\">\n <select onmousewheel=\"return false;\" class=\"form-control\" data-bind=\"options: koDevices, value: koActiveDevice, optionsText:'text', optionsValue: 'value'\"></select>\n </span>\n </span>\n <!-- /ko -->\n <!-- ko if: koHasFrame -->\n <label for=\"testDeviceOrientation\">\n <div class=\"sjs-cb-container\">\n <input id=\"testDeviceOrientation\" class=\"svd_editor_control\" type=\"checkbox\" data-bind=\"checked: koLandscapeOrientation\">\n <span class=\"checkmark\" data-bind=\"css: { 'svd-main-background-color': koLandscapeOrientation(), 'svd-light-background-color': !koLandscapeOrientation() }\"></span>\n <span class=\"sjs-cb-label\" data-bind=\"text: landscapeOrientationText\"></span>\n </div>\n </label>\n <!-- /ko -->\n </div>\n <!-- ko template: \"survey-simulator\" -->\n <!-- /ko -->\n <!-- ko ifnot: koIsRunning -->\n <div class=\"svd_test_results\">\n <div class=\"svd_results_header\">\n <button class=\"btn btn-primary\" data-bind=\"click: selectTestClick, text: testSurveyAgainText\"></button>\n <h2 data-bind=\"text: surveyResultsText\"></h2>\n </div>\n <ul class=\"navbar-default container-fluid nav nav-tabs editor-tabs\">\n <li class=\"nav-item active\" data-bind=\"css: {active: koResultViewType() === 'table'}\">\n <a class=\"nav-link\" href=\"#\" data-bind=\"click: selectTableClick, text: $root.getLocString('ed.surveyResultsTable')\"></a>\n </li>\n <li class=\"nav-item\" data-bind=\"css: {active: koResultViewType() === 'text'}\">\n <a class=\"nav-link\" href=\"#\" data-bind=\"click: selectJsonClick, text: $root.getLocString('ed.surveyResultsJson')\"></a>\n </li>\n </ul>\n <div class=\"svd_results_text svd-light-bg-color\" data-bind=\"visible: koResultViewType() === 'text'\">\n <div data-bind=\"text: koResultText\"></div>\n </div>\n <div class=\"svd_results_table svd-light-bg-color\" data-bind=\"visible: koResultViewType() === 'table'\">\n <table>\n <thead>\n <tr class=\"svd-light-background-color\">\n <th class=\"svd-dark-border-color\" data-bind=\"text: resultsTitle\"></th>\n <th class=\"svd-dark-border-color\" data-bind=\"text: resultsName\"></th>\n <th class=\"svd-dark-border-color\" data-bind=\"text: resultsValue\"></th>\n <th class=\"svd-dark-border-color\" data-bind=\"text: resultsDisplayValue\"></th>\n </tr>\n </thead>\n <tbody>\n <!-- ko foreach: koResultData -->\n <!-- ko template: \"survey-result-table-row\" -->\n <!-- /ko -->\n <!-- /ko -->\n </tbody>\n </table>\n </div>\n </div>\n <!-- /ko -->\n</script>\n<script type=\"text/html\" id=\"survey-result-table-row\">\n <tr data-bind=\"click: function() { isNode && collapsed(!collapsed()); }\">\n <td class=\"svd-dark-border-color\">\n <!-- ko if: isNode -->\n <span class=\"survey-result-marker\" data-bind=\"css: { 'survey-result-marker--expanded': !collapsed() }\">▶</span>\n <!-- /ko -->\n <span data-bind=\"text: title\"></span></td>\n <td class=\"svd-dark-border-color\" data-bind=\"text: name\"></td>\n <td class=\"svd-dark-border-color\"><div class=\"survey-result-value\" data-bind=\"text: getString(value)\"></div></td>\n <td class=\"svd-dark-border-color\" data-bind=\"text: getString(displayValue)\"></td>\n </tr>\n <!-- ko if: isNode && !collapsed() -->\n <!-- ko foreach: data -->\n <!-- ko template: \"survey-result-table-row\" -->\n <!-- /ko -->\n <!-- /ko -->\n <!-- /ko -->\n</script>\n\n<script type=\"text/html\" id=\"survey-simulator\">\n <div class=\"svd-simulator-main\">\n <!-- ko if: koHasFrame -->\n <div class=\"svd-simulator-wrapper\" data-bind=\"style: { width: koSimulatorFrame().frameWidth + 'px', height: koSimulatorFrame().frameHeight + 'px' }\">\n <img class=\"svd-simulator-frame\" data-bind=\"visible: !koLandscapeOrientation()\" src=\"" + __webpack_require__(147) + "\"/>\n <img class=\"svd-simulator-frame\" data-bind=\"visible: koLandscapeOrientation\" src=\"" + __webpack_require__(146) + "\"/>\n <div class=\"svd-simulator\" data-bind=\"style: { width: koSimulatorFrame().width / koSimulatorFrame().scale + 'px', height: koSimulatorFrame().height / koSimulatorFrame().scale + 'px', top: koSimulatorFrame().frameY + 'px', left: koSimulatorFrame().frameX + 'px', transform: 'scale(' + koSimulatorFrame().scale + ')' }\">\n <survey-widget class=\"svd-simulator-content\" params=\"survey: koSurvey\"></survey-widget>\n </div>\n </div>\n <!-- /ko -->\n <!-- ko ifnot: koHasFrame -->\n <survey-widget class=\"svd-simulator-content\" params=\"survey: koSurvey\"></survey-widget>\n <!-- /ko -->\n </div>\n</script>\n"; /***/ }), /* 131 */ /***/ (function(module, exports) { module.exports = "<script type=\"text/html\" id=\"surveylogic\">\n <div data-bind=\"visible: koMode() == 'view'\">\n <input type=\"button\" class=\"btn btn-primary\" data-bind=\"visible: !koReadOnly(), click: $data.koAddNew, value: $root.getLocString('pe.addNew')\" />\n <!-- ko foreach: {data: $data.koItems, as: 'item' } -->\n <div class=\"svd-logic-item-header\">\n <span class=\"svd-logic-header-item-icon svd-main-color\" data-bind=\"visible: !$data.isReadOnly, key2click, clickNoFocus: $data.edit, attr: {title: $data.editText }\">\n <svg-icon class=\"svd-primary-icon\" params=\"iconName: 'icon-actioneditelement'\"></svg-icon>\n <span class=\"svd-logic-header-icon-text\" data-bind=\"text: $data.editText\"></span>\n </span>\n <span class=\"svd-logic-header-item-icon svd-main-color\" data-bind=\"visible: !$data.isReadOnly, key2click, clickNoFocus: $data.remove, attr: {title: $data.deleteText }\">\n <svg-icon class=\"svd-primary-icon\" params=\"iconName: 'icon-actiondelete'\"></svg-icon>\n </span>\n <span class=\"svda_action_separator svd-dark-border-color\"></span>\n <span class=\"svd-logic-header-item-text\" data-bind=\"text: item.title\"></span>\n </div>\n <div>\n <span data-bind=\"text: item.expressionText\"></span>\n <!-- ko foreach: {data: $data.koOperations, as: 'op' } -->\n <div>\n <span data-bind=\"text: op.text\"></span>\n </div>\n <!-- /ko -->\n </div>\n <!-- /ko -->\n </div>\n <div data-bind=\"visible: koMode() == 'new' || koMode() == 'edit'\">\n <div>\n <input type=\"button\" class=\"btn btn-primary\" data-bind=\"click:$data.koSaveAndShowView, value: $root.getLocString('pe.saveAndBack')\" />\n <input type=\"button\" class=\"btn btn-primary\" data-bind=\"click: $data.koSaveEditableItem, value: $root.getLocString('pe.save')\"/>\n <input type=\"button\" class=\"btn btn-primary\" data-bind=\"click: $data.koShowView, value: $root.getLocString('pe.back')\"/>\n </div>\n <div>\n <!-- ko template: {name: 'propertyeditor-error', data: $data} --><!-- /ko -->\n </div>\n <!-- ko template: { name: 'propertyeditor', data: $data.expressionEditor } --><!-- /ko -->\n <!--ko if: $data.koEditableItem() != null -->\n <!-- ko foreach: {data: $data.koEditableItem().koOperations, as: 'op' } -->\n <div data-bind=\"visible: op.templateObject !== null\">\n <div class=\"svd-logic-item-header\">\n <span class=\"svd-logic-header-item-icon svd-main-color\" data-bind=\"key2click, clickNoFocus: $parent.koRemoveOperation, attr: {title: $data.deleteOperationText }\">\n <span>\n <svg-icon class=\"svd-primary-icon\" params=\"iconName: 'icon-actiondelete'\"></svg-icon>\n </span>\n </span>\n <span class=\"svda_action_separator svd-dark-border-color\"></span>\n <span data-bind=\"text: op.name\"></span>\n </div>\n <!-- ko template: { name: op.template, data: op.templateObject } --><!-- /ko -->\n </div>\n <!-- /ko -->\n <!-- /ko -->\n <div class=\"svd-logic-item-header\"><span data-bind=\"text:$data.addNewOperationText\"></span></div>\n <!-- ko foreach: {data: $data.koLogicTypes, as: 'item' } -->\n <div data-bind=\"visible: item.koVisible\">\n <input type=\"button\" class=\"btn btn-primary\" data-bind=\"click:$parent.koAddNewOperation, value: item.displayName\" />\n <p>\n <span data-bind=\"text:item.description\"></span>\n </p>\n <hr />\n </div>\n <!-- /ko -->\n </div>\n</script>\n"; /***/ }), /* 132 */ /***/ (function(module, exports, __webpack_require__) { module.exports = "<script type=\"text/html\" id=\"se-tab-designer\">\n <div\n class=\"row svd_survey_designer\"\n >\n <div data-bind=\"visible: koShowToolbox\"\n class=\"col-lg-2 col-md-2 col-sm-1 col-xs-1 svd_toolbox svd-dark-bg-color\"\n >\n <!-- ko if: toolbox.koHasCategories -->\n <div\n class=\"panel-group\"\n role=\"tablist\"\n data-bind=\"foreach: toolbox.koCategories\"\n >\n <div class=\"panel panel-info\">\n <div\n class=\"svd-toolbox-category-header\"\n role=\"tab\"\n data-bind=\"click: expand\"\n >\n <span\n data-bind=\"css: { 'svd-main-color': !koCollapsed() }, text: name\"\n ></span>\n <!--ko if: $parent.koCanCollapseCategories -->\n <!-- ko if: koCollapsed -->\n <svg-icon\n class=\"icon-toolbox-arrow\"\n params=\"iconName: 'icon-arrow_down_10x10', size: 10\"\n ></svg-icon>\n <!-- /ko -->\n <!-- ko ifnot: koCollapsed -->\n <svg-icon\n class=\"icon-toolbox-arrow svd-primary-icon\"\n params=\"iconName: 'icon-arrow_up_10x10', size: 10\"\n ></svg-icon>\n <!-- /ko -->\n <!-- /ko -->\n </div>\n <div\n role=\"tabpanel\"\n data-bind=\"css: { 'panel-collapse collapse': koCollapsed}\"\n >\n <!-- ko foreach: items -->\n <!-- ko template: { name: 'se-tab-designer-item', data: $data } --><!-- /ko -->\n <!-- /ko -->\n </div>\n </div>\n </div>\n <!-- /ko -->\n <!-- ko if: !toolbox.koHasCategories() -->\n <div\n class=\"svd_toolbox_title hidden-sm hidden-xs\"\n data-bind=\"text: $root.getLocString('ed.toolbox')\"\n ></div>\n <!-- ko foreach: toolbox.koItems -->\n <!-- ko template: { name: 'se-tab-designer-item', data: $data } --><!-- /ko -->\n <!-- /ko -->\n <!-- /ko -->\n </div>\n <!-- ko if: koShowToolbox -->\n <svd-splitter params=\"minLeft: 100, minRight: 600\"></svd-splitter>\n <!-- /ko -->\n <div\n class=\"col-xs-11 svd_editors\"\n data-bind=\"css: {'col-lg-7 col-md-7 col-sm-8 col-xs-8': !koHideAdvancedSettings() && koShowToolbox(), 'col-lg-9 col-md-9 col-sm-9 col-xs-9': !koHideAdvancedSettings() && !koShowToolbox(), 'col-lg-10 col-md-10 col-sm-11 col-xs-11': koHideAdvancedSettings() && koShowToolbox(), 'col-lg-12 col-md-12 col-sm-12 col-xs-12': koHideAdvancedSettings() && !koShowToolbox(), 'svd_wide': koHideAdvancedSettings}\"\n >\n <div class=\"svd_toolbar\">\n <!-- ko if: koShowPropertyGrid() && koHideAdvancedSettings() -->\n <div class=\"svd-property-grid__header\" data-bind=\"click: function() { koHideAdvancedSettings(false); }, attr: { title: getLocString('ed.showObjectProperties') }\">\n <span class=\"svd-property-grid__header-title\" data-bind=\"text: getLocString('ed.opjectPropertiesHeader')\"></span>\n <span class=\"svd-property-grid__header-hide-button svd-header-show-button\"><svg-icon class=\"svd-secondary-icon\" params=\"iconName: 'icon-left'\"></svg-icon></span>\n </div>\n <!-- /ko -->\n <!-- ko foreach: toolbarItems -->\n <span\n tabindex=\"0\"\n class=\"svd_action\"\n data-bind=\"css: $data.css, visible: visible, attr: { id: id }\"\n >\n <!-- ko template: { name: $data.template || 'svd-toolbar-button', data: $data.data || $data } -->\n <!-- /ko -->\n </span>\n <!-- /ko -->\n </div>\n <pages-editor params=\"editor:$data\" data-bind=\"visible: koShowPagesToolbox\">\n </pages-editor>\n <div\n class=\"svd_questions_editor svd-light-bg-color\"\n id=\"scrollableDiv\"\n data-bind=\"style: { height: koDesignerHeight }, event: { dragover: dragOverQuestionsEditor, drop: dropOnQuestionsEditor }\"\n >\n <div id=\"surveyjs\"></div>\n <!-- ko if: isCurrentPageEmpty -->\n <!-- ko template: \"se-empty-placeholder\" -->\n <!-- /ko -->\n <!-- /ko -->\n </div>\n </div>\n <svd-splitter params=\"minLeft: 600, minRight: 150\"></svd-splitter>\n <div\n class=\"col-lg-3 col-md-3 col-sm-3 hidden-xs svd_properties svd-light-border-color svd-dark-bg-color\"\n data-bind=\"visible: !koHideAdvancedSettings()\"\n >\n <div class=\"svd-property-grid__header\">\n <span class=\"svd-property-grid__header-title\" data-bind=\"text: getLocString('ed.opjectPropertiesHeader')\"></span>\n <span class=\"svd-property-grid__header-hide-button svd-header-hide-button\" data-bind=\"click: function() { koHideAdvancedSettings(true); }, attr: { title: $root.getLocString('ed.hideObjectProperties') }\"><svg-icon class=\"svd-secondary-icon\" params=\"iconName: 'icon-right'\"></svg-icon></span>\n </div>\n <div class=\"svd_object_selector svd-light-border-color\">\n <div class=\"svd_custom_select\">\n <select\n onmousewheel=\"return false;\"\n id=\"objectSelector\"\n class=\"form-control\"\n data-bind=\"options: koObjects, optionsText: 'text', value: koSelectedObject\"\n ></select>\n </div>\n <span\n data-bind=\"click: editCurrentObject, attr: { title: $root.getLocString('ed.editSelObject')}\"\n >\n <svg-icon\n class=\"svd-primary-icon icon-edit\"\n params=\"iconName: 'icon-edit', size:24\"\n ></svg-icon>\n </span>\n </div>\n <div\n class=\"svd_object_editor\"\n data-bind=\"style: {height: koDesignerHeight}\"\n >\n <div\n data-bind=\"template: { name: 'objecteditor', data: selectedObjectEditor }\"\n ></div>\n </div>\n </div>\n </div>\n</script>\n<script type=\"text/html\" id=\"se-tab-test\">\n <div data-bind=\"style: {width: koTestSurveyWidth}\">\n <div id=\"surveyjsExample\" data-bind=\"template: { name: 'surveylive', data: surveyLive }\"></div>\n </div>\n</script>\n<script type=\"text/html\" id=\"se-empty-placeholder\">\n <div class=\"svd-survey-placeholder-root\">\n <div class=\"svd-survey-placeholder\">\n <!-- ko if: showExternalHelpLink -->\n <div class=\"svd-survey-gallery\">\n <a data-bind=\"attr: { href: $root.getLocString('survey.externalHelpLinkUrl') }\">\n <img src=\"" + __webpack_require__(145) + "\"/>\n <span data-bind=\"text: $root.getLocString('survey.externalHelpLink')\"></span>\n </a>\n </div>\n <!-- /ko -->\n <div class=\"empty-message\" data-bind=\"text: $root.getLocString('survey.dropQuestion')\"></div>\n </div>\n </div>\n</script>\n<script type=\"text/html\" id=\"se-tab-designer-item\">\n <div\n tabindex=\"0\"\n draggable=\"true\"\n class=\"svd_toolbox_item svd-light-border-color\"\n data-bind=\"attr: {title: tooltip}, css: 'svd_toolbox_item_' + iconName, key2click, clickNoFocus: $root.clickToolboxItem, event:{dragstart: function(el, e) { $root.draggingToolboxItem($data, e); return true;}, dragend: function(el, e) { $root.dragEnd(); }}\"\n >\n <span>\n <svg-icon params=\"iconName: iconName\"></svg-icon>\n </span>\n <span\n class=\"svd_toolbox_item_text hidden-sm hidden-xs\"\n data-bind=\"text:title\"\n ></span>\n </div>\n</script>\n"; /***/ }), /* 133 */ /***/ (function(module, exports) { module.exports = "<script type=\"text/html\" id=\"svd-toolbar-button\">\n <button type=\"button\" class=\"btn btn-primary\" data-bind=\"enable: $data.enabled || true, click: action, css: $data.innerCss\">\n <!-- ko if: $data.icon -->\n <div class=\"svd-toolbar-button__image\">\n <svg-icon class=\"svd-svg-icon icon-white\" params=\"iconName: icon, size: 12\"></svg-icon>\n </div>\n <!-- /ko -->\n <!-- ko if: $data.showTitle === undefined || (!!$data.icon && !ko.unwrap($data.showTitle)) -->\n <div class=\"svd-toolbar-button__title\">\n <span data-bind=\"text: title\"></span>\n </div>\n <!-- /ko -->\n </button>\n</script>\n<script type=\"text/html\" id=\"svd-toolbar-options\">\n <div class=\"ddmenu-container toolbar-options btn-group inline\">\n <div style=\"-webkit-tap-highlight-color:rgba(0,0,0,0)\" data-bind=\"trueclick\"></div>\n\n <div class=\"ddmenu\">\n <span class=\"btn btn-primary\" tabindex=\"0\">\n <span data-bind=\"text: title\"></span>\n <span class=\"caret\"></span>\n </span>\n <div tabindex=\"0\" data-bind=\"trueclick\"></div>\n <ul class=\"svd-light-bg-color\">\n <!-- ko foreach: items -->\n <li data-bind=\"css: $data.css\">\n <a href=\"#\" data-bind=\"click: action, text: title\"></a>\n </li>\n <!-- /ko -->\n </ul>\n </div>\n </div>\n</script>\n<script type=\"text/html\" id=\"svd-toolbar-state\">\n <span class=\"icon\">\n <svg-icon class=\"icon-status\" params=\"iconName: innerCss, size: 24\"></svg-icon>\n </span>\n <span class=\"svd-light-text-color\" data-bind=\"text: title\"></span>\n</script>"; /***/ }), /* 134 */ /***/ (function(module, exports) { module.exports = "<script type=\"text/html\" id=\"translation\">\n <div class=\"form-group svd-translation-tab\">\n <div class=\"form-group svd-language-select\">\n <div class=\"svd_custom_select svd-light-bg-color svd-light-border-color\">\n <select onmousewheel=\"return false;\" data-bind=\"options: koAvailableLanguages, value: koSelectedLanguageToAdd, optionsText:'text', optionsCaption: $data.selectLanguageOptionsCaption\"></select>\n </div>\n <div class=\"svd-translation-tab-show-all-strings-container\">\n <!-- ko template: { name: 'propertyeditor-boolean', data: { koValue: koShowAllStrings, displayName: $data.showAllStringsText, isDiplayNameVisible: true } } -->\n <!-- /ko -->\n </div>\n <div class=\"svd_custom_select svd-light-bg-color svd-light-border-color\">\n <select onmousewheel=\"return false;\" data-bind=\"options: koFilteredPages, value: koFilteredPage, optionsValue: 'value', optionsText:'text'\"></select>\n </div>\n </div>\n <div>\n <!-- ko foreach: {data: $data.koLocales, as: 'item' } -->\n <label data-bind=\"visible: !!item.locale && item.koEnabled()\">\n <!-- ko template: { name: 'propertyeditor-boolean', data: { koValue: item.koVisible, displayName: $parent.getLocaleName($data.locale), isDiplayNameVisible: true } } -->\n <!-- /ko -->\n </label>\n <!-- /ko -->\n </div>\n <div class=\"form-group\">\n <button class=\"btn btn-primary\" type=\"button\" data-bind=\"visible:$data.koCanMergeLocaleWithDefault, text:$data.koMergeLocaleWithDefaultText, click:$data.koMergeLocaleWithDefault\"></button>\n <button class=\"btn btn-primary\" type=\"button\" data-bind=\"text:$data.exportToCSVText, click:$data.koExportToSCVFile\"></button>\n <button class=\"btn btn-primary\" type=\"button\" onclick=\"this.getElementsByTagName('input')[0].click();\">\n <input type=\"file\" style=\"display:none;\" accept=\".csv\" data-bind=\"event: { change: function() { $data.koImportFromSCVFile($element) } }\" />\n <span data-bind=\"text:$data.importFromCSVText\"></span>\n </button>\n </div>\n <div class=\"svd-translation-no-strings svd-light-text-color\" data-bind=\"visible:$data.koIsEmpty\">\n <span data-bind=\"text:$data.noStringsText\"></span>\n </div>\n <!-- ko ifnot: $data.koIsEmpty -->\n <!-- ko template: { name: \"translation-group\", data: $data.koRoot } -->\n <!-- /ko -->\n <!-- /ko -->\n </div>\n</script>\n<script type=\"text/html\" id=\"translation-group\">\n <div class=\"svd-translation-strings svd-light-border-color svd-light-bg-color\">\n <table class=\"svd_items_table\" data-bind=\"visible: $data.locItems.length > 0\">\n <thead>\n <tr>\n <th></th>\n <!-- ko foreach: $data.koLocales -->\n <th data-bind=\"visible: $data.koVisible, text: $parent.getLocaleName($data.locale), style: {width: $parent.locWidth}\"></th>\n <!-- /ko -->\n </tr>\n </thead>\n <tbody data-bind=\"foreach: {data: $data.locItems, as: 'item' }\">\n <tr>\n <td style=\"max-width: 200px; min-width:100px\"><span data-bind=\"text:item.text\"></span></td>\n <!-- ko foreach: $parent.koLocales -->\n <td data-bind=\"visible: $data.koVisible, style: {width: $data.koVisible ? $parent.locWidth : '0px'}\">\n <textarea class=\"form-control\" style=\"width:100%\" data-bind=\"visible: $data.koVisible, value:item.koValue($data.locale), attr: {placeholder: !$data.locale? item.defaultValue : ''}\"></textarea>\n </td>\n <!-- /ko -->\n </tr>\n </tbody>\n </table>\n\n <div class=\"svd-translation-panel-strings\" data-bind=\"foreach: {data: $data.groups, as: 'group' }\">\n <div class=\"svd-toolbox-category-header\" role=\"tab\" data-bind=\"click: function(){ group.koExpanded(!group.koExpanded())}\">\n <span class=\"svd-translation-panel-strings-title\"data-bind=\"css: { 'svd-main-color': group.koExpanded() }, text: group.name\"></span>\n <!-- ko ifnot: koExpanded -->\n <svg-icon class=\"icon-toolbox-arrow\" params=\"iconName: 'icon-arrow_down_10x10', size: 10\"></svg-icon>\n <!-- /ko -->\n <!-- ko if: koExpanded -->\n <svg-icon class=\"icon-toolbox-arrow svd-primary-icon\" params=\"iconName: 'icon-arrow_up_10x10', size: 10\"></svg-icon>\n <!-- /ko -->\n </div>\n <div data-bind=\"visible: koExpanded\">\n <!-- ko template: { name: \"translation-group\", data: group } -->\n <!-- /ko -->\n <div>\n </div>\n </div>\n</script>\n"; /***/ }), /* 135 */ /***/ (function(module, exports) { module.exports = "<div>\n <!-- ko foreach: actions -->\n <!-- ko if: !$data.template -->\n <span class=\"svda_question_action svd-main-color\" data-bind=\"key2click, clickNoFocus: function() { onClick($parent.question); }, attr: {title: text, tabindex: $data.needFocus === undefined || !!$data.needFocus ? 0 : undefined }\">\n <span>\n <svg-icon class=\"svd-primary-icon\" data-bind=\"css: $parent.getStyle($data)\" params=\"iconName: $parent.getStyle($data)\"></svg-icon>\n </span>\n <span data-bind=\"text: $data.hasTitle ? text: ''\"></span>\n </span>\n <!-- /ko -->\n <!-- ko if: !!$data.template -->\n <!-- ko template: template -->\n <!-- /ko -->\n <!-- /ko -->\n <!-- /ko -->\n</div>"; /***/ }), /* 136 */ /***/ (function(module, exports) { module.exports = "<div class=\"svda-content\">\n <span class=\"svda-image-editor\">\n <span\n class=\"edit-image-item\"\n data-bind=\"click: chooseImage, clickBubble: false, attr: { title: getLocString('pe.edit') }\"\n >\n <svg-icon\n class=\"svd-primary-icon\"\n params=\"iconName: 'icon-inplaceedit', size: 12\"\n ></svg-icon>\n </span>\n </span>\n <span\n class=\"svda-drag-handle\"\n data-bind=\"attr: { title: getLocString('pe.move') }\"\n >\n <svg-icon\n class=\"svd-primary-icon\"\n params=\"iconName: 'icon-inplacedraggable', size: 12\"\n ></svg-icon>\n </span>\n <!--ko ifnot: isLastItem -->\n <span\n class=\"svda-delete-item\"\n data-bind=\"click: deleteItem, attr: { title: getLocString('pe.delete') }\"\n >\n <svg-icon\n class=\"svd-primary-icon\"\n params=\"iconName: 'icon-inplacedelete', size: 12\"\n ></svg-icon>\n </span>\n <!-- /ko -->\n</div>\n"; /***/ }), /* 137 */ /***/ (function(module, exports) { module.exports = "<div class=\"svda-content\">\n <span\n class=\"svda-title-editor-content\"\n data-bind=\"visible: isEditing\"\n style=\"display: none;\"\n >\n <input\n data-svd-info=\"adorner\"\n data-bind=\"textInput: editingName, event: { keyup: nameEditorKeypress, blur: postEdit }\"\n style=\"border-top: none; border-left: none; border-right: none; outline: none; background-color: transparent; display: inline-block;\"\n />\n <span\n class=\"svda-edit-button\"\n data-bind=\"click: postEdit, enable: editingName() != ''\"\n >\n <svg-icon\n class=\"svd-primary-icon\"\n params=\"iconName: 'icon-inplacecheck', size: 12\"\n ></svg-icon>\n </span>\n <!-- <span class=\"svda-edit-button\" data-bind=\"click: cancelEdit\">✕</span> -->\n </span>\n <span\n class=\"svda-title-editor-content svda-title-editor-start\"\n data-bind=\"visible: !isEditing()\"\n >\n <span style=\"display: none;\" data-bind=\"text: editingName\"></span>\n <span\n class=\"edit-survey-name\"\n data-bind=\"click: startEdit, attr: { title: getLocString('pe.edit') }\"\n >\n <svg-icon\n class=\"svd-primary-icon\"\n params=\"iconName: 'icon-inplaceedit', size: 12\"\n ></svg-icon>\n </span>\n </span>\n <!-- ko if: isDraggable -->\n <span\n class=\"svda-drag-handle\"\n data-bind=\"attr: { title: getLocString('pe.move') }, visible: !isEditing()\"\n >\n <svg-icon\n class=\"svd-primary-icon\"\n params=\"iconName: 'icon-inplacedraggable', size: 12\"\n ></svg-icon>\n </span>\n <!-- /ko -->\n <!--ko ifnot: isLastItem -->\n <span\n class=\"svda-delete-item\"\n data-bind=\"click: deleteItem, attr: { title: getLocString('pe.delete') }, visible: !isEditing()\"\n >\n <svg-icon\n class=\"svd-primary-icon\"\n params=\"iconName: 'icon-inplacedelete', size: 12\"\n ></svg-icon>\n </span>\n <!-- /ko -->\n</div>\n"; /***/ }), /* 138 */ /***/ (function(module, exports) { module.exports = "<div>\n <!-- ko foreach: actions -->\n <!-- ko if: !$data.template -->\n <span class=\"svda_question_action svd-main-color\" data-bind=\"key2click, clickNoFocus: function() { onClick($parent.question); }, attr: {title: text, tabindex: $data.needFocus === undefined || !!$data.needFocus ? 0 : undefined }\">\n <span>\n <svg-icon class=\"svd-primary-icon\" data-bind=\"css: $parent.getStyle($data)\" params=\"iconName: $parent.getStyle($data)\"></svg-icon>\n </span>\n <span data-bind=\"text: $data.hasTitle ? text: ''\"></span>\n </span>\n <!-- /ko -->\n <!-- ko if: !!$data.template -->\n <!-- ko template: template -->\n <!-- /ko -->\n <!-- /ko -->\n <!-- /ko -->\n</div>"; /***/ }), /* 139 */ /***/ (function(module, exports) { module.exports = "<div class=\"svda-content\">\n <span\n class=\"svda-title-editor-content\"\n data-bind=\"visible: isEditing\"\n style=\"display: none;\"\n >\n <input\n data-svd-info=\"adorner\"\n data-bind=\"textInput: editingName, event: { keyup: nameEditorKeypress, blur: postEdit }\"\n style=\"border-top: none; border-left: none; border-right: none; outline: none; background-color: transparent; display: inline-block; margin: -6px;\"\n />\n <span\n class=\"svda-edit-button\"\n data-bind=\"click: postEdit, enable: editingName() != ''\"\n >\n <svg-icon\n class=\"svd-primary-icon\"\n params=\"iconName: 'icon-inplacecheck', size: 12\"\n ></svg-icon>\n </span>\n <!-- <span class=\"svda-edit-button\" data-bind=\"click: cancelEdit\">✕</span> -->\n </span>\n <span\n class=\"svda-title-editor-content svda-title-editor-start\"\n data-bind=\"visible: !isEditing()\"\n >\n <span style=\"display: none;\" data-bind=\"text: editingName\"></span>\n <span\n class=\"edit-survey-name\"\n data-bind=\"click: startEdit, attr: { title: getLocString('pe.edit') }\"\n >\n <svg-icon\n class=\"svd-primary-icon\"\n params=\"iconName: 'icon-inplaceedit', size: 12\"\n ></svg-icon>\n </span>\n </span>\n <!--ko ifnot: isLastItem -->\n <span\n class=\"svda-delete-item\"\n data-bind=\"click: deleteItem, attr: { title: getLocString('pe.delete') }, visible: !isEditing()\"\n >\n <svg-icon\n class=\"svd-primary-icon\"\n params=\"iconName: 'icon-inplacedelete', size: 12\"\n ></svg-icon>\n </span>\n <!-- /ko -->\n</div>\n"; /***/ }), /* 140 */ /***/ (function(module, exports) { module.exports = "<div class=\"svda-select-items-editor\">\n <div class=\"svda-select-items-title\" data-bind=\"click: toggle\">\n <span\n class=\"svd-main-color\"\n data-bind=\"text: getLocString('pe.editChoices')\"\n ></span>\n </div>\n <div\n class=\"svda-select-items-content svd-dark-border-color svd-light-bg-color\"\n data-bind=\"visible: isExpanded\"\n >\n <div class=\"svda-select-items-collection\">\n <!-- ko foreach: { data: choices, afterRender: choicesRendered } -->\n <div class=\"item_editable item_draggable\">\n <span data-bind=\"text: text\"></span>\n <span>\n <item-editor\n params=\"name: $parent.valueName, valueChanged: $parent.valueChanged, target: $data, model: $data, item: $data, question: $parent.question, editor: $parent.editor\"\n >\n </item-editor>\n </span>\n </div>\n <!-- /ko -->\n </div>\n <!-- ko if: question.hasOther -->\n <div class=\"item_editable\">\n <span data-bind=\"text: otherText\"></span>\n <span>\n <item-editor\n params='name: \"otherText\", target: question, model: question, valueChanged: otherValueChanged, item: question.otherItem, question: question, editor: editor'\n >\n </item-editor>\n </span>\n </div>\n <!-- /ko -->\n <div\n class=\"sv_technical svda-add-new-item\"\n data-bind=\"click: addItem, attr: { title: getLocString('pe.addItem') }\"\n >\n <svg-icon\n class=\"svd-primary-icon\"\n params=\"iconName: 'icon-inplaceplus', size: 12\"\n ></svg-icon>\n </div>\n <div\n class=\"sv_technical svda-add-new-item svda-add-custom-item\"\n data-bind=\"click: addOther, attr: { title: getLocString('pe.addOther') }\"\n >\n <span data-bind=\"text: getLocString('pe.addOther')\"></span>\n </div>\n </div>\n</div>\n"; /***/ }), /* 141 */ /***/ (function(module, exports) { module.exports = "<div class=\"svda-content\">\n <span\n class=\"svda-title-editor-content\"\n data-bind=\"visible: isEditing\"\n style=\"display: none;\"\n >\n <input\n data-svd-info=\"adorner\"\n data-bind=\"textInput: editingName, event: { keyup: nameEditorKeypress, blur: postEdit }\"\n style=\"border-top: none; border-left: none; border-right: none; outline: none; background-color: transparent; display: inline-block;\"\n />\n <span\n class=\"svda-edit-button\"\n data-bind=\"click: postEdit, enable: editingName() != ''\"\n >\n <svg-icon\n class=\"svd-primary-icon\"\n params=\"iconName: 'icon-inplacecheck', size: 12\"\n ></svg-icon>\n </span>\n <!-- <span class=\"svda-edit-button\" data-bind=\"click: cancelEdit\">✕</span> -->\n </span>\n <span\n class=\"svda-title-editor-content svda-title-editor-start\"\n data-bind=\"visible: !isEditing()\"\n >\n <span style=\"display: none;\" data-bind=\"text: editingName\"></span>\n <span\n class=\"edit-survey-name\"\n data-bind=\"click: startEdit, attr: { title: getLocString('pe.edit') }\"\n >\n <svg-icon\n class=\"svd-primary-icon\"\n params=\"iconName: 'icon-inplaceedit', size: 12\"\n ></svg-icon>\n </span>\n </span>\n</div>\n"; /***/ }), /* 142 */ /***/ (function(module, exports, __webpack_require__) { module.exports = "" + __webpack_require__(95) + " " + __webpack_require__(96) + "\n" + __webpack_require__(98) + " " + __webpack_require__(99) + "\n" + __webpack_require__(130) + " " + __webpack_require__(129) + "\n" + __webpack_require__(134) + " " + __webpack_require__(131) + "\n" + __webpack_require__(127) + "\n" + __webpack_require__(126) + "\n" + __webpack_require__(128) + "\n" + __webpack_require__(100) + "\n" + __webpack_require__(125) + "\n" + __webpack_require__(101) + "\n" + __webpack_require__(106) + "\n" + __webpack_require__(109) + "\n" + __webpack_require__(103) + "\n" + __webpack_require__(108) + "\n" + __webpack_require__(110) + "\n" + __webpack_require__(114) + "\n" + __webpack_require__(115) + "\n" + __webpack_require__(111) + "\n" + __webpack_require__(112) + "" + __webpack_require__(113) + "\n" + __webpack_require__(117) + "\n" + __webpack_require__(119) + "\n" + __webpack_require__(105) + "\n" + __webpack_require__(120) + "\n" + __webpack_require__(121) + "\n" + __webpack_require__(102) + "\n" + __webpack_require__(122) + "\n" + __webpack_require__(123) + "\n" + __webpack_require__(124) + "\n" + __webpack_require__(104) + "\n" + __webpack_require__(97) + " " + __webpack_require__(133) + "\n" + __webpack_require__(94) + "\n" + __webpack_require__(116) + "" + __webpack_require__(107) + "\n" + __webpack_require__(118) + "\n" + __webpack_require__(93) + " " + __webpack_require__(132) + "\n"; /***/ }), /* 143 */ /***/ (function(module, exports) { module.exports = "<div>\n <!-- ko foreach: tabs -->\n <div\n class=\"svd-accordion-tab-header\"\n role=\"tab\"\n data-bind=\"click: toggle, visible: $parent.showHeader\"\n >\n <span\n data-bind=\"css: { 'svd-main-color': !collapsed() }, text: title\"\n ></span>\n <!-- ko if: collapsed -->\n <svg-icon\n class=\"icon-toolbox-arrow\"\n params=\"iconName: 'icon-arrow_down_10x10', size: 10\"\n ></svg-icon>\n <!-- /ko -->\n <!-- ko ifnot: collapsed -->\n <svg-icon\n class=\"icon-toolbox-arrow svd-primary-icon\"\n params=\"iconName: 'icon-arrow_up_10x10', size: 10\"\n ></svg-icon>\n <!-- /ko -->\n </div>\n <div\n class=\"svd-accordion-tab-content\"\n role=\"tab\"\n data-bind=\"ifnot: collapsed\"\n >\n <!-- ko template: { name: template, data: data } -->\n <!-- /ko -->\n </div>\n <!-- /ko -->\n</div>\n"; /***/ }), /* 144 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_knockout__ = __webpack_require__(1); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_knockout___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_knockout__); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__textWorker__ = __webpack_require__(23); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return SurveyJSONEditor; }); var SurveyJSONEditor = /** @class */ (function () { function SurveyJSONEditor() { this.isProcessingImmediately = false; this.timeoutId = -1; this._readOnly = __WEBPACK_IMPORTED_MODULE_0_knockout__["observable"](false); this.koText = __WEBPACK_IMPORTED_MODULE_0_knockout__["observable"](""); this.koErrors = __WEBPACK_IMPORTED_MODULE_0_knockout__["observableArray"](); var self = this; this.koText.subscribe(function (newValue) { self.onJsonEditorChanged(); }); } SurveyJSONEditor.prototype.init = function (editorElement) { if (!this.hasAceEditor) return; this.aceEditor = ace.edit(editorElement); this.aceEditor.setReadOnly(this.readOnly); var self = this; //TODO add event to change ace theme and mode //this.aceEditor.setTheme("ace/theme/monokai"); //this.aceEditor.session.setMode("ace/mode/json"); this.aceEditor.setShowPrintMargin(false); this.aceEditor.getSession().on("change", function () { self.onJsonEditorChanged(); }); this.aceEditor.getSession().setUseWorker(true); __WEBPACK_IMPORTED_MODULE_1__textWorker__["a" /* SurveyTextWorker */].newLineChar = this.aceEditor.session.doc.getNewLineCharacter(); }; Object.defineProperty(SurveyJSONEditor.prototype, "hasAceEditor", { get: function () { return typeof ace !== "undefined"; }, enumerable: true, configurable: true }); Object.defineProperty(SurveyJSONEditor.prototype, "text", { get: function () { if (!this.hasAceEditor) return this.koText(); return this.aceEditor.getValue(); }, set: function (value) { this.isProcessingImmediately = true; this.koText(value); if (this.aceEditor) { this.aceEditor.setValue(value); this.aceEditor.renderer.updateFull(true); } this.processJson(value); this.isProcessingImmediately = false; }, enumerable: true, configurable: true }); SurveyJSONEditor.prototype.show = function (value) { this.text = value; if (this.aceEditor) { this.aceEditor.focus(); } }; Object.defineProperty(SurveyJSONEditor.prototype, "isJsonCorrect", { get: function () { this.textWorker = new __WEBPACK_IMPORTED_MODULE_1__textWorker__["a" /* SurveyTextWorker */](this.text); return this.textWorker.isJsonCorrect; }, enumerable: true, configurable: true }); Object.defineProperty(SurveyJSONEditor.prototype, "survey", { get: function () { return this.textWorker.survey; }, enumerable: true, configurable: true }); SurveyJSONEditor.prototype.onJsonEditorChanged = function () { if (this.timeoutId > -1) { clearTimeout(this.timeoutId); } if (this.isProcessingImmediately) { this.timeoutId = -1; } else { var self = this; this.timeoutId = window.setTimeout(function () { self.timeoutId = -1; self.processJson(self.text); }, SurveyJSONEditor.updateTextTimeout); } }; SurveyJSONEditor.prototype.processJson = function (text) { this.textWorker = new __WEBPACK_IMPORTED_MODULE_1__textWorker__["a" /* SurveyTextWorker */](text); if (this.aceEditor) { this.aceEditor .getSession() .setAnnotations(this.createAnnotations(text, this.textWorker.errors)); } else { this.koErrors(this.textWorker.errors); } }; SurveyJSONEditor.prototype.createAnnotations = function (text, errors) { var annotations = new Array(); for (var i = 0; i < errors.length; i++) { var error = errors[i]; var annotation = { row: error.position.start.row, column: error.position.start.column, text: error.text, type: "error" }; annotations.push(annotation); } return annotations; }; Object.defineProperty(SurveyJSONEditor.prototype, "readOnly", { /** * A boolean property, false by default. Set it to true to deny editing. */ get: function () { return this._readOnly(); }, set: function (newVal) { this._readOnly(newVal); }, enumerable: true, configurable: true }); SurveyJSONEditor.updateTextTimeout = 1000; return SurveyJSONEditor; }()); /***/ }), /* 145 */ /***/ (function(module, exports) { module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAE8AAAASCAYAAAAaJIOvAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTQyIDc5LjE2MDkyNCwgMjAxNy8wNy8xMy0wMTowNjozOSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTggKFdpbmRvd3MpIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOkQ3RUUwNDQ4NjRERjExRTlBMTJBODcxOUEzRjhEQ0E1IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkQ3RUUwNDQ5NjRERjExRTlBMTJBODcxOUEzRjhEQ0E1Ij4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6RDdFRTA0NDY2NERGMTFFOUExMkE4NzE5QTNGOERDQTUiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6RDdFRTA0NDc2NERGMTFFOUExMkE4NzE5QTNGOERDQTUiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz4EgFyAAAAHNUlEQVR42rxY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" /***/ }), /* 146 */ /***/ (function(module, exports) { module.exports = "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI3NTEiIGhlaWdodD0iNDMwIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+PGRlZnM+CjxyZWN0IGlkPSJiIiB3aWR0aD0iMzMwIiBoZWlnaHQ9IjY1MSIgeD0iNzE5LjUiIHk9IjI5OC41IiByeD0iMjAiLz48ZmlsdGVyIGlkPSJhIiB3aWR0aD0iMTQ1LjUlIiBoZWlnaHQ9IjEyMyUiIHg9Ii0yMi43JSIgeT0iLTExLjUlIiBmaWx0ZXJVbml0cz0ib2JqZWN0Qm91bmRpbmdCb3giPgo8ZmVPZmZzZXQgaW49IlNvdXJjZUFscGhhIiByZXN1bHQ9InNoYWRvd09mZnNldE91dGVyMSIvPjxmZUdhdXNzaWFuQmx1ciBzdGREZXZpYXRpb249IjI1IiBpbj0ic2hhZG93T2Zmc2V0T3V0ZXIxIiByZXN1bHQ9InNoYWRvd0JsdXJPdXRlcjEiLz4KPGZlQ29sb3JNYXRyaXggdmFsdWVzPSIwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwLjEgMCIgaW49InNoYWRvd0JsdXJPdXRlcjEiLz48L2ZpbHRlcj48L2RlZnM+CjxnIGZpbGw9Im5vbmUiIGZpbGwtcnVsZT0iZXZlbm9kZCIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTUwOSAtNDA5KSI+PGcgdHJhbnNmb3JtPSJyb3RhdGUoLTkwIDg4NC41IDYyNCkiPgo8dXNlIGZpbGw9IiMwMDAiIGZpbHRlcj0idXJsKCNhKSIgeGxpbms6aHJlZj0iI2IiLz48dXNlIGZpbGw9IiNGRkYiIHhsaW5rOmhyZWY9IiNiIi8+PC9nPgo8cmVjdCB3aWR0aD0iNzAiIGhlaWdodD0iOCIgeD0iNTQwIiB5PSI2MjgiIGZpbGw9IiNGNEY0RjQiIGZpbGwtcnVsZT0ibm9uemVybyIgdHJhbnNmb3JtPSJyb3RhdGUoLTkwIDU3NSA2MzIpIiByeD0iNCIvPgo8Y2lyY2xlIGN4PSI1NzUiIGN5PSI1ODUiIHI9IjQiIGZpbGw9IiNGNEY0RjQiIGZpbGwtcnVsZT0ibm9uemVybyIgdHJhbnNmb3JtPSJyb3RhdGUoLTkwIDU3NSA1ODUpIi8+CjxwYXRoIGZpbGw9IiNGNEY0RjQiIGZpbGwtcnVsZT0ibm9uemVybyIgZD0iTTU5MiA3ODRWNDY0aDU2OHYzMjB6Ii8+PHBhdGggZmlsbD0iI0U3RTdFNyIgZmlsbC1ydWxlPSJub256ZXJvIiBkPSJNNTkyIDQ2NHYzMjBoNTY4VjQ2NEg1OTJ6bTU2OS0xdjMyMkg1OTFWNDYzaDU3MHoiLz4KPGNpcmNsZSBjeD0iMTE4NiIgY3k9IjYyNCIgcj0iMTUiIGZpbGw9IiNGNEY0RjQiLz48L2c+PC9zdmc+" /***/ }), /* 147 */ /***/ (function(module, exports) { module.exports = "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0MzAiIGhlaWdodD0iNzUxIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+PGRlZnM+PHJlY3QgaWQ9ImIiIHdpZHRoPSIzMzAiIGhlaWdodD0iNjUxIiB4PSIxMjAiIHk9IjQ1OCIgcng9IjIwIi8+PGZpbHRlciBpZD0iYSIgd2lkdGg9IjE0NS41JSIgaGVpZ2h0PSIxMjMlIiB4PSItMjIuNyUiIHk9Ii0xMS41JSIgZmlsdGVyVW5pdHM9Im9iamVjdEJvdW5kaW5nQm94Ij48ZmVPZmZzZXQgaW49IlNvdXJjZUFscGhhIiByZXN1bHQ9InNoYWRvd09mZnNldE91dGVyMSIvPjxmZUdhdXNzaWFuQmx1ciBzdGREZXZpYXRpb249IjI1IiBpbj0ic2hhZG93T2Zmc2V0T3V0ZXIxIiByZXN1bHQ9InNoYWRvd0JsdXJPdXRlcjEiLz48ZmVDb2xvck1hdHJpeCB2YWx1ZXM9IjAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAuMSAwIiBpbj0ic2hhZG93Qmx1ck91dGVyMSIvPjwvZmlsdGVyPjwvZGVmcz48ZyBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIHRyYW5zZm9ybT0idHJhbnNsYXRlKC03MCAtNDA4KSI+PHVzZSBmaWxsPSIjMDAwIiBmaWx0ZXI9InVybCgjYSkiIHhsaW5rOmhyZWY9IiNiIi8+PHVzZSBmaWxsPSIjRkZGIiB4bGluazpocmVmPSIjYiIvPjxyZWN0IHdpZHRoPSI3MCIgaGVpZ2h0PSI4IiB4PSIyNDIiIHk9IjQ3MCIgZmlsbD0iI0Y0RjRGNCIgZmlsbC1ydWxlPSJub256ZXJvIiByeD0iNCIvPjxjaXJjbGUgY3g9IjMyNCIgY3k9IjQ3NCIgcj0iNCIgZmlsbD0iI0Y0RjRGNCIgZmlsbC1ydWxlPSJub256ZXJvIi8+PHBhdGggZmlsbD0iI0U3RTdFNyIgZmlsbC1ydWxlPSJub256ZXJvIiBkPSJNMTI0IDQ5MGgzMjJ2NTcwSDEyNFY0OTB6bTEgMXY1NjhoMzIwVjQ5MUgxMjV6Ii8+PHBhdGggZmlsbD0iI0Y0RjRGNCIgZmlsbC1ydWxlPSJub256ZXJvIiBkPSJNMTI1IDQ5MWgzMjB2NTY4SDEyNXoiLz48Y2lyY2xlIGN4PSIyODUiIGN5PSIxMDg0IiByPSIxNSIgZmlsbD0iI0Y0RjRGNCIvPjwvZz48L3N2Zz4=" /***/ }), /* 148 */ /***/ (function(module, exports, __webpack_require__) { var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/* fork of the https://github.com/SortableJS/knockout-sortablejs because of es modules build error waiting for approve pullrequests: * https://github.com/SortableJS/knockout-sortablejs/pull/9) * https://github.com/SortableJS/knockout-sortablejs/pull/1/files */ /*global ko*/ (function(factory) { "use strict"; //get ko ref via global or require var koRef; if (typeof ko !== "undefined") { //global ref already defined koRef = ko; } else if ( true ) { //commonjs / node.js koRef = __webpack_require__(1); } //get sortable ref via global or require var sortableRef; if (typeof Sortable !== "undefined") { //global ref already defined sortableRef = Sortable; } else if ( true ) { //commonjs / node.js sortableRef = __webpack_require__(9); } //use references if we found them if (koRef !== undefined && sortableRef !== undefined) { factory(koRef, sortableRef); } else if (true) { //if both references aren't found yet, get via AMD if available //we may have a reference to only 1, or none if (koRef !== undefined && sortableRef === undefined) { !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(9)], __WEBPACK_AMD_DEFINE_RESULT__ = function(amdSortableRef) { factory(koRef, amdSortableRef); }.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); } else if (koRef === undefined && sortableRef !== undefined) { !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(1)], __WEBPACK_AMD_DEFINE_RESULT__ = function(amdKnockout) { factory(amdKnockout, sortableRef); }.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); } else if (koRef === undefined && sortableRef === undefined) { !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(1), __webpack_require__(9)], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory), __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? (__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); } } else { //no more routes to get references //report specific error if (koRef !== undefined && sortableRef === undefined) { throw new Error("knockout-sortable could not get reference to Sortable"); } else if (koRef === undefined && sortableRef !== undefined) { throw new Error("knockout-sortable could not get reference to Knockout"); } else if (koRef === undefined && sortableRef === undefined) { throw new Error( "knockout-sortable could not get reference to Knockout or Sortable" ); } } })(function(ko, Sortable) { "use strict"; var init = function( element, valueAccessor, allBindings, viewModel, bindingContext, sortableOptions ) { var options = buildOptions(valueAccessor, sortableOptions); // It's seems that we cannot update the eventhandlers after we've created // the sortable, so define them in init instead of update [ "onStart", "onEnd", "onRemove", "onAdd", "onUpdate", "onSort", "onFilter", "onMove", "onClone" ].forEach(function(e) { if (options[e] || eventHandlers[e]) options[e] = function( eventType, parentVM, parentBindings, handler, e ) { var itemVM = ko.dataFor(e.item), // All of the bindings on the parent element bindings = ko.utils.peekObservable(parentBindings()), // The binding options for the draggable/sortable binding of the parent element bindingHandlerBinding = bindings.sortable || bindings.draggable, // The collection that we should modify collection = bindingHandlerBinding.collection || bindingHandlerBinding.foreach; if (handler) handler(e, itemVM, parentVM, collection, bindings); if (eventHandlers[eventType]) eventHandlers[eventType]( e, itemVM, parentVM, collection, bindings ); }.bind(undefined, e, viewModel, allBindings, options[e]); }); var sortableElement = Sortable.create(element, options); // Destroy the sortable if knockout disposes the element it's connected to ko.utils.domNodeDisposal.addDisposeCallback(element, function() { sortableElement.destroy(); }); return ko.bindingHandlers.template.init(element, valueAccessor); }, update = function( element, valueAccessor, allBindings, viewModel, bindingContext, sortableOptions ) { // There seems to be some problems with updating the options of a sortable // Tested to change eventhandlers and the group options without any luck return ko.bindingHandlers.template.update( element, valueAccessor, allBindings, viewModel, bindingContext ); }, eventHandlers = (function(handlers) { var moveOperations = [], tryMoveOperation = function( e, itemVM, parentVM, collection, parentBindings ) { // A move operation is the combination of a add and remove event, // this is to make sure that we have both the target and origin collections var currentOperation = { event: e, itemVM: itemVM, parentVM: parentVM, collection: collection, parentBindings: parentBindings }, existingOperation = moveOperations.filter(function(op) { return op.itemVM === currentOperation.itemVM; })[0]; if (!existingOperation) { moveOperations.push(currentOperation); } else { // We're finishing the operation and already have a handle on // the operation item meaning that it's safe to remove it moveOperations.splice(moveOperations.indexOf(existingOperation), 1); var removeOperation = currentOperation.event.type === "remove" ? currentOperation : existingOperation, addOperation = currentOperation.event.type === "add" ? currentOperation : existingOperation; moveItem( itemVM, removeOperation.collection, addOperation.collection, addOperation.event.clone, addOperation.event ); } }, // Moves an item from the "from" collection to the "to" collection, these // can be references to the same collection which means it's a sort. // clone indicates if we should move or copy the item into the new collection moveItem = function(itemVM, from, to, clone, e) { // Unwrapping this allows us to manipulate the actual array var fromArray = from(), // It's not certain that the items actual index is the same // as the index reported by sortable due to filtering etc. originalIndex = fromArray.indexOf(itemVM), newIndex = e.newIndex; // We have to find out the actual desired index of the to array, // as this might be a computed array. We could otherwise potentially // drop an item above the 3rd visible item, but the 2nd visible item // has an actual index of 5. if (e.item.previousElementSibling) { newIndex = to().indexOf(ko.dataFor(e.item.previousElementSibling)); newIndex += newIndex > originalIndex ? 0 : 1; } // Remove sortables "unbound" element e.item.parentNode.removeChild(e.item); // This splice is necessary for both clone and move/sort // In sort/move since it shouldn't be at this index/in this array anymore // In clone since we have to work around knockouts valuHasMutated // when manipulating arrays and avoid a "unbound" item added by sortable fromArray.splice(originalIndex, 1); // Update the array, this will also remove sortables "unbound" clone from.valueHasMutated(); if (clone && from !== to) { // Read the item fromArray.splice(originalIndex, 0, itemVM); // Force knockout to update from.valueHasMutated(); } // Force deferred tasks to run now, registering the removal !!ko.tasks && ko.tasks.runEarly(); // Insert the item on its new position to().splice(newIndex, 0, itemVM); // Make sure to tell knockout that we've modified the actual array. to.valueHasMutated(); }; handlers.onRemove = tryMoveOperation; handlers.onAdd = tryMoveOperation; handlers.onUpdate = function( e, itemVM, parentVM, collection, parentBindings ) { // This will be performed as a sort since the to/from collections // reference the same collection and clone is set to false moveItem(itemVM, collection, collection, false, e); }; return handlers; })({}), // bindingOptions are the options set in the "data-bind" attribute in the ui. // options are custom options, for instance draggable/sortable specific options buildOptions = function(bindingOptions, options) { // deep clone/copy of properties from the "from" argument onto // the "into" argument and returns the modified "into" var merge = function(into, from) { for (var prop in from) { if ( Object.prototype.toString.call(from[prop]) === "[object Object]" ) { if ( Object.prototype.toString.call(into[prop]) !== "[object Object]" ) { into[prop] = {}; } into[prop] = merge(into[prop], from[prop]); } else into[prop] = from[prop]; } return into; }, // unwrap the supplied options unwrappedOptions = ko.utils.peekObservable(bindingOptions()).options || {}; // Make sure that we don't modify the provided settings object options = merge({}, options); // group is handled differently since we should both allow to change // a draggable to a sortable (and vice versa), but still be able to set // a name on a draggable without it becoming a drop target. if ( unwrappedOptions.group && Object.prototype.toString.call(unwrappedOptions.group) !== "[object Object]" ) { // group property is a name string declaration, convert to object. unwrappedOptions.group = { name: unwrappedOptions.group }; } return merge(options, unwrappedOptions); }; ko.bindingHandlers.draggable = { sortableOptions: { group: { pull: "clone", put: false }, sort: false }, init: function( element, valueAccessor, allBindings, viewModel, bindingContext ) { return init( element, valueAccessor, allBindings, viewModel, bindingContext, ko.bindingHandlers.draggable.sortableOptions ); }, update: function( element, valueAccessor, allBindings, viewModel, bindingContext ) { return update( element, valueAccessor, allBindings, viewModel, bindingContext, ko.bindingHandlers.draggable.sortableOptions ); } }; ko.bindingHandlers.sortable = { sortableOptions: { group: { pull: true, put: true } }, init: function( element, valueAccessor, allBindings, viewModel, bindingContext ) { return init( element, valueAccessor, allBindings, viewModel, bindingContext, ko.bindingHandlers.sortable.sortableOptions ); }, update: function( element, valueAccessor, allBindings, viewModel, bindingContext ) { return update( element, valueAccessor, allBindings, viewModel, bindingContext, ko.bindingHandlers.sortable.sortableOptions ); } }; }); /***/ }) /******/ ]); }); //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay91bml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uIiwid2VicGFjazovLy93ZWJwYWNrL2Jvb3RzdHJhcCA2NmIyNjE1N2Y5ZTViNTE3NGFkZiIsIndlYnBhY2s6Ly8vLi9zcmMvZWRpdG9yTG9jYWxpemF0aW9uLnRzIiwid2VicGFjazovLy9leHRlcm5hbCB7XCJyb290XCI6XCJrb1wiLFwiY29tbW9uanMyXCI6XCJrbm9ja291dFwiLFwiY29tbW9uanNcIjpcImtub2Nrb3V0XCIsXCJhbWRcIjpcImtub2Nrb3V0XCJ9Iiwid2VicGFjazovLy9leHRlcm5hbCB7XCJyb290XCI6XCJTdXJ2ZXlcIixcImNvbW1vbmpzMlwiOlwic3VydmV5LWtub2Nrb3V0XCIsXCJjb21tb25qc1wiOlwic3VydmV5LWtub2Nrb3V0XCIsXCJhbWRcIjpcInN1cnZleS1rbm9ja291dFwifSIsIndlYnBhY2s6Ly8vLi9zcmMvZW50cmllcy9oZWxwZXJzLnRzIiwid2VicGFjazovLy8uL3NyYy9wcm9wZXJ0eUVkaXRvcnMvcHJvcGVydHlFZGl0b3JGYWN0b3J5LnRzIiwid2VicGFjazovLy8uL3NyYy9zdXJ2ZXlIZWxwZXIudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3N1cnZleWpzT2JqZWN0cy50cyIsIndlYnBhY2s6Ly8vLi9zcmMvcHJvcGVydHlFZGl0b3JzL3Byb3BlcnR5TW9kYWxFZGl0b3IudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3V0aWxzL3V0aWxzLnRzIiwid2VicGFjazovLy8uL34vc29ydGFibGVqcy9Tb3J0YWJsZS5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvcHJvcGVydHlFZGl0b3JzL2VkaXRhYmxlT2JqZWN0LnRzIiwid2VicGFjazovLy8uL3NyYy9hZG9ybmVycy9pdGVtLWVkaXRvci50cyIsIndlYnBhY2s6Ly8vLi9zcmMvb2JqZWN0UHJvcGVydHkudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Byb3BlcnR5RWRpdG9ycy9wcm9wZXJ0eUVkaXRvckJhc2UudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Byb3BlcnR5RWRpdG9ycy9wcm9wZXJ0eUl0ZW1zRWRpdG9yLnRzIiwid2VicGFjazovLy8uL3NyYy9wcm9wZXJ0eUVkaXRvcnMvcHJvcGVydHlOZXN0ZWRQcm9wZXJ0eUVkaXRvci50cyIsIndlYnBhY2s6Ly8vLi9zcmMvcHJvcGVydHlFZGl0b3JzL3Byb3BlcnR5T25lU2VsZWN0ZWRFZGl0b3IudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3F1ZXN0aW9uRWRpdG9ycy9xdWVzdGlvbkVkaXRvci50cyIsIndlYnBhY2s6Ly8vLi9zcmMvcXVlc3Rpb25FZGl0b3JzL3F1ZXN0aW9uRWRpdG9yRGVmaW5pdGlvbi50cyIsIndlYnBhY2s6Ly8vLi9zcmMvYWRvcm5lcnMvdGl0bGUtZWRpdG9yLnRzIiwid2VicGFjazovLy8uL3NyYy9lbnRyaWVzL2luZGV4LnRzIiwid2VicGFjazovLy8uL3NyYy9wcm9wZXJ0eUVkaXRvcnMvcHJvcGVydHlDb25kaXRpb25FZGl0b3IudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3N0eWxlc21hbmFnZXIudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3RleHRXb3JrZXIudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2VkaXRvci50cyIsIndlYnBhY2s6Ly8vLi9zcmMvanNvbjUudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2Fkb3JuZXJzL3F1ZXN0aW9uLWFjdGlvbnMudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2RyYWdkcm9waGVscGVyLnRzIiwid2VicGFjazovLy8uL3NyYy9sb2NhbGl6YXRpb24vZW5nbGlzaC50cyIsIndlYnBhY2s6Ly8vLi9zcmMvbG9naWMudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL29iamVjdEVkaXRvci50cyIsIndlYnBhY2s6Ly8vLi9zcmMvcHJvcGVydHlFZGl0b3JzL3Byb3BlcnR5Q3VzdG9tRWRpdG9yLnRzIiwid2VicGFjazovLy8uL3NyYy9wcm9wZXJ0eUVkaXRvcnMvcHJvcGVydHlEZWZhdWx0VmFsdWVFZGl0b3IudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Byb3BlcnR5RWRpdG9ycy9wcm9wZXJ0eVRyaWdnZXJzRWRpdG9yLnRzIiwid2VicGFjazovLy8uL3NyYy9wcm9wZXJ0eUVkaXRvcnMvc3VydmV5RWxlbWVudFNlbGVjdG9yLnRzIiwid2VicGFjazovLy8uL3NyYy9xdWVzdGlvbkVkaXRvcnMvcXVlc3Rpb25FZGl0b3JQcm9wZXJ0aWVzLnRzIiwid2VicGFjazovLy8uL3NyYy9xdWVzdGlvblRvb2xib3gudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3F1ZXN0aW9uY29udmVydGVyLnRzIiwid2VicGFjazovLy8uL3NyYy9zdXJ2ZXlFbWJlZGluZ1dpbmRvdy50cyIsIndlYnBhY2s6Ly8vLi9zcmMvc3VydmV5T2JqZWN0cy50cyIsIndlYnBhY2s6Ly8vLi9zcmMvc3VydmV5bGl2ZS50cyIsIndlYnBhY2s6Ly8vLi9zcmMvdHJhbnNsYXRpb24udHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3VuZG9yZWRvLnRzIiwid2VicGFjazovLy8uL34vcm1vZGFsL2luZGV4LmVzLmpzIiwid2VicGFjazovLy8uL3NyYy9leHByZXNzaW9uVG9EaXNwbGF5VGV4dC50cyIsIndlYnBhY2s6Ly8vLi9zcmMvbWFpbi5zY3NzIiwid2VicGFjazovLy8uL3NyYy91dGlscy9jdXN0b20tY2hlY2tib3guc2NzcyIsIndlYnBhY2s6Ly8vLi9zcmMvdXRpbHMvY3VzdG9tLXNlbGVjdC5zY3NzIiwid2VicGFjazovLy8uL3NyYy91dGlscy9kZG1lbnUuc2NzcyIsIndlYnBhY2s6Ly8vLi9zcmMvYWRvcm5lcnMvZmxvd3BhbmVsLWFjdGlvbnMudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2Fkb3JuZXJzL2ltYWdlLWl0ZW1zLnRzIiwid2VicGFjazovLy8uL3NyYy9hZG9ybmVycy9sYWJlbC1lZGl0b3IudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2Fkb3JuZXJzL3JhdGluZy1pdGVtLWVkaXRvci50cyIsIndlYnBhY2s6Ly8vLi9zcmMvYWRvcm5lcnMvc2VsZWN0LWl0ZW1zLWVkaXRvci50cyIsIndlYnBhY2s6Ly8vLi9zcmMvZXh0ZW50aW9ucy50cyIsIndlYnBhY2s6Ly8vLi9zcmMvbG9jYWxpemF0aW9uL2RhbmlzaC50cyIsIndlYnBhY2s6Ly8vLi9zcmMvbG9jYWxpemF0aW9uL2ZyZW5jaC50cyIsIndlYnBhY2s6Ly8vLi9zcmMvbG9jYWxpemF0aW9uL2dlcm1hbi50cyIsIndlYnBhY2s6Ly8vLi9zcmMvbG9jYWxpemF0aW9uL2h1bmdhcmlhbi50cyIsIndlYnBhY2s6Ly8vLi9zcmMvbG9jYWxpemF0aW9uL2luZG9uZXNpYW4udHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2xvY2FsaXphdGlvbi9pdGFsaWFuLnRzIiwid2VicGFjazovLy8uL3NyYy9sb2NhbGl6YXRpb24va29yZWFuLnRzIiwid2VicGFjazovLy8uL3NyYy9sb2NhbGl6YXRpb24vbm9yd2VnaWFuLnRzIiwid2VicGFjazovLy8uL3NyYy9sb2NhbGl6YXRpb24vcGVyc2lhbi50cyIsIndlYnBhY2s6Ly8vLi9zcmMvbG9jYWxpemF0aW9uL3BvbGlzaC50cyIsIndlYnBhY2s6Ly8vLi9zcmMvbG9jYWxpemF0aW9uL3BvcnR1Z3Vlc2UudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2xvY2FsaXphdGlvbi9zaW1wbGlmaWVkLWNoaW5lc2UudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2xvY2FsaXphdGlvbi9zcGFuaXNoLnRzIiwid2VicGFjazovLy8uL3NyYy9sb2NhbGl6YXRpb24vdHJhZGl0aW9uYWwtY2hpbmVzZS50cyIsIndlYnBhY2s6Ly8vLi9zcmMvbWFuYWdlLnRzIiwid2VicGFjazovLy8uL3NyYy9wYWdlc0VkaXRvci50cyIsIndlYnBhY2s6Ly8vLi9zcmMvcHJvcGVydHlFZGl0b3JzL3Byb3BlcnR5Q2FsY3VsYXRlZFZhbHVlcy50cyIsIndlYnBhY2s6Ly8vLi9zcmMvcHJvcGVydHlFZGl0b3JzL3Byb3BlcnR5Q2VsbHNFZGl0b3IudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Byb3BlcnR5RWRpdG9ycy9wcm9wZXJ0eUh0bWxDb25kaXRpb25FZGl0b3IudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Byb3BlcnR5RWRpdG9ycy9wcm9wZXJ0eUl0ZW1WYWx1ZXNFZGl0b3IudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Byb3BlcnR5RWRpdG9ycy9wcm9wZXJ0eU1hdHJpeERyb3Bkb3duQ29sdW1uc0VkaXRvci50cyIsIndlYnBhY2s6Ly8vLi9zcmMvcHJvcGVydHlFZGl0b3JzL3Byb3BlcnR5TXVsdGlwbGVWYWx1ZXNFZGl0b3IudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Byb3BlcnR5RWRpdG9ycy9wcm9wZXJ0eVJlc3RmdWxsRWRpdG9yLnRzIiwid2VicGFjazovLy8uL3NyYy9wcm9wZXJ0eUVkaXRvcnMvcHJvcGVydHlUZXh0SXRlbXNFZGl0b3IudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Byb3BlcnR5RWRpdG9ycy9wcm9wZXJ0eVZhbGlkYXRvcnNFZGl0b3IudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3V0aWxzL2FjY29yZGlvbi50cyIsIndlYnBhY2s6Ly8vLi9zcmMvdXRpbHMvc3BsaXR0ZXIudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2Fkb3JuZXJzL2Zsb3dwYW5lbC1hY3Rpb25zLnNjc3MiLCJ3ZWJwYWNrOi8vLy4vc3JjL2Fkb3JuZXJzL2ltYWdlLWl0ZW1zLnNjc3MiLCJ3ZWJwYWNrOi8vLy4vc3JjL2Fkb3JuZXJzL2l0ZW0tZWRpdG9yLnNjc3MiLCJ3ZWJwYWNrOi8vLy4vc3JjL2Fkb3JuZXJzL2xhYmVsLWVkaXRvci5zY3NzIiwid2VicGFjazovLy8uL3NyYy9hZG9ybmVycy9xdWVzdGlvbi1hY3Rpb25zLnNjc3MiLCJ3ZWJwYWNrOi8vLy4vc3JjL2Fkb3JuZXJzL3JhdGluZy1pdGVtLWVkaXRvci5zY3NzIiwid2VicGFjazovLy8uL3NyYy9hZG9ybmVycy9zZWxlY3QtaXRlbXMtZWRpdG9yLnNjc3MiLCJ3ZWJwYWNrOi8vLy4vc3JjL2Fkb3JuZXJzL3RpdGxlLWVkaXRvci5zY3NzIiwid2VicGFjazovLy8uL3NyYy9zaW11bGF0b3Iuc2NzcyIsIndlYnBhY2s6Ly8vLi9zcmMvdXRpbHMvYWNjb3JkaW9uLnNjc3MiLCJ3ZWJwYWNrOi8vLy4vc3JjL3V0aWxzL3NwbGl0dGVyLnNjc3MiLCJ3ZWJwYWNrOi8vLy4vc3JjL3N2Z2J1bmRsZS5odG1sIiwid2VicGFjazovLy8uL3NyYy90ZW1wbGF0ZXMvY29udmVydC1hY3Rpb24uaHRtbCIsIndlYnBhY2s6Ly8vLi9zcmMvdGVtcGxhdGVzL2luZGV4Lmh0bWwiLCJ3ZWJwYWNrOi8vLy4vc3JjL3RlbXBsYXRlcy9qc29uZWRpdG9yLmh0bWwiLCJ3ZWJwYWNrOi8vLy4vc3JjL3RlbXBsYXRlcy9tYW5hZ2UuaHRtbCIsIndlYnBhY2s6Ly8vLi9zcmMvdGVtcGxhdGVzL29iamVjdGVkaXRvci5odG1sIiwid2VicGFjazovLy8uL3NyYy90ZW1wbGF0ZXMvcGFnZWVkaXRvci5odG1sIiwid2VicGFjazovLy8uL3NyYy90ZW1wbGF0ZXMvcHJvcGVydHlFZGl0b3JzL2VsZW1lbnRzZWxlY3Rvci5odG1sIiwid2VicGFjazovLy8uL3NyYy90ZW1wbGF0ZXMvcHJvcGVydHlFZGl0b3JzL3Byb3BlcnR5ZWRpdG9yLWJvb2xlYW4uaHRtbCIsIndlYnBhY2s6Ly8vLi9zcmMvdGVtcGxhdGVzL3Byb3BlcnR5RWRpdG9ycy9wcm9wZXJ0eWVkaXRvci1jZWxscy5odG1sIiwid2VicGFjazovLy8uL3NyYy90ZW1wbGF0ZXMvcHJvcGVydHlFZGl0b3JzL3Byb3BlcnR5ZWRpdG9yLWNvbmRpdGlvbi5odG1sIiwid2VicGFjazovLy8uL3NyYy90ZW1wbGF0ZXMvcHJvcGVydHlFZGl0b3JzL3Byb3BlcnR5ZWRpdG9yLWN1c3RvbS5odG1sIiwid2VicGFjazovLy8uL3NyYy90ZW1wbGF0ZXMvcHJvcGVydHlFZGl0b3JzL3Byb3BlcnR5ZWRpdG9yLWRlZmF1bHR2YWx1ZS5odG1sIiwid2VicGFjazovLy8uL3NyYy90ZW1wbGF0ZXMvcHJvcGVydHlFZGl0b3JzL3Byb3BlcnR5ZWRpdG9yLWRyb3Bkb3duLmh0bWwiLCJ3ZWJwYWNrOi8vLy4vc3JjL3RlbXBsYXRlcy9wcm9wZXJ0eUVkaXRvcnMvcHJvcGVydHllZGl0b3ItZXJyb3IuaHRtbCIsIndlYnBhY2s6Ly8vLi9zcmMvdGVtcGxhdGVzL3Byb3BlcnR5RWRpdG9ycy9wcm9wZXJ0eWVkaXRvci1leHByZXNzaW9uLmh0bWwiLCJ3ZWJwYWNrOi8vLy4vc3JjL3RlbXBsYXRlcy9wcm9wZXJ0eUVkaXRvcnMvcHJvcGVydHllZGl0b3ItaHRtbC5odG1sIiwid2VicGFjazovLy8uL3NyYy90ZW1wbGF0ZXMvcHJvcGVydHlFZGl0b3JzL3Byb3BlcnR5ZWRpdG9yLWl0ZW12YWx1ZXMuaHRtbCIsIndlYnBhY2s6Ly8vLi9zcmMvdGVtcGxhdGVzL3Byb3BlcnR5RWRpdG9ycy9wcm9wZXJ0eWVkaXRvci1tYXRyaXhkcm9wZG93bmNvbHVtbnMuaHRtbCIsIndlYnBhY2s6Ly8vLi9zcmMvdGVtcGxhdGVzL3Byb3BlcnR5RWRpdG9ycy9wcm9wZXJ0eWVkaXRvci1tb2RhbC5odG1sIiwid2VicGFjazovLy8uL3NyYy90ZW1wbGF0ZXMvcHJvcGVydHlFZGl0b3JzL3Byb3BlcnR5ZWRpdG9yLW1vZGFsY29udGVudC5odG1sIiwid2VicGFjazovLy8uL3NyYy90ZW1wbGF0ZXMvcHJvcGVydHlFZGl0b3JzL3Byb3BlcnR5ZWRpdG9yLW11bHRpcGxldmFsdWVzLmh0bWwiLCJ3ZWJwYWNrOi8vLy4vc3JjL3RlbXBsYXRlcy9wcm9wZXJ0eUVkaXRvcnMvcHJvcGVydHllZGl0b3ItbmVzdGVkLmh0bWwiLCJ3ZWJwYWNrOi8vLy4vc3JjL3RlbXBsYXRlcy9wcm9wZXJ0eUVkaXRvcnMvcHJvcGVydHllZGl0b3ItbmVzdGVkaXRlbXMuaHRtbCIsIndlYnBhY2s6Ly8vLi9zcmMvdGVtcGxhdGVzL3Byb3BlcnR5RWRpdG9ycy9wcm9wZXJ0eWVkaXRvci1udW1iZXIuaHRtbCIsIndlYnBhY2s6Ly8vLi9zcmMvdGVtcGxhdGVzL3Byb3BlcnR5RWRpdG9ycy9wcm9wZXJ0eWVkaXRvci1vbmVzZWxlY3RlZC5odG1sIiwid2VicGFjazovLy8uL3NyYy90ZW1wbGF0ZXMvcHJvcGVydHlFZGl0b3JzL3Byb3BlcnR5ZWRpdG9yLXJlc3RmdWxsLmh0bWwiLCJ3ZWJwYWNrOi8vLy4vc3JjL3RlbXBsYXRlcy9wcm9wZXJ0eUVkaXRvcnMvcHJvcGVydHllZGl0b3Itc3RyaW5nLmh0bWwiLCJ3ZWJwYWNrOi8vLy4vc3JjL3RlbXBsYXRlcy9wcm9wZXJ0eUVkaXRvcnMvcHJvcGVydHllZGl0b3ItdGV4dC5odG1sIiwid2VicGFjazovLy8uL3NyYy90ZW1wbGF0ZXMvcHJvcGVydHlFZGl0b3JzL3Byb3BlcnR5ZWRpdG9yLXRleHRpdGVtcy5odG1sIiwid2VicGFjazovLy8uL3NyYy90ZW1wbGF0ZXMvcHJvcGVydHlFZGl0b3JzL3Byb3BlcnR5ZWRpdG9yLXRyaWdnZXJzLmh0bWwiLCJ3ZWJwYWNrOi8vLy4vc3JjL3RlbXBsYXRlcy9wcm9wZXJ0eUVkaXRvcnMvcHJvcGVydHllZGl0b3ItdHJpZ2dlcnNpdGVtcy5odG1sIiwid2VicGFjazovLy8uL3NyYy90ZW1wbGF0ZXMvcHJvcGVydHlFZGl0b3JzL3Byb3BlcnR5ZWRpdG9yLmh0bWwiLCJ3ZWJwYWNrOi8vLy4vc3JjL3RlbXBsYXRlcy9xdWVzdGlvbkVkaXRvcnMvcXVlc3Rpb25lZGl0b3ItY29udGVudC5odG1sIiwid2VicGFjazovLy8uL3NyYy90ZW1wbGF0ZXMvcXVlc3Rpb25FZGl0b3JzL3F1ZXN0aW9uZWRpdG9yLmh0bWwiLCJ3ZWJwYWNrOi8vLy4vc3JjL3RlbXBsYXRlcy9xdWVzdGlvbkVkaXRvcnMvcXVlc3Rpb25lZGl0b3J0YWIuaHRtbCIsIndlYnBhY2s6Ly8vLi9zcmMvdGVtcGxhdGVzL3N1cnZleWVtYmVkaW5nLmh0bWwiLCJ3ZWJwYWNrOi8vLy4vc3JjL3RlbXBsYXRlcy9zdXJ2ZXlsaXZlLmh0bWwiLCJ3ZWJwYWNrOi8vLy4vc3JjL3RlbXBsYXRlcy9zdXJ2ZXlsb2dpYy5odG1sIiwid2VicGFjazovLy8uL3NyYy90ZW1wbGF0ZXMvdGFicy5odG1sIiwid2VicGFjazovLy8uL3NyYy90ZW1wbGF0ZXMvdG9vbGJhci5odG1sIiwid2VicGFjazovLy8uL3NyYy90ZW1wbGF0ZXMvdHJhbnNsYXRpb24uaHRtbCIsIndlYnBhY2s6Ly8vLi9zcmMvYWRvcm5lcnMvZmxvd3BhbmVsLWFjdGlvbnMuaHRtbCIsIndlYnBhY2s6Ly8vLi9zcmMvYWRvcm5lcnMvaW1hZ2UtaXRlbXMuaHRtbCIsIndlYnBhY2s6Ly8vLi9zcmMvYWRvcm5lcnMvaXRlbS1lZGl0b3IuaHRtbCIsIndlYnBhY2s6Ly8vLi9zcmMvYWRvcm5lcnMvcXVlc3Rpb24tYWN0aW9ucy5odG1sIiwid2VicGFjazovLy8uL3NyYy9hZG9ybmVycy9yYXRpbmctaXRlbS1lZGl0b3IuaHRtbCIsIndlYnBhY2s6Ly8vLi9zcmMvYWRvcm5lcnMvc2VsZWN0LWl0ZW1zLWVkaXRvci5odG1sIiwid2VicGFjazovLy8uL3NyYy9hZG9ybmVycy90aXRsZS1lZGl0b3IuaHRtbCIsIndlYnBhY2s6Ly8vLi9zcmMvdGVtcGxhdGVzL2VudHJ5Lmh0bWwiLCJ3ZWJwYWNrOi8vLy4vc3JjL3V0aWxzL2FjY29yZGlvbi5odG1sIiwid2VicGFjazovLy8uL3NyYy9zdXJ2ZXlKU09ORWRpdG9yLnRzIiwid2VicGFjazovLy8uL3NyYy9pbWFnZXMvWW91VHViZS5wbmciLCJ3ZWJwYWNrOi8vLy4vc3JjL2ltYWdlcy9zaW11bGF0b3IvZGV2aWNlLWwuc3ZnIiwid2VicGFjazovLy8uL3NyYy9pbWFnZXMvc2ltdWxhdG9yL2RldmljZS1wLnN2ZyIsIndlYnBhY2s6Ly8vLi92ZW5kb3Iva25vY2tvdXQtc29ydGFibGUuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNELE87QUNWQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNB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QUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7O0FBR0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ04sS0FBSztBQUNMO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7O0FBRUE7QUFDQTs7QUFFQSxzQkFBc0I7QUFDdEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOzs7QUFHSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSx1QkFBdUI7O0FBRXZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQjtBQUNyQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBOztBQUVBLG1DQUFtQzs7QUFFbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHVCQUF1Qjs7QUFFdkI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsR0FBRzs7QUFFSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtB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QTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1gsT0FBTzs7QUFFUDs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0EsYUFBYTs7QUFFYjtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLLElBQUk7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjs7QUFFQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7O0FBRUE7QUFDQSx3QkFBd0I7O0FBRXhCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtDQUFrQztBQUNsQzs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxjQUFjLDRCQUE0QjtBQUMxQztBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsY0FBYztBQUNkLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiLi9wYWNrYWdlL3N1cnZleWVkaXRvci5qcyIsInNvdXJjZXNDb250ZW50IjpbIihmdW5jdGlvbiB3ZWJwYWNrVW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbihyb290LCBmYWN0b3J5KSB7XG5cdGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlID09PSAnb2JqZWN0Jylcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkocmVxdWlyZShcImtub2Nrb3V0XCIpLCByZXF1aXJlKFwic3VydmV5LWtub2Nrb3V0XCIpKTtcblx0ZWxzZSBpZih0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpXG5cdFx0ZGVmaW5lKFwiU3VydmV5Q3JlYXRvclwiLCBbXCJrbm9ja291dFwiLCBcInN1cnZleS1rbm9ja291dFwiXSwgZmFjdG9yeSk7XG5cdGVsc2UgaWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnKVxuXHRcdGV4cG9ydHNbXCJTdXJ2ZXlDcmVhdG9yXCJdID0gZmFjdG9yeShyZXF1aXJlKFwia25vY2tvdXRcIiksIHJlcXVpcmUoXCJzdXJ2ZXkta25vY2tvdXRcIikpO1xuXHRlbHNlXG5cdFx0cm9vdFtcIlN1cnZleUNyZWF0b3JcIl0gPSBmYWN0b3J5KHJvb3RbXCJrb1wiXSwgcm9vdFtcIlN1cnZleVwiXSk7XG59KSh0aGlzLCBmdW5jdGlvbihfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFXzFfXywgX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV8yX18pIHtcbnJldHVybiBcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gd2VicGFjay91bml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uIiwiIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcblxuIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbiBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblxuIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbiBcdFx0aWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pXG4gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG5cbiBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbiBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuIFx0XHRcdGk6IG1vZHVsZUlkLFxuIFx0XHRcdGw6IGZhbHNlLFxuIFx0XHRcdGV4cG9ydHM6IHt9XG4gXHRcdH07XG5cbiBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4gXHRcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG4gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbiBcdFx0bW9kdWxlLmwgPSB0cnVlO1xuXG4gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbiBcdH1cblxuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbiBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG5cbiBcdC8vIGlkZW50aXR5IGZ1bmN0aW9uIGZvciBjYWxsaW5nIGhhcm1vbnkgaW1wb3J0cyB3aXRoIHRoZSBjb3JyZWN0IGNvbnRleHRcbiBcdF9fd2VicGFja19yZXF1aXJlX18uaSA9IGZ1bmN0aW9uKHZhbHVlKSB7IHJldHVybiB2YWx1ZTsgfTtcblxuIFx0Ly8gZGVmaW5lIGdldHRlciBmdW5jdGlvbiBmb3IgaGFybW9ueSBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBuYW1lLCBnZXR0ZXIpIHtcbiBcdFx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBuYW1lLCB7XG4gXHRcdFx0XHRjb25maWd1cmFibGU6IGZhbHNlLFxuIFx0XHRcdFx0ZW51bWVyYWJsZTogdHJ1ZSxcbiBcdFx0XHRcdGdldDogZ2V0dGVyXG4gXHRcdFx0fSk7XG4gXHRcdH1cbiBcdH07XG5cbiBcdC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSBmdW5jdGlvbihtb2R1bGUpIHtcbiBcdFx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOyB9IDpcbiBcdFx0XHRmdW5jdGlvbiBnZXRNb2R1bGVFeHBvcnRzKCkgeyByZXR1cm4gbW9kdWxlOyB9O1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7XG4gXHRcdHJldHVybiBnZXR0ZXI7XG4gXHR9O1xuXG4gXHQvLyBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGxcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHkpIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KTsgfTtcblxuIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbiBcdF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiXCI7XG5cbiBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gMjApO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIHdlYnBhY2svYm9vdHN0cmFwIDY2YjI2MTU3ZjllNWI1MTc0YWRmIiwiaW1wb3J0IHsgZW5TdHJpbmdzIH0gZnJvbSBcIi4vbG9jYWxpemF0aW9uL2VuZ2xpc2hcIjtcbmltcG9ydCAqIGFzIFN1cnZleSBmcm9tIFwic3VydmV5LWtub2Nrb3V0XCI7XG5cbmV4cG9ydCB2YXIgZWRpdG9yTG9jYWxpemF0aW9uID0ge1xuICBjYW1lbENhc2VCcmVha2luZzogdHJ1ZSxcbiAgY3VycmVudExvY2FsZTogXCJcIixcbiAgbG9jYWxlczoge30sXG4gIGdldFN0cmluZzogZnVuY3Rpb24oc3RyTmFtZTogc3RyaW5nLCBsb2NhbGU6IHN0cmluZyA9IG51bGwpIHtcbiAgICB2YXIgbG9jID0gdGhpcy5nZXRMb2NhbGUobG9jYWxlKTtcbiAgICB2YXIgZGVmYXVsdExvY2FsZSA9IHRoaXMuZ2V0TG9jYWxlKFwiZW5cIik7XG4gICAgdmFyIHBhdGggPSBzdHJOYW1lLnNwbGl0KFwiLlwiKTtcbiAgICB2YXIgb2JqID0gbG9jO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGF0aC5sZW5ndGg7IGkrKykge1xuICAgICAgb2JqID0gb2JqW3BhdGhbaV1dO1xuICAgICAgaWYgKCFvYmogJiYgb2JqICE9PSBcIlwiKSB7XG4gICAgICAgIGlmIChsb2MgPT09IGRlZmF1bHRMb2NhbGUpIHJldHVybiBwYXRoW2ldO1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRTdHJpbmcoc3RyTmFtZSwgXCJlblwiKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG9iajtcbiAgfSxcbiAgaGFzU3RyaW5nOiBmdW5jdGlvbihzdHJOYW1lOiBzdHJpbmcsIGxvY2FsZTogc3RyaW5nID0gbnVsbCkge1xuICAgIHZhciBsb2MgPSB0aGlzLmdldExvY2FsZShsb2NhbGUpO1xuICAgIHZhciBwYXRoID0gc3RyTmFtZS5zcGxpdChcIi5cIik7XG4gICAgdmFyIG9iaiA9IGxvYztcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBhdGgubGVuZ3RoOyBpKyspIHtcbiAgICAgIG9iaiA9IG9ialtwYXRoW2ldXTtcbiAgICAgIGlmICghb2JqICYmIG9iaiAhPT0gXCJcIikgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSxcbiAgZ2V0TG9jYWxlTmFtZTogZnVuY3Rpb24obG9jOiBzdHJpbmcsIGRlZmF1bHRMb2NhbGU6IHN0cmluZyA9IG51bGwpOiBzdHJpbmcge1xuICAgIHZhciBsb2NhbGVOYW1lcyA9IFN1cnZleS5zdXJ2ZXlMb2NhbGl6YXRpb25bXCJsb2NhbGVOYW1lc1wiXTtcbiAgICBpZiAoIWRlZmF1bHRMb2NhbGUpIHtcbiAgICAgIGRlZmF1bHRMb2NhbGUgPSBTdXJ2ZXkuc3VydmV5TG9jYWxpemF0aW9uLmRlZmF1bHRMb2NhbGU7XG4gICAgfVxuICAgIHJldHVybiAhIWxvY1xuICAgICAgPyBsb2NhbGVOYW1lc1tsb2NdXG4gICAgICA6IGVkaXRvckxvY2FsaXphdGlvblxuICAgICAgICAgIC5nZXRTdHJpbmcoXCJlZC5kZWZhdWx0TG9jYWxlXCIpXG4gICAgICAgICAgW1wiZm9ybWF0XCJdKGxvY2FsZU5hbWVzW2RlZmF1bHRMb2NhbGVdKTtcbiAgfSxcbiAgZ2V0UHJvcGVydHlOYW1lOiBmdW5jdGlvbihzdHJOYW1lOiBzdHJpbmcsIGxvY2FsZTogc3RyaW5nID0gbnVsbCkge1xuICAgIHZhciBvYmogPSB0aGlzLmdldFByb3BlcnR5KHN0ck5hbWUsIGxvY2FsZSk7XG4gICAgdmFyIG5hbWUgPSBvYmpbXCJuYW1lXCJdO1xuICAgIGlmICghIW5hbWUpIHtcbiAgICAgIHJldHVybiBuYW1lICE9IHN0ck5hbWUgPyBuYW1lIDogdGhpcy5nZXRBdXRvUHJvcGVydHlOYW1lKG5hbWUpO1xuICAgIH1cbiAgICByZXR1cm4gb2JqO1xuICB9LFxuICBnZXRQcm9wZXJ0eVRpdGxlOiBmdW5jdGlvbihzdHJOYW1lOiBzdHJpbmcsIGxvY2FsZTogc3RyaW5nID0gbnVsbCkge1xuICAgIHZhciBvYmogPSB0aGlzLmdldFByb3BlcnR5KHN0ck5hbWUsIGxvY2FsZSk7XG4gICAgaWYgKG9ialtcInRpdGxlXCJdKSByZXR1cm4gb2JqW1widGl0bGVcIl07XG4gICAgcmV0dXJuIFwiXCI7XG4gIH0sXG4gIGdldFByb3BlcnR5SW5FZGl0b3I6IGZ1bmN0aW9uKHN0ck5hbWU6IHN0cmluZywgbG9jYWxlOiBzdHJpbmcgPSBudWxsKSB7XG4gICAgdmFyIG9iaiA9IHRoaXMuZ2V0U3RyaW5nKFwicGUuXCIgKyBzdHJOYW1lLCBsb2NhbGUpO1xuICAgIGlmIChvYmogIT09IHN0ck5hbWUpIHJldHVybiBvYmo7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHkoc3RyTmFtZSk7XG4gIH0sXG4gIGdldFByb3BlcnR5OiBmdW5jdGlvbihzdHJOYW1lOiBzdHJpbmcsIGxvY2FsZTogc3RyaW5nID0gbnVsbCkge1xuICAgIHZhciBvYmogPSB0aGlzLmdldFN0cmluZyhcInAuXCIgKyBzdHJOYW1lLCBsb2NhbGUpO1xuICAgIGlmIChvYmogIT09IHN0ck5hbWUpIHJldHVybiBvYmo7XG4gICAgdmFyIHBvcyA9IHN0ck5hbWUuaW5kZXhPZihcIl9cIik7XG4gICAgaWYgKHBvcyA8IC0xKSByZXR1cm4gdGhpcy5nZXRBdXRvUHJvcGVydHlOYW1lKG9iaik7XG4gICAgc3RyTmFtZSA9IHN0ck5hbWUuc3Vic3RyKHBvcyArIDEpO1xuICAgIG9iaiA9IHRoaXMuZ2V0U3RyaW5nKFwicC5cIiArIHN0ck5hbWUsIGxvY2FsZSk7XG4gICAgaWYgKG9iaiAhPT0gc3RyTmFtZSkgcmV0dXJuIG9iajtcbiAgICByZXR1cm4gdGhpcy5nZXRBdXRvUHJvcGVydHlOYW1lKG9iaik7XG4gIH0sXG4gIGdldEF1dG9Qcm9wZXJ0eU5hbWU6IGZ1bmN0aW9uKHByb3BOYW1lOiBzdHJpbmcpIHtcbiAgICBpZiAoIXByb3BOYW1lIHx8ICF0aGlzLmNhbWVsQ2FzZUJyZWFraW5nKSByZXR1cm4gcHJvcE5hbWU7XG4gICAgdmFyIHJlcyA9IHByb3BOYW1lWzBdLnRvVXBwZXJDYXNlKCk7XG4gICAgZm9yICh2YXIgaSA9IDE7IGkgPCBwcm9wTmFtZS5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHByb3BOYW1lW2ldID09PSBwcm9wTmFtZVtpXS50b1VwcGVyQ2FzZSgpKSB7XG4gICAgICAgIHJlcyArPSBcIiBcIjtcbiAgICAgIH1cbiAgICAgIHJlcyArPSBwcm9wTmFtZVtpXTtcbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbiAgfSxcbiAgZ2V0UHJvcGVydHlWYWx1ZTogZnVuY3Rpb24odmFsdWU6IGFueSwgbG9jYWxlOiBzdHJpbmcgPSBudWxsKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0VmFsdWVJbnRlcm5hbCh2YWx1ZSwgXCJwdlwiLCBsb2NhbGUpO1xuICB9LFxuICBnZXRWYWxpZGF0b3JOYW1lOiBmdW5jdGlvbihuYW1lOiBzdHJpbmcsIGxvY2FsZTogc3RyaW5nID0gbnVsbCkge1xuICAgIHJldHVybiB0aGlzLmdldFZhbHVlSW50ZXJuYWwobmFtZSwgXCJ2YWxpZGF0b3JzXCIsIGxvY2FsZSk7XG4gIH0sXG4gIGdldFRyaWdnZXJOYW1lOiBmdW5jdGlvbihuYW1lOiBzdHJpbmcsIGxvY2FsZTogc3RyaW5nID0gbnVsbCkge1xuICAgIHJldHVybiB0aGlzLmdldFZhbHVlSW50ZXJuYWwobmFtZSwgXCJ0cmlnZ2Vyc1wiLCBsb2NhbGUpO1xuICB9LFxuICBnZXRMb2NhbGUobG9jYWxlOiBzdHJpbmcpIHtcbiAgICBpZiAoIWxvY2FsZSkgbG9jYWxlID0gdGhpcy5jdXJyZW50TG9jYWxlO1xuICAgIHZhciBsb2MgPSBsb2NhbGUgPyB0aGlzLmxvY2FsZXNbbG9jYWxlXSA6IGRlZmF1bHRTdHJpbmdzO1xuICAgIGlmICghbG9jKSBsb2MgPSBkZWZhdWx0U3RyaW5ncztcbiAgICByZXR1cm4gbG9jO1xuICB9LFxuICBnZXRWYWx1ZUludGVybmFsKHZhbHVlOiBhbnksIHByZWZpeDogc3RyaW5nLCBsb2NhbGU6IHN0cmluZyA9IG51bGwpIHtcbiAgICBpZiAodmFsdWUgPT09IFwiXCIgfHwgdmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmaW5lZCkgcmV0dXJuIFwiXCI7XG4gICAgdmFsdWUgPSB2YWx1ZS50b1N0cmluZygpO1xuICAgIHZhciBsb2MgPSB0aGlzLmdldExvY2FsZShsb2NhbGUpO1xuICAgIHZhciByZXMgPSBsb2NbcHJlZml4XSA/IGxvY1twcmVmaXhdW3ZhbHVlXSA6IG51bGw7XG4gICAgaWYgKCFyZXMpIHJlcyA9IGRlZmF1bHRTdHJpbmdzW3ByZWZpeF1bdmFsdWVdO1xuICAgIHJldHVybiByZXMgPyByZXMgOiB2YWx1ZTtcbiAgfSxcbiAgZ2V0TG9jYWxlczogZnVuY3Rpb24oKTogQXJyYXk8c3RyaW5nPiB7XG4gICAgdmFyIHJlcyA9IFtdO1xuICAgIHJlcy5wdXNoKFwiXCIpO1xuICAgIGZvciAodmFyIGtleSBpbiB0aGlzLmxvY2FsZXMpIHtcbiAgICAgIHJlcy5wdXNoKGtleSk7XG4gICAgfVxuICAgIHJldHVybiByZXM7XG4gIH1cbn07XG5cbmV4cG9ydCB2YXIgZGVmYXVsdFN0cmluZ3MgPSBlblN0cmluZ3M7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvZWRpdG9yTG9jYWxpemF0aW9uLnRzIiwibW9kdWxlLmV4cG9ydHMgPSBfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFXzFfXztcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyBleHRlcm5hbCB7XCJyb290XCI6XCJrb1wiLFwiY29tbW9uanMyXCI6XCJrbm9ja291dFwiLFwiY29tbW9uanNcIjpcImtub2Nrb3V0XCIsXCJhbWRcIjpcImtub2Nrb3V0XCJ9XG4vLyBtb2R1bGUgaWQgPSAxXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIm1vZHVsZS5leHBvcnRzID0gX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV8yX187XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gZXh0ZXJuYWwge1wicm9vdFwiOlwiU3VydmV5XCIsXCJjb21tb25qczJcIjpcInN1cnZleS1rbm9ja291dFwiLFwiY29tbW9uanNcIjpcInN1cnZleS1rbm9ja291dFwiLFwiYW1kXCI6XCJzdXJ2ZXkta25vY2tvdXRcIn1cbi8vIG1vZHVsZSBpZCA9IDJcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiZXhwb3J0IHZhciBfX2Fzc2lnbiA9XG4gIE9iamVjdFtcImFzc2lnblwiXSB8fFxuICBmdW5jdGlvbih0YXJnZXQpIHtcbiAgICBmb3IgKHZhciBzLCBpID0gMSwgbiA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBuOyBpKyspIHtcbiAgICAgIHMgPSBhcmd1bWVudHNbaV07XG4gICAgICBmb3IgKHZhciBwIGluIHMpXG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkpIHRhcmdldFtwXSA9IHNbcF07XG4gICAgfVxuICAgIHJldHVybiB0YXJnZXQ7XG4gIH07XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2V4dGVuZHModGhpc0NsYXNzLCBiYXNlQ2xhc3MpIHtcbiAgZm9yICh2YXIgcCBpbiBiYXNlQ2xhc3MpXG4gICAgaWYgKGJhc2VDbGFzcy5oYXNPd25Qcm9wZXJ0eShwKSkgdGhpc0NsYXNzW3BdID0gYmFzZUNsYXNzW3BdO1xuICBmdW5jdGlvbiBfXygpIHtcbiAgICB0aGlzLmNvbnN0cnVjdG9yID0gdGhpc0NsYXNzO1xuICB9XG4gIHRoaXNDbGFzcy5wcm90b3R5cGUgPVxuICAgIGJhc2VDbGFzcyA9PT0gbnVsbFxuICAgICAgPyBPYmplY3QuY3JlYXRlKGJhc2VDbGFzcylcbiAgICAgIDogKChfXy5wcm90b3R5cGUgPSBiYXNlQ2xhc3MucHJvdG90eXBlKSwgbmV3IF9fKCkpO1xufVxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2VudHJpZXMvaGVscGVycy50cyIsImltcG9ydCAqIGFzIGtvIGZyb20gXCJrbm9ja291dFwiO1xuaW1wb3J0ICogYXMgU3VydmV5IGZyb20gXCJzdXJ2ZXkta25vY2tvdXRcIjtcbmltcG9ydCB7IFN1cnZleVByb3BlcnR5RWRpdG9yQmFzZSB9IGZyb20gXCIuL3Byb3BlcnR5RWRpdG9yQmFzZVwiO1xuaW1wb3J0IHsgU3VydmV5UHJvcGVydHlDdXN0b21FZGl0b3IgfSBmcm9tIFwiLi9wcm9wZXJ0eUN1c3RvbUVkaXRvclwiO1xuaW1wb3J0IHsgZWRpdG9yTG9jYWxpemF0aW9uIH0gZnJvbSBcIi4uL2VkaXRvckxvY2FsaXphdGlvblwiO1xuaW1wb3J0IHsgSnNvbk9iamVjdFByb3BlcnR5IH0gZnJvbSBcInN1cnZleS1rbm9ja291dFwiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5UHJvcGVydHlFZGl0b3JGYWN0b3J5IHtcbiAgcHVibGljIHN0YXRpYyBkZWZhdWx0RWRpdG9yOiBzdHJpbmcgPSBcInN0cmluZ1wiO1xuICBwcml2YXRlIHN0YXRpYyBjcmVhdG9yTGlzdCA9IHt9O1xuICBwcml2YXRlIHN0YXRpYyBjcmVhdG9yQnlDbGFzc0xpc3QgPSB7fTtcbiAgcHJpdmF0ZSBzdGF0aWMgd2lkZ2V0UmVnaXN0ZXJMaXN0ID0ge307XG4gIHB1YmxpYyBzdGF0aWMgZ2V0T3BlcmF0b3JzKCk6IEFycmF5PGFueT4ge1xuICAgIHZhciBvcGVyYXRvcnMgPSBbXG4gICAgICBcImVtcHR5XCIsXG4gICAgICBcIm5vdGVtcHR5XCIsXG4gICAgICBcImVxdWFsXCIsXG4gICAgICBcIm5vdGVxdWFsXCIsXG4gICAgICBcImNvbnRhaW5zXCIsXG4gICAgICBcIm5vdGNvbnRhaW5zXCIsXG4gICAgICBcImFueW9mXCIsXG4gICAgICBcImFsbG9mXCIsXG4gICAgICBcImdyZWF0ZXJcIixcbiAgICAgIFwibGVzc1wiLFxuICAgICAgXCJncmVhdGVyb3JlcXVhbFwiLFxuICAgICAgXCJsZXNzb3JlcXVhbFwiXG4gICAgXTtcbiAgICB2YXIgcmVzdWx0ID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBvcGVyYXRvcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBuYW1lID0gb3BlcmF0b3JzW2ldO1xuICAgICAgcmVzdWx0LnB1c2goe1xuICAgICAgICBuYW1lOiBuYW1lLFxuICAgICAgICB0ZXh0OiBlZGl0b3JMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKFwib3AuXCIgKyBuYW1lKVxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbiAgcHVibGljIHN0YXRpYyByZWdpc3RlckVkaXRvcihcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgY3JlYXRvcjogKHByb3BlcnR5OiBTdXJ2ZXkuSnNvbk9iamVjdFByb3BlcnR5KSA9PiBTdXJ2ZXlQcm9wZXJ0eUVkaXRvckJhc2UsXG4gICAgZWRpdGFibGVDbGFzc05hbWU6IHN0cmluZyA9IG51bGxcbiAgKSB7XG4gICAgU3VydmV5UHJvcGVydHlFZGl0b3JGYWN0b3J5LmNyZWF0b3JMaXN0W25hbWVdID0gY3JlYXRvcjtcbiAgICB2YXIgY2xhc3NOYW1lID0gZWRpdGFibGVDbGFzc05hbWUgPyBlZGl0YWJsZUNsYXNzTmFtZSA6IG5hbWU7XG4gICAgU3VydmV5UHJvcGVydHlFZGl0b3JGYWN0b3J5LmNyZWF0b3JCeUNsYXNzTGlzdFtjbGFzc05hbWVdID0gY3JlYXRvcjtcbiAgfVxuICBwdWJsaWMgc3RhdGljIHJlZ2lzdGVyQ3VzdG9tRWRpdG9yKG5hbWU6IHN0cmluZywgd2lkZ2V0SlNPTjogYW55KSB7XG4gICAgU3VydmV5UHJvcGVydHlFZGl0b3JGYWN0b3J5LndpZGdldFJlZ2lzdGVyTGlzdFtuYW1lXSA9IHdpZGdldEpTT047XG4gIH1cbiAgcHVibGljIHN0YXRpYyB1bnJlZ2lzdGVyQ3VzdG9tRWRpdG9yKG5hbWU6IHN0cmluZykge1xuICAgIGRlbGV0ZSBTdXJ2ZXlQcm9wZXJ0eUVkaXRvckZhY3Rvcnkud2lkZ2V0UmVnaXN0ZXJMaXN0W25hbWVdO1xuICB9XG4gIHB1YmxpYyBzdGF0aWMgY3JlYXRlRWRpdG9yKFxuICAgIHByb3BlcnR5OiBTdXJ2ZXkuSnNvbk9iamVjdFByb3BlcnR5LFxuICAgIGZ1bmM6IChuZXdWYWx1ZTogYW55KSA9PiBhbnlcbiAgKTogU3VydmV5UHJvcGVydHlFZGl0b3JCYXNlIHtcbiAgICB2YXIgZWRpdG9yVHlwZSA9IHByb3BlcnR5LnR5cGU7XG4gICAgaWYgKFxuICAgICAgU3VydmV5UHJvcGVydHlFZGl0b3JGYWN0b3J5LmlzRHJvcGRvd25FZGl0b3IocHJvcGVydHkpICYmXG4gICAgICAoIWVkaXRvclR5cGUgfHwgZWRpdG9yVHlwZSA9PSBTdXJ2ZXlQcm9wZXJ0eUVkaXRvckZhY3RvcnkuZGVmYXVsdEVkaXRvcilcbiAgICApIHtcbiAgICAgIGVkaXRvclR5cGUgPSBcImRyb3Bkb3duXCI7XG4gICAgfVxuICAgIHZhciBwcm9wZXJ0eUVkaXRvciA9IFN1cnZleVByb3BlcnR5RWRpdG9yRmFjdG9yeS5jcmVhdGVDdXN0b21FZGl0b3IoXG4gICAgICBlZGl0b3JUeXBlLFxuICAgICAgcHJvcGVydHlcbiAgICApO1xuICAgIGlmICghcHJvcGVydHlFZGl0b3IpIHtcbiAgICAgIHZhciBjcmVhdG9yID0gU3VydmV5UHJvcGVydHlFZGl0b3JGYWN0b3J5LmNyZWF0b3JMaXN0W2VkaXRvclR5cGVdO1xuICAgICAgaWYgKGNyZWF0b3IpIHByb3BlcnR5RWRpdG9yID0gY3JlYXRvcihwcm9wZXJ0eSk7XG4gICAgfVxuICAgIGlmICghcHJvcGVydHlFZGl0b3IpIHtcbiAgICAgIGlmIChcbiAgICAgICAgcHJvcGVydHkuaXNBcnJheSAmJlxuICAgICAgICBTdXJ2ZXkuU2VyaWFsaXplci5pc0Rlc2NlbmRhbnRPZihwcm9wZXJ0eS5jbGFzc05hbWUsIFwiaXRlbXZhbHVlXCIpXG4gICAgICApIHtcbiAgICAgICAgdmFyIGNyZWF0b3IgPSBTdXJ2ZXlQcm9wZXJ0eUVkaXRvckZhY3RvcnkuY3JlYXRvckxpc3RbXCJpdGVtdmFsdWVbXVwiXTtcbiAgICAgICAgaWYgKGNyZWF0b3IpIHByb3BlcnR5RWRpdG9yID0gY3JlYXRvcihwcm9wZXJ0eSk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmICghcHJvcGVydHlFZGl0b3IpIHtcbiAgICAgIGNyZWF0b3IgPSBTdXJ2ZXlQcm9wZXJ0eUVkaXRvckZhY3RvcnkuZmluZFBhcmVudENyZWF0b3IoZWRpdG9yVHlwZSk7XG4gICAgICBwcm9wZXJ0eUVkaXRvciA9IGNyZWF0b3IocHJvcGVydHkpO1xuICAgIH1cbiAgICBwcm9wZXJ0eUVkaXRvci5vbkNoYW5nZWQgPSBmdW5jO1xuICAgIHJldHVybiBwcm9wZXJ0eUVkaXRvcjtcbiAgfVxuICBwcml2YXRlIHN0YXRpYyBpc0Ryb3Bkb3duRWRpdG9yKFxuICAgIHByb3BlcnR5OiBTdXJ2ZXkuSnNvbk9iamVjdFByb3BlcnR5XG4gICk6IGJvb2xlYW4ge1xuICAgIGlmIChwcm9wZXJ0eVtcImhhc0Nob2ljZXNcIl0gIT09IHVuZGVmaW5lZClcbiAgICAgIHJldHVybiBwcm9wZXJ0eVtcImhhc0Nob2ljZXNcIl0gPT09IHRydWU7XG4gICAgcmV0dXJuIHByb3BlcnR5LmNob2ljZXMgIT0gbnVsbDtcbiAgfVxuICBwcml2YXRlIHN0YXRpYyBjcmVhdGVDdXN0b21FZGl0b3IoXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIHByb3BlcnR5OiBTdXJ2ZXkuSnNvbk9iamVjdFByb3BlcnR5XG4gICkge1xuICAgIHZhciB3aWRnZXRKU09OID0gU3VydmV5UHJvcGVydHlFZGl0b3JGYWN0b3J5LndpZGdldFJlZ2lzdGVyTGlzdFtuYW1lXTtcbiAgICBpZiAoIXdpZGdldEpTT04pIHJldHVybiBudWxsO1xuICAgIHJldHVybiBuZXcgU3VydmV5UHJvcGVydHlDdXN0b21FZGl0b3IocHJvcGVydHksIHdpZGdldEpTT04pO1xuICB9XG4gIHByaXZhdGUgc3RhdGljIGZpbmRQYXJlbnRDcmVhdG9yKFxuICAgIG5hbWU6IHN0cmluZ1xuICApOiAocHJvcGVydHk6IFN1cnZleS5Kc29uT2JqZWN0UHJvcGVydHkpID0+IFN1cnZleVByb3BlcnR5RWRpdG9yQmFzZSB7XG4gICAgdmFyIGpzb25DbGFzcyA9IFN1cnZleS5TZXJpYWxpemVyLmZpbmRDbGFzcyhuYW1lKTtcbiAgICB3aGlsZSAoanNvbkNsYXNzICYmIGpzb25DbGFzcy5wYXJlbnROYW1lKSB7XG4gICAgICB2YXIgY3JlYXRvciA9XG4gICAgICAgIFN1cnZleVByb3BlcnR5RWRpdG9yRmFjdG9yeS5jcmVhdG9yQnlDbGFzc0xpc3RbanNvbkNsYXNzLnBhcmVudE5hbWVdO1xuICAgICAgaWYgKGNyZWF0b3IpIHJldHVybiBjcmVhdG9yO1xuICAgICAganNvbkNsYXNzID0gU3VydmV5LlNlcmlhbGl6ZXIuZmluZENsYXNzKGpzb25DbGFzcy5wYXJlbnROYW1lKTtcbiAgICB9XG4gICAgcmV0dXJuIFN1cnZleVByb3BlcnR5RWRpdG9yRmFjdG9yeS5jcmVhdG9yTGlzdFtcbiAgICAgIFN1cnZleVByb3BlcnR5RWRpdG9yRmFjdG9yeS5kZWZhdWx0RWRpdG9yXG4gICAgXTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgU3VydmV5U3RyaW5nUHJvcGVydHlFZGl0b3IgZXh0ZW5kcyBTdXJ2ZXlQcm9wZXJ0eUVkaXRvckJhc2Uge1xuICBjb25zdHJ1Y3Rvcihwcm9wZXJ0eTogU3VydmV5Lkpzb25PYmplY3RQcm9wZXJ0eSkge1xuICAgIHN1cGVyKHByb3BlcnR5KTtcbiAgfVxuICBwdWJsaWMgZ2V0IGVkaXRvclR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCJzdHJpbmdcIjtcbiAgfVxufVxuZXhwb3J0IGNsYXNzIFN1cnZleURyb3Bkb3duUHJvcGVydHlFZGl0b3IgZXh0ZW5kcyBTdXJ2ZXlQcm9wZXJ0eUVkaXRvckJhc2Uge1xuICBwdWJsaWMga29DaG9pY2VzOiBhbnk7XG4gIHB1YmxpYyBrb0hhc0ZvY3VzOiBhbnk7XG4gIGNvbnN0cnVjdG9yKHByb3BlcnR5OiBTdXJ2ZXkuSnNvbk9iamVjdFByb3BlcnR5KSB7XG4gICAgc3VwZXIocHJvcGVydHkpO1xuICAgIHRoaXMua29DaG9pY2VzID0ga28ub2JzZXJ2YWJsZUFycmF5KFtdKTtcbiAgICB0aGlzLmtvSGFzRm9jdXMgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgdGhpcy5rb0hhc0ZvY3VzLnN1YnNjcmliZShmdW5jdGlvbihuZXdWYWx1ZSkge1xuICAgICAgLy9UT0RPIGlzRHluYW1pY0Nob2ljZXMgb2Jzb2xldGUsIHVzZSBkZXBlbmRzT24gYXR0cmlidXRlXG4gICAgICBpZiAobmV3VmFsdWUgJiYgc2VsZi5wcm9wZXJ0eVtcImlzRHluYW1pY0Nob2ljZXNcIl0pIHtcbiAgICAgICAgc2VsZi51cGRhdGVDaG9pY2VzKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbiAgcHVibGljIGdldCBlZGl0b3JUeXBlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFwiZHJvcGRvd25cIjtcbiAgfVxuICBwdWJsaWMgZ2V0VmFsdWVUZXh0KHZhbHVlOiBhbnkpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLnByb3BlcnR5Lm5hbWUgPT09IFwibG9jYWxlXCIpIHtcbiAgICAgIGxldCB0ZXh0ID0gZWRpdG9yTG9jYWxpemF0aW9uLmdldExvY2FsZU5hbWUodmFsdWUpO1xuICAgICAgaWYgKHRleHQpIHJldHVybiB0ZXh0O1xuICAgIH1cbiAgICBpZiAodGhpcy5wcm9wZXJ0eS5uYW1lID09PSBcImNlbGxUeXBlXCIpIHtcbiAgICAgIGxldCB0ZXh0ID0gZWRpdG9yTG9jYWxpemF0aW9uLmdldFN0cmluZyhcInF0LlwiICsgdmFsdWUpO1xuICAgICAgaWYgKHRleHQpIHJldHVybiB0ZXh0O1xuICAgIH1cbiAgICByZXR1cm4gZWRpdG9yTG9jYWxpemF0aW9uLmdldFByb3BlcnR5VmFsdWUodmFsdWUpO1xuICB9XG4gIHB1YmxpYyBzZXRPYmplY3QodmFsdWU6IGFueSkge1xuICAgIHN1cGVyLnNldE9iamVjdCh2YWx1ZSk7XG4gICAgdGhpcy5iZWdpblZhbHVlVXBkYXRpbmcoKTtcbiAgICBpZiAodGhpcy5rb0Nob2ljZXMoKS5sZW5ndGggPT0gMCkge1xuICAgICAgdGhpcy51cGRhdGVDaG9pY2VzKCk7XG4gICAgfVxuICAgIHRoaXMuZW5kVmFsdWVVcGRhdGluZygpO1xuICB9XG4gIHB1YmxpYyB1cGRhdGVEeW5hbWljUHJvcGVydGllcygpIHtcbiAgICBzdXBlci51cGRhdGVEeW5hbWljUHJvcGVydGllcygpO1xuICAgIHRoaXMudXBkYXRlQ2hvaWNlcygpO1xuICB9XG4gIHB1YmxpYyB1cGRhdGVDaG9pY2VzKCkge1xuICAgIHZhciBjaG9pY2VzID0gdGhpcy5nZXRQcm9wZXJ0eUNob2ljZXMoKTtcbiAgICB0aGlzLnNldENob2ljZXMoY2hvaWNlcyk7XG4gIH1cbiAgcHJpdmF0ZSBzZXRDaG9pY2VzKGNob2ljZXM6IEFycmF5PFN1cnZleS5JdGVtVmFsdWU+KSB7XG4gICAgY2hvaWNlcyA9IHRoaXMubWFrZUNob2ljZXNMb2NhbGl6YWJsZShjaG9pY2VzKTtcbiAgICBpZiAoISFjaG9pY2VzICYmIEFycmF5LmlzQXJyYXkoY2hvaWNlcykpIHtcbiAgICAgIHRoaXMua29DaG9pY2VzKGNob2ljZXMpO1xuICAgIH1cbiAgfVxuICBwcml2YXRlIG1ha2VDaG9pY2VzTG9jYWxpemFibGUoY2hvaWNlczogQXJyYXk8U3VydmV5Lkl0ZW1WYWx1ZT4pIHtcbiAgICBpZiAoIWNob2ljZXMpIHJldHVybiBjaG9pY2VzO1xuICAgIHZhciByZXMgPSBuZXcgQXJyYXk8U3VydmV5Lkl0ZW1WYWx1ZT4oKTtcbiAgICBTdXJ2ZXkuSXRlbVZhbHVlLnNldERhdGEocmVzLCBjaG9pY2VzKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJlcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHZhbHVlID0gcmVzW2ldLnZhbHVlO1xuICAgICAgdmFyIHRleHQgPSB0aGlzLmdldFZhbHVlVGV4dCh2YWx1ZSk7XG4gICAgICBpZiAodGV4dCAhPSB2YWx1ZSkge1xuICAgICAgICByZXNbaV0udGV4dCA9IHRleHQ7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXM7XG4gIH1cbiAgcHJpdmF0ZSBnZXRQcm9wZXJ0eUNob2ljZXMoKTogQXJyYXk8YW55PiB7XG4gICAgaWYgKCF0aGlzLnByb3BlcnR5KSByZXR1cm4gbnVsbDtcbiAgICBpZiAoISF0aGlzLm9iamVjdCkge1xuICAgICAgdmFyIG9iaiA9IHRoaXMub2JqZWN0O1xuICAgICAgdGhpcy5vYmplY3RbXCJnZXRFZGl0aW5nUHJvcGVydHlWYWx1ZVwiXSA9IGZ1bmN0aW9uKG5hbWU6IHN0cmluZykge1xuICAgICAgICBpZiAoISFvYmouZWRpdGluZ1Byb3BlcnRpZXMgJiYgb2JqLmVkaXRpbmdQcm9wZXJ0aWVzW25hbWVdICE9IHVuZGVmaW5lZClcbiAgICAgICAgICByZXR1cm4gb2JqLmVkaXRpbmdQcm9wZXJ0aWVzW25hbWVdO1xuICAgICAgICByZXR1cm4gb2JqW25hbWVdO1xuICAgICAgfTtcbiAgICB9XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIHJldHVybiAoPGFueT50aGlzLnByb3BlcnR5W1wiZ2V0Q2hvaWNlc1wiXSkodGhpcy5vYmplY3QsIGZ1bmN0aW9uKFxuICAgICAgY2hvaWNlczogYW55XG4gICAgKSB7XG4gICAgICBzZWxmLnNldENob2ljZXMoY2hvaWNlcyk7XG4gICAgfSk7XG4gIH1cbn1cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlCb29sZWFuUHJvcGVydHlFZGl0b3IgZXh0ZW5kcyBTdXJ2ZXlQcm9wZXJ0eUVkaXRvckJhc2Uge1xuICBjb25zdHJ1Y3Rvcihwcm9wZXJ0eTogU3VydmV5Lkpzb25PYmplY3RQcm9wZXJ0eSkge1xuICAgIHN1cGVyKHByb3BlcnR5KTtcbiAgfVxuICBwdWJsaWMgZ2V0IGVkaXRvclR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCJib29sZWFuXCI7XG4gIH1cbiAgcHVibGljIGdldCBhbHdheXNTaG93RWRpdG9yKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHB1YmxpYyBnZXQgY2FuU2hvd0Rpc3BsYXlOYW1lT25Ub3AoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHB1YmxpYyBnZXRWYWx1ZVRleHQodmFsdWU6IGFueSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGVkaXRvckxvY2FsaXphdGlvbi5nZXRQcm9wZXJ0eVZhbHVlKHZhbHVlKTtcbiAgfVxufVxuZXhwb3J0IGNsYXNzIFN1cnZleU51bWJlclByb3BlcnR5RWRpdG9yIGV4dGVuZHMgU3VydmV5UHJvcGVydHlFZGl0b3JCYXNlIHtcbiAgY29uc3RydWN0b3IocHJvcGVydHk6IFN1cnZleS5Kc29uT2JqZWN0UHJvcGVydHkpIHtcbiAgICBzdXBlcihwcm9wZXJ0eSk7XG4gIH1cbiAgcHVibGljIGdldCBlZGl0b3JUeXBlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFwibnVtYmVyXCI7XG4gIH1cbiAgcHJvdGVjdGVkIGdldENvcnJlY3RlZFZhbHVlKHZhbHVlOiBhbnkpOiBhbnkge1xuICAgIGlmICghdmFsdWUpIHJldHVybiB2YWx1ZTtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiIHx8IHZhbHVlIGluc3RhbmNlb2YgU3RyaW5nKSB7XG4gICAgICB2YWx1ZSA9IE51bWJlcih2YWx1ZSk7XG4gICAgICBpZiAoIXZhbHVlKSB2YWx1ZSA9IDA7XG4gICAgfVxuICAgIHJldHVybiBzdXBlci5nZXRDb3JyZWN0ZWRWYWx1ZSh2YWx1ZSk7XG4gIH1cbn1cblxuU3VydmV5UHJvcGVydHlFZGl0b3JGYWN0b3J5LnJlZ2lzdGVyRWRpdG9yKFwic3RyaW5nXCIsIGZ1bmN0aW9uKFxuICBwcm9wZXJ0eTogU3VydmV5Lkpzb25PYmplY3RQcm9wZXJ0eVxuKTogU3VydmV5UHJvcGVydHlFZGl0b3JCYXNlIHtcbiAgcmV0dXJuIG5ldyBTdXJ2ZXlTdHJpbmdQcm9wZXJ0eUVkaXRvcihwcm9wZXJ0eSk7XG59KTtcblN1cnZleVByb3BlcnR5RWRpdG9yRmFjdG9yeS5yZWdpc3RlckVkaXRvcihcImRyb3Bkb3duXCIsIGZ1bmN0aW9uKFxuICBwcm9wZXJ0eTogU3VydmV5Lkpzb25PYmplY3RQcm9wZXJ0eVxuKTogU3VydmV5UHJvcGVydHlFZGl0b3JCYXNlIHtcbiAgcmV0dXJuIG5ldyBTdXJ2ZXlEcm9wZG93blByb3BlcnR5RWRpdG9yKHByb3BlcnR5KTtcbn0pO1xuU3VydmV5UHJvcGVydHlFZGl0b3JGYWN0b3J5LnJlZ2lzdGVyRWRpdG9yKFwiYm9vbGVhblwiLCBmdW5jdGlvbihcbiAgcHJvcGVydHk6IFN1cnZleS5Kc29uT2JqZWN0UHJvcGVydHlcbik6IFN1cnZleVByb3BlcnR5RWRpdG9yQmFzZSB7XG4gIHJldHVybiBuZXcgU3VydmV5Qm9vbGVhblByb3BlcnR5RWRpdG9yKHByb3BlcnR5KTtcbn0pO1xuU3VydmV5UHJvcGVydHlFZGl0b3JGYWN0b3J5LnJlZ2lzdGVyRWRpdG9yKFwibnVtYmVyXCIsIGZ1bmN0aW9uKFxuICBwcm9wZXJ0eTogU3VydmV5Lkpzb25PYmplY3RQcm9wZXJ0eVxuKTogU3VydmV5UHJvcGVydHlFZGl0b3JCYXNlIHtcbiAgcmV0dXJuIG5ldyBTdXJ2ZXlOdW1iZXJQcm9wZXJ0eUVkaXRvcihwcm9wZXJ0eSk7XG59KTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9wcm9wZXJ0eUVkaXRvcnMvcHJvcGVydHlFZGl0b3JGYWN0b3J5LnRzIiwiaW1wb3J0IHsgZWRpdG9yTG9jYWxpemF0aW9uIH0gZnJvbSBcIi4vZWRpdG9yTG9jYWxpemF0aW9uXCI7XG5pbXBvcnQgKiBhcyBTdXJ2ZXkgZnJvbSBcInN1cnZleS1rbm9ja291dFwiO1xuaW1wb3J0IHsgSVN1cnZleU9iamVjdEVkaXRvck9wdGlvbnMgfSBmcm9tIFwiLi9wcm9wZXJ0eUVkaXRvcnMvcHJvcGVydHlFZGl0b3JCYXNlXCI7XG5cbmV4cG9ydCBlbnVtIE9ialR5cGUge1xuICBVbmtub3duLFxuICBTdXJ2ZXksXG4gIFBhZ2UsXG4gIFBhbmVsLFxuICBRdWVzdGlvblxufVxuZXhwb3J0IGNsYXNzIFN1cnZleUhlbHBlciB7XG4gIHB1YmxpYyBzdGF0aWMgZ2V0TmV3UGFnZU5hbWUob2JqczogQXJyYXk8YW55Pikge1xuICAgIHJldHVybiBTdXJ2ZXlIZWxwZXIuZ2V0TmV3TmFtZShcbiAgICAgIG9ianMsXG4gICAgICBlZGl0b3JMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKFwiZWQubmV3UGFnZU5hbWVcIilcbiAgICApO1xuICB9XG4gIHB1YmxpYyBzdGF0aWMgZ2V0TmV3UXVlc3Rpb25OYW1lKG9ianM6IEFycmF5PGFueT4pIHtcbiAgICByZXR1cm4gU3VydmV5SGVscGVyLmdldE5ld05hbWUoXG4gICAgICBvYmpzLFxuICAgICAgZWRpdG9yTG9jYWxpemF0aW9uLmdldFN0cmluZyhcImVkLm5ld1F1ZXN0aW9uTmFtZVwiKVxuICAgICk7XG4gIH1cbiAgcHVibGljIHN0YXRpYyBnZXROZXdQYW5lbE5hbWUob2JqczogQXJyYXk8YW55Pikge1xuICAgIHJldHVybiBTdXJ2ZXlIZWxwZXIuZ2V0TmV3TmFtZShcbiAgICAgIG9ianMsXG4gICAgICBlZGl0b3JMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKFwiZWQubmV3UGFuZWxOYW1lXCIpXG4gICAgKTtcbiAgfVxuICBwdWJsaWMgc3RhdGljIGdlbmVyYXRlTmV3TmFtZShuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHZhciBwb3MgPSBuYW1lLmxlbmd0aDtcbiAgICB3aGlsZSAocG9zID4gMCAmJiBuYW1lW3BvcyAtIDFdID49IFwiMFwiICYmIG5hbWVbcG9zIC0gMV0gPD0gXCI5XCIpIHtcbiAgICAgIHBvcy0tO1xuICAgIH1cbiAgICB2YXIgYmFzZSA9IG5hbWUuc3Vic3RyKDAsIHBvcyk7XG4gICAgdmFyIG51bSA9IDA7XG4gICAgaWYgKHBvcyA8IG5hbWUubGVuZ3RoKSB7XG4gICAgICBudW0gPSBwYXJzZUludChuYW1lLnN1YnN0cihwb3MpKTtcbiAgICB9XG4gICAgbnVtKys7XG4gICAgcmV0dXJuIGJhc2UgKyBudW07XG4gIH1cbiAgcHVibGljIHN0YXRpYyBnZXROZXdOYW1lKG9ianM6IEFycmF5PGFueT4sIGJhc2VOYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHZhciBoYXNoID0ge307XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBvYmpzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBoYXNoW29ianNbaV0ubmFtZV0gPSB0cnVlO1xuICAgIH1cbiAgICB2YXIgbnVtID0gMTtcbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgaWYgKCFoYXNoW2Jhc2VOYW1lICsgbnVtLnRvU3RyaW5nKCldKSBicmVhaztcbiAgICAgIG51bSsrO1xuICAgIH1cbiAgICByZXR1cm4gYmFzZU5hbWUgKyBudW0udG9TdHJpbmcoKTtcbiAgfVxuICBwdWJsaWMgc3RhdGljIGdldE9iamVjdFR5cGUob2JqOiBhbnkpOiBPYmpUeXBlIHtcbiAgICBpZiAoIW9iaiB8fCAhb2JqW1wiZ2V0VHlwZVwiXSkgcmV0dXJuIE9ialR5cGUuVW5rbm93bjtcbiAgICBpZiAob2JqLmdldFR5cGUoKSA9PSBcInBhZ2VcIikgcmV0dXJuIE9ialR5cGUuUGFnZTtcbiAgICBpZiAob2JqLmdldFR5cGUoKSA9PSBcInBhbmVsXCIpIHJldHVybiBPYmpUeXBlLlBhbmVsO1xuICAgIGlmIChvYmouZ2V0VHlwZSgpID09IFwic3VydmV5XCIpIHJldHVybiBPYmpUeXBlLlN1cnZleTtcbiAgICBpZiAob2JqW1wibmFtZVwiXSkgcmV0dXJuIE9ialR5cGUuUXVlc3Rpb247XG4gICAgcmV0dXJuIE9ialR5cGUuVW5rbm93bjtcbiAgfVxuICBwdWJsaWMgc3RhdGljIGdldE9iamVjdFR5cGVTdHIob2JqOiBhbnkpOiBzdHJpbmcge1xuICAgIHZhciBvYmpUeXBlID0gU3VydmV5SGVscGVyLmdldE9iamVjdFR5cGUob2JqKTtcbiAgICBpZiAob2JqVHlwZSA9PT0gT2JqVHlwZS5TdXJ2ZXkpIHJldHVybiBcInN1cnZleVwiO1xuICAgIGlmIChvYmpUeXBlID09PSBPYmpUeXBlLlBhZ2UpIHJldHVybiBcInBhZ2VcIjtcbiAgICBpZiAob2JqVHlwZSA9PT0gT2JqVHlwZS5QYW5lbCkgcmV0dXJuIFwicGFuZWxcIjtcbiAgICBpZiAob2JqVHlwZSA9PT0gT2JqVHlwZS5RdWVzdGlvbikgcmV0dXJuIFwicXVlc3Rpb25cIjtcbiAgICByZXR1cm4gXCJ1bmtub3duXCI7XG4gIH1cbiAgcHVibGljIHN0YXRpYyBnZXRPYmplY3ROYW1lKG9iajogYW55LCBzaG93T2JqZWN0VGl0bGUgPSBmYWxzZSk6IHN0cmluZyB7XG4gICAgaWYgKHNob3dPYmplY3RUaXRsZSAmJiBvYmpbXCJ0aXRsZVwiXSkgcmV0dXJuIG9ialtcInRpdGxlXCJdO1xuICAgIGlmIChvYmpbXCJuYW1lXCJdKSByZXR1cm4gb2JqW1wibmFtZVwiXTtcbiAgICB2YXIgb2JqVHlwZSA9IFN1cnZleUhlbHBlci5nZXRPYmplY3RUeXBlKG9iaik7XG4gICAgaWYgKG9ialR5cGUgIT0gT2JqVHlwZS5QYWdlKSByZXR1cm4gXCJcIjtcbiAgICB2YXIgZGF0YSA9IDxTdXJ2ZXkuU3VydmV5Pig8U3VydmV5LlBhZ2U+b2JqKVtcImRhdGFcIl07XG4gICAgaWYgKCFkYXRhKSBkYXRhID0gPFN1cnZleS5TdXJ2ZXk+KDxTdXJ2ZXkuUGFnZT5vYmopW1wic3VydmV5XCJdOyAvL1RPRE9cbiAgICB2YXIgaW5kZXggPSBkYXRhLnBhZ2VzLmluZGV4T2YoPFN1cnZleS5QYWdlPm9iaik7XG4gICAgcmV0dXJuIFwiW1BhZ2UgXCIgKyAoaW5kZXggKyAxKSArIFwiXVwiO1xuICB9XG4gIHB1YmxpYyBzdGF0aWMgZ2V0RWxlbWVudHMoXG4gICAgZWxlbWVudDogYW55LFxuICAgIGluY2x1ZGVIaWRkZW46IGJvb2xlYW4gPSBmYWxzZVxuICApOiBBcnJheTxhbnk+IHtcbiAgICBpZiAoIWVsZW1lbnQpIHJldHVybiBbXTtcbiAgICBpZiAoZWxlbWVudC5nZXRFbGVtZW50c0luRGVzaWduKVxuICAgICAgcmV0dXJuIGVsZW1lbnQuZ2V0RWxlbWVudHNJbkRlc2lnbihpbmNsdWRlSGlkZGVuKTtcbiAgICBpZiAoZWxlbWVudC5lbGVtZW50cykgcmV0dXJuIGVsZW1lbnQuZWxlbWVudHM7XG4gICAgcmV0dXJuIFtdO1xuICB9XG4gIHB1YmxpYyBzdGF0aWMgaXNQcm9wZXJ0eVZpc2libGUoXG4gICAgb2JqOiBhbnksXG4gICAgcHJvcGVydHk6IFN1cnZleS5Kc29uT2JqZWN0UHJvcGVydHksXG4gICAgb3B0aW9uczogSVN1cnZleU9iamVjdEVkaXRvck9wdGlvbnMgPSBudWxsXG4gICk6IGJvb2xlYW4ge1xuICAgIGlmICghcHJvcGVydHkgfHwgIXByb3BlcnR5LnZpc2libGUpIHJldHVybiBmYWxzZTtcbiAgICBpZiAoXG4gICAgICAhIXByb3BlcnR5LmlzVmlzaWJsZSAmJlxuICAgICAgISFvYmouZ2V0TGF5b3V0VHlwZSAmJlxuICAgICAgISg8YW55PnByb3BlcnR5W1wiaXNWaXNpYmxlXCJdKShvYmouZ2V0TGF5b3V0VHlwZSgpLCBudWxsKVxuICAgIClcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB2YXIgY2FuU2hvdyA9ICEhb3B0aW9uc1xuICAgICAgPyAob2JqZWN0OiBhbnksIHByb3BlcnR5OiBTdXJ2ZXkuSnNvbk9iamVjdFByb3BlcnR5KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIG9wdGlvbnMub25DYW5TaG93UHJvcGVydHlDYWxsYmFjayhvYmplY3QsIHByb3BlcnR5KTtcbiAgICAgICAgfVxuICAgICAgOiBudWxsO1xuICAgIGlmICghIWNhblNob3cgJiYgIWNhblNob3cob2JqLCBwcm9wZXJ0eSkpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBwdWJsaWMgc3RhdGljIHNjcm9sbEludG9WaWV3SWZOZWVkZWQoZWw6IEhUTUxFbGVtZW50KSB7XG4gICAgaWYgKCFlbCB8fCAhZWwuc2Nyb2xsSW50b1ZpZXcpIHJldHVybjtcbiAgICB2YXIgcmVjdCA9IGVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIHZhciBzY3JvbGxhYmxlRGl2ID0gU3VydmV5SGVscGVyLmdldFNjcm9sbGFibGVEaXYoZWwpO1xuICAgIGlmICghc2Nyb2xsYWJsZURpdikgcmV0dXJuO1xuICAgIHZhciBoZWlnaHQgPSBzY3JvbGxhYmxlRGl2LmNsaWVudEhlaWdodDtcbiAgICBpZiAocmVjdC50b3AgPCBzY3JvbGxhYmxlRGl2Lm9mZnNldFRvcCkge1xuICAgICAgZWwuc2Nyb2xsSW50b1ZpZXcoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbGV0IG9mZnNldFRvcCA9IGhlaWdodCArIHNjcm9sbGFibGVEaXYub2Zmc2V0VG9wO1xuICAgICAgaWYgKHJlY3QuYm90dG9tID4gb2Zmc2V0VG9wICYmIHJlY3QuaGVpZ2h0IDwgaGVpZ2h0KSB7XG4gICAgICAgIGVsLnNjcm9sbEludG9WaWV3KGZhbHNlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcHVibGljIHN0YXRpYyBnZXRTY3JvbGxhYmxlRGl2KGVsOiBIVE1MRWxlbWVudCk6IEhUTUxFbGVtZW50IHtcbiAgICB3aGlsZSAoISFlbCkge1xuICAgICAgaWYgKCEhZWwuaWQgJiYgZWwuaWQuaW5kZXhPZihcInNjcm9sbGFibGVEaXZcIikgPiAtMSkgcmV0dXJuIGVsO1xuICAgICAgaWYgKCFlbC5vZmZzZXRQYXJlbnQpIHJldHVybiBudWxsO1xuICAgICAgZWwgPSA8SFRNTEVsZW1lbnQ+ZWwub2Zmc2V0UGFyZW50O1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL3N1cnZleUhlbHBlci50cyIsImltcG9ydCAqIGFzIGtvIGZyb20gXCJrbm9ja291dFwiO1xuaW1wb3J0IHsgZWRpdG9yTG9jYWxpemF0aW9uIH0gZnJvbSBcIi4vZWRpdG9yTG9jYWxpemF0aW9uXCI7XG5pbXBvcnQgKiBhcyBTdXJ2ZXkgZnJvbSBcInN1cnZleS1rbm9ja291dFwiO1xuaW1wb3J0IHsgZmluZFBhcmVudE5vZGUgfSBmcm9tIFwiLi91dGlscy91dGlsc1wiO1xuaW1wb3J0IHsgU3R5bGVzTWFuYWdlciB9IGZyb20gXCIuL3N0eWxlc21hbmFnZXJcIjtcblxuZXhwb3J0IGludGVyZmFjZSBJU3VydmV5T2JqZWN0TWVudUl0ZW0ge1xuICBuYW1lOiBzdHJpbmc7XG4gIHRleHQ6IHN0cmluZztcbiAgb25DbGljazogKG9iajogU3VydmV5LkJhc2UpID0+IGFueTtcbiAgaWNvbj86IHN0cmluZyB8ICgoKSA9PiBzdHJpbmcpO1xuICBoYXNUaXRsZT86IGJvb2xlYW47XG4gIHRlbXBsYXRlPzogc3RyaW5nO1xufVxuXG5leHBvcnQgY2xhc3MgU3VydmV5Rm9yRGVzaWduZXIgZXh0ZW5kcyBTdXJ2ZXkuU3VydmV5IHtcbiAgcHJpdmF0ZSBzZWxlY3RlZEVsZW1lbnRWYWx1ZTogYW55O1xuICBlZGl0UXVlc3Rpb25DbGljazogYW55O1xuICBwdWJsaWMgb25TZWxlY3RlZEVsZW1lbnRDaGFuZ2VkOiBTdXJ2ZXkuRXZlbnQ8XG4gICAgKHNlbmRlcjogU3VydmV5LlN1cnZleSwgb3B0aW9uczogYW55KSA9PiBhbnksXG4gICAgYW55XG4gID4gPSBuZXcgU3VydmV5LkV2ZW50PChzZW5kZXI6IFN1cnZleS5TdXJ2ZXksIG9wdGlvbnM6IGFueSkgPT4gYW55LCBhbnk+KCk7XG4gIHB1YmxpYyBvbkVkaXRCdXR0b25DbGljazogU3VydmV5LkV2ZW50PFxuICAgIChzZW5kZXI6IFN1cnZleS5TdXJ2ZXksIG9wdGlvbnM6IGFueSkgPT4gYW55LFxuICAgIGFueVxuICA+ID0gbmV3IFN1cnZleS5FdmVudDwoc2VuZGVyOiBTdXJ2ZXkuU3VydmV5LCBvcHRpb25zOiBhbnkpID0+IGFueSwgYW55PigpO1xuICBwdWJsaWMgb25HZXRNZW51SXRlbXM6IFN1cnZleS5FdmVudDxcbiAgICAoc2VuZGVyOiBTdXJ2ZXkuU3VydmV5LCBvcHRpb25zOiBhbnkpID0+IGFueSxcbiAgICBhbnlcbiAgPiA9IG5ldyBTdXJ2ZXkuRXZlbnQ8KHNlbmRlcjogU3VydmV5LlN1cnZleSwgb3B0aW9uczogYW55KSA9PiBhbnksIGFueT4oKTtcbiAgcHVibGljIG9uRWxlbWVudERvdWJsZUNsaWNrOiBTdXJ2ZXkuRXZlbnQ8XG4gICAgKHNlbmRlcjogU3VydmV5LlN1cnZleSwgb3B0aW9uczogYW55KSA9PiBhbnksXG4gICAgYW55XG4gID4gPSBuZXcgU3VydmV5LkV2ZW50PChzZW5kZXI6IFN1cnZleS5TdXJ2ZXksIG9wdGlvbnM6IGFueSkgPT4gYW55LCBhbnk+KCk7XG4gIHB1YmxpYyBvblVwZGF0ZUVsZW1lbnRBbGxvd2luZ09wdGlvbnM6IChvcHRpb25zOiBhbnkpID0+IGFueTtcbiAgY29uc3RydWN0b3IoXG4gICAganNvbk9iajogYW55ID0gbnVsbCxcbiAgICByZW5kZXJlZEVsZW1lbnQ6IGFueSA9IG51bGwsXG4gICAgY3NzOiBhbnkgPSBudWxsXG4gICkge1xuICAgIHN1cGVyKGpzb25PYmosIHJlbmRlcmVkRWxlbWVudCwgY3NzKTtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgdGhpcy5zZXREZXNpZ25Nb2RlKHRydWUpO1xuICAgIHRoaXMub25BZnRlclJlbmRlclBhZ2UuYWRkKChzZW5kZXI6IFN1cnZleS5TdXJ2ZXksIG9wdGlvbnMpID0+IHtcbiAgICAgIG9wdGlvbnMucGFnZVtcIm9uQWZ0ZXJSZW5kZXJQYWdlXCJdKG9wdGlvbnMuaHRtbEVsZW1lbnQpO1xuICAgIH0pO1xuICAgIHRoaXMuZWRpdFF1ZXN0aW9uQ2xpY2sgPSBmdW5jdGlvbigpIHtcbiAgICAgIHNlbGYub25FZGl0QnV0dG9uQ2xpY2suZmlyZShzZWxmLCBudWxsKTtcbiAgICB9O1xuICAgIHRoaXMub25VcGRhdGVRdWVzdGlvbkNzc0NsYXNzZXMuYWRkKG9uVXBkYXRlUXVlc3Rpb25Dc3NDbGFzc2VzKTtcbiAgICB0aGlzLm9uVXBkYXRlUGFuZWxDc3NDbGFzc2VzLmFkZChvblVwZGF0ZVF1ZXN0aW9uQ3NzQ2xhc3Nlcyk7XG4gIH1cbiAgcHVibGljIHVwZGF0ZUVsZW1lbnRBbGxvd2luZ09wdGlvbnMob2JqOiBTdXJ2ZXkuQmFzZSkge1xuICAgIGlmICh0aGlzLm9uVXBkYXRlRWxlbWVudEFsbG93aW5nT3B0aW9ucyAmJiBvYmpbXCJhbGxvd2luZ09wdGlvbnNcIl0pIHtcbiAgICAgIG9ialtcImFsbG93aW5nT3B0aW9uc1wiXS5vYmogPSBvYmo7XG4gICAgICB0aGlzLm9uVXBkYXRlRWxlbWVudEFsbG93aW5nT3B0aW9ucyhvYmpbXCJhbGxvd2luZ09wdGlvbnNcIl0pO1xuICAgIH1cbiAgfVxuICBwdWJsaWMgZ2V0TWVudUl0ZW1zKG9iajogU3VydmV5LkJhc2UpOiBBcnJheTxJU3VydmV5T2JqZWN0TWVudUl0ZW0+IHtcbiAgICB2YXIgaXRlbXMgPSBbXTtcbiAgICB2YXIgb3B0aW9ucyA9IHsgb2JqOiBvYmosIGl0ZW1zOiBpdGVtcyB9O1xuICAgIHRoaXMub25HZXRNZW51SXRlbXMuZmlyZSh0aGlzLCBvcHRpb25zKTtcbiAgICByZXR1cm4gb3B0aW9ucy5pdGVtcztcbiAgfVxuICBwdWJsaWMgZ2V0IHNlbGVjdGVkRWxlbWVudCgpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdGVkRWxlbWVudFZhbHVlO1xuICB9XG4gIHB1YmxpYyBzZXQgc2VsZWN0ZWRFbGVtZW50KHZhbHVlOiBhbnkpIHtcbiAgICBpZiAodmFsdWUgJiYgdmFsdWUuc2VsZWN0ZWRFbGVtZW50SW5EZXNpZ24pXG4gICAgICB2YWx1ZSA9IHZhbHVlLnNlbGVjdGVkRWxlbWVudEluRGVzaWduO1xuICAgIGlmICh2YWx1ZSA9PSB0aGlzLnNlbGVjdGVkRWxlbWVudFZhbHVlKSByZXR1cm47XG4gICAgdmFyIG9sZFZhbHVlID0gdGhpcy5zZWxlY3RlZEVsZW1lbnRWYWx1ZTtcbiAgICB0aGlzLnNlbGVjdGVkRWxlbWVudFZhbHVlID0gdmFsdWU7XG4gICAgaWYgKG9sZFZhbHVlICE9IG51bGwgJiYgb2xkVmFsdWVbXCJvblNlbGVjdGVkRWxlbWVudENoYW5nZWRcIl0pIHtcbiAgICAgIG9sZFZhbHVlW1wib25TZWxlY3RlZEVsZW1lbnRDaGFuZ2VkXCJdKCk7XG4gICAgfVxuICAgIGlmIChcbiAgICAgIHRoaXMuc2VsZWN0ZWRFbGVtZW50VmFsdWUgIT0gbnVsbCAmJlxuICAgICAgdGhpcy5zZWxlY3RlZEVsZW1lbnRWYWx1ZVtcIm9uU2VsZWN0ZWRFbGVtZW50Q2hhbmdlZFwiXVxuICAgICkge1xuICAgICAgdGhpcy5zZWxlY3RlZEVsZW1lbnRWYWx1ZVtcIm9uU2VsZWN0ZWRFbGVtZW50Q2hhbmdlZFwiXSgpO1xuICAgIH1cbiAgICB0aGlzLm9uU2VsZWN0ZWRFbGVtZW50Q2hhbmdlZC5maXJlKHRoaXMsIHtcbiAgICAgIG9sZEVsZW1lbnQ6IG9sZFZhbHVlLFxuICAgICAgbmV3RWxlbWVudDogdmFsdWVcbiAgICB9KTtcbiAgfVxuICBwdWJsaWMgZG9FbGVtZW50RG91YmxlQ2xpY2sob2JqOiBTdXJ2ZXkuQmFzZSkge1xuICAgIHRoaXMub25FbGVtZW50RG91YmxlQ2xpY2suZmlyZSh0aGlzLCB7IGVsZW1lbnQ6IG9iaiB9KTtcbiAgfVxuICBwdWJsaWMgZ2V0RWRpdG9yTG9jU3RyaW5nKHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBlZGl0b3JMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKHZhbHVlKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRTdXJ2ZXkoZWw6IGFueSk6IGFueSB7XG4gIGlmICghZWwpIHJldHVybiBudWxsO1xuICB2YXIgcmVzID0gZWxbXCJzdXJ2ZXlcIl07XG4gIGlmIChyZXMpIHJldHVybiByZXM7XG4gIHJldHVybiBlbFtcImRhdGFcIl07XG59XG5cbmZ1bmN0aW9uIHBhbmVsQmFzZU9uQ3JlYXRpbmcoc2VsZjogYW55KSB7XG4gIHNlbGYuZHJhZ0VudGVyQ291bnRlciA9IDA7XG4gIHNlbGYuZW1wdHlFbGVtZW50ID0gbnVsbDtcbiAgc2VsZi5yb3dDb3VudCA9IGtvLmNvbXB1dGVkKGZ1bmN0aW9uKCkge1xuICAgIHZhciByb3dzID0gISFzZWxmW1wia29Sb3dcIl0gPyBzZWxmW1wia29Sb3dzXCJdKCkgOiBzZWxmLnJvd3M7XG4gICAgcmV0dXJuIHJvd3MubGVuZ3RoO1xuICB9LCBzZWxmKTtcbiAgc2VsZi5yb3dDb3VudC5zdWJzY3JpYmUoZnVuY3Rpb24odmFsdWUpIHtcbiAgICBpZiAoc2VsZi5lbXB0eUVsZW1lbnQpIHtcbiAgICAgIHNlbGYuZW1wdHlFbGVtZW50LnN0eWxlLmRpc3BsYXkgPSB2YWx1ZSA+IDAgPyBcIm5vbmVcIiA6IFwiXCI7XG4gICAgfVxuICB9KTtcbn1cblxuZnVuY3Rpb24gZWxlbWVudE9uQ3JlYXRpbmcoc3VydmV5RWxlbWVudDogYW55KSB7XG4gIHN1cnZleUVsZW1lbnQuYWxsb3dpbmdPcHRpb25zID0ge1xuICAgIGFsbG93RGVsZXRlOiB0cnVlLFxuICAgIGFsbG93RWRpdDogdHJ1ZSxcbiAgICBhbGxvd0NvcHk6IHRydWUsXG4gICAgYWxsb3dBZGRUb1Rvb2xib3g6IHRydWUsXG4gICAgYWxsb3dEcmFnZ2luZzogdHJ1ZSxcbiAgICBhbGxvd0NoYW5nZVR5cGU6IHRydWUsXG4gICAgYWxsb3dTaG93SGlkZVRpdGxlOiB0cnVlLFxuICAgIGFsbG93Q2hhbmdlUmVxdWlyZWQ6IHRydWVcbiAgfTtcbiAgc3VydmV5RWxlbWVudC5kcmFnRHJvcEhlbHBlclZhbHVlID0gbnVsbDtcbiAgc3VydmV5RWxlbWVudC5kcmFnRHJvcEhlbHBlciA9IGZ1bmN0aW9uKCkge1xuICAgIGlmIChzdXJ2ZXlFbGVtZW50LmRyYWdEcm9wSGVscGVyVmFsdWUgPT0gbnVsbCkge1xuICAgICAgc3VydmV5RWxlbWVudC5kcmFnRHJvcEhlbHBlclZhbHVlID0gZ2V0U3VydmV5KHN1cnZleUVsZW1lbnQpW1xuICAgICAgICBcImRyYWdEcm9wSGVscGVyXCJcbiAgICAgIF07XG4gICAgfVxuICAgIHJldHVybiBzdXJ2ZXlFbGVtZW50LmRyYWdEcm9wSGVscGVyVmFsdWU7XG4gIH07XG4gIHN1cnZleUVsZW1lbnQucmVuZGVyZWRFbGVtZW50ID0gbnVsbDtcbiAgc3VydmV5RWxlbWVudC5rb0lzRHJhZ2dpbmcgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcbiAgc3VydmV5RWxlbWVudC5rb0lzU2VsZWN0ZWQgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcbiAgc3VydmV5RWxlbWVudC5rb0lzRHJhZ2dpbmcuc3Vic2NyaWJlKGZ1bmN0aW9uKG5ld1ZhbHVlKSB7XG4gICAgaWYgKHN1cnZleUVsZW1lbnQucmVuZGVyZWRFbGVtZW50KSB7XG4gICAgICBzdXJ2ZXlFbGVtZW50LnJlbmRlcmVkRWxlbWVudC5zdHlsZS5vcGFjaXR5ID0gbmV3VmFsdWUgPyAwLjQgOiAxO1xuICAgIH1cbiAgfSk7XG4gIHN1cnZleUVsZW1lbnQua29Jc1NlbGVjdGVkLnN1YnNjcmliZShmdW5jdGlvbihuZXdWYWx1ZSkge1xuICAgIGlmIChzdXJ2ZXlFbGVtZW50LnJlbmRlcmVkRWxlbWVudCkge1xuICAgICAgaWYgKG5ld1ZhbHVlKSB7XG4gICAgICAgIHN1cnZleUVsZW1lbnQucmVuZGVyZWRFbGVtZW50LmNsYXNzTGlzdC5hZGQoXG4gICAgICAgICAgXCJzdmRfcV9zZWxlY3RlZFwiLFxuICAgICAgICAgIFwic3ZkLW1haW4tYm9yZGVyLWNvbG9yXCJcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN1cnZleUVsZW1lbnQucmVuZGVyZWRFbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoXG4gICAgICAgICAgXCJzdmRfcV9zZWxlY3RlZFwiLFxuICAgICAgICAgIFwic3ZkLW1haW4tYm9yZGVyLWNvbG9yXCJcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVRdWVzdGlvbkRlc2lnbkl0ZW0ob2JqOiBhbnksIGl0ZW06IGFueSk6IEhUTUxMSUVsZW1lbnQge1xuICB2YXIgcmVzID0gPEhUTUxMSUVsZW1lbnQ+ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImxpXCIpO1xuICB2YXIgYnRuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImJ1dHRvblwiKTtcbiAgYnRuLmlubmVyVGV4dCA9IGl0ZW0udGV4dDtcbiAgdmFyIG9uQ2xpY2sgPSBpdGVtLm9uQ2xpY2s7XG4gIGJ0bi5vbmNsaWNrID0gZnVuY3Rpb24oKSB7XG4gICAgb25DbGljayhvYmosIGl0ZW0pO1xuICB9O1xuICBidG4uY2xhc3NOYW1lID0gXCJidG4gYnRuLXByaW1hcnkgYnRuLXNtIGJ0bi14c1wiO1xuICByZXMuYXBwZW5kQ2hpbGQoYnRuKTtcbiAgcmV0dXJuIHJlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUFmdGVyUmVuZGVySGFuZGxlcihjcmVhdG9yOiBhbnksIHN1cnZleTogU3VydmV5Rm9yRGVzaWduZXIpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGVsZW1lbnRPbkFmdGVyUmVuZGVyaW5nKFxuICAgIGRvbUVsZW1lbnQ6IGFueSxcbiAgICBzdXJ2ZXlFbGVtZW50OiBhbnksXG4gICAgaXNQYW5lbDogYm9vbGVhbixcbiAgICBkaXNhYmxlOiBib29sZWFuXG4gICkge1xuICAgIHN1cnZleUVsZW1lbnQucmVuZGVyZWRFbGVtZW50ID0gZG9tRWxlbWVudDtcbiAgICBzdXJ2ZXlFbGVtZW50LnJlbmRlcmVkRWxlbWVudC5jbGFzc0xpc3QuYWRkKFwic3ZkX3F1ZXN0aW9uXCIpO1xuICAgIGlmIChTdHlsZXNNYW5hZ2VyLmN1cnJlbnRUaGVtZSgpID09PSBcImJvb3RzdHJhcFwiKSB7XG4gICAgICBzdXJ2ZXlFbGVtZW50LnJlbmRlcmVkRWxlbWVudC5jbGFzc0xpc3QuYWRkKFwic3ZkLWRhcmstYmctY29sb3JcIik7XG4gICAgfVxuICAgIHN1cnZleUVsZW1lbnQucmVuZGVyZWRFbGVtZW50LmNsYXNzTGlzdC5hZGQoXCJzdmRfcV9kZXNpZ25fYm9yZGVyXCIpO1xuICBcbiAgICB2YXIgaXNSb3dMYXlvdXQgPVxuICAgICAgIXN1cnZleUVsZW1lbnQuZ2V0TGF5b3V0VHlwZSB8fCBzdXJ2ZXlFbGVtZW50LmdldExheW91dFR5cGUoKSA9PSBcInJvd1wiO1xuICAgIHZhciBvcHQgPSBzdXJ2ZXlFbGVtZW50LmFsbG93aW5nT3B0aW9ucztcbiAgICBvcHQuYWxsb3dDb3B5ID0gb3B0LmFsbG93Q29weSAmJiBpc1Jvd0xheW91dDtcbiAgICBvcHQuYWxsb3dBZGRUb1Rvb2xib3ggPSBvcHQuYWxsb3dBZGRUb1Rvb2xib3ggJiYgaXNSb3dMYXlvdXQ7XG4gICAgb3B0LmFsbG93Q2hhbmdlVHlwZSA9IG9wdC5hbGxvd0NoYW5nZVR5cGUgJiYgaXNSb3dMYXlvdXQ7XG4gICAgb3B0LmFsbG93U2hvd0hpZGVUaXRsZSA9IG9wdC5hbGxvd1Nob3dIaWRlVGl0bGUgJiYgaXNSb3dMYXlvdXQ7XG4gICAgb3B0LmFsbG93Q2hhbmdlUmVxdWlyZWQgPSBvcHQuYWxsb3dDaGFuZ2VSZXF1aXJlZCAmJiBpc1Jvd0xheW91dDtcbiAgXG4gICAgZ2V0U3VydmV5KHN1cnZleUVsZW1lbnQpLnVwZGF0ZUVsZW1lbnRBbGxvd2luZ09wdGlvbnMoc3VydmV5RWxlbWVudCk7XG4gICAgaWYgKHN1cnZleUVsZW1lbnQua29Jc1NlbGVjdGVkKCkpIHtcbiAgICAgIHN1cnZleUVsZW1lbnQucmVuZGVyZWRFbGVtZW50LmNsYXNzTGlzdC5hZGQoXG4gICAgICAgIFwic3ZkX3Ffc2VsZWN0ZWRcIixcbiAgICAgICAgXCJzdmQtbWFpbi1ib3JkZXItY29sb3JcIlxuICAgICAgKTtcbiAgICB9XG5cbiAgICBkb21FbGVtZW50Lm9uY2xpY2sgPSBmdW5jdGlvbihlKSB7XG4gICAgICBpZiAoIWVbXCJtYXJrRXZlbnRcIl0pIHtcbiAgICAgICAgZVtcIm1hcmtFdmVudFwiXSA9IHRydWU7XG4gICAgICAgIGlmIChzdXJ2ZXlFbGVtZW50LnBhcmVudCkge1xuICAgICAgICAgIGdldFN1cnZleShzdXJ2ZXlFbGVtZW50KVtcInNlbGVjdGVkRWxlbWVudFwiXSA9IHN1cnZleUVsZW1lbnQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuXG4gICAgZGlzYWJsZSA9IGRpc2FibGUgJiYgIShzdXJ2ZXlFbGVtZW50LmdldFR5cGUoKSA9PSBcInBhbmVsZHluYW1pY1wiKTsgLy9UT0RPXG4gICAgaWYgKGRpc2FibGUpIHtcbiAgICAgIHZhciBjaGlsZHMgPSBkb21FbGVtZW50LmNoaWxkTm9kZXM7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNoaWxkcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoY2hpbGRzW2ldLnN0eWxlKSBjaGlsZHNbaV0uc3R5bGUucG9pbnRlckV2ZW50cyA9IFwibm9uZVwiO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmKGNyZWF0b3IucmVhZE9ubHkpIHJldHVybjtcblxuICAgIHN1cnZleUVsZW1lbnQuZHJhZ0Ryb3BIZWxwZXIoKS5hdHRhY2hUb0VsZW1lbnQoZG9tRWxlbWVudCwgc3VydmV5RWxlbWVudCk7XG4gICAgZG9tRWxlbWVudC50YWJpbmRleCA9IFwiMFwiO1xuICAgIGRvbUVsZW1lbnQub25rZXl1cCA9IGZ1bmN0aW9uKGUpIHtcbiAgICAgIHZhciBhY3RpdmVFbGVtZW50ID0gISFkb2N1bWVudCAmJiBkb2N1bWVudC5hY3RpdmVFbGVtZW50O1xuICAgICAgaWYgKFxuICAgICAgICAhIWFjdGl2ZUVsZW1lbnQgJiZcbiAgICAgICAgISFhY3RpdmVFbGVtZW50W1wiZGF0YXNldFwiXSAmJlxuICAgICAgICBhY3RpdmVFbGVtZW50W1wiZGF0YXNldFwiXS5zdmRJbmZvID09PSBcImFkb3JuZXJcIlxuICAgICAgKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHZhciBjaGFyID0gZS53aGljaCB8fCBlLmtleUNvZGU7XG4gICAgICBpZiAoY2hhciA9PT0gMHgxMyB8fCBjaGFyID09PSAweDIwKSB7XG4gICAgICAgIGRvbUVsZW1lbnQuY2xpY2soKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIC8vIGVsLm9ua2V5ZG93biA9IGZ1bmN0aW9uKGUpIHtcbiAgICAvLyAgIGlmIChlLndpdGNoID09IDQ2KSBnZXRTdXJ2ZXkoc3VydmV5RWxlbWVudCkuZGVsZXRlQ3VycmVudE9iamVjdENsaWNrKCk7XG4gICAgLy8gICByZXR1cm4gdHJ1ZTtcbiAgICAvLyB9O1xuICAgIGRvbUVsZW1lbnQub25kYmxjbGljayA9IGZ1bmN0aW9uKGUpIHtcbiAgICAgIGdldFN1cnZleShzdXJ2ZXlFbGVtZW50KS5kb0VsZW1lbnREb3VibGVDbGljayhzdXJ2ZXlFbGVtZW50KTtcbiAgICB9O1xuICAgIHZhciBzZXRUYWJJbmRleCA9IGVsZW1lbnQgPT4ge1xuICAgICAgZWxlbWVudC50YWJJbmRleCA9IC0xO1xuICAgIH07XG4gICAgW1wiaW5wdXRcIiwgXCJzZWxlY3RcIiwgXCJ0ZXh0YXJlYVwiXS5mb3JFYWNoKHNlbCA9PiB7XG4gICAgICB2YXIgZWxlbWVudHMgPSBkb21FbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoc2VsKTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZWxlbWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgc2V0VGFiSW5kZXgoZWxlbWVudHNbaV0pO1xuICAgICAgfVxuICAgIH0pO1xuICBcbiAgICBhZGRBZG9ybmVyKGRvbUVsZW1lbnQsIHN1cnZleUVsZW1lbnQpO1xuICB9XG59XG5cbnZhciBhZG9ybmVyc0NvbmZpZzogeyBbaW5kZXg6IHN0cmluZ106IGFueVtdIH0gPSB7fTtcblxuZXhwb3J0IGZ1bmN0aW9uIHJlZ2lzdGVyQWRvcm5lcihuYW1lLCBhZG9ybmVyKSB7XG4gIGlmICghYWRvcm5lcnNDb25maWdbbmFtZV0pIHtcbiAgICBhZG9ybmVyc0NvbmZpZ1tuYW1lXSA9IFtdO1xuICB9XG4gIGFkb3JuZXJzQ29uZmlnW25hbWVdLnB1c2goYWRvcm5lcik7XG59XG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlQWRvcm5lcnMobmFtZXM6IHN0cmluZ1tdID0gdW5kZWZpbmVkKSB7XG4gIGlmIChuYW1lcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgKG5hbWVzIHx8IFtdKS5mb3JFYWNoKG5hbWUgPT4gZGVsZXRlIGFkb3JuZXJzQ29uZmlnW25hbWVdKTtcbiAgfSBlbHNlIHtcbiAgICBhZG9ybmVyc0NvbmZpZyA9IHt9O1xuICB9XG59XG5cbmZ1bmN0aW9uIG9uVXBkYXRlUXVlc3Rpb25Dc3NDbGFzc2VzKHN1cnZleSwgb3B0aW9ucykge1xuICB2YXIgY2xhc3NlcyA9IG9wdGlvbnMucGFuZWwgPyBvcHRpb25zLmNzc0NsYXNzZXMucGFuZWwgOiBvcHRpb25zLmNzc0NsYXNzZXM7XG4gIE9iamVjdC5rZXlzKGFkb3JuZXJzQ29uZmlnKS5mb3JFYWNoKGVsZW1lbnQgPT4ge1xuICAgIGFkb3JuZXJzQ29uZmlnW2VsZW1lbnRdLmZvckVhY2goYWRvcm5lciA9PiB7XG4gICAgICB2YXIgY2xhc3Nlc0VsZW1lbnROYW1lID0gYWRvcm5lci5nZXRFbGVtZW50TmFtZShcbiAgICAgICAgb3B0aW9ucy5xdWVzdGlvbiB8fCBvcHRpb25zLnBhbmVsXG4gICAgICApO1xuICAgICAgdmFyIGFkb3JuZXJNYXJrZXJDbGFzcyA9IGFkb3JuZXIuZ2V0TWFya2VyQ2xhc3MoXG4gICAgICAgIG9wdGlvbnMucXVlc3Rpb24gfHwgb3B0aW9ucy5wYW5lbFxuICAgICAgKTtcblxuICAgICAgY2xhc3Nlc1tjbGFzc2VzRWxlbWVudE5hbWVdID0gYXBwbHlBZG9ybmVyQ2xhc3MoXG4gICAgICAgIGNsYXNzZXNbY2xhc3Nlc0VsZW1lbnROYW1lXSxcbiAgICAgICAgYWRvcm5lck1hcmtlckNsYXNzXG4gICAgICApO1xuICAgIH0pO1xuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFwcGx5QWRvcm5lckNsYXNzKGNsYXNzZXMsIGFkb3JuZXJDbGFzcykge1xuICB2YXIgcmVzdWx0ID0gY2xhc3NlcztcblxuICBpZiAoISFhZG9ybmVyQ2xhc3MpIHtcbiAgICByZXN1bHQgPSAhIXJlc3VsdCA/IHJlc3VsdCArIFwiIFwiICsgYWRvcm5lckNsYXNzIDogYWRvcm5lckNsYXNzO1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZnVuY3Rpb24gZmlsdGVyTmVzdGVkUXVlc3Rpb25zKHJvb3RRdWVzdGlvbk5vZGUsIGVsZW1lbnRzKSB7XG4gIHZhciB0YXJnZXRFbGVtZW50cyA9IFtdO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGVsZW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHF1ZXN0aW9uRWxlbWVudCA9IGZpbmRQYXJlbnROb2RlKFwic3ZkX3F1ZXN0aW9uXCIsIGVsZW1lbnRzW2ldKTtcbiAgICBpZiAocXVlc3Rpb25FbGVtZW50ID09PSByb290UXVlc3Rpb25Ob2RlKSB7XG4gICAgICB0YXJnZXRFbGVtZW50cy5wdXNoKGVsZW1lbnRzW2ldKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRhcmdldEVsZW1lbnRzO1xufVxuXG5mdW5jdGlvbiBhZGRBZG9ybmVyKG5vZGUsIG1vZGVsKSB7XG4gIE9iamVjdC5rZXlzKGFkb3JuZXJzQ29uZmlnKS5mb3JFYWNoKGVsZW1lbnQgPT4ge1xuICAgIGFkb3JuZXJzQ29uZmlnW2VsZW1lbnRdLmZvckVhY2goYWRvcm5lciA9PiB7XG4gICAgICB2YXIgZWxlbWVudENsYXNzID0gYWRvcm5lci5nZXRNYXJrZXJDbGFzcyhtb2RlbCk7XG4gICAgICBpZiAoISFlbGVtZW50Q2xhc3MpIHtcbiAgICAgICAgdmFyIGVsZW1lbnRzID0gbm9kZS5xdWVyeVNlbGVjdG9yQWxsKFxuICAgICAgICAgIFwiLlwiICsgZWxlbWVudENsYXNzLnJlcGxhY2UoL1xccy9nLCBcIi5cIilcbiAgICAgICAgKTtcbiAgICAgICAgdmFyIHRlbXAgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbGVtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIHRlbXAucHVzaChlbGVtZW50c1tpXSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxlbWVudHMgPSB0ZW1wO1xuICAgICAgICBpZiAobm9kZS5jbGFzc05hbWUuc3BsaXQoXCIgXCIpLmluZGV4T2YoZWxlbWVudENsYXNzKSAhPT0gLTEpIHtcbiAgICAgICAgICBlbGVtZW50cy51bnNoaWZ0KG5vZGUpO1xuICAgICAgICB9XG4gICAgICAgIGVsZW1lbnRzID0gZmlsdGVyTmVzdGVkUXVlc3Rpb25zKG5vZGUsIGVsZW1lbnRzKTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGVsZW1lbnRzLmxlbmd0aCA9PT0gMCAmJlxuICAgICAgICAgIG5vZGUuY2xhc3NOYW1lLmluZGV4T2YoZWxlbWVudENsYXNzKSAhPT0gLTFcbiAgICAgICAgKSB7XG4gICAgICAgICAgZWxlbWVudHMgPSBbbm9kZV07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVsZW1lbnRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBhZG9ybmVyLmFmdGVyUmVuZGVyKGVsZW1lbnRzLCBtb2RlbCwgZ2V0U3VydmV5KG1vZGVsKS5nZXRFZGl0b3IoKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG59XG5cblN1cnZleS5QYWdlLnByb3RvdHlwZVtcIm9uQ3JlYXRpbmdcIl0gPSBmdW5jdGlvbigpIHtcbiAgcGFuZWxCYXNlT25DcmVhdGluZyh0aGlzKTtcbn07XG5cblN1cnZleS5QYWdlLnByb3RvdHlwZVtcIm9uQWZ0ZXJSZW5kZXJQYWdlXCJdID0gZnVuY3Rpb24oZWwpIHtcbiAgaWYgKCFnZXRTdXJ2ZXkodGhpcykuaXNEZXNpZ25Nb2RlKSByZXR1cm47XG4gIHZhciBzZWxmID0gdGhpcztcbiAgdmFyIGRyYWdEcm9wSGVscGVyID0gZ2V0U3VydmV5KHRoaXMpW1wiZHJhZ0Ryb3BIZWxwZXJcIl07XG4gIHRoaXMuZHJhZ0VudGVyQ291bnRlciA9IDA7XG4gIGVsLm9uZHJhZ2VudGVyID0gZnVuY3Rpb24oZSkge1xuICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICBzZWxmLmRyYWdFbnRlckNvdW50ZXIrKztcbiAgfTtcbiAgZWwub25kcmFnbGVhdmUgPSBmdW5jdGlvbihlKSB7XG4gICAgc2VsZi5kcmFnRW50ZXJDb3VudGVyLS07XG4gICAgaWYgKHNlbGYuZHJhZ0VudGVyQ291bnRlciA9PT0gMCkgZHJhZ0Ryb3BIZWxwZXIuZG9MZWF2ZVBhZ2UoZSk7XG4gIH07XG4gIGVsLm9uZHJhZ292ZXIgPSBmdW5jdGlvbihlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9O1xuICBlbC5vbmRyb3AgPSBmdW5jdGlvbihlKSB7XG4gICAgZHJhZ0Ryb3BIZWxwZXIuZG9Ecm9wKGUpO1xuICB9O1xufTtcblxuU3VydmV5LlBhbmVsLnByb3RvdHlwZVtcIm9uQ3JlYXRpbmdcIl0gPSBmdW5jdGlvbigpIHtcbiAgcGFuZWxCYXNlT25DcmVhdGluZyh0aGlzKTtcbiAgZWxlbWVudE9uQ3JlYXRpbmcodGhpcyk7XG59O1xuXG5TdXJ2ZXkuUGFuZWwucHJvdG90eXBlW1wib25TZWxlY3RlZEVsZW1lbnRDaGFuZ2VkXCJdID0gZnVuY3Rpb24oKSB7XG4gIGlmIChnZXRTdXJ2ZXkodGhpcykgPT0gbnVsbCkgcmV0dXJuO1xuICB0aGlzLmtvSXNTZWxlY3RlZChnZXRTdXJ2ZXkodGhpcylbXCJzZWxlY3RlZEVsZW1lbnRWYWx1ZVwiXSA9PSB0aGlzKTtcbn07XG5cbmlmICghIVN1cnZleVtcIkZsb3dQYW5lbFwiXSkge1xuICBTdXJ2ZXlbXCJGbG93UGFuZWxcIl0ucHJvdG90eXBlW1wib25DcmVhdGluZ1wiXSA9IGZ1bmN0aW9uKCkge1xuICAgIC8vVE9ET1xuICAgIHRoaXMucGxhY2VIb2xkZXIgPSBcIkVudGVyIGhlcmUgdGV4dCBvciBkcm9wIGEgcXVlc3Rpb25cIjtcbiAgICBlbGVtZW50T25DcmVhdGluZyh0aGlzKTtcbiAgfTtcbiAgU3VydmV5W1wiRmxvd1BhbmVsXCJdLnByb3RvdHlwZVtcIm9uU2VsZWN0ZWRFbGVtZW50Q2hhbmdlZFwiXSA9IGZ1bmN0aW9uKCkge1xuICAgIGlmIChnZXRTdXJ2ZXkodGhpcykgPT0gbnVsbCkgcmV0dXJuO1xuICAgIHRoaXMua29Jc1NlbGVjdGVkKGdldFN1cnZleSh0aGlzKVtcInNlbGVjdGVkRWxlbWVudFZhbHVlXCJdID09IHRoaXMpO1xuICB9O1xufVxuXG52YXIgcXVlc3Rpb25Qcm90b3R5cGUgPSAhIVN1cnZleVtcIlF1ZXN0aW9uQmFzZVwiXVxuICA/IFN1cnZleVtcIlF1ZXN0aW9uQmFzZVwiXS5wcm90b3R5cGVcbiAgOiBTdXJ2ZXkuUXVlc3Rpb24ucHJvdG90eXBlO1xuXG5xdWVzdGlvblByb3RvdHlwZVtcIm9uQ3JlYXRpbmdcIl0gPSBmdW5jdGlvbigpIHtcbiAgZWxlbWVudE9uQ3JlYXRpbmcodGhpcyk7XG59O1xuXG5xdWVzdGlvblByb3RvdHlwZVtcIm9uU2VsZWN0ZWRFbGVtZW50Q2hhbmdlZFwiXSA9IGZ1bmN0aW9uKCkge1xuICBpZiAoZ2V0U3VydmV5KHRoaXMpID09IG51bGwpIHJldHVybjtcbiAgdGhpcy5rb0lzU2VsZWN0ZWQoZ2V0U3VydmV5KHRoaXMpW1wic2VsZWN0ZWRFbGVtZW50VmFsdWVcIl0gPT0gdGhpcyk7XG59O1xuXG5TdXJ2ZXkuUXVlc3Rpb25TZWxlY3RCYXNlSW1wbGVtZW50b3IucHJvdG90eXBlW1wib25DcmVhdGVkXCJdID0gZnVuY3Rpb24oKSB7XG4gIHZhciBxOiBhbnkgPSB0aGlzLnF1ZXN0aW9uO1xuICB2YXIgdXBkYXRlVHJpZ2dlckZ1bmN0aW9uID0gZnVuY3Rpb24oKSB7XG4gICAgc2V0VGltZW91dCgoKSA9PiBxW1wia29FbGVtZW50VHlwZVwiXS5ub3RpZnlTdWJzY3JpYmVycygpLCAwKTtcbiAgfTtcbiAgW1xuICAgIFwiY2hvaWNlc1wiLFxuICAgIFwiaGFzT3RoZXJcIixcbiAgICBcImhhc0NvbW1lbnRcIixcbiAgICBcImhhc05vbmVcIixcbiAgICBcImhhc1NlbGVjdEFsbFwiLFxuICAgIFwiY29sQ291bnRcIlxuICBdLmZvckVhY2gocHJvcGVydHlOYW1lID0+XG4gICAgdGhpcy5xdWVzdGlvbi5yZWdpc3RlckZ1bmN0aW9uT25Qcm9wZXJ0eVZhbHVlQ2hhbmdlZChcbiAgICAgIHByb3BlcnR5TmFtZSxcbiAgICAgIHVwZGF0ZVRyaWdnZXJGdW5jdGlvblxuICAgIClcbiAgKTtcbn07XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvc3VydmV5anNPYmplY3RzLnRzIiwiaW1wb3J0ICogYXMga28gZnJvbSBcImtub2Nrb3V0XCI7XG5pbXBvcnQgKiBhcyBTdXJ2ZXkgZnJvbSBcInN1cnZleS1rbm9ja291dFwiO1xuaW1wb3J0IHsgU3VydmV5UHJvcGVydHlFZGl0b3JCYXNlIH0gZnJvbSBcIi4vcHJvcGVydHlFZGl0b3JCYXNlXCI7XG5pbXBvcnQgeyBTdXJ2ZXlQcm9wZXJ0eUVkaXRvckZhY3RvcnkgfSBmcm9tIFwiLi9wcm9wZXJ0eUVkaXRvckZhY3RvcnlcIjtcbmltcG9ydCB7IFN1cnZleVByb3BlcnR5Q29uZGl0aW9uRWRpdG9yIH0gZnJvbSBcIi4vcHJvcGVydHlDb25kaXRpb25FZGl0b3JcIjtcbmltcG9ydCB7IGVkaXRvckxvY2FsaXphdGlvbiB9IGZyb20gXCIuLi9lZGl0b3JMb2NhbGl6YXRpb25cIjtcbmltcG9ydCB7IGZvY3VzRmlyc3RDb250cm9sIH0gZnJvbSBcIi4uL3V0aWxzL3V0aWxzXCI7XG5pbXBvcnQgUk1vZGFsIGZyb20gXCJybW9kYWxcIjtcblxuZXhwb3J0IGNsYXNzIFN1cnZleVByb3BlcnR5TW9kYWxFZGl0b3JDdXN0b21XaWRnZXQge1xuICBwcml2YXRlIHN0YXRpYyBjdXN0b21XaWRnZXRJZCA9IDE7XG4gIHByaXZhdGUgc3RhdGljIGN1c3RvbVdpZGdldE5hbWUgPSBcIm1vZGFsRWRpdG9yQ3VzdG9tV2lkZ2V0XCI7XG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBqc29uOiBhbnkpIHt9XG4gIHB1YmxpYyBhZnRlclJlbmRlcihlZGl0b3I6IFN1cnZleVByb3BlcnR5TW9kYWxFZGl0b3IsIGVsOiBIVE1MRWxlbWVudCkge1xuICAgIGlmICh0aGlzLmpzb24gJiYgdGhpcy5qc29uLmFmdGVyUmVuZGVyKSB7XG4gICAgICBpZiAoIWVsLmlkKSB7XG4gICAgICAgIGVsLmlkID1cbiAgICAgICAgICBTdXJ2ZXlQcm9wZXJ0eU1vZGFsRWRpdG9yQ3VzdG9tV2lkZ2V0LmN1c3RvbVdpZGdldE5hbWUgK1xuICAgICAgICAgIFN1cnZleVByb3BlcnR5TW9kYWxFZGl0b3JDdXN0b21XaWRnZXQuY3VzdG9tV2lkZ2V0SWQ7XG4gICAgICAgIFN1cnZleVByb3BlcnR5TW9kYWxFZGl0b3JDdXN0b21XaWRnZXQuY3VzdG9tV2lkZ2V0SWQrKztcbiAgICAgIH1cbiAgICAgIHRoaXMuanNvbi5hZnRlclJlbmRlcihlZGl0b3IsIGVsKTtcbiAgICAgIGlmICh0aGlzLmpzb24uZGVzdHJveSkge1xuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgICAgIGtvLnV0aWxzLmRvbU5vZGVEaXNwb3NhbC5hZGREaXNwb3NlQ2FsbGJhY2soZWwsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHNlbGYuZGVzdHJveShlZGl0b3IsIGVsKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHB1YmxpYyBkZXN0cm95KGVkaXRvcjogU3VydmV5UHJvcGVydHlNb2RhbEVkaXRvciwgZWw6IEhUTUxFbGVtZW50KSB7XG4gICAgaWYgKHRoaXMuanNvbiAmJiB0aGlzLmpzb24uZGVzdHJveSkge1xuICAgICAgdGhpcy5qc29uLmRlc3Ryb3koZWRpdG9yLCBlbCk7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlQcm9wZXJ0eU1vZGFsRWRpdG9yIGV4dGVuZHMgU3VydmV5UHJvcGVydHlFZGl0b3JCYXNlIHtcbiAgcHJpdmF0ZSBzdGF0aWMgY3VzdG9tV2lkZ2V0cztcbiAgcHVibGljIHN0YXRpYyByZWdpc3RlckN1c3RvbVdpZGdldChlZGl0b3JUeXBlOiBzdHJpbmcsIGpzb246IGFueSkge1xuICAgIGlmICghU3VydmV5UHJvcGVydHlNb2RhbEVkaXRvci5jdXN0b21XaWRnZXRzKVxuICAgICAgU3VydmV5UHJvcGVydHlNb2RhbEVkaXRvci5jdXN0b21XaWRnZXRzID0ge307XG4gICAgU3VydmV5UHJvcGVydHlNb2RhbEVkaXRvci5jdXN0b21XaWRnZXRzW1xuICAgICAgZWRpdG9yVHlwZVxuICAgIF0gPSBuZXcgU3VydmV5UHJvcGVydHlNb2RhbEVkaXRvckN1c3RvbVdpZGdldChqc29uKTtcbiAgfVxuICBwcm90ZWN0ZWQgc3RhdGljIGlkQ291bnRlciA9IDE7XG4gIHB1YmxpYyBzdGF0aWMgZ2V0Q3VzdG9tV2lkZ2V0KFxuICAgIGVkaXRvclR5cGU6IHN0cmluZ1xuICApOiBTdXJ2ZXlQcm9wZXJ0eU1vZGFsRWRpdG9yQ3VzdG9tV2lkZ2V0IHtcbiAgICBpZiAoIVN1cnZleVByb3BlcnR5TW9kYWxFZGl0b3IuY3VzdG9tV2lkZ2V0cykgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIFN1cnZleVByb3BlcnR5TW9kYWxFZGl0b3IuY3VzdG9tV2lkZ2V0c1tlZGl0b3JUeXBlXTtcbiAgfVxuICBwcml2YXRlIGlzU2hvd2luZ01vZGFsVmFsdWU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHJpdmF0ZSBlbGVtZW50czogSFRNTEVsZW1lbnRbXTtcbiAgcHVibGljIGVkaXRpbmdPYmplY3Q6IGFueTtcbiAgcHVibGljIG9uQXBwbHlDbGljazogYW55O1xuICBwdWJsaWMgb25Pa0NsaWNrOiBhbnk7XG4gIHB1YmxpYyBvblJlc2V0Q2xpY2s6IGFueTtcbiAgcHVibGljIG9uU2hvd01vZGFsOiBhbnk7XG4gIHB1YmxpYyBvbkhpZGVNb2RhbDogYW55O1xuICBwdWJsaWMgbW9kYWxOYW1lOiBzdHJpbmc7XG4gIHB1YmxpYyBtb2RhbE5hbWVUYXJnZXQ6IHN0cmluZztcbiAga29TaG93QXBwbHlCdXR0b246IGFueTtcbiAga29UaXRsZUNhcHRpb246IGFueTtcbiAga29BZnRlclJlbmRlcjogYW55O1xuICBrb0h0bWxUb3A6IGFueTtcbiAga29IdG1sQm90dG9tOiBhbnk7XG4gIGNvbnN0cnVjdG9yKHByb3BlcnR5OiBTdXJ2ZXkuSnNvbk9iamVjdFByb3BlcnR5KSB7XG4gICAgc3VwZXIocHJvcGVydHkpO1xuICAgIHRoaXMua29UaXRsZUNhcHRpb24gPSBrby5vYnNlcnZhYmxlKFwiXCIpO1xuICAgIHRoaXMua29IdG1sVG9wID0ga28ub2JzZXJ2YWJsZShcIlwiKTtcbiAgICB0aGlzLmtvSHRtbEJvdHRvbSA9IGtvLm9ic2VydmFibGUoXCJcIik7XG4gICAgaWYgKHRoaXMucHJvcGVydHkpIHtcbiAgICAgIHRoaXMua29UaXRsZUNhcHRpb24oXG4gICAgICAgIGVkaXRvckxvY2FsaXphdGlvblxuICAgICAgICAgIC5nZXRTdHJpbmcoXCJwZS5lZGl0UHJvcGVydHlcIilcbiAgICAgICAgICBbXCJmb3JtYXRcIl0oZWRpdG9yTG9jYWxpemF0aW9uLmdldFByb3BlcnR5TmFtZSh0aGlzLnByb3BlcnR5Lm5hbWUpKVxuICAgICAgKTtcbiAgICB9XG4gICAgdGhpcy5tb2RhbE5hbWUgPVxuICAgICAgXCJtb2RlbEVkaXRvclwiICsgdGhpcy5lZGl0b3JUeXBlICsgU3VydmV5UHJvcGVydHlNb2RhbEVkaXRvci5pZENvdW50ZXI7XG4gICAgU3VydmV5UHJvcGVydHlNb2RhbEVkaXRvci5pZENvdW50ZXIrKztcbiAgICB0aGlzLm1vZGFsTmFtZVRhcmdldCA9IFwiI1wiICsgdGhpcy5tb2RhbE5hbWU7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIHRoaXMua29TaG93QXBwbHlCdXR0b24gPSBrby5vYnNlcnZhYmxlKHRydWUpO1xuXG4gICAgc2VsZi5vbkhpZGVNb2RhbCA9IGZ1bmN0aW9uKCkge307XG4gICAgc2VsZi5vbkFwcGx5Q2xpY2sgPSBmdW5jdGlvbigpIHtcbiAgICAgIHNlbGYuYXBwbHkoKTtcbiAgICB9O1xuICAgIHNlbGYub25Pa0NsaWNrID0gZnVuY3Rpb24oKSB7XG4gICAgICBzZWxmLmFwcGx5KCk7XG4gICAgICBpZiAoIXNlbGYua29IYXNFcnJvcigpKSBzZWxmLm9uSGlkZU1vZGFsKCk7XG4gICAgfTtcbiAgICBzZWxmLm9uUmVzZXRDbGljayA9IGZ1bmN0aW9uKCkge1xuICAgICAgc2VsZi51cGRhdGVWYWx1ZSgpO1xuICAgICAgc2VsZi5vbkhpZGVNb2RhbCgpO1xuICAgIH07XG4gICAgc2VsZi5vblNob3dNb2RhbCA9IGZ1bmN0aW9uKCkge1xuICAgICAgc2VsZi5iZWZvcmVTaG93KCk7XG4gICAgICB2YXIgbW9kYWwgPSBuZXcgUk1vZGFsKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3Ioc2VsZi5tb2RhbE5hbWVUYXJnZXQpLCB7XG4gICAgICAgIGJvZHlDbGFzczogXCJcIixcbiAgICAgICAgY2xvc2VUaW1lb3V0OiAxMDAsXG4gICAgICAgIGRpYWxvZ09wZW5DbGFzczogXCJhbmltYXRlZCBmYWRlSW5Eb3duXCIsXG4gICAgICAgIGZvY3VzOiBmYWxzZVxuICAgICAgfSk7XG4gICAgICBtb2RhbC5vcGVuKCk7XG5cbiAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXG4gICAgICAgIFwia2V5ZG93blwiLFxuICAgICAgICBmdW5jdGlvbihldikge1xuICAgICAgICAgIG1vZGFsLmtleWRvd24oZXYpO1xuICAgICAgICB9LFxuICAgICAgICBmYWxzZVxuICAgICAgKTtcblxuICAgICAgc2VsZi5vbkhpZGVNb2RhbCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICBzZWxmLmJlZm9yZUNsb3NlTW9kYWwoKTtcbiAgICAgICAgbW9kYWwuY2xvc2UoKTtcbiAgICAgIH07XG4gICAgICBpZiAoISF0aGlzLmVsZW1lbnRzKSB7XG4gICAgICAgIGZvY3VzRmlyc3RDb250cm9sKHRoaXMuZWxlbWVudHMpO1xuICAgICAgfVxuICAgIH07XG4gICAgc2VsZi5rb0FmdGVyUmVuZGVyID0gZnVuY3Rpb24oZWwsIGNvbikge1xuICAgICAgcmV0dXJuIHNlbGYuYWZ0ZXJSZW5kZXIoZWwsIGNvbik7XG4gICAgfTtcbiAgfVxuICBwdWJsaWMgc2V0dXAoKSB7XG4gICAgc3VwZXIuc2V0dXAoKTtcbiAgICB0aGlzLmJlZm9yZVNob3coKTtcbiAgfVxuICBwdWJsaWMgZ2V0IGlzTW9kYWwoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcHVibGljIGdldCBpc1Nob3dpbmdNb2RhbCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pc1Nob3dpbmdNb2RhbFZhbHVlO1xuICB9XG4gIHB1YmxpYyBiZWZvcmVTaG93KCkge1xuICAgIHRoaXMuaXNTaG93aW5nTW9kYWxWYWx1ZSA9IHRydWU7XG4gICAgdGhpcy51cGRhdGVWYWx1ZSgpO1xuICB9XG4gIHB1YmxpYyBiZWZvcmVDbG9zZU1vZGFsKCkge1xuICAgIHRoaXMuaXNTaG93aW5nTW9kYWxWYWx1ZSA9IGZhbHNlO1xuICB9XG4gIHByb3RlY3RlZCBvbk9wdGlvbnNDaGFuZ2VkKCkge1xuICAgIHRoaXMua29TaG93QXBwbHlCdXR0b24gPSBrby5vYnNlcnZhYmxlKFxuICAgICAgIXRoaXMub3B0aW9ucyB8fCB0aGlzLm9wdGlvbnMuc2hvd0FwcGx5QnV0dG9uSW5FZGl0b3JzXG4gICAgKTtcbiAgfVxuICBwdWJsaWMgc2V0T2JqZWN0KHZhbHVlOiBhbnkpIHtcbiAgICB0aGlzLmVkaXRpbmdPYmplY3QgPSB2YWx1ZTtcbiAgICBzdXBlci5zZXRPYmplY3QodmFsdWUpO1xuICAgIGlmICh0aGlzLm9wdGlvbnMgJiYgdGhpcy5wcm9wZXJ0eSkge1xuICAgICAgdmFyIGh0bWwgPSB0aGlzLm9wdGlvbnMub25Qcm9wZXJ0eUVkaXRvck1vZGFsU2hvd0Rlc2NyaXB0aW9uQ2FsbGJhY2soXG4gICAgICAgIHRoaXMucHJvcGVydHkubmFtZSxcbiAgICAgICAgdmFsdWVcbiAgICAgICk7XG4gICAgICBpZiAoaHRtbCkge1xuICAgICAgICBpZiAoaHRtbC50b3ApIHRoaXMua29IdG1sVG9wKGh0bWwudG9wKTtcbiAgICAgICAgaWYgKGh0bWwuYm90dG9tKSB0aGlzLmtvSHRtbEJvdHRvbShodG1sLmJvdHRvbSk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHB1YmxpYyBnZXQgaXNFZGl0YWJsZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcHJvdGVjdGVkIGFmdGVyUmVuZGVyKGVsZW1lbnRzLCBjb24pIHtcbiAgICB0aGlzLmVsZW1lbnRzID0gZWxlbWVudHM7XG4gICAgdmFyIGN1c3RvbVdpZGdldCA9IFN1cnZleVByb3BlcnR5TW9kYWxFZGl0b3IuZ2V0Q3VzdG9tV2lkZ2V0KFxuICAgICAgdGhpcy5lZGl0b3JUeXBlXG4gICAgKTtcbiAgICBpZiAoISFjdXN0b21XaWRnZXQpIHtcbiAgICAgIHZhciBlbCA9IHRoaXMuR2V0Rmlyc3ROb25UZXh0RWxlbWVudChlbGVtZW50cyk7XG4gICAgICB2YXIgdEVsID0gZWxlbWVudHNbMF07XG4gICAgICBpZiAodEVsLm5vZGVOYW1lID09IFwiI3RleHRcIikgdEVsLmRhdGEgPSBcIlwiO1xuICAgICAgdEVsID0gZWxlbWVudHNbZWxlbWVudHMubGVuZ3RoIC0gMV07XG4gICAgICBpZiAodEVsLm5vZGVOYW1lID09IFwiI3RleHRcIikgdEVsLmRhdGEgPSBcIlwiO1xuICAgICAgY3VzdG9tV2lkZ2V0LmFmdGVyUmVuZGVyKHRoaXMsIGVsKTtcbiAgICB9XG4gICAgZm9jdXNGaXJzdENvbnRyb2woZWxlbWVudHMpO1xuICB9XG4gIHByaXZhdGUgR2V0Rmlyc3ROb25UZXh0RWxlbWVudChlbGVtZW50czogYW55KSB7XG4gICAgaWYgKCFlbGVtZW50cyB8fCAhZWxlbWVudHMubGVuZ3RoKSByZXR1cm47XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbGVtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKGVsZW1lbnRzW2ldLm5vZGVOYW1lICE9IFwiI3RleHRcIiAmJiBlbGVtZW50c1tpXS5ub2RlTmFtZSAhPSBcIiNjb21tZW50XCIpXG4gICAgICAgIHJldHVybiBlbGVtZW50c1tpXTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFN1cnZleVByb3BlcnR5VGV4dEVkaXRvciBleHRlbmRzIFN1cnZleVByb3BlcnR5TW9kYWxFZGl0b3Ige1xuICBwdWJsaWMga29UZXh0VmFsdWU6IGFueTtcblxuICBjb25zdHJ1Y3Rvcihwcm9wZXJ0eTogU3VydmV5Lkpzb25PYmplY3RQcm9wZXJ0eSkge1xuICAgIHN1cGVyKHByb3BlcnR5KTtcbiAgICB0aGlzLmtvVGV4dFZhbHVlID0ga28ub2JzZXJ2YWJsZSgpO1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICB0aGlzLmtvVGV4dFZhbHVlLnN1YnNjcmliZShmdW5jdGlvbihuZXdWYWx1ZSkge1xuICAgICAgc2VsZi5vbmtvVGV4dFZhbHVlQ2hhbmdlZChuZXdWYWx1ZSk7XG4gICAgfSk7XG4gIH1cbiAgcHVibGljIGdldCBlZGl0b3JUeXBlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFwidGV4dFwiO1xuICB9XG4gIHB1YmxpYyBnZXQgaXNFZGl0YWJsZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBwdWJsaWMgZ2V0VmFsdWVUZXh0KHZhbHVlOiBhbnkpOiBzdHJpbmcge1xuICAgIGlmICghdmFsdWUpIHJldHVybiBudWxsO1xuICAgIHZhciBzdHIgPSB2YWx1ZTtcbiAgICBpZiAoc3RyLmxlbmd0aCA+IDIwKSB7XG4gICAgICBzdHIgPSBzdHIuc3Vic3RyKDAsIDIwKSArIFwiLi4uXCI7XG4gICAgfVxuICAgIHJldHVybiBzdHI7XG4gIH1cbiAgcHJvdGVjdGVkIG9ua29UZXh0VmFsdWVDaGFuZ2VkKG5ld1ZhbHVlKSB7fVxuICBwcm90ZWN0ZWQgb25WYWx1ZUNoYW5nZWQoKSB7XG4gICAgdGhpcy5rb1RleHRWYWx1ZSh0aGlzLmVkaXRpbmdWYWx1ZSk7XG4gIH1cbiAgcHJvdGVjdGVkIG9uQmVmb3JlQXBwbHkoKSB7XG4gICAgdGhpcy5zZXRWYWx1ZUNvcmUodGhpcy5rb1RleHRWYWx1ZSgpKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgU3VydmV5UHJvcGVydHlIdG1sRWRpdG9yIGV4dGVuZHMgU3VydmV5UHJvcGVydHlUZXh0RWRpdG9yIHtcbiAgY29uc3RydWN0b3IocHJvcGVydHk6IFN1cnZleS5Kc29uT2JqZWN0UHJvcGVydHkpIHtcbiAgICBzdXBlcihwcm9wZXJ0eSk7XG4gIH1cbiAgcHVibGljIGdldCBlZGl0b3JUeXBlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFwiaHRtbFwiO1xuICB9XG59XG5cblN1cnZleVByb3BlcnR5RWRpdG9yRmFjdG9yeS5yZWdpc3RlckVkaXRvcihcInRleHRcIiwgZnVuY3Rpb24oXG4gIHByb3BlcnR5OiBTdXJ2ZXkuSnNvbk9iamVjdFByb3BlcnR5XG4pOiBTdXJ2ZXlQcm9wZXJ0eUVkaXRvckJhc2Uge1xuICByZXR1cm4gbmV3IFN1cnZleVByb3BlcnR5VGV4dEVkaXRvcihwcm9wZXJ0eSk7XG59KTtcblN1cnZleVByb3BlcnR5RWRpdG9yRmFjdG9yeS5yZWdpc3RlckVkaXRvcihcImh0bWxcIiwgZnVuY3Rpb24oXG4gIHByb3BlcnR5OiBTdXJ2ZXkuSnNvbk9iamVjdFByb3BlcnR5XG4pOiBTdXJ2ZXlQcm9wZXJ0eUVkaXRvckJhc2Uge1xuICByZXR1cm4gbmV3IFN1cnZleVByb3BlcnR5SHRtbEVkaXRvcihwcm9wZXJ0eSk7XG59KTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9wcm9wZXJ0eUVkaXRvcnMvcHJvcGVydHlNb2RhbEVkaXRvci50cyIsImltcG9ydCAqIGFzIGtvIGZyb20gXCJrbm9ja291dFwiO1xuXG5mdW5jdGlvbiBnZXROdW1lcmljRnJvbVN0cmluZyhzdHI6IHN0cmluZyk6IHN0cmluZyB7XG4gIGlmICghc3RyKSByZXR1cm4gXCJcIjtcbiAgdmFyIG51bSA9IFwiXCI7XG4gIGZvciAodmFyIGkgPSBzdHIubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICBpZiAoc3RyW2ldID49IFwiMFwiICYmIHN0cltpXSA8PSBcIjlcIikge1xuICAgICAgbnVtID0gc3RyW2ldICsgbnVtO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbnVtO1xufVxuY29uc3Qgb3Bvc2l0ZVZhbHVlcyA9IHtcbiAgdHJ1ZTogXCJmYWxzZVwiLFxuICBUcnVlOiBcIkZhbHNlXCIsXG4gIFRSVUU6IFwiRkFMU0VcIixcbiAgZmFsc2U6IFwidHJ1ZVwiLFxuICBGYWxzZTogXCJUcnVlXCIsXG4gIEZBTFNFOiBcIlRSVUVcIixcbiAgeWVzOiBcIm5vXCIsXG4gIFllczogXCJOb1wiLFxuICBZRVM6IFwiTk9cIixcbiAgbm86IFwieWVzXCIsXG4gIE5vOiBcIlllc1wiLFxuICBOTzogXCJZRVNcIlxufTtcbmZ1bmN0aW9uIGdldE9wb3NpdFZhbHVlKHN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgaWYgKCEhb3Bvc2l0ZVZhbHVlc1tzdHJdKSByZXR1cm4gb3Bvc2l0ZVZhbHVlc1tzdHJdO1xuICByZXR1cm4gbnVsbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldE5leHRWYWx1ZShwcmVmaXg6IHN0cmluZywgdmFsdWVzOiBzdHJpbmdbXSkge1xuICBpZiAodmFsdWVzLmxlbmd0aCA+IDApXG4gICAgdmFyIG9wb3NpdGUgPSBnZXRPcG9zaXRWYWx1ZSh2YWx1ZXNbdmFsdWVzLmxlbmd0aCAtIDFdKTtcbiAgaWYgKG9wb3NpdGUgJiYgdmFsdWVzLmluZGV4T2Yob3Bvc2l0ZSkgPCAwKSByZXR1cm4gb3Bvc2l0ZTtcbiAgdmFyIG51bVN0ciA9IFwiXCI7XG4gIHZhciBiYXNlU3RyID0gXCJcIjtcbiAgZm9yICh2YXIgaSA9IHZhbHVlcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgIHZhciBzdHIgPSB2YWx1ZXNbaV07XG4gICAgbnVtU3RyID0gZ2V0TnVtZXJpY0Zyb21TdHJpbmcoc3RyKTtcbiAgICBpZiAoISFudW1TdHIpIHtcbiAgICAgIGJhc2VTdHIgPSBzdHIuc3Vic3RyKDAsIHN0ci5sZW5ndGggLSBudW1TdHIubGVuZ3RoKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICBpZiAoISFudW1TdHIpIHtcbiAgICB2YXIgbnVtID0gcGFyc2VJbnQobnVtU3RyKTtcbiAgICB3aGlsZSAodmFsdWVzLmluZGV4T2YoYmFzZVN0ciArIG51bSkgPiAtMSkge1xuICAgICAgbnVtKys7XG4gICAgfVxuICAgIHJldHVybiBiYXNlU3RyICsgbnVtO1xuICB9XG4gIHJldHVybiBwcmVmaXggKyAxO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZmluZFBhcmVudE5vZGUoY2xhc3NOYW1lOiBzdHJpbmcsIHNvdXJjZU5vZGU6IEhUTUxFbGVtZW50KSB7XG4gIHZhciBwYXJlbnQgPSBzb3VyY2VOb2RlO1xuICB3aGlsZSAoISFwYXJlbnQgJiYgIXBhcmVudC5jbGFzc0xpc3QuY29udGFpbnMoY2xhc3NOYW1lKSkge1xuICAgIHBhcmVudCA9IHBhcmVudC5wYXJlbnRFbGVtZW50O1xuICB9XG4gIHJldHVybiBwYXJlbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmb2N1c0ZpcnN0Q29udHJvbChyZW5kZXJlZEVsZW1lbnRzOiBIVE1MRWxlbWVudFtdKSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcmVuZGVyZWRFbGVtZW50cy5sZW5ndGg7IGkrKykge1xuICAgIGlmICh0eXBlb2YgcmVuZGVyZWRFbGVtZW50c1tpXS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgIHZhciBlbGVtZW50cyA9IDxIVE1MQ29sbGVjdGlvbk9mPEhUTUxFbGVtZW50Pj4oXG4gICAgICAgIHJlbmRlcmVkRWxlbWVudHNbaV0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcImZvcm0tY29udHJvbFwiKVxuICAgICAgKTtcbiAgICAgIGlmIChcbiAgICAgICAgZWxlbWVudHMubGVuZ3RoID09PSAwICYmXG4gICAgICAgIHJlbmRlcmVkRWxlbWVudHNbaV0uY2xhc3NOYW1lLmluZGV4T2YoXCJmb3JtLWNvbnRyb2xcIikgIT09IC0xXG4gICAgICApIHtcbiAgICAgICAgZWxlbWVudHMgPSA8YW55PltyZW5kZXJlZEVsZW1lbnRzW2ldXTtcbiAgICAgIH1cbiAgICAgIGlmIChlbGVtZW50cy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHZhciBlbGVtZW50ID0gZWxlbWVudHNbMF07XG4gICAgICAgIGlmIChlbGVtZW50LnRhZ05hbWUudG9Mb3dlckNhc2UoKSAhPT0gXCJhXCIpIHtcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IGVsZW1lbnQuZm9jdXMoeyBwcmV2ZW50U2Nyb2xsOiB0cnVlIH0pLCAxMCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxua28uYmluZGluZ0hhbmRsZXJzW1widHJ1ZWNsaWNrXCJdID0ge1xuICBpbml0OiBmdW5jdGlvbihlbGVtZW50LCB2YWx1ZUFjY2Vzc29yLCBhbGxCaW5kaW5nc0FjY2Vzc29yKSB7XG4gICAgZWxlbWVudC5vbmNsaWNrID0gKCkgPT4gdHJ1ZTtcbiAgfVxufTtcblxua28uYmluZGluZ0hhbmRsZXJzW1wia2V5MmNsaWNrXCJdID0ge1xuICBpbml0OiBmdW5jdGlvbihlbGVtZW50LCB2YWx1ZUFjY2Vzc29yLCBhbGxCaW5kaW5nc0FjY2Vzc29yKSB7XG4gICAgZWxlbWVudC5vbmtleXVwID0gZXYgPT4ge1xuICAgICAgdmFyIGNoYXIgPSBldi53aGljaCB8fCBldi5rZXlDb2RlO1xuICAgICAgaWYgKGNoYXIgPT09IDEzIHx8IGNoYXIgPT09IDMyKSB7XG4gICAgICAgIGVsZW1lbnQuY2xpY2soKTtcbiAgICAgIH0gZWxzZSBpZiAoY2hhciA9PT0gMjcpIHtcbiAgICAgICAgZWxlbWVudC5ibHVyKCk7XG4gICAgICB9XG4gICAgfTtcbiAgfVxufTtcblxua28uYmluZGluZ0hhbmRsZXJzW1wiY2xpY2tOb0ZvY3VzXCJdID0ge1xuICBpbml0OiBmdW5jdGlvbihlbGVtZW50LCB2YWx1ZUFjY2Vzc29yLCBhbGxCaW5kaW5nc0FjY2Vzc29yLCB2aWV3TW9kZWwpIHtcbiAgICBlbGVtZW50Lm9uY2xpY2sgPSBldiA9PiB7XG4gICAgICB2YWx1ZUFjY2Vzc29yKCkuY2FsbCh2aWV3TW9kZWwsIHZpZXdNb2RlbCwgZXYpO1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGVsZW1lbnQuYmx1cigpO1xuICAgICAgfSwgMSk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9O1xuICB9XG59O1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL3V0aWxzL3V0aWxzLnRzIiwiLyoqIVxuICogU29ydGFibGVcbiAqIEBhdXRob3JcdFJ1YmFYYSAgIDx0cmFzaEBydWJheGEub3JnPlxuICogQGxpY2Vuc2UgTUlUXG4gKi9cblxuKGZ1bmN0aW9uIHNvcnRhYmxlTW9kdWxlKGZhY3RvcnkpIHtcblx0XCJ1c2Ugc3RyaWN0XCI7XG5cblx0aWYgKHR5cGVvZiBkZWZpbmUgPT09IFwiZnVuY3Rpb25cIiAmJiBkZWZpbmUuYW1kKSB7XG5cdFx0ZGVmaW5lKGZhY3RvcnkpO1xuXHR9XG5cdGVsc2UgaWYgKHR5cGVvZiBtb2R1bGUgIT0gXCJ1bmRlZmluZWRcIiAmJiB0eXBlb2YgbW9kdWxlLmV4cG9ydHMgIT0gXCJ1bmRlZmluZWRcIikge1xuXHRcdG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeSgpO1xuXHR9XG5cdGVsc2Uge1xuXHRcdC8qIGpzaGludCBzdWI6dHJ1ZSAqL1xuXHRcdHdpbmRvd1tcIlNvcnRhYmxlXCJdID0gZmFjdG9yeSgpO1xuXHR9XG59KShmdW5jdGlvbiBzb3J0YWJsZUZhY3RvcnkoKSB7XG5cdFwidXNlIHN0cmljdFwiO1xuXG5cdGlmICh0eXBlb2Ygd2luZG93ID09IFwidW5kZWZpbmVkXCIgfHwgIXdpbmRvdy5kb2N1bWVudCkge1xuXHRcdHJldHVybiBmdW5jdGlvbiBzb3J0YWJsZUVycm9yKCkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiU29ydGFibGUuanMgcmVxdWlyZXMgYSB3aW5kb3cgd2l0aCBhIGRvY3VtZW50XCIpO1xuXHRcdH07XG5cdH1cblxuXHR2YXIgZHJhZ0VsLFxuXHRcdHBhcmVudEVsLFxuXHRcdGdob3N0RWwsXG5cdFx0Y2xvbmVFbCxcblx0XHRyb290RWwsXG5cdFx0bmV4dEVsLFxuXHRcdGxhc3REb3duRWwsXG5cblx0XHRzY3JvbGxFbCxcblx0XHRzY3JvbGxQYXJlbnRFbCxcblx0XHRzY3JvbGxDdXN0b21GbixcblxuXHRcdGxhc3RFbCxcblx0XHRsYXN0Q1NTLFxuXHRcdGxhc3RQYXJlbnRDU1MsXG5cblx0XHRvbGRJbmRleCxcblx0XHRuZXdJbmRleCxcblxuXHRcdGFjdGl2ZUdyb3VwLFxuXHRcdHB1dFNvcnRhYmxlLFxuXG5cdFx0YXV0b1Njcm9sbCA9IHt9LFxuXG5cdFx0dGFwRXZ0LFxuXHRcdHRvdWNoRXZ0LFxuXG5cdFx0bW92ZWQsXG5cblx0XHQvKiogQGNvbnN0ICovXG5cdFx0Ul9TUEFDRSA9IC9cXHMrL2csXG5cdFx0Ul9GTE9BVCA9IC9sZWZ0fHJpZ2h0fGlubGluZS8sXG5cblx0XHRleHBhbmRvID0gJ1NvcnRhYmxlJyArIChuZXcgRGF0ZSkuZ2V0VGltZSgpLFxuXG5cdFx0d2luID0gd2luZG93LFxuXHRcdGRvY3VtZW50ID0gd2luLmRvY3VtZW50LFxuXHRcdHBhcnNlSW50ID0gd2luLnBhcnNlSW50LFxuXG5cdFx0JCA9IHdpbi5qUXVlcnkgfHwgd2luLlplcHRvLFxuXHRcdFBvbHltZXIgPSB3aW4uUG9seW1lcixcblxuXHRcdGNhcHR1cmVNb2RlID0gZmFsc2UsXG5cblx0XHRzdXBwb3J0RHJhZ2dhYmxlID0gISEoJ2RyYWdnYWJsZScgaW4gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JykpLFxuXHRcdHN1cHBvcnRDc3NQb2ludGVyRXZlbnRzID0gKGZ1bmN0aW9uIChlbCkge1xuXHRcdFx0Ly8gZmFsc2Ugd2hlbiBJRTExXG5cdFx0XHRpZiAoISFuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9UcmlkZW50LipydlsgOl0/MTFcXC4vKSkge1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9XG5cdFx0XHRlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3gnKTtcblx0XHRcdGVsLnN0eWxlLmNzc1RleHQgPSAncG9pbnRlci1ldmVudHM6YXV0byc7XG5cdFx0XHRyZXR1cm4gZWwuc3R5bGUucG9pbnRlckV2ZW50cyA9PT0gJ2F1dG8nO1xuXHRcdH0pKCksXG5cblx0XHRfc2lsZW50ID0gZmFsc2UsXG5cblx0XHRhYnMgPSBNYXRoLmFicyxcblx0XHRtaW4gPSBNYXRoLm1pbixcblxuXHRcdHNhdmVkSW5wdXRDaGVja2VkID0gW10sXG5cdFx0dG91Y2hEcmFnT3Zlckxpc3RlbmVycyA9IFtdLFxuXG5cdFx0X2F1dG9TY3JvbGwgPSBfdGhyb3R0bGUoZnVuY3Rpb24gKC8qKkV2ZW50Ki9ldnQsIC8qKk9iamVjdCovb3B0aW9ucywgLyoqSFRNTEVsZW1lbnQqL3Jvb3RFbCkge1xuXHRcdFx0Ly8gQnVnOiBodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnL3Nob3dfYnVnLmNnaT9pZD01MDU1MjFcblx0XHRcdGlmIChyb290RWwgJiYgb3B0aW9ucy5zY3JvbGwpIHtcblx0XHRcdFx0dmFyIF90aGlzID0gcm9vdEVsW2V4cGFuZG9dLFxuXHRcdFx0XHRcdGVsLFxuXHRcdFx0XHRcdHJlY3QsXG5cdFx0XHRcdFx0c2VucyA9IG9wdGlvbnMuc2Nyb2xsU2Vuc2l0aXZpdHksXG5cdFx0XHRcdFx0c3BlZWQgPSBvcHRpb25zLnNjcm9sbFNwZWVkLFxuXG5cdFx0XHRcdFx0eCA9IGV2dC5jbGllbnRYLFxuXHRcdFx0XHRcdHkgPSBldnQuY2xpZW50WSxcblxuXHRcdFx0XHRcdHdpbldpZHRoID0gd2luZG93LmlubmVyV2lkdGgsXG5cdFx0XHRcdFx0d2luSGVpZ2h0ID0gd2luZG93LmlubmVySGVpZ2h0LFxuXG5cdFx0XHRcdFx0dngsXG5cdFx0XHRcdFx0dnksXG5cblx0XHRcdFx0XHRzY3JvbGxPZmZzZXRYLFxuXHRcdFx0XHRcdHNjcm9sbE9mZnNldFlcblx0XHRcdFx0O1xuXG5cdFx0XHRcdC8vIERlbGVjdCBzY3JvbGxFbFxuXHRcdFx0XHRpZiAoc2Nyb2xsUGFyZW50RWwgIT09IHJvb3RFbCkge1xuXHRcdFx0XHRcdHNjcm9sbEVsID0gb3B0aW9ucy5zY3JvbGw7XG5cdFx0XHRcdFx0c2Nyb2xsUGFyZW50RWwgPSByb290RWw7XG5cdFx0XHRcdFx0c2Nyb2xsQ3VzdG9tRm4gPSBvcHRpb25zLnNjcm9sbEZuO1xuXG5cdFx0XHRcdFx0aWYgKHNjcm9sbEVsID09PSB0cnVlKSB7XG5cdFx0XHRcdFx0XHRzY3JvbGxFbCA9IHJvb3RFbDtcblxuXHRcdFx0XHRcdFx0ZG8ge1xuXHRcdFx0XHRcdFx0XHRpZiAoKHNjcm9sbEVsLm9mZnNldFdpZHRoIDwgc2Nyb2xsRWwuc2Nyb2xsV2lkdGgpIHx8XG5cdFx0XHRcdFx0XHRcdFx0KHNjcm9sbEVsLm9mZnNldEhlaWdodCA8IHNjcm9sbEVsLnNjcm9sbEhlaWdodClcblx0XHRcdFx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0LyoganNoaW50IGJvc3M6dHJ1ZSAqL1xuXHRcdFx0XHRcdFx0fSB3aGlsZSAoc2Nyb2xsRWwgPSBzY3JvbGxFbC5wYXJlbnROb2RlKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoc2Nyb2xsRWwpIHtcblx0XHRcdFx0XHRlbCA9IHNjcm9sbEVsO1xuXHRcdFx0XHRcdHJlY3QgPSBzY3JvbGxFbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblx0XHRcdFx0XHR2eCA9IChhYnMocmVjdC5yaWdodCAtIHgpIDw9IHNlbnMpIC0gKGFicyhyZWN0LmxlZnQgLSB4KSA8PSBzZW5zKTtcblx0XHRcdFx0XHR2eSA9IChhYnMocmVjdC5ib3R0b20gLSB5KSA8PSBzZW5zKSAtIChhYnMocmVjdC50b3AgLSB5KSA8PSBzZW5zKTtcblx0XHRcdFx0fVxuXG5cblx0XHRcdFx0aWYgKCEodnggfHwgdnkpKSB7XG5cdFx0XHRcdFx0dnggPSAod2luV2lkdGggLSB4IDw9IHNlbnMpIC0gKHggPD0gc2Vucyk7XG5cdFx0XHRcdFx0dnkgPSAod2luSGVpZ2h0IC0geSA8PSBzZW5zKSAtICh5IDw9IHNlbnMpO1xuXG5cdFx0XHRcdFx0LyoganNoaW50IGV4cHI6dHJ1ZSAqL1xuXHRcdFx0XHRcdCh2eCB8fCB2eSkgJiYgKGVsID0gd2luKTtcblx0XHRcdFx0fVxuXG5cblx0XHRcdFx0aWYgKGF1dG9TY3JvbGwudnggIT09IHZ4IHx8IGF1dG9TY3JvbGwudnkgIT09IHZ5IHx8IGF1dG9TY3JvbGwuZWwgIT09IGVsKSB7XG5cdFx0XHRcdFx0YXV0b1Njcm9sbC5lbCA9IGVsO1xuXHRcdFx0XHRcdGF1dG9TY3JvbGwudnggPSB2eDtcblx0XHRcdFx0XHRhdXRvU2Nyb2xsLnZ5ID0gdnk7XG5cblx0XHRcdFx0XHRjbGVhckludGVydmFsKGF1dG9TY3JvbGwucGlkKTtcblxuXHRcdFx0XHRcdGlmIChlbCkge1xuXHRcdFx0XHRcdFx0YXV0b1Njcm9sbC5waWQgPSBzZXRJbnRlcnZhbChmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHRcdHNjcm9sbE9mZnNldFkgPSB2eSA/IHZ5ICogc3BlZWQgOiAwO1xuXHRcdFx0XHRcdFx0XHRzY3JvbGxPZmZzZXRYID0gdnggPyB2eCAqIHNwZWVkIDogMDtcblxuXHRcdFx0XHRcdFx0XHRpZiAoJ2Z1bmN0aW9uJyA9PT0gdHlwZW9mKHNjcm9sbEN1c3RvbUZuKSkge1xuXHRcdFx0XHRcdFx0XHRcdHJldHVybiBzY3JvbGxDdXN0b21Gbi5jYWxsKF90aGlzLCBzY3JvbGxPZmZzZXRYLCBzY3JvbGxPZmZzZXRZLCBldnQpO1xuXHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0aWYgKGVsID09PSB3aW4pIHtcblx0XHRcdFx0XHRcdFx0XHR3aW4uc2Nyb2xsVG8od2luLnBhZ2VYT2Zmc2V0ICsgc2Nyb2xsT2Zmc2V0WCwgd2luLnBhZ2VZT2Zmc2V0ICsgc2Nyb2xsT2Zmc2V0WSk7XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0ZWwuc2Nyb2xsVG9wICs9IHNjcm9sbE9mZnNldFk7XG5cdFx0XHRcdFx0XHRcdFx0ZWwuc2Nyb2xsTGVmdCArPSBzY3JvbGxPZmZzZXRYO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9LCAyNCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSwgMzApLFxuXG5cdFx0X3ByZXBhcmVHcm91cCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG5cdFx0XHRmdW5jdGlvbiB0b0ZuKHZhbHVlLCBwdWxsKSB7XG5cdFx0XHRcdGlmICh2YWx1ZSA9PT0gdm9pZCAwIHx8IHZhbHVlID09PSB0cnVlKSB7XG5cdFx0XHRcdFx0dmFsdWUgPSBncm91cC5uYW1lO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0XHRcdHJldHVybiB2YWx1ZTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRyZXR1cm4gZnVuY3Rpb24gKHRvLCBmcm9tKSB7XG5cdFx0XHRcdFx0XHR2YXIgZnJvbUdyb3VwID0gZnJvbS5vcHRpb25zLmdyb3VwLm5hbWU7XG5cblx0XHRcdFx0XHRcdHJldHVybiBwdWxsXG5cdFx0XHRcdFx0XHRcdD8gdmFsdWVcblx0XHRcdFx0XHRcdFx0OiB2YWx1ZSAmJiAodmFsdWUuam9pblxuXHRcdFx0XHRcdFx0XHRcdD8gdmFsdWUuaW5kZXhPZihmcm9tR3JvdXApID4gLTFcblx0XHRcdFx0XHRcdFx0XHQ6IChmcm9tR3JvdXAgPT0gdmFsdWUpXG5cdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHR2YXIgZ3JvdXAgPSB7fTtcblx0XHRcdHZhciBvcmlnaW5hbEdyb3VwID0gb3B0aW9ucy5ncm91cDtcblxuXHRcdFx0aWYgKCFvcmlnaW5hbEdyb3VwIHx8IHR5cGVvZiBvcmlnaW5hbEdyb3VwICE9ICdvYmplY3QnKSB7XG5cdFx0XHRcdG9yaWdpbmFsR3JvdXAgPSB7bmFtZTogb3JpZ2luYWxHcm91cH07XG5cdFx0XHR9XG5cblx0XHRcdGdyb3VwLm5hbWUgPSBvcmlnaW5hbEdyb3VwLm5hbWU7XG5cdFx0XHRncm91cC5jaGVja1B1bGwgPSB0b0ZuKG9yaWdpbmFsR3JvdXAucHVsbCwgdHJ1ZSk7XG5cdFx0XHRncm91cC5jaGVja1B1dCA9IHRvRm4ob3JpZ2luYWxHcm91cC5wdXQpO1xuXHRcdFx0Z3JvdXAucmV2ZXJ0Q2xvbmUgPSBvcmlnaW5hbEdyb3VwLnJldmVydENsb25lO1xuXG5cdFx0XHRvcHRpb25zLmdyb3VwID0gZ3JvdXA7XG5cdFx0fVxuXHQ7XG5cblxuXHQvKipcblx0ICogQGNsYXNzICBTb3J0YWJsZVxuXHQgKiBAcGFyYW0gIHtIVE1MRWxlbWVudH0gIGVsXG5cdCAqIEBwYXJhbSAge09iamVjdH0gICAgICAgW29wdGlvbnNdXG5cdCAqL1xuXHRmdW5jdGlvbiBTb3J0YWJsZShlbCwgb3B0aW9ucykge1xuXHRcdGlmICghKGVsICYmIGVsLm5vZGVUeXBlICYmIGVsLm5vZGVUeXBlID09PSAxKSkge1xuXHRcdFx0dGhyb3cgJ1NvcnRhYmxlOiBgZWxgIG11c3QgYmUgSFRNTEVsZW1lbnQsIGFuZCBub3QgJyArIHt9LnRvU3RyaW5nLmNhbGwoZWwpO1xuXHRcdH1cblxuXHRcdHRoaXMuZWwgPSBlbDsgLy8gcm9vdCBlbGVtZW50XG5cdFx0dGhpcy5vcHRpb25zID0gb3B0aW9ucyA9IF9leHRlbmQoe30sIG9wdGlvbnMpO1xuXG5cblx0XHQvLyBFeHBvcnQgaW5zdGFuY2Vcblx0XHRlbFtleHBhbmRvXSA9IHRoaXM7XG5cblx0XHQvLyBEZWZhdWx0IG9wdGlvbnNcblx0XHR2YXIgZGVmYXVsdHMgPSB7XG5cdFx0XHRncm91cDogTWF0aC5yYW5kb20oKSxcblx0XHRcdHNvcnQ6IHRydWUsXG5cdFx0XHRkaXNhYmxlZDogZmFsc2UsXG5cdFx0XHRzdG9yZTogbnVsbCxcblx0XHRcdGhhbmRsZTogbnVsbCxcblx0XHRcdHNjcm9sbDogdHJ1ZSxcblx0XHRcdHNjcm9sbFNlbnNpdGl2aXR5OiAzMCxcblx0XHRcdHNjcm9sbFNwZWVkOiAxMCxcblx0XHRcdGRyYWdnYWJsZTogL1t1b11sL2kudGVzdChlbC5ub2RlTmFtZSkgPyAnbGknIDogJz4qJyxcblx0XHRcdGdob3N0Q2xhc3M6ICdzb3J0YWJsZS1naG9zdCcsXG5cdFx0XHRjaG9zZW5DbGFzczogJ3NvcnRhYmxlLWNob3NlbicsXG5cdFx0XHRkcmFnQ2xhc3M6ICdzb3J0YWJsZS1kcmFnJyxcblx0XHRcdGlnbm9yZTogJ2EsIGltZycsXG5cdFx0XHRmaWx0ZXI6IG51bGwsXG5cdFx0XHRwcmV2ZW50T25GaWx0ZXI6IHRydWUsXG5cdFx0XHRhbmltYXRpb246IDAsXG5cdFx0XHRzZXREYXRhOiBmdW5jdGlvbiAoZGF0YVRyYW5zZmVyLCBkcmFnRWwpIHtcblx0XHRcdFx0ZGF0YVRyYW5zZmVyLnNldERhdGEoJ1RleHQnLCBkcmFnRWwudGV4dENvbnRlbnQpO1xuXHRcdFx0fSxcblx0XHRcdGRyb3BCdWJibGU6IGZhbHNlLFxuXHRcdFx0ZHJhZ292ZXJCdWJibGU6IGZhbHNlLFxuXHRcdFx0ZGF0YUlkQXR0cjogJ2RhdGEtaWQnLFxuXHRcdFx0ZGVsYXk6IDAsXG5cdFx0XHRmb3JjZUZhbGxiYWNrOiBmYWxzZSxcblx0XHRcdGZhbGxiYWNrQ2xhc3M6ICdzb3J0YWJsZS1mYWxsYmFjaycsXG5cdFx0XHRmYWxsYmFja09uQm9keTogZmFsc2UsXG5cdFx0XHRmYWxsYmFja1RvbGVyYW5jZTogMCxcblx0XHRcdGZhbGxiYWNrT2Zmc2V0OiB7eDogMCwgeTogMH1cblx0XHR9O1xuXG5cblx0XHQvLyBTZXQgZGVmYXVsdCBvcHRpb25zXG5cdFx0Zm9yICh2YXIgbmFtZSBpbiBkZWZhdWx0cykge1xuXHRcdFx0IShuYW1lIGluIG9wdGlvbnMpICYmIChvcHRpb25zW25hbWVdID0gZGVmYXVsdHNbbmFtZV0pO1xuXHRcdH1cblxuXHRcdF9wcmVwYXJlR3JvdXAob3B0aW9ucyk7XG5cblx0XHQvLyBCaW5kIGFsbCBwcml2YXRlIG1ldGhvZHNcblx0XHRmb3IgKHZhciBmbiBpbiB0aGlzKSB7XG5cdFx0XHRpZiAoZm4uY2hhckF0KDApID09PSAnXycgJiYgdHlwZW9mIHRoaXNbZm5dID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHRcdHRoaXNbZm5dID0gdGhpc1tmbl0uYmluZCh0aGlzKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBTZXR1cCBkcmFnIG1vZGVcblx0XHR0aGlzLm5hdGl2ZURyYWdnYWJsZSA9IG9wdGlvbnMuZm9yY2VGYWxsYmFjayA/IGZhbHNlIDogc3VwcG9ydERyYWdnYWJsZTtcblxuXHRcdC8vIEJpbmQgZXZlbnRzXG5cdFx0X29uKGVsLCAnbW91c2Vkb3duJywgdGhpcy5fb25UYXBTdGFydCk7XG5cdFx0X29uKGVsLCAndG91Y2hzdGFydCcsIHRoaXMuX29uVGFwU3RhcnQpO1xuXHRcdF9vbihlbCwgJ3BvaW50ZXJkb3duJywgdGhpcy5fb25UYXBTdGFydCk7XG5cblx0XHRpZiAodGhpcy5uYXRpdmVEcmFnZ2FibGUpIHtcblx0XHRcdF9vbihlbCwgJ2RyYWdvdmVyJywgdGhpcyk7XG5cdFx0XHRfb24oZWwsICdkcmFnZW50ZXInLCB0aGlzKTtcblx0XHR9XG5cblx0XHR0b3VjaERyYWdPdmVyTGlzdGVuZXJzLnB1c2godGhpcy5fb25EcmFnT3Zlcik7XG5cblx0XHQvLyBSZXN0b3JlIHNvcnRpbmdcblx0XHRvcHRpb25zLnN0b3JlICYmIHRoaXMuc29ydChvcHRpb25zLnN0b3JlLmdldCh0aGlzKSk7XG5cdH1cblxuXG5cdFNvcnRhYmxlLnByb3RvdHlwZSA9IC8qKiBAbGVuZHMgU29ydGFibGUucHJvdG90eXBlICovIHtcblx0XHRjb25zdHJ1Y3RvcjogU29ydGFibGUsXG5cblx0XHRfb25UYXBTdGFydDogZnVuY3Rpb24gKC8qKiBFdmVudHxUb3VjaEV2ZW50ICovZXZ0KSB7XG5cdFx0XHR2YXIgX3RoaXMgPSB0aGlzLFxuXHRcdFx0XHRlbCA9IHRoaXMuZWwsXG5cdFx0XHRcdG9wdGlvbnMgPSB0aGlzLm9wdGlvbnMsXG5cdFx0XHRcdHByZXZlbnRPbkZpbHRlciA9IG9wdGlvbnMucHJldmVudE9uRmlsdGVyLFxuXHRcdFx0XHR0eXBlID0gZXZ0LnR5cGUsXG5cdFx0XHRcdHRvdWNoID0gZXZ0LnRvdWNoZXMgJiYgZXZ0LnRvdWNoZXNbMF0sXG5cdFx0XHRcdHRhcmdldCA9ICh0b3VjaCB8fCBldnQpLnRhcmdldCxcblx0XHRcdFx0b3JpZ2luYWxUYXJnZXQgPSBldnQudGFyZ2V0LnNoYWRvd1Jvb3QgJiYgKGV2dC5wYXRoICYmIGV2dC5wYXRoWzBdKSB8fCB0YXJnZXQsXG5cdFx0XHRcdGZpbHRlciA9IG9wdGlvbnMuZmlsdGVyLFxuXHRcdFx0XHRzdGFydEluZGV4O1xuXG5cdFx0XHRfc2F2ZUlucHV0Q2hlY2tlZFN0YXRlKGVsKTtcblxuXG5cdFx0XHQvLyBEb24ndCB0cmlnZ2VyIHN0YXJ0IGV2ZW50IHdoZW4gYW4gZWxlbWVudCBpcyBiZWVuIGRyYWdnZWQsIG90aGVyd2lzZSB0aGUgZXZ0Lm9sZGluZGV4IGFsd2F5cyB3cm9uZyB3aGVuIHNldCBvcHRpb24uZ3JvdXAuXG5cdFx0XHRpZiAoZHJhZ0VsKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0aWYgKC9tb3VzZWRvd258cG9pbnRlcmRvd24vLnRlc3QodHlwZSkgJiYgZXZ0LmJ1dHRvbiAhPT0gMCB8fCBvcHRpb25zLmRpc2FibGVkKSB7XG5cdFx0XHRcdHJldHVybjsgLy8gb25seSBsZWZ0IGJ1dHRvbiBvciBlbmFibGVkXG5cdFx0XHR9XG5cblxuXHRcdFx0dGFyZ2V0ID0gX2Nsb3Nlc3QodGFyZ2V0LCBvcHRpb25zLmRyYWdnYWJsZSwgZWwpO1xuXG5cdFx0XHRpZiAoIXRhcmdldCkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdGlmIChsYXN0RG93bkVsID09PSB0YXJnZXQpIHtcblx0XHRcdFx0Ly8gSWdub3JpbmcgZHVwbGljYXRlIGBkb3duYFxuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdC8vIEdldCB0aGUgaW5kZXggb2YgdGhlIGRyYWdnZWQgZWxlbWVudCB3aXRoaW4gaXRzIHBhcmVudFxuXHRcdFx0c3RhcnRJbmRleCA9IF9pbmRleCh0YXJnZXQsIG9wdGlvbnMuZHJhZ2dhYmxlKTtcblxuXHRcdFx0Ly8gQ2hlY2sgZmlsdGVyXG5cdFx0XHRpZiAodHlwZW9mIGZpbHRlciA9PT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0XHRpZiAoZmlsdGVyLmNhbGwodGhpcywgZXZ0LCB0YXJnZXQsIHRoaXMpKSB7XG5cdFx0XHRcdFx0X2Rpc3BhdGNoRXZlbnQoX3RoaXMsIG9yaWdpbmFsVGFyZ2V0LCAnZmlsdGVyJywgdGFyZ2V0LCBlbCwgc3RhcnRJbmRleCk7XG5cdFx0XHRcdFx0cHJldmVudE9uRmlsdGVyICYmIGV2dC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0XHRcdHJldHVybjsgLy8gY2FuY2VsIGRuZFxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRlbHNlIGlmIChmaWx0ZXIpIHtcblx0XHRcdFx0ZmlsdGVyID0gZmlsdGVyLnNwbGl0KCcsJykuc29tZShmdW5jdGlvbiAoY3JpdGVyaWEpIHtcblx0XHRcdFx0XHRjcml0ZXJpYSA9IF9jbG9zZXN0KG9yaWdpbmFsVGFyZ2V0LCBjcml0ZXJpYS50cmltKCksIGVsKTtcblxuXHRcdFx0XHRcdGlmIChjcml0ZXJpYSkge1xuXHRcdFx0XHRcdFx0X2Rpc3BhdGNoRXZlbnQoX3RoaXMsIGNyaXRlcmlhLCAnZmlsdGVyJywgdGFyZ2V0LCBlbCwgc3RhcnRJbmRleCk7XG5cdFx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXG5cdFx0XHRcdGlmIChmaWx0ZXIpIHtcblx0XHRcdFx0XHRwcmV2ZW50T25GaWx0ZXIgJiYgZXZ0LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRcdFx0cmV0dXJuOyAvLyBjYW5jZWwgZG5kXG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0aWYgKG9wdGlvbnMuaGFuZGxlICYmICFfY2xvc2VzdChvcmlnaW5hbFRhcmdldCwgb3B0aW9ucy5oYW5kbGUsIGVsKSkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdC8vIFByZXBhcmUgYGRyYWdzdGFydGBcblx0XHRcdHRoaXMuX3ByZXBhcmVEcmFnU3RhcnQoZXZ0LCB0b3VjaCwgdGFyZ2V0LCBzdGFydEluZGV4KTtcblx0XHR9LFxuXG5cdFx0X3ByZXBhcmVEcmFnU3RhcnQ6IGZ1bmN0aW9uICgvKiogRXZlbnQgKi9ldnQsIC8qKiBUb3VjaCAqL3RvdWNoLCAvKiogSFRNTEVsZW1lbnQgKi90YXJnZXQsIC8qKiBOdW1iZXIgKi9zdGFydEluZGV4KSB7XG5cdFx0XHR2YXIgX3RoaXMgPSB0aGlzLFxuXHRcdFx0XHRlbCA9IF90aGlzLmVsLFxuXHRcdFx0XHRvcHRpb25zID0gX3RoaXMub3B0aW9ucyxcblx0XHRcdFx0b3duZXJEb2N1bWVudCA9IGVsLm93bmVyRG9jdW1lbnQsXG5cdFx0XHRcdGRyYWdTdGFydEZuO1xuXG5cdFx0XHRpZiAodGFyZ2V0ICYmICFkcmFnRWwgJiYgKHRhcmdldC5wYXJlbnROb2RlID09PSBlbCkpIHtcblx0XHRcdFx0dGFwRXZ0ID0gZXZ0O1xuXG5cdFx0XHRcdHJvb3RFbCA9IGVsO1xuXHRcdFx0XHRkcmFnRWwgPSB0YXJnZXQ7XG5cdFx0XHRcdHBhcmVudEVsID0gZHJhZ0VsLnBhcmVudE5vZGU7XG5cdFx0XHRcdG5leHRFbCA9IGRyYWdFbC5uZXh0U2libGluZztcblx0XHRcdFx0bGFzdERvd25FbCA9IHRhcmdldDtcblx0XHRcdFx0YWN0aXZlR3JvdXAgPSBvcHRpb25zLmdyb3VwO1xuXHRcdFx0XHRvbGRJbmRleCA9IHN0YXJ0SW5kZXg7XG5cblx0XHRcdFx0dGhpcy5fbGFzdFggPSAodG91Y2ggfHwgZXZ0KS5jbGllbnRYO1xuXHRcdFx0XHR0aGlzLl9sYXN0WSA9ICh0b3VjaCB8fCBldnQpLmNsaWVudFk7XG5cblx0XHRcdFx0ZHJhZ0VsLnN0eWxlWyd3aWxsLWNoYW5nZSddID0gJ3RyYW5zZm9ybSc7XG5cblx0XHRcdFx0ZHJhZ1N0YXJ0Rm4gPSBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0Ly8gRGVsYXllZCBkcmFnIGhhcyBiZWVuIHRyaWdnZXJlZFxuXHRcdFx0XHRcdC8vIHdlIGNhbiByZS1lbmFibGUgdGhlIGV2ZW50czogdG91Y2htb3ZlL21vdXNlbW92ZVxuXHRcdFx0XHRcdF90aGlzLl9kaXNhYmxlRGVsYXllZERyYWcoKTtcblxuXHRcdFx0XHRcdC8vIE1ha2UgdGhlIGVsZW1lbnQgZHJhZ2dhYmxlXG5cdFx0XHRcdFx0ZHJhZ0VsLmRyYWdnYWJsZSA9IF90aGlzLm5hdGl2ZURyYWdnYWJsZTtcblxuXHRcdFx0XHRcdC8vIENob3NlbiBpdGVtXG5cdFx0XHRcdFx0X3RvZ2dsZUNsYXNzKGRyYWdFbCwgb3B0aW9ucy5jaG9zZW5DbGFzcywgdHJ1ZSk7XG5cblx0XHRcdFx0XHQvLyBCaW5kIHRoZSBldmVudHM6IGRyYWdzdGFydC9kcmFnZW5kXG5cdFx0XHRcdFx0X3RoaXMuX3RyaWdnZXJEcmFnU3RhcnQoZXZ0LCB0b3VjaCk7XG5cblx0XHRcdFx0XHQvLyBEcmFnIHN0YXJ0IGV2ZW50XG5cdFx0XHRcdFx0X2Rpc3BhdGNoRXZlbnQoX3RoaXMsIHJvb3RFbCwgJ2Nob29zZScsIGRyYWdFbCwgcm9vdEVsLCBvbGRJbmRleCk7XG5cdFx0XHRcdH07XG5cblx0XHRcdFx0Ly8gRGlzYWJsZSBcImRyYWdnYWJsZVwiXG5cdFx0XHRcdG9wdGlvbnMuaWdub3JlLnNwbGl0KCcsJykuZm9yRWFjaChmdW5jdGlvbiAoY3JpdGVyaWEpIHtcblx0XHRcdFx0XHRfZmluZChkcmFnRWwsIGNyaXRlcmlhLnRyaW0oKSwgX2Rpc2FibGVEcmFnZ2FibGUpO1xuXHRcdFx0XHR9KTtcblxuXHRcdFx0XHRfb24ob3duZXJEb2N1bWVudCwgJ21vdXNldXAnLCBfdGhpcy5fb25Ecm9wKTtcblx0XHRcdFx0X29uKG93bmVyRG9jdW1lbnQsICd0b3VjaGVuZCcsIF90aGlzLl9vbkRyb3ApO1xuXHRcdFx0XHRfb24ob3duZXJEb2N1bWVudCwgJ3RvdWNoY2FuY2VsJywgX3RoaXMuX29uRHJvcCk7XG5cdFx0XHRcdF9vbihvd25lckRvY3VtZW50LCAncG9pbnRlcmNhbmNlbCcsIF90aGlzLl9vbkRyb3ApO1xuXHRcdFx0XHRfb24ob3duZXJEb2N1bWVudCwgJ3NlbGVjdHN0YXJ0JywgX3RoaXMpO1xuXG5cdFx0XHRcdGlmIChvcHRpb25zLmRlbGF5KSB7XG5cdFx0XHRcdFx0Ly8gSWYgdGhlIHVzZXIgbW92ZXMgdGhlIHBvaW50ZXIgb3IgbGV0IGdvIHRoZSBjbGljayBvciB0b3VjaFxuXHRcdFx0XHRcdC8vIGJlZm9yZSB0aGUgZGVsYXkgaGFzIGJlZW4gcmVhY2hlZDpcblx0XHRcdFx0XHQvLyBkaXNhYmxlIHRoZSBkZWxheWVkIGRyYWdcblx0XHRcdFx0XHRfb24ob3duZXJEb2N1bWVudCwgJ21vdXNldXAnLCBfdGhpcy5fZGlzYWJsZURlbGF5ZWREcmFnKTtcblx0XHRcdFx0XHRfb24ob3duZXJEb2N1bWVudCwgJ3RvdWNoZW5kJywgX3RoaXMuX2Rpc2FibGVEZWxheWVkRHJhZyk7XG5cdFx0XHRcdFx0X29uKG93bmVyRG9jdW1lbnQsICd0b3VjaGNhbmNlbCcsIF90aGlzLl9kaXNhYmxlRGVsYXllZERyYWcpO1xuXHRcdFx0XHRcdF9vbihvd25lckRvY3VtZW50LCAnbW91c2Vtb3ZlJywgX3RoaXMuX2Rpc2FibGVEZWxheWVkRHJhZyk7XG5cdFx0XHRcdFx0X29uKG93bmVyRG9jdW1lbnQsICd0b3VjaG1vdmUnLCBfdGhpcy5fZGlzYWJsZURlbGF5ZWREcmFnKTtcblx0XHRcdFx0XHRfb24ob3duZXJEb2N1bWVudCwgJ3BvaW50ZXJtb3ZlJywgX3RoaXMuX2Rpc2FibGVEZWxheWVkRHJhZyk7XG5cblx0XHRcdFx0XHRfdGhpcy5fZHJhZ1N0YXJ0VGltZXIgPSBzZXRUaW1lb3V0KGRyYWdTdGFydEZuLCBvcHRpb25zLmRlbGF5KTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRkcmFnU3RhcnRGbigpO1xuXHRcdFx0XHR9XG5cblxuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHRfZGlzYWJsZURlbGF5ZWREcmFnOiBmdW5jdGlvbiAoKSB7XG5cdFx0XHR2YXIgb3duZXJEb2N1bWVudCA9IHRoaXMuZWwub3duZXJEb2N1bWVudDtcblxuXHRcdFx0Y2xlYXJUaW1lb3V0KHRoaXMuX2RyYWdTdGFydFRpbWVyKTtcblx0XHRcdF9vZmYob3duZXJEb2N1bWVudCwgJ21vdXNldXAnLCB0aGlzLl9kaXNhYmxlRGVsYXllZERyYWcpO1xuXHRcdFx0X29mZihvd25lckRvY3VtZW50LCAndG91Y2hlbmQnLCB0aGlzLl9kaXNhYmxlRGVsYXllZERyYWcpO1xuXHRcdFx0X29mZihvd25lckRvY3VtZW50LCAndG91Y2hjYW5jZWwnLCB0aGlzLl9kaXNhYmxlRGVsYXllZERyYWcpO1xuXHRcdFx0X29mZihvd25lckRvY3VtZW50LCAnbW91c2Vtb3ZlJywgdGhpcy5fZGlzYWJsZURlbGF5ZWREcmFnKTtcblx0XHRcdF9vZmYob3duZXJEb2N1bWVudCwgJ3RvdWNobW92ZScsIHRoaXMuX2Rpc2FibGVEZWxheWVkRHJhZyk7XG5cdFx0XHRfb2ZmKG93bmVyRG9jdW1lbnQsICdwb2ludGVybW92ZScsIHRoaXMuX2Rpc2FibGVEZWxheWVkRHJhZyk7XG5cdFx0fSxcblxuXHRcdF90cmlnZ2VyRHJhZ1N0YXJ0OiBmdW5jdGlvbiAoLyoqIEV2ZW50ICovZXZ0LCAvKiogVG91Y2ggKi90b3VjaCkge1xuXHRcdFx0dG91Y2ggPSB0b3VjaCB8fCAoZXZ0LnBvaW50ZXJUeXBlID09ICd0b3VjaCcgPyBldnQgOiBudWxsKTtcblxuXHRcdFx0aWYgKHRvdWNoKSB7XG5cdFx0XHRcdC8vIFRvdWNoIGRldmljZSBzdXBwb3J0XG5cdFx0XHRcdHRhcEV2dCA9IHtcblx0XHRcdFx0XHR0YXJnZXQ6IGRyYWdFbCxcblx0XHRcdFx0XHRjbGllbnRYOiB0b3VjaC5jbGllbnRYLFxuXHRcdFx0XHRcdGNsaWVudFk6IHRvdWNoLmNsaWVudFlcblx0XHRcdFx0fTtcblxuXHRcdFx0XHR0aGlzLl9vbkRyYWdTdGFydCh0YXBFdnQsICd0b3VjaCcpO1xuXHRcdFx0fVxuXHRcdFx0ZWxzZSBpZiAoIXRoaXMubmF0aXZlRHJhZ2dhYmxlKSB7XG5cdFx0XHRcdHRoaXMuX29uRHJhZ1N0YXJ0KHRhcEV2dCwgdHJ1ZSk7XG5cdFx0XHR9XG5cdFx0XHRlbHNlIHtcblx0XHRcdFx0X29uKGRyYWdFbCwgJ2RyYWdlbmQnLCB0aGlzKTtcblx0XHRcdFx0X29uKHJvb3RFbCwgJ2RyYWdzdGFydCcsIHRoaXMuX29uRHJhZ1N0YXJ0KTtcblx0XHRcdH1cblxuXHRcdFx0dHJ5IHtcblx0XHRcdFx0aWYgKGRvY3VtZW50LnNlbGVjdGlvbikge1xuXHRcdFx0XHRcdC8vIFRpbWVvdXQgbmVjY2Vzc2FyeSBmb3IgSUU5XG5cdFx0XHRcdFx0c2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHRkb2N1bWVudC5zZWxlY3Rpb24uZW1wdHkoKTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR3aW5kb3cuZ2V0U2VsZWN0aW9uKCkucmVtb3ZlQWxsUmFuZ2VzKCk7XG5cdFx0XHRcdH1cblx0XHRcdH0gY2F0Y2ggKGVycikge1xuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHRfZHJhZ1N0YXJ0ZWQ6IGZ1bmN0aW9uICgpIHtcblx0XHRcdGlmIChyb290RWwgJiYgZHJhZ0VsKSB7XG5cdFx0XHRcdHZhciBvcHRpb25zID0gdGhpcy5vcHRpb25zO1xuXG5cdFx0XHRcdC8vIEFwcGx5IGVmZmVjdFxuXHRcdFx0XHRfdG9nZ2xlQ2xhc3MoZHJhZ0VsLCBvcHRpb25zLmdob3N0Q2xhc3MsIHRydWUpO1xuXHRcdFx0XHRfdG9nZ2xlQ2xhc3MoZHJhZ0VsLCBvcHRpb25zLmRyYWdDbGFzcywgZmFsc2UpO1xuXG5cdFx0XHRcdFNvcnRhYmxlLmFjdGl2ZSA9IHRoaXM7XG5cblx0XHRcdFx0Ly8gRHJhZyBzdGFydCBldmVudFxuXHRcdFx0XHRfZGlzcGF0Y2hFdmVudCh0aGlzLCByb290RWwsICdzdGFydCcsIGRyYWdFbCwgcm9vdEVsLCBvbGRJbmRleCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0aGlzLl9udWxsaW5nKCk7XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdF9lbXVsYXRlRHJhZ092ZXI6IGZ1bmN0aW9uICgpIHtcblx0XHRcdGlmICh0b3VjaEV2dCkge1xuXHRcdFx0XHRpZiAodGhpcy5fbGFzdFggPT09IHRvdWNoRXZ0LmNsaWVudFggJiYgdGhpcy5fbGFzdFkgPT09IHRvdWNoRXZ0LmNsaWVudFkpIHtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR0aGlzLl9sYXN0WCA9IHRvdWNoRXZ0LmNsaWVudFg7XG5cdFx0XHRcdHRoaXMuX2xhc3RZID0gdG91Y2hFdnQuY2xpZW50WTtcblxuXHRcdFx0XHRpZiAoIXN1cHBvcnRDc3NQb2ludGVyRXZlbnRzKSB7XG5cdFx0XHRcdFx0X2NzcyhnaG9zdEVsLCAnZGlzcGxheScsICdub25lJyk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR2YXIgdGFyZ2V0ID0gZG9jdW1lbnQuZWxlbWVudEZyb21Qb2ludCh0b3VjaEV2dC5jbGllbnRYLCB0b3VjaEV2dC5jbGllbnRZKSxcblx0XHRcdFx0XHRwYXJlbnQgPSB0YXJnZXQsXG5cdFx0XHRcdFx0aSA9IHRvdWNoRHJhZ092ZXJMaXN0ZW5lcnMubGVuZ3RoO1xuXG5cdFx0XHRcdGlmIChwYXJlbnQpIHtcblx0XHRcdFx0XHRkbyB7XG5cdFx0XHRcdFx0XHRpZiAocGFyZW50W2V4cGFuZG9dKSB7XG5cdFx0XHRcdFx0XHRcdHdoaWxlIChpLS0pIHtcblx0XHRcdFx0XHRcdFx0XHR0b3VjaERyYWdPdmVyTGlzdGVuZXJzW2ldKHtcblx0XHRcdFx0XHRcdFx0XHRcdGNsaWVudFg6IHRvdWNoRXZ0LmNsaWVudFgsXG5cdFx0XHRcdFx0XHRcdFx0XHRjbGllbnRZOiB0b3VjaEV2dC5jbGllbnRZLFxuXHRcdFx0XHRcdFx0XHRcdFx0dGFyZ2V0OiB0YXJnZXQsXG5cdFx0XHRcdFx0XHRcdFx0XHRyb290RWw6IHBhcmVudFxuXHRcdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdHRhcmdldCA9IHBhcmVudDsgLy8gc3RvcmUgbGFzdCBlbGVtZW50XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdC8qIGpzaGludCBib3NzOnRydWUgKi9cblx0XHRcdFx0XHR3aGlsZSAocGFyZW50ID0gcGFyZW50LnBhcmVudE5vZGUpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKCFzdXBwb3J0Q3NzUG9pbnRlckV2ZW50cykge1xuXHRcdFx0XHRcdF9jc3MoZ2hvc3RFbCwgJ2Rpc3BsYXknLCAnJyk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXG5cblx0XHRfb25Ub3VjaE1vdmU6IGZ1bmN0aW9uICgvKipUb3VjaEV2ZW50Ki9ldnQpIHtcblx0XHRcdGlmICh0YXBFdnQpIHtcblx0XHRcdFx0dmFyXHRvcHRpb25zID0gdGhpcy5vcHRpb25zLFxuXHRcdFx0XHRcdGZhbGxiYWNrVG9sZXJhbmNlID0gb3B0aW9ucy5mYWxsYmFja1RvbGVyYW5jZSxcblx0XHRcdFx0XHRmYWxsYmFja09mZnNldCA9IG9wdGlvbnMuZmFsbGJhY2tPZmZzZXQsXG5cdFx0XHRcdFx0dG91Y2ggPSBldnQudG91Y2hlcyA/IGV2dC50b3VjaGVzWzBdIDogZXZ0LFxuXHRcdFx0XHRcdGR4ID0gKHRvdWNoLmNsaWVudFggLSB0YXBFdnQuY2xpZW50WCkgKyBmYWxsYmFja09mZnNldC54LFxuXHRcdFx0XHRcdGR5ID0gKHRvdWNoLmNsaWVudFkgLSB0YXBFdnQuY2xpZW50WSkgKyBmYWxsYmFja09mZnNldC55LFxuXHRcdFx0XHRcdHRyYW5zbGF0ZTNkID0gZXZ0LnRvdWNoZXMgPyAndHJhbnNsYXRlM2QoJyArIGR4ICsgJ3B4LCcgKyBkeSArICdweCwwKScgOiAndHJhbnNsYXRlKCcgKyBkeCArICdweCwnICsgZHkgKyAncHgpJztcblxuXHRcdFx0XHQvLyBvbmx5IHNldCB0aGUgc3RhdHVzIHRvIGRyYWdnaW5nLCB3aGVuIHdlIGFyZSBhY3R1YWxseSBkcmFnZ2luZ1xuXHRcdFx0XHRpZiAoIVNvcnRhYmxlLmFjdGl2ZSkge1xuXHRcdFx0XHRcdGlmIChmYWxsYmFja1RvbGVyYW5jZSAmJlxuXHRcdFx0XHRcdFx0bWluKGFicyh0b3VjaC5jbGllbnRYIC0gdGhpcy5fbGFzdFgpLCBhYnModG91Y2guY2xpZW50WSAtIHRoaXMuX2xhc3RZKSkgPCBmYWxsYmFja1RvbGVyYW5jZVxuXHRcdFx0XHRcdCkge1xuXHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHRoaXMuX2RyYWdTdGFydGVkKCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBhcyB3ZWxsIGFzIGNyZWF0aW5nIHRoZSBnaG9zdCBlbGVtZW50IG9uIHRoZSBkb2N1bWVudCBib2R5XG5cdFx0XHRcdHRoaXMuX2FwcGVuZEdob3N0KCk7XG5cblx0XHRcdFx0bW92ZWQgPSB0cnVlO1xuXHRcdFx0XHR0b3VjaEV2dCA9IHRvdWNoO1xuXG5cdFx0XHRcdF9jc3MoZ2hvc3RFbCwgJ3dlYmtpdFRyYW5zZm9ybScsIHRyYW5zbGF0ZTNkKTtcblx0XHRcdFx0X2NzcyhnaG9zdEVsLCAnbW96VHJhbnNmb3JtJywgdHJhbnNsYXRlM2QpO1xuXHRcdFx0XHRfY3NzKGdob3N0RWwsICdtc1RyYW5zZm9ybScsIHRyYW5zbGF0ZTNkKTtcblx0XHRcdFx0X2NzcyhnaG9zdEVsLCAndHJhbnNmb3JtJywgdHJhbnNsYXRlM2QpO1xuXG5cdFx0XHRcdGV2dC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHRfYXBwZW5kR2hvc3Q6IGZ1bmN0aW9uICgpIHtcblx0XHRcdGlmICghZ2hvc3RFbCkge1xuXHRcdFx0XHR2YXIgcmVjdCA9IGRyYWdFbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxcblx0XHRcdFx0XHRjc3MgPSBfY3NzKGRyYWdFbCksXG5cdFx0XHRcdFx0b3B0aW9ucyA9IHRoaXMub3B0aW9ucyxcblx0XHRcdFx0XHRnaG9zdFJlY3Q7XG5cblx0XHRcdFx0Z2hvc3RFbCA9IGRyYWdFbC5jbG9uZU5vZGUodHJ1ZSk7XG5cblx0XHRcdFx0X3RvZ2dsZUNsYXNzKGdob3N0RWwsIG9wdGlvbnMuZ2hvc3RDbGFzcywgZmFsc2UpO1xuXHRcdFx0XHRfdG9nZ2xlQ2xhc3MoZ2hvc3RFbCwgb3B0aW9ucy5mYWxsYmFja0NsYXNzLCB0cnVlKTtcblx0XHRcdFx0X3RvZ2dsZUNsYXNzKGdob3N0RWwsIG9wdGlvbnMuZHJhZ0NsYXNzLCB0cnVlKTtcblxuXHRcdFx0XHRfY3NzKGdob3N0RWwsICd0b3AnLCByZWN0LnRvcCAtIHBhcnNlSW50KGNzcy5tYXJnaW5Ub3AsIDEwKSk7XG5cdFx0XHRcdF9jc3MoZ2hvc3RFbCwgJ2xlZnQnLCByZWN0LmxlZnQgLSBwYXJzZUludChjc3MubWFyZ2luTGVmdCwgMTApKTtcblx0XHRcdFx0X2NzcyhnaG9zdEVsLCAnd2lkdGgnLCByZWN0LndpZHRoKTtcblx0XHRcdFx0X2NzcyhnaG9zdEVsLCAnaGVpZ2h0JywgcmVjdC5oZWlnaHQpO1xuXHRcdFx0XHRfY3NzKGdob3N0RWwsICdvcGFjaXR5JywgJzAuOCcpO1xuXHRcdFx0XHRfY3NzKGdob3N0RWwsICdwb3NpdGlvbicsICdmaXhlZCcpO1xuXHRcdFx0XHRfY3NzKGdob3N0RWwsICd6SW5kZXgnLCAnMTAwMDAwJyk7XG5cdFx0XHRcdF9jc3MoZ2hvc3RFbCwgJ3BvaW50ZXJFdmVudHMnLCAnbm9uZScpO1xuXG5cdFx0XHRcdG9wdGlvbnMuZmFsbGJhY2tPbkJvZHkgJiYgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChnaG9zdEVsKSB8fCByb290RWwuYXBwZW5kQ2hpbGQoZ2hvc3RFbCk7XG5cblx0XHRcdFx0Ly8gRml4aW5nIGRpbWVuc2lvbnMuXG5cdFx0XHRcdGdob3N0UmVjdCA9IGdob3N0RWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cdFx0XHRcdF9jc3MoZ2hvc3RFbCwgJ3dpZHRoJywgcmVjdC53aWR0aCAqIDIgLSBnaG9zdFJlY3Qud2lkdGgpO1xuXHRcdFx0XHRfY3NzKGdob3N0RWwsICdoZWlnaHQnLCByZWN0LmhlaWdodCAqIDIgLSBnaG9zdFJlY3QuaGVpZ2h0KTtcblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0X29uRHJhZ1N0YXJ0OiBmdW5jdGlvbiAoLyoqRXZlbnQqL2V2dCwgLyoqYm9vbGVhbiovdXNlRmFsbGJhY2spIHtcblx0XHRcdHZhciBkYXRhVHJhbnNmZXIgPSBldnQuZGF0YVRyYW5zZmVyLFxuXHRcdFx0XHRvcHRpb25zID0gdGhpcy5vcHRpb25zO1xuXG5cdFx0XHR0aGlzLl9vZmZVcEV2ZW50cygpO1xuXG5cdFx0XHRpZiAoYWN0aXZlR3JvdXAuY2hlY2tQdWxsKHRoaXMsIHRoaXMsIGRyYWdFbCwgZXZ0KSkge1xuXHRcdFx0XHRjbG9uZUVsID0gX2Nsb25lKGRyYWdFbCk7XG5cblx0XHRcdFx0Y2xvbmVFbC5kcmFnZ2FibGUgPSBmYWxzZTtcblx0XHRcdFx0Y2xvbmVFbC5zdHlsZVsnd2lsbC1jaGFuZ2UnXSA9ICcnO1xuXG5cdFx0XHRcdF9jc3MoY2xvbmVFbCwgJ2Rpc3BsYXknLCAnbm9uZScpO1xuXHRcdFx0XHRfdG9nZ2xlQ2xhc3MoY2xvbmVFbCwgdGhpcy5vcHRpb25zLmNob3NlbkNsYXNzLCBmYWxzZSk7XG5cblx0XHRcdFx0cm9vdEVsLmluc2VydEJlZm9yZShjbG9uZUVsLCBkcmFnRWwpO1xuXHRcdFx0XHRfZGlzcGF0Y2hFdmVudCh0aGlzLCByb290RWwsICdjbG9uZScsIGRyYWdFbCk7XG5cdFx0XHR9XG5cblx0XHRcdF90b2dnbGVDbGFzcyhkcmFnRWwsIG9wdGlvbnMuZHJhZ0NsYXNzLCB0cnVlKTtcblxuXHRcdFx0aWYgKHVzZUZhbGxiYWNrKSB7XG5cdFx0XHRcdGlmICh1c2VGYWxsYmFjayA9PT0gJ3RvdWNoJykge1xuXHRcdFx0XHRcdC8vIEJpbmQgdG91Y2ggZXZlbnRzXG5cdFx0XHRcdFx0X29uKGRvY3VtZW50LCAndG91Y2htb3ZlJywgdGhpcy5fb25Ub3VjaE1vdmUpO1xuXHRcdFx0XHRcdF9vbihkb2N1bWVudCwgJ3RvdWNoZW5kJywgdGhpcy5fb25Ecm9wKTtcblx0XHRcdFx0XHRfb24oZG9jdW1lbnQsICd0b3VjaGNhbmNlbCcsIHRoaXMuX29uRHJvcCk7XG5cdFx0XHRcdFx0X29uKGRvY3VtZW50LCAncG9pbnRlcm1vdmUnLCB0aGlzLl9vblRvdWNoTW92ZSk7XG5cdFx0XHRcdFx0X29uKGRvY3VtZW50LCAncG9pbnRlcnVwJywgdGhpcy5fb25Ecm9wKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHQvLyBPbGQgYnJ3b3NlclxuXHRcdFx0XHRcdF9vbihkb2N1bWVudCwgJ21vdXNlbW92ZScsIHRoaXMuX29uVG91Y2hNb3ZlKTtcblx0XHRcdFx0XHRfb24oZG9jdW1lbnQsICdtb3VzZXVwJywgdGhpcy5fb25Ecm9wKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHRoaXMuX2xvb3BJZCA9IHNldEludGVydmFsKHRoaXMuX2VtdWxhdGVEcmFnT3ZlciwgNTApO1xuXHRcdFx0fVxuXHRcdFx0ZWxzZSB7XG5cdFx0XHRcdGlmIChkYXRhVHJhbnNmZXIpIHtcblx0XHRcdFx0XHRkYXRhVHJhbnNmZXIuZWZmZWN0QWxsb3dlZCA9ICdtb3ZlJztcblx0XHRcdFx0XHRvcHRpb25zLnNldERhdGEgJiYgb3B0aW9ucy5zZXREYXRhLmNhbGwodGhpcywgZGF0YVRyYW5zZmVyLCBkcmFnRWwpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0X29uKGRvY3VtZW50LCAnZHJvcCcsIHRoaXMpO1xuXHRcdFx0XHRzZXRUaW1lb3V0KHRoaXMuX2RyYWdTdGFydGVkLCAwKTtcblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0X29uRHJhZ092ZXI6IGZ1bmN0aW9uICgvKipFdmVudCovZXZ0KSB7XG5cdFx0XHR2YXIgZWwgPSB0aGlzLmVsLFxuXHRcdFx0XHR0YXJnZXQsXG5cdFx0XHRcdGRyYWdSZWN0LFxuXHRcdFx0XHR0YXJnZXRSZWN0LFxuXHRcdFx0XHRyZXZlcnQsXG5cdFx0XHRcdG9wdGlvbnMgPSB0aGlzLm9wdGlvbnMsXG5cdFx0XHRcdGdyb3VwID0gb3B0aW9ucy5ncm91cCxcblx0XHRcdFx0YWN0aXZlU29ydGFibGUgPSBTb3J0YWJsZS5hY3RpdmUsXG5cdFx0XHRcdGlzT3duZXIgPSAoYWN0aXZlR3JvdXAgPT09IGdyb3VwKSxcblx0XHRcdFx0aXNNb3ZpbmdCZXR3ZWVuU29ydGFibGUgPSBmYWxzZSxcblx0XHRcdFx0Y2FuU29ydCA9IG9wdGlvbnMuc29ydDtcblxuXHRcdFx0aWYgKGV2dC5wcmV2ZW50RGVmYXVsdCAhPT0gdm9pZCAwKSB7XG5cdFx0XHRcdGV2dC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0XHQhb3B0aW9ucy5kcmFnb3ZlckJ1YmJsZSAmJiBldnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChkcmFnRWwuYW5pbWF0ZWQpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHRtb3ZlZCA9IHRydWU7XG5cblx0XHRcdGlmIChhY3RpdmVTb3J0YWJsZSAmJiAhb3B0aW9ucy5kaXNhYmxlZCAmJlxuXHRcdFx0XHQoaXNPd25lclxuXHRcdFx0XHRcdD8gY2FuU29ydCB8fCAocmV2ZXJ0ID0gIXJvb3RFbC5jb250YWlucyhkcmFnRWwpKSAvLyBSZXZlcnRpbmcgaXRlbSBpbnRvIHRoZSBvcmlnaW5hbCBsaXN0XG5cdFx0XHRcdFx0OiAoXG5cdFx0XHRcdFx0XHRwdXRTb3J0YWJsZSA9PT0gdGhpcyB8fFxuXHRcdFx0XHRcdFx0KFxuXHRcdFx0XHRcdFx0XHQoYWN0aXZlU29ydGFibGUubGFzdFB1bGxNb2RlID0gYWN0aXZlR3JvdXAuY2hlY2tQdWxsKHRoaXMsIGFjdGl2ZVNvcnRhYmxlLCBkcmFnRWwsIGV2dCkpICYmXG5cdFx0XHRcdFx0XHRcdGdyb3VwLmNoZWNrUHV0KHRoaXMsIGFjdGl2ZVNvcnRhYmxlLCBkcmFnRWwsIGV2dClcblx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHQpXG5cdFx0XHRcdCkgJiZcblx0XHRcdFx0KGV2dC5yb290RWwgPT09IHZvaWQgMCB8fCBldnQucm9vdEVsID09PSB0aGlzLmVsKSAvLyB0b3VjaCBmYWxsYmFja1xuXHRcdFx0KSB7XG5cdFx0XHRcdC8vIFNtYXJ0IGF1dG8tc2Nyb2xsaW5nXG5cdFx0XHRcdF9hdXRvU2Nyb2xsKGV2dCwgb3B0aW9ucywgdGhpcy5lbCk7XG5cblx0XHRcdFx0aWYgKF9zaWxlbnQpIHtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR0YXJnZXQgPSBfY2xvc2VzdChldnQudGFyZ2V0LCBvcHRpb25zLmRyYWdnYWJsZSwgZWwpO1xuXHRcdFx0XHRkcmFnUmVjdCA9IGRyYWdFbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuXHRcdFx0XHRpZiAocHV0U29ydGFibGUgIT09IHRoaXMpIHtcblx0XHRcdFx0XHRwdXRTb3J0YWJsZSA9IHRoaXM7XG5cdFx0XHRcdFx0aXNNb3ZpbmdCZXR3ZWVuU29ydGFibGUgPSB0cnVlO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKHJldmVydCkge1xuXHRcdFx0XHRcdF9jbG9uZUhpZGUoYWN0aXZlU29ydGFibGUsIHRydWUpO1xuXHRcdFx0XHRcdHBhcmVudEVsID0gcm9vdEVsOyAvLyBhY3R1YWxpemF0aW9uXG5cblx0XHRcdFx0XHRpZiAoY2xvbmVFbCB8fCBuZXh0RWwpIHtcblx0XHRcdFx0XHRcdHJvb3RFbC5pbnNlcnRCZWZvcmUoZHJhZ0VsLCBjbG9uZUVsIHx8IG5leHRFbCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGVsc2UgaWYgKCFjYW5Tb3J0KSB7XG5cdFx0XHRcdFx0XHRyb290RWwuYXBwZW5kQ2hpbGQoZHJhZ0VsKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblxuXG5cdFx0XHRcdGlmICgoZWwuY2hpbGRyZW4ubGVuZ3RoID09PSAwKSB8fCAoZWwuY2hpbGRyZW5bMF0gPT09IGdob3N0RWwpIHx8XG5cdFx0XHRcdFx0KGVsID09PSBldnQudGFyZ2V0KSAmJiAoX2dob3N0SXNMYXN0KGVsLCBldnQpKVxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHQvL2Fzc2lnbiB0YXJnZXQgb25seSBpZiBjb25kaXRpb24gaXMgdHJ1ZVxuXHRcdFx0XHRcdGlmIChlbC5jaGlsZHJlbi5sZW5ndGggIT09IDAgJiYgZWwuY2hpbGRyZW5bMF0gIT09IGdob3N0RWwgJiYgZWwgPT09IGV2dC50YXJnZXQpIHtcblx0XHRcdFx0XHRcdHRhcmdldCA9IGVsLmxhc3RFbGVtZW50Q2hpbGQ7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aWYgKHRhcmdldCkge1xuXHRcdFx0XHRcdFx0aWYgKHRhcmdldC5hbmltYXRlZCkge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdHRhcmdldFJlY3QgPSB0YXJnZXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0X2Nsb25lSGlkZShhY3RpdmVTb3J0YWJsZSwgaXNPd25lcik7XG5cblx0XHRcdFx0XHRpZiAoX29uTW92ZShyb290RWwsIGVsLCBkcmFnRWwsIGRyYWdSZWN0LCB0YXJnZXQsIHRhcmdldFJlY3QsIGV2dCkgIT09IGZhbHNlKSB7XG5cdFx0XHRcdFx0XHRpZiAoIWRyYWdFbC5jb250YWlucyhlbCkpIHtcblx0XHRcdFx0XHRcdFx0ZWwuYXBwZW5kQ2hpbGQoZHJhZ0VsKTtcblx0XHRcdFx0XHRcdFx0cGFyZW50RWwgPSBlbDsgLy8gYWN0dWFsaXphdGlvblxuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHR0aGlzLl9hbmltYXRlKGRyYWdSZWN0LCBkcmFnRWwpO1xuXHRcdFx0XHRcdFx0dGFyZ2V0ICYmIHRoaXMuX2FuaW1hdGUodGFyZ2V0UmVjdCwgdGFyZ2V0KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0ZWxzZSBpZiAodGFyZ2V0ICYmICF0YXJnZXQuYW5pbWF0ZWQgJiYgdGFyZ2V0ICE9PSBkcmFnRWwgJiYgKHRhcmdldC5wYXJlbnROb2RlW2V4cGFuZG9dICE9PSB2b2lkIDApKSB7XG5cdFx0XHRcdFx0aWYgKGxhc3RFbCAhPT0gdGFyZ2V0KSB7XG5cdFx0XHRcdFx0XHRsYXN0RWwgPSB0YXJnZXQ7XG5cdFx0XHRcdFx0XHRsYXN0Q1NTID0gX2Nzcyh0YXJnZXQpO1xuXHRcdFx0XHRcdFx0bGFzdFBhcmVudENTUyA9IF9jc3ModGFyZ2V0LnBhcmVudE5vZGUpO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHRhcmdldFJlY3QgPSB0YXJnZXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cblx0XHRcdFx0XHR2YXIgd2lkdGggPSB0YXJnZXRSZWN0LnJpZ2h0IC0gdGFyZ2V0UmVjdC5sZWZ0LFxuXHRcdFx0XHRcdFx0aGVpZ2h0ID0gdGFyZ2V0UmVjdC5ib3R0b20gLSB0YXJnZXRSZWN0LnRvcCxcblx0XHRcdFx0XHRcdGZsb2F0aW5nID0gUl9GTE9BVC50ZXN0KGxhc3RDU1MuY3NzRmxvYXQgKyBsYXN0Q1NTLmRpc3BsYXkpXG5cdFx0XHRcdFx0XHRcdHx8IChsYXN0UGFyZW50Q1NTLmRpc3BsYXkgPT0gJ2ZsZXgnICYmIGxhc3RQYXJlbnRDU1NbJ2ZsZXgtZGlyZWN0aW9uJ10uaW5kZXhPZigncm93JykgPT09IDApLFxuXHRcdFx0XHRcdFx0aXNXaWRlID0gKHRhcmdldC5vZmZzZXRXaWR0aCA+IGRyYWdFbC5vZmZzZXRXaWR0aCksXG5cdFx0XHRcdFx0XHRpc0xvbmcgPSAodGFyZ2V0Lm9mZnNldEhlaWdodCA+IGRyYWdFbC5vZmZzZXRIZWlnaHQpLFxuXHRcdFx0XHRcdFx0aGFsZndheSA9IChmbG9hdGluZyA/IChldnQuY2xpZW50WCAtIHRhcmdldFJlY3QubGVmdCkgLyB3aWR0aCA6IChldnQuY2xpZW50WSAtIHRhcmdldFJlY3QudG9wKSAvIGhlaWdodCkgPiAwLjUsXG5cdFx0XHRcdFx0XHRuZXh0U2libGluZyA9IHRhcmdldC5uZXh0RWxlbWVudFNpYmxpbmcsXG5cdFx0XHRcdFx0XHRhZnRlciA9IGZhbHNlXG5cdFx0XHRcdFx0O1xuXG5cdFx0XHRcdFx0aWYgKGZsb2F0aW5nKSB7XG5cdFx0XHRcdFx0XHR2YXIgZWxUb3AgPSBkcmFnRWwub2Zmc2V0VG9wLFxuXHRcdFx0XHRcdFx0XHR0Z1RvcCA9IHRhcmdldC5vZmZzZXRUb3A7XG5cblx0XHRcdFx0XHRcdGlmIChlbFRvcCA9PT0gdGdUb3ApIHtcblx0XHRcdFx0XHRcdFx0YWZ0ZXIgPSAodGFyZ2V0LnByZXZpb3VzRWxlbWVudFNpYmxpbmcgPT09IGRyYWdFbCkgJiYgIWlzV2lkZSB8fCBoYWxmd2F5ICYmIGlzV2lkZTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGVsc2UgaWYgKHRhcmdldC5wcmV2aW91c0VsZW1lbnRTaWJsaW5nID09PSBkcmFnRWwgfHwgZHJhZ0VsLnByZXZpb3VzRWxlbWVudFNpYmxpbmcgPT09IHRhcmdldCkge1xuXHRcdFx0XHRcdFx0XHRhZnRlciA9IChldnQuY2xpZW50WSAtIHRhcmdldFJlY3QudG9wKSAvIGhlaWdodCA+IDAuNTtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdGFmdGVyID0gdGdUb3AgPiBlbFRvcDtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoIWlzTW92aW5nQmV0d2VlblNvcnRhYmxlKSB7XG5cdFx0XHRcdFx0XHRhZnRlciA9IChuZXh0U2libGluZyAhPT0gZHJhZ0VsKSAmJiAhaXNMb25nIHx8IGhhbGZ3YXkgJiYgaXNMb25nO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHZhciBtb3ZlVmVjdG9yID0gX29uTW92ZShyb290RWwsIGVsLCBkcmFnRWwsIGRyYWdSZWN0LCB0YXJnZXQsIHRhcmdldFJlY3QsIGV2dCwgYWZ0ZXIpO1xuXG5cdFx0XHRcdFx0aWYgKG1vdmVWZWN0b3IgIT09IGZhbHNlKSB7XG5cdFx0XHRcdFx0XHRpZiAobW92ZVZlY3RvciA9PT0gMSB8fCBtb3ZlVmVjdG9yID09PSAtMSkge1xuXHRcdFx0XHRcdFx0XHRhZnRlciA9IChtb3ZlVmVjdG9yID09PSAxKTtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0X3NpbGVudCA9IHRydWU7XG5cdFx0XHRcdFx0XHRzZXRUaW1lb3V0KF91bnNpbGVudCwgMzApO1xuXG5cdFx0XHRcdFx0XHRfY2xvbmVIaWRlKGFjdGl2ZVNvcnRhYmxlLCBpc093bmVyKTtcblxuXHRcdFx0XHRcdFx0aWYgKCFkcmFnRWwuY29udGFpbnMoZWwpKSB7XG5cdFx0XHRcdFx0XHRcdGlmIChhZnRlciAmJiAhbmV4dFNpYmxpbmcpIHtcblx0XHRcdFx0XHRcdFx0XHRlbC5hcHBlbmRDaGlsZChkcmFnRWwpO1xuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdHRhcmdldC5wYXJlbnROb2RlLmluc2VydEJlZm9yZShkcmFnRWwsIGFmdGVyID8gbmV4dFNpYmxpbmcgOiB0YXJnZXQpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdHBhcmVudEVsID0gZHJhZ0VsLnBhcmVudE5vZGU7IC8vIGFjdHVhbGl6YXRpb25cblxuXHRcdFx0XHRcdFx0dGhpcy5fYW5pbWF0ZShkcmFnUmVjdCwgZHJhZ0VsKTtcblx0XHRcdFx0XHRcdHRoaXMuX2FuaW1hdGUodGFyZ2V0UmVjdCwgdGFyZ2V0KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0X2FuaW1hdGU6IGZ1bmN0aW9uIChwcmV2UmVjdCwgdGFyZ2V0KSB7XG5cdFx0XHR2YXIgbXMgPSB0aGlzLm9wdGlvbnMuYW5pbWF0aW9uO1xuXG5cdFx0XHRpZiAobXMpIHtcblx0XHRcdFx0dmFyIGN1cnJlbnRSZWN0ID0gdGFyZ2V0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG5cdFx0XHRcdGlmIChwcmV2UmVjdC5ub2RlVHlwZSA9PT0gMSkge1xuXHRcdFx0XHRcdHByZXZSZWN0ID0gcHJldlJlY3QuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRfY3NzKHRhcmdldCwgJ3RyYW5zaXRpb24nLCAnbm9uZScpO1xuXHRcdFx0XHRfY3NzKHRhcmdldCwgJ3RyYW5zZm9ybScsICd0cmFuc2xhdGUzZCgnXG5cdFx0XHRcdFx0KyAocHJldlJlY3QubGVmdCAtIGN1cnJlbnRSZWN0LmxlZnQpICsgJ3B4LCdcblx0XHRcdFx0XHQrIChwcmV2UmVjdC50b3AgLSBjdXJyZW50UmVjdC50b3ApICsgJ3B4LDApJ1xuXHRcdFx0XHQpO1xuXG5cdFx0XHRcdHRhcmdldC5vZmZzZXRXaWR0aDsgLy8gcmVwYWludFxuXG5cdFx0XHRcdF9jc3ModGFyZ2V0LCAndHJhbnNpdGlvbicsICdhbGwgJyArIG1zICsgJ21zJyk7XG5cdFx0XHRcdF9jc3ModGFyZ2V0LCAndHJhbnNmb3JtJywgJ3RyYW5zbGF0ZTNkKDAsMCwwKScpO1xuXG5cdFx0XHRcdGNsZWFyVGltZW91dCh0YXJnZXQuYW5pbWF0ZWQpO1xuXHRcdFx0XHR0YXJnZXQuYW5pbWF0ZWQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRfY3NzKHRhcmdldCwgJ3RyYW5zaXRpb24nLCAnJyk7XG5cdFx0XHRcdFx0X2Nzcyh0YXJnZXQsICd0cmFuc2Zvcm0nLCAnJyk7XG5cdFx0XHRcdFx0dGFyZ2V0LmFuaW1hdGVkID0gZmFsc2U7XG5cdFx0XHRcdH0sIG1zKTtcblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0X29mZlVwRXZlbnRzOiBmdW5jdGlvbiAoKSB7XG5cdFx0XHR2YXIgb3duZXJEb2N1bWVudCA9IHRoaXMuZWwub3duZXJEb2N1bWVudDtcblxuXHRcdFx0X29mZihkb2N1bWVudCwgJ3RvdWNobW92ZScsIHRoaXMuX29uVG91Y2hNb3ZlKTtcblx0XHRcdF9vZmYoZG9jdW1lbnQsICdwb2ludGVybW92ZScsIHRoaXMuX29uVG91Y2hNb3ZlKTtcblx0XHRcdF9vZmYob3duZXJEb2N1bWVudCwgJ21vdXNldXAnLCB0aGlzLl9vbkRyb3ApO1xuXHRcdFx0X29mZihvd25lckRvY3VtZW50LCAndG91Y2hlbmQnLCB0aGlzLl9vbkRyb3ApO1xuXHRcdFx0X29mZihvd25lckRvY3VtZW50LCAncG9pbnRlcnVwJywgdGhpcy5fb25Ecm9wKTtcblx0XHRcdF9vZmYob3duZXJEb2N1bWVudCwgJ3RvdWNoY2FuY2VsJywgdGhpcy5fb25Ecm9wKTtcblx0XHRcdF9vZmYob3duZXJEb2N1bWVudCwgJ3BvaW50ZXJjYW5jZWwnLCB0aGlzLl9vbkRyb3ApO1xuXHRcdFx0X29mZihvd25lckRvY3VtZW50LCAnc2VsZWN0c3RhcnQnLCB0aGlzKTtcblx0XHR9LFxuXG5cdFx0X29uRHJvcDogZnVuY3Rpb24gKC8qKkV2ZW50Ki9ldnQpIHtcblx0XHRcdHZhciBlbCA9IHRoaXMuZWwsXG5cdFx0XHRcdG9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7XG5cblx0XHRcdGNsZWFySW50ZXJ2YWwodGhpcy5fbG9vcElkKTtcblx0XHRcdGNsZWFySW50ZXJ2YWwoYXV0b1Njcm9sbC5waWQpO1xuXHRcdFx0Y2xlYXJUaW1lb3V0KHRoaXMuX2RyYWdTdGFydFRpbWVyKTtcblxuXHRcdFx0Ly8gVW5iaW5kIGV2ZW50c1xuXHRcdFx0X29mZihkb2N1bWVudCwgJ21vdXNlbW92ZScsIHRoaXMuX29uVG91Y2hNb3ZlKTtcblxuXHRcdFx0aWYgKHRoaXMubmF0aXZlRHJhZ2dhYmxlKSB7XG5cdFx0XHRcdF9vZmYoZG9jdW1lbnQsICdkcm9wJywgdGhpcyk7XG5cdFx0XHRcdF9vZmYoZWwsICdkcmFnc3RhcnQnLCB0aGlzLl9vbkRyYWdTdGFydCk7XG5cdFx0XHR9XG5cblx0XHRcdHRoaXMuX29mZlVwRXZlbnRzKCk7XG5cblx0XHRcdGlmIChldnQpIHtcblx0XHRcdFx0aWYgKG1vdmVkKSB7XG5cdFx0XHRcdFx0ZXZ0LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRcdFx0IW9wdGlvbnMuZHJvcEJ1YmJsZSAmJiBldnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRnaG9zdEVsICYmIGdob3N0RWwucGFyZW50Tm9kZSAmJiBnaG9zdEVsLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZ2hvc3RFbCk7XG5cblx0XHRcdFx0aWYgKHJvb3RFbCA9PT0gcGFyZW50RWwgfHwgU29ydGFibGUuYWN0aXZlLmxhc3RQdWxsTW9kZSAhPT0gJ2Nsb25lJykge1xuXHRcdFx0XHRcdC8vIFJlbW92ZSBjbG9uZVxuXHRcdFx0XHRcdGNsb25lRWwgJiYgY2xvbmVFbC5wYXJlbnROb2RlICYmIGNsb25lRWwucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChjbG9uZUVsKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChkcmFnRWwpIHtcblx0XHRcdFx0XHRpZiAodGhpcy5uYXRpdmVEcmFnZ2FibGUpIHtcblx0XHRcdFx0XHRcdF9vZmYoZHJhZ0VsLCAnZHJhZ2VuZCcsIHRoaXMpO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdF9kaXNhYmxlRHJhZ2dhYmxlKGRyYWdFbCk7XG5cdFx0XHRcdFx0ZHJhZ0VsLnN0eWxlWyd3aWxsLWNoYW5nZSddID0gJyc7XG5cblx0XHRcdFx0XHQvLyBSZW1vdmUgY2xhc3Mnc1xuXHRcdFx0XHRcdF90b2dnbGVDbGFzcyhkcmFnRWwsIHRoaXMub3B0aW9ucy5naG9zdENsYXNzLCBmYWxzZSk7XG5cdFx0XHRcdFx0X3RvZ2dsZUNsYXNzKGRyYWdFbCwgdGhpcy5vcHRpb25zLmNob3NlbkNsYXNzLCBmYWxzZSk7XG5cblx0XHRcdFx0XHQvLyBEcmFnIHN0b3AgZXZlbnRcblx0XHRcdFx0XHRfZGlzcGF0Y2hFdmVudCh0aGlzLCByb290RWwsICd1bmNob29zZScsIGRyYWdFbCwgcm9vdEVsLCBvbGRJbmRleCk7XG5cblx0XHRcdFx0XHRpZiAocm9vdEVsICE9PSBwYXJlbnRFbCkge1xuXHRcdFx0XHRcdFx0bmV3SW5kZXggPSBfaW5kZXgoZHJhZ0VsLCBvcHRpb25zLmRyYWdnYWJsZSk7XG5cblx0XHRcdFx0XHRcdGlmIChuZXdJbmRleCA+PSAwKSB7XG5cdFx0XHRcdFx0XHRcdC8vIEFkZCBldmVudFxuXHRcdFx0XHRcdFx0XHRfZGlzcGF0Y2hFdmVudChudWxsLCBwYXJlbnRFbCwgJ2FkZCcsIGRyYWdFbCwgcm9vdEVsLCBvbGRJbmRleCwgbmV3SW5kZXgpO1xuXG5cdFx0XHRcdFx0XHRcdC8vIFJlbW92ZSBldmVudFxuXHRcdFx0XHRcdFx0XHRfZGlzcGF0Y2hFdmVudCh0aGlzLCByb290RWwsICdyZW1vdmUnLCBkcmFnRWwsIHJvb3RFbCwgb2xkSW5kZXgsIG5ld0luZGV4KTtcblxuXHRcdFx0XHRcdFx0XHQvLyBkcmFnIGZyb20gb25lIGxpc3QgYW5kIGRyb3AgaW50byBhbm90aGVyXG5cdFx0XHRcdFx0XHRcdF9kaXNwYXRjaEV2ZW50KG51bGwsIHBhcmVudEVsLCAnc29ydCcsIGRyYWdFbCwgcm9vdEVsLCBvbGRJbmRleCwgbmV3SW5kZXgpO1xuXHRcdFx0XHRcdFx0XHRfZGlzcGF0Y2hFdmVudCh0aGlzLCByb290RWwsICdzb3J0JywgZHJhZ0VsLCByb290RWwsIG9sZEluZGV4LCBuZXdJbmRleCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGVsc2Uge1xuXHRcdFx0XHRcdFx0aWYgKGRyYWdFbC5uZXh0U2libGluZyAhPT0gbmV4dEVsKSB7XG5cdFx0XHRcdFx0XHRcdC8vIEdldCB0aGUgaW5kZXggb2YgdGhlIGRyYWdnZWQgZWxlbWVudCB3aXRoaW4gaXRzIHBhcmVudFxuXHRcdFx0XHRcdFx0XHRuZXdJbmRleCA9IF9pbmRleChkcmFnRWwsIG9wdGlvbnMuZHJhZ2dhYmxlKTtcblxuXHRcdFx0XHRcdFx0XHRpZiAobmV3SW5kZXggPj0gMCkge1xuXHRcdFx0XHRcdFx0XHRcdC8vIGRyYWcgJiBkcm9wIHdpdGhpbiB0aGUgc2FtZSBsaXN0XG5cdFx0XHRcdFx0XHRcdFx0X2Rpc3BhdGNoRXZlbnQodGhpcywgcm9vdEVsLCAndXBkYXRlJywgZHJhZ0VsLCByb290RWwsIG9sZEluZGV4LCBuZXdJbmRleCk7XG5cdFx0XHRcdFx0XHRcdFx0X2Rpc3BhdGNoRXZlbnQodGhpcywgcm9vdEVsLCAnc29ydCcsIGRyYWdFbCwgcm9vdEVsLCBvbGRJbmRleCwgbmV3SW5kZXgpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aWYgKFNvcnRhYmxlLmFjdGl2ZSkge1xuXHRcdFx0XHRcdFx0LyoganNoaW50IGVxbnVsbDp0cnVlICovXG5cdFx0XHRcdFx0XHRpZiAobmV3SW5kZXggPT0gbnVsbCB8fCBuZXdJbmRleCA9PT0gLTEpIHtcblx0XHRcdFx0XHRcdFx0bmV3SW5kZXggPSBvbGRJbmRleDtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0X2Rpc3BhdGNoRXZlbnQodGhpcywgcm9vdEVsLCAnZW5kJywgZHJhZ0VsLCByb290RWwsIG9sZEluZGV4LCBuZXdJbmRleCk7XG5cblx0XHRcdFx0XHRcdC8vIFNhdmUgc29ydGluZ1xuXHRcdFx0XHRcdFx0dGhpcy5zYXZlKCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdH1cblxuXHRcdFx0dGhpcy5fbnVsbGluZygpO1xuXHRcdH0sXG5cblx0XHRfbnVsbGluZzogZnVuY3Rpb24oKSB7XG5cdFx0XHRyb290RWwgPVxuXHRcdFx0ZHJhZ0VsID1cblx0XHRcdHBhcmVudEVsID1cblx0XHRcdGdob3N0RWwgPVxuXHRcdFx0bmV4dEVsID1cblx0XHRcdGNsb25lRWwgPVxuXHRcdFx0bGFzdERvd25FbCA9XG5cblx0XHRcdHNjcm9sbEVsID1cblx0XHRcdHNjcm9sbFBhcmVudEVsID1cblxuXHRcdFx0dGFwRXZ0ID1cblx0XHRcdHRvdWNoRXZ0ID1cblxuXHRcdFx0bW92ZWQgPVxuXHRcdFx0bmV3SW5kZXggPVxuXG5cdFx0XHRsYXN0RWwgPVxuXHRcdFx0bGFzdENTUyA9XG5cblx0XHRcdHB1dFNvcnRhYmxlID1cblx0XHRcdGFjdGl2ZUdyb3VwID1cblx0XHRcdFNvcnRhYmxlLmFjdGl2ZSA9IG51bGw7XG5cblx0XHRcdHNhdmVkSW5wdXRDaGVja2VkLmZvckVhY2goZnVuY3Rpb24gKGVsKSB7XG5cdFx0XHRcdGVsLmNoZWNrZWQgPSB0cnVlO1xuXHRcdFx0fSk7XG5cdFx0XHRzYXZlZElucHV0Q2hlY2tlZC5sZW5ndGggPSAwO1xuXHRcdH0sXG5cblx0XHRoYW5kbGVFdmVudDogZnVuY3Rpb24gKC8qKkV2ZW50Ki9ldnQpIHtcblx0XHRcdHN3aXRjaCAoZXZ0LnR5cGUpIHtcblx0XHRcdFx0Y2FzZSAnZHJvcCc6XG5cdFx0XHRcdGNhc2UgJ2RyYWdlbmQnOlxuXHRcdFx0XHRcdHRoaXMuX29uRHJvcChldnQpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdGNhc2UgJ2RyYWdvdmVyJzpcblx0XHRcdFx0Y2FzZSAnZHJhZ2VudGVyJzpcblx0XHRcdFx0XHRpZiAoZHJhZ0VsKSB7XG5cdFx0XHRcdFx0XHR0aGlzLl9vbkRyYWdPdmVyKGV2dCk7XG5cdFx0XHRcdFx0XHRfZ2xvYmFsRHJhZ092ZXIoZXZ0KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdFx0Y2FzZSAnc2VsZWN0c3RhcnQnOlxuXHRcdFx0XHRcdGV2dC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdH0sXG5cblxuXHRcdC8qKlxuXHRcdCAqIFNlcmlhbGl6ZXMgdGhlIGl0ZW0gaW50byBhbiBhcnJheSBvZiBzdHJpbmcuXG5cdFx0ICogQHJldHVybnMge1N0cmluZ1tdfVxuXHRcdCAqL1xuXHRcdHRvQXJyYXk6IGZ1bmN0aW9uICgpIHtcblx0XHRcdHZhciBvcmRlciA9IFtdLFxuXHRcdFx0XHRlbCxcblx0XHRcdFx0Y2hpbGRyZW4gPSB0aGlzLmVsLmNoaWxkcmVuLFxuXHRcdFx0XHRpID0gMCxcblx0XHRcdFx0biA9IGNoaWxkcmVuLmxlbmd0aCxcblx0XHRcdFx0b3B0aW9ucyA9IHRoaXMub3B0aW9ucztcblxuXHRcdFx0Zm9yICg7IGkgPCBuOyBpKyspIHtcblx0XHRcdFx0ZWwgPSBjaGlsZHJlbltpXTtcblx0XHRcdFx0aWYgKF9jbG9zZXN0KGVsLCBvcHRpb25zLmRyYWdnYWJsZSwgdGhpcy5lbCkpIHtcblx0XHRcdFx0XHRvcmRlci5wdXNoKGVsLmdldEF0dHJpYnV0ZShvcHRpb25zLmRhdGFJZEF0dHIpIHx8IF9nZW5lcmF0ZUlkKGVsKSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIG9yZGVyO1xuXHRcdH0sXG5cblxuXHRcdC8qKlxuXHRcdCAqIFNvcnRzIHRoZSBlbGVtZW50cyBhY2NvcmRpbmcgdG8gdGhlIGFycmF5LlxuXHRcdCAqIEBwYXJhbSAge1N0cmluZ1tdfSAgb3JkZXIgIG9yZGVyIG9mIHRoZSBpdGVtc1xuXHRcdCAqL1xuXHRcdHNvcnQ6IGZ1bmN0aW9uIChvcmRlcikge1xuXHRcdFx0dmFyIGl0ZW1zID0ge30sIHJvb3RFbCA9IHRoaXMuZWw7XG5cblx0XHRcdHRoaXMudG9BcnJheSgpLmZvckVhY2goZnVuY3Rpb24gKGlkLCBpKSB7XG5cdFx0XHRcdHZhciBlbCA9IHJvb3RFbC5jaGlsZHJlbltpXTtcblxuXHRcdFx0XHRpZiAoX2Nsb3Nlc3QoZWwsIHRoaXMub3B0aW9ucy5kcmFnZ2FibGUsIHJvb3RFbCkpIHtcblx0XHRcdFx0XHRpdGVtc1tpZF0gPSBlbDtcblx0XHRcdFx0fVxuXHRcdFx0fSwgdGhpcyk7XG5cblx0XHRcdG9yZGVyLmZvckVhY2goZnVuY3Rpb24gKGlkKSB7XG5cdFx0XHRcdGlmIChpdGVtc1tpZF0pIHtcblx0XHRcdFx0XHRyb290RWwucmVtb3ZlQ2hpbGQoaXRlbXNbaWRdKTtcblx0XHRcdFx0XHRyb290RWwuYXBwZW5kQ2hpbGQoaXRlbXNbaWRdKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fSxcblxuXG5cdFx0LyoqXG5cdFx0ICogU2F2ZSB0aGUgY3VycmVudCBzb3J0aW5nXG5cdFx0ICovXG5cdFx0c2F2ZTogZnVuY3Rpb24gKCkge1xuXHRcdFx0dmFyIHN0b3JlID0gdGhpcy5vcHRpb25zLnN0b3JlO1xuXHRcdFx0c3RvcmUgJiYgc3RvcmUuc2V0KHRoaXMpO1xuXHRcdH0sXG5cblxuXHRcdC8qKlxuXHRcdCAqIEZvciBlYWNoIGVsZW1lbnQgaW4gdGhlIHNldCwgZ2V0IHRoZSBmaXJzdCBlbGVtZW50IHRoYXQgbWF0Y2hlcyB0aGUgc2VsZWN0b3IgYnkgdGVzdGluZyB0aGUgZWxlbWVudCBpdHNlbGYgYW5kIHRyYXZlcnNpbmcgdXAgdGhyb3VnaCBpdHMgYW5jZXN0b3JzIGluIHRoZSBET00gdHJlZS5cblx0XHQgKiBAcGFyYW0gICB7SFRNTEVsZW1lbnR9ICBlbFxuXHRcdCAqIEBwYXJhbSAgIHtTdHJpbmd9ICAgICAgIFtzZWxlY3Rvcl0gIGRlZmF1bHQ6IGBvcHRpb25zLmRyYWdnYWJsZWBcblx0XHQgKiBAcmV0dXJucyB7SFRNTEVsZW1lbnR8bnVsbH1cblx0XHQgKi9cblx0XHRjbG9zZXN0OiBmdW5jdGlvbiAoZWwsIHNlbGVjdG9yKSB7XG5cdFx0XHRyZXR1cm4gX2Nsb3Nlc3QoZWwsIHNlbGVjdG9yIHx8IHRoaXMub3B0aW9ucy5kcmFnZ2FibGUsIHRoaXMuZWwpO1xuXHRcdH0sXG5cblxuXHRcdC8qKlxuXHRcdCAqIFNldC9nZXQgb3B0aW9uXG5cdFx0ICogQHBhcmFtICAge3N0cmluZ30gbmFtZVxuXHRcdCAqIEBwYXJhbSAgIHsqfSAgICAgIFt2YWx1ZV1cblx0XHQgKiBAcmV0dXJucyB7Kn1cblx0XHQgKi9cblx0XHRvcHRpb246IGZ1bmN0aW9uIChuYW1lLCB2YWx1ZSkge1xuXHRcdFx0dmFyIG9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7XG5cblx0XHRcdGlmICh2YWx1ZSA9PT0gdm9pZCAwKSB7XG5cdFx0XHRcdHJldHVybiBvcHRpb25zW25hbWVdO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0b3B0aW9uc1tuYW1lXSA9IHZhbHVlO1xuXG5cdFx0XHRcdGlmIChuYW1lID09PSAnZ3JvdXAnKSB7XG5cdFx0XHRcdFx0X3ByZXBhcmVHcm91cChvcHRpb25zKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0sXG5cblxuXHRcdC8qKlxuXHRcdCAqIERlc3Ryb3lcblx0XHQgKi9cblx0XHRkZXN0cm95OiBmdW5jdGlvbiAoKSB7XG5cdFx0XHR2YXIgZWwgPSB0aGlzLmVsO1xuXG5cdFx0XHRlbFtleHBhbmRvXSA9IG51bGw7XG5cblx0XHRcdF9vZmYoZWwsICdtb3VzZWRvd24nLCB0aGlzLl9vblRhcFN0YXJ0KTtcblx0XHRcdF9vZmYoZWwsICd0b3VjaHN0YXJ0JywgdGhpcy5fb25UYXBTdGFydCk7XG5cdFx0XHRfb2ZmKGVsLCAncG9pbnRlcmRvd24nLCB0aGlzLl9vblRhcFN0YXJ0KTtcblxuXHRcdFx0aWYgKHRoaXMubmF0aXZlRHJhZ2dhYmxlKSB7XG5cdFx0XHRcdF9vZmYoZWwsICdkcmFnb3ZlcicsIHRoaXMpO1xuXHRcdFx0XHRfb2ZmKGVsLCAnZHJhZ2VudGVyJywgdGhpcyk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFJlbW92ZSBkcmFnZ2FibGUgYXR0cmlidXRlc1xuXHRcdFx0QXJyYXkucHJvdG90eXBlLmZvckVhY2guY2FsbChlbC5xdWVyeVNlbGVjdG9yQWxsKCdbZHJhZ2dhYmxlXScpLCBmdW5jdGlvbiAoZWwpIHtcblx0XHRcdFx0ZWwucmVtb3ZlQXR0cmlidXRlKCdkcmFnZ2FibGUnKTtcblx0XHRcdH0pO1xuXG5cdFx0XHR0b3VjaERyYWdPdmVyTGlzdGVuZXJzLnNwbGljZSh0b3VjaERyYWdPdmVyTGlzdGVuZXJzLmluZGV4T2YodGhpcy5fb25EcmFnT3ZlciksIDEpO1xuXG5cdFx0XHR0aGlzLl9vbkRyb3AoKTtcblxuXHRcdFx0dGhpcy5lbCA9IGVsID0gbnVsbDtcblx0XHR9XG5cdH07XG5cblxuXHRmdW5jdGlvbiBfY2xvbmVIaWRlKHNvcnRhYmxlLCBzdGF0ZSkge1xuXHRcdGlmIChzb3J0YWJsZS5sYXN0UHVsbE1vZGUgIT09ICdjbG9uZScpIHtcblx0XHRcdHN0YXRlID0gdHJ1ZTtcblx0XHR9XG5cblx0XHRpZiAoY2xvbmVFbCAmJiAoY2xvbmVFbC5zdGF0ZSAhPT0gc3RhdGUpKSB7XG5cdFx0XHRfY3NzKGNsb25lRWwsICdkaXNwbGF5Jywgc3RhdGUgPyAnbm9uZScgOiAnJyk7XG5cblx0XHRcdGlmICghc3RhdGUpIHtcblx0XHRcdFx0aWYgKGNsb25lRWwuc3RhdGUpIHtcblx0XHRcdFx0XHRpZiAoc29ydGFibGUub3B0aW9ucy5ncm91cC5yZXZlcnRDbG9uZSkge1xuXHRcdFx0XHRcdFx0cm9vdEVsLmluc2VydEJlZm9yZShjbG9uZUVsLCBuZXh0RWwpO1xuXHRcdFx0XHRcdFx0c29ydGFibGUuX2FuaW1hdGUoZHJhZ0VsLCBjbG9uZUVsKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0cm9vdEVsLmluc2VydEJlZm9yZShjbG9uZUVsLCBkcmFnRWwpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRjbG9uZUVsLnN0YXRlID0gc3RhdGU7XG5cdFx0fVxuXHR9XG5cblxuXHRmdW5jdGlvbiBfY2xvc2VzdCgvKipIVE1MRWxlbWVudCovZWwsIC8qKlN0cmluZyovc2VsZWN0b3IsIC8qKkhUTUxFbGVtZW50Ki9jdHgpIHtcblx0XHRpZiAoZWwpIHtcblx0XHRcdGN0eCA9IGN0eCB8fCBkb2N1bWVudDtcblxuXHRcdFx0ZG8ge1xuXHRcdFx0XHRpZiAoKHNlbGVjdG9yID09PSAnPionICYmIGVsLnBhcmVudE5vZGUgPT09IGN0eCkgfHwgX21hdGNoZXMoZWwsIHNlbGVjdG9yKSkge1xuXHRcdFx0XHRcdHJldHVybiBlbDtcblx0XHRcdFx0fVxuXHRcdFx0XHQvKiBqc2hpbnQgYm9zczp0cnVlICovXG5cdFx0XHR9IHdoaWxlIChlbCA9IF9nZXRQYXJlbnRPckhvc3QoZWwpKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXG5cblx0ZnVuY3Rpb24gX2dldFBhcmVudE9ySG9zdChlbCkge1xuXHRcdHZhciBwYXJlbnQgPSBlbC5ob3N0O1xuXG5cdFx0cmV0dXJuIChwYXJlbnQgJiYgcGFyZW50Lm5vZGVUeXBlKSA/IHBhcmVudCA6IGVsLnBhcmVudE5vZGU7XG5cdH1cblxuXG5cdGZ1bmN0aW9uIF9nbG9iYWxEcmFnT3ZlcigvKipFdmVudCovZXZ0KSB7XG5cdFx0aWYgKGV2dC5kYXRhVHJhbnNmZXIpIHtcblx0XHRcdGV2dC5kYXRhVHJhbnNmZXIuZHJvcEVmZmVjdCA9ICdtb3ZlJztcblx0XHR9XG5cdFx0ZXZ0LnByZXZlbnREZWZhdWx0KCk7XG5cdH1cblxuXG5cdGZ1bmN0aW9uIF9vbihlbCwgZXZlbnQsIGZuKSB7XG5cdFx0ZWwuYWRkRXZlbnRMaXN0ZW5lcihldmVudCwgZm4sIGNhcHR1cmVNb2RlKTtcblx0fVxuXG5cblx0ZnVuY3Rpb24gX29mZihlbCwgZXZlbnQsIGZuKSB7XG5cdFx0ZWwucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudCwgZm4sIGNhcHR1cmVNb2RlKTtcblx0fVxuXG5cblx0ZnVuY3Rpb24gX3RvZ2dsZUNsYXNzKGVsLCBuYW1lLCBzdGF0ZSkge1xuXHRcdGlmIChlbCkge1xuXHRcdFx0aWYgKGVsLmNsYXNzTGlzdCkge1xuXHRcdFx0XHRlbC5jbGFzc0xpc3Rbc3RhdGUgPyAnYWRkJyA6ICdyZW1vdmUnXShuYW1lKTtcblx0XHRcdH1cblx0XHRcdGVsc2Uge1xuXHRcdFx0XHR2YXIgY2xhc3NOYW1lID0gKCcgJyArIGVsLmNsYXNzTmFtZSArICcgJykucmVwbGFjZShSX1NQQUNFLCAnICcpLnJlcGxhY2UoJyAnICsgbmFtZSArICcgJywgJyAnKTtcblx0XHRcdFx0ZWwuY2xhc3NOYW1lID0gKGNsYXNzTmFtZSArIChzdGF0ZSA/ICcgJyArIG5hbWUgOiAnJykpLnJlcGxhY2UoUl9TUEFDRSwgJyAnKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXG5cdGZ1bmN0aW9uIF9jc3MoZWwsIHByb3AsIHZhbCkge1xuXHRcdHZhciBzdHlsZSA9IGVsICYmIGVsLnN0eWxlO1xuXG5cdFx0aWYgKHN0eWxlKSB7XG5cdFx0XHRpZiAodmFsID09PSB2b2lkIDApIHtcblx0XHRcdFx0aWYgKGRvY3VtZW50LmRlZmF1bHRWaWV3ICYmIGRvY3VtZW50LmRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGUpIHtcblx0XHRcdFx0XHR2YWwgPSBkb2N1bWVudC5kZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0eWxlKGVsLCAnJyk7XG5cdFx0XHRcdH1cblx0XHRcdFx0ZWxzZSBpZiAoZWwuY3VycmVudFN0eWxlKSB7XG5cdFx0XHRcdFx0dmFsID0gZWwuY3VycmVudFN0eWxlO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIHByb3AgPT09IHZvaWQgMCA/IHZhbCA6IHZhbFtwcm9wXTtcblx0XHRcdH1cblx0XHRcdGVsc2Uge1xuXHRcdFx0XHRpZiAoIShwcm9wIGluIHN0eWxlKSkge1xuXHRcdFx0XHRcdHByb3AgPSAnLXdlYmtpdC0nICsgcHJvcDtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHN0eWxlW3Byb3BdID0gdmFsICsgKHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnID8gJycgOiAncHgnKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXG5cdGZ1bmN0aW9uIF9maW5kKGN0eCwgdGFnTmFtZSwgaXRlcmF0b3IpIHtcblx0XHRpZiAoY3R4KSB7XG5cdFx0XHR2YXIgbGlzdCA9IGN0eC5nZXRFbGVtZW50c0J5VGFnTmFtZSh0YWdOYW1lKSwgaSA9IDAsIG4gPSBsaXN0Lmxlbmd0aDtcblxuXHRcdFx0aWYgKGl0ZXJhdG9yKSB7XG5cdFx0XHRcdGZvciAoOyBpIDwgbjsgaSsrKSB7XG5cdFx0XHRcdFx0aXRlcmF0b3IobGlzdFtpXSwgaSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGxpc3Q7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIFtdO1xuXHR9XG5cblxuXG5cdGZ1bmN0aW9uIF9kaXNwYXRjaEV2ZW50KHNvcnRhYmxlLCByb290RWwsIG5hbWUsIHRhcmdldEVsLCBmcm9tRWwsIHN0YXJ0SW5kZXgsIG5ld0luZGV4KSB7XG5cdFx0c29ydGFibGUgPSAoc29ydGFibGUgfHwgcm9vdEVsW2V4cGFuZG9dKTtcblxuXHRcdHZhciBldnQgPSBkb2N1bWVudC5jcmVhdGVFdmVudCgnRXZlbnQnKSxcblx0XHRcdG9wdGlvbnMgPSBzb3J0YWJsZS5vcHRpb25zLFxuXHRcdFx0b25OYW1lID0gJ29uJyArIG5hbWUuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBuYW1lLnN1YnN0cigxKTtcblxuXHRcdGV2dC5pbml0RXZlbnQobmFtZSwgdHJ1ZSwgdHJ1ZSk7XG5cblx0XHRldnQudG8gPSByb290RWw7XG5cdFx0ZXZ0LmZyb20gPSBmcm9tRWwgfHwgcm9vdEVsO1xuXHRcdGV2dC5pdGVtID0gdGFyZ2V0RWwgfHwgcm9vdEVsO1xuXHRcdGV2dC5jbG9uZSA9IGNsb25lRWw7XG5cblx0XHRldnQub2xkSW5kZXggPSBzdGFydEluZGV4O1xuXHRcdGV2dC5uZXdJbmRleCA9IG5ld0luZGV4O1xuXG5cdFx0cm9vdEVsLmRpc3BhdGNoRXZlbnQoZXZ0KTtcblxuXHRcdGlmIChvcHRpb25zW29uTmFtZV0pIHtcblx0XHRcdG9wdGlvbnNbb25OYW1lXS5jYWxsKHNvcnRhYmxlLCBldnQpO1xuXHRcdH1cblx0fVxuXG5cblx0ZnVuY3Rpb24gX29uTW92ZShmcm9tRWwsIHRvRWwsIGRyYWdFbCwgZHJhZ1JlY3QsIHRhcmdldEVsLCB0YXJnZXRSZWN0LCBvcmlnaW5hbEV2dCwgd2lsbEluc2VydEFmdGVyKSB7XG5cdFx0dmFyIGV2dCxcblx0XHRcdHNvcnRhYmxlID0gZnJvbUVsW2V4cGFuZG9dLFxuXHRcdFx0b25Nb3ZlRm4gPSBzb3J0YWJsZS5vcHRpb25zLm9uTW92ZSxcblx0XHRcdHJldFZhbDtcblxuXHRcdGV2dCA9IGRvY3VtZW50LmNyZWF0ZUV2ZW50KCdFdmVudCcpO1xuXHRcdGV2dC5pbml0RXZlbnQoJ21vdmUnLCB0cnVlLCB0cnVlKTtcblxuXHRcdGV2dC50byA9IHRvRWw7XG5cdFx0ZXZ0LmZyb20gPSBmcm9tRWw7XG5cdFx0ZXZ0LmRyYWdnZWQgPSBkcmFnRWw7XG5cdFx0ZXZ0LmRyYWdnZWRSZWN0ID0gZHJhZ1JlY3Q7XG5cdFx0ZXZ0LnJlbGF0ZWQgPSB0YXJnZXRFbCB8fCB0b0VsO1xuXHRcdGV2dC5yZWxhdGVkUmVjdCA9IHRhcmdldFJlY3QgfHwgdG9FbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblx0XHRldnQud2lsbEluc2VydEFmdGVyID0gd2lsbEluc2VydEFmdGVyO1xuXG5cdFx0ZnJvbUVsLmRpc3BhdGNoRXZlbnQoZXZ0KTtcblxuXHRcdGlmIChvbk1vdmVGbikge1xuXHRcdFx0cmV0VmFsID0gb25Nb3ZlRm4uY2FsbChzb3J0YWJsZSwgZXZ0LCBvcmlnaW5hbEV2dCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJldFZhbDtcblx0fVxuXG5cblx0ZnVuY3Rpb24gX2Rpc2FibGVEcmFnZ2FibGUoZWwpIHtcblx0XHRlbC5kcmFnZ2FibGUgPSBmYWxzZTtcblx0fVxuXG5cblx0ZnVuY3Rpb24gX3Vuc2lsZW50KCkge1xuXHRcdF9zaWxlbnQgPSBmYWxzZTtcblx0fVxuXG5cblx0LyoqIEByZXR1cm5zIHtIVE1MRWxlbWVudHxmYWxzZX0gKi9cblx0ZnVuY3Rpb24gX2dob3N0SXNMYXN0KGVsLCBldnQpIHtcblx0XHR2YXIgbGFzdEVsID0gZWwubGFzdEVsZW1lbnRDaGlsZCxcblx0XHRcdHJlY3QgPSBsYXN0RWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cblx0XHQvLyA1IOKAlCBtaW4gZGVsdGFcblx0XHQvLyBhYnMg4oCUINC90LXQu9GM0LfRjyDQtNC+0LHQsNCy0LvRj9GC0YwsINCwINGC0L4g0LPQu9GO0LrQuCDQv9GA0Lgg0L3QsNCy0LXQtNC10L3QuNC4INGB0LLQtdGA0YXRg1xuXHRcdHJldHVybiAoZXZ0LmNsaWVudFkgLSAocmVjdC50b3AgKyByZWN0LmhlaWdodCkgPiA1KSB8fFxuXHRcdFx0KGV2dC5jbGllbnRYIC0gKHJlY3QubGVmdCArIHJlY3Qud2lkdGgpID4gNSk7XG5cdH1cblxuXG5cdC8qKlxuXHQgKiBHZW5lcmF0ZSBpZFxuXHQgKiBAcGFyYW0gICB7SFRNTEVsZW1lbnR9IGVsXG5cdCAqIEByZXR1cm5zIHtTdHJpbmd9XG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRmdW5jdGlvbiBfZ2VuZXJhdGVJZChlbCkge1xuXHRcdHZhciBzdHIgPSBlbC50YWdOYW1lICsgZWwuY2xhc3NOYW1lICsgZWwuc3JjICsgZWwuaHJlZiArIGVsLnRleHRDb250ZW50LFxuXHRcdFx0aSA9IHN0ci5sZW5ndGgsXG5cdFx0XHRzdW0gPSAwO1xuXG5cdFx0d2hpbGUgKGktLSkge1xuXHRcdFx0c3VtICs9IHN0ci5jaGFyQ29kZUF0KGkpO1xuXHRcdH1cblxuXHRcdHJldHVybiBzdW0udG9TdHJpbmcoMzYpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHVybnMgdGhlIGluZGV4IG9mIGFuIGVsZW1lbnQgd2l0aGluIGl0cyBwYXJlbnQgZm9yIGEgc2VsZWN0ZWQgc2V0IG9mXG5cdCAqIGVsZW1lbnRzXG5cdCAqIEBwYXJhbSAge0hUTUxFbGVtZW50fSBlbFxuXHQgKiBAcGFyYW0gIHtzZWxlY3Rvcn0gc2VsZWN0b3Jcblx0ICogQHJldHVybiB7bnVtYmVyfVxuXHQgKi9cblx0ZnVuY3Rpb24gX2luZGV4KGVsLCBzZWxlY3Rvcikge1xuXHRcdHZhciBpbmRleCA9IDA7XG5cblx0XHRpZiAoIWVsIHx8ICFlbC5wYXJlbnROb2RlKSB7XG5cdFx0XHRyZXR1cm4gLTE7XG5cdFx0fVxuXG5cdFx0d2hpbGUgKGVsICYmIChlbCA9IGVsLnByZXZpb3VzRWxlbWVudFNpYmxpbmcpKSB7XG5cdFx0XHRpZiAoKGVsLm5vZGVOYW1lLnRvVXBwZXJDYXNlKCkgIT09ICdURU1QTEFURScpICYmIChzZWxlY3RvciA9PT0gJz4qJyB8fCBfbWF0Y2hlcyhlbCwgc2VsZWN0b3IpKSkge1xuXHRcdFx0XHRpbmRleCsrO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBpbmRleDtcblx0fVxuXG5cdGZ1bmN0aW9uIF9tYXRjaGVzKC8qKkhUTUxFbGVtZW50Ki9lbCwgLyoqU3RyaW5nKi9zZWxlY3Rvcikge1xuXHRcdGlmIChlbCkge1xuXHRcdFx0c2VsZWN0b3IgPSBzZWxlY3Rvci5zcGxpdCgnLicpO1xuXG5cdFx0XHR2YXIgdGFnID0gc2VsZWN0b3Iuc2hpZnQoKS50b1VwcGVyQ2FzZSgpLFxuXHRcdFx0XHRyZSA9IG5ldyBSZWdFeHAoJ1xcXFxzKCcgKyBzZWxlY3Rvci5qb2luKCd8JykgKyAnKSg/PVxcXFxzKScsICdnJyk7XG5cblx0XHRcdHJldHVybiAoXG5cdFx0XHRcdCh0YWcgPT09ICcnIHx8IGVsLm5vZGVOYW1lLnRvVXBwZXJDYXNlKCkgPT0gdGFnKSAmJlxuXHRcdFx0XHQoIXNlbGVjdG9yLmxlbmd0aCB8fCAoKCcgJyArIGVsLmNsYXNzTmFtZSArICcgJykubWF0Y2gocmUpIHx8IFtdKS5sZW5ndGggPT0gc2VsZWN0b3IubGVuZ3RoKVxuXHRcdFx0KTtcblx0XHR9XG5cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHRmdW5jdGlvbiBfdGhyb3R0bGUoY2FsbGJhY2ssIG1zKSB7XG5cdFx0dmFyIGFyZ3MsIF90aGlzO1xuXG5cdFx0cmV0dXJuIGZ1bmN0aW9uICgpIHtcblx0XHRcdGlmIChhcmdzID09PSB2b2lkIDApIHtcblx0XHRcdFx0YXJncyA9IGFyZ3VtZW50cztcblx0XHRcdFx0X3RoaXMgPSB0aGlzO1xuXG5cdFx0XHRcdHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdGlmIChhcmdzLmxlbmd0aCA9PT0gMSkge1xuXHRcdFx0XHRcdFx0Y2FsbGJhY2suY2FsbChfdGhpcywgYXJnc1swXSk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdGNhbGxiYWNrLmFwcGx5KF90aGlzLCBhcmdzKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRhcmdzID0gdm9pZCAwO1xuXHRcdFx0XHR9LCBtcyk7XG5cdFx0XHR9XG5cdFx0fTtcblx0fVxuXG5cdGZ1bmN0aW9uIF9leHRlbmQoZHN0LCBzcmMpIHtcblx0XHRpZiAoZHN0ICYmIHNyYykge1xuXHRcdFx0Zm9yICh2YXIga2V5IGluIHNyYykge1xuXHRcdFx0XHRpZiAoc3JjLmhhc093blByb3BlcnR5KGtleSkpIHtcblx0XHRcdFx0XHRkc3Rba2V5XSA9IHNyY1trZXldO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGRzdDtcblx0fVxuXG5cdGZ1bmN0aW9uIF9jbG9uZShlbCkge1xuXHRcdHJldHVybiAkXG5cdFx0XHQ/ICQoZWwpLmNsb25lKHRydWUpWzBdXG5cdFx0XHQ6IChQb2x5bWVyICYmIFBvbHltZXIuZG9tXG5cdFx0XHRcdD8gUG9seW1lci5kb20oZWwpLmNsb25lTm9kZSh0cnVlKVxuXHRcdFx0XHQ6IGVsLmNsb25lTm9kZSh0cnVlKVxuXHRcdFx0KTtcblx0fVxuXG5cdGZ1bmN0aW9uIF9zYXZlSW5wdXRDaGVja2VkU3RhdGUocm9vdCkge1xuXHRcdHZhciBpbnB1dHMgPSByb290LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdpbnB1dCcpO1xuXHRcdHZhciBpZHggPSBpbnB1dHMubGVuZ3RoO1xuXG5cdFx0d2hpbGUgKGlkeC0tKSB7XG5cdFx0XHR2YXIgZWwgPSBpbnB1dHNbaWR4XTtcblx0XHRcdGVsLmNoZWNrZWQgJiYgc2F2ZWRJbnB1dENoZWNrZWQucHVzaChlbCk7XG5cdFx0fVxuXHR9XG5cblx0Ly8gRml4ZWQgIzk3MzogXG5cdF9vbihkb2N1bWVudCwgJ3RvdWNobW92ZScsIGZ1bmN0aW9uIChldnQpIHtcblx0XHRpZiAoU29ydGFibGUuYWN0aXZlKSB7XG5cdFx0XHRldnQucHJldmVudERlZmF1bHQoKTtcblx0XHR9XG5cdH0pO1xuXG5cdHRyeSB7XG5cdFx0d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Rlc3QnLCBudWxsLCBPYmplY3QuZGVmaW5lUHJvcGVydHkoe30sICdwYXNzaXZlJywge1xuXHRcdFx0Z2V0OiBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdGNhcHR1cmVNb2RlID0ge1xuXHRcdFx0XHRcdGNhcHR1cmU6IGZhbHNlLFxuXHRcdFx0XHRcdHBhc3NpdmU6IGZhbHNlXG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cdFx0fSkpO1xuXHR9IGNhdGNoIChlcnIpIHt9XG5cblx0Ly8gRXhwb3J0IHV0aWxzXG5cdFNvcnRhYmxlLnV0aWxzID0ge1xuXHRcdG9uOiBfb24sXG5cdFx0b2ZmOiBfb2ZmLFxuXHRcdGNzczogX2Nzcyxcblx0XHRmaW5kOiBfZmluZCxcblx0XHRpczogZnVuY3Rpb24gKGVsLCBzZWxlY3Rvcikge1xuXHRcdFx0cmV0dXJuICEhX2Nsb3Nlc3QoZWwsIHNlbGVjdG9yLCBlbCk7XG5cdFx0fSxcblx0XHRleHRlbmQ6IF9leHRlbmQsXG5cdFx0dGhyb3R0bGU6IF90aHJvdHRsZSxcblx0XHRjbG9zZXN0OiBfY2xvc2VzdCxcblx0XHR0b2dnbGVDbGFzczogX3RvZ2dsZUNsYXNzLFxuXHRcdGNsb25lOiBfY2xvbmUsXG5cdFx0aW5kZXg6IF9pbmRleFxuXHR9O1xuXG5cblx0LyoqXG5cdCAqIENyZWF0ZSBzb3J0YWJsZSBpbnN0YW5jZVxuXHQgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSAgZWxcblx0ICogQHBhcmFtIHtPYmplY3R9ICAgICAgW29wdGlvbnNdXG5cdCAqL1xuXHRTb3J0YWJsZS5jcmVhdGUgPSBmdW5jdGlvbiAoZWwsIG9wdGlvbnMpIHtcblx0XHRyZXR1cm4gbmV3IFNvcnRhYmxlKGVsLCBvcHRpb25zKTtcblx0fTtcblxuXG5cdC8vIEV4cG9ydFxuXHRTb3J0YWJsZS52ZXJzaW9uID0gJzEuNi4xJztcblx0cmV0dXJuIFNvcnRhYmxlO1xufSk7XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vc29ydGFibGVqcy9Tb3J0YWJsZS5qc1xuLy8gbW9kdWxlIGlkID0gOVxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJpbXBvcnQgKiBhcyBTdXJ2ZXkgZnJvbSBcInN1cnZleS1rbm9ja291dFwiO1xuXG5leHBvcnQgY2xhc3MgRWRpdGFibGVPYmplY3Qge1xuICBwdWJsaWMgc3RhdGljIGdldE9yaWdpb25hbFN1cnZleShcbiAgICBzdXJ2ZXk6IFN1cnZleS5TdXJ2ZXlNb2RlbFxuICApOiBTdXJ2ZXkuU3VydmV5TW9kZWwge1xuICAgIHJldHVybiAhIXN1cnZleSAmJiAhIXN1cnZleVtcIm9yaWdpb25hbE9ialwiXVxuICAgICAgPyBzdXJ2ZXlbXCJvcmlnaW9uYWxPYmpcIl1cbiAgICAgIDogc3VydmV5O1xuICB9XG5cbiAgcHJpdmF0ZSBvYmpWYWx1ZTogU3VydmV5LkJhc2U7XG4gIHByaXZhdGUgZWRpdGFibGVPYmpWYWx1ZTogU3VydmV5LkJhc2U7XG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihvYmo6IFN1cnZleS5CYXNlKSB7XG4gICAgdGhpcy5vYmpWYWx1ZSA9IG9iajtcbiAgICB0aGlzLmVkaXRhYmxlT2JqVmFsdWUgPSB0aGlzLmNyZWF0ZUVkaXRhYmxlT2JqKCk7XG4gIH1cbiAgcHVibGljIGdldCBvYmooKSB7XG4gICAgcmV0dXJuIHRoaXMub2JqVmFsdWU7XG4gIH1cbiAgcHVibGljIGdldCBlZGl0YWJsZU9iaigpIHtcbiAgICByZXR1cm4gdGhpcy5lZGl0YWJsZU9ialZhbHVlO1xuICB9XG4gIHB1YmxpYyBpc1Byb3BlcnR5Q2hhbmdlZChwcm9wZXJ0eU5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhU3VydmV5LkhlbHBlcnMuaXNUd29WYWx1ZUVxdWFscyhcbiAgICAgIHRoaXMub2JqW3Byb3BlcnR5TmFtZV0sXG4gICAgICB0aGlzLmVkaXRhYmxlT2JqW3Byb3BlcnR5TmFtZV1cbiAgICApO1xuICB9XG4gIHB1YmxpYyBhcHBseShwcm9wZXJ0eU5hbWU6IHN0cmluZykge1xuICAgIGlmICghdGhpcy5pc1Byb3BlcnR5Q2hhbmdlZChwcm9wZXJ0eU5hbWUpKSByZXR1cm47XG4gICAgdGhpcy5vYmpbcHJvcGVydHlOYW1lXSA9IHRoaXMuZWRpdGFibGVPYmpbcHJvcGVydHlOYW1lXTtcbiAgfVxuICBwdWJsaWMgcmVzZXQoKSB7XG4gICAgdGhpcy5hc3NpZ25Qcm9wZXJ0aWVzKHRoaXMuZWRpdGFibGVPYmopO1xuICB9XG4gIHByb3RlY3RlZCBjcmVhdGVFZGl0YWJsZU9iaigpOiBTdXJ2ZXkuQmFzZSB7XG4gICAgdmFyIHR5cGUgPSB0aGlzLm9iai5nZXRUeXBlKCk7XG4gICAgdmFyIHJlcyA9IDxTdXJ2ZXkuQmFzZT5TdXJ2ZXkuU2VyaWFsaXplci5jcmVhdGVDbGFzcyh0eXBlKTtcbiAgICBpZiAocmVzID09IG51bGwgJiYgdHlwZSA9PSBcInN1cnZleVwiKSB7XG4gICAgICByZXMgPSBuZXcgU3VydmV5LlN1cnZleSgpO1xuICAgIH1cbiAgICB0aGlzLmFzc2lnblByb3BlcnRpZXMocmVzKTtcbiAgICBpZiAodHlwZSA9PSBcIm1hdHJpeGRyb3Bkb3duY29sdW1uXCIpIHtcbiAgICAgIHJlc1tcImNvbE93bmVyXCJdID0gdGhpcy5vYmpbXCJjb2xPd25lclwiXTtcbiAgICB9XG4gICAgaWYgKHR5cGUgIT0gXCJzdXJ2ZXlcIikge1xuICAgICAgaWYgKCEhcmVzW1wic2V0U3VydmV5SW1wbFwiXSkge1xuICAgICAgICByZXNbXCJzZXRTdXJ2ZXlJbXBsXCJdKHRoaXMub2JqW1wic3VydmV5XCJdKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICghIXRoaXMub2JqW1wic3VydmV5XCJdICYmICFyZXNbXCJzdXJ2ZXlcIl0pIHtcbiAgICAgICAgICByZXNbXCJzdXJ2ZXlcIl0gPSB0aGlzLm9ialtcInN1cnZleVwiXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoISF0aGlzLm9ialtcInBhcmVudFwiXSkge1xuICAgICAgcmVzW1wicGFyZW50XCJdID0gdGhpcy5vYmpbXCJwYXJlbnRcIl07XG4gICAgfVxuICAgIHJlc1tcImlzQ29weVwiXSA9IHRydWU7XG4gICAgcmVzW1wib3JpZ2lvbmFsT2JqXCJdID0gdGhpcy5vYmo7XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuICBwcml2YXRlIGFzc2lnblByb3BlcnRpZXMob2JqOiBhbnkpIHtcbiAgICBuZXcgU3VydmV5Lkpzb25PYmplY3QoKS50b09iamVjdCh0aGlzLmdldE9iakpzb24oKSwgb2JqKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0T2JqSnNvbigpOiBhbnkge1xuICAgIHZhciBqc29uT2JqID0gbmV3IFN1cnZleS5Kc29uT2JqZWN0KCk7XG4gICAganNvbk9iai5saWdodFNlcmlhbGl6aW5nID0gdHJ1ZTtcbiAgICByZXR1cm4ganNvbk9iai50b0pzb25PYmplY3QodGhpcy5vYmopO1xuICB9XG59XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvcHJvcGVydHlFZGl0b3JzL2VkaXRhYmxlT2JqZWN0LnRzIiwiaW1wb3J0ICogYXMga28gZnJvbSBcImtub2Nrb3V0XCI7XG5pbXBvcnQgKiBhcyBTdXJ2ZXkgZnJvbSBcInN1cnZleS1rbm9ja291dFwiO1xuaW1wb3J0IHsgcmVnaXN0ZXJBZG9ybmVyIH0gZnJvbSBcIi4uL3N1cnZleWpzT2JqZWN0c1wiO1xuaW1wb3J0IHsgZWRpdG9yTG9jYWxpemF0aW9uIH0gZnJvbSBcIi4uL2VkaXRvckxvY2FsaXphdGlvblwiO1xuaW1wb3J0IFNvcnRhYmxlIGZyb20gXCJzb3J0YWJsZWpzXCI7XG5pbXBvcnQgeyBUaXRsZUlucGxhY2VFZGl0b3IgfSBmcm9tIFwiLi90aXRsZS1lZGl0b3JcIjtcbmltcG9ydCB7IFN1cnZleUNyZWF0b3IgfSBmcm9tIFwiLi4vZWRpdG9yXCI7XG5pbXBvcnQgeyBnZXROZXh0VmFsdWUsIGZpbmRQYXJlbnROb2RlIH0gZnJvbSBcIi4uL3V0aWxzL3V0aWxzXCI7XG5cbmltcG9ydCBcIi4vaXRlbS1lZGl0b3Iuc2Nzc1wiO1xuaW1wb3J0IHsgUXVlc3Rpb25TZWxlY3RCYXNlIH0gZnJvbSBcInN1cnZleS1rbm9ja291dFwiO1xudmFyIHRlbXBsYXRlSHRtbCA9IHJlcXVpcmUoXCJodG1sLWxvYWRlcj9pbnRlcnBvbGF0ZSF2YWwtbG9hZGVyIS4vaXRlbS1lZGl0b3IuaHRtbFwiKTtcblxuY2xhc3MgSXRlbUlucGxhY2VFZGl0b3IgZXh0ZW5kcyBUaXRsZUlucGxhY2VFZGl0b3Ige1xuICBjb25zdHJ1Y3RvcihcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgcHJpdmF0ZSBxdWVzdGlvbjogUXVlc3Rpb25TZWxlY3RCYXNlLFxuICAgIHByaXZhdGUgaXRlbSxcbiAgICByb290RWxlbWVudCxcbiAgICBwcml2YXRlIGVkaXRvcjogU3VydmV5Q3JlYXRvclxuICApIHtcbiAgICBzdXBlcihuYW1lLCByb290RWxlbWVudCk7XG4gIH1cblxuICBkZWxldGVJdGVtKG1vZGVsOiBJdGVtSW5wbGFjZUVkaXRvciwgZXZlbnQpIHtcbiAgICBpZiAodGhpcy5xdWVzdGlvbi5vdGhlckl0ZW0gPT09IHRoaXMuaXRlbSkge1xuICAgICAgdGhpcy5xdWVzdGlvbi5oYXNPdGhlciA9IGZhbHNlO1xuICAgIH0gZWxzZSBpZiAodGhpcy5xdWVzdGlvbltcInNlbGVjdEFsbEl0ZW1cIl0gPT09IHRoaXMuaXRlbSkge1xuICAgICAgdGhpcy5xdWVzdGlvbltcImhhc1NlbGVjdEFsbFwiXSA9IGZhbHNlO1xuICAgIH0gZWxzZSBpZiAodGhpcy5xdWVzdGlvbltcIm5vbmVJdGVtXCJdID09PSB0aGlzLml0ZW0pIHtcbiAgICAgIHRoaXMucXVlc3Rpb25bXCJoYXNOb25lXCJdID0gZmFsc2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBpbmRleCA9IG1vZGVsLnF1ZXN0aW9uLmNob2ljZXMuaW5kZXhPZihtb2RlbC5pdGVtKTtcbiAgICAgIG1vZGVsLnF1ZXN0aW9uLmNob2ljZXMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICB9XG4gICAgdGhpcy5lZGl0b3Iub25RdWVzdGlvbkVkaXRvckNoYW5nZWQodGhpcy5xdWVzdGlvbik7XG4gIH1cblxuICBnZXQgaXNEcmFnZ2FibGUoKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMucXVlc3Rpb24ub3RoZXJJdGVtICE9PSB0aGlzLml0ZW0gJiZcbiAgICAgIHRoaXMucXVlc3Rpb25bXCJzZWxlY3RBbGxJdGVtXCJdICE9PSB0aGlzLml0ZW0gJiZcbiAgICAgIHRoaXMucXVlc3Rpb25bXCJub25lSXRlbVwiXSAhPT0gdGhpcy5pdGVtXG4gICAgKTtcbiAgfVxuXG4gIGdldCBpc0xhc3RJdGVtKCkge1xuICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uLmNob2ljZXMubGVuZ3RoID09PSAxO1xuICB9XG59XG5cbmtvLmNvbXBvbmVudHMucmVnaXN0ZXIoXCJpdGVtLWVkaXRvclwiLCB7XG4gIHZpZXdNb2RlbDoge1xuICAgIGNyZWF0ZVZpZXdNb2RlbDogKHBhcmFtcywgY29tcG9uZW50SW5mbykgPT4ge1xuICAgICAgdmFyIG1vZGVsID0gbmV3IEl0ZW1JbnBsYWNlRWRpdG9yKFxuICAgICAgICBwYXJhbXMudGFyZ2V0W3BhcmFtcy5uYW1lXSxcbiAgICAgICAgcGFyYW1zLnF1ZXN0aW9uLFxuICAgICAgICBwYXJhbXMuaXRlbSxcbiAgICAgICAgY29tcG9uZW50SW5mby5lbGVtZW50LFxuICAgICAgICBwYXJhbXMuZWRpdG9yXG4gICAgICApO1xuICAgICAgdmFyIHByb3BlcnR5ID0gU3VydmV5LlNlcmlhbGl6ZXIuZmluZFByb3BlcnR5KFxuICAgICAgICBwYXJhbXMudGFyZ2V0LmdldFR5cGUoKSxcbiAgICAgICAgcGFyYW1zLm5hbWVcbiAgICAgICk7XG4gICAgICBtb2RlbC52YWx1ZUNoYW5nZWQgPSBuZXdWYWx1ZSA9PiB7XG4gICAgICAgIHZhciBvcHRpb25zID0ge1xuICAgICAgICAgIHByb3BlcnR5TmFtZTogcHJvcGVydHkubmFtZSxcbiAgICAgICAgICBvYmo6IHBhcmFtcy5pdGVtLFxuICAgICAgICAgIHZhbHVlOiBuZXdWYWx1ZSxcbiAgICAgICAgICBuZXdWYWx1ZTogbnVsbCxcbiAgICAgICAgICBkb1ZhbGlkYXRpb246IGZhbHNlXG4gICAgICAgIH07XG4gICAgICAgIHBhcmFtcy5lZGl0b3Iub25WYWx1ZUNoYW5naW5nQ2FsbGJhY2sob3B0aW9ucyk7XG4gICAgICAgIG5ld1ZhbHVlID0gb3B0aW9ucy5uZXdWYWx1ZSA9PT0gbnVsbCA/IG9wdGlvbnMudmFsdWUgOiBvcHRpb25zLm5ld1ZhbHVlO1xuICAgICAgICBpZiAoIW5ld1ZhbHVlICYmIHBhcmFtcy5uYW1lID09IFwidmFsdWVcIikge1xuICAgICAgICAgIG5ld1ZhbHVlID0gcGFyYW1zLml0ZW0udmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgcGFyYW1zLnRhcmdldFtwYXJhbXMubmFtZV0gPSBuZXdWYWx1ZTtcbiAgICAgICAgcGFyYW1zLmVkaXRvci5vblByb3BlcnR5VmFsdWVDaGFuZ2VkKHByb3BlcnR5LCBwYXJhbXMudGFyZ2V0LCBuZXdWYWx1ZSk7XG4gICAgICAgICEhcGFyYW1zLnZhbHVlQ2hhbmdlZCAmJlxuICAgICAgICAgIHBhcmFtcy52YWx1ZUNoYW5nZWQocGFyYW1zLnRhcmdldCwgcHJvcGVydHkubmFtZSwgbmV3VmFsdWUpO1xuICAgICAgfTtcbiAgICAgIHJldHVybiBtb2RlbDtcbiAgICB9XG4gIH0sXG4gIHRlbXBsYXRlOiB0ZW1wbGF0ZUh0bWxcbn0pO1xuXG5leHBvcnQgdmFyIGl0ZW1BZG9ybmVyID0ge1xuICBpbnBsYWNlRWRpdEZvclZhbHVlczogZmFsc2UsXG4gIGdldE1hcmtlckNsYXNzOiBtb2RlbCA9PiB7XG4gICAgcmV0dXJuICEhbW9kZWwucGFyZW50ICYmXG4gICAgICAhIW1vZGVsLmNob2ljZXMgJiZcbiAgICAgIHR5cGVvZiBtb2RlbC5nZXRUeXBlID09PSBcImZ1bmN0aW9uXCIgJiZcbiAgICAgIG1vZGVsLmdldFR5cGUoKSAhPT0gXCJpbWFnZXBpY2tlclwiXG4gICAgICA/IFwiaXRlbV9lZGl0YWJsZVwiXG4gICAgICA6IFwiXCI7XG4gIH0sXG4gIGdldEVsZW1lbnROYW1lOiBtb2RlbCA9PiBcImNvbnRyb2xMYWJlbFwiLFxuICBhZnRlclJlbmRlcjogKGVsZW1lbnRzOiBIVE1MRWxlbWVudFtdLCBtb2RlbDogUXVlc3Rpb25TZWxlY3RCYXNlLCBlZGl0b3IpID0+IHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVsZW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBlbGVtZW50c1tpXS5vbmNsaWNrID0gZSA9PiBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB2YXIgZGVjb3JhdGlvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIpO1xuICAgICAgZGVjb3JhdGlvbi5jbGFzc05hbWUgPSBcInN2ZGEtYWRvcm5lci1yb290XCI7XG4gICAgICB2YXIgaXRlbVZhbHVlID0ga28uZGF0YUZvcihlbGVtZW50c1tpXSk7XG4gICAgICB2YXIgcHJvcGVydHlOYW1lID0gaXRlbUFkb3JuZXIuaW5wbGFjZUVkaXRGb3JWYWx1ZXMgPyBcInZhbHVlXCIgOiBcInRleHRcIjtcbiAgICAgIHZhciB0YXJnZXQgPSBpdGVtVmFsdWU7XG4gICAgICBpZiAoaXRlbVZhbHVlID09PSBtb2RlbFtcInNlbGVjdEFsbEl0ZW1cIl0pIHtcbiAgICAgICAgdGFyZ2V0ID0gbW9kZWw7XG4gICAgICAgIHByb3BlcnR5TmFtZSA9IFwic2VsZWN0QWxsVGV4dFwiO1xuICAgICAgfVxuICAgICAgaWYgKGl0ZW1WYWx1ZSA9PT0gbW9kZWxbXCJub25lSXRlbVZhbHVlXCJdKSB7XG4gICAgICAgIHRhcmdldCA9IG1vZGVsO1xuICAgICAgICBwcm9wZXJ0eU5hbWUgPSBcIm5vbmVUZXh0XCI7XG4gICAgICB9XG4gICAgICBpZiAoaXRlbVZhbHVlID09PSBtb2RlbFtcIm90aGVySXRlbVZhbHVlXCJdKSB7XG4gICAgICAgIHRhcmdldCA9IG1vZGVsO1xuICAgICAgICBwcm9wZXJ0eU5hbWUgPSBcIm90aGVyVGV4dFwiO1xuICAgICAgfVxuICAgICAgZGVjb3JhdGlvbi5pbm5lckhUTUwgPVxuICAgICAgICBcIjxpdGVtLWVkaXRvciBwYXJhbXM9J25hbWU6IFxcXCJcIiArXG4gICAgICAgIHByb3BlcnR5TmFtZSArXG4gICAgICAgIFwiXFxcIiwgdGFyZ2V0OiB0YXJnZXQsIGl0ZW06IGl0ZW0sIHF1ZXN0aW9uOiBxdWVzdGlvbiwgZWRpdG9yOiBlZGl0b3InPjwvaXRlbS1lZGl0b3I+XCI7XG4gICAgICBlbGVtZW50c1tpXS5hcHBlbmRDaGlsZChkZWNvcmF0aW9uKTtcbiAgICAgIGtvLmFwcGx5QmluZGluZ3MoXG4gICAgICAgIHtcbiAgICAgICAgICBpdGVtOiBpdGVtVmFsdWUsXG4gICAgICAgICAgcXVlc3Rpb246IG1vZGVsLFxuICAgICAgICAgIHRhcmdldDogdGFyZ2V0LFxuICAgICAgICAgIGVkaXRvcjogZWRpdG9yXG4gICAgICAgIH0sXG4gICAgICAgIGRlY29yYXRpb25cbiAgICAgICk7XG4gICAgICBrby50YXNrcy5ydW5FYXJseSgpO1xuICAgICAgZWRpdG9yLm9uQWRvcm5lclJlbmRlcmVkQ2FsbGJhY2soXG4gICAgICAgIG1vZGVsLFxuICAgICAgICBcImNob2ljZXMtbGFiZWxcIixcbiAgICAgICAgZGVjb3JhdGlvbixcbiAgICAgICAgaXRlbVZhbHVlXG4gICAgICApO1xuICAgIH1cbiAgfVxufTtcblxucmVnaXN0ZXJBZG9ybmVyKFwiY2hvaWNlcy1sYWJlbFwiLCBpdGVtQWRvcm5lcik7XG5cbmV4cG9ydCB2YXIgY3JlYXRlQWRkSXRlbUhhbmRsZXIgPSAoXG4gIHF1ZXN0aW9uOiBTdXJ2ZXkuUXVlc3Rpb25TZWxlY3RCYXNlLFxuICBvbkl0ZW1BZGRlZDogKGl0ZW1WYWx1ZTogU3VydmV5Lkl0ZW1WYWx1ZSkgPT4gdm9pZCxcbiAgb25JdGVtQWRkaW5nOiAoaXRlbVZhbHVlOiBTdXJ2ZXkuSXRlbVZhbHVlKSA9PiB2b2lkID0gbnVsbFxuKSA9PiAoKSA9PiB7XG4gIHZhciBuZXh0VmFsdWUgPSBudWxsO1xuICB2YXIgdmFsdWVzID0gcXVlc3Rpb24uY2hvaWNlcy5tYXAoZnVuY3Rpb24oaXRlbSkge1xuICAgIHJldHVybiBpdGVtLml0ZW1WYWx1ZTtcbiAgfSk7XG4gIHZhciBpdGVtVGV4dCA9IFN1cnZleS5zdXJ2ZXlMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKFwiY2hvaWNlc19JdGVtXCIpO1xuICBuZXh0VmFsdWUgPSBnZXROZXh0VmFsdWUoaXRlbVRleHQsIHZhbHVlcyk7XG5cbiAgdmFyIGl0ZW1WYWx1ZSA9IG5ldyBTdXJ2ZXkuSXRlbVZhbHVlKG5leHRWYWx1ZSk7XG4gIGl0ZW1WYWx1ZS5sb2NPd25lciA9IDxhbnk+e1xuICAgIGdldExvY2FsZTogKCkgPT4ge1xuICAgICAgaWYgKCEhcXVlc3Rpb25bXCJnZXRMb2NhbGVcIl0pIHJldHVybiBxdWVzdGlvbi5nZXRMb2NhbGUoKTtcbiAgICAgIHJldHVybiBcIlwiO1xuICAgIH0sXG4gICAgZ2V0TWFya2Rvd25IdG1sOiAodGV4dDogc3RyaW5nKSA9PiB7XG4gICAgICByZXR1cm4gdGV4dDtcbiAgICB9LFxuICAgIGdldFByb2Nlc3NlZFRleHQ6ICh0ZXh0OiBzdHJpbmcpID0+IHtcbiAgICAgIHJldHVybiB0ZXh0O1xuICAgIH1cbiAgfTtcbiAgISFvbkl0ZW1BZGRpbmcgJiYgb25JdGVtQWRkaW5nKGl0ZW1WYWx1ZSk7XG4gIHF1ZXN0aW9uLmNob2ljZXMgPSBxdWVzdGlvbi5jaG9pY2VzLmNvbmNhdChbaXRlbVZhbHVlXSk7XG4gIGl0ZW1WYWx1ZSA9IHF1ZXN0aW9uLmNob2ljZXMuZmlsdGVyKFxuICAgIGNob2ljZUl0ZW0gPT4gY2hvaWNlSXRlbS52YWx1ZSA9PT0gaXRlbVZhbHVlLnZhbHVlXG4gIClbMF07XG4gICEhb25JdGVtQWRkZWQgJiYgb25JdGVtQWRkZWQoaXRlbVZhbHVlKTtcbn07XG5cbmV4cG9ydCB2YXIgY3JlYXRlQWRkSXRlbUVsZW1lbnQgPSBoYW5kbGVyID0+IHtcbiAgdmFyIGFkZE5ldyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gIGFkZE5ldy50aXRsZSA9IGVkaXRvckxvY2FsaXphdGlvbi5nZXRTdHJpbmcoXCJwZS5hZGRJdGVtXCIpO1xuICBhZGROZXcuY2xhc3NOYW1lID1cbiAgICBcInN2X3RlY2huaWNhbCBzdmRhLWFkZC1uZXctaXRlbSBzdmQtcHJpbWFyeS1pY29uIHN2ZGEtYWRkLWN1c3RvbS1pdGVtXCI7XG4gIGFkZE5ldy5vbmNsaWNrID0gaGFuZGxlcjtcblxuICB2YXIgc3ZnRWxlbTogYW55ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKFxuICAgIFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICBcInN2Z1wiXG4gICk7XG4gIHN2Z0VsZW0uc2V0QXR0cmlidXRlKFwiY2xhc3NcIiwgXCJzdmQtc3ZnLWljb25cIik7XG4gIHN2Z0VsZW0uc3R5bGUud2lkdGggPSBcIjEycHhcIjtcbiAgc3ZnRWxlbS5zdHlsZS5oZWlnaHQgPSBcIjEycHhcIjtcbiAgdmFyIHVzZUVsZW06IGFueSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhcbiAgICBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgXCJ1c2VcIlxuICApO1xuICB1c2VFbGVtLnNldEF0dHJpYnV0ZU5TKFxuICAgIFwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGlua1wiLFxuICAgIFwieGxpbms6aHJlZlwiLFxuICAgIFwiI2ljb24taW5wbGFjZXBsdXNcIlxuICApO1xuICBzdmdFbGVtLmFwcGVuZENoaWxkKHVzZUVsZW0pO1xuICBhZGROZXcuYXBwZW5kQ2hpbGQoc3ZnRWxlbSk7XG4gIC8vIHZhciB0aXRsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIpO1xuICAvLyB0aXRsZS5pbm5lckhUTUwgPSBhZGROZXcudGl0bGU7XG4gIC8vIGFkZE5ldy5hcHBlbmRDaGlsZCh0aXRsZSk7XG4gIHJldHVybiBhZGROZXc7XG59O1xuXG5leHBvcnQgdmFyIGNyZWF0ZUN1c3RvbUVsZW1lbnQgPSAodGl0bGUsIGhhbmRsZXIpID0+IHtcbiAgdmFyIGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICBlbGVtZW50LnRpdGxlID0gdGl0bGU7XG4gIGVsZW1lbnQuY2xhc3NOYW1lID0gXCJzdl90ZWNobmljYWwgc3ZkYS1hZGQtbmV3LWl0ZW0gc3ZkYS1hZGQtY3VzdG9tLWl0ZW1cIjtcbiAgZWxlbWVudC5vbmNsaWNrID0gaGFuZGxlcjtcbiAgdmFyIHRpdGxlRWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic3BhblwiKTtcbiAgdGl0bGVFbC5pbm5lckhUTUwgPSBlbGVtZW50LnRpdGxlO1xuICBlbGVtZW50LmFwcGVuZENoaWxkKHRpdGxlRWwpO1xuICByZXR1cm4gZWxlbWVudDtcbn07XG5cbmV4cG9ydCB2YXIgaXRlbURyYWdnYWJsZUFkb3JuZXIgPSB7XG4gIGdldE1hcmtlckNsYXNzOiBtb2RlbCA9PiB7XG4gICAgcmV0dXJuICEhbW9kZWwucGFyZW50ICYmXG4gICAgICAhIW1vZGVsLmNob2ljZXMgJiZcbiAgICAgIHR5cGVvZiBtb2RlbC5nZXRUeXBlID09PSBcImZ1bmN0aW9uXCIgJiZcbiAgICAgIG1vZGVsLmdldFR5cGUoKSAhPT0gXCJpbWFnZXBpY2tlclwiXG4gICAgICA/IFwiaXRlbV9kcmFnZ2FibGVcIlxuICAgICAgOiBcIlwiO1xuICB9LFxuICBnZXRFbGVtZW50TmFtZTogbW9kZWwgPT4gXCJpdGVtXCIsXG4gIGFmdGVyUmVuZGVyOiAoXG4gICAgZWxlbWVudHM6IEhUTUxFbGVtZW50W10sXG4gICAgbW9kZWw6IFF1ZXN0aW9uU2VsZWN0QmFzZSxcbiAgICBlZGl0b3I6IFN1cnZleUNyZWF0b3JcbiAgKSA9PiB7XG4gICAgdmFyIGl0ZW1zUm9vdCA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZWxlbWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChpdGVtc1Jvb3QuaW5kZXhPZihlbGVtZW50c1tpXS5wYXJlbnRFbGVtZW50KSA9PT0gLTEpIHtcbiAgICAgICAgaXRlbXNSb290LnB1c2goZWxlbWVudHNbaV0ucGFyZW50RWxlbWVudCk7XG4gICAgICB9XG4gICAgfVxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZWxlbWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBpdGVtVmFsdWUgPSBrby5kYXRhRm9yKGVsZW1lbnRzW2ldKTtcbiAgICAgIGlmIChcbiAgICAgICAgaXRlbVZhbHVlID09PSBtb2RlbFtcInNlbGVjdEFsbEl0ZW1WYWx1ZVwiXSB8fFxuICAgICAgICBpdGVtVmFsdWUgPT09IG1vZGVsW1wibm9uZUl0ZW1WYWx1ZVwiXSB8fFxuICAgICAgICBpdGVtVmFsdWUgPT09IG1vZGVsW1wib3RoZXJJdGVtVmFsdWVcIl1cbiAgICAgICkge1xuICAgICAgICBlbGVtZW50c1tpXS5jbGFzc0xpc3QucmVtb3ZlKFwiaXRlbV9kcmFnZ2FibGVcIik7XG4gICAgICB9XG4gICAgfVxuICAgIGl0ZW1zUm9vdC5mb3JFYWNoKGl0ZW1Sb290ID0+XG4gICAgICBTb3J0YWJsZS5jcmVhdGUoaXRlbVJvb3QsIHtcbiAgICAgICAgaGFuZGxlOiBcIi5zdmRhLWRyYWctaGFuZGxlXCIsXG4gICAgICAgIGdyb3VwOiBtb2RlbC5pZCxcbiAgICAgICAgZHJhZ2dhYmxlOiBcIi5pdGVtX2RyYWdnYWJsZVwiLFxuICAgICAgICBhbmltYXRpb246IDE1MCxcbiAgICAgICAgb25FbmQ6IGV2dCA9PiB7XG4gICAgICAgICAgdmFyIG9sZEluZGV4ID0gZXZ0Lm9sZEluZGV4O1xuICAgICAgICAgIHZhciBuZXdJbmRleCA9IGV2dC5uZXdJbmRleDtcbiAgICAgICAgICB2YXIgY2hvaWNlcyA9IG1vZGVsLmNob2ljZXM7XG4gICAgICAgICAgdmFyIGNob2ljZSA9IGNob2ljZXNbZXZ0Lm9sZEluZGV4XTtcbiAgICAgICAgICBpZiAobW9kZWwuaGFzQ29sdW1ucykge1xuICAgICAgICAgICAgY2hvaWNlID0ga28uZGF0YUZvcihldnQuaXRlbSk7XG4gICAgICAgICAgICB2YXIgY29sdW1uQ29udGVudCA9IGtvLmRhdGFGb3IoZXZ0Lml0ZW0ucGFyZW50RWxlbWVudCk7XG4gICAgICAgICAgICB2YXIgaXRlbUJlZm9yZSA9IGNvbHVtbkNvbnRlbnQgJiYgY29sdW1uQ29udGVudFtuZXdJbmRleF07XG4gICAgICAgICAgICBvbGRJbmRleCA9IGNob2ljZXMuaW5kZXhPZihjaG9pY2UpO1xuICAgICAgICAgICAgbmV3SW5kZXggPSBjaG9pY2VzLmluZGV4T2YoaXRlbUJlZm9yZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNob2ljZXMuc3BsaWNlKG9sZEluZGV4LCAxKTtcbiAgICAgICAgICBjaG9pY2VzLnNwbGljZShuZXdJbmRleCwgMCwgY2hvaWNlKTtcbiAgICAgICAgICBlZGl0b3Iub25RdWVzdGlvbkVkaXRvckNoYW5nZWQobW9kZWwpO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICk7XG4gICAgdmFyIGFkZE5ldyA9IGNyZWF0ZUFkZEl0ZW1FbGVtZW50KFxuICAgICAgY3JlYXRlQWRkSXRlbUhhbmRsZXIoXG4gICAgICAgIG1vZGVsLFxuICAgICAgICBpdGVtVmFsdWUgPT4ge1xuICAgICAgICAgIGVkaXRvci5vblF1ZXN0aW9uRWRpdG9yQ2hhbmdlZChtb2RlbCk7XG4gICAgICAgIH0sXG4gICAgICAgIGl0ZW1WYWx1ZSA9PiB7XG4gICAgICAgICAgZWRpdG9yLm9uSXRlbVZhbHVlQWRkZWRDYWxsYmFjayhcbiAgICAgICAgICAgIG1vZGVsLFxuICAgICAgICAgICAgXCJjaG9pY2VzXCIsXG4gICAgICAgICAgICBpdGVtVmFsdWUsXG4gICAgICAgICAgICBtb2RlbC5jaG9pY2VzXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgKVxuICAgICk7XG4gICAgdmFyIHJhaXNlQ2hhbmdpbmdFdmVudCA9ICh0YXJnZXQ6IGFueSwgcHJvcGVydHlOYW1lOiBzdHJpbmcsIG5ld1ZhbHVlOiBhbnkpID0+IHtcbiAgICAgIHZhciBvcHRpb25zID0ge1xuICAgICAgICBwcm9wZXJ0eU5hbWU6IHByb3BlcnR5TmFtZSxcbiAgICAgICAgb2JqOiB0YXJnZXQsXG4gICAgICAgIHZhbHVlOiBuZXdWYWx1ZSxcbiAgICAgICAgbmV3VmFsdWU6IG51bGwsXG4gICAgICAgIGRvVmFsaWRhdGlvbjogZmFsc2VcbiAgICAgIH07XG4gICAgICBlZGl0b3Iub25WYWx1ZUNoYW5naW5nQ2FsbGJhY2sob3B0aW9ucyk7XG4gICAgICBuZXdWYWx1ZSA9IG9wdGlvbnMubmV3VmFsdWUgPT09IG51bGwgPyBvcHRpb25zLnZhbHVlIDogb3B0aW9ucy5uZXdWYWx1ZTtcbiAgICAgIHJldHVybiBuZXdWYWx1ZTtcbiAgICB9O1xuICAgIHZhciByYWlzZUNoYW5nZWRFdmVudCA9ICh0YXJnZXQ6IGFueSwgcHJvcGVydHlOYW1lOiBzdHJpbmcsIG5ld1ZhbHVlOiBhbnkpID0+IHtcbiAgICAgIGlmKHR5cGVvZiB0YXJnZXQuZ2V0VHlwZSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIHZhciBwcm9wZXJ0eSA9IFN1cnZleS5TZXJpYWxpemVyLmZpbmRQcm9wZXJ0eShcbiAgICAgICAgICB0YXJnZXQuZ2V0VHlwZSgpLFxuICAgICAgICAgIHByb3BlcnR5TmFtZVxuICAgICAgICApO1xuICAgICAgICBlZGl0b3Iub25Qcm9wZXJ0eVZhbHVlQ2hhbmdlZChwcm9wZXJ0eSwgdGFyZ2V0LCBuZXdWYWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICAgIGl0ZW1zUm9vdFswXS5hcHBlbmRDaGlsZChhZGROZXcpO1xuICAgIGlmIChlZGl0b3IuY2FuU2hvd09iamVjdFByb3BlcnR5KG1vZGVsLCBcImhhc090aGVyXCIpKSB7XG4gICAgICBpdGVtc1Jvb3RbMF0uYXBwZW5kQ2hpbGQoXG4gICAgICAgIGNyZWF0ZUN1c3RvbUVsZW1lbnQoXG4gICAgICAgICAgZWRpdG9yTG9jYWxpemF0aW9uLmdldFN0cmluZyhcInBlLmFkZE90aGVyXCIpLFxuICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgIHZhciBuZXdWYWx1ZSA9ICFtb2RlbC5oYXNPdGhlcjtcbiAgICAgICAgICAgIG5ld1ZhbHVlID0gcmFpc2VDaGFuZ2luZ0V2ZW50KG1vZGVsLCBcImhhc090aGVyXCIsIG5ld1ZhbHVlKTtcbiAgICAgICAgICAgIG1vZGVsLmhhc090aGVyID0gbmV3VmFsdWU7XG4gICAgICAgICAgICByYWlzZUNoYW5nZWRFdmVudChtb2RlbCwgXCJoYXNPdGhlclwiLCBuZXdWYWx1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICApXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoXG4gICAgICBtb2RlbC5oYXNTZWxlY3RBbGwgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgZWRpdG9yLmNhblNob3dPYmplY3RQcm9wZXJ0eShtb2RlbCwgXCJoYXNTZWxlY3RBbGxcIilcbiAgICApIHtcbiAgICAgIGl0ZW1zUm9vdFswXS5hcHBlbmRDaGlsZChcbiAgICAgICAgY3JlYXRlQ3VzdG9tRWxlbWVudChcbiAgICAgICAgICBlZGl0b3JMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKFwicGUuYWRkU2VsZWN0QWxsXCIpLFxuICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgIHZhciBuZXdWYWx1ZSA9ICFtb2RlbC5oYXNTZWxlY3RBbGw7XG4gICAgICAgICAgICBuZXdWYWx1ZSA9IHJhaXNlQ2hhbmdpbmdFdmVudChtb2RlbCwgXCJoYXNTZWxlY3RBbGxcIiwgbmV3VmFsdWUpO1xuICAgICAgICAgICAgbW9kZWwuaGFzU2VsZWN0QWxsID0gbmV3VmFsdWU7XG4gICAgICAgICAgICByYWlzZUNoYW5nZWRFdmVudChtb2RlbCwgXCJoYXNTZWxlY3RBbGxcIiwgbmV3VmFsdWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgKVxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKFxuICAgICAgbW9kZWwuaGFzTm9uZSAhPT0gdW5kZWZpbmVkICYmXG4gICAgICBlZGl0b3IuY2FuU2hvd09iamVjdFByb3BlcnR5KG1vZGVsLCBcImhhc05vbmVcIilcbiAgICApIHtcbiAgICAgIGl0ZW1zUm9vdFswXS5hcHBlbmRDaGlsZChcbiAgICAgICAgY3JlYXRlQ3VzdG9tRWxlbWVudChcbiAgICAgICAgICBlZGl0b3JMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKFwicGUuYWRkTm9uZVwiKSxcbiAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICB2YXIgbmV3VmFsdWUgPSAhbW9kZWwuaGFzTm9uZTtcbiAgICAgICAgICAgIG5ld1ZhbHVlID0gcmFpc2VDaGFuZ2luZ0V2ZW50KG1vZGVsLCBcImhhc05vbmVcIiwgbmV3VmFsdWUpO1xuICAgICAgICAgICAgbW9kZWwuaGFzTm9uZSA9IG5ld1ZhbHVlO1xuICAgICAgICAgICAgcmFpc2VDaGFuZ2VkRXZlbnQobW9kZWwsIFwiaGFzTm9uZVwiLCBuZXdWYWx1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICApXG4gICAgICApO1xuICAgIH1cbiAgfVxufTtcblxucmVnaXN0ZXJBZG9ybmVyKFwiY2hvaWNlcy1kcmFnZ2FibGVcIiwgaXRlbURyYWdnYWJsZUFkb3JuZXIpO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2Fkb3JuZXJzL2l0ZW0tZWRpdG9yLnRzIiwiaW1wb3J0ICogYXMga28gZnJvbSBcImtub2Nrb3V0XCI7XG5pbXBvcnQgKiBhcyBTdXJ2ZXkgZnJvbSBcInN1cnZleS1rbm9ja291dFwiO1xuXG5pbXBvcnQge1xuICBTdXJ2ZXlQcm9wZXJ0eUVkaXRvckJhc2UsXG4gIElTdXJ2ZXlPYmplY3RFZGl0b3JPcHRpb25zXG59IGZyb20gXCIuL3Byb3BlcnR5RWRpdG9ycy9wcm9wZXJ0eUVkaXRvckJhc2VcIjtcbmltcG9ydCB7IFN1cnZleVByb3BlcnR5RWRpdG9yRmFjdG9yeSB9IGZyb20gXCIuL3Byb3BlcnR5RWRpdG9ycy9wcm9wZXJ0eUVkaXRvckZhY3RvcnlcIjtcblxuZXhwb3J0IGRlY2xhcmUgdHlwZSBTdXJ2ZXlPblByb3BlcnR5Q2hhbmdlZENhbGxiYWNrID0gKFxuICBwcm9wZXJ0eTogU3VydmV5T2JqZWN0UHJvcGVydHksXG4gIG5ld1ZhbHVlOiBhbnlcbikgPT4gdm9pZDtcblxuZXhwb3J0IGNsYXNzIFN1cnZleU9iamVjdFByb3BlcnR5IHtcbiAgcHJpdmF0ZSBvYmplY3RWYWx1ZTogYW55O1xuICBwcml2YXRlIG9uUHJvcGVydHlDaGFuZ2VkOiBTdXJ2ZXlPblByb3BlcnR5Q2hhbmdlZENhbGxiYWNrO1xuICBwcml2YXRlIGlzQWN0aXZlVmFsdWU6IGJvb2xlYW47XG4gIHB1YmxpYyBvbkNoYW5nZWQ6IChuZXdWYWx1ZTogYW55KSA9PiBhbnk7XG4gIHB1YmxpYyBuYW1lOiBzdHJpbmc7XG4gIHB1YmxpYyBkaXNhYmxlZDogYm9vbGVhbjtcbiAgcHVibGljIGVkaXRvcjogU3VydmV5UHJvcGVydHlFZGl0b3JCYXNlO1xuICBwdWJsaWMgZWRpdG9yVHlwZTogc3RyaW5nO1xuICBwdWJsaWMgZWRpdG9yVHlwZVRlbXBsYXRlOiBzdHJpbmc7XG4gIHB1YmxpYyBiYXNlRWRpdG9yVHlwZTogc3RyaW5nO1xuICBwdWJsaWMgb25EZXBlbmRlZFByb3BlcnR5VXBkYXRlQ2FsbGJhY2s6IChwcm9wZXJ0eU5hbWU6IHN0cmluZykgPT4gdm9pZDtcbiAgcHVibGljIGtvVmlzaWJsZTogYW55O1xuXG4gIGtvSXNTaG93RWRpdG9yID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIHByb3BlcnR5OiBTdXJ2ZXkuSnNvbk9iamVjdFByb3BlcnR5LFxuICAgIG9uUHJvcGVydHlDaGFuZ2VkOiBTdXJ2ZXlPblByb3BlcnR5Q2hhbmdlZENhbGxiYWNrID0gbnVsbCxcbiAgICBwcm9wZXJ0eUVkaXRvck9wdGlvbnM6IElTdXJ2ZXlPYmplY3RFZGl0b3JPcHRpb25zID0gbnVsbFxuICApIHtcbiAgICB0aGlzLm9uUHJvcGVydHlDaGFuZ2VkID0gb25Qcm9wZXJ0eUNoYW5nZWQ7XG4gICAgdGhpcy5uYW1lID0gdGhpcy5wcm9wZXJ0eS5uYW1lO1xuICAgIHRoaXMuZGlzYWJsZWQgPSBwcm9wZXJ0eVtcInJlYWRPbmx5XCJdO1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICB2YXIgb25JdGVtQ2hhbmdlZCA9IGZ1bmN0aW9uKG5ld1ZhbHVlKSB7XG4gICAgICBzZWxmLm9uRWRpdG9yVmFsdWVDaGFuZ2VkKG5ld1ZhbHVlKTtcbiAgICB9O1xuICAgIHRoaXMuZWRpdG9yID0gU3VydmV5UHJvcGVydHlFZGl0b3JGYWN0b3J5LmNyZWF0ZUVkaXRvcihcbiAgICAgIHByb3BlcnR5LFxuICAgICAgb25JdGVtQ2hhbmdlZFxuICAgICk7XG4gICAgdGhpcy5lZGl0b3Iub25HZXRMb2NhbGUgPSB0aGlzLmRvT25HZXRMb2NhbGU7XG4gICAgdGhpcy5lZGl0b3Iub3B0aW9ucyA9IHByb3BlcnR5RWRpdG9yT3B0aW9ucztcbiAgICB0aGlzLmVkaXRvclR5cGUgPSB0aGlzLmVkaXRvci5lZGl0b3JUeXBlO1xuICAgIHRoaXMuZWRpdG9yVHlwZVRlbXBsYXRlID0gdGhpcy5lZGl0b3IuZWRpdG9yVHlwZVRlbXBsYXRlO1xuICAgIHRoaXMuaXNBY3RpdmUgPSBmYWxzZTtcbiAgICB0aGlzLmtvVmlzaWJsZSA9IGtvLm9ic2VydmFibGUodGhpcy5pc1Zpc2libGUoKSk7XG4gIH1cbiAgcHVibGljIGdldCBkaXNwbGF5TmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmVkaXRvci5kaXNwbGF5TmFtZTtcbiAgfVxuICBwdWJsaWMgZ2V0IHRpdGxlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZWRpdG9yLnRpdGxlO1xuICB9XG4gIHB1YmxpYyBnZXQgaXNBY3RpdmUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaXNBY3RpdmVWYWx1ZTtcbiAgfVxuICBwdWJsaWMgc2V0IGlzQWN0aXZlKHZhbDogYm9vbGVhbikge1xuICAgIGlmICh0aGlzLmlzQWN0aXZlID09IHZhbCkgcmV0dXJuO1xuICAgIHRoaXMuaXNBY3RpdmVWYWx1ZSA9IHZhbDtcbiAgICB0aGlzLmtvSXNTaG93RWRpdG9yKFxuICAgICAgIXRoaXMuZGlzYWJsZWQgJiYgKHRoaXMuZWRpdG9yLmFsd2F5c1Nob3dFZGl0b3IgfHwgdGhpcy5pc0FjdGl2ZSlcbiAgICApO1xuICB9XG4gIHB1YmxpYyBnZXQga29WYWx1ZSgpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLmVkaXRvci5rb1ZhbHVlO1xuICB9XG4gIHB1YmxpYyBnZXQga29UZXh0KCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuZWRpdG9yLmtvVGV4dDtcbiAgfVxuICBwdWJsaWMgZ2V0IGtvSXNEZWZhdWx0KCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuZWRpdG9yLmtvSXNEZWZhdWx0O1xuICB9XG4gIHByaXZhdGUgZG9PbkdldExvY2FsZSgpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLm9iamVjdCAmJiB0aGlzLm9iamVjdFtcImdldExvY2FsZVwiXSkgcmV0dXJuIHRoaXMub2JqZWN0LmdldExvY2FsZSgpO1xuICAgIHJldHVybiBcIlwiO1xuICB9XG4gIHB1YmxpYyBnZXQgb2JqZWN0KCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMub2JqZWN0VmFsdWU7XG4gIH1cbiAgcHVibGljIHNldCBvYmplY3QodmFsdWU6IGFueSkge1xuICAgIHRoaXMub2JqZWN0VmFsdWUgPSB2YWx1ZTtcbiAgICB0aGlzLmVkaXRvci5vYmplY3QgPSB2YWx1ZTtcbiAgICB0aGlzLnVwZGF0ZURlcGVuZGVkUHJvcGVydGllcygpO1xuICAgIHRoaXMudXBkYXRlRHluYW1pY1Byb3BlcnRpZXMoKTtcbiAgfVxuICBwdWJsaWMgdXBkYXRlRHluYW1pY1Byb3BlcnRpZXMoKSB7XG4gICAgdGhpcy5rb1Zpc2libGUodGhpcy5pc1Zpc2libGUoKSk7XG4gICAgdGhpcy5lZGl0b3IudXBkYXRlRHluYW1pY1Byb3BlcnRpZXMoKTtcbiAgfVxuICBwcm90ZWN0ZWQgaXNWaXNpYmxlKCk6IGJvb2xlYW4ge1xuICAgIGlmICghdGhpcy5vYmplY3QpIHJldHVybiB0cnVlO1xuICAgIHZhciBsYXlvdXQgPSAhIXRoaXMub2JqZWN0LmdldExheW91dFR5cGUgPyB0aGlzLm9iamVjdC5nZXRMYXlvdXRUeXBlKCkgOiBcIlwiO1xuICAgIGlmIChcbiAgICAgICEhdGhpcy5wcm9wZXJ0eS5pc1Zpc2libGUgJiZcbiAgICAgICEoPGFueT50aGlzLnByb3BlcnR5W1wiaXNWaXNpYmxlXCJdKShsYXlvdXQsIHRoaXMub2JqZWN0KVxuICAgIClcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBwcm90ZWN0ZWQgb25FZGl0b3JWYWx1ZUNoYW5nZWQobmV3VmFsdWUpIHtcbiAgICBpZiAodGhpcy5vYmplY3QpIHtcbiAgICAgIGlmICghIXRoaXMub25Qcm9wZXJ0eUNoYW5nZWQpIHRoaXMub25Qcm9wZXJ0eUNoYW5nZWQodGhpcywgbmV3VmFsdWUpO1xuICAgICAgaWYgKCEhdGhpcy5vbkNoYW5nZWQpIHRoaXMub25DaGFuZ2VkKG5ld1ZhbHVlKTtcbiAgICB9XG4gICAgdGhpcy51cGRhdGVEZXBlbmRlZFByb3BlcnRpZXMoKTtcbiAgfVxuICBwcml2YXRlIHVwZGF0ZURlcGVuZGVkUHJvcGVydGllcygpIHtcbiAgICBpZiAoIXRoaXMub2JqZWN0IHx8ICF0aGlzLm9uRGVwZW5kZWRQcm9wZXJ0eVVwZGF0ZUNhbGxiYWNrKSByZXR1cm47XG4gICAgaWYgKCF0aGlzLnByb3BlcnR5W1wiZ2V0RGVwZW5kZWRQcm9wZXJ0aWVzXCJdKSByZXR1cm47XG4gICAgdmFyIHByb3BzID0gdGhpcy5wcm9wZXJ0eVtcImdldERlcGVuZGVkUHJvcGVydGllc1wiXSgpO1xuICAgIGlmICghcHJvcHMpIHJldHVybjtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB0aGlzLm9uRGVwZW5kZWRQcm9wZXJ0eVVwZGF0ZUNhbGxiYWNrKHByb3BzW2ldKTtcbiAgICB9XG4gIH1cbn1cblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9vYmplY3RQcm9wZXJ0eS50cyIsImltcG9ydCAqIGFzIGtvIGZyb20gXCJrbm9ja291dFwiO1xuaW1wb3J0ICogYXMgU3VydmV5IGZyb20gXCJzdXJ2ZXkta25vY2tvdXRcIjtcbmltcG9ydCB7IGVkaXRvckxvY2FsaXphdGlvbiB9IGZyb20gXCIuLi9lZGl0b3JMb2NhbGl6YXRpb25cIjtcblxuZXhwb3J0IGludGVyZmFjZSBJU3VydmV5T2JqZWN0RWRpdG9yT3B0aW9ucyB7XG4gIGFsd2F5U2F2ZVRleHRJblByb3BlcnR5RWRpdG9yczogYm9vbGVhbjtcbiAgc2hvd0FwcGx5QnV0dG9uSW5FZGl0b3JzOiBib29sZWFuO1xuICB1c2VUYWJzSW5FbGVtZW50RWRpdG9yOiBib29sZWFuO1xuICByZWFkT25seTogYm9vbGVhbjtcbiAgZ2V0T2JqZWN0RGlzcGxheU5hbWUob2JqOiBTdXJ2ZXkuQmFzZSk6IHN0cmluZztcbiAgc2hvd1RpdGxlc0luRXhwcmVzc2lvbnM6IGJvb2xlYW47XG4gIG9uQ2FuU2hvd1Byb3BlcnR5Q2FsbGJhY2soXG4gICAgb2JqZWN0OiBhbnksXG4gICAgcHJvcGVydHk6IFN1cnZleS5Kc29uT2JqZWN0UHJvcGVydHlcbiAgKTogYm9vbGVhbjtcblxuICBvbklzRWRpdG9yUmVhZE9ubHlDYWxsYmFjayhcbiAgICBvYmo6IFN1cnZleS5CYXNlLFxuICAgIGVkaXRvcjogU3VydmV5UHJvcGVydHlFZGl0b3JCYXNlLFxuICAgIHJlYWRPbmx5OiBib29sZWFuXG4gICk6IGJvb2xlYW47XG4gIG9uSXRlbVZhbHVlQWRkZWRDYWxsYmFjayhcbiAgICBvYmo6IFN1cnZleS5CYXNlLFxuICAgIHByb3BlcnR5TmFtZTogc3RyaW5nLFxuICAgIGl0ZW1WYWx1ZTogU3VydmV5Lkl0ZW1WYWx1ZSxcbiAgICBpdGVtVmFsdWVzOiBBcnJheTxTdXJ2ZXkuSXRlbVZhbHVlPlxuICApO1xuICBvbk1hdHJpeERyb3Bkb3duQ29sdW1uQWRkZWRDYWxsYmFjayhcbiAgICBtYXRyaXg6IFN1cnZleS5RdWVzdGlvbixcbiAgICBjb2x1bW46IFN1cnZleS5NYXRyaXhEcm9wZG93bkNvbHVtbixcbiAgICBjb2x1bW5zOiBBcnJheTxTdXJ2ZXkuTWF0cml4RHJvcGRvd25Db2x1bW4+XG4gICk7XG4gIG9uU2V0UHJvcGVydHlFZGl0b3JPcHRpb25zQ2FsbGJhY2soXG4gICAgcHJvcGVydHlOYW1lOiBzdHJpbmcsXG4gICAgb2JqOiBTdXJ2ZXkuQmFzZSxcbiAgICBlZGl0b3JPcHRpb25zOiBhbnlcbiAgKTtcbiAgb25HZXRFcnJvclRleHRPblZhbGlkYXRpb25DYWxsYmFjayhcbiAgICBwcm9wZXJ0eU5hbWU6IHN0cmluZyxcbiAgICBvYmo6IFN1cnZleS5CYXNlLFxuICAgIHZhbHVlOiBhbnlcbiAgKTogc3RyaW5nO1xuICBvblZhbHVlQ2hhbmdpbmdDYWxsYmFjayhvcHRpb25zOiBhbnkpO1xuICBvblByb3BlcnR5RWRpdG9yT2JqZWN0U2V0Q2FsbGJhY2soXG4gICAgcHJvcGVydHlOYW1lOiBzdHJpbmcsXG4gICAgb2JqOiBTdXJ2ZXkuQmFzZSxcbiAgICBlZGl0b3I6IFN1cnZleVByb3BlcnR5RWRpdG9yQmFzZVxuICApO1xuICBvblByb3BlcnR5RWRpdG9yS2V5RG93bkNhbGxiYWNrKFxuICAgIHByb3BlcnR5TmFtZTogc3RyaW5nLFxuICAgIG9iajogU3VydmV5LkJhc2UsXG4gICAgZWRpdG9yOiBTdXJ2ZXlQcm9wZXJ0eUVkaXRvckJhc2UsXG4gICAgZXZlbnQ6IEtleWJvYXJkRXZlbnRcbiAgKTtcbiAgb25Qcm9wZXJ0eUVkaXRvck1vZGFsU2hvd0Rlc2NyaXB0aW9uQ2FsbGJhY2soXG4gICAgcHJvcGVydHlOYW1lOiBzdHJpbmcsXG4gICAgb2JqOiBTdXJ2ZXkuQmFzZVxuICApOiBhbnk7XG4gIG9uR2V0RWxlbWVudEVkaXRvclRpdGxlQ2FsbGJhY2sob2JqOiBTdXJ2ZXkuQmFzZSwgdGl0bGU6IHN0cmluZyk6IHN0cmluZztcbiAgb25Db25kaXRpb25WYWx1ZVN1cnZleUNyZWF0ZWRDYWxsQmFjayhcbiAgICB2YWx1ZVF1ZXN0aW9uTmFtZTogc3RyaW5nLFxuICAgIHByb3BlcnR5TmFtZTogc3RyaW5nLFxuICAgIG9iajogU3VydmV5LkJhc2UsXG4gICAgZWRpdG9yOiBTdXJ2ZXlQcm9wZXJ0eUVkaXRvckJhc2UsXG4gICAgc3VydmV5OiBTdXJ2ZXkuU3VydmV5XG4gICk7XG4gIG9uQ29uZGl0aW9uUXVlc3Rpb25zR2V0TGlzdENhbGxiYWNrKFxuICAgIHByb3BlcnR5TmFtZTogc3RyaW5nLFxuICAgIG9iajogU3VydmV5LkJhc2UsXG4gICAgZWRpdG9yOiBTdXJ2ZXlQcm9wZXJ0eUVkaXRvckJhc2UsXG4gICAgbGlzdDogYW55W11cbiAgKTtcbiAgY3JlYXRlU3VydmV5KFxuICAgIGpzb246IGFueSxcbiAgICByZWFzb246IHN0cmluZyxcbiAgICBzdXJ2ZXlUeXBlPzogbmV3IChqc29uOiBhbnkpID0+IFN1cnZleS5TdXJ2ZXlcbiAgKTtcbn1cblxuZXhwb3J0IGNsYXNzIFN1cnZleVByb3BlcnR5RWRpdG9yQmFzZSBpbXBsZW1lbnRzIFN1cnZleS5JTG9jYWxpemFibGVPd25lciB7XG4gIHByaXZhdGUgZWRpdGluZ1ZhbHVlXzogYW55ID0gbnVsbDtcbiAgcHJpdmF0ZSBpc0FwcGx5aW5OZXdWYWx1ZTogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIG9iamVjdFZhbHVlOiBhbnk7XG4gIHByaXZhdGUgdmFsdWVVcGRhdGluZ0NvdW50ZXI6IG51bWJlciA9IDA7XG4gIHByaXZhdGUgb3B0aW9uc1ZhbHVlOiBJU3VydmV5T2JqZWN0RWRpdG9yT3B0aW9ucyA9IG51bGw7XG4gIHByaXZhdGUgcHJvcGVydHlfOiBTdXJ2ZXkuSnNvbk9iamVjdFByb3BlcnR5O1xuICBwcml2YXRlIGlzUmVxdXJpZWRWYWx1ZTogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIHRpdGxlVmFsdWU6IHN0cmluZztcbiAgcHJpdmF0ZSBpc0N1c3RvbURpc3BsYXlOYW1lOiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgX2Rpc3BsYXlOYW1lVmFsdWUgPSBrby5vYnNlcnZhYmxlPHN0cmluZz4oKTtcbiAgcHJpdmF0ZSBnZXQgZGlzcGxheU5hbWVWYWx1ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fZGlzcGxheU5hbWVWYWx1ZSgpO1xuICB9O1xuICBwcml2YXRlIHNldCBkaXNwbGF5TmFtZVZhbHVlKHZhbCkge1xuICAgIHRoaXMuX2Rpc3BsYXlOYW1lVmFsdWUodmFsKTtcbiAgfTtcbiAgcHVibGljIGtvVmFsdWU6IGFueTtcbiAgcHVibGljIGtvVGV4dDogYW55O1xuICBwdWJsaWMga29Jc0RlZmF1bHQ6IGFueTtcbiAgcHVibGljIGtvSGFzRXJyb3I6IGFueTtcbiAgcHVibGljIGtvRXJyb3JUZXh0OiBhbnk7XG4gIHB1YmxpYyBrb0Rpc3BsYXlFcnJvcjogYW55O1xuICBwdWJsaWMgaXNUYWJQcm9wZXJ0eTogYm9vbGVhbiA9IGZhbHNlO1xuICBwdWJsaWMgaXNJbnBsYWNlUHJvcGVydHk6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHVibGljIHJlYWRPbmx5OiBhbnk7XG4gIHB1YmxpYyBrb01heExlbmd0aDogYW55O1xuICBwdWJsaWMga29NYXhWYWx1ZTogYW55O1xuICBwdWJsaWMga29NaW5WYWx1ZTogYW55O1xuICBwdWJsaWMgb25DaGFuZ2VkOiAobmV3VmFsdWU6IGFueSkgPT4gYW55O1xuICBwdWJsaWMgb25HZXRMb2NhbGU6ICgpID0+IHN0cmluZztcbiAgcHVibGljIG9uVmFsdWVVcGRhdGVkOiAobmV3VmFsdWU6IGFueSkgPT4gYW55O1xuICBwdWJsaWMgc2V0dXAoKSB7fVxuICBwdWJsaWMgYmVmb3JlU2hvdygpIHt9XG4gIGNvbnN0cnVjdG9yKHByb3BlcnR5OiBTdXJ2ZXkuSnNvbk9iamVjdFByb3BlcnR5KSB7XG4gICAgdGhpcy5wcm9wZXJ0eV8gPSBwcm9wZXJ0eTtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgdGhpcy5rb1ZhbHVlID0ga28ub2JzZXJ2YWJsZSgpO1xuICAgIHRoaXMua29WYWx1ZS5zdWJzY3JpYmUoZnVuY3Rpb24obmV3VmFsdWUpIHtcbiAgICAgIHNlbGYub25rb1ZhbHVlQ2hhbmdlZChuZXdWYWx1ZSk7XG4gICAgfSk7XG4gICAgdGhpcy5rb1RleHQgPSBrby5jb21wdXRlZCgoKSA9PiB7XG4gICAgICByZXR1cm4gc2VsZi5nZXRWYWx1ZVRleHQoc2VsZi5rb1ZhbHVlKCkpO1xuICAgIH0pO1xuICAgIHRoaXMua29Jc0RlZmF1bHQgPSBrby5jb21wdXRlZChmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBzZWxmLnByb3BlcnR5XG4gICAgICAgID8gc2VsZi5wcm9wZXJ0eS5pc0RlZmF1bHRWYWx1ZShzZWxmLmtvVmFsdWUoKSlcbiAgICAgICAgOiBmYWxzZTtcbiAgICB9KTtcbiAgICB0aGlzLmtvSGFzRXJyb3IgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcbiAgICB0aGlzLmtvRXJyb3JUZXh0ID0ga28ub2JzZXJ2YWJsZShcIlwiKTtcbiAgICB0aGlzLmtvRGlzcGxheUVycm9yID0ga28uY29tcHV0ZWQoZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gc2VsZi5rb0hhc0Vycm9yKCkgJiYgISFzZWxmLmtvRXJyb3JUZXh0KCk7XG4gICAgfSk7XG4gICAgdGhpcy5rb01heExlbmd0aCA9IGtvLmNvbXB1dGVkKGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuICEhc2VsZi5wcm9wZXJ0eSAmJlxuICAgICAgICAhIXNlbGYucHJvcGVydHlbXCJtYXhMZW5ndGhcIl0gJiZcbiAgICAgICAgc2VsZi5wcm9wZXJ0eVtcIm1heExlbmd0aFwiXSA+IDBcbiAgICAgICAgPyBzZWxmLnByb3BlcnR5W1wibWF4TGVuZ3RoXCJdXG4gICAgICAgIDogNTI0Mjg4O1xuICAgIH0pO1xuICAgIHRoaXMua29NYXhWYWx1ZSA9IGtvLmNvbXB1dGVkKGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuICEhc2VsZi5wcm9wZXJ0eSAmJiAhIXNlbGYucHJvcGVydHlbXCJtYXhWYWx1ZVwiXVxuICAgICAgICA/IHNlbGYucHJvcGVydHlbXCJtYXhWYWx1ZVwiXVxuICAgICAgICA6IFwiXCI7XG4gICAgfSk7XG4gICAgdGhpcy5rb01pblZhbHVlID0ga28uY29tcHV0ZWQoZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gISFzZWxmLnByb3BlcnR5ICYmICEhc2VsZi5wcm9wZXJ0eVtcIm1pblZhbHVlXCJdXG4gICAgICAgID8gc2VsZi5wcm9wZXJ0eVtcIm1pblZhbHVlXCJdXG4gICAgICAgIDogXCJcIjtcbiAgICB9KTtcbiAgICB0aGlzLnNldElzUmVxdWlyZWQoKTtcbiAgICB0aGlzLnNldFRpdGxlQW5kRGlzcGxheU5hbWUoKTtcbiAgICB0aGlzLnJlYWRPbmx5ID0ga28ub2JzZXJ2YWJsZSh0aGlzLmdldFJlYWRPbmx5KCkpO1xuICB9XG4gIHB1YmxpYyBnZXQgZWRpdG9yVHlwZSgpOiBzdHJpbmcge1xuICAgIHRocm93IFwiZWRpdG9yVHlwZSBpcyBub3QgZGVmaW5lZFwiO1xuICB9XG4gIHB1YmxpYyBnZXQgZWRpdG9yVHlwZVRlbXBsYXRlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZWRpdG9yVHlwZTtcbiAgfVxuICBwdWJsaWMgZ2V0IHByb3BlcnR5KCk6IFN1cnZleS5Kc29uT2JqZWN0UHJvcGVydHkge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnR5XztcbiAgfVxuICBwdWJsaWMgZ2V0IGRlZmF1bHRWYWx1ZSgpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnR5LmRlZmF1bHRWYWx1ZTtcbiAgfVxuICBwdWJsaWMgZ2V0IGVkaXRhYmxlUHJvcGVydHlOYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydHkgPyB0aGlzLnByb3BlcnR5Lm5hbWUgOiBcIlwiO1xuICB9XG4gIHByaXZhdGUgZ2V0UmVhZE9ubHkoKTogYm9vbGVhbiB7XG4gICAgdmFyIHJlcyA9IHRoaXMucHJvcGVydHkgPyB0aGlzLnByb3BlcnR5LnJlYWRPbmx5IDogZmFsc2U7XG4gICAgaWYgKCEhdGhpcy5vcHRpb25zICYmICEhdGhpcy5wcm9wZXJ0eSAmJiAhIXRoaXMub2JqZWN0KSB7XG4gICAgICByZXMgPSB0aGlzLm9wdGlvbnMub25Jc0VkaXRvclJlYWRPbmx5Q2FsbGJhY2sodGhpcy5vYmplY3QsIHRoaXMsIHJlcyk7XG4gICAgfVxuICAgIHJldHVybiByZXM7XG4gIH1cbiAgcHVibGljIGdldCBhbHdheXNTaG93RWRpdG9yKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBwdWJsaWMgZ2V0IHRpdGxlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMudGl0bGVWYWx1ZTtcbiAgfVxuICBwdWJsaWMgZ2V0IGlzRGlwbGF5TmFtZVZpc2libGUoKSB7XG4gICAgcmV0dXJuIChcbiAgICAgICghdGhpcy5pc1RhYlByb3BlcnR5IHx8ICF0aGlzLmlzTW9kYWwpICYmXG4gICAgICAhdGhpcy5pc0lucGxhY2VQcm9wZXJ0eSAmJlxuICAgICAgdGhpcy5kaXNwbGF5TmFtZSAhPT0gXCIuXCJcbiAgICApO1xuICB9XG4gIHB1YmxpYyBnZXQgZGlzcGxheU5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5kaXNwbGF5TmFtZVZhbHVlO1xuICB9XG4gIHB1YmxpYyBzZXQgZGlzcGxheU5hbWUodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLmlzQ3VzdG9tRGlzcGxheU5hbWUgPSB0cnVlO1xuICAgIHRoaXMuZGlzcGxheU5hbWVWYWx1ZSA9IHZhbDtcbiAgfVxuICBwdWJsaWMgZ2V0IHNob3dEaXNwbGF5TmFtZU9uVG9wKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmlzRGlwbGF5TmFtZVZpc2libGUgJiYgdGhpcy5jYW5TaG93RGlzcGxheU5hbWVPblRvcDtcbiAgfVxuICBwdWJsaWMgZ2V0IGNhblNob3dEaXNwbGF5TmFtZU9uVG9wKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHB1YmxpYyBnZXQgY29udGVudFRlbXBsYXRlTmFtZSgpOiBzdHJpbmcge1xuICAgIHZhciByZXMgPSBcInByb3BlcnR5ZWRpdG9yXCI7XG4gICAgaWYgKHRoaXMuaXNNb2RhbCkge1xuICAgICAgcmVzICs9IFwiLW1vZGFsY29udGVudFwiO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXMgKz0gXCItXCIgKyB0aGlzLmVkaXRvclR5cGVUZW1wbGF0ZTtcbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuICBwdWJsaWMgZ2V0IGlzTW9kYWwoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHB1YmxpYyBnZXQgb2JqZWN0KCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMub2JqZWN0VmFsdWU7XG4gIH1cbiAgcHVibGljIHNldCBvYmplY3QodmFsdWU6IGFueSkge1xuICAgIHRoaXMuc2V0T2JqZWN0Q29yZSh2YWx1ZSk7XG4gIH1cbiAgcHJvdGVjdGVkIHNldE9iamVjdENvcmUodmFsdWU6IGFueSkge1xuICAgIHRoaXMub2JqZWN0VmFsdWUgPSB2YWx1ZTtcbiAgICBpZiAodHlwZW9mIHZhbHVlLnJlZ2lzdGVyRnVuY3Rpb25PblByb3BlcnR5VmFsdWVDaGFuZ2VkID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgIHZhbHVlLnJlZ2lzdGVyRnVuY3Rpb25PblByb3BlcnR5VmFsdWVDaGFuZ2VkKFxuICAgICAgICB0aGlzLnByb3BlcnR5Lm5hbWUsXG4gICAgICAgICgpID0+IHRoaXMudXBkYXRlVmFsdWUoKSxcbiAgICAgICAgdGhpcy5wcm9wZXJ0eS5uYW1lXG4gICAgICApO1xuICAgIH1cbiAgICB0aGlzLnNldElzUmVxdWlyZWQoKTtcbiAgICB0aGlzLnNldFRpdGxlQW5kRGlzcGxheU5hbWUoKTtcbiAgICB0aGlzLnNldE9iamVjdCh0aGlzLm9iamVjdCk7XG4gICAgdGhpcy51cGRhdGVWYWx1ZSgpO1xuICAgIGlmICh0aGlzLm9wdGlvbnMgJiYgdGhpcy5wcm9wZXJ0eSkge1xuICAgICAgdGhpcy5vcHRpb25zLm9uUHJvcGVydHlFZGl0b3JPYmplY3RTZXRDYWxsYmFjayhcbiAgICAgICAgdGhpcy5wcm9wZXJ0eS5uYW1lLFxuICAgICAgICB0aGlzLm9iamVjdCxcbiAgICAgICAgdGhpc1xuICAgICAgKTtcbiAgICAgIHRoaXMucmVhZE9ubHkodGhpcy5nZXRSZWFkT25seSgpKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZ2V0VmFsdWVUZXh0KHZhbHVlOiBhbnkpOiBzdHJpbmcge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICBwdWJsaWMgZ2V0IGVkaXRpbmdWYWx1ZSgpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLmVkaXRpbmdWYWx1ZV87XG4gIH1cbiAgcHVibGljIHNldCBlZGl0aW5nVmFsdWUodmFsdWU6IGFueSkge1xuICAgIHZhbHVlID0gdGhpcy5nZXRDb3JyZWN0ZWRWYWx1ZSh2YWx1ZSk7XG4gICAgdGhpcy5zZXRWYWx1ZUNvcmUodmFsdWUpO1xuICAgIHRoaXMub25WYWx1ZUNoYW5nZWQoKTtcbiAgfVxuICBwdWJsaWMgaGFzRXJyb3IoKTogYm9vbGVhbiB7XG4gICAgdGhpcy5rb0hhc0Vycm9yKHRoaXMuY2hlY2tGb3JFcnJvcnMoKSk7XG4gICAgcmV0dXJuIHRoaXMua29IYXNFcnJvcigpO1xuICB9XG4gIHB1YmxpYyBnZXRMb2NTdHJpbmcobmFtZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGVkaXRvckxvY2FsaXphdGlvbi5nZXRTdHJpbmcobmFtZSk7XG4gIH1cbiAgcHVibGljIGhhc0xvY1N0cmluZyhuYW1lOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gZWRpdG9yTG9jYWxpemF0aW9uLmhhc1N0cmluZyhuYW1lKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IGlzQ3VycmVudFZhbHVlRW1wdHkoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNWYWx1ZUVtcHR5KHRoaXMua29WYWx1ZSgpKTtcbiAgfVxuICBwcm90ZWN0ZWQgY2hlY2tGb3JFcnJvcnMoKTogYm9vbGVhbiB7XG4gICAgdmFyIGVycm9yVGV4dCA9IFwiXCI7XG4gICAgaWYgKHRoaXMuaXNSZXF1aXJlZCB8fCB0aGlzLmNoZWNrRm9ySXRlbVZhbHVlKCkpIHtcbiAgICAgIHZhciBlciA9IHRoaXMuaXNDdXJyZW50VmFsdWVFbXB0eTtcbiAgICAgIGlmIChlcikge1xuICAgICAgICBlcnJvclRleHQgPSB0aGlzLmdldExvY1N0cmluZyhcInBlLnByb3BlcnR5SXNFbXB0eVwiKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKFxuICAgICAgIWVycm9yVGV4dCAmJlxuICAgICAgdGhpcy5wcm9wZXJ0eSAmJlxuICAgICAgdGhpcy5vcHRpb25zICYmXG4gICAgICB0aGlzLm9wdGlvbnMub25HZXRFcnJvclRleHRPblZhbGlkYXRpb25DYWxsYmFja1xuICAgICkge1xuICAgICAgZXJyb3JUZXh0ID0gdGhpcy5vcHRpb25zLm9uR2V0RXJyb3JUZXh0T25WYWxpZGF0aW9uQ2FsbGJhY2soXG4gICAgICAgIHRoaXMucHJvcGVydHkubmFtZSxcbiAgICAgICAgdGhpcy5vYmplY3QsXG4gICAgICAgIHRoaXMuZWRpdGluZ1ZhbHVlXG4gICAgICApO1xuICAgIH1cbiAgICB0aGlzLmtvRXJyb3JUZXh0KGVycm9yVGV4dCk7XG4gICAgcmV0dXJuIGVycm9yVGV4dCAhPT0gXCJcIjtcbiAgfVxuICBwcml2YXRlIGNoZWNrRm9ySXRlbVZhbHVlKCkge1xuICAgIC8vVE9ETyBQcm9ibGVtIGlzIGluIDg4MmNhM2FjIGNvbW1pdC4gSXRlbVZhbHVlIHdpdGhvdXQgdmFsdWUgc2hvdWxkIGJlIGludmFsaWQuIE5lZWQgdG8gYmV0dGVyIGZpeCBmb3IgdGhlIHByb2JsZW0uXG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMucHJvcGVydHkgJiZcbiAgICAgIHRoaXMucHJvcGVydHkubmFtZSA9PT0gXCJ2YWx1ZVwiICYmXG4gICAgICB0aGlzLm9iamVjdFZhbHVlICYmXG4gICAgICB0eXBlb2YgdGhpcy5vYmplY3RWYWx1ZS5nZXRUeXBlID09PSBcImZ1bmN0aW9uXCIgJiZcbiAgICAgIHRoaXMub2JqZWN0VmFsdWUuZ2V0VHlwZSgpID09PSBcIml0ZW12YWx1ZVwiXG4gICAgKTtcbiAgfVxuICBwdWJsaWMgZ2V0IGlzUmVxdWlyZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaXNSZXF1cmllZFZhbHVlO1xuICB9XG4gIHByb3RlY3RlZCBzZXRJc1JlcXVpcmVkKCkge1xuICAgIHRoaXMuaXNSZXF1cmllZFZhbHVlID0gISF0aGlzLnByb3BlcnR5ID8gdGhpcy5wcm9wZXJ0eS5pc1JlcXVpcmVkIDogZmFsc2U7XG4gIH1cbiAgcHJvdGVjdGVkIHNldFRpdGxlQW5kRGlzcGxheU5hbWUoKSB7XG4gICAgaWYgKHRoaXMuaXNDdXN0b21EaXNwbGF5TmFtZSkgcmV0dXJuO1xuICAgIHRoaXMuZGlzcGxheU5hbWVWYWx1ZSA9IHRoaXMucHJvcGVydHkgPyB0aGlzLnByb3BlcnR5Lm5hbWUgOiBcIlwiO1xuICAgIHRoaXMudGl0bGVWYWx1ZSA9IFwiXCI7XG4gICAgaWYgKCF0aGlzLnByb3BlcnR5KSByZXR1cm47XG4gICAgdmFyIGxvY05hbWUgPSB0aGlzLnByb3BlcnR5Lm5hbWU7XG4gICAgdGhpcy5kaXNwbGF5TmFtZVZhbHVlID0gZWRpdG9yTG9jYWxpemF0aW9uLmdldFByb3BlcnR5TmFtZShsb2NOYW1lKTtcbiAgICB2YXIgdGl0bGUgPSBlZGl0b3JMb2NhbGl6YXRpb24uZ2V0UHJvcGVydHlUaXRsZShsb2NOYW1lKTtcbiAgICB0aGlzLnRpdGxlVmFsdWUgPSB0aXRsZTtcbiAgfVxuICBwcm90ZWN0ZWQgb25CZWZvcmVBcHBseSgpIHt9XG4gIHB1YmxpYyBhcHBseSgpOiBib29sZWFuIHtcbiAgICB0aGlzLm9uQmVmb3JlQXBwbHkoKTtcbiAgICBpZiAodGhpcy5oYXNFcnJvcigpKSByZXR1cm4gZmFsc2U7XG4gICAgdGhpcy5pc0FwcGx5aW5OZXdWYWx1ZSA9IHRydWU7XG4gICAgdGhpcy5rb1ZhbHVlKHRoaXMuZWRpdGluZ1ZhbHVlKTtcbiAgICB0aGlzLmlzQXBwbHlpbk5ld1ZhbHVlID0gZmFsc2U7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcHVibGljIGdldCBsb2NhbGUoKTogc3RyaW5nIHtcbiAgICBpZiAodGhpcy5vbkdldExvY2FsZSkgcmV0dXJuIHRoaXMub25HZXRMb2NhbGUoKTtcbiAgICByZXR1cm4gXCJcIjtcbiAgfVxuICBwdWJsaWMgZ2V0TG9jYWxlKCkge1xuICAgIHJldHVybiB0aGlzLmxvY2FsZTtcbiAgfVxuICBwdWJsaWMgZ2V0TWFya2Rvd25IdG1sKHRleHQ6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRleHQ7XG4gIH1cbiAgcHVibGljIGdldFByb2Nlc3NlZFRleHQodGV4dDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGV4dDtcbiAgfVxuICBwdWJsaWMgZ2V0IG9wdGlvbnMoKTogSVN1cnZleU9iamVjdEVkaXRvck9wdGlvbnMge1xuICAgIHJldHVybiB0aGlzLm9wdGlvbnNWYWx1ZTtcbiAgfVxuICBwdWJsaWMgc2V0IG9wdGlvbnModmFsdWU6IElTdXJ2ZXlPYmplY3RFZGl0b3JPcHRpb25zKSB7XG4gICAgdGhpcy5vcHRpb25zVmFsdWUgPSB2YWx1ZTtcbiAgICB0aGlzLm9uT3B0aW9uc0NoYW5nZWQoKTtcbiAgfVxuICBwcm90ZWN0ZWQgb25PcHRpb25zQ2hhbmdlZCgpIHt9XG4gIHByb3RlY3RlZCBzZXRWYWx1ZUNvcmUodmFsdWU6IGFueSkge1xuICAgIHRoaXMuZWRpdGluZ1ZhbHVlXyA9IHZhbHVlO1xuICB9XG4gIHB1YmxpYyBzZXRPYmplY3QodmFsdWU6IGFueSkge1xuICAgIGlmICh0aGlzLm9wdGlvbnMpIHtcbiAgICAgIHZhciBlZGl0b3JPcHRpb25zID0gdGhpcy5jcmVhdGVFZGl0b3JPcHRpb25zKCk7XG4gICAgICB0aGlzLm9wdGlvbnMub25TZXRQcm9wZXJ0eUVkaXRvck9wdGlvbnNDYWxsYmFjayhcbiAgICAgICAgdGhpcy5lZGl0YWJsZVByb3BlcnR5TmFtZSxcbiAgICAgICAgdmFsdWUsXG4gICAgICAgIGVkaXRvck9wdGlvbnNcbiAgICAgICk7XG4gICAgICB0aGlzLm9uU2V0RWRpdG9yT3B0aW9ucyhlZGl0b3JPcHRpb25zKTtcbiAgICB9XG4gIH1cbiAgcHJvdGVjdGVkIGNyZWF0ZUVkaXRvck9wdGlvbnMoKTogYW55IHtcbiAgICByZXR1cm4ge307XG4gIH1cbiAgcHJvdGVjdGVkIG9uU2V0RWRpdG9yT3B0aW9ucyhlZGl0b3JPcHRpb25zOiBhbnkpIHt9XG4gIHByb3RlY3RlZCBvblZhbHVlQ2hhbmdlZCgpIHt9XG4gIHByb3RlY3RlZCBnZXRDb3JyZWN0ZWRWYWx1ZSh2YWx1ZTogYW55KTogYW55IHtcbiAgICBpZiAoIXRoaXMucHJvcGVydHkpIHJldHVybiB2YWx1ZTtcbiAgICBpZiAoIVN1cnZleS5IZWxwZXJzLmlzVmFsdWVFbXB0eSh0aGlzLnByb3BlcnR5W1wibWluVmFsdWVcIl0pKSB7XG4gICAgICBpZiAodmFsdWUgPCB0aGlzLnByb3BlcnR5W1wibWluVmFsdWVcIl0pIHJldHVybiB0aGlzLnByb3BlcnR5W1wibWluVmFsdWVcIl07XG4gICAgfVxuICAgIGlmICghU3VydmV5LkhlbHBlcnMuaXNWYWx1ZUVtcHR5KHRoaXMucHJvcGVydHlbXCJtYXhWYWx1ZVwiXSkpIHtcbiAgICAgIGlmICh2YWx1ZSA+IHRoaXMucHJvcGVydHlbXCJtYXhWYWx1ZVwiXSkgcmV0dXJuIHRoaXMucHJvcGVydHlbXCJtYXhWYWx1ZVwiXTtcbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG4gIHByb3RlY3RlZCBiZWdpblZhbHVlVXBkYXRpbmcoKSB7XG4gICAgdGhpcy52YWx1ZVVwZGF0aW5nQ291bnRlcisrO1xuICB9XG4gIHByb3RlY3RlZCBlbmRWYWx1ZVVwZGF0aW5nKCkge1xuICAgIGlmICh0aGlzLnZhbHVlVXBkYXRpbmdDb3VudGVyID4gMCkge1xuICAgICAgdGhpcy52YWx1ZVVwZGF0aW5nQ291bnRlci0tO1xuICAgIH1cbiAgfVxuICBwcm90ZWN0ZWQgdXBkYXRlVmFsdWUoKSB7XG4gICAgdGhpcy5iZWdpblZhbHVlVXBkYXRpbmcoKTtcbiAgICB0aGlzLmtvVmFsdWUodGhpcy5nZXRWYWx1ZSgpKTtcbiAgICB0aGlzLmVkaXRpbmdWYWx1ZSA9IHRoaXMua29WYWx1ZS5wZWVrKCk7XG4gICAgaWYgKHRoaXMub25WYWx1ZVVwZGF0ZWQpIHRoaXMub25WYWx1ZVVwZGF0ZWQodGhpcy5lZGl0aW5nVmFsdWUpO1xuICAgIHRoaXMuZW5kVmFsdWVVcGRhdGluZygpO1xuICB9XG4gIHByb3RlY3RlZCBnZXRWYWx1ZSgpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnR5ICYmIHRoaXMub2JqZWN0XG4gICAgICA/IHRoaXMucHJvcGVydHkuZ2V0UHJvcGVydHlWYWx1ZSh0aGlzLm9iamVjdClcbiAgICAgIDogbnVsbDtcbiAgfVxuICBwcml2YXRlIGlza29WYWx1ZUNoYW5naW5nOiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgb25rb1ZhbHVlQ2hhbmdlZChuZXdWYWx1ZTogYW55KSB7XG4gICAgaWYgKHRoaXMudmFsdWVVcGRhdGluZ0NvdW50ZXIgPiAwIHx8IHRoaXMuaXNrb1ZhbHVlQ2hhbmdpbmcpIHJldHVybjtcbiAgICB0aGlzLmlza29WYWx1ZUNoYW5naW5nID0gdHJ1ZTtcbiAgICBuZXdWYWx1ZSA9IHRoaXMuZ2V0Q29ycmVjdGVkVmFsdWUobmV3VmFsdWUpO1xuICAgIGlmICh0aGlzLm9wdGlvbnMgJiYgdGhpcy5wcm9wZXJ0eSAmJiB0aGlzLm9iamVjdCkge1xuICAgICAgdmFyIG9wdGlvbnMgPSB7XG4gICAgICAgIHByb3BlcnR5TmFtZTogdGhpcy5wcm9wZXJ0eS5uYW1lLFxuICAgICAgICBvYmo6IHRoaXMub2JqZWN0LFxuICAgICAgICB2YWx1ZTogdGhpcy5nZXRWYWx1ZSgpLFxuICAgICAgICBuZXdWYWx1ZTogbmV3VmFsdWUsXG4gICAgICAgIGRvVmFsaWRhdGlvbjogZmFsc2VcbiAgICAgIH07XG4gICAgICB0aGlzLnVwZGF0ZUVkaXRpbmdQcm9wZXJ0aWVzKG5ld1ZhbHVlKTtcbiAgICAgIHRoaXMub3B0aW9ucy5vblZhbHVlQ2hhbmdpbmdDYWxsYmFjayhvcHRpb25zKTtcbiAgICAgIGlmICghdGhpcy5pc1ZhbHVlRW1wdHkob3B0aW9ucy5uZXdWYWx1ZSkpIHtcbiAgICAgICAgbmV3VmFsdWUgPSBvcHRpb25zLm5ld1ZhbHVlO1xuICAgICAgICB0aGlzLmtvVmFsdWUobmV3VmFsdWUpO1xuICAgICAgfVxuICAgICAgaWYgKG9wdGlvbnMuZG9WYWxpZGF0aW9uKSB7XG4gICAgICAgIHRoaXMuaGFzRXJyb3IoKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy51cGRhdGVFZGl0aW5nUHJvcGVydGllcyhuZXdWYWx1ZSk7XG4gICAgaWYgKCF0aGlzLmlzQXBwbHlpbk5ld1ZhbHVlKSB7XG4gICAgICB0aGlzLmVkaXRpbmdWYWx1ZSA9IG5ld1ZhbHVlO1xuICAgIH1cbiAgICB0aGlzLmlza29WYWx1ZUNoYW5naW5nID0gZmFsc2U7XG5cbiAgICBpZiAodGhpcy5wcm9wZXJ0eSAmJiB0aGlzLm9iamVjdCAmJiB0aGlzLmdldFZhbHVlKCkgPT0gbmV3VmFsdWUpIHJldHVybjtcbiAgICBpZiAodGhpcy5vbkNoYW5nZWQgIT0gbnVsbCkgdGhpcy5vbkNoYW5nZWQobmV3VmFsdWUpO1xuICB9XG4gIHByaXZhdGUgdXBkYXRlRWRpdGluZ1Byb3BlcnRpZXMobmV3VmFsdWU6IGFueSkge1xuICAgIGlmICghdGhpcy5pc01vZGFsICYmICEhdGhpcy5vYmplY3QpIHtcbiAgICAgIGlmICghdGhpcy5vYmplY3QuZWRpdGluZ1Byb3BlcnRpZXMpIHtcbiAgICAgICAgdGhpcy5vYmplY3QuZWRpdGluZ1Byb3BlcnRpZXMgPSB7fTtcbiAgICAgIH1cbiAgICAgIHRoaXMub2JqZWN0LmVkaXRpbmdQcm9wZXJ0aWVzW3RoaXMucHJvcGVydHkubmFtZV0gPSBuZXdWYWx1ZTtcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBpc1ZhbHVlRW1wdHkodmFsKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIFN1cnZleS5IZWxwZXJzLmlzVmFsdWVFbXB0eSh2YWwpO1xuICB9XG4gIHB1YmxpYyB1cGRhdGVEeW5hbWljUHJvcGVydGllcygpIHt9XG4gIHB1YmxpYyBrZXlEb3duSGFuZGxlcihwcm9wZXJ0eSwgZXZlbnQpIHtcbiAgICB2YXIgc3VydmV5RWRpdG9yOiBJU3VydmV5T2JqZWN0RWRpdG9yT3B0aW9ucyA9IHByb3BlcnR5LmVkaXRvci5vcHRpb25zO1xuICAgIGlmICghIXN1cnZleUVkaXRvcikge1xuICAgICAgc3VydmV5RWRpdG9yLm9uUHJvcGVydHlFZGl0b3JLZXlEb3duQ2FsbGJhY2soXG4gICAgICAgIHByb3BlcnR5LnByb3BlcnR5Lm5hbWUsXG4gICAgICAgIHByb3BlcnR5Lm9iaixcbiAgICAgICAgcHJvcGVydHkuZWRpdG9yLFxuICAgICAgICBldmVudFxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn1cblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9wcm9wZXJ0eUVkaXRvcnMvcHJvcGVydHlFZGl0b3JCYXNlLnRzIiwiaW1wb3J0ICogYXMga28gZnJvbSBcImtub2Nrb3V0XCI7XG5pbXBvcnQgKiBhcyBTdXJ2ZXkgZnJvbSBcInN1cnZleS1rbm9ja291dFwiO1xuaW1wb3J0IFNvcnRhYmxlIGZyb20gXCJzb3J0YWJsZWpzXCI7XG5pbXBvcnQgeyBTdXJ2ZXlQcm9wZXJ0eU1vZGFsRWRpdG9yIH0gZnJvbSBcIi4vcHJvcGVydHlNb2RhbEVkaXRvclwiO1xuaW1wb3J0IHsgZWRpdG9yTG9jYWxpemF0aW9uIH0gZnJvbSBcIi4uL2VkaXRvckxvY2FsaXphdGlvblwiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5UHJvcGVydHlJdGVtc0VkaXRvciBleHRlbmRzIFN1cnZleVByb3BlcnR5TW9kYWxFZGl0b3Ige1xuICBwdWJsaWMga29JdGVtczogYW55O1xuICBwdWJsaWMgb25EZWxldGVDbGljazogYW55O1xuICBwdWJsaWMgb25BZGRDbGljazogYW55O1xuICBwdWJsaWMgb25DbGVhckNsaWNrOiBhbnk7XG4gIGtvQWxsb3dBZGRSZW1vdmVJdGVtczogYW55O1xuXG4gIGNvbnN0cnVjdG9yKHByb3BlcnR5OiBTdXJ2ZXkuSnNvbk9iamVjdFByb3BlcnR5KSB7XG4gICAgc3VwZXIocHJvcGVydHkpO1xuICAgIHRoaXMua29JdGVtcyA9IGtvLm9ic2VydmFibGVBcnJheSgpO1xuICAgIHRoaXMuZWRpdGluZ1ZhbHVlID0gW107XG4gICAgdGhpcy5rb0FsbG93QWRkUmVtb3ZlSXRlbXMgPSBrby5vYnNlcnZhYmxlKHRydWUpO1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICBzZWxmLm9uRGVsZXRlQ2xpY2sgPSBmdW5jdGlvbihpdGVtKSB7XG4gICAgICBzZWxmLmtvSXRlbXMucmVtb3ZlKGl0ZW0pO1xuICAgIH07XG4gICAgc2VsZi5vbkNsZWFyQ2xpY2sgPSBmdW5jdGlvbihpdGVtKSB7XG4gICAgICBzZWxmLmtvSXRlbXMucmVtb3ZlQWxsKCk7XG4gICAgfTtcbiAgICBzZWxmLm9uQWRkQ2xpY2sgPSBmdW5jdGlvbigpIHtcbiAgICAgIHNlbGYuQWRkSXRlbSgpO1xuICAgIH07XG4gIH1cbiAgcHVibGljIGdldFZhbHVlVGV4dCh2YWx1ZTogYW55KTogc3RyaW5nIHtcbiAgICB2YXIgbGVuID0gdmFsdWUgPyB2YWx1ZS5sZW5ndGggOiAwO1xuICAgIHJldHVybiBlZGl0b3JMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKFwicGUuaXRlbXNcIilbXCJmb3JtYXRcIl0obGVuKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0Q29ycmVjdGVkVmFsdWUodmFsdWU6IGFueSk6IGFueSB7XG4gICAgaWYgKHZhbHVlID09IG51bGwgfHwgIUFycmF5LmlzQXJyYXkodmFsdWUpKSB2YWx1ZSA9IFtdO1xuICAgIHJldHVybiBzdXBlci5nZXRDb3JyZWN0ZWRWYWx1ZSh2YWx1ZSk7XG4gIH1cbiAgcHJvdGVjdGVkIGNyZWF0ZUVkaXRvck9wdGlvbnMoKTogYW55IHtcbiAgICByZXR1cm4geyBhbGxvd0FkZFJlbW92ZUl0ZW1zOiB0cnVlIH07XG4gIH1cbiAgcHJvdGVjdGVkIG9uU2V0RWRpdG9yT3B0aW9ucyhlZGl0b3JPcHRpb25zOiBhbnkpIHtcbiAgICB0aGlzLmtvQWxsb3dBZGRSZW1vdmVJdGVtcyhlZGl0b3JPcHRpb25zLmFsbG93QWRkUmVtb3ZlSXRlbXMpO1xuICB9XG4gIHB1YmxpYyBzb3J0YWJsZU9wdGlvbnMgPSB7XG4gICAgaGFuZGxlOiBcIi5zdmQtZHJhZy1oYW5kbGVcIixcbiAgICBhbmltYXRpb246IDE1MFxuICB9O1xuICBwcm90ZWN0ZWQgQWRkSXRlbSgpIHtcbiAgICB0aGlzLmtvSXRlbXMucHVzaCh0aGlzLmNyZWF0ZUVkaXRvckl0ZW1Db3JlKCkpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHNldHVwSXRlbXMoKSB7XG4gICAgdGhpcy5rb0l0ZW1zKHRoaXMuZ2V0SXRlbXNGcm9tVmFsdWUodGhpcy5lZGl0aW5nVmFsdWUpKTtcbiAgfVxuICBwcm90ZWN0ZWQgb25WYWx1ZUNoYW5nZWQoKSB7XG4gICAgaWYgKHRoaXMuaXNTaG93aW5nTW9kYWwpIHtcbiAgICAgIHRoaXMuc2V0dXBJdGVtcygpO1xuICAgIH1cbiAgfVxuICBwdWJsaWMgc2V0dXAoKSB7XG4gICAgc3VwZXIuc2V0dXAoKTtcbiAgICB0aGlzLnVwZGF0ZVZhbHVlKCk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldEl0ZW1zRnJvbVZhbHVlKHZhbHVlOiBhbnkgPSBudWxsKTogQXJyYXk8YW55PiB7XG4gICAgdmFyIGl0ZW1zID0gW107XG4gICAgaWYgKCF2YWx1ZSkgdmFsdWUgPSB0aGlzLmVkaXRpbmdWYWx1ZTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZhbHVlLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpdGVtcy5wdXNoKHRoaXMuY3JlYXRlRWRpdG9ySXRlbUNvcmUodmFsdWVbaV0pKTtcbiAgICB9XG4gICAgcmV0dXJuIGl0ZW1zO1xuICB9XG4gIHByb3RlY3RlZCBnZXQgaXNDdXJyZW50VmFsdWVFbXB0eSgpIHtcbiAgICByZXR1cm4gdGhpcy5rb0l0ZW1zKCkubGVuZ3RoID09IDA7XG4gIH1cbiAgcHJvdGVjdGVkIG9uQmVmb3JlQXBwbHkoKSB7XG4gICAgdmFyIGl0ZW1zID0gW107XG4gICAgdmFyIGludGVybmFsSXRlbXMgPSB0aGlzLmtvSXRlbXMoKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGludGVybmFsSXRlbXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGl0ZW1zLnB1c2godGhpcy5jcmVhdGVJdGVtRnJvbUVkaXRvckl0ZW0oaW50ZXJuYWxJdGVtc1tpXSkpO1xuICAgIH1cbiAgICB0aGlzLnNldFZhbHVlQ29yZShpdGVtcyk7XG4gIH1cbiAgcHJvdGVjdGVkIGNyZWF0ZUVkaXRvckl0ZW1Db3JlKGl0ZW06IGFueSA9IG51bGwpIHtcbiAgICB2YXIgZWRpdG9ySXRlbSA9ICEhaXRlbVxuICAgICAgPyB0aGlzLmNyZWF0ZUVkaXRvckl0ZW0oaXRlbSlcbiAgICAgIDogdGhpcy5jcmVhdGVOZXdFZGl0b3JJdGVtKCk7XG4gICAgaWYgKCEhZWRpdG9ySXRlbS5vbkNyZWF0ZWQpIHtcbiAgICAgIGVkaXRvckl0ZW0ub25DcmVhdGVkKCk7XG4gICAgfVxuICAgIHJldHVybiBlZGl0b3JJdGVtO1xuICB9XG4gIHByb3RlY3RlZCBjcmVhdGVOZXdFZGl0b3JJdGVtKCk6IGFueSB7XG4gICAgdGhyb3cgXCJPdmVycmlkZSAnY3JlYXRlTmV3RWRpdG9ySXRlbScgbWV0aG9kXCI7XG4gIH1cbiAgcHJvdGVjdGVkIGNyZWF0ZUVkaXRvckl0ZW0oaXRlbTogYW55KSB7XG4gICAgcmV0dXJuIGl0ZW07XG4gIH1cbiAgcHJvdGVjdGVkIGNyZWF0ZUl0ZW1Gcm9tRWRpdG9ySXRlbShlZGl0b3JJdGVtOiBhbnkpIHtcbiAgICByZXR1cm4gZWRpdG9ySXRlbTtcbiAgfVxufVxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL3Byb3BlcnR5RWRpdG9ycy9wcm9wZXJ0eUl0ZW1zRWRpdG9yLnRzIiwiaW1wb3J0ICogYXMga28gZnJvbSBcImtub2Nrb3V0XCI7XG5pbXBvcnQgKiBhcyBTdXJ2ZXkgZnJvbSBcInN1cnZleS1rbm9ja291dFwiO1xuaW1wb3J0IHsgU3VydmV5UHJvcGVydHlJdGVtc0VkaXRvciB9IGZyb20gXCIuL3Byb3BlcnR5SXRlbXNFZGl0b3JcIjtcbmltcG9ydCB7XG4gIFN1cnZleVByb3BlcnR5RWRpdG9yQmFzZSxcbiAgSVN1cnZleU9iamVjdEVkaXRvck9wdGlvbnNcbn0gZnJvbSBcIi4vcHJvcGVydHlFZGl0b3JCYXNlXCI7XG5pbXBvcnQgeyBTdXJ2ZXlRdWVzdGlvbkVkaXRvciB9IGZyb20gXCIuLi9xdWVzdGlvbkVkaXRvcnMvcXVlc3Rpb25FZGl0b3JcIjtcbmltcG9ydCB7IGVkaXRvckxvY2FsaXphdGlvbiB9IGZyb20gXCIuLi9lZGl0b3JMb2NhbGl6YXRpb25cIjtcbmltcG9ydCB7IFN1cnZleU9iamVjdFByb3BlcnR5IH0gZnJvbSBcIi4uL29iamVjdFByb3BlcnR5XCI7XG5pbXBvcnQgeyBTdXJ2ZXlRdWVzdGlvbkVkaXRvckRlZmluaXRpb24gfSBmcm9tIFwiLi4vcXVlc3Rpb25FZGl0b3JzL3F1ZXN0aW9uRWRpdG9yRGVmaW5pdGlvblwiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5TmVzdGVkUHJvcGVydHlFZGl0b3IgZXh0ZW5kcyBTdXJ2ZXlQcm9wZXJ0eUl0ZW1zRWRpdG9yIHtcbiAga29FZGl0SXRlbTogYW55O1xuICBrb0lzTGlzdDogYW55O1xuICBrb0FjdGl2ZVZpZXc6IGFueTtcbiAgb25FZGl0SXRlbUNsaWNrOiBhbnk7XG4gIG9uQ2FuY2VsRWRpdEl0ZW1DbGljazogYW55O1xuICBrb0VkaXRvck5hbWU6IGFueTtcbiAgcHJpdmF0ZSBrb0NvbHVtbnNWYWx1ZSA9IGtvLm9ic2VydmFibGU8XG4gICAgQXJyYXk8U3VydmV5TmVzdGVkUHJvcGVydHlFZGl0b3JDb2x1bW4+XG4gID4oW10pO1xuICBjb25zdHJ1Y3Rvcihwcm9wZXJ0eTogU3VydmV5Lkpzb25PYmplY3RQcm9wZXJ0eSkge1xuICAgIHN1cGVyKHByb3BlcnR5KTtcbiAgICB0aGlzLmNyZWF0ZUNvbHVtbnMoKTtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgdGhpcy5rb0VkaXRJdGVtID0ga28ub2JzZXJ2YWJsZShudWxsKTtcbiAgICB0aGlzLmtvSXNMaXN0ID0ga28ub2JzZXJ2YWJsZSh0cnVlKTtcbiAgICB0aGlzLmtvQWN0aXZlVmlldyA9IGtvLm9ic2VydmFibGUoXCJmb3JtXCIpO1xuICAgIHRoaXMua29FZGl0SXRlbS5zdWJzY3JpYmUoZnVuY3Rpb24obmV3VmFsdWUpIHtcbiAgICAgIHNlbGYua29Jc0xpc3Qoc2VsZi5rb0VkaXRJdGVtKCkgPT0gbnVsbCk7XG4gICAgICBzZWxmLm9uTGlzdERldGFpbFZpZXdDaGFuZ2VkKCk7XG4gICAgfSk7XG4gICAgdGhpcy5vbkVkaXRJdGVtQ2xpY2sgPSBmdW5jdGlvbihpdGVtKSB7XG4gICAgICBzZWxmLmtvRWRpdEl0ZW0oaXRlbSk7XG4gICAgfTtcbiAgICB0aGlzLm9uQ2FuY2VsRWRpdEl0ZW1DbGljayA9IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIGVkaXRJdGVtID0gc2VsZi5rb0VkaXRJdGVtKCk7XG4gICAgICBpZiAoZWRpdEl0ZW0uaXRlbUVkaXRvciAmJiBlZGl0SXRlbS5pdGVtRWRpdG9yLmhhc0Vycm9yKCkpIHJldHVybjtcbiAgICAgIHNlbGYua29FZGl0SXRlbShudWxsKTtcbiAgICB9O1xuICAgIHRoaXMua29FZGl0b3JOYW1lID0ga28uY29tcHV0ZWQoZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gc2VsZi5nZXRFZGl0b3JOYW1lKCk7XG4gICAgfSk7XG4gIH1cbiAgcHVibGljIGdldCBjYW5TaG93RGlzcGxheU5hbWVPblRvcCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcHVibGljIGdldCBjb2x1bW5zKCk6IEFycmF5PFN1cnZleU5lc3RlZFByb3BlcnR5RWRpdG9yQ29sdW1uPiB7XG4gICAgcmV0dXJuIHRoaXMua29Db2x1bW5zVmFsdWUoKTtcbiAgfVxuICBwdWJsaWMgYmVmb3JlU2hvdygpIHtcbiAgICBzdXBlci5iZWZvcmVTaG93KCk7XG4gICAgdGhpcy5rb0VkaXRJdGVtKG51bGwpO1xuICB9XG4gIHByb3RlY3RlZCBjcmVhdGVDb2x1bW5zKCkge1xuICAgIHZhciByZXN1bHQgPSBbXTtcbiAgICB2YXIgcHJvcGVydGllcyA9IHRoaXMuZ2V0UHJvcGVydGllcygpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcGVydGllcy5sZW5ndGg7IGkrKykge1xuICAgICAgcmVzdWx0LnB1c2gobmV3IFN1cnZleU5lc3RlZFByb3BlcnR5RWRpdG9yQ29sdW1uKHByb3BlcnRpZXNbaV0pKTtcbiAgICB9XG4gICAgdGhpcy5rb0NvbHVtbnNWYWx1ZShyZXN1bHQpO1xuICB9XG4gIHByb3RlY3RlZCBnZXRQcm9wZXJ0aWVzKCk6IEFycmF5PFN1cnZleS5Kc29uT2JqZWN0UHJvcGVydHk+IHtcbiAgICByZXR1cm4gW107XG4gIH1cbiAgcHJvdGVjdGVkIGdldFByb3BlcnRpZXNOYW1lcyhcbiAgICBkZWZpbml0aW9uTmFtZTogc3RyaW5nLFxuICAgIGRlZmF1bHROYW1lczogQXJyYXk8c3RyaW5nPlxuICApOiBBcnJheTxzdHJpbmc+IHtcbiAgICB2YXIgcmVzID0gW107XG4gICAgdmFyIHByb3BlcnRpZXMgPSBTdXJ2ZXlRdWVzdGlvbkVkaXRvckRlZmluaXRpb24uZ2V0UHJvcGVydGllcyhcbiAgICAgIGRlZmluaXRpb25OYW1lXG4gICAgKTtcbiAgICBpZiAocHJvcGVydGllcykge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBwcm9wID0gcHJvcGVydGllc1tpXTtcbiAgICAgICAgcmVzLnB1c2gocHJvcC5uYW1lID8gcHJvcC5uYW1lIDogcHJvcCk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChyZXMubGVuZ3RoID09IDApIHtcbiAgICAgIHJlcyA9IGRlZmF1bHROYW1lcztcbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0UHJvcGVydGllc0J5TmFtZXMoXG4gICAgY2xhc3NOYW1lOiBzdHJpbmcsXG4gICAgbmFtZXM6IEFycmF5PGFueT5cbiAgKTogQXJyYXk8U3VydmV5Lkpzb25PYmplY3RQcm9wZXJ0eT4ge1xuICAgIHZhciByZXMgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5hbWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgbmFtZSA9IG5hbWVzW2ldO1xuICAgICAgbmFtZS5uYW1lID8gbmFtZS5uYW1lIDogbmFtZTtcbiAgICAgIHZhciBwcm9wID0gU3VydmV5LlNlcmlhbGl6ZXIuZmluZFByb3BlcnR5KGNsYXNzTmFtZSwgbmFtZSk7XG4gICAgICBpZiAocHJvcCAmJiBwcm9wLnZpc2libGUpIHtcbiAgICAgICAgcmVzLnB1c2gocHJvcCk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXM7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0RWRpdG9yTmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBcIlwiO1xuICB9XG4gIHByb3RlY3RlZCBvbkxpc3REZXRhaWxWaWV3Q2hhbmdlZCgpIHt9XG4gIHByb3RlY3RlZCBjaGVja0ZvckVycm9ycygpOiBib29sZWFuIHtcbiAgICB2YXIgcmVzdWx0ID0gZmFsc2U7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmtvSXRlbXMoKS5sZW5ndGg7IGkrKykge1xuICAgICAgcmVzdWx0ID0gcmVzdWx0IHx8IHRoaXMua29JdGVtcygpW2ldLmhhc0Vycm9yKCk7XG4gICAgfVxuICAgIHJldHVybiBzdXBlci5jaGVja0ZvckVycm9ycygpIHx8IHJlc3VsdDtcbiAgfVxuICBwcm90ZWN0ZWQgb25CZWZvcmVBcHBseSgpIHtcbiAgICB2YXIgaW50ZXJuYWxJdGVtcyA9IHRoaXMua29JdGVtcygpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaW50ZXJuYWxJdGVtcy5sZW5ndGg7IGkrKykge1xuICAgICAgaW50ZXJuYWxJdGVtc1tpXS5hcHBseSgpO1xuICAgIH1cbiAgICBzdXBlci5vbkJlZm9yZUFwcGx5KCk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFN1cnZleU5lc3RlZFByb3BlcnR5RWRpdG9ySXRlbSB7XG4gIHB1YmxpYyBrb0hhc0RldGFpbHM6IGFueTtcbiAgcHJvdGVjdGVkIG9wdGlvbnM6IElTdXJ2ZXlPYmplY3RFZGl0b3JPcHRpb25zO1xuICBwcml2YXRlIGtvQ2VsbHNWYWx1ZSA9IGtvLm9ic2VydmFibGVBcnJheTxcbiAgICBTdXJ2ZXlOZXN0ZWRQcm9wZXJ0eUVkaXRvckVkaXRvckNlbGxcbiAgPigpO1xuICBwcml2YXRlIGl0ZW1FZGl0b3JWYWx1ZTogU3VydmV5UXVlc3Rpb25FZGl0b3I7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBvYmo6IGFueSxcbiAgICBwcml2YXRlIGdldENvbHVtbnM6ICgpID0+IEFycmF5PFN1cnZleU5lc3RlZFByb3BlcnR5RWRpdG9yQ29sdW1uPixcbiAgICBvcHRpb25zOiBJU3VydmV5T2JqZWN0RWRpdG9yT3B0aW9uc1xuICApIHtcbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuICAgIHRoaXMua29IYXNEZXRhaWxzID0ga28ub2JzZXJ2YWJsZSh0cnVlKTtcbiAgICBrby5jb21wdXRlZCgoKSA9PiB7XG4gICAgICB2YXIgY29sdW1ucyA9IHRoaXMuZ2V0Q29sdW1ucygpO1xuICAgICAgdGhpcy5rb0NlbGxzVmFsdWUoW10pO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb2x1bW5zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHRoaXMua29DZWxsc1ZhbHVlLnB1c2goXG4gICAgICAgICAgbmV3IFN1cnZleU5lc3RlZFByb3BlcnR5RWRpdG9yRWRpdG9yQ2VsbChcbiAgICAgICAgICAgIG9iaixcbiAgICAgICAgICAgIGNvbHVtbnNbaV0ucHJvcGVydHksXG4gICAgICAgICAgICB0aGlzLm9wdGlvbnNcbiAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldENsYXNzTmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBcIlwiO1xuICB9XG4gIHB1YmxpYyBnZXQgY29sdW1ucygpOiBBcnJheTxTdXJ2ZXlOZXN0ZWRQcm9wZXJ0eUVkaXRvckNvbHVtbj4ge1xuICAgIHJldHVybiB0aGlzLmdldENvbHVtbnMoKTtcbiAgfVxuICBwdWJsaWMgb25DcmVhdGVkKCkge1xuICAgIHRoaXMudXBkYXRlRGV0YWlsQnV0dG9uKCk7XG4gIH1cbiAgcHJpdmF0ZSB1cGRhdGVEZXRhaWxCdXR0b24oKSB7XG4gICAgdGhpcy5rb0hhc0RldGFpbHMoXG4gICAgICBTdXJ2ZXlRdWVzdGlvbkVkaXRvckRlZmluaXRpb24uaGFzVGFic1RvU2hvdyh0aGlzLmdldENsYXNzTmFtZSgpKVxuICAgICk7XG4gIH1cbiAgcHVibGljIGdldCBpdGVtRWRpdG9yKCk6IFN1cnZleVF1ZXN0aW9uRWRpdG9yIHtcbiAgICBpZiAoIXRoaXMuaXRlbUVkaXRvclZhbHVlKVxuICAgICAgdGhpcy5pdGVtRWRpdG9yVmFsdWUgPSB0aGlzLmNyZWF0ZVN1cnZleVF1ZXN0aW9uRWRpdG9yKCk7XG4gICAgcmV0dXJuIHRoaXMuaXRlbUVkaXRvclZhbHVlO1xuICB9XG4gIHB1YmxpYyBnZXQgY2VsbHMoKTogQXJyYXk8U3VydmV5TmVzdGVkUHJvcGVydHlFZGl0b3JFZGl0b3JDZWxsPiB7XG4gICAgcmV0dXJuIHRoaXMua29DZWxsc1ZhbHVlKCk7XG4gIH1cbiAgcHVibGljIGhhc0Vycm9yKCk6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLml0ZW1FZGl0b3JWYWx1ZSAmJiB0aGlzLml0ZW1FZGl0b3JWYWx1ZS5oYXNFcnJvcigpKSByZXR1cm4gdHJ1ZTtcbiAgICB2YXIgcmVzID0gZmFsc2U7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmNlbGxzLmxlbmd0aDsgaSsrKSB7XG4gICAgICByZXMgPSB0aGlzLmNlbGxzW2ldLmhhc0Vycm9yIHx8IHJlcztcbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuICBwcm90ZWN0ZWQgcmVzZXRTdXJ2ZXlRdWVzdGlvbkVkaXRvcigpIHtcbiAgICB0aGlzLml0ZW1FZGl0b3JWYWx1ZSA9IG51bGw7XG4gIH1cbiAgcHJvdGVjdGVkIGNyZWF0ZVN1cnZleVF1ZXN0aW9uRWRpdG9yKCkge1xuICAgIHJldHVybiBuZXcgU3VydmV5UXVlc3Rpb25FZGl0b3IoXG4gICAgICB0aGlzLm9iaixcbiAgICAgIHRoaXMuZ2V0Q2xhc3NOYW1lKCksXG4gICAgICB0aGlzLm9wdGlvbnNcbiAgICApO1xuICB9XG4gIHB1YmxpYyBhcHBseSgpIHtcbiAgICBpZiAodGhpcy5pdGVtRWRpdG9yVmFsdWUpIHRoaXMuaXRlbUVkaXRvclZhbHVlLmFwcGx5KCk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFN1cnZleU5lc3RlZFByb3BlcnR5RWRpdG9yQ29sdW1uIHtcbiAgY29uc3RydWN0b3IocHVibGljIHByb3BlcnR5OiBTdXJ2ZXkuSnNvbk9iamVjdFByb3BlcnR5KSB7fVxuICBwdWJsaWMgZ2V0IHRleHQoKTogc3RyaW5nIHtcbiAgICB2YXIgdGV4dCA9IGVkaXRvckxvY2FsaXphdGlvbi5oYXNTdHJpbmcoXCJwZWwuXCIgKyB0aGlzLnByb3BlcnR5Lm5hbWUpXG4gICAgICA/IHRoaXMuZ2V0TG9jVGV4dChcInBlbC5cIilcbiAgICAgIDogdGhpcy5nZXRMb2NUZXh0KFwicGUuXCIpO1xuICAgIHJldHVybiB0ZXh0ID8gdGV4dCA6IHRoaXMucHJvcGVydHkubmFtZTtcbiAgfVxuICBwcml2YXRlIGdldExvY1RleHQocHJlZml4OiBzdHJpbmcpIHtcbiAgICByZXR1cm4gZWRpdG9yTG9jYWxpemF0aW9uLmdldFN0cmluZyhwcmVmaXggKyB0aGlzLnByb3BlcnR5Lm5hbWUpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlOZXN0ZWRQcm9wZXJ0eUVkaXRvckVkaXRvckNlbGwge1xuICBwcml2YXRlIG9iamVjdFByb3BlcnR5VmFsdWU6IFN1cnZleU9iamVjdFByb3BlcnR5O1xuICBwcml2YXRlIG9wdGlvbnM6IElTdXJ2ZXlPYmplY3RFZGl0b3JPcHRpb25zO1xuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgb2JqOiBhbnksXG4gICAgcHVibGljIHByb3BlcnR5OiBTdXJ2ZXkuSnNvbk9iamVjdFByb3BlcnR5LFxuICAgIG9wdGlvbnM6IElTdXJ2ZXlPYmplY3RFZGl0b3JPcHRpb25zID0gbnVsbFxuICApIHtcbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICB2YXIgcHJvcEV2ZW50ID0gKHByb3BlcnR5OiBTdXJ2ZXlPYmplY3RQcm9wZXJ0eSwgbmV3VmFsdWU6IGFueSkgPT4ge1xuICAgICAgc2VsZi52YWx1ZSA9IG5ld1ZhbHVlO1xuICAgIH07XG4gICAgdGhpcy5vYmplY3RQcm9wZXJ0eVZhbHVlID0gbmV3IFN1cnZleU9iamVjdFByb3BlcnR5KFxuICAgICAgdGhpcy5wcm9wZXJ0eSxcbiAgICAgIHByb3BFdmVudCxcbiAgICAgIHRoaXMub3B0aW9uc1xuICAgICk7XG4gICAgdGhpcy5vYmplY3RQcm9wZXJ0eVZhbHVlLmVkaXRvci5pc0lucGxhY2VQcm9wZXJ0eSA9IHRydWU7XG4gICAgdGhpcy5vYmplY3RQcm9wZXJ0eS5vYmplY3QgPSBvYmo7XG4gIH1cbiAgcHVibGljIGdldCBvYmplY3RQcm9wZXJ0eSgpOiBTdXJ2ZXlPYmplY3RQcm9wZXJ0eSB7XG4gICAgcmV0dXJuIHRoaXMub2JqZWN0UHJvcGVydHlWYWx1ZTtcbiAgfVxuICBwdWJsaWMgZ2V0IGVkaXRvcigpOiBTdXJ2ZXlQcm9wZXJ0eUVkaXRvckJhc2Uge1xuICAgIHJldHVybiB0aGlzLm9iamVjdFByb3BlcnR5LmVkaXRvcjtcbiAgfVxuICBwdWJsaWMgZ2V0IGtvVmFsdWUoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5vYmplY3RQcm9wZXJ0eS5lZGl0b3Iua29WYWx1ZTtcbiAgfVxuICBwdWJsaWMgZ2V0IHZhbHVlKCkge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnR5LmdldFZhbHVlKHRoaXMub2JqKTtcbiAgfVxuICBwdWJsaWMgc2V0IHZhbHVlKHZhbDogYW55KSB7XG4gICAgdGhpcy5vYmpbdGhpcy5wcm9wZXJ0eS5uYW1lXSA9IHZhbDtcbiAgfVxuICBwdWJsaWMgZ2V0IGhhc0Vycm9yKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmVkaXRvci5oYXNFcnJvcigpO1xuICB9XG59XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvcHJvcGVydHlFZGl0b3JzL3Byb3BlcnR5TmVzdGVkUHJvcGVydHlFZGl0b3IudHMiLCJpbXBvcnQgKiBhcyBrbyBmcm9tIFwia25vY2tvdXRcIjtcbmltcG9ydCAqIGFzIFN1cnZleSBmcm9tIFwic3VydmV5LWtub2Nrb3V0XCI7XG5pbXBvcnQgeyBTdXJ2ZXlQcm9wZXJ0eUl0ZW1zRWRpdG9yIH0gZnJvbSBcIi4vcHJvcGVydHlJdGVtc0VkaXRvclwiO1xuaW1wb3J0IHsgU3VydmV5UXVlc3Rpb25FZGl0b3IgfSBmcm9tIFwiLi4vcXVlc3Rpb25FZGl0b3JzL3F1ZXN0aW9uRWRpdG9yXCI7XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlQcm9wZXJ0eU9uZVNlbGVjdGVkRWRpdG9yIGV4dGVuZHMgU3VydmV5UHJvcGVydHlJdGVtc0VkaXRvciB7XG4gIHB1YmxpYyBzZWxlY3RlZE9iamVjdEVkaXRvciA9IGtvLm9ic2VydmFibGU8U3VydmV5UXVlc3Rpb25FZGl0b3I+KG51bGwpO1xuICBwdWJsaWMga29TZWxlY3RlZCA9IGtvLm9ic2VydmFibGUobnVsbCk7XG4gIHB1YmxpYyBrb0F2YWlsYWJsZUNsYXNzZXM6IGFueTtcbiAgcHJpdmF0ZSBjdXJyZW50T2JqQ2xhc3NOYW1lOiBzdHJpbmc7XG4gIGNvbnN0cnVjdG9yKHByb3BlcnR5OiBTdXJ2ZXkuSnNvbk9iamVjdFByb3BlcnR5KSB7XG4gICAgc3VwZXIocHJvcGVydHkpO1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICB0aGlzLmtvQXZhaWxhYmxlQ2xhc3NlcyA9IGtvLm9ic2VydmFibGVBcnJheSh0aGlzLmdldEF2YWlsYWJsZUNsYXNzZXMoKSk7XG4gICAgdGhpcy5rb1NlbGVjdGVkLnN1YnNjcmliZShmdW5jdGlvbihuZXdWYWx1ZSkge1xuICAgICAgaWYgKCEhc2VsZi5zZWxlY3RlZE9iamVjdEVkaXRvcigpKSB7XG4gICAgICAgIHNlbGYuc2VsZWN0ZWRPYmplY3RFZGl0b3IoKS5hcHBseSgpO1xuICAgICAgfVxuICAgICAgdmFyIGVkaXRvciA9XG4gICAgICAgIG5ld1ZhbHVlICE9IG51bGxcbiAgICAgICAgICA/IG5ldyBTdXJ2ZXlRdWVzdGlvbkVkaXRvcihuZXdWYWx1ZS5vYmosIG51bGwsIHNlbGYub3B0aW9ucylcbiAgICAgICAgICA6IG51bGw7XG4gICAgICBzZWxmLnNlbGVjdGVkT2JqZWN0RWRpdG9yKGVkaXRvcik7XG4gICAgfSk7XG4gICAgdGhpcy5vbkRlbGV0ZUNsaWNrID0gZnVuY3Rpb24oKSB7XG4gICAgICBpZiAoc2VsZi5yZWFkT25seSgpKSByZXR1cm47XG4gICAgICBzZWxmLmtvSXRlbXMucmVtb3ZlKHNlbGYua29TZWxlY3RlZCgpKTtcbiAgICB9O1xuICAgIHRoaXMub25BZGRDbGljayA9IGZ1bmN0aW9uKGl0ZW06IGFueSkge1xuICAgICAgc2VsZi5hZGROZXdJdGVtKCEhaXRlbSA/IGl0ZW0udmFsdWUgOiBudWxsKTtcbiAgICB9O1xuICB9XG4gIHByb3RlY3RlZCBvbkJlZm9yZUFwcGx5KCkge1xuICAgIGlmICghIXRoaXMuc2VsZWN0ZWRPYmplY3RFZGl0b3IoKSkge1xuICAgICAgdGhpcy5zZWxlY3RlZE9iamVjdEVkaXRvcigpLmFwcGx5KCk7XG4gICAgfVxuICAgIHN1cGVyLm9uQmVmb3JlQXBwbHkoKTtcbiAgfVxuICBwdWJsaWMgZ2V0IGVkaXRvclR5cGVUZW1wbGF0ZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBcIm9uZXNlbGVjdGVkXCI7XG4gIH1cbiAgcHVibGljIGdldCBlZGl0b3JUeXBlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFwib25lc2VsZWN0ZWRcIjtcbiAgfVxuICBwcm90ZWN0ZWQgY3JlYXRlT25lU2VsZWN0ZWRJdGVtKG9iajogYW55KTogU3VydmV5UHJvcGVydHlPbmVTZWxlY3RlZEl0ZW0ge1xuICAgIHJldHVybiBuZXcgU3VydmV5UHJvcGVydHlPbmVTZWxlY3RlZEl0ZW0ob2JqKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0T2JqQ2xhc3NOYW1lKCkge1xuICAgIHJldHVybiB0aGlzLmN1cnJlbnRPYmpDbGFzc05hbWU7XG4gIH1cbiAgcHJvdGVjdGVkIGdldEF2YWlsYWJsZUNsYXNzZXMoKTogQXJyYXk8YW55PiB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG4gIHByb3RlY3RlZCBhZGROZXdJdGVtKGNsYXNzTmFtZTogc3RyaW5nKSB7XG4gICAgdGhpcy5jdXJyZW50T2JqQ2xhc3NOYW1lID0gY2xhc3NOYW1lO1xuICAgIHRoaXMuQWRkSXRlbSgpO1xuICAgIHRoaXMua29TZWxlY3RlZCh0aGlzLmtvSXRlbXMoKVt0aGlzLmtvSXRlbXMoKS5sZW5ndGggLSAxXSk7XG4gIH1cbiAgcHJvdGVjdGVkIG9uVmFsdWVDaGFuZ2VkKCkge1xuICAgIHN1cGVyLm9uVmFsdWVDaGFuZ2VkKCk7XG4gICAgaWYgKHRoaXMua29TZWxlY3RlZCkge1xuICAgICAgdGhpcy5rb1NlbGVjdGVkKHRoaXMua29JdGVtcygpLmxlbmd0aCA+IDAgPyB0aGlzLmtvSXRlbXMoKVswXSA6IG51bGwpO1xuICAgIH1cbiAgfVxuICBwcm90ZWN0ZWQgY3JlYXRlRWRpdG9ySXRlbShpdGVtOiBTdXJ2ZXkuQmFzZSkge1xuICAgIHZhciBqc29uT2JqID0gbmV3IFN1cnZleS5Kc29uT2JqZWN0KCk7XG4gICAgdmFyIG5ld0l0ZW0gPSBTdXJ2ZXkuU2VyaWFsaXplci5jcmVhdGVDbGFzcyhpdGVtLmdldFR5cGUoKSk7XG4gICAganNvbk9iai50b09iamVjdChpdGVtLnRvSlNPTigpLCBuZXdJdGVtKTtcbiAgICB0aGlzLnNldEl0ZW1Qcm9wZXJ0aWVzKG5ld0l0ZW0pO1xuICAgIHJldHVybiB0aGlzLmNyZWF0ZU9uZVNlbGVjdGVkSXRlbShuZXdJdGVtKTtcbiAgfVxuICBwcm90ZWN0ZWQgY3JlYXRlTmV3RWRpdG9ySXRlbSgpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLmNyZWF0ZUVkaXRvckl0ZW0oXG4gICAgICBTdXJ2ZXkuU2VyaWFsaXplci5jcmVhdGVDbGFzcyh0aGlzLmdldE9iakNsYXNzTmFtZSgpKVxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIGNyZWF0ZUl0ZW1Gcm9tRWRpdG9ySXRlbShlZGl0b3JJdGVtOiBhbnkpIHtcbiAgICB2YXIgaXRlbSA9IDxTdXJ2ZXlQcm9wZXJ0eU9uZVNlbGVjdGVkSXRlbT5lZGl0b3JJdGVtO1xuICAgIGRlbGV0ZSBpdGVtLm9ialtcInN1cnZleVwiXTtcbiAgICByZXR1cm4gaXRlbS5vYmo7XG4gIH1cbiAgcHJpdmF0ZSBzZXRJdGVtUHJvcGVydGllcyhvYmo6IGFueSkge1xuICAgIGlmICh0aGlzLm9iamVjdCkge1xuICAgICAgb2JqW1wic3VydmV5XCJdID1cbiAgICAgICAgdGhpcy5vYmplY3QuZ2V0VHlwZSgpID09IFwic3VydmV5XCIgPyB0aGlzLm9iamVjdCA6IHRoaXMub2JqZWN0LnN1cnZleTtcbiAgICB9XG4gICAgb2JqLmxvY093bmVyID0gdGhpcztcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgU3VydmV5UHJvcGVydHlPbmVTZWxlY3RlZEl0ZW0ge1xuICBwdWJsaWMga29UZXh0OiBhbnk7XG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBvYmo6IFN1cnZleS5CYXNlKSB7XG4gICAgdGhpcy5rb1RleHQgPSBrby5vYnNlcnZhYmxlKHRoaXMuZ2V0VGV4dCgpKTtcbiAgfVxuICBwdWJsaWMgZ2V0VGV4dCgpIHtcbiAgICByZXR1cm4gXCJcIjtcbiAgfVxuICBwdWJsaWMgb2JqZWN0Q2hhbmdlZCgpIHtcbiAgICB0aGlzLmtvVGV4dCh0aGlzLmdldFRleHQoKSk7XG4gIH1cbn1cblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9wcm9wZXJ0eUVkaXRvcnMvcHJvcGVydHlPbmVTZWxlY3RlZEVkaXRvci50cyIsImltcG9ydCAqIGFzIGtvIGZyb20gXCJrbm9ja291dFwiO1xuaW1wb3J0IHsgSVN1cnZleU9iamVjdEVkaXRvck9wdGlvbnMgfSBmcm9tIFwiLi4vcHJvcGVydHlFZGl0b3JzL3Byb3BlcnR5RWRpdG9yQmFzZVwiO1xuaW1wb3J0IHsgZWRpdG9yTG9jYWxpemF0aW9uIH0gZnJvbSBcIi4uL2VkaXRvckxvY2FsaXphdGlvblwiO1xuaW1wb3J0IHtcbiAgU3VydmV5UXVlc3Rpb25FZGl0b3JQcm9wZXJ0eSxcbiAgU3VydmV5UXVlc3Rpb25FZGl0b3JQcm9wZXJ0aWVzXG59IGZyb20gXCIuL3F1ZXN0aW9uRWRpdG9yUHJvcGVydGllc1wiO1xuaW1wb3J0IHtcbiAgU3VydmV5UXVlc3Rpb25FZGl0b3JEZWZpbml0aW9uLFxuICBJU3VydmV5UXVlc3Rpb25FZGl0b3JEZWZpbml0aW9uXG59IGZyb20gXCIuL3F1ZXN0aW9uRWRpdG9yRGVmaW5pdGlvblwiO1xuaW1wb3J0ICogYXMgU3VydmV5IGZyb20gXCJzdXJ2ZXkta25vY2tvdXRcIjtcbmltcG9ydCBSTW9kYWwgZnJvbSBcInJtb2RhbFwiO1xuaW1wb3J0IHsgU3VydmV5SGVscGVyIH0gZnJvbSBcIi4uL3N1cnZleUhlbHBlclwiO1xuaW1wb3J0IHsgZm9jdXNGaXJzdENvbnRyb2wgfSBmcm9tIFwiLi4vdXRpbHMvdXRpbHNcIjtcbmltcG9ydCB7IEVkaXRhYmxlT2JqZWN0IH0gZnJvbSBcIi4uL3Byb3BlcnR5RWRpdG9ycy9lZGl0YWJsZU9iamVjdFwiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5UHJvcGVydHlFZGl0b3JTaG93V2luZG93IHtcbiAga29WaXNpYmxlOiBhbnk7XG4gIGtvRWRpdG9yOiBhbnk7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMua29WaXNpYmxlID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG4gICAgdGhpcy5rb0VkaXRvciA9IGtvLm9ic2VydmFibGUobnVsbCk7XG4gIH1cbiAgcHVibGljIHNob3coXG4gICAgcXVlc3Rpb246IFN1cnZleS5CYXNlLFxuICAgIGVsV2luZG93OiBIVE1MRWxlbWVudCxcbiAgICBvbkNoYW5nZWQ6IChxdWVzdGlvbjogU3VydmV5LlF1ZXN0aW9uKSA9PiBhbnksXG4gICAgb3B0aW9uczogSVN1cnZleU9iamVjdEVkaXRvck9wdGlvbnMgPSBudWxsLFxuICAgIG9uQ2xvc2VkOiAoKSA9PiBhbnkgPSBudWxsXG4gICkge1xuICAgIHZhciBlZGl0b3IgPSBuZXcgU3VydmV5UXVlc3Rpb25FZGl0b3IocXVlc3Rpb24sIG51bGwsIG9wdGlvbnMpO1xuICAgIGVkaXRvci5vbkNoYW5nZWQgPSBvbkNoYW5nZWQ7XG5cbiAgICB0aGlzLmtvRWRpdG9yKGVkaXRvcik7XG4gICAgdGhpcy5rb1Zpc2libGUodHJ1ZSk7XG5cbiAgICB2YXIgbW9kYWwgPSBuZXcgUk1vZGFsKGVsV2luZG93LCB7XG4gICAgICBib2R5Q2xhc3M6IFwiXCIsXG4gICAgICBjbG9zZVRpbWVvdXQ6IDEwMCxcbiAgICAgIGRpYWxvZ09wZW5DbGFzczogXCJhbmltYXRlZCBmYWRlSW5cIixcbiAgICAgIGZvY3VzOiBmYWxzZSxcbiAgICAgIGFmdGVyQ2xvc2U6IGZ1bmN0aW9uKCkge1xuICAgICAgICBpZiAob25DbG9zZWQpIG9uQ2xvc2VkKCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgbW9kYWwub3BlbigpO1xuXG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcbiAgICAgIFwia2V5ZG93blwiLFxuICAgICAgZnVuY3Rpb24oZXYpIHtcbiAgICAgICAgbW9kYWwua2V5ZG93bihldik7XG4gICAgICB9LFxuICAgICAgZmFsc2VcbiAgICApO1xuXG4gICAgZWRpdG9yLm9uSGlkZVdpbmRvdyA9IGZ1bmN0aW9uKCkge1xuICAgICAgbW9kYWwuY2xvc2UoKTtcbiAgICB9O1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlRdWVzdGlvblByb3BlcnRpZXMge1xuICBwcml2YXRlIHByb3BlcnRpZXM6IEFycmF5PFN1cnZleS5Kc29uT2JqZWN0UHJvcGVydHk+O1xuICBwcml2YXRlIGVkaXRvckRlZmluaXRpb246IEFycmF5PElTdXJ2ZXlRdWVzdGlvbkVkaXRvckRlZmluaXRpb24+O1xuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgb2JqOiBhbnksXG4gICAgcHVibGljIG9wdGlvbnM6IElTdXJ2ZXlPYmplY3RFZGl0b3JPcHRpb25zID0gbnVsbFxuICApIHtcbiAgICB0aGlzLnByb3BlcnRpZXMgPSBTdXJ2ZXkuU2VyaWFsaXplci5nZXRQcm9wZXJ0aWVzQnlPYmoodGhpcy5vYmopO1xuICAgIHRoaXMuZWRpdG9yRGVmaW5pdGlvbiA9IFN1cnZleVF1ZXN0aW9uRWRpdG9yRGVmaW5pdGlvbi5nZXRBbGxEZWZpbml0aW9uc0J5Q2xhc3MoXG4gICAgICB0aGlzLm9iai5nZXRUeXBlKClcbiAgICApO1xuICB9XG4gIHB1YmxpYyBnZXRQcm9wZXJ0eShwcm9wZXJ0eU5hbWU6IHN0cmluZyk6IFN1cnZleS5Kc29uT2JqZWN0UHJvcGVydHkge1xuICAgIHZhciBwcm9wZXJ0eSA9IHRoaXMuZ2V0UHJvcGVydHlDb3JlKHByb3BlcnR5TmFtZSk7XG4gICAgaWYgKCFwcm9wZXJ0eSkgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIFN1cnZleUhlbHBlci5pc1Byb3BlcnR5VmlzaWJsZSh0aGlzLm9iaiwgcHJvcGVydHksIHRoaXMub3B0aW9ucylcbiAgICAgID8gcHJvcGVydHlcbiAgICAgIDogbnVsbDtcbiAgfVxuICBwcml2YXRlIGdldFByb3BlcnR5Q29yZShwcm9wZXJ0eU5hbWU6IHN0cmluZyk6IFN1cnZleS5Kc29uT2JqZWN0UHJvcGVydHkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5wcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAodGhpcy5wcm9wZXJ0aWVzW2ldLm5hbWUgPT0gcHJvcGVydHlOYW1lKSByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW2ldO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBwdWJsaWMgZ2V0UHJvcGVydGllcyh0YWI6IGFueSk6IEFycmF5PFN1cnZleS5Kc29uT2JqZWN0UHJvcGVydHk+IHtcbiAgICByZXR1cm4gdGhpcy5lZGl0b3JEZWZpbml0aW9uXG4gICAgICAucmVkdWNlKChhLCBiKSA9PiBhLmNvbmNhdChiLnByb3BlcnRpZXMpLCBbXG4gICAgICAgIDxhbnk+eyBuYW1lOiB0YWIubmFtZSwgdGFiOiB0YWIubmFtZSB9XG4gICAgICBdKVxuICAgICAgLmZpbHRlcihcbiAgICAgICAgcHJvcCA9PlxuICAgICAgICAgIHByb3AgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgIHR5cGVvZiBwcm9wICE9PSBcInN0cmluZ1wiICYmXG4gICAgICAgICAgcHJvcC50YWIgPT09IHRhYi5uYW1lXG4gICAgICApXG4gICAgICAubWFwKHByb3AgPT4gdHlwZW9mIHByb3AgIT09IFwic3RyaW5nXCIgJiYgdGhpcy5nZXRQcm9wZXJ0eUNvcmUocHJvcC5uYW1lKSlcbiAgICAgIC5maWx0ZXIoXG4gICAgICAgIHByb3AgPT5cbiAgICAgICAgICAhIXByb3AgJiZcbiAgICAgICAgICAoKHByb3AubmFtZSA9PSB0YWIubmFtZSAmJiB0YWIudmlzaWJsZSA9PT0gdHJ1ZSkgfHxcbiAgICAgICAgICAgIFN1cnZleUhlbHBlci5pc1Byb3BlcnR5VmlzaWJsZSh0aGlzLm9iaiwgcHJvcCwgdGhpcy5vcHRpb25zKSlcbiAgICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFN1cnZleVF1ZXN0aW9uRWRpdG9yIHtcbiAgcHJvdGVjdGVkIHByb3BlcnRpZXM6IFN1cnZleVF1ZXN0aW9uUHJvcGVydGllcztcbiAgcHVibGljIG9uQ2hhbmdlZDogKG9iajogU3VydmV5LkJhc2UpID0+IGFueTtcbiAgcHVibGljIG9uSGlkZVdpbmRvdzogKCkgPT4gYW55O1xuICBwdWJsaWMgb25Pa0NsaWNrOiBhbnk7XG4gIHB1YmxpYyBvbkFwcGx5Q2xpY2s6IGFueTtcbiAgcHVibGljIG9uUmVzZXRDbGljazogYW55O1xuICBrb1RhYnM6IGFueTtcbiAga29BY3RpdmVUYWIgPSBrby5vYnNlcnZhYmxlPHN0cmluZz4oKTtcbiAga29UaXRsZSA9IGtvLm9ic2VydmFibGU8c3RyaW5nPigpO1xuICBrb1Nob3dBcHBseUJ1dHRvbjogYW55O1xuICBvblRhYkNsaWNrOiBhbnk7XG4gIHByaXZhdGUgZWRpdGFibGVPYmplY3Q6IEVkaXRhYmxlT2JqZWN0O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIG9iajogYW55LFxuICAgIHB1YmxpYyBjbGFzc05hbWU6IHN0cmluZyA9IG51bGwsXG4gICAgcHVibGljIG9wdGlvbnM6IElTdXJ2ZXlPYmplY3RFZGl0b3JPcHRpb25zID0gbnVsbFxuICApIHtcbiAgICB0aGlzLmVkaXRhYmxlT2JqZWN0ID0gbmV3IEVkaXRhYmxlT2JqZWN0KG9iaik7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIGlmICghdGhpcy5jbGFzc05hbWUgJiYgdGhpcy5vYmouZ2V0VHlwZSkge1xuICAgICAgdGhpcy5jbGFzc05hbWUgPSB0aGlzLm9iai5nZXRUeXBlKCk7XG4gICAgfVxuICAgIHRoaXMucHJvcGVydGllcyA9IG5ldyBTdXJ2ZXlRdWVzdGlvblByb3BlcnRpZXMoXG4gICAgICB0aGlzLmVkaXRhYmxlT2JqLFxuICAgICAgdGhpcy5vcHRpb25zXG4gICAgKTtcbiAgICBzZWxmLm9uQXBwbHlDbGljayA9IGZ1bmN0aW9uKCkge1xuICAgICAgc2VsZi5hcHBseSgpO1xuICAgIH07XG4gICAgc2VsZi5vbk9rQ2xpY2sgPSBmdW5jdGlvbigpIHtcbiAgICAgIHNlbGYuZG9DbG9zZVdpbmRvdyhmYWxzZSk7XG4gICAgfTtcbiAgICBzZWxmLm9uUmVzZXRDbGljayA9IGZ1bmN0aW9uKCkge1xuICAgICAgc2VsZi5kb0Nsb3NlV2luZG93KHRydWUpO1xuICAgIH07XG4gICAgdGhpcy5vblRhYkNsaWNrID0gZnVuY3Rpb24odGFiKSB7XG4gICAgICBzZWxmLmtvQWN0aXZlVGFiKHRhYi5uYW1lKTtcbiAgICB9O1xuICAgIHZhciB0YWJzID0gdGhpcy5idWlsZFRhYnMoKTtcbiAgICB0aGlzLmtvVGFicyA9IGtvLm9ic2VydmFibGVBcnJheTxTdXJ2ZXlRdWVzdGlvbkVkaXRvclRhYj4odGFicyk7XG4gICAgdGFicy5mb3JFYWNoKHRhYiA9PiB0YWIuYmVmb3JlU2hvdygpKTtcbiAgICBpZiAodGFicy5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLmtvQWN0aXZlVGFiKHRhYnNbMF0ubmFtZSk7XG4gICAgfVxuICAgIHRoaXMua29TaG93QXBwbHlCdXR0b24gPSBrby5vYnNlcnZhYmxlKFxuICAgICAgIXRoaXMub3B0aW9ucyB8fCB0aGlzLm9wdGlvbnMuc2hvd0FwcGx5QnV0dG9uSW5FZGl0b3JzXG4gICAgKTtcbiAgICB0aGlzLmtvVGl0bGUodGhpcy5nZXRUaXRsZSgpKTtcbiAgfVxuICBwdWJsaWMgZ2V0IG9iaigpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLmVkaXRhYmxlT2JqZWN0Lm9iajtcbiAgfVxuICBwdWJsaWMgZ2V0IGVkaXRhYmxlT2JqKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuZWRpdGFibGVPYmplY3QuZWRpdGFibGVPYmo7XG4gIH1cbiAgcHVibGljIGdldCByZWFkT25seSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISF0aGlzLm9wdGlvbnMgJiYgdGhpcy5vcHRpb25zLnJlYWRPbmx5O1xuICB9XG4gIHByaXZhdGUgZ2V0VGl0bGUoKTogc3RyaW5nIHtcbiAgICB2YXIgcmVzO1xuICAgIGlmICh0aGlzLmVkaXRhYmxlT2JqW1wibmFtZVwiXSkge1xuICAgICAgcmVzID0gZWRpdG9yTG9jYWxpemF0aW9uXG4gICAgICAgIC5nZXRTdHJpbmcoXCJwZS5xRWRpdG9yVGl0bGVcIilcbiAgICAgICAgW1wiZm9ybWF0XCJdKHRoaXMuZWRpdGFibGVPYmpbXCJuYW1lXCJdKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzID0gZWRpdG9yTG9jYWxpemF0aW9uLmdldFN0cmluZyhcInBlLnN1cnZleUVkaXRvclRpdGxlXCIpO1xuICAgIH1cbiAgICBpZiAoISF0aGlzLm9wdGlvbnMgJiYgdGhpcy5vcHRpb25zLm9uR2V0RWxlbWVudEVkaXRvclRpdGxlQ2FsbGJhY2spIHtcbiAgICAgIHJlcyA9IHRoaXMub3B0aW9ucy5vbkdldEVsZW1lbnRFZGl0b3JUaXRsZUNhbGxiYWNrKHRoaXMuZWRpdGFibGVPYmosIHJlcyk7XG4gICAgfVxuICAgIHJldHVybiByZXM7XG4gIH1cbiAgcHJvdGVjdGVkIGRvQ2xvc2VXaW5kb3coaXNDYW5jZWw6IGJvb2xlYW4pIHtcbiAgICB2YXIgYXBwbGllZFN1Y2Nlc2Z1bGwgPSBmYWxzZTtcbiAgICBpZiAoIWlzQ2FuY2VsKSB7XG4gICAgICBhcHBsaWVkU3VjY2VzZnVsbCA9IHRoaXMuYXBwbHkoKTtcbiAgICB9XG4gICAgaWYgKGlzQ2FuY2VsIHx8IGFwcGxpZWRTdWNjZXNmdWxsKSB7XG4gICAgICB2YXIgdGFicyA9IHRoaXMua29UYWJzKCk7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRhYnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdGFic1tpXS5kb0Nsb3NlV2luZG93KCk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5vbkhpZGVXaW5kb3cpIHRoaXMub25IaWRlV2luZG93KCk7XG4gICAgfVxuICB9XG4gIHB1YmxpYyBoYXNFcnJvcigpOiBib29sZWFuIHtcbiAgICB2YXIgdGFicyA9IHRoaXMua29UYWJzKCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0YWJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAodGFic1tpXS5oYXNFcnJvcigpKSB7XG4gICAgICAgIHRoaXMua29BY3RpdmVUYWIodGFic1tpXS5uYW1lKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBwdWJsaWMgcmVzZXQoKSB7XG4gICAgdGhpcy5lZGl0YWJsZU9iamVjdC5yZXNldCgpO1xuICAgIHZhciB0YWJzID0gdGhpcy5rb1RhYnMoKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRhYnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRhYnNbaV0ucmVzZXQoKTtcbiAgICB9XG4gIH1cbiAgcHVibGljIGFwcGx5KCk6IGJvb2xlYW4ge1xuICAgIHZhciByZXMgPSB0cnVlO1xuICAgIHZhciBpc0ZpcnN0RXJyb3IgPSBmYWxzZTtcbiAgICB2YXIgdGFicyA9IHRoaXMua29UYWJzKCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0YWJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgdGFiUmVzID0gdGFic1tpXS5hcHBseSgpO1xuICAgICAgaWYgKCF0YWJSZXMpIHtcbiAgICAgICAgdGFic1tpXS5leHBhbmQoKTtcbiAgICAgICAgaWYgKCFpc0ZpcnN0RXJyb3IpIHtcbiAgICAgICAgICB0aGlzLmtvQWN0aXZlVGFiKHRhYnNbaV0ubmFtZSk7XG4gICAgICAgICAgaXNGaXJzdEVycm9yID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmVzID0gdGFiUmVzICYmIHJlcztcbiAgICB9XG5cbiAgICBpZiAocmVzKSB7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRhYnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdGFic1tpXS5hcHBseVRvT2JqKHRoaXMub2JqKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLm9uQ2hhbmdlZCkge1xuICAgICAgICB0aGlzLm9uQ2hhbmdlZCh0aGlzLm9iaik7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXM7XG4gIH1cbiAgcHVibGljIGdldFByb3BlcnR5RWRpdG9yQnlOYW1lKFxuICAgIHByb3BlcnR5TmFtZTogc3RyaW5nXG4gICk6IFN1cnZleVF1ZXN0aW9uRWRpdG9yUHJvcGVydHkge1xuICAgIHZhciB0YWJzID0gdGhpcy5rb1RhYnMoKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRhYnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciByZXMgPSB0YWJzW2ldLmdldFByb3BlcnR5RWRpdG9yQnlOYW1lKHByb3BlcnR5TmFtZSk7XG4gICAgICBpZiAoISFyZXMpIHJldHVybiByZXM7XG4gICAgfVxuICAgIHJldHVybiByZXM7XG4gIH1cbiAgcHJpdmF0ZSBidWlsZFRhYnMoKTogQXJyYXk8U3VydmV5UXVlc3Rpb25FZGl0b3JUYWI+IHtcbiAgICB2YXIgdGFicyA9IFtdO1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICB2YXIgcHJvcGVydGllcyA9IG5ldyBTdXJ2ZXlRdWVzdGlvbkVkaXRvclByb3BlcnRpZXMoXG4gICAgICB0aGlzLmVkaXRhYmxlT2JqLFxuICAgICAgU3VydmV5UXVlc3Rpb25FZGl0b3JEZWZpbml0aW9uLmdldFByb3BlcnRpZXModGhpcy5jbGFzc05hbWUpLFxuICAgICAgdGhpcy5vcHRpb25zLFxuICAgICAgbnVsbCxcbiAgICAgIGZ1bmN0aW9uKHByb3BOYW1lOiBzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIHNlbGYuZ2V0UXVlc3Rpb25FZGl0b3JQcm9wZXJ0eUJ5TmFtZShwcm9wTmFtZSk7XG4gICAgICB9XG4gICAgKTtcbiAgICBpZiAoU3VydmV5UXVlc3Rpb25FZGl0b3JEZWZpbml0aW9uLmlzR2VuZXJhbFRhYlZpc2libGUodGhpcy5jbGFzc05hbWUpKSB7XG4gICAgICB0YWJzLnB1c2goXG4gICAgICAgIG5ldyBTdXJ2ZXlRdWVzdGlvbkVkaXRvclRhYih0aGlzLmVkaXRhYmxlT2JqLCBwcm9wZXJ0aWVzLCBcImdlbmVyYWxcIilcbiAgICAgICk7XG4gICAgfVxuICAgIHRoaXMuYWRkUHJvcGVydGllc1RhYnModGFicyk7XG4gICAgcmV0dXJuIHRhYnM7XG4gIH1cbiAgcHJpdmF0ZSBhZGRQcm9wZXJ0aWVzVGFicyh0YWJzOiBBcnJheTxTdXJ2ZXlRdWVzdGlvbkVkaXRvclRhYj4pIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgdmFyIHRhYk5hbWVzID0gU3VydmV5UXVlc3Rpb25FZGl0b3JEZWZpbml0aW9uLmdldFRhYnModGhpcy5jbGFzc05hbWUpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGFiTmFtZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciB0YWJJdGVtID0gdGFiTmFtZXNbaV07XG4gICAgICB2YXIgcHJvcGVydGllcyA9IHRoaXMucHJvcGVydGllcy5nZXRQcm9wZXJ0aWVzKHRhYkl0ZW0pO1xuICAgICAgaWYgKHByb3BlcnRpZXMubGVuZ3RoID4gMCkge1xuICAgICAgICB2YXIgcHJvcGVydHlUYWIgPSBuZXcgU3VydmV5UXVlc3Rpb25FZGl0b3JUYWIoXG4gICAgICAgICAgdGhpcy5lZGl0YWJsZU9iaixcbiAgICAgICAgICBuZXcgU3VydmV5UXVlc3Rpb25FZGl0b3JQcm9wZXJ0aWVzKFxuICAgICAgICAgICAgdGhpcy5lZGl0YWJsZU9iaixcbiAgICAgICAgICAgIHByb3BlcnRpZXMsXG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMsXG4gICAgICAgICAgICB0YWJJdGVtLFxuICAgICAgICAgICAgZnVuY3Rpb24ocHJvcE5hbWU6IHN0cmluZykge1xuICAgICAgICAgICAgICByZXR1cm4gc2VsZi5nZXRRdWVzdGlvbkVkaXRvclByb3BlcnR5QnlOYW1lKHByb3BOYW1lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICApLFxuICAgICAgICAgIHRhYkl0ZW0ubmFtZVxuICAgICAgICApO1xuICAgICAgICBwcm9wZXJ0eVRhYi50aXRsZSA9IHRhYkl0ZW0udGl0bGU7XG4gICAgICAgIHRhYnMucHVzaChwcm9wZXJ0eVRhYik7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHByaXZhdGUgZ2V0UXVlc3Rpb25FZGl0b3JQcm9wZXJ0eUJ5TmFtZShcbiAgICBwcm9wTmFtZTogc3RyaW5nXG4gICk6IFN1cnZleVF1ZXN0aW9uRWRpdG9yUHJvcGVydHkge1xuICAgIGlmICghdGhpcy5rb1RhYnMpIHJldHVybiBudWxsO1xuICAgIHZhciB0YWJzID0gdGhpcy5rb1RhYnMoKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRhYnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciByZXMgPSB0YWJzW2ldLmdldFByb3BlcnR5RWRpdG9yQnlOYW1lKHByb3BOYW1lKTtcbiAgICAgIGlmICghIXJlcykgcmV0dXJuIHJlcztcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgZ2V0IHVzZVRhYnNJbkVsZW1lbnRFZGl0b3IoKSB7XG4gICAgcmV0dXJuIChcbiAgICAgICEhdGhpcy5vcHRpb25zICYmXG4gICAgICB0aGlzLm9wdGlvbnMudXNlVGFic0luRWxlbWVudEVkaXRvciAmJlxuICAgICAgdGhpcy5rb1RhYnMoKS5sZW5ndGggPiAxXG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25FZGl0b3JUYWIge1xuICBwcml2YXRlIHRpdGxlVmFsdWU6IHN0cmluZztcbiAgcHVibGljIG9uRXhwYW5kOiAoKSA9PiB2b2lkO1xuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgb2JqOiBhbnksXG4gICAgcHVibGljIHByb3BlcnRpZXM6IFN1cnZleVF1ZXN0aW9uRWRpdG9yUHJvcGVydGllcyA9IG51bGwsXG4gICAgcHJpdmF0ZSBfbmFtZVxuICApIHt9XG4gIHB1YmxpYyBleHBhbmQoKSB7XG4gICAgaWYgKCEhdGhpcy5vbkV4cGFuZCkgdGhpcy5vbkV4cGFuZCgpO1xuICB9XG4gIHB1YmxpYyBrb0FmdGVyUmVuZGVyKGVsZW1lbnRzOiBIVE1MRWxlbWVudFtdLCBjb250ZXh0KSB7XG4gICAgZm9jdXNGaXJzdENvbnRyb2woZWxlbWVudHMpO1xuICB9XG4gIHB1YmxpYyBnZXQgbmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9uYW1lO1xuICB9XG4gIHB1YmxpYyBnZXQgdGl0bGUoKSB7XG4gICAgaWYgKHRoaXMudGl0bGVWYWx1ZSkgcmV0dXJuIHRoaXMudGl0bGVWYWx1ZTtcbiAgICB2YXIgc3RyID0gZWRpdG9yTG9jYWxpemF0aW9uLmdldFN0cmluZyhcInBlLnRhYnMuXCIgKyB0aGlzLm5hbWUpO1xuICAgIHJldHVybiBzdHIgPyBzdHIgOiB0aGlzLm5hbWU7XG4gIH1cbiAgcHVibGljIHNldCB0aXRsZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy50aXRsZVZhbHVlID0gdmFsdWU7XG4gIH1cbiAgcHVibGljIGdldCBodG1sVGVtcGxhdGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCJxdWVzdGlvbmVkaXRvcnRhYlwiO1xuICB9XG4gIHB1YmxpYyBnZXQgdGVtcGxhdGVPYmplY3QoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuICBwdWJsaWMgaGFzRXJyb3IoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydGllcy5oYXNFcnJvcigpO1xuICB9XG4gIHB1YmxpYyBiZWZvcmVTaG93KCkge1xuICAgIHRoaXMucHJvcGVydGllcy5iZWZvcmVTaG93KCk7XG4gIH1cbiAgcHVibGljIHJlc2V0KCkge1xuICAgIHRoaXMucHJvcGVydGllcy5yZXNldCgpO1xuICB9XG4gIHB1YmxpYyBhcHBseSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzLmFwcGx5KCk7XG4gIH1cbiAgcHVibGljIGFwcGx5VG9PYmoob2JqOiBTdXJ2ZXkuQmFzZSkge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXMuYXBwbHlUb09iaihvYmopO1xuICB9XG4gIHB1YmxpYyBnZXRQcm9wZXJ0eUVkaXRvckJ5TmFtZShcbiAgICBwcm9wZXJ0eU5hbWU6IHN0cmluZ1xuICApOiBTdXJ2ZXlRdWVzdGlvbkVkaXRvclByb3BlcnR5IHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzLmdldFByb3BlcnR5RWRpdG9yQnlOYW1lKHByb3BlcnR5TmFtZSk7XG4gIH1cbiAgcHVibGljIGRvQ2xvc2VXaW5kb3coKSB7fVxuICBwcm90ZWN0ZWQgZ2V0VmFsdWUocHJvcGVydHk6IFN1cnZleS5Kc29uT2JqZWN0UHJvcGVydHkpOiBhbnkge1xuICAgIHJldHVybiBwcm9wZXJ0eS5nZXRQcm9wZXJ0eVZhbHVlKHRoaXMub2JqKTtcbiAgfVxufVxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL3F1ZXN0aW9uRWRpdG9ycy9xdWVzdGlvbkVkaXRvci50cyIsImltcG9ydCAqIGFzIFN1cnZleSBmcm9tIFwic3VydmV5LWtub2Nrb3V0XCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVN1cnZleVF1ZXN0aW9uRWRpdG9yRGVmaW5pdGlvbiB7XG4gIHRpdGxlPzogc3RyaW5nO1xuICBwcm9wZXJ0aWVzPzogQXJyYXk8XG4gICAgc3RyaW5nIHwgeyBuYW1lOiBzdHJpbmc7IHRpdGxlPzogc3RyaW5nOyBjYXRlZ29yeT86IHN0cmluZzsgdGFiPzogc3RyaW5nIH1cbiAgPjtcbiAgdGFicz86IEFycmF5PHtcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgaW5kZXg/OiBudW1iZXI7XG4gICAgdGl0bGU/OiBzdHJpbmc7XG4gICAgdmlzaWJsZT86IGJvb2xlYW47XG4gIH0+O1xufVxuXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25FZGl0b3JEZWZpbml0aW9uIHtcbiAgcHVibGljIHN0YXRpYyBkZWZpbml0aW9uOiB7XG4gICAgW2tleTogc3RyaW5nXTogSVN1cnZleVF1ZXN0aW9uRWRpdG9yRGVmaW5pdGlvbjtcbiAgfSA9IHtcbiAgICBxdWVzdGlvbjoge1xuICAgICAgcHJvcGVydGllczogW1xuICAgICAgICBcIm5hbWVcIixcbiAgICAgICAgXCJ0aXRsZVwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCIsXG4gICAgICAgIHsgbmFtZTogXCJ2aXNpYmxlXCIsIGNhdGVnb3J5OiBcImNoZWNrc1wiIH0sXG4gICAgICAgIHsgbmFtZTogXCJpc1JlcXVpcmVkXCIsIGNhdGVnb3J5OiBcImNoZWNrc1wiIH0sXG4gICAgICAgIHsgbmFtZTogXCJzdGFydFdpdGhOZXdMaW5lXCIsIGNhdGVnb3J5OiBcImNoZWNrc1wiIH1cbiAgICAgIF0sXG4gICAgICB0YWJzOiBbXG4gICAgICAgIHsgbmFtZTogXCJ2aXNpYmxlSWZcIiwgaW5kZXg6IDEwMCB9LFxuICAgICAgICB7IG5hbWU6IFwiZW5hYmxlSWZcIiwgaW5kZXg6IDExMCB9XG4gICAgICBdXG4gICAgfSxcbiAgICBjb21tZW50OiB7XG4gICAgICBwcm9wZXJ0aWVzOiBbXCJyb3dzXCIsIFwicGxhY2VIb2xkZXJcIl1cbiAgICB9LFxuICAgIGZpbGU6IHtcbiAgICAgIHByb3BlcnRpZXM6IFtcbiAgICAgICAgeyBuYW1lOiBcInNob3dQcmV2aWV3XCIsIGNhdGVnb3J5OiBcImltYWdlQ2hlY2tzXCIgfSxcbiAgICAgICAgeyBuYW1lOiBcInN0b3JlRGF0YUFzVGV4dFwiLCBjYXRlZ29yeTogXCJpbWFnZUNoZWNrc1wiIH0sXG4gICAgICAgIFwibWF4U2l6ZVwiLFxuICAgICAgICBcImltYWdlSGVpZ2h0XCIsXG4gICAgICAgIFwiaW1hZ2VXaWR0aFwiXG4gICAgICBdXG4gICAgfSxcbiAgICBodG1sOiB7XG4gICAgICB0YWJzOiBbeyBuYW1lOiBcImh0bWxcIiwgaW5kZXg6IDEwIH1dXG4gICAgfSxcbiAgICBtYXRyaXhkcm9wZG93bmJhc2U6IHtcbiAgICAgIHByb3BlcnRpZXM6IFtcImNlbGxUeXBlXCIsIFwiY29sdW1uc0xvY2F0aW9uXCJdLFxuICAgICAgdGFiczogW1xuICAgICAgICB7IG5hbWU6IFwiY29sdW1uc1wiLCBpbmRleDogMTAgfSxcbiAgICAgICAgeyBuYW1lOiBcInJvd3NcIiwgaW5kZXg6IDExIH0sXG4gICAgICAgIHsgbmFtZTogXCJjaG9pY2VzXCIsIGluZGV4OiAxMiB9XG4gICAgICBdXG4gICAgfSxcbiAgICBtYXRyaXhkeW5hbWljOiB7XG4gICAgICBwcm9wZXJ0aWVzOiBbXCJyb3dDb3VudFwiLCBcImFkZFJvd0xvY2F0aW9uXCIsIFwiYWRkUm93VGV4dFwiLCBcInJlbW92ZVJvd1RleHRcIl1cbiAgICB9LFxuICAgIG1hdHJpeGRyb3Bkb3duOiB7XG4gICAgICBwcm9wZXJ0aWVzOiBbXCJ0b3RhbFRleHRcIl1cbiAgICB9LFxuICAgIG1hdHJpeDoge1xuICAgICAgcHJvcGVydGllczogW1wiaXNBbGxSb3dSZXF1aXJlZFwiXSxcbiAgICAgIHRhYnM6IFt7IG5hbWU6IFwiY29sdW1uc1wiLCBpbmRleDogMTAgfSwgeyBuYW1lOiBcInJvd3NcIiwgaW5kZXg6IDExIH1dXG4gICAgfSxcbiAgICBtdWx0aXBsZXRleHQ6IHtcbiAgICAgIHByb3BlcnRpZXM6IFtcImNvbENvdW50XCJdLFxuICAgICAgdGFiczogW3sgbmFtZTogXCJpdGVtc1wiLCBpbmRleDogMTAgfV1cbiAgICB9LFxuICAgIHJhdGluZzoge1xuICAgICAgcHJvcGVydGllczogW1xuICAgICAgICBcInJhdGVNaW5cIixcbiAgICAgICAgXCJyYXRlTWF4XCIsXG4gICAgICAgIFwicmF0ZVN0ZXBcIixcbiAgICAgICAgXCJtaW5SYXRlRGVzY3JpcHRpb25cIixcbiAgICAgICAgXCJtYXhSYXRlRGVzY3JpcHRpb25cIlxuICAgICAgXSxcbiAgICAgIHRhYnM6IFt7IG5hbWU6IFwicmF0ZVZhbHVlc1wiLCBpbmRleDogMTAgfV1cbiAgICB9LFxuICAgIHNlbGVjdGJhc2U6IHtcbiAgICAgIHByb3BlcnRpZXM6IFtcbiAgICAgICAgeyBuYW1lOiBcImhhc090aGVyXCIsIHRhYjogXCJjaG9pY2VzXCIgfSxcbiAgICAgICAgeyBuYW1lOiBcIm90aGVyVGV4dFwiLCB0YWI6IFwiY2hvaWNlc1wiIH0sXG4gICAgICAgIFwiY2hvaWNlc09yZGVyXCIsXG4gICAgICAgIFwiY29sQ291bnRcIlxuICAgICAgXSxcbiAgICAgIHRhYnM6IFtcbiAgICAgICAgeyBuYW1lOiBcImNob2ljZXNcIiwgaW5kZXg6IDEwIH0sXG4gICAgICAgIHsgbmFtZTogXCJjaG9pY2VzQnlVcmxcIiwgaW5kZXg6IDExIH0sXG4gICAgICAgIHsgbmFtZTogXCJ2YWxpZGF0b3JzXCIsIGluZGV4OiAyMDAgfVxuICAgICAgXVxuICAgIH0sXG4gICAgXCJpdGVtdmFsdWVbXUBjaG9pY2VzXCI6IHtcbiAgICAgIHRpdGxlOiBcIlJ1bGVzXCIsXG4gICAgICB0YWJzOiBbXG4gICAgICAgIHsgbmFtZTogXCJnZW5lcmFsXCIsIHZpc2libGU6IGZhbHNlIH0sXG4gICAgICAgIHsgbmFtZTogXCJ2aXNpYmxlSWZcIiwgdmlzaWJsZTogdHJ1ZSB9LFxuICAgICAgICB7IG5hbWU6IFwiZW5hYmxlSWZcIiwgdmlzaWJsZTogdHJ1ZSB9XG4gICAgICBdXG4gICAgfSxcbiAgICBcIml0ZW12YWx1ZVtdQHJvd3NcIjoge1xuICAgICAgdGl0bGU6IFwiUnVsZXNcIixcbiAgICAgIHRhYnM6IFtcbiAgICAgICAgeyBuYW1lOiBcImdlbmVyYWxcIiwgdmlzaWJsZTogZmFsc2UgfSxcbiAgICAgICAgeyBuYW1lOiBcInZpc2libGVJZlwiLCB2aXNpYmxlOiB0cnVlIH1cbiAgICAgIF1cbiAgICB9LFxuICAgIFwiaXRlbXZhbHVlW11AY29sdW1uc1wiOiB7XG4gICAgICB0aXRsZTogXCJSdWxlc1wiLFxuICAgICAgdGFiczogW1xuICAgICAgICB7IG5hbWU6IFwiZ2VuZXJhbFwiLCB2aXNpYmxlOiBmYWxzZSB9LFxuICAgICAgICB7IG5hbWU6IFwidmlzaWJsZUlmXCIsIHZpc2libGU6IHRydWUgfVxuICAgICAgXVxuICAgIH0sXG4gICAgY2hlY2tib3g6IHtcbiAgICAgIHByb3BlcnRpZXM6IFtcbiAgICAgICAgeyBuYW1lOiBcImhhc1NlbGVjdEFsbFwiLCB0YWI6IFwiY2hvaWNlc1wiIH0sXG4gICAgICAgIHsgbmFtZTogXCJzZWxlY3RBbGxUZXh0XCIsIHRhYjogXCJjaG9pY2VzXCIgfSxcbiAgICAgICAgeyBuYW1lOiBcImhhc05vbmVcIiwgdGFiOiBcImNob2ljZXNcIiB9LFxuICAgICAgICB7IG5hbWU6IFwibm9uZVRleHRcIiwgdGFiOiBcImNob2ljZXNcIiB9XG4gICAgICBdXG4gICAgfSxcbiAgICByYWRpb2dyb3VwOiB7fSxcbiAgICBkcm9wZG93bjoge1xuICAgICAgcHJvcGVydGllczogW1xuICAgICAgICBcIm9wdGlvbnNDYXB0aW9uXCIsXG4gICAgICAgIHsgbmFtZTogXCJjaG9pY2VzTWluXCIsIHRhYjogXCJjaG9pY2VzXCIgfSxcbiAgICAgICAgeyBuYW1lOiBcImNob2ljZXNNYXhcIiwgdGFiOiBcImNob2ljZXNcIiB9LFxuICAgICAgICB7IG5hbWU6IFwiY2hvaWNlc1N0ZXBcIiwgdGFiOiBcImNob2ljZXNcIiB9XG4gICAgICBdXG4gICAgfSxcbiAgICB0ZXh0OiB7XG4gICAgICBwcm9wZXJ0aWVzOiBbXCJpbnB1dFR5cGVcIiwgXCJwbGFjZUhvbGRlclwiXSxcbiAgICAgIHRhYnM6IFt7IG5hbWU6IFwidmFsaWRhdG9yc1wiLCBpbmRleDogMjAwIH1dXG4gICAgfSxcbiAgICBib29sZWFuOiB7XG4gICAgICBwcm9wZXJ0aWVzOiBbXCJsYWJlbFwiXVxuICAgIH0sXG4gICAgZXhwcmVzc2lvbjoge1xuICAgICAgcHJvcGVydGllczogW1wiY3VycmVuY3lcIiwgXCJkaXNwbGF5U3R5bGVcIiwgXCJmb3JtYXRcIl0sXG4gICAgICB0YWJzOiBbeyBuYW1lOiBcImV4cHJlc3Npb25cIiwgaW5kZXg6IDEwIH1dXG4gICAgfSxcbiAgICBtYXRyaXhkcm9wZG93bmNvbHVtbjoge1xuICAgICAgcHJvcGVydGllczogW1xuICAgICAgICBcImlzUmVxdWlyZWRcIixcbiAgICAgICAgXCJjZWxsVHlwZVwiLFxuICAgICAgICBcIm5hbWVcIixcbiAgICAgICAgXCJ0aXRsZVwiLFxuICAgICAgICB7IG5hbWU6IFwidG90YWxUeXBlXCIsIHRhYjogXCJ0b3RhbHNcIiB9LFxuICAgICAgICB7IG5hbWU6IFwidG90YWxEaXNwbGF5U3R5bGVcIiwgdGFiOiBcInRvdGFsc1wiIH0sXG4gICAgICAgIHsgbmFtZTogXCJ0b3RhbEN1cnJlbmN5XCIsIHRhYjogXCJ0b3RhbHNcIiB9LFxuICAgICAgICB7IG5hbWU6IFwidG90YWxGb3JtYXRcIiwgdGFiOiBcInRvdGFsc1wiIH0sXG4gICAgICAgIHsgbmFtZTogXCJ0b3RhbEV4cHJlc3Npb25cIiwgdGFiOiBcInRvdGFsc1wiIH1cbiAgICAgIF1cbiAgICB9LFxuICAgIFwibWF0cml4ZHJvcGRvd25jb2x1bW5AZGVmYXVsdFwiOiB7XG4gICAgICBwcm9wZXJ0aWVzOiBbXCJ3aWR0aFwiXSxcbiAgICAgIHRhYnM6IFtcbiAgICAgICAgeyBuYW1lOiBcImdlbmVyYWxcIiwgdmlzaWJsZTogZmFsc2UgfSxcbiAgICAgICAgeyBuYW1lOiBcInZpc2libGVJZlwiLCBpbmRleDogMTIgfSxcbiAgICAgICAgeyBuYW1lOiBcImVuYWJsZUlmXCIsIGluZGV4OiAyMCB9LFxuICAgICAgICB7IG5hbWU6IFwicmVxdWlyZWRJZlwiLCBpbmRleDogMzAgfSxcbiAgICAgICAgeyBuYW1lOiBcInRvdGFsc1wiLCBpbmRleDogNDAgfVxuICAgICAgXVxuICAgIH0sXG4gICAgXCJtYXRyaXhkcm9wZG93bmNvbHVtbkBjaGVja2JveFwiOiB7XG4gICAgICBwcm9wZXJ0aWVzOiBbXCJoYXNPdGhlclwiLCBcIm90aGVyVGV4dFwiLCBcImNob2ljZXNPcmRlclwiLCBcImNvbENvdW50XCIsIFwid2lkdGhcIl0sXG4gICAgICB0YWJzOiBbXG4gICAgICAgIHsgbmFtZTogXCJjaG9pY2VzXCIsIGluZGV4OiAxMCB9LFxuICAgICAgICB7IG5hbWU6IFwiY2hvaWNlc0J5VXJsXCIsIGluZGV4OiAxMSB9LFxuICAgICAgICB7IG5hbWU6IFwidmlzaWJsZUlmXCIsIGluZGV4OiAxMiB9LFxuICAgICAgICB7IG5hbWU6IFwiZW5hYmxlSWZcIiwgaW5kZXg6IDIwIH0sXG4gICAgICAgIHsgbmFtZTogXCJyZXF1aXJlZElmXCIsIGluZGV4OiAzMCB9LFxuICAgICAgICB7IG5hbWU6IFwidG90YWxzXCIsIGluZGV4OiA0MCB9XG4gICAgICBdXG4gICAgfSxcbiAgICBcIm1hdHJpeGRyb3Bkb3duY29sdW1uQHJhZGlvZ3JvdXBcIjoge1xuICAgICAgcHJvcGVydGllczogW1wiaGFzT3RoZXJcIiwgXCJvdGhlclRleHRcIiwgXCJjaG9pY2VzT3JkZXJcIiwgXCJjb2xDb3VudFwiLCBcIndpZHRoXCJdLFxuICAgICAgdGFiczogW1xuICAgICAgICB7IG5hbWU6IFwiY2hvaWNlc1wiLCBpbmRleDogMTAgfSxcbiAgICAgICAgeyBuYW1lOiBcImNob2ljZXNCeVVybFwiLCBpbmRleDogMTEgfSxcbiAgICAgICAgeyBuYW1lOiBcInZpc2libGVJZlwiLCBpbmRleDogMTIgfSxcbiAgICAgICAgeyBuYW1lOiBcImVuYWJsZUlmXCIsIGluZGV4OiAyMCB9LFxuICAgICAgICB7IG5hbWU6IFwicmVxdWlyZWRJZlwiLCBpbmRleDogMzAgfSxcbiAgICAgICAgeyBuYW1lOiBcInRvdGFsc1wiLCBpbmRleDogNDAgfVxuICAgICAgXVxuICAgIH0sXG4gICAgXCJtYXRyaXhkcm9wZG93bmNvbHVtbkBkcm9wZG93blwiOiB7XG4gICAgICBwcm9wZXJ0aWVzOiBbXCJoYXNPdGhlclwiLCBcIm90aGVyVGV4dFwiLCBcImNob2ljZXNPcmRlclwiLCBcIm9wdGlvbnNDYXB0aW9uXCIsIFwid2lkdGhcIl0sXG4gICAgICB0YWJzOiBbXG4gICAgICAgIHsgbmFtZTogXCJjaG9pY2VzXCIsIGluZGV4OiAxMCB9LFxuICAgICAgICB7IG5hbWU6IFwiY2hvaWNlc0J5VXJsXCIsIGluZGV4OiAxMSB9LFxuICAgICAgICB7IG5hbWU6IFwidmlzaWJsZUlmXCIsIGluZGV4OiAxMiB9LFxuICAgICAgICB7IG5hbWU6IFwiZW5hYmxlSWZcIiwgaW5kZXg6IDIwIH0sXG4gICAgICAgIHsgbmFtZTogXCJyZXF1aXJlZElmXCIsIGluZGV4OiAzMCB9LFxuICAgICAgICB7IG5hbWU6IFwidG90YWxzXCIsIGluZGV4OiA0MCB9XG4gICAgICBdXG4gICAgfSxcbiAgICBcIm1hdHJpeGRyb3Bkb3duY29sdW1uQHRleHRcIjoge1xuICAgICAgcHJvcGVydGllczogW1wiaW5wdXRUeXBlXCIsIFwicGxhY2VIb2xkZXJcIiwgXCJtYXhMZW5ndGhcIiwgXCJ3aWR0aFwiXSxcbiAgICAgIHRhYnM6IFtcbiAgICAgICAgeyBuYW1lOiBcInZhbGlkYXRvcnNcIiwgaW5kZXg6IDEwIH0sXG4gICAgICAgIHsgbmFtZTogXCJ2aXNpYmxlSWZcIiwgaW5kZXg6IDEyIH0sXG4gICAgICAgIHsgbmFtZTogXCJlbmFibGVJZlwiLCBpbmRleDogMjAgfSxcbiAgICAgICAgeyBuYW1lOiBcInJlcXVpcmVkSWZcIiwgaW5kZXg6IDMwIH0sXG4gICAgICAgIHsgbmFtZTogXCJ0b3RhbHNcIiwgaW5kZXg6IDQwIH1cbiAgICAgIF1cbiAgICB9LFxuICAgIFwibWF0cml4ZHJvcGRvd25jb2x1bW5AY29tbWVudFwiOiB7XG4gICAgICBwcm9wZXJ0aWVzOiBbXCJyb3dzXCIsIFwicGxhY2VIb2xkZXJcIiwgXCJtYXhMZW5ndGhcIiwgXCJ3aWR0aFwiXSxcbiAgICAgIHRhYnM6IFtcbiAgICAgICAgeyBuYW1lOiBcInZhbGlkYXRvcnNcIiwgaW5kZXg6IDEwIH0sXG4gICAgICAgIHsgbmFtZTogXCJ2aXNpYmxlSWZcIiwgaW5kZXg6IDEyIH0sXG4gICAgICAgIHsgbmFtZTogXCJlbmFibGVJZlwiLCBpbmRleDogMjAgfSxcbiAgICAgICAgeyBuYW1lOiBcInJlcXVpcmVkSWZcIiwgaW5kZXg6IDMwIH0sXG4gICAgICAgIHsgbmFtZTogXCJ0b3RhbHNcIiwgaW5kZXg6IDQwIH1cbiAgICAgIF1cbiAgICB9LFxuICAgIFwibWF0cml4ZHJvcGRvd25jb2x1bW5AYm9vbGVhblwiOiB7XG4gICAgICBwcm9wZXJ0aWVzOiBbXCJkZWZhdWx0VmFsdWVcIiwgXCJ3aWR0aFwiXSxcbiAgICAgIHRhYnM6IFtcbiAgICAgICAgeyBuYW1lOiBcInZpc2libGVJZlwiLCBpbmRleDogMTIgfSxcbiAgICAgICAgeyBuYW1lOiBcImVuYWJsZUlmXCIsIGluZGV4OiAyMCB9LFxuICAgICAgICB7IG5hbWU6IFwicmVxdWlyZWRJZlwiLCBpbmRleDogMzAgfSxcbiAgICAgICAgeyBuYW1lOiBcInRvdGFsc1wiLCBpbmRleDogNDAgfVxuICAgICAgXVxuICAgIH0sXG4gICAgXCJtYXRyaXhkcm9wZG93bmNvbHVtbkBleHByZXNzaW9uXCI6IHtcbiAgICAgIHByb3BlcnRpZXM6IFtcIm5hbWVcIiwgXCJkaXNwbGF5U3R5bGVcIiwgXCJjdXJyZW5jeVwiLCBcIndpZHRoXCJdLFxuICAgICAgdGFiczogW3sgbmFtZTogXCJleHByZXNzaW9uXCIsIGluZGV4OiAxMCB9LCB7IG5hbWU6IFwidG90YWxzXCIsIGluZGV4OiA0MCB9XVxuICAgIH0sXG4gICAgbXVsdGlwbGV0ZXh0aXRlbToge1xuICAgICAgcHJvcGVydGllczogW1xuICAgICAgICBcImlucHV0VHlwZVwiLFxuICAgICAgICBcIm1heExlbmd0aFwiLFxuICAgICAgICBcInBsYWNlSG9sZGVyXCIsXG4gICAgICAgIFwicmVxdWlyZWRFcnJvclRleHRcIlxuICAgICAgXSxcbiAgICAgIHRhYnM6IFt7IG5hbWU6IFwidmFsaWRhdG9yc1wiLCBpbmRleDogMTAgfV1cbiAgICB9LFxuICAgIHBhbmVsZHluYW1pYzoge1xuICAgICAgcHJvcGVydGllczogW1xuICAgICAgICB7IG5hbWU6IFwicmVuZGVyTW9kZVwiLCBjYXRlZ29yeTogXCJyZW5kZXJcIiB9LFxuICAgICAgICB7IG5hbWU6IFwiYWxsb3dBZGRQYW5lbFwiLCBjYXRlZ29yeTogXCJyZW5kZXJcIiB9LFxuICAgICAgICB7IG5hbWU6IFwiYWxsb3dSZW1vdmVQYW5lbFwiLCBjYXRlZ29yeTogXCJyZW5kZXJcIiB9LFxuICAgICAgICBcInBhbmVsQWRkVGV4dFwiLFxuICAgICAgICBcInBhbmVsUmVtb3ZlVGV4dFwiXG4gICAgICBdLFxuICAgICAgdGFiczogW3sgbmFtZTogXCJ0ZW1wbGF0ZVRpdGxlXCIsIGluZGV4OiAxMCB9XVxuICAgIH0sXG4gICAgcGFuZWw6IHtcbiAgICAgIHByb3BlcnRpZXM6IFtcIm5hbWVcIiwgXCJ0aXRsZVwiLCB7IG5hbWU6IFwidmlzaWJsZVwiLCBjYXRlZ29yeTogXCJjaGVja3NcIiB9XSxcbiAgICAgIHRhYnM6IFt7IG5hbWU6IFwidmlzaWJsZUlmXCIsIGluZGV4OiAxMDAgfV1cbiAgICB9LFxuICAgIHBhZ2U6IHtcbiAgICAgIHByb3BlcnRpZXM6IFtcbiAgICAgICAgXCJuYW1lXCIsXG4gICAgICAgIFwidGl0bGVcIixcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiLFxuICAgICAgICB7IG5hbWU6IFwidmlzaWJsZVwiLCBjYXRlZ29yeTogXCJjaGVja3NcIiB9LFxuICAgICAgICBcInF1ZXN0aW9uc09yZGVyXCJcbiAgICAgIF0sXG4gICAgICB0YWJzOiBbeyBuYW1lOiBcInZpc2libGVJZlwiLCBpbmRleDogMTAwIH1dXG4gICAgfSxcbiAgICBzdXJ2ZXk6IHtcbiAgICAgIHByb3BlcnRpZXM6IFtcbiAgICAgICAgXCJ0aXRsZVwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCIsXG4gICAgICAgIFwic2hvd1RpdGxlXCIsXG4gICAgICAgIFwibG9jYWxlXCIsXG4gICAgICAgIFwibW9kZVwiLFxuICAgICAgICBcImNsZWFySW52aXNpYmxlVmFsdWVzXCIsXG4gICAgICAgIFwiY29va2llTmFtZVwiLFxuICAgICAgICB7IG5hbWU6IFwic2VuZFJlc3VsdE9uUGFnZU5leHRcIiwgY2F0ZWdvcnk6IFwiZGF0YVwiIH0sXG4gICAgICAgIHsgbmFtZTogXCJzdG9yZU90aGVyc0FzQ29tbWVudFwiLCBjYXRlZ29yeTogXCJkYXRhXCIgfSxcbiAgICAgICAgeyBuYW1lOiBcInNob3dQYWdlVGl0bGVzXCIsIGNhdGVnb3J5OiBcInBhZ2VcIiB9LFxuICAgICAgICB7IG5hbWU6IFwic2hvd1BhZ2VOdW1iZXJzXCIsIGNhdGVnb3J5OiBcInBhZ2VcIiB9LFxuXG4gICAgICAgIHsgbmFtZTogXCJwYWdlUHJldlRleHRcIiwgdGFiOiBcIm5hdmlnYXRpb25cIiB9LFxuICAgICAgICB7IG5hbWU6IFwicGFnZU5leHRUZXh0XCIsIHRhYjogXCJuYXZpZ2F0aW9uXCIgfSxcbiAgICAgICAgeyBuYW1lOiBcImNvbXBsZXRlVGV4dFwiLCB0YWI6IFwibmF2aWdhdGlvblwiIH0sXG4gICAgICAgIHsgbmFtZTogXCJzdGFydFN1cnZleVRleHRcIiwgdGFiOiBcIm5hdmlnYXRpb25cIiB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogXCJzaG93TmF2aWdhdGlvbkJ1dHRvbnNcIixcbiAgICAgICAgICB0YWI6IFwibmF2aWdhdGlvblwiLFxuICAgICAgICAgIGNhdGVnb3J5OiBcIm5hdmJ1dHRvbnNcIlxuICAgICAgICB9LFxuICAgICAgICB7IG5hbWU6IFwic2hvd1ByZXZCdXR0b25cIiwgdGFiOiBcIm5hdmlnYXRpb25cIiwgY2F0ZWdvcnk6IFwibmF2YnV0dG9uc1wiIH0sXG4gICAgICAgIHsgbmFtZTogXCJmaXJzdFBhZ2VJc1N0YXJ0ZWRcIiwgdGFiOiBcIm5hdmlnYXRpb25cIiwgY2F0ZWdvcnk6IFwibmF2cGFnZXNcIiB9LFxuICAgICAgICB7IG5hbWU6IFwic2hvd0NvbXBsZXRlZFBhZ2VcIiwgdGFiOiBcIm5hdmlnYXRpb25cIiwgY2F0ZWdvcnk6IFwibmF2cGFnZXNcIiB9LFxuICAgICAgICB7IG5hbWU6IFwiZ29OZXh0UGFnZUF1dG9tYXRpY1wiLCB0YWI6IFwibmF2aWdhdGlvblwiLCBjYXRlZ29yeTogXCJuYXZvcHRcIiB9LFxuICAgICAgICB7IG5hbWU6IFwic2hvd1Byb2dyZXNzQmFyXCIsIHRhYjogXCJuYXZpZ2F0aW9uXCIsIGNhdGVnb3J5OiBcIm5hdm9wdFwiIH0sXG4gICAgICAgIHsgbmFtZTogXCJpc1NpbmdsZVBhZ2VcIiwgdGFiOiBcIm5hdmlnYXRpb25cIiB9LFxuXG4gICAgICAgIHsgbmFtZTogXCJxdWVzdGlvblRpdGxlTG9jYXRpb25cIiwgdGFiOiBcInF1ZXN0aW9uXCIgfSxcbiAgICAgICAgeyBuYW1lOiBcInJlcXVpcmVkVGV4dFwiLCB0YWI6IFwicXVlc3Rpb25cIiB9LFxuICAgICAgICB7IG5hbWU6IFwicXVlc3Rpb25TdGFydEluZGV4XCIsIHRhYjogXCJxdWVzdGlvblwiIH0sXG4gICAgICAgIHsgbmFtZTogXCJzaG93UXVlc3Rpb25OdW1iZXJzXCIsIHRhYjogXCJxdWVzdGlvblwiIH0sXG4gICAgICAgIHsgbmFtZTogXCJxdWVzdGlvblRpdGxlVGVtcGxhdGVcIiwgdGFiOiBcInF1ZXN0aW9uXCIgfSxcbiAgICAgICAgeyBuYW1lOiBcInF1ZXN0aW9uRXJyb3JMb2NhdGlvblwiLCB0YWI6IFwicXVlc3Rpb25cIiB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogXCJmb2N1c0ZpcnN0UXVlc3Rpb25BdXRvbWF0aWNcIixcbiAgICAgICAgICB0YWI6IFwicXVlc3Rpb25cIlxuICAgICAgICB9LFxuICAgICAgICB7IG5hbWU6IFwicXVlc3Rpb25zT3JkZXJcIiwgdGFiOiBcInF1ZXN0aW9uXCIgfSxcblxuICAgICAgICB7IG5hbWU6IFwibWF4VGltZVRvRmluaXNoXCIsIHRhYjogXCJ0aW1lclwiIH0sXG4gICAgICAgIHsgbmFtZTogXCJtYXhUaW1lVG9GaW5pc2hQYWdlXCIsIHRhYjogXCJ0aW1lclwiIH0sXG4gICAgICAgIHsgbmFtZTogXCJzaG93VGltZXJQYW5lbFwiLCB0YWI6IFwidGltZXJcIiwgY2F0ZWdvcnk6IFwiY2hlY2tcIiB9LFxuICAgICAgICB7IG5hbWU6IFwic2hvd1RpbWVyUGFuZWxNb2RlXCIsIHRhYjogXCJ0aW1lclwiLCBjYXRlZ29yeTogXCJjaGVja1wiIH1cbiAgICAgIF0sXG4gICAgICB0YWJzOiBbXG4gICAgICAgIHsgbmFtZTogXCJuYXZpZ2F0aW9uXCIsIGluZGV4OiAxMCB9LFxuICAgICAgICB7IG5hbWU6IFwicXVlc3Rpb25cIiwgaW5kZXg6IDIwIH0sXG4gICAgICAgIHsgbmFtZTogXCJjb21wbGV0ZWRIdG1sXCIsIGluZGV4OiA3MCB9LFxuICAgICAgICB7IG5hbWU6IFwiY29tcGxldGVkSHRtbE9uQ29uZGl0aW9uXCIsIGluZGV4OiA3NSB9LFxuICAgICAgICB7IG5hbWU6IFwibG9hZGluZ0h0bWxcIiwgaW5kZXg6IDgwIH0sXG4gICAgICAgIHsgbmFtZTogXCJ0aW1lclwiLCBpbmRleDogOTAgfSxcbiAgICAgICAgeyBuYW1lOiBcImNhbGN1bGF0ZWRWYWx1ZXNcIiwgaW5kZXg6IDk1IH0sXG4gICAgICAgIHsgbmFtZTogXCJ0cmlnZ2Vyc1wiLCBpbmRleDogMTAwIH1cbiAgICAgIF1cbiAgICB9XG4gIH07XG4gIHB1YmxpYyBzdGF0aWMgZ2V0UHJvcGVydGllcyhjbGFzc05hbWU6IHN0cmluZyk6IEFycmF5PGFueT4ge1xuICAgIHZhciBwcm9wZXJ0aWVzID0gW107XG4gICAgdmFyIGFsbERlZmluaXRpb25zID0gU3VydmV5UXVlc3Rpb25FZGl0b3JEZWZpbml0aW9uLmdldEFsbERlZmluaXRpb25zQnlDbGFzcyhcbiAgICAgIGNsYXNzTmFtZVxuICAgICk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhbGxEZWZpbml0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGRlZiA9IGFsbERlZmluaXRpb25zW2ldO1xuICAgICAgaWYgKGRlZi5wcm9wZXJ0aWVzKSB7XG4gICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgZGVmLnByb3BlcnRpZXMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAhZGVmLnByb3BlcnRpZXNbal1bXCJ0YWJcIl0gfHxcbiAgICAgICAgICAgIGRlZi5wcm9wZXJ0aWVzW2pdW1widGFiXCJdID09PSBcImdlbmVyYWxcIlxuICAgICAgICAgICkge1xuICAgICAgICAgICAgcHJvcGVydGllcy5wdXNoKGRlZi5wcm9wZXJ0aWVzW2pdKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHByb3BlcnRpZXM7XG4gIH1cbiAgcHVibGljIHN0YXRpYyBoYXNUYWJzVG9TaG93KGNsYXNzTmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgIFN1cnZleVF1ZXN0aW9uRWRpdG9yRGVmaW5pdGlvbi5pc0dlbmVyYWxUYWJWaXNpYmxlKGNsYXNzTmFtZSkgfHxcbiAgICAgIFN1cnZleVF1ZXN0aW9uRWRpdG9yRGVmaW5pdGlvbi5nZXRUYWJzKGNsYXNzTmFtZSkubGVuZ3RoID4gMFxuICAgICk7XG4gIH1cbiAgcHVibGljIHN0YXRpYyBpc0dlbmVyYWxUYWJWaXNpYmxlKGNsYXNzTmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgdmFyIGFsbERlZmluaXRpb25zID0gU3VydmV5UXVlc3Rpb25FZGl0b3JEZWZpbml0aW9uLmdldEFsbERlZmluaXRpb25zQnlDbGFzcyhcbiAgICAgIGNsYXNzTmFtZVxuICAgICk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhbGxEZWZpbml0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGRlZiA9IGFsbERlZmluaXRpb25zW2ldO1xuICAgICAgaWYgKGRlZi50YWJzKSB7XG4gICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgZGVmLnRhYnMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICB2YXIgdGFiID0gZGVmLnRhYnNbal07XG4gICAgICAgICAgaWYgKHRhYi5uYW1lID09IFwiZ2VuZXJhbFwiKSByZXR1cm4gdGFiLnZpc2libGUgIT09IGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHB1YmxpYyBzdGF0aWMgZ2V0VGFicyhjbGFzc05hbWU6IHN0cmluZyk6IEFycmF5PGFueT4ge1xuICAgIHZhciB0YWJzID0gW107XG4gICAgdmFyIGFsbERlZmluaXRpb25zID0gU3VydmV5UXVlc3Rpb25FZGl0b3JEZWZpbml0aW9uLmdldEFsbERlZmluaXRpb25zQnlDbGFzcyhcbiAgICAgIGNsYXNzTmFtZVxuICAgICk7XG4gICAgdmFyIHRhYnNOYW1lc0hhc2ggPSB7fTtcbiAgICBmb3IgKHZhciBpID0gYWxsRGVmaW5pdGlvbnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIHZhciBkZWYgPSBhbGxEZWZpbml0aW9uc1tpXTtcbiAgICAgIGlmIChkZWYudGFicykge1xuICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGRlZi50YWJzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgdmFyIHRhYiA9IGRlZi50YWJzW2pdO1xuICAgICAgICAgIGlmICh0YWJzTmFtZXNIYXNoW3RhYi5uYW1lXSkgY29udGludWU7XG4gICAgICAgICAgdGFic05hbWVzSGFzaFt0YWIubmFtZV0gPSB0cnVlO1xuICAgICAgICAgIGlmICh0YWIudmlzaWJsZSAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHRhYnMucHVzaCh0YWIpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICB0YWJzLnNvcnQoZnVuY3Rpb24oYSwgYikge1xuICAgICAgcmV0dXJuIGEuaW5kZXggPCBiLmluZGV4ID8gLTEgOiBhLmluZGV4ID4gYi5pbmRleCA/IDEgOiAwO1xuICAgIH0pO1xuICAgIHJldHVybiB0YWJzO1xuICB9XG4gIHN0YXRpYyBnZXRBbGxEZWZpbml0aW9uc0J5Q2xhc3MoXG4gICAgY2xhc3NOYW1lOiBzdHJpbmdcbiAgKTogQXJyYXk8SVN1cnZleVF1ZXN0aW9uRWRpdG9yRGVmaW5pdGlvbj4ge1xuICAgIHZhciByZXN1bHQgPSBbXTtcbiAgICBpZiAoXG4gICAgICBjbGFzc05hbWUuaW5kZXhPZihcIkBcIikgPiAtMSAmJlxuICAgICAgU3VydmV5UXVlc3Rpb25FZGl0b3JEZWZpbml0aW9uLmRlZmluaXRpb25bY2xhc3NOYW1lXVxuICAgICkge1xuICAgICAgcmVzdWx0LnB1c2goU3VydmV5UXVlc3Rpb25FZGl0b3JEZWZpbml0aW9uLmRlZmluaXRpb25bY2xhc3NOYW1lXSk7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICB2YXIgY3VyQ2xhc3NOYW1lID0gY2xhc3NOYW1lO1xuICAgIHdoaWxlIChjdXJDbGFzc05hbWUpIHtcbiAgICAgIHZhciBtZXRhQ2xhc3MgPSA8U3VydmV5Lkpzb25NZXRhZGF0YUNsYXNzPihcbiAgICAgICAgU3VydmV5LlNlcmlhbGl6ZXIuZmluZENsYXNzKGN1ckNsYXNzTmFtZSlcbiAgICAgICk7XG4gICAgICBpZiAoIW1ldGFDbGFzcykgYnJlYWs7XG4gICAgICBpZiAoU3VydmV5UXVlc3Rpb25FZGl0b3JEZWZpbml0aW9uLmRlZmluaXRpb25bbWV0YUNsYXNzLm5hbWVdKSB7XG4gICAgICAgIHJlc3VsdC51bnNoaWZ0KFxuICAgICAgICAgIFN1cnZleVF1ZXN0aW9uRWRpdG9yRGVmaW5pdGlvbi5kZWZpbml0aW9uW21ldGFDbGFzcy5uYW1lXVxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgY3VyQ2xhc3NOYW1lID0gbWV0YUNsYXNzLnBhcmVudE5hbWU7XG4gICAgfVxuICAgIGlmIChyZXN1bHQubGVuZ3RoID09IDApIHtcbiAgICAgIHZhciBwcm9wZXJ0aWVzID0gU3VydmV5LlNlcmlhbGl6ZXIuZ2V0UHJvcGVydGllcyhjbGFzc05hbWUpO1xuICAgICAgdmFyIGNsYXNzUmVzID0geyBwcm9wZXJ0aWVzOiBbXSB9O1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChwcm9wZXJ0aWVzW2ldLmlzVmlzaWJsZShudWxsKSkge1xuICAgICAgICAgIGNsYXNzUmVzLnByb3BlcnRpZXMucHVzaChwcm9wZXJ0aWVzW2ldLm5hbWUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXN1bHQucHVzaChjbGFzc1Jlcyk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbn1cblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9xdWVzdGlvbkVkaXRvcnMvcXVlc3Rpb25FZGl0b3JEZWZpbml0aW9uLnRzIiwiaW1wb3J0ICogYXMga28gZnJvbSBcImtub2Nrb3V0XCI7XG5pbXBvcnQgeyByZWdpc3RlckFkb3JuZXIgfSBmcm9tIFwiLi4vc3VydmV5anNPYmplY3RzXCI7XG5pbXBvcnQgeyBlZGl0b3JMb2NhbGl6YXRpb24gfSBmcm9tIFwiLi4vZWRpdG9yTG9jYWxpemF0aW9uXCI7XG5cbmltcG9ydCBcIi4vdGl0bGUtZWRpdG9yLnNjc3NcIjtcbmltcG9ydCAqIGFzIFN1cnZleSBmcm9tIFwic3VydmV5LWtub2Nrb3V0XCI7XG52YXIgdGVtcGxhdGVIdG1sID0gcmVxdWlyZShcImh0bWwtbG9hZGVyP2ludGVycG9sYXRlIXZhbC1sb2FkZXIhLi90aXRsZS1lZGl0b3IuaHRtbFwiKTtcblxuY29uc3QgRlJJRU5ETFlfUEFERElORyA9IDM2O1xuZnVuY3Rpb24gcmVzaXplSW5wdXQodGFyZ2V0KSB7XG4gIGxldCBjb21wdXRlZFN0eWxlID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUodGFyZ2V0KTtcbiAgdGFyZ2V0LnN0eWxlLndpZHRoID1cbiAgICBnZXRUZXh0V2lkdGgodGFyZ2V0LnZhbHVlLCBjb21wdXRlZFN0eWxlLmZvbnQpICsgRlJJRU5ETFlfUEFERElORyArIFwicHhcIjtcbn1cblxuLyoqXG4gKiBVc2VzIGNhbnZhcy5tZWFzdXJlVGV4dCB0byBjb21wdXRlIGFuZCByZXR1cm4gdGhlIHdpZHRoIG9mIHRoZSBnaXZlbiB0ZXh0IG9mIGdpdmVuIGZvbnQgaW4gcGl4ZWxzLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSB0ZXh0IFRoZSB0ZXh0IHRvIGJlIHJlbmRlcmVkLlxuICogQHBhcmFtIHtTdHJpbmd9IGZvbnQgVGhlIGNzcyBmb250IGRlc2NyaXB0b3IgdGhhdCB0ZXh0IGlzIHRvIGJlIHJlbmRlcmVkIHdpdGggKGUuZy4gXCJib2xkIDE0cHggdmVyZGFuYVwiKS5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzExODI0MS9jYWxjdWxhdGUtdGV4dC13aWR0aC13aXRoLWphdmFzY3JpcHQvMjEwMTUzOTMjMjEwMTUzOTNcbiAqL1xubGV0IGNhY2hlZENhbnZhcztcbmZ1bmN0aW9uIGdldFRleHRXaWR0aCh0ZXh0LCBmb250KSB7XG4gIC8vIHJlLXVzZSBjYW52YXMgb2JqZWN0IGZvciBiZXR0ZXIgcGVyZm9ybWFuY2VcbiAgdmFyIGNhbnZhcyA9XG4gICAgY2FjaGVkQ2FudmFzIHx8IChjYWNoZWRDYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiY2FudmFzXCIpKTtcbiAgdmFyIGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dChcIjJkXCIpO1xuICBjb250ZXh0LmZvbnQgPSBmb250O1xuICB2YXIgbWV0cmljcyA9IGNvbnRleHQubWVhc3VyZVRleHQodGV4dCk7XG4gIHJldHVybiBtZXRyaWNzLndpZHRoO1xufVxuXG5leHBvcnQgY2xhc3MgVGl0bGVJbnBsYWNlRWRpdG9yIHtcbiAgZWRpdGluZ05hbWUgPSBrby5vYnNlcnZhYmxlPHN0cmluZz4oKTtcbiAgcHJldk5hbWUgPSBrby5vYnNlcnZhYmxlPHN0cmluZz4oKTtcbiAgaXNFZGl0aW5nID0ga28ub2JzZXJ2YWJsZTxib29sZWFuPihmYWxzZSk7XG5cbiAgcHJvdGVjdGVkIGZvck5laWJvdXJzKGZ1bmM6IChlbDogSFRNTEVsZW1lbnQpID0+IHZvaWQpIHtcbiAgICBpZiAoXG4gICAgICAhdGhpcy5yb290RWxlbWVudC5wYXJlbnRFbGVtZW50IHx8XG4gICAgICAhdGhpcy5yb290RWxlbWVudC5wYXJlbnRFbGVtZW50LnBhcmVudEVsZW1lbnRcbiAgICApXG4gICAgICByZXR1cm47XG4gICAgdmFyIGhvbGRlciA9IHRoaXMucm9vdEVsZW1lbnQucGFyZW50RWxlbWVudC5wYXJlbnRFbGVtZW50O1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaG9sZGVyLmNoaWxkcmVuLmxlbmd0aCAtIDE7IGkrKykge1xuICAgICAgdmFyIGVsZW1lbnQgPSBob2xkZXIuY2hpbGRyZW5baV07XG4gICAgICBpZiAoZWxlbWVudC5jbGFzc05hbWUuaW5kZXhPZihcInN2ZGEtY3VzdG9tLWNvbnRlbnRcIikgPT09IC0xKSB7XG4gICAgICAgIGZ1bmMoZWxlbWVudCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY29uc3RydWN0b3IobmFtZTogc3RyaW5nLCBwcm90ZWN0ZWQgcm9vdEVsZW1lbnQpIHtcbiAgICB0aGlzLmVkaXRpbmdOYW1lKG5hbWUpO1xuICAgIHRoaXMucHJldk5hbWUobmFtZSk7XG4gICAgdGhpcy5mb3JOZWlib3VycyhcbiAgICAgIGVsZW1lbnQgPT5cbiAgICAgICAgKGVsZW1lbnQub25jbGljayA9IGUgPT4ge1xuICAgICAgICAgIHRoaXMuc3RhcnRFZGl0KHRoaXMsIGUpO1xuICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgdmFsdWVDaGFuZ2VkOiAobmV3VmFsOiBhbnkpID0+IHZvaWQ7XG5cbiAgcHVibGljIGdldExvY1N0cmluZyhzdHI6IHN0cmluZykge1xuICAgIHJldHVybiBlZGl0b3JMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKHN0cik7XG4gIH1cblxuICBoaWRlRWRpdG9yID0gKCkgPT4ge1xuICAgIHRoaXMuaXNFZGl0aW5nKGZhbHNlKTtcbiAgICB0aGlzLmZvck5laWJvdXJzKGVsZW1lbnQgPT4ge1xuICAgICAgZWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gZWxlbWVudC5kYXRhc2V0W1wic2pzT2xkRGlzcGxheVwiXTtcbiAgICB9KTtcbiAgfTtcbiAgc3RhcnRFZGl0ID0gKG1vZGVsLCBldmVudCkgPT4ge1xuICAgIHRoaXMuZWRpdGluZ05hbWUodGhpcy5wcmV2TmFtZSgpKTtcbiAgICB0aGlzLmlzRWRpdGluZyh0cnVlKTtcbiAgICB0aGlzLmZvck5laWJvdXJzKGVsZW1lbnQgPT4ge1xuICAgICAgZWxlbWVudC5kYXRhc2V0W1wic2pzT2xkRGlzcGxheVwiXSA9IGVsZW1lbnQuc3R5bGUuZGlzcGxheTtcbiAgICAgIGVsZW1lbnQuc3R5bGUuZGlzcGxheSA9IFwibm9uZVwiO1xuICAgIH0pO1xuICAgIHZhciBpbnB1dEVsZW0gPSB0aGlzLnJvb3RFbGVtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKFwiaW5wdXRcIilbMF07XG4gICAgaW5wdXRFbGVtLmZvY3VzKCk7XG4gICAgcmVzaXplSW5wdXQoaW5wdXRFbGVtKTtcbiAgfTtcbiAgcG9zdEVkaXQgPSAoKSA9PiB7XG4gICAgaWYgKHRoaXMucHJldk5hbWUoKSAhPT0gdGhpcy5lZGl0aW5nTmFtZSgpKSB7XG4gICAgICB0aGlzLnByZXZOYW1lKHRoaXMuZWRpdGluZ05hbWUoKSk7XG4gICAgICAhIXRoaXMudmFsdWVDaGFuZ2VkICYmIHRoaXMudmFsdWVDaGFuZ2VkKHRoaXMuZWRpdGluZ05hbWUoKSk7XG4gICAgfVxuICAgIHRoaXMuaGlkZUVkaXRvcigpO1xuICB9O1xuICBjYW5jZWxFZGl0ID0gKCkgPT4ge1xuICAgIHRoaXMuZWRpdGluZ05hbWUodGhpcy5wcmV2TmFtZSgpKTtcbiAgICB0aGlzLmhpZGVFZGl0b3IoKTtcbiAgfTtcbiAgbmFtZUVkaXRvcktleXByZXNzID0gKG1vZGVsLCBldmVudCkgPT4ge1xuICAgIHJlc2l6ZUlucHV0KGV2ZW50LnRhcmdldCk7XG4gICAgaWYgKGV2ZW50LmtleUNvZGUgPT09IDEzKSB7XG4gICAgICB0aGlzLnBvc3RFZGl0KCk7XG4gICAgfSBlbHNlIGlmIChldmVudC5rZXlDb2RlID09PSAyNykge1xuICAgICAgdGhpcy5jYW5jZWxFZGl0KCk7XG4gICAgfVxuICB9O1xufVxuXG5rby5jb21wb25lbnRzLnJlZ2lzdGVyKFwidGl0bGUtZWRpdG9yXCIsIHtcbiAgdmlld01vZGVsOiB7XG4gICAgY3JlYXRlVmlld01vZGVsOiAocGFyYW1zLCBjb21wb25lbnRJbmZvKSA9PiB7XG4gICAgICB2YXIgbW9kZWwgPSBuZXcgVGl0bGVJbnBsYWNlRWRpdG9yKFxuICAgICAgICBwYXJhbXMubW9kZWxbcGFyYW1zLm5hbWVdLFxuICAgICAgICBjb21wb25lbnRJbmZvLmVsZW1lbnRcbiAgICAgICk7XG4gICAgICBrby5jb21wdXRlZCgoKSA9PiB7XG4gICAgICAgIG1vZGVsLnByZXZOYW1lKGtvLnVud3JhcChwYXJhbXMubW9kZWxbcGFyYW1zLm5hbWVdKSk7XG4gICAgICB9KTtcbiAgICAgIHZhciBwcm9wZXJ0eSA9IFN1cnZleS5TZXJpYWxpemVyLmZpbmRQcm9wZXJ0eShcbiAgICAgICAgcGFyYW1zLm1vZGVsLmdldFR5cGUoKSxcbiAgICAgICAgcGFyYW1zLm5hbWVcbiAgICAgICk7XG4gICAgICBtb2RlbC52YWx1ZUNoYW5nZWQgPSBuZXdWYWx1ZSA9PiB7XG4gICAgICAgIHZhciBvcHRpb25zID0ge1xuICAgICAgICAgIHByb3BlcnR5TmFtZTogcHJvcGVydHkubmFtZSxcbiAgICAgICAgICBvYmo6IHBhcmFtcy5tb2RlbCxcbiAgICAgICAgICB2YWx1ZTogbmV3VmFsdWUsXG4gICAgICAgICAgbmV3VmFsdWU6IG51bGwsXG4gICAgICAgICAgZG9WYWxpZGF0aW9uOiBmYWxzZVxuICAgICAgICB9O1xuICAgICAgICBwYXJhbXMuZWRpdG9yLm9uVmFsdWVDaGFuZ2luZ0NhbGxiYWNrKG9wdGlvbnMpO1xuICAgICAgICBuZXdWYWx1ZSA9IG9wdGlvbnMubmV3VmFsdWUgPT09IG51bGwgPyBvcHRpb25zLnZhbHVlIDogb3B0aW9ucy5uZXdWYWx1ZTtcbiAgICAgICAgcGFyYW1zLm1vZGVsW3BhcmFtcy5uYW1lXSA9IG5ld1ZhbHVlO1xuICAgICAgICBwYXJhbXMuZWRpdG9yLm9uUHJvcGVydHlWYWx1ZUNoYW5nZWQocHJvcGVydHksIHBhcmFtcy5tb2RlbCwgbmV3VmFsdWUpO1xuICAgICAgfTtcbiAgICAgIHJldHVybiBtb2RlbDtcbiAgICB9XG4gIH0sXG4gIHRlbXBsYXRlOiB0ZW1wbGF0ZUh0bWxcbn0pO1xuXG5leHBvcnQgdmFyIHRpdGxlQWRvcm5lciA9IHtcbiAgZ2V0TWFya2VyQ2xhc3M6IG1vZGVsID0+IHtcbiAgICByZXR1cm4gXCJ0aXRsZV9lZGl0YWJsZVwiO1xuICB9LFxuICBnZXRFbGVtZW50TmFtZTogbW9kZWwgPT4gXCJ0aXRsZVwiLFxuICBhZnRlclJlbmRlcjogKGVsZW1lbnRzOiBIVE1MRWxlbWVudFtdLCBtb2RlbCwgZWRpdG9yKSA9PiB7XG4gICAgdmFyIGRlY29yYXRpb24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic3BhblwiKTtcbiAgICBkZWNvcmF0aW9uLmlubmVySFRNTCA9XG4gICAgICBcIjx0aXRsZS1lZGl0b3IgcGFyYW1zPSduYW1lOiBcXFwidGl0bGVcXFwiLCBtb2RlbDogbW9kZWwsIGVkaXRvcjogZWRpdG9yJz48L3RpdGxlLWVkaXRvcj5cIjtcbiAgICBlbGVtZW50c1swXS5hcHBlbmRDaGlsZChkZWNvcmF0aW9uKTtcbiAgICBrby5hcHBseUJpbmRpbmdzKHsgbW9kZWw6IG1vZGVsLCBlZGl0b3I6IGVkaXRvciB9LCBkZWNvcmF0aW9uKTtcbiAgICBrby50YXNrcy5ydW5FYXJseSgpO1xuICAgIGVkaXRvci5vbkFkb3JuZXJSZW5kZXJlZENhbGxiYWNrKG1vZGVsLCBcInRpdGxlXCIsIGRlY29yYXRpb24pO1xuICB9XG59O1xuXG5yZWdpc3RlckFkb3JuZXIoXCJ0aXRsZVwiLCB0aXRsZUFkb3JuZXIpO1xuXG5leHBvcnQgdmFyIGl0ZW1UaXRsZUFkb3JuZXIgPSB7XG4gIGdldE1hcmtlckNsYXNzOiBtb2RlbCA9PiB7XG4gICAgcmV0dXJuICEhbW9kZWwuaXRlbXMgPyBcIml0ZW1fdGl0bGVfZWRpdGFibGUgdGl0bGVfZWRpdGFibGVcIiA6IFwiXCI7XG4gIH0sXG4gIGdldEVsZW1lbnROYW1lOiBtb2RlbCA9PiBcIml0ZW1UaXRsZVwiLFxuICBhZnRlclJlbmRlcjogKFxuICAgIGVsZW1lbnRzOiBIVE1MRWxlbWVudFtdLFxuICAgIG1vZGVsOiBTdXJ2ZXkuUXVlc3Rpb25NdWx0aXBsZVRleHQsXG4gICAgZWRpdG9yXG4gICkgPT4ge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZWxlbWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBkZWNvcmF0aW9uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNwYW5cIik7XG4gICAgICBkZWNvcmF0aW9uLmlubmVySFRNTCA9XG4gICAgICAgIFwiPHRpdGxlLWVkaXRvciBwYXJhbXM9J25hbWU6IFxcXCJ0aXRsZVxcXCIsIG1vZGVsOiBtb2RlbCwgZWRpdG9yOiBlZGl0b3InPjwvdGl0bGUtZWRpdG9yPlwiO1xuICAgICAgZWxlbWVudHNbaV0uYXBwZW5kQ2hpbGQoZGVjb3JhdGlvbik7XG4gICAgICBrby5hcHBseUJpbmRpbmdzKHsgbW9kZWw6IG1vZGVsLml0ZW1zW2ldLCBlZGl0b3I6IGVkaXRvciB9LCBkZWNvcmF0aW9uKTtcbiAgICAgIGtvLnRhc2tzLnJ1bkVhcmx5KCk7XG4gICAgICBlZGl0b3Iub25BZG9ybmVyUmVuZGVyZWRDYWxsYmFjayhcbiAgICAgICAgbW9kZWwsXG4gICAgICAgIFwiaXRlbS10aXRsZVwiLFxuICAgICAgICBkZWNvcmF0aW9uLFxuICAgICAgICBtb2RlbC5pdGVtc1tpXVxuICAgICAgKTtcbiAgICB9XG4gIH1cbn07XG5cbnJlZ2lzdGVyQWRvcm5lcihcIml0ZW0tdGl0bGVcIiwgaXRlbVRpdGxlQWRvcm5lcik7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvYWRvcm5lcnMvdGl0bGUtZWRpdG9yLnRzIiwiLy8gc3R5bGVzXG5pbXBvcnQgXCIuLi91dGlscy9jdXN0b20tY2hlY2tib3guc2Nzc1wiO1xuaW1wb3J0IFwiLi4vdXRpbHMvY3VzdG9tLXNlbGVjdC5zY3NzXCI7XG5pbXBvcnQgXCIuLi91dGlscy9kZG1lbnUuc2Nzc1wiO1xuaW1wb3J0IFwiLi4vbWFpbi5zY3NzXCI7XG5cbmV4cG9ydCBsZXQgVmVyc2lvbjogc3RyaW5nO1xuVmVyc2lvbiA9IGAke3Byb2Nlc3MuZW52LlZFUlNJT059YDtcblxuZXhwb3J0IHsgZW5TdHJpbmdzIH0gZnJvbSBcIi4uL2xvY2FsaXphdGlvbi9lbmdsaXNoXCI7XG5leHBvcnQgeyBlZGl0b3JMb2NhbGl6YXRpb24sIGRlZmF1bHRTdHJpbmdzIH0gZnJvbSBcIi4uL2VkaXRvckxvY2FsaXphdGlvblwiO1xuZXhwb3J0IHsgZWRpdG9yTG9jYWxpemF0aW9uIGFzIGxvY2FsaXphdGlvbiB9IGZyb20gXCIuLi9lZGl0b3JMb2NhbGl6YXRpb25cIjtcblxuZXhwb3J0IHsgRHJhZ0Ryb3BIZWxwZXIgfSBmcm9tIFwiLi4vZHJhZ2Ryb3BoZWxwZXJcIjtcbmV4cG9ydCB7IEVkaXRhYmxlT2JqZWN0IH0gZnJvbSBcIi4uL3Byb3BlcnR5RWRpdG9ycy9lZGl0YWJsZU9iamVjdFwiO1xuZXhwb3J0IHtcbiAgU3VydmV5RWxlbWVudFNlbGVjdG9yXG59IGZyb20gXCIuLi9wcm9wZXJ0eUVkaXRvcnMvc3VydmV5RWxlbWVudFNlbGVjdG9yXCI7XG5leHBvcnQge1xuICBTdXJ2ZXlQcm9wZXJ0eUVkaXRvckJhc2Vcbn0gZnJvbSBcIi4uL3Byb3BlcnR5RWRpdG9ycy9wcm9wZXJ0eUVkaXRvckJhc2VcIjtcbmV4cG9ydCB7XG4gIFN1cnZleVByb3BlcnR5Q3VzdG9tRWRpdG9yXG59IGZyb20gXCIuLi9wcm9wZXJ0eUVkaXRvcnMvcHJvcGVydHlDdXN0b21FZGl0b3JcIjtcbmV4cG9ydCB7XG4gIFN1cnZleVByb3BlcnR5RWRpdG9yRmFjdG9yeVxufSBmcm9tIFwiLi4vcHJvcGVydHlFZGl0b3JzL3Byb3BlcnR5RWRpdG9yRmFjdG9yeVwiO1xuZXhwb3J0IHtcbiAgU3VydmV5U3RyaW5nUHJvcGVydHlFZGl0b3IsXG4gIFN1cnZleURyb3Bkb3duUHJvcGVydHlFZGl0b3IsXG4gIFN1cnZleUJvb2xlYW5Qcm9wZXJ0eUVkaXRvcixcbiAgU3VydmV5TnVtYmVyUHJvcGVydHlFZGl0b3Jcbn0gZnJvbSBcIi4uL3Byb3BlcnR5RWRpdG9ycy9wcm9wZXJ0eUVkaXRvckZhY3RvcnlcIjtcbmV4cG9ydCB7XG4gIFN1cnZleVByb3BlcnR5VGV4dEl0ZW1zRWRpdG9yXG59IGZyb20gXCIuLi9wcm9wZXJ0eUVkaXRvcnMvcHJvcGVydHlUZXh0SXRlbXNFZGl0b3JcIjtcbmV4cG9ydCB7XG4gIFN1cnZleVByb3BlcnR5SXRlbXNFZGl0b3Jcbn0gZnJvbSBcIi4uL3Byb3BlcnR5RWRpdG9ycy9wcm9wZXJ0eUl0ZW1zRWRpdG9yXCI7XG5leHBvcnQge1xuICBTdXJ2ZXlQcm9wZXJ0eUl0ZW1WYWx1ZXNFZGl0b3Jcbn0gZnJvbSBcIi4uL3Byb3BlcnR5RWRpdG9ycy9wcm9wZXJ0eUl0ZW1WYWx1ZXNFZGl0b3JcIjtcbmV4cG9ydCB7XG4gIFN1cnZleVByb3BlcnR5TXVsdGlwbGVWYWx1ZXNFZGl0b3Jcbn0gZnJvbSBcIi4uL3Byb3BlcnR5RWRpdG9ycy9wcm9wZXJ0eU11bHRpcGxlVmFsdWVzRWRpdG9yXCI7XG5leHBvcnQge1xuICBTdXJ2ZXlOZXN0ZWRQcm9wZXJ0eUVkaXRvcixcbiAgU3VydmV5TmVzdGVkUHJvcGVydHlFZGl0b3JJdGVtXG59IGZyb20gXCIuLi9wcm9wZXJ0eUVkaXRvcnMvcHJvcGVydHlOZXN0ZWRQcm9wZXJ0eUVkaXRvclwiO1xuZXhwb3J0IHtcbiAgU3VydmV5UHJvcGVydHlEcm9wZG93bkNvbHVtbnNFZGl0b3IsXG4gIFN1cnZleVByb3BlcnR5TWF0cml4RHJvcGRvd25Db2x1bW5zSXRlbVxufSBmcm9tIFwiLi4vcHJvcGVydHlFZGl0b3JzL3Byb3BlcnR5TWF0cml4RHJvcGRvd25Db2x1bW5zRWRpdG9yXCI7XG5leHBvcnQge1xuICBTdXJ2ZXlQcm9wZXJ0eU1vZGFsRWRpdG9yXG59IGZyb20gXCIuLi9wcm9wZXJ0eUVkaXRvcnMvcHJvcGVydHlNb2RhbEVkaXRvclwiO1xuZXhwb3J0IHtcbiAgU3VydmV5UHJvcGVydHlUZXh0RWRpdG9yLFxuICBTdXJ2ZXlQcm9wZXJ0eUh0bWxFZGl0b3Jcbn0gZnJvbSBcIi4uL3Byb3BlcnR5RWRpdG9ycy9wcm9wZXJ0eU1vZGFsRWRpdG9yXCI7XG5leHBvcnQge1xuICBTdXJ2ZXlQcm9wZXJ0eUNvbmRpdGlvbkVkaXRvclxufSBmcm9tIFwiLi4vcHJvcGVydHlFZGl0b3JzL3Byb3BlcnR5Q29uZGl0aW9uRWRpdG9yXCI7XG5leHBvcnQge1xuICBTdXJ2ZXlQcm9wZXJ0eVJlc3VsdGZ1bGxFZGl0b3Jcbn0gZnJvbSBcIi4uL3Byb3BlcnR5RWRpdG9ycy9wcm9wZXJ0eVJlc3RmdWxsRWRpdG9yXCI7XG5leHBvcnQge1xuICBTdXJ2ZXlQcm9wZXJ0eURlZmF1bHRWYWx1ZUVkaXRvcixcbiAgU3VydmV5UHJvcGVydHlEZWZhdWx0Um93VmFsdWVFZGl0b3IsXG4gIFN1cnZleVByb3BlcnR5RGVmYXVsdFBhbmVsVmFsdWVFZGl0b3IsXG4gIFN1cnZleVByb3BlcnR5U2V0RWRpdG9yXG59IGZyb20gXCIuLi9wcm9wZXJ0eUVkaXRvcnMvcHJvcGVydHlEZWZhdWx0VmFsdWVFZGl0b3JcIjtcbmV4cG9ydCB7XG4gIFN1cnZleVByb3BlcnR5VHJpZ2dlcnNFZGl0b3Jcbn0gZnJvbSBcIi4uL3Byb3BlcnR5RWRpdG9ycy9wcm9wZXJ0eVRyaWdnZXJzRWRpdG9yXCI7XG5leHBvcnQge1xuICBTdXJ2ZXlQcm9wZXJ0eUh0bWxDb25kaXRpb25FZGl0b3Jcbn0gZnJvbSBcIi4uL3Byb3BlcnR5RWRpdG9ycy9wcm9wZXJ0eUh0bWxDb25kaXRpb25FZGl0b3JcIjtcbmV4cG9ydCB7XG4gIFN1cnZleVByb3BlcnR5Q2FsY3VsYXRlZFZhbHVlRWRpdG9yXG59IGZyb20gXCIuLi9wcm9wZXJ0eUVkaXRvcnMvcHJvcGVydHlDYWxjdWxhdGVkVmFsdWVzXCI7XG5leHBvcnQge1xuICBTdXJ2ZXlQcm9wZXJ0eVZhbGlkYXRvcnNFZGl0b3Jcbn0gZnJvbSBcIi4uL3Byb3BlcnR5RWRpdG9ycy9wcm9wZXJ0eVZhbGlkYXRvcnNFZGl0b3JcIjtcbmV4cG9ydCB7XG4gIFN1cnZleVByb3BlcnR5Q2VsbHNFZGl0b3Jcbn0gZnJvbSBcIi4uL3Byb3BlcnR5RWRpdG9ycy9wcm9wZXJ0eUNlbGxzRWRpdG9yXCI7XG5leHBvcnQgeyBTdXJ2ZXlPYmplY3RzIH0gZnJvbSBcIi4uL3N1cnZleU9iamVjdHNcIjtcblxuZXhwb3J0IHtcbiAgU3VydmV5UXVlc3Rpb25FZGl0b3JQcm9wZXJ0aWVzLFxuICBTdXJ2ZXlRdWVzdGlvbkVkaXRvclJvdyxcbiAgU3VydmV5UXVlc3Rpb25FZGl0b3JQcm9wZXJ0eVxufSBmcm9tIFwiLi4vcXVlc3Rpb25FZGl0b3JzL3F1ZXN0aW9uRWRpdG9yUHJvcGVydGllc1wiO1xuZXhwb3J0IHtcbiAgU3VydmV5UXVlc3Rpb25FZGl0b3JEZWZpbml0aW9uXG59IGZyb20gXCIuLi9xdWVzdGlvbkVkaXRvcnMvcXVlc3Rpb25FZGl0b3JEZWZpbml0aW9uXCI7XG5leHBvcnQge1xuICBTdXJ2ZXlQcm9wZXJ0eUVkaXRvclNob3dXaW5kb3csXG4gIFN1cnZleVF1ZXN0aW9uRWRpdG9yLFxuICBTdXJ2ZXlRdWVzdGlvbkVkaXRvclRhYlxufSBmcm9tIFwiLi4vcXVlc3Rpb25FZGl0b3JzL3F1ZXN0aW9uRWRpdG9yXCI7XG5cbmV4cG9ydCB7IFF1ZXN0aW9uVG9vbGJveCB9IGZyb20gXCIuLi9xdWVzdGlvblRvb2xib3hcIjtcbmV4cG9ydCB7IFN1cnZleU9iamVjdFByb3BlcnR5IH0gZnJvbSBcIi4uL29iamVjdFByb3BlcnR5XCI7XG5leHBvcnQgeyBTdXJ2ZXlPYmplY3RFZGl0b3IgfSBmcm9tIFwiLi4vb2JqZWN0RWRpdG9yXCI7XG5leHBvcnQgeyBQYWdlc0VkaXRvciB9IGZyb20gXCIuLi9wYWdlc0VkaXRvclwiO1xuZXhwb3J0IHsgU3VydmV5VGV4dFdvcmtlciB9IGZyb20gXCIuLi90ZXh0V29ya2VyXCI7XG5leHBvcnQgeyBPYmpUeXBlLCBTdXJ2ZXlIZWxwZXIgfSBmcm9tIFwiLi4vc3VydmV5SGVscGVyXCI7XG5leHBvcnQgeyBTdXJ2ZXlMaXZlVGVzdGVyIH0gZnJvbSBcIi4uL3N1cnZleWxpdmVcIjtcbmV4cG9ydCB7IFN1cnZleUVtYmVkaW5nV2luZG93IH0gZnJvbSBcIi4uL3N1cnZleUVtYmVkaW5nV2luZG93XCI7XG5leHBvcnQgeyBRdWVzdGlvbkNvbnZlcnRlciB9IGZyb20gXCIuLi9xdWVzdGlvbmNvbnZlcnRlclwiO1xuZXhwb3J0IHsgU3VydmV5VW5kb1JlZG8sIFVuZG9SZWRvSXRlbSB9IGZyb20gXCIuLi91bmRvcmVkb1wiO1xuZXhwb3J0IHsgU3VydmV5TG9naWMgfSBmcm9tIFwiLi4vbG9naWNcIjtcbmV4cG9ydCB7XG4gIFN1cnZleUZvckRlc2lnbmVyLFxuICByZWdpc3RlckFkb3JuZXIsXG4gIHJlbW92ZUFkb3JuZXJzXG59IGZyb20gXCIuLi9zdXJ2ZXlqc09iamVjdHNcIjtcbmV4cG9ydCB7IEV4dGVudGlvbnMgfSBmcm9tIFwiLi4vZXh0ZW50aW9uc1wiO1xuZXhwb3J0IHsgU3VydmV5RWRpdG9yIH0gZnJvbSBcIi4uL2VkaXRvclwiO1xuZXhwb3J0IHsgU3VydmV5Q3JlYXRvciB9IGZyb20gXCIuLi9lZGl0b3JcIjtcblxuZXhwb3J0IHsgU3VydmV5c01hbmFnZXIgfSBmcm9tIFwiLi4vbWFuYWdlXCI7XG5cbmV4cG9ydCB7IFN0eWxlc01hbmFnZXIgfSBmcm9tIFwiLi4vc3R5bGVzbWFuYWdlclwiO1xuXG4vL2xvY2FsaXphdGlvblxuaW1wb3J0IFwiLi4vbG9jYWxpemF0aW9uL2RhbmlzaFwiO1xuaW1wb3J0IFwiLi4vbG9jYWxpemF0aW9uL2ZyZW5jaFwiO1xuaW1wb3J0IFwiLi4vbG9jYWxpemF0aW9uL2dlcm1hblwiO1xuaW1wb3J0IFwiLi4vbG9jYWxpemF0aW9uL2l0YWxpYW5cIjtcbmltcG9ydCBcIi4uL2xvY2FsaXphdGlvbi9pbmRvbmVzaWFuXCI7XG5pbXBvcnQgXCIuLi9sb2NhbGl6YXRpb24va29yZWFuXCI7XG5pbXBvcnQgXCIuLi9sb2NhbGl6YXRpb24vcGVyc2lhblwiO1xuaW1wb3J0IFwiLi4vbG9jYWxpemF0aW9uL3BvbGlzaFwiO1xuaW1wb3J0IFwiLi4vbG9jYWxpemF0aW9uL3BvcnR1Z3Vlc2VcIjtcbmltcG9ydCBcIi4uL2xvY2FsaXphdGlvbi9zaW1wbGlmaWVkLWNoaW5lc2VcIjtcbmltcG9ydCBcIi4uL2xvY2FsaXphdGlvbi9zcGFuaXNoXCI7XG5pbXBvcnQgXCIuLi9sb2NhbGl6YXRpb24vdHJhZGl0aW9uYWwtY2hpbmVzZVwiO1xuaW1wb3J0IFwiLi4vbG9jYWxpemF0aW9uL25vcndlZ2lhblwiO1xuaW1wb3J0IFwiLi4vbG9jYWxpemF0aW9uL2h1bmdhcmlhblwiO1xuXG5leHBvcnQge1xuICBUcmFuc2xhdGlvbixcbiAgVHJhbnNsYXRpb25Hcm91cCxcbiAgVHJhbnNsYXRpb25JdGVtLFxuICBUcmFuc2xhdGlvbkl0ZW1CYXNlXG59IGZyb20gXCIuLi90cmFuc2xhdGlvblwiO1xuXG4vL2Fkb3JuZXJzXG5leHBvcnQgeyB0aXRsZUFkb3JuZXIgfSBmcm9tIFwiLi4vYWRvcm5lcnMvdGl0bGUtZWRpdG9yXCI7XG5leHBvcnQgeyBpdGVtQWRvcm5lciB9IGZyb20gXCIuLi9hZG9ybmVycy9pdGVtLWVkaXRvclwiO1xuZXhwb3J0IHsgbGFiZWxBZG9ybmVyIH0gZnJvbSBcIi4uL2Fkb3JuZXJzL2xhYmVsLWVkaXRvclwiO1xuZXhwb3J0IHsgcXVlc3Rpb25BY3Rpb25zQWRvcm5lciB9IGZyb20gXCIuLi9hZG9ybmVycy9xdWVzdGlvbi1hY3Rpb25zXCI7XG5leHBvcnQgeyBzZWxlY3RJdGVtc0VkaXRvckFkb3JuZXIgfSBmcm9tIFwiLi4vYWRvcm5lcnMvc2VsZWN0LWl0ZW1zLWVkaXRvclwiO1xuZXhwb3J0IHsgcmF0aW5nSXRlbUFkb3JuZXIgfSBmcm9tIFwiLi4vYWRvcm5lcnMvcmF0aW5nLWl0ZW0tZWRpdG9yXCI7XG5leHBvcnQgeyBpbWFnZUl0ZW1zQWRvcm5lciB9IGZyb20gXCIuLi9hZG9ybmVycy9pbWFnZS1pdGVtc1wiO1xuZXhwb3J0IHsgZmxvd3BhbmVsQWN0aW9uc0Fkb3JuZXIgfSBmcm9tIFwiLi4vYWRvcm5lcnMvZmxvd3BhbmVsLWFjdGlvbnNcIjtcblxuZXhwb3J0IHtcbiAgSUFjY29yZGlvbkl0ZW1EYXRhLFxuICBBY2NvcmRpb25JdGVtTW9kZWwsXG4gIEFjY29yZGlvbk1vZGVsXG59IGZyb20gXCIuLi91dGlscy9hY2NvcmRpb25cIjtcblxuZXhwb3J0IHsgU3BsaXR0ZXJDb21wb25lbnRWaWV3TW9kZWwgfSBmcm9tIFwiLi4vdXRpbHMvc3BsaXR0ZXJcIjtcblxuZXhwb3J0IHtcbiAgU3VydmV5UHJvcGVydHlPbmVTZWxlY3RlZEVkaXRvcixcbiAgU3VydmV5UHJvcGVydHlPbmVTZWxlY3RlZEl0ZW1cbn0gZnJvbSBcIi4uL3Byb3BlcnR5RWRpdG9ycy9wcm9wZXJ0eU9uZVNlbGVjdGVkRWRpdG9yXCI7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvZW50cmllcy9pbmRleC50cyIsImltcG9ydCAqIGFzIGtvIGZyb20gXCJrbm9ja291dFwiO1xuaW1wb3J0ICogYXMgU3VydmV5IGZyb20gXCJzdXJ2ZXkta25vY2tvdXRcIjtcbmltcG9ydCB7IFN1cnZleVByb3BlcnR5VGV4dEVkaXRvciB9IGZyb20gXCIuL3Byb3BlcnR5TW9kYWxFZGl0b3JcIjtcbmltcG9ydCB7IFN1cnZleVByb3BlcnR5RWRpdG9yQmFzZSB9IGZyb20gXCIuL3Byb3BlcnR5RWRpdG9yQmFzZVwiO1xuaW1wb3J0IHsgU3VydmV5UHJvcGVydHlFZGl0b3JGYWN0b3J5IH0gZnJvbSBcIi4vcHJvcGVydHlFZGl0b3JGYWN0b3J5XCI7XG5pbXBvcnQgeyBFZGl0YWJsZU9iamVjdCB9IGZyb20gXCIuL2VkaXRhYmxlT2JqZWN0XCI7XG5pbXBvcnQgKiBhcyBlZGl0b3JMb2NhbGl6YXRpb24gZnJvbSBcIi4uL2VkaXRvckxvY2FsaXphdGlvblwiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5UHJvcGVydHlDb25kaXRpb25FZGl0b3IgZXh0ZW5kcyBTdXJ2ZXlQcm9wZXJ0eVRleHRFZGl0b3Ige1xuICBwdWJsaWMgYXZhaWxhYmxlT3BlcmF0b3JzID0gW107XG4gIHB1YmxpYyBzaG93SGVscFRleHQ6IGJvb2xlYW4gPSB0cnVlO1xuICBrb0lzVmFsaWQ6IGFueTtcbiAga29DYW5BZGRDb25kaXRpb246IGFueTtcbiAga29BZGRDb25kaXRpb25RdWVzdGlvbnM6IGFueTtcbiAga29BZGRDb25kaXRpb25RdWVzdGlvbjogYW55O1xuICBrb0FkZENvbmRpdGlvbk9wZXJhdG9yOiBhbnk7XG4gIGtvQWRkQ29uZGl0aW9uVmFsdWU6IGFueTtcbiAga29BZGRDb25kaXRpb25UeXBlOiBhbnk7XG4gIGtvU2hvd0FkZENvbmRpdGlvblR5cGU6IGFueTtcbiAga29BZGRDb25kaXRpb25CdXR0b25UZXh0OiBhbnk7XG4gIGtvQ2FuQWRkQ29uZGl0aW9uVmFsdWU6IGFueTtcbiAga29BZGRDb250aW9uVmFsdWVFbmFibGVkOiBhbnk7XG4gIGtvSGFzVmFsdWVTdXJ2ZXk6IGFueTtcbiAgb25Db25kaXRpb25BZGRDbGljazogYW55O1xuICBrb1ZhbHVlU3VydmV5OiBhbnk7XG4gIHByaXZhdGUgaXNWYWx1ZUNoYW5naW5nOiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgYWRkQ29uZGl0aW9uUXVlc3Rpb25zSGFzaCA9IHt9O1xuICBwcml2YXRlIHN0YXRpYyBlbXB0eVN1cnZleSA9IHVuZGVmaW5lZDtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJvcGVydHk6IFN1cnZleS5Kc29uT2JqZWN0UHJvcGVydHksXG4gICAgcHJpdmF0ZSBfdHlwZTogc3RyaW5nID0gXCJjb25kaXRpb25cIixcbiAgICBwdWJsaWMgc3ludGF4Q2hlY2tNZXRob2ROYW1lOiBzdHJpbmcgPSBcImNyZWF0ZUNvbmRpdGlvblwiXG4gICkge1xuICAgIHN1cGVyKHByb3BlcnR5KTtcbiAgICBpZiAoIVN1cnZleVByb3BlcnR5Q29uZGl0aW9uRWRpdG9yLmVtcHR5U3VydmV5KSB7XG4gICAgICBTdXJ2ZXlQcm9wZXJ0eUNvbmRpdGlvbkVkaXRvci5lbXB0eVN1cnZleSA9XG4gICAgICAgICEhdGhpcy5vcHRpb25zICYmIHRoaXMub3B0aW9ucy5jcmVhdGVTdXJ2ZXkoe30sIFwiY29uZGl0aW9uRWRpdG9yXCIpO1xuICAgIH1cbiAgICB0aGlzLmF2YWlsYWJsZU9wZXJhdG9ycyA9IFN1cnZleVByb3BlcnR5RWRpdG9yRmFjdG9yeS5nZXRPcGVyYXRvcnMoKTtcbiAgICB0aGlzLmtvSXNWYWxpZCA9IGtvLm9ic2VydmFibGUodHJ1ZSk7XG4gICAgdGhpcy5rb0FkZENvbmRpdGlvblF1ZXN0aW9ucyA9IGtvLm9ic2VydmFibGVBcnJheSgpO1xuICAgIHRoaXMua29BZGRDb25kaXRpb25RdWVzdGlvbiA9IGtvLm9ic2VydmFibGUoXCJcIik7XG4gICAgdGhpcy5rb0FkZENvbmRpdGlvbk9wZXJhdG9yID0ga28ub2JzZXJ2YWJsZShcIlwiKTtcbiAgICB0aGlzLmtvQWRkQ29uZGl0aW9uVmFsdWUgPSBrby5vYnNlcnZhYmxlKFwiXCIpO1xuICAgIHRoaXMua29BZGRDb25kaXRpb25UeXBlID0ga28ub2JzZXJ2YWJsZShcImFuZFwiKTtcbiAgICB0aGlzLmtvSGFzVmFsdWVTdXJ2ZXkgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcbiAgICB0aGlzLmtvVmFsdWVTdXJ2ZXkgPSBrby5vYnNlcnZhYmxlKFxuICAgICAgU3VydmV5UHJvcGVydHlDb25kaXRpb25FZGl0b3IuZW1wdHlTdXJ2ZXlcbiAgICApO1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICB0aGlzLmtvQWRkQ29uZGl0aW9uUXVlc3Rpb24uc3Vic2NyaWJlKGZ1bmN0aW9uKG5ld1ZhbHVlKSB7XG4gICAgICBzZWxmLmtvQWRkQ29uZGl0aW9uVmFsdWUoXCJcIik7XG4gICAgICBzZWxmLm9uVmFsdWVTdXJ2ZXlDaGFuZ2VkKG5ld1ZhbHVlLCBzZWxmLmtvQWRkQ29uZGl0aW9uT3BlcmF0b3IoKSk7XG4gICAgfSk7XG4gICAgdGhpcy5rb0FkZENvbmRpdGlvbk9wZXJhdG9yLnN1YnNjcmliZShmdW5jdGlvbihuZXdWYWx1ZSkge1xuICAgICAgc2VsZi5vblZhbHVlU3VydmV5Q2hhbmdlZChzZWxmLmtvQWRkQ29uZGl0aW9uUXVlc3Rpb24oKSwgbmV3VmFsdWUpO1xuICAgIH0pO1xuICAgIHRoaXMua29BZGRDb25kaXRpb25WYWx1ZS5zdWJzY3JpYmUoZnVuY3Rpb24obmV3VmFsdWUpIHtcbiAgICAgIGlmIChzZWxmLmtvSGFzVmFsdWVTdXJ2ZXkoKSkge1xuICAgICAgICB2YXIgbmV3UGFyc2VkVmFsdWUgPSAhbmV3VmFsdWUgPyB7fSA6IEpTT04ucGFyc2UobmV3VmFsdWUpO1xuICAgICAgICBzZWxmLmlzVmFsdWVDaGFuZ2luZyA9IHRydWU7XG4gICAgICAgIHNlbGYua29WYWx1ZVN1cnZleSgpLnNldFZhbHVlKFwicXVlc3Rpb25cIiwgbmV3UGFyc2VkVmFsdWUpO1xuICAgICAgICBzZWxmLmlzVmFsdWVDaGFuZ2luZyA9IGZhbHNlO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMua29DYW5BZGRDb25kaXRpb24gPSBrby5jb21wdXRlZChmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIHRoaXMua29BZGRDb25kaXRpb25RdWVzdGlvbigpICE9IFwiXCIgJiZcbiAgICAgICAgdGhpcy5rb0FkZENvbmRpdGlvblF1ZXN0aW9uKCkgIT0gdW5kZWZpbmVkICYmXG4gICAgICAgIHRoaXMua29BZGRDb25kaXRpb25PcGVyYXRvcigpICE9IFwiXCIgJiZcbiAgICAgICAgKCF0aGlzLmtvQ2FuQWRkQ29uZGl0aW9uVmFsdWUoKSB8fCB0aGlzLmtvQWRkQ29uZGl0aW9uVmFsdWUoKSAhPSBcIlwiKVxuICAgICAgKTtcbiAgICB9LCB0aGlzKTtcbiAgICB0aGlzLmtvU2hvd0FkZENvbmRpdGlvblR5cGUgPSBrby5jb21wdXRlZChmdW5jdGlvbigpIHtcbiAgICAgIGlmICghdGhpcy5rb0lzVmFsaWQoKSkgcmV0dXJuIGZhbHNlO1xuICAgICAgdmFyIHRleHQgPSB0aGlzLmtvVGV4dFZhbHVlKCk7XG4gICAgICBpZiAodGV4dCkgdGV4dCA9IHRleHQudHJpbSgpO1xuICAgICAgcmV0dXJuIHRleHQ7XG4gICAgfSwgdGhpcyk7XG4gICAgdGhpcy5rb0FkZENvbmRpdGlvbkJ1dHRvblRleHQgPSBrby5jb21wdXRlZChmdW5jdGlvbigpIHtcbiAgICAgIHZhciBuYW1lID0gdGhpcy5rb0lzVmFsaWQoKVxuICAgICAgICA/IFwiY29uZGl0aW9uQnV0dG9uQWRkXCJcbiAgICAgICAgOiBcImNvbmRpdGlvbkJ1dHRvblJlcGxhY2VcIjtcbiAgICAgIHJldHVybiBlZGl0b3JMb2NhbGl6YXRpb24uZWRpdG9yTG9jYWxpemF0aW9uLmdldFByb3BlcnR5SW5FZGl0b3IobmFtZSk7XG4gICAgfSwgdGhpcyk7XG4gICAgdGhpcy5rb0NhbkFkZENvbmRpdGlvblZhbHVlID0ga28uY29tcHV0ZWQoZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gc2VsZi5jYW5TaG93VmFsdWVCeU9wZXJhdG9yKHNlbGYua29BZGRDb25kaXRpb25PcGVyYXRvcigpKTtcbiAgICB9LCB0aGlzKTtcbiAgICB0aGlzLmtvQWRkQ29udGlvblZhbHVlRW5hYmxlZCA9IGtvLmNvbXB1dGVkKGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHNlbGYua29DYW5BZGRDb25kaXRpb25WYWx1ZSgpICYmICFzZWxmLmtvSGFzVmFsdWVTdXJ2ZXkoKTtcbiAgICB9LCB0aGlzKTtcbiAgICB0aGlzLm9uQ29uZGl0aW9uQWRkQ2xpY2sgPSBmdW5jdGlvbigpIHtcbiAgICAgIHNlbGYuYWRkQ29uZGl0aW9uKCk7XG4gICAgfTtcbiAgICB0aGlzLnJlc2V0QWRkQ29uZGl0aW9uVmFsdWVzKCk7XG4gIH1cbiAgcHVibGljIGJlZm9yZVNob3coKSB7XG4gICAgc3VwZXIuYmVmb3JlU2hvdygpO1xuICAgIHRoaXMua29BZGRDb25kaXRpb25RdWVzdGlvbihcIlwiKTtcbiAgICB0aGlzLmFkZENvbmRpdGlvblF1ZXN0aW9uc0hhc2ggPSB7fTtcbiAgICB0aGlzLmtvQWRkQ29uZGl0aW9uUXVlc3Rpb25zKHRoaXMuYWxsQ29uZGl0aW9uUXVlc3Rpb25zKTtcbiAgfVxuICBwdWJsaWMgZ2V0IGVkaXRvclR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fdHlwZTtcbiAgfVxuICBwdWJsaWMgZ2V0IGF2YWlsYWJsZVF1ZXN0aW9ucygpOiBhbnlbXSB7XG4gICAgdmFyIHN1cnZleSA9IHRoaXMuZ2V0U3VydmV5KCk7XG4gICAgcmV0dXJuICEhc3VydmV5ID8gc3VydmV5LmdldEFsbFF1ZXN0aW9ucygpIDogW107XG4gIH1cbiAgcHJvdGVjdGVkIGdldFN1cnZleSgpOiBTdXJ2ZXkuU3VydmV5TW9kZWwge1xuICAgIGlmICh0aGlzLm9iamVjdCBpbnN0YW5jZW9mIFN1cnZleS5TdXJ2ZXlNb2RlbCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0T3JpZ2lvbmFsU3VydmV5KHRoaXMub2JqZWN0KTtcbiAgICB9XG4gICAgaWYgKFxuICAgICAgdGhpcy5vYmplY3QgaW5zdGFuY2VvZiBTdXJ2ZXkuTWF0cml4RHJvcGRvd25Db2x1bW4gJiZcbiAgICAgICEhdGhpcy5vYmplY3QuY29sT3duZXJcbiAgICApXG4gICAgICByZXR1cm4gdGhpcy5vYmplY3QuY29sT3duZXJbXCJzdXJ2ZXlcIl07XG4gICAgaWYgKCEhdGhpcy5vYmplY3QgJiYgISF0aGlzLm9iamVjdC5zdXJ2ZXkpXG4gICAgICByZXR1cm4gdGhpcy5nZXRPcmlnaW9uYWxTdXJ2ZXkodGhpcy5vYmplY3Quc3VydmV5KTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBwcml2YXRlIGdldE9yaWdpb25hbFN1cnZleShzdXJ2ZXk6IFN1cnZleS5TdXJ2ZXlNb2RlbCk6IFN1cnZleS5TdXJ2ZXlNb2RlbCB7XG4gICAgcmV0dXJuIEVkaXRhYmxlT2JqZWN0LmdldE9yaWdpb25hbFN1cnZleShzdXJ2ZXkpO1xuICB9XG4gIHB1YmxpYyBnZXQgYWxsQ29uZGl0aW9uUXVlc3Rpb25zKCk6IGFueVtdIHtcbiAgICB2YXIgcmVzID0gdGhpcy5nZXRDb25kaXRpb25RdWV0aW9ucygpO1xuICAgIHJlcy5zb3J0KGZ1bmN0aW9uKGEsIGIpIHtcbiAgICAgIHJldHVybiBhLnRleHQubG9jYWxlQ29tcGFyZShiLnRleHQpO1xuICAgIH0pO1xuICAgIHJldHVybiByZXM7XG4gIH1cbiAgcHVibGljIGdldCBpc0V4cHJlc3Npb25WYWxpZCgpOiBib29sZWFuIHtcbiAgICB2YXIgdGV4dCA9IHRoaXMua29UZXh0VmFsdWUoKTtcbiAgICBpZiAoIXRleHQpIHJldHVybiBmYWxzZTtcbiAgICB2YXIgcnVubmVyID0gbmV3IFN1cnZleS5Db25kaXRpb25SdW5uZXIodGV4dCk7XG4gICAgcmV0dXJuIHJ1bm5lci5jYW5SdW4oKTtcbiAgfVxuICBwcml2YXRlIGdldENvbmRpdGlvblF1ZXRpb25zKCk6IGFueVtdIHtcbiAgICBpZiAoIXRoaXMub2JqZWN0KSByZXR1cm4gW107XG4gICAgdmFyIHJlcyA9IFtdO1xuICAgIHZhciBxdWVzdGlvbnMgPSB0aGlzLmF2YWlsYWJsZVF1ZXN0aW9ucztcbiAgICBpZiAocXVlc3Rpb25zLmxlbmd0aCA+IDApIHtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcXVlc3Rpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmICh0aGlzLm9iamVjdCA9PSBxdWVzdGlvbnNbaV0pIGNvbnRpbnVlO1xuICAgICAgICBxdWVzdGlvbnNbaV0uYWRkQ29uZGl0aW9uT2JqZWN0c0J5Q29udGV4dChyZXMsIHRoaXMub2JqZWN0KTtcbiAgICAgIH1cbiAgICAgIHRoaXMuYWRkQ29uZGl0aW9uUXVlc3Rpb25zSGFzaCA9IHt9O1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKCF0aGlzLm9wdGlvbnMgfHwgIXRoaXMub3B0aW9ucy5zaG93VGl0bGVzSW5FeHByZXNzaW9ucykge1xuICAgICAgICAgIHJlc1tpXS50ZXh0ID0gcmVzW2ldLm5hbWU7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5hZGRDb25kaXRpb25RdWVzdGlvbnNIYXNoW3Jlc1tpXS5uYW1lXSA9IHJlc1tpXS5xdWVzdGlvbjtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5hZGRDYWxjdWxhdGVkVmFsdWVzKHJlcyk7XG4gICAgISF0aGlzLm9wdGlvbnMgJiZcbiAgICAgIHRoaXMub3B0aW9ucy5vbkNvbmRpdGlvblF1ZXN0aW9uc0dldExpc3RDYWxsYmFjayhcbiAgICAgICAgdGhpcy5lZGl0YWJsZVByb3BlcnR5TmFtZSxcbiAgICAgICAgdGhpcy5vYmplY3QsXG4gICAgICAgIHRoaXMsXG4gICAgICAgIHJlc1xuICAgICAgKTtcbiAgICByZXR1cm4gcmVzO1xuICB9XG4gIHByaXZhdGUgYWRkQ2FsY3VsYXRlZFZhbHVlcyhyZXM6IEFycmF5PGFueT4pIHtcbiAgICB2YXIgc3VydmV5ID0gdGhpcy5nZXRTdXJ2ZXkoKTtcbiAgICBpZiAoIXN1cnZleSkgcmV0dXJuO1xuICAgIHZhciB2YWx1ZXMgPSBzdXJ2ZXkuY2FsY3VsYXRlZFZhbHVlcztcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZhbHVlcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIG5hbWUgPSB2YWx1ZXNbaV0ubmFtZTtcbiAgICAgIHJlcy5wdXNoKHsgbmFtZTogbmFtZSwgdGV4dDogbmFtZSwgcXVlc3Rpb246IG51bGwgfSk7XG4gICAgfVxuICB9XG4gIHByaXZhdGUgb25WYWx1ZVN1cnZleUNoYW5nZWQocXVlc3Rpb25OYW1lOiBzdHJpbmcsIG9wZXJhdG9yOiBzdHJpbmcpIHtcbiAgICBpZiAoXG4gICAgICAhdGhpcy5jYW5TaG93VmFsdWVCeU9wZXJhdG9yKG9wZXJhdG9yKSB8fFxuICAgICAgIXF1ZXN0aW9uTmFtZSB8fFxuICAgICAgIXRoaXMuZ2V0U3VydmV5KClcbiAgICApIHtcbiAgICAgIHRoaXMua29IYXNWYWx1ZVN1cnZleShmYWxzZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciBqc29uID0gdGhpcy5nZXRRdWVzdGlvbkNvbmRpdGlvbkpzb24ocXVlc3Rpb25OYW1lLCBvcGVyYXRvcik7XG4gICAgdGhpcy5rb0hhc1ZhbHVlU3VydmV5KCEhanNvbiAmJiAhIWpzb24udHlwZSk7XG4gICAgaWYgKHRoaXMua29IYXNWYWx1ZVN1cnZleSgpKSB7XG4gICAgICB0aGlzLmtvVmFsdWVTdXJ2ZXkodGhpcy5jcmVhdGVWYWx1ZVN1cnZleShqc29uLCBxdWVzdGlvbk5hbWUpKTtcbiAgICAgIHZhciBxdWVzdGlvbiA9IHRoaXMua29WYWx1ZVN1cnZleSgpLmdldFF1ZXN0aW9uQnlOYW1lKFwicXVlc3Rpb25cIik7XG4gICAgICBpZiAoISFxdWVzdGlvbiAmJiAhcXVlc3Rpb24uaXNFbXB0eSgpKSB7XG4gICAgICAgIHRoaXMua29BZGRDb25kaXRpb25WYWx1ZShKU09OLnN0cmluZ2lmeShxdWVzdGlvbi52YWx1ZSkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBwcml2YXRlIGRlbGV0ZUNvbmRpdGlvblByb3BlcnRpZXMoanNvbjogYW55KSB7XG4gICAgZGVsZXRlIGpzb25bXCJ2aXNpYmxlXCJdO1xuICAgIGRlbGV0ZSBqc29uW1widmlzaWJsZUlmXCJdO1xuICAgIGRlbGV0ZSBqc29uW1wiZW5hYmxlXCJdO1xuICAgIGRlbGV0ZSBqc29uW1wiZW5hYmxlSWZcIl07XG4gIH1cbiAgcHJpdmF0ZSBjcmVhdGVWYWx1ZVN1cnZleShxanNvbjogYW55LCBxdWVzdGlvbk5hbWU6IHN0cmluZyk6IFN1cnZleS5TdXJ2ZXkge1xuICAgIHFqc29uLm5hbWUgPSBcInF1ZXN0aW9uXCI7XG4gICAgcWpzb24udGl0bGUgPSBlZGl0b3JMb2NhbGl6YXRpb24uZWRpdG9yTG9jYWxpemF0aW9uLmdldFN0cmluZyhcbiAgICAgIFwicGUuY29uZGl0aW9uVmFsdWVRdWVzdGlvblRpdGxlXCJcbiAgICApO1xuICAgIHRoaXMuZGVsZXRlQ29uZGl0aW9uUHJvcGVydGllcyhxanNvbik7XG4gICAgaWYgKCEhcWpzb24uY2hvaWNlcykge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBxanNvbi5jaG9pY2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHRoaXMuZGVsZXRlQ29uZGl0aW9uUHJvcGVydGllcyhxanNvbi5jaG9pY2VzW2ldKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdmFyIGpzb24gPSB7XG4gICAgICBxdWVzdGlvbnM6IFtdLFxuICAgICAgc2hvd05hdmlnYXRpb25CdXR0b25zOiBmYWxzZSxcbiAgICAgIHNob3dRdWVzdGlvbk51bWJlcnM6IFwib2ZmXCJcbiAgICB9O1xuICAgIGpzb24ucXVlc3Rpb25zLnB1c2gocWpzb24pO1xuICAgIHZhciBzdXJ2ZXkgPSAhIXRoaXMub3B0aW9uc1xuICAgICAgPyB0aGlzLm9wdGlvbnMuY3JlYXRlU3VydmV5KGpzb24sIFwiY29uZGl0aW9uRWRpdG9yXCIpXG4gICAgICA6IG5ldyBTdXJ2ZXkuU3VydmV5KGpzb24pO1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICBzdXJ2ZXkub25WYWx1ZUNoYW5nZWQuYWRkKGZ1bmN0aW9uKHN1cnZleSwgb3B0aW9ucykge1xuICAgICAgaWYgKCFzZWxmLmlzVmFsdWVDaGFuZ2luZykge1xuICAgICAgICBzZWxmLmtvQWRkQ29uZGl0aW9uVmFsdWUoSlNPTi5zdHJpbmdpZnkob3B0aW9ucy52YWx1ZSkpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGlmICh0aGlzLm9wdGlvbnMpIHtcbiAgICAgIHZhciBwcm9wTmFtZSA9ICEhdGhpcy5wcm9wZXJ0eSA/IHRoaXMucHJvcGVydHkubmFtZSA6IFwiXCI7XG4gICAgICB0aGlzLm9wdGlvbnMub25Db25kaXRpb25WYWx1ZVN1cnZleUNyZWF0ZWRDYWxsQmFjayhcbiAgICAgICAgcXVlc3Rpb25OYW1lLFxuICAgICAgICBwcm9wTmFtZSxcbiAgICAgICAgdGhpcy5vYmplY3QsXG4gICAgICAgIHRoaXMsXG4gICAgICAgIHN1cnZleVxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIHN1cnZleTtcbiAgfVxuICBwcml2YXRlIGdldFF1ZXN0aW9uQnlOYW1lKHF1ZXN0aW9uTmFtZTogc3RyaW5nKTogU3VydmV5LlF1ZXN0aW9uIHtcbiAgICBpZiAoIXRoaXMuZ2V0U3VydmV5KCkpIHJldHVybiBudWxsO1xuICAgIHJldHVybiB0aGlzLmFkZENvbmRpdGlvblF1ZXN0aW9uc0hhc2hbcXVlc3Rpb25OYW1lXTtcbiAgfVxuICBwcml2YXRlIGdldFF1ZXN0aW9uVmFsdWVCeU5hbWUocXVlc3Rpb25OYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHZhciBxdWVzdGlvbiA9IHRoaXMuZ2V0UXVlc3Rpb25CeU5hbWUocXVlc3Rpb25OYW1lKTtcbiAgICBpZiAocXVlc3Rpb24gJiYgcXVlc3Rpb24ubmFtZSAhPSBxdWVzdGlvbi5nZXRWYWx1ZU5hbWUoKSlcbiAgICAgIHJldHVybiBxdWVzdGlvbk5hbWUucmVwbGFjZShxdWVzdGlvbi5uYW1lLCBxdWVzdGlvbi5nZXRWYWx1ZU5hbWUoKSk7XG4gICAgcmV0dXJuIHF1ZXN0aW9uTmFtZTtcbiAgfVxuICBwcml2YXRlIGdldFF1ZXN0aW9uQ29uZGl0aW9uSnNvbihcbiAgICBxdWVzdGlvbk5hbWU6IHN0cmluZyxcbiAgICBvcGVyYXRvcjogc3RyaW5nXG4gICk6IGFueSB7XG4gICAgdmFyIHBhdGggPSBcIlwiO1xuICAgIHZhciBxdWVzdGlvbiA9IHRoaXMuZ2V0UXVlc3Rpb25CeU5hbWUocXVlc3Rpb25OYW1lKTtcbiAgICBpZiAoIXF1ZXN0aW9uKSByZXR1cm4gbnVsbDtcbiAgICB2YXIgcGF0aCA9IHF1ZXN0aW9uTmFtZS5zdWJzdHIocXVlc3Rpb24ubmFtZS5sZW5ndGgpO1xuICAgIGlmICghIXBhdGggJiYgcGF0aFswXSA9PSBcIi5cIikge1xuICAgICAgcGF0aCA9IHBhdGguc3Vic3RyKDEpO1xuICAgIH1cbiAgICB2YXIganNvbiA9XG4gICAgICBxdWVzdGlvbiAmJiBxdWVzdGlvbi5nZXRDb25kaXRpb25Kc29uXG4gICAgICAgID8gcXVlc3Rpb24uZ2V0Q29uZGl0aW9uSnNvbihvcGVyYXRvciwgcGF0aClcbiAgICAgICAgOiBudWxsO1xuICAgIHJldHVybiBqc29uICYmIChqc29uLnR5cGUgIT09IFwidGV4dFwiIHx8IGpzb24uaW5wdXRUeXBlKSA/IGpzb24gOiBudWxsO1xuICB9XG4gIHByaXZhdGUgY2FuU2hvd1ZhbHVlQnlPcGVyYXRvcihvcGVyYXRvcjogc3RyaW5nKSB7XG4gICAgcmV0dXJuIG9wZXJhdG9yICE9IFwiZW1wdHlcIiAmJiBvcGVyYXRvciAhPSBcIm5vdGVtcHR5XCI7XG4gIH1cbiAgcHVibGljIGdldCBoYXNBY2VFZGl0b3IoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgIHR5cGVvZiBhY2UgIT09IFwidW5kZWZpbmVkXCIgJiZcbiAgICAgIHR5cGVvZiBhY2UucmVxdWlyZShcImFjZS9leHQvbGFuZ3VhZ2VfdG9vbHNcIikgIT09IFwidW5kZWZpbmVkXCJcbiAgICApO1xuICB9XG4gIHB1YmxpYyBnZXQgYWRkQ29uZGl0aW9uUXVlc3Rpb25PcHRpb25zKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGVkaXRvckxvY2FsaXphdGlvbi5lZGl0b3JMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKFxuICAgICAgXCJwZS5jb25kaXRpb25TZWxlY3RRdWVzdGlvblwiXG4gICAgKTtcbiAgfVxuICBwdWJsaWMgYWRkQ29uZGl0aW9uKCkge1xuICAgIGlmICghdGhpcy5rb0NhbkFkZENvbmRpdGlvbigpKSByZXR1cm47XG4gICAgdmFyIHRleHQgPSBcIlwiO1xuICAgIGlmICh0aGlzLmtvU2hvd0FkZENvbmRpdGlvblR5cGUoKSkge1xuICAgICAgdGV4dCA9IHRoaXMua29UZXh0VmFsdWUoKSArIFwiIFwiICsgdGhpcy5rb0FkZENvbmRpdGlvblR5cGUoKSArIFwiIFwiO1xuICAgIH1cbiAgICB0ZXh0ICs9XG4gICAgICBcIntcIiArXG4gICAgICB0aGlzLmdldFF1ZXN0aW9uVmFsdWVCeU5hbWUodGhpcy5rb0FkZENvbmRpdGlvblF1ZXN0aW9uKCkpICtcbiAgICAgIFwifSBcIiArXG4gICAgICB0aGlzLmdldEFkZENvbmRpdGlvbk9wZXJhdG9yKCk7XG4gICAgaWYgKHRoaXMua29DYW5BZGRDb25kaXRpb25WYWx1ZSgpKSB7XG4gICAgICB0ZXh0ICs9IFwiIFwiICsgdGhpcy5nZXRBZGRDb25kaXRpb25WYWx1ZSgpO1xuICAgIH1cbiAgICB0aGlzLmtvVGV4dFZhbHVlKHRleHQpO1xuICAgIHRoaXMucmVzZXRBZGRDb25kaXRpb25WYWx1ZXMoKTtcbiAgfVxuICBwcm90ZWN0ZWQgb25CZWZvcmVBcHBseSgpIHtcbiAgICBpZiAoIXRoaXMua29UZXh0VmFsdWUoKSAmJiB0aGlzLmtvQ2FuQWRkQ29uZGl0aW9uKCkpIHtcbiAgICAgIHRoaXMuYWRkQ29uZGl0aW9uKCk7XG4gICAgfVxuICAgIHN1cGVyLm9uQmVmb3JlQXBwbHkoKTtcbiAgfVxuICBwcml2YXRlIGdldEFkZENvbmRpdGlvbk9wZXJhdG9yKCk6IHN0cmluZyB7XG4gICAgdmFyIG9wID0gdGhpcy5rb0FkZENvbmRpdGlvbk9wZXJhdG9yKCk7XG4gICAgaWYgKG9wID09IFwiZXF1YWxcIikgcmV0dXJuIFwiPVwiO1xuICAgIGlmIChvcCA9PSBcIm5vdGVxdWFsXCIpIHJldHVybiBcIjw+XCI7XG4gICAgaWYgKG9wID09IFwiZ3JlYXRlclwiKSByZXR1cm4gXCI+XCI7XG4gICAgaWYgKG9wID09IFwibGVzc1wiKSByZXR1cm4gXCI8XCI7XG4gICAgaWYgKG9wID09IFwiZ3JlYXRlcm9yZXF1YWxcIikgcmV0dXJuIFwiPj1cIjtcbiAgICBpZiAob3AgPT0gXCJsZXNzb3JlcXVhbFwiKSByZXR1cm4gXCI8PVwiO1xuICAgIHJldHVybiBvcDtcbiAgfVxuICBwcml2YXRlIGdldEFkZENvbmRpdGlvblZhbHVlKCk6IHN0cmluZyB7XG4gICAgdmFyIHZhbCA9IHRoaXMua29BZGRDb25kaXRpb25WYWx1ZSgpO1xuICAgIGlmICghdmFsKSByZXR1cm4gdmFsO1xuICAgIGlmICh2YWwgPT0gXCJ0cnVlXCIgfHwgdmFsID09IFwiZmFsc2VcIikgcmV0dXJuIHZhbDtcbiAgICBpZiAoIWlzTmFOKHZhbCkpIHJldHVybiB2YWw7XG4gICAgaWYgKHZhbFswXSA9PSBcIltcIikgcmV0dXJuIHZhbC5yZXBsYWNlKC8oPyFeKShbJ10pKD8hJCkvZywgXCJcXFxcJDFcIik7XG4gICAgaWYgKCF0aGlzLmlzUXVvdGUodmFsWzBdKSkgdmFsID0gXCInXCIgKyB2YWw7XG4gICAgaWYgKCF0aGlzLmlzUXVvdGUodmFsW3ZhbC5sZW5ndGggLSAxXSkpIHZhbCA9IHZhbCArIFwiJ1wiO1xuICAgIHJldHVybiB2YWwucmVwbGFjZSgvKD8hXikoWydcIl0pKD8hJCkvZywgXCJcXFxcJDFcIik7XG4gIH1cbiAgcHJpdmF0ZSBpc1F1b3RlKGNoOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gY2ggPT0gXCInXCIgfHwgY2ggPT0gJ1wiJztcbiAgfVxuICBwcm90ZWN0ZWQgb25rb1RleHRWYWx1ZUNoYW5nZWQobmV3VmFsdWUpIHtcbiAgICBpZiAoIW5ld1ZhbHVlKSB7XG4gICAgICB0aGlzLmtvSXNWYWxpZCh0cnVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIGNvbmRpdGlvblBhcnNlcjogYW55ID0gbmV3IFN1cnZleS5Db25kaXRpb25zUGFyc2VyKCk7XG4gICAgICBjb25kaXRpb25QYXJzZXJbdGhpcy5zeW50YXhDaGVja01ldGhvZE5hbWVdKG5ld1ZhbHVlKTtcbiAgICAgIHRoaXMua29Jc1ZhbGlkKCFjb25kaXRpb25QYXJzZXIuZXJyb3IpO1xuICAgIH1cbiAgfVxuICBwcml2YXRlIHJlc2V0QWRkQ29uZGl0aW9uVmFsdWVzKCkge1xuICAgIHRoaXMua29BZGRDb25kaXRpb25RdWVzdGlvbihcIlwiKTtcbiAgICB0aGlzLmtvQWRkQ29uZGl0aW9uT3BlcmF0b3IoXCJlcXVhbFwiKTtcbiAgICB0aGlzLmtvQWRkQ29uZGl0aW9uVmFsdWUoXCJcIik7XG4gIH1cbn1cblxuU3VydmV5UHJvcGVydHlFZGl0b3JGYWN0b3J5LnJlZ2lzdGVyRWRpdG9yKFwiY29uZGl0aW9uXCIsIGZ1bmN0aW9uKFxuICBwcm9wZXJ0eTogU3VydmV5Lkpzb25PYmplY3RQcm9wZXJ0eVxuKTogU3VydmV5UHJvcGVydHlFZGl0b3JCYXNlIHtcbiAgcmV0dXJuIG5ldyBTdXJ2ZXlQcm9wZXJ0eUNvbmRpdGlvbkVkaXRvcihcbiAgICBwcm9wZXJ0eSxcbiAgICBcImNvbmRpdGlvblwiLFxuICAgIFwiY3JlYXRlQ29uZGl0aW9uXCJcbiAgKTtcbn0pO1xuU3VydmV5UHJvcGVydHlFZGl0b3JGYWN0b3J5LnJlZ2lzdGVyRWRpdG9yKFwiZXhwcmVzc2lvblwiLCBmdW5jdGlvbihcbiAgcHJvcGVydHk6IFN1cnZleS5Kc29uT2JqZWN0UHJvcGVydHlcbik6IFN1cnZleVByb3BlcnR5RWRpdG9yQmFzZSB7XG4gIHJldHVybiBuZXcgU3VydmV5UHJvcGVydHlDb25kaXRpb25FZGl0b3IoXG4gICAgcHJvcGVydHksXG4gICAgXCJleHByZXNzaW9uXCIsXG4gICAgXCJwYXJzZUV4cHJlc3Npb25cIlxuICApO1xufSk7XG5cbnZhciBvcGVyYXRpb25zID0gW1xuICB7XG4gICAgdmFsdWU6IFwiYW5kXCIsXG4gICAgdGl0bGU6IFwibG9naWNhbCAnYW5kJyBvcGVyYXRvclwiXG4gIH0sXG4gIHtcbiAgICB2YWx1ZTogXCImJlwiLFxuICAgIHRpdGxlOiBcImxvZ2ljYWwgJ2FuZCcgb3BlcmF0b3JcIlxuICB9LFxuICB7XG4gICAgdmFsdWU6IFwib3JcIixcbiAgICB0aXRsZTogXCJsb2dpY2FsICdvcicgb3BlcmF0b3JcIlxuICB9LFxuICB7XG4gICAgdmFsdWU6IFwifHxcIixcbiAgICB0aXRsZTogXCJsb2dpY2FsICdvcicgb3BlcmF0b3JcIlxuICB9LFxuICB7XG4gICAgdmFsdWU6IFwiZW1wdHlcIixcbiAgICB0aXRsZTogXCJyZXR1cm5zIHRydWUgaWYgdGhlIGxlZnQgb3BlcmFuZCBpcyBlbXB0eVx0e3F1ZXN0aW9uTmFtZX0gZW1wdHlcIlxuICB9LFxuICB7XG4gICAgdmFsdWU6IFwibm90ZW1wdHlcIixcbiAgICB0aXRsZTpcbiAgICAgIFwicmV0dXJucyB0cnVlIGlmIHRoZSBsZWZ0IG9wZXJhbmQgaXMgbm90IGVtcHR5XHR7cXVlc3Rpb25OYW1lfSBub3RlbXB0eVwiXG4gIH0sXG4gIHtcbiAgICB2YWx1ZTogXCI9XCIsXG4gICAgdGl0bGU6XG4gICAgICBcInJldHVybnMgdHJ1ZSBpZiB0d28gdmFsdWVzIGFyZSBlcXVhbFx0e3F1ZXN0aW9uTmFtZX0gPSA1LCB7cXVlc3Rpb25OYW1lfSA9PSAnYWJjJywge3F1ZXN0aW9uTmFtZX0gZXF1YWwgMTI0XCJcbiAgfSxcbiAge1xuICAgIHZhbHVlOiBcIj09XCIsXG4gICAgdGl0bGU6XG4gICAgICBcInJldHVybnMgdHJ1ZSBpZiB0d28gdmFsdWVzIGFyZSBlcXVhbFx0e3F1ZXN0aW9uTmFtZX0gPSA1LCB7cXVlc3Rpb25OYW1lfSA9PSAnYWJjJywge3F1ZXN0aW9uTmFtZX0gZXF1YWwgMTI0XCJcbiAgfSxcbiAge1xuICAgIHZhbHVlOiBcImVxdWFsXCIsXG4gICAgdGl0bGU6XG4gICAgICBcInJldHVybnMgdHJ1ZSBpZiB0d28gdmFsdWVzIGFyZSBlcXVhbFx0e3F1ZXN0aW9uTmFtZX0gPSA1LCB7cXVlc3Rpb25OYW1lfSA9PSAnYWJjJywge3F1ZXN0aW9uTmFtZX0gZXF1YWwgMTI0XCJcbiAgfSxcbiAge1xuICAgIHZhbHVlOiBcIjw+XCIsXG4gICAgdGl0bGU6XG4gICAgICBcInJldHVybnMgdHJ1ZSBpZiB0d28gdmFsdWVzIGFyZSBub3QgZXF1YWxcdHtxdWVzdGlvbk5hbWV9IDw+IDUsIHtxdWVzdGlvbk5hbWV9ICE9ICdhYmMnLCB7cXVlc3Rpb25OYW1lfSBub3RlcXVhbCAxMjRcIlxuICB9LFxuICB7XG4gICAgdmFsdWU6IFwiIT1cIixcbiAgICB0aXRsZTpcbiAgICAgIFwicmV0dXJucyB0cnVlIGlmIHR3byB2YWx1ZXMgYXJlIG5vdCBlcXVhbFx0e3F1ZXN0aW9uTmFtZX0gPD4gNSwge3F1ZXN0aW9uTmFtZX0gIT0gJ2FiYycsIHtxdWVzdGlvbk5hbWV9IG5vdGVxdWFsIDEyNFwiXG4gIH0sXG4gIHtcbiAgICB2YWx1ZTogXCJub3RlcXVhbFwiLFxuICAgIHRpdGxlOlxuICAgICAgXCJyZXR1cm5zIHRydWUgaWYgdHdvIHZhbHVlcyBhcmUgbm90IGVxdWFsXHR7cXVlc3Rpb25OYW1lfSA8PiA1LCB7cXVlc3Rpb25OYW1lfSAhPSAnYWJjJywge3F1ZXN0aW9uTmFtZX0gbm90ZXF1YWwgMTI0XCJcbiAgfSxcbiAge1xuICAgIHZhbHVlOiBcIj5cIixcbiAgICB0aXRsZTpcbiAgICAgIFwicmV0dXJucyB0cnVlIGlmIHRoZSBsZWZ0IG9wZXJhbmQgZ3JlYXRlciB0aGVuIHRoZSBzZWNvbmQgb3BlcmFuZFx0e3F1ZXN0aW9uTmFtZX0gPiAyLCB7cXVlc3Rpb25OYW1lfSBncmVhdGVyICdhJ1wiXG4gIH0sXG4gIHtcbiAgICB2YWx1ZTogXCJncmVhdGVyXCIsXG4gICAgdGl0bGU6XG4gICAgICBcInJldHVybnMgdHJ1ZSBpZiB0aGUgbGVmdCBvcGVyYW5kIGdyZWF0ZXIgdGhlbiB0aGUgc2Vjb25kIG9wZXJhbmRcdHtxdWVzdGlvbk5hbWV9ID4gMiwge3F1ZXN0aW9uTmFtZX0gZ3JlYXRlciAnYSdcIlxuICB9LFxuICB7XG4gICAgdmFsdWU6IFwiPFwiLFxuICAgIHRpdGxlOlxuICAgICAgXCJyZXR1cm5zIHRydWUgaWYgdGhlIGxlZnQgb3BlcmFuZCBsZXNzIHRoZW4gdGhlIHNlY29uZCBvcGVyYW5kXHR7cXVlc3Rpb25OYW1lfSA8IDIsIHtxdWVzdGlvbk5hbWV9IGxlc3MgJ2EnXCJcbiAgfSxcbiAge1xuICAgIHZhbHVlOiBcImxlc3NcIixcbiAgICB0aXRsZTpcbiAgICAgIFwicmV0dXJucyB0cnVlIGlmIHRoZSBsZWZ0IG9wZXJhbmQgbGVzcyB0aGVuIHRoZSBzZWNvbmQgb3BlcmFuZFx0e3F1ZXN0aW9uTmFtZX0gPCAyLCB7cXVlc3Rpb25OYW1lfSBsZXNzICdhJ1wiXG4gIH0sXG4gIHtcbiAgICB2YWx1ZTogXCI+PVwiLFxuICAgIHRpdGxlOlxuICAgICAgXCJyZXR1cm5zIHRydWUgaWYgdGhlIGxlZnQgb3BlcmFuZCBlcXVhbCBvciBncmVhdGVyIHRoZW4gdGhlIHNlY29uZCBvcGVyYW5kXHR7cXVlc3Rpb25OYW1lfSA+PSAyLCB7cXVlc3Rpb25OYW1lfSBncmVhdGVyb3JlcXVhbCAnYSdcIlxuICB9LFxuICB7XG4gICAgdmFsdWU6IFwiZ3JlYXRlcm9yZXF1YWxcIixcbiAgICB0aXRsZTpcbiAgICAgIFwicmV0dXJucyB0cnVlIGlmIHRoZSBsZWZ0IG9wZXJhbmQgZXF1YWwgb3IgZ3JlYXRlciB0aGVuIHRoZSBzZWNvbmQgb3BlcmFuZFx0e3F1ZXN0aW9uTmFtZX0gPj0gMiwge3F1ZXN0aW9uTmFtZX0gZ3JlYXRlcm9yZXF1YWwgJ2EnXCJcbiAgfSxcbiAge1xuICAgIHZhbHVlOiBcIjw9XCIsXG4gICAgdGl0bGU6XG4gICAgICBcInJldHVybnMgdHJ1ZSBpZiB0aGUgbGVmdCBvcGVyYW5kIGVxdWFsIG9yIGxlc3MgdGhlbiB0aGUgc2Vjb25kIG9wZXJhbmRcdHtxdWVzdGlvbk5hbWV9IDw9IDIsIHtxdWVzdGlvbk5hbWV9IGxlc3NvcmVxdWFsICdhJ1wiXG4gIH0sXG4gIHtcbiAgICB2YWx1ZTogXCJsZXNzb3JlcXVhbFwiLFxuICAgIHRpdGxlOlxuICAgICAgXCJyZXR1cm5zIHRydWUgaWYgdGhlIGxlZnQgb3BlcmFuZCBlcXVhbCBvciBsZXNzIHRoZW4gdGhlIHNlY29uZCBvcGVyYW5kXHR7cXVlc3Rpb25OYW1lfSA8PSAyLCB7cXVlc3Rpb25OYW1lfSBsZXNzb3JlcXVhbCAnYSdcIlxuICB9LFxuICB7XG4gICAgdmFsdWU6IFwiY29udGFpbnNcIixcbiAgICB0aXRsZTpcbiAgICAgIFwicmV0dXJuIHRydWUgaWYgdGhlIGxlZnQgb3BlcmFuZCBpcyBhbiBhcnJheSBhbmQgaXQgY29udGFpbnMgYSB2YWx1ZSBvZiB0aGUgc2Vjb25kIG9wZXJhbmRcdHtxdWVzdGlvbk5hbWV9IGNvbnRhaW5zICdhJ1wiXG4gIH0sXG4gIHtcbiAgICB2YWx1ZTogXCJub3Rjb250YWluc1wiLFxuICAgIHRpdGxlOlxuICAgICAgXCJyZXR1cm4gdHJ1ZSBpZiB0aGUgbGVmdCBvcGVyYW5kIGlzIGFuIGFycmF5IGFuZCBpdCBkb2VzIG5vdCBjb250YWluIGEgdmFsdWUgb2YgdGhlIHNlY29uZCBvcGVyYW5kXCJcbiAgfSxcbiAge1xuICAgIHZhbHVlOiBcImFueW9mXCIsXG4gICAgdGl0bGU6XG4gICAgICBcInJldHVybiB0cnVlIGlmIHRoZSBsZWZ0IG9wZXJhbmQgaXMgYW4gYXJyYXkgYW5kIGl0IGNvbnRhaW5zIGFueSB2YWx1ZSBvZiB0aGUgc2Vjb25kIGFycmF5IG9wZXJhbmRcIlxuICB9LFxuICB7XG4gICAgdmFsdWU6IFwiYWxsb2ZcIixcbiAgICB0aXRsZTpcbiAgICAgIFwicmV0dXJuIHRydWUgaWYgdGhlIGxlZnQgb3BlcmFuZCBpcyBhbiBhcnJheSBhbmQgaXQgY29udGFpbnMgYWxsIHZhbHVlcyBvZiB0aGUgc2Vjb25kIGFycmF5IG9wZXJhbmRcIlxuICB9XG5dO1xuXG5jb25zdCBjcmVhdGVBbm5vdGF0aW9ucyA9IChcbiAgY29uZGl0aW9uOiBzdHJpbmcsXG4gIHN5bnRheENoZWNrTWV0aG9kTmFtZTogc3RyaW5nXG4pOiBBY2VBamF4LkFubm90YXRpb25bXSA9PiB7XG4gIGNvbmRpdGlvbiA9IGNvbmRpdGlvbiB8fCBcIlwiO1xuICB2YXIgYW5ub3RhdGlvbnMgPSBuZXcgQXJyYXk8QWNlQWpheC5Bbm5vdGF0aW9uPigpO1xuICB2YXIgY29uZGl0aW9uUGFyc2VyOiBhbnkgPSBuZXcgU3VydmV5LkNvbmRpdGlvbnNQYXJzZXIoKTtcbiAgY29uZGl0aW9uUGFyc2VyW3N5bnRheENoZWNrTWV0aG9kTmFtZV0oY29uZGl0aW9uKTtcbiAgaWYgKCEhY29uZGl0aW9uICYmIGNvbmRpdGlvblBhcnNlci5lcnJvcikge1xuICAgIHZhciB0b0Vycm9yU3Vic3RyaW5nID0gY29uZGl0aW9uLnN1YnN0cmluZygwLCBjb25kaXRpb25QYXJzZXIuZXJyb3IuYXQpO1xuICAgIHZhciBjb2x1bW4gPSB0b0Vycm9yU3Vic3RyaW5nLmxlbmd0aCAtIHRvRXJyb3JTdWJzdHJpbmcubGFzdEluZGV4T2YoXCJcXG5cIik7XG4gICAgdmFyIGFubm90YXRpb246IEFjZUFqYXguQW5ub3RhdGlvbiA9IHtcbiAgICAgIHJvdzogY29uZGl0aW9uLm1hdGNoKC9cXG4vZykgPyBjb25kaXRpb24ubWF0Y2goL1xcbi9nKS5sZW5ndGggOiAwLFxuICAgICAgY29sdW1uOiBjb2x1bW4sXG4gICAgICB0ZXh0OiBjb25kaXRpb25QYXJzZXIuZXJyb3IuY29kZSArIFwiIChcIiArIGNvbHVtbiArIFwiKVwiLFxuICAgICAgdHlwZTogXCJlcnJvclwiXG4gICAgfTtcbiAgICBhbm5vdGF0aW9ucy5wdXNoKGFubm90YXRpb24pO1xuICB9XG4gIHJldHVybiBhbm5vdGF0aW9ucztcbn07XG5cbnZhciBJRF9SRUdFWFAgPSAvW2EtekEtWl8wLTl7XFwqXFwvXFw8XFw+XFw9XFwhXFwkXFwuXFwtXFx1MDBBMi1cXHVGRkZGXS87XG5cbmV4cG9ydCBmdW5jdGlvbiBkb0dldENvbXBsZXRpb25zKFxuICBwcmV2SWRlbnRpZmllcjogc3RyaW5nLFxuICBwcmVmaXg6IHN0cmluZyxcbiAgY29uZmlnOiB7IHF1ZXN0aW9uOiBTdXJ2ZXkuUXVlc3Rpb247IHF1ZXN0aW9uczogU3VydmV5LlF1ZXN0aW9uW10gfSxcbiAgY29tcGxldGVyID0gbnVsbFxuKSB7XG4gIHZhciBjb21wbGV0aW9ucyA9IFtdO1xuICB2YXIgY3VycmVudFF1ZXN0aW9uOiBTdXJ2ZXkuUXVlc3Rpb24gPSBjb25maWcucXVlc3Rpb247XG4gIHZhciB1c2FibGVRdWVzdGlvbnMgPSAoY29uZmlnLnF1ZXN0aW9ucyB8fCBbXSkuZmlsdGVyKFxuICAgIHEgPT4gcSAhPT0gY3VycmVudFF1ZXN0aW9uXG4gICk7XG4gIGlmIChcbiAgICAhIXVzYWJsZVF1ZXN0aW9ucyB8fFxuICAgIGN1cnJlbnRRdWVzdGlvbiBpbnN0YW5jZW9mIFN1cnZleS5NYXRyaXhEcm9wZG93bkNvbHVtbiB8fFxuICAgIGN1cnJlbnRRdWVzdGlvbi5kYXRhIGluc3RhbmNlb2YgU3VydmV5LlF1ZXN0aW9uUGFuZWxEeW5hbWljSXRlbVxuICApIHtcbiAgICBpZiAoXG4gICAgICBwcmV2SWRlbnRpZmllciA9PT0gXCJyb3dcIiAmJlxuICAgICAgY3VycmVudFF1ZXN0aW9uIGluc3RhbmNlb2YgU3VydmV5Lk1hdHJpeERyb3Bkb3duQ29sdW1uXG4gICAgKSB7XG4gICAgICBjb21wbGV0aW9ucyA9IGN1cnJlbnRRdWVzdGlvbi5jb2xPd25lcltcImNvbHVtbnNcIl1cbiAgICAgICAgLmZpbHRlcihlID0+IGUubmFtZSAhPT0gY3VycmVudFF1ZXN0aW9uLm5hbWUpXG4gICAgICAgIC5tYXAoY29sdW1uID0+IHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbmFtZTogXCJcIixcbiAgICAgICAgICAgIHZhbHVlOiBcIntyb3cuXCIgKyBjb2x1bW4ubmFtZSArIFwifVwiLFxuICAgICAgICAgICAgc29tZTogXCJcIixcbiAgICAgICAgICAgIG1ldGE6IGNvbHVtbi50aXRsZSxcbiAgICAgICAgICAgIGlkZW50aWZpZXJSZWdleDogSURfUkVHRVhQXG4gICAgICAgICAgfTtcbiAgICAgICAgfSk7XG4gICAgfSBlbHNlIGlmIChcbiAgICAgIHByZXZJZGVudGlmaWVyID09PSBcInBhbmVsXCIgJiZcbiAgICAgIGN1cnJlbnRRdWVzdGlvbi5kYXRhIGluc3RhbmNlb2YgU3VydmV5LlF1ZXN0aW9uUGFuZWxEeW5hbWljSXRlbVxuICAgICkge1xuICAgICAgdmFyIHBhbmVsOiBTdXJ2ZXkuUGFuZWxNb2RlbCA9IGN1cnJlbnRRdWVzdGlvbi5kYXRhLnBhbmVsO1xuICAgICAgY29tcGxldGlvbnMgPSBwYW5lbC5lbGVtZW50c1xuICAgICAgICAuZmlsdGVyKGUgPT4gZS5uYW1lICE9PSBjdXJyZW50UXVlc3Rpb24ubmFtZSlcbiAgICAgICAgLm1hcChlbGVtZW50ID0+IHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbmFtZTogXCJcIixcbiAgICAgICAgICAgIHZhbHVlOiBcIntwYW5lbC5cIiArIGVsZW1lbnQubmFtZSArIFwifVwiLFxuICAgICAgICAgICAgc29tZTogXCJcIixcbiAgICAgICAgICAgIG1ldGE6IGVsZW1lbnQubmFtZSxcbiAgICAgICAgICAgIGlkZW50aWZpZXJSZWdleDogSURfUkVHRVhQXG4gICAgICAgICAgfTtcbiAgICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBvcGVyYXRpb25zRmlsdGVyZWQgPSBvcGVyYXRpb25zLmZpbHRlcihcbiAgICAgICAgb3AgPT4gIXByZWZpeCB8fCBvcC52YWx1ZS5pbmRleE9mKHByZWZpeCkgIT09IC0xXG4gICAgICApO1xuICAgICAgdmFyIHF1ZXN0aW9uc0ZpbHRlcmVkID0gdXNhYmxlUXVlc3Rpb25zLmZpbHRlcihcbiAgICAgICAgb3AgPT4gIXByZWZpeCB8fCBvcC5uYW1lLmluZGV4T2YocHJlZml4KSAhPT0gLTFcbiAgICAgICk7XG4gICAgICBpZiAoY3VycmVudFF1ZXN0aW9uIGluc3RhbmNlb2YgU3VydmV5Lk1hdHJpeERyb3Bkb3duQ29sdW1uKSB7XG4gICAgICAgIGNvbXBsZXRpb25zLnB1c2goe1xuICAgICAgICAgIG5hbWU6IFwiXCIsXG4gICAgICAgICAgdmFsdWU6IFwie3Jvdy5cIixcbiAgICAgICAgICBzb21lOiBcIlwiLFxuICAgICAgICAgIG1ldGE6IGVkaXRvckxvY2FsaXphdGlvbi5lZGl0b3JMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKFxuICAgICAgICAgICAgZWRpdG9yTG9jYWxpemF0aW9uLmRlZmF1bHRTdHJpbmdzLnBlLmFjZUVkaXRvclJvd1RpdGxlXG4gICAgICAgICAgKSxcbiAgICAgICAgICBpZGVudGlmaWVyUmVnZXg6IElEX1JFR0VYUFxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICEhY3VycmVudFF1ZXN0aW9uICYmXG4gICAgICAgIGN1cnJlbnRRdWVzdGlvbi5kYXRhIGluc3RhbmNlb2YgU3VydmV5LlF1ZXN0aW9uUGFuZWxEeW5hbWljSXRlbVxuICAgICAgKSB7XG4gICAgICAgIGNvbXBsZXRpb25zLnB1c2goe1xuICAgICAgICAgIG5hbWU6IFwiXCIsXG4gICAgICAgICAgdmFsdWU6IFwie3BhbmVsLlwiLFxuICAgICAgICAgIHNvbWU6IFwiXCIsXG4gICAgICAgICAgbWV0YTogZWRpdG9yTG9jYWxpemF0aW9uLmVkaXRvckxvY2FsaXphdGlvbi5nZXRTdHJpbmcoXG4gICAgICAgICAgICBlZGl0b3JMb2NhbGl6YXRpb24uZGVmYXVsdFN0cmluZ3MucGUuYWNlRWRpdG9yUGFuZWxUaXRsZVxuICAgICAgICAgICksXG4gICAgICAgICAgaWRlbnRpZmllclJlZ2V4OiBJRF9SRUdFWFBcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBjb21wbGV0aW9ucyA9IGNvbXBsZXRpb25zXG4gICAgICAgIC5jb25jYXQoXG4gICAgICAgICAgcXVlc3Rpb25zRmlsdGVyZWQubWFwKHEgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgY29tcGxldGVyOiBjb21wbGV0ZXIsXG4gICAgICAgICAgICAgIG5hbWU6IFwiXCIsXG4gICAgICAgICAgICAgIHZhbHVlOiBcIntcIiArIHEubmFtZSArIFwifVwiLFxuICAgICAgICAgICAgICBzb21lOiBcIlwiLFxuICAgICAgICAgICAgICBtZXRhOiBxLnRpdGxlLFxuICAgICAgICAgICAgICBpZGVudGlmaWVyUmVnZXg6IElEX1JFR0VYUFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICAgIC5jb25jYXQoXG4gICAgICAgICAgb3BlcmF0aW9uc0ZpbHRlcmVkLm1hcChvcCA9PiB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBuYW1lOiBcIlwiLFxuICAgICAgICAgICAgICB2YWx1ZTogb3AudmFsdWUsXG4gICAgICAgICAgICAgIHNvbWU6IFwiXCIsXG4gICAgICAgICAgICAgIG1ldGE6IG9wLnRpdGxlLFxuICAgICAgICAgICAgICBpZGVudGlmaWVyUmVnZXg6IElEX1JFR0VYUFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgIH1cbiAgfVxuICByZXR1cm4gY29tcGxldGlvbnM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbnNlcnRNYXRjaChlZGl0b3IsIGRhdGEpIHtcbiAgaWYgKGVkaXRvci5jb21wbGV0ZXIuY29tcGxldGlvbnMuZmlsdGVyVGV4dCkge1xuICAgIHZhciBhbGxSYW5nZXMgPSBlZGl0b3Iuc2VsZWN0aW9uLmdldEFsbFJhbmdlcygpO1xuICAgIGZvciAoXG4gICAgICB2YXIgcmFuZ2VJbmRleCA9IDAsIHJhbmdlO1xuICAgICAgKHJhbmdlID0gYWxsUmFuZ2VzW3JhbmdlSW5kZXhdKTtcbiAgICAgIHJhbmdlSW5kZXgrK1xuICAgICkge1xuICAgICAgcmFuZ2Uuc3RhcnQuY29sdW1uIC09IGVkaXRvci5jb21wbGV0ZXIuY29tcGxldGlvbnMuZmlsdGVyVGV4dC5sZW5ndGg7XG4gICAgICB2YXIgcmFuZ2VUZXh0ID0gZWRpdG9yLnNlc3Npb24uZ2V0VGV4dFJhbmdlKHJhbmdlKTtcbiAgICAgIGlmIChyYW5nZVRleHQuaW5kZXhPZihcIntcIikgIT09IDApIHtcbiAgICAgICAgdmFyIGV4dFJhbmdlID0gcmFuZ2UuY2xvbmUoKTtcbiAgICAgICAgZXh0UmFuZ2Uuc3RhcnQuY29sdW1uLS07XG4gICAgICAgIGlmIChlZGl0b3Iuc2Vzc2lvbi5nZXRUZXh0UmFuZ2UoZXh0UmFuZ2UpLmluZGV4T2YoXCJ7XCIpID09PSAwKSB7XG4gICAgICAgICAgcmFuZ2UgPSBleHRSYW5nZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZWRpdG9yLnNlc3Npb24ucmVtb3ZlKHJhbmdlKTtcbiAgICB9XG4gIH1cbiAgZWRpdG9yLmV4ZWNDb21tYW5kKFwiaW5zZXJ0c3RyaW5nXCIsIGRhdGEudmFsdWUgfHwgZGF0YSk7XG59XG5cbmtvLmJpbmRpbmdIYW5kbGVycy5hY2VFZGl0b3IgPSB7XG4gIGluaXQ6IGZ1bmN0aW9uKGVsZW1lbnQsIG9wdGlvbnMpIHtcbiAgICB2YXIgY29uZmlncyA9IG9wdGlvbnMoKTtcbiAgICB2YXIgbGFuZ1Rvb2xzID0gYWNlLnJlcXVpcmUoXCJhY2UvZXh0L2xhbmd1YWdlX3Rvb2xzXCIpO1xuICAgIHZhciBsYW5nVXRpbHMgPSBhY2UucmVxdWlyZShcImFjZS9hdXRvY29tcGxldGUvdXRpbFwiKTtcbiAgICB2YXIgZWRpdG9yID0gYWNlLmVkaXQoZWxlbWVudCk7XG4gICAgdmFyIG9iamVjdEVkaXRvcjogU3VydmV5UHJvcGVydHlDb25kaXRpb25FZGl0b3IgPSBjb25maWdzLmVkaXRvcjtcbiAgICB2YXIgaXNVcGRhdGluZyA9IGZhbHNlO1xuXG4gICAgZWRpdG9yLnNldE9wdGlvbihcInVzZVdvcmtlclwiLCBmYWxzZSk7XG5cbiAgICBlZGl0b3IuZ2V0U2Vzc2lvbigpLm9uKFwiY2hhbmdlXCIsIGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIGVycm9ycyA9IGNyZWF0ZUFubm90YXRpb25zKFxuICAgICAgICBlZGl0b3IuZ2V0VmFsdWUoKSxcbiAgICAgICAgb2JqZWN0RWRpdG9yLnN5bnRheENoZWNrTWV0aG9kTmFtZVxuICAgICAgKTtcbiAgICAgIGlzVXBkYXRpbmcgPSB0cnVlO1xuICAgICAgb2JqZWN0RWRpdG9yLmtvVGV4dFZhbHVlKGVkaXRvci5nZXRWYWx1ZSgpKTtcbiAgICAgIGlzVXBkYXRpbmcgPSBmYWxzZTtcbiAgICAgIC8vICAgb2JqZWN0RWRpdG9yLmtvSGFzRXJyb3IoZXJyb3JzLmxlbmd0aCA+IDApO1xuICAgICAgLy8gICBpZiAoZXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgICAgIC8vICAgICBvYmplY3RFZGl0b3Iua29FcnJvclRleHQoZXJyb3JzWzBdLnRleHQpO1xuICAgICAgLy8gICB9XG4gICAgICBlZGl0b3IuZ2V0U2Vzc2lvbigpLnNldEFubm90YXRpb25zKGVycm9ycyk7XG4gICAgfSk7XG4gICAgZWRpdG9yLm9uKFwiZm9jdXNcIiwgZnVuY3Rpb24oKSB7XG4gICAgICBlZGl0b3Iuc2V0UmVhZE9ubHkob2JqZWN0RWRpdG9yLnJlYWRPbmx5KCkpO1xuICAgIH0pO1xuICAgIHZhciB1cGRhdGVDYWxsYmFjayA9ICgpID0+IHtcbiAgICAgIGlmICghaXNVcGRhdGluZykge1xuICAgICAgICBlZGl0b3Iuc2V0VmFsdWUob2JqZWN0RWRpdG9yLmtvVGV4dFZhbHVlKCkgfHwgXCJcIik7XG4gICAgICB9XG4gICAgfTtcbiAgICB2YXIgdmFsdWVTdWJzY3JpcHRpb24gPSBvYmplY3RFZGl0b3Iua29UZXh0VmFsdWUuc3Vic2NyaWJlKHVwZGF0ZUNhbGxiYWNrKTtcbiAgICB1cGRhdGVDYWxsYmFjaygpO1xuXG4gICAgdmFyIGNvbXBsZXRlciA9IHtcbiAgICAgIGlkZW50aWZpZXJSZWdleHBzOiBbSURfUkVHRVhQXSxcbiAgICAgIGluc2VydE1hdGNoOiBpbnNlcnRNYXRjaCxcbiAgICAgIGdldENvbXBsZXRpb25zOiAoZWRpdG9yLCBzZXNzaW9uLCBwb3MsIHByZWZpeCwgY2FsbGJhY2spID0+IHtcbiAgICAgICAgdmFyIHByZXZJZGVudGlmaWVyID0gbGFuZ1V0aWxzLnJldHJpZXZlUHJlY2VkaW5nSWRlbnRpZmllcihcbiAgICAgICAgICBzZXNzaW9uLmdldExpbmUocG9zLnJvdyksXG4gICAgICAgICAgcG9zLmNvbHVtbiAtIDFcbiAgICAgICAgKTtcbiAgICAgICAgdmFyIGNvbXBsZXRpb25zID0gZG9HZXRDb21wbGV0aW9ucyhcbiAgICAgICAgICBwcmV2SWRlbnRpZmllcixcbiAgICAgICAgICBwcmVmaXgsXG4gICAgICAgICAgY29uZmlncyxcbiAgICAgICAgICBjb21wbGV0ZXJcbiAgICAgICAgKTtcbiAgICAgICAgY2FsbGJhY2sobnVsbCwgY29tcGxldGlvbnMpO1xuICAgICAgfSxcbiAgICAgIGdldERvY1Rvb2x0aXA6IGZ1bmN0aW9uKGl0ZW0pIHtcbiAgICAgICAgaXRlbS5kb2NIVE1MID1cbiAgICAgICAgICBcIjxkaXYgc3R5bGU9J21heC13aWR0aDogMzAwcHg7IHdoaXRlLXNwYWNlOiBub3JtYWw7Jz5cIiArXG4gICAgICAgICAgaXRlbS5tZXRhICtcbiAgICAgICAgICBcIjwvZGl2PlwiO1xuICAgICAgfVxuICAgIH07XG4gICAgbGFuZ1Rvb2xzLnNldENvbXBsZXRlcnMoW2NvbXBsZXRlcl0pO1xuICAgIGVkaXRvci5zZXRPcHRpb25zKHtcbiAgICAgIGVuYWJsZUJhc2ljQXV0b2NvbXBsZXRpb246IHRydWUsXG4gICAgICBlbmFibGVMaXZlQXV0b2NvbXBsZXRpb246IHRydWVcbiAgICB9KTtcblxuICAgIGtvLnV0aWxzLmRvbU5vZGVEaXNwb3NhbC5hZGREaXNwb3NlQ2FsbGJhY2soZWxlbWVudCwgZnVuY3Rpb24oKSB7XG4gICAgICBlZGl0b3IuZGVzdHJveSgpO1xuICAgICAgdmFsdWVTdWJzY3JpcHRpb24uZGlzcG9zZSgpO1xuICAgIH0pO1xuXG4gICAgZWRpdG9yLmZvY3VzKCk7XG4gIH1cbn07XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvcHJvcGVydHlFZGl0b3JzL3Byb3BlcnR5Q29uZGl0aW9uRWRpdG9yLnRzIiwiaW1wb3J0ICogYXMgU3VydmV5IGZyb20gXCJzdXJ2ZXkta25vY2tvdXRcIjtcbmltcG9ydCAqIGFzIGtvIGZyb20gXCJrbm9ja291dFwiO1xuXG5leHBvcnQgY2xhc3MgU3R5bGVzTWFuYWdlciB7XG4gIHByaXZhdGUgc3RhdGljIFN1cnZleUpTU3R5bGVzU2hlZXRJZCA9IFwic3VydmV5anNcIjtcblxuICBwdWJsaWMgc3RhdGljIFN0eWxlczogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSA9IHt9O1xuXG4gIHB1YmxpYyBzdGF0aWMgVGhlbWVDb2xvcnM6IHsgW2tleTogc3RyaW5nXTogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSB9ID0ge1xuICAgIGRlZmF1bHQ6IHtcbiAgICAgIFwiJHByaW1hcnktY29sb3JcIjogXCIjMWFiMzk0XCIsXG4gICAgICBcIiRzZWNvbmRhcnktY29sb3JcIjogXCIjMWFiMzk0XCIsXG4gICAgICBcIiRwcmltYXJ5LXRleHQtY29sb3JcIjogXCIjNjc2YTZjXCIsXG4gICAgICBcIiRzZWNvbmRhcnktdGV4dC1jb2xvclwiOiBcIiNhN2E3YTdcIixcbiAgICAgIFwiJGludmVydGVkLXRleHQtY29sb3JcIjogXCIjZmZmZmZmXCIsXG4gICAgICBcIiRwcmltYXJ5LWhvdmVyLWNvbG9yXCI6IFwiIzE4YTY4OVwiLFxuICAgICAgXCIkc2VsZWN0aW9uLWJvcmRlci1jb2xvclwiOiBcIiMxYWIzOTRcIixcbiAgICAgIFwiJHByaW1hcnktaWNvbi1jb2xvclwiOiBcIiMzZDRkNWRcIixcbiAgICAgIFwiJHByaW1hcnktYmctY29sb3JcIjogXCIjZmZmXCIsXG4gICAgICBcIiRzZWNvbmRhcnktYmctY29sb3JcIjogXCIjZjRmNGY0XCIsXG4gICAgICBcIiRwcmltYXJ5LWJvcmRlci1jb2xvclwiOiBcIiNlN2VhZWNcIixcbiAgICAgIFwiJHNlY29uZGFyeS1ib3JkZXItY29sb3JcIjogXCIjZGRkXCJcbiAgICB9LFxuICAgIG9yYW5nZToge1xuICAgICAgXCIkcHJpbWFyeS1jb2xvclwiOiBcIiNmNzgxMTlcIixcbiAgICAgIFwiJHNlY29uZGFyeS1jb2xvclwiOiBcIiM0YTRhNGFcIixcbiAgICAgIFwiJHByaW1hcnktdGV4dC1jb2xvclwiOiBcIiM2NzZhNmNcIixcbiAgICAgIFwiJHNlY29uZGFyeS10ZXh0LWNvbG9yXCI6IFwiI2E3YTdhN1wiLFxuICAgICAgXCIkaW52ZXJ0ZWQtdGV4dC1jb2xvclwiOiBcIiNmZmZmZmZcIixcbiAgICAgIFwiJHByaW1hcnktaG92ZXItY29sb3JcIjogXCIjZTc3MTA5XCIsXG4gICAgICBcIiRzZWxlY3Rpb24tYm9yZGVyLWNvbG9yXCI6IFwiIzRhNGE0YVwiLFxuICAgICAgXCIkcHJpbWFyeS1pY29uLWNvbG9yXCI6IFwiIzNkNGQ1ZFwiLFxuICAgICAgXCIkcHJpbWFyeS1iZy1jb2xvclwiOiBcIiNmZmZcIixcbiAgICAgIFwiJHNlY29uZGFyeS1iZy1jb2xvclwiOiBcIiNmNGY0ZjRcIixcbiAgICAgIFwiJHByaW1hcnktYm9yZGVyLWNvbG9yXCI6IFwiI2U3ZWFlY1wiLFxuICAgICAgXCIkc2Vjb25kYXJ5LWJvcmRlci1jb2xvclwiOiBcIiNkZGRcIlxuICAgIH0sXG4gICAgZGFya2JsdWU6IHtcbiAgICAgIFwiJHByaW1hcnktY29sb3JcIjogXCIjM2M0ZjZkXCIsXG4gICAgICBcIiRzZWNvbmRhcnktY29sb3JcIjogXCIjM2M0ZjZkXCIsXG4gICAgICBcIiRwcmltYXJ5LXRleHQtY29sb3JcIjogXCIjNjc2YTZjXCIsXG4gICAgICBcIiRzZWNvbmRhcnktdGV4dC1jb2xvclwiOiBcIiNhN2E3YTdcIixcbiAgICAgIFwiJGludmVydGVkLXRleHQtY29sb3JcIjogXCIjZmZmZmZmXCIsXG4gICAgICBcIiRwcmltYXJ5LWhvdmVyLWNvbG9yXCI6IFwiIzJjM2Y1ZFwiLFxuICAgICAgXCIkc2VsZWN0aW9uLWJvcmRlci1jb2xvclwiOiBcIiM0YTRhNGFcIixcbiAgICAgIFwiJHByaW1hcnktaWNvbi1jb2xvclwiOiBcIiMzZDRkNWRcIixcbiAgICAgIFwiJHByaW1hcnktYmctY29sb3JcIjogXCIjZmZmXCIsXG4gICAgICBcIiRzZWNvbmRhcnktYmctY29sb3JcIjogXCIjZjRmNGY0XCIsXG4gICAgICBcIiRwcmltYXJ5LWJvcmRlci1jb2xvclwiOiBcIiNlN2VhZWNcIixcbiAgICAgIFwiJHNlY29uZGFyeS1ib3JkZXItY29sb3JcIjogXCIjZGRkXCJcbiAgICB9LFxuICAgIGRhcmtyb3NlOiB7XG4gICAgICBcIiRwcmltYXJ5LWNvbG9yXCI6IFwiIzY4NjU2ZVwiLFxuICAgICAgXCIkc2Vjb25kYXJ5LWNvbG9yXCI6IFwiIzY4NjU2ZVwiLFxuICAgICAgXCIkcHJpbWFyeS10ZXh0LWNvbG9yXCI6IFwiIzY3NmE2Y1wiLFxuICAgICAgXCIkc2Vjb25kYXJ5LXRleHQtY29sb3JcIjogXCIjYTdhN2E3XCIsXG4gICAgICBcIiRpbnZlcnRlZC10ZXh0LWNvbG9yXCI6IFwiI2ZmZmZmZlwiLFxuICAgICAgXCIkcHJpbWFyeS1ob3Zlci1jb2xvclwiOiBcIiM1NzU0NWVcIixcbiAgICAgIFwiJHNlbGVjdGlvbi1ib3JkZXItY29sb3JcIjogXCIjNGE0YTRhXCIsXG4gICAgICBcIiRwcmltYXJ5LWljb24tY29sb3JcIjogXCIjM2Q0ZDVkXCIsXG4gICAgICBcIiRwcmltYXJ5LWJnLWNvbG9yXCI6IFwiI2ZmZlwiLFxuICAgICAgXCIkc2Vjb25kYXJ5LWJnLWNvbG9yXCI6IFwiI2Y0ZjRmNFwiLFxuICAgICAgXCIkcHJpbWFyeS1ib3JkZXItY29sb3JcIjogXCIjZTdlYWVjXCIsXG4gICAgICBcIiRzZWNvbmRhcnktYm9yZGVyLWNvbG9yXCI6IFwiI2RkZFwiXG4gICAgfSxcbiAgICBzdG9uZToge1xuICAgICAgXCIkcHJpbWFyeS1jb2xvclwiOiBcIiMwZjBmMzNcIixcbiAgICAgIFwiJHNlY29uZGFyeS1jb2xvclwiOiBcIiMwZjBmMzNcIixcbiAgICAgIFwiJHByaW1hcnktdGV4dC1jb2xvclwiOiBcIiM2NzZhNmNcIixcbiAgICAgIFwiJHNlY29uZGFyeS10ZXh0LWNvbG9yXCI6IFwiI2E3YTdhN1wiLFxuICAgICAgXCIkaW52ZXJ0ZWQtdGV4dC1jb2xvclwiOiBcIiNmZmZmZmZcIixcbiAgICAgIFwiJHByaW1hcnktaG92ZXItY29sb3JcIjogXCIjMDAwMDIzXCIsXG4gICAgICBcIiRzZWxlY3Rpb24tYm9yZGVyLWNvbG9yXCI6IFwiI2NkY2NkMlwiLFxuICAgICAgXCIkcHJpbWFyeS1pY29uLWNvbG9yXCI6IFwiIzNkNGQ1ZFwiLFxuICAgICAgXCIkcHJpbWFyeS1iZy1jb2xvclwiOiBcIiNmZmZcIixcbiAgICAgIFwiJHNlY29uZGFyeS1iZy1jb2xvclwiOiBcIiNmNGY0ZjRcIixcbiAgICAgIFwiJHByaW1hcnktYm9yZGVyLWNvbG9yXCI6IFwiI2U3ZWFlY1wiLFxuICAgICAgXCIkc2Vjb25kYXJ5LWJvcmRlci1jb2xvclwiOiBcIiNkZGRcIlxuICAgIH0sXG4gICAgd2ludGVyOiB7XG4gICAgICBcIiRwcmltYXJ5LWNvbG9yXCI6IFwiIzVhYzhmYVwiLFxuICAgICAgXCIkc2Vjb25kYXJ5LWNvbG9yXCI6IFwiIzVhYzhmYVwiLFxuICAgICAgXCIkcHJpbWFyeS10ZXh0LWNvbG9yXCI6IFwiIzY3NmE2Y1wiLFxuICAgICAgXCIkc2Vjb25kYXJ5LXRleHQtY29sb3JcIjogXCIjYTdhN2E3XCIsXG4gICAgICBcIiRpbnZlcnRlZC10ZXh0LWNvbG9yXCI6IFwiI2ZmZmZmZlwiLFxuICAgICAgXCIkcHJpbWFyeS1ob3Zlci1jb2xvclwiOiBcIiM0YWQ4ZWFcIixcbiAgICAgIFwiJHNlbGVjdGlvbi1ib3JkZXItY29sb3JcIjogXCIjODJiOGRhXCIsXG4gICAgICBcIiRwcmltYXJ5LWljb24tY29sb3JcIjogXCIjM2Q0ZDVkXCIsXG4gICAgICBcIiRwcmltYXJ5LWJnLWNvbG9yXCI6IFwiI2ZmZlwiLFxuICAgICAgXCIkc2Vjb25kYXJ5LWJnLWNvbG9yXCI6IFwiI2Y0ZjRmNFwiLFxuICAgICAgXCIkcHJpbWFyeS1ib3JkZXItY29sb3JcIjogXCIjZTdlYWVjXCIsXG4gICAgICBcIiRzZWNvbmRhcnktYm9yZGVyLWNvbG9yXCI6IFwiI2RkZFwiXG4gICAgfSxcbiAgICB3aW50ZXJzdG9uZToge1xuICAgICAgXCIkcHJpbWFyeS1jb2xvclwiOiBcIiMzYzNiNDBcIixcbiAgICAgIFwiJHNlY29uZGFyeS1jb2xvclwiOiBcIiMzYzNiNDBcIixcbiAgICAgIFwiJHByaW1hcnktdGV4dC1jb2xvclwiOiBcIiM2NzZhNmNcIixcbiAgICAgIFwiJHNlY29uZGFyeS10ZXh0LWNvbG9yXCI6IFwiI2E3YTdhN1wiLFxuICAgICAgXCIkaW52ZXJ0ZWQtdGV4dC1jb2xvclwiOiBcIiNmZmZmZmZcIixcbiAgICAgIFwiJHByaW1hcnktaG92ZXItY29sb3JcIjogXCIjMWMxYjIwXCIsXG4gICAgICBcIiRzZWxlY3Rpb24tYm9yZGVyLWNvbG9yXCI6IFwiI2I4YjhiOFwiLFxuICAgICAgXCIkcHJpbWFyeS1pY29uLWNvbG9yXCI6IFwiIzNkNGQ1ZFwiLFxuICAgICAgXCIkcHJpbWFyeS1iZy1jb2xvclwiOiBcIiNmZmZcIixcbiAgICAgIFwiJHNlY29uZGFyeS1iZy1jb2xvclwiOiBcIiNmNGY0ZjRcIixcbiAgICAgIFwiJHByaW1hcnktYm9yZGVyLWNvbG9yXCI6IFwiI2U3ZWFlY1wiLFxuICAgICAgXCIkc2Vjb25kYXJ5LWJvcmRlci1jb2xvclwiOiBcIiNkZGRcIlxuICAgIH1cbiAgfTtcbiAgcHVibGljIHN0YXRpYyBUaGVtZUNzczogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSA9IHtcbiAgICBcIi5zdmRfY29udGFpbmVyXCI6IFwiY29sb3I6ICRwcmltYXJ5LXRleHQtY29sb3I7XCIsXG4gICAgXCIuc3ZkX2NvbnRhaW5lciBhOmZvY3VzLCAuc3ZkX2NvbnRhaW5lciBzZWxlY3Q6Zm9jdXMsIC5zdmRfY29udGFpbmVyIHNwYW46Zm9jdXMsIC5zdmRfY29udGFpbmVyIGRpdjpmb2N1cywgLnN2ZF9jb250YWluZXIgdHI6Zm9jdXMsIC5zdmRfY29udGFpbmVyIGlucHV0W3R5cGU9J2NoZWNrYm94J106Zm9jdXMgKyBzcGFuLmNoZWNrbWFya1wiOlxuICAgICAgXCJvdXRsaW5lLWNvbG9yOiAkcHJpbWFyeS1jb2xvcjtcIixcbiAgICBcIi5zdmRfY29udGFpbmVyIC5zdmRfdG9vbGJhciBidXR0b246Zm9jdXNcIjpcbiAgICAgIFwib3V0bGluZS1jb2xvcjogJHByaW1hcnktdGV4dC1jb2xvcjtcIixcblxuICAgIFwiLnN2ZF9jb250YWluZXIgYVwiOiBcImNvbG9yOiAkcHJpbWFyeS1jb2xvcjtcIixcbiAgICBcIi5zdmRfY29udGFpbmVyIGE6aG92ZXJcIjogXCJjb2xvcjogJHByaW1hcnktaG92ZXItY29sb3I7XCIsXG4gICAgXCIuc3ZkX2NvbnRhaW5lciAuc3ZkLW1haW4tY29sb3JcIjogXCJjb2xvcjogJHByaW1hcnktY29sb3I7XCIsXG4gICAgXCIuc3ZkX2NvbnRhaW5lciAuc3ZkLW1haW4tYm9yZGVyLWNvbG9yXCI6XG4gICAgICBcImJvcmRlci1jb2xvcjogJHNlbGVjdGlvbi1ib3JkZXItY29sb3I7XCIsXG4gICAgXCIuc3ZkX2NvbnRhaW5lciAuc3ZkLW1haW4tYmFja2dyb3VuZC1jb2xvclwiOlxuICAgICAgXCJiYWNrZ3JvdW5kLWNvbG9yOiAkcHJpbWFyeS1jb2xvcjtcIixcbiAgICBcIi5zdmRfY29udGFpbmVyIC5zdmQtbGlnaHQtYmFja2dyb3VuZC1jb2xvclwiOlxuICAgICAgXCJiYWNrZ3JvdW5kLWNvbG9yOiAkcHJpbWFyeS1ib3JkZXItY29sb3I7XCIsXG5cbiAgICBcIi5zdmRfY29udGFpbmVyIC5idG4tcHJpbWFyeVwiOlxuICAgICAgXCJjb2xvcjogJGludmVydGVkLXRleHQtY29sb3I7IGJhY2tncm91bmQtY29sb3I6ICRzZWNvbmRhcnktY29sb3I7IGJvcmRlci1jb2xvcjogJHNlY29uZGFyeS1jb2xvcjtcIixcbiAgICBcIi5zdmRfY29udGFpbmVyIC5idG4tbGlua1wiOlxuICAgICAgXCJjb2xvcjogJHByaW1hcnktdGV4dC1jb2xvcjsgYmFja2dyb3VuZC1jb2xvcjogJHNlY29uZGFyeS1iZy1jb2xvcjsgYm9yZGVyLWNvbG9yOiAkc2Vjb25kYXJ5LWJnLWNvbG9yO1wiLFxuXG4gICAgXCIuc3ZkX2NvbnRhaW5lciAuc3ZkLXN2Zy1pY29uXCI6IFwiZmlsbDogJHByaW1hcnktaWNvbi1jb2xvcjtcIixcbiAgICBcIi5zdmRfY29udGFpbmVyIC5pY29uLXdoaXRlIC5zdmQtc3ZnLWljb25cIjogXCJmaWxsOiAkcHJpbWFyeS1iZy1jb2xvcjtcIixcbiAgICBcIi5zdmRfY29udGFpbmVyIC5zdmQtcHJpbWFyeS1pY29uIC5zdmQtc3ZnLWljb25cIjogXCJmaWxsOiAkcHJpbWFyeS1jb2xvcjtcIixcbiAgICBcIi5zdmRfY29udGFpbmVyIC5zdmQtc2Vjb25kYXJ5LWljb24gLnN2ZC1zdmctaWNvblwiOlxuICAgICAgXCJmaWxsOiAkc2Vjb25kYXJ5LWNvbG9yO1wiLFxuICAgIFwiLnN2ZF9jb250YWluZXIgLmljb24tZ2VhcmFjdGl2ZSAuc3ZkLXN2Zy1pY29uXCI6IFwiZmlsbDogJHByaW1hcnktY29sb3I7XCIsXG4gICAgXCIuc3ZkX2NvbnRhaW5lciAubmF2LXRhYnMgYVwiOiBcImNvbG9yOiAkcHJpbWFyeS10ZXh0LWNvbG9yXCIsXG4gICAgXCIuc3ZkX2NvbnRhaW5lciAubmF2LXRhYnMgPiBsaS5hY3RpdmUgPiBhXCI6IFwiY29sb3I6ICRwcmltYXJ5LWNvbG9yXCIsXG4gICAgXCIuc3ZkX2NvbnRhaW5lciAubmF2LWl0ZW0uYWN0aXZlIC5uYXYtbGlua1wiOlxuICAgICAgXCJiYWNrZ3JvdW5kLWNvbG9yOiAkcHJpbWFyeS1iZy1jb2xvcjtcIixcblxuICAgIFwiLnN2ZF9jb250YWluZXIgLnNqcy1jYi1jb250YWluZXI6aG92ZXIgaW5wdXQgfiAuY2hlY2ttYXJrXCI6XG4gICAgICBcImJhY2tncm91bmQtY29sb3I6ICRkZC1tZW51LWJvcmRlclwiLFxuICAgIFwiLnN2ZF9jb250YWluZXIgLnNqcy1jYi1jb250YWluZXI6aG92ZXIgaW5wdXQ6Y2hlY2tlZCB+IC5jaGVja21hcmtcIjpcbiAgICAgIFwiYmFja2dyb3VuZC1jb2xvcjogJHByaW1hcnktaG92ZXItY29sb3JcIixcblxuICAgIFwiLnN2ZF9jb250YWluZXIgLnN2ZF9jdXN0b21fc2VsZWN0OmJlZm9yZVwiOlxuICAgICAgXCJiYWNrZ3JvdW5kLWNvbG9yOiAkcHJpbWFyeS1jb2xvcjtcIixcbiAgICBcIi5zdmRfY29udGFpbmVyIC5mb3JtLWNvbnRyb2w6Zm9jdXNcIjogXCJib3JkZXItY29sb3I6ICRwcmltYXJ5LWNvbG9yO1wiLFxuXG4gICAgXCIuc3ZkX2NvbnRhaW5lciAuc3ZkLWxpZ2h0LXRleHQtY29sb3JcIjogXCJjb2xvcjogJHNlY29uZGFyeS10ZXh0LWNvbG9yO1wiLFxuXG4gICAgXCIuc3ZkLWxpZ2h0LWJnLWNvbG9yXCI6IFwiYmFja2dyb3VuZC1jb2xvcjogJHByaW1hcnktYmctY29sb3I7XCIsXG4gICAgXCIuc3ZkX2NvbnRhaW5lciAuc3ZkLWxpZ2h0LWJnLWNvbG9yXCI6XG4gICAgICBcImJhY2tncm91bmQtY29sb3I6ICRwcmltYXJ5LWJnLWNvbG9yO1wiLFxuXG4gICAgXCIuc3ZkX2NvbnRhaW5lciAuc3ZkX3Rvb2xiYXIgbGkuYWN0aXZlIGFcIjpcbiAgICAgIFwiYmFja2dyb3VuZC1jb2xvcjogJHByaW1hcnktY29sb3I7IGNvbG9yOiAkcHJpbWFyeS1iZy1jb2xvcjtcIixcblxuICAgIFwiLnN2ZF9jb250YWluZXIgLnN2ZF9zZWxlY3RlZF9wYWdlXCI6XG4gICAgICBcImJvcmRlci1ib3R0b206IDFweCBzb2xpZCAkcHJpbWFyeS1iZy1jb2xvcjtcIixcblxuICAgIFwiLnN2ZF9jb250YWluZXIgLmVkaXRvci10YWJzID4gbGkgPiBhOmhvdmVyXCI6XG4gICAgICBcImJhY2tncm91bmQtY29sb3I6ICRzZWNvbmRhcnktYmctY29sb3I7IGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAkc2Vjb25kYXJ5LWJnLWNvbG9yO1wiLFxuICAgIFwiLnN2ZF9jb250YWluZXIgLmVkaXRvci10YWJzID4gbGkgPiBhOmZvY3VzXCI6XG4gICAgICBcImJhY2tncm91bmQtY29sb3I6ICRzZWNvbmRhcnktYmctY29sb3I7IGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAkc2Vjb25kYXJ5LWJnLWNvbG9yO1wiLFxuICAgIFwiLnN2ZF9jb250YWluZXIgLmVkaXRvci10YWJzID4gbGkuYWN0aXZlID4gYVwiOlxuICAgICAgXCJjb2xvcjogJHByaW1hcnktY29sb3I7IGJhY2tncm91bmQtY29sb3I6ICRzZWNvbmRhcnktYmctY29sb3I7IGJvcmRlcjogMXB4IHNvbGlkICRwcmltYXJ5LWJvcmRlci1jb2xvcjsgYm9yZGVyLWJvdHRvbS1jb2xvcjogJHNlY29uZGFyeS1iZy1jb2xvcjtcIixcblxuICAgIFwiLnN2ZF9jb250YWluZXIgLnN2ZC1saWdodC1ib3JkZXItY29sb3JcIjpcbiAgICAgIFwiYm9yZGVyLWNvbG9yOiAkcHJpbWFyeS1ib3JkZXItY29sb3JcIixcblxuICAgIFwiLnN2ZF9jb250YWluZXIgLnN2ZC1kYXJrLWJvcmRlci1jb2xvclwiOlxuICAgICAgXCJib3JkZXItY29sb3I6ICRzZWNvbmRhcnktYm9yZGVyLWNvbG9yXCIsXG5cbiAgICBcIi5zdmRfY29udGFpbmVyIC5zZWxlY3QyLWNvbnRhaW5lci0tZGVmYXVsdC5zZWxlY3QyLWNvbnRhaW5lci0tb3BlbiAuc2VsZWN0Mi1zZWxlY3Rpb24tLXNpbmdsZSAuc2VsZWN0Mi1zZWxlY3Rpb25fX2Fycm93XCI6XG4gICAgICBcImJhY2tncm91bmQ6ICAkcHJpbWFyeS1jb2xvcjtcIixcbiAgICBcIi5zdmRfY29udGFpbmVyIC5zZWxlY3QyLWNvbnRhaW5lciAuc2VsZWN0Mi1zZWxlY3Rpb24tLXNpbmdsZSAuc2VsZWN0Mi1zZWxlY3Rpb25fX2Fycm93XCI6XG4gICAgICBcImJhY2tncm91bmQ6ICAkcHJpbWFyeS1jb2xvcjtcIixcbiAgICBcIi5zdmRfY29udGFpbmVyIC5zdmRfY3VzdG9tX3NlbGVjdFwiOiBcImJhY2tncm91bmQtY29sb3I6ICRwcmltYXJ5LWJnLWNvbG9yO1wiLFxuXG4gICAgXCIuc3ZkX2NvbnRhaW5lciAucXVlc3Rpb25fYWN0aW9ucy5zdmRfcXVlc3Rpb246aG92ZXJcIjpcbiAgICAgIFwiYm9yZGVyLXRvcDogMXB4IHNvbGlkICRwcmltYXJ5LWNvbG9yO1wiLFxuICAgIFwiLnN2ZF9jb250YWluZXIgLnBhbmVsX2FjdGlvbnMuc3ZkX3F1ZXN0aW9uOmhvdmVyXCI6XG4gICAgICBcImJvcmRlci10b3A6IDFweCBzb2xpZCAkcHJpbWFyeS1jb2xvcjtcIlxuICB9O1xuXG4gIHB1YmxpYyBzdGF0aWMgYm9vdHN0cmFwVGhlbWVDc3M6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gPSB7XG4gICAgXCIuc3ZkX2NvbnRhaW5lci5zdl9ib290c3RyYXBfY3NzXCI6IFwiY29sb3I6ICRwcmltYXJ5LXRleHQtY29sb3I7XCIsXG4gICAgXCIuc3ZkX2NvbnRhaW5lci5zdl9ib290c3RyYXBfY3NzIGE6Zm9jdXMsIC5zdmRfY29udGFpbmVyLnN2X2Jvb3RzdHJhcF9jc3Mgc2VsZWN0OmZvY3VzLCAuc3ZkX2NvbnRhaW5lci5zdl9ib290c3RyYXBfY3NzIHNwYW46Zm9jdXMsIC5zdmRfY29udGFpbmVyLnN2X2Jvb3RzdHJhcF9jc3MgZGl2OmZvY3VzLCAuc3ZkX2NvbnRhaW5lci5zdl9ib290c3RyYXBfY3NzIHRyOmZvY3VzLCAuc3ZkX2NvbnRhaW5lci5zdl9ib290c3RyYXBfY3NzIGlucHV0W3R5cGU9J2NoZWNrYm94J106Zm9jdXMgKyBzcGFuLmNoZWNrbWFya1wiOlxuICAgICAgXCJvdXRsaW5lLWNvbG9yOiAkcHJpbWFyeS1jb2xvcjtcIixcbiAgICBcIi5zdmRfY29udGFpbmVyLnN2X2Jvb3RzdHJhcF9jc3MgLnN2ZF90b29sYmFyIGJ1dHRvbjpmb2N1c1wiOlxuICAgICAgXCJvdXRsaW5lLWNvbG9yOiAkcHJpbWFyeS10ZXh0LWNvbG9yO1wiLFxuXG4gICAgXCIuc3ZkX2NvbnRhaW5lci5zdl9ib290c3RyYXBfY3NzIGFcIjogXCJjb2xvcjogJHByaW1hcnktY29sb3I7XCIsXG4gICAgXCIuc3ZkX2NvbnRhaW5lci5zdl9ib290c3RyYXBfY3NzIGE6aG92ZXJcIjogXCJjb2xvcjogJHByaW1hcnktaG92ZXItY29sb3I7XCIsXG4gICAgXCIuc3ZkX2NvbnRhaW5lci5zdl9ib290c3RyYXBfY3NzIC5zdmQtbWFpbi1jb2xvclwiOiBcImNvbG9yOiAkcHJpbWFyeS1jb2xvcjtcIixcbiAgICBcIi5zdmRfY29udGFpbmVyLnN2X2Jvb3RzdHJhcF9jc3MgLnN2ZC1tYWluLWJvcmRlci1jb2xvclwiOlxuICAgICAgXCJib3JkZXItY29sb3I6ICRzZWxlY3Rpb24tYm9yZGVyLWNvbG9yO1wiLFxuICAgIFwiLnN2ZF9jb250YWluZXIuc3ZfYm9vdHN0cmFwX2NzcyAuc3ZkLW1haW4tYmFja2dyb3VuZC1jb2xvclwiOlxuICAgICAgXCJiYWNrZ3JvdW5kLWNvbG9yOiAkcHJpbWFyeS1jb2xvcjtcIixcbiAgICBcIi5zdmRfY29udGFpbmVyLnN2X2Jvb3RzdHJhcF9jc3MgLnN2ZC1saWdodC1iYWNrZ3JvdW5kLWNvbG9yXCI6XG4gICAgICBcImJhY2tncm91bmQtY29sb3I6ICRwcmltYXJ5LWJvcmRlci1jb2xvcjtcIixcblxuICAgIFwiLnN2ZF9jb250YWluZXIuc3ZfYm9vdHN0cmFwX2NzcyAuYnRuLXByaW1hcnlcIjpcbiAgICAgIFwiY29sb3I6ICRpbnZlcnRlZC10ZXh0LWNvbG9yOyBiYWNrZ3JvdW5kLWNvbG9yOiAkc2Vjb25kYXJ5LWNvbG9yOyBib3JkZXItY29sb3I6ICRzZWNvbmRhcnktY29sb3I7XCIsXG4gICAgXCIuc3ZkX2NvbnRhaW5lci5zdl9ib290c3RyYXBfY3NzIC5idG4tbGlua1wiOlxuICAgICAgXCJjb2xvcjogJHByaW1hcnktdGV4dC1jb2xvcjsgYmFja2dyb3VuZC1jb2xvcjogJHNlY29uZGFyeS1iZy1jb2xvcjsgYm9yZGVyLWNvbG9yOiAkc2Vjb25kYXJ5LWJnLWNvbG9yO1wiLFxuXG4gICAgXCIuc3ZkX2NvbnRhaW5lci5zdl9ib290c3RyYXBfY3NzIC5zdmQtc3ZnLWljb25cIjpcbiAgICAgIFwiZmlsbDogJHByaW1hcnktaWNvbi1jb2xvcjtcIixcbiAgICBcIi5zdmRfY29udGFpbmVyLnN2X2Jvb3RzdHJhcF9jc3MgLmljb24td2hpdGUgLnN2ZC1zdmctaWNvblwiOlxuICAgICAgXCJmaWxsOiAkcHJpbWFyeS1iZy1jb2xvcjtcIixcbiAgICBcIi5zdmRfY29udGFpbmVyLnN2X2Jvb3RzdHJhcF9jc3MgLnN2ZC1wcmltYXJ5LWljb24gLnN2ZC1zdmctaWNvblwiOlxuICAgICAgXCJmaWxsOiAkcHJpbWFyeS1jb2xvcjtcIixcbiAgICBcIi5zdmRfY29udGFpbmVyLnN2X2Jvb3RzdHJhcF9jc3MgLnN2ZC1zZWNvbmRhcnktaWNvbiAuc3ZkLXN2Zy1pY29uXCI6XG4gICAgICBcImZpbGw6ICRzZWNvbmRhcnktY29sb3I7XCIsXG4gICAgXCIuc3ZkX2NvbnRhaW5lci5zdl9ib290c3RyYXBfY3NzIC5pY29uLWdlYXJhY3RpdmUgLnN2ZC1zdmctaWNvblwiOlxuICAgICAgXCJmaWxsOiAkcHJpbWFyeS1jb2xvcjtcIixcbiAgICBcIi5zdmRfY29udGFpbmVyLnN2X2Jvb3RzdHJhcF9jc3MgLm5hdi10YWJzIGFcIjpcbiAgICAgIFwiY29sb3I6ICRwcmltYXJ5LXRleHQtY29sb3I7XCIsXG4gICAgXCIuc3ZkX2NvbnRhaW5lci5zdl9ib290c3RyYXBfY3NzIC5uYXYtdGFicyA+IGxpLmFjdGl2ZSA+IGFcIjpcbiAgICAgIFwiY29sb3I6ICRwcmltYXJ5LWNvbG9yO1wiLFxuICAgIFwiLnN2ZF9jb250YWluZXIuc3ZfYm9vdHN0cmFwX2NzcyAubmF2LWl0ZW0uYWN0aXZlIC5uYXYtbGlua1wiOlxuICAgICAgXCJiYWNrZ3JvdW5kLWNvbG9yOiAkcHJpbWFyeS1iZy1jb2xvcjtcIixcblxuICAgIFwiLnN2ZF9jb250YWluZXIuc3ZfYm9vdHN0cmFwX2NzcyAuc2pzLWNiLWNvbnRhaW5lcjpob3ZlciBpbnB1dCB+IC5jaGVja21hcmtcIjpcbiAgICAgIFwiYmFja2dyb3VuZC1jb2xvcjogJGRkLW1lbnUtYm9yZGVyXCIsXG4gICAgXCIuc3ZkX2NvbnRhaW5lci5zdl9ib290c3RyYXBfY3NzIC5zanMtY2ItY29udGFpbmVyOmhvdmVyIGlucHV0OmNoZWNrZWQgfiAuY2hlY2ttYXJrXCI6XG4gICAgICBcImJhY2tncm91bmQtY29sb3I6ICRwcmltYXJ5LWhvdmVyLWNvbG9yXCIsXG5cbiAgICBcIi5zdmRfY29udGFpbmVyLnN2X2Jvb3RzdHJhcF9jc3MgLnN2ZF9jdXN0b21fc2VsZWN0OmJlZm9yZVwiOlxuICAgICAgXCJiYWNrZ3JvdW5kLWNvbG9yOiAkcHJpbWFyeS1jb2xvcjtcIixcbiAgICBcIi5zdmRfY29udGFpbmVyLnN2X2Jvb3RzdHJhcF9jc3MgLmZvcm0tY29udHJvbDpmb2N1c1wiOlxuICAgICAgXCJib3JkZXItY29sb3I6ICRwcmltYXJ5LWNvbG9yO1wiLFxuXG4gICAgXCIuc3ZkX2NvbnRhaW5lci5zdl9ib290c3RyYXBfY3NzIC5zdmQtbGlnaHQtdGV4dC1jb2xvclwiOlxuICAgICAgXCJjb2xvcjogJHNlY29uZGFyeS10ZXh0LWNvbG9yO1wiLFxuXG4gICAgXCIuc3ZkLWxpZ2h0LWJnLWNvbG9yXCI6IFwiYmFja2dyb3VuZC1jb2xvcjogJHByaW1hcnktYmctY29sb3I7XCIsXG4gICAgXCIuc3ZkX2NvbnRhaW5lci5zdl9ib290c3RyYXBfY3NzIC5zdmQtbGlnaHQtYmctY29sb3JcIjpcbiAgICAgIFwiYmFja2dyb3VuZC1jb2xvcjogJHByaW1hcnktYmctY29sb3I7XCIsXG5cbiAgICBcIi5zdmRfY29udGFpbmVyLnN2X2Jvb3RzdHJhcF9jc3MgLnN2ZF90b29sYmFyIGxpLmFjdGl2ZSBhXCI6XG4gICAgICBcImJhY2tncm91bmQtY29sb3I6ICRwcmltYXJ5LWNvbG9yOyBjb2xvcjogJHByaW1hcnktYmctY29sb3I7XCIsXG5cbiAgICBcIi5zdmRfY29udGFpbmVyLnN2X2Jvb3RzdHJhcF9jc3MgLnN2ZF9zZWxlY3RlZF9wYWdlXCI6XG4gICAgICBcImJvcmRlci1ib3R0b206IDFweCBzb2xpZCAkcHJpbWFyeS1iZy1jb2xvcjtcIixcblxuICAgIFwiLnN2ZF9jb250YWluZXIuc3ZfYm9vdHN0cmFwX2NzcyAuZWRpdG9yLXRhYnMgPiBsaSA+IGE6aG92ZXJcIjpcbiAgICAgIFwiYmFja2dyb3VuZC1jb2xvcjogJHNlY29uZGFyeS1iZy1jb2xvcjsgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICRzZWNvbmRhcnktYmctY29sb3I7XCIsXG4gICAgXCIuc3ZkX2NvbnRhaW5lci5zdl9ib290c3RyYXBfY3NzIC5lZGl0b3ItdGFicyA+IGxpID4gYTpmb2N1c1wiOlxuICAgICAgXCJiYWNrZ3JvdW5kLWNvbG9yOiAkc2Vjb25kYXJ5LWJnLWNvbG9yOyBib3JkZXItYm90dG9tOiAxcHggc29saWQgJHNlY29uZGFyeS1iZy1jb2xvclwiLFxuICAgIFwiLnN2ZF9jb250YWluZXIuc3ZfYm9vdHN0cmFwX2NzcyAuZWRpdG9yLXRhYnMgPiBsaS5hY3RpdmUgPiBhXCI6XG4gICAgICBcImNvbG9yOiAkcHJpbWFyeS1jb2xvcjsgYmFja2dyb3VuZC1jb2xvcjogJHNlY29uZGFyeS1iZy1jb2xvcjsgYm9yZGVyOiAxcHggc29saWQgJHByaW1hcnktYm9yZGVyLWNvbG9yOyBib3JkZXItYm90dG9tLWNvbG9yOiAkc2Vjb25kYXJ5LWJnLWNvbG9yO1wiLFxuXG4gICAgXCIuc3ZkX2NvbnRhaW5lci5zdl9ib290c3RyYXBfY3NzIC5zdmQtbGlnaHQtYm9yZGVyLWNvbG9yXCI6XG4gICAgICBcImJvcmRlci1jb2xvcjogJHByaW1hcnktYm9yZGVyLWNvbG9yXCIsXG5cbiAgICBcIi5zdmRfY29udGFpbmVyLnN2X2Jvb3RzdHJhcF9jc3MgLnN2ZC1kYXJrLWJvcmRlci1jb2xvclwiOlxuICAgICAgXCJib3JkZXItY29sb3I6ICRzZWNvbmRhcnktYm9yZGVyLWNvbG9yXCIsXG5cbiAgICBcIi5zdmRfY29udGFpbmVyLnN2X2Jvb3RzdHJhcF9jc3MgLnNlbGVjdDItY29udGFpbmVyLS1kZWZhdWx0LnNlbGVjdDItY29udGFpbmVyLS1vcGVuIC5zZWxlY3QyLXNlbGVjdGlvbi0tc2luZ2xlIC5zZWxlY3QyLXNlbGVjdGlvbl9fYXJyb3dcIjpcbiAgICAgIFwiYmFja2dyb3VuZDogICRwcmltYXJ5LWNvbG9yO1wiLFxuICAgIFwiLnN2ZF9jb250YWluZXIuc3ZfYm9vdHN0cmFwX2NzcyAuc2VsZWN0Mi1jb250YWluZXIgLnNlbGVjdDItc2VsZWN0aW9uLS1zaW5nbGUgLnNlbGVjdDItc2VsZWN0aW9uX19hcnJvd1wiOlxuICAgICAgXCJiYWNrZ3JvdW5kOiAgJHByaW1hcnktY29sb3I7XCIsXG5cbiAgICBcIi5zdmRfY29udGFpbmVyLnN2X2Jvb3RzdHJhcF9jc3MgLm1vZGFsLXRhYnNcIjpcbiAgICAgIFwiYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7IHBhZGRpbmctYm90dG9tOiAxMHB4O1wiLFxuICAgIFwiLnN2ZF9jb250YWluZXIuc3ZfYm9vdHN0cmFwX2NzcyAubW9kYWwtdGFicyA+IGxpID4gYVwiOlxuICAgICAgXCJjb2xvcjogJHByaW1hcnktdGV4dC1jb2xvcjsgYm9yZGVyOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7XCIsXG4gICAgXCIuc3ZkX2NvbnRhaW5lci5zdl9ib290c3RyYXBfY3NzIC5tb2RhbC10YWJzID4gbGkgPiBhOmhvdmVyXCI6XG4gICAgICBcImNvbG9yOiAkcHJpbWFyeS1jb2xvcjsgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICRpbnZlcnRlZC10ZXh0LWNvbG9yO1wiLFxuICAgIFwiLnN2ZF9jb250YWluZXIuc3ZfYm9vdHN0cmFwX2NzcyAubW9kYWwtdGFicyA+IGxpID4gYTpmb2N1c1wiOlxuICAgICAgXCIkcHJpbWFyeS1jb2xvcjsgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICRpbnZlcnRlZC10ZXh0LWNvbG9yO1wiLFxuICAgIFwiLnN2ZF9jb250YWluZXIuc3ZfYm9vdHN0cmFwX2NzcyAubW9kYWwtdGFicyA+IGxpLmFjdGl2ZSA+IGFcIjpcbiAgICAgIFwiY29sb3I6ICRwcmltYXJ5LWNvbG9yOyBib3JkZXI6IDFweCBzb2xpZCAkcHJpbWFyeS1ib3JkZXItY29sb3I7IGJvcmRlci1ib3R0b20tY29sb3I6ICRpbnZlcnRlZC10ZXh0LWNvbG9yO1wiLFxuXG4gICAgXCIuc3ZkX2NvbnRhaW5lci5zdl9ib290c3RyYXBfY3NzIC5mb3JtLWdyb3VwLmlzLWZvY3VzZWQgLmZvcm0tY29udHJvbFwiOlxuICAgICAgXCJiYWNrZ3JvdW5kLWltYWdlOiBsaW5lYXItZ3JhZGllbnQoJHByaW1hcnktY29sb3IsICRwcmltYXJ5LWNvbG9yKSwgbGluZWFyLWdyYWRpZW50KCNEMkQyRDIsICNEMkQyRDIpO1wiLFxuICAgIFwiLnN2ZF9jb250YWluZXIuc3ZfYm9vdHN0cmFwX2NzcyAuZm9ybS1ncm91cC5pcy1mb2N1c2VkIGxhYmVsXCI6XG4gICAgICBcImNvbG9yOiRwcmltYXJ5LWNvbG9yO1wiLFxuXG4gICAgXCIuc3ZkX2NvbnRhaW5lci5zdl9ib290c3RyYXBfY3NzIC5xdWVzdGlvbl9hY3Rpb25zLnN2ZF9xdWVzdGlvbjpob3ZlclwiOlxuICAgICAgXCJib3JkZXItdG9wOiAxcHggc29saWQgJHByaW1hcnktY29sb3I7XCIsXG4gICAgXCIuc3ZkX2NvbnRhaW5lci5zdl9ib290c3RyYXBfY3NzIC5wYW5lbF9hY3Rpb25zLnN2ZF9xdWVzdGlvbjpob3ZlclwiOlxuICAgICAgXCJib3JkZXItdG9wOiAxcHggc29saWQgJHByaW1hcnktY29sb3I7XCJcbiAgfTtcblxuICBwdWJsaWMgc3RhdGljIGJvb3RzdHJhcG1hdGVyaWFsVGhlbWVDc3M6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gPSB7XG4gICAgXCIuc3ZkX2NvbnRhaW5lci5zdl9ib290c3RyYXBtYXRlcmlhbF9jc3NcIjogXCJjb2xvcjogJHByaW1hcnktdGV4dC1jb2xvcjtcIixcblxuICAgIFwiLnN2ZF9jb250YWluZXIuc3ZfYm9vdHN0cmFwbWF0ZXJpYWxfY3NzIGFcIjogXCJjb2xvcjogJHByaW1hcnktY29sb3I7XCIsXG4gICAgXCIuc3ZkX2NvbnRhaW5lci5zdl9ib290c3RyYXBtYXRlcmlhbF9jc3MgYTpob3ZlclwiOlxuICAgICAgXCJjb2xvcjogJHByaW1hcnktaG92ZXItY29sb3I7XCIsXG4gICAgXCIuc3ZkX2NvbnRhaW5lci5zdl9ib290c3RyYXBtYXRlcmlhbF9jc3MgLnN2ZC1tYWluLWNvbG9yXCI6XG4gICAgICBcImNvbG9yOiAkcHJpbWFyeS1jb2xvcjtcIixcbiAgICBcIi5zdmRfY29udGFpbmVyLnN2X2Jvb3RzdHJhcG1hdGVyaWFsX2NzcyAuc3ZkLW1haW4tYm9yZGVyLWNvbG9yXCI6XG4gICAgICBcImJvcmRlci1jb2xvcjogJHNlbGVjdGlvbi1ib3JkZXItY29sb3I7XCIsXG4gICAgXCIuc3ZkX2NvbnRhaW5lci5zdl9ib290c3RyYXBtYXRlcmlhbF9jc3MgLnN2ZC1tYWluLWJhY2tncm91bmQtY29sb3JcIjpcbiAgICAgIFwiYmFja2dyb3VuZC1jb2xvcjogJHByaW1hcnktY29sb3I7XCIsXG4gICAgXCIuc3ZkX2NvbnRhaW5lci5zdl9ib290c3RyYXBtYXRlcmlhbF9jc3MgLnN2ZC1saWdodC1iYWNrZ3JvdW5kLWNvbG9yXCI6XG4gICAgICBcImJhY2tncm91bmQtY29sb3I6ICRwcmltYXJ5LWJvcmRlci1jb2xvcjtcIixcblxuICAgIFwiLnN2ZF9jb250YWluZXIuc3ZfYm9vdHN0cmFwbWF0ZXJpYWxfY3NzIC5idG4tcHJpbWFyeVwiOlxuICAgICAgXCJjb2xvcjogJGludmVydGVkLXRleHQtY29sb3I7IGJhY2tncm91bmQtY29sb3I6ICRzZWNvbmRhcnktY29sb3I7IGJvcmRlci1jb2xvcjogJHNlY29uZGFyeS1jb2xvcjtcIixcbiAgICBcIi5zdmRfY29udGFpbmVyLnN2X2Jvb3RzdHJhcG1hdGVyaWFsX2NzcyAuYnRuLXNlY29uZGFyeVwiOlxuICAgICAgXCJiYWNrZ3JvdW5kLWNvbG9yOiAkcHJpbWFyeS1ib3JkZXItY29sb3I7XCIsXG4gICAgXCIuc3ZkX2NvbnRhaW5lci5zdl9ib290c3RyYXBtYXRlcmlhbF9jc3MgLmJ0bi1zZWNvbmRhcnk6aG92ZXJcIjpcbiAgICAgIFwib3BhY2l0eTogMC44O1wiLFxuICAgIFwiLnN2ZF9jb250YWluZXIuc3ZfYm9vdHN0cmFwbWF0ZXJpYWxfY3NzIC5idG4tbGlua1wiOlxuICAgICAgXCJjb2xvcjogJHByaW1hcnktdGV4dC1jb2xvcjsgYmFja2dyb3VuZC1jb2xvcjogJHNlY29uZGFyeS1iZy1jb2xvcjsgYm9yZGVyLWNvbG9yOiAkc2Vjb25kYXJ5LWJnLWNvbG9yO1wiLFxuXG4gICAgXCIuc3ZkX2NvbnRhaW5lci5zdl9ib290c3RyYXBtYXRlcmlhbF9jc3MgLnN2ZC1zdmctaWNvblwiOlxuICAgICAgXCJmaWxsOiAkcHJpbWFyeS1pY29uLWNvbG9yO1wiLFxuICAgIFwiLnN2ZF9jb250YWluZXIuc3ZfYm9vdHN0cmFwbWF0ZXJpYWxfY3NzIC5pY29uLXdoaXRlIC5zdmQtc3ZnLWljb25cIjpcbiAgICAgIFwiZmlsbDogJHByaW1hcnktYmctY29sb3I7XCIsXG4gICAgXCIuc3ZkX2NvbnRhaW5lci5zdl9ib290c3RyYXBtYXRlcmlhbF9jc3MgLnN2ZC1wcmltYXJ5LWljb24gLnN2ZC1zdmctaWNvblwiOlxuICAgICAgXCJmaWxsOiAkcHJpbWFyeS1jb2xvcjtcIixcbiAgICBcIi5zdmRfY29udGFpbmVyLnN2X2Jvb3RzdHJhcG1hdGVyaWFsX2NzcyAuc3ZkLXNlY29uZGFyeS1pY29uIC5zdmQtc3ZnLWljb25cIjpcbiAgICAgIFwiZmlsbDogJHNlY29uZGFyeS1jb2xvcjtcIixcbiAgICBcIi5zdmRfY29udGFpbmVyLnN2X2Jvb3RzdHJhcG1hdGVyaWFsX2NzcyAuaWNvbi1nZWFyYWN0aXZlIC5zdmQtc3ZnLWljb25cIjpcbiAgICAgIFwiZmlsbDogJHByaW1hcnktY29sb3I7XCIsXG4gICAgXCIuc3ZkX2NvbnRhaW5lci5zdl9ib290c3RyYXBtYXRlcmlhbF9jc3MgLm5hdi10YWJzIGFcIjpcbiAgICAgIFwiY29sb3I6ICRwcmltYXJ5LXRleHQtY29sb3IgIWltcG9ydGFudDtcIixcbiAgICBcIi5zdmRfY29udGFpbmVyLnN2X2Jvb3RzdHJhcG1hdGVyaWFsX2NzcyAubmF2LXRhYnMgPiBsaS5hY3RpdmUgPiBhXCI6XG4gICAgICBcImNvbG9yOiAkcHJpbWFyeS1jb2xvciAhaW1wb3J0YW50O1wiLFxuICAgIFwiLnN2ZF9jb250YWluZXIuc3ZfYm9vdHN0cmFwbWF0ZXJpYWxfY3NzIC5uYXYtaXRlbS5hY3RpdmUgLm5hdi1saW5rXCI6XG4gICAgICBcImJhY2tncm91bmQtY29sb3I6ICRwcmltYXJ5LWJnLWNvbG9yICFpbXBvcnRhbnQ7XCIsXG5cbiAgICBcIi5zdmRfY29udGFpbmVyLnN2X2Jvb3RzdHJhcG1hdGVyaWFsX2NzcyAuc2pzLWNiLWNvbnRhaW5lcjpob3ZlciBpbnB1dCB+IC5jaGVja21hcmtcIjpcbiAgICAgIFwiYmFja2dyb3VuZC1jb2xvcjogJGRkLW1lbnUtYm9yZGVyXCIsXG4gICAgXCIuc3ZkX2NvbnRhaW5lci5zdl9ib290c3RyYXBtYXRlcmlhbF9jc3MgLnNqcy1jYi1jb250YWluZXI6aG92ZXIgaW5wdXQ6Y2hlY2tlZCB+IC5jaGVja21hcmtcIjpcbiAgICAgIFwiYmFja2dyb3VuZC1jb2xvcjogJHByaW1hcnktaG92ZXItY29sb3JcIixcblxuICAgIFwiLnN2ZF9jb250YWluZXIuc3ZfYm9vdHN0cmFwbWF0ZXJpYWxfY3NzIC5zdmRfY3VzdG9tX3NlbGVjdDpiZWZvcmVcIjpcbiAgICAgIFwiYmFja2dyb3VuZC1jb2xvcjogJHByaW1hcnktY29sb3I7XCIsXG4gICAgXCIuc3ZkX2NvbnRhaW5lci5zdl9ib290c3RyYXBtYXRlcmlhbF9jc3MgLmZvcm0tY29udHJvbDpmb2N1c1wiOlxuICAgICAgXCJib3JkZXItY29sb3I6ICRwcmltYXJ5LWNvbG9yO1wiLFxuXG4gICAgXCIuc3ZkX2NvbnRhaW5lci5zdl9ib290c3RyYXBtYXRlcmlhbF9jc3MgLnN2ZC1saWdodC10ZXh0LWNvbG9yXCI6XG4gICAgICBcImNvbG9yOiAkc2Vjb25kYXJ5LXRleHQtY29sb3I7XCIsXG5cbiAgICBcIi5zdmQtbGlnaHQtYmctY29sb3JcIjogXCJiYWNrZ3JvdW5kLWNvbG9yOiAkcHJpbWFyeS1iZy1jb2xvcjtcIixcbiAgICBcIi5zdmRfY29udGFpbmVyLnN2X2Jvb3RzdHJhcG1hdGVyaWFsX2NzcyAuc3ZkLWxpZ2h0LWJnLWNvbG9yXCI6XG4gICAgICBcImJhY2tncm91bmQtY29sb3I6ICRwcmltYXJ5LWJnLWNvbG9yO1wiLFxuXG4gICAgXCIuc3ZkX2NvbnRhaW5lci5zdl9ib290c3RyYXBtYXRlcmlhbF9jc3MgLnN2ZF90b29sYmFyIGxpLmFjdGl2ZSBhXCI6XG4gICAgICBcImJhY2tncm91bmQtY29sb3I6ICRwcmltYXJ5LWNvbG9yOyBjb2xvcjogJHByaW1hcnktYmctY29sb3I7XCIsXG5cbiAgICBcIi5zdmRfY29udGFpbmVyLnN2X2Jvb3RzdHJhcG1hdGVyaWFsX2NzcyAuc3ZkX3NlbGVjdGVkX3BhZ2VcIjpcbiAgICAgIFwiYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICRwcmltYXJ5LWJnLWNvbG9yO1wiLFxuXG4gICAgXCIuc3ZkX2NvbnRhaW5lci5zdl9ib290c3RyYXBtYXRlcmlhbF9jc3MgLmVkaXRvci10YWJzID4gbGkgPiBhOmhvdmVyXCI6XG4gICAgICBcImJhY2tncm91bmQtY29sb3I6ICRzZWNvbmRhcnktYmctY29sb3IgIWltcG9ydGFudDsgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICRzZWNvbmRhcnktYmctY29sb3IgIWltcG9ydGFudDtcIixcbiAgICBcIi5zdmRfY29udGFpbmVyLnN2X2Jvb3RzdHJhcG1hdGVyaWFsX2NzcyAuZWRpdG9yLXRhYnMgPiBsaSA+IGE6Zm9jdXNcIjpcbiAgICAgIFwiYmFja2dyb3VuZC1jb2xvcjogJHNlY29uZGFyeS1iZy1jb2xvciAhaW1wb3J0YW50OyBib3JkZXItYm90dG9tOiAxcHggc29saWQgJHNlY29uZGFyeS1iZy1jb2xvciAhaW1wb3J0YW50XCIsXG4gICAgXCIuc3ZkX2NvbnRhaW5lci5zdl9ib290c3RyYXBtYXRlcmlhbF9jc3MgLmVkaXRvci10YWJzID4gbGkuYWN0aXZlID4gYVwiOlxuICAgICAgXCJjb2xvcjogJHByaW1hcnktY29sb3IgIWltcG9ydGFudDsgYmFja2dyb3VuZC1jb2xvcjogJHNlY29uZGFyeS1iZy1jb2xvciAhaW1wb3J0YW50OyBib3JkZXI6IDFweCBzb2xpZCAkcHJpbWFyeS1ib3JkZXItY29sb3IgIWltcG9ydGFudDsgYm9yZGVyLWJvdHRvbS1jb2xvcjogJHNlY29uZGFyeS1iZy1jb2xvciAhaW1wb3J0YW50O1wiLFxuXG4gICAgXCIuc3ZkX2NvbnRhaW5lci5zdl9ib290c3RyYXBtYXRlcmlhbF9jc3MgLnN2ZC1saWdodC1ib3JkZXItY29sb3JcIjpcbiAgICAgIFwiYm9yZGVyLWNvbG9yOiAkcHJpbWFyeS1ib3JkZXItY29sb3JcIixcblxuICAgIFwiLnN2ZF9jb250YWluZXIuc3ZfYm9vdHN0cmFwbWF0ZXJpYWxfY3NzIC5zdmQtZGFyay1ib3JkZXItY29sb3JcIjpcbiAgICAgIFwiYm9yZGVyLWNvbG9yOiAkc2Vjb25kYXJ5LWJvcmRlci1jb2xvclwiLFxuXG4gICAgXCIuc3ZkX2NvbnRhaW5lci5zdl9ib290c3RyYXBtYXRlcmlhbF9jc3MgLnNlbGVjdDItY29udGFpbmVyLS1kZWZhdWx0LnNlbGVjdDItY29udGFpbmVyLS1vcGVuIC5zZWxlY3QyLXNlbGVjdGlvbi0tc2luZ2xlIC5zZWxlY3QyLXNlbGVjdGlvbl9fYXJyb3dcIjpcbiAgICAgIFwiYmFja2dyb3VuZDogICRwcmltYXJ5LWNvbG9yO1wiLFxuICAgIFwiLnN2ZF9jb250YWluZXIuc3ZfYm9vdHN0cmFwbWF0ZXJpYWxfY3NzIC5zZWxlY3QyLWNvbnRhaW5lciAuc2VsZWN0Mi1zZWxlY3Rpb24tLXNpbmdsZSAuc2VsZWN0Mi1zZWxlY3Rpb25fX2Fycm93XCI6XG4gICAgICBcImJhY2tncm91bmQ6ICAkcHJpbWFyeS1jb2xvcjtcIixcblxuICAgIFwiLnN2ZF9jb250YWluZXIuc3ZfYm9vdHN0cmFwbWF0ZXJpYWxfY3NzIC5zdmRfcHJvcGVydGllc19ncmlkICAuZ2x5cGhpY29uLWVkaXRcIjpcbiAgICAgIFwiYmFja2dyb3VuZC1jb2xvcjogJHByaW1hcnktY29sb3I7XCIsXG4gICAgXCIuc3ZkX2NvbnRhaW5lci5zdl9ib290c3RyYXBtYXRlcmlhbF9jc3MgLnN2ZF9wcm9wZXJ0aWVzX2dyaWQgIC5nbHlwaGljb24tZWRpdDpob3ZlclwiOlxuICAgICAgXCJiYWNrZ3JvdW5kLWNvbG9yOiAgJHByaW1hcnktaG92ZXItY29sb3I7XCIsXG5cbiAgICBcIi5zdmRfY29udGFpbmVyLnN2X2Jvb3RzdHJhcG1hdGVyaWFsX2NzcyAubW9kYWwtdGFic1wiOlxuICAgICAgXCJiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsgcGFkZGluZy1ib3R0b206IDEwcHg7XCIsXG4gICAgXCIuc3ZkX2NvbnRhaW5lci5zdl9ib290c3RyYXBtYXRlcmlhbF9jc3MgLm1vZGFsLXRhYnMgPiBsaSA+IGFcIjpcbiAgICAgIFwiY29sb3I6ICRwcmltYXJ5LXRleHQtY29sb3IgIWltcG9ydGFudDsgYm9yZGVyOiAxcHggc29saWQgdHJhbnNwYXJlbnQgIWltcG9ydGFudDtcIixcbiAgICBcIi5zdmRfY29udGFpbmVyLnN2X2Jvb3RzdHJhcG1hdGVyaWFsX2NzcyAubW9kYWwtdGFicyA+IGxpID4gYTpob3ZlclwiOlxuICAgICAgXCJjb2xvcjogJHByaW1hcnktY29sb3IgIWltcG9ydGFudDsgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICRpbnZlcnRlZC10ZXh0LWNvbG9yICFpbXBvcnRhbnQ7XCIsXG4gICAgXCIuc3ZkX2NvbnRhaW5lci5zdl9ib290c3RyYXBtYXRlcmlhbF9jc3MgLm1vZGFsLXRhYnMgPiBsaSA+IGE6Zm9jdXNcIjpcbiAgICAgIFwiJHByaW1hcnktY29sb3IgIWltcG9ydGFudDsgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICRpbnZlcnRlZC10ZXh0LWNvbG9yICFpbXBvcnRhbnQ7XCIsXG4gICAgXCIuc3ZkX2NvbnRhaW5lci5zdl9ib290c3RyYXBtYXRlcmlhbF9jc3MgLm1vZGFsLXRhYnMgPiBsaS5hY3RpdmUgPiBhXCI6XG4gICAgICBcImNvbG9yOiAkcHJpbWFyeS1jb2xvciAhaW1wb3J0YW50OyBib3JkZXI6IDFweCBzb2xpZCAkcHJpbWFyeS1ib3JkZXItY29sb3IgIWltcG9ydGFudDsgYm9yZGVyLWJvdHRvbS1jb2xvcjogJGludmVydGVkLXRleHQtY29sb3IgIWltcG9ydGFudDtcIixcblxuICAgIFwiLnN2ZF9jb250YWluZXIuc3ZfYm9vdHN0cmFwbWF0ZXJpYWxfY3NzIC5mb3JtLWdyb3VwLmlzLWZvY3VzZWQgLmZvcm0tY29udHJvbFwiOlxuICAgICAgXCJiYWNrZ3JvdW5kLWltYWdlOiBsaW5lYXItZ3JhZGllbnQoJHByaW1hcnktY29sb3IsICRwcmltYXJ5LWNvbG9yKSwgbGluZWFyLWdyYWRpZW50KCNEMkQyRDIsICNEMkQyRDIpO1wiLFxuICAgIFwiLnN2ZF9jb250YWluZXIuc3ZfYm9vdHN0cmFwbWF0ZXJpYWxfY3NzIC5mb3JtLWdyb3VwLmlzLWZvY3VzZWQgbGFiZWxcIjpcbiAgICAgIFwiY29sb3I6JHByaW1hcnktY29sb3I7XCIsXG5cbiAgICBcIi5zdmRfY29udGFpbmVyLnN2X2Jvb3RzdHJhcG1hdGVyaWFsX2NzcyAucXVlc3Rpb25fYWN0aW9ucy5zdmRfcXVlc3Rpb246aG92ZXJcIjpcbiAgICAgIFwiYm9yZGVyLXRvcDogMXB4IHNvbGlkICRwcmltYXJ5LWNvbG9yO1wiLFxuICAgIFwiLnN2ZF9jb250YWluZXIuc3ZfYm9vdHN0cmFwbWF0ZXJpYWxfY3NzIC5wYW5lbF9hY3Rpb25zLnN2ZF9xdWVzdGlvbjpob3ZlclwiOlxuICAgICAgXCJib3JkZXItdG9wOiAxcHggc29saWQgJHByaW1hcnktY29sb3I7XCJcbiAgfTtcblxuICBwcml2YXRlIHNoZWV0OiBDU1NTdHlsZVNoZWV0ID0gbnVsbDtcblxuICBzdGF0aWMgZmluZFNoZWV0KHN0eWxlU2hlZXRJZDogc3RyaW5nKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkb2N1bWVudC5zdHlsZVNoZWV0cy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKFxuICAgICAgICAhIWRvY3VtZW50LnN0eWxlU2hlZXRzW2ldLm93bmVyTm9kZSAmJlxuICAgICAgICBkb2N1bWVudC5zdHlsZVNoZWV0c1tpXS5vd25lck5vZGVbXCJpZFwiXSA9PT0gc3R5bGVTaGVldElkXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuIDxDU1NTdHlsZVNoZWV0PmRvY3VtZW50LnN0eWxlU2hlZXRzW2ldO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHN0YXRpYyBjcmVhdGVTaGVldChzdHlsZVNoZWV0SWQ6IHN0cmluZykge1xuICAgIGxldCBzdHlsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzdHlsZVwiKTtcbiAgICBzdHlsZS5pZCA9IHN0eWxlU2hlZXRJZDtcbiAgICAvLyBBZGQgYSBtZWRpYSAoYW5kL29yIG1lZGlhIHF1ZXJ5KSBoZXJlIGlmIHlvdSdkIGxpa2UhXG4gICAgLy8gc3R5bGUuc2V0QXR0cmlidXRlKFwibWVkaWFcIiwgXCJzY3JlZW5cIilcbiAgICAvLyBzdHlsZS5zZXRBdHRyaWJ1dGUoXCJtZWRpYVwiLCBcIm9ubHkgc2NyZWVuIGFuZCAobWF4LXdpZHRoIDogMTAyNHB4KVwiKVxuICAgIHN0eWxlLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKFwiXCIpKTtcbiAgICBkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKHN0eWxlKTtcbiAgICByZXR1cm4gPENTU1N0eWxlU2hlZXQ+c3R5bGUuc2hlZXQ7XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIGN1cnJlbnRUaGVtZSA9IGtvLm9ic2VydmFibGUoXCJib290c3RyYXBcIik7XG5cbiAgcHVibGljIHN0YXRpYyBhcHBseVRoZW1lKFxuICAgIHRoZW1lTmFtZTogc3RyaW5nID0gXCJkZWZhdWx0XCIsXG4gICAgdGhlbWVTZWxlY3Rvcjogc3RyaW5nID0gXCIuc3ZkX2NvbnRhaW5lclwiXG4gICkge1xuICAgIFN0eWxlc01hbmFnZXIuY3VycmVudFRoZW1lKHRoZW1lTmFtZSk7XG5cbiAgICBTdHlsZXNNYW5hZ2VyLmFwcGx5U3VydmV5VGhlbWUodGhlbWVOYW1lKTtcblxuICAgIGxldCBzaGVldCA9IFN0eWxlc01hbmFnZXIuZmluZFNoZWV0KHRoZW1lTmFtZSArIHRoZW1lU2VsZWN0b3IpO1xuICAgIGlmICghc2hlZXQpIHtcbiAgICAgIHNoZWV0ID0gU3R5bGVzTWFuYWdlci5jcmVhdGVTaGVldCh0aGVtZU5hbWUgKyB0aGVtZVNlbGVjdG9yKTtcbiAgICAgIGxldCB0aGVtZSA9XG4gICAgICAgIFN0eWxlc01hbmFnZXIuVGhlbWVDb2xvcnNbdGhlbWVOYW1lXSB8fFxuICAgICAgICBTdHlsZXNNYW5hZ2VyLlRoZW1lQ29sb3JzW1wiZGVmYXVsdFwiXTtcblxuICAgICAgbGV0IFRoZW1lQ3NzO1xuICAgICAgaWYgKFtcImJvb3RzdHJhcFwiLCBcImJvb3RzdHJhcG1hdGVyaWFsXCJdLmluZGV4T2YodGhlbWVOYW1lKSAhPT0gLTEpIHtcbiAgICAgICAgVGhlbWVDc3MgPSBTdHlsZXNNYW5hZ2VyW3RoZW1lTmFtZSArIFwiVGhlbWVDc3NcIl07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBUaGVtZUNzcyA9IFN0eWxlc01hbmFnZXIuVGhlbWVDc3M7XG4gICAgICB9XG5cbiAgICAgIE9iamVjdC5rZXlzKFRoZW1lQ3NzKS5mb3JFYWNoKHNlbGVjdG9yID0+IHtcbiAgICAgICAgbGV0IGNzc1J1bGVUZXh0ID0gVGhlbWVDc3Nbc2VsZWN0b3JdO1xuICAgICAgICBPYmplY3Qua2V5cyh0aGVtZSkuZm9yRWFjaChcbiAgICAgICAgICBjb2xvclZhcmlhYmxlTmFtZSA9PlxuICAgICAgICAgICAgKGNzc1J1bGVUZXh0ID0gY3NzUnVsZVRleHQucmVwbGFjZShcbiAgICAgICAgICAgICAgbmV3IFJlZ0V4cChcIlxcXFxcIiArIGNvbG9yVmFyaWFibGVOYW1lLCBcImdcIiksXG4gICAgICAgICAgICAgIHRoZW1lW2NvbG9yVmFyaWFibGVOYW1lXVxuICAgICAgICAgICAgKSlcbiAgICAgICAgKTtcbiAgICAgICAgc2hlZXQuaW5zZXJ0UnVsZShcbiAgICAgICAgICB0aGVtZVNlbGVjdG9yICsgc2VsZWN0b3IgKyBcIiB7IFwiICsgY3NzUnVsZVRleHQgKyBcIiB9XCIsXG4gICAgICAgICAgMFxuICAgICAgICApO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHN0YXRpYyBhcHBseVN1cnZleVRoZW1lKHRoZW1lTmFtZSkge1xuICAgIGlmIChbXCJib290c3RyYXBcIiwgXCJib290c3RyYXBtYXRlcmlhbFwiLCBcIm1vZGVyblwiXS5pbmRleE9mKHRoZW1lTmFtZSkgIT09IC0xKSB7XG4gICAgICBTdXJ2ZXkuU3VydmV5LmNzc1R5cGUgPSB0aGVtZU5hbWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIFN1cnZleS5TdXJ2ZXkuY3NzVHlwZSA9IFwiZGVmYXVsdFwiO1xuICAgIH1cbiAgICBTdXJ2ZXkuU3R5bGVzTWFuYWdlci5hcHBseVRoZW1lKHRoZW1lTmFtZSk7XG4gIH1cblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLnNoZWV0ID0gU3R5bGVzTWFuYWdlci5maW5kU2hlZXQoU3R5bGVzTWFuYWdlci5TdXJ2ZXlKU1N0eWxlc1NoZWV0SWQpO1xuICAgIGlmICghdGhpcy5zaGVldCkge1xuICAgICAgdGhpcy5zaGVldCA9IFN0eWxlc01hbmFnZXIuY3JlYXRlU2hlZXQoXG4gICAgICAgIFN0eWxlc01hbmFnZXIuU3VydmV5SlNTdHlsZXNTaGVldElkXG4gICAgICApO1xuICAgICAgdGhpcy5pbml0aWFsaXplU3R5bGVzKHRoaXMuc2hlZXQpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBpbml0aWFsaXplU3R5bGVzKHNoZWV0OiBDU1NTdHlsZVNoZWV0KSB7XG4gICAgT2JqZWN0LmtleXMoU3R5bGVzTWFuYWdlci5TdHlsZXMpLmZvckVhY2goc2VsZWN0b3IgPT5cbiAgICAgIHNoZWV0Lmluc2VydFJ1bGUoXG4gICAgICAgIHNlbGVjdG9yICsgXCIgeyBcIiArIFN0eWxlc01hbmFnZXIuU3R5bGVzW3NlbGVjdG9yXSArIFwiIH1cIixcbiAgICAgICAgMFxuICAgICAgKVxuICAgICk7XG4gIH1cbn1cblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9zdHlsZXNtYW5hZ2VyLnRzIiwiaW1wb3J0IHsgU3VydmV5SlNPTjUgfSBmcm9tIFwiLi9qc29uNVwiO1xuaW1wb3J0ICogYXMgU3VydmV5IGZyb20gXCJzdXJ2ZXkta25vY2tvdXRcIjtcblxuY2xhc3MgVGV4dFBhcnNlclByb3Blcnkge1xuICBpc0ZvdW5kOiBib29sZWFuO1xuICBwcm9wZXJ0aWVzQ291bnQ6IG51bWJlcjtcbiAgc3RhcnQ6IG51bWJlcjtcbiAgZW5kOiBudW1iZXI7XG4gIHZhbHVlU3RhcnQ6IG51bWJlcjtcbiAgdmFsdWVFbmQ6IG51bWJlcjtcbn1cblxuY2xhc3MgU3VydmV5Rm9yVGV4dFdvcmtlciBleHRlbmRzIFN1cnZleS5TdXJ2ZXkge1xuICBjb25zdHJ1Y3Rvcihqc29uT2JqOiBhbnkpIHtcbiAgICBzdXBlcihqc29uT2JqKTtcbiAgfVxuICBwdWJsaWMgZ2V0IGlzRGVzaWduTW9kZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgU3VydmV5VGV4dFdvcmtlciB7XG4gIHB1YmxpYyBzdGF0aWMgbmV3TGluZUNoYXI6IHN0cmluZztcbiAgcHVibGljIGVycm9yczogQXJyYXk8YW55PjtcbiAgcHJpdmF0ZSBzdXJ2ZXlWYWx1ZTogU3VydmV5LlN1cnZleTtcbiAgcHJpdmF0ZSBqc29uVmFsdWU6IGFueTtcbiAgcHJpdmF0ZSBzdXJ2ZXlPYmplY3RzOiBBcnJheTxhbnk+O1xuICBwcml2YXRlIGlzU3VydmV5QXNQYWdlOiBib29sZWFuO1xuXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyB0ZXh0OiBzdHJpbmcpIHtcbiAgICBpZiAoIXRoaXMudGV4dCB8fCB0aGlzLnRleHQudHJpbSgpID09IFwiXCIpIHtcbiAgICAgIHRoaXMudGV4dCA9IFwie31cIjtcbiAgICB9XG4gICAgdGhpcy5lcnJvcnMgPSBbXTtcbiAgICB0aGlzLnByb2Nlc3MoKTtcbiAgfVxuICBwdWJsaWMgZ2V0IHN1cnZleSgpOiBTdXJ2ZXkuU3VydmV5IHtcbiAgICByZXR1cm4gdGhpcy5zdXJ2ZXlWYWx1ZTtcbiAgfVxuICBwdWJsaWMgZ2V0IGlzSnNvbkNvcnJlY3QoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuc3VydmV5VmFsdWUgIT0gbnVsbDtcbiAgfVxuICBwcm90ZWN0ZWQgcHJvY2VzcygpIHtcbiAgICB0cnkge1xuICAgICAgdGhpcy5qc29uVmFsdWUgPSBuZXcgU3VydmV5SlNPTjUoMSkucGFyc2UodGhpcy50ZXh0KTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgdGhpcy5lcnJvcnMucHVzaCh7XG4gICAgICAgIHBvczogeyBzdGFydDogZXJyb3IuYXQsIGVuZDogLTEgfSxcbiAgICAgICAgdGV4dDogZXJyb3IubWVzc2FnZVxuICAgICAgfSk7XG4gICAgfVxuICAgIGlmICh0aGlzLmpzb25WYWx1ZSAhPSBudWxsKSB7XG4gICAgICB0aGlzLnVwZGF0ZUpzb25Qb3NpdGlvbnModGhpcy5qc29uVmFsdWUpO1xuICAgICAgdmFyIHB1cmVKc29uVmFsdWUgPSBuZXcgU3VydmV5SlNPTjUoKS5wYXJzZSh0aGlzLnRleHQpO1xuICAgICAgdGhpcy5zdXJ2ZXlWYWx1ZSA9IG5ldyBTdXJ2ZXlGb3JUZXh0V29ya2VyKHB1cmVKc29uVmFsdWUpO1xuICAgICAgaWYgKHRoaXMuc3VydmV5VmFsdWUuanNvbkVycm9ycyAhPSBudWxsKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5zdXJ2ZXlWYWx1ZS5qc29uRXJyb3JzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgdmFyIGVycm9yID0gdGhpcy5zdXJ2ZXlWYWx1ZS5qc29uRXJyb3JzW2ldO1xuICAgICAgICAgIHRoaXMuZXJyb3JzLnB1c2goe1xuICAgICAgICAgICAgcG9zOiB7IHN0YXJ0OiBlcnJvci5hdCwgZW5kOiAtMSB9LFxuICAgICAgICAgICAgdGV4dDogZXJyb3IuZ2V0RnVsbERlc2NyaXB0aW9uKClcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLnN1cnZleU9iamVjdHMgPSB0aGlzLmNyZWF0ZVN1cnZleU9iamVjdHMoKTtcbiAgICB0aGlzLnNldEVkaXRvclBvc2l0aW9uQnlDaGFydEF0KHRoaXMuc3VydmV5T2JqZWN0cyk7XG4gICAgdGhpcy5zZXRFZGl0b3JQb3NpdGlvbkJ5Q2hhcnRBdCh0aGlzLmVycm9ycyk7XG4gIH1cbiAgcHJpdmF0ZSB1cGRhdGVKc29uUG9zaXRpb25zKGpzb25PYmo6IGFueSkge1xuICAgIGpzb25PYmpbXCJwb3NcIl1bXCJzZWxmXCJdID0ganNvbk9iajtcbiAgICBmb3IgKHZhciBrZXkgaW4ganNvbk9iaikge1xuICAgICAgdmFyIG9iaiA9IGpzb25PYmpba2V5XTtcbiAgICAgIGlmIChvYmogJiYgb2JqW1wicG9zXCJdKSB7XG4gICAgICAgIGpzb25PYmpbXCJwb3NcIl1ba2V5XSA9IG9ialtcInBvc1wiXTtcbiAgICAgICAgdGhpcy51cGRhdGVKc29uUG9zaXRpb25zKG9iaik7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHByaXZhdGUgY3JlYXRlU3VydmV5T2JqZWN0cygpOiBBcnJheTxhbnk+IHtcbiAgICB2YXIgcmVzdWx0ID0gW107XG4gICAgaWYgKHRoaXMuc3VydmV5VmFsdWUgPT0gbnVsbCkgcmV0dXJuIHJlc3VsdDtcbiAgICB0aGlzLmlzU3VydmV5QXNQYWdlID0gZmFsc2U7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnN1cnZleVZhbHVlLnBhZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgcGFnZSA9IHRoaXMuc3VydmV5VmFsdWUucGFnZXNbaV07XG4gICAgICBpZiAoaSA9PSAwICYmICFwYWdlW1wicG9zXCJdKSB7XG4gICAgICAgIHBhZ2VbXCJwb3NcIl0gPSB0aGlzLnN1cnZleVZhbHVlW1wicG9zXCJdO1xuICAgICAgICB0aGlzLmlzU3VydmV5QXNQYWdlID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIHJlc3VsdC5wdXNoKHBhZ2UpO1xuICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBwYWdlLnF1ZXN0aW9ucy5sZW5ndGg7IGorKykge1xuICAgICAgICByZXN1bHQucHVzaChwYWdlLnF1ZXN0aW9uc1tqXSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbiAgcHJpdmF0ZSBzZXRFZGl0b3JQb3NpdGlvbkJ5Q2hhcnRBdChvYmplY3RzOiBhbnlbXSkge1xuICAgIGlmIChvYmplY3RzID09IG51bGwgfHwgb2JqZWN0cy5sZW5ndGggPT0gMCkgcmV0dXJuO1xuICAgIHZhciBwb3NpdGlvbiA9IHsgcm93OiAwLCBjb2x1bW46IDAgfTtcbiAgICB2YXIgYXRPYmplY3RzQXJyYXkgPSB0aGlzLmdldEF0QXJyYXkob2JqZWN0cyk7XG4gICAgdmFyIHN0YXJ0QXQ6IG51bWJlciA9IDA7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhdE9iamVjdHNBcnJheS5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGF0ID0gYXRPYmplY3RzQXJyYXlbaV0uYXQ7XG4gICAgICBwb3NpdGlvbiA9IHRoaXMuZ2V0UG9zdGlvbkJ5Q2hhcnRBdChwb3NpdGlvbiwgc3RhcnRBdCwgYXQpO1xuICAgICAgdmFyIG9iaiA9IGF0T2JqZWN0c0FycmF5W2ldLm9iajtcbiAgICAgIGlmICghb2JqLnBvc2l0aW9uKSBvYmoucG9zaXRpb24gPSB7fTtcbiAgICAgIGlmIChhdCA9PSBvYmoucG9zLnN0YXJ0KSB7XG4gICAgICAgIG9iai5wb3NpdGlvbi5zdGFydCA9IHBvc2l0aW9uO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGF0ID09IG9iai5wb3MuZW5kKSB7XG4gICAgICAgICAgb2JqLnBvc2l0aW9uLmVuZCA9IHBvc2l0aW9uO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBzdGFydEF0ID0gYXQ7XG4gICAgfVxuICB9XG4gIHByaXZhdGUgZ2V0UG9zdGlvbkJ5Q2hhcnRBdChcbiAgICBzdGFydFBvc2l0aW9uOiBhbnksXG4gICAgc3RhcnRBdDogbnVtYmVyLFxuICAgIGF0OiBudW1iZXJcbiAgKTogYW55IHtcbiAgICB2YXIgcmVzdWx0ID0geyByb3c6IHN0YXJ0UG9zaXRpb24ucm93LCBjb2x1bW46IHN0YXJ0UG9zaXRpb24uY29sdW1uIH07XG4gICAgdmFyIGN1ckNoYXIgPSBzdGFydEF0O1xuICAgIHdoaWxlIChjdXJDaGFyIDwgYXQpIHtcbiAgICAgIGlmICh0aGlzLnRleHQuY2hhckF0KGN1ckNoYXIpID09IFN1cnZleVRleHRXb3JrZXIubmV3TGluZUNoYXIpIHtcbiAgICAgICAgcmVzdWx0LnJvdysrO1xuICAgICAgICByZXN1bHQuY29sdW1uID0gMDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc3VsdC5jb2x1bW4rKztcbiAgICAgIH1cbiAgICAgIGN1ckNoYXIrKztcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuICBwcml2YXRlIGdldEF0QXJyYXkob2JqZWN0czogYW55W10pOiBhbnlbXSB7XG4gICAgdmFyIHJlc3VsdCA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgb2JqZWN0cy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIG9iaiA9IG9iamVjdHNbaV07XG4gICAgICB2YXIgcG9zID0gb2JqLnBvcztcbiAgICAgIGlmICghcG9zKSBjb250aW51ZTtcbiAgICAgIHJlc3VsdC5wdXNoKHsgYXQ6IHBvcy5zdGFydCwgb2JqOiBvYmogfSk7XG4gICAgICBpZiAocG9zLmVuZCA+IDApIHtcbiAgICAgICAgcmVzdWx0LnB1c2goeyBhdDogcG9zLmVuZCwgb2JqOiBvYmogfSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQuc29ydCgoZWwxLCBlbDIpID0+IHtcbiAgICAgIGlmIChlbDEuYXQgPiBlbDIuYXQpIHJldHVybiAxO1xuICAgICAgaWYgKGVsMS5hdCA8IGVsMi5hdCkgcmV0dXJuIC0xO1xuICAgICAgcmV0dXJuIDA7XG4gICAgfSk7XG4gIH1cbn1cblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy90ZXh0V29ya2VyLnRzIiwiaW1wb3J0ICogYXMga28gZnJvbSBcImtub2Nrb3V0XCI7XG5pbXBvcnQgeyBlZGl0b3JMb2NhbGl6YXRpb24gfSBmcm9tIFwiLi9lZGl0b3JMb2NhbGl6YXRpb25cIjtcbmltcG9ydCB7IFN1cnZleU9iamVjdEVkaXRvciB9IGZyb20gXCIuL29iamVjdEVkaXRvclwiO1xuaW1wb3J0IHtcbiAgSVN1cnZleU9iamVjdEVkaXRvck9wdGlvbnMsXG4gIFN1cnZleVByb3BlcnR5RWRpdG9yQmFzZVxufSBmcm9tIFwiLi9wcm9wZXJ0eUVkaXRvcnMvcHJvcGVydHlFZGl0b3JCYXNlXCI7XG5pbXBvcnQgeyBTdXJ2ZXlMaXZlVGVzdGVyIH0gZnJvbSBcIi4vc3VydmV5bGl2ZVwiO1xuaW1wb3J0IHsgU3VydmV5RW1iZWRpbmdXaW5kb3cgfSBmcm9tIFwiLi9zdXJ2ZXlFbWJlZGluZ1dpbmRvd1wiO1xuaW1wb3J0IHsgU3VydmV5T2JqZWN0cyB9IGZyb20gXCIuL3N1cnZleU9iamVjdHNcIjtcbmltcG9ydCB7IFF1ZXN0aW9uQ29udmVydGVyIH0gZnJvbSBcIi4vcXVlc3Rpb25jb252ZXJ0ZXJcIjtcbmltcG9ydCB7IFN1cnZleVByb3BlcnR5RWRpdG9yU2hvd1dpbmRvdyB9IGZyb20gXCIuL3F1ZXN0aW9uRWRpdG9ycy9xdWVzdGlvbkVkaXRvclwiO1xuaW1wb3J0IHsgU3VydmV5SlNPTkVkaXRvciB9IGZyb20gXCIuL3N1cnZleUpTT05FZGl0b3JcIjtcbmltcG9ydCB7IFN1cnZleVRleHRXb3JrZXIgfSBmcm9tIFwiLi90ZXh0V29ya2VyXCI7XG5pbXBvcnQgeyBTdXJ2ZXlVbmRvUmVkbywgVW5kb1JlZG9JdGVtIH0gZnJvbSBcIi4vdW5kb3JlZG9cIjtcbmltcG9ydCB7IFN1cnZleUhlbHBlciwgT2JqVHlwZSB9IGZyb20gXCIuL3N1cnZleUhlbHBlclwiO1xuaW1wb3J0IHsgRHJhZ0Ryb3BIZWxwZXIgfSBmcm9tIFwiLi9kcmFnZHJvcGhlbHBlclwiO1xuaW1wb3J0IHsgUXVlc3Rpb25Ub29sYm94IH0gZnJvbSBcIi4vcXVlc3Rpb25Ub29sYm94XCI7XG5pbXBvcnQgeyBTdXJ2ZXlKU09ONSB9IGZyb20gXCIuL2pzb241XCI7XG52YXIgdGVtcGxhdGVFZGl0b3JIdG1sID0gcmVxdWlyZShcImh0bWwtbG9hZGVyP2ludGVycG9sYXRlIXZhbC1sb2FkZXIhLi90ZW1wbGF0ZXMvZW50cnkuaHRtbFwiKTtcbmltcG9ydCAqIGFzIFN1cnZleSBmcm9tIFwic3VydmV5LWtub2Nrb3V0XCI7XG5pbXBvcnQgeyBTdXJ2ZXlGb3JEZXNpZ25lciwgY3JlYXRlQWZ0ZXJSZW5kZXJIYW5kbGVyIH0gZnJvbSBcIi4vc3VydmV5anNPYmplY3RzXCI7XG5pbXBvcnQgeyBTdHlsZXNNYW5hZ2VyIH0gZnJvbSBcIi4vc3R5bGVzbWFuYWdlclwiO1xuaW1wb3J0IHsgaXRlbUFkb3JuZXIgfSBmcm9tIFwiLi9hZG9ybmVycy9pdGVtLWVkaXRvclwiO1xuaW1wb3J0IHsgVHJhbnNsYXRpb24gfSBmcm9tIFwiLi90cmFuc2xhdGlvblwiO1xuaW1wb3J0IHsgU3VydmV5TG9naWMgfSBmcm9tIFwiLi9sb2dpY1wiO1xuXG4vKipcbiAqIFRoZSB0b29sYmFyIGl0ZW0gZGVzY3JpcHRpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSVRvb2xiYXJJdGVtIHtcbiAgLyoqXG4gICAqIFVuaXF1ZSBzdHJpbmcgaWRcbiAgICovXG4gIGlkOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBTZXQgdGhpcyBwcm9wZXJ0eSB0byBmYWxzZSB0byBtYWtlIHRoZSB0b29sYmFyIGl0ZW0gaW52aXNpYmxlLlxuICAgKi9cbiAgdmlzaWJsZToga28uQ29tcHV0ZWQ8Ym9vbGVhbj4gfCBrby5PYnNlcnZhYmxlPGJvb2xlYW4+IHwgYm9vbGVhbjtcbiAgLyoqXG4gICAqIFRvb2xiYXIgaXRlbSB0aXRsZVxuICAgKi9cbiAgdGl0bGU6IGtvLkNvbXB1dGVkPHN0cmluZz4gfCBzdHJpbmc7XG4gIC8qKlxuICAgKiBTZXQgdGhpcyBwcm9wZXJ0eSB0byBmYWxzZSB0byBkaXNhYmxlIHRoZSB0b29sYmFyIGl0ZW0uXG4gICAqL1xuICBlbmFibGVkPzoga28uQ29tcHV0ZWQ8Ym9vbGVhbj4gfCBib29sZWFuO1xuICAvKipcbiAgICogU2V0IHRoaXMgcHJvcGVydHkgdG8gZmFsc2UgdG8gaGlkZSB0aGUgdG9vbGJhciBpdGVtIHRpdGxlLlxuICAgKi9cbiAgc2hvd1RpdGxlPzoga28uQ29tcHV0ZWQ8Ym9vbGVhbj4gfCBib29sZWFuO1xuICAvKipcbiAgICogQSBjYWxsYmFjayB0aGF0IGNhbGxzIG9uIHRvb2xiYXIgaXRlbSBjbGljay5cbiAgICovXG4gIGFjdGlvbj86ICgpID0+IHZvaWQ7XG4gIC8qKlxuICAgKiBUb29sYmFyIGl0ZW0gY3NzIGNsYXNzXG4gICAqL1xuICBjc3M/OiBrby5Db21wdXRlZDxzdHJpbmc+IHwgc3RyaW5nO1xuICBpbm5lckNzcz86IGtvLkNvbXB1dGVkPHN0cmluZz4gfCBzdHJpbmc7XG4gIGRhdGE/OiBhbnk7XG4gIHRlbXBsYXRlPzogc3RyaW5nO1xuICAvKipcbiAgICogVG9vbGJhciBpdGVtIGljb24gbmFtZVxuICAgKi9cbiAgaWNvbj86IHN0cmluZztcbiAgaXRlbXM/OiBrby5PYnNlcnZhYmxlQXJyYXk8SVRvb2xiYXJJdGVtPjtcbn1cblxuLyoqXG4gKiBTdXJ2ZXkgQ3JlYXRvciBpcyBXWVNJV1lHIGVkaXRvci5cbiAqL1xuXG5leHBvcnQgY2xhc3MgU3VydmV5Q3JlYXRvciBpbXBsZW1lbnRzIElTdXJ2ZXlPYmplY3RFZGl0b3JPcHRpb25zIHtcbiAgcHVibGljIHN0YXRpYyBkZWZhdWx0TmV3U3VydmV5VGV4dDogc3RyaW5nID0gXCJ7IHBhZ2VzOiBbIHsgbmFtZTogJ3BhZ2UxJ31dIH1cIjtcbiAgcHJpdmF0ZSBfaGF2ZUNvbW1lcmNpYWxMaWNlbnNlID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG4gIHByaXZhdGUgcmVuZGVyZWRFbGVtZW50OiBIVE1MRWxlbWVudDtcbiAgcHJpdmF0ZSBzdXJ2ZXlqczogSFRNTEVsZW1lbnQ7XG5cbiAgcHJpdmF0ZSBqc29uRWRpdG9yOiBTdXJ2ZXlKU09ORWRpdG9yO1xuICBwdWJsaWMgc2VsZWN0ZWRPYmplY3RFZGl0b3JWYWx1ZTogU3VydmV5T2JqZWN0RWRpdG9yO1xuICBwcml2YXRlIHF1ZXN0aW9uRWRpdG9yV2luZG93OiBTdXJ2ZXlQcm9wZXJ0eUVkaXRvclNob3dXaW5kb3c7XG5cbiAgcHVibGljIHBhZ2VzOiBrby5PYnNlcnZhYmxlQXJyYXk8U3VydmV5LlBhZ2VNb2RlbD47XG4gIHB1YmxpYyBzZWxlY3RQYWdlOiBGdW5jdGlvbjtcblxuICBwcml2YXRlIHN1cnZleUxpdmU6IFN1cnZleUxpdmVUZXN0ZXI7XG4gIHByaXZhdGUgc3VydmV5RW1iZWRpbmc6IFN1cnZleUVtYmVkaW5nV2luZG93O1xuICBwcml2YXRlIHRyYW5zbGF0aW9uVmFsdWU6IFRyYW5zbGF0aW9uO1xuICBwcml2YXRlIGxvZ2ljVmFsdWU6IFN1cnZleUxvZ2ljO1xuICBwcml2YXRlIHN1cnZleU9iamVjdHM6IFN1cnZleU9iamVjdHM7XG4gIHByaXZhdGUgdG9vbGJveFZhbHVlOiBRdWVzdGlvblRvb2xib3g7XG4gIHByaXZhdGUgdW5kb1JlZG86IFN1cnZleVVuZG9SZWRvO1xuICBwcml2YXRlIHN1cnZleVZhbHVlID0ga28ub2JzZXJ2YWJsZTxTdXJ2ZXlGb3JEZXNpZ25lcj4oKTtcbiAgcHJpdmF0ZSBzYXZlU3VydmV5RnVuY1ZhbHVlOiAoXG4gICAgbm86IG51bWJlcixcbiAgICBvblNhdmVDYWxsYmFjazogKG5vOiBudW1iZXIsIGlzU3VjY2VzczogYm9vbGVhbikgPT4gdm9pZFxuICApID0+IHZvaWQ7XG4gIHByaXZhdGUgb3B0aW9uczogYW55O1xuICBwcml2YXRlIHN0YXRlVmFsdWU6IHN0cmluZyA9IFwiXCI7XG4gIHByaXZhdGUgZHJhZ0Ryb3BIZWxwZXI6IERyYWdEcm9wSGVscGVyID0gbnVsbDtcbiAgcHJpdmF0ZSBzaG93SlNPTkVkaXRvclRhYlZhbHVlID0ga28ub2JzZXJ2YWJsZTxib29sZWFuPihmYWxzZSk7XG4gIHByaXZhdGUgc2hvd1Rlc3RTdXJ2ZXlUYWJWYWx1ZSA9IGtvLm9ic2VydmFibGU8Ym9vbGVhbj4oZmFsc2UpO1xuICBwcml2YXRlIHNob3dFbWJlZGVkU3VydmV5VGFiVmFsdWUgPSBrby5vYnNlcnZhYmxlPGJvb2xlYW4+KGZhbHNlKTtcbiAgcHJpdmF0ZSBzaG93VHJhbnNsYXRpb25UYWJWYWx1ZSA9IGtvLm9ic2VydmFibGU8Ym9vbGVhbj4oZmFsc2UpO1xuICBwcml2YXRlIHNob3dMb2dpY1RhYlZhbHVlID0ga28ub2JzZXJ2YWJsZTxib29sZWFuPihmYWxzZSk7XG4gIHByaXZhdGUgc2VsZWN0MjogYW55ID0gbnVsbDtcbiAgcHJpdmF0ZSBhbHdheVNhdmVUZXh0SW5Qcm9wZXJ0eUVkaXRvcnNWYWx1ZTogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIHNob3dBcHBseUJ1dHRvblZhbHVlOiBib29sZWFuID0gdHJ1ZTtcbiAgcHJpdmF0ZSBpc1JUTFZhbHVlOiBib29sZWFuID0gZmFsc2U7XG4gIC8qKlxuICAgKiBJZiBzZXQgdG8gdHJ1ZSAoZGVmYXVsdCB2YWx1ZSkgdGhlIGNyZWF0b3Igc2Nyb2xscyB0byBhIG5ldyBlbGVtZW50LiBBIG5ldyBlbGVtZW50IGNhbiBiZSBhZGRlZCBmcm9tIFRvb2xib3ggb3IgYnkgY29weWluZy5cbiAgICovXG4gIHB1YmxpYyBzY3JvbGxUb05ld0VsZW1lbnQ6IGJvb2xlYW4gPSB0cnVlO1xuXG4gIC8qKlxuICAgKiBZb3UgaGF2ZSByaWdodCB0byBzZXQgdGhpcyBwcm9wZXJ0eSB0byB0cnVlIGlmIHlvdSBoYXZlIGJvdWdodCB0aGUgY29tbWVyY2lhbCBsaWNlbmNlIG9ubHkuXG4gICAqIEl0IHdpbGwgcmVtb3ZlIHRoZSB0ZXh0IGFib3V0IG5vbi1jb21tZXJpY2FsIHVzYWdlIG9uIHRoZSB0b3Agb2YgdGhlIHdpZGdldC5cbiAgICogU2V0dGluZyB0aGlzIHByb3BlcnR5IHRydWUgd2l0aG91dCBoYXZpbmcgYSBjb21tZXJjaWFsIGxpY2VuY2UgaXMgaWxsZWdhbC5cbiAgICogQHNlZSBoYXZlQ29tbWVyY2lhbExpY2Vuc2VcbiAgICovXG4gIHB1YmxpYyBnZXQgaGF2ZUNvbW1lcmNpYWxMaWNlbnNlKCkge1xuICAgIHJldHVybiB0aGlzLl9oYXZlQ29tbWVyY2lhbExpY2Vuc2UoKTtcbiAgfVxuICBwdWJsaWMgc2V0IGhhdmVDb21tZXJjaWFsTGljZW5zZSh2YWwpIHtcbiAgICB0aGlzLl9oYXZlQ29tbWVyY2lhbExpY2Vuc2UodmFsKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBZb3UgbmVlZCB0byBzZXQgdGhpcyBwcm9wZXJ0eSB0byB0cnVlIGlmIHlvdSB3YW50IHRvIGlucGxhY2UgZWRpdCBpdGVtIHZhbHVlcyBpbnN0ZWFkIG9mIHRleHRzLlxuICAgKiBAc2VlIGlucGxhY2VFZGl0Rm9yVmFsdWVzXG4gICAqL1xuICBwdWJsaWMgZ2V0IGlucGxhY2VFZGl0Rm9yVmFsdWVzKCkge1xuICAgIHJldHVybiBpdGVtQWRvcm5lci5pbnBsYWNlRWRpdEZvclZhbHVlcztcbiAgfVxuICBwdWJsaWMgc2V0IGlucGxhY2VFZGl0Rm9yVmFsdWVzKHZhbCkge1xuICAgIGl0ZW1BZG9ybmVyLmlucGxhY2VFZGl0Rm9yVmFsdWVzID0gdmFsO1xuICB9XG5cbiAgLyoqXG4gICAqIFlvdSBuZWVkIHRvIHNldCB0aGlzIHByb3BlcnR5IHRvIHRydWUgaWYgeW91IHdhbnQgdG8gdXNlIHRhYnMgaW5zdGVhZCBvZiBhY2NvcmRpb24gaW4gdGhlIHBvcHVwIGVsZW1lbnQncyBlZGl0b3IuXG4gICAqIEBzZWUgdXNlVGFic0luRWxlbWVudEVkaXRvclxuICAgKi9cbiAgcHVibGljIHVzZVRhYnNJbkVsZW1lbnRFZGl0b3IgPSBmYWxzZTtcblxuICAvKipcbiAgICogWW91IG5lZWQgdG8gc2V0IHRoaXMgcHJvcGVydHkgdG8gdHJ1ZSBpZiB5b3Ugd2FudCB0byBzaG93IHRpdGxlcyBpbnN0ZWFkIG9mIG5hbWVzIGluIHBhZ2VzIGVkaXRvciBhbmQgb2JqZWN0IHNlbGVjdG9yLlxuICAgKiBAc2VlIG9uU2hvd09iamVjdERpc3BsYXlOYW1lXG4gICAqL1xuICBwdWJsaWMgc2hvd09iamVjdFRpdGxlcyA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBZb3UgbmVlZCB0byBzZXQgdGhpcyBwcm9wZXJ0eSB0byB0cnVlIGlmIHlvdSB3YW50IHRvIHNob3cgdGl0bGVzIGluc3RlYWQgb2YgbmFtZXMgaW4gZXhwcmVzc2lvbiBlZGl0b3IuXG4gICAqL1xuICBwdWJsaWMgc2hvd1RpdGxlc0luRXhwcmVzc2lvbnMgPSBmYWxzZTtcblxuICAvKipcbiAgICogU2V0IHRoaXMgcHJvcGVydHkgdG8gZmFsc2UgdG8gaGlkZSB0aGUgcGFnZXMgc2VsZWN0b3IgaW4gdGhlIFRlc3QgU3VydmV5IFRhYlxuICAgKi9cbiAgcHVibGljIHNob3dQYWdlc0luVGVzdFN1cnZleVRhYiA9IHRydWU7XG5cbiAgLyoqXG4gICAqIFNldCB0aGlzIHByb3BlcnR5IHRvIGZhbHNlIHRvIGRpc2FibGUgcGFnZXMgYWRkaW5nLCBlZGl0aW5nIGFuZCBkZWxldGluZ1xuICAgKi9cbiAgcHVibGljIGFsbG93TW9kaWZ5UGFnZXMgPSB0cnVlO1xuXG4gIC8qKlxuICAgKiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBfXCJhdXRvXCJfLiBJdCBzaG93cyB0aGUgbGFuZ3VhZ2Ugc2VsZWN0b3IgaWYgdGhlcmUgYXJlIG1vcmUgdGhhbiB0d28gbGFuZ3VhZ2VzIGFyZSB1c2luZyBpbiB0aGUgc3VydmV5LlxuICAgKiBJdCBzaG93cyBvbmx5IHVzZWQgbGFuZ3VhZ2VzIGluIHRoZSBzdXJ2ZXkuXG4gICAqIFNldCB0aGlzIHByb3BlcnR5IHRvIF9mYWxzZV8gdG8gaGlkZSB0aGUgZGVmYXVsdCBsYW5ndWFnZSBzZWxlY3RvciBpbiB0aGUgVGVzdCBTdXJ2ZXkgVGFiLlxuICAgKiBTZXQgaXQgdG8gX3RydWVfIHRvIHNob3cgdGhpcyBzZWxlY3RvciBldmVuIGlmIHRoZXJlIGlzIG9ubHkgb25lIGxhbmd1YWdlIGluIHRoZSBzdXJ2ZXlcbiAgICogU2V0IGl0IHRvIF9hbGxfIHRvIHNob3cgdGhlIHNlbGVjdG9yIHdpdGggYWxsIGF2YWlsYWJsZSBsYW5ndWFnZXMgKDMwKylcbiAgICovXG4gIHB1YmxpYyBzaG93RGVmYXVsdExhbmd1YWdlSW5UZXN0U3VydmV5VGFiOiBib29sZWFuIHwgc3RyaW5nID0gXCJhdXRvXCI7XG5cbiAgLyoqXG4gICAqIFNldCB0aGlzIHByb3BlcnR5IHRvIGZhbHNlIHRvIGhpZGUgdGhlIHNob3cgaW52aXNpYmxlIGVsZW1lbnQgY2hlY2tib3ggaW4gdGhlIFRlc3QgU3VydmV5IFRhYlxuICAgKi9cbiAgcHVibGljIHNob3dJbnZpc2libGVFbGVtZW50c0luVGVzdFN1cnZleVRhYiA9IHRydWU7XG5cbiAgLyoqXG4gICAqIFRoaXMgcHJvcGVydHkgaXMgYXNzaWduIHRvIHRoZSBzdXJ2ZXkuc3VydmV5SWQgcHJvcGVydHkgb24gc2hvd2luZyBpbiB0aGUgXCJFbWJlZCBTdXJ2ZXlcIiB0YWIuXG4gICAqIEBzZWUgc2hvd0VtYmVkZWRTdXJ2ZXlUYWJcbiAgICovXG4gIHB1YmxpYyBzdXJ2ZXlJZDogc3RyaW5nID0gbnVsbDtcbiAgLyoqXG4gICAqIFRoaXMgcHJvcGVydHkgaXMgYXNzaWduIHRvIHRoZSBzdXJ2ZXkuc3VydmV5UG9zdElkIHByb3BlcnR5IG9uIHNob3dpbmcgaW4gdGhlIFwiRW1iZWQgU3VydmV5XCIgdGFiLlxuICAgKiBAc2VlIHNob3dFbWJlZGVkU3VydmV5VGFiXG4gICAqL1xuICBwdWJsaWMgc3VydmV5UG9zdElkOiBzdHJpbmcgPSBudWxsO1xuICAvKipcbiAgICogVGhpcyBjYWxsYmFjayBpcyBjYWxsZWQgb24gY2hhbmdpbmcgXCJHZW5lcmF0ZSBWYWxpZCBKU09OXCIgb3B0aW9uLlxuICAgKi9cbiAgcHVibGljIGdlbmVyYXRlVmFsaWRKU09OQ2hhbmdlZENhbGxiYWNrOiAoZ2VuZXJhdGVWYWxpZEpTT046IGJvb2xlYW4pID0+IHZvaWQ7XG4gIC8qKlxuICAgKiBUaGUgZXZlbnQgaXMgY2FsbGVkIGJlZm9yZSB1bmRvIGhhcHBlbnMuXG4gICAqIDxici8+IG9wdGlvbnMuY2FuVW5kbyBhIGJvb2xlYW4gdmFsdWUuIEl0IGlzIHRydWUgYnkgZGVmYXVsdC4gU2V0IGl0IGZhbHNlIHRvIGhpZGUgcHJldmVudCB1bmRvIG9wZXJhdGlvbi5cbiAgICovXG4gIHB1YmxpYyBvbkJlZm9yZVVuZG86IFN1cnZleS5FdmVudDxcbiAgICAoc2VuZGVyOiBTdXJ2ZXlDcmVhdG9yLCBvcHRpb25zOiBhbnkpID0+IGFueSxcbiAgICBhbnlcbiAgPiA9IG5ldyBTdXJ2ZXkuRXZlbnQ8KHNlbmRlcjogU3VydmV5Q3JlYXRvciwgb3B0aW9uczogYW55KSA9PiBhbnksIGFueT4oKTtcbiAgLyoqXG4gICAqIFRoZSBldmVudCBpcyBjYWxsZWQgYmVmb3JlIHJlZG8gaGFwcGVucy5cbiAgICogPGJyLz4gb3B0aW9ucy5jYW5SZWRvIGEgYm9vbGVhbiB2YWx1ZS4gSXQgaXMgdHJ1ZSBieSBkZWZhdWx0LiBTZXQgaXQgZmFsc2UgdG8gaGlkZSBwcmV2ZW50IHJlZG8gb3BlcmF0aW9uLlxuICAgKi9cbiAgcHVibGljIG9uQmVmb3JlUmVkbzogU3VydmV5LkV2ZW50PFxuICAgIChzZW5kZXI6IFN1cnZleUNyZWF0b3IsIG9wdGlvbnM6IGFueSkgPT4gYW55LFxuICAgIGFueVxuICA+ID0gbmV3IFN1cnZleS5FdmVudDwoc2VuZGVyOiBTdXJ2ZXlDcmVhdG9yLCBvcHRpb25zOiBhbnkpID0+IGFueSwgYW55PigpO1xuICAvKipcbiAgICogVGhlIGV2ZW50IGlzIGNhbGxlZCBhZnRlciB1bmRvIGhhcHBlbnMuXG4gICAqIDxici8+IG9wdGlvbnMuc3RhdGUgaXMgYW4gdW5kby9yZWRvIGl0ZW0uXG4gICAqL1xuICBwdWJsaWMgb25BZnRlclVuZG86IFN1cnZleS5FdmVudDxcbiAgICAoc2VuZGVyOiBTdXJ2ZXlDcmVhdG9yLCBvcHRpb25zOiBhbnkpID0+IGFueSxcbiAgICBhbnlcbiAgPiA9IG5ldyBTdXJ2ZXkuRXZlbnQ8KHNlbmRlcjogU3VydmV5Q3JlYXRvciwgb3B0aW9uczogYW55KSA9PiBhbnksIGFueT4oKTtcbiAgLyoqXG4gICAqIFRoZSBldmVudCBpcyBjYWxsZWQgYWZ0ZXIgcmVkbyBoYXBwZW5zLlxuICAgKiA8YnIvPiBvcHRpb25zLnN0YXRlIGlzIGFuIHVuZG8vcmVkbyBpdGVtLlxuICAgKi9cbiAgcHVibGljIG9uQWZ0ZXJSZWRvOiBTdXJ2ZXkuRXZlbnQ8XG4gICAgKHNlbmRlcjogU3VydmV5Q3JlYXRvciwgb3B0aW9uczogYW55KSA9PiBhbnksXG4gICAgYW55XG4gID4gPSBuZXcgU3VydmV5LkV2ZW50PChzZW5kZXI6IFN1cnZleUNyZWF0b3IsIG9wdGlvbnM6IGFueSkgPT4gYW55LCBhbnk+KCk7XG4gIC8qKlxuICAgKiBUaGUgZXZlbnQgaXMgY2FsbGVkIG9uIGNoYW5naW5nIHRoZSBzZWxlY3RlZCBlbGVtZW50LiBZb3UgbWF5IGNoYW5nZSB0aGUgbmV3IHNlbGVjdGVkIGVsZW1lbnQgYnkgY2hhbmdpbmcgdGhlIHByb3BlcnR5IG9wdGlvbnMubmV3U2VsZWN0ZWRFbGVtZW50IHRvIHlvdXIgb3duXG4gICAqIDxici8+IG9wdGlvbnMubmV3U2VsZWN0ZWRFbGVtZW50IHRoZSBlbGVtZW50IHRoYXQgaXMgZ29pbmcgdG8gYmUgc2VsZWN0ZWQgaW4gdGhlIHN1cnZleSBkZXNpZ2VyOiBxdWVzdGlvbiwgcGFuZWwsIHBhZ2Ugb3Igc3VydmV5LlxuICAgKi9cbiAgcHVibGljIG9uU2VsZWN0ZWRFbGVtZW50Q2hhbmdpbmc6IFN1cnZleS5FdmVudDxcbiAgICAoc2VuZGVyOiBTdXJ2ZXlDcmVhdG9yLCBvcHRpb25zOiBhbnkpID0+IGFueSxcbiAgICBhbnlcbiAgPiA9IG5ldyBTdXJ2ZXkuRXZlbnQ8KHNlbmRlcjogU3VydmV5Q3JlYXRvciwgb3B0aW9uczogYW55KSA9PiBhbnksIGFueT4oKTtcbiAgLyoqXG4gICAqIFRoZSBldmVudCBpcyBjYWxsZWQgYWZ0ZXIgdGhlIHNlbGVjdGVkIGVsZW1lbnQgaXMgY2hhbmdlZC5cbiAgICogPGJyLz4gb3B0aW9ucy5uZXdTZWxlY3RlZEVsZW1lbnQgdGhlIG5ldyBzZWxlY3RlZCBlbGVtZW50IGluIHRoZSBzdXJ2ZXkgZGVzaWdlcjogcXVlc3Rpb24sIHBhbmVsLCBwYWdlIG9yIHN1cnZleS5cbiAgICovXG4gIHB1YmxpYyBvblNlbGVjdGVkRWxlbWVudENoYW5nZWQ6IFN1cnZleS5FdmVudDxcbiAgICAoc2VuZGVyOiBTdXJ2ZXlDcmVhdG9yLCBvcHRpb25zOiBhbnkpID0+IGFueSxcbiAgICBhbnlcbiAgPiA9IG5ldyBTdXJ2ZXkuRXZlbnQ8KHNlbmRlcjogU3VydmV5Q3JlYXRvciwgb3B0aW9uczogYW55KSA9PiBhbnksIGFueT4oKTtcbiAgLyoqXG4gICAqIFRoZSBldmVudCBpcyBjYWxsZWQgYmVmb3JlIHNob3dpbmcgYSBwcm9wZXJ0eSBpbiB0aGUgUHJvcGVydHkgR3JpZCBvciBpbiBRdWVzdGlvbiBFZGl0b3IuXG4gICAqIDxici8+IHNlbmRlciB0aGUgc3VydmV5IGNyZWF0b3Igb2JqZWN0IHRoYXQgZmlyZXMgdGhlIGV2ZW50XG4gICAqIDxici8+IG9wdGlvbnMub2JqIHRoZSBzdXJ2ZXkgb2JqZWN0LCBTdXJ2ZXksIFBhZ2UsIFBhbmVsIG9yIFF1ZXN0aW9uXG4gICAqIDxici8+IG9wdGlvbnMucHJvcGVydHkgdGhlIG9iamVjdCBwcm9wZXJ0eSAoU3VydmV5Lkpzb25PYmplY3RQcm9wZXJ0eSBvYmplY3QpLiBJdCBoYXMgbmFtZSwgY2xhc3NOYW1lLCB0eXBlLCB2aXNpYmxlLCByZWFkT25seSBhbmQgb3RoZXIgcHJvcGVydGllcy5cbiAgICogPGJyLz4gb3B0aW9ucy5jYW5TaG93IGEgYm9vbGVhbiB2YWx1ZS4gSXQgaXMgdHJ1ZSBieSBkZWZhdWx0LiBTZXQgaXQgZmFsc2UgdG8gaGlkZSB0aGUgcHJvcGVydHkgZnJvbSB0aGUgUHJvcGVydHkgR3JpZCBhbmQgaW4gUXVlc3Rpb24gRWRpdG9yLlxuICAgKi9cbiAgcHVibGljIG9uU2hvd2luZ1Byb3BlcnR5OiBTdXJ2ZXkuRXZlbnQ8XG4gICAgKHNlbmRlcjogU3VydmV5Q3JlYXRvciwgb3B0aW9uczogYW55KSA9PiBhbnksXG4gICAgYW55XG4gID4gPSBuZXcgU3VydmV5LkV2ZW50PChzZW5kZXI6IFN1cnZleUNyZWF0b3IsIG9wdGlvbnM6IGFueSkgPT4gYW55LCBhbnk+KCk7XG4gIC8qKlxuICAgKiBPYnNvbGV0ZSwgcGxlYXNlIHVzZSBvblNob3dpbmdQcm9wZXJ0eSBldmVudC5cbiAgICogVGhlIGV2ZW50IGlzIGNhbGxlZCBiZWZvcmUgc2hvd2luZyBhIHByb3BlcnR5IGluIHRoZSBQcm9wZXJ0eSBHcmlkIG9yIGluIFF1ZXN0aW9uIEVkaXRvci5cbiAgICogPGJyLz4gc2VuZGVyIHRoZSBzdXJ2ZXkgY3JlYXRvciBvYmplY3QgdGhhdCBmaXJlcyB0aGUgZXZlbnRcbiAgICogPGJyLz4gb3B0aW9ucy5vYmogdGhlIHN1cnZleSBvYmplY3QsIFN1cnZleSwgUGFnZSwgUGFuZWwgb3IgUXVlc3Rpb25cbiAgICogPGJyLz4gb3B0aW9ucy5wcm9wZXJ0eSB0aGUgb2JqZWN0IHByb3BlcnR5IChTdXJ2ZXkuSnNvbk9iamVjdFByb3BlcnR5IG9iamVjdCkuIEl0IGhhcyBuYW1lLCBjbGFzc05hbWUsIHR5cGUsIHZpc2libGUsIHJlYWRPbmx5IGFuZCBvdGhlciBwcm9wZXJ0aWVzLlxuICAgKiA8YnIvPiBvcHRpb25zLmNhblNob3cgYSBib29sZWFuIHZhbHVlLiBJdCBpcyB0cnVlIGJ5IGRlZmF1bHQuIFNldCBpdCBmYWxzZSB0byBoaWRlIHRoZSBwcm9wZXJ0eSBmcm9tIHRoZSBQcm9wZXJ0eSBHcmlkIG9yIGluIFF1ZXN0aW9uIEVkaXRvclxuICAgKiBAc2VlIG9uU2hvd2luZ1Byb3BlcnR5XG4gICAqL1xuICBwdWJsaWMgb25DYW5TaG93UHJvcGVydHk6IFN1cnZleS5FdmVudDxcbiAgICAoc2VuZGVyOiBTdXJ2ZXlDcmVhdG9yLCBvcHRpb25zOiBhbnkpID0+IGFueSxcbiAgICBhbnlcbiAgPiA9IHRoaXMub25TaG93aW5nUHJvcGVydHk7XG4gIC8qKlxuICAgKiBUaGUgZXZlbnQgaXMgY2FsbGVkIHdoZW4gY3JlYXRvciB0YWIgaGFzIGJlZW4gcmVuZGVyZWQuXG4gICAqIDxici8+IHNlbmRlciB0aGUgc3VydmV5IGNyZWF0b3Igb2JqZWN0IHRoYXQgZmlyZXMgdGhlIGV2ZW50XG4gICAqIDxici8+IG9wdGlvbnMudGFiTmFtZSB0aGUgbmFtZSBvZiB0aGUgcmVuZGVyZWQgdGFiXG4gICAqIDxici8+IG9wdGlvbnMuZWxlbWVudHMgdGhlIHJlbmRlcmVkIGVsZW1lbnRzXG4gICAqIDxici8+IG9wdGlvbnMubW9kZWwgY3VycmVudCBjb250ZXh0IG1vZGVsXG4gICAqIDxici8+IG9wdGlvbnMudGFiRGF0YSB0aGUgZGF0YSBvZiB0aGUgcmVuZGVyZWQgdGFiXG4gICAqL1xuICBwdWJsaWMgb25FZGl0b3JUYWJSZW5kZXJlZDogU3VydmV5LkV2ZW50PFxuICAgIChzZW5kZXI6IFN1cnZleUNyZWF0b3IsIG9wdGlvbnM6IGFueSkgPT4gYW55LFxuICAgIGFueVxuICA+ID0gbmV3IFN1cnZleS5FdmVudDwoc2VuZGVyOiBTdXJ2ZXlDcmVhdG9yLCBvcHRpb25zOiBhbnkpID0+IGFueSwgYW55PigpO1xuICAvKipcbiAgICogVGhlIGV2ZW50IGlzIGNhbGxlZCB3aGVuIGNyZWF0b3IgYWN0aXZlIHRhYiBpcyBjaGFuZ2VkLlxuICAgKiA8YnIvPiBzZW5kZXIgdGhlIHN1cnZleSBjcmVhdG9yIG9iamVjdCB0aGF0IGZpcmVzIHRoZSBldmVudFxuICAgKiA8YnIvPiBvcHRpb25zLnRhYk5hbWUgdGhlIG5hbWUgb2YgbmV3IGFjdGl2ZSB0YWJcbiAgICovXG4gIHB1YmxpYyBvbkFjdGl2ZVRhYkNoYW5nZWQ6IFN1cnZleS5FdmVudDxcbiAgICAoc2VuZGVyOiBTdXJ2ZXlDcmVhdG9yLCBvcHRpb25zOiBhbnkpID0+IGFueSxcbiAgICBhbnlcbiAgPiA9IG5ldyBTdXJ2ZXkuRXZlbnQ8KHNlbmRlcjogU3VydmV5Q3JlYXRvciwgb3B0aW9uczogYW55KSA9PiBhbnksIGFueT4oKTtcbiAgLyoqXG4gICAqIFRoZSBldmVudCBpcyBjYWxsZWQgb24gc2V0dGluZyBhIHJlYWRPbmx5IHByb3BlcnR5IG9mIHRoZSBwcm9wZXJ0eSBlZGl0b3IuIEJ5IGRlZmF1bHQgdGhlIHByb3BlcnR5LnJlYWRPbmx5IHByb3BlcnR5IGlzIHVzZWQuXG4gICAqIFlvdSBtYXkgY2hhbmdlZCBpdCBhbmQgbWFrZSB0aGUgcHJvcGVydHkgZWRpdG9yIHJlYWQgb25seSBvciBlbmFibGVkIGZvciBhIHBhcnRpY3VsYXIgb2JqZWN0LlxuICAgKiA8YnIvPiBzZW5kZXIgdGhlIHN1cnZleSBjcmVhdG9yIG9iamVjdCB0aGF0IGZpcmVzIHRoZSBldmVudFxuICAgKiA8YnIvPiBvcHRpb25zLm9iaiB0aGUgc3VydmV5IG9iamVjdCwgU3VydmV5LCBQYWdlLCBQYW5lbCBvciBRdWVzdGlvblxuICAgKiA8YnIvPiBvcHRpb25zLnByb3BlcnR5IHRoZSBvYmplY3QgcHJvcGVydHkgKFN1cnZleS5Kc29uT2JqZWN0UHJvcGVydHkgb2JqZWN0KS4gSXQgaGFzIG5hbWUsIGNsYXNzTmFtZSwgdHlwZSwgdmlzaWJsZSwgcmVhZE9ubHkgYW5kIG90aGVyIHByb3BlcnRpZXMuXG4gICAqIDxici8+IG9wdGlvbnMucmVhZE9ubHkgYSBib29sZWFuIHZhbHVlLiBJdCBoYXMgdmFsdWUgZXF1YWxzIHRvIG9wdGlvbnMucmVhZE9ubHkgcHJvcGVydHkgYnkgZGVmYXVsdC4gWW91IG1heSBjaGFuZ2UgaXQuXG4gICAqL1xuICBwdWJsaWMgb25HZXRQcm9wZXJ0eVJlYWRPbmx5OiBTdXJ2ZXkuRXZlbnQ8XG4gICAgKHNlbmRlcjogU3VydmV5Q3JlYXRvciwgb3B0aW9uczogYW55KSA9PiBhbnksXG4gICAgYW55XG4gID4gPSBuZXcgU3VydmV5LkV2ZW50PChzZW5kZXI6IFN1cnZleUNyZWF0b3IsIG9wdGlvbnM6IGFueSkgPT4gYW55LCBhbnk+KCk7XG4gIC8qKlxuICAgKiBUaGUgZXZlbnQgYWxsb3dzIHlvdSB0byBjdXN0b20gc29ydCBwcm9wZXJ0aWVzIGluIHRoZSBQcm9wZXJ0eSBHcmlkLiBJdCBpcyBhIGNvbXBhcmUgZnVuY3Rpb24uIFlvdSBzaG91bGQgc2V0IG9wdGlvbnMucmVzdWx0IHRvIC0xIG9yIDEgYnkgY29tcGFyaW5nIG9wdGlvbnMucHJvcGVydHkxIGFuZCBvcHRpb25zLnByb3BlcnR5Mi5cbiAgICogPGJyLz4gc2VuZGVyIHRoZSBzdXJ2ZXkgY3JlYXRvciBvYmplY3QgdGhhdCBmaXJlcyB0aGUgZXZlbnRcbiAgICogPGJyLz4gb3B0aW9ucy5vYmogdGhlIHN1cnZleSBvYmplY3QsIFN1cnZleSwgUGFnZSwgUGFuZWwgb3IgUXVlc3Rpb25cbiAgICogPGJyLz4gb3B0aW9ucy5wcm9wZXJ0eTEgdGhlIGxlZnQgb2JqZWN0IHByb3BlcnR5IChTdXJ2ZXkuSnNvbk9iamVjdFByb3BlcnR5IG9iamVjdCkuXG4gICAqIDxici8+IG9wdGlvbnMucHJvcGVydHkyIHRoZSByaWdodCBvYmplY3QgcHJvcGVydHkgKFN1cnZleS5Kc29uT2JqZWN0UHJvcGVydHkgb2JqZWN0KS5cbiAgICogPGJyLz4gb3B0aW9ucy5yZXN1bHQgdGhlIHJlc3VsdCBvZiBjb21wYXJpbmcuIEl0IGNhbiBiZSAwICh1c2UgZGVmYXVsdCBiZWhhdmlvciksICAtMSBvcHRpb25zLnByb3BlcnR5MSBpcyBsZXNzIHRoYW4gb3B0aW9ucy5wcm9wZXJ0eTIgb3IgMSBvcHRpb25zLnByb3BlcnR5MSBpcyBtb3JlIHRoYW4gb3B0aW9ucy5wcm9wZXJ0eTJcbiAgICovXG4gIHB1YmxpYyBvbkN1c3RvbVNvcnRQcm9wZXJ0eTogU3VydmV5LkV2ZW50PFxuICAgIChzZW5kZXI6IFN1cnZleUNyZWF0b3IsIG9wdGlvbnM6IGFueSkgPT4gYW55LFxuICAgIGFueVxuICA+ID0gbmV3IFN1cnZleS5FdmVudDwoc2VuZGVyOiBTdXJ2ZXlDcmVhdG9yLCBvcHRpb25zOiBhbnkpID0+IGFueSwgYW55PigpO1xuICAvKipcbiAgICogVGhlIGV2ZW50IGFsbG93cyB0byBkaXNwbGF5IHRoZSBjdXN0b20gbmFtZSBmb3Igb2JqZWN0czogcXVlc3Rpb25zLCBwYWdlcyBhbmQgcGFuZWxzLiBCeSBkZWZhdWx0IHRoZSBvYmplY3QgbmFtZSBpcyB1c2luZy4gWW91IG1heSBzaG93IG9iamVjdCB0aXRsZSBieSBzZXR0aW5nIHNob3dPYmplY3RUaXRsZXMgcHJvcGVydHkgdG8gdHJ1ZS5cbiAgICogVXNlIHRoaXMgZXZlbnQsIGlmIHlvdSB3YW50IGN1c3RvbSBkaXNwbGF5IG5hbWUgZm9yIG9iamVjdHMuXG4gICAqIDxici8+IHNlbmRlciB0aGUgc3VydmV5IGNyZWF0b3Igb2JqZWN0IHRoYXQgZmlyZXMgdGhlIGV2ZW50XG4gICAqIDxici8+IG9wdGlvbnMub2JqIHRoZSBzdXJ2ZXkgb2JqZWN0LCBTdXJ2ZXksIFBhZ2UsIFBhbmVsIG9yIFF1ZXN0aW9uXG4gICAqIDxici8+IG9wdGlvbnMuZGlzcGxheU5hbWUgY2hhbmdlIHRoaXMgcHJvcGVydHkgdG8gc2hvdyB5b3VyIGN1c3RvbSBkaXNwbGF5IG5hbWUgZm9yIHRoZSBvYmplY3RcbiAgICogQHNlZSBzaG93T2JqZWN0VGl0bGVzXG4gICAqL1xuICBwdWJsaWMgb25HZXRPYmplY3REaXNwbGF5TmFtZTogU3VydmV5LkV2ZW50PFxuICAgIChzZW5kZXI6IFN1cnZleUNyZWF0b3IsIG9wdGlvbnM6IGFueSkgPT4gYW55LFxuICAgIGFueVxuICA+ID0gbmV3IFN1cnZleS5FdmVudDwoc2VuZGVyOiBTdXJ2ZXlDcmVhdG9yLCBvcHRpb25zOiBhbnkpID0+IGFueSwgYW55PigpO1xuICAvKipcbiAgICogVGhlIGV2ZW50IGFsbG93cyB5b3UgbW9kaWZ5IERPTSBlbGVtZW50IGZvciBhIHByb3BlcnR5IGluIHRoZSBQcm9wZXJ0eSBHcmlkLiBGb3IgZXhhbXBsZSwgeW91IG1heSBjaGFuZ2UgaXQncyBzdHlsZXMuXG4gICAqIDxici8+IHNlbmRlciB0aGUgc3VydmV5IGNyZWF0b3Igb2JqZWN0IHRoYXQgZmlyZXMgdGhlIGV2ZW50XG4gICAqIDxici8+IG9wdGlvbnMub2JqIHRoZSBzdXJ2ZXkgb2JqZWN0LCBTdXJ2ZXksIFBhZ2UsIFBhbmVsIG9yIFF1ZXN0aW9uXG4gICAqIDxici8+IG9wdGlvbnMuaHRtbEVsZW1lbnQgdGhlIGh0bWwgZWxlbWVudCAoaHRtbCB0YWJsZSByb3cgaW4gb3VyIGNhc2UpIHRoYXQgcmVuZGVycyB0aGUgcHJvcGVydHkgZGlzcGxheSBuYW1lIGFuZCBpdCdzIGVkaXRvci5cbiAgICogPGJyLz4gb3B0aW9ucy5wcm9wZXJ0eSBvYmplY3QgcHJvcGVydHkgKFN1cnZleS5Kc29uT2JqZWN0UHJvcGVydHkgb2JqZWN0KS5cbiAgICogPGJyLz4gb3B0aW9ucy5wcm9wZXJ0eUVkaXRvciB0aGUgcHJvcGVydHkgRWRpdG9yLlxuICAgKi9cbiAgcHVibGljIG9uUHJvcGVydHlBZnRlclJlbmRlcjogU3VydmV5LkV2ZW50PFxuICAgIChzZW5kZXI6IFN1cnZleUNyZWF0b3IsIG9wdGlvbnM6IGFueSkgPT4gYW55LFxuICAgIGFueVxuICA+ID0gbmV3IFN1cnZleS5FdmVudDwoc2VuZGVyOiBTdXJ2ZXlDcmVhdG9yLCBvcHRpb25zOiBhbnkpID0+IGFueSwgYW55PigpO1xuICAvKipcbiAgICogVGhlIGV2ZW50IGlzIGNhbGxlZCBvbiBkZWxldGluZyBhbiBlbGVtZW50IChxdWVzdGlvbi9wYW5lbC9wYWdlKSBmcm9tIHRoZSBzdXJ2ZXkuIFR5cGljYWxseSwgd2hlbiBhIHVzZXIgY2xpY2sgdGhlIGRlbGV0ZSBmcm9tIHRoZSBlbGVtZW50IG1lbnUuXG4gICAqIDxici8+IHNlbmRlciB0aGUgc3VydmV5IGNyZWF0b3Igb2JqZWN0IHRoYXQgZmlyZXMgdGhlIGV2ZW50XG4gICAqIDxici8+IG9wdGlvbnMuZWxlbWVudCBhbiBpbnN0YW5jZSBvZiB0aGUgZGVsZXRpbmcgZWxlbWVudFxuICAgKiA8YnIvPiBvcHRpb25zLmVsZW1lbnRUeXBlIHRoZSB0eXBlIG9mIHRoZSBlbGVtZW50OiAncXVlc3Rpb24nLCAncGFuZWwnIG9yICdwYWdlJy5cbiAgICogPGJyLz4gb3B0aW9ucy5hbGxvd2luZyBzZXQgaXQgdG8gZmFsc2UgdG8gY2FuY2VsIHRoZSBlbGVtZW50IGRlbGV0aW5nXG4gICAqL1xuICBwdWJsaWMgb25FbGVtZW50RGVsZXRpbmc6IFN1cnZleS5FdmVudDxcbiAgICAoc2VuZGVyOiBTdXJ2ZXlDcmVhdG9yLCBvcHRpb25zOiBhbnkpID0+IGFueSxcbiAgICBhbnlcbiAgPiA9IG5ldyBTdXJ2ZXkuRXZlbnQ8KHNlbmRlcjogU3VydmV5Q3JlYXRvciwgb3B0aW9uczogYW55KSA9PiBhbnksIGFueT4oKTtcbiAgLyoqXG4gICAqIFRoZSBldmVudCBpcyBjYWxsZWQgb24gYWRkaW5nIGEgbmV3IHF1ZXN0aW9uIGludG8gdGhlIHN1cnZleS4gVHlwaWNhbGx5LCB3aGVuIGEgdXNlciBkcm9wcGVkIGEgUXVlc3Rpb24gZnJvbSB0aGUgUXVlc3Rpb24gVG9vbGJveCBpbnRvIGRlc2lnbmVyIFN1cnZleSBhcmVhLlxuICAgKiA8YnIvPiBzZW5kZXIgdGhlIHN1cnZleSBjcmVhdG9yIG9iamVjdCB0aGF0IGZpcmVzIHRoZSBldmVudFxuICAgKiA8YnIvPiBvcHRpb25zLnF1ZXN0aW9uIGEgbmV3IGFkZGVkIHN1cnZleSBxdWVzdGlvbi4gU3VydmV5LlF1ZXN0aW9uIG9iamVjdFxuICAgKiA8YnIvPiBvcHRpb25zLnBhZ2UgdGhlIHN1cnZleSBQYWdlIG9iamVjdCB3aGVyZSBxdWVzdGlvbiBoYXMgYmVlbiBhZGRlZC5cbiAgICovXG4gIHB1YmxpYyBvblF1ZXN0aW9uQWRkZWQ6IFN1cnZleS5FdmVudDxcbiAgICAoc2VuZGVyOiBTdXJ2ZXlDcmVhdG9yLCBvcHRpb25zOiBhbnkpID0+IGFueSxcbiAgICBhbnlcbiAgPiA9IG5ldyBTdXJ2ZXkuRXZlbnQ8KHNlbmRlcjogU3VydmV5Q3JlYXRvciwgb3B0aW9uczogYW55KSA9PiBhbnksIGFueT4oKTtcbiAgLyoqXG4gICAqIFRoZSBldmVudCBpcyBjYWxsZWQgd2hlbiBhbiBlbmQtdXNlciBkb3VibGUgY2xpY2sgb24gYW4gZWxlbWVudCAocXVlc3Rpb24vcGFuZWwpLlxuICAgKiA8YnIvPiBzZW5kZXIgdGhlIHN1cnZleSBjcmVhdG9yIG9iamVjdCB0aGF0IGZpcmVzIHRoZSBldmVudFxuICAgKiA8YnIvPiBvcHRpb25zLmVsZW1lbnQgYW4gaW5zdGFuY2Ugb2YgdGhlIGVsZW1lbnRcbiAgICovXG4gIHB1YmxpYyBvbkVsZW1lbnREb3VibGVDbGljazogU3VydmV5LkV2ZW50PFxuICAgIChzZW5kZXI6IFN1cnZleUNyZWF0b3IsIG9wdGlvbnM6IGFueSkgPT4gYW55LFxuICAgIGFueVxuICA+ID0gbmV3IFN1cnZleS5FdmVudDwoc2VuZGVyOiBTdXJ2ZXlDcmVhdG9yLCBvcHRpb25zOiBhbnkpID0+IGFueSwgYW55PigpO1xuICAvKipcbiAgICogVGhlIGV2ZW50IGlzIGNhbGxlZCBvbiBhZGRpbmcgYSBuZXcgU3VydmV5Lkl0ZW1WYWx1ZSBvYmplY3QuIEl0IHVzZXMgYXMgYW4gZWxlbWVudCBpbiBjaG9pY2VzIGFycmF5IGluIFJhZGlvZ3JvdXAsIGNoZWNrYm94IGFuZCBkcm9wZG93biBxdWVzdGlvbnMgb3IgTWF0cml4IGNvbHVtbnMgYW5kIHJvd3MgcHJvcGVydGllcy5cbiAgICogVXNlIHRoaXMgZXZlbnQsIHRvIHNldCBJdGVtVmFsdWUudmFsdWUgYW5kIEl0ZW1WYWx1ZS50ZXh0IHByb3BlcnRpZXMgYnkgZGVmYXVsdCBvciBzZXQgYSB2YWx1ZSB0byB0aGUgY3VzdG9tIHByb3BlcnR5LlxuICAgKiA8YnIvPiBzZW5kZXIgdGhlIHN1cnZleSBjcmVhdG9yIG9iamVjdCB0aGF0IGZpcmVzIHRoZSBldmVudFxuICAgKiA8YnIgLz4gb3B0aW9ucy5vYmogdGhlIG9iamVjdCB0aGF0IGNvbnRhaW5zIHRoZSBpdGVtc1ZhbHVlcyBhcnJheSwgZm9yIGV4YW1wbGUgc2VsZWN0b3IsIHJhdGluZyBhbmQgc2luZ2xlIGNob2ljZSBtYXRyaXggcXVlc3Rpb25zLlxuICAgKiA8YnIvPiBvcHRpb25zLnByb3BlcnR5TmFtZSAgdGhlIG9iamVjdCBwcm9wZXJ0eSBOYW1lLiBJdCBjYW4gYmUgXCJjaG9pY2VzXCIgZm9yIHNlbGVjdG9yIHF1ZXN0aW9ucyBvciByYXRlVmFsdWVzIGZvciByYXRpbmcgcXVlc3Rpb24gb3IgY29sdW1ucy9yb3dzIGZvciBzaW5nbGUgY2hvaWNlIG1hdHJpeC5cbiAgICogPGJyLz4gb3B0aW9ucy5uZXdJdGVtIGEgbmV3IGNyZWF0ZWQgU3VydmV5Lkl0ZW1WYWx1ZSBvYmplY3QuXG4gICAqIDxici8+IG9wdGlvbnMuaXRlbVZhbHVlcyBhbiBlZGl0aW5nIFN1cnZleS5JdGVtVmFsdWUgYXJyYXkuIG5ld0l0ZW0gb2JqZWN0IGlzIG5vdCBhZGRlZCB5ZXQgaW50byB0aGlzIGFycmF5LlxuICAgKi9cbiAgcHVibGljIG9uSXRlbVZhbHVlQWRkZWQ6IFN1cnZleS5FdmVudDxcbiAgICAoc2VuZGVyOiBTdXJ2ZXlDcmVhdG9yLCBvcHRpb25zOiBhbnkpID0+IGFueSxcbiAgICBhbnlcbiAgPiA9IG5ldyBTdXJ2ZXkuRXZlbnQ8KHNlbmRlcjogU3VydmV5Q3JlYXRvciwgb3B0aW9uczogYW55KSA9PiBhbnksIGFueT4oKTtcbiAgLyoqXG4gICAqIFRoZSBldmVudCBpcyBjYWxsZWQgd2hlbiBhIHVzZXIgYWRkcyBhIG5ldyBjb2x1bW4gaW50byBNYXRyaXhEcm9wZG93biBvciBNYXRyaXhEeW5hbWljIHF1ZXN0aW9ucy4gVXNlIGl0IHRvIHNldCBzb21lIHByb3BlcnRpZXMgb2YgU3VydmV5Lk1hdHJpeERyb3Bkb3duQ29sdW1uIGJ5IGRlZmF1bHQsIGZvciBleGFtcGxlIG5hbWUgb3IgYSBjdXN0b20gcHJvcGVydHkuXG4gICAqIDxici8+IHNlbmRlciB0aGUgc3VydmV5IGNyZWF0b3Igb2JqZWN0IHRoYXQgZmlyZXMgdGhlIGV2ZW50XG4gICAqIDxici8+IG9wdGlvbnMubWF0cml4IGEgbWF0cml4IHF1ZXN0aW9uIHdoZXJlIGNvbHVtbiBpcyBsb2NhdGVkLCBtYXRyaXguY29sdW1ucy5cbiAgICogPGJyLz4gb3B0aW9ucy5uZXdDb2x1bW4gYSBuZXcgY3JlYXRlZCBTdXJ2ZXkuTWF0cml4RHJvcGRvd25Db2x1bW4gb2JqZWN0LlxuICAgKiA8YnIvPiBvcHRpb25zLmNvbHVtbnMgZWRpdGFibGUgY29sdW1ucyBvYmplY3RzLiBUaGV5IGNhbiBiZSBkaWZmZXJlbnQgZnJvbSBvcHRpb25zLm1hdHJpeC5jb2x1bW5zLiBvcHRpb25zLmNvbHVtbnMgYW5kIG9wdGlvbnMubWF0cml4LmNvbHVtbnMgYXJlIGVxdWFsIGFmdGVyIHVzZXIgcHJlc3MgQXBwbHkgb3IgQ2FuY2VsIGFuZCBvcHRpb25zLmNvbHVtbnMgd2lsbCBiZSBzZXQgdG8gb3B0aW9ucy5tYXRyaXguY29sdW1ucyBvciByZXNldCB0byBpbml0aWFsIHN0YXRlLlxuICAgKi9cbiAgcHVibGljIG9uTWF0cml4Q29sdW1uQWRkZWQ6IFN1cnZleS5FdmVudDxcbiAgICAoc2VuZGVyOiBTdXJ2ZXlDcmVhdG9yLCBvcHRpb25zOiBhbnkpID0+IGFueSxcbiAgICBhbnlcbiAgPiA9IG5ldyBTdXJ2ZXkuRXZlbnQ8KHNlbmRlcjogU3VydmV5Q3JlYXRvciwgb3B0aW9uczogYW55KSA9PiBhbnksIGFueT4oKTtcbiAgLyoqXG4gICAqIFRoZSBldmVudCBpcyBjYWxsZWQgb24gYWRkaW5nIGEgbmV3IHBhbmVsIGludG8gdGhlIHN1cnZleS4gIFR5cGljYWxseSwgd2hlbiBhIHVzZXIgZHJvcHBlZCBhIFBhbmVsIGZyb20gdGhlIFF1ZXN0aW9uIFRvb2xib3ggaW50byBkZXNpZ25lciBTdXJ2ZXkgYXJlYS5cbiAgICogPGJyLz4gc2VuZGVyIHRoZSBzdXJ2ZXkgY3JlYXRvciBvYmplY3QgdGhhdCBmaXJlcyB0aGUgZXZlbnRcbiAgICogPGJyLz4gb3B0aW9ucy5wYW5lbCBhIG5ldyBhZGRlZCBzdXJ2ZXkgcGFuZWwuIFN1cnZleS5QYW5lbCBvYmplY3RcbiAgICogPGJyLz4gb3B0aW9ucy5wYWdlIHRoZSBzdXJ2ZXkgUGFnZSBvYmplY3Qgd2hlcmUgcXVlc3Rpb24gaGFzIGJlZW4gYWRkZWQuXG4gICAqL1xuICBwdWJsaWMgb25QYW5lbEFkZGVkOiBTdXJ2ZXkuRXZlbnQ8XG4gICAgKHNlbmRlcjogU3VydmV5Q3JlYXRvciwgb3B0aW9uczogYW55KSA9PiBhbnksXG4gICAgYW55XG4gID4gPSBuZXcgU3VydmV5LkV2ZW50PChzZW5kZXI6IFN1cnZleUNyZWF0b3IsIG9wdGlvbnM6IGFueSkgPT4gYW55LCBhbnk+KCk7XG4gIC8qKlxuICAgKiBUaGUgZXZlbnQgaXMgY2FsbGVkIG9uIGFkZGluZyBhIG5ldyBwYWdlIGludG8gdGhlIHN1cnZleS5cbiAgICogPGJyLz4gc2VuZGVyIHRoZSBzdXJ2ZXkgY3JlYXRvciBvYmplY3QgdGhhdCBmaXJlcyB0aGUgZXZlbnRcbiAgICogPGJyLz4gb3B0aW9ucy5wYWdlIHRoZSBuZXcgc3VydmV5IFBhZ2Ugb2JqZWN0LlxuICAgKi9cbiAgcHVibGljIG9uUGFnZUFkZGVkOiBTdXJ2ZXkuRXZlbnQ8XG4gICAgKHNlbmRlcjogU3VydmV5Q3JlYXRvciwgb3B0aW9uczogYW55KSA9PiBhbnksXG4gICAgYW55XG4gID4gPSBuZXcgU3VydmV5LkV2ZW50PChzZW5kZXI6IFN1cnZleUNyZWF0b3IsIG9wdGlvbnM6IGFueSkgPT4gYW55LCBhbnk+KCk7XG4gIC8qKlxuICAgKiBUaGUgZXZlbnQgaXMgY2FsbGVkIHdoZW4gYSBzdXJ2ZXkgaXMgY2hhbmdlZCBpbiB0aGUgZGVzaWduZXIuIEEgbmV3IHBhZ2UvcXVlc3Rpb24vcGFnZSBpcyBhZGRlZCBvciBleGlzdGluZyBpcyByZW1vdmVkLCBhIHByb3BlcnR5IGlzIGNoYW5nZWQgYW5kIHNvIG9uLlxuICAgKiA8YnIvPiBzZW5kZXIgdGhlIHN1cnZleSBjcmVhdG9yIG9iamVjdCB0aGF0IGZpcmVzIHRoZSBldmVudFxuICAgKiA8YnIvPiBvcHRpb25zIG9iamVjdCBjb250YWlucyB0aGUgaW5mb3JtYXRpb24gYWJvdXQgY2VydGFpbiBtb2RpZmljYXRpb25zXG4gICAqIDxici8+IG9wdGlvbnMudHlwZSBjb250YWlucyBzdHJpbmcgY29uc3RhbnQgZGVzY3JpYmluZyBjZXJ0YWluIG1vZGlmaWNhdGlvblxuICAgKiA8YnIvPiBBdmFpbGFibGUgdmFsdWVzOlxuICAgKiA8YnIvPlxuICAgKiA8YnIvPiBvcHRpb25zLnR5cGU6IFwiQURERURfRlJPTV9UT09MQk9YXCJcbiAgICogPGJyLz4gb3B0aW9ucy5xdWVzdGlvbjogbmV3bHkgYWRkZWQgcXVlc3Rpb25cbiAgICogPGJyLz5cbiAgICogPGJyLz4gb3B0aW9ucy50eXBlOiBcIlBBR0VfQURERURcIlxuICAgKiA8YnIvPiBvcHRpb25zLm5ld1ZhbHVlOiBuZXdseSBjcmVhdGVkIHBhZ2VcbiAgICogPGJyLz5cbiAgICogPGJyLz4gb3B0aW9ucy50eXBlOiBcIlBBR0VfTU9WRURcIlxuICAgKiA8YnIvPiBvcHRpb25zLnBhZ2U6IHBhZ2UgaGFzIGJlZW4gbW92ZWRcbiAgICogPGJyLz4gb3B0aW9ucy5pbmRleEZyb206IHBldmlvdXMgaW5kZXhcbiAgICogPGJyLz4gb3B0aW9ucy5pbmRleFRvOiBuZXcgaW5kZXhcbiAgICogPGJyLz5cbiAgICogPGJyLz4gb3B0aW9ucy50eXBlOiBcIlFVRVNUSU9OX0NPTlZFUlRFRFwiXG4gICAqIDxici8+IG9wdGlvbnMuY2xhc3NOYW1lOiB0aGUgY29udmVydGVkIGNsYXNzIG5hbWVcbiAgICogPGJyLz4gb3B0aW9ucy5vbGRWYWx1ZTogcGV2aW91cyBvYmplY3RcbiAgICogPGJyLz4gb3B0aW9ucy5uZXdWYWx1ZTogdGhlIG5ldyBvYmplY3QsIGNvbnZlcnRlZCBmcm9tIG9sZFZhbGUgdG8gdGhlIGdpdmVuIGNsYXNzIG5hbWVcbiAgICogPGJyLz5cbiAgICogPGJyLz4gb3B0aW9ucy50eXBlOiBcIlFVRVNUSU9OX0NIQU5HRURfQllfRURJVE9SXCJcbiAgICogPGJyLz4gb3B0aW9ucy5xdWVzdGlvbjogcXVlc3Rpb24gaGFzIGJlZW4gZWRpdGVkIGluIHRoZSBwb3B1cCBxdWVzdGlvbiBlZGl0b3JcbiAgICogPGJyLz5cbiAgICogPGJyLz4gb3B0aW9ucy50eXBlOiBcIlBST1BFUlRZX0NIQU5HRURcIlxuICAgKiA8YnIvPiBvcHRpb25zLm5hbWU6IHRoZSBuYW1lIG9mIHRoZSBwcm9wZXJ0eSBoYXMgYmVlbiBjaGFuZ2VkXG4gICAqIDxici8+IG9wdGlvbnMudGFyZ2V0OiB0aGUgb2JqZWN0IGNvbnRhaW5pbmcgdGhlIGNoYW5nZWQgcHJvcGVydHlcbiAgICogPGJyLz4gb3B0aW9ucy5vbGRWYWx1ZTogdGhlIHByZXZpb3VzIHZhbHVlIG9mIHRoZSBjaGFuZ2VkIHByb3BlcnR5XG4gICAqIDxici8+IG9wdGlvbnMubmV3VmFsdWU6IHRoZSBuZXcgdmFsdWUgb2YgdGhlIGNoYW5nZWQgcHJvcGVydHlcbiAgICogPGJyLz5cbiAgICogPGJyLz4gb3B0aW9ucy50eXBlOiBcIk9CSkVDVF9ERUxFVEVEXCJcbiAgICogPGJyLz4gb3B0aW9ucy50YXJnZXQ6IGRlbGV0ZWQgb2JqZWN0XG4gICAqIDxici8+XG4gICAqIDxici8+IG9wdGlvbnMudHlwZTogXCJWSUVXX1RZUEVfQ0hBTkdFRFwiXG4gICAqIDxici8+IG9wdGlvbnMubmV3VHlwZTogbmV3IHR5cGUgb2YgdGhlIGNyZWF0b3IgdmlldzogZWRpdG9yIG9yIGRlc2lnbmVyXG4gICAqIDxici8+XG4gICAqIDxici8+IG9wdGlvbnMudHlwZTogXCJET19EUk9QXCJcbiAgICogPGJyLz4gb3B0aW9ucy5wYWdlOiB0aGUgcGFnZSBvZiB0aGUgZHJhcC9kcm9wIG9wZXJhdGlvblxuICAgKiA8YnIvPiBvcHRpb25zLnNvdXJjZTogdGhlIHNvdXJjZSBkcmFnZ2VkIG9iamVjdFxuICAgKiA8YnIvPiBvcHRpb25zLnRhcmdldDogdGhlIGRyb3AgdGFyZ2V0XG4gICAqIDxici8+IG9wdGlvbnMubmV3RWxlbWVudDogYSBuZXcgZWxlbWVudC4gSXQgaXMgZGVmaW5lZCBpZiBhIHVzZXIgZHJvcHMgcXVlc3Rpb24gb3IgcGFuZWwgZnJvbSB0aGUgdG9vbGJveFxuICAgKiA8YnIvPlxuICAgKiA8YnIvPiBvcHRpb25zLnR5cGU6IFwiVFJBTlNMQVRJT05TX0NIQU5HRURcIlxuICAgKiA8YnIvPlxuICAgKiA8YnIvPiBvcHRpb25zLnR5cGU6IFwiTE9HSUNfQ0hBTkdFRFwiXG4gICAqIDxici8+IG9wdGlvbnMuaXRlbTogdGhlIHN1cnZleSBsb2dpYyBpdGVtLiBJdCBoYXMgZXhwcmVzc2lvbiBhbmQgb3BlcmF0aW9ucyAobGlzdCBvZiBvcGVyYXRpb25zKSBwcm9wZXJ0aWVzXG4gICAqIDxici8+IG9wdGlvbnMuY2hhbmdlVHlwZTogVGhlcmUgYXJlIHRocmVlIHBvc3NpYmxlIHZhbHVlczogXCJuZXdcIiwgXCJtb2RpZnlcIiBhbmQgXCJkZWxldGVcIlxuICAgKi9cbiAgcHVibGljIG9uTW9kaWZpZWQ6IFN1cnZleS5FdmVudDxcbiAgICAoc2VuZGVyOiBTdXJ2ZXlDcmVhdG9yLCBvcHRpb25zOiBhbnkpID0+IGFueSxcbiAgICBhbnlcbiAgPiA9IG5ldyBTdXJ2ZXkuRXZlbnQ8KHNlbmRlcjogU3VydmV5Q3JlYXRvciwgb3B0aW9uczogYW55KSA9PiBhbnksIGFueT4oKTtcbiAgLyoqXG4gICAqIFRoZSBldmVudCBpcyBmaXJlZCBvbiBjaGFuZ2luZyBxdWVzdGlvbiwgcGFuZWwgb3IgcGFnZSBuYW1lLlxuICAgKiA8YnIvPiBzZW5kZXIgdGhlIHN1cnZleSBjcmVhdG9yIG9iamVjdCB0aGF0IGZpcmVzIHRoZSBldmVudFxuICAgKiA8YnIvPiBvcHRpb25zLm9iaiB0aGUgb2JqZWN0IChxdWVzdGlvbiwgcGFuZWwgb3IgcGFnZSlcbiAgICogPGJyLz4gb3B0aW9ucy5vbGROYW1lIHRoZSBwcmV2aW91cyBuYW1lIG9mIHRoZSBlbGVtZW50XG4gICAqIDxici8+IG9wdGlvbnMubmV3TmFtZSB0aGUgbmV3IG5hbWUgb2YgdGhlIGVsZW1lbnRcbiAgICovXG4gIHB1YmxpYyBvbkVsZW1lbnROYW1lQ2hhbmdlZDogU3VydmV5LkV2ZW50PFxuICAgIChzZW5kZXI6IFN1cnZleUNyZWF0b3IsIG9wdGlvbnM6IGFueSkgPT4gYW55LFxuICAgIGFueVxuICA+ID0gbmV3IFN1cnZleS5FdmVudDwoc2VuZGVyOiBTdXJ2ZXlDcmVhdG9yLCBvcHRpb25zOiBhbnkpID0+IGFueSwgYW55PigpO1xuICAvKipcbiAgICogVGhlIGV2ZW50IGlzIGZpcmVkIHdoZW4gdGhlIHN1cnZleSBjcmVhdG9yIGNyZWF0ZXMgYSBzdXJ2ZXkgb2JqZWN0IChTdXJ2ZXkuU3VydmV5KS5cbiAgICogPGJyLz4gc2VuZGVyIHRoZSBzdXJ2ZXkgY3JlYXRvciBvYmplY3QgdGhhdCBmaXJlcyB0aGUgZXZlbnRcbiAgICogPGJyLz4gb3B0aW9ucy5zdXJ2ZXkgdGhlIHN1cnZleSBvYmplY3Qgc2hvd2luZyBpbiB0aGUgY3JlYXRvci5cbiAgICogPGJyLz4gb3B0aW9ucy5yZWFzb24gaW5kaWNhdGVzIHdoYXQgY29tcG9uZW50IG9mIHRoZSBjcmVhdG9yIHJlcXVlc3RzIHRoZSBzdXJ2ZXkuXG4gICAqL1xuICBwdWJsaWMgb25TdXJ2ZXlJbnN0YW5jZUNyZWF0ZWQ6IFN1cnZleS5FdmVudDxcbiAgICAoc2VuZGVyOiBTdXJ2ZXlDcmVhdG9yLCBvcHRpb25zOiBhbnkpID0+IGFueSxcbiAgICBhbnlcbiAgPiA9IG5ldyBTdXJ2ZXkuRXZlbnQ8KHNlbmRlcjogU3VydmV5Q3JlYXRvciwgb3B0aW9uczogYW55KSA9PiBhbnksIGFueT4oKTtcbiAgLyoqXG4gICAqIFRoZSBldmVudCBpcyBmaXJlZCB3aGVuIHRoZSBzdXJ2ZXkgY3JlYXRvciBpcyBpbml0aWFsaXplZCBhbmQgYSBzdXJ2ZXkgb2JqZWN0IChTdXJ2ZXkuU3VydmV5KSBpcyBjcmVhdGVkLlxuICAgKiA8YnIvPiBzZW5kZXIgdGhlIHN1cnZleSBjcmVhdG9yIG9iamVjdCB0aGF0IGZpcmVzIHRoZSBldmVudFxuICAgKiA8YnIvPiBvcHRpb25zLnN1cnZleSAgdGhlIHN1cnZleSBvYmplY3Qgc2hvd2luZyBpbiB0aGUgY3JlYXRvci5cbiAgICovXG4gIHB1YmxpYyBvbkRlc2lnbmVyU3VydmV5Q3JlYXRlZDogU3VydmV5LkV2ZW50PFxuICAgIChzZW5kZXI6IFN1cnZleUNyZWF0b3IsIG9wdGlvbnM6IGFueSkgPT4gYW55LFxuICAgIGFueVxuICA+ID0gbmV3IFN1cnZleS5FdmVudDwoc2VuZGVyOiBTdXJ2ZXlDcmVhdG9yLCBvcHRpb25zOiBhbnkpID0+IGFueSwgYW55PigpO1xuICAvKipcbiAgICogVGhlIGV2ZW50IGlzIGZpcmVkIHdoZW4gdGhlIHN1cnZleSBjcmVhdG9yIHJ1bnMgdGhlIHN1cnZleSBpbiB0aGUgdGVzdCBtb2RlLlxuICAgKiA8YnIvPiBzZW5kZXIgdGhlIHN1cnZleSBjcmVhdG9yIG9iamVjdCB0aGF0IGZpcmVzIHRoZSBldmVudFxuICAgKiA8YnIvPiBvcHRpb25zLnN1cnZleSAgdGhlIHN1cnZleSBvYmplY3Qgc2hvd2luZyBpbiB0aGUgXCJUZXN0IHN1cnZleVwiIHRhYi5cbiAgICovXG4gIHB1YmxpYyBvblRlc3RTdXJ2ZXlDcmVhdGVkOiBTdXJ2ZXkuRXZlbnQ8XG4gICAgKHNlbmRlcjogU3VydmV5Q3JlYXRvciwgb3B0aW9uczogYW55KSA9PiBhbnksXG4gICAgYW55XG4gID4gPSBuZXcgU3VydmV5LkV2ZW50PChzZW5kZXI6IFN1cnZleUNyZWF0b3IsIG9wdGlvbnM6IGFueSkgPT4gYW55LCBhbnk+KCk7XG4gIC8qKlxuICAgKiBVc2UgdGhpcyBldmVudCB0byBjb250cm9sIFByb3BlcnR5IEVkaXRvcnMgVUkuXG4gICAqIDxici8+IHNlbmRlciB0aGUgc3VydmV5IGNyZWF0b3Igb2JqZWN0IHRoYXQgZmlyZXMgdGhlIGV2ZW50XG4gICAqIDxici8+IG9wdGlvbnMub2JqICB0aGUgc3VydmV5IG9iamVjdCB3aGljaCBwcm9wZXJ0eSBpcyBlZGl0ZWQgaW4gdGhlIFByb3BlcnR5IEVkaXRvci5cbiAgICogPGJyLz4gb3B0aW9ucy5wcm9wZXJ0eU5hbWUgIHRoZSBuYW1lIG9mIHRoZSBlZGl0ZWQgcHJvcGVydHkuXG4gICAqIDxici8+IG9wdGlvbnMuZWRpdG9yT3B0aW9ucyAgb3B0aW9ucyB0aGF0IGNhbiBiZSBjaGFuZ2VkLlxuICAgKiA8YnIvPiBvcHRpb25zLmVkaXRvck9wdGlvbnMuYWxsb3dBZGRSZW1vdmVJdGVtcyBhIGJvb2xlYW4gcHJvcGVydHksIHRydWUgYnkgZGVmYXVsdC4gU2V0IGl0IGZhbHNlIHRvIGRpc2FibGUgYWRkL3JlbW92ZSBpdGVtcyBpbiBhcnJheSBwcm9wZXJ0aWVzLiBGb3IgZXhhbXBsZSAnY2hvaWNlcycsICdjb2x1bW5zJywgJ3Jvd3MnLlxuICAgKiA8YnIvPiBvcHRpb25zLmVkaXRvck9wdGlvbnMuc2hvd1RleHRWaWV3IGEgYm9vbGVhbiBwcm9wZXJ0eSwgdHJ1ZSBieSBkZWZhdWx0LiBTZXQgaXQgZmFsc2UgdG8gZGlzYWJsZSBcIkZhc3QgRW50cnlcIiB0YWIgZm9yIFwiY2hvaWNlc1wiIHByb3BlcnR5LlxuICAgKiA8YnIvPiBvcHRpb25zLmVkaXRvck9wdGlvbnMuaXRlbXNFbnRyeVR5cGUgYSBzdHJpbmcgcHJvcGVydHksICdmb3JtJyBieSBkZWZhdWx0LiBTZXQgaXQgJ2Zhc3QnIHRvIHNob3cgXCJGYXN0IEVudHJ5XCIgdGFiIGZvciBcImNob2ljZXNcIiBwcm9wZXJ0eSBieSBkZWZhdWx0LlxuICAgKi9cbiAgcHVibGljIG9uU2V0UHJvcGVydHlFZGl0b3JPcHRpb25zOiBTdXJ2ZXkuRXZlbnQ8XG4gICAgKHNlbmRlcjogU3VydmV5Q3JlYXRvciwgb3B0aW9uczogYW55KSA9PiBhbnksXG4gICAgYW55XG4gID4gPSBuZXcgU3VydmV5LkV2ZW50PChzZW5kZXI6IFN1cnZleUNyZWF0b3IsIG9wdGlvbnM6IGFueSkgPT4gYW55LCBhbnk+KCk7XG4gIC8qKlxuICAgKiBVc2UgdGhpcyBldmVudCB0byBzaG93IGEgY3VzdG9tIGVycm9yIGluIHRoZSBRdWVzdGlvbiBFZGl0b3Igb24gcHJlc3NpbmcgQXBwbHkgb3IgT0sgYnV0dG9ucywgaWYgdGhlIHZhbHVlcyBhcmUgbm90IHNldCBjb3JyZWN0bHkuIFRoZSBlcnJvciB3aWxsIGJlIGRpc3BsYXllZCB1bmRlciB0aGUgcHJvcGVydHkgZWRpdG9yLlxuICAgKiA8YnIvPiBzZW5kZXIgdGhlIHN1cnZleSBjcmVhdG9yIG9iamVjdCB0aGF0IGZpcmVzIHRoZSBldmVudFxuICAgKiA8YnIvPiBvcHRpb25zLm9iaiAgdGhlIHN1cnZleSBvYmplY3Qgd2hpY2ggcHJvcGVydHkgaXMgZWRpdGVkIGluIHRoZSBQcm9wZXJ0eSBFZGl0b3IuXG4gICAqIDxici8+IG9wdGlvbnMucHJvcGVydHlOYW1lICB0aGUgbmFtZSBvZiB0aGUgZWRpdGVkIHByb3BlcnR5LlxuICAgKiA8YnIvPiBvcHRpb25zLnZhbHVlIHRoZSBwcm9wZXJ0eSB2YWx1ZS5cbiAgICogPGJyLz4gb3B0aW9ucy5lcnJvciB0aGUgZXJyb3IgeW91IHdhbnQgdG8gZGlzcGxheS4gU2V0IHRoZSBlbXB0eSBzdHJpbmcgKHRoZSBkZWZhdWx0IHZhbHVlKSBvciBudWxsIGlmIHRoZXJlIGlzIG5vIGVycm9ycy5cbiAgICogQHNlZSBvblByb3BlcnR5VmFsdWVDaGFuZ2luZ1xuICAgKi9cbiAgcHVibGljIG9uUHJvcGVydHlWYWxpZGF0aW9uQ3VzdG9tRXJyb3I6IFN1cnZleS5FdmVudDxcbiAgICAoc2VuZGVyOiBTdXJ2ZXlDcmVhdG9yLCBvcHRpb25zOiBhbnkpID0+IGFueSxcbiAgICBhbnlcbiAgPiA9IG5ldyBTdXJ2ZXkuRXZlbnQ8KHNlbmRlcjogU3VydmV5Q3JlYXRvciwgb3B0aW9uczogYW55KSA9PiBhbnksIGFueT4oKTtcbiAgLyoqXG4gICAqIFVzZSB0aGlzIGV2ZW50IHRvIGNoYW5nZSB0aGUgdmFsdWUgZW50ZXJlZCBpbiB0aGUgcHJvcGVydHkgZWRpdG9yLiBZb3UgbWF5IGNhbGwgYSB2YWxpZGF0aW9uLCBzbyBhbiBlbmQgdXNlciBzZWVzIHRoZSBlcnJvciBpbW1lZGlhdGVseVxuICAgKiA8YnIvPiBzZW5kZXIgdGhlIHN1cnZleSBjcmVhdG9yIG9iamVjdCB0aGF0IGZpcmVzIHRoZSBldmVudFxuICAgKiA8YnIvPiBvcHRpb25zLm9iaiAgdGhlIHN1cnZleSBvYmplY3Qgd2hpY2ggcHJvcGVydHkgaXMgZWRpdGVkIGluIHRoZSBQcm9wZXJ0eSBFZGl0b3IuXG4gICAqIDxici8+IG9wdGlvbnMucHJvcGVydHlOYW1lICB0aGUgbmFtZSBvZiB0aGUgZWRpdGVkIHByb3BlcnR5LlxuICAgKiA8YnIvPiBvcHRpb25zLnZhbHVlIHRoZSBwcm9wZXJ0eSB2YWx1ZS5cbiAgICogPGJyLz4gb3B0aW9ucy5uZXdWYWx1ZSBzZXQgdGhlIGNvcnJlY3RlZCB2YWx1ZSBpbnRvIHRoaXMgcHJvcGVydHkuIExlYXZlIGl0IG51bGwgaWYgeW91IGFyZSBvayB3aXRoIHRoZSBlbnRlcmVkIHZhbHVlLlxuICAgKiA8YnIvPiBvcHRpb25zLmRvVmFsaWRhdGlvbiBzZXQgdGhlIHZhbHVlIHRvIHRydWUgdG8gY2FsbCB0aGUgcHJvcGVydHkgdmFsaWRhdGlvbi4gSWYgdGhlcmUgaXMgYW4gZXJyb3IsIHRoZSB1c2VyIHNlZXMgaXQgaW1tZWRpYXRlbHkuXG4gICAqIEBzZWUgb25Qcm9wZXJ0eVZhbGlkYXRpb25DdXN0b21FcnJvclxuICAgKi9cbiAgcHVibGljIG9uUHJvcGVydHlWYWx1ZUNoYW5naW5nOiBTdXJ2ZXkuRXZlbnQ8XG4gICAgKHNlbmRlcjogU3VydmV5Q3JlYXRvciwgb3B0aW9uczogYW55KSA9PiBhbnksXG4gICAgYW55XG4gID4gPSBuZXcgU3VydmV5LkV2ZW50PChzZW5kZXI6IFN1cnZleUNyZWF0b3IsIG9wdGlvbnM6IGFueSkgPT4gYW55LCBhbnk+KCk7XG4gIC8qKlxuICAgKiBVc2UgdGhpcyBldmVudCB0byBjaGFuZ2UgdGhlIHZhbHVlIGVudGVyZWQgaW4gdGhlIHByb3BlcnR5IGVkaXRvci4gWW91IG1heSBjYWxsIGEgdmFsaWRhdGlvbiwgc28gYW4gZW5kIHVzZXIgc2VlcyB0aGUgZXJyb3IgaW1tZWRpYXRlbHlcbiAgICogPGJyLz4gc2VuZGVyIHRoZSBzdXJ2ZXkgY3JlYXRvciBvYmplY3QgdGhhdCBmaXJlcyB0aGUgZXZlbnRcbiAgICogPGJyLz4gb3B0aW9ucy5vYmogIHRoZSBzdXJ2ZXkgb2JqZWN0IHdoaWNoIHByb3BlcnR5IGlzIGVkaXRlZCBpbiB0aGUgUHJvcGVydHkgRWRpdG9yLlxuICAgKiA8YnIvPiBvcHRpb25zLnByb3BlcnR5TmFtZSAgdGhlIG5hbWUgb2YgdGhlIGVkaXRlZCBwcm9wZXJ0eS5cbiAgICogPGJyLz4gb3B0aW9ucy5lZGl0b3IgdGhlIGluc3RhbmNlIG9mIFByb3BlcnR5IEVkaXRvci5cbiAgICogQHNlZSBvblByb3BlcnR5VmFsdWVDaGFuZ2luZ1xuICAgKi9cbiAgcHVibGljIG9uUHJvcGVydHlFZGl0b3JPYmplY3RBc3NpZ246IFN1cnZleS5FdmVudDxcbiAgICAoc2VuZGVyOiBTdXJ2ZXlDcmVhdG9yLCBvcHRpb25zOiBhbnkpID0+IGFueSxcbiAgICBhbnlcbiAgPiA9IG5ldyBTdXJ2ZXkuRXZlbnQ8KHNlbmRlcjogU3VydmV5Q3JlYXRvciwgb3B0aW9uczogYW55KSA9PiBhbnksIGFueT4oKTtcbiAgLyoqXG4gICAqIFVzZSB0aGlzIGV2ZW50IHRvIG1vZGlmeSB0aGUgc3VydmV5IHRoYXQgdXNlZCBvbiBzZXR0aW5nIHZhbHVlIGZvciBjb25kaXRpb24vZXhwcmVzc2lvbiBwcm9wZXJ0aWVzLCBsaWtlIHZpc2libGVJZiwgZW5hYmxlSWYgYW5kIHNvIG9uLlxuICAgKiA8YnIvPiBzZW5kZXIgdGhlIHN1cnZleSBjcmVhdG9yIG9iamVjdCB0aGF0IGZpcmVzIHRoZSBldmVudFxuICAgKiA8YnIvPiBvcHRpb25zLm9iaiAgdGhlIHN1cnZleSBvYmplY3Qgd2hpY2ggcHJvcGVydHkgaXMgZWRpdGVkIGluIHRoZSBQcm9wZXJ0eSBFZGl0b3IuXG4gICAqIDxici8+IG9wdGlvbnMucHJvcGVydHlOYW1lICB0aGUgbmFtZSBvZiB0aGUgZWRpdGVkIHByb3BlcnR5LlxuICAgKiA8YnIvPiBvcHRpb25zLmVkaXRvciB0aGUgaW5zdGFuY2Ugb2YgUHJvcGVydHkgRWRpdG9yLlxuICAgKiA8YnIvPiBvcHRpb25zLnZhbHVlUXVlc3Rpb25OYW1lIHRoZSBuYW1lIG9mIHRoZSBxdWVzdGlvbiB0aGF0IHNob3dzIGluIHRoZSBzdXJ2ZXkgZm9yIGNob29zaW5nIHRoZSB2YWx1ZVxuICAgKiA8YnIvPiBvcHRpb25zLnN1cnZleSB0aGUgaW5zdGFuY2Ugb2YgdGhlIHN1cnZleSB0aGF0IGFsbG93cyB0byBjaG9vc2UgdGhlIHZhbHVlLiBZb3UgbWF5IG1vZGlmeSBpdCBiZWZvcmUgaXQgc2hvd3MgdG8gdGhlIGVuZC11c2VyXG4gICAqL1xuICBwdWJsaWMgb25Db25kaXRpb25WYWx1ZVN1cnZleUNyZWF0ZWQ6IFN1cnZleS5FdmVudDxcbiAgICAoc2VuZGVyOiBTdXJ2ZXlDcmVhdG9yLCBvcHRpb25zOiBhbnkpID0+IGFueSxcbiAgICBhbnlcbiAgPiA9IG5ldyBTdXJ2ZXkuRXZlbnQ8KHNlbmRlcjogU3VydmV5Q3JlYXRvciwgb3B0aW9uczogYW55KSA9PiBhbnksIGFueT4oKTtcbiAgLyoqXG4gICAqIFVzZSB0aGlzIGV2ZW50IHRvIG1vZGlmeSB0aGUgbGlzdCAobmFtZSBhbmQgdGl0bGVzKSBvZCB0aGUgcXVlc3Rpb25zIGF2YWlsYWJsZSBpbiBhIGNvbmRpdGlvbiBlZGl0b3IuXG4gICAqIDxici8+IHNlbmRlciB0aGUgc3VydmV5IGNyZWF0b3Igb2JqZWN0IHRoYXQgZmlyZXMgdGhlIGV2ZW50XG4gICAqIDxici8+IG9wdGlvbnMub2JqICB0aGUgc3VydmV5IG9iamVjdCB3aGljaCBwcm9wZXJ0eSBpcyBlZGl0ZWQgaW4gdGhlIFByb3BlcnR5IEVkaXRvci5cbiAgICogPGJyLz4gb3B0aW9ucy5wcm9wZXJ0eU5hbWUgIHRoZSBuYW1lIG9mIHRoZSBlZGl0ZWQgcHJvcGVydHkuXG4gICAqIDxici8+IG9wdGlvbnMuZWRpdG9yIHRoZSBpbnN0YW5jZSBvZiBQcm9wZXJ0eSBFZGl0b3IuXG4gICAqIDxici8+IG9wdGlvbnMubGlzdCB0aGUgdGhlIGxpc3Qgb2YgdGhlIHF1ZXN0aW9ucyBhdmFpbGFibGUgZm9yIGNvbmRpdGlvblxuICAgKi9cbiAgcHVibGljIG9uQ29uZGl0aW9uUXVlc3Rpb25zR2V0TGlzdDogU3VydmV5LkV2ZW50PFxuICAgIChzZW5kZXI6IFN1cnZleUNyZWF0b3IsIG9wdGlvbnM6IGFueSkgPT4gYW55LFxuICAgIGFueVxuICA+ID0gbmV3IFN1cnZleS5FdmVudDwoc2VuZGVyOiBTdXJ2ZXlDcmVhdG9yLCBvcHRpb25zOiBhbnkpID0+IGFueSwgYW55PigpO1xuICAvKipcbiAgICogVXNlIHRoaXMgZXZlbnQgdG8gcHJvY2VzcyBrZXkgZG93biBldmVudCBpbiBhIHByb3BlcnR5IGVkaXRvclxuICAgKiA8YnIvPiBzZW5kZXIgdGhlIHN1cnZleSBjcmVhdG9yIG9iamVjdCB0aGF0IGZpcmVzIHRoZSBldmVudFxuICAgKiA8YnIvPiBvcHRpb25zLm9iaiAgdGhlIHN1cnZleSBvYmplY3Qgd2hpY2ggcHJvcGVydHkgaXMgZWRpdGVkIGluIHRoZSBQcm9wZXJ0eSBFZGl0b3IuXG4gICAqIDxici8+IG9wdGlvbnMucHJvcGVydHlOYW1lICB0aGUgbmFtZSBvZiB0aGUgZWRpdGVkIHByb3BlcnR5LlxuICAgKiA8YnIvPiBvcHRpb25zLmVkaXRvciB0aGUgaW5zdGFuY2Ugb2YgUHJvcGVydHkgRWRpdG9yLlxuICAgKiA8YnIvPiBvcHRpb25zLmV2ZW50IHRoZSBpbnN0YW5jZSBvZiBtb3VzZSBldmVudC5cbiAgICovXG4gIHB1YmxpYyBvblByb3BlcnR5RWRpdG9yS2V5RG93bjogU3VydmV5LkV2ZW50PFxuICAgIChzZW5kZXI6IFN1cnZleUNyZWF0b3IsIG9wdGlvbnM6IGFueSkgPT4gYW55LFxuICAgIGFueVxuICA+ID0gbmV3IFN1cnZleS5FdmVudDwoc2VuZGVyOiBTdXJ2ZXlDcmVhdG9yLCBvcHRpb25zOiBhbnkpID0+IGFueSwgYW55PigpO1xuICAvKipcbiAgICogVXNlIHRoaXMgZXZlbnQgdG8gZGlzYWJsZSBzb21lIG9wZXJhdGlvbnMgZm9yIGFuIGVsZW1lbnQgKHF1ZXN0aW9uL3BhbmVsKS5cbiAgICogPGJyLz4gc2VuZGVyIHRoZSBzdXJ2ZXkgY3JlYXRvciBvYmplY3QgdGhhdCBmaXJlcyB0aGUgZXZlbnRcbiAgICogPGJyLz4gb3B0aW9ucy5vYmogIHRoZSBzdXJ2ZXkgb2JqZWN0IHF1ZXN0aW9uL3BhbmVsXG4gICAqIDxici8+IG9wdGlvbnMuYWxsb3dEZWxldGUgc2V0IGl0IHRvIGZhbHNlIHRvIGRpc2FibGUgZGVsZXRpbmcgdGhlIG9iamVjdFxuICAgKiA8YnIvPiBvcHRpb25zLmFsbG93RWRpdCBzZXQgaXQgdG8gZmFsc2UgdG8gZGlzYWJsZSBjYWxsaW5nIHRoZSBtb2RhbCBFZGl0b3JcbiAgICogPGJyLz4gb3B0aW9ucy5hbGxvd0NvcHkgc2V0IGl0IHRvIGZhbHNlIHRvIGRpc2FibGUgY29weWluZyB0aGUgb2JqZWN0XG4gICAqIDxici8+IG9wdGlvbnMuYWxsb3dBZGRUb1Rvb2xib3ggc2V0IGl0IHRvIGZhbHNlIHRvIGRpc2FibGUgYWRkaW5nIGVsZW1lbnQgdG8gVG9vbGJveFxuICAgKiA8YnIvPiBvcHRpb25zLmFsbG93RHJhZ2dpbmcgc2V0IGl0IHRvIGZhbHNlIHRvIGRpc2FibGUgYWRkaW5nIGVsZW1lbnQgdG8gVG9vbGJveFxuICAgKiA8YnIvPiBvcHRpb25zLmFsbG93Q2hhbmdlVHlwZSBzZXQgaXQgdG8gZmFsc2UgdG8gZGlzYWJsZSBjaGFuZ2luZyBlbGVtZW50IHR5cGVcbiAgICovXG4gIHB1YmxpYyBvbkVsZW1lbnRBbGxvd09wZXJhdGlvbnM6IFN1cnZleS5FdmVudDxcbiAgICAoc2VuZGVyOiBTdXJ2ZXlDcmVhdG9yLCBvcHRpb25zOiBhbnkpID0+IGFueSxcbiAgICBhbnlcbiAgPiA9IG5ldyBTdXJ2ZXkuRXZlbnQ8KHNlbmRlcjogU3VydmV5Q3JlYXRvciwgb3B0aW9uczogYW55KSA9PiBhbnksIGFueT4oKTtcbiAgLyoqXG4gICAqIFVzZSB0aGlzIGV2ZW50IHRvIGFkZC9yZW1vdmUvbW9kaWZ5IHRoZSBlbGVtZW50IChxdWVzdGlvbi9wYW5lbCkgbWVudSBpdGVtcy5cbiAgICogPGJyLz4gc2VuZGVyIHRoZSBzdXJ2ZXkgY3JlYXRvciBvYmplY3QgdGhhdCBmaXJlcyB0aGUgZXZlbnRcbiAgICogPGJyLz4gb3B0aW9ucy5vYmogIHRoZSBzdXJ2ZXkgb2JqZWN0IHdoaWNoIHByb3BlcnR5IGlzIGVkaXRlZCBpbiB0aGUgUHJvcGVydHkgRWRpdG9yLlxuICAgKiA8YnIvPiBvcHRpb25zLml0ZW1zIHRoZSBsaXN0IG9mIG1lbnUgaXRlbXMuIEl0IGhhcyB0d28gcmVxdXJpZWQgZmllbGRzOiB0ZXh0IGFuZCBvbkNsaWNrOiBmdW5jdGlvbihvYmo6IFN1cnZleS5CYXNlKSB7fSBhbmQgb3B0aW9uYWwgbmFtZSBmaWVsZC5cbiAgICogQHNlZSBvbkVsZW1lbnRBbGxvd09wZXJhdGlvbnNcbiAgICovXG4gIHB1YmxpYyBvbkRlZmluZUVsZW1lbnRNZW51SXRlbXM6IFN1cnZleS5FdmVudDxcbiAgICAoc2VuZGVyOiBTdXJ2ZXlDcmVhdG9yLCBvcHRpb25zOiBhbnkpID0+IGFueSxcbiAgICBhbnlcbiAgPiA9IG5ldyBTdXJ2ZXkuRXZlbnQ8KHNlbmRlcjogU3VydmV5Q3JlYXRvciwgb3B0aW9uczogYW55KSA9PiBhbnksIGFueT4oKTtcbiAgLyoqXG4gICAqIFVzZSB0aGlzIGV2ZW50IHRvIHNob3cgdGhlIGRlc2NyaXB0aW9uIG9uIHRoZSB0b3Agb3IvYW5kIGJvdHRvbSBvZiB0aGUgcHJvcGVydHkgbW9kYWwgZWRpdG9yLlxuICAgKiA8YnIvPiBzZW5kZXIgdGhlIHN1cnZleSBjcmVhdG9yIG9iamVjdCB0aGF0IGZpcmVzIHRoZSBldmVudFxuICAgKiA8YnIvPiBvcHRpb25zLm9iaiAgdGhlIHN1cnZleSBvYmplY3Qgd2hpY2ggcHJvcGVydHkgaXMgZWRpdGVkIGluIHRoZSBQcm9wZXJ0eSBFZGl0b3IuXG4gICAqIDxici8+IG9wdGlvbnMucHJvcGVydHlOYW1lIHRoZSBwcm9wZXJ0eSBuYW1lXG4gICAqIDxici8+IG9wdGlvbnMuaHRtbFRvcCB0aGUgaHRtbCAgdGhhdCB5b3Ugd2FudCB0byBzZWUgb24gdGhlIHRvcCBvZiB0aGUgbW9kYWwgd2luZG93XG4gICAqIDxici8+IG9wdGlvbnMuaHRtbEJvdHRvbSB0aGUgaHRtbCB0aGF0IHlvdSB3YW50IHRvIHNlZSBvbiB0aGUgYm90dG9tIG9mIHRoZSBtb2RhbCB3aW5kb3dcbiAgICovXG4gIHB1YmxpYyBvblNob3dQcm9wZXJ0eU1vZGFsRWRpdG9yRGVzY3JpcHRpb246IFN1cnZleS5FdmVudDxcbiAgICAoc2VuZGVyOiBTdXJ2ZXlDcmVhdG9yLCBvcHRpb25zOiBhbnkpID0+IGFueSxcbiAgICBhbnlcbiAgPiA9IG5ldyBTdXJ2ZXkuRXZlbnQ8KHNlbmRlcjogU3VydmV5Q3JlYXRvciwgb3B0aW9uczogYW55KSA9PiBhbnksIGFueT4oKTtcbiAgLyoqXG4gICAqIFVzZSB0aGlzIGV2ZW50IHRvIGNoYW5nZSB0aGUgdGV4dCBzaG93aW5nIGluIHRoZSBkcm9wZG93biBvZiB0aGUgcHJvcGVydHkgZ3JpZC5cbiAgICogPGJyLz4gc2VuZGVyIHRoZSBzdXJ2ZXkgY3JlYXRvciBvYmplY3QgdGhhdCBmaXJlcyB0aGUgZXZlbnRcbiAgICogPGJyLz4gb3B0aW9ucy5vYmogIHRoZSBzdXJ2ZXkgb2JqZWN0LlxuICAgKiA8YnIvPiBvcHRpb25zLnRleHQgdGhlIGN1cnJlbnQgb2JqZWN0IHRleHQsIGNvbW1vbmx5IGl0IGlzIGEgbmFtZS4gWW91IG11c3QgY2hhbmdlIHRoaXMgYXR0cmlidXRlXG4gICAqL1xuICBwdWJsaWMgb25HZXRPYmplY3RUZXh0SW5Qcm9wZXJ0eUdyaWQ6IFN1cnZleS5FdmVudDxcbiAgICAoc2VuZGVyOiBTdXJ2ZXlDcmVhdG9yLCBvcHRpb25zOiBhbnkpID0+IGFueSxcbiAgICBhbnlcbiAgPiA9IG5ldyBTdXJ2ZXkuRXZlbnQ8KHNlbmRlcjogU3VydmV5Q3JlYXRvciwgb3B0aW9uczogYW55KSA9PiBhbnksIGFueT4oKTtcbiAga29BdXRvU2F2ZSA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuICAvKipcbiAgICogVGhlIGV2ZW50IGlzIGNhbGxlZCB3aGVuIGVuZC11c2VyIGFkZGVzIG5ldyBlbGVtZW50IChxdWVzdGlvbiBvciBwYW5lbCkgaW50byB0aGUgc3VydmV5IHRvb2xib3guXG4gICAqIEl0IGNhbGxzIGJlZm9yZSBhZGRpbmcgdGhlIGVsZW1lbnQgaW50byB0b29sYm94IGFuZCBpdCBhbGxvd3MgdG8gY2hhbmdlIHRoZSB0b29sYm94IGl0ZW0gYXR0cmlidXRlcyB1c2luZyBvcHRpb25zLml0ZW1PcHRpb25zIHBhcmFtZXRlclxuICAgKiA8YnIvPiBzZW5kZXIgdGhlIHN1cnZleSBjcmVhdG9yIG9iamVjdCB0aGF0IGZpcmVzIHRoZSBldmVudFxuICAgKiA8YnIvPiBvcHRpb25zLmVsZW1lbnQgaXMgYSBuZXcgYWRkZWQgZWxlbWVudFxuICAgKiA8YnIvPiBvcHRpb25zLml0ZW1PcHRpb25zIGEganNvbiBvYmplY3QgdGhhdCBhbGxvd3MgeW91IHRvIG92ZXJyaWRlIHF1ZXN0aW9uIHByb3BlcnRpZXMuIEF0dHJpYnV0ZXMgYXJlOiBuYW1lLCB0aXRsZSwgaXNDb3BpZWQsIGljb25OYW1lLCBqc29uIGFuZCBjYXRlZ29yeS5cbiAgICogQHNlZSBvbkN1c3RvbUVsZW1lbnRBZGRlZEludG9Ub29sYm94XG4gICAqL1xuICBwdWJsaWMgb25DdXN0b21FbGVtZW50QWRkaW5nSW50b1Rvb2xib3g6IFN1cnZleS5FdmVudDxcbiAgICAoc2VuZGVyOiBTdXJ2ZXlDcmVhdG9yLCBvcHRpb25zOiBhbnkpID0+IGFueSxcbiAgICBhbnlcbiAgPiA9IG5ldyBTdXJ2ZXkuRXZlbnQ8KHNlbmRlcjogU3VydmV5Q3JlYXRvciwgb3B0aW9uczogYW55KSA9PiBhbnksIGFueT4oKTtcbiAgLyoqXG4gICAqIFRoZSBldmVudCBpcyBjYWxsZWQgd2hlbiBlbmQtdXNlciBhZGRlcyBuZXcgZWxlbWVudCAocXVlc3Rpb24gb3IgcGFuZWwpIGludG8gdGhlIHN1cnZleSB0b29sYm94LlxuICAgKiA8YnIvPiBzZW5kZXIgdGhlIHN1cnZleSBjcmVhdG9yIG9iamVjdCB0aGF0IGZpcmVzIHRoZSBldmVudFxuICAgKiA8YnIvPiBvcHRpb25zLmVsZW1lbnQgaXMgYSBuZXcgYWRkZWQgZWxlbWVudFxuICAgKiBAc2VlIG9uQ3VzdG9tRWxlbWVudEFkZGluZ0ludG9Ub29sYm94XG4gICAqL1xuICBwdWJsaWMgb25DdXN0b21FbGVtZW50QWRkZWRJbnRvVG9vbGJveDogU3VydmV5LkV2ZW50PFxuICAgIChzZW5kZXI6IFN1cnZleUNyZWF0b3IsIG9wdGlvbnM6IGFueSkgPT4gYW55LFxuICAgIGFueVxuICA+ID0gbmV3IFN1cnZleS5FdmVudDwoc2VuZGVyOiBTdXJ2ZXlDcmVhdG9yLCBvcHRpb25zOiBhbnkpID0+IGFueSwgYW55PigpO1xuICAvKipcbiAgICogVGhlIGV2ZW50IGlzIGZpcmVkIG9uIHVwbG9hZGluZyB0aGUgZmlsZS4gVGhlcmUgYXJlIHR3byBwcm9wZXJ0aWVzIGluIG9wdGlvbnM6IG9wdGlvbnMubmFtZSBvcHRpb25zLmNhbGxiYWNrLlxuICAgKiA8YnIvPiBzZW5kZXIgdGhlIHN1cnZleSBjcmVhdG9yIG9iamVjdCB0aGF0IGZpcmVzIHRoZSBldmVudFxuICAgKiA8YnIvPiAgbmFtZTogbmFtZSwgZmlsZTogZmlsZSwgYWNjZXB0OiBhY2NlcHRcbiAgICogPGJyLz4gZmlsZSB0aGUgSmF2YXNjcmlwdCBGaWxlIG9iamVjdFxuICAgKiA8YnIvPiBjYWxsYmFjayBjYWxsZWQgb24gdXBsb2FkIGNvbXBsZXRlXG4gICAqIEBzZWUgdXBsb2FkRmlsZVxuICAgKi9cbiAgcHVibGljIG9uVXBsb2FkRmlsZTogU3VydmV5LkV2ZW50PFxuICAgIChzZW5kZXI6IFN1cnZleUNyZWF0b3IsIG9wdGlvbnM6IGFueSkgPT4gYW55LFxuICAgIGFueVxuICA+ID0gbmV3IFN1cnZleS5FdmVudDwoc2VuZGVyOiBTdXJ2ZXlDcmVhdG9yLCBvcHRpb25zOiBhbnkpID0+IGFueSwgYW55PigpO1xuICAvKipcbiAgICogVGhlIG1ldGhvZCBpcyBjYWxsZWQgd2hlbiB0aGUgdHJhbnNsYXRpb24gZnJvbSBjc3YgZmlsZSBpcyBpbXBvcnRlZC5cbiAgICogQHNlZSB0cmFuc2xhdGlvblxuICAgKiBAc2VlIHNob3dUcmFuc2xhdGlvblRhYlxuICAgKi9cbiAgcHVibGljIG9uVHJhbnNsYXRpb25JbXBvcnRlZDogU3VydmV5LkV2ZW50PFxuICAgIChzZW5kZXI6IFN1cnZleUNyZWF0b3IsIG9wdGlvbnM6IGFueSkgPT4gYW55LFxuICAgIGFueVxuICA+ID0gbmV3IFN1cnZleS5FdmVudDwoc2VuZGVyOiBTdXJ2ZXlDcmVhdG9yLCBvcHRpb25zOiBhbnkpID0+IGFueSwgYW55PigpO1xuICAvKipcbiAgICogVXNlIHRoaXMgZXZlbnQgdG8gY29udHJvbCBkcmFnJmRyb3Agb3BlcmF0aW9ucy5cbiAgICogPGJyLz4gc2VuZGVyIHRoZSBzdXJ2ZXkgY3JlYXRvciBvYmplY3QgdGhhdCBmaXJlcyB0aGUgZXZlbnQuXG4gICAqIDxici8+IG9wdGlvbnMuc3VydmV5IHRoZSBlZGl0aW5nIHN1cnZleSBvYmplY3QuXG4gICAqIDxici8+IG9wdGlvbnMuYWxsb3cgc2V0IGl0IHRvIGZhbHNlIHRvIGRpc2FibGUgZHJhZ2dpbmcuXG4gICAqIDxici8+IG9wdGlvbnMudGFyZ2V0IGEgdGFyZ2V0IGVsZW1lbnQgdGhhdCBpcyBkcmFnZ2luZy5cbiAgICogPGJyLz4gb3B0aW9ucy5zb3VyY2UgYSBzb3VyY2UgZWxlbWVudC4gSXQgY2FuIGJlIG51bGwsIGlmIGl0IGlzIGEgbmV3IGVsZW1lbnQsIGRyYWdnaW5nIGZyb20gdG9vbGJveC5cbiAgICogPGJyLz4gb3B0aW9ucy5wYXJlbnQgYSBwYWdlIG9yIHBhbmVsIHdoZXJlIHRhcmdldCBlbGVtZW50IGlzIGRyYWdnaW5nLlxuICAgKiA8YnIvPiBvcHRpb25zLmluc2VydEJlZm9yZSBhbiBlbGVtZW50IGJlZm9yZSB0aGUgdGFyZ2V0IGVsZW1lbnQgaXMgZHJhZ2dpbmcuIEl0IGNhbiBiZSBudWxsIGlmIHBhcmVudCBjb250YWluZXIgKHBhZ2Ugb3IgcGFuZWwpIGlzIGVtcHR5IG9yIGRyYWdnaW5nIGFuIGVsZW1lbnQgdW5kZXIgdGhlIGxhc3QgZWxlbWVudCBvZiB0aGUgY29udGFpbmVyLlxuICAgKiA8YnIvPiBvcHRpb25zLmluc2VydEFmdGVyIGFuIGVsZW1lbnQgYWZ0ZXIgdGhlIHRhcmdldCBlbGVtZW50IGlzIGRyYWdnaW5nLiBJdCBjYW4gYmUgbnVsbCBpZiBwYXJlbnQgY29udGFpbmVyIChwYWdlIG9yIHBhbmVsKSBpcyBlbXB0eSBvciBkcmFnZ2luZyBlbGVtZW50IHRvIHRoZSB0b3Agb2YgdGhlIHBhcmVudCBjb250YWluZXIuXG4gICAqL1xuICBwdWJsaWMgb25EcmFnRHJvcEFsbG93OiBTdXJ2ZXkuRXZlbnQ8XG4gICAgKHNlbmRlcjogU3VydmV5Q3JlYXRvciwgb3B0aW9uczogYW55KSA9PiBhbnksXG4gICAgYW55XG4gID4gPSBuZXcgU3VydmV5LkV2ZW50PChzZW5kZXI6IFN1cnZleUNyZWF0b3IsIG9wdGlvbnM6IGFueSkgPT4gYW55LCBhbnk+KCk7XG4gIC8qKlxuICAgKiBVc2UgdGhpcyBldmVudCB0byBnZXQgYWNjZXNzIHJlbmRlcmVkIGFkb3JkZXIuXG4gICAqIDxici8+IHNlbmRlciB0aGUgc3VydmV5IGNyZWF0b3Igb2JqZWN0IHRoYXQgZmlyZXMgdGhlIGV2ZW50LlxuICAgKiA8YnIvPiBvcHRpb25zLnN1cnZleSB0aGUgZWRpdGluZyBzdXJ2ZXkgb2JqZWN0LlxuICAgKiA8YnIvPiBvcHRpb25zLnF1ZXN0aW9uIHRoZSBzdXJ2ZXkgZWxlbWVudCBvZiB0aGUgYWRvcm5lci5cbiAgICogPGJyLz4gb3B0aW9ucy5hZG9ybmVyIHRoZSBhZG9ybmVyIGlkLlxuICAgKiA8YnIvPiBvcHRpb25zLmVsZW1lbnQgYSByb290IGFkb3JuZXIgZWxlbWVudC5cbiAgICogPGJyLz4gb3B0aW9ucy5jb250ZXh0IGEgY29udGV4dCBmb3IgYWRvcm5lciBlbGVtZW50LCBlLmcuIGN1cnJlbnQgaXRlbSBvZiBhIHNlbGVjdCBiYXNlIHF1ZXN0aW9uLlxuICAgKi9cbiAgcHVibGljIG9uQWRvcm5lclJlbmRlcmVkOiBTdXJ2ZXkuRXZlbnQ8XG4gICAgKHNlbmRlcjogU3VydmV5Q3JlYXRvciwgb3B0aW9uczogYW55KSA9PiBhbnksXG4gICAgYW55XG4gID4gPSBuZXcgU3VydmV5LkV2ZW50PChzZW5kZXI6IFN1cnZleUNyZWF0b3IsIG9wdGlvbnM6IGFueSkgPT4gYW55LCBhbnk+KCk7XG4gIC8qKlxuICAgKiBUaGUgZXZlbnQgaXMgY2FsbGVkIGFmdGVyIHVzZXIgY2xvc2VzIHRoZSBwb3B1cCBlbGVtZW50IGVkaXRvci5cbiAgICogPGJyLz4gb3B0aW9ucy5lbGVtZW50IHRoZSBlZGl0ZWQgZWxlbWVudC5cbiAgICogPGJyLz4gb3B0aW9ucy5pc0NhbmNlbGVkIGluZGljYXRlZCB1c2VyIGNsaWNrZWQgQ2FuY2VsLlxuICAgKi9cbiAgcHVibGljIG9uRWxlbWVudEVkaXRvckNsb3NlZDogU3VydmV5LkV2ZW50PFxuICAgIChzZW5kZXI6IFN1cnZleUNyZWF0b3IsIG9wdGlvbnM6IGFueSkgPT4gYW55LFxuICAgIGFueVxuICA+ID0gbmV3IFN1cnZleS5FdmVudDwoc2VuZGVyOiBTdXJ2ZXlDcmVhdG9yLCBvcHRpb25zOiBhbnkpID0+IGFueSwgYW55PigpO1xuXG4gIC8qKlxuICAgKiBBIGJvb2xlYW4gcHJvcGVydHksIGZhbHNlIGJ5IGRlZmF1bHQuIFNldCBpdCB0byB0cnVlIHRvIGNhbGwgcHJvdGVjdGVkIGRvU2F2ZSBtZXRob2QgYXV0b21hdGljYWxseSBvbiBzdXJ2ZXkgY2hhbmdpbmcuXG4gICAqL1xuICBwdWJsaWMgZ2V0IGlzQXV0b1NhdmUoKSB7XG4gICAgcmV0dXJuIHRoaXMua29BdXRvU2F2ZSgpO1xuICB9XG4gIHB1YmxpYyBzZXQgaXNBdXRvU2F2ZShuZXdWYWwpIHtcbiAgICB0aGlzLmtvQXV0b1NhdmUobmV3VmFsKTtcbiAgfVxuICAvKipcbiAgICogU2V0IGl0IHRvIGZhbHNlIHRvIHN1cHByZXNzIGFuIGFsZXJ0IG1lc3NhZ2UgYWJvdXQgZXJyb3Igb24gc2F2aW5nIHRoZSBzdXJ2ZXkgaW50byBkYXRhYmFzZS5cbiAgICovXG4gIHB1YmxpYyBzaG93RXJyb3JPbkZhaWxlZFNhdmU6IGJvb2xlYW4gPSB0cnVlO1xuICBrb1Nob3dTdGF0ZSA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuICAvKipcbiAgICogQSBib29sZWFuIHByb3BlcnR5LCBmYWxzZSBieSBkZWZhdWx0LiBTZXQgaXQgdG8gdHJ1ZSB0byBzaG93IHRoZSBzdGF0ZSBpbiB0aGUgdG9vbGJhciAoc2F2aW5nL3NhdmVkKS5cbiAgICovXG4gIHB1YmxpYyBnZXQgc2hvd1N0YXRlKCkge1xuICAgIHJldHVybiB0aGlzLmtvU2hvd1N0YXRlKCk7XG4gIH1cbiAgcHVibGljIHNldCBzaG93U3RhdGUobmV3VmFsKSB7XG4gICAgdGhpcy5rb1Nob3dTdGF0ZShuZXdWYWwpO1xuICB9XG4gIGtvUmVhZE9ubHkgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcbiAgLyoqXG4gICAqIEEgYm9vbGVhbiBwcm9wZXJ0eSwgZmFsc2UgYnkgZGVmYXVsdC4gU2V0IGl0IHRvIHRydWUgdG8gZGVueSBlZGl0aW5nLlxuICAgKi9cbiAgcHVibGljIGdldCByZWFkT25seSgpIHtcbiAgICByZXR1cm4gdGhpcy5rb1JlYWRPbmx5KCk7XG4gIH1cbiAgcHVibGljIHNldCByZWFkT25seShuZXdWYWwpIHtcbiAgICB0aGlzLmtvUmVhZE9ubHkobmV3VmFsKTtcbiAgfVxuXG4gIGtvSXNTaG93RGVzaWduZXI6IGFueTtcbiAga29WaWV3VHlwZTogYW55O1xuICBrb0NhbkRlbGV0ZU9iamVjdDogYW55O1xuICBrb09iamVjdHM6IGFueTtcbiAga29TZWxlY3RlZE9iamVjdDoga28uT2JzZXJ2YWJsZTxhbnk+O1xuICBrb1Nob3dTYXZlQnV0dG9uOiBhbnk7XG4gIGtvR2VuZXJhdGVWYWxpZEpTT046IGFueTtcbiAga29TaG93T3B0aW9uczogYW55O1xuICBrb1Nob3dQcm9wZXJ0eUdyaWQgPSBrby5vYnNlcnZhYmxlKHRydWUpO1xuICBrb1Nob3dUb29sYm94ID0ga28ub2JzZXJ2YWJsZSh0cnVlKTtcbiAga29IaWRlQWR2YW5jZWRTZXR0aW5ncyA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuICBrb1Rlc3RTdXJ2ZXlXaWR0aDogYW55O1xuICBrb0Rlc2lnbmVySGVpZ2h0OiBhbnk7XG4gIGtvU2hvd1BhZ2VzVG9vbGJveDogYW55O1xuICBnZW5lcmF0ZVZhbGlkSlNPTkNsaWNrOiBhbnk7XG4gIGdlbmVyYXRlUmVhZGFibGVKU09OQ2xpY2s6IGFueTtcbiAgZG9VbmRvQ2xpY2s6IGFueTtcbiAgZG9SZWRvQ2xpY2s6IGFueTtcbiAgZGVsZXRlT2JqZWN0Q2xpY2s6IGFueTtcbiAga29TdGF0ZSA9IGtvLm9ic2VydmFibGUoXCJcIik7XG4gIHJ1blN1cnZleUNsaWNrOiBhbnk7XG5cbiAgc2F2ZUJ1dHRvbkNsaWNrOiBhbnk7XG4gIGRyYWdnaW5nVG9vbGJveEl0ZW06IGFueTtcbiAgY2xpY2tUb29sYm94SXRlbTogYW55O1xuICBkcmFnRW5kOiBhbnk7XG4gIC8qKlxuICAgKiBUaGUgU3VydmV5IENyZWF0b3IgY29uc3RydWN0b3IuXG4gICAqIEBwYXJhbSByZW5kZXJlZEVsZW1lbnQgSHRtbEVsZW1lbnQgb3IgaHRtbCBlbGVtZW50IGlkIHdoZXJlIHN1cnZleSBjcmVhdG9yIHdpbGwgYmUgcmVuZGVyZWRcbiAgICogQHBhcmFtIG9wdGlvbnMgc3VydmV5IGNyZWF0b3Igb3B0aW9ucy4gVGhlIGZvbGxvd2luZyBvcHRpb25zIGFyZSBhdmFpbGFibGU6IHNob3dKU09ORWRpdG9yVGFiLFxuICAgKiBzaG93VGVzdFN1cnZleVRhYiwgc2hvd0VtYmVkZWRTdXJ2ZXlUYWIsIHNob3dUcmFuc2xhdGlvblRhYiwgaW5wbGFjZUVkaXRGb3JWYWx1ZXMsIHVzZVRhYnNJbkVsZW1lbnRFZGl0b3IsXG4gICAqIHNob3dQcm9wZXJ0eUdyaWQsIHNob3dUb29sYm94LCBhbGxvd01vZGlmeVBhZ2VzXG4gICAqIHF1ZXN0aW9uVHlwZXMsIHNob3dPcHRpb25zLCBnZW5lcmF0ZVZhbGlkSlNPTiwgaXNBdXRvU2F2ZSwgZGVzaWduZXJIZWlnaHQsIHNob3dFcnJvck9uRmFpbGVkU2F2ZSwgc2hvd09iamVjdFRpdGxlcywgc2hvd1RpdGxlc0luRXhwcmVzc2lvbnMsXG4gICAqIHNob3dQYWdlc0luVGVzdFN1cnZleVRhYiwgc2hvd0RlZmF1bHRMYW5ndWFnZUluVGVzdFN1cnZleVRhYiwgc2hvd0ludmlzaWJsZUVsZW1lbnRzSW5UZXN0U3VydmV5VGFiXG4gICAqL1xuICBjb25zdHJ1Y3RvcihyZW5kZXJlZEVsZW1lbnQ6IGFueSA9IG51bGwsIG9wdGlvbnM6IGFueSA9IG51bGwpIHtcbiAgICB0aGlzLmtvU2hvd09wdGlvbnMgPSBrby5vYnNlcnZhYmxlKCk7XG4gICAgdGhpcy5rb0dlbmVyYXRlVmFsaWRKU09OID0ga28ub2JzZXJ2YWJsZSh0cnVlKTtcbiAgICB0aGlzLmtvRGVzaWduZXJIZWlnaHQgPSBrby5vYnNlcnZhYmxlKCk7XG4gICAgdGhpcy5rb1Nob3dQYWdlc1Rvb2xib3ggPSBrby5vYnNlcnZhYmxlKHRydWUpO1xuICAgIHRoaXMuc2V0T3B0aW9ucyhvcHRpb25zKTtcbiAgICB0aGlzLmtvQ2FuRGVsZXRlT2JqZWN0ID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cbiAgICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgICBTdHlsZXNNYW5hZ2VyLmFwcGx5VGhlbWUoU3R5bGVzTWFuYWdlci5jdXJyZW50VGhlbWUoKSk7XG5cbiAgICB0aGlzLnBhZ2VzID0ga28ub2JzZXJ2YWJsZUFycmF5PFN1cnZleS5QYWdlPigpO1xuXG4gICAgdGhpcy5rb1Nob3dTYXZlQnV0dG9uID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG4gICAgdGhpcy5rb1Rlc3RTdXJ2ZXlXaWR0aCA9IGtvLm9ic2VydmFibGUoXCIxMDAlXCIpO1xuICAgIHRoaXMuc2F2ZUJ1dHRvbkNsaWNrID0gZnVuY3Rpb24oKSB7XG4gICAgICBzZWxmLmRvU2F2ZSgpO1xuICAgIH07XG4gICAgdGhpcy5rb09iamVjdHMgPSBrby5vYnNlcnZhYmxlQXJyYXkoKTtcbiAgICB3aW5kb3dbXCJzZWxcIl0gPSB0aGlzLmtvU2VsZWN0ZWRPYmplY3Q7XG4gICAgdGhpcy5rb1NlbGVjdGVkT2JqZWN0ID0ga28ub2JzZXJ2YWJsZSgpO1xuICAgIHRoaXMua29TZWxlY3RlZE9iamVjdC5zdWJzY3JpYmUoZnVuY3Rpb24obmV3VmFsdWUpIHtcbiAgICAgIHNlbGYuc2VsZWN0ZWRPYmplY3RDaGFuZ2VkKG5ld1ZhbHVlICE9IG51bGwgPyBuZXdWYWx1ZS52YWx1ZSA6IG51bGwpO1xuICAgIH0pO1xuICAgIHRoaXMua29HZW5lcmF0ZVZhbGlkSlNPTi5zdWJzY3JpYmUoZnVuY3Rpb24obmV3VmFsdWUpIHtcbiAgICAgIGlmICghc2VsZi5vcHRpb25zKSBzZWxmLm9wdGlvbnMgPSB7fTtcbiAgICAgIHNlbGYub3B0aW9ucy5nZW5lcmF0ZVZhbGlkSlNPTiA9IG5ld1ZhbHVlO1xuICAgICAgaWYgKHNlbGYuZ2VuZXJhdGVWYWxpZEpTT05DaGFuZ2VkQ2FsbGJhY2spXG4gICAgICAgIHNlbGYuZ2VuZXJhdGVWYWxpZEpTT05DaGFuZ2VkQ2FsbGJhY2sobmV3VmFsdWUpO1xuICAgIH0pO1xuICAgIHRoaXMuc3VydmV5T2JqZWN0cyA9IG5ldyBTdXJ2ZXlPYmplY3RzKFxuICAgICAgdGhpcy5rb09iamVjdHMsXG4gICAgICB0aGlzLmtvU2VsZWN0ZWRPYmplY3QsXG4gICAgICBmdW5jdGlvbihvYmo6IFN1cnZleS5CYXNlKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHNlbGYuZ2V0T2JqZWN0RGlzcGxheU5hbWUob2JqKTtcbiAgICAgIH1cbiAgICApO1xuICAgIHRoaXMuc3VydmV5T2JqZWN0cy5nZXRJdGVtVGV4dENhbGxiYWNrID0gZnVuY3Rpb24ob2JqLCB0ZXh0KSB7XG4gICAgICB2YXIgb3B0aW9ucyA9IHsgb2JqOiBvYmosIHRleHQ6IHRleHQgfTtcbiAgICAgIHNlbGYub25HZXRPYmplY3RUZXh0SW5Qcm9wZXJ0eUdyaWQuZmlyZShzZWxmLCBvcHRpb25zKTtcbiAgICAgIHJldHVybiBvcHRpb25zLnRleHQ7XG4gICAgfTtcbiAgICB0aGlzLnNlbGVjdFBhZ2UgPSAocGFnZTogU3VydmV5LlBhZ2VNb2RlbCkgPT4ge1xuICAgICAgdGhpcy5zdXJ2ZXlPYmplY3RzLnNlbGVjdE9iamVjdChwYWdlKTtcbiAgICB9O1xuICAgIHRoaXMudW5kb1JlZG8gPSBuZXcgU3VydmV5VW5kb1JlZG8oKTtcblxuICAgIHRoaXMuc2VsZWN0ZWRPYmplY3RFZGl0b3JWYWx1ZSA9IG5ldyBTdXJ2ZXlPYmplY3RFZGl0b3IodGhpcyk7XG4gICAgdGhpcy5zZWxlY3RlZE9iamVjdEVkaXRvclZhbHVlLm9uU29ydFByb3BlcnR5Q2FsbGJhY2sgPSBmdW5jdGlvbihcbiAgICAgIG9iajogYW55LFxuICAgICAgcHJvcGVydHkxOiBTdXJ2ZXkuSnNvbk9iamVjdFByb3BlcnR5LFxuICAgICAgcHJvcGVydHkyOiBTdXJ2ZXkuSnNvbk9iamVjdFByb3BlcnR5XG4gICAgKTogbnVtYmVyIHtcbiAgICAgIHJldHVybiBzZWxmLm9uQ3VzdG9tU29ydFByb3BlcnR5T2JqZWN0UHJvcGVydHkob2JqLCBwcm9wZXJ0eTEsIHByb3BlcnR5Mik7XG4gICAgfTtcbiAgICB0aGlzLnNlbGVjdGVkT2JqZWN0RWRpdG9yVmFsdWUub25Qcm9wZXJ0eVZhbHVlQ2hhbmdlZC5hZGQoXG4gICAgICAoc2VuZGVyLCBvcHRpb25zKSA9PiB7XG4gICAgICAgIG9wdGlvbnMudXBkYXRlZFZhbHVlID0gc2VsZi5vblByb3BlcnR5VmFsdWVDaGFuZ2VkKFxuICAgICAgICAgIG9wdGlvbnMucHJvcGVydHksXG4gICAgICAgICAgb3B0aW9ucy5vYmplY3QsXG4gICAgICAgICAgb3B0aW9ucy5uZXdWYWx1ZVxuICAgICAgICApO1xuICAgICAgfVxuICAgICk7XG4gICAgdGhpcy5zZWxlY3RlZE9iamVjdEVkaXRvclZhbHVlLm9uQWZ0ZXJSZW5kZXJDYWxsYmFjayA9IGZ1bmN0aW9uKFxuICAgICAgb2JqLFxuICAgICAgaHRtbEVsZW1lbnQsXG4gICAgICBwcm9wXG4gICAgKSB7XG4gICAgICBpZiAoc2VsZi5vblByb3BlcnR5QWZ0ZXJSZW5kZXIuaXNFbXB0eSkgcmV0dXJuO1xuICAgICAgdmFyIG9wdGlvbnMgPSB7XG4gICAgICAgIG9iajogb2JqLFxuICAgICAgICBodG1sRWxlbWVudDogaHRtbEVsZW1lbnQsXG4gICAgICAgIHByb3BlcnR5OiBwcm9wLnByb3BlcnR5LFxuICAgICAgICBwcm9wZXJ0eUVkaXRvcjogcHJvcC5lZGl0b3JcbiAgICAgIH07XG4gICAgICBzZWxmLm9uUHJvcGVydHlBZnRlclJlbmRlci5maXJlKHNlbGYsIG9wdGlvbnMpO1xuICAgIH07XG4gICAgdGhpcy5xdWVzdGlvbkVkaXRvcldpbmRvdyA9IG5ldyBTdXJ2ZXlQcm9wZXJ0eUVkaXRvclNob3dXaW5kb3coKTtcbiAgICB0aGlzLnN1cnZleUxpdmUgPSBuZXcgU3VydmV5TGl2ZVRlc3Rlcih0aGlzKTtcbiAgICB0aGlzLnN1cnZleUVtYmVkaW5nID0gbmV3IFN1cnZleUVtYmVkaW5nV2luZG93KCk7XG4gICAgdGhpcy50cmFuc2xhdGlvblZhbHVlID0gbmV3IFRyYW5zbGF0aW9uKFxuICAgICAgdGhpcy5jcmVhdGVTdXJ2ZXkoe30sIFwidHJhbnNsYXRpb25cIilcbiAgICApO1xuICAgIHRoaXMudHJhbnNsYXRpb24uaW1wb3J0RmluaXNoZWRDYWxsYmFjayA9IGZ1bmN0aW9uKCkge1xuICAgICAgc2VsZi5vblRyYW5zbGF0aW9uSW1wb3J0ZWQuZmlyZShzZWxmLCB7fSk7XG4gICAgfTtcbiAgICB0aGlzLnRyYW5zbGF0aW9uLmF2YWlsYWJsZVRyYW5sYXRpb25zQ2hhbmdlZENhbGxiYWNrID0gKCkgPT4ge1xuICAgICAgdGhpcy5zZXRNb2RpZmllZCh7IHR5cGU6IFwiVFJBTlNMQVRJT05TX0NIQU5HRURcIiB9KTtcbiAgICB9O1xuICAgIHRoaXMudHJhbnNsYXRpb24udHJhbmxhdGlvbkNoYW5nZWRDYWxsYmFjayA9IChcbiAgICAgIGxvY2FsZTogc3RyaW5nLFxuICAgICAgbmFtZTogc3RyaW5nLFxuICAgICAgdmFsdWU6IHN0cmluZyxcbiAgICAgIGNvbnRleHQ6IGFueVxuICAgICkgPT4ge1xuICAgICAgdGhpcy5zZXRNb2RpZmllZCh7XG4gICAgICAgIHR5cGU6IFwiVFJBTlNMQVRJT05TX0NIQU5HRURcIixcbiAgICAgICAgbG9jYWxlLFxuICAgICAgICBuYW1lLFxuICAgICAgICB2YWx1ZSxcbiAgICAgICAgY29udGV4dFxuICAgICAgfSk7XG4gICAgfTtcbiAgICB0aGlzLmxvZ2ljVmFsdWUgPSBuZXcgU3VydmV5TG9naWModGhpcy5jcmVhdGVTdXJ2ZXkoe30sIFwibG9naWNcIikpO1xuICAgIHRoaXMubG9naWMub25DaGFuZ2VkQ2FsbGJhY2sgPSAoaXRlbSwgY2hhbmdlVHlwZSkgPT4ge1xuICAgICAgdGhpcy5zZXRNb2RpZmllZCh7XG4gICAgICAgIHR5cGU6IFwiTE9HSUNfQ0hBTkdFRFwiLFxuICAgICAgICBpdGVtOiBpdGVtLFxuICAgICAgICBjaGFuZ2VUeXBlOiBjaGFuZ2VUeXBlXG4gICAgICB9KTtcbiAgICB9O1xuICAgIHRoaXMudG9vbGJveFZhbHVlID0gbmV3IFF1ZXN0aW9uVG9vbGJveChcbiAgICAgIHRoaXMub3B0aW9ucyAmJiB0aGlzLm9wdGlvbnMucXVlc3Rpb25UeXBlc1xuICAgICAgICA/IHRoaXMub3B0aW9ucy5xdWVzdGlvblR5cGVzXG4gICAgICAgIDogbnVsbFxuICAgICk7XG5cbiAgICB0aGlzLmtvVmlld1R5cGUgPSBrby5vYnNlcnZhYmxlKFwiZGVzaWduZXJcIik7XG4gICAgdGhpcy5rb1ZpZXdUeXBlLnN1YnNjcmliZShmdW5jdGlvbihuZXdWYWx1ZSkge1xuICAgICAgc2VsZi5vbkFjdGl2ZVRhYkNoYW5nZWQuZmlyZShzZWxmLCB7IHRhYk5hbWU6IG5ld1ZhbHVlIH0pO1xuICAgIH0pO1xuICAgIHRoaXMua29Jc1Nob3dEZXNpZ25lciA9IGtvLmNvbXB1dGVkKGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHNlbGYua29WaWV3VHlwZSgpID09IFwiZGVzaWduZXJcIjtcbiAgICB9KTtcbiAgICB0aGlzLmdlbmVyYXRlVmFsaWRKU09OQ2xpY2sgPSBmdW5jdGlvbigpIHtcbiAgICAgIHNlbGYua29HZW5lcmF0ZVZhbGlkSlNPTih0cnVlKTtcbiAgICB9O1xuICAgIHRoaXMuZ2VuZXJhdGVSZWFkYWJsZUpTT05DbGljayA9IGZ1bmN0aW9uKCkge1xuICAgICAgc2VsZi5rb0dlbmVyYXRlVmFsaWRKU09OKGZhbHNlKTtcbiAgICB9O1xuICAgIHRoaXMucnVuU3VydmV5Q2xpY2sgPSBmdW5jdGlvbigpIHtcbiAgICAgIHNlbGYuc2hvd0xpdmVTdXJ2ZXkoKTtcbiAgICB9O1xuICAgIHRoaXMuZGVsZXRlT2JqZWN0Q2xpY2sgPSBmdW5jdGlvbigpIHtcbiAgICAgIHNlbGYuZGVsZXRlQ3VycmVudE9iamVjdCgpO1xuICAgIH07XG4gICAgdGhpcy5kcmFnZ2luZ1Rvb2xib3hJdGVtID0gZnVuY3Rpb24oaXRlbSwgZSkge1xuICAgICAgc2VsZi5kb0RyYWdnaW5nVG9vbGJveEl0ZW0oaXRlbS5qc29uLCBlKTtcbiAgICB9O1xuICAgIHRoaXMuY2xpY2tUb29sYm94SXRlbSA9IGZ1bmN0aW9uKGl0ZW0pIHtcbiAgICAgIHNlbGYuZG9DbGlja1Rvb2xib3hJdGVtKGl0ZW0uanNvbik7XG4gICAgfTtcbiAgICB0aGlzLmRyYWdFbmQgPSBmdW5jdGlvbihpdGVtLCBlKSB7XG4gICAgICBzZWxmLmRyYWdEcm9wSGVscGVyLmVuZCgpO1xuICAgIH07XG5cbiAgICB0aGlzLmRvVW5kb0NsaWNrID0gZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgb3B0aW9ucyA9IHsgY2FuVW5kbzogdHJ1ZSB9O1xuICAgICAgc2VsZi5vbkJlZm9yZVVuZG8uZmlyZShzZWxmLCBvcHRpb25zKTtcbiAgICAgIGlmIChvcHRpb25zLmNhblVuZG8pIHtcbiAgICAgICAgdmFyIGl0ZW0gPSBzZWxmLnVuZG9SZWRvLnVuZG8oKTtcbiAgICAgICAgc2VsZi5kb1VuZG9SZWRvKGl0ZW0pO1xuICAgICAgICBzZWxmLm9uQWZ0ZXJVbmRvLmZpcmUoc2VsZiwgeyBzdGF0ZTogaXRlbSB9KTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHRoaXMuZG9SZWRvQ2xpY2sgPSBmdW5jdGlvbigpIHtcbiAgICAgIHZhciBvcHRpb25zID0geyBjYW5SZWRvOiB0cnVlIH07XG4gICAgICBzZWxmLm9uQmVmb3JlUmVkby5maXJlKHNlbGYsIG9wdGlvbnMpO1xuICAgICAgaWYgKG9wdGlvbnMuY2FuUmVkbykge1xuICAgICAgICB2YXIgaXRlbSA9IHNlbGYudW5kb1JlZG8ucmVkbygpO1xuICAgICAgICBzZWxmLmRvVW5kb1JlZG8oaXRlbSk7XG4gICAgICAgIHNlbGYub25BZnRlclJlZG8uZmlyZShzZWxmLCB7IHN0YXRlOiBpdGVtIH0pO1xuICAgICAgfVxuICAgIH07XG5cbiAgICB0aGlzLmpzb25FZGl0b3IgPSBuZXcgU3VydmV5SlNPTkVkaXRvcigpO1xuICAgIGtvLmNvbXB1dGVkKCgpID0+IHtcbiAgICAgIHRoaXMuanNvbkVkaXRvci5yZWFkT25seSA9IHRoaXMucmVhZE9ubHk7XG4gICAgfSk7XG5cbiAgICBrby5jb21wdXRlZCgoKSA9PiB7XG4gICAgICB0aGlzLnRhYnMoW10pO1xuICAgICAgdGhpcy50YWJzLnB1c2goe1xuICAgICAgICBuYW1lOiBcImRlc2lnbmVyXCIsXG4gICAgICAgIHRpdGxlOiB0aGlzLmdldExvY1N0cmluZyhcImVkLmRlc2lnbmVyXCIpLFxuICAgICAgICB0ZW1wbGF0ZTogXCJzZS10YWItZGVzaWduZXJcIixcbiAgICAgICAgZGF0YTogdGhpcyxcbiAgICAgICAgYWN0aW9uOiAoKSA9PiB0aGlzLnNob3dEZXNpZ25lcigpXG4gICAgICB9KTtcbiAgICAgIGlmICh0aGlzLnNob3dUZXN0U3VydmV5VGFiKSB7XG4gICAgICAgIHRoaXMudGFicy5wdXNoKHtcbiAgICAgICAgICBuYW1lOiBcInRlc3RcIixcbiAgICAgICAgICB0aXRsZTogdGhpcy5nZXRMb2NTdHJpbmcoXCJlZC50ZXN0U3VydmV5XCIpLFxuICAgICAgICAgIHRlbXBsYXRlOiBcInNlLXRhYi10ZXN0XCIsXG4gICAgICAgICAgZGF0YTogdGhpcyxcbiAgICAgICAgICBhY3Rpb246ICgpID0+IHRoaXMuc2hvd1Rlc3RTdXJ2ZXkoKVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLnNob3dMb2dpY1RhYikge1xuICAgICAgICB0aGlzLnRhYnMucHVzaCh7XG4gICAgICAgICAgbmFtZTogXCJsb2dpY1wiLFxuICAgICAgICAgIHRpdGxlOiB0aGlzLmdldExvY1N0cmluZyhcImVkLmxvZ2ljXCIpLFxuICAgICAgICAgIHRlbXBsYXRlOiBcInN1cnZleWxvZ2ljXCIsXG4gICAgICAgICAgZGF0YTogdGhpcy5sb2dpYyxcbiAgICAgICAgICBhY3Rpb246ICgpID0+IHRoaXMuc2hvd0xvZ2ljRWRpdG9yKClcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5zaG93SlNPTkVkaXRvclRhYikge1xuICAgICAgICB0aGlzLnRhYnMucHVzaCh7XG4gICAgICAgICAgbmFtZTogXCJlZGl0b3JcIixcbiAgICAgICAgICB0aXRsZTogdGhpcy5nZXRMb2NTdHJpbmcoXCJlZC5qc29uRWRpdG9yXCIpLFxuICAgICAgICAgIHRlbXBsYXRlOiBcImpzb25lZGl0b3JcIixcbiAgICAgICAgICBkYXRhOiB0aGlzLmpzb25FZGl0b3IsXG4gICAgICAgICAgYWN0aW9uOiAoKSA9PiB0aGlzLnNob3dKc29uRWRpdG9yKClcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5zaG93RW1iZWRlZFN1cnZleVRhYikge1xuICAgICAgICB0aGlzLnRhYnMucHVzaCh7XG4gICAgICAgICAgbmFtZTogXCJlbWJlZFwiLFxuICAgICAgICAgIHRpdGxlOiB0aGlzLmdldExvY1N0cmluZyhcImVkLmVtYmVkU3VydmV5XCIpLFxuICAgICAgICAgIHRlbXBsYXRlOiBcInN1cnZleWVtYmVkaW5nXCIsXG4gICAgICAgICAgZGF0YTogdGhpcy5zdXJ2ZXlFbWJlZGluZyxcbiAgICAgICAgICBhY3Rpb246ICgpID0+IHRoaXMuc2hvd0VtYmVkRWRpdG9yKClcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5zaG93VHJhbnNsYXRpb25UYWIpIHtcbiAgICAgICAgdGhpcy50YWJzLnB1c2goe1xuICAgICAgICAgIG5hbWU6IFwidHJhbnNsYXRpb25cIixcbiAgICAgICAgICB0aXRsZTogdGhpcy5nZXRMb2NTdHJpbmcoXCJlZC50cmFuc2xhdGlvblwiKSxcbiAgICAgICAgICB0ZW1wbGF0ZTogXCJ0cmFuc2xhdGlvblwiLFxuICAgICAgICAgIGRhdGE6IHRoaXMudHJhbnNsYXRpb24sXG4gICAgICAgICAgYWN0aW9uOiAoKSA9PiB0aGlzLnNob3dUcmFuc2xhdGlvbkVkaXRvcigpXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaWYgKHJlbmRlcmVkRWxlbWVudCkge1xuICAgICAgdGhpcy5yZW5kZXIocmVuZGVyZWRFbGVtZW50KTtcbiAgICB9XG5cbiAgICB0aGlzLnRleHQgPSBcIlwiO1xuXG4gICAgdGhpcy5hZGRUb29sYmFySXRlbXMoKTtcbiAgfVxuXG4gIHRhYnMgPSBrby5vYnNlcnZhYmxlQXJyYXkoKTtcblxuICB0aGVtZUNzcyA9IGtvLmNvbXB1dGVkKCgpID0+IHtcbiAgICByZXR1cm4gW1wiYm9vdHN0cmFwXCIsIFwiYm9vdHN0cmFwbWF0ZXJpYWxcIl0uaW5kZXhPZihcbiAgICAgIFN0eWxlc01hbmFnZXIuY3VycmVudFRoZW1lKClcbiAgICApID09PSAtMVxuICAgICAgPyBcInN2X2RlZmF1bHRfY3NzXCJcbiAgICAgIDogXCJzdl9cIiArIFN0eWxlc01hbmFnZXIuY3VycmVudFRoZW1lKCkgKyBcIl9jc3NcIjtcbiAgfSk7XG5cbiAgcHJvdGVjdGVkIGFkZFRvb2xiYXJJdGVtcygpIHtcbiAgICB0aGlzLnRvb2xiYXJJdGVtcy5wdXNoKHtcbiAgICAgIGlkOiBcInN2ZC11bmRvXCIsXG4gICAgICBpY29uOiBcImljb24tYWN0aW9udW5kb1wiLFxuICAgICAgdmlzaWJsZTogdGhpcy5rb0lzU2hvd0Rlc2lnbmVyLFxuICAgICAgZW5hYmxlZDogdGhpcy51bmRvUmVkby5rb0NhblVuZG8sXG4gICAgICBhY3Rpb246IHRoaXMuZG9VbmRvQ2xpY2ssXG4gICAgICB0aXRsZTogdGhpcy5nZXRMb2NTdHJpbmcoXCJlZC51bmRvXCIpXG4gICAgfSk7XG4gICAgdGhpcy50b29sYmFySXRlbXMucHVzaCh7XG4gICAgICBpZDogXCJzdmQtcmVkb1wiLFxuICAgICAgaWNvbjogXCJpY29uLWFjdGlvbnJlZG9cIixcbiAgICAgIHZpc2libGU6IHRoaXMua29Jc1Nob3dEZXNpZ25lcixcbiAgICAgIGVuYWJsZWQ6IHRoaXMudW5kb1JlZG8ua29DYW5SZWRvLFxuICAgICAgYWN0aW9uOiB0aGlzLmRvUmVkb0NsaWNrLFxuICAgICAgdGl0bGU6IHRoaXMuZ2V0TG9jU3RyaW5nKFwiZWQucmVkb1wiKVxuICAgIH0pO1xuICAgIHRoaXMudG9vbGJhckl0ZW1zLnB1c2goe1xuICAgICAgaWQ6IFwic3ZkLXN1cnZleS1zZXR0aW5nc1wiLFxuICAgICAgaWNvbjogXCJpY29uLWFjdGlvbnNldHRpbmdzXCIsXG4gICAgICB2aXNpYmxlOiB0aGlzLmtvSXNTaG93RGVzaWduZXIsXG4gICAgICBlbmFibGVkOiBmYWxzZSxcbiAgICAgIGFjdGlvbjogKCkgPT4ge1xuICAgICAgICB0aGlzLnN1cnZleU9iamVjdHMuc2VsZWN0T2JqZWN0KHRoaXMuc3VydmV5KTtcbiAgICAgICAgdGhpcy5zaG93UXVlc3Rpb25FZGl0b3IodGhpcy5zdXJ2ZXkpO1xuICAgICAgfSxcbiAgICAgIHRpdGxlOiB0aGlzLmdldExvY1N0cmluZyhcImVkLnNldHRpbmdzXCIpXG4gICAgfSk7XG4gICAgdGhpcy50b29sYmFySXRlbXMucHVzaCh7XG4gICAgICBpZDogXCJzdmQtb3B0aW9uc1wiLFxuICAgICAgdmlzaWJsZToga28uY29tcHV0ZWQoXG4gICAgICAgICgpID0+IHRoaXMua29Jc1Nob3dEZXNpZ25lcigpICYmIHRoaXMua29TaG93T3B0aW9ucygpXG4gICAgICApLFxuICAgICAgdGl0bGU6IHRoaXMuZ2V0TG9jU3RyaW5nKFwiZWQub3B0aW9uc1wiKSxcbiAgICAgIHRlbXBsYXRlOiBcInN2ZC10b29sYmFyLW9wdGlvbnNcIixcbiAgICAgIGl0ZW1zOiBrby5vYnNlcnZhYmxlQXJyYXkoW1xuICAgICAgICB7XG4gICAgICAgICAgaWQ6IFwic3ZkLXZhbGlkLWpzb25cIixcbiAgICAgICAgICB2aXNpYmxlOiB0cnVlLFxuICAgICAgICAgIGNzczoga28uY29tcHV0ZWQoKCkgPT4gKHRoaXMua29HZW5lcmF0ZVZhbGlkSlNPTigpID8gXCJhY3RpdmVcIiA6IFwiXCIpKSxcbiAgICAgICAgICBhY3Rpb246IHRoaXMuZ2VuZXJhdGVWYWxpZEpTT05DbGljayxcbiAgICAgICAgICB0aXRsZTogdGhpcy5nZXRMb2NTdHJpbmcoXCJlZC5nZW5lcmF0ZVZhbGlkSlNPTlwiKVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgaWQ6IFwic3ZkLXJlYWRhYmxlLWpzb25cIixcbiAgICAgICAgICB2aXNpYmxlOiB0cnVlLFxuICAgICAgICAgIGNzczoga28uY29tcHV0ZWQoKCkgPT4gKCF0aGlzLmtvR2VuZXJhdGVWYWxpZEpTT04oKSA/IFwiYWN0aXZlXCIgOiBcIlwiKSksXG4gICAgICAgICAgYWN0aW9uOiB0aGlzLmdlbmVyYXRlUmVhZGFibGVKU09OQ2xpY2ssXG4gICAgICAgICAgdGl0bGU6IHRoaXMuZ2V0TG9jU3RyaW5nKFwiZWQuZ2VuZXJhdGVSZWFkYWJsZUpTT05cIilcbiAgICAgICAgfVxuICAgICAgXSlcbiAgICB9KTtcbiAgICB0aGlzLnRvb2xiYXJJdGVtcy5wdXNoKHtcbiAgICAgIGlkOiBcInN2ZC10ZXN0XCIsXG4gICAgICB2aXNpYmxlOiBrby5jb21wdXRlZCgoKSA9PiB0aGlzLmtvVmlld1R5cGUoKSA9PT0gXCJ0ZXN0XCIpLFxuICAgICAgdGl0bGU6IGtvLmNvbXB1dGVkKFxuICAgICAgICAoKSA9PlxuICAgICAgICAgIHRoaXMuZ2V0TG9jU3RyaW5nKFwiZWQudGVzdFN1cnZleVdpZHRoXCIpICtcbiAgICAgICAgICBcIiBcIiArXG4gICAgICAgICAgdGhpcy5rb1Rlc3RTdXJ2ZXlXaWR0aCgpXG4gICAgICApLFxuICAgICAgdGVtcGxhdGU6IFwic3ZkLXRvb2xiYXItb3B0aW9uc1wiLFxuICAgICAgaXRlbXM6IGtvLm9ic2VydmFibGVBcnJheShbXG4gICAgICAgIHtcbiAgICAgICAgICBpZDogXCJzdmQtMTAwLWpzb25cIixcbiAgICAgICAgICB2aXNpYmxlOiB0cnVlLFxuICAgICAgICAgIGFjdGlvbjogKCkgPT4gdGhpcy5rb1Rlc3RTdXJ2ZXlXaWR0aChcIjEwMCVcIiksXG4gICAgICAgICAgdGl0bGU6IFwiMTAwJVwiXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBpZDogXCJzdmQtMTIwMHB4LWpzb25cIixcbiAgICAgICAgICB2aXNpYmxlOiB0cnVlLFxuICAgICAgICAgIGFjdGlvbjogKCkgPT4gdGhpcy5rb1Rlc3RTdXJ2ZXlXaWR0aChcIjEyMDBweFwiKSxcbiAgICAgICAgICB0aXRsZTogXCIxMjAwcHhcIlxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgaWQ6IFwic3ZkLTEwMDBweC1qc29uXCIsXG4gICAgICAgICAgdmlzaWJsZTogdHJ1ZSxcbiAgICAgICAgICBhY3Rpb246ICgpID0+IHRoaXMua29UZXN0U3VydmV5V2lkdGgoXCIxMDAwcHhcIiksXG4gICAgICAgICAgdGl0bGU6IFwiMTAwMHB4XCJcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGlkOiBcInN2ZC04MDBweC1qc29uXCIsXG4gICAgICAgICAgdmlzaWJsZTogdHJ1ZSxcbiAgICAgICAgICBhY3Rpb246ICgpID0+IHRoaXMua29UZXN0U3VydmV5V2lkdGgoXCI4MDBweFwiKSxcbiAgICAgICAgICB0aXRsZTogXCI4MDBweFwiXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBpZDogXCJzdmQtNjAwcHgtanNvblwiLFxuICAgICAgICAgIHZpc2libGU6IHRydWUsXG4gICAgICAgICAgYWN0aW9uOiAoKSA9PiB0aGlzLmtvVGVzdFN1cnZleVdpZHRoKFwiNjAwcHhcIiksXG4gICAgICAgICAgdGl0bGU6IFwiNjAwcHhcIlxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgaWQ6IFwic3ZkLTQwMHB4LWpzb25cIixcbiAgICAgICAgICB2aXNpYmxlOiB0cnVlLFxuICAgICAgICAgIGFjdGlvbjogKCkgPT4gdGhpcy5rb1Rlc3RTdXJ2ZXlXaWR0aChcIjQwMHB4XCIpLFxuICAgICAgICAgIHRpdGxlOiBcIjQwMHB4XCJcbiAgICAgICAgfVxuICAgICAgXSlcbiAgICB9KTtcbiAgICB0aGlzLnRvb2xiYXJJdGVtcy5wdXNoKHtcbiAgICAgIGlkOiBcInN2ZC1zYXZlXCIsXG4gICAgICB2aXNpYmxlOiB0aGlzLmtvU2hvd1NhdmVCdXR0b24sXG4gICAgICBhY3Rpb246IHRoaXMuc2F2ZUJ1dHRvbkNsaWNrLFxuICAgICAgaW5uZXJDc3M6IFwic3ZkX3NhdmVfYnRuXCIsXG4gICAgICB0aXRsZTogdGhpcy5nZXRMb2NTdHJpbmcoXCJlZC5zYXZlU3VydmV5XCIpXG4gICAgfSk7XG4gICAgdGhpcy50b29sYmFySXRlbXMucHVzaCh7XG4gICAgICBpZDogXCJzdmQtc3RhdGVcIixcbiAgICAgIHZpc2libGU6IHRoaXMua29TaG93U3RhdGUsXG4gICAgICBjc3M6IFwic3ZkX3N0YXRlXCIsXG4gICAgICBpbm5lckNzczoga28uY29tcHV0ZWQoKCkgPT4gXCJpY29uLVwiICsgdGhpcy5rb1N0YXRlKCkpLFxuICAgICAgdGl0bGU6IGtvLmNvbXB1dGVkKCgpID0+IHRoaXMuZ2V0TG9jU3RyaW5nKFwiZWQuXCIgKyB0aGlzLmtvU3RhdGUoKSkpLFxuICAgICAgdGVtcGxhdGU6IFwic3ZkLXRvb2xiYXItc3RhdGVcIlxuICAgIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIHNldE9wdGlvbnMob3B0aW9uczogYW55KSB7XG4gICAgaWYgKCFvcHRpb25zKSBvcHRpb25zID0ge307XG4gICAgaWYgKCFvcHRpb25zLmhhc093blByb3BlcnR5KFwiZ2VuZXJhdGVWYWxpZEpTT05cIikpXG4gICAgICBvcHRpb25zLmdlbmVyYXRlVmFsaWRKU09OID0gdHJ1ZTtcbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuICAgIHRoaXMuc2hvd0xvZ2ljVGFiVmFsdWUoXG4gICAgICB0eXBlb2Ygb3B0aW9ucy5zaG93TG9naWNUYWIgIT09IFwidW5kZWZpbmVkXCIgPyBvcHRpb25zLnNob3dMb2dpY1RhYiA6IGZhbHNlXG4gICAgKTtcbiAgICB0aGlzLnNob3dKU09ORWRpdG9yVGFiVmFsdWUoXG4gICAgICB0eXBlb2Ygb3B0aW9ucy5zaG93SlNPTkVkaXRvclRhYiAhPT0gXCJ1bmRlZmluZWRcIlxuICAgICAgICA/IG9wdGlvbnMuc2hvd0pTT05FZGl0b3JUYWJcbiAgICAgICAgOiB0cnVlXG4gICAgKTtcbiAgICB0aGlzLnNob3dUZXN0U3VydmV5VGFiVmFsdWUoXG4gICAgICB0eXBlb2Ygb3B0aW9ucy5zaG93VGVzdFN1cnZleVRhYiAhPT0gXCJ1bmRlZmluZWRcIlxuICAgICAgICA/IG9wdGlvbnMuc2hvd1Rlc3RTdXJ2ZXlUYWJcbiAgICAgICAgOiB0cnVlXG4gICAgKTtcbiAgICB0aGlzLnNob3dFbWJlZGVkU3VydmV5VGFiVmFsdWUoXG4gICAgICB0eXBlb2Ygb3B0aW9ucy5zaG93RW1iZWRlZFN1cnZleVRhYiAhPT0gXCJ1bmRlZmluZWRcIlxuICAgICAgICA/IG9wdGlvbnMuc2hvd0VtYmVkZWRTdXJ2ZXlUYWJcbiAgICAgICAgOiBmYWxzZVxuICAgICk7XG4gICAgdGhpcy5zaG93VHJhbnNsYXRpb25UYWJWYWx1ZShcbiAgICAgIHR5cGVvZiBvcHRpb25zLnNob3dUcmFuc2xhdGlvblRhYiAhPT0gXCJ1bmRlZmluZWRcIlxuICAgICAgICA/IG9wdGlvbnMuc2hvd1RyYW5zbGF0aW9uVGFiXG4gICAgICAgIDogZmFsc2VcbiAgICApO1xuICAgIHRoaXMuc2hvd0xvZ2ljVGFiVmFsdWUoXG4gICAgICB0eXBlb2Ygb3B0aW9ucy5zaG93TG9naWNUYWIgIT09IFwidW5kZWZpbmVkXCIgPyBvcHRpb25zLnNob3dMb2dpY1RhYiA6IGZhbHNlXG4gICAgKTtcbiAgICB0aGlzLmhhdmVDb21tZXJjaWFsTGljZW5zZSA9XG4gICAgICB0eXBlb2Ygb3B0aW9ucy5oYXZlQ29tbWVyY2lhbExpY2Vuc2UgIT09IFwidW5kZWZpbmVkXCJcbiAgICAgICAgPyBvcHRpb25zLmhhdmVDb21tZXJjaWFsTGljZW5zZVxuICAgICAgICA6IGZhbHNlO1xuICAgIHRoaXMuaW5wbGFjZUVkaXRGb3JWYWx1ZXMgPVxuICAgICAgdHlwZW9mIG9wdGlvbnMuaW5wbGFjZUVkaXRGb3JWYWx1ZXMgIT09IFwidW5kZWZpbmVkXCJcbiAgICAgICAgPyBvcHRpb25zLmlucGxhY2VFZGl0Rm9yVmFsdWVzXG4gICAgICAgIDogZmFsc2U7XG4gICAgdGhpcy5zaG93T2JqZWN0VGl0bGVzID1cbiAgICAgIHR5cGVvZiBvcHRpb25zLnNob3dPYmplY3RUaXRsZXMgIT09IFwidW5kZWZpbmVkXCJcbiAgICAgICAgPyBvcHRpb25zLnNob3dPYmplY3RUaXRsZXNcbiAgICAgICAgOiBmYWxzZTtcbiAgICB0aGlzLnNob3dUaXRsZXNJbkV4cHJlc3Npb25zID1cbiAgICAgIHR5cGVvZiBvcHRpb25zLnNob3dUaXRsZXNJbkV4cHJlc3Npb25zICE9PSBcInVuZGVmaW5lZFwiXG4gICAgICAgID8gb3B0aW9ucy5zaG93VGl0bGVzSW5FeHByZXNzaW9uc1xuICAgICAgICA6IGZhbHNlO1xuICAgIHRoaXMudXNlVGFic0luRWxlbWVudEVkaXRvciA9XG4gICAgICB0eXBlb2Ygb3B0aW9ucy51c2VUYWJzSW5FbGVtZW50RWRpdG9yICE9PSBcInVuZGVmaW5lZFwiXG4gICAgICAgID8gb3B0aW9ucy51c2VUYWJzSW5FbGVtZW50RWRpdG9yXG4gICAgICAgIDogZmFsc2U7XG4gICAgdGhpcy5zaG93U3RhdGUgPVxuICAgICAgdHlwZW9mIG9wdGlvbnMuc2hvd1N0YXRlICE9PSBcInVuZGVmaW5lZFwiID8gb3B0aW9ucy5zaG93U3RhdGUgOiBmYWxzZTtcbiAgICB0aGlzLmtvU2hvd09wdGlvbnMoXG4gICAgICB0eXBlb2Ygb3B0aW9ucy5zaG93T3B0aW9ucyAhPT0gXCJ1bmRlZmluZWRcIiA/IG9wdGlvbnMuc2hvd09wdGlvbnMgOiBmYWxzZVxuICAgICk7XG4gICAgdGhpcy5zaG93UHJvcGVydHlHcmlkID1cbiAgICAgIHR5cGVvZiBvcHRpb25zLnNob3dQcm9wZXJ0eUdyaWQgIT09IFwidW5kZWZpbmVkXCJcbiAgICAgICAgPyBvcHRpb25zLnNob3dQcm9wZXJ0eUdyaWRcbiAgICAgICAgOiB0cnVlO1xuICAgIHRoaXMuc2hvd1Rvb2xib3ggPVxuICAgICAgdHlwZW9mIG9wdGlvbnMuc2hvd1Rvb2xib3ggIT09IFwidW5kZWZpbmVkXCIgPyBvcHRpb25zLnNob3dUb29sYm94IDogdHJ1ZTtcbiAgICB0aGlzLmtvR2VuZXJhdGVWYWxpZEpTT04odGhpcy5vcHRpb25zLmdlbmVyYXRlVmFsaWRKU09OKTtcbiAgICB0aGlzLmlzQXV0b1NhdmUgPVxuICAgICAgdHlwZW9mIG9wdGlvbnMuaXNBdXRvU2F2ZSAhPT0gXCJ1bmRlZmluZWRcIiA/IG9wdGlvbnMuaXNBdXRvU2F2ZSA6IGZhbHNlO1xuICAgIHRoaXMuc2hvd0Vycm9yT25GYWlsZWRTYXZlID1cbiAgICAgIHR5cGVvZiBvcHRpb25zLnNob3dFcnJvck9uRmFpbGVkU2F2ZSAhPT0gXCJ1bmRlZmluZWRcIlxuICAgICAgICA/IG9wdGlvbnMuc2hvd0Vycm9yT25GYWlsZWRTYXZlXG4gICAgICAgIDogdHJ1ZTtcbiAgICB0aGlzLmlzUlRMVmFsdWUgPVxuICAgICAgdHlwZW9mIG9wdGlvbnMuaXNSVEwgIT09IFwidW5kZWZpbmVkXCIgPyBvcHRpb25zLmlzUlRMIDogZmFsc2U7XG4gICAgdGhpcy5zY3JvbGxUb05ld0VsZW1lbnQgPVxuICAgICAgdHlwZW9mIG9wdGlvbnMuc2Nyb2xsVG9OZXdFbGVtZW50ICE9PSBcInVuZGVmaW5lZFwiXG4gICAgICAgID8gb3B0aW9ucy5zY3JvbGxUb05ld0VsZW1lbnRcbiAgICAgICAgOiB0cnVlO1xuICAgIGlmIChvcHRpb25zLmRlc2lnbmVySGVpZ2h0KSB7XG4gICAgICB0aGlzLmtvRGVzaWduZXJIZWlnaHQob3B0aW9ucy5kZXNpZ25lckhlaWdodCk7XG4gICAgfVxuICAgIGlmIChvcHRpb25zLm9iamVjdHNJbnRlbmQpIHtcbiAgICAgIFN1cnZleU9iamVjdHMuaW50ZW5kID0gb3B0aW9ucy5vYmplY3RzSW50ZW5kO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIG9wdGlvbnMuc2hvd1BhZ2VzVG9vbGJveCAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgdGhpcy5rb1Nob3dQYWdlc1Rvb2xib3gob3B0aW9ucy5zaG93UGFnZXNUb29sYm94KTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBvcHRpb25zLnJlYWRPbmx5ICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICB0aGlzLmtvUmVhZE9ubHkob3B0aW9ucy5yZWFkT25seSk7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5zaG93UGFnZXNJblRlc3RTdXJ2ZXlUYWIgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgIHRoaXMuc2hvd1BhZ2VzSW5UZXN0U3VydmV5VGFiID0gb3B0aW9ucy5zaG93UGFnZXNJblRlc3RTdXJ2ZXlUYWI7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5zaG93RGVmYXVsdExhbmd1YWdlSW5UZXN0U3VydmV5VGFiICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICB0aGlzLnNob3dEZWZhdWx0TGFuZ3VhZ2VJblRlc3RTdXJ2ZXlUYWIgPVxuICAgICAgICBvcHRpb25zLnNob3dEZWZhdWx0TGFuZ3VhZ2VJblRlc3RTdXJ2ZXlUYWI7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5zaG93SW52aXNpYmxlRWxlbWVudHNJblRlc3RTdXJ2ZXlUYWIgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgIHRoaXMuc2hvd0ludmlzaWJsZUVsZW1lbnRzSW5UZXN0U3VydmV5VGFiID1cbiAgICAgICAgb3B0aW9ucy5zaG93SW52aXNpYmxlRWxlbWVudHNJblRlc3RTdXJ2ZXlUYWI7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5hbGxvd01vZGlmeVBhZ2VzICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICB0aGlzLmFsbG93TW9kaWZ5UGFnZXMgPSBvcHRpb25zLmFsbG93TW9kaWZ5UGFnZXM7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBUaGUgZWRpdGluZyBzdXJ2ZXkgb2JqZWN0IChTdXJ2ZXkuU3VydmV5KVxuICAgKi9cbiAgcHVibGljIGdldCBzdXJ2ZXkoKTogU3VydmV5Rm9yRGVzaWduZXIge1xuICAgIHJldHVybiB0aGlzLnN1cnZleVZhbHVlKCk7XG4gIH1cbiAgcHVibGljIGdldCBzZWxlY3RlZE9iamVjdEVkaXRvcigpOiBTdXJ2ZXlPYmplY3RFZGl0b3Ige1xuICAgIHJldHVybiB0aGlzLnNlbGVjdGVkT2JqZWN0RWRpdG9yVmFsdWU7XG4gIH1cbiAgLyoqXG4gICAqIFVzZSB0aGlzIG1ldGhvZCB0byBmb3JjZSB1cGRhdGUgdGhpcyBlbGVtZW50IGluIGVkaXRvci5cbiAgICogQHBhcmFtIGVsZW1lbnQgU3VydmV5LlF1ZXN0aW9uIGlzIGVsZW1lbnQgdG8gdXBkYXRlXG4gICAqL1xuICBwdWJsaWMgdXBkYXRlKGVsZW1lbnQ6IFN1cnZleS5RdWVzdGlvbikge1xuICAgIGVsZW1lbnRbXCJrb0VsZW1lbnRUeXBlXCJdLm5vdGlmeVN1YnNjcmliZXJzKCk7XG4gIH1cbiAgLyoqXG4gICAqIENhbGwgdGhpcyBtZXRob2QgdG8gcmVuZGVyIHRoZSBTdXJ2ZXkgQ3JlYXRvci5cbiAgICogQHBhcmFtIGVsZW1lbnQgSHRtbEVsZW1lbnQgb3IgaHRtbCBlbGVtZW50IGlkIHdoZXJlIHN1cnZleSBjcmVhdG9yIHdpbGwgYmUgcmVuZGVyZWRcbiAgICogQHBhcmFtIG9wdGlvbnMgc3VydmV5IGNyZWF0b3Igb3B0aW9ucy4gVGhlIGZvbGxvd2luZyBvcHRpb25zIGFyZSBhdmFpbGFibGU6IHNob3dKU09ORWRpdG9yVGFiLCBzaG93VGVzdFN1cnZleVRhYiwgc2hvd0VtYmVkZWRTdXJ2ZXlUYWIsXG4gICAqIHNob3dUcmFuc2xhdGlvblRhYiwgc2hvd0xvZ2ljVGFiLCBzaG93T3B0aW9ucywgZ2VuZXJhdGVWYWxpZEpTT04sIGlzQXV0b1NhdmUsIGRlc2lnbmVySGVpZ2h0LlxuICAgKi9cbiAgcHVibGljIHJlbmRlcihlbGVtZW50OiBhbnkgPSBudWxsLCBvcHRpb25zOiBhbnkgPSBudWxsKSB7XG4gICAgaWYgKG9wdGlvbnMpIHRoaXMuc2V0T3B0aW9ucyhvcHRpb25zKTtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgaWYgKGVsZW1lbnQgJiYgdHlwZW9mIGVsZW1lbnQgPT0gXCJzdHJpbmdcIikge1xuICAgICAgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGVsZW1lbnQpO1xuICAgIH1cbiAgICBpZiAoZWxlbWVudCkge1xuICAgICAgdGhpcy5yZW5kZXJlZEVsZW1lbnQgPSBlbGVtZW50O1xuICAgIH1cbiAgICBlbGVtZW50ID0gdGhpcy5yZW5kZXJlZEVsZW1lbnQ7XG4gICAgaWYgKCFlbGVtZW50KSByZXR1cm47XG4gICAgZWxlbWVudC5pbm5lckhUTUwgPSB0ZW1wbGF0ZUVkaXRvckh0bWw7XG4gICAgc2VsZi5hcHBseUJpbmRpbmcoKTtcbiAgfVxuICBwdWJsaWMgbG9hZFN1cnZleShzdXJ2ZXlJZDogc3RyaW5nKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIG5ldyBTdXJ2ZXkuZHhTdXJ2ZXlTZXJ2aWNlKCkubG9hZFN1cnZleShzdXJ2ZXlJZCwgZnVuY3Rpb24oXG4gICAgICBzdWNjZXNzOiBib29sZWFuLFxuICAgICAgcmVzdWx0OiBzdHJpbmcsXG4gICAgICByZXNwb25zZTogYW55XG4gICAgKSB7XG4gICAgICBpZiAoc3VjY2VzcyAmJiByZXN1bHQpIHtcbiAgICAgICAgc2VsZi50ZXh0ID0gSlNPTi5zdHJpbmdpZnkocmVzdWx0KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICAvKipcbiAgICogVGhlIFN1cnZleSBKU09OIGFzIGEgdGV4dC4gVXNlIGl0IHRvIGdldCBTdXJ2ZXkgSlNPTiBvciBjaGFuZ2UgaXQuXG4gICAqIEBzZWUgSlNPTlxuICAgKi9cbiAgcHVibGljIGdldCB0ZXh0KCk6IHN0cmluZyB7XG4gICAgaWYgKHRoaXMua29WaWV3VHlwZSgpID09IFwiZWRpdG9yXCIpIHJldHVybiB0aGlzLmpzb25FZGl0b3IudGV4dDtcbiAgICByZXR1cm4gdGhpcy5nZXRTdXJ2ZXlUZXh0RnJvbURlc2lnbmVyKCk7XG4gIH1cbiAgcHVibGljIHNldCB0ZXh0KHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLmNoYW5nZVRleHQodmFsdWUsIHRydWUpO1xuICB9XG4gIC8qKlxuICAgKiBUaGUgU3VydmV5IEpTT04uIFVzZSBpdCB0byBnZXQgU3VydmV5IEpTT04gb3IgY2hhbmdlIGl0LlxuICAgKiBAc2VlIHRleHRcbiAgICovXG4gIHB1YmxpYyBnZXQgSlNPTigpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLnN1cnZleS50b0pTT04oKTtcbiAgfVxuICBwdWJsaWMgc2V0IEpTT04odmFsOiBhbnkpIHtcbiAgICBpZiAodGhpcy5rb1ZpZXdUeXBlKCkgPT0gXCJlZGl0b3JcIikge1xuICAgICAgdGhpcy5zZXRUZXh0VmFsdWUoSlNPTi5zdHJpbmdpZnkodmFsKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaW5pdFN1cnZleVdpdGhKU09OKHZhbCwgdHJ1ZSk7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBTZXQgSlNPTiBhcyB0ZXh0ICBpbnRvIHN1cnZleS4gQ2xlYXIgdW5kby9yZWRvIHN0YXRlcyBvcHRpb25hbGx5LlxuICAgKiBAcGFyYW0gdmFsdWUgSlNPTiBhcyB0ZXh0XG4gICAqIEBwYXJhbSBjbGVhclN0YXRlIGRlZmF1bHQgZmFsc2UuIFNldCB0aGlzIHBhcmFtZXRlciB0byB0cnVlIHRvIGNsZWFyIHVuZG8vcmVkbyBzdGF0ZXMuXG4gICAqL1xuICBwdWJsaWMgY2hhbmdlVGV4dCh2YWx1ZTogc3RyaW5nLCBjbGVhclN0YXRlID0gZmFsc2UpIHtcbiAgICB2YXIgdGV4dFdvcmtlciA9IG5ldyBTdXJ2ZXlUZXh0V29ya2VyKHZhbHVlKTtcbiAgICBpZiAodGV4dFdvcmtlci5pc0pzb25Db3JyZWN0KSB7XG4gICAgICB0aGlzLmluaXRTdXJ2ZXlXaXRoSlNPTih0ZXh0V29ya2VyLnN1cnZleS50b0pTT04oKSwgY2xlYXJTdGF0ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2V0VGV4dFZhbHVlKHZhbHVlKTtcbiAgICAgIHRoaXMua29WaWV3VHlwZShcImVkaXRvclwiKTtcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBpbml0U3VydmV5V2l0aEpTT04oanNvbjogYW55LCBjbGVhclN0YXRlOiBib29sZWFuKSB7XG4gICAgdGhpcy5pbml0U3VydmV5KGpzb24pO1xuICAgIHRoaXMuc2hvd0Rlc2lnbmVyKCk7XG4gICAgdGhpcy5zZXRVbmRvUmVkb0N1cnJlbnRTdGF0ZShjbGVhclN0YXRlKTtcbiAgfVxuICAvKipcbiAgICogVG9vbGJveCBvYmplY3QuIENvbnRhaW5zIGluZm9ybWF0aW9uIGFib3V0IFF1ZXN0aW9uIHRvb2xib3ggaXRlbXMuXG4gICAqIEBzZWUgUXVlc3Rpb25Ub29sYm94XG4gICAqL1xuICBwdWJsaWMgZ2V0IHRvb2xib3goKTogUXVlc3Rpb25Ub29sYm94IHtcbiAgICByZXR1cm4gdGhpcy50b29sYm94VmFsdWU7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybiB0aGUgdHJhbnNsYXRpb24gbW9kZSBvYmplY3QuXG4gICAqIEBzZWUgc2hvd1RyYW5zbGF0aW9uVGFiXG4gICAqL1xuICBwdWJsaWMgZ2V0IHRyYW5zbGF0aW9uKCk6IFRyYW5zbGF0aW9uIHtcbiAgICByZXR1cm4gdGhpcy50cmFuc2xhdGlvblZhbHVlO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIGxvZ2ljIG1vZGUgb2JqZWN0LlxuICAgKiBAc2VlIHNob3dMb2dpY1RhYlxuICAgKi9cbiAgcHVibGljIGdldCBsb2dpYygpOiBTdXJ2ZXlMb2dpYyB7XG4gICAgcmV0dXJuIHRoaXMubG9naWNWYWx1ZTtcbiAgfVxuICAvKipcbiAgICogVGhlIGxpc3Qgb2YgdG9vbGJhciBpdGVtcy4gWW91IG1heSBhZGQvcmVtb3ZlL3JlcGxhY2UgdGhlbS5cbiAgICogQHNlZSBJVG9vbGJhckl0ZW1cbiAgICovXG4gIHB1YmxpYyB0b29sYmFySXRlbXMgPSBrby5vYnNlcnZhYmxlQXJyYXk8SVRvb2xiYXJJdGVtPigpO1xuICAvKipcbiAgICogR2V0IGFuZCBzZXQgdGhlIG1heGltdW0gb2YgY29waWVkIHF1ZXN0aW9ucy9wYW5lbHMgaW4gdGhlIHRvb2xib3guIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDNcbiAgICovXG4gIHB1YmxpYyBnZXQgY3VzdG9tVG9vbGJveFF1ZXN0aW9uTWF4Q291bnQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy50b29sYm94LmNvcGllZEl0ZW1NYXhDb3VudDtcbiAgfVxuICBwdWJsaWMgc2V0IGN1c3RvbVRvb2xib3hRdWVzdGlvbk1heENvdW50KHZhbHVlOiBudW1iZXIpIHtcbiAgICB0aGlzLnRvb2xib3guY29waWVkSXRlbU1heENvdW50ID0gdmFsdWU7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGNyZWF0b3Igc3RhdGUuIEl0IG1heSByZXR1cm4gZW1wdHkgc3RyaW5nIG9yIFwic2F2aW5nXCIgYW5kIFwic2F2ZWRcIi5cbiAgICovXG4gIHB1YmxpYyBnZXQgc3RhdGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5zdGF0ZVZhbHVlO1xuICB9XG4gIHByb3RlY3RlZCBzZXRTdGF0ZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5zdGF0ZVZhbHVlID0gdmFsdWU7XG4gICAgdGhpcy5rb1N0YXRlKHRoaXMuc3RhdGUpO1xuICB9XG4gIC8qKlxuICAgKiBUaGUgZGVsYXkgb24gc2F2aW5nIHN1cnZleSBKU09OIG9uIGF1dG9TYXZlIGluIG1zLiBJdCBpcyA1MDAgbXMgYnkgZGVmYXVsdC5cbiAgICogSWYgZHVyaW5nIHRoaXMgcGVyaW9kIG9mIHRpbWUgYW4gZW5kLXVzZXIgbW9kaWZ5IHN1cnZleSwgdGhlbiB0aGUgbGFzdCB2ZXJzaW9uIHdpbGwgYmUgc2F2ZWQgb25seS4gU2V0IHRvIDAgdG8gc2F2ZSBpbW1lZGlhdGVseS5cbiAgICogQHNlZSBpc0F1dG9TYXZlXG4gICAqL1xuICBwdWJsaWMgYXV0b1NhdmVEZWxheTogbnVtYmVyID0gNTAwO1xuICBwcml2YXRlIGF1dG9TYXZlVGltZXJJZCA9IG51bGw7XG4gIHByb3RlY3RlZCBkb0F1dG9TYXZlKCkge1xuICAgIGlmICh0aGlzLmF1dG9TYXZlRGVsYXkgPD0gMCkge1xuICAgICAgdGhpcy5kb1NhdmUoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKCEhdGhpcy5hdXRvU2F2ZVRpbWVySWQpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLmF1dG9TYXZlVGltZXJJZCk7XG4gICAgfVxuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICB0aGlzLmF1dG9TYXZlVGltZXJJZCA9IHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICBjbGVhclRpbWVvdXQoc2VsZi5hdXRvU2F2ZVRpbWVySWQpO1xuICAgICAgc2VsZi5hdXRvU2F2ZVRpbWVySWQgPSBudWxsO1xuICAgICAgc2VsZi5kb1NhdmUoKTtcbiAgICB9LCB0aGlzLmF1dG9TYXZlRGVsYXkpO1xuICB9XG4gIHNhdmVObzogbnVtYmVyID0gMDtcbiAgcHJvdGVjdGVkIGRvU2F2ZSgpIHtcbiAgICB0aGlzLnNldFN0YXRlKFwic2F2aW5nXCIpO1xuICAgIGlmICh0aGlzLnNhdmVTdXJ2ZXlGdW5jKSB7XG4gICAgICB0aGlzLnNhdmVObysrO1xuICAgICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgICAgdGhpcy5zYXZlU3VydmV5RnVuYyh0aGlzLnNhdmVObywgZnVuY3Rpb24gZG9TYXZlQ2FsbGJhY2soXG4gICAgICAgIG5vOiBudW1iZXIsXG4gICAgICAgIGlzU3VjY2VzczogYm9vbGVhblxuICAgICAgKSB7XG4gICAgICAgIGlmIChzZWxmLnNhdmVObyA9PT0gbm8pIHtcbiAgICAgICAgICBpZiAoaXNTdWNjZXNzKSB7XG4gICAgICAgICAgICBzZWxmLnNldFN0YXRlKFwic2F2ZWRcIik7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChzZWxmLnNob3dFcnJvck9uRmFpbGVkU2F2ZSkge1xuICAgICAgICAgICAgICBhbGVydChzZWxmLmdldExvY1N0cmluZyhcImVkLnNhdmVFcnJvclwiKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzZWxmLnNldFN0YXRlKFwibW9kaWZpZWRcIik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cbiAgcHVibGljIHNldE1vZGlmaWVkKG9wdGlvbnM6IGFueSA9IG51bGwpIHtcbiAgICB0aGlzLnNldFN0YXRlKFwibW9kaWZpZWRcIik7XG4gICAgdGhpcy5zZXRVbmRvUmVkb0N1cnJlbnRTdGF0ZSgpO1xuICAgIHRoaXMub25Nb2RpZmllZC5maXJlKHRoaXMsIG9wdGlvbnMpO1xuICAgIHRoaXMuaXNBdXRvU2F2ZSAmJiB0aGlzLmRvQXV0b1NhdmUoKTtcbiAgfVxuICAvKipcbiAgICogVW5kbyB0aGUgbGF0ZXN0IHVzZXIgb3BlcmF0aW9uLiBSZXR1cm5zIHRydWUgaWYgaXQgcGVyZm9ybWVzIHN1Y2Nlc3NmdWwuXG4gICAqL1xuICBwdWJsaWMgdW5kbygpOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMudW5kb1JlZG8ua29DYW5VbmRvKCkpIHJldHVybiBmYWxzZTtcbiAgICB0aGlzLmRvVW5kb1JlZG8odGhpcy51bmRvUmVkby51bmRvKCkpO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIC8qKlxuICAgKiBSZWRvIHRoZSBsYXRlc3QgdW5kbyBvcGVyYXRpb24uIFJldHVybnMgdHJ1ZSBpZiBpdCBwZXJmb3JtZXMgc3VjY2Vzc2Z1bC5cbiAgICovXG4gIHB1YmxpYyByZWRvKCk6IGJvb2xlYW4ge1xuICAgIGlmICghdGhpcy51bmRvUmVkby5rb0NhblJlZG8oKSkgcmV0dXJuIGZhbHNlO1xuICAgIHRoaXMuZG9VbmRvUmVkbyh0aGlzLnVuZG9SZWRvLnJlZG8oKSk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcHJpdmF0ZSBzZXRVbmRvUmVkb0N1cnJlbnRTdGF0ZShjbGVhclN0YXRlOiBib29sZWFuID0gZmFsc2UpIHtcbiAgICBpZiAoY2xlYXJTdGF0ZSkge1xuICAgICAgdGhpcy51bmRvUmVkby5jbGVhcigpO1xuICAgIH1cbiAgICB2YXIgc2VsT2JqID0gdGhpcy5rb1NlbGVjdGVkT2JqZWN0KCkgPyB0aGlzLmtvU2VsZWN0ZWRPYmplY3QoKS52YWx1ZSA6IG51bGw7XG4gICAgdGhpcy51bmRvUmVkby5zZXRDdXJyZW50KHRoaXMuc3VydmV5VmFsdWUoKSwgc2VsT2JqID8gc2VsT2JqLm5hbWUgOiBudWxsKTtcbiAgfVxuICAvKipcbiAgICogQXNzaWduIHRvIHRoaXMgcHJvcGVydHkgYSBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgY2FsbGVkIG9uIGNsaWNraW5nIHRoZSAnU2F2ZScgYnV0dG9uIG9yIG9uIGFueSBjaGFuZ2UgaWYgaXNBdXRvU2F2ZSBlcXVhbHMgdHJ1ZS5cbiAgICogQHNlZSBpc0F1dG9TYXZlXG4gICAqL1xuICBwdWJsaWMgZ2V0IHNhdmVTdXJ2ZXlGdW5jKCkge1xuICAgIHJldHVybiB0aGlzLnNhdmVTdXJ2ZXlGdW5jVmFsdWU7XG4gIH1cbiAgcHVibGljIHNldCBzYXZlU3VydmV5RnVuYyh2YWx1ZTogYW55KSB7XG4gICAgdGhpcy5zYXZlU3VydmV5RnVuY1ZhbHVlID0gdmFsdWU7XG4gICAgdGhpcy5rb1Nob3dTYXZlQnV0dG9uKHZhbHVlICE9IG51bGwgJiYgIXRoaXMuaXNBdXRvU2F2ZSk7XG4gIH1cbiAgLyoqXG4gICAqIFNldCBpdCB0byB0cnVlIHRvIHNob3cgXCJPcHRpb25zXCIgbWVudSBhbmQgdG8gZmFsc2UgdG8gaGlkZSB0aGUgbWVudVxuICAgKi9cbiAgcHVibGljIGdldCBzaG93T3B0aW9ucygpIHtcbiAgICByZXR1cm4gdGhpcy5rb1Nob3dPcHRpb25zKCk7XG4gIH1cbiAgcHVibGljIHNldCBzaG93T3B0aW9ucyh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMua29TaG93T3B0aW9ucyh2YWx1ZSk7XG4gIH1cbiAgLyoqXG4gICAqIFNldCBpdCB0byBmYWxzZSB0byBjb21wbGV0ZWx5IGhpZGUgdGhlIFByb3BlcnR5IEdyaWQgb24gdGhlIHJpZ2h0LiBJdCBhbGxvd3MgdG8gZWRpdCB0aGUgcHJvcGVydGllcyBvZiB0aGUgc2VsZWN0ZWQgb2JqZWN0IChxdWVzdGlvbi9wYW5lbC9wYWdlL3N1cnZleSkuXG4gICAqL1xuICBwdWJsaWMgZ2V0IHNob3dQcm9wZXJ0eUdyaWQoKSB7XG4gICAgcmV0dXJuIHRoaXMua29TaG93UHJvcGVydHlHcmlkKCk7XG4gIH1cbiAgcHVibGljIHNldCBzaG93UHJvcGVydHlHcmlkKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5rb1Nob3dQcm9wZXJ0eUdyaWQodmFsdWUpO1xuICAgIHRoaXMua29IaWRlQWR2YW5jZWRTZXR0aW5ncyghdmFsdWUpO1xuICB9XG4gIC8qKlxuICAgKiBTZXQgaXQgdG8gZmFsc2UgdG8gIGhpZGUgdGhlIHF1ZXN0aW9uIHRvb2xib3ggb24gdGhlIGxlZnQuXG4gICAqL1xuICBwdWJsaWMgZ2V0IHNob3dUb29sYm94KCkge1xuICAgIHJldHVybiB0aGlzLmtvU2hvd1Rvb2xib3goKTtcbiAgfVxuICBwdWJsaWMgc2V0IHNob3dUb29sYm94KHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5rb1Nob3dUb29sYm94KHZhbHVlKTtcbiAgfVxuICAvKipcbiAgICogU2V0IGl0IHRvIGZhbHNlIHRvIHRlbXBvcmFyeSBoaWRlIHRoZSBQcm9wZXJ0eSBHcmlkIG9uIHRoZSByaWdodCBzaWRlIG9mIHRoZSBjcmVhdG9yLiBVc2VyIHdpbGwgYmUgYWJsZSB0byBzaG93IHRoZSBQcm9wZXJ0eSBHcmlkIGFnYWluIHZpYSB0aGUgY2xpY2sgb24gdGhlICdBZHZhbmNlZCcgbGFiZWwuIEl0IGFsbG93cyB0byBlZGl0IHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSBzZWxlY3RlZCBvYmplY3QgKHF1ZXN0aW9uL3BhbmVsL3BhZ2Uvc3VydmV5KS5cbiAgICovXG4gIHB1YmxpYyBnZXQgaGlkZUFkdmFuY2VkU2V0dGluZ3MoKSB7XG4gICAgcmV0dXJuIHRoaXMua29IaWRlQWR2YW5jZWRTZXR0aW5ncygpO1xuICB9XG4gIHB1YmxpYyBzZXQgaGlkZUFkdmFuY2VkU2V0dGluZ3ModmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLmtvSGlkZUFkdmFuY2VkU2V0dGluZ3ModmFsdWUpO1xuICB9XG4gIC8qKlxuICAgKiBTZXQgaXQgdG8gdHJ1ZSB0byBzaG93IFwiSlNPTiBFZGl0b3JcIiB0YWIgYW5kIHRvIGZhbHNlIHRvIGhpZGUgdGhlIHRhYlxuICAgKi9cbiAgcHVibGljIGdldCBzaG93SlNPTkVkaXRvclRhYigpIHtcbiAgICByZXR1cm4gdGhpcy5zaG93SlNPTkVkaXRvclRhYlZhbHVlKCk7XG4gIH1cbiAgcHVibGljIHNldCBzaG93SlNPTkVkaXRvclRhYih2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuc2hvd0pTT05FZGl0b3JUYWJWYWx1ZSh2YWx1ZSk7XG4gIH1cbiAgLyoqXG4gICAqIFNldCBpdCB0byB0cnVlIHRvIHNob3cgXCJUZXN0IFN1cnZleVwiIHRhYiBhbmQgdG8gZmFsc2UgdG8gaGlkZSB0aGUgdGFiXG4gICAqL1xuICBwdWJsaWMgZ2V0IHNob3dUZXN0U3VydmV5VGFiKCkge1xuICAgIHJldHVybiB0aGlzLnNob3dUZXN0U3VydmV5VGFiVmFsdWUoKTtcbiAgfVxuICBwdWJsaWMgc2V0IHNob3dUZXN0U3VydmV5VGFiKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5zaG93VGVzdFN1cnZleVRhYlZhbHVlKHZhbHVlKTtcbiAgfVxuICAvKipcbiAgICogU2V0IGl0IHRvIHRydWUgdG8gc2hvdyBcIkVtYmVkIFN1cnZleVwiIHRhYiBhbmQgdG8gZmFsc2UgdG8gaGlkZSB0aGUgdGFiXG4gICAqL1xuICBwdWJsaWMgZ2V0IHNob3dFbWJlZGVkU3VydmV5VGFiKCkge1xuICAgIHJldHVybiB0aGlzLnNob3dFbWJlZGVkU3VydmV5VGFiVmFsdWUoKTtcbiAgfVxuICBwdWJsaWMgc2V0IHNob3dFbWJlZGVkU3VydmV5VGFiKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5zaG93RW1iZWRlZFN1cnZleVRhYlZhbHVlKHZhbHVlKTtcbiAgfVxuICBzaG93RXh0ZXJuYWxIZWxwTGluayA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuICAvKipcbiAgICogU2V0IGl0IHRvIHRydWUgdG8gc2hvdyBcIlRyYW5zbGF0aW9uXCIgdGFiIGFuZCB0byBmYWxzZSB0byBoaWRlIHRoZSB0YWJcbiAgICovXG4gIHB1YmxpYyBnZXQgc2hvd1RyYW5zbGF0aW9uVGFiKCkge1xuICAgIHJldHVybiB0aGlzLnNob3dUcmFuc2xhdGlvblRhYlZhbHVlKCk7XG4gIH1cbiAgcHVibGljIHNldCBzaG93VHJhbnNsYXRpb25UYWIodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnNob3dUcmFuc2xhdGlvblRhYlZhbHVlKHZhbHVlKTtcbiAgfVxuICAvKipcbiAgICogU2V0IGl0IHRvIHRydWUgdG8gc2hvdyBcIkxvZ2ljXCIgdGFiIGFuZCB0byBmYWxzZSB0byBoaWRlIHRoZSB0YWJcbiAgICovXG4gIHB1YmxpYyBnZXQgc2hvd0xvZ2ljVGFiKCkge1xuICAgIHJldHVybiB0aGlzLnNob3dMb2dpY1RhYlZhbHVlKCk7XG4gIH1cbiAgcHVibGljIHNldCBzaG93TG9naWNUYWIodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnNob3dMb2dpY1RhYlZhbHVlKHZhbHVlKTtcbiAgfVxuICAvKipcbiAgICogU2V0IGl0IHRvIHRydWUgdG8gYWN0aXZhdGUgUlRMIHN1cHBvcnRcbiAgICovXG4gIHB1YmxpYyBnZXQgaXNSVEwoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNSVExWYWx1ZTtcbiAgfVxuICBwdWJsaWMgc2V0IGlzUlRMKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5pc1JUTFZhbHVlID0gdmFsdWU7XG4gIH1cbiAgcHVibGljIGNhblNob3dPYmplY3RQcm9wZXJ0eShvYmplY3Q6IGFueSwgcHJvcGVydHlOYW1lOiBzdHJpbmcpIHtcbiAgICBpZiAoIW9iamVjdCB8fCAhb2JqZWN0LmdldFR5cGUpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICB2YXIgcHJvcGVydHkgPSBTdXJ2ZXkuU2VyaWFsaXplci5maW5kUHJvcGVydHkoXG4gICAgICBvYmplY3QuZ2V0VHlwZSgpLFxuICAgICAgcHJvcGVydHlOYW1lXG4gICAgKTtcbiAgICByZXR1cm4gdGhpcy5vbkNhblNob3dPYmplY3RQcm9wZXJ0eShvYmplY3QsIHByb3BlcnR5KTtcbiAgfVxuICBwcm90ZWN0ZWQgb25DYW5TaG93T2JqZWN0UHJvcGVydHkoXG4gICAgb2JqZWN0OiBhbnksXG4gICAgcHJvcGVydHk6IFN1cnZleS5Kc29uT2JqZWN0UHJvcGVydHlcbiAgKTogYm9vbGVhbiB7XG4gICAgdmFyIG9wdGlvbnMgPSB7IG9iajogb2JqZWN0LCBwcm9wZXJ0eTogcHJvcGVydHksIGNhblNob3c6IHRydWUgfTtcbiAgICB0aGlzLm9uQ2FuU2hvd1Byb3BlcnR5LmZpcmUodGhpcywgb3B0aW9ucyk7XG4gICAgcmV0dXJuIG9wdGlvbnMuY2FuU2hvdztcbiAgfVxuICBwcm90ZWN0ZWQgb25DdXN0b21Tb3J0UHJvcGVydHlPYmplY3RQcm9wZXJ0eShcbiAgICBvYmplY3Q6IGFueSxcbiAgICBwcm9wZXJ0eTE6IFN1cnZleS5Kc29uT2JqZWN0UHJvcGVydHksXG4gICAgcHJvcGVydHkyOiBTdXJ2ZXkuSnNvbk9iamVjdFByb3BlcnR5XG4gICk6IG51bWJlciB7XG4gICAgaWYgKHRoaXMub25DdXN0b21Tb3J0UHJvcGVydHkuaXNFbXB0eSkgcmV0dXJuIDA7XG4gICAgdmFyIG9wdGlvbnMgPSB7XG4gICAgICBvYmo6IG9iamVjdCxcbiAgICAgIHByb3BlcnR5MTogcHJvcGVydHkxLFxuICAgICAgcHJvcGVydHkyOiBwcm9wZXJ0eTIsXG4gICAgICByZXN1bHQ6IDBcbiAgICB9O1xuICAgIHRoaXMub25DdXN0b21Tb3J0UHJvcGVydHkuZmlyZSh0aGlzLCBvcHRpb25zKTtcbiAgICByZXR1cm4gb3B0aW9ucy5yZXN1bHQ7XG4gIH1cblxuICBwcml2YXRlIHNldFRleHRWYWx1ZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5qc29uRWRpdG9yLnRleHQgPSB2YWx1ZTtcbiAgfVxuICAvKipcbiAgICogQWRkIGEgbmV3IHBhZ2UgaW50byB0aGUgZWRpdGluZyBzdXJ2ZXkuXG4gICAqL1xuICBwdWJsaWMgYWRkUGFnZSA9ICgpID0+IHtcbiAgICB2YXIgbmFtZSA9IFN1cnZleUhlbHBlci5nZXROZXdQYWdlTmFtZSh0aGlzLnBhZ2VzKCkpO1xuICAgIHZhciBwYWdlID0gPFN1cnZleS5QYWdlPnRoaXMuc3VydmV5LmFkZE5ld1BhZ2UobmFtZSk7XG4gICAgdGhpcy5wYWdlcy52YWx1ZUhhc011dGF0ZWQoKTsgLy9UT0RPIHdoeSB0aGlzIGlzIG5lZWQgPyAoa28gcHJvYmxlbSlcbiAgICB0aGlzLmFkZFBhZ2VUb1VJKHBhZ2UpO1xuICAgIHRoaXMuc2V0TW9kaWZpZWQoeyB0eXBlOiBcIlBBR0VfQURERURcIiwgbmV3VmFsdWU6IHBhZ2UgfSk7XG4gIH07XG4gIHB1YmxpYyBkZWxldGVQYWdlID0gKCkgPT4ge1xuICAgIHRoaXMuZGVsZXRlQ3VycmVudE9iamVjdCgpO1xuICAgIHRoaXMucGFnZXMudmFsdWVIYXNNdXRhdGVkKCk7IC8vVE9ETyB3aHkgdGhpcyBpcyBuZWVkID8gKGtvIHByb2JsZW0pXG4gIH07XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBsb2NhbGl6ZWQgc3RyaW5nIGJ5IGl0J3MgaWRcbiAgICogQHBhcmFtIHN0ciB0aGUgc3RyaW5nIGlkLlxuICAgKi9cbiAgcHVibGljIGdldExvY1N0cmluZyhzdHI6IHN0cmluZykge1xuICAgIHJldHVybiBlZGl0b3JMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKHN0cik7XG4gIH1cbiAgcHVibGljIG1vdmVQYWdlID0gKGluZGV4RnJvbTogbnVtYmVyLCBpbmRleFRvOiBudW1iZXIpID0+IHtcbiAgICB2YXIgcGFnZSA9IDxTdXJ2ZXkuUGFnZT50aGlzLnBhZ2VzKClbaW5kZXhUb107XG4gICAgdGhpcy5zdXJ2ZXlPYmplY3RzLnN1cnZleSA9IG51bGw7IC8vIFRPRE8gbWF5IGJlIHdlIGRvbid0IG5lZWQgdGhpcyBoYWNrXG4gICAgdGhpcy5zdXJ2ZXlPYmplY3RzLnN1cnZleSA9IHRoaXMuc3VydmV5O1xuICAgIHRoaXMuc3VydmV5T2JqZWN0cy5zZWxlY3RPYmplY3QocGFnZSk7XG4gICAgdGhpcy5zZXRNb2RpZmllZCh7XG4gICAgICB0eXBlOiBcIlBBR0VfTU9WRURcIixcbiAgICAgIHBhZ2U6IHBhZ2UsXG4gICAgICBpbmRleEZyb206IGluZGV4RnJvbSxcbiAgICAgIGluZGV4VG86IGluZGV4VG9cbiAgICB9KTtcbiAgfTtcbiAgcHVibGljIGFkZFBhZ2VUb1VJKHBhZ2U6IFN1cnZleS5QYWdlKSB7XG4gICAgdGhpcy5zdXJ2ZXlPYmplY3RzLmFkZFBhZ2UocGFnZSk7XG4gIH1cbiAgcHJpdmF0ZSBkb09uUXVlc3Rpb25BZGRlZChxdWVzdGlvbjogU3VydmV5LlF1ZXN0aW9uLCBwYXJlbnRQYW5lbDogYW55KSB7XG4gICAgaWYgKCF0aGlzLmRyYWdEcm9wSGVscGVyLmlzTW92aW5nKSB7XG4gICAgICB2YXIgcGFnZSA9IHRoaXMuZ2V0UGFnZUJ5RWxlbWVudChxdWVzdGlvbik7XG4gICAgICB2YXIgb3B0aW9ucyA9IHsgcXVlc3Rpb246IHF1ZXN0aW9uLCBwYWdlOiBwYWdlIH07XG4gICAgICB0aGlzLm9uUXVlc3Rpb25BZGRlZC5maXJlKHRoaXMsIG9wdGlvbnMpO1xuICAgIH1cbiAgICBpZiAocGFyZW50UGFuZWwuZWxlbWVudHMuaW5kZXhPZihxdWVzdGlvbikgIT09IC0xKSB7XG4gICAgICB0aGlzLnN1cnZleU9iamVjdHMuYWRkRWxlbWVudChxdWVzdGlvbiwgcGFyZW50UGFuZWwpO1xuICAgIH1cbiAgfVxuICBwcml2YXRlIGRvT25FbGVtZW50UmVtb3ZlZChlbGVtZW50OiBTdXJ2ZXkuQmFzZSkge1xuICAgIHRoaXMuc3VydmV5T2JqZWN0cy5yZW1vdmVPYmplY3QoZWxlbWVudCk7XG4gIH1cbiAgcHJpdmF0ZSBkb09uUGFuZWxBZGRlZChwYW5lbDogU3VydmV5LlBhbmVsLCBwYXJlbnRQYW5lbDogYW55KSB7XG4gICAgaWYgKCF0aGlzLmRyYWdEcm9wSGVscGVyLmlzTW92aW5nKSB7XG4gICAgICB2YXIgcGFnZSA9IHRoaXMuZ2V0UGFnZUJ5RWxlbWVudChwYW5lbCk7XG4gICAgICB2YXIgb3B0aW9ucyA9IHsgcGFuZWw6IHBhbmVsLCBwYWdlOiBwYWdlIH07XG4gICAgICB0aGlzLm9uUGFuZWxBZGRlZC5maXJlKHRoaXMsIG9wdGlvbnMpO1xuICAgIH1cbiAgICBpZiAocGFyZW50UGFuZWwuZWxlbWVudHMuaW5kZXhPZihwYW5lbCkgIT09IC0xKSB7XG4gICAgICB0aGlzLnN1cnZleU9iamVjdHMuYWRkRWxlbWVudChwYW5lbCwgcGFyZW50UGFuZWwpO1xuICAgIH1cbiAgfVxuICBwcml2YXRlIGRvT25QYWdlQWRkZWQocGFnZTogU3VydmV5LlBhZ2UpIHtcbiAgICB2YXIgb3B0aW9ucyA9IHsgcGFnZTogcGFnZSB9O1xuICAgIHRoaXMub25QYWdlQWRkZWQuZmlyZSh0aGlzLCBvcHRpb25zKTtcbiAgfVxuICBwdWJsaWMgb25Qcm9wZXJ0eVZhbHVlQ2hhbmdlZChcbiAgICBwcm9wZXJ0eTogU3VydmV5Lkpzb25PYmplY3RQcm9wZXJ0eSxcbiAgICBvYmo6IGFueSxcbiAgICBuZXdWYWx1ZTogYW55XG4gICkge1xuICAgIHZhciBvbGRWYWx1ZSA9IG9ialtwcm9wZXJ0eS5uYW1lXTtcbiAgICBpZiAocHJvcGVydHkubmFtZSA9PT0gXCJwYWdlXCIgJiYgdHlwZW9mIG5ld1ZhbHVlID09PSBcInN0cmluZ1wiKSB7XG4gICAgICBvYmpbcHJvcGVydHkubmFtZV0gPSBvYmouc3VydmV5LmdldFBhZ2VCeU5hbWUobmV3VmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBvYmpbcHJvcGVydHkubmFtZV0gPSBuZXdWYWx1ZTtcbiAgICB9XG5cbiAgICBpZiAocHJvcGVydHkubmFtZSA9PSBcIm5hbWVcIikge1xuICAgICAgdmFyIG5ld05hbWUgPSB0aGlzLmdlbmVyYXRlVW5pcXVlTmFtZShvYmosIG5ld1ZhbHVlKTtcbiAgICAgIHRoaXMudXBkYXRlQ29uZGl0aW9ucyhvbGRWYWx1ZSwgbmV3TmFtZSk7XG4gICAgICB0aGlzLm9uRWxlbWVudE5hbWVDaGFuZ2VkLmZpcmUodGhpcywge1xuICAgICAgICBvYmo6IG9iaixcbiAgICAgICAgb2xkTmFtZTogb2xkVmFsdWUsXG4gICAgICAgIG5ld05hbWU6IG5ld05hbWVcbiAgICAgIH0pO1xuICAgICAgaWYgKG5ld05hbWUgIT0gbmV3VmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIG5ld05hbWU7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChwcm9wZXJ0eS5uYW1lID09IFwibmFtZVwiIHx8IHByb3BlcnR5Lm5hbWUgPT0gXCJ0aXRsZVwiKSB7XG4gICAgICB0aGlzLnN1cnZleU9iamVjdHMubmFtZUNoYW5nZWQob2JqKTtcbiAgICB9XG4gICAgaWYgKHByb3BlcnR5Lm5hbWUgPT09IFwibmFtZVwiKSB7XG4gICAgICB0aGlzLmRpcnR5UGFnZVVwZGF0ZSgpOyAvL1RPRE8gd2h5IHRoaXMgaXMgbmVlZCA/IChrbyBwcm9ibGVtKVxuICAgIH0gZWxzZSBpZiAocHJvcGVydHkubmFtZSA9PT0gXCJwYWdlXCIpIHtcbiAgICAgIHRoaXMuc2VsZWN0UGFnZShuZXdWYWx1ZSk7XG4gICAgICB0aGlzLnN1cnZleU9iamVjdHMuc2VsZWN0T2JqZWN0KG9iaik7XG4gICAgfVxuICAgIHRoaXMuc2V0TW9kaWZpZWQoe1xuICAgICAgdHlwZTogXCJQUk9QRVJUWV9DSEFOR0VEXCIsXG4gICAgICBuYW1lOiBwcm9wZXJ0eS5uYW1lLFxuICAgICAgdGFyZ2V0OiBvYmosXG4gICAgICBvbGRWYWx1ZTogb2xkVmFsdWUsXG4gICAgICBuZXdWYWx1ZTogbmV3VmFsdWVcbiAgICB9KTtcbiAgICAvL1RPRE8gYWRkIGEgZmxhZyB0byBhIHByb3BlcnR5LCBtYXkgY2hhbmdlIG90aGVyIHByb3BlcnRpZXNcbiAgICBpZiAoXG4gICAgICBwcm9wZXJ0eS5uYW1lID09IFwibG9jYWxlXCIgfHxcbiAgICAgIHByb3BlcnR5Lm5hbWUgPT0gXCJoYXNDb21tZW50XCIgfHxcbiAgICAgIHByb3BlcnR5Lm5hbWUgPT0gXCJoYXNTZWxlY3RBbGxcIiB8fFxuICAgICAgcHJvcGVydHkubmFtZSA9PSBcImhhc05vbmVcIiB8fFxuICAgICAgcHJvcGVydHkubmFtZSA9PSBcImhhc090aGVyXCJcbiAgICApIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRPYmplY3RFZGl0b3JWYWx1ZS5vYmplY3RDaGFuZ2VkKCk7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHByaXZhdGUgZG9VbmRvUmVkbyhpdGVtOiBVbmRvUmVkb0l0ZW0pIHtcbiAgICB0aGlzLmluaXRTdXJ2ZXkoaXRlbS5zdXJ2ZXlKU09OKTtcbiAgICBpZiAoaXRlbS5zZWxlY3RlZE9iak5hbWUpIHtcbiAgICAgIHZhciBzZWxPYmogPSB0aGlzLmZpbmRPYmpCeU5hbWUoaXRlbS5zZWxlY3RlZE9iak5hbWUpO1xuICAgICAgaWYgKHNlbE9iaikge1xuICAgICAgICB0aGlzLnN1cnZleU9iamVjdHMuc2VsZWN0T2JqZWN0KHNlbE9iaik7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuc2V0U3RhdGUoXCJtb2RpZmllZFwiKTtcbiAgICB0aGlzLmlzQXV0b1NhdmUgJiYgdGhpcy5kb1NhdmUoKTtcbiAgfVxuICBwcml2YXRlIGZpbmRPYmpCeU5hbWUobmFtZTogc3RyaW5nKTogU3VydmV5LkJhc2Uge1xuICAgIHZhciBwYWdlID0gdGhpcy5zdXJ2ZXkuZ2V0UGFnZUJ5TmFtZShuYW1lKTtcbiAgICBpZiAocGFnZSkgcmV0dXJuIHBhZ2U7XG4gICAgdmFyIHF1ZXN0aW9uID0gPFN1cnZleS5RdWVzdGlvbj50aGlzLnN1cnZleS5nZXRRdWVzdGlvbkJ5TmFtZShuYW1lKTtcbiAgICBpZiAocXVlc3Rpb24pIHJldHVybiBxdWVzdGlvbjtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBwcml2YXRlIGNhblN3aXRjaFZpZXdUeXBlKG5ld1R5cGU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGlmIChuZXdUeXBlICYmIHRoaXMua29WaWV3VHlwZSgpID09IG5ld1R5cGUpIHJldHVybiBmYWxzZTtcbiAgICBpZiAodGhpcy5rb1ZpZXdUeXBlKCkgPT0gXCJkZXNpZ25lclwiKSB7XG4gICAgICB0aGlzLmpzb25FZGl0b3IudGV4dCA9IHRoaXMuZ2V0U3VydmV5VGV4dEZyb21EZXNpZ25lcigpO1xuICAgIH1cbiAgICBpZiAoXG4gICAgICAodGhpcy5rb1ZpZXdUeXBlKCkgPT0gXCJ0cmFuc2xhdGlvblwiIHx8IHRoaXMua29WaWV3VHlwZSgpID09IFwibG9naWNcIikgJiZcbiAgICAgIG5ld1R5cGUgPT0gXCJkZXNpZ25lclwiXG4gICAgKSB7XG4gICAgICB0aGlzLnN1cnZleS5yZW5kZXIoKTtcbiAgICB9XG4gICAgaWYgKHRoaXMua29WaWV3VHlwZSgpICE9IFwiZWRpdG9yXCIpIHJldHVybiB0cnVlO1xuICAgIGlmICghdGhpcy5qc29uRWRpdG9yLmlzSnNvbkNvcnJlY3QpIHtcbiAgICAgIGFsZXJ0KHRoaXMuZ2V0TG9jU3RyaW5nKFwiZWQuY29ycmVjdEpTT05cIikpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAoIXRoaXMucmVhZE9ubHkpIHtcbiAgICAgIHRoaXMuaW5pdFN1cnZleShcbiAgICAgICAgbmV3IFN1cnZleS5Kc29uT2JqZWN0KCkudG9Kc29uT2JqZWN0KHRoaXMuanNvbkVkaXRvci5zdXJ2ZXkpXG4gICAgICApO1xuICAgICAgdGhpcy5zZXRNb2RpZmllZCh7IHR5cGU6IFwiVklFV19UWVBFX0NIQU5HRURcIiwgbmV3VHlwZTogbmV3VHlwZSB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGN1cnJlbnQgc2hvdyB2aWV3IG5hbWUuIFRoZSBwb3NzaWJsZSByZXR1cm5zIHZhbHVlcyBhcmU6XG4gICAqIFwiZGVzaWduZXJcIiwgXCJlZGl0b3JcIiwgXCJ0ZXN0XCIsIFwiZW1iZWRcIiwgXCJsb2dpY1wiIGFuZCBcInRyYW5zbGF0aW9uXCIuXG4gICAqIEBzZWUgc2hvd0Rlc2lnbmVyXG4gICAqIEBzZWUgc2hvd1Rlc3RTdXJ2ZXlcbiAgICogQHNlZSBzaG93SnNvbkVkaXRvclxuICAgKiBAc2VlIHNob3dMb2dpY0VkaXRvclxuICAgKiBAc2VlIHNob3dUcmFuc2xhdGlvbkVkaXRvclxuICAgKiBAc2VlIHNob3dFbWJlZEVkaXRvclxuICAgKi9cbiAgcHVibGljIGdldCBzaG93aW5nVmlld05hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5rb1ZpZXdUeXBlKCk7XG4gIH1cbiAgLyoqXG4gICAqIENoYW5nZSB0aGUgYWN0aXZlIHZpZXcvdGFiLiBJdCB3aWxsIHJldHVybiBmYWxzZSBpZiBpdCBjYW4ndCBjaGFuZ2UgdGhlIGN1cnJlbnQgdGFiLlxuICAgKiBAcGFyYW0gdmlld05hbWUgbmFtZSBvZiBuZXcgYWN0aXZlIHZpZXcgKHRhYikuIFRoZSBmb2xsb3dpbmcgdmFsdWVzIGFyZSBhdmFpbGFibGU6IFwiZGVzaWduZXJcIiwgXCJlZGl0b3JcIiwgXCJ0ZXN0XCIsIFwiZW1iZWRcIiBhbmQgXCJ0cmFuc2xhdGlvblwiLlxuICAgKi9cbiAgcHVibGljIG1ha2VOZXdWaWV3QWN0aXZlKHZpZXdOYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMuY2FuU3dpdGNoVmlld1R5cGUodmlld05hbWUpKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKHZpZXdOYW1lID09IFwiZWRpdG9yXCIpIHtcbiAgICAgIHRoaXMuanNvbkVkaXRvci5zaG93KHRoaXMuZ2V0U3VydmV5VGV4dEZyb21EZXNpZ25lcigpKTtcbiAgICB9XG4gICAgaWYgKHZpZXdOYW1lID09IFwidGVzdFwiKSB7XG4gICAgICB0aGlzLnNob3dMaXZlU3VydmV5KCk7XG4gICAgfVxuICAgIGlmICh2aWV3TmFtZSA9PSBcImVtYmVkXCIpIHtcbiAgICAgIHRoaXMuc2hvd1N1cnZleUVtYmVkaW5nKCk7XG4gICAgfVxuICAgIGlmICh2aWV3TmFtZSA9PSBcInRyYW5zbGF0aW9uXCIpIHtcbiAgICAgIHRoaXMuc2hvd1N1cnZleVRyYW5zbGF0aW9uKCk7XG4gICAgfVxuICAgIHRoaXMua29WaWV3VHlwZSh2aWV3TmFtZSk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgLyoqXG4gICAqIE1ha2UgYSBcIlN1cnZleSBEZXNpZ25lclwiIHRhYiBhY3RpdmUuXG4gICAqL1xuICBwdWJsaWMgc2hvd0Rlc2lnbmVyKCkge1xuICAgIHRoaXMubWFrZU5ld1ZpZXdBY3RpdmUoXCJkZXNpZ25lclwiKTtcbiAgfVxuICAvKipcbiAgICogTWFrZSBhIFwiSlNPTiBFZGl0b3JcIiB0YWIgYWN0aXZlLlxuICAgKi9cbiAgcHVibGljIHNob3dKc29uRWRpdG9yKCkge1xuICAgIHRoaXMubWFrZU5ld1ZpZXdBY3RpdmUoXCJlZGl0b3JcIik7XG4gIH1cbiAgLyoqXG4gICAqIE1ha2UgYSBcIlRlc3QgU3VydmV5XCIgdGFiIGFjdGl2ZS5cbiAgICovXG4gIHB1YmxpYyBzaG93VGVzdFN1cnZleSgpIHtcbiAgICB0aGlzLm1ha2VOZXdWaWV3QWN0aXZlKFwidGVzdFwiKTtcbiAgfVxuICAvKipcbiAgICogTWFrZSBhIFwiRW1iZWQgU3VydmV5XCIgdGFiIGFjdGl2ZS5cbiAgICovXG4gIHB1YmxpYyBzaG93RW1iZWRFZGl0b3IoKSB7XG4gICAgdGhpcy5tYWtlTmV3Vmlld0FjdGl2ZShcImVtYmVkXCIpO1xuICB9XG4gIC8qKlxuICAgKiBNYWtlIGEgXCJUcmFuc2xhdGlvblwiIHRhYiBhY3RpdmUuXG4gICAqL1xuICBwdWJsaWMgc2hvd1RyYW5zbGF0aW9uRWRpdG9yKCkge1xuICAgIHRoaXMubWFrZU5ld1ZpZXdBY3RpdmUoXCJ0cmFuc2xhdGlvblwiKTtcbiAgfVxuICAvKipcbiAgICogTWFrZSBhIFwiTG9naWNcIiB0YWIgYWN0aXZlLlxuICAgKi9cbiAgcHVibGljIHNob3dMb2dpY0VkaXRvcigpIHtcbiAgICBpZiAoIXRoaXMuY2FuU3dpdGNoVmlld1R5cGUoXCJsb2dpY1wiKSkgcmV0dXJuO1xuICAgIHRoaXMuc2hvd1N1cnZleUxvZ2ljKCk7XG4gICAgdGhpcy5rb1ZpZXdUeXBlKFwibG9naWNcIik7XG4gIH1cbiAgcHJpdmF0ZSBnZXRTdXJ2ZXlUZXh0RnJvbURlc2lnbmVyKCkge1xuICAgIHZhciBqc29uID0gdGhpcy5zdXJ2ZXkudG9KU09OKCk7XG4gICAgaWYgKHRoaXMub3B0aW9ucyAmJiB0aGlzLm9wdGlvbnMuZ2VuZXJhdGVWYWxpZEpTT04pXG4gICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoanNvbiwgbnVsbCwgMSk7XG4gICAgcmV0dXJuIG5ldyBTdXJ2ZXlKU09ONSgpLnN0cmluZ2lmeShqc29uLCBudWxsLCAxKTtcbiAgfVxuICBwcml2YXRlIGdldFBhZ2VCeUVsZW1lbnQob2JqOiBTdXJ2ZXkuQmFzZSk6IFN1cnZleS5QYWdlIHtcbiAgICB2YXIgcGFnZSA9IHRoaXMuc3VydmV5LmdldFBhZ2VCeUVsZW1lbnQoPFN1cnZleS5JRWxlbWVudD4oPGFueT5vYmopKTtcbiAgICBpZiAocGFnZSkgcmV0dXJuIDxTdXJ2ZXkuUGFnZT5wYWdlO1xuICAgIHJldHVybiB0aGlzLnN1cnZleU9iamVjdHMuZ2V0U2VsZWN0ZWRPYmplY3RQYWdlKG9iaik7XG4gIH1cbiAgLyoqXG4gICAqIEdldCBvciBzZXQgdGhlIGN1cnJlbnQgc2VsZWN0ZWQgb2JqZWN0IGluIHRoZSBDcmVhdG9yLiBJdCBjYW4gYmUgYSBxdWVzdGlvbiwgcGFuZWwsIHBhZ2Ugb3Igc3VydmV5IGl0c2VsZi5cbiAgICovXG4gIHB1YmxpYyBnZXQgc2VsZWN0ZWRFbGVtZW50KCk6IGFueSB7XG4gICAgcmV0dXJuICEhdGhpcy5rb1NlbGVjdGVkT2JqZWN0KCkgPyB0aGlzLmtvU2VsZWN0ZWRPYmplY3QoKS52YWx1ZSA6IG51bGw7XG4gIH1cbiAgcHVibGljIHNldCBzZWxlY3RlZEVsZW1lbnQodmFsOiBhbnkpIHtcbiAgICB0aGlzLnN1cnZleU9iamVjdHMuc2VsZWN0T2JqZWN0KHZhbCk7XG4gIH1cbiAgcHJpdmF0ZSBzZWxlY3RlZE9iamVjdENoYW5nZWQob2JqOiBTdXJ2ZXkuQmFzZSkge1xuICAgIHZhciBvcHRpb25zID0geyBuZXdTZWxlY3RlZEVsZW1lbnQ6IG9iaiB9O1xuICAgIHRoaXMub25TZWxlY3RlZEVsZW1lbnRDaGFuZ2luZy5maXJlKHRoaXMsIG9wdGlvbnMpO1xuICAgIGlmIChvYmogIT0gb3B0aW9ucy5uZXdTZWxlY3RlZEVsZW1lbnQpIHtcbiAgICAgIHRoaXMuc3VydmV5T2JqZWN0cy5zZWxlY3RPYmplY3Qob3B0aW9ucy5uZXdTZWxlY3RlZEVsZW1lbnQpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgY2FuRGVsZXRlT2JqZWN0ID0gZmFsc2U7XG4gICAgdGhpcy5zZWxlY3RlZE9iamVjdEVkaXRvclZhbHVlLnNlbGVjdGVkT2JqZWN0ID0gb2JqO1xuICAgIHZhciBvYmpUeXBlID0gU3VydmV5SGVscGVyLmdldE9iamVjdFR5cGUob2JqKTtcbiAgICBpZiAob2JqVHlwZSA9PSBPYmpUeXBlLlBhZ2UpIHtcbiAgICAgIHRoaXMuc3VydmV5LmN1cnJlbnRQYWdlID0gPFN1cnZleS5QYWdlPm9iajtcbiAgICAgIGNhbkRlbGV0ZU9iamVjdCA9IHRoaXMucGFnZXMoKS5sZW5ndGggPiAxO1xuICAgIH1cbiAgICBpZiAob2JqVHlwZSA9PSBPYmpUeXBlLlF1ZXN0aW9uIHx8IG9ialR5cGUgPT0gT2JqVHlwZS5QYW5lbCkge1xuICAgICAgdGhpcy5zdXJ2ZXkuc2VsZWN0ZWRFbGVtZW50ID0gb2JqO1xuICAgICAgY2FuRGVsZXRlT2JqZWN0ID0gdHJ1ZTtcbiAgICAgIHRoaXMuc3VydmV5LmN1cnJlbnRQYWdlID0gdGhpcy5nZXRQYWdlQnlFbGVtZW50KG9iaik7XG4gICAgICB2YXIgaWQgPSBvYmpbXCJpZFwiXTtcbiAgICAgIGlmICh0aGlzLnJlbmRlcmVkRWxlbWVudCAmJiBpZCAmJiB0aGlzLnN1cnZleS5jdXJyZW50UGFnZSkge1xuICAgICAgICBsZXQgZWwgPSA8SFRNTEVsZW1lbnQ+dGhpcy5yZW5kZXJlZEVsZW1lbnQucXVlcnlTZWxlY3RvcihcIiNcIiArIGlkKTtcbiAgICAgICAgU3VydmV5SGVscGVyLnNjcm9sbEludG9WaWV3SWZOZWVkZWQoZWwpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnN1cnZleS5zZWxlY3RlZEVsZW1lbnQgPSBudWxsO1xuICAgIH1cbiAgICB0aGlzLmtvQ2FuRGVsZXRlT2JqZWN0KGNhbkRlbGV0ZU9iamVjdCk7XG4gICAgLy9TZWxlY3QyIHdvcmstYXJvdW5kXG4gICAgaWYgKHRoaXMucmVuZGVyZWRFbGVtZW50ICYmIHRoaXMuc2VsZWN0Mikge1xuICAgICAgdmFyIGVsID0gPEhUTUxFbGVtZW50PihcbiAgICAgICAgdGhpcy5yZW5kZXJlZEVsZW1lbnQucXVlcnlTZWxlY3RvcihcIiNzZWxlY3QyLW9iamVjdFNlbGVjdG9yLWNvbnRhaW5lclwiKVxuICAgICAgKTsgLy9UT0RPXG4gICAgICBpZiAoZWwpIHtcbiAgICAgICAgdmFyIGl0ZW0gPSB0aGlzLnN1cnZleU9iamVjdHMua29TZWxlY3RlZCgpO1xuICAgICAgICBpZiAoaXRlbSAmJiBpdGVtLnRleHQpIHtcbiAgICAgICAgICBlbC5pbm5lclRleHQgPSBpdGVtLnRleHQoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLm9uU2VsZWN0ZWRFbGVtZW50Q2hhbmdlZC5maXJlKHRoaXMsIG9wdGlvbnMpO1xuICB9XG4gIHByaXZhdGUgYXBwbHlCaW5kaW5nKCkge1xuICAgIGlmICh0aGlzLnJlbmRlcmVkRWxlbWVudCA9PSBudWxsKSByZXR1cm47XG4gICAga28uY2xlYW5Ob2RlKHRoaXMucmVuZGVyZWRFbGVtZW50KTtcbiAgICBrby5hcHBseUJpbmRpbmdzKHRoaXMsIHRoaXMucmVuZGVyZWRFbGVtZW50KTtcbiAgICB0aGlzLnN1cnZleWpzID0gPEhUTUxFbGVtZW50PihcbiAgICAgIHRoaXMucmVuZGVyZWRFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXCIjc3VydmV5anNcIilcbiAgICApO1xuICAgIGlmICh0aGlzLnN1cnZleWpzKSB7XG4gICAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgICB0aGlzLnN1cnZleWpzLm9ua2V5ZG93biA9IGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgaWYgKCFlKSByZXR1cm47XG4gICAgICAgIC8vIGlmIChlLmtleUNvZGUgPT0gNDYpIHNlbGYuZGVsZXRlUXVlc3Rpb24oKTtcbiAgICAgICAgaWYgKGUua2V5Q29kZSA9PSAzOCB8fCBlLmtleUNvZGUgPT0gNDApIHtcbiAgICAgICAgICBzZWxmLnNlbGVjdFF1ZXN0aW9uKGUua2V5Q29kZSA9PSAzOCk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfVxuXG4gICAgdGhpcy5pbml0U3VydmV5KHRoaXMuZ2V0RGVmYXVsdFN1cnZleUpzb24oKSk7XG4gICAgdGhpcy5zZXRVbmRvUmVkb0N1cnJlbnRTdGF0ZSh0cnVlKTtcblxuICAgIHRoaXMuanNvbkVkaXRvci5pbml0KDxIVE1MRWxlbWVudD4oXG4gICAgICB0aGlzLnJlbmRlcmVkRWxlbWVudC5xdWVyeVNlbGVjdG9yKFwiI3N1cnZleWpzSlNPTkVkaXRvclwiKVxuICAgICkpO1xuICAgIGlmICh0eXBlb2YgalF1ZXJ5ICE9PSBcInVuZGVmaW5lZFwiICYmIGpRdWVyeSgpW1wic2VsZWN0MlwiXSkge1xuICAgICAgdmFyIG9wdGlvbnM6IGFueSA9IHtcbiAgICAgICAgd2lkdGg6IFwiMTAwJVwiXG4gICAgICB9O1xuICAgICAgaWYgKHRoaXMuaXNSVExWYWx1ZSkge1xuICAgICAgICBvcHRpb25zLmRpciA9IFwicnRsXCI7XG4gICAgICB9XG4gICAgICB2YXIgJG9iamVjdFNlbGVjdG9yID0galF1ZXJ5KFwiI29iamVjdFNlbGVjdG9yXCIpO1xuICAgICAgdGhpcy5zZWxlY3QyID0gJG9iamVjdFNlbGVjdG9yW1wic2VsZWN0MlwiXShvcHRpb25zKTtcbiAgICAgICRvYmplY3RTZWxlY3Rvci5vbihcInNlbGVjdDI6c2VsZWN0XCIsIChzZWxfZXZ0OiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5rb1NlbGVjdGVkT2JqZWN0KHNlbF9ldnQudGFyZ2V0LnZhbHVlKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuICBwcml2YXRlIGdldERlZmF1bHRTdXJ2ZXlKc29uKCk6IGFueSB7XG4gICAgdmFyIGpzb24gPSBuZXcgU3VydmV5SlNPTjUoKS5wYXJzZShTdXJ2ZXlDcmVhdG9yLmRlZmF1bHROZXdTdXJ2ZXlUZXh0KTtcbiAgICBpZiAoXG4gICAgICBqc29uW1wicGFnZXNcIl0gJiZcbiAgICAgIGpzb25bXCJwYWdlc1wiXVtcImxlbmd0aFwiXSA+IDAgJiZcbiAgICAgIGpzb25bXCJwYWdlc1wiXVswXVtcIm5hbWVcIl1cbiAgICApIHtcbiAgICAgIGpzb25bXCJwYWdlc1wiXVswXVtcIm5hbWVcIl0gPVxuICAgICAgICBlZGl0b3JMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKFwiZWQubmV3UGFnZU5hbWVcIikgKyBcIjFcIjtcbiAgICB9XG4gICAgcmV0dXJuIGpzb247XG4gIH1cbiAgcHVibGljIGNyZWF0ZVN1cnZleShcbiAgICBqc29uOiBhbnkgPSB7fSxcbiAgICByZWFzb246IHN0cmluZyA9IFwiZGVzaWduZXJcIixcbiAgICBzdXJ2ZXlUeXBlID0gU3VydmV5LlN1cnZleVxuICApIHtcbiAgICB2YXIgc3VydmV5ID0gbmV3IHN1cnZleVR5cGUoanNvbik7XG4gICAgdGhpcy5vblN1cnZleUluc3RhbmNlQ3JlYXRlZC5maXJlKHRoaXMsIHsgc3VydmV5OiBzdXJ2ZXksIHJlYXNvbjogcmVhc29uIH0pO1xuICAgIHJldHVybiBzdXJ2ZXk7XG4gIH1cbiAgcHJpdmF0ZSBpbml0U3VydmV5KGpzb246IGFueSkge1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICB0aGlzLnN1cnZleVZhbHVlKDxTdXJ2ZXlGb3JEZXNpZ25lcj4oXG4gICAgICB0aGlzLmNyZWF0ZVN1cnZleSh7fSwgXCJkZXNpZ25lclwiLCBTdXJ2ZXlGb3JEZXNpZ25lcilcbiAgICApKTtcbiAgICB0aGlzLmRyYWdEcm9wSGVscGVyID0gbmV3IERyYWdEcm9wSGVscGVyKFxuICAgICAgPFN1cnZleS5JU3VydmV5PnRoaXMuc3VydmV5LFxuICAgICAgZnVuY3Rpb24ob3B0aW9ucykge1xuICAgICAgICBzZWxmLnNldE1vZGlmaWVkKG9wdGlvbnMpO1xuICAgICAgfSxcbiAgICAgIHRoaXMucmVuZGVyZWRFbGVtZW50XG4gICAgKTtcbiAgICB0aGlzLmRyYWdEcm9wSGVscGVyLnJlYWRPbmx5ID0gdGhpcy5yZWFkT25seTtcbiAgICB0aGlzLnN1cnZleVZhbHVlKCkuZ2V0RWRpdG9yID0gKCkgPT4gc2VsZjtcbiAgICB0aGlzLnN1cnZleVZhbHVlKCkuc2V0SnNvbk9iamVjdChqc29uKTtcbiAgICBpZiAodGhpcy5zdXJ2ZXlWYWx1ZSgpLmlzRW1wdHkpIHtcbiAgICAgIHRoaXMuc3VydmV5VmFsdWUoKS5zZXRKc29uT2JqZWN0KHRoaXMuZ2V0RGVmYXVsdFN1cnZleUpzb24oKSk7XG4gICAgfVxuICAgIFN1cnZleS5zdXJ2ZXlMb2NhbGl6YXRpb24uY3VycmVudExvY2FsZSA9IHRoaXMuc3VydmV5VmFsdWUoKVtcImxvY2FsZVwiXTtcbiAgICB0aGlzLnN1cnZleVZhbHVlKCkuZHJhZ0Ryb3BIZWxwZXIgPSB0aGlzLmRyYWdEcm9wSGVscGVyO1xuICAgIHRoaXMuc3VydmV5VmFsdWUoKS5vblVwZGF0ZUVsZW1lbnRBbGxvd2luZ09wdGlvbnMgPSBmdW5jdGlvbihvcHRpb25zKSB7XG4gICAgICBzZWxmLm9uRWxlbWVudEFsbG93T3BlcmF0aW9ucy5maXJlKHNlbGYsIG9wdGlvbnMpO1xuICAgIH07XG4gICAgdmFyIGFmdGVyUmVuZGVyRWxlbWVudEhhbmRsZXIgPSBjcmVhdGVBZnRlclJlbmRlckhhbmRsZXIoXG4gICAgICB0aGlzLFxuICAgICAgdGhpcy5zdXJ2ZXlWYWx1ZSgpXG4gICAgKTtcbiAgICB0aGlzLnN1cnZleVZhbHVlKCkub25BZnRlclJlbmRlclF1ZXN0aW9uLmFkZCgoc2VuZGVyLCBvcHRpb25zKSA9PiB7XG4gICAgICBhZnRlclJlbmRlckVsZW1lbnRIYW5kbGVyKFxuICAgICAgICBvcHRpb25zLmh0bWxFbGVtZW50LFxuICAgICAgICBvcHRpb25zLnF1ZXN0aW9uLFxuICAgICAgICBmYWxzZSxcbiAgICAgICAgdHJ1ZVxuICAgICAgKTtcbiAgICB9KTtcbiAgICB0aGlzLnN1cnZleVZhbHVlKCkub25BZnRlclJlbmRlclBhbmVsLmFkZCgoc2VuZGVyLCBvcHRpb25zKSA9PiB7XG4gICAgICBpZiAob3B0aW9ucy5wYW5lbC5nZXRUeXBlKCkgPT09IFwiZmxvd3BhbmVsXCIpIHtcbiAgICAgICAgYWZ0ZXJSZW5kZXJFbGVtZW50SGFuZGxlcihcbiAgICAgICAgICBvcHRpb25zLmh0bWxFbGVtZW50LFxuICAgICAgICAgIG9wdGlvbnMucGFuZWwsXG4gICAgICAgICAgdHJ1ZSxcbiAgICAgICAgICBvcHRpb25zLnBhbmVsLmtvSXNEcmFnZ2luZygpXG4gICAgICAgICk7XG4gICAgICAgIHZhciBwbmxFbCA9IG9wdGlvbnMuaHRtbEVsZW1lbnQucXVlcnlTZWxlY3RvcihcImYtcGFuZWxcIik7XG4gICAgICAgIGlmICghIXBubEVsKSB7XG4gICAgICAgICAgaWYgKCEhcG5sRWwuY2xhc3NOYW1lKSB7XG4gICAgICAgICAgICBwbmxFbC5jbGFzc05hbWUgKz0gXCIgc3ZkX2Zsb3dwYW5lbFwiO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwbmxFbC5jbGFzc05hbWUgPSBcInN2ZF9mbG93cGFuZWxcIjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChvcHRpb25zLnBhbmVsLmVsZW1lbnRzLmxlbmd0aCA9PSAwKSB7XG4gICAgICAgICAgb3B0aW9ucy5wYW5lbC5lbXB0eUVsZW1lbnQgPSBhZGRFbXB0eVBhbmVsRWxlbWVudChcbiAgICAgICAgICAgIHRoaXMuc3VydmV5VmFsdWUoKSxcbiAgICAgICAgICAgIG9wdGlvbnMuaHRtbEVsZW1lbnQsXG4gICAgICAgICAgICBvcHRpb25zLnBhbmVsLmRyYWdEcm9wSGVscGVyKCksXG4gICAgICAgICAgICBvcHRpb25zLnBhbmVsXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBhZnRlclJlbmRlckVsZW1lbnRIYW5kbGVyKFxuICAgICAgICAgIG9wdGlvbnMuaHRtbEVsZW1lbnQsXG4gICAgICAgICAgb3B0aW9ucy5wYW5lbCxcbiAgICAgICAgICB0cnVlLFxuICAgICAgICAgIG9wdGlvbnMucGFuZWwua29Jc0RyYWdnaW5nKClcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLnN1cnZleVZhbHVlKCkub25EcmFnRHJvcEFsbG93LmFkZChmdW5jdGlvbihzZW5kZXIsIG9wdGlvbnMpIHtcbiAgICAgIG9wdGlvbnMuc3VydmV5ID0gc2VuZGVyO1xuICAgICAgc2VsZi5vbkRyYWdEcm9wQWxsb3cuZmlyZShzZWxmLCBvcHRpb25zKTtcbiAgICB9KTtcbiAgICB0aGlzLnN1cnZleVZhbHVlKCkub25HZXRNZW51SXRlbXMuYWRkKChzZW5kZXIsIG9wdGlvbnMpID0+IHtcbiAgICAgIGlmICh0aGlzLnJlYWRPbmx5KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgbGV0IG9wdHMgPSBvcHRpb25zLm9iai5hbGxvd2luZ09wdGlvbnM7XG4gICAgICBpZiAoIW9wdHMpIG9wdHMgPSB7fTtcblxuICAgICAgaWYgKG9wdHMuYWxsb3dFZGl0KSB7XG4gICAgICAgIG9wdGlvbnMuaXRlbXMucHVzaCh7XG4gICAgICAgICAgbmFtZTogXCJlZGl0ZWxlbWVudFwiLFxuICAgICAgICAgIHRleHQ6IHRoaXMuZ2V0TG9jU3RyaW5nKFwic3VydmV5LmVkaXRcIiksXG4gICAgICAgICAgaGFzVGl0bGU6IHRydWUsXG4gICAgICAgICAgb25DbGljazogcXVlc3Rpb24gPT4gdGhpcy5zaG93UXVlc3Rpb25FZGl0b3IocXVlc3Rpb24pXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBpZiAob3B0cy5hbGxvd0RlbGV0ZSkge1xuICAgICAgICB2YXIgZGVsZXRlTG9jYWxlTmFtZSA9IG9wdGlvbnMub2JqLmlzUGFuZWxcbiAgICAgICAgICA/IFwic3VydmV5LmRlbGV0ZVBhbmVsXCJcbiAgICAgICAgICA6IFwic3VydmV5LmRlbGV0ZVF1ZXN0aW9uXCI7XG4gICAgICAgIG9wdGlvbnMuaXRlbXMucHVzaCh7XG4gICAgICAgICAgbmFtZTogXCJkZWxldGVcIixcbiAgICAgICAgICB0ZXh0OiBzZWxmLmdldExvY1N0cmluZyhkZWxldGVMb2NhbGVOYW1lKSxcbiAgICAgICAgICBvbkNsaWNrOiBmdW5jdGlvbihzZWxPYmopIHtcbiAgICAgICAgICAgIHNlbGYuZGVsZXRlT2JqZWN0KHNlbE9iaik7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgaWYgKFxuICAgICAgICBvcHRzLmFsbG93U2hvd0hpZGVUaXRsZSAmJlxuICAgICAgICB0eXBlb2Ygb3B0aW9ucy5vYmoudGl0bGVMb2NhdGlvbiAhPT0gXCJ1bmRlZmluZWRcIlxuICAgICAgKSB7XG4gICAgICAgIHZhciBpc1Nob3dUaXRsZSA9IGtvLm9ic2VydmFibGU8Ym9vbGVhbj4oXG4gICAgICAgICAgb3B0aW9ucy5vYmoudGl0bGVMb2NhdGlvbiAhPT0gXCJoaWRkZW5cIlxuICAgICAgICApO1xuICAgICAgICBvcHRpb25zLml0ZW1zLnB1c2goe1xuICAgICAgICAgIG5hbWU6IFwic2hvd3RpdGxlXCIsXG4gICAgICAgICAgdGV4dDogdGhpcy5nZXRMb2NTdHJpbmcoXCJwZS5zaG93VGl0bGVcIiksXG4gICAgICAgICAgaWNvbjoga28uY29tcHV0ZWQoKCkgPT4ge1xuICAgICAgICAgICAgaWYgKGlzU2hvd1RpdGxlKCkpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIFwiaWNvbi1hY3Rpb25zaG93dGl0bGVcIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBcImljb24tYWN0aW9uaGlkZXRpdGxlXCI7XG4gICAgICAgICAgfSksXG4gICAgICAgICAgb25DbGljazogKHF1ZXN0aW9uOiBTdXJ2ZXkuUXVlc3Rpb24pID0+IHtcbiAgICAgICAgICAgIGlmIChxdWVzdGlvbi50aXRsZUxvY2F0aW9uICE9PSBcImhpZGRlblwiKSB7XG4gICAgICAgICAgICAgIHF1ZXN0aW9uLnRpdGxlTG9jYXRpb24gPSBcImhpZGRlblwiO1xuICAgICAgICAgICAgICBpZiAocXVlc3Rpb24uZ2V0VHlwZSgpID09PSBcImJvb2xlYW5cIikge1xuICAgICAgICAgICAgICAgIHF1ZXN0aW9uW1wic2hvd1RpdGxlXCJdID0gZmFsc2U7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHF1ZXN0aW9uLnRpdGxlTG9jYXRpb24gPSBcImRlZmF1bHRcIjtcbiAgICAgICAgICAgICAgaWYgKHF1ZXN0aW9uLmdldFR5cGUoKSA9PT0gXCJib29sZWFuXCIpIHtcbiAgICAgICAgICAgICAgICBxdWVzdGlvbltcInNob3dUaXRsZVwiXSA9IHRydWU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlzU2hvd1RpdGxlKHF1ZXN0aW9uLnRpdGxlTG9jYXRpb24gIT09IFwiaGlkZGVuXCIpO1xuICAgICAgICAgICAgdGhpcy5vblF1ZXN0aW9uRWRpdG9yQ2hhbmdlZChxdWVzdGlvbik7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgaWYgKFxuICAgICAgICBvcHRzLmFsbG93Q2hhbmdlUmVxdWlyZWQgJiZcbiAgICAgICAgdHlwZW9mIG9wdGlvbnMub2JqLmlzUmVxdWlyZWQgIT09IFwidW5kZWZpbmVkXCJcbiAgICAgICkge1xuICAgICAgICB2YXIgaXNSZXF1aXJlZCA9IGtvLmNvbXB1dGVkKCgpID0+IG9wdGlvbnMub2JqLmlzUmVxdWlyZWQpO1xuICAgICAgICBvcHRpb25zLml0ZW1zLnB1c2goe1xuICAgICAgICAgIG5hbWU6IFwiaXNyZXF1aXJlZFwiLFxuICAgICAgICAgIHRleHQ6IHRoaXMuZ2V0TG9jU3RyaW5nKFwicGUuaXNSZXF1aXJlZFwiKSxcbiAgICAgICAgICBpY29uOiBrby5jb21wdXRlZCgoKSA9PiB7XG4gICAgICAgICAgICBpZiAoaXNSZXF1aXJlZCgpKSB7XG4gICAgICAgICAgICAgIHJldHVybiBcImljb24tYWN0aW9uaXNyZXF1aXJlZFwiO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIFwiaWNvbi1hY3Rpb25ub3RyZXF1aXJlZFwiO1xuICAgICAgICAgIH0pLFxuICAgICAgICAgIG9uQ2xpY2s6IChxdWVzdGlvbjogU3VydmV5LlF1ZXN0aW9uKSA9PiB7XG4gICAgICAgICAgICBxdWVzdGlvbi5pc1JlcXVpcmVkID0gIXF1ZXN0aW9uLmlzUmVxdWlyZWQ7XG4gICAgICAgICAgICB0aGlzLm9uUXVlc3Rpb25FZGl0b3JDaGFuZ2VkKHF1ZXN0aW9uKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBpZiAob3B0aW9ucy5pdGVtcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIG9wdGlvbnMuaXRlbXMucHVzaCh7IHRlbXBsYXRlOiBcImFjdGlvbi1zZXBhcmF0b3JcIiB9KTtcbiAgICAgIH1cblxuICAgICAgaWYgKG9wdHMuYWxsb3dDb3B5KSB7XG4gICAgICAgIG9wdGlvbnMuaXRlbXMucHVzaCh7XG4gICAgICAgICAgbmFtZTogXCJjb3B5XCIsXG4gICAgICAgICAgdGV4dDogc2VsZi5nZXRMb2NTdHJpbmcoXCJzdXJ2ZXkuY29weVwiKSxcbiAgICAgICAgICBvbkNsaWNrOiBmdW5jdGlvbihzZWxPYmopIHtcbiAgICAgICAgICAgIHNlbGYuZmFzdENvcHlRdWVzdGlvbihzZWxPYmopO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChvcHRzLmFsbG93QWRkVG9Ub29sYm94KSB7XG4gICAgICAgIG9wdGlvbnMuaXRlbXMucHVzaCh7XG4gICAgICAgICAgbmFtZTogXCJhZGR0b3Rvb2xib3hcIixcbiAgICAgICAgICB0ZXh0OiBzZWxmLmdldExvY1N0cmluZyhcInN1cnZleS5hZGRUb1Rvb2xib3hcIiksXG4gICAgICAgICAgb25DbGljazogZnVuY3Rpb24oc2VsT2JqKSB7XG4gICAgICAgICAgICBzZWxmLmFkZEN1c3RvbVRvb2xib3hRdWVzdGlvbihzZWxPYmopO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChvcHRzLmFsbG93Q2hhbmdlVHlwZSkge1xuICAgICAgICBpZiAob3B0aW9ucy5pdGVtcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgb3B0aW9ucy5pdGVtcy5wdXNoKHsgdGVtcGxhdGU6IFwiYWN0aW9uLXNlcGFyYXRvclwiIH0pO1xuICAgICAgICB9XG4gICAgICAgIHZhciBjdXJyZW50VHlwZSA9IG9wdGlvbnMub2JqLmdldFR5cGUoKTtcbiAgICAgICAgdmFyIGNvbnZlcnRDbGFzc2VzID0gUXVlc3Rpb25Db252ZXJ0ZXIuZ2V0Q29udmVydFRvQ2xhc3NlcyhcbiAgICAgICAgICBjdXJyZW50VHlwZSxcbiAgICAgICAgICB0aGlzLnRvb2xib3guaXRlbU5hbWVzXG4gICAgICAgICk7XG4gICAgICAgIHZhciBhbGxvd0NoYW5nZVR5cGUgPSBjb252ZXJ0Q2xhc3Nlcy5sZW5ndGggPiAwO1xuICAgICAgICB2YXIgY3JlYXRlVHlwZUJ5Q2xhc3MgPSBjbGFzc05hbWUgPT4ge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBuYW1lOiB0aGlzLmdldExvY1N0cmluZyhcInF0LlwiICsgY2xhc3NOYW1lKSxcbiAgICAgICAgICAgIHZhbHVlOiBjbGFzc05hbWVcbiAgICAgICAgICB9O1xuICAgICAgICB9O1xuICAgICAgICB2YXIgYXZhaWxhYmxlVHlwZXMgPSBbY3JlYXRlVHlwZUJ5Q2xhc3MoY3VycmVudFR5cGUpXTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb252ZXJ0Q2xhc3Nlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIHZhciBjbGFzc05hbWUgPSBjb252ZXJ0Q2xhc3Nlc1tpXTtcbiAgICAgICAgICBhdmFpbGFibGVUeXBlcy5wdXNoKGNyZWF0ZVR5cGVCeUNsYXNzKGNsYXNzTmFtZSkpO1xuICAgICAgICB9XG4gICAgICAgIG9wdGlvbnMuaXRlbXMucHVzaCh7XG4gICAgICAgICAgdGV4dDogdGhpcy5nZXRMb2NTdHJpbmcoXCJxdC5cIiArIGN1cnJlbnRUeXBlKSxcbiAgICAgICAgICB0aXRsZTogdGhpcy5nZXRMb2NTdHJpbmcoXCJzdXJ2ZXkuY29udmVydFRvXCIpLFxuICAgICAgICAgIHR5cGU6IGN1cnJlbnRUeXBlLFxuICAgICAgICAgIGFsbG93Q2hhbmdlVHlwZTogYWxsb3dDaGFuZ2VUeXBlLFxuICAgICAgICAgIHRlbXBsYXRlOiBcImNvbnZlcnQtYWN0aW9uXCIsXG4gICAgICAgICAgYXZhaWxhYmxlVHlwZXM6IGF2YWlsYWJsZVR5cGVzLFxuICAgICAgICAgIG9uQ29udmVydFR5cGU6IChkYXRhLCBldmVudCkgPT4ge1xuICAgICAgICAgICAgdmFyIG5ld1R5cGUgPSBldmVudC50YXJnZXQudmFsdWU7XG4gICAgICAgICAgICB0aGlzLmNvbnZlcnRDdXJyZW50T2JqZWN0KG9wdGlvbnMub2JqLCBuZXdUeXBlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBpZiAob3B0cy5hbGxvd0RyYWdnaW5nKSB7XG4gICAgICAgIG9wdGlvbnMuaXRlbXMucHVzaCh7XG4gICAgICAgICAgbmFtZTogXCJkcmFnZWxlbWVudFwiLFxuICAgICAgICAgIG5lZWRGb2N1czogZmFsc2UsXG4gICAgICAgICAgdGV4dDogc2VsZi5nZXRMb2NTdHJpbmcoXCJzdXJ2ZXkuZHJhZ1wiKSxcbiAgICAgICAgICBvbkNsaWNrOiBmdW5jdGlvbihzZWxPYmopIHt9XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBzZWxmLm9uRGVmaW5lRWxlbWVudE1lbnVJdGVtcy5maXJlKHNlbGYsIG9wdGlvbnMpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5vbkRlc2lnbmVyU3VydmV5Q3JlYXRlZC5maXJlKHRoaXMsIHsgc3VydmV5OiB0aGlzLnN1cnZleVZhbHVlKCkgfSk7XG4gICAgdGhpcy5zdXJ2ZXkucmVuZGVyKHRoaXMuc3VydmV5anMpO1xuICAgIHRoaXMuc3VydmV5T2JqZWN0cy5zdXJ2ZXkgPSB0aGlzLnN1cnZleTtcbiAgICB0aGlzLnBhZ2VzKHRoaXMuc3VydmV5LnBhZ2VzKTtcbiAgICB0aGlzLnN1cnZleVZhbHVlKCkub25TZWxlY3RlZEVsZW1lbnRDaGFuZ2VkLmFkZChcbiAgICAgIChzZW5kZXI6IFN1cnZleS5TdXJ2ZXksIG9wdGlvbnMpID0+IHtcbiAgICAgICAgc2VsZi5zdXJ2ZXlPYmplY3RzLnNlbGVjdE9iamVjdChzZW5kZXJbXCJzZWxlY3RlZEVsZW1lbnRcIl0pO1xuICAgICAgfVxuICAgICk7XG4gICAgdGhpcy5zdXJ2ZXlWYWx1ZSgpLm9uRWRpdEJ1dHRvbkNsaWNrLmFkZCgoc2VuZGVyOiBTdXJ2ZXkuU3VydmV5KSA9PiB7XG4gICAgICBzZWxmLnNob3dRdWVzdGlvbkVkaXRvcihzZWxmLmtvU2VsZWN0ZWRPYmplY3QoKS52YWx1ZSk7XG4gICAgfSk7XG4gICAgdGhpcy5zdXJ2ZXlWYWx1ZSgpLm9uRWxlbWVudERvdWJsZUNsaWNrLmFkZChcbiAgICAgIChzZW5kZXI6IFN1cnZleS5TdXJ2ZXksIG9wdGlvbnMpID0+IHtcbiAgICAgICAgc2VsZi5vbkVsZW1lbnREb3VibGVDbGljay5maXJlKHNlbGYsIG9wdGlvbnMpO1xuICAgICAgfVxuICAgICk7XG4gICAgdGhpcy5zdXJ2ZXlWYWx1ZSgpLm9uUHJvY2Vzc0h0bWwuYWRkKChzZW5kZXI6IFN1cnZleS5TdXJ2ZXksIG9wdGlvbnMpID0+IHtcbiAgICAgIG9wdGlvbnMuaHRtbCA9IHNlbGYucHJvY2Vzc0h0bWwob3B0aW9ucy5odG1sKTtcbiAgICB9KTtcbiAgICB0aGlzLnN1cnZleVZhbHVlKCkub25RdWVzdGlvbkFkZGVkLmFkZCgoc2VuZGVyOiBTdXJ2ZXkuU3VydmV5LCBvcHRpb25zKSA9PiB7XG4gICAgICBzZWxmLmRvT25RdWVzdGlvbkFkZGVkKG9wdGlvbnMucXVlc3Rpb24sIG9wdGlvbnMucGFyZW50UGFuZWwpO1xuICAgIH0pO1xuICAgIHRoaXMuc3VydmV5VmFsdWUoKS5vblF1ZXN0aW9uUmVtb3ZlZC5hZGQoXG4gICAgICAoc2VuZGVyOiBTdXJ2ZXkuU3VydmV5LCBvcHRpb25zKSA9PiB7XG4gICAgICAgIHNlbGYuZG9PbkVsZW1lbnRSZW1vdmVkKG9wdGlvbnMucXVlc3Rpb24pO1xuICAgICAgfVxuICAgICk7XG4gICAgdGhpcy5zdXJ2ZXlWYWx1ZSgpLm9uUGFuZWxBZGRlZC5hZGQoKHNlbmRlcjogU3VydmV5LlN1cnZleSwgb3B0aW9ucykgPT4ge1xuICAgICAgc2VsZi5kb09uUGFuZWxBZGRlZChvcHRpb25zLnBhbmVsLCBvcHRpb25zLnBhcmVudFBhbmVsKTtcbiAgICB9KTtcbiAgICB0aGlzLnN1cnZleVZhbHVlKCkub25QYW5lbFJlbW92ZWQuYWRkKChzZW5kZXI6IFN1cnZleS5TdXJ2ZXksIG9wdGlvbnMpID0+IHtcbiAgICAgIHNlbGYuZG9PbkVsZW1lbnRSZW1vdmVkKG9wdGlvbnMucGFuZWwpO1xuICAgIH0pO1xuICAgIHZhciBwQWRkZWQgPSA8YW55PnRoaXMuc3VydmV5VmFsdWUoKVtcIm9uUGFnZUFkZGVkXCJdO1xuICAgIGlmIChwQWRkZWQgJiYgcEFkZGVkLmFkZCkge1xuICAgICAgcEFkZGVkLmFkZCgoc2VuZGVyOiBTdXJ2ZXkuU3VydmV5LCBvcHRpb25zKSA9PiB7XG4gICAgICAgIHNlbGYuZG9PblBhZ2VBZGRlZChvcHRpb25zLnBhZ2UpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG4gIHByaXZhdGUgcHJvY2Vzc0h0bWwoaHRtbDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBpZiAoIWh0bWwpIHJldHVybiBodG1sO1xuICAgIHZhciBzY3JpcHRSZWdFeCA9IC88c2NyaXB0XFxiW148XSooPzooPyE8XFwvc2NyaXB0Pik8W148XSopKjxcXC9zY3JpcHQ+L2dpO1xuICAgIHdoaWxlIChzY3JpcHRSZWdFeC50ZXN0KGh0bWwpKSB7XG4gICAgICBodG1sID0gaHRtbC5yZXBsYWNlKHNjcmlwdFJlZ0V4LCBcIlwiKTtcbiAgICB9XG4gICAgcmV0dXJuIGh0bWw7XG4gIH1cbiAgcHJpdmF0ZSBkb0RyYWdnaW5nVG9vbGJveEl0ZW0oanNvbjogYW55LCBlKSB7XG4gICAgdGhpcy5kcmFnRHJvcEhlbHBlci5zdGFydERyYWdUb29sYm94SXRlbShcbiAgICAgIGUsXG4gICAgICB0aGlzLmdldE5ld05hbWUoanNvbltcInR5cGVcIl0pLFxuICAgICAganNvblxuICAgICk7XG4gIH1cbiAgcHJpdmF0ZSBuZXdRdWVzdGlvbnM6IEFycmF5PGFueT4gPSBbXTtcbiAgcHJpdmF0ZSBuZXdQYW5lbHM6IEFycmF5PGFueT4gPSBbXTtcbiAgcHJpdmF0ZSBkb0NsaWNrVG9vbGJveEl0ZW0oanNvbjogYW55KSB7XG4gICAgaWYgKCF0aGlzLnJlYWRPbmx5KSB7XG4gICAgICB2YXIgbmV3RWxlbWVudCA9IHRoaXMuY3JlYXRlTmV3RWxlbWVudChqc29uKTtcbiAgICAgIHRoaXMuZG9DbGlja1F1ZXN0aW9uQ29yZShuZXdFbGVtZW50KTtcbiAgICB9XG4gIH1cbiAgcHVibGljIGNvcHlFbGVtZW50KGVsZW1lbnQ6IFN1cnZleS5CYXNlKTogU3VydmV5LklFbGVtZW50IHtcbiAgICB2YXIganNvbiA9IG5ldyBTdXJ2ZXkuSnNvbk9iamVjdCgpLnRvSnNvbk9iamVjdChlbGVtZW50KTtcbiAgICBqc29uLnR5cGUgPSBlbGVtZW50LmdldFR5cGUoKTtcbiAgICByZXR1cm4gdGhpcy5jcmVhdGVOZXdFbGVtZW50KGpzb24pO1xuICB9XG4gIHByaXZhdGUgZ2V0Um93cyhwbmw6IFN1cnZleS5QYW5lbE1vZGVsQmFzZSk6IEFycmF5PGFueT4ge1xuICAgIHJldHVybiAhIXBubFtcImtvUm93c1wiXSA/IHBubFtcImtvUm93c1wiXSgpIDogcG5sLnJvd3M7XG4gIH1cbiAgcHVibGljIGlzQ3VycmVudFBhZ2VFbXB0eSA9IGtvLmNvbXB1dGVkKFxuICAgICgpID0+XG4gICAgICAhIXRoaXMuc3VydmV5VmFsdWUoKSAmJlxuICAgICAgISF0aGlzLnN1cnZleVZhbHVlKCkua29DdXJyZW50UGFnZSgpICYmXG4gICAgICB0aGlzLmdldFJvd3ModGhpcy5zdXJ2ZXlWYWx1ZSgpLmtvQ3VycmVudFBhZ2UoKSkubGVuZ3RoID09PSAwXG4gICk7XG4gIHB1YmxpYyBkcmFnT3ZlclF1ZXN0aW9uc0VkaXRvcihkYXRhLCBlKSB7XG4gICAgZGF0YS5zdXJ2ZXkuZHJhZ0Ryb3BIZWxwZXIuZG9EcmFnRHJvcE92ZXIoZSwgZGF0YS5zdXJ2ZXkuY3VycmVudFBhZ2UpO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBwdWJsaWMgZHJvcE9uUXVlc3Rpb25zRWRpdG9yKGRhdGEsIGUpIHtcbiAgICBkYXRhLnN1cnZleS5kcmFnRHJvcEhlbHBlci5kb0Ryb3AoZSk7XG4gIH1cbiAgcHJpdmF0ZSBjcmVhdGVOZXdFbGVtZW50KGpzb246IGFueSk6IFN1cnZleS5JRWxlbWVudCB7XG4gICAgdmFyIG5ld0VsZW1lbnQgPSBTdXJ2ZXkuU2VyaWFsaXplci5jcmVhdGVDbGFzcyhqc29uW1widHlwZVwiXSk7XG4gICAgbmV3IFN1cnZleS5Kc29uT2JqZWN0KCkudG9PYmplY3QoanNvbiwgbmV3RWxlbWVudCk7XG4gICAgdGhpcy5zZXROZXdOYW1lcyhuZXdFbGVtZW50KTtcbiAgICByZXR1cm4gbmV3RWxlbWVudDtcbiAgfVxuICBwcml2YXRlIHNldE5ld05hbWVzKGVsZW1lbnQ6IFN1cnZleS5JRWxlbWVudCkge1xuICAgIHRoaXMubmV3UXVlc3Rpb25zID0gW107XG4gICAgdGhpcy5uZXdQYW5lbHMgPSBbXTtcbiAgICB0aGlzLnNldE5ld05hbWVzQ29yZShlbGVtZW50KTtcbiAgfVxuICBwcml2YXRlIHNldE5ld05hbWVzQ29yZShlbGVtZW50OiBTdXJ2ZXkuSUVsZW1lbnQpIHtcbiAgICB2YXIgZWxUeXBlID0gZWxlbWVudFtcImdldFR5cGVcIl0oKTtcbiAgICBlbGVtZW50Lm5hbWUgPSB0aGlzLmdldE5ld05hbWUoZWxUeXBlKTtcbiAgICBpZiAoZWxlbWVudC5pc1BhbmVsIHx8IGVsVHlwZSA9PSBcInBhZ2VcIikge1xuICAgICAgaWYgKGVsZW1lbnQuaXNQYW5lbCkge1xuICAgICAgICB0aGlzLm5ld1BhbmVscy5wdXNoKGVsZW1lbnQpO1xuICAgICAgfVxuICAgICAgdmFyIHBhbmVsID0gPFN1cnZleS5QYW5lbE1vZGVsQmFzZT4oPGFueT5lbGVtZW50KTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGFuZWwuZWxlbWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdGhpcy5zZXROZXdOYW1lc0NvcmUocGFuZWwuZWxlbWVudHNbaV0pO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm5ld1F1ZXN0aW9ucy5wdXNoKGVsZW1lbnQpO1xuICAgIH1cbiAgfVxuICBwcml2YXRlIGdlbmVyYXRlVW5pcXVlTmFtZShlbDogU3VydmV5LkJhc2UsIG5ld05hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgd2hpbGUgKCF0aGlzLmlzTmFtZVVuaXF1ZShlbCwgbmV3TmFtZSkpIHtcbiAgICAgIG5ld05hbWUgPSBTdXJ2ZXlIZWxwZXIuZ2VuZXJhdGVOZXdOYW1lKG5ld05hbWUpO1xuICAgIH1cbiAgICByZXR1cm4gbmV3TmFtZTtcbiAgfVxuICBwcml2YXRlIGlzTmFtZVVuaXF1ZShlbDogU3VydmV5LkJhc2UsIG5ld05hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGlmICghdGhpcy5pc05hbWVVbmlxdWVJbkFycmF5KHRoaXMuc3VydmV5LnBhZ2VzLCBlbCwgbmV3TmFtZSkpIHJldHVybiBmYWxzZTtcbiAgICBpZiAoIXRoaXMuaXNOYW1lVW5pcXVlSW5BcnJheSh0aGlzLnN1cnZleS5nZXRBbGxQYW5lbHMoKSwgZWwsIG5ld05hbWUpKVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiB0aGlzLmlzTmFtZVVuaXF1ZUluQXJyYXkodGhpcy5zdXJ2ZXkuZ2V0QWxsUXVlc3Rpb25zKCksIGVsLCBuZXdOYW1lKTtcbiAgfVxuICBwcml2YXRlIGlzTmFtZVVuaXF1ZUluQXJyYXkoXG4gICAgZWxlbWVudHM6IEFycmF5PGFueT4sXG4gICAgZWw6IFN1cnZleS5CYXNlLFxuICAgIG5ld05hbWU6IHN0cmluZ1xuICApOiBib29sZWFuIHtcbiAgICBuZXdOYW1lID0gbmV3TmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZWxlbWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChlbGVtZW50c1tpXSAhPSBlbCAmJiBlbGVtZW50c1tpXS5uYW1lLnRvTG93ZXJDYXNlKCkgPT0gbmV3TmFtZSlcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBwcml2YXRlIGdldE5ld05hbWUodHlwZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBpZiAodHlwZSA9PSBcInBhZ2VcIikgcmV0dXJuIFN1cnZleUhlbHBlci5nZXROZXdQYWdlTmFtZSh0aGlzLnBhZ2VzKCkpO1xuICAgIHJldHVybiB0eXBlID09IFwicGFuZWxcIiB8fCB0eXBlID09IFwiZmxvd3BhbmVsXCJcbiAgICAgID8gdGhpcy5nZXROZXdQYW5lbE5hbWUoKVxuICAgICAgOiB0aGlzLmdldE5ld1F1ZXN0aW9uTmFtZSgpO1xuICB9XG4gIHByaXZhdGUgZ2V0TmV3UXVlc3Rpb25OYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFN1cnZleUhlbHBlci5nZXROZXdRdWVzdGlvbk5hbWUodGhpcy5nZXRBbGxRdWVzdGlvbnMoKSk7XG4gIH1cbiAgcHJpdmF0ZSBnZXROZXdQYW5lbE5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gU3VydmV5SGVscGVyLmdldE5ld1BhbmVsTmFtZSh0aGlzLmdldEFsbFBhbmVscygpKTtcbiAgfVxuICBwcml2YXRlIGdldEFsbFF1ZXN0aW9ucygpOiBBcnJheTxhbnk+IHtcbiAgICB2YXIgcmVzdWx0ID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnBhZ2VzKCkubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMuYWRkRWxlbWVudHModGhpcy5wYWdlcygpW2ldLmVsZW1lbnRzLCBmYWxzZSwgcmVzdWx0KTtcbiAgICB9XG4gICAgdGhpcy5hZGRFbGVtZW50cyh0aGlzLm5ld1BhbmVscywgZmFsc2UsIHJlc3VsdCk7XG4gICAgdGhpcy5hZGRFbGVtZW50cyh0aGlzLm5ld1F1ZXN0aW9ucywgZmFsc2UsIHJlc3VsdCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuICBwcml2YXRlIGdldEFsbFBhbmVscygpOiBBcnJheTxhbnk+IHtcbiAgICB2YXIgcmVzdWx0ID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnBhZ2VzKCkubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMuYWRkRWxlbWVudHModGhpcy5wYWdlcygpW2ldLmVsZW1lbnRzLCB0cnVlLCByZXN1bHQpO1xuICAgIH1cbiAgICB0aGlzLmFkZEVsZW1lbnRzKHRoaXMubmV3UGFuZWxzLCB0cnVlLCByZXN1bHQpO1xuICAgIHRoaXMuYWRkRWxlbWVudHModGhpcy5uZXdRdWVzdGlvbnMsIHRydWUsIHJlc3VsdCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuICBwcml2YXRlIGFkZEVsZW1lbnRzKFxuICAgIGVsZW1lbnRzOiBBcnJheTxhbnk+LFxuICAgIGlzUGFuZWw6IGJvb2xlYW4sXG4gICAgcmVzdWx0OiBBcnJheTxhbnk+XG4gICkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZWxlbWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChlbGVtZW50c1tpXS5pc1BhbmVsID09PSBpc1BhbmVsKSB7XG4gICAgICAgIHJlc3VsdC5wdXNoKGVsZW1lbnRzW2ldKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuYWRkRWxlbWVudHMoU3VydmV5SGVscGVyLmdldEVsZW1lbnRzKGVsZW1lbnRzW2ldKSwgaXNQYW5lbCwgcmVzdWx0KTtcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBkb0NsaWNrUXVlc3Rpb25Db3JlKFxuICAgIGVsZW1lbnQ6IFN1cnZleS5JRWxlbWVudCxcbiAgICBtb2RpZmllZFR5cGU6IHN0cmluZyA9IFwiQURERURfRlJPTV9UT09MQk9YXCJcbiAgKSB7XG4gICAgdmFyIHBhcmVudCA9IHRoaXMuc3VydmV5LmN1cnJlbnRQYWdlO1xuICAgIHZhciBpbmRleCA9IC0xO1xuICAgIHZhciBlbEVsZW1lbnQgPSB0aGlzLnN1cnZleS5zZWxlY3RlZEVsZW1lbnQ7XG4gICAgaWYgKGVsRWxlbWVudCAmJiBlbEVsZW1lbnQucGFyZW50KSB7XG4gICAgICBwYXJlbnQgPSBlbEVsZW1lbnQucGFyZW50O1xuICAgICAgaW5kZXggPSBwYXJlbnQuZWxlbWVudHMuaW5kZXhPZih0aGlzLnN1cnZleS5zZWxlY3RlZEVsZW1lbnQpO1xuICAgICAgaWYgKGluZGV4ID4gLTEpIGluZGV4Kys7XG4gICAgfVxuICAgIHBhcmVudC5hZGRFbGVtZW50KGVsZW1lbnQsIGluZGV4KTtcbiAgICBpZiAodGhpcy5yZW5kZXJlZEVsZW1lbnQgJiYgdGhpcy5zY3JvbGxUb05ld0VsZW1lbnQpIHtcbiAgICAgIFN1cnZleUhlbHBlci5zY3JvbGxJbnRvVmlld0lmTmVlZGVkKFxuICAgICAgICB0aGlzLnJlbmRlcmVkRWxlbWVudC5xdWVyeVNlbGVjdG9yKFwiI1wiICsgZWxlbWVudFtcImlkXCJdKVxuICAgICAgKTtcbiAgICB9XG4gICAgdGhpcy5zZXRNb2RpZmllZCh7IHR5cGU6IG1vZGlmaWVkVHlwZSwgcXVlc3Rpb246IGVsZW1lbnQgfSk7XG4gIH1cbiAgcHJpdmF0ZSBkZWxldGVRdWVzdGlvbigpIHtcbiAgICB2YXIgcXVlc3Rpb24gPSB0aGlzLmdldFNlbGVjdGVkT2JqQXNRdWVzdGlvbigpO1xuICAgIGlmIChxdWVzdGlvbikge1xuICAgICAgdGhpcy5kZWxldGVDdXJyZW50T2JqZWN0KCk7XG4gICAgfVxuICB9XG4gIHByaXZhdGUgc2VsZWN0UXVlc3Rpb24oaXNVcDogYm9vbGVhbikge1xuICAgIHZhciBxdWVzdGlvbiA9IHRoaXMuZ2V0U2VsZWN0ZWRPYmpBc1F1ZXN0aW9uKCk7XG4gICAgaWYgKHF1ZXN0aW9uKSB7XG4gICAgICB0aGlzLnN1cnZleU9iamVjdHMuc2VsZWN0TmV4dFF1ZXN0aW9uKGlzVXApO1xuICAgIH1cbiAgfVxuICBwcml2YXRlIGdldFNlbGVjdGVkT2JqQXNRdWVzdGlvbigpOiBTdXJ2ZXkuUXVlc3Rpb24ge1xuICAgIHZhciBvYmogPSB0aGlzLmtvU2VsZWN0ZWRPYmplY3QoKS52YWx1ZTtcbiAgICBpZiAoIW9iaikgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIFN1cnZleUhlbHBlci5nZXRPYmplY3RUeXBlKG9iaikgPT0gT2JqVHlwZS5RdWVzdGlvblxuICAgICAgPyA8U3VydmV5LlF1ZXN0aW9uPm9ialxuICAgICAgOiBudWxsO1xuICB9XG4gIHB1YmxpYyBkZWxldGVDdXJyZW50T2JqZWN0KCkge1xuICAgIHRoaXMuZGVsZXRlT2JqZWN0KHRoaXMua29TZWxlY3RlZE9iamVjdCgpLnZhbHVlKTtcbiAgfVxuICBwcml2YXRlIGVkaXRDdXJyZW50T2JqZWN0KCkge1xuICAgIHRoaXMuc2hvd1F1ZXN0aW9uRWRpdG9yKHRoaXMua29TZWxlY3RlZE9iamVjdCgpLnZhbHVlKTtcbiAgfVxuICBwcml2YXRlIGNvbnZlcnRDdXJyZW50T2JqZWN0KG9iajogU3VydmV5LlF1ZXN0aW9uLCBjbGFzc05hbWU6IHN0cmluZykge1xuICAgIHZhciBuZXdRdWVzdGlvbiA9IFF1ZXN0aW9uQ29udmVydGVyLmNvbnZlcnRPYmplY3Qob2JqLCBjbGFzc05hbWUpO1xuICAgIHRoaXMuc2V0TW9kaWZpZWQoe1xuICAgICAgdHlwZTogXCJRVUVTVElPTl9DT05WRVJURURcIixcbiAgICAgIGNsYXNzTmFtZTogY2xhc3NOYW1lLFxuICAgICAgb2xkVmFsdWU6IG9iaixcbiAgICAgIG5ld1ZhbHVlOiBuZXdRdWVzdGlvblxuICAgIH0pO1xuICB9XG4gIC8qKlxuICAgKiBTaG93IHRoZSBjcmVhdG9yIGRpYWxvZy4gVGhlIGVsZW1lbnQgY2FuIGJlIGEgcXVlc3Rpb24sIHBhbmVsLCBwYWdlIG9yIHN1cnZleVxuICAgKiBAcGFyYW0gZWxlbWVudCBUaGUgc3VydmV5IGVsZW1lbnRcbiAgICovXG4gIHB1YmxpYyBzaG93RWxlbWVudEVkaXRvcihcbiAgICBlbGVtZW50OiBTdXJ2ZXkuQmFzZSxcbiAgICBvbkNsb3NlOiAoaXNDYW5jZWxlZDogYm9vbGVhbikgPT4gYW55XG4gICkge1xuICAgIHRoaXMuc2hvd1F1ZXN0aW9uRWRpdG9yKGVsZW1lbnQsIG9uQ2xvc2UpO1xuICB9XG4gIHByaXZhdGUgc2hvd0VkaXRvck9sZE5hbWU6IHN0cmluZztcbiAgcHJpdmF0ZSB1cGRhdGVDb25kaXRpb25zKG9sZE5hbWU6IHN0cmluZywgbmV3TmFtZTogc3RyaW5nKSB7XG4gICAgbmV3IFN1cnZleUxvZ2ljKHRoaXMuc3VydmV5KS5yZW5hbWVRdWVzdGlvbihvbGROYW1lLCBuZXdOYW1lKTtcbiAgfVxuICBwdWJsaWMgc2hvd1F1ZXN0aW9uRWRpdG9yID0gKFxuICAgIGVsZW1lbnQ6IFN1cnZleS5CYXNlLFxuICAgIG9uQ2xvc2U6IChpc0NhbmNlbGVkOiBib29sZWFuKSA9PiBhbnkgPSBudWxsXG4gICkgPT4ge1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICB2YXIgZWxXaW5kb3cgPSB0aGlzLnJlbmRlcmVkRWxlbWVudFxuICAgICAgPyA8SFRNTEVsZW1lbnQ+KFxuICAgICAgICAgIHRoaXMucmVuZGVyZWRFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXCIjc3VydmV5cXVlc3Rpb25lZGl0b3J3aW5kb3dcIilcbiAgICAgICAgKVxuICAgICAgOiBudWxsO1xuICAgIHZhciBpc0NhbmNlbGVkID0gdHJ1ZTtcbiAgICB0aGlzLnNob3dFZGl0b3JPbGROYW1lID0gZWxlbWVudFtcIm5hbWVcIl07XG4gICAgdGhpcy5xdWVzdGlvbkVkaXRvcldpbmRvdy5zaG93KFxuICAgICAgZWxlbWVudCxcbiAgICAgIGVsV2luZG93LFxuICAgICAgZnVuY3Rpb24ocXVlc3Rpb24pIHtcbiAgICAgICAgc2VsZi5vblF1ZXN0aW9uRWRpdG9yQ2hhbmdlZChxdWVzdGlvbik7XG4gICAgICAgIGlzQ2FuY2VsZWQgPSBmYWxzZTtcbiAgICAgIH0sXG4gICAgICB0aGlzLFxuICAgICAgZnVuY3Rpb24oKSB7XG4gICAgICAgIGlmIChvbkNsb3NlKSBvbkNsb3NlKGlzQ2FuY2VsZWQpO1xuICAgICAgICBzZWxmLm9uRWxlbWVudEVkaXRvckNsb3NlZC5maXJlKHNlbGYsIHtcbiAgICAgICAgICBpc0NhbmNlbGVkOiBpc0NhbmNlbGVkLFxuICAgICAgICAgIGVsZW1lbnQ6IGVsZW1lbnRcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgKTtcbiAgfTtcbiAgcHVibGljIG9uUXVlc3Rpb25FZGl0b3JDaGFuZ2VkKHF1ZXN0aW9uOiBTdXJ2ZXkuUXVlc3Rpb24pIHtcbiAgICBpZiAoISFxdWVzdGlvbi5uYW1lICYmICF0aGlzLmlzTmFtZVVuaXF1ZShxdWVzdGlvbiwgcXVlc3Rpb24ubmFtZSkpIHtcbiAgICAgIHF1ZXN0aW9uLm5hbWUgPSB0aGlzLmdlbmVyYXRlVW5pcXVlTmFtZShxdWVzdGlvbiwgcXVlc3Rpb24ubmFtZSk7XG4gICAgfVxuICAgIGlmIChcbiAgICAgICEhdGhpcy5zaG93RWRpdG9yT2xkTmFtZSAmJlxuICAgICAgISFxdWVzdGlvbi5uYW1lICYmXG4gICAgICB0aGlzLnNob3dFZGl0b3JPbGROYW1lICE9IHF1ZXN0aW9uLm5hbWVcbiAgICApIHtcbiAgICAgIHRoaXMudXBkYXRlQ29uZGl0aW9ucyh0aGlzLnNob3dFZGl0b3JPbGROYW1lLCBxdWVzdGlvbi5uYW1lKTtcbiAgICAgIHRoaXMuc2hvd0VkaXRvck9sZE5hbWUgPSBcIlwiO1xuICAgIH1cbiAgICB0aGlzLnN1cnZleU9iamVjdHMubmFtZUNoYW5nZWQocXVlc3Rpb24pO1xuICAgIHRoaXMuc2VsZWN0ZWRPYmplY3RFZGl0b3JWYWx1ZS5vYmplY3RDaGFuZ2VkKCk7XG4gICAgdGhpcy5kaXJ0eVBhZ2VVcGRhdGUoKTsgLy9UT0RPIHdoeSB0aGlzIGlzIG5lZWQgPyAoa28gcHJvYmxlbSlcbiAgICB0aGlzLnNldE1vZGlmaWVkKHtcbiAgICAgIHR5cGU6IFwiUVVFU1RJT05fQ0hBTkdFRF9CWV9FRElUT1JcIixcbiAgICAgIHF1ZXN0aW9uOiBxdWVzdGlvblxuICAgIH0pO1xuICB9XG5cbiAgLy9UT0RPIHdoeSB0aGlzIGlzIG5lZWQgPyAoa28gcHJvYmxlbSlcbiAgcHJpdmF0ZSBkaXJ0eVBhZ2VVcGRhdGUgPSAoKSA9PiB7XG4gICAgdmFyIHNlbGVjdGVkT2JqZWN0ID0gdGhpcy5rb1NlbGVjdGVkT2JqZWN0KCkudmFsdWU7XG4gICAgaWYgKFN1cnZleUhlbHBlci5nZXRPYmplY3RUeXBlKHNlbGVjdGVkT2JqZWN0KSAhPT0gT2JqVHlwZS5QYWdlKSB7XG4gICAgICBpZiAoXG4gICAgICAgIFN1cnZleUhlbHBlci5nZXRPYmplY3RUeXBlKHNlbGVjdGVkT2JqZWN0KSA9PT0gT2JqVHlwZS5RdWVzdGlvbiAmJlxuICAgICAgICAhIXNlbGVjdGVkT2JqZWN0W1wia29FbGVtZW50VHlwZVwiXVxuICAgICAgKSB7XG4gICAgICAgIHNlbGVjdGVkT2JqZWN0W1wia29FbGVtZW50VHlwZVwiXS5ub3RpZnlTdWJzY3JpYmVycygpO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnBhZ2VzLm5vdGlmeVN1YnNjcmliZXJzKCk7XG4gICAgdGhpcy5zdXJ2ZXlPYmplY3RzLnNlbGVjdE9iamVjdChzZWxlY3RlZE9iamVjdCk7XG4gIH07XG5cbiAgLyoqXG4gICAqIEFkZCBhIHF1ZXN0aW9uIGludG8gVG9vbGJveCBvYmplY3RcbiAgICogQHBhcmFtIHF1ZXN0aW9uIGFuIGFkZGVkIFN1cnZleS5RdWVzdGlvblxuICAgKiBAc2VlIHRvb2xib3hcbiAgICovXG4gIHB1YmxpYyBhZGRDdXN0b21Ub29sYm94UXVlc3Rpb24ocXVlc3Rpb246IFN1cnZleS5RdWVzdGlvbikge1xuICAgIHZhciBvcHRpb25zID0ge307XG4gICAgdGhpcy5vbkN1c3RvbUVsZW1lbnRBZGRpbmdJbnRvVG9vbGJveC5maXJlKHRoaXMsIHtcbiAgICAgIGVsZW1lbnQ6IHF1ZXN0aW9uLFxuICAgICAgaXRlbU9wdGlvbnM6IG9wdGlvbnNcbiAgICB9KTtcbiAgICB0aGlzLnRvb2xib3guYWRkQ29waWVkSXRlbShxdWVzdGlvbiwgb3B0aW9ucyk7XG4gICAgdGhpcy5vbkN1c3RvbUVsZW1lbnRBZGRlZEludG9Ub29sYm94LmZpcmUodGhpcywgeyBlbGVtZW50OiBxdWVzdGlvbiB9KTtcbiAgfVxuICAvKipcbiAgICogQ29weSBhIHF1ZXN0aW9uIHRvIHRoZSBhY3RpdmUgcGFnZVxuICAgKiBAcGFyYW0gcXVlc3Rpb24gQSBjb3BpZWQgU3VydmV5LlF1ZXN0aW9uXG4gICAqL1xuICBwdWJsaWMgZmFzdENvcHlRdWVzdGlvbihxdWVzdGlvbjogU3VydmV5LkJhc2UpIHtcbiAgICB2YXIgbmV3RWxlbWVudCA9IHRoaXMuY29weUVsZW1lbnQocXVlc3Rpb24pO1xuICAgIHRoaXMuZG9DbGlja1F1ZXN0aW9uQ29yZShuZXdFbGVtZW50LCBcIkVMRU1FTlRfQ09QSUVEXCIpO1xuICB9XG4gIC8qKlxuICAgKiBDcmVhdGUgYSBuZXcgcGFnZSB3aXRoIHRoZSBzYW1lIGVsZW1lbnRzIGFuZCBwbGFjZSBpdCBuZXh0IHRvIHRoZSBjdXJyZW50IG9uZS4gSXQgcmV0dXJucyB0aGUgbmV3IGNyZWF0ZWQgU3VydmV5LlBhZ2VcbiAgICogQHBhcmFtIHBhZ2UgQSBjb3BpZWQgU3VydmV5LlBhZ2VcbiAgICovXG4gIHB1YmxpYyBjb3B5UGFnZSA9IChwYWdlOiBTdXJ2ZXkuUGFnZU1vZGVsKTogU3VydmV5LlBhZ2VNb2RlbCA9PiB7XG4gICAgdmFyIG5ld1BhZ2UgPSA8U3VydmV5LlBhZ2U+KDxhbnk+dGhpcy5jb3B5RWxlbWVudChwYWdlKSk7XG4gICAgdmFyIGluZGV4ID0gdGhpcy5wYWdlcy5pbmRleE9mKHBhZ2UpO1xuICAgIGlmIChpbmRleCA+IC0xKSB7XG4gICAgICB0aGlzLnBhZ2VzLnNwbGljZShpbmRleCArIDEsIDAsIG5ld1BhZ2UpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnBhZ2VzLnB1c2gobmV3UGFnZSk7XG4gICAgfVxuICAgIHRoaXMuYWRkUGFnZVRvVUkobmV3UGFnZSk7XG4gICAgdGhpcy5zZXRNb2RpZmllZCh7IHR5cGU6IFwiUEFHRV9BRERFRFwiLCBuZXdWYWx1ZTogbmV3UGFnZSB9KTtcbiAgICByZXR1cm4gbmV3UGFnZTtcbiAgfTtcbiAgLyoqXG4gICAqIERlbGV0ZSBhbiBlbGVtZW50IGluIHRoZSBzdXJ2ZXkuIEl0IGNhbiBiZSBhIHF1ZXN0aW9uLCBhIHBhbmVsIG9yIGEgcGFnZS5cbiAgICogQHBhcmFtIGVsZW1lbnQgYSBzdXJ2ZXkgZWxlbWVudC5cbiAgICovXG4gIHB1YmxpYyBkZWxldGVFbGVtZW50KGVsZW1lbnQ6IFN1cnZleS5CYXNlKSB7XG4gICAgdGhpcy5kZWxldGVPYmplY3QoZWxlbWVudCk7XG4gIH1cbiAgcHJpdmF0ZSBkZWxldGVPYmplY3Qob2JqOiBhbnkpIHtcbiAgICB2YXIgb3B0aW9ucyA9IHtcbiAgICAgIGVsZW1lbnQ6IG9iaixcbiAgICAgIGVsZW1lbnRUeXBlOiBTdXJ2ZXlIZWxwZXIuZ2V0T2JqZWN0VHlwZShvYmopLFxuICAgICAgYWxsb3dpbmc6IHRydWVcbiAgICB9O1xuICAgIHRoaXMub25FbGVtZW50RGVsZXRpbmcuZmlyZSh0aGlzLCBvcHRpb25zKTtcbiAgICBpZiAoIW9wdGlvbnMuYWxsb3dpbmcpIHJldHVybjtcbiAgICB0aGlzLnN1cnZleU9iamVjdHMucmVtb3ZlT2JqZWN0KG9iaik7XG4gICAgdmFyIG9ialR5cGUgPSBTdXJ2ZXlIZWxwZXIuZ2V0T2JqZWN0VHlwZShvYmopO1xuICAgIGlmIChvYmpUeXBlID09IE9ialR5cGUuUGFnZSkge1xuICAgICAgdGhpcy5zdXJ2ZXkucmVtb3ZlUGFnZShvYmopO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnN1cnZleS5jdXJyZW50UGFnZS5yZW1vdmVFbGVtZW50KG9iaik7XG4gICAgICB0aGlzLnN1cnZleS5zZWxlY3RlZEVsZW1lbnQgPSBudWxsO1xuICAgICAgdGhpcy5zdXJ2ZXlPYmplY3RzLnNlbGVjdE9iamVjdCh0aGlzLnN1cnZleS5jdXJyZW50UGFnZSk7XG4gICAgfVxuICAgIHRoaXMuc2V0TW9kaWZpZWQoe1xuICAgICAgdHlwZTogXCJPQkpFQ1RfREVMRVRFRFwiLFxuICAgICAgdGFyZ2V0OiBvYmpcbiAgICB9KTtcbiAgfVxuICBwdWJsaWMgZ2V0IHN1cnZleUxpdmVUZXN0ZXIoKTogU3VydmV5TGl2ZVRlc3RlciB7XG4gICAgcmV0dXJuIHRoaXMuc3VydmV5TGl2ZTtcbiAgfVxuICBwcml2YXRlIHNob3dMaXZlU3VydmV5KCkge1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICB0aGlzLnN1cnZleUxpdmUub25TdXJ2ZXlDcmVhdGVkQ2FsbGJhY2sgPSBmdW5jdGlvbihzdXJ2ZXk6IFN1cnZleS5TdXJ2ZXkpIHtcbiAgICAgIHNlbGYub25UZXN0U3VydmV5Q3JlYXRlZC5maXJlKHNlbGYsIHsgc3VydmV5OiBzdXJ2ZXkgfSk7XG4gICAgfTtcbiAgICB0aGlzLnN1cnZleUxpdmUuc2V0SlNPTih0aGlzLmdldFN1cnZleUpTT04oKSk7XG4gICAgdmFyIG9wdGlvbnMgPSB7XG4gICAgICBzaG93UGFnZXNJblRlc3RTdXJ2ZXlUYWI6IHRoaXMuc2hvd1BhZ2VzSW5UZXN0U3VydmV5VGFiLFxuICAgICAgc2hvd0RlZmF1bHRMYW5ndWFnZUluVGVzdFN1cnZleVRhYjogdGhpc1xuICAgICAgICAuc2hvd0RlZmF1bHRMYW5ndWFnZUluVGVzdFN1cnZleVRhYixcbiAgICAgIHNob3dJbnZpc2libGVFbGVtZW50c0luVGVzdFN1cnZleVRhYjogdGhpc1xuICAgICAgICAuc2hvd0ludmlzaWJsZUVsZW1lbnRzSW5UZXN0U3VydmV5VGFiXG4gICAgfTtcbiAgICB0aGlzLnN1cnZleUxpdmUub25HZXRPYmplY3REaXNwbGF5TmFtZSA9IGZ1bmN0aW9uKG9iaik6IHN0cmluZyB7XG4gICAgICByZXR1cm4gc2VsZi5nZXRPYmplY3REaXNwbGF5TmFtZShvYmopO1xuICAgIH07XG4gICAgdGhpcy5zdXJ2ZXlMaXZlLnNob3cob3B0aW9ucyk7XG4gIH1cbiAgcHJpdmF0ZSBzaG93U3VydmV5RW1iZWRpbmcoKSB7XG4gICAgdmFyIGpzb24gPSB0aGlzLmdldFN1cnZleUpTT04oKTtcbiAgICB0aGlzLnN1cnZleUVtYmVkaW5nLmpzb24gPSBqc29uO1xuICAgIHRoaXMuc3VydmV5RW1iZWRpbmcuc3VydmV5SWQgPSB0aGlzLnN1cnZleUlkO1xuICAgIHRoaXMuc3VydmV5RW1iZWRpbmcuc3VydmV5UG9zdElkID0gdGhpcy5zdXJ2ZXlQb3N0SWQ7XG4gICAgdGhpcy5zdXJ2ZXlFbWJlZGluZy5nZW5lcmF0ZVZhbGlkSlNPTiA9XG4gICAgICB0aGlzLm9wdGlvbnMgJiYgdGhpcy5vcHRpb25zLmdlbmVyYXRlVmFsaWRKU09OO1xuICAgIHRoaXMuc3VydmV5RW1iZWRpbmcuc2hvdygpO1xuICB9XG4gIHByaXZhdGUgc2hvd1N1cnZleVRyYW5zbGF0aW9uKCkge1xuICAgIHRoaXMudHJhbnNsYXRpb24uc3VydmV5ID0gdGhpcy5zdXJ2ZXk7XG4gIH1cbiAgcHJpdmF0ZSBzaG93U3VydmV5TG9naWMoKSB7XG4gICAgdGhpcy5sb2dpYy51cGRhdGUodGhpcy5zdXJ2ZXksIHRoaXMpO1xuICB9XG4gIHByaXZhdGUgZ2V0U3VydmV5SlNPTigpOiBhbnkge1xuICAgIGlmIChcbiAgICAgIHRoaXMua29Jc1Nob3dEZXNpZ25lcigpIHx8XG4gICAgICB0aGlzLmtvVmlld1R5cGUoKSA9PSBcInRyYW5zbGF0aW9uXCIgfHxcbiAgICAgIHRoaXMua29WaWV3VHlwZSgpID09IFwibG9naWNcIlxuICAgIClcbiAgICAgIHJldHVybiBuZXcgU3VydmV5Lkpzb25PYmplY3QoKS50b0pzb25PYmplY3QodGhpcy5zdXJ2ZXkpO1xuICAgIGlmICh0aGlzLmpzb25FZGl0b3IuaXNKc29uQ29ycmVjdClcbiAgICAgIHJldHVybiBuZXcgU3VydmV5Lkpzb25PYmplY3QoKS50b0pzb25PYmplY3QodGhpcy5qc29uRWRpdG9yLnN1cnZleSk7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgcHJpdmF0ZSBjcmVhdGVBbm5vdGF0aW9ucyh0ZXh0OiBzdHJpbmcsIGVycm9yczogYW55W10pOiBBY2VBamF4LkFubm90YXRpb25bXSB7XG4gICAgdmFyIGFubm90YXRpb25zID0gbmV3IEFycmF5PEFjZUFqYXguQW5ub3RhdGlvbj4oKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVycm9ycy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGVycm9yID0gZXJyb3JzW2ldO1xuICAgICAgdmFyIGFubm90YXRpb246IEFjZUFqYXguQW5ub3RhdGlvbiA9IHtcbiAgICAgICAgcm93OiBlcnJvci5wb3NpdGlvbi5zdGFydC5yb3csXG4gICAgICAgIGNvbHVtbjogZXJyb3IucG9zaXRpb24uc3RhcnQuY29sdW1uLFxuICAgICAgICB0ZXh0OiBlcnJvci50ZXh0LFxuICAgICAgICB0eXBlOiBcImVycm9yXCJcbiAgICAgIH07XG4gICAgICBhbm5vdGF0aW9ucy5wdXNoKGFubm90YXRpb24pO1xuICAgIH1cbiAgICByZXR1cm4gYW5ub3RhdGlvbnM7XG4gIH1cbiAgcHVibGljIGdldE9iamVjdERpc3BsYXlOYW1lKG9iajogU3VydmV5LkJhc2UpOiBzdHJpbmcge1xuICAgIHZhciBkaXNwbGF5TmFtZSA9IFN1cnZleUhlbHBlci5nZXRPYmplY3ROYW1lKG9iaiwgdGhpcy5zaG93T2JqZWN0VGl0bGVzKTtcbiAgICB2YXIgb3B0aW9ucyA9IHsgb2JqOiBvYmosIGRpc3BsYXlOYW1lOiBkaXNwbGF5TmFtZSB9O1xuICAgIHRoaXMub25HZXRPYmplY3REaXNwbGF5TmFtZS5maXJlKHRoaXMsIG9wdGlvbnMpO1xuICAgIHJldHVybiBvcHRpb25zLmRpc3BsYXlOYW1lO1xuICB9XG4gIC8vaW1wbGVtZW50cyBJU3VydmV5T2JqZWN0RWRpdG9yT3B0aW9uc1xuICBnZXQgYWx3YXlTYXZlVGV4dEluUHJvcGVydHlFZGl0b3JzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmFsd2F5U2F2ZVRleHRJblByb3BlcnR5RWRpdG9yc1ZhbHVlO1xuICB9XG4gIHNldCBhbHdheVNhdmVUZXh0SW5Qcm9wZXJ0eUVkaXRvcnModmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLmFsd2F5U2F2ZVRleHRJblByb3BlcnR5RWRpdG9yc1ZhbHVlID0gdmFsdWU7XG4gIH1cbiAgZ2V0IHNob3dBcHBseUJ1dHRvbkluRWRpdG9ycygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5zaG93QXBwbHlCdXR0b25WYWx1ZTtcbiAgfVxuICBzZXQgc2hvd0FwcGx5QnV0dG9uSW5FZGl0b3JzKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5zaG93QXBwbHlCdXR0b25WYWx1ZSA9IHZhbHVlO1xuICB9XG4gIG9uRWRpdG9yVGFiUmVuZGVyZWRDYWxsYmFjayA9IChcbiAgICB0YWJOYW1lOiBzdHJpbmcsXG4gICAgZWxlbWVudHM6IEhUTUxEaXZFbGVtZW50W10sXG4gICAgbW9kZWw6IGFueSxcbiAgICB0YWJEYXRhOiBhbnlcbiAgKSA9PiB7XG4gICAgdGhpcy5vbkVkaXRvclRhYlJlbmRlcmVkLmZpcmUodGhpcywge1xuICAgICAgdGFiTmFtZSxcbiAgICAgIGVsZW1lbnRzLFxuICAgICAgbW9kZWwsXG4gICAgICB0YWJEYXRhXG4gICAgfSk7XG4gIH07XG4gIG9uQ2FuU2hvd1Byb3BlcnR5Q2FsbGJhY2soXG4gICAgb2JqZWN0OiBhbnksXG4gICAgcHJvcGVydHk6IFN1cnZleS5Kc29uT2JqZWN0UHJvcGVydHlcbiAgKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMub25DYW5TaG93T2JqZWN0UHJvcGVydHkob2JqZWN0LCBwcm9wZXJ0eSk7XG4gIH1cbiAgb25Jc0VkaXRvclJlYWRPbmx5Q2FsbGJhY2soXG4gICAgb2JqOiBTdXJ2ZXkuQmFzZSxcbiAgICBlZGl0b3I6IFN1cnZleVByb3BlcnR5RWRpdG9yQmFzZSxcbiAgICByZWFkT25seTogYm9vbGVhblxuICApOiBib29sZWFuIHtcbiAgICB2YXIgcHJvcG9zZWRWYWx1ZSA9IHRoaXMucmVhZE9ubHkgfHwgcmVhZE9ubHk7XG4gICAgaWYgKHRoaXMub25HZXRQcm9wZXJ0eVJlYWRPbmx5LmlzRW1wdHkpIHJldHVybiBwcm9wb3NlZFZhbHVlO1xuICAgIHZhciBvcHRpb25zID0ge1xuICAgICAgb2JqOiBvYmosXG4gICAgICBwcm9wZXJ0eTogZWRpdG9yLnByb3BlcnR5LFxuICAgICAgcmVhZE9ubHk6IHByb3Bvc2VkVmFsdWUsXG4gICAgICBwcm9wZXJ0eU5hbWU6IGVkaXRvci5wcm9wZXJ0eS5uYW1lXG4gICAgfTtcbiAgICB0aGlzLm9uR2V0UHJvcGVydHlSZWFkT25seS5maXJlKHRoaXMsIG9wdGlvbnMpO1xuICAgIHJldHVybiBvcHRpb25zLnJlYWRPbmx5O1xuICB9XG4gIG9uSXRlbVZhbHVlQWRkZWRDYWxsYmFjayhcbiAgICBvYmo6IFN1cnZleS5CYXNlLFxuICAgIHByb3BlcnR5TmFtZTogc3RyaW5nLFxuICAgIGl0ZW1WYWx1ZTogU3VydmV5Lkl0ZW1WYWx1ZSxcbiAgICBpdGVtVmFsdWVzOiBBcnJheTxTdXJ2ZXkuSXRlbVZhbHVlPlxuICApIHtcbiAgICB2YXIgb3B0aW9ucyA9IHtcbiAgICAgIG9iajogb2JqLFxuICAgICAgcHJvcGVydHlOYW1lOiBwcm9wZXJ0eU5hbWUsXG4gICAgICBuZXdJdGVtOiBpdGVtVmFsdWUsXG4gICAgICBpdGVtVmFsdWVzOiBpdGVtVmFsdWVzXG4gICAgfTtcbiAgICB0aGlzLm9uSXRlbVZhbHVlQWRkZWQuZmlyZSh0aGlzLCBvcHRpb25zKTtcbiAgfVxuICBvbk1hdHJpeERyb3Bkb3duQ29sdW1uQWRkZWRDYWxsYmFjayhcbiAgICBtYXRyaXg6IFN1cnZleS5RdWVzdGlvbixcbiAgICBjb2x1bW46IFN1cnZleS5NYXRyaXhEcm9wZG93bkNvbHVtbixcbiAgICBjb2x1bW5zOiBBcnJheTxTdXJ2ZXkuTWF0cml4RHJvcGRvd25Db2x1bW4+XG4gICkge1xuICAgIHZhciBvcHRpb25zID0geyBuZXdDb2x1bW46IGNvbHVtbiwgbWF0cml4OiBtYXRyaXgsIGNvbHVtbnM6IGNvbHVtbnMgfTtcbiAgICB0aGlzLm9uTWF0cml4Q29sdW1uQWRkZWQuZmlyZSh0aGlzLCBvcHRpb25zKTtcbiAgfVxuICBvblNldFByb3BlcnR5RWRpdG9yT3B0aW9uc0NhbGxiYWNrKFxuICAgIHByb3BlcnR5TmFtZTogc3RyaW5nLFxuICAgIG9iajogU3VydmV5LkJhc2UsXG4gICAgZWRpdG9yT3B0aW9uczogYW55XG4gICkge1xuICAgIHZhciBvcHRpb25zID0ge1xuICAgICAgcHJvcGVydHlOYW1lOiBwcm9wZXJ0eU5hbWUsXG4gICAgICBvYmo6IG9iaixcbiAgICAgIGVkaXRvck9wdGlvbnM6IGVkaXRvck9wdGlvbnNcbiAgICB9O1xuICAgIHRoaXMub25TZXRQcm9wZXJ0eUVkaXRvck9wdGlvbnMuZmlyZSh0aGlzLCBvcHRpb25zKTtcbiAgfVxuICBvbkdldEVycm9yVGV4dE9uVmFsaWRhdGlvbkNhbGxiYWNrKFxuICAgIHByb3BlcnR5TmFtZTogc3RyaW5nLFxuICAgIG9iajogU3VydmV5LkJhc2UsXG4gICAgdmFsdWU6IGFueVxuICApOiBzdHJpbmcge1xuICAgIHZhciBvcHRpb25zID0ge1xuICAgICAgcHJvcGVydHlOYW1lOiBwcm9wZXJ0eU5hbWUsXG4gICAgICBvYmo6IG9iaixcbiAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgIGVycm9yOiBcIlwiXG4gICAgfTtcbiAgICB0aGlzLm9uUHJvcGVydHlWYWxpZGF0aW9uQ3VzdG9tRXJyb3IuZmlyZSh0aGlzLCBvcHRpb25zKTtcbiAgICByZXR1cm4gb3B0aW9ucy5lcnJvcjtcbiAgfVxuICBvblZhbHVlQ2hhbmdpbmdDYWxsYmFjayhvcHRpb25zOiBhbnkpIHtcbiAgICB0aGlzLm9uUHJvcGVydHlWYWx1ZUNoYW5naW5nLmZpcmUodGhpcywgb3B0aW9ucyk7XG4gIH1cbiAgb25Qcm9wZXJ0eUVkaXRvcktleURvd25DYWxsYmFjayhcbiAgICBwcm9wZXJ0eU5hbWU6IHN0cmluZyxcbiAgICBvYmo6IFN1cnZleS5CYXNlLFxuICAgIGVkaXRvcjogU3VydmV5UHJvcGVydHlFZGl0b3JCYXNlLFxuICAgIGV2ZW50OiBLZXlib2FyZEV2ZW50XG4gICkge1xuICAgIHZhciBvcHRpb25zID0ge1xuICAgICAgcHJvcGVydHlOYW1lOiBwcm9wZXJ0eU5hbWUsXG4gICAgICBvYmo6IG9iaixcbiAgICAgIGVkaXRvcjogZWRpdG9yLFxuICAgICAgZXZlbnQ6IGV2ZW50XG4gICAgfTtcbiAgICB0aGlzLm9uUHJvcGVydHlFZGl0b3JLZXlEb3duLmZpcmUodGhpcywgb3B0aW9ucyk7XG4gIH1cbiAgb25Qcm9wZXJ0eUVkaXRvck9iamVjdFNldENhbGxiYWNrKFxuICAgIHByb3BlcnR5TmFtZTogc3RyaW5nLFxuICAgIG9iajogU3VydmV5LkJhc2UsXG4gICAgZWRpdG9yOiBTdXJ2ZXlQcm9wZXJ0eUVkaXRvckJhc2VcbiAgKSB7XG4gICAgdmFyIG9wdGlvbnMgPSB7IHByb3BlcnR5TmFtZTogcHJvcGVydHlOYW1lLCBvYmo6IG9iaiwgZWRpdG9yOiBlZGl0b3IgfTtcbiAgICB0aGlzLm9uUHJvcGVydHlFZGl0b3JPYmplY3RBc3NpZ24uZmlyZSh0aGlzLCBvcHRpb25zKTtcbiAgfVxuICBvblByb3BlcnR5RWRpdG9yTW9kYWxTaG93RGVzY3JpcHRpb25DYWxsYmFjayhcbiAgICBwcm9wZXJ0eU5hbWU6IHN0cmluZyxcbiAgICBvYmo6IFN1cnZleS5CYXNlXG4gICk6IGFueSB7XG4gICAgdmFyIG9wdGlvbnMgPSB7XG4gICAgICBvYmo6IG9iaixcbiAgICAgIHByb3BlcnR5TmFtZTogcHJvcGVydHlOYW1lLFxuICAgICAgaHRtbFRvcDogXCJcIixcbiAgICAgIGh0bWxCb3R0b206IFwiXCJcbiAgICB9O1xuICAgIHRoaXMub25TaG93UHJvcGVydHlNb2RhbEVkaXRvckRlc2NyaXB0aW9uLmZpcmUodGhpcywgb3B0aW9ucyk7XG4gICAgdmFyIHJlcyA9IHsgdG9wOiBvcHRpb25zLmh0bWxUb3AsIGJvdHRvbTogb3B0aW9ucy5odG1sQm90dG9tIH07XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuICBvbkdldEVsZW1lbnRFZGl0b3JUaXRsZUNhbGxiYWNrKG9iajogU3VydmV5LkJhc2UsIHRpdGxlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aXRsZTtcbiAgfVxuICBvbkNvbmRpdGlvblZhbHVlU3VydmV5Q3JlYXRlZENhbGxCYWNrKFxuICAgIHZhbHVlUXVlc3Rpb25OYW1lOiBzdHJpbmcsXG4gICAgcHJvcGVydHlOYW1lOiBzdHJpbmcsXG4gICAgb2JqOiBTdXJ2ZXkuQmFzZSxcbiAgICBlZGl0b3I6IFN1cnZleVByb3BlcnR5RWRpdG9yQmFzZSxcbiAgICBzdXJ2ZXk6IFN1cnZleS5TdXJ2ZXlcbiAgKSB7XG4gICAgdmFyIG9wdGlvbnMgPSB7XG4gICAgICB2YWx1ZVF1ZXN0aW9uTmFtZTogdmFsdWVRdWVzdGlvbk5hbWUsXG4gICAgICBwcm9wZXJ0eU5hbWU6IHByb3BlcnR5TmFtZSxcbiAgICAgIG9iajogb2JqLFxuICAgICAgZWRpdG9yOiBlZGl0b3IsXG4gICAgICBzdXJ2ZXk6IHN1cnZleVxuICAgIH07XG4gICAgdGhpcy5vbkNvbmRpdGlvblZhbHVlU3VydmV5Q3JlYXRlZC5maXJlKHRoaXMsIG9wdGlvbnMpO1xuICB9XG4gIG9uQ29uZGl0aW9uUXVlc3Rpb25zR2V0TGlzdENhbGxiYWNrKFxuICAgIHByb3BlcnR5TmFtZTogc3RyaW5nLFxuICAgIG9iajogU3VydmV5LkJhc2UsXG4gICAgZWRpdG9yOiBTdXJ2ZXlQcm9wZXJ0eUVkaXRvckJhc2UsXG4gICAgbGlzdDogYW55W11cbiAgKSB7XG4gICAgdmFyIG9wdGlvbnMgPSB7XG4gICAgICBwcm9wZXJ0eU5hbWU6IHByb3BlcnR5TmFtZSxcbiAgICAgIG9iajogb2JqLFxuICAgICAgZWRpdG9yOiBlZGl0b3IsXG4gICAgICBsaXN0OiBsaXN0XG4gICAgfTtcbiAgICB0aGlzLm9uQ29uZGl0aW9uUXVlc3Rpb25zR2V0TGlzdC5maXJlKHRoaXMsIG9wdGlvbnMpO1xuICB9XG4gIG9uQWRvcm5lclJlbmRlcmVkQ2FsbGJhY2soXG4gICAgcXVlc3Rpb246IFN1cnZleS5RdWVzdGlvbixcbiAgICBhZG9ybmVyOiBzdHJpbmcsXG4gICAgZWxlbWVudDogSFRNTEVsZW1lbnQsXG4gICAgY29udGV4dD86IGFueVxuICApIHtcbiAgICB2YXIgb3B0aW9ucyA9IHtcbiAgICAgIHN1cnZleTogdGhpcy5zdXJ2ZXksXG4gICAgICBxdWVzdGlvbjogcXVlc3Rpb24sXG4gICAgICBhZG9ybmVyOiBhZG9ybmVyLFxuICAgICAgZWxlbWVudDogZWxlbWVudCxcbiAgICAgIGNvbnRleHQ6IGNvbnRleHRcbiAgICB9O1xuICAgIHRoaXMub25BZG9ybmVyUmVuZGVyZWQuZmlyZSh0aGlzLCBvcHRpb25zKTtcbiAgfVxuICAvKipcbiAgICogVXBsb2FkIHRoZSBmaWxlcyBvbiBhIHNlcnZlclxuICAgKiBAcGFyYW0gZmlsZXMgZmlsZXMgdG8gdXBsb2FkXG4gICAqIEBwYXJhbSB1cGxvYWRpbmdDYWxsYmFjayBhIGNhbGwgYmFjayBmdW5jdGlvbiB0byBnZXQgdGhlIHN0YXR1cyBvbiB1cGxvYWRpbmcgdGhlIGZpbGUgYW5kIG9wZXJhdGlvbiByZXN1bHQgLSBVUkkgb2YgdGhlIHVwbG9hZGVkIGZpbGVcbiAgICovXG4gIHB1YmxpYyB1cGxvYWRGaWxlcyhcbiAgICBmaWxlczogRmlsZVtdLFxuICAgIHVwbG9hZGluZ0NhbGxiYWNrOiAoc3RhdHVzOiBzdHJpbmcsIGRhdGE6IGFueSkgPT4gYW55XG4gICkge1xuICAgIGlmICh0aGlzLm9uVXBsb2FkRmlsZS5pc0VtcHR5KSB7XG4gICAgICBsZXQgZmlsZVJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XG4gICAgICBmaWxlUmVhZGVyLm9ubG9hZCA9IGUgPT4ge1xuICAgICAgICB1cGxvYWRpbmdDYWxsYmFjayhcInN1Y2Nlc3NcIiwgZmlsZVJlYWRlci5yZXN1bHQpO1xuICAgICAgfTtcbiAgICAgIGZpbGVSZWFkZXIucmVhZEFzRGF0YVVSTChmaWxlc1swXSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMub25VcGxvYWRGaWxlLmZpcmUodGhpcywge1xuICAgICAgICBmaWxlczogZmlsZXMgfHwgW10sXG4gICAgICAgIGNhbGxiYWNrOiB1cGxvYWRpbmdDYWxsYmFja1xuICAgICAgfSk7XG4gICAgfVxuICB9XG59XG5cbmtvLmNvbXBvbmVudHMucmVnaXN0ZXIoXCJzdXJ2ZXktd2lkZ2V0XCIsIHtcbiAgdmlld01vZGVsOiBmdW5jdGlvbihwYXJhbXMpIHtcbiAgICB0aGlzLnN1cnZleSA9IHBhcmFtcy5zdXJ2ZXk7XG4gIH0sXG4gIHRlbXBsYXRlOlxuICAgIFwiPCEtLSBrbyBpZjogJGRhdGEuc3VydmV5IC0tPjwhLS0ga28gdGVtcGxhdGU6IHsgbmFtZTogJ3N1cnZleS1jb250ZW50JywgZGF0YTogc3VydmV5LCBhZnRlclJlbmRlcjogJHBhcmVudC5rb0V2ZW50QWZ0ZXJSZW5kZXIgfSAtLT48IS0tIC9rbyAtLT48IS0tIC9rbyAtLT5cIlxufSk7XG5cbmtvLmNvbXBvbmVudHMucmVnaXN0ZXIoXCJzdmctaWNvblwiLCB7XG4gIHZpZXdNb2RlbDoge1xuICAgIGNyZWF0ZVZpZXdNb2RlbDogKHBhcmFtcywgY29tcG9uZW50SW5mbykgPT4ge1xuICAgICAga28uY29tcHV0ZWQoKCkgPT4ge1xuICAgICAgICB2YXIgc2l6ZSA9IChrby51bndyYXAocGFyYW1zLnNpemUpIHx8IDE2KSArIFwicHhcIjtcbiAgICAgICAgdmFyIHN2Z0VsZW06IGFueSA9IGNvbXBvbmVudEluZm8uZWxlbWVudC5jaGlsZE5vZGVzWzBdO1xuICAgICAgICBzdmdFbGVtLnN0eWxlLndpZHRoID0gc2l6ZTtcbiAgICAgICAgc3ZnRWxlbS5zdHlsZS5oZWlnaHQgPSBzaXplO1xuICAgICAgICB2YXIgbm9kZTogYW55ID0gc3ZnRWxlbS5jaGlsZE5vZGVzWzBdO1xuICAgICAgICBub2RlLnNldEF0dHJpYnV0ZU5TKFxuICAgICAgICAgIFwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGlua1wiLFxuICAgICAgICAgIFwieGxpbms6aHJlZlwiLFxuICAgICAgICAgIFwiI1wiICsga28udW53cmFwKHBhcmFtcy5pY29uTmFtZSlcbiAgICAgICAgKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfSxcbiAgdGVtcGxhdGU6IFwiPHN2ZyBjbGFzcz0nc3ZkLXN2Zy1pY29uJz48dXNlPjwvdXNlPjwvc3ZnPlwiXG59KTtcblxuZXhwb3J0IGNsYXNzIFN1cnZleUVkaXRvciBleHRlbmRzIFN1cnZleUNyZWF0b3Ige1xuICBjb25zdHJ1Y3RvcihyZW5kZXJlZEVsZW1lbnQ6IGFueSA9IG51bGwsIG9wdGlvbnM6IGFueSA9IG51bGwpIHtcbiAgICBzdXBlcihyZW5kZXJlZEVsZW1lbnQsIG9wdGlvbnMpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGFkZEVtcHR5UGFuZWxFbGVtZW50KFxuICBzdXJ2ZXk6IFN1cnZleUZvckRlc2lnbmVyLFxuICByb290OiBIVE1MRWxlbWVudCxcbiAgZHJhZ0Ryb3BIZWxwZXI6IGFueSxcbiAgcGFuZWw6IGFueVxuKTogSFRNTEVsZW1lbnQge1xuICB2YXIgZURpdjogSFRNTERpdkVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICBlRGl2LmNsYXNzTmFtZSA9IFwid2VsbCBjYXJkIGNhcmQtYmxvY2tcIjtcbiAgZURpdi5vbmRyYWdvdmVyID0gZnVuY3Rpb24oZSkge1xuICAgIGRyYWdEcm9wSGVscGVyLmRvRHJhZ0Ryb3BPdmVyKGUsIHBhbmVsKTtcbiAgfTtcbiAgdmFyIGVTcGFuOiBIVE1MU3BhbkVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic3BhblwiKTtcbiAgZVNwYW4udGV4dENvbnRlbnQgPSBzdXJ2ZXkuZ2V0RWRpdG9yTG9jU3RyaW5nKFwic3VydmV5LmRyb3BRdWVzdGlvblwiKTtcbiAgZURpdi5hcHBlbmRDaGlsZChlU3Bhbik7XG4gIHJvb3QuYXBwZW5kQ2hpbGQoZURpdik7XG4gIHJldHVybiBlRGl2O1xufVxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2VkaXRvci50cyIsIi8vIFRoaXMgZmlsZSBpcyBiYXNlZCBvbiBKU09ONSwgaHR0cDovL2pzb241Lm9yZy9cbi8vIFRoZSBtb2RpZmljYXRpb24gZm9yIGdldHRpbmcgb2JqZWN0IGFuZCBwcm9wZXJ0aWVzIGxvY2F0aW9uICdhdCcgd2VyZSBtYWRlbi5cblxuZXhwb3J0IGNsYXNzIFN1cnZleUpTT041IHtcbiAgcHVibGljIHN0YXRpYyBwb3NpdGlvbk5hbWUgPSBcInBvc1wiO1xuICBwcml2YXRlIHN0YXRpYyBlc2NhcGVlID0ge1xuICAgIFwiJ1wiOiBcIidcIixcbiAgICAnXCInOiAnXCInLFxuICAgIFwiXFxcXFwiOiBcIlxcXFxcIixcbiAgICBcIi9cIjogXCIvXCIsXG4gICAgXCJcXG5cIjogXCJcIiwgLy8gUmVwbGFjZSBlc2NhcGVkIG5ld2xpbmVzIGluIHN0cmluZ3Mgdy8gZW1wdHkgc3RyaW5nXG4gICAgYjogXCJcXGJcIixcbiAgICBmOiBcIlxcZlwiLFxuICAgIG46IFwiXFxuXCIsXG4gICAgcjogXCJcXHJcIixcbiAgICB0OiBcIlxcdFwiXG4gIH07XG4gIHByaXZhdGUgc3RhdGljIHdzID0gW1wiIFwiLCBcIlxcdFwiLCBcIlxcclwiLCBcIlxcblwiLCBcIlxcdlwiLCBcIlxcZlwiLCBcIlxceEEwXCIsIFwiXFx1RkVGRlwiXTtcbiAgcHJpdmF0ZSBlbmRBdDogbnVtYmVyO1xuICBwcml2YXRlIGF0OiBudW1iZXI7IC8vIFRoZSBpbmRleCBvZiB0aGUgY3VycmVudCBjaGFyYWN0ZXJcbiAgcHJpdmF0ZSBjaDogYW55OyAvLyBUaGUgY3VycmVudCBjaGFyYWN0ZXJcbiAgcHJpdmF0ZSB0ZXh0OiBzdHJpbmc7XG4gIHByaXZhdGUgcGFyc2VUeXBlOiBudW1iZXI7IC8vIDAgLSBzdGFkYXJkLCAxIC0gZ2V0IGluZm9ybWF0aW9uIGFib3V0IG9iamVjdHMsIDIgLSBnZXQgaW5mb3JtYXRpb24gYWJvdXQgYWxsIHByb3BlcnRpZXNcbiAgY29uc3RydWN0b3IocGFyc2VUeXBlOiBudW1iZXIgPSAwKSB7XG4gICAgdGhpcy5wYXJzZVR5cGUgPSBwYXJzZVR5cGU7XG4gIH1cbiAgcHVibGljIHBhcnNlKFxuICAgIHNvdXJjZTogYW55LFxuICAgIHJldml2ZXI6IGFueSA9IG51bGwsXG4gICAgc3RhcnRGcm9tOiBudW1iZXIgPSAwLFxuICAgIGVuZEF0OiBudW1iZXIgPSAtMVxuICApOiBhbnkge1xuICAgIHZhciByZXN1bHQ7XG5cbiAgICB0aGlzLnRleHQgPSBTdHJpbmcoc291cmNlKTtcbiAgICB0aGlzLmF0ID0gc3RhcnRGcm9tO1xuICAgIHRoaXMuZW5kQXQgPSBlbmRBdDtcbiAgICB0aGlzLmNoID0gXCIgXCI7XG4gICAgcmVzdWx0ID0gdGhpcy52YWx1ZSgpO1xuICAgIHRoaXMud2hpdGUoKTtcbiAgICBpZiAodGhpcy5jaCkge1xuICAgICAgdGhpcy5lcnJvcihcIlN5bnRheCBlcnJvclwiKTtcbiAgICB9XG5cbiAgICAvLyBJZiB0aGVyZSBpcyBhIHJldml2ZXIgZnVuY3Rpb24sIHdlIHJlY3Vyc2l2ZWx5IHdhbGsgdGhlIG5ldyBzdHJ1Y3R1cmUsXG4gICAgLy8gcGFzc2luZyBlYWNoIG5hbWUvdmFsdWUgcGFpciB0byB0aGUgcmV2aXZlciBmdW5jdGlvbiBmb3IgcG9zc2libGVcbiAgICAvLyB0cmFuc2Zvcm1hdGlvbiwgc3RhcnRpbmcgd2l0aCBhIHRlbXBvcmFyeSByb290IG9iamVjdCB0aGF0IGhvbGRzIHRoZSByZXN1bHRcbiAgICAvLyBpbiBhbiBlbXB0eSBrZXkuIElmIHRoZXJlIGlzIG5vdCBhIHJldml2ZXIgZnVuY3Rpb24sIHdlIHNpbXBseSByZXR1cm4gdGhlXG4gICAgLy8gcmVzdWx0LlxuXG4gICAgcmV0dXJuIHR5cGVvZiByZXZpdmVyID09PSBcImZ1bmN0aW9uXCJcbiAgICAgID8gKGZ1bmN0aW9uIHdhbGsoaG9sZGVyLCBrZXkpIHtcbiAgICAgICAgICB2YXIgayxcbiAgICAgICAgICAgIHYsXG4gICAgICAgICAgICB2YWx1ZSA9IGhvbGRlcltrZXldO1xuICAgICAgICAgIGlmICh2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgICAgIGZvciAoayBpbiB2YWx1ZSkge1xuICAgICAgICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbHVlLCBrKSkge1xuICAgICAgICAgICAgICAgIHYgPSB3YWxrKHZhbHVlLCBrKTtcbiAgICAgICAgICAgICAgICBpZiAodiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICB2YWx1ZVtrXSA9IHY7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIGRlbGV0ZSB2YWx1ZVtrXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHJldml2ZXIuY2FsbChob2xkZXIsIGtleSwgdmFsdWUpO1xuICAgICAgICB9KSh7IFwiXCI6IHJlc3VsdCB9LCBcIlwiKVxuICAgICAgOiByZXN1bHQ7XG4gIH1cbiAgcHJpdmF0ZSBlcnJvcihtOiBzdHJpbmcpIHtcbiAgICAvLyBDYWxsIGVycm9yIHdoZW4gc29tZXRoaW5nIGlzIHdyb25nLlxuICAgIHZhciBlcnJvciA9IG5ldyBTeW50YXhFcnJvcigpO1xuICAgIGVycm9yLm1lc3NhZ2UgPSBtO1xuICAgIGVycm9yW1wiYXRcIl0gPSB0aGlzLmF0O1xuICAgIHRocm93IGVycm9yO1xuICB9XG4gIHByaXZhdGUgbmV4dChjOiBhbnkgPSBudWxsKSB7XG4gICAgLy8gSWYgYSBjIHBhcmFtZXRlciBpcyBwcm92aWRlZCwgdmVyaWZ5IHRoYXQgaXQgbWF0Y2hlcyB0aGUgY3VycmVudCBjaGFyYWN0ZXIuXG4gICAgaWYgKGMgJiYgYyAhPT0gdGhpcy5jaCkge1xuICAgICAgdGhpcy5lcnJvcihcIkV4cGVjdGVkICdcIiArIGMgKyBcIicgaW5zdGVhZCBvZiAnXCIgKyB0aGlzLmNoICsgXCInXCIpO1xuICAgIH1cbiAgICAvLyBHZXQgdGhlIHRoaXMubmV4dCBjaGFyYWN0ZXIuIFdoZW4gdGhlcmUgYXJlIG5vIG1vcmUgY2hhcmFjdGVycyxcbiAgICAvLyByZXR1cm4gdGhlIGVtcHR5IHN0cmluZy5cbiAgICB0aGlzLmNoID0gdGhpcy5jaGFydEF0KCk7XG4gICAgdGhpcy5hdCArPSAxO1xuICAgIHJldHVybiB0aGlzLmNoO1xuICB9XG4gIHByaXZhdGUgcGVlaygpIHtcbiAgICAvLyBHZXQgdGhlIHRoaXMubmV4dCBjaGFyYWN0ZXIgd2l0aG91dCBjb25zdW1pbmcgaXQgb3JcbiAgICAvLyBhc3NpZ25pbmcgaXQgdG8gdGhlIHRoaXMuY2ggdmFyYWlibGUuXG4gICAgcmV0dXJuIHRoaXMuY2hhcnRBdCgpO1xuICB9XG4gIHByaXZhdGUgY2hhcnRBdCgpIHtcbiAgICBpZiAodGhpcy5lbmRBdCA+IC0xICYmIHRoaXMuYXQgPj0gdGhpcy5lbmRBdCkgcmV0dXJuIFwiXCI7XG4gICAgcmV0dXJuIHRoaXMudGV4dC5jaGFyQXQodGhpcy5hdCk7XG4gIH1cbiAgcHJpdmF0ZSBpZGVudGlmaWVyKCkge1xuICAgIC8vIFBhcnNlIGFuIGlkZW50aWZpZXIuIE5vcm1hbGx5LCByZXNlcnZlZCB3b3JkcyBhcmUgZGlzYWxsb3dlZCBoZXJlLCBidXQgd2VcbiAgICAvLyBvbmx5IHVzZSB0aGlzIGZvciB1bnF1b3RlZCBvYmplY3Qga2V5cywgd2hlcmUgcmVzZXJ2ZWQgd29yZHMgYXJlIGFsbG93ZWQsXG4gICAgLy8gc28gd2UgZG9uJ3QgY2hlY2sgZm9yIHRob3NlIGhlcmUuIFJlZmVyZW5jZXM6XG4gICAgLy8gLSBodHRwOi8vZXM1LmdpdGh1Yi5jb20vI3g3LjZcbiAgICAvLyAtIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuL0NvcmVfSmF2YVNjcmlwdF8xLjVfR3VpZGUvQ29yZV9MYW5ndWFnZV9GZWF0dXJlcyNWYXJpYWJsZXNcbiAgICAvLyAtIGh0dHA6Ly9kb2NzdG9yZS5taWsudWEvb3JlbGx5L3dlYnByb2cvanNjcmlwdC9jaDAyXzA3Lmh0bVxuICAgIC8vIFRPRE8gSWRlbnRpZmllcnMgY2FuIGhhdmUgVW5pY29kZSBcImxldHRlcnNcIiBpbiB0aGVtOyBhZGQgc3VwcG9ydCBmb3IgdGhvc2UuXG4gICAgdmFyIGtleSA9IHRoaXMuY2g7XG5cbiAgICAvLyBJZGVudGlmaWVycyBtdXN0IHN0YXJ0IHdpdGggYSBsZXR0ZXIsIF8gb3IgJC5cbiAgICBpZiAoXG4gICAgICB0aGlzLmNoICE9PSBcIl9cIiAmJlxuICAgICAgdGhpcy5jaCAhPT0gXCIkXCIgJiZcbiAgICAgICh0aGlzLmNoIDwgXCJhXCIgfHwgdGhpcy5jaCA+IFwielwiKSAmJlxuICAgICAgKHRoaXMuY2ggPCBcIkFcIiB8fCB0aGlzLmNoID4gXCJaXCIpXG4gICAgKSB7XG4gICAgICB0aGlzLmVycm9yKFwiQmFkIGlkZW50aWZpZXJcIik7XG4gICAgfVxuXG4gICAgLy8gU3Vic2VxdWVudCBjaGFyYWN0ZXJzIGNhbiBjb250YWluIGRpZ2l0cy5cbiAgICB3aGlsZSAoXG4gICAgICB0aGlzLm5leHQoKSAmJlxuICAgICAgKHRoaXMuY2ggPT09IFwiX1wiIHx8XG4gICAgICAgIHRoaXMuY2ggPT09IFwiJFwiIHx8XG4gICAgICAgICh0aGlzLmNoID49IFwiYVwiICYmIHRoaXMuY2ggPD0gXCJ6XCIpIHx8XG4gICAgICAgICh0aGlzLmNoID49IFwiQVwiICYmIHRoaXMuY2ggPD0gXCJaXCIpIHx8XG4gICAgICAgICh0aGlzLmNoID49IFwiMFwiICYmIHRoaXMuY2ggPD0gXCI5XCIpKVxuICAgICkge1xuICAgICAga2V5ICs9IHRoaXMuY2g7XG4gICAgfVxuXG4gICAgcmV0dXJuIGtleTtcbiAgfVxuICBwcml2YXRlIG51bWJlcigpIHtcbiAgICAvLyBQYXJzZSBhIG51bWJlciB2YWx1ZS5cblxuICAgIHZhciBudW1iZXIsXG4gICAgICBzaWduID0gXCJcIixcbiAgICAgIHN0cmluZyA9IFwiXCIsXG4gICAgICBiYXNlID0gMTA7XG5cbiAgICBpZiAodGhpcy5jaCA9PT0gXCItXCIgfHwgdGhpcy5jaCA9PT0gXCIrXCIpIHtcbiAgICAgIHNpZ24gPSB0aGlzLmNoO1xuICAgICAgdGhpcy5uZXh0KHRoaXMuY2gpO1xuICAgIH1cblxuICAgIC8vIHN1cHBvcnQgZm9yIEluZmluaXR5IChjb3VsZCB0d2VhayB0byBhbGxvdyBvdGhlciB3b3Jkcyk6XG4gICAgaWYgKHRoaXMuY2ggPT09IFwiSVwiKSB7XG4gICAgICBudW1iZXIgPSB0aGlzLndvcmQoKTtcbiAgICAgIGlmICh0eXBlb2YgbnVtYmVyICE9PSBcIm51bWJlclwiIHx8IGlzTmFOKG51bWJlcikpIHtcbiAgICAgICAgdGhpcy5lcnJvcihcIlVuZXhwZWN0ZWQgd29yZCBmb3IgbnVtYmVyXCIpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHNpZ24gPT09IFwiLVwiID8gLW51bWJlciA6IG51bWJlcjtcbiAgICB9XG5cbiAgICAvLyBzdXBwb3J0IGZvciBOYU5cbiAgICBpZiAodGhpcy5jaCA9PT0gXCJOXCIpIHtcbiAgICAgIG51bWJlciA9IHRoaXMud29yZCgpO1xuICAgICAgaWYgKCFpc05hTihudW1iZXIpKSB7XG4gICAgICAgIHRoaXMuZXJyb3IoXCJleHBlY3RlZCB3b3JkIHRvIGJlIE5hTlwiKTtcbiAgICAgIH1cbiAgICAgIC8vIGlnbm9yZSBzaWduIGFzIC1OYU4gYWxzbyBpcyBOYU5cbiAgICAgIHJldHVybiBudW1iZXI7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuY2ggPT09IFwiMFwiKSB7XG4gICAgICBzdHJpbmcgKz0gdGhpcy5jaDtcbiAgICAgIHRoaXMubmV4dCgpO1xuICAgICAgaWYgKHRoaXMuY2ggPT09IFwieFwiIHx8IHRoaXMuY2ggPT09IFwiWFwiKSB7XG4gICAgICAgIHN0cmluZyArPSB0aGlzLmNoO1xuICAgICAgICB0aGlzLm5leHQoKTtcbiAgICAgICAgYmFzZSA9IDE2O1xuICAgICAgfSBlbHNlIGlmICh0aGlzLmNoID49IFwiMFwiICYmIHRoaXMuY2ggPD0gXCI5XCIpIHtcbiAgICAgICAgdGhpcy5lcnJvcihcIk9jdGFsIGxpdGVyYWxcIik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgc3dpdGNoIChiYXNlKSB7XG4gICAgICBjYXNlIDEwOlxuICAgICAgICB3aGlsZSAodGhpcy5jaCA+PSBcIjBcIiAmJiB0aGlzLmNoIDw9IFwiOVwiKSB7XG4gICAgICAgICAgc3RyaW5nICs9IHRoaXMuY2g7XG4gICAgICAgICAgdGhpcy5uZXh0KCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuY2ggPT09IFwiLlwiKSB7XG4gICAgICAgICAgc3RyaW5nICs9IFwiLlwiO1xuICAgICAgICAgIHdoaWxlICh0aGlzLm5leHQoKSAmJiB0aGlzLmNoID49IFwiMFwiICYmIHRoaXMuY2ggPD0gXCI5XCIpIHtcbiAgICAgICAgICAgIHN0cmluZyArPSB0aGlzLmNoO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5jaCA9PT0gXCJlXCIgfHwgdGhpcy5jaCA9PT0gXCJFXCIpIHtcbiAgICAgICAgICBzdHJpbmcgKz0gdGhpcy5jaDtcbiAgICAgICAgICB0aGlzLm5leHQoKTtcbiAgICAgICAgICBpZiAodGhpcy5jaCA9PT0gXCItXCIgfHwgdGhpcy5jaCA9PT0gXCIrXCIpIHtcbiAgICAgICAgICAgIHN0cmluZyArPSB0aGlzLmNoO1xuICAgICAgICAgICAgdGhpcy5uZXh0KCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHdoaWxlICh0aGlzLmNoID49IFwiMFwiICYmIHRoaXMuY2ggPD0gXCI5XCIpIHtcbiAgICAgICAgICAgIHN0cmluZyArPSB0aGlzLmNoO1xuICAgICAgICAgICAgdGhpcy5uZXh0KCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAxNjpcbiAgICAgICAgd2hpbGUgKFxuICAgICAgICAgICh0aGlzLmNoID49IFwiMFwiICYmIHRoaXMuY2ggPD0gXCI5XCIpIHx8XG4gICAgICAgICAgKHRoaXMuY2ggPj0gXCJBXCIgJiYgdGhpcy5jaCA8PSBcIkZcIikgfHxcbiAgICAgICAgICAodGhpcy5jaCA+PSBcImFcIiAmJiB0aGlzLmNoIDw9IFwiZlwiKVxuICAgICAgICApIHtcbiAgICAgICAgICBzdHJpbmcgKz0gdGhpcy5jaDtcbiAgICAgICAgICB0aGlzLm5leHQoKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICBpZiAoc2lnbiA9PT0gXCItXCIpIHtcbiAgICAgIG51bWJlciA9IC1zdHJpbmc7XG4gICAgfSBlbHNlIHtcbiAgICAgIG51bWJlciA9ICtzdHJpbmc7XG4gICAgfVxuXG4gICAgaWYgKCFpc0Zpbml0ZShudW1iZXIpKSB7XG4gICAgICB0aGlzLmVycm9yKFwiQmFkIG51bWJlclwiKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG51bWJlcjtcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBzdHJpbmcoKSB7XG4gICAgLy8gUGFyc2UgYSBzdHJpbmcgdmFsdWUuXG5cbiAgICB2YXIgaGV4LFxuICAgICAgaSxcbiAgICAgIHN0cmluZyA9IFwiXCIsXG4gICAgICBkZWxpbSwgLy8gZG91YmxlIHF1b3RlIG9yIHNpbmdsZSBxdW90ZVxuICAgICAgdWZmZmY7XG5cbiAgICAvLyBXaGVuIHBhcnNpbmcgZm9yIHN0cmluZyB2YWx1ZXMsIHdlIG11c3QgbG9vayBmb3IgJyBvciBcIiBhbmQgXFwgY2hhcmFjdGVycy5cblxuICAgIGlmICh0aGlzLmNoID09PSAnXCInIHx8IHRoaXMuY2ggPT09IFwiJ1wiKSB7XG4gICAgICBkZWxpbSA9IHRoaXMuY2g7XG4gICAgICB3aGlsZSAodGhpcy5uZXh0KCkpIHtcbiAgICAgICAgaWYgKHRoaXMuY2ggPT09IGRlbGltKSB7XG4gICAgICAgICAgdGhpcy5uZXh0KCk7XG4gICAgICAgICAgcmV0dXJuIHN0cmluZztcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmNoID09PSBcIlxcXFxcIikge1xuICAgICAgICAgIHRoaXMubmV4dCgpO1xuICAgICAgICAgIGlmICh0aGlzLmNoID09PSBcInVcIikge1xuICAgICAgICAgICAgdWZmZmYgPSAwO1xuICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IDQ7IGkgKz0gMSkge1xuICAgICAgICAgICAgICBoZXggPSBwYXJzZUludCh0aGlzLm5leHQoKSwgMTYpO1xuICAgICAgICAgICAgICBpZiAoIWlzRmluaXRlKGhleCkpIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB1ZmZmZiA9IHVmZmZmICogMTYgKyBoZXg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzdHJpbmcgKz0gU3RyaW5nLmZyb21DaGFyQ29kZSh1ZmZmZik7XG4gICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmNoID09PSBcIlxcclwiKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5wZWVrKCkgPT09IFwiXFxuXCIpIHtcbiAgICAgICAgICAgICAgdGhpcy5uZXh0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgU3VydmV5SlNPTjUuZXNjYXBlZVt0aGlzLmNoXSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgc3RyaW5nICs9IFN1cnZleUpTT041LmVzY2FwZWVbdGhpcy5jaF07XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmNoID09PSBcIlxcblwiKSB7XG4gICAgICAgICAgLy8gdW5lc2NhcGVkIG5ld2xpbmVzIGFyZSBpbnZhbGlkOyBzZWU6XG4gICAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2FzZWVtay9qc29uNS9pc3N1ZXMvMjRcbiAgICAgICAgICAvLyBUT0RPIHRoaXMgZmVlbHMgc3BlY2lhbC1jYXNlZDsgYXJlIHRoZXJlIG90aGVyXG4gICAgICAgICAgLy8gaW52YWxpZCB1bmVzY2FwZWQgY2hhcnM/XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc3RyaW5nICs9IHRoaXMuY2g7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5lcnJvcihcIkJhZCBzdHJpbmdcIik7XG4gIH1cbiAgcHJpdmF0ZSBpbmxpbmVDb21tZW50KCkge1xuICAgIC8vIFNraXAgYW4gaW5saW5lIGNvbW1lbnQsIGFzc3VtaW5nIHRoaXMgaXMgb25lLiBUaGUgY3VycmVudCBjaGFyYWN0ZXIgc2hvdWxkXG4gICAgLy8gYmUgdGhlIHNlY29uZCAvIGNoYXJhY3RlciBpbiB0aGUgLy8gcGFpciB0aGF0IGJlZ2lucyB0aGlzIGlubGluZSBjb21tZW50LlxuICAgIC8vIFRvIGZpbmlzaCB0aGUgaW5saW5lIGNvbW1lbnQsIHdlIGxvb2sgZm9yIGEgbmV3bGluZSBvciB0aGUgZW5kIG9mIHRoZSB0ZXh0LlxuXG4gICAgaWYgKHRoaXMuY2ggIT09IFwiL1wiKSB7XG4gICAgICB0aGlzLmVycm9yKFwiTm90IGFuIGlubGluZSBjb21tZW50XCIpO1xuICAgIH1cblxuICAgIGRvIHtcbiAgICAgIHRoaXMubmV4dCgpO1xuICAgICAgaWYgKHRoaXMuY2ggPT09IFwiXFxuXCIgfHwgdGhpcy5jaCA9PT0gXCJcXHJcIikge1xuICAgICAgICB0aGlzLm5leHQoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH0gd2hpbGUgKHRoaXMuY2gpO1xuICB9XG4gIHByaXZhdGUgYmxvY2tDb21tZW50KCkge1xuICAgIC8vIFNraXAgYSBibG9jayBjb21tZW50LCBhc3N1bWluZyB0aGlzIGlzIG9uZS4gVGhlIGN1cnJlbnQgY2hhcmFjdGVyIHNob3VsZCBiZVxuICAgIC8vIHRoZSAqIGNoYXJhY3RlciBpbiB0aGUgLyogcGFpciB0aGF0IGJlZ2lucyB0aGlzIGJsb2NrIGNvbW1lbnQuXG4gICAgLy8gVG8gZmluaXNoIHRoZSBibG9jayBjb21tZW50LCB3ZSBsb29rIGZvciBhbiBlbmRpbmcgKi8gcGFpciBvZiBjaGFyYWN0ZXJzLFxuICAgIC8vIGJ1dCB3ZSBhbHNvIHdhdGNoIGZvciB0aGUgZW5kIG9mIHRleHQgYmVmb3JlIHRoZSBjb21tZW50IGlzIHRlcm1pbmF0ZWQuXG5cbiAgICBpZiAodGhpcy5jaCAhPT0gXCIqXCIpIHtcbiAgICAgIHRoaXMuZXJyb3IoXCJOb3QgYSBibG9jayBjb21tZW50XCIpO1xuICAgIH1cblxuICAgIGRvIHtcbiAgICAgIHRoaXMubmV4dCgpO1xuICAgICAgd2hpbGUgKHRoaXMuY2ggPT09IFwiKlwiKSB7XG4gICAgICAgIHRoaXMubmV4dChcIipcIik7XG4gICAgICAgIGlmICh0aGlzLmNoID09PSBcIi9cIikge1xuICAgICAgICAgIHRoaXMubmV4dChcIi9cIik7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSB3aGlsZSAodGhpcy5jaCk7XG5cbiAgICB0aGlzLmVycm9yKFwiVW50ZXJtaW5hdGVkIGJsb2NrIGNvbW1lbnRcIik7XG4gIH1cbiAgcHJpdmF0ZSBjb21tZW50KCkge1xuICAgIC8vIFNraXAgYSBjb21tZW50LCB3aGV0aGVyIGlubGluZSBvciBibG9jay1sZXZlbCwgYXNzdW1pbmcgdGhpcyBpcyBvbmUuXG4gICAgLy8gQ29tbWVudHMgYWx3YXlzIGJlZ2luIHdpdGggYSAvIGNoYXJhY3Rlci5cblxuICAgIGlmICh0aGlzLmNoICE9PSBcIi9cIikge1xuICAgICAgdGhpcy5lcnJvcihcIk5vdCBhIGNvbW1lbnRcIik7XG4gICAgfVxuXG4gICAgdGhpcy5uZXh0KFwiL1wiKTtcblxuICAgIGlmICh0aGlzLmNoID09PSBcIi9cIikge1xuICAgICAgdGhpcy5pbmxpbmVDb21tZW50KCk7XG4gICAgfSBlbHNlIGlmICh0aGlzLmNoID09PSBcIipcIikge1xuICAgICAgdGhpcy5ibG9ja0NvbW1lbnQoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5lcnJvcihcIlVucmVjb2duaXplZCBjb21tZW50XCIpO1xuICAgIH1cbiAgfVxuICBwcml2YXRlIHdoaXRlKCkge1xuICAgIC8vIFNraXAgd2hpdGVzcGFjZSBhbmQgY29tbWVudHMuXG4gICAgLy8gTm90ZSB0aGF0IHdlJ3JlIGRldGVjdGluZyBjb21tZW50cyBieSBvbmx5IGEgc2luZ2xlIC8gY2hhcmFjdGVyLlxuICAgIC8vIFRoaXMgd29ya3Mgc2luY2UgcmVndWxhciBleHByZXNzaW9ucyBhcmUgbm90IHZhbGlkIEpTT04oNSksIGJ1dCB0aGlzIHdpbGxcbiAgICAvLyBicmVhayBpZiB0aGVyZSBhcmUgb3RoZXIgdmFsaWQgdmFsdWVzIHRoYXQgYmVnaW4gd2l0aCBhIC8gY2hhcmFjdGVyIVxuXG4gICAgd2hpbGUgKHRoaXMuY2gpIHtcbiAgICAgIGlmICh0aGlzLmNoID09PSBcIi9cIikge1xuICAgICAgICB0aGlzLmNvbW1lbnQoKTtcbiAgICAgIH0gZWxzZSBpZiAoU3VydmV5SlNPTjUud3MuaW5kZXhPZih0aGlzLmNoKSA+PSAwKSB7XG4gICAgICAgIHRoaXMubmV4dCgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBwcml2YXRlIHdvcmQoKTogYW55IHtcbiAgICAvLyB0cnVlLCBmYWxzZSwgb3IgbnVsbC5cblxuICAgIHN3aXRjaCAodGhpcy5jaCkge1xuICAgICAgY2FzZSBcInRcIjpcbiAgICAgICAgdGhpcy5uZXh0KFwidFwiKTtcbiAgICAgICAgdGhpcy5uZXh0KFwiclwiKTtcbiAgICAgICAgdGhpcy5uZXh0KFwidVwiKTtcbiAgICAgICAgdGhpcy5uZXh0KFwiZVwiKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICBjYXNlIFwiZlwiOlxuICAgICAgICB0aGlzLm5leHQoXCJmXCIpO1xuICAgICAgICB0aGlzLm5leHQoXCJhXCIpO1xuICAgICAgICB0aGlzLm5leHQoXCJsXCIpO1xuICAgICAgICB0aGlzLm5leHQoXCJzXCIpO1xuICAgICAgICB0aGlzLm5leHQoXCJlXCIpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICBjYXNlIFwiblwiOlxuICAgICAgICB0aGlzLm5leHQoXCJuXCIpO1xuICAgICAgICB0aGlzLm5leHQoXCJ1XCIpO1xuICAgICAgICB0aGlzLm5leHQoXCJsXCIpO1xuICAgICAgICB0aGlzLm5leHQoXCJsXCIpO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIGNhc2UgXCJJXCI6XG4gICAgICAgIHRoaXMubmV4dChcIklcIik7XG4gICAgICAgIHRoaXMubmV4dChcIm5cIik7XG4gICAgICAgIHRoaXMubmV4dChcImZcIik7XG4gICAgICAgIHRoaXMubmV4dChcImlcIik7XG4gICAgICAgIHRoaXMubmV4dChcIm5cIik7XG4gICAgICAgIHRoaXMubmV4dChcImlcIik7XG4gICAgICAgIHRoaXMubmV4dChcInRcIik7XG4gICAgICAgIHRoaXMubmV4dChcInlcIik7XG4gICAgICAgIHJldHVybiBJbmZpbml0eTtcbiAgICAgIGNhc2UgXCJOXCI6XG4gICAgICAgIHRoaXMubmV4dChcIk5cIik7XG4gICAgICAgIHRoaXMubmV4dChcImFcIik7XG4gICAgICAgIHRoaXMubmV4dChcIk5cIik7XG4gICAgICAgIHJldHVybiBOYU47XG4gICAgfVxuICAgIHRoaXMuZXJyb3IoXCJVbmV4cGVjdGVkICdcIiArIHRoaXMuY2ggKyBcIidcIik7XG4gIH1cbiAgcHJpdmF0ZSBhcnJheSgpIHtcbiAgICAvLyBQYXJzZSBhbiBhcnJheSB2YWx1ZS5cblxuICAgIHZhciBhcnJheSA9IFtdO1xuXG4gICAgaWYgKHRoaXMuY2ggPT09IFwiW1wiKSB7XG4gICAgICB0aGlzLm5leHQoXCJbXCIpO1xuICAgICAgdGhpcy53aGl0ZSgpO1xuICAgICAgd2hpbGUgKHRoaXMuY2gpIHtcbiAgICAgICAgaWYgKHRoaXMuY2ggPT09IFwiXVwiKSB7XG4gICAgICAgICAgdGhpcy5uZXh0KFwiXVwiKTtcbiAgICAgICAgICByZXR1cm4gYXJyYXk7IC8vIFBvdGVudGlhbGx5IGVtcHR5IGFycmF5XG4gICAgICAgIH1cbiAgICAgICAgLy8gRVM1IGFsbG93cyBvbWl0dGluZyBlbGVtZW50cyBpbiBhcnJheXMsIGUuZy4gWyxdIGFuZFxuICAgICAgICAvLyBbLG51bGxdLiBXZSBkb24ndCBhbGxvdyB0aGlzIGluIEpTT041LlxuICAgICAgICBpZiAodGhpcy5jaCA9PT0gXCIsXCIpIHtcbiAgICAgICAgICB0aGlzLmVycm9yKFwiTWlzc2luZyBhcnJheSBlbGVtZW50XCIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGFycmF5LnB1c2godGhpcy52YWx1ZSgpKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLndoaXRlKCk7XG4gICAgICAgIC8vIElmIHRoZXJlJ3Mgbm8gY29tbWEgYWZ0ZXIgdGhpcyB2YWx1ZSwgdGhpcyBuZWVkcyB0b1xuICAgICAgICAvLyBiZSB0aGUgZW5kIG9mIHRoZSBhcnJheS5cbiAgICAgICAgaWYgKHRoaXMuY2ggIT09IFwiLFwiKSB7XG4gICAgICAgICAgdGhpcy5uZXh0KFwiXVwiKTtcbiAgICAgICAgICByZXR1cm4gYXJyYXk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5uZXh0KFwiLFwiKTtcbiAgICAgICAgdGhpcy53aGl0ZSgpO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLmVycm9yKFwiQmFkIGFycmF5XCIpO1xuICB9XG4gIHByaXZhdGUgb2JqZWN0KCkge1xuICAgIC8vIFBhcnNlIGFuIG9iamVjdCB2YWx1ZS5cblxuICAgIHZhciBrZXksXG4gICAgICBzdGFydCxcbiAgICAgIGlzRmlyc3RQcm9wZXJ0eSA9IHRydWUsXG4gICAgICBvYmplY3QgPSB7fTtcbiAgICBpZiAodGhpcy5wYXJzZVR5cGUgPiAwKSB7XG4gICAgICBvYmplY3RbU3VydmV5SlNPTjUucG9zaXRpb25OYW1lXSA9IHsgc3RhcnQ6IHRoaXMuYXQgLSAxIH07XG4gICAgfVxuICAgIGlmICh0aGlzLmNoID09PSBcIntcIikge1xuICAgICAgdGhpcy5uZXh0KFwie1wiKTtcbiAgICAgIHRoaXMud2hpdGUoKTtcbiAgICAgIHN0YXJ0ID0gdGhpcy5hdCAtIDE7XG4gICAgICB3aGlsZSAodGhpcy5jaCkge1xuICAgICAgICBpZiAodGhpcy5jaCA9PT0gXCJ9XCIpIHtcbiAgICAgICAgICBpZiAodGhpcy5wYXJzZVR5cGUgPiAwKSB7XG4gICAgICAgICAgICBvYmplY3RbU3VydmV5SlNPTjUucG9zaXRpb25OYW1lXS5lbmQgPSBzdGFydDtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5uZXh0KFwifVwiKTtcbiAgICAgICAgICByZXR1cm4gb2JqZWN0OyAvLyBQb3RlbnRpYWxseSBlbXB0eSBvYmplY3RcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEtleXMgY2FuIGJlIHVucXVvdGVkLiBJZiB0aGV5IGFyZSwgdGhleSBuZWVkIHRvIGJlXG4gICAgICAgIC8vIHZhbGlkIEpTIGlkZW50aWZpZXJzLlxuICAgICAgICBpZiAodGhpcy5jaCA9PT0gJ1wiJyB8fCB0aGlzLmNoID09PSBcIidcIikge1xuICAgICAgICAgIGtleSA9IHRoaXMuc3RyaW5nKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAga2V5ID0gdGhpcy5pZGVudGlmaWVyKCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLndoaXRlKCk7XG4gICAgICAgIGlmICh0aGlzLnBhcnNlVHlwZSA+IDEpIHtcbiAgICAgICAgICBvYmplY3RbU3VydmV5SlNPTjUucG9zaXRpb25OYW1lXVtrZXldID0ge1xuICAgICAgICAgICAgc3RhcnQ6IHN0YXJ0LFxuICAgICAgICAgICAgdmFsdWVTdGFydDogdGhpcy5hdFxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5uZXh0KFwiOlwiKTtcbiAgICAgICAgb2JqZWN0W2tleV0gPSB0aGlzLnZhbHVlKCk7XG4gICAgICAgIGlmICh0aGlzLnBhcnNlVHlwZSA+IDEpIHtcbiAgICAgICAgICBzdGFydCA9IHRoaXMuYXQgLSAxO1xuICAgICAgICAgIG9iamVjdFtTdXJ2ZXlKU09ONS5wb3NpdGlvbk5hbWVdW2tleV0udmFsdWVFbmQgPSBzdGFydDtcbiAgICAgICAgICBvYmplY3RbU3VydmV5SlNPTjUucG9zaXRpb25OYW1lXVtrZXldLmVuZCA9IHN0YXJ0O1xuICAgICAgICB9XG4gICAgICAgIHRoaXMud2hpdGUoKTtcbiAgICAgICAgLy8gSWYgdGhlcmUncyBubyBjb21tYSBhZnRlciB0aGlzIHBhaXIsIHRoaXMgbmVlZHMgdG8gYmVcbiAgICAgICAgLy8gdGhlIGVuZCBvZiB0aGUgb2JqZWN0LlxuICAgICAgICBpZiAodGhpcy5jaCAhPT0gXCIsXCIpIHtcbiAgICAgICAgICBpZiAodGhpcy5wYXJzZVR5cGUgPiAxKSB7XG4gICAgICAgICAgICBvYmplY3RbU3VydmV5SlNPTjUucG9zaXRpb25OYW1lXVtrZXldLnZhbHVlRW5kLS07XG4gICAgICAgICAgICBvYmplY3RbU3VydmV5SlNPTjUucG9zaXRpb25OYW1lXVtrZXldLmVuZC0tO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAodGhpcy5wYXJzZVR5cGUgPiAwKSB7XG4gICAgICAgICAgICBvYmplY3RbU3VydmV5SlNPTjUucG9zaXRpb25OYW1lXS5lbmQgPSB0aGlzLmF0IC0gMTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5uZXh0KFwifVwiKTtcbiAgICAgICAgICByZXR1cm4gb2JqZWN0O1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnBhcnNlVHlwZSA+IDEpIHtcbiAgICAgICAgICBvYmplY3RbU3VydmV5SlNPTjUucG9zaXRpb25OYW1lXVtrZXldLnZhbHVlRW5kLS07XG4gICAgICAgICAgaWYgKCFpc0ZpcnN0UHJvcGVydHkpIHtcbiAgICAgICAgICAgIG9iamVjdFtTdXJ2ZXlKU09ONS5wb3NpdGlvbk5hbWVdW2tleV0uZW5kLS07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMubmV4dChcIixcIik7XG4gICAgICAgIHRoaXMud2hpdGUoKTtcbiAgICAgICAgaXNGaXJzdFByb3BlcnR5ID0gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuZXJyb3IoXCJCYWQgb2JqZWN0XCIpO1xuICB9XG4gIHByaXZhdGUgdmFsdWUoKTogYW55IHtcbiAgICAvLyBQYXJzZSBhIEpTT04gdmFsdWUuIEl0IGNvdWxkIGJlIGFuIG9iamVjdCwgYW4gYXJyYXksIGEgc3RyaW5nLCBhIG51bWJlcixcbiAgICAvLyBvciBhIHdvcmQuXG5cbiAgICB0aGlzLndoaXRlKCk7XG4gICAgc3dpdGNoICh0aGlzLmNoKSB7XG4gICAgICBjYXNlIFwie1wiOlxuICAgICAgICByZXR1cm4gdGhpcy5vYmplY3QoKTtcbiAgICAgIGNhc2UgXCJbXCI6XG4gICAgICAgIHJldHVybiB0aGlzLmFycmF5KCk7XG4gICAgICBjYXNlICdcIic6XG4gICAgICBjYXNlIFwiJ1wiOlxuICAgICAgICByZXR1cm4gdGhpcy5zdHJpbmcoKTtcbiAgICAgIGNhc2UgXCItXCI6XG4gICAgICBjYXNlIFwiK1wiOlxuICAgICAgY2FzZSBcIi5cIjpcbiAgICAgICAgcmV0dXJuIHRoaXMubnVtYmVyKCk7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gdGhpcy5jaCA+PSBcIjBcIiAmJiB0aGlzLmNoIDw9IFwiOVwiID8gdGhpcy5udW1iZXIoKSA6IHRoaXMud29yZCgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcmVwbGFjZXI6IGFueTtcbiAgcHJpdmF0ZSBpbmRlbnRTdHI6IHN0cmluZztcbiAgcHJpdmF0ZSBvYmpTdGFjaztcblxuICBwdWJsaWMgc3RyaW5naWZ5KG9iajogYW55LCByZXBsYWNlcjogYW55ID0gbnVsbCwgc3BhY2U6IGFueSA9IG51bGwpIHtcbiAgICBpZiAoXG4gICAgICByZXBsYWNlciAmJlxuICAgICAgKHR5cGVvZiByZXBsYWNlciAhPT0gXCJmdW5jdGlvblwiICYmICF0aGlzLmlzQXJyYXkocmVwbGFjZXIpKVxuICAgICkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUmVwbGFjZXIgbXVzdCBiZSBhIGZ1bmN0aW9uIG9yIGFuIGFycmF5XCIpO1xuICAgIH1cbiAgICB0aGlzLnJlcGxhY2VyID0gcmVwbGFjZXI7XG4gICAgdGhpcy5pbmRlbnRTdHIgPSB0aGlzLmdldEluZGVudChzcGFjZSk7XG4gICAgdGhpcy5vYmpTdGFjayA9IFtdO1xuICAgIC8vIHNwZWNpYWwgY2FzZS4uLndoZW4gdW5kZWZpbmVkIGlzIHVzZWQgaW5zaWRlIG9mXG4gICAgLy8gYSBjb21wb3VuZCBvYmplY3QvYXJyYXksIHJldHVybiBudWxsLlxuICAgIC8vIGJ1dCB3aGVuIHRvcC1sZXZlbCwgcmV0dXJuIHVuZGVmaW5lZFxuICAgIHZhciB0b3BMZXZlbEhvbGRlciA9IHsgXCJcIjogb2JqIH07XG4gICAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRSZXBsYWNlZFZhbHVlT3JVbmRlZmluZWQodG9wTGV2ZWxIb2xkZXIsIFwiXCIsIHRydWUpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5pbnRlcm5hbFN0cmluZ2lmeSh0b3BMZXZlbEhvbGRlciwgXCJcIiwgdHJ1ZSk7XG4gIH1cbiAgcHJpdmF0ZSBnZXRJbmRlbnQoc3BhY2U6IGFueSk6IHN0cmluZyB7XG4gICAgaWYgKHNwYWNlKSB7XG4gICAgICBpZiAodHlwZW9mIHNwYWNlID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIHJldHVybiBzcGFjZTtcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHNwYWNlID09PSBcIm51bWJlclwiICYmIHNwYWNlID49IDApIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWFrZUluZGVudChcIiBcIiwgc3BhY2UsIHRydWUpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gXCJcIjtcbiAgfVxuICBwcml2YXRlIGdldFJlcGxhY2VkVmFsdWVPclVuZGVmaW5lZChcbiAgICBob2xkZXI6IGFueSxcbiAgICBrZXk6IGFueSxcbiAgICBpc1RvcExldmVsOiBib29sZWFuXG4gICkge1xuICAgIHZhciB2YWx1ZSA9IGhvbGRlcltrZXldO1xuXG4gICAgLy8gUmVwbGFjZSB0aGUgdmFsdWUgd2l0aCBpdHMgdG9KU09OIHZhbHVlIGZpcnN0LCBpZiBwb3NzaWJsZVxuICAgIGlmICh2YWx1ZSAmJiB2YWx1ZS50b0pTT04gJiYgdHlwZW9mIHZhbHVlLnRvSlNPTiA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICB2YWx1ZSA9IHZhbHVlLnRvSlNPTigpO1xuICAgIH1cblxuICAgIC8vIElmIHRoZSB1c2VyLXN1cHBsaWVkIHJlcGxhY2VyIGlmIGEgZnVuY3Rpb24sIGNhbGwgaXQuIElmIGl0J3MgYW4gYXJyYXksIGNoZWNrIG9iamVjdHMnIHN0cmluZyBrZXlzIGZvclxuICAgIC8vIHByZXNlbmNlIGluIHRoZSBhcnJheSAocmVtb3ZpbmcgdGhlIGtleS92YWx1ZSBwYWlyIGZyb20gdGhlIHJlc3VsdGluZyBKU09OIGlmIHRoZSBrZXkgaXMgbWlzc2luZykuXG4gICAgaWYgKHR5cGVvZiB0aGlzLnJlcGxhY2VyID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgIHJldHVybiB0aGlzLnJlcGxhY2VyLmNhbGwoaG9sZGVyLCBrZXksIHZhbHVlKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMucmVwbGFjZXIpIHtcbiAgICAgIGlmIChcbiAgICAgICAgaXNUb3BMZXZlbCB8fFxuICAgICAgICB0aGlzLmlzQXJyYXkoaG9sZGVyKSB8fFxuICAgICAgICB0aGlzLnJlcGxhY2VyLmluZGV4T2Yoa2V5KSA+PSAwXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaXNXb3JkQ2hhcihjaGFyOiBhbnkpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgKGNoYXIgPj0gXCJhXCIgJiYgY2hhciA8PSBcInpcIikgfHxcbiAgICAgIChjaGFyID49IFwiQVwiICYmIGNoYXIgPD0gXCJaXCIpIHx8XG4gICAgICAoY2hhciA+PSBcIjBcIiAmJiBjaGFyIDw9IFwiOVwiKSB8fFxuICAgICAgY2hhciA9PT0gXCJfXCIgfHxcbiAgICAgIGNoYXIgPT09IFwiJFwiXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgaXNXb3JkU3RhcnQoY2hhcjogYW55KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgIChjaGFyID49IFwiYVwiICYmIGNoYXIgPD0gXCJ6XCIpIHx8XG4gICAgICAoY2hhciA+PSBcIkFcIiAmJiBjaGFyIDw9IFwiWlwiKSB8fFxuICAgICAgY2hhciA9PT0gXCJfXCIgfHxcbiAgICAgIGNoYXIgPT09IFwiJFwiXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgaXNXb3JkKGtleTogYW55KTogYm9vbGVhbiB7XG4gICAgaWYgKHR5cGVvZiBrZXkgIT09IFwic3RyaW5nXCIpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLmlzV29yZFN0YXJ0KGtleVswXSkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdmFyIGkgPSAxLFxuICAgICAgbGVuZ3RoID0ga2V5Lmxlbmd0aDtcbiAgICB3aGlsZSAoaSA8IGxlbmd0aCkge1xuICAgICAgaWYgKCF0aGlzLmlzV29yZENoYXIoa2V5W2ldKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICBpKys7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIC8vIHBvbHlmaWxsc1xuICBwcml2YXRlIGlzQXJyYXkob2JqOiBhbnkpOiBib29sZWFuIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheSkge1xuICAgICAgcmV0dXJuIEFycmF5LmlzQXJyYXkob2JqKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvYmopID09PSBcIltvYmplY3QgQXJyYXldXCI7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBpc0RhdGUob2JqOiBhbnkpOiBib29sZWFuIHtcbiAgICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG9iaikgPT09IFwiW29iamVjdCBEYXRlXVwiO1xuICB9XG5cbiAgcHJpdmF0ZSBpc05hTih2YWw6IGFueSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0eXBlb2YgdmFsID09PSBcIm51bWJlclwiICYmIHZhbCAhPT0gdmFsO1xuICB9XG5cbiAgcHJpdmF0ZSBjaGVja0ZvckNpcmN1bGFyKG9iajogYW55KSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLm9ialN0YWNrLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAodGhpcy5vYmpTdGFja1tpXSA9PT0gb2JqKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDb252ZXJ0aW5nIGNpcmN1bGFyIHN0cnVjdHVyZSB0byBKU09OXCIpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBwcml2YXRlIG1ha2VJbmRlbnQoc3RyOiBzdHJpbmcsIG51bTogbnVtYmVyLCBub05ld0xpbmU6IGJvb2xlYW4gPSBmYWxzZSkge1xuICAgIGlmICghc3RyKSB7XG4gICAgICByZXR1cm4gXCJcIjtcbiAgICB9XG4gICAgLy8gaW5kZW50YXRpb24gbm8gbW9yZSB0aGFuIDEwIGNoYXJzXG4gICAgaWYgKHN0ci5sZW5ndGggPiAxMCkge1xuICAgICAgc3RyID0gc3RyLnN1YnN0cmluZygwLCAxMCk7XG4gICAgfVxuXG4gICAgdmFyIGluZGVudCA9IG5vTmV3TGluZSA/IFwiXCIgOiBcIlxcblwiO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtOyBpKyspIHtcbiAgICAgIGluZGVudCArPSBzdHI7XG4gICAgfVxuXG4gICAgcmV0dXJuIGluZGVudDtcbiAgfVxuXG4gIC8vIENvcGllZCBmcm9tIENyb2tmb3JkJ3MgaW1wbGVtZW50YXRpb24gb2YgSlNPTlxuICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2RvdWdsYXNjcm9ja2ZvcmQvSlNPTi1qcy9ibG9iL2UzOWRiNGI3ZTYyNDlmMDRhMTk1ZTdkZDA4NDBlNjEwY2M5ZTk0MWUvanNvbjIuanMjTDE5NVxuICAvLyBCZWdpblxuICBwcml2YXRlIHN0YXRpYyBjeCA9IC9bXFx1MDAwMFxcdTAwYWRcXHUwNjAwLVxcdTA2MDRcXHUwNzBmXFx1MTdiNFxcdTE3YjVcXHUyMDBjLVxcdTIwMGZcXHUyMDI4LVxcdTIwMmZcXHUyMDYwLVxcdTIwNmZcXHVmZWZmXFx1ZmZmMC1cXHVmZmZmXS9nO1xuICBwcml2YXRlIHN0YXRpYyBlc2NhcGFibGUgPSAvW1xcXFxcXFwiXFx4MDAtXFx4MWZcXHg3Zi1cXHg5ZlxcdTAwYWRcXHUwNjAwLVxcdTA2MDRcXHUwNzBmXFx1MTdiNFxcdTE3YjVcXHUyMDBjLVxcdTIwMGZcXHUyMDI4LVxcdTIwMmZcXHUyMDYwLVxcdTIwNmZcXHVmZWZmXFx1ZmZmMC1cXHVmZmZmXS9nO1xuICBwcml2YXRlIHN0YXRpYyBtZXRhID0ge1xuICAgIC8vIHRhYmxlIG9mIGNoYXJhY3RlciBzdWJzdGl0dXRpb25zXG4gICAgXCJcXGJcIjogXCJcXFxcYlwiLFxuICAgIFwiXFx0XCI6IFwiXFxcXHRcIixcbiAgICBcIlxcblwiOiBcIlxcXFxuXCIsXG4gICAgXCJcXGZcIjogXCJcXFxcZlwiLFxuICAgIFwiXFxyXCI6IFwiXFxcXHJcIixcbiAgICAnXCInOiAnXFxcXFwiJyxcbiAgICBcIlxcXFxcIjogXCJcXFxcXFxcXFwiXG4gIH07XG4gIHByaXZhdGUgZXNjYXBlU3RyaW5nKHN0cjogc3RyaW5nKSB7XG4gICAgLy8gSWYgdGhlIHN0cmluZyBjb250YWlucyBubyBjb250cm9sIGNoYXJhY3RlcnMsIG5vIHF1b3RlIGNoYXJhY3RlcnMsIGFuZCBub1xuICAgIC8vIGJhY2tzbGFzaCBjaGFyYWN0ZXJzLCB0aGVuIHdlIGNhbiBzYWZlbHkgc2xhcCBzb21lIHF1b3RlcyBhcm91bmQgaXQuXG4gICAgLy8gT3RoZXJ3aXNlIHdlIG11c3QgYWxzbyByZXBsYWNlIHRoZSBvZmZlbmRpbmcgY2hhcmFjdGVycyB3aXRoIHNhZmUgZXNjYXBlXG4gICAgLy8gc2VxdWVuY2VzLlxuICAgIFN1cnZleUpTT041LmVzY2FwYWJsZS5sYXN0SW5kZXggPSAwO1xuICAgIHJldHVybiBTdXJ2ZXlKU09ONS5lc2NhcGFibGUudGVzdChzdHIpXG4gICAgICA/ICdcIicgK1xuICAgICAgICAgIHN0ci5yZXBsYWNlKFN1cnZleUpTT041LmVzY2FwYWJsZSwgZnVuY3Rpb24oYSkge1xuICAgICAgICAgICAgdmFyIGMgPSBTdXJ2ZXlKU09ONS5tZXRhW2FdO1xuICAgICAgICAgICAgcmV0dXJuIHR5cGVvZiBjID09PSBcInN0cmluZ1wiXG4gICAgICAgICAgICAgID8gY1xuICAgICAgICAgICAgICA6IFwiXFxcXHVcIiArIChcIjAwMDBcIiArIGEuY2hhckNvZGVBdCgwKS50b1N0cmluZygxNikpLnNsaWNlKC00KTtcbiAgICAgICAgICB9KSArXG4gICAgICAgICAgJ1wiJ1xuICAgICAgOiAnXCInICsgc3RyICsgJ1wiJztcbiAgfVxuICAvLyBFbmRcblxuICBwcml2YXRlIGludGVybmFsU3RyaW5naWZ5KGhvbGRlcjogYW55LCBrZXk6IGFueSwgaXNUb3BMZXZlbDogYm9vbGVhbikge1xuICAgIHZhciBidWZmZXIsIHJlcztcblxuICAgIC8vIFJlcGxhY2UgdGhlIHZhbHVlLCBpZiBuZWNlc3NhcnlcbiAgICB2YXIgb2JqX3BhcnQgPSB0aGlzLmdldFJlcGxhY2VkVmFsdWVPclVuZGVmaW5lZChob2xkZXIsIGtleSwgaXNUb3BMZXZlbCk7XG5cbiAgICBpZiAob2JqX3BhcnQgJiYgIXRoaXMuaXNEYXRlKG9ial9wYXJ0KSkge1xuICAgICAgLy8gdW5ib3ggb2JqZWN0c1xuICAgICAgLy8gZG9uJ3QgdW5ib3ggZGF0ZXMsIHNpbmNlIHdpbGwgdHVybiBpdCBpbnRvIG51bWJlclxuICAgICAgb2JqX3BhcnQgPSBvYmpfcGFydC52YWx1ZU9mKCk7XG4gICAgfVxuICAgIHN3aXRjaCAodHlwZW9mIG9ial9wYXJ0KSB7XG4gICAgICBjYXNlIFwiYm9vbGVhblwiOlxuICAgICAgICByZXR1cm4gb2JqX3BhcnQudG9TdHJpbmcoKTtcblxuICAgICAgY2FzZSBcIm51bWJlclwiOlxuICAgICAgICBpZiAoaXNOYU4ob2JqX3BhcnQpIHx8ICFpc0Zpbml0ZShvYmpfcGFydCkpIHtcbiAgICAgICAgICByZXR1cm4gXCJudWxsXCI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG9ial9wYXJ0LnRvU3RyaW5nKCk7XG5cbiAgICAgIGNhc2UgXCJzdHJpbmdcIjpcbiAgICAgICAgcmV0dXJuIHRoaXMuZXNjYXBlU3RyaW5nKG9ial9wYXJ0LnRvU3RyaW5nKCkpO1xuXG4gICAgICBjYXNlIFwib2JqZWN0XCI6XG4gICAgICAgIGlmIChvYmpfcGFydCA9PT0gbnVsbCkge1xuICAgICAgICAgIHJldHVybiBcIm51bGxcIjtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmlzQXJyYXkob2JqX3BhcnQpKSB7XG4gICAgICAgICAgdGhpcy5jaGVja0ZvckNpcmN1bGFyKG9ial9wYXJ0KTtcbiAgICAgICAgICBidWZmZXIgPSBcIltcIjtcbiAgICAgICAgICB0aGlzLm9ialN0YWNrLnB1c2gob2JqX3BhcnQpO1xuXG4gICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBvYmpfcGFydC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgcmVzID0gdGhpcy5pbnRlcm5hbFN0cmluZ2lmeShvYmpfcGFydCwgaSwgZmFsc2UpO1xuICAgICAgICAgICAgYnVmZmVyICs9IHRoaXMubWFrZUluZGVudCh0aGlzLmluZGVudFN0ciwgdGhpcy5vYmpTdGFjay5sZW5ndGgpO1xuICAgICAgICAgICAgaWYgKHJlcyA9PT0gbnVsbCB8fCB0eXBlb2YgcmVzID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgICAgIGJ1ZmZlciArPSBcIm51bGxcIjtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGJ1ZmZlciArPSByZXM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaSA8IG9ial9wYXJ0Lmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgICAgYnVmZmVyICs9IFwiLFwiO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmluZGVudFN0cikge1xuICAgICAgICAgICAgICBidWZmZXIgKz0gXCJcXG5cIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5vYmpTdGFjay5wb3AoKTtcbiAgICAgICAgICBidWZmZXIgKz1cbiAgICAgICAgICAgIHRoaXMubWFrZUluZGVudCh0aGlzLmluZGVudFN0ciwgdGhpcy5vYmpTdGFjay5sZW5ndGgsIHRydWUpICsgXCJdXCI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5jaGVja0ZvckNpcmN1bGFyKG9ial9wYXJ0KTtcbiAgICAgICAgICBidWZmZXIgPSBcIntcIjtcbiAgICAgICAgICB2YXIgbm9uRW1wdHkgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLm9ialN0YWNrLnB1c2gob2JqX3BhcnQpO1xuICAgICAgICAgIGZvciAodmFyIHByb3AgaW4gb2JqX3BhcnQpIHtcbiAgICAgICAgICAgIGlmIChvYmpfcGFydC5oYXNPd25Qcm9wZXJ0eShwcm9wKSkge1xuICAgICAgICAgICAgICB2YXIgdmFsdWUgPSB0aGlzLmludGVybmFsU3RyaW5naWZ5KG9ial9wYXJ0LCBwcm9wLCBmYWxzZSk7XG4gICAgICAgICAgICAgIGlzVG9wTGV2ZWwgPSBmYWxzZTtcbiAgICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gXCJ1bmRlZmluZWRcIiAmJiB2YWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGJ1ZmZlciArPSB0aGlzLm1ha2VJbmRlbnQodGhpcy5pbmRlbnRTdHIsIHRoaXMub2JqU3RhY2subGVuZ3RoKTtcbiAgICAgICAgICAgICAgICBub25FbXB0eSA9IHRydWU7XG4gICAgICAgICAgICAgICAgdmFyIHByb3BLZXkgPSB0aGlzLmlzV29yZChwcm9wKVxuICAgICAgICAgICAgICAgICAgPyBwcm9wXG4gICAgICAgICAgICAgICAgICA6IHRoaXMuZXNjYXBlU3RyaW5nKHByb3ApO1xuICAgICAgICAgICAgICAgIGJ1ZmZlciArPVxuICAgICAgICAgICAgICAgICAgcHJvcEtleSArIFwiOlwiICsgKHRoaXMuaW5kZW50U3RyID8gXCIgXCIgOiBcIlwiKSArIHZhbHVlICsgXCIsXCI7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5vYmpTdGFjay5wb3AoKTtcbiAgICAgICAgICBpZiAobm9uRW1wdHkpIHtcbiAgICAgICAgICAgIGJ1ZmZlciA9XG4gICAgICAgICAgICAgIGJ1ZmZlci5zdWJzdHJpbmcoMCwgYnVmZmVyLmxlbmd0aCAtIDEpICtcbiAgICAgICAgICAgICAgdGhpcy5tYWtlSW5kZW50KHRoaXMuaW5kZW50U3RyLCB0aGlzLm9ialN0YWNrLmxlbmd0aCkgK1xuICAgICAgICAgICAgICBcIn1cIjtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYnVmZmVyID0gXCJ7fVwiO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYnVmZmVyO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgLy8gZnVuY3Rpb25zIGFuZCB1bmRlZmluZWQgc2hvdWxkIGJlIGlnbm9yZWRcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cbn1cblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9qc29uNS50cyIsImltcG9ydCAqIGFzIGtvIGZyb20gXCJrbm9ja291dFwiO1xuaW1wb3J0IHtcbiAgcmVnaXN0ZXJBZG9ybmVyLFxuICBTdXJ2ZXlGb3JEZXNpZ25lcixcbiAgSVN1cnZleU9iamVjdE1lbnVJdGVtXG59IGZyb20gXCIuLi9zdXJ2ZXlqc09iamVjdHNcIjtcbmltcG9ydCB7IGVkaXRvckxvY2FsaXphdGlvbiB9IGZyb20gXCIuLi9lZGl0b3JMb2NhbGl6YXRpb25cIjtcbmltcG9ydCBcIi4vcXVlc3Rpb24tYWN0aW9ucy5zY3NzXCI7XG52YXIgdGVtcGxhdGVIdG1sID0gcmVxdWlyZShcImh0bWwtbG9hZGVyP2ludGVycG9sYXRlIXZhbC1sb2FkZXIhLi9xdWVzdGlvbi1hY3Rpb25zLmh0bWxcIik7XG5pbXBvcnQgeyBRdWVzdGlvbkNvbnZlcnRlciB9IGZyb20gXCIuLi9xdWVzdGlvbmNvbnZlcnRlclwiO1xuXG5leHBvcnQgY2xhc3MgUXVlc3Rpb25BY3Rpb25zQWRvcm5lciB7XG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBxdWVzdGlvbiwgcHJpdmF0ZSBlZGl0b3IpIHtcbiAgICB2YXIgc3VydmV5Rm9yRGVzaWduZXI6IFN1cnZleUZvckRlc2lnbmVyID0gZWRpdG9yLnN1cnZleTtcbiAgICB0aGlzLmFjdGlvbnMoc3VydmV5Rm9yRGVzaWduZXIuZ2V0TWVudUl0ZW1zKHF1ZXN0aW9uKSk7XG4gIH1cblxuICBwdWJsaWMgYWN0aW9ucyA9IGtvLm9ic2VydmFibGVBcnJheTxJU3VydmV5T2JqZWN0TWVudUl0ZW0+KCk7XG5cbiAgcHVibGljIGdldFN0eWxlKG1vZGVsOiBJU3VydmV5T2JqZWN0TWVudUl0ZW0pIHtcbiAgICBpZiAoISFtb2RlbC5pY29uKSB7XG4gICAgICByZXR1cm4ga28udW53cmFwKDxhbnk+bW9kZWwuaWNvbik7XG4gICAgfVxuICAgIHJldHVybiBcImljb24tYWN0aW9uXCIgKyBtb2RlbC5uYW1lO1xuICB9XG5cbiAgcHVibGljIGxvY2FsaXplKGVudHJ5U3RyaW5nKSB7XG4gICAgcmV0dXJuIGVkaXRvckxvY2FsaXphdGlvbi5nZXRTdHJpbmcoZW50cnlTdHJpbmcpO1xuICB9XG59XG5cbmtvLmNvbXBvbmVudHMucmVnaXN0ZXIoXCJxdWVzdGlvbi1hY3Rpb25zXCIsIHtcbiAgdmlld01vZGVsOiB7XG4gICAgY3JlYXRlVmlld01vZGVsOiAocGFyYW1zLCBjb21wb25lbnRJbmZvKSA9PiB7XG4gICAgICB2YXIgbW9kZWwgPSBuZXcgUXVlc3Rpb25BY3Rpb25zQWRvcm5lcihwYXJhbXMucXVlc3Rpb24sIHBhcmFtcy5lZGl0b3IpO1xuICAgICAgcmV0dXJuIG1vZGVsO1xuICAgIH1cbiAgfSxcbiAgdGVtcGxhdGU6IHRlbXBsYXRlSHRtbFxufSk7XG5cbmV4cG9ydCB2YXIgcXVlc3Rpb25BY3Rpb25zQWRvcm5lciA9IHtcbiAgZ2V0TWFya2VyQ2xhc3M6IG1vZGVsID0+IHtcbiAgICByZXR1cm4gIW1vZGVsLmlzUGFuZWwgPyBcInF1ZXN0aW9uX2FjdGlvbnNcIiA6IFwiXCI7XG4gIH0sXG4gIGdldEVsZW1lbnROYW1lOiBtb2RlbCA9PiBcIm1haW5Sb290XCIsXG4gIGFmdGVyUmVuZGVyOiAoZWxlbWVudHM6IEhUTUxFbGVtZW50W10sIG1vZGVsLCBlZGl0b3IpID0+IHtcbiAgICB2YXIgZGVjb3JhdGlvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgZGVjb3JhdGlvbi5jbGFzc05hbWUgPSBcInN2ZGEtcXVlc3Rpb24tYWN0aW9uc1wiO1xuICAgIGRlY29yYXRpb24uaW5uZXJIVE1MID1cbiAgICAgIFwiPHF1ZXN0aW9uLWFjdGlvbnMgcGFyYW1zPSdxdWVzdGlvbjogbW9kZWwsIGVkaXRvcjogZWRpdG9yJz48L3F1ZXN0aW9uLWFjdGlvbnM+XCI7XG4gICAgZWxlbWVudHNbMF0uYXBwZW5kQ2hpbGQoZGVjb3JhdGlvbik7XG4gICAga28uYXBwbHlCaW5kaW5ncyh7IG1vZGVsOiBtb2RlbCwgZWRpdG9yOiBlZGl0b3IgfSwgZGVjb3JhdGlvbik7XG4gICAga28udGFza3MucnVuRWFybHkoKTtcbiAgICBlZGl0b3Iub25BZG9ybmVyUmVuZGVyZWRDYWxsYmFjayhtb2RlbCwgXCJxdWVzdGlvbi1hY3Rpb25zXCIsIGRlY29yYXRpb24pO1xuICB9XG59O1xuXG5yZWdpc3RlckFkb3JuZXIoXCJxdWVzdGlvbi1hY3Rpb25zXCIsIHF1ZXN0aW9uQWN0aW9uc0Fkb3JuZXIpO1xuXG5leHBvcnQgdmFyIHBhbmVsQWN0aW9uc0Fkb3JuZXIgPSB7XG4gIGdldE1hcmtlckNsYXNzOiBtb2RlbCA9PiB7XG4gICAgcmV0dXJuICEhbW9kZWwuaXNQYW5lbCAmJiAhIW1vZGVsLnBhcmVudCAmJiBtb2RlbC5nZXRUeXBlKCkgIT09IFwiZmxvd3BhbmVsXCJcbiAgICAgID8gXCJwYW5lbF9hY3Rpb25zXCJcbiAgICAgIDogXCJcIjtcbiAgfSxcbiAgZ2V0RWxlbWVudE5hbWU6IG1vZGVsID0+IFwiY29udGFpbmVyXCIsXG4gIGFmdGVyUmVuZGVyOiBxdWVzdGlvbkFjdGlvbnNBZG9ybmVyLmFmdGVyUmVuZGVyXG59O1xuXG5yZWdpc3RlckFkb3JuZXIoXCJwYW5lbC1hY3Rpb25zXCIsIHBhbmVsQWN0aW9uc0Fkb3JuZXIpO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2Fkb3JuZXJzL3F1ZXN0aW9uLWFjdGlvbnMudHMiLCJpbXBvcnQgKiBhcyBrbyBmcm9tIFwia25vY2tvdXRcIjtcbmltcG9ydCAqIGFzIFN1cnZleSBmcm9tIFwic3VydmV5LWtub2Nrb3V0XCI7XG5pbXBvcnQgeyBTdXJ2ZXlIZWxwZXIgfSBmcm9tIFwiLi9zdXJ2ZXlIZWxwZXJcIjtcblxuaWYgKCEha28ub3B0aW9ucykge1xuICBrby5vcHRpb25zLnVzZU9ubHlOYXRpdmVFdmVudHMgPSB0cnVlO1xufVxuXG5leHBvcnQgY2xhc3MgRHJhZ0Ryb3BUYXJnZXRFbGVtZW50IHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIHBhZ2U6IFN1cnZleS5QYWdlLFxuICAgIHB1YmxpYyB0YXJnZXQ6IGFueSxcbiAgICBwdWJsaWMgc291cmNlOiBhbnksXG4gICAgbmVzdGVkUGFuZWxEZXB0aDogbnVtYmVyID0gLTFcbiAgKSB7XG4gICAgcGFnZS5kcmFnRHJvcFN0YXJ0KHNvdXJjZSwgdGFyZ2V0LCBuZXN0ZWRQYW5lbERlcHRoKTtcbiAgfVxuICBwdWJsaWMgbW92ZVRvKFxuICAgIGRlc3RpbmF0aW9uOiBhbnksXG4gICAgaXNCb3R0b206IGJvb2xlYW4sXG4gICAgaXNFZGdlOiBib29sZWFuID0gZmFsc2VcbiAgKTogYm9vbGVhbiB7XG4gICAgLy9jb25zb2xlLmxvZyghIWRlc3RpbmF0aW9uID8gZGVzdGluYXRpb24ubmFtZSA6IFwibnVsbFwiKTtcbiAgICByZXR1cm4gdGhpcy5wYWdlLmRyYWdEcm9wTW92ZVRvKGRlc3RpbmF0aW9uLCBpc0JvdHRvbSwgaXNFZGdlKTtcbiAgfVxuICBwdWJsaWMgZG9Ecm9wKCk6IGFueSB7XG4gICAgdGhpcy5jbGVhckNvcmUoKTtcbiAgICByZXR1cm4gdGhpcy5wYWdlLmRyYWdEcm9wRmluaXNoKCk7XG4gIH1cbiAgcHVibGljIGNsZWFyKCkge1xuICAgIHRoaXMuY2xlYXJDb3JlKCk7XG4gICAgdGhpcy5wYWdlLmRyYWdEcm9wRmluaXNoKHRydWUpO1xuICB9XG4gIHByaXZhdGUgY2xlYXJDb3JlKCkge1xuICAgIGlmICghIXRoaXMudGFyZ2V0KSB7XG4gICAgICB0aGlzLnRhcmdldFtcImtvSXNEcmFnZ2luZ1wiXShmYWxzZSk7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBEcmFnRHJvcEhlbHBlciB7XG4gIHB1YmxpYyBzdGF0aWMgZWRnZUhlaWdodDogbnVtYmVyID0gMjA7XG4gIHB1YmxpYyBzdGF0aWMgbmVzdGVkUGFuZWxEZXB0aDogbnVtYmVyID0gLTE7XG4gIHN0YXRpYyBkYXRhU3RhcnQ6IHN0cmluZyA9IFwie2VsZW1lbnQ6XCI7XG4gIHN0YXRpYyBkcmFnRGF0YTogYW55ID0geyB0ZXh0OiBcIlwiLCBqc29uOiBudWxsIH07XG4gIHN0YXRpYyBwcmV2RXZlbnQgPSB7IGVsZW1lbnQ6IG51bGwsIHg6IC0xLCB5OiAtMSB9O1xuICBwcml2YXRlIG9uTW9kaWZpZWRDYWxsYmFjazogKG9wdGlvbnM/OiBhbnkpID0+IGFueTtcbiAgcHJpdmF0ZSBzY3JvbGxhYmxlRWxlbWVudDogSFRNTEVsZW1lbnQgPSBudWxsO1xuICBwcml2YXRlIGRkVGFyZ2V0OiBEcmFnRHJvcFRhcmdldEVsZW1lbnQgPSBudWxsO1xuICBwcml2YXRlIHByZXZDb29yZGluYXRlczogeyB4OiBudW1iZXI7IHk6IG51bWJlciB9O1xuICBzdGF0aWMgY291bnRlcjogbnVtYmVyID0gMTtcbiAgcHJpdmF0ZSBpZDogbnVtYmVyID0gRHJhZ0Ryb3BIZWxwZXIuY291bnRlcisrO1xuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgZGF0YTogU3VydmV5LklTdXJ2ZXksXG4gICAgb25Nb2RpZmllZENhbGxiYWNrOiAob3B0aW9ucz86IGFueSkgPT4gYW55LFxuICAgIHBhcmVudDogSFRNTEVsZW1lbnQgPSBudWxsXG4gICkge1xuICAgIHRoaXMub25Nb2RpZmllZENhbGxiYWNrID0gb25Nb2RpZmllZENhbGxiYWNrO1xuICAgIHRoaXMuc2Nyb2xsYWJsZUVsZW1lbnQgPVxuICAgICAgcGFyZW50ICYmIDxIVE1MRWxlbWVudD5wYXJlbnQucXVlcnlTZWxlY3RvcihcIiNzY3JvbGxhYmxlRGl2XCIpO1xuICAgIHRoaXMucHJldkNvb3JkaW5hdGVzID0geyB4OiAtMSwgeTogLTEgfTtcbiAgfVxuICBwdWJsaWMgYXR0YWNoVG9FbGVtZW50KGRvbUVsZW1lbnQsIHN1cnZleUVsZW1lbnQpIHtcbiAgICB2YXIgaXNGbG93UGFuZWwgPVxuICAgICAgc3VydmV5RWxlbWVudC5pc1BhbmVsICYmXG4gICAgICB0eXBlb2Ygc3VydmV5RWxlbWVudC5nZXRDaGlsZHJlbkxheW91dFR5cGUgPT09IFwiZnVuY3Rpb25cIiAmJlxuICAgICAgc3VydmV5RWxlbWVudC5nZXRDaGlsZHJlbkxheW91dFR5cGUoKSA9PT0gXCJmbG93XCI7XG4gICAgdmFyIGlzRmxvd1BhbmVsSW5DaHJvbWUgPSBpc0Zsb3dQYW5lbCAmJiAhIXdpbmRvd1tcImNocm9tZVwiXTtcblxuICAgIGRvbUVsZW1lbnQuc3R5bGUub3BhY2l0eSA9IHN1cnZleUVsZW1lbnQua29Jc0RyYWdnaW5nKCkgPyAwLjQgOiAxO1xuICAgIGRvbUVsZW1lbnQuZHJhZ2dhYmxlID1cbiAgICAgIHN1cnZleUVsZW1lbnQuYWxsb3dpbmdPcHRpb25zLmFsbG93RHJhZ2dpbmcgJiYgIWlzRmxvd1BhbmVsO1xuICAgIGlmIChpc0Zsb3dQYW5lbEluQ2hyb21lKSB7XG4gICAgICBkb21FbGVtZW50Lm9ucGFzdGUgPSBmdW5jdGlvbiBkb1Bhc3RlKGUsIGVsKSB7XG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgdmFyIGNsaXBEYXRhID0gd2luZG93W1wiY2xpcGJvYXJkRGF0YVwiXTtcbiAgICAgICAgaWYgKCEhY2xpcERhdGEpIHtcbiAgICAgICAgICB2YXIgY29udGVudCA9IGNsaXBEYXRhLmdldERhdGEoXCJ0ZXh0XCIpO1xuICAgICAgICAgIGlmICh3aW5kb3cuZ2V0U2VsZWN0aW9uKSB7XG4gICAgICAgICAgICB2YXIgc2VsT2JqID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xuICAgICAgICAgICAgdmFyIHNlbFJhbmdlID0gc2VsT2JqLmdldFJhbmdlQXQoMCk7XG4gICAgICAgICAgICBzZWxSYW5nZS5kZWxldGVDb250ZW50cygpO1xuICAgICAgICAgICAgc2VsUmFuZ2UuaW5zZXJ0Tm9kZShkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShjb250ZW50KSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKChlLm9yaWdpbmFsRXZlbnQgfHwgZSkuY2xpcGJvYXJkRGF0YSkge1xuICAgICAgICAgIGNvbnRlbnQgPSAoZS5vcmlnaW5hbEV2ZW50IHx8IGUpLmNsaXBib2FyZERhdGEuZ2V0RGF0YShcInRleHQvcGxhaW5cIik7XG4gICAgICAgICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQoXCJpbnNlcnRUZXh0XCIsIGZhbHNlLCBjb250ZW50KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH07XG4gICAgfVxuICAgIGRvbUVsZW1lbnQub25kcmFnb3ZlciA9IGZ1bmN0aW9uKGUpIHtcbiAgICAgIGlmICghc3VydmV5RWxlbWVudC5hbGxvd2luZ09wdGlvbnMuYWxsb3dEcmFnZ2luZykgcmV0dXJuIGZhbHNlO1xuICAgICAgaWYgKGlzRmxvd1BhbmVsKVxuICAgICAgICByZXR1cm4gc3VydmV5RWxlbWVudFxuICAgICAgICAgIC5kcmFnRHJvcEhlbHBlcigpXG4gICAgICAgICAgLmRvRHJhZ0Ryb3BPdmVyRmxvdyhlLCBzdXJ2ZXlFbGVtZW50KTtcbiAgICAgIGlmICghZVtcIm1hcmtFdmVudFwiXSkge1xuICAgICAgICBlW1wibWFya0V2ZW50XCJdID0gdHJ1ZTtcbiAgICAgICAgc3VydmV5RWxlbWVudC5kcmFnRHJvcEhlbHBlcigpLmRvRHJhZ0Ryb3BPdmVyKGUsIHN1cnZleUVsZW1lbnQsIHRydWUpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfTtcbiAgICBkb21FbGVtZW50Lm9uZHJvcCA9IGZ1bmN0aW9uKGUpIHtcbiAgICAgIHZhciBoZWxwZXIgPSBzdXJ2ZXlFbGVtZW50LmRyYWdEcm9wSGVscGVyKCk7XG4gICAgICB2YXIgcHJldmVudERlZmF1bHQgPSAhKFxuICAgICAgICBpc0Zsb3dQYW5lbCAmJlxuICAgICAgICAhIWhlbHBlci5kZFRhcmdldCAmJlxuICAgICAgICAhIWhlbHBlci5kZFRhcmdldC5zb3VyY2UgJiZcbiAgICAgICAgaGVscGVyLmRkVGFyZ2V0LnNvdXJjZS5wYXJlbnQgPT0gc3VydmV5RWxlbWVudFxuICAgICAgKTtcbiAgICAgIC8vRml4IHRoZSBidWcgZm9yIGNocm9tZSBpbiBjb250ZW50ZWRpdGFibGVcbiAgICAgIGlmIChcbiAgICAgICAgaXNGbG93UGFuZWxJbkNocm9tZSAmJlxuICAgICAgICAoIWhlbHBlci5kZFRhcmdldCB8fFxuICAgICAgICAgICFoZWxwZXIuZGRUYXJnZXQuZGVzdGluYXRpb24gfHxcbiAgICAgICAgICBoZWxwZXIuZGRUYXJnZXQuZGVzdGluYXRpb24uaXNMYXlvdXRUeXBlU3VwcG9ydGVkKFwiZmxvd1wiKSlcbiAgICAgICkge1xuICAgICAgICB2YXIgY29udGVudCA9IGUuZGF0YVRyYW5zZmVyLmdldERhdGEoXCJ0ZXh0XCIpO1xuICAgICAgICB2YXIgZHJvcFJhbmdlID0gbnVsbDtcbiAgICAgICAgaWYgKCEhZG9jdW1lbnQuY2FyZXRSYW5nZUZyb21Qb2ludCkge1xuICAgICAgICAgIGRyb3BSYW5nZSA9IGRvY3VtZW50LmNhcmV0UmFuZ2VGcm9tUG9pbnQoZS5jbGllbnRYLCBlLmNsaWVudFkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmICghIWRvY3VtZW50LmNhcmV0UG9zaXRpb25Gcm9tUG9pbnQpIHtcbiAgICAgICAgICAgIGRyb3BSYW5nZSA9IGRvY3VtZW50LmNhcmV0UG9zaXRpb25Gcm9tUG9pbnQoZS5jbGllbnRYLCBlLmNsaWVudFkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoISFkcm9wUmFuZ2UpIHtcbiAgICAgICAgICBwcmV2ZW50RGVmYXVsdCA9IHRydWU7XG4gICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIGlmIChzdXJ2ZXlFbGVtZW50W1wiaXNEcmFnU3RhcnRlZFwiXSkge1xuICAgICAgICAgICAgdmFyIHNlbE9iaiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcbiAgICAgICAgICAgIGlmICghIXNlbE9iaiAmJiBzZWxPYmoucmFuZ2VDb3VudCA+IDApIHtcbiAgICAgICAgICAgICAgdmFyIHNlbFJhbmdlID0gc2VsT2JqLmdldFJhbmdlQXQoMCk7XG4gICAgICAgICAgICAgIGlmICghIXNlbFJhbmdlKSB7XG4gICAgICAgICAgICAgICAgc2VsUmFuZ2UuZGVsZXRlQ29udGVudHMoKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBkcm9wUmFuZ2UuaW5zZXJ0Tm9kZShkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShjb250ZW50KSk7XG4gICAgICAgICAgbGV0IHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcbiAgICAgICAgICBpZiAoISFzZWxlY3Rpb24pIHtcbiAgICAgICAgICAgIHNlbGVjdGlvbi5yZW1vdmVBbGxSYW5nZXMoKTtcbiAgICAgICAgICAgIHNlbGVjdGlvbi5hZGRSYW5nZShkcm9wUmFuZ2UpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKCFlW1wibWFya0V2ZW50XCJdKSB7XG4gICAgICAgIGVbXCJtYXJrRXZlbnRcIl0gPSB0cnVlO1xuICAgICAgICBoZWxwZXIuZG9Ecm9wKGUsIHByZXZlbnREZWZhdWx0KTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGlmICghaXNGbG93UGFuZWwpIHtcbiAgICAgIGRvbUVsZW1lbnQub25kcmFnc3RhcnQgPSBmdW5jdGlvbihlOiBEcmFnRXZlbnQpIHtcbiAgICAgICAgdmFyIHRhcmdldDogYW55ID0gZS50YXJnZXQgfHwgZS5zcmNFbGVtZW50O1xuICAgICAgICBpZiAoXG4gICAgICAgICAgISF0YXJnZXQgJiZcbiAgICAgICAgICAhIXRhcmdldC5jb250YWlucyAmJlxuICAgICAgICAgIHRhcmdldC5jb250YWlucyhkb2N1bWVudC5hY3RpdmVFbGVtZW50KVxuICAgICAgICApIHtcbiAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmICghc3VydmV5RWxlbWVudC5hbGxvd2luZ09wdGlvbnMuYWxsb3dEcmFnZ2luZykgcmV0dXJuIGZhbHNlO1xuICAgICAgICBpZiAoIWVbXCJtYXJrRXZlbnRcIl0pIHtcbiAgICAgICAgICBlW1wibWFya0V2ZW50XCJdID0gdHJ1ZTtcbiAgICAgICAgICBzdXJ2ZXlFbGVtZW50LmRyYWdEcm9wSGVscGVyKCkuc3RhcnREcmFnUXVlc3Rpb24oZSwgc3VydmV5RWxlbWVudCk7XG4gICAgICAgIH1cbiAgICAgICAgZS5jYW5jZWxCdWJibGUgPSB0cnVlO1xuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgZG9tRWxlbWVudC5vbmRyYWdzdGFydCA9IGZ1bmN0aW9uKGU6IERyYWdFdmVudCkge1xuICAgICAgICBzdXJ2ZXlFbGVtZW50LmlzRHJhZ1N0YXJ0ZWQgPSB0cnVlO1xuICAgICAgICBpZiAoIWVbXCJtYXJrRXZlbnRcIl0pIHtcbiAgICAgICAgICBlW1wibWFya0V2ZW50XCJdID0gdHJ1ZTtcbiAgICAgICAgICBpZiAoIXN1cnZleUVsZW1lbnQuZHJhZ0Ryb3BIZWxwZXIoKS5nZXREYXRhKGUpLnRleHQpIHtcbiAgICAgICAgICAgIHN1cnZleUVsZW1lbnQuZHJhZ0Ryb3BIZWxwZXIoKS5zdGFydERyYWdRdWVzdGlvbihlLCBzdXJ2ZXlFbGVtZW50KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfVxuICAgIGRvbUVsZW1lbnQub25kcmFnZW5kID0gZnVuY3Rpb24oZSkge1xuICAgICAgZGVsZXRlIHN1cnZleUVsZW1lbnRbXCJpc0RyYWdTdGFydGVkXCJdO1xuICAgICAgc3VydmV5RWxlbWVudC5kcmFnRHJvcEhlbHBlcigpLmVuZCgpO1xuICAgIH07XG4gIH1cbiAgcHVibGljIGdldCBzdXJ2ZXkoKTogU3VydmV5LlN1cnZleSB7XG4gICAgcmV0dXJuIDxTdXJ2ZXkuU3VydmV5PnRoaXMuZGF0YTtcbiAgfVxuICBwdWJsaWMgc3RhcnREcmFnUXVlc3Rpb24oZXZlbnQ6IERyYWdFdmVudCwgZWxlbWVudDogYW55KSB7XG4gICAgdmFyIGpzb24gPSBuZXcgU3VydmV5Lkpzb25PYmplY3QoKS50b0pzb25PYmplY3QoZWxlbWVudCk7XG4gICAganNvbltcInR5cGVcIl0gPSBlbGVtZW50LmdldFR5cGUoKTtcbiAgICB0aGlzLnByZXBhcmVEYXRhKGV2ZW50LCBlbGVtZW50Lm5hbWUsIGpzb24sIGVsZW1lbnQpO1xuICB9XG4gIHB1YmxpYyBzdGFydERyYWdUb29sYm94SXRlbShcbiAgICBldmVudDogRHJhZ0V2ZW50LFxuICAgIGVsZW1lbnROYW1lOiBzdHJpbmcsXG4gICAgZWxlbWVudEpzb246IGFueVxuICApIHtcbiAgICB0aGlzLnByZXBhcmVEYXRhKGV2ZW50LCBlbGVtZW50TmFtZSwgZWxlbWVudEpzb24sIG51bGwpO1xuICAgIGV2ZW50LmNhbmNlbEJ1YmJsZSA9IHRydWU7XG4gIH1cbiAgcHVibGljIGlzU3VydmV5RHJhZ2dpbmcoZXZlbnQ6IERyYWdFdmVudCk6IGJvb2xlYW4ge1xuICAgIGlmICghZXZlbnQpIHJldHVybiBmYWxzZTtcbiAgICB2YXIgZGF0YSA9IHRoaXMuZ2V0RGF0YShldmVudCkudGV4dDtcbiAgICByZXR1cm4gZGF0YSAmJiBkYXRhLmluZGV4T2YoRHJhZ0Ryb3BIZWxwZXIuZGF0YVN0YXJ0KSA9PSAwO1xuICB9XG4gIHB1YmxpYyBkb0RyYWdEcm9wT3ZlcihcbiAgICBldmVudDogRHJhZ0V2ZW50LFxuICAgIGVsZW1lbnQ6IGFueSxcbiAgICBpc0VkZ2U6IGJvb2xlYW4gPSBmYWxzZVxuICApIHtcbiAgICBldmVudCA9IHRoaXMuaXNDYW5EcmFnQ29udGludWUoZXZlbnQsIGVsZW1lbnQpO1xuICAgIGlmICghZXZlbnQpIHJldHVybjtcbiAgICB2YXIgYm90dG9tSW5mbyA9IHRoaXMuaXNCb3R0b20oZXZlbnQpO1xuICAgIGlmIChlbGVtZW50LmlzUGFnZSAmJiBlbGVtZW50LmVsZW1lbnRzLmxlbmd0aCA+IDApIHtcbiAgICAgIHZhciBsYXN0RWwgPSBlbGVtZW50LmVsZW1lbnRzW2VsZW1lbnQuZWxlbWVudHMubGVuZ3RoIC0gMV07XG4gICAgICBpZiAoIXRoaXMuaXNCb3R0b21UaGFuRWxlbWVudChldmVudCwgbGFzdEVsKSkgcmV0dXJuO1xuICAgICAgZWxlbWVudCA9IGxhc3RFbDtcbiAgICAgIGJvdHRvbUluZm8uaXNFZGdlID0gdHJ1ZTtcbiAgICAgIGJvdHRvbUluZm8uaXNCb3R0b20gPSB0cnVlO1xuICAgIH1cblxuICAgIGlzRWRnZSA9IGVsZW1lbnQuaXNQYW5lbCA/IGlzRWRnZSAmJiBib3R0b21JbmZvLmlzRWRnZSA6IHRydWU7XG4gICAgaWYgKGVsZW1lbnQuaXNQYW5lbCAmJiAhaXNFZGdlICYmIGVsZW1lbnQuZWxlbWVudHMubGVuZ3RoID4gMCkgcmV0dXJuO1xuICAgIHRoaXMuZGRUYXJnZXQubW92ZVRvKGVsZW1lbnQsIGJvdHRvbUluZm8uaXNCb3R0b20sIGlzRWRnZSk7XG4gIH1cbiAgcHVibGljIGRvRHJhZ0Ryb3BPdmVyRmxvdyhldmVudDogRHJhZ0V2ZW50LCBlbGVtZW50OiBhbnkpIHtcbiAgICBpZiAoISF0aGlzLmRkVGFyZ2V0KSB7XG4gICAgICBldmVudCA9IHRoaXMuaXNDYW5EcmFnQ29udGludWUoZXZlbnQsIGVsZW1lbnQpO1xuICAgICAgaWYgKCFldmVudCkgcmV0dXJuIHRydWU7XG4gICAgICB2YXIgYm90dG9tSW5mbyA9IHRoaXMuaXNCb3R0b20oZXZlbnQpO1xuICAgICAgcmV0dXJuIHRoaXMuZGRUYXJnZXQubW92ZVRvKFxuICAgICAgICBlbGVtZW50LFxuICAgICAgICBib3R0b21JbmZvLmlzQm90dG9tLFxuICAgICAgICBib3R0b21JbmZvLmlzRWRnZVxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcHJpdmF0ZSBpc0NhbkRyYWdDb250aW51ZShldmVudDogRHJhZ0V2ZW50LCBlbGVtZW50OiBhbnkpOiBEcmFnRXZlbnQge1xuICAgIGV2ZW50ID0gdGhpcy5nZXRFdmVudChldmVudCk7XG4gICAgaWYgKHRoaXMuaXNTYW1lQ29vcmRpbmF0ZXMoZXZlbnQpKSByZXR1cm4gbnVsbDtcbiAgICB0aGlzLmNoZWNrU2Nyb2xsWShldmVudCk7XG4gICAgaWYgKFxuICAgICAgIWVsZW1lbnQgfHxcbiAgICAgICF0aGlzLmlzU3VydmV5RHJhZ2dpbmcoZXZlbnQpIHx8XG4gICAgICB0aGlzLmlzU2FtZVBsYWNlKGV2ZW50LCBlbGVtZW50KVxuICAgIClcbiAgICAgIHJldHVybiBudWxsO1xuICAgIHJldHVybiBldmVudDtcbiAgfVxuICBwdWJsaWMgZW5kKCkge1xuICAgIGlmICh0aGlzLmRkVGFyZ2V0KSB7XG4gICAgICB0aGlzLmRkVGFyZ2V0LmNsZWFyKCk7XG4gICAgfVxuICAgIHRoaXMuaXNTY3JvbGxTdG9wID0gdHJ1ZTtcbiAgICB0aGlzLmNsZWFyRGF0YSgpO1xuICB9XG4gIHB1YmxpYyBnZXQgaXNNb3ZpbmcoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZGRUYXJnZXQgJiYgdGhpcy5kZFRhcmdldC5zb3VyY2U7XG4gIH1cbiAgcHVibGljIGRvRHJvcChldmVudDogRHJhZ0V2ZW50LCBwcmV2ZWREZWZhdWx0OiBib29sZWFuID0gdHJ1ZSkge1xuICAgIGlmIChldmVudC5zdG9wUHJvcGFnYXRpb24pIHtcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIH1cbiAgICBpZiAodGhpcy5pc1N1cnZleURyYWdnaW5nKGV2ZW50KSkge1xuICAgICAgaWYgKHByZXZlZERlZmF1bHQpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIH1cbiAgICAgIGlmICghdGhpcy5yZWFkT25seSkge1xuICAgICAgICB2YXIgbmV3RWxlbWVudCA9IHRoaXMuZGRUYXJnZXQuZG9Ecm9wKCk7XG4gICAgICAgIGlmICh0aGlzLm9uTW9kaWZpZWRDYWxsYmFjaylcbiAgICAgICAgICB0aGlzLm9uTW9kaWZpZWRDYWxsYmFjayh7XG4gICAgICAgICAgICB0eXBlOiBcIkRPX0RST1BcIixcbiAgICAgICAgICAgIHBhZ2U6IHRoaXMuZGRUYXJnZXQucGFnZSxcbiAgICAgICAgICAgIHNvdXJjZTogdGhpcy5kZFRhcmdldC5zb3VyY2UsXG4gICAgICAgICAgICB0YXJnZXQ6IHRoaXMuZGRUYXJnZXQudGFyZ2V0LFxuICAgICAgICAgICAgbmV3RWxlbWVudDogdGhpcy5kZFRhcmdldC5zb3VyY2UgPyBudWxsIDogbmV3RWxlbWVudCxcbiAgICAgICAgICAgIG1vdmVUb1BhcmVudDogbmV3RWxlbWVudC5wYXJlbnQsXG4gICAgICAgICAgICBtb3ZlVG9JbmRleDogISFuZXdFbGVtZW50LnBhcmVudFxuICAgICAgICAgICAgICA/IG5ld0VsZW1lbnQucGFyZW50LmVsZW1lbnRzLmluZGV4T2YobmV3RWxlbWVudClcbiAgICAgICAgICAgICAgOiAtMVxuICAgICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLmVuZCgpO1xuICB9XG4gIHB1YmxpYyBkb0xlYXZlUGFnZShldmVudDogRHJhZ0V2ZW50KSB7XG4gICAgaWYgKCEhdGhpcy5kZFRhcmdldCkge1xuICAgICAgdGhpcy5kZFRhcmdldC5tb3ZlVG8obnVsbCwgZmFsc2UpO1xuICAgIH1cbiAgfVxuICBwcml2YXRlIGNyZWF0ZVRhcmdldEVsZW1lbnQoZWxlbWVudE5hbWU6IHN0cmluZywganNvbjogYW55KTogYW55IHtcbiAgICBpZiAoIWVsZW1lbnROYW1lIHx8ICFqc29uKSByZXR1cm4gbnVsbDtcbiAgICB2YXIgdGFyZ2V0RWxlbWVudCA9IG51bGw7XG4gICAgdGFyZ2V0RWxlbWVudCA9IFN1cnZleS5TZXJpYWxpemVyLmNyZWF0ZUNsYXNzKGpzb25bXCJ0eXBlXCJdKTtcbiAgICBuZXcgU3VydmV5Lkpzb25PYmplY3QoKS50b09iamVjdChqc29uLCB0YXJnZXRFbGVtZW50KTtcbiAgICB0YXJnZXRFbGVtZW50Lm5hbWUgPSBlbGVtZW50TmFtZTtcbiAgICBpZiAodGFyZ2V0RWxlbWVudFtcInNldFN1cnZleUltcGxcIl0pIHtcbiAgICAgIHRhcmdldEVsZW1lbnRbXCJzZXRTdXJ2ZXlJbXBsXCJdKHRoaXMuc3VydmV5KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGFyZ2V0RWxlbWVudFtcInNldERhdGFcIl0odGhpcy5zdXJ2ZXkpO1xuICAgIH1cbiAgICB0YXJnZXRFbGVtZW50LnJlbmRlcldpZHRoID0gXCIxMDAlXCI7XG4gICAgdGFyZ2V0RWxlbWVudFtcImtvSXNEcmFnZ2luZ1wiXSh0cnVlKTtcbiAgICByZXR1cm4gdGFyZ2V0RWxlbWVudDtcbiAgfVxuICBwcml2YXRlIGlzQm90dG9tKGV2ZW50OiBEcmFnRXZlbnQpOiBhbnkge1xuICAgIGV2ZW50ID0gdGhpcy5nZXRFdmVudChldmVudCk7XG4gICAgdmFyIGhlaWdodCA9IDxudW1iZXI+ZXZlbnQuY3VycmVudFRhcmdldFtcImNsaWVudEhlaWdodFwiXTtcbiAgICB2YXIgeSA9IGV2ZW50Lm9mZnNldFk7XG4gICAgaWYgKGV2ZW50Lmhhc093blByb3BlcnR5KFwibGF5ZXJYXCIpKSB7XG4gICAgICB5ID0gZXZlbnRbXCJsYXllcllcIl0gLSA8bnVtYmVyPmV2ZW50LmN1cnJlbnRUYXJnZXRbXCJvZmZzZXRUb3BcIl07XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBpc0JvdHRvbTogeSA+IGhlaWdodCAvIDIsXG4gICAgICBpc0VkZ2U6XG4gICAgICAgIHkgPD0gRHJhZ0Ryb3BIZWxwZXIuZWRnZUhlaWdodCB8fFxuICAgICAgICBoZWlnaHQgLSB5IDw9IERyYWdEcm9wSGVscGVyLmVkZ2VIZWlnaHRcbiAgICB9O1xuICB9XG4gIHByaXZhdGUgaXNCb3R0b21UaGFuRWxlbWVudChldmVudDogRHJhZ0V2ZW50LCBsYXN0RWw6IGFueSk6IGJvb2xlYW4ge1xuICAgIHZhciBlbCA9IGxhc3RFbC5yZW5kZXJlZEVsZW1lbnQ7XG4gICAgaWYgKCFlbCkgcmV0dXJuIGZhbHNlO1xuICAgIGV2ZW50ID0gdGhpcy5nZXRFdmVudChldmVudCk7XG4gICAgdmFyIGVsWSA9IDxudW1iZXI+ZWwub2Zmc2V0VG9wICsgPG51bWJlcj5lbC5jbGllbnRIZWlnaHQ7XG4gICAgdmFyIHkgPSBldmVudC5vZmZzZXRZO1xuICAgIGlmIChldmVudC5oYXNPd25Qcm9wZXJ0eShcImxheWVyWFwiKSkge1xuICAgICAgeSA9IGV2ZW50W1wibGF5ZXJZXCJdIC0gPG51bWJlcj5ldmVudC5jdXJyZW50VGFyZ2V0W1wib2Zmc2V0VG9wXCJdO1xuICAgIH1cbiAgICByZXR1cm4geSA+IGVsWTtcbiAgfVxuICBwcml2YXRlIGlzU2FtZUNvb3JkaW5hdGVzKGV2ZW50OiBEcmFnRXZlbnQpOiBib29sZWFuIHtcbiAgICB2YXIgcmVzID1cbiAgICAgIE1hdGguYWJzKGV2ZW50LnBhZ2VYIC0gdGhpcy5wcmV2Q29vcmRpbmF0ZXMueCkgPiA1IHx8XG4gICAgICBNYXRoLmFicyhldmVudC5wYWdlWSAtIHRoaXMucHJldkNvb3JkaW5hdGVzLnkpID4gNTtcbiAgICBpZiAocmVzKSB7XG4gICAgICB0aGlzLnByZXZDb29yZGluYXRlcy54ID0gZXZlbnQucGFnZVg7XG4gICAgICB0aGlzLnByZXZDb29yZGluYXRlcy55ID0gZXZlbnQucGFnZVk7XG4gICAgfVxuICAgIHJldHVybiAhcmVzO1xuICB9XG4gIHByaXZhdGUgaXNTYW1lUGxhY2UoZXZlbnQ6IERyYWdFdmVudCwgZWxlbWVudDogYW55KTogYm9vbGVhbiB7XG4gICAgdmFyIHByZXYgPSBEcmFnRHJvcEhlbHBlci5wcmV2RXZlbnQ7XG4gICAgaWYgKFxuICAgICAgcHJldi5lbGVtZW50ICE9IGVsZW1lbnQgfHxcbiAgICAgIE1hdGguYWJzKGV2ZW50LmNsaWVudFggLSBwcmV2LngpID4gNSB8fFxuICAgICAgTWF0aC5hYnMoZXZlbnQuY2xpZW50WSAtIHByZXYueSkgPiA1XG4gICAgKSB7XG4gICAgICBwcmV2LmVsZW1lbnQgPSBlbGVtZW50O1xuICAgICAgcHJldi54ID0gZXZlbnQuY2xpZW50WDtcbiAgICAgIHByZXYueSA9IGV2ZW50LmNsaWVudFk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHByaXZhdGUgaXNTY3JvbGxTdG9wOiBib29sZWFuID0gdHJ1ZTtcbiAgcHJpdmF0ZSBzdGF0aWMgU2Nyb2xsRGVsYXk6IG51bWJlciA9IDMwO1xuICBwcml2YXRlIHN0YXRpYyBTY3JvbGxPZmZzZXQ6IG51bWJlciA9IDEwMDtcbiAgcHJpdmF0ZSBjaGVja1Njcm9sbFkoZTogRHJhZ0V2ZW50KSB7XG4gICAgaWYgKCF0aGlzLnNjcm9sbGFibGVFbGVtZW50KSByZXR1cm47XG4gICAgdmFyIHkgPSB0aGlzLmdldFNjcm9sbGFibGVFbGVtZW50UG9zWShlKTtcbiAgICBpZiAoeSA8IDApIHJldHVybjtcbiAgICB0aGlzLmlzU2Nyb2xsU3RvcCA9IHRydWU7XG4gICAgdmFyIGhlaWdodCA9IDxudW1iZXI+dGhpcy5zY3JvbGxhYmxlRWxlbWVudFtcImNsaWVudEhlaWdodFwiXTtcbiAgICBpZiAoeSA8IERyYWdEcm9wSGVscGVyLlNjcm9sbE9mZnNldCAmJiB5ID49IDApIHtcbiAgICAgIHRoaXMuaXNTY3JvbGxTdG9wID0gZmFsc2U7XG4gICAgICB0aGlzLmRvU2Nyb2xsWSgtMSk7XG4gICAgfVxuICAgIGlmIChoZWlnaHQgLSB5IDwgRHJhZ0Ryb3BIZWxwZXIuU2Nyb2xsT2Zmc2V0ICYmIGhlaWdodCA+PSB5KSB7XG4gICAgICB0aGlzLmlzU2Nyb2xsU3RvcCA9IGZhbHNlO1xuICAgICAgdGhpcy5kb1Njcm9sbFkoMSk7XG4gICAgfVxuICB9XG4gIHByaXZhdGUgZG9TY3JvbGxZKHN0ZXA6IG51bWJlcikge1xuICAgIHZhciBlbCA9IHRoaXMuc2Nyb2xsYWJsZUVsZW1lbnQ7XG4gICAgdmFyIHNjcm9sbFkgPSBlbC5zY3JvbGxUb3AgKyBzdGVwO1xuICAgIGlmIChzY3JvbGxZIDwgMCkge1xuICAgICAgdGhpcy5pc1Njcm9sbFN0b3AgPSB0cnVlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBlbC5zY3JvbGxUb3AgPSBzY3JvbGxZO1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICBpZiAoIXRoaXMuaXNTY3JvbGxTdG9wKSB7XG4gICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAgICBzZWxmLmRvU2Nyb2xsWShzdGVwKTtcbiAgICAgIH0sIERyYWdEcm9wSGVscGVyLlNjcm9sbERlbGF5KTtcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBnZXRTY3JvbGxhYmxlRWxlbWVudFBvc1koZTogRHJhZ0V2ZW50KTogbnVtYmVyIHtcbiAgICBpZiAoIXRoaXMuc2Nyb2xsYWJsZUVsZW1lbnQgfHwgIWUuY3VycmVudFRhcmdldCkgcmV0dXJuIC0xO1xuICAgIHZhciBlbCA9IGUuY3VycmVudFRhcmdldDtcbiAgICB2YXIgb2Zmc2V0VG9wID0gMDtcbiAgICB3aGlsZSAoZWwgJiYgZWwgIT0gdGhpcy5zY3JvbGxhYmxlRWxlbWVudCkge1xuICAgICAgb2Zmc2V0VG9wICs9IDxudW1iZXI+ZWxbXCJvZmZzZXRUb3BcIl07XG4gICAgICBlbCA9IGVsW1wib2Zmc2V0UGFyZW50XCJdO1xuICAgIH1cbiAgICByZXR1cm4gKFxuICAgICAgZS5vZmZzZXRZICtcbiAgICAgIDxudW1iZXI+ZS5jdXJyZW50VGFyZ2V0W1wib2Zmc2V0VG9wXCJdIC1cbiAgICAgIHRoaXMuc2Nyb2xsYWJsZUVsZW1lbnQub2Zmc2V0VG9wIC1cbiAgICAgIHRoaXMuc2Nyb2xsYWJsZUVsZW1lbnQuc2Nyb2xsVG9wXG4gICAgKTtcbiAgfVxuICBwcml2YXRlIGdldEV2ZW50KGV2ZW50OiBEcmFnRXZlbnQpOiBEcmFnRXZlbnQge1xuICAgIHJldHVybiBldmVudFtcIm9yaWdpbmFsRXZlbnRcIl0gPyBldmVudFtcIm9yaWdpbmFsRXZlbnRcIl0gOiBldmVudDtcbiAgfVxuICBwcml2YXRlIGdldFkoZWxlbWVudDogSFRNTEVsZW1lbnQpOiBudW1iZXIge1xuICAgIHZhciByZXN1bHQgPSAwO1xuXG4gICAgd2hpbGUgKGVsZW1lbnQpIHtcbiAgICAgIHJlc3VsdCArPSBlbGVtZW50Lm9mZnNldFRvcCAtIGVsZW1lbnQuc2Nyb2xsVG9wICsgZWxlbWVudC5jbGllbnRUb3A7XG4gICAgICBlbGVtZW50ID0gPEhUTUxFbGVtZW50PmVsZW1lbnQub2Zmc2V0UGFyZW50O1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIHByaXZhdGUgcHJlcGFyZURhdGEoXG4gICAgZXZlbnQ6IERyYWdFdmVudCxcbiAgICBlbGVtZW50TmFtZTogc3RyaW5nLFxuICAgIGpzb246IGFueSxcbiAgICBzb3VyY2U6IFN1cnZleS5JRWxlbWVudFxuICApIHtcbiAgICB2YXIgc3RyID0gRHJhZ0Ryb3BIZWxwZXIuZGF0YVN0YXJ0ICsgZWxlbWVudE5hbWUgKyBcIn1cIjtcbiAgICB0aGlzLnNldERhdGEoZXZlbnQsIHN0cik7XG4gICAgdmFyIHRhcmdldEVsZW1lbnQgPSB0aGlzLmNyZWF0ZVRhcmdldEVsZW1lbnQoZWxlbWVudE5hbWUsIGpzb24pO1xuICAgIHRoaXMuZGRUYXJnZXQgPSBuZXcgRHJhZ0Ryb3BUYXJnZXRFbGVtZW50KFxuICAgICAgPFN1cnZleS5QYWdlPnRoaXMuc3VydmV5LmN1cnJlbnRQYWdlLFxuICAgICAgdGFyZ2V0RWxlbWVudCxcbiAgICAgIHNvdXJjZSxcbiAgICAgIERyYWdEcm9wSGVscGVyLm5lc3RlZFBhbmVsRGVwdGhcbiAgICApO1xuICB9XG4gIHByaXZhdGUgc2V0RGF0YShldmVudDogRHJhZ0V2ZW50LCB0ZXh0OiBzdHJpbmcpIHtcbiAgICBpZiAoZXZlbnRbXCJvcmlnaW5hbEV2ZW50XCJdKSB7XG4gICAgICBldmVudCA9IGV2ZW50W1wib3JpZ2luYWxFdmVudFwiXTtcbiAgICB9XG4gICAgaWYgKGV2ZW50LmRhdGFUcmFuc2Zlcikge1xuICAgICAgZXZlbnQuZGF0YVRyYW5zZmVyLnNldERhdGEoXCJUZXh0XCIsIHRleHQpO1xuICAgICAgZXZlbnQuZGF0YVRyYW5zZmVyLmVmZmVjdEFsbG93ZWQgPSBcImNvcHlcIjtcbiAgICB9XG4gICAgRHJhZ0Ryb3BIZWxwZXIuZHJhZ0RhdGEgPSB7IHRleHQ6IHRleHQgfTtcbiAgfVxuICBwcml2YXRlIGdldERhdGEoZXZlbnQ6IERyYWdFdmVudCk6IGFueSB7XG4gICAgaWYgKGV2ZW50W1wib3JpZ2luYWxFdmVudFwiXSkge1xuICAgICAgZXZlbnQgPSBldmVudFtcIm9yaWdpbmFsRXZlbnRcIl07XG4gICAgfVxuICAgIGlmIChldmVudC5kYXRhVHJhbnNmZXIpIHtcbiAgICAgIHZhciB0ZXh0ID0gZXZlbnQuZGF0YVRyYW5zZmVyLmdldERhdGEoXCJUZXh0XCIpO1xuICAgICAgaWYgKHRleHQpIHtcbiAgICAgICAgRHJhZ0Ryb3BIZWxwZXIuZHJhZ0RhdGEudGV4dCA9IHRleHQ7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBEcmFnRHJvcEhlbHBlci5kcmFnRGF0YTtcbiAgfVxuICBwcml2YXRlIGNsZWFyRGF0YSgpIHtcbiAgICB0aGlzLmRkVGFyZ2V0ID0gbnVsbDsgLy8gV2Ugc2hvdWxkIHJlc2V0IGRkVGFyZ2V0IHRvIG51bGwgZHVlIHRvIHRoZSBodHRwczovL3N1cnZleWpzLmFuc3dlcmRlc2suaW8vdGlja2V0L2RldGFpbHMvVDEwMDMgLSBvblF1ZXN0aW9uQWRkZWQgbm90IGZpcmVkIGFmdGVyIEQmRFxuICAgIERyYWdEcm9wSGVscGVyLmRyYWdEYXRhID0geyB0ZXh0OiBcIlwiLCBqc29uOiBudWxsIH07XG4gICAgdmFyIHByZXYgPSBEcmFnRHJvcEhlbHBlci5wcmV2RXZlbnQ7XG4gICAgcHJldi5lbGVtZW50ID0gbnVsbDtcbiAgICBwcmV2LnggPSAtMTtcbiAgICBwcmV2LnkgPSAtMTtcbiAgICB0aGlzLnByZXZDb29yZGluYXRlcy54ID0gLTE7XG4gICAgdGhpcy5wcmV2Q29vcmRpbmF0ZXMueSA9IC0xO1xuICB9XG4gIHB1YmxpYyByZWFkT25seTogYm9vbGVhbiA9IGZhbHNlO1xufVxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2RyYWdkcm9waGVscGVyLnRzIiwiLy9VbmNvbW1lbnQgdGhpcyBsaW5lIG9uIGNyZWF0aW5nIGEgdHJhbnNsYXRpb24gZmlsZVxuLy9pbXBvcnQgeyBlZGl0b3JMb2NhbGl6YXRpb24sIGRlZmF1bHRTdHJpbmdzIH0gZnJvbSBcIi4uL2VkaXRvckxvY2FsaXphdGlvblwiO1xuXG5leHBvcnQgdmFyIGVuU3RyaW5ncyA9IHtcbiAgLy9zdXJ2ZXkgdGVtcGxhdGVzXG4gIHN1cnZleToge1xuICAgIGVkaXQ6IFwiRWRpdFwiLFxuICAgIGV4dGVybmFsSGVscExpbms6IFwiV2F0Y2ggYW5kIGxlYXJuIGhvdyB0byBjcmVhdGUgc3VydmV5c1wiLFxuICAgIGV4dGVybmFsSGVscExpbmtVcmw6XG4gICAgICBcImh0dHBzOi8vd3d3LnlvdXR1YmUuY29tL2NoYW5uZWwvVUNIMnJ1OW9rSWNvb05aZnBJYnlxNHFRP3ZpZXdfYXM9c3Vic2NyaWJlclwiLFxuICAgIGRyb3BRdWVzdGlvbjogXCJQbGVhc2UgZHJvcCBhIHF1ZXN0aW9uIGhlcmUgZnJvbSB0aGUgVG9vbGJveCBvbiB0aGUgbGVmdC5cIixcbiAgICBjb3B5OiBcIkNvcHlcIixcbiAgICBhZGRUb1Rvb2xib3g6IFwiQWRkIHRvIHRvb2xib3hcIixcbiAgICBkZWxldGVQYW5lbDogXCJEZWxldGUgUGFuZWxcIixcbiAgICBkZWxldGVRdWVzdGlvbjogXCJEZWxldGUgUXVlc3Rpb25cIixcbiAgICBjb252ZXJ0VG86IFwiQ29udmVydCB0b1wiLFxuICAgIGRyYWc6IFwiRHJhZyBlbGVtZW50XCJcbiAgfSxcbiAgLy9xdWVzdGlvblR5cGVzXG4gIHF0OiB7XG4gICAgZGVmYXVsdDogXCJEZWZhdWx0XCIsXG4gICAgY2hlY2tib3g6IFwiQ2hlY2tib3hcIixcbiAgICBjb21tZW50OiBcIkNvbW1lbnRcIixcbiAgICBpbWFnZXBpY2tlcjogXCJJbWFnZSBwaWNrZXJcIixcbiAgICBkcm9wZG93bjogXCJEcm9wZG93blwiLFxuICAgIGZpbGU6IFwiRmlsZVwiLFxuICAgIGh0bWw6IFwiSHRtbFwiLFxuICAgIG1hdHJpeDogXCJNYXRyaXggKHNpbmdsZSBjaG9pY2UpXCIsXG4gICAgbWF0cml4ZHJvcGRvd246IFwiTWF0cml4IChtdWx0aXBsZSBjaG9pY2UpXCIsXG4gICAgbWF0cml4ZHluYW1pYzogXCJNYXRyaXggKGR5bmFtaWMgcm93cylcIixcbiAgICBtdWx0aXBsZXRleHQ6IFwiTXVsdGlwbGUgVGV4dFwiLFxuICAgIHBhbmVsOiBcIlBhbmVsXCIsXG4gICAgcGFuZWxkeW5hbWljOiBcIlBhbmVsIChkeW5hbWljIHBhbmVscylcIixcbiAgICByYWRpb2dyb3VwOiBcIlJhZGlvZ3JvdXBcIixcbiAgICByYXRpbmc6IFwiUmF0aW5nXCIsXG4gICAgdGV4dDogXCJTaW5nbGUgSW5wdXRcIixcbiAgICBib29sZWFuOiBcIkJvb2xlYW5cIixcbiAgICBleHByZXNzaW9uOiBcIkV4cHJlc3Npb24gKHJlYWQtb25seSlcIixcbiAgICBmbG93cGFuZWw6IFwiRmxvdyBQYW5lbFwiXG4gIH0sXG4gIC8vU3RyaW5ncyBpbiBFZGl0b3JcbiAgZWQ6IHtcbiAgICBkZWZhdWx0TG9jYWxlOiBcIkRlZmF1bHQgKHswfSlcIixcbiAgICBzdXJ2ZXk6IFwiU3VydmV5XCIsXG4gICAgc2V0dGluZ3M6IFwiU3VydmV5IFNldHRpbmdzXCIsXG4gICAgb3BqZWN0UHJvcGVydGllc0hlYWRlcjogXCJBZHZhbmNlZFwiLFxuICAgIHNob3dPYmplY3RQcm9wZXJ0aWVzOiBcIlNob3cgT2JqZWN0IFByb3BlcnRpZXNcIixcbiAgICBoaWRlT2JqZWN0UHJvcGVydGllczogXCJIaWRlIE9iamVjdCBQcm9wZXJ0aWVzXCIsXG4gICAgZWRpdFN1cnZleTogXCJFZGl0IFN1cnZleVwiLFxuICAgIGFkZE5ld1BhZ2U6IFwiQWRkIE5ldyBQYWdlXCIsXG4gICAgbW92ZVJpZ2h0OiBcIlNjcm9sbCB0byB0aGUgUmlnaHRcIixcbiAgICBtb3ZlTGVmdDogXCJTY3JvbGwgdG8gdGhlIExlZnRcIixcbiAgICBkZWxldGVQYWdlOiBcIkRlbGV0ZSBQYWdlXCIsXG4gICAgZWRpdFBhZ2U6IFwiRWRpdCBQYWdlXCIsXG4gICAgZWRpdDogXCJFZGl0XCIsXG4gICAgbmV3UGFnZU5hbWU6IFwicGFnZVwiLFxuICAgIG5ld1F1ZXN0aW9uTmFtZTogXCJxdWVzdGlvblwiLFxuICAgIG5ld1BhbmVsTmFtZTogXCJwYW5lbFwiLFxuICAgIG5ld1RleHRJdGVtTmFtZTogXCJ0ZXh0XCIsXG4gICAgdGVzdFN1cnZleTogXCJUZXN0IFN1cnZleVwiLFxuICAgIHRlc3RTdXJ2ZXlBZ2FpbjogXCJUZXN0IFN1cnZleSBBZ2FpblwiLFxuICAgIHRlc3RTdXJ2ZXlXaWR0aDogXCJTdXJ2ZXkgd2lkdGg6IFwiLFxuICAgIGxvZ2ljOiBcIlN1cnZleSBMb2dpY1wiLFxuICAgIGVtYmVkU3VydmV5OiBcIkVtYmVkIFN1cnZleVwiLFxuICAgIHRyYW5zbGF0aW9uOiBcIlRyYW5zbGF0aW9uXCIsXG4gICAgc2F2ZVN1cnZleTogXCJTYXZlIFN1cnZleVwiLFxuICAgIGRlc2lnbmVyOiBcIlN1cnZleSBEZXNpZ25lclwiLFxuICAgIGpzb25FZGl0b3I6IFwiSlNPTiBFZGl0b3JcIixcbiAgICB1bmRvOiBcIlVuZG9cIixcbiAgICByZWRvOiBcIlJlZG9cIixcbiAgICBvcHRpb25zOiBcIk9wdGlvbnNcIixcbiAgICBnZW5lcmF0ZVZhbGlkSlNPTjogXCJHZW5lcmF0ZSBWYWxpZCBKU09OXCIsXG4gICAgZ2VuZXJhdGVSZWFkYWJsZUpTT046IFwiR2VuZXJhdGUgUmVhZGFibGUgSlNPTlwiLFxuICAgIHRvb2xib3g6IFwiVG9vbGJveFwiLFxuICAgIHRvb2xib3hHZW5lcmFsQ2F0ZWdvcnk6IFwiR2VuZXJhbFwiLFxuICAgIGRlbFNlbE9iamVjdDogXCJEZWxldGUgc2VsZWN0ZWQgb2JqZWN0XCIsXG4gICAgZWRpdFNlbE9iamVjdDogXCJFZGl0IHNlbGVjdGVkIG9iamVjdFwiLFxuICAgIGNvcnJlY3RKU09OOiBcIlBsZWFzZSBjb3JyZWN0IEpTT04uXCIsXG4gICAgc3VydmV5UmVzdWx0czogXCJTdXJ2ZXkgUmVzdWx0OiBcIixcbiAgICBzdXJ2ZXlSZXN1bHRzVGFibGU6IFwiQXMgVGFibGVcIixcbiAgICBzdXJ2ZXlSZXN1bHRzSnNvbjogXCJBcyBKU09OXCIsXG4gICAgcmVzdWx0c1RpdGxlOiBcIlF1ZXN0aW9uIFRpdGxlXCIsXG4gICAgcmVzdWx0c05hbWU6IFwiUXVlc3Rpb24gTmFtZVwiLFxuICAgIHJlc3VsdHNWYWx1ZTogXCJBbnN3ZXIgVmFsdWVcIixcbiAgICByZXN1bHRzRGlzcGxheVZhbHVlOiBcIkRpc3BsYXkgVmFsdWVcIixcbiAgICBtb2RpZmllZDogXCJNb2RpZmllZFwiLFxuICAgIHNhdmluZzogXCJTYXZpbmdcIixcbiAgICBzYXZlZDogXCJTYXZlZFwiLFxuICAgIHNhdmVFcnJvcjogXCJFcnJvciEgRWRpdG9yIGNvbnRlbnQgaXMgbm90IHNhdmVkLlwiLFxuICAgIHRyYW5zbGF0aW9uQWRkTGFuZ3VhZ2U6IFwiU2VsZWN0IGxhbmd1YWdlIHRvIHRyYW5zbGF0ZVwiLFxuICAgIHRyYW5zbGF0aW9uU2hvd0FsbFN0cmluZ3M6IFwiU2hvdyBhbGwgc3RyaW5nc1wiLFxuICAgIHRyYW5zbGF0aW9uU2hvd0FsbFBhZ2VzOiBcIlNob3cgYWxsIHBhZ2VzXCIsXG4gICAgdHJhbnNsYXRpb25Ob1N0cmluZ3M6IFwiTm8gc3RyaW5ncyB0byB0cmFuc2xhdGUuIFBsZWFzZSwgY2hhbmdlIHRoZSBmaWx0ZXIuXCIsXG4gICAgdHJhbnNsYXRpb25FeHBvcnRUb1NDVkJ1dHRvbjogXCJFeHBvcnQgdG8gQ1NWXCIsXG4gICAgdHJhbnNsYXRpb25JbXBvcnRGcm9tU0NWQnV0dG9uOiBcIkltcG9ydCBmcm9tIENTVlwiLFxuICAgIHRyYW5zbGF0aW9uTWVyZ2VMb2NhbGVXaXRoRGVmYXVsdDogXCJNZXJnZSB7MH0gd2l0aCBkZWZhdWx0IGxvY2FsZVwiLFxuICAgIGJvbGQ6IFwiQm9sZFwiLFxuICAgIGl0YWxpYzogXCJJdGFsaWNcIixcbiAgICB1bmRlcmxpbmU6IFwiVW5kZXJsaW5lXCIsXG4gICAgZnBBZGRRdWVzdGlvbjogXCJBZGQgcXVlc3Rpb24uLi5cIixcbiAgICBjb21wbGV0ZWRIdG1sT25Db25kaXRpb25JdGVtVGV4dDogXCJTaG93IGlmOlwiLFxuICAgIGxnOiB7XG4gICAgICAvL0xvZ2ljIHRhYiBzdHJpbmdzXG4gICAgICBwYWdlX3Zpc2liaWxpdHlOYW1lOiBcIlBhZ2UgdmlzaWJpbGl0eVwiLFxuICAgICAgcGFuZWxfdmlzaWJpbGl0eU5hbWU6IFwiUGFuZWwgdmlzaWJpbGl0eVwiLFxuICAgICAgcGFuZWxfZW5hYmxlTmFtZTogXCJQYW5lbCBlbmFibGUvZGlzYWJsZVwiLFxuICAgICAgcXVlc3Rpb25fdmlzaWJpbGl0eU5hbWU6IFwiUXVlc3Rpb24gdmlzaWJpbGl0eVwiLFxuICAgICAgcXVlc3Rpb25fZW5hYmxlTmFtZTogXCJRdWVzdGlvbiBlbmFibGUvZGlzYWJsZVwiLFxuICAgICAgcXVlc3Rpb25fcmVxdWlyZU5hbWU6IFwiUXVlc3Rpb24gb3B0aW9uYWwgcmVxdWlyZWRcIixcbiAgICAgIHRyaWdnZXJfY29tcGxldGVOYW1lOiBcIkNvbXBsZXRlIHN1cnZleVwiLFxuICAgICAgdHJpZ2dlcl9zZXR2YWx1ZU5hbWU6IFwiU2V0IHF1ZXN0aW9uIHZhbHVlXCIsXG4gICAgICB0cmlnZ2VyX2NvcHl2YWx1ZU5hbWU6IFwiQ29weSBxdWVzdGlvbiB2YWx1ZVwiLFxuICAgICAgdHJpZ2dlcl9za2lwTmFtZTogXCJTa2lwIHRvIHF1ZXN0aW9uXCIsXG4gICAgICB0cmlnZ2VyX3J1bkV4cHJlc3Npb25OYW1lOiBcIlJ1biBjdXN0b20gZXhwcmVzc2lvblwiLFxuICAgICAgY29tcGxldGVkSHRtbE9uQ29uZGl0aW9uTmFtZTogXCJDdXN0b20gJ1RoYW5rIHlvdSBwYWdlJyB0ZXh0XCIsXG5cbiAgICAgIHBhZ2VfdmlzaWJpbGl0eURlc2NyaXB0aW9uOlxuICAgICAgICBcIk1ha2UgdGhlIHBhZ2UgdmlzaWJsZSB3aGVuIHRoZSBsb2dpYyBleHByZXNzaW9uIHJldHVybnMgdHJ1ZS4gT3RoZXJ3aXNlIGtlZXAgaXQgaW52aXNpYmxlLlwiLFxuICAgICAgcGFuZWxfdmlzaWJpbGl0eURlc2NyaXB0aW9uOlxuICAgICAgICBcIk1ha2UgdGhlIHBhbmVsIHZpc2libGUgd2hlbiB0aGUgbG9naWMgZXhwcmVzc2lvbiByZXR1cm5zIHRydWUuIE90aGVyd2lzZSBrZWVwIGl0IGludmlzaWJsZS5cIixcbiAgICAgIHBhbmVsX2VuYWJsZURlc2NyaXB0aW9uOlxuICAgICAgICBcIk1ha2UgdGhlIHBhbmVsLCBhbmQgYWxsIGVsZW1lbnRzIGluc2lkZSBpdCwgZW5hYmxlIHdoZW4gdGhlIGxvZ2ljIGV4cHJlc3Npb24gcmV0dXJucyB0cnVlLiBPdGhlcndpc2Uga2VlcCB0aGVtIGRpc2FibGVkLlwiLFxuICAgICAgcXVlc3Rpb25fdmlzaWJpbGl0eURlc2NyaXB0aW9uOlxuICAgICAgICBcIk1ha2UgdGhlIHF1ZXN0aW9uIHZpc2libGUgd2hlbiB0aGUgbG9naWMgZXhwcmVzc2lvbiByZXR1cm5zIHRydWUuIE90aGVyd2lzZSBrZWVwIGl0IGludmlzaWJsZS5cIixcbiAgICAgIHF1ZXN0aW9uX2VuYWJsZURlc2NyaXB0aW9uOlxuICAgICAgICBcIk1ha2UgdGhlIHF1ZXN0aW9uIGVuYWJsZSB3aGVuIHRoZSBsb2dpYyBleHByZXNzaW9uIHJldHVybnMgdHJ1ZS4gT3RoZXJ3aXNlIGtlZXAgaXQgZGlzYWJsZWQuXCIsXG4gICAgICBxdWVzdGlvbl9yZXF1aXJlRGVzY3JpcHRpb246XG4gICAgICAgIFwiUXVlc3Rpb24gYmVjb21lcyByZXF1aXJlZCB3aGVuIHRoZSBsb2dpYyBleHByZXNzaW9uIHJldHVybnMgdHJ1ZS5cIixcbiAgICAgIHRyaWdnZXJfY29tcGxldGVEZXNjcmlwdGlvbjpcbiAgICAgICAgXCJXaGVuIHRoZSBsb2dpYyBleHByZXNzaW9uIHJldHVybnMgdHJ1ZSB0aGVuIHRoZSBzdXJ2ZXkgYmVjb21lcyBjb21wbGV0ZWQgYW5kIGFuIGVuZC11c2VyIHNlZSB0aGUgJ1RoYW5rIHlvdSBwYWdlJy5cIixcbiAgICAgIHRyaWdnZXJfc2V0dmFsdWVEZXNjcmlwdGlvbjpcbiAgICAgICAgXCJXaGVuIHF1ZXN0aW9uIHZhbHVlcywgdGhhdCBhcmUgdXNlZCBpbiB0aGUgbG9naWMgZXhwcmVzc2lvbiwgYXJlIGNoYW5nZWQgYW5kIHRoZSBsb2dpYyBleHByZXNzaW9uIHJldHVybnMgdHJ1ZSwgdGhlbiB0aGUgdmFsdWUgaXMgc2V0IHRvIHRoZSBzZWxlY3RlZCBxdWVzdGlvbi5cIixcbiAgICAgIHRyaWdnZXJfY29weXZhbHVlRGVzY3JpcHRpb246XG4gICAgICAgIFwiV2hlbiBxdWVzdGlvbiB2YWx1ZXMsIHRoYXQgYXJlIHVzZWQgaW4gdGhlIGxvZ2ljIGV4cHJlc3Npb24sIGFyZSBjaGFuZ2VkIGFuZCB0aGUgbG9naWMgZXhwcmVzc2lvbiByZXR1cm5zIHRydWUsIHRoZW4gdGhlIHZhbHVlIG9mIG9uZSBzZWxlY3RlZCBxdWVzdGlvbiBpcyBjb3BpZWQgdG8gYW5vdGhlciBzZWxlY3RlZCBxdWVzdGlvbi5cIixcbiAgICAgIHRyaWdnZXJfc2tpcERlc2NyaXB0aW9uOlxuICAgICAgICBcIldoZW4gdGhlIGxvZ2ljIGV4cHJlc3Npb24gcmV0dXJucyB0cnVlIHRoZW4gdGhlIHN1cnZleSBza2lwIHRvIC8gZm9jdXMgdGhlIHNlbGVjdGVkIHF1ZXN0aW9uLlwiLFxuICAgICAgdHJpZ2dlcl9ydW5FeHByZXNzaW9uRGVzY3JpcHRpb246XG4gICAgICAgIFwiV2hlbiB0aGUgbG9naWMgZXhwcmVzc2lvbiByZXR1cm5zIHRydWUsIHRoZW4gdGhlIGN1c3RvbSBleHByZXNzaW9uIGlzIHBlcmZvcm1lZC4gWW91IG1heSBvcHRpb25hbGx5IHNldCB0aGlzIGV4cHJlc3Npb24gcmVzdWx0IGludG8gdGhlIHNlbGVjdGVkIHF1ZXN0aW9uXCIsXG4gICAgICBjb21wbGV0ZWRIdG1sT25Db25kaXRpb25EZXNjcmlwdGlvbjpcbiAgICAgICAgXCJJZiB0aGUgbG9naWMgZXhwcmVzc2lvbiByZXR1cm5zIHRydWUsIHRoZW4gdGhlIGRlZmF1bHQgdGV4dCBmb3IgdGhlICdUaGFuayB5b3UgcGFnZScgaXMgY2hhbmdlZCB0byB0aGUgZ2l2ZW4gb25lLlwiLFxuXG4gICAgICBpdGVtRXhwcmVzc2lvblRleHQ6IFwiV2hlbiBleHByZXNzaW9uOiAnezB9JyByZXR1cm5zIHRydWU6XCIsIC8vezB9IC0gdGhlIGV4cHJlc3Npb25cbiAgICAgIHBhZ2VfdmlzaWJpbGl0eVRleHQ6IFwiTWFrZSBwYWdlIHswfSB2aXNpYmxlXCIsIC8vezB9IHBhZ2UgbmFtZVxuICAgICAgcGFuZWxfdmlzaWJpbGl0eVRleHQ6IFwiTWFrZSBwYW5lbCB7MH0gdmlzaWJsZVwiLCAvL3swfSBwYW5lbCBuYW1lXG4gICAgICBwYW5lbF9lbmFibGVUZXh0OiBcIk1ha2UgcGFuZWwgezB9IGVuYWJsZVwiLCAvL3swfSBwYW5lbCBuYW1lXG4gICAgICBxdWVzdGlvbl92aXNpYmlsaXR5VGV4dDogXCJNYWtlIHF1ZXN0aW9uIHswfSB2aXNpYmxlXCIsIC8vezB9IHF1ZXN0aW9uIG5hbWVcbiAgICAgIHF1ZXN0aW9uX2VuYWJsZVRleHQ6IFwiTWFrZSBxdWVzdGlvbiB7MH0gZW5hYmxlXCIsIC8vezB9IHF1ZXN0aW9uIG5hbWVcbiAgICAgIHF1ZXN0aW9uX3JlcXVpcmVUZXh0OiBcIk1ha2UgcXVlc3Rpb24gezB9IHJlcXVpcmVkXCIsIC8vezB9IHF1ZXN0aW9uIG5hbWVcbiAgICAgIHRyaWdnZXJfY29tcGxldGVUZXh0OiBcIlN1cnZleSBiZWNvbWVzIGNvbXBsZXRlZFwiLFxuICAgICAgdHJpZ2dlcl9zZXR2YWx1ZVRleHQ6IFwiU2V0IGludG8gcXVlc3Rpb246IHswfSB2YWx1ZSB7MX1cIiwgLy97MH0gcXVlc3Rpb24gbmFtZSwgezF9IHNldFZhbHVlXG4gICAgICB0cmlnZ2VyX2NvcHl2YWx1ZVRleHQ6IFwiQ29weSBpbnRvIHF1ZXN0aW9uOiB7MH0gdmFsdWUgZnJvbSBxdWVzdGlvbiB7MX1cIiwgLy97MH0gYW5kIHsxfSBxdWVzdGlvbiBuYW1lc1xuICAgICAgdHJpZ2dlcl9za2lwVGV4dDogXCJTdXJ2ZXkgc2tpcCB0byB0aGUgcXVlc3Rpb24gezB9XCIsIC8vezB9IHF1ZXN0aW9uIG5hbWVcbiAgICAgIHRyaWdnZXJfcnVuRXhwcmVzc2lvblRleHQxOiBcIlJ1biBleHByZXNzaW9uOiAnezB9J1wiLCAvL3swfSB0aGUgZXhwcmVzc2lvblxuICAgICAgdHJpZ2dlcl9ydW5FeHByZXNzaW9uVGV4dDI6IFwiIGFuZCBzZXQgaXQncyByZXN1bHQgaW50byBxdWVzdGlvbjogezB9XCIsIC8vezB9IHF1ZXN0aW9uIG5hbWVcbiAgICAgIGNvbXBsZXRlZEh0bWxPbkNvbmRpdGlvblRleHQ6XG4gICAgICAgIFwiU2hvdyBjdXN0b20gdGV4dCBmb3IgdGhlICdUaGFuayB5b3UgcGFnZScuXCIsXG5cbiAgICAgIGV4cHJlc3Npb25FZGl0b3JUaXRsZTogXCJTZXR1cCB0aGUgbG9naWMgZXhwcmVzc2lvblwiLFxuXG4gICAgICBkZWxldGVPcGVyYXRpb246IFwiRGVsZXRlIG9wZXJhdGlvblwiLFxuICAgICAgYWRkTmV3T3BlcmF0aW9uOiBcIkFkZCBOZXcgT3BlcmF0aW9uKHMpXCIsXG5cbiAgICAgIGV4cHJlc3Npb25JbnZhbGlkOlxuICAgICAgICBcIlRoZSBsb2dpYyBleHByZXNzaW9uIGlzIGVtcHR5IG9yIGludmFsaWQuIFBsZWFzZSBjb3JyZWN0IGl0LlwiLFxuICAgICAgbm9PcGVyYXRpb25FcnJvcjogXCJQbGVhc2UsIGFkZCBhdCBsZWFzdCBvbmUgb3BlcmF0aW9uLlwiLFxuICAgICAgb3BlcmF0aW9uSW52YWxpZDogXCJQbGVhc2UsIGZpeCBwcm9ibGVtcyBpbiB5b3VyIG9wZXJhdGlvbihzKS5cIlxuICAgIH1cbiAgfSxcbiAgLy9Qcm9wZXJ0eSBuYW1lcyBpbiB0YWJsZSBoZWFkZXJzXG4gIHBlbDoge1xuICAgIGlzUmVxdWlyZWQ6IFwiUmVxdWlyZWQ/XCJcbiAgfSxcbiAgLy9Qcm9wZXJ0eSBFZGl0b3JzXG4gIHBlOiB7XG4gICAgYXBwbHk6IFwiQXBwbHlcIixcbiAgICBvazogXCJPS1wiLFxuICAgIHNhdmU6IFwiU2F2ZVwiLFxuICAgIGNhbmNlbDogXCJDYW5jZWxcIixcbiAgICByZXNldDogXCJSZXNldFwiLFxuICAgIGNsb3NlOiBcIkNsb3NlXCIsXG4gICAgZGVsZXRlOiBcIkRlbGV0ZVwiLFxuICAgIGFkZDogXCJBZGRcIixcbiAgICBhZGROZXc6IFwiQWRkIE5ld1wiLFxuICAgIGFkZEl0ZW06IFwiQ2xpY2sgdG8gYWRkIGFuIGl0ZW0uLi5cIixcbiAgICBhZGRPdGhlcjogXCJPdGhlclwiLFxuICAgIGFkZFNlbGVjdEFsbDogXCJTZWxlY3QgQWxsXCIsXG4gICAgYWRkTm9uZTogXCJOb25lXCIsXG4gICAgcmVtb3ZlQWxsOiBcIlJlbW92ZSBBbGxcIixcbiAgICBlZGl0OiBcIkVkaXRcIixcbiAgICBiYWNrOiBcIlJldHVybiB3aXRob3V0IHNhdmluZ1wiLFxuICAgIHNhdmVBbmRCYWNrOiBcIlNhdmUgYW5kIHJldHVyblwiLFxuICAgIGl0ZW1WYWx1ZUVkaXQ6IFwiVmlzaWJsZSBJZlwiLFxuICAgIGVkaXRDaG9pY2VzOiBcIkVkaXQgQ2hvaWNlc1wiLFxuICAgIG1vdmU6IFwiTW92ZVwiLFxuICAgIGVtcHR5OiBcIjxlbXB0eT5cIixcbiAgICBub3RFbXB0eTogXCI8ZWRpdCB2YWx1ZT5cIixcbiAgICBmYXN0RW50cnk6IFwiRmFzdCBFbnRyeVwiLFxuICAgIGZvcm1FbnRyeTogXCJGb3JtIEVudHJ5XCIsXG4gICAgdGVzdFNlcnZpY2U6IFwiVGVzdCB0aGUgc2VydmljZVwiLFxuICAgIGl0ZW1TZWxlY3RvckVtcHR5OiBcIlBsZWFzZSBzZWxlY3QgdGhlIGVsZW1lbnRcIixcbiAgICBjb25kaXRpb25TZWxlY3RRdWVzdGlvbjogXCJTZWxlY3QgcXVlc3Rpb24uLi5cIixcbiAgICBjb25kaXRpb25TZWxlY3RQYWdlOiBcIlNlbGVjdCBwYWdlLi4uXCIsXG4gICAgY29uZGl0aW9uU2VsZWN0UGFuZWw6IFwiU2VsZWN0IHBhbmVsLi4uXCIsXG4gICAgY29uZGl0aW9uVmFsdWVRdWVzdGlvblRpdGxlOiBcIlBsZWFzZSBlbnRlci9zZWxlY3QgdGhlIHZhbHVlXCIsXG4gICAgY29uZGl0aW9uQnV0dG9uQWRkOiBcIkFkZFwiLFxuICAgIGNvbmRpdGlvbkJ1dHRvblJlcGxhY2U6IFwiUmVwbGFjZVwiLFxuICAgIGNvbmRpdGlvbkhlbHA6XG4gICAgICBcIlBsZWFzZSBlbnRlciBhIGJvb2xlYW4gZXhwcmVzc2lvbi4gSXQgc2hvdWxkIHJldHVybiB0cnVlIHRvIGtlZXAgdGhlIHF1ZXN0aW9uL3BhZ2UgdmlzaWJsZS4gRm9yIGV4YW1wbGU6IHtxdWVzdGlvbjF9ID0gJ3ZhbHVlMScgb3IgKHtxdWVzdGlvbjJ9ICoge3F1ZXN0aW9uNH0gID4gMjAgYW5kIHtxdWVzdGlvbjN9IDwgNSlcIixcbiAgICBleHByZXNzaW9uSGVscDpcbiAgICAgIFwiUGxlYXNlIGVudGVyIGFuIGV4cHJlc3Npb24uIFlvdSBtYXkgdXNlIGN1cmx5IGJyYWNrZXRzIHRvIGdldCBhY2Nlc3MgdG8gdGhlIHF1ZXN0aW9uIHZhbHVlczogJ3txdWVzdGlvbjF9ICsge3F1ZXN0aW9uMn0nLCAnKHtwcmljZX0qe3F1YW50aXR5fSkgKiAoMTAwIC0ge2Rpc2NvdW50fSknXCIsXG4gICAgYWNlRWRpdG9ySGVscDogXCJQcmVzcyBjdHJsK3NwYWNlIHRvIGdldCBleHByZXNzaW9uIGNvbXBsZXRpb24gaGludFwiLFxuICAgIGFjZUVkaXRvclJvd1RpdGxlOiBcIkN1cnJlbnQgcm93XCIsXG4gICAgYWNlRWRpdG9yUGFuZWxUaXRsZTogXCJDdXJyZW50IHBhbmVsXCIsXG4gICAgc2hvd01vcmU6IFwiRm9yIG1vcmUgZGV0YWlscyBwbGVhc2UgY2hlY2sgdGhlIGRvY3VtZW50YXRpb25cIixcbiAgICBjb25kaXRpb25TaG93TW9yZVVybDpcbiAgICAgIFwiaHR0cHM6Ly9zdXJ2ZXlqcy5pby9Eb2N1bWVudGF0aW9uL0xpYnJhcnlQYXJhbWV0ZXI/aWQ9UXVlc3Rpb24mcGFyYW1ldGVyPXZpc2libGVJZlwiLFxuICAgIGFzc2lzdGFudFRpdGxlOiBcIkF2YWlsYWJsZSBxdWVzdGlvbnM6XCIsXG4gICAgY2VsbHNFbXB0eVJvd3NDb2x1bW5zOiBcIlRoZXJlIGlzIHNob3VsZCBiZSBhdCBsZWFzdCBvbmUgY29sdW1uIG9yIHJvd1wiLFxuXG4gICAgcHJvcGVydHlJc0VtcHR5OiBcIlBsZWFzZSBlbnRlciBhIHZhbHVlXCIsXG4gICAgdmFsdWU6IFwiVmFsdWVcIixcbiAgICB0ZXh0OiBcIlRleHRcIixcbiAgICByb3dpZDogXCJSb3cgSURcIixcbiAgICBpbWFnZUxpbms6IFwiSW1hZ2UgTGlua1wiLFxuICAgIGNvbHVtbkVkaXQ6IFwiRWRpdCBjb2x1bW46IHswfVwiLFxuICAgIGl0ZW1FZGl0OiBcIkVkaXQgaXRlbTogezB9XCIsXG5cbiAgICB1cmw6IFwiVVJMXCIsXG4gICAgcGF0aDogXCJQYXRoXCIsXG4gICAgdmFsdWVOYW1lOiBcIlZhbHVlIG5hbWVcIixcbiAgICB0aXRsZU5hbWU6IFwiVGl0bGUgbmFtZVwiLFxuXG4gICAgaGFzT3RoZXI6IFwiSGFzIG90aGVyIGl0ZW1cIixcbiAgICBvdGhlclRleHQ6IFwiT3RoZXIgaXRlbSB0ZXh0XCIsXG4gICAgaGFzTm9uZTogXCJIYXMgbm9uZSBpdGVtXCIsXG4gICAgbm9uZVRleHQ6IFwiTm9uZSBpdGVtIHRleHRcIixcbiAgICBoYXNTZWxlY3RBbGw6IFwiSGFzIHNlbGVjdCBhbGwgaXRlbVwiLFxuICAgIHNlbGVjdEFsbFRleHQ6IFwiU2VsZWN0IGFsbCBpdGVtIHRleHRcIixcbiAgICBjaG9pY2VzTWluOiBcIk1pbmltdW0gdmFsdWUgZm9yIGF1dG8gZ2VuZXJhdGVkIGl0ZW1zXCIsXG4gICAgY2hvaWNlc01heDogXCJNYXhpbXVtIHZhbHVlIGZvciBhdXRvIGdlbmVyYXRlZCBpdGVtc1wiLFxuICAgIGNob2ljZXNTdGVwOiBcIlRoZSBkaWZmZXJlbmNlIGJldHdlZW4gYXV0byBnZW5lcmF0ZWQgaXRlbXNcIixcbiAgICBuYW1lOiBcIk5hbWVcIixcbiAgICB0aXRsZTogXCJUaXRsZVwiLFxuICAgIGNlbGxUeXBlOiBcIkNlbGwgdHlwZVwiLFxuICAgIGNvbENvdW50OiBcIkNvbHVtbiBjb3VudFwiLFxuICAgIGNob2ljZXNPcmRlcjogXCJTZWxlY3QgY2hvaWNlcyBvcmRlclwiLFxuICAgIHZpc2libGU6IFwiSXMgdmlzaWJsZT9cIixcbiAgICBpc1JlcXVpcmVkOiBcIklzIHJlcXVpcmVkP1wiLFxuICAgIGlzQWxsUm93UmVxdWlyZWQ6IFwiUmVxdWlyZSBhbnN3ZXIgZm9yIGFsbCByb3dzXCIsXG4gICAgcmVxdWlyZWRFcnJvclRleHQ6IFwiUmVxdWlyZWQgZXJyb3IgdGV4dFwiLFxuICAgIHN0YXJ0V2l0aE5ld0xpbmU6IFwiSXMgc3RhcnQgd2l0aCBuZXcgbGluZT9cIixcbiAgICByb3dzOiBcIlJvdyBjb3VudFwiLFxuICAgIHBsYWNlSG9sZGVyOiBcIklucHV0IHBsYWNlIGhvbGRlclwiLFxuICAgIHNob3dQcmV2aWV3OiBcIklzIGltYWdlIHByZXZpZXcgc2hvd24/XCIsXG4gICAgc3RvcmVEYXRhQXNUZXh0OiBcIlN0b3JlIGZpbGUgY29udGVudCBpbiBKU09OIHJlc3VsdCBhcyB0ZXh0XCIsXG4gICAgbWF4U2l6ZTogXCJNYXhpbXVtIGZpbGUgc2l6ZSBpbiBieXRlc1wiLFxuICAgIGltYWdlSGVpZ2h0OiBcIkltYWdlIGhlaWdodFwiLFxuICAgIGltYWdlV2lkdGg6IFwiSW1hZ2Ugd2lkdGhcIixcbiAgICByb3dDb3VudDogXCJSb3cgY291bnRcIixcbiAgICBjb2x1bW5MYXlvdXQ6IFwiQ29sdW1ucyBsYXlvdXRcIixcbiAgICBhZGRSb3dMb2NhdGlvbjogXCJBZGQgcm93IGJ1dHRvbiBsb2NhdGlvblwiLFxuICAgIGFkZFJvd1RleHQ6IFwiQWRkIHJvdyBidXR0b24gdGV4dFwiLFxuICAgIHJlbW92ZVJvd1RleHQ6IFwiUmVtb3ZlIHJvdyBidXR0b24gdGV4dFwiLFxuICAgIHJhdGVNaW46IFwiTWluaW11bSByYXRlXCIsXG4gICAgcmF0ZU1heDogXCJNYXhpbXVtIHJhdGVcIixcbiAgICByYXRlU3RlcDogXCJSYXRlIHN0ZXBcIixcbiAgICBtaW5SYXRlRGVzY3JpcHRpb246IFwiTWluaW11bSByYXRlIGRlc2NyaXB0aW9uXCIsXG4gICAgbWF4UmF0ZURlc2NyaXB0aW9uOiBcIk1heGltdW0gcmF0ZSBkZXNjcmlwdGlvblwiLFxuICAgIGlucHV0VHlwZTogXCJJbnB1dCB0eXBlXCIsXG4gICAgb3B0aW9uc0NhcHRpb246IFwiT3B0aW9ucyBjYXB0aW9uXCIsXG4gICAgZGVmYXVsdFZhbHVlOiBcIkRlZmF1bHQgdmFsdWVcIixcbiAgICBjZWxsc0RlZmF1bHRSb3c6IFwiRGVmYXVsdCBjZWxscyB0ZXh0c1wiLFxuXG4gICAgc3VydmV5RWRpdG9yVGl0bGU6IFwiRWRpdCBzdXJ2ZXkgc2V0dGluZ3NcIixcbiAgICBxRWRpdG9yVGl0bGU6IFwiRWRpdDogezB9XCIsXG5cbiAgICBtYXhMZW5ndGg6IFwiTWF4aW11bSBsZW5ndGhcIixcblxuICAgIC8vc3VydmV5XG4gICAgc2hvd1RpdGxlOiBcIlNob3cvaGlkZSB0aXRsZVwiLFxuICAgIGxvY2FsZTogXCJEZWZhdWx0IGxhbmd1YWdlXCIsXG4gICAgc2ltdWxhdG9yOiBcIkNob29zZSBkZXZpY2VcIixcbiAgICBsYW5kc2NhcGVPcmllbnRhdGlvbjogXCJMYW5kc2NhcGVcIixcbiAgICBtb2RlOiBcIk1vZGUgKGVkaXQvcmVhZCBvbmx5KVwiLFxuICAgIGNsZWFySW52aXNpYmxlVmFsdWVzOiBcIkNsZWFyIGludmlzaWJsZSB2YWx1ZXNcIixcbiAgICBjb29raWVOYW1lOiBcIkNvb2tpZSBuYW1lICh0byBkaXNhYmxlIHJ1biBzdXJ2ZXkgdHdvIHRpbWVzIGxvY2FsbHkpXCIsXG4gICAgc2VuZFJlc3VsdE9uUGFnZU5leHQ6IFwiU2VuZCBzdXJ2ZXkgcmVzdWx0cyBvbiBwYWdlIG5leHRcIixcbiAgICBzdG9yZU90aGVyc0FzQ29tbWVudDogXCJTdG9yZSAnb3RoZXJzJyB2YWx1ZSBpbiBzZXBhcmF0ZSBmaWVsZFwiLFxuICAgIHNob3dQYWdlVGl0bGVzOiBcIlNob3cgcGFnZSB0aXRsZXNcIixcbiAgICBzaG93UGFnZU51bWJlcnM6IFwiU2hvdyBwYWdlIG51bWJlcnNcIixcbiAgICBwYWdlUHJldlRleHQ6IFwiUGFnZSBwcmV2aW91cyBidXR0b24gdGV4dFwiLFxuICAgIHBhZ2VOZXh0VGV4dDogXCJQYWdlIG5leHQgYnV0dG9uIHRleHRcIixcbiAgICBjb21wbGV0ZVRleHQ6IFwiQ29tcGxldGUgYnV0dG9uIHRleHRcIixcbiAgICBzdGFydFN1cnZleVRleHQ6IFwiU3RhcnQgYnV0dG9uIHRleHRcIixcbiAgICBzaG93TmF2aWdhdGlvbkJ1dHRvbnM6IFwiU2hvdyBuYXZpZ2F0aW9uIGJ1dHRvbnMgKGRlZmF1bHQgbmF2aWdhdGlvbilcIixcbiAgICBzaG93UHJldkJ1dHRvbjogXCJTaG93IHByZXZpb3VzIGJ1dHRvbiAodXNlciBtYXkgcmV0dXJuIG9uIHByZXZpb3VzIHBhZ2UpXCIsXG4gICAgZmlyc3RQYWdlSXNTdGFydGVkOiBcIlRoZSBmaXJzdCBwYWdlIGluIHRoZSBzdXJ2ZXkgaXMgYSBzdGFydGVkIHBhZ2UuXCIsXG4gICAgc2hvd0NvbXBsZXRlZFBhZ2U6IFwiU2hvdyB0aGUgY29tcGxldGVkIHBhZ2UgYXQgdGhlIGVuZCAoY29tcGxldGVkSHRtbClcIixcbiAgICBnb05leHRQYWdlQXV0b21hdGljOlxuICAgICAgXCJPbiBhbnN3ZXJpbmcgYWxsIHF1ZXN0aW9ucywgZ28gdG8gdGhlIG5leHQgcGFnZSBhdXRvbWF0aWNhbGx5XCIsXG4gICAgc2hvd1Byb2dyZXNzQmFyOiBcIlNob3cgcHJvZ3Jlc3MgYmFyXCIsXG4gICAgcXVlc3Rpb25UaXRsZUxvY2F0aW9uOiBcIlF1ZXN0aW9uIHRpdGxlIGxvY2F0aW9uXCIsXG4gICAgcmVxdWlyZWRUZXh0OiBcIlRoZSBxdWVzdGlvbiByZXF1aXJlZCBzeW1ib2wocylcIixcbiAgICBxdWVzdGlvblN0YXJ0SW5kZXg6IFwiUXVlc3Rpb24gc3RhcnQgaW5kZXggKDEsIDIgb3IgJ0EnLCAnYScpXCIsXG4gICAgc2hvd1F1ZXN0aW9uTnVtYmVyczogXCJTaG93IHF1ZXN0aW9uIG51bWJlcnNcIixcbiAgICBxdWVzdGlvblRpdGxlVGVtcGxhdGU6XG4gICAgICBcIlF1ZXN0aW9uIHRpdGxlIHRlbXBsYXRlLCBkZWZhdWx0IGlzOiAne25vfS4ge3JlcXVpcmV9IHt0aXRsZX0nXCIsXG4gICAgcXVlc3Rpb25FcnJvckxvY2F0aW9uOiBcIlF1ZXN0aW9uIGVycm9yIGxvY2F0aW9uXCIsXG4gICAgZm9jdXNGaXJzdFF1ZXN0aW9uQXV0b21hdGljOiBcIkZvY3VzIGZpcnN0IHF1ZXN0aW9uIG9uIGNoYW5naW5nIHRoZSBwYWdlXCIsXG4gICAgcXVlc3Rpb25zT3JkZXI6IFwiRWxlbWVudHMgb3JkZXIgb24gdGhlIHBhZ2VcIixcbiAgICBtYXhUaW1lVG9GaW5pc2g6IFwiTWF4aW11bSB0aW1lIHRvIGZpbmlzaCB0aGUgc3VydmV5XCIsXG4gICAgbWF4VGltZVRvRmluaXNoUGFnZTogXCJNYXhpbXVtIHRpbWUgdG8gZmluaXNoIGEgcGFnZSBpbiB0aGUgc3VydmV5XCIsXG4gICAgc2hvd1RpbWVyUGFuZWw6IFwiU2hvdyB0aW1lciBwYW5lbFwiLFxuICAgIHNob3dUaW1lclBhbmVsTW9kZTogXCJTaG93IHRpbWVyIHBhbmVsIG1vZGVcIixcbiAgICByZW5kZXJNb2RlOiBcIlJlbmRlciBtb2RlXCIsXG4gICAgYWxsb3dBZGRQYW5lbDogXCJBbGxvdyBhZGRpbmcgYSBwYW5lbFwiLFxuICAgIGFsbG93UmVtb3ZlUGFuZWw6IFwiQWxsb3cgcmVtb3ZpbmcgdGhlIHBhbmVsXCIsXG4gICAgcGFuZWxBZGRUZXh0OiBcIkFkZGluZyBwYW5lbCB0ZXh0XCIsXG4gICAgcGFuZWxSZW1vdmVUZXh0OiBcIlJlbW92aW5nIHBhbmVsIHRleHRcIixcbiAgICBpc1NpbmdsZVBhZ2U6IFwiU2hvdyBhbGwgZWxlbWVudHMgb24gb25lIHBhZ2VcIixcbiAgICBodG1sOiBcIkh0bWxcIixcbiAgICBleHByZXNzaW9uOiBcIkV4cHJlc3Npb25cIixcblxuICAgIG1pblZhbHVlOiBcIk1pbmltdW0gdmFsdWVcIixcbiAgICBtYXhWYWx1ZTogXCJNYXhpbXVtIHZhbHVlXCIsXG4gICAgbWluTGVuZ3RoOiBcIk1pbmltdW0gbGVuZ3RoXCIsXG4gICAgYWxsb3dEaWdpdHM6IFwiQWxsb3cgZGlnaXRzXCIsXG4gICAgbWluQ291bnQ6IFwiTWluaW11bSBjb3VudFwiLFxuICAgIG1heENvdW50OiBcIk1heGltdW0gY291bnRcIixcbiAgICByZWdleDogXCJSZWd1bGFyIGV4cHJlc3Npb25cIixcblxuICAgIHRvdGFsVGV4dDogXCJUb3RhbCB0ZXh0XCIsXG4gICAgdG90YWxUeXBlOiBcIlRvdGFsIHR5cGVcIixcbiAgICB0b3RhbEV4cHJlc3Npb246IFwiVG90YWwgZXhwcmVzc2lvblwiLFxuICAgIHRvdGFsRGlzcGxheVN0eWxlOiBcIlRvdGFsIGRpc3BsYXkgc3R5bGVcIixcbiAgICB0b3RhbEN1cnJlbmN5OiBcIlRvdGFsIGN1cnJlbmN5XCIsXG4gICAgdG90YWxGb3JtYXQ6IFwiVG90YWwgZm9ybWF0XCIsXG5cbiAgICB0YWJzOiB7XG4gICAgICBnZW5lcmFsOiBcIkdlbmVyYWxcIixcbiAgICAgIGZpbGVPcHRpb25zOiBcIk9wdGlvbnNcIixcbiAgICAgIGh0bWw6IFwiSHRtbCBFZGl0b3JcIixcbiAgICAgIGNvbHVtbnM6IFwiQ29sdW1uc1wiLFxuICAgICAgcm93czogXCJSb3dzXCIsXG4gICAgICBjaG9pY2VzOiBcIkNob2ljZXNcIixcbiAgICAgIGl0ZW1zOiBcIkl0ZW1zXCIsXG4gICAgICB2aXNpYmxlSWY6IFwiVmlzaWJsZSBJZlwiLFxuICAgICAgZW5hYmxlSWY6IFwiRW5hYmxlIElmXCIsXG4gICAgICByZXF1aXJlZElmOiBcIlJlcXVpcmVkIElmXCIsXG4gICAgICByYXRlVmFsdWVzOiBcIlJhdGUgVmFsdWVzXCIsXG4gICAgICBjaG9pY2VzQnlVcmw6IFwiQ2hvaWNlcyBmcm9tIFdlYlwiLFxuICAgICAgbWF0cml4Q2hvaWNlczogXCJEZWZhdWx0IENob2ljZXNcIixcbiAgICAgIG11bHRpcGxlVGV4dEl0ZW1zOiBcIlRleHQgSW5wdXRzXCIsXG4gICAgICB2YWxpZGF0b3JzOiBcIlZhbGlkYXRvcnNcIixcbiAgICAgIG5hdmlnYXRpb246IFwiTmF2aWdhdGlvblwiLFxuICAgICAgcXVlc3Rpb246IFwiUXVlc3Rpb25cIixcbiAgICAgIGNvbXBsZXRlZEh0bWw6IFwiQ29tcGxldGVkIEh0bWxcIixcbiAgICAgIGNvbXBsZXRlZEh0bWxPbkNvbmRpdGlvbjogXCJDb21wbGV0ZWQgSHRtbCBvbiBDb25kaXRpb25cIixcbiAgICAgIGxvYWRpbmdIdG1sOiBcIkxvYWRpbmcgSHRtbFwiLFxuICAgICAgdGltZXI6IFwiVGltZXIvUXVpelwiLFxuICAgICAgY2FsY3VsYXRlZFZhbHVlczogXCJDYWxjdWxhdGVkIFZhbHVlc1wiLFxuICAgICAgdHJpZ2dlcnM6IFwiVHJpZ2dlcnNcIixcbiAgICAgIHRlbXBsYXRlVGl0bGU6IFwiVGVtcGxhdGUgdGl0bGVcIixcbiAgICAgIHRvdGFsczogXCJUb3RhbHNcIlxuICAgIH0sXG4gICAgZWRpdFByb3BlcnR5OiBcIkVkaXQgcHJvcGVydHkgJ3swfSdcIixcbiAgICBpdGVtczogXCJbIEl0ZW1zOiB7MH0gXVwiLFxuXG4gICAgZW50ZXJOZXdWYWx1ZTogXCJQbGVhc2UsIGVudGVyIHRoZSB2YWx1ZS5cIixcbiAgICBub3F1ZXN0aW9uczogXCJUaGVyZSBpcyBubyBhbnkgcXVlc3Rpb24gaW4gdGhlIHN1cnZleS5cIixcbiAgICBjcmVhdGV0cmlnZ2VyOiBcIlBsZWFzZSBjcmVhdGUgYSB0cmlnZ2VyXCIsXG4gICAgdHJpZ2dlck9uOiBcIk9uIFwiLFxuICAgIHRyaWdnZXJNYWtlUGFnZXNWaXNpYmxlOiBcIk1ha2UgcGFnZXMgdmlzaWJsZTpcIixcbiAgICB0cmlnZ2VyTWFrZVF1ZXN0aW9uc1Zpc2libGU6IFwiTWFrZSBlbGVtZW50cyB2aXNpYmxlOlwiLFxuICAgIHRyaWdnZXJDb21wbGV0ZVRleHQ6IFwiQ29tcGxldGUgdGhlIHN1cnZleSBpZiBzdWNjZWVkLlwiLFxuICAgIHRyaWdnZXJOb3RTZXQ6IFwiVGhlIHRyaWdnZXIgaXMgbm90IHNldFwiLFxuICAgIHRyaWdnZXJSdW5JZjogXCJSdW4gaWZcIixcbiAgICB0cmlnZ2VyU2V0VG9OYW1lOiBcIkNoYW5nZSB2YWx1ZSBvZjogXCIsXG4gICAgdHJpZ2dlckZyb21OYW1lOiBcIkNvcHkgdmFsdWUgZnJvbTogXCIsXG4gICAgdHJpZ2dlclJ1bkV4cHJlc3Npb246IFwiUnVuIHRoaXMgRXhwcmVzc2lvbjpcIixcbiAgICB0cmlnZ2VyU2V0VmFsdWU6IFwidG86IFwiLFxuICAgIHRyaWdnZXJHb3RvTmFtZTogXCJHbyB0byB0aGUgcXVlc3Rpb246XCIsXG4gICAgdHJpZ2dlcklzVmFyaWFibGU6IFwiRG8gbm90IHB1dCB0aGUgdmFyaWFibGUgaW50byB0aGUgc3VydmV5IHJlc3VsdC5cIixcbiAgICB0cmlnZ2VyUnVuRXhwcmVzc2lvbkVtcHR5OiBcIlBsZWFzZSBlbnRlciBhIHZhbGlkIGV4cHJlc3Npb25cIlxuICB9LFxuICAvL1Byb3BlcnR5IHZhbHVlc1xuICBwdjoge1xuICAgIHRydWU6IFwidHJ1ZVwiLFxuICAgIGZhbHNlOiBcImZhbHNlXCIsXG4gICAgaW5oZXJpdDogXCJpbmhlcml0XCIsXG4gICAgc2hvdzogXCJzaG93XCIsXG4gICAgaGlkZTogXCJoaWRlXCIsXG4gICAgZGVmYXVsdDogXCJkZWZhdWx0XCIsXG4gICAgaW5pdGlhbDogXCJpbml0aWFsXCIsXG4gICAgcmFuZG9tOiBcInJhbmRvbVwiLFxuICAgIGNvbGxhcHNlZDogXCJjb2xsYXBzZWRcIixcbiAgICBleHBhbmRlZDogXCJleHBhbmRlZFwiLFxuICAgIG5vbmU6IFwibm9uZVwiLFxuICAgIGFzYzogXCJhc2NlbmRpbmdcIixcbiAgICBkZXNjOiBcImRlc2NlbmRpbmdcIixcbiAgICBpbmRldGVybWluYXRlOiBcImluZGV0ZXJtaW5hdGVcIixcbiAgICBkZWNpbWFsOiBcImRlY2ltYWxcIixcbiAgICBjdXJyZW5jeTogXCJjdXJyZW5jeVwiLFxuICAgIHBlcmNlbnQ6IFwicGVyY2VudFwiLFxuICAgIGZpcnN0RXhwYW5kZWQ6IFwiZmlyc3RFeHBhbmRlZFwiLFxuICAgIG9mZjogXCJvZmZcIixcbiAgICBvblBhbmVsOiBcIm9uUGFuZWxcIixcbiAgICBvblN1cnZleTogXCJvblN1cnZleVwiLFxuICAgIGxpc3Q6IFwibGlzdFwiLFxuICAgIHByb2dyZXNzVG9wOiBcInByb2dyZXNzVG9wXCIsXG4gICAgcHJvZ3Jlc3NCb3R0b206IFwicHJvZ3Jlc3NCb3R0b21cIixcbiAgICBwcm9ncmVzc1RvcEJvdHRvbTogXCJwcm9ncmVzc1RvcEJvdHRvbVwiLFxuICAgIGhvcml6b250YWw6IFwiaG9yaXpvbnRhbFwiLFxuICAgIHZlcnRpY2FsOiBcInZlcnRpY2FsXCIsXG4gICAgdG9wOiBcInRvcFwiLFxuICAgIGJvdHRvbTogXCJib3R0b21cIixcbiAgICB0b3BCb3R0b206IFwidG9wIGFuZCBib3R0b21cIixcbiAgICBsZWZ0OiBcImxlZnRcIixcbiAgICBjb2xvcjogXCJjb2xvclwiLFxuICAgIGRhdGU6IFwiZGF0ZVwiLFxuICAgIGRhdGV0aW1lOiBcImRhdGV0aW1lXCIsXG4gICAgXCJkYXRldGltZS1sb2NhbFwiOiBcImRhdGV0aW1lLWxvY2FsXCIsXG4gICAgZW1haWw6IFwiZW1haWxcIixcbiAgICBtb250aDogXCJtb250aFwiLFxuICAgIG51bWJlcjogXCJudW1iZXJcIixcbiAgICBwYXNzd29yZDogXCJwYXNzd29yZFwiLFxuICAgIHJhbmdlOiBcInJhbmdlXCIsXG4gICAgdGVsOiBcInRlbFwiLFxuICAgIHRleHQ6IFwidGV4dFwiLFxuICAgIHRpbWU6IFwidGltZVwiLFxuICAgIHVybDogXCJ1cmxcIixcbiAgICB3ZWVrOiBcIndlZWtcIixcbiAgICBoaWRkZW46IFwiaGlkZGVuXCIsXG4gICAgb246IFwib25cIixcbiAgICBvblBhZ2U6IFwib25QYWdlXCIsXG4gICAgZWRpdDogXCJlZGl0XCIsXG4gICAgZGlzcGxheTogXCJkaXNwbGF5XCIsXG4gICAgb25Db21wbGV0ZTogXCJvbkNvbXBsZXRlXCIsXG4gICAgb25IaWRkZW46IFwib25IaWRkZW5cIixcbiAgICBhbGw6IFwiYWxsXCIsXG4gICAgcGFnZTogXCJwYWdlXCIsXG4gICAgc3VydmV5OiBcInN1cnZleVwiLFxuICAgIG9uTmV4dFBhZ2U6IFwib25OZXh0UGFnZVwiLFxuICAgIG9uVmFsdWVDaGFuZ2VkOiBcIm9uVmFsdWVDaGFuZ2VkXCJcbiAgfSxcbiAgLy9PcGVyYXRvcnNcbiAgb3A6IHtcbiAgICBlbXB0eTogXCJpcyBlbXB0eVwiLFxuICAgIG5vdGVtcHR5OiBcImlzIG5vdCBlbXB0eVwiLFxuICAgIGVxdWFsOiBcImVxdWFsc1wiLFxuICAgIG5vdGVxdWFsOiBcIm5vdCBlcXVhbHNcIixcbiAgICBjb250YWluczogXCJjb250YWluc1wiLFxuICAgIG5vdGNvbnRhaW5zOiBcIm5vdCBjb250YWluc1wiLFxuICAgIGFueW9mOiBcImFueSBvZlwiLFxuICAgIGFsbG9mOiBcImFsbCBvZlwiLFxuICAgIGdyZWF0ZXI6IFwiZ3JlYXRlclwiLFxuICAgIGxlc3M6IFwibGVzc1wiLFxuICAgIGdyZWF0ZXJvcmVxdWFsOiBcImdyZWF0ZXIgb3IgZXF1YWxzXCIsXG4gICAgbGVzc29yZXF1YWw6IFwibGVzcyBvciBlcXVhbHNcIlxuICB9LFxuICAvL0VtYmVkIHdpbmRvd1xuICBldzoge1xuICAgIGFuZ3VsYXI6IFwiVXNlIEFuZ3VsYXIgdmVyc2lvblwiLFxuICAgIGpxdWVyeTogXCJVc2UgalF1ZXJ5IHZlcnNpb25cIixcbiAgICBrbm9ja291dDogXCJVc2UgS25vY2tvdXQgdmVyc2lvblwiLFxuICAgIHJlYWN0OiBcIlVzZSBSZWFjdCB2ZXJzaW9uXCIsXG4gICAgdnVlOiBcIlVzZSBWdWUgdmVyc2lvblwiLFxuICAgIGJvb3RzdHJhcDogXCJGb3IgYm9vdHN0cmFwIGZyYW1ld29ya1wiLFxuICAgIHN0YW5kYXJkOiBcIk5vIGJvb3RzdHJhcFwiLFxuICAgIHNob3dPblBhZ2U6IFwiU2hvdyBzdXJ2ZXkgb24gYSBwYWdlXCIsXG4gICAgc2hvd0luV2luZG93OiBcIlNob3cgc3VydmV5IGluIGEgd2luZG93XCIsXG4gICAgbG9hZEZyb21TZXJ2ZXI6IFwiTG9hZCBTdXJ2ZXkgSlNPTiBmcm9tIHNlcnZlclwiLFxuICAgIHRpdGxlU2NyaXB0OiBcIlNjcmlwdHMgYW5kIHN0eWxlc1wiLFxuICAgIHRpdGxlSHRtbDogXCJIVE1MXCIsXG4gICAgdGl0bGVKYXZhU2NyaXB0OiBcIkphdmFTY3JpcHRcIlxuICB9LFxuICAvL1Rlc3QgU3VydmV5XG4gIHRzOiB7XG4gICAgc2VsZWN0UGFnZTogXCJTZWxlY3QgdGhlIHBhZ2UgdG8gdGVzdCBpdDpcIixcbiAgICBzaG93SW52aXNpYmxlRWxlbWVudHM6IFwiU2hvdyBpbnZpc2libGUgZWxlbWVudHNcIlxuICB9LFxuICB2YWxpZGF0b3JzOiB7XG4gICAgYW5zd2VyY291bnR2YWxpZGF0b3I6IFwiYW5zd2VyIGNvdW50XCIsXG4gICAgZW1haWx2YWxpZGF0b3I6IFwiZS1tYWlsXCIsXG4gICAgZXhwcmVzc2lvbnZhbGlkYXRvcjogXCJleHByZXNzaW9uXCIsXG4gICAgbnVtZXJpY3ZhbGlkYXRvcjogXCJudW1lcmljXCIsXG4gICAgcmVnZXh2YWxpZGF0b3I6IFwicmVnZXhcIixcbiAgICB0ZXh0dmFsaWRhdG9yOiBcInRleHRcIlxuICB9LFxuICB0cmlnZ2Vyczoge1xuICAgIGNvbXBsZXRldHJpZ2dlcjogXCJjb21wbGV0ZSBzdXJ2ZXlcIixcbiAgICBzZXR2YWx1ZXRyaWdnZXI6IFwic2V0IHZhbHVlXCIsXG4gICAgY29weXZhbHVldHJpZ2dlcjogXCJjb3B5IHZhbHVlXCIsXG4gICAgc2tpcHRyaWdnZXI6IFwic2tpcCB0byBxdWVzdGlvblwiLFxuICAgIHJ1bmV4cHJlc3Npb250cmlnZ2VyOiBcInJ1biBleHByZXNzaW9uXCIsXG4gICAgdmlzaWJsZXRyaWdnZXI6IFwiY2hhbmdlIHZpc2liaWxpdHkgKGRlcHJlY2F0ZWQpXCJcbiAgfSxcbiAgLy9Qcm9wZXJ0aWVzXG4gIHA6IHtcbiAgICBuYW1lOiBcIm5hbWVcIixcbiAgICB0aXRsZToge1xuICAgICAgbmFtZTogXCJ0aXRsZVwiLFxuICAgICAgdGl0bGU6IFwiTGVhdmUgaXQgZW1wdHksIGlmIGl0IGlzIHRoZSBzYW1lIGFzICdOYW1lJ1wiXG4gICAgfSxcblxuICAgIG5hdmlnYXRpb25CdXR0b25zVmlzaWJpbGl0eTogXCJuYXZpZ2F0aW9uQnV0dG9uc1Zpc2liaWxpdHlcIixcbiAgICBxdWVzdGlvbnNPcmRlcjogXCJxdWVzdGlvbnNPcmRlclwiLFxuICAgIG1heFRpbWVUb0ZpbmlzaDogXCJtYXhUaW1lVG9GaW5pc2hcIixcblxuICAgIHZpc2libGU6IFwidmlzaWJsZVwiLFxuICAgIHZpc2libGVJZjogXCJ2aXNpYmxlSWZcIixcbiAgICBxdWVzdGlvblRpdGxlTG9jYXRpb246IFwicXVlc3Rpb25UaXRsZUxvY2F0aW9uXCIsXG4gICAgZGVzY3JpcHRpb246IFwiZGVzY3JpcHRpb25cIixcbiAgICBzdGF0ZTogXCJzdGF0ZVwiLFxuICAgIGlzUmVxdWlyZWQ6IFwiaXNSZXF1aXJlZFwiLFxuICAgIHJlcXVpcmVkSWY6IFwicmVxdWlyZWRJZlwiLFxuICAgIGluZGVudDogXCJpbmRlbnRcIixcbiAgICByZXF1aXJlZEVycm9yVGV4dDogXCJyZXF1aXJlZEVycm9yVGV4dFwiLFxuICAgIHN0YXJ0V2l0aE5ld0xpbmU6IFwic3RhcnRXaXRoTmV3TGluZVwiLFxuICAgIGlubmVySW5kZW50OiBcImlubmVySW5kZW50XCIsXG4gICAgcGFnZTogXCJwYWdlXCIsXG5cbiAgICB3aWR0aDogXCJ3aWR0aFwiLFxuXG4gICAgY29tbWVudFRleHQ6IFwiY29tbWVudFRleHRcIixcbiAgICB2YWx1ZU5hbWU6IFwidmFsdWVOYW1lXCIsXG4gICAgZW5hYmxlSWY6IFwiZW5hYmxlSWZcIixcbiAgICBkZWZhdWx0VmFsdWU6IFwiZGVmYXVsdFZhbHVlXCIsXG4gICAgY29ycmVjdEFuc3dlcjogXCJjb3JyZWN0QW5zd2VyXCIsXG4gICAgcmVhZE9ubHk6IFwicmVhZE9ubHlcIixcbiAgICB2YWxpZGF0b3JzOiBcInZhbGlkYXRvcnNcIixcbiAgICB0aXRsZUxvY2F0aW9uOiBcInRpdGxlTG9jYXRpb25cIixcblxuICAgIGhhc0NvbW1lbnQ6IFwiaGFzQ29tbWVudFwiLFxuICAgIGhhc090aGVyOiBcImhhc090aGVyXCIsXG4gICAgY2hvaWNlczogXCJjaG9pY2VzXCIsXG4gICAgY2hvaWNlc09yZGVyOiBcImNob2ljZXNPcmRlclwiLFxuICAgIGNob2ljZXNCeVVybDogXCJjaG9pY2VzQnlVcmxcIixcbiAgICBvdGhlclRleHQ6IFwib3RoZXJUZXh0XCIsXG4gICAgb3RoZXJFcnJvclRleHQ6IFwib3RoZXJFcnJvclRleHRcIixcbiAgICBzdG9yZU90aGVyc0FzQ29tbWVudDogXCJzdG9yZU90aGVyc0FzQ29tbWVudFwiLFxuXG4gICAgbGFiZWw6IFwibGFiZWxcIixcbiAgICBzaG93VGl0bGU6IFwic2hvd1RpdGxlXCIsXG4gICAgdmFsdWVUcnVlOiBcInZhbHVlVHJ1ZVwiLFxuICAgIHZhbHVlRmFsc2U6IFwidmFsdWVGYWxzZVwiLFxuXG4gICAgY29sczogXCJjb2xzXCIsXG4gICAgcm93czogXCJyb3dzXCIsXG4gICAgcGxhY2VIb2xkZXI6IFwicGxhY2VIb2xkZXJcIixcblxuICAgIG9wdGlvbnNDYXB0aW9uOiBcIm9wdGlvbnNDYXB0aW9uXCIsXG5cbiAgICBleHByZXNzaW9uOiBcImV4cHJlc3Npb25cIixcbiAgICBmb3JtYXQ6IFwiZm9ybWF0XCIsXG4gICAgZGlzcGxheVN0eWxlOiBcImRpc3BsYXlTdHlsZVwiLFxuICAgIGN1cnJlbmN5OiBcImN1cnJlbmN5XCIsXG4gICAgdXNlR3JvdXBpbmc6IFwidXNlR3JvdXBpbmdcIixcblxuICAgIHNob3dQcmV2aWV3OiBcInNob3dQcmV2aWV3XCIsXG4gICAgYWxsb3dNdWx0aXBsZTogXCJhbGxvd011bHRpcGxlXCIsXG4gICAgaW1hZ2VIZWlnaHQ6IFwiaW1hZ2VIZWlnaHRcIixcbiAgICBpbWFnZVdpZHRoOiBcImltYWdlV2lkdGhcIixcbiAgICBzdG9yZURhdGFBc1RleHQ6IFwic3RvcmVEYXRhQXNUZXh0XCIsXG4gICAgbWF4U2l6ZTogXCJtYXhTaXplXCIsXG5cbiAgICBodG1sOiBcImh0bWxcIixcblxuICAgIGNvbHVtbnM6IFwiY29sdW1uc1wiLFxuICAgIGNlbGxzOiBcImNlbGxzXCIsXG4gICAgaXNBbGxSb3dSZXF1aXJlZDogXCJpc0FsbFJvd1JlcXVpcmVkXCIsXG5cbiAgICBob3Jpem9udGFsU2Nyb2xsOiBcImhvcml6b250YWxTY3JvbGxcIixcbiAgICBjZWxsVHlwZTogXCJjZWxsVHlwZVwiLFxuICAgIGNvbHVtbnNMYXlvdXQ6IFwiY29sdW1uc0xheW91dFwiLFxuICAgIGNvbHVtbkNvbENvdW50OiBcImNvbHVtbkNvbENvdW50XCIsXG4gICAgY29sdW1uTWluV2lkdGg6IFwiY29sdW1uTWluV2lkdGhcIixcblxuICAgIHJvd0NvdW50OiBcInJvd0NvdW50XCIsXG4gICAgbWluUm93Q291bnQ6IFwibWluUm93Q291bnRcIixcbiAgICBtYXhSb3dDb3VudDogXCJtYXhSb3dDb3VudFwiLFxuICAgIGtleU5hbWU6IFwia2V5TmFtZVwiLFxuICAgIGtleUR1cGxpY2F0aW9uRXJyb3I6IFwia2V5RHVwbGljYXRpb25FcnJvclwiLFxuICAgIGNvbmZpcm1EZWxldGU6IFwiY29uZmlybURlbGV0ZVwiLFxuICAgIGNvbmZpcm1EZWxldGVUZXh0OiBcImNvbmZpcm1EZWxldGVUZXh0XCIsXG4gICAgYWRkUm93TG9jYXRpb246IFwiYWRkUm93TG9jYXRpb25cIixcbiAgICBhZGRSb3dUZXh0OiBcImFkZFJvd1RleHRcIixcbiAgICByZW1vdmVSb3dUZXh0OiBcInJlbW92ZVJvd1RleHRcIixcblxuICAgIGl0ZW1zOiBcIml0ZW1zXCIsXG4gICAgaXRlbVNpemU6IFwiaXRlbVNpemVcIixcbiAgICBjb2xDb3VudDogXCJjb2xDb3VudFwiLFxuXG4gICAgdGVtcGxhdGVUaXRsZTogXCJ0ZW1wbGF0ZVRpdGxlXCIsXG4gICAgdGVtcGxhdGVEZXNjcmlwdGlvbjogXCJ0ZW1wbGF0ZURlc2NyaXB0aW9uXCIsXG4gICAgYWxsb3dBZGRQYW5lbDogXCJhbGxvd0FkZFBhbmVsXCIsXG4gICAgYWxsb3dSZW1vdmVQYW5lbDogXCJhbGxvd1JlbW92ZVBhbmVsXCIsXG4gICAgcGFuZWxDb3VudDogXCJwYW5lbENvdW50XCIsXG4gICAgbWluUGFuZWxDb3VudDogXCJtaW5QYW5lbENvdW50XCIsXG4gICAgbWF4UGFuZWxDb3VudDogXCJtYXhQYW5lbENvdW50XCIsXG4gICAgcGFuZWxzU3RhdGU6IFwicGFuZWxzU3RhdGVcIixcbiAgICBwYW5lbEFkZFRleHQ6IFwicGFuZWxBZGRUZXh0XCIsXG4gICAgcGFuZWxSZW1vdmVUZXh0OiBcInBhbmVsUmVtb3ZlVGV4dFwiLFxuICAgIHBhbmVsUHJldlRleHQ6IFwicGFuZWxQcmV2VGV4dFwiLFxuICAgIHBhbmVsTmV4dFRleHQ6IFwicGFuZWxOZXh0VGV4dFwiLFxuICAgIHNob3dRdWVzdGlvbk51bWJlcnM6IFwic2hvd1F1ZXN0aW9uTnVtYmVyc1wiLFxuICAgIHNob3dSYW5nZUluUHJvZ3Jlc3M6IFwic2hvd1JhbmdlSW5Qcm9ncmVzc1wiLFxuICAgIHJlbmRlck1vZGU6IFwicmVuZGVyTW9kZVwiLFxuICAgIHRlbXBsYXRlVGl0bGVMb2NhdGlvbjogXCJ0ZW1wbGF0ZVRpdGxlTG9jYXRpb25cIixcblxuICAgIHJhdGVWYWx1ZXM6IFwicmF0ZVZhbHVlc1wiLFxuICAgIHJhdGVNaW46IFwicmF0ZU1pblwiLFxuICAgIHJhdGVNYXg6IFwicmF0ZU1heFwiLFxuICAgIHJhdGVTdGVwOiBcInJhdGVTdGVwXCIsXG4gICAgbWluUmF0ZURlc2NyaXB0aW9uOiBcIm1pblJhdGVEZXNjcmlwdGlvblwiLFxuICAgIG1heFJhdGVEZXNjcmlwdGlvbjogXCJtYXhSYXRlRGVzY3JpcHRpb25cIixcblxuICAgIGlucHV0VHlwZTogXCJpbnB1dFR5cGVcIixcbiAgICBzaXplOiBcInNpemVcIixcblxuICAgIGxvY2FsZTogXCJsb2NhbGVcIixcbiAgICBmb2N1c0ZpcnN0UXVlc3Rpb25BdXRvbWF0aWM6IFwiZm9jdXNGaXJzdFF1ZXN0aW9uQXV0b21hdGljXCIsXG4gICAgY29tcGxldGVkSHRtbDogXCJjb21wbGV0ZWRIdG1sXCIsXG4gICAgY29tcGxldGVkQmVmb3JlSHRtbDogXCJjb21wbGV0ZWRCZWZvcmVIdG1sXCIsXG4gICAgbG9hZGluZ0h0bWw6IFwibG9hZGluZ0h0bWxcIixcbiAgICB0cmlnZ2VyczogXCJ0cmlnZ2Vyc1wiLFxuICAgIGNvb2tpZU5hbWU6IFwiY29va2llTmFtZVwiLFxuICAgIHNlbmRSZXN1bHRPblBhZ2VOZXh0OiBcInNlbmRSZXN1bHRPblBhZ2VOZXh0XCIsXG4gICAgc2hvd05hdmlnYXRpb25CdXR0b25zOiBcInNob3dOYXZpZ2F0aW9uQnV0dG9uc1wiLFxuICAgIHNob3dQcmV2QnV0dG9uOiBcInNob3dQcmV2QnV0dG9uXCIsXG4gICAgc2hvd1BhZ2VUaXRsZXM6IFwic2hvd1BhZ2VUaXRsZXNcIixcbiAgICBzaG93Q29tcGxldGVkUGFnZTogXCJzaG93Q29tcGxldGVkUGFnZVwiLFxuICAgIHNob3dQYWdlTnVtYmVyczogXCJzaG93UGFnZU51bWJlcnNcIixcbiAgICBxdWVzdGlvbkVycm9yTG9jYXRpb246IFwicXVlc3Rpb25FcnJvckxvY2F0aW9uXCIsXG4gICAgc2hvd1Byb2dyZXNzQmFyOiBcInNob3dQcm9ncmVzc0JhclwiLFxuICAgIG1vZGU6IFwibW9kZVwiLFxuICAgIGdvTmV4dFBhZ2VBdXRvbWF0aWM6IFwiZ29OZXh0UGFnZUF1dG9tYXRpY1wiLFxuICAgIGNoZWNrRXJyb3JzTW9kZTogXCJjaGVja0Vycm9yc01vZGVcIixcbiAgICBjbGVhckludmlzaWJsZVZhbHVlczogXCJjbGVhckludmlzaWJsZVZhbHVlc1wiLFxuICAgIHN0YXJ0U3VydmV5VGV4dDogXCJzdGFydFN1cnZleVRleHRcIixcbiAgICBwYWdlUHJldlRleHQ6IFwicGFnZVByZXZUZXh0XCIsXG4gICAgcGFnZU5leHRUZXh0OiBcInBhZ2VOZXh0VGV4dFwiLFxuICAgIGNvbXBsZXRlVGV4dDogXCJjb21wbGV0ZVRleHRcIixcbiAgICByZXF1aXJlZFRleHQ6IFwicmVxdWlyZWRUZXh0XCIsXG4gICAgcXVlc3Rpb25TdGFydEluZGV4OiBcInF1ZXN0aW9uU3RhcnRJbmRleFwiLFxuICAgIHF1ZXN0aW9uVGl0bGVUZW1wbGF0ZTogXCJxdWVzdGlvblRpdGxlVGVtcGxhdGVcIixcbiAgICBmaXJzdFBhZ2VJc1N0YXJ0ZWQ6IFwiZmlyc3RQYWdlSXNTdGFydGVkXCIsXG4gICAgaXNTaW5nbGVQYWdlOiBcImlzU2luZ2xlUGFnZVwiLFxuICAgIG1heFRpbWVUb0ZpbmlzaFBhZ2U6IFwibWF4VGltZVRvRmluaXNoUGFnZVwiLFxuICAgIHNob3dUaW1lclBhbmVsOiBcInNob3dUaW1lclBhbmVsXCIsXG4gICAgc2hvd1RpbWVyUGFuZWxNb2RlOiBcInNob3dUaW1lclBhbmVsTW9kZVwiLFxuXG4gICAgZGVmYXVsdFBhbmVsVmFsdWU6IFwiZGVmYXVsdFBhbmVsVmFsdWVcIixcbiAgICBkZWZhdWx0Um93VmFsdWU6IFwiZGVmYXVsdFJvd1ZhbHVlXCIsXG4gICAgaGFzTm9uZTogXCJoYXNOb25lXCIsXG4gICAgbm9uZVRleHQ6IFwibm9uZVRleHRcIixcblxuICAgIHRleHQ6IFwidGV4dFwiXG4gIH1cbn07XG4vL1VuY29tbWVudCB0aGlzIGxpbmUgb24gY3JlYXRpbmcgYSB0cmFuc2xhdGlvbiBmaWxlLiBZb3Ugc2hvdWxkIHJlcGxhY2UgXCJlblwiIGFuZCBlblN0cmluZ3Mgd2l0aCB5b3VyIGxvY2FsZSAoXCJmclwiLCBcImRlXCIgYW5kIHNvIG9uKSBhbmQgeW91ciB2YXJpYWJsZS5cbi8vZWRpdG9yTG9jYWxpemF0aW9uLmxvY2FsZXNbXCJlblwiXSA9IGVuU3RyaW5ncztcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9sb2NhbGl6YXRpb24vZW5nbGlzaC50cyIsImltcG9ydCAqIGFzIGtvIGZyb20gXCJrbm9ja291dFwiO1xuaW1wb3J0ICogYXMgU3VydmV5IGZyb20gXCJzdXJ2ZXkta25vY2tvdXRcIjtcbmltcG9ydCB7IFN1cnZleVByb3BlcnR5Q29uZGl0aW9uRWRpdG9yIH0gZnJvbSBcIi4vcHJvcGVydHlFZGl0b3JzL3Byb3BlcnR5Q29uZGl0aW9uRWRpdG9yXCI7XG5pbXBvcnQgeyBTdXJ2ZXlQcm9wZXJ0eVRyaWdnZXJzRWRpdG9yIH0gZnJvbSBcIi4vcHJvcGVydHlFZGl0b3JzL3Byb3BlcnR5VHJpZ2dlcnNFZGl0b3JcIjtcbmltcG9ydCB7IFN1cnZleUVsZW1lbnRTZWxlY3RvciB9IGZyb20gXCIuL3Byb3BlcnR5RWRpdG9ycy9zdXJ2ZXlFbGVtZW50U2VsZWN0b3JcIjtcbmltcG9ydCB7IElTdXJ2ZXlPYmplY3RFZGl0b3JPcHRpb25zIH0gZnJvbSBcIi4vcHJvcGVydHlFZGl0b3JzL3Byb3BlcnR5RWRpdG9yQmFzZVwiO1xuaW1wb3J0IHsgZWRpdG9yTG9jYWxpemF0aW9uIH0gZnJvbSBcIi4vZWRpdG9yTG9jYWxpemF0aW9uXCI7XG5pbXBvcnQgeyBFeHByZXNzaW9uVG9EaXNwbGF5VGV4dCB9IGZyb20gXCIuL2V4cHJlc3Npb25Ub0Rpc3BsYXlUZXh0XCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVN1cnZleUxvZ2ljVHlwZSB7XG4gIG5hbWU6IHN0cmluZztcbiAgYmFzZUNsYXNzOiBzdHJpbmc7XG4gIHByb3BlcnR5TmFtZTogc3RyaW5nO1xuICB0ZW1wbGF0ZU5hbWU/OiBzdHJpbmc7XG4gIHNob3dJblVJPzogYm9vbGVhbjtcbiAgc2hvd0lmPzogKHN1cnZleTogU3VydmV5LlN1cnZleU1vZGVsKSA9PiBib29sZWFuO1xuICBjcmVhdGVOZXdFbGVtZW50PzogKHN1cnZleTogU3VydmV5LlN1cnZleU1vZGVsKSA9PiBTdXJ2ZXkuQmFzZTtcbiAgc2F2ZUVsZW1lbnQ/OiAoc3VydmV5OiBTdXJ2ZXkuU3VydmV5TW9kZWwsIG9wOiBTdXJ2ZXlMb2dpY09wZXJhdGlvbikgPT4gdm9pZDtcbiAgY3JlYXRlVGVtcGxhdGVPYmplY3Q/OiAoZWxlbWVudDogU3VydmV5LkJhc2UpID0+IGFueTtcbiAgaXNVbmlxdWVJdGVtPzogYm9vbGVhbjtcbiAgcXVlc3Rpb25OYW1lcz86IEFycmF5PHN0cmluZz47XG4gIGdldERpc3BsYXlUZXh0PzogKFxuICAgIGVsZW1lbnQ6IFN1cnZleS5CYXNlLFxuICAgIGZvcm1hdFN0cjogc3RyaW5nLFxuICAgIGx0OiBTdXJ2ZXlMb2dpY1R5cGVcbiAgKSA9PiBzdHJpbmc7XG4gIGdldERpc3BsYXlUZXh0TmFtZT86IChlbGVtZW50OiBTdXJ2ZXkuQmFzZSkgPT4gc3RyaW5nO1xufVxuXG5mdW5jdGlvbiBnZXRMb2dpY1N0cmluZyhuYW1lOiBzdHJpbmcpIHtcbiAgcmV0dXJuIGVkaXRvckxvY2FsaXphdGlvbi5nZXRTdHJpbmcoXCJlZC5sZy5cIiArIG5hbWUpO1xufVxuXG5leHBvcnQgY2xhc3MgU3VydmV5TG9naWNUeXBlIHtcbiAgcHVibGljIHN0YXRpYyBleHByZXNzaW9uVG9EaXNwbGF5VGV4dChcbiAgICBzdXJ2ZXk6IFN1cnZleS5TdXJ2ZXlNb2RlbCxcbiAgICBvcHRpb25zOiBJU3VydmV5T2JqZWN0RWRpdG9yT3B0aW9ucyxcbiAgICBleHByZXNzaW9uOiBzdHJpbmdcbiAgKTogc3RyaW5nIHtcbiAgICBpZiAoIW9wdGlvbnMgfHwgIW9wdGlvbnMuc2hvd1RpdGxlc0luRXhwcmVzc2lvbnMpIHJldHVybiBleHByZXNzaW9uO1xuICAgIHJldHVybiBuZXcgRXhwcmVzc2lvblRvRGlzcGxheVRleHQoc3VydmV5LCBvcHRpb25zKS50b0Rpc3BsYXlUZXh0KFxuICAgICAgZXhwcmVzc2lvblxuICAgICk7XG4gIH1cbiAgcHJpdmF0ZSBoYXNVbmlxdWVJdGVtOiBib29sZWFuID0gZmFsc2U7XG4gIHB1YmxpYyBrb1Zpc2libGU6IGFueTtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBsb2dpY1R5cGU6IElTdXJ2ZXlMb2dpY1R5cGUsXG4gICAgcHVibGljIHN1cnZleTogU3VydmV5LlN1cnZleU1vZGVsLFxuICAgIHB1YmxpYyBvcHRpb25zOiBJU3VydmV5T2JqZWN0RWRpdG9yT3B0aW9ucyA9IG51bGxcbiAgKSB7XG4gICAgdGhpcy5rb1Zpc2libGUgPSBrby5vYnNlcnZhYmxlKHRydWUpO1xuICAgIHRoaXMudXBkYXRlKCk7XG4gIH1cbiAgcHVibGljIGdldCBuYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMubG9naWNUeXBlLm5hbWU7XG4gIH1cbiAgcHVibGljIGdldCBiYXNlQ2xhc3MoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5sb2dpY1R5cGUuYmFzZUNsYXNzO1xuICB9XG4gIHB1YmxpYyBnZXQgcHJvcGVydHlOYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMubG9naWNUeXBlLnByb3BlcnR5TmFtZTtcbiAgfVxuICBwdWJsaWMgZ2V0IHRlbXBsYXRlTmFtZSgpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLmlzVHJpZ2dlcikgcmV0dXJuIFwicHJvcGVydHllZGl0b3Jjb250ZW50LXRyaWdnZXItY29udGVudFwiO1xuICAgIHJldHVybiAhIXRoaXMubG9naWNUeXBlLnRlbXBsYXRlTmFtZVxuICAgICAgPyB0aGlzLmxvZ2ljVHlwZS50ZW1wbGF0ZU5hbWVcbiAgICAgIDogXCJlbGVtZW50c2VsZWN0b3JcIjtcbiAgfVxuICBwdWJsaWMgdXBkYXRlKG9wZXJhdGlvbnM6IEFycmF5PFN1cnZleUxvZ2ljT3BlcmF0aW9uPiA9IG51bGwpIHtcbiAgICB0aGlzLmhhc1VuaXF1ZUl0ZW0gPSB0aGlzLmlzVW5pcXVlSXRlbSAmJiB0aGlzLmhhc1RoaXNPcGVyYXRpb24ob3BlcmF0aW9ucyk7XG4gICAgdGhpcy5rb1Zpc2libGUodGhpcy52aXNpYmxlKTtcbiAgfVxuICBwdWJsaWMgZ2V0IHZpc2libGUoKTogYm9vbGVhbiB7XG4gICAgaWYgKCF0aGlzLnNob3dJblVJKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKHRoaXMuaGFzVW5pcXVlSXRlbSkgcmV0dXJuIGZhbHNlO1xuICAgIGlmICghIXRoaXMubG9naWNUeXBlLnNob3dJZikgcmV0dXJuIHRoaXMubG9naWNUeXBlLnNob3dJZih0aGlzLnN1cnZleSk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcHVibGljIGdldCBzaG93VGl0bGVzSW5FeHByZXNzaW9uKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIXRoaXMub3B0aW9ucyAmJiB0aGlzLm9wdGlvbnMuc2hvd1RpdGxlc0luRXhwcmVzc2lvbnM7XG4gIH1cbiAgcHVibGljIGdldCBoYXNJdGVtU2VsZWN0b3IoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhdGhpcy5iYXNlQ2xhc3MgJiYgdGhpcy5zaG93SW5VSSAmJiAhdGhpcy5jYW5DcmVhdGVOZXdFbGVtZW50KCk7XG4gIH1cbiAgcHVibGljIGNyZWF0ZUl0ZW1TZWxlY3RvcigpOiBTdXJ2ZXlFbGVtZW50U2VsZWN0b3Ige1xuICAgIGlmICghdGhpcy5oYXNJdGVtU2VsZWN0b3IpIHJldHVybiBudWxsO1xuICAgIHZhciByZXMgPSBuZXcgU3VydmV5RWxlbWVudFNlbGVjdG9yKFxuICAgICAgdGhpcy5zdXJ2ZXksXG4gICAgICB0aGlzLmJhc2VDbGFzcyxcbiAgICAgIHRoaXMuc2hvd1RpdGxlc0luRXhwcmVzc2lvblxuICAgICk7XG4gICAgcmVzLmRpc2FibGVkUHJvcGVydHlOYW1lID0gdGhpcy5wcm9wZXJ0eU5hbWU7XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuICBwdWJsaWMgZ2V0IHNob3dJblVJKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmxvZ2ljVHlwZS5zaG93SW5VSSAhPT0gZmFsc2U7XG4gIH1cbiAgcHJpdmF0ZSBjYW5DcmVhdGVOZXdFbGVtZW50KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIXRoaXMubG9naWNUeXBlLmNyZWF0ZU5ld0VsZW1lbnQgfHwgdGhpcy5pc1RyaWdnZXI7XG4gIH1cbiAgcHJpdmF0ZSBnZXQgaXNUcmlnZ2VyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIXRoaXMuYmFzZUNsYXNzICYmIHRoaXMuYmFzZUNsYXNzLmluZGV4T2YoXCJ0cmlnZ2VyXCIpID4gLTE7XG4gIH1cbiAgcHVibGljIGNyZWF0ZU5ld0VsZW1lbnQoc3VydmV5OiBTdXJ2ZXkuU3VydmV5TW9kZWwpOiBTdXJ2ZXkuQmFzZSB7XG4gICAgaWYgKCEhdGhpcy5sb2dpY1R5cGUuY3JlYXRlTmV3RWxlbWVudClcbiAgICAgIHJldHVybiB0aGlzLmxvZ2ljVHlwZS5jcmVhdGVOZXdFbGVtZW50KHN1cnZleSk7XG4gICAgaWYgKHRoaXMuaXNUcmlnZ2VyKSByZXR1cm4gdGhpcy5jcmVhdGVUcmlnZ2VyRWxlbWVudChzdXJ2ZXkpO1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHB1YmxpYyBzYXZlRWxlbWVudChvcDogU3VydmV5TG9naWNPcGVyYXRpb24pOiB2b2lkIHtcbiAgICBpZiAoISF0aGlzLmxvZ2ljVHlwZS5zYXZlRWxlbWVudCkge1xuICAgICAgdGhpcy5sb2dpY1R5cGUuc2F2ZUVsZW1lbnQodGhpcy5zdXJ2ZXksIG9wKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuaXNUcmlnZ2VyKSB7XG4gICAgICB0aGlzLnNhdmVUcmlnZ2VyRWxlbWVudChvcCk7XG4gICAgfVxuICB9XG4gIHB1YmxpYyBjcmVhdGVUZW1wbGF0ZU9iamVjdChlbGVtZW50OiBTdXJ2ZXkuQmFzZSk6IGFueSB7XG4gICAgaWYgKCEhdGhpcy5sb2dpY1R5cGUuY3JlYXRlVGVtcGxhdGVPYmplY3QpXG4gICAgICByZXR1cm4gdGhpcy5sb2dpY1R5cGUuY3JlYXRlVGVtcGxhdGVPYmplY3QoZWxlbWVudCk7XG4gICAgaWYgKHRoaXMuaXNUcmlnZ2VyKSByZXR1cm4gdGhpcy5jcmVhdGVUcmlnZ2VyVGVtcGxhdGVPYmplY3QoZWxlbWVudCk7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgcHVibGljIGdldCBpc1VuaXF1ZUl0ZW0oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMubG9naWNUeXBlLmlzVW5pcXVlSXRlbSA9PT0gdHJ1ZTtcbiAgfVxuICBwdWJsaWMgZ2V0IHF1ZXN0aW9uTmFtZXMoKTogQXJyYXk8c3RyaW5nPiB7XG4gICAgcmV0dXJuIHRoaXMubG9naWNUeXBlLnF1ZXN0aW9uTmFtZXM7XG4gIH1cbiAgcHVibGljIGdldCBkaXNwbGF5TmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBnZXRMb2dpY1N0cmluZyh0aGlzLm5hbWUgKyBcIk5hbWVcIik7XG4gIH1cbiAgcHVibGljIGdldCBkZXNjcmlwdGlvbigpOiBzdHJpbmcge1xuICAgIHJldHVybiBnZXRMb2dpY1N0cmluZyh0aGlzLm5hbWUgKyBcIkRlc2NyaXB0aW9uXCIpO1xuICB9XG4gIHB1YmxpYyBnZXREaXNwbGF5VGV4dChlbGVtZW50OiBTdXJ2ZXkuQmFzZSk6IHN0cmluZyB7XG4gICAgdmFyIHN0ciA9IGdldExvZ2ljU3RyaW5nKHRoaXMubmFtZSArIFwiVGV4dFwiKTtcbiAgICBpZiAoISF0aGlzLmxvZ2ljVHlwZS5nZXREaXNwbGF5VGV4dClcbiAgICAgIHJldHVybiB0aGlzLmxvZ2ljVHlwZS5nZXREaXNwbGF5VGV4dChlbGVtZW50LCBzdHIsIHRoaXMpO1xuICAgIHZhciBuYW1lID0gXCJcIjtcbiAgICBpZiAoISF0aGlzLmxvZ2ljVHlwZS5nZXREaXNwbGF5VGV4dE5hbWUpIHtcbiAgICAgIG5hbWUgPSB0aGlzLmxvZ2ljVHlwZS5nZXREaXNwbGF5VGV4dE5hbWUoZWxlbWVudCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICghIWVsZW1lbnQgJiYgISFlbGVtZW50W1wibmFtZVwiXSkge1xuICAgICAgICBuYW1lID0gZWxlbWVudFtcIm5hbWVcIl07XG4gICAgICB9XG4gICAgfVxuICAgIGlmICghIW5hbWUpIHtcbiAgICAgIHJldHVybiBzdHJbXCJmb3JtYXRcIl0odGhpcy5mb3JtYXRFbE5hbWUobmFtZSkpO1xuICAgIH1cbiAgICByZXR1cm4gc3RyO1xuICB9XG4gIHB1YmxpYyBmb3JtYXRFbE5hbWUobmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBpZiAodGhpcy5zaG93VGl0bGVzSW5FeHByZXNzaW9uICYmICEhdGhpcy5zdXJ2ZXkpIHtcbiAgICAgIHZhciBxdWVzdGlvbiA9IHRoaXMuc3VydmV5LmdldFF1ZXN0aW9uQnlOYW1lKG5hbWUpO1xuICAgICAgaWYgKCEhcXVlc3Rpb24gJiYgISFxdWVzdGlvbi50aXRsZSkge1xuICAgICAgICBuYW1lID0gcXVlc3Rpb24udGl0bGU7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBcIntcIiArIG5hbWUgKyBcIn1cIjtcbiAgfVxuICBwdWJsaWMgZm9ybWF0RXhwcmVzc2lvbihleHByZXNzaW9uOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBTdXJ2ZXlMb2dpY1R5cGUuZXhwcmVzc2lvblRvRGlzcGxheVRleHQoXG4gICAgICB0aGlzLnN1cnZleSxcbiAgICAgIHRoaXMub3B0aW9ucyxcbiAgICAgIGV4cHJlc3Npb25cbiAgICApO1xuICB9XG4gIHByaXZhdGUgaGFzVGhpc09wZXJhdGlvbihvcGVyYXRpb25zOiBBcnJheTxTdXJ2ZXlMb2dpY09wZXJhdGlvbj4pOiBib29sZWFuIHtcbiAgICBpZiAoIW9wZXJhdGlvbnMpIHJldHVybiBmYWxzZTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG9wZXJhdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChvcGVyYXRpb25zW2ldLmxvZ2ljVHlwZSA9PSB0aGlzKSByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHByaXZhdGUgY3JlYXRlVHJpZ2dlckVsZW1lbnQoc3VydmV5OiBTdXJ2ZXkuU3VydmV5TW9kZWwpOiBTdXJ2ZXkuQmFzZSB7XG4gICAgdmFyIHJlcyA9IDxTdXJ2ZXkuU3VydmV5VHJpZ2dlcj4oXG4gICAgICBTdXJ2ZXkuU2VyaWFsaXplci5jcmVhdGVDbGFzcyh0aGlzLmJhc2VDbGFzcylcbiAgICApO1xuICAgIHJlc1tcInN1cnZleVwiXSA9IHN1cnZleTtcbiAgICByZXMuc2V0T3duZXIoc3VydmV5KTtcbiAgICByZXR1cm4gcmVzO1xuICB9XG4gIHByaXZhdGUgc2F2ZVRyaWdnZXJFbGVtZW50KG9wOiBTdXJ2ZXlMb2dpY09wZXJhdGlvbikge1xuICAgIHZhciB0cmlnZ2VyID0gPFN1cnZleS5TdXJ2ZXlUcmlnZ2VyPm9wLmVsZW1lbnQ7XG4gICAgb3AudGVtcGxhdGVPYmplY3QuYXBwbHlQcm9wZXJ0aWVzKHRyaWdnZXIpO1xuICAgIHZhciBzdXJ2ZXkgPSB0aGlzLnN1cnZleTtcbiAgICBpZiAoXG4gICAgICAhIXN1cnZleSAmJlxuICAgICAgc3VydmV5LnRyaWdnZXJzLmluZGV4T2YodHJpZ2dlcikgPCAwICYmXG4gICAgICAhIXRyaWdnZXIuZXhwcmVzc2lvblxuICAgICkge1xuICAgICAgc3VydmV5LnRyaWdnZXJzLnB1c2godHJpZ2dlcik7XG4gICAgfVxuICB9XG4gIHByaXZhdGUgY3JlYXRlVHJpZ2dlclRlbXBsYXRlT2JqZWN0KGVsZW1lbnQ6IFN1cnZleS5CYXNlKSB7XG4gICAgcmV0dXJuIFN1cnZleVByb3BlcnR5VHJpZ2dlcnNFZGl0b3IuY3JlYXRlVHJpZ2dlckVkaXRvcihcbiAgICAgIHRoaXMuc3VydmV5LFxuICAgICAgPFN1cnZleS5TdXJ2ZXlUcmlnZ2VyPmVsZW1lbnQsXG4gICAgICB0aGlzLm9wdGlvbnNcbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlMb2dpY09wZXJhdGlvbiB7XG4gIHB1YmxpYyBrb0VsZW1lbnQ6IGFueTtcbiAgcHJpdmF0ZSB0ZW1wbGF0ZU9iamVjdFZhbHVlOiBhbnk7XG4gIHByaXZhdGUgaXRlbVNlbGVjdG9yVmFsdWU6IFN1cnZleUVsZW1lbnRTZWxlY3RvciA9IG51bGw7XG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBsb2dpY1R5cGU6IFN1cnZleUxvZ2ljVHlwZSwgZWxlbWVudDogU3VydmV5LkJhc2UpIHtcbiAgICB0aGlzLmtvRWxlbWVudCA9IGtvLm9ic2VydmFibGUoZWxlbWVudCk7XG4gICAgdGhpcy5pdGVtU2VsZWN0b3JWYWx1ZSA9IHRoaXMubG9naWNUeXBlLmNyZWF0ZUl0ZW1TZWxlY3RvcigpO1xuICAgIGlmICh0aGlzLml0ZW1TZWxlY3Rvcikge1xuICAgICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgICAgdGhpcy5pdGVtU2VsZWN0b3IuZWxlbWVudCA9IGVsZW1lbnQ7XG4gICAgICB0aGlzLml0ZW1TZWxlY3Rvci5vblZhbHVlQ2hhbmdlZENhbGxiYWNrID0gZnVuY3Rpb24obmV3VmFsdWU6IHN0cmluZykge1xuICAgICAgICBzZWxmLmVsZW1lbnQgPSBzZWxmLml0ZW1TZWxlY3Rvci5lbGVtZW50O1xuICAgICAgfTtcbiAgICB9XG4gICAgdGhpcy50ZW1wbGF0ZU9iamVjdFZhbHVlID0gbG9naWNUeXBlLmNyZWF0ZVRlbXBsYXRlT2JqZWN0KHRoaXMuZWxlbWVudCk7XG4gIH1cbiAgcHVibGljIGdldCB0ZW1wbGF0ZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmxvZ2ljVHlwZS50ZW1wbGF0ZU5hbWU7XG4gIH1cbiAgcHVibGljIGdldCB0ZW1wbGF0ZU9iamVjdCgpOiBhbnkge1xuICAgIHJldHVybiAhIXRoaXMudGVtcGxhdGVPYmplY3RWYWx1ZVxuICAgICAgPyB0aGlzLnRlbXBsYXRlT2JqZWN0VmFsdWVcbiAgICAgIDogdGhpcy5pdGVtU2VsZWN0b3I7XG4gIH1cbiAgcHVibGljIGdldCBlbGVtZW50KCk6IFN1cnZleS5CYXNlIHtcbiAgICByZXR1cm4gdGhpcy5rb0VsZW1lbnQoKTtcbiAgfVxuICBwdWJsaWMgc2V0IGVsZW1lbnQodmFsOiBTdXJ2ZXkuQmFzZSkge1xuICAgIHRoaXMua29FbGVtZW50KHZhbCk7XG4gIH1cbiAgcHVibGljIGdldCBpdGVtU2VsZWN0b3IoKTogU3VydmV5RWxlbWVudFNlbGVjdG9yIHtcbiAgICByZXR1cm4gdGhpcy5pdGVtU2VsZWN0b3JWYWx1ZTtcbiAgfVxuICBwdWJsaWMgYXBwbHkoZXhwcmVzc2lvbjogc3RyaW5nLCBpc1JlbmFtaW5nOiBib29sZWFuID0gZmFsc2UpIHtcbiAgICBpZiAoISF0aGlzLmVsZW1lbnQpIHtcbiAgICAgIHRoaXMuZWxlbWVudFt0aGlzLmxvZ2ljVHlwZS5wcm9wZXJ0eU5hbWVdID0gZXhwcmVzc2lvbjtcbiAgICAgIGlmICghaXNSZW5hbWluZykge1xuICAgICAgICB0aGlzLmxvZ2ljVHlwZS5zYXZlRWxlbWVudCh0aGlzKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcHVibGljIHJlbmFtZVF1ZXN0aW9uKG9sZE5hbWU6IHN0cmluZywgbmV3TmFtZTogc3RyaW5nKSB7XG4gICAgaWYgKCF0aGlzLmVsZW1lbnQpIHJldHVybjtcbiAgICB2YXIgbmFtZXMgPSB0aGlzLnF1ZXN0aW9uTmFtZXM7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuYW1lcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHN0ciA9IHRoaXMuZWxlbWVudFtuYW1lc1tpXV07XG4gICAgICBpZiAoISFzdHIgJiYgc3RyLnRvTG93ZXJDYXNlKCkgPT0gb2xkTmFtZS50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgIHRoaXMuZWxlbWVudFtuYW1lc1tpXV0gPSBuZXdOYW1lO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBwdWJsaWMgZXF1YWxzKG9wOiBTdXJ2ZXlMb2dpY09wZXJhdGlvbik6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmxvZ2ljVHlwZSA9PT0gb3AubG9naWNUeXBlICYmIHRoaXMuZWxlbWVudCA9PT0gb3AuZWxlbWVudDtcbiAgfVxuICBwdWJsaWMgZ2V0IG5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5sb2dpY1R5cGUuZGlzcGxheU5hbWU7XG4gIH1cbiAgcHVibGljIGdldCB0ZXh0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMubG9naWNUeXBlLmdldERpc3BsYXlUZXh0KHRoaXMuZWxlbWVudCk7XG4gIH1cbiAgcHVibGljIGdldCBkZWxldGVPcGVyYXRpb25UZXh0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGdldExvZ2ljU3RyaW5nKFwiZGVsZXRlT3BlcmF0aW9uXCIpO1xuICB9XG4gIHB1YmxpYyBoYXNFcnJvcigpOiBib29sZWFuIHtcbiAgICBpZiAoISF0aGlzLml0ZW1TZWxlY3RvcikgcmV0dXJuIHRoaXMuaXRlbVNlbGVjdG9yLmhhc0Vycm9yKCk7XG4gICAgaWYgKCEhdGhpcy50ZW1wbGF0ZU9iamVjdCAmJiAhIXRoaXMudGVtcGxhdGVPYmplY3QuaGFzRXJyb3IpXG4gICAgICByZXR1cm4gdGhpcy50ZW1wbGF0ZU9iamVjdC5oYXNFcnJvcigpO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBwcml2YXRlIGdldCBxdWVzdGlvbk5hbWVzKCk6IEFycmF5PHN0cmluZz4ge1xuICAgIGlmICghdGhpcy5sb2dpY1R5cGUucXVlc3Rpb25OYW1lcykgcmV0dXJuIFtdO1xuICAgIHJldHVybiB0aGlzLmxvZ2ljVHlwZS5xdWVzdGlvbk5hbWVzO1xuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVN1cnZleUxvZ2ljSXRlbU93bmVyIHtcbiAgcmVhZE9ubHk6IGJvb2xlYW47XG4gIGVkaXRJdGVtKGl0ZW06IFN1cnZleUxvZ2ljSXRlbSk7XG4gIHJlbW92ZUl0ZW0oaXRlbTogU3VydmV5TG9naWNJdGVtKTtcbiAgZ2V0RXhwcmVzc2lvbkFzRGlzcGxheVRleHQoZXhwcmVzc2lvbjogc3RyaW5nKTogc3RyaW5nO1xufVxuXG5leHBvcnQgY2xhc3MgU3VydmV5TG9naWNJdGVtIHtcbiAgcHVibGljIGtvT3BlcmF0aW9uczogYW55O1xuICBwcml2YXRlIHN0YXRpYyBjb3VudGVyID0gMDtcbiAgcHJpdmF0ZSBpZCA9ICsrU3VydmV5TG9naWNJdGVtLmNvdW50ZXI7XG4gIHByaXZhdGUgcmVtb3ZlZE9wZXJhdGlvbnM6IEFycmF5PFN1cnZleUxvZ2ljT3BlcmF0aW9uPjtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBvd25lcjogSVN1cnZleUxvZ2ljSXRlbU93bmVyLFxuICAgIHB1YmxpYyBleHByZXNzaW9uOiBzdHJpbmcgPSBcIlwiXG4gICkge1xuICAgIHRoaXMucmVtb3ZlZE9wZXJhdGlvbnMgPSBbXTtcbiAgICB0aGlzLmtvT3BlcmF0aW9ucyA9IGtvLm9ic2VydmFibGVBcnJheSgpO1xuICB9XG4gIHB1YmxpYyBnZXQgbmFtZSgpIHtcbiAgICByZXR1cm4gXCJsb2dpY0l0ZW1cIiArIHRoaXMuaWQ7XG4gIH1cbiAgcHVibGljIGdldCB0aXRsZSgpIHtcbiAgICB2YXIgcmVzID0gdGhpcy5nZXRFeHByZXNzaW9uQXNEaXNwbGF5VGV4dCgpO1xuICAgIGlmICghIXJlcyAmJiByZXMubGVuZ3RoID4gNTApIHtcbiAgICAgIHJlcyA9IHJlcy5zdWJzdHIoMSwgNTApICsgXCIuLi5cIjtcbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuICBwdWJsaWMgZWRpdCgpIHtcbiAgICBpZiAoISF0aGlzLm93bmVyKSB7XG4gICAgICB0aGlzLm93bmVyLmVkaXRJdGVtKHRoaXMpO1xuICAgIH1cbiAgfVxuICBwdWJsaWMgcmVtb3ZlKCkge1xuICAgIGlmICghIXRoaXMub3duZXIpIHtcbiAgICAgIHRoaXMub3duZXIucmVtb3ZlSXRlbSh0aGlzKTtcbiAgICB9XG4gIH1cbiAgcHVibGljIGdldCBpc1JlYWRPbmx5KCkge1xuICAgIHJldHVybiAhIXRoaXMub3duZXIgJiYgdGhpcy5vd25lci5yZWFkT25seTtcbiAgfVxuICBwdWJsaWMgZ2V0IG9wZXJhdGlvbnMoKTogQXJyYXk8U3VydmV5TG9naWNPcGVyYXRpb24+IHtcbiAgICByZXR1cm4gdGhpcy5rb09wZXJhdGlvbnMoKTtcbiAgfVxuICBwdWJsaWMgYWRkT3BlcmF0aW9uKFxuICAgIGx0OiBTdXJ2ZXlMb2dpY1R5cGUsXG4gICAgZWxlbWVudDogU3VydmV5LkJhc2UgPSBudWxsXG4gICk6IFN1cnZleUxvZ2ljT3BlcmF0aW9uIHtcbiAgICB2YXIgb3AgPSBuZXcgU3VydmV5TG9naWNPcGVyYXRpb24obHQsIGVsZW1lbnQpO1xuICAgIHRoaXMua29PcGVyYXRpb25zLnB1c2gob3ApO1xuICAgIGx0LnVwZGF0ZSh0aGlzLm9wZXJhdGlvbnMpO1xuICAgIHJldHVybiBvcDtcbiAgfVxuICBwdWJsaWMgcmVtb3ZlT3BlcmF0aW9uKG9wOiBTdXJ2ZXlMb2dpY09wZXJhdGlvbikge1xuICAgIHRoaXMucmVtb3ZlZE9wZXJhdGlvbnMucHVzaChvcCk7XG4gICAgdmFyIGluZGV4ID0gdGhpcy5rb09wZXJhdGlvbnMoKS5pbmRleE9mKG9wKTtcbiAgICBpZiAoaW5kZXggPiAtMSkge1xuICAgICAgdGhpcy5rb09wZXJhdGlvbnMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgIGlmICghIW9wLmxvZ2ljVHlwZSkge1xuICAgICAgICBvcC5sb2dpY1R5cGUudXBkYXRlKHRoaXMub3BlcmF0aW9ucyk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHB1YmxpYyBhcHBseShleHByZXNzaW9uOiBzdHJpbmcpIHtcbiAgICB0aGlzLnJlbW92ZVNhbWVPcGVyYXRpb25zKCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnJlbW92ZWRPcGVyYXRpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICB0aGlzLnJlbW92ZWRPcGVyYXRpb25zW2ldLmFwcGx5KFwiXCIpO1xuICAgIH1cbiAgICB0aGlzLnJlbW92ZWRPcGVyYXRpb25zID0gW107XG4gICAgdGhpcy5hcHBseUV4cHJlc3Npb24oZXhwcmVzc2lvbiwgZmFsc2UpO1xuICB9XG4gIHB1YmxpYyByZW5hbWVRdWVzdGlvbihvbGROYW1lOiBzdHJpbmcsIG5ld05hbWU6IHN0cmluZykge1xuICAgIGlmICghb2xkTmFtZSB8fCAhbmV3TmFtZSkgcmV0dXJuO1xuICAgIHRoaXMucmVuYW1lUXVlc3Rpb25JbkV4cHJlc3Npb24ob2xkTmFtZSwgbmV3TmFtZSk7XG4gICAgdmFyIG9wcyA9IHRoaXMub3BlcmF0aW9ucztcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG9wcy5sZW5ndGg7IGkrKykge1xuICAgICAgb3BzW2ldLnJlbmFtZVF1ZXN0aW9uKG9sZE5hbWUsIG5ld05hbWUpO1xuICAgIH1cbiAgfVxuICBwdWJsaWMgZ2V0IGV4cHJlc3Npb25UZXh0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGVkaXRvckxvY2FsaXphdGlvblxuICAgICAgLmdldFN0cmluZyhcImVkLmxnLml0ZW1FeHByZXNzaW9uVGV4dFwiKVxuICAgICAgW1wiZm9ybWF0XCJdKHRoaXMuZ2V0RXhwcmVzc2lvbkFzRGlzcGxheVRleHQoKSk7XG4gIH1cbiAgcHJpdmF0ZSBnZXRFeHByZXNzaW9uQXNEaXNwbGF5VGV4dCgpOiBzdHJpbmcge1xuICAgIHJldHVybiAhIXRoaXMub3duZXJcbiAgICAgID8gdGhpcy5vd25lci5nZXRFeHByZXNzaW9uQXNEaXNwbGF5VGV4dCh0aGlzLmV4cHJlc3Npb24pXG4gICAgICA6IHRoaXMuZXhwcmVzc2lvbjtcbiAgfVxuICBwdWJsaWMgZ2V0IGVkaXRUZXh0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGVkaXRvckxvY2FsaXphdGlvbi5nZXRTdHJpbmcoXCJwZS5lZGl0XCIpO1xuICB9XG4gIHB1YmxpYyBnZXQgZGVsZXRlVGV4dCgpOiBzdHJpbmcge1xuICAgIHJldHVybiBlZGl0b3JMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKFwicGUuZGVsZXRlXCIpO1xuICB9XG4gIHByaXZhdGUgcmVuYW1lUXVlc3Rpb25JbkV4cHJlc3Npb24ob2xkTmFtZTogc3RyaW5nLCBuZXdOYW1lOiBzdHJpbmcpIHtcbiAgICBpZiAoIXRoaXMuZXhwcmVzc2lvbikgcmV0dXJuO1xuICAgIHZhciBuZXdFeHByZXNzaW9uID0gdGhpcy5leHByZXNzaW9uO1xuICAgIHZhciBleHByZXNzaW9uID0gdGhpcy5leHByZXNzaW9uLnRvTG9jYWxlTG93ZXJDYXNlKCk7XG4gICAgb2xkTmFtZSA9IFwie1wiICsgb2xkTmFtZS50b0xvd2VyQ2FzZSgpICsgXCJ9XCI7XG4gICAgbmV3TmFtZSA9IFwie1wiICsgbmV3TmFtZSArIFwifVwiO1xuICAgIHZhciBpbmRleCA9IGV4cHJlc3Npb24ubGFzdEluZGV4T2Yob2xkTmFtZSwgZXhwcmVzc2lvbi5sZW5ndGgpO1xuICAgIHdoaWxlIChpbmRleCA+IC0xKSB7XG4gICAgICBuZXdFeHByZXNzaW9uID1cbiAgICAgICAgbmV3RXhwcmVzc2lvbi5zdWJzdHJpbmcoMCwgaW5kZXgpICtcbiAgICAgICAgbmV3TmFtZSArXG4gICAgICAgIG5ld0V4cHJlc3Npb24uc3Vic3RyKGluZGV4ICsgb2xkTmFtZS5sZW5ndGgsICtuZXdFeHByZXNzaW9uLmxlbmd0aCk7XG4gICAgICBleHByZXNzaW9uID0gZXhwcmVzc2lvbi5zdWJzdHJpbmcoMCwgaW5kZXgpO1xuICAgICAgaW5kZXggPSBleHByZXNzaW9uLmxhc3RJbmRleE9mKG9sZE5hbWUsIGV4cHJlc3Npb24ubGVuZ3RoKTtcbiAgICB9XG4gICAgaWYgKG5ld0V4cHJlc3Npb24gIT0gdGhpcy5leHByZXNzaW9uKSB7XG4gICAgICB0aGlzLmFwcGx5RXhwcmVzc2lvbihuZXdFeHByZXNzaW9uLCB0cnVlKTtcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBhcHBseUV4cHJlc3Npb24oZXhwcmVzc2lvbjogc3RyaW5nLCBpc1JlbmFtaW5nOiBib29sZWFuKSB7XG4gICAgdGhpcy5leHByZXNzaW9uID0gZXhwcmVzc2lvbjtcbiAgICB2YXIgb3BzID0gdGhpcy5vcGVyYXRpb25zO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgb3BzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBvcHNbaV0uYXBwbHkoZXhwcmVzc2lvbiwgaXNSZW5hbWluZyk7XG4gICAgfVxuICB9XG4gIHByaXZhdGUgcmVtb3ZlU2FtZU9wZXJhdGlvbnMoKSB7XG4gICAgdmFyIG9wcyA9IHRoaXMub3BlcmF0aW9ucztcbiAgICBmb3IgKHZhciBpID0gb3BzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICBmb3IgKHZhciBqID0gaSAtIDE7IGogPj0gMDsgai0tKSB7XG4gICAgICAgIGlmIChvcHNbaV0uZXF1YWxzKG9wc1tqXSkpIHtcbiAgICAgICAgICB0aGlzLnJlbW92ZU9wZXJhdGlvbihvcHNbaV0pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlMb2dpYyBpbXBsZW1lbnRzIElTdXJ2ZXlMb2dpY0l0ZW1Pd25lciB7XG4gIHByaXZhdGUgc3RhdGljIGhhc05lZWRlZEVsZW1lbnRzKFxuICAgIGVsZW1lbnRzOiBBcnJheTxhbnk+LFxuICAgIHByb3BOYW1lOiBzdHJpbmdcbiAgKTogYm9vbGVhbiB7XG4gICAgaWYgKCFlbGVtZW50cyB8fCAhQXJyYXkuaXNBcnJheShlbGVtZW50cykpIHJldHVybiBmYWxzZTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVsZW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgZWwgPSBlbGVtZW50c1tpXTtcbiAgICAgIGlmICghZWxbcHJvcE5hbWVdKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcHVibGljIHN0YXRpYyB0eXBlcyA9IFtcbiAgICB7XG4gICAgICBuYW1lOiBcInBhZ2VfdmlzaWJpbGl0eVwiLFxuICAgICAgYmFzZUNsYXNzOiBcInBhZ2VcIixcbiAgICAgIHByb3BlcnR5TmFtZTogXCJ2aXNpYmxlSWZcIixcbiAgICAgIHNob3dJZjogZnVuY3Rpb24oc3VydmV5OiBTdXJ2ZXkuU3VydmV5TW9kZWwpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICBzdXJ2ZXkucGFnZXMubGVuZ3RoID4gMSAmJlxuICAgICAgICAgIFN1cnZleUxvZ2ljLmhhc05lZWRlZEVsZW1lbnRzKHN1cnZleS5wYWdlcywgXCJ2aXNpYmxlSWZcIilcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6IFwicGFuZWxfdmlzaWJpbGl0eVwiLFxuICAgICAgYmFzZUNsYXNzOiBcInBhbmVsXCIsXG4gICAgICBwcm9wZXJ0eU5hbWU6IFwidmlzaWJsZUlmXCIsXG4gICAgICBzaG93SWY6IGZ1bmN0aW9uKHN1cnZleTogU3VydmV5LlN1cnZleU1vZGVsKSB7XG4gICAgICAgIHJldHVybiBTdXJ2ZXlMb2dpYy5oYXNOZWVkZWRFbGVtZW50cyhcbiAgICAgICAgICBzdXJ2ZXkuZ2V0QWxsUGFuZWxzKCksXG4gICAgICAgICAgXCJ2aXNpYmxlSWZcIlxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogXCJwYW5lbF9lbmFibGVcIixcbiAgICAgIGJhc2VDbGFzczogXCJwYW5lbFwiLFxuICAgICAgcHJvcGVydHlOYW1lOiBcImVuYWJsZUlmXCIsXG4gICAgICBzaG93SWY6IGZ1bmN0aW9uKHN1cnZleTogU3VydmV5LlN1cnZleU1vZGVsKSB7XG4gICAgICAgIHJldHVybiBTdXJ2ZXlMb2dpYy5oYXNOZWVkZWRFbGVtZW50cyhzdXJ2ZXkuZ2V0QWxsUGFuZWxzKCksIFwiZW5hYmxlSWZcIik7XG4gICAgICB9XG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiBcInF1ZXN0aW9uX3Zpc2liaWxpdHlcIixcbiAgICAgIGJhc2VDbGFzczogXCJxdWVzdGlvblwiLFxuICAgICAgcHJvcGVydHlOYW1lOiBcInZpc2libGVJZlwiLFxuICAgICAgc2hvd0lmOiBmdW5jdGlvbihzdXJ2ZXk6IFN1cnZleS5TdXJ2ZXlNb2RlbCkge1xuICAgICAgICByZXR1cm4gU3VydmV5TG9naWMuaGFzTmVlZGVkRWxlbWVudHMoXG4gICAgICAgICAgc3VydmV5LmdldEFsbFF1ZXN0aW9ucygpLFxuICAgICAgICAgIFwidmlzaWJsZUlmXCJcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6IFwicXVlc3Rpb25fZW5hYmxlXCIsXG4gICAgICBiYXNlQ2xhc3M6IFwicXVlc3Rpb25cIixcbiAgICAgIHByb3BlcnR5TmFtZTogXCJlbmFibGVJZlwiLFxuICAgICAgc2hvd0lmOiBmdW5jdGlvbihzdXJ2ZXk6IFN1cnZleS5TdXJ2ZXlNb2RlbCkge1xuICAgICAgICByZXR1cm4gU3VydmV5TG9naWMuaGFzTmVlZGVkRWxlbWVudHMoXG4gICAgICAgICAgc3VydmV5LmdldEFsbFF1ZXN0aW9ucygpLFxuICAgICAgICAgIFwiZW5hYmxlSWZcIlxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogXCJxdWVzdGlvbl9yZXF1aXJlXCIsXG4gICAgICBiYXNlQ2xhc3M6IFwicXVlc3Rpb25cIixcbiAgICAgIHByb3BlcnR5TmFtZTogXCJyZXF1aXJlZElmXCIsXG4gICAgICBzaG93SWY6IGZ1bmN0aW9uKHN1cnZleTogU3VydmV5LlN1cnZleU1vZGVsKSB7XG4gICAgICAgIHJldHVybiBTdXJ2ZXlMb2dpYy5oYXNOZWVkZWRFbGVtZW50cyhcbiAgICAgICAgICBzdXJ2ZXkuZ2V0QWxsUXVlc3Rpb25zKCksXG4gICAgICAgICAgXCJyZXF1aXJlZElmXCJcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6IFwiZXhwcmVzc2lvbl9leHByZXNzaW9uXCIsXG4gICAgICBiYXNlQ2xhc3M6IFwiZXhwcmVzc2lvblwiLFxuICAgICAgcHJvcGVydHlOYW1lOiBcImV4cHJlc3Npb25cIixcbiAgICAgIHNob3dJblVJOiBmYWxzZVxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogXCJtYXRyaXhkcm9wZG93bmNvbHVtbl92aXNpYmxlSWZcIixcbiAgICAgIGJhc2VDbGFzczogXCJtYXRyaXhkcm9wZG93bmNvbHVtblwiLFxuICAgICAgcHJvcGVydHlOYW1lOiBcInZpc2libGVJZlwiLFxuICAgICAgc2hvd0luVUk6IGZhbHNlXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiBcIm1hdHJpeGRyb3Bkb3duY29sdW1uX2VuYWJsZUlmXCIsXG4gICAgICBiYXNlQ2xhc3M6IFwibWF0cml4ZHJvcGRvd25jb2x1bW5cIixcbiAgICAgIHByb3BlcnR5TmFtZTogXCJlbmFibGVJZlwiLFxuICAgICAgc2hvd0luVUk6IGZhbHNlXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiBcIm1hdHJpeGRyb3Bkb3duY29sdW1uX3JlcXVpcmVkSWZcIixcbiAgICAgIGJhc2VDbGFzczogXCJtYXRyaXhkcm9wZG93bmNvbHVtblwiLFxuICAgICAgcHJvcGVydHlOYW1lOiBcInJlcXVpcmVkSWZcIixcbiAgICAgIHNob3dJblVJOiBmYWxzZVxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogXCJtYXRyaXhkcm9wZG93bmNvbHVtbl90b3RhbEV4cHJlc3Npb25cIixcbiAgICAgIGJhc2VDbGFzczogXCJtYXRyaXhkcm9wZG93bmNvbHVtblwiLFxuICAgICAgcHJvcGVydHlOYW1lOiBcInRvdGFsRXhwcmVzc2lvblwiLFxuICAgICAgc2hvd0luVUk6IGZhbHNlXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiBcInRyaWdnZXJfY29tcGxldGVcIixcbiAgICAgIGJhc2VDbGFzczogXCJjb21wbGV0ZXRyaWdnZXJcIixcbiAgICAgIHByb3BlcnR5TmFtZTogXCJleHByZXNzaW9uXCIsXG4gICAgICBpc1VuaXF1ZUl0ZW06IHRydWVcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6IFwidHJpZ2dlcl9zZXR2YWx1ZVwiLFxuICAgICAgYmFzZUNsYXNzOiBcInNldHZhbHVldHJpZ2dlclwiLFxuICAgICAgcHJvcGVydHlOYW1lOiBcImV4cHJlc3Npb25cIixcbiAgICAgIHF1ZXN0aW9uTmFtZXM6IFtcInNldFRvTmFtZVwiXSxcbiAgICAgIGdldERpc3BsYXlUZXh0OiBmdW5jdGlvbihcbiAgICAgICAgZWxlbWVudDogU3VydmV5LkJhc2UsXG4gICAgICAgIGZvcm1hdFN0cjogc3RyaW5nLFxuICAgICAgICBsdDogU3VydmV5TG9naWNUeXBlXG4gICAgICApOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gZm9ybWF0U3RyW1wiZm9ybWF0XCJdKFxuICAgICAgICAgIGx0LmZvcm1hdEVsTmFtZShlbGVtZW50W1wic2V0VG9OYW1lXCJdKSxcbiAgICAgICAgICBlbGVtZW50W1wic2V0VmFsdWVcIl1cbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6IFwidHJpZ2dlcl9jb3B5dmFsdWVcIixcbiAgICAgIGJhc2VDbGFzczogXCJjb3B5dmFsdWV0cmlnZ2VyXCIsXG4gICAgICBwcm9wZXJ0eU5hbWU6IFwiZXhwcmVzc2lvblwiLFxuICAgICAgcXVlc3Rpb25OYW1lczogW1wic2V0VG9OYW1lXCIsIFwiZnJvbU5hbWVcIl0sXG4gICAgICBnZXREaXNwbGF5VGV4dDogZnVuY3Rpb24oXG4gICAgICAgIGVsZW1lbnQ6IFN1cnZleS5CYXNlLFxuICAgICAgICBmb3JtYXRTdHI6IHN0cmluZyxcbiAgICAgICAgbHQ6IFN1cnZleUxvZ2ljVHlwZVxuICAgICAgKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIGZvcm1hdFN0cltcImZvcm1hdFwiXShcbiAgICAgICAgICBsdC5mb3JtYXRFbE5hbWUoZWxlbWVudFtcInNldFRvTmFtZVwiXSksXG4gICAgICAgICAgbHQuZm9ybWF0RWxOYW1lKGVsZW1lbnRbXCJmcm9tTmFtZVwiXSlcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6IFwidHJpZ2dlcl9za2lwXCIsXG4gICAgICBiYXNlQ2xhc3M6IFwic2tpcHRyaWdnZXJcIixcbiAgICAgIHByb3BlcnR5TmFtZTogXCJleHByZXNzaW9uXCIsXG4gICAgICBxdWVzdGlvbk5hbWVzOiBbXCJnb3RvTmFtZVwiXSxcbiAgICAgIGlzVW5pcXVlSXRlbTogdHJ1ZSxcbiAgICAgIGdldERpc3BsYXlUZXh0TmFtZTogZnVuY3Rpb24oZWxlbWVudDogU3VydmV5LkJhc2UpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gZWxlbWVudFtcImdvdG9OYW1lXCJdO1xuICAgICAgfVxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogXCJ0cmlnZ2VyX3J1bkV4cHJlc3Npb25cIixcbiAgICAgIGJhc2VDbGFzczogXCJydW5leHByZXNzaW9udHJpZ2dlclwiLFxuICAgICAgcHJvcGVydHlOYW1lOiBcImV4cHJlc3Npb25cIixcbiAgICAgIHF1ZXN0aW9uTmFtZXM6IFtcInNldFRvTmFtZVwiXSxcbiAgICAgIGdldERpc3BsYXlUZXh0OiBmdW5jdGlvbihcbiAgICAgICAgZWxlbWVudDogU3VydmV5LkJhc2UsXG4gICAgICAgIGZvcm1hdFN0cjogc3RyaW5nLFxuICAgICAgICBsdDogU3VydmV5TG9naWNUeXBlXG4gICAgICApOiBzdHJpbmcge1xuICAgICAgICB2YXIgcmVzID0gZ2V0TG9naWNTdHJpbmcoXCJ0cmlnZ2VyX3J1bkV4cHJlc3Npb25UZXh0MVwiKTtcbiAgICAgICAgcmVzID0gcmVzW1wiZm9ybWF0XCJdKGx0LmZvcm1hdEV4cHJlc3Npb24oZWxlbWVudFtcInJ1bkV4cHJlc3Npb25cIl0pKTtcbiAgICAgICAgdmFyIHNldFRvTmFtZSA9IGVsZW1lbnRbXCJzZXRUb05hbWVcIl07XG4gICAgICAgIGlmICghIXNldFRvTmFtZSkge1xuICAgICAgICAgIHZhciBzdHIgPSBnZXRMb2dpY1N0cmluZyhcInRyaWdnZXJfcnVuRXhwcmVzc2lvblRleHQyXCIpO1xuICAgICAgICAgIHJlcyArPSBzdHJbXCJmb3JtYXRcIl0obHQuZm9ybWF0RWxOYW1lKGVsZW1lbnRbXCJzZXRUb05hbWVcIl0pKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgfVxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogXCJjb21wbGV0ZWRIdG1sT25Db25kaXRpb25cIixcbiAgICAgIGJhc2VDbGFzczogXCJodG1sY29uZGl0aW9uaXRlbVwiLFxuICAgICAgcHJvcGVydHlOYW1lOiBcImV4cHJlc3Npb25cIixcbiAgICAgIGlzVW5pcXVlSXRlbTogdHJ1ZSxcbiAgICAgIHRlbXBsYXRlTmFtZTogXCJwcm9wZXJ0eWVkaXRvcmNvbnRlbnQtaHRtbFwiLFxuICAgICAgY3JlYXRlTmV3RWxlbWVudDogZnVuY3Rpb24oc3VydmV5OiBTdXJ2ZXkuU3VydmV5TW9kZWwpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBTdXJ2ZXkuSHRtbENvbmRpdGlvbkl0ZW0oKTtcbiAgICAgIH0sXG4gICAgICBjcmVhdGVUZW1wbGF0ZU9iamVjdDogZnVuY3Rpb24oZWxlbWVudDogU3VydmV5LkJhc2UpIHtcbiAgICAgICAgdmFyIGl0ZW0gPSA8U3VydmV5Lkh0bWxDb25kaXRpb25JdGVtPmVsZW1lbnQ7XG4gICAgICAgIHJldHVybiB7IGtvVmFsdWU6IGtvLm9ic2VydmFibGUoaXRlbS5odG1sKSwgcmVhZE9ubHk6IGZhbHNlIH07XG4gICAgICB9LFxuICAgICAgc2F2ZUVsZW1lbnQ6IGZ1bmN0aW9uKFxuICAgICAgICBzdXJ2ZXk6IFN1cnZleS5TdXJ2ZXlNb2RlbCxcbiAgICAgICAgb3A6IFN1cnZleUxvZ2ljT3BlcmF0aW9uXG4gICAgICApIHtcbiAgICAgICAgdmFyIGl0ZW0gPSA8U3VydmV5Lkh0bWxDb25kaXRpb25JdGVtPm9wLmVsZW1lbnQ7XG4gICAgICAgIGl0ZW0uaHRtbCA9IG9wLnRlbXBsYXRlT2JqZWN0LmtvVmFsdWUoKTtcbiAgICAgICAgaWYgKHN1cnZleS5jb21wbGV0ZWRIdG1sT25Db25kaXRpb24uaW5kZXhPZihpdGVtKSA8IDApIHtcbiAgICAgICAgICBzdXJ2ZXkuY29tcGxldGVkSHRtbE9uQ29uZGl0aW9uLnB1c2goaXRlbSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6IFwidHJpZ2dlcl9ydW5FeHByZXNzaW9uX0V4cHJlc3Npb25cIixcbiAgICAgIGJhc2VDbGFzczogXCJydW5leHByZXNzaW9udHJpZ2dlclwiLFxuICAgICAgcHJvcGVydHlOYW1lOiBcInJ1bkV4cHJlc3Npb25cIixcbiAgICAgIHNob3dJblVJOiBmYWxzZVxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogXCJxdWVzdGlvbl9leHByZXNzaW9uVmFsaWRhdG9yXCIsXG4gICAgICBiYXNlQ2xhc3M6IFwiZXhwcmVzc2lvbnZhbGlkYXRvclwiLFxuICAgICAgcHJvcGVydHlOYW1lOiBcImV4cHJlc3Npb25cIixcbiAgICAgIHNob3dJblVJOiBmYWxzZVxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogXCJtYXRyaXhfcm93c1Zpc2libGVJZlwiLFxuICAgICAgYmFzZUNsYXNzOiBcIm1hdHJpeFwiLFxuICAgICAgcHJvcGVydHlOYW1lOiBcInJvd3NWaXNpYmxlSWZcIixcbiAgICAgIHNob3dJblVJOiBmYWxzZVxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogXCJtYXRyaXhfY29sdW1uc1Zpc2libGVJZlwiLFxuICAgICAgYmFzZUNsYXNzOiBcIm1hdHJpeFwiLFxuICAgICAgcHJvcGVydHlOYW1lOiBcImNvbHVtbnNWaXNpYmxlSWZcIixcbiAgICAgIHNob3dJblVJOiBmYWxzZVxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogXCJtYXRyaXhkcm9wZG93bl9yb3dzVmlzaWJsZUlmXCIsXG4gICAgICBiYXNlQ2xhc3M6IFwibWF0cml4ZHJvcGRvd25cIixcbiAgICAgIHByb3BlcnR5TmFtZTogXCJyb3dzVmlzaWJsZUlmXCIsXG4gICAgICBzaG93SW5VSTogZmFsc2VcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6IFwic2VsZWN0X2Nob2ljZXNWaXNpYmxlSWZcIixcbiAgICAgIGJhc2VDbGFzczogXCJzZWxlY3RiYXNlXCIsXG4gICAgICBwcm9wZXJ0eU5hbWU6IFwiY2hvaWNlc1Zpc2libGVJZlwiLFxuICAgICAgc2hvd0luVUk6IGZhbHNlXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiBcInNlbGVjdF9jaG9pY2VzRW5hYmxlSWZcIixcbiAgICAgIGJhc2VDbGFzczogXCJzZWxlY3RiYXNlXCIsXG4gICAgICBwcm9wZXJ0eU5hbWU6IFwiY2hvaWNlc0VuYWJsZUlmXCIsXG4gICAgICBzaG93SW5VSTogZmFsc2VcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6IFwiaXRlbXZhbHVlX3Zpc2libGVJZlwiLFxuICAgICAgYmFzZUNsYXNzOiBcIml0ZW12YWx1ZVwiLFxuICAgICAgcHJvcGVydHlOYW1lOiBcInZpc2libGVJZlwiLFxuICAgICAgc2hvd0luVUk6IGZhbHNlXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiBcIml0ZW12YWx1ZV9lbmFibGVJZlwiLFxuICAgICAgYmFzZUNsYXNzOiBcIml0ZW12YWx1ZVwiLFxuICAgICAgcHJvcGVydHlOYW1lOiBcImVuYWJsZUlmXCIsXG4gICAgICBzaG93SW5VSTogZmFsc2VcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6IFwiY2FsY3VsYXRlZFZhbHVlXCIsXG4gICAgICBiYXNlQ2xhc3M6IFwiY2FsY3VsYXRlZHZhbHVlXCIsXG4gICAgICBwcm9wZXJ0eU5hbWU6IFwiZXhwcmVzc2lvblwiLFxuICAgICAgc2hvd0luVUk6IGZhbHNlXG4gICAgfVxuICBdO1xuICBwdWJsaWMga29JdGVtczogYW55O1xuICBwdWJsaWMgaW52aXNpYmxlSXRlbXM6IEFycmF5PFN1cnZleUxvZ2ljSXRlbT4gPSBbXTtcbiAgcHVibGljIGtvTG9naWNUeXBlczogYW55O1xuICBwdWJsaWMga29Nb2RlOiBhbnk7XG4gIHB1YmxpYyBrb0FkZE5ldzogYW55O1xuICBwdWJsaWMga29FZGl0SXRlbTogYW55O1xuICBwdWJsaWMga29SZW1vdmVJdGVtOiBhbnk7XG4gIHB1YmxpYyBrb1Nob3dWaWV3OiBhbnk7XG4gIHB1YmxpYyBrb1NhdmVBbmRTaG93VmlldzogYW55O1xuICBwdWJsaWMga29TYXZlRWRpdGFibGVJdGVtOiBhbnk7XG4gIHB1YmxpYyBrb0FkZE5ld09wZXJhdGlvbjogYW55O1xuICBwdWJsaWMga29SZW1vdmVPcGVyYXRpb246IGFueTtcbiAgcHVibGljIGtvRWRpdGFibGVJdGVtOiBhbnk7XG4gIHB1YmxpYyBleHByZXNzaW9uRWRpdG9yOiBTdXJ2ZXlQcm9wZXJ0eUNvbmRpdGlvbkVkaXRvcjtcbiAgcHVibGljIGtvUmVhZE9ubHk6IGFueTtcbiAgcHVibGljIGtvRXJyb3JUZXh0OiBhbnk7XG4gIHB1YmxpYyBrb0Rpc3BsYXlFcnJvcjogYW55O1xuICBwdWJsaWMgb25DaGFuZ2VkQ2FsbGJhY2s6IChpdGVtOiBTdXJ2ZXlMb2dpY0l0ZW0sIGNoYW5nZVR5cGU6IHN0cmluZykgPT4gdm9pZDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgc3VydmV5OiBTdXJ2ZXkuU3VydmV5TW9kZWwsXG4gICAgcHVibGljIG9wdGlvbnM6IElTdXJ2ZXlPYmplY3RFZGl0b3JPcHRpb25zID0gbnVsbFxuICApIHtcbiAgICB0aGlzLmNyZWF0ZUV4cHJlc3Npb25Qcm9wZXJ0eUVkaXRvcigpO1xuICAgIHRoaXMua29JdGVtcyA9IGtvLm9ic2VydmFibGVBcnJheSgpO1xuICAgIHRoaXMua29Mb2dpY1R5cGVzID0ga28ub2JzZXJ2YWJsZUFycmF5KCk7XG4gICAgdGhpcy5rb01vZGUgPSBrby5vYnNlcnZhYmxlKFwidmlld1wiKTtcbiAgICB0aGlzLmtvUmVhZE9ubHkgPSBrby5vYnNlcnZhYmxlKHRoaXMucmVhZE9ubHkpO1xuICAgIHRoaXMua29FcnJvclRleHQgPSBrby5vYnNlcnZhYmxlKFwiXCIpO1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICB0aGlzLmtvRGlzcGxheUVycm9yID0ga28uY29tcHV0ZWQoZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gISFzZWxmLmtvRXJyb3JUZXh0KCk7XG4gICAgfSk7XG4gICAgdGhpcy5rb0FkZE5ldyA9IGZ1bmN0aW9uKCkge1xuICAgICAgc2VsZi5hZGROZXcoKTtcbiAgICB9O1xuICAgIHRoaXMua29FZGl0SXRlbSA9IGZ1bmN0aW9uKGl0ZW06IFN1cnZleUxvZ2ljSXRlbSkge1xuICAgICAgc2VsZi5lZGl0SXRlbShpdGVtKTtcbiAgICB9O1xuICAgIHRoaXMua29SZW1vdmVJdGVtID0gZnVuY3Rpb24oaXRlbTogU3VydmV5TG9naWNJdGVtKSB7XG4gICAgICBzZWxmLnJlbW92ZUl0ZW0oaXRlbSk7XG4gICAgfTtcbiAgICB0aGlzLmtvU2hvd1ZpZXcgPSBmdW5jdGlvbigpIHtcbiAgICAgIHNlbGYubW9kZSA9IFwidmlld1wiO1xuICAgIH07XG4gICAgdGhpcy5rb1NhdmVBbmRTaG93VmlldyA9IGZ1bmN0aW9uKCkge1xuICAgICAgaWYgKHNlbGYuc2F2ZUVkaXRhYmxlSXRlbSgpKSB7XG4gICAgICAgIHNlbGYubW9kZSA9IFwidmlld1wiO1xuICAgICAgfVxuICAgIH07XG4gICAgdGhpcy5rb1NhdmVFZGl0YWJsZUl0ZW0gPSBmdW5jdGlvbigpIHtcbiAgICAgIHNlbGYuc2F2ZUVkaXRhYmxlSXRlbSgpO1xuICAgIH07XG4gICAgdGhpcy5rb0FkZE5ld09wZXJhdGlvbiA9IGZ1bmN0aW9uKGxvZ2ljVHlwZTogU3VydmV5TG9naWNUeXBlKSB7XG4gICAgICBzZWxmLmFkZE5ld09wZXJhdGlvbihsb2dpY1R5cGUpO1xuICAgIH07XG4gICAgdGhpcy5rb1JlbW92ZU9wZXJhdGlvbiA9IGZ1bmN0aW9uKG9wOiBTdXJ2ZXlMb2dpY09wZXJhdGlvbikge1xuICAgICAgc2VsZi5yZW1vdmVPcGVyYXRpb24ob3ApO1xuICAgIH07XG4gICAgdGhpcy5rb0VkaXRhYmxlSXRlbSA9IGtvLm9ic2VydmFibGUobnVsbCk7XG4gICAgdGhpcy51cGRhdGUoKTtcbiAgfVxuICBwdWJsaWMgZ2V0VHlwZUJ5TmFtZShuYW1lOiBzdHJpbmcpOiBTdXJ2ZXlMb2dpY1R5cGUge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5sb2dpY1R5cGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAodGhpcy5sb2dpY1R5cGVzW2ldLm5hbWUgPT0gbmFtZSkgcmV0dXJuIHRoaXMubG9naWNUeXBlc1tpXTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgcHVibGljIHVwZGF0ZShcbiAgICBzdXJ2ZXk6IFN1cnZleS5TdXJ2ZXlNb2RlbCA9IG51bGwsXG4gICAgb3B0aW9uczogSVN1cnZleU9iamVjdEVkaXRvck9wdGlvbnMgPSBudWxsXG4gICkge1xuICAgIGlmICghIXN1cnZleSkge1xuICAgICAgdGhpcy5zdXJ2ZXkgPSBzdXJ2ZXk7XG4gICAgfVxuICAgIGlmICghIW9wdGlvbnMpIHtcbiAgICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgfVxuICAgIHRoaXMua29Mb2dpY1R5cGVzKHRoaXMuY3JlYXRlTG9naWNUeXBlcygpKTtcbiAgICB0aGlzLnVwZGF0ZVZpc2libGVJdGVtcygpO1xuICAgIHRoaXMuaW52aXNpYmxlSXRlbXMgPSB0aGlzLmJ1aWxkSXRlbXMoZmFsc2UpO1xuICAgIHRoaXMua29SZWFkT25seSh0aGlzLnJlYWRPbmx5KTtcbiAgICB0aGlzLm1vZGUgPSBcInZpZXdcIjtcbiAgICB0aGlzLmV4cHJlc3Npb25FZGl0b3Iub2JqZWN0ID0gdGhpcy5zdXJ2ZXk7XG4gICAgdGhpcy5leHByZXNzaW9uRWRpdG9yLm9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7XG4gICAgdGhpcy5leHByZXNzaW9uRWRpdG9yLmRpc3BsYXlOYW1lID0gZ2V0TG9naWNTdHJpbmcoXCJleHByZXNzaW9uRWRpdG9yVGl0bGVcIik7XG4gICAgdGhpcy5leHByZXNzaW9uRWRpdG9yLnNob3dIZWxwVGV4dCA9IGZhbHNlO1xuICAgIHRoaXMuZXhwcmVzc2lvbkVkaXRvci5iZWZvcmVTaG93KCk7XG4gIH1cbiAgcHJpdmF0ZSB1cGRhdGVWaXNpYmxlSXRlbXMoKSB7XG4gICAgdGhpcy5rb0l0ZW1zKHRoaXMuYnVpbGRJdGVtcyh0cnVlKSk7XG4gICAgdGhpcy5rb0VkaXRhYmxlSXRlbShudWxsKTtcbiAgICB0aGlzLmtvRXJyb3JUZXh0KFwiXCIpO1xuICB9XG4gIHB1YmxpYyBnZXQgcmVhZE9ubHkoKSB7XG4gICAgcmV0dXJuICEhdGhpcy5vcHRpb25zICYmIHRoaXMub3B0aW9ucy5yZWFkT25seTtcbiAgfVxuICBwdWJsaWMgc2F2ZUVkaXRhYmxlSXRlbSgpOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMuZWRpdGFibGVJdGVtIHx8IHRoaXMuaGFzRXJyb3IoKSkgcmV0dXJuIGZhbHNlO1xuICAgIHRoaXMuZXhwcmVzc2lvbkVkaXRvci5hcHBseSgpO1xuICAgIHRoaXMuZWRpdGFibGVJdGVtLmFwcGx5KHRoaXMuZXhwcmVzc2lvbkVkaXRvci5lZGl0aW5nVmFsdWUpO1xuICAgIHZhciBpc05ldyA9IHRoaXMua29JdGVtcy5pbmRleE9mKHRoaXMuZWRpdGFibGVJdGVtKSA8IDA7XG4gICAgaWYgKGlzTmV3KSB7XG4gICAgICB0aGlzLmtvSXRlbXMucHVzaCh0aGlzLmVkaXRhYmxlSXRlbSk7XG4gICAgfVxuICAgIHRoaXMub25JdGVtQ2hhbmdlZCh0aGlzLmVkaXRhYmxlSXRlbSwgaXNOZXcgPyBcIm5ld1wiIDogXCJtb2RpZnlcIik7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcHJvdGVjdGVkIG9uSXRlbUNoYW5nZWQoaXRlbTogU3VydmV5TG9naWNJdGVtLCBjaGFuZ2VUeXBlOiBzdHJpbmcpIHtcbiAgICBpZiAoISF0aGlzLm9uQ2hhbmdlZENhbGxiYWNrKSB7XG4gICAgICB0aGlzLm9uQ2hhbmdlZENhbGxiYWNrKGl0ZW0sIGNoYW5nZVR5cGUpO1xuICAgIH1cbiAgfVxuICBwdWJsaWMgZ2V0IGl0ZW1zKCk6IEFycmF5PFN1cnZleUxvZ2ljSXRlbT4ge1xuICAgIHJldHVybiB0aGlzLmtvSXRlbXMoKTtcbiAgfVxuICBwdWJsaWMgZ2V0IGxvZ2ljVHlwZXMoKTogQXJyYXk8U3VydmV5TG9naWNUeXBlPiB7XG4gICAgcmV0dXJuIHRoaXMua29Mb2dpY1R5cGVzKCk7XG4gIH1cbiAgcHVibGljIGdldCBlZGl0YWJsZUl0ZW0oKTogU3VydmV5TG9naWNJdGVtIHtcbiAgICByZXR1cm4gdGhpcy5rb0VkaXRhYmxlSXRlbSgpO1xuICB9XG4gIHB1YmxpYyByZW5hbWVRdWVzdGlvbihvbGROYW1lOiBzdHJpbmcsIG5ld05hbWU6IHN0cmluZykge1xuICAgIHRoaXMucmVuYW1lUXVlc3Rpb25Db3JlKG9sZE5hbWUsIG5ld05hbWUsIHRoaXMuaXRlbXMpO1xuICAgIHRoaXMucmVuYW1lUXVlc3Rpb25Db3JlKG9sZE5hbWUsIG5ld05hbWUsIHRoaXMuaW52aXNpYmxlSXRlbXMpO1xuICB9XG4gIHB1YmxpYyBoYXNFcnJvcigpOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMuZWRpdGFibGVJdGVtKSByZXR1cm4gZmFsc2U7XG4gICAgdmFyIHRleHQgPSBcIlwiO1xuICAgIGlmICghdGhpcy5pc0V4cHJlc3Npb25WYWxpZCkge1xuICAgICAgdGV4dCA9IGdldExvZ2ljU3RyaW5nKFwiZXhwcmVzc2lvbkludmFsaWRcIik7XG4gICAgfVxuICAgIHZhciBvcHMgPSB0aGlzLmVkaXRhYmxlSXRlbS5vcGVyYXRpb25zO1xuICAgIGlmICghdGV4dCAmJiBvcHMubGVuZ3RoID09IDApIHtcbiAgICAgIHRleHQgPSBnZXRMb2dpY1N0cmluZyhcIm5vT3BlcmF0aW9uRXJyb3JcIik7XG4gICAgfVxuICAgIGlmICghdGV4dCkge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBvcHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKG9wc1tpXS5oYXNFcnJvcigpKSB7XG4gICAgICAgICAgdGV4dCA9IGdldExvZ2ljU3RyaW5nKFwib3BlcmF0aW9uSW52YWxpZFwiKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLmtvRXJyb3JUZXh0KHRleHQpO1xuICAgIHJldHVybiAhIXRleHQ7XG4gIH1cbiAgcHVibGljIGdldCBhZGROZXdPcGVyYXRpb25UZXh0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGdldExvZ2ljU3RyaW5nKFwiYWRkTmV3T3BlcmF0aW9uXCIpO1xuICB9XG4gIHByaXZhdGUgZ2V0IGlzRXhwcmVzc2lvblZhbGlkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmV4cHJlc3Npb25FZGl0b3IuaXNFeHByZXNzaW9uVmFsaWQ7XG4gIH1cbiAgcHJpdmF0ZSByZW5hbWVRdWVzdGlvbkNvcmUoXG4gICAgb2xkTmFtZTogc3RyaW5nLFxuICAgIG5ld05hbWU6IHN0cmluZyxcbiAgICBpdGVtczogQXJyYXk8U3VydmV5TG9naWNJdGVtPlxuICApIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpdGVtc1tpXS5yZW5hbWVRdWVzdGlvbihvbGROYW1lLCBuZXdOYW1lKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVGhlcmUgYXJlIDMgbW9kZXM6IHZpZXcsIG5ldywgZWRpdFxuICAgKi9cbiAgcHVibGljIGdldCBtb2RlKCkge1xuICAgIHJldHVybiB0aGlzLmtvTW9kZSgpO1xuICB9XG4gIHB1YmxpYyBzZXQgbW9kZSh2YWw6IHN0cmluZykge1xuICAgIGlmICh2YWwgIT09IFwidmlld1wiICYmIHZhbCAhPT0gXCJuZXdcIiAmJiB2YWwgIT09IFwiZWRpdFwiKSByZXR1cm47XG4gICAgaWYgKHRoaXMubW9kZSA9PSB2YWwpIHJldHVybjtcbiAgICB2YXIgb2xkTW9kZSA9IHRoaXMubW9kZTtcbiAgICBpZiAodmFsID09IFwibmV3XCIgfHwgdmFsID09IFwiZWRpdFwiKSB7XG4gICAgICB0aGlzLnVwZGF0ZUxvZ2ljVHlwZXMoKTtcbiAgICB9XG4gICAgaWYgKChvbGRNb2RlID09IFwibmV3XCIgfHwgb2xkTW9kZSA9PSBcImVkaXRcIikgJiYgdmFsID09IFwidmlld1wiKSB7XG4gICAgICB0aGlzLnVwZGF0ZVZpc2libGVJdGVtcygpO1xuICAgIH1cbiAgICB0aGlzLmtvTW9kZSh2YWwpO1xuICB9XG4gIHB1YmxpYyBhZGROZXcoKSB7XG4gICAgdGhpcy5rb0VkaXRhYmxlSXRlbShuZXcgU3VydmV5TG9naWNJdGVtKHRoaXMpKTtcbiAgICB0aGlzLmV4cHJlc3Npb25FZGl0b3IuZWRpdGluZ1ZhbHVlID0gXCJcIjtcbiAgICB0aGlzLm1vZGUgPSBcIm5ld1wiO1xuICB9XG4gIHB1YmxpYyBlZGl0SXRlbShpdGVtOiBTdXJ2ZXlMb2dpY0l0ZW0pIHtcbiAgICB0aGlzLmtvRWRpdGFibGVJdGVtKGl0ZW0pO1xuICAgIHRoaXMuZXhwcmVzc2lvbkVkaXRvci5lZGl0aW5nVmFsdWUgPSBpdGVtLmV4cHJlc3Npb247XG4gICAgdGhpcy5tb2RlID0gXCJlZGl0XCI7XG4gIH1cbiAgcHVibGljIHJlbW92ZUl0ZW0oaXRlbTogU3VydmV5TG9naWNJdGVtKSB7XG4gICAgaXRlbS5hcHBseShcIlwiKTtcbiAgICB2YXIgaW5kZXggPSB0aGlzLmtvSXRlbXMuaW5kZXhPZihpdGVtKTtcbiAgICBpZiAoaW5kZXggPiAtMSkge1xuICAgICAgdGhpcy5rb0l0ZW1zLnNwbGljZShpbmRleCwgMSk7XG4gICAgfVxuICAgIHRoaXMub25JdGVtQ2hhbmdlZChpdGVtLCBcImRlbGV0ZVwiKTtcbiAgfVxuICBwdWJsaWMgYWRkTmV3T3BlcmF0aW9uKGxvZ2ljVHlwZTogU3VydmV5TG9naWNUeXBlKTogU3VydmV5TG9naWNPcGVyYXRpb24ge1xuICAgIHZhciBlbGVtZW50ID0gbG9naWNUeXBlLmNyZWF0ZU5ld0VsZW1lbnQodGhpcy5zdXJ2ZXkpO1xuICAgIHJldHVybiB0aGlzLmVkaXRhYmxlSXRlbS5hZGRPcGVyYXRpb24obG9naWNUeXBlLCBlbGVtZW50KTtcbiAgfVxuICBwdWJsaWMgcmVtb3ZlT3BlcmF0aW9uKG9wOiBTdXJ2ZXlMb2dpY09wZXJhdGlvbikge1xuICAgIHRoaXMuZWRpdGFibGVJdGVtLnJlbW92ZU9wZXJhdGlvbihvcCk7XG4gIH1cbiAgcHVibGljIGdldEV4cHJlc3Npb25Bc0Rpc3BsYXlUZXh0KGV4cHJlc3Npb246IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFN1cnZleUxvZ2ljVHlwZS5leHByZXNzaW9uVG9EaXNwbGF5VGV4dChcbiAgICAgIHRoaXMuc3VydmV5LFxuICAgICAgdGhpcy5vcHRpb25zLFxuICAgICAgZXhwcmVzc2lvblxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIGJ1aWxkSXRlbXMoc2hvd0luVUk6IGJvb2xlYW4pOiBBcnJheTxTdXJ2ZXlMb2dpY0l0ZW0+IHtcbiAgICB2YXIgcmVzID0gW107XG4gICAgdmFyIGhhc2ggPSB7fTtcbiAgICB2YXIgZWxlbWVudHMgPSB0aGlzLmdldEFsbEVsZW1lbnRzKCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbGVtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy5idWlsZEl0ZW1zQnlFbGVtZW50KGVsZW1lbnRzW2ldLCByZXMsIGhhc2gsIHNob3dJblVJKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0QWxsRWxlbWVudHMoKTogQXJyYXk8U3VydmV5LkJhc2U+IHtcbiAgICB2YXIgcmVzID0gW107XG4gICAgdGhpcy5BZGRFbGVtZW50cyh0aGlzLnN1cnZleS5wYWdlcywgcmVzKTtcbiAgICB0aGlzLkFkZEVsZW1lbnRzKHRoaXMuc3VydmV5LmdldEFsbFF1ZXN0aW9ucygpLCByZXMpO1xuICAgIHRoaXMuQWRkRWxlbWVudHModGhpcy5zdXJ2ZXkuZ2V0QWxsUGFuZWxzKCksIHJlcyk7XG4gICAgdGhpcy5BZGRFbGVtZW50cyh0aGlzLnN1cnZleS50cmlnZ2VycywgcmVzKTtcbiAgICB0aGlzLkFkZEVsZW1lbnRzKHRoaXMuc3VydmV5LmNvbXBsZXRlZEh0bWxPbkNvbmRpdGlvbiwgcmVzKTtcbiAgICB0aGlzLkFkZEVsZW1lbnRzKHRoaXMuc3VydmV5LmNhbGN1bGF0ZWRWYWx1ZXMsIHJlcyk7XG4gICAgdGhpcy5BZGRFbGVtZW50cyh0aGlzLmdldE1hdHJpeENvbHVtbnMoKSwgcmVzKTtcbiAgICB0aGlzLkFkZEVsZW1lbnRzKHRoaXMuZ2V0VmFsaWRhdG9ycygpLCByZXMpO1xuICAgIHRoaXMuQWRkRWxlbWVudHModGhpcy5nZXRJdGVtVmFsdWVzKCksIHJlcyk7XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuICBwcml2YXRlIGdldE1hdHJpeENvbHVtbnMoKTogQXJyYXk8U3VydmV5LkJhc2U+IHtcbiAgICB2YXIgcmVzID0gW107XG4gICAgdmFyIHF1ZXN0aW9ucyA9IHRoaXMuc3VydmV5LmdldEFsbFF1ZXN0aW9ucygpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcXVlc3Rpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgcSA9IHF1ZXN0aW9uc1tpXTtcbiAgICAgIHZhciBjb2x1bW5zID0gcVtcImNvbHVtbnNcIl07XG4gICAgICBpZiAoIWNvbHVtbnMpIGNvbnRpbnVlO1xuICAgICAgdmFyIHByb3AgPSBTdXJ2ZXkuU2VyaWFsaXplci5maW5kUHJvcGVydHkocS5nZXRUeXBlKCksIFwiY29sdW1uc1wiKTtcbiAgICAgIGlmICghcHJvcCB8fCBwcm9wLmNsYXNzTmFtZSAhPT0gXCJtYXRyaXhkcm9wZG93bmNvbHVtblwiKSBjb250aW51ZTtcbiAgICAgIHRoaXMuQWRkRWxlbWVudHMoY29sdW1ucywgcmVzKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuICBwcml2YXRlIGdldFZhbGlkYXRvcnMoKTogQXJyYXk8U3VydmV5LkJhc2U+IHtcbiAgICB2YXIgcmVzID0gW107XG4gICAgdmFyIHF1ZXN0aW9ucyA9IHRoaXMuc3VydmV5LmdldEFsbFF1ZXN0aW9ucygpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcXVlc3Rpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICB0aGlzLkFkZEVsZW1lbnRzKCg8U3VydmV5LlF1ZXN0aW9uPnF1ZXN0aW9uc1tpXSkudmFsaWRhdG9ycywgcmVzKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuICBwcml2YXRlIGdldEl0ZW1WYWx1ZXMoKTogQXJyYXk8U3VydmV5LkJhc2U+IHtcbiAgICB2YXIgcmVzID0gW107XG4gICAgdmFyIHF1ZXN0aW9ucyA9IHRoaXMuc3VydmV5LmdldEFsbFF1ZXN0aW9ucygpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcXVlc3Rpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgcSA9IHF1ZXN0aW9uc1tpXTtcbiAgICAgIHZhciBjaG9pY2VzID0gcVtcImNob2ljZXNcIl07XG4gICAgICBpZiAoIWNob2ljZXMpIGNvbnRpbnVlO1xuICAgICAgdmFyIHByb3AgPSBTdXJ2ZXkuU2VyaWFsaXplci5maW5kUHJvcGVydHkocS5nZXRUeXBlKCksIFwiY2hvaWNlc1wiKTtcbiAgICAgIGlmICghcHJvcCB8fCBwcm9wLnR5cGUgIT09IFwiaXRlbXZhbHVlW11cIikgY29udGludWU7XG4gICAgICB0aGlzLkFkZEVsZW1lbnRzKGNob2ljZXMsIHJlcyk7XG4gICAgfVxuICAgIHJldHVybiByZXM7XG4gIH1cbiAgcHJpdmF0ZSB1cGRhdGVMb2dpY1R5cGVzKCkge1xuICAgIHZhciBsdHMgPSB0aGlzLmxvZ2ljVHlwZXM7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsdHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGx0c1tpXS51cGRhdGUoKTtcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBBZGRFbGVtZW50cyhzcmM6IEFycmF5PGFueT4sIGRlc3Q6IEFycmF5PGFueT4pIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNyYy5sZW5ndGg7IGkrKykge1xuICAgICAgZGVzdC5wdXNoKHNyY1tpXSk7XG4gICAgfVxuICB9XG4gIHByaXZhdGUgYnVpbGRJdGVtc0J5RWxlbWVudChcbiAgICBlbGVtZW50OiBTdXJ2ZXkuQmFzZSxcbiAgICBkZXN0OiBBcnJheTxTdXJ2ZXlMb2dpY0l0ZW0+LFxuICAgIGhhc2g6IFN1cnZleS5IYXNoVGFibGU8U3VydmV5TG9naWNJdGVtPixcbiAgICBzaG93SW5VSTogYm9vbGVhblxuICApIHtcbiAgICB2YXIgdHlwZXMgPSB0aGlzLmdldEVsZW1lbnRBbGxUeXBlcyhlbGVtZW50KTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubG9naWNUeXBlcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGx0ID0gdGhpcy5sb2dpY1R5cGVzW2ldO1xuICAgICAgaWYgKGx0LnNob3dJblVJICE9PSBzaG93SW5VSSkgY29udGludWU7XG4gICAgICB2YXIgZXhwcmVzc2lvbiA9IGVsZW1lbnRbbHQucHJvcGVydHlOYW1lXTtcbiAgICAgIGlmIChcbiAgICAgICAgdHlwZXMuaW5kZXhPZihsdC5iYXNlQ2xhc3MpID4gLTEgJiZcbiAgICAgICAgIVN1cnZleS5IZWxwZXJzLmlzVmFsdWVFbXB0eShleHByZXNzaW9uKVxuICAgICAgKSB7XG4gICAgICAgIHZhciBrZXkgPSB0aGlzLmdldEV4cHJlc3Npb25IYXNoS2V5KGV4cHJlc3Npb24pO1xuICAgICAgICB2YXIgaXRlbSA9IGhhc2hba2V5XTtcbiAgICAgICAgaWYgKCFpdGVtKSB7XG4gICAgICAgICAgaXRlbSA9IG5ldyBTdXJ2ZXlMb2dpY0l0ZW0odGhpcywgZXhwcmVzc2lvbik7XG4gICAgICAgICAgaGFzaFtrZXldID0gaXRlbTtcbiAgICAgICAgICBkZXN0LnB1c2goaXRlbSk7XG4gICAgICAgIH1cbiAgICAgICAgaXRlbS5hZGRPcGVyYXRpb24obHQsIGVsZW1lbnQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBwcml2YXRlIGdldEV4cHJlc3Npb25IYXNoS2V5KGV4cHJlc3Npb246IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGV4cHJlc3Npb24ucmVwbGFjZShcIiBcIiwgXCJcIikudG9Mb3dlckNhc2UoKTtcbiAgfVxuICBwcml2YXRlIGdldEVsZW1lbnRBbGxUeXBlcyhlbGVtZW50OiBTdXJ2ZXkuQmFzZSkge1xuICAgIHZhciB0eXBlcyA9IFtdO1xuICAgIHZhciB0eXBlID0gZWxlbWVudC5nZXRUeXBlKCk7XG4gICAgdHlwZXMucHVzaCh0eXBlKTtcbiAgICB3aGlsZSAoISF0eXBlICYmIHR5cGUgIT0gXCJiYXNlXCIpIHtcbiAgICAgIHZhciBjbCA9IFN1cnZleS5TZXJpYWxpemVyLmZpbmRDbGFzcyh0eXBlKTtcbiAgICAgIGlmICghY2wpIGJyZWFrO1xuICAgICAgdHlwZSA9IGNsLnBhcmVudE5hbWU7XG4gICAgICBpZiAoISF0eXBlKSB7XG4gICAgICAgIHR5cGVzLnB1c2godHlwZSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0eXBlcztcbiAgfVxuICBwcm90ZWN0ZWQgY3JlYXRlTG9naWNUeXBlcygpOiBBcnJheTxTdXJ2ZXlMb2dpY1R5cGU+IHtcbiAgICB2YXIgcmVzID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBTdXJ2ZXlMb2dpYy50eXBlcy5sZW5ndGg7IGkrKykge1xuICAgICAgcmVzLnB1c2goXG4gICAgICAgIG5ldyBTdXJ2ZXlMb2dpY1R5cGUoU3VydmV5TG9naWMudHlwZXNbaV0sIHRoaXMuc3VydmV5LCB0aGlzLm9wdGlvbnMpXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gcmVzO1xuICB9XG4gIHByaXZhdGUgZ2V0RXhwcmVzc2lvblByb3BlcnR5KCk6IFN1cnZleS5Kc29uT2JqZWN0UHJvcGVydHkge1xuICAgIHZhciBwcm9wZXJ0eSA9IFN1cnZleS5TZXJpYWxpemVyLmZpbmRQcm9wZXJ0eShcInN1cnZleVwiLCBcImhpZGRlbkxvZ2ljXCIpO1xuICAgIGlmICghIXByb3BlcnR5KSByZXR1cm4gcHJvcGVydHk7XG4gICAgU3VydmV5LlNlcmlhbGl6ZXIuYWRkUHJvcGVydHkoXCJzdXJ2ZXlcIiwge1xuICAgICAgbmFtZTogXCJoaWRkZW5Mb2dpYzpjb25kaXRpb25cIixcbiAgICAgIHZpc2libGU6IGZhbHNlLFxuICAgICAgaXNTZXJpYWxpemFibGU6IGZhbHNlXG4gICAgfSk7XG4gICAgcmV0dXJuIFN1cnZleS5TZXJpYWxpemVyLmZpbmRQcm9wZXJ0eShcInN1cnZleVwiLCBcImhpZGRlbkxvZ2ljXCIpO1xuICB9XG4gIHByaXZhdGUgY3JlYXRlRXhwcmVzc2lvblByb3BlcnR5RWRpdG9yKCkge1xuICAgIHRoaXMuZXhwcmVzc2lvbkVkaXRvciA9IG5ldyBTdXJ2ZXlQcm9wZXJ0eUNvbmRpdGlvbkVkaXRvcihcbiAgICAgIHRoaXMuZ2V0RXhwcmVzc2lvblByb3BlcnR5KClcbiAgICApO1xuICAgIHRoaXMuZXhwcmVzc2lvbkVkaXRvci5vYmplY3QgPSB0aGlzLnN1cnZleTtcbiAgfVxufVxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2xvZ2ljLnRzIiwiaW1wb3J0ICogYXMga28gZnJvbSBcImtub2Nrb3V0XCI7XG5pbXBvcnQgKiBhcyBTdXJ2ZXkgZnJvbSBcInN1cnZleS1rbm9ja291dFwiO1xuXG5pbXBvcnQgeyBTdXJ2ZXlPYmplY3RQcm9wZXJ0eSB9IGZyb20gXCIuL29iamVjdFByb3BlcnR5XCI7XG5pbXBvcnQgeyBJU3VydmV5T2JqZWN0RWRpdG9yT3B0aW9ucyB9IGZyb20gXCIuL3Byb3BlcnR5RWRpdG9ycy9wcm9wZXJ0eUVkaXRvckJhc2VcIjtcbmltcG9ydCB7IGVkaXRvckxvY2FsaXphdGlvbiB9IGZyb20gXCIuL2VkaXRvckxvY2FsaXphdGlvblwiO1xuaW1wb3J0IHsgU3VydmV5SGVscGVyIH0gZnJvbSBcIi4vc3VydmV5SGVscGVyXCI7XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlPYmplY3RFZGl0b3Ige1xuICBwcml2YXRlIHNlbGVjdGVkT2JqZWN0VmFsdWU6IGFueTtcbiAgcHJpdmF0ZSBvbGRBY3RpdmVQcm9wZXJ0eTogU3VydmV5T2JqZWN0UHJvcGVydHkgPSBudWxsO1xuICBrb0FmdGVyUmVuZGVyOiBhbnk7XG4gIHB1YmxpYyBrb1Byb3BlcnRpZXMgPSBrby5vYnNlcnZhYmxlQXJyYXk8U3VydmV5T2JqZWN0UHJvcGVydHk+KCk7XG4gIHB1YmxpYyBrb0FjdGl2ZVByb3BlcnR5ID0ga28ub2JzZXJ2YWJsZTxTdXJ2ZXlPYmplY3RQcm9wZXJ0eT4oKTtcbiAgcHVibGljIGtvSGFzT2JqZWN0ID0ga28ub2JzZXJ2YWJsZTxib29sZWFuPigpO1xuICBwdWJsaWMgb25Qcm9wZXJ0eVZhbHVlQ2hhbmdlZDogU3VydmV5LkV2ZW50PFxuICAgIChzZW5kZXI6IFN1cnZleU9iamVjdEVkaXRvciwgb3B0aW9uczogYW55KSA9PiBhbnksXG4gICAgYW55XG4gID4gPSBuZXcgU3VydmV5LkV2ZW50PFxuICAgIChzZW5kZXI6IFN1cnZleU9iamVjdEVkaXRvciwgb3B0aW9uczogYW55KSA9PiBhbnksXG4gICAgYW55XG4gID4oKTtcbiAgcHVibGljIG9uU29ydFByb3BlcnR5Q2FsbGJhY2s6IChcbiAgICBvYmplY3Q6IGFueSxcbiAgICBwcm9wZXJ0eTE6IFN1cnZleS5Kc29uT2JqZWN0UHJvcGVydHksXG4gICAgcHJvcGVydHkyOiBTdXJ2ZXkuSnNvbk9iamVjdFByb3BlcnR5XG4gICkgPT4gbnVtYmVyO1xuICBwdWJsaWMgb25BZnRlclJlbmRlckNhbGxiYWNrOiAoXG4gICAgb2JqZWN0OiBhbnksXG4gICAgaHRtbEVsZW1lbnQ6IEhUTUxFbGVtZW50LFxuICAgIHByb3BlcnR5OiBTdXJ2ZXlPYmplY3RQcm9wZXJ0eVxuICApID0+IGFueTtcblxuICBjb25zdHJ1Y3RvcihwdWJsaWMgcHJvcGVydHlFZGl0b3JPcHRpb25zOiBJU3VydmV5T2JqZWN0RWRpdG9yT3B0aW9ucyA9IG51bGwpIHtcbiAgICB0aGlzLmtvQWN0aXZlUHJvcGVydHkuc3Vic2NyaWJlKG5ld1ZhbHVlID0+IHtcbiAgICAgIGlmICh0aGlzLm9sZEFjdGl2ZVByb3BlcnR5ID09PSBuZXdWYWx1ZSkgcmV0dXJuO1xuICAgICAgaWYgKHRoaXMub2xkQWN0aXZlUHJvcGVydHkpIHRoaXMub2xkQWN0aXZlUHJvcGVydHkuaXNBY3RpdmUgPSBmYWxzZTtcbiAgICAgIHRoaXMub2xkQWN0aXZlUHJvcGVydHkgPSBuZXdWYWx1ZTtcbiAgICAgIGlmIChuZXdWYWx1ZSkgbmV3VmFsdWUuaXNBY3RpdmUgPSB0cnVlO1xuICAgIH0pO1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICB0aGlzLmtvQWZ0ZXJSZW5kZXIgPSBmdW5jdGlvbihlbCwgY29uKSB7XG4gICAgICBzZWxmLmFmdGVyUmVuZGVyKGVsLCBjb24pO1xuICAgIH07XG4gIH1cblxuICBwdWJsaWMgZ2V0IHNlbGVjdGVkT2JqZWN0KCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRPYmplY3RWYWx1ZTtcbiAgfVxuICBwdWJsaWMgc2V0IHNlbGVjdGVkT2JqZWN0KHZhbHVlOiBhbnkpIHtcbiAgICBpZiAodGhpcy5zZWxlY3RlZE9iamVjdFZhbHVlID09IHZhbHVlKSByZXR1cm47XG4gICAgdGhpcy5rb0hhc09iamVjdCh2YWx1ZSAhPSBudWxsKTtcbiAgICB0aGlzLnNlbGVjdGVkT2JqZWN0VmFsdWUgPSB2YWx1ZTtcbiAgICB0aGlzLnVwZGF0ZVByb3BlcnRpZXMoKTtcbiAgICB0aGlzLnVwZGF0ZVByb3BlcnRpZXNPYmplY3QoKTtcbiAgfVxuICBwdWJsaWMgZ2V0UHJvcGVydHlFZGl0b3IobmFtZTogc3RyaW5nKTogU3VydmV5T2JqZWN0UHJvcGVydHkge1xuICAgIHZhciBwcm9wZXJ0aWVzID0gdGhpcy5rb1Byb3BlcnRpZXMoKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BlcnRpZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChwcm9wZXJ0aWVzW2ldLm5hbWUgPT0gbmFtZSkgcmV0dXJuIHByb3BlcnRpZXNbaV07XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHB1YmxpYyBjaGFuZ2VBY3RpdmVQcm9wZXJ0eShwcm9wZXJ0eTogU3VydmV5T2JqZWN0UHJvcGVydHkpIHtcbiAgICB0aGlzLmtvQWN0aXZlUHJvcGVydHkocHJvcGVydHkpO1xuICB9XG4gIHB1YmxpYyBvYmplY3RDaGFuZ2VkKCkge1xuICAgIHRoaXMudXBkYXRlUHJvcGVydGllc09iamVjdCgpO1xuICB9XG4gIHByb3RlY3RlZCBhZnRlclJlbmRlcihlbGVtZW50cywgcHJvcCkge1xuICAgIGlmIChcbiAgICAgICFTdXJ2ZXkuU3VydmV5RWxlbWVudCB8fFxuICAgICAgIVN1cnZleS5TdXJ2ZXlFbGVtZW50LkdldEZpcnN0Tm9uVGV4dEVsZW1lbnQgfHxcbiAgICAgICF0aGlzLm9uQWZ0ZXJSZW5kZXJDYWxsYmFja1xuICAgIClcbiAgICAgIHJldHVybjtcbiAgICB2YXIgZWwgPSBTdXJ2ZXkuU3VydmV5RWxlbWVudC5HZXRGaXJzdE5vblRleHRFbGVtZW50KGVsZW1lbnRzKTtcbiAgICB2YXIgdEVsID0gZWxlbWVudHNbMF07XG4gICAgaWYgKHRFbC5ub2RlTmFtZSA9PT0gXCIjdGV4dFwiKSB0RWwuZGF0YSA9IFwiXCI7XG4gICAgdEVsID0gZWxlbWVudHNbZWxlbWVudHMubGVuZ3RoIC0gMV07XG4gICAgaWYgKHRFbC5ub2RlTmFtZSA9PT0gXCIjdGV4dFwiKSB0RWwuZGF0YSA9IFwiXCI7XG4gICAgdGhpcy5vbkFmdGVyUmVuZGVyQ2FsbGJhY2sodGhpcy5zZWxlY3RlZE9iamVjdCwgZWwsIHByb3ApO1xuICB9XG4gIHByb3RlY3RlZCB1cGRhdGVQcm9wZXJ0aWVzKCkge1xuICAgIGlmICghdGhpcy5zZWxlY3RlZE9iamVjdCB8fCAhdGhpcy5zZWxlY3RlZE9iamVjdC5nZXRUeXBlKSB7XG4gICAgICB0aGlzLmtvUHJvcGVydGllcyhbXSk7XG4gICAgICB0aGlzLmtvQWN0aXZlUHJvcGVydHkobnVsbCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciBwcm9wZXJ0aWVzID0gU3VydmV5LlNlcmlhbGl6ZXIuZ2V0UHJvcGVydGllc0J5T2JqKHRoaXMuc2VsZWN0ZWRPYmplY3QpO1xuICAgIHZhciBvYmplY3RQcm9wZXJ0aWVzID0gW107XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIHZhciBwcm9wRXZlbnQgPSAocHJvcGVydHk6IFN1cnZleU9iamVjdFByb3BlcnR5LCBuZXdWYWx1ZTogYW55KSA9PiB7XG4gICAgICBpZiAoXG4gICAgICAgIHByb3BlcnR5LnByb3BlcnR5LmlzUmVxdWlyZWQgJiZcbiAgICAgICAgU3VydmV5LkhlbHBlcnMuaXNWYWx1ZUVtcHR5KG5ld1ZhbHVlKVxuICAgICAgKSB7XG4gICAgICAgIHByb3BlcnR5LmtvVmFsdWUocHJvcGVydHkub2JqZWN0W3Byb3BlcnR5Lm5hbWVdKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdmFyIG9wdGlvbnMgPSB7XG4gICAgICAgIHByb3BlcnR5OiBwcm9wZXJ0eS5wcm9wZXJ0eSxcbiAgICAgICAgb2JqZWN0OiBwcm9wZXJ0eS5vYmplY3QsXG4gICAgICAgIG5ld1ZhbHVlOiBuZXdWYWx1ZSxcbiAgICAgICAgdXBkYXRlZFZhbHVlOiBudWxsXG4gICAgICB9O1xuICAgICAgc2VsZi5vblByb3BlcnR5VmFsdWVDaGFuZ2VkLmZpcmUodGhpcywgb3B0aW9ucyk7XG4gICAgICBpZiAoISFvcHRpb25zLnVwZGF0ZWRWYWx1ZSAmJiBvcHRpb25zLnVwZGF0ZWRWYWx1ZSAhPSBvcHRpb25zLm5ld1ZhbHVlKSB7XG4gICAgICAgIHByb3BlcnR5LmtvVmFsdWUob3B0aW9ucy51cGRhdGVkVmFsdWUpO1xuICAgICAgfVxuICAgIH07XG4gICAgdmFyIHZpc2libGVQcm9wZXJ0aWVzID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoIXRoaXMuY2FuU2hvd1Byb3BlcnR5KHByb3BlcnRpZXNbaV0pKSBjb250aW51ZTtcbiAgICAgIHZpc2libGVQcm9wZXJ0aWVzLnB1c2gocHJvcGVydGllc1tpXSk7XG4gICAgfVxuICAgIHZhciBzb3J0RXZlbnQgPSBmdW5jdGlvbihcbiAgICAgIGE6IFN1cnZleU9iamVjdFByb3BlcnR5LFxuICAgICAgYjogU3VydmV5T2JqZWN0UHJvcGVydHlcbiAgICApOiBudW1iZXIge1xuICAgICAgdmFyIHJlcyA9IDA7XG4gICAgICBpZiAoc2VsZi5vblNvcnRQcm9wZXJ0eUNhbGxiYWNrKSB7XG4gICAgICAgIHJlcyA9IHNlbGYub25Tb3J0UHJvcGVydHlDYWxsYmFjayhcbiAgICAgICAgICBzZWxmLnNlbGVjdGVkT2JqZWN0LFxuICAgICAgICAgIGEucHJvcGVydHksXG4gICAgICAgICAgYi5wcm9wZXJ0eVxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgaWYgKHJlcykgcmV0dXJuIHJlcztcbiAgICAgIGlmIChhLmRpc3BsYXlOYW1lID09IGIuZGlzcGxheU5hbWUpIHJldHVybiAwO1xuICAgICAgaWYgKGEuZGlzcGxheU5hbWUgPiBiLmRpc3BsYXlOYW1lKSByZXR1cm4gMTtcbiAgICAgIHJldHVybiAtMTtcbiAgICB9O1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmlzaWJsZVByb3BlcnRpZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBvYmplY3RQcm9wZXJ0eSA9IG5ldyBTdXJ2ZXlPYmplY3RQcm9wZXJ0eShcbiAgICAgICAgdmlzaWJsZVByb3BlcnRpZXNbaV0sXG4gICAgICAgIHByb3BFdmVudCxcbiAgICAgICAgdGhpcy5wcm9wZXJ0eUVkaXRvck9wdGlvbnNcbiAgICAgICk7XG4gICAgICBvYmplY3RQcm9wZXJ0eS5lZGl0b3IuaXNJbnBsYWNlUHJvcGVydHkgPSB0cnVlO1xuICAgICAgb2JqZWN0UHJvcGVydHkub25EZXBlbmRlZFByb3BlcnR5VXBkYXRlQ2FsbGJhY2sgPSBmdW5jdGlvbihcbiAgICAgICAgcHJvcE5hbWU6IHN0cmluZ1xuICAgICAgKSB7XG4gICAgICAgIHNlbGYudXBkYXRlUHJvcGVydHlFZGl0b3IocHJvcE5hbWUpO1xuICAgICAgfTtcbiAgICAgIG9iamVjdFByb3BlcnRpZXMucHVzaChvYmplY3RQcm9wZXJ0eSk7XG4gICAgfVxuICAgIG9iamVjdFByb3BlcnRpZXMuc29ydChzb3J0RXZlbnQpO1xuICAgIHRoaXMua29Qcm9wZXJ0aWVzKG9iamVjdFByb3BlcnRpZXMpO1xuICAgIHZhciBwcm9wRWRpdG9yID0gdGhpcy5nZXRQcm9wZXJ0eUVkaXRvcihcIm5hbWVcIik7XG4gICAgaWYgKCFwcm9wRWRpdG9yICYmIG9iamVjdFByb3BlcnRpZXMubGVuZ3RoID4gMCkge1xuICAgICAgcHJvcEVkaXRvciA9IHRoaXMuZ2V0UHJvcGVydHlFZGl0b3Iob2JqZWN0UHJvcGVydGllc1swXS5uYW1lKTtcbiAgICB9XG4gICAgaWYgKHByb3BFZGl0b3IpIHtcbiAgICAgIHRoaXMua29BY3RpdmVQcm9wZXJ0eShwcm9wRWRpdG9yKTtcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSB1cGRhdGVQcm9wZXJ0eUVkaXRvcihwcm9wTmFtZTogc3RyaW5nKSB7XG4gICAgdmFyIHByb3BFZCA9IHRoaXMuZ2V0UHJvcGVydHlFZGl0b3IocHJvcE5hbWUpO1xuICAgIGlmICghIXByb3BFZCkge1xuICAgICAgcHJvcEVkLm9iamVjdCA9IHRoaXMuc2VsZWN0ZWRPYmplY3Q7XG4gICAgICBwcm9wRWQudXBkYXRlRHluYW1pY1Byb3BlcnRpZXMoKTtcbiAgICB9XG4gIH1cbiAgcHJvdGVjdGVkIGNhblNob3dQcm9wZXJ0eShwcm9wZXJ0eTogU3VydmV5Lkpzb25PYmplY3RQcm9wZXJ0eSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBTdXJ2ZXlIZWxwZXIuaXNQcm9wZXJ0eVZpc2libGUoXG4gICAgICB0aGlzLnNlbGVjdGVkT2JqZWN0LFxuICAgICAgcHJvcGVydHksXG4gICAgICB0aGlzLnByb3BlcnR5RWRpdG9yT3B0aW9uc1xuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIHVwZGF0ZVByb3BlcnRpZXNPYmplY3QoKSB7XG4gICAgdmFyIHByb3BlcnRpZXMgPSB0aGlzLmtvUHJvcGVydGllcygpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcGVydGllcy5sZW5ndGg7IGkrKykge1xuICAgICAgcHJvcGVydGllc1tpXS5vYmplY3QgPSB0aGlzLnNlbGVjdGVkT2JqZWN0O1xuICAgIH1cbiAgfVxufVxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL29iamVjdEVkaXRvci50cyIsImltcG9ydCAqIGFzIFN1cnZleSBmcm9tIFwic3VydmV5LWtub2Nrb3V0XCI7XG5pbXBvcnQgeyBTdXJ2ZXlQcm9wZXJ0eUVkaXRvckJhc2UgfSBmcm9tIFwiLi9wcm9wZXJ0eUVkaXRvckJhc2VcIjtcblxuZXhwb3J0IGNsYXNzIFN1cnZleVByb3BlcnR5Q3VzdG9tRWRpdG9yIGV4dGVuZHMgU3VydmV5UHJvcGVydHlFZGl0b3JCYXNlIHtcbiAgcHJpdmF0ZSB3aWRnZXRKU09OVmFsdWU6IGFueTtcbiAgcHVibGljIG9uVmFsdWVDaGFuZ2VkQ2FsbGJhY2s6IChuZXdWYWx1ZTogYW55KSA9PiB2b2lkO1xuICBjb25zdHJ1Y3Rvcihwcm9wZXJ0eTogU3VydmV5Lkpzb25PYmplY3RQcm9wZXJ0eSwgd2lkZ2V0SlNPTjogYW55ID0gbnVsbCkge1xuICAgIHN1cGVyKHByb3BlcnR5KTtcbiAgICB0aGlzLndpZGdldEpTT05WYWx1ZSA9IHdpZGdldEpTT047XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIHRoaXNbXCJrb0FmdGVyUmVuZGVyXCJdID0gZnVuY3Rpb24oZWwsIGNvbikge1xuICAgICAgc2VsZi5kb0FmdGVyUmVuZGVyKGVsLCBjb24pO1xuICAgIH07XG4gIH1cbiAgcHVibGljIGdldCBlZGl0b3JUeXBlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFwiY3VzdG9tXCI7XG4gIH1cbiAgcHVibGljIGdldCB3aWRnZXRKU09OKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMud2lkZ2V0SlNPTlZhbHVlO1xuICB9XG4gIHByaXZhdGUgaXNWYWx1ZUNoYW5naW5nOiBib29sZWFuID0gZmFsc2U7XG4gIHByb3RlY3RlZCBvblZhbHVlQ2hhbmdlZCgpIHtcbiAgICBpZiAodGhpcy5pc1ZhbHVlQ2hhbmdpbmcpIHJldHVybjtcbiAgICB0aGlzLmlzVmFsdWVDaGFuZ2luZyA9IHRydWU7XG4gICAgc3VwZXIub25WYWx1ZUNoYW5nZWQoKTtcbiAgICBpZiAodGhpcy5vblZhbHVlQ2hhbmdlZENhbGxiYWNrKVxuICAgICAgdGhpcy5vblZhbHVlQ2hhbmdlZENhbGxiYWNrKHRoaXMuZWRpdGluZ1ZhbHVlKTtcbiAgICB0aGlzLmlzVmFsdWVDaGFuZ2luZyA9IGZhbHNlO1xuICB9XG4gIHByb3RlY3RlZCBjaGVja0ZvckVycm9ycygpOiBib29sZWFuIHtcbiAgICB2YXIgcmVzID0gc3VwZXIuY2hlY2tGb3JFcnJvcnMoKTtcbiAgICBpZiAoISFyZXMpIHJldHVybiByZXM7XG4gICAgdmFyIGVycm9yVGV4dCA9IHRoaXMud2lkZ2V0VmFsaWRhdGUoKTtcbiAgICBpZiAoISFlcnJvclRleHQpIHtcbiAgICAgIHRoaXMua29FcnJvclRleHQoZXJyb3JUZXh0KTtcbiAgICB9XG4gICAgcmV0dXJuICEhZXJyb3JUZXh0O1xuICB9XG4gIHByb3RlY3RlZCBnZXQgd2lkZ2V0UmVuZGVyKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMud2lkZ2V0SlNPTiA/IHRoaXMud2lkZ2V0SlNPTi5yZW5kZXIgOiBudWxsO1xuICB9XG4gIHByb3RlY3RlZCB3aWRnZXRWYWxpZGF0ZSgpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLndpZGdldEpTT04gJiYgdGhpcy53aWRnZXRKU09OLnZhbGlkYXRlKSB7XG4gICAgICByZXR1cm4gdGhpcy53aWRnZXRKU09OLnZhbGlkYXRlKHRoaXMsIHRoaXMua29WYWx1ZSgpKTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgcHJvdGVjdGVkIGRvQWZ0ZXJSZW5kZXIoZWxlbWVudHMsIGNvbikge1xuICAgIHZhciBlbCA9IGVsZW1lbnRzWzBdO1xuICAgIGlmICghIWVsICYmIHRoaXMud2lkZ2V0UmVuZGVyKSB0aGlzLndpZGdldFJlbmRlcih0aGlzLCBlbCk7XG4gIH1cbn1cblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9wcm9wZXJ0eUVkaXRvcnMvcHJvcGVydHlDdXN0b21FZGl0b3IudHMiLCJpbXBvcnQgKiBhcyBrbyBmcm9tIFwia25vY2tvdXRcIjtcbmltcG9ydCAqIGFzIFN1cnZleSBmcm9tIFwic3VydmV5LWtub2Nrb3V0XCI7XG5pbXBvcnQgeyBTdXJ2ZXlQcm9wZXJ0eU1vZGFsRWRpdG9yIH0gZnJvbSBcIi4vcHJvcGVydHlNb2RhbEVkaXRvclwiO1xuaW1wb3J0IHtcbiAgU3VydmV5UHJvcGVydHlFZGl0b3JCYXNlLFxuICBJU3VydmV5T2JqZWN0RWRpdG9yT3B0aW9uc1xufSBmcm9tIFwiLi9wcm9wZXJ0eUVkaXRvckJhc2VcIjtcbmltcG9ydCB7IGVkaXRvckxvY2FsaXphdGlvbiB9IGZyb20gXCIuLi9lZGl0b3JMb2NhbGl6YXRpb25cIjtcbmltcG9ydCB7IFN1cnZleVByb3BlcnR5RWRpdG9yRmFjdG9yeSB9IGZyb20gXCIuL3Byb3BlcnR5RWRpdG9yRmFjdG9yeVwiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5UHJvcGVydHlEZWZhdWx0VmFsdWVFZGl0b3IgZXh0ZW5kcyBTdXJ2ZXlQcm9wZXJ0eU1vZGFsRWRpdG9yIHtcbiAgcHVibGljIHN0YXRpYyBkZWZhdWx0UXVlc3Rpb25OYW1lID0gXCJxdWVzdGlvblwiO1xuICBwdWJsaWMgc3RhdGljIGNyZWF0ZUpzb25Gcm9tUXVlc3Rpb24ob2JqOiBhbnksIHJlYWRPbmx5OiBib29sZWFuKTogYW55IHtcbiAgICB2YXIgcWpzb24gPSBuZXcgU3VydmV5Lkpzb25PYmplY3QoKS50b0pzb25PYmplY3Qob2JqKTtcbiAgICBxanNvbi5uYW1lID0gU3VydmV5UHJvcGVydHlEZWZhdWx0VmFsdWVFZGl0b3IuZGVmYXVsdFF1ZXN0aW9uTmFtZTtcbiAgICBxanNvbi50eXBlID0gb2JqLmdldFR5cGUoKTtcbiAgICBpZiAocWpzb24udHlwZSA9PSBcImV4cHJlc3Npb25cIikge1xuICAgICAgcWpzb24udHlwZSA9IFwidGV4dFwiO1xuICAgIH1cbiAgICBxanNvbi50aXRsZUxvY2F0aW9uID0gXCJoaWRkZW5cIjtcbiAgICAvL3Fqc29uLnNob3dDbGVhckJ1dHRvbiA9IHRydWU7XG4gICAgcWpzb24uc3RvcmVPdGhlcnNBc0NvbW1lbnQgPSBmYWxzZTtcbiAgICBxanNvbi5yZWFkT25seSA9IHJlYWRPbmx5O1xuICAgIFN1cnZleVByb3BlcnR5RGVmYXVsdFZhbHVlRWRpdG9yLmRlbGV0ZUNvbmRpdGlvblByb3BlcnRpZXMocWpzb24pO1xuICAgIGlmICghIXFqc29uLmNob2ljZXMpIHtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcWpzb24uY2hvaWNlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBTdXJ2ZXlQcm9wZXJ0eURlZmF1bHRWYWx1ZUVkaXRvci5kZWxldGVDb25kaXRpb25Qcm9wZXJ0aWVzKFxuICAgICAgICAgIHFqc29uLmNob2ljZXNbaV1cbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHFqc29uO1xuICB9XG4gIHByaXZhdGUgc3RhdGljIGRlbGV0ZUNvbmRpdGlvblByb3BlcnRpZXMoanNvbjogYW55KSB7XG4gICAgZGVsZXRlIGpzb25bXCJ2aXNpYmxlXCJdO1xuICAgIGRlbGV0ZSBqc29uW1widmlzaWJsZUlmXCJdO1xuICAgIGRlbGV0ZSBqc29uW1wiZW5hYmxlXCJdO1xuICAgIGRlbGV0ZSBqc29uW1wiZW5hYmxlSWZcIl07XG4gICAgZGVsZXRlIGpzb25bXCJ2YWx1ZU5hbWVcIl07XG4gIH1cbiAgcHVibGljIHN0YXRpYyBjcmVhdGVTdXJ2ZXlGcm9tSnNvblF1ZXN0aW9uKFxuICAgIHF1ZXN0aW9uSnNvbjogYW55LFxuICAgIG9wdGlvbnM6IElTdXJ2ZXlPYmplY3RFZGl0b3JPcHRpb25zXG4gICk6IFN1cnZleS5TdXJ2ZXkge1xuICAgIHZhciBqc29uID0ge1xuICAgICAgcXVlc3Rpb25zOiBbXSxcbiAgICAgIHNob3dOYXZpZ2F0aW9uQnV0dG9uczogZmFsc2UsXG4gICAgICBzaG93UXVlc3Rpb25OdW1iZXJzOiBcIm9mZlwiXG4gICAgfTtcbiAgICBqc29uLnF1ZXN0aW9ucy5wdXNoKHF1ZXN0aW9uSnNvbik7XG4gICAgcmV0dXJuICEhb3B0aW9uc1xuICAgICAgPyBvcHRpb25zLmNyZWF0ZVN1cnZleShqc29uLCBcImRlZmF1bHRWYWx1ZUVkaXRvclwiKVxuICAgICAgOiBuZXcgU3VydmV5LlN1cnZleShqc29uKTtcbiAgfVxuICBwdWJsaWMgc3VydmV5OiBTdXJ2ZXkuU3VydmV5O1xuICBrb1N1cnZleTogYW55O1xuXG4gIGNvbnN0cnVjdG9yKHByb3BlcnR5OiBTdXJ2ZXkuSnNvbk9iamVjdFByb3BlcnR5KSB7XG4gICAgc3VwZXIocHJvcGVydHkpO1xuICAgIHRoaXMua29TdXJ2ZXkgPSBrby5vYnNlcnZhYmxlKFxuICAgICAgISF0aGlzLm9wdGlvbnMgJiYgdGhpcy5vcHRpb25zLmNyZWF0ZVN1cnZleSh7fSwgXCJkZWZhdWx0VmFsdWVFZGl0b3JcIilcbiAgICApO1xuICB9XG4gIHB1YmxpYyByZXNldFRleHQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gZWRpdG9yTG9jYWxpemF0aW9uLmdldFN0cmluZyhcInBlLnJlc2V0XCIpO1xuICB9XG4gIHB1YmxpYyByZXNldFZhbHVlKG1vZGVsOiBTdXJ2ZXlQcm9wZXJ0eURlZmF1bHRWYWx1ZUVkaXRvcikge1xuICAgIG1vZGVsLmtvU3VydmV5KCkuZGF0YSA9IHt9O1xuICB9XG4gIHB1YmxpYyBnZXRWYWx1ZVRleHQodmFsdWU6IGFueSk6IHN0cmluZyB7XG4gICAgaWYgKCF2YWx1ZSkgcmV0dXJuIGVkaXRvckxvY2FsaXphdGlvbi5nZXRTdHJpbmcoXCJwZS5lbXB0eVwiKTtcbiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkodmFsdWUpO1xuICB9XG4gIHB1YmxpYyBiZWZvcmVTaG93KCkge1xuICAgIHN1cGVyLmJlZm9yZVNob3coKTtcbiAgICB0aGlzLmNyZWF0ZVN1cnZleSgpO1xuICB9XG4gIHByb3RlY3RlZCBvbkJlZm9yZUFwcGx5KCkge1xuICAgIGlmICghdGhpcy5zdXJ2ZXkpIHJldHVybjtcbiAgICB0aGlzLnNldFZhbHVlQ29yZSh0aGlzLmdldFN1cnZleVJlc3VsdCgpKTtcbiAgfVxuICBwdWJsaWMgZ2V0IGVkaXRvclR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCJ2YWx1ZVwiO1xuICB9XG4gIHByaXZhdGUgY3JlYXRlU3VydmV5KCkge1xuICAgIHRoaXMuc3VydmV5ID0gU3VydmV5UHJvcGVydHlEZWZhdWx0VmFsdWVFZGl0b3IuY3JlYXRlU3VydmV5RnJvbUpzb25RdWVzdGlvbihcbiAgICAgIHRoaXMuYnVpbGRRdWVzdGlvbkpzb24oKSxcbiAgICAgIHRoaXMub3B0aW9uc1xuICAgICk7XG5cbiAgICB0aGlzLnN1cnZleS5zZXRWYWx1ZShcbiAgICAgIFN1cnZleVByb3BlcnR5RGVmYXVsdFZhbHVlRWRpdG9yLmRlZmF1bHRRdWVzdGlvbk5hbWUsXG4gICAgICB0aGlzLmdldFN1cnZleUluaXRpYWxWYWx1ZSgpXG4gICAgKTtcbiAgICB0aGlzLmtvU3VydmV5KHRoaXMuc3VydmV5KTtcbiAgfVxuICBwcm90ZWN0ZWQgYnVpbGRRdWVzdGlvbkpzb24oKTogYW55IHtcbiAgICByZXR1cm4gU3VydmV5UHJvcGVydHlEZWZhdWx0VmFsdWVFZGl0b3IuY3JlYXRlSnNvbkZyb21RdWVzdGlvbihcbiAgICAgIHRoaXMub2JqZWN0LFxuICAgICAgdGhpcy5yZWFkT25seSgpXG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0U3VydmV5SW5pdGlhbFZhbHVlKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuZWRpdGluZ1ZhbHVlO1xuICB9XG4gIHByb3RlY3RlZCBnZXRTdXJ2ZXlSZXN1bHQoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5zdXJ2ZXkuZ2V0VmFsdWUoXG4gICAgICBTdXJ2ZXlQcm9wZXJ0eURlZmF1bHRWYWx1ZUVkaXRvci5kZWZhdWx0UXVlc3Rpb25OYW1lXG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgU3VydmV5UHJvcGVydHlEZWZhdWx0Um93VmFsdWVFZGl0b3JCYXNlIGV4dGVuZHMgU3VydmV5UHJvcGVydHlEZWZhdWx0VmFsdWVFZGl0b3Ige1xuICBjb25zdHJ1Y3Rvcihwcm9wZXJ0eTogU3VydmV5Lkpzb25PYmplY3RQcm9wZXJ0eSkge1xuICAgIHN1cGVyKHByb3BlcnR5KTtcbiAgfVxuICBwdWJsaWMgZ2V0IGVkaXRvclR5cGVUZW1wbGF0ZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBcInZhbHVlXCI7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFN1cnZleUluaXRpYWxWYWx1ZSgpOiBhbnkge1xuICAgIHZhciByZXMgPSB0aGlzLmVkaXRpbmdWYWx1ZTtcbiAgICBpZiAoIXJlcykgcmV0dXJuIHJlcztcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkocmVzKSkge1xuICAgICAgcmVzID0gW3Jlc107XG4gICAgfVxuICAgIHJldHVybiByZXM7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFN1cnZleVJlc3VsdCgpOiBhbnkge1xuICAgIHZhciByZXMgPSBzdXBlci5nZXRTdXJ2ZXlSZXN1bHQoKTtcbiAgICBpZiAocmVzICYmIEFycmF5LmlzQXJyYXkocmVzKSkge1xuICAgICAgaWYgKHJlcy5sZW5ndGggPT0gMCkgcmV0dXJuIG51bGw7XG4gICAgICByZXR1cm4gcmVzWzBdO1xuICAgIH1cbiAgICByZXR1cm4gcmVzO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlQcm9wZXJ0eURlZmF1bHRSb3dWYWx1ZUVkaXRvciBleHRlbmRzIFN1cnZleVByb3BlcnR5RGVmYXVsdFJvd1ZhbHVlRWRpdG9yQmFzZSB7XG4gIGNvbnN0cnVjdG9yKHByb3BlcnR5OiBTdXJ2ZXkuSnNvbk9iamVjdFByb3BlcnR5KSB7XG4gICAgc3VwZXIocHJvcGVydHkpO1xuICB9XG4gIHByb3RlY3RlZCBidWlsZFF1ZXN0aW9uSnNvbigpOiBhbnkge1xuICAgIHZhciBxanNvbiA9IHN1cGVyLmJ1aWxkUXVlc3Rpb25Kc29uKCk7XG4gICAgcWpzb24ucm93Q291bnQgPSAxO1xuICAgIHFqc29uLm1pblJvd0NvdW50ID0gMTtcbiAgICBxanNvbi5tYXhSb3dDb3VudCA9IDE7XG4gICAgcWpzb24uY29sdW1uc0xvY2F0aW9uID0gXCJ2ZXJ0aWNhbFwiO1xuICAgIHJldHVybiBxanNvbjtcbiAgfVxuICBwdWJsaWMgZ2V0IGVkaXRvclR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCJyb3d2YWx1ZVwiO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlQcm9wZXJ0eURlZmF1bHRQYW5lbFZhbHVlRWRpdG9yIGV4dGVuZHMgU3VydmV5UHJvcGVydHlEZWZhdWx0Um93VmFsdWVFZGl0b3JCYXNlIHtcbiAgY29uc3RydWN0b3IocHJvcGVydHk6IFN1cnZleS5Kc29uT2JqZWN0UHJvcGVydHkpIHtcbiAgICBzdXBlcihwcm9wZXJ0eSk7XG4gIH1cbiAgcHJvdGVjdGVkIGJ1aWxkUXVlc3Rpb25Kc29uKCk6IGFueSB7XG4gICAgdmFyIHFqc29uID0gc3VwZXIuYnVpbGRRdWVzdGlvbkpzb24oKTtcbiAgICBxanNvbi5wYW5lbENvdW50ID0gMTtcbiAgICBxanNvbi5taW5QYW5lbENvdW50ID0gMTtcbiAgICBxanNvbi5tYXhQYW5lbENvdW50ID0gMTtcbiAgICByZXR1cm4gcWpzb247XG4gIH1cbiAgcHVibGljIGdldCBlZGl0b3JUeXBlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFwicGFuZWx2YWx1ZVwiO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlQcm9wZXJ0eVNldEVkaXRvciBleHRlbmRzIFN1cnZleVByb3BlcnR5RGVmYXVsdFZhbHVlRWRpdG9yIHtcbiAgY29uc3RydWN0b3IocHJvcGVydHk6IFN1cnZleS5Kc29uT2JqZWN0UHJvcGVydHkpIHtcbiAgICBzdXBlcihwcm9wZXJ0eSk7XG4gIH1cbiAgcHVibGljIGdldCBlZGl0b3JUeXBlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFwic2V0XCI7XG4gIH1cbiAgcHVibGljIGdldCBlZGl0b3JUeXBlVGVtcGxhdGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCJ2YWx1ZVwiO1xuICB9XG4gIHByb3RlY3RlZCBnZXRTdXJ2ZXlJbml0aWFsVmFsdWUoKTogYW55IHtcbiAgICB2YXIgcmVzID0gdGhpcy5lZGl0aW5nVmFsdWU7XG4gICAgaWYgKCFyZXMpIHJldHVybiByZXM7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHJlcykpIHtcbiAgICAgIHJlcyA9IFtyZXNdO1xuICAgIH1cbiAgICByZXR1cm4gcmVzO1xuICB9XG4gIHByb3RlY3RlZCBidWlsZFF1ZXN0aW9uSnNvbigpOiBhbnkge1xuICAgIHZhciBxdWVzdGlvbiA9IG5ldyBTdXJ2ZXkuUXVlc3Rpb25DaGVja2JveChcInExXCIpO1xuICAgIHZhciBoYXNUYWdib3ggPSAhIVN1cnZleS5TZXJpYWxpemVyLmZpbmRDbGFzcyhcInRhZ2JveFwiKTtcbiAgICBxdWVzdGlvbi5oYXNTZWxlY3RBbGwgPSAhaGFzVGFnYm94O1xuICAgIGlmICghIXRoaXMucHJvcGVydHkpIHtcbiAgICAgIHF1ZXN0aW9uLmNob2ljZXMgPSB0aGlzLnByb3BlcnR5LmdldENob2ljZXModGhpcy5vYmplY3QpO1xuICAgIH1cbiAgICB2YXIganNvbiA9IFN1cnZleVByb3BlcnR5RGVmYXVsdFZhbHVlRWRpdG9yLmNyZWF0ZUpzb25Gcm9tUXVlc3Rpb24oXG4gICAgICBxdWVzdGlvbixcbiAgICAgIHRoaXMucmVhZE9ubHkoKVxuICAgICk7XG4gICAgaWYgKGhhc1RhZ2JveCkge1xuICAgICAganNvbi50eXBlID0gXCJ0YWdib3hcIjtcbiAgICB9XG4gICAgcmV0dXJuIGpzb247XG4gIH1cbn1cblxuU3VydmV5UHJvcGVydHlFZGl0b3JGYWN0b3J5LnJlZ2lzdGVyRWRpdG9yKFwidmFsdWVcIiwgZnVuY3Rpb24oXG4gIHByb3BlcnR5OiBTdXJ2ZXkuSnNvbk9iamVjdFByb3BlcnR5XG4pOiBTdXJ2ZXlQcm9wZXJ0eUVkaXRvckJhc2Uge1xuICByZXR1cm4gbmV3IFN1cnZleVByb3BlcnR5RGVmYXVsdFZhbHVlRWRpdG9yKHByb3BlcnR5KTtcbn0pO1xuXG5TdXJ2ZXlQcm9wZXJ0eUVkaXRvckZhY3RvcnkucmVnaXN0ZXJFZGl0b3IoXCJyb3d2YWx1ZVwiLCBmdW5jdGlvbihcbiAgcHJvcGVydHk6IFN1cnZleS5Kc29uT2JqZWN0UHJvcGVydHlcbik6IFN1cnZleVByb3BlcnR5RWRpdG9yQmFzZSB7XG4gIHJldHVybiBuZXcgU3VydmV5UHJvcGVydHlEZWZhdWx0Um93VmFsdWVFZGl0b3IocHJvcGVydHkpO1xufSk7XG5cblN1cnZleVByb3BlcnR5RWRpdG9yRmFjdG9yeS5yZWdpc3RlckVkaXRvcihcInBhbmVsdmFsdWVcIiwgZnVuY3Rpb24oXG4gIHByb3BlcnR5OiBTdXJ2ZXkuSnNvbk9iamVjdFByb3BlcnR5XG4pOiBTdXJ2ZXlQcm9wZXJ0eUVkaXRvckJhc2Uge1xuICByZXR1cm4gbmV3IFN1cnZleVByb3BlcnR5RGVmYXVsdFBhbmVsVmFsdWVFZGl0b3IocHJvcGVydHkpO1xufSk7XG5cblN1cnZleVByb3BlcnR5RWRpdG9yRmFjdG9yeS5yZWdpc3RlckVkaXRvcihcInNldFwiLCBmdW5jdGlvbihcbiAgcHJvcGVydHk6IFN1cnZleS5Kc29uT2JqZWN0UHJvcGVydHlcbik6IFN1cnZleVByb3BlcnR5RWRpdG9yQmFzZSB7XG4gIHJldHVybiBuZXcgU3VydmV5UHJvcGVydHlTZXRFZGl0b3IocHJvcGVydHkpO1xufSk7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvcHJvcGVydHlFZGl0b3JzL3Byb3BlcnR5RGVmYXVsdFZhbHVlRWRpdG9yLnRzIiwiaW1wb3J0ICogYXMga28gZnJvbSBcImtub2Nrb3V0XCI7XG5pbXBvcnQgKiBhcyBTdXJ2ZXkgZnJvbSBcInN1cnZleS1rbm9ja291dFwiO1xuaW1wb3J0IHsgU3VydmV5UHJvcGVydHlJdGVtc0VkaXRvciB9IGZyb20gXCIuL3Byb3BlcnR5SXRlbXNFZGl0b3JcIjtcbmltcG9ydCB7XG4gIFN1cnZleVByb3BlcnR5RWRpdG9yQmFzZSxcbiAgSVN1cnZleU9iamVjdEVkaXRvck9wdGlvbnNcbn0gZnJvbSBcIi4vcHJvcGVydHlFZGl0b3JCYXNlXCI7XG5pbXBvcnQgeyBlZGl0b3JMb2NhbGl6YXRpb24gfSBmcm9tIFwiLi4vZWRpdG9yTG9jYWxpemF0aW9uXCI7XG5pbXBvcnQgeyBTdXJ2ZXlQcm9wZXJ0eUVkaXRvckZhY3RvcnkgfSBmcm9tIFwiLi9wcm9wZXJ0eUVkaXRvckZhY3RvcnlcIjtcbmltcG9ydCB7IFN1cnZleVByb3BlcnR5Q29uZGl0aW9uRWRpdG9yIH0gZnJvbSBcIi4vcHJvcGVydHlDb25kaXRpb25FZGl0b3JcIjtcbmltcG9ydCB7IFN1cnZleVByb3BlcnR5RGVmYXVsdFZhbHVlRWRpdG9yIH0gZnJvbSBcIi4vcHJvcGVydHlEZWZhdWx0VmFsdWVFZGl0b3JcIjtcbmltcG9ydCB7IFN1cnZleUVsZW1lbnRTZWxlY3RvciB9IGZyb20gXCIuLi9lbnRyaWVzXCI7XG5pbXBvcnQgeyBFeHByZXNzaW9uVG9EaXNwbGF5VGV4dCB9IGZyb20gXCIuLi9leHByZXNzaW9uVG9EaXNwbGF5VGV4dFwiO1xuaW1wb3J0IHsgRWRpdGFibGVPYmplY3QgfSBmcm9tIFwiLi9lZGl0YWJsZU9iamVjdFwiO1xuXG5pbnRlcmZhY2UgRWxlbWVudCB7XG4gIHRleHQ/OiBzdHJpbmc7XG4gIG5hbWU/OiBzdHJpbmc7XG4gIHBhZ2U/OiBTdXJ2ZXkuUGFnZTtcbiAgcXVlc3Rpb24/OiBTdXJ2ZXkuUXVlc3Rpb247XG59XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlQcm9wZXJ0eVRyaWdnZXJzRWRpdG9yIGV4dGVuZHMgU3VydmV5UHJvcGVydHlJdGVtc0VkaXRvciB7XG4gIHB1YmxpYyBzdGF0aWMgY3JlYXRlVHJpZ2dlckVkaXRvcihcbiAgICBzdXJ2ZXk6IFN1cnZleS5TdXJ2ZXlNb2RlbCxcbiAgICB0cmlnZ2VyOiBTdXJ2ZXkuU3VydmV5VHJpZ2dlcixcbiAgICBvcHRpb25zOiBhbnlcbiAgKTogU3VydmV5UHJvcGVydHlUcmlnZ2VyIHtcbiAgICB0cmlnZ2VyW1wic3VydmV5XCJdID0gc3VydmV5O1xuICAgIGlmICh0cmlnZ2VyLmdldFR5cGUoKSA9PSBcInNldHZhbHVldHJpZ2dlclwiKVxuICAgICAgcmV0dXJuIG5ldyBTdXJ2ZXlQcm9wZXJ0eVNldFZhbHVlVHJpZ2dlcihcbiAgICAgICAgc3VydmV5LFxuICAgICAgICA8U3VydmV5LlN1cnZleVRyaWdnZXJTZXRWYWx1ZT50cmlnZ2VyLFxuICAgICAgICBvcHRpb25zXG4gICAgICApO1xuICAgIGlmICh0cmlnZ2VyLmdldFR5cGUoKSA9PSBcImNvcHl2YWx1ZXRyaWdnZXJcIilcbiAgICAgIHJldHVybiBuZXcgU3VydmV5UHJvcGVydHlDb3B5VmFsdWVUcmlnZ2VyKHN1cnZleSwgdHJpZ2dlciwgb3B0aW9ucyk7XG4gICAgaWYgKHRyaWdnZXIuZ2V0VHlwZSgpID09IFwic2tpcHRyaWdnZXJcIilcbiAgICAgIHJldHVybiBuZXcgU3VydmV5UHJvcGVydHlTa2lwVHJpZ2dlcihzdXJ2ZXksIHRyaWdnZXIsIG9wdGlvbnMpO1xuICAgIGlmICh0cmlnZ2VyLmdldFR5cGUoKSA9PSBcInJ1bmV4cHJlc3Npb250cmlnZ2VyXCIpXG4gICAgICByZXR1cm4gbmV3IFN1cnZleVByb3BlcnR5UnVuRXhwcmVzc2lvblRyaWdnZXIoc3VydmV5LCB0cmlnZ2VyLCBvcHRpb25zKTtcbiAgICByZXR1cm4gbmV3IFN1cnZleVByb3BlcnR5VHJpZ2dlcihzdXJ2ZXksIHRyaWdnZXIsIG9wdGlvbnMpO1xuICB9XG5cbiAga29FbGVtZW50czogYW55O1xuICBrb1F1ZXN0aW9uczogYW55O1xuICBrb1BhZ2VzOiBhbnk7XG4gIHB1YmxpYyBrb1NlbGVjdGVkOiBhbnk7XG4gIHB1YmxpYyBrb1RyaWdnZXJzOiBhbnk7XG4gIHB1YmxpYyBhdmFpbGFibGVUcmlnZ2VyczogQXJyYXk8c3RyaW5nPiA9IFtdO1xuICBwcml2YXRlIHRyaWdnZXJDbGFzc2VzOiBBcnJheTxTdXJ2ZXkuSnNvbk1ldGFkYXRhQ2xhc3M+ID0gW107XG4gIGNvbnN0cnVjdG9yKHByb3BlcnR5OiBTdXJ2ZXkuSnNvbk9iamVjdFByb3BlcnR5KSB7XG4gICAgc3VwZXIocHJvcGVydHkpO1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICB0aGlzLm9uRGVsZXRlQ2xpY2sgPSBmdW5jdGlvbigpIHtcbiAgICAgIGlmIChzZWxmLnJlYWRPbmx5KCkpIHJldHVybjtcbiAgICAgIHNlbGYua29JdGVtcy5yZW1vdmUoc2VsZi5rb1NlbGVjdGVkKCkpO1xuICAgIH07XG4gICAgdGhpcy5vbkFkZENsaWNrID0gZnVuY3Rpb24oaXRlbSkge1xuICAgICAgc2VsZi5hZGRJdGVtKGl0ZW0udmFsdWUpO1xuICAgIH07XG4gICAgdGhpcy5rb1NlbGVjdGVkID0ga28ub2JzZXJ2YWJsZShudWxsKTtcbiAgICB0aGlzLmtvU2VsZWN0ZWQuc3Vic2NyaWJlKGZ1bmN0aW9uKG5ld1ZhbHVlKSB7XG4gICAgICBpZiAoISFuZXdWYWx1ZSkge1xuICAgICAgICBuZXdWYWx1ZS5iZWZvcmVTaG93KCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgdGhpcy5rb1BhZ2VzID0ga28ub2JzZXJ2YWJsZUFycmF5KCk7XG4gICAgdGhpcy5rb1F1ZXN0aW9ucyA9IGtvLm9ic2VydmFibGVBcnJheSgpO1xuICAgIHRoaXMua29FbGVtZW50cyA9IGtvLm9ic2VydmFibGVBcnJheSgpO1xuICAgIHRoaXMudHJpZ2dlckNsYXNzZXMgPSBTdXJ2ZXkuU2VyaWFsaXplci5nZXRDaGlsZHJlbkNsYXNzZXMoXG4gICAgICBcInN1cnZleXRyaWdnZXJcIixcbiAgICAgIHRydWVcbiAgICApO1xuICAgIHRoaXMuYXZhaWxhYmxlVHJpZ2dlcnMgPSB0aGlzLmdldEF2YWlsYWJsZVRyaWdnZXJzKCk7XG4gICAgdGhpcy5rb1RyaWdnZXJzID0ga28ub2JzZXJ2YWJsZUFycmF5KHRoaXMuZ2V0TG9jYWxpemVkVHJpZ2dlcnMoKSk7XG4gIH1cbiAgcHVibGljIGdldCBlZGl0b3JUeXBlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFwidHJpZ2dlcnNcIjtcbiAgfVxuICBwcm90ZWN0ZWQgb25WYWx1ZUNoYW5nZWQoKSB7XG4gICAgaWYgKHRoaXMuZWRpdGluZ09iamVjdCkge1xuICAgICAgdmFyIGFsbFF1ZXN0aW9ucyA9IHRoaXMuZ2V0T3JpZ2lvbmFsU3VydmV5KCkuZ2V0QWxsUXVlc3Rpb25zKCk7XG4gICAgICB0aGlzLmtvUGFnZXModGhpcy5nZXRFbGVtZW50cyh0aGlzLmdldE9yaWdpb25hbFN1cnZleSgpLnBhZ2VzKSk7XG4gICAgICB0aGlzLmtvUXVlc3Rpb25zKHRoaXMuZ2V0RWxlbWVudHMoYWxsUXVlc3Rpb25zKSk7XG4gICAgICB0aGlzLmtvRWxlbWVudHModGhpcy5nZXRFbGVtZW50cyh0aGlzLmdldEFsbEVsZW1lbnRzKCkpKTtcbiAgICB9XG4gICAgc3VwZXIub25WYWx1ZUNoYW5nZWQoKTtcbiAgICBpZiAodGhpcy5rb1NlbGVjdGVkKSB7XG4gICAgICB0aGlzLmtvU2VsZWN0ZWQodGhpcy5rb0l0ZW1zKCkubGVuZ3RoID4gMCA/IHRoaXMua29JdGVtcygpWzBdIDogbnVsbCk7XG4gICAgfVxuICB9XG4gIC8vVE9ETyB0aGlzIGNvZGUgc2hvdWxkIGJlIGluIHRoZSBsaWJyYXJ5XG4gIHByaXZhdGUgZ2V0QWxsRWxlbWVudHMoKTogQXJyYXk8YW55PiB7XG4gICAgdmFyIHJlcyA9IFtdO1xuICAgIHZhciBwYWdlcyA9IHRoaXMuZ2V0T3JpZ2lvbmFsU3VydmV5KCkucGFnZXM7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwYWdlcy5sZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy5hZGRFbGVtZW5ldHNJbnRvTGlzdChwYWdlc1tpXSwgcmVzKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuICBwcml2YXRlIGFkZEVsZW1lbmV0c0ludG9MaXN0KGVsZW1lbnQ6IGFueSwgbGlzdDogQXJyYXk8YW55Pikge1xuICAgIHZhciBlbGVtZW50cyA9IGVsZW1lbnQuZ2V0RWxlbWVudHNJbkRlc2lnbihmYWxzZSk7XG4gICAgaWYgKCFlbGVtZW50cykgcmV0dXJuO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZWxlbWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGxpc3QucHVzaChlbGVtZW50c1tpXSk7XG4gICAgICB0aGlzLmFkZEVsZW1lbmV0c0ludG9MaXN0KDxTdXJ2ZXkuU3VydmV5RWxlbWVudD5lbGVtZW50c1tpXSwgbGlzdCk7XG4gICAgfVxuICB9XG4gIHByaXZhdGUgYWRkSXRlbSh0cmlnZ2VyVHlwZTogc3RyaW5nKSB7XG4gICAgdmFyIHRyaWdnZXIgPSBTdXJ2ZXkuU2VyaWFsaXplci5jcmVhdGVDbGFzcyh0cmlnZ2VyVHlwZSk7XG4gICAgdmFyIHRyaWdnZXJJdGVtID0gdGhpcy5jcmVhdGVQcm9wZXJ0eVRyaWdnZXIodHJpZ2dlcik7XG4gICAgdGhpcy5rb0l0ZW1zLnB1c2godHJpZ2dlckl0ZW0pO1xuICAgIHRoaXMua29TZWxlY3RlZCh0cmlnZ2VySXRlbSk7XG4gIH1cbiAgcHJvdGVjdGVkIGNyZWF0ZUVkaXRvckl0ZW0oaXRlbTogYW55KSB7XG4gICAgdmFyIGpzb25PYmogPSBuZXcgU3VydmV5Lkpzb25PYmplY3QoKTtcbiAgICB2YXIgdHJpZ2dlciA9IFN1cnZleS5TZXJpYWxpemVyLmNyZWF0ZUNsYXNzKGl0ZW0uZ2V0VHlwZSgpKTtcbiAgICBqc29uT2JqLnRvT2JqZWN0KGl0ZW0sIHRyaWdnZXIpO1xuICAgIHJldHVybiB0aGlzLmNyZWF0ZVByb3BlcnR5VHJpZ2dlcig8U3VydmV5LlN1cnZleVRyaWdnZXI+dHJpZ2dlcik7XG4gIH1cbiAgcHJvdGVjdGVkIGNyZWF0ZUl0ZW1Gcm9tRWRpdG9ySXRlbShlZGl0b3JJdGVtOiBhbnkpIHtcbiAgICB2YXIgZWRpdG9yVHJpZ2dlciA9IDxTdXJ2ZXlQcm9wZXJ0eVRyaWdnZXI+ZWRpdG9ySXRlbTtcbiAgICByZXR1cm4gZWRpdG9yVHJpZ2dlci5jcmVhdGVUcmlnZ2VyKCk7XG4gIH1cbiAgcHJpdmF0ZSBnZXRMb2NhbGl6ZWRUcmlnZ2VycygpOiBBcnJheTxhbnk+IHtcbiAgICB2YXIgcmVzID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmF2YWlsYWJsZVRyaWdnZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgbmFtZSA9IHRoaXMuYXZhaWxhYmxlVHJpZ2dlcnNbaV07XG4gICAgICByZXMucHVzaCh7IHZhbHVlOiBuYW1lLCB0ZXh0OiBlZGl0b3JMb2NhbGl6YXRpb24uZ2V0VHJpZ2dlck5hbWUobmFtZSkgfSk7XG4gICAgfVxuICAgIHJldHVybiByZXM7XG4gIH1cbiAgcHJpdmF0ZSBnZXRBdmFpbGFibGVUcmlnZ2VycygpOiBBcnJheTxzdHJpbmc+IHtcbiAgICB2YXIgcmVzdWx0ID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnRyaWdnZXJDbGFzc2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgbmFtZSA9IHRoaXMudHJpZ2dlckNsYXNzZXNbaV0ubmFtZTtcbiAgICAgIGlmIChuYW1lID09IFwidmlzaWJsZXRyaWdnZXJcIikgY29udGludWU7XG4gICAgICByZXN1bHQucHVzaChuYW1lKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuICBwcml2YXRlIGdldEVsZW1lbnRzKGl0ZW1zOiBBcnJheTxhbnk+KTogQXJyYXk8c3RyaW5nPiB7XG4gICAgdmFyIGVsZW1lbnRzID0gW107XG4gICAgdmFyIG9wdGlvbnMgPSA8YW55PnRoaXMub3B0aW9ucztcblxuICAgIGl0ZW1zLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICB2YXIgZWxlbWVudDogRWxlbWVudCA9IHt9O1xuXG4gICAgICBlbGVtZW50Lm5hbWUgPSBpdGVtLm5hbWU7XG4gICAgICBlbGVtZW50LnRleHQgPSBpdGVtLm5hbWU7XG5cbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5vcHRpb25zICYmXG4gICAgICAgIHRoaXMub3B0aW9ucy5zaG93VGl0bGVzSW5FeHByZXNzaW9ucyAmJlxuICAgICAgICBpdGVtW1widGl0bGVcIl1cbiAgICAgICkge1xuICAgICAgICBlbGVtZW50LnRleHQgPSBpdGVtLnRpdGxlO1xuICAgICAgfVxuXG4gICAgICBpZiAoaXRlbS5pc1BhZ2UpIHtcbiAgICAgICAgZWxlbWVudC5wYWdlID0gaXRlbTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVsZW1lbnQucXVlc3Rpb24gPSBpdGVtO1xuICAgICAgfVxuXG4gICAgICBlbGVtZW50cy5wdXNoKGVsZW1lbnQpO1xuICAgIH0pO1xuXG4gICAgb3B0aW9ucyAmJlxuICAgICAgb3B0aW9ucy5vbkNvbmRpdGlvblF1ZXN0aW9uc0dldExpc3RDYWxsYmFjayhcbiAgICAgICAgdGhpcy5lZGl0YWJsZVByb3BlcnR5TmFtZSxcbiAgICAgICAgdGhpcyxcbiAgICAgICAgb3B0aW9ucyxcbiAgICAgICAgZWxlbWVudHNcbiAgICAgICk7XG5cbiAgICByZXR1cm4gZWxlbWVudHM7XG4gIH1cbiAgcHJpdmF0ZSBjcmVhdGVQcm9wZXJ0eVRyaWdnZXIoXG4gICAgdHJpZ2dlcjogU3VydmV5LlN1cnZleVRyaWdnZXJcbiAgKTogU3VydmV5UHJvcGVydHlUcmlnZ2VyIHtcbiAgICB2YXIgc3VydmV5ID0gdGhpcy5nZXRTdXJ2ZXkoKTtcbiAgICB0cmlnZ2VyW1wic3VydmV5XCJdID0gc3VydmV5O1xuICAgIGlmICh0cmlnZ2VyLmdldFR5cGUoKSA9PSBcInZpc2libGV0cmlnZ2VyXCIpIHtcbiAgICAgIHJldHVybiBuZXcgU3VydmV5UHJvcGVydHlWaXNpYmxlVHJpZ2dlcihcbiAgICAgICAgc3VydmV5LFxuICAgICAgICA8U3VydmV5LlN1cnZleVRyaWdnZXJWaXNpYmxlPnRyaWdnZXIsXG4gICAgICAgIHRoaXMub3B0aW9ucyxcbiAgICAgICAgdGhpcy5rb1BhZ2VzLFxuICAgICAgICB0aGlzLmtvRWxlbWVudHNcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBTdXJ2ZXlQcm9wZXJ0eVRyaWdnZXJzRWRpdG9yLmNyZWF0ZVRyaWdnZXJFZGl0b3IoXG4gICAgICBzdXJ2ZXksXG4gICAgICB0cmlnZ2VyLFxuICAgICAgdGhpcy5vcHRpb25zXG4gICAgKTtcbiAgfVxuICBwcml2YXRlIGdldFN1cnZleSgpOiBTdXJ2ZXkuU3VydmV5TW9kZWwge1xuICAgIHJldHVybiAhIXRoaXMub2JqZWN0ID8gdGhpcy5vYmplY3QgOiB0aGlzLmVkaXRpbmdPYmplY3Q7XG4gIH1cbiAgcHJpdmF0ZSBnZXRPcmlnaW9uYWxTdXJ2ZXkoKTogU3VydmV5LlN1cnZleU1vZGVsIHtcbiAgICByZXR1cm4gRWRpdGFibGVPYmplY3QuZ2V0T3JpZ2lvbmFsU3VydmV5KHRoaXMuZ2V0U3VydmV5KCkpO1xuICB9XG59XG5leHBvcnQgY2xhc3MgU3VydmV5UHJvcGVydHlUcmlnZ2VyIHtcbiAgcHJpdmF0ZSB0cmlnZ2VyVHlwZTogc3RyaW5nO1xuICBrb1R5cGU6IGFueTtcbiAga29UZXh0OiBhbnk7XG4gIGtvSXNWYWxpZDogYW55O1xuICBjb25kaXRpb25FZGl0b3I6IFN1cnZleVByb3BlcnR5Q29uZGl0aW9uRWRpdG9yID0gbnVsbDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgc3VydmV5OiBTdXJ2ZXkuU3VydmV5TW9kZWwsXG4gICAgcHVibGljIHRyaWdnZXI6IFN1cnZleS5TdXJ2ZXlUcmlnZ2VyLFxuICAgIHB1YmxpYyBvcHRpb25zPzogYW55XG4gICkge1xuICAgIHRoaXMudHJpZ2dlclR5cGUgPSB0cmlnZ2VyLmdldFR5cGUoKTtcbiAgICB0aGlzLmtvVHlwZSA9IGtvLm9ic2VydmFibGUodGhpcy50cmlnZ2VyVHlwZSk7XG4gICAgdmFyIGV4cHJlc3Npb25Qcm9wZXJ0eSA9IFN1cnZleS5TZXJpYWxpemVyLmZpbmRQcm9wZXJ0eShcbiAgICAgIFwidHJpZ2dlclwiLFxuICAgICAgXCJleHByZXNzaW9uXCJcbiAgICApO1xuICAgIHRoaXMuY29uZGl0aW9uRWRpdG9yID0gbmV3IFN1cnZleVByb3BlcnR5Q29uZGl0aW9uRWRpdG9yKFxuICAgICAgZXhwcmVzc2lvblByb3BlcnR5XG4gICAgKTtcbiAgICB0aGlzLmNvbmRpdGlvbkVkaXRvci5vcHRpb25zID0gb3B0aW9ucztcbiAgICB0aGlzLmNvbmRpdGlvbkVkaXRvci5zaG93SGVscFRleHQgPSBmYWxzZTtcbiAgICBpZiAoIXRoaXMudHJpZ2dlci5leHByZXNzaW9uKSB7XG4gICAgICB0aGlzLnRyaWdnZXIuZXhwcmVzc2lvbiA9IHRoaXMudHJpZ2dlci5idWlsZEV4cHJlc3Npb24oKTtcbiAgICB9XG4gICAgdGhpcy5jb25kaXRpb25FZGl0b3Iub2JqZWN0ID0gdGhpcy50cmlnZ2VyO1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICB0aGlzLmtvSXNWYWxpZCA9IGtvLmNvbXB1dGVkKCgpID0+IHtcbiAgICAgIHZhciB0ZXh0ID0gc2VsZi5jb25kaXRpb25FZGl0b3Iua29UZXh0VmFsdWUoKTtcbiAgICAgIHJldHVybiAhIXRleHQ7XG4gICAgfSk7XG4gICAgdGhpcy5rb1RleHQgPSBrby5jb21wdXRlZCgoKSA9PiB7XG4gICAgICByZXR1cm4gc2VsZi5nZXRUZXh0KCk7XG4gICAgfSk7XG4gIH1cbiAgcHVibGljIGJlZm9yZVNob3coKSB7XG4gICAgdGhpcy5jb25kaXRpb25FZGl0b3IuYmVmb3JlU2hvdygpO1xuICB9XG4gIHB1YmxpYyBoYXNFcnJvcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcHVibGljIGNyZWF0ZVRyaWdnZXIoKTogU3VydmV5LlN1cnZleVRyaWdnZXIge1xuICAgIHZhciB0cmlnZ2VyID0gPFN1cnZleS5TdXJ2ZXlUcmlnZ2VyPihcbiAgICAgIFN1cnZleS5TZXJpYWxpemVyLmNyZWF0ZUNsYXNzKHRoaXMudHJpZ2dlclR5cGUpXG4gICAgKTtcbiAgICB0cmlnZ2VyW1wiZXhwcmVzc2lvblwiXSA9IHRoaXMuY29uZGl0aW9uRWRpdG9yLmtvVGV4dFZhbHVlKCk7XG4gICAgdGhpcy5hcHBseVByb3BlcnRpZXModHJpZ2dlcik7XG4gICAgcmV0dXJuIHRyaWdnZXI7XG4gIH1cbiAgcHVibGljIGFwcGx5UHJvcGVydGllcyh0cmlnZ2VyOiBTdXJ2ZXkuU3VydmV5VHJpZ2dlcikge31cbiAgcHJpdmF0ZSBnZXRUZXh0KCk6IHN0cmluZyB7XG4gICAgaWYgKCF0aGlzLmtvSXNWYWxpZCgpKVxuICAgICAgcmV0dXJuIGVkaXRvckxvY2FsaXphdGlvbi5nZXRTdHJpbmcoXCJwZS50cmlnZ2VyTm90U2V0XCIpO1xuICAgIHZhciByZXMgPSB0aGlzLmNvbmRpdGlvbkVkaXRvci5rb1RleHRWYWx1ZSgpO1xuICAgIGlmICghcmVzKSByZXR1cm4gXCJcIjtcbiAgICBpZiAoISF0aGlzLm9wdGlvbnMgJiYgdGhpcy5vcHRpb25zLnNob3dUaXRsZXNJbkV4cHJlc3Npb25zKSB7XG4gICAgICByZXMgPSBuZXcgRXhwcmVzc2lvblRvRGlzcGxheVRleHQodGhpcy5zdXJ2ZXkpLnRvRGlzcGxheVRleHQocmVzKTtcbiAgICB9XG4gICAgcmV0dXJuIGVkaXRvckxvY2FsaXphdGlvbi5nZXRTdHJpbmcoXCJwZS50cmlnZ2VyUnVuSWZcIikgKyBcIjogXCIgKyByZXM7XG4gIH1cbiAgcHVibGljIGdldCBzZXRUb05hbWVPcHRpb25zKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGVkaXRvckxvY2FsaXphdGlvbi5nZXRTdHJpbmcoXCJwZS5jb25kaXRpb25TZWxlY3RRdWVzdGlvblwiKTtcbiAgfVxuICBwcm90ZWN0ZWQgY3JlYXRlRWxlbWVudFNlbGVjdG9yKGtvVmFsdWU6IGFueSk6IFN1cnZleUVsZW1lbnRTZWxlY3RvciB7XG4gICAgdmFyIHJlcyA9IG5ldyBTdXJ2ZXlFbGVtZW50U2VsZWN0b3IoXG4gICAgICB0aGlzLnN1cnZleSxcbiAgICAgIFwicXVlc3Rpb25cIixcbiAgICAgICEhdGhpcy5vcHRpb25zICYmIHRoaXMub3B0aW9ucy5zaG93VGl0bGVzSW5FeHByZXNzaW9uc1xuICAgICk7XG4gICAgcmVzLnZhbHVlID0ga29WYWx1ZSgpO1xuICAgIHJlcy5vblZhbHVlQ2hhbmdlZENhbGxiYWNrID0gZnVuY3Rpb24obmV3VmFsdWU6IHN0cmluZykge1xuICAgICAga29WYWx1ZShuZXdWYWx1ZSk7XG4gICAgfTtcbiAgICByZXR1cm4gcmVzO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlQcm9wZXJ0eVZpc2libGVUcmlnZ2VyIGV4dGVuZHMgU3VydmV5UHJvcGVydHlUcmlnZ2VyIHtcbiAgcHVibGljIHBhZ2VzOiBTdXJ2ZXlQcm9wZXJ0eVRyaWdnZXJPYmplY3RzO1xuICBwdWJsaWMgcXVlc3Rpb25zOiBTdXJ2ZXlQcm9wZXJ0eVRyaWdnZXJPYmplY3RzO1xuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgdmFsdWVTdXJ2ZXk6IFN1cnZleS5TdXJ2ZXlNb2RlbCxcbiAgICBwdWJsaWMgdHJpZ2dlcjogU3VydmV5LlN1cnZleVRyaWdnZXJWaXNpYmxlLFxuICAgIHB1YmxpYyBvcHRpb25zOiBhbnksXG4gICAga29QYWdlczogYW55LFxuICAgIGtvUXVlc3Rpb25zOiBhbnlcbiAgKSB7XG4gICAgc3VwZXIodmFsdWVTdXJ2ZXksIHRyaWdnZXIsIG9wdGlvbnMpO1xuICAgIHRoaXMucGFnZXMgPSBuZXcgU3VydmV5UHJvcGVydHlUcmlnZ2VyT2JqZWN0cyhcbiAgICAgIGVkaXRvckxvY2FsaXphdGlvbi5nZXRTdHJpbmcoXCJwZS50cmlnZ2VyTWFrZVBhZ2VzVmlzaWJsZVwiKSxcbiAgICAgIGtvUGFnZXMoKSxcbiAgICAgIHRyaWdnZXIucGFnZXNcbiAgICApO1xuICAgIHRoaXMucXVlc3Rpb25zID0gbmV3IFN1cnZleVByb3BlcnR5VHJpZ2dlck9iamVjdHMoXG4gICAgICBlZGl0b3JMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKFwicGUudHJpZ2dlck1ha2VRdWVzdGlvbnNWaXNpYmxlXCIpLFxuICAgICAga29RdWVzdGlvbnMoKSxcbiAgICAgIHRyaWdnZXIucXVlc3Rpb25zXG4gICAgKTtcbiAgfVxuICBwdWJsaWMgYXBwbHlQcm9wZXJ0aWVzKHRyaWdnZXI6IFN1cnZleS5TdXJ2ZXlUcmlnZ2VyKSB7XG4gICAgc3VwZXIuYXBwbHlQcm9wZXJ0aWVzKHRyaWdnZXIpO1xuICAgIHZhciB0ciA9IDxTdXJ2ZXkuU3VydmV5VHJpZ2dlclZpc2libGU+dHJpZ2dlcjtcbiAgICB0ci5wYWdlcyA9IHRoaXMucGFnZXMua29DaG9vc2VuKCkubWFwKG8gPT4gby5uYW1lKTtcbiAgICB0ci5xdWVzdGlvbnMgPSB0aGlzLnF1ZXN0aW9ucy5rb0Nob29zZW4oKS5tYXAobyA9PiBvLm5hbWUpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlQcm9wZXJ0eVNldFZhbHVlVHJpZ2dlciBleHRlbmRzIFN1cnZleVByb3BlcnR5VHJpZ2dlciB7XG4gIHByaXZhdGUgc3RhdGljIGVtcHR5U3VydmV5ID0gdW5kZWZpbmVkO1xuICBzZXRUb05hbWVTZWxlY3RvcjogU3VydmV5RWxlbWVudFNlbGVjdG9yO1xuICBrb3NldFRvTmFtZTogYW55O1xuICBrb3NldFZhbHVlOiBhbnk7XG4gIGtvaXNWYXJpYWJsZTogYW55O1xuICBrb1N1cnZleTogYW55O1xuICBrb0hhc1N1cnZleTogYW55O1xuICB2YWx1ZVN1cnZleTogU3VydmV5LlN1cnZleTtcbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIHN1cnZleTogU3VydmV5LlN1cnZleU1vZGVsLFxuICAgIHB1YmxpYyB0cmlnZ2VyOiBTdXJ2ZXkuU3VydmV5VHJpZ2dlclNldFZhbHVlLFxuICAgIHB1YmxpYyBvcHRpb25zOiBhbnlcbiAgKSB7XG4gICAgc3VwZXIoc3VydmV5LCB0cmlnZ2VyLCBvcHRpb25zKTtcbiAgICBpZiAoIVN1cnZleVByb3BlcnR5U2V0VmFsdWVUcmlnZ2VyLmVtcHR5U3VydmV5KSB7XG4gICAgICBTdXJ2ZXlQcm9wZXJ0eVNldFZhbHVlVHJpZ2dlci5lbXB0eVN1cnZleSA9XG4gICAgICAgICEhb3B0aW9ucyAmJiBvcHRpb25zLmNyZWF0ZVN1cnZleSh7fSwgXCJ0cmlnZ2Vyc0VkaXRvclwiKTtcbiAgICB9XG4gICAgdGhpcy5rb1N1cnZleSA9IGtvLm9ic2VydmFibGUoU3VydmV5UHJvcGVydHlTZXRWYWx1ZVRyaWdnZXIuZW1wdHlTdXJ2ZXkpO1xuICAgIHRoaXMua29IYXNTdXJ2ZXkgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcbiAgICB0aGlzLmtvc2V0VG9OYW1lID0ga28ub2JzZXJ2YWJsZSh0cmlnZ2VyLnNldFRvTmFtZSk7XG4gICAgdGhpcy5rb3NldFZhbHVlID0ga28ub2JzZXJ2YWJsZSh0cmlnZ2VyLnNldFZhbHVlKTtcbiAgICB0aGlzLmtvaXNWYXJpYWJsZSA9IGtvLm9ic2VydmFibGUodHJpZ2dlci5pc1ZhcmlhYmxlKTtcbiAgICB0aGlzLnNldFRvTmFtZVNlbGVjdG9yID0gdGhpcy5jcmVhdGVFbGVtZW50U2VsZWN0b3IodGhpcy5rb3NldFRvTmFtZSk7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIHRoaXMua29zZXRUb05hbWUuc3Vic2NyaWJlKGZ1bmN0aW9uKG5ld1ZhbHVlKSB7XG4gICAgICBpZiAoIXNlbGYua29pc1ZhcmlhYmxlKCkpIHtcbiAgICAgICAgc2VsZi5rb3NldFZhbHVlKG51bGwpO1xuICAgICAgfVxuICAgICAgc2VsZi5idWlsZFN1cnZleSgpO1xuICAgIH0pO1xuICAgIHRoaXMua29pc1ZhcmlhYmxlLnN1YnNjcmliZShmdW5jdGlvbihuZXdWYWx1ZSkge1xuICAgICAgc2VsZi5rb3NldFRvTmFtZShcIlwiKTtcbiAgICAgIHNlbGYua29zZXRWYWx1ZShudWxsKTtcbiAgICAgIHNlbGYuYnVpbGRTdXJ2ZXkoKTtcbiAgICB9KTtcbiAgICB0aGlzLmJ1aWxkU3VydmV5KCk7XG4gIH1cbiAgcHVibGljIGhhc0Vycm9yKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnNldFRvTmFtZVNlbGVjdG9yLmhhc0Vycm9yKCk7XG4gIH1cbiAgcHVibGljIGFwcGx5UHJvcGVydGllcyh0cmlnZ2VyOiBTdXJ2ZXkuU3VydmV5VHJpZ2dlcikge1xuICAgIHN1cGVyLmFwcGx5UHJvcGVydGllcyh0cmlnZ2VyKTtcbiAgICB2YXIgdHIgPSA8U3VydmV5LlN1cnZleVRyaWdnZXJTZXRWYWx1ZT50cmlnZ2VyO1xuICAgIHRyLnNldFRvTmFtZSA9IHRoaXMua29zZXRUb05hbWUoKTtcbiAgICB0ci5zZXRWYWx1ZSA9IHRoaXMua29zZXRWYWx1ZSgpO1xuICAgIHRyLmlzVmFyaWFibGUgPSB0aGlzLmtvaXNWYXJpYWJsZSgpO1xuICB9XG4gIHByaXZhdGUgYnVpbGRTdXJ2ZXkoKSB7XG4gICAgdmFyIHF1ZXN0aW9uID1cbiAgICAgICF0aGlzLmtvaXNWYXJpYWJsZSgpICYmICEhdGhpcy5rb3NldFRvTmFtZSgpXG4gICAgICAgID8gdGhpcy5zdXJ2ZXkuZ2V0UXVlc3Rpb25CeU5hbWUodGhpcy5rb3NldFRvTmFtZSgpKVxuICAgICAgICA6IG51bGw7XG4gICAgaWYgKCFxdWVzdGlvbikge1xuICAgICAgdGhpcy52YWx1ZVN1cnZleSA9IG51bGw7XG4gICAgICB0aGlzLmtvSGFzU3VydmV5KGZhbHNlKTtcbiAgICAgIHRoaXMua29TdXJ2ZXkoU3VydmV5UHJvcGVydHlTZXRWYWx1ZVRyaWdnZXIuZW1wdHlTdXJ2ZXkpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgcUpzb24gPSBTdXJ2ZXlQcm9wZXJ0eURlZmF1bHRWYWx1ZUVkaXRvci5jcmVhdGVKc29uRnJvbVF1ZXN0aW9uKFxuICAgICAgcXVlc3Rpb24sXG4gICAgICBmYWxzZVxuICAgICk7XG4gICAgcUpzb24udGl0bGVMb2NhdGlvbiA9IFwidG9wXCI7XG4gICAgcUpzb24udGl0bGUgPSBlZGl0b3JMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKFwicGUudHJpZ2dlclNldFZhbHVlXCIpO1xuICAgIHRoaXMudmFsdWVTdXJ2ZXkgPSBTdXJ2ZXlQcm9wZXJ0eURlZmF1bHRWYWx1ZUVkaXRvci5jcmVhdGVTdXJ2ZXlGcm9tSnNvblF1ZXN0aW9uKFxuICAgICAgcUpzb24sXG4gICAgICB0aGlzLm9wdGlvbnNcbiAgICApO1xuICAgIHRoaXMudmFsdWVTdXJ2ZXkuc2V0VmFsdWUoXCJxdWVzdGlvblwiLCB0aGlzLmtvc2V0VmFsdWUoKSk7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIHRoaXMudmFsdWVTdXJ2ZXkub25WYWx1ZUNoYW5nZWQuYWRkKGZ1bmN0aW9uKHNlbmRlciwgb3B0aW9ucykge1xuICAgICAgc2VsZi5rb3NldFZhbHVlKG9wdGlvbnMudmFsdWUpO1xuICAgIH0pO1xuICAgIHRoaXMua29TdXJ2ZXkodGhpcy52YWx1ZVN1cnZleSk7XG4gICAgdGhpcy5rb0hhc1N1cnZleSh0cnVlKTtcbiAgfVxufVxuZXhwb3J0IGNsYXNzIFN1cnZleVByb3BlcnR5Q29weVZhbHVlVHJpZ2dlciBleHRlbmRzIFN1cnZleVByb3BlcnR5VHJpZ2dlciB7XG4gIHNldFRvTmFtZVNlbGVjdG9yOiBTdXJ2ZXlFbGVtZW50U2VsZWN0b3I7XG4gIGZyb21OYW1lU2VsZWN0b3I6IFN1cnZleUVsZW1lbnRTZWxlY3RvcjtcbiAga29zZXRUb05hbWU6IGFueTtcbiAga29mcm9tTmFtZTogYW55O1xuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgc3VydmV5OiBTdXJ2ZXkuU3VydmV5TW9kZWwsXG4gICAgcHVibGljIHRyaWdnZXI6IFN1cnZleS5TdXJ2ZXlUcmlnZ2VyLFxuICAgIG9wdGlvbnM/OiBhbnlcbiAgKSB7XG4gICAgc3VwZXIoc3VydmV5LCB0cmlnZ2VyLCBvcHRpb25zKTtcbiAgICB0aGlzLmtvc2V0VG9OYW1lID0ga28ub2JzZXJ2YWJsZSh0cmlnZ2VyW1wic2V0VG9OYW1lXCJdKTtcbiAgICB0aGlzLmtvZnJvbU5hbWUgPSBrby5vYnNlcnZhYmxlKHRyaWdnZXJbXCJmcm9tTmFtZVwiXSk7XG4gICAgdGhpcy5zZXRUb05hbWVTZWxlY3RvciA9IHRoaXMuY3JlYXRlRWxlbWVudFNlbGVjdG9yKHRoaXMua29zZXRUb05hbWUpO1xuICAgIHRoaXMuZnJvbU5hbWVTZWxlY3RvciA9IHRoaXMuY3JlYXRlRWxlbWVudFNlbGVjdG9yKHRoaXMua29mcm9tTmFtZSk7XG4gIH1cbiAgcHVibGljIGhhc0Vycm9yKCk6IGJvb2xlYW4ge1xuICAgIHZhciBhID0gdGhpcy5zZXRUb05hbWVTZWxlY3Rvci5oYXNFcnJvcigpO1xuICAgIHZhciBiID0gdGhpcy5mcm9tTmFtZVNlbGVjdG9yLmhhc0Vycm9yKCk7XG4gICAgcmV0dXJuIGEgfHwgYjtcbiAgfVxuICBwdWJsaWMgYXBwbHlQcm9wZXJ0aWVzKHRyaWdnZXI6IFN1cnZleS5TdXJ2ZXlUcmlnZ2VyKSB7XG4gICAgc3VwZXIuYXBwbHlQcm9wZXJ0aWVzKHRyaWdnZXIpO1xuICAgIHZhciB0ciA9IDxTdXJ2ZXkuU3VydmV5VHJpZ2dlckNvcHlWYWx1ZT50cmlnZ2VyO1xuICAgIHRyLnNldFRvTmFtZSA9IHRoaXMua29zZXRUb05hbWUoKTtcbiAgICB0ci5mcm9tTmFtZSA9IHRoaXMua29mcm9tTmFtZSgpO1xuICB9XG59XG5leHBvcnQgY2xhc3MgU3VydmV5UHJvcGVydHlTa2lwVHJpZ2dlciBleHRlbmRzIFN1cnZleVByb3BlcnR5VHJpZ2dlciB7XG4gIGtvUXVlc3Rpb25zOiBhbnk7XG4gIGtvR290b05hbWU6IGFueTtcbiAgZ290b05hbWVTZWxlY3RvcjogU3VydmV5RWxlbWVudFNlbGVjdG9yO1xuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgc3VydmV5OiBTdXJ2ZXkuU3VydmV5TW9kZWwsXG4gICAgcHVibGljIHRyaWdnZXI6IFN1cnZleS5TdXJ2ZXlUcmlnZ2VyLFxuICAgIG9wdGlvbnM/OiBhbnlcbiAgKSB7XG4gICAgc3VwZXIoc3VydmV5LCB0cmlnZ2VyLCBvcHRpb25zKTtcbiAgICB0aGlzLmtvR290b05hbWUgPSBrby5vYnNlcnZhYmxlKHRyaWdnZXJbXCJnb3RvTmFtZVwiXSk7XG4gICAgdGhpcy5nb3RvTmFtZVNlbGVjdG9yID0gdGhpcy5jcmVhdGVFbGVtZW50U2VsZWN0b3IodGhpcy5rb0dvdG9OYW1lKTtcbiAgfVxuICBwdWJsaWMgaGFzRXJyb3IoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ290b05hbWVTZWxlY3Rvci5oYXNFcnJvcigpO1xuICB9XG4gIHB1YmxpYyBhcHBseVByb3BlcnRpZXModHJpZ2dlcjogU3VydmV5LlN1cnZleVRyaWdnZXIpIHtcbiAgICBzdXBlci5hcHBseVByb3BlcnRpZXModHJpZ2dlcik7XG4gICAgdHJpZ2dlcltcImdvdG9OYW1lXCJdID0gdGhpcy5rb0dvdG9OYW1lKCk7XG4gIH1cbn1cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlQcm9wZXJ0eVJ1bkV4cHJlc3Npb25UcmlnZ2VyIGV4dGVuZHMgU3VydmV5UHJvcGVydHlUcmlnZ2VyIHtcbiAgc2V0VG9OYW1lU2VsZWN0b3I6IFN1cnZleUVsZW1lbnRTZWxlY3RvcjtcbiAga29zZXRUb05hbWU6IGFueTtcbiAga29ydW5FeHByZXNzaW9uOiBhbnk7XG4gIHB1YmxpYyBrb0Vycm9yVGV4dDogYW55O1xuICBwdWJsaWMga29EaXNwbGF5RXJyb3I6IGFueTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgc3VydmV5OiBTdXJ2ZXkuU3VydmV5TW9kZWwsXG4gICAgcHVibGljIHRyaWdnZXI6IFN1cnZleS5TdXJ2ZXlUcmlnZ2VyLFxuICAgIG9wdGlvbnM/OiBhbnlcbiAgKSB7XG4gICAgc3VwZXIoc3VydmV5LCB0cmlnZ2VyLCBvcHRpb25zKTtcbiAgICB0aGlzLmtvc2V0VG9OYW1lID0ga28ub2JzZXJ2YWJsZSh0cmlnZ2VyW1wic2V0VG9OYW1lXCJdKTtcbiAgICB0aGlzLmtvcnVuRXhwcmVzc2lvbiA9IGtvLm9ic2VydmFibGUodHJpZ2dlcltcInJ1bkV4cHJlc3Npb25cIl0pO1xuICAgIHRoaXMuc2V0VG9OYW1lU2VsZWN0b3IgPSB0aGlzLmNyZWF0ZUVsZW1lbnRTZWxlY3Rvcih0aGlzLmtvc2V0VG9OYW1lKTtcbiAgICB0aGlzLmtvRXJyb3JUZXh0ID0ga28ub2JzZXJ2YWJsZShcIlwiKTtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgdGhpcy5rb0Rpc3BsYXlFcnJvciA9IGtvLmNvbXB1dGVkKGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuICEhc2VsZi5rb0Vycm9yVGV4dCgpO1xuICAgIH0pO1xuICB9XG4gIHB1YmxpYyBoYXNFcnJvcigpOiBib29sZWFuIHtcbiAgICB2YXIgdGV4dCA9ICF0aGlzLmtvcnVuRXhwcmVzc2lvbigpXG4gICAgICA/IGVkaXRvckxvY2FsaXphdGlvbi5nZXRTdHJpbmcoXCJwZS50cmlnZ2VyUnVuRXhwcmVzc2lvbkVtcHR5XCIpXG4gICAgICA6IFwiXCI7XG4gICAgdGhpcy5rb0Vycm9yVGV4dCh0ZXh0KTtcbiAgICByZXR1cm4gISF0ZXh0O1xuICB9XG4gIHB1YmxpYyBhcHBseVByb3BlcnRpZXModHJpZ2dlcjogU3VydmV5LlN1cnZleVRyaWdnZXIpIHtcbiAgICBzdXBlci5hcHBseVByb3BlcnRpZXModHJpZ2dlcik7XG4gICAgdHJpZ2dlcltcInNldFRvTmFtZVwiXSA9IHRoaXMua29zZXRUb05hbWUoKTtcbiAgICB0cmlnZ2VyW1wicnVuRXhwcmVzc2lvblwiXSA9IHRoaXMua29ydW5FeHByZXNzaW9uKCk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFN1cnZleVByb3BlcnR5VHJpZ2dlck9iamVjdHMge1xuICBrb09iamVjdHMgPSBrby5vYnNlcnZhYmxlQXJyYXk8RWxlbWVudD4oKTtcbiAga29DaG9vc2VuID0ga28ub2JzZXJ2YWJsZUFycmF5PEVsZW1lbnQ+KCk7XG4gIGtvU2VsZWN0ZWQgPSBrby5vYnNlcnZhYmxlPEVsZW1lbnQ+KCk7XG4gIGtvQ2hvb3NlblNlbGVjdGVkID0ga28ub2JzZXJ2YWJsZTxFbGVtZW50PigpO1xuICBwdWJsaWMgb25EZWxldGVDbGljazogYW55O1xuICBwdWJsaWMgb25BZGRDbGljazogYW55O1xuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgdGl0bGU6IHN0cmluZyxcbiAgICBhbGxPYmplY3RzOiBBcnJheTxFbGVtZW50PixcbiAgICBjaG9vc2VuT2JqZWN0czogQXJyYXk8c3RyaW5nPlxuICApIHtcbiAgICBhbGxPYmplY3RzLmZvckVhY2gob2JqID0+IHtcbiAgICAgIGlmIChjaG9vc2VuT2JqZWN0cy5pbmRleE9mKG9iai5uYW1lKSAhPT0gLTEpIHtcbiAgICAgICAgdGhpcy5rb0Nob29zZW4ucHVzaChvYmopO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5rb09iamVjdHMucHVzaChvYmopO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG4gIHByaXZhdGUgZGVsZXRlSXRlbSA9ICgpID0+IHtcbiAgICB0aGlzLmNoYW5nZUl0ZW1zKHRoaXMua29DaG9vc2VuU2VsZWN0ZWQoKSwgdGhpcy5rb0Nob29zZW4sIHRoaXMua29PYmplY3RzKTtcbiAgfTtcbiAgcHJpdmF0ZSBhZGRJdGVtID0gKCkgPT4ge1xuICAgIHRoaXMuY2hhbmdlSXRlbXModGhpcy5rb1NlbGVjdGVkKCksIHRoaXMua29PYmplY3RzLCB0aGlzLmtvQ2hvb3Nlbik7XG4gIH07XG4gIHByaXZhdGUgY2hhbmdlSXRlbXMoaXRlbTogRWxlbWVudCwgcmVtb3ZlZEZyb206IGFueSwgYWRkVG86IGFueSkge1xuICAgIGlmICghaXRlbSkgcmV0dXJuO1xuICAgIHJlbW92ZWRGcm9tLnJlbW92ZShpdGVtKTtcbiAgICBhZGRUby5wdXNoKGl0ZW0pO1xuICAgIHJlbW92ZWRGcm9tLnNvcnQoKTtcbiAgICBhZGRUby5zb3J0KCk7XG4gIH1cbn1cblxuU3VydmV5UHJvcGVydHlFZGl0b3JGYWN0b3J5LnJlZ2lzdGVyRWRpdG9yKFwidHJpZ2dlcnNcIiwgZnVuY3Rpb24oXG4gIHByb3BlcnR5OiBTdXJ2ZXkuSnNvbk9iamVjdFByb3BlcnR5XG4pOiBTdXJ2ZXlQcm9wZXJ0eUVkaXRvckJhc2Uge1xuICByZXR1cm4gbmV3IFN1cnZleVByb3BlcnR5VHJpZ2dlcnNFZGl0b3IocHJvcGVydHkpO1xufSk7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvcHJvcGVydHlFZGl0b3JzL3Byb3BlcnR5VHJpZ2dlcnNFZGl0b3IudHMiLCJpbXBvcnQgKiBhcyBrbyBmcm9tIFwia25vY2tvdXRcIjtcbmltcG9ydCAqIGFzIFN1cnZleSBmcm9tIFwic3VydmV5LWtub2Nrb3V0XCI7XG5pbXBvcnQgeyBlZGl0b3JMb2NhbGl6YXRpb24gfSBmcm9tIFwiLi4vZWRpdG9yTG9jYWxpemF0aW9uXCI7XG5pbXBvcnQgeyBFZGl0YWJsZU9iamVjdCB9IGZyb20gXCIuL2VkaXRhYmxlT2JqZWN0XCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3VydmV5RWxlbWVudFNlbGVjdG9ySXRlbSB7XG4gIG5hbWU6IHN0cmluZztcbiAgdGV4dDogc3RyaW5nO1xuICBlbGVtZW50OiBTdXJ2ZXkuQmFzZTtcbiAga29EaXNhYmxlZDogYW55O1xufVxuXG5leHBvcnQgY2xhc3MgU3VydmV5RWxlbWVudFNlbGVjdG9yIHtcbiAgcHJpdmF0ZSBzaG93VGl0bGU6IGJvb2xlYW47XG4gIHByaXZhdGUgb3B0aW9uc0NhcHRpb25WYWx1ZTogc3RyaW5nO1xuICBwcml2YXRlIGRpc2FibGVDYWxsYmFjazogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIHNlbGVjdGVkVmFsdWVzOiBBcnJheTxzdHJpbmc+ID0gW107XG4gIHB1YmxpYyBrb0VsZW1lbnRzOiBhbnk7XG4gIHB1YmxpYyBrb1ZhbHVlOiBhbnk7XG4gIHB1YmxpYyBrb0hhc0ZvY3VzOiBhbnk7XG4gIHB1YmxpYyBrb0Vycm9yVGV4dDogYW55O1xuICBwdWJsaWMga29EaXNwbGF5RXJyb3I6IGFueTtcbiAgcHVibGljIG9uVmFsdWVDaGFuZ2VkQ2FsbGJhY2s6ICh2YWw6IHN0cmluZykgPT4gdm9pZDtcbiAgcHVibGljIGRpc2FibGVkUHJvcGVydHlOYW1lOiBzdHJpbmc7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBzdXJ2ZXk6IFN1cnZleS5TdXJ2ZXlNb2RlbCxcbiAgICBlbGVtZW50VHlwZTogc3RyaW5nID0gXCJxdWVzdGlvblwiLFxuICAgIHNob3dUaXRsZTogYm9vbGVhbiA9IGZhbHNlLFxuICAgIG9wdGlvbnNDYXB0aW9uTmFtZTogc3RyaW5nID0gXCJcIlxuICApIHtcbiAgICB0aGlzLnN1cnZleSA9IEVkaXRhYmxlT2JqZWN0LmdldE9yaWdpb25hbFN1cnZleSh0aGlzLnN1cnZleSk7XG4gICAgdGhpcy5zaG93VGl0bGUgPSBzaG93VGl0bGU7XG4gICAgdGhpcy5vcHRpb25zQ2FwdGlvblZhbHVlID0gdGhpcy5nZXRPcHRpb25zVGV4dChcbiAgICAgIG9wdGlvbnNDYXB0aW9uTmFtZSxcbiAgICAgIGVsZW1lbnRUeXBlXG4gICAgKTtcbiAgICB0aGlzLmtvVmFsdWUgPSBrby5vYnNlcnZhYmxlKFwiXCIpO1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICB0aGlzLmtvVmFsdWUuc3Vic2NyaWJlKGZ1bmN0aW9uKG5ld1ZhbHVlKSB7XG4gICAgICBpZiAoc2VsZi5kaXNhYmxlQ2FsbGJhY2sgfHwgIXNlbGYub25WYWx1ZUNoYW5nZWRDYWxsYmFjaykgcmV0dXJuO1xuICAgICAgc2VsZi5vblZhbHVlQ2hhbmdlZENhbGxiYWNrKG5ld1ZhbHVlKTtcbiAgICB9KTtcbiAgICB0aGlzLmtvRWxlbWVudHMgPSBrby5vYnNlcnZhYmxlQXJyYXkodGhpcy5idWlsZEVsZW1lbnRzKGVsZW1lbnRUeXBlKSk7XG4gICAgdGhpcy5rb0hhc0ZvY3VzID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG4gICAgdGhpcy5rb0hhc0ZvY3VzLnN1YnNjcmliZShmdW5jdGlvbihuZXdWYWx1ZSkge1xuICAgICAgaWYgKG5ld1ZhbHVlKSB7XG4gICAgICAgIHNlbGYudXBkYXRlSXRlbXMoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLmtvRXJyb3JUZXh0ID0ga28ub2JzZXJ2YWJsZShcIlwiKTtcbiAgICB0aGlzLmtvRGlzcGxheUVycm9yID0ga28uY29tcHV0ZWQoZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gISFzZWxmLmtvRXJyb3JUZXh0KCk7XG4gICAgfSk7XG4gIH1cbiAgcHVibGljIGdldCB2YWx1ZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmtvVmFsdWUoKTtcbiAgfVxuICBwdWJsaWMgc2V0IHZhbHVlKHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5kaXNhYmxlQ2FsbGJhY2sgPSB0cnVlO1xuICAgIHRoaXMua29WYWx1ZSh2YWwpO1xuICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZXMucHVzaCh2YWwpO1xuICAgIHRoaXMuZGlzYWJsZUNhbGxiYWNrID0gZmFsc2U7XG4gIH1cbiAgcHVibGljIGdldCBlbGVtZW50KCk6IFN1cnZleS5CYXNlIHtcbiAgICB2YXIgZWwgPSB0aGlzLmZpbmRJdGVtQnlOYW1lKHRoaXMudmFsdWUpO1xuICAgIHJldHVybiAhIWVsID8gZWwuZWxlbWVudCA6IG51bGw7XG4gIH1cbiAgcHVibGljIHNldCBlbGVtZW50KHZhbDogU3VydmV5LkJhc2UpIHtcbiAgICB2YXIgZWwgPSB0aGlzLmZpbmRJdGVtQnlFbGVtZW50KHZhbCk7XG4gICAgaWYgKCEhZWwpIHtcbiAgICAgIHRoaXMudmFsdWUgPSBlbC5uYW1lO1xuICAgIH1cbiAgfVxuICBwcml2YXRlIGZpbmRJdGVtQnlOYW1lKG5hbWU6IHN0cmluZyk6IFN1cnZleUVsZW1lbnRTZWxlY3Rvckl0ZW0ge1xuICAgIGlmICghbmFtZSkgcmV0dXJuIG51bGw7XG4gICAgdmFyIGl0ZW1zID0gdGhpcy5rb0VsZW1lbnRzKCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpdGVtcy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKGl0ZW1zW2ldLm5hbWUgPT0gbmFtZSkgcmV0dXJuIGl0ZW1zW2ldO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBwcml2YXRlIGZpbmRJdGVtQnlFbGVtZW50KGVsOiBTdXJ2ZXkuQmFzZSk6IFN1cnZleUVsZW1lbnRTZWxlY3Rvckl0ZW0ge1xuICAgIGlmICghZWwpIHJldHVybiBudWxsO1xuICAgIHZhciBpdGVtcyA9IHRoaXMua29FbGVtZW50cygpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaXRlbXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChpdGVtc1tpXS5lbGVtZW50ID09PSBlbCkgcmV0dXJuIGl0ZW1zW2ldO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBwdWJsaWMgZ2V0IG9wdGlvbnNDYXB0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLm9wdGlvbnNDYXB0aW9uVmFsdWU7XG4gIH1cbiAgcHVibGljIHVwZGF0ZUl0ZW1zKCkge1xuICAgIGlmICghdGhpcy5kaXNhYmxlZFByb3BlcnR5TmFtZSkgcmV0dXJuO1xuICAgIHZhciBpdGVtcyA9IHRoaXMua29FbGVtZW50cygpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaXRlbXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBpdGVtID0gaXRlbXNbaV07XG4gICAgICB2YXIgZGlzYWJsZWQgPVxuICAgICAgICAhIWl0ZW0uZWxlbWVudFt0aGlzLmRpc2FibGVkUHJvcGVydHlOYW1lXSAmJlxuICAgICAgICB0aGlzLnNlbGVjdGVkVmFsdWVzLmluZGV4T2YoaXRlbS5uYW1lKSA8IDA7XG4gICAgICBpdGVtLmtvRGlzYWJsZWQoZGlzYWJsZWQpO1xuICAgIH1cbiAgfVxuICBwdWJsaWMgaGFzRXJyb3IoKTogYm9vbGVhbiB7XG4gICAgdmFyIHRleHQgPSAhdGhpcy5lbGVtZW50XG4gICAgICA/IGVkaXRvckxvY2FsaXphdGlvbi5nZXRTdHJpbmcoXCJwZS5pdGVtU2VsZWN0b3JFbXB0eVwiKVxuICAgICAgOiBcIlwiO1xuICAgIHRoaXMua29FcnJvclRleHQodGV4dCk7XG4gICAgcmV0dXJuICEhdGV4dDtcbiAgfVxuICBwcml2YXRlIGJ1aWxkRWxlbWVudHMoZWxlbWVudFR5cGU6IHN0cmluZyk6IEFycmF5PFN1cnZleUVsZW1lbnRTZWxlY3Rvckl0ZW0+IHtcbiAgICB2YXIgZWxlbWVudHMgPSBbXTtcbiAgICBpZiAoZWxlbWVudFR5cGUgPT0gXCJxdWVzdGlvblwiKSB7XG4gICAgICBlbGVtZW50cyA9IHRoaXMuc3VydmV5LmdldEFsbFF1ZXN0aW9ucygpO1xuICAgIH1cbiAgICBpZiAoZWxlbWVudFR5cGUgPT0gXCJwYWdlXCIpIHtcbiAgICAgIGVsZW1lbnRzID0gdGhpcy5zdXJ2ZXkucGFnZXM7XG4gICAgfVxuICAgIGlmIChlbGVtZW50VHlwZSA9PSBcInBhbmVsXCIpIHtcbiAgICAgIGVsZW1lbnRzID0gdGhpcy5zdXJ2ZXkuZ2V0QWxsUGFuZWxzKCk7XG4gICAgfVxuICAgIHZhciByZXMgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVsZW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgZWwgPSBlbGVtZW50c1tpXTtcbiAgICAgIHZhciB0ZXh0ID0gXCJcIjtcbiAgICAgIGlmICh0aGlzLnNob3dUaXRsZSkge1xuICAgICAgICB0ZXh0ID0gZWwubG9jVGl0bGUucmVuZGVyZWRIdG1sO1xuICAgICAgfVxuICAgICAgaWYgKCF0ZXh0KSB0ZXh0ID0gZWwubmFtZTtcbiAgICAgIHJlcy5wdXNoKHtcbiAgICAgICAgbmFtZTogZWwubmFtZSxcbiAgICAgICAgdGV4dDogdGV4dCxcbiAgICAgICAgZWxlbWVudDogZWwsXG4gICAgICAgIGtvRGlzYWJsZWQ6IGtvLm9ic2VydmFibGUoZmFsc2UpXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuICBwcml2YXRlIGdldE9wdGlvbnNUZXh0KFxuICAgIG9wdGlvbnNDYXB0aW9uTmFtZTogc3RyaW5nLFxuICAgIGVsZW1lbnRUeXBlOiBzdHJpbmdcbiAgKTogc3RyaW5nIHtcbiAgICBpZiAoIW9wdGlvbnNDYXB0aW9uTmFtZSkge1xuICAgICAgb3B0aW9uc0NhcHRpb25OYW1lID1cbiAgICAgICAgZWxlbWVudFR5cGUgPT0gXCJwYWdlXCJcbiAgICAgICAgICA/IFwicGUuY29uZGl0aW9uU2VsZWN0UGFnZVwiXG4gICAgICAgICAgOiBlbGVtZW50VHlwZSA9PSBcInBhbmVsXCJcbiAgICAgICAgICA/IFwicGUuY29uZGl0aW9uU2VsZWN0UGFuZWxcIlxuICAgICAgICAgIDogXCJwZS5jb25kaXRpb25TZWxlY3RRdWVzdGlvblwiO1xuICAgIH1cbiAgICByZXR1cm4gZWRpdG9yTG9jYWxpemF0aW9uLmdldFN0cmluZyhvcHRpb25zQ2FwdGlvbk5hbWUpO1xuICB9XG59XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvcHJvcGVydHlFZGl0b3JzL3N1cnZleUVsZW1lbnRTZWxlY3Rvci50cyIsImltcG9ydCAqIGFzIGtvIGZyb20gXCJrbm9ja291dFwiO1xuaW1wb3J0IHsgZWRpdG9yTG9jYWxpemF0aW9uIH0gZnJvbSBcIi4uL2VkaXRvckxvY2FsaXphdGlvblwiO1xuaW1wb3J0ICogYXMgU3VydmV5IGZyb20gXCJzdXJ2ZXkta25vY2tvdXRcIjtcbmltcG9ydCB7IFN1cnZleU9iamVjdFByb3BlcnR5IH0gZnJvbSBcIi4uL29iamVjdFByb3BlcnR5XCI7XG5pbXBvcnQge1xuICBTdXJ2ZXlQcm9wZXJ0eUVkaXRvckJhc2UsXG4gIElTdXJ2ZXlPYmplY3RFZGl0b3JPcHRpb25zXG59IGZyb20gXCIuLi9wcm9wZXJ0eUVkaXRvcnMvcHJvcGVydHlFZGl0b3JCYXNlXCI7XG5pbXBvcnQgeyBTdXJ2ZXlIZWxwZXIgfSBmcm9tIFwiLi4vc3VydmV5SGVscGVyXCI7XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlRdWVzdGlvbkVkaXRvclByb3BlcnR5IHtcbiAgcHJpdmF0ZSBvYmplY3RQcm9wZXJ0eVZhbHVlOiBTdXJ2ZXlPYmplY3RQcm9wZXJ0eTtcblxuICBrb1ZhbHVlOiBhbnk7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBvYmo6IFN1cnZleS5CYXNlLFxuICAgIHB1YmxpYyBwcm9wZXJ0eTogU3VydmV5Lkpzb25PYmplY3RQcm9wZXJ0eSxcbiAgICBkaXNwbGF5TmFtZTogc3RyaW5nLFxuICAgIG9wdGlvbnM6IElTdXJ2ZXlPYmplY3RFZGl0b3JPcHRpb25zID0gbnVsbCxcbiAgICBpc1RhYlByb3BlcnR5OiBib29sZWFuID0gZmFsc2UsXG4gICAgcHJpdmF0ZSBnZXRFZGl0b3JQcm9wZXJ0eUJ5TmFtZTogKFxuICAgICAgbmFtZTogc3RyaW5nXG4gICAgKSA9PiBTdXJ2ZXlRdWVzdGlvbkVkaXRvclByb3BlcnR5ID0gbnVsbFxuICApIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgdGhpcy5vYmplY3RQcm9wZXJ0eVZhbHVlID0gbmV3IFN1cnZleU9iamVjdFByb3BlcnR5KFxuICAgICAgdGhpcy5wcm9wZXJ0eSxcbiAgICAgIGZ1bmN0aW9uKHByb3BlcnR5LCBuZXdWYWx1ZSkge1xuICAgICAgICBzZWxmLm9uUHJvcGVydHlDaGFuZ2VkKHByb3BlcnR5LCBuZXdWYWx1ZSk7XG4gICAgICB9LFxuICAgICAgb3B0aW9uc1xuICAgICk7XG4gICAgdGhpcy5lZGl0b3IuaXNUYWJQcm9wZXJ0eSA9IGlzVGFiUHJvcGVydHk7XG4gICAgaWYgKCFkaXNwbGF5TmFtZSkge1xuICAgICAgZGlzcGxheU5hbWUgPSBlZGl0b3JMb2NhbGl6YXRpb24uZ2V0UHJvcGVydHlJbkVkaXRvcih0aGlzLnByb3BlcnR5Lm5hbWUpO1xuICAgIH1cbiAgICBpZiAoZGlzcGxheU5hbWUpIHRoaXMuZWRpdG9yLmRpc3BsYXlOYW1lID0gZGlzcGxheU5hbWU7XG4gICAgdGhpcy5vYmplY3RQcm9wZXJ0eS5vbkRlcGVuZGVkUHJvcGVydHlVcGRhdGVDYWxsYmFjayA9IGZ1bmN0aW9uKFxuICAgICAgcHJvcGVydHlOYW1lOiBzdHJpbmdcbiAgICApIHtcbiAgICAgIHNlbGYudXBkYXRlRGVwZW5kZWRQcm9wZXJ0eShwcm9wZXJ0eU5hbWUpO1xuICAgIH07XG4gICAgdGhpcy5vYmplY3RQcm9wZXJ0eS5vYmplY3QgPSBvYmo7XG4gICAgdGhpcy5lZGl0b3Iuc2V0dXAoKTtcbiAgfVxuICBwdWJsaWMgZ2V0IG9iamVjdFByb3BlcnR5KCk6IFN1cnZleU9iamVjdFByb3BlcnR5IHtcbiAgICByZXR1cm4gdGhpcy5vYmplY3RQcm9wZXJ0eVZhbHVlO1xuICB9XG4gIHB1YmxpYyBnZXQgZWRpdG9yKCk6IFN1cnZleVByb3BlcnR5RWRpdG9yQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMub2JqZWN0UHJvcGVydHkuZWRpdG9yO1xuICB9XG4gIHB1YmxpYyBoYXNFcnJvcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5lZGl0b3IuaGFzRXJyb3IoKTtcbiAgfVxuICBwdWJsaWMgYXBwbHkoKTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMuZWRpdG9yLmFwcGx5KCkpIHtcbiAgICAgIHRoaXMub2JqW3RoaXMucHJvcGVydHkubmFtZV0gPSB0aGlzLmVkaXRvci5rb1ZhbHVlKCk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHB1YmxpYyBhcHBseVRvT2JqKG9iajogU3VydmV5LkJhc2UpIHtcbiAgICBpZiAoXG4gICAgICBTdXJ2ZXkuSGVscGVycy5pc1R3b1ZhbHVlRXF1YWxzKFxuICAgICAgICBvYmpbdGhpcy5wcm9wZXJ0eS5uYW1lXSxcbiAgICAgICAgdGhpcy5vYmpbdGhpcy5wcm9wZXJ0eS5uYW1lXVxuICAgICAgKVxuICAgIClcbiAgICAgIHJldHVybjtcbiAgICBvYmpbdGhpcy5wcm9wZXJ0eS5uYW1lXSA9IHRoaXMub2JqW3RoaXMucHJvcGVydHkubmFtZV07XG4gIH1cbiAgcHVibGljIHJlc2V0KCkge1xuICAgIHRoaXMuZWRpdG9yLmtvVmFsdWUodGhpcy5wcm9wZXJ0eS5nZXRQcm9wZXJ0eVZhbHVlKHRoaXMub2JqKSk7XG4gIH1cbiAgcHVibGljIGJlZm9yZVNob3coKSB7XG4gICAgdGhpcy5lZGl0b3IuYmVmb3JlU2hvdygpO1xuICAgIHRoaXMub2JqZWN0UHJvcGVydHkudXBkYXRlRHluYW1pY1Byb3BlcnRpZXMoKTtcbiAgfVxuICBwcm90ZWN0ZWQgb25Qcm9wZXJ0eUNoYW5nZWQocHJvcGVydHk6IFN1cnZleU9iamVjdFByb3BlcnR5LCBuZXdWYWx1ZTogYW55KSB7XG4gICAgdGhpcy5vYmpbdGhpcy5wcm9wZXJ0eS5uYW1lXSA9IG5ld1ZhbHVlO1xuICB9XG4gIHByaXZhdGUgdXBkYXRlRGVwZW5kZWRQcm9wZXJ0eShwcm9wZXJ0eU5hbWU6IHN0cmluZykge1xuICAgIGlmICghdGhpcy5nZXRFZGl0b3JQcm9wZXJ0eUJ5TmFtZSkgcmV0dXJuO1xuICAgIHZhciBwcm9wID0gdGhpcy5nZXRFZGl0b3JQcm9wZXJ0eUJ5TmFtZShwcm9wZXJ0eU5hbWUpO1xuICAgIGlmICghIXByb3ApIHtcbiAgICAgIHByb3Aub2JqZWN0UHJvcGVydHkudXBkYXRlRHluYW1pY1Byb3BlcnRpZXMoKTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFN1cnZleVF1ZXN0aW9uRWRpdG9yUm93IHtcbiAgcHVibGljIGNhdGVnb3J5OiBzdHJpbmc7XG4gIHB1YmxpYyBwcm9wZXJ0aWVzOiBBcnJheTxTdXJ2ZXlRdWVzdGlvbkVkaXRvclByb3BlcnR5PiA9IFtdO1xuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgb2JqOiBTdXJ2ZXkuQmFzZSxcbiAgICBwcml2YXRlIGdldEVkaXRvclByb3BlcnR5QnlOYW1lOiAoXG4gICAgICBuYW1lOiBzdHJpbmdcbiAgICApID0+IFN1cnZleVF1ZXN0aW9uRWRpdG9yUHJvcGVydHkgPSBudWxsXG4gICkge31cbiAgcHVibGljIGFkZFByb3BlcnR5KFxuICAgIHByb3BlcnR5OiBhbnksXG4gICAgZGlzcGxheU5hbWU6IHN0cmluZyxcbiAgICBvcHRpb25zOiBJU3VydmV5T2JqZWN0RWRpdG9yT3B0aW9ucyxcbiAgICBpc1RhYlByb3BlcnR5OiBib29sZWFuXG4gICkge1xuICAgIHRoaXMucHJvcGVydGllcy5wdXNoKFxuICAgICAgbmV3IFN1cnZleVF1ZXN0aW9uRWRpdG9yUHJvcGVydHkoXG4gICAgICAgIHRoaXMub2JqLFxuICAgICAgICBwcm9wZXJ0eSxcbiAgICAgICAgZGlzcGxheU5hbWUsXG4gICAgICAgIG9wdGlvbnMsXG4gICAgICAgIGlzVGFiUHJvcGVydHksXG4gICAgICAgIHRoaXMuZ2V0RWRpdG9yUHJvcGVydHlCeU5hbWVcbiAgICAgIClcbiAgICApO1xuICB9XG4gIHB1YmxpYyBoYXNFcnJvcigpOiBib29sZWFuIHtcbiAgICB2YXIgaXNFcnJvciA9IGZhbHNlO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5wcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpc0Vycm9yID0gdGhpcy5wcm9wZXJ0aWVzW2ldLmhhc0Vycm9yKCkgfHwgaXNFcnJvcjtcbiAgICB9XG4gICAgcmV0dXJuIGlzRXJyb3I7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFN1cnZleVF1ZXN0aW9uRWRpdG9yUHJvcGVydGllcyB7XG4gIHB1YmxpYyBpc1RhYlByb3BlcnR5OiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgcHJvcGVydGllczogQXJyYXk8U3VydmV5Lkpzb25PYmplY3RQcm9wZXJ0eT47XG4gIHB1YmxpYyByb3dzOiBBcnJheTxTdXJ2ZXlRdWVzdGlvbkVkaXRvclJvdz4gPSBbXTtcbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIG9iajogU3VydmV5LkJhc2UsXG4gICAgcHJvcGVydGllczogQXJyYXk8YW55PixcbiAgICBwdWJsaWMgb3B0aW9uczogSVN1cnZleU9iamVjdEVkaXRvck9wdGlvbnMgPSBudWxsLFxuICAgIHByaXZhdGUgdGFiOiBhbnkgPSBudWxsLFxuICAgIHByaXZhdGUgZ2V0RWRpdG9yUHJvcGVydHlCeU5hbWU6IChcbiAgICAgIG5hbWU6IHN0cmluZ1xuICAgICkgPT4gU3VydmV5UXVlc3Rpb25FZGl0b3JQcm9wZXJ0eSA9IG51bGxcbiAgKSB7XG4gICAgdGhpcy5pc1RhYlByb3BlcnR5ID0gISF0YWI7XG4gICAgdGhpcy5wcm9wZXJ0aWVzID0gU3VydmV5LlNlcmlhbGl6ZXIuZ2V0UHJvcGVydGllc0J5T2JqKHRoaXMub2JqKTtcbiAgICB0aGlzLmJ1aWxkUm93cyhwcm9wZXJ0aWVzKTtcbiAgfVxuICBwdWJsaWMgYXBwbHkoKSB7XG4gICAgdmFyIHJlcyA9IHRydWU7XG4gICAgdGhpcy5wZXJmb3JtRm9yQWxsUHJvcGVydGllcyhwID0+IChyZXMgPSBwLmFwcGx5KCkgJiYgcmVzKSk7XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuICBwdWJsaWMgYXBwbHlUb09iaihvYmo6IFN1cnZleS5CYXNlKSB7XG4gICAgdGhpcy5wZXJmb3JtRm9yQWxsUHJvcGVydGllcyhwID0+IHAuYXBwbHlUb09iaihvYmopKTtcbiAgfVxuICBwdWJsaWMgcmVzZXQoKSB7XG4gICAgdGhpcy5wZXJmb3JtRm9yQWxsUHJvcGVydGllcyhwID0+IHAucmVzZXQoKSk7XG4gIH1cbiAgcHVibGljIGJlZm9yZVNob3coKSB7XG4gICAgdGhpcy5wZXJmb3JtRm9yQWxsUHJvcGVydGllcyhwID0+IHAuYmVmb3JlU2hvdygpKTtcbiAgICBpZiAoXG4gICAgICB0aGlzLmdldEFsbFByb3BlcnRpZXMoKS5sZW5ndGggPT09IDEgJiZcbiAgICAgIHRoaXMuaXNUYWJQcm9wZXJ0eSAmJlxuICAgICAgdGhpcy50YWIudmlzaWJsZSAhPT0gdW5kZWZpbmVkXG4gICAgKSB7XG4gICAgICB0aGlzLmdldEFsbFByb3BlcnRpZXMoKVswXS5vYmplY3RQcm9wZXJ0eS5rb1Zpc2libGUodGhpcy50YWIudmlzaWJsZSk7XG4gICAgfVxuICB9XG4gIHB1YmxpYyBoYXNFcnJvcigpOiBib29sZWFuIHtcbiAgICB2YXIgaXNFcnJvciA9IGZhbHNlO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5yb3dzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpc0Vycm9yID0gdGhpcy5yb3dzW2ldLmhhc0Vycm9yKCkgfHwgaXNFcnJvcjtcbiAgICB9XG4gICAgcmV0dXJuIGlzRXJyb3I7XG4gIH1cbiAgcHVibGljIGdldFByb3BlcnR5RWRpdG9yQnlOYW1lKFxuICAgIHByb3BlcnR5TmFtZTogc3RyaW5nXG4gICk6IFN1cnZleVF1ZXN0aW9uRWRpdG9yUHJvcGVydHkge1xuICAgIHZhciBwcm9wcyA9IHRoaXMuZ2V0QWxsUHJvcGVydGllcygpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChwcm9wc1tpXS5wcm9wZXJ0eS5uYW1lID09IHByb3BlcnR5TmFtZSkgcmV0dXJuIHByb3BzW2ldO1xuICAgIH1cbiAgfVxuICBwcml2YXRlIHBlcmZvcm1Gb3JBbGxQcm9wZXJ0aWVzKFxuICAgIGZ1bmM6IChwOiBTdXJ2ZXlRdWVzdGlvbkVkaXRvclByb3BlcnR5KSA9PiB2b2lkXG4gICkge1xuICAgIHZhciBwcm9wcyA9IHRoaXMuZ2V0QWxsUHJvcGVydGllcygpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGZ1bmMocHJvcHNbaV0pO1xuICAgIH1cbiAgfVxuICBwcml2YXRlIGdldEFsbFByb3BlcnRpZXMoKTogQXJyYXk8U3VydmV5UXVlc3Rpb25FZGl0b3JQcm9wZXJ0eT4ge1xuICAgIHZhciByZXMgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMucm93cy5sZW5ndGg7IGkrKykge1xuICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCB0aGlzLnJvd3NbaV0ucHJvcGVydGllcy5sZW5ndGg7IGorKykge1xuICAgICAgICByZXMucHVzaCh0aGlzLnJvd3NbaV0ucHJvcGVydGllc1tqXSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXM7XG4gIH1cbiAgcHJvdGVjdGVkIGJ1aWxkUm93cyhwcm9wZXJ0aWVzKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgbmFtZSA9IHRoaXMuZ2V0TmFtZShwcm9wZXJ0aWVzW2ldKTtcbiAgICAgIHZhciBqc29uUHJvcGVydHkgPSB0aGlzLmdldFByb3BlcnR5KG5hbWUpO1xuICAgICAgaWYgKCFqc29uUHJvcGVydHkpIGNvbnRpbnVlO1xuICAgICAgdmFyIHJvdyA9IHRoaXMuZ2V0Um93QnlDYXRlZ29yeShwcm9wZXJ0aWVzW2ldLmNhdGVnb3J5KTtcbiAgICAgIGlmICghcm93KSB7XG4gICAgICAgIHJvdyA9IG5ldyBTdXJ2ZXlRdWVzdGlvbkVkaXRvclJvdyhcbiAgICAgICAgICB0aGlzLm9iaixcbiAgICAgICAgICB0aGlzLmdldEVkaXRvclByb3BlcnR5QnlOYW1lXG4gICAgICAgICk7XG4gICAgICAgIGlmIChwcm9wZXJ0aWVzW2ldLmNhdGVnb3J5KSByb3cuY2F0ZWdvcnkgPSBwcm9wZXJ0aWVzW2ldLmNhdGVnb3J5O1xuICAgICAgICB0aGlzLnJvd3MucHVzaChyb3cpO1xuICAgICAgfVxuICAgICAgcm93LmFkZFByb3BlcnR5KFxuICAgICAgICBqc29uUHJvcGVydHksXG4gICAgICAgIHByb3BlcnRpZXNbaV0udGl0bGUsXG4gICAgICAgIHRoaXMub3B0aW9ucyxcbiAgICAgICAgcHJvcGVydGllcy5sZW5ndGggPT09IDEgJiYgdGhpcy5pc1RhYlByb3BlcnR5XG4gICAgICApO1xuICAgIH1cbiAgfVxuICBwcml2YXRlIGdldE5hbWUocHJvcDogYW55KTogc3RyaW5nIHtcbiAgICBpZiAoIXByb3ApIHJldHVybiBudWxsO1xuICAgIGlmICh0eXBlb2YgcHJvcCA9PT0gXCJzdHJpbmdcIikgcmV0dXJuIHByb3A7XG4gICAgaWYgKHByb3AubmFtZSkgcmV0dXJuIHByb3AubmFtZTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBwcml2YXRlIGdldFJvd0J5Q2F0ZWdvcnkoY2F0ZWdvcnk6IHN0cmluZykge1xuICAgIGlmICghY2F0ZWdvcnkpIHJldHVybiBudWxsO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5yb3dzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAodGhpcy5yb3dzW2ldLmNhdGVnb3J5ID09IGNhdGVnb3J5KSByZXR1cm4gdGhpcy5yb3dzW2ldO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBwcml2YXRlIGdldFByb3BlcnR5KHByb3BlcnR5TmFtZTogc3RyaW5nKTogU3VydmV5Lkpzb25PYmplY3RQcm9wZXJ0eSB7XG4gICAgaWYgKCFwcm9wZXJ0eU5hbWUpIHJldHVybiBudWxsO1xuICAgIHZhciBwcm9wZXJ0eSA9IG51bGw7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnByb3BlcnRpZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICh0aGlzLnByb3BlcnRpZXNbaV0ubmFtZSA9PSBwcm9wZXJ0eU5hbWUpIHtcbiAgICAgICAgcHJvcGVydHkgPSB0aGlzLnByb3BlcnRpZXNbaV07XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoIXByb3BlcnR5KSByZXR1cm4gbnVsbDtcbiAgICBpZiAoXG4gICAgICAhIXRoaXMudGFiICYmXG4gICAgICBwcm9wZXJ0eS5uYW1lID09IHRoaXMudGFiLm5hbWUgJiZcbiAgICAgIHRoaXMudGFiLnZpc2libGUgPT09IHRydWVcbiAgICApXG4gICAgICByZXR1cm4gcHJvcGVydHk7XG5cbiAgICByZXR1cm4gU3VydmV5SGVscGVyLmlzUHJvcGVydHlWaXNpYmxlKHRoaXMub2JqLCBwcm9wZXJ0eSwgdGhpcy5vcHRpb25zKVxuICAgICAgPyBwcm9wZXJ0eVxuICAgICAgOiBudWxsO1xuICB9XG59XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvcXVlc3Rpb25FZGl0b3JzL3F1ZXN0aW9uRWRpdG9yUHJvcGVydGllcy50cyIsImltcG9ydCAqIGFzIGtvIGZyb20gXCJrbm9ja291dFwiO1xuaW1wb3J0ICogYXMgU3VydmV5IGZyb20gXCJzdXJ2ZXkta25vY2tvdXRcIjtcbmltcG9ydCB7IGVkaXRvckxvY2FsaXphdGlvbiB9IGZyb20gXCIuL2VkaXRvckxvY2FsaXphdGlvblwiO1xuXG4vKipcbiAqIFRoZSBUb29sYm94IGl0ZW0gZGVzY3JpcHRpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSVF1ZXN0aW9uVG9vbGJveEl0ZW0ge1xuICAvKipcbiAgICogQW4gdW5pcXVlIG5hbWVcbiAgICovXG4gIG5hbWU6IHN0cmluZztcbiAgLyoqXG4gICAqIEljb24gbmFtZVxuICAgKi9cbiAgaWNvbk5hbWU6IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBKU09OIHRoYXQgdXNlZCB0byBjcmVhdGUgYSBuZXcgcXVlc3Rpb24vcGFuZWwuIFRoZSAndHlwZScgYXR0cmlidXRlIGlzIHJlcXVyaWVkLlxuICAgKi9cbiAganNvbjogYW55O1xuICAvKipcbiAgICogVG9vbGJveCBpdGVtIHRpdGxlXG4gICAqL1xuICB0aXRsZTogc3RyaW5nO1xuICAvKipcbiAgICogVG9vbGJveCBpdGVtIHRvb2x0aXAuIEl0IGVxdWFscyB0byB0aXRsZSBpZiBpdCBpcyBlbXB0eVxuICAgKi9cbiAgdG9vbHRpcD86IHN0cmluZztcbiAgLyoqXG4gICAqIFRydWUsIGlmIGFuIGVuZCB1c2VyIGFkZGVkIHRoaXMgaXRlbSBpbnRvIFRvb2xib3ggZnJvbSB0aGUgc3VydmV5LlxuICAgKi9cbiAgaXNDb3BpZWQ6IGJvb2xlYW47XG4gIC8qKlxuICAgKiBUb29sYm94IGl0ZW0gY2F0ZWdvcnkuIElmIGl0IGlzIGVtcHR5LCBpdCBnb2VzIHRvICdHZW5lcmFsJyBjYXRlZ29yeS5cbiAgICovXG4gIGNhdGVnb3J5OiBzdHJpbmc7XG59XG5cbi8qKlxuICogVGhlIGxpc3Qgb2YgVG9vbGJveCBpdGVtcy5cbiAqL1xuZXhwb3J0IGNsYXNzIFF1ZXN0aW9uVG9vbGJveCB7XG4gIHByaXZhdGUgX29yZGVyZWRRdWVzdGlvbnMgPSBbXG4gICAgXCJ0ZXh0XCIsXG4gICAgXCJjaGVja2JveFwiLFxuICAgIFwicmFkaW9ncm91cFwiLFxuICAgIFwiZHJvcGRvd25cIixcbiAgICBcImNvbW1lbnRcIixcbiAgICBcInJhdGluZ1wiLFxuICAgIFwiaW1hZ2VwaWNrZXJcIixcbiAgICBcImJvb2xlYW5cIixcbiAgICBcImh0bWxcIlxuICBdO1xuXG4gIHByaXZhdGUgX3F1ZXN0aW9uRGVmYXVsdFNldHRpbmdzID0ge1xuICAgIGltYWdlcGlja2VyOiAoKSA9PiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjaG9pY2VzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgdmFsdWU6IFwibGlvblwiLFxuICAgICAgICAgICAgaW1hZ2VMaW5rOlxuICAgICAgICAgICAgICBcImh0dHBzOi8vc3VydmV5anMuaW8vQ29udGVudC9JbWFnZXMvZXhhbXBsZXMvaW1hZ2UtcGlja2VyL2xpb24uanBnXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHZhbHVlOiBcImdpcmFmZmVcIixcbiAgICAgICAgICAgIGltYWdlTGluazpcbiAgICAgICAgICAgICAgXCJodHRwczovL3N1cnZleWpzLmlvL0NvbnRlbnQvSW1hZ2VzL2V4YW1wbGVzL2ltYWdlLXBpY2tlci9naXJhZmZlLmpwZ1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICB2YWx1ZTogXCJwYW5kYVwiLFxuICAgICAgICAgICAgaW1hZ2VMaW5rOlxuICAgICAgICAgICAgICBcImh0dHBzOi8vc3VydmV5anMuaW8vQ29udGVudC9JbWFnZXMvZXhhbXBsZXMvaW1hZ2UtcGlja2VyL3BhbmRhLmpwZ1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICB2YWx1ZTogXCJjYW1lbFwiLFxuICAgICAgICAgICAgaW1hZ2VMaW5rOlxuICAgICAgICAgICAgICBcImh0dHBzOi8vc3VydmV5anMuaW8vQ29udGVudC9JbWFnZXMvZXhhbXBsZXMvaW1hZ2UtcGlja2VyL2NhbWVsLmpwZ1wiXG4gICAgICAgICAgfVxuICAgICAgICBdXG4gICAgICB9O1xuICAgIH1cbiAgfTtcblxuICAvKipcbiAgICogTW9kaWZ5IHRoaXMgYXJyYXkgdG8gY2hhbmdlIHRoZSB0b29sYm94IGl0ZW1zIG9yZGVyLlxuICAgKi9cbiAgcHVibGljIGdldCBvcmRlcmVkUXVlc3Rpb25zKCkge1xuICAgIHJldHVybiB0aGlzLl9vcmRlcmVkUXVlc3Rpb25zO1xuICB9XG4gIHB1YmxpYyBzZXQgb3JkZXJlZFF1ZXN0aW9ucyhxdWVzdGlvbnMpIHtcbiAgICB0aGlzLl9vcmRlcmVkUXVlc3Rpb25zID0gcXVlc3Rpb25zO1xuICAgIHRoaXMucmVvcmRlckl0ZW1zKCk7XG4gIH1cbiAgLyoqXG4gICAqIFRoZSBtYXhpbXVtIG51bWJlciBvZiBjb3BpZWQgdG9vbGJveCBpdGVtcy4gSWYgYW4gdXNlciBhZGRpbmcgY29waWVkSXRlbU1heENvdW50ICsgMSBpdGVtLCB0aGUgZmlyc3QgYWRkZWQgaXRlbSB3aWxsIGJlIHJlbW92ZWQuXG4gICAqL1xuICBwdWJsaWMgY29waWVkSXRlbU1heENvdW50OiBudW1iZXIgPSAzO1xuICBwcml2YXRlIGFsbG93RXhwYW5kTXVsdGlwbGVDYXRlZ29yaWVzVmFsdWU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHJpdmF0ZSBrZWVwQWxsQ2F0ZWdvcmllc0V4cGFuZGVkVmFsdWU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHJpdmF0ZSBpdGVtc1ZhbHVlOiBBcnJheTxJUXVlc3Rpb25Ub29sYm94SXRlbT4gPSBbXTtcblxuICBrb0l0ZW1zID0ga28ub2JzZXJ2YWJsZUFycmF5KCk7XG4gIGtvQ2F0ZWdvcmllcyA9IGtvLm9ic2VydmFibGVBcnJheSgpO1xuICBrb0FjdGl2ZUNhdGVnb3J5ID0ga28ub2JzZXJ2YWJsZShcIlwiKTtcbiAga29IYXNDYXRlZ29yaWVzID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG4gIGtvQ2FuQ29sbGFwc2VDYXRlZ29yaWVzID0ga28ub2JzZXJ2YWJsZSh0cnVlKTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHN1cHBvcnRlZFF1ZXN0aW9uczogQXJyYXk8c3RyaW5nPiA9IG51bGwpIHtcbiAgICB0aGlzLmNyZWF0ZURlZmF1bHRJdGVtcyhzdXBwb3J0ZWRRdWVzdGlvbnMpO1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICB0aGlzLmtvQWN0aXZlQ2F0ZWdvcnkuc3Vic2NyaWJlKGZ1bmN0aW9uKG5ld1ZhbHVlKSB7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNlbGYua29DYXRlZ29yaWVzKCkubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGNhdGVnb3J5ID0gc2VsZi5rb0NhdGVnb3JpZXMoKVtpXTtcbiAgICAgICAgKDxhbnk+Y2F0ZWdvcnkpLmtvQ29sbGFwc2VkKCg8YW55PmNhdGVnb3J5KS5uYW1lICE9PSBuZXdWYWx1ZSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbiAgLyoqXG4gICAqIFRoZSBBcnJheSBvZiBUb29sYm94IGl0ZW1zIGFzIFRleHQgSlNPTi5cbiAgICovXG4gIHB1YmxpYyBnZXQganNvblRleHQoKSB7XG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHRoaXMuaXRlbXNWYWx1ZSk7XG4gIH1cbiAgcHVibGljIHNldCBqc29uVGV4dCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5pdGVtc1ZhbHVlID0gdmFsdWUgPyBKU09OLnBhcnNlKHZhbHVlKSA6IFtdO1xuICAgIHRoaXMub25JdGVtc0NoYW5nZWQoKTtcbiAgfVxuICAvKipcbiAgICogVGhlIEFycmF5IG9mIGNvcGllZCBUb29sYm94IGl0ZW1zIGFzIFRleHQgSlNPTi5cbiAgICovXG4gIHB1YmxpYyBnZXQgY29waWVkSnNvblRleHQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkodGhpcy5jb3BpZWRJdGVtcyk7XG4gIH1cbiAgcHVibGljIHNldCBjb3BpZWRKc29uVGV4dCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdmFyIG5ld0l0ZW1zID0gdmFsdWUgPyBKU09OLnBhcnNlKHZhbHVlKSA6IFtdO1xuICAgIHRoaXMuY2xlYXJDb3BpZWRJdGVtcygpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbmV3SXRlbXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIG5ld0l0ZW1zW2ldLmlzQ29waWVkID0gdHJ1ZTtcbiAgICAgIHRoaXMuYWRkSXRlbShuZXdJdGVtc1tpXSk7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBUaGUgQXJyYXkgb2YgVG9vbGJveCBpdGVtcy5cbiAgICovXG4gIHB1YmxpYyBnZXQgaXRlbXMoKTogQXJyYXk8SVF1ZXN0aW9uVG9vbGJveEl0ZW0+IHtcbiAgICByZXR1cm4gdGhpcy5pdGVtc1ZhbHVlO1xuICB9XG4gIHB1YmxpYyBnZXQgaXRlbU5hbWVzKCk6IEFycmF5PHN0cmluZz4ge1xuICAgIHZhciByZXMgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuaXRlbXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHJlcy5wdXNoKHRoaXMuaXRlbXNbaV0ubmFtZSk7XG4gICAgfVxuICAgIHJldHVybiByZXM7XG4gIH1cbiAgLyoqXG4gICAqIFRoZSBBcnJheSBvZiBjb3BpZWQgVG9vbGJveCBpdGVtc1xuICAgKi9cbiAgcHVibGljIGdldCBjb3BpZWRJdGVtcygpOiBBcnJheTxJUXVlc3Rpb25Ub29sYm94SXRlbT4ge1xuICAgIHZhciByZXN1bHQgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuaXRlbXNWYWx1ZS5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHRoaXMuaXRlbXNWYWx1ZVtpXS5pc0NvcGllZCkgcmVzdWx0LnB1c2godGhpcy5pdGVtc1ZhbHVlW2ldKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuICAvKipcbiAgICogQWRkIHRvb2xib3ggaXRlbXMgaW50byB0aGUgVG9vbGJveFxuICAgKiBAcGFyYW0gaXRlbXMgdGhlIGxpc3Qgb2YgbmV3IGl0ZW1zXG4gICAqIEBwYXJhbSBjbGVhckFsbCBzZXQgaXQgdG8gdHJ1ZSB0byBjbGVhciBhbGwgcHJldmlvdXMgaXRlbXMuXG4gICAqL1xuICBwdWJsaWMgYWRkSXRlbXMoXG4gICAgaXRlbXM6IEFycmF5PElRdWVzdGlvblRvb2xib3hJdGVtPixcbiAgICBjbGVhckFsbDogYm9vbGVhbiA9IGZhbHNlXG4gICkge1xuICAgIGlmIChjbGVhckFsbCkge1xuICAgICAgdGhpcy5jbGVhckl0ZW1zKCk7XG4gICAgfVxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaXRlbXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMuaXRlbXNWYWx1ZS5wdXNoKGl0ZW1zW2ldKTtcbiAgICB9XG4gICAgdGhpcy5vbkl0ZW1zQ2hhbmdlZCgpO1xuICB9XG4gIC8qKlxuICAgKiBBZGQgYSBjb3BpZWQgUXVlc3Rpb24gaW50byBUb29sYm94XG4gICAqIEBwYXJhbSBxdWVzdGlvbiBhIGNvcGllZCBTdXJ2ZXkuUXVlc3Rpb25cbiAgICogQHBhcmFtIG9wdGlvbnMgYSBqc29uIG9iamVjdCB0aGF0IGFsbG93cyB5b3UgdG8gb3ZlcnJpZGUgcXVlc3Rpb24gcHJvcGVydGllcy4gQXR0cmlidXRlcyBhcmU6IG5hbWUsIHRpdGxlLCB0b29sdGlwLCBpc0NvcGllZCwgaWNvbk5hbWUsIGpzb24gYW5kIGNhdGVnb3J5LlxuICAgKi9cbiAgcHVibGljIGFkZENvcGllZEl0ZW0ocXVlc3Rpb246IFN1cnZleS5RdWVzdGlvbiwgb3B0aW9uczogYW55ID0gbnVsbCkge1xuICAgIGlmICghb3B0aW9ucykgb3B0aW9ucyA9IHt9O1xuICAgIHZhciBuYW1lID0gISFvcHRpb25zLm5hbWUgPyBvcHRpb25zLm5hbWUgOiBxdWVzdGlvbi5uYW1lO1xuICAgIHZhciB0aXRsZSA9ICEhb3B0aW9ucy50aXRsZSA/IG9wdGlvbnMudGl0bGUgOiBuYW1lO1xuICAgIHZhciB0b29sdGlwID0gISFvcHRpb25zLnRvb2x0aXAgPyBvcHRpb25zLnRvb2x0aXAgOiB0aXRsZTtcbiAgICB2YXIgaXRlbSA9IHtcbiAgICAgIG5hbWU6IG5hbWUsXG4gICAgICB0aXRsZTogdGl0bGUsXG4gICAgICB0b29sdGlwOiB0b29sdGlwLFxuICAgICAgaXNDb3BpZWQ6IG9wdGlvbnMuaXNDb3BpZWQgIT09IGZhbHNlLFxuICAgICAgaWNvbk5hbWU6ICEhb3B0aW9ucy5pY29uTmFtZSA/IG9wdGlvbnMuaWNvbk5hbWUgOiBcImljb24tZGVmYXVsdFwiLFxuICAgICAganNvbjogISFvcHRpb25zLmpzb24gPyBvcHRpb25zLmpzb24gOiB0aGlzLmdldFF1ZXN0aW9uSlNPTihxdWVzdGlvbiksXG4gICAgICBjYXRlZ29yeTogISFvcHRpb25zLmNhdGVnb3J5ID8gb3B0aW9ucy5jYXRlZ29yeSA6IFwiXCJcbiAgICB9O1xuICAgIGlmICh0aGlzLnJlcGxhY2VJdGVtKGl0ZW0pKSByZXR1cm47XG4gICAgdmFyIGNvcGllZCA9IHRoaXMuY29waWVkSXRlbXM7XG4gICAgaWYgKHRoaXMuY29waWVkSXRlbU1heENvdW50ID4gMCAmJiBjb3BpZWQubGVuZ3RoID09IHRoaXMuY29waWVkSXRlbU1heENvdW50KVxuICAgICAgdGhpcy5yZW1vdmVJdGVtKGNvcGllZFt0aGlzLmNvcGllZEl0ZW1NYXhDb3VudCAtIDFdLm5hbWUpO1xuICAgIHRoaXMuYWRkSXRlbShpdGVtKTtcbiAgfVxuICAvKipcbiAgICogQWRkIGEgdG9vbGJveCBpdGVtXG4gICAqIEBwYXJhbSBpdGVtIHRoZSB0b29sYm94IGl0ZW0gZGVzY3JpcHRpb25cbiAgICogQHNlZSBJUXVlc3Rpb25Ub29sYm94SXRlbVxuICAgKi9cbiAgcHVibGljIGFkZEl0ZW0oaXRlbTogSVF1ZXN0aW9uVG9vbGJveEl0ZW0pIHtcbiAgICB0aGlzLmNvcnJlY3RJdGVtKGl0ZW0pO1xuICAgIHRoaXMuaXRlbXNWYWx1ZS5wdXNoKGl0ZW0pO1xuICAgIHRoaXMub25JdGVtc0NoYW5nZWQoKTtcbiAgfVxuICBwcml2YXRlIGNvcnJlY3RJdGVtKGl0ZW06IElRdWVzdGlvblRvb2xib3hJdGVtKSB7XG4gICAgaWYgKCFpdGVtLnRpdGxlKSBpdGVtLnRpdGxlID0gaXRlbS5uYW1lO1xuICAgIGlmICghaXRlbS50b29sdGlwKSBpdGVtLnRvb2x0aXAgPSBpdGVtLnRpdGxlO1xuICB9XG4gIC8qKlxuICAgKiBBZGQgYSBuZXcgdG9vbGJveCBpdGVtLCBhZGQgZGVsZXRlIHRoZSBvbGQgaXRlbSB3aXRoIHRoZSBzYW1lIG5hbWVcbiAgICogQHBhcmFtIGl0ZW0gdGhlIHRvb2xib3ggaXRlbSBkZXNjcmlwdGlvblxuICAgKiBAc2VlIElRdWVzdGlvblRvb2xib3hJdGVtXG4gICAqL1xuICBwdWJsaWMgcmVwbGFjZUl0ZW0oaXRlbTogSVF1ZXN0aW9uVG9vbGJveEl0ZW0pOiBib29sZWFuIHtcbiAgICB0aGlzLmNvcnJlY3RJdGVtKGl0ZW0pO1xuICAgIHZhciBpbmRleCA9IHRoaXMuaW5kZXhPZihpdGVtLm5hbWUpO1xuICAgIGlmIChpbmRleCA8IDApIHJldHVybjtcbiAgICB0aGlzLml0ZW1zVmFsdWVbaW5kZXhdID0gaXRlbTtcbiAgICB0aGlzLm9uSXRlbXNDaGFuZ2VkKCk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgLyoqXG4gICAqIFJlbW92ZSBhIHRvb2xib3ggaXRlbSBieSBpdCdzIG5hbWVcbiAgICogQHBhcmFtIG5hbWUgdG9vbGJveCBpdGVtIG5hbWVcbiAgICogQHNlZSBJUXVlc3Rpb25Ub29sYm94SXRlbVxuICAgKi9cbiAgcHVibGljIHJlbW92ZUl0ZW0obmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgdmFyIGluZGV4ID0gdGhpcy5pbmRleE9mKG5hbWUpO1xuICAgIGlmIChpbmRleCA8IDApIHJldHVybiBmYWxzZTtcbiAgICB0aGlzLml0ZW1zVmFsdWUuc3BsaWNlKGluZGV4LCAxKTtcbiAgICB0aGlzLm9uSXRlbXNDaGFuZ2VkKCk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgLyoqXG4gICAqIFJlbW92ZSBhbGwgdG9vbGJveCBpdGVtcy5cbiAgICovXG4gIHB1YmxpYyBjbGVhckl0ZW1zKCkge1xuICAgIHRoaXMuaXRlbXNWYWx1ZSA9IFtdO1xuICAgIHRoaXMub25JdGVtc0NoYW5nZWQoKTtcbiAgfVxuICAvKipcbiAgICogUmVtb3ZlIGFsbCBjb3BpZWQgdG9vbGJveCBpdGVtcy5cbiAgICovXG4gIHB1YmxpYyBjbGVhckNvcGllZEl0ZW1zKCkge1xuICAgIHZhciByZW1vdmVkSXRlbXMgPSB0aGlzLmNvcGllZEl0ZW1zO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmVtb3ZlZEl0ZW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICB0aGlzLnJlbW92ZUl0ZW0ocmVtb3ZlZEl0ZW1zW2ldLm5hbWUpO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogUmV0dXJucyB0b29sYm94IGl0ZW0gYnkgaXRzIG5hbWUuIFJldHVybnMgbnVsbCBpZiB0aGVyZSBpcyBubyB0b29sYm94IGl0ZW0gd2l0aCB0aGlzIG5hbWVcbiAgICogQHBhcmFtIG5hbWVcbiAgICovXG4gIHB1YmxpYyBnZXRJdGVtQnlOYW1lKG5hbWU6IHN0cmluZyk6IElRdWVzdGlvblRvb2xib3hJdGVtIHtcbiAgICB2YXIgaW5kZXggPSB0aGlzLmluZGV4T2YobmFtZSk7XG4gICAgcmV0dXJuIGluZGV4ID4gLTEgPyB0aGlzLml0ZW1zVmFsdWVbaW5kZXhdIDogbnVsbDtcbiAgfVxuICAvKipcbiAgICogU2V0IGl0IHRvIHRydWUsIHRvIGFsbG93IGVuZC11c2VyIHRvIGV4cGFuZCBtb3JlIHRoYW4gb25lIGNhdGVnb3J5LiBUaGVyZSB3aWxsIG5vIGFjdGl2ZSBjYXRlZ29yeSBpbiB0aGlzIGNhc2VcbiAgICogQHNlZSBhY3RpdmVDYXRlZ29yeVxuICAgKi9cbiAgcHVibGljIGdldCBhbGxvd0V4cGFuZE11bHRpcGxlQ2F0ZWdvcmllcygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5hbGxvd0V4cGFuZE11bHRpcGxlQ2F0ZWdvcmllc1ZhbHVlO1xuICB9XG4gIHB1YmxpYyBzZXQgYWxsb3dFeHBhbmRNdWx0aXBsZUNhdGVnb3JpZXModmFsOiBib29sZWFuKSB7XG4gICAgdGhpcy5hbGxvd0V4cGFuZE11bHRpcGxlQ2F0ZWdvcmllc1ZhbHVlID0gdmFsO1xuICAgIHRoaXMudXBkYXRlQ2F0ZWdvcmllc1N0YXRlKCk7XG4gIH1cbiAgLyoqXG4gICAqIFNldCBpdCB0byB0cnVlIHRvIGV4cGFuZCBhbGwgY2F0ZWdvcmllcyBhbmQgaGlkZSBleHBhbmQvY29sbGFwc2UgY2F0ZWdvcnkgYnV0dG9uc1xuICAgKi9cbiAgcHVibGljIGdldCBrZWVwQWxsQ2F0ZWdvcmllc0V4cGFuZGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmtlZXBBbGxDYXRlZ29yaWVzRXhwYW5kZWRWYWx1ZTtcbiAgfVxuICBwdWJsaWMgc2V0IGtlZXBBbGxDYXRlZ29yaWVzRXhwYW5kZWQodmFsOiBib29sZWFuKSB7XG4gICAgdGhpcy5rZWVwQWxsQ2F0ZWdvcmllc0V4cGFuZGVkVmFsdWUgPSB2YWw7XG4gICAgdGhpcy5rb0NhbkNvbGxhcHNlQ2F0ZWdvcmllcyghdGhpcy5rZWVwQWxsQ2F0ZWdvcmllc0V4cGFuZGVkKTtcbiAgICB0aGlzLnVwZGF0ZUNhdGVnb3JpZXNTdGF0ZSgpO1xuICB9XG4gIHByaXZhdGUgdXBkYXRlQ2F0ZWdvcmllc1N0YXRlKCkge1xuICAgIHZhciBub0FjdGl2ZSA9XG4gICAgICB0aGlzLmFsbG93RXhwYW5kTXVsdGlwbGVDYXRlZ29yaWVzIHx8IHRoaXMua2VlcEFsbENhdGVnb3JpZXNFeHBhbmRlZDtcbiAgICBpZiAobm9BY3RpdmUpIHtcbiAgICAgIHRoaXMuYWN0aXZlQ2F0ZWdvcnkgPSBcIlwiO1xuICAgICAgaWYgKHRoaXMua2VlcEFsbENhdGVnb3JpZXNFeHBhbmRlZCkge1xuICAgICAgICB0aGlzLmV4cGFuZEFsbENhdGVnb3JpZXMoKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHRoaXMua29DYXRlZ29yaWVzKCkubGVuZ3RoID4gMCkge1xuICAgICAgICB0aGlzLmFjdGl2ZUNhdGVnb3J5ID0gKDxhbnk+dGhpcy5rb0NhdGVnb3JpZXMoKVswXSkubmFtZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2hhbmdlIHRoZSBjYXRlZ29yeSBvZiB0aGUgdG9vbGJveCBpdGVtXG4gICAqIEBwYXJhbSBuYW1lIHRoZSB0b29sYm94IGl0ZW0gbmFtZVxuICAgKiBAcGFyYW0gY2F0ZWdvcnkgbmV3IGNhdGVnb3J5IG5hbWVcbiAgICovXG4gIHB1YmxpYyBjaGFuZ2VDYXRlZ29yeShuYW1lOiBzdHJpbmcsIGNhdGVnb3J5OiBzdHJpbmcpIHtcbiAgICB0aGlzLmNoYW5nZUNhdGVnb3JpZXMoW3sgbmFtZTogbmFtZSwgY2F0ZWdvcnk6IGNhdGVnb3J5IH1dKTtcbiAgfVxuICAvKipcbiAgICogQ2hhbmdlIGNhdGVnb3JpZXMgZm9yIHNldmVyYWwgdG9vbGJveCBpdGVtcy5cbiAgICogQHBhcmFtIGNoYW5nZWRJdGVtcyB0aGUgYXJyYXkgb2Ygb2JqZWN0cyB7bmFtZTogXCJ5b3VyIHRvb2xib3ggaXRlbSBuYW1lXCIsIGNhdGVnb3J5OiBcIm5ldyBjYXRlZ29yeSBuYW1lXCJ9XG4gICAqL1xuICBwdWJsaWMgY2hhbmdlQ2F0ZWdvcmllcyhjaGFuZ2VkSXRlbXM6IEFycmF5PGFueT4pIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNoYW5nZWRJdGVtcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGl0ZW0gPSBjaGFuZ2VkSXRlbXNbaV07XG4gICAgICB2YXIgdG9vbGJveEl0ZW0gPSB0aGlzLmdldEl0ZW1CeU5hbWUoaXRlbS5uYW1lKTtcbiAgICAgIGlmICh0b29sYm94SXRlbSkge1xuICAgICAgICB0b29sYm94SXRlbS5jYXRlZ29yeSA9IGl0ZW0uY2F0ZWdvcnk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMub25JdGVtc0NoYW5nZWQoKTtcbiAgfVxuICAvKipcbiAgICogU2V0IGFuZCBnZXQgYW5kIGFjdGl2ZSBjYXRlZ29yeS4gVGhpcyBwcm9wZXJ0eSBkb2Vzbid0IHdvcmsgaWYgYWxsb3dFeHBhbmRNdWx0aXBsZUNhdGVnb3JpZXMgaXMgdHJ1ZS4gSXRzIGRlZmF1bHQgdmFsdWUgaXMgZW1wdHkuXG4gICAqIEBzZWUgYWxsb3dFeHBhbmRNdWx0aXBsZUNhdGVnb3JpZXNcbiAgICogQHNlZSBleHBhbmRDYXRlZ29yeVxuICAgKiBAc2VlIGNvbGxhcHNlQ2F0ZWdvcnlcbiAgICovXG4gIHB1YmxpYyBnZXQgYWN0aXZlQ2F0ZWdvcnkoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5rb0FjdGl2ZUNhdGVnb3J5KCk7XG4gIH1cbiAgcHVibGljIHNldCBhY3RpdmVDYXRlZ29yeSh2YWw6IHN0cmluZykge1xuICAgIHRoaXMua29BY3RpdmVDYXRlZ29yeSh2YWwpO1xuICB9XG4gIHByaXZhdGUgZG9DYXRlZ29yeUNsaWNrKGNhdGVnb3J5TmFtZTogc3RyaW5nKSB7XG4gICAgaWYgKHRoaXMua2VlcEFsbENhdGVnb3JpZXNFeHBhbmRlZCkgcmV0dXJuO1xuICAgIGlmICh0aGlzLmFsbG93RXhwYW5kTXVsdGlwbGVDYXRlZ29yaWVzKSB7XG4gICAgICB2YXIgY2F0ZWdvcnkgPSB0aGlzLmdldENhdGVnb3J5QnlOYW1lKGNhdGVnb3J5TmFtZSk7XG4gICAgICBpZiAoY2F0ZWdvcnkpIHtcbiAgICAgICAgY2F0ZWdvcnkua29Db2xsYXBzZWQoIWNhdGVnb3J5LmtvQ29sbGFwc2VkKCkpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmFjdGl2ZUNhdGVnb3J5ID0gY2F0ZWdvcnlOYW1lO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogRXhwYW5kIGEgY2F0ZWdvcnkgYnkgaXRzIG5hbWUuIElmIGFsbG93RXhwYW5kTXVsdGlwbGVDYXRlZ29yaWVzIGlzIGZhbHNlIChkZWZhdWx0IHZhbHVlKSwgYWxsIG90aGVyIGNhdGVnb3JpZXMgYmVjb21lIGNvbGxhcHNlZFxuICAgKiBAcGFyYW0gY2F0ZWdvcnlOYW1lIHRoZSBjYXRlZ29yeSBuYW1lXG4gICAqIEBzZWUgYWxsb3dFeHBhbmRNdWx0aXBsZUNhdGVnb3JpZXNcbiAgICogQHNlZSBjb2xsYXBzZUNhdGVnb3J5XG4gICAqL1xuICBwdWJsaWMgZXhwYW5kQ2F0ZWdvcnkoY2F0ZWdvcnlOYW1lOiBzdHJpbmcpIHtcbiAgICBpZiAodGhpcy5hbGxvd0V4cGFuZE11bHRpcGxlQ2F0ZWdvcmllcykge1xuICAgICAgdmFyIGNhdGVnb3J5ID0gdGhpcy5nZXRDYXRlZ29yeUJ5TmFtZShjYXRlZ29yeU5hbWUpO1xuICAgICAgaWYgKGNhdGVnb3J5KSB7XG4gICAgICAgIGNhdGVnb3J5LmtvQ29sbGFwc2VkKGZhbHNlKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5hY3RpdmVDYXRlZ29yeSA9IGNhdGVnb3J5TmFtZTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIENvbGxhcHNlIGEgY2F0ZWdvcnkgYnkgaXRzIG5hbWUuIElmIGFsbG93RXhwYW5kTXVsdGlwbGVDYXRlZ29yaWVzIGlzIGZhbHNlIChkZWZhdWx0IHZhbHVlKSB0aGlzIGZ1bmN0aW9uIGRvZXMgbm90aGluZ1xuICAgKiBAcGFyYW0gY2F0ZWdvcnlOYW1lIHRoZSBjYXRlZ29yeSBuYW1lXG4gICAqIEBzZWUgYWxsb3dFeHBhbmRNdWx0aXBsZUNhdGVnb3JpZXNcbiAgICovXG4gIHB1YmxpYyBjb2xsYXBzZUNhdGVnb3J5KGNhdGVnb3J5TmFtZTogc3RyaW5nKSB7XG4gICAgaWYgKCF0aGlzLmFsbG93RXhwYW5kTXVsdGlwbGVDYXRlZ29yaWVzKSByZXR1cm47XG4gICAgdmFyIGNhdGVnb3J5ID0gdGhpcy5nZXRDYXRlZ29yeUJ5TmFtZShjYXRlZ29yeU5hbWUpO1xuICAgIGlmIChjYXRlZ29yeSkge1xuICAgICAgY2F0ZWdvcnkua29Db2xsYXBzZWQodHJ1ZSk7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBFeHBhbmQgYWxsIGNhdGVnb3JpZXMuIElmIGFsbG93RXhwYW5kTXVsdGlwbGVDYXRlZ29yaWVzIGlzIGZhbHNlIChkZWZhdWx0IHZhbHVlKSB0aGlzIGZ1bmN0aW9uIGRvZXMgbm90aGluZ1xuICAgKiBAc2VlIGFsbG93RXhwYW5kTXVsdGlwbGVDYXRlZ29yaWVzXG4gICAqL1xuICBwdWJsaWMgZXhwYW5kQWxsQ2F0ZWdvcmllcygpIHtcbiAgICB0aGlzLmV4cGFuZENvbGxhcHNlQWxsQ2F0ZWdvcmllcyhmYWxzZSk7XG4gIH1cbiAgLyoqXG4gICAqIENvbGxhcHNlIGFsbCBjYXRlZ29yaWVzLiBJZiBhbGxvd0V4cGFuZE11bHRpcGxlQ2F0ZWdvcmllcyBpcyBmYWxzZSAoZGVmYXVsdCB2YWx1ZSkgdGhpcyBmdW5jdGlvbiBkb2VzIG5vdGhpbmdcbiAgICogQHNlZSBhbGxvd0V4cGFuZE11bHRpcGxlQ2F0ZWdvcmllc1xuICAgKi9cbiAgcHVibGljIGNvbGxhcHNlQWxsQ2F0ZWdvcmllcygpIHtcbiAgICB0aGlzLmV4cGFuZENvbGxhcHNlQWxsQ2F0ZWdvcmllcyh0cnVlKTtcbiAgfVxuICBwcml2YXRlIGV4cGFuZENvbGxhcHNlQWxsQ2F0ZWdvcmllcyhpc0NvbGxhcHNlZDogYm9vbGVhbikge1xuICAgIHZhciBjYXRlZ29yaWVzID0gdGhpcy5rb0NhdGVnb3JpZXMoKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNhdGVnb3JpZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICg8YW55PmNhdGVnb3JpZXNbaV0pLmtvQ29sbGFwc2VkKGlzQ29sbGFwc2VkKTtcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBnZXRDYXRlZ29yeUJ5TmFtZShjYXRlZ29yeU5hbWU6IHN0cmluZyk6IGFueSB7XG4gICAgdmFyIGNhdGVnb3JpZXMgPSB0aGlzLmtvQ2F0ZWdvcmllcygpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2F0ZWdvcmllcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGNhdGVnb3J5ID0gPGFueT5jYXRlZ29yaWVzW2ldO1xuICAgICAgaWYgKGNhdGVnb3J5Lm5hbWUgPT09IGNhdGVnb3J5TmFtZSkgcmV0dXJuIGNhdGVnb3J5O1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBwcm90ZWN0ZWQgb25JdGVtc0NoYW5nZWQoKSB7XG4gICAgdGhpcy5rb0l0ZW1zKFtdKTtcbiAgICB0aGlzLmtvSXRlbXModGhpcy5pdGVtc1ZhbHVlKTtcbiAgICB2YXIgY2F0ZWdvcmllcyA9IFtdO1xuICAgIHZhciBjYXRlZ29yaWVzSGFzaCA9IHt9O1xuICAgIHZhciBwcmV2QWN0aXZlQ2F0ZWdvcnkgPSB0aGlzLmtvQWN0aXZlQ2F0ZWdvcnkoKTtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLml0ZW1zVmFsdWUubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBpdGVtID0gdGhpcy5pdGVtc1ZhbHVlW2ldO1xuICAgICAgdmFyIGNhdGVnb3J5TmFtZSA9IGl0ZW0uY2F0ZWdvcnlcbiAgICAgICAgPyBpdGVtLmNhdGVnb3J5XG4gICAgICAgIDogZWRpdG9yTG9jYWxpemF0aW9uLmdldFN0cmluZyhcImVkLnRvb2xib3hHZW5lcmFsQ2F0ZWdvcnlcIik7IC8vVE9ET1xuICAgICAgaWYgKCFjYXRlZ29yaWVzSGFzaFtjYXRlZ29yeU5hbWVdKSB7XG4gICAgICAgIHZhciBjYXRlZ29yeSA9IHtcbiAgICAgICAgICBuYW1lOiBjYXRlZ29yeU5hbWUsXG4gICAgICAgICAgaXRlbXM6IFtdLFxuICAgICAgICAgIGtvQ29sbGFwc2VkOiBrby5vYnNlcnZhYmxlKGNhdGVnb3J5TmFtZSAhPT0gcHJldkFjdGl2ZUNhdGVnb3J5KSxcbiAgICAgICAgICBleHBhbmQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgc2VsZi5kb0NhdGVnb3J5Q2xpY2sodGhpcy5uYW1lKTtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIGNhdGVnb3JpZXNIYXNoW2NhdGVnb3J5TmFtZV0gPSBjYXRlZ29yeTtcbiAgICAgICAgY2F0ZWdvcmllcy5wdXNoKGNhdGVnb3J5KTtcbiAgICAgIH1cbiAgICAgIGNhdGVnb3JpZXNIYXNoW2NhdGVnb3J5TmFtZV0uaXRlbXMucHVzaChpdGVtKTtcbiAgICB9XG4gICAgdGhpcy5rb0NhdGVnb3JpZXMoY2F0ZWdvcmllcyk7XG4gICAgaWYgKCF0aGlzLmFsbG93RXhwYW5kTXVsdGlwbGVDYXRlZ29yaWVzKSB7XG4gICAgICBpZiAocHJldkFjdGl2ZUNhdGVnb3J5ICYmIGNhdGVnb3JpZXNIYXNoW3ByZXZBY3RpdmVDYXRlZ29yeV0pIHtcbiAgICAgICAgdGhpcy5rb0FjdGl2ZUNhdGVnb3J5KHByZXZBY3RpdmVDYXRlZ29yeSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmtvQWN0aXZlQ2F0ZWdvcnkoY2F0ZWdvcmllcy5sZW5ndGggPiAwID8gY2F0ZWdvcmllc1swXS5uYW1lIDogXCJcIik7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChjYXRlZ29yaWVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgY2F0ZWdvcmllc1swXS5rb0NvbGxhcHNlZChmYWxzZSk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMua29IYXNDYXRlZ29yaWVzKGNhdGVnb3JpZXMubGVuZ3RoID4gMSk7XG4gIH1cbiAgcHJpdmF0ZSBpbmRleE9mKG5hbWU6IHN0cmluZykge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5pdGVtc1ZhbHVlLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAodGhpcy5pdGVtc1ZhbHVlW2ldLm5hbWUgPT0gbmFtZSkgcmV0dXJuIGk7XG4gICAgfVxuICAgIHJldHVybiAtMTtcbiAgfVxuICBwcml2YXRlIHJlb3JkZXJJdGVtcygpIHtcbiAgICB0aGlzLml0ZW1zVmFsdWUuc29ydCgoaTEsIGkyKSA9PiB7XG4gICAgICB2YXIgaW5kZXgxID0gdGhpcy5fb3JkZXJlZFF1ZXN0aW9ucy5pbmRleE9mKGkxLm5hbWUpO1xuICAgICAgaWYgKGluZGV4MSA9PT0gLTEpIGluZGV4MSA9IE51bWJlci5NQVhfVkFMVUU7XG4gICAgICB2YXIgaW5kZXgyID0gdGhpcy5fb3JkZXJlZFF1ZXN0aW9ucy5pbmRleE9mKGkyLm5hbWUpO1xuICAgICAgaWYgKGluZGV4MiA9PT0gLTEpIGluZGV4MiA9IE51bWJlci5NQVhfVkFMVUU7XG4gICAgICByZXR1cm4gaW5kZXgxIC0gaW5kZXgyO1xuICAgIH0pO1xuICAgIHRoaXMub25JdGVtc0NoYW5nZWQoKTtcbiAgfVxuICBwcml2YXRlIGNyZWF0ZURlZmF1bHRJdGVtcyhzdXBwb3J0ZWRRdWVzdGlvbnM6IEFycmF5PHN0cmluZz4pIHtcbiAgICB0aGlzLmNsZWFySXRlbXMoKTtcbiAgICB2YXIgcXVlc3Rpb25zID0gdGhpcy5nZXRRdWVzdGlvblR5cGVzKHN1cHBvcnRlZFF1ZXN0aW9ucyk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBxdWVzdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBuYW1lID0gcXVlc3Rpb25zW2ldO1xuICAgICAgdmFyIHF1ZXN0aW9uID0gU3VydmV5LkVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLmNyZWF0ZUVsZW1lbnQobmFtZSwgXCJxMVwiKTtcbiAgICAgIGlmICghcXVlc3Rpb24pIHtcbiAgICAgICAgcXVlc3Rpb24gPSBTdXJ2ZXkuU2VyaWFsaXplci5jcmVhdGVDbGFzcyhuYW1lKTtcbiAgICAgIH1cbiAgICAgIHZhciBqc29uID0gdGhpcy5nZXRRdWVzdGlvbkpTT04ocXVlc3Rpb24pO1xuICAgICAgdmFyIHRpdGxlID0gZWRpdG9yTG9jYWxpemF0aW9uLmdldFN0cmluZyhcInF0LlwiICsgbmFtZSk7XG4gICAgICB2YXIgaXRlbSA9IHtcbiAgICAgICAgbmFtZTogbmFtZSxcbiAgICAgICAgaWNvbk5hbWU6IFwiaWNvbi1cIiArIG5hbWUsXG4gICAgICAgIHRpdGxlOiB0aXRsZSxcbiAgICAgICAgdG9vbHRpcDogdGl0bGUsXG4gICAgICAgIGpzb246IGpzb24sXG4gICAgICAgIGlzQ29waWVkOiBmYWxzZSxcbiAgICAgICAgY2F0ZWdvcnk6IFwiXCJcbiAgICAgIH07XG4gICAgICB0aGlzLml0ZW1zVmFsdWUucHVzaChpdGVtKTtcbiAgICB9XG4gICAgdGhpcy5yZWdpc3RlckN1c3RvbVdpZGdldHMoKTtcbiAgICB0aGlzLm9uSXRlbXNDaGFuZ2VkKCk7XG4gIH1cbiAgcHJpdmF0ZSByZWdpc3RlckN1c3RvbVdpZGdldHMoKSB7XG4gICAgdmFyIGluc3QgPSBTdXJ2ZXkuQ3VzdG9tV2lkZ2V0Q29sbGVjdGlvbi5JbnN0YW5jZTtcbiAgICBpZiAoIWluc3QuZ2V0QWN0aXZhdGVkQnkpIHJldHVybjtcbiAgICB2YXIgd2lkZ2V0cyA9IGluc3Qud2lkZ2V0cztcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHdpZGdldHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChpbnN0LmdldEFjdGl2YXRlZEJ5KHdpZGdldHNbaV0ubmFtZSkgIT0gXCJjdXN0b210eXBlXCIpIGNvbnRpbnVlO1xuICAgICAgdmFyIHdpZGdldEpzb24gPSB3aWRnZXRzW2ldLndpZGdldEpzb247XG4gICAgICBpZiAoIXdpZGdldEpzb24ud2lkZ2V0SXNMb2FkZWQgfHwgIXdpZGdldEpzb24ud2lkZ2V0SXNMb2FkZWQoKSkgY29udGludWU7XG4gICAgICB2YXIgaWNvbk5hbWUgPSB3aWRnZXRKc29uLmljb25OYW1lID8gd2lkZ2V0SnNvbi5pY29uTmFtZSA6IFwiaWNvbi1kZWZhdWx0XCI7XG4gICAgICB2YXIgdGl0bGUgPSBlZGl0b3JMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKFwicXQuXCIgKyB3aWRnZXRKc29uLm5hbWUpO1xuICAgICAgaWYgKCF0aXRsZSB8fCB0aXRsZSA9PSB3aWRnZXRKc29uLm5hbWUpIHRpdGxlID0gd2lkZ2V0SnNvbi50aXRsZTtcbiAgICAgIGlmICghdGl0bGUpIHRpdGxlID0gd2lkZ2V0SnNvbi5uYW1lO1xuICAgICAgdmFyIGpzb24gPSB3aWRnZXRKc29uLmRlZmF1bHRKU09OID8gd2lkZ2V0SnNvbi5kZWZhdWx0SlNPTiA6IHt9O1xuICAgICAgaWYgKCFqc29uLnR5cGUpIHtcbiAgICAgICAganNvbi50eXBlID0gd2lkZ2V0SnNvbi5uYW1lO1xuICAgICAgfVxuICAgICAgdmFyIGl0ZW0gPSB7XG4gICAgICAgIG5hbWU6IHdpZGdldEpzb24ubmFtZSxcbiAgICAgICAgaWNvbk5hbWU6IGljb25OYW1lLFxuICAgICAgICB0aXRsZTogdGl0bGUsXG4gICAgICAgIHRvb2x0aXA6IHRpdGxlLFxuICAgICAgICBqc29uOiBqc29uLFxuICAgICAgICBpc0NvcGllZDogZmFsc2UsXG4gICAgICAgIGNhdGVnb3J5OiBcIlwiXG4gICAgICB9O1xuICAgICAgdGhpcy5pdGVtc1ZhbHVlLnB1c2goaXRlbSk7XG4gICAgfVxuICB9XG4gIHByaXZhdGUgZ2V0UXVlc3Rpb25KU09OKHF1ZXN0aW9uOiBhbnkpOiBhbnkge1xuICAgIHZhciBqc29uID0gbmV3IFN1cnZleS5Kc29uT2JqZWN0KCkudG9Kc29uT2JqZWN0KHF1ZXN0aW9uKTtcbiAgICBqc29uLnR5cGUgPSBxdWVzdGlvbi5nZXRUeXBlKCk7XG4gICAgaWYgKCEhdGhpcy5fcXVlc3Rpb25EZWZhdWx0U2V0dGluZ3NbanNvbi50eXBlXSkge1xuICAgICAgdmFyIGRlZmF1bHRTZXR0aW5ncyA9IHRoaXMuX3F1ZXN0aW9uRGVmYXVsdFNldHRpbmdzW2pzb24udHlwZV0oKTtcbiAgICAgIGZvciAodmFyIGtleSBpbiBkZWZhdWx0U2V0dGluZ3MpIHtcbiAgICAgICAganNvbltrZXldID0gZGVmYXVsdFNldHRpbmdzW2tleV07XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBqc29uO1xuICB9XG4gIHByaXZhdGUgZ2V0UXVlc3Rpb25UeXBlcyhzdXBwb3J0ZWRRdWVzdGlvbnM6IEFycmF5PHN0cmluZz4pOiBzdHJpbmdbXSB7XG4gICAgdmFyIGFsbFR5cGVzID0gU3VydmV5LkVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLmdldEFsbFR5cGVzKCk7XG4gICAgaWYgKCFzdXBwb3J0ZWRRdWVzdGlvbnMgfHwgc3VwcG9ydGVkUXVlc3Rpb25zLmxlbmd0aCA9PSAwKVxuICAgICAgc3VwcG9ydGVkUXVlc3Rpb25zID0gYWxsVHlwZXM7XG4gICAgdmFyIHF1ZXN0aW9ucyA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5vcmRlcmVkUXVlc3Rpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgbmFtZSA9IHRoaXMub3JkZXJlZFF1ZXN0aW9uc1tpXTtcbiAgICAgIGlmIChzdXBwb3J0ZWRRdWVzdGlvbnMuaW5kZXhPZihuYW1lKSA+IC0xICYmIGFsbFR5cGVzLmluZGV4T2YobmFtZSkgPiAtMSlcbiAgICAgICAgcXVlc3Rpb25zLnB1c2gobmFtZSk7XG4gICAgfVxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3VwcG9ydGVkUXVlc3Rpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgbmFtZSA9IHN1cHBvcnRlZFF1ZXN0aW9uc1tpXTtcbiAgICAgIGlmIChcbiAgICAgICAgcXVlc3Rpb25zLmluZGV4T2Yoc3VwcG9ydGVkUXVlc3Rpb25zW2ldKSA8IDAgJiZcbiAgICAgICAgYWxsVHlwZXMuaW5kZXhPZihuYW1lKSA+IC0xXG4gICAgICApXG4gICAgICAgIHF1ZXN0aW9ucy5wdXNoKG5hbWUpO1xuICAgIH1cbiAgICByZXR1cm4gcXVlc3Rpb25zO1xuICB9XG59XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvcXVlc3Rpb25Ub29sYm94LnRzIiwiaW1wb3J0ICogYXMga28gZnJvbSBcImtub2Nrb3V0XCI7XG5pbXBvcnQgeyBlZGl0b3JMb2NhbGl6YXRpb24gfSBmcm9tIFwiLi9lZGl0b3JMb2NhbGl6YXRpb25cIjtcbmltcG9ydCB7IFN1cnZleUhlbHBlciwgT2JqVHlwZSB9IGZyb20gXCIuL3N1cnZleUhlbHBlclwiO1xuaW1wb3J0ICogYXMgU3VydmV5IGZyb20gXCJzdXJ2ZXkta25vY2tvdXRcIjtcblxuZXhwb3J0IGNsYXNzIFF1ZXN0aW9uQ29udmVydGVyIHtcbiAgcHVibGljIHN0YXRpYyBjb252ZXJ0SW5mbyA9IHt9O1xuICBwdWJsaWMgc3RhdGljIGFkZENvbnZlcnRJbmZvKGNsYXNzTmFtZTogc3RyaW5nLCBjb252ZXJ0VG9DbGFzc05hbWU6IHN0cmluZykge1xuICAgIGlmICghUXVlc3Rpb25Db252ZXJ0ZXIuY29udmVydEluZm9bY2xhc3NOYW1lXSkge1xuICAgICAgUXVlc3Rpb25Db252ZXJ0ZXIuY29udmVydEluZm9bY2xhc3NOYW1lXSA9IFtdO1xuICAgIH1cbiAgICBRdWVzdGlvbkNvbnZlcnRlci5jb252ZXJ0SW5mb1tjbGFzc05hbWVdLnB1c2goY29udmVydFRvQ2xhc3NOYW1lKTtcbiAgfVxuICBwdWJsaWMgc3RhdGljIGdldENvbnZlcnRUb0NsYXNzZXMoXG4gICAgY2xhc3NOYW1lOiBzdHJpbmcsXG4gICAgYXZhaWxhYmxlVHlwZXM6IEFycmF5PHN0cmluZz4gPSBudWxsXG4gICk6IEFycmF5PHN0cmluZz4ge1xuICAgIHZhciByZXMgPSBRdWVzdGlvbkNvbnZlcnRlci5jb252ZXJ0SW5mb1tjbGFzc05hbWVdO1xuICAgIGlmICghcmVzKSByZXR1cm4gW107XG4gICAgaWYgKFxuICAgICAgISFhdmFpbGFibGVUeXBlcyAmJlxuICAgICAgQXJyYXkuaXNBcnJheShhdmFpbGFibGVUeXBlcykgJiZcbiAgICAgIGF2YWlsYWJsZVR5cGVzLmxlbmd0aCA+IDBcbiAgICApIHtcbiAgICAgIGZvciAodmFyIGkgPSByZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgaWYgKGF2YWlsYWJsZVR5cGVzLmluZGV4T2YocmVzW2ldKSA8IDApIHtcbiAgICAgICAgICByZXMuc3BsaWNlKGksIDEpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiAhIXJlcyA/IHJlcyA6IFtdO1xuICB9XG4gIHB1YmxpYyBzdGF0aWMgY29udmVydE9iamVjdChcbiAgICBvYmo6IFN1cnZleS5RdWVzdGlvbixcbiAgICBjb252ZXJ0VG9DbGFzczogc3RyaW5nXG4gICk6IFN1cnZleS5RdWVzdGlvbiB7XG4gICAgaWYgKCFvYmogfHwgIW9iai5wYXJlbnQgfHwgY29udmVydFRvQ2xhc3MgPT0gb2JqLmdldFR5cGUoKSkgcmV0dXJuIG51bGw7XG4gICAgdmFyIG5ld1F1ZXN0aW9uID0gU3VydmV5LlF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS5jcmVhdGVRdWVzdGlvbihcbiAgICAgIGNvbnZlcnRUb0NsYXNzLFxuICAgICAgb2JqLm5hbWVcbiAgICApO1xuICAgIHZhciBqc29uT2JqID0gbmV3IFN1cnZleS5Kc29uT2JqZWN0KCk7XG4gICAgdmFyIGpzb24gPSBqc29uT2JqLnRvSnNvbk9iamVjdChvYmopO1xuICAgIGpzb25PYmoudG9PYmplY3QoanNvbiwgbmV3UXVlc3Rpb24pO1xuICAgIHZhciBwYW5lbCA9IDxTdXJ2ZXkuUGFuZWxNb2RlbEJhc2U+b2JqLnBhcmVudDtcbiAgICB2YXIgaW5kZXggPSBwYW5lbC5lbGVtZW50cy5pbmRleE9mKG9iaik7XG4gICAgcGFuZWwucmVtb3ZlRWxlbWVudChvYmopO1xuICAgIHBhbmVsLmFkZEVsZW1lbnQobmV3UXVlc3Rpb24sIGluZGV4KTtcbiAgICByZXR1cm4gPFN1cnZleS5RdWVzdGlvbj5uZXdRdWVzdGlvbjtcbiAgfVxufVxuXG5mdW5jdGlvbiBjcmVhdGVEZWZhdWx0UXVlc3Rpb25Db252ZXJ0ZXJJdGVtcygpIHtcbiAgdmFyIGNsYXNzZXMgPSBTdXJ2ZXkuU2VyaWFsaXplci5nZXRDaGlsZHJlbkNsYXNzZXMoXCJzZWxlY3RiYXNlXCIsIHRydWUpO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGNsYXNzZXMubGVuZ3RoOyBpKyspIHtcbiAgICBmb3IgKHZhciBqID0gMDsgaiA8IGNsYXNzZXMubGVuZ3RoOyBqKyspIHtcbiAgICAgIGlmIChpID09IGopIGNvbnRpbnVlO1xuICAgICAgUXVlc3Rpb25Db252ZXJ0ZXIuYWRkQ29udmVydEluZm8oY2xhc3Nlc1tpXS5uYW1lLCBjbGFzc2VzW2pdLm5hbWUpO1xuICAgIH1cbiAgfVxuICBRdWVzdGlvbkNvbnZlcnRlci5hZGRDb252ZXJ0SW5mbyhcInRleHRcIiwgXCJjb21tZW50XCIpO1xuICBRdWVzdGlvbkNvbnZlcnRlci5hZGRDb252ZXJ0SW5mbyhcImNvbW1lbnRcIiwgXCJ0ZXh0XCIpO1xufVxuXG5jcmVhdGVEZWZhdWx0UXVlc3Rpb25Db252ZXJ0ZXJJdGVtcygpO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL3F1ZXN0aW9uY29udmVydGVyLnRzIiwiaW1wb3J0ICogYXMga28gZnJvbSBcImtub2Nrb3V0XCI7XG5pbXBvcnQgKiBhcyBTdXJ2ZXkgZnJvbSBcInN1cnZleS1rbm9ja291dFwiO1xuaW1wb3J0IHsgU3VydmV5SlNPTjUgfSBmcm9tIFwiLi9qc29uNVwiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5RW1iZWRpbmdXaW5kb3cge1xuICBwcml2YXRlIGpzb25WYWx1ZTogYW55O1xuICBwcml2YXRlIHN1cnZleUVtYmVkaW5nSGVhZDogQWNlQWpheC5FZGl0b3I7XG4gIHByaXZhdGUgc3VydmV5RW1iZWRpbmdKYXZhOiBBY2VBamF4LkVkaXRvcjtcbiAgcHJpdmF0ZSBzdXJ2ZXlFbWJlZGluZ0JvZHk6IEFjZUFqYXguRWRpdG9yO1xuICBrb0hlYWRUZXh0OiBhbnk7XG4gIGtvQm9keVRleHQ6IGFueTtcbiAga29KYXZhVGV4dDogYW55O1xuICBwdWJsaWMgc3VydmV5SWQ6IHN0cmluZyA9IG51bGw7XG4gIHB1YmxpYyBzdXJ2ZXlQb3N0SWQ6IHN0cmluZyA9IG51bGw7XG4gIHB1YmxpYyBnZW5lcmF0ZVZhbGlkSlNPTjogYm9vbGVhbiA9IGZhbHNlO1xuICBwdWJsaWMgc3VydmV5SlNWZXJzaW9uOiBzdHJpbmcgPSBTdXJ2ZXkuVmVyc2lvbjtcbiAgcHVibGljIHN1cnZleUNETlBhdGg6IHN0cmluZyA9IFwiaHR0cHM6Ly9zdXJ2ZXlqcy5henVyZWVkZ2UubmV0L1wiO1xuICBrb1Nob3dBc1dpbmRvdzogYW55O1xuICBrb1NjcmlwdFVzaW5nOiBhbnk7XG4gIGtvSGFzSWRzOiBhbnk7XG4gIGtvTG9hZFN1cnZleTogYW55O1xuICBrb0xpYnJhcnlWZXJzaW9uOiBhbnk7XG4gIGtvVmlzaWJsZUh0bWw6IGFueTtcbiAgcHJpdmF0ZSBwbGF0Zm9ybVN1cnZleUpTUHJlZml4ID0ge1xuICAgIGFuZ3VsYXI6IFwiYW5ndWxhclwiLFxuICAgIGpxdWVyeTogXCJqcXVlcnlcIixcbiAgICBrbm9ja291dDogXCJrb1wiLFxuICAgIHJlYWN0OiBcInJlYWN0XCIsXG4gICAgdnVlOiBcInZ1ZVwiXG4gIH07XG4gIHByaXZhdGUgcGxhdGZvcm1KU29uUGFnZSA9IHtcbiAgICBhbmd1bGFyOlxuICAgICAgXCJAQ29tcG9uZW50KHtcXG4gIHNlbGVjdG9yOiAnbmctYXBwJyxcXG4gICAgICAgIHRlbXBsYXRlOiBcXG4gICAgICAgIDxkaXYgaWQ9J3N1cnZleUVsZW1lbnQnPjwvZGl2PlxcXCIsXFxufSlcXG5leHBvcnQgY2xhc3MgQXBwQ29tcG9uZW50IHtcXG4gICAgbmdPbkluaXQoKSB7XFxuICAgICAgICB2YXIgc3VydmV5ID0gbmV3IFN1cnZleS5Nb2RlbChzdXJ2ZXlKU09OKTtcXG4gICAgICAgIHN1cnZleS5vbkNvbXBsZXRlLmFkZChzZW5kRGF0YVRvU2VydmVyKTtcXG4gICAgICAgU3VydmV5LlN1cnZleU5HLnJlbmRlcihcXFwic3VydmV5RWxlbWVudFxcXCIsIHsgbW9kZWw6IHN1cnZleSB9KTtcXG4gICAgfVxcbn1cIixcbiAgICBqcXVlcnk6XG4gICAgICAndmFyIHN1cnZleSA9IG5ldyBTdXJ2ZXkuTW9kZWwoc3VydmV5SlNPTik7XFxuJChcIiNzdXJ2ZXlDb250YWluZXJcIikuU3VydmV5KHtcXG4gICAgbW9kZWw6IHN1cnZleSxcXG4gICAgb25Db21wbGV0ZTogc2VuZERhdGFUb1NlcnZlclxcbn0pOycsXG4gICAga25vY2tvdXQ6XG4gICAgICAndmFyIHN1cnZleSA9IG5ldyBTdXJ2ZXkuTW9kZWwoc3VydmV5SlNPTiwgXCJzdXJ2ZXlDb250YWluZXJcIik7XFxuc3VydmV5Lm9uQ29tcGxldGUuYWRkKHNlbmREYXRhVG9TZXJ2ZXIpOycsXG4gICAgcmVhY3Q6XG4gICAgICAnUmVhY3RET00ucmVuZGVyKFxcbiAgICA8U3VydmV5LlN1cnZleSBqc29uPXsgc3VydmV5SlNPTiB9IG9uQ29tcGxldGU9eyBzZW5kRGF0YVRvU2VydmVyIH0gLz4sIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwic3VydmV5Q29udGFpbmVyXCIpKTsnLFxuICAgIHZ1ZTpcbiAgICAgIFwidmFyIHN1cnZleSA9IG5ldyBTdXJ2ZXkuTW9kZWwoc3VydmV5SlNPTik7XFxubmV3IFZ1ZSh7IGVsOiAnI3N1cnZleUNvbnRhaW5lcicsIGRhdGE6IHsgc3VydmV5OiBzdXJ2ZXkgfSB9KTtcIlxuICB9O1xuICBwcml2YXRlIHBsYXRmb3JtSlNvbldpbmRvdyA9IHtcbiAgICBhbmd1bGFyOlxuICAgICAgXCJAQ29tcG9uZW50KHtcXG4gIHNlbGVjdG9yOiAnbmctYXBwJyxcXG4gICAgICAgIHRlbXBsYXRlOiBcXG4gICAgICAgIDxkaXYgaWQ9J3N1cnZleUVsZW1lbnQnPjwvZGl2PlxcXCIsXFxufSlcXG5leHBvcnQgY2xhc3MgQXBwQ29tcG9uZW50IHtcXG4gICAgbmdPbkluaXQoKSB7XFxuICAgICAgICB2YXIgc3VydmV5ID0gbmV3IFN1cnZleS5Nb2RlbChzdXJ2ZXlKU09OKTtcXG4gICAgICAgIHN1cnZleS5vbkNvbXBsZXRlLmFkZChzZW5kRGF0YVRvU2VydmVyKTtcXG4gICAgICAgU3VydmV5LlN1cnZleVdpbmRvd05HLnJlbmRlcihcXFwic3VydmV5RWxlbWVudFxcXCIsIHsgbW9kZWw6IHN1cnZleSB9KTtcXG4gICAgfVxcbn1cIixcbiAgICBqcXVlcnk6XG4gICAgICAndmFyIHN1cnZleSA9IG5ldyBTdXJ2ZXkuTW9kZWwoc3VydmV5SlNPTik7XFxuJChcIiNzdXJ2ZXlDb250YWluZXJcIikuU3VydmV5V2luZG93KHtcXG4gICAgbW9kZWw6IHN1cnZleSxcXG4gICAgb25Db21wbGV0ZTogc2VuZERhdGFUb1NlcnZlclxcbn0pOycsXG4gICAga25vY2tvdXQ6XG4gICAgICBcInZhciBzdXJ2ZXkgPSBuZXcgU3VydmV5Lk1vZGVsKHN1cnZleUpTT04pO1xcbnN1cnZleVdpbmRvdy5zaG93KCk7XFxuc3VydmV5Lm9uQ29tcGxldGUuYWRkKHNlbmREYXRhVG9TZXJ2ZXIpO1wiLFxuICAgIHJlYWN0OlxuICAgICAgJ1JlYWN0RE9NLnJlbmRlcihcXG4gICAgPFN1cnZleS5TdXJ2ZXlXaW5kb3cganNvbj17IHN1cnZleUpTT04gfSBvbkNvbXBsZXRlPXsgc2VuZERhdGFUb1NlcnZlciB9IC8+LCBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInN1cnZleUNvbnRhaW5lclwiKSk7JyxcbiAgICB2dWU6IFwiXCJcbiAgfTtcbiAgcHJpdmF0ZSBwbGF0Zm9ybUh0bWxvblBhZ2UgPSB7XG4gICAgYW5ndWxhcjogXCI8bmctYXBwPjwvbmctYXBwPlwiLFxuICAgIGpxdWVyeTogJzxkaXYgaWQ9XCJzdXJ2ZXlDb250YWluZXJcIj48L2Rpdj4nLFxuICAgIGtub2Nrb3V0OiAnPGRpdiBpZD1cInN1cnZleUNvbnRhaW5lclwiPjwvZGl2PicsXG4gICAgcmVhY3Q6ICc8ZGl2IGlkPVwic3VydmV5Q29udGFpbmVyXCI+PC9kaXY+JyxcbiAgICB2dWU6ICc8ZGl2IGlkPVwic3VydmV5Q29udGFpbmVyXCI+PHN1cnZleSA6c3VydmV5PVwic3VydmV5XCI+PC9zdXJ2ZXk+PC9kaXY+J1xuICB9O1xuICBwcml2YXRlIHBsYXRmb3JtSHRtbG9uV2luZG93ID0ge1xuICAgIGFuZ3VsYXI6IFwiPG5nLWFwcD48L25nLWFwcD5cIixcbiAgICBqcXVlcnk6ICc8ZGl2IGlkPVwic3VydmV5Q29udGFpbmVyXCI+PC9kaXY+JyxcbiAgICBrbm9ja291dDogXCJcIixcbiAgICByZWFjdDogJzxkaXYgaWQ9XCJzdXJ2ZXlDb250YWluZXJcIj48L2Rpdj4nLFxuICAgIHZ1ZTpcbiAgICAgIFwiPGRpdiBpZD0nc3VydmV5Q29udGFpbmVyJz48c3VydmV5LXdpbmRvdyA6c3VydmV5PSdzdXJ2ZXknPjwvc3VydmV5LXdpbmRvdz48L2Rpdj5cIlxuICB9O1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgdGhpcy5rb0xpYnJhcnlWZXJzaW9uID0ga28ub2JzZXJ2YWJsZShcImpxdWVyeVwiKTtcbiAgICB0aGlzLmtvU2hvd0FzV2luZG93ID0ga28ub2JzZXJ2YWJsZShcInBhZ2VcIik7XG4gICAgdGhpcy5rb1NjcmlwdFVzaW5nID0ga28ub2JzZXJ2YWJsZShcImJvb3RzdHJhcFwiKTtcbiAgICB0aGlzLmtvSGFzSWRzID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG4gICAgdGhpcy5rb0xvYWRTdXJ2ZXkgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblxuICAgIHRoaXMua29IZWFkVGV4dCA9IGtvLm9ic2VydmFibGUoXCJcIik7XG4gICAgdGhpcy5rb0phdmFUZXh0ID0ga28ub2JzZXJ2YWJsZShcIlwiKTtcbiAgICB0aGlzLmtvQm9keVRleHQgPSBrby5vYnNlcnZhYmxlKFwiXCIpO1xuXG4gICAgdGhpcy5rb1Zpc2libGVIdG1sID0ga28uY29tcHV0ZWQoZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICBzZWxmLmtvU2hvd0FzV2luZG93KCkgPT0gXCJwYWdlXCIgfHxcbiAgICAgICAgc2VsZi5wbGF0Zm9ybUh0bWxvbldpbmRvd1tzZWxmLmtvTGlicmFyeVZlcnNpb24oKV0gIT0gXCJcIlxuICAgICAgKTtcbiAgICB9KTtcbiAgICB0aGlzLmtvTGlicmFyeVZlcnNpb24uc3Vic2NyaWJlKGZ1bmN0aW9uKG5ld1ZhbHVlKSB7XG4gICAgICBzZWxmLnNldEhlYWRUZXh0KCk7XG4gICAgICBzZWxmLnNldEphdmFUZXN0KCk7XG4gICAgICBzZWxmLnNldEJvZHlUZXh0KCk7XG4gICAgfSk7XG4gICAgdGhpcy5rb1Nob3dBc1dpbmRvdy5zdWJzY3JpYmUoZnVuY3Rpb24obmV3VmFsdWUpIHtcbiAgICAgIHNlbGYuc2V0SmF2YVRlc3QoKTtcbiAgICAgIHNlbGYuc2V0Qm9keVRleHQoKTtcbiAgICB9KTtcbiAgICB0aGlzLmtvU2NyaXB0VXNpbmcuc3Vic2NyaWJlKGZ1bmN0aW9uKG5ld1ZhbHVlKSB7XG4gICAgICBzZWxmLnNldEhlYWRUZXh0KCk7XG4gICAgICBzZWxmLnNldEphdmFUZXN0KCk7XG4gICAgfSk7XG4gICAgdGhpcy5rb0xvYWRTdXJ2ZXkuc3Vic2NyaWJlKGZ1bmN0aW9uKG5ld1ZhbHVlKSB7XG4gICAgICBzZWxmLnNldEphdmFUZXN0KCk7XG4gICAgfSk7XG4gICAgdGhpcy5zdXJ2ZXlFbWJlZGluZ0hlYWQgPSBudWxsO1xuICB9XG4gIHB1YmxpYyBnZXQganNvbigpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLmpzb25WYWx1ZTtcbiAgfVxuICBwdWJsaWMgc2V0IGpzb24odmFsdWU6IGFueSkge1xuICAgIHRoaXMuanNvblZhbHVlID0gdmFsdWU7XG4gIH1cbiAgcHVibGljIGdldCBoYXNBY2VFZGl0b3IoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHR5cGVvZiBhY2UgIT09IFwidW5kZWZpbmVkXCI7XG4gIH1cbiAgcHVibGljIHNob3coKSB7XG4gICAgaWYgKHRoaXMuaGFzQWNlRWRpdG9yICYmIHRoaXMuc3VydmV5RW1iZWRpbmdIZWFkID09IG51bGwpIHtcbiAgICAgIHRoaXMuc3VydmV5RW1iZWRpbmdIZWFkID0gdGhpcy5jcmVhdGVFZGl0b3IoXCJzdXJ2ZXlFbWJlZGluZ0hlYWRcIik7XG4gICAgICB0aGlzLnN1cnZleUVtYmVkaW5nQm9keSA9IHRoaXMuY3JlYXRlRWRpdG9yKFwic3VydmV5RW1iZWRpbmdCb2R5XCIpO1xuICAgICAgdGhpcy5zdXJ2ZXlFbWJlZGluZ0phdmEgPSB0aGlzLmNyZWF0ZUVkaXRvcihcInN1cnZleUVtYmVkaW5nSmF2YVwiKTtcbiAgICB9XG4gICAgdGhpcy5rb0hhc0lkcyh0aGlzLnN1cnZleUlkICYmIHRoaXMuc3VydmV5UG9zdElkKTtcbiAgICB0aGlzLnNldEJvZHlUZXh0KCk7XG4gICAgdGhpcy5zZXRIZWFkVGV4dCgpO1xuICAgIHRoaXMuc2V0SmF2YVRlc3QoKTtcbiAgfVxuICBwcml2YXRlIHNldEJvZHlUZXh0KCkge1xuICAgIHRoaXMuc2V0VGV4dFRvRWRpdG9yKFxuICAgICAgdGhpcy5zdXJ2ZXlFbWJlZGluZ0JvZHksXG4gICAgICB0aGlzLmtvQm9keVRleHQsXG4gICAgICB0aGlzLnBsYXRmb3JtSHRtbG9uUGFnZVt0aGlzLmtvTGlicmFyeVZlcnNpb24oKV1cbiAgICApO1xuICB9XG4gIHByaXZhdGUgZ2V0IGdldENETlBhdGgoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5zdXJ2ZXlDRE5QYXRoICsgdGhpcy5zdXJ2ZXlKU1ZlcnNpb24gKyBcIi9cIjtcbiAgfVxuICBwcml2YXRlIHNldEhlYWRUZXh0KCkge1xuICAgIHZhciBzdHIgPVxuICAgICAgXCI8IS0tIFlvdXIgcGxhdGZvcm0gKFwiICsgdGhpcy5rb0xpYnJhcnlWZXJzaW9uKCkgKyBcIikgc2NyaXB0cy4gLS0+XFxuXCI7XG4gICAgaWYgKHRoaXMua29TY3JpcHRVc2luZygpICE9IFwiYm9vdHN0cmFwXCIpIHtcbiAgICAgIHN0ciArPVxuICAgICAgICAnXFxuPGxpbmsgaHJlZj1cIicgK1xuICAgICAgICB0aGlzLmdldENETlBhdGggK1xuICAgICAgICAnc3VydmV5LmNzc1wiIHR5cGU9XCJ0ZXh0L2Nzc1wiIHJlbD1cInN0eWxlc2hlZXRcIiAvPic7XG4gICAgfVxuICAgIHN0ciArPVxuICAgICAgJ1xcbjxzY3JpcHQgc3JjPVwiJyArXG4gICAgICB0aGlzLmdldENETlBhdGggK1xuICAgICAgXCJzdXJ2ZXkuXCIgK1xuICAgICAgdGhpcy5wbGF0Zm9ybVN1cnZleUpTUHJlZml4W3RoaXMua29MaWJyYXJ5VmVyc2lvbigpXSArXG4gICAgICAnLm1pbi5qc1wiPjwvc2NyaXB0Pic7XG5cbiAgICB0aGlzLnNldFRleHRUb0VkaXRvcih0aGlzLnN1cnZleUVtYmVkaW5nSGVhZCwgdGhpcy5rb0hlYWRUZXh0LCBzdHIpO1xuICB9XG4gIHByaXZhdGUgc2V0SmF2YVRlc3QoKSB7XG4gICAgdGhpcy5zZXRUZXh0VG9FZGl0b3IoXG4gICAgICB0aGlzLnN1cnZleUVtYmVkaW5nSmF2YSxcbiAgICAgIHRoaXMua29KYXZhVGV4dCxcbiAgICAgIHRoaXMuZ2V0SmF2YVRleHQoKVxuICAgICk7XG4gIH1cbiAgcHJpdmF0ZSBjcmVhdGVFZGl0b3IoZWxlbWVudE5hbWU6IHN0cmluZyk6IEFjZUFqYXguRWRpdG9yIHtcbiAgICB2YXIgZWRpdG9yID0gYWNlLmVkaXQoZWxlbWVudE5hbWUpO1xuICAgIGVkaXRvci5zZXRUaGVtZShcImFjZS90aGVtZS9tb25va2FpXCIpO1xuICAgIGVkaXRvci5zZXNzaW9uLnNldE1vZGUoXCJhY2UvbW9kZS9qc29uXCIpO1xuICAgIGVkaXRvci5zZXRTaG93UHJpbnRNYXJnaW4oZmFsc2UpO1xuICAgIGVkaXRvci5yZW5kZXJlci5zZXRTaG93R3V0dGVyKGZhbHNlKTtcbiAgICBlZGl0b3Iuc2V0UmVhZE9ubHkodHJ1ZSk7XG4gICAgcmV0dXJuIGVkaXRvcjtcbiAgfVxuICBwcml2YXRlIGdldEphdmFUZXh0KCk6IHN0cmluZyB7XG4gICAgdmFyIGlzT25QYWdlID0gdGhpcy5rb1Nob3dBc1dpbmRvdygpID09IFwicGFnZVwiO1xuICAgIHZhciBzdHIgPSB0aGlzLmdldFNhdmVGdW5jKCkgKyBcIlxcblxcblwiO1xuICAgIHN0ciArPSBpc09uUGFnZVxuICAgICAgPyB0aGlzLnBsYXRmb3JtSlNvblBhZ2VbdGhpcy5rb0xpYnJhcnlWZXJzaW9uKCldXG4gICAgICA6IHRoaXMucGxhdGZvcm1KU29uV2luZG93W3RoaXMua29MaWJyYXJ5VmVyc2lvbigpXTtcbiAgICB2YXIganNvblRleHQgPSBcInZhciBzdXJ2ZXlKU09OID0gXCIgKyB0aGlzLmdldEpzb25UZXh0KCkgKyBcIlxcblxcblwiO1xuICAgIHJldHVybiB0aGlzLmdldFNldENzcygpICsgXCJcXG5cIiArIGpzb25UZXh0ICsgc3RyO1xuICB9XG4gIHByaXZhdGUgZ2V0U2V0Q3NzKCk6IHN0cmluZyB7XG4gICAgaWYgKHRoaXMua29TY3JpcHRVc2luZygpICE9IFwiYm9vdHN0cmFwXCIpIHJldHVybiBcIlwiO1xuICAgIHJldHVybiBcIlN1cnZleS5TdHlsZXNNYW5hZ2VyLmFwcGx5VGhlbWUoXFxcImJvb3RzdHJhcFxcXCIpO1xcblwiO1xuICB9XG4gIHByaXZhdGUgZ2V0U2F2ZUZ1bmMoKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIFwiZnVuY3Rpb24gc2VuZERhdGFUb1NlcnZlcihzdXJ2ZXkpIHtcXG5cIiArIHRoaXMuZ2V0U2F2ZUZ1bmNDb2RlKCkgKyBcIlxcbn1cIlxuICAgICk7XG4gIH1cbiAgcHJpdmF0ZSBnZXRTYXZlRnVuY0NvZGUoKSB7XG4gICAgaWYgKHRoaXMua29IYXNJZHMoKSlcbiAgICAgIHJldHVybiBcIiAgICBzdXJ2ZXkuc2VuZFJlc3VsdCgnXCIgKyB0aGlzLnN1cnZleVBvc3RJZCArIFwiJyk7XCI7XG4gICAgcmV0dXJuIFwiICAgIC8vc2VuZCBBamF4IHJlcXVlc3QgdG8geW91ciB3ZWIgc2VydmVyLlxcbiAgICBhbGVydChcXFwiVGhlIHJlc3VsdHMgYXJlOlxcXCIgKyBKU09OLnN0cmluZ2lmeShzdXJ2ZXkuZGF0YSkpO1wiO1xuICB9XG4gIHByaXZhdGUgZ2V0SnNvblRleHQoKTogc3RyaW5nIHtcbiAgICBpZiAodGhpcy5rb0hhc0lkcygpICYmIHRoaXMua29Mb2FkU3VydmV5KCkpIHtcbiAgICAgIHJldHVybiBcInsgc3VydmV5SWQ6ICdcIiArIHRoaXMuc3VydmV5SWQgKyBcIid9XCI7XG4gICAgfVxuICAgIGlmICh0aGlzLmdlbmVyYXRlVmFsaWRKU09OKSByZXR1cm4gSlNPTi5zdHJpbmdpZnkodGhpcy5qc29uKTtcbiAgICByZXR1cm4gbmV3IFN1cnZleUpTT041KCkuc3RyaW5naWZ5KHRoaXMuanNvbik7XG4gIH1cbiAgcHJpdmF0ZSBzZXRUZXh0VG9FZGl0b3IoZWRpdG9yOiBBY2VBamF4LkVkaXRvciwga29UZXh0OiBhbnksIHRleHQ6IHN0cmluZykge1xuICAgIGlmIChlZGl0b3IpIGVkaXRvci5zZXRWYWx1ZSh0ZXh0KTtcbiAgICBpZiAoa29UZXh0KSBrb1RleHQodGV4dCk7XG4gIH1cbn1cblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9zdXJ2ZXlFbWJlZGluZ1dpbmRvdy50cyIsImltcG9ydCAqIGFzIGtvIGZyb20gXCJrbm9ja291dFwiO1xuaW1wb3J0IHsgU3VydmV5SGVscGVyLCBPYmpUeXBlIH0gZnJvbSBcIi4vc3VydmV5SGVscGVyXCI7XG5pbXBvcnQgeyBlZGl0b3JMb2NhbGl6YXRpb24gfSBmcm9tIFwiLi9lZGl0b3JMb2NhbGl6YXRpb25cIjtcbmltcG9ydCAqIGFzIFN1cnZleSBmcm9tIFwic3VydmV5LWtub2Nrb3V0XCI7XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlPYmplY3RJdGVtIHtcbiAgcHVibGljIHZhbHVlOiBTdXJ2ZXkuQmFzZTtcbiAgcHVibGljIHRleHQ6IGFueTtcbiAgcHVibGljIGxldmVsOiBudW1iZXIgPSAwO1xufVxuXG5leHBvcnQgY2xhc3MgU3VydmV5T2JqZWN0cyB7XG4gIHB1YmxpYyBzdGF0aWMgaW50ZW5kOiBzdHJpbmcgPSBcIi5cIjtcbiAgc3VydmV5VmFsdWU6IFN1cnZleS5TdXJ2ZXk7XG4gIHB1YmxpYyBnZXRJdGVtVGV4dENhbGxiYWNrOiAob2JqOiBTdXJ2ZXkuQmFzZSwgdGV4dDogc3RyaW5nKSA9PiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIGtvT2JqZWN0czogYW55LFxuICAgIHB1YmxpYyBrb1NlbGVjdGVkOiBhbnksXG4gICAgcHJpdmF0ZSBnZXRPYmplY3REaXNwbGF5TmFtZTogKG9iajogU3VydmV5LkJhc2UpID0+IHN0cmluZyA9IG51bGxcbiAgKSB7fVxuICBwdWJsaWMgZ2V0IHN1cnZleSgpOiBTdXJ2ZXkuU3VydmV5IHtcbiAgICByZXR1cm4gdGhpcy5zdXJ2ZXlWYWx1ZTtcbiAgfVxuICBwdWJsaWMgc2V0IHN1cnZleSh2YWx1ZTogU3VydmV5LlN1cnZleSkge1xuICAgIGlmICh0aGlzLnN1cnZleSA9PSB2YWx1ZSkgcmV0dXJuO1xuICAgIHRoaXMuc3VydmV5VmFsdWUgPSB2YWx1ZTtcbiAgICB0aGlzLnJlYnVpbGQoKTtcbiAgfVxuICBwdWJsaWMgYWRkUGFnZShwYWdlOiBTdXJ2ZXkuUGFnZU1vZGVsKSB7XG4gICAgdGhpcy5hZGRFbGVtZW50KHBhZ2UsIG51bGwpO1xuICB9XG4gIHB1YmxpYyBhZGRFbGVtZW50KGVsZW1lbnQ6IGFueSwgcGFyZW50OiBhbnkpIHtcbiAgICB2YXIgcGFyZW50SW5kZXggPSBwYXJlbnQgIT0gbnVsbCA/IHRoaXMuZ2V0SXRlbUluZGV4KHBhcmVudCkgOiAwO1xuICAgIGlmIChwYXJlbnRJbmRleCA8IDApIHJldHVybjtcbiAgICB2YXIgZWxlbWVudHMgPVxuICAgICAgcGFyZW50ICE9IG51bGwgPyB0aGlzLmdldEVsZW1lbnRzKHBhcmVudCkgOiB0aGlzLnN1cnZleS5wYWdlcztcbiAgICB2YXIgZWxlbWVudEluZGV4ID0gZWxlbWVudHMuaW5kZXhPZihlbGVtZW50KTtcbiAgICB2YXIgbmV3SW5kZXggPSBlbGVtZW50SW5kZXggKyAxICsgcGFyZW50SW5kZXg7XG4gICAgaWYgKGVsZW1lbnRJbmRleCA+IDApIHtcbiAgICAgIHZhciBwcmV2RWxlbWVudCA9IGVsZW1lbnRzW2VsZW1lbnRJbmRleCAtIDFdO1xuICAgICAgbmV3SW5kZXggPVxuICAgICAgICB0aGlzLmdldEl0ZW1JbmRleChwcmV2RWxlbWVudCkgK1xuICAgICAgICB0aGlzLmdldEFsbEVsZW1lbnRDb3VudChwcmV2RWxlbWVudCkgK1xuICAgICAgICAxO1xuICAgIH1cbiAgICB2YXIgaXRlbSA9IHRoaXMuY3JlYXRlSXRlbShlbGVtZW50LCB0aGlzLmtvT2JqZWN0cygpW3BhcmVudEluZGV4XSk7XG4gICAgdGhpcy5hZGRJdGVtKGl0ZW0sIG5ld0luZGV4KTtcbiAgICB2YXIgb2JqcyA9IFtdO1xuICAgIHRoaXMuYnVpbGRFbGVtZW50cyhvYmpzLCB0aGlzLmdldEVsZW1lbnRzKGVsZW1lbnQpLCBpdGVtKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG9ianMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMua29PYmplY3RzLnNwbGljZShuZXdJbmRleCArIDEgKyBpLCAwLCBvYmpzW2ldKTtcbiAgICB9XG4gICAgdGhpcy5rb1NlbGVjdGVkKGl0ZW0pO1xuICB9XG4gIHB1YmxpYyBzZWxlY3RPYmplY3Qob2JqOiBTdXJ2ZXkuQmFzZSkge1xuICAgIHZhciBvYmpzID0gdGhpcy5rb09iamVjdHMoKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG9ianMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChvYmpzW2ldLnZhbHVlID09IG9iaikge1xuICAgICAgICB0aGlzLmtvU2VsZWN0ZWQob2Jqc1tpXSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcHVibGljIGdldFNlbGVjdGVkT2JqZWN0UGFnZShvYmo6IFN1cnZleS5CYXNlID0gbnVsbCk6IFN1cnZleS5QYWdlIHtcbiAgICBpZiAoIXRoaXMuc3VydmV5KSByZXR1cm4gbnVsbDtcbiAgICBpZiAoIW9iaikge1xuICAgICAgaWYgKCF0aGlzLmtvU2VsZWN0ZWQoKSkgcmV0dXJuO1xuICAgICAgb2JqID0gdGhpcy5rb1NlbGVjdGVkKCkudmFsdWU7XG4gICAgfVxuICAgIHZhciBvYmpzID0gdGhpcy5rb09iamVjdHMoKTtcbiAgICB2YXIgaW5kZXggPSB0aGlzLmdldEl0ZW1JbmRleChvYmopO1xuICAgIHdoaWxlIChpbmRleCA+IDApIHtcbiAgICAgIHZhciBpdGVtID0gb2Jqc1tpbmRleF07XG4gICAgICBpZiAoaXRlbS5sZXZlbCA9PSAxKSByZXR1cm4gaXRlbS52YWx1ZTtcbiAgICAgIGluZGV4LS07XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHB1YmxpYyByZW1vdmVPYmplY3Qob2JqOiBTdXJ2ZXkuQmFzZSkge1xuICAgIHZhciBpbmRleCA9IHRoaXMuZ2V0SXRlbUluZGV4KG9iaik7XG4gICAgaWYgKGluZGV4IDwgMCkgcmV0dXJuO1xuICAgIHZhciBjb3VudFRvUmVtb3ZlID0gMSArIHRoaXMuZ2V0QWxsRWxlbWVudENvdW50KG9iaik7XG4gICAgdGhpcy5rb09iamVjdHMuc3BsaWNlKGluZGV4LCBjb3VudFRvUmVtb3ZlKTtcbiAgfVxuICBwdWJsaWMgbmFtZUNoYW5nZWQob2JqOiBTdXJ2ZXkuQmFzZSkge1xuICAgIHZhciBpbmRleCA9IHRoaXMuZ2V0SXRlbUluZGV4KG9iaik7XG4gICAgaWYgKGluZGV4IDwgMCkgcmV0dXJuO1xuICAgIHRoaXMua29PYmplY3RzKClbaW5kZXhdLnRleHQodGhpcy5nZXRUZXh0KHRoaXMua29PYmplY3RzKClbaW5kZXhdKSk7XG4gIH1cbiAgcHVibGljIHNlbGVjdE5leHRRdWVzdGlvbihpc1VwOiBib29sZWFuKSB7XG4gICAgdmFyIHF1ZXN0aW9uID0gdGhpcy5nZXRTZWxlY3RlZFF1ZXN0aW9uKCk7XG4gICAgdmFyIGl0ZW1JbmRleCA9IHRoaXMuZ2V0SXRlbUluZGV4KHF1ZXN0aW9uKTtcbiAgICBpZiAoaXRlbUluZGV4IDwgMCkgcmV0dXJuIHF1ZXN0aW9uO1xuICAgIHZhciBvYmpzID0gdGhpcy5rb09iamVjdHMoKTtcbiAgICB2YXIgbmV3SXRlbUluZGV4ID0gaXRlbUluZGV4ICsgKGlzVXAgPyAtMSA6IDEpO1xuICAgIGlmIChcbiAgICAgIG5ld0l0ZW1JbmRleCA8IG9ianMubGVuZ3RoICYmXG4gICAgICBTdXJ2ZXlIZWxwZXIuZ2V0T2JqZWN0VHlwZShvYmpzW25ld0l0ZW1JbmRleF0udmFsdWUpID09IE9ialR5cGUuUXVlc3Rpb25cbiAgICApIHtcbiAgICAgIGl0ZW1JbmRleCA9IG5ld0l0ZW1JbmRleDtcbiAgICB9IGVsc2Uge1xuICAgICAgbmV3SXRlbUluZGV4ID0gaXRlbUluZGV4O1xuICAgICAgd2hpbGUgKFxuICAgICAgICBuZXdJdGVtSW5kZXggPCBvYmpzLmxlbmd0aCAmJlxuICAgICAgICBTdXJ2ZXlIZWxwZXIuZ2V0T2JqZWN0VHlwZShvYmpzW25ld0l0ZW1JbmRleF0udmFsdWUpID09IE9ialR5cGUuUXVlc3Rpb25cbiAgICAgICkge1xuICAgICAgICBpdGVtSW5kZXggPSBuZXdJdGVtSW5kZXg7XG4gICAgICAgIG5ld0l0ZW1JbmRleCArPSBpc1VwID8gMSA6IC0xO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLmtvU2VsZWN0ZWQob2Jqc1tpdGVtSW5kZXhdKTtcbiAgfVxuICBwcml2YXRlIGdldEFsbEVsZW1lbnRDb3VudChlbGVtZW50OiBhbnkpIHtcbiAgICB2YXIgZWxlbWVudHMgPSB0aGlzLmdldEVsZW1lbnRzKGVsZW1lbnQpO1xuICAgIHZhciByZXMgPSAwO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZWxlbWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHJlcyArPSAxICsgdGhpcy5nZXRBbGxFbGVtZW50Q291bnQoZWxlbWVudHNbaV0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzO1xuICB9XG4gIHByaXZhdGUgZ2V0U2VsZWN0ZWRRdWVzdGlvbigpOiBTdXJ2ZXkuUXVlc3Rpb24ge1xuICAgIGlmICghdGhpcy5rb1NlbGVjdGVkKCkpIHJldHVybiBudWxsO1xuICAgIHZhciBvYmogPSB0aGlzLmtvU2VsZWN0ZWQoKS52YWx1ZTtcbiAgICBpZiAoIW9iaikgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIFN1cnZleUhlbHBlci5nZXRPYmplY3RUeXBlKG9iaikgPT0gT2JqVHlwZS5RdWVzdGlvblxuICAgICAgPyA8U3VydmV5LlF1ZXN0aW9uPm9ialxuICAgICAgOiBudWxsO1xuICB9XG4gIHByaXZhdGUgYWRkSXRlbShpdGVtOiBTdXJ2ZXlPYmplY3RJdGVtLCBpbmRleDogbnVtYmVyKSB7XG4gICAgaWYgKGluZGV4ID4gdGhpcy5rb09iamVjdHMoKS5sZW5ndGgpIHtcbiAgICAgIHRoaXMua29PYmplY3RzLnB1c2goaXRlbSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMua29PYmplY3RzLnNwbGljZShpbmRleCwgMCwgaXRlbSk7XG4gICAgfVxuICB9XG4gIHByaXZhdGUgcmVidWlsZCgpIHtcbiAgICB2YXIgb2JqcyA9IFtdO1xuICAgIGlmICh0aGlzLnN1cnZleSA9PSBudWxsKSB7XG4gICAgICB0aGlzLmtvT2JqZWN0cyhvYmpzKTtcbiAgICAgIHRoaXMuc2VsZWN0T2JqZWN0KG51bGwpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgcm9vdCA9IHRoaXMuY3JlYXRlSXRlbSh0aGlzLnN1cnZleSwgbnVsbCk7XG4gICAgb2Jqcy5wdXNoKHJvb3QpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5zdXJ2ZXkucGFnZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBwYWdlID0gPFN1cnZleS5QYWdlPnRoaXMuc3VydmV5LnBhZ2VzW2ldO1xuICAgICAgdmFyIHBhZ2VJdGVtID0gdGhpcy5jcmVhdGVJdGVtKHBhZ2UsIHJvb3QpO1xuICAgICAgb2Jqcy5wdXNoKHBhZ2VJdGVtKTtcbiAgICAgIHRoaXMuYnVpbGRFbGVtZW50cyhvYmpzLCB0aGlzLmdldEVsZW1lbnRzKHBhZ2UpLCBwYWdlSXRlbSk7XG4gICAgfVxuICAgIHRoaXMua29PYmplY3RzKG9ianMpO1xuICAgIHRoaXMuc2VsZWN0T2JqZWN0KHRoaXMuc3VydmV5KTtcbiAgfVxuICBwcml2YXRlIGdldEVsZW1lbnRzKGVsZW1lbnQ6IGFueSk6IEFycmF5PGFueT4ge1xuICAgIHJldHVybiBTdXJ2ZXlIZWxwZXIuZ2V0RWxlbWVudHMoZWxlbWVudCk7XG4gIH1cbiAgcHJpdmF0ZSBidWlsZEVsZW1lbnRzKFxuICAgIG9ianM6IEFycmF5PGFueT4sXG4gICAgZWxlbWVudHM6IEFycmF5PGFueT4sXG4gICAgcGFyZW50SXRlbTogU3VydmV5T2JqZWN0SXRlbVxuICApIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVsZW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgZWwgPSBlbGVtZW50c1tpXTtcbiAgICAgIHZhciBpdGVtID0gdGhpcy5jcmVhdGVJdGVtKDxTdXJ2ZXkuQmFzZT5lbCwgcGFyZW50SXRlbSk7XG4gICAgICBvYmpzLnB1c2goaXRlbSk7XG4gICAgICB0aGlzLmJ1aWxkRWxlbWVudHMob2JqcywgdGhpcy5nZXRFbGVtZW50cyhlbCksIGl0ZW0pO1xuICAgIH1cbiAgfVxuICBwcml2YXRlIGNyZWF0ZUl0ZW0odmFsdWU6IFN1cnZleS5CYXNlLCBwYXJlbnQ6IFN1cnZleU9iamVjdEl0ZW0pIHtcbiAgICB2YXIgaXRlbSA9IG5ldyBTdXJ2ZXlPYmplY3RJdGVtKCk7XG4gICAgaXRlbS52YWx1ZSA9IHZhbHVlO1xuICAgIGl0ZW0ubGV2ZWwgPSBwYXJlbnQgIT0gbnVsbCA/IHBhcmVudC5sZXZlbCArIDEgOiAwO1xuICAgIGl0ZW0udGV4dCA9IGtvLm9ic2VydmFibGUodGhpcy5nZXRUZXh0KGl0ZW0pKTtcbiAgICByZXR1cm4gaXRlbTtcbiAgfVxuICBwcml2YXRlIGdldEl0ZW1JbmRleCh2YWx1ZTogU3VydmV5LkJhc2UpOiBudW1iZXIge1xuICAgIGlmICghdmFsdWUpIHJldHVybiAtMTtcbiAgICBpZiAodmFsdWVbXCJzZWxlY3RlZEVsZW1lbnRJbkRlc2lnblwiXSlcbiAgICAgIHZhbHVlID0gdmFsdWVbXCJzZWxlY3RlZEVsZW1lbnRJbkRlc2lnblwiXTtcbiAgICB2YXIgb2JqcyA9IHRoaXMua29PYmplY3RzKCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBvYmpzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAob2Jqc1tpXS52YWx1ZSA9PSB2YWx1ZSkgcmV0dXJuIGk7XG4gICAgfVxuICAgIHJldHVybiAtMTtcbiAgfVxuICBwcml2YXRlIGdldFRleHQoaXRlbTogU3VydmV5T2JqZWN0SXRlbSk6IHN0cmluZyB7XG4gICAgaWYgKGl0ZW0ubGV2ZWwgPT0gMCkgcmV0dXJuIGVkaXRvckxvY2FsaXphdGlvbi5nZXRTdHJpbmcoXCJlZC5zdXJ2ZXlcIik7XG4gICAgdmFyIGludGVuZCA9IFN1cnZleU9iamVjdHMuaW50ZW5kO1xuICAgIGZvciAodmFyIGkgPSAxOyBpIDwgaXRlbS5sZXZlbDsgaSsrKSB7XG4gICAgICBpbnRlbmQgKz0gU3VydmV5T2JqZWN0cy5pbnRlbmQ7XG4gICAgfVxuICAgIHZhciB0ZXh0ID0gISF0aGlzLmdldE9iamVjdERpc3BsYXlOYW1lXG4gICAgICA/IHRoaXMuZ2V0T2JqZWN0RGlzcGxheU5hbWUoaXRlbS52YWx1ZSlcbiAgICAgIDogU3VydmV5SGVscGVyLmdldE9iamVjdE5hbWUoaXRlbS52YWx1ZSwgZmFsc2UpO1xuICAgIGlmICh0aGlzLmdldEl0ZW1UZXh0Q2FsbGJhY2spIHtcbiAgICAgIHRleHQgPSB0aGlzLmdldEl0ZW1UZXh0Q2FsbGJhY2soaXRlbS52YWx1ZSwgdGV4dCk7XG4gICAgfVxuICAgIHJldHVybiBpbnRlbmQgKyB0ZXh0O1xuICB9XG59XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvc3VydmV5T2JqZWN0cy50cyIsImltcG9ydCAqIGFzIGtvIGZyb20gXCJrbm9ja291dFwiO1xuaW1wb3J0IHsgU3VydmV5SGVscGVyLCBPYmpUeXBlIH0gZnJvbSBcIi4vc3VydmV5SGVscGVyXCI7XG5pbXBvcnQgeyBlZGl0b3JMb2NhbGl6YXRpb24gfSBmcm9tIFwiLi9lZGl0b3JMb2NhbGl6YXRpb25cIjtcbmltcG9ydCAqIGFzIFN1cnZleSBmcm9tIFwic3VydmV5LWtub2Nrb3V0XCI7XG5cbmltcG9ydCBcIi4vc2ltdWxhdG9yLnNjc3NcIjtcblxuZXhwb3J0IGNsYXNzIFN1cnZleUxpdmVUZXN0ZXIge1xuICBwcml2YXRlIGpzb246IGFueTtcbiAga29Jc1J1bm5pbmcgPSBrby5vYnNlcnZhYmxlKHRydWUpO1xuICBzZWxlY3RUZXN0Q2xpY2s6IGFueTtcbiAgc2VsZWN0UGFnZUNsaWNrOiBhbnk7XG4gIGtvUmVzdWx0VGV4dCA9IGtvLm9ic2VydmFibGUoXCJcIik7XG4gIGtvUmVzdWx0RGF0YSA9IGtvLm9ic2VydmFibGVBcnJheSgpO1xuICBrb1Jlc3VsdFZpZXdUeXBlID0ga28ub2JzZXJ2YWJsZShcInRhYmxlXCIpO1xuICBzdXJ2ZXk6IFN1cnZleS5TdXJ2ZXk7XG4gIGtvU3VydmV5OiBhbnk7XG4gIGtvUGFnZXMgPSBrby5vYnNlcnZhYmxlQXJyYXkoW10pO1xuICBrb0FjdGl2ZVBhZ2UgPSBrby5vYnNlcnZhYmxlKG51bGwpO1xuICBzZXRQYWdlRGlzYWJsZTogYW55O1xuICBrb0xhbmd1YWdlczogYW55O1xuICBrb0FjdGl2ZUxhbmd1YWdlOiBhbnk7XG4gIGtvU2hvd0ludmlzaWJsZUVsZW1lbnRzID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG4gIHB1YmxpYyBvbkdldE9iamVjdERpc3BsYXlOYW1lOiAob2JqOiBTdXJ2ZXkuQmFzZSkgPT4gc3RyaW5nID0gbnVsbDtcbiAga29TaG93UGFnZXNJblRlc3RTdXJ2ZXlUYWIgPSBrby5vYnNlcnZhYmxlKHRydWUpO1xuICBrb1Nob3dEZWZhdWx0TGFuZ3VhZ2VJblRlc3RTdXJ2ZXlUYWIgPSBrby5vYnNlcnZhYmxlKHRydWUpO1xuICBrb1Nob3dJbnZpc2libGVFbGVtZW50c0luVGVzdFN1cnZleVRhYiA9IGtvLm9ic2VydmFibGUodHJ1ZSk7XG5cbiAgcHJpdmF0ZSBfc2ltdWxhdG9yRW5hYmxlZCA9IGtvLm9ic2VydmFibGU8Ym9vbGVhbj4odHJ1ZSk7XG4gIHB1YmxpYyBnZXQgc2ltdWxhdG9yRW5hYmxlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5fc2ltdWxhdG9yRW5hYmxlZCgpO1xuICB9XG4gIHB1YmxpYyBzZXQgc2ltdWxhdG9yRW5hYmxlZCh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuX3NpbXVsYXRvckVuYWJsZWQodmFsdWUpO1xuICB9XG4gIHByaXZhdGUgX3NpbXVsYXRvclNjYWxlRW5hYmxlZCA9IGtvLm9ic2VydmFibGU8Ym9vbGVhbj4odHJ1ZSk7XG4gIHB1YmxpYyBnZXQgc2ltdWxhdG9yU2NhbGVFbmFibGVkKCkge1xuICAgIHJldHVybiB0aGlzLl9zaW11bGF0b3JTY2FsZUVuYWJsZWQoKTtcbiAgfVxuICBwdWJsaWMgc2V0IHNpbXVsYXRvclNjYWxlRW5hYmxlZCh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuX3NpbXVsYXRvclNjYWxlRW5hYmxlZCh2YWx1ZSk7XG4gIH1cbiAgcHJpdmF0ZSBzaW11bGF0b3I7XG4gIHB1YmxpYyBzaW11bGF0b3JPcHRpb25zID0ge1xuICAgIGRldmljZTogXCJkZXNrdG9wXCIsXG4gICAgb3JpZW50YXRpb246IFwibFwiLFxuICAgIC8vIHNjYWxlOiAxLFxuICAgIGNvbnNpZGVyRFBJOiB0cnVlXG4gIH07XG4gIGtvQWN0aXZlRGV2aWNlID0ga28ub2JzZXJ2YWJsZShcImRlc2t0b3BcIik7XG4gIGtvRGV2aWNlcyA9IGtvLm9ic2VydmFibGVBcnJheShcbiAgICBPYmplY3Qua2V5cyhzaW11bGF0b3JEZXZpY2VzKVxuICAgICAgLmZpbHRlcihrZXkgPT4gISFzaW11bGF0b3JEZXZpY2VzW2tleV0udGl0bGUpXG4gICAgICAubWFwKGtleSA9PiB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgdGV4dDogc2ltdWxhdG9yRGV2aWNlc1trZXldLnRpdGxlLFxuICAgICAgICAgIHZhbHVlOiBrZXlcbiAgICAgICAgfTtcbiAgICAgIH0pXG4gICk7XG4gIGtvTGFuZHNjYXBlT3JpZW50YXRpb24gPSBrby5vYnNlcnZhYmxlKHRydWUpO1xuXG4gIG9uU3VydmV5Q3JlYXRlZENhbGxiYWNrOiAoc3VydmV5OiBTdXJ2ZXkuU3VydmV5KSA9PiBhbnk7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgc3VydmV5UHJvdmlkZXI6IGFueSkge1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICB0aGlzLnN1cnZleSA9IHRoaXMuc3VydmV5UHJvdmlkZXIuY3JlYXRlU3VydmV5KHt9LCBcInRlc3RcIik7XG4gICAgdGhpcy5zZWxlY3RUZXN0Q2xpY2sgPSBmdW5jdGlvbigpIHtcbiAgICAgIHNlbGYudGVzdEFnYWluKCk7XG4gICAgfTtcbiAgICB0aGlzLnNlbGVjdFBhZ2VDbGljayA9IGZ1bmN0aW9uKHBhZ2VJdGVtKSB7XG4gICAgICBpZiAoc2VsZi5zdXJ2ZXkpIHtcbiAgICAgICAgaWYgKHNlbGYuc3VydmV5LnN0YXRlID09IFwic3RhcnRpbmdcIikge1xuICAgICAgICAgIHNlbGYuc3VydmV5LnN0YXJ0KCk7XG4gICAgICAgIH1cbiAgICAgICAgc2VsZi5zdXJ2ZXkuY3VycmVudFBhZ2UgPSBwYWdlSXRlbS5wYWdlO1xuICAgICAgfVxuICAgIH07XG4gICAgdGhpcy5rb0FjdGl2ZVBhZ2Uuc3Vic2NyaWJlKGZ1bmN0aW9uKG5ld1ZhbHVlKSB7XG4gICAgICBpZiAoISFuZXdWYWx1ZSkge1xuICAgICAgICBzZWxmLnN1cnZleS5jdXJyZW50UGFnZSA9IG5ld1ZhbHVlO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMua29TaG93SW52aXNpYmxlRWxlbWVudHMuc3Vic2NyaWJlKGZ1bmN0aW9uKG5ld1ZhbHVlKSB7XG4gICAgICBzZWxmLnN1cnZleS5zaG93SW52aXNpYmxlRWxlbWVudHMgPSBuZXdWYWx1ZTtcbiAgICB9KTtcbiAgICB0aGlzLnNldFBhZ2VEaXNhYmxlID0gZnVuY3Rpb24ob3B0aW9uLCBpdGVtKSB7XG4gICAgICBrby5hcHBseUJpbmRpbmdzVG9Ob2RlKG9wdGlvbiwgeyBkaXNhYmxlOiBpdGVtLmtvRGlzYWJsZWQgfSwgaXRlbSk7XG4gICAgfTtcbiAgICB0aGlzLmtvTGFuZ3VhZ2VzID0ga28ub2JzZXJ2YWJsZSh0aGlzLmdldExhbmd1YWdlcygpKTtcbiAgICB0aGlzLmtvQWN0aXZlTGFuZ3VhZ2UgPSBrby5vYnNlcnZhYmxlKFwiXCIpO1xuICAgIHRoaXMua29BY3RpdmVMYW5ndWFnZS5zdWJzY3JpYmUoZnVuY3Rpb24obmV3VmFsdWUpIHtcbiAgICAgIGlmIChzZWxmLnN1cnZleS5sb2NhbGUgPT0gbmV3VmFsdWUpIHJldHVybjtcbiAgICAgIHNlbGYuc3VydmV5LmxvY2FsZSA9IG5ld1ZhbHVlO1xuICAgICAgc2VsZi5rb1N1cnZleShzZWxmLnN1cnZleSk7XG4gICAgfSk7XG4gICAgdGhpcy5rb1N1cnZleSA9IGtvLm9ic2VydmFibGUodGhpcy5zdXJ2ZXkpO1xuICAgIHRoaXMua29BY3RpdmVEZXZpY2Uuc3Vic2NyaWJlKG5ld1ZhbHVlID0+IHtcbiAgICAgIGlmICghIXRoaXMuc2ltdWxhdG9yKSB7XG4gICAgICAgIHRoaXMuc2ltdWxhdG9yT3B0aW9ucy5kZXZpY2UgPSBuZXdWYWx1ZSB8fCBcImRlc2t0b3BcIjtcbiAgICAgICAgdGhpcy5zaW11bGF0b3Iub3B0aW9ucyh0aGlzLnNpbXVsYXRvck9wdGlvbnMpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMua29MYW5kc2NhcGVPcmllbnRhdGlvbi5zdWJzY3JpYmUobmV3VmFsdWUgPT4ge1xuICAgICAgaWYgKCEhdGhpcy5zaW11bGF0b3IpIHtcbiAgICAgICAgdGhpcy5zaW11bGF0b3JPcHRpb25zLm9yaWVudGF0aW9uID0gbmV3VmFsdWUgPyBcImxcIiA6IFwicFwiO1xuICAgICAgICB0aGlzLnNpbXVsYXRvci5vcHRpb25zKHRoaXMuc2ltdWxhdG9yT3B0aW9ucyk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbiAgcHVibGljIHNldEpTT04oanNvbjogYW55KSB7XG4gICAgdGhpcy5qc29uID0ganNvbjtcbiAgICBpZiAoanNvbiAhPSBudWxsKSB7XG4gICAgICBpZiAoanNvbi5jb29raWVOYW1lKSB7XG4gICAgICAgIGRlbGV0ZSBqc29uLmNvb2tpZU5hbWU7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuc3VydmV5ID0ganNvblxuICAgICAgPyB0aGlzLnN1cnZleVByb3ZpZGVyLmNyZWF0ZVN1cnZleShqc29uLCBcInRlc3RcIilcbiAgICAgIDogdGhpcy5zdXJ2ZXlQcm92aWRlci5jcmVhdGVTdXJ2ZXkoe30sIFwidGVzdFwiKTtcbiAgICBpZiAodGhpcy5vblN1cnZleUNyZWF0ZWRDYWxsYmFjaykgdGhpcy5vblN1cnZleUNyZWF0ZWRDYWxsYmFjayh0aGlzLnN1cnZleSk7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIHRoaXMuc3VydmV5Lm9uQ29tcGxldGUuYWRkKChzZW5kZXI6IFN1cnZleS5TdXJ2ZXkpID0+IHtcbiAgICAgIHNlbGYua29Jc1J1bm5pbmcoZmFsc2UpO1xuICAgICAgc2VsZi5rb1Jlc3VsdFRleHQoSlNPTi5zdHJpbmdpZnkoc2VsZi5zdXJ2ZXkuZGF0YSwgbnVsbCwgNCkpO1xuICAgICAgdmFyIGFkZENvbGxhcHNlZCA9IChpdGVtczogYW55W10pID0+IHtcbiAgICAgICAgaXRlbXMuZm9yRWFjaCgoaXRlbTogYW55KSA9PiB7XG4gICAgICAgICAgaWYgKCEhaXRlbSAmJiBpdGVtLmlzTm9kZSkge1xuICAgICAgICAgICAgaXRlbS5jb2xsYXBzZWQgPSBrby5vYnNlcnZhYmxlKHRydWUpO1xuICAgICAgICAgICAgaXRlbS5kYXRhID0gYWRkQ29sbGFwc2VkKGl0ZW0uZGF0YSB8fCBbXSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGl0ZW1zLmZpbHRlcihpdGVtID0+ICEhaXRlbSk7XG4gICAgICB9O1xuICAgICAgdmFyIHBsYWluRGF0YSA9IHNlbGYuc3VydmV5LmdldFBsYWluRGF0YSh7IGluY2x1ZGVFbXB0eTogZmFsc2UgfSk7XG4gICAgICBwbGFpbkRhdGEgPSBhZGRDb2xsYXBzZWQocGxhaW5EYXRhKTtcbiAgICAgIHNlbGYua29SZXN1bHREYXRhKHBsYWluRGF0YSk7XG4gICAgfSk7XG4gICAgdGhpcy5zdXJ2ZXkub25TdGFydGVkLmFkZCgoc2VuZGVyOiBTdXJ2ZXkuU3VydmV5KSA9PiB7XG4gICAgICBzZWxmLnNldEFjdGl2ZVBhZ2VJdGVtKDxTdXJ2ZXkuUGFnZT5zZWxmLnN1cnZleS5jdXJyZW50UGFnZSwgdHJ1ZSk7XG4gICAgfSk7XG4gICAgdGhpcy5zdXJ2ZXkub25DdXJyZW50UGFnZUNoYW5nZWQuYWRkKChzZW5kZXI6IFN1cnZleS5TdXJ2ZXksIG9wdGlvbnMpID0+IHtcbiAgICAgIHNlbGYua29BY3RpdmVQYWdlKG9wdGlvbnMubmV3Q3VycmVudFBhZ2UpO1xuICAgICAgc2VsZi5zZXRBY3RpdmVQYWdlSXRlbShvcHRpb25zLm9sZEN1cnJlbnRQYWdlLCBmYWxzZSk7XG4gICAgICBzZWxmLnNldEFjdGl2ZVBhZ2VJdGVtKG9wdGlvbnMubmV3Q3VycmVudFBhZ2UsIHRydWUpO1xuICAgIH0pO1xuICAgIHRoaXMuc3VydmV5Lm9uUGFnZVZpc2libGVDaGFuZ2VkLmFkZCgoc2VuZGVyOiBTdXJ2ZXkuU3VydmV5LCBvcHRpb25zKSA9PiB7XG4gICAgICBzZWxmLnVwZGF0ZVBhZ2VJdGVtKG9wdGlvbnMucGFnZSk7XG4gICAgfSk7XG4gIH1cbiAgcHJpdmF0ZSB1cGRhdGVQYWdlSXRlbShwYWdlOiBTdXJ2ZXkuUGFnZSkge1xuICAgIHZhciBpdGVtID0gdGhpcy5nZXRQYWdlSXRlbUJ5UGFnZShwYWdlKTtcbiAgICBpZiAoaXRlbSkge1xuICAgICAgaXRlbS5rb1Zpc2libGUocGFnZS5pc1Zpc2libGUpO1xuICAgICAgaXRlbS5rb0Rpc2FibGVkKCFwYWdlLmlzVmlzaWJsZSk7XG4gICAgfVxuICB9XG4gIHB1YmxpYyBzaG93KG9wdGlvbnM6IGFueSA9IG51bGwpIHtcbiAgICB2YXIgcGFnZXMgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuc3VydmV5LnBhZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgcGFnZSA9IHRoaXMuc3VydmV5LnBhZ2VzW2ldO1xuICAgICAgcGFnZXMucHVzaCh7XG4gICAgICAgIHBhZ2U6IHBhZ2UsXG4gICAgICAgIHRpdGxlOiB0aGlzLm9uR2V0T2JqZWN0RGlzcGxheU5hbWVcbiAgICAgICAgICA/IHRoaXMub25HZXRPYmplY3REaXNwbGF5TmFtZShwYWdlKVxuICAgICAgICAgIDogcGFnZS5uYW1lLFxuICAgICAgICBrb1Zpc2libGU6IGtvLm9ic2VydmFibGUocGFnZS5pc1Zpc2libGUpLFxuICAgICAgICBrb0Rpc2FibGVkOiBrby5vYnNlcnZhYmxlKCFwYWdlLmlzVmlzaWJsZSksXG4gICAgICAgIGtvQWN0aXZlOiBrby5vYnNlcnZhYmxlKFxuICAgICAgICAgIHRoaXMuc3VydmV5LnN0YXRlID09IFwicnVubmluZ1wiICYmIHBhZ2UgPT09IHRoaXMuc3VydmV5LmN1cnJlbnRQYWdlXG4gICAgICAgIClcbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAoISFvcHRpb25zICYmIG9wdGlvbnMuc2hvd1BhZ2VzSW5UZXN0U3VydmV5VGFiICE9IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5rb1Nob3dQYWdlc0luVGVzdFN1cnZleVRhYihvcHRpb25zLnNob3dQYWdlc0luVGVzdFN1cnZleVRhYik7XG4gICAgfVxuICAgIGlmICghIW9wdGlvbnMgJiYgb3B0aW9ucy5zaG93RGVmYXVsdExhbmd1YWdlSW5UZXN0U3VydmV5VGFiICE9IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5zZXREZWZhdWx0TGFuZ3VhZ2VPcHRpb24ob3B0aW9ucy5zaG93RGVmYXVsdExhbmd1YWdlSW5UZXN0U3VydmV5VGFiKTtcbiAgICB9XG4gICAgaWYgKFxuICAgICAgISFvcHRpb25zICYmXG4gICAgICBvcHRpb25zLnNob3dJbnZpc2libGVFbGVtZW50c0luVGVzdFN1cnZleVRhYiAhPSB1bmRlZmluZWRcbiAgICApIHtcbiAgICAgIHRoaXMua29TaG93SW52aXNpYmxlRWxlbWVudHNJblRlc3RTdXJ2ZXlUYWIoXG4gICAgICAgIG9wdGlvbnMuc2hvd0ludmlzaWJsZUVsZW1lbnRzSW5UZXN0U3VydmV5VGFiXG4gICAgICApO1xuICAgIH1cbiAgICB0aGlzLmtvU2hvd0ludmlzaWJsZUVsZW1lbnRzKGZhbHNlKTtcbiAgICB0aGlzLmtvUGFnZXMocGFnZXMpO1xuICAgIHRoaXMua29TdXJ2ZXkodGhpcy5zdXJ2ZXkpO1xuICAgIHRoaXMua29BY3RpdmVQYWdlKHRoaXMuc3VydmV5LmN1cnJlbnRQYWdlKTtcbiAgICB0aGlzLmtvQWN0aXZlTGFuZ3VhZ2UodGhpcy5zdXJ2ZXkubG9jYWxlKTtcbiAgICB0aGlzLmtvSXNSdW5uaW5nKHRydWUpO1xuICB9XG4gIHB1YmxpYyBnZXQgdGVzdFN1cnZleUFnYWluVGV4dCgpIHtcbiAgICByZXR1cm4gZWRpdG9yTG9jYWxpemF0aW9uLmdldFN0cmluZyhcImVkLnRlc3RTdXJ2ZXlBZ2FpblwiKTtcbiAgfVxuICBwdWJsaWMgZ2V0IHN1cnZleVJlc3VsdHNUZXh0KCkge1xuICAgIHJldHVybiBlZGl0b3JMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKFwiZWQuc3VydmV5UmVzdWx0c1wiKTtcbiAgfVxuICBwdWJsaWMgZ2V0IHJlc3VsdHNUaXRsZSgpIHtcbiAgICByZXR1cm4gZWRpdG9yTG9jYWxpemF0aW9uLmdldFN0cmluZyhcImVkLnJlc3VsdHNUaXRsZVwiKTtcbiAgfVxuICBwdWJsaWMgZ2V0IHJlc3VsdHNOYW1lKCkge1xuICAgIHJldHVybiBlZGl0b3JMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKFwiZWQucmVzdWx0c05hbWVcIik7XG4gIH1cbiAgcHVibGljIGdldCByZXN1bHRzVmFsdWUoKSB7XG4gICAgcmV0dXJuIGVkaXRvckxvY2FsaXphdGlvbi5nZXRTdHJpbmcoXCJlZC5yZXN1bHRzVmFsdWVcIik7XG4gIH1cbiAgcHVibGljIGdldCByZXN1bHRzRGlzcGxheVZhbHVlKCkge1xuICAgIHJldHVybiBlZGl0b3JMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKFwiZWQucmVzdWx0c0Rpc3BsYXlWYWx1ZVwiKTtcbiAgfVxuICBwdWJsaWMgZ2V0IHNlbGVjdFBhZ2VUZXh0KCkge1xuICAgIHJldHVybiBlZGl0b3JMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKFwidHMuc2VsZWN0UGFnZVwiKTtcbiAgfVxuICBwdWJsaWMgZ2V0IHNob3dJbnZpc2libGVFbGVtZW50c1RleHQoKSB7XG4gICAgcmV0dXJuIGVkaXRvckxvY2FsaXphdGlvbi5nZXRTdHJpbmcoXCJ0cy5zaG93SW52aXNpYmxlRWxlbWVudHNcIik7XG4gIH1cbiAgcHVibGljIHNlbGVjdFRhYmxlQ2xpY2sobW9kZWw6IFN1cnZleUxpdmVUZXN0ZXIpIHtcbiAgICBtb2RlbC5rb1Jlc3VsdFZpZXdUeXBlKFwidGFibGVcIik7XG4gIH1cbiAgcHVibGljIHNlbGVjdEpzb25DbGljayhtb2RlbDogU3VydmV5TGl2ZVRlc3Rlcikge1xuICAgIG1vZGVsLmtvUmVzdWx0Vmlld1R5cGUoXCJ0ZXh0XCIpO1xuICB9XG4gIHB1YmxpYyBnZXQgbG9jYWxlVGV4dCgpIHtcbiAgICByZXR1cm4gZWRpdG9yTG9jYWxpemF0aW9uLmdldFN0cmluZyhcInBlLmxvY2FsZVwiKTtcbiAgfVxuICBwdWJsaWMgZ2V0IHNpbXVsYXRvclRleHQoKSB7XG4gICAgcmV0dXJuIGVkaXRvckxvY2FsaXphdGlvbi5nZXRTdHJpbmcoXCJwZS5zaW11bGF0b3JcIik7XG4gIH1cbiAgcHVibGljIGdldCBsYW5kc2NhcGVPcmllbnRhdGlvblRleHQoKSB7XG4gICAgcmV0dXJuIGVkaXRvckxvY2FsaXphdGlvbi5nZXRTdHJpbmcoXCJwZS5sYW5kc2NhcGVPcmllbnRhdGlvblwiKTtcbiAgfVxuICBwcml2YXRlIHRlc3RBZ2FpbigpIHtcbiAgICB0aGlzLnNldEpTT04odGhpcy5qc29uKTtcbiAgICB0aGlzLnNob3coKTtcbiAgfVxuICBwcml2YXRlIHNldERlZmF1bHRMYW5ndWFnZU9wdGlvbihvcHQ6IGJvb2xlYW4gfCBzdHJpbmcpIHtcbiAgICB2YXIgdmlzID1cbiAgICAgIG9wdCA9PT0gdHJ1ZSB8fFxuICAgICAgb3B0ID09PSBcImFsbFwiIHx8XG4gICAgICAob3B0ID09PSBcImF1dG9cIiAmJiB0aGlzLnN1cnZleS5nZXRVc2VkTG9jYWxlcygpLmxlbmd0aCA+IDEpO1xuICAgIHRoaXMua29TaG93RGVmYXVsdExhbmd1YWdlSW5UZXN0U3VydmV5VGFiKHZpcyk7XG4gICAgaWYgKHZpcykge1xuICAgICAgdGhpcy5rb0xhbmd1YWdlcyhcbiAgICAgICAgdGhpcy5nZXRMYW5ndWFnZXMob3B0ICE9PSBcImFsbFwiID8gdGhpcy5zdXJ2ZXkuZ2V0VXNlZExvY2FsZXMoKSA6IG51bGwpXG4gICAgICApO1xuICAgIH1cbiAgfVxuICBwcml2YXRlIHNldEFjdGl2ZVBhZ2VJdGVtKHBhZ2U6IFN1cnZleS5QYWdlLCB2YWw6IGJvb2xlYW4pIHtcbiAgICB2YXIgaXRlbSA9IHRoaXMuZ2V0UGFnZUl0ZW1CeVBhZ2UocGFnZSk7XG4gICAgaWYgKGl0ZW0pIHtcbiAgICAgIGl0ZW0ua29BY3RpdmUodmFsKTtcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBnZXRQYWdlSXRlbUJ5UGFnZShwYWdlOiBTdXJ2ZXkuUGFnZSk6IGFueSB7XG4gICAgdmFyIGl0ZW1zID0gdGhpcy5rb1BhZ2VzKCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpdGVtcy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKGl0ZW1zW2ldLnBhZ2UgPT09IHBhZ2UpIHJldHVybiBpdGVtc1tpXTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgcHJpdmF0ZSBnZXRMYW5ndWFnZXModXNlZExhbmd1YWdlczogQXJyYXk8c3RyaW5nPiA9IG51bGwpOiBBcnJheTxhbnk+IHtcbiAgICB2YXIgcmVzID0gW107XG4gICAgdmFyIGxvY2FsZXMgPVxuICAgICAgISF1c2VkTGFuZ3VhZ2VzICYmIHVzZWRMYW5ndWFnZXMubGVuZ3RoID4gMVxuICAgICAgICA/IHVzZWRMYW5ndWFnZXNcbiAgICAgICAgOiBTdXJ2ZXkuc3VydmV5TG9jYWxpemF0aW9uLmdldExvY2FsZXMoKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxvY2FsZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBsb2MgPSBsb2NhbGVzW2ldO1xuICAgICAgcmVzLnB1c2goeyB2YWx1ZTogbG9jLCB0ZXh0OiBlZGl0b3JMb2NhbGl6YXRpb24uZ2V0TG9jYWxlTmFtZShsb2MpIH0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzO1xuICB9XG4gIHB1YmxpYyBrb0V2ZW50QWZ0ZXJSZW5kZXIoZWxlbWVudDogYW55LCBzdXJ2ZXk6IGFueSkge1xuICAgIHN1cnZleS5vblJlbmRlcmVkLmZpcmUoc2VsZiwge30pO1xuICAgIHN1cnZleVtcImFmdGVyUmVuZGVyU3VydmV5XCJdKGVsZW1lbnQpO1xuICB9XG5cbiAgcHVibGljIGtvSGFzRnJhbWUgPSBrby5jb21wdXRlZCgoKSA9PiB7XG4gICAgdmFyIGRldmljZSA9IHNpbXVsYXRvckRldmljZXNbdGhpcy5rb0FjdGl2ZURldmljZSgpXTtcbiAgICByZXR1cm4gdGhpcy5zaW11bGF0b3JFbmFibGVkICYmIGRldmljZS5kZXZpY2VUeXBlICE9PSBcImRlc2t0b3BcIjtcbiAgfSk7XG5cbiAgcHVibGljIGtvU2ltdWxhdG9yRnJhbWUgPSBrby5jb21wdXRlZCgoKSA9PiB7XG4gICAgaWYgKCF0aGlzLmtvSGFzRnJhbWUpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHZhciBkZXZpY2UgPSBzaW11bGF0b3JEZXZpY2VzW3RoaXMua29BY3RpdmVEZXZpY2UoKV07XG4gICAgdmFyIHNjYWxlID0gREVGQVVMVF9NT05JVE9SX0RQSSAvIChkZXZpY2UucHBpIC8gZGV2aWNlLmNzc1BpeGVsUmF0aW8pO1xuICAgIHZhciB3aWR0aCA9XG4gICAgICAoKHRoaXMua29MYW5kc2NhcGVPcmllbnRhdGlvbigpID8gZGV2aWNlLmhlaWdodCA6IGRldmljZS53aWR0aCkgL1xuICAgICAgICBkZXZpY2UuY3NzUGl4ZWxSYXRpbykgKlxuICAgICAgc2NhbGU7XG4gICAgdmFyIGhlaWdodCA9XG4gICAgICAoKHRoaXMua29MYW5kc2NhcGVPcmllbnRhdGlvbigpID8gZGV2aWNlLndpZHRoIDogZGV2aWNlLmhlaWdodCkgL1xuICAgICAgICBkZXZpY2UuY3NzUGl4ZWxSYXRpbykgKlxuICAgICAgc2NhbGU7XG4gICAgdmFyIG9mZnNldFJhdGlvWCA9IHRoaXMua29MYW5kc2NhcGVPcmllbnRhdGlvbigpID8gMC4xNSA6IDAuMTY1O1xuICAgIHZhciBvZmZzZXRSYXRpb1kgPSB0aGlzLmtvTGFuZHNjYXBlT3JpZW50YXRpb24oKSA/IDAuMTcgOiAwLjE1NTtcbiAgICByZXR1cm4ge1xuICAgICAgc2NhbGU6IHRoaXMuc2ltdWxhdG9yU2NhbGVFbmFibGVkID8gc2NhbGUgKiAyIDogMSxcbiAgICAgIHdpZHRoOiB3aWR0aCxcbiAgICAgIGhlaWdodDogaGVpZ2h0LFxuICAgICAgZnJhbWVXaWR0aDogd2lkdGggKiAxLjMzLFxuICAgICAgZnJhbWVIZWlnaHQ6IGhlaWdodCAqIDEuMzQsXG4gICAgICBmcmFtZVg6IHdpZHRoICogb2Zmc2V0UmF0aW9YLFxuICAgICAgZnJhbWVZOiBoZWlnaHQgKiBvZmZzZXRSYXRpb1lcbiAgICB9O1xuICB9KTtcbn1cblxuZXhwb3J0IHZhciBERUZBVUxUX01PTklUT1JfRFBJID0gMTAyLjY5O1xuZXhwb3J0IHZhciBzaW11bGF0b3JEZXZpY2VzID0ge1xuICBkZXNrdG9wOiB7XG4gICAgZGV2aWNlVHlwZTogXCJkZXNrdG9wXCIsXG4gICAgdGl0bGU6IFwiRGVza3RvcFwiXG4gIH0sXG4gIC8vIGRlc2t0b3BfMTI4MHg3MjA6IHtcbiAgLy8gICBjc3NQaXhlbFJhdGlvOiAxLFxuICAvLyAgIHBwaTogREVGQVVMVF9NT05JVE9SX0RQSSxcbiAgLy8gICB3aWR0aDogNzIwLFxuICAvLyAgIGhlaWdodDogMTI4MCxcbiAgLy8gICBkZXZpY2VUeXBlOiBcImRlc2t0b3BcIixcbiAgLy8gICB0aXRsZTogXCJEZXNrdG9wIDEyODB4NzIwXCJcbiAgLy8gfSxcbiAgLy8gZGVza3RvcF8xNDQweDkwMDoge1xuICAvLyAgIGNzc1BpeGVsUmF0aW86IDEsXG4gIC8vICAgcHBpOiBERUZBVUxUX01PTklUT1JfRFBJLFxuICAvLyAgIHdpZHRoOiA5MDAsXG4gIC8vICAgaGVpZ2h0OiAxNDQwLFxuICAvLyAgIGRldmljZVR5cGU6IFwiZGVza3RvcFwiLFxuICAvLyAgIHRpdGxlOiBcIkRlc2t0b3AgMTQ0MHg5MDBcIlxuICAvLyB9LFxuICAvLyBkZXNrdG9wXzE5MjB4MTA4MDoge1xuICAvLyAgIGNzc1BpeGVsUmF0aW86IDEsXG4gIC8vICAgcHBpOiBERUZBVUxUX01PTklUT1JfRFBJLFxuICAvLyAgIHdpZHRoOiAxMDgwLFxuICAvLyAgIGhlaWdodDogMTkyMCxcbiAgLy8gICBkZXZpY2VUeXBlOiBcImRlc2t0b3BcIixcbiAgLy8gICB0aXRsZTogXCJEZXNrdG9wIDE5MjB4MTA4MFwiXG4gIC8vIH0sXG4gIGlQaG9uZToge1xuICAgIGNzc1BpeGVsUmF0aW86IDIsXG4gICAgcHBpOiAzMjYsXG4gICAgd2lkdGg6IDY0MCxcbiAgICBoZWlnaHQ6IDk2MCxcbiAgICBkZXZpY2VUeXBlOiBcInBob25lXCIsXG4gICAgdGl0bGU6IFwiaVBob25lXCJcbiAgfSxcbiAgaVBob25lNToge1xuICAgIGNzc1BpeGVsUmF0aW86IDIsXG4gICAgcHBpOiAzMjYsXG4gICAgd2lkdGg6IDY0MCxcbiAgICBoZWlnaHQ6IDExMzYsXG4gICAgZGV2aWNlVHlwZTogXCJwaG9uZVwiLFxuICAgIHRpdGxlOiBcImlQaG9uZSA1XCJcbiAgfSxcbiAgaVBob25lNjoge1xuICAgIGNzc1BpeGVsUmF0aW86IDIsXG4gICAgcHBpOiAzMjYsXG4gICAgd2lkdGg6IDc1MCxcbiAgICBoZWlnaHQ6IDEzMzQsXG4gICAgZGV2aWNlVHlwZTogXCJwaG9uZVwiLFxuICAgIHRpdGxlOiBcImlQaG9uZSA2XCJcbiAgfSxcbiAgaVBob25lNnBsdXM6IHtcbiAgICBjc3NQaXhlbFJhdGlvOiAyLFxuICAgIHBwaTogNDAxLFxuICAgIHdpZHRoOiAxMDgwLFxuICAgIGhlaWdodDogMTkyMCxcbiAgICBkZXZpY2VUeXBlOiBcInBob25lXCIsXG4gICAgdGl0bGU6IFwiaVBob25lIDYgUGx1c1wiXG4gIH0sXG4gIGlQaG9uZTg6IHtcbiAgICBjc3NQaXhlbFJhdGlvOiAyLFxuICAgIHBwaTogMzI2LFxuICAgIHdpZHRoOiA3NTAsXG4gICAgaGVpZ2h0OiAxMzM0LFxuICAgIGRldmljZVR5cGU6IFwicGhvbmVcIixcbiAgICB0aXRsZTogXCJpUGhvbmUgOFwiXG4gIH0sXG4gIGlQaG9uZThwbHVzOiB7XG4gICAgY3NzUGl4ZWxSYXRpbzogMixcbiAgICBwcGk6IDQwMSxcbiAgICB3aWR0aDogMTA4MCxcbiAgICBoZWlnaHQ6IDE5MjAsXG4gICAgZGV2aWNlVHlwZTogXCJwaG9uZVwiLFxuICAgIHRpdGxlOiBcImlQaG9uZSA4IFBsdXNcIlxuICB9LFxuICBpUGhvbmVYOiB7XG4gICAgY3NzUGl4ZWxSYXRpbzogMixcbiAgICBwcGk6IDQ1OCxcbiAgICB3aWR0aDogMTEyNSxcbiAgICBoZWlnaHQ6IDI0MzYsXG4gICAgZGV2aWNlVHlwZTogXCJwaG9uZVwiLFxuICAgIHRpdGxlOiBcImlQaG9uZSBYXCJcbiAgfSxcbiAgaVBob25lWG1heDoge1xuICAgIGNzc1BpeGVsUmF0aW86IDIsXG4gICAgcHBpOiA0NTgsXG4gICAgd2lkdGg6IDEyNDIsXG4gICAgaGVpZ2h0OiAyNjg4LFxuICAgIGRldmljZVR5cGU6IFwicGhvbmVcIixcbiAgICB0aXRsZTogXCJpUGhvbmUgWCBNYXhcIlxuICB9LFxuICBpUGFkOiB7XG4gICAgY3NzUGl4ZWxSYXRpbzogMixcbiAgICBwcGk6IDI2NCxcbiAgICB3aWR0aDogMTUzNixcbiAgICBoZWlnaHQ6IDIwNDgsXG4gICAgZGV2aWNlVHlwZTogXCJ0YWJsZXRcIixcbiAgICB0aXRsZTogXCJpUGFkXCJcbiAgfSxcbiAgaVBhZE1pbmk6IHtcbiAgICBjc3NQaXhlbFJhdGlvOiAxLFxuICAgIHBwaTogMTYzLFxuICAgIHdpZHRoOiA3NjgsXG4gICAgaGVpZ2h0OiAxMDI0LFxuICAgIGRldmljZVR5cGU6IFwidGFibGV0XCIsXG4gICAgdGl0bGU6IFwiaVBhZCBNaW5pXCJcbiAgfSxcbiAgaVBhZFBybzoge1xuICAgIGNzc1BpeGVsUmF0aW86IDEsXG4gICAgcHBpOiAyNjQsXG4gICAgd2lkdGg6IDE2ODgsXG4gICAgaGVpZ2h0OiAyMzg4LFxuICAgIGRldmljZVR5cGU6IFwidGFibGV0XCIsXG4gICAgdGl0bGU6ICdpUGFkIFBybyAxMVwiJ1xuICB9LFxuICBpUGFkUHJvMTM6IHtcbiAgICBjc3NQaXhlbFJhdGlvOiAxLFxuICAgIHBwaTogMjY0LFxuICAgIHdpZHRoOiAyMDQ4LFxuICAgIGhlaWdodDogMjczMixcbiAgICBkZXZpY2VUeXBlOiBcInRhYmxldFwiLFxuICAgIHRpdGxlOiAnaVBhZCBQcm8gMTIsOVwiJ1xuICB9LFxuICBhbmRyb2lkUGhvbmU6IHtcbiAgICBjc3NQaXhlbFJhdGlvOiAyLFxuICAgIHBwaTogMzE2LFxuICAgIHdpZHRoOiA3MjAsXG4gICAgaGVpZ2h0OiAxMjgwLFxuICAgIGRldmljZVR5cGU6IFwicGhvbmVcIixcbiAgICB0aXRsZTogXCJBbmRyb2lkIFBob25lXCJcbiAgfSxcbiAgYW5kcm9pZFRhYmxldDoge1xuICAgIGNzc1BpeGVsUmF0aW86IDEuNSxcbiAgICBwcGk6IDE0OSxcbiAgICB3aWR0aDogODAwLFxuICAgIGhlaWdodDogMTI4MCxcbiAgICBkZXZpY2VUeXBlOiBcInRhYmxldFwiLFxuICAgIHRpdGxlOiBcIkFuZHJvaWQgVGFibGV0XCJcbiAgfSxcbiAgd2luMTBQaG9uZToge1xuICAgIGNzc1BpeGVsUmF0aW86IDEsXG4gICAgcHBpOiAxNTIsXG4gICAgd2lkdGg6IDMzMCxcbiAgICBoZWlnaHQ6IDU2OCxcbiAgICBkZXZpY2VUeXBlOiBcInBob25lXCIsXG4gICAgdGl0bGU6IFwiV2luZG93cyAxMCBQaG9uZVwiXG4gIH0sXG4gIG1zU3VyZmFjZToge1xuICAgIGNzc1BpeGVsUmF0aW86IDEsXG4gICAgcHBpOiAxNDgsXG4gICAgd2lkdGg6IDc2OCxcbiAgICBoZWlnaHQ6IDEzNjYsXG4gICAgZGV2aWNlVHlwZTogXCJ0YWJsZXRcIixcbiAgICB0aXRsZTogXCJNUyBTdXJmYWNlXCJcbiAgfSxcbiAgZ2VuZXJpY1Bob25lOiB7XG4gICAgY3NzUGl4ZWxSYXRpbzogMSxcbiAgICBkZXZpY2VUeXBlOiBcInBob25lXCIsXG4gICAgdGl0bGU6IFwiXCJcbiAgfVxufTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9zdXJ2ZXlsaXZlLnRzIiwiaW1wb3J0ICogYXMga28gZnJvbSBcImtub2Nrb3V0XCI7XG5pbXBvcnQgKiBhcyBTdXJ2ZXkgZnJvbSBcInN1cnZleS1rbm9ja291dFwiO1xuaW1wb3J0IHsgZWRpdG9yTG9jYWxpemF0aW9uIH0gZnJvbSBcIi4vZWRpdG9yTG9jYWxpemF0aW9uXCI7XG5cbmV4cG9ydCBjbGFzcyBUcmFuc2xhdGlvbkl0ZW1CYXNlIHtcbiAgY29uc3RydWN0b3IocHVibGljIG5hbWU6IHN0cmluZykge31cbiAgcHVibGljIGdldCBpc0dyb3VwKCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBwdWJsaWMgZmlsbExvY2FsZXMobG9jYWxlczogQXJyYXk8c3RyaW5nPikge31cbiAgcHVibGljIG1lcmdlTG9jYWxlV2l0aERlZmF1bHQobG9jOiBzdHJpbmcpIHt9XG59XG5cbmV4cG9ydCBjbGFzcyBUcmFuc2xhdGlvbkl0ZW0gZXh0ZW5kcyBUcmFuc2xhdGlvbkl0ZW1CYXNlIHtcbiAgcHJpdmF0ZSB2YWx1ZXM6IFN1cnZleS5IYXNoVGFibGU8YW55PjtcbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIG5hbWU6IHN0cmluZyxcbiAgICBwdWJsaWMgbG9jU3RyaW5nOiBTdXJ2ZXkuTG9jYWxpemFibGVTdHJpbmcsXG4gICAgcHVibGljIGRlZmF1bHRWYWx1ZTogc3RyaW5nID0gXCJcIixcbiAgICBwcml2YXRlIHRyYW5zbGF0aW9uOiBJVHJhbnNsYXRpb25Mb2NhbGVzLFxuICAgIHByaXZhdGUgY29udGV4dDogYW55XG4gICkge1xuICAgIHN1cGVyKG5hbWUpO1xuICAgIHRoaXMudmFsdWVzID0ge307XG4gIH1cbiAgcHVibGljIGdldCB0ZXh0KCkge1xuICAgIHJldHVybiBlZGl0b3JMb2NhbGl6YXRpb24uZ2V0UHJvcGVydHlOYW1lKHRoaXMubmFtZSk7XG4gIH1cbiAgcHVibGljIGtvVmFsdWUobG9jOiBzdHJpbmcpOiBhbnkge1xuICAgIGlmICghIXRoaXMudmFsdWVzW2xvY10pIHJldHVybiB0aGlzLnZhbHVlc1tsb2NdO1xuICAgIHZhciB2YWwgPSBrby5vYnNlcnZhYmxlKHRoaXMubG9jU3RyaW5nLmdldExvY2FsZVRleHQobG9jKSk7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIHZhbC5zdWJzY3JpYmUoZnVuY3Rpb24obmV3VmFsdWUpIHtcbiAgICAgIHNlbGYubG9jU3RyaW5nLnNldExvY2FsZVRleHQobG9jLCBuZXdWYWx1ZSk7XG4gICAgICAhIXNlbGYudHJhbnNsYXRpb24udHJhbmxhdGlvbkNoYW5nZWRDYWxsYmFjayAmJlxuICAgICAgICBzZWxmLnRyYW5zbGF0aW9uLnRyYW5sYXRpb25DaGFuZ2VkQ2FsbGJhY2soXG4gICAgICAgICAgbG9jLFxuICAgICAgICAgIHNlbGYubmFtZSxcbiAgICAgICAgICBuZXdWYWx1ZSxcbiAgICAgICAgICBzZWxmLmNvbnRleHRcbiAgICAgICAgKTtcbiAgICB9KTtcbiAgICB0aGlzLnZhbHVlc1tsb2NdID0gdmFsO1xuICAgIHJldHVybiB2YWw7XG4gIH1cbiAgcHVibGljIGZpbGxMb2NhbGVzKGxvY2FsZXM6IEFycmF5PHN0cmluZz4pIHtcbiAgICB2YXIganNvbiA9IHRoaXMubG9jU3RyaW5nLmdldEpzb24oKTtcbiAgICBpZiAoIWpzb24gfHwgdHlwZW9mIGpzb24gPT09IFwic3RyaW5nXCIpIHJldHVybjtcbiAgICBmb3IgKHZhciBrZXkgaW4ganNvbikge1xuICAgICAgaWYgKFxuICAgICAgICAhIWtleSAmJlxuICAgICAgICBsb2NhbGVzLmluZGV4T2Yoa2V5KSA8IDAgJiZcbiAgICAgICAga2V5ICE9PSBTdXJ2ZXkuTG9jYWxpemFibGVTdHJpbmcuZGVmYXVsdExvY2FsZVxuICAgICAgKSB7XG4gICAgICAgIGxvY2FsZXMucHVzaChrZXkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBwdWJsaWMgbWVyZ2VMb2NhbGVXaXRoRGVmYXVsdChsb2M6IHN0cmluZykge1xuICAgIHZhciBsb2NUZXh0ID0gdGhpcy5sb2NTdHJpbmcuZ2V0TG9jYWxlVGV4dChsb2MpO1xuICAgIGlmICghbG9jVGV4dCkgcmV0dXJuO1xuICAgIHRoaXMubG9jU3RyaW5nLnNldExvY2FsZVRleHQoXCJcIiwgbG9jVGV4dCk7XG4gICAgdGhpcy5sb2NTdHJpbmcuc2V0TG9jYWxlVGV4dChsb2MsIG51bGwpO1xuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVRyYW5zbGF0aW9uTG9jYWxlcyB7XG4gIGtvTG9jYWxlczogYW55O1xuICBzaG93QWxsU3RyaW5nczogYm9vbGVhbjtcbiAgZ2V0TG9jYWxlTmFtZShsb2M6IHN0cmluZyk6IHN0cmluZztcbiAgYXZhaWxhYmxlVHJhbmxhdGlvbnNDaGFuZ2VkQ2FsbGJhY2s6ICgpID0+IHZvaWQ7XG4gIHRyYW5sYXRpb25DaGFuZ2VkQ2FsbGJhY2s6IChcbiAgICBsb2NhbGU6IHN0cmluZyxcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgdmFsdWU6IHN0cmluZyxcbiAgICBjb250ZXh0OiBhbnlcbiAgKSA9PiB2b2lkO1xufVxuXG5leHBvcnQgY2xhc3MgVHJhbnNsYXRpb25Hcm91cCBleHRlbmRzIFRyYW5zbGF0aW9uSXRlbUJhc2Uge1xuICBrb0V4cGFuZGVkOiBhbnk7XG4gIHByaXZhdGUgaXRlbVZhbHVlczogQXJyYXk8VHJhbnNsYXRpb25JdGVtQmFzZT47XG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBuYW1lLFxuICAgIHB1YmxpYyBvYmo6IGFueSxcbiAgICBwdWJsaWMgdHJhbnNsYXRpb246IElUcmFuc2xhdGlvbkxvY2FsZXMgPSBudWxsXG4gICkge1xuICAgIHN1cGVyKG5hbWUpO1xuICAgIHRoaXMua29FeHBhbmRlZCA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuICAgIHRoaXMucmVzZXQoKTtcbiAgfVxuICBwdWJsaWMgZ2V0IGl0ZW1zKCk6IEFycmF5PFRyYW5zbGF0aW9uSXRlbUJhc2U+IHtcbiAgICByZXR1cm4gdGhpcy5pdGVtVmFsdWVzO1xuICB9XG4gIHB1YmxpYyBnZXQgbG9jSXRlbXMoKTogQXJyYXk8VHJhbnNsYXRpb25JdGVtPiB7XG4gICAgdmFyIHJlcyA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5pdGVtcy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKCF0aGlzLml0ZW1zW2ldLmlzR3JvdXApIHtcbiAgICAgICAgcmVzLnB1c2godGhpcy5pdGVtc1tpXSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXM7XG4gIH1cbiAgcHVibGljIGdldCBncm91cHMoKTogQXJyYXk8VHJhbnNsYXRpb25Hcm91cD4ge1xuICAgIHZhciByZXMgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuaXRlbXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICh0aGlzLml0ZW1zW2ldLmlzR3JvdXApIHtcbiAgICAgICAgcmVzLnB1c2godGhpcy5pdGVtc1tpXSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXM7XG4gIH1cbiAgcHVibGljIGdldCBpc0dyb3VwKCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHB1YmxpYyBnZXQga29Mb2NhbGVzKCkge1xuICAgIHJldHVybiAhIXRoaXMudHJhbnNsYXRpb24gPyB0aGlzLnRyYW5zbGF0aW9uLmtvTG9jYWxlcyA6IG51bGw7XG4gIH1cbiAgcHVibGljIGdldCBsb2NhbGVDb3VudCgpOiBudW1iZXIge1xuICAgIGlmICghdGhpcy5rb0xvY2FsZXMoKSkgcmV0dXJuIDA7XG4gICAgdmFyIGxvY2FsZXMgPSB0aGlzLmtvTG9jYWxlcygpO1xuICAgIHZhciByZXMgPSAwO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbG9jYWxlcy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKGxvY2FsZXNbaV0ua29WaXNpYmxlKCkpIHJlcysrO1xuICAgIH1cbiAgICByZXR1cm4gcmVzO1xuICB9XG4gIHB1YmxpYyBnZXQgbG9jV2lkdGgoKTogc3RyaW5nIHtcbiAgICB2YXIgY291bnQgPSB0aGlzLmxvY2FsZUNvdW50O1xuICAgIGlmIChjb3VudCA8IDIpIHJldHVybiBcIjEwMCVcIjtcbiAgICByZXR1cm4gTWF0aC5mbG9vcigxMDAgLyBjb3VudCkudG9TdHJpbmcoKSArIFwiJVwiO1xuICB9XG4gIHB1YmxpYyBnZXRMb2NhbGVOYW1lKGxvYzogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMudHJhbnNsYXRpb25cbiAgICAgID8gdGhpcy50cmFuc2xhdGlvbi5nZXRMb2NhbGVOYW1lKGxvYylcbiAgICAgIDogZWRpdG9yTG9jYWxpemF0aW9uLmdldExvY2FsZU5hbWUobG9jKTtcbiAgfVxuICBwdWJsaWMgcmVzZXQoKSB7XG4gICAgdGhpcy5pdGVtVmFsdWVzID0gW107XG4gICAgdGhpcy5maWxsSXRlbXMoKTtcbiAgfVxuICBwdWJsaWMgZmlsbExvY2FsZXMobG9jYWxlczogQXJyYXk8c3RyaW5nPikge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5pdGVtcy5sZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy5pdGVtc1tpXS5maWxsTG9jYWxlcyhsb2NhbGVzKTtcbiAgICB9XG4gIH1cbiAgcHVibGljIGdldCBzaG93QWxsU3RyaW5ncygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISF0aGlzLnRyYW5zbGF0aW9uID8gdGhpcy50cmFuc2xhdGlvbi5zaG93QWxsU3RyaW5ncyA6IHRydWU7XG4gIH1cbiAgcHVibGljIGdldCBoYXNJdGVtcygpOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy5sb2NJdGVtcy5sZW5ndGggPiAwKSByZXR1cm4gdHJ1ZTtcbiAgICB2YXIgZ3JvdXBzID0gdGhpcy5ncm91cHM7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBncm91cHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChncm91cHNbaV0uaGFzSXRlbXMpIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcHVibGljIG1lcmdlTG9jYWxlV2l0aERlZmF1bHQobG9jOiBzdHJpbmcpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuaXRlbVZhbHVlcy5sZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy5pdGVtVmFsdWVzW2ldLm1lcmdlTG9jYWxlV2l0aERlZmF1bHQobG9jKTtcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBmaWxsSXRlbXMoKSB7XG4gICAgaWYgKHRoaXMuaXNJdGVtVmFsdWVBcnJheSh0aGlzLm9iaikpIHtcbiAgICAgIHRoaXMuY3JlYXRlSXRlbVZhbHVlcygpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoIXRoaXMub2JqIHx8ICF0aGlzLm9iai5nZXRUeXBlKSByZXR1cm47XG4gICAgdmFyIHByb3BlcnRpZXMgPSBTdXJ2ZXkuU2VyaWFsaXplci5nZXRQcm9wZXJ0aWVzQnlPYmoodGhpcy5vYmopO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcGVydGllcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHByb3BlcnR5ID0gcHJvcGVydGllc1tpXTtcbiAgICAgIGlmICghcHJvcGVydHkuaXNTZXJpYWxpemFibGUgJiYgIXByb3BlcnR5LmlzTG9jYWxpemFibGUpIGNvbnRpbnVlO1xuICAgICAgaWYgKHByb3BlcnR5LmlzTG9jYWxpemFibGUpIHtcbiAgICAgICAgaWYgKCFwcm9wZXJ0eS5yZWFkT25seSAmJiBwcm9wZXJ0eS52aXNpYmxlKSB7XG4gICAgICAgICAgdmFyIGRlZmF1bHRWYWx1ZSA9IHRoaXMuZ2V0RGVmYXVsdFZhbHVlKHByb3BlcnR5KTtcbiAgICAgICAgICB2YXIgbG9jU3RyID0gPFN1cnZleS5Mb2NhbGl6YWJsZVN0cmluZz4oXG4gICAgICAgICAgICB0aGlzLm9ialtwcm9wZXJ0eS5zZXJpYWxpemF0aW9uUHJvcGVydHldXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAoIWxvY1N0cikgY29udGludWU7XG4gICAgICAgICAgaWYgKCF0aGlzLnNob3dBbGxTdHJpbmdzICYmICFkZWZhdWx0VmFsdWUgJiYgbG9jU3RyLmlzRW1wdHkpIGNvbnRpbnVlO1xuICAgICAgICAgIHRoaXMuaXRlbVZhbHVlcy5wdXNoKFxuICAgICAgICAgICAgbmV3IFRyYW5zbGF0aW9uSXRlbShcbiAgICAgICAgICAgICAgcHJvcGVydHkubmFtZSxcbiAgICAgICAgICAgICAgbG9jU3RyLFxuICAgICAgICAgICAgICBkZWZhdWx0VmFsdWUsXG4gICAgICAgICAgICAgIHRoaXMudHJhbnNsYXRpb24sXG4gICAgICAgICAgICAgIHRoaXMub2JqXG4gICAgICAgICAgICApXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIHZhbHVlID0gdGhpcy5vYmpbcHJvcGVydHkubmFtZV07XG4gICAgICAgIGlmICghIXZhbHVlICYmIEFycmF5LmlzQXJyYXkodmFsdWUpICYmIHZhbHVlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAvL0lmIEl0ZW1WYWx1ZSBhcnJheT9cbiAgICAgICAgICBpZiAodGhpcy5pc0l0ZW1WYWx1ZUFycmF5KHZhbHVlKSkge1xuICAgICAgICAgICAgdmFyIGdyb3VwID0gbmV3IFRyYW5zbGF0aW9uR3JvdXAoXG4gICAgICAgICAgICAgIHByb3BlcnR5Lm5hbWUsXG4gICAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgICB0aGlzLnRyYW5zbGF0aW9uXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgaWYgKGdyb3VwLmhhc0l0ZW1zKSB7XG4gICAgICAgICAgICAgIHRoaXMuaXRlbVZhbHVlcy5wdXNoKGdyb3VwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5jcmVhdGVHcm91cHModmFsdWUsIHByb3BlcnR5KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5pdGVtVmFsdWVzLnNvcnQoZnVuY3Rpb24oXG4gICAgICBhOiBUcmFuc2xhdGlvbkl0ZW1CYXNlLFxuICAgICAgYjogVHJhbnNsYXRpb25JdGVtQmFzZVxuICAgICkge1xuICAgICAgaWYgKCFhLm5hbWUpIHJldHVybiAtMTtcbiAgICAgIGlmICghYi5uYW1lKSByZXR1cm4gMTtcbiAgICAgIHJldHVybiBhLm5hbWUubG9jYWxlQ29tcGFyZShiLm5hbWUpO1xuICAgIH0pO1xuICB9XG4gIHByaXZhdGUgZ2V0RGVmYXVsdFZhbHVlKHByb3BlcnR5OiBTdXJ2ZXkuSnNvbk9iamVjdFByb3BlcnR5KTogc3RyaW5nIHtcbiAgICBpZiAoXG4gICAgICBwcm9wZXJ0eS5uYW1lID09IFwidGl0bGVcIiAmJlxuICAgICAgcHJvcGVydHkuaXNMb2NhbGl6YWJsZSAmJlxuICAgICAgISFwcm9wZXJ0eS5zZXJpYWxpemF0aW9uUHJvcGVydHlcbiAgICApIHtcbiAgICAgIHZhciBsb2NTdHIgPSA8U3VydmV5LkxvY2FsaXphYmxlU3RyaW5nPihcbiAgICAgICAgdGhpcy5vYmpbcHJvcGVydHkuc2VyaWFsaXphdGlvblByb3BlcnR5XVxuICAgICAgKTtcbiAgICAgIGlmIChcbiAgICAgICAgISFsb2NTdHIgJiZcbiAgICAgICAgdGhpcy5vYmouZ2V0VHlwZSgpICE9IFwicGFnZVwiICYmXG4gICAgICAgICghIWxvY1N0ci5vbkdldFRleHRDYWxsYmFjayB8fCBsb2NTdHJbXCJvblJlbmRlcmVkSHRtbENhbGxiYWNrXCJdKVxuICAgICAgKVxuICAgICAgICByZXR1cm4gdGhpcy5vYmpbXCJuYW1lXCJdO1xuICAgIH1cbiAgICByZXR1cm4gXCJcIjtcbiAgfVxuICBwcml2YXRlIGlzSXRlbVZhbHVlQXJyYXkodmFsOiBhbnkpIHtcbiAgICByZXR1cm4gKFxuICAgICAgISF2YWwgJiZcbiAgICAgIEFycmF5LmlzQXJyYXkodmFsKSAmJlxuICAgICAgdmFsLmxlbmd0aCA+IDAgJiZcbiAgICAgICEhdmFsWzBdICYmXG4gICAgICAhIXZhbFswXVtcImdldFR5cGVcIl0gJiZcbiAgICAgICEhdmFsWzBdW1wic2V0RGF0YVwiXSAmJlxuICAgICAgISF2YWxbMF1bXCJzZXRMb2NUZXh0XCJdXG4gICAgKTtcbiAgfVxuICBwcml2YXRlIGNyZWF0ZUdyb3Vwcyh2YWx1ZTogYW55LCBwcm9wZXJ0eTogU3VydmV5Lkpzb25PYmplY3RQcm9wZXJ0eSkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmFsdWUubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBvYmogPSB2YWx1ZVtpXTtcbiAgICAgIGlmICghIW9iaiAmJiBvYmouZ2V0VHlwZSkge1xuICAgICAgICB2YXIgbmFtZSA9IG9ialtcIm5hbWVcIl07XG4gICAgICAgIGlmICghbmFtZSkge1xuICAgICAgICAgIG5hbWUgPSBwcm9wZXJ0eS5uYW1lICsgXCJbXCIgKyBpLnRvU3RyaW5nKCkgKyBcIl1cIjtcbiAgICAgICAgfVxuICAgICAgICB2YXIgZ3JvdXAgPSBuZXcgVHJhbnNsYXRpb25Hcm91cChuYW1lLCBvYmosIHRoaXMudHJhbnNsYXRpb24pO1xuICAgICAgICBpZiAoZ3JvdXAuaGFzSXRlbXMpIHtcbiAgICAgICAgICB0aGlzLml0ZW1WYWx1ZXMucHVzaChncm91cCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBjcmVhdGVJdGVtVmFsdWVzKCkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5vYmoubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciB2YWwgPSB0aGlzLm9ialtpXTtcbiAgICAgIHZhciBjYW5BZGQgPVxuICAgICAgICB0aGlzLnNob3dBbGxTdHJpbmdzIHx8ICF2YWwubG9jVGV4dC5pc0VtcHR5IHx8IGlzTmFOKHZhbC52YWx1ZSk7XG4gICAgICBpZiAoY2FuQWRkKSB7XG4gICAgICAgIHRoaXMuaXRlbVZhbHVlcy5wdXNoKFxuICAgICAgICAgIG5ldyBUcmFuc2xhdGlvbkl0ZW0oXG4gICAgICAgICAgICB2YWwudmFsdWUsXG4gICAgICAgICAgICB2YWwubG9jVGV4dCxcbiAgICAgICAgICAgIHZhbC52YWx1ZSxcbiAgICAgICAgICAgIHRoaXMudHJhbnNsYXRpb24sXG4gICAgICAgICAgICB2YWxcbiAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBUcmFuc2xhdGlvbiBpbXBsZW1lbnRzIElUcmFuc2xhdGlvbkxvY2FsZXMge1xuICBwdWJsaWMgc3RhdGljIGNzdkRlbGltaXRlciA9IFwifFwiO1xuICBwdWJsaWMgc3RhdGljIG5ld0xpbmVEZWxpbWl0ZXIgPSBcIlxcblwiO1xuICBwdWJsaWMga29Mb2NhbGVzOiBhbnk7XG4gIHB1YmxpYyBrb1Jvb3Q6IGFueTtcbiAgcHVibGljIGtvQXZhaWxhYmxlTGFuZ3VhZ2VzOiBhbnk7XG4gIHB1YmxpYyBrb1NlbGVjdGVkTGFuZ3VhZ2VUb0FkZDogYW55O1xuICBwdWJsaWMga29TaG93QWxsU3RyaW5nczogYW55O1xuICBwdWJsaWMga29GaWx0ZXJlZFBhZ2U6IGFueTtcbiAgcHVibGljIGtvRmlsdGVyZWRQYWdlczogYW55O1xuICBwdWJsaWMga29Jc0VtcHR5OiBhbnk7XG4gIHB1YmxpYyBrb0V4cG9ydFRvU0NWRmlsZTogYW55O1xuICBwdWJsaWMga29JbXBvcnRGcm9tU0NWRmlsZTogYW55O1xuICBwdWJsaWMga29DYW5NZXJnZUxvY2FsZVdpdGhEZWZhdWx0OiBhbnk7XG4gIHB1YmxpYyBrb01lcmdlTG9jYWxlV2l0aERlZmF1bHQ6IGFueTtcbiAgcHVibGljIGtvTWVyZ2VMb2NhbGVXaXRoRGVmYXVsdFRleHQ6IGFueTtcbiAgcHVibGljIGltcG9ydEZpbmlzaGVkQ2FsbGJhY2s6ICgpID0+IHZvaWQ7XG4gIHB1YmxpYyBhdmFpbGFibGVUcmFubGF0aW9uc0NoYW5nZWRDYWxsYmFjazogKCkgPT4gdm9pZDtcbiAgcHVibGljIHRyYW5sYXRpb25DaGFuZ2VkQ2FsbGJhY2s6IChcbiAgICBsb2NhbGU6IHN0cmluZyxcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgdmFsdWU6IHN0cmluZyxcbiAgICBjb250ZXh0OiBhbnlcbiAgKSA9PiB2b2lkO1xuICBwcml2YXRlIHJvb3RWYWx1ZTogVHJhbnNsYXRpb25Hcm91cDtcbiAgcHJpdmF0ZSBzdXJ2ZXlWYWx1ZTogU3VydmV5LlN1cnZleTtcbiAgY29uc3RydWN0b3Ioc3VydmV5OiBTdXJ2ZXkuU3VydmV5LCBzaG93QWxsU3RyaW5nczogYm9vbGVhbiA9IGZhbHNlKSB7XG4gICAgdGhpcy5rb0xvY2FsZXMgPSBrby5vYnNlcnZhYmxlQXJyYXkoW1xuICAgICAge1xuICAgICAgICBsb2NhbGU6IFwiXCIsXG4gICAgICAgIGtvVmlzaWJsZToga28ub2JzZXJ2YWJsZSh0cnVlKSxcbiAgICAgICAga29FbmFibGVkOiBrby5vYnNlcnZhYmxlKHRydWUpXG4gICAgICB9XG4gICAgXSk7XG4gICAgdGhpcy5rb1Jvb3QgPSBrby5vYnNlcnZhYmxlKG51bGwpO1xuICAgIHRoaXMua29TaG93QWxsU3RyaW5ncyA9IGtvLm9ic2VydmFibGUoc2hvd0FsbFN0cmluZ3MpO1xuICAgIHRoaXMua29Jc0VtcHR5ID0ga28ub2JzZXJ2YWJsZSh0cnVlKTtcbiAgICB0aGlzLmtvQXZhaWxhYmxlTGFuZ3VhZ2VzID0ga28ub2JzZXJ2YWJsZUFycmF5KCk7XG4gICAgdGhpcy5rb1NlbGVjdGVkTGFuZ3VhZ2VUb0FkZCA9IGtvLm9ic2VydmFibGUobnVsbCk7XG4gICAgdGhpcy5rb0ZpbHRlcmVkUGFnZSA9IGtvLm9ic2VydmFibGUoKTtcbiAgICB0aGlzLmtvQ2FuTWVyZ2VMb2NhbGVXaXRoRGVmYXVsdCA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuICAgIHRoaXMua29NZXJnZUxvY2FsZVdpdGhEZWZhdWx0VGV4dCA9IGtvLmNvbXB1dGVkKGZ1bmN0aW9uKCkge1xuICAgICAgaWYgKCF0aGlzLmtvQ2FuTWVyZ2VMb2NhbGVXaXRoRGVmYXVsdCgpKSByZXR1cm4gXCJcIjtcbiAgICAgIHZhciBsb2NUZXh0ID0gdGhpcy5nZXRMb2NhbGVOYW1lKHRoaXMuZGVmYXVsdExvY2FsZSk7XG4gICAgICByZXR1cm4gZWRpdG9yTG9jYWxpemF0aW9uXG4gICAgICAgIC5nZXRTdHJpbmcoXCJlZC50cmFuc2xhdGlvbk1lcmdlTG9jYWxlV2l0aERlZmF1bHRcIilcbiAgICAgICAgW1wiZm9ybWF0XCJdKGxvY1RleHQpO1xuICAgIH0sIHRoaXMpO1xuICAgIHRoaXMua29GaWx0ZXJlZFBhZ2VzID0ga28ub2JzZXJ2YWJsZUFycmF5KFtcbiAgICAgIHtcbiAgICAgICAgdmFsdWU6IG51bGwsXG4gICAgICAgIHRleHQ6IHRoaXMuc2hvd0FsbFBhZ2VzVGV4dFxuICAgICAgfVxuICAgIF0pO1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICB0aGlzLmtvU2VsZWN0ZWRMYW5ndWFnZVRvQWRkLnN1YnNjcmliZShmdW5jdGlvbihuZXdWYWx1ZSkge1xuICAgICAgaWYgKCEhbmV3VmFsdWUpIHtcbiAgICAgICAgc2VsZi5hZGRMb2NhbGUobmV3VmFsdWUudmFsdWUpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMua29TaG93QWxsU3RyaW5ncy5zdWJzY3JpYmUoZnVuY3Rpb24obmV3VmFsdWUpIHtcbiAgICAgIHNlbGYucmVzZXQoKTtcbiAgICB9KTtcbiAgICB0aGlzLmtvRmlsdGVyZWRQYWdlLnN1YnNjcmliZShmdW5jdGlvbihuZXdWYWx1ZSkge1xuICAgICAgc2VsZi5yZXNldCgpO1xuICAgIH0pO1xuICAgIHRoaXMua29FeHBvcnRUb1NDVkZpbGUgPSBmdW5jdGlvbigpIHtcbiAgICAgIHNlbGYuZXhwb3J0VG9TQ1ZGaWxlKFwic3VydmV5X3RyYW5zbGF0aW9uLmNzdlwiKTtcbiAgICB9O1xuICAgIHRoaXMua29JbXBvcnRGcm9tU0NWRmlsZSA9IGZ1bmN0aW9uKGVsKSB7XG4gICAgICBpZiAoZWwuZmlsZXMubGVuZ3RoIDwgMSkgcmV0dXJuO1xuICAgICAgc2VsZi5pbXBvcnRGcm9tU0NWRmlsZShlbC5maWxlc1swXSk7XG4gICAgICBlbC52YWx1ZSA9IFwiXCI7XG4gICAgfTtcbiAgICB0aGlzLmtvTWVyZ2VMb2NhbGVXaXRoRGVmYXVsdCA9IGZ1bmN0aW9uKCkge1xuICAgICAgc2VsZi5tZXJnZUxvY2FsZVdpdGhEZWZhdWx0KCk7XG4gICAgfTtcbiAgICB0aGlzLnN1cnZleSA9IHN1cnZleTtcbiAgfVxuICBwdWJsaWMgZ2V0IHN1cnZleSgpOiBTdXJ2ZXkuU3VydmV5IHtcbiAgICByZXR1cm4gdGhpcy5zdXJ2ZXlWYWx1ZTtcbiAgfVxuICBwdWJsaWMgc2V0IHN1cnZleSh2YWw6IFN1cnZleS5TdXJ2ZXkpIHtcbiAgICB0aGlzLnN1cnZleVZhbHVlID0gdmFsO1xuICAgIHRoaXMudXBkYXRlRmlsdGVyZWRQYWdlcygpO1xuICAgIHRoaXMucmVzZXQoKTtcbiAgfVxuICBwdWJsaWMgZ2V0IHJvb3QoKTogVHJhbnNsYXRpb25Hcm91cCB7XG4gICAgcmV0dXJuIHRoaXMucm9vdFZhbHVlO1xuICB9XG4gIHB1YmxpYyBnZXQgZmlsdGVyZWRQYWdlKCk6IFN1cnZleS5QYWdlIHtcbiAgICByZXR1cm4gdGhpcy5rb0ZpbHRlcmVkUGFnZSgpO1xuICB9XG4gIHB1YmxpYyBzZXQgZmlsdGVyZWRQYWdlKHZhbDogU3VydmV5LlBhZ2UpIHtcbiAgICB0aGlzLmtvRmlsdGVyZWRQYWdlKHZhbCk7XG4gIH1cbiAgcHVibGljIHJlc2V0KCkge1xuICAgIHZhciByb290T2JqID0gISF0aGlzLmZpbHRlcmVkUGFnZSA/IHRoaXMuZmlsdGVyZWRQYWdlIDogdGhpcy5zdXJ2ZXk7XG4gICAgdmFyIHJvb3ROYW1lID0gISF0aGlzLmZpbHRlcmVkUGFnZSA/IHJvb3RPYmpbXCJuYW1lXCJdIDogXCJzdXJ2ZXlcIjtcbiAgICB0aGlzLnJvb3RWYWx1ZSA9IG5ldyBUcmFuc2xhdGlvbkdyb3VwKHJvb3ROYW1lLCByb290T2JqLCB0aGlzKTtcbiAgICB0aGlzLnJvb3QucmVzZXQoKTtcbiAgICB0aGlzLnJlc2V0TG9jYWxlcygpO1xuICAgIHRoaXMua29Jc0VtcHR5KCF0aGlzLnJvb3QuaGFzSXRlbXMpO1xuICAgIHRoaXMua29Sb290KHRoaXMucm9vdCk7XG4gIH1cbiAgcHVibGljIGdldCBsb2NhbGVzKCk6IEFycmF5PHN0cmluZz4ge1xuICAgIHZhciByZXMgPSBbXTtcbiAgICB2YXIgbG9jYWxlcyA9IHRoaXMua29Mb2NhbGVzKCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsb2NhbGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICByZXMucHVzaChsb2NhbGVzW2ldLmxvY2FsZSk7XG4gICAgfVxuICAgIHJldHVybiByZXM7XG4gIH1cbiAgcHVibGljIGdldCBkZWZhdWx0TG9jYWxlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuICEhdGhpcy5zdXJ2ZXkubG9jYWxlXG4gICAgICA/IHRoaXMuc3VydmV5LmxvY2FsZVxuICAgICAgOiBTdXJ2ZXkuc3VydmV5TG9jYWxpemF0aW9uLmRlZmF1bHRMb2NhbGU7XG4gIH1cbiAgcHVibGljIGdldExvY2FsZU5hbWUobG9jOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gZWRpdG9yTG9jYWxpemF0aW9uLmdldExvY2FsZU5hbWUobG9jLCB0aGlzLmRlZmF1bHRMb2NhbGUpO1xuICB9XG4gIHB1YmxpYyBoYXNMb2NhbGUobG9jYWxlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICB2YXIgbG9jYWxlcyA9IHRoaXMua29Mb2NhbGVzKCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsb2NhbGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAobG9jYWxlc1tpXS5sb2NhbGUgPT0gbG9jYWxlKSByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHB1YmxpYyBhZGRMb2NhbGUobG9jYWxlOiBzdHJpbmcpIHtcbiAgICBpZiAoIXRoaXMuaGFzTG9jYWxlKGxvY2FsZSkpIHtcbiAgICAgIHZhciBsb2NzID0gdGhpcy5sb2NhbGVzO1xuICAgICAgbG9jcy5wdXNoKGxvY2FsZSk7XG4gICAgICB0aGlzLnNldExvY2FsZXMobG9jcyk7XG4gICAgfVxuICB9XG4gIHB1YmxpYyByZXNldExvY2FsZXMoKSB7XG4gICAgdmFyIGxvY2FsZXMgPSBbXCJcIl07XG4gICAgdGhpcy5yb290LmZpbGxMb2NhbGVzKGxvY2FsZXMpO1xuICAgIHRoaXMuc2V0TG9jYWxlcyhsb2NhbGVzKTtcbiAgfVxuICBwdWJsaWMgZ2V0U2VsZWN0ZWRMb2NhbGVzKCk6IEFycmF5PHN0cmluZz4ge1xuICAgIHZhciByZXMgPSBbXTtcbiAgICB2YXIgbG9jcyA9IHRoaXMua29Mb2NhbGVzKCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsb2NzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAobG9jc1tpXS5rb1Zpc2libGUoKSkgcmVzLnB1c2gobG9jc1tpXS5sb2NhbGUpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzO1xuICB9XG4gIHB1YmxpYyBzZXRTZWxlY3RlZExvY2FsZXMoc2VsZWN0ZWRMb2NhbGVzOiBBcnJheTxzdHJpbmc+KSB7XG4gICAgc2VsZWN0ZWRMb2NhbGVzID0gc2VsZWN0ZWRMb2NhbGVzIHx8IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2VsZWN0ZWRMb2NhbGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoIXRoaXMuaGFzTG9jYWxlKHNlbGVjdGVkTG9jYWxlc1tpXSkpIHtcbiAgICAgICAgdGhpcy5hZGRMb2NhbGUoc2VsZWN0ZWRMb2NhbGVzW2ldKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdmFyIHJlcyA9IFtdO1xuICAgIHZhciBsb2NzID0gdGhpcy5rb0xvY2FsZXMoKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxvY3MubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBlbmFibGVkID0gdGhpcy5pc0xvY2FsZUVuYWJsZWQobG9jc1tpXS5sb2NhbGUpO1xuICAgICAgbG9jc1tpXS5rb1Zpc2libGUoXG4gICAgICAgIGVuYWJsZWQgJiYgc2VsZWN0ZWRMb2NhbGVzLmluZGV4T2YobG9jc1tpXS5sb2NhbGUpID4gLTFcbiAgICAgICk7XG4gICAgICBsb2NzW2ldLmtvRW5hYmxlZChlbmFibGVkKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuICBwdWJsaWMgZ2V0IHNlbGVjdExhbmd1YWdlT3B0aW9uc0NhcHRpb24oKSB7XG4gICAgcmV0dXJuIGVkaXRvckxvY2FsaXphdGlvbi5nZXRTdHJpbmcoXCJlZC50cmFuc2xhdGlvbkFkZExhbmd1YWdlXCIpO1xuICB9XG4gIHB1YmxpYyBnZXQgc2hvd0FsbFN0cmluZ3MoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMua29TaG93QWxsU3RyaW5ncygpO1xuICB9XG4gIHB1YmxpYyBzZXQgc2hvd0FsbFN0cmluZ3ModmFsOiBib29sZWFuKSB7XG4gICAgdGhpcy5rb1Nob3dBbGxTdHJpbmdzKHZhbCk7XG4gIH1cbiAgcHVibGljIGdldCBzaG93QWxsU3RyaW5nc1RleHQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gZWRpdG9yTG9jYWxpemF0aW9uLmdldFN0cmluZyhcImVkLnRyYW5zbGF0aW9uU2hvd0FsbFN0cmluZ3NcIik7XG4gIH1cbiAgcHVibGljIGdldCBzaG93QWxsUGFnZXNUZXh0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGVkaXRvckxvY2FsaXphdGlvbi5nZXRTdHJpbmcoXCJlZC50cmFuc2xhdGlvblNob3dBbGxQYWdlc1wiKTtcbiAgfVxuICBwdWJsaWMgZ2V0IG5vU3RyaW5nc1RleHQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gZWRpdG9yTG9jYWxpemF0aW9uLmdldFN0cmluZyhcImVkLnRyYW5zbGF0aW9uTm9TdHJpbmdzXCIpO1xuICB9XG4gIHB1YmxpYyBnZXQgZXhwb3J0VG9DU1ZUZXh0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGVkaXRvckxvY2FsaXphdGlvbi5nZXRTdHJpbmcoXCJlZC50cmFuc2xhdGlvbkV4cG9ydFRvU0NWQnV0dG9uXCIpO1xuICB9XG4gIHB1YmxpYyBnZXQgaW1wb3J0RnJvbUNTVlRleHQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gZWRpdG9yTG9jYWxpemF0aW9uLmdldFN0cmluZyhcImVkLnRyYW5zbGF0aW9uSW1wb3J0RnJvbVNDVkJ1dHRvblwiKTtcbiAgfVxuICBwdWJsaWMgZXhwb3J0VG9DU1YoKTogc3RyaW5nIHtcbiAgICB2YXIgcmVzID0gW107XG4gICAgdmFyIHRpdGxlID0gXCJcIjtcbiAgICB2YXIgdmlzTG9jYWxlcyA9IHRoaXMuZ2V0VmlzaWJsZUxvY2FsZXMoKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZpc0xvY2FsZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRpdGxlICs9XG4gICAgICAgIFRyYW5zbGF0aW9uLmNzdkRlbGltaXRlciArXG4gICAgICAgICghIXZpc0xvY2FsZXNbaV0gPyB2aXNMb2NhbGVzW2ldIDogXCJkZWZhdWx0XCIpO1xuICAgIH1cbiAgICByZXMucHVzaCh0aXRsZSk7XG4gICAgdmFyIGl0ZW1zSGFzaCA9IHt9O1xuICAgIHRoaXMuZmlsbEl0ZW1zSGFzaChcIlwiLCB0aGlzLnJvb3QsIGl0ZW1zSGFzaCk7XG4gICAgZm9yICh2YXIga2V5IGluIGl0ZW1zSGFzaCkge1xuICAgICAgdmFyIGxpbmUgPSBrZXk7XG4gICAgICB2YXIgaXRlbSA9IDxUcmFuc2xhdGlvbkl0ZW0+aXRlbXNIYXNoW2tleV07XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZpc0xvY2FsZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIHZhbCA9IGl0ZW0ubG9jU3RyaW5nLmdldExvY2FsZVRleHQodmlzTG9jYWxlc1tpXSk7XG4gICAgICAgIGlmICghdmFsICYmIGkgPT0gMCkge1xuICAgICAgICAgIHZhbCA9IGl0ZW0uZGVmYXVsdFZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIGxpbmUgKz0gVHJhbnNsYXRpb24uY3N2RGVsaW1pdGVyICsgdmFsO1xuICAgICAgfVxuICAgICAgcmVzLnB1c2gobGluZSk7XG4gICAgfVxuICAgIHJldHVybiByZXMuam9pbihUcmFuc2xhdGlvbi5uZXdMaW5lRGVsaW1pdGVyKTtcbiAgfVxuICBwdWJsaWMgaW1wb3J0RnJvbUNTVihzdHI6IHN0cmluZykge1xuICAgIGlmICghc3RyKSByZXR1cm47XG4gICAgdmFyIGxpbmVzID0gc3RyLnNwbGl0KFRyYW5zbGF0aW9uLm5ld0xpbmVEZWxpbWl0ZXIpO1xuICAgIGlmIChsaW5lcy5sZW5ndGggPCAyKSByZXR1cm47XG4gICAgdmFyIGxvY2FsZXMgPSB0aGlzLnJlYWRMb2NhbGVzKGxpbmVzWzBdKTtcbiAgICB2YXIgdHJhbnNsYXRpb24gPSBuZXcgVHJhbnNsYXRpb24odGhpcy5zdXJ2ZXksIHRydWUpO1xuICAgIHZhciBpdGVtc0hhc2ggPSBbXTtcbiAgICB0aGlzLmZpbGxJdGVtc0hhc2goXCJcIiwgdHJhbnNsYXRpb24ucm9vdCwgaXRlbXNIYXNoKTtcbiAgICBmb3IgKHZhciBpID0gMTsgaSA8IGxpbmVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoIWxpbmVzW2ldKSBjb250aW51ZTtcbiAgICAgIHZhciB2YWxzID0gbGluZXNbaV0uc3BsaXQoVHJhbnNsYXRpb24uY3N2RGVsaW1pdGVyKTtcbiAgICAgIHZhciBuYW1lID0gdmFsc1swXS50cmltKCk7XG4gICAgICBpZiAoIW5hbWUpIGNvbnRpbnVlO1xuICAgICAgdmFyIGl0ZW0gPSBpdGVtc0hhc2hbbmFtZV07XG4gICAgICBpZiAoIWl0ZW0pIGNvbnRpbnVlO1xuICAgICAgdGhpcy51cGRhdGVJdGVtV2l0aFN0cmluZ3MoaXRlbSwgdmFscywgbG9jYWxlcyk7XG4gICAgfVxuICAgIHRoaXMucmVzZXQoKTtcbiAgICBpZiAodGhpcy5pbXBvcnRGaW5pc2hlZENhbGxiYWNrKSB0aGlzLmltcG9ydEZpbmlzaGVkQ2FsbGJhY2soKTtcbiAgfVxuICBwdWJsaWMgZXhwb3J0VG9TQ1ZGaWxlKGZpbGVOYW1lOiBzdHJpbmcpIHtcbiAgICB2YXIgZGF0YSA9IHRoaXMuZXhwb3J0VG9DU1YoKTtcbiAgICB2YXIgYmxvYiA9IG5ldyBCbG9iKFtkYXRhXSwgeyB0eXBlOiBcInRleHQvY3N2XCIgfSk7XG4gICAgaWYgKHdpbmRvdy5uYXZpZ2F0b3IubXNTYXZlT3JPcGVuQmxvYikge1xuICAgICAgd2luZG93Lm5hdmlnYXRvci5tc1NhdmVCbG9iKGJsb2IsIGZpbGVOYW1lKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIGVsZW0gPSB3aW5kb3cuZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImFcIik7XG4gICAgICBlbGVtLmhyZWYgPSB3aW5kb3cuVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTtcbiAgICAgIGVsZW0uZG93bmxvYWQgPSBmaWxlTmFtZTtcbiAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZWxlbSk7XG4gICAgICBlbGVtLmNsaWNrKCk7XG4gICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGVsZW0pO1xuICAgIH1cbiAgfVxuICBwdWJsaWMgaW1wb3J0RnJvbVNDVkZpbGUoZmlsZTogRmlsZSkge1xuICAgIHZhciBmaWxlUmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgZmlsZVJlYWRlci5vbmxvYWQgPSBmdW5jdGlvbihlKSB7XG4gICAgICBzZWxmLmltcG9ydEZyb21DU1YoPHN0cmluZz5maWxlUmVhZGVyLnJlc3VsdCk7XG4gICAgfTtcbiAgICBmaWxlUmVhZGVyLnJlYWRBc1RleHQoZmlsZSk7XG4gIH1cbiAgcHVibGljIG1lcmdlTG9jYWxlV2l0aERlZmF1bHQoKSB7XG4gICAgaWYgKCF0aGlzLmhhc0xvY2FsZSh0aGlzLmRlZmF1bHRMb2NhbGUpKSByZXR1cm47XG4gICAgdGhpcy5yb290Lm1lcmdlTG9jYWxlV2l0aERlZmF1bHQodGhpcy5kZWZhdWx0TG9jYWxlKTtcbiAgICB0aGlzLmtvTG9jYWxlcyhbXG4gICAgICB7XG4gICAgICAgIGxvY2FsZTogXCJcIixcbiAgICAgICAga29WaXNpYmxlOiBrby5vYnNlcnZhYmxlKHRydWUpLFxuICAgICAgICBrb0VuYWJsZWQ6IGtvLm9ic2VydmFibGUodHJ1ZSlcbiAgICAgIH1cbiAgICBdKTtcbiAgICB0aGlzLnJlc2V0KCk7XG4gIH1cbiAgcHJpdmF0ZSB1cGRhdGVJdGVtV2l0aFN0cmluZ3MoXG4gICAgaXRlbTogVHJhbnNsYXRpb25JdGVtLFxuICAgIHZhbHVlczogQXJyYXk8c3RyaW5nPixcbiAgICBsb2NhbGVzOiBBcnJheTxzdHJpbmc+XG4gICkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmFsdWVzLmxlbmd0aCAtIDEgJiYgaSA8IGxvY2FsZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciB2YWwgPSB2YWx1ZXNbaSArIDFdLnRyaW0oKTtcbiAgICAgIGlmICghdmFsKSBjb250aW51ZTtcbiAgICAgIGl0ZW0ua29WYWx1ZShsb2NhbGVzW2ldKSh2YWwpO1xuICAgIH1cbiAgfVxuICBwcml2YXRlIGdldFZpc2libGVMb2NhbGVzKCk6IEFycmF5PHN0cmluZz4ge1xuICAgIHZhciByZXMgPSBbXTtcbiAgICB2YXIgbG9jYWxlcyA9IHRoaXMua29Mb2NhbGVzKCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsb2NhbGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAobG9jYWxlc1tpXS5rb1Zpc2libGUoKSkge1xuICAgICAgICByZXMucHVzaChsb2NhbGVzW2ldLmxvY2FsZSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXM7XG4gIH1cbiAgcHJpdmF0ZSByZWFkTG9jYWxlcyhzdHI6IHN0cmluZyk6IEFycmF5PHN0cmluZz4ge1xuICAgIHZhciByZXMgPSBbXTtcbiAgICBpZiAoIXN0cikgcmV0dXJuIHJlcztcbiAgICB2YXIgbG9jcyA9IHN0ci5zcGxpdChUcmFuc2xhdGlvbi5jc3ZEZWxpbWl0ZXIpO1xuICAgIGZvciAodmFyIGkgPSAxOyBpIDwgbG9jcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGxvYyA9IGxvY3NbaV0udHJpbSgpO1xuICAgICAgaWYgKGxvYyA9PSBcImRlZmF1bHRcIikgbG9jID0gXCJcIjtcbiAgICAgIHJlcy5wdXNoKGxvYyk7XG4gICAgfVxuICAgIHJldHVybiByZXM7XG4gIH1cbiAgcHJpdmF0ZSBmaWxsSXRlbXNIYXNoKFxuICAgIHBhcmVudE5hbWU6IHN0cmluZyxcbiAgICBncm91cDogVHJhbnNsYXRpb25Hcm91cCxcbiAgICBpdGVtc0hhc2g6IGFueVxuICApIHtcbiAgICB2YXIgbmFtZSA9IHBhcmVudE5hbWU7XG4gICAgaWYgKCEhbmFtZSkgbmFtZSArPSBcIi5cIjtcbiAgICBuYW1lICs9IGdyb3VwLm5hbWU7XG4gICAgdmFyIGl0ZW1zID0gZ3JvdXAubG9jSXRlbXM7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpdGVtcy5sZW5ndGg7IGkrKykge1xuICAgICAgaXRlbXNIYXNoW25hbWUgKyBcIi5cIiArIGl0ZW1zW2ldLm5hbWVdID0gaXRlbXNbaV07XG4gICAgfVxuICAgIHZhciBncm91cHMgPSBncm91cC5ncm91cHM7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBncm91cHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMuZmlsbEl0ZW1zSGFzaChuYW1lLCBncm91cHNbaV0sIGl0ZW1zSGFzaCk7XG4gICAgfVxuICB9XG4gIHByaXZhdGUgc2V0TG9jYWxlcyhsb2NzOiBBcnJheTxzdHJpbmc+KSB7XG4gICAgdmFyIGxvY2FsZXMgPSB0aGlzLmtvTG9jYWxlcygpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbG9jcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGxvYyA9IGxvY3NbaV07XG4gICAgICBpZiAodGhpcy5oYXNMb2NhbGUobG9jKSkgY29udGludWU7XG4gICAgICB2YXIgZW5hYmxlZCA9IHRoaXMuaXNMb2NhbGVFbmFibGVkKGxvYyk7XG4gICAgICBsb2NhbGVzLnB1c2goe1xuICAgICAgICBsb2NhbGU6IGxvYyxcbiAgICAgICAga29WaXNpYmxlOiBrby5vYnNlcnZhYmxlKGVuYWJsZWQpLFxuICAgICAgICBrb0VuYWJsZWQ6IGtvLm9ic2VydmFibGUoZW5hYmxlZClcbiAgICAgIH0pO1xuICAgIH1cbiAgICB0aGlzLmtvTG9jYWxlcyhsb2NhbGVzKTtcbiAgICB0aGlzLmtvQ2FuTWVyZ2VMb2NhbGVXaXRoRGVmYXVsdCh0aGlzLmhhc0xvY2FsZSh0aGlzLmRlZmF1bHRMb2NhbGUpKTtcbiAgICB0aGlzLnVwZGF0ZUF2YWlsYWJsZVRyYW5sYXRpb25zKCk7XG4gIH1cbiAgcHJpdmF0ZSBpc0xvY2FsZUVuYWJsZWQobG9jYWxlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBpZiAoIWxvY2FsZSkgcmV0dXJuIHRydWU7XG4gICAgdmFyIHN1cHBvcnRlZCA9IFN1cnZleS5zdXJ2ZXlMb2NhbGl6YXRpb24uc3VwcG9ydGVkTG9jYWxlcztcbiAgICBpZiAoIXN1cHBvcnRlZCB8fCBzdXBwb3J0ZWQubGVuZ3RoIDw9IDApIHJldHVybiB0cnVlO1xuICAgIHJldHVybiBzdXBwb3J0ZWQuaW5kZXhPZihsb2NhbGUpID4gLTE7XG4gIH1cbiAgcHJpdmF0ZSB1cGRhdGVBdmFpbGFibGVUcmFubGF0aW9ucygpIHtcbiAgICB2YXIgcmVzID0gW107XG4gICAgdmFyIGxvY2FsZXMgPSBTdXJ2ZXkuc3VydmV5TG9jYWxpemF0aW9uLmdldExvY2FsZXMoKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxvY2FsZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBsb2MgPSBsb2NhbGVzW2ldO1xuICAgICAgaWYgKCFsb2MpIGNvbnRpbnVlO1xuICAgICAgaWYgKHRoaXMuaGFzTG9jYWxlKGxvYykpIGNvbnRpbnVlO1xuICAgICAgaWYgKGxvYyA9PSB0aGlzLmRlZmF1bHRMb2NhbGUpIGNvbnRpbnVlO1xuICAgICAgcmVzLnB1c2goeyB2YWx1ZTogbG9jLCB0ZXh0OiBlZGl0b3JMb2NhbGl6YXRpb24uZ2V0TG9jYWxlTmFtZShsb2MpIH0pO1xuICAgIH1cbiAgICB0aGlzLmtvU2VsZWN0ZWRMYW5ndWFnZVRvQWRkKG51bGwpO1xuICAgIHRoaXMua29BdmFpbGFibGVMYW5ndWFnZXMocmVzKTtcbiAgICAhIXRoaXMuYXZhaWxhYmxlVHJhbmxhdGlvbnNDaGFuZ2VkQ2FsbGJhY2sgJiZcbiAgICAgIHRoaXMuYXZhaWxhYmxlVHJhbmxhdGlvbnNDaGFuZ2VkQ2FsbGJhY2soKTtcbiAgfVxuICBwcml2YXRlIHVwZGF0ZUZpbHRlcmVkUGFnZXMoKSB7XG4gICAgdmFyIHJlcyA9IFt7IHZhbHVlOiBudWxsLCB0ZXh0OiB0aGlzLnNob3dBbGxQYWdlc1RleHQgfV07XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnN1cnZleS5wYWdlcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHBhZ2UgPSB0aGlzLnN1cnZleS5wYWdlc1tpXTtcbiAgICAgIHJlcy5wdXNoKHsgdmFsdWU6IHBhZ2UsIHRleHQ6IHBhZ2UubmFtZSB9KTtcbiAgICB9XG4gICAgdGhpcy5rb0ZpbHRlcmVkUGFnZXMocmVzKTtcbiAgfVxufVxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL3RyYW5zbGF0aW9uLnRzIiwiaW1wb3J0ICogYXMga28gZnJvbSBcImtub2Nrb3V0XCI7XG5pbXBvcnQgKiBhcyBTdXJ2ZXkgZnJvbSBcInN1cnZleS1rbm9ja291dFwiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5VW5kb1JlZG8ge1xuICBwcml2YXRlIGl0ZW1zOiBBcnJheTxVbmRvUmVkb0l0ZW0+O1xuICBwcml2YXRlIGluZGV4OiBudW1iZXIgPSAtMTtcbiAgcHVibGljIGtvQ2FuVW5kbzogYW55O1xuICBrb0NhblJlZG86IGFueTtcbiAgcHVibGljIG1heGltdW1Db3VudDogbnVtYmVyID0gMTA7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuaXRlbXMgPSBbXTtcbiAgICB0aGlzLmtvQ2FuVW5kbyA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuICAgIHRoaXMua29DYW5SZWRvID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG4gIH1cbiAgcHVibGljIGNsZWFyKCkge1xuICAgIHRoaXMuaXRlbXMgPSBbXTtcbiAgICB0aGlzLmtvQ2FuVW5kbyhmYWxzZSk7XG4gICAgdGhpcy5rb0NhblJlZG8oZmFsc2UpO1xuICB9XG4gIHB1YmxpYyBzZXRDdXJyZW50KHN1cnZleTogU3VydmV5LlN1cnZleSwgc2VsZWN0ZWRPYmpOYW1lOiBzdHJpbmcpIHtcbiAgICB2YXIgaXRlbSA9IG5ldyBVbmRvUmVkb0l0ZW0oKTtcbiAgICBpdGVtLnN1cnZleUpTT04gPSBuZXcgU3VydmV5Lkpzb25PYmplY3QoKS50b0pzb25PYmplY3Qoc3VydmV5KTtcbiAgICBpdGVtLnNlbGVjdGVkT2JqTmFtZSA9IHNlbGVjdGVkT2JqTmFtZTtcbiAgICBpZiAodGhpcy5pbmRleCA8IHRoaXMuaXRlbXMubGVuZ3RoIC0gMSkge1xuICAgICAgdGhpcy5pdGVtcy5zcGxpY2UodGhpcy5pbmRleCArIDEpO1xuICAgIH1cbiAgICB0aGlzLml0ZW1zLnB1c2goaXRlbSk7XG4gICAgdGhpcy5yZW1vdmVPbGREYXRhKCk7XG4gICAgdGhpcy5pbmRleCA9IHRoaXMuaXRlbXMubGVuZ3RoIC0gMTtcbiAgICB0aGlzLnVwZGF0ZUNhblVuZG9SZWRvKCk7XG4gIH1cbiAgcHVibGljIHVuZG8oKTogVW5kb1JlZG9JdGVtIHtcbiAgICBpZiAoIXRoaXMuY2FuVW5kbykgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIHRoaXMuZG9VbmRvUmVkbygtMSk7XG4gIH1cbiAgcHVibGljIHJlZG8oKTogVW5kb1JlZG9JdGVtIHtcbiAgICBpZiAoIXRoaXMuY2FuUmVkbykgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIHRoaXMuZG9VbmRvUmVkbygxKTtcbiAgfVxuICBwcml2YXRlIHVwZGF0ZUNhblVuZG9SZWRvKCkge1xuICAgIHRoaXMua29DYW5VbmRvKHRoaXMuY2FuVW5kbyk7XG4gICAgdGhpcy5rb0NhblJlZG8odGhpcy5jYW5SZWRvKTtcbiAgfVxuICBwcml2YXRlIGRvVW5kb1JlZG8oZEluZGV4OiBudW1iZXIpOiBVbmRvUmVkb0l0ZW0ge1xuICAgIHRoaXMuaW5kZXggKz0gZEluZGV4O1xuICAgIHRoaXMudXBkYXRlQ2FuVW5kb1JlZG8oKTtcbiAgICByZXR1cm4gdGhpcy5pbmRleCA+PSAwICYmIHRoaXMuaW5kZXggPCB0aGlzLml0ZW1zLmxlbmd0aFxuICAgICAgPyB0aGlzLml0ZW1zW3RoaXMuaW5kZXhdXG4gICAgICA6IG51bGw7XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBjYW5VbmRvKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmluZGV4ID49IDEgJiYgdGhpcy5pbmRleCA8IHRoaXMuaXRlbXMubGVuZ3RoO1xuICB9XG4gIHByb3RlY3RlZCBnZXQgY2FuUmVkbygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pdGVtcy5sZW5ndGggPiAxICYmIHRoaXMuaW5kZXggPCB0aGlzLml0ZW1zLmxlbmd0aCAtIDE7XG4gIH1cbiAgcHJpdmF0ZSByZW1vdmVPbGREYXRhKCkge1xuICAgIGlmICh0aGlzLml0ZW1zLmxlbmd0aCAtIDEgPCB0aGlzLm1heGltdW1Db3VudCkgcmV0dXJuO1xuICAgIHRoaXMuaXRlbXMuc3BsaWNlKDAsIHRoaXMuaXRlbXMubGVuZ3RoIC0gdGhpcy5tYXhpbXVtQ291bnQgLSAxKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgVW5kb1JlZG9JdGVtIHtcbiAgc3VydmV5SlNPTjogYW55O1xuICBzZWxlY3RlZE9iak5hbWU6IHN0cmluZztcbn1cblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy91bmRvcmVkby50cyIsInZhciBpcyA9IGZ1bmN0aW9uIChvYmosIHR5cGUpIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvYmopLnRvTG93ZXJDYXNlKCkgPT09IChcIltvYmplY3QgXCIgKyB0eXBlICsgXCJdXCIpOyB9O1xuXG52YXIgYWRkQ2xhc3MgPSBmdW5jdGlvbiAoZWwsIGNscykge1xuICAgIHZhciBhcnIgPSBlbC5jbGFzc05hbWVcbiAgICAuc3BsaXQoL1xccysvKVxuICAgIC5maWx0ZXIoZnVuY3Rpb24gKGMpIHsgcmV0dXJuICEhYyAmJiBjID09IGNsczsgfSk7XG5cbiAgICBpZiAoIWFyci5sZW5ndGgpIHtcbiAgICAgICAgZWwuY2xhc3NOYW1lICs9IFwiIFwiICsgY2xzO1xuICAgIH1cbn07XG5cbnZhciByZW1vdmVDbGFzcyA9IGZ1bmN0aW9uIChlbCwgY2xzKSB7XG4gICAgZWwuY2xhc3NOYW1lID0gZWwuY2xhc3NOYW1lXG4gICAgLnNwbGl0KC9cXHMrLylcbiAgICAuZmlsdGVyKGZ1bmN0aW9uIChjKSB7IHJldHVybiAhIWMgJiYgYyAhPSBjbHM7IH0pXG4gICAgLmpvaW4oJyAnKTtcbn07XG5cbnZhciBSTW9kYWwgPSBmdW5jdGlvbiBSTW9kYWwoZWwsIG9wdHMpIHtcbiAgICB2YXIgdGhpcyQxID0gdGhpcztcblxuICAgIHRoaXMub3BlbmVkID0gZmFsc2U7XG5cbiAgICB0aGlzLm9wdHMgPSB7XG4gICAgICAgIGJvZHlDbGFzczogJ21vZGFsLW9wZW4nXG4gICAgICAgICwgZGlhbG9nQ2xhc3M6ICdtb2RhbC1kaWFsb2cnXG4gICAgICAgICwgZGlhbG9nT3BlbkNsYXNzOiAnYm91bmNlSW5Eb3duJ1xuICAgICAgICAsIGRpYWxvZ0Nsb3NlQ2xhc3M6ICdib3VuY2VPdXRVcCdcblxuICAgICAgICAsIGZvY3VzOiB0cnVlXG4gICAgICAgICwgZm9jdXNFbGVtZW50czogW1xuICAgICAgICAgICAgJ2FbaHJlZl0nLCAnYXJlYVtocmVmXScsICdpbnB1dDpub3QoW2Rpc2FibGVkXSk6bm90KFt0eXBlPWhpZGRlbl0pJ1xuICAgICAgICAgICAgLCAnYnV0dG9uOm5vdChbZGlzYWJsZWRdKScsICdzZWxlY3Q6bm90KFtkaXNhYmxlZF0pJ1xuICAgICAgICAgICAgLCAndGV4dGFyZWE6bm90KFtkaXNhYmxlZF0pJywgJ2lmcmFtZScsICdvYmplY3QnLCAnZW1iZWQnXG4gICAgICAgICAgICAsICcqW3RhYmluZGV4XScsICcqW2NvbnRlbnRlZGl0YWJsZV0nXG4gICAgICAgIF1cblxuICAgICAgICAsIGVzY2FwZUNsb3NlOiB0cnVlXG4gICAgICAgICwgY29udGVudDogbnVsbFxuICAgICAgICAsIGNsb3NlVGltZW91dDogNTAwXG4gICAgfTtcblxuICAgIE9iamVjdC5rZXlzKG9wdHMgfHwge30pXG4gICAgLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgICBpZiAob3B0c1trZXldICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRoaXMkMS5vcHRzW2tleV0gPSBvcHRzW2tleV07XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIHRoaXMub3ZlcmxheSA9IGVsO1xuICAgIHRoaXMuZGlhbG9nID0gZWwucXVlcnlTZWxlY3RvcigoXCIuXCIgKyAodGhpcy5vcHRzLmRpYWxvZ0NsYXNzKSkpO1xuXG4gICAgaWYgKHRoaXMub3B0cy5jb250ZW50KSB7XG4gICAgICAgIHRoaXMuY29udGVudCh0aGlzLm9wdHMuY29udGVudCk7XG4gICAgfVxufTtcblxuUk1vZGFsLnByb3RvdHlwZS5vcGVuID0gZnVuY3Rpb24gb3BlbiAoY29udGVudCkge1xuICAgICAgICB2YXIgdGhpcyQxID0gdGhpcztcblxuICAgIHRoaXMuY29udGVudChjb250ZW50KTtcblxuICAgIGlmICghaXModGhpcy5vcHRzLmJlZm9yZU9wZW4sICdmdW5jdGlvbicpKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kb09wZW4oKTtcbiAgICB9XG5cbiAgICB0aGlzLm9wdHMuYmVmb3JlT3BlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMkMS5fZG9PcGVuKCk7XG4gICAgfSk7XG59O1xuXG5STW9kYWwucHJvdG90eXBlLl9kb09wZW4gPSBmdW5jdGlvbiBfZG9PcGVuICgpIHtcbiAgICBhZGRDbGFzcyhkb2N1bWVudC5ib2R5LCB0aGlzLm9wdHMuYm9keUNsYXNzKTtcblxuICAgIHJlbW92ZUNsYXNzKHRoaXMuZGlhbG9nLCB0aGlzLm9wdHMuZGlhbG9nQ2xvc2VDbGFzcyk7XG4gICAgYWRkQ2xhc3ModGhpcy5kaWFsb2csIHRoaXMub3B0cy5kaWFsb2dPcGVuQ2xhc3MpO1xuXG4gICAgdGhpcy5vdmVybGF5LnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xuXG4gICAgaWYgKHRoaXMub3B0cy5mb2N1cykge1xuICAgICAgICB0aGlzLmZvY3VzT3V0RWxlbWVudCA9IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7XG4gICAgICAgIHRoaXMuZm9jdXMoKTtcbiAgICB9XG5cbiAgICBpZiAoaXModGhpcy5vcHRzLmFmdGVyT3BlbiwgJ2Z1bmN0aW9uJykpIHtcbiAgICAgICAgdGhpcy5vcHRzLmFmdGVyT3BlbigpO1xuICAgIH1cbiAgICB0aGlzLm9wZW5lZCA9IHRydWU7XG59O1xuXG5STW9kYWwucHJvdG90eXBlLmNsb3NlID0gZnVuY3Rpb24gY2xvc2UgKCkge1xuICAgICAgICB2YXIgdGhpcyQxID0gdGhpcztcblxuICAgIGlmICghaXModGhpcy5vcHRzLmJlZm9yZUNsb3NlLCAnZnVuY3Rpb24nKSkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZG9DbG9zZSgpO1xuICAgIH1cblxuICAgIHRoaXMub3B0cy5iZWZvcmVDbG9zZShmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMkMS5fZG9DbG9zZSgpO1xuICAgIH0pO1xufTtcblxuUk1vZGFsLnByb3RvdHlwZS5fZG9DbG9zZSA9IGZ1bmN0aW9uIF9kb0Nsb3NlICgpIHtcbiAgICAgICAgdmFyIHRoaXMkMSA9IHRoaXM7XG5cbiAgICByZW1vdmVDbGFzcyh0aGlzLmRpYWxvZywgdGhpcy5vcHRzLmRpYWxvZ09wZW5DbGFzcyk7XG4gICAgYWRkQ2xhc3ModGhpcy5kaWFsb2csIHRoaXMub3B0cy5kaWFsb2dDbG9zZUNsYXNzKTtcblxuICAgIHJlbW92ZUNsYXNzKGRvY3VtZW50LmJvZHksIHRoaXMub3B0cy5ib2R5Q2xhc3MpO1xuXG4gICAgaWYgKHRoaXMub3B0cy5mb2N1cykge1xuICAgICAgICB0aGlzLmZvY3VzKHRoaXMuZm9jdXNPdXRFbGVtZW50KTtcbiAgICB9XG5cbiAgICBpZiAoaXModGhpcy5vcHRzLmFmdGVyQ2xvc2UsICdmdW5jdGlvbicpKSB7XG4gICAgICAgIHRoaXMub3B0cy5hZnRlckNsb3NlKCk7XG4gICAgfVxuXG4gICAgdGhpcy5vcGVuZWQgPSBmYWxzZTtcbiAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcyQxLm92ZXJsYXkuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICB9LCB0aGlzLm9wdHMuY2xvc2VUaW1lb3V0KTtcbn07XG5cblJNb2RhbC5wcm90b3R5cGUuY29udGVudCA9IGZ1bmN0aW9uIGNvbnRlbnQgKGh0bWwpIHtcbiAgICBpZiAoaHRtbCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRpYWxvZy5pbm5lckhUTUw7XG4gICAgfVxuXG4gICAgdGhpcy5kaWFsb2cuaW5uZXJIVE1MID0gaHRtbDtcbn07XG5cblJNb2RhbC5wcm90b3R5cGUuZWxlbWVudHMgPSBmdW5jdGlvbiBlbGVtZW50cyAoc2VsZWN0b3IsIGZhbGxiYWNrKSB7XG4gICAgZmFsbGJhY2sgPSBmYWxsYmFjayB8fCB3aW5kb3cubmF2aWdhdG9yLmFwcFZlcnNpb24uaW5kZXhPZignTVNJRSA5LjAnKSA+IC0xO1xuICAgIHNlbGVjdG9yID0gaXMoc2VsZWN0b3IsICdhcnJheScpID8gc2VsZWN0b3Iuam9pbignLCcpIDogc2VsZWN0b3I7XG5cbiAgICByZXR1cm4gW10uZmlsdGVyLmNhbGwoXG4gICAgICAgIHRoaXMuZGlhbG9nLnF1ZXJ5U2VsZWN0b3JBbGwoc2VsZWN0b3IpXG4gICAgICAgICwgZnVuY3Rpb24gKGVsZW1lbnQpIHtcbiAgICAgICAgICAgIGlmIChmYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIHZhciBzdHlsZSA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpO1xuICAgICAgICAgICAgICAgIHJldHVybiBzdHlsZS5kaXNwbGF5ICE9PSAnbm9uZScgJiYgc3R5bGUudmlzaWJpbGl0eSAhPT0gJ2hpZGRlbic7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBlbGVtZW50Lm9mZnNldFBhcmVudCAhPT0gbnVsbDtcbiAgICAgICAgfVxuICAgICk7XG59O1xuXG5STW9kYWwucHJvdG90eXBlLmZvY3VzID0gZnVuY3Rpb24gZm9jdXMgKGVsKSB7XG4gICAgZWwgPSBlbCB8fCB0aGlzLmVsZW1lbnRzKHRoaXMub3B0cy5mb2N1c0VsZW1lbnRzKVswXSB8fCB0aGlzLmRpYWxvZy5maXJzdENoaWxkO1xuXG4gICAgaWYgKGVsICYmIGlzKGVsLmZvY3VzLCAnZnVuY3Rpb24nKSkge1xuICAgICAgICBlbC5mb2N1cygpO1xuICAgIH1cbn07XG5cblJNb2RhbC5wcm90b3R5cGUua2V5ZG93biA9IGZ1bmN0aW9uIGtleWRvd24gKGV2KSB7XG4gICAgaWYgKHRoaXMub3B0cy5lc2NhcGVDbG9zZSAmJiBldi53aGljaCA9PSAyNykge1xuICAgICAgICB0aGlzLmNsb3NlKCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc3RvcEV2ZW50KCkge1xuICAgICAgICBldi5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBldi5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vcGVuZWQgJiYgZXYud2hpY2ggPT0gOSAmJiB0aGlzLmRpYWxvZy5jb250YWlucyhldi50YXJnZXQpKSB7XG4gICAgICAgIHZhciBlbGVtZW50cyA9IHRoaXMuZWxlbWVudHModGhpcy5vcHRzLmZvY3VzRWxlbWVudHMpXG4gICAgICAgICAgICAsIGZpcnN0ID0gZWxlbWVudHNbMF1cbiAgICAgICAgICAgICwgbGFzdCA9IGVsZW1lbnRzW2VsZW1lbnRzLmxlbmd0aCAtIDFdO1xuXG4gICAgICAgIGlmIChmaXJzdCA9PSBsYXN0KSB7XG4gICAgICAgICAgICBzdG9wRXZlbnQoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChldi50YXJnZXQgPT0gZmlyc3QgJiYgZXYuc2hpZnRLZXkpIHtcbiAgICAgICAgICAgIHN0b3BFdmVudCgpO1xuICAgICAgICAgICAgbGFzdC5mb2N1cygpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGV2LnRhcmdldCA9PSBsYXN0ICYmICFldi5zaGlmdEtleSkge1xuICAgICAgICAgICAgc3RvcEV2ZW50KCk7XG4gICAgICAgICAgICBmaXJzdC5mb2N1cygpO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuUk1vZGFsLnByb3RvdHlwZS52ZXJzaW9uID0gJzEuMC4zMSc7XG5STW9kYWwudmVyc2lvbiA9ICcxLjAuMzEnO1xuXG5leHBvcnQgZGVmYXVsdCBSTW9kYWw7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5lcy5qcy5tYXBcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9ybW9kYWwvaW5kZXguZXMuanNcbi8vIG1vZHVsZSBpZCA9IDQzXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsImltcG9ydCAqIGFzIFN1cnZleSBmcm9tIFwic3VydmV5LWtub2Nrb3V0XCI7XG5pbXBvcnQgeyBJU3VydmV5T2JqZWN0RWRpdG9yT3B0aW9ucyB9IGZyb20gXCIuL3Byb3BlcnR5RWRpdG9ycy9wcm9wZXJ0eUVkaXRvckJhc2VcIjtcblxuZXhwb3J0IGNsYXNzIEV4cHJlc3Npb25Ub0Rpc3BsYXlUZXh0IHtcbiAgcHJpdmF0ZSBjdXJyZW50UXVlc3Rpb246IFN1cnZleS5RdWVzdGlvbjtcbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIHN1cnZleTogU3VydmV5LlN1cnZleU1vZGVsLFxuICAgIHByaXZhdGUgb3B0aW9uczogSVN1cnZleU9iamVjdEVkaXRvck9wdGlvbnMgPSBudWxsXG4gICkge31cbiAgcHVibGljIHRvRGlzcGxheVRleHQoZXhwcmVzc2lvbjogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBpZiAoXG4gICAgICAhdGhpcy5zdXJ2ZXkgfHxcbiAgICAgICghIXRoaXMub3B0aW9ucyAmJiAhdGhpcy5vcHRpb25zLnNob3dUaXRsZXNJbkV4cHJlc3Npb25zKVxuICAgIClcbiAgICAgIHJldHVybiBleHByZXNzaW9uO1xuICAgIHZhciBwYXJzZXIgPSBuZXcgU3VydmV5LkNvbmRpdGlvbnNQYXJzZXIoKTtcbiAgICB2YXIgbm9kZSA9IHBhcnNlci5wYXJzZUV4cHJlc3Npb24oZXhwcmVzc2lvbik7XG4gICAgaWYgKCFub2RlKSByZXR1cm4gZXhwcmVzc2lvbjtcbiAgICBpZiAoISFub2RlW1wiZ2V0VHlwZVwiXSkgcmV0dXJuIHRoaXMudG9EaXNwbGF5VGV4dENvcmUobm9kZSwgZXhwcmVzc2lvbik7XG4gICAgdmFyIHZhcmlhYmxlcyA9IFtdO1xuICAgIG5vZGUuc2V0VmFyaWFibGVzKHZhcmlhYmxlcyk7XG4gICAgcmV0dXJuIHRoaXMucmVwbGFjZVZhcmlhYmxlcyhleHByZXNzaW9uLCB2YXJpYWJsZXMpO1xuICB9XG4gIHByaXZhdGUgdG9EaXNwbGF5VGV4dENvcmUobm9kZTogU3VydmV5Lk9wZXJhbmQsIGV4cHJlc3Npb246IHN0cmluZyk6IHN0cmluZyB7XG4gICAgdGhpcy5jdXJyZW50UXVlc3Rpb24gPSBudWxsO1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICB2YXIgc3RyRnVuYyA9IGZ1bmN0aW9uKG9wOiBTdXJ2ZXkuT3BlcmFuZCk6IHN0cmluZyB7XG4gICAgICBpZiAob3BbXCJnZXRUeXBlXCJdKCkgPT0gXCJ2YXJpYWJsZVwiKSB7XG4gICAgICAgIHJldHVybiBzZWxmLmdldFF1ZXN0aW9uVGV4dCg8U3VydmV5LlZhcmlhYmxlPm9wKTtcbiAgICAgIH1cbiAgICAgIGlmIChvcFtcImdldFR5cGVcIl0oKSA9PSBcImNvbnN0XCIpIHtcbiAgICAgICAgcmV0dXJuIHNlbGYuZ2V0RGlzcGxheVRleHQoPFN1cnZleS5Db25zdD5vcCk7XG4gICAgICB9XG4gICAgICBpZiAob3BbXCJnZXRUeXBlXCJdKCkgPT0gXCJiaW5hcnlcIikge1xuICAgICAgICBzZWxmLnByb2NlZWRCaW5hcnkoPFN1cnZleS5CaW5hcnlPcGVyYW5kPm9wKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfTtcbiAgICByZXR1cm4gKDxhbnk+bm9kZSlbXCJ0b1N0cmluZ1wiXShzdHJGdW5jKTtcbiAgfVxuICBwcml2YXRlIGdldFF1ZXN0aW9uVGV4dChvcDogU3VydmV5LlZhcmlhYmxlKTogc3RyaW5nIHtcbiAgICB2YXIgcXVlc3Rpb24gPSB0aGlzLnN1cnZleS5nZXRRdWVzdGlvbkJ5TmFtZShvcFtcInZhcmlhYmxlXCJdKTtcbiAgICBpZiAoIXF1ZXN0aW9uIHx8ICFxdWVzdGlvbi50aXRsZSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICByZXR1cm4gXCJ7XCIgKyBxdWVzdGlvbi50aXRsZSArIFwifVwiO1xuICB9XG4gIHByaXZhdGUgZ2V0RGlzcGxheVRleHQob3A6IFN1cnZleS5Db25zdCk6IHN0cmluZyB7XG4gICAgaWYgKCF0aGlzLmN1cnJlbnRRdWVzdGlvbikgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB2YXIgcmVzID0gKDxhbnk+dGhpcy5jdXJyZW50UXVlc3Rpb24pW1wiZ2V0RGlzcGxheVZhbHVlXCJdKFxuICAgICAgdHJ1ZSxcbiAgICAgIG9wW1wiY29ycmVjdFZhbHVlXCJdXG4gICAgKTtcbiAgICByZXR1cm4gISFyZXMgPyBuZXcgU3VydmV5LkNvbnN0KHJlcykudG9TdHJpbmcoKSA6IHVuZGVmaW5lZDtcbiAgfVxuICBwcml2YXRlIHByb2NlZWRCaW5hcnkob3A6IFN1cnZleS5CaW5hcnlPcGVyYW5kKSB7XG4gICAgaWYgKG9wW1wiaXNBcml0aG1ldGljXCJdIHx8IG9wW1wiaXNDb25qdW5jdGlvblwiXSkge1xuICAgICAgdGhpcy5jdXJyZW50UXVlc3Rpb24gPSBudWxsO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmN1cnJlbnRRdWVzdGlvbiA9IHRoaXMuZ2V0UXVlc3Rpb25Gcm9tT3BlcmFuZHMoXG4gICAgICBvcFtcImxlZnRPcGVyYW5kXCJdLFxuICAgICAgb3BbXCJyaWdodE9wZXJhbmRcIl1cbiAgICApO1xuICAgIGlmICghdGhpcy5jdXJyZW50UXVlc3Rpb24pIHtcbiAgICAgIHRoaXMuY3VycmVudFF1ZXN0aW9uID0gdGhpcy5nZXRRdWVzdGlvbkZyb21PcGVyYW5kcyhcbiAgICAgICAgb3BbXCJyaWdodE9wZXJhbmRcIl0sXG4gICAgICAgIG9wW1wibGVmdE9wZXJhbmRcIl1cbiAgICAgICk7XG4gICAgfVxuICB9XG4gIHByaXZhdGUgZ2V0UXVlc3Rpb25Gcm9tT3BlcmFuZHMob3AxOiBTdXJ2ZXkuT3BlcmFuZCwgb3AyOiBTdXJ2ZXkuT3BlcmFuZCkge1xuICAgIGlmICghb3AxIHx8ICFvcDIpIHJldHVybiBudWxsO1xuICAgIGlmIChvcDFbXCJnZXRUeXBlXCJdKCkgIT0gXCJ2YXJpYWJsZVwiKSByZXR1cm4gbnVsbDtcbiAgICB2YXIgb3AyVHlwZSA9IG9wMltcImdldFR5cGVcIl0oKTtcbiAgICBpZiAob3AyVHlwZSAhPSBcImNvbnN0XCIgJiYgb3AyVHlwZSAhPSBcImZ1bmN0aW9uXCIgJiYgb3AyVHlwZSAhPSBcImFycmF5XCIpXG4gICAgICByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gdGhpcy5zdXJ2ZXkuZ2V0UXVlc3Rpb25CeU5hbWUoKDxTdXJ2ZXkuVmFyaWFibGU+b3AxKVtcInZhcmlhYmxlXCJdKTtcbiAgfVxuICBwcml2YXRlIHJlcGxhY2VWYXJpYWJsZXMoXG4gICAgZXhwcmVzc2lvbjogc3RyaW5nLFxuICAgIHZhcmlhYmxlczogQXJyYXk8c3RyaW5nPlxuICApOiBzdHJpbmcge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmFyaWFibGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBleHByZXNzaW9uID0gdGhpcy5yZXBsYWNlVmFyaWFibGUoZXhwcmVzc2lvbiwgdmFyaWFibGVzW2ldKTtcbiAgICB9XG4gICAgcmV0dXJuIGV4cHJlc3Npb247XG4gIH1cbiAgcHJpdmF0ZSByZXBsYWNlVmFyaWFibGUoZXhwcmVzc2lvbjogc3RyaW5nLCB2YXJpYWJsZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICB2YXIgcXVlc3Rpb24gPSB0aGlzLnN1cnZleS5nZXRRdWVzdGlvbkJ5TmFtZSh2YXJpYWJsZSk7XG4gICAgaWYgKCFxdWVzdGlvbiB8fCAhcXVlc3Rpb24udGl0bGUpIHJldHVybiBleHByZXNzaW9uO1xuICAgIHJldHVybiBleHByZXNzaW9uLnJlcGxhY2UoXCJ7XCIgKyB2YXJpYWJsZSArIFwifVwiLCBcIntcIiArIHF1ZXN0aW9uLnRpdGxlICsgXCJ9XCIpO1xuICB9XG59XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvZXhwcmVzc2lvblRvRGlzcGxheVRleHQudHMiLCIvLyByZW1vdmVkIGJ5IGV4dHJhY3QtdGV4dC13ZWJwYWNrLXBsdWdpblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vc3JjL21haW4uc2Nzc1xuLy8gbW9kdWxlIGlkID0gNDVcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiLy8gcmVtb3ZlZCBieSBleHRyYWN0LXRleHQtd2VicGFjay1wbHVnaW5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL3NyYy91dGlscy9jdXN0b20tY2hlY2tib3guc2Nzc1xuLy8gbW9kdWxlIGlkID0gNDZcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiLy8gcmVtb3ZlZCBieSBleHRyYWN0LXRleHQtd2VicGFjay1wbHVnaW5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL3NyYy91dGlscy9jdXN0b20tc2VsZWN0LnNjc3Ncbi8vIG1vZHVsZSBpZCA9IDQ3XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIi8vIHJlbW92ZWQgYnkgZXh0cmFjdC10ZXh0LXdlYnBhY2stcGx1Z2luXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9zcmMvdXRpbHMvZGRtZW51LnNjc3Ncbi8vIG1vZHVsZSBpZCA9IDQ4XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsImltcG9ydCAqIGFzIGtvIGZyb20gXCJrbm9ja291dFwiO1xuaW1wb3J0IHtcbiAgcmVnaXN0ZXJBZG9ybmVyLFxuICBTdXJ2ZXlGb3JEZXNpZ25lcixcbiAgSVN1cnZleU9iamVjdE1lbnVJdGVtXG59IGZyb20gXCIuLi9zdXJ2ZXlqc09iamVjdHNcIjtcbmltcG9ydCBcIi4vZmxvd3BhbmVsLWFjdGlvbnMuc2Nzc1wiO1xudmFyIHRlbXBsYXRlSHRtbCA9IHJlcXVpcmUoXCJodG1sLWxvYWRlcj9pbnRlcnBvbGF0ZSF2YWwtbG9hZGVyIS4vZmxvd3BhbmVsLWFjdGlvbnMuaHRtbFwiKTtcbmltcG9ydCB7IFF1ZXN0aW9uQWN0aW9uc0Fkb3JuZXIgfSBmcm9tIFwiLi9xdWVzdGlvbi1hY3Rpb25zXCI7XG4vL2ltcG9ydCB7IFN1cnZleSB9IGZyb20gJ3N1cnZleS1rbm9ja291dCc7XG5cbmV4cG9ydCBjbGFzcyBGbG93UGFuZWxBY3Rpb25zQWRvcm5lciBleHRlbmRzIFF1ZXN0aW9uQWN0aW9uc0Fkb3JuZXIge1xuICBjb25zdHJ1Y3RvcihxdWVzdGlvbiwgZWRpdG9yLCBwcml2YXRlIGFkb3JuZXJFbGVtZW50OiBIVE1MRWxlbWVudCkge1xuICAgIHN1cGVyKHF1ZXN0aW9uLCBlZGl0b3IpO1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICB2YXIgc3VydmV5Rm9yRGVzZ25lcjogU3VydmV5Rm9yRGVzaWduZXIgPSBlZGl0b3Iuc3VydmV5O1xuICAgIHZhciBmUGFuZWwgPSBzZWxmLmFkb3JuZXJFbGVtZW50LnBhcmVudEVsZW1lbnQucGFyZW50RWxlbWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZShcbiAgICAgIFwiZi1wYW5lbFwiXG4gICAgKVswXTtcbiAgICB2YXIgY3JlYXRlV3JhcHBpbmdGdW5jdGlvbiA9IHRhZyA9PiAoKSA9PiB7XG4gICAgICB2YXIgc2VsZWN0aW9uID0gZG9jdW1lbnQuZ2V0U2VsZWN0aW9uKCk7XG4gICAgICBpZiAoISFzZWxlY3Rpb24gJiYgc2VsZWN0aW9uLnJhbmdlQ291bnQgPiAwKSB7XG4gICAgICAgIHZhciBzZWxlY3RlZFRleHQgPSBzZWxlY3Rpb24udG9TdHJpbmcoKTtcbiAgICAgICAgaWYgKCEhc2VsZWN0ZWRUZXh0KSB7XG4gICAgICAgICAgcXVlc3Rpb24uY29udGVudCA9IHF1ZXN0aW9uLmNvbnRlbnQucmVwbGFjZShcbiAgICAgICAgICAgIHNlbGVjdGVkVGV4dCxcbiAgICAgICAgICAgIFwiPFwiICsgdGFnICsgXCI+XCIgKyBzZWxlY3RlZFRleHQgKyBcIjwvXCIgKyB0YWcgKyBcIj5cIlxuICAgICAgICAgICk7XG4gICAgICAgICAgLy8gdmFyIHJhbmdlID0gc2VsZWN0aW9uLmdldFJhbmdlQXQoMCk7XG4gICAgICAgICAgLy8gcmFuZ2UuZGVsZXRlQ29udGVudHMoKTtcbiAgICAgICAgICAvLyByYW5nZS5pbnNlcnROb2RlKFxuICAgICAgICAgIC8vICAgZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoXG4gICAgICAgICAgLy8gICAgIFwiPFwiICsgdGFnICsgXCI+XCIgKyBzZWxlY3RlZFRleHQgKyBcIjwvXCIgKyB0YWcgKyBcIj5cIlxuICAgICAgICAgIC8vICAgKVxuICAgICAgICAgIC8vICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICAgIHRoaXMuYWN0aW9ucy5zcGxpY2UoMCwgMCwge1xuICAgICAgbmFtZTogXCJib2xkXCIsXG4gICAgICB0ZXh0OiB0aGlzLmxvY2FsaXplKFwiZWQuYm9sZFwiKSB8fCBcIkJcIixcbiAgICAgIG9uQ2xpY2s6IGNyZWF0ZVdyYXBwaW5nRnVuY3Rpb24oXCJiXCIpXG4gICAgfSk7XG4gICAgdGhpcy5hY3Rpb25zLnNwbGljZSgxLCAwLCB7XG4gICAgICBuYW1lOiBcIml0YWxpY1wiLFxuICAgICAgdGV4dDogdGhpcy5sb2NhbGl6ZShcImVkLml0YWxpY1wiKSB8fCBcIklcIixcbiAgICAgIG9uQ2xpY2s6IGNyZWF0ZVdyYXBwaW5nRnVuY3Rpb24oXCJpXCIpXG4gICAgfSk7XG4gICAgdGhpcy5hY3Rpb25zLnNwbGljZSgyLCAwLCB7XG4gICAgICBuYW1lOiBcInVuZGVybGluZVwiLFxuICAgICAgdGV4dDogdGhpcy5sb2NhbGl6ZShcImVkLnVuZGVybGluZVwiKSB8fCBcIlVcIixcbiAgICAgIG9uQ2xpY2s6IGNyZWF0ZVdyYXBwaW5nRnVuY3Rpb24oXCJ1XCIpXG4gICAgfSk7XG4gICAgdGhpcy5hY3Rpb25zLnNwbGljZSgzLCAwLCA8YW55PntcbiAgICAgIG5hbWU6IFwiZnBBZGRRdWVzdGlvblwiLFxuICAgICAgdGV4dDogdGhpcy5sb2NhbGl6ZShcImVkLmZwQWRkUXVlc3Rpb25cIiksXG4gICAgICB0aXRsZTogdGhpcy5sb2NhbGl6ZShcImVkLmZwQWRkUXVlc3Rpb25cIiksXG4gICAgICBoYXNUaXRsZTogdHJ1ZSxcbiAgICAgIHRlbXBsYXRlOiBcImZwLWFkZC1xdWVzdGlvblwiLFxuICAgICAgYXZhaWxhYmxlVHlwZXM6IFtcInRleHRcIiwgXCJib29sZWFuXCIsIFwicmFkaW9ncm91cFwiLCBcImNoZWNrYm94XCJdLFxuICAgICAgb25BZGRRdWVzdGlvbjogPGFueT4oKGRhdGEsIGV2ZW50KSA9PiB7XG4gICAgICAgIHZhciBxdWVzdGlvblR5cGUgPSBldmVudC50YXJnZXQudmFsdWU7XG4gICAgICAgIGlmICghIXF1ZXN0aW9uVHlwZSkge1xuICAgICAgICAgIHZhciBuZXdFbGVsZW50TmFtZSA9IGVkaXRvci5nZXROZXdOYW1lKHF1ZXN0aW9uVHlwZSk7XG4gICAgICAgICAgcXVlc3Rpb24uYWRkTmV3UXVlc3Rpb24ocXVlc3Rpb25UeXBlLCBuZXdFbGVsZW50TmFtZSk7XG4gICAgICAgICAgLy8gcXVlc3Rpb24uY29udGVudCArPSBcIntcIiArIG5ld0VsZWxlbnROYW1lICsgXCJ9XCI7XG4gICAgICAgICAgLy8gdmFyIHNlbGVjdGlvbiA9IGRvY3VtZW50LmdldFNlbGVjdGlvbigpO1xuICAgICAgICAgIC8vIGlmICghIXNlbGVjdGlvbikge1xuICAgICAgICAgIC8vICAgdmFyIHJhbmdlID0gbmV3IFJhbmdlKCk7XG4gICAgICAgICAgLy8gICBzZWxlY3Rpb24uYWRkUmFuZ2UocmFuZ2UpO1xuICAgICAgICAgIC8vICAgcmFuZ2UuaW5zZXJ0Tm9kZShcbiAgICAgICAgICAvLyAgICAgZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoXCJ7XCIgKyBuZXdFbGVsZW50TmFtZSArIFwifVwiKVxuICAgICAgICAgIC8vICAgKTtcbiAgICAgICAgICAvLyB9XG4gICAgICAgICAgZXZlbnQudGFyZ2V0LnZhbHVlID0gXCJcIjtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9KTtcbiAgICB0aGlzLmFjdGlvbnMuc3BsaWNlKDQsIDAsIDxhbnk+eyB0ZW1wbGF0ZTogXCJhY3Rpb24tc2VwYXJhdG9yXCIgfSk7XG4gIH1cbn1cblxua28uY29tcG9uZW50cy5yZWdpc3RlcihcImZsb3dwYW5lbC1hY3Rpb25zXCIsIHtcbiAgdmlld01vZGVsOiB7XG4gICAgY3JlYXRlVmlld01vZGVsOiAocGFyYW1zLCBjb21wb25lbnRJbmZvKSA9PlxuICAgICAgbmV3IEZsb3dQYW5lbEFjdGlvbnNBZG9ybmVyKHBhcmFtcy5xdWVzdGlvbiwgcGFyYW1zLmVkaXRvciwgPEhUTUxFbGVtZW50PihcbiAgICAgICAgY29tcG9uZW50SW5mby5lbGVtZW50XG4gICAgICApKVxuICB9LFxuICB0ZW1wbGF0ZTogdGVtcGxhdGVIdG1sXG59KTtcblxuZXhwb3J0IHZhciBmbG93cGFuZWxBY3Rpb25zQWRvcm5lciA9IHtcbiAgZ2V0TWFya2VyQ2xhc3M6IG1vZGVsID0+IHtcbiAgICByZXR1cm4gbW9kZWwuZ2V0VHlwZSgpID09PSBcImZsb3dwYW5lbFwiID8gXCJwYW5lbF9hY3Rpb25zXCIgOiBcIlwiO1xuICB9LFxuICBnZXRFbGVtZW50TmFtZTogbW9kZWwgPT4gXCJjb250YWluZXJcIixcbiAgYWZ0ZXJSZW5kZXI6IChlbGVtZW50czogSFRNTEVsZW1lbnRbXSwgbW9kZWwsIGVkaXRvcikgPT4ge1xuICAgIHZhciBkZWNvcmF0aW9uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICBkZWNvcmF0aW9uLmNsYXNzTmFtZSA9IFwic3ZkYS1xdWVzdGlvbi1hY3Rpb25zXCI7XG4gICAgZGVjb3JhdGlvbi5pbm5lckhUTUwgPVxuICAgICAgXCI8Zmxvd3BhbmVsLWFjdGlvbnMgcGFyYW1zPSdxdWVzdGlvbjogbW9kZWwsIGVkaXRvcjogZWRpdG9yJz48L3F1ZXN0aW9uLWZsb3dwYW5lbD5cIjtcbiAgICBlbGVtZW50c1swXS5hcHBlbmRDaGlsZChkZWNvcmF0aW9uKTtcbiAgICBrby5hcHBseUJpbmRpbmdzKHsgbW9kZWw6IG1vZGVsLCBlZGl0b3I6IGVkaXRvciB9LCBkZWNvcmF0aW9uKTtcbiAgICBrby50YXNrcy5ydW5FYXJseSgpO1xuICAgIGVkaXRvci5vbkFkb3JuZXJSZW5kZXJlZENhbGxiYWNrKG1vZGVsLCBcImZsb3dwYW5lbC1hY3Rpb25zXCIsIGRlY29yYXRpb24pO1xuICB9XG59O1xuXG5yZWdpc3RlckFkb3JuZXIoXCJmbG93cGFuZWwtYWN0aW9uc1wiLCBmbG93cGFuZWxBY3Rpb25zQWRvcm5lcik7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvYWRvcm5lcnMvZmxvd3BhbmVsLWFjdGlvbnMudHMiLCJpbXBvcnQgKiBhcyBrbyBmcm9tIFwia25vY2tvdXRcIjtcbmltcG9ydCAqIGFzIFN1cnZleSBmcm9tIFwic3VydmV5LWtub2Nrb3V0XCI7XG5pbXBvcnQgeyByZWdpc3RlckFkb3JuZXIgfSBmcm9tIFwiLi4vc3VydmV5anNPYmplY3RzXCI7XG5pbXBvcnQgeyBlZGl0b3JMb2NhbGl6YXRpb24gfSBmcm9tIFwiLi4vZWRpdG9yTG9jYWxpemF0aW9uXCI7XG5pbXBvcnQgU29ydGFibGUgZnJvbSBcInNvcnRhYmxlanNcIjtcbmltcG9ydCB7IFN1cnZleUNyZWF0b3IgfSBmcm9tIFwiLi4vZWRpdG9yXCI7XG5pbXBvcnQgeyBjcmVhdGVBZGRJdGVtRWxlbWVudCB9IGZyb20gXCIuL2l0ZW0tZWRpdG9yXCI7XG5pbXBvcnQgeyBnZXROZXh0VmFsdWUgfSBmcm9tIFwiLi4vdXRpbHMvdXRpbHNcIjtcblxuaW1wb3J0IFwiLi9pbWFnZS1pdGVtcy5zY3NzXCI7XG5pbXBvcnQgeyBRdWVzdGlvblNlbGVjdEJhc2UgfSBmcm9tIFwic3VydmV5LWtub2Nrb3V0XCI7XG52YXIgdGVtcGxhdGVIdG1sID0gcmVxdWlyZShcImh0bWwtbG9hZGVyP2ludGVycG9sYXRlIXZhbC1sb2FkZXIhLi9pbWFnZS1pdGVtcy5odG1sXCIpO1xuXG5jbGFzcyBJbWFnZUl0ZW1JbnBsYWNlRWRpdG9yIHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBuYW1lOiBzdHJpbmcsXG4gICAgcHJpdmF0ZSBxdWVzdGlvbjogUXVlc3Rpb25TZWxlY3RCYXNlLFxuICAgIHByaXZhdGUgaXRlbSxcbiAgICBwcml2YXRlIHJvb3RFbGVtZW50LFxuICAgIHByaXZhdGUgZWRpdG9yOiBTdXJ2ZXlDcmVhdG9yLFxuICAgIHByaXZhdGUgaXRlbXNSb290XG4gICkgeyB9XG5cbiAgZGVsZXRlSXRlbShtb2RlbDogSW1hZ2VJdGVtSW5wbGFjZUVkaXRvciwgZXZlbnQpIHtcbiAgICBpZiAobW9kZWwucXVlc3Rpb24uY2hvaWNlcy5sZW5ndGggPiAxKSB7XG4gICAgICB2YXIgaW5kZXggPSBtb2RlbC5xdWVzdGlvbi5jaG9pY2VzLmluZGV4T2YobW9kZWwuaXRlbSk7XG4gICAgICBtb2RlbC5xdWVzdGlvbi5jaG9pY2VzLnNwbGljZShpbmRleCwgMSk7XG4gICAgICB0aGlzLmVkaXRvci5vblF1ZXN0aW9uRWRpdG9yQ2hhbmdlZCh0aGlzLnF1ZXN0aW9uKTtcbiAgICB9XG4gIH1cblxuICBnZXQgaXNMYXN0SXRlbSgpIHtcbiAgICByZXR1cm4gdGhpcy5xdWVzdGlvbi5jaG9pY2VzLmxlbmd0aCA9PT0gMTtcbiAgfVxuXG4gIGNob29zZUltYWdlKG1vZGVsLCBldmVudCkge1xuICAgIHZhciBmaWxlSW5wdXQgPSB0aGlzLml0ZW1zUm9vdC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFxuICAgICAgXCJzdmRhLWNob29zZS1maWxlXCJcbiAgICApWzBdO1xuICAgIGZpbGVJbnB1dC52YWx1ZSA9IFwiXCI7XG4gICAgZmlsZUlucHV0Lm9uY2hhbmdlID0gdGhpcy5pbWFnZUNob29zZW47XG4gICAgZmlsZUlucHV0LmNsaWNrKCk7XG4gIH1cblxuICBpbWFnZUNob29zZW4gPSBldmVudCA9PiB7XG4gICAgdmFyIGlucHV0ID0gdGhpcy5pdGVtc1Jvb3QuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcInN2ZGEtY2hvb3NlLWZpbGVcIilbMF07XG4gICAgaWYgKCF3aW5kb3dbXCJGaWxlUmVhZGVyXCJdKSByZXR1cm47XG4gICAgaWYgKCFpbnB1dCB8fCAhaW5wdXQuZmlsZXMgfHwgaW5wdXQuZmlsZXMubGVuZ3RoIDwgMSkgcmV0dXJuO1xuICAgIGxldCBmaWxlcyA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaW5wdXQuZmlsZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGZpbGVzLnB1c2goaW5wdXQuZmlsZXNbaV0pO1xuICAgIH1cbiAgICB0aGlzLnZhbHVlQ2hhbmdlZCAmJiB0aGlzLnZhbHVlQ2hhbmdlZChmaWxlcyk7XG4gIH07XG5cbiAgcHVibGljIGdldExvY1N0cmluZyhzdHI6IHN0cmluZykge1xuICAgIHJldHVybiBlZGl0b3JMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKHN0cik7XG4gIH1cblxuICB2YWx1ZUNoYW5nZWQ6IChuZXdWYWw6IGFueSkgPT4gdm9pZDtcbn1cblxua28uY29tcG9uZW50cy5yZWdpc3RlcihcImltYWdlLWl0ZW0tZWRpdG9yXCIsIHtcbiAgdmlld01vZGVsOiB7XG4gICAgY3JlYXRlVmlld01vZGVsOiAocGFyYW1zLCBjb21wb25lbnRJbmZvKSA9PiB7XG4gICAgICB2YXIgbW9kZWwgPSBuZXcgSW1hZ2VJdGVtSW5wbGFjZUVkaXRvcihcbiAgICAgICAgcGFyYW1zLnRhcmdldFtwYXJhbXMubmFtZV0sXG4gICAgICAgIHBhcmFtcy5xdWVzdGlvbixcbiAgICAgICAgcGFyYW1zLml0ZW0sXG4gICAgICAgIGNvbXBvbmVudEluZm8uZWxlbWVudCxcbiAgICAgICAgcGFyYW1zLmVkaXRvcixcbiAgICAgICAgcGFyYW1zLml0ZW1zUm9vdFxuICAgICAgKTtcbiAgICAgIHZhciBwcm9wZXJ0eSA9IFN1cnZleS5TZXJpYWxpemVyLmZpbmRQcm9wZXJ0eShcbiAgICAgICAgXCJpbWFnZWl0ZW12YWx1ZVwiLCAvL3BhcmFtcy50YXJnZXQuZ2V0VHlwZSgpLFxuICAgICAgICBwYXJhbXMubmFtZVxuICAgICAgKTtcbiAgICAgIG1vZGVsLnZhbHVlQ2hhbmdlZCA9IGZpbGVzID0+IHtcbiAgICAgICAgaWYgKCFmaWxlc1swXSkgcmV0dXJuO1xuICAgICAgICBwYXJhbXMuZWRpdG9yLnVwbG9hZEZpbGVzKGZpbGVzLCAoXywgbGluaykgPT4ge1xuICAgICAgICAgIHZhciBvcHRpb25zID0ge1xuICAgICAgICAgICAgcHJvcGVydHlOYW1lOiBwcm9wZXJ0eS5uYW1lLFxuICAgICAgICAgICAgb2JqOiBwYXJhbXMuaXRlbSxcbiAgICAgICAgICAgIHZhbHVlOiBsaW5rLFxuICAgICAgICAgICAgbmV3VmFsdWU6IG51bGwsXG4gICAgICAgICAgICBkb1ZhbGlkYXRpb246IGZhbHNlXG4gICAgICAgICAgfTtcbiAgICAgICAgICBwYXJhbXMuZWRpdG9yLm9uVmFsdWVDaGFuZ2luZ0NhbGxiYWNrKG9wdGlvbnMpO1xuICAgICAgICAgIGxpbmsgPSBvcHRpb25zLm5ld1ZhbHVlID09PSBudWxsID8gb3B0aW9ucy52YWx1ZSA6IG9wdGlvbnMubmV3VmFsdWU7XG4gICAgICAgICAgcGFyYW1zLnRhcmdldFtwYXJhbXMubmFtZV0gPSBsaW5rO1xuICAgICAgICAgIHBhcmFtcy5lZGl0b3Iub25Qcm9wZXJ0eVZhbHVlQ2hhbmdlZChwcm9wZXJ0eSwgcGFyYW1zLnRhcmdldCwgbGluayk7XG4gICAgICAgICAgcGFyYW1zLmVkaXRvci5vblF1ZXN0aW9uRWRpdG9yQ2hhbmdlZChwYXJhbXMucXVlc3Rpb24pO1xuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgICByZXR1cm4gbW9kZWw7XG4gICAgfVxuICB9LFxuICB0ZW1wbGF0ZTogdGVtcGxhdGVIdG1sXG59KTtcblxuZXhwb3J0IHZhciBpbWFnZUl0ZW1zQWRvcm5lciA9IHtcbiAgZ2V0TWFya2VyQ2xhc3M6IG1vZGVsID0+IHtcbiAgICByZXR1cm4gdHlwZW9mIG1vZGVsLmdldFR5cGUgPT09IFwiZnVuY3Rpb25cIiAmJlxuICAgICAgbW9kZWwuZ2V0VHlwZSgpID09PSBcImltYWdlcGlja2VyXCJcbiAgICAgID8gXCJpbWFnZV9pdGVtX2VkaXRhYmxlXCJcbiAgICAgIDogXCJcIjtcbiAgfSxcbiAgZ2V0RWxlbWVudE5hbWU6IG1vZGVsID0+IFwiaXRlbVwiLFxuICBhZnRlclJlbmRlcjogKGVsZW1lbnRzOiBIVE1MRWxlbWVudFtdLCBtb2RlbDogUXVlc3Rpb25TZWxlY3RCYXNlLCBlZGl0b3IpID0+IHtcbiAgICB2YXIgaXRlbXNSb290ID0gZWxlbWVudHNbMF0ucGFyZW50RWxlbWVudDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVsZW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBlbGVtZW50c1tpXS5vbmNsaWNrID0gZSA9PiBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB2YXIgZGVjb3JhdGlvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIpO1xuICAgICAgZGVjb3JhdGlvbi5jbGFzc05hbWUgPSBcInN2ZGEtYWRvcm5lci1yb290XCI7XG4gICAgICBkZWNvcmF0aW9uLmlubmVySFRNTCA9XG4gICAgICAgIFwiPGltYWdlLWl0ZW0tZWRpdG9yIHBhcmFtcz0nbmFtZTogXFxcImltYWdlTGlua1xcXCIsIHRhcmdldDogdGFyZ2V0LCBpdGVtOiBpdGVtLCBxdWVzdGlvbjogcXVlc3Rpb24sIGVkaXRvcjogZWRpdG9yLCBpdGVtc1Jvb3Q6IGl0ZW1zUm9vdCc+PC9pbWFnZS1pdGVtLWVkaXRvcj5cIjtcbiAgICAgIGVsZW1lbnRzW2ldLmFwcGVuZENoaWxkKGRlY29yYXRpb24pO1xuICAgICAga28uYXBwbHlCaW5kaW5ncyhcbiAgICAgICAge1xuICAgICAgICAgIGl0ZW06IG1vZGVsLmNob2ljZXNbaV0sXG4gICAgICAgICAgcXVlc3Rpb246IG1vZGVsLFxuICAgICAgICAgIHRhcmdldDogbW9kZWwuY2hvaWNlc1tpXSxcbiAgICAgICAgICBlZGl0b3I6IGVkaXRvcixcbiAgICAgICAgICBpdGVtc1Jvb3Q6IGl0ZW1zUm9vdFxuICAgICAgICB9LFxuICAgICAgICBkZWNvcmF0aW9uXG4gICAgICApO1xuICAgICAga28udGFza3MucnVuRWFybHkoKTtcbiAgICAgIGVkaXRvci5vbkFkb3JuZXJSZW5kZXJlZENhbGxiYWNrKFxuICAgICAgICBtb2RlbCxcbiAgICAgICAgXCJpbWFnZS1pdGVtc1wiLFxuICAgICAgICBkZWNvcmF0aW9uLFxuICAgICAgICBtb2RlbC5jaG9pY2VzW2ldXG4gICAgICApO1xuICAgIH1cblxuICAgIHZhciBzb3J0YWJsZSA9IFNvcnRhYmxlLmNyZWF0ZShpdGVtc1Jvb3QsIHtcbiAgICAgIGhhbmRsZTogXCIuc3ZkYS1kcmFnLWhhbmRsZVwiLFxuICAgICAgZHJhZ2dhYmxlOiBcIi5pbWFnZV9pdGVtX2VkaXRhYmxlXCIsXG4gICAgICBhbmltYXRpb246IDE1MCxcbiAgICAgIG9uRW5kOiBldnQgPT4ge1xuICAgICAgICB2YXIgY2hvaWNlcyA9IG1vZGVsLmNob2ljZXM7XG4gICAgICAgIHZhciBjaG9pY2UgPSBjaG9pY2VzW2V2dC5vbGRJbmRleF07XG4gICAgICAgIGNob2ljZXMuc3BsaWNlKGV2dC5vbGRJbmRleCwgMSk7XG4gICAgICAgIGNob2ljZXMuc3BsaWNlKGV2dC5uZXdJbmRleCwgMCwgY2hvaWNlKTtcbiAgICAgICAgZWRpdG9yLm9uUXVlc3Rpb25FZGl0b3JDaGFuZ2VkKG1vZGVsKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHZhciBpbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiKTtcbiAgICBpbnB1dC50eXBlID0gXCJmaWxlXCI7XG4gICAgaW5wdXQuYWNjZXB0ID0gXCJpbWFnZS8qXCI7XG4gICAgaW5wdXQuY2xhc3NOYW1lID0gXCJzdmRhLWNob29zZS1maWxlXCI7XG4gICAgaW5wdXQuc3R5bGUucG9zaXRpb24gPSBcImFic29sdXRlXCI7XG4gICAgaW5wdXQuc3R5bGUub3BhY2l0eSA9IFwiMFwiO1xuICAgIGl0ZW1zUm9vdC5hcHBlbmRDaGlsZChpbnB1dCk7XG4gIH1cbn07XG5cbnJlZ2lzdGVyQWRvcm5lcihcImltYWdlLWl0ZW1zXCIsIGltYWdlSXRlbXNBZG9ybmVyKTtcblxuZXhwb3J0IHZhciBhZGRJbWFnZUl0ZW1BZG9ybmVyID0ge1xuICBnZXRNYXJrZXJDbGFzczogbW9kZWwgPT4ge1xuICAgIHJldHVybiB0eXBlb2YgbW9kZWwuZ2V0VHlwZSA9PT0gXCJmdW5jdGlvblwiICYmXG4gICAgICBtb2RlbC5nZXRUeXBlKCkgPT09IFwiaW1hZ2VwaWNrZXJcIlxuICAgICAgPyBcInN2X2ltYWdlcGlja2VyX3Jvb3RcIlxuICAgICAgOiBcIlwiO1xuICB9LFxuICBnZXRFbGVtZW50TmFtZTogbW9kZWwgPT4gXCJyb290XCIsXG4gIGFmdGVyUmVuZGVyOiAoZWxlbWVudHM6IEhUTUxFbGVtZW50W10sIG1vZGVsOiBRdWVzdGlvblNlbGVjdEJhc2UsIGVkaXRvcikgPT4ge1xuICAgIHZhciBpdGVtc1Jvb3QgPSBlbGVtZW50c1swXTtcbiAgICB2YXIgYWRkSXRlbUVsZW1lbnQgPSBjcmVhdGVBZGRJdGVtRWxlbWVudCgoKSA9PiB7XG4gICAgICB2YXIgZmlsZUlucHV0ID0gPEhUTUxJbnB1dEVsZW1lbnQ+KFxuICAgICAgICBpdGVtc1Jvb3QuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcInN2ZGEtY2hvb3NlLWZpbGVcIilbMF1cbiAgICAgICk7XG4gICAgICBmaWxlSW5wdXQudmFsdWUgPSBcIlwiO1xuICAgICAgZmlsZUlucHV0Lm9uY2hhbmdlID0gZXZlbnQgPT4ge1xuICAgICAgICBpZiAoIWZpbGVJbnB1dCB8fCAhZmlsZUlucHV0LmZpbGVzIHx8IGZpbGVJbnB1dC5maWxlcy5sZW5ndGggPCAxKVxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgbGV0IGZpbGVzID0gW107XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZmlsZUlucHV0LmZpbGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgZmlsZXMucHVzaChmaWxlSW5wdXQuZmlsZXNbaV0pO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGl0ZW1UZXh0ID0gU3VydmV5LnN1cnZleUxvY2FsaXphdGlvbi5nZXRTdHJpbmcoXCJjaG9pY2VzX0l0ZW1cIik7XG4gICAgICAgIHZhciBuZXh0VmFsdWUgPSBnZXROZXh0VmFsdWUoXG4gICAgICAgICAgaXRlbVRleHQsXG4gICAgICAgICAgKG1vZGVsLmNob2ljZXMgfHwgW10pLm1hcChjID0+IGMudmFsdWUpXG4gICAgICAgICk7XG4gICAgICAgIHZhciBpdGVtVmFsdWUgPSBuZXcgKDxhbnk+U3VydmV5KVtcIkl0ZW1WYWx1ZVwiXShcbiAgICAgICAgICBuZXh0VmFsdWUsXG4gICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgIFwiaW1hZ2VpdGVtdmFsdWVcIlxuICAgICAgICApO1xuICAgICAgICBpdGVtVmFsdWUubG9jT3duZXIgPSA8YW55PntcbiAgICAgICAgICBnZXRMb2NhbGU6ICgpID0+IHtcbiAgICAgICAgICAgIGlmICghIW1vZGVsW1wiZ2V0TG9jYWxlXCJdKSByZXR1cm4gbW9kZWwuZ2V0TG9jYWxlKCk7XG4gICAgICAgICAgICByZXR1cm4gXCJcIjtcbiAgICAgICAgICB9LFxuICAgICAgICAgIGdldE1hcmtkb3duSHRtbDogKHRleHQ6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRleHQ7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBnZXRQcm9jZXNzZWRUZXh0OiAodGV4dDogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdGV4dDtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIG1vZGVsLmNob2ljZXMgPSBtb2RlbC5jaG9pY2VzLmNvbmNhdChbaXRlbVZhbHVlXSk7XG4gICAgICAgIGl0ZW1WYWx1ZSA9IG1vZGVsLmNob2ljZXNbbW9kZWwuY2hvaWNlcy5sZW5ndGggLSAxXTtcbiAgICAgICAgZWRpdG9yLm9uUXVlc3Rpb25FZGl0b3JDaGFuZ2VkKG1vZGVsKTtcbiAgICAgICAgZWRpdG9yLm9uSXRlbVZhbHVlQWRkZWRDYWxsYmFjayhcbiAgICAgICAgICBtb2RlbCxcbiAgICAgICAgICBcImNob2ljZXNcIixcbiAgICAgICAgICBpdGVtVmFsdWUsXG4gICAgICAgICAgbW9kZWwuY2hvaWNlc1xuICAgICAgICApO1xuXG4gICAgICAgIHZhciBwcm9wZXJ0eSA9IFN1cnZleS5TZXJpYWxpemVyLmZpbmRQcm9wZXJ0eShcbiAgICAgICAgICBcImltYWdlaXRlbXZhbHVlXCIsXG4gICAgICAgICAgXCJpbWFnZUxpbmtcIlxuICAgICAgICApO1xuICAgICAgICBlZGl0b3IudXBsb2FkRmlsZXMoZmlsZXMsIChfLCBsaW5rKSA9PiB7XG4gICAgICAgICAgdmFyIG9wdGlvbnMgPSB7XG4gICAgICAgICAgICBwcm9wZXJ0eU5hbWU6IHByb3BlcnR5Lm5hbWUsXG4gICAgICAgICAgICBvYmo6IGl0ZW1WYWx1ZSxcbiAgICAgICAgICAgIHZhbHVlOiBsaW5rLFxuICAgICAgICAgICAgbmV3VmFsdWU6IG51bGwsXG4gICAgICAgICAgICBkb1ZhbGlkYXRpb246IGZhbHNlXG4gICAgICAgICAgfTtcbiAgICAgICAgICBlZGl0b3Iub25WYWx1ZUNoYW5naW5nQ2FsbGJhY2sob3B0aW9ucyk7XG4gICAgICAgICAgbGluayA9IG9wdGlvbnMubmV3VmFsdWUgPT09IG51bGwgPyBvcHRpb25zLnZhbHVlIDogb3B0aW9ucy5uZXdWYWx1ZTtcbiAgICAgICAgICBpdGVtVmFsdWVbXCJpbWFnZUxpbmtcIl0gPSBsaW5rO1xuICAgICAgICAgIGVkaXRvci5vblByb3BlcnR5VmFsdWVDaGFuZ2VkKHByb3BlcnR5LCBpdGVtVmFsdWUsIGxpbmspO1xuICAgICAgICAgIGVkaXRvci5vblF1ZXN0aW9uRWRpdG9yQ2hhbmdlZChtb2RlbCk7XG4gICAgICAgIH0pO1xuICAgICAgfTtcbiAgICAgIGZpbGVJbnB1dC5jbGljaygpO1xuICAgIH0pO1xuICAgIGFkZEl0ZW1FbGVtZW50LnN0eWxlLndpZHRoID0gKG1vZGVsW1wiaW1hZ2VXaWR0aFwiXSB8fCAyMDApICsgMTAgKyBcInB4XCI7XG4gICAgYWRkSXRlbUVsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gKG1vZGVsW1wiaW1hZ2VIZWlnaHRcIl0gfHwgMTUwKSArIDEwICsgXCJweFwiO1xuICAgIGFkZEl0ZW1FbGVtZW50LnN0eWxlLmxpbmVIZWlnaHQgPSBhZGRJdGVtRWxlbWVudC5zdHlsZS5oZWlnaHQ7XG4gICAgaXRlbXNSb290LmFwcGVuZENoaWxkKGFkZEl0ZW1FbGVtZW50KTtcblxuICAgIHZhciBpbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiKTtcbiAgICBpbnB1dC50eXBlID0gXCJmaWxlXCI7XG4gICAgaW5wdXQuYWNjZXB0ID0gXCJpbWFnZS8qXCI7XG4gICAgaW5wdXQuY2xhc3NOYW1lID0gXCJzdmRhLWNob29zZS1maWxlXCI7XG4gICAgaW5wdXQuc3R5bGUucG9zaXRpb24gPSBcImFic29sdXRlXCI7XG4gICAgaW5wdXQuc3R5bGUub3BhY2l0eSA9IFwiMFwiO1xuICAgIGl0ZW1zUm9vdC5hcHBlbmRDaGlsZChpbnB1dCk7XG4gIH1cbn07XG5cbnJlZ2lzdGVyQWRvcm5lcihcImFkZC1pbWFnZS1pdGVtXCIsIGFkZEltYWdlSXRlbUFkb3JuZXIpO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2Fkb3JuZXJzL2ltYWdlLWl0ZW1zLnRzIiwiaW1wb3J0ICogYXMga28gZnJvbSBcImtub2Nrb3V0XCI7XG5pbXBvcnQgeyByZWdpc3RlckFkb3JuZXIgfSBmcm9tIFwiLi4vc3VydmV5anNPYmplY3RzXCI7XG5pbXBvcnQgeyBUaXRsZUlucGxhY2VFZGl0b3IgfSBmcm9tIFwiLi90aXRsZS1lZGl0b3JcIjtcblxuaW1wb3J0IFwiLi9sYWJlbC1lZGl0b3Iuc2Nzc1wiO1xuXG5leHBvcnQgdmFyIGxhYmVsQWRvcm5lciA9IHtcbiAgZ2V0TWFya2VyQ2xhc3M6IG1vZGVsID0+IHtcbiAgICBpZiAobW9kZWwuZ2V0VHlwZSgpID09PSBcImJvb2xlYW5cIikge1xuICAgICAgcmV0dXJuIFwibGFiZWxfZWRpdGFibGVcIjtcbiAgICB9XG4gICAgcmV0dXJuIFwiXCI7XG4gIH0sXG4gIGdldEVsZW1lbnROYW1lOiBtb2RlbCA9PiBcImxhYmVsXCIsXG4gIGFmdGVyUmVuZGVyOiAoZWxlbWVudHM6IEhUTUxFbGVtZW50W10sIG1vZGVsLCBlZGl0b3IpID0+IHtcbiAgICB2YXIgZGVjb3JhdGlvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIpO1xuICAgIGRlY29yYXRpb24uaW5uZXJIVE1MID1cbiAgICAgIFwiPHRpdGxlLWVkaXRvciBwYXJhbXM9J25hbWU6IFxcXCJ0aXRsZVxcXCIsIG1vZGVsOiBtb2RlbCwgZWRpdG9yOiBlZGl0b3InPjwvdGl0bGUtZWRpdG9yPlwiO1xuICAgIGVsZW1lbnRzWzBdLm9uY2xpY2sgPSBlID0+IGUucHJldmVudERlZmF1bHQoKTtcbiAgICBlbGVtZW50c1swXS5hcHBlbmRDaGlsZChkZWNvcmF0aW9uKTtcbiAgICBrby5hcHBseUJpbmRpbmdzKHsgbW9kZWw6IG1vZGVsLCBlZGl0b3I6IGVkaXRvciB9LCBkZWNvcmF0aW9uKTtcbiAgICBrby50YXNrcy5ydW5FYXJseSgpO1xuICAgIGVkaXRvci5vbkFkb3JuZXJSZW5kZXJlZENhbGxiYWNrKG1vZGVsLCBcImxhYmVsXCIsIGRlY29yYXRpb24pO1xuICB9XG59O1xuXG4vL3JlZ2lzdGVyQWRvcm5lcihcImxhYmVsXCIsIGxhYmVsQWRvcm5lcik7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvYWRvcm5lcnMvbGFiZWwtZWRpdG9yLnRzIiwiaW1wb3J0ICogYXMga28gZnJvbSBcImtub2Nrb3V0XCI7XG5pbXBvcnQgKiBhcyBTdXJ2ZXkgZnJvbSBcInN1cnZleS1rbm9ja291dFwiO1xuaW1wb3J0IHsgcmVnaXN0ZXJBZG9ybmVyIH0gZnJvbSBcIi4uL3N1cnZleWpzT2JqZWN0c1wiO1xuaW1wb3J0IHsgZWRpdG9yTG9jYWxpemF0aW9uIH0gZnJvbSBcIi4uL2VkaXRvckxvY2FsaXphdGlvblwiO1xuaW1wb3J0IHsgVGl0bGVJbnBsYWNlRWRpdG9yIH0gZnJvbSBcIi4vdGl0bGUtZWRpdG9yXCI7XG5pbXBvcnQgeyBTdXJ2ZXlDcmVhdG9yIH0gZnJvbSBcIi4uL2VkaXRvclwiO1xuaW1wb3J0IHsgZ2V0TmV4dFZhbHVlLCBmaW5kUGFyZW50Tm9kZSB9IGZyb20gXCIuLi91dGlscy91dGlsc1wiO1xuXG5pbXBvcnQgXCIuL3JhdGluZy1pdGVtLWVkaXRvci5zY3NzXCI7XG5pbXBvcnQgeyBRdWVzdGlvblNlbGVjdEJhc2UgfSBmcm9tIFwic3VydmV5LWtub2Nrb3V0XCI7XG52YXIgdGVtcGxhdGVIdG1sID0gcmVxdWlyZShcImh0bWwtbG9hZGVyP2ludGVycG9sYXRlIXZhbC1sb2FkZXIhLi9yYXRpbmctaXRlbS1lZGl0b3IuaHRtbFwiKTtcblxuY2xhc3MgUmF0aW5nSXRlbUVkaXRvciBleHRlbmRzIFRpdGxlSW5wbGFjZUVkaXRvciB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBwcml2YXRlIHF1ZXN0aW9uOiBTdXJ2ZXkuUXVlc3Rpb25SYXRpbmcsXG4gICAgcHJpdmF0ZSBpdGVtLFxuICAgIHJvb3RFbGVtZW50LFxuICAgIHByaXZhdGUgZWRpdG9yOiBTdXJ2ZXlDcmVhdG9yXG4gICkge1xuICAgIHN1cGVyKG5hbWUsIHJvb3RFbGVtZW50KTtcbiAgfVxuXG4gIGRlbGV0ZUl0ZW0obW9kZWw6IFJhdGluZ0l0ZW1FZGl0b3IsIGV2ZW50KSB7XG4gICAgdmFyIHF1ZXN0aW9uID0gbW9kZWwucXVlc3Rpb247XG4gICAgdmFyIGluZGV4ID0gcXVlc3Rpb24udmlzaWJsZVJhdGVWYWx1ZXNcbiAgICAgIC5tYXAoaXRlbSA9PiBpdGVtLnZhbHVlKVxuICAgICAgLmluZGV4T2YobW9kZWwuaXRlbS52YWx1ZSk7XG5cbiAgICBpZiAoXG4gICAgICBxdWVzdGlvbi5yYXRlVmFsdWVzLmxlbmd0aCA9PT0gMCAmJlxuICAgICAgaW5kZXggPT09IHF1ZXN0aW9uLnZpc2libGVSYXRlVmFsdWVzLmxlbmd0aCAtIDFcbiAgICApIHtcbiAgICAgIHF1ZXN0aW9uLnJhdGVNYXggLT0gcXVlc3Rpb24ucmF0ZVN0ZXA7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChxdWVzdGlvbi5yYXRlVmFsdWVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBxdWVzdGlvbi5yYXRlVmFsdWVzID0gcXVlc3Rpb24udmlzaWJsZVJhdGVWYWx1ZXM7XG4gICAgICB9XG4gICAgICBxdWVzdGlvbi5yYXRlVmFsdWVzLnNwbGljZShpbmRleCwgMSk7XG4gICAgfVxuICAgIG1vZGVsLmVkaXRvci5vblF1ZXN0aW9uRWRpdG9yQ2hhbmdlZChxdWVzdGlvbik7XG4gIH1cblxuICBnZXQgaXNMYXN0SXRlbSgpIHtcbiAgICByZXR1cm4gdGhpcy5xdWVzdGlvbi52aXNpYmxlUmF0ZVZhbHVlcy5sZW5ndGggPT09IDE7XG4gIH1cbn1cblxua28uY29tcG9uZW50cy5yZWdpc3RlcihcInJhdGluZy1pdGVtLWVkaXRvclwiLCB7XG4gIHZpZXdNb2RlbDoge1xuICAgIGNyZWF0ZVZpZXdNb2RlbDogKHBhcmFtcywgY29tcG9uZW50SW5mbykgPT4ge1xuICAgICAgdmFyIG1vZGVsID0gbmV3IFJhdGluZ0l0ZW1FZGl0b3IoXG4gICAgICAgIHBhcmFtcy50YXJnZXRbcGFyYW1zLm5hbWVdLFxuICAgICAgICBwYXJhbXMucXVlc3Rpb24sXG4gICAgICAgIHBhcmFtcy5pdGVtLFxuICAgICAgICBjb21wb25lbnRJbmZvLmVsZW1lbnQsXG4gICAgICAgIHBhcmFtcy5lZGl0b3JcbiAgICAgICk7XG4gICAgICB2YXIgcXVlc3Rpb246IFN1cnZleS5RdWVzdGlvblJhdGluZyA9IHBhcmFtcy5xdWVzdGlvbjtcblxuICAgICAgdmFyIHByb3BlcnR5ID0gU3VydmV5LlNlcmlhbGl6ZXIuZmluZFByb3BlcnR5KFxuICAgICAgICBwYXJhbXMudGFyZ2V0LmdldFR5cGUoKSxcbiAgICAgICAgcGFyYW1zLm5hbWVcbiAgICAgICk7XG4gICAgICBtb2RlbC52YWx1ZUNoYW5nZWQgPSBuZXdWYWx1ZSA9PiB7XG4gICAgICAgIGlmIChxdWVzdGlvbi5yYXRlVmFsdWVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIHF1ZXN0aW9uLnJhdGVWYWx1ZXMgPSBxdWVzdGlvbi52aXNpYmxlUmF0ZVZhbHVlcztcbiAgICAgICAgICB2YXIgaW5kZXggPSBxdWVzdGlvbi5yYXRlVmFsdWVzXG4gICAgICAgICAgICAubWFwKGl0ZW0gPT4gaXRlbS52YWx1ZSlcbiAgICAgICAgICAgIC5pbmRleE9mKHBhcmFtcy5pdGVtLnZhbHVlKTtcbiAgICAgICAgICBxdWVzdGlvbi5yYXRlVmFsdWVzW2luZGV4XSA9IHBhcmFtcy50YXJnZXQ7XG4gICAgICAgIH1cbiAgICAgICAgcGFyYW1zLnRhcmdldFtwYXJhbXMubmFtZV0gPSBuZXdWYWx1ZTtcbiAgICAgICAgcGFyYW1zLmVkaXRvci5vblF1ZXN0aW9uRWRpdG9yQ2hhbmdlZChxdWVzdGlvbik7XG4gICAgICB9O1xuICAgICAgcmV0dXJuIG1vZGVsO1xuICAgIH1cbiAgfSxcbiAgdGVtcGxhdGU6IHRlbXBsYXRlSHRtbFxufSk7XG5cbnZhciBjcmVhdGVBZGRJdGVtSGFuZGxlciA9IChcbiAgcXVlc3Rpb246IFN1cnZleS5RdWVzdGlvblJhdGluZyxcbiAgb25JdGVtQWRkZWQ6IChpdGVtVmFsdWU6IFN1cnZleS5JdGVtVmFsdWUpID0+IHZvaWQsXG4gIG9uSXRlbUFkZGluZzogKGl0ZW1WYWx1ZTogU3VydmV5Lkl0ZW1WYWx1ZSkgPT4gdm9pZCA9IG51bGxcbikgPT4gKCkgPT4ge1xuICBpZiAocXVlc3Rpb24ucmF0ZVZhbHVlcy5sZW5ndGggPT09IDApIHtcbiAgICBxdWVzdGlvbi5yYXRlTWF4ICs9IHF1ZXN0aW9uLnJhdGVTdGVwO1xuICB9IGVsc2Uge1xuICAgIHZhciBuZXh0VmFsdWUgPSBudWxsO1xuICAgIHZhciB2YWx1ZXMgPSBxdWVzdGlvbi5yYXRlVmFsdWVzLm1hcChmdW5jdGlvbihpdGVtKSB7XG4gICAgICByZXR1cm4gaXRlbS5pdGVtVmFsdWU7XG4gICAgfSk7XG4gICAgdmFyIGl0ZW1UZXh0ID0gU3VydmV5LnN1cnZleUxvY2FsaXphdGlvbi5nZXRTdHJpbmcoXCJjaG9pY2VzX0l0ZW1cIik7XG4gICAgbmV4dFZhbHVlID0gZ2V0TmV4dFZhbHVlKGl0ZW1UZXh0LCB2YWx1ZXMpO1xuXG4gICAgdmFyIGl0ZW1WYWx1ZSA9IG5ldyBTdXJ2ZXkuSXRlbVZhbHVlKG5leHRWYWx1ZSk7XG4gICAgISFvbkl0ZW1BZGRpbmcgJiYgb25JdGVtQWRkaW5nKGl0ZW1WYWx1ZSk7XG4gICAgaXRlbVZhbHVlLmxvY093bmVyID0gPGFueT57XG4gICAgICBnZXRMb2NhbGU6ICgpID0+IHtcbiAgICAgICAgaWYgKCEhcXVlc3Rpb25bXCJnZXRMb2NhbGVcIl0pIHJldHVybiBxdWVzdGlvbi5nZXRMb2NhbGUoKTtcbiAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgICB9LFxuICAgICAgZ2V0TWFya2Rvd25IdG1sOiAodGV4dDogc3RyaW5nKSA9PiB7XG4gICAgICAgIHJldHVybiB0ZXh0O1xuICAgICAgfSxcbiAgICAgIGdldFByb2Nlc3NlZFRleHQ6ICh0ZXh0OiBzdHJpbmcpID0+IHtcbiAgICAgICAgcmV0dXJuIHRleHQ7XG4gICAgICB9XG4gICAgfTtcbiAgICBxdWVzdGlvbi5yYXRlVmFsdWVzID0gcXVlc3Rpb24ucmF0ZVZhbHVlcy5jb25jYXQoW2l0ZW1WYWx1ZV0pO1xuICB9XG4gICEhb25JdGVtQWRkZWQgJiYgb25JdGVtQWRkZWQoaXRlbVZhbHVlKTtcbn07XG5cbmV4cG9ydCB2YXIgcmF0aW5nSXRlbUFkb3JuZXIgPSB7XG4gIGdldE1hcmtlckNsYXNzOiBtb2RlbCA9PiB7XG4gICAgcmV0dXJuICEhbW9kZWwudmlzaWJsZVJhdGVWYWx1ZXMgPyBcIml0ZW1fZWRpdGFibGVcIiA6IFwiXCI7XG4gIH0sXG4gIGdldEVsZW1lbnROYW1lOiBtb2RlbCA9PiBcIml0ZW1UZXh0XCIsXG4gIGFmdGVyUmVuZGVyOiAoXG4gICAgZWxlbWVudHM6IEhUTUxFbGVtZW50W10sXG4gICAgbW9kZWw6IFN1cnZleS5RdWVzdGlvblJhdGluZyxcbiAgICBlZGl0b3JcbiAgKSA9PiB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbGVtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgZWxlbWVudHNbaV0ub25jbGljayA9IGUgPT4gZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgdmFyIGRlY29yYXRpb24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic3BhblwiKTtcbiAgICAgIGRlY29yYXRpb24uaW5uZXJIVE1MID1cbiAgICAgICAgXCI8cmF0aW5nLWl0ZW0tZWRpdG9yIHBhcmFtcz0nbmFtZTogXFxcInRleHRcXFwiLCB0YXJnZXQ6IHRhcmdldCwgaXRlbTogaXRlbSwgcXVlc3Rpb246IHF1ZXN0aW9uLCBlZGl0b3I6IGVkaXRvcic+PC9yYXRpbmctaXRlbS1lZGl0b3I+XCI7XG4gICAgICBlbGVtZW50c1tpXS5hcHBlbmRDaGlsZChkZWNvcmF0aW9uKTtcbiAgICAgIHZhciBpdGVtID0gbW9kZWwudmlzaWJsZVJhdGVWYWx1ZXNbaV07XG4gICAgICBrby5hcHBseUJpbmRpbmdzKFxuICAgICAgICB7XG4gICAgICAgICAgaXRlbTogaXRlbSxcbiAgICAgICAgICBxdWVzdGlvbjogbW9kZWwsXG4gICAgICAgICAgdGFyZ2V0OiBpdGVtLFxuICAgICAgICAgIGVkaXRvcjogZWRpdG9yXG4gICAgICAgIH0sXG4gICAgICAgIGRlY29yYXRpb25cbiAgICAgICk7XG4gICAgICBrby50YXNrcy5ydW5FYXJseSgpO1xuICAgICAgZWRpdG9yLm9uQWRvcm5lclJlbmRlcmVkQ2FsbGJhY2sobW9kZWwsIFwicmF0aW5nLWl0ZW1cIiwgZGVjb3JhdGlvbiwgaXRlbSk7XG4gICAgfVxuXG4gICAgdmFyIGFkZE5ldyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIpO1xuICAgIGFkZE5ldy50aXRsZSA9IGVkaXRvckxvY2FsaXphdGlvbi5nZXRTdHJpbmcoXCJwZS5hZGRJdGVtXCIpO1xuICAgIGFkZE5ldy5jbGFzc05hbWUgPVxuICAgICAgXCJzdmRhLWFkZC1uZXctcmF0aW5nLWl0ZW0gaWNvbi1pbnBsYWNlLWFkZC1pdGVtIHN2ZC1wcmltYXJ5LWljb25cIjtcbiAgICBhZGROZXcub25jbGljayA9IGNyZWF0ZUFkZEl0ZW1IYW5kbGVyKFxuICAgICAgbW9kZWwsXG4gICAgICBpdGVtVmFsdWUgPT4ge1xuICAgICAgICBlZGl0b3Iub25RdWVzdGlvbkVkaXRvckNoYW5nZWQobW9kZWwpO1xuICAgICAgICBlZGl0b3Iub25JdGVtVmFsdWVBZGRlZENhbGxiYWNrKFxuICAgICAgICAgIG1vZGVsLFxuICAgICAgICAgIFwicmF0ZVZhbHVlc1wiLFxuICAgICAgICAgIGl0ZW1WYWx1ZSxcbiAgICAgICAgICBtb2RlbC52aXNpYmxlUmF0ZVZhbHVlc1xuICAgICAgICApO1xuICAgICAgfSxcbiAgICAgIGl0ZW1WYWx1ZSA9PiB7XG4gICAgICAgIGVkaXRvci5vbkl0ZW1WYWx1ZUFkZGVkQ2FsbGJhY2soXG4gICAgICAgICAgbW9kZWwsXG4gICAgICAgICAgXCJyYXRlVmFsdWVzXCIsXG4gICAgICAgICAgaXRlbVZhbHVlLFxuICAgICAgICAgIG1vZGVsLnZpc2libGVSYXRlVmFsdWVzXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgKTtcbiAgICB2YXIgc3ZnRWxlbTogYW55ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKFxuICAgICAgXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgICAgXCJzdmdcIlxuICAgICk7XG4gICAgc3ZnRWxlbS5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLCBcInN2ZC1zdmctaWNvblwiKTtcbiAgICBzdmdFbGVtLnN0eWxlLndpZHRoID0gXCIxMnB4XCI7XG4gICAgc3ZnRWxlbS5zdHlsZS5oZWlnaHQgPSBcIjEycHhcIjtcbiAgICB2YXIgdXNlRWxlbTogYW55ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKFxuICAgICAgXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgICAgXCJ1c2VcIlxuICAgICk7XG4gICAgdXNlRWxlbS5zZXRBdHRyaWJ1dGVOUyhcbiAgICAgIFwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGlua1wiLFxuICAgICAgXCJ4bGluazpocmVmXCIsXG4gICAgICBcIiNpY29uLWlucGxhY2VwbHVzXCJcbiAgICApO1xuICAgIHN2Z0VsZW0uYXBwZW5kQ2hpbGQodXNlRWxlbSk7XG4gICAgYWRkTmV3LmFwcGVuZENoaWxkKHN2Z0VsZW0pO1xuXG4gICAgdmFyIHBhcmVudCA9IGVsZW1lbnRzWzBdLnBhcmVudEVsZW1lbnQucGFyZW50RWxlbWVudDtcbiAgICBwYXJlbnQuYXBwZW5kQ2hpbGQoYWRkTmV3KTtcbiAgfVxufTtcblxucmVnaXN0ZXJBZG9ybmVyKFwicmF0aW5nLWl0ZW1cIiwgcmF0aW5nSXRlbUFkb3JuZXIpO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2Fkb3JuZXJzL3JhdGluZy1pdGVtLWVkaXRvci50cyIsImltcG9ydCAqIGFzIGtvIGZyb20gXCJrbm9ja291dFwiO1xuaW1wb3J0ICogYXMgU3VydmV5IGZyb20gXCJzdXJ2ZXkta25vY2tvdXRcIjtcbmltcG9ydCBTb3J0YWJsZSBmcm9tIFwic29ydGFibGVqc1wiO1xuaW1wb3J0IHsgcmVnaXN0ZXJBZG9ybmVyIH0gZnJvbSBcIi4uL3N1cnZleWpzT2JqZWN0c1wiO1xuaW1wb3J0IHsgZWRpdG9yTG9jYWxpemF0aW9uIH0gZnJvbSBcIi4uL2VkaXRvckxvY2FsaXphdGlvblwiO1xuaW1wb3J0IHsgY3JlYXRlQWRkSXRlbUhhbmRsZXIsIGl0ZW1BZG9ybmVyIH0gZnJvbSBcIi4vaXRlbS1lZGl0b3JcIjtcblxuaW1wb3J0IFwiLi9zZWxlY3QtaXRlbXMtZWRpdG9yLnNjc3NcIjtcbmltcG9ydCB7IFF1ZXN0aW9uU2VsZWN0QmFzZSB9IGZyb20gXCJzdXJ2ZXkta25vY2tvdXRcIjtcbnZhciB0ZW1wbGF0ZUh0bWwgPSByZXF1aXJlKFwiaHRtbC1sb2FkZXI/aW50ZXJwb2xhdGUhdmFsLWxvYWRlciEuL3NlbGVjdC1pdGVtcy1lZGl0b3IuaHRtbFwiKTtcblxua28uY29tcG9uZW50cy5yZWdpc3RlcihcInNlbGVjdC1pdGVtcy1lZGl0b3JcIiwge1xuICB2aWV3TW9kZWw6IHtcbiAgICBjcmVhdGVWaWV3TW9kZWw6IChwYXJhbXMsIGNvbXBvbmVudEluZm8pID0+IHtcbiAgICAgIHZhciBpc0V4cGFuZGVkID0ga28ub2JzZXJ2YWJsZShzZWxlY3RJdGVtc0VkaXRvckFkb3JuZXIuaXNFeHBhbmRlZCk7XG4gICAgICB2YXIgY2hvaWNlcyA9IGtvLm9ic2VydmFibGVBcnJheShwYXJhbXMucXVlc3Rpb24uY2hvaWNlcyk7XG4gICAgICB2YXIgb3RoZXJUZXh0ID0ga28ub2JzZXJ2YWJsZShwYXJhbXMucXVlc3Rpb24ub3RoZXJUZXh0KTtcbiAgICAgIHZhciBzb3J0YWJsZUVsZW1lbnQgPSBjb21wb25lbnRJbmZvLmVsZW1lbnQucGFyZW50RWxlbWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFxuICAgICAgICBcInN2ZGEtc2VsZWN0LWl0ZW1zLWNvbGxlY3Rpb25cIlxuICAgICAgKVswXTtcbiAgICAgIHZhciBzb3J0YWJsZSA9IG51bGw7XG4gICAgICAvLyB2YXIgcHJvcGVydHkgPSBTdXJ2ZXkuU2VyaWFsaXplci5maW5kUHJvcGVydHkoXG4gICAgICAvLyAgIHBhcmFtcy5xdWVzdGlvbi5nZXRUeXBlKCksXG4gICAgICAvLyAgIFwiY2hvaWNlc1wiXG4gICAgICAvLyApO1xuICAgICAgdmFyIHJhaXNlQ2hhbmdpbmdFdmVudCA9ICh0YXJnZXQ6IGFueSwgcHJvcGVydHlOYW1lOiBzdHJpbmcsIG5ld1ZhbHVlOiBhbnkpID0+IHtcbiAgICAgICAgdmFyIG9wdGlvbnMgPSB7XG4gICAgICAgICAgcHJvcGVydHlOYW1lOiBwcm9wZXJ0eU5hbWUsXG4gICAgICAgICAgb2JqOiB0YXJnZXQsXG4gICAgICAgICAgdmFsdWU6IG5ld1ZhbHVlLFxuICAgICAgICAgIG5ld1ZhbHVlOiBudWxsLFxuICAgICAgICAgIGRvVmFsaWRhdGlvbjogZmFsc2VcbiAgICAgICAgfTtcbiAgICAgICAgcGFyYW1zLmVkaXRvci5vblZhbHVlQ2hhbmdpbmdDYWxsYmFjayhvcHRpb25zKTtcbiAgICAgICAgbmV3VmFsdWUgPSBvcHRpb25zLm5ld1ZhbHVlID09PSBudWxsID8gb3B0aW9ucy52YWx1ZSA6IG9wdGlvbnMubmV3VmFsdWU7XG4gICAgICAgIHJldHVybiBuZXdWYWx1ZTtcbiAgICAgIH07XG4gICAgICB2YXIgcmFpc2VDaGFuZ2VkRXZlbnQgPSAodGFyZ2V0OiBhbnksIHByb3BlcnR5TmFtZTogc3RyaW5nLCBuZXdWYWx1ZTogYW55KSA9PiB7XG4gICAgICAgIGlmKHR5cGVvZiB0YXJnZXQuZ2V0VHlwZSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgdmFyIHByb3BlcnR5ID0gU3VydmV5LlNlcmlhbGl6ZXIuZmluZFByb3BlcnR5KFxuICAgICAgICAgICAgdGFyZ2V0LmdldFR5cGUoKSxcbiAgICAgICAgICAgIHByb3BlcnR5TmFtZVxuICAgICAgICAgICk7XG4gICAgICAgICAgcGFyYW1zLmVkaXRvci5vblByb3BlcnR5VmFsdWVDaGFuZ2VkKHByb3BlcnR5LCB0YXJnZXQsIG5ld1ZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY2hvaWNlczogY2hvaWNlcyxcbiAgICAgICAgdmFsdWVOYW1lOiBwYXJhbXMudmFsdWVOYW1lLFxuICAgICAgICBxdWVzdGlvbjogcGFyYW1zLnF1ZXN0aW9uLFxuICAgICAgICBlZGl0b3I6IHBhcmFtcy5lZGl0b3IsXG4gICAgICAgIGlzRXhwYW5kZWQ6IGlzRXhwYW5kZWQsXG4gICAgICAgIHRvZ2dsZTogKCkgPT4gaXNFeHBhbmRlZCghaXNFeHBhbmRlZCgpKSxcbiAgICAgICAgYWRkT3RoZXI6ICgpID0+IHtcbiAgICAgICAgICB2YXIgbmV3VmFsdWUgPSAhcGFyYW1zLnF1ZXN0aW9uLmhhc090aGVyO1xuICAgICAgICAgIG5ld1ZhbHVlID0gcmFpc2VDaGFuZ2luZ0V2ZW50KHBhcmFtcy5xdWVzdGlvbiwgXCJoYXNPdGhlclwiLCBuZXdWYWx1ZSk7XG4gICAgICAgICAgcGFyYW1zLnF1ZXN0aW9uLmhhc090aGVyID0gbmV3VmFsdWU7XG4gICAgICAgICAgcmFpc2VDaGFuZ2VkRXZlbnQocGFyYW1zLnF1ZXN0aW9uLCBcImhhc090aGVyXCIsIG5ld1ZhbHVlKTtcbiAgICAgICAgfSxcbiAgICAgICAgYWRkSXRlbTogY3JlYXRlQWRkSXRlbUhhbmRsZXIoXG4gICAgICAgICAgcGFyYW1zLnF1ZXN0aW9uLFxuICAgICAgICAgIGl0ZW1WYWx1ZSA9PiB7XG4gICAgICAgICAgICAvLyB2YXIgb3B0aW9ucyA9IHtcbiAgICAgICAgICAgIC8vICAgcHJvcGVydHlOYW1lOiBcImNob2ljZXNcIixcbiAgICAgICAgICAgIC8vICAgb2JqOiBwYXJhbXMucXVlc3Rpb24sXG4gICAgICAgICAgICAvLyAgIHZhbHVlOiBwYXJhbXMucXVlc3Rpb24uY2hvaWNlcyxcbiAgICAgICAgICAgIC8vICAgbmV3VmFsdWU6IG51bGwsXG4gICAgICAgICAgICAvLyAgIGRvVmFsaWRhdGlvbjogZmFsc2VcbiAgICAgICAgICAgIC8vIH07XG4gICAgICAgICAgICAvLyBwYXJhbXMuZWRpdG9yLm9uVmFsdWVDaGFuZ2luZ0NhbGxiYWNrKG9wdGlvbnMpO1xuICAgICAgICAgICAgY2hvaWNlcyhwYXJhbXMucXVlc3Rpb24uY2hvaWNlcyk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBpdGVtVmFsdWUgPT4ge1xuICAgICAgICAgICAgcGFyYW1zLmVkaXRvci5vbkl0ZW1WYWx1ZUFkZGVkQ2FsbGJhY2soXG4gICAgICAgICAgICAgIHBhcmFtcy5xdWVzdGlvbixcbiAgICAgICAgICAgICAgXCJjaG9pY2VzXCIsXG4gICAgICAgICAgICAgIGl0ZW1WYWx1ZSxcbiAgICAgICAgICAgICAgcGFyYW1zLnF1ZXN0aW9uLmNob2ljZXNcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICAvLyBwYXJhbXMuZWRpdG9yLm9uUHJvcGVydHlWYWx1ZUNoYW5nZWQoXG4gICAgICAgICAgICAvLyAgIHByb3BlcnR5LFxuICAgICAgICAgICAgLy8gICBwYXJhbXMucXVlc3Rpb24sXG4gICAgICAgICAgICAvLyAgIHBhcmFtcy5xdWVzdGlvbi5jaG9pY2VzXG4gICAgICAgICAgICAvLyApO1xuICAgICAgICAgICAgcGFyYW1zLmVkaXRvci5vblF1ZXN0aW9uRWRpdG9yQ2hhbmdlZChwYXJhbXMucXVlc3Rpb24pO1xuICAgICAgICAgIH1cbiAgICAgICAgKSxcbiAgICAgICAgZ2V0TG9jU3RyaW5nOiBzdHIgPT4gZWRpdG9yTG9jYWxpemF0aW9uLmdldFN0cmluZyhzdHIpLFxuICAgICAgICBjaG9pY2VzUmVuZGVyZWQ6ICgpID0+IHtcbiAgICAgICAgICBpZiAoc29ydGFibGUpIHtcbiAgICAgICAgICAgIHNvcnRhYmxlLmRlc3Ryb3koKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgc29ydGFibGUgPSBTb3J0YWJsZS5jcmVhdGUoc29ydGFibGVFbGVtZW50LCB7XG4gICAgICAgICAgICBoYW5kbGU6IFwiLnN2ZGEtZHJhZy1oYW5kbGVcIixcbiAgICAgICAgICAgIGRyYWdnYWJsZTogXCIuaXRlbV9kcmFnZ2FibGVcIixcbiAgICAgICAgICAgIGFuaW1hdGlvbjogMTUwLFxuICAgICAgICAgICAgb25FbmQ6IGV2dCA9PiB7XG4gICAgICAgICAgICAgIHZhciBuZXdDaG9pY2VzID0gW10uY29uY2F0KHBhcmFtcy5xdWVzdGlvbi5jaG9pY2VzKTtcbiAgICAgICAgICAgICAgdmFyIGNob2ljZSA9IG5ld0Nob2ljZXNbZXZ0Lm9sZEluZGV4XTtcbiAgICAgICAgICAgICAgbmV3Q2hvaWNlcy5zcGxpY2UoZXZ0Lm9sZEluZGV4LCAxKTtcbiAgICAgICAgICAgICAgbmV3Q2hvaWNlcy5zcGxpY2UoZXZ0Lm5ld0luZGV4LCAwLCBjaG9pY2UpO1xuICAgICAgICAgICAgICBwYXJhbXMucXVlc3Rpb24uY2hvaWNlcyA9IG5ld0Nob2ljZXM7XG4gICAgICAgICAgICAgIGNob2ljZXMobmV3Q2hvaWNlcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIHZhbHVlQ2hhbmdlZDogKGl0ZW1WYWx1ZSwgcHJvcGVydHlOYW1lLCBuZXdWYWx1ZSkgPT4ge1xuICAgICAgICAgIHZhciBuZXdDaG9pY2VzID0gW10uY29uY2F0KHBhcmFtcy5xdWVzdGlvbi5jaG9pY2VzKTtcbiAgICAgICAgICBjaG9pY2VzKFtdKTtcbiAgICAgICAgICBjaG9pY2VzKG5ld0Nob2ljZXMpO1xuICAgICAgICAgIGtvLnRhc2tzLnJ1bkVhcmx5KCk7XG4gICAgICAgICAgcGFyYW1zLmVkaXRvci5vbkFkb3JuZXJSZW5kZXJlZENhbGxiYWNrKFxuICAgICAgICAgICAgcGFyYW1zLnF1ZXN0aW9uLFxuICAgICAgICAgICAgXCJzZWxlY3QtY2hvaWNlc1wiLFxuICAgICAgICAgICAgY29tcG9uZW50SW5mby5lbGVtZW50XG4gICAgICAgICAgKTtcbiAgICAgICAgfSxcbiAgICAgICAgb3RoZXJUZXh0OiBvdGhlclRleHQsXG4gICAgICAgIG90aGVyVmFsdWVDaGFuZ2VkOiAoaXRlbVZhbHVlLCBwcm9wZXJ0eU5hbWUsIG5ld1ZhbHVlKSA9PiB7XG4gICAgICAgICAgb3RoZXJUZXh0KHBhcmFtcy5xdWVzdGlvbi5vdGhlclRleHQpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cbiAgfSxcbiAgdGVtcGxhdGU6IHRlbXBsYXRlSHRtbFxufSk7XG5cbmV4cG9ydCB2YXIgc2VsZWN0SXRlbXNFZGl0b3JBZG9ybmVyID0ge1xuICBnZXRNYXJrZXJDbGFzczogbW9kZWwgPT4ge1xuICAgIHJldHVybiAhIW1vZGVsLnBhcmVudCAmJiAhIW1vZGVsLmNob2ljZXMgPyBcInNlbGVjdF9pdGVtc19lZGl0b3JcIiA6IFwiXCI7XG4gIH0sXG4gIGdldEVsZW1lbnROYW1lOiBtb2RlbCA9PiBcInNlbGVjdFdyYXBwZXJcIixcbiAgYWZ0ZXJSZW5kZXI6IChlbGVtZW50czogSFRNTEVsZW1lbnRbXSwgbW9kZWw6IFF1ZXN0aW9uU2VsZWN0QmFzZSwgZWRpdG9yKSA9PiB7XG4gICAgZWxlbWVudHNbMF0ub25jbGljayA9IGUgPT4gZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIHZhciBkZWNvcmF0aW9uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICBkZWNvcmF0aW9uLmlubmVySFRNTCA9XG4gICAgICBcIjxzZWxlY3QtaXRlbXMtZWRpdG9yIHBhcmFtcz0ncXVlc3Rpb246IHF1ZXN0aW9uLCBlZGl0b3I6IGVkaXRvciwgdmFsdWVOYW1lOiBcXFwiXCIgK1xuICAgICAgKGl0ZW1BZG9ybmVyLmlucGxhY2VFZGl0Rm9yVmFsdWVzID8gXCJ2YWx1ZVwiIDogXCJ0ZXh0XCIpICtcbiAgICAgIFwiXFxcIic+PC9zZWxlY3QtaXRlbXMtZWRpdG9yPlwiO1xuICAgIGVsZW1lbnRzWzBdLmFwcGVuZENoaWxkKGRlY29yYXRpb24pO1xuICAgIGtvLmFwcGx5QmluZGluZ3MoXG4gICAgICB7XG4gICAgICAgIHF1ZXN0aW9uOiBtb2RlbCxcbiAgICAgICAgZWRpdG9yOiBlZGl0b3JcbiAgICAgIH0sXG4gICAgICBkZWNvcmF0aW9uXG4gICAgKTtcbiAgICBrby50YXNrcy5ydW5FYXJseSgpO1xuICAgIGVkaXRvci5vbkFkb3JuZXJSZW5kZXJlZENhbGxiYWNrKG1vZGVsLCBcInNlbGVjdC1jaG9pY2VzXCIsIGRlY29yYXRpb24pO1xuICB9LFxuICBpc0V4cGFuZGVkOiB0cnVlXG59O1xuXG5yZWdpc3RlckFkb3JuZXIoXCJzZWxlY3QtY2hvaWNlc1wiLCBzZWxlY3RJdGVtc0VkaXRvckFkb3JuZXIpO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2Fkb3JuZXJzL3NlbGVjdC1pdGVtcy1lZGl0b3IudHMiLCJpbXBvcnQgKiBhcyBTdXJ2ZXkgZnJvbSBcInN1cnZleS1rbm9ja291dFwiO1xuaW1wb3J0IHsgU3VydmV5UHJvcGVydHlFZGl0b3JGYWN0b3J5IH0gZnJvbSBcIi4vcHJvcGVydHlFZGl0b3JzL3Byb3BlcnR5RWRpdG9yRmFjdG9yeVwiO1xuaW1wb3J0IHsgU3VydmV5UHJvcGVydHlFZGl0b3JCYXNlIH0gZnJvbSBcIi4vcHJvcGVydHlFZGl0b3JzL3Byb3BlcnR5RWRpdG9yQmFzZVwiO1xuXG5leHBvcnQgY2xhc3MgRXh0ZW50aW9ucyB7XG4gIHB1YmxpYyBzdGF0aWMgcmVnaXN0ZXJDdXN0b21Qcm9wZXJ0eUVkaXRvcihuYW1lOiBzdHJpbmcsIHdpZGdldEpTT046IGFueSkge1xuICAgIFN1cnZleVByb3BlcnR5RWRpdG9yRmFjdG9yeS5yZWdpc3RlckN1c3RvbUVkaXRvcihuYW1lLCB3aWRnZXRKU09OKTtcbiAgfVxuICBwdWJsaWMgc3RhdGljIHVucmVnaXN0ZXJDdXN0b21Qcm9wZXJ0eUVkaXRvcihuYW1lOiBzdHJpbmcpIHtcbiAgICBTdXJ2ZXlQcm9wZXJ0eUVkaXRvckZhY3RvcnkudW5yZWdpc3RlckN1c3RvbUVkaXRvcihuYW1lKTtcbiAgfVxuICBwdWJsaWMgc3RhdGljIHJlZ2lzdGVyUHJvcGVydHlFZGl0b3IoXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIGNyZWF0b3I6IChwcm9wZXJ0eTogU3VydmV5Lkpzb25PYmplY3RQcm9wZXJ0eSkgPT4gU3VydmV5UHJvcGVydHlFZGl0b3JCYXNlXG4gICkge1xuICAgIFN1cnZleVByb3BlcnR5RWRpdG9yRmFjdG9yeS5yZWdpc3RlckVkaXRvcihuYW1lLCBjcmVhdG9yKTtcbiAgfVxufVxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2V4dGVudGlvbnMudHMiLCJpbXBvcnQgeyBlZGl0b3JMb2NhbGl6YXRpb24gfSBmcm9tIFwiLi4vZWRpdG9yTG9jYWxpemF0aW9uXCI7XHJcblxyXG5leHBvcnQgdmFyIGRhbmlzaFN0cmluZ3MgPSB7XHJcbiAgLy9zdXJ2ZXkgdGVtcGxhdGVzXHJcbiAgc3VydmV5OiB7XHJcbiAgICBlZGl0OiBcIlJlZGlnZXJcIixcclxuICAgIGRyb3BRdWVzdGlvbjogXCJUcsOmayBldCBzcMO4cmdzbcOlbCBoZXJ0aWwgZnJhIHBhbGV0dGVuIHRpbCB2ZW5zdHJlLlwiLFxyXG4gICAgY29weTogXCJLb3BpZXJcIixcclxuICAgIGFkZFRvVG9vbGJveDogXCJUaWxmw7hqIHRpbCBwYWxldHRlblwiLFxyXG4gICAgZGVsZXRlUGFuZWw6IFwiU2xldCBwYW5lbFwiLFxyXG4gICAgZGVsZXRlUXVlc3Rpb246IFwiU2xldCBzcMO4cmdzbcOlbFwiLFxyXG4gICAgY29udmVydFRvOiBcIktvbnZlcnRlciB0aWxcIixcclxuICAgIGRyYWc6IFwiVHLDpmsgZWxlbWVudFwiXHJcbiAgfSxcclxuICAvL3F1ZXN0aW9uVHlwZXNcclxuICBxdDoge1xyXG4gICAgZGVmYXVsdDogXCJTdGFuZGFyZFwiLFxyXG4gICAgY2hlY2tib3g6IFwiQWZrcnlkc25pbmdzZmVsdFwiLFxyXG4gICAgY29tbWVudDogXCJLb21tZW50YXJcIixcclxuICAgIGltYWdlcGlja2VyOiBcIkJpbGxlZHbDpmxnZXJcIixcclxuICAgIGRyb3Bkb3duOiBcIkRyb3Bkb3duXCIsXHJcbiAgICBmaWxlOiBcIkZpbFwiLFxyXG4gICAgaHRtbDogXCJIdG1sXCIsXHJcbiAgICBtYXRyaXg6IFwiTWF0cmljZSAow6l0IHZhbGcpXCIsXHJcbiAgICBtYXRyaXhkcm9wZG93bjogXCJNYXRyaWNlIChmbGVyZSB2YWxnKVwiLFxyXG4gICAgbWF0cml4ZHluYW1pYzogXCJNYXRyaWNlIChkeW5hbWlza2UgcsOma2tlcilcIixcclxuICAgIG11bHRpcGxldGV4dDogXCJGbGVyZSB0ZWtzdGZlbHRlclwiLFxyXG4gICAgcGFuZWw6IFwiUGFuZWxcIixcclxuICAgIHBhbmVsZHluYW1pYzogXCJQYW5lbCAoZHluYW1pc2tlIHBhbmVsZXIpXCIsXHJcbiAgICByYWRpb2dyb3VwOiBcIkFsdGVybmF0aXZrbmFwXCIsXHJcbiAgICByYXRpbmc6IFwiVnVyZGVyaW5nXCIsXHJcbiAgICB0ZXh0OiBcIlRla3N0ZmVsdFwiLFxyXG4gICAgYm9vbGVhbjogXCJTYW5kdC9mYWxza1wiLFxyXG4gICAgZXhwcmVzc2lvbjogXCJVZHRyeWtcIlxyXG4gIH0sXHJcbiAgLy9TdHJpbmdzIGluIEVkaXRvclxyXG4gIGVkOiB7XHJcbiAgICBkZWZhdWx0TG9jYWxlOiBcIlN0YW5kYXJkICh7MH0pXCIsXHJcbiAgICBzdXJ2ZXk6IFwiVW5kZXJzw7hnZWxzZVwiLFxyXG4gICAgc2V0dGluZ3M6IFwiSW5kc3RpbGxpbmdlciBmb3IgdW5kZXJzw7hnZWxzZVwiLFxyXG4gICAgZWRpdFN1cnZleTogXCJSZWRpZ2VyIHVuZGVyc8O4Z2Vsc2VcIixcclxuICAgIGFkZE5ld1BhZ2U6IFwiVGlsZsO4aiBueSBzaWRlXCIsXHJcbiAgICBtb3ZlUmlnaHQ6IFwiR8OlIHRpbCBow7hqcmVcIixcclxuICAgIG1vdmVMZWZ0OiBcIkfDpSB0aWwgdmVuc3RyZVwiLFxyXG4gICAgZGVsZXRlUGFnZTogXCJTbGV0IHNpZGVcIixcclxuICAgIGVkaXRQYWdlOiBcIlJlZGlnZXIgc2lkZVwiLFxyXG4gICAgZWRpdDogXCJSZWRpZ2VyXCIsXHJcbiAgICBuZXdQYWdlTmFtZTogXCJzaWRlXCIsXHJcbiAgICBuZXdRdWVzdGlvbk5hbWU6IFwic3DDuHJnc23DpWxcIixcclxuICAgIG5ld1BhbmVsTmFtZTogXCJwYW5lbFwiLFxyXG4gICAgdGVzdFN1cnZleTogXCJBZnByw7h2IHVuZGVyc8O4Z2Vsc2VcIixcclxuICAgIHRlc3RTdXJ2ZXlBZ2FpbjogXCJBZnByw7h2IHVuZGVyc8O4Z2Vsc2UgaWdlblwiLFxyXG4gICAgdGVzdFN1cnZleVdpZHRoOiBcIkJyZWRkZSBhZiB1bmRlcnPDuGdlbHNlOiBcIixcclxuICAgIGVtYmVkU3VydmV5OiBcIkluZGxlanIgdW5kZXJzw7hnZWxzZVwiLFxyXG4gICAgdHJhbnNsYXRpb246IFwiT3ZlcnPDpnR0ZWxzZVwiLFxyXG4gICAgc2F2ZVN1cnZleTogXCJHZW0gdW5kZXJzw7hnZWxzZVwiLFxyXG4gICAgZGVzaWduZXI6IFwiVW5kZXJzw7hnZWxzZXNkZXNpZ25lclwiLFxyXG4gICAganNvbkVkaXRvcjogXCJKU09OIEVkaXRvclwiLFxyXG4gICAgdW5kbzogXCJGb3J0cnlkXCIsXHJcbiAgICByZWRvOiBcIkFubnVsbGVyIGZvcnRyeWRcIixcclxuICAgIG9wdGlvbnM6IFwiSW5kc3RpbGxpbmdlclwiLFxyXG4gICAgZ2VuZXJhdGVWYWxpZEpTT046IFwiR2VuZXJlciBneWxkaW5nIEpTT05cIixcclxuICAgIGdlbmVyYXRlUmVhZGFibGVKU09OOiBcIkdlbmVyZXIgbMOmc2JhciBKU09OXCIsXHJcbiAgICB0b29sYm94OiBcIlbDpnJrdMO4anNrYXNzZVwiLFxyXG4gICAgdG9vbGJveEdlbmVyYWxDYXRlZ29yeTogXCJHZW5lcmVsdFwiLFxyXG4gICAgZGVsU2VsT2JqZWN0OiBcIlNsZXQgdmFsZ3Qgb2JqZWt0XCIsXHJcbiAgICBlZGl0U2VsT2JqZWN0OiBcIlJlZGlnZXIgdmFsZ3Qgb2JqZWt0XCIsXHJcbiAgICBjb3JyZWN0SlNPTjogXCJSZXQgdmVubGlnc3QgSlNPTi5cIixcclxuICAgIHN1cnZleVJlc3VsdHM6IFwiVW5kZXJzw7hnZWxzZXNyZXN1bHRhdDogXCIsXHJcbiAgICBtb2RpZmllZDogXCLDhm5kcmV0XCIsXHJcbiAgICBzYXZpbmc6IFwiR2VtbWVyXCIsXHJcbiAgICBzYXZlZDogXCJHZW10XCIsXHJcbiAgICBzYXZlRXJyb3I6IFwiRmVqbCEgVW5kZXJzw7hnZWxzZW4gZXIgaWtrZSBibGV2ZXQgZ2VtdC5cIixcclxuICAgIHRyYW5zbGF0aW9uQWRkTGFuZ3VhZ2U6IFwiVsOmbGcgZXQgc3Byb2cgYXQgb3ZlcnPDpnR0ZVwiLFxyXG4gICAgdHJhbnNsYXRpb25TaG93QWxsU3RyaW5nczogXCJWaXMgYWxsZSB0ZWtzdHN0cmVuZ2VcIixcclxuICAgIHRyYW5zbGF0aW9uU2hvd0FsbFBhZ2VzOiBcIlZpcyBhbGxlIHNpZGVyXCIsXHJcbiAgICB0cmFuc2xhdGlvbk5vU3RyaW5nczogXCJJbmdlbiB0ZWtzdHN0cmVuZ2UgYXQgb3ZlcnPDpnR0ZS4gUmV0IGZpbHRlcmV0LlwiLFxyXG4gICAgdHJhbnNsYXRpb25FeHBvcnRUb1NDVkJ1dHRvbjogXCJFa3Nwb3J0ZXIgdGlsIENTVlwiLFxyXG4gICAgdHJhbnNsYXRpb25JbXBvcnRGcm9tU0NWQnV0dG9uOiBcIkltcG9ydGVyIGZyYSBDU1ZcIixcclxuICAgIHRyYW5zbGF0aW9uTWVyZ2VMb2NhbGVXaXRoRGVmYXVsdDogXCJGbGV0IHswfSBtZWQgc3RhbmRhcmRzcHJvZ1wiXHJcbiAgfSxcclxuICAvL1Byb3BlcnR5IG5hbWVzIGluIHRhYmxlIGhlYWRlcnNcclxuICBwZWw6IHtcclxuICAgIGlzUmVxdWlyZWQ6IFwiUMOla3LDpnZldD9cIlxyXG4gIH0sXHJcbiAgLy9Qcm9wZXJ0eSBFZGl0b3JzXHJcbiAgcGU6IHtcclxuICAgIGFwcGx5OiBcIkFudmVuZFwiLFxyXG4gICAgb2s6IFwiT0tcIixcclxuICAgIGNhbmNlbDogXCJBbm51bGxlclwiLFxyXG4gICAgcmVzZXQ6IFwiTnVsc3RpbFwiLFxyXG4gICAgY2xvc2U6IFwiTHVrXCIsXHJcbiAgICBkZWxldGU6IFwiU2xldFwiLFxyXG4gICAgYWRkTmV3OiBcIlRpbGbDuGogbnlcIixcclxuICAgIGFkZEl0ZW06IFwiS2xpayBmb3IgYXQgdGlsZsO4amUuLi5cIixcclxuICAgIHJlbW92ZUFsbDogXCJGamVybiBhbGxlXCIsXHJcbiAgICBlZGl0OiBcIlJlZGlnZXJcIixcclxuICAgIGl0ZW1WYWx1ZUVkaXQ6IFwiU3lubGlnIGh2aXNcIixcclxuICAgIGVkaXRDaG9pY2VzOiBcIlJlZGlnZXIgdmFsZ211bGlnaGVkZXJcIixcclxuICAgIG1vdmU6IFwiRmx5dFwiLFxyXG4gICAgZW1wdHk6IFwiPHRvbT5cIixcclxuICAgIG5vdEVtcHR5OiBcIjxyZWRpZ8OpciB2w6ZyZGk+XCIsXHJcbiAgICBmYXN0RW50cnk6IFwiRmFzdCBFbnRyeVwiLFxyXG4gICAgZm9ybUVudHJ5OiBcIkZvcm0gRW50cnlcIixcclxuICAgIHRlc3RTZXJ2aWNlOiBcIlRlc3QgdGhlIHNlcnZpY2VcIixcclxuICAgIGNvbmRpdGlvblNlbGVjdFF1ZXN0aW9uOiBcIlbDpmxnIHNww7hyZ3Ntw6VsLi4uXCIsXHJcbiAgICBjb25kaXRpb25WYWx1ZVF1ZXN0aW9uVGl0bGU6IFwiSW5kdGFzdC92w6ZsZyB2w6ZyZGlcIixcclxuICAgIGNvbmRpdGlvbkJ1dHRvbkFkZDogXCJUaWxmw7hqXCIsXHJcbiAgICBjb25kaXRpb25CdXR0b25SZXBsYWNlOiBcIkVyc3RhdFwiLFxyXG4gICAgY29uZGl0aW9uSGVscDpcclxuICAgICAgXCJJbmR0YXN0IGV0IGJvb2xzayB1ZHRyeWsuIERldCBza2FsIHJldHVybmVyZSB0cnVlIGZvciBhdCBob2xkZSBzcMO4cmdzbcOlbGV0L3NpZGVuIHN5bmxpZy4gRm9yIGVrc2VtcGVsOiB7cXVlc3Rpb24xfSA9ICd2YWx1ZTEnIG9yICh7cXVlc3Rpb24yfSAqIHtxdWVzdGlvbjR9ICA+IDIwIGFuZCB7cXVlc3Rpb24zfSA8IDUpXCIsXHJcbiAgICBleHByZXNzaW9uSGVscDpcclxuICAgICAgXCJJbmR0YXN0IGV0IHVkdHJ5ay4gRHUga2FuIGJydWdlIGtyw7hsbGUtcGFyZW50ZXNlciBmb3IgYXQgZsOlIGFkZ2FuZyB0aWwgc3ZhcmVuZTogJ3txdWVzdGlvbjF9ICsge3F1ZXN0aW9uMn0nLCAnKHtwcmljZX0qe3F1YW50aXR5fSkgKiAoMTAwIC0ge2Rpc2NvdW50fSknXCIsXHJcbiAgICBhY2VFZGl0b3JIZWxwOiBcIlRhc3QgY3RybCtzcGFjZSBmb3IgaGrDpmxwIHRpbCBhdCBhZnNsdXR0ZSB1ZHRyeWtrZXRcIixcclxuICAgIGFjZUVkaXRvclJvd1RpdGxlOiBcIkFrdHVlbCByw6Zra2VcIixcclxuICAgIGFjZUVkaXRvclBhbmVsVGl0bGU6IFwiQWt0dWVsdCBwYW5lbFwiLFxyXG4gICAgc2hvd01vcmU6IFwiU2UgZG9rdW1lbnRhdGlvbmVuIGZvciBmbGVyZSBpbmZvcm1hdGlvbmVyXCIsXHJcbiAgICBjb25kaXRpb25TaG93TW9yZVVybDpcclxuICAgICAgXCJodHRwczovL3N1cnZleWpzLmlvL0RvY3VtZW50YXRpb24vTGlicmFyeVBhcmFtZXRlcj9pZD1RdWVzdGlvbiZwYXJhbWV0ZXI9dmlzaWJsZUlmXCIsXHJcbiAgICBhc3Npc3RhbnRUaXRsZTogXCJUaWxnw6ZuZ2VsaWdlIHNww7hyZ3Ntw6VsOlwiLFxyXG4gICAgY2VsbHNFbXB0eVJvd3NDb2x1bW5zOiBcIkRlciBza2FsIHbDpnJlIG1pbmRzdCDDqW4ga29sb25uZSBlbGxlciByw6Zra2VcIixcclxuXHJcbiAgICBwcm9wZXJ0eUlzRW1wdHk6IFwiSW5kdGFzdCBlbiB2w6ZyZGlcIixcclxuICAgIHZhbHVlOiBcIlbDpnJkaVwiLFxyXG4gICAgdGV4dDogXCJUZWtzdFwiLFxyXG4gICAgcm93aWQ6IFwiUsOma2tlIElEXCIsXHJcbiAgICBpbWFnZUxpbms6IFwiQmlsbGVkbGlua1wiLFxyXG4gICAgY29sdW1uRWRpdDogXCJSZWRpZ2VyIGtvbG9ubmU6IHswfVwiLFxyXG4gICAgaXRlbUVkaXQ6IFwiUmVkaWfDqXI6IHswfVwiLFxyXG5cclxuICAgIHVybDogXCJVUkxcIixcclxuICAgIHBhdGg6IFwiU3RpXCIsXHJcbiAgICB2YWx1ZU5hbWU6IFwiVsOmcmRpZW5zIG5hdm5cIixcclxuICAgIHRpdGxlTmFtZTogXCJUaXRlbG5hdm5cIixcclxuXHJcbiAgICBoYXNPdGhlcjogXCJIYXIgYW5kZXQgZWxlbWVudFwiLFxyXG4gICAgb3RoZXJUZXh0OiBcIkFuZGV0IGVsZW1lbnQgdGVrc3RcIixcclxuICAgIG5hbWU6IFwiTmF2blwiLFxyXG4gICAgdGl0bGU6IFwiVGl0ZWxcIixcclxuICAgIGNlbGxUeXBlOiBcIkNlbGxldHlwZVwiLFxyXG4gICAgY29sQ291bnQ6IFwiQW50YWwga29sb25uZXJcIixcclxuICAgIGNob2ljZXNPcmRlcjogXCJWw6ZsZyByw6Zra2Vmw7hsZ2UgcMOlIHZhbGdcIixcclxuICAgIHZpc2libGU6IFwiRXIgc3lubGlnP1wiLFxyXG4gICAgaXNSZXF1aXJlZDogXCJFciBww6VrcsOmdmV0P1wiLFxyXG4gICAgc3RhcnRXaXRoTmV3TGluZTogXCJTa2FsIHN0YXJ0ZSBtZWQgbnkgbGluaWU/XCIsXHJcbiAgICByb3dzOiBcIkFudGFsIHLDpmtrZXJcIixcclxuICAgIHBsYWNlSG9sZGVyOiBcIkhpbnQtdGVrc3RcIixcclxuICAgIHNob3dQcmV2aWV3OiBcIlZpc2VzIGZvcmjDpW5kc3Zpc25pbmcgYWYgYmlsbGVkZXI/XCIsXHJcbiAgICBzdG9yZURhdGFBc1RleHQ6IFwiR2VtIGZpbGluZGhvbGQgaSBKU09OLXJlc3VsdGF0IHNvbSB0ZWtzdFwiLFxyXG4gICAgbWF4U2l6ZTogXCJNYWtzaW1hbCBmaWxzdMO4cnJlbHNlIGkgYnl0ZXNcIixcclxuICAgIGltYWdlSGVpZ2h0OiBcIkJpbGxlZGjDuGpkZVwiLFxyXG4gICAgaW1hZ2VXaWR0aDogXCJCaWxsZWRicmVkZGVcIixcclxuICAgIHJvd0NvdW50OiBcIkFudGFsIHLDpmtrZXJcIixcclxuICAgIGNvbHVtbkxheW91dDogXCJLb2xvbm5lbGF5b3V0XCIsXHJcbiAgICBhZGRSb3dMb2NhdGlvbjogXCJUaWxmw7hqIHLDpmtrZSBrbmFwcGxhY2VyaW5nXCIsXHJcbiAgICBhZGRSb3dUZXh0OiBcIlRpbGbDuGogcsOma2tlIGtuYXB0ZWtzdFwiLFxyXG4gICAgcmVtb3ZlUm93VGV4dDogXCJGamVybiByw6Zra2Uga25hcHRla3N0XCIsXHJcbiAgICBtaW5SYXRlRGVzY3JpcHRpb246IFwiQmVza3JpdiBsYXZlc3RlIHZ1cmRlcmluZ1wiLFxyXG4gICAgbWF4UmF0ZURlc2NyaXB0aW9uOiBcIkJlc2tyaXYgaMO4amVzdGUgdnVyZGVyaW5nXCIsXHJcbiAgICBpbnB1dFR5cGU6IFwiSW5wdXR0eXBlXCIsXHJcbiAgICBvcHRpb25zQ2FwdGlvbjogXCJNdWxpZ2hlZGVyIHRla3N0XCIsXHJcbiAgICBkZWZhdWx0VmFsdWU6IFwiU3RhbmRhcmR2w6ZyZGlcIixcclxuICAgIGNlbGxzRGVmYXVsdFJvdzogXCJTdGFuZGFyZCBjZWxsZXRla3N0XCIsXHJcblxyXG4gICAgc3VydmV5RWRpdG9yVGl0bGU6IFwiUmVkaWdlciB1bmRlcnPDuGdlbHNlc2luZHN0aWxsaW5nZXJcIixcclxuICAgIHFFZGl0b3JUaXRsZTogXCJSZWRpZ8OpcjogezB9XCIsXHJcblxyXG4gICAgbWF4TGVuZ3RoOiBcIk1heGltYWwgbMOmbmdkZVwiLFxyXG5cclxuICAgIC8vc3VydmV5XHJcbiAgICBzaG93VGl0bGU6IFwiVmlzL3NranVsIHRpdGVsXCIsXHJcbiAgICBsb2NhbGU6IFwiU3RhbmRhcmRzcHJvZ1wiLFxyXG4gICAgbW9kZTogXCJNb2RlIChyZWRpZ2VyL3Nrcml2ZWJlc2t5dHRldClcIixcclxuICAgIGNsZWFySW52aXNpYmxlVmFsdWVzOiBcIkZqZXJuIHVzeW5saWdlIHbDpnJkaWVyXCIsXHJcbiAgICBjb29raWVOYW1lOiBcIkNvb2tpZW5hdm4gKGZvciBhdCB1bmRnw6UgYXQgYWZ2aWtsZSB1bmRlcnPDuGdlbHNlbiB0byBnYW5nZSBsb2thbHQpXCIsXHJcbiAgICBzZW5kUmVzdWx0T25QYWdlTmV4dDogXCJTZW5kIHVuZGVyc8O4Z2Vsc2VzcmVzdWx0YXRldCB2ZWQgbsOmc3RlIHNpZGVcIixcclxuICAgIHN0b3JlT3RoZXJzQXNDb21tZW50OiBcIkdlbSAnb3RoZXJzJyB2w6ZyZGllbiBpIGV0IHNlcGVyYXQgZmVsdFwiLFxyXG4gICAgc2hvd1BhZ2VUaXRsZXM6IFwiVmlzIHNpZGV0aXRsZXJcIixcclxuICAgIHNob3dQYWdlTnVtYmVyczogXCJWaXMgc2lkZW51bXJlXCIsXHJcbiAgICBwYWdlUHJldlRleHQ6IFwiRm9ycmlnZSBzaWRlIGtuYXB0ZWtzdFwiLFxyXG4gICAgcGFnZU5leHRUZXh0OiBcIk7DpnN0ZSBzaWRlIGtuYXB0ZWtzdFwiLFxyXG4gICAgY29tcGxldGVUZXh0OiBcIkbDpnJkaWcga25hcHRla3N0XCIsXHJcbiAgICBzdGFydFN1cnZleVRleHQ6IFwiU3RhcnQga25hcHRla3N0XCIsXHJcbiAgICBzaG93TmF2aWdhdGlvbkJ1dHRvbnM6IFwiVmlzIG5hdmlnYXRpb25za25hcHBlciAoc3RhbmRhcmQgbmF2aWdhdGlvbilcIixcclxuICAgIHNob3dQcmV2QnV0dG9uOiBcIlZpcyBmb3JyaWdlIGtuYXAgKGJydWdlcmVuIG3DpSBnw6UgdGlsYmFnZSB0aWwgZm9ycmlnZSBzaWRlKVwiLFxyXG4gICAgZmlyc3RQYWdlSXNTdGFydGVkOiBcIkRlbiBmw7hyc3RlIHNpZGUgaW4gdW5kZXJzw7hnZWxzZW4gZXIgc3RhcnRlbiBww6UgdW5kZXJzw7hnZWxzZW4uXCIsXHJcbiAgICBzaG93Q29tcGxldGVkUGFnZTogXCJWaXMgYWZzbHV0bmluZ3NzaWRlbiB0aWwgc2x1dCAoY29tcGxldGVkSHRtbClcIixcclxuICAgIGdvTmV4dFBhZ2VBdXRvbWF0aWM6XHJcbiAgICAgIFwiR8OlIHRpbCBuw6ZzdGUgc2lkZSBhdXRvbWF0aXNrIG7DpXIgYWxsZSBzcMO4cmdzbcOlbCBlciBiZXN2YXJldFwiLFxyXG4gICAgc2hvd1Byb2dyZXNzQmFyOiBcIlZpcyBmcmVtZHJpZnRzbGluamVcIixcclxuICAgIHF1ZXN0aW9uVGl0bGVMb2NhdGlvbjogXCJTcMO4cmdzbcOlbHN0aXRlbCBwbGFjZXJpbmdcIixcclxuICAgIHJlcXVpcmVkVGV4dDogXCJQw6VrcsOmdmV0IHNww7hyZ3Ntw6Vsc3N5bWJvbChlcilcIixcclxuICAgIHF1ZXN0aW9uU3RhcnRJbmRleDogXCJTcMO4cmdzbcOlbCBzdGFydGluZGV4ICgxLCAyIGVsbGVyICdBJywgJ2EnKVwiLFxyXG4gICAgc2hvd1F1ZXN0aW9uTnVtYmVyczogXCJWaXMgc3DDuHJnc23DpWxzbnVtcmVcIixcclxuICAgIHF1ZXN0aW9uVGl0bGVUZW1wbGF0ZTpcclxuICAgICAgXCJTcMO4cmdzbcOlbHN0aXRlbCB0ZW1wbGF0ZSwgc3RhbmRhcmQgZXI6ICd7bm99LiB7cmVxdWlyZX0ge3RpdGxlfSdcIixcclxuICAgIHF1ZXN0aW9uRXJyb3JMb2NhdGlvbjogXCJTcMO4cmdzbcOlbHNmZWpsIHBsYWNlcmluZ1wiLFxyXG4gICAgZm9jdXNGaXJzdFF1ZXN0aW9uQXV0b21hdGljOiBcIkZva3Vzw6lyIGbDuHJzdGUgc3DDuHJnc23DpWwgdmVkIHNpZGVza2lmdFwiLFxyXG4gICAgcXVlc3Rpb25zT3JkZXI6IFwiUsOma2tlZsO4bGdlIGFmIHNww7hyZ3Ntw6VsIHDDpSBzaWRlblwiLFxyXG4gICAgbWF4VGltZVRvRmluaXNoOiBcIk1heGltYWwgdGlkIHRpbCBhdCBnZW5uZW1mw7hyZSB1bmRlcnPDuGdlbHNlblwiLFxyXG4gICAgbWF4VGltZVRvRmluaXNoUGFnZTogXCJNYXhpbWFsIHRpZCB0aWwgYXQgZ2VubmVtZsO4cmUgZW4gc2lkZSBpIHVuZGVyc8O4Z2Vsc2VuXCIsXHJcbiAgICBzaG93VGltZXJQYW5lbDogXCJWaXMgdGlkc3BhbmVsXCIsXHJcbiAgICBzaG93VGltZXJQYW5lbE1vZGU6IFwiVmlzIHRpZHNwYW5lbCB0aWxzdGFuZFwiLFxyXG4gICAgcmVuZGVyTW9kZTogXCJSZW5kZXJpbmdzdGlsc3RhbmRcIixcclxuICAgIGFsbG93QWRkUGFuZWw6IFwiVGlsbGFkIGF0IHRpbGbDuGplIGV0IHBhbmVsXCIsXHJcbiAgICBhbGxvd1JlbW92ZVBhbmVsOiBcIlRpbGxhZCBhdCBmamVybmUgZXQgcGFuZWxcIixcclxuICAgIHBhbmVsQWRkVGV4dDogXCJUaWxmw7hqIHBhbmVsIHRla3N0XCIsXHJcbiAgICBwYW5lbFJlbW92ZVRleHQ6IFwiRmplcm4gcGFuZWwgdGVrc3RcIixcclxuICAgIGlzU2luZ2xlUGFnZTogXCJWaXMgYWxsZSBlbGVtZW50ZXIgcMOlIMOpbiBzaWRlXCIsXHJcblxyXG4gICAgdGFiczoge1xyXG4gICAgICBnZW5lcmFsOiBcIkdlbmVyZWx0XCIsXHJcbiAgICAgIGZpbGVPcHRpb25zOiBcIkluZHN0aWxsaW5nZXJcIixcclxuICAgICAgaHRtbDogXCJIdG1sLWVkaXRvclwiLFxyXG4gICAgICBjb2x1bW5zOiBcIktvbG9ubmVyXCIsXHJcbiAgICAgIHJvd3M6IFwiUsOma2tlclwiLFxyXG4gICAgICBjaG9pY2VzOiBcIlZhbGdtdWxpZ2hlZGVyXCIsXHJcbiAgICAgIGl0ZW1zOiBcIkVsZW1lbnRlclwiLFxyXG4gICAgICB2aXNpYmxlSWY6IFwiU3lubGlnIGh2aXNcIixcclxuICAgICAgZW5hYmxlSWY6IFwiQWt0aXYgaHZpc1wiLFxyXG4gICAgICByYXRlVmFsdWVzOiBcIkJlZMO4bS12w6ZyZGllclwiLFxyXG4gICAgICBjaG9pY2VzQnlVcmw6IFwiVmFsZ211bGlnaGVkZXIgZnJhIFdlYlwiLFxyXG4gICAgICBtYXRyaXhDaG9pY2VzOiBcIlN0YW5kYXJkIHZhbGdtdWxpZ2hlZGVyXCIsXHJcbiAgICAgIG11bHRpcGxlVGV4dEl0ZW1zOiBcIlRla3N0IGlucHV0bXVsaWdoZWRlclwiLFxyXG4gICAgICB2YWxpZGF0b3JzOiBcIlZhbGlkZXJpbmdlclwiLFxyXG4gICAgICBuYXZpZ2F0aW9uOiBcIk5hdmlnYXRpb25cIixcclxuICAgICAgcXVlc3Rpb246IFwiU3DDuHJnc23DpWxcIixcclxuICAgICAgY29tcGxldGVkSHRtbDogXCJGw6ZyZGlnIEh0bWxcIixcclxuICAgICAgbG9hZGluZ0h0bWw6IFwiSW5kbMOmc2VyIEh0bWxcIixcclxuICAgICAgdGltZXI6IFwiVGlkL1F1aXpcIixcclxuICAgICAgdHJpZ2dlcnM6IFwiVHJpZ2dlcmVcIixcclxuICAgICAgdGVtcGxhdGVUaXRsZTogXCJTa2FiZWxvbiB0aXRlbFwiXHJcbiAgICB9LFxyXG4gICAgZWRpdFByb3BlcnR5OiBcIlJlZGlnZXIgZWdlbnNrYWIgJ3swfSdcIixcclxuICAgIGl0ZW1zOiBcIlsgRWxlbWVudDogezB9IF1cIixcclxuXHJcbiAgICBlbnRlck5ld1ZhbHVlOiBcIkluZHRhc3QgdsOmcmRpZW4uXCIsXHJcbiAgICBub3F1ZXN0aW9uczogXCJEZXIgZXIgaW5nZW4gc3DDuHJnc23DpWwgaSB1bmRlcnPDuGdlbHNlbi5cIixcclxuICAgIGNyZWF0ZXRyaWdnZXI6IFwiT3ByZXQgZW4gdHJpZ2dlclwiLFxyXG4gICAgdHJpZ2dlck9uOiBcIlDDpSBcIixcclxuICAgIHRyaWdnZXJNYWtlUGFnZXNWaXNpYmxlOiBcIkfDuHIgc2lkZXIgc3lubGlnZTpcIixcclxuICAgIHRyaWdnZXJNYWtlUXVlc3Rpb25zVmlzaWJsZTogXCJHw7hyIHNww7hyZ3Ntw6VsIHN5bmxpZ2U6XCIsXHJcbiAgICB0cmlnZ2VyQ29tcGxldGVUZXh0OiBcIkFmbHNsdXQgc3DDuHJnZXNrZW1hIHZlZCBhdCBmb3J0c8OmdHRlLlwiLFxyXG4gICAgdHJpZ2dlck5vdFNldDogXCJUcmlnZ2VyZXIgZXIgaWtrZSBzYXRcIixcclxuICAgIHRyaWdnZXJSdW5JZjogXCJBZnZpa2wgaHZpc1wiLFxyXG4gICAgdHJpZ2dlclNldFRvTmFtZTogXCLDhm5kciB2w6ZyZGllbiBhZjogXCIsXHJcbiAgICB0cmlnZ2VyRnJvbU5hbWU6IFwiS29waWVyIHbDpnJkaSBmcmE6IFwiLFxyXG4gICAgdHJpZ2dlclJ1bkV4cHJlc3Npb246IFwiQWZ2aWtsIGRldHRlIHVkdHJ5azpcIixcclxuICAgIHRyaWdnZXJTZXRWYWx1ZTogXCJ0aWw6IFwiLFxyXG4gICAgdHJpZ2dlcklzVmFyaWFibGU6IFwiR2VtIGlra2UgdmFyaWFibGVuIGkgdW5kZXJzw7hnZWxzZXNyZXN1bHRhdGV0LlwiXHJcbiAgfSxcclxuICAvL1Byb3BlcnR5IHZhbHVlc1xyXG4gIHB2OiB7XHJcbiAgICB0cnVlOiBcInRydWVcIixcclxuICAgIGZhbHNlOiBcImZhbHNlXCIsXHJcbiAgICBpbmhlcml0OiBcImluaGVyaXRcIixcclxuICAgIHNob3c6IFwic2hvd1wiLFxyXG4gICAgaGlkZTogXCJoaWRlXCIsXHJcbiAgICBkZWZhdWx0OiBcImRlZmF1bHRcIixcclxuICAgIGluaXRpYWw6IFwiaW5pdGlhbFwiLFxyXG4gICAgcmFuZG9tOiBcInJhbmRvbVwiLFxyXG4gICAgY29sbGFwc2VkOiBcImNvbGxhcHNlZFwiLFxyXG4gICAgZXhwYW5kZWQ6IFwiZXhwYW5kZWRcIixcclxuICAgIG5vbmU6IFwibm9uZVwiLFxyXG4gICAgYXNjOiBcImFzY2VuZGluZ1wiLFxyXG4gICAgZGVzYzogXCJkZXNjZW5kaW5nXCIsXHJcbiAgICBpbmRldGVybWluYXRlOiBcImluZGV0ZXJtaW5hdGVcIixcclxuICAgIGRlY2ltYWw6IFwiZGVjaW1hbFwiLFxyXG4gICAgY3VycmVuY3k6IFwiY3VycmVuY3lcIixcclxuICAgIHBlcmNlbnQ6IFwicGVyY2VudFwiLFxyXG4gICAgZmlyc3RFeHBhbmRlZDogXCJmaXJzdEV4cGFuZGVkXCIsXHJcbiAgICBvZmY6IFwib2ZmXCIsXHJcbiAgICBvblBhbmVsOiBcIm9uUGFuZWxcIixcclxuICAgIG9uU3VydmV5OiBcIm9uU3VydmV5XCIsXHJcbiAgICBsaXN0OiBcImxpc3RcIixcclxuICAgIHByb2dyZXNzVG9wOiBcInByb2dyZXNzVG9wXCIsXHJcbiAgICBwcm9ncmVzc0JvdHRvbTogXCJwcm9ncmVzc0JvdHRvbVwiLFxyXG4gICAgcHJvZ3Jlc3NUb3BCb3R0b206IFwicHJvZ3Jlc3NUb3BCb3R0b21cIixcclxuICAgIGhvcml6b250YWw6IFwiaG9yaXpvbnRhbFwiLFxyXG4gICAgdmVydGljYWw6IFwidmVydGljYWxcIixcclxuICAgIHRvcDogXCJ0b3BcIixcclxuICAgIGJvdHRvbTogXCJib3R0b21cIixcclxuICAgIHRvcEJvdHRvbTogXCJ0b3AgYW5kIGJvdHRvbVwiLFxyXG4gICAgbGVmdDogXCJsZWZ0XCIsXHJcbiAgICBjb2xvcjogXCJjb2xvclwiLFxyXG4gICAgZGF0ZTogXCJkYXRlXCIsXHJcbiAgICBkYXRldGltZTogXCJkYXRldGltZVwiLFxyXG4gICAgXCJkYXRldGltZS1sb2NhbFwiOiBcImRhdGV0aW1lLWxvY2FsXCIsXHJcbiAgICBlbWFpbDogXCJlbWFpbFwiLFxyXG4gICAgbW9udGg6IFwibW9udGhcIixcclxuICAgIG51bWJlcjogXCJudW1iZXJcIixcclxuICAgIHBhc3N3b3JkOiBcInBhc3N3b3JkXCIsXHJcbiAgICByYW5nZTogXCJyYW5nZVwiLFxyXG4gICAgdGVsOiBcInRlbFwiLFxyXG4gICAgdGV4dDogXCJ0ZXh0XCIsXHJcbiAgICB0aW1lOiBcInRpbWVcIixcclxuICAgIHVybDogXCJ1cmxcIixcclxuICAgIHdlZWs6IFwid2Vla1wiLFxyXG4gICAgaGlkZGVuOiBcImhpZGRlblwiLFxyXG4gICAgb246IFwib25cIixcclxuICAgIG9uUGFnZTogXCJvblBhZ2VcIixcclxuICAgIGVkaXQ6IFwiZWRpdFwiLFxyXG4gICAgZGlzcGxheTogXCJkaXNwbGF5XCIsXHJcbiAgICBvbkNvbXBsZXRlOiBcIm9uQ29tcGxldGVcIixcclxuICAgIG9uSGlkZGVuOiBcIm9uSGlkZGVuXCIsXHJcbiAgICBhbGw6IFwiYWxsXCIsXHJcbiAgICBwYWdlOiBcInBhZ2VcIixcclxuICAgIHN1cnZleTogXCJzdXJ2ZXlcIixcclxuICAgIG9uTmV4dFBhZ2U6IFwib25OZXh0UGFnZVwiLFxyXG4gICAgb25WYWx1ZUNoYW5nZWQ6IFwib25WYWx1ZUNoYW5nZWRcIlxyXG4gIH0sXHJcbiAgLy9PcGVyYXRvcnNcclxuICBvcDoge1xyXG4gICAgZW1wdHk6IFwiaXMgZW1wdHlcIixcclxuICAgIG5vdGVtcHR5OiBcImlzIG5vdCBlbXB0eVwiLFxyXG4gICAgZXF1YWw6IFwiZXF1YWxzXCIsXHJcbiAgICBub3RlcXVhbDogXCJub3QgZXF1YWxzXCIsXHJcbiAgICBjb250YWluczogXCJjb250YWluc1wiLFxyXG4gICAgbm90Y29udGFpbnM6IFwibm90IGNvbnRhaW5zXCIsXHJcbiAgICBncmVhdGVyOiBcImdyZWF0ZXJcIixcclxuICAgIGxlc3M6IFwibGVzc1wiLFxyXG4gICAgZ3JlYXRlcm9yZXF1YWw6IFwiZ3JlYXRlciBvciBlcXVhbHNcIixcclxuICAgIGxlc3NvcmVxdWFsOiBcImxlc3Mgb3IgZXF1YWxzXCJcclxuICB9LFxyXG4gIC8vRW1iZWQgd2luZG93XHJcbiAgZXc6IHtcclxuICAgIGFuZ3VsYXI6IFwiQmVueXQgQW5ndWxhciB2ZXJzaW9uXCIsXHJcbiAgICBqcXVlcnk6IFwiQmVueXQgalF1ZXJ5IHZlcnNpb25cIixcclxuICAgIGtub2Nrb3V0OiBcIkJlbnl0IEtub2Nrb3V0IHZlcnNpb25cIixcclxuICAgIHJlYWN0OiBcIkJlbnl0IFJlYWN0IHZlcnNpb25cIixcclxuICAgIHZ1ZTogXCJCZW55dCBWdWUgdmVyc2lvblwiLFxyXG4gICAgYm9vdHN0cmFwOiBcIkZvciBib290c3RyYXAgZnJhbWV3b3JrXCIsXHJcbiAgICBzdGFuZGFyZDogXCJJbmdlbiBib290c3RyYXBcIixcclxuICAgIHNob3dPblBhZ2U6IFwiVmlzIHVuZGVyc8O4Z2Vsc2VuIHDDpSBlbiBzaWRlXCIsXHJcbiAgICBzaG93SW5XaW5kb3c6IFwiVmlzIHVuZGVyc8O4Z2Vsc2VuIGkgZXQgdmluZHVlXCIsXHJcbiAgICBsb2FkRnJvbVNlcnZlcjogXCJIZW50IHVuZGVyc8O4Z2Vsc2VuIHNvbSBKU09OIGZyYSBzZXJ2ZXJlblwiLFxyXG4gICAgdGl0bGVTY3JpcHQ6IFwiU2NyaXB0cyBvZyBzdHlsZXNcIixcclxuICAgIHRpdGxlSHRtbDogXCJIVE1MXCIsXHJcbiAgICB0aXRsZUphdmFTY3JpcHQ6IFwiSmF2YVNjcmlwdFwiXHJcbiAgfSxcclxuICAvL1Rlc3QgU3VydmV5XHJcbiAgdHM6IHtcclxuICAgIHNlbGVjdFBhZ2U6IFwiVsOmbGcgc2lkZW4gZm9yIGF0IHRlc3RlIGRlbjpcIlxyXG4gIH0sXHJcbiAgdmFsaWRhdG9yczoge1xyXG4gICAgYW5zd2VyY291bnR2YWxpZGF0b3I6IFwiYW5zd2VyIGNvdW50XCIsXHJcbiAgICBlbWFpbHZhbGlkYXRvcjogXCJlLW1haWxcIixcclxuICAgIGV4cHJlc3Npb252YWxpZGF0b3I6IFwiZXhwcmVzc2lvblwiLFxyXG4gICAgbnVtZXJpY3ZhbGlkYXRvcjogXCJudW1lcmljXCIsXHJcbiAgICByZWdleHZhbGlkYXRvcjogXCJyZWdleFwiLFxyXG4gICAgdGV4dHZhbGlkYXRvcjogXCJ0ZXh0XCJcclxuICB9LFxyXG4gIHRyaWdnZXJzOiB7XHJcbiAgICBjb21wbGV0ZXRyaWdnZXI6IFwidW5kZXJzw7hnZWxzZSBnZW5uZW1mw7hydFwiLFxyXG4gICAgc2V0dmFsdWV0cmlnZ2VyOiBcInPDpnQgdsOmcmRpXCIsXHJcbiAgICBjb3B5dmFsdWV0cmlnZ2VyOiBcImtvcGnDqXIgdsOmcmRpXCIsXHJcbiAgICBydW5leHByZXNzaW9udHJpZ2dlcjogXCJhZnZpa2wgdWR0cnlcIixcclxuICAgIHZpc2libGV0cmlnZ2VyOiBcInNraWZ0IHN5bmxpZ2hlZFwiXHJcbiAgfSxcclxuICAvL1Byb3BlcnRpZXNcclxuICBwOiB7XHJcbiAgICBuYW1lOiBcIm5hdm5cIixcclxuICAgIHRpdGxlOiB7XHJcbiAgICAgIG5hbWU6IFwidGl0ZWxcIixcclxuICAgICAgdGl0bGU6IFwiTGFkIGRlbiB2w6ZyZSB0b20gaHZpcyBkZXQgZXIgZGV0IHNhbW1lIHNvbSAnTmF2bidcIlxyXG4gICAgfSxcclxuXHJcbiAgICBuYXZpZ2F0aW9uQnV0dG9uc1Zpc2liaWxpdHk6IFwibmF2aWdhdGlvbkJ1dHRvbnNWaXNpYmlsaXR5XCIsXHJcbiAgICBxdWVzdGlvbnNPcmRlcjogXCJxdWVzdGlvbnNPcmRlclwiLFxyXG4gICAgbWF4VGltZVRvRmluaXNoOiBcIm1heFRpbWVUb0ZpbmlzaFwiLFxyXG5cclxuICAgIHZpc2libGU6IFwidmlzaWJsZVwiLFxyXG4gICAgdmlzaWJsZUlmOiBcInZpc2libGVJZlwiLFxyXG4gICAgcXVlc3Rpb25UaXRsZUxvY2F0aW9uOiBcInF1ZXN0aW9uVGl0bGVMb2NhdGlvblwiLFxyXG4gICAgZGVzY3JpcHRpb246IFwiZGVzY3JpcHRpb25cIixcclxuICAgIHN0YXRlOiBcInN0YXRlXCIsXHJcbiAgICBpc1JlcXVpcmVkOiBcImlzUmVxdWlyZWRcIixcclxuICAgIGluZGVudDogXCJpbmRlbnRcIixcclxuICAgIHJlcXVpcmVkRXJyb3JUZXh0OiBcInJlcXVpcmVkRXJyb3JUZXh0XCIsXHJcbiAgICBzdGFydFdpdGhOZXdMaW5lOiBcInN0YXJ0V2l0aE5ld0xpbmVcIixcclxuICAgIGlubmVySW5kZW50OiBcImlubmVySW5kZW50XCIsXHJcbiAgICBwYWdlOiBcInBhZ2VcIixcclxuXHJcbiAgICB3aWR0aDogXCJ3aWR0aFwiLFxyXG5cclxuICAgIGNvbW1lbnRUZXh0OiBcImNvbW1lbnRUZXh0XCIsXHJcbiAgICB2YWx1ZU5hbWU6IFwidmFsdWVOYW1lXCIsXHJcbiAgICBlbmFibGVJZjogXCJlbmFibGVJZlwiLFxyXG4gICAgZGVmYXVsdFZhbHVlOiBcImRlZmF1bHRWYWx1ZVwiLFxyXG4gICAgY29ycmVjdEFuc3dlcjogXCJjb3JyZWN0QW5zd2VyXCIsXHJcbiAgICByZWFkT25seTogXCJyZWFkT25seVwiLFxyXG4gICAgdmFsaWRhdG9yczogXCJ2YWxpZGF0b3JzXCIsXHJcbiAgICB0aXRsZUxvY2F0aW9uOiBcInRpdGxlTG9jYXRpb25cIixcclxuXHJcbiAgICBoYXNDb21tZW50OiBcImhhc0NvbW1lbnRcIixcclxuICAgIGhhc090aGVyOiBcImhhc090aGVyXCIsXHJcbiAgICBjaG9pY2VzOiBcImNob2ljZXNcIixcclxuICAgIGNob2ljZXNPcmRlcjogXCJjaG9pY2VzT3JkZXJcIixcclxuICAgIGNob2ljZXNCeVVybDogXCJjaG9pY2VzQnlVcmxcIixcclxuICAgIG90aGVyVGV4dDogXCJvdGhlclRleHRcIixcclxuICAgIG90aGVyRXJyb3JUZXh0OiBcIm90aGVyRXJyb3JUZXh0XCIsXHJcbiAgICBzdG9yZU90aGVyc0FzQ29tbWVudDogXCJzdG9yZU90aGVyc0FzQ29tbWVudFwiLFxyXG5cclxuICAgIGxhYmVsOiBcImxhYmVsXCIsXHJcbiAgICBzaG93VGl0bGU6IFwic2hvd1RpdGxlXCIsXHJcbiAgICB2YWx1ZVRydWU6IFwidmFsdWVUcnVlXCIsXHJcbiAgICB2YWx1ZUZhbHNlOiBcInZhbHVlRmFsc2VcIixcclxuXHJcbiAgICBjb2xzOiBcImNvbHNcIixcclxuICAgIHJvd3M6IFwicm93c1wiLFxyXG4gICAgcGxhY2VIb2xkZXI6IFwicGxhY2VIb2xkZXJcIixcclxuXHJcbiAgICBvcHRpb25zQ2FwdGlvbjogXCJvcHRpb25zQ2FwdGlvblwiLFxyXG5cclxuICAgIGV4cHJlc3Npb246IFwiZXhwcmVzc2lvblwiLFxyXG4gICAgZm9ybWF0OiBcImZvcm1hdFwiLFxyXG4gICAgZGlzcGxheVN0eWxlOiBcImRpc3BsYXlTdHlsZVwiLFxyXG4gICAgY3VycmVuY3k6IFwiY3VycmVuY3lcIixcclxuICAgIHVzZUdyb3VwaW5nOiBcInVzZUdyb3VwaW5nXCIsXHJcblxyXG4gICAgc2hvd1ByZXZpZXc6IFwic2hvd1ByZXZpZXdcIixcclxuICAgIGFsbG93TXVsdGlwbGU6IFwiYWxsb3dNdWx0aXBsZVwiLFxyXG4gICAgaW1hZ2VIZWlnaHQ6IFwiaW1hZ2VIZWlnaHRcIixcclxuICAgIGltYWdlV2lkdGg6IFwiaW1hZ2VXaWR0aFwiLFxyXG4gICAgc3RvcmVEYXRhQXNUZXh0OiBcInN0b3JlRGF0YUFzVGV4dFwiLFxyXG4gICAgbWF4U2l6ZTogXCJtYXhTaXplXCIsXHJcblxyXG4gICAgaHRtbDogXCJodG1sXCIsXHJcblxyXG4gICAgY29sdW1uczogXCJjb2x1bW5zXCIsXHJcbiAgICBjZWxsczogXCJjZWxsc1wiLFxyXG4gICAgaXNBbGxSb3dSZXF1aXJlZDogXCJpc0FsbFJvd1JlcXVpcmVkXCIsXHJcblxyXG4gICAgaG9yaXpvbnRhbFNjcm9sbDogXCJob3Jpem9udGFsU2Nyb2xsXCIsXHJcbiAgICBjZWxsVHlwZTogXCJjZWxsVHlwZVwiLFxyXG4gICAgY29sdW1uc0xheW91dDogXCJjb2x1bW5zTGF5b3V0XCIsXHJcbiAgICBjb2x1bW5Db2xDb3VudDogXCJjb2x1bW5Db2xDb3VudFwiLFxyXG4gICAgY29sdW1uTWluV2lkdGg6IFwiY29sdW1uTWluV2lkdGhcIixcclxuXHJcbiAgICByb3dDb3VudDogXCJyb3dDb3VudFwiLFxyXG4gICAgbWluUm93Q291bnQ6IFwibWluUm93Q291bnRcIixcclxuICAgIG1heFJvd0NvdW50OiBcIm1heFJvd0NvdW50XCIsXHJcbiAgICBrZXlOYW1lOiBcImtleU5hbWVcIixcclxuICAgIGtleUR1cGxpY2F0aW9uRXJyb3I6IFwia2V5RHVwbGljYXRpb25FcnJvclwiLFxyXG4gICAgY29uZmlybURlbGV0ZTogXCJjb25maXJtRGVsZXRlXCIsXHJcbiAgICBjb25maXJtRGVsZXRlVGV4dDogXCJjb25maXJtRGVsZXRlVGV4dFwiLFxyXG4gICAgYWRkUm93TG9jYXRpb246IFwiYWRkUm93TG9jYXRpb25cIixcclxuICAgIGFkZFJvd1RleHQ6IFwiYWRkUm93VGV4dFwiLFxyXG4gICAgcmVtb3ZlUm93VGV4dDogXCJyZW1vdmVSb3dUZXh0XCIsXHJcblxyXG4gICAgaXRlbXM6IFwiaXRlbXNcIixcclxuICAgIGl0ZW1TaXplOiBcIml0ZW1TaXplXCIsXHJcbiAgICBjb2xDb3VudDogXCJjb2xDb3VudFwiLFxyXG5cclxuICAgIHRlbXBsYXRlVGl0bGU6IFwidGVtcGxhdGVUaXRsZVwiLFxyXG4gICAgdGVtcGxhdGVEZXNjcmlwdGlvbjogXCJ0ZW1wbGF0ZURlc2NyaXB0aW9uXCIsXHJcbiAgICBhbGxvd0FkZFBhbmVsOiBcImFsbG93QWRkUGFuZWxcIixcclxuICAgIGFsbG93UmVtb3ZlUGFuZWw6IFwiYWxsb3dSZW1vdmVQYW5lbFwiLFxyXG4gICAgcGFuZWxDb3VudDogXCJwYW5lbENvdW50XCIsXHJcbiAgICBtaW5QYW5lbENvdW50OiBcIm1pblBhbmVsQ291bnRcIixcclxuICAgIG1heFBhbmVsQ291bnQ6IFwibWF4UGFuZWxDb3VudFwiLFxyXG4gICAgcGFuZWxzU3RhdGU6IFwicGFuZWxzU3RhdGVcIixcclxuICAgIHBhbmVsQWRkVGV4dDogXCJwYW5lbEFkZFRleHRcIixcclxuICAgIHBhbmVsUmVtb3ZlVGV4dDogXCJwYW5lbFJlbW92ZVRleHRcIixcclxuICAgIHBhbmVsUHJldlRleHQ6IFwicGFuZWxQcmV2VGV4dFwiLFxyXG4gICAgcGFuZWxOZXh0VGV4dDogXCJwYW5lbE5leHRUZXh0XCIsXHJcbiAgICBzaG93UXVlc3Rpb25OdW1iZXJzOiBcInNob3dRdWVzdGlvbk51bWJlcnNcIixcclxuICAgIHNob3dSYW5nZUluUHJvZ3Jlc3M6IFwic2hvd1JhbmdlSW5Qcm9ncmVzc1wiLFxyXG4gICAgcmVuZGVyTW9kZTogXCJyZW5kZXJNb2RlXCIsXHJcbiAgICB0ZW1wbGF0ZVRpdGxlTG9jYXRpb246IFwidGVtcGxhdGVUaXRsZUxvY2F0aW9uXCIsXHJcblxyXG4gICAgcmF0ZVZhbHVlczogXCJyYXRlVmFsdWVzXCIsXHJcbiAgICByYXRlTWluOiBcInJhdGVNaW5cIixcclxuICAgIHJhdGVNYXg6IFwicmF0ZU1heFwiLFxyXG4gICAgcmF0ZVN0ZXA6IFwicmF0ZVN0ZXBcIixcclxuICAgIG1pblJhdGVEZXNjcmlwdGlvbjogXCJtaW5SYXRlRGVzY3JpcHRpb25cIixcclxuICAgIG1heFJhdGVEZXNjcmlwdGlvbjogXCJtYXhSYXRlRGVzY3JpcHRpb25cIixcclxuXHJcbiAgICBpbnB1dFR5cGU6IFwiaW5wdXRUeXBlXCIsXHJcbiAgICBzaXplOiBcInNpemVcIixcclxuXHJcbiAgICBsb2NhbGU6IFwibG9jYWxlXCIsXHJcbiAgICBmb2N1c0ZpcnN0UXVlc3Rpb25BdXRvbWF0aWM6IFwiZm9jdXNGaXJzdFF1ZXN0aW9uQXV0b21hdGljXCIsXHJcbiAgICBjb21wbGV0ZWRIdG1sOiBcImNvbXBsZXRlZEh0bWxcIixcclxuICAgIGNvbXBsZXRlZEJlZm9yZUh0bWw6IFwiY29tcGxldGVkQmVmb3JlSHRtbFwiLFxyXG4gICAgbG9hZGluZ0h0bWw6IFwibG9hZGluZ0h0bWxcIixcclxuICAgIHRyaWdnZXJzOiBcInRyaWdnZXJzXCIsXHJcbiAgICBjb29raWVOYW1lOiBcImNvb2tpZU5hbWVcIixcclxuICAgIHNlbmRSZXN1bHRPblBhZ2VOZXh0OiBcInNlbmRSZXN1bHRPblBhZ2VOZXh0XCIsXHJcbiAgICBzaG93TmF2aWdhdGlvbkJ1dHRvbnM6IFwic2hvd05hdmlnYXRpb25CdXR0b25zXCIsXHJcbiAgICBzaG93UHJldkJ1dHRvbjogXCJzaG93UHJldkJ1dHRvblwiLFxyXG4gICAgc2hvd1BhZ2VUaXRsZXM6IFwic2hvd1BhZ2VUaXRsZXNcIixcclxuICAgIHNob3dDb21wbGV0ZWRQYWdlOiBcInNob3dDb21wbGV0ZWRQYWdlXCIsXHJcbiAgICBzaG93UGFnZU51bWJlcnM6IFwic2hvd1BhZ2VOdW1iZXJzXCIsXHJcbiAgICBxdWVzdGlvbkVycm9yTG9jYXRpb246IFwicXVlc3Rpb25FcnJvckxvY2F0aW9uXCIsXHJcbiAgICBzaG93UHJvZ3Jlc3NCYXI6IFwic2hvd1Byb2dyZXNzQmFyXCIsXHJcbiAgICBtb2RlOiBcIm1vZGVcIixcclxuICAgIGdvTmV4dFBhZ2VBdXRvbWF0aWM6IFwiZ29OZXh0UGFnZUF1dG9tYXRpY1wiLFxyXG4gICAgY2hlY2tFcnJvcnNNb2RlOiBcImNoZWNrRXJyb3JzTW9kZVwiLFxyXG4gICAgY2xlYXJJbnZpc2libGVWYWx1ZXM6IFwiY2xlYXJJbnZpc2libGVWYWx1ZXNcIixcclxuICAgIHN0YXJ0U3VydmV5VGV4dDogXCJzdGFydFN1cnZleVRleHRcIixcclxuICAgIHBhZ2VQcmV2VGV4dDogXCJwYWdlUHJldlRleHRcIixcclxuICAgIHBhZ2VOZXh0VGV4dDogXCJwYWdlTmV4dFRleHRcIixcclxuICAgIGNvbXBsZXRlVGV4dDogXCJjb21wbGV0ZVRleHRcIixcclxuICAgIHJlcXVpcmVkVGV4dDogXCJyZXF1aXJlZFRleHRcIixcclxuICAgIHF1ZXN0aW9uU3RhcnRJbmRleDogXCJxdWVzdGlvblN0YXJ0SW5kZXhcIixcclxuICAgIHF1ZXN0aW9uVGl0bGVUZW1wbGF0ZTogXCJxdWVzdGlvblRpdGxlVGVtcGxhdGVcIixcclxuICAgIGZpcnN0UGFnZUlzU3RhcnRlZDogXCJmaXJzdFBhZ2VJc1N0YXJ0ZWRcIixcclxuICAgIGlzU2luZ2xlUGFnZTogXCJpc1NpbmdsZVBhZ2VcIixcclxuICAgIG1heFRpbWVUb0ZpbmlzaFBhZ2U6IFwibWF4VGltZVRvRmluaXNoUGFnZVwiLFxyXG4gICAgc2hvd1RpbWVyUGFuZWw6IFwic2hvd1RpbWVyUGFuZWxcIixcclxuICAgIHNob3dUaW1lclBhbmVsTW9kZTogXCJzaG93VGltZXJQYW5lbE1vZGVcIixcclxuXHJcbiAgICBkZWZhdWx0UGFuZWxWYWx1ZTogXCJkZWZhdWx0UGFuZWxWYWx1ZVwiLFxyXG4gICAgZGVmYXVsdFJvd1ZhbHVlOiBcImRlZmF1bHRSb3dWYWx1ZVwiLFxyXG4gICAgaGFzTm9uZTogXCJoYXNOb25lXCIsXHJcbiAgICBub25lVGV4dDogXCJub25lVGV4dFwiLFxyXG5cclxuICAgIHRleHQ6IFwidGV4dFwiLFxyXG4gICAgbWluVmFsdWU6IFwibWluaW11bSB2YWx1ZVwiLFxyXG4gICAgbWF4VmFsdWU6IFwibWF4aW11bSB2YWx1ZVwiLFxyXG4gICAgbWluTGVuZ3RoOiBcIm1pbnVtdW0gbGVuZ3RoXCIsXHJcbiAgICBtYXhMZW5ndGg6IFwibWF4aW11bSBsZW5ndGhcIixcclxuICAgIGFsbG93RGlnaXRzOiBcImFsbG93IGRpZ2l0c1wiLFxyXG4gICAgbWluQ291bnQ6IFwibWludW11bSBjb3VudFwiLFxyXG4gICAgbWF4Q291bnQ6IFwibWF4aW11bSBjb3VudFwiLFxyXG4gICAgcmVnZXg6IFwicmVndWxhciBleHByZXNzaW9uXCJcclxuICB9XHJcbn07XHJcblxyXG5lZGl0b3JMb2NhbGl6YXRpb24ubG9jYWxlc1tcImRhXCJdID0gZGFuaXNoU3RyaW5ncztcclxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2xvY2FsaXphdGlvbi9kYW5pc2gudHMiLCJpbXBvcnQgeyBlZGl0b3JMb2NhbGl6YXRpb24gfSBmcm9tIFwiLi4vZWRpdG9yTG9jYWxpemF0aW9uXCI7XG5cbnZhciBmcmVuY2hUcmFuc2xhdGlvbiA9IHtcbiAgLy9TdXJ2ZXkgdGVtcGxhdGVzXG4gIHN1cnZleToge1xuICAgIGVkaXQ6IFwiw4lkaXRlclwiLFxuICAgIGRyb3BRdWVzdGlvbjogXCJEw6lwb3NlciB2b3RyZSBxdWVzdGlvbiBpY2kuXCIsXG4gICAgY29weTogXCJDb3BpZXJcIixcbiAgICBhZGRUb1Rvb2xib3g6IFwiQWpvdXRlciDDoCBsYSBib8OudGUgw6Agb3V0aWxzXCIsXG4gICAgZGVsZXRlUGFuZWw6IFwiU3VwcHJpbWVyIGxlIHBhbm5lYXVcIixcbiAgICBkZWxldGVRdWVzdGlvbjogXCJTdXBwcmltZXIgbGEgcXVlc3Rpb25cIixcbiAgICBjb252ZXJ0VG86IFwiQ29udmVydGlyIGVuXCJcbiAgfSxcbiAgLy9xdWVzdGlvblR5cGVzXG4gIHF0OiB7XG4gICAgZGVmYXVsdDogXCJQYXIgZMOpZmF1dFwiLFxuICAgIGNoZWNrYm94OiBcIkNhc2VzIMOgIGNvY2hlclwiLFxuICAgIGNvbW1lbnQ6IFwiQ29tbWVudGFpcmVcIixcbiAgICBpbWFnZXBpY2tlcjogXCJDaG9peCBkJ2ltYWdlXCIsXG4gICAgZHJvcGRvd246IFwiTGlzdGUgZMOpcm91bGFudGVcIixcbiAgICBmaWxlOiBcIkZpY2hpZXJcIixcbiAgICBodG1sOiBcIkhUTUxcIixcbiAgICBtYXRyaXg6IFwiTWF0cmljZSAoY2hvaXggdW5pcXVlKVwiLFxuICAgIG1hdHJpeGRyb3Bkb3duOiBcIk1hdHJpY2UgKGNob2l4IG11bHRpcGxlcylcIixcbiAgICBtYXRyaXhkeW5hbWljOiBcIk1hdHJpY2UgKGxpZ25lcyBkeW5hbWlxdWVzKVwiLFxuICAgIG11bHRpcGxldGV4dDogXCJDaGFtcCBtdWx0aWxpZ25lc1wiLFxuICAgIHBhbmVsOiBcIlBhbm5lYXVcIixcbiAgICBwYW5lbGR5bmFtaWM6IFwiUGFubmVhdSAocGFubmVhdXggZHluYW1pcXVlcylcIixcbiAgICByYWRpb2dyb3VwOiBcIkJvdXRvbnMgcmFkaW9cIixcbiAgICByYXRpbmc6IFwiw4l2YWx1YXRpb25cIixcbiAgICB0ZXh0OiBcIkNoYW1wIHRleHRlXCIsXG4gICAgYm9vbGVhbjogXCJCb29sw6llblwiLFxuICAgIGV4cHJlc3Npb246IFwiRXhwcmVzc2lvblwiXG4gIH0sXG4gIC8vU3RyaW5ncyBpbiBFZGl0b3JcbiAgZWQ6IHtcbiAgICBzdXJ2ZXk6IFwiUXVlc3Rpb25uYWlyZVwiLFxuICAgIGVkaXRTdXJ2ZXk6IFwiw4lkaXRlciBsZSBxdWVzdGlvbm5haXJlXCIsXG4gICAgc2V0dGluZ3M6IFwiQ29uZmlndXJhdGlvbiBkdSBxdWVzdGlvbm5haXJlXCIsXG4gICAgb3BqZWN0UHJvcGVydGllc0hlYWRlcjogXCJQcm9wcmnDqXTDqXNcIixcbiAgICBzaG93T2JqZWN0UHJvcGVydGllczogXCJBZmZpY2hlciBsZXMgcHJvcHJpw6l0w6lzXCIsXG4gICAgaGlkZU9iamVjdFByb3BlcnRpZXM6IFwiQ2FjaGVyIGxlcyBwcm9wcmnDqXTDqXNcIixcbiAgICBhZGROZXdQYWdlOiBcIkFqb3V0ZXIgdW5lIHBhZ2VcIixcbiAgICBtb3ZlUmlnaHQ6IFwiRMOpZmlsZXIgw6AgZHJvaXRlXCIsXG4gICAgbW92ZUxlZnQ6IFwiRMOpZmlsZXIgw6AgZ2F1Y2hlXCIsXG4gICAgZGVsZXRlUGFnZTogXCJTdXBwcmltZXIgdW5lIHBhZ2VcIixcbiAgICBlZGl0UGFnZTogXCLDiWRpdGVyIHVuZSBwYWdlXCIsXG4gICAgZWRpdDogXCLDiWRpdGVyXCIsXG4gICAgbmV3UGFnZU5hbWU6IFwicGFnZVwiLFxuICAgIG5ld1F1ZXN0aW9uTmFtZTogXCJxdWVzdGlvblwiLFxuICAgIG5ld1BhbmVsTmFtZTogXCJwYW5uZWF1XCIsXG4gICAgbmV3VGV4dEl0ZW1OYW1lOiBcInRleHRlXCIsXG4gICAgdGVzdFN1cnZleTogXCJUZXN0ZXIgbGUgcXVlc3Rpb25uYWlyZVwiLFxuICAgIHRlc3RTdXJ2ZXlBZ2FpbjogXCJUZXN0ZXIgw6Agbm91dmVhdSBsZSBxdWVzdGlvbm5haXJlXCIsXG4gICAgdGVzdFN1cnZleVdpZHRoOiBcIkxhcmdldXIgZHUgcXVlc3Rpb25uYWlyZSA6IFwiLFxuICAgIGVtYmVkU3VydmV5OiBcIkludMOpZ3JlciBsZSBxdWVzdGlvbm5haXJlXCIsXG4gICAgdHJhbnNsYXRpb246IFwiVHJhZHVjdGlvblwiLFxuICAgIHNhdmVTdXJ2ZXk6IFwiU2F1dmVnYXJkZXIgbGUgcXVlc3Rpb25uYWlyZVwiLFxuICAgIGRlc2lnbmVyOiBcIsOJZGl0ZXVyIGRlIHF1ZXN0aW9ubmFpcmVcIixcbiAgICBqc29uRWRpdG9yOiBcIsOJZGl0ZXIgSlNPTlwiLFxuICAgIHVuZG86IFwiQW5udWxlclwiLFxuICAgIHJlZG86IFwiUsOpdGFibGlyXCIsXG4gICAgb3B0aW9uczogXCJPcHRpb25zXCIsXG4gICAgZ2VuZXJhdGVWYWxpZEpTT046IFwiR8OpbsOpcmVyIHVuIEpTT04gdmFsaWRlXCIsXG4gICAgZ2VuZXJhdGVSZWFkYWJsZUpTT046IFwiR8OpbsOpcmVyIHVuIEpTT04gbGlzaWJsZVwiLFxuICAgIHRvb2xib3g6IFwiQm/DrnRlIMOgIG91dGlsc1wiLFxuICAgIHRvb2xib3hHZW5lcmFsQ2F0ZWdvcnk6IFwiR8OpbsOpcmFsXCIsXG4gICAgZGVsU2VsT2JqZWN0OiBcIlN1cHByaW1lciBsJ29iamV0IHPDqWxlY3Rpb25uw6lcIixcbiAgICBlZGl0U2VsT2JqZWN0OiBcIsOJZGl0ZXIgbCdvYmpldCBzw6lsZWN0aW9ubsOpXCIsXG4gICAgY29ycmVjdEpTT046IFwiU1ZQIGNvcnJpZ2V6IGxlIEpTT05cIixcbiAgICBzdXJ2ZXlSZXN1bHRzOiBcIlLDqXN1bHRhdCBkdSBxdWVzdGlvbm5haXJlIDogXCIsXG4gICAgc3VydmV5UmVzdWx0c1RhYmxlOiBcIkNvbW1lIHRhYmxlYXVcIixcbiAgICBzdXJ2ZXlSZXN1bHRzSnNvbjogXCJDb21tZSBKU09OXCIsXG4gICAgcmVzdWx0c1RpdGxlOiBcIlRpdHJlIGRlIGxhIHF1ZXN0aW9uXCIsXG4gICAgcmVzdWx0c05hbWU6IFwiTm9tIGRlIGxhIHF1ZXN0aW9uXCIsXG4gICAgcmVzdWx0c1ZhbHVlOiBcIlZhbGV1ciBkZSBsYSByw6lwb25zZVwiLFxuICAgIHJlc3VsdHNEaXNwbGF5VmFsdWU6IFwiVmFsZXVyIGFmZmljaMOpZVwiLFxuICAgIG1vZGlmaWVkOiBcIk1vZGlmacOpXCIsXG4gICAgc2F2aW5nOiBcIlNhdXZlZ2FyZGUgZW4gY291cnNcIixcbiAgICBzYXZlZDogXCJTYXV2ZWdhcmTDqVwiLFxuICAgIHNhdmVFcnJvcjogXCJFcnJldXIhIExlIGNvbnRlbnUgZGUgbCfDqWRpdGV1ciBuJ2EgcGFzIMOpdMOpIHNhdXZlZ2FyZMOpLlwiLFxuICAgIHRyYW5zbGF0aW9uQWRkTGFuZ3VhZ2U6IFwiQ2hvaXNpciBsYW5ndWUgw6AgdHJhZHVpcmVcIixcbiAgICB0cmFuc2xhdGlvblNob3dBbGxTdHJpbmdzOiBcIkFmZmljaGVyIHRvdXMgbGVzIHRlcm1lc1wiLFxuICAgIHRyYW5zbGF0aW9uU2hvd0FsbFBhZ2VzOiBcIkFmZmljaGVyIHRvdXRlcyBsZXMgcGFnZXNcIixcbiAgICB0cmFuc2xhdGlvbk5vU3RyaW5nczogXCJBdWN1biB0ZXJtZSDDoCB0cmFkdWlyZS4gVmV1aWxsZXogbW9kaWZpZXIgbGUgZmlsdHJlLlwiLFxuICAgIHRyYW5zbGF0aW9uRXhwb3J0VG9TQ1ZCdXR0b246IFwiRXhwb3J0ZXIgZW4gQ1NWXCIsXG4gICAgdHJhbnNsYXRpb25JbXBvcnRGcm9tU0NWQnV0dG9uOiBcIkltcG9ydGVyIGQndW4gQ1NWXCIsXG4gICAgdHJhbnNsYXRpb25NZXJnZUxvY2FsZVdpdGhEZWZhdWx0OiBcIkZ1c2lvbm5lciB7MH0gYXZlYyBsYW5ndWUgcGFyIGTDqWZhdXRcIixcbiAgICBib2xkOiBcIkdyYXNcIixcbiAgICBpdGFsaWM6IFwiSXRhbGlxdWVcIixcbiAgICB1bmRlcmxpbmU6IFwiU291bGlnbsOpXCIsXG4gICAgZnBBZGRRdWVzdGlvbjogXCJBam91dGVyIHF1ZXN0aW9uLi4uXCIsXG4gICAgY29tcGxldGVkSHRtbE9uQ29uZGl0aW9uSXRlbVRleHQ6IFwiQWZmaWNoZXIgc2kgOlwiLFxuICB9LFxuICAvL1Byb3BlcnR5IG5hbWVzIGluIHRhYmxlIGhlYWRlcnNcbiAgcGVsOiB7XG4gICAgaXNSZXF1aXJlZDogXCJPYmxpZ2F0b2lyZSA/XCJcbiAgfSxcbiAgLy9Qcm9wZXJ0eSBFZGl0b3JzXG4gIHBlOiB7XG4gICAgYXBwbHk6IFwiQXBwbGlxdWVyXCIsXG4gICAgb2s6IFwiT0tcIixcbiAgICBjYW5jZWw6IFwiQW5udWxlclwiLFxuICAgIHJlc2V0OiBcIlLDqWluaXRpYWxpc2VyXCIsXG4gICAgY2xvc2U6IFwiRmVybWVyXCIsXG4gICAgZGVsZXRlOiBcIlN1cHByaW1lclwiLFxuICAgIGFkZE5ldzogXCJBam91dGVyIHVuIG5vdXZlYXVcIixcbiAgICBhZGRJdGVtOiBcIkNsaXF1ZXIgcG91ciBham91dGVyIHVuIGl0ZW0uLi5cIixcbiAgICBhZGRPdGhlcjogXCJBdXRyZVwiLFxuICAgIGFkZFNlbGVjdEFsbDogXCJUb3V0IHPDqWxlY3Rpb25uZXJcIixcbiAgICBhZGROb25lOiBcIkF1Y3VuXCIsXG4gICAgcmVtb3ZlQWxsOiBcIlRvdXQgc3VwcHJpbWVyXCIsXG4gICAgZWRpdDogXCLDiWRpdGVyXCIsXG4gICAgbW92ZTogXCJEw6lwbGFjZXJcIixcbiAgICBlbXB0eTogXCI8dmlkZT5cIixcbiAgICBub3RFbXB0eTogXCI8w6lkaXRlciBsYSB2YWxldXI+XCIsXG4gICAgZmFzdEVudHJ5OiBcIkFqb3V0IHJhcGlkZVwiLFxuICAgIGZvcm1FbnRyeTogXCJBam91dCB2aWEgZm9ybXVsYWlyZVwiLFxuICAgIHRlc3RTZXJ2aWNlOiBcIlRlc3RlciBsZSBzZXJ2aWNlXCIsXG4gICAgY29uZGl0aW9uU2VsZWN0UXVlc3Rpb246IFwiU8OpbGVjdGlvbm5lciB1bmUgcXVlc3Rpb24uLi5cIixcbiAgICBjb25kaXRpb25CdXR0b25BZGQ6IFwiQWpvdXRlclwiLFxuICAgIGNvbmRpdGlvbkJ1dHRvblJlcGxhY2U6IFwiUmVtcGxhY2VyXCIsXG4gICAgY29uZGl0aW9uSGVscDpcbiAgICAgICdWZXVpbGxleiBlbnRyZXIgdW5lIGV4cHJlc3Npb24gYm9vbMOpZW5uZS4gRWxsZSBkb2l0IHJldG91cm5lciBWcmFpKHRydWUpIHBvdXIgZ2FyZGVyIGxhIHF1ZXN0aW9uL3BhZ2UgdmlzaWJsZS4gUGFyIGV4ZW1wbGU6IHtxdWVzdGlvbjF9ID0gXCJ2YWxldXIxXCIgb3IgKHtxdWVzdGlvbjJ9ID0gMyBhbmQge3F1ZXN0aW9uM30gPCA1KScsXG4gICAgZXhwcmVzc2lvbkhlbHA6XG4gICAgICBcIlZldWlsbGV6IGVudHJlciB1bmUgZXhwcmVzc2lvbi4gVm91cyBwb3V2ZXogdXRpbGlzZXIgZGVzIGFjY29sYWRlcyBwb3VyIGFjY8OpZGVyIGF1eCB2YWxldXJzIGRlcyBxdWVzdGlvbnMgJ3txdWVzdGlvbjF9ICsge3F1ZXN0aW9uMn0nLCAnKHtwcml4fSp7cXVhbnRpdGV9KSAqICgxMDAgLSB7cmVtaXNlfSknXCIsXG4gICAgYWNlRWRpdG9ySGVscDpcbiAgICAgIFwiQXBwdXllciBzdXIgQ3RybCArIGVzcGFjZSBwb3VyIG9idGVuaXIgdW5lIGFpZGUgcG91ciBsYSBzYWlzaWUgZCdleHByZXNzaW9uXCIsXG4gICAgYWNlRWRpdG9yUm93VGl0bGU6IFwiTGlnbmUgY291cmFudGVcIixcbiAgICBhY2VFZGl0b3JQYW5lbFRpdGxlOiBcIlBhbm5lYXUgY291cmFudFwiLFxuICAgIHNob3dNb3JlOlxuICAgICAgXCJQb3VyIHBsdXMgZCdpbmZvcm1hdGlvbnMsIHZldWlsbGV6IHZvdXMgcsOpZsOpcmVyIMOgIGxhIGRvY3VtZW50YXRpb25cIixcbiAgICBhc3Npc3RhbnRUaXRsZTogXCJRdWVzdGlvbnMgZGlzcG9uaWJsZXMgOlwiLFxuICAgIGNlbGxzRW1wdHlSb3dzQ29sdW1uczogXCJJbCBmYXV0IGF1IG1pbmltdW0gdW5lIGxpZ25lIG91IHVuZSBjb2xvbm5lXCIsXG4gICAgcHJvcGVydHlJc0VtcHR5OiBcIlZldWlsbGV6IGVudHJlciB1bmUgdmFsZXVyIHBvdXIgbGEgcHJvcHJpw6l0w6lcIixcbiAgICB2YWx1ZTogXCJWYWxldXJcIixcbiAgICB0ZXh0OiBcIlRleHRlXCIsXG4gICAgcm93aWQ6IFwiSUQgTGlnbmVcIixcbiAgICBpbWFnZUxpbms6IFwiVVJMIGRlIGwnaW1hZ2VcIixcbiAgICBjb2x1bW5FZGl0OiBcIsOJZGl0ZXIgbGEgY29sb25uZTogezB9XCIsXG4gICAgaXRlbUVkaXQ6IFwiw4lkaXRlciBsJ2l0ZW06IHswfVwiLFxuICAgIHVybDogXCJVUkxcIixcbiAgICBwYXRoOiBcIkNoZW1pblwiLFxuICAgIHZhbHVlTmFtZTogXCJOb20gZGUgbGEgdmFsZXVyXCIsXG4gICAgdGl0bGVOYW1lOiBcIk5vbSBkdSB0aXRyZVwiLFxuICAgIGhhc090aGVyOiBcIkNvbnRpZW50IHVuIGl0ZW0gXFxcIkF1dHJlXFxcIlwiLFxuICAgIG90aGVyVGV4dDogXCJUZXh0ZSBpdGVtIFxcXCJBdXRyZVxcXCJcIixcbiAgICBoYXNOb25lOiBcIkNvbnRpZW50IHVuIGl0ZW0gXFxcIkF1Y3VuXFxcIlwiLFxuICAgIG5vbmVUZXh0OiBcIlRleHRlIGl0ZW0gXFxcIkF1Y3VuXFxcIlwiLFxuICAgIGhhc1NlbGVjdEFsbDogXCJDb250aWVudCB1biBpdGVtIFxcXCJUb3V0IHPDqWxlY3Rpb25uZXJcXFwiXCIsXG4gICAgc2VsZWN0QWxsVGV4dDpcIlRleHRlIGl0ZW0gXFxcIlRvdXQgc8OpbGVjdGlvbm5lclxcXCJcIixcbiAgICBjaG9pY2VzTWluOiBcIlZhbGV1ciBtaW5pbXVtIHBvdXIgbGVzIGl0ZW1zIGfDqW7DqXLDqXMgYXV0b21hdGlxdWVtZW50XCIsXG4gICAgY2hvaWNlc01heDogXCJWYWxldXIgbWF4aW11bSBwb3VyIGxlcyBpdGVtcyBnw6luw6lyw6lzIGF1dG9tYXRpcXVlbWVudFwiLFxuICAgIGNob2ljZXNTdGVwOiBcIkRpZmbDqXJlbmNlIGVudHJlIGl0ZW1zIGfDqW7DqXLDqXMgYXV0b21hdGlxdWVtZW50XCIsXG4gICAgbmFtZTogXCJOb21cIixcbiAgICB0aXRsZTogXCJUaXRyZVwiLFxuICAgIGNlbGxUeXBlOiBcIlR5cGUgZGUgY2VsbHVsZVwiLFxuICAgIGNvbENvdW50OiBcIk5vbWJyZSBkZSBjb2xvbm5lc1wiLFxuICAgIGNob2ljZXNPcmRlcjogXCJTw6lsZWN0aW9ubmVyIGwnb3JkcmUgZGVzIGNob2l4XCIsXG4gICAgdmlzaWJsZTogXCJFc3QgdmlzaWJsZSA/XCIsXG4gICAgaXNSZXF1aXJlZDogXCJFc3Qgb2JsaWdhdG9pcmUgP1wiLFxuICAgIGlzQWxsUm93UmVxdWlyZWQ6IFwiUsOpcG9uc2Ugb2JsaWdhdG9pcmUgcG91ciB0b3V0ZXMgbGVzIGxpZ25lc1wiLFxuICAgIHJlcXVpcmVkRXJyb3JUZXh0OiBcIk1lc3NhZ2UgZCdlcnJldXIgbG9yc3F1ZSBvYmxpZ2F0b2lyZVwiLFxuICAgIHN0YXJ0V2l0aE5ld0xpbmU6IFwiQ29tbWVuY2VyIGF2ZWMgdW5lIG5vdXZlbGxlIGxpZ25lID9cIixcbiAgICByb3dzOiBcIk5vbWJyZSBkZSBsaWduZXNcIixcbiAgICBwbGFjZUhvbGRlcjogXCJQbGFjZWhvbGRlciAoaW5kaWNlIGRhbnMgbGUgY2hhbXApXCIsXG4gICAgc2hvd1ByZXZpZXc6IFwiTCdhcGVyw6d1IGQnaW1hZ2UgZXN0LWlsIGFmZmljaMOpID9cIixcbiAgICBzdG9yZURhdGFBc1RleHQ6XG4gICAgICBcIlN0b2NrZXIgbGUgY29udGVudSBkdSBmaWNoaWVyIGRhbnMgbGUgcsOpc3VsdGF0IEpTT04gc291cyBmb3JtZSBkZSB0ZXh0ZVwiLFxuICAgIG1heFNpemU6IFwiVGFpbGxlIG1heGltdW0gZHUgZmljaGllciBlbiBvY3RldHNcIixcbiAgICBpbWFnZUhlaWdodDogXCJIYXV0ZXVyIGRlIGwnaW1hZ2VcIixcbiAgICBpbWFnZVdpZHRoOiBcIkxhcmdldXIgZGUgbCdpbWFnZVwiLFxuICAgIHJvd0NvdW50OiBcIk5vbWJyZSBkZSBsaWduZXNcIixcbiAgICBhZGRSb3dMb2NhdGlvbjogJ0FsaWduZW1lbnQgYm91dG9uIFwiQWpvdXRlciB1bmUgbGlnbmVcIicsXG4gICAgYWRkUm93VGV4dDogJ1RleHRlIGJvdXRvbiBcIkFqb3V0ZXIgdW5lIGxpZ25lXCInLFxuICAgIHJlbW92ZVJvd1RleHQ6ICdUZXh0ZSBib3V0b24gXCJTdXBwcmltZXIgdW5lIGxpZ25lXCInLFxuICAgIHJhdGVNaW46IFwiTm90ZSBtaW5pbXVtXCIsXG4gICAgcmF0ZU1heDogXCJOb3RlIG1heGltdW1cIixcbiAgICByYXRlU3RlcDogXCJJbnRlcnZhbGxlIGRlcyBub3Rlc1wiLFxuICAgIG1pblJhdGVEZXNjcmlwdGlvbjogXCJEZXNjcmlwdGlvbiBub3RlIG1pbmltdW1cIixcbiAgICBtYXhSYXRlRGVzY3JpcHRpb246IFwiRGVzY3JpcHRpb24gbm90ZSBtYXhpbXVtXCIsXG4gICAgaW5wdXRUeXBlOiBcIlR5cGUgZGUgY2hhbXBcIixcbiAgICBvcHRpb25zQ2FwdGlvbjogXCJUZXh0ZSBwYXIgZMOpZmF1dFwiLFxuICAgIGRlZmF1bHRWYWx1ZTogXCJWYWxldXIgcGFyIGTDqWZhdXRcIixcbiAgICBjZWxsc0RlZmF1bHRSb3c6IFwiVGV4dGUgZGUgY2VsbHVsZSBwYXIgZMOpZmF1dFwiLFxuICAgIHN1cnZleUVkaXRvclRpdGxlOiBcIsOJZGl0ZXIgbGVzIHByw6lmw6lyZW5jZXMgZHUgcXVlc3Rpb25uYWlyZVwiLFxuICAgIHFFZGl0b3JUaXRsZTogXCLDiWRpdGVyIGxhIHF1ZXN0aW9uOiB7MH1cIixcbiAgICBtYXhMZW5ndGg6IFwiTG9uZ3VldXIgbWF4aW11bVwiLFxuXG4gICAgLy9zdXJ2ZXlcbiAgICBzaG93VGl0bGU6IFwiQWZmaWNoZXIvY2FjaGVyIGxlIHRpdHJlXCIsXG4gICAgbG9jYWxlOiBcIkxhbmd1ZSBwYXIgZMOpZmF1dFwiLFxuICAgIHNpbXVsYXRvcjogXCJDaG9pc2lyIGFwcGFyZWlsXCIsXG4gICAgbGFuZHNjYXBlT3JpZW50YXRpb246IFwiUGF5c2FnZVwiLFxuICAgIG1vZGU6IFwiTW9kZSAow6lkaXRpb24vbGVjdHVyZSBzZXVsZSlcIixcbiAgICBjbGVhckludmlzaWJsZVZhbHVlczogXCJFZmZhY2VyIGxlcyB2YWxldXJzIGludmlzaWJsZXNcIixcbiAgICBjb29raWVOYW1lOlxuICAgICAgXCJOb20gZHUgY29va2llIChwb3VyIGVtcMOqY2hlciBkZSBjb21wbMOpdGVyIDIgZm9pcyBsZSBxdWVzdGlvbm5haXJlIGxvY2FsZW1lbnQpXCIsXG4gICAgc2VuZFJlc3VsdE9uUGFnZU5leHQ6IFwiRW52b3llciBsZXMgcsOpc3VsdGF0cyBhdSBjaGFuZ2VtZW50IGRlIHBhZ2VcIixcbiAgICBzdG9yZU90aGVyc0FzQ29tbWVudDogJ1NhdXZlZ2FyZGVyIGxhIHZhbGV1ciBcIkF1dHJlc1wiIGRhbnMgdW4gY2hhbXAgc8OpcGFyw6knLFxuICAgIHNob3dQYWdlVGl0bGVzOiBcIkFmZmljaGVyIGxlcyB0aXRyZXMgZGUgcGFnZXNcIixcbiAgICBzaG93UGFnZU51bWJlcnM6IFwiQWZmaWNoZXIgbGVzIG51bcOpcm9zIGRlIHBhZ2VzXCIsXG4gICAgcGFnZVByZXZUZXh0OiBcIlRleHRlIGJvdXRvbiBwYWdlIHByw6ljw6lkZW50ZVwiLFxuICAgIHBhZ2VOZXh0VGV4dDogXCJUZXh0ZSBib3V0b24gcGFnZSBzdWl2YW50ZVwiLFxuICAgIGNvbXBsZXRlVGV4dDogXCJUZXh0ZSBib3V0b24gdGVybWluZXJcIixcbiAgICBzdGFydFN1cnZleVRleHQ6IFwiVGV4dGUgYm91dG9uIGNvbW1lbmNlclwiLFxuICAgIHNob3dOYXZpZ2F0aW9uQnV0dG9uczpcbiAgICAgIFwiQWZmaWNoZXIgbGVzIGJvdXRvbnMgZGUgbmF2aWdhdGlvbiAobmF2aWdhdGlvbiBwYXIgZMOpZmF1dClcIixcbiAgICBzaG93UHJldkJ1dHRvbjpcbiAgICAgIFwiQWZmaWNoZXIgbGUgYm91dG9uIHByw6ljw6lkZW50IChsJ3V0aWxpc2F0ZXVyIHBvdXJyYSByZXRvdXJuZXIgc3VyIGxhIHBhZ2UgcHLDqWPDqWRlbnRlKVwiLFxuICAgIGZpcnN0UGFnZUlzU3RhcnRlZDpcbiAgICAgIFwiTGEgcHJlbWnDqHJlIHBhZ2UgZHUgcXVlc3Rpb25uYWlyZSBlc3QgdW5lIHBhZ2UgZGUgZMOpbWFycmFnZS5cIixcbiAgICBzaG93Q29tcGxldGVkUGFnZTogJ0FmZmljaGVyIGxhIHBhZ2UgXCJ0ZXJtaW7DqVwiIMOgIGxhIGZpbiAoY29tcGxldGVkSHRtbCknLFxuICAgIGdvTmV4dFBhZ2VBdXRvbWF0aWM6XG4gICAgICBcIkFsbGVyIMOgIGxhIHBhZ2Ugc3VpdmFudGUgYXV0b21hdGlxdWVtZW50IHBvdXIgdG91dGVzIGxlcyBxdWVzdGlvbnNcIixcbiAgICBzaG93UHJvZ3Jlc3NCYXI6IFwiQWZmaWNoZXIgbGEgYmFycmUgZGUgcHJvZ3Jlc3Npb25cIixcbiAgICBxdWVzdGlvblRpdGxlTG9jYXRpb246IFwiRW1wbGFjZW1lbnQgZHUgdGl0cmUgZGUgbGEgcXVlc3Rpb25cIixcbiAgICByZXF1aXJlZFRleHQ6IFwiTGEgcXVlc3Rpb24gcmVxdWllcnQgdW4vZGVzIHN5bWJvbGUocylcIixcbiAgICBxdWVzdGlvblN0YXJ0SW5kZXg6IFwiSW5kZXggZGUgZMOpcGFydCBkZSBsYSBxdWVzdGlvbiAoMSwgMiBvdSAnQScsICdhJylcIixcbiAgICBzaG93UXVlc3Rpb25OdW1iZXJzOiBcIkFmZmljaGVyIGxlcyBudW3DqXJvcyBkZSBxdWVzdGlvbnNcIixcbiAgICBxdWVzdGlvblRpdGxlVGVtcGxhdGU6XG4gICAgICBcIkdhYmFyaXQgZHUgdGl0cmUgZGUgcXVlc3Rpb24sIHBhciBkw6lmYXV0IDogJ3tub30uIHtyZXF1aXJlfSB7dGl0bGV9J1wiLFxuICAgIHF1ZXN0aW9uRXJyb3JMb2NhdGlvbjogXCJFbXBsYWNlbWVudCBkZSBsJ2VycmV1clwiLFxuICAgIGZvY3VzRmlyc3RRdWVzdGlvbkF1dG9tYXRpYzpcbiAgICAgIFwiRm9jdXMgc3VyIGxhIHByZW1pw6hyZSBxdWVzdGlvbiBhdSBjaGFuZ2VtZW50IGRlIHBhZ2VcIixcbiAgICBxdWVzdGlvbnNPcmRlcjogXCJPcmRyZSBkZXMgw6lsw6ltZW50cyBzdXIgbGEgcGFnZVwiLFxuICAgIG1heFRpbWVUb0ZpbmlzaDogXCJUZW1wcyBtYXhpbXVtIHBvdXIgdGVybWluZXIgbGUgcXVlc3Rpb25uYWlyZVwiLFxuICAgIG1heFRpbWVUb0ZpbmlzaFBhZ2U6IFwiVGVtcHMgbWF4aW11bSBwb3VyIHRlcm1pbmVyIHVuZSBwYWdlXCIsXG4gICAgc2hvd1RpbWVyUGFuZWw6IFwiQWZmaWNoZXIgbGUgcGFubmVhdSBjaHJvbm9tw6h0cmVcIixcbiAgICBzaG93VGltZXJQYW5lbE1vZGU6IFwiTW9kZSBkJ2FmZmljaGFnZSBkdSBwYW5uZWF1IGNocm9ub23DqHRyZVwiLFxuICAgIHJlbmRlck1vZGU6IFwiTW9kZSBkZSByZW5kdVwiLFxuICAgIGFsbG93QWRkUGFuZWw6IFwiQXV0b3Jpc2VyIGwnYWpvdXQgZHUgcGFubmVhdVwiLFxuICAgIGFsbG93UmVtb3ZlUGFuZWw6IFwiQXV0b3Jpc2VyIGxhIHN1cHByZXNzaW9uIGR1IHBhbm5lYXVcIixcbiAgICBwYW5lbEFkZFRleHQ6IFwiQWpvdXRlciB1biBwYW5uZWF1IHRleHRlXCIsXG4gICAgcGFuZWxSZW1vdmVUZXh0OiBcIlN1cHByaW1lciBsZSBwYW5uZWF1IHRleHRlXCIsXG4gICAgaXNTaW5nbGVQYWdlOiBcIkFmZmljaGVyIHRvdXMgbGVzIMOpbMOpbWVudHMgc3VyIHVuZSBzZXVsZSBwYWdlXCIsXG4gICAgZXhwcmVzc2lvbjogXCJFeHByZXNzaW9uXCIsXG4gICAgbWluVmFsdWU6IFwiVmFsZXVyIG1pbmltdW1cIixcbiAgICBtYXhWYWx1ZTogXCJWYWxldXIgbWF4aW11bVwiLFxuICAgIG1pbkxlbmd0aDogXCJMb25ndWV1ciBtaW5pbXVtXCIsXG4gICAgYWxsb3dEaWdpdHM6IFwiUGVybWV0dHJlIGNoaWZmcmVzXCIsXG4gICAgbWluQ291bnQ6IFwiTm9tYnJlIG1pbmltdW1cIixcbiAgICBtYXhDb3VudDogXCJOb21icmUgbWF4aW11bVwiLFxuICAgIHJlZ2V4OiBcIkV4cHJlc3Npb24gcsOpZ3VsacOocmVcIixcbiAgICB0YWJzOiB7XG4gICAgICBnZW5lcmFsOiBcIkfDqW7DqXJhbFwiLFxuICAgICAgZmlsZU9wdGlvbnM6IFwiT3B0aW9uc1wiLFxuICAgICAgaHRtbDogXCLDiWRpdGV1ciBIVE1MXCIsXG4gICAgICBjb2x1bW5zOiBcIkNvbG9ubmVzXCIsXG4gICAgICByb3dzOiBcIkxpZ25lc1wiLFxuICAgICAgY2hvaWNlczogXCJDaG9peFwiLFxuICAgICAgdmlzaWJsZUlmOiBcIlZpc2libGUgc2lcIixcbiAgICAgIGVuYWJsZUlmOiBcIkFjdGlmIHNpXCIsXG4gICAgICByZXF1aXJlZElmOiBcIlJlcXVpcyBzaVwiLFxuICAgICAgcmF0ZVZhbHVlczogXCJCYXLDqG1lXCIsXG4gICAgICBjaG9pY2VzQnlVcmw6IFwiQ2hvaXggZGVwdWlzIEFQSSB3ZWJcIixcbiAgICAgIG1hdHJpeENob2ljZXM6IFwiQ2hvaXggcGFyIGTDqWZhdXRcIixcbiAgICAgIG11bHRpcGxlVGV4dEl0ZW1zOiBcIkNoYW1wcyB0ZXh0ZSBtdWx0aXBsZXNcIixcbiAgICAgIHZhbGlkYXRvcnM6IFwiVmFsaWRhdGV1cnNcIixcbiAgICAgIG5hdmlnYXRpb246IFwiTmF2aWdhdGlvblwiLFxuICAgICAgcXVlc3Rpb246IFwiUXVlc3Rpb25cIixcbiAgICAgIGNvbXBsZXRlZEh0bWw6IFwiSFRNTCBkZSBmaW5cIixcbiAgICAgIGNvbXBsZXRlZEh0bWxPbkNvbmRpdGlvbjogXCJIVE1MIGRlIGZpbiBhdmVjIGNvbmRpdGlvblwiLFxuICAgICAgbG9hZGluZ0h0bWw6IFwiSFRNTCBkZSBjaGFyZ2VtZW50XCIsXG4gICAgICB0aW1lcjogXCJDaHJvbm9tw6h0cmUvUXVpelwiLFxuICAgICAgY2FsY3VsYXRlZFZhbHVlczogXCJWYXJpYWJsZXNcIixcbiAgICAgIHRyaWdnZXJzOiBcIkTDqWNsZW5jaGV1cnNcIixcbiAgICAgIHRlbXBsYXRlVGl0bGU6IFwiVGl0cmUgZGUgZ2FiYXJpdFwiLFxuICAgICAgdG90YWxzOiBcIlRvdGF1eFwiXG4gICAgfSxcbiAgICBlZGl0UHJvcGVydHk6ICfDiWRpdGVyIGxhIHByb3ByacOpdMOpIFwiezB9XCInLFxuICAgIGl0ZW1zOiBcIlsgw4lsw6ltZW50czogezB9IF1cIixcbiAgICBlbnRlck5ld1ZhbHVlOiBcIlZldWlsbGV6IHNhaXNpciBsYSB2YWxldXIuXCIsXG4gICAgbm9xdWVzdGlvbnM6IFwiSWwgbid5IGEgYXVjdW5lIHF1ZXN0aW9uIGRhbnMgbGUgcXVlc3Rpb25uYWlyZS5cIixcbiAgICBjcmVhdGV0cmlnZ2VyOiBcIlZldWlsbGV6IGNyw6llciB1biBkw6ljbGVuY2hldXJcIixcbiAgICB0cmlnZ2VyT246IFwiUXVhbmQgXCIsXG4gICAgdHJpZ2dlck1ha2VQYWdlc1Zpc2libGU6IFwiUmVuZHJlIGxlcyBwYWdlcyB2aXNpYmxlcyA6XCIsXG4gICAgdHJpZ2dlck1ha2VRdWVzdGlvbnNWaXNpYmxlOiBcIlJlbmRyZSBsZXMgcXVlc3Rpb25zIHZpc2libGVzIDpcIixcbiAgICB0cmlnZ2VyQ29tcGxldGVUZXh0OiBcIlRlcm1pbmVyIGxlIHF1ZXN0aW9ubmFpcmUgZW4gY2FzIGRlIHN1Y2PDqHMuXCIsXG4gICAgdHJpZ2dlck5vdFNldDogXCJMZSBkw6ljbGVuY2hldXIgbidlc3QgcGFzIGTDqWZpbmlcIixcbiAgICB0cmlnZ2VyUnVuSWY6IFwiRXjDqWN1dGVyIHNpXCIsXG4gICAgdHJpZ2dlclNldFRvTmFtZTogXCJDaGFuZ2VyIGxhIHZhbGV1ciBkZSA6IFwiLFxuICAgIHRyaWdnZXJGcm9tTmFtZTogXCJDb3BpZXIgbGEgdmFsZXVyIGRlIDogXCIsXG4gICAgdHJpZ2dlclJ1bkV4cHJlc3Npb246IFwiRXjDqWN1dGVyIGNldHRlIGV4cHJlc3Npb24gOlwiLFxuICAgIHRyaWdnZXJTZXRWYWx1ZTogXCLDoCA6IFwiLFxuICAgIHRyaWdnZXJHb3RvTmFtZTogXCJBbGxlciDDoCBsYSBxdWVzdGlvbiA6XCIsXG4gICAgdHJpZ2dlcklzVmFyaWFibGU6XG4gICAgICBcIk5lIHBsYWNleiBwYXMgbGEgdmFyaWFibGUgZGFucyBsZSByw6lzdWx0YXQgZHUgcXVlc3Rpb25uYWlyZS5cIixcbiAgICB0cmlnZ2VyUnVuRXhwcmVzc2lvbkVtcHR5OiBcIlZldWlsbGV6IGVudHJlciB1bmUgZXhwcmVzc2lvbiB2YWxpZGVcIlxuICB9LFxuICAvL1Byb3BlcnR5IHZhbHVlc1xuICBwdjoge1xuICAgIHRydWU6IFwidnJhaVwiLFxuICAgIGZhbHNlOiBcImZhdXhcIixcbiAgICBpbmhlcml0OiBcImjDqXJpdMOpXCIsXG4gICAgc2hvdzogXCJhZmZpY2hlclwiLFxuICAgIGhpZGU6IFwibWFzcXVlclwiLFxuICAgIGRlZmF1bHQ6IFwicGFyIGTDqWZhdXRcIixcbiAgICBpbml0aWFsOiBcImluaXRpYWxcIixcbiAgICByYW5kb206IFwiYWzDqWF0b2lyZVwiLFxuICAgIGNvbGxhcHNlZDogXCJyZXBsacOpXCIsXG4gICAgZXhwYW5kZWQ6IFwiZMOpcGxvecOpXCIsXG4gICAgbm9uZTogXCJhdWN1blwiLFxuICAgIGFzYzogXCJhc2NlbmRhbnRcIixcbiAgICBkZXNjOiBcImRlc2NlbmRhbnRcIixcbiAgICBpbmRldGVybWluYXRlOiBcImluZGV0ZXJtaW7DqVwiLFxuICAgIGRlY2ltYWw6IFwiZMOpY2ltYWxcIixcbiAgICBjdXJyZW5jeTogXCJtb25uYWllXCIsXG4gICAgcGVyY2VudDogXCJwb3VyY2VudGFnZVwiLFxuICAgIGZpcnN0RXhwYW5kZWQ6IFwiZMOpcGxvecOpIGVuIHByZW1pZXJcIixcbiAgICBvZmY6IFwiZMOpc2FjdGl2w6lcIixcbiAgICBvblBhbmVsOiBcInBhbm5lYXVcIixcbiAgICBvblN1cnZleTogXCJxdWVzdGlvbm5haXJlXCIsXG4gICAgbGlzdDogXCJsaXN0ZVwiLFxuICAgIHByb2dyZXNzVG9wOiBcIlByb2dyZXNzaW9uIGVuIGhhdXRcIixcbiAgICBwcm9ncmVzc0JvdHRvbTogXCJQcm9ncmVzc2lvbiBlbiBiYXNcIixcbiAgICBwcm9ncmVzc1RvcEJvdHRvbTogXCJQcm9ncmVzc2lvbiBlbiBoYXV0IGV0IGVuIGJhc1wiLFxuICAgIHRvcDogXCJoYXV0XCIsXG4gICAgYm90dG9tOiBcImJhc1wiLFxuICAgIHRvcEJvdHRvbTogXCJoYXV0IGV0IGJhc1wiLFxuICAgIGxlZnQ6IFwiZ2F1Y2hlXCIsXG4gICAgY29sb3I6IFwiY291bGV1clwiLFxuICAgIGRhdGU6IFwiZGF0ZVwiLFxuICAgIGRhdGV0aW1lOiBcImhldXJlXCIsXG4gICAgXCJkYXRldGltZS1sb2NhbFwiOiBcImhldXJlIGxvY2FsZVwiLFxuICAgIGVtYWlsOiBcImVtYWlsXCIsXG4gICAgbW9udGg6IFwibW9pc1wiLFxuICAgIG51bWJlcjogXCJub21icmVcIixcbiAgICBwYXNzd29yZDogXCJtb3QgZGUgcGFzc2VcIixcbiAgICByYW5nZTogXCJqYXVnZVwiLFxuICAgIHRlbDogXCJ0w6lsLlwiLFxuICAgIHRleHQ6IFwidGV4dGVcIixcbiAgICB0aW1lOiBcImhldXJlXCIsXG4gICAgdXJsOiBcIlVSTFwiLFxuICAgIHdlZWs6IFwic2VtYWluZVwiLFxuICAgIGhpZGRlbjogXCJtYXNxdcOpXCIsXG4gICAgb246IFwiYWN0aXbDqVwiLFxuICAgIG9uUGFnZTogXCJwYWdlXCIsXG4gICAgZWRpdDogXCLDqWRpdGVyXCIsXG4gICAgZGlzcGxheTogXCJhZmZpY2hhZ2VcIixcbiAgICBvbkNvbXBsZXRlOiBcIm9uQ29tcGxldGVcIixcbiAgICBvbkhpZGRlbjogXCJvbkhpZGRlblwiLFxuICAgIGFsbDogXCJ0b3VzXCIsXG4gICAgcGFnZTogXCJwYWdlXCIsXG4gICAgc3VydmV5OiBcInF1ZXN0aW9ubmFpcmVcIlxuICB9LFxuICAvL09wZXJhdG9yc1xuICBvcDoge1xuICAgIGVtcHR5OiBcImVzdCB2aWRlXCIsXG4gICAgbm90ZW1wdHk6IFwibidlc3QgcGFzIHZpZGVcIixcbiAgICBlcXVhbDogXCLDqWdhbFwiLFxuICAgIG5vdGVxdWFsOiBcIm4nZXN0IHBhcyDDqWdhbFwiLFxuICAgIGNvbnRhaW5zOiBcImNvbnRpZW50XCIsXG4gICAgbm90Y29udGFpbnM6IFwibmUgY29udGllbnQgcGFzXCIsXG4gICAgYW55b2Y6IFwibidpbXBvcnRlIHF1ZWwgZGVcIixcbiAgICBhbGxvZjogXCJ0b3V0IGRlXCIsXG4gICAgZ3JlYXRlcjogXCJzdXDDqXJpZXVyXCIsXG4gICAgbGVzczogXCJpbmbDqXJpZXVyXCIsXG4gICAgZ3JlYXRlcm9yZXF1YWw6IFwic3Vww6lyaWV1ciBvdSDDqWdhbFwiLFxuICAgIGxlc3NvcmVxdWFsOiBcImluZsOpcmlldXIgb3Ugw6lnYWxcIlxuICB9LFxuICAvL0VtYmVkIHdpbmRvd1xuICBldzoge1xuICAgIGFuZ3VsYXI6IFwiVXRpbGlzZXIgbGEgdmVyc2lvbiBBbmd1bGFyXCIsXG4gICAganF1ZXJ5OiBcIlV0aWxpc2VyIGxhIHZlcnNpb24galF1ZXJ5XCIsXG4gICAga25vY2tvdXQ6IFwiVXRpbGlzZXIgbGEgdmVyc2lvbiBLbm9ja291dFwiLFxuICAgIHJlYWN0OiBcIlV0aWxpc2VyIGxhIHZlcnNpb24gUmVhY3RcIixcbiAgICB2dWU6IFwiVXRpbGlzZXIgbGEgdmVyc2lvbiBWdWVcIixcbiAgICBib290c3RyYXA6IFwiUG91ciBsZSBmcmFtZXdvcmsgQm9vdHN0cmFwXCIsXG4gICAgc3RhbmRhcmQ6IFwiU2FucyBCb290c3RyYXBcIixcbiAgICBzaG93T25QYWdlOiBcIkFmZmljaGVyIGxlIHF1ZXN0aW9ubmFpcmUgZGFucyB1bmUgcGFnZVwiLFxuICAgIHNob3dJbldpbmRvdzogXCJBZmZpY2hlciBsZSBxdWVzdGlvbm5haXJlIGRhbnMgdW5lIGZlbsOqdHJlXCIsXG4gICAgbG9hZEZyb21TZXJ2ZXI6IFwiQ2hhcmdlciBsZSBKU09OIGR1IHF1ZXN0aW9ubmFpcmUgZGVwdWlzIHVuIHNlcnZldXJcIixcbiAgICB0aXRsZVNjcmlwdDogXCJTY3JpcHRzIGV0IHN0eWxlc1wiLFxuICAgIHRpdGxlSHRtbDogXCJIVE1MXCIsXG4gICAgdGl0bGVKYXZhU2NyaXB0OiBcIkphdmFTY3JpcHRcIlxuICB9LFxuICAvL1Rlc3QgU3VydmV5XG4gIHRzOiB7XG4gICAgc2VsZWN0UGFnZTogXCJTw6lsZWN0aW9ubmVyIHVuZSBwYWdlIHBvdXIgbGEgdGVzdGVyXCIsXG4gICAgc2hvd0ludmlzaWJsZUVsZW1lbnRzOiBcIkFmZmljaGVyIGxlcyDDqWzDqW1lbnRzIGludmlzaWJsZXNcIlxuICB9LFxuICAvL1ZhbGlkYXRvcnNcbiAgdmFsaWRhdG9yczoge1xuICAgIGFuc3dlcmNvdW50dmFsaWRhdG9yOiBcInRvdGFsIGRlIHLDqXBvbnNlc1wiLFxuICAgIGVtYWlsdmFsaWRhdG9yOiBcImUtbWFpbFwiLFxuICAgIG51bWVyaWN2YWxpZGF0b3I6IFwibnVtw6lyaXF1ZVwiLFxuICAgIHJlZ2V4dmFsaWRhdG9yOiBcInJlZ2V4XCIsXG4gICAgdGV4dHZhbGlkYXRvcjogXCJ0ZXh0ZVwiXG4gIH0sXG4gIC8vVHJpZ2dlcnNcbiAgdHJpZ2dlcnM6IHtcbiAgICBjb21wbGV0ZXRyaWdnZXI6IFwidGVybWluZXIgbGUgcXVlc3Rpb25uYWlyZVwiLFxuICAgIHNldHZhbHVldHJpZ2dlcjogXCJkw6lmaW5pciBsYSB2YWxldXJcIixcbiAgICBjb3B5dmFsdWV0cmlnZ2VyOiBcImNvcGllciBsYSB2YWxldXJcIixcbiAgICBza2lwdHJpZ2dlcjogXCJzYXV0ZXIgw6AgbGEgcXVlc3Rpb25cIixcbiAgICBydW5leHByZXNzaW9udHJpZ2dlcjogXCJleMOpY3V0ZXIgZXhwcmVzc2lvblwiLFxuICAgIHZpc2libGV0cmlnZ2VyOiBcIm1vZGlmaWVyIGxhIHZpc2liaWxpdMOpXCJcbiAgfSxcbiAgLy9Qcm9wZXJ0aWVzXG4gIHA6IHtcbiAgICBuYW1lOiBcIk5vbVwiLFxuICAgIHRpdGxlOiB7XG4gICAgICBuYW1lOiBcIlRpdHJlXCIsXG4gICAgICB0aXRsZTogJ0xhaXNzZXogdmlkZSwgc2kgbcOqbWUgdGV4dGUgcXVlIGxlIFwiTm9tXCInXG4gICAgfSxcbiAgICBuYXZpZ2F0aW9uQnV0dG9uc1Zpc2liaWxpdHk6IFwiVmlzaWJpbGl0w6kgZGVzIGJvdXRvbnMgZGUgbmF2aWdhdGlvblwiLFxuICAgIHF1ZXN0aW9uc09yZGVyOiBcIk9yZHJlIGRlcyBxdWVzdGlvbnNcIixcbiAgICBtYXhUaW1lVG9GaW5pc2g6IFwiVGVtcHMgbWF4aW11bSBwb3VyIHRlcm1pbmVyXCIsXG4gICAgdmlzaWJsZTogXCJWaXNpYmxlXCIsXG4gICAgdmlzaWJsZUlmOiBcIlZpc2libGUgc2kgXCIsXG4gICAgcXVlc3Rpb25UaXRsZUxvY2F0aW9uOiBcIkVtcGxhY2VtZW50IHRpdHJlIHF1ZXN0aW9uXCIsXG4gICAgZGVzY3JpcHRpb246IFwiRGVzY3JpcHRpb25cIixcbiAgICBzdGF0ZTogXCLDiXRhdFwiLFxuICAgIGlzUmVxdWlyZWQ6IFwiT2JsaWdhdG9pcmUgP1wiLFxuICAgIHJlcXVpcmVkRXJyb3JUZXh0OiBcIk1lc3NhZ2UgZCdlcnJldXIgdGV4dCBvYmxpZ2F0b2lyZVwiLFxuICAgIHN0YXJ0V2l0aE5ld0xpbmU6IFwiQ29tbWVuY2VyIGF2ZWMgdW5lIG5vdXZlbGxlIGxpZ25lXCIsXG4gICAgaW5uZXJJbmRlbnQ6IFwiSW5kZW50YXRpb25cIixcbiAgICBwYWdlOiBcInBhZ2VcIixcbiAgICB3aWR0aDogXCJsYXJnZXVyXCIsXG4gICAgY29tbWVudFRleHQ6IFwiRGVzY3JpcHRpb24gY2hhbXAgY29tbWVudGFpcmVcIixcbiAgICB2YWx1ZU5hbWU6IFwiTm9tIGRlIGxhIHZhbGV1clwiLFxuICAgIGVuYWJsZUlmOiBcIkFjdGl2ZXIgc2lcIixcbiAgICBkZWZhdWx0VmFsdWU6IFwiVmFsZXVyIHBhciBkw6lmYXV0XCIsXG4gICAgY29ycmVjdEFuc3dlcjogXCJCb25uZSByw6lwb25zZVwiLFxuICAgIHJlYWRPbmx5OiBcIkxlY3R1cmUgc2V1bGVcIixcbiAgICB2YWxpZGF0b3JzOiBcIlZhbGlkYXRldXJzXCIsXG4gICAgdGl0bGVMb2NhdGlvbjogXCJFbXBsYWNlbWVudCBkdSB0aXRyZVwiLFxuICAgIGhhc0NvbW1lbnQ6IFwiQ2hhbXAgY29tbWVudGFpcmUgP1wiLFxuICAgIGhhc090aGVyOiBcIkNob2l4IGF1dHJlID9cIixcbiAgICBjaG9pY2VzOiBcIkNob2l4XCIsXG4gICAgY2hvaWNlc09yZGVyOiBcIk9yZHJlIGRlcyBjaG9peFwiLFxuICAgIGNob2ljZXNCeVVybDogXCJDaG9peCBwYXIgQVBJXCIsXG4gICAgb3RoZXJUZXh0OiBcIkF1dHJlIHRleHRlXCIsXG4gICAgb3RoZXJFcnJvclRleHQ6ICdUZXh0ZSBkXFwnZXJyZXVyIGNoYW1wIFwiQXV0cmVcIicsXG4gICAgc3RvcmVPdGhlcnNBc0NvbW1lbnQ6IFwiU2F1dmVnYXJkZXIgY2hvaXggYXV0cmUgY29tbWUgY29tbWVudGFpcmVcIixcbiAgICBsYWJlbDogXCJJbnRpdHVsw6lcIixcbiAgICBzaG93VGl0bGU6IFwiQWZmaWNoZXIgbGUgdGl0cmVcIixcbiAgICB2YWx1ZVRydWU6IFwiVmFsZXVyIHZyYWlcIixcbiAgICB2YWx1ZUZhbHNlOiBcIlZhbGV1ciBmYXV4XCIsXG4gICAgY29sczogXCJDb2xvbm5lc1wiLFxuICAgIHJvd3M6IFwiTm9tYnJlIGRlIGxpZ25lc1wiLFxuICAgIHBsYWNlSG9sZGVyOiBcIlBsYWNlSG9sZGVyIChpbmRpY2UgZGFucyBsZSBjaGFtcClcIixcbiAgICBvcHRpb25zQ2FwdGlvbjogXCJUZXh0ZSBwYXIgZMOpZmF1dFwiLFxuICAgIGV4cHJlc3Npb246IFwiRXhwcmVzc2lvblwiLFxuICAgIGZvcm1hdDogXCJGb3JtYXRcIixcbiAgICBkaXNwbGF5U3R5bGU6IFwiU3R5bGUgZCdhZmZpY2hhZ2VcIixcbiAgICBjdXJyZW5jeTogXCJNb25uYWllXCIsXG4gICAgdXNlR3JvdXBpbmc6IFwiVXRpbGlzZXIgbGVzIGdyb3VwZXNcIixcbiAgICBzaG93UHJldmlldzogXCJWb2lyIGxhIHByw6l2aXN1YWxpc2F0aW9uXCIsXG4gICAgYWxsb3dNdWx0aXBsZTogXCJBdXRvcmlzZXIgbXVsdGlwbGVzXCIsXG4gICAgaW1hZ2VIZWlnaHQ6IFwiSGF1dGV1ciBkZSBsJ2ltYWdlXCIsXG4gICAgaW1hZ2VXaWR0aDogXCJMYXJnZXVyIGRlIGwnaW1hZ2VcIixcbiAgICBzdG9yZURhdGFBc1RleHQ6IFwiU3RvY2tlciBsZXMgZG9ubsOpZXMgY29tbWUgZHUgdGV4dGVcIixcbiAgICBtYXhTaXplOiBcIlRhaWxsZSBtYXhpbXVtXCIsXG4gICAgaHRtbDogXCJIVE1MXCIsXG4gICAgY29sdW1uczogXCJDb2xvbm5lc1wiLFxuICAgIGNlbGxzOiBcIkNlbGx1bGVzXCIsXG4gICAgaG9yaXpvbnRhbFNjcm9sbDogXCJTY3JvbGwgaG9yaXpvbnRhbFwiLFxuICAgIGNlbGxUeXBlOiBcIlR5cGUgZGUgY2VsbHVsZVwiLFxuICAgIGNvbHVtbkNvbENvdW50OiBcIk5vbWJyZSBkZSBjb2xvbm5lc1wiLFxuICAgIGNvbHVtbk1pbldpZHRoOiBcIkxhcmdldXIgbWluaW1hbGUgZGVzIGNvbG9ubmVzXCIsXG4gICAgcm93Q291bnQ6IFwiTm9tYnJlIGRlIGxpZ25lc1wiLFxuICAgIG1pblJvd0NvdW50OiBcIk5vbWJyZSBkZSBsaWduZXMgbWluaW11bVwiLFxuICAgIG1heFJvd0NvdW50OiBcIk5vbWJyZSBkZSBsaWduZXMgbWF4aW11bVwiLFxuICAgIGtleU5hbWU6IFwiTm9tIGRlIGxhIGNsw6lcIixcbiAgICBrZXlEdXBsaWNhdGlvbkVycm9yOiBcIkVycmV1ciBkZSBjbMOpcyBtdWx0aXBsZXNcIixcbiAgICBjb25maXJtRGVsZXRlOiBcIkNvbmZpcm1hdGlvbiBkZSBzdXBwcmVzc2lvblwiLFxuICAgIGNvbmZpcm1EZWxldGVUZXh0OiBcIlRleHRlIGRlIGNvbmZpcm1hdGlvbiBkZSBzdXBwcmVzc2lvblwiLFxuICAgIGFkZFJvd1RleHQ6IFwiQm91dG9uIGFqb3V0ZXIgdW5lIGxpZ25lXCIsXG4gICAgcmVtb3ZlUm93VGV4dDogXCJCb3V0b24gc3VwcHJpbWVyIHVuZSBsaWduZVwiLFxuICAgIGl0ZW1zOiBcIkl0ZW1zXCIsXG4gICAgaXRlbVNpemU6IFwiTm9tYnJlIG1heGltdW0gZGUgY2FyYWN0w6hyZXNcIixcbiAgICBjb2xDb3VudDogXCJOb21icmUgZGUgY29sb25uZXNcIixcbiAgICB0ZW1wbGF0ZVRpdGxlOiBcIlRpdHJlIGRlIGdhYmFyaXRcIixcbiAgICB0ZW1wbGF0ZURlc2NyaXB0aW9uOiBcIkRlc2NyaXB0aW9uIGR1IGdhYmFyaXRcIixcbiAgICBhbGxvd0FkZFBhbmVsOiBcIkF1dG9yaXNlciBsJ2Fqb3V0IGRlIHBhbm5lYXVcIixcbiAgICBhbGxvd1JlbW92ZVBhbmVsOiBcIkF1dG9yaXNlciBsYSBzdXBwcmVzc2lvbiBkZSBwYW5uZWF1XCIsXG4gICAgcGFuZWxDb3VudDogXCJOb21icmUgZGUgcGFubmVhdXhcIixcbiAgICBtaW5QYW5lbENvdW50OiBcIk5vbWJyZSBtaW5pbXVtIGRlIHBhbm5lYXV4XCIsXG4gICAgbWF4UGFuZWxDb3VudDogXCJOb21icmUgbWF4aW11bSBkZSBwYW5uZWF1eFwiLFxuICAgIHBhbmVsc1N0YXRlOiBcIsOJdGF0IGRlcyBwYW5uZWF1eFwiLFxuICAgIHBhbmVsQWRkVGV4dDogXCJUZXh0ZSBkJ2Fqb3V0IGRlcyBwYW5uZWF1eFwiLFxuICAgIHBhbmVsUmVtb3ZlVGV4dDogXCJUZXh0ZSBkZSBzdXBwcmVzc2lvbiBkZXMgcGFubmVhdXhcIixcbiAgICBwYW5lbFByZXZUZXh0OiBcIlRleHRlIHBhbm5lYXUgcHLDqWPDqWRlbnRcIixcbiAgICBwYW5lbE5leHRUZXh0OiBcIlRleHRlIHBhbm5lYXUgc3VpdmFudFwiLFxuICAgIHNob3dRdWVzdGlvbk51bWJlcnM6IFwiTnVtw6lyb3RhdGlvbiBkZXMgcXVlc3Rpb25zXCIsXG4gICAgc2hvd1JhbmdlSW5Qcm9ncmVzczogXCJBZmZpY2hlciBsYSBwcm9ncmVzc2lvblwiLFxuICAgIHJlbmRlck1vZGU6IFwiTW9kZSBkZSByZW5kdVwiLFxuICAgIHRlbXBsYXRlVGl0bGVMb2NhdGlvbjogXCJFbXBsYWNlbWVudCBkdSB0aXRyZSBkZSBnYWJhcml0XCIsXG4gICAgcmF0ZVZhbHVlczogXCJCYXLDqG1lXCIsXG4gICAgcmF0ZU1pbjogXCJWYWxldXIgbWluaW11bVwiLFxuICAgIHJhdGVNYXg6IFwiVmFsZXVyIG1heGltdW1cIixcbiAgICByYXRlU3RlcDogXCJQYXNcIixcbiAgICBtaW5SYXRlRGVzY3JpcHRpb246IFwiRGVzY3JpcHRpb24gbm90ZSBtaW5pbXVtXCIsXG4gICAgbWF4UmF0ZURlc2NyaXB0aW9uOiBcIkRlc2NyaXB0aW9uIG5vdGUgbWF4aW11bVwiLFxuICAgIGlucHV0VHlwZTogXCJUeXBlIGRlIGNoYW1wXCIsXG4gICAgc2l6ZTogXCJOb21icmUgbWF4aW11bSBkZSBjYXJhY3TDqHJlc1wiLFxuICAgIGZvY3VzRmlyc3RRdWVzdGlvbkF1dG9tYXRpYzogXCJGb2N1cyBhdXRvbWF0aXF1ZSBzdXIgbGEgcHJlbWnDqHJlIHF1ZXN0aW9uXCIsXG4gICAgY29tcGxldGVkSHRtbDogXCJIVE1MIHF1ZXN0aW9ubmFpcmUgZmluYWxpc8OpXCIsXG4gICAgY29tcGxldGVkQmVmb3JlSHRtbDogXCJIVE1MIGF2YW50IGNvbXBsw6l0aW9uIGR1IHF1ZXN0aW9ubmFpcmVcIixcbiAgICBsb2FkaW5nSHRtbDogXCJIVE1MIGRlIGNoYXJnZW1lbnRcIixcbiAgICB0cmlnZ2VyczogXCJEw6ljbGVuY2hldXJzXCIsXG4gICAgY29va2llTmFtZTogXCJOb20gZHUgY29va2llXCIsXG4gICAgc2VuZFJlc3VsdE9uUGFnZU5leHQ6IFwiRW52b3llciBsZXMgcsOpc3VsdGF0cyBhdSBjaGFuZ2VtZW50IGRlIHBhZ2VcIixcbiAgICBzaG93TmF2aWdhdGlvbkJ1dHRvbnM6IFwiQm91dG9ucyBkZSBuYXZpZ2F0aW9uXCIsXG4gICAgc2hvd1ByZXZCdXR0b246IFwiQWZmaWNoZXIgbGUgYm91dG9uIHByw6ljw6lkZW50XCIsXG4gICAgc2hvd1BhZ2VUaXRsZXM6IFwiVGl0cmUgZGVzIHBhZ2VzXCIsXG4gICAgc2hvd0NvbXBsZXRlZFBhZ2U6IFwiVm9pciBsYSBwYWdlIGZvcm11bGFpcmUgY29tcGzDqXTDqSA/XCIsXG4gICAgc2hvd1BhZ2VOdW1iZXJzOiBcIk51bcOpcm90YXRpb24gZGVzIHBhZ2VzXCIsXG4gICAgcXVlc3Rpb25FcnJvckxvY2F0aW9uOiBcIkVtcGxhY2VtZW50IGRlcyBlcnJldXJzXCIsXG4gICAgc2hvd1Byb2dyZXNzQmFyOiBcIkJhcnJlIGRlIHByb2dyZXNzaW9uXCIsXG4gICAgbW9kZTogXCJNb2RlIGQnYWZmaWNoYWdlXCIsXG4gICAgZ29OZXh0UGFnZUF1dG9tYXRpYzogXCJBbGxlciDDoCBsYSBwYWdlIHN1aXZhbnRlIGF1dG9tYXRpcXVlbWVudFwiLFxuICAgIGNsZWFySW52aXNpYmxlVmFsdWVzOiBcIkNhY2hlciBsZXMgdmFsZXVycyBpbnZpc2libGVzXCIsXG4gICAgc3RhcnRTdXJ2ZXlUZXh0OiBcIlRleHRlIGRlIGTDqW1hcnJhZ2UgZHUgcXVlc3Rpb25uYWlyZVwiLFxuICAgIHBhZ2VQcmV2VGV4dDogXCJCb3V0b24gcGFnZSBwcsOpY8OpZGVudGVcIixcbiAgICBwYWdlTmV4dFRleHQ6IFwiQm91dG9uIHBhZ2Ugc3VpdmFudGVcIixcbiAgICBjb21wbGV0ZVRleHQ6IFwiVGV4dGUgcXVlc3Rpb25uYWlyZSBmaW5hbGlzw6lcIixcbiAgICByZXF1aXJlZFRleHQ6IFwiVGV4dGUgcG91ciBsZXMgY2hhbXBzIG9ibGlnYXRvaXJlc1wiLFxuICAgIHF1ZXN0aW9uU3RhcnRJbmRleDogXCJJbmRleCBkZSBudW3DqXJvdGF0aW9uIGRlcyBxdWVzdGlvbnNcIixcbiAgICBxdWVzdGlvblRpdGxlVGVtcGxhdGU6IFwiVGVtcGxhdGUgZCdhZmZpY2hhZ2UgZGVzIHF1ZXN0aW9uc1wiLFxuICAgIGZpcnN0UGFnZUlzU3RhcnRlZDogXCJDb21tZW5jZSDDoCBsYSBwcmVtacOocmUgcGFnZVwiLFxuICAgIGlzU2luZ2xlUGFnZTogXCJBZmZpY2jDqSBzdXIgdW5lIHBhZ2VcIixcbiAgICBtYXhUaW1lVG9GaW5pc2hQYWdlOiBcIlRlbXBzIG1heGltdW0gcG91ciBmaW5pciBsYSBwYWdlXCIsXG4gICAgc2hvd1RpbWVyUGFuZWw6IFwiQWZmaWNoZXIgbGUgcGFubmVhdSBjaHJvbm9tw6h0cmVcIixcbiAgICBzaG93VGltZXJQYW5lbE1vZGU6IFwiTW9kZSBkJ2FmZmljaGFnZSBkdSBwYW5uZWF1IGNocm9ub23DqHRyZVwiLFxuICAgIGluZGVudDogXCJJbmRlbnRhdGlvblwiLFxuICAgIGlzQWxsUm93UmVxdWlyZWQ6IFwiVG91dGVzIGxlcyBsaWduZXMgc29udC1lbGxlIG9ibGlnYXRvaXJlcyA/XCIsXG4gICAgbG9jYWxlOiBcIkxhbmd1ZVwiXG4gIH1cbn07XG5cbmVkaXRvckxvY2FsaXphdGlvbi5sb2NhbGVzW1wiZnJcIl0gPSBmcmVuY2hUcmFuc2xhdGlvbjtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9sb2NhbGl6YXRpb24vZnJlbmNoLnRzIiwiaW1wb3J0IHsgZWRpdG9yTG9jYWxpemF0aW9uIH0gZnJvbSBcIi4uL2VkaXRvckxvY2FsaXphdGlvblwiO1xuXG52YXIgZ2VybWFuVHJhbnNsYXRpb24gPSB7XG4gIC8vc3VydmV5IHRlbXBsYXRlc1xuICBzdXJ2ZXk6IHtcbiAgICBlZGl0OiBcIkJlYXJiZWl0ZW5cIixcbiAgICBkcm9wUXVlc3Rpb246IFwiRnJhZ2UgYml0dGUgaGllciBwbGF0emllcmVuLlwiLFxuICAgIGNvcHk6IFwiS29waWVyZW5cIixcbiAgICBhZGRUb1Rvb2xib3g6IFwiWnVyIFdlcmt6ZXVnbGVpc3RlIGhpbnp1ZsO8Z2VuXCIsXG4gICAgZGVsZXRlUGFuZWw6IFwiUGFuZWwgbMO2c2NoZW5cIixcbiAgICBkZWxldGVRdWVzdGlvbjogXCJGcmFnZSBsw7ZzY2hlblwiXG4gIH0sXG4gIC8vcXVlc3Rpb25UeXBlc1xuICBxdDoge1xuICAgIGNoZWNrYm94OiBcIkNoZWNrYm94XCIsXG4gICAgY29tbWVudDogXCJLb21tZW50YXJcIixcbiAgICBkcm9wZG93bjogXCJBdWZrbGFwcG1lbsO8XCIsXG4gICAgZmlsZTogXCJEYXRlaVwiLFxuICAgIGh0bWw6IFwiSHRtbFwiLFxuICAgIG1hdHJpeDogXCJNYXRyaXggKGVpbmZhY2hlIEF1c3dhaGwpXCIsXG4gICAgbWF0cml4ZHJvcGRvd246IFwiTWF0cml4IChtZWhyZmFjaGUgQXVzd2FobClcIixcbiAgICBtYXRyaXhkeW5hbWljOiBcIk1hdHJpeCAoZHluYW1pc2NoZSBaZWlsZW4pXCIsXG4gICAgbXVsdGlwbGV0ZXh0OiBcIk1laHJ6ZWlsaWdlciBUZXh0XCIsXG4gICAgcGFuZWw6IFwiUGFuZWxcIixcbiAgICBwYW5lbGR5bmFtaWM6IFwiUGFuZWwgKGR5bmFtaXNjaGUgUGFuZWxzKVwiLFxuICAgIHJhZGlvZ3JvdXA6IFwiUmFkaW9ncnVwcGVcIixcbiAgICByYXRpbmc6IFwiQmV3ZXJ0dW5nXCIsXG4gICAgdGV4dDogXCJFaW5mYWNoZVx0RWluZ2FiZVwiLFxuICAgIGJvb2xlYW46IFwiQm9vbGVhblwiXG4gIH0sXG4gIC8vU3RyaW5ncyBpbiBFZGl0b3JcbiAgZWQ6IHtcbiAgICBzdXJ2ZXk6IFwiVW1mcmFnZVwiLFxuICAgIGFkZE5ld1BhZ2U6IFwiTmV1ZSBTZWl0ZSBoaW56dWbDvGdlblwiLFxuICAgIG5ld1BhZ2VOYW1lOiBcIlNlaXRlXCIsXG4gICAgbmV3UXVlc3Rpb25OYW1lOiBcIkZyYWdlXCIsXG4gICAgbmV3UGFuZWxOYW1lOiBcIlBhbmVsXCIsXG4gICAgdGVzdFN1cnZleTogXCJUZXN0dW1mcmFnZVwiLFxuICAgIHRlc3RTdXJ2ZXlBZ2FpbjogXCJUZXN0dW1mcmFnZSB3aWVkZXJob2xlblwiLFxuICAgIHRlc3RTdXJ2ZXlXaWR0aDogXCJVbWZyYWdlYnJlaXRlOiBcIixcbiAgICBlbWJlZFN1cnZleTogXCJVbWZyYWdlIGVpbmbDvGdlblwiLFxuICAgIHNhdmVTdXJ2ZXk6IFwiIFVtZnJhZ2Ugc3BlaWNoZXJuXCIsXG4gICAgZGVzaWduZXI6IFwiVW1mcmFnZSBEZXNpZ25lclwiLFxuICAgIGpzb25FZGl0b3I6IFwiSlNPTiBFZGl0b3JcIixcbiAgICB1bmRvOiBcIlLDvGNrZ8OkbmdpZ1wiLFxuICAgIHJlZG86IFwiV2llZGVyaGVyc3RlbGxlblwiLFxuICAgIG9wdGlvbnM6IFwiT3B0aW9uZW5cIixcbiAgICBnZW5lcmF0ZVZhbGlkSlNPTjogXCJHZW5lcmllcmUgZ8O8bHRpZ2VzIEpTT05cIixcbiAgICBnZW5lcmF0ZVJlYWRhYmxlSlNPTjogXCJHZW5lcmllcmUgbGVzYmFyZXMgSlNPTlwiLFxuICAgIHRvb2xib3g6IFwiV2Vya3pldWdsZWlzdGVcIixcbiAgICBkZWxTZWxPYmplY3Q6IFwiTMO2c2NoZSBtYXJraWVydGVzIE9iamVrdFwiLFxuICAgIGNvcnJlY3RKU09OOiBcIkJpdHRlIEpTT04ga29ycmlnaWVyZW4uXCIsXG4gICAgc3VydmV5UmVzdWx0czogXCJVbWZyYWdlZXJnZWJuaXM6IFwiXG4gIH0sXG4gIC8vUHJvcGVydHkgbmFtZXMgaW4gdGFibGUgaGVhZGVyc1xuICBwZWw6IHtcbiAgICBpc1JlcXVpcmVkOiBcIkVyZm9yZGVybGljaD9cIlxuICB9LFxuICAvL1Byb3BlcnR5IEVkaXRvcnNcbiAgcGU6IHtcbiAgICBhcHBseTogXCJBbndlbmRlblwiLFxuICAgIG9rOiBcIk9LXCIsXG4gICAgY2FuY2VsOiBcIkFiYnJlY2hlblwiLFxuICAgIHJlc2V0OiBcIlp1csO8Y2tzZXR6ZW5cIixcbiAgICBjbG9zZTogXCJTY2hsaWVzc2VuXCIsXG4gICAgZGVsZXRlOiBcIkzDtnNjaGVuXCIsXG4gICAgYWRkTmV3OiBcIk5ldSBoaW56dWbDvGdlblwiLFxuICAgIHJlbW92ZUFsbDogXCJBbGxlcyBsw7ZzY2hlblwiLFxuICAgIGVkaXQ6IFwiQmVhcmJlaXRlblwiLFxuICAgIGVtcHR5OiBcIjxsZWVyPlwiLFxuICAgIGZhc3RFbnRyeTogXCJTY2huZWxsLUVpbnRyYWdcIixcbiAgICBmb3JtRW50cnk6IFwiRm9ybXVsYXItRWludHJhZ1wiLFxuICAgIHRlc3RTZXJ2aWNlOiBcIlNlcnZpY2UgdGVzdGVuXCIsXG4gICAgZXhwcmVzc2lvbkhlbHA6XG4gICAgICBcIkJpdHRlIGdlYmVuIFNpZSBlaW5lIGJvb2xlc2NoZW4gQXVzZHJ1Y2sgZWluLiBFcyBtdXNzICd0cnVlJyByZXRvdXJuaWVyZW4gdW0gZGllIEZyYWdlL1NlaXRlIGFuenV6ZWlnZW4uIHp1bSBCZWlzcGllbDoge3F1ZXN0aW9uMX0gPSAndmFsdWUxJyBvciAoe3F1ZXN0aW9uMn0gPSAzIGFuZCB7cXVlc3Rpb24zfSA8IDUpXCIsXG5cbiAgICBwcm9wZXJ0eUlzRW1wdHk6IFwiQml0dGUgZ2ViZW4gU2llIGVpbmVuIFdlcnQgZWluXCIsXG4gICAgdmFsdWU6IFwiV2VydFwiLFxuICAgIHRleHQ6IFwiVGV4dFwiLFxuICAgIGNvbHVtbkVkaXQ6IFwiU3BhbHRlIGJlYXJiZWl0ZW46IHswfVwiLFxuICAgIGl0ZW1FZGl0OiBcIkVsZW1lbnQgYmVhcmJlaXRlbjogezB9XCIsXG5cbiAgICBoYXNPdGhlcjogXCJIYXQgZWluIGFuZGVyZXMgRWxlbWVudFwiLFxuICAgIG5hbWU6IFwiTmFtZVwiLFxuICAgIHRpdGxlOiBcIlRpdGVsXCIsXG4gICAgY2VsbFR5cGU6IFwiWmVsbGVudHlwXCIsXG4gICAgY29sQ291bnQ6IFwiU3BhbHRlbmFuemFobFwiLFxuICAgIGNob2ljZXNPcmRlcjogXCJXw6RobGUgQXVzd2FobHJlaWhlbmZvbGdlXCIsXG4gICAgdmlzaWJsZTogXCJJc3QgZXMgc2ljaHRiYXI/XCIsXG4gICAgaXNSZXF1aXJlZDogXCJJc3QgZXMgZXJmb3JkZXJsaWNoP1wiLFxuICAgIHN0YXJ0V2l0aE5ld0xpbmU6IFwiSW4gbmV1ZXIgWmVpbGUgYmVnaW5uZW4/XCIsXG4gICAgcm93czogXCJaZWlsZW5hbnphaGxcIixcbiAgICBwbGFjZUhvbGRlcjogXCJQbGF0emhhbHRlciBlaW5nZWJlblwiLFxuICAgIHNob3dQcmV2aWV3OiBcIldpcmQgZWluZSBCaWxkdm9yc2NoYXUgYW5nZXplaWd0P1wiLFxuICAgIHN0b3JlRGF0YUFzVGV4dDogXCJTcGVpY2hlciBEYXRlaW5pbmhhbHQgZGVzIEpTT04tUmVzdWx0YXRzIGFscyBUZXh0XCIsXG4gICAgbWF4U2l6ZTogXCJNYXhpbWFsZSBEYXRlaWdyw7Zzc2UgaW4gQnl0ZXNcIixcbiAgICBpbWFnZUhlaWdodDogXCJCaWxkaMO2aGVcIixcbiAgICBpbWFnZVdpZHRoOiBcIkJpbGRicmVpdGVcIixcbiAgICByb3dDb3VudDogXCJaZWlsZW5hbnphaGxcIixcbiAgICBhZGRSb3dUZXh0OiBcIlplaWxlbmtub3BmdGV4dCBoaW56dWbDvGdlblwiLFxuICAgIHJlbW92ZVJvd1RleHQ6IFwiWmVpbGVua25vcGZ0ZXh0IGzDtnNjaGVuXCIsXG4gICAgbWluUmF0ZURlc2NyaXB0aW9uOiBcIkJld2VydHVuZ3NiZXNjaHJlaWJ1bmcgbWluaW1pZXJlblwiLFxuICAgIG1heFJhdGVEZXNjcmlwdGlvbjogXCJCZXdlcnR1bmdzYmVzY2hyZWlidW5nIG1heGltaWVyZW5cIixcbiAgICBpbnB1dFR5cGU6IFwiRWluZ2FiZXR5cFwiLFxuICAgIG9wdGlvbnNDYXB0aW9uOiBcIkF1c3dhaGxiZXNjaHJpZnR1bmdcIixcblxuICAgIHFFZGl0b3JUaXRsZTogXCJGcmFnZSBiZWFyYmVpdGVuOiB7MH1cIixcbiAgICB0YWJzOiB7XG4gICAgICBnZW5lcmFsOiBcIkFsbGdlbWVpblwiLFxuICAgICAgZmlsZU9wdGlvbnM6IFwiT3B0aW9uZW5cIixcbiAgICAgIGh0bWw6IFwiSHRtbCBFZGl0b3JcIixcbiAgICAgIGNvbHVtbnM6IFwiU3BhbHRlblwiLFxuICAgICAgcm93czogXCJaZWlsZW5cIixcbiAgICAgIGNob2ljZXM6IFwiQXVzd2FobG3DtmdsaWNoa2VpdGVuXCIsXG4gICAgICB2aXNpYmxlSWY6IFwiU2ljaHRiYXIgd2VublwiLFxuICAgICAgcmF0ZVZhbHVlczogXCJCZXdlcnR1bmdzd2VydGVcIixcbiAgICAgIGNob2ljZXNCeVVybDogXCJBdXN3YWhsbcO2Z2xpY2hrZWl0ZW4gdm9tIEludGVybmV0XCIsXG4gICAgICBtYXRyaXhDaG9pY2VzOiBcIlN0YW5kYXJkYXVzd2FobFwiLFxuICAgICAgbXVsdGlwbGVUZXh0SXRlbXM6IFwiVGV4dGVpbmdhYmVcIixcbiAgICAgIHZhbGlkYXRvcnM6IFwiw5xiZXJwcsO8ZnVuZ1wiXG4gICAgfSxcbiAgICBlZGl0UHJvcGVydHk6IFwiRWlnZW5zY2hhZnQgYmVhcmJlaXRlbiAnezB9J1wiLFxuICAgIGl0ZW1zOiBcIlsgR2VnZW5zdGFuZDogezB9IF1cIixcblxuICAgIGVudGVyTmV3VmFsdWU6IFwiQml0dGUgZWluZW4gV2VydCBlaW5nZWJlbi5cIixcbiAgICBub3F1ZXN0aW9uczogXCJEaWUgVW1mcmFnZSBlbnRow6RsdCBrZWluZSBGcmFnZS5cIixcbiAgICBjcmVhdGV0cmlnZ2VyOiBcIkJpdHRlIGVpbmVuIFRyaWdnZXIgZWluZ2ViZW4uXCIsXG4gICAgdHJpZ2dlck9uOiBcIkVpbiBcIixcbiAgICB0cmlnZ2VyTWFrZVBhZ2VzVmlzaWJsZTogXCJTZWl0ZW4gc2ljaHRiYXIgbWFjaGVuOlwiLFxuICAgIHRyaWdnZXJNYWtlUXVlc3Rpb25zVmlzaWJsZTogXCJFbGVtZW50ZSBzaWNodGJhciBtYWNoZW46XCIsXG4gICAgdHJpZ2dlckNvbXBsZXRlVGV4dDogXCJCZWkgRXJmb2xnIGRpZSBVbWZyYWdlIGFic2NobGllc3Nlbi5cIixcbiAgICB0cmlnZ2VyTm90U2V0OiBcIktlaW4gVHJpZ2dlciBlaW5nZXJpY2h0ZXRcIixcbiAgICB0cmlnZ2VyUnVuSWY6IFwiQXVzZsO8aHJlbiB3ZW5uXCIsXG4gICAgdHJpZ2dlclNldFRvTmFtZTogXCLDhG5kZXJlIFdlcnQgdm9uOiBcIixcbiAgICB0cmlnZ2VyU2V0VmFsdWU6IFwiYXVmOiBcIixcbiAgICB0cmlnZ2VySXNWYXJpYWJsZTogXCJWYXJpYWJsZSBuaWNodCBpbSBVbWZyYWdlZXJnZWJuaXMgZWluYmluZGVuLlwiXG4gIH0sXG4gIC8vUHJvcGVydHkgdmFsdWVzXG4gIHB2OiB7XG4gICAgdHJ1ZTogXCJ0cnVlXCIsXG4gICAgZmFsc2U6IFwiZmFsc2VcIlxuICB9LFxuICAvL09wZXJhdG9yc1xuICBvcDoge1xuICAgIGVtcHR5OiBcImlzdCBsZWVyXCIsXG4gICAgbm90ZW1wdHk6IFwiaXN0IG5pY2h0IGxlZXJcIixcbiAgICBlcXVhbDogXCJpc3QgZ2xlaWNoXCIsXG4gICAgbm90ZXF1YWw6IFwiaXN0IHVuZ2xlaWNoXCIsXG4gICAgY29udGFpbnM6IFwiZW50aMOkbHRcIixcbiAgICBub3Rjb250YWluczogXCJlbnRow6RsdCBuaWNodFwiLFxuICAgIGdyZWF0ZXI6IFwiZ3LDtnNzZXIgYWxzXCIsXG4gICAgbGVzczogXCJrbGVpbmVyIGFsc1wiLFxuICAgIGdyZWF0ZXJvcmVxdWFsOiBcImdyw7Zzc2VyIG9kZXIga2xlaW5lciBhbHNcIixcbiAgICBsZXNzb3JlcXVhbDogXCJrbGVpbmVyIG9kZXIgaXN0IGdsZWljaFwiXG4gIH0sXG4gIC8vRW1iZWQgd2luZG93XG4gIGV3OiB7XG4gICAgYW5ndWxhcjogXCJBbmd1bGFyLVZlcnNpb24gYmVudXR6ZW5cIixcbiAgICBqcXVlcnk6IFwialF1ZXJ5LVZlcnNpb24gYmVudXR6ZW5cIixcbiAgICBrbm9ja291dDogXCJLbm9ja291dC1WZXJzaW9uIGJlbnV0emVuXCIsXG4gICAgcmVhY3Q6IFwiUmVhY3QtVmVyc2lvbiBiZW51dHplblwiLFxuICAgIHZ1ZTogXCJWdWUtVmVyc2lvbiBiZW51dHplblwiLFxuICAgIGJvb3RzdHJhcDogXCJBbHMgQm9vdHN0cmFwIEZyYW1ld29ya1wiLFxuICAgIHN0YW5kYXJkOiBcIktlaW4gQm9vdHN0cmFwXCIsXG4gICAgc2hvd09uUGFnZTogXCJaZWlnZSBVbWZyYWdlIGF1ZiBTZWl0ZVwiLFxuICAgIHNob3dJbldpbmRvdzogXCJaZWlnZSBVbWZyYWdlIGFscyBGZW5zdGVyXCIsXG4gICAgbG9hZEZyb21TZXJ2ZXI6IFwiTGFkZSBVbWZyYWdlIGFscyBKU09OIHZvbSBTZXJ2ZXJcIixcbiAgICB0aXRsZVNjcmlwdDogXCJTa3JpcHRlIHVuZCBTdHlsZXNcIixcbiAgICB0aXRsZUh0bWw6IFwiSFRNTFwiLFxuICAgIHRpdGxlSmF2YVNjcmlwdDogXCJKYXZhU2NyaXB0XCJcbiAgfSxcbiAgdmFsaWRhdG9yczoge1xuICAgIGFuc3dlcmNvdW50dmFsaWRhdG9yOiBcIkFuemFobCBBbnR3b3J0ZW5cIixcbiAgICBlbWFpbHZhbGlkYXRvcjogXCJFLU1haWxcIixcbiAgICBudW1lcmljdmFsaWRhdG9yOiBcIm51bWVyaXNjaFwiLFxuICAgIHJlZ2V4dmFsaWRhdG9yOiBcInJlZ2V4XCIsXG4gICAgdGV4dHZhbGlkYXRvcjogXCJ0ZXh0XCJcbiAgfSxcbiAgdHJpZ2dlcnM6IHtcbiAgICBjb21wbGV0ZXRyaWdnZXI6IFwiVW1mcmFnZSBhYnNjaGxpZXNzZW5cIixcbiAgICBzZXR2YWx1ZXRyaWdnZXI6IFwiV2VydCBzZXR6ZW5cIixcbiAgICB2aXNpYmxldHJpZ2dlcjogXCJTaWNodGJhcmtlaXQgw6RuZGVyblwiXG4gIH0sXG4gIC8vUHJvcGVydGllc1xuICBwOiB7XG4gICAgbmFtZTogXCJOYW1lXCIsXG4gICAgdGl0bGU6IHtcbiAgICAgIG5hbWU6IFwiVGl0ZWxcIixcbiAgICAgIHRpdGxlOiBcIkJpdHRlIGxlZXIgbGFzc2VuLCBmYWxscyBnbGVpY2ggd2llICdOYW1lJ1wiXG4gICAgfSxcbiAgICBzdXJ2ZXlfdGl0bGU6IHsgbmFtZTogXCJUaXRlbFwiLCB0aXRsZTogXCJXaXJkIGF1ZiBqZWRlciBTZWl0ZSBhbmdlemVpZ3QuXCIgfSxcbiAgICBwYWdlX3RpdGxlOiB7IG5hbWU6IFwidGl0bGVcIiwgdGl0bGU6IFwiU2VpdGVudGl0ZWxcIiB9XG4gIH1cbn07XG5cbmVkaXRvckxvY2FsaXphdGlvbi5sb2NhbGVzW1wiZGVcIl0gPSBnZXJtYW5UcmFuc2xhdGlvbjtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9sb2NhbGl6YXRpb24vZ2VybWFuLnRzIiwiaW1wb3J0IHsgZWRpdG9yTG9jYWxpemF0aW9uIH0gZnJvbSBcIi4uL2VkaXRvckxvY2FsaXphdGlvblwiO1xuXG5leHBvcnQgdmFyIGh1U3RyaW5ncyA9IHtcbiAgLy9zdXJ2ZXkgdGVtcGxhdGVzXG4gIHN1cnZleToge1xuICAgIGVkaXQ6IFwiU3plcmtlc3p0w6lzXCIsXG4gICAgZXh0ZXJuYWxIZWxwTGluazogXCJOw6l6emUgbWVnLCBob2d5YW4ga2VsbCBrw6lyZMWRw612ZWtldCBrw6lzesOtdGVuaS5cIixcbiAgICBleHRlcm5hbEhlbHBMaW5rVXJsOlxuICAgICAgXCJodHRwczovL3d3dy55b3V0dWJlLmNvbS9jaGFubmVsL1VDSDJydTlva0ljb29OWmZwSWJ5cTRxUT92aWV3X2FzPXN1YnNjcmliZXJcIixcbiAgICBkcm9wUXVlc3Rpb246IFwiS8OpcmVtIGRvYmpvbiBpZGUgZWd5IGvDqXJkw6lzdCBhIGJhbCBvbGRhbGkgbWVuw7xixZFsLlwiLFxuICAgIGNvcHk6IFwiTcOhc29sw6FzXCIsXG4gICAgYWRkVG9Ub29sYm94OiBcIkhvenrDoWFkw6FzIGF6IGVzemvDtnp0w6FyaG96XCIsXG4gICAgZGVsZXRlUGFuZWw6IFwiUGFuZWwgZWx0w6F2b2zDrXTDoXNhXCIsXG4gICAgZGVsZXRlUXVlc3Rpb246IFwiS8OpcmTDqXMgZWx0w6F2b2zDrXTDoXNhXCIsXG4gICAgY29udmVydFRvOiBcIktvbnZlcnTDoWzDoXNcIixcbiAgICBkcmFnOiBcIkVsZW0gbW96Z2F0w6FzYVwiXG4gIH0sXG4gIC8vcXVlc3Rpb25UeXBlc1xuICBxdDoge1xuICAgIGRlZmF1bHQ6IFwiQWxhcMOpcnRlbG1lemV0dFwiLFxuICAgIGNoZWNrYm94OiBcIkplbMO2bMWRbsOpZ3l6ZXRcIixcbiAgICBjb21tZW50OiBcIk1lZ2plZ3l6w6lzXCIsXG4gICAgaW1hZ2VwaWNrZXI6IFwiS8OpcHbDoWxhc3p0w7NcIixcbiAgICBkcm9wZG93bjogXCJMZWfDtnJkw7xsxZFcIixcbiAgICBmaWxlOiBcIsOBbGxvbcOhbnlcIixcbiAgICBodG1sOiBcIkhUTUxcIixcbiAgICBtYXRyaXg6IFwiTcOhdHJpeCAoZWd5dsOhbGFzenTDs3MpXCIsXG4gICAgbWF0cml4ZHJvcGRvd246IFwiTcOhdHJpeCAodMO2YmJ2w6FsYXN6dMOzcylcIixcbiAgICBtYXRyaXhkeW5hbWljOiBcIk3DoXRyaXggKGRpbmFtaWt1cylcIixcbiAgICBtdWx0aXBsZXRleHQ6IFwiVMO2YmJzb3JvcyBzesO2dmVnXCIsXG4gICAgcGFuZWw6IFwiUGFuZWxcIixcbiAgICBwYW5lbGR5bmFtaWM6IFwiUGFuZWwgKGRpbmFtaWt1cylcIixcbiAgICByYWRpb2dyb3VwOiBcIlbDoWxhc3p0w7Nnb21iXCIsXG4gICAgcmF0aW5nOiBcIsOJcnTDqWtlbMOpc1wiLFxuICAgIHRleHQ6IFwiRWd5c29yb3Mgc3rDtnZlZ1wiLFxuICAgIGJvb2xlYW46IFwiSWdhei1oYW1pc1wiLFxuICAgIGV4cHJlc3Npb246IFwiS2lmZWplesOpcyAoY3NhayBvbHZhc2hhdMOzKVwiLFxuICAgIGZsb3dwYW5lbDogXCJGb2x5YW1hdFwiXG4gIH0sXG4gIC8vU3RyaW5ncyBpbiBFZGl0b3JcbiAgZWQ6IHtcbiAgICBkZWZhdWx0TG9jYWxlOiBcIkFsYXDDqXJ0ZWxtZXpldHQgKHswfSlcIixcbiAgICBzdXJ2ZXk6IFwiS8OpcmTFkcOtdlwiLFxuICAgIHNldHRpbmdzOiBcIkvDqXJkxZHDrXZiZcOhbGzDrXTDoXNva1wiLFxuICAgIG9wamVjdFByb3BlcnRpZXNIZWFkZXI6IFwiSGFsYWTDs1wiLFxuICAgIHNob3dPYmplY3RQcm9wZXJ0aWVzOiBcIlR1bGFqZG9uc8OhZ29rIG11dGF0w6FzYVwiLFxuICAgIGhpZGVPYmplY3RQcm9wZXJ0aWVzOiBcIlR1bGFqZG9uc8OhZ29rIGVscmVqdMOpc2VcIixcbiAgICBlZGl0U3VydmV5OiBcIkvDqXJkxZHDrXYgc3plcmtlc3p0w6lzZVwiLFxuICAgIGFkZE5ld1BhZ2U6IFwiw5pqIGxhcCBmZWx2w6l0ZWxlXCIsXG4gICAgbW92ZVJpZ2h0OiBcIkfDtnJnZXTDqXMgam9iYnJhXCIsXG4gICAgbW92ZUxlZnQ6IFwiR8O2cmdldMOpcyBiYWxyYVwiLFxuICAgIGRlbGV0ZVBhZ2U6IFwiTGFwIGVsdMOhdm9sw610w6FzYVwiLFxuICAgIGVkaXRQYWdlOiBcIkxhcCBzemVya2VzenTDqXNlXCIsXG4gICAgZWRpdDogXCJTemVya2VzenTDqXNcIixcbiAgICBuZXdQYWdlTmFtZTogXCJsYXBcIixcbiAgICBuZXdRdWVzdGlvbk5hbWU6IFwia8OpcmTDqXNcIixcbiAgICBuZXdQYW5lbE5hbWU6IFwicGFuZWxcIixcbiAgICBuZXdUZXh0SXRlbU5hbWU6IFwic3rDtnZlZ1wiLFxuICAgIHRlc3RTdXJ2ZXk6IFwiUHLDs2JhXCIsXG4gICAgdGVzdFN1cnZleUFnYWluOiBcIlByw7NiYSBpc23DqXRcIixcbiAgICB0ZXN0U3VydmV5V2lkdGg6IFwiS8OpcmTFkcOtdiBzesOpbGVzc8OpZ2U6IFwiLFxuICAgIGVtYmVkU3VydmV5OiBcIkvDqXJkxZHDrXYgYmXDoWd5YXrDoXNhXCIsXG4gICAgdHJhbnNsYXRpb246IFwiRm9yZMOtdMOhc1wiLFxuICAgIHNhdmVTdXJ2ZXk6IFwiS8OpcmTFkcOtdiBtZW50w6lzZVwiLFxuICAgIGRlc2lnbmVyOiBcIkvDqXJkxZHDrXZ0ZXJ2ZXrFkVwiLFxuICAgIGpzb25FZGl0b3I6IFwiSlNPTiBzemVya2VzenTFkVwiLFxuICAgIHVuZG86IFwiTcOpZ3NlXCIsXG4gICAgcmVkbzogXCJJc23DqXRcIixcbiAgICBvcHRpb25zOiBcIkJlw6FsbMOtdMOhc29rXCIsXG4gICAgZ2VuZXJhdGVWYWxpZEpTT046IFwiw4lydsOpbnllcyBKU09OIGdlbmVyw6Fsw6FzYVwiLFxuICAgIGdlbmVyYXRlUmVhZGFibGVKU09OOiBcIk9sdmFzaGF0w7MgSlNPTiBnZW5lcsOhbMOhc2FcIixcbiAgICB0b29sYm94OiBcIkVzemvDtnp0w6FyXCIsXG4gICAgdG9vbGJveEdlbmVyYWxDYXRlZ29yeTogXCLDgWx0YWzDoW5vc1wiLFxuICAgIGRlbFNlbE9iamVjdDogXCJLaWplbMO2bHQgZWxlbSBlbHTDoXZvbMOtdMOhc2FcIixcbiAgICBlZGl0U2VsT2JqZWN0OiBcIktpamVsw7ZsdCBlbGVtIHN6ZXJrZXN6dMOpc2VcIixcbiAgICBjb3JyZWN0SlNPTjogXCJLw6lyZW0gamF2w610c2EgYSBKU09OLXQuXCIsXG4gICAgc3VydmV5UmVzdWx0czogXCJLw6lyZMWRw612IGVyZWRtw6lueWU6IFwiLFxuICAgIHN1cnZleVJlc3VsdHNUYWJsZTogXCJUw6FibGFrw6ludFwiLFxuICAgIHN1cnZleVJlc3VsdHNKc29uOiBcIkpTT04ta8OpbnRcIixcbiAgICByZXN1bHRzVGl0bGU6IFwiS8OpcmTDqXMgY8OtbWVcIixcbiAgICByZXN1bHRzTmFtZTogXCJLw6lyZMOpcyBtZWduZXZlesOpc2VcIixcbiAgICByZXN1bHRzVmFsdWU6IFwiVsOhbGFzeiDDqXJ0w6lrZVwiLFxuICAgIHJlc3VsdHNEaXNwbGF5VmFsdWU6IFwiS2lqZWx6ZXR0IMOpcnTDqWtlXCIsXG4gICAgbW9kaWZpZWQ6IFwiTcOzZG9zw610b3R0XCIsXG4gICAgc2F2aW5nOiBcIk1lbnTDqXMgZm9seWFtYXRiYW5cIixcbiAgICBzYXZlZDogXCJNZW50dmVcIixcbiAgICBzYXZlRXJyb3I6IFwiSGliYSEgQSBzemVya2VzenTFkSDDqXJ0w6lrZSBuZW0ga2Vyw7xsdCBtZW50w6lzcmUuXCIsXG4gICAgdHJhbnNsYXRpb25BZGRMYW5ndWFnZTogXCJWw6FsYXNzem9uIGVneSBueWVsdmV0IGEgZm9yZMOtdMOhc2hvei5cIixcbiAgICB0cmFuc2xhdGlvblNob3dBbGxTdHJpbmdzOiBcIsOWc3N6ZXMgc3rDtnZlZyBtdXRhdMOhc2FcIixcbiAgICB0cmFuc2xhdGlvblNob3dBbGxQYWdlczogXCLDlnNzemVzIGxhcCBtdXRhdMOhc2FcIixcbiAgICB0cmFuc2xhdGlvbk5vU3RyaW5nczogXCJOaW5jcyBmb3Jkw610aGF0w7Mgc3rDtnZlZy4gS8OpcmVtIHbDoWx0b3p0YXNzb24gYSBzesWxcsOpc2kgZmVsdMOpdGVsZWtlbi5cIixcbiAgICB0cmFuc2xhdGlvbkV4cG9ydFRvU0NWQnV0dG9uOiBcIk1lbnTDqXMgQ1NWLWvDqW50XCIsXG4gICAgdHJhbnNsYXRpb25JbXBvcnRGcm9tU0NWQnV0dG9uOiBcIkJldMO2bHTDqXMgQ1NWLWLFkWwuXCIsXG4gICAgdHJhbnNsYXRpb25NZXJnZUxvY2FsZVdpdGhEZWZhdWx0OiBcInswfSDDtnNzemVmxbF6w6lzZSBheiBhbGFww6lydGVsbWV6ZXR0IHN6w7Z2ZWdnZWwuXCIsXG4gICAgYm9sZDogXCJGw6lsa8O2dsOpclwiLFxuICAgIGl0YWxpYzogXCJExZFsdFwiLFxuICAgIHVuZGVybGluZTogXCJBbMOhaMO6em90dFwiLFxuICAgIGZwQWRkUXVlc3Rpb246IFwiS8OpcmTDqXMgZmVsdsOpdGVsZS4uLlwiLFxuICAgIGNvbXBsZXRlZEh0bWxPbkNvbmRpdGlvbkl0ZW1UZXh0OiBcIk11dGF0w6FzIGhhOlwiXG4gIH0sXG4gIC8vUHJvcGVydHkgbmFtZXMgaW4gdGFibGUgaGVhZGVyc1xuICBwZWw6IHtcbiAgICBpc1JlcXVpcmVkOiBcIkvDtnRlbGV6xZE/XCJcbiAgfSxcbiAgLy9Qcm9wZXJ0eSBFZGl0b3JzXG4gIHBlOiB7XG4gICAgYXBwbHk6IFwiQWxrYWxtYXpcIixcbiAgICBvazogXCJPS1wiLFxuICAgIGNhbmNlbDogXCJNw6lnc2VtXCIsXG4gICAgcmVzZXQ6IFwiVmlzc3phw6FsbMOtdMOhc1wiLFxuICAgIGNsb3NlOiBcIkJlesOhcsOhc1wiLFxuICAgIGRlbGV0ZTogXCJFbHTDoXZvbMOtdMOhc1wiLFxuICAgIGFkZE5ldzogXCLDmmogZmVsdsOpdGVsZVwiLFxuICAgIGFkZEl0ZW06IFwiS2F0dGludHNvbiBlZ3kgZWxlbSBmZWx2w6l0ZWzDqWhlei4uLlwiLFxuICAgIGFkZE90aGVyOiBcIkVnecOpYlwiLFxuICAgIGFkZFNlbGVjdEFsbDogXCLDlnNzemVzIGtpamVsw7Zsw6lzZVwiLFxuICAgIGFkZE5vbmU6IFwiU2VtbWlcIixcbiAgICByZW1vdmVBbGw6IFwiw5Zzc3plcyBlbHTDoXZvbMOtdMOhc2FcIixcbiAgICBlZGl0OiBcIlN6ZXJrZXN6dMOpc1wiLFxuICAgIGl0ZW1WYWx1ZUVkaXQ6IFwiTMOhdGhhdMOzIGhhXCIsXG4gICAgZWRpdENob2ljZXM6IFwiTGVoZXTFkXPDqWdlayBzemVya2VzenTDqXNlXCIsXG4gICAgbW92ZTogXCJNb3pnYXTDoXNcIixcbiAgICBlbXB0eTogXCI8w7xyZXM+XCIsXG4gICAgbm90RW1wdHk6IFwiPMOpcnTDqWsgc3plcmtlc3p0w6lzZT5cIixcbiAgICBmYXN0RW50cnk6IFwiR3lvcnMgZmVsdsOpdGVsXCIsXG4gICAgZm9ybUVudHJ5OiBcIkZlbHbDqXRlbCDFsXJsYXBwYWxcIixcbiAgICB0ZXN0U2VydmljZTogXCJTem9sZ8OhbHRhdMOhcyB0ZXN6dGVsw6lzZVwiLFxuICAgIGNvbmRpdGlvblNlbGVjdFF1ZXN0aW9uOiBcIlbDoWxhc3N6b24ga8OpcmTDqXN0Li4uXCIsXG4gICAgY29uZGl0aW9uVmFsdWVRdWVzdGlvblRpdGxlOiBcIkvDqXJlbSBhZGpvbiBtZWcsIHZhZ3kgdsOhbGFzc3pvbiDDqXJ0w6lrZXRcIixcbiAgICBjb25kaXRpb25CdXR0b25BZGQ6IFwiRmVsdsOpdGVsXCIsXG4gICAgY29uZGl0aW9uQnV0dG9uUmVwbGFjZTogXCJDc2VyZVwiLFxuICAgIGNvbmRpdGlvbkhlbHA6XG4gICAgICBcIkvDqXJlbSBhZGpvbiBtZWcgZWd5IGlnYXotaGFtaXMga2lmZWplesOpc3QuIElnYXogdmlzc3phdMOpcsOpc2kgw6lydMOpa2tlbCBrZWxsIHJlbmRlbGtlem5pZSwgaG9neSBhIGvDqXJkw6lzIHZhZ3kgYSBsYXAgbMOhdGhhdMOzIG1hcmFkam9uLiBQw6lsZMOhdWw6IHtxdWVzdGlvbjF9ID0gJ3ZhbHVlMScgb3IgKHtxdWVzdGlvbjJ9ICoge3F1ZXN0aW9uNH0gID4gMjAgYW5kIHtxdWVzdGlvbjN9IDwgNSlcIixcbiAgICBleHByZXNzaW9uSGVscDpcbiAgICAgIFwiS8OpcmVtIGFkam9uIG1lZyBlZ3kga2lmZWplesOpc3QuIEhhc3puw6Fsam9uIGthcGNzb3MgesOhcsOzamVsZWtldCwgaG9neSBlbMOpcmplIGEga8OpcmTDqXNlayBha3R1w6FsaXMgw6lydMOpa8OpdC4gUMOpbGTDoXVsOiAne3F1ZXN0aW9uMX0gKyB7cXVlc3Rpb24yfScsICcoe3ByaWNlfSp7cXVhbnRpdHl9KSAqICgxMDAgLSB7ZGlzY291bnR9KSdcIixcbiAgICBhY2VFZGl0b3JIZWxwOiBcIk55b21qYSBtZWcgYSBjdHJsK3NwYWNlIGJpbGxlbnR5xbFrb21iaW7DoWNpw7N0IGEga2lmZWplesOpcyBiZWZlamV6w6lzw6lyZSB2b25hdGtvesOzIHNlZ8OtdHPDqWfDqXJ0LlwiLFxuICAgIGFjZUVkaXRvclJvd1RpdGxlOiBcIkplbGVubGVnaSBzb3JcIixcbiAgICBhY2VFZGl0b3JQYW5lbFRpdGxlOiBcIkplbGVubGVnaSBwYW5lbFwiLFxuICAgIHNob3dNb3JlOiBcIlRvdsOhYmJpIGluZm9ybcOhY2nDs8OpcnQga8OpcmVtIHRla2ludHNlIG1lZyBhIGRva3VtZW50w6FjacOzdFwiLFxuICAgIGNvbmRpdGlvblNob3dNb3JlVXJsOlxuICAgICAgXCJodHRwczovL3N1cnZleWpzLmlvL0RvY3VtZW50YXRpb24vTGlicmFyeVBhcmFtZXRlcj9pZD1RdWVzdGlvbiZwYXJhbWV0ZXI9dmlzaWJsZUlmXCIsXG4gICAgYXNzaXN0YW50VGl0bGU6IFwiRWzDqXJoZXTFkSBrw6lyZMOpc2VrOlwiLFxuICAgIGNlbGxzRW1wdHlSb3dzQ29sdW1uczogXCJMZWdhbMOhYmIgZWd5IHNvcm5hayB2YWd5IGVneSBvc3psb3BuYWsgbGVubmllIGtlbGxcIixcblxuICAgIHByb3BlcnR5SXNFbXB0eTogXCJLw6lyZW0gYWRqb24gbWVnIGVneSDDqXJ0w6lrZXRcIixcbiAgICB2YWx1ZTogXCLDiXJ0w6lrXCIsXG4gICAgdGV4dDogXCJTesO2dmVnXCIsXG4gICAgcm93aWQ6IFwiU29yIElEXCIsXG4gICAgaW1hZ2VMaW5rOiBcIkvDqXAgVVJMXCIsXG4gICAgY29sdW1uRWRpdDogXCJPc3psb3Agc3plcmtlc3p0w6lzZTogezB9XCIsXG4gICAgaXRlbUVkaXQ6IFwiRWxlbSBzemVya2VzenTDqXNlOiB7MH1cIixcblxuICAgIHVybDogXCJVUkxcIixcbiAgICBwYXRoOiBcIsOadHZvbmFsXCIsXG4gICAgdmFsdWVOYW1lOiBcIsOJcnTDqWsgbWVnbmV2ZXrDqXNlXCIsXG4gICAgdGl0bGVOYW1lOiBcIkPDrW0gbWVnbmV2ZXrDqXNlXCIsXG5cbiAgICBoYXNPdGhlcjogXCJSZW5kZWxrZXppayBlZ3nDqWIgw6lydMOpa2tlbFwiLFxuICAgIG90aGVyVGV4dDogXCJBeiBlZ3nDqWIgw6lydMOpayBzesO2dmVnZVwiLFxuICAgIG5hbWU6IFwiTWVnbmV2ZXrDqXNcIixcbiAgICB0aXRsZTogXCJDw61tXCIsXG4gICAgY2VsbFR5cGU6IFwiQ2VsbGF0w61wdXNcIixcbiAgICBjb2xDb3VudDogXCJPc3psb3BvayBzesOhbWFcIixcbiAgICBjaG9pY2VzT3JkZXI6IFwiVsOhbGFzc3phIGtpIGEgbGVoZXTFkXPDqWdldCByZW5kZXrDqXPDqXRcIixcbiAgICB2aXNpYmxlOiBcIkzDoXRoYXTDsz9cIixcbiAgICBpc1JlcXVpcmVkOiBcIkvDtnRlbGV6xZE/XCIsXG4gICAgc3RhcnRXaXRoTmV3TGluZTogXCLDmmogc29yYmFuIGtlemTFkWRpaz9cIixcbiAgICByb3dzOiBcIlNvcm9rIHN6w6FtYVwiLFxuICAgIHBsYWNlSG9sZGVyOiBcIk1lesWRIGtpdMO2bHTFkXN6w7Z2ZWdlXCIsXG4gICAgc2hvd1ByZXZpZXc6IFwiQSBrw6lwIGVsxZFuw6l6ZXRlIGzDoXRoYXTDsz9cIixcbiAgICBzdG9yZURhdGFBc1RleHQ6IFwiQXogw6FsbG9tw6FueSB0YXJ0YWxtw6F0IHTDoXJvbGphIGEgSlNPTi1iZW4sIHN6w7Z2ZWdrw6ludFwiLFxuICAgIG1heFNpemU6IFwiTWF4aW3DoWxpcyDDoWxsb23DoW55bcOpcmV0IGJ5dGUtYmFuXCIsXG4gICAgaW1hZ2VIZWlnaHQ6IFwiS8OpcCBtYWdhc3PDoWdhXCIsXG4gICAgaW1hZ2VXaWR0aDogXCJLw6lwIHN6w6lsZXNzw6lnZVwiLFxuICAgIHJvd0NvdW50OiBcIlNvcm9rIHN6w6FtYVwiLFxuICAgIGNvbHVtbkxheW91dDogXCJPc3psb3BvayBlbHJlbmRlesOpc2VcIixcbiAgICBhZGRSb3dMb2NhdGlvbjogXCInw5pqIHNvciBmZWx2w6l0ZWxlJyBnb21iIGVsaGVseWV6w6lzZVwiLFxuICAgIGFkZFJvd1RleHQ6IFwiJ8OaaiBzb3IgZmVsdsOpdGVsZScgZ29tYiBzesO2dmVnZVwiLFxuICAgIHJlbW92ZVJvd1RleHQ6IFwiJ1NvciBlbHTDoXZvbMOtdMOhc2EnIGdvbWIgc3rDtnZlZ2VcIixcbiAgICByYXRlTWluOiBcIkxlZ2tpc2ViYiBzem9yesOzXCIsXG4gICAgcmF0ZU1heDogXCJMZWduYWd5b2JiIHN6b3J6w7NcIixcbiAgICByYXRlU3RlcDogXCJTem9yesOzIGzDqXDDqXNrw7Z6ZVwiLFxuICAgIG1pblJhdGVEZXNjcmlwdGlvbjogXCJMZWdraXNlYmIgc3pvcnrDsyBsZcOtcsOhc2FcIixcbiAgICBtYXhSYXRlRGVzY3JpcHRpb246IFwiTGVnbmFneW9iYiBzem9yesOzIGxlw61yw6FzYVwiLFxuICAgIGlucHV0VHlwZTogXCJNZXrFkSB0w61wdXNhXCIsXG4gICAgb3B0aW9uc0NhcHRpb246IFwiQmXDoWxsw610w6Fzb2sgZmVsaXJhdGFcIixcbiAgICBkZWZhdWx0VmFsdWU6IFwiQWxhcMOpcnRlbG1lemV0dCDDqXJ0w6lrXCIsXG4gICAgY2VsbHNEZWZhdWx0Um93OiBcIkNlbGzDoWsgYWxhcMOpcnRlbG1lemV0dCBzesO2dmVnZVwiLFxuXG4gICAgc3VydmV5RWRpdG9yVGl0bGU6IFwiS8OpcmTFkcOtdiBiZcOhbGzDrXTDoXNhaW5hayBtw7Nkb3PDrXTDoXNhXCIsXG4gICAgcUVkaXRvclRpdGxlOiBcIlN6ZXJrZXN6dMOpczogezB9XCIsXG5cbiAgICBtYXhMZW5ndGg6IFwiTWF4aW3DoWxpcyBob3NzelwiLFxuXG4gICAgLy9zdXJ2ZXlcbiAgICBzaG93VGl0bGU6IFwiQ8OtbSBtdXRhdMOhc2EvZWxyZWp0w6lzZVwiLFxuICAgIGxvY2FsZTogXCJBbGFww6lydGVsbWV6ZXR0IG55ZWx2XCIsXG4gICAgbW9kZTogXCJNw7NkIChzemVya2VzenTDqXMvbWVndGVraW50w6lzKVwiLFxuICAgIGNsZWFySW52aXNpYmxlVmFsdWVzOiBcIk5lbWzDoXRoYXTDsyDDqXJ0w6lrZWsgdMO2cmzDqXNlXCIsXG4gICAgY29va2llTmFtZTogXCJTw7x0aSBtZWduZXZlesOpc2UgKGEga8OpcmTFkcOtdiBjc2FrIGVneXN6ZXIga2l0w7ZsdGhldMWRKVwiLFxuICAgIHNlbmRSZXN1bHRPblBhZ2VOZXh0OiBcIkvDqXJkxZHDrXYgw6lydMOpa8OpbmVrIGvDvGxkw6lzZSBhIGvDtnZldGtlesWRIGxhcHJhIGzDqXDDqXNrb3JcIixcbiAgICBzdG9yZU90aGVyc0FzQ29tbWVudDogXCJBeiAnZWd5w6liJyBtZXrFkSDDqXJ0w6lrw6luZWsgdMOhcm9sw6FzYSBrw7xsw7ZuIG1lesWRYmVuXCIsXG4gICAgc2hvd1BhZ2VUaXRsZXM6IFwiTGFwb2sgY8OtbcOpbmVrIG11dGF0w6FzYVwiLFxuICAgIHNob3dQYWdlTnVtYmVyczogXCJMYXBvayBzesOhbcOhbmFrIG11dGF0w6FzYVwiLFxuICAgIHBhZ2VQcmV2VGV4dDogXCInRWzFkXrFkSBsYXAnIGdvbWIgZmVsaXJhdGFcIixcbiAgICBwYWdlTmV4dFRleHQ6IFwiJ0vDtnZldGtlesWRIGxhcCcgZ29tYiBmZWxpcmF0YVwiLFxuICAgIGNvbXBsZXRlVGV4dDogXCInQmVmZWplesOpcycgZ29tYiBmZWxpcmF0YVwiLFxuICAgIHN0YXJ0U3VydmV5VGV4dDogXCInS2V6ZMOpcycgZ29tYiBmZWxpcmF0YVwiLFxuICAgIHNob3dOYXZpZ2F0aW9uQnV0dG9uczogXCJOYXZpZ8OhY2nDs3MgZ29tYm9rIG11dGF0w6FzYSAoYWxhcMOpcnRlbG1lemV0dCBuYXZpZ8OhY2nDsylcIixcbiAgICBzaG93UHJldkJ1dHRvbjogXCInRWzFkXrFkSBsYXAnIGdvbWIgbXV0YXTDoXNhXCIsXG4gICAgZmlyc3RQYWdlSXNTdGFydGVkOiBcIkF6IG1lZ2tlemRldHQgbGFwIGEga8OpcmTFkcOtdiBlbHPFkSBvbGRhbGEuXCIsXG4gICAgc2hvd0NvbXBsZXRlZFBhZ2U6IFwiQmVmZWplesWRIHN6w7Z2ZWcgbXV0YXTDoXNhIGEga8OpcmTFkcOtdiBiZWZlamV6w6lzZWtvclwiLFxuICAgIGdvTmV4dFBhZ2VBdXRvbWF0aWM6XG4gICAgICBcIk1pbmRlbiBrw6lyZMOpcyBtZWd2w6FsYXN6b2zDoXNha29yIGF1dG9tYXRpa3VzYW4gYSBrw7Z2ZXRrZXrFkSBsYXByYSBsw6lww6lzXCIsXG4gICAgc2hvd1Byb2dyZXNzQmFyOiBcIkVsxZFyZWhhbGFkw6FzLW11dGF0w7MgbWVnamVsZW7DrXTDqXNlXCIsXG4gICAgcXVlc3Rpb25UaXRsZUxvY2F0aW9uOiBcIkvDqXJkw6lzIGPDrW3DqW5layBoZWx5ZVwiLFxuICAgIHJlcXVpcmVkVGV4dDogXCJLw7Z0ZWxlesWRIHN6aW1iw7NsdW1cIixcbiAgICBxdWVzdGlvblN0YXJ0SW5kZXg6IFwiS8OpcmTDqXMga2V6ZMWRaW5kZXhlICgxLCAyIHZhZ3kgJ0EnLCAnYScpXCIsXG4gICAgc2hvd1F1ZXN0aW9uTnVtYmVyczogXCJLw6lyZMOpcyBzesOhbcOhbmFrIG11dGF0w6FzYVwiLFxuICAgIHF1ZXN0aW9uVGl0bGVUZW1wbGF0ZTpcbiAgICAgIFwiS8OpcmTDqXMgY8OtbcOpbmVrIHNhYmxvbmphOiAne3N6w6FtfS4ge2vDtnRlbGV6xZF9IHtjw61tfSdcIixcbiAgICBxdWVzdGlvbkVycm9yTG9jYXRpb246IFwiS8OpcmTDqXMgaGliYcO8emVuZXTDqW5layBoZWx5emV0ZVwiLFxuICAgIGZvY3VzRmlyc3RRdWVzdGlvbkF1dG9tYXRpYzogXCJFbHPFkSBrw6lyZMOpcyBhdXRvbWF0aWt1cyBraWplbMO2bMOpc2UgbGFwdsOhbHTDoXMgZXNldMOpblwiLFxuICAgIHF1ZXN0aW9uc09yZGVyOiBcIkVsZW1layByZW5kZXrDqXNlIGEgbGFwb25cIixcbiAgICBtYXhUaW1lVG9GaW5pc2g6IFwiQSBrw6lyZMWRw612IGtpdMO2bHTDqXPDqXJlIGZvcmTDrXRoYXTDsyBtYXhpbcOhbGlzIGlkxZFcIixcbiAgICBtYXhUaW1lVG9GaW5pc2hQYWdlOiBcIkVneSBsYXAga2l0w7ZsdMOpc8OpcmUgZm9yZMOtdGhhdMOzIG1heGltw6FsaXMgaWTFkVwiLFxuICAgIHNob3dUaW1lclBhbmVsOiBcIklkxZF6w610w7MgbXV0YXTDoXNhXCIsXG4gICAgc2hvd1RpbWVyUGFuZWxNb2RlOiBcIklkxZF6w610w7MgbcOzZGphXCIsXG4gICAgcmVuZGVyTW9kZTogXCJNZWdqZWxlbsOtdMOpcyBtw7NkamFcIixcbiAgICBhbGxvd0FkZFBhbmVsOiBcIsOaaiBwYW5lbCBob3p6w6FhZMOhc8OhbmFrIGVuZ2Vkw6lseWV6w6lzZVwiLFxuICAgIGFsbG93UmVtb3ZlUGFuZWw6IFwiUGFuZWwgZWx0w6F2b2zDrXTDoXPDoW5hayBlbmdlZMOpbHllesOpc2VcIixcbiAgICBwYW5lbEFkZFRleHQ6IFwiJ8OaaiBwYW5lbCBmZWx2w6l0ZWxlJyBnb21iIHN6w7Z2ZWdlXCIsXG4gICAgcGFuZWxSZW1vdmVUZXh0OiBcIidQYW5lbCBlbHTDoXZvbMOtdMOhc2EnIGdvbWIgc3rDtnZlZ2VcIixcbiAgICBpc1NpbmdsZVBhZ2U6IFwiTWluZGVuIGVsZW0gbXV0YXTDoXNhIGVneSBsYXBvblwiLFxuICAgIGh0bWw6IFwiSFRNTFwiLFxuICAgIGV4cHJlc3Npb246IFwiS2lmZWplesOpc1wiLFxuXG4gICAgbWluVmFsdWU6IFwiTWluaW3DoWxpcyDDqXJ0w6lrXCIsXG4gICAgbWF4VmFsdWU6IFwiTWF4aW3DoWxpcyDDqXJ0w6lrXCIsXG4gICAgbWluTGVuZ3RoOiBcIk1pbmltw6FsaXMgaG9zc3pcIixcbiAgICBhbGxvd0RpZ2l0czogXCJTesOhbWplZ3llayBlbmdlZMOpbHllesOpc2VcIixcbiAgICBtaW5Db3VudDogXCJNaW5pbcOhbGlzIGRhcmFic3rDoW1cIixcbiAgICBtYXhDb3VudDogXCJNYXhpbcOhbGlzIGRhcmFic3rDoW1cIixcbiAgICByZWdleDogXCJSZWd1bMOhcmlzIGtpZmVqZXrDqXNcIixcblxuICAgIHRhYnM6IHtcbiAgICAgIGdlbmVyYWw6IFwiw4FsdGFsw6Fub3NcIixcbiAgICAgIGZpbGVPcHRpb25zOiBcIkJlw6FsbMOtdMOhc29rXCIsXG4gICAgICBodG1sOiBcIkhUTUwgc3plcmtlc3p0xZFcIixcbiAgICAgIGNvbHVtbnM6IFwiT3N6bG9wb2tcIixcbiAgICAgIHJvd3M6IFwiU29yb2tcIixcbiAgICAgIGNob2ljZXM6IFwiTGVoZXTFkXPDqWdla1wiLFxuICAgICAgaXRlbXM6IFwiRWxlbWVrXCIsXG4gICAgICB2aXNpYmxlSWY6IFwiTMOhdGhhdMOzIGhhXCIsXG4gICAgICBlbmFibGVJZjogXCJFbmdlZMOpbHllenZlIGhhXCIsXG4gICAgICByZXF1aXJlZElmOiBcIkvDtnRlbGV6xZEgaGFcIixcbiAgICAgIHJhdGVWYWx1ZXM6IFwiU3pvcnrDsyDDqXJ0w6lrZWtcIixcbiAgICAgIGNob2ljZXNCeVVybDogXCJMZWhldMWRc8OpZ2VrIGEgd2VicsWRbFwiLFxuICAgICAgbWF0cml4Q2hvaWNlczogXCJBbGFww6lydGVsbWV6ZXR0IGxlaGV0xZFzw6lnZWtcIixcbiAgICAgIG11bHRpcGxlVGV4dEl0ZW1zOiBcIlN6w7Z2ZWdtZXrFkWtcIixcbiAgICAgIHZhbGlkYXRvcnM6IFwiVmFsaWTDoXRvcm9rXCIsXG4gICAgICBuYXZpZ2F0aW9uOiBcIk5hdmlnw6FjacOzXCIsXG4gICAgICBxdWVzdGlvbjogXCJLw6lyZMOpc1wiLFxuICAgICAgY29tcGxldGVkSHRtbDogXCJCZWZlamV6xZEgc3rDtnZlZyAoSFRNTClcIixcbiAgICAgIGNvbXBsZXRlZEh0bWxPbkNvbmRpdGlvbjogXCJCZWZlanrFkSBzesO2dmVnIG11dGF0w6Fzw6FuYWsgZmVsdMOpdGVsZVwiLFxuICAgICAgbG9hZGluZ0h0bWw6IFwiQmV0w7ZsdMWRIHN6w7Z2ZWcgKEhUTUwpXCIsXG4gICAgICB0aW1lcjogXCJJZMWResOtdMWRL0t2w616XCIsXG4gICAgICB0cmlnZ2VyczogXCJFc2Vtw6lueXZlesOpcmzFkWtcIixcbiAgICAgIHRlbXBsYXRlVGl0bGU6IFwiU2FibG9uIGPDrW1lXCJcbiAgICB9LFxuICAgIGVkaXRQcm9wZXJ0eTogXCJUdWxhamRvbnPDoWcgc3plcmtlc3p0w6lzZSAnezB9J1wiLFxuICAgIGl0ZW1zOiBcIlsgRWxlbWVrOiB7MH0gXVwiLFxuXG4gICAgZW50ZXJOZXdWYWx1ZTogXCJLw6lyZW0sIGFkamEgbWVnIGF6IMOpcnTDqWtldC5cIixcbiAgICBub3F1ZXN0aW9uczogXCJOaW5jc2VuZWsga8OpcmTDqXNlayBhIGvDqXJkxZHDrXZiZW4uXCIsXG4gICAgY3JlYXRldHJpZ2dlcjogXCJLw6lyZW0gaG96em9uIGzDqXRyZSBlZ3kgZXNlbcOpbnl2ZXrDqXJsxZF0XCIsXG4gICAgdHJpZ2dlck9uOiBcIkJlIFwiLFxuICAgIHRyaWdnZXJNYWtlUGFnZXNWaXNpYmxlOiBcIkxhcG9rIGzDoXRoYXTDs3bDoSB0w6l0ZWxlOlwiLFxuICAgIHRyaWdnZXJNYWtlUXVlc3Rpb25zVmlzaWJsZTogXCJFbGVtZWsgbMOhdGhhdMOzdsOhIHTDqXRlbGU6XCIsXG4gICAgdHJpZ2dlckNvbXBsZXRlVGV4dDogXCJLw6lyZMWRw612IGJlZmVqZXrDqXNlLCBoYSBzaWtlcmVzLlwiLFxuICAgIHRyaWdnZXJOb3RTZXQ6IFwiTmluY3MgZXNlbcOpbnlrZXplbMWRIGJlw6FsbMOtdHZhXCIsXG4gICAgdHJpZ2dlclJ1bklmOiBcIkZ1dHRhdMOhcyBoYVwiLFxuICAgIHRyaWdnZXJTZXRUb05hbWU6IFwiQSBrw7Z2ZXRrZXrFkSDDqXJ0w6lrw6luZWsgY3NlcsOpamU6IFwiLFxuICAgIHRyaWdnZXJGcm9tTmFtZTogXCJBIGvDtnZldGtlesWRIMOpcnTDqWvDqW5layBtw6Fzb2zDoXNhOiBcIixcbiAgICB0cmlnZ2VyUnVuRXhwcmVzc2lvbjogXCJBIGvDtnZldGtlesWRIGtpZmVqZXrDqXMgZnV0dGF0w6FzYTpcIixcbiAgICB0cmlnZ2VyU2V0VmFsdWU6IFwiZXJyZTogXCIsXG4gICAgdHJpZ2dlcklzVmFyaWFibGU6IFwiTmUgbWVudHNlIGF6IGVyZWRtw6lueXQgYSBrw6lyZMWRw612IGVyZWRtw6luecOpYmUuXCJcbiAgfSxcbiAgLy9Qcm9wZXJ0eSB2YWx1ZXNcbiAgcHY6IHtcbiAgICB0cnVlOiBcImlnYXpcIixcbiAgICBmYWxzZTogXCJoYW1pc1wiLFxuICAgIGluaGVyaXQ6IFwiw7Zyw7ZrbMO2dHRcIixcbiAgICBzaG93OiBcIm11dGF0w6FzXCIsXG4gICAgaGlkZTogXCJlbHJlanTDqXNcIixcbiAgICBkZWZhdWx0OiBcImFsYXDDqXJ0ZWxtZXpldHRcIixcbiAgICBpbml0aWFsOiBcImtlemRldGlcIixcbiAgICByYW5kb206IFwidsOpbGV0bGVuXCIsXG4gICAgY29sbGFwc2VkOiBcImNzdWtvdHRcIixcbiAgICBleHBhbmRlZDogXCJueWl0b3R0XCIsXG4gICAgbm9uZTogXCJzZW1taVwiLFxuICAgIGFzYzogXCJuw7Z2ZWt2xZFcIixcbiAgICBkZXNjOiBcImNzw7Zra2VuxZFcIixcbiAgICBpbmRldGVybWluYXRlOiBcImhhdMOhcm96YXRsYW5cIixcbiAgICBkZWNpbWFsOiBcImRlaW3DoWxpc1wiLFxuICAgIGN1cnJlbmN5OiBcInDDqW56XCIsXG4gICAgcGVyY2VudDogXCJzesOhemFsw6lrXCIsXG4gICAgZmlyc3RFeHBhbmRlZDogXCJlbHPFkSBueWl0dmFcIixcbiAgICBvZmY6IFwia2lcIixcbiAgICBvblBhbmVsOiBcImEgcGFuZWxlblwiLFxuICAgIG9uU3VydmV5OiBcImEga8OpcmTFkcOtdmVuXCIsXG4gICAgbGlzdDogXCJsaXN0YVwiLFxuICAgIHByb2dyZXNzVG9wOiBcImZlbMO8bFwiLFxuICAgIHByb2dyZXNzQm90dG9tOiBcImFsdWxcIixcbiAgICBwcm9ncmVzc1RvcEJvdHRvbTogXCJhbMO8bCDDqXMgZmVsw7xsXCIsXG4gICAgaG9yaXpvbnRhbDogXCJob3Jpem9udMOhbGlzXCIsXG4gICAgdmVydGljYWw6IFwidmVydGlrw6FsaXNcIixcbiAgICB0b3A6IFwiZmVudFwiLFxuICAgIGJvdHRvbTogXCJsZW50XCIsXG4gICAgdG9wQm90dG9tOiBcImZlbnQgw6lzIGxlbnRcIixcbiAgICBsZWZ0OiBcImJhbFwiLFxuICAgIGNvbG9yOiBcInN6w61uXCIsXG4gICAgZGF0ZTogXCJkw6F0dW1cIixcbiAgICBkYXRldGltZTogXCJkw6F0dW0gw6lzIGlkxZFcIixcbiAgICBcImRhdGV0aW1lLWxvY2FsXCI6IFwiaGVseWkgZMOhdHVtIMOpcyBpZMWRXCIsXG4gICAgZW1haWw6IFwiZW1haWxcIixcbiAgICBtb250aDogXCJow7NuYXBcIixcbiAgICBudW1iZXI6IFwic3rDoW1cIixcbiAgICBwYXNzd29yZDogXCJqZWxzesOzXCIsXG4gICAgcmFuZ2U6IFwiaW50ZXJ2YWxsdW1cIixcbiAgICB0ZWw6IFwidGVsZWZvblwiLFxuICAgIHRleHQ6IFwic3rDtnZlZ1wiLFxuICAgIHRpbWU6IFwiaWTFkVwiLFxuICAgIHVybDogXCJVUkxcIixcbiAgICB3ZWVrOiBcImjDqXRcIixcbiAgICBoaWRkZW46IFwicmVqdGV0dFwiLFxuICAgIG9uOiBcImJlXCIsXG4gICAgb25QYWdlOiBcImEgbGFwb25cIixcbiAgICBlZGl0OiBcInN6ZXJrZXN6dMOpc1wiLFxuICAgIGRpc3BsYXk6IFwibXV0YXTDoXNcIixcbiAgICBvbkNvbXBsZXRlOiBcImJlZmVqZXrDqXNrb3JcIixcbiAgICBvbkhpZGRlbjogXCJlbHTFsW7DqXNrb3JcIixcbiAgICBhbGw6IFwiw7Zzc3plc1wiLFxuICAgIHBhZ2U6IFwibGFwXCIsXG4gICAgc3VydmV5OiBcImvDqXJkxZHDrXZcIixcbiAgICBvbk5leHRQYWdlOiBcImEga8O2dmV0a2V6xZEgbGFwcmEgbMOpcMOpc2tvclwiLFxuICAgIG9uVmFsdWVDaGFuZ2VkOiBcImF6IMOpcnTDqWsgdsOhbHRvesOhc2Frb3JcIlxuICB9LFxuICAvL09wZXJhdG9yc1xuICBvcDoge1xuICAgIGVtcHR5OiBcIsO8cmVzXCIsXG4gICAgbm90ZW1wdHk6IFwibmVtIMO8cmVzXCIsXG4gICAgZXF1YWw6IFwibWVnZWd5ZXppa1wiLFxuICAgIG5vdGVxdWFsOiBcIm5lbSBlZ3llemlrIG1lZ1wiLFxuICAgIGNvbnRhaW5zOiBcInRhcnRhbG1henphXCIsXG4gICAgbm90Y29udGFpbnM6IFwibmVtIHRhcnRhbG1henphXCIsXG4gICAgZ3JlYXRlcjogXCJuYWd5b2JiIG1pbnRcIixcbiAgICBsZXNzOiBcImtpc2ViYiBtaW50XCIsXG4gICAgZ3JlYXRlcm9yZXF1YWw6IFwibmFneW9iYiB2YWd5IGVneWVubMWRXCIsXG4gICAgbGVzc29yZXF1YWw6IFwia2lzZWJiIHZhZ3kgZWd5ZW5sxZFcIlxuICB9LFxuICAvL0VtYmVkIHdpbmRvd1xuICBldzoge1xuICAgIGFuZ3VsYXI6IFwiQW5ndWxhciB2ZXJ6acOzIGhhc3puw6FsYXRhXCIsXG4gICAganF1ZXJ5OiBcImpRdWVyeSB2ZXJ6acOzIGhhc3puw6FsYXRhXCIsXG4gICAga25vY2tvdXQ6IFwiS25vY2tvdXQgdmVyemnDsyBoYXN6bsOhbGF0YVwiLFxuICAgIHJlYWN0OiBcIlJlYWN0IHZlcnppw7MgaGFzem7DoWxhdGFcIixcbiAgICB2dWU6IFwiVnVlIHZlcnppw7MgaGFzem7DoWxhdGFcIixcbiAgICBib290c3RyYXA6IFwiSGFzem7DoWxhdCBCb290c3RyYXAgZnJhbWV3b3Jra2VsXCIsXG4gICAgc3RhbmRhcmQ6IFwiSGFzem7DoWxhdCBCb290c3RyYXAgZnJhbWV3b3JrIG7DqWxrw7xsXCIsXG4gICAgc2hvd09uUGFnZTogXCJLw6lyZMWRw612IG11dGF0w6FzYSBhIGxhcG9uXCIsXG4gICAgc2hvd0luV2luZG93OiBcIkvDqXJkxZHDrXYgbXV0YXTDoXNhIGVneSBhYmxha2JhblwiLFxuICAgIGxvYWRGcm9tU2VydmVyOiBcIkvDqXJkxZHDrXYgSlNPTiBiZXTDtmx0w6lzZSBhIHN6ZXJ2ZXJyxZFsXCIsXG4gICAgdGl0bGVTY3JpcHQ6IFwiU3prcmlwdGVrIMOpcyBzdMOtbHVzbGFwb2tcIixcbiAgICB0aXRsZUh0bWw6IFwiSFRNTFwiLFxuICAgIHRpdGxlSmF2YVNjcmlwdDogXCJKYXZhU2NyaXB0XCJcbiAgfSxcbiAgLy9UZXN0IFN1cnZleVxuICB0czoge1xuICAgIHNlbGVjdFBhZ2U6IFwiVsOhbGFzc3phIGtpIGEgdGVzenRlbG5pIGvDrXbDoW50IGxhcG90OlwiLFxuICAgIHNob3dJbnZpc2libGVFbGVtZW50czogXCJOZW1sw6F0aGF0w7MgZWxlbWVrIG1lZ2plbG7DrXTDqXNlXCJcbiAgfSxcbiAgdmFsaWRhdG9yczoge1xuICAgIGFuc3dlcmNvdW50dmFsaWRhdG9yOiBcInbDoWxhc3pvayBzesOhbWFcIixcbiAgICBlbWFpbHZhbGlkYXRvcjogXCJlLW1haWxcIixcbiAgICBleHByZXNzaW9udmFsaWRhdG9yOiBcImtpZmVqZXrDqXNcIixcbiAgICBudW1lcmljdmFsaWRhdG9yOiBcInN6w6FtXCIsXG4gICAgcmVnZXh2YWxpZGF0b3I6IFwicmVndWzDoXJpcyBraWZlamV6w6lzXCIsXG4gICAgdGV4dHZhbGlkYXRvcjogXCJzesO2dmVnXCJcbiAgfSxcbiAgdHJpZ2dlcnM6IHtcbiAgICBjb21wbGV0ZXRyaWdnZXI6IFwia8OpcmTFkcOtdiBiZWZlamV6w6lzZVwiLFxuICAgIHNldHZhbHVldHJpZ2dlcjogXCLDqXJ0w6lrIGJlw6FsbMOtdMOhc2FcIixcbiAgICBjb3B5dmFsdWV0cmlnZ2VyOiBcIsOpcnTDqWsgbcOhc29sw6FzYVwiLFxuICAgIHJ1bmV4cHJlc3Npb250cmlnZ2VyOiBcImtpZmVqZXrDqXMgZnV0dGF0w6FzYVwiLFxuICAgIHZpc2libGV0cmlnZ2VyOiBcImzDoXRoYXTDs3PDoWcgbWVndsOhbHRvenRhdMOhc2EgKG3DoXIgbmluY3MgaGFzem7DoWxhdGJhbilcIlxuICB9LFxuICAvL1Byb3BlcnRpZXNcbiAgcDoge1xuICAgIG5hbWU6IFwiTWVnbmV2ZXrDqXNcIixcbiAgICB0aXRsZToge1xuICAgICAgbmFtZTogXCJDw61tXCIsXG4gICAgICB0aXRsZTogXCJIYWd5amEgw7xyZXNlbiwgaGEgbWVnZWd5ZXppayBhICdNZWduZXZlesOpcyctZWxcIlxuICAgIH0sXG5cbiAgICBuYXZpZ2F0aW9uQnV0dG9uc1Zpc2liaWxpdHk6IFwiTmF2aWfDoWNpw7NzIGdvbWJvayBsw6F0aGF0w7Nzw6FnYVwiLFxuICAgIHF1ZXN0aW9uc09yZGVyOiBcIkvDqXJkw6lzZWsgcmVuZGV6w6lzZVwiLFxuICAgIG1heFRpbWVUb0ZpbmlzaDogXCJLaXTDtmx0w6lzZSBmb3Jkw610aGF0w7MgbWF4aW3DoWxpcyBpZMWRXCIsXG5cbiAgICB2aXNpYmxlOiBcIkzDoXRoYXTDs1wiLFxuICAgIHZpc2libGVJZjogXCJMw6F0aGF0w7MgaGFcIixcbiAgICBxdWVzdGlvblRpdGxlTG9jYXRpb246IFwiS8OpcmTDqXMgY8OtbcOpbmVrIGVsaGVseWV6w6lzZVwiLFxuICAgIGRlc2NyaXB0aW9uOiBcIkxlw61yw6FzXCIsXG4gICAgc3RhdGU6IFwiw4FsbGFwb3RcIixcbiAgICBpc1JlcXVpcmVkOiBcIkvDtnRlbGV6xZFcIixcbiAgICByZXF1aXJlZElmOiBcIkvDtnRlbGV6xZEgaGFcIixcbiAgICBpbmRlbnQ6IFwiQmVrZXpkw6lzXCIsXG4gICAgcmVxdWlyZWRFcnJvclRleHQ6IFwiS8O2dGVsZXrFkSBoaWJhw7x6ZW5ldFwiLFxuICAgIHN0YXJ0V2l0aE5ld0xpbmU6IFwiw5pqIHNvcmJhbiBrZXpkxZFkaWtcIixcbiAgICBpbm5lckluZGVudDogXCJCZWxzxZEgYmVrZXpkw6lzXCIsXG4gICAgcGFnZTogXCJMYXBcIixcblxuICAgIHdpZHRoOiBcIlN6w6lsZXNzw6lnXCIsXG5cbiAgICBjb21tZW50VGV4dDogXCJNZWdqZWd5esOpcyBzesO2dmVnZVwiLFxuICAgIHZhbHVlTmFtZTogXCLDiXJ0w6lrIG1lZ25ldmV6w6lzZVwiLFxuICAgIGVuYWJsZUlmOiBcIkVuZ2Vkw6lseWV6dmUgaGFcIixcbiAgICBkZWZhdWx0VmFsdWU6IFwiQWxhcMOpcnRlbG1lemV0dCDDqXJ0w6lrXCIsXG4gICAgY29ycmVjdEFuc3dlcjogXCJIZWx5ZXMgw6lydMOpa1wiLFxuICAgIHJlYWRPbmx5OiBcIkNzYWsgb2x2YXNoYXTDs1wiLFxuICAgIHZhbGlkYXRvcnM6IFwiVmFsaWTDoXRvcm9rXCIsXG4gICAgdGl0bGVMb2NhdGlvbjogXCJDw61tIGVsaGVseWV6w6lzZVwiLFxuXG4gICAgaGFzQ29tbWVudDogXCJWYW4gbWVnamVneXrDqXNcIixcbiAgICBoYXNPdGhlcjogXCJWYW4gJ2VnecOpYidcIixcbiAgICBjaG9pY2VzOiBcIkxlaGV0xZFzw6lnZWtcIixcbiAgICBjaG9pY2VzT3JkZXI6IFwiTGVoZXTFkXPDqWdlayByZW5kZXrDqXNlXCIsXG4gICAgY2hvaWNlc0J5VXJsOiBcIkxlaGV0xZFzw6lnZWsgYSB3ZWJyxZFsXCIsXG4gICAgb3RoZXJUZXh0OiBcIidFZ3nDqWInIHN6w7Z2ZWdcIixcbiAgICBvdGhlckVycm9yVGV4dDogXCInRWd5w6liJyBoaWJhw7x6ZW5ldFwiLFxuICAgIHN0b3JlT3RoZXJzQXNDb21tZW50OiBcIidFZ3nDqWInIHTDoXJvbMOhc2EgbWVnamVneXrDqXNrw6ludFwiLFxuXG4gICAgbGFiZWw6IFwiQ2lta2VcIixcbiAgICBzaG93VGl0bGU6IFwiQ8OtbSBtdXRhdMOhc2FcIixcbiAgICB2YWx1ZVRydWU6IFwiw4lydMOpayBpZ2F6XCIsXG4gICAgdmFsdWVGYWxzZTogXCLDiXJ0w6lrIGhhbWlzXCIsXG5cbiAgICBjb2xzOiBcIk9zemxvcG9rXCIsXG4gICAgcm93czogXCJTb3Jva1wiLFxuICAgIHBsYWNlSG9sZGVyOiBcIkhlbHlraXTDtmx0xZFcIixcblxuICAgIG9wdGlvbnNDYXB0aW9uOiBcIidCZcOhbGzDrXTDoXNvaycgZmVsaXJhdGFcIixcblxuICAgIGV4cHJlc3Npb246IFwiS2lmZWplesOpc1wiLFxuICAgIGZvcm1hdDogXCJGb3Jtw6F0dW1cIixcbiAgICBkaXNwbGF5U3R5bGU6IFwiTWVnamVsZW7DrXTDqXMgc3TDrWx1c2FcIixcbiAgICBjdXJyZW5jeTogXCJQw6luelwiLFxuICAgIHVzZUdyb3VwaW5nOiBcIkNzb3BvcnRvc8OtdMOhc1wiLFxuXG4gICAgc2hvd1ByZXZpZXc6IFwiRWzFkW7DqXpldCBtdXRhdMOhc2FcIixcbiAgICBhbGxvd011bHRpcGxlOiBcIlTDtmJiIGVuZ2Vkw6lseWV6w6lzZVwiLFxuICAgIGltYWdlSGVpZ2h0OiBcIkvDqXAgbWFnYXNzw6FnYVwiLFxuICAgIGltYWdlV2lkdGg6IFwiS8OpcCBzesOpbGVzc8OpZ2VcIixcbiAgICBzdG9yZURhdGFBc1RleHQ6IFwiJ0VnecOpYicgdMOhcm9sw6FzYSBzesO2dmVna8OpbnRcIixcbiAgICBtYXhTaXplOiBcIk1heGltw6FsaXMgbcOpcmV0XCIsXG5cbiAgICBodG1sOiBcIkhUTUxcIixcblxuICAgIGNvbHVtbnM6IFwiT3N6bG9wb2tcIixcbiAgICBjZWxsczogXCJDZWxsw6FrXCIsXG4gICAgaXNBbGxSb3dSZXF1aXJlZDogXCJNaW5kZW4gc29yIGvDtnRlbGV6xZFcIixcblxuICAgIGhvcml6b250YWxTY3JvbGw6IFwiSG9yaXpvbnTDoWxpcyBnw7ZyZ2V0w6lzXCIsXG4gICAgY2VsbFR5cGU6IFwiQ2VsbGF0w61wdXNcIixcbiAgICBjb2x1bW5zTGF5b3V0OiBcIk9zemxvcG9rIGVscmVuZGV6w6lzZVwiLFxuICAgIGNvbHVtbkNvbENvdW50OiBcIk9zemxvcG9rIHN6w6FtYVwiLFxuICAgIGNvbHVtbk1pbldpZHRoOiBcIk9zemxvcCBtaW5pbcOhbGlzIHN6w6lsZXNzw6lnZVwiLFxuXG4gICAgcm93Q291bnQ6IFwiU29yb2sgc3rDoW1hXCIsXG4gICAgbWluUm93Q291bnQ6IFwiU29yb2sgbWluaW3DoWxpcyBzesOhbWFcIixcbiAgICBtYXhSb3dDb3VudDogXCJTb3JvayBtYXhpbcOhbGlzIHN6w6FtYVwiLFxuICAgIGtleU5hbWU6IFwiS3VsY3MgbWVnbmV2ZXrDqXNlXCIsXG4gICAga2V5RHVwbGljYXRpb25FcnJvcjogXCJLdWxjcyBkdXBsaWvDoWNpw7NzIGhpYmHDvHplbmV0ZVwiLFxuICAgIGNvbmZpcm1EZWxldGU6IFwiRWx0w6F2b2zDrXTDoXMgbWVnZXLFkXPDrXTDqXNlXCIsXG4gICAgY29uZmlybURlbGV0ZVRleHQ6IFwiRWx0w6F2b2zDrcOhdHMgbWVnZXLFkXPDrXTDqXNlIGvDqXJkw6lzXCIsXG4gICAgYWRkUm93TG9jYXRpb246IFwiJ8OaaiBzb3IgZmVsdsOpdGVsZScgZ29tYiBlbGhlbHllesOpc2VcIixcbiAgICBhZGRSb3dUZXh0OiBcIifDmmogc29yIGZlbHbDqXRlbGUnIGdvbWIgc3rDtnZlZ2VcIixcbiAgICByZW1vdmVSb3dUZXh0OiBcIidTb3IgZWx0w6F2b2zDrXTDoXNhJyBnb21iIHN6w7Z2ZWdlXCIsXG5cbiAgICBpdGVtczogXCJFbGVtZWtcIixcbiAgICBpdGVtU2l6ZTogXCJFbGVtIG3DqXJldGVcIixcbiAgICBjb2xDb3VudDogXCJPc3psb3BvayBzesOhbWFcIixcblxuICAgIHRlbXBsYXRlVGl0bGU6IFwiU2FibG9uIGPDrW1lXCIsXG4gICAgdGVtcGxhdGVEZXNjcmlwdGlvbjogXCJTYWJsb24gbGXDrXLDoXNhXCIsXG4gICAgYWxsb3dBZGRQYW5lbDogXCLDmmogcGFuZWwgZmVsdsOpdGVsw6luZWsgZW5nZWTDqWx5ZXrDqXNlXCIsXG4gICAgYWxsb3dSZW1vdmVQYW5lbDogXCJQYW5lbCBlbHTDoXZvbMOtdMOhc8OhbmFrIGVuZ2Vkw6lseWV6w6lzZVwiLFxuICAgIHBhbmVsQ291bnQ6IFwiUGFuZWxlayBzesOhbWFcIixcbiAgICBtaW5QYW5lbENvdW50OiBcIlBhbmVsZWsgbWluaW3DoWxpcyBzesOhbWFcIixcbiAgICBtYXhQYW5lbENvdW50OiBcIlBhbmVsZWsgbWF4aW3DoWxpcyBzesOhbWFcIixcbiAgICBwYW5lbHNTdGF0ZTogXCJQYW5lbGVrIMOhbGxhcG90YVwiLFxuICAgIHBhbmVsQWRkVGV4dDogXCInw5pqIHBhbmVsIGZlbHbDqXRlbGUnIGdvbWIgc3rDtnZlZ2VcIixcbiAgICBwYW5lbFJlbW92ZVRleHQ6IFwiJ1BhbmVsIGVsdMOhdm9sw610w6FzYScgZ29tYiBzesO2dmVnZVwiLFxuICAgIHBhbmVsUHJldlRleHQ6IFwiJ0VsxZF6xZEgcGFuZWwnIGdvbWIgc3rDtnZlZ2VcIixcbiAgICBwYW5lbE5leHRUZXh0OiBcIidLw7Z2ZXRrZXrFkSBwYW5lbCcgc3rDtnZlZ2VcIixcbiAgICBzaG93UXVlc3Rpb25OdW1iZXJzOiBcIkvDqXJkw6lzIHN6w6Ftw6FuYWsgbXV0YXTDoXNhXCIsXG4gICAgc2hvd1JhbmdlSW5Qcm9ncmVzczogXCJFbMWRcmVoYWxhZMOhcy1tdXRhdMOzIFwiLFxuICAgIHJlbmRlck1vZGU6IFwiTWVnamVsZW7DrXTDqXMgbcOzZGphXCIsXG4gICAgdGVtcGxhdGVUaXRsZUxvY2F0aW9uOiBcIlNhYmxvbiBjw61tw6luZWsgZWxoZWx5ZXrDqXNlXCIsXG5cbiAgICByYXRlVmFsdWVzOiBcIlN6b3J6w7Mgw6lydMOpa2VrXCIsXG4gICAgcmF0ZU1pbjogXCJMZWdraXNlYmIgc3pvcnrDs1wiLFxuICAgIHJhdGVNYXg6IFwiTGVnbmFneW9iYiBzem9yesOzXCIsXG4gICAgcmF0ZVN0ZXA6IFwiU3pvcnrDsyBsw6lww6lza8O2emVcIixcbiAgICBtaW5SYXRlRGVzY3JpcHRpb246IFwiTGVna2lzZWJiIHN6b3J6w7MgbGXDrXLDoXNhXCIsXG4gICAgbWF4UmF0ZURlc2NyaXB0aW9uOiBcIkxlZ25hZ3lvYmIgc3pvcnrDsyBsZcOtcsOhc2FcIixcblxuICAgIGlucHV0VHlwZTogXCJNZXrFkSB0w61wdXNhXCIsXG4gICAgc2l6ZTogXCJNw6lyZXRcIixcblxuICAgIGxvY2FsZTogXCJBbGFww6lydGVsbWV6ZXR0IG55ZWx2XCIsXG4gICAgZm9jdXNGaXJzdFF1ZXN0aW9uQXV0b21hdGljOiBcIkVsc8WRIGvDqXJkw6lzIGF1dG9tYXRpa3VzIGtpamVsw7Zsw6lzZSBsYXB2w6FsdMOhcyBlc2V0w6luXCIsXG4gICAgY29tcGxldGVkSHRtbDogXCJCZWZlamV6xZEgc3rDtnZlZyAoSFRNTClcIixcbiAgICBjb21wbGV0ZWRCZWZvcmVIdG1sOiBcIkJlZmVqZXrDqXMgZWzFkXR0aSBzesO2dmVnIChIVE1MKVwiLFxuICAgIGxvYWRpbmdIdG1sOiBcIkJldMO2bHTFkSBzesO2dmVnIChIVE1MKVwiLFxuICAgIHRyaWdnZXJzOiBcIkVzZW3DqW55dmV6w6lybMWRa1wiLFxuICAgIGNvb2tpZU5hbWU6IFwiU8O8dGkgbWVnbmV2ZXrDqXNlXCIsXG4gICAgc2VuZFJlc3VsdE9uUGFnZU5leHQ6IFwiS8OpcmTFkcOtdiDDqXJ0w6lrw6luZWsga8O8bGTDqXNlIGEga8O2dmV0a2V6xZEgbGFwcmEgbMOpcMOpc2tvclwiLFxuICAgIHNob3dOYXZpZ2F0aW9uQnV0dG9uczogXCJOYXZpZ8OhY2nDs3MgZ29tYm9rIG11dGF0w6FzYSAoYWxhcMOpcnRlbG1lemV0dCBuYXZpZ8OhY2nDsylcIixcbiAgICBzaG93UHJldkJ1dHRvbjogXCInRWzFkXrFkSBsYXAnIGdvbWIgbXV0YXTDoXNhXCIsXG4gICAgc2hvd1BhZ2VUaXRsZXM6IFwiTGFwb2sgY8OtbcOpbmVrIG11dGF0w6FzYVwiLFxuICAgIHNob3dDb21wbGV0ZWRQYWdlOiBcIkJlZmVqZXrFkSBzesO2dmVnIG11dGF0w6FzYSBhIGvDqXJkxZHDrXYgYmVmZWplesOpc2Vrb3JcIixcbiAgICBzaG93UGFnZU51bWJlcnM6IFwiTGFwb2sgc3rDoW3DoW5hayBtdXRhdMOhc2FcIixcbiAgICBxdWVzdGlvbkVycm9yTG9jYXRpb246IFwiS8OpcmTDqXMgaGliYcO8emVuZXTDqW5layBoZWx5emV0ZVwiLFxuICAgIHNob3dQcm9ncmVzc0JhcjogXCJFbMWRcmVoYWxhZMOhcy1tdXRhdMOzIG1lZ2plbGVuw610w6lzZVwiLFxuICAgIG1vZGU6IFwiTcOzZCAoc3plcmtlc3p0w6lzL21lZ3Rla2ludMOpcylcIixcbiAgICBnb05leHRQYWdlQXV0b21hdGljOlxuICAgICAgXCJNaW5kZW4ga8OpcmTDqXMgbWVndsOhbGFzem9sw6FzYWtvciBhdXRvbWF0aWt1c2FuIGEga8O2dmV0a2V6xZEgbGFwcmEgbMOpcMOpc1wiLFxuICAgIGNoZWNrRXJyb3JzTW9kZTogXCJIaWJhdml6c2fDoWxhdFwiLFxuICAgIGNsZWFySW52aXNpYmxlVmFsdWVzOiBcIk5lbWzDoXRoYXTDsyDDqXJ0w6lrZWsgdMO2cmzDqXNlXCIsXG4gICAgc3RhcnRTdXJ2ZXlUZXh0OiBcIidLZXpkw6lzJyBnb21iIGZlbGlyYXRhXCIsXG4gICAgcGFnZVByZXZUZXh0OiBcIidFbMWResWRIGxhcCcgZ29tYiBmZWxpcmF0YVwiLFxuICAgIHBhZ2VOZXh0VGV4dDogXCInS8O2dmV0a2V6xZEgbGFwJyBnb21iIGZlbGlyYXRhXCIsXG4gICAgY29tcGxldGVUZXh0OiBcIidCZWZlamV6w6lzJyBnb21iIGZlbGlyYXRhXCIsXG4gICAgcmVxdWlyZWRUZXh0OiBcIkvDtnRlbGV6xZEgc3ppbWLDs2x1bVwiLFxuICAgIHF1ZXN0aW9uU3RhcnRJbmRleDogXCJLw6lyZMOpcyBrZXpkxZFpbmRleGUgKDEsIDIgdmFneSAnQScsICdhJylcIixcbiAgICBxdWVzdGlvblRpdGxlVGVtcGxhdGU6XG4gICAgICBcIkvDqXJkw6lzIGPDrW3DqW5layBzYWJsb25qYTogJ3tzesOhbX0uIHtrw7Z0ZWxlesWRfSB7Y8OtbX0nXCIsXG4gICAgZmlyc3RQYWdlSXNTdGFydGVkOiBcIkF6IG1lZ2tlemRldHQgbGFwIGEga8OpcmTFkcOtdiBlbHPFkSBvbGRhbGEuXCIsXG4gICAgaXNTaW5nbGVQYWdlOiBcIk1pbmRlbiBlbGVtIG11dGF0w6FzYSBlZ3kgbGFwb25cIixcbiAgICBtYXhUaW1lVG9GaW5pc2hQYWdlOiBcIkVneSBsYXAga2l0w7ZsdMOpc8OpcmUgZm9yZMOtdGhhdMOzIG1heGltw6FsaXMgaWTFkVwiLFxuICAgIHNob3dUaW1lclBhbmVsOiBcIklkxZF6w610xZEgbXV0YXTDoXNhXCIsXG4gICAgc2hvd1RpbWVyUGFuZWxNb2RlOiBcIklkxZF6w610xZEgbcOzZGphXCIsXG5cbiAgICBkZWZhdWx0UGFuZWxWYWx1ZTogXCJQYW5lbCBhbGFww6lydGVsbWV6ZXR0IMOpcnTDqWtlXCIsXG4gICAgZGVmYXVsdFJvd1ZhbHVlOiBcIlNvciBhbGFww6lydGVsbWV6ZXR0IMOpcnTDqWtlXCIsXG4gICAgaGFzTm9uZTogXCJMZWhldCDDvHJlc1wiLFxuICAgIG5vbmVUZXh0OiBcIsOccmVzIHN6w7Z2ZWdcIixcblxuICAgIHRleHQ6IFwiU3rDtnZlZ1wiXG4gIH1cbn07XG5lZGl0b3JMb2NhbGl6YXRpb24ubG9jYWxlc1tcImh1XCJdID0gaHVTdHJpbmdzO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2xvY2FsaXphdGlvbi9odW5nYXJpYW4udHMiLCJpbXBvcnQgeyBlZGl0b3JMb2NhbGl6YXRpb24gfSBmcm9tIFwiLi4vZWRpdG9yTG9jYWxpemF0aW9uXCI7XG5cbmV4cG9ydCB2YXIgaW5kb25lc2lhblN0cmluZ3MgPSB7XG4gIC8vc3VydmV5IHRlbXBsYXRlc1xuICBzdXJ2ZXk6IHtcbiAgICBlZGl0OiBcIlViYWhcIixcbiAgICBleHRlcm5hbEhlbHBMaW5rOiBcIlRvbnRvbiBkYW4gcGVsYWphcmkgY2FyYSBtZW1idWF0IHN1cnZlaVwiLFxuICAgIGV4dGVybmFsSGVscExpbmtVcmw6XG4gICAgICBcImh0dHBzOi8vd3d3LnlvdXR1YmUuY29tL2NoYW5uZWwvVUNIMnJ1OW9rSWNvb05aZnBJYnlxNHFRP3ZpZXdfYXM9c3Vic2NyaWJlclwiLFxuICAgIGRyb3BRdWVzdGlvbjogXCJTaWxhaGthbiBsZXRha2thbiBwZXJ0YW55YWFuIGRpIHNpbmkgZGFyaSBLb3RhayBQZXJrYWthcyBkaSBzZWJlbGFoIGtpcmkuXCIsXG4gICAgY29weTogXCJTYWxpblwiLFxuICAgIGFkZFRvVG9vbGJveDogXCJUYW1iYWhrYW4ga2UgS290YWsgUGVya2FrYXNcIixcbiAgICBkZWxldGVQYW5lbDogXCJIYXB1cyBQYW5lbFwiLFxuICAgIGRlbGV0ZVF1ZXN0aW9uOiBcIkhhcHVzIFBlcnRhbnlhYW5cIixcbiAgICBjb252ZXJ0VG86IFwiTWVuZ3ViYWgga2VcIixcbiAgICBkcmFnOiBcIlRhcmlrIGVsZW1lblwiXG4gIH0sXG4gIC8vcXVlc3Rpb25UeXBlc1xuICBxdDoge1xuICAgIGRlZmF1bHQ6IFwiRGVmYXVsdFwiLFxuICAgIGNoZWNrYm94OiBcIktvdGFrIENlbnRhbmdcIixcbiAgICBjb21tZW50OiBcIktvbWVudGFyXCIsXG4gICAgaW1hZ2VwaWNrZXI6IFwiR2FtYmFyXCIsXG4gICAgZHJvcGRvd246IFwiS290YWsgS29tYm9cIixcbiAgICBmaWxlOiBcIkJlcmthc1wiLFxuICAgIGh0bWw6IFwiSHRtbFwiLFxuICAgIG1hdHJpeDogXCJNYXRyaWtzIChwaWxpaGFuIHR1bmdnYWwpXCIsXG4gICAgbWF0cml4ZHJvcGRvd246IFwiTWF0cmlrcyAocGlsaWhhbiBnYW5kYSlcIixcbiAgICBtYXRyaXhkeW5hbWljOiBcIk1hdHJpa3MgKGJhcmlzIGRpbmFtaXMpXCIsXG4gICAgbXVsdGlwbGV0ZXh0OiBcIlRla3MgR2FuZGFcIixcbiAgICBwYW5lbDogXCJQYW5lbFwiLFxuICAgIHBhbmVsZHluYW1pYzogXCJQYW5lbCAocGFuZWwgZGluYW1pcylcIixcbiAgICByYWRpb2dyb3VwOiBcIlBpbGloYW4gR2FuZGFcIixcbiAgICByYXRpbmc6IFwiUGVyaW5na2F0XCIsXG4gICAgdGV4dDogXCJJbnB1dCBUdW5nZ2FsXCIsXG4gICAgYm9vbGVhbjogXCJCb29sZWFuXCIsXG4gICAgZXhwcmVzc2lvbjogXCJFa3NwcmVzaSAoZGliYWNhIHNhamEpXCIsXG4gICAgZmxvd3BhbmVsOiBcIlBhbmVsIEFsaXJhblwiXG4gIH0sXG4gIC8vU3RyaW5ncyBpbiBFZGl0b3JcbiAgZWQ6IHtcbiAgICBkZWZhdWx0TG9jYWxlOiBcIkRlZmF1bHQgKHswfSlcIixcbiAgICBzdXJ2ZXk6IFwiU3VydmVpXCIsXG4gICAgc2V0dGluZ3M6IFwiUGVuZ2F0dXJhbiBTdXJ2ZWlcIixcbiAgICBvcGplY3RQcm9wZXJ0aWVzSGVhZGVyOiBcIkxhbmp1dGFuXCIsXG4gICAgc2hvd09iamVjdFByb3BlcnRpZXM6IFwiVGFtcGlsa2FuIFByb3BlcnRpIE9ieWVrXCIsXG4gICAgaGlkZU9iamVjdFByb3BlcnRpZXM6IFwiU2VtYnVueWlrYW4gUHJvcGVydGkgT2J5ZWtcIixcbiAgICBlZGl0U3VydmV5OiBcIlViYWggU3VydmVpXCIsXG4gICAgYWRkTmV3UGFnZTogXCJUYW1iYWggSGFsYW1hbiBCYXJ1XCIsXG4gICAgbW92ZVJpZ2h0OiBcIkdlc2VyIGtlIEthbmFuXCIsXG4gICAgbW92ZUxlZnQ6IFwiR2VzZXIga2UgS2lyaVwiLFxuICAgIGRlbGV0ZVBhZ2U6IFwiSGFwdXMgSGFsYW1hblwiLFxuICAgIGVkaXRQYWdlOiBcIlViYWggSGFsYW1hblwiLFxuICAgIGVkaXQ6IFwiVWJhaFwiLFxuICAgIG5ld1BhZ2VOYW1lOiBcImhhbGFtYW5cIixcbiAgICBuZXdRdWVzdGlvbk5hbWU6IFwicGVydGFueWFhblwiLFxuICAgIG5ld1BhbmVsTmFtZTogXCJwYW5lbFwiLFxuICAgIHRlc3RTdXJ2ZXk6IFwiQ29iYSBTdXJ2ZWlcIixcbiAgICB0ZXN0U3VydmV5QWdhaW46IFwiQ29iYSBTdXJ2ZWkgTGFnaVwiLFxuICAgIHRlc3RTdXJ2ZXlXaWR0aDogXCJMZWJhciBzdXJ2ZWk6IFwiLFxuICAgIGVtYmVkU3VydmV5OiBcIkVtYmVkIFN1cnZlaVwiLFxuICAgIHRyYW5zbGF0aW9uOiBcIlRlcmplbWFoYW5cIixcbiAgICBzYXZlU3VydmV5OiBcIlNpbXBhbiBTdXJ2ZWlcIixcbiAgICBkZXNpZ25lcjogXCJSYW5jYW5nYW4gU3VydmVpXCIsXG4gICAganNvbkVkaXRvcjogXCJQZW5ndWJhaCBKU09OXCIsXG4gICAgdW5kbzogXCJVcnVuZ2thblwiLFxuICAgIHJlZG86IFwiVWxhbmdpXCIsXG4gICAgb3B0aW9uczogXCJQaWxpaGFuXCIsXG4gICAgZ2VuZXJhdGVWYWxpZEpTT046IFwiSGFzaWxrYW4gSlNPTiB5YW5nIFZhbGlkXCIsXG4gICAgZ2VuZXJhdGVSZWFkYWJsZUpTT046IFwiSGFzaWxrYW4gSlNPTiB5YW5nIGRhcGF0IGRpYmFjYVwiLFxuICAgIHRvb2xib3g6IFwiS290YWsgUGVya2FrYXNcIixcbiAgICB0b29sYm94R2VuZXJhbENhdGVnb3J5OiBcIlVtdW1cIixcbiAgICBkZWxTZWxPYmplY3Q6IFwiSGFwdXMgb2JqZWsgeWFuZyBkaXBpbGloXCIsXG4gICAgZWRpdFNlbE9iamVjdDogXCJVYmFoIG9iamVrIHlhbmcgZGlwaWxpaFwiLFxuICAgIGNvcnJlY3RKU09OOiBcIlBsZWFzZSBjb3JyZWN0IEpTT04uXCIsXG4gICAgc3VydmV5UmVzdWx0czogXCJIYXNpbCBzdXJ2ZWk6IFwiLFxuICAgIHN1cnZleVJlc3VsdHNUYWJsZTogXCJTZWJhZ2FpIHRhYmVsXCIsXG4gICAgc3VydmV5UmVzdWx0c0pzb246IFwiU2ViYWdhaSBKU09OXCIsXG4gICAgcmVzdWx0c1RpdGxlOiBcIkp1ZHVsIFBlcnRhbnlhYW5cIixcbiAgICByZXN1bHRzTmFtZTogXCJOYW1hIFBlcnRhbnlhYW5cIixcbiAgICByZXN1bHRzVmFsdWU6IFwiTmlsYWkgSmF3YWJhblwiLFxuICAgIHJlc3VsdHNEaXNwbGF5VmFsdWU6IFwiVGFtcGlsa2FuIE5pbGFpXCIsXG4gICAgbW9kaWZpZWQ6IFwiRGltb2RpZmlrYXNpXCIsXG4gICAgc2F2aW5nOiBcIk1lbnlpbXBhblwiLFxuICAgIHNhdmVkOiBcIlRlcnNpbXBhblwiLFxuICAgIHNhdmVFcnJvcjogXCJFcnJvciEgS29udGVuIGVkaXRvciB0aWRhayBiZXJoYXNpbCBkaXNpbXBhbi5cIixcbiAgICB0cmFuc2xhdGlvbkFkZExhbmd1YWdlOiBcIlBpbGloIGJhaGFzYSB1bnR1ayB0ZXJqZW1haGFuXCIsXG4gICAgdHJhbnNsYXRpb25TaG93QWxsU3RyaW5nczogXCJUYW1waWxrYW4gc2VsdXJ1aCBzdHJpbmdcIixcbiAgICB0cmFuc2xhdGlvblNob3dBbGxQYWdlczogXCJUYW1waWxrYW4gc2VsdXJ1aCBoYWxhbWFuXCIsXG4gICAgdHJhbnNsYXRpb25Ob1N0cmluZ3M6IFwiVGlkYWsgYWRhIHN0cmluZyBkaXRlcmplbWFoa2FuLiBTaWxhaGthbiBnYW50aSBwZW55YXJpbmcuXCIsXG4gICAgdHJhbnNsYXRpb25FeHBvcnRUb1NDVkJ1dHRvbjogXCJFa3Nwb3J0IGtlIENTVlwiLFxuICAgIHRyYW5zbGF0aW9uSW1wb3J0RnJvbVNDVkJ1dHRvbjogXCJJbXBvcnQgZGFyaSBDU1ZcIixcbiAgICB0cmFuc2xhdGlvbk1lcmdlTG9jYWxlV2l0aERlZmF1bHQ6IFwiR2FidW5na2FuIHswfSBkZW5nYW4gZGVmYXVsdCBsb2NhbGVcIixcbiAgICBib2xkOiBcIlRlYmFsXCIsXG4gICAgaXRhbGljOiBcIk1pcmluZ1wiLFxuICAgIHVuZGVybGluZTogXCJHYXJpcyBCYXdhaFwiLFxuICAgIGZwQWRkUXVlc3Rpb246IFwiVGFtYmFoIHBlcnRhbnlhYW4uLi5cIixcbiAgICBjb21wbGV0ZWRIdG1sT25Db25kaXRpb25JdGVtVGV4dDogXCJUYW1waWxrYW4gamlrYTpcIlxuICB9LFxuICAvL1Byb3BlcnR5IG5hbWVzIGluIHRhYmxlIGhlYWRlcnNcbiAgcGVsOiB7XG4gICAgaXNSZXF1aXJlZDogXCJXYWppYj9cIlxuICB9LFxuICAvL1Byb3BlcnR5IEVkaXRvcnNcbiAgcGU6IHtcbiAgICBhcHBseTogXCJUZXJhcGthblwiLFxuICAgIG9rOiBcIk9LXCIsXG4gICAgY2FuY2VsOiBcIkJhdGFsXCIsXG4gICAgcmVzZXQ6IFwiUmVzZXRcIixcbiAgICBjbG9zZTogXCJUdXR1cFwiLFxuICAgIGRlbGV0ZTogXCJIYXB1c1wiLFxuICAgIGFkZE5ldzogXCJUYW1iYWhrYW4gQmFydVwiLFxuICAgIGFkZEl0ZW06IFwiS2xpayB1bnR1ayBtZW5hbWJhaGthbiBzZWJ1YWggaXRlbS4uLlwiLFxuICAgIHJlbW92ZUFsbDogXCJIYXB1cyBTZW11YVwiLFxuICAgIGVkaXQ6IFwiVWJhaFwiLFxuICAgIGl0ZW1WYWx1ZUVkaXQ6IFwiRGl0YW1waWxrYW4gSmlrYVwiLFxuICAgIGVkaXRDaG9pY2VzOiBcIlViYWggUGlsaWhhblwiLFxuICAgIG1vdmU6IFwiUGluZGFoXCIsXG4gICAgZW1wdHk6IFwiPGtvc29uZz5cIixcbiAgICBub3RFbXB0eTogXCI8dWJhaCBuaWxhaT5cIixcbiAgICBmYXN0RW50cnk6IFwiRW50cmkgQ2VwYXRcIixcbiAgICBmb3JtRW50cnk6IFwiRW50cmkgRm9ybVwiLFxuICAgIHRlc3RTZXJ2aWNlOiBcIkNvYmEgbGF5YW5hblwiLFxuICAgIGNvbmRpdGlvblNlbGVjdFF1ZXN0aW9uOiBcIlBpbGloIHBlcnRhbnlhYW4uLi5cIixcbiAgICBjb25kaXRpb25WYWx1ZVF1ZXN0aW9uVGl0bGU6IFwiU2lsYWhrYW4gbWFzdWtrYW4vcGlsaWggbmlsYWlcIixcbiAgICBjb25kaXRpb25CdXR0b25BZGQ6IFwiVGFtYmFoXCIsXG4gICAgY29uZGl0aW9uQnV0dG9uUmVwbGFjZTogXCJHYW50aVwiLFxuICAgIGNvbmRpdGlvbkhlbHA6XG4gICAgICBcIlNpbGFoa2FuIG1hc3Vra2FuIGVrc3ByZXNpIGJvb2xlYW4uIEhhcnVzIG1lbmdlbWJhbGlrYW4gJ2JlbmFyJyBhZ2FyIHBlcnRhbnlhYW4gZGFwYXQgdGVybGloYXQuIENvbnRvaDoge3F1ZXN0aW9uMX0gPSAnbmlsYWkxJyBvciAoe3F1ZXN0aW9uMn0gKiB7cXVlc3Rpb240fSAgPiAyMCBhbmQge3F1ZXN0aW9uM30gPCA1KVwiLFxuICAgIGV4cHJlc3Npb25IZWxwOlxuICAgICAgXCJTaWxhaGthbiBtYXN1a2FuIHNlYnVhaCBla3NwcmVzaS4gQW5kYSBkYXBhdCBtZW5nZ3VuYWthbiBrdXJ1bmcga3VyYXdhbCB1bnR1ayBtZW5kYXBhdGthbiBha3NlcyBwYWRhIG5pbGFpIHBlcnRhbnlhYW46ICd7cXVlc3Rpb24xfSArIHtxdWVzdGlvbjJ9JywgJyh7cHJpY2V9KntxdWFudGl0eX0pICogKDEwMCAtIHtkaXNjb3VudH0pJ1wiLFxuICAgIGFjZUVkaXRvckhlbHA6IFwiVGVrYW4gY3RybCtzcGFzaSB1bnR1ayBtZW5kYXBhdGthbiBwZXR1bmp1ayBwZW55ZWxlc2FpYW4gZWtzcHJlc2lcIixcbiAgICBhY2VFZGl0b3JSb3dUaXRsZTogXCJCYXJpcyBzYWF0IGluaVwiLFxuICAgIGFjZUVkaXRvclBhbmVsVGl0bGU6IFwiUGFuZWwgc2FhdCBpbmlcIixcbiAgICBzaG93TW9yZTogXCJVbnR1ayBkZXRpbCBzZWxhbmp1dG55YSBzaWxhaGthbiBwZXJpa3NhIGRva3VtZW50YXNpXCIsXG4gICAgY29uZGl0aW9uU2hvd01vcmVVcmw6XG4gICAgICBcImh0dHBzOi8vc3VydmV5anMuaW8vRG9jdW1lbnRhdGlvbi9MaWJyYXJ5UGFyYW1ldGVyP2lkPVF1ZXN0aW9uJnBhcmFtZXRlcj12aXNpYmxlSWZcIixcbiAgICBhc3Npc3RhbnRUaXRsZTogXCJQZXJ0YW55YWFuIHRlcnNlZGlhOlwiLFxuICAgIGNlbGxzRW1wdHlSb3dzQ29sdW1uczogXCJIYXJ1cyBhZGEgc2V0aWRha255YSBzYXR1IGtvbG9tIGF0YXUgYmFyaXNcIixcblxuICAgIHByb3BlcnR5SXNFbXB0eTogXCJTaWxhaGthbiBtYXN1a2thbiBuaWxhaVwiLFxuICAgIHZhbHVlOiBcIk5pbGFpXCIsXG4gICAgdGV4dDogXCJUZWtzXCIsXG4gICAgcm93aWQ6IFwiSUQgYmFyaXNcIixcbiAgICBpbWFnZUxpbms6IFwiTGluayBHYW1iYXJcIixcbiAgICBjb2x1bW5FZGl0OiBcIlViYWgga29sb206IHswfVwiLFxuICAgIGl0ZW1FZGl0OiBcIlViYWggaXRlbTogezB9XCIsXG5cbiAgICB1cmw6IFwiVVJMXCIsXG4gICAgcGF0aDogXCJQYXRoXCIsXG4gICAgdmFsdWVOYW1lOiBcIk5hbWEgbmlsYWlcIixcbiAgICB0aXRsZU5hbWU6IFwiTmFtYSBqdWR1bFwiLFxuXG4gICAgaGFzT3RoZXI6IFwiTWVtaWxpa2kgaXRlbSBsYWluXCIsXG4gICAgb3RoZXJUZXh0OiBcIlRla3MgaXRlbSBsYWluXCIsXG4gICAgbmFtZTogXCJOYW1hXCIsXG4gICAgdGl0bGU6IFwiSnVkdWxcIixcbiAgICBjZWxsVHlwZTogXCJKZW5pcyBzZWxcIixcbiAgICBjb2xDb3VudDogXCJKdW1sYWgga29sb21cIixcbiAgICBjaG9pY2VzT3JkZXI6IFwiVGVudHVrYW4gdXJ1dGFuIHBpbGloYW5cIixcbiAgICB2aXNpYmxlOiBcIlRlcmxpaGF0P1wiLFxuICAgIGlzUmVxdWlyZWQ6IFwiV2FqaWI/XCIsXG4gICAgc3RhcnRXaXRoTmV3TGluZTogXCJNdWxhaSBkZW5nYW4gYmFyaXMgYmFydT9cIixcbiAgICByb3dzOiBcIkp1bWxhaCBiYXJpc1wiLFxuICAgIHBsYWNlSG9sZGVyOiBcIk1hc3Vra2FuIHBsYWNlaG9sZGVyXCIsXG4gICAgc2hvd1ByZXZpZXc6IFwiVHVuanVra2FuIHRpbmphdWFuIGdhbWJhcj9cIixcbiAgICBzdG9yZURhdGFBc1RleHQ6IFwiU2ltcGFuIGtvbnRlbiBiZXJrYXMgZGFsYW0gaGFzaWwgSlNPTiBzZWJhZ2FpIHRla3NcIixcbiAgICBtYXhTaXplOiBcIlVrdXJhbiBtYWtzaW11bSBiZXJrYXMgZGFsYW0gYnl0ZVwiLFxuICAgIGltYWdlSGVpZ2h0OiBcIlRpbmdnaSBnYW1iYXJcIixcbiAgICBpbWFnZVdpZHRoOiBcIkxlYmFyIGdhbWJhclwiLFxuICAgIHJvd0NvdW50OiBcIkp1bWxhaCBiYXJpc1wiLFxuICAgIGNvbHVtbkxheW91dDogXCJUYXRhIGxldGFrIGtvbG9tXCIsXG4gICAgYWRkUm93TG9jYXRpb246IFwiVGFtYmFoIGxva2FzaSB0b21ib2wgYmFyaXNcIixcbiAgICBhZGRSb3dUZXh0OiBcIlRla3MgdGFtYmFoIHRvbWJvbCBiYXJpc1wiLFxuICAgIHJlbW92ZVJvd1RleHQ6IFwiVGVrcyBoYXB1cyB0b21ib2wgYmFyaXNcIixcbiAgICBtaW5SYXRlRGVzY3JpcHRpb246IFwiRGVza3JpcHNpIG5pbGFpIG1pbmltdW1cIixcbiAgICBtYXhSYXRlRGVzY3JpcHRpb246IFwiRGVza3JpcHNpIG5pbGFpIG1ha3NpbXVtXCIsXG4gICAgaW5wdXRUeXBlOiBcIkplbmlzIG1hc3VrYW5cIixcbiAgICBvcHRpb25zQ2FwdGlvbjogXCJLZXRlcmFuZ2FuIHBpbGloYW5cIixcbiAgICBkZWZhdWx0VmFsdWU6IFwiTmlsYWkgc3RhbmRhclwiLFxuICAgIGNlbGxzRGVmYXVsdFJvdzogXCJUZWtzIHNlbCBzdGFuZGFyXCIsXG5cbiAgICBzdXJ2ZXlFZGl0b3JUaXRsZTogXCJVYmFoIHBlbmdhdHVyYW4gc3VydmVpXCIsXG4gICAgcUVkaXRvclRpdGxlOiBcIlViYWg6IHswfVwiLFxuXG4gICAgbWF4TGVuZ3RoOiBcIlBhbmphbmcgbWFrc2ltdW1cIixcblxuICAgIC8vc3VydmV5XG4gICAgc2hvd1RpdGxlOiBcIlRhbXBpbGthbi9zZW1idW55aWthbiBqdWR1bFwiLFxuICAgIGxvY2FsZTogXCJCYWhhc2Egc3RhbmRhclwiLFxuICAgIG1vZGU6IFwiTW9kZSAodWJhaC9iYWNhIHNhamEpXCIsXG4gICAgY2xlYXJJbnZpc2libGVWYWx1ZXM6IFwiQmVyc2loa2FuIG5pbGFpIHRhayB0ZXJsaWhhdFwiLFxuICAgIGNvb2tpZU5hbWU6IFwiTmFtYSBjb29raWUgKHVudHVrIG1lbm9uYWt0aWZrYW4gbWVuamFsYW5rYW4gc3VydmVpIGR1YSBrYWxpIHNlY2FyYSBsb2thbClcIixcbiAgICBzZW5kUmVzdWx0T25QYWdlTmV4dDogXCJLaXJpbSBoYXNpbCBzdXJ2ZWkgcGFkYSBoYWxhbWFuIHNlbGFuanV0bnlhXCIsXG4gICAgc3RvcmVPdGhlcnNBc0NvbW1lbnQ6IFwiU2ltcGFuIG5pbGFpICdsYWlubnlhJyBwYWRhIGJpZGFuZyBsYWlubnlhXCIsXG4gICAgc2hvd1BhZ2VUaXRsZXM6IFwiVGFtcGlsa2FuIGp1ZHVsIGhhbGFtYW5cIixcbiAgICBzaG93UGFnZU51bWJlcnM6IFwiVGFtcGlsa2FuIG5vbW9yIGhhbGFtYW5cIixcbiAgICBwYWdlUHJldlRleHQ6IFwiVGVrcyBoYWxhbWFuIHRvbWJvbCBzZWJlbHVtbnlhXCIsXG4gICAgcGFnZU5leHRUZXh0OiBcIlRla3MgaGFsYW1hbiB0b21ib2wgc2VsYW5qdXRueWFcIixcbiAgICBjb21wbGV0ZVRleHQ6IFwiVGVrcyB0b21ib2wgc2VsZXNhaVwiLFxuICAgIHN0YXJ0U3VydmV5VGV4dDogXCJUZWtzIHRvbWJvbCBtdWxhaVwiLFxuICAgIHNob3dOYXZpZ2F0aW9uQnV0dG9uczogXCJUYW1waWxrYW4gdG9tYm9sIG5hdmlnYXNpIChuYXZpZ2FzaSBzdGFuZGFyKVwiLFxuICAgIHNob3dQcmV2QnV0dG9uOiBcIlRhbXBpbGthbiB0b21ib2wgc2ViZWx1bW55YSAocGVuZ2d1bmEgbXVuZ2tpbiBrZW1iYWxpIGtlIGhhbGFtYW4gc2ViZWx1bW55YSlcIixcbiAgICBmaXJzdFBhZ2VJc1N0YXJ0ZWQ6IFwiSGFsYW1hbiBwZXJ0YW1hIHBhZGEgc3VydmVpIGFkYWxhaCBoYWxhbWFuIHlhbmcgdGVsYWggZGltdWxhaS5cIixcbiAgICBzaG93Q29tcGxldGVkUGFnZTogXCJUYW1waWxrYW4ga2VzZWx1cnVoYW4gaGFsYW1hbiBkaSBha2hpciAoY29tcGxldGVkSHRtbClcIixcbiAgICBnb05leHRQYWdlQXV0b21hdGljOlxuICAgICAgXCJTZXRlbGFoIG1lbmphd2Egc2VsdXJ1aCBwZXJ0YW55YWFuLCBwZXJnaSBrZSBoYWxhbWFuIGJlcmlrdXRueWEgc2VjYXJhIG90b21hdGlzXCIsXG4gICAgc2hvd1Byb2dyZXNzQmFyOiBcIlRhbXBpbGthbiBwcm9ncmVzcyBiYXJcIixcbiAgICBxdWVzdGlvblRpdGxlTG9jYXRpb246IFwiTG9rYXNpIGp1ZHVsIHBlcnRhbnlhYW5cIixcbiAgICByZXF1aXJlZFRleHQ6IFwiU2ltYmlsIHBlcnRhbnlhYW4gd2FqaWJcIixcbiAgICBxdWVzdGlvblN0YXJ0SW5kZXg6IFwiSW5kZWtzIG11bGFpIHBlcnRhbnlhYW4gKDEsIDIgYXRhdSAnQScsICdhJylcIixcbiAgICBzaG93UXVlc3Rpb25OdW1iZXJzOiBcIlRhbXBpbGthbiBub21vciBwZXJ0YW55YWFuXCIsXG4gICAgcXVlc3Rpb25UaXRsZVRlbXBsYXRlOlxuICAgICAgXCJUZW1wbGF0ZSBKdWR1bCBQZXJ0YW55YWFuLCBkZWZhdWx0IGFkYWxhaDogJ3tub30uIHtyZXF1aXJlfSB7dGl0bGV9J1wiLFxuICAgIHF1ZXN0aW9uRXJyb3JMb2NhdGlvbjogXCJMb2thc2kgUGVydGFueWFhbiBFcnJvclwiLFxuICAgIGZvY3VzRmlyc3RRdWVzdGlvbkF1dG9tYXRpYzogXCJGb2t1cyBrZSBwZXJ0YW55YWFuIHBlcnRhbWEgc2FhdCBwZXJnYW50aWFuIGhhbGFtYW5cIixcbiAgICBxdWVzdGlvbnNPcmRlcjogXCJVcnV0YWthbiBlbGVtZW4gcGFkYSBoYWxhYW5cIixcbiAgICBtYXhUaW1lVG9GaW5pc2g6IFwiV2FrdHUgbWFrc2ltdW0gdW50dWsgbWVueWVsZXNhaWthbiBzdXJ2ZWlcIixcbiAgICBtYXhUaW1lVG9GaW5pc2hQYWdlOiBcIldha3R1IG1ha3NpbXVtIHVudHVrIG1lbnllbGVzYWlrYW4gc3VhdHUgaGFsYW1hblwiLFxuICAgIHNob3dUaW1lclBhbmVsOiBcIlRhbXBpbGthbiBwYW5lbCBwZW5nYXR1ciB3YWt0dVwiLFxuICAgIHNob3dUaW1lclBhbmVsTW9kZTogXCJUYW1waWxrYW4gbW9kZSBwYW5lbCBwZW5nYXR1ciB3YWt0dVwiLFxuICAgIHJlbmRlck1vZGU6IFwiTW9kZSByZW5kZXJcIixcbiAgICBhbGxvd0FkZFBhbmVsOiBcIkJvbGVoa2FuIHBlbmFtYmFoYW4gcGFuZWxcIixcbiAgICBhbGxvd1JlbW92ZVBhbmVsOiBcIkJvbGVoa2FuIHBlbmdoYXB1c2FuIHBhbmVsXCIsXG4gICAgcGFuZWxBZGRUZXh0OiBcIlRla3MgdGFtYmFoIHBhbmVsXCIsXG4gICAgcGFuZWxSZW1vdmVUZXh0OiBcIlRla3MgaGFwdXMgcGFuZWxcIixcbiAgICBpc1NpbmdsZVBhZ2U6IFwiVGFtcGlsa2FuIHNlbHVydWggZWxlbWVuIHBhZGEgaGFsYW1hblwiLFxuICAgIGh0bWw6IFwiSHRtbFwiLFxuICAgIGV4cHJlc3Npb246IFwiRWtzcHJlc2lcIixcbiAgICBcbiAgICBtaW5WYWx1ZTogXCJOaWxhaSBtaW5pbXVtXCIsXG4gICAgbWF4VmFsdWU6IFwiTmlsYWkgbWFrc2ltdW1cIixcbiAgICBtaW5MZW5ndGg6IFwiUGFuamFuZyBtaW5pbXVtXCIsXG4gICAgYWxsb3dEaWdpdHM6IFwiQm9sZWhrYW4gYW5na2FcIixcbiAgICBtaW5Db3VudDogXCJIaXR1bmdhbiBtaW5pbXVtXCIsXG4gICAgbWF4Q291bnQ6IFwiSGl0dW5nYW4gbWFrc2ltdW1cIixcbiAgICByZWdleDogXCJFa3NwcmVzaSByZWd1bGVyXCIsXG5cbiAgICB0b3RhbFRleHQ6IFwiVG90YWwgdGVrc1wiLFxuICAgIHRvdGFsVHlwZTogXCJUb3RhbCBqZW5pc1wiLFxuICAgIHRvdGFsRXhwcmVzc2lvbjogXCJUb3RhbCBla3NwcmVzaVwiLFxuICAgIHRvdGFsRGlzcGxheVN0eWxlOiBcIlRvdGFsIGdheWEgdGFtcGlsYW5cIixcbiAgICB0b3RhbEN1cnJlbmN5OiBcIlRvdGFsIG1hdGEgdWFuZ1wiLFxuICAgIHRvdGFsRm9ybWF0OiBcIlRvdGFsIGZvcm1hdFwiLFxuXG4gICAgdGFiczoge1xuICAgICAgZ2VuZXJhbDogXCJVbXVtXCIsXG4gICAgICBmaWxlT3B0aW9uczogXCJQaWxpaGFuIGJlcmthc1wiLFxuICAgICAgaHRtbDogXCJFZGl0b3IgSHRtbFwiLFxuICAgICAgY29sdW1uczogXCJLb2xvbVwiLFxuICAgICAgcm93czogXCJCYXJpc1wiLFxuICAgICAgY2hvaWNlczogXCJQaWxpaGFuXCIsXG4gICAgICBpdGVtczogXCJCYXJhbmdcIixcbiAgICAgIHZpc2libGVJZjogXCJUZXJsaWhhdCBKaWthXCIsXG4gICAgICBlbmFibGVJZjogXCJNZW11bmdraW5rYW4gSmlrYVwiLFxuICAgICAgcmVxdWlyZWRJZjogXCJXYWppYiBKaWthXCIsXG4gICAgICByYXRlVmFsdWVzOiBcIk5pbGFpIFRpbmdrYXRcIixcbiAgICAgIGNob2ljZXNCeVVybDogXCJQaWxpaCBkYXJpIFdlYlwiLFxuICAgICAgbWF0cml4Q2hvaWNlczogXCJQaWxpaGFuIFN0YW5kYXJcIixcbiAgICAgIG11bHRpcGxlVGV4dEl0ZW1zOiBcIk1hc3VrYW4gVGVrc1wiLFxuICAgICAgdmFsaWRhdG9yczogXCJWYWxpZGF0b3JcIixcbiAgICAgIG5hdmlnYXRpb246IFwiTmF2aWdhc2lcIixcbiAgICAgIHF1ZXN0aW9uOiBcIlBlcnRhbnlhYW5cIixcbiAgICAgIGNvbXBsZXRlZEh0bWw6IFwiSHRtbCBTZWxlc2FpXCIsXG4gICAgICBsb2FkaW5nSHRtbDogXCJNZW11YXQgSHRtbFwiLFxuICAgICAgdGltZXI6IFwiUGVuZ2F0dXIgV2FrdHUvS3Vpc1wiLFxuICAgICAgdHJpZ2dlcnM6IFwiVHJpZ2dlclwiLFxuICAgICAgdGVtcGxhdGVUaXRsZTogXCJKdWR1bCB0ZW1wbGF0XCIsXG4gICAgICB0b3RhbHM6IFwiVG90YWxcIlxuICAgIH0sXG4gICAgZWRpdFByb3BlcnR5OiBcIlViYWggcHJvcGVydGkgJ3swfSdcIixcbiAgICBpdGVtczogXCJbIEJhcmFuZzogezB9IF1cIixcblxuICAgIGVudGVyTmV3VmFsdWU6IFwiU2lsYWhrYW4gbWFzdWtrYW4gbmlsYWlcIixcbiAgICBub3F1ZXN0aW9uczogXCJUaWRhayBhZGEgcGVydGFueWFhbiBkYWxhbSBzdXJ2ZWkuXCIsXG4gICAgY3JlYXRldHJpZ2dlcjogXCJTaWxhaGthbiBidWF0IHNlYnVhaCB0cmlnZ2VyXCIsXG4gICAgdHJpZ2dlck9uOiBcIk9uIFwiLFxuICAgIHRyaWdnZXJNYWtlUGFnZXNWaXNpYmxlOiBcIkJ1YXQgaGFsYW1hbiB0ZXJsaWhhdDpcIixcbiAgICB0cmlnZ2VyTWFrZVF1ZXN0aW9uc1Zpc2libGU6IFwiQnVhdCBlbGVtZW4gdGVybGloYXQ6XCIsXG4gICAgdHJpZ2dlckNvbXBsZXRlVGV4dDogXCJTZWxlc2Fpa2FuIHN1cnZlaSBqaWthIHN1a3Nlcy5cIixcbiAgICB0cmlnZ2VyTm90U2V0OiBcIlRyaWdnZXIgYmVsdW0gZGlhdHVyXCIsXG4gICAgdHJpZ2dlclJ1bklmOiBcIkJlcmphbGFuIGppa2FcIixcbiAgICB0cmlnZ2VyU2V0VG9OYW1lOiBcIlViYWggbmlsYWkgZGFyaTogXCIsXG4gICAgdHJpZ2dlckZyb21OYW1lOiBcIlNhbGluIG5pbGFpIGRhcmk6IFwiLFxuICAgIHRyaWdnZXJSdW5FeHByZXNzaW9uOiBcIkphbGFua2FuIGVrc3ByZXNpIGluaTpcIixcbiAgICB0cmlnZ2VyU2V0VmFsdWU6IFwia2U6IFwiLFxuICAgIHRyaWdnZXJJc1ZhcmlhYmxlOiBcIkphbmdhbiBtZWxldGFra2FuIHZhcmlhYmVsIGtlIGhhc2lsIHN1cnZleS5cIlxuICB9LFxuICAvL1Byb3BlcnR5IHZhbHVlc1xuICBwdjoge1xuICAgIHRydWU6IFwiYmVuYXJcIixcbiAgICBmYWxzZTogXCJzYWxhaFwiLFxuICAgIGluaGVyaXQ6IFwiaW5oZXJpdFwiLFxuICAgIHNob3c6IFwidGFtcGlsa2FuXCIsXG4gICAgaGlkZTogXCJzZW1idW55aWthblwiLFxuICAgIGRlZmF1bHQ6IFwic3RhbmRhclwiLFxuICAgIGluaXRpYWw6IFwiaW5pc2lhbFwiLFxuICAgIHJhbmRvbTogXCJhY2FrXCIsXG4gICAgY29sbGFwc2VkOiBcImRpbGlwYXRcIixcbiAgICBleHBhbmRlZDogXCJkaXJlbnRhbmdrYW5cIixcbiAgICBub25lOiBcInRpZGFrIGFkYVwiLFxuICAgIGFzYzogXCJuYWlrXCIsXG4gICAgZGVzYzogXCJ0dXJ1blwiLFxuICAgIGluZGV0ZXJtaW5hdGU6IFwidGlkYWsgdGVudHVcIixcbiAgICBkZWNpbWFsOiBcImRlc2ltYWxcIixcbiAgICBjdXJyZW5jeTogXCJtYXRhIHVhbmdcIixcbiAgICBwZXJjZW50OiBcInBlcnNlblwiLFxuICAgIGZpcnN0RXhwYW5kZWQ6IFwicGVybHVhc2FuUGVydGFtYVwiLFxuICAgIG9mZjogXCJtYXRpXCIsXG4gICAgb25QYW5lbDogXCJwYWRhIFBhbmVsXCIsXG4gICAgb25TdXJ2ZXk6IFwicGFkYSBTdXJ2ZWlcIixcbiAgICBsaXN0OiBcImRhZnRhclwiLFxuICAgIHByb2dyZXNzVG9wOiBcInByb2dyZXNzIGF0YXNcIixcbiAgICBwcm9ncmVzc0JvdHRvbTogXCJwcm9ncmVzcyBiYXdhaFwiLFxuICAgIHByb2dyZXNzVG9wQm90dG9tOiBcInByb2dyZXNzIGF0YXMgYmF3YWhcIixcbiAgICBob3Jpem9udGFsOiBcImhvcml6b250YWxcIixcbiAgICB2ZXJ0aWNhbDogXCJ2ZXJ0aWthbFwiLFxuICAgIHRvcDogXCJhdGFzXCIsXG4gICAgYm90dG9tOiBcImJhd2FoXCIsXG4gICAgdG9wQm90dG9tOiBcImF0YXMgZGFuIGJhd2FoXCIsXG4gICAgbGVmdDogXCJraXJpXCIsXG4gICAgY29sb3I6IFwid2FybmFcIixcbiAgICBkYXRlOiBcInRhbmdnYWxcIixcbiAgICBkYXRldGltZTogXCJ0YW5nZ2FsJndha3R1XCIsXG4gICAgXCJkYXRldGltZS1sb2NhbFwiOiBcInRhbmdnYWwmd2FrdHUtbG9rYWxcIixcbiAgICBlbWFpbDogXCJzdXJlbFwiLFxuICAgIG1vbnRoOiBcImJ1bGFuXCIsXG4gICAgbnVtYmVyOiBcIm5vbW9yXCIsXG4gICAgcGFzc3dvcmQ6IFwia2F0YSBzYW5kaVwiLFxuICAgIHJhbmdlOiBcInJlbnRhbmdcIixcbiAgICB0ZWw6IFwidGVsZXBvblwiLFxuICAgIHRleHQ6IFwidGVrc1wiLFxuICAgIHRpbWU6IFwid2FrdHVcIixcbiAgICB1cmw6IFwidXJsXCIsXG4gICAgd2VlazogXCJtaW5nZ3VcIixcbiAgICBoaWRkZW46IFwidGVyc2VtYnVueWlcIixcbiAgICBvbjogXCJueWFsYVwiLFxuICAgIG9uUGFnZTogXCJwYWRhIGhhbGFtYW5cIixcbiAgICBlZGl0OiBcInViYWhcIixcbiAgICBkaXNwbGF5OiBcInRhbXBpbGFuXCIsXG4gICAgb25Db21wbGV0ZTogXCJzYWF0IHNlbGVzYWlcIixcbiAgICBvbkhpZGRlbjogXCJzYWF0IHRlcnNlbWJ1bnlpXCIsXG4gICAgYWxsOiBcInNlbXVhXCIsXG4gICAgcGFnZTogXCJoYWxhbWFuXCIsXG4gICAgc3VydmV5OiBcInN1cnZlaVwiLFxuICAgIG9uTmV4dFBhZ2U6IFwicGFkYSBoYWxhbWFuIHNlbGFuanV0bnlhXCIsXG4gICAgb25WYWx1ZUNoYW5nZWQ6IFwic2FhdCBuaWxhaSBiZXJ1YmFoXCJcbiAgfSxcbiAgLy9PcGVyYXRvcnNcbiAgb3A6IHtcbiAgICBlbXB0eTogXCJrb3NvbmdcIixcbiAgICBub3RlbXB0eTogXCJ0aWRhayBrb3NvbmdcIixcbiAgICBlcXVhbDogXCJzYW1hIGRlbmdhblwiLFxuICAgIG5vdGVxdWFsOiBcInRpZGFrIHNhbWEgZGVuZ2FuXCIsXG4gICAgY29udGFpbnM6IFwibWVuZ2FuZHVuZ1wiLFxuICAgIG5vdGNvbnRhaW5zOiBcInRpZGFrIG1lbmdhbmR1bmdcIixcbiAgICBncmVhdGVyOiBcImxlYmloIGJlc2FyXCIsXG4gICAgbGVzczogXCJsZWJpaCBrZWNpbFwiLFxuICAgIGdyZWF0ZXJvcmVxdWFsOiBcImxlYmloIGJlc2FyIGF0YXUgc2FtYSBkZW5nYW5cIixcbiAgICBsZXNzb3JlcXVhbDogXCJsZWJpaCBrZWNpbCBhdGF1IHNhbWEgZGVuZ2FuXCJcbiAgfSxcbiAgLy9FbWJlZCB3aW5kb3dcbiAgZXc6IHtcbiAgICBhbmd1bGFyOiBcIkd1bmFrYW4gdmVyc2kgQW5ndWxhclwiLFxuICAgIGpxdWVyeTogXCJHdW5ha2FuIHZlcnNpIEpRdWVyeVwiLFxuICAgIGtub2Nrb3V0OiBcIkd1bmFrYW4gdmVyc2kgS25vY2tvdXRcIixcbiAgICByZWFjdDogXCJHdW5ha2FuIHZlcnNpIFJlYWN0XCIsXG4gICAgdnVlOiBcIkd1bmFrYW4gdmVyc2kgVnVlXCIsXG4gICAgYm9vdHN0cmFwOiBcIlVudHVrIGZyYW1ld29yayBib290c3RyYXBcIixcbiAgICBzdGFuZGFyZDogXCJUaWRhayBhZGEgYm9vdHN0cmFwXCIsXG4gICAgc2hvd09uUGFnZTogXCJUYW1waWxrYW4gc3VydmVpIHBhZGEgc2VidWFoIGhhbGFtYW5cIixcbiAgICBzaG93SW5XaW5kb3c6IFwiVGFtcGlsa2FuIHN1cnZlaSBwYWRhIHNlYnVhaCBqZW5kZWxhXCIsXG4gICAgbG9hZEZyb21TZXJ2ZXI6IFwiTXVhdCBzdXJ2ZWkgSlNPTiBkYXJpIHNlcnZlclwiLFxuICAgIHRpdGxlU2NyaXB0OiBcIlNrcmlwIGRhbiBnYXlhXCIsXG4gICAgdGl0bGVIdG1sOiBcIkhUTUxcIixcbiAgICB0aXRsZUphdmFTY3JpcHQ6IFwiSmF2YVNjcmlwdFwiXG4gIH0sXG4gIC8vVGVzdCBTdXJ2ZXlcbiAgdHM6IHtcbiAgICBzZWxlY3RQYWdlOiBcIlBpbGloIGhhbGFtYW4gdW50dWsgZGljb2JhOlwiLFxuICAgIHNob3dJbnZpc2libGVFbGVtZW50czogXCJUYW1waWxrYW4gZWxlbWVuIHRhayB0ZXJsaWhhdFwiLFxuICAgIGVtcHR5U3VydmV5VGV4dDogXCJUaWRhayBhZGEgaGFsYW1hbiBhdGF1IHBlcnRhbnlhYW4geWFuZyB0ZXJzZWRpYSBkaSBzdXJ2ZWkgaW5pLlwiXG4gIH0sXG4gIHZhbGlkYXRvcnM6IHtcbiAgICBhbnN3ZXJjb3VudHZhbGlkYXRvcjogXCJqdW1sYWggamF3YWJhblwiLFxuICAgIGVtYWlsdmFsaWRhdG9yOiBcInN1cmVsXCIsXG4gICAgZXhwcmVzc2lvbnZhbGlkYXRvcjogXCJla3NwcmVzaVwiLFxuICAgIG51bWVyaWN2YWxpZGF0b3I6IFwibnVtZXJpa1wiLFxuICAgIHJlZ2V4dmFsaWRhdG9yOiBcImVrc3ByZXNpIHJlZ3VsZXJcIixcbiAgICB0ZXh0dmFsaWRhdG9yOiBcInRla3NcIlxuICB9LFxuICB0cmlnZ2Vyczoge1xuICAgIGNvbXBsZXRldHJpZ2dlcjogXCJzZWxlc2Fpa2FuIHN1cnZlaVwiLFxuICAgIHNldHZhbHVldHJpZ2dlcjogXCJhdHVyIG5pbGFpXCIsXG4gICAgY29weXZhbHVldHJpZ2dlcjogXCJzYWxpbiBuaWxhaVwiLFxuICAgIHJ1bmV4cHJlc3Npb250cmlnZ2VyOiBcImphbGFua2FuIGVrc3ByZXNpXCIsXG4gICAgdmlzaWJsZXRyaWdnZXI6IFwidWJhaCB2aXNpYmlsaXRhc1wiXG4gIH0sXG4gIC8vUHJvcGVydGllc1xuICBwOiB7XG4gICAgbmFtZTogXCJuYW1hXCIsXG4gICAgdGl0bGU6IHtcbiAgICAgIG5hbWU6IFwianVkdWxcIixcbiAgICAgIHRpdGxlOiBcIkJpYXJrYW4ga29zb25nLCBqaWthIHNhbWEgZGVuZ2FuICdOYW1hJ1wiXG4gICAgfSxcblxuICAgIG5hdmlnYXRpb25CdXR0b25zVmlzaWJpbGl0eTogXCJ2aXNpYmlsaXRhcyB0b21ib2wgbmF2aWdhc2lcIixcbiAgICBxdWVzdGlvbnNPcmRlcjogXCJ1cnV0YW4gcGVydGFueWFhblwiLFxuICAgIG1heFRpbWVUb0ZpbmlzaDogXCJ3YWt0dSBtYWtzIHVudHVrIG1lbnllbGVzYWlrYW5cIixcblxuICAgIHZpc2libGU6IFwidGVybGloYXRcIixcbiAgICB2aXNpYmxlSWY6IFwidGVybGloYXQgamlrYVwiLFxuICAgIHF1ZXN0aW9uVGl0bGVMb2NhdGlvbjogXCJsb2thc2kganVkdWwgcGVydGFueWFhblwiLFxuICAgIGRlc2NyaXB0aW9uOiBcImRlc2tyaXBzaVwiLFxuICAgIHN0YXRlOiBcImtlYWRhYW5cIixcbiAgICBpc1JlcXVpcmVkOiBcIndhamliXCIsXG4gICAgcmVxdWlyZWRJZjogXCJ3YWppYiBqaWthXCIsXG4gICAgaW5kZW50OiBcImluZGVudGFuc2lcIixcbiAgICByZXF1aXJlZEVycm9yVGV4dDogXCJ0ZWtzIGVycm9yIHdhamliXCIsXG4gICAgc3RhcnRXaXRoTmV3TGluZTogXCJtdWxhaSBkZW5nYW4gYmFyaXMgYmFydVwiLFxuICAgIGlubmVySW5kZW50OiBcImluZGVuIGRhbGFtXCIsXG4gICAgcGFnZTogXCJoYWxhbWFuXCIsXG5cbiAgICB3aWR0aDogXCJsZWJhclwiLFxuXG4gICAgY29tbWVudFRleHQ6IFwidGVrcyBrb21lbnRhclwiLFxuICAgIHZhbHVlTmFtZTogXCJuYW1hIG5pbGFpXCIsXG4gICAgZW5hYmxlSWY6IFwiYWt0aWYgamlrYVwiLFxuICAgIGRlZmF1bHRWYWx1ZTogXCJuaWxhaSBkZWZhdWx0XCIsXG4gICAgY29ycmVjdEFuc3dlcjogXCJqYXdhYmFuIGJlbmFyXCIsXG4gICAgcmVhZE9ubHk6IFwiYmFjYSBzYWphXCIsXG4gICAgdmFsaWRhdG9yczogXCJ2YWxpZGF0b3JcIixcbiAgICB0aXRsZUxvY2F0aW9uOiBcImxva2FzaSBqdWR1bFwiLFxuXG4gICAgaGFzQ29tbWVudDogXCJtZW1pbGlraSBrb21lbnRhclwiLFxuICAgIGhhc090aGVyOiBcIm1lbWlsaWtpIGxhaW5ueWFcIixcbiAgICBjaG9pY2VzOiBcInBpbGloYW5cIixcbiAgICBjaG9pY2VzT3JkZXI6IFwidXJ1dGthbiBwaWxpaGFuXCIsXG4gICAgY2hvaWNlc0J5VXJsOiBcInBpbGloYW4gZGFyaSBVUkxcIixcbiAgICBvdGhlclRleHQ6IFwidGVrcyBsYWlubnlhXCIsXG4gICAgb3RoZXJFcnJvclRleHQ6IFwidGVrcyBlcnJvciBsYWlubnlhXCIsXG4gICAgc3RvcmVPdGhlcnNBc0NvbW1lbnQ6IFwic2ltcGFuIGxhaW5ubnlhIHNlYmFnYWkga29tZW50YXJcIixcblxuICAgIGxhYmVsOiBcImxhYmVsXCIsXG4gICAgc2hvd1RpdGxlOiBcInRhbXBpbGthbiBqdWR1bFwiLFxuICAgIHZhbHVlVHJ1ZTogXCJuaWxhaSBiZW5hclwiLFxuICAgIHZhbHVlRmFsc2U6IFwibmlsYWkgc2FsYWhcIixcblxuICAgIGNvbHM6IFwia29sb21cIixcbiAgICByb3dzOiBcImJhcmlzXCIsXG4gICAgcGxhY2VIb2xkZXI6IFwicGxhY2VIb2xkZXJcIixcblxuICAgIG9wdGlvbnNDYXB0aW9uOiBcImtldGVyYW5nYW4gcGlsaWhhblwiLFxuXG4gICAgZXhwcmVzc2lvbjogXCJla3NwcmVzaVwiLFxuICAgIGZvcm1hdDogXCJmb3JtYXRcIixcbiAgICBkaXNwbGF5U3R5bGU6IFwiZ2F5YSB0YW1waWxhblwiLFxuICAgIGN1cnJlbmN5OiBcIm1hdGEgdWFuZ1wiLFxuICAgIHVzZUdyb3VwaW5nOiBcImd1bmFrYW4ga2Vsb21wb2tcIixcblxuICAgIHNob3dQcmV2aWV3OiBcInRhbXBpbGthbiBwcmF0aW5qYXVcIixcbiAgICBhbGxvd011bHRpcGxlOiBcImJvbGVoa2FuIGdhbmRhXCIsXG4gICAgaW1hZ2VIZWlnaHQ6IFwidGluZ2dpIGdhbWJhclwiLFxuICAgIGltYWdlV2lkdGg6IFwibGViYXIgZ2FtYmFyXCIsXG4gICAgc3RvcmVEYXRhQXNUZXh0OiBcInNpbXBhbiBkYXRhIHNlYmFnYWkgdGVrc1wiLFxuICAgIG1heFNpemU6IFwidWt1cmFuIG1ha3NcIixcblxuICAgIGh0bWw6IFwiaHRtbFwiLFxuXG4gICAgY29sdW1uczogXCJrb2xvbVwiLFxuICAgIGNlbGxzOiBcInNlbFwiLFxuICAgIGlzQWxsUm93UmVxdWlyZWQ6IFwic2VtdWFCYXJpc1dhamliXCIsXG5cbiAgICBob3Jpem9udGFsU2Nyb2xsOiBcImhvcml6b250YWxTY3JvbGxcIixcbiAgICBjZWxsVHlwZTogXCJqZW5pc1NlbFwiLFxuICAgIGNvbHVtbnNMYXlvdXQ6IFwidGF0YUxldGFrS29sb21cIixcbiAgICBjb2x1bW5Db2xDb3VudDogXCJqdW1sYWhLb2xvbVwiLFxuICAgIGNvbHVtbk1pbldpZHRoOiBcImxlYmFyTWluaW1hbEtvbG9tXCIsXG5cbiAgICByb3dDb3VudDogXCJqdW1sYWhCYXJpc1wiLFxuICAgIG1pblJvd0NvdW50OiBcImp1bWxhaEJhcmlzTWluXCIsXG4gICAgbWF4Um93Q291bnQ6IFwianVtbGFoQmFyaXNNYWtzXCIsXG4gICAga2V5TmFtZTogXCJuYW1hS3VuY2lcIixcbiAgICBrZXlEdXBsaWNhdGlvbkVycm9yOiBcImtlc2FsYWhhbkR1cGxpa2FzaUt1bmNpIFwiLFxuICAgIGNvbmZpcm1EZWxldGU6IFwia29uZmlybWFzaUhhcHVzXCIsXG4gICAgY29uZmlybURlbGV0ZVRleHQ6IFwidGVrc0tvbmZpcm1hc2lIYXB1c1wiLFxuICAgIGFkZFJvd0xvY2F0aW9uOiBcInRhbWJhaExva2FzaUJhcmlzXCIsXG4gICAgYWRkUm93VGV4dDogXCJ0ZWtzVGFtYmFoQmFyaXNcIixcbiAgICByZW1vdmVSb3dUZXh0OiBcInRla3NIYXB1c0JhcmlzXCIsXG5cbiAgICBpdGVtczogXCJpdGVtc1wiLFxuICAgIGl0ZW1TaXplOiBcInVrdXJhbkJhcmFuZ1wiLFxuICAgIGNvbENvdW50OiBcImp1bWxhaEtvbG9tXCIsXG5cbiAgICB0ZW1wbGF0ZVRpdGxlOiBcImp1ZHVsVGVtcGxhdFwiLFxuICAgIHRlbXBsYXRlRGVzY3JpcHRpb246IFwiZGVza3JpcHNpVGVtcGxhdFwiLFxuICAgIGFsbG93QWRkUGFuZWw6IFwiYm9sZWhrYW5UYW1iYWhQYW5lbFwiLFxuICAgIGFsbG93UmVtb3ZlUGFuZWw6IFwiYm9sZWhrYW5IYXB1c1BhbmVsXCIsXG4gICAgcGFuZWxDb3VudDogXCJqdW1sYWhQYW5lbFwiLFxuICAgIG1pblBhbmVsQ291bnQ6IFwianVtbGFoTWluaW11bVBhbmVsXCIsXG4gICAgbWF4UGFuZWxDb3VudDogXCJqdW1sYWhNYWtzaW11bVBhbmVsXCIsXG4gICAgcGFuZWxzU3RhdGU6IFwia2VhZGFhblBhbmVsXCIsXG4gICAgcGFuZWxBZGRUZXh0OiBcInRla3NUYW1iYWhQYW5lbFwiLFxuICAgIHBhbmVsUmVtb3ZlVGV4dDogXCJ0ZWtzSGFwdXNQYW5lbFwiLFxuICAgIHBhbmVsUHJldlRleHQ6IFwidGVrc1BhbmVsU2ViZWx1bW55YVwiLFxuICAgIHBhbmVsTmV4dFRleHQ6IFwidGVrc1BhbmVsU2VsYW5qdXRueWFcIixcbiAgICBzaG93UXVlc3Rpb25OdW1iZXJzOiBcInRhbXBpbGthbk5vbW9yUGVydGFueWFhblwiLFxuICAgIHNob3dSYW5nZUluUHJvZ3Jlc3M6IFwidGFtcGlsa2FuUmVudGFuZ0JlcmxhbmdzdW5nXCIsXG4gICAgcmVuZGVyTW9kZTogXCJtb2RlUmVuZGVyXCIsXG4gICAgdGVtcGxhdGVUaXRsZUxvY2F0aW9uOiBcImxva2FzaUp1ZHVsVGVtcGxhdFwiLFxuXG4gICAgcmF0ZVZhbHVlczogXCJuaWxhaVRpbmdrYXRcIixcbiAgICByYXRlTWluOiBcInRpbmdrYXRNaW5pbXVtXCIsXG4gICAgcmF0ZU1heDogXCJ0aW5na2F0TWFrc2ltdW1cIixcbiAgICByYXRlU3RlcDogXCJsYW5na2FoVGluZ2thdFwiLFxuICAgIG1pblJhdGVEZXNjcmlwdGlvbjogXCJkZXNrcmlwc2lUaW5na2F0TWluaW11bVwiLFxuICAgIG1heFJhdGVEZXNjcmlwdGlvbjogXCJkZXNrcmlwc2lUaW5na2F0TWFrc2ltdW1cIixcblxuICAgIGlucHV0VHlwZTogXCJqZW5pc01hc3VrYW5cIixcbiAgICBzaXplOiBcInVrdXJhblwiLFxuXG4gICAgbG9jYWxlOiBcIkxva2FsXCIsXG4gICAgZm9jdXNGaXJzdFF1ZXN0aW9uQXV0b21hdGljOiBcImZvY3VzRmlyc3RRdWVzdGlvbkF1dG9tYXRpY1wiLFxuICAgIGNvbXBsZXRlZEh0bWw6IFwiSHRtbFNlbGVzYWlcIixcbiAgICBjb21wbGV0ZWRCZWZvcmVIdG1sOiBcImNvbXBsZXRlZEJlZm9yZUh0bWxcIixcbiAgICBsb2FkaW5nSHRtbDogXCJsb2FkaW5nSHRtbFwiLFxuICAgIHRyaWdnZXJzOiBcIlRyaWdnZXJcIixcbiAgICBjb29raWVOYW1lOiBcIm5hbWFDb29raWVcIixcbiAgICBzZW5kUmVzdWx0T25QYWdlTmV4dDogXCJLaXJpbSBoYXNpbCBrZSBoYWxhbWFuIHNlbGFuanV0bnlhXCIsXG4gICAgc2hvd05hdmlnYXRpb25CdXR0b25zOiBcIlRhbXBpbGthbiBUb21ib2wgTmF2aWdhc2lcIixcbiAgICBzaG93UHJldkJ1dHRvbjogXCJUYW1waWxrYW4gVG9tYm9sIFNlYmVsdW1ueWFcIixcbiAgICBzaG93UGFnZVRpdGxlczogXCJUYW1waWxrYW4gSnVkdWwgSGFsYW1hblwiLFxuICAgIHNob3dDb21wbGV0ZWRQYWdlOiBcIlRhbXBpbGthbiBLZXNlbHVydWhhbiBIYWxhbWFuXCIsXG4gICAgc2hvd1BhZ2VOdW1iZXJzOiBcIlRhbXBpbGthbiBOb21vciBIYWxhbWFuXCIsXG4gICAgcXVlc3Rpb25FcnJvckxvY2F0aW9uOiBcIkxva2FzaSBQZXJ0YW55YWFuIEVycm9yXCIsXG4gICAgc2hvd1Byb2dyZXNzQmFyOiBcIlRhbXBpbGthbiBwcm9ncmVzcyBiYXJcIixcbiAgICBtb2RlOiBcIm1vZGVcIixcbiAgICBnb05leHRQYWdlQXV0b21hdGljOiBcIktlIEhhbGFtYW4gU2VsYW5qdXRueWEgT3RvbWF0aXNcIixcbiAgICBjaGVja0Vycm9yc01vZGU6IFwiTW9kZSBQZXJpa3NhIEVycm9yXCIsXG4gICAgY2xlYXJJbnZpc2libGVWYWx1ZXM6IFwiQmVyc2loa2FuIE5pbGFpIFRhayBUZXJsaWhhdFwiLFxuICAgIHN0YXJ0U3VydmV5VGV4dDogXCJ0ZWtzTXVsYWlTdXJ2ZWlcIixcbiAgICBwYWdlUHJldlRleHQ6IFwidGVrc0hhbGFtYW5TZWJlbHVtbnlhXCIsXG4gICAgcGFnZU5leHRUZXh0OiBcInRla3NIYWxhbWFuU2VsYW5qdXRueWFcIixcbiAgICBjb21wbGV0ZVRleHQ6IFwidGVrc1NlbGVzYWlcIixcbiAgICByZXF1aXJlZFRleHQ6IFwidGVrc1dhamliXCIsXG4gICAgcXVlc3Rpb25TdGFydEluZGV4OiBcIkluZGV4IE11bGFpIFBlcnRhbnlhYW5cIixcbiAgICBxdWVzdGlvblRpdGxlVGVtcGxhdGU6IFwiVGVtcGxhdGUgSnVkdWwgUGVydGFueWFhblwiLFxuICAgIGZpcnN0UGFnZUlzU3RhcnRlZDogXCJIYWxhbWFuIFBlcnRhbWEgRGltdWxhaVwiLFxuICAgIGlzU2luZ2xlUGFnZTogXCJIYWxhbWFuIFR1bmdnYWw/XCIsXG4gICAgbWF4VGltZVRvRmluaXNoUGFnZTogXCJXYWt0dSBNYWtzIHVudHVrIE1lbnllbGVzYWlrYW4gSGFsYW1hblwiLFxuICAgIHNob3dUaW1lclBhbmVsOiBcIlRhbXBpbGthbiBQYW5lbCBQZW5nYXR1ciBXYWt0dVwiLFxuICAgIHNob3dUaW1lclBhbmVsTW9kZTogXCJUYW1waWxrYW4gc2hvd1RpbWVyUGFuZWxNb2RlXCIsXG5cbiAgICBkZWZhdWx0UGFuZWxWYWx1ZTogXCJuaWxhaSBwYW5lbCBkZWZhdWx0XCIsXG4gICAgZGVmYXVsdFJvd1ZhbHVlOiBcIm5pbGFpIGJhcmlzIGRlZmF1bHRcIixcbiAgICBoYXNOb25lOiBcIk1lbWlsaWtpIE5vbmVcIixcbiAgICBub25lVGV4dDogXCJOb24tdGVrc1wiLFxuXG4gICAgdGV4dDogXCJ0ZWtzXCIsXG4gIH1cbn07XG5cbmVkaXRvckxvY2FsaXphdGlvbi5sb2NhbGVzW1wiaWRcIl0gPSBpbmRvbmVzaWFuU3RyaW5ncztcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9sb2NhbGl6YXRpb24vaW5kb25lc2lhbi50cyIsImltcG9ydCB7IGVkaXRvckxvY2FsaXphdGlvbiB9IGZyb20gXCIuLi9lZGl0b3JMb2NhbGl6YXRpb25cIjtcblxudmFyIGl0YWxpYW5UcmFuc2xhdGlvbiA9IHtcbiAgLy8gc3RyaW5ncyBmb3Igc3VydmV5IHRlbXBsYXRlc1xuICBzdXJ2ZXk6IHtcbiAgICBlZGl0OiBcIk1vZGlmaWNhXCIsXG4gICAgZHJvcFF1ZXN0aW9uOiBcIkFnZ2l1bmdpIHVuYSBkb21hbmRhIHF1aVwiLFxuICAgIGNvcHk6IFwiQ29waWFcIixcbiAgICBhZGRUb1Rvb2xib3g6IFwiQWdnaXVuZ2kgYWxsYSB0b29sYm94XCIsXG4gICAgZGVsZXRlUGFuZWw6IFwiRWxpbWluYSBwYW5uZWxsb1wiLFxuICAgIGRlbGV0ZVF1ZXN0aW9uOiBcIkVsaW1pbmEgZG9tYW5kYVwiLFxuICAgIGNvbnZlcnRUbzogXCJDb252ZXJ0aSBhXCJcbiAgfSxcbiAgLy8gc3RyaW5ncyBmb3IgcXVlc3Rpb24gdHlwZXNcbiAgcXQ6IHtcbiAgICBjaGVja2JveDogXCJDYXNlbGxhIGRpIGNvbnRyb2xsbyBcIixcbiAgICBjb21tZW50OiBcIkNvbW1lbnRvXCIsXG4gICAgZHJvcGRvd246IFwiQ29tYm9cIixcbiAgICBmaWxlOiBcIkFyY2hpdmlvXCIsXG4gICAgaHRtbDogXCJIdG1sXCIsXG4gICAgbWF0cml4OiBcIk1hdHJpY2UgKHVuaWNhIG9wemlvbmUpXCIsXG4gICAgbWF0cml4ZHJvcGRvd246IFwiTWF0cmljZSAob3B6aW9uaSBtdWx0aXBsZSlcIixcbiAgICBtYXRyaXhkeW5hbWljOiBcIk1hdHJpY2UgKGRpbmFtaWNhKVwiLFxuICAgIG11bHRpcGxldGV4dDogXCJUZXN0byBtdWx0aXBsb1wiLFxuICAgIHBhbmVsOiBcIlBhbm5lbGxvXCIsXG4gICAgcGFuZWxkeW5hbWljOiBcIlBhbm5lbGxvIChkaW5hbWljbylcIixcbiAgICByYWRpb2dyb3VwOiBcIk9wemlvbmUgbXVsdGlwbGFcIixcbiAgICByYXRpbmc6IFwiVmFsdXRhemlvbmVcIixcbiAgICB0ZXh0OiBcIlRlc3RvIHNlbXBsaWNlXCIsXG4gICAgZXhwcmVzc2lvbjogXCJFc3ByZXNzaW9uZVwiXG4gIH0sXG4gIC8vIHN0cmluZ3MgZm9yIGVkaXRvclxuICBlZDoge1xuICAgIGRlZmF1bHRMb2NhbGU6IFwiRGVmYXVsdCAoezB9KVwiLFxuICAgIHN1cnZleTogXCJRdWVzdGlvbmFyaW9cIixcbiAgICBzZXR0aW5nczogXCJJbXBvc3RhemlvbmkgUXVlc3Rpb25hcmlvXCIsXG4gICAgZWRpdFN1cnZleTogXCJNb2RpZmljYSBRdWVzdGlvbmFyaW9cIixcbiAgICBhZGROZXdQYWdlOiBcIkFnZ2l1bmdpIE51b3ZhIFBhZ2luYVwiLFxuICAgIGRlbGV0ZVBhZ2U6IFwiRWxpbWluYSBQYWdpbmFcIixcbiAgICBlZGl0UGFnZTogXCJNb2RpZmljYSBQYWdpbmFcIixcbiAgICBuZXdQYWdlTmFtZTogXCJwYWdpbmFcIixcbiAgICBuZXdRdWVzdGlvbk5hbWU6IFwiZG9tYW5kYVwiLFxuICAgIG5ld1BhbmVsTmFtZTogXCJwYW5uZWxsb1wiLFxuICAgIHRlc3RTdXJ2ZXk6IFwiVGVzdGEgcXVlc3Rpb25hcmlvXCIsXG4gICAgdGVzdFN1cnZleUFnYWluOiBcIlRlc3RhIHF1ZXN0aW9uYXJpbyBkaSBudW92b1wiLFxuICAgIHRlc3RTdXJ2ZXlXaWR0aDogXCJMYXJnaGV6emEgcXVlc3Rpb25hcmlvOlwiLFxuICAgIGVtYmVkU3VydmV5OiBcIkluY2x1ZGkgcXVlc3Rpb25hcmlvXCIsXG4gICAgc2F2ZVN1cnZleTogXCJTYWx2YSBxdWVzdGlvbmFyaW9cIixcbiAgICBkZXNpZ25lcjogXCJEaXNlZ25hXCIsXG4gICAganNvbkVkaXRvcjogXCJNb2RpZmljYSBKU09OXCIsXG4gICAgdW5kbzogXCJBbm51bGxhXCIsXG4gICAgcmVkbzogXCJSaXBldGlcIixcbiAgICBvcHRpb25zOiBcIk9wemlvbmlcIixcbiAgICBnZW5lcmF0ZVZhbGlkSlNPTjogXCJHZW5lcmEgSlNPTiB2YWxpZG9cIixcbiAgICBnZW5lcmF0ZVJlYWRhYmxlSlNPTjogXCJHZW5lcmEgSlNPTiBsZWdnaWJpbGVcIixcbiAgICB0b29sYm94OiBcIlN0cnVtZW50aVwiLFxuICAgIGRlbFNlbE9iamVjdDogXCJFbGltaW5hIG9nZ2V0dG8gc2VsZXppb25hdG9cIixcbiAgICBlZGl0U2VsT2JqZWN0OiBcIk1vZGlmaWNhIG9nZ2V0dG8gc2VsZXppb25hdG9cIixcbiAgICBjb3JyZWN0SlNPTjogXCJQZXIgZmF2b3JlLCBjb3JyZWdnaSBpbCB0dW8gSlNPTlwiLFxuICAgIHN1cnZleVJlc3VsdHM6IFwiUmlzdWx0YXRpIGRlbCBxdWVzdGlvbmFyaW86IFwiLFxuICAgIG1vZGlmaWVkOiBcIk1vZGlmaWNhdG9cIixcbiAgICBzYXZpbmc6IFwiU2FsdmF0YWdnaW9cIixcbiAgICBzYXZlZDogXCJTYWx2YXRvXCJcbiAgfSxcbiAgLy9Qcm9wZXJ0eSBuYW1lcyBpbiB0YWJsZSBoZWFkZXJzXG4gIHBlbDoge1xuICAgIGlzUmVxdWlyZWQ6IFwiUmljaGllc3RvXCJcbiAgfSxcbiAgLy8gc3RyaW5ncyBmb3IgcHJvcGVydHkgZWRpdG9yc1xuICBwZToge1xuICAgIGFwcGx5OiBcIkFwcGxpY2FcIixcbiAgICBvazogXCJBY2NldHRhXCIsXG4gICAgY2FuY2VsOiBcIkFubnVsbGFcIixcbiAgICByZXNldDogXCJSZWltcG9zdGFcIixcbiAgICBjbG9zZTogXCJDaGl1ZGlcIixcbiAgICBkZWxldGU6IFwiRWxpbWluYVwiLFxuICAgIGFkZE5ldzogXCJOdW92b1wiLFxuICAgIHJlbW92ZUFsbDogXCJFbGltaW5hIHR1dHRvXCIsXG4gICAgZWRpdDogXCJNb2RpZmljYVwiLFxuICAgIGVtcHR5OiBcIjx2dW90bz5cIixcbiAgICBub3RFbXB0eTogXCI8bW9kaWZpY2EgdmFsb3JlPlwiLFxuICAgIGZhc3RFbnRyeTogXCJJbnNlcmltZW50byByYXBpZG9cIixcbiAgICBmb3JtRW50cnk6IFwiSW5zZXJpbWVudG8gY29uIGRhdGkgXCIsXG4gICAgdGVzdFNlcnZpY2U6IFwiVGVzdCBkZWwgc2Vydml6aW9cIixcbiAgICBjb25kaXRpb25TZWxlY3RRdWVzdGlvbjogXCJTZWxlemlvbmEgZG9tYW5kYS4uLlwiLFxuICAgIGNvbmRpdGlvbkJ1dHRvbkFkZDogXCJBZ2dpdW5naVwiLFxuICAgIGNvbmRpdGlvbkJ1dHRvblJlcGxhY2U6IFwiU29zdGl0dWlzY2lcIixcbiAgICBjb25kaXRpb25IZWxwOlxuICAgICAgXCJQZXIgZmF2b3JlLCBpbnNlcmlyZSB1bmEgZXNwcmVzc2lvbmUgYm9vbGVhbmEuIERvdnJlYmJlIHJlc3RpdHVpcmUgdHJ1ZSBwZXIgbWFudGVuZXJlIGxhIGRvbWFuZGEvcGFnaW5hIHZpc2liaWxlLiBBZCBlc2VtcGlvOiB7ZG9tYW5kYTF9ID0gJ3ZhbG9yZTEnIG9yICh7ZG9tYW5kYTJ9ICoge2RvbWFuZGE0fSAgPiAyMCBhbmQge2RvbWFuZGEzfSA8IDUpXCIsXG4gICAgZXhwcmVzc2lvbkhlbHA6XG4gICAgICBcIlBlciBmYXZvcmUgaW5zZXJpcmUgdW5hIGVzcHJlc3Npb25lLiBQdW9pIHVzYXJlIHBhcmVudGVzaSBncmFmZmUgcGVyIG90dGVuZXJlIGwnYWNjZXNzbyBhaSB2YWxvcmkgZGVsbGUgZG9tYW5kZTogJ3tkb21hbmRhMX0gKyB7ZG9tYW5kYTJ9JywgJyh7cHJlenpvfSp7cXRhfSkgKiAoMTAwIC0ge3Njb250b30pJ1wiLFxuICAgIGFjZUVkaXRvckhlbHA6XG4gICAgICBcIlByZW1pIGN0cmwrc3BhY2UgcGVyIG90dGVuZXJlIHVuIHN1Z2dlcmltZW50byBzdWwgY29tcGxldGFtZW50byBkZWxsJ2VzcHJlc3Npb25lXCIsXG4gICAgYWNlRWRpdG9yUm93VGl0bGU6IFwiUmlnYSBjb3JyZW50ZVwiLFxuICAgIGFjZUVkaXRvclBhbmVsVGl0bGU6IFwiUGFubmVsbG8gQ29ycmVudGVcIixcbiAgICBzaG93TW9yZTogXCJQZXIgZmF2b3JlLCBwZXIgbWFnZ2lvcmkgZGV0dGFnbGkgZ3VhcmRhcmUgbGEgZG9jdW1lbnRhemlvbmVcIixcbiAgICBhc3Npc3RhbnRUaXRsZTogXCJEb21hbmRlIGRpc3BvbmliaWxpOlwiLFxuICAgIGNlbGxzRW1wdHlSb3dzQ29sdW1uczogXCJEb3ZyZWJiZSBlc3NlcmNpIGFsbWVubyB1bmEgY29sb25uYSBvIHJpZ2FcIixcbiAgICBwcm9wZXJ0eUlzRW1wdHk6IFwiUGVyIGZhdm9yZSwgaW5zZXJpcmUgdW4gdmFsb3JlIHBlciBsYSBwcm9waWV0w6BcIixcbiAgICB2YWx1ZTogXCJWYWxvcmVcIixcbiAgICB0ZXh0OiBcIlRlc3RvXCIsXG4gICAgY29sdW1uRWRpdDogXCJNb2RpZmljYSBjb2xvbm5hOiB7MH1cIixcbiAgICBpdGVtRWRpdDogXCJNb2RpZmljYSBlbGVtZW50bzogezB9XCIsXG4gICAgdXJsOiBcIlVSTFwiLFxuICAgIHBhdGg6IFwiUGVyY29yc29cIixcbiAgICB2YWx1ZU5hbWU6IFwiTm9tZSBWYWxvcmVcIixcbiAgICB0aXRsZU5hbWU6IFwiTm9tZSBUaXRvbG9cIixcbiAgICBoYXNPdGhlcjogXCJBbHRyaSBlbGVtZW50aVwiLFxuICAgIG90aGVyVGV4dDogXCJUZXN0byBhbHRyaSBlbGVtZW50aVwiLFxuICAgIG5hbWU6IFwiTm9tZVwiLFxuICAgIHRpdGxlOiBcIlRpdG9sb1wiLFxuICAgIGNlbGxUeXBlOiBcIlRpcG8gZGkgY2VsbGFcIixcbiAgICBjb2xDb3VudDogXCJOdW1lcm8gZGkgY29sb25uZVwiLFxuICAgIGNob2ljZXNPcmRlcjogXCJTZWxlemlvbmEgYWx0cmUgb3B6aW9uaVwiLFxuICAgIHZpc2libGU6IFwiVmlzaWJpbGVcIixcbiAgICBpc1JlcXVpcmVkOiBcIlJpY2hpZXN0b1wiLFxuICAgIHN0YXJ0V2l0aE5ld0xpbmU6IFwiTnVvdmEgbGluZWFcIixcbiAgICByb3dzOiBcIk51bWVybyBkaSByaWdoZVwiLFxuICAgIHBsYWNlSG9sZGVyOiBcIlRlc3RvIGRpIHJpZmVyaW1lbnRvXCIsXG4gICAgc2hvd1ByZXZpZXc6IFwiTW9zdHJhIGFudGVwcmltYVwiLFxuICAgIHN0b3JlRGF0YUFzVGV4dDogXCJWZWRpIGlsIGNvbnRlbnV0byBKU09OIGNvbWUgdGVzdG9cIixcbiAgICBtYXhTaXplOiBcIkRpbWVuc2lvbmUgbWFzc2ltYSBpbiBieXRlc1wiLFxuICAgIGltYWdlSGVpZ2h0OiBcIkFsdGV6emEgaW1tYWdpbmVcIixcbiAgICBpbWFnZVdpZHRoOiBcIkxhcmdoZXp6YSBpbW1hZ2luZVwiLFxuICAgIHJvd0NvdW50OiBcIk51bWVybyBkZWxsZSByaWdoZVwiLFxuICAgIGFkZFJvd1RleHQ6IFwiVGVzdG8gZGVsIHB1bHNhbnRlIHBlciBhZ2dpdW5nZXJlIHVuYSBudW92YSByaWdoYVwiLFxuICAgIHJlbW92ZVJvd1RleHQ6IFwiVGVzdG8gZGVsIHB1bHNhbnRlIHBlciBlbGltaW5hcmUgdW5hIHJpZ2hhXCIsXG4gICAgbWluUmF0ZURlc2NyaXB0aW9uOiBcIkRlc2NyaXppb25lIGRlbCB2YWxvcmUgbWluaW1vXCIsXG4gICAgbWF4UmF0ZURlc2NyaXB0aW9uOiBcIkRlc2NyaXppb25lIGRlbCB2YWxvcmUgbWFzc2ltb1wiLFxuICAgIGlucHV0VHlwZTogXCJUaXBvIGRpIGluc2VyaW1lbnRvXCIsXG4gICAgb3B0aW9uc0NhcHRpb246IFwiVGl0b2xvIGRlbGwnb3B6aW9uZVwiLFxuICAgIGRlZmF1bHRWYWx1ZTogXCJWYWxvcmUgZGVmYXVsdFwiLFxuICAgIGNlbGxzRGVmYXVsdFJvdzogXCJWYWxvcmUgZGVmYXVsdCBjZWxsZVwiLFxuICAgIHN1cnZleUVkaXRvclRpdGxlOiBcIkVkaXQgc3VydmV5IHNldHRpbmdzXCIsXG4gICAgcUVkaXRvclRpdGxlOiBcIk1vZGlmaWNhIGRvbWFuZGE6IHswfVwiLFxuICAgIC8vc3VydmV5XG4gICAgc2hvd1RpdGxlOiBcIk1vc3RyYS9uYXNjb25kaSB0aXRvbG9cIixcbiAgICBsb2NhbGU6IFwiTGluZ3VhIERlZmF1bHRcIixcbiAgICBtb2RlOiBcIk1vZGFsaXTDoCAobW9kaWZpY2Evc29sYSBsZXR0dXJhKVwiLFxuICAgIGNsZWFySW52aXNpYmxlVmFsdWVzOiBcIlB1bGlzY2hpIHZhbG9yaSBub24gdmlzaWJpbGlcIixcbiAgICBjb29raWVOYW1lOlxuICAgICAgXCJOb21lIGNvb2tpZSAocGVyIGRpc2FiaWxpdGFyZSBlc2VndWkgaWwgcXVlc3Rpb25hcmlvIGR1ZSB2b2x0ZSBpbiBsb2NhbGUpXCIsXG4gICAgc2VuZFJlc3VsdE9uUGFnZU5leHQ6XG4gICAgICBcIkludmlhIGkgcmlzdWx0YXRpIGRlbCBzb25kYWdnaW8gYWxsYSBwYWdpbmEgc3VjY2Vzc2l2YVwiLFxuICAgIHN0b3JlT3RoZXJzQXNDb21tZW50OiBcIk1lbW9yaXp6YSBpbCB2YWxvcmUgJ2FsdHJpJyBpbiBjYW1waSBzZXBhcmF0aVwiLFxuICAgIHNob3dQYWdlVGl0bGVzOiBcIlZpc3VhbGl6emEgdGl0b2xpIHBhZ2luYVwiLFxuICAgIHNob3dQYWdlTnVtYmVyczogXCJWaXN1YWxpenphIG51bWVyaSBwYWdpbmFcIixcbiAgICBwYWdlUHJldlRleHQ6IFwiVGVzdG8gYm90dG9uZSBwYWdpbmEgcHJlY2VkZW50ZVwiLFxuICAgIHBhZ2VOZXh0VGV4dDogXCJUZXN0byBib3R0b25lIHBhZ2luYSBzdWNjZXNzaXZhXCIsXG4gICAgY29tcGxldGVUZXh0OiBcIlRlc3RvIGJvdHRvbmUgQ29tcGxldGF0b1wiLFxuICAgIHN0YXJ0U3VydmV5VGV4dDogXCJUZXN0byBib3R0b25lIEluaXppYVwiLFxuICAgIHNob3dOYXZpZ2F0aW9uQnV0dG9uczpcbiAgICAgIFwiVmlzdWFsaXp6YSBib3R0b25pIGRpIG5hdmlnYXppb25lIChuYXZpZ2F6aW9uZSBkaSBkZWZhdWx0KVwiLFxuICAgIHNob3dQcmV2QnV0dG9uOlxuICAgICAgXCJWaXN1YWxpenphIGJvdHRvbmUgcHJlY2VkZW50ZShsJ3V0ZW50ZSBwdcOyIHRvcm5hcmUgYWxsYSBwYWdpbmEgcHJlY2VkZW50ZSlcIixcbiAgICBmaXJzdFBhZ2VJc1N0YXJ0ZWQ6XG4gICAgICBcIkxhIHByaW1hIHBhZ2luYSBuZWwgcXVlc3Rpb25hcmlvIMOoIGxhIHBhZ2luYSBpbml6aWFsZS5cIixcbiAgICBzaG93Q29tcGxldGVkUGFnZTpcbiAgICAgIFwiVmlzdWFsaXp6YSBsYSBwYWdpbmEgY29tcGxldGF0YSBhbGxhIGZpbmUgZGVsIHF1ZXN0aW9uYXJpbyAoY29tcGxldGVkSHRtbClcIixcbiAgICBnb05leHRQYWdlQXV0b21hdGljOlxuICAgICAgXCJSaXNwb25kZW5kbyBhIHR1dHRlIGxlIGRvbWFuZGUsIHZhaSBhbGxhIHBhZ2luYSBzdWNjZXNzaXZhIGluIGF1dG9tYXRpY28uXCIsXG4gICAgc2hvd1Byb2dyZXNzQmFyOiBcIlZpc3VhbGl6emEgYmFycmEgZGkgYXZhbnphbWVudG9cIixcbiAgICBxdWVzdGlvblRpdGxlTG9jYXRpb246IFwiUG9zaXppb25lIHRpdG9sbyBkb21hbmRhXCIsXG4gICAgcmVxdWlyZWRUZXh0OiBcIlNpbWJvbG8gZG9tYW5kYSBvYmJsaWdhdG9yaWEsIGVzZW1waW8gKCopXCIsXG4gICAgcXVlc3Rpb25TdGFydEluZGV4OiBcIkxhIGRvbWFuZGEgaW5pemlhIGNvbiBsJ2luZGljZSAoMSwgMiBvcHB1cmUgJ0EnLCAnYScpXCIsXG4gICAgc2hvd1F1ZXN0aW9uTnVtYmVyczogXCJWaXN1YWxpenphIGkgbnVtZXJpIGRpIGRvbWFuZGFcIixcbiAgICBxdWVzdGlvblRpdGxlVGVtcGxhdGU6XG4gICAgICBcIlRlbXBsYXRlIHRpdG9sbyBkZWxsYSBkb21hbmRhLCBpbCBkZWZhdWx0IMOoOiAne25vfS4ge3JlcXVpcmV9IHt0aXRsZX0nXCIsXG4gICAgcXVlc3Rpb25FcnJvckxvY2F0aW9uOiBcIlBvc2l6aW9uZSBub3RpZmljYSBlcnJvcmUgc3VsbGEgZG9tYW5kYVwiLFxuICAgIGZvY3VzRmlyc3RRdWVzdGlvbkF1dG9tYXRpYzpcbiAgICAgIFwiU3VsIGNhbWJpbyBwYWdpbmEsIHBvc2l6aW9uYSBpbCBjdXJzb3JlIHN1bGxhIHByaW1hIGRvbWFuZGFcIixcbiAgICBxdWVzdGlvbnNPcmRlcjogXCJPcmRpbmUgZGkgZWxlbWVudGkgc3VsbGEgcGFnaW5hXCIsXG4gICAgbWF4VGltZVRvRmluaXNoOiBcIlRlbXBvIG1hc3NpbW8gcGVyIHRlcm1pbmFyZSBpbCBzb25kYWdnaW9cIixcbiAgICBtYXhUaW1lVG9GaW5pc2hQYWdlOiBcIlRlbXBvIG1hc3NpbW8gcGVyIHRlcm1pbmFyZSB1bmEgcGFnaW5hIGRlbCBzb25kYWdnaW9cIixcbiAgICBzaG93VGltZXJQYW5lbDogXCJWaXN1YWxpenphIHBhbm5lbGxvIHRpbWVyXCIsXG4gICAgc2hvd1RpbWVyUGFuZWxNb2RlOiBcIlZpc3VhbGl6emEgbW9kYWxpdMOgIHRpbWVyIHBhbm5lbGxvXCIsXG4gICAgcmVuZGVyTW9kZTogXCJNb2RhbGl0w6AgZGkgcmVuZGVyaW5nXCIsXG4gICAgYWxsb3dBZGRQYW5lbDogXCJDb25zZW50aSBsJ2FnZ2l1bnRhIGRpIHVuIHBhbm5lbGxvXCIsXG4gICAgYWxsb3dSZW1vdmVQYW5lbDogXCJDb25zZW50aSBsYSByaW1vemlvbmUgZGkgdW4gcGFubmVsbG9cIixcbiAgICBwYW5lbEFkZFRleHQ6IFwiQWdnaXVuZ2kgdGVzdG8gcGFubmVsbG9cIixcbiAgICBwYW5lbFJlbW92ZVRleHQ6IFwiUmVtdW92aSB0ZXN0byBwYW5uZWxsb1wiLFxuICAgIGlzU2luZ2xlUGFnZTogXCJWaXN1YWxpenphIHR1dHRpIGdsaSBlbGVtZW50aSBzdSB1bmEgcGFnaW5hXCIsXG4gICAgdGFiczoge1xuICAgICAgZ2VuZXJhbDogXCJHZW5lcmFsZVwiLFxuICAgICAgZmlsZU9wdGlvbnM6IFwiT3B6aW9uaVwiLFxuICAgICAgaHRtbDogXCJNb2RpZmljYSBIdG1sXCIsXG4gICAgICBjb2x1bW5zOiBcIkNvbG9ubmVcIixcbiAgICAgIHJvd3M6IFwiUmlnaGVcIixcbiAgICAgIGNob2ljZXM6IFwiU2NlbHRlXCIsXG4gICAgICB2aXNpYmxlSWY6IFwiVmlzaWJpbGUgc2VcIixcbiAgICAgIHJhdGVWYWx1ZXM6IFwiVmFsb3JpIGRlbGxhIGNsYXNzaWZpY2FcIixcbiAgICAgIGNob2ljZXNCeVVybDogXCJPcHppb25pIGRhbCBXZWJcIixcbiAgICAgIG1hdHJpeENob2ljZXM6IFwiT3B6aW9uaSBwcmVkZWZpbml0ZVwiLFxuICAgICAgbXVsdGlwbGVUZXh0SXRlbXM6IFwiVm9jaSBkaSB0ZXN0b1wiLFxuICAgICAgdmFsaWRhdG9yczogXCJWYWxpZGF6aW9uaVwiLFxuICAgICAgbmF2aWdhdGlvbjogXCJOYXZpZ2F6aW9uZVwiLFxuICAgICAgcXVlc3Rpb246IFwiRG9tYW5kYVwiLFxuICAgICAgY29tcGxldGVkSHRtbDogXCJIdG1sIHF1ZXN0aW9uYXJpbyBjb21wbGV0YXRvXCIsXG4gICAgICBsb2FkaW5nSHRtbDogXCJIdG1sIGNhcmljYW1lbnRvIHF1ZXN0aW9uYXJpb1wiLFxuICAgICAgdGltZXI6IFwiVGltZXIvUXVpelwiLFxuICAgICAgdHJpZ2dlcnM6IFwiVHJpZ2dlcnNcIixcbiAgICAgIHRlbXBsYXRlVGl0bGU6IFwiVGVtcGxhdGUgdGl0b2xvXCJcbiAgICB9LFxuICAgIGVkaXRQcm9wZXJ0eTogXCJNb2RpZmNhIHByb3BpZXTDoCAnezB9J1wiLFxuICAgIGl0ZW1zOiBcIlsgRWxlbWVudG86IHswfSBdXCIsXG4gICAgZW50ZXJOZXdWYWx1ZTogXCJTaSBwcmVnYSBkaSBpbnNlcmlyZSBpbCB2YWxvcmUuXCIsXG4gICAgbm9xdWVzdGlvbnM6IFwiTm9uIGMnw6ggYWxjdW4gZHViYmlvIG5lbCBxdWVzdGlvbmFyaW8uXCIsXG4gICAgY3JlYXRldHJpZ2dlcjogXCJTaSBwcmVnYSBkaSBjcmVhcmUgdW4gdHJpZ2dlclwiLFxuICAgIHRyaWdnZXJPbjogXCJBdHRpdmF6aW9uZSBcIixcbiAgICB0cmlnZ2VyTWFrZVBhZ2VzVmlzaWJsZTogXCJSZW5kZXJlIHZpc2liaWxpIGxlIHBhZ2luZTpcIixcbiAgICB0cmlnZ2VyTWFrZVF1ZXN0aW9uc1Zpc2libGU6IFwiUmVuZGVyZSB2aXNpYmlsaSBsZSBkb21hbmRlOlwiLFxuICAgIHRyaWdnZXJDb21wbGV0ZVRleHQ6IFwiQ29tcGxldGFyZSBpbCBxdWVzdGlvbmFyaW8sIGluIGNhc28gZGkgc3VjY2Vzc28uXCIsXG4gICAgdHJpZ2dlck5vdFNldDogXCJOb24gaW1wb3N0YXRvXCIsXG4gICAgdHJpZ2dlclJ1bklmOiBcIkVzZWd1aSBzZVwiLFxuICAgIHRyaWdnZXJTZXRUb05hbWU6IFwiQ2FtYmlhIGlsIHZhbG9yZSBhOiBcIixcbiAgICB0cmlnZ2VyU2V0VmFsdWU6IFwiYTogXCIsXG4gICAgdHJpZ2dlcklzVmFyaWFibGU6XG4gICAgICBcIk5vbiBwb3NpemlvbmFyZSBsYSB2YXJpYWJpbGUgZGVsIHJpc3VsdGF0byBkZWwgcXVlc3Rpb25hcmlvXCJcbiAgfSxcbiAgLy8gc3RyaW5ncyBmb3Igb3BlcmF0b3JzXG4gIG9wOiB7XG4gICAgZW1wdHk6IFwiw6ggdnVvdG9cIixcbiAgICBub3RlbXB0eTogXCJub24gw6ggdnVvdG8gXCIsXG4gICAgZXF1YWw6IFwiw6ggdWd1YWxlIGFcIixcbiAgICBub3RlcXVhbDogXCJub24gw6ggdWd1YWxlIGFcIixcbiAgICBjb250YWluczogXCJjb250aWVuZVwiLFxuICAgIG5vdGNvbnRhaW5zOiBcIm5vbiBjb250aWVuZVwiLFxuICAgIGdyZWF0ZXI6IFwibWFnZ2lvcmVcIixcbiAgICBsZXNzOiBcIm1pbm9yZVwiLFxuICAgIGdyZWF0ZXJvcmVxdWFsOiBcIm1hZ2dpb3JlIG8gdWd1YWxlXCIsXG4gICAgbGVzc29yZXF1YWw6IFwibWlub3JlIG8gdWd1YWxlXCJcbiAgfSxcbiAgLy8gc3RyaW5ncyBmb3IgZW1iZWQgd2luZG93XG4gIGV3OiB7XG4gICAgYW5ndWxhcjogXCJWZXJzaW9uZSBwZXIgQW5ndWxhclwiLFxuICAgIGpxdWVyeTogXCJWZXJzaW9uZSBwZXIgalF1ZXJ5XCIsXG4gICAga25vY2tvdXQ6IFwiVmVyc2lvbmUgcGVyIEtub2Nrb3V0XCIsXG4gICAgcmVhY3Q6IFwiVmVyc2lvbmUgcGVyIFJlYWN0XCIsXG4gICAgdnVlOiBcIlZlcnNpb25lIHBlciBWdWVcIixcbiAgICBib290c3RyYXA6IFwiUGVyIGZyYW1ld29yayBib290c3RyYXBcIixcbiAgICBzdGFuZGFyZDogXCJObyBib290c3RyYXBcIixcbiAgICBzaG93T25QYWdlOiBcIlZpc3VhbGl6emEgaW4gcXVlc3RhIHBhZ2luYVwiLFxuICAgIHNob3dJbldpbmRvdzogXCJWaXN1YWxpenphIGluIHVuYSBmaW5lc3RyYVwiLFxuICAgIGxvYWRGcm9tU2VydmVyOiBcIkNhcmljYSBKU09OIGRhbCBzZXJ2ZXJcIixcbiAgICB0aXRsZVNjcmlwdDogXCJTY3JpcHRzIGUgc3RpbGlcIixcbiAgICB0aXRsZUh0bWw6IFwiSFRNTFwiLFxuICAgIHRpdGxlSmF2YVNjcmlwdDogXCJKYXZhU2NyaXB0XCJcbiAgfSxcbiAgLy9UZXN0IFN1cnZleVxuICB0czoge1xuICAgIHNlbGVjdFBhZ2U6IFwiU2VsZXppb25hIGxhIHBhZ2luYSBkYSB0ZXN0YXJlOlwiLFxuICAgIHNob3dJbnZpc2libGVFbGVtZW50czogXCJNb3N0cmEgZWxlbWVudGkgbmFzY29zdGlcIlxuICB9LFxuICB2YWxpZGF0b3JzOiB7XG4gICAgYW5zd2VyY291bnR2YWxpZGF0b3I6IFwibnVtZXJvIHJpc3Bvc3RlXCIsXG4gICAgZW1haWx2YWxpZGF0b3I6IFwiZS1tYWlsXCIsXG4gICAgbnVtZXJpY3ZhbGlkYXRvcjogXCJudW1lcmljb1wiLFxuICAgIHJlZ2V4dmFsaWRhdG9yOiBcInJlZ2V4XCIsXG4gICAgdGV4dHZhbGlkYXRvcjogXCJ0ZXN0b1wiXG4gIH0sXG4gIHRyaWdnZXJzOiB7XG4gICAgY29tcGxldGV0cmlnZ2VyOiBcImNvbXBsZXRhIHF1ZXN0aW9uYXJpb1wiLFxuICAgIHNldHZhbHVldHJpZ2dlcjogXCJzZXR0YSB2YWxvcmVcIixcbiAgICB2aXNpYmxldHJpZ2dlcjogXCJjYW1iaWEgdmlzaWJpbGl0w6BcIlxuICB9LFxuICAvL1Byb3BlcnRpZXNcbiAgcDoge1xuICAgIG5hbWU6IFwiTm9tZVwiLFxuICAgIHRpdGxlOiB7XG4gICAgICBuYW1lOiBcIlRpdG9sb1wiLFxuICAgICAgdGl0bGU6IFwiTGFzY2lhbG8gdnVvdG8sIHNlIMOoIHVndWFsZSBhICdOb21lJ1wiXG4gICAgfSxcblxuICAgIHZpc2libGU6IFwiVmlzaWJpbGVcIixcbiAgICB2aXNpYmxlSWY6IFwiVmlzaWJpbGUgU2VcIixcbiAgICBkZXNjcmlwdGlvbjogXCJEZXNjcml6aW9uZVwiLFxuICAgIGlzUmVxdWlyZWQ6IFwiUmljaGllc3RvXCIsXG4gICAgcmVxdWlyZWRJZjogXCJSaWNoaWVzdG8gU2VcIixcbiAgICBwYWdlOiBcIlBhZ2luYVwiLFxuICAgIHdpZHRoOiBcIkxhcmdoZXp6YVwiLFxuICAgIGVuYWJsZUlmOiBcIkFiaWxpdGF0byBzZVwiLFxuICAgIGRlZmF1bHRWYWx1ZTogXCJWYWxvcmUgZGkgZGVmYXVsdFwiLFxuICAgIHJlYWRPbmx5OiBcIlNvbGEgTGV0dHVyYVwiLFxuICAgIGhhc0NvbW1lbnQ6IFwiSGEgdW4gY29tbWVudG9cIixcbiAgICBoYXNPdGhlcjogXCJIYSBhbHRyb1wiLFxuICAgIGNob2ljZXM6IFwiU2NlbHRlXCIsXG4gICAgY2hvaWNlc09yZGVyOiBcIk9yZGluZSBTY2VsdGVcIixcbiAgICBjaG9pY2VzQnlVcmw6IFwiVXJsIFNjZWx0ZVwiLFxuICAgIGxhYmVsOiBcImxhYmVsXCIsXG4gICAgc2hvd1RpdGxlOiBcIk1vc3RyYSBUaXRvbG9cIixcbiAgICB2YWx1ZVRydWU6IFwiVmFsb3JlIFRydWVcIixcbiAgICB2YWx1ZUZhbHNlOiBcIlZhbG9yZSBGYWxzZVwiLFxuICAgIGNvbHM6IFwiQ29sb25uZVwiLFxuICAgIHJvd3M6IFwiUmlnaGVcIixcbiAgICBjdXJyZW5jeTogXCJWYWx1dGFcIixcbiAgICBzaG93UHJldmlldzogXCJWaXN1YWxpenphIEFudGVwcmltYVwiLFxuICAgIGh0bWw6IFwiaHRtbFwiLFxuICAgIHJhdGVWYWx1ZXM6IFwiVmFsb3JpIGRlbGxhIGNsYXNzaWZpY2FcIixcbiAgICBzaXplOiBcIkRpbWVuc2lvbmVcIixcbiAgICBsb2NhbGU6IFwibG9jYWxlXCIsXG4gICAgbWluVmFsdWU6IFwiVmFsb3JlIG1pbmltb1wiLFxuICAgIG1heFZhbHVlOiBcIlZhbG9yZSBtYXNzaW1vXCIsXG4gICAgbWluTGVuZ3RoOiBcIkx1bmdoZXp6YSBtaW5pbWFcIixcbiAgICBtYXhMZW5ndGg6IFwiTHVuZ2hlenphIG1hc3NpbWFcIixcbiAgICBhbGxvd0RpZ2l0czogXCJDb25zZW50aSBjaWZyZVwiLFxuICAgIHJlZ2V4OiBcIkVzcHJlc3Npb25lIHJlZ29sYXJlXCJcbiAgfVxufTtcblxuZWRpdG9yTG9jYWxpemF0aW9uLmxvY2FsZXNbXCJpdFwiXSA9IGl0YWxpYW5UcmFuc2xhdGlvbjtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9sb2NhbGl6YXRpb24vaXRhbGlhbi50cyIsImltcG9ydCB7IGVkaXRvckxvY2FsaXphdGlvbiwgZGVmYXVsdFN0cmluZ3MgfSBmcm9tIFwiLi4vZWRpdG9yTG9jYWxpemF0aW9uXCI7XG5cbmV4cG9ydCB2YXIga29yZWFuU3RyaW5ncyA9IHtcbiAgLy9zdXJ2ZXkgdGVtcGxhdGVzXG4gIHN1cnZleToge1xuICAgIGVkaXQ6IFwi7Y647KeRXCIsXG4gICAgZHJvcFF1ZXN0aW9uOiBcIuyZvOyqvSDrj4Tqtazsg4HsnpDsl5DshJwg7KeI66y47J2EIOyXrOq4sOyXkCDrhpPsnLzsi63si5zsmKQuXCIsXG4gICAgY29weTogXCLrs7XsgqxcIixcbiAgICBhZGRUb1Rvb2xib3g6IFwi64+E6rWs7IOB7J6Q7JeQIOy2lOqwgFwiLFxuICAgIGRlbGV0ZVBhbmVsOiBcIu2MqOuEkCDsgq3soJxcIixcbiAgICBkZWxldGVRdWVzdGlvbjogXCLsp4jrrLgg7IKt7KCcXCIsXG4gICAgY29udmVydFRvOiBcIuuLpOydjOycvOuhnCDrs4Dqsr1cIixcbiAgICBkcmFnOiBcIu2VreuqqSDrgYzslrTsmKTquLBcIlxuICB9LFxuICAvL3F1ZXN0aW9uVHlwZXNcbiAgcXQ6IHtcbiAgICBkZWZhdWx0OiBcIuq4sOuzuOqwklwiLFxuICAgIGNoZWNrYm94OiBcIuyytO2BrOuwleyKpFwiLFxuICAgIGNvbW1lbnQ6IFwi7ISk66qFXCIsXG4gICAgZHJvcGRvd246IFwi65Oc66Gt64uk7Jq0XCIsXG4gICAgZmlsZTogXCLtjIzsnbxcIixcbiAgICBodG1sOiBcIkhUTUxcIixcbiAgICBtYXRyaXg6IFwi7ZaJ66CsICjri6jsnbwg7ISg7YOdKVwiLFxuICAgIG1hdHJpeGRyb3Bkb3duOiBcIu2WieugrCAo67O17IiYIOyEoO2DnSlcIixcbiAgICBtYXRyaXhkeW5hbWljOiBcIu2WieugrCAo64+Z7KCBIO2WiSlcIixcbiAgICBtdWx0aXBsZXRleHQ6IFwi7YWN7Iqk7Yq4IOyDgeyekCDqt7jro7lcIixcbiAgICBwYW5lbDogXCLtjKjrhJBcIixcbiAgICBwYW5lbGR5bmFtaWM6IFwi7Yyo64SQICjrj5nsoIEg7Yyo64SQKVwiLFxuICAgIHJhZGlvZ3JvdXA6IFwi652865SU7JikIOq3uOujuVwiLFxuICAgIHJhdGluZzogXCLrk7HquIlcIixcbiAgICB0ZXh0OiBcIu2FjeyKpO2KuCDsg4HsnpBcIixcbiAgICBib29sZWFuOiBcIuu2iOumsChib29sZWFuKVwiLFxuICAgIGV4cHJlc3Npb246IFwi7ZGc7ZiE7IudXCJcbiAgfSxcbiAgLy9TdHJpbmdzIGluIEVkaXRvclxuICBlZDoge1xuICAgIHN1cnZleTogXCLshKTrrLjsp4BcIixcbiAgICBzZXR0aW5nczogXCLshKTsoJVcIixcbiAgICBlZGl0U3VydmV5OiBcIuyEpOusuOyngCDtjrjsp5FcIixcbiAgICBhZGROZXdQYWdlOiBcIuyDiCDtjpjsnbTsp4Ag7LaU6rCAXCIsXG4gICAgbW92ZVJpZ2h0OiBcIuyYpOuluOyqveycvOuhnCDsiqTtgazroaRcIixcbiAgICBtb3ZlTGVmdDogXCLsmbzsqr3snLzroZwg7Iqk7YGs66GkXCIsXG4gICAgZGVsZXRlUGFnZTogXCLtjpjsnbTsp4Ag7IKt7KCcXCIsXG4gICAgZWRpdFBhZ2U6IFwi7Y6Y7J207KeAIO2OuOynkVwiLFxuICAgIGVkaXQ6IFwi7Y647KeRXCIsXG4gICAgbmV3UGFnZU5hbWU6IFwi7Y6Y7J207KeAXCIsXG4gICAgbmV3UXVlc3Rpb25OYW1lOiBcIuyniOusuFwiLFxuICAgIG5ld1BhbmVsTmFtZTogXCLtjKjrhJBcIixcbiAgICB0ZXN0U3VydmV5OiBcIu2FjOyKpO2KuCDshKTrrLjsp4BcIixcbiAgICB0ZXN0U3VydmV5QWdhaW46IFwi7YWM7Iqk7Yq4IOyEpOusuOyngCDri6Tsi5ztlZjquLBcIixcbiAgICB0ZXN0U3VydmV5V2lkdGg6IFwi7ISk66y47KeAIOuEiOu5hDogXCIsXG4gICAgZW1iZWRTdXJ2ZXk6IFwi64K07J6lIOyEpOusuOyngFwiLFxuICAgIHNhdmVTdXJ2ZXk6IFwi7ISk66y47KeAIOyggOyepVwiLFxuICAgIGRlc2lnbmVyOiBcIuyEpOusuOyngCDrlJTsnpDsnbhcIixcbiAgICBqc29uRWRpdG9yOiBcIkpTT04g7Y647KeR6riwXCIsXG4gICAgdW5kbzogXCLsi6Ttlokg7Leo7IaMXCIsXG4gICAgcmVkbzogXCLrs7Xsm5BcIixcbiAgICBvcHRpb25zOiBcIuyYteyFmFwiLFxuICAgIGdlbmVyYXRlVmFsaWRKU09OOiBcIkpTT04g642w7J207YSwIOyDneyEsVwiLFxuICAgIGdlbmVyYXRlUmVhZGFibGVKU09OOiBcIuyDneyEsSBKU09OIOuNsOydtO2EsCDsnb3quLBcIixcbiAgICB0b29sYm94OiBcIuuPhOq1rOyDgeyekFwiLFxuICAgIHRvb2xib3hHZW5lcmFsQ2F0ZWdvcnk6IFwi7J2867CYXCIsXG4gICAgZGVsU2VsT2JqZWN0OiBcIuyEoO2Dne2VnCDqsJ3ssrQg7IKt7KCcXCIsXG4gICAgZWRpdFNlbE9iamVjdDogXCLshKDtg53tlZwg6rCd7LK0IO2OuOynkVwiLFxuICAgIGNvcnJlY3RKU09OOiBcIkpTT04g642w7J207YSw66W8IOyImOygle2VmOyLreyLnOyYpC5cIixcbiAgICBzdXJ2ZXlSZXN1bHRzOiBcIuyEpOusuCDqsrDqs7w6IFwiLFxuICAgIG1vZGlmaWVkOiBcIuyImOygleuQqFwiLFxuICAgIHNhdmluZzogXCLsoIDsnqXspJFcIixcbiAgICBzYXZlZDogXCLsoIDsnqXrkKhcIlxuICB9LFxuICAvL1Byb3BlcnR5IG5hbWVzIGluIHRhYmxlIGhlYWRlcnNcbiAgcGVsOiB7XG4gICAgaXNSZXF1aXJlZDogXCLtlYTsiJjsnoXri4jquYw/XCJcbiAgfSxcbiAgLy9Qcm9wZXJ0eSBFZGl0b3JzXG4gIHBlOiB7XG4gICAgYXBwbHk6IFwi7KCB7JqpXCIsXG4gICAgb2s6IFwi7ZmV7J24XCIsXG4gICAgY2FuY2VsOiBcIuy3qOyGjFwiLFxuICAgIHJlc2V0OiBcIuyerOyEpOyglVwiLFxuICAgIGNsb3NlOiBcIuuLq+q4sFwiLFxuICAgIGRlbGV0ZTogXCLsgq3soJxcIixcbiAgICBhZGROZXc6IFwi7IOI66GcIOunjOuTpOq4sFwiLFxuICAgIGFkZEl0ZW06IFwi7ZWt66qp7J2EIOy2lOqwgO2VmOugpOuptCDtgbTrpr3tlZjsi63si5zsmKQuXCIsXG4gICAgcmVtb3ZlQWxsOiBcIuuqqOuRkCDsgq3soJxcIixcbiAgICBlZGl0OiBcIu2OuOynkVwiLFxuICAgIGl0ZW1WYWx1ZUVkaXQ6IFwi7KGw6rG0IOy2qeyhsSDsi5wg67O06riwXCIsXG4gICAgZWRpdENob2ljZXM6IFwi7ISg7YOd7IKs7ZWtIO2OuOynkVwiLFxuICAgIG1vdmU6IFwi7J2064+ZXCIsXG4gICAgZW1wdHk6IFwiPOu5hOyWtOyeiOydjD5cIixcbiAgICBub3RFbXB0eTogXCI87Y647KeRIOqwkj5cIixcbiAgICBmYXN0RW50cnk6IFwi67mg66W4IOyeheugpVwiLFxuICAgIGZvcm1FbnRyeTogXCLslpHsi50g7J6F66ClXCIsXG4gICAgdGVzdFNlcnZpY2U6IFwi7ISc67mE7IqkIO2FjOyKpO2KuFwiLFxuICAgIGNvbmRpdGlvblNlbGVjdFF1ZXN0aW9uOiBcIuyniOusuCDshKDtg50uLi5cIixcbiAgICBjb25kaXRpb25WYWx1ZVF1ZXN0aW9uVGl0bGU6IFwi6rCS7J2EIOyeheugpe2VmOqxsOuCmCDshKDtg53tlZjsi63si5zsmKQuXCIsXG4gICAgY29uZGl0aW9uQnV0dG9uQWRkOiBcIuy2lOqwgFwiLFxuICAgIGNvbmRpdGlvbkJ1dHRvblJlcGxhY2U6IFwi67CU6r646riwXCIsXG4gICAgY29uZGl0aW9uSGVscDpcbiAgICAgIFwi67aI66awIOyLneydhCDsnoXroKXtlZjsi63si5zsmKQuIOyniOusuCDtmLnsnYAg7Y6Y7J207KeA66W8IOqzhOyGjSDrs7wg7IiYIOyeiOqyjCDtlZjroKTrqbQg7LC46rCS7J2EIOuwmO2ZmO2VtOyVvCDtlanri4jri6QuIOyYiOulvCDrk6TrqbQ6IHvsp4jrrLgxfSA9ICfqsJIxJyBvciAoe+yniOusuDJ9ICoge+yniOusuDR9ICA+IDIwIGFuZCB77KeI66y4M30gPCA1KVwiLFxuICAgIGV4cHJlc3Npb25IZWxwOlxuICAgICAgXCLsi53snYQg7J6F66Cl7ZWY7Iut7Iuc7JikLiDri6TsnYzqs7wg6rCZ7J2AIOyniOusuCDqsJLsl5Ag7KCR6re87ZWY66Ck66m0IOykkeq0hO2YuOulvCDsnbTsmqntlZjsi63si5zsmKQ6ICd77KeI66y4MX0gKyB77KeI66y4Mn0nLCAnKHvqsIDqsql9KnvsiJjrn4l9KSAqICgxMDAgLSB77ZWg7J24fSknXCIsXG4gICAgYWNlRWRpdG9ySGVscDogXCJjdHJsK3NwYWNl66W8IOuIjOufrCDsmYTshLHrkJwg7IiY7Iud7JeQIOuMgO2VnCDtnoztirjrpbwg7Ja77Jy87Iut7Iuc7JikXCIsXG4gICAgYWNlRWRpdG9yUm93VGl0bGU6IFwi7ZiE7J6sIO2WiVwiLFxuICAgIGFjZUVkaXRvclBhbmVsVGl0bGU6IFwi7ZiE7J6sIO2MqOuEkFwiLFxuICAgIHNob3dNb3JlOiBcIuyekOyEuO2VnCDrgrTsmqnsnYAg7ISk66qF7ISc66W8IO2ZleyduO2VmOyLreyLnOyYpC5cIixcbiAgICBjb25kaXRpb25TaG93TW9yZVVybDpcbiAgICAgIFwiaHR0cHM6Ly9zdXJ2ZXlqcy5pby9Eb2N1bWVudGF0aW9uL0xpYnJhcnlQYXJhbWV0ZXI/aWQ9UXVlc3Rpb24mcGFyYW1ldGVyPXZpc2libGVJZlwiLFxuICAgIGFzc2lzdGFudFRpdGxlOiBcIuycoO2aqCDsp4jrrLg6XCIsXG4gICAgY2VsbHNFbXB0eVJvd3NDb2x1bW5zOiBcIuy1nOyGjO2VnCDtlZjrgpjsnZgg7Je0IOuYkOuKlCDtlonsnbQg7J6I7Ja07JW8IO2VqeuLiOuLpC5cIixcblxuICAgIHByb3BlcnR5SXNFbXB0eTogXCLqsJLsnYQg7J6F66Cl7ZWY7Iut7Iuc7JikXCIsXG4gICAgdmFsdWU6IFwi6rCSXCIsXG4gICAgdGV4dDogXCLthY3siqTtirhcIixcbiAgICBjb2x1bW5FZGl0OiBcIuyXtCDtjrjsp5E6IHswfVwiLFxuICAgIGl0ZW1FZGl0OiBcIu2VreuqqSDtjrjsp5E6IHswfVwiLFxuXG4gICAgdXJsOiBcIlVSTFwiLFxuICAgIHBhdGg6IFwi6rK966GcXCIsXG4gICAgdmFsdWVOYW1lOiBcIuqwkiDsnbTrpoRcIixcbiAgICB0aXRsZU5hbWU6IFwi7KCc66qpIOydtOumhFwiLFxuXG4gICAgaGFzT3RoZXI6IFwi64uk66W4IO2VreuqqeydtCDsnojsirXri4jri6RcIixcbiAgICBvdGhlclRleHQ6IFwi6riw7YOAIO2VreuqqSDthY3siqTtirhcIixcbiAgICBuYW1lOiBcIuydtOumhFwiLFxuICAgIHRpdGxlOiBcIuygnOuqqVwiLFxuICAgIGNlbGxUeXBlOiBcIuyFgCDsnKDtmJVcIixcbiAgICBjb2xDb3VudDogXCLsl7Qg6rCc7IiYXCIsXG4gICAgY2hvaWNlc09yZGVyOiBcIu2VreuqqSDsiJzshJwg7ISg7YOdXCIsXG4gICAgdmlzaWJsZTogXCLrs7TsnoXri4jquYw/P1wiLFxuICAgIGlzUmVxdWlyZWQ6IFwi7ZWE7IiY7J6F64uI6rmMP1wiLFxuICAgIHN0YXJ0V2l0aE5ld0xpbmU6IFwi7IOIIOykhOuhnCDsi5zsnpHtlZjqsqDsirXri4jquYw/XCIsXG4gICAgcm93czogXCLtlokg7IiYXCIsXG4gICAgcGxhY2VIb2xkZXI6IFwi7J6F66ClIOyekOumrCDtkZzsi5zsnpAgXCIsXG4gICAgc2hvd1ByZXZpZXc6IFwi7J2066+47KeAIOuvuOumrOuztOq4sOqwgCDtkZzsi5zrkKnri4jquYw/XCIsXG4gICAgc3RvcmVEYXRhQXNUZXh0OiBcIu2MjOydvCDrgrTsmqnsnYQgSlNPTiDqsrDqs7zsl5Ag7YWN7Iqk7Yq466GcIOyggOyepVwiLFxuICAgIG1heFNpemU6IFwi7LWc64yAIO2MjOydvCDtgazquLAoYnl0ZXMpXCIsXG4gICAgaW1hZ2VIZWlnaHQ6IFwi7J2066+47KeAIOuGkuydtFwiLFxuICAgIGltYWdlV2lkdGg6IFwi7J2066+47KeAIOuEiOu5hFwiLFxuICAgIHJvd0NvdW50OiBcIu2WiSDsiJhcIixcbiAgICBjb2x1bW5zTG9jYXRpb246IFwi7Je0IOychOy5mFwiLFxuICAgIGFkZFJvd0xvY2F0aW9uOiBcIu2WiSDrsoTtirwg7JyE7LmYIOy2lOqwgFwiLFxuICAgIGFkZFJvd1RleHQ6IFwi7ZaJIOuyhO2KvCDthY3siqTtirgg7LaU6rCAXCIsXG4gICAgcmVtb3ZlUm93VGV4dDogXCLtlokg67KE7Yq8IO2FjeyKpO2KuCDsoJzqsbBcIixcbiAgICBtaW5SYXRlRGVzY3JpcHRpb246IFwi7LWc7IaMIOyEpOuqhSDquLjsnbRcIixcbiAgICBtYXhSYXRlRGVzY3JpcHRpb246IFwi7LWc64yAIOyEpOuqhSDquLjsnbRcIixcbiAgICBpbnB1dFR5cGU6IFwi7J6F66ClIOycoO2YlVwiLFxuICAgIG9wdGlvbnNDYXB0aW9uOiBcIuyYteyFmCDsuqHshZhcIixcbiAgICBkZWZhdWx0VmFsdWU6IFwi6riw67O46rCSXCIsXG4gICAgY2VsbHNEZWZhdWx0Um93OiBcIuq4sOuzuCDshYAg7YWN7Iqk7Yq4XCIsXG5cbiAgICBzdXJ2ZXlFZGl0b3JUaXRsZTogXCLshKTrrLjsp4Ag7ISk7KCVIO2OuOynkVwiLFxuICAgIHFFZGl0b3JUaXRsZTogXCLtjrjsp5E6IHswfVwiLFxuXG4gICAgLy9zdXJ2ZXlcbiAgICBzaG93VGl0bGU6IFwi7KCc66qpIO2RnOyLnC/siKjquYBcIixcbiAgICBsb2NhbGU6IFwi6riw67O4IOyWuOyWtFwiLFxuICAgIG1vZGU6IFwi66qo65OcKO2OuOynkS/snb3quLDsoITsmqkpXCIsXG4gICAgY2xlYXJJbnZpc2libGVWYWx1ZXM6IFwi67O07J207KeAIOyViuuKlCDqsJIg7KeA7Jqw6riwXCIsXG4gICAgY29va2llTmFtZTogXCLsv6DtgqQg7J2066aEKOuhnOy7rOyXkOyEnCDshKTrrLgg7KGw7IKs66W8IOuRkCDrsogg7IKs7Jqp7ZWY7KeAIOyViuuPhOuhnSDshKTsoJUpXCIsXG4gICAgc2VuZFJlc3VsdE9uUGFnZU5leHQ6IFwi64uk7J2MIO2OmOydtOyngOyXkOyEnCDshKTrrLgg7KGw7IKsIOqysOqzvCDrs7TrgrTquLBcIixcbiAgICBzdG9yZU90aGVyc0FzQ29tbWVudDogXCLri6Trpbgg7IKs7Jqp7J6Q7J2YIOqwkuydhCDrs4Trj4TsnZgg7ZWE65Oc7JeQIOyggOyepVwiLFxuICAgIHNob3dQYWdlVGl0bGVzOiBcIu2OmOydtOyngCDsoJzrqqkg7ZGc7IucXCIsXG4gICAgc2hvd1BhZ2VOdW1iZXJzOiBcIu2OmOydtOyngCDrsojtmLgg7ZGc7IucXCIsXG4gICAgcGFnZVByZXZUZXh0OiBcIuydtOyghCDtjpjsnbTsp4Ag67KE7Yq8IO2FjeyKpO2KuFwiLFxuICAgIHBhZ2VOZXh0VGV4dDogXCLri6TsnYwg7Y6Y7J207KeAIOuyhO2KvCDthY3siqTtirhcIixcbiAgICBjb21wbGV0ZVRleHQ6IFwi7JmE66OMIOuyhO2KvCDthY3siqTtirhcIixcbiAgICBzdGFydFN1cnZleVRleHQ6IFwi7Iuc7J6RIOuyhO2KvCDthY3siqTtirhcIixcbiAgICBzaG93TmF2aWdhdGlvbkJ1dHRvbnM6IFwi7YOQ7IOJIOuyhO2KvCDtkZzsi5wgKOq4sOuzuCDtg5Dsg4kpXCIsXG4gICAgc2hvd1ByZXZCdXR0b246IFwi7J207KCEIOuyhO2KvCDtkZzsi5wgKOyCrOyaqeyekOqwgCDsnbTsoIQg7Y6Y7J207KeA66GcIOuPjOyVhOqwiCDsiJgg7J6I7J2MKVwiLFxuICAgIGZpcnN0UGFnZUlzU3RhcnRlZDogXCLshKTrrLjsp4DsnZgg7LKrIOuyiOynuCDtjpjsnbTsp4DripQg7Iuc7J6RIO2OmOydtOyngOyeheuLiOuLpFwiLFxuICAgIHNob3dDb21wbGV0ZWRQYWdlOiBcIuuBnSDrtoDrtoTsl5Ag7JmE66OM65CcIO2OmOydtOyngCDtkZzsi5wgKOyZhOujjOuQnCBIVE1MKVwiLFxuICAgIGdvTmV4dFBhZ2VBdXRvbWF0aWM6IFwi66qo65OgIOyniOusuOyXkCDsnZHri7Ug7ZuEIOyekOuPmeycvOuhnCDri6TsnYwg7Y6Y7J207KeA66GcIOydtOuPmVwiLFxuICAgIHNob3dQcm9ncmVzc0JhcjogXCLsp4TtlonrpaAg66eJ64yAIO2RnOyLnFwiLFxuICAgIHF1ZXN0aW9uVGl0bGVMb2NhdGlvbjogXCLsp4jrrLgg7KCc66qpIOychOy5mFwiLFxuICAgIHJlcXVpcmVkVGV4dDogXCLsp4jrrLjsl5Ag7ZWE7JqU7ZWcIOq4sO2YuFwiLFxuICAgIHF1ZXN0aW9uU3RhcnRJbmRleDogXCLsp4jrrLgg7Iuc7J6RIOyDieyduCAoMSwgMiDrmJDripQgJ0EnLCAnYScpXCIsXG4gICAgc2hvd1F1ZXN0aW9uTnVtYmVyczogXCLsp4jrrLgg67KI7Zi4IO2RnOyLnFwiLFxuICAgIHF1ZXN0aW9uVGl0bGVUZW1wbGF0ZTpcbiAgICAgIFwi7KeI66y4IOygnOuqqSDthZztlIzrpr/snoXri4jri6QuIOq4sOuzuOqwkjogJ3tub30uIHtyZXF1aXJlfSB7dGl0bGV9J1wiLFxuICAgIHF1ZXN0aW9uRXJyb3JMb2NhdGlvbjogXCLsp4jrrLgg7JyE7LmYIOyYpOulmFwiLFxuICAgIGZvY3VzRmlyc3RRdWVzdGlvbkF1dG9tYXRpYzogXCLtjpjsnbTsp4Ag67OA6rK97IucIOyyqyDrsojsp7gg7KeI66y47JeQIOy0iOygkFwiLFxuICAgIHF1ZXN0aW9uc09yZGVyOiBcIu2OmOydtOyngOydmCDsmpTshowg7Iic7IScXCIsXG4gICAgbWF4VGltZVRvRmluaXNoOiBcIuyEpOusuCDsobDsgqzrpbwg66eI7LmgIOyImOyeiOuKlCDstZzrjIAg7Iuc6rCEXCIsXG4gICAgbWF4VGltZVRvRmluaXNoUGFnZTogXCLshKTrrLgg7KGw7IKs7JeQ7IScIO2OmOydtOyngOulvCDrp4jsuaAg7IiY7J6I64qUIOy1nOuMgCDsi5zqsIRcIixcbiAgICBzaG93VGltZXJQYW5lbDogXCLtg4DsnbTrqLgg7Yyo64SQIO2RnOyLnFwiLFxuICAgIHNob3dUaW1lclBhbmVsTW9kZTogXCLtg4DsnbTrqLgg7Yyo64SQIOuqqOuTnCDtkZzsi5xcIixcbiAgICByZW5kZXJNb2RlOiBcIuugjOuNlOungSDrqqjrk5xcIixcbiAgICBhbGxvd0FkZFBhbmVsOiBcIu2MqOuEkCDstpTqsIAg7ZeI7JqpXCIsXG4gICAgYWxsb3dSZW1vdmVQYW5lbDogXCLtjKjrhJAg7KCc6rGwIO2XiOyaqVwiLFxuICAgIHBhbmVsQWRkVGV4dDogXCLtjKjrhJAg7YWN7Iqk7Yq4IOy2lOqwgFwiLFxuICAgIHBhbmVsUmVtb3ZlVGV4dDogXCLtjKjrhJAg7YWN7Iqk7Yq4IOyCreygnFwiLFxuICAgIGlzU2luZ2xlUGFnZTogXCLtlZwg7Y6Y7J207KeA7JeQIOuqqOuToCDsmpTshowg7ZGc7IucXCIsXG5cbiAgICB0YWJzOiB7XG4gICAgICBnZW5lcmFsOiBcIuydvOuwmFwiLFxuICAgICAgZmlsZU9wdGlvbnM6IFwi7Ji17IWYXCIsXG4gICAgICBodG1sOiBcIkh0bWwg7Y647KeR6riwXCIsXG4gICAgICBjb2x1bW5zOiBcIuyXtFwiLFxuICAgICAgcm93czogXCLtlolcIixcbiAgICAgIGNob2ljZXM6IFwi7ISg7YOdXCIsXG4gICAgICBpdGVtczogXCLtla3rqqlcIixcbiAgICAgIHZpc2libGVJZjogXCLsobDqsbQg7Lap7KGx7IucIOuztOq4sFwiLFxuICAgICAgZW5hYmxlSWY6IFwi7KGw6rG0IOy2qeyhseyLnCDtl4jsmqlcIixcbiAgICAgIHJhdGVWYWx1ZXM6IFwi6ri47J20IOqwklwiLFxuICAgICAgY2hvaWNlc0J5VXJsOiBcIuybueyXkOyEnCDshKDtg51cIixcbiAgICAgIG1hdHJpeENob2ljZXM6IFwi6riw67O4IOyEoO2DnVwiLFxuICAgICAgbXVsdGlwbGVUZXh0SXRlbXM6IFwi7YWN7Iqk7Yq4IOyeheugpVwiLFxuICAgICAgdmFsaWRhdG9yczogXCLsnKDtmqjshLEg6rKA7IKs6riwXCIsXG4gICAgICBuYXZpZ2F0aW9uOiBcIu2DkOyDiVwiLFxuICAgICAgcXVlc3Rpb246IFwi7KeI66y4XCIsXG4gICAgICBjb21wbGV0ZWRIdG1sOiBcIuyZhOujjOuQnCBIVE1MXCIsXG4gICAgICBsb2FkaW5nSHRtbDogXCJIVE1MIOuhnOuTnCDspJFcIixcbiAgICAgIHRpbWVyOiBcIu2DgOydtOuouCAvIO2AtOymiFwiLFxuICAgICAgdHJpZ2dlcnM6IFwi7Yq466as6rGwXCIsXG4gICAgICB0ZW1wbGF0ZVRpdGxlOiBcIu2FnO2UjOumvyDsoJzrqqlcIlxuICAgIH0sXG4gICAgZWRpdFByb3BlcnR5OiBcIu2OuOynkSDsho3shLEgJ3swfSdcIixcbiAgICBpdGVtczogXCJbIO2VreuqqTogezB9IF1cIixcblxuICAgIGVudGVyTmV3VmFsdWU6IFwi6rCS7J2EIOyeheugpe2VmOyLreyLnOyYpC5cIixcbiAgICBub3F1ZXN0aW9uczogXCLshKTrrLgg7KGw7IKs7JeQ64qUIOyWtOuWpCDsp4jrrLjrj4Qg7JeG7Iq164uI64ukLlwiLFxuICAgIGNyZWF0ZXRyaWdnZXI6IFwi7Yq466as6rGw66W8IOunjOuTnOyLreyLnOyYpFwiLFxuICAgIHRyaWdnZXJPbjogXCLtirjrpqzqsbAg7Lyc6riwXCIsXG4gICAgdHJpZ2dlck1ha2VQYWdlc1Zpc2libGU6IFwi7Y6Y7J207KeAIO2RnOyLnDpcIixcbiAgICB0cmlnZ2VyTWFrZVF1ZXN0aW9uc1Zpc2libGU6IFwi7JqU7IaMIO2RnOyLnDpcIixcbiAgICB0cmlnZ2VyQ29tcGxldGVUZXh0OiBcIuyhsOqxtCDstqnsobEg7IucIOyEpOusuCDsobDsgqzrpbwg7J6R7ISx7ZWY7Iut7Iuc7JikLlwiLFxuICAgIHRyaWdnZXJOb3RTZXQ6IFwi7Yq466as6rGw6rCAIOyEpOygleuQmOyngCDslYrslZjsirXri4jri6QuXCIsXG4gICAgdHJpZ2dlclJ1bklmOiBcIuuLpOydjCDsobDqsbQg7Lap7KGxIOyLnCDsi6TtlolcIixcbiAgICB0cmlnZ2VyU2V0VG9OYW1lOiBcIuuLpOydjCDqsJIg67OA6rK9OiBcIixcbiAgICB0cmlnZ2VyU2V0VmFsdWU6IFwi64uk7J2M7Jy866GcIOyImOyglTogXCIsXG4gICAgdHJpZ2dlcklzVmFyaWFibGU6IFwi67OA7IiY66W8IOyEpOusuCDqsrDqs7zsl5Ag64Sj7KeAIOuniOyLreyLnOyYpC5cIlxuICB9LFxuICAvL1Byb3BlcnR5IHZhbHVlc1xuICBwdjoge1xuICAgIHRydWU6IFwi7LC4XCIsXG4gICAgZmFsc2U6IFwi6rGw7KeTXCIsXG4gICAgaW5oZXJpdDogXCLsg4Hsho1cIixcbiAgICBzaG93OiBcIuuztOq4sFwiLFxuICAgIGhpZGU6IFwi7Iio6riw6riwXCIsXG4gICAgZGVmYXVsdDogXCLquLDrs7jqsJJcIixcbiAgICBpbml0aWFsOiBcIuy0iOq4sOqwklwiLFxuICAgIHJhbmRvbTogXCLrrLTsnpHsnIRcIixcbiAgICBjb2xsYXBzZWQ6IFwi7LaV7IaMXCIsXG4gICAgZXhwYW5kZWQ6IFwi7ZmV7J6lXCIsXG4gICAgbm9uZTogXCLsl4bsnYxcIixcbiAgICBhc2M6IFwi7Jik66aE7LCo7IicXCIsXG4gICAgZGVzYzogXCLrgrTrprzssKjsiJxcIixcbiAgICBpbmRldGVybWluYXRlOiBcIuu2iO2ZleyglVwiLFxuICAgIGRlY2ltYWw6IFwi7KeE7IiYXCIsXG4gICAgY3VycmVuY3k6IFwi7ZmU7Y+QXCIsXG4gICAgcGVyY2VudDogXCLtjbzshLztirhcIixcbiAgICBmaXJzdEV4cGFuZGVkOiBcIuyasOyEoCDtmZXsnqVcIixcbiAgICBvZmY6IFwi6rq87KeQXCIsXG4gICAgb25QYW5lbDogXCLtjKjrhJDsl5DshJxcIixcbiAgICBvblN1cnZleTogXCLshKTrrLjsl5DshJxcIixcbiAgICBsaXN0OiBcIuuqqeuhnVwiLFxuICAgIHByb2dyZXNzVG9wOiBcIuyDgeuLqCDsp4TtlonrpaBcIixcbiAgICBwcm9ncmVzc0JvdHRvbTogXCLtlZjri6gg7KeE7ZaJ66WgXCIsXG4gICAgcHJvZ3Jlc3NUb3BCb3R0b206IFwi7IOB7ZWY64uoIOynhO2WieuloFwiLFxuICAgIGhvcml6b250YWw6IFwi6rCA66GcXCIsXG4gICAgdmVydGljYWw6IFwi7IS466GcXCIsXG4gICAgdG9wOiBcIuychFwiLFxuICAgIGJvdHRvbTogXCLslYTrnphcIixcbiAgICB0b3BCb3R0b206IFwi7JyE7JWE656YXCIsXG4gICAgbGVmdDogXCLsmbzsqr1cIixcbiAgICBjb2xvcjogXCLsg4nsg4FcIixcbiAgICBkYXRlOiBcIuuCoOynnFwiLFxuICAgIGRhdGV0aW1lOiBcIuuCoOynnC/si5zqsIRcIixcbiAgICBcImRhdGV0aW1lLWxvY2FsXCI6IFwi7ZiE7KeAIOuCoOynnC/si5zqsIRcIixcbiAgICBlbWFpbDogXCLsnbTrqZTsnbxcIixcbiAgICBtb250aDogXCLsm5RcIixcbiAgICBudW1iZXI6IFwi7Iir7J6QXCIsXG4gICAgcGFzc3dvcmQ6IFwi7Yyo7Iqk7JuM65OcXCIsXG4gICAgcmFuZ2U6IFwi67KU7JyEXCIsXG4gICAgdGVsOiBcInRlbFwiLFxuICAgIHRleHQ6IFwi7YWN7Iqk7Yq4XCIsXG4gICAgdGltZTogXCLsi5zqsIRcIixcbiAgICB1cmw6IFwiVVJMXCIsXG4gICAgd2VlazogXCLso7xcIixcbiAgICBoaWRkZW46IFwi7Iio6rmAXCIsXG4gICAgb246IFwi7Lyc6riwXCIsXG4gICAgb25QYWdlOiBcIu2OmOydtOyngCDsvJzquLBcIixcbiAgICBlZGl0OiBcIu2OuOynkVwiLFxuICAgIGRpc3BsYXk6IFwi65SU7Iqk7ZSM66CI7J20XCIsXG4gICAgb25Db21wbGV0ZTogXCLsmYTro4xcIixcbiAgICBvbkhpZGRlbjogXCLsiKjquYBcIixcbiAgICBhbGw6IFwi66qo65GQXCIsXG4gICAgcGFnZTogXCLtjpjsnbTsp4BcIixcbiAgICBzdXJ2ZXk6IFwi7ISk66y47KeAXCIsXG4gICAgb25OZXh0UGFnZTogXCLri6TsnYwg7Y6Y7J207KeA66GcXCIsXG4gICAgb25WYWx1ZUNoYW5nZWQ6IFwi6rCSIOuzgOqyvVwiXG4gIH0sXG4gIC8vT3BlcmF0b3JzXG4gIG9wOiB7XG4gICAgZW1wdHk6IFwi67mE7Ja07J6I7Iq164uI64ukXCIsXG4gICAgbm90ZW1wdHk6IFwi67mE7Ja07J6I7KeAIOyViuyKteuLiOuLpFwiLFxuICAgIGVxdWFsOiBcIuqwmeyKteuLiOuLpFwiLFxuICAgIG5vdGVxdWFsOiBcIuqwmeyngCDslYrsirXri4jri6RcIixcbiAgICBjb250YWluczogXCLtj6ztlajtlanri4jri6RcIixcbiAgICBub3Rjb250YWluczogXCLtj6ztlajtlZjsp4Ag7JWK7Iq164uI64ukXCIsXG4gICAgZ3JlYXRlcjogXCLtgbBcIixcbiAgICBsZXNzOiBcIuyekeydgFwiLFxuICAgIGdyZWF0ZXJvcmVxdWFsOiBcIu2BrOqxsOuCmCDqsJnsnYxcIixcbiAgICBsZXNzb3JlcXVhbDogXCLsnpHqsbDrgpgg6rCZ7J2MXCJcbiAgfSxcbiAgLy9FbWJlZCB3aW5kb3dcbiAgZXc6IHtcbiAgICBhbmd1bGFyOiBcIkFuZ3VsYXIg67KE7KCEIOyCrOyaqVwiLFxuICAgIGpxdWVyeTogXCJqUXVlcnkg67KE7KCEIOyCrOyaqVwiLFxuICAgIGtub2Nrb3V0OiBcIktub2Nrb3V0IOuyhOyghCDsgqzsmqlcIixcbiAgICByZWFjdDogXCJSZWFjdCDrsoTsoIQg7IKs7JqpXCIsXG4gICAgdnVlOiBcIlZ1ZSDrsoTsoIQg7IKs7JqpXCIsXG4gICAgYm9vdHN0cmFwOiBcIuu2gO2KuCDsiqTtirjrnqkg7ZSE66CI7J6EXCIsXG4gICAgc3RhbmRhcmQ6IFwi67aA7Yq4IOyKpO2KuOueqSDsl4bsnYxcIixcbiAgICBzaG93T25QYWdlOiBcIu2OmOydtOyngOyXkOyEnCDshKTrrLjsobDsgqwg67O06riwXCIsXG4gICAgc2hvd0luV2luZG93OiBcIuyciOuPhOyasCDssL3sl5DshJwg7ISk66y47KGw7IKsIOuztOq4sFwiLFxuICAgIGxvYWRGcm9tU2VydmVyOiBcIuyEnOuyhOyXkOyEnCDshKTrrLjsobDsgqwgSlNPTiDsi6TtlolcIixcbiAgICB0aXRsZVNjcmlwdDogXCLsiqTtgazrpr3tirgg67CPIOyKpO2DgOydvFwiLFxuICAgIHRpdGxlSHRtbDogXCJIVE1MXCIsXG4gICAgdGl0bGVKYXZhU2NyaXB0OiBcIuyekOuwlOyKpO2BrOumve2KuFwiXG4gIH0sXG4gIC8vVGVzdCBTdXJ2ZXlcbiAgdHM6IHtcbiAgICBzZWxlY3RQYWdlOiBcIu2FjOyKpO2KuCDtlaAg7Y6Y7J207KeA66W8IOyEoO2Dne2VmOyLreyLnOyYpDpcIlxuICB9LFxuICB2YWxpZGF0b3JzOiB7XG4gICAgYW5zd2VyY291bnR2YWxpZGF0b3I6IFwi64u1IOqwnOyImFwiLFxuICAgIGVtYWlsdmFsaWRhdG9yOiBcIuydtOuplOydvFwiLFxuICAgIGV4cHJlc3Npb252YWxpZGF0b3I6IFwi7ZGc7ZiE7IudXCIsXG4gICAgbnVtZXJpY3ZhbGlkYXRvcjogXCLsiKvsnpBcIixcbiAgICByZWdleHZhbGlkYXRvcjogXCLsoJXqt5zsi51cIixcbiAgICB0ZXh0dmFsaWRhdG9yOiBcIu2FjeyKpO2KuFwiXG4gIH0sXG4gIHRyaWdnZXJzOiB7XG4gICAgY29tcGxldGV0cmlnZ2VyOiBcIuyEpOusuCDsmYTro4xcIixcbiAgICBzZXR2YWx1ZXRyaWdnZXI6IFwi6rCSIOyEpOyglVwiLFxuICAgIHZpc2libGV0cmlnZ2VyOiBcIuyEoOuqheuPhCDrs4Dqsr1cIlxuICB9LFxuICAvL1Byb3BlcnRpZXNcbiAgcDoge1xuICAgIG5hbWU6IFwi7J2066aEXCIsXG4gICAgdGl0bGU6IHtcbiAgICAgIG5hbWU6IFwi7KCc66qpXCIsXG4gICAgICB0aXRsZTogXCIn7J2066aEJ+qzvCDqsJnsnYAg6rK97JqwIOu5hOybjCDrkaHri4jri6QuXCJcbiAgICB9LFxuXG4gICAgbmF2aWdhdGlvbkJ1dHRvbnNWaXNpYmlsaXR5OiBcIu2DkOyDiSDrsoTtirwg7ISg66qF64+EXCIsXG4gICAgcXVlc3Rpb25zT3JkZXI6IFwi7KeI66y4IOyInOyEnFwiLFxuICAgIG1heFRpbWVUb0ZpbmlzaDogXCLstZzrjIAg7JmE66OMIOyLnOqwhFwiLFxuXG4gICAgdmlzaWJsZTogXCLrs7TquLBcIixcbiAgICB2aXNpYmxlSWY6IFwi7KGw6rG0IOy2qeyhseyLnCDrs7TquLBcIixcbiAgICBxdWVzdGlvblRpdGxlTG9jYXRpb246IFwi7KeI66y4IOygnOuqqSDsnITsuZhcIixcbiAgICBkZXNjcmlwdGlvbjogXCLshKTrqoVcIixcbiAgICBzdGF0ZTogXCJzdGF0ZVwiLFxuICAgIGlzUmVxdWlyZWQ6IFwi7ZWE7IiYXCIsXG4gICAgaW5kZW50OiBcIuuTpOyXrOyTsOq4sFwiLFxuICAgIHJlcXVpcmVkRXJyb3JUZXh0OiBcIu2VhOyImCDsmKTrpZgg7YWN7Iqk7Yq4XCIsXG4gICAgc3RhcnRXaXRoTmV3TGluZTogXCLsg4gg7KSE66GcIOyLnOyekVwiLFxuICAgIGlubmVySW5kZW50OiBcIuyViOycvOuhnCDrk6Tsl6zsk7DquLBcIixcbiAgICBwYWdlOiBcIu2OmOydtOyngFwiLFxuXG4gICAgd2lkdGg6IFwi64SI67mEXCIsXG5cbiAgICBjb21tZW50VGV4dDogXCLrqZTrqqgg7YWN7Iqk7Yq4XCIsXG4gICAgdmFsdWVOYW1lOiBcIuydtOumhOqwklwiLFxuICAgIGVuYWJsZUlmOiBcIuyhsOqxtCDstqnsobHsi5wg7ZeI6rCAXCIsXG4gICAgZGVmYXVsdFZhbHVlOiBcIuq4sOuzuOqwklwiLFxuICAgIGNvcnJlY3RBbnN3ZXI6IFwi64u17JWIIOyImOyglVwiLFxuICAgIHJlYWRPbmx5OiBcIuydveq4sCDsoITsmqlcIixcbiAgICB2YWxpZGF0b3JzOiBcIuycoO2aqOyEsSDqsoDsgqzquLBcIixcbiAgICB0aXRsZUxvY2F0aW9uOiBcIuygnOuqqSDsnITsuZhcIixcblxuICAgIGhhc0NvbW1lbnQ6IFwi64u167OAXCIsXG4gICAgaGFzT3RoZXI6IFwi64uk66W4IOuLteuzgCDtl4jsmqlcIixcbiAgICBjaG9pY2VzOiBcIuyEoO2DnVwiLFxuICAgIGNob2ljZXNPcmRlcjogXCLquLDtg4Ag7ISg7YOdXCIsXG4gICAgY2hvaWNlc0J5VXJsOiBcIlVSTOydhCDthrXtlZwg7ISg7YOdXCIsXG4gICAgb3RoZXJUZXh0OiBcIuq4sO2DgCDthY3siqTtirhcIixcbiAgICBvdGhlckVycm9yVGV4dDogXCLquLDtg4Ag7Jik66WYIO2FjeyKpO2KuFwiLFxuICAgIHN0b3JlT3RoZXJzQXNDb21tZW50OiBcIuq4sO2DgCDri7Xrs4Ag7KCA7J6lXCIsXG5cbiAgICBsYWJlbDogXCLrnbzrsqhcIixcbiAgICBzaG93VGl0bGU6IFwi7KCc66qpIO2RnOyLnFwiLFxuICAgIHZhbHVlVHJ1ZTogXCLssLjqsJJcIixcbiAgICB2YWx1ZUZhbHNlOiBcIuqxsOynk+qwklwiLFxuXG4gICAgY29sczogXCLsl7RcIixcbiAgICByb3dzOiBcIu2WiVwiLFxuICAgIHBsYWNlSG9sZGVyOiBcIuyekOumrCDtkZzsi5zsnpBcIixcblxuICAgIG9wdGlvbnNDYXB0aW9uOiBcIuyYteyFmCDsuqHshZhcIixcblxuICAgIGV4cHJlc3Npb246IFwi7ZGc7ZiE7IudXCIsXG4gICAgZm9ybWF0OiBcIu2PrOunt1wiLFxuICAgIGRpc3BsYXlTdHlsZTogXCLrlJTsiqTtlIzroIjsnbQg7Iqk7YOA7J28XCIsXG4gICAgY3VycmVuY3k6IFwi7ZmU7Y+QXCIsXG4gICAgdXNlR3JvdXBpbmc6IFwi6re466O5IOyCrOyaqVwiLFxuXG4gICAgc2hvd1ByZXZpZXc6IFwi66+466as67O06riwIOuztOq4sFwiLFxuICAgIGFsbG93TXVsdGlwbGU6IFwi64uk7IiYIO2XiOyaqVwiLFxuICAgIGltYWdlSGVpZ2h0OiBcIuydtOuvuOyngCDrhpLsnbRcIixcbiAgICBpbWFnZVdpZHRoOiBcIuydtOuvuOyngCDrhIjruYRcIixcbiAgICBzdG9yZURhdGFBc1RleHQ6IFwi7YWN7Iqk7Yq466GcIOuNsOydtO2EsCDsoIDsnqVcIixcbiAgICBtYXhTaXplOiBcIuy1nOuMgCDtgazquLBcIixcblxuICAgIGh0bWw6IFwiSFRNTFwiLFxuXG4gICAgY29sdW1uczogXCLsl7RcIixcbiAgICBjZWxsczogXCLshYBcIixcbiAgICBpc0FsbFJvd1JlcXVpcmVkOiBcIuuqqOuRkCDtlYTsiJgg7ZaJ7J6F64uI6rmMXCIsXG5cbiAgICBob3Jpem9udGFsU2Nyb2xsOiBcIuqwgOuhnCDsiqTtgazroaTrsJRcIixcbiAgICBjZWxsVHlwZTogXCLshYAg7Jyg7ZiVXCIsXG4gICAgY29sdW1uc0xvY2F0aW9uOiBcIuyXtCDsnITsuZhcIixcbiAgICBjb2x1bW5Db2xDb3VudDogXCLsl7Qg6rCc7IiYXCIsXG4gICAgY29sdW1uTWluV2lkdGg6IFwi7Je0IOy1nOyGjCDrhIjruYRcIixcblxuICAgIHJvd0NvdW50OiBcIu2WiSDsiJhcIixcbiAgICBtaW5Sb3dDb3VudDogXCLstZzshowg7ZaJIOqwnOyImFwiLFxuICAgIG1heFJvd0NvdW50OiBcIuy1nOuMgCDtlokg6rCc7IiYXCIsXG4gICAga2V5TmFtZTogXCJrZXlOYW1lXCIsXG4gICAga2V5RHVwbGljYXRpb25FcnJvcjogXCLso7zsmpQg67O17KCcIOyXkOufrFwiLFxuICAgIGNvbmZpcm1EZWxldGU6IFwi7IKt7KCcIO2ZleyduFwiLFxuICAgIGNvbmZpcm1EZWxldGVUZXh0OiBcIu2FjeyKpO2KuCDsgq3soJwg7ZmV7J24XCIsXG4gICAgYWRkUm93TG9jYXRpb246IFwi7ZaJIOychOy5mCDstpTqsIBcIixcbiAgICBhZGRSb3dUZXh0OiBcIu2WiSDthY3siqTtirgg7LaU6rCAXCIsXG4gICAgcmVtb3ZlUm93VGV4dDogXCLtlokg7YWN7Iqk7Yq4IOygnOqxsFwiLFxuXG4gICAgaXRlbXM6IFwi7ZWt66qpXCIsXG4gICAgaXRlbVNpemU6IFwi7ZWt66qpIO2BrOq4sFwiLFxuICAgIGNvbENvdW50OiBcIuyXtCDqsJzsiJhcIixcblxuICAgIHRlbXBsYXRlVGl0bGU6IFwi7YWc7ZSM66a/IOydtOumhFwiLFxuICAgIHRlbXBsYXRlRGVzY3JpcHRpb246IFwi7YWc7ZSM66a/IOyEpOuqhVwiLFxuICAgIGFsbG93QWRkUGFuZWw6IFwi7Yyo64SQIOy2lOqwgCDtl4jsmqlcIixcbiAgICBhbGxvd1JlbW92ZVBhbmVsOiBcIu2MqOuEkCDsoJzqsbAg7ZeI7JqpXCIsXG4gICAgcGFuZWxDb3VudDogXCLtjKjrhJAg6rCc7IiYXCIsXG4gICAgbWluUGFuZWxDb3VudDogXCLstZzshowg7Yyo64SQIOqwnOyImFwiLFxuICAgIG1heFBhbmVsQ291bnQ6IFwi7LWc64yAIO2MqOuEkCDqsJzsiJhcIixcbiAgICBwYW5lbHNTdGF0ZTogXCJwYW5lbHNTdGF0ZVwiLFxuICAgIHBhbmVsQWRkVGV4dDogXCLtjKjrhJAg7YWN7Iqk7Yq4IOy2lOqwgFwiLFxuICAgIHBhbmVsUmVtb3ZlVGV4dDogXCLtjKjrhJAg7YWN7Iqk7Yq4IOygnOqxsFwiLFxuICAgIHBhbmVsUHJldlRleHQ6IFwi7J207KCEIO2MqOuEkCDthY3siqTtirhcIixcbiAgICBwYW5lbE5leHRUZXh0OiBcIuuLpOydjCDtjKjrhJAg7YWN7Iqk7Yq4XCIsXG4gICAgc2hvd1F1ZXN0aW9uTnVtYmVyczogXCLsp4jrrLgg6rCc7IiYIOuztOq4sFwiLFxuICAgIHNob3dSYW5nZUluUHJvZ3Jlc3M6IFwi7KeE7ZaJ7KSR7J24IOuylOychCDrs7TquLBcIixcbiAgICByZW5kZXJNb2RlOiBcInJlbmRlck1vZGVcIixcbiAgICB0ZW1wbGF0ZVRpdGxlTG9jYXRpb246IFwi7YWc7ZSM66a/IOydtOumhCDsnITsuZhcIixcblxuICAgIHJhdGVWYWx1ZXM6IFwi6ri47J206rCSXCIsXG4gICAgcmF0ZU1pbjogXCLstZzshowg6ri47J20XCIsXG4gICAgcmF0ZU1heDogXCLstZzrjIAg6ri47J20XCIsXG4gICAgcmF0ZVN0ZXA6IFwicmF0ZVN0ZXBcIixcbiAgICBtaW5SYXRlRGVzY3JpcHRpb246IFwi7LWc7IaMIOyEpOuqhSDquLjsnbRcIixcbiAgICBtYXhSYXRlRGVzY3JpcHRpb246IFwi7LWc64yAIOyEpOuqhSDquLjsnbRcIixcblxuICAgIGlucHV0VHlwZTogXCLsnoXroKUg7Jyg7ZiVXCIsXG4gICAgc2l6ZTogXCLtgazquLBcIixcblxuICAgIGxvY2FsZTogXCLroZzsu6xcIixcbiAgICBmb2N1c0ZpcnN0UXVlc3Rpb25BdXRvbWF0aWM6IFwi7LKrIOyniOusuCDsnpDrj5kg7LSI7KCQXCIsXG4gICAgY29tcGxldGVkSHRtbDogXCLsmYTro4zrkJwgSFRNTFwiLFxuICAgIGNvbXBsZXRlZEJlZm9yZUh0bWw6IFwi7JmE66OM65CcIOydtOyghCBIVE1MXCIsXG4gICAgbG9hZGluZ0h0bWw6IFwiSFRNTCDroZzrk5xcIixcbiAgICB0cmlnZ2VyczogXCLtirjrpqzqsbBcIixcbiAgICBjb29raWVOYW1lOiBcIuy/oO2CpCDsnbTrpoRcIixcbiAgICBzZW5kUmVzdWx0T25QYWdlTmV4dDogXCLtmIQg7Y6Y7J207KeA66GcIOqysOqzvCDsoITshqFcIixcbiAgICBzaG93TmF2aWdhdGlvbkJ1dHRvbnM6IFwi7YOQ7IOJIOuyhO2KvCDrs7TquLBcIixcbiAgICBzaG93UHJldkJ1dHRvbjogXCLrkqTroZzqsIDquLAg67KE7Yq8IOuztOq4sFwiLFxuICAgIHNob3dQYWdlVGl0bGVzOiBcIu2OmOydtOyngCDsoJzrqqkg67O06riwXCIsXG4gICAgc2hvd0NvbXBsZXRlZFBhZ2U6IFwi7JmE66OMIO2OmOydtOyngCDrs7TquLBcIixcbiAgICBzaG93UGFnZU51bWJlcnM6IFwi7Y6Y7J207KeAIOyImCDrs7TquLBcIixcbiAgICBxdWVzdGlvbkVycm9yTG9jYXRpb246IFwi7KeI66y4IOyYpOulmCDsnITsuZhcIixcbiAgICBzaG93UHJvZ3Jlc3NCYXI6IFwi7KeE7ZaJIOyDge2DnOuwlCDrs7TquLBcIixcbiAgICBtb2RlOiBcIuuqqOuTnFwiLFxuICAgIGdvTmV4dFBhZ2VBdXRvbWF0aWM6IFwi64uk7J2MIO2OmOydtOyngOuhnCDsnpDrj5nsnLzroZwg64SY7Ja06rCA6riwXCIsXG4gICAgY2hlY2tFcnJvcnNNb2RlOiBcIuyYpOulmCDrqqjrk5wg7ZmV7J24XCIsXG4gICAgY2xlYXJJbnZpc2libGVWYWx1ZXM6IFwi67O07J207KeAIOyViuuKlCDrs4DsiJgg7KCc6rGwXCIsXG4gICAgc3RhcnRTdXJ2ZXlUZXh0OiBcIuyEpOusuCDthYzsiqTtirgg7Iuc7J6RXCIsXG4gICAgcGFnZVByZXZUZXh0OiBcIuydtOyghCDthY3siqTtirgg7Y6Y7J207KeAXCIsXG4gICAgcGFnZU5leHRUZXh0OiBcIuuLpOydjCDthY3siqTtirgg7Y6Y7J207KeAXCIsXG4gICAgY29tcGxldGVUZXh0OiBcIuyZhOujjCDthY3siqTtirhcIixcbiAgICByZXF1aXJlZFRleHQ6IFwi7ZWE7IiYIO2FjeyKpO2KuFwiLFxuICAgIHF1ZXN0aW9uU3RhcnRJbmRleDogXCLsp4jrrLgg7Iuc7J6RIOyDieyduFwiLFxuICAgIHF1ZXN0aW9uVGl0bGVUZW1wbGF0ZTogXCLsp4jrrLgg7KCc66qpIO2FnO2UjOumv1wiLFxuICAgIGZpcnN0UGFnZUlzU3RhcnRlZDogXCLssqsg7Y6Y7J207KeA7JeQ7IScIOyLnOyekVwiLFxuICAgIGlzU2luZ2xlUGFnZTogXCLri6jsnbwg7Y6Y7J207KeAXCIsXG4gICAgbWF4VGltZVRvRmluaXNoUGFnZTogXCLtjpjsnbTsp4Ag7KKF66OMIOy1nOuMgCDsi5zqsIRcIixcbiAgICBzaG93VGltZXJQYW5lbDogXCLtg4DsnbTrqLgg7Yyo64SQIOuztOq4sFwiLFxuICAgIHNob3dUaW1lclBhbmVsTW9kZTogXCLtg4DsnbTrqLgg7Yyo64SQIOuqqOuTnCDrs7TquLBcIixcblxuICAgIHRleHQ6IFwi7YWN7Iqk7Yq4XCIsXG4gICAgbWluVmFsdWU6IFwi7LWc7IaM6rCSXCIsXG4gICAgbWF4VmFsdWU6IFwi7LWc64yA6rCSXCIsXG4gICAgbWluTGVuZ3RoOiBcIuy1nOyGjCDquLjsnbRcIixcbiAgICBtYXhMZW5ndGg6IFwi7LWc64yAIOq4uOydtFwiLFxuICAgIGFsbG93RGlnaXRzOiBcIuyIq+yekCDtl4jsmqlcIixcbiAgICBtaW5Db3VudDogXCLstZzshowg6rCc7IiYXCIsXG4gICAgbWF4Q291bnQ6IFwi7LWc64yAIOqwnOyImFwiLFxuICAgIHJlZ2V4OiBcIuygleq3nCDtkZztmITsi51cIlxuICB9XG59O1xuZWRpdG9yTG9jYWxpemF0aW9uLmxvY2FsZXNbXCJrb1wiXSA9IGtvcmVhblN0cmluZ3M7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvbG9jYWxpemF0aW9uL2tvcmVhbi50cyIsIi8vVW5jb21tZW50IHRoaXMgbGluZSBvbiBjcmVhdGluZyBhIHRyYW5zbGF0aW9uIGZpbGVcbmltcG9ydCB7IGVkaXRvckxvY2FsaXphdGlvbiwgZGVmYXVsdFN0cmluZ3MgfSBmcm9tIFwiLi4vZWRpdG9yTG9jYWxpemF0aW9uXCI7XG5cbmV4cG9ydCB2YXIgbmJTdHJpbmdzID0ge1xuICAvL3N1cnZleSB0ZW1wbGF0ZXNcbiAgc3VydmV5OiB7XG4gICAgZWRpdDogXCJSZWRpZ2VyXCIsXG4gICAgZHJvcFF1ZXN0aW9uOiBcIkRyYSBvZyBzbGlwcCBldCBzcMO4cnNtw6VsIGhlciBmcmEgVmVya3TDuHlsaXN0ZW4gdGlsIHZlbnN0cmUuXCIsXG4gICAgY29weTogXCJLb3BpZXJcIixcbiAgICBhZGRUb1Rvb2xib3g6IFwiTGVnZyB0aWwgVmVya3TDuHlsaXN0ZW5cIixcbiAgICBkZWxldGVQYW5lbDogXCJTbGV0dCBQYW5lbFwiLFxuICAgIGRlbGV0ZVF1ZXN0aW9uOiBcIlNsZXR0IHNww7hyc23DpWxcIixcbiAgICBjb252ZXJ0VG86IFwiS29udmVydGVyIHRpbFwiLFxuICAgIGRyYWc6IFwiRHJhIGVsZW1lbnRcIlxuICB9LFxuICAvL3F1ZXN0aW9uVHlwZXNcbiAgcXQ6IHtcbiAgICBkZWZhdWx0OiBcIlN0YW5kYXJkXCIsXG4gICAgY2hlY2tib3g6IFwiU2pla2tib2tzXCIsXG4gICAgY29tbWVudDogXCJLb21tZW50YXJcIixcbiAgICBpbWFnZXBpY2tlcjogXCJCaWxkZS12ZWxnZXJcIixcbiAgICBkcm9wZG93bjogXCJOZWR0cmVra3NsaXN0ZVwiLFxuICAgIGZpbGU6IFwiRmlsXCIsXG4gICAgaHRtbDogXCJIdG1sXCIsXG4gICAgbWF0cml4OiBcIk1hdHJpc2UgKGVua2VsdmFsZylcIixcbiAgICBtYXRyaXhkcm9wZG93bjogXCJNYXRyaXNlIChmbGVyZSB2YWxnKVwiLFxuICAgIG1hdHJpeGR5bmFtaWM6IFwiTWF0cmlzZSAoZHluYW1pc2tlIHJhZGVyKVwiLFxuICAgIG11bHRpcGxldGV4dDogXCJGbGVybGluamUgdGVrc3RcIixcbiAgICBwYW5lbDogXCJQYW5lbFwiLFxuICAgIHBhbmVsZHluYW1pYzogXCJQYW5lbCAoZHluYW1pc2sgcGFuZWwpXCIsXG4gICAgcmFkaW9ncm91cDogXCJSYWRpb2dydXBwZVwiLFxuICAgIHJhdGluZzogXCJSYW5nZXJpbmdcIixcbiAgICB0ZXh0OiBcIkVua2VsIHRla3N0XCIsXG4gICAgYm9vbGVhbjogXCJCb29sZWFuXCIsXG4gICAgZXhwcmVzc2lvbjogXCJGb3JtZWxcIlxuICB9LFxuICAvL1N0cmluZ3MgaW4gRWRpdG9yXG4gIGVkOiB7XG4gICAgZGVmYXVsdExvY2FsZTogXCJTdGFuZGFyZCAoezB9KVwiLFxuICAgIHN1cnZleTogXCJTa2plbWFcIixcbiAgICBzZXR0aW5nczogXCJTa2plbWEgaW5uc3RpbGxpbmdlclwiLFxuICAgIGVkaXRTdXJ2ZXk6IFwiUmVkaWdlciBza2plbWFcIixcbiAgICBhZGROZXdQYWdlOiBcIkxlZ2cgdGlsIG55IHNpZGVcIixcbiAgICBtb3ZlUmlnaHQ6IFwiQmxhIHRpbCBow7h5cmVcIixcbiAgICBtb3ZlTGVmdDogXCJCbGEgdGlsIHZlbnN0cmVcIixcbiAgICBkZWxldGVQYWdlOiBcIlNsZXR0IHNpZGVcIixcbiAgICBlZGl0UGFnZTogXCJSZWRpZ2VyIHNpZGVcIixcbiAgICBlZGl0OiBcIlJlZGlnZXJcIixcbiAgICBuZXdQYWdlTmFtZTogXCJzaWRlXCIsXG4gICAgbmV3UXVlc3Rpb25OYW1lOiBcInNww7hyc23DpWxcIixcbiAgICBuZXdQYW5lbE5hbWU6IFwicGFuZWxcIixcbiAgICB0ZXN0U3VydmV5OiBcIlRlc3Qgc2tqZW1hXCIsXG4gICAgdGVzdFN1cnZleUFnYWluOiBcIlRlc3Qgc2tqZW1hIGlnamVuXCIsXG4gICAgdGVzdFN1cnZleVdpZHRoOiBcIlNramVtYSBicmVkZGU6IFwiLFxuICAgIGVtYmVkU3VydmV5OiBcIkludGVncmVyIHNramVtYVwiLFxuICAgIHRyYW5zbGF0aW9uOiBcIk92ZXJzZXR0ZWxzZVwiLFxuICAgIHNhdmVTdXJ2ZXk6IFwiTGFncmUgc2tqZW1hXCIsXG4gICAgZGVzaWduZXI6IFwiU2tqZW1hIERlc2lnbmVyXCIsXG4gICAganNvbkVkaXRvcjogXCJKU09OIFJlZGlnZXJpbmdcIixcbiAgICB1bmRvOiBcIkFuZ3JlXCIsXG4gICAgcmVkbzogXCJHamVudGFcIixcbiAgICBvcHRpb25zOiBcIkFsdGVybmF0aXZlclwiLFxuICAgIGdlbmVyYXRlVmFsaWRKU09OOiBcIkxhZyBneWxkaWcgSlNPTlwiLFxuICAgIGdlbmVyYXRlUmVhZGFibGVKU09OOiBcIkxhZyBsZXNiYXIgSlNPTlwiLFxuICAgIHRvb2xib3g6IFwiVmVya3TDuHlsaXN0ZVwiLFxuICAgIHRvb2xib3hHZW5lcmFsQ2F0ZWdvcnk6IFwiR2VuZXJlbHRcIixcbiAgICBkZWxTZWxPYmplY3Q6IFwiU2xldHQgdmFsZ3RlIGVsZW1lbnRlclwiLFxuICAgIGVkaXRTZWxPYmplY3Q6IFwiUmVkaWdlciB2YWxndGUgZWxlbWVudGVyXCIsXG4gICAgY29ycmVjdEpTT046IFwiVmVubmxpZ3N0IGtvcnJpZ2VyIEpTT04uXCIsXG4gICAgc3VydmV5UmVzdWx0czogXCJTa2plbWEgcmVzdWx0YXQ6IFwiLFxuICAgIHN1cnZleVJlc3VsdHNUYWJsZTogXCJTb20gdGFiZWxsXCIsXG4gICAgc3VydmV5UmVzdWx0c0pzb246IFwiU29tIEpTT05cIixcbiAgICByZXN1bHRzVGl0bGU6IFwiU3DDuHJzbcOlbCB0aXR0ZWxcIixcbiAgICByZXN1bHRzTmFtZTogXCJTcMO4cnNtw6VsIG5hdm5cIixcbiAgICByZXN1bHRzVmFsdWU6IFwiU3ZhciB2ZXJkaVwiLFxuICAgIHJlc3VsdHNEaXNwbGF5VmFsdWU6IFwiVmlzdCB2ZXJkaVwiLFxuICAgIG1vZGlmaWVkOiBcIkVuZHJldFwiLFxuICAgIHNhdmluZzogXCJMYWdyZXJcIixcbiAgICBzYXZlZDogXCJMYWdyZXRcIixcbiAgICBzYXZlRXJyb3I6IFwiRmVpbCEgU2tqZW1hIGlubmhvbGQgZXIgaWtrZSBsYWdyZXQuXCIsXG4gICAgdHJhbnNsYXRpb25BZGRMYW5ndWFnZTogXCJWZWxnIHNwcsOlayBmb3Igb3ZlcnNldHRpbmdcIixcbiAgICB0cmFuc2xhdGlvblNob3dBbGxTdHJpbmdzOiBcIlZpcyBhbGxlIHN0cmVuZ2VyXCIsXG4gICAgdHJhbnNsYXRpb25TaG93QWxsUGFnZXM6IFwiVmlzIGFsbGUgc2lkZXJcIixcbiAgICB0cmFuc2xhdGlvbk5vU3RyaW5nczogXCJJbmdlbiBzdHJlbmdlciDDpSBvdmVyc2V0dGUuIFZlbm5saWdzdCBlbmRyZSBmaWx0ZXJldC5cIixcbiAgICB0cmFuc2xhdGlvbkV4cG9ydFRvU0NWQnV0dG9uOiBcIkVrc3BvcnRlciB0aWwgQ1NWXCIsXG4gICAgdHJhbnNsYXRpb25JbXBvcnRGcm9tU0NWQnV0dG9uOiBcIkltcG9ydGVyIGZyYSBDU1ZcIixcbiAgICB0cmFuc2xhdGlvbk1lcmdlTG9jYWxlV2l0aERlZmF1bHQ6IFwiRmxldHQgezB9IG1lZCBzdGFuZGFyZCBzcHLDpWtcIlxuICB9LFxuICAvL1Byb3BlcnR5IG5hbWVzIGluIHRhYmxlIGhlYWRlcnNcbiAgcGVsOiB7XG4gICAgaXNSZXF1aXJlZDogXCJOw7hkdmVuZGlnP1wiXG4gIH0sXG4gIC8vUHJvcGVydHkgRWRpdG9yc1xuICBwZToge1xuICAgIGFwcGx5OiBcIkJydWtcIixcbiAgICBvazogXCJPS1wiLFxuICAgIGNhbmNlbDogXCJBdmJyeXRcIixcbiAgICByZXNldDogXCJUaWxiYWtlc3RpbGxcIixcbiAgICBjbG9zZTogXCJMdWtrXCIsXG4gICAgZGVsZXRlOiBcIlNsZXR0XCIsXG4gICAgYWRkTmV3OiBcIkxlZ2cgdGlsIG55XCIsXG4gICAgYWRkSXRlbTogXCJLbGlrayBmb3Igw6UgbGVnZ2UgdGlsLi4uXCIsXG4gICAgcmVtb3ZlQWxsOiBcIkZqZXJuIGFsdFwiLFxuICAgIGVkaXQ6IFwiUmVkaWdlclwiLFxuICAgIGl0ZW1WYWx1ZUVkaXQ6IFwiU3lubGlnIGRlcnNvbVwiLFxuICAgIGVkaXRDaG9pY2VzOiBcIlJlZGlnZXIgdmFsZ1wiLFxuICAgIG1vdmU6IFwiRmx5dHRcIixcbiAgICBlbXB0eTogXCI8dG9tPlwiLFxuICAgIG5vdEVtcHR5OiBcIjxyZWRpZ2VyIHZlcmRpPlwiLFxuICAgIGZhc3RFbnRyeTogXCJSYXNrIGlubmZ5bGxpbmdcIixcbiAgICBmb3JtRW50cnk6IFwiSW5uZnlsbGluZyBpIHNramVtYVwiLFxuICAgIHRlc3RTZXJ2aWNlOiBcIlNqZWtrIHRqZW5lc3RlblwiLFxuICAgIGNvbmRpdGlvblNlbGVjdFF1ZXN0aW9uOiBcIlZlbGcgc3DDuHJzbcOlbC4uLlwiLFxuICAgIGNvbmRpdGlvblZhbHVlUXVlc3Rpb25UaXRsZTogXCJWZW5ubGlnc3Qgc2tyaXYgaW5uL3ZlbGcgdmVyZGlcIixcbiAgICBjb25kaXRpb25CdXR0b25BZGQ6IFwiTGVnZyB0aWxcIixcbiAgICBjb25kaXRpb25CdXR0b25SZXBsYWNlOiBcIkVyc3RhdHRcIixcbiAgICBjb25kaXRpb25IZWxwOlxuICAgICAgXCJTa3JpdiBpbm4gZXQgYm9vbHNrIHV0dHJ5a2suIERldCBidXJkZSByZXR1cm5lcmUgU0FOTiBmb3Igw6UgZ2rDuHJlIHNww7hyc23DpWwvc2lkZSBzeW5saWcuIEZvciBla3NlbXBlbDoge3F1ZXN0aW9uMX0gPSAndmFsdWUxJyBvciAoe3F1ZXN0aW9uMn0gKiB7cXVlc3Rpb240fSAgPiAyMCBhbmQge3F1ZXN0aW9uM30gPCA1KVwiLFxuICAgIGV4cHJlc3Npb25IZWxwOlxuICAgICAgXCJWZW5ubGlnc3Qgc2tyaXYgaW5uIGV0IHV0dHJ5a2suICBEdSBrYW4gYnJ1a2Uga2xhbW1lcGFyZW50ZXNlciBmb3Igw6UgZsOlIHRpbGdhbmcgdGlsIHNww7hyc23DpWxzIHZlcmRpZW5lOiAne3F1ZXN0aW9uMX0gKyB7cXVlc3Rpb24yfScsICcoe3ByaWNlfSp7cXVhbnRpdHl9KSAqICgxMDAgLSB7ZGlzY291bnR9KSdcIixcbiAgICBhY2VFZGl0b3JIZWxwOiBcIlRyeWtrIGN0cmwrbWVsbG9tcm9tIGZvciDDpSBmw6UgaGludCB0aWwgw6UgZnVsbGbDuHJlIHV0dHJ5a2tcIixcbiAgICBhY2VFZGl0b3JSb3dUaXRsZTogXCJHamVsZGVuZGUgcmFkXCIsXG4gICAgYWNlRWRpdG9yUGFuZWxUaXRsZTogXCJHamVsZGVuZGUgcGFuZWxcIixcbiAgICBzaG93TW9yZTogXCJGb3IgbWVyIGRldGFsamVyIC0gc2UgZG9rdW1lbnRhc2pvbmVuXCIsXG4gICAgY29uZGl0aW9uU2hvd01vcmVVcmw6XG4gICAgICBcImh0dHBzOi8vc3VydmV5anMuaW8vRG9jdW1lbnRhdGlvbi9MaWJyYXJ5UGFyYW1ldGVyP2lkPVF1ZXN0aW9uJnBhcmFtZXRlcj12aXNpYmxlSWZcIixcbiAgICBhc3Npc3RhbnRUaXRsZTogXCJUaWxnamVuZ2VsaWdlIHNww7hyc23DpWw6XCIsXG4gICAgY2VsbHNFbXB0eVJvd3NDb2x1bW5zOiBcIkRldCBtw6UgdsOmcmUgbWluc3QgMSBrb2xvbm5lIGVsbGVyIHJhZFwiLFxuXG4gICAgcHJvcGVydHlJc0VtcHR5OiBcIlZlbm5saWdzdCBmeWxsIGlubiBlbiB2ZXJkaVwiLFxuICAgIHZhbHVlOiBcIlZlcmRpXCIsXG4gICAgdGV4dDogXCJUZWtzdFwiLFxuICAgIHJvd2lkOiBcIlJhZCBJRFwiLFxuICAgIGltYWdlTGluazogXCJCaWxkZSBsZW5rZVwiLFxuICAgIGNvbHVtbkVkaXQ6IFwiUmVkaWdlciBrb2xvbm5lOiB7MH1cIixcbiAgICBpdGVtRWRpdDogXCJSZWRpZ2VyIGVsZW1lbnQ6IHswfVwiLFxuXG4gICAgdXJsOiBcIlVSTFwiLFxuICAgIHBhdGg6IFwiU3RpXCIsXG4gICAgdmFsdWVOYW1lOiBcIlZlcmRpIG5hdm5cIixcbiAgICB0aXRsZU5hbWU6IFwiVGl0dGVsIG5hdm5cIixcblxuICAgIGhhc090aGVyOiBcIkhhciBhbm5ldCBlbGVtZW50XCIsXG4gICAgb3RoZXJUZXh0OiBcIkFubmV0IGVsZW1lbnQgdGVrc3RcIixcbiAgICBuYW1lOiBcIk5hdm5cIixcbiAgICB0aXRsZTogXCJUaXR0ZWxcIixcbiAgICBjZWxsVHlwZTogXCJDZWxsZSB0eXBlXCIsXG4gICAgY29sQ291bnQ6IFwiQW50YWxsIGtvbG9ubmVyXCIsXG4gICAgY2hvaWNlc09yZGVyOiBcIlZlbGcgcmVra2Vmw7hsZ2UgcMOlIHZhbGdcIixcbiAgICB2aXNpYmxlOiBcIkVyIHN5bmxpZz9cIixcbiAgICBpc1JlcXVpcmVkOiBcIkVyIG7DuGR2ZW5kaWc/XCIsXG4gICAgc3RhcnRXaXRoTmV3TGluZTogXCJFciBzdGFydCBtZWQgbnkgbGluamU/XCIsXG4gICAgcm93czogXCJBbnRhbGwgcmFkZXJcIixcbiAgICBwbGFjZUhvbGRlcjogXCJJbm5kYXRlIHBsYXNzaG9sZGVyXCIsXG4gICAgc2hvd1ByZXZpZXc6IFwiRXIgZm9yaMOlbmRzdmlzbmluZyBhdiBiaWxkZSB2aXN0P1wiLFxuICAgIHN0b3JlRGF0YUFzVGV4dDogXCJMYWdyZSBmaWwgaW5uaG9sZCBpIEpTT04gcmVzdWx0YXQgc29tIHRla3N0XCIsXG4gICAgbWF4U2l6ZTogXCJNYWtzaW11bSBmaWxzdMO4cnJlbHNlIGkgYnl0ZXNcIixcbiAgICBpbWFnZUhlaWdodDogXCJCaWxkZSBow7h5ZGVcIixcbiAgICBpbWFnZVdpZHRoOiBcIkJpbGRlIGJyZWRkZVwiLFxuICAgIHJvd0NvdW50OiBcIkFudGFsbCByYWRlclwiLFxuICAgIGNvbHVtbkxheW91dDogXCJPcHBzZXR0IGtvbG9ubmVyXCIsXG4gICAgYWRkUm93TG9jYXRpb246IFwiTGVnZyB0aWwgcmFkIGtuYXBwIHBsYXNzZXJpbmdcIixcbiAgICBhZGRSb3dUZXh0OiBcIkxlZ2cgdGlsIHJhZCBrbmFwcCB0ZWtzdFwiLFxuICAgIHJlbW92ZVJvd1RleHQ6IFwiRmplcm4gcmFkIGtuYXBwIHRla3N0XCIsXG4gICAgbWluUmF0ZURlc2NyaXB0aW9uOiBcIkJlc2tyaXZlbHNlIE1pbmltdW0gdnVkZXJpbmdcIixcbiAgICBtYXhSYXRlRGVzY3JpcHRpb246IFwiQmVza3JpdmVsc2UgTWFrc2ltdW0gdnVyZGVyaW5nXCIsXG4gICAgaW5wdXRUeXBlOiBcIklubmRhdGEgdHlwZVwiLFxuICAgIG9wdGlvbnNDYXB0aW9uOiBcIlRla3N0IGZvciBhbHRlcm5hdGl2ZXJcIixcbiAgICBkZWZhdWx0VmFsdWU6IFwiU3RhbmRhcmQgdmVyZGlcIixcbiAgICBjZWxsc0RlZmF1bHRSb3c6IFwiU3RhbmRhcmQgY2VsbGUgdGVrc3RlclwiLFxuXG4gICAgc3VydmV5RWRpdG9yVGl0bGU6IFwiUmVkaWdlciBza2plbWEgaW5uc3RpbGxpbmdlclwiLFxuICAgIHFFZGl0b3JUaXRsZTogXCJSZWRpZ2VyOiB7MH1cIixcblxuICAgIG1heExlbmd0aDogXCJNYWtzaW11bSBsZW5nZGVcIixcblxuICAgIC8vc3VydmV5XG4gICAgc2hvd1RpdGxlOiBcIlZpcy9za2p1bCB0aXR0ZWxcIixcbiAgICBsb2NhbGU6IFwiU3RhbmRhcmQgc3Byw6VrXCIsXG4gICAgbW9kZTogXCJNb2R1cyAocmVkaWdlcmUva3VuIGxlc2luZylcIixcbiAgICBjbGVhckludmlzaWJsZVZhbHVlczogXCJGamVybiB1c3lubGlnZSB2ZXJkaWVyXCIsXG4gICAgY29va2llTmFtZTogXCJJbmZvcm1hc2pvbnNrYXBzZWwgbmF2biAoZm9yIMOlIGhpbmRyZSBicnVrIGF2IHNramVtYSB0byBnYW5nZXIgbG9jYWx0KVwiLFxuICAgIHNlbmRSZXN1bHRPblBhZ2VOZXh0OiBcIlNlbmQgc2tqZW1hIHJlc3VsdGF0IHZlZCBuZXN0ZSBzaWRlXCIsXG4gICAgc3RvcmVPdGhlcnNBc0NvbW1lbnQ6IFwiTGFncmUgJ2FuZHJlJyB2ZXJkaWVyIGkgZXQgc2VwYXJhdCBmZWx0XCIsXG4gICAgc2hvd1BhZ2VUaXRsZXM6IFwiVmlzIHNpZGV0aXRlbFwiLFxuICAgIHNob3dQYWdlTnVtYmVyczogXCJWaXMgc2lkZW51bW1lclwiLFxuICAgIHBhZ2VQcmV2VGV4dDogXCJGb3JyaWdlIHNpZGUga25hcHAgdGVrc3RcIixcbiAgICBwYWdlTmV4dFRleHQ6IFwiTmVzdGUgc2lkZSBrbmFwcCB0ZWtzdFwiLFxuICAgIGNvbXBsZXRlVGV4dDogXCJGdWxsZsO4ciBrbmFwcCB0ZWtzdFwiLFxuICAgIHN0YXJ0U3VydmV5VGV4dDogXCJTdGFydCBrbmFwcCB0ZWtzdFwiLFxuICAgIHNob3dOYXZpZ2F0aW9uQnV0dG9uczogXCJWaXMgbmF2aWdhc2pvbnNrbmFwcGVyIChzdGFuZGFyZCBuYXZpZ2VyaW5nKVwiLFxuICAgIHNob3dQcmV2QnV0dG9uOiBcIlZpcyBmb3JyaWdlIGtuYXBwIChicnVrZXIga2FuIGfDpSB0aWwgZm9ycmlnZSBzaWRlKVwiLFxuICAgIGZpcnN0UGFnZUlzU3RhcnRlZDogXCJEZW4gZsO4cnN0ZSBzaWRlbiBpIHNramVtYSBlciBzdGFydHNpZGUuXCIsXG4gICAgc2hvd0NvbXBsZXRlZFBhZ2U6IFwiVmlzIGZlcmRpZ3NpZGVuIHDDpSBzbHV0dGVuIChjb21wbGV0ZWRIdG1sKVwiLFxuICAgIGdvTmV4dFBhZ2VBdXRvbWF0aWM6XG4gICAgICBcIk7DpXIgZW4gaGFyIHN2YXJ0IGFsbGUgc3DDuHJzbcOlbCwgZ8OlIHRpbCBuZXN0ZSBzaWRlIGF1dG9tYXRpc2tcIixcbiAgICBzaG93UHJvZ3Jlc3NCYXI6IFwiVmlzIGZyZW1kcmlmdHNsaW5qZVwiLFxuICAgIHF1ZXN0aW9uVGl0bGVMb2NhdGlvbjogXCJTcMO4cnNtw6VsIHRpdHRlbCBwbGFzc2VyaW5nXCIsXG4gICAgcmVxdWlyZWRUZXh0OiBcIlN2YXIgbsO4ZHZlbmRpZyBzeW1ib2woZXIpXCIsXG4gICAgcXVlc3Rpb25TdGFydEluZGV4OiBcIlNww7hyc23DpWwgc3RhcnRpbmRla3MgKDEsIDIgZWxsZXIgJ0EnLCAnYScpXCIsXG4gICAgc2hvd1F1ZXN0aW9uTnVtYmVyczogXCJWaXMgc3DDuHJzbcOlbHNudW1tZXJcIixcbiAgICBxdWVzdGlvblRpdGxlVGVtcGxhdGU6XG4gICAgICBcIlNww7hyc23DpWwgdGl0dGVsIG1hbCwgc3RhbmRhcmQgZXI6ICd7bm99LiB7cmVxdWlyZX0ge3RpdGxlfSdcIixcbiAgICBxdWVzdGlvbkVycm9yTG9jYXRpb246IFwiU3DDuHJzbcOlbCBmZWlsIHBsYXNzZXJpbmdcIixcbiAgICBmb2N1c0ZpcnN0UXVlc3Rpb25BdXRvbWF0aWM6IFwiU2V0dCBmb2t1cyBww6UgZsO4cnN0ZSBzcMO4cnNtw6VsIG7DpXIgZW4gZW5kcmVyIHNpZGVcIixcbiAgICBxdWVzdGlvbnNPcmRlcjogXCJSZWtrZWbDuGxnZSBww6UgZWxlbWVudGVyIHDDpSBzaWRlblwiLFxuICAgIG1heFRpbWVUb0ZpbmlzaDogXCJNYWtzIHRpZCBmb3Igw6UgZ2rDuHJlIGZlcmRpZyBza2plbWFcIixcbiAgICBtYXhUaW1lVG9GaW5pc2hQYWdlOiBcIk1ha3MgdGlkIHRpbCDDpSBnasO4cmUgZmVyZGlnIGVuIHNpZGUgaSBza2plbWFcIixcbiAgICBzaG93VGltZXJQYW5lbDogXCJWaXMgdGlkdGFraW5nXCIsXG4gICAgc2hvd1RpbWVyUGFuZWxNb2RlOiBcIlZpcyB0aWR0YWtpbmcgbW9kdXNcIixcbiAgICByZW5kZXJNb2RlOiBcIkdqZW5naXZlbHNlIG1vZHVzXCIsXG4gICAgYWxsb3dBZGRQYW5lbDogXCJUaWxsYXQgw6UgbGVnZ2UgdGlsIHBhbmVsXCIsXG4gICAgYWxsb3dSZW1vdmVQYW5lbDogXCJUaWxsYXQgw6UgZmplcm5lIHBhbmVsXCIsXG4gICAgcGFuZWxBZGRUZXh0OiBcIkxlZ2cgdGlsIHBhbmVsIHRla3N0XCIsXG4gICAgcGFuZWxSZW1vdmVUZXh0OiBcIkZqZXJuIHBhbmVsIHRla3N0XCIsXG4gICAgaXNTaW5nbGVQYWdlOiBcIlZpcyBhbGxlIGVsZW1lbnRlciBww6UgZW4gc2lkZVwiLFxuXG4gICAgdGFiczoge1xuICAgICAgZ2VuZXJhbDogXCJHZW5lcmVsdFwiLFxuICAgICAgZmlsZU9wdGlvbnM6IFwiQWx0ZXJuYXRpdmVyXCIsXG4gICAgICBodG1sOiBcIkh0bWwtZWRpdG9yXCIsXG4gICAgICBjb2x1bW5zOiBcIktvbG9ubmVyXCIsXG4gICAgICByb3dzOiBcIlJhZGVyXCIsXG4gICAgICBjaG9pY2VzOiBcIlZhbGdcIixcbiAgICAgIGl0ZW1zOiBcIkVsZW1lbnRlclwiLFxuICAgICAgdmlzaWJsZUlmOiBcIlN5bmxpZyBodmlzXCIsXG4gICAgICBlbmFibGVJZjogXCJUaWxnamVuZ2VsaWcgaHZpc1wiLFxuICAgICAgcmF0ZVZhbHVlczogXCJSYW5nZXJpbmcgdmVyZGllclwiLFxuICAgICAgY2hvaWNlc0J5VXJsOiBcIlZhbGcgZnJhIHdlYlwiLFxuICAgICAgbWF0cml4Q2hvaWNlczogXCJTdGFuZGFyZCB2YWxnXCIsXG4gICAgICBtdWx0aXBsZVRleHRJdGVtczogXCJUZWtzdCBpbm5kYXRhXCIsXG4gICAgICB2YWxpZGF0b3JzOiBcIlZhbGlkZXJpbmdlclwiLFxuICAgICAgbmF2aWdhdGlvbjogXCJOYXZpZ2VyaW5nXCIsXG4gICAgICBxdWVzdGlvbjogXCJTcMO4cnNtw6VsXCIsXG4gICAgICBjb21wbGV0ZWRIdG1sOiBcIkZ1bGxmw7hydCBIdG1sXCIsXG4gICAgICBsb2FkaW5nSHRtbDogXCJMYXN0ZXIgSHRtbFwiLFxuICAgICAgdGltZXI6IFwiVGlkdGFrZXIvUXVpelwiLFxuICAgICAgdHJpZ2dlcnM6IFwiVHJpZ2dlcmVcIixcbiAgICAgIHRlbXBsYXRlVGl0bGU6IFwiTWFsIHRpdHRlbFwiXG4gICAgfSxcbiAgICBlZGl0UHJvcGVydHk6IFwiUmVkaWdlciBlZ2Vuc2thcCAnezB9J1wiLFxuICAgIGl0ZW1zOiBcIlsgRWxlbWVudGVyOiB7MH0gXVwiLFxuXG4gICAgZW50ZXJOZXdWYWx1ZTogXCJWZW5ubGlnc3Qgc2tyaXYgaW5uIGVuIHZlcmRpLlwiLFxuICAgIG5vcXVlc3Rpb25zOiBcIkRlciBlciBpbmdlbiBzcMO4cnNtw6VsIGkgc2tqZW1hLlwiLFxuICAgIGNyZWF0ZXRyaWdnZXI6IFwiVmVubmxpZ3N0IGxhZyBlbiB0cmlnZ2VyXCIsXG4gICAgdHJpZ2dlck9uOiBcIk7DpXIgXCIsXG4gICAgdHJpZ2dlck1ha2VQYWdlc1Zpc2libGU6IFwiR2rDuHIgc2lkZXIgc3lubGlnZTpcIixcbiAgICB0cmlnZ2VyTWFrZVF1ZXN0aW9uc1Zpc2libGU6IFwiR2rDuHIgZWxlbWVudGVyIHN5bmxpZ2U6XCIsXG4gICAgdHJpZ2dlckNvbXBsZXRlVGV4dDogXCJGdWxsZsO4ciBza2plbWEgZGVyc29tIHZlbGx5a2tldC5cIixcbiAgICB0cmlnZ2VyTm90U2V0OiBcIlRyaWdnZXIgZXIgaWtrZSBzYXR0XCIsXG4gICAgdHJpZ2dlclJ1bklmOiBcIktqw7hyIGRlcnNvbVwiLFxuICAgIHRyaWdnZXJTZXRUb05hbWU6IFwiRW5kcmUgdmVyZGllbiBhdjogXCIsXG4gICAgdHJpZ2dlckZyb21OYW1lOiBcIktvcGllciB2ZXJkaSBmcmE6IFwiLFxuICAgIHRyaWdnZXJSdW5FeHByZXNzaW9uOiBcIktqw7hyIGRldHRlIHV0dHJ5a2tldDpcIixcbiAgICB0cmlnZ2VyU2V0VmFsdWU6IFwidGlsOiBcIixcbiAgICB0cmlnZ2VySXNWYXJpYWJsZTogXCJJa2tlIGxlZ2cgdmFyaWFiZWxlbiBpIHJlc3VsdGF0ZXQuXCJcbiAgfSxcbiAgLy9Qcm9wZXJ0eSB2YWx1ZXNcbiAgcHY6IHtcbiAgICB0cnVlOiBcInRydWVcIixcbiAgICBmYWxzZTogXCJmYWxzZVwiLFxuICAgIGluaGVyaXQ6IFwiaW5oZXJpdFwiLFxuICAgIHNob3c6IFwic2hvd1wiLFxuICAgIGhpZGU6IFwiaGlkZVwiLFxuICAgIGRlZmF1bHQ6IFwiZGVmYXVsdFwiLFxuICAgIGluaXRpYWw6IFwiaW5pdGlhbFwiLFxuICAgIHJhbmRvbTogXCJyYW5kb21cIixcbiAgICBjb2xsYXBzZWQ6IFwiY29sbGFwc2VkXCIsXG4gICAgZXhwYW5kZWQ6IFwiZXhwYW5kZWRcIixcbiAgICBub25lOiBcIm5vbmVcIixcbiAgICBhc2M6IFwiYXNjZW5kaW5nXCIsXG4gICAgZGVzYzogXCJkZXNjZW5kaW5nXCIsXG4gICAgaW5kZXRlcm1pbmF0ZTogXCJpbmRldGVybWluYXRlXCIsXG4gICAgZGVjaW1hbDogXCJkZWNpbWFsXCIsXG4gICAgY3VycmVuY3k6IFwiY3VycmVuY3lcIixcbiAgICBwZXJjZW50OiBcInBlcmNlbnRcIixcbiAgICBmaXJzdEV4cGFuZGVkOiBcImZpcnN0RXhwYW5kZWRcIixcbiAgICBvZmY6IFwib2ZmXCIsXG4gICAgb25QYW5lbDogXCJvblBhbmVsXCIsXG4gICAgb25TdXJ2ZXk6IFwib25TdXJ2ZXlcIixcbiAgICBsaXN0OiBcImxpc3RcIixcbiAgICBwcm9ncmVzc1RvcDogXCJwcm9ncmVzc1RvcFwiLFxuICAgIHByb2dyZXNzQm90dG9tOiBcInByb2dyZXNzQm90dG9tXCIsXG4gICAgcHJvZ3Jlc3NUb3BCb3R0b206IFwicHJvZ3Jlc3NUb3BCb3R0b21cIixcbiAgICBob3Jpem9udGFsOiBcImhvcml6b250YWxcIixcbiAgICB2ZXJ0aWNhbDogXCJ2ZXJ0aWNhbFwiLFxuICAgIHRvcDogXCJ0b3BcIixcbiAgICBib3R0b206IFwiYm90dG9tXCIsXG4gICAgdG9wQm90dG9tOiBcInRvcCBhbmQgYm90dG9tXCIsXG4gICAgbGVmdDogXCJsZWZ0XCIsXG4gICAgY29sb3I6IFwiY29sb3JcIixcbiAgICBkYXRlOiBcImRhdGVcIixcbiAgICBkYXRldGltZTogXCJkYXRldGltZVwiLFxuICAgIFwiZGF0ZXRpbWUtbG9jYWxcIjogXCJkYXRldGltZS1sb2NhbFwiLFxuICAgIGVtYWlsOiBcImVtYWlsXCIsXG4gICAgbW9udGg6IFwibW9udGhcIixcbiAgICBudW1iZXI6IFwibnVtYmVyXCIsXG4gICAgcGFzc3dvcmQ6IFwicGFzc3dvcmRcIixcbiAgICByYW5nZTogXCJyYW5nZVwiLFxuICAgIHRlbDogXCJ0ZWxcIixcbiAgICB0ZXh0OiBcInRleHRcIixcbiAgICB0aW1lOiBcInRpbWVcIixcbiAgICB1cmw6IFwidXJsXCIsXG4gICAgd2VlazogXCJ3ZWVrXCIsXG4gICAgaGlkZGVuOiBcImhpZGRlblwiLFxuICAgIG9uOiBcIm9uXCIsXG4gICAgb25QYWdlOiBcIm9uUGFnZVwiLFxuICAgIGVkaXQ6IFwiZWRpdFwiLFxuICAgIGRpc3BsYXk6IFwiZGlzcGxheVwiLFxuICAgIG9uQ29tcGxldGU6IFwib25Db21wbGV0ZVwiLFxuICAgIG9uSGlkZGVuOiBcIm9uSGlkZGVuXCIsXG4gICAgYWxsOiBcImFsbFwiLFxuICAgIHBhZ2U6IFwicGFnZVwiLFxuICAgIHN1cnZleTogXCJzdXJ2ZXlcIixcbiAgICBvbk5leHRQYWdlOiBcIm9uTmV4dFBhZ2VcIixcbiAgICBvblZhbHVlQ2hhbmdlZDogXCJvblZhbHVlQ2hhbmdlZFwiXG4gIH0sXG4gIC8vT3BlcmF0b3JzXG4gIG9wOiB7XG4gICAgZW1wdHk6IFwiaXMgZW1wdHlcIixcbiAgICBub3RlbXB0eTogXCJpcyBub3QgZW1wdHlcIixcbiAgICBlcXVhbDogXCJlcXVhbHNcIixcbiAgICBub3RlcXVhbDogXCJub3QgZXF1YWxzXCIsXG4gICAgY29udGFpbnM6IFwiY29udGFpbnNcIixcbiAgICBub3Rjb250YWluczogXCJub3QgY29udGFpbnNcIixcbiAgICBncmVhdGVyOiBcImdyZWF0ZXJcIixcbiAgICBsZXNzOiBcImxlc3NcIixcbiAgICBncmVhdGVyb3JlcXVhbDogXCJncmVhdGVyIG9yIGVxdWFsc1wiLFxuICAgIGxlc3NvcmVxdWFsOiBcImxlc3Mgb3IgZXF1YWxzXCJcbiAgfSxcbiAgLy9FbWJlZCB3aW5kb3dcbiAgZXc6IHtcbiAgICBhbmd1bGFyOiBcIkJydWsgQW5ndWxhciB2ZXJzam9uXCIsXG4gICAganF1ZXJ5OiBcIkJydWsgalF1ZXJ5IHZlcnNqb25cIixcbiAgICBrbm9ja291dDogXCJCcnVrIEtub2Nrb3V0IHZlcnNqb25cIixcbiAgICByZWFjdDogXCJCcnVrIFJlYWN0IHZlcnNqb25cIixcbiAgICB2dWU6IFwiQnJ1ayBWdWUgdmVyc2pvblwiLFxuICAgIGJvb3RzdHJhcDogXCJGb3IgYm9vdHN0cmFwIGZyYW1ld29ya1wiLFxuICAgIHN0YW5kYXJkOiBcIkluZ2VuIGJvb3RzdHJhcFwiLFxuICAgIHNob3dPblBhZ2U6IFwiVmlzIHNramVtYSBww6UgZW4gc2lkZVwiLFxuICAgIHNob3dJbldpbmRvdzogXCJWaXMgc2tqZW1hIGkgZXQgdmluZHVcIixcbiAgICBsb2FkRnJvbVNlcnZlcjogXCJIZW50IHNramVtYSBzb20gSlNPTiBmcmEgc2VydmVyZW5cIixcbiAgICB0aXRsZVNjcmlwdDogXCJTY3JpcHRzIG9nIHN0eWxlc1wiLFxuICAgIHRpdGxlSHRtbDogXCJIVE1MXCIsXG4gICAgdGl0bGVKYXZhU2NyaXB0OiBcIkphdmFTY3JpcHRcIlxuICB9LFxuICAvL1Rlc3QgU3VydmV5XG4gIHRzOiB7XG4gICAgc2VsZWN0UGFnZTogXCJWZWxnIHNpZGVuIGZvciDDpSB0ZXN0ZSBkZW46XCIsXG4gICAgc2hvd0ludmlzaWJsZUVsZW1lbnRzOiBcIlZpcyB1c3lubGlnZSBlbGVtZW50ZXJcIlxuICB9LFxuICB2YWxpZGF0b3JzOiB7XG4gICAgYW5zd2VyY291bnR2YWxpZGF0b3I6IFwiYW5zd2VyIGNvdW50XCIsXG4gICAgZW1haWx2YWxpZGF0b3I6IFwiZS1tYWlsXCIsXG4gICAgZXhwcmVzc2lvbnZhbGlkYXRvcjogXCJleHByZXNzaW9uXCIsXG4gICAgbnVtZXJpY3ZhbGlkYXRvcjogXCJudW1lcmljXCIsXG4gICAgcmVnZXh2YWxpZGF0b3I6IFwicmVnZXhcIixcbiAgICB0ZXh0dmFsaWRhdG9yOiBcInRleHRcIlxuICB9LFxuICB0cmlnZ2Vyczoge1xuICAgIGNvbXBsZXRldHJpZ2dlcjogXCJza2plbWEgZnVsbGbDuHJ0XCIsXG4gICAgc2V0dmFsdWV0cmlnZ2VyOiBcInNldHQgdmVyZGlcIixcbiAgICBjb3B5dmFsdWV0cmlnZ2VyOiBcImtvcGllciB2ZXJkaVwiLFxuICAgIHJ1bmV4cHJlc3Npb250cmlnZ2VyOiBcImtqw7hyIHV0dHJ5a2tcIixcbiAgICB2aXNpYmxldHJpZ2dlcjogXCJlbmRyZSBzeW5saWdoZXRcIlxuICB9LFxuICAvL1Byb3BlcnRpZXNcbiAgcDoge1xuICAgIG5hbWU6IFwibmFtZVwiLFxuICAgIHRpdGxlOiB7XG4gICAgICBuYW1lOiBcInRpdGxlXCIsXG4gICAgICB0aXRsZTogXCJMYSBkZW4gdsOmcmUgdG9tIGh2aXMgZGV0IGVyIHNhbW1lIHNvbSAnTmFtZSdcIlxuICAgIH0sXG5cbiAgICBuYXZpZ2F0aW9uQnV0dG9uc1Zpc2liaWxpdHk6IFwibmF2aWdhdGlvbkJ1dHRvbnNWaXNpYmlsaXR5XCIsXG4gICAgcXVlc3Rpb25zT3JkZXI6IFwicXVlc3Rpb25zT3JkZXJcIixcbiAgICBtYXhUaW1lVG9GaW5pc2g6IFwibWF4VGltZVRvRmluaXNoXCIsXG5cbiAgICB2aXNpYmxlOiBcInZpc2libGVcIixcbiAgICB2aXNpYmxlSWY6IFwidmlzaWJsZUlmXCIsXG4gICAgcXVlc3Rpb25UaXRsZUxvY2F0aW9uOiBcInF1ZXN0aW9uVGl0bGVMb2NhdGlvblwiLFxuICAgIGRlc2NyaXB0aW9uOiBcImRlc2NyaXB0aW9uXCIsXG4gICAgc3RhdGU6IFwic3RhdGVcIixcbiAgICBpc1JlcXVpcmVkOiBcImlzUmVxdWlyZWRcIixcbiAgICBpbmRlbnQ6IFwiaW5kZW50XCIsXG4gICAgcmVxdWlyZWRFcnJvclRleHQ6IFwicmVxdWlyZWRFcnJvclRleHRcIixcbiAgICBzdGFydFdpdGhOZXdMaW5lOiBcInN0YXJ0V2l0aE5ld0xpbmVcIixcbiAgICBpbm5lckluZGVudDogXCJpbm5lckluZGVudFwiLFxuICAgIHBhZ2U6IFwicGFnZVwiLFxuXG4gICAgd2lkdGg6IFwid2lkdGhcIixcblxuICAgIGNvbW1lbnRUZXh0OiBcImNvbW1lbnRUZXh0XCIsXG4gICAgdmFsdWVOYW1lOiBcInZhbHVlTmFtZVwiLFxuICAgIGVuYWJsZUlmOiBcImVuYWJsZUlmXCIsXG4gICAgZGVmYXVsdFZhbHVlOiBcImRlZmF1bHRWYWx1ZVwiLFxuICAgIGNvcnJlY3RBbnN3ZXI6IFwiY29ycmVjdEFuc3dlclwiLFxuICAgIHJlYWRPbmx5OiBcInJlYWRPbmx5XCIsXG4gICAgdmFsaWRhdG9yczogXCJ2YWxpZGF0b3JzXCIsXG4gICAgdGl0bGVMb2NhdGlvbjogXCJ0aXRsZUxvY2F0aW9uXCIsXG5cbiAgICBoYXNDb21tZW50OiBcImhhc0NvbW1lbnRcIixcbiAgICBoYXNPdGhlcjogXCJoYXNPdGhlclwiLFxuICAgIGNob2ljZXM6IFwiY2hvaWNlc1wiLFxuICAgIGNob2ljZXNPcmRlcjogXCJjaG9pY2VzT3JkZXJcIixcbiAgICBjaG9pY2VzQnlVcmw6IFwiY2hvaWNlc0J5VXJsXCIsXG4gICAgb3RoZXJUZXh0OiBcIm90aGVyVGV4dFwiLFxuICAgIG90aGVyRXJyb3JUZXh0OiBcIm90aGVyRXJyb3JUZXh0XCIsXG4gICAgc3RvcmVPdGhlcnNBc0NvbW1lbnQ6IFwic3RvcmVPdGhlcnNBc0NvbW1lbnRcIixcblxuICAgIGxhYmVsOiBcImxhYmVsXCIsXG4gICAgc2hvd1RpdGxlOiBcInNob3dUaXRsZVwiLFxuICAgIHZhbHVlVHJ1ZTogXCJ2YWx1ZVRydWVcIixcbiAgICB2YWx1ZUZhbHNlOiBcInZhbHVlRmFsc2VcIixcblxuICAgIGNvbHM6IFwiY29sc1wiLFxuICAgIHJvd3M6IFwicm93c1wiLFxuICAgIHBsYWNlSG9sZGVyOiBcInBsYWNlSG9sZGVyXCIsXG5cbiAgICBvcHRpb25zQ2FwdGlvbjogXCJvcHRpb25zQ2FwdGlvblwiLFxuXG4gICAgZXhwcmVzc2lvbjogXCJleHByZXNzaW9uXCIsXG4gICAgZm9ybWF0OiBcImZvcm1hdFwiLFxuICAgIGRpc3BsYXlTdHlsZTogXCJkaXNwbGF5U3R5bGVcIixcbiAgICBjdXJyZW5jeTogXCJjdXJyZW5jeVwiLFxuICAgIHVzZUdyb3VwaW5nOiBcInVzZUdyb3VwaW5nXCIsXG5cbiAgICBzaG93UHJldmlldzogXCJzaG93UHJldmlld1wiLFxuICAgIGFsbG93TXVsdGlwbGU6IFwiYWxsb3dNdWx0aXBsZVwiLFxuICAgIGltYWdlSGVpZ2h0OiBcImltYWdlSGVpZ2h0XCIsXG4gICAgaW1hZ2VXaWR0aDogXCJpbWFnZVdpZHRoXCIsXG4gICAgc3RvcmVEYXRhQXNUZXh0OiBcInN0b3JlRGF0YUFzVGV4dFwiLFxuICAgIG1heFNpemU6IFwibWF4U2l6ZVwiLFxuXG4gICAgaHRtbDogXCJodG1sXCIsXG5cbiAgICBjb2x1bW5zOiBcImNvbHVtbnNcIixcbiAgICBjZWxsczogXCJjZWxsc1wiLFxuICAgIGlzQWxsUm93UmVxdWlyZWQ6IFwiaXNBbGxSb3dSZXF1aXJlZFwiLFxuXG4gICAgaG9yaXpvbnRhbFNjcm9sbDogXCJob3Jpem9udGFsU2Nyb2xsXCIsXG4gICAgY2VsbFR5cGU6IFwiY2VsbFR5cGVcIixcbiAgICBjb2x1bW5zTGF5b3V0OiBcImNvbHVtbnNMYXlvdXRcIixcbiAgICBjb2x1bW5Db2xDb3VudDogXCJjb2x1bW5Db2xDb3VudFwiLFxuICAgIGNvbHVtbk1pbldpZHRoOiBcImNvbHVtbk1pbldpZHRoXCIsXG5cbiAgICByb3dDb3VudDogXCJyb3dDb3VudFwiLFxuICAgIG1pblJvd0NvdW50OiBcIm1pblJvd0NvdW50XCIsXG4gICAgbWF4Um93Q291bnQ6IFwibWF4Um93Q291bnRcIixcbiAgICBrZXlOYW1lOiBcImtleU5hbWVcIixcbiAgICBrZXlEdXBsaWNhdGlvbkVycm9yOiBcImtleUR1cGxpY2F0aW9uRXJyb3JcIixcbiAgICBjb25maXJtRGVsZXRlOiBcImNvbmZpcm1EZWxldGVcIixcbiAgICBjb25maXJtRGVsZXRlVGV4dDogXCJjb25maXJtRGVsZXRlVGV4dFwiLFxuICAgIGFkZFJvd0xvY2F0aW9uOiBcImFkZFJvd0xvY2F0aW9uXCIsXG4gICAgYWRkUm93VGV4dDogXCJhZGRSb3dUZXh0XCIsXG4gICAgcmVtb3ZlUm93VGV4dDogXCJyZW1vdmVSb3dUZXh0XCIsXG5cbiAgICBpdGVtczogXCJpdGVtc1wiLFxuICAgIGl0ZW1TaXplOiBcIml0ZW1TaXplXCIsXG4gICAgY29sQ291bnQ6IFwiY29sQ291bnRcIixcblxuICAgIHRlbXBsYXRlVGl0bGU6IFwidGVtcGxhdGVUaXRsZVwiLFxuICAgIHRlbXBsYXRlRGVzY3JpcHRpb246IFwidGVtcGxhdGVEZXNjcmlwdGlvblwiLFxuICAgIGFsbG93QWRkUGFuZWw6IFwiYWxsb3dBZGRQYW5lbFwiLFxuICAgIGFsbG93UmVtb3ZlUGFuZWw6IFwiYWxsb3dSZW1vdmVQYW5lbFwiLFxuICAgIHBhbmVsQ291bnQ6IFwicGFuZWxDb3VudFwiLFxuICAgIG1pblBhbmVsQ291bnQ6IFwibWluUGFuZWxDb3VudFwiLFxuICAgIG1heFBhbmVsQ291bnQ6IFwibWF4UGFuZWxDb3VudFwiLFxuICAgIHBhbmVsc1N0YXRlOiBcInBhbmVsc1N0YXRlXCIsXG4gICAgcGFuZWxBZGRUZXh0OiBcInBhbmVsQWRkVGV4dFwiLFxuICAgIHBhbmVsUmVtb3ZlVGV4dDogXCJwYW5lbFJlbW92ZVRleHRcIixcbiAgICBwYW5lbFByZXZUZXh0OiBcInBhbmVsUHJldlRleHRcIixcbiAgICBwYW5lbE5leHRUZXh0OiBcInBhbmVsTmV4dFRleHRcIixcbiAgICBzaG93UXVlc3Rpb25OdW1iZXJzOiBcInNob3dRdWVzdGlvbk51bWJlcnNcIixcbiAgICBzaG93UmFuZ2VJblByb2dyZXNzOiBcInNob3dSYW5nZUluUHJvZ3Jlc3NcIixcbiAgICByZW5kZXJNb2RlOiBcInJlbmRlck1vZGVcIixcbiAgICB0ZW1wbGF0ZVRpdGxlTG9jYXRpb246IFwidGVtcGxhdGVUaXRsZUxvY2F0aW9uXCIsXG5cbiAgICByYXRlVmFsdWVzOiBcInJhdGVWYWx1ZXNcIixcbiAgICByYXRlTWluOiBcInJhdGVNaW5cIixcbiAgICByYXRlTWF4OiBcInJhdGVNYXhcIixcbiAgICByYXRlU3RlcDogXCJyYXRlU3RlcFwiLFxuICAgIG1pblJhdGVEZXNjcmlwdGlvbjogXCJtaW5SYXRlRGVzY3JpcHRpb25cIixcbiAgICBtYXhSYXRlRGVzY3JpcHRpb246IFwibWF4UmF0ZURlc2NyaXB0aW9uXCIsXG5cbiAgICBpbnB1dFR5cGU6IFwiaW5wdXRUeXBlXCIsXG4gICAgc2l6ZTogXCJzaXplXCIsXG5cbiAgICBsb2NhbGU6IFwibG9jYWxlXCIsXG4gICAgZm9jdXNGaXJzdFF1ZXN0aW9uQXV0b21hdGljOiBcImZvY3VzRmlyc3RRdWVzdGlvbkF1dG9tYXRpY1wiLFxuICAgIGNvbXBsZXRlZEh0bWw6IFwiY29tcGxldGVkSHRtbFwiLFxuICAgIGNvbXBsZXRlZEJlZm9yZUh0bWw6IFwiY29tcGxldGVkQmVmb3JlSHRtbFwiLFxuICAgIGxvYWRpbmdIdG1sOiBcImxvYWRpbmdIdG1sXCIsXG4gICAgdHJpZ2dlcnM6IFwidHJpZ2dlcnNcIixcbiAgICBjb29raWVOYW1lOiBcImNvb2tpZU5hbWVcIixcbiAgICBzZW5kUmVzdWx0T25QYWdlTmV4dDogXCJzZW5kUmVzdWx0T25QYWdlTmV4dFwiLFxuICAgIHNob3dOYXZpZ2F0aW9uQnV0dG9uczogXCJzaG93TmF2aWdhdGlvbkJ1dHRvbnNcIixcbiAgICBzaG93UHJldkJ1dHRvbjogXCJzaG93UHJldkJ1dHRvblwiLFxuICAgIHNob3dQYWdlVGl0bGVzOiBcInNob3dQYWdlVGl0bGVzXCIsXG4gICAgc2hvd0NvbXBsZXRlZFBhZ2U6IFwic2hvd0NvbXBsZXRlZFBhZ2VcIixcbiAgICBzaG93UGFnZU51bWJlcnM6IFwic2hvd1BhZ2VOdW1iZXJzXCIsXG4gICAgcXVlc3Rpb25FcnJvckxvY2F0aW9uOiBcInF1ZXN0aW9uRXJyb3JMb2NhdGlvblwiLFxuICAgIHNob3dQcm9ncmVzc0JhcjogXCJzaG93UHJvZ3Jlc3NCYXJcIixcbiAgICBtb2RlOiBcIm1vZGVcIixcbiAgICBnb05leHRQYWdlQXV0b21hdGljOiBcImdvTmV4dFBhZ2VBdXRvbWF0aWNcIixcbiAgICBjaGVja0Vycm9yc01vZGU6IFwiY2hlY2tFcnJvcnNNb2RlXCIsXG4gICAgY2xlYXJJbnZpc2libGVWYWx1ZXM6IFwiY2xlYXJJbnZpc2libGVWYWx1ZXNcIixcbiAgICBzdGFydFN1cnZleVRleHQ6IFwic3RhcnRTdXJ2ZXlUZXh0XCIsXG4gICAgcGFnZVByZXZUZXh0OiBcInBhZ2VQcmV2VGV4dFwiLFxuICAgIHBhZ2VOZXh0VGV4dDogXCJwYWdlTmV4dFRleHRcIixcbiAgICBjb21wbGV0ZVRleHQ6IFwiY29tcGxldGVUZXh0XCIsXG4gICAgcmVxdWlyZWRUZXh0OiBcInJlcXVpcmVkVGV4dFwiLFxuICAgIHF1ZXN0aW9uU3RhcnRJbmRleDogXCJxdWVzdGlvblN0YXJ0SW5kZXhcIixcbiAgICBxdWVzdGlvblRpdGxlVGVtcGxhdGU6IFwicXVlc3Rpb25UaXRsZVRlbXBsYXRlXCIsXG4gICAgZmlyc3RQYWdlSXNTdGFydGVkOiBcImZpcnN0UGFnZUlzU3RhcnRlZFwiLFxuICAgIGlzU2luZ2xlUGFnZTogXCJpc1NpbmdsZVBhZ2VcIixcbiAgICBtYXhUaW1lVG9GaW5pc2hQYWdlOiBcIm1heFRpbWVUb0ZpbmlzaFBhZ2VcIixcbiAgICBzaG93VGltZXJQYW5lbDogXCJzaG93VGltZXJQYW5lbFwiLFxuICAgIHNob3dUaW1lclBhbmVsTW9kZTogXCJzaG93VGltZXJQYW5lbE1vZGVcIixcblxuICAgIGRlZmF1bHRQYW5lbFZhbHVlOiBcImRlZmF1bHRQYW5lbFZhbHVlXCIsXG4gICAgZGVmYXVsdFJvd1ZhbHVlOiBcImRlZmF1bHRSb3dWYWx1ZVwiLFxuICAgIGhhc05vbmU6IFwiaGFzTm9uZVwiLFxuICAgIG5vbmVUZXh0OiBcIm5vbmVUZXh0XCIsXG5cbiAgICB0ZXh0OiBcInRleHRcIixcbiAgICBtaW5WYWx1ZTogXCJtaW5pbXVtIHZhbHVlXCIsXG4gICAgbWF4VmFsdWU6IFwibWF4aW11bSB2YWx1ZVwiLFxuICAgIG1pbkxlbmd0aDogXCJtaW51bXVtIGxlbmd0aFwiLFxuICAgIG1heExlbmd0aDogXCJtYXhpbXVtIGxlbmd0aFwiLFxuICAgIGFsbG93RGlnaXRzOiBcImFsbG93IGRpZ2l0c1wiLFxuICAgIG1pbkNvdW50OiBcIm1pbnVtdW0gY291bnRcIixcbiAgICBtYXhDb3VudDogXCJtYXhpbXVtIGNvdW50XCIsXG4gICAgcmVnZXg6IFwicmVndWxhciBleHByZXNzaW9uXCJcbiAgfVxufTtcbi8vVW5jb21tZW50IHRoaXMgbGluZSBvbiBjcmVhdGluZyBhIHRyYW5zbGF0aW9uIGZpbGUuIFlvdSBzaG91bGQgcmVwbGFjZSBcImVuXCIgYW5kIGVuU3RyaW5ncyB3aXRoIHlvdXIgbG9jYWxlIChcImZyXCIsIFwiZGVcIiBhbmQgc28gb24pIGFuZCB5b3VyIHZhcmlhYmxlLlxuZWRpdG9yTG9jYWxpemF0aW9uLmxvY2FsZXNbXCJuYlwiXSA9IG5iU3RyaW5ncztcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9sb2NhbGl6YXRpb24vbm9yd2VnaWFuLnRzIiwiaW1wb3J0IHsgZWRpdG9yTG9jYWxpemF0aW9uIH0gZnJvbSBcIi4uL2VkaXRvckxvY2FsaXphdGlvblwiO1xuXG52YXIgcGVyc2lhblN0cmluZ3MgPSB7XG4gIC8vc3VydmV5IHRlbXBsYXRlc1xuICBzdXJ2ZXk6IHtcbiAgICBlZGl0OiBcItmI24zYsdin24zYtFwiLFxuICAgIGV4dGVybmFsSGVscExpbms6IFwiV2F0Y2ggYW5kIGxlYXJuIGhvdyB0byBjcmVhdGUgc3VydmV5c1wiLFxuICAgIGV4dGVybmFsSGVscExpbmtVcmw6XG4gICAgICAgIFwiaHR0cHM6Ly93d3cueW91dHViZS5jb20vY2hhbm5lbC9VQ0gycnU5b2tJY29vTlpmcElieXE0cVE/dmlld19hcz1zdWJzY3JpYmVyXCIsXG4gICAgZHJvcFF1ZXN0aW9uOiBcItmE2LfZgdinINin2LIg2KzYudio2Ycg2KfYqNiy2KfYsSDYs9mI2KfZhNuMINiv2LEg2KfbjNmG2KzYpyDZgtix2KfYsSDYr9mH24zYr1wiLFxuICAgIGNvcHk6IFwi2qnZvtuMXCIsXG4gICAgYWRkVG9Ub29sYm94OiBcItin2YHYstmI2K/ZhiDYqNmHINis2LnYqNmHINin2KjYstin2LFcIixcbiAgICBkZWxldGVQYW5lbDogXCLYrdiw2YEg2b7ZhtmEXCIsXG4gICAgZGVsZXRlUXVlc3Rpb246IFwi2K3YsNmBINiz2YjYp9mEXCIsXG4gICAgY29udmVydFRvOiBcItiq2KjYr9uM2YQg2KjZh1wiLFxuICAgIGRyYWc6IFwiRHJhZyBlbGVtZW50XCJcblxuICB9LFxuICAvL3F1ZXN0aW9uVHlwZXNcbiAgcXQ6IHtcbiAgICBkZWZhdWx0OiBcIkRlZmF1bHRcIixcbiAgICBjaGVja2JveDogXCLahtmG2K8g2KfZhtiq2K7Yp9io24xcIixcbiAgICBjb21tZW50OiBcItmG2LjYsVwiLFxuICAgIGltYWdlcGlja2VyOiBcIkltYWdlIHBpY2tlclwiLFxuICAgIGRyb3Bkb3duOiBcItmE24zYs9iqINin2YbYqtiu2KfYqNuMXCIsXG4gICAgZmlsZTogXCLZgdin24zZhFwiLFxuICAgIGh0bWw6IFwiSHRtbFwiLFxuICAgIG1hdHJpeDogXCLZhdin2KrYsduM2LMgKNiq2qkg2KfZhtiq2K7Yp9io24wpXCIsXG4gICAgbWF0cml4ZHJvcGRvd246IFwi2YXYp9iq2LHbjNizICjahtmG2K8g2KfZhtiq2K7Yp9io24wpXCIsXG4gICAgbWF0cml4ZHluYW1pYzogXCLZhdin2KrYsduM2LMgKNiz2LfYsdmH2KfbjCDYr9in24zZhtin2YXbjNqpKVwiLFxuICAgIG11bHRpcGxldGV4dDogXCLZhdiq2YYg2obZhtivINiu2LfbjFwiLFxuICAgIHBhbmVsOiBcItm+2YbZhFwiLFxuICAgIHBhbmVsZHluYW1pYzogXCLZvtmG2YQgKNm+2YbZhCDZh9in24wg2K/Yp9uM2YbYp9mF24zaqSlcIixcbiAgICByYWRpb2dyb3VwOiBcItiq2qkg2KfZhtiq2K7Yp9io24xcIixcbiAgICByYXRpbmc6IFwi2LHYqtio2Ycg2KjZhtiv24xcIixcbiAgICB0ZXh0OiBcItmF2KrZhiDYqtqpINiu2LfbjFwiLFxuICAgIGJvb2xlYW46IFwi2LXYrduM2K0g2Ygg2LrZhNi3XCIsXG4gICAgZXhwcmVzc2lvbjogXCLYqtmI2LXbjNmB24xcIixcbiAgICBmbG93cGFuZWw6IFwiRmxvdyBQYW5lbFwiXG4gIH0sXG4gIC8vU3RyaW5ncyBpbiBFZGl0b3JcbiAgZWQ6IHtcbiAgICBkZWZhdWx0TG9jYWxlOiBcItm+24zYtCDZgdix2LYgKHswfSlcIixcbiAgICBzdXJ2ZXk6IFwi2YbYuNix2LPZhtis24xcIixcbiAgICBzZXR0aW5nczogXCJTdXJ2ZXkgU2V0dGluZ3NcIixcbiAgICBvcGplY3RQcm9wZXJ0aWVzSGVhZGVyOiBcIkFkdmFuY2VkXCIsXG4gICAgc2hvd09iamVjdFByb3BlcnRpZXM6IFwiU2hvdyBPYmplY3QgUHJvcGVydGllc1wiLFxuICAgIGhpZGVPYmplY3RQcm9wZXJ0aWVzOiBcIkhpZGUgT2JqZWN0IFByb3BlcnRpZXNcIixcbiAgICBlZGl0U3VydmV5OiBcItmI24zYsdin24zYtCDZhti42LHYs9mG2KzbjFwiLFxuICAgIGFkZE5ld1BhZ2U6IFwi2K/YsdisINi12YHYrdmHINis2K/bjNivXCIsXG4gICAgbW92ZVJpZ2h0OiBcItin2LPaqdix2YjZhCDYqNmHINix2KfYs9iqXCIsXG4gICAgbW92ZUxlZnQ6IFwi2KfYs9qp2LHZiNmEINio2Ycg2obZvlwiLFxuICAgIGRlbGV0ZVBhZ2U6IFwi2K3YsNmBINi12YHYrdmHXCIsXG4gICAgZWRpdFBhZ2U6IFwi2YjbjNix2KfbjNi0INi12YHYrdmHXCIsXG4gICAgZWRpdDogXCLZiNuM2LHYp9uM2LRcIixcbiAgICBuZXdQYWdlTmFtZTogXCLYtdmB2K3Zh1wiLFxuICAgIG5ld1F1ZXN0aW9uTmFtZTogXCLYs9mI2KfZhFwiLFxuICAgIG5ld1BhbmVsTmFtZTogXCLZvtmG2YRcIixcbiAgICBuZXdUZXh0SXRlbU5hbWU6IFwidGV4dFwiLFxuICAgIHRlc3RTdXJ2ZXk6IFwi2KLYstmF2KfbjNi0INmG2LjYsdiz2YbYrNuMXCIsXG4gICAgdGVzdFN1cnZleUFnYWluOiBcItii2LLZhdin24zYtCDYr9mI2KjYp9ix2Ycg2YbYuNix2LPZhtis24xcIixcbiAgICB0ZXN0U3VydmV5V2lkdGg6IFwi2LnYsdi2INmG2LjYsdiz2YbYrNuMOiBcIixcbiAgICBsb2dpYzogXCJTdXJ2ZXkgTG9naWNcIixcbiAgICBlbWJlZFN1cnZleTogXCLZhti42LHYs9mG2KzbjCDYqtmI2qnYp9ixXCIsXG4gICAgdHJhbnNsYXRpb246IFwi2KrYsdis2YXZh1wiLFxuICAgIHNhdmVTdXJ2ZXk6IFwi2LDYrtuM2LHZhyDZhti42LHYs9mG2KzbjFwiLFxuICAgIGRlc2lnbmVyOiBcIti32LHYp9itINmG2LjYsdiz2YbYrNuMXCIsXG4gICAganNvbkVkaXRvcjogXCLZiNuM2LHYp9uM2LTar9ixIEpTT05cIixcbiAgICB1bmRvOiBcItio2KfYstqv2LHYr9in2YbbjFwiLFxuICAgIHJlZG86IFwi2KjYp9iy2KfZhtis2KfZhVwiLFxuICAgIG9wdGlvbnM6IFwi2KfZhtiq2K7Yp9ioINmH2KdcIixcbiAgICBnZW5lcmF0ZVZhbGlkSlNPTjogXCLYqtmI2YTbjNivINqp2K8g2YXYudiq2KjYsSBKU09OXCIsXG4gICAgZ2VuZXJhdGVSZWFkYWJsZUpTT046IFwi2KrZiNmE24zYryDaqdivINiu2YjYp9mG2KcgSlNPTlwiLFxuICAgIHRvb2xib3g6IFwi2KzYudio2Ycg2KfYqNiy2KfYsVwiLFxuICAgIHRvb2xib3hHZW5lcmFsQ2F0ZWdvcnk6IFwi2LnZhdmI2YXbjFwiLFxuICAgIGRlbFNlbE9iamVjdDogXCLYrdiw2YEg2YXZiNix2K8g2KfZhtiq2K7Yp9io24xcIixcbiAgICBlZGl0U2VsT2JqZWN0OiBcItmI24zYsdin24zYtCDZhdmI2LHYryDYp9mG2KrYrtin2KjbjFwiLFxuICAgIGNvcnJlY3RKU09OOiBcItmE2LfZgdinIEpTT04g2LHYpyDYqti12K3bjNitINqp2YbbjNivLlwiLFxuICAgIHN1cnZleVJlc3VsdHM6IFwi2YbYqtin24zYrCDZhti42LHYs9mG2KzbjDogXCIsXG4gICAgc3VydmV5UmVzdWx0c1RhYmxlOiBcItio2Ycg2LXZiNix2Kog2KzYr9mI2YRcIixcbiAgICBzdXJ2ZXlSZXN1bHRzSnNvbjogXCLYqNmHINi12YjYsdiqIEpTT05cIixcbiAgICByZXN1bHRzVGl0bGU6IFwi2LnZhtmI2KfZhiDYs9mI2KfZhFwiLFxuICAgIHJlc3VsdHNOYW1lOiBcItmG2KfZhSDYs9mI2KfZhFwiLFxuICAgIHJlc3VsdHNWYWx1ZTogXCLZhdit2KrZiNin24wg2b7Yp9iz2K5cIixcbiAgICByZXN1bHRzRGlzcGxheVZhbHVlOiBcItmF2K3YqtmI2KfbjCDZhtmF2KfbjNi024xcIixcbiAgICBtb2RpZmllZDogXCLYqti624zbjNixINiv2KfYr9mHINi02K/Zh1wiLFxuICAgIHNhdmluZzogXCLYr9ixINit2KfZhCDYsNiu24zYsdmHXCIsXG4gICAgc2F2ZWQ6IFwi2LDYrtuM2LHZhyDYtNivXCIsXG4gICAgc2F2ZUVycm9yOiBcItiu2LfYpyEg2YXYrdiq2YjYp9uMINmI24zYsdin24zYtNqv2LEg2LDYrtuM2LHZhyDZhti02K/ZhyDYp9iz2KouXCIsXG4gICAgdHJhbnNsYXRpb25BZGRMYW5ndWFnZTogXCLYstio2KfZhtuMINix2Kcg2KjYsdin24wg2KrYsdis2YXZhyDYp9mG2KrYrtin2Kgg2qnZhtuM2K9cIixcbiAgICB0cmFuc2xhdGlvblNob3dBbGxTdHJpbmdzOiBcItmG2YXYp9uM2LQg2KrZhdin2YUg2LnYqNin2LHYp9iqXCIsXG4gICAgdHJhbnNsYXRpb25TaG93QWxsUGFnZXM6IFwi2YbZhdin24zYtCDYqtmF2KfZhSDYtdmB2K3Yp9iqXCIsXG4gICAgdHJhbnNsYXRpb25Ob1N0cmluZ3M6IFwi2YfbjNqGINi52KjYp9ix2KrbjCDYqNix2KfbjCDYqtix2KzZhdmHINmG24zYs9iq2Iwg2YTYt9mB2Kcg2YHbjNmE2KrYsSDYsdinINi52YjYtiDaqdmG24zYry5cIixcbiAgICB0cmFuc2xhdGlvbkV4cG9ydFRvU0NWQnV0dG9uOiBcItio2LHZiNmGINio2LHbjCDYqNmHIENTVlwiLFxuICAgIHRyYW5zbGF0aW9uSW1wb3J0RnJvbVNDVkJ1dHRvbjogXCLYqNix2YjZhiDYsduM2LLbjCDYp9iyIENTVlwiLFxuICAgIHRyYW5zbGF0aW9uTWVyZ2VMb2NhbGVXaXRoRGVmYXVsdDogXCLYp9iv2LrYp9mFIHswfSDYqNinINiy2KjYp9mGINm+24zYtCDZgdix2LZcIixcbiAgICBib2xkOiBcIkJvbGRcIixcbiAgICBpdGFsaWM6IFwiSXRhbGljXCIsXG4gICAgdW5kZXJsaW5lOiBcIlVuZGVybGluZVwiLFxuICAgIGZwQWRkUXVlc3Rpb246IFwiQWRkIHF1ZXN0aW9uLi4uXCIsXG4gICAgY29tcGxldGVkSHRtbE9uQ29uZGl0aW9uSXRlbVRleHQ6IFwiU2hvdyBpZjpcIixcbiAgICBsZzoge1xuICAgICAgLy9Mb2dpYyB0YWIgc3RyaW5nc1xuICAgICAgcGFnZV92aXNpYmlsaXR5TmFtZTogXCLZgtin2KjZhNuM2Kog2LHZiNuM2Kog2LXZgdit2YcgXCIsXG4gICAgICBwYW5lbF92aXNpYmlsaXR5TmFtZTogXCLZgtin2KjZhNuM2Kog2LHZiNuM2Kog2b7ZhtmEXCIsXG4gICAgICBwYW5lbF9lbmFibGVOYW1lOiBcItmB2LnYp9mEL9i624zYsdmB2LnYp9mEINqp2LHYr9mGINm+2YbZhCBcIixcbiAgICAgIHF1ZXN0aW9uX3Zpc2liaWxpdHlOYW1lOiBcIiDZgtin2KjZhNuM2Kog2LHZiNuM2Kog2LPZiNin2YRcIixcbiAgICAgIHF1ZXN0aW9uX2VuYWJsZU5hbWU6IFwi2YHYudin2YQv2LrbjNix2YHYudin2YQg2qnYsdiv2YYg2LPZiNin2YQgXCIsXG4gICAgICBxdWVzdGlvbl9yZXF1aXJlTmFtZTogXCLYs9mI2KfZhCDYp9iu2KrbjNin2LHbjCDZhdmI2LHYr9mG24zYp9iyXCIsXG4gICAgICB0cmlnZ2VyX2NvbXBsZXRlTmFtZTogXCLYqtqp2YXbjNmEINmG2LjYsdiz2YbYrNuMXCIsXG4gICAgICB0cmlnZ2VyX3NldHZhbHVlTmFtZTogXCLYqtmG2LjbjNmFINi52YbZiNin2YYg2LPZiNin2YRcIixcbiAgICAgIHRyaWdnZXJfY29weXZhbHVlTmFtZTogXCLaqdm+24wg2YXZgtiv2KfYsSDYs9mI2KfZhFwiLFxuICAgICAgdHJpZ2dlcl9za2lwTmFtZTogXCLYsdivINqp2LHYr9mGINiz2YjYp9mEIFwiLFxuICAgICAgdHJpZ2dlcl9ydW5FeHByZXNzaW9uTmFtZTogXCLYp9is2LHYp9uMINmF2KrZhiDYtNmB2KfYsdi024wg2YXZiNix2K8g2YbYuNixXCIsXG4gICAgICBjb21wbGV0ZWRIdG1sT25Db25kaXRpb25OYW1lOiBcItmF2KrZhiDYs9mB2KfYsdi024wg2LXZgdit2YcgJ9iq2LTaqdixJyBcIixcblxuICAgICAgcGFnZV92aXNpYmlsaXR5RGVzY3JpcHRpb246XG4gICAgICAgICAgXCLYstmF2KfZhtuMINqp2Ycg2LnYqNin2LHYqiDZhdmG2LfZgtuMINmF2YLYr9in2LEg2LXYrduM2K0g2KjYsdmF24wg2q/Ysdiv2KfZhtivINi12YHYrdmHINix2Kcg2YLYp9io2YQg2YXYtNin2YfYr9mHINqp2YbbjNiv2Iwg2K/YsSDYutuM2LHYp9uM2YbYtdmI2LHYqiDYotmGINix2Kcg2LrbjNix2YLYp9io2YQg2YXYtNin2YfYr9mHINmG2q/ZhyDYr9in2LHbjNivLlwiLFxuICAgICAgcGFuZWxfdmlzaWJpbGl0eURlc2NyaXB0aW9uOlxuICAgICAgICAgIFwi2Kfar9ixINi52KjYp9ix2Kog2YXZhti32YLbjCDZhdmC2K/Yp9ixINi12K3bjNitINio2LEg2YXbjNqv2LHYr9in2YbYr9iMINm+2YbZhCDYsdinINmB2LnYp9mEINqp2YbbjNiv2Iwg2K/YsSDYutuM2LEg2KfbjNmG2LXZiNix2Kog2KLZhiDYsdinINi624zYsdmC2KfYqNmEINmF2LTYp9mH2K/ZhyDZhtqv2Ycg2K/Yp9ix24zYry5cIixcbiAgICAgIHBhbmVsX2VuYWJsZURlc2NyaXB0aW9uOlxuICAgICAgICAgIFwi24zaqSDZvtmG2YQg2KfbjNis2KfYryDaqdmG24zYryDZiCDZh9mF2Ycg2KfZhNmF2KfZhiDZh9in24wg2K/Yp9iu2YQg2KLZhiDYsdinINiv2LEg2LXZiNix2KrbjCDaqdmHINi52KjYp9ix2Kog2YXZhti32YLbjCDZhdmC2K/Yp9ixINi12K3bjNitINio2LEg2YXbjCDar9ix2K/Yp9mG2K8g2LHYpyDZgdi52KfZhCDaqdmG24zYr9iMINiv2LEg2LrbjNixINin24zZhti12YjYsdiqINii2YYg2YfYpyDYsdinINi624zYsdmB2LnYp9mEINmG2q/ZhyDYr9in2LHbjNivLlwiLFxuICAgICAgcXVlc3Rpb25fdmlzaWJpbGl0eURlc2NyaXB0aW9uOlxuICAgICAgICAgIFwi2LLZhdin2YbbjCDaqdmHINi52KjYp9ix2Kog2YXZhti32YLbjCDZhdmC2K/Yp9ixINi12K3bjNitINix2Kcg2KjYsdmF24wg2q/Ysdiv2KfZhtiv2Iwg2LPZiNin2YQg2LHYpyDZgtin2KjZhCDZhdi02KfZh9iv2Ycg2qnZhtuM2K/YjCDYr9ixINi624zYsSDYp9uM2YbYtdmI2LHYqiDYotmGINix2Kcg2LrbjNix2YXYtNin2YfYr9mHINmG2q/ZhyDYr9in2LHbjNivLlwiLFxuICAgICAgcXVlc3Rpb25fZW5hYmxlRGVzY3JpcHRpb246XG4gICAgICAgICAgXCLYstmF2KfZhtuMINqp2Ycg2LnYqNin2LHYqiDZhdmG2LfZgtuMINmF2YLYr9in2LEg2LXYrduM2K0g2KjYsdmF24wg2q/Ysdiv2KfZhtiv2Iwg2LPZiNin2YQg2LHYpyDZgdi52KfZhCDaqdmG24zYr9iMINiv2LEg2LrbjNixINin24zZhti12YjYsdiqINii2YYg2LHYpyDYutuM2LHZgdi52KfZhCDZhtqv2Ycg2K/Yp9ix24zYry5cIixcbiAgICAgIHF1ZXN0aW9uX3JlcXVpcmVEZXNjcmlwdGlvbjpcbiAgICAgICAgICBcItiy2YXYp9mG24wg2qnZhyDYudio2KfYsdiqINmF2YbYt9mC24wg2YXZgtiv2KfYsSDYtdit24zYrSDYsdinINio2LEg2YXbjCDar9ix2K/Yp9mG2K/YjCDYs9mI2KfZhCDYp9is2KjYp9ixINuMINmF24wg2LTZiNivLlwiLFxuICAgICAgdHJpZ2dlcl9jb21wbGV0ZURlc2NyaXB0aW9uOlxuICAgICAgICAgIFwi2LLZhdin2YbbjCDaqdmHINi52KjYp9ix2Kog2YXZhti32YLbjCDZhdmC2K/Yp9ixINi12K3bjNitINix2Kcg2KjYsSDZhduMINqv2LHYr9in2YbYr9iMINmIINio2LHYsdiz24wg2KraqdmF24zZhCDZhduMINi02YjYr9iM2qnYp9ix2KjYsSDZhtmH2KfbjNuMINi12YHYrdmHICfYqti02qnYsScg2LHYpyDZhdi02KfZh9iv2Ycg2YXbjCDaqdmG2K8uXCIsXG4gICAgICB0cmlnZ2VyX3NldHZhbHVlRGVzY3JpcHRpb246XG4gICAgICAgICAgXCLYstmF2KfZhtuMINqp2Ycg2YXZgtiv2KfYsSDYs9mI2KfZhNuMINqp2Ycg2K/YsSDYudio2KfYsdiqINmF2YbYt9mC24wg2KfYs9iq2YHYp9iv2Ycg2LTYr9mHINin2LPYqiDYqti624zbjNixINmF24wg24zYp9io2K8g2Ygg2LnYqNin2LHYqiDZhdmG2LfZgtuMINmF2YLYr9in2LEg2LXYrduM2K0g2LHYpyDYqNixINmF24wg2q/Ysdiv2KfZhtiv2Iwg2KLZhtqv2KfZhyDZhdmC2K/Yp9ixINio2LHYp9uMINiz2YjYp9mEINin2YbYqtiu2KfYqCDYtNiv2Ycg2KrZhti424zZhSDZhduMINi02YjYry5cIixcbiAgICAgIHRyaWdnZXJfY29weXZhbHVlRGVzY3JpcHRpb246XG4gICAgICAgICAgXCLYstmF2KfZhtuMINqp2Ycg2YXZgtiv2KfYsdmH2KfbjCDYs9mI2KfZhCDaqdmHINiv2LEg2LnYqNin2LHYqiDZhdmG2LfZgtuMINin2LPYqtmB2KfYr9mHINi02K/ZhyDYp9mG2K/YjCDYqti624zbjNixINmF24wg24zYp9io2K8g2Ygg2LnYqNin2LHYqiDZhdmG2LfZgtuMINmF2YLYr9in2LEg2LXYrduM2K0g2LHYpyDYqNixINmF24wg2q/Ysdiv2KfZhtiv2Iwg2LPZvtizINmF2YLYr9in2LEg24zaqduMINin2LIg2LPZiNin2YQg2YfYp9uMINin2YbYqtiu2KfYqCDYtNiv2Ycg2K/YsSDYs9mI2KfZhCDYr9uM2q/YsSDYp9mG2KrYrtin2Kgg2LTYr9mHINqp2b7bjCDZhduMINi02YjYry5cIixcbiAgICAgIHRyaWdnZXJfc2tpcERlc2NyaXB0aW9uOlxuICAgICAgICAgIFwiV2hlbiB0aGUgbG9naWMgZXhwcmVzc2lvbiByZXR1cm5zIHRydWUgdGhlbiB0aGUgc3VydmV5IHNraXAgdG8gLyBmb2N1cyB0aGUgc2VsZWN0ZWQgcXVlc3Rpb24uXCIsXG4gICAgICB0cmlnZ2VyX3J1bkV4cHJlc3Npb25EZXNjcmlwdGlvbjpcbiAgICAgICAgICBcItin2q/YsSDYudio2KfYsdiqINmF2YbYt9mC24wg2YXZgtiv2KfYsSDYtdit24zYrSDYqNix2q/Ysdiv2KfZhtiv2Iwg2KLZhtqv2KfZhyDYudio2KfYsdiqINiz2YHYp9ix2LTbjCDYp9is2LHYpyDZhduMINi02YjYry4g2LTZhdinINmF2YXaqdmGINin2LPYqiDYqNmHINi32YjYsSDYp9iu2KrbjNin2LHbjCDYp9uM2YYg2YbYqtuM2KzZhyDYsdinINio2Ycg2LPZiNin2YQg2KfZhtiq2K7Yp9ioINi02K/ZhyDYqtio2K/bjNmEINqp2YbbjNivLlwiLFxuICAgICAgY29tcGxldGVkSHRtbE9uQ29uZGl0aW9uRGVzY3JpcHRpb246XG4gICAgICAgICAgXCIg2Kfar9ixINi52KjYp9ix2Kog2YXZhti32YLbjCDZhdmC2K/Yp9ixINi12K3bjNitINio2LHar9ix2K/Yp9mG2K8g2YXYqtmGINi12YHYrdmHICfYqti02qnYsScg2KjZhyDZhdiq2YYg2K/Yp9iv2Ycg2LTYr9mHINiq2LrbjNuM2LEg2YXbjCDbjNin2KjYry5cIixcblxuICAgICAgaXRlbUV4cHJlc3Npb25UZXh0OiBcItiy2YXYp9mG24wg2qnZhyDYudio2KfYsdiqIHswfSDZhdmC2K/Yp9ixINi12K3bjNitINio2LEg2YXbjCDar9ix2K/Yp9mG2K9cIiwgLy97MH0gLSB0aGUgZXhwcmVzc2lvblxuICAgICAgcGFnZV92aXNpYmlsaXR5VGV4dDogXCLYtdmB2K3ZhyB7MH0g2LHYpyDZgtin2KjZhCDZhdi02KfZh9iv2Ycg2qnZhtuM2K8uXCIsIC8vezB9IHBhZ2UgbmFtZVxuICAgICAgcGFuZWxfdmlzaWJpbGl0eVRleHQ6IFwi2b7ZhtmEIHswfSDYsdinINmC2KfYqNmEINmF2LTYp9mH2K/ZhyDaqdmG24zYry5cIiwgLy97MH0gcGFuZWwgbmFtZVxuICAgICAgcGFuZWxfZW5hYmxlVGV4dDogXCLZgdi52KfZhCDaqdix2K/ZhiDZvtmG2YQgezB9XCIsIC8vezB9IHBhbmVsIG5hbWVcbiAgICAgIHF1ZXN0aW9uX3Zpc2liaWxpdHlUZXh0OiBcItiz2YjYp9mEIHswfSDYsdinINmC2KfYqNmEINmF2LTYp9mH2K/ZhyDaqdmG24zYry5cIiwgLy97MH0gcXVlc3Rpb24gbmFtZVxuICAgICAgcXVlc3Rpb25fZW5hYmxlVGV4dDogXCLZgdi52KfZhCDaqdix2K/ZhiDYs9mI2KfZhCB7MH1cIiwgLy97MH0gcXVlc3Rpb24gbmFtZVxuICAgICAgcXVlc3Rpb25fcmVxdWlyZVRleHQ6IFwi2KfbjNis2KfYryDYs9mI2KfZhCB7MH0g2KfYrNio2KfYsduMXCIsIC8vezB9IHF1ZXN0aW9uIG5hbWVcbiAgICAgIHRyaWdnZXJfY29tcGxldGVUZXh0OiBcItio2LHYsdiz24wg2YbYuNix2LPZhtis24wg2KrZhdin2YUg2LTYr1wiLFxuICAgICAgdHJpZ2dlcl9zZXR2YWx1ZVRleHQ6IFwi2K/YsSDYs9mI2KfZhCB7MH0g2YXZgtiv2KfYsSB7MX0g2LHYpyDZgtix2KfYsSDYr9mH24zYr1wiLCAvL3swfSBxdWVzdGlvbiBuYW1lLCB7MX0gc2V0VmFsdWVcbiAgICAgIHRyaWdnZXJfY29weXZhbHVlVGV4dDogXCLZhdmC2K/Yp9ixINiz2YjYp9mEIHswfSDYsdinINin2LIg2LPZiNin2YQgezF9INqp2b7bjCDaqdmG24zYry5cIiwgLy97MH0gYW5kIHsxfSBxdWVzdGlvbiBuYW1lc1xuICAgICAgdHJpZ2dlcl9za2lwVGV4dDogXCLYsdivINqp2LHYr9mGINmG2LjYsdiz2YbYrNuMINio2LHYp9uMINiz2YjYp9mEIHswfVwiLCAvL3swfSBxdWVzdGlvbiBuYW1lXG4gICAgICB0cmlnZ2VyX3J1bkV4cHJlc3Npb25UZXh0MTogXCLYp9is2LHYp9uMINi52KjYp9ix2KogJ3swfScgXCIsIC8vezB9IHRoZSBleHByZXNzaW9uXG4gICAgICB0cmlnZ2VyX3J1bkV4cHJlc3Npb25UZXh0MjogXCLZiCDZhtiq24zYrNmHINii2YYg2LHYpyDYr9in2K7ZhCDYs9mI2KfZhCB7MH0g2LDYrtuM2LHZhyDaqdmG24zYr1wiLCAvL3swfSBxdWVzdGlvbiBuYW1lXG4gICAgICBjb21wbGV0ZWRIdG1sT25Db25kaXRpb25UZXh0OlxuICAgICAgICAgIFwi2YbZhdin24zYtCDZhdiq2YYg2LPZgdin2LHYtNuMINio2LHYp9uMINi12YHYrdmHICfYqti02qnYsSdcIixcblxuICAgICAgZXhwcmVzc2lvbkVkaXRvclRpdGxlOiBcIti52KjYp9ix2Kog2YXZhti32YLbjCDYsdinINiq2YbYuNuM2YUg2qnZhtuM2K9cIixcblxuICAgICAgZGVsZXRlT3BlcmF0aW9uOiBcItit2LDZgSDYudmF2YTaqdix2K9cIixcbiAgICAgIGFkZE5ld09wZXJhdGlvbjogXCLYp9i22KfZgdmHINqp2LHYr9mGINiz2YjYp9mEICjZh9in24wpINis2K/bjNivXCIsXG5cbiAgICAgIGV4cHJlc3Npb25JbnZhbGlkOlxuICAgICAgICAgIFwi2LnYqNin2LHYqiDZhdmG2LfZgtuMINiu2KfZhNuMINuM2Kcg2YbYp9iv2LHYs9iqINin2LPYqi4g2YTYt9mB2Kcg2KLZhiDYsdinINiq2LbYrduM2K0g2qnZhtuM2K9cIixcbiAgICAgIG5vT3BlcmF0aW9uRXJyb3I6IFwi2YTYt9mB2Kcg2K3Yr9in2YLZhCDbjNqpINi52YXZhNqp2LHYryDYsdinINin2LbYp9mB2Ycg2YbZhdin24zbjNivXCIsXG4gICAgICBvcGVyYXRpb25JbnZhbGlkOiBcItmE2LfZgdinINmF2LTaqdmE2KfYqiDZhdix2KjZiNi3INio2Ycg2LnZhdmE2qnYsdivKNmH2KfbjCkg2K7ZiNivINix2Kcg2KjYsdi32LHZgSDZhtmF2KfbjNuM2K8uXCJcbiAgICB9XG4gIH0sXG4gIC8vUHJvcGVydHkgbmFtZXMgaW4gdGFibGUgaGVhZGVyc1xuICBwZWw6IHtcbiAgICBpc1JlcXVpcmVkOiBcItin2KzYqNin2LHbjNifXCJcbiAgfSxcbiAgLy9Qcm9wZXJ0eSBFZGl0b3JzXG4gIHBlOiB7XG4gICAgYXBwbHk6IFwi2KfYudmF2KfZhFwiLFxuICAgIG9rOiBcItiq2KfbjNuM2K9cIixcbiAgICBzYXZlOiBcIlNhdmVcIixcbiAgICBjYW5jZWw6IFwi2YTYutmIXCIsXG4gICAgcmVzZXQ6IFwi2KjYp9iy2YbYtNin2YbbjFwiLFxuICAgIGNsb3NlOiBcItio2LPYqtmGXCIsXG4gICAgZGVsZXRlOiBcItit2LDZgVwiLFxuICAgIGFkZDogXCJBZGRcIixcbiAgICBhZGROZXc6IFwi2KfZgdiy2YjYr9mGXCIsXG4gICAgYWRkSXRlbTogXCLYqNix2KfbjCDYp9i22KfZgdmHINqp2LHYr9mGINuM2qkg2KLbjNiq2YUg2qnZhNuM2qkg2qnZhtuM2K8uLi5cIixcbiAgICBhZGRPdGhlcjogXCLYs9in24zYsVwiLFxuICAgIGFkZFNlbGVjdEFsbDogXCLYp9mG2KrYrtin2Kgg2YfZhdmHXCIsXG4gICAgYWRkTm9uZTogXCLZh9uM2obaqdiv2KfZhVwiLFxuICAgIHJlbW92ZUFsbDogXCLYrdiw2YEg2YfZhdmHXCIsXG4gICAgZWRpdDogXCLZiNuM2LHYp9uM2LRcIixcbiAgICBiYWNrOiBcItio2KfYstqv2LTYqiDYqNiv2YjZhiDYsNiu24zYsdmHXCIsXG4gICAgc2F2ZUFuZEJhY2s6IFwi2LDYrtuM2LHZhyDZiCDYqNin2LLar9i02KpcIixcbiAgICBpdGVtVmFsdWVFZGl0OiBcItmC2KfYqNmEINmF2LTYp9mH2K/ZhyDYp9qv2LFcIixcbiAgICBlZGl0Q2hvaWNlczogXCLZiNuM2LHYp9uM2LQg2KfZhtiq2K7Yp9ioINmH2KdcIixcbiAgICBtb3ZlOiBcItis2KfYqNis2KfbjNuMXCIsXG4gICAgZW1wdHk6IFwiPNiu2KfZhNuMPlwiLFxuICAgIG5vdEVtcHR5OiBcIjzZiNuM2LHYp9uM2LQg2YXZgtiv2KfYsT5cIixcbiAgICBmYXN0RW50cnk6IFwi2KraqdmF24zZhCDYs9ix24zYuVwiLFxuICAgIGZvcm1FbnRyeTogXCLYqtqp2YXbjNmEINmB2LHZhVwiLFxuICAgIHRlc3RTZXJ2aWNlOiBcItio2LHYsdiz24wg2LPYsdmI24zYs1wiLFxuICAgIGl0ZW1TZWxlY3RvckVtcHR5OiBcItmE2LfZgdinINuM2qkg2KfZhNmF2KfZhiDYsdinINin2YbYqtiu2KfYqCDaqdmG24zYryBcIixcbiAgICBjb25kaXRpb25TZWxlY3RRdWVzdGlvbjogXCLYp9mG2KrYrtin2Kgg2LPZiNin2YQuLi5cIixcbiAgICBjb25kaXRpb25TZWxlY3RQYWdlOiBcItin2YbYqtiu2KfYqCDYtdmB2K3Zhy4uLlwiLFxuICAgIGNvbmRpdGlvblNlbGVjdFBhbmVsOiBcItin2YbYqtiu2KfYqCDZvtmG2YQuLi5cIixcbiAgICBjb25kaXRpb25WYWx1ZVF1ZXN0aW9uVGl0bGU6IFwi2YTYt9mB2Kcg2YXZgtiv2KfYsSDYsdinINin2YbYqtiu2KfYqCAvINmI2KfYsdivINqp2YbbjNivXCIsXG4gICAgY29uZGl0aW9uQnV0dG9uQWRkOiBcItin2LbYp9mB2YdcIixcbiAgICBjb25kaXRpb25CdXR0b25SZXBsYWNlOiBcItis2KfbjNqv2LLbjNmGXCIsXG4gICAgY29uZGl0aW9uSGVscDpcbiAgICAgIFwi2YTYt9mB2Kcg24zaqSDZhdmC2K/Yp9ixINio2YjZhNuM2YYg2KrZiNi124zZgduMINmI2KfYsdivINqp2YbbjNivINqp2Ycg2LXYrduM2K0g24zYpyDYutmE2Lcg2LHYpyDYqNix2q/Ysdiv2KfZhtivINiq2Kcg2LXZgdit2Ycg2LPZiNin2YTYp9iqINmG2YXYp9uM2LQg2K/Yp9iv2Ycg2LTZiNivLiDYqNix2KfbjCDZhdir2KfZhDoge3F1ZXN0aW9uMX0gPSAndmFsdWUxJyBvciAoe3F1ZXN0aW9uMn0gKiB7cXVlc3Rpb240fSAgPiAyMCBhbmQge3F1ZXN0aW9uM30gPCA1KVwiLFxuICAgIGV4cHJlc3Npb25IZWxwOlxuICAgICAgXCLZhNi32YHYpyDbjNqpINi52KjYp9ix2Kog2KrZiNi124zZgduMINix2Kcg2YjYp9ix2K8g2qnZhtuM2K8uINi02YXYpyDZhdmF2qnZhiDYp9iz2Kog2KfYsiDaqdix2YjYtNmHINio2LHYp9uMINiv2LPYqtix2LPbjCDYqNmHINmF2YLYr9in2LEg2LPZiNin2YTYp9iqINin2LPYqtmB2KfYr9mHINqp2YbbjNivLiDYqNix2KfbjCDZhdir2KfZhDoge3F1ZXN0aW9uMX0gPSAndmFsdWUxJyBvciAoe3F1ZXN0aW9uMn0gPSAzIGFuZCB7cXVlc3Rpb24zfSA8IDUpXCIsXG4gICAgYWNlRWRpdG9ySGVscDogXCLYqNix2KfbjCDZhdi02KfZh9iv2Ycg2Ybaqdin2Kog2KraqdmF24zZhNuMIGN0cmwrc3BhY2Ug2LHYpyDYqNmB2LTYp9ix24zYr1wiLFxuICAgIGFjZUVkaXRvclJvd1RpdGxlOiBcItiz2LfYsSDZgdi52YTbjFwiLFxuICAgIGFjZUVkaXRvclBhbmVsVGl0bGU6IFwi2b7ZhtmEINmB2LnZhNuMXCIsXG4gICAgc2hvd01vcmU6IFwi2KjYsdin24wg2KfYt9mE2KfYudin2Kog2KjbjNi02KrYsSDZhNi32YHYpyDYs9mG2K8g2LHYp9mH2YbZhdinINix2Kcg2YXYt9in2YTYudmHINqp2YbbjNivXCIsXG4gICAgY29uZGl0aW9uU2hvd01vcmVVcmw6XG4gICAgICAgIFwiaHR0cHM6Ly9zdXJ2ZXlqcy5pby9Eb2N1bWVudGF0aW9uL0xpYnJhcnlQYXJhbWV0ZXI/aWQ9UXVlc3Rpb24mcGFyYW1ldGVyPXZpc2libGVJZlwiLFxuICAgIGFzc2lzdGFudFRpdGxlOiBcItiz2YjYp9mE2KfYqiDZhdmI2KzZiNivOlwiLFxuICAgIGNlbGxzRW1wdHlSb3dzQ29sdW1uczogXCLYrdiv2KfZgtmEINio2KfbjNivINuM2qkg2LPYt9ixINuM2Kcg2LPYqtmI2YYg2YjYrNmI2K8g2K/Yp9i02KrZhyDYqNin2LTYry5cIixcblxuICAgIHByb3BlcnR5SXNFbXB0eTogXCLZhNi32YHYpyDbjNqpINmF2YLYr9in2LEg2YjYp9ix2K8g2qnZhtuM2K9cIixcbiAgICB2YWx1ZTogXCLZhdmC2K/Yp9ixXCIsXG4gICAgdGV4dDogXCLZhdiq2YZcIixcbiAgICByb3dpZDogXCJSb3cgSURcIixcbiAgICBpbWFnZUxpbms6IFwi2YTbjNmG2qkg2KrYtdmI24zYsVwiLFxuICAgIGNvbHVtbkVkaXQ6IFwi2YjbjNix2KfbjNi0INiz2KrZiNmGOiB7MH1cIixcbiAgICBpdGVtRWRpdDogXCLZiNuM2LHYp9uM2LQg2KLbjNiq2YU6IHswfVwiLFxuXG4gICAgdXJsOiBcIlVSTFwiLFxuICAgIHBhdGg6IFwiUGF0aFwiLFxuICAgIHZhbHVlTmFtZTogXCLZhtin2YUg2YXZgtiv2KfYsVwiLFxuICAgIHRpdGxlTmFtZTogXCLZhtin2YUg2LnZhtmI2KfZhlwiLFxuXG4gICAgaGFzT3RoZXI6IFwi2K/Yp9ix2KfbjCDYotuM2KrZhSDYr9uM2q/YsVwiLFxuICAgIG90aGVyVGV4dDogXCLYs9in24zYsSDYotuM2KrZhSDZh9in24wg2YXYqtmGXCIsXG4gICAgaGFzTm9uZTogXCLZh9uM2oYg2KLbjNiq2YXbjCDZhtiv2KfYsdivXCIsXG4gICAgbm9uZVRleHQ6IFwi2YfbjNqGINii24zYqtmFINmF2KrZhtuMINmI2KzZiNivINmG2K/Yp9ix2K9cIixcbiAgICBoYXNTZWxlY3RBbGw6IFwi2YfZhdmHINmF2YjYp9ix2K8g2KfZhtiq2K7Yp9ioINi02K/ZhyDYp9iz2KpcIixcbiAgICBzZWxlY3RBbGxUZXh0OiBcItin2YbYqtiu2KfYqCDZh9mF2Ycg2KLbjNiq2YUg2YfYp9uMINmF2KrZhlwiLFxuICAgIGNob2ljZXNNaW46IFwi2K3Yr9in2YLZhCDZhdmC2K/Yp9ixINio2LHYp9uMINin24zYrNin2K8g2K7ZiNiv2qnYp9ixINii24zYqtmFINmH2KdcIixcbiAgICBjaG9pY2VzTWF4OiBcItit2K/Yp9qp2KvYsSDZhdmC2K/Yp9ixINio2LHYp9uMINin24zYrNin2K8g2K7ZiNivINii24zYqtmFINmH2KdcIixcbiAgICBjaG9pY2VzU3RlcDogXCLYqtmB2KfZiNiqINio24zZhiDZhdmI2KfYsdivINiq2YjZhNuM2K8g2LTYr9mHINiu2YjYr9qp2KfYsVwiLFxuICAgIG5hbWU6IFwi2YbYp9mFXCIsXG4gICAgdGl0bGU6IFwi2LnZhtmI2KfZhlwiLFxuICAgIGNlbGxUeXBlOiBcItmG2YjYuSDYs9mE2YjZhFwiLFxuICAgIGNvbENvdW50OiBcItiq2LnYr9in2K8g2LPYqtmI2YZcIixcbiAgICBjaG9pY2VzT3JkZXI6IFwi2KrYsdiq24zYqCDar9iy24zZhtmHINix2Kcg2KfZhtiq2K7Yp9ioINqp2YbbjNivXCIsXG4gICAgdmlzaWJsZTogXCLZhtmF2KfbjNi0INiv2KfYr9mHINi02YjYr9ifXCIsXG4gICAgaXNSZXF1aXJlZDogXCLYttix2YjYsduMINin2LPYqtifXCIsXG4gICAgaXNBbGxSb3dSZXF1aXJlZDogXCLZhtuM2KfYsiDYqNmHINm+2KfYs9iuINio2LHYp9uMINmH2YXZhyDYs9i32LHZh9inXCIsXG4gICAgcmVxdWlyZWRFcnJvclRleHQ6IFwi2YXYqtmGINiu2LfYp9uMINmF2YjYsdiv2YbbjNin2LJcIixcbiAgICBzdGFydFdpdGhOZXdMaW5lOiBcItio2Kcg2LPYt9ixINis2K/bjNivINi02LHZiNi5INi02YjYr9ifXCIsXG4gICAgcm93czogXCLYqti52K/Yp9ivINiz2LfYsVwiLFxuICAgIHBsYWNlSG9sZGVyOiBcItmG2q/Zh9iv2KfYsdmG2K/ZhyDZhdiq2YZcIixcbiAgICBzaG93UHJldmlldzogXCLZvtuM2LQg2YbZhdin24zYtCDYqti12YjbjNixINmG2LTYp9mGINiv2KfYr9mHINi02YjYr9ifXCIsXG4gICAgc3RvcmVEYXRhQXNUZXh0OiBcItiw2K7bjNix2Ycg2qnYsdiv2YYg2YXYrdiq2YjYp9uMINmB2KfbjNmEINiv2LEgSlNPTiDYqNmHINi52YbZiNin2YYg2YXYqtmGXCIsXG4gICAgbWF4U2l6ZTogXCLYrdiv2Kfaqdir2LEg2LPYp9uM2LIg2KjZhyDYqNin24zYqlwiLFxuICAgIGltYWdlSGVpZ2h0OiBcItin2LHYqtmB2KfYuSDYqti12YjbjNixXCIsXG4gICAgaW1hZ2VXaWR0aDogXCLYudix2LYg2KrYtdmI24zYsVwiLFxuICAgIHJvd0NvdW50OiBcItiq2LnYr9in2K8g2LPYt9ixXCIsXG4gICAgY29sdW1uTGF5b3V0OiBcItmC2KfZhNioINiz2KrZiNmGINmH2KdcIixcbiAgICBhZGRSb3dMb2NhdGlvbjogXCLYp9i22KfZgdmHINqp2LHYr9mGINmF2YjZgti524zYqiDYr9qp2YXZhyDYs9i32LHbjFwiLFxuICAgIGFkZFJvd1RleHQ6IFwi2YXYqtmGINiv2qnZhdmHINiv2LHYrCDYs9i32LFcIixcbiAgICByZW1vdmVSb3dUZXh0OiBcItmF2KrZhiDYr9qp2YXZhyDYrdiw2YEg2LPYt9ixXCIsXG4gICAgcmF0ZU1pbjogXCLYrdiv2KfZgtmEINmF24zYstin2YZcIixcbiAgICByYXRlTWF4OiBcItit2K/Yp9qp2KvYsSDZhduM2LLYp9mGXCIsXG4gICAgcmF0ZVN0ZXA6IFwi2YXbjNiy2KfZhiDZhdix2KfYrdmEXCIsXG4gICAgbWluUmF0ZURlc2NyaXB0aW9uOiBcItiq2YjYttuM2K0g2K3Yr9in2YLZhCDYp9mF2KrbjNin2LJcIixcbiAgICBtYXhSYXRlRGVzY3JpcHRpb246IFwi2KrZiNi224zYrSDYrdiv2Kfaqdir2LEg2KfZhdiq24zYp9iyXCIsXG4gICAgaW5wdXRUeXBlOiBcItmG2YjYuSDZiNix2YjYr9uMXCIsXG4gICAgb3B0aW9uc0NhcHRpb246IFwi2YbZiNi02KrZhyDYp9mG2KrYrtin2Kgg2YfYp1wiLFxuICAgIGRlZmF1bHRWYWx1ZTogXCLZhdmC2K/Yp9ixINm+24zYtCDZgdix2LZcIixcbiAgICBjZWxsc0RlZmF1bHRSb3c6IFwi2YXYqtmGINm+24zYtCDZgdix2LYg2LPZhNmI2YQg2YfYp1wiLFxuXG4gICAgc3VydmV5RWRpdG9yVGl0bGU6IFwi2YjbjNix2KfbjNi0INmG2LjYsdiz2YbYrNuMXCIsXG4gICAgcUVkaXRvclRpdGxlOiBcItmI24zYsdin24zYtCDYs9mI2KfZhDogezB9XCIsXG5cbiAgICBtYXhMZW5ndGg6IFwi2YXYp9qp2LLbjNmF2YUg2LfZiNmEXCIsXG5cbiAgICAvL3N1cnZleVxuICAgIHNob3dUaXRsZTogXCLZhtmF2KfbjNi0L9m+2YbZh9in2YYg2qnYsdiv2YYg2LnZhtmI2KfZhlwiLFxuICAgIGxvY2FsZTogXCLYstio2KfZhiDZvtuM2LQg2YHYsdi2XCIsXG4gICAgc2ltdWxhdG9yOiBcItin2YbYqtiu2KfYqCDYr9iz2Krar9in2YdcIixcbiAgICBsYW5kc2NhcGVPcmllbnRhdGlvbjogXCJMYW5kc2NhcGVcIixcbiAgICBtb2RlOiBcItit2KfZhNiqICjZiNuM2LHYp9uM2LQv2K7ZiNin2YbYr9mGKVwiLFxuICAgIGNsZWFySW52aXNpYmxlVmFsdWVzOiBcItm+2Kfaqdiz2KfYstuMINmF2YLYp9iv24zYsSDZvtmG2YfYp9mGXCIsXG4gICAgY29va2llTmFtZTogXCLZhtin2YUg2qnZiNqp24wgKNio2Ycg2YXZhti42YjYsSDYrNmE2Yjar9uM2LHbjCDYp9iyINin2KzYsdin24wg2K/ZiNio2KfYsdmHINmG2LjYsdiz2YbYrNuMKVwiLFxuICAgIHNlbmRSZXN1bHRPblBhZ2VOZXh0OiBcItin2LHYs9in2YQg2YbYqtin24zYrCDZhti42LHYs9mG2KzbjCDYr9ixINi12YHYrdmHINio2LnYr9uMXCIsXG4gICAgc3RvcmVPdGhlcnNBc0NvbW1lbnQ6IFwi2LDYrtuM2LHZhyDZhdmC2K/Yp9ixICfYs9in24zYsScg2K/YsSDZgduM2YTYryDYrNiv2Kfar9in2YbZh1wiLFxuICAgIHNob3dQYWdlVGl0bGVzOiBcItmG2YXYp9uM2LQg2LnZhtmI2KfZhiDYtdmB2K3Yp9iqXCIsXG4gICAgc2hvd1BhZ2VOdW1iZXJzOiBcItmG2YXYp9uM2LQg2LTZhdin2LHZhyDYtdmB2K3Yp9iqXCIsXG4gICAgcGFnZVByZXZUZXh0OiBcItmF2KrZhiDYr9qp2YXZhyDYtdmB2K3ZhyDZgtio2YTbjFwiLFxuICAgIHBhZ2VOZXh0VGV4dDogXCLZhdiq2YYg2K/aqdmF2Ycg2LXZgdit2Ycg2KjYudiv24xcIixcbiAgICBjb21wbGV0ZVRleHQ6IFwi2YXYqtmGINiv2qnZhdmHINiq2qnZhduM2YQg2YbYuNix2LPZhtis24xcIixcbiAgICBzdGFydFN1cnZleVRleHQ6IFwi2YXYqtmGINiv2qnZhdmHINi02LHZiNi5INmG2LjYsdiz2YbYrNuMXCIsXG4gICAgc2hvd05hdmlnYXRpb25CdXR0b25zOiBcItmG2YXYp9uM2LQg2K/aqdmF2Ycg2YfYp9uMINmG2KfZiNio2LHbjCAo2YbYp9mI2KjYsduMINm+24zYtCDZgdix2LYpXCIsXG4gICAgc2hvd1ByZXZCdXR0b246IFwi2YbZhdin24zYtCDYr9qp2YXZhyDZgtio2YTbjCAo2qnYp9ix2KjYsSDZhdmF2qnZhiDYp9iz2Kog2KjZhyDYtdmB2K3ZhyDZgtio2YQg2KjYsdqv2LHYr9ivKVwiLFxuICAgIGZpcnN0UGFnZUlzU3RhcnRlZDogXCLYtdmB2K3ZhyDYp9mI2YQg2K/YsSDZhti42LHYs9mG2KzbjCDZhtmC2LfZhyDYoti62KfYstuM2YYg2KLZhiDYp9iz2KouXCIsXG4gICAgc2hvd0NvbXBsZXRlZFBhZ2U6IFwi2YbZhdin24zYtCDYtdmB2K3ZhyDYp9iq2YXYp9mFINmG2LjYsdiz2YbYrNuMINiv2LEg2b7Yp9uM2KfZhiAoY29tcGxldGVkSHRtbClcIixcbiAgICBnb05leHRQYWdlQXV0b21hdGljOlxuICAgICAgXCLYqNinINm+2KfYs9iu2q/ZiNuM24wg2KjZhyDYqtmF2KfZhSDYs9mI2KfZhNin2KrYjCDYqNmHINi12YjYsdiqINin2KrZiNmF2KfYqtuM2qkg2KjZhyDYtdmB2K3ZhyDYqNi52K8g2KjYsdmI2K9cIixcbiAgICBzaG93UHJvZ3Jlc3NCYXI6IFwi2YbZhdin24zYtCDZhti02KfZhtqv2LEg2b7bjNi02LHZgdiqXCIsXG4gICAgcXVlc3Rpb25UaXRsZUxvY2F0aW9uOiBcItmF2K3ZhCDYudmG2YjYp9mGINiz2YjYp9mEXCIsXG4gICAgcmVxdWlyZWRUZXh0OiBcItiz2YjYp9mE2KfYqiDZhti02KfZhiDYr9in2LEg2KfYrNio2KfYsduMINmH2LPYqtmG2K9cIixcbiAgICBxdWVzdGlvblN0YXJ0SW5kZXg6IFwi2YbZhdin24zZhyDYtNix2YjYuSDYs9mI2KfZhNin2KogKNux2IzbsiDbjNinIGEg2YggYilcIixcbiAgICBzaG93UXVlc3Rpb25OdW1iZXJzOiBcItmG2YXYp9uM2LQg2LTZhdin2LHZhyDZh9in24wg2LPZiNin2YTYp9iqXCIsXG4gICAgcXVlc3Rpb25UaXRsZVRlbXBsYXRlOlxuICAgICAgXCLZgtin2YTYqCDYudmG2YjYp9mGINiz2YjYp9mE2Iwg2KjZhyDYtdmI2LHYqiDZvtuM2LQg2YHYsdi2OiAne25vfS4ge3JlcXVpcmV9IHt0aXRsZX0nXCIsXG4gICAgcXVlc3Rpb25FcnJvckxvY2F0aW9uOiBcItmF2K3ZhCDYrti32KfbjCDYs9mI2KfZhFwiLFxuICAgIGZvY3VzRmlyc3RRdWVzdGlvbkF1dG9tYXRpYzogXCLYqtmF2LHaqdiyINio2LEg2LHZiNuMINin2YjZhNuM2YYg2LPZiNin2YQg2KjYpyDYqti624zbjNixINi12YHYrdmHXCIsXG4gICAgcXVlc3Rpb25zT3JkZXI6IFwi2KrYsdiq24zYqCDYp9mE2YXYp9mGINmH2Kcg2K/YsSDYtdmB2K3Zh1wiLFxuICAgIG1heFRpbWVUb0ZpbmlzaDogXCLZhtmH2KfbjNiqINiy2YXYp9mGINio2LHYp9uMINin2KrZhdin2YUg2YbYuNix2LPZhtis24xcIixcbiAgICBtYXhUaW1lVG9GaW5pc2hQYWdlOiBcItmG2YfYp9uM2Kog2LLZhdin2YYg2KjYsdin24wg2KfYqtmF2KfZhSDYp9uM2YYg2LXZgdit2Ycg2YbYuNix2LPZhtis24xcIixcbiAgICBzaG93VGltZXJQYW5lbDogXCLZhtmF2KfbjNi0INm+2YbZhCDYstmF2KfZhiDYs9mG2KxcIixcbiAgICBzaG93VGltZXJQYW5lbE1vZGU6IFwi2YbZhdin24zYtCDYrdin2YTYqiDZvtmG2YQg2LLZhdin2YYg2LPZhtisXCIsXG4gICAgcmVuZGVyTW9kZTogXCLYrdin2YTYqiDYsdmG2K/YsVwiLFxuICAgIGFsbG93QWRkUGFuZWw6IFwi2KfYrNin2LLZhyDYp9mB2LLZiNiv2YYg2b7ZhtmEXCIsXG4gICAgYWxsb3dSZW1vdmVQYW5lbDogXCLYp9is2KfYstmHINit2LDZgSDZvtmG2YRcIixcbiAgICBwYW5lbEFkZFRleHQ6IFwi2YXYqtmGINin2YHYstmI2K/ZhiDZvtmG2YRcIixcbiAgICBwYW5lbFJlbW92ZVRleHQ6IFwi2YXYqtmGINit2LDZgSDZvtmG2YRcIixcbiAgICBpc1NpbmdsZVBhZ2U6IFwi2YbZhdin24zYtCDYqtmF2KfZhSDYp9mE2YXYp9mGINmH2Kcg2K/YsSDbjNqpINi12YHYrdmHXCIsXG4gICAgaHRtbDogXCJIdG1sXCIsXG4gICAgZXhwcmVzc2lvbjogXCLYudio2KfYsdiqXCIsXG5cbiAgICBtaW5WYWx1ZTogXCLYrdiv2KfZgtmEINmF2YLYr9in2LFcIixcbiAgICBtYXhWYWx1ZTogXCLYrdiv2Kfaqdir2LEg2YXZgtiv2KfYsVwiLFxuICAgIG1pbkxlbmd0aDogXCLYrdiv2KfZgtmEINi32YjZhFwiLFxuICAgIGFsbG93RGlnaXRzOiBcItin2YXaqdin2YYg2YjYsdmI2K8g2KfYudiv2KfYr1wiLFxuICAgIG1pbkNvdW50OiBcItit2K/Yp9mC2YQg2KrYudiv2KfYryBcIixcbiAgICBtYXhDb3VudDogXCLYrdiv2Kfaqdir2LEg2YXZgtiv2KfYsVwiLFxuICAgIHJlZ2V4OiBcItmB2LHZhdiqINi12K3bjNitINi52KjYp9ix2KogXCIsXG5cbiAgICB0b3RhbFRleHQ6IFwi2YXYqtmGINqp2KfZhdmEXCIsXG4gICAgdG90YWxUeXBlOiBcItmG2YjYuSDaqdin2YXZhFwiLFxuICAgIHRvdGFsRXhwcmVzc2lvbjogXCLYudio2KfYsdiqINqp2KfZhdmEXCIsXG4gICAgdG90YWxEaXNwbGF5U3R5bGU6IFwi2LPYqNqpINmG2YXYp9uM2LQg2qnZhFwiLFxuICAgIHRvdGFsQ3VycmVuY3k6IFwi2YXYrNmF2YjYuSDYp9ix2LJcIixcbiAgICB0b3RhbEZvcm1hdDogXCLZhdis2YXZiNi5INmB2LHZhdiqXCIsXG5cbiAgICB0YWJzOiB7XG4gICAgICBnZW5lcmFsOiBcIti52YXZiNmF24xcIixcbiAgICAgIGZpbGVPcHRpb25zOiBcItin2YbYqtiu2KfYqCDZh9inXCIsXG4gICAgICBodG1sOiBcItmI24zYsdin24zYtNqv2LEgSFRNTFwiLFxuICAgICAgY29sdW1uczogXCLYs9iq2YjZhiDZh9inXCIsXG4gICAgICByb3dzOiBcItiz2LfYsdmH2KdcIixcbiAgICAgIGNob2ljZXM6IFwi2KfZhtiq2K7Yp9ioINmH2KdcIixcbiAgICAgIGl0ZW1zOiBcItii24zYqtmFINmH2KdcIixcbiAgICAgIHZpc2libGVJZjogXCLZhtmF2KfbjNi0INiv2LEg2LXZiNix2KpcIixcbiAgICAgIGVuYWJsZUlmOiBcItmB2LnYp9mEINin2q/YsVwiLFxuICAgICAgcmVxdWlyZWRJZjogXCLZhdmI2LHYryDZhtuM2KfYsiDYp9in2q/YsVwiLFxuICAgICAgcmF0ZVZhbHVlczogXCLZhdmC2KfYr9uM2LEg2LHYqtio2Ycg2KjZhtiv24xcIixcbiAgICAgIGNob2ljZXNCeVVybDogXCLYp9mG2KrYrtin2Kgg2YfYpyDYp9iyINmI2KhcIixcbiAgICAgIG1hdHJpeENob2ljZXM6IFwi2KfZhtiq2K7Yp9ioINmH2KfbjCDZvtuM2LTZgdix2LZcIixcbiAgICAgIG11bHRpcGxlVGV4dEl0ZW1zOiBcItmB24zZhNiv2YfYp9uMINmF2KrZhtuMXCIsXG4gICAgICB2YWxpZGF0b3JzOiBcItin2LnYqtio2KfYsdiz2YbYrNuMINmH2KdcIixcbiAgICAgIG5hdmlnYXRpb246IFwi2YbYp9mI2KjYsduMXCIsXG4gICAgICBxdWVzdGlvbjogXCLYs9mI2KfZhFwiLFxuICAgICAgY29tcGxldGVkSHRtbDogXCJIVE1MINi12YHYrdmHINiq2qnZhduM2YQg2YbYuNix2LPZhtis24xcIixcbiAgICAgIGNvbXBsZXRlZEh0bWxPbkNvbmRpdGlvbjogXCJIdG1sINiv2LEg2LTYsdi3INqp2KfZhdmEINi02K9cIixcbiAgICAgIGxvYWRpbmdIdG1sOiBcIkhUTUwg2KjYp9ix2q/Ystin2LHbjFwiLFxuICAgICAgdGltZXI6IFwi2LLZhdin2YYg2LPZhtisL9qp2YjYptuM2LJcIixcbiAgICAgIGNhbGN1bGF0ZWRWYWx1ZXM6IFwi2YXZgtin2K/bjNixINmF2K3Yp9iz2KjZhyDYtNivXCIsXG4gICAgICB0cmlnZ2VyczogXCLYp9is2LHYpyDaqdmG2YbYr9mHXCIsXG4gICAgICB0ZW1wbGF0ZVRpdGxlOiBcIti52YbZiNin2YYg2YLYp9mE2KhcIixcbiAgICAgIHRvdGFsczogXCLYrNmF2Lkg2qnZhFwiXG4gICAgfSxcbiAgICBlZGl0UHJvcGVydHk6IFwi2YjbjNix2KfbjNi0INiu2LXZiNi124zYqiAnezB9J1wiLFxuICAgIGl0ZW1zOiBcIlsg2KLbjNiq2YUg2YfYpzogezB9IF1cIixcblxuICAgIGVudGVyTmV3VmFsdWU6IFwi2YTYt9mB2Kcg24zaqSDZhdmC2K/Yp9ixINmI2KfYsdivINqp2YbbjNivXCIsXG4gICAgbm9xdWVzdGlvbnM6IFwi2LPZiNin2YTbjCDYr9ixINm+2LHYs9i02YbYp9mF2Ycg2K/YsdisINmG2LTYr9mHXCIsXG4gICAgY3JlYXRldHJpZ2dlcjogXCLYp9is2LHYpyDaqdmG2YbYr9mHINin24wg2KjYs9in2LLbjNivXCIsXG4gICAgdHJpZ2dlck9uOiBcItiv2LEgXCIsXG4gICAgdHJpZ2dlck1ha2VQYWdlc1Zpc2libGU6IFwi2LXZgdit2KfYqiDYsdinINmC2KfYqNmEINmG2YXYp9uM2LQg2qnZhjpcIixcbiAgICB0cmlnZ2VyTWFrZVF1ZXN0aW9uc1Zpc2libGU6IFwi2LPZiNin2YTYp9iqINix2Kcg2YLYp9io2YQg2YbZhdin24zYtCDaqdmGOlwiLFxuICAgIHRyaWdnZXJDb21wbGV0ZVRleHQ6IFwi2b7Ysdiz2LTZhtin2YXZhyDYsdinINiq2qnZhduM2YQg2qnZhiDYp9qv2LEg2YXZiNmB2YIg2KjZiNivLlwiLFxuICAgIHRyaWdnZXJOb3RTZXQ6IFwi2KfYrNix2Kcg2qnZhtmG2K/ZhyDYqtmG2LjbjNmFINmG2LTYr9mHLlwiLFxuICAgIHRyaWdnZXJSdW5JZjogXCLYp9is2LHYpyDYr9ixINi12YjYsdiqXCIsXG4gICAgdHJpZ2dlclNldFRvTmFtZTogXCLYqti524zbjNixINmF2YLYr9in2LEg2KfYsjogXCIsXG4gICAgdHJpZ2dlckZyb21OYW1lOiBcItqp2b7bjCDZhdmC2K/Yp9ixINin2LI6IFwiLFxuICAgIHRyaWdnZXJSdW5FeHByZXNzaW9uOiBcItin2KzYsdin24wg2KfbjNmGINi52KjYp9ix2KpcIixcbiAgICB0cmlnZ2VyU2V0VmFsdWU6IFwi2KjZhzogXCIsXG4gICAgdHJpZ2dlcklzVmFyaWFibGU6IFwi2LnYr9mFINiv2LHYrCDZhdiq2LrbjNuM2LEg2K/YsSDZhtiq2KfbjNisINm+2LHYs9i02YbYp9mF2YdcIixcbiAgICB0cmlnZ2VyUnVuRXhwcmVzc2lvbkVtcHR5OiBcItmE2LfZgdinINi52KjYp9ix2Kog2YXYudiq2KjYsduMINmI2KfYsdivINmG2YXYp9uM24zYr1wiXG4gIH0sXG4gIC8vUHJvcGVydHkgdmFsdWVzXG4gIHB2OiB7XG4gICAgdHJ1ZTogXCLYtdit24zYrVwiLFxuICAgIGZhbHNlOiBcIti62YTYt1wiLFxuICAgIGluaGVyaXQ6IFwi2KfYsdirINio2LHbjFwiLFxuICAgIHNob3c6IFwi2KLYtNqp2KfYsVwiLFxuICAgIGhpZGU6IFwi2b7ZhtmH2KfZhlwiLFxuICAgIGRlZmF1bHQ6IFwi2b7bjNi0INmB2LHYtlwiLFxuICAgIGluaXRpYWw6IFwi2KfZiNmE24zZh1wiLFxuICAgIHJhbmRvbTogXCLYqti12KfYr9mB24xcIixcbiAgICBjb2xsYXBzZWQ6IFwi2KzZhdi5INi02K/Zh1wiLFxuICAgIGV4cGFuZGVkOiBcItio2KfYsiDYtNiv2YdcIixcbiAgICBub25lOiBcItmH24zahiDaqdiv2KfZhVwiLFxuICAgIGFzYzogXCLYtdi52YjYr9uMXCIsXG4gICAgZGVzYzogXCLZhtiy2YjZhNuMXCIsXG4gICAgaW5kZXRlcm1pbmF0ZTogXCLZhtin2YXYtNiu2LVcIixcbiAgICBkZWNpbWFsOiBcItin2LnYtNin2LHbjFwiLFxuICAgIGN1cnJlbmN5OiBcItin2LHYslwiLFxuICAgIHBlcmNlbnQ6IFwi2K/Ysdi12K9cIixcbiAgICBmaXJzdEV4cGFuZGVkOiBcImZpcnN0RXhwYW5kZWRcIixcbiAgICBvZmY6IFwi2K7Yp9mF2YjYtFwiLFxuICAgIG9uUGFuZWw6IFwi2LHZiNuMINm+2YbZhFwiLFxuICAgIG9uU3VydmV5OiBcItix2YjbjCDZhti42LHYs9mG2KzbjFwiLFxuICAgIGxpc3Q6IFwi2YTbjNiz2KpcIixcbiAgICBwcm9ncmVzc1RvcDogXCJwcm9ncmVzc1RvcFwiLFxuICAgIHByb2dyZXNzQm90dG9tOiBcInByb2dyZXNzQm90dG9tXCIsXG4gICAgcHJvZ3Jlc3NUb3BCb3R0b206IFwicHJvZ3Jlc3NUb3BCb3R0b21cIixcbiAgICBob3Jpem9udGFsOiBcItin2YHZgtuMXCIsXG4gICAgdmVydGljYWw6IFwi2LnZhdmI2K/bjFwiLFxuICAgIHRvcDogXCLYqNin2YTYp1wiLFxuICAgIGJvdHRvbTogXCLZvtin24zbjNmGXCIsXG4gICAgdG9wQm90dG9tOiBcItio2KfZhNinINmIINm+2KfbjNuM2YZcIixcbiAgICBsZWZ0OiBcItqG2b5cIixcbiAgICBjb2xvcjogXCLYsdmG2q9cIixcbiAgICBkYXRlOiBcItiq2KfYsduM2K5cIixcbiAgICBkYXRldGltZTogXCLYqtin2LHbjNiuINmIINiz2KfYudiqXCIsXG4gICAgXCJkYXRldGltZS1sb2NhbFwiOiBcItiq2KfYsduM2K4g2Ygg2LPZiNin2YQg2b7bjNi0INmB2LHYtlwiLFxuICAgIGVtYWlsOiBcItin24zZhduM2YRcIixcbiAgICBtb250aDogXCLZhdin2YdcIixcbiAgICBudW1iZXI6IFwi2LnYr9ivXCIsXG4gICAgcGFzc3dvcmQ6IFwi2LHZhdiy2LnYqNmI2LFcIixcbiAgICByYW5nZTogXCLYr9in2YXZhtmHXCIsXG4gICAgdGVsOiBcItiq2YTZgdmGXCIsXG4gICAgdGV4dDogXCLZhdiq2YZcIixcbiAgICB0aW1lOiBcItiy2YXYp9mGXCIsXG4gICAgdXJsOiBcInVybFwiLFxuICAgIHdlZWs6IFwi2YfZgdiq2YdcIixcbiAgICBoaWRkZW46IFwi2YXYrtmB24xcIixcbiAgICBvbjogXCLYsdmI2LTZhlwiLFxuICAgIG9uUGFnZTogXCLYsdmI24wg2LXZgdit2YdcIixcbiAgICBlZGl0OiBcItmI24zYsdin24zYtFwiLFxuICAgIGRpc3BsYXk6IFwi2YbZhdin24zYtFwiLFxuICAgIG9uQ29tcGxldGU6IFwi2KjZhyDZhdit2LYg2KrZhdin2YUg2LTYr9mGXCIsXG4gICAgb25IaWRkZW46IFwi2KjZhyDZhdit2LYg2YXYrtmB24wg2LTYr9mGXCIsXG4gICAgYWxsOiBcItiq2YXYp9mFXCIsXG4gICAgcGFnZTogXCLYtdmB2K3Zh1wiLFxuICAgIHN1cnZleTogXCLZhti42LHYs9mG2KzbjFwiLFxuICAgIG9uTmV4dFBhZ2U6IFwi2KjZhyDZhdit2LYg2LXZgdit2Ycg2KjYudiv24xcIixcbiAgICBvblZhbHVlQ2hhbmdlZDogXCLYqNmHINmF2K3YtiDYqti624zbjNixINmF2YLYr9in2LFcIlxuICB9LFxuICAvL09wZXJhdG9yc1xuICBvcDoge1xuICAgIGVtcHR5OiBcItiu2KfZhNuMINio2KfYtNivXCIsXG4gICAgbm90ZW1wdHk6IFwi2K7Yp9mE24wg2YbYqNin2LTYr1wiLFxuICAgIGVxdWFsOiBcItmF2LPYp9mI24wg2KjYp9i02K9cIixcbiAgICBub3RlcXVhbDogXCLZhdiz2KfZiNuMINmG2KjYp9i02K9cIixcbiAgICBjb250YWluczogXCLYtNin2YXZhFwiLFxuICAgIG5vdGNvbnRhaW5zOiBcIti02KfZhdmEINmG2KjYp9i02K9cIixcbiAgICBhbnlvZjogXCLZh9ix2qnYr9in2YVcIixcbiAgICBhbGxvZjogXCLZh9mF2YdcIixcbiAgICBncmVhdGVyOiBcItio2LLYsdqv2KrYsVwiLFxuICAgIGxlc3M6IFwi2qnZiNqG2qnYqtixXCIsXG4gICAgZ3JlYXRlcm9yZXF1YWw6IFwi2KjYstix2q/YqtixINuM2Kcg2YXYs9in2YjbjFwiLFxuICAgIGxlc3NvcmVxdWFsOiBcItqp2Yjahtqp2KrYsSDbjNinINmF2LPYp9mI24xcIlxuICB9LFxuICAvL0VtYmVkIHdpbmRvd1xuICBldzoge1xuICAgIGFuZ3VsYXI6IFwi2KfYs9iq2YHYp9iv2Ycg2KfYsiDZhtiz2K7ZhyBBbmd1bGFyXCIsXG4gICAganF1ZXJ5OiBcItin2LPYqtmB2KfYr9mHINin2LIg2YbYs9iu2YcgalF1ZXJ5XCIsXG4gICAga25vY2tvdXQ6IFwi2KfYs9iq2YHYp9iv2Ycg2KfYsiDZhtiz2K7ZhyDZhtin2qkg2KfZiNiqXCIsXG4gICAgcmVhY3Q6IFwi2KfYs9iq2YHYp9iv2Ycg2KfYsiDZhtiz2K7ZhyBSZWFjdFwiLFxuICAgIHZ1ZTogXCLYp9iz2KrZgdin2K/ZhyDYp9iyINmG2LPYrtmHIFZ1ZVwiLFxuICAgIGJvb3RzdHJhcDogXCLYqNix2KfbjCDZgdix24zZhSDZiNix2qkg2KjZiNiq2LPYqtix2b5cIixcbiAgICBzdGFuZGFyZDogXCLYqNiv2YjZhiDYqNmI2KrYs9iq2LHZvlwiLFxuICAgIHNob3dPblBhZ2U6IFwi2YbZhdin24zYtCDZhti42LHYs9mG2KzbjCDYr9ixINuM2qkg2LXZgdit2YdcIixcbiAgICBzaG93SW5XaW5kb3c6IFwi2YbZhdin24zYtCDZhti42LHYs9mG2KzbjCDYr9ixINuM2qkg2b7Zhtis2LHZh1wiLFxuICAgIGxvYWRGcm9tU2VydmVyOiBcItio2KfYsdqv2LLYp9ix24wgSlNPTiDYp9iyINiz2LHZiNixXCIsXG4gICAgdGl0bGVTY3JpcHQ6IFwi2KfYs9qp2LHbjNm+2Kog2Ygg2LTbjNmI2Ycg2YbZhdin24zYtFwiLFxuICAgIHRpdGxlSHRtbDogXCJIVE1MXCIsXG4gICAgdGl0bGVKYXZhU2NyaXB0OiBcItis2KfZiNin2KfYs9qp2LHbjNm+2KpcIlxuICB9LFxuICAvL1Rlc3QgU3VydmV5XG4gIHRzOiB7XG4gICAgc2VsZWN0UGFnZTogXCLYtdmB2K3ZhyDYp9uMINix2Kcg2KjYsdin24wg2KLYstmF2KfbjNi0INin2YbYqtiu2KfYqCDaqdmG24zYrzpcIixcbiAgICBzaG93SW52aXNpYmxlRWxlbWVudHM6IFwi2YbZhdin24zYtCDYp9mE2YXYp9mGINmH2KfbjCDZhdiu2YHbjFwiXG4gIH0sXG4gIHZhbGlkYXRvcnM6IHtcbiAgICBhbnN3ZXJjb3VudHZhbGlkYXRvcjogXCLYqti52K/Yp9ivINm+2KfYs9iuXCIsXG4gICAgZW1haWx2YWxpZGF0b3I6IFwi2KfbjNmF24zZhFwiLFxuICAgIG51bWVyaWN2YWxpZGF0b3I6IFwi2LnYr9ivXCIsXG4gICAgcmVnZXh2YWxpZGF0b3I6IFwicmVnZXhcIixcbiAgICB0ZXh0dmFsaWRhdG9yOiBcItmF2KrZhlwiXG4gIH0sXG4gIHRyaWdnZXJzOiB7XG4gICAgY29tcGxldGV0cmlnZ2VyOiBcItiq2qnZhduM2YQg2YbYuNix2LPZhtis24xcIixcbiAgICBzZXR2YWx1ZXRyaWdnZXI6IFwi2KrZhti424zZhSDZhdmC2K/Yp9ixXCIsXG4gICAgY29weXZhbHVldHJpZ2dlcjogXCLaqdm+24wg2YXZgtiv2KfYsVwiLFxuICAgIHNraXB0cmlnZ2VyOiBcItix2K8g2qnYsdiv2YYg2LPZiNin2YQgXCIsXG4gICAgcnVuZXhwcmVzc2lvbnRyaWdnZXI6IFwi2KfYrNix2KfbjCDYudio2KfYsdiqXCIsXG4gICAgdmlzaWJsZXRyaWdnZXI6IFwi2KrYutuM24zYsSDZiNi22LnbjNiqINiv24zYr9mHINi02K/ZhlwiXG4gIH0sXG4gIC8vUHJvcGVydGllc1xuICBwOiB7XG4gICAgbmFtZTogXCLZhtin2YVcIixcbiAgICB0aXRsZTogeyBuYW1lOiBcIti52YbZiNin2YZcIiwgdGl0bGU6IFwi2Kfar9ixINiu2KfZhNuMINio2KfYtNivINmF2KfZhtmG2K8g2YbYp9mFINiv2LHYrCDZhduMINi02YjYr1wiIH0sXG4gICAgc3VydmV5X3RpdGxlOiB7IG5hbWU6IFwi2LnZhtmI2KfZhlwiLCB0aXRsZTogXCLYr9ixINiq2YXYp9mFINi12YHYrdin2Kog2K/bjNiv2Ycg2YXbjCDYtNmI2K9cIiB9LFxuICAgIHBhZ2VfdGl0bGU6IHsgbmFtZTogXCLYudmG2YjYp9mGXCIsIHRpdGxlOiBcIti52YbZiNin2YYg2LXZgdit2YdcIiB9LFxuXG5cbiAgICBuYXZpZ2F0aW9uQnV0dG9uc1Zpc2liaWxpdHk6IFwi2b7Yr9uM2K/Yp9ix24wg2K/aqdmF2Ycg2YfYp9uMINmG2KfZiNio2LHbjFwiLFxuICAgIHF1ZXN0aW9uc09yZGVyOiBcItiq2LHYqtuM2Kgg2LPZiNin2YTYp9iqXCIsXG4gICAgbWF4VGltZVRvRmluaXNoOiBcItit2K/Yp9qp2KvYsSDYstmF2KfZhiDYqNix2KfbjCDYqtqp2YXbjNmEXCIsXG5cbiAgICB2aXNpYmxlOiBcItii2LTaqdin2LFcIixcbiAgICB2aXNpYmxlSWY6IFwi2KLYtNqp2KfYsSDYp9qv2LFcIixcbiAgICBxdWVzdGlvblRpdGxlTG9jYXRpb246IFwi2YXZiNmC2LnbjNiqINi52YbZiNin2YYg2LPZiNin2YRcIixcbiAgICBkZXNjcmlwdGlvbjogXCLYqtmI2LbbjNit2KfYqlwiLFxuICAgIHN0YXRlOiBcItmI2LbYuduM2KpcIixcbiAgICBpc1JlcXVpcmVkOiBcItin2KzYqNin2LHbjNifXCIsXG4gICAgcmVxdWlyZWRJZjogXCLYp9is2KjYp9ixINin2q/YsdifXCIsXG4gICAgaW5kZW50OiBcImluZGVudFwiLFxuICAgIHJlcXVpcmVkRXJyb3JUZXh0OiBcItmF2KrZhiDYrti32KfbjCDYp9is2KjYp9ix24xcIixcbiAgICBzdGFydFdpdGhOZXdMaW5lOiBcIti02LHZiNi5INio2Kcg2K7YtyDYrNiv24zYryBcIixcbiAgICBpbm5lckluZGVudDogXCLYqtmIINix2YHYqtqv24wg2K/Yp9iu2YTbjFwiLFxuICAgIHBhZ2U6IFwi2LXZgdit2YdcIixcblxuICAgIHdpZHRoOiBcIti52LHYtlwiLFxuXG4gICAgY29tbWVudFRleHQ6IFwi2YXYqtmGINmG2LjYsVwiLFxuICAgIHZhbHVlTmFtZTogXCLZhtin2YUg2YXZgtiv2KfYsVwiLFxuICAgIGVuYWJsZUlmOiBcItmB2LnYp9mEINin2q/YsVwiLFxuICAgIGRlZmF1bHRWYWx1ZTogXCLZhdmC2K/Yp9ixINm+24zYtCDZgdix2LZcIixcbiAgICBjb3JyZWN0QW5zd2VyOiBcItm+2KfYs9iuINi12K3bjNitXCIsXG4gICAgcmVhZE9ubHk6IFwi2YHZgti3INiu2YjYp9mG2LRcIixcbiAgICB2YWxpZGF0b3JzOiBcItin2LnYqtio2KfYsdiz2YbYrCDZh9inXCIsXG4gICAgdGl0bGVMb2NhdGlvbjogXCJ0aXRsZUxvY2F0aW9uXCIsXG5cbiAgICBoYXNDb21tZW50OiBcItmG2LjYsSDYr9in2LHYr9ifXCIsXG4gICAgaGFzT3RoZXI6IFwi2LPYp9uM2LEg2K/Yp9ix2K/Yn1wiLFxuICAgIGNob2ljZXM6IFwi2q/YstuM2YbZhyDZh9inXCIsXG4gICAgY2hvaWNlc09yZGVyOiBcItiq2LHYqtuM2Kgg2q/YstuM2YbZhyDZh9inXCIsXG4gICAgY2hvaWNlc0J5VXJsOiBcItqv2LLbjNmG2Ycg2YfYpyDYqNinINmE24zZhtqpXCIsXG4gICAgb3RoZXJUZXh0OiBcItmF2KrZhiDYs9in24zYsVwiLFxuICAgIG90aGVyRXJyb3JUZXh0OiBcItmF2KrZhiDYrti32KfbjCDYs9in24zYsVwiLFxuICAgIHN0b3JlT3RoZXJzQXNDb21tZW50OiBcItiw2K7bjNix2Ycg2LPYp9uM2LEg2KjZhyDYtdmI2LHYqiDZhti42LFcIixcblxuICAgIGxhYmVsOiBcItio2LHahtiz2KhcIixcbiAgICBzaG93VGl0bGU6IFwi2YbYp9mF24zYtCDYudmG2YjYp9mGXCIsXG4gICAgdmFsdWVUcnVlOiBcInZhbHVlVHJ1ZVwiLFxuICAgIHZhbHVlRmFsc2U6IFwidmFsdWVGYWxzZVwiLFxuXG4gICAgY29sczogXCLYs9iq2YjZhiDZh9inXCIsXG4gICAgcm93czogXCLYs9i32LEg2YfYp1wiLFxuICAgIHBsYWNlSG9sZGVyOiBcInBsYWNlSG9sZGVyXCIsXG5cbiAgICBvcHRpb25zQ2FwdGlvbjogXCJvcHRpb25zQ2FwdGlvblwiLFxuXG4gICAgZXhwcmVzc2lvbjogXCJleHByZXNzaW9uXCIsXG4gICAgZm9ybWF0OiBcItmB2LHZhdiqXCIsXG4gICAgZGlzcGxheVN0eWxlOiBcItiz2KjaqSDZhtmF2KfbjNi0XCIsXG4gICAgY3VycmVuY3k6IFwi2KfYsdiyXCIsXG4gICAgdXNlR3JvdXBpbmc6IFwidXNlR3JvdXBpbmdcIixcblxuICAgIHNob3dQcmV2aWV3OiBcItm+24zYtCDZhtmF2KfbjNi0XCIsXG4gICAgYWxsb3dNdWx0aXBsZTogXCLYp9is2KfYstmHINqG2YbYryDYp9mG2KrYrtin2KjbjFwiLFxuICAgIGltYWdlSGVpZ2h0OiBcIti32YjZhCDYudqp2LNcIixcbiAgICBpbWFnZVdpZHRoOiBcIti52LHYtiDYudqp2LNcIixcbiAgICBzdG9yZURhdGFBc1RleHQ6IFwi2LDYrtuM2LHZhyDYr9in2K/ZhyDYqNmHINi12YjYsdiqINmF2KrZhtuMXCIsXG4gICAgbWF4U2l6ZTogXCLZhtmH2KfbjNiqINit2KzZhVwiLFxuXG4gICAgaHRtbDogXCJodG1sXCIsXG5cbiAgICBjb2x1bW5zOiBcItiz2KrZiNmGINmH2KdcIixcbiAgICBjZWxsczogXCLYs9mE2YjZhCDZh9inXCIsXG4gICAgaXNBbGxSb3dSZXF1aXJlZDogXCLYotuM2Kcg2KrZhdin2YUg2LPYt9ix2YfYpyDYp9is2KjYp9ix24wg2KfZhtiv2J9cIixcblxuICAgIGhvcml6b250YWxTY3JvbGw6IFwi2KfYs9qp2LHZiNmEINin2YHZgtuMXCIsXG4gICAgY2VsbFR5cGU6IFwi2YbZiNi5INiz2YTZiNmEXCIsXG4gICAgY29sdW1uc0xheW91dDogXCJjb2x1bW5zTGF5b3V0XCIsXG4gICAgY29sdW1uQ29sQ291bnQ6IFwiY29sdW1uQ29sQ291bnRcIixcbiAgICBjb2x1bW5NaW5XaWR0aDogXCJjb2x1bW5NaW5XaWR0aFwiLFxuXG4gICAgcm93Q291bnQ6IFwi2KrYudiv2KfYryDYs9i32LFcIixcbiAgICBtaW5Sb3dDb3VudDogXCLYrdiv2KfZgtmEINiq2LnYr9in2K8g2LPYt9ixXCIsXG4gICAgbWF4Um93Q291bnQ6IFwi2K3Yr9in2qnYq9ixINiq2LnYr9in2K8g2LPYt9ixXCIsXG4gICAga2V5TmFtZTogXCJrZXlOYW1lXCIsXG4gICAga2V5RHVwbGljYXRpb25FcnJvcjogXCJrZXlEdXBsaWNhdGlvbkVycm9yXCIsXG4gICAgY29uZmlybURlbGV0ZTogXCLYqtin24zbjNiv24zZhyDYrdiw2YFcIixcbiAgICBjb25maXJtRGVsZXRlVGV4dDogXCLZhdiq2YYg2KrYp9uM24zYr9uM2Ycg2K3YsNmBXCIsXG4gICAgYWRkUm93TG9jYXRpb246IFwiYWRkUm93TG9jYXRpb25cIixcbiAgICBhZGRSb3dUZXh0OiBcItin2YHYstmI2K/ZhiDZhdiq2YYg2LPYt9ixXCIsXG4gICAgcmVtb3ZlUm93VGV4dDogXCLYrdiw2YEg2YXYqtmGINiz2LfYsVwiLFxuXG4gICAgaXRlbXM6IFwiaXRlbXNcIixcbiAgICBpdGVtU2l6ZTogXCJpdGVtU2l6ZVwiLFxuICAgIGNvbENvdW50OiBcImNvbENvdW50XCIsXG5cbiAgICB0ZW1wbGF0ZVRpdGxlOiBcInRlbXBsYXRlVGl0bGVcIixcbiAgICB0ZW1wbGF0ZURlc2NyaXB0aW9uOiBcInRlbXBsYXRlRGVzY3JpcHRpb25cIixcbiAgICBhbGxvd0FkZFBhbmVsOiBcImFsbG93QWRkUGFuZWxcIixcbiAgICBhbGxvd1JlbW92ZVBhbmVsOiBcImFsbG93UmVtb3ZlUGFuZWxcIixcbiAgICBwYW5lbENvdW50OiBcInBhbmVsQ291bnRcIixcbiAgICBtaW5QYW5lbENvdW50OiBcIm1pblBhbmVsQ291bnRcIixcbiAgICBtYXhQYW5lbENvdW50OiBcIm1heFBhbmVsQ291bnRcIixcbiAgICBwYW5lbHNTdGF0ZTogXCJwYW5lbHNTdGF0ZVwiLFxuICAgIHBhbmVsQWRkVGV4dDogXCJwYW5lbEFkZFRleHRcIixcbiAgICBwYW5lbFJlbW92ZVRleHQ6IFwicGFuZWxSZW1vdmVUZXh0XCIsXG4gICAgcGFuZWxQcmV2VGV4dDogXCJwYW5lbFByZXZUZXh0XCIsXG4gICAgcGFuZWxOZXh0VGV4dDogXCJwYW5lbE5leHRUZXh0XCIsXG4gICAgc2hvd1F1ZXN0aW9uTnVtYmVyczogXCJzaG93UXVlc3Rpb25OdW1iZXJzXCIsXG4gICAgc2hvd1JhbmdlSW5Qcm9ncmVzczogXCJzaG93UmFuZ2VJblByb2dyZXNzXCIsXG4gICAgcmVuZGVyTW9kZTogXCJyZW5kZXJNb2RlXCIsXG4gICAgdGVtcGxhdGVUaXRsZUxvY2F0aW9uOiBcInRlbXBsYXRlVGl0bGVMb2NhdGlvblwiLFxuXG4gICAgcmF0ZVZhbHVlczogXCJyYXRlVmFsdWVzXCIsXG4gICAgcmF0ZU1pbjogXCJyYXRlTWluXCIsXG4gICAgcmF0ZU1heDogXCJyYXRlTWF4XCIsXG4gICAgcmF0ZVN0ZXA6IFwicmF0ZVN0ZXBcIixcbiAgICBtaW5SYXRlRGVzY3JpcHRpb246IFwibWluUmF0ZURlc2NyaXB0aW9uXCIsXG4gICAgbWF4UmF0ZURlc2NyaXB0aW9uOiBcIm1heFJhdGVEZXNjcmlwdGlvblwiLFxuXG4gICAgaW5wdXRUeXBlOiBcImlucHV0VHlwZVwiLFxuICAgIHNpemU6IFwi2K3YrNmFXCIsXG5cbiAgICBsb2NhbGU6IFwi2LLYqNin2YZcIixcbiAgICBmb2N1c0ZpcnN0UXVlc3Rpb25BdXRvbWF0aWM6IFwiZm9jdXNGaXJzdFF1ZXN0aW9uQXV0b21hdGljXCIsXG4gICAgY29tcGxldGVkSHRtbDogXCJjb21wbGV0ZWRIdG1sXCIsXG4gICAgY29tcGxldGVkQmVmb3JlSHRtbDogXCJjb21wbGV0ZWRCZWZvcmVIdG1sXCIsXG4gICAgbG9hZGluZ0h0bWw6IFwibG9hZGluZ0h0bWxcIixcbiAgICB0cmlnZ2VyczogXCJ0cmlnZ2Vyc1wiLFxuICAgIGNvb2tpZU5hbWU6IFwiY29va2llTmFtZVwiLFxuICAgIHNlbmRSZXN1bHRPblBhZ2VOZXh0OiBcInNlbmRSZXN1bHRPblBhZ2VOZXh0XCIsXG4gICAgc2hvd05hdmlnYXRpb25CdXR0b25zOiBcInNob3dOYXZpZ2F0aW9uQnV0dG9uc1wiLFxuICAgIHNob3dQcmV2QnV0dG9uOiBcInNob3dQcmV2QnV0dG9uXCIsXG4gICAgc2hvd1BhZ2VUaXRsZXM6IFwic2hvd1BhZ2VUaXRsZXNcIixcbiAgICBzaG93Q29tcGxldGVkUGFnZTogXCJzaG93Q29tcGxldGVkUGFnZVwiLFxuICAgIHNob3dQYWdlTnVtYmVyczogXCJzaG93UGFnZU51bWJlcnNcIixcbiAgICBxdWVzdGlvbkVycm9yTG9jYXRpb246IFwicXVlc3Rpb25FcnJvckxvY2F0aW9uXCIsXG4gICAgc2hvd1Byb2dyZXNzQmFyOiBcInNob3dQcm9ncmVzc0JhclwiLFxuICAgIG1vZGU6IFwibW9kZVwiLFxuICAgIGdvTmV4dFBhZ2VBdXRvbWF0aWM6IFwiZ29OZXh0UGFnZUF1dG9tYXRpY1wiLFxuICAgIGNoZWNrRXJyb3JzTW9kZTogXCJjaGVja0Vycm9yc01vZGVcIixcbiAgICBjbGVhckludmlzaWJsZVZhbHVlczogXCJjbGVhckludmlzaWJsZVZhbHVlc1wiLFxuICAgIHN0YXJ0U3VydmV5VGV4dDogXCJzdGFydFN1cnZleVRleHRcIixcbiAgICBwYWdlUHJldlRleHQ6IFwicGFnZVByZXZUZXh0XCIsXG4gICAgcGFnZU5leHRUZXh0OiBcInBhZ2VOZXh0VGV4dFwiLFxuICAgIGNvbXBsZXRlVGV4dDogXCJjb21wbGV0ZVRleHRcIixcbiAgICByZXF1aXJlZFRleHQ6IFwicmVxdWlyZWRUZXh0XCIsXG4gICAgcXVlc3Rpb25TdGFydEluZGV4OiBcInF1ZXN0aW9uU3RhcnRJbmRleFwiLFxuICAgIHF1ZXN0aW9uVGl0bGVUZW1wbGF0ZTogXCJxdWVzdGlvblRpdGxlVGVtcGxhdGVcIixcbiAgICBmaXJzdFBhZ2VJc1N0YXJ0ZWQ6IFwiZmlyc3RQYWdlSXNTdGFydGVkXCIsXG4gICAgaXNTaW5nbGVQYWdlOiBcImlzU2luZ2xlUGFnZVwiLFxuICAgIG1heFRpbWVUb0ZpbmlzaFBhZ2U6IFwibWF4VGltZVRvRmluaXNoUGFnZVwiLFxuICAgIHNob3dUaW1lclBhbmVsOiBcInNob3dUaW1lclBhbmVsXCIsXG4gICAgc2hvd1RpbWVyUGFuZWxNb2RlOiBcInNob3dUaW1lclBhbmVsTW9kZVwiLFxuXG4gICAgZGVmYXVsdFBhbmVsVmFsdWU6IFwiZGVmYXVsdFBhbmVsVmFsdWVcIixcbiAgICBkZWZhdWx0Um93VmFsdWU6IFwiZGVmYXVsdFJvd1ZhbHVlXCIsXG4gICAgaGFzTm9uZTogXCJoYXNOb25lXCIsXG4gICAgbm9uZVRleHQ6IFwibm9uZVRleHRcIixcblxuICAgIHRleHQ6IFwi2YXYqtmGXCIsXG4gICAgbWluVmFsdWU6IFwi2K3Yr9in2YLZhCDZhdmC2K/Yp9ixXCIsXG4gICAgbWF4VmFsdWU6IFwi2K3Yr9in2qnYq9ixINmF2YLYr9in2LFcIixcbiAgICBtaW5MZW5ndGg6IFwi2K3Yr9in2YLZhCDYt9mI2YRcIixcbiAgICBtYXhMZW5ndGg6IFwi2K3Yr9in2qnYq9ixINi32YjZhFwiLFxuICAgIGFsbG93RGlnaXRzOiBcItin2KzYp9iy2Ycg2LnYr9ivXCIsXG4gICAgbWluQ291bnQ6IFwi2K3Yr9in2YLZhCDYqti52K/Yp9ivXCIsXG4gICAgbWF4Q291bnQ6IFwi2K3Yr9in2qnYq9ixINiq2LnYr9in2K9cIixcbiAgICByZWdleDogXCJyZWd1bGFyIGV4cHJlc3Npb25cIlxuICB9XG59O1xuXG5lZGl0b3JMb2NhbGl6YXRpb24ubG9jYWxlc1tcImZhXCJdID0gcGVyc2lhblN0cmluZ3M7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvbG9jYWxpemF0aW9uL3BlcnNpYW4udHMiLCJpbXBvcnQgeyBlZGl0b3JMb2NhbGl6YXRpb24gfSBmcm9tIFwiLi4vZWRpdG9yTG9jYWxpemF0aW9uXCI7XG5cbnZhciBwb2xpc2hTdHJpbmdzID0ge1xuICAvL3N1cnZleSB0ZW1wbGF0ZXNcbiAgc3VydmV5OiB7XG4gICAgZWRpdDogXCJFZHl0dWpcIixcbiAgICBkcm9wUXVlc3Rpb246IFwiUHJ6ZWNpxIVnbmlqIHB5dGFuaWUuXCIsXG4gICAgY29weTogXCJLb3BpdWpcIixcbiAgICBhZGRUb1Rvb2xib3g6IFwiRG9kYWogZG8gcGFsZXR5XCIsXG4gICAgZGVsZXRlUGFuZWw6IFwiVXN1xYQgcGFuZWxcIixcbiAgICBkZWxldGVRdWVzdGlvbjogXCJVc3XFhCBweXRhbmllXCIsXG4gICAgY29udmVydFRvOiBcIktvbndlcnR1aiBuYVwiXG4gIH0sXG4gIC8vcXVlc3Rpb25UeXBlc1xuICBxdDoge1xuICAgIGNoZWNrYm94OiBcIldpZWxva3JvdG55IHd5YsOzclwiLFxuICAgIGNvbW1lbnQ6IFwiS29tZW50YXJ6XCIsXG4gICAgZHJvcGRvd246IFwiTGlzdGEgd3lib3J1XCIsXG4gICAgZmlsZTogXCJQbGlrXCIsXG4gICAgaHRtbDogXCJIdG1sXCIsXG4gICAgbWF0cml4OiBcIk1hY2llcnogKGplZG5va3JvdG55IHd5YsOzcilcIixcbiAgICBtYXRyaXhkcm9wZG93bjogXCJNYXRyaXggKHdpZWxva3JvdG55IHd5YsOzcilcIixcbiAgICBtYXRyaXhkeW5hbWljOiBcIk1hdHJpeCAoZHluYW1pY3puZSB3aWVyc3plKVwiLFxuICAgIG11bHRpcGxldGV4dDogXCJXaWVsZSBsaW5paSB0ZWtzdHVcIixcbiAgICBwYW5lbDogXCJQYW5lbFwiLFxuICAgIHBhbmVsZHluYW1pYzogXCJQYW5lbCAoZHluYW1pY3puZSBwYW5lbGUpXCIsXG4gICAgcmFkaW9ncm91cDogXCJKZWRub2tyb3RueSB3eWLDs3JcIixcbiAgICByYXRpbmc6IFwiT2NlbmFcIixcbiAgICB0ZXh0OiBcIlBvamVkeW5jemEgb2Rwb3dpZWTFulwiLFxuICAgIGJvb2xlYW46IFwiUHJhd2RhL0ZhxYJzelwiLFxuICAgIGV4cHJlc3Npb246IFwiV3lyYcW8ZW5pZVwiXG4gIH0sXG4gIC8vU3RyaW5ncyBpbiBFZGl0b3JcbiAgZWQ6IHtcbiAgICBzdXJ2ZXk6IFwiQW5raWV0YVwiLFxuICAgIFN1cnZleTogXCJBbmtpZXRhXCIsXG4gICAgZWRpdFN1cnZleTogXCJFZHl0dWogYW5raWV0xJlcIixcbiAgICBhZGROZXdQYWdlOiBcIkRvZGFqIG5vd8SFIHNla2NqxJlcIixcbiAgICBkZWxldGVQYWdlOiBcIlVzdcWEIHNla2NqxJlcIixcbiAgICBlZGl0UGFnZTogXCJFZHl0dWogc2VrY2rEmVwiLFxuICAgIG5ld1BhZ2VOYW1lOiBcInNla2NqYVwiLFxuICAgIG5ld1F1ZXN0aW9uTmFtZTogXCJweXRhbmllXCIsXG4gICAgbmV3UGFuZWxOYW1lOiBcInBhbmVsXCIsXG4gICAgdGVzdFN1cnZleTogXCJUZXN0dWogYW5raWV0xJlcIixcbiAgICB0ZXN0U3VydmV5QWdhaW46IFwiVGVzdHVqIHBvbm93bmllXCIsXG4gICAgdGVzdFN1cnZleVdpZHRoOiBcIlN6ZXJva2/Fm8SHIGFua2lldHk6IFwiLFxuICAgIGVtYmVkU3VydmV5OiBcIkVtYmVkIFN1cnZleVwiLFxuICAgIHNhdmVTdXJ2ZXk6IFwiWmFwaXN6IGFua2lldMSZXCIsXG4gICAgZGVzaWduZXI6IFwiUHJvamVrdGFudCBhbmtpZXR5XCIsXG4gICAganNvbkVkaXRvcjogXCJKU09OIEVkaXRvclwiLFxuICAgIHVuZG86IFwiQ29mbmlqXCIsXG4gICAgcmVkbzogXCJQb27Ds3dcIixcbiAgICBvcHRpb25zOiBcIk9wY2plXCIsXG4gICAgZ2VuZXJhdGVWYWxpZEpTT046IFwiR2VuZXJhdGUgVmFsaWQgSlNPTlwiLFxuICAgIGdlbmVyYXRlUmVhZGFibGVKU09OOiBcIkdlbmVyYXRlIFJlYWRhYmxlIEpTT05cIixcbiAgICB0b29sYm94OiBcIlBhbGV0YVwiLFxuICAgIGRlbFNlbE9iamVjdDogXCJVc3XFhCB3eWJyYW55IGVsZW1lbnRcIixcbiAgICBjb3JyZWN0SlNPTjogXCJQbGVhc2UgY29ycmVjdCBKU09OLlwiLFxuICAgIHN1cnZleVJlc3VsdHM6IFwiV3luaWsgYW5raWV0eTogXCIsXG4gICAgbW9kaWZpZWQ6IFwiWm1vZHlmaWtvd2FuYVwiLFxuICAgIHNhdmluZzogXCJUcndhIHphcGlzXCIsXG4gICAgc2F2ZWQ6IFwiWmFwaXNhbm9cIlxuICB9LFxuICAvL1Byb3BlcnR5IG5hbWVzIGluIHRhYmxlIGhlYWRlcnNcbiAgcGVsOiB7XG4gICAgaXNSZXF1aXJlZDogXCJXeW1hZ2FuZT9cIlxuICB9LFxuICAvL1Byb3BlcnR5IEVkaXRvcnNcbiAgcGU6IHtcbiAgICBhcHBseTogXCJaYXN0b3N1alwiLFxuICAgIG9rOiBcIk9LXCIsXG4gICAgY2FuY2VsOiBcIkFudWx1alwiLFxuICAgIHJlc2V0OiBcIlJlc2V0dWpcIixcbiAgICBjbG9zZTogXCJaYW1rbmlqXCIsXG4gICAgZGVsZXRlOiBcIlVzdcWEXCIsXG4gICAgYWRkTmV3OiBcIkRvZGFqIG5vd8SFXCIsXG4gICAgcmVtb3ZlQWxsOiBcIlVzdcWEIHdzenlzdGtpZVwiLFxuICAgIGVkaXQ6IFwiRWR5dHVqXCIsXG4gICAgZW1wdHk6IFwiPHB1c3R5PlwiLFxuICAgIGZhc3RFbnRyeTogXCJTenlia2llIHdwcm93YWR6YW5pZVwiLFxuICAgIGZvcm1FbnRyeTogXCJGb3JtdWxhcnpcIixcbiAgICB0ZXN0U2VydmljZTogXCJUZXN0dWogdXPFgnVnxJlcIixcbiAgICBjb25kaXRpb25IZWxwOlxuICAgICAgXCJQb2RhaiB3eXJhxbxlbmllLCBrdMOzcmUgendyw7NjaSB3YXJ0b8WbxIcgcHJhd2RhL2ZhxYJzei4gSmXFm2xpIGNoY2VzeiwgYWJ5IHNla2NqYSBsdWIgcHl0YW5pZSBwb3pvc3RhxYJ5IHdpZG9jem5lIC0gcG93aW5ubyB6d3LDs2NpxIcgcHJhd2TEmS4gUHJ6eWvFgmFkOiB7cHl0YW5pZTF9ID0gJ3dhcnRvxZvEhzEnIG9yICh7cHl0YW5pZTJ9ICoge3B5dGFuaWU0fSAgPiAyMCBhbmQge3B5dGFuaWUzfSA8IDUpXCIsXG4gICAgZXhwcmVzc2lvbkhlbHA6XG4gICAgICBcIlBsZWFzZSBlbnRlciBhbiBleHByZXNzaW9uLiBZb3UgbWF5IHVzZSBjdXJseSBicmFja2V0cyB0byBnZXQgYWNjZXNzIHRvIHRoZSBxdWVzdGlvbiB2YWx1ZXM6ICd7cXVlc3Rpb24xfSArIHtxdWVzdGlvbjJ9JywgJyh7cHJpY2V9KntxdWFudGl0eX0pICogKDEwMCAtIHtkaXNjb3VudH0pJ1wiLFxuICAgIGFjZUVkaXRvckhlbHA6IFwiUHJlc3MgY3RybCtzcGFjZSB0byBnZXQgZXhwcmVzc2lvbiBjb21wbGV0aW9uIGhpbnRcIixcbiAgICBhY2VFZGl0b3JSb3dUaXRsZTogXCJDdXJyZW50IHJvd1wiLFxuICAgIGFjZUVkaXRvclBhbmVsVGl0bGU6IFwiQ3VycmVudCBwYW5lbFwiLFxuICAgIHNob3dNb3JlOiBcIkZvciBtb3JlIGRldGFpbHMgcGxlYXNlIGNoZWNrIHRoZSBkb2N1bWVudGF0aW9uXCIsXG4gICAgYXNzaXN0YW50VGl0bGU6IFwiQXZhaWxhYmxlIHF1ZXN0aW9uczpcIixcblxuICAgIHByb3BlcnR5SXNFbXB0eTogXCJQb2RhaiB3YXJ0b8WbxIdcIixcbiAgICB2YWx1ZTogXCJXYXJ0b8WbxIdcIixcbiAgICB0ZXh0OiBcIkV0eWtpZXRhXCIsXG4gICAgY29sdW1uRWRpdDogXCJFZGl0IGNvbHVtbjogezB9XCIsXG4gICAgaXRlbUVkaXQ6IFwiRWRpdCBpdGVtOiB7MH1cIixcblxuICAgIHVybDogXCJVUkxcIixcbiAgICBwYXRoOiBcIlBhdGhcIixcbiAgICB2YWx1ZU5hbWU6IFwiVmFsdWUgbmFtZVwiLFxuICAgIHRpdGxlTmFtZTogXCJUaXRsZSBuYW1lXCIsXG5cbiAgICBoYXNPdGhlcjogXCJDenkgbW/FvGxpd2Egd8WCYXNuYSBvZHBvd2llZMW6XCIsXG4gICAgb3RoZXJUZXh0OiBcIk90aGVyIGl0ZW0gdGV4dFwiLFxuICAgIG5hbWU6IFwiTmF6d2FcIixcbiAgICB0aXRsZTogXCJFdHlraWV0YVwiLFxuICAgIGNlbGxUeXBlOiBcIlR5cCBrb23Ds3JraVwiLFxuICAgIGNvbENvdW50OiBcIkxpY3piYSBrb2x1bW5cIixcbiAgICBjaG9pY2VzT3JkZXI6IFwiS29sZWpub8WbxIcgb2Rwb3dpZWR6aVwiLFxuICAgIHZpc2libGU6IFwiQ3p5IHdpZG9jem5lP1wiLFxuICAgIGlzUmVxdWlyZWQ6IFwiQ3p5IHd5bWFnYWxuZT9cIixcbiAgICBzdGFydFdpdGhOZXdMaW5lOiBcIkN6eSByb3pwb2N6eW5hIHNpxJkgbm93xIUgbGluacSFP1wiLFxuICAgIHJvd3M6IFwiTGljemJhIHdpZXJzenlcIixcbiAgICBwbGFjZUhvbGRlcjogXCJJbnB1dCBwbGFjZSBob2xkZXJcIixcbiAgICBzaG93UHJldmlldzogXCJJcyBpbWFnZSBwcmV2aWV3IHNob3duP1wiLFxuICAgIHN0b3JlRGF0YUFzVGV4dDogXCJTdG9yZSBmaWxlIGNvbnRlbnQgaW4gSlNPTiByZXN1bHQgYXMgdGV4dFwiLFxuICAgIG1heFNpemU6IFwiTWF4aW11bSBmaWxlIHNpemUgaW4gYnl0ZXNcIixcbiAgICBpbWFnZUhlaWdodDogXCJJbWFnZSBoZWlnaHRcIixcbiAgICBpbWFnZVdpZHRoOiBcIkltYWdlIHdpZHRoXCIsXG4gICAgcm93Q291bnQ6IFwiUm93IGNvdW50XCIsXG4gICAgYWRkUm93VGV4dDogXCJBZGQgcm93IGJ1dHRvbiB0ZXh0XCIsXG4gICAgcmVtb3ZlUm93VGV4dDogXCJSZW1vdmUgcm93IGJ1dHRvbiB0ZXh0XCIsXG4gICAgbWluUmF0ZURlc2NyaXB0aW9uOiBcIk9waXMgbmFqbmnFvHN6ZWogb2NlbnlcIixcbiAgICBtYXhSYXRlRGVzY3JpcHRpb246IFwiT3BpcyBuYWp3ecW8c3plaiBvY2VueVwiLFxuICAgIGlucHV0VHlwZTogXCJJbnB1dCB0eXBlXCIsXG4gICAgb3B0aW9uc0NhcHRpb246IFwiT3B0aW9ucyBjYXB0aW9uXCIsXG4gICAgZGVmYXVsdFZhbHVlOiBcIkRlZmF1bHQgdmFsdWVcIixcblxuICAgIHN1cnZleUVkaXRvclRpdGxlOiBcIkVkeXR1aiBhbmtpZXTEmVwiLFxuICAgIHFFZGl0b3JUaXRsZTogXCJFZHl0dWo6IHswfVwiLFxuXG4gICAgLy9zdXJ2ZXlcbiAgICBzaG93VGl0bGU6IFwiUG9rYcW8L3VrcnlqIHR5dHXFglwiLFxuICAgIGxvY2FsZTogXCJEb215xZtsbnkgasSZenlrXCIsXG4gICAgbW9kZTogXCJUcnliIChlZHljamEvcG9kZ2zEhWQpXCIsXG4gICAgY2xlYXJJbnZpc2libGVWYWx1ZXM6IFwiVXN1xYQgbmlld2lkb2N6bmUgb2Rwb3dpZWR6aVwiLFxuICAgIGNvb2tpZU5hbWU6IFwiQ29va2llIG5hbWUgKHRvIGRpc2FibGUgcnVuIHN1cnZleSB0d28gdGltZXMgbG9jYWxseSlcIixcbiAgICBzZW5kUmVzdWx0T25QYWdlTmV4dDogXCJTZW5kIHN1cnZleSByZXN1bHRzIG9uIHBhZ2UgbmV4dFwiLFxuICAgIHN0b3JlT3RoZXJzQXNDb21tZW50OiBcIlN0b3JlICdvdGhlcnMnIHZhbHVlIGluIHNlcGFyYXRlIGZpZWxkXCIsXG4gICAgc2hvd1BhZ2VUaXRsZXM6IFwiU2hvdyBwYWdlIHRpdGxlc1wiLFxuICAgIHNob3dQYWdlTnVtYmVyczogXCJTaG93IHBhZ2UgbnVtYmVyc1wiLFxuICAgIHBhZ2VQcmV2VGV4dDogXCJQYWdlIHByZXZpb3VzIGJ1dHRvbiB0ZXh0XCIsXG4gICAgcGFnZU5leHRUZXh0OiBcIlBhZ2UgbmV4dCBidXR0b24gdGV4dFwiLFxuICAgIGNvbXBsZXRlVGV4dDogXCJDb21wbGV0ZSBidXR0b24gdGV4dFwiLFxuICAgIHN0YXJ0U3VydmV5VGV4dDogXCJTdGFydCBidXR0b24gdGV4dFwiLFxuICAgIHNob3dOYXZpZ2F0aW9uQnV0dG9uczogXCJTaG93IG5hdmlnYXRpb24gYnV0dG9ucyAoZGVmYXVsdCBuYXZpZ2F0aW9uKVwiLFxuICAgIHNob3dQcmV2QnV0dG9uOiBcIlNob3cgcHJldmlvdXMgYnV0dG9uICh1c2VyIG1heSByZXR1cm4gb24gcHJldmlvdXMgcGFnZSlcIixcbiAgICBmaXJzdFBhZ2VJc1N0YXJ0ZWQ6IFwiVGhlIGZpcnN0IHBhZ2UgaW4gdGhlIHN1cnZleSBpcyBhIHN0YXJ0ZWQgcGFnZS5cIixcbiAgICBzaG93Q29tcGxldGVkUGFnZTogXCJTaG93IHRoZSBjb21wbGV0ZWQgcGFnZSBhdCB0aGUgZW5kIChjb21wbGV0ZWRIdG1sKVwiLFxuICAgIGdvTmV4dFBhZ2VBdXRvbWF0aWM6XG4gICAgICBcIk9uIGFuc3dlcmluZyBhbGwgcXVlc3Rpb25zLCBnbyB0byB0aGUgbmV4dCBwYWdlIGF1dG9tYXRpY2FsbHlcIixcbiAgICBzaG93UHJvZ3Jlc3NCYXI6IFwiU2hvdyBwcm9ncmVzcyBiYXJcIixcbiAgICBxdWVzdGlvblRpdGxlTG9jYXRpb246IFwiUXVlc3Rpb24gdGl0bGUgbG9jYXRpb25cIixcbiAgICByZXF1aXJlZFRleHQ6IFwiVGhlIHF1ZXN0aW9uIHJlcXVpcmVkIHN5bWJvbChzKVwiLFxuICAgIHF1ZXN0aW9uU3RhcnRJbmRleDogXCJRdWVzdGlvbiBzdGFydCBpbmRleCAoMSwgMiBvciAnQScsICdhJylcIixcbiAgICBzaG93UXVlc3Rpb25OdW1iZXJzOiBcIlNob3cgcXVlc3Rpb24gbnVtYmVyc1wiLFxuICAgIHF1ZXN0aW9uVGl0bGVUZW1wbGF0ZTpcbiAgICAgIFwiUXVlc3Rpb24gdGl0bGUgdGVtcGxhdGUsIGRlZmF1bHQgaXM6ICd7bm99LiB7cmVxdWlyZX0ge3RpdGxlfSdcIixcbiAgICBxdWVzdGlvbkVycm9yTG9jYXRpb246IFwiUXVlc3Rpb24gZXJyb3IgbG9jYXRpb25cIixcbiAgICBmb2N1c0ZpcnN0UXVlc3Rpb25BdXRvbWF0aWM6IFwiRm9jdXMgZmlyc3QgcXVlc3Rpb24gb24gY2hhbmdpbmcgdGhlIHBhZ2VcIixcbiAgICBxdWVzdGlvbnNPcmRlcjogXCJFbGVtZW50cyBvcmRlciBvbiB0aGUgcGFnZVwiLFxuICAgIG1heFRpbWVUb0ZpbmlzaDogXCJNYXhpbXVtIHRpbWUgdG8gZmluaXNoIHRoZSBzdXJ2ZXlcIixcbiAgICBtYXhUaW1lVG9GaW5pc2hQYWdlOiBcIk1heGltdW0gdGltZSB0byBmaW5pc2ggYSBwYWdlIGluIHRoZSBzdXJ2ZXlcIixcbiAgICBzaG93VGltZXJQYW5lbDogXCJTaG93IHRpbWVyIHBhbmVsXCIsXG4gICAgc2hvd1RpbWVyUGFuZWxNb2RlOiBcIlNob3cgdGltZXIgcGFuZWwgbW9kZVwiLFxuICAgIHJlbmRlck1vZGU6IFwiUmVuZGVyIG1vZGVcIixcbiAgICBhbGxvd0FkZFBhbmVsOiBcIkFsbG93IGFkZGluZyBhIHBhbmVsXCIsXG4gICAgYWxsb3dSZW1vdmVQYW5lbDogXCJBbGxvdyByZW1vdmluZyB0aGUgcGFuZWxcIixcbiAgICBwYW5lbEFkZFRleHQ6IFwiQWRkaW5nIHBhbmVsIHRleHRcIixcbiAgICBwYW5lbFJlbW92ZVRleHQ6IFwiUmVtb3ZpbmcgcGFuZWwgdGV4dFwiLFxuICAgIGlzU2luZ2xlUGFnZTogXCJTaG93IGFsbCBlbGVtZW50cyBvbiBvbmUgcGFnZVwiLFxuXG4gICAgdGFiczoge1xuICAgICAgZ2VuZXJhbDogXCJPZ8OzbG5lXCIsXG4gICAgICBmaWxlT3B0aW9uczogXCJPcHRpb25zXCIsXG4gICAgICBodG1sOiBcIkh0bWwgRWRpdG9yXCIsXG4gICAgICBjb2x1bW5zOiBcIktvbHVtbnlcIixcbiAgICAgIHJvd3M6IFwiV2llcnN6ZVwiLFxuICAgICAgY2hvaWNlczogXCJPZHBvd2llZHppXCIsXG4gICAgICB2aXNpYmxlSWY6IFwiV2lkb2N6bmUgamXFm2xpXCIsXG4gICAgICBlbmFibGVJZjogXCJFbmFibGUgSWZcIixcbiAgICAgIHJhdGVWYWx1ZXM6IFwiV2FydG/Fm8SHIG9jZW55XCIsXG4gICAgICBjaG9pY2VzQnlVcmw6IFwiT2Rwb3dpZWR6aSB6IHdlYnNlcndpc3VcIixcbiAgICAgIG1hdHJpeENob2ljZXM6IFwiRGVmYXVsdCBDaG9pY2VzXCIsXG4gICAgICBtdWx0aXBsZVRleHRJdGVtczogXCJUZXh0IElucHV0c1wiLFxuICAgICAgdmFsaWRhdG9yczogXCJWYWxpZGF0b3JzXCIsXG4gICAgICBuYXZpZ2F0aW9uOiBcIk5hdmlnYXRpb25cIixcbiAgICAgIHF1ZXN0aW9uOiBcIlF1ZXN0aW9uXCIsXG4gICAgICBjb21wbGV0ZWRIdG1sOiBcIkNvbXBsZXRlZCBIdG1sXCIsXG4gICAgICBsb2FkaW5nSHRtbDogXCJMb2FkaW5nIEh0bWxcIixcbiAgICAgIHRpbWVyOiBcIlRpbWVyL1F1aXpcIixcbiAgICAgIHRyaWdnZXJzOiBcIlRyaWdnZXJzXCIsXG4gICAgICB0ZW1wbGF0ZVRpdGxlOiBcIlRlbXBsYXRlIHRpdGxlXCJcbiAgICB9LFxuICAgIGVkaXRQcm9wZXJ0eTogXCJFZGl0IHByb3BlcnR5ICd7MH0nXCIsXG4gICAgaXRlbXM6IFwiWyBJdGVtczogezB9IF1cIixcblxuICAgIGVudGVyTmV3VmFsdWU6IFwiUGxlYXNlLCBlbnRlciB0aGUgdmFsdWUuXCIsXG4gICAgbm9xdWVzdGlvbnM6IFwiVGhlcmUgaXMgbm8gYW55IHF1ZXN0aW9uIGluIHRoZSBzdXJ2ZXkuXCIsXG4gICAgY3JlYXRldHJpZ2dlcjogXCJQbGVhc2UgY3JlYXRlIGEgdHJpZ2dlclwiLFxuICAgIHRyaWdnZXJPbjogXCJPbiBcIixcbiAgICB0cmlnZ2VyTWFrZVBhZ2VzVmlzaWJsZTogXCJNYWtlIHBhZ2VzIHZpc2libGU6XCIsXG4gICAgdHJpZ2dlck1ha2VRdWVzdGlvbnNWaXNpYmxlOiBcIk1ha2UgZWxlbWVudHMgdmlzaWJsZTpcIixcbiAgICB0cmlnZ2VyQ29tcGxldGVUZXh0OiBcIkNvbXBsZXRlIHRoZSBzdXJ2ZXkgaWYgc3VjY2VlZC5cIixcbiAgICB0cmlnZ2VyTm90U2V0OiBcIlRoZSB0cmlnZ2VyIGlzIG5vdCBzZXRcIixcbiAgICB0cmlnZ2VyUnVuSWY6IFwiUnVuIGlmXCIsXG4gICAgdHJpZ2dlclNldFRvTmFtZTogXCJDaGFuZ2UgdmFsdWUgb2Y6IFwiLFxuICAgIHRyaWdnZXJTZXRWYWx1ZTogXCJ0bzogXCIsXG4gICAgdHJpZ2dlcklzVmFyaWFibGU6IFwiRG8gbm90IHB1dCB0aGUgdmFyaWFibGUgaW50byB0aGUgc3VydmV5IHJlc3VsdC5cIlxuICB9LFxuICAvL1Byb3BlcnR5IHZhbHVlc1xuICBwdjoge1xuICAgIHRydWU6IFwicHJhd2RhXCIsXG4gICAgZmFsc2U6IFwiZmHFgnN6XCJcbiAgfSxcbiAgLy9PcGVyYXRvcnNcbiAgb3A6IHtcbiAgICBlbXB0eTogXCJpcyBlbXB0eVwiLFxuICAgIG5vdGVtcHR5OiBcImlzIG5vdCBlbXB0eVwiLFxuICAgIGVxdWFsOiBcImVxdWFsc1wiLFxuICAgIG5vdGVxdWFsOiBcIm5vdCBlcXVhbHNcIixcbiAgICBjb250YWluczogXCJjb250YWluc1wiLFxuICAgIG5vdGNvbnRhaW5zOiBcIm5vdCBjb250YWluc1wiLFxuICAgIGdyZWF0ZXI6IFwiZ3JlYXRlclwiLFxuICAgIGxlc3M6IFwibGVzc1wiLFxuICAgIGdyZWF0ZXJvcmVxdWFsOiBcImdyZWF0ZXIgb3IgZXF1YWxzXCIsXG4gICAgbGVzc29yZXF1YWw6IFwiTGVzcyBvciBFcXVhbHNcIlxuICB9LFxuICAvL0VtYmVkIHdpbmRvd1xuICBldzoge1xuICAgIGFuZ3VsYXI6IFwiVXNlIEFuZ3VsYXIgdmVyc2lvblwiLFxuICAgIGpxdWVyeTogXCJVc2UgalF1ZXJ5IHZlcnNpb25cIixcbiAgICBrbm9ja291dDogXCJVc2UgS25vY2tvdXQgdmVyc2lvblwiLFxuICAgIHJlYWN0OiBcIlVzZSBSZWFjdCB2ZXJzaW9uXCIsXG4gICAgdnVlOiBcIlVzZSBWdWUgdmVyc2lvblwiLFxuICAgIGJvb3RzdHJhcDogXCJGb3IgYm9vdHN0cmFwIGZyYW1ld29ya1wiLFxuICAgIHN0YW5kYXJkOiBcIk5vIGJvb3RzdHJhcFwiLFxuICAgIHNob3dPblBhZ2U6IFwiU2hvdyBzdXJ2ZXkgb24gYSBwYWdlXCIsXG4gICAgc2hvd0luV2luZG93OiBcIlNob3cgc3VydmV5IGluIGEgd2luZG93XCIsXG4gICAgbG9hZEZyb21TZXJ2ZXI6IFwiTG9hZCBTdXJ2ZXkgSlNPTiBmcm9tIHNlcnZlclwiLFxuICAgIHRpdGxlU2NyaXB0OiBcIlNjcmlwdHMgYW5kIHN0eWxlc1wiLFxuICAgIHRpdGxlSHRtbDogXCJIVE1MXCIsXG4gICAgdGl0bGVKYXZhU2NyaXB0OiBcIkphdmFTY3JpcHRcIlxuICB9LFxuICAvL1Rlc3QgU3VydmV5XG4gIHRzOiB7XG4gICAgc2VsZWN0UGFnZTogXCJXeWJpZXJ6IHN0cm9uxJksIGFieSBqxIUgcHJ6ZXRlc3Rvd2HEhzpcIlxuICB9LFxuICB2YWxpZGF0b3JzOiB7XG4gICAgYW5zd2VyY291bnR2YWxpZGF0b3I6IFwiYW5zd2VyIGNvdW50XCIsXG4gICAgZW1haWx2YWxpZGF0b3I6IFwiZS1tYWlsXCIsXG4gICAgbnVtZXJpY3ZhbGlkYXRvcjogXCJudW1lcmljXCIsXG4gICAgcmVnZXh2YWxpZGF0b3I6IFwicmVnZXhcIixcbiAgICB0ZXh0dmFsaWRhdG9yOiBcInRleHRcIlxuICB9LFxuICB0cmlnZ2Vyczoge1xuICAgIGNvbXBsZXRldHJpZ2dlcjogXCJjb21wbGV0ZSBzdXJ2ZXlcIixcbiAgICBzZXR2YWx1ZXRyaWdnZXI6IFwic2V0IHZhbHVlXCIsXG4gICAgdmlzaWJsZXRyaWdnZXI6IFwiY2hhbmdlIHZpc2liaWxpdHlcIlxuICB9LFxuICAvL1Byb3BlcnRpZXNcbiAgcDoge1xuICAgIG5hbWU6IFwibmF6d2FcIixcbiAgICB0aXRsZToge1xuICAgICAgbmFtZTogXCJ0eXR1xYJcIixcbiAgICAgIHRpdGxlOiBcIlBvem9zdGF3IHB1c3R5LCBqZcWbbGkgbWEgYnnEhyB0YWtpIHNhbSwgamFrICdOYXp3YSdcIlxuICAgIH0sXG4gICAgcGFnZV90aXRsZTogeyBuYW1lOiBcInR5dHXFglwiLCB0aXRsZTogXCJUeXR1xYIgc2VrY2ppXCIgfVxuICB9XG59O1xuXG5lZGl0b3JMb2NhbGl6YXRpb24ubG9jYWxlc1tcInBsXCJdID0gcG9saXNoU3RyaW5ncztcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9sb2NhbGl6YXRpb24vcG9saXNoLnRzIiwiaW1wb3J0IHsgZWRpdG9yTG9jYWxpemF0aW9uIH0gZnJvbSBcIi4uL2VkaXRvckxvY2FsaXphdGlvblwiO1xuXG52YXIgcG9ydHVndWVzZVRyYW5zbGF0aW9uID0ge1xuICAvL3N1cnZleSB0ZW1wbGF0ZXNcbiAgc3VydmV5OiB7XG4gICAgZWRpdDogXCJFZGl0YXJcIixcbiAgICBkcm9wUXVlc3Rpb246IFwiUG9yIGZhdm9yIGFycmFzdGUgdW1hIHBlcmd1bnRhIGFxdWkuXCIsXG4gICAgY29weTogXCJDb3BpYXJcIixcbiAgICBhZGRUb1Rvb2xib3g6IFwiQWRpY2lvbmFyIMOgIHRvb2xib3hcIixcbiAgICBkZWxldGVQYW5lbDogXCJSZW1vdmVyIFBhaW5lbFwiLFxuICAgIGRlbGV0ZVF1ZXN0aW9uOiBcIlJlbW92ZXIgUGVyZ3VudGFcIixcbiAgICBjb252ZXJ0VG86IFwiQ29udmVydGVyIHBhcmFcIixcbiAgICBkcmFnOiBcIkFycmFzdGFyIGVsZW1lbnRvXCJcbiAgfSxcbiAgLy9xdWVzdGlvblR5cGVzXG4gIHF0OiB7XG4gICAgZGVmYXVsdDogXCJEZWZhdWx0XCIsXG4gICAgY2hlY2tib3g6IFwiQ2hlY2tib3hcIixcbiAgICBjb21tZW50OiBcIkNvbWVudMOhcmlvXCIsXG4gICAgaW1hZ2VwaWNrZXI6IFwiU2VsZWNpb25hZG9yIGRlIGltYWdlbVwiLFxuICAgIGRyb3Bkb3duOiBcIkRyb3Bkb3duXCIsXG4gICAgZmlsZTogXCJBcnF1aXZvXCIsXG4gICAgaHRtbDogXCJIdG1sXCIsXG4gICAgbWF0cml4OiBcIk1hdHJpeiAob3DDp8OjbyDDum5pY2EpXCIsXG4gICAgbWF0cml4ZHJvcGRvd246IFwiTWF0cml6IChtdWx0aXBsYXMgb3DDp8O1ZXMpXCIsXG4gICAgbWF0cml4ZHluYW1pYzogXCJNYXRyaXogKGxpbmhhcyBkaW7Dom1pY2FzKVwiLFxuICAgIG11bHRpcGxldGV4dDogXCJUZXh0byBtw7psdGlwbG9cIixcbiAgICBwYW5lbDogXCJQYWluZWxcIixcbiAgICBwYW5lbGR5bmFtaWM6IFwiUGFpbmVsIChwYWluw6lpcyBkaW7Dom1pY29zKVwiLFxuICAgIHJhZGlvZ3JvdXA6IFwiUmFkaW9ncm91cFwiLFxuICAgIHJhdGluZzogXCJSYXRpbmdcIixcbiAgICB0ZXh0OiBcIlRleHRvIMO6bmljb1wiLFxuICAgIGJvb2xlYW46IFwiQm9sZWFub1wiLFxuICAgIGV4cHJlc3Npb246IFwiRXhwcmVzc8Ojb1wiXG4gIH0sXG4gIC8vU3RyaW5ncyBpbiBFZGl0b3JcbiAgZWQ6IHtcbiAgICBkZWZhdWx0TG9jYWxlOiBcIkRlZmF1bHQgKHswfSlcIixcbiAgICBzdXJ2ZXk6IFwiUGVzcXVpc2FcIixcbiAgICBzZXR0aW5nczogXCJDb25maWd1cmHDp8O1ZXMgZGEgUGVzcXVpc2FcIixcbiAgICBlZGl0U3VydmV5OiBcIkVkaXRhciBQZXNxdWlzYVwiLFxuICAgIGFkZE5ld1BhZ2U6IFwiQWRpY2lvbmFyIE5vdmEgUMOhZ2luYVwiLFxuICAgIG1vdmVSaWdodDogXCJSb2xlIHBhcmEgZGlyZWl0YVwiLFxuICAgIG1vdmVMZWZ0OiBcIlJvbGUgcGFyYSBlc3F1ZXJkYVwiLFxuICAgIGRlbGV0ZVBhZ2U6IFwiRGVsZXRhciBQw6FnaW5hXCIsXG4gICAgZWRpdFBhZ2U6IFwiRWRpdGFyIFDDoWdpbmFcIixcbiAgICBlZGl0OiBcIkVkaXRhclwiLFxuICAgIG5ld1BhZ2VOYW1lOiBcInDDoWdpbmFcIixcbiAgICBuZXdRdWVzdGlvbk5hbWU6IFwicGVyZ3VudGFcIixcbiAgICBuZXdQYW5lbE5hbWU6IFwicGFpbmVsXCIsXG4gICAgdGVzdFN1cnZleTogXCJUZXN0YXIgcGVzcXVpc2FcIixcbiAgICB0ZXN0U3VydmV5QWdhaW46IFwiVGVzdGFyIHBlc3F1aXNhIG5vdmFtZW50ZVwiLFxuICAgIHRlc3RTdXJ2ZXlXaWR0aDogXCJUYW1hbmhvIGRvIHBlc3F1aXNhOiBcIixcbiAgICBlbWJlZFN1cnZleTogXCJJbmNvcnBvcmFyIFBlc3F1aXNhXCIsXG4gICAgdHJhbnNsYXRpb246IFwiVHJhZHXDp8Ojb1wiLFxuICAgIHNhdmVTdXJ2ZXk6IFwiU2FsdmFyIFBlc3F1aXNhXCIsXG4gICAgZGVzaWduZXI6IFwiRGVzaWduZXIgZGUgUGVzcXVpc2FcIixcbiAgICBqc29uRWRpdG9yOiBcIkVkaXRvciBkZSBKU09OXCIsXG4gICAgdW5kbzogXCJEZXNmYXplclwiLFxuICAgIHJlZG86IFwiUmVmYXplclwiLFxuICAgIG9wdGlvbnM6IFwiT3DDp8O1ZXNcIixcbiAgICBnZW5lcmF0ZVZhbGlkSlNPTjogXCJHZXJhciBKU09OIHbDoWxpZG9cIixcbiAgICBnZW5lcmF0ZVJlYWRhYmxlSlNPTjogXCJHZXJhciBKU09OIGxlZ8OtdmVsXCIsXG4gICAgdG9vbGJveDogXCJUb29sYm94XCIsXG4gICAgdG9vbGJveEdlbmVyYWxDYXRlZ29yeTogXCJHZXJhbFwiLFxuICAgIGRlbFNlbE9iamVjdDogXCJBcGFnYXIgb2JqZXRvIHNlbGVjaW9uYWRvXCIsXG4gICAgZWRpdFNlbE9iamVjdDogXCJFZGl0YXIgb2JqZXRvIHNlbGVjaW9uYWRvXCIsXG4gICAgY29ycmVjdEpTT046IFwiUG9yIGZhdm9yIGNvcnJpamEgbyBKU09OLlwiLFxuICAgIHN1cnZleVJlc3VsdHM6IFwiUmVzdWx0YWRvIGRhIHBlc3F1aXNhOiBcIixcbiAgICBzdXJ2ZXlSZXN1bHRzVGFibGU6IFwiQ29tbyBUYWJlbGFcIixcbiAgICBzdXJ2ZXlSZXN1bHRzSnNvbjogXCJDb21vIEpTT05cIixcbiAgICByZXN1bHRzVGl0bGU6IFwiVMOtdHVsbyBkYSBQZXJndW50YVwiLFxuICAgIHJlc3VsdHNOYW1lOiBcIk5vbWUgZGEgUGVyZ3VudGFcIixcbiAgICByZXN1bHRzVmFsdWU6IFwiVmFsb3IgZGEgUmVzcG9zdGFcIixcbiAgICByZXN1bHRzRGlzcGxheVZhbHVlOiBcIk1vc3RyYXIgVmFsb3JcIixcbiAgICBtb2RpZmllZDogXCJNb2RpZmljYWRvXCIsXG4gICAgc2F2aW5nOiBcIlNhbHZhbmRvXCIsXG4gICAgc2F2ZWQ6IFwiU2Fsdm9cIixcbiAgICBzYXZlRXJyb3I6IFwiRXJybyEgQ29udGXDumRvIGRvIGVkaXRvciBuw6NvIGZvaSBzYWx2by5cIixcbiAgICB0cmFuc2xhdGlvbkFkZExhbmd1YWdlOiBcIlNlbGVjaW9uZSBvIGlkaW9tYSBwYXJhIHRyYWR1emlyXCIsXG4gICAgdHJhbnNsYXRpb25TaG93QWxsU3RyaW5nczogXCJNb3N0cmFyIHRvZGFzIHN0cmluZ3NcIixcbiAgICB0cmFuc2xhdGlvblNob3dBbGxQYWdlczogXCJNb3N0cmFyIHRvZGFzIHDDoWdpbmFzXCIsXG4gICAgdHJhbnNsYXRpb25Ob1N0cmluZ3M6IFwiTmVuaHVtYSBzdHJpbmcgcGFyYSB0cmFkdXppci4gUG9yIGZhdm9yLCBhbHRlcmUgbyBmaWx0cm8uXCIsXG4gICAgdHJhbnNsYXRpb25FeHBvcnRUb1NDVkJ1dHRvbjogXCJFeHBvcnRhciBwYXJhIENTVlwiLFxuICAgIHRyYW5zbGF0aW9uSW1wb3J0RnJvbVNDVkJ1dHRvbjogXCJJbXBvcnRhciBkZSBDU1ZcIixcbiAgICB0cmFuc2xhdGlvbk1lcmdlTG9jYWxlV2l0aERlZmF1bHQ6IFwiQ29tYmluYXIgezB9IGNvbSBvIGlkaW9tYSBkZWZhdWx0XCJcbiAgfSxcbiAgLy9Qcm9wZXJ0eSBuYW1lcyBpbiB0YWJsZSBoZWFkZXJzXG4gIHBlbDoge1xuICAgIGlzUmVxdWlyZWQ6IFwiT2JyaWdhdMOzcmlvP1wiXG4gIH0sXG4gIC8vUHJvcGVydHkgRWRpdG9yc1xuICBwZToge1xuICAgIGFwcGx5OiBcIkFwbGljYXJcIixcbiAgICBvazogXCJPS1wiLFxuICAgIGNhbmNlbDogXCJDYW5jZWxhclwiLFxuICAgIHJlc2V0OiBcIkxpbXBhclwiLFxuICAgIGNsb3NlOiBcIkZlY2hhclwiLFxuICAgIGRlbGV0ZTogXCJBcGFnYXJcIixcbiAgICBhZGROZXc6IFwiQWRpY2lvbmFyIE5vdm9cIixcbiAgICBhZGRJdGVtOiBcIkNsaXF1ZSBwYXJhIGFkaWNpb25hciB1bSBpdGVtLi4uXCIsXG4gICAgcmVtb3ZlQWxsOiBcIlJlbW92ZXIgVG9kb3NcIixcbiAgICBlZGl0OiBcIkVkaXRhclwiLFxuICAgIGl0ZW1WYWx1ZUVkaXQ6IFwiVmlzw612ZWwgU2VcIixcbiAgICBlZGl0Q2hvaWNlczogXCJFZGl0YXIgT3DDp8O1ZXNcIixcbiAgICBtb3ZlOiBcIk1vdmVyXCIsXG4gICAgZW1wdHk6IFwiPHZhemlvPlwiLFxuICAgIG5vdEVtcHR5OiBcIjxlZGl0YXIgdmFsb3I+XCIsXG4gICAgZmFzdEVudHJ5OiBcIkVudHJhZGEgUsOhcGlkYVwiLFxuICAgIGZvcm1FbnRyeTogXCJFbnRyYWRhIGNvbSBmb3JtdWzDoXJpb1wiLFxuICAgIHRlc3RTZXJ2aWNlOiBcIlRlc3RhciBvIHNlcnZpw6dvXCIsXG4gICAgY29uZGl0aW9uU2VsZWN0UXVlc3Rpb246IFwiU2VsZWNpb25hciBwZXJndW50YS4uLlwiLFxuICAgIGNvbmRpdGlvblZhbHVlUXVlc3Rpb25UaXRsZTogXCJQb3IgZmF2b3IsIGVudHJlL3NlbGVjaW9uZSBvIHZhbG9yXCIsXG4gICAgY29uZGl0aW9uQnV0dG9uQWRkOiBcIkFkZFwiLFxuICAgIGNvbmRpdGlvbkJ1dHRvblJlcGxhY2U6IFwiU3Vic3RpdHVpclwiLFxuICAgIGNvbmRpdGlvbkhlbHA6XG4gICAgICBcIlBvciBmYXZvciwgZW50cmUgY29tIHVtYSBleHByZXNzw6NvIGJvbGVhbmEuIERldmUgcmV0b3JuYXIgdmVyZGFkZWlybyBwYXJhIG1hbnRlciBhIHBlcmd1bnRhL3DDoWdpbmEgdmlzw612ZWwuIFBvciBleGVtcGxvOiB7wrRwZXJndW50YTF9ID0gJ3ZhbG9yMScgb3UgKHtwZXJndW50YTJ9ICoge3Blcmd1bnRhNH0gPiAyMCBlIHtwZXJndW50YTN9IDwgNSlcIixcbiAgICBleHByZXNzaW9uSGVscDpcbiAgICAgIFwiUG9yIGZhdm9yIGluZm9ybWUgdW1hIGV4cHJlc3PDo28gYm9sZWFuYS4gRWxhIGRldmUgcmV0b3JuYXIgdmVyZGFkZWlybyBwYXJhIG1hbnRlciBhIHBlcmd1bnRhL3DDoWdpbmEgdmlzw612ZWwuIFBvciBleGVtcGxvOiB7wrRwZXJndW50YTF9ID0gJ3ZhbG9yMScgb3IgKHtwZXJndW50YTJ9ID0gMyBhbmQge3Blcmd1bnRhM30gPCA1KVwiLFxuICAgIGFjZUVkaXRvckhlbHA6IFwiUHJlc3Npb25lIGN0cmwrc3BhY2UgcGFyYSBhdXRvY29tcGxldGFyXCIsXG4gICAgYWNlRWRpdG9yUm93VGl0bGU6IFwiTGluaGEgYXR1YWxcIixcbiAgICBhY2VFZGl0b3JQYW5lbFRpdGxlOiBcIlBhaW5lbCBhdHVhbFwiLFxuICAgIHNob3dNb3JlOiBcIlBhcmEgbWFpcyBkZXRhbGhlcywgcG9yIGZhdm9yIHZpc2l0ZSBhIGRvY3VtZW50YcOnw6NvXCIsXG4gICAgY29uZGl0aW9uU2hvd01vcmVVcmw6XG4gICAgICBcImh0dHBzOi8vc3VydmV5anMuaW8vRG9jdW1lbnRhdGlvbi9MaWJyYXJ5UGFyYW1ldGVyP2lkPVF1ZXN0aW9uJnBhcmFtZXRlcj12aXNpYmxlSWZcIixcbiAgICBhc3Npc3RhbnRUaXRsZTogXCJQZXJndW50YXMgZGlzcG9uw612ZWlzOlwiLFxuICAgIGNlbGxzRW1wdHlSb3dzQ29sdW1uczogXCJEZXZlIGhhdmVyIGFvIG1lbm9zIHVtYSBjb2x1bmEgb3UgbGluaGFcIixcblxuICAgIHByb3BlcnR5SXNFbXB0eTogXCJQb3IgZmF2b3IgaW5mb3JtZSB1bSB2YWxvciBuYSBwcm9wcmllZGFkZVwiLFxuICAgIHZhbHVlOiBcIlZhbG9yXCIsXG4gICAgdGV4dDogXCJUZXh0b1wiLFxuICAgIHJvd2lkOiBcIklEIGRhIExpbmhhXCIsXG4gICAgaW1hZ2VMaW5rOiBcIkxpbmsgZGEgSW1hZ2VtXCIsXG4gICAgY29sdW1uRWRpdDogXCJFZGl0YXIgY29sdW5hOiB7MH1cIixcbiAgICBpdGVtRWRpdDogXCJFZGl0YXIgaXRlbTogezB9XCIsXG5cbiAgICB1cmw6IFwiVVJMXCIsXG4gICAgcGF0aDogXCJDYW1pbmhvXCIsXG4gICAgdmFsdWVOYW1lOiBcIk5vbWUgZG8gdmFsb3JcIixcbiAgICB0aXRsZU5hbWU6IFwiTm9tZSBkbyB0w610dWxvXCIsXG5cbiAgICBoYXNPdGhlcjogXCJUZW0gaXRlbSAnb3V0cm9zJ1wiLFxuICAgIG90aGVyVGV4dDogXCJUZXh0byBkbyBpdGVtICdvdXRyb3MnXCIsXG4gICAgbmFtZTogXCJOb21lXCIsXG4gICAgdGl0bGU6IFwiVMOtdHVsb1wiLFxuICAgIGNlbGxUeXBlOiBcIlRpcG8gZGUgY8OpbHVsYVwiLFxuICAgIGNvbENvdW50OiBcIkNvbnRhZ2VtIGRlIGPDqWx1bGFzXCIsXG4gICAgY2hvaWNlc09yZGVyOiBcIlNlbGVjaW9uZSBhIG9yZGVtIGRhcyBhbHRlcm5hdGl2YXNcIixcbiAgICB2aXNpYmxlOiBcIsOJIHZpc8OtdmVsP1wiLFxuICAgIGlzUmVxdWlyZWQ6IFwiw4kgb2JyaWdhdMOzcmlvP1wiLFxuICAgIHN0YXJ0V2l0aE5ld0xpbmU6IFwiQ29tZcOnYSBjb20gdW1hIG5vdmEgbGluaGE/XCIsXG4gICAgcm93czogXCJDb250YWdlbSBkZSBsaW5oYXNcIixcbiAgICBwbGFjZUhvbGRlcjogXCJUZXh0byBkZSByZWZlcsOqbmNpYVwiLFxuICAgIHNob3dQcmV2aWV3OiBcIk1vc3RyYSBwcsOpLXZpc3VhbGl6YcOnw6NvIGRlIGltYWdlbT9cIixcbiAgICBzdG9yZURhdGFBc1RleHQ6IFwiR3JhdmFyIGNvbnRlw7pkbyBkZSBhcnF1aXZvIG5vIHJlc3VsdGFkbyBKU09OIGNvbW8gdGV4dG9cIixcbiAgICBtYXhTaXplOiBcIlRhbWFuaG8gbcOheGltbyBkZSBhcnF1aXZvIGVtIGJ5dGVzXCIsXG4gICAgaW1hZ2VIZWlnaHQ6IFwiQWx0dXJhIGRhIGltYWdlbVwiLFxuICAgIGltYWdlV2lkdGg6IFwiTGFyZ3VyYSBkYSBpbWFnZW1cIixcbiAgICByb3dDb3VudDogXCJDb250YWdlbSBkZSBsaW5oYXNcIixcbiAgICBjb2x1bW5MYXlvdXQ6IFwiTGF5b3V0IGRhcyBjb2x1bmFzXCIsXG4gICAgYWRkUm93TG9jYXRpb246IFwiTG9jYWxpemHDp8OjbyBkbyBib3TDo28gZGUgYWRpY2lvbmFyIGxpbmhhXCIsXG4gICAgYWRkUm93VGV4dDogXCJUZXh0byBkbyBib3TDo28gcGFyYSBhZGljaW9uYXIgbGluaGFzXCIsXG4gICAgcmVtb3ZlUm93VGV4dDogXCJUZXh0byBkbyBib3TDo28gcGFyYSByZW1vdmVyIGxpbmhhc1wiLFxuICAgIG1pblJhdGVEZXNjcmlwdGlvbjogXCJEZXNjcmnDp8OjbyBkZSBxdWFsaWZpY2HDp8OjbyBtw61uaW1hXCIsXG4gICAgbWF4UmF0ZURlc2NyaXB0aW9uOiBcIkRlc2NyacOnw6NvIGRlIHF1YWxpZmljYcOnw6NvIG3DoXhpbWFcIixcbiAgICBpbnB1dFR5cGU6IFwiVGlwbyBkZSBlbnRyYWRhXCIsXG4gICAgb3B0aW9uc0NhcHRpb246IFwiVMOtdHVsbyBkZSBvcMOnw6NvXCIsXG4gICAgZGVmYXVsdFZhbHVlOiBcIlZhbG9yIGRlZmF1bHRcIixcbiAgICBjZWxsc0RlZmF1bHRSb3c6IFwiVGV4dG8gZGVmYXVsdCBkYXMgY8OpbHVsYXNcIixcblxuICAgIHN1cnZleUVkaXRvclRpdGxlOiBcIkVkaXRhciBjb25maWd1cmHDp8O1ZXMgZGEgcGVzcXVpc2FcIixcbiAgICBxRWRpdG9yVGl0bGU6IFwiRWRpdGFyIHBlcmd1bnRhOiB7MH1cIixcblxuICAgIG1heExlbmd0aDogXCJUYW1hbmhvIG3DoXhpbW9cIixcblxuICAgIC8vc3VydmV5XG4gICAgc2hvd1RpdGxlOiBcIk1vc3RyYXIvb2N1bHRhciB0w610dWxvXCIsXG4gICAgbG9jYWxlOiBcIklkaW9tYSBkZWZhdWx0XCIsXG4gICAgbW9kZTogXCJNb2RvIChlZGl0w6F2ZWwvc29tZW50ZSBsZWl0dXJhKVwiLFxuICAgIGNsZWFySW52aXNpYmxlVmFsdWVzOiBcIkxpbXBhciB2YWxvcmVzIGludmlzw612ZWlzXCIsXG4gICAgY29va2llTmFtZTogXCJOb21lIGRvIGNvb2tpZSAocGFyYSBkZXNhdGl2YXIgcm9kZSBhIHBlc3F1aXNhIGR1YXMgdmV6ZXMgbG9jYWxtZW50ZSlcIixcbiAgICBzZW5kUmVzdWx0T25QYWdlTmV4dDogXCJFbnZpYXIgcmVzdWx0YWRvIGRhIHBlc3F1aXNhIG5hIHDDoWdpbmEgc2VndWludGVcIixcbiAgICBzdG9yZU90aGVyc0FzQ29tbWVudDogXCJBcm1hemVuYXIgJ291dHJvcycgdmFsb3JlcyBlbSB1bSBjYW1wbyBzZXBhcmFkb1wiLFxuICAgIHNob3dQYWdlVGl0bGVzOiBcIk1vc3RyYXIgdMOtdHVsbyBkYSBww6FnaW5hXCIsXG4gICAgc2hvd1BhZ2VOdW1iZXJzOiBcIk1vc3RyYXIgbsO6bWVybyBkYSBww6FnaW5hXCIsXG4gICAgcGFnZVByZXZUZXh0OiBcIlRleHRvIHBhcmEgYm90w6NvIGRlIHDDoWdpbmEgYW50ZXJpb3JcIixcbiAgICBwYWdlTmV4dFRleHQ6IFwiVGV4dG8gcGFyYSBib3TDo28gZGUgcMOhZ2luYSBzZWd1aW50ZVwiLFxuICAgIGNvbXBsZXRlVGV4dDogXCJUZXh0byBwYXJhIGJvdMOjbyBkZSBjb21wbGV0YXJcIixcbiAgICBzdGFydFN1cnZleVRleHQ6IFwiVGV4dG8gcGFyYSBib3TDo28gZGUgY29tZcOnYXJcIixcbiAgICBzaG93TmF2aWdhdGlvbkJ1dHRvbnM6IFwiTW9zdHJhciBib3TDtWVzIGRlIG5hdmVnYcOnw6NvIChuYXZlZ2HDp8OjbyBkZWZhdWx0KVwiLFxuICAgIHNob3dQcmV2QnV0dG9uOiBcIk1vc3RyYXIgYm90w6NvIGRlIHZvbHRhciAodXN1w6FyaW8gcG9kZSByZXRvcm5hciBwYXJhIHDDoWdpbmEgYW50ZXJpb3IpXCIsXG4gICAgZmlyc3RQYWdlSXNTdGFydGVkOiBcIlByaW1laXJhIHDDoWdpbmEgZGEgcGVzcXVpc2Egw6kgYSBww6FnaW5hIGRlIGluw61jaW8uXCIsXG4gICAgc2hvd0NvbXBsZXRlZFBhZ2U6IFwiTW9zdHJhciBhIHDDoWdpbmEgZGUgY29uY2x1c8OjbyBubyBmaW5hbCAoY29tcGxldGVkSHRtbClcIixcbiAgICBnb05leHRQYWdlQXV0b21hdGljOlxuICAgICAgXCJBbyByZXNwb25kZXIgdG9kYXMgYXMgcGVyZ3VudGFzLCBpciBhdXRvbWF0aWNhbWVudGUgcGFyYSBhIHByw7N4aW1hIHDDoWdpbmFcIixcbiAgICBzaG93UHJvZ3Jlc3NCYXI6IFwiTW9zdHJhciBiYXJyYSBkZSBwcm9ncmVzc29cIixcbiAgICBxdWVzdGlvblRpdGxlTG9jYXRpb246IFwiTG9jYWxpemHDp8OjbyBkbyB0w610dWxvIGRhIHBlcmd1bnRhXCIsXG4gICAgcmVxdWlyZWRUZXh0OiBcIlPDrW1ib2xvKHMpIHBhcmEgcGVyZ3VudGFzIG9icmlnYXTDs3JpYXNcIixcbiAgICBxdWVzdGlvblN0YXJ0SW5kZXg6IFwiSW5kZXggZGFzIHBlcmd1bnRhcyAoMSwgMiBvciAnQScsICdhJylcIixcbiAgICBzaG93UXVlc3Rpb25OdW1iZXJzOiBcIk1vc3RyYXIgbsO6bWVybyBkYXMgcGVyZ3VudGFzXCIsXG4gICAgcXVlc3Rpb25UaXRsZVRlbXBsYXRlOlxuICAgICAgXCJUZW1wbGF0ZSBkbyB0w610dWxvIGRhIHBlcmd1bnRhLCBkZWZhdWx0IMOpOiAne25vfS4ge29icmlnYXTDs3Jpb30ge3TDrXR1bG99J1wiLFxuICAgIHF1ZXN0aW9uRXJyb3JMb2NhdGlvbjogXCJMb2NhbGl6YcOnw6NvIGRvIGVycm8gZGEgcGVyZ3VudGFcIixcbiAgICBmb2N1c0ZpcnN0UXVlc3Rpb25BdXRvbWF0aWM6IFwiRm9jYXIgYXV0b21hdGljYW1lbnRlIG5hIHByaW1laXJhIHBlcmd1bnRhIGFvIHRyb2NhciBkZSBww6FnaW5hXCIsXG4gICAgcXVlc3Rpb25zT3JkZXI6IFwiT3JkZW5hciBlbGVtZW50b3MgbmEgcMOhZ2luYVwiLFxuICAgIG1heFRpbWVUb0ZpbmlzaDogXCJUZW1wbyBtw6F4aW1vIHBhcmEgZmluYWxpemFyIHBlc3F1aXNhXCIsXG4gICAgbWF4VGltZVRvRmluaXNoUGFnZTogXCJUZW1wbyBtw6F4aW1vIHBhcmEgZmluYWxpemFyIHDDoWdpbmEgZGEgcGVzcXVpc2FcIixcbiAgICBzaG93VGltZXJQYW5lbDogXCJNb3N0cmFyIG8gcGFpbmVsIGRlIGNyb27DtG1ldHJvXCIsXG4gICAgc2hvd1RpbWVyUGFuZWxNb2RlOiBcIk1vc3RyYXIgcGFpbmVsIGRlIG1vZG8gZGUgY3JvbsO0bWV0cm9cIixcbiAgICByZW5kZXJNb2RlOiBcIk1vZG8gZGUgcmVuZGVyaXphw6fDo29cIixcbiAgICBhbGxvd0FkZFBhbmVsOiBcIlBlcm1pdGlyIGFkaWNpb25hciBwYWluZWxcIixcbiAgICBhbGxvd1JlbW92ZVBhbmVsOiBcIlBlcm1pdGlyIHJlbW92ZXIgcGFpbmVsXCIsXG4gICAgcGFuZWxBZGRUZXh0OiBcIlRleHRvIGRlIGFkaWNpb25hciBwYWluZWxcIixcbiAgICBwYW5lbFJlbW92ZVRleHQ6IFwiVGV4dG8gZGUgcmVtb3ZlciBwYWluZWxcIixcbiAgICBpc1NpbmdsZVBhZ2U6IFwiTW9zdHJhciB0b2RvcyBlbGVtZW50b3MgZW0gdW1hIHDDoWdpbmFcIixcblxuICAgIHRhYnM6IHtcbiAgICAgIGdlbmVyYWw6IFwiR2VyYWxcIixcbiAgICAgIGZpbGVPcHRpb25zOiBcIk9ww6fDtWVzXCIsXG4gICAgICBodG1sOiBcIkVkaXRvciBIdG1sXCIsXG4gICAgICBjb2x1bW5zOiBcIkNvbHVuYXNcIixcbiAgICAgIHJvd3M6IFwiTGluaGFzXCIsXG4gICAgICBjaG9pY2VzOiBcIk9ww6fDtWVzXCIsXG4gICAgICBpdGVtczogXCJJdGVuc1wiLFxuICAgICAgdmlzaWJsZUlmOiBcIlZpc8OtdmVsIHNlXCIsXG4gICAgICBlbmFibGVJZjogXCJIYWJpbGl0YXIgc2VcIixcbiAgICAgIHJlcXVpcmVkSWY6IFwiT2JyaWdhdMOzcmlvIHNlXCIsXG4gICAgICByYXRlVmFsdWVzOiBcIlZhbG9yZXMgZGUgcXVhbGlmaWNhw6fDo29cIixcbiAgICAgIGNob2ljZXNCeVVybDogXCJPcMOnw7VlcyBjb20gb3JpZ2VtIG5hIFdlYlwiLFxuICAgICAgbWF0cml4Q2hvaWNlczogXCJPcMOnw7VlcyBwYWRyw6NvXCIsXG4gICAgICBtdWx0aXBsZVRleHRJdGVtczogXCJFbnRyYWRhcyBkZSB0ZXh0b1wiLFxuICAgICAgdmFsaWRhdG9yczogXCJWYWxpZGFkb3Jlc1wiLFxuICAgICAgbmF2aWdhdGlvbjogXCJOYXZlZ2HDp8Ojb1wiLFxuICAgICAgcXVlc3Rpb246IFwiUGVyZ3VudGFcIixcbiAgICAgIGNvbXBsZXRlZEh0bWw6IFwiQ29tcGxldG8gSHRtbFwiLFxuICAgICAgbG9hZGluZ0h0bWw6IFwiQ2FycmVnYW5kbyBIdG1sXCIsXG4gICAgICB0aW1lcjogXCJDcm9uw7RtZXRyby9RdWl6XCIsXG4gICAgICB0cmlnZ2VyczogXCJUcmlnZ2Vyc1wiLFxuICAgICAgdGVtcGxhdGVUaXRsZTogXCJUw610dWxvIGRvIHRlbXBsYXRlXCJcbiAgICB9LFxuICAgIGVkaXRQcm9wZXJ0eTogXCJFZGl0YXIgcHJvcHJpZWRhZGUgJ3swfSdcIixcbiAgICBpdGVtczogXCJbIEl0ZW1zOiB7MH0gXVwiLFxuXG4gICAgZW50ZXJOZXdWYWx1ZTogXCJQb3IgZmF2b3IsIGluZm9ybWUgbyB2YWxvci5cIixcbiAgICBub3F1ZXN0aW9uczogXCJOw6NvIGjDoSBuZW5odW1hIHBlcmd1bnRhIG5hIHBlc3F1aXNhLlwiLFxuICAgIGNyZWF0ZXRyaWdnZXI6IFwiUG9yIGZhdm9yLCBjcmllIHVtIGdhdGlsaG9cIixcbiAgICB0cmlnZ2VyT246IFwiTGlnYWRvIFwiLFxuICAgIHRyaWdnZXJNYWtlUGFnZXNWaXNpYmxlOiBcIlRvcm5hciBww6FnaW5hcyB2aXPDrXZlaXM6XCIsXG4gICAgdHJpZ2dlck1ha2VRdWVzdGlvbnNWaXNpYmxlOiBcIlRvcm5hciBwZXJndW50YXMgdmlzw612ZXM6XCIsXG4gICAgdHJpZ2dlckNvbXBsZXRlVGV4dDogXCJDb21wbGV0YXIgYSBwZXNxdWlzYSBzZSBvYnRpdmVyIMOqeGl0by5cIixcbiAgICB0cmlnZ2VyTm90U2V0OiBcIk8gZ2F0aWxobyBuw6NvIGVzdMOhIGRlZmluaWRvXCIsXG4gICAgdHJpZ2dlclJ1bklmOiBcIkV4ZWN1dGFyIHNlXCIsXG4gICAgdHJpZ2dlclNldFRvTmFtZTogXCJNdWRhciBvIHZhbG9yIGRlOiBcIixcbiAgICB0cmlnZ2VyRnJvbU5hbWU6IFwiQ29waWFyIHZhbG9yIGRlOiBcIixcbiAgICB0cmlnZ2VyUnVuRXhwcmVzc2lvbjogXCJSb2RhciBlc3NhIGV4cHJlc3PDo286XCIsXG4gICAgdHJpZ2dlclNldFZhbHVlOiBcInBhcmE6IFwiLFxuICAgIHRyaWdnZXJJc1ZhcmlhYmxlOiBcIk7Do28gY29sb2NhciBhIHZhcmnDoXZlbCBubyByZXN1bHRhZG8gZGEgcGVzcXVpc2EuXCJcbiAgfSxcbiAgLy9Qcm9wZXJ0eSB2YWx1ZXNcbiAgcHY6IHtcbiAgICB0cnVlOiBcInZlcmRhZGVpcm9cIixcbiAgICBmYWxzZTogXCJmYWxzb1wiLFxuICAgIGluaGVyaXQ6IFwiaW5oZXJpdFwiLFxuICAgIHNob3c6IFwibW9zdHJhclwiLFxuICAgIGhpZGU6IFwib2N1bHRhclwiLFxuICAgIGRlZmF1bHQ6IFwiZGVmYXVsdFwiLFxuICAgIGluaXRpYWw6IFwiaW5pY2lhbFwiLFxuICAgIHJhbmRvbTogXCJhbGVhdMOzcmlvXCIsXG4gICAgY29sbGFwc2VkOiBcImNvbGFwc2Fkb1wiLFxuICAgIGV4cGFuZGVkOiBcImV4cGFuZGlkb1wiLFxuICAgIG5vbmU6IFwibmVuaHVtXCIsXG4gICAgYXNjOiBcImFzY2VuZGVudGVcIixcbiAgICBkZXNjOiBcImRlc2NlbmRlbnRlXCIsXG4gICAgaW5kZXRlcm1pbmF0ZTogXCJpbmRldGVybWluYWRvXCIsXG4gICAgZGVjaW1hbDogXCJkZWNpbWFsXCIsXG4gICAgY3VycmVuY3k6IFwibW9lZGFcIixcbiAgICBwZXJjZW50OiBcInBlcmNlbnRhZ2VtXCIsXG4gICAgZmlyc3RFeHBhbmRlZDogXCJwcmltZWlybyBleHBhbmRpZG9cIixcbiAgICBvZmY6IFwiZGVzbGlnYWRvXCIsXG4gICAgb25QYW5lbDogXCJubyBwYWluZWxcIixcbiAgICBvblN1cnZleTogXCJuYSBwZXNxdWlzYVwiLFxuICAgIGxpc3Q6IFwibGlzdGFcIixcbiAgICBwcm9ncmVzc1RvcDogXCJwcm9ncmVzc28gc3VwZXJpb3JcIixcbiAgICBwcm9ncmVzc0JvdHRvbTogXCJwcm9ncmVzc28gaW5mZXJpb3JcIixcbiAgICBwcm9ncmVzc1RvcEJvdHRvbTogXCJwcm9ncmVzc28gc3VwZXJpb3IgaW5mZXJpb3JcIixcbiAgICBob3Jpem9udGFsOiBcImhvcml6b250YWxcIixcbiAgICB2ZXJ0aWNhbDogXCJ2ZXJ0aWNhbFwiLFxuICAgIHRvcDogXCJzdXBlcmlvclwiLFxuICAgIGJvdHRvbTogXCJpbmZlcmlvclwiLFxuICAgIHRvcEJvdHRvbTogXCJzdXBlcmlvciBhbmQgYm90dG9tXCIsXG4gICAgbGVmdDogXCJlc3F1ZXJkYVwiLFxuICAgIGNvbG9yOiBcImNvclwiLFxuICAgIGRhdGU6IFwiZGF0YVwiLFxuICAgIGRhdGV0aW1lOiBcImRhdGEgZSBob3JhXCIsXG4gICAgXCJkYXRldGltZS1sb2NhbFwiOiBcImRhdGEgZSBob3JhIC0gbG9jYWxcIixcbiAgICBlbWFpbDogXCJlbWFpbFwiLFxuICAgIG1vbnRoOiBcIm3DqnNcIixcbiAgICBudW1iZXI6IFwibsO6bWVyb1wiLFxuICAgIHBhc3N3b3JkOiBcInNlbmhhXCIsXG4gICAgcmFuZ2U6IFwiaW50ZXJ2YWxvXCIsXG4gICAgdGVsOiBcInRlbFwiLFxuICAgIHRleHQ6IFwidGV4dG9cIixcbiAgICB0aW1lOiBcImhvcmFcIixcbiAgICB1cmw6IFwidXJsXCIsXG4gICAgd2VlazogXCJzZW1hbmFcIixcbiAgICBoaWRkZW46IFwib2N1bHRvXCIsXG4gICAgb246IFwibGlnYWRvXCIsXG4gICAgb25QYWdlOiBcIm5hIHDDoWdpbmFcIixcbiAgICBlZGl0OiBcImVkaXRhclwiLFxuICAgIGRpc3BsYXk6IFwibW9zdHJhclwiLFxuICAgIG9uQ29tcGxldGU6IFwiYW8gY29tcGxldGFyXCIsXG4gICAgb25IaWRkZW46IFwiYW8gb2N1bHRhclwiLFxuICAgIGFsbDogXCJ0b2Rvc1wiLFxuICAgIHBhZ2U6IFwicMOhZ2luYVwiLFxuICAgIHN1cnZleTogXCJwZXNxdWlzYVwiLFxuICAgIG9uTmV4dFBhZ2U6IFwibmEgcMOhZ2luYSBzZWd1aW50ZVwiLFxuICAgIG9uVmFsdWVDaGFuZ2VkOiBcImFvIG11ZGFyIHZhbG9yXCJcbiAgfSxcbiAgLy9PcGVyYXRvcnNcbiAgb3A6IHtcbiAgICBlbXB0eTogXCJlc3TDoSB2YXppb1wiLFxuICAgIG5vdGVtcHR5OiBcIm7Do28gZXN0w6EgdmF6aW9cIixcbiAgICBlcXVhbDogXCLDqSBpZ3VhbFwiLFxuICAgIG5vdGVxdWFsOiBcIm7Do28gw6kgaWd1YWxcIixcbiAgICBjb250YWluczogXCJjb250w6ltXCIsXG4gICAgbm90Y29udGFpbnM6IFwibsOjbyBjb250w6ltXCIsXG4gICAgZ3JlYXRlcjogXCJtYWlvclwiLFxuICAgIGxlc3M6IFwibWVub3JcIixcbiAgICBncmVhdGVyb3JlcXVhbDogXCJtYWlvciBvdSBpZ3VhbFwiLFxuICAgIGxlc3NvcmVxdWFsOiBcIm1lbm9yIG91IGlndWFsXCJcbiAgfSxcbiAgLy9FbWJlZCB3aW5kb3dcbiAgZXc6IHtcbiAgICBhbmd1bGFyOiBcIlVzYXIgdmVyc8OjbyBBbmd1bGFyXCIsXG4gICAganF1ZXJ5OiBcIlVzYXIgdmVyc8OjbyBqUXVlcnlcIixcbiAgICBrbm9ja291dDogXCJVc2FyIHZlcnPDo28gS25vY2tvdXRcIixcbiAgICByZWFjdDogXCJVc2FyIHZlcnPDo28gUmVhY3RcIixcbiAgICB2dWU6IFwiVXNhciB2ZXJzw6NvIFZ1ZVwiLFxuICAgIGJvb3RzdHJhcDogXCJQYXJhIGZyYW1ld29yayBib290c3RyYXBcIixcbiAgICBzdGFuZGFyZDogXCJTZW0gYm9vdHN0cmFwXCIsXG4gICAgc2hvd09uUGFnZTogXCJNb3N0cmFyIHBlc3F1aXNhIGVtIHVtYSBww6FnaW5hXCIsXG4gICAgc2hvd0luV2luZG93OiBcIk1vc3RyYXIgcGVzcXVpc2EgZW0gdW1hIGphbmVsYVwiLFxuICAgIGxvYWRGcm9tU2VydmVyOiBcIkNhcnJlZ2FyIEpTT04gZGEgcGVzcXVpc2EgZGUgdW0gc2Vydmlkb3JcIixcbiAgICB0aXRsZVNjcmlwdDogXCJTY3JpcHRzIGUgZXN0aWxvc1wiLFxuICAgIHRpdGxlSHRtbDogXCJIVE1MXCIsXG4gICAgdGl0bGVKYXZhU2NyaXB0OiBcIkphdmFTY3JpcHRcIlxuICB9LFxuICAvL1Rlc3QgU3VydmV5XG4gIHRzOiB7XG4gICAgc2VsZWN0UGFnZTogXCJTZWxlY2lvbmUgYSBww6FnaW5hIHBhcmEgdGVzdGFyOlwiLFxuICAgIHNob3dJbnZpc2libGVFbGVtZW50czogXCJNb3N0cmFyIGVsZW1lbnRvcyBpbnZpc8OtdmVpc1wiXG4gIH0sXG4gIHZhbGlkYXRvcnM6IHtcbiAgICBhbnN3ZXJjb3VudHZhbGlkYXRvcjogXCJjb250YWRvciBkZSByZXNwb3N0YXNcIixcbiAgICBlbWFpbHZhbGlkYXRvcjogXCJlLW1haWxcIixcbiAgICBleHByZXNzaW9udmFsaWRhdG9yOiBcImV4cHJlc3PDo29cIixcbiAgICBudW1lcmljdmFsaWRhdG9yOiBcIm51bcOpcmljb1wiLFxuICAgIHJlZ2V4dmFsaWRhdG9yOiBcInJlZ2V4XCIsXG4gICAgdGV4dHZhbGlkYXRvcjogXCJ0ZXh0b1wiXG4gIH0sXG4gIHRyaWdnZXJzOiB7XG4gICAgY29tcGxldGV0cmlnZ2VyOiBcImNvbXBsZXRhciBwZXNxdWlzYVwiLFxuICAgIHNldHZhbHVldHJpZ2dlcjogXCJkZWZpbmlyIHZhbG9yXCIsXG4gICAgY29weXZhbHVldHJpZ2dlcjogXCJjb3BpYXIgdmFsb3JcIixcbiAgICBydW5leHByZXNzaW9udHJpZ2dlcjogXCJyb2RhciBleHByZXNzw6NvXCIsXG4gICAgdmlzaWJsZXRyaWdnZXI6IFwiYWx0ZXJhciB2aXNpYmlsaWRhZGVcIlxuICB9LFxuICAvL1Byb3BlcnRpZXNcbiAgcDoge1xuICAgIG5hbWU6IFwibm9tZVwiLFxuICAgIHRpdGxlOiB7XG4gICAgICBuYW1lOiBcInTDrXR1bG9cIixcbiAgICAgIHRpdGxlOiBcIkRlaXhhciB2YXppbyBzZSBmb3IgbyBtZXNtbyBxdWUgJ05vbWUnXCJcbiAgICB9LFxuXG4gICAgbmF2aWdhdGlvbkJ1dHRvbnNWaXNpYmlsaXR5OiBcIlZpc2liaWxpZGFkZSBkb3MgYm90w7VlcyBkZSBuYXZlZ2HDp8Ojb1wiLFxuICAgIHF1ZXN0aW9uc09yZGVyOiBcIk9yZGVuYXIgZWxlbWVudG9zIG5hIHDDoWdpbmFcIixcbiAgICBtYXhUaW1lVG9GaW5pc2g6IFwiVGVtcG8gbcOheGltbyBwYXJhIGZpbmFsaXphciBwZXNxdWlzYVwiLFxuXG4gICAgdmlzaWJsZTogXCJWaXPDrXZlbD9cIixcbiAgICB2aXNpYmxlSWY6IFwiVmlzw612ZWwgc2VcIixcbiAgICBxdWVzdGlvblRpdGxlTG9jYXRpb246IFwiTG9jYWxpemHDp8OjbyBkbyB0w610dWxvIGRhIHBlcmd1bnRhXCIsXG4gICAgZGVzY3JpcHRpb246IFwiRGVzY3Jpw6fDo29cIixcbiAgICBzdGF0ZTogXCJFc3RhZG9cIixcbiAgICBpc1JlcXVpcmVkOiBcIk9icmlnYXTDs3Jpbz9cIixcbiAgICByZXF1aXJlZElmOiBcIk9icmlnYXTDs3JpbyBzZVwiLFxuICAgIGluZGVudDogXCJJbmRlbnRhw6fDo29cIixcbiAgICByZXF1aXJlZEVycm9yVGV4dDogXCJUZXh0byBkZSBlcnJvIHBhcmEgb2JyaWdhdMOzcmlvXCIsXG4gICAgc3RhcnRXaXRoTmV3TGluZTogXCJDb21lw6dhciBjb20gdW1hIG5vdmEgbGluaGFcIixcbiAgICBpbm5lckluZGVudDogXCJJbmRlbnRhw6fDo28gaW50ZXJuYVwiLFxuICAgIHBhZ2U6IFwiUMOhZ2luYVwiLFxuXG4gICAgd2lkdGg6IFwiTGFyZ3VyYVwiLFxuXG4gICAgY29tbWVudFRleHQ6IFwiVGV4dG8gZG8gY29tZW50w6FyaW9cIixcbiAgICB2YWx1ZU5hbWU6IFwiTm9tZSBkbyB2YWxvclwiLFxuICAgIGVuYWJsZUlmOiBcIkhhYmlsaXRhciBzZVwiLFxuICAgIGRlZmF1bHRWYWx1ZTogXCJWYWxvciBkZWZhdWx0XCIsXG4gICAgY29ycmVjdEFuc3dlcjogXCJSZXNwb3N0YSBjb3JyZXRhXCIsXG4gICAgcmVhZE9ubHk6IFwiU29tZW50ZSBsZWl0dXJhXCIsXG4gICAgdmFsaWRhdG9yczogXCJWYWxpZGFkb3Jlc1wiLFxuICAgIHRpdGxlTG9jYXRpb246IFwiTG9jYWxpemHDp8OjbyBkbyB0w610dWxvXCIsXG5cbiAgICBoYXNDb21tZW50OiBcIlRlbSBjb21lbnTDoXJpb1wiLFxuICAgIGhhc090aGVyOiBcIlRlbSBpdGVtICdvdXRyb3MnXCIsXG4gICAgY2hvaWNlczogXCJPcMOnw7Vlc1wiLFxuICAgIGNob2ljZXNPcmRlcjogXCJTZWxlY2lvbmUgYSBvcmRlbSBkYXMgYWx0ZXJuYXRpdmFzXCIsXG4gICAgY2hvaWNlc0J5VXJsOiBcIk9ww6fDtWVzIGNvbSBvcmlnZW0gbmEgV2ViXCIsXG4gICAgb3RoZXJUZXh0OiBcIlRleHRvIGRvIGl0ZW0gJ291dHJvcydcIixcbiAgICBvdGhlckVycm9yVGV4dDogXCJUZXh0byBkZSBlcnJvIGRhIG9ww6fDo28gJ291dHJvcydcIixcbiAgICBzdG9yZU90aGVyc0FzQ29tbWVudDogXCJBcm1hemVuYXIgJ291dHJvcycgdmFsb3JlcyBlbSB1bSBjYW1wbyBzZXBhcmFkb1wiLFxuXG4gICAgbGFiZWw6IFwiTGFiZWxcIixcbiAgICBzaG93VGl0bGU6IFwiTW9zdHJhciB0w610dWxvXCIsXG4gICAgdmFsdWVUcnVlOiBcIlZhbG9yIHZlcmRhZGVpcm9cIixcbiAgICB2YWx1ZUZhbHNlOiBcIlZhbG9yIGZhbHNvXCIsXG5cbiAgICBjb2xzOiBcIkNvbHVuYXNcIixcbiAgICByb3dzOiBcIkxpbmhhc1wiLFxuICAgIHBsYWNlSG9sZGVyOiBcInBsYWNlaG9sZGVyXCIsXG5cbiAgICBvcHRpb25zQ2FwdGlvbjogXCJUw610dWxvIGRhcyBvcMOnw7Vlc1wiLFxuXG4gICAgZXhwcmVzc2lvbjogXCJFeHByZXNzw6NvXCIsXG4gICAgZm9ybWF0OiBcIkZvcm1hdG9cIixcbiAgICBkaXNwbGF5U3R5bGU6IFwiTW9zdHJhciBlc3RpbG9cIixcbiAgICBjdXJyZW5jeTogXCJNb2VkYVwiLFxuICAgIHVzZUdyb3VwaW5nOiBcIlVzYXIgYWdydXBhbWVudG9cIixcblxuICAgIHNob3dQcmV2aWV3OiBcIk1vc3RyYXIgcHJldmlld1wiLFxuICAgIGFsbG93TXVsdGlwbGU6IFwiUGVybWl0aXIgbcO6bHRpcGxvc1wiLFxuICAgIGltYWdlSGVpZ2h0OiBcIkFsdHVyYSBkYSBpbWFnZW1cIixcbiAgICBpbWFnZVdpZHRoOiBcIkxhcmd1cmEgZGEgaW1hZ2VtXCIsXG4gICAgc3RvcmVEYXRhQXNUZXh0OiBcIkFybWF6ZW5hciBkYWRvcyBjb21vIHRleHRvXCIsXG4gICAgbWF4U2l6ZTogXCJUYW1hbmhvIG3DoXhpbW9cIixcblxuICAgIGh0bWw6IFwiaHRtbFwiLFxuXG4gICAgY29sdW1uczogXCJDb2x1bmFzXCIsXG4gICAgY2VsbHM6IFwiQ8OpbHVsYXNcIixcbiAgICBpc0FsbFJvd1JlcXVpcmVkOiBcIlRvZGFzIGxpbmhhcyBzw6NvIG9icmlnYXTDs3JpYXNcIixcblxuICAgIGhvcml6b250YWxTY3JvbGw6IFwiU2Nyb2xsIGhvcml6b250YWxcIixcbiAgICBjZWxsVHlwZTogXCJUaXBvIGRlIGPDqWx1bGFcIixcbiAgICBjb2x1bW5zTGF5b3V0OiBcIkxheW91dCBkZSBjb2x1bmFzXCIsXG4gICAgY29sdW1uQ29sQ291bnQ6IFwiQ29udGFkb3IgZGUgY8OpbHVsYXMgZGUgY29sdW5hXCIsXG4gICAgY29sdW1uTWluV2lkdGg6IFwiTGFyZ3VyYSBtw61uaW1hIGRhIGNvbHVuYVwiLFxuXG4gICAgcm93Q291bnQ6IFwiQ29udGFnZW0gZGUgbGluaGFzXCIsXG4gICAgbWluUm93Q291bnQ6IFwiQ29udGFnZW0gZGUgbGluaGFzIG3DrW5pbWFcIixcbiAgICBtYXhSb3dDb3VudDogXCJDb250YWdlbSBkZSBsaW5oYXMgbcOheGltYVwiLFxuICAgIGtleU5hbWU6IFwiTm9tZSBkYSBjaGF2ZVwiLFxuICAgIGtleUR1cGxpY2F0aW9uRXJyb3I6IFwiRXJybyBkZSBjaGF2ZSBkdXBsaWNhZGFcIixcbiAgICBjb25maXJtRGVsZXRlOiBcIkNvbmZpcm1hciBkZWxlw6fDo29cIixcbiAgICBjb25maXJtRGVsZXRlVGV4dDogXCJUZXh0byBkZSBjb25maXJtYXIgZGVsZcOnw6NvXCIsXG4gICAgYWRkUm93TG9jYXRpb246IFwiTG9jYWxpemHDp8OjbyBkbyBib3TDo28gZGUgYWRpY2lvbmFyIGxpbmhhXCIsXG4gICAgYWRkUm93VGV4dDogXCJUZXh0byBkbyBib3TDo28gcGFyYSBhZGljaW9uYXIgbGluaGFzXCIsXG4gICAgcmVtb3ZlUm93VGV4dDogXCJUZXh0byBkbyBib3TDo28gcGFyYSByZW1vdmVyIGxpbmhhc1wiLFxuXG4gICAgaXRlbXM6IFwiSXRlbnNcIixcbiAgICBpdGVtU2l6ZTogXCJUYW1hbmhvIGRvIGl0ZW1cIixcbiAgICBjb2xDb3VudDogXCJDb250YWdlbSBkZSBjw6lsdWxhc1wiLFxuXG4gICAgdGVtcGxhdGVUaXRsZTogXCJUw610dWxvIGRvIHRlbXBsYXRlXCIsXG4gICAgdGVtcGxhdGVEZXNjcmlwdGlvbjogXCJEZXNjcmnDp8OjbyBkbyB0ZW1wbGF0ZVwiLFxuICAgIGFsbG93QWRkUGFuZWw6IFwiUGVybWl0aXIgYWRpY2lvbmFyIHBhaW5lbFwiLFxuICAgIGFsbG93UmVtb3ZlUGFuZWw6IFwiUGVybWl0aXIgcmVtb3ZlciBwYWluZWxcIixcbiAgICBwYW5lbENvdW50OiBcIkNvbnRhZG9yIGRvIHBhaW5lbFwiLFxuICAgIG1pblBhbmVsQ291bnQ6IFwiQ29udGFkb3IgZG8gcGFpbmVsIG3DrW5pbW9cIixcbiAgICBtYXhQYW5lbENvdW50OiBcIkNvbnRhZG9yIGRvIHBhaW5lbCBtw6F4aW1vXCIsXG4gICAgcGFuZWxzU3RhdGU6IFwiRXN0YWRvIGRvcyBwYWluw6lpc1wiLFxuICAgIHBhbmVsQWRkVGV4dDogXCJUZXh0byBkZSBhZGljaW9uYXIgcGFpbmVsXCIsXG4gICAgcGFuZWxSZW1vdmVUZXh0OiBcIlRleHRvIGRlIHJlbW92ZXIgcGFpbmVsXCIsXG4gICAgcGFuZWxQcmV2VGV4dDogXCJUZXh0byBkbyBwYWluZWwgYW50ZXJpb3JcIixcbiAgICBwYW5lbE5leHRUZXh0OiBcIlRleHRvIGRvIHByw7N4aW1vIHBhaW5lbFwiLFxuICAgIHNob3dRdWVzdGlvbk51bWJlcnM6IFwiTW9zdHJhciBuw7ptZXJvIGRhcyBwZXJndW50YXNcIixcbiAgICBzaG93UmFuZ2VJblByb2dyZXNzOiBcInNob3dSYW5nZUluUHJvZ3Jlc3NcIixcbiAgICByZW5kZXJNb2RlOiBcIk1vZG8gZGUgcmVuZGVyaXphw6fDo29cIixcbiAgICB0ZW1wbGF0ZVRpdGxlTG9jYXRpb246IFwiTG9jYWxpemHDp8OjbyBkbyB0w610dWxvIGRvIHRlbXBsYXRlXCIsXG5cbiAgICByYXRlVmFsdWVzOiBcIlZhbG9yZXMgZGUgcXVhbGlmaWNhw6fDo29cIixcbiAgICByYXRlTWluOiBcIlF1YWxpZmljYcOnw6NvIG3DrW5pbWFcIixcbiAgICByYXRlTWF4OiBcIlF1YWxpZmljYcOnw6NvIG3DoXhpbWFcIixcbiAgICByYXRlU3RlcDogXCJJbmNyZW1lbnRvIGRhIHF1YWxpZmljYcOnw6NvXCIsXG4gICAgbWluUmF0ZURlc2NyaXB0aW9uOiBcIkRlc2NyacOnw6NvIGRlIHF1YWxpZmljYcOnw6NvIG3DrW5pbWFcIixcbiAgICBtYXhSYXRlRGVzY3JpcHRpb246IFwiRGVzY3Jpw6fDo28gZGUgcXVhbGlmaWNhw6fDo28gbcOheGltYVwiLFxuXG4gICAgaW5wdXRUeXBlOiBcIlRpcG8gZGUgZW50cmFkYVwiLFxuICAgIHNpemU6IFwiVGFtYW5ob1wiLFxuXG4gICAgbG9jYWxlOiBcIkxvY2FsaWRhZGVcIixcbiAgICBmb2N1c0ZpcnN0UXVlc3Rpb25BdXRvbWF0aWM6IFwiRm9jYXIgYXV0b21hdGljYW1lbnRlIG5hIHByaW1laXJhIHBlcmd1bnRhXCIsXG4gICAgY29tcGxldGVkSHRtbDogXCJDb21wbGV0byBIdG1sXCIsXG4gICAgY29tcGxldGVkQmVmb3JlSHRtbDogXCJDb21wbGV0byBIdG1sIGFudGVzXCIsXG4gICAgbG9hZGluZ0h0bWw6IFwiQ2FycmVnYW5kbyBIdG1sXCIsXG4gICAgdHJpZ2dlcnM6IFwiVHJpZ2dlcnNcIixcbiAgICBjb29raWVOYW1lOiBcIk5vbWUgZG8gY29va2llXCIsXG4gICAgc2VuZFJlc3VsdE9uUGFnZU5leHQ6IFwiRW52aWFyIHJlc3VsdGFkbyBkYSBwZXNxdWlzYSBuYSBww6FnaW5hIHNlZ3VpbnRlXCIsXG4gICAgc2hvd05hdmlnYXRpb25CdXR0b25zOiBcIk1vc3RyYXIgYm90w7VlcyBkZSBuYXZlZ2HDp8OjbyAobmF2ZWdhw6fDo28gZGVmYXVsdClcIixcbiAgICBzaG93UHJldkJ1dHRvbjogXCJNb3N0cmFyIGJvdMOjbyBkZSB2b2x0YXIgKHVzdcOhcmlvIHBvZGUgcmV0b3JuYXIgcGFyYSBww6FnaW5hIGFudGVyaW9yKVwiLFxuICAgIHNob3dQYWdlVGl0bGVzOiBcIk1vc3RyYXIgdMOtdHVsbyBkYSBww6FnaW5hXCIsXG4gICAgc2hvd0NvbXBsZXRlZFBhZ2U6IFwiTW9zdHJhciBhIHDDoWdpbmEgZGUgY29uY2x1c8OjbyBubyBmaW5hbCAoY29tcGxldGVkSHRtbClcIixcbiAgICBzaG93UGFnZU51bWJlcnM6IFwiTW9zdHJhciBuw7ptZXJvIGRhIHDDoWdpbmFcIixcbiAgICBxdWVzdGlvbkVycm9yTG9jYXRpb246IFwiTG9jYWxpemHDp8OjbyBkbyBlcnJvIGRhIHBlcmd1bnRhXCIsXG4gICAgc2hvd1Byb2dyZXNzQmFyOiBcIk1vc3RyYXIgYmFycmEgZGUgcHJvZ3Jlc3NvXCIsXG4gICAgbW9kZTogXCJNb2RvXCIsXG4gICAgZ29OZXh0UGFnZUF1dG9tYXRpYzogXCJBbyByZXNwb25kZXIgdG9kYXMgYXMgcGVyZ3VudGFzLCBpciBhdXRvbWF0aWNhbWVudGUgcGFyYSBhIHByw7N4aW1hIHDDoWdpbmFcIixcbiAgICBjaGVja0Vycm9yc01vZGU6IFwiTW9kbyBkZSB2ZXJpZmljYcOnw6NvIGRlIGVycm9zXCIsXG4gICAgY2xlYXJJbnZpc2libGVWYWx1ZXM6IFwiTGltcGFyIHZhbG9yZXMgaW52aXPDrXZlaXNcIixcbiAgICBzdGFydFN1cnZleVRleHQ6IFwiVGV4dG8gcGFyYSBib3TDo28gZGUgY29tZcOnYXJcIixcbiAgICBwYWdlUHJldlRleHQ6IFwiVGV4dG8gcGFyYSBib3TDo28gZGUgcMOhZ2luYSBhbnRlcmlvclwiLFxuICAgIHBhZ2VOZXh0VGV4dDogXCJUZXh0byBwYXJhIGJvdMOjbyBkZSBww6FnaW5hIHNlZ3VpbnRlXCIsXG4gICAgY29tcGxldGVUZXh0OiBcIlRleHRvIHBhcmEgYm90w6NvIGRlIGNvbXBsZXRhclwiLFxuICAgIHJlcXVpcmVkVGV4dDogXCJTw61tYm9sbyhzKSBwYXJhIHBlcmd1bnRhcyBvYnJpZ2F0w7NyaWFzXCIsXG4gICAgcXVlc3Rpb25TdGFydEluZGV4OiBcIkluZGV4IGRhcyBwZXJndW50YXMgKDEsIDIgb3IgJ0EnLCAnYScpXCIsXG4gICAgcXVlc3Rpb25UaXRsZVRlbXBsYXRlOiBcIlRlbXBsYXRlIGRvIHTDrXR1bG8gZGEgcGVyZ3VudGEsIGRlZmF1bHQgw6k6ICd7bm99LiB7b2JyaWdhdMOzcmlvfSB7dMOtdHVsb30nXCIsXG4gICAgZmlyc3RQYWdlSXNTdGFydGVkOiBcIlByaW1laXJhIHDDoWdpbmEgZGEgcGVzcXVpc2Egw6kgYSBww6FnaW5hIGRlIGluw61jaW8uXCIsXG4gICAgaXNTaW5nbGVQYWdlOiBcIk1vc3RyYXIgdG9kb3MgZWxlbWVudG9zIGVtIHVtYSBww6FnaW5hXCIsXG4gICAgbWF4VGltZVRvRmluaXNoUGFnZTogXCJUZW1wbyBtw6F4aW1vIHBhcmEgZmluYWxpemFyIHDDoWdpbmEgZGEgcGVzcXVpc2FcIixcbiAgICBzaG93VGltZXJQYW5lbDogXCJNb3N0cmFyIG8gcGFpbmVsIGRlIGNyb27DtG1ldHJvXCIsXG4gICAgc2hvd1RpbWVyUGFuZWxNb2RlOiBcIk1vc3RyYXIgcGFpbmVsIGRlIG1vZG8gZGUgY3JvbsO0bWV0cm9cIixcblxuICAgIGRlZmF1bHRQYW5lbFZhbHVlOiBcInZhbG9yIGRlZmF1bHQgZG8gcGFpbmVsXCIsXG4gICAgZGVmYXVsdFJvd1ZhbHVlOiBcInZhbG9yIGRlZmF1bHQgZGEgbGluaGFcIixcbiAgICBoYXNOb25lOiBcIm7Do28gdGVtIG5lbmh1bVwiLFxuICAgIG5vbmVUZXh0OiBcIm5lbmh1bSB0ZXh0b1wiLFxuXG4gICAgdGV4dDogXCJ0ZXh0b1wiLFxuICAgIG1pblZhbHVlOiBcInZhbG9yIG3DrW5pbW9cIixcbiAgICBtYXhWYWx1ZTogXCJ2YWxvciBtw6F4aW1vXCIsXG4gICAgbWluTGVuZ3RoOiBcInRhbWFuaG8gbcOtbmltb1wiLFxuICAgIG1heExlbmd0aDogXCJ0YW1hbmhvIG3DoXhpbW9cIixcbiAgICBhbGxvd0RpZ2l0czogXCJwZXJtaXRpciBkw61naXRvc1wiLFxuICAgIG1pbkNvdW50OiBcImNvbnRhZG9yIG3DrW5pbW9cIixcbiAgICBtYXhDb3VudDogXCJjb250YWRvciBtw6F4aW1vXCIsXG4gICAgcmVnZXg6IFwiZXhwcmVzc8OjbyByZWd1bGFyXCJcbiAgfVxufTtcblxuZWRpdG9yTG9jYWxpemF0aW9uLmxvY2FsZXNbXCJwdFwiXSA9IHBvcnR1Z3Vlc2VUcmFuc2xhdGlvbjtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9sb2NhbGl6YXRpb24vcG9ydHVndWVzZS50cyIsImltcG9ydCB7IGVkaXRvckxvY2FsaXphdGlvbiB9IGZyb20gXCIuLi9lZGl0b3JMb2NhbGl6YXRpb25cIjtcblxudmFyIHNpbXBsaWZpZWRDaGluZXNlVHJhbnNsYXRpb24gPSB7XG4gIC8vIHN0cmluZ3MgZm9yIHN1cnZleSB0ZW1wbGF0ZXNcbiAgc3VydmV5OiB7XG4gICAgZWRpdDogXCLnvJbovpFcIixcbiAgICBleHRlcm5hbEhlbHBMaW5rOiBcIuaVmeWtpuWwj+eJh1wiLFxuICAgIGV4dGVybmFsSGVscExpbmtVcmw6IFwiaHR0cHM6Ly93d3cueW91dHViZS5jb20vY2hhbm5lbC9VQ0gycnU5b2tJY29vTlpmcElieXE0cVE/dmlld19hcz1zdWJzY3JpYmVyXCIsXG4gICAgZHJvcFF1ZXN0aW9uOiBcIuS7juW3puS+p+W3peWFt+euseaLluS4qumXrumimFwiLFxuICAgIGNvcHk6IFwi5aSN5Yi2XCIsXG4gICAgYWRkVG9Ub29sYm94OiBcIua3u+WKoOWIsOW3peWFt+eusVwiLFxuICAgIGRlbGV0ZVBhbmVsOiBcIuWIoOmZpOmdouadv1wiLFxuICAgIGRlbGV0ZVF1ZXN0aW9uOiBcIuWIoOmZpOmimOebrlwiLFxuICAgIGNvbnZlcnRUbzogXCLovazlj5jkuLpcIixcbiAgICBkcmFnOiBcIuaLluaUvuWFg+S7tlwiXG4gIH0sXG4gIC8vIHN0cmluZ3MgZm9yIHF1ZXN0aW9uIHR5cGVzXG4gIHF0OiB7XG4gIGRlZmF1bHQ6XG4gICAgXCLpu5jorqRcIixcbiAgICBjaGVja2JveDogXCLlpJrpobnpgInmi6lcIixcbiAgICBjb21tZW50OiBcIuWkmuihjOaWh+acrFwiLFxuICAgIGltYWdlcGlja2VyOiBcIumAieWbvueJh1wiLFxuICAgIGRyb3Bkb3duOiBcIuS4i+aLieahhlwiLFxuICAgIGZpbGU6IFwi5paH5Lu25LiK5LygXCIsXG4gICAgaHRtbDogXCJIdG1sIOS7o+eggVwiLFxuICAgIG1hdHJpeDogXCLnn6npmLUgKOWNlemAiemimClcIixcbiAgICBtYXRyaXhkcm9wZG93bjogXCLnn6npmLUgKOS4i+aLieahhilcIixcbiAgICBtYXRyaXhkeW5hbWljOiBcIuefqemYtSAo5Yqo5oCB6Zeu6aKYKVwiLFxuICAgIG11bHRpcGxldGV4dDogXCLmlofmnKzmoYbnu4RcIixcbiAgICBwYW5lbDogXCLpnaLmnb9cIixcbiAgICBwYW5lbGR5bmFtaWM6IFwi6Z2i5p2/KOWKqOaAgSlcIixcbiAgICByYWRpb2dyb3VwOiBcIuWNlemhuemAieaLqVwiLFxuICAgIHJhdGluZzogXCLor4TliIZcIixcbiAgICB0ZXh0OiBcIuWNleihjOaWh+acrFwiLFxuICAgIGJvb2xlYW46IFwi6YC76L6R6aG5XCIsXG4gICAgZXhwcmVzc2lvbjogXCLooajovr7lvI8o5Y+q6K+7KVwiLFxuICAgIGZsb3dwYW5lbDogXCLmtYHpnaLmnb9cIlxuICB9LFxuICAvLyBzdHJpbmdzIGZvciBlZGl0b3JcbiAgZWQ6IHtcbiAgICBkZWZhdWx0TG9jYWxlOiBcIum7mOiupOivreiogCAoezB9KVwiLFxuICAgIHN1cnZleTogXCLosIPmn6Xpl67ljbdcIixcbiAgICBzZXR0aW5nczogXCLpl67ljbforr7nva5cIixcbiAgICBvcGplY3RQcm9wZXJ0aWVzSGVhZGVyOiBcIumrmOe6p1wiLFxuICAgIHNob3dPYmplY3RQcm9wZXJ0aWVzOiBcIuaYvuekuuWxnuaAp1wiLFxuICAgIGhpZGVPYmplY3RQcm9wZXJ0aWVzOiBcIumakOiXj+WxnuaAp1wiLFxuICAgIGVkaXRTdXJ2ZXk6IFwi5L+u5pS5XCIsXG4gICAgYWRkTmV3UGFnZTogXCLmt7vliqDmlrDpobXpnaJcIixcbiAgICBtb3ZlUmlnaHQ6IFwi5rua5Yqo5Yiw5Y+z5L6nXCIsXG4gICAgbW92ZUxlZnQ6IFwi5rua5Yqo5Yiw5bem5L6nXCIsXG4gICAgZGVsZXRlUGFnZTogXCLliKDpmaTpobXpnaJcIixcbiAgICBlZGl0UGFnZTogXCLnvJbovpHpobXpnaJcIixcbiAgICBlZGl0OiBcIue8lui+kVwiLFxuICAgIG5ld1BhZ2VOYW1lOiBcIumhtemdolwiLFxuICAgIG5ld1F1ZXN0aW9uTmFtZTogXCLpl67pophcIixcbiAgICBuZXdQYW5lbE5hbWU6IFwi6Z2i5p2/XCIsXG4gICAgbmV3VGV4dEl0ZW1OYW1lOiBcIuaWh+acrFwiLFxuICAgIHRlc3RTdXJ2ZXk6IFwi5rWL6K+V6Zeu5Y23XCIsXG4gICAgdGVzdFN1cnZleUFnYWluOiBcIuWGjeasoea1i+ivlemXruWNt1wiLFxuICAgIHRlc3RTdXJ2ZXlXaWR0aDogXCLpl67ljbflrr3luqY6IFwiLFxuICAgIGVtYmVkU3VydmV5OiBcIuWwhumXruWNt+W1jOWFpee9kemhtVwiLFxuICAgIHRyYW5zbGF0aW9uOiBcIui9rOaNolwiLFxuICAgIHNhdmVTdXJ2ZXk6IFwi5L+d5a2Y6Zeu5Y23XCIsXG4gICAgZGVzaWduZXI6IFwi6Zeu5Y236K6+6K6h5ZmoXCIsXG4gICAganNvbkVkaXRvcjogXCJKU09OIOe8lui+keWZqFwiLFxuICAgIHVuZG86IFwi5pKk6ZSAXCIsXG4gICAgcmVkbzogXCLmgaLlpI1cIixcbiAgICBvcHRpb25zOiBcIumAiemhuVwiLFxuICAgIGdlbmVyYXRlVmFsaWRKU09OOiBcIueUn+aIkCBKU09OIOaVsOaNrlwiLFxuICAgIGdlbmVyYXRlUmVhZGFibGVKU09OOiBcIueUn+aIkOaYk+ivu+eahCBKU09OIOaVsOaNrlwiLFxuICAgIHRvb2xib3g6IFwi5bel5YW3566xXCIsXG4gICAgdG9vbGJveEdlbmVyYWxDYXRlZ29yeTogXCLkuIDoiKxcIixcbiAgICBkZWxTZWxPYmplY3Q6IFwi5Yig6Zmk5omA6YCJ5a+56LGhXCIsXG4gICAgZWRpdFNlbE9iamVjdDogXCLnvJbovpHmiYDpgInlr7nosaFcIixcbiAgICBjb3JyZWN0SlNPTjogXCLor7fkv67mraMgSlNPTiDmlbDmja5cIixcbiAgICBzdXJ2ZXlSZXN1bHRzOiBcIumXruWNt+e7k+aenDogXCIsXG4gICAgc3VydmV5UmVzdWx0c1RhYmxlOiBcIuihqOagvOW9ouW8j1wiLFxuICAgIHN1cnZleVJlc3VsdHNKc29uOiBcIkpTT07lvaLlvI9cIixcbiAgICByZXN1bHRzVGl0bGU6IFwi6Zeu6aKY5qCH6aKYXCIsXG4gICAgcmVzdWx0c05hbWU6IFwi6Zeu6aKY5ZCN56ewXCIsXG4gICAgcmVzdWx0c1ZhbHVlOiBcIuetlOahiOWQjeensFwiLFxuICAgIHJlc3VsdHNEaXNwbGF5VmFsdWU6IFwi5pi+56S6562U5qGIXCIsXG4gICAgbW9kaWZpZWQ6IFwi5bey5L+u5pS5XCIsXG4gICAgc2F2aW5nOiBcIuS/neWtmOS4rS4uLlwiLFxuICAgIHNhdmVkOiBcIuW3suS/neWtmFwiLFxuICAgIHNhdmVFcnJvcjogXCLplJnor6/vvIzmnKrkv53lrZhcIixcbiAgICB0cmFuc2xhdGlvbkFkZExhbmd1YWdlOiBcIuivreiogOmAieaLqVwiLFxuICAgIHRyYW5zbGF0aW9uU2hvd0FsbFN0cmluZ3M6IFwi5YWo6YOo5ZCN6K+NXCIsXG4gICAgdHJhbnNsYXRpb25TaG93QWxsUGFnZXM6IFwi5YWo6YOo6aG16Z2iXCIsXG4gICAgdHJhbnNsYXRpb25Ob1N0cmluZ3M6IFwi5pyq57+76K+R77yM6YeN5paw6YCJXCIsXG4gICAgdHJhbnNsYXRpb25FeHBvcnRUb1NDVkJ1dHRvbjogXCLlr7zlh7pDU1ZcIixcbiAgICB0cmFuc2xhdGlvbkltcG9ydEZyb21TQ1ZCdXR0b246IFwi5a+85YWlQ1NWXCIsXG4gICAgdHJhbnNsYXRpb25NZXJnZUxvY2FsZVdpdGhEZWZhdWx0OiBcIuWQjOm7mOiupOWQiOW5tiB7MH0gXCIsXG4gICAgYm9sZDogXCLliqDnspdcIixcbiAgICBpdGFsaWM6IFwi5pac5L2TXCIsXG4gICAgdW5kZXJsaW5lOiBcIuS4i+WIkue6v1wiLFxuICAgIGZwQWRkUXVlc3Rpb246IFwi5re75Yqg6Zeu6aKYXCIsXG4gICAgY29tcGxldGVkSHRtbE9uQ29uZGl0aW9uSXRlbVRleHQ6IFwi5pi+56S6IGlmOlwiXG4gIH0sXG4gIC8vUHJvcGVydHkgbmFtZXMgaW4gdGFibGUgaGVhZGVyc1xuICBwZWw6IHtcbiAgICBpc1JlcXVpcmVkOiBcIuaYr+WQpuS4uuW/heWhq+mhuT9cIlxuICB9LFxuICAvLyBzdHJpbmdzIGZvciBwcm9wZXJ0eSBlZGl0b3JzXG4gIHBlOiB7XG4gICAgYXBwbHk6IFwi5bqU55SoXCIsXG4gICAgb2s6IFwi56Gu5a6aXCIsXG4gICAgY2FuY2VsOiBcIuWPlua2iFwiLFxuICAgIHJlc2V0OiBcIumHjee9rlwiLFxuICAgIGNsb3NlOiBcIuWFs+mXrVwiLFxuICAgIGRlbGV0ZTogXCLliKDpmaRcIixcbiAgICBhZGROZXc6IFwi5paw5bu6XCIsXG4gICAgYWRkSXRlbTogXCLmt7vliqDpobkuLi5cIixcbiAgICBhZGRPdGhlcjogXCLlhbbku5ZcIixcbiAgICBhZGRTZWxlY3RBbGw6IFwi5YWo6YCJXCIsXG4gICAgYWRkTm9uZTogXCLml6BcIixcbiAgICByZW1vdmVBbGw6IFwi5YWo6YOo5Yig6ZmkXCIsXG4gICAgZWRpdDogXCLnvJbovpHlmahcIixcbiAgICBpdGVtVmFsdWVFZGl0OiBcIlZpc2libGUgSWZcIixcbiAgICBlZGl0Q2hvaWNlczogXCLnvJbovpHpgInpoblcIixcbiAgICBtb3ZlOiBcIuenu+WKqFwiLFxuICAgIGVtcHR5OiBcIjznqbo+XCIsXG4gICAgbm90RW1wdHk6IFwiPOe8lui+keWAvD5cIixcbiAgICBmYXN0RW50cnk6IFwi5b+r6YCf6L6T5YWlXCIsXG4gICAgZm9ybUVudHJ5OiBcIuihqOWNlei+k+WFpVwiLFxuICAgIHRlc3RTZXJ2aWNlOiBcIua1i+ivleacjeWKoVwiLFxuICAgIGNvbmRpdGlvblNlbGVjdFF1ZXN0aW9uOiBcIumAieaLqemXrumimC4uLlwiLFxuICAgIGNvbmRpdGlvblZhbHVlUXVlc3Rpb25UaXRsZTogXCLpgInmi6nlgLxcIixcbiAgICBjb25kaXRpb25CdXR0b25BZGQ6IFwi5re75YqgXCIsXG4gICAgY29uZGl0aW9uQnV0dG9uUmVwbGFjZTogXCLmm7/mjaJcIixcbiAgICBjb25kaXRpb25IZWxwOiBcIuivt+i+k+WFpeS4gOS4quW4g+WwlOihqOi+vuW8j+OAguW9k+W4g+WwlOWAvOS4uuecn++8jOmXrumimC/pobXpnaLlj6/op4HjgILkvovlpoLvvJp7cXVlc3Rpb24xfSA9ICd2YWx1ZTEnIG9yICh7cXVlc3Rpb24yfSAqIHtxdWVzdGlvbjR9ICA+IDIwIGFuZCB7cXVlc3Rpb24zfSA8IDUpXCIsXG4gICAgZXhwcmVzc2lvbkhlbHA6IFwi6K+36L6T5YWl5LiA6aG55p2h5Lu25Yik5pat44CC5b2T5p2h5Lu25Yik5pat5Li655yf5pe26Zeu6aKYL+mhtemdouWwhuWPr+ingeOAguS+i+Wmgjoge3F1ZXN0aW9uMX0gPSAndmFsdWUxJyBvciAoe3F1ZXN0aW9uMn0gPSAzIGFuZCB7cXVlc3Rpb24zfSA8IDUpXCIsXG4gICAgYWNlRWRpdG9ySGVscDogXCJ0cmwrc3BhY2XlhazlvI/ooaXlrozmj5DnpLpcIixcbiAgICBhY2VFZGl0b3JSb3dUaXRsZTogXCLlvZPliY3ooYxcIixcbiAgICBhY2VFZGl0b3JQYW5lbFRpdGxlOiBcIuW9k+WJjemdouadv1wiLFxuICAgIHNob3dNb3JlOiBcIuabtOWkmue7huiKguivt+afpeeci+aWh+aho1wiLFxuICAgIGNvbmRpdGlvblNob3dNb3JlVXJsOiBcImh0dHBzOi8vc3VydmV5anMuaW8vRG9jdW1lbnRhdGlvbi9MaWJyYXJ5UGFyYW1ldGVyP2lkPVF1ZXN0aW9uwrZtZXRlcj12aXNpYmxlSWZcIixcbiAgICBhc3Npc3RhbnRUaXRsZTogXCJBdmFpbGFibGUgcXVlc3Rpb25zOlwiLFxuICAgIGNlbGxzRW1wdHlSb3dzQ29sdW1uczogXCLoh7PlsJHmnIkx6KGMXCIsXG4gICAgcHJvcGVydHlJc0VtcHR5OiBcIuivt+S4uuivpeWxnuaAp+iuvuWumuS4gOS4quWAvFwiLFxuICAgIHZhbHVlOiBcIuWAvFwiLFxuICAgIHRleHQ6IFwi5pi+56S65paH5pysXCIsXG4gICAgcm93aWQ6IFwi6KGM5Y+3XCIsXG4gICAgaW1hZ2VMaW5rOiBcIuWbvueJh+mTvuaOpVwiLFxuICAgIGNvbHVtbkVkaXQ6IFwi57yW6L6R5YiXOiB7MH1cIixcbiAgICBpdGVtRWRpdDogXCLnvJbovpHpgInpobk6IHswfVwiLFxuICAgIHVybDogXCJVUkxcIixcbiAgICBwYXRoOiBcIui3r+W+hFwiLFxuICAgIHZhbHVlTmFtZTogXCLlgLzlkI1cIixcbiAgICB0aXRsZU5hbWU6IFwi5qCH6aKY5ZCNXCIsXG4gICAgaGFzT3RoZXI6IFwi5Y+v5re75Yqg5YW25LuW562U5qGIP1wiLFxuICAgIG90aGVyVGV4dDogXCLlhbbku5bnrZTmoYjmlofmnKxcIixcbiAgICBoYXNOb25lOiBcIuaXoFwiLFxuICAgIG5vbmVUZXh0OiBcIuaXoOaWh+acrFwiLFxuICAgIGhhc1NlbGVjdEFsbDogXCLmnInlhajpgInpoblcIixcbiAgICBzZWxlY3RBbGxUZXh0OiBcIumAieaLqeWFqOmDqOaWh+acrFwiLFxuICAgIGNob2ljZXNNaW46IFwi6YCJ6aG55pyA5bCP5YC8XCIsXG4gICAgY2hvaWNlc01heDogXCLpgInpobnmnIDlpKflgLxcIixcbiAgICBjaG9pY2VzU3RlcDogXCLpgInpobnpl7TpmpRcIixcbiAgICBuYW1lOiBcIumimOebruWQjVwiLFxuICAgIHRpdGxlOiBcIumimOebruaWh+acrFwiLFxuICAgIGNlbGxUeXBlOiBcIuWNleWFg+agvOexu+Wei1wiLFxuICAgIGNvbENvdW50OiBcIuWIl+aVsFwiLFxuICAgIGNob2ljZXNPcmRlcjogXCLorr7nva7pgInpobnpobrluo9cIixcbiAgICB2aXNpYmxlOiBcIuaYr+WQpuWPr+ingT9cIixcbiAgICBpc1JlcXVpcmVkOiBcIuaYr+WQpuS4uuW/heWhq+mhuT9cIixcbiAgICByZXF1aXJlZEVycm9yVGV4dDogXCLplJnor6/mloflrZdcIixcbiAgICBzdGFydFdpdGhOZXdMaW5lOiBcIumXrumimOaYr+WQpuaWsOi1t+S4gOihjD9cIixcbiAgICByb3dzOiBcIuaWh+acrOahhuihjOaVsFwiLFxuICAgIHBsYWNlSG9sZGVyOiBcIuWNoOS9jeaWh+acrFwiLFxuICAgIHNob3dQcmV2aWV3OiBcIuaYr+WQpuaYvuekuuWbvuWDj+mihOiniD9cIixcbiAgICBzdG9yZURhdGFBc1RleHQ6IFwi5LulIEpTT04g5paH5pys5pa55byP5a2Y5YKo5paH5Lu2XCIsXG4gICAgbWF4U2l6ZTogXCLmlofku7bmnIDlpKflsLrlr7ggKEJ5dGVzKVwiLFxuICAgIGltYWdlSGVpZ2h0OiBcIuWbvueJh+mrmOW6plwiLFxuICAgIGltYWdlV2lkdGg6IFwi5Zu+54mH5a695bqmXCIsXG4gICAgcm93Q291bnQ6IFwi6buY6K6k6KGM5pWwXCIsXG4gICAgY29sdW1uTGF5b3V0OiBcIuWIl+W4g+WxgFwiLFxuICAgIGFkZFJvd0xvY2F0aW9uOiBcIua3u+WKoOihjOaMiemSruS9jee9rlwiLFxuICAgIGFkZFJvd1RleHQ6IFwi5re75Yqg5p2h55uu5oyJ6ZKu5paH5pysXCIsXG4gICAgcmVtb3ZlUm93VGV4dDogXCLliKDpmaTmnaHnm67mjInpkq7mlofmnKxcIixcbiAgICByYXRlTWluOiBcIuacgOWwj+ivhOWIhlwiLFxuICAgIHJhdGVNYXg6IFwi5pyA5aSn6K+E5YiGXCIsXG4gICAgcmF0ZVN0ZXA6IFwi6K+E5YiG6Ze06ZqUXCIsXG4gICAgbWluUmF0ZURlc2NyaXB0aW9uOiBcIuacgOWwj+WAvOaPkOekulwiLFxuICAgIG1heFJhdGVEZXNjcmlwdGlvbjogXCLmnIDlpKflgLzmj5DnpLpcIixcbiAgICBpbnB1dFR5cGU6IFwi5paH5pys5qGG57G75Z6LXCIsXG4gICAgb3B0aW9uc0NhcHRpb246IFwi5LiL5ouJ5qGG5o+Q56S66K+tXCIsXG4gICAgZGVmYXVsdFZhbHVlOiBcIum7mOiupOWAvFwiLFxuICAgIGNlbGxzRGVmYXVsdFJvdzogXCJEZWZhdWx0IGNlbGxzIHRleHRzXCIsXG4gICAgc3VydmV5RWRpdG9yVGl0bGU6IFwi6Zeu5Y236K6+572uXCIsXG4gICAgcUVkaXRvclRpdGxlOiBcIue8lui+kemXrumimDogezB9XCIsXG4gICAgbWF4TGVuZ3RoOiBcIuacgOWkp+mVv+W6plwiLFxuICAgIHNob3dUaXRsZTogXCLmmL7npLov6ZqQ6JePIOagh+mimFwiLFxuICAgIGxvY2FsZTogXCLpu5jorqTor63oqIBcIixcbiAgICBtb2RlOiBcIuaooeW8jyAo57yW6L6RL+WPquivuylcIixcbiAgICBjbGVhckludmlzaWJsZVZhbHVlczogXCLmuIXpmaTpmpDol4/lgLxcIixcbiAgICBjb29raWVOYW1lOiBcIkNvb2tpZeWQje+8jOmBv+WFjeWkmuasoei/kOihjClcIixcbiAgICBzZW5kUmVzdWx0T25QYWdlTmV4dDogXCLliIfmjaLpobXml7bkv53lrZjnu5PmnpxcIixcbiAgICBzdG9yZU90aGVyc0FzQ29tbWVudDogXCLlhbbku5blgLzljZXni6zlgqjlrZhcIixcbiAgICBzaG93UGFnZVRpdGxlczogXCLmmL7npLrpobXpnaLmoIfpophcIixcbiAgICBzaG93UGFnZU51bWJlcnM6IFwi5pi+56S66aG15pWwXCIsXG4gICAgcGFnZVByZXZUZXh0OiBcIuWJjeS4gOmhteaMiemSruaWh+acrFwiLFxuICAgIHBhZ2VOZXh0VGV4dDogXCLlkI7kuIDpobXmjInpkq7mlofmnKxcIixcbiAgICBjb21wbGV0ZVRleHQ6IFwi5a6M5oiQ5oyJ6ZKu5paH5pysXCIsXG4gICAgc3RhcnRTdXJ2ZXlUZXh0OiBcIuW8gOWni+aMiemSruaWh+acrFwiLFxuICAgIHNob3dOYXZpZ2F0aW9uQnV0dG9uczogXCLmmL7npLrlr7zoiKrmjInpkq4gKOm7mOiupOWvvOiIqilcIixcbiAgICBzaG93UHJldkJ1dHRvbjogXCLmmL7npLrliY3kuIDpobXmjInpkq4gKOeUqOaIt+WPr+i/lOWbnuiHs+WJjeS4gOmhtemdoilcIixcbiAgICBmaXJzdFBhZ2VJc1N0YXJ0ZWQ6IFwi6LCD5p+l55qE56ys5LiA6aG16Z2i5Li66LW35aeL6aG1LlwiLFxuICAgIHNob3dDb21wbGV0ZWRQYWdlOiBcIue7k+WwvuWxleekuuWujOaIkOWQjueahOmhtemdoiAoY29tcGxldGVkSHRtbClcIixcbiAgICBnb05leHRQYWdlQXV0b21hdGljOiBcIuWbnuetlOacrOmhteaJgOaciemXrumimOWQju+8jOiHquWKqOi3s+i9rOWIsOS4i+S4gOmhtVwiLFxuICAgIHNob3dQcm9ncmVzc0JhcjogXCLmmL7npLrov5vluqbmnaFcIixcbiAgICBxdWVzdGlvblRpdGxlTG9jYXRpb246IFwi6Zeu6aKY55qE5qCH6aKY5L2N572uXCIsXG4gICAgcmVxdWlyZWRUZXh0OiBcIumXrumimOW/heWhq+agh+W/l1wiLFxuICAgIHF1ZXN0aW9uU3RhcnRJbmRleDogXCLpl67popjotbflp4vmoIflv5cgKDEsIDIgb3IgJ0EnLCAnYScpXCIsXG4gICAgc2hvd1F1ZXN0aW9uTnVtYmVyczogXCLmmL7npLrpl67popjnvJblj7dcIixcbiAgICBxdWVzdGlvblRpdGxlVGVtcGxhdGU6IFwi6Zeu6aKY5qCH6aKY5qih5p2/LCDpu5jorqTkuLo6ICd7bm99LiB7cmVxdWlyZX0ge3RpdGxlfSdcIixcbiAgICBxdWVzdGlvbkVycm9yTG9jYXRpb246IFwi6Zeu6aKY6ZSZ6K+v5a6a5L2NXCIsXG4gICAgZm9jdXNGaXJzdFF1ZXN0aW9uQXV0b21hdGljOiBcIuaUueWPmOmhtemdouaXtuiBmueEpuWcqOesrOS4gOS4qumXrumimFwiLFxuICAgIHF1ZXN0aW9uc09yZGVyOiBcIumhteWGhemXrumimOmhuuW6j1wiLFxuICAgIG1heFRpbWVUb0ZpbmlzaDogXCLlrozmiJDosIPmn6XnmoTmnIDplb/ml7bpl7RcIixcbiAgICBtYXhUaW1lVG9GaW5pc2hQYWdlOiBcIuWujOaIkOiwg+afpeS4remhtemdoueahOacgOmVv+aXtumXtFwiLFxuICAgIHNob3dUaW1lclBhbmVsOiBcIuaYvuekuuiuoeaXtuWZqOmdouadv1wiLFxuICAgIHNob3dUaW1lclBhbmVsTW9kZTogXCLmmL7npLrorqHml7blmajpnaLmnb/mqKHlvI9cIixcbiAgICByZW5kZXJNb2RlOiBcIua4suafk+aooeW8j1wiLFxuICAgIGFsbG93QWRkUGFuZWw6IFwi5YWB6K645re75Yqg6Z2i5p2/XCIsXG4gICAgYWxsb3dSZW1vdmVQYW5lbDogXCLlhYHorrjliKDpmaTpnaLmnb9cIixcbiAgICBwYW5lbEFkZFRleHQ6IFwi5re75Yqg6Z2i5p2/5paH5pysXCIsXG4gICAgcGFuZWxSZW1vdmVUZXh0OiBcIuWIoOmZpOmdouadv+aWh+acrFwiLFxuICAgIGlzU2luZ2xlUGFnZTogXCLlnKjkuIDkuKrpobXpnaLkuIrlsZXnpLrmiYDmnInlhYPntKBcIixcbiAgICBodG1sOiBcIkh0bWxcIixcbiAgICBleHByZXNzaW9uOiBcIuWFrOW8j1wiLFxuICAgIG1pblZhbHVlOiBcIuacgOWwj+WAvFwiLFxuICAgIG1heFZhbHVlOiBcIuacgOWkp+WAvFwiLFxuICAgIG1pbkxlbmd0aDogXCLmnIDlsI/plb/luqZcIixcbiAgICBhbGxvd0RpZ2l0czogXCLlhYHorrjnmoTkvY3mlbBcIixcbiAgICBtaW5Db3VudDogXCLmnIDlsI/mlbDph49cIixcbiAgICBtYXhDb3VudDogXCLmnIDlpKfmlbDph49cIixcbiAgICByZWdleDogXCLmraPliJnooajovr7lvI9cIixcbiAgICB0b3RhbFRleHQ6IFwi5oC75paH5pysXCIsXG4gICAgdG90YWxUeXBlOiBcIuaAu+exu+Wei1wiLFxuICAgIHRvdGFsRXhwcmVzc2lvbjogXCLmgLvlhazlvI9cIixcbiAgICB0b3RhbERpc3BsYXlTdHlsZTogXCLmgLvmmL7npLrpo47moLxcIixcbiAgICB0b3RhbEN1cnJlbmN5OiBcIuaAu2N1cnJlbmN5XCIsXG4gICAgdG90YWxGb3JtYXQ6IFwi5oC75qC85byPXCIsXG4gICAgdGFiczoge1xuICAgICAgZ2VuZXJhbDogXCLkuIDoiKxcIixcbiAgICAgIG5hdmlnYXRpb246IFwi5a+86IiqXCIsXG4gICAgICBxdWVzdGlvbjogXCLpl67pophcIixcbiAgICAgIGNvbXBsZXRlZEh0bWw6IFwi5a6M5oiQ5ZCO55qESHRtbFwiLFxuICAgICAgbG9hZGluZ0h0bWw6IFwi5Yqg6L295Lit55qESHRtbFwiLFxuICAgICAgdGltZXI6IFwi6Zeu5Y236K6h5pe25ZmoXCIsXG4gICAgICB0cmlnZ2VyOiBcIuinpuWPkeWZqFwiLFxuICAgICAgZmlsZU9wdGlvbnM6IFwi6YCJ6aG5XCIsXG4gICAgICBodG1sOiBcIkhUTUwg57yW6L6R5ZmoXCIsXG4gICAgICBjb2x1bW5zOiBcIuiuvue9ruWIl1wiLFxuICAgICAgcm93czogXCLorr7nva7ooYxcIixcbiAgICAgIGNob2ljZXM6IFwi6K6+572u6YCJ6aG5XCIsXG4gICAgICB2aXNpYmxlSWY6IFwi6K6+572u5Y+v6KeB5p2h5Lu2XCIsXG4gICAgICBlbmFibGVJZjogXCLorr7nva7mnInmlYjmnaHku7ZcIixcbiAgICAgIHJhdGVWYWx1ZXM6IFwi6K6+572u6K+E5YiG5YC8XCIsXG4gICAgICBjaG9pY2VzQnlVcmw6IFwi6YCa6L+HIFVSTCDlr7zlhaXpgInpoblcIixcbiAgICAgIG1hdHJpeENob2ljZXM6IFwi6buY6K6k6YCJ6aG5XCIsXG4gICAgICBtdWx0aXBsZVRleHRJdGVtczogXCLmlofmnKzovpPlhaVcIixcbiAgICAgIHZhbGlkYXRvcnM6IFwi5qCh6aqM6KeE5YiZXCJcbiAgICB9LFxuICAgIGVkaXRQcm9wZXJ0eTogXCLnvJbovpHlsZ7mgKc6ICd7MH0nXCIsXG4gICAgaXRlbXM6IFwiWyDpobnnm67mlbDph486IHswfSBdXCIsXG4gICAgZW50ZXJOZXdWYWx1ZTogXCLor7forr7lrprlgLxcIixcbiAgICBub3F1ZXN0aW9uczogXCLpl67ljbfkuK3ov5jmsqHmnInliJvlu7rku7vkvZXpl67pophcIixcbiAgICBjcmVhdGV0cmlnZ2VyOiBcIuivt+WIm+W7uuinpuWPkeWZqFwiLFxuICAgIHRyaWdnZXJPbjogXCLlvZMgXCIsXG4gICAgdHJpZ2dlck1ha2VQYWdlc1Zpc2libGU6IFwi5L2/6aG16Z2i5Y+v6KeBOlwiLFxuICAgIHRyaWdnZXJNYWtlUXVlc3Rpb25zVmlzaWJsZTogXCLkvb/pl67popjlj6/op4E6XCIsXG4gICAgdHJpZ2dlckNvbXBsZXRlVGV4dDogXCLlpoLmnpzmu6HotrPmnaHku7bvvIzliJnlrozmiJDpl67ljbdcIixcbiAgICB0cmlnZ2VyTm90U2V0OiBcIuinpuWPkeWZqOWwmuacquiuvue9rlwiLFxuICAgIHRyaWdnZXJSdW5JZjogXCLmu6HotrPkuIvliJfmnaHku7bml7bmiafooYxcIixcbiAgICB0cmlnZ2VyU2V0VG9OYW1lOiBcIuS/ruaUueS4i+WIl+mXrumimOWAvDogXCIsXG4gICAgdHJpZ2dlckZyb21OYW1lOiBcIuWkjeWItuWAvDogXCIsXG4gICAgdHJpZ2dlclJ1bkV4cHJlc3Npb246IFwi6L+Q6KGM5YWs5byPOlwiLFxuICAgIHRyaWdnZXJTZXRWYWx1ZTogXCLkv67mlLnkuLo6IFwiLFxuICAgIHRyaWdnZXJJc1ZhcmlhYmxlOiBcIuWcqOmXruWNt+aPkOS6pOe7k+aenOS4reS4jeimgeWMheWQq+ivpeWPmOmHj1wiXG4gIH0sXG4gIHB2OiB7XG4gICAgdHJ1ZTogXCLnnJ9cIixcbiAgICBmYWxzZTogXCLlgYdcIixcbiAgICBpbmhlcml0OiBcIue7p+aJv1wiLFxuICAgIHNob3c6IFwi5pi+56S6XCIsXG4gICAgaGlkZTogXCLpmpDol49cIixcbiAgZGVmYXVsdDpcbiAgICBcIum7mOiupFwiLFxuICAgIGluaXRpYWw6IFwi5Yid5aeL5YyWXCIsXG4gICAgcmFuZG9tOiBcIumaj+aculwiLFxuICAgIGNvbGxhcHNlZDogXCLmipjlj6BcIixcbiAgICBleHBhbmRlZDogXCLmianlsZVcIixcbiAgICBub25lOiBcIuaXoFwiLFxuICAgIGFzYzogXCLljYfluo9cIixcbiAgICBkZXNjOiBcIumZjeW6j1wiLFxuICAgIGluZGV0ZXJtaW5hdGU6IFwiaW5kZXRlcm1pbmF0ZVwiLFxuICAgIGRlY2ltYWw6IFwi5pWw5a2XXCIsXG4gICAgY3VycmVuY3k6IFwi6LSn5biBXCIsXG4gICAgcGVyY2VudDogXCLnmb7liIbmlbBcIixcbiAgICBmaXJzdEV4cGFuZGVkOiBcImZpcnN0RXhwYW5kZWRcIixcbiAgICBvZmY6IFwi5YWz6ZetXCIsXG4gICAgb25QYW5lbDogXCLpnaLmnb/kuIpcIixcbiAgICBvblN1cnZleTogXCLpl67ljbfkuIpcIixcbiAgICBsaXN0OiBcIuWIl+ihqFwiLFxuICAgIHByb2dyZXNzVG9wOiBcInByb2dyZXNzVG9wXCIsXG4gICAgcHJvZ3Jlc3NCb3R0b206IFwicHJvZ3Jlc3NCb3R0b21cIixcbiAgICBwcm9ncmVzc1RvcEJvdHRvbTogXCJwcm9ncmVzc1RvcEJvdHRvbVwiLFxuICAgIGhvcml6b250YWw6IFwi5rC05bmzXCIsXG4gICAgdmVydGljYWw6IFwi5Z6C55u0XCIsXG4gICAgdG9wOiBcIumhtlwiLFxuICAgIGJvdHRvbTogXCLlupVcIixcbiAgICB0b3BCb3R0b206IFwi6aG25ZKM5bqVXCIsXG4gICAgbGVmdDogXCLlt6ZcIixcbiAgICBjb2xvcjogXCLpopzoibJcIixcbiAgICBkYXRlOiBcIuaXpeacn1wiLFxuICAgIGRhdGV0aW1lOiBcIuaXtumXtFwiLFxuICAgIFwiZGF0ZXRpbWUtbG9jYWxcIjogXCLml7bpl7TmoLzlvI9cIixcbiAgICBlbWFpbDogXCJlbWFpbFwiLFxuICAgIG1vbnRoOiBcIuaciFwiLFxuICAgIG51bWJlcjogXCLmlbDlrZdcIixcbiAgICBwYXNzd29yZDogXCLlr4bnoIFcIixcbiAgICByYW5nZTogXCLojIPlm7RcIixcbiAgICB0ZWw6IFwi55S16K+dXCIsXG4gICAgdGV4dDogXCJ0ZXh0XCIsXG4gICAgdGltZTogXCLml7bpl7RcIixcbiAgICB1cmw6IFwidXJsXCIsXG4gICAgd2VlazogXCLlkahcIixcbiAgICBoaWRkZW46IFwi6ZqQ6JePXCIsXG4gICAgb246IFwi5byAXCIsXG4gICAgb25QYWdlOiBcIumhtemdouS4ilwiLFxuICAgIGVkaXQ6IFwi57yW6L6RXCIsXG4gICAgZGlzcGxheTogXCLku4XmmL7npLpcIixcbiAgICBvbkNvbXBsZXRlOiBcIuWujOaIkOaXtlwiLFxuICAgIG9uSGlkZGVuOiBcIumakOiXj+S4rVwiLFxuICAgIGFsbDogXCLlhajpg6hcIixcbiAgICBwYWdlOiBcIumhtVwiLFxuICAgIHN1cnZleTogXCLpl67ljbdcIixcbiAgICBvbk5leHRQYWdlOiBcIuS4i+S4gOmhteaXtlwiLFxuICAgIG9uVmFsdWVDaGFuZ2VkOiBcIuWAvOWPmOWKqOaXtlwiXG4gIH0sXG4gIC8vIHN0cmluZ3MgZm9yIG9wZXJhdG9yc1xuICBvcDoge1xuICAgIGVtcHR5OiBcIuS4uuepulwiLFxuICAgIG5vdGVtcHR5OiBcIuS4jeS4uuepulwiLFxuICAgIGVxdWFsOiBcIuetieS6jlwiLFxuICAgIG5vdGVxdWFsOiBcIuS4jeetieS6jlwiLFxuICAgIGNvbnRhaW5zOiBcIuWMheWQq1wiLFxuICAgIG5vdGNvbnRhaW5zOiBcIuS4jeWMheWQq1wiLFxuICAgIGFueW9mOiBcIuS7u+aEj1wiLFxuICAgIGFsbG9mOiBcIuWFqOmDqFwiLFxuICAgIGdyZWF0ZXI6IFwi5aSn5LqOXCIsXG4gICAgbGVzczogXCLlsI/kuo5cIixcbiAgICBncmVhdGVyb3JlcXVhbDogXCLlpKfkuo7nrYnkuo5cIixcbiAgICBsZXNzb3JlcXVhbDogXCLlsI/kuo7nrYnkuo5cIlxuICB9LFxuICAvLyBzdHJpbmdzIGZvciBlbWJlZCB3aW5kb3dcbiAgZXc6IHtcbiAgICBhbmd1bGFyOiBcIuS9v+eUqCBBbmd1bGFyIOaXtlwiLFxuICAgIGpxdWVyeTogXCLkvb/nlKggSlF1ZXJ5IOaXtlwiLFxuICAgIGtub2Nrb3V0OiBcIuS9v+eUqCBLbm9ja291dCDml7ZcIixcbiAgICByZWFjdDogXCLkvb/nlKggUmVhY3Qg5pe2XCIsXG4gICAgdnVlOiBcIuS9v+eUqCBWdWUg5pe2XCIsXG4gICAgYm9vdHN0cmFwOiBcIuS9v+eUqCBCb290c3RyYXAg5pe2XCIsXG4gICAgc3RhbmRhcmQ6IFwi5LiN5L2/55SoIEJvb3RzdHJhcCDml7ZcIixcbiAgICBzaG93T25QYWdlOiBcIuW1jOWFpemhtemdouaYvuekulwiLFxuICAgIHNob3dJbldpbmRvdzogXCLkvb/nlKjljZXni6znmoTpl67ljbfnqpflj6NcIixcbiAgICBsb2FkRnJvbVNlcnZlcjogXCLku47mnI3liqHlmajliqDovb3pl67ljbcgSlNPTiDmlbDmja5cIixcbiAgICB0aXRsZVNjcmlwdDogXCLohJrmnKzlkozmoLflvI9cIixcbiAgICB0aXRsZUh0bWw6IFwiSFRNTFwiLFxuICAgIHRpdGxlSmF2YVNjcmlwdDogXCJKYXZhU2NyaXB0XCJcbiAgfSxcbiAgdHM6IHtcbiAgICBzZWxlY3RQYWdlOiBcIumAieaLqea1i+ivlemhtVwiLFxuICAgIHNob3dJbnZpc2libGVFbGVtZW50czogXCLmmL7npLrpmpDol4/lhYPku7ZcIlxuICB9LFxuICB2YWxpZGF0b3JzOiB7XG4gICAgYW5zd2VyY291bnR2YWxpZGF0b3I6IFwi5pWw6YeP5qOA5p+lXCIsXG4gICAgZW1haWx2YWxpZGF0b3I6IFwiRW1haWxcIixcbiAgICBleHByZXNzaW9udmFsaWRhdG9yOiBcIuWFrOW8j1wiLFxuICAgIG51bWVyaWN2YWxpZGF0b3I6IFwi5pWw5a2XXCIsXG4gICAgcmVnZXh2YWxpZGF0b3I6IFwi5q2j5YiZ6KGo6L6+5byPXCIsXG4gICAgdGV4dHZhbGlkYXRvcjogXCLmlofmnKxcIlxuICB9LFxuICB0cmlnZ2Vyczoge1xuICAgIGNvbXBsZXRldHJpZ2dlcjogXCLlrozmiJDpl67ljbdcIixcbiAgICBzZXR2YWx1ZXRyaWdnZXI6IFwi6K6+572u6Zeu6aKY5YC8XCIsXG4gICAgY29weXZhbHVldHJpZ2dlcjogXCLlpI3liLblgLxcIixcbiAgICBydW5leHByZXNzaW9udHJpZ2dlcjogXCLov5DooYzlhazlvI9cIixcbiAgICB2aXNpYmxldHJpZ2dlcjogXCLkv67mlLnlj6/op4HmgKdcIlxuICB9LFxuICAvLyBzdHJpbmdzIG9mIHByb3BlcnRpZXNcbiAgcDoge1xuICAgIG5hbWU6IFwi5ZCN5a2XXCIsXG4gICAgdGl0bGU6IHtcbiAgICAgIG5hbWU6IFwi5qCH6aKYXCIsXG4gICAgICB0aXRsZTogXCLlpoLmnpzkuI7lkI3lrZfnm7jlkIzvvIzor7forr7nva7kuLrnqbrlgLxcIlxuICAgIH0sXG4gICAgbmF2aWdhdGlvbkJ1dHRvbnNWaXNpYmlsaXR5OiBcIuWvvOiIquaMiemSruWPr+ingVwiLFxuICAgIHF1ZXN0aW9uc09yZGVyOiBcIumhtemdouS4reWFg+e0oOeahOmhuuW6j1wiLFxuICAgIG1heFRpbWVUb0ZpbmlzaDogXCLlrozmiJDosIPmn6XnmoTmnIDplb/ml7bpl7RcIixcbiAgICB2aXNpYmxlOiBcIuWPr+ingVwiLFxuICAgIHZpc2libGVJZjogXCLmnaHku7blj6/op4FcIixcbiAgICBxdWVzdGlvblRpdGxlTG9jYXRpb246IFwi6Zeu6aKY55qE5qCH6aKY5L2N572uXCIsXG4gICAgZGVzY3JpcHRpb246IFwi6K+05piOXCIsXG4gICAgc3RhdGU6IFwi54q25oCBXCIsXG4gICAgaXNSZXF1aXJlZDogXCLlv4XpgIlcIixcbiAgICByZXF1aXJlZElmOiBcIuaYr+WQpuW/hemAiVwiLFxuICAgIGluZGVudDogXCLnvKnov5tcIixcbiAgICByZXF1aXJlZEVycm9yVGV4dDogXCLlv4XloavplJnor69cIixcbiAgICBzdGFydFdpdGhOZXdMaW5lOiBcIuWFgeiuuOmXrumimOWcqOaWsOihjFwiLFxuICAgIGlubmVySW5kZW50OiBcIue8qei/m1wiLFxuICAgIHBhZ2U6IFwi5omA5Zyo6aG16Z2iXCIsXG4gICAgd2lkdGg6IFwi5a695bqmXCIsXG4gICAgY29tbWVudFRleHQ6IFwi5aSH5rOo5paH5pysXCIsXG4gICAgdmFsdWVOYW1lOiBcIuWAvOWQjVwiLFxuICAgIGVuYWJsZUlmOiBcIuiuvue9ruacieaViOadoeS7tlwiLFxuICAgIGRlZmF1bHRWYWx1ZTogXCLpu5jorqTlgLxcIixcbiAgICBjb3JyZWN0QW5zd2VyOiBcIuato+ehruetlOahiFwiLFxuICAgIHJlYWRPbmx5OiBcIuWPquivu1wiLFxuICAgIHZhbGlkYXRvcnM6IFwi5pyJ5pWI5oCnXCIsXG4gICAgdGl0bGVMb2NhdGlvbjogXCLmoIfpopjkvY3nva5cIixcbiAgICBoYXNDb21tZW50OiBcIuacieWkh+azqFwiLFxuICAgIGhhc090aGVyOiBcIuWFgeiuuOWFtuS7luetlOahiFwiLFxuICAgIGNob2ljZXM6IFwi6YCJ6aG5XCIsXG4gICAgY2hvaWNlc09yZGVyOiBcIumAiemhueaOkuW6j1wiLFxuICAgIGNob2ljZXNCeVVybDogXCJVcmzpgInpoblcIixcbiAgICBvdGhlclRleHQ6IFwi5YW25LuW562U5qGI5paH5pysXCIsXG4gICAgb3RoZXJFcnJvclRleHQ6IFwi5YW25LuW6ZSZ6K+vXCIsXG4gICAgc3RvcmVPdGhlcnNBc0NvbW1lbnQ6IFwi5YW25LuW5YC85Y2V54us5YKo5a2YXCIsXG4gICAgbGFiZWw6IFwi5qCH562+XCIsXG4gICAgc2hvd1RpdGxlOiBcIuaYvuekui/pmpDol48g5qCH6aKYXCIsXG4gICAgdmFsdWVUcnVlOiBcIumAieaYr+eahOWAvFwiLFxuICAgIHZhbHVlRmFsc2U6IFwi5LiN6YCJ55qE5YC8XCIsXG4gICAgY29sczogXCLliJdcIixcbiAgICByb3dzOiBcIuihjFwiLFxuICAgIHBsYWNlSG9sZGVyOiBcIuWNoOS9jVwiLFxuICAgIG9wdGlvbnNDYXB0aW9uOiBcIm9wdGlvbnNDYXB0aW9uXCIsXG4gICAgZXhwcmVzc2lvbjogXCLlhazlvI9cIixcbiAgICBmb3JtYXQ6IFwi5qC85byPXCIsXG4gICAgZGlzcGxheVN0eWxlOiBcIuaYvuekuumjjuagvFwiLFxuICAgIGN1cnJlbmN5OiBcIui0p+W4gVwiLFxuICAgIHVzZUdyb3VwaW5nOiBcInVzZUdyb3VwaW5nXCIsXG4gICAgc2hvd1ByZXZpZXc6IFwi6aKE6KeIXCIsXG4gICAgYWxsb3dNdWx0aXBsZTogXCLlhYHorrjlpJrpgIlcIixcbiAgICBpbWFnZUhlaWdodDogXCLlm77pq5hcIixcbiAgICBpbWFnZVdpZHRoOiBcIuWbvuWuvVwiLFxuICAgIHN0b3JlRGF0YUFzVGV4dDogXCLmlofmnKzmlrnlvI/lrZjlgqjmlofku7ZcIixcbiAgICBtYXhTaXplOiBcIuacgOWkp+WPt1wiLFxuICAgIGh0bWw6IFwiaHRtbFwiLFxuICAgIGNvbHVtbnM6IFwiY29sdW1uc1wiLFxuICAgIGNlbGxzOiBcIuWNleWFg1wiLFxuICAgIGlzQWxsUm93UmVxdWlyZWQ6IFwi5omA5pyJ6KGM5b+F5aGrXCIsXG4gICAgaG9yaXpvbnRhbFNjcm9sbDogXCLmu5rliqhcIixcbiAgICBjZWxsVHlwZTogXCLljZXlhYPmoLznsbvlnotcIixcbiAgICBjb2x1bW5zTGF5b3V0OiBcIuWIl+W4g+WxgFwiLFxuICAgIGNvbHVtbkNvbENvdW50OiBcIuWIl+aVsFwiLFxuICAgIGNvbHVtbk1pbldpZHRoOiBcIuWIl+acgOWwj+WuveW6plwiLFxuICAgIHJvd0NvdW50OiBcIuihjOaVsFwiLFxuICAgIG1pblJvd0NvdW50OiBcIuacgOWwj+ihjOaVsFwiLFxuICAgIG1heFJvd0NvdW50OiBcIuacgOWkp+ihjOaVsFwiLFxuICAgIGtleU5hbWU6IFwi6ZSu5YC85ZCNXCIsXG4gICAga2V5RHVwbGljYXRpb25FcnJvcjogXCLplK7lgLzph43lpI1cIixcbiAgICBjb25maXJtRGVsZXRlOiBcIuehruiupOWIoOmZpFwiLFxuICAgIGNvbmZpcm1EZWxldGVUZXh0OiBcIuehruiupOWIoOmZpOaWh+acrFwiLFxuICAgIGFkZFJvd0xvY2F0aW9uOiBcIua3u+WKoOihjOS9jee9rlwiLFxuICAgIGFkZFJvd1RleHQ6IFwi5re75Yqg6KGM5paH5pysXCIsXG4gICAgcmVtb3ZlUm93VGV4dDogXCLliKDpmaTmlofmnKxcIixcbiAgICBpdGVtczogXCJpdGVtc1wiLFxuICAgIGl0ZW1TaXplOiBcIml0ZW1TaXplXCIsXG4gICAgY29sQ291bnQ6IFwi5YiX5pWwXCIsXG4gICAgdGVtcGxhdGVUaXRsZTogXCLmqKHmnb/moIfpophcIixcbiAgICB0ZW1wbGF0ZURlc2NyaXB0aW9uOiBcIuaooeadv+aPj+i/sFwiLFxuICAgIGFsbG93QWRkUGFuZWw6IFwi5YWB6K645re75Yqg6Z2i5p2/XCIsXG4gICAgYWxsb3dSZW1vdmVQYW5lbDogXCLlhYHorrjliKDpmaTpnaLmnb9cIixcbiAgICBwYW5lbENvdW50OiBcIumdouadv+aVsFwiLFxuICAgIG1pblBhbmVsQ291bnQ6IFwi5pyA5bCP6Z2i5p2/5pWwXCIsXG4gICAgbWF4UGFuZWxDb3VudDogXCLmnIDlpKfpnaLmnb/mlbBcIixcbiAgICBwYW5lbHNTdGF0ZTogXCJwYW5lbHNTdGF0ZVwiLFxuICAgIHBhbmVsQWRkVGV4dDogXCLmt7vliqDpnaLmnb/mlofmnKxcIixcbiAgICBwYW5lbFJlbW92ZVRleHQ6IFwi5Yig6Zmk6Z2i5p2/5paH5pysXCIsXG4gICAgcGFuZWxQcmV2VGV4dDogXCLliY3kuIDpobnmloflrZdcIixcbiAgICBwYW5lbE5leHRUZXh0OiBcIuS4i+S4gOmhueaWh+Wtl1wiLFxuICAgIHNob3dRdWVzdGlvbk51bWJlcnM6IFwi5pi+56S66Zeu6aKY57yW5Y+3XCIsXG4gICAgc2hvd1JhbmdlSW5Qcm9ncmVzczogXCJzaG93UmFuZ2VJblByb2dyZXNzXCIsXG4gICAgcmVuZGVyTW9kZTogXCLmuLLmn5PmqKHlvI9cIixcbiAgICB0ZW1wbGF0ZVRpdGxlTG9jYXRpb246IFwi5qih5p2/5qCH6aKY5L2N572uXCIsXG4gICAgcmF0ZVZhbHVlczogXCLmiZPliIblgLxcIixcbiAgICByYXRlTWluOiBcIuacgOWwj+WIhlwiLFxuICAgIHJhdGVNYXg6IFwi5pyA5aSn5YiGXCIsXG4gICAgcmF0ZVN0ZXA6IFwi5YiG5YC86Ze06LedXCIsXG4gICAgbWluUmF0ZURlc2NyaXB0aW9uOiBcIuacgOWwj+WIhuaPj+i/sFwiLFxuICAgIG1heFJhdGVEZXNjcmlwdGlvbjogXCLmnIDlpKfliIbmj4/ov7BcIixcbiAgICBpbnB1dFR5cGU6IFwiaW5wdXRUeXBlXCIsXG4gICAgc2l6ZTogXCJzaXplXCIsXG4gICAgbG9jYWxlOiBcIum7mOiupOivreiogFwiLFxuICAgIGZvY3VzRmlyc3RRdWVzdGlvbkF1dG9tYXRpYzogXCLmlLnlj5jpobXpnaLml7bogZrnhKblnKjnrKzkuIDkuKrpl67pophcIixcbiAgICBjb21wbGV0ZWRIdG1sOiBcIuWujOaIkOWQjueahEh0bWxcIixcbiAgICBjb21wbGV0ZWRCZWZvcmVIdG1sOiBcImNvbXBsZXRlZEJlZm9yZUh0bWxcIixcbiAgICBsb2FkaW5nSHRtbDogXCLliqDovb3pobXpnaJcIixcbiAgICB0cmlnZ2VyczogXCLop6blj5HlmahcIixcbiAgICBjb29raWVOYW1lOiBcIkNvb2tpZeWQje+8jOmBv+WFjeWkmuasoei/kOihjClcIixcbiAgICBzZW5kUmVzdWx0T25QYWdlTmV4dDogXCLliIfmjaLpobXml7bkv53lrZjnu5PmnpxcIixcbiAgICBzaG93TmF2aWdhdGlvbkJ1dHRvbnM6IFwi5pi+56S65a+86Iiq5oyJ6ZKuICjpu5jorqTlr7zoiKopXCIsXG4gICAgc2hvd1ByZXZCdXR0b246IFwi5pi+56S65YmN5LiA6aG15oyJ6ZKuICjnlKjmiLflj6/ov5Tlm57oh7PliY3kuIDpobXpnaIpXCIsXG4gICAgc2hvd1BhZ2VUaXRsZXM6IFwi5pi+56S66aG16Z2i5qCH6aKYXCIsXG4gICAgc2hvd0NvbXBsZXRlZFBhZ2U6IFwi57uT5bC+5bGV56S65a6M5oiQ5ZCO55qE6aG16Z2iIChjb21wbGV0ZWRIdG1sKVwiLFxuICAgIHNob3dQYWdlTnVtYmVyczogXCLmmL7npLrpobXmlbBcIixcbiAgICBxdWVzdGlvbkVycm9yTG9jYXRpb246IFwi6Zeu6aKY6ZSZ6K+v5a6a5L2NXCIsXG4gICAgc2hvd1Byb2dyZXNzQmFyOiBcIuaYvuekuui/m+W6puadoVwiLFxuICAgIG1vZGU6IFwi5qih5byPICjnvJbovpEv5Y+q6K+7KVwiLFxuICAgIGdvTmV4dFBhZ2VBdXRvbWF0aWM6IFwi5Zue562U5pys6aG15omA5pyJ6Zeu6aKY5ZCO77yM6Ieq5Yqo6Lez6L2s5Yiw5LiL5LiA6aG1XCIsXG4gICAgY2hlY2tFcnJvcnNNb2RlOiBcIuafpemUmeaooeW8j1wiLFxuICAgIGNsZWFySW52aXNpYmxlVmFsdWVzOiBcIua4hemZpOmakOiXj+WAvFwiLFxuICAgIHN0YXJ0U3VydmV5VGV4dDogXCLlvIDlp4vmjInpkq7mlofmnKxcIixcbiAgICBwYWdlUHJldlRleHQ6IFwi5YmN5LiA6aG15oyJ6ZKu5paH5pysXCIsXG4gICAgcGFnZU5leHRUZXh0OiBcIuWQjuS4gOmhteaMiemSruaWh+acrFwiLFxuICAgIGNvbXBsZXRlVGV4dDogXCLlrozmiJDmjInpkq7mlofmnKxcIixcbiAgICByZXF1aXJlZFRleHQ6IFwi6Zeu6aKY5b+F5aGr5qCH5b+XXCIsXG4gICAgcXVlc3Rpb25TdGFydEluZGV4OiBcIumXrumimOi1t+Wni+agh+W/lyAoMSwgMiBvciAnQScsICdhJylcIixcbiAgICBxdWVzdGlvblRpdGxlVGVtcGxhdGU6IFwi6Zeu6aKY5qCH6aKY5qih5p2/LCDpu5jorqTkuLo6ICd7bm99LiB7cmVxdWlyZX0ge3RpdGxlfSdcIixcbiAgICBmaXJzdFBhZ2VJc1N0YXJ0ZWQ6IFwi6LCD5p+l55qE56ys5LiA6aG16Z2i5Li66LW35aeL6aG1LlwiLFxuICAgIGlzU2luZ2xlUGFnZTogXCLlnKjkuIDkuKrpobXpnaLkuIrlsZXnpLrmiYDmnInlhYPntKBcIixcbiAgICBtYXhUaW1lVG9GaW5pc2hQYWdlOiBcIuWujOaIkOiwg+afpeS4remhtemdoueahOacgOmVv+aXtumXtFwiLFxuICAgIHNob3dUaW1lclBhbmVsOiBcIuaYvuekuuiuoeaXtuWZqOmdouadv1wiLFxuICAgIHNob3dUaW1lclBhbmVsTW9kZTogXCLmmL7npLrorqHml7blmajpnaLmnb/mqKHlvI9cIixcbiAgICBkZWZhdWx0UGFuZWxWYWx1ZTogXCLpu5jorqTpnaLmnb/lgLxcIixcbiAgICBkZWZhdWx0Um93VmFsdWU6IFwi6buY6K6k6KGM5YC8XCIsXG4gICAgaGFzTm9uZTogXCLpg73kuI3pgInpoblcIixcbiAgICBub25lVGV4dDogXCLml6DmlofmnKxcIixcbiAgICB0ZXh0OiBcIuaWh+acrFwiLFxuICAgIGRlZmF1bHRWYXVsZTogXCLpu5jorqTpgInpoblcIixcbiAgICBcInN1cnZleV90aXRsZVwiOiB7XG4gICAgICBuYW1lOiBcIuagh+mimFwiLFxuICAgICAgdGl0bGU6IFwi6Zeu5Y235qCH6aKY5Zyo5q+P6aG15LiK6YO95Lya5pi+56S6XCJcbiAgICB9LFxuICAgIFwicGFnZV90aXRsZVwiOiB7XG4gICAgICBuYW1lOiBcIuagh+mimFwiLFxuICAgICAgdGl0bGU6IFwi6aG16Z2i5qCH6aKYXCJcbiAgICB9XG4gIH1cbn07XG5cblxuZWRpdG9yTG9jYWxpemF0aW9uLmxvY2FsZXNbXCJ6aC1jblwiXSA9IHNpbXBsaWZpZWRDaGluZXNlVHJhbnNsYXRpb247XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvbG9jYWxpemF0aW9uL3NpbXBsaWZpZWQtY2hpbmVzZS50cyIsImltcG9ydCB7IGVkaXRvckxvY2FsaXphdGlvbiB9IGZyb20gXCIuLi9lZGl0b3JMb2NhbGl6YXRpb25cIjtcblxudmFyIHNwYW5pc2hUcmFuc2xhdGlvbiA9IHtcbiAgLy8gc3RyaW5ncyBmb3Igc3VydmV5IHRlbXBsYXRlc1xuICBzdXJ2ZXk6IHtcbiAgICBlZGl0OiBcIkVkaXRhclwiLFxuICAgIGRyb3BRdWVzdGlvbjpcbiAgICAgIFwiUG9yIGZhdm9yIGNvbG9xdWUgdW5hIHByZWd1bnRhIGFxdcOtIGRlIGxhIGNhamEgZGUgaGVycmFtaWVudGFzIGVuIGxhIGl6cXVpZXJkYS5cIixcbiAgICBjb3B5OiBcIkNvcGlhclwiLFxuICAgIGFkZFRvVG9vbGJveDogXCJBw7FhZGlyIGEgbGEgY2FqYSBkZSBoZXJyYW1pZW50YXNcIixcbiAgICBkZWxldGVQYW5lbDogXCJFbGltaW5hciBQYW5lbFwiLFxuICAgIGRlbGV0ZVF1ZXN0aW9uOiBcIkJvcnJhciBQcmVndW50YVwiLFxuICAgIGNvbnZlcnRUbzogXCJDb252ZXJ0aXIgYVwiLFxuICAgIGRyYWc6IFwiQXJyYXN0cmFyIEVsZW1lbnRvXCJcbiAgfSxcbiAgLy9xdWVzdGlvblR5cGVzXG4gIHF0OiB7XG4gICAgZGVmYXVsdDogXCJQcmVkZWZpbmlkb1wiLFxuICAgIGNoZWNrYm94OiBcIkNoZWNrYm94XCIsXG4gICAgY29tbWVudDogXCJDb21lbnRhcmlvXCIsXG4gICAgZHJvcGRvd246IFwiRHJvcGRvd25cIixcbiAgICBmaWxlOiBcIkFyY2hpdm9cIixcbiAgICBodG1sOiBcIkh0bWxcIixcbiAgICBtYXRyaXg6IFwiTWF0cml6IChlbGVjY2nDs24gw7puaWNhKVwiLFxuICAgIG1hdHJpeGRyb3Bkb3duOiBcIk1hdHJpeiAoZWxlY2Npw7NuIG3Dumx0aXBsZSlcIixcbiAgICBtYXRyaXhkeW5hbWljOiBcIk1hdHJpeiAoZmlsYXMgZGluw6FtaWNhcylcIixcbiAgICBtdWx0aXBsZXRleHQ6IFwiVGV4dG8gbcO6bHRpcGxlXCIsXG4gICAgcGFuZWw6IFwiUGFuZWxcIixcbiAgICBwYW5lbGR5bmFtaWM6IFwiUGFuZWwgKHBhbmVsZXMgZGluw6FtaWNvcylcIixcbiAgICByYWRpb2dyb3VwOiBcIkdydXBvIGRlIHJhZGlvXCIsXG4gICAgcmF0aW5nOiBcIlJhdGluZ1wiLFxuICAgIHRleHQ6IFwiRW50cmFkYSBzZW5jaWxsYVwiLFxuICAgIGJvb2xlYW46IFwiQm9vbGVhbm9cIixcbiAgICBleHByZXNzaW9uOiBcIkV4cHJlc2nDs25cIlxuICB9LFxuICAvL1N0cmluZ3MgaW4gRWRpdG9yXG4gIGVkOiB7XG4gICAgc3VydmV5OiBcIkVuY3Vlc3RhXCIsXG4gICAgc2V0dGluZ3M6IFwiQWp1c3RhciBFbmN1ZXN0YVwiLFxuICAgIGVkaXRTdXJ2ZXk6IFwiRWRpdGFyIEVuY3Vlc3RhXCIsXG4gICAgYWRkTmV3UGFnZTogXCJBw7FhZGlyIE51ZXZhIFDDoWdpbmFcIixcbiAgICBtb3ZlUmlnaHQ6IFwiTW92ZXJzZSBoYWNpYSBsYSBkZXJlY2hhXCIsXG4gICAgbW92ZUxlZnQ6IFwiTW92ZXJzZSBoYWNpYSBsYSBpenF1aWVyZGFcIixcbiAgICBkZWxldGVQYWdlOiBcIkJvcnJhciBQw6FnaW5hXCIsXG4gICAgZWRpdFBhZ2U6IFwiRWRpdGFyIFDDoWdpbmFcIixcbiAgICBlZGl0OiBcIkVkaXRhclwiLFxuICAgIG5ld1BhZ2VOYW1lOiBcInDDoWdpbmFcIixcbiAgICBuZXdRdWVzdGlvbk5hbWU6IFwicHJlZ3VudGFcIixcbiAgICBuZXdQYW5lbE5hbWU6IFwicGFuZWxcIixcbiAgICB0ZXN0U3VydmV5OiBcIlByb2JhciBFbmN1ZXN0YVwiLFxuICAgIHRlc3RTdXJ2ZXlBZ2FpbjogXCJQcm9iYXIgRW5jdWVzdGEgT3RyYSBWZXpcIixcbiAgICB0ZXN0U3VydmV5V2lkdGg6IFwiQW5jaG8gZGUgRW5jdWVzdGE6IFwiLFxuICAgIGVtYmVkU3VydmV5OiBcIkVtcG90cmFyIEVuY3Vlc3RhXCIsXG4gICAgc2F2ZVN1cnZleTogXCJHdWFyZGFyIEVuY3Vlc3RhXCIsXG4gICAgZGVzaWduZXI6IFwiRGlzZcOxYWRvciBkZSBFbmN1ZXN0YVwiLFxuICAgIGpzb25FZGl0b3I6IFwiRWRpdG9yIGRlIEpTT05cIixcbiAgICB1bmRvOiBcIkRlc2hhY2VyXCIsXG4gICAgcmVkbzogXCJSZWhhY2VyXCIsXG4gICAgb3B0aW9uczogXCJPcGNpb25lc1wiLFxuICAgIGdlbmVyYXRlVmFsaWRKU09OOiBcIkdlbmVyYXIgSlNPTiB2w6FsaWRvXCIsXG4gICAgZ2VuZXJhdGVSZWFkYWJsZUpTT046IFwiR2VuZXJhciBKU09OIGxlZ2libGVcIixcbiAgICB0b29sYm94OiBcIkNhamEgZGUgaGVycmFtaWVudGFzXCIsXG4gICAgdG9vbGJveEdlbmVyYWxDYXRlZ29yeTogXCJDYXRlZ29yw61hIEdlbmVyYWxcIixcbiAgICBkZWxTZWxPYmplY3Q6IFwiQm9ycmFyIG9iamV0byBzZWxlY2Npb25hZG9cIixcbiAgICBlZGl0U2VsT2JqZWN0OiBcIkVkaXRhciBvYmpldG8gc2VsZWNjaW9uYWRvXCIsXG4gICAgY29ycmVjdEpTT046IFwiUG9yIGZhdm9yIGNvcnJpamEgSlNPTi5cIixcbiAgICBzdXJ2ZXlSZXN1bHRzOiBcIlJlc3VsdGFkbyBkZSBFbmN1ZXN0YTogXCIsXG4gICAgbW9kaWZpZWQ6IFwiTW9kaWZpY2Fkb1wiLFxuICAgIHNhdmluZzogXCJTYWx2YW5kb1wiLFxuICAgIHNhdmVkOiBcIlNhbHZhZG9cIlxuICB9LFxuICAvL1Byb3BlcnR5IG5hbWVzIGluIHRhYmxlIGhlYWRlcnNcbiAgcGVsOiB7XG4gICAgaXNSZXF1aXJlZDogXCJSZXF1ZXJpZG8/XCJcbiAgfSxcbiAgLy9Qcm9wZXJ0eSBFZGl0b3JzXG4gIHBlOiB7XG4gICAgYXBwbHk6IFwiQXBsaWNhclwiLFxuICAgIG9rOiBcIk9LXCIsXG4gICAgY2FuY2VsOiBcIkNhbmNlbGFyXCIsXG4gICAgcmVzZXQ6IFwiUmVzdGF1cmFyXCIsXG4gICAgY2xvc2U6IFwiQ2VycmFyXCIsXG4gICAgZGVsZXRlOiBcIkJvcnJhclwiLFxuICAgIGFkZE5ldzogXCJBw7FhZGlyIG51ZXZvXCIsXG4gICAgYWRkSXRlbTogXCJDbGljayBwYXJhIGHDsWFkaXIgYXJ0aWN1bG8uLi5cIixcbiAgICByZW1vdmVBbGw6IFwiUXVpdGFyIHRvZG9zXCIsXG4gICAgZWRpdDogXCJFZGl0YXJcIixcbiAgICBpdGVtVmFsdWVFZGl0OiBcIlZpc2libGUgU2lcIixcbiAgICBlZGl0Q2hvaWNlczogXCJFZGl0YXIgT3BjaW9uZXNcIixcbiAgICBtb3ZlOiBcIk1vdmVyXCIsXG4gICAgZW1wdHk6IFwiPHZhY8Otbz5cIixcbiAgICBub3RFbXB0eTogXCI8ZWRpdGFyIHZhbG9yPlwiLFxuICAgIGZhc3RFbnRyeTogXCJFbnRyYWRhIHLDoXBpZGFcIixcbiAgICBmb3JtRW50cnk6IFwiRW50cmFyIGVuIGZvcm1hXCIsXG4gICAgdGVzdFNlcnZpY2U6IFwiUHJ1ZWJlIGVsIHNlcnZpY2lvXCIsXG4gICAgY29uZGl0aW9uU2VsZWN0UXVlc3Rpb246IFwiU2VsZWNjaW9uYXIgcHJlZ3VudGEuLi5cIixcbiAgICBjb25kaXRpb25WYWx1ZVF1ZXN0aW9uVGl0bGU6IFwiUG9yZmF2b3Igc2VsZWNjaW9uYSBlbCB2YWxvclwiLFxuICAgIGNvbmRpdGlvbkJ1dHRvbkFkZDogXCJBw7FhZGlyXCIsXG4gICAgY29uZGl0aW9uQnV0dG9uUmVwbGFjZTogXCJSZWVtcGxhemFyXCIsXG4gICAgY29uZGl0aW9uSGVscDpcbiAgICAgIFwiUG9yIGZhdm9yIHByb3BvcmNpb25lIHVuYSBleHByZXNpw7NuIGJvb2xlYW5hLiBEZWJlcsOtYSByZWdyZXNhciB2ZXJkYWRlcm8gcGFyYSBtYW50ZW5lciBsYSBwcmVndW50YS9ww6FnaW5hIHZpc2libGUuIFBvciBlamVtcGxvOiB7cHJlZ3VudGExfSA9ICd2YWxvcjEnIG9yICh7cHJlZ3VudGEyfSAqIHtwcmVndW50YTR9ICA+IDIwIGFuZCB7cHJlZ3VudGEzfSA8IDUpXCIsXG4gICAgZXhwcmVzc2lvbkhlbHA6XG4gICAgICBcIlBvciBmYXZvciBwcm9wb3JjaW9uZSB1bmEgZXhwcmVzacOzbi4gUHVlZGUgaGFjZXIgdXNvIGRlIGxsYXZlcyBwYXJhIHRlbmVyIGFjY2VzbyBhIGxvcyB2YWxvcmVzIGRlIGxhIHByZWd1bnRhOiAne3ByZWd1bnRhMX0gKyB7cHJlZ3VudGEyfScsICcoe3ByZWNpb30qe2NhbnRpZGFkfSkgKiAoMTAwIC0ge2Rlc2N1ZW50b30pJ1wiLFxuICAgIGFjZUVkaXRvckhlbHA6XG4gICAgICBcIlByZXNpb25lIGN0cmwrZXNwYWNpbyBwYXJhIG9idGVuZXIgdW4gaW5kaWNpbyBkZSBjb21wbGV0YWRvIGRlIGV4cHJlc2nDs25cIixcbiAgICBhY2VFZGl0b3JSb3dUaXRsZTogXCJGaWxhIGFjdHVhbFwiLFxuICAgIGFjZUVkaXRvclBhbmVsVGl0bGU6IFwiUGFuZWwgYWN0dWFsXCIsXG4gICAgc2hvd01vcmU6IFwiUG9yIGZhdm9yIHVzZSBsYSBkb2N1bWVudGFjacOzbiBwYXJhIG3DoXMgZGV0YWxsZXNcIixcbiAgICBjb25kaXRpb25TaG93TW9yZVVybDpcbiAgICAgIFwiaHR0cHM6Ly9zdXJ2ZXlqcy5pby9Eb2N1bWVudGF0aW9uL0xpYnJhcnlQYXJhbWV0ZXI/aWQ9UXVlc3Rpb24mcGFyYW1ldGVyPXZpc2libGVJZlwiLFxuICAgIGFzc2lzdGFudFRpdGxlOiBcIlByZWd1bnRhcyBkaXNwb25pYmxlczpcIixcbiAgICBjZWxsc0VtcHR5Um93c0NvbHVtbnM6IFwiRGViZSBoYWJlciBhbCBtZW5vcyB1bmEgY29sdW1uYSBvIGZpbGFcIixcbiAgICBwcm9wZXJ0eUlzRW1wdHk6IFwiUG9yIGZhdm9yIHByb3BvcmNpb25lIHVuIHZhbG9yXCIsXG4gICAgdmFsdWU6IFwiVmFsb3JcIixcbiAgICB0ZXh0OiBcIlRleHRvXCIsXG4gICAgY29sdW1uRWRpdDogXCJFZGl0YXIgY29sdW1uYTogezB9XCIsXG4gICAgaXRlbUVkaXQ6IFwiRWRpdGFyIGFydMOtY3VsbzogezB9XCIsXG4gICAgdXJsOiBcIlVSTFwiLFxuICAgIHBhdGg6IFwidHJheWVjdG9cIixcbiAgICB2YWx1ZU5hbWU6IFwiTm9tYnJlIGRlbCB2YWxvclwiLFxuICAgIHRpdGxlTmFtZTogXCJUw610dWxvXCIsXG4gICAgaGFzT3RoZXI6IFwiVGllbmUgb3RybyBhcnTDrWN1bG9cIixcbiAgICBvdGhlclRleHQ6IFwiVGV4dG8gZGUgb3RybyBhcnTDrWN1bG9cIixcbiAgICBuYW1lOiBcIk5vbWJyZVwiLFxuICAgIHRpdGxlOiBcIlTDrXR1bG9cIixcbiAgICBjZWxsVHlwZTogXCJUaXBvIGRlIGNlbGRhXCIsXG4gICAgY29sQ291bnQ6IFwiQ29udGVvIGRlIGNvbHVtbmFzXCIsXG4gICAgY2hvaWNlc09yZGVyOiBcIk9yZGVuIGRlIHNlbGVjY2nDs24gZGUgZWxlY2Npb25lc1wiLFxuICAgIHZpc2libGU6IFwiRXMgdmlzaWJsZT9cIixcbiAgICBpc1JlcXVpcmVkOiBcIkVzIHJlcXVlcmlkbz9cIixcbiAgICBzdGFydFdpdGhOZXdMaW5lOiBcIkVzIGluaWNpbyBjb24gbnVldmEgbMOtbmVhP1wiLFxuICAgIHJvd3M6IFwiQ29udGVvIGRlIGZpbGFzXCIsXG4gICAgcGxhY2VIb2xkZXI6IFwiTWFyY2Fkb3IgZGUgZW50cmFkYVwiLFxuICAgIHNob3dQcmV2aWV3OiBcIlNlIG11ZXN0cmEgYXZhbmNlIGRlIGltYWdlbj9cIixcbiAgICBzdG9yZURhdGFBc1RleHQ6XG4gICAgICBcIkd1YXJkYXIgY29udGVuaWRvIGRlIGFyY2hpdm8gZW4gcmVzdWx0YWRvIEpTT04gY29tbyB0ZXh0b1wiLFxuICAgIG1heFNpemU6IFwiVGFtYcOxbyBtw6F4aW1vIGRlIGFyY2hpdm8gZW4gYnl0ZXNcIixcbiAgICBpbWFnZUhlaWdodDogXCJBbHR1cmEgZGUgaW1hZ2VuXCIsXG4gICAgaW1hZ2VXaWR0aDogXCJBbmNobyBkZSBpbWFnZW5cIixcbiAgICByb3dDb3VudDogXCJDb250ZW8gZGUgZmlsYXNcIixcbiAgICBjb2x1bW5zTG9jYXRpb246IFwiQ29sdW1ucyBsb2NhdGlvblwiLFxuICAgIGFkZFJvd0xvY2F0aW9uOiBcIkFncmVnYXIgdWJpY2FjacOzbiBkZSBib3TDs24gZGUgZmlsYVwiLFxuICAgIGFkZFJvd1RleHQ6IFwiQcOxYWRpciB0ZXh0byBkZSBib3RvbiBkZSBmaWxhXCIsXG4gICAgcmVtb3ZlUm93VGV4dDogXCJRdWl0YXIgdGV4dG8gZGUgYm90b24gZGUgZmlsYVwiLFxuICAgIG1pblJhdGVEZXNjcmlwdGlvbjogXCJEZXNjcmlwY2nDs24gZGUgbGEgdGFzYSBtw61uaW1hXCIsXG4gICAgbWF4UmF0ZURlc2NyaXB0aW9uOiBcIkRlc2NyaXBjacOzbiBkZSBsYSB0YXJpZmEgbcOheGltYVwiLFxuICAgIGlucHV0VHlwZTogXCJUaXBvIGRlIGVudHJhZGFcIixcbiAgICBvcHRpb25zQ2FwdGlvbjogXCJMZXllbmRhIGRlIG9wY2lvbmVzXCIsXG4gICAgZGVmYXVsdFZhbHVlOiBcIlZhbG9yIGRlIGRlZmVjdG9cIixcbiAgICBjZWxsc0RlZmF1bHRSb3c6IFwiVGV4dG9zIGRlIGNlbGRhcyBwb3IgZGVmZWN0b1wiLFxuXG4gICAgc3VydmV5RWRpdG9yVGl0bGU6IFwiRWRpdGFyIGFqdXN0ZXMgZGUgZW5jdWVzdGFcIixcbiAgICBxRWRpdG9yVGl0bGU6IFwiRWRpdGFyOiB7MH1cIixcblxuICAgIC8vc3VydmV5XG4gICAgc2hvd1RpdGxlOiBcIk1vc3RyYXIvZXNjb25kZXIgdMOtdHVsb1wiLFxuICAgIGxvY2FsZTogXCJMZW5ndWFqZSBkZSBkZWZlY3RvXCIsXG4gICAgbW9kZTogXCJNb2RvIChlZGl0YXIvc29sbyBsZWN0dXJhKVwiLFxuICAgIGNsZWFySW52aXNpYmxlVmFsdWVzOiBcIkJvcnJhciB2YWxvcmVzIGludmlzaWJsZXNcIixcbiAgICBjb29raWVOYW1lOlxuICAgICAgXCJOb21icmUgZGUgQ29va2llIChwYXJhIGRlc2hhYmlsaXRhciBjb3JyYSBlbmN1ZXN0YSBkb3MgdmVjZXMgbG9jYWxtZW50ZSlcIixcbiAgICBzZW5kUmVzdWx0T25QYWdlTmV4dDogXCJNYW5kYXIgcmVzdWx0YWRvcyBkZSBlbmN1ZXN0YSBlbiBww6FnaW5hIHNpZ3VpZW50ZVwiLFxuICAgIHN0b3JlT3RoZXJzQXNDb21tZW50OiBcIkd1YXJkYXIgdmFsb3IgJ290cm9zJyBlbiBjYW1wbyBzZXBhcmFkb1wiLFxuICAgIHNob3dQYWdlVGl0bGVzOiBcIk1vc3RyYXIgdMOtdHVsb3MgZGUgcMOhZ2luYVwiLFxuICAgIHNob3dQYWdlTnVtYmVyczogXCJNb3N0cmFyIG7Dum1lcm9zIGRlIHDDoWdpbmFcIixcbiAgICBwYWdlUHJldlRleHQ6IFwiVGV4dG8gZGUgYm90w7NuIGRlIHDDoWdpbmEgcHJldmlhXCIsXG4gICAgcGFnZU5leHRUZXh0OiBcIlRleHRvIGRlIGJvdMOzbiBkZSBww6FnaW5hIHByw7N4aW1hXCIsXG4gICAgY29tcGxldGVUZXh0OiBcIlRleHRvIGRlIGJvdMOzbiBkZSBjb21wbGV0YWRvXCIsXG4gICAgc3RhcnRTdXJ2ZXlUZXh0OiBcIlRleHRvIGRlIGJvdMOzbiBkZSBpbmljaW9cIixcbiAgICBzaG93TmF2aWdhdGlvbkJ1dHRvbnM6XG4gICAgICBcIk1vc3RyYXIgYm90b25lcyBkZSBuYXZpZ2FjacOzbiAobmF2ZWdhY2nDs24gZGUgZGVmZWN0bylcIixcbiAgICBzaG93UHJldkJ1dHRvbjpcbiAgICAgIFwiTW9zdHJhciBib3TDs24gcHJldmlvIChlbCB1c3VhcmlvIHB1ZWRlIHJlZ3Jlc2FyIGVuIHDDoWdpbmEgcHJldmlhKVwiLFxuICAgIGZpcnN0UGFnZUlzU3RhcnRlZDpcbiAgICAgIFwiTGEgcHJpbWVyYSBww6FnaW5hIGVuIGxhIGVuY3Vlc3RhIGVzIHVuYSBww6FnaW5hIGluaWNpYWRhLlwiLFxuICAgIHNob3dDb21wbGV0ZWRQYWdlOiBcIk1vc3RyYXIgbGEgcMOhZ2luYSBjb21wbGV0YWRhIGFsIGZpbmFsIChjb21wbGV0ZWRIdG1sKVwiLFxuICAgIGdvTmV4dFBhZ2VBdXRvbWF0aWM6XG4gICAgICBcIkFsIGNvbnRlc3RhciB0b2RhcyBsYXMgcHJlZ3VudGFzLCBpciBhIGxhIHByw7N4aW1hIHDDoWdpbmEgYXV0b23DoXRpY2FtZW50ZVwiLFxuICAgIHNob3dQcm9ncmVzc0JhcjogXCJNb3N0cmFyIGJhcnJhIGRlIHByb2dyZXNvXCIsXG4gICAgcXVlc3Rpb25UaXRsZUxvY2F0aW9uOiBcIkxvY2FsaXphY2nDs24gZGUgdMOtdHVsbyBkZSBwcmVndW50YVwiLFxuICAgIHJlcXVpcmVkVGV4dDogXCJMYSBwcmVndW50YSByZXF1aWVyZSBkZSBzw61tYm9sbyhzKVwiLFxuICAgIHF1ZXN0aW9uU3RhcnRJbmRleDogXCLDjW5kaWNlIGRlIGluaWNpbyBkZSBwcmVndW50YSAoMSwgMiBvICdBJywgJ2EnKVwiLFxuICAgIHNob3dRdWVzdGlvbk51bWJlcnM6IFwiTW9zdHJhciBuw7ptZXJvcyBkZSBwcmVndW50YXNcIixcbiAgICBxdWVzdGlvblRpdGxlVGVtcGxhdGU6XG4gICAgICBcIlBsYW50aWxsYSBkZSB0w610dWxvIGRlIHByZWd1bnRhLCBkZWZlY3RvIGVzOiAne25vfS4ge3JlcXVpcmV9IHt0aXRsZX0nXCIsXG4gICAgcXVlc3Rpb25FcnJvckxvY2F0aW9uOiBcIkVycm9yIGVuIHVidWNhY2nDs24gZGUgbGEgcHJlZ3VudGFcIixcbiAgICBmb2N1c0ZpcnN0UXVlc3Rpb25BdXRvbWF0aWM6XG4gICAgICBcIkZvY28gZW4gcHJpbWVyYSBwcmVndW50YSBhbCBjYW1iaWFyIGxhIHDDoWdpbmFcIixcbiAgICBxdWVzdGlvbnNPcmRlcjogXCLDk3JkZW4gZGUgZWxlbWVudG9zIGVuIGxhIHDDoWdpbmFcIixcbiAgICBtYXhUaW1lVG9GaW5pc2g6IFwiVGllbXBvIG3DoXhpbW8gcGFyYSBmaW5hbGl6YXIgbGEgZW5jdWVzdGFcIixcbiAgICBtYXhUaW1lVG9GaW5pc2hQYWdlOlxuICAgICAgXCJUaWVtcG8gbcOheGltbyBwYXJhIGZpbmFsaXphciB1bmEgcMOhZ2luYSBlbiBsYSBlbmN1ZXN0YVwiLFxuICAgIHNob3dUaW1lclBhbmVsOiBcIk1vc3RyYXIgcGFuZWwgZGUgdGVtcG9yaXphZG9yXCIsXG4gICAgc2hvd1RpbWVyUGFuZWxNb2RlOiBcIk1vZG8gZGUgbXVlc3RyYSBkZSBwYW5lbCBkZSB0ZW1wb3JpemFkb3JcIixcbiAgICByZW5kZXJNb2RlOiBcIk1vZG8gZGUgaW50ZXJwcmV0YWRvclwiLFxuICAgIGFsbG93QWRkUGFuZWw6IFwiUGVybWl0aXIgYWRpY2nDs24gZGUgdW4gcGFuZWxcIixcbiAgICBhbGxvd1JlbW92ZVBhbmVsOiBcIlBlcm1pdGlyIHJlbW9jacOzbiBkZWwgcGFuZWxcIixcbiAgICBwYW5lbEFkZFRleHQ6IFwiQcOxYWRpZW5kbyB0ZXh0byBkZSBwYW5lbFwiLFxuICAgIHBhbmVsUmVtb3ZlVGV4dDogXCJRdWl0YW5kbyB0ZXh0byBkZSBwYW5lbFwiLFxuICAgIGlzU2luZ2xlUGFnZTogXCJNb3N0cmFyIHRvZG9zIGxvcyBlbGVtZW50b3MgZW4gdW5hIHDDoWdpbmFcIixcblxuICAgIHRhYnM6IHtcbiAgICAgIGdlbmVyYWw6IFwiR2VuZXJhbFwiLFxuICAgICAgZmlsZU9wdGlvbnM6IFwiT3BjaW9uZXNcIixcbiAgICAgIGh0bWw6IFwiRWRpdG9yIEh0bWxcIixcbiAgICAgIGNvbHVtbnM6IFwiQ29sdW1uYXNcIixcbiAgICAgIHJvd3M6IFwiRmlsYXNcIixcbiAgICAgIGNob2ljZXM6IFwiT3BjaW9uZXNcIixcbiAgICAgIGl0ZW1zOiBcIkVsZW1lbnRvc1wiLFxuICAgICAgdmlzaWJsZUlmOiBcIlZpc2libGUgU2lcIixcbiAgICAgIGVuYWJsZUlmOiBcIkhhYmlsaXRhciBTaVwiLFxuICAgICAgcmF0ZVZhbHVlczogXCJWYWxvcmVzIGRlIHRhc2FcIixcbiAgICAgIGNob2ljZXNCeVVybDogXCJPcGNpb25lcyBkZSBsYSBXZWJcIixcbiAgICAgIG1hdHJpeENob2ljZXM6IFwiT3BjaW9uZXMgZGUgZGVmZWN0b1wiLFxuICAgICAgbXVsdGlwbGVUZXh0SXRlbXM6IFwiRW50cmFkYXMgZGUgdGV4dG9cIixcbiAgICAgIHZhbGlkYXRvcnM6IFwiVmFsaWRhZG9yZXNcIixcbiAgICAgIG5hdmlnYXRpb246IFwiTmF2ZWdhY2nDs25cIixcbiAgICAgIHF1ZXN0aW9uOiBcIlByZWd1bnRhXCIsXG4gICAgICBjb21wbGV0ZWRIdG1sOiBcIkh0bWwgQ29tcGxldGFkb1wiLFxuICAgICAgbG9hZGluZ0h0bWw6IFwiQ2FyZ2FuZG8gSHRtbFwiLFxuICAgICAgdGltZXI6IFwiVGVtcG9yaXphZG9yL1F1aXpcIixcbiAgICAgIHRyaWdnZXJzOiBcIkRpc3BhcmFkb3Jlc1wiLFxuICAgICAgdGVtcGxhdGVUaXRsZTogXCJUw610dWxvIGRlIHBsYW50aWxsYVwiXG4gICAgfSxcbiAgICBlZGl0UHJvcGVydHk6IFwiRWRpdGFyIHByb3BpZWRhZCAnezB9J1wiLFxuICAgIGl0ZW1zOiBcIlsgSXRlbXM6IHswfSBdXCIsXG5cbiAgICBlbnRlck5ld1ZhbHVlOiBcIlBvciBmYXZvciwgcHJvcG9yY2lvbmUgZWwgdmFsb3IuXCIsXG4gICAgbm9xdWVzdGlvbnM6IFwiTm8gaGF5IG5pIHVuYSBwcmVndW50YSBlbiBsYSBlbmN1ZXN0YS5cIixcbiAgICBjcmVhdGV0cmlnZ2VyOiBcIlBvciBmYXZvciBjcmVlIHVuIGRpc3BhcmFkb3JcIixcbiAgICB0cmlnZ2VyT246IFwiRW4gXCIsXG4gICAgdHJpZ2dlck1ha2VQYWdlc1Zpc2libGU6IFwiSGFjZXIgcMOhZ2luYXMgdmlzaWJsZXM6XCIsXG4gICAgdHJpZ2dlck1ha2VRdWVzdGlvbnNWaXNpYmxlOiBcIkhhY2VyIGVsZW1lbnRvcyB2aXNpYmxlczpcIixcbiAgICB0cmlnZ2VyQ29tcGxldGVUZXh0OiBcIkNvbXBsZXRlIGxhIGVuY3Vlc3RhIGVuIGNhc28gZGUgw6l4aXRvLlwiLFxuICAgIHRyaWdnZXJOb3RTZXQ6IFwiRWwgZGlzcGFyYWRvciBubyBlc3TDoSBjb25maWd1cmFkb1wiLFxuICAgIHRyaWdnZXJSdW5JZjogXCJDb3JyZXIgc2lcIixcbiAgICB0cmlnZ2VyU2V0VG9OYW1lOiBcIkNhbWJpYXIgdmFsb3IgZGU6IFwiLFxuICAgIHRyaWdnZXJTZXRWYWx1ZTogXCJhOiBcIixcbiAgICB0cmlnZ2VySXNWYXJpYWJsZTogXCJObyBwb25lciBsYSB2YXJpYWJsZSBlbiBlbCByZXN1bHRhZG8gZGUgbGEgZW5jdWVzdGEuXCJcbiAgfSxcbiAgLy9Qcm9wZXJ0eSB2YWx1ZXNcbiAgcHY6IHtcbiAgICB0cnVlOiBcInZlcmRhZGVyb1wiLFxuICAgIGZhbHNlOiBcImZhbHNvXCIsXG4gICAgaW5oZXJpdDogXCJoZXJlZGFyXCIsXG4gICAgc2hvdzogXCJtb3N0cmFyXCIsXG4gICAgaGlkZTogXCJvY3VsdGFyXCIsXG4gICAgZGVmYXVsdDogXCJwcmVkZWZpbmlkb1wiLFxuICAgIGluaXRpYWw6IFwiaW5pY2lhbFwiLFxuICAgIHJhbmRvbTogXCJhbGVhdG9yaW9cIixcbiAgICBjb2xsYXBzZWQ6IFwiY29sYXBzYWRvXCIsXG4gICAgZXhwYW5kZWQ6IFwiZXhwYW5kaWRvXCIsXG4gICAgbm9uZTogXCJuaW5ndW5hXCIsXG4gICAgYXNjOiBcImFzY2VuZGVudGVcIixcbiAgICBkZXNjOiBcImRlc2NlbmRlbnRlXCIsXG4gICAgaW5kZXRlcm1pbmF0ZTogXCJpbmRldGVybWluYWRvXCIsXG4gICAgZGVjaW1hbDogXCJkZWNpbWFsXCIsXG4gICAgY3VycmVuY3k6IFwibW9uZWRhXCIsXG4gICAgcGVyY2VudDogXCJwb3IgY2llbnRvXCIsXG4gICAgZmlyc3RFeHBhbmRlZDogXCJwcmltZXJvRXhwYW5kaWRvXCIsXG4gICAgb2ZmOiBcImFwYWdhZG9cIixcbiAgICBvblBhbmVsOiBcIm9uUGFuZWxcIixcbiAgICBvblN1cnZleTogXCJvblN1cnZleVwiLFxuICAgIGxpc3Q6IFwibGlzdGFcIixcbiAgICBwcm9ncmVzc1RvcDogXCJwcm9ncmVzb0FycmliYVwiLFxuICAgIHByb2dyZXNzQm90dG9tOiBcInByb2dyZXNvQWJham9cIixcbiAgICBwcm9ncmVzc1RvcEJvdHRvbTogXCJwcm9ncmVzb0FycmliYUFiYWpvXCIsXG4gICAgaG9yaXpvbnRhbDogXCJob3Jpem9udGFsXCIsXG4gICAgdmVydGljYWw6IFwidmVydGljYWxcIixcbiAgICB0b3A6IFwiYXJyaWJhXCIsXG4gICAgYm90dG9tOiBcImFiYWpvXCIsXG4gICAgdG9wQm90dG9tOiBcImFycmliYSB5IGFiYWpvXCIsXG4gICAgbGVmdDogXCJpenF1aWVyZGFcIixcbiAgICBjb2xvcjogXCJjb2xvclwiLFxuICAgIGRhdGU6IFwiZmVjaGFcIixcbiAgICBkYXRldGltZTogXCJmZWNoYSB5IGhvcmFcIixcbiAgICBcImRhdGV0aW1lLWxvY2FsXCI6IFwiZmVjaGFIb3JhLWxvY2FsXCIsXG4gICAgZW1haWw6IFwiY29ycmVvIGVsZWN0csOzbmljb1wiLFxuICAgIG1vbnRoOiBcIm1lc1wiLFxuICAgIG51bWJlcjogXCJuw7ptZXJvXCIsXG4gICAgcGFzc3dvcmQ6IFwiY29udHJhc2XDsWFcIixcbiAgICByYW5nZTogXCJyYW5nb1wiLFxuICAgIHRlbDogXCJ0ZWzDqWZvbm9cIixcbiAgICB0ZXh0OiBcInRleHRvXCIsXG4gICAgdGltZTogXCJ0aWVtcG9cIixcbiAgICB1cmw6IFwidXJsXCIsXG4gICAgd2VlazogXCJzZW1hbmFcIixcbiAgICBoaWRkZW46IFwib2N1bHRvXCIsXG4gICAgb246IFwiZW5jZW5kaWRvXCIsXG4gICAgb25QYWdlOiBcIm9uUGFnZVwiLFxuICAgIGVkaXQ6IFwiZWRpdGFyXCIsXG4gICAgZGlzcGxheTogXCJtb3N0cmFyXCIsXG4gICAgb25Db21wbGV0ZTogXCJDdWFuZG8gc2UgY29tcGxldGVcIixcbiAgICBvbkhpZGRlbjogXCJDdWFuZG8gc2Ugb2N1bHRlXCIsXG4gICAgYWxsOiBcInRvZG9cIixcbiAgICBwYWdlOiBcInDDoWdpbmFcIixcbiAgICBzdXJ2ZXk6IFwiZW5jdWVzdGFcIixcbiAgICBvbk5leHRQYWdlOiBcIkN1YW5kbyBzZSBjYW1iaWUgZGUgcMOhZ2luYVwiLFxuICAgIG9uVmFsdWVDaGFuZ2VkOiBcIkN1YW5kbyBlbCB2YWxvciBjYW1iaWVcIlxuICB9LFxuICAvL09wZXJhdG9yc1xuICBvcDoge1xuICAgIGVtcHR5OiBcImVzIHZhY8Otb1wiLFxuICAgIG5vdGVtcHR5OiBcIm5vIGVzIHZhY8Otb1wiLFxuICAgIGVxdWFsOiBcImlndWFsIGFcIixcbiAgICBub3RlcXVhbDogXCJubyBpZ3VhbCBhXCIsXG4gICAgY29udGFpbnM6IFwiY29udGllbmVcIixcbiAgICBub3Rjb250YWluczogXCJubyBjb250aWVuZVwiLFxuICAgIGdyZWF0ZXI6IFwibWF5b3JcIixcbiAgICBsZXNzOiBcIm1lbm9yXCIsXG4gICAgZ3JlYXRlcm9yZXF1YWw6IFwibWF5b3IgbyBpZ3VhbCBhXCIsXG4gICAgbGVzc29yZXF1YWw6IFwibWVub3Igb3IgaWd1YWwgYVwiXG4gIH0sXG4gIC8vRW1iZWQgd2luZG93XG4gIGV3OiB7XG4gICAgYW5ndWxhcjogXCJVc2UgdmVyc2nDs24gQW5ndWxhclwiLFxuICAgIGpxdWVyeTogXCJVc2UgdmVyc2nDs24galF1ZXJ5XCIsXG4gICAga25vY2tvdXQ6IFwiVXNlIHZlcnNpw7NuIEtub2Nrb3V0XCIsXG4gICAgcmVhY3Q6IFwiVXNlIHZlcnNpw7NuIFJlYWN0XCIsXG4gICAgdnVlOiBcIlVzZSB2ZXJzacOzbiBWdWVcIixcbiAgICBib290c3RyYXA6IFwiUGFyYSBlbnRvcm5vIGJvb3RzdHJhcFwiLFxuICAgIHN0YW5kYXJkOiBcIk5vIGJvb3RzdHJhcFwiLFxuICAgIHNob3dPblBhZ2U6IFwiTW9zdHJhciBlbmN1ZXN0YSBlbiB1bmEgcMOhZ2luYVwiLFxuICAgIHNob3dJbldpbmRvdzogXCJNb3N0cmFyIGVuY3Vlc3RhIGVuIHVuYSB2ZW50YW5hXCIsXG4gICAgbG9hZEZyb21TZXJ2ZXI6IFwiQ2FyZ2FyIEpTT04gZGUgZW5jdWVzdGEgZGVsIHNlcnZpZG9yXCIsXG4gICAgdGl0bGVTY3JpcHQ6IFwiU2NyaXB0cyB5IGVzdGlsb3NcIixcbiAgICB0aXRsZUh0bWw6IFwiSFRNTFwiLFxuICAgIHRpdGxlSmF2YVNjcmlwdDogXCJKYXZhU2NyaXB0XCJcbiAgfSxcbiAgLy9UZXN0IFN1cnZleVxuICB0czoge1xuICAgIHNlbGVjdFBhZ2U6IFwiU2VsZWNjaW9uZSBsYSBww6FnaW5hIHBhcmEgcHJvYmFybGE6XCJcbiAgfSxcbiAgdmFsaWRhdG9yczoge1xuICAgIGFuc3dlcmNvdW50dmFsaWRhdG9yOiBcImN1ZW50YSBkZSByZXNwdWVzdGFzXCIsXG4gICAgZW1haWx2YWxpZGF0b3I6IFwiZS1tYWlsXCIsXG4gICAgZXhwcmVzc2lvbnZhbGlkYXRvcjogXCJleHByZXNpw7NuXCIsXG4gICAgbnVtZXJpY3ZhbGlkYXRvcjogXCJudW1lcmljb1wiLFxuICAgIHJlZ2V4dmFsaWRhdG9yOiBcInJlZ2V4XCIsXG4gICAgdGV4dHZhbGlkYXRvcjogXCJ0ZXh0b1wiXG4gIH0sXG4gIHRyaWdnZXJzOiB7XG4gICAgY29tcGxldGV0cmlnZ2VyOiBcImVuY3Vlc3RhIGNvbXBsZXRhXCIsXG4gICAgc2V0dmFsdWV0cmlnZ2VyOiBcInZhbG9yIGFqdXN0YWRvXCIsXG4gICAgdmlzaWJsZXRyaWdnZXI6IFwiY2FtYmlvIGRlIHZpc2liaWxpZGFkXCJcbiAgfSxcbiAgLy9Qcm9wZXJ0aWVzXG4gIHA6IHtcbiAgICBuYW1lOiBcIm5vbWJyZVwiLFxuICAgIHRpdGxlOiB7XG4gICAgICBuYW1lOiBcInTDrXR1bG9cIixcbiAgICAgIHRpdGxlOiBcIkRlamFybG8gdmFjw61vLCBzaSBlcyBpZ3VhbCBxdWUgJ05vbWJyZSdcIlxuICAgIH0sXG4gICAgcGFnZV90aXRsZTogeyBuYW1lOiBcInTDrXR1bG9cIiwgdGl0bGU6IFwiVMOtdHVsbyBkZSBww6FnaW5hXCIgfSxcblxuICAgIG5hdmlnYXRpb25CdXR0b25zVmlzaWJpbGl0eTogXCJWaXNpYmlsaWRhZCBkZSBib3RvbmVzIGRlIG5hdmVnYWNpw7NuXCIsXG4gICAgcXVlc3Rpb25zT3JkZXI6IFwiT3JkZW4gZGUgbGFzIHByZWd1bnRhc1wiLFxuICAgIG1heFRpbWVUb0ZpbmlzaDogXCJUaWVtcG8gbcOheGltbyBwYXJhIHRlcm1pbmFyXCIsXG5cbiAgICB2aXNpYmxlOiBcIlZpc2libGVcIixcbiAgICB2aXNpYmxlSWY6IFwiVmlzaWJsZSBTaVwiLFxuICAgIHF1ZXN0aW9uVGl0bGVMb2NhdGlvbjogXCJwcmVndW50YVRpdHVsb0xvY2FjaW9uXCIsXG4gICAgZGVzY3JpcHRpb246IFwiRGVzY3JpcGNpw7NuXCIsXG4gICAgc3RhdGU6IFwiRXN0YWRvXCIsXG4gICAgaXNSZXF1aXJlZDogXCJFcyBSZXF1ZXJpZG9cIixcbiAgICBpbmRlbnQ6IFwiSW5kZW50YXJcIixcbiAgICByZXF1aXJlZEVycm9yVGV4dDogXCJUZXh0byBkZWwgZXJyb3JcIixcbiAgICBzdGFydFdpdGhOZXdMaW5lOiBcIkNvbWVuemFyIGNvbiB1bmEgbnVldmEgbMOtbmVhXCIsXG4gICAgaW5uZXJJbmRlbnQ6IFwiSWRlbnRhY2nDs24gaW50ZXJuYVwiLFxuICAgIHBhZ2U6IFwiUMOhZ2luYVwiLFxuXG4gICAgd2lkdGg6IFwiQW5jaG9cIixcblxuICAgIGNvbW1lbnRUZXh0OiBcIlRleHRvIGRlbCBDb21lbnRhcmlvXCIsXG4gICAgdmFsdWVOYW1lOiBcIk5vbWJyZSBkZWwgdmFsb3JcIixcbiAgICBlbmFibGVJZjogXCJIYWJpbGl0YWRvIFNpXCIsXG4gICAgZGVmYXVsdFZhbHVlOiBcIlZhbG9yIHBvciBkZWZlY3RvXCIsXG4gICAgY29ycmVjdEFuc3dlcjogXCJSZXNwdWVzdGEgY29ycmVjdGFcIixcbiAgICByZWFkT25seTogXCJTb2xvIExlY3R1cmFcIixcbiAgICB2YWxpZGF0b3JzOiBcIlZhbGlkYWRvcmVzXCIsXG4gICAgdGl0bGVMb2NhdGlvbjogXCJUaXR1bG8gZGUgbGEgdWJpY2FjacOzblwiLFxuXG4gICAgaGFzQ29tbWVudDogXCJUaWVuZSBDb21lbnRhcmlvXCIsXG4gICAgaGFzT3RoZXI6IFwiVGllbmUgT3Ryb1wiLFxuICAgIGNob2ljZXM6IFwiRWxlY2Npb25lc1wiLFxuICAgIGNob2ljZXNPcmRlcjogXCJPcmRlbiBkZSBsYXMgb3BjaW9uZXNcIixcbiAgICBjaG9pY2VzQnlVcmw6IFwiT3BjaW9uZXMgcG9yIFVSTFwiLFxuICAgIG90aGVyVGV4dDogXCJPdHJvIFRleHRvXCIsXG4gICAgb3RoZXJFcnJvclRleHQ6IFwiVGV4dG8gZGVsIGVycm9yIHBhcmEgb3Ryb1wiLFxuICAgIHN0b3JlT3RoZXJzQXNDb21tZW50OiBcIkd1YXJkYXIgb3Ryb3MgY29tbyBjb21lbnRhcmlvXCIsXG5cbiAgICBsYWJlbDogXCJFdGlxdWV0YVwiLFxuICAgIHNob3dUaXRsZTogXCJNb3N0cmFyIFTDrXR1bG9cIixcbiAgICB2YWx1ZVRydWU6IFwiVmFsb3IgVmVyZGFkZXJvXCIsXG4gICAgdmFsdWVGYWxzZTogXCJWYWxvciBGYWxzb1wiLFxuXG4gICAgY29sczogXCJDb2x1bW5hc1wiLFxuICAgIHJvd3M6IFwiRmlsYXNcIixcbiAgICBwbGFjZUhvbGRlcjogXCJNYXJjYWRvciBkZSBlbnRyYWRhXCIsXG5cbiAgICBvcHRpb25zQ2FwdGlvbjogXCJPcGNpb25lcyBkZSBUw610dWxvXCIsXG5cbiAgICBleHByZXNzaW9uOiBcIkV4cHJlc2nDs25cIixcbiAgICBmb3JtYXQ6IFwiRm9ybWF0b1wiLFxuICAgIGRpc3BsYXlTdHlsZTogXCJFc3RpbG8gZGUgdmlzdWFsaXphY2nDs25cIixcbiAgICBjdXJyZW5jeTogXCJNb25lZGFcIixcbiAgICB1c2VHcm91cGluZzogXCJVc2FyIGFncnVwYWNpw7NuXCIsXG5cbiAgICBzaG93UHJldmlldzogXCJNb3N0cmFyIHZpc3RhIHByZXZpYVwiLFxuICAgIGFsbG93TXVsdGlwbGU6IFwiUGVybWl0aXIgbcO6bHRpcGxlc1wiLFxuICAgIGltYWdlSGVpZ2h0OiBcIkFsdHVyYSBkZSBsYSBpbWFnZW5cIixcbiAgICBpbWFnZVdpZHRoOiBcIkFuY2hvIGRlIGxhIGltYWdlblwiLFxuICAgIHN0b3JlRGF0YUFzVGV4dDogXCJBbG1hY2VuYXIgZGF0b3MgY29tbyB0ZXh0b1wiLFxuICAgIG1heFNpemU6IFwiVGFtYcOxbyBtw6F4aW1vXCIsXG5cbiAgICBodG1sOiBcImh0bWxcIixcblxuICAgIGNvbHVtbnM6IFwiY29sdW1uYXNcIixcbiAgICBjZWxsczogXCJjZWxkYXNcIixcbiAgICBpc0FsbFJvd1JlcXVpcmVkOiBcIlNlIHJlcXVpZXJlbiB0b2RhcyBsYXMgZmlsYXNcIixcblxuICAgIGhvcml6b250YWxTY3JvbGw6IFwiRGVzcGxhemFtaWVudG8gaG9yaXpvbnRhbFwiLFxuICAgIGNlbGxUeXBlOiBcIlRpcG8gZGUgY2VsZGFcIixcbiAgICBjb2x1bW5zTG9jYXRpb246IFwiQ29sdW1uYXMgZGUgTG9jYWNpw7NuXCIsXG4gICAgY29sdW1uQ29sQ291bnQ6IFwiQ29udGVvIGRlIGNvbHVtbmFcIixcbiAgICBjb2x1bW5NaW5XaWR0aDogXCJBbmNobyBtw61uaW1vIGRlIGNvbHVtbmFcIixcblxuICAgIHJvd0NvdW50OiBcIkNvbnRlbyBkZSBmaWxhXCIsXG4gICAgbWluUm93Q291bnQ6IFwiQ29udGVvIG3DrW5pbWEgZGUgZmlsYVwiLFxuICAgIG1heFJvd0NvdW50OiBcIkNvbnRlbyBtw6F4aW1hIGRlIGZpbGFcIixcbiAgICBrZXlOYW1lOiBcIk5vbWJyZSBjbGF2ZVwiLFxuICAgIGtleUR1cGxpY2F0aW9uRXJyb3I6IFwiTWVuc2FqZSBkZSBlcnJvciBwYXJhIGNsYXZlIGRlIGR1cGxpY2FkYVwiLFxuICAgIGNvbmZpcm1EZWxldGU6IFwiQ29uZmlybWFjacOzbiBkZSBlbGltaW5hY2nDs25cIixcbiAgICBjb25maXJtRGVsZXRlVGV4dDogXCJUZXh0byBkZSBsYSBjb25maXJtYWNpw7NuIHBhcmEgZWxpbWluYWNpw7NuXCIsXG4gICAgYWRkUm93TG9jYXRpb246IFwiQWdyZWdhIGZpbGEgZGUgdWJpY2FjacOzblwiLFxuICAgIGFkZFJvd1RleHQ6IFwiQWdyZWdhciB0ZXh0byBkZSBsYSBmaWxhXCIsXG4gICAgcmVtb3ZlUm93VGV4dDogXCJRdWl0YXIgdGV4dG8gZGUgbGEgZmlsYVwiLFxuXG4gICAgaXRlbXM6IFwiw610ZW1zXCIsXG4gICAgaXRlbVNpemU6IFwiVGFtYcOxbyBkZWwgw610ZW1cIixcbiAgICBjb2xDb3VudDogXCJDb250ZW8gZGUgY29sdW1uYXNcIixcblxuICAgIHRlbXBsYXRlVGl0bGU6IFwiVMOtdHVsbyBkZSBsYSBwbGFudGlsbGFcIixcbiAgICB0ZW1wbGF0ZURlc2NyaXB0aW9uOiBcIkRlc2NyaXBjacOzbiBkZSBsYSBwbGF0aWxsYVwiLFxuICAgIGFsbG93QWRkUGFuZWw6IFwiUGVybWl0aXIgYWdyZWdhciBwYW5lbFwiLFxuICAgIGFsbG93UmVtb3ZlUGFuZWw6IFwiUGVybWl0aXIgZWxpbWluYXIgcGFuZWxcIixcbiAgICBwYW5lbENvdW50OiBcIkNvbnRlbyBkZSBwYW5lbFwiLFxuICAgIG1pblBhbmVsQ291bnQ6IFwiQ29udGVvIG3DrW5pbW8gZGUgcGFuZWxcIixcbiAgICBtYXhQYW5lbENvdW50OiBcIkNvbnRlbyBtw6F4aW1vIGRlIHBhbmVsXCIsXG4gICAgcGFuZWxzU3RhdGU6IFwiUGFuZWxlcyBkZSBFc3RhZG9cIixcbiAgICBwYW5lbEFkZFRleHQ6IFwiQWdyZWdhciB0ZXh0byBhbCBwYW5lbFwiLFxuICAgIHBhbmVsUmVtb3ZlVGV4dDogXCJFbGltaW5hciB0ZXh0byBhbCBwYW5lbFwiLFxuICAgIHBhbmVsUHJldlRleHQ6IFwiVGV4dG8gYW50ZXJpb3IgZGVsIHBhbmVsXCIsXG4gICAgcGFuZWxOZXh0VGV4dDogXCJUZXh0byBzaWd1aWVudGUgZGVsIHBhbmVsXCIsXG4gICAgc2hvd1F1ZXN0aW9uTnVtYmVyczogXCJOb3N0cmFyIG7Dum1lcm9zIGRlIHByZWd1bnRhXCIsXG4gICAgc2hvd1JhbmdlSW5Qcm9ncmVzczogXCJNb3N0cmFyIGVsIHJhbmdvIGRlIHByb2dyZXNvXCIsXG4gICAgcmVuZGVyTW9kZTogXCJNb2RvIHJlbmRlcml6YWRvXCIsXG4gICAgdGVtcGxhdGVUaXRsZUxvY2F0aW9uOiBcIlBsYW50aWxsYSBkZWwgVMOtdHVsbyBVYmljYWNpw7NuXCIsXG5cbiAgICByYXRlVmFsdWVzOiBcIlZhbG9yZXMgZGUgdGFyaWZhXCIsXG4gICAgcmF0ZU1pbjogXCJUYXJpZmEgbcOtbmltYVwiLFxuICAgIHJhdGVNYXg6IFwiVGFyaWZhIG3DoXhpbWFcIixcbiAgICByYXRlU3RlcDogXCJQYXNvcyBkZSB0YXJpZmFcIixcbiAgICBtaW5SYXRlRGVzY3JpcHRpb246IFwiRGVzY3JpcGNpw7NuIG3DrW5pbWEgZGUgdGFyaWZhXCIsXG4gICAgbWF4UmF0ZURlc2NyaXB0aW9uOiBcIkRlc2NyaXBjacOzbiBtw6F4aW1hIGRlIHRhcmlmYVwiLFxuXG4gICAgaW5wdXRUeXBlOiBcIlRpcG8gZGUgZW50cmFkYVwiLFxuICAgIHNpemU6IFwiVGFtYcOxb1wiLFxuXG4gICAgbG9jYWxlOiBcIkx1Z2FyXCIsXG4gICAgZm9jdXNGaXJzdFF1ZXN0aW9uQXV0b21hdGljOiBcIkVuZm9jYXIgcHJpbWVyYSBwcmVndW50YSBhdXRvbcOhdGljYVwiLFxuICAgIGNvbXBsZXRlZEh0bWw6IFwiSFRNTCBDb21wbGV0YWRvXCIsXG4gICAgY29tcGxldGVkQmVmb3JlSHRtbDogXCJDb21wbGV0YWRvIGFudGVzIGRlIEhUTUxcIixcbiAgICBsb2FkaW5nSHRtbDogXCJDYXJnYW5kbyBIVE1MXCIsXG4gICAgdHJpZ2dlcnM6IFwiRGlzcGFyYWRvcmVzXCIsXG4gICAgY29va2llTmFtZTogXCJOb21icmUgZGUgbGEgY29va2llXCIsXG4gICAgc2VuZFJlc3VsdE9uUGFnZU5leHQ6IFwiRW52aWFyIHJlc3VsdGFkbyBhIGxhIHDDoWdpbmEgc2lndWllbnRlXCIsXG4gICAgc2hvd05hdmlnYXRpb25CdXR0b25zOiBcIk1vc3RyYXIgYm90b25lcyBkZSBuYXZlZ2FjacOzblwiLFxuICAgIHNob3dQcmV2QnV0dG9uOiBcIk1vc3RyYXIgYm90w7NuIGFudGVyaW9yXCIsXG4gICAgc2hvd1BhZ2VUaXRsZXM6IFwiTW9zdHJhciBUw610dWxvcyBkZSBsYSBww6FnaW5hXCIsXG4gICAgc2hvd0NvbXBsZXRlZFBhZ2U6IFwiTW9zdHJhciBww6FnaW5hIGNvbXBsZXRhZGFcIixcbiAgICBzaG93UGFnZU51bWJlcnM6IFwiTW9zdHJhciBsb3MgbsO6bWVyb3MgZGUgcMOhZ2luYVwiLFxuICAgIHF1ZXN0aW9uRXJyb3JMb2NhdGlvbjogXCJQcmVndW50YSBlcnJvciB1YmljYWNpw7NuXCIsXG4gICAgc2hvd1Byb2dyZXNzQmFyOiBcIk1vc3RyYXIgYmFycmEgZGUgcHJvZ3Jlc29cIixcbiAgICBtb2RlOiBcIk1vZG9cIixcbiAgICBnb05leHRQYWdlQXV0b21hdGljOiBcIklyIGEgbGEgc2lndWllbnRlIHDDoWdpbmEgYXV0b23DoXRpY2FcIixcbiAgICBjaGVja0Vycm9yc01vZGU6IFwiVmVyaWZpY2EgZWwgbW9kbyBkZSBlcnJvcmVzXCIsXG4gICAgY2xlYXJJbnZpc2libGVWYWx1ZXM6IFwiTGltcGlhciBlbiB2YWxvcmVzIHZpc2libGVzXCIsXG4gICAgc3RhcnRTdXJ2ZXlUZXh0OiBcIkNvbWVuemFyIGVsIHRleHRvIGRlIGxhIGVuY3Vlc3RhXCIsXG4gICAgcGFnZVByZXZUZXh0OiBcIlRleHRvIGFudGVyaW9yIGRlIGxhIHDDoWdpbmFcIixcbiAgICBwYWdlTmV4dFRleHQ6IFwiVGV4dG8gc2lndWllbnRlIGRlIGxhIHDDoWdpbmFcIixcbiAgICBjb21wbGV0ZVRleHQ6IFwiVGV4dG8gY29tcGxldGFkbyBkZSBsYSBww6FnaW5hXCIsXG4gICAgcmVxdWlyZWRUZXh0OiBcIlRleHRvIHJlcXVlcmlkb1wiLFxuICAgIHF1ZXN0aW9uU3RhcnRJbmRleDogXCLDjW5kaWNlIGRlIGluaWNpbyBkZSBwcmVndW50YVwiLFxuICAgIHF1ZXN0aW9uVGl0bGVUZW1wbGF0ZTogXCJUw610dWxvIHBsYXRpbGxhIGRlIGxhIHByZWd1bnRhXCIsXG4gICAgZmlyc3RQYWdlSXNTdGFydGVkOiBcIlNlIGluaWNpYSBsYSBwcmltZXJhIHDDoWdpbmFcIixcbiAgICBpc1NpbmdsZVBhZ2U6IFwiRXMgdW5hIHNvbGEgcMOhZ2luYVwiLFxuICAgIG1heFRpbWVUb0ZpbmlzaFBhZ2U6IFwiVGllbXBvIG3DoXhpbW8gcGFyYSB0ZXJtaW5hciBsYSBww6FnaW5hXCIsXG4gICAgc2hvd1RpbWVyUGFuZWw6IFwiTW9zdHJhciB0aWVtcG8gZGVsIHBhbmVsXCIsXG4gICAgc2hvd1RpbWVyUGFuZWxNb2RlOiBcIk1vc3RyYXIgdGllbXBvIGRlbCBtb2RvIHBhbmVsXCIsXG5cbiAgICB0ZXh0OiBcInRleHRvXCIsXG4gICAgbWluVmFsdWU6IFwiVmFsb3IgbcOtbmltb1wiLFxuICAgIG1heFZhbHVlOiBcIlZhbG9yIG3DoXhpbW9cIixcbiAgICBtaW5MZW5ndGg6IFwiTGFyZ28gbcOtbmltb1wiLFxuICAgIG1heExlbmd0aDogXCJMYXJnbyBtw6F4aW1vXCIsXG4gICAgYWxsb3dEaWdpdHM6IFwiUGVybWl0aXIgZMOtZ2l0b3NcIixcbiAgICBtaW5Db3VudDogXCJDb250ZW8gbcOtbmltb1wiLFxuICAgIG1heENvdW50OiBcIkNvbnRlbyBtw6F4aW1vXCIsXG4gICAgcmVnZXg6IFwiRXhwcmVzacOzbiByZWd1bGFyXCJcbiAgfVxufTtcblxuZWRpdG9yTG9jYWxpemF0aW9uLmxvY2FsZXNbXCJlc1wiXSA9IHNwYW5pc2hUcmFuc2xhdGlvbjtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9sb2NhbGl6YXRpb24vc3BhbmlzaC50cyIsImltcG9ydCB7IGVkaXRvckxvY2FsaXphdGlvbiB9IGZyb20gXCIuLi9lZGl0b3JMb2NhbGl6YXRpb25cIjtcblxudmFyIHRyYWRpdGlvbmFsQ2hpbmVzZVRyYW5zbGF0aW9uID0ge1xuICAvLyBzdHJpbmdzIGZvciBzdXJ2ZXkgdGVtcGxhdGVzXG4gIHN1cnZleToge1xuICAgIGVkaXQ6IFwi57eo6LyvXCIsXG4gICAgZHJvcFF1ZXN0aW9uOiBcIuiri+Wwh+WVj+mhjOaUvue9ruaWvOatpFwiLFxuICAgIGNvcHk6IFwi6KSH6KO9XCIsXG4gICAgYWRkVG9Ub29sYm94OiBcIua3u+WKoOWIsOW3peWFt+eusVwiLFxuICAgIGRlbGV0ZVBhbmVsOiBcIuWIqumZpOmdouadv1wiLFxuICAgIGRlbGV0ZVF1ZXN0aW9uOiBcIuWIqumZpOmhjOebrlwiLFxuICAgIGNvbnZlcnRUbzogXCLovYnororngrpcIlxuICB9LFxuICAvLyBzdHJpbmdzIGZvciBxdWVzdGlvbiB0eXBlc1xuICBxdDoge1xuICAgIGNoZWNrYm94OiBcIuWkmumghemBuOaTh1wiLFxuICAgIGNvbW1lbnQ6IFwi5aSa6KGM5paH5pys5qGGXCIsXG4gICAgZHJvcGRvd246IFwi5LiL5ouJ5qGGXCIsXG4gICAgZmlsZTogXCLmlofku7bkuIrlgrNcIixcbiAgICBodG1sOiBcIkh0bWwg5Luj56K8XCIsXG4gICAgbWF0cml4OiBcIuefqemZoyAo5Zau6YG46aGMKVwiLFxuICAgIG1hdHJpeGRyb3Bkb3duOiBcIuefqemZoyAo5LiL5ouJ5qGGKVwiLFxuICAgIG1hdHJpeGR5bmFtaWM6IFwi55+p6ZmjICjli5XmhYvllY/poYwpXCIsXG4gICAgbXVsdGlwbGV0ZXh0OiBcIuaWh+acrOahhue1hFwiLFxuICAgIHBhbmVsOiBcIumdouadv1wiLFxuICAgIHBhbmVsZHluYW1pYzogXCLpnaLmnb8o5YuV5oWLKVwiLFxuICAgIHJhZGlvZ3JvdXA6IFwi5Zau6aCF6YG45pOHXCIsXG4gICAgcmF0aW5nOiBcIuipleWIhlwiLFxuICAgIHRleHQ6IFwi5paH5pys5qGGXCIsXG4gICAgYm9vbGVhbjogXCLluIPmnpfpgbjpoIVcIixcbiAgICBleHByZXNzaW9uOiBcIuihqOmBlOW8j1wiXG4gIH0sXG4gIC8vIHN0cmluZ3MgZm9yIGVkaXRvclxuICBlZDoge1xuICAgIHN1cnZleTogXCLoqr/mn6XllY/ljbdcIixcbiAgICBlZGl0U3VydmV5OiBcIuS/ruaUuVwiLFxuICAgIGFkZE5ld1BhZ2U6IFwi5re75Yqg5paw6aCB6Z2iXCIsXG4gICAgZGVsZXRlUGFnZTogXCLliKrpmaTpoIHpnaJcIixcbiAgICBlZGl0UGFnZTogXCLnt6jovK/poIHpnaJcIixcbiAgICBuZXdQYWdlTmFtZTogXCLpoIHpnaJcIixcbiAgICBuZXdRdWVzdGlvbk5hbWU6IFwi5ZWP6aGMXCIsXG4gICAgbmV3UGFuZWxOYW1lOiBcIumdouadv1wiLFxuICAgIHRlc3RTdXJ2ZXk6IFwi5ris6Kmm5ZWP5Y23XCIsXG4gICAgdGVzdFN1cnZleUFnYWluOiBcIuWGjeasoea4rOippuWVj+WNt1wiLFxuICAgIHRlc3RTdXJ2ZXlXaWR0aDogXCLllY/ljbflr6zluqY6IFwiLFxuICAgIGVtYmVkU3VydmV5OiBcIuWwh+WVj+WNt+W1jOWFpee2sumggVwiLFxuICAgIHNhdmVTdXJ2ZXk6IFwi5L+d5a2Y5ZWP5Y23XCIsXG4gICAgZGVzaWduZXI6IFwi5ZWP5Y236Kit6KiI5ZmoXCIsXG4gICAganNvbkVkaXRvcjogXCJKU09OIOe3qOi8r+WZqFwiLFxuICAgIHVuZG86IFwi6YKE5Y6fXCIsXG4gICAgcmVkbzogXCLph43lgZpcIixcbiAgICBvcHRpb25zOiBcIumBuOmghVwiLFxuICAgIGdlbmVyYXRlVmFsaWRKU09OOiBcIueUn+aIkCBKU09OXCIsXG4gICAgZ2VuZXJhdGVSZWFkYWJsZUpTT046IFwi55Sf5oiQ5piT6K6A55qEIEpTT05cIixcbiAgICB0b29sYm94OiBcIuW3peWFt+eusVwiLFxuICAgIGRlbFNlbE9iamVjdDogXCLliKrpmaTmiYDpgbjlsI3osaFcIixcbiAgICBlZGl0U2VsT2JqZWN0OiBcIue3qOi8r+aJgOmBuOWwjeixoVwiLFxuICAgIGNvcnJlY3RKU09OOiBcIuS/ruatoyBKU09OXCIsXG4gICAgc3VydmV5UmVzdWx0czogXCLllY/ljbfntZDmnpw6IFwiLFxuICAgIG1vZGlmaWVkOiBcIuW3suS/ruaUuVwiLFxuICAgIHNhdmluZzogXCLkv53lrZjkuK0uLi5cIixcbiAgICBzYXZlZDogXCLlt7Lkv53lrZhcIlxuICB9LFxuICAvL1Byb3BlcnR5IG5hbWVzIGluIHRhYmxlIGhlYWRlcnNcbiAgcGVsOiB7XG4gICAgaXNSZXF1aXJlZDogXCLmmK/lkKbngrrlv4XloavpoIU/XCJcbiAgfSxcbiAgLy8gc3RyaW5ncyBmb3IgcHJvcGVydHkgZWRpdG9yc1xuICBwZToge1xuICAgIGFwcGx5OiBcIuaHieeUqFwiLFxuICAgIG9rOiBcIueiuuWumlwiLFxuICAgIGNhbmNlbDogXCLlj5bmtohcIixcbiAgICByZXNldDogXCLph43nva5cIixcbiAgICBjbG9zZTogXCLpl5zplolcIixcbiAgICBkZWxldGU6IFwi5Yiq6ZmkXCIsXG4gICAgYWRkTmV3OiBcIuaWsOW7ulwiLFxuICAgIHJlbW92ZUFsbDogXCLlhajpg6jliKrpmaRcIixcbiAgICBlZGl0OiBcIue3qOi8r+WZqFwiLFxuICAgIGVtcHR5OiBcIjznqbo+XCIsXG4gICAgZmFzdEVudHJ5OiBcIuW/q+mAn+i8uOWFpVwiLFxuICAgIGZvcm1FbnRyeTogXCLooajllq7ovLjlhaVcIixcbiAgICB0ZXN0U2VydmljZTogXCLmuKzoqabmnI3li5lcIixcbiAgICBzaG93TW9yZTogXCLmm7TlpJrntLDnr4AuLi5cIixcbiAgICBjb25kaXRpb25IZWxwOlxuICAgICAgXCLoq4vovLjlhaXkuIDlgIvluIPmnpfooajpgZTlvI/jgILnlbbluIPmnpflgLzngrrnnJ/vvIzllY/poYwv6aCB6Z2i5Y+v6KaL44CC5L6L5aaC77yae3F1ZXN0aW9uMX0gPSAndmFsdWUxJyBvciAoe3F1ZXN0aW9uMn0gKiB7cXVlc3Rpb240fSAgPiAyMCBhbmQge3F1ZXN0aW9uM30gPCA1KVwiLFxuICAgIGV4cHJlc3Npb25IZWxwOlxuICAgICAgXCLoq4vovLjlhaXkuIDpoIXmop3ku7bliKTmlrfjgILnlbbmop3ku7bliKTmlrfngrrnnJ/mmYLllY/poYwv6aCB6Z2i5bCH5Y+v6KaL44CC5L6L5aaCOiB7cXVlc3Rpb24xfSA9ICd2YWx1ZTEnIG9yICh7cXVlc3Rpb24yfSA9IDMgYW5kIHtxdWVzdGlvbjN9IDwgNSlcIixcbiAgICBwcm9wZXJ0eUlzRW1wdHk6IFwi6KuL54K66Kmy5bGs5oCn6Kit5a6a5LiA5YCL5YC8XCIsXG4gICAgdmFsdWU6IFwi5YC8XCIsXG4gICAgdGV4dDogXCLpoa/npLrmlofmnKxcIixcbiAgICBjb2x1bW5FZGl0OiBcIue3qOi8r+WIlzogezB9XCIsXG4gICAgaXRlbUVkaXQ6IFwi57eo6Lyv6YG46aCFOiB7MH1cIixcbiAgICBoYXNPdGhlcjogXCLlj6/mt7vliqDlhbbku5bnrZTmoYg/XCIsXG4gICAgb3RoZXJUZXh0OiBcIuWFtuS7luetlOahiOaWh+acrFwiLFxuICAgIHVybDogXCJVUkxcIixcbiAgICBwYXRoOiBcIlBhdGhcIixcbiAgICB2YWx1ZU5hbWU6IFwiVmFsdWUgbmFtZVwiLFxuICAgIHRpdGxlTmFtZTogXCJUaXRsZSBuYW1lXCIsXG4gICAgbmFtZTogXCLpoYznm67lkI1cIixcbiAgICB0aXRsZTogXCLpoYznm67mlofmnKxcIixcbiAgICBjZWxsVHlwZTogXCLllq7lhYPmoLzpoZ7lnotcIixcbiAgICBjb2xDb3VudDogXCLliJfmlbhcIixcbiAgICBjaG9pY2VzT3JkZXI6IFwi6Kit572u6YG46aCF6aCG5bqPXCIsXG4gICAgdmlzaWJsZTogXCLmmK/lkKblj6/opos/XCIsXG4gICAgaXNSZXF1aXJlZDogXCLmmK/lkKbngrrlv4XloavpoIU/XCIsXG4gICAgc3RhcnRXaXRoTmV3TGluZTogXCLllY/poYzmmK/lkKbmlrDotbfkuIDooYw/XCIsXG4gICAgcm93czogXCLmlofmnKzmoYbooYzmlbhcIixcbiAgICBwbGFjZUhvbGRlcjogXCLljaDkvY3mlofmnKxcIixcbiAgICBzaG93UHJldmlldzogXCLmmK/lkKbpoa/npLrlnJblg4/poJDopr0/XCIsXG4gICAgc3RvcmVEYXRhQXNUZXh0OiBcIuS7pSBKU09OIOaWh+acrOaWueW8j+WtmOWEsuaWh+S7tlwiLFxuICAgIG1heFNpemU6IFwi5paH5Lu25pyA5aSn5bC65a+4IChCeXRlcylcIixcbiAgICBpbWFnZUhlaWdodDogXCLlnJbniYfpq5jluqZcIixcbiAgICBpbWFnZVdpZHRoOiBcIuWclueJh+WvrOW6plwiLFxuICAgIHJvd0NvdW50OiBcIum7mOiqjeihjOaVuFwiLFxuICAgIGFkZFJvd1RleHQ6IFwi5re75Yqg5qKd55uu5oyJ6YiV5paH5pysXCIsXG4gICAgcmVtb3ZlUm93VGV4dDogXCLliKrpmaTmop3nm67mjInpiJXmlofmnKxcIixcbiAgICBtaW5SYXRlRGVzY3JpcHRpb246IFwi5pyA5bCP5YC85o+Q56S6XCIsXG4gICAgbWF4UmF0ZURlc2NyaXB0aW9uOiBcIuacgOWkp+WAvOaPkOekulwiLFxuICAgIGlucHV0VHlwZTogXCLmlofmnKzmoYbpoZ7lnotcIixcbiAgICBvcHRpb25zQ2FwdGlvbjogXCLkuIvmi4nmoYbmj5DnpLroqp5cIixcbiAgICBxRWRpdG9yVGl0bGU6IFwi57eo6Lyv5ZWP6aGMOiB7MH1cIixcbiAgICAvL3N1cnZleVxuICAgIHNob3dUaXRsZTogXCLpoa/npLov6Zqx6JePIOaomemhjFwiLFxuICAgIGxvY2FsZTogXCLpu5joqo3oqp7oqIBcIixcbiAgICBtb2RlOiBcIuaooeW8jyAo57eo6LyvL+WPquiugClcIixcbiAgICBjbGVhckludmlzaWJsZVZhbHVlczogXCLmuIXpmaTpmrHol4/lgLxcIixcbiAgICBjb29raWVOYW1lOiBcIkNvb2tpZSBuYW1lICh0byBkaXNhYmxlIHJ1biBzdXJ2ZXkgdHdvIHRpbWVzIGxvY2FsbHkpXCIsXG4gICAgc2VuZFJlc3VsdE9uUGFnZU5leHQ6IFwiU2VuZCBzdXJ2ZXkgcmVzdWx0cyBvbiBwYWdlIG5leHRcIixcbiAgICBzdG9yZU90aGVyc0FzQ29tbWVudDogXCJTdG9yZSAnb3RoZXJzJyB2YWx1ZSBpbiBzZXBhcmF0ZSBmaWVsZFwiLFxuICAgIHNob3dQYWdlVGl0bGVzOiBcIumhr+ekuumggemdouaomemhjFwiLFxuICAgIHNob3dQYWdlTnVtYmVyczogXCLpoa/npLrpoIHmlbhcIixcbiAgICBwYWdlUHJldlRleHQ6IFwi5YmN5LiA6aCB5oyJ6YiV5paH5pysXCIsXG4gICAgcGFnZU5leHRUZXh0OiBcIuW+jOS4gOmggeaMiemIleaWh+acrFwiLFxuICAgIGNvbXBsZXRlVGV4dDogXCLlrozmiJDmjInpiJXmlofmnKxcIixcbiAgICBzdGFydFN1cnZleVRleHQ6IFwi6ZaL5aeL5oyJ6YiV5paH5pysXCIsXG4gICAgc2hvd05hdmlnYXRpb25CdXR0b25zOiBcIumhr+ekuuWwjuiIquaMiemIlSAo6buY6KqN5bCO6IiqKVwiLFxuICAgIHNob3dQcmV2QnV0dG9uOiBcIumhr+ekuuWJjeS4gOmggeaMiemIlSAo55So5oi25Y+v6L+U5Zue6Iez5YmN5LiA6aCB6Z2iKVwiLFxuICAgIGZpcnN0UGFnZUlzU3RhcnRlZDogXCLoqr/mn6XnmoTnrKzkuIDpoIHpnaLngrrotbflp4vpoIEuXCIsXG4gICAgc2hvd0NvbXBsZXRlZFBhZ2U6IFwi57WQ5bC+5bGV56S65a6M5oiQ5b6M55qE6aCB6Z2iIChjb21wbGV0ZWRIdG1sKVwiLFxuICAgIGdvTmV4dFBhZ2VBdXRvbWF0aWM6IFwi5Zue562U5pys6aCB5omA5pyJ5ZWP6aGM5b6M77yM6Ieq5YuV6Lez6L2J5Yiw5LiL5LiA6aCBXCIsXG4gICAgc2hvd1Byb2dyZXNzQmFyOiBcIumhr+ekuumAsuW6puainVwiLFxuICAgIHF1ZXN0aW9uVGl0bGVMb2NhdGlvbjogXCLllY/poYznmoTmqJnpoYzkvY3nva5cIixcbiAgICByZXF1aXJlZFRleHQ6IFwiVGhlIHF1ZXN0aW9uIHJlcXVpcmVkIHN5bWJvbChzKVwiLFxuICAgIHF1ZXN0aW9uU3RhcnRJbmRleDogXCLllY/poYzotbflp4vmqJnoqowgKDEsIDIgb3IgJ0EnLCAnYScpXCIsXG4gICAgc2hvd1F1ZXN0aW9uTnVtYmVyczogXCLpoa/npLrllY/poYznt6jomZ9cIixcbiAgICBxdWVzdGlvblRpdGxlVGVtcGxhdGU6IFwi5ZWP6aGM5qiZ6aGM5qih5p2/LCDpu5joqo3ngro6ICd7bm99LiB7cmVxdWlyZX0ge3RpdGxlfSdcIixcbiAgICBxdWVzdGlvbkVycm9yTG9jYXRpb246IFwi5ZWP6aGM6Yyv6Kqk5a6a5L2NXCIsXG4gICAgZm9jdXNGaXJzdFF1ZXN0aW9uQXV0b21hdGljOiBcIuaUueiuiumggemdouaZguiBmueEpuWcqOesrOS4gOWAi+WVj+mhjFwiLFxuICAgIHF1ZXN0aW9uc09yZGVyOiBcIkVsZW1lbnRzIG9yZGVyIG9uIHRoZSBwYWdlXCIsXG4gICAgbWF4VGltZVRvRmluaXNoOiBcIuWujOaIkOiqv+afpeeahOacgOmVt+aZgumWk1wiLFxuICAgIG1heFRpbWVUb0ZpbmlzaFBhZ2U6IFwi5a6M5oiQ6Kq/5p+l5Lit6aCB6Z2i55qE5pyA6ZW35pmC6ZaTXCIsXG4gICAgc2hvd1RpbWVyUGFuZWw6IFwi6aGv56S66KiI5pmC5Zmo6Z2i5p2/XCIsXG4gICAgc2hvd1RpbWVyUGFuZWxNb2RlOiBcIumhr+ekuuioiOaZguWZqOmdouadv+aooeW8j1wiLFxuICAgIHJlbmRlck1vZGU6IFwi5riy5p+T5qih5byPXCIsXG4gICAgYWxsb3dBZGRQYW5lbDogXCLlhYHoqLHmt7vliqDpnaLmnb9cIixcbiAgICBhbGxvd1JlbW92ZVBhbmVsOiBcIuWFgeioseWIqumZpOmdouadv1wiLFxuICAgIHBhbmVsQWRkVGV4dDogXCLmt7vliqDpnaLmnb/mlofmnKxcIixcbiAgICBwYW5lbFJlbW92ZVRleHQ6IFwi5Yiq6Zmk6Z2i5p2/5paH5pysXCIsXG4gICAgaXNTaW5nbGVQYWdlOiBcIuWcqOS4gOWAi+mggemdouS4iuWxleekuuaJgOacieWFg+e0oFwiLFxuICAgIHRhYnM6IHtcbiAgICAgIGdlbmVyYWw6IFwi6YCa55So6aCFXCIsXG4gICAgICBuYXZpZ2F0aW9uOiBcIuWwjuiIqlwiLFxuICAgICAgcXVlc3Rpb246IFwi5ZWP6aGMXCIsXG4gICAgICBjb21wbGV0ZWRIdG1sOiBcIuWujOaIkOW+jOeahEh0bWxcIixcbiAgICAgIGxvYWRpbmdIdG1sOiBcIuWKoOi8ieS4reeahEh0bWxcIixcbiAgICAgIHRpbWVyOiBcIuWVj+WNt+ioiOaZguWZqFwiLFxuICAgICAgdHJpZ2dlcjogXCLop7jnmbzlmahcIixcbiAgICAgIGZpbGVPcHRpb25zOiBcIumBuOmghVwiLFxuICAgICAgaHRtbDogXCJIVE1MIOe3qOi8r+WZqFwiLFxuICAgICAgY29sdW1uczogXCLoqK3nva7liJdcIixcbiAgICAgIHJvd3M6IFwi6Kit572u6KGMXCIsXG4gICAgICBjaG9pY2VzOiBcIuioree9rumBuOmghVwiLFxuICAgICAgdmlzaWJsZUlmOiBcIuioree9ruWPr+imi+aineS7tlwiLFxuICAgICAgZW5hYmxlSWY6IFwiRW5hYmxlIElmXCIsXG4gICAgICByYXRlVmFsdWVzOiBcIuioree9ruipleWIhuWAvFwiLFxuICAgICAgY2hvaWNlc0J5VXJsOiBcIumAmumBjiBVUkwg5bCO5YWl6YG46aCFXCIsXG4gICAgICBtYXRyaXhDaG9pY2VzOiBcIum7mOiqjemBuOmghVwiLFxuICAgICAgbXVsdGlwbGVUZXh0SXRlbXM6IFwi5paH5pys6Ly45YWlXCIsXG4gICAgICB2YWxpZGF0b3JzOiBcIuagoempl+imj+WJh1wiXG4gICAgfSxcbiAgICBlZGl0UHJvcGVydHk6IFwi57eo6Lyv5bGs5oCnOiAnezB9J1wiLFxuICAgIGl0ZW1zOiBcIlsg6aCF55uu5pW46YePOiB7MH0gXVwiLFxuICAgIGVudGVyTmV3VmFsdWU6IFwi6KuL6Kit5a6a5YC8XCIsXG4gICAgbm9xdWVzdGlvbnM6IFwi5ZWP5Y235Lit6YKE5rKS5pyJ5Ym15bu65Lu75L2V5ZWP6aGMXCIsXG4gICAgY3JlYXRldHJpZ2dlcjogXCLoq4vlibXlu7rop7jnmbzlmahcIixcbiAgICB0cmlnZ2VyT246IFwi55W2IFwiLFxuICAgIHRyaWdnZXJNYWtlUGFnZXNWaXNpYmxlOiBcIuS9v+mggemdouWPr+imizpcIixcbiAgICB0cmlnZ2VyTWFrZVF1ZXN0aW9uc1Zpc2libGU6IFwi5L2/5ZWP6aGM5Y+v6KaLOlwiLFxuICAgIHRyaWdnZXJDb21wbGV0ZVRleHQ6IFwi5aaC5p6c5ru/6Laz5qKd5Lu277yM5YmH5a6M5oiQ5ZWP5Y23XCIsXG4gICAgdHJpZ2dlck5vdFNldDogXCLop7jnmbzlmajlsJrmnKroqK3nva5cIixcbiAgICB0cmlnZ2VyUnVuSWY6IFwi5ru/6Laz5LiL5YiX5qKd5Lu25pmC5Z+36KGMXCIsXG4gICAgdHJpZ2dlclNldFRvTmFtZTogXCLkv67mlLnkuIvliJfllY/poYzlgLw6IFwiLFxuICAgIHRyaWdnZXJTZXRWYWx1ZTogXCLkv67mlLnngro6IFwiLFxuICAgIHRyaWdnZXJJc1ZhcmlhYmxlOiBcIuWcqOWVj+WNt+aPkOS6pOe1kOaenOS4reS4jeimgeWMheWQq+ipsuiuiumHj1wiXG4gIH0sXG4gIC8vIHN0cmluZ3MgZm9yIG9wZXJhdG9yc1xuICBvcDoge1xuICAgIGVtcHR5OiBcIueCuuepulwiLFxuICAgIG5vdGVtcHR5OiBcIuS4jeeCuuepulwiLFxuICAgIGVxdWFsOiBcIuetieaWvFwiLFxuICAgIG5vdGVxdWFsOiBcIuS4jeetieaWvFwiLFxuICAgIGNvbnRhaW5zOiBcIuWMheWQq1wiLFxuICAgIG5vdGNvbnRhaW5zOiBcIuS4jeWMheWQq1wiLFxuICAgIGdyZWF0ZXI6IFwi5aSn5pa8XCIsXG4gICAgbGVzczogXCLlsI/mlrxcIixcbiAgICBncmVhdGVyb3JlcXVhbDogXCLlpKfmlrznrYnmlrxcIixcbiAgICBsZXNzb3JlcXVhbDogXCLlsI/mlrznrYnmlrxcIlxuICB9LFxuICAvLyBzdHJpbmdzIGZvciBlbWJlZCB3aW5kb3dcbiAgZXc6IHtcbiAgICBhbmd1bGFyOiBcIuS9v+eUqCBBbmd1bGFyIOaZglwiLFxuICAgIGpxdWVyeTogXCLkvb/nlKggSlF1ZXJ5IOaZglwiLFxuICAgIGtub2Nrb3V0OiBcIuS9v+eUqCBLbm9ja291dCDmmYJcIixcbiAgICByZWFjdDogXCLkvb/nlKggUmVhY3Qg5pmCXCIsXG4gICAgdnVlOiBcIuS9v+eUqCBWdWUg5pmCXCIsXG4gICAgYm9vdHN0cmFwOiBcIuS9v+eUqCBCb290c3RyYXAg5pmCXCIsXG4gICAgc3RhbmRhcmQ6IFwi5LiN5L2/55SoIEJvb3RzdHJhcCDmmYJcIixcbiAgICBzaG93T25QYWdlOiBcIuW1jOWFpemggemdoumhr+ekulwiLFxuICAgIHNob3dJbldpbmRvdzogXCLkvb/nlKjllq7njajnmoTllY/ljbfoppbnqpdcIixcbiAgICBsb2FkRnJvbVNlcnZlcjogXCLlvp7mnI3li5nlmajliqDovInllY/ljbcgSlNPTiDmlbjmk5pcIixcbiAgICB0aXRsZVNjcmlwdDogXCLohbPmnKzlkozmqKPlvI9cIixcbiAgICB0aXRsZUh0bWw6IFwiSFRNTFwiLFxuICAgIHRpdGxlSmF2YVNjcmlwdDogXCJKYXZhU2NyaXB0XCJcbiAgfSxcbiAgdmFsaWRhdG9yczoge1xuICAgIGFuc3dlcmNvdW50dmFsaWRhdG9yOiBcIuaVuOmHj+aqouafpVwiLFxuICAgIGVtYWlsdmFsaWRhdG9yOiBcIkVtYWlsXCIsXG4gICAgbnVtZXJpY3ZhbGlkYXRvcjogXCLmlbjlrZdcIixcbiAgICByZWdleHZhbGlkYXRvcjogXCLmraPliYfooajpgZTlvI9cIixcbiAgICB0ZXh0dmFsaWRhdG9yOiBcIuaWh+acrFwiXG4gIH0sXG4gIHRyaWdnZXJzOiB7XG4gICAgY29tcGxldGV0cmlnZ2VyOiBcIuWujOaIkOWVj+WNt1wiLFxuICAgIHNldHZhbHVldHJpZ2dlcjogXCLoqK3nva7llY/poYzlgLxcIixcbiAgICB2aXNpYmxldHJpZ2dlcjogXCLkv67mlLnlj6/opovmgKdcIlxuICB9LFxuICAvLyBzdHJpbmdzIG9mIHByb3BlcnRpZXNcbiAgcDoge1xuICAgIGNvbW1lbnRUZXh0OiBcIuWCmeiou+aWh+acrFwiLFxuICAgIGNob2ljZXM6IFwi6YG46aCFXCIsXG4gICAgY2hvaWNlc0J5VXJsOiBcIlVybOmBuOmghVwiLFxuICAgIGNob2ljZXNPcmRlcjogXCLpgbjpoIXmjpLluo9cIixcbiAgICBjb2xDb3VudDogXCLliJfmlbhcIixcbiAgICBjb3JyZWN0QW5zd2VyOiBcIuato+eiuuetlOahiFwiLFxuICAgIGRlZmF1bHRWYXVsZTogXCLpoJDoqK3pgbjpoIVcIixcbiAgICBkZXNjcmlwdGlvbjogXCLoqqrmmI5cIixcbiAgICBlbmFibGVJZjogXCLlhYHoqLHliKTmlrdcIixcbiAgICBoYXNDb21tZW50OiBcImhhc0NvbW1lbnRcIixcbiAgICBoYXNPdGhlcjogXCLlhYHoqLHlhbbku5bnrZTmoYhcIixcbiAgICBvdGhlclRleHQ6IFwi5YW25LuW562U5qGI5paH5pysXCIsXG4gICAgcGFnZTogXCLmiYDlnKjpoIHpnaJcIixcbiAgICByZWFkT25seTogXCLlj6roroBcIixcbiAgICBpbmRlbnQ6IFwi57iu5o6SXCIsXG4gICAgaXNSZXF1aXJlZDogXCLlv4XloatcIixcbiAgICByZXF1aXJlZEVycm9yVGV4dDogXCJyZXF1aXJlZEVycm9yVGV4dFwiLFxuICAgIG90aGVyRXJyb3JUZXh0OiBcInJlcXVpcmVkRXJyb3JUZXh0XCIsXG4gICAgc3RhcnRXaXRoTmV3TGluZTogXCLlhYHoqLHllY/poYzlnKjmlrDooYxcIixcbiAgICAvL3N1cnZleVxuICAgIHNob3dUaXRsZTogXCLpoa/npLov6Zqx6JePIOaomemhjFwiLFxuICAgIGxvY2FsZTogXCLpu5joqo3oqp7oqIBcIixcbiAgICBtb2RlOiBcIuaooeW8jyAo57eo6LyvL+WPquiugClcIixcbiAgICBjbGVhckludmlzaWJsZVZhbHVlczogXCLmuIXpmaTpmrHol4/lgLxcIixcbiAgICBjb29raWVOYW1lOiBcIkNvb2tpZSBuYW1lICh0byBkaXNhYmxlIHJ1biBzdXJ2ZXkgdHdvIHRpbWVzIGxvY2FsbHkpXCIsXG4gICAgc2VuZFJlc3VsdE9uUGFnZU5leHQ6IFwiU2VuZCBzdXJ2ZXkgcmVzdWx0cyBvbiBwYWdlIG5leHRcIixcbiAgICBzdG9yZU90aGVyc0FzQ29tbWVudDogXCJTdG9yZSAnb3RoZXJzJyB2YWx1ZSBpbiBzZXBhcmF0ZSBmaWVsZFwiLFxuICAgIHNob3dQYWdlVGl0bGVzOiBcIumhr+ekuumggemdouaomemhjFwiLFxuICAgIHNob3dQYWdlTnVtYmVyczogXCLpoa/npLrpoIHmlbhcIixcbiAgICBwYWdlUHJldlRleHQ6IFwi5YmN5LiA6aCB5oyJ6YiV5paH5pysXCIsXG4gICAgcGFnZU5leHRUZXh0OiBcIuW+jOS4gOmggeaMiemIleaWh+acrFwiLFxuICAgIGNvbXBsZXRlVGV4dDogXCLlrozmiJDmjInpiJXmlofmnKxcIixcbiAgICBzdGFydFN1cnZleVRleHQ6IFwi6ZaL5aeL5oyJ6YiV5paH5pysXCIsXG4gICAgc2hvd05hdmlnYXRpb25CdXR0b25zOiBcIumhr+ekuuWwjuiIquaMiemIlSAo6buY6KqN5bCO6IiqKVwiLFxuICAgIHNob3dQcmV2QnV0dG9uOiBcIumhr+ekuuWJjeS4gOmggeaMiemIlSAo55So5oi25Y+v6L+U5Zue6Iez5YmN5LiA6aCB6Z2iKVwiLFxuICAgIGZpcnN0UGFnZUlzU3RhcnRlZDogXCLoqr/mn6XnmoTnrKzkuIDpoIHpnaLngrrotbflp4vpoIEuXCIsXG4gICAgc2hvd0NvbXBsZXRlZFBhZ2U6IFwi57WQ5bC+5bGV56S65a6M5oiQ5b6M55qE6aCB6Z2iIChjb21wbGV0ZWRIdG1sKVwiLFxuICAgIGdvTmV4dFBhZ2VBdXRvbWF0aWM6IFwi5Zue562U5pys6aCB5omA5pyJ5ZWP6aGM5b6M77yM6Ieq5YuV6Lez6L2J5Yiw5LiL5LiA6aCBXCIsXG4gICAgc2hvd1Byb2dyZXNzQmFyOiBcIumhr+ekuumAsuW6puainVwiLFxuICAgIHF1ZXN0aW9uVGl0bGVMb2NhdGlvbjogXCLllY/poYznmoTmqJnpoYzkvY3nva5cIixcbiAgICByZXF1aXJlZFRleHQ6IFwiVGhlIHF1ZXN0aW9uIHJlcXVpcmVkIHN5bWJvbChzKVwiLFxuICAgIHF1ZXN0aW9uU3RhcnRJbmRleDogXCLllY/poYzotbflp4vmqJnlv5cgKDEsIDIgb3IgJ0EnLCAnYScpXCIsXG4gICAgc2hvd1F1ZXN0aW9uTnVtYmVyczogXCLpoa/npLrllY/poYznt6jomZ9cIixcbiAgICBxdWVzdGlvblRpdGxlVGVtcGxhdGU6IFwi5ZWP6aGM5qiZ6aGM5qih5p2/LCDpu5joqo3ngro6ICd7bm99LiB7cmVxdWlyZX0ge3RpdGxlfSdcIixcbiAgICBxdWVzdGlvbkVycm9yTG9jYXRpb246IFwi5ZWP6aGM6Yyv6Kqk5a6a5L2NXCIsXG4gICAgZm9jdXNGaXJzdFF1ZXN0aW9uQXV0b21hdGljOiBcIuaUueiuiumggemdouaZguiBmueEpuWcqOesrOS4gOWAi+WVj+mhjFwiLFxuICAgIHF1ZXN0aW9uc09yZGVyOiBcIumggemdouS4reWFg+e0oOeahOmghuW6j1wiLFxuICAgIG1heFRpbWVUb0ZpbmlzaDogXCLlrozmiJDoqr/mn6XnmoTmnIDplbfmmYLplpNcIixcbiAgICBtYXhUaW1lVG9GaW5pc2hQYWdlOiBcIuWujOaIkOiqv+afpeS4remggemdoueahOacgOmVt+aZgumWk1wiLFxuICAgIHNob3dUaW1lclBhbmVsOiBcIumhr+ekuuioiOaZguWZqOmdouadv1wiLFxuICAgIHNob3dUaW1lclBhbmVsTW9kZTogXCLpoa/npLroqIjmmYLlmajpnaLmnb/mqKHlvI9cIixcbiAgICByZW5kZXJNb2RlOiBcIua4suafk+aooeW8j1wiLFxuICAgIGFsbG93QWRkUGFuZWw6IFwi5YWB6Kix5re75Yqg6Z2i5p2/XCIsXG4gICAgYWxsb3dSZW1vdmVQYW5lbDogXCLlhYHoqLHliKrpmaTpnaLmnb9cIixcbiAgICBwYW5lbEFkZFRleHQ6IFwi5re75Yqg6Z2i5p2/5paH5pysXCIsXG4gICAgcGFuZWxSZW1vdmVUZXh0OiBcIuWIqumZpOmdouadv+aWh+acrFwiLFxuICAgIGlzU2luZ2xlUGFnZTogXCLlnKjkuIDlgIvpoIHpnaLkuIrlsZXnpLrmiYDmnInlhYPntKBcIixcbiAgICBuYW1lOiBcIuWQjeWtl1wiLFxuICAgIHRpdGxlOiB7XG4gICAgICBuYW1lOiBcIuaomemhjFwiLFxuICAgICAgdGl0bGU6IFwi5aaC5p6c6IiH5ZCN5a2X55u45ZCM77yM6KuL6Kit572u54K656m65YC8XCJcbiAgICB9LFxuICAgIHN1cnZleV90aXRsZToge1xuICAgICAgbmFtZTogXCLmqJnpoYxcIixcbiAgICAgIHRpdGxlOiBcIuWVj+WNt+aomemhjOWcqOavj+mggeS4iumDveacg+mhr+ekulwiXG4gICAgfSxcbiAgICBwYWdlX3RpdGxlOiB7XG4gICAgICBuYW1lOiBcIuaomemhjFwiLFxuICAgICAgdGl0bGU6IFwi6aCB6Z2i5qiZ6aGMXCJcbiAgICB9XG4gIH1cbn07XG5cbmVkaXRvckxvY2FsaXphdGlvbi5sb2NhbGVzW1wiemgtdHdcIl0gPSB0cmFkaXRpb25hbENoaW5lc2VUcmFuc2xhdGlvbjtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9sb2NhbGl6YXRpb24vdHJhZGl0aW9uYWwtY2hpbmVzZS50cyIsImltcG9ydCAqIGFzIGtvIGZyb20gXCJrbm9ja291dFwiO1xuaW1wb3J0ICogYXMgU3VydmV5IGZyb20gXCJzdXJ2ZXkta25vY2tvdXRcIjtcbmltcG9ydCB7IFN1cnZleUNyZWF0b3IgfSBmcm9tIFwiLi9lZGl0b3JcIjtcblxuY2xhc3MgU2VydmljZUFQSSBleHRlbmRzIFN1cnZleS5keFN1cnZleVNlcnZpY2Uge1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGJhc2VVcmw6IHN0cmluZywgcHJpdmF0ZSBhY2Nlc3NLZXk6IHN0cmluZykge1xuICAgIHN1cGVyKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0QWN0aXZlU3VydmV5cyhcbiAgICBvbkxvYWQ6IChzdWNjZXNzOiBib29sZWFuLCByZXN1bHQ6IHN0cmluZywgcmVzcG9uc2U6IGFueSkgPT4gdm9pZFxuICApIHtcbiAgICB2YXIgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG4gICAgeGhyLm9wZW4oXCJHRVRcIiwgdGhpcy5iYXNlVXJsICsgXCIvZ2V0QWN0aXZlP2FjY2Vzc0tleT1cIiArIHRoaXMuYWNjZXNzS2V5KTtcbiAgICB4aHIuc2V0UmVxdWVzdEhlYWRlcihcIkNvbnRlbnQtVHlwZVwiLCBcImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZFwiKTtcbiAgICB4aHIub25sb2FkID0gZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgcmVzdWx0ID0geGhyLnJlc3BvbnNlID8gSlNPTi5wYXJzZSh4aHIucmVzcG9uc2UpIDogbnVsbDtcbiAgICAgIG9uTG9hZCh4aHIuc3RhdHVzID09IDIwMCwgcmVzdWx0LCB4aHIucmVzcG9uc2UpO1xuICAgIH07XG4gICAgeGhyLnNlbmQoKTtcbiAgfVxuICBwdWJsaWMgY3JlYXRlU3VydmV5KFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBvbkNyZWF0ZTogKHN1Y2Nlc3M6IGJvb2xlYW4sIHJlc3VsdDogc3RyaW5nLCByZXNwb25zZTogYW55KSA9PiB2b2lkXG4gICkge1xuICAgIHZhciB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcbiAgICB4aHIub3BlbihcbiAgICAgIFwiR0VUXCIsXG4gICAgICB0aGlzLmJhc2VVcmwgKyBcIi9jcmVhdGU/YWNjZXNzS2V5PVwiICsgdGhpcy5hY2Nlc3NLZXkgKyBcIiZuYW1lPVwiICsgbmFtZVxuICAgICk7XG4gICAgeGhyLnNldFJlcXVlc3RIZWFkZXIoXCJDb250ZW50LVR5cGVcIiwgXCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWRcIik7XG4gICAgeGhyLm9ubG9hZCA9IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIHJlc3VsdCA9IHhoci5yZXNwb25zZSA/IEpTT04ucGFyc2UoeGhyLnJlc3BvbnNlKSA6IG51bGw7XG4gICAgICBvbkNyZWF0ZSh4aHIuc3RhdHVzID09IDIwMCwgcmVzdWx0LCB4aHIucmVzcG9uc2UpO1xuICAgIH07XG4gICAgeGhyLnNlbmQoKTtcbiAgfVxuICBwdWJsaWMgc2F2ZVN1cnZleShcbiAgICBpZDogc3RyaW5nLFxuICAgIGpzb246IHN0cmluZyxcbiAgICBvblNhdmU/OiAoc3VjY2VzczogYm9vbGVhbiwgcmVzdWx0OiBzdHJpbmcsIHJlc3BvbnNlOiBhbnkpID0+IHZvaWRcbiAgKSB7XG4gICAgdmFyIHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuICAgIHhoci5vcGVuKFwiUE9TVFwiLCB0aGlzLmJhc2VVcmwgKyBcIi9jaGFuZ2VKc29uP2FjY2Vzc0tleT1cIiArIHRoaXMuYWNjZXNzS2V5KTtcbiAgICB4aHIuc2V0UmVxdWVzdEhlYWRlcihcIkNvbnRlbnQtVHlwZVwiLCBcImFwcGxpY2F0aW9uL2pzb247Y2hhcnNldD1VVEYtOFwiKTtcbiAgICB4aHIub25sb2FkID0gZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgcmVzdWx0ID0geGhyLnJlc3BvbnNlID8gSlNPTi5wYXJzZSh4aHIucmVzcG9uc2UpIDogbnVsbDtcbiAgICAgICEhb25TYXZlICYmIG9uU2F2ZSh4aHIuc3RhdHVzID09IDIwMCwgcmVzdWx0LCB4aHIucmVzcG9uc2UpO1xuICAgIH07XG4gICAgeGhyLnNlbmQoSlNPTi5zdHJpbmdpZnkoeyBJZDogaWQsIEpzb246IGpzb24sIFRleHQ6IGpzb24gfSkpO1xuICB9XG4gIHB1YmxpYyB1cGRhdGVTdXJ2ZXlOYW1lKFxuICAgIGlkOiBzdHJpbmcsXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIG9uVXBkYXRlPzogKHN1Y2Nlc3M6IGJvb2xlYW4sIHJlc3VsdDogc3RyaW5nLCByZXNwb25zZTogYW55KSA9PiB2b2lkXG4gICkge1xuICAgIHZhciB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcbiAgICB4aHIub3BlbihcbiAgICAgIFwiR0VUXCIsXG4gICAgICB0aGlzLmJhc2VVcmwgK1xuICAgICAgICBcIi9jaGFuZ2VOYW1lL1wiICtcbiAgICAgICAgaWQgK1xuICAgICAgICBcIj9hY2Nlc3NLZXk9XCIgK1xuICAgICAgICB0aGlzLmFjY2Vzc0tleSArXG4gICAgICAgIFwiJm5hbWU9XCIgK1xuICAgICAgICBuYW1lXG4gICAgKTtcbiAgICB4aHIuc2V0UmVxdWVzdEhlYWRlcihcIkNvbnRlbnQtVHlwZVwiLCBcImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZFwiKTtcbiAgICB4aHIub25sb2FkID0gZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgcmVzdWx0ID0geGhyLnJlc3BvbnNlID8gSlNPTi5wYXJzZSh4aHIucmVzcG9uc2UpIDogbnVsbDtcbiAgICAgICEhb25VcGRhdGUgJiYgb25VcGRhdGUoeGhyLnN0YXR1cyA9PSAyMDAsIHJlc3VsdCwgeGhyLnJlc3BvbnNlKTtcbiAgICB9O1xuICAgIHhoci5zZW5kKCk7XG4gIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBJU3VydmV5SW5mbyB7XG4gIG5hbWU6IGFueTtcbiAgaWQ6IHN0cmluZztcbiAgcG9zdElkOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlEZXNjcmlwdGlvbiBpbXBsZW1lbnRzIElTdXJ2ZXlJbmZvIHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIG5hbWUgPSBrby5vYnNlcnZhYmxlKFwiXCIpLFxuICAgIHB1YmxpYyBjcmVhdGVkQXQgPSBuZXcgRGF0ZShEYXRlLm5vdygpKS50b0RhdGVTdHJpbmcoKSxcbiAgICBwdWJsaWMgaWQgPSBcIlwiLFxuICAgIHB1YmxpYyByZXN1bHRJZCA9IFwiXCIsXG4gICAgcHVibGljIHBvc3RJZCA9IFwiXCJcbiAgKSB7fVxufVxuXG5leHBvcnQgY2xhc3MgU3VydmV5c01hbmFnZXIge1xuICBwdWJsaWMgc3RhdGljIHNlcnZpY2VVcmxQYXRoOiBzdHJpbmcgPSBcIi9hcGkvTXlTdXJ2ZXlzXCI7XG4gIHN0YXRpYyBTdG9yYWdlS2V5ID0gXCJteVN1cnZleXNcIjtcbiAgcHJpdmF0ZSBhcGk6IFNlcnZpY2VBUEk7XG5cbiAgZ2V0U3VydmV5cygpOiBBcnJheTxTdXJ2ZXlEZXNjcmlwdGlvbj4ge1xuICAgIHJldHVybiBKU09OLnBhcnNlKFxuICAgICAgd2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKFN1cnZleXNNYW5hZ2VyLlN0b3JhZ2VLZXkpIHx8IFwiW11cIlxuICAgICkubWFwKGl0ZW0gPT4ge1xuICAgICAgcmV0dXJuIG5ldyBTdXJ2ZXlEZXNjcmlwdGlvbihcbiAgICAgICAga28ub2JzZXJ2YWJsZTxzdHJpbmc+KGl0ZW0ubmFtZSksXG4gICAgICAgIGl0ZW0uY3JlYXRlZEF0LFxuICAgICAgICBpdGVtLmlkLFxuICAgICAgICBpdGVtLnJlc3VsdElkLFxuICAgICAgICBpdGVtLnBvc3RJZFxuICAgICAgKTtcbiAgICB9KTtcbiAgfVxuXG4gIHNldFN1cnZleXMoc3VydmV5czogQXJyYXk8SVN1cnZleUluZm8+KSB7XG4gICAgd2luZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKFN1cnZleXNNYW5hZ2VyLlN0b3JhZ2VLZXksIGtvLnRvSlNPTihzdXJ2ZXlzKSk7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGJhc2VVcmw6IHN0cmluZyxcbiAgICBwcml2YXRlIGFjY2Vzc0tleTogc3RyaW5nLFxuICAgIHByaXZhdGUgZWRpdG9yOiBTdXJ2ZXlDcmVhdG9yXG4gICkge1xuICAgIHZhciBoYXNoID0gd2luZG93LmxvY2F0aW9uLmhhc2g7XG4gICAgaWYgKGhhc2guaW5kZXhPZihcIiNcIikgPT09IDApIHtcbiAgICAgIHRoaXMuc3VydmV5SWQoaGFzaC5zbGljZSgxKSk7XG4gICAgfVxuICAgIHRoaXMuYXBpID0gbmV3IFNlcnZpY2VBUEkoXG4gICAgICBiYXNlVXJsICsgU3VydmV5c01hbmFnZXIuc2VydmljZVVybFBhdGgsXG4gICAgICBhY2Nlc3NLZXlcbiAgICApO1xuXG4gICAgZWRpdG9yLmlzQXV0b1NhdmUgPSB0cnVlO1xuICAgIGVkaXRvci5zaG93U3RhdGUgPSB0cnVlO1xuICAgIGVkaXRvci5zYXZlU3VydmV5RnVuYyA9IChzYXZlTm8sIGNhbGxiYWNrKSA9PiB7XG4gICAgICBpZiAoIWVkaXRvci5zdXJ2ZXlJZCAmJiAhdGhpcy5zdXJ2ZXlJZCgpKSB7XG4gICAgICAgIHRoaXMuYWRkSGFuZGxlcihzdWNjZXNzID0+IGNhbGxiYWNrKHNhdmVObywgc3VjY2VzcykpO1xuICAgICAgfVxuICAgICAgaWYgKCEhZWRpdG9yLnN1cnZleUlkIHx8ICEhdGhpcy5zdXJ2ZXlJZCgpKSB7XG4gICAgICAgIHRoaXMuYXBpLnNhdmVTdXJ2ZXkoXG4gICAgICAgICAgZWRpdG9yLnN1cnZleUlkIHx8IHRoaXMuc3VydmV5SWQoKSxcbiAgICAgICAgICBlZGl0b3IudGV4dCxcbiAgICAgICAgICBzdWNjZXNzID0+IGNhbGxiYWNrKHNhdmVObywgc3VjY2VzcylcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgdGhpcy5zdXJ2ZXlzKHRoaXMuZ2V0U3VydmV5cygpKTtcbiAgICBpZiAoIXRoaXMuc3VydmV5SWQoKSkge1xuICAgICAgdGhpcy5jdXJyZW50U3VydmV5KHRoaXMuc3VydmV5cygpWzBdKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIHN1cnZleSA9IHRoaXMuc3VydmV5cygpLmZpbHRlcihzID0+IHMuaWQgPT09IHRoaXMuc3VydmV5SWQoKSlbMF07XG4gICAgICBpZiAoISFzdXJ2ZXkpIHtcbiAgICAgICAgdGhpcy5jdXJyZW50U3VydmV5KHN1cnZleSk7XG4gICAgICAgIHRoaXMuc3VydmV5SWQodW5kZWZpbmVkKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVkaXRvci5sb2FkU3VydmV5KHRoaXMuc3VydmV5SWQoKSk7XG4gICAgICB9XG4gICAgfVxuICAgIHZhciBvbkN1cnJlbnRTdXJ2ZXlDaGFuZ2VkID0gKHN1cnZleTogSVN1cnZleUluZm8pID0+IHtcbiAgICAgIGlmICghIXN1cnZleSkge1xuICAgICAgICB0aGlzLnN1cnZleUlkKHVuZGVmaW5lZCk7XG4gICAgICAgIHdpbmRvdy5sb2NhdGlvbi5oYXNoID0gXCIjXCIgKyBzdXJ2ZXkuaWQ7XG4gICAgICAgIGlmIChlZGl0b3Iuc3VydmV5SWQgPT09IHN1cnZleS5pZCkgcmV0dXJuO1xuICAgICAgICBlZGl0b3IubG9hZFN1cnZleShzdXJ2ZXkuaWQpO1xuICAgICAgICBlZGl0b3Iuc3VydmV5SWQgPSBzdXJ2ZXkuaWQ7XG4gICAgICAgIGVkaXRvci5zdXJ2ZXlQb3N0SWQgPSBzdXJ2ZXkucG9zdElkO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKCF0aGlzLnN1cnZleUlkKCkpIHtcbiAgICAgICAgICBlZGl0b3Iuc3VydmV5SWQgPSBcIlwiO1xuICAgICAgICAgIGVkaXRvci5zdXJ2ZXlQb3N0SWQgPSBcIlwiO1xuICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5oYXNoID0gXCJcIjtcbiAgICAgICAgICBlZGl0b3IudGV4dCA9IFwiXCI7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICAgIHRoaXMuY3VycmVudFN1cnZleS5zdWJzY3JpYmUob25DdXJyZW50U3VydmV5Q2hhbmdlZCk7XG4gICAgb25DdXJyZW50U3VydmV5Q2hhbmdlZCh0aGlzLmN1cnJlbnRTdXJ2ZXkoKSk7XG5cbiAgICB2YXIgY3VycmVudFN1cnZleUNhbkJlQXR0YWNoZWQgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcbiAgICBrby5jb21wdXRlZCgoKSA9PiB7XG4gICAgICB2YXIgc3VydmV5ID0gdGhpcy5jdXJyZW50U3VydmV5KCk7XG4gICAgICBjdXJyZW50U3VydmV5Q2FuQmVBdHRhY2hlZChmYWxzZSk7XG4gICAgICBpZiAoISFzdXJ2ZXkpIHtcbiAgICAgICAgdGhpcy5hcGkudXBkYXRlU3VydmV5TmFtZShzdXJ2ZXkuaWQsIHN1cnZleS5uYW1lLnBlZWsoKSwgc3VjY2VzcyA9PiB7XG4gICAgICAgICAgY3VycmVudFN1cnZleUNhbkJlQXR0YWNoZWQoc3VjY2Vzcyk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMudG9vbGJhckl0ZW0gPSB7XG4gICAgICBpZDogXCJzdmQtYXR0YWNoLXN1cnZleVwiLFxuICAgICAgdGVtcGxhdGU6IFwiYXR0YWNoLXN1cnZleVwiLFxuICAgICAgdmlzaWJsZTogY3VycmVudFN1cnZleUNhbkJlQXR0YWNoZWQsXG4gICAgICBhY3Rpb246IGtvLmNvbXB1dGVkKFxuICAgICAgICAoKSA9PlxuICAgICAgICAgIFwiaHR0cHM6Ly9keHN1cnZleS5jb20vSG9tZS9BdHRhY2hTdXJ2ZXkvXCIgK1xuICAgICAgICAgICh0aGlzLmN1cnJlbnRTdXJ2ZXkoKSAmJiB0aGlzLmN1cnJlbnRTdXJ2ZXkoKS5pZClcbiAgICAgICksXG4gICAgICBjc3M6IFwibGluay10by1hdHRhY2hcIixcbiAgICAgIGlubmVyQ3NzOiBcImljb24tY2xvdWRcIixcbiAgICAgIHRpdGxlOiBcIkF0dGFjaCBzdXJ2ZXkgdG8geW91ciBTdXJ2ZXlKUyBzZXJ2aWNlIGFjY291bnQuLi5cIlxuICAgIH07XG4gIH1cbiAgdG9vbGJhckl0ZW07XG5cbiAgaXNFZGl0TW9kZSA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuICBlZGl0KG1vZGVsLCBldmVudCkge1xuICAgIHZhciBzdXJ2ZXkgPSB0aGlzLmN1cnJlbnRTdXJ2ZXkoKTtcbiAgICBpZiAoISFzdXJ2ZXkpIHtcbiAgICAgIGlmICh0aGlzLmlzRWRpdE1vZGUoKSkge1xuICAgICAgICBzdXJ2ZXkubmFtZSh0aGlzLmN1cnJlbnRTdXJ2ZXlOYW1lKCkpO1xuICAgICAgICB0aGlzLnNldFN1cnZleXModGhpcy5zdXJ2ZXlzKCkpO1xuICAgICAgICB0aGlzLmFwaS51cGRhdGVTdXJ2ZXlOYW1lKHN1cnZleS5pZCwgc3VydmV5Lm5hbWUoKSk7XG4gICAgICAgIHRoaXMuaXNFZGl0TW9kZShmYWxzZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmN1cnJlbnRTdXJ2ZXlOYW1lKHN1cnZleS5uYW1lKCkpO1xuICAgICAgICB0aGlzLmlzRWRpdE1vZGUodHJ1ZSk7XG4gICAgICAgIGV2ZW50LnRhcmdldC5wYXJlbnROb2RlLnBhcmVudEVsZW1lbnRcbiAgICAgICAgICAuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJpbnB1dFwiKVswXVxuICAgICAgICAgIC5mb2N1cygpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGFkZEhhbmRsZXIoXG4gICAgb25BZGQ/OiAoc3VjY2VzczogYm9vbGVhbiwgcmVzdWx0OiBzdHJpbmcsIHJlc3BvbnNlOiBhbnkpID0+IHZvaWRcbiAgKSB7XG4gICAgdGhpcy5pc0xvYWRpbmcodHJ1ZSk7XG4gICAgdGhpcy5hcGkuY3JlYXRlU3VydmV5KFxuICAgICAgXCJOZXdTdXJ2ZXlcIixcbiAgICAgIChzdWNjZXNzOiBib29sZWFuLCByZXN1bHQ6IGFueSwgcmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICB2YXIgbmV3U3VydmV5RGVzY3JpcHRpb24gPSBuZXcgU3VydmV5RGVzY3JpcHRpb24oXG4gICAgICAgICAga28ub2JzZXJ2YWJsZShyZXN1bHQuTmFtZSksXG4gICAgICAgICAgcmVzdWx0LkNyZWF0ZWRBdCxcbiAgICAgICAgICByZXN1bHQuSWQsXG4gICAgICAgICAgcmVzdWx0LlJlc3VsdElkLFxuICAgICAgICAgIHJlc3VsdC5Qb3N0SWRcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5zdXJ2ZXlzLnB1c2gobmV3U3VydmV5RGVzY3JpcHRpb24pO1xuICAgICAgICB0aGlzLnNldFN1cnZleXModGhpcy5zdXJ2ZXlzKCkpO1xuICAgICAgICB0aGlzLmVkaXRvci5zdXJ2ZXlJZCA9IHJlc3VsdC5JZDtcbiAgICAgICAgdGhpcy5lZGl0b3Iuc3VydmV5UG9zdElkID0gcmVzdWx0LlBvc3RJZDtcbiAgICAgICAgdGhpcy5hcGkuc2F2ZVN1cnZleShyZXN1bHQuSWQsIHRoaXMuZWRpdG9yLnRleHQpO1xuICAgICAgICB0aGlzLmN1cnJlbnRTdXJ2ZXkobmV3U3VydmV5RGVzY3JpcHRpb24pO1xuICAgICAgICB0aGlzLmlzTG9hZGluZyhmYWxzZSk7XG4gICAgICAgIG9uQWRkICYmIG9uQWRkKHN1Y2Nlc3MsIHJlc3VsdCwgcmVzcG9uc2UpO1xuICAgICAgfVxuICAgICk7XG4gIH1cblxuICBhZGQoKSB7XG4gICAgdGhpcy5hZGRIYW5kbGVyKCk7XG4gIH1cblxuICByZW1vdmUoKSB7XG4gICAgaWYgKGNvbmZpcm0oXCJEbyB5b3UgcmVhbGx5IHdhbnQgdG8gcmVtb3ZlIGN1cnJlbnQgc3VydmV5P1wiKSkge1xuICAgICAgdGhpcy5zdXJ2ZXlzLnJlbW92ZSh0aGlzLmN1cnJlbnRTdXJ2ZXkoKSk7XG4gICAgICB0aGlzLnNldFN1cnZleXModGhpcy5zdXJ2ZXlzKCkpO1xuICAgICAgdGhpcy5jdXJyZW50U3VydmV5KHRoaXMuc3VydmV5cygpWzBdKTtcbiAgICB9XG4gIH1cblxuICBzdXJ2ZXlJZCA9IGtvLm9ic2VydmFibGU8c3RyaW5nPigpO1xuICBzdXJ2ZXlzID0ga28ub2JzZXJ2YWJsZUFycmF5PElTdXJ2ZXlJbmZvPigpO1xuICBjdXJyZW50U3VydmV5ID0ga28ub2JzZXJ2YWJsZTxJU3VydmV5SW5mbz4oKTtcbiAgY3VycmVudFN1cnZleU5hbWUgPSBrby5vYnNlcnZhYmxlPHN0cmluZz4oXCJcIik7XG4gIGlzTG9hZGluZyA9IGtvLm9ic2VydmFibGU8Ym9vbGVhbj4oZmFsc2UpO1xuXG4gIGdldCBjc3NFZGl0KCkge1xuICAgIHJldHVybiB0aGlzLmlzRWRpdE1vZGUoKSA/IFwiaWNvbi1zYXZlZFwiIDogXCJpY29uLWVkaXRcIjtcbiAgfVxuICBnZXQgY3NzQWRkKCkge1xuICAgIHJldHVybiAhdGhpcy5zdXJ2ZXlJZCgpID8gXCJpY29uLW5ld1wiIDogXCJpY29uLWZvcmtcIjtcbiAgfVxuICBnZXQgdGl0bGVFZGl0KCkge1xuICAgIHJldHVybiB0aGlzLmlzRWRpdE1vZGUoKSA/IFwiU2F2ZSBzdXJ2ZXkgbmFtZVwiIDogXCJFZGl0IHN1cnZleSBuYW1lXCI7XG4gIH1cbiAgZ2V0IHRpdGxlQWRkKCkge1xuICAgIHJldHVybiAhdGhpcy5zdXJ2ZXlJZCgpID8gXCJBZGQgbmV3IHN1cnZleVwiIDogXCJGb3JrIHRoaXMgc3VydmV5XCI7XG4gIH1cbiAgbmFtZUVkaXRvcktleXByZXNzID0gKG1vZGVsLCBldmVudCkgPT4ge1xuICAgIGlmIChldmVudC5rZXlDb2RlID09PSAxMykge1xuICAgICAgdGhpcy5lZGl0KG1vZGVsLCBldmVudCk7XG4gICAgfSBlbHNlIGlmIChldmVudC5rZXlDb2RlID09PSAyNykge1xuICAgICAgdGhpcy5pc0VkaXRNb2RlKGZhbHNlKTtcbiAgICB9XG4gIH07XG59XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvbWFuYWdlLnRzIiwiaW1wb3J0ICogYXMga28gZnJvbSBcImtub2Nrb3V0XCI7XG5pbXBvcnQgeyBTdXJ2ZXlIZWxwZXIsIE9ialR5cGUgfSBmcm9tIFwiLi9zdXJ2ZXlIZWxwZXJcIjtcbmltcG9ydCAqIGFzIFN1cnZleSBmcm9tIFwic3VydmV5LWtub2Nrb3V0XCI7XG5pbXBvcnQgeyBlZGl0b3JMb2NhbGl6YXRpb24gfSBmcm9tIFwiLi9lZGl0b3JMb2NhbGl6YXRpb25cIjtcbmltcG9ydCB7IFN1cnZleUNyZWF0b3IgfSBmcm9tIFwiLi9lZGl0b3JcIjtcbmltcG9ydCBcIi4uL3ZlbmRvci9rbm9ja291dC1zb3J0YWJsZS5qc1wiO1xuXG5leHBvcnQgY2xhc3MgUGFnZXNFZGl0b3Ige1xuICBwcml2YXRlIGlzTmVlZEF1dG9TY3JvbGwgPSB0cnVlO1xuICBwcml2YXRlIGlzRHJhZ2dpbmdQYWdlID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG4gIHByaXZhdGUgcHJldlBhZ2VzRm9yU2VsZWN0b3I6IGFueVtdID0gW107XG4gIHByaXZhdGUgX3NlbGVjdGVkUGFnZSA9IGtvLm9ic2VydmFibGU8U3VydmV5LlBhZ2VNb2RlbD4oKTtcbiAgcGFnZXNTZWxlY3Rpb246IGFueTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGVkaXRvcjogU3VydmV5Q3JlYXRvciwgcHJpdmF0ZSBlbGVtZW50OiBhbnkpIHtcbiAgICB0aGlzLnBhZ2VzU2VsZWN0aW9uID0ga28uY29tcHV0ZWQ8U3VydmV5LlBhZ2VNb2RlbFtdPigoKSA9PiB7XG4gICAgICBpZiAoIXRoaXMuaXNEcmFnZ2luZ1BhZ2UoKSkge1xuICAgICAgICB0aGlzLnByZXZQYWdlc0ZvclNlbGVjdG9yID0gdGhpcy5lZGl0b3IucGFnZXMoKTtcbiAgICAgICAgaWYgKCF0aGlzLnJlYWRPbmx5KSB7XG4gICAgICAgICAgdGhpcy5wcmV2UGFnZXNGb3JTZWxlY3RvciA9IHRoaXMucHJldlBhZ2VzRm9yU2VsZWN0b3IuY29uY2F0KFtcbiAgICAgICAgICAgIDxhbnk+eyBuYW1lOiB0aGlzLmdldExvY1N0cmluZyhcImVkLmFkZE5ld1BhZ2VcIikgfVxuICAgICAgICAgIF0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5wcmV2UGFnZXNGb3JTZWxlY3RvcjtcbiAgICB9KTtcbiAgICB0aGlzLl9zZWxlY3RlZFBhZ2UodGhpcy5lZGl0b3IucGFnZXMoKVswXSk7XG4gICAgdGhpcy5lZGl0b3Iua29TZWxlY3RlZE9iamVjdC5zdWJzY3JpYmUobmV3VmFsID0+IHtcbiAgICAgIGlmICghdGhpcy5pc0FjdGl2ZSgpKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAhIWVkaXRvci5zdXJ2ZXkuY3VycmVudFBhZ2UgJiZcbiAgICAgICAgICBlZGl0b3Iuc3VydmV5LmN1cnJlbnRQYWdlICE9IHRoaXMuX3NlbGVjdGVkUGFnZSgpXG4gICAgICAgICkge1xuICAgICAgICAgIHRoaXMuX3NlbGVjdGVkUGFnZShlZGl0b3Iuc3VydmV5LmN1cnJlbnRQYWdlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aGlzLl9zZWxlY3RlZFBhZ2UobmV3VmFsLnZhbHVlKTtcblxuICAgICAgaWYgKHRoaXMuaXNOZWVkQXV0b1Njcm9sbCkge1xuICAgICAgICB0aGlzLnNjcm9sbFRvU2VsZWN0ZWRQYWdlKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmlzTmVlZEF1dG9TY3JvbGwgPSB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgZ2V0RGlzcGxheVRleHQgPSAocGFnZTogU3VydmV5LlBhZ2VNb2RlbCkgPT4ge1xuICAgIHJldHVybiB0aGlzLmVkaXRvci5nZXRPYmplY3REaXNwbGF5TmFtZShwYWdlKTtcbiAgfTtcblxuICBwYWdlU2VsZWN0aW9uID0ga28uY29tcHV0ZWQ8U3VydmV5LlBhZ2VNb2RlbD4oe1xuICAgIHJlYWQ6ICgpID0+IHRoaXMuX3NlbGVjdGVkUGFnZSgpLFxuICAgIHdyaXRlOiBuZXdWYWwgPT4ge1xuICAgICAgaWYgKCEhbmV3VmFsICYmIHR5cGVvZiBuZXdWYWwuZ2V0VHlwZSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRQYWdlID0gbmV3VmFsO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHRoaXMuZWRpdG9yLnBhZ2VzKCkubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHRoaXMuYWRkUGFnZSgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9KTtcblxuICBhZGRQYWdlKCkge1xuICAgIHRoaXMuZWRpdG9yLmFkZFBhZ2UoKTtcbiAgfVxuXG4gIGNvcHlQYWdlKHBhZ2U6IFN1cnZleS5QYWdlTW9kZWwpIHtcbiAgICB0aGlzLmVkaXRvci5jb3B5UGFnZShwYWdlKTtcbiAgfVxuXG4gIGRlbGV0ZVBhZ2UoKSB7XG4gICAgdGhpcy5lZGl0b3IuZGVsZXRlUGFnZSgpO1xuICB9XG5cbiAgc2hvd1BhZ2VTZXR0aW5ncyhwYWdlOiBTdXJ2ZXkuUGFnZU1vZGVsKSB7XG4gICAgdGhpcy5lZGl0b3Iuc2hvd1F1ZXN0aW9uRWRpdG9yKHBhZ2UpO1xuICB9XG5cbiAgb25QYWdlQ2xpY2sgPSAobW9kZWwsIGV2ZW50KSA9PiB7XG4gICAgdGhpcy5pc05lZWRBdXRvU2Nyb2xsID0gZmFsc2U7XG4gICAgdGhpcy5lZGl0b3Iuc2VsZWN0UGFnZShtb2RlbCk7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgdGhpcy51cGRhdGVNZW51UG9zaXRpb24oKTtcbiAgfTtcblxuICBnZXQgc29ydGFibGVPcHRpb25zKCkge1xuICAgIHJldHVybiB7XG4gICAgICBvblN0YXJ0OiBldnQgPT4ge1xuICAgICAgICB0aGlzLmlzRHJhZ2dpbmdQYWdlKHRydWUpO1xuICAgICAgfSxcbiAgICAgIG9uRW5kOiBldnQgPT4ge1xuICAgICAgICB0aGlzLmlzTmVlZEF1dG9TY3JvbGwgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5lZGl0b3IubW92ZVBhZ2UoZXZ0Lm9sZEluZGV4LCBldnQubmV3SW5kZXgpO1xuICAgICAgICB0aGlzLmlzRHJhZ2dpbmdQYWdlKGZhbHNlKTtcbiAgICAgIH0sXG4gICAgICBoYW5kbGU6IFwiLnN2ZC1wYWdlLW5hbWVcIixcbiAgICAgIGFuaW1hdGlvbjogMTUwXG4gICAgfTtcbiAgfVxuXG4gIGdldCBzZWxlY3RlZFBhZ2UoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3NlbGVjdGVkUGFnZSgpO1xuICB9XG4gIHNldCBzZWxlY3RlZFBhZ2UobmV3UGFnZSkge1xuICAgIHRoaXMuZWRpdG9yLnNlbGVjdFBhZ2UobmV3UGFnZSk7XG4gIH1cbiAgZ2V0UGFnZUNsYXNzID0gcGFnZSA9PiB7XG4gICAgdmFyIHJlc3VsdCA9XG4gICAgICBwYWdlID09PSB0aGlzLnNlbGVjdGVkUGFnZSA/IFwic3ZkX3NlbGVjdGVkX3BhZ2Ugc3ZkLWxpZ2h0LWJnLWNvbG9yXCIgOiBcIlwiO1xuXG4gICAgaWYgKHRoaXMuZWRpdG9yLnBhZ2VzKCkuaW5kZXhPZihwYWdlKSAhPT0gdGhpcy5lZGl0b3IucGFnZXMoKS5sZW5ndGggLSAxKSB7XG4gICAgICByZXN1bHQgKz0gXCIgc3ZkLWJvcmRlci1yaWdodC1ub25lXCI7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcbiAgZ2V0UGFnZU1lbnVJY29uQ2xhc3MgPSBwYWdlID0+IHtcbiAgICByZXR1cm4gcGFnZSA9PT0gdGhpcy5zZWxlY3RlZFBhZ2UgJiYgdGhpcy5pc0FjdGl2ZSgpXG4gICAgICA/IFwiaWNvbi1nZWFyYWN0aXZlXCJcbiAgICAgIDogXCJpY29uLWdlYXJcIjtcbiAgfTtcbiAgc2hvd0FjdGlvbnMgPSBwYWdlID0+IHtcbiAgICByZXR1cm4gcGFnZSA9PT0gdGhpcy5zZWxlY3RlZFBhZ2UgJiYgdGhpcy5pc0FjdGl2ZSgpO1xuICB9O1xuICBpc0xhc3RQYWdlKCkge1xuICAgIHJldHVybiB0aGlzLmVkaXRvci5wYWdlcygpLmxlbmd0aCA9PT0gMTtcbiAgfVxuICBtb3ZlTGVmdChtb2RlbCwgZXZlbnQpIHtcbiAgICB2YXIgcGFnZXNFbGVtZW50ID0gdGhpcy5lbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXCIuc3ZkLXBhZ2VzXCIpO1xuICAgIHBhZ2VzRWxlbWVudC5zY3JvbGxMZWZ0IC09IDUwO1xuICAgIHRoaXMudXBkYXRlTWVudVBvc2l0aW9uKCk7XG4gIH1cbiAgbW92ZVJpZ2h0KG1vZGVsLCBldmVudCkge1xuICAgIHZhciBwYWdlc0VsZW1lbnQgPSB0aGlzLmVsZW1lbnQucXVlcnlTZWxlY3RvcihcIi5zdmQtcGFnZXNcIik7XG4gICAgcGFnZXNFbGVtZW50LnNjcm9sbExlZnQgKz0gNTA7XG4gICAgdGhpcy51cGRhdGVNZW51UG9zaXRpb24oKTtcbiAgfVxuICBzY3JvbGxUb1NlbGVjdGVkUGFnZSgpIHtcbiAgICB2YXIgcGFnZXNFbGVtZW50OiBhbnkgPSB0aGlzLmVsZW1lbnQucXVlcnlTZWxlY3RvcihcIi5zdmQtcGFnZXNcIik7XG4gICAgaWYgKCFwYWdlc0VsZW1lbnQpIHJldHVybjtcbiAgICB2YXIgaW5kZXggPSB0aGlzLmVkaXRvci5wYWdlcygpLmluZGV4T2YodGhpcy5zZWxlY3RlZFBhZ2UpO1xuICAgIHZhciBwYWdlRWxlbWVudCA9IHBhZ2VzRWxlbWVudC5jaGlsZHJlbltpbmRleF07XG4gICAgaWYgKCFwYWdlRWxlbWVudCkgcmV0dXJuO1xuICAgIHBhZ2VzRWxlbWVudC5zY3JvbGxMZWZ0ID1cbiAgICAgIHBhZ2VFbGVtZW50Lm9mZnNldExlZnQgLVxuICAgICAgcGFnZXNFbGVtZW50Lm9mZnNldExlZnQgLVxuICAgICAgcGFnZXNFbGVtZW50Lm9mZnNldFdpZHRoIC8gMjtcbiAgICB0aGlzLnVwZGF0ZU1lbnVQb3NpdGlvbigpO1xuICB9XG4gIC8vIG9uS2V5RG93bihlbDogYW55LCBlOiBLZXlib2FyZEV2ZW50KSB7XG4gIC8vICAgaWYgKHRoaXMua29QYWdlcygpLmxlbmd0aCA8PSAxKSByZXR1cm47XG4gIC8vICAgdmFyIHBhZ2VzID0gdGhpcy5rb1BhZ2VzKCk7XG4gIC8vICAgdmFyIHBhZ2VJbmRleCA9IC0xO1xuICAvLyAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGFnZXMubGVuZ3RoOyBpKyspIHtcbiAgLy8gICAgIGlmIChwYWdlc1tpXS5wYWdlICYmIHBhZ2VzW2ldLmtvU2VsZWN0ZWQoKSkge1xuICAvLyAgICAgICBwYWdlSW5kZXggPSBpO1xuICAvLyAgICAgfVxuICAvLyAgIH1cbiAgLy8gICBpZiAocGFnZUluZGV4IDwgMCkgcmV0dXJuO1xuICAvLyAgIGlmIChlLmtleUNvZGUgPT0gNDYgJiYgdGhpcy5vbkRlbGV0ZVBhZ2VDYWxsYmFjaylcbiAgLy8gICAgIHRoaXMub25EZWxldGVQYWdlQ2FsbGJhY2soZWwucGFnZSk7XG4gIC8vICAgaWYgKChlLmtleUNvZGUgPT0gMzcgfHwgZS5rZXlDb2RlID09IDM5KSAmJiB0aGlzLm9uU2VsZWN0UGFnZUNhbGxiYWNrKSB7XG4gIC8vICAgICBwYWdlSW5kZXggKz0gZS5rZXlDb2RlID09IDM3ID8gLTEgOiAxO1xuICAvLyAgICAgaWYgKHBhZ2VJbmRleCA8IDApIHBhZ2VJbmRleCA9IHBhZ2VzLmxlbmd0aCAtIDE7XG4gIC8vICAgICBpZiAocGFnZUluZGV4ID49IHBhZ2VzLmxlbmd0aCkgcGFnZUluZGV4ID0gMDtcbiAgLy8gICAgIHZhciBwYWdlID0gcGFnZXNbcGFnZUluZGV4XS5wYWdlO1xuICAvLyAgICAgdGhpcy5vblNlbGVjdFBhZ2VDYWxsYmFjayhwYWdlKTtcbiAgLy8gICAgIHRoaXMuc2V0U2VsZWN0ZWRQYWdlKHBhZ2UpO1xuICAvLyAgIH1cbiAgLy8gfVxuXG4gIG9uV2hlZWwobW9kZWwsIGV2ZW50KSB7XG4gICAgdmFyIHBhZ2VzRWxlbWVudCA9IG1vZGVsLmVsZW1lbnQucXVlcnlTZWxlY3RvcihcIi5zdmQtcGFnZXNcIik7XG4gICAgZXZlbnQgPSBldmVudCB8fCB3aW5kb3cuZXZlbnQ7XG4gICAgaWYgKCEhZXZlbnQub3JpZ2luYWxFdmVudCkge1xuICAgICAgZXZlbnQgPSBldmVudC5vcmlnaW5hbEV2ZW50O1xuICAgIH1cbiAgICB2YXIgZGVsdGEgPSBldmVudC5kZWx0YVkgfHwgZXZlbnQuZGV0YWlsIHx8IGV2ZW50LndoZWVsRGVsdGE7XG4gICAgcGFnZXNFbGVtZW50LnNjcm9sbExlZnQgLT0gZGVsdGE7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQgPyBldmVudC5wcmV2ZW50RGVmYXVsdCgpIDogKGV2ZW50LnJldHVyblZhbHVlID0gZmFsc2UpO1xuICAgIHRoaXMudXBkYXRlTWVudVBvc2l0aW9uKCk7XG4gIH1cbiAgdXBkYXRlTWVudVBvc2l0aW9uKCkge1xuICAgIHZhciBwYWdlc0VsZW1lbnQgPSB0aGlzLmVsZW1lbnQucXVlcnlTZWxlY3RvcihcIi5zdmQtcGFnZXNcIik7XG4gICAgdmFyIG1lbnVFbGVtZW50cyA9IHBhZ2VzRWxlbWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFwic3ZkLXBhZ2UtYWN0aW9uc1wiKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1lbnVFbGVtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgbWVudUVsZW1lbnRzW2ldLnN0eWxlLmxlZnQgPVxuICAgICAgICBtZW51RWxlbWVudHNbaV0ucGFyZW50RWxlbWVudC5vZmZzZXRMZWZ0IC1cbiAgICAgICAgcGFnZXNFbGVtZW50LnNjcm9sbExlZnQgK1xuICAgICAgICBcInB4XCI7XG4gICAgfVxuICB9XG4gIGdldExvY1N0cmluZyhzdHI6IHN0cmluZykge1xuICAgIHJldHVybiBlZGl0b3JMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKHN0cik7XG4gIH1cbiAgaXNBY3RpdmUoKSB7XG4gICAgdmFyIHNlbGVjdGVkT2JqZWN0ID0gdGhpcy5lZGl0b3Iua29TZWxlY3RlZE9iamVjdCgpO1xuICAgIGlmICghc2VsZWN0ZWRPYmplY3QpIHJldHVybjtcbiAgICByZXR1cm4gU3VydmV5SGVscGVyLmdldE9iamVjdFR5cGUoc2VsZWN0ZWRPYmplY3QudmFsdWUpID09PSBPYmpUeXBlLlBhZ2U7XG4gIH1cbiAgcHJpdmF0ZSBfcmVhZE9ubHkgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcbiAgLyoqXG4gICAqIEEgYm9vbGVhbiBwcm9wZXJ0eSwgZmFsc2UgYnkgZGVmYXVsdC4gU2V0IGl0IHRvIHRydWUgdG8gZGVueSBwYWdlcyBlZGl0aW5nLlxuICAgKi9cbiAgcHVibGljIGdldCByZWFkT25seSgpIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5lZGl0b3IucmVhZE9ubHkgfHwgIXRoaXMuZWRpdG9yLmFsbG93TW9kaWZ5UGFnZXMgfHwgdGhpcy5fcmVhZE9ubHkoKVxuICAgICk7XG4gIH1cbiAgcHVibGljIHNldCByZWFkT25seShuZXdWYWwpIHtcbiAgICB0aGlzLl9yZWFkT25seShuZXdWYWwpO1xuICB9XG59XG5cbmtvLmNvbXBvbmVudHMucmVnaXN0ZXIoXCJwYWdlcy1lZGl0b3JcIiwge1xuICB2aWV3TW9kZWw6IHtcbiAgICBjcmVhdGVWaWV3TW9kZWw6IChwYXJhbXMsIGNvbXBvbmVudEluZm8pID0+IHtcbiAgICAgIHJldHVybiBuZXcgUGFnZXNFZGl0b3IocGFyYW1zLmVkaXRvciwgY29tcG9uZW50SW5mby5lbGVtZW50KTtcbiAgICB9XG4gIH0sXG4gIHRlbXBsYXRlOiB7IGVsZW1lbnQ6IFwic3ZkLXBhZ2Utc2VsZWN0b3ItdGVtcGxhdGVcIiB9XG59KTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9wYWdlc0VkaXRvci50cyIsImltcG9ydCAqIGFzIGtvIGZyb20gXCJrbm9ja291dFwiO1xuaW1wb3J0ICogYXMgU3VydmV5IGZyb20gXCJzdXJ2ZXkta25vY2tvdXRcIjtcbmltcG9ydCB7XG4gIFN1cnZleVByb3BlcnR5T25lU2VsZWN0ZWRFZGl0b3IsXG4gIFN1cnZleVByb3BlcnR5T25lU2VsZWN0ZWRJdGVtXG59IGZyb20gXCIuL3Byb3BlcnR5T25lU2VsZWN0ZWRFZGl0b3JcIjtcblxuaW1wb3J0IHsgU3VydmV5UHJvcGVydHlFZGl0b3JCYXNlIH0gZnJvbSBcIi4vcHJvcGVydHlFZGl0b3JCYXNlXCI7XG5pbXBvcnQgeyBTdXJ2ZXlQcm9wZXJ0eUVkaXRvckZhY3RvcnkgfSBmcm9tIFwiLi9wcm9wZXJ0eUVkaXRvckZhY3RvcnlcIjtcbmltcG9ydCB7IFN1cnZleUhlbHBlciB9IGZyb20gXCIuLi9zdXJ2ZXlIZWxwZXJcIjtcblxuZXhwb3J0IGNsYXNzIFN1cnZleVByb3BlcnR5Q2FsY3VsYXRlZFZhbHVlRWRpdG9yIGV4dGVuZHMgU3VydmV5UHJvcGVydHlPbmVTZWxlY3RlZEVkaXRvciB7XG4gIHB1YmxpYyBzdGF0aWMgVmFsdWVCYXNlTmFtZSA9IFwidmFyXCI7XG4gIGNvbnN0cnVjdG9yKHByb3BlcnR5OiBTdXJ2ZXkuSnNvbk9iamVjdFByb3BlcnR5KSB7XG4gICAgc3VwZXIocHJvcGVydHkpO1xuICB9XG4gIHB1YmxpYyBnZXQgZWRpdG9yVHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBcImNhbGN1bGF0ZWR2YWx1ZXNcIjtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0T2JqQ2xhc3NOYW1lKCkge1xuICAgIHJldHVybiBcImNhbGN1bGF0ZWR2YWx1ZVwiO1xuICB9XG4gIHByb3RlY3RlZCBjcmVhdGVOZXdFZGl0b3JJdGVtKCk6IGFueSB7XG4gICAgdmFyIHJlcyA9IHN1cGVyLmNyZWF0ZU5ld0VkaXRvckl0ZW0oKTtcbiAgICByZXMub2JqLm5hbWUgPSBTdXJ2ZXlIZWxwZXIuZ2V0TmV3TmFtZSh0aGlzLmdldE9ianMoKSwgdGhpcy5pdGVtQmFzZU5hbWUpO1xuICAgIHJldHVybiByZXM7XG4gIH1cbiAgcHJvdGVjdGVkIGNyZWF0ZU9uZVNlbGVjdGVkSXRlbShvYmo6IGFueSk6IFN1cnZleVByb3BlcnR5T25lU2VsZWN0ZWRJdGVtIHtcbiAgICByZXR1cm4gbmV3IFN1cnZleVByb3BlcnR5Q2FsY3VsYXRlZFZhbHVlSXRlbShcbiAgICAgIG9iaixcbiAgICAgIChuYW1lOiBzdHJpbmcsIG9iajogU3VydmV5LkJhc2UsIG9sZE5hbWU6IHN0cmluZykgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5jb3JyZWN0TmFtZShuYW1lLCBvYmosIG9sZE5hbWUpO1xuICAgICAgfVxuICAgICk7XG4gIH1cbiAgcHJpdmF0ZSBjb3JyZWN0TmFtZShcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgb2JqOiBTdXJ2ZXkuQmFzZSxcbiAgICBvbGROYW1lOiBzdHJpbmdcbiAgKTogYm9vbGVhbiB7XG4gICAgdmFyIHJlcyA9IHRoaXMuaXNOYW1lQ29ycmVjdChuYW1lLCBvYmopO1xuICAgIGlmICghcmVzICYmICEhb2xkTmFtZSkge1xuICAgICAgdGhpcy5jaGFuZ2VQcm9wZXJ0eShcIm5hbWVcIiwgb2xkTmFtZSk7XG4gICAgfVxuICAgIHJldHVybiByZXM7XG4gIH1cbiAgcHJpdmF0ZSBjaGFuZ2VQcm9wZXJ0eShwcm9wZXJ0eU5hbWU6IHN0cmluZywgdmFsdWU6IGFueSkge1xuICAgIGlmICghdGhpcy5zZWxlY3RlZE9iamVjdEVkaXRvcigpKSByZXR1cm47XG4gICAgdmFyIHByb3BFZGl0b3IgPSB0aGlzLnNlbGVjdGVkT2JqZWN0RWRpdG9yKCkuZ2V0UHJvcGVydHlFZGl0b3JCeU5hbWUoXG4gICAgICBwcm9wZXJ0eU5hbWVcbiAgICApO1xuICAgIGlmICghcHJvcEVkaXRvciB8fCAhcHJvcEVkaXRvci5lZGl0b3IpIHJldHVybjtcbiAgICBwcm9wRWRpdG9yLmVkaXRvci5rb1ZhbHVlKHZhbHVlKTtcbiAgfVxuICBwcml2YXRlIGlzTmFtZUNvcnJlY3QobmFtZTogc3RyaW5nLCBvYmo6IFN1cnZleS5CYXNlKTogYm9vbGVhbiB7XG4gICAgaWYgKCFuYW1lIHx8ICFuYW1lLnJlcGxhY2UoXCIgXCIsIFwiXCIpKSByZXR1cm4gZmFsc2U7XG5cbiAgICB2YXIgaXRlbXMgPSB0aGlzLmdldE9ianMoKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoaXRlbXNbaV0gPT0gb2JqKSBjb250aW51ZTtcbiAgICAgIGlmIChpdGVtc1tpXS5uYW1lID09IG5hbWUpIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcHJpdmF0ZSBnZXQgaXRlbUJhc2VOYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFN1cnZleVByb3BlcnR5Q2FsY3VsYXRlZFZhbHVlRWRpdG9yLlZhbHVlQmFzZU5hbWU7XG4gIH1cbiAgcHJpdmF0ZSBnZXRPYmpzKCk6IEFycmF5PGFueT4ge1xuICAgIHZhciByZXMgPSBbXTtcbiAgICB2YXIgaXRlbXMgPSB0aGlzLmtvSXRlbXMoKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoIWl0ZW1zW2ldIHx8ICFpdGVtc1tpXS5vYmopIGNvbnRpbnVlO1xuICAgICAgcmVzLnB1c2goaXRlbXNbaV0ub2JqKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgU3VydmV5UHJvcGVydHlDYWxjdWxhdGVkVmFsdWVJdGVtIGV4dGVuZHMgU3VydmV5UHJvcGVydHlPbmVTZWxlY3RlZEl0ZW0ge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgb2JqOiBTdXJ2ZXkuQmFzZSxcbiAgICBwcm90ZWN0ZWQgY29ycmVjdE5hbWU6IChcbiAgICAgIG5hbWU6IHN0cmluZyxcbiAgICAgIG9iajogU3VydmV5LkJhc2UsXG4gICAgICBvbGROYW1lOiBzdHJpbmdcbiAgICApID0+IGJvb2xlYW5cbiAgKSB7XG4gICAgc3VwZXIob2JqKTtcbiAgICBvYmpbXCJvbGROYW1lXCJdID0gb2JqW1wibmFtZVwiXTtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgb2JqLnJlZ2lzdGVyRnVuY3Rpb25PblByb3BlcnR5VmFsdWVDaGFuZ2VkKFwiZXhwcmVzc2lvblwiLCBmdW5jdGlvbigpIHtcbiAgICAgIHNlbGYub2JqZWN0Q2hhbmdlZCgpO1xuICAgIH0pO1xuICAgIG9iai5yZWdpc3RlckZ1bmN0aW9uT25Qcm9wZXJ0eVZhbHVlQ2hhbmdlZChcIm5hbWVcIiwgZnVuY3Rpb24oKSB7XG4gICAgICBzZWxmLm5hbWVDaGFuZ2VkKCk7XG4gICAgfSk7XG4gIH1cbiAgcHJvdGVjdGVkIG5hbWVDaGFuZ2VkKCkge1xuICAgIHZhciBuYW1lID0gdGhpcy5vYmpbXCJuYW1lXCJdO1xuICAgIGlmICh0aGlzLm9ialtcIm9sZE5hbWVcIl0gPT0gbmFtZSkgcmV0dXJuO1xuICAgIGlmIChcbiAgICAgIHRoaXMuY29ycmVjdE5hbWUgJiZcbiAgICAgICF0aGlzLmNvcnJlY3ROYW1lKG5hbWUsIHRoaXMub2JqLCB0aGlzLm9ialtcIm9sZE5hbWVcIl0pXG4gICAgKSB7XG4gICAgICB0aGlzLm9ialtcIm5hbWVcIl0gPSB0aGlzLm9ialtcIm9sZE5hbWVcIl07XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMub2JqW1wib2xkTmFtZVwiXSA9IG5hbWU7XG4gICAgdGhpcy5vYmplY3RDaGFuZ2VkKCk7XG4gIH1cbiAgcHVibGljIGdldFRleHQoKSB7XG4gICAgdmFyIGV4cHJlc3Npb24gPSB0aGlzLm9ialtcImV4cHJlc3Npb25cIl07XG4gICAgdmFyIG5hbWUgPSB0aGlzLm9ialtcIm5hbWVcIl07XG4gICAgcmV0dXJuIG5hbWUgKyBcIiA9IFwiICsgKCEhZXhwcmVzc2lvbiA/IGV4cHJlc3Npb24gOiBcIj9cIik7XG4gIH1cbn1cblxuU3VydmV5UHJvcGVydHlFZGl0b3JGYWN0b3J5LnJlZ2lzdGVyRWRpdG9yKFwiY2FsY3VsYXRlZHZhbHVlc1wiLCBmdW5jdGlvbihcbiAgcHJvcGVydHk6IFN1cnZleS5Kc29uT2JqZWN0UHJvcGVydHlcbik6IFN1cnZleVByb3BlcnR5RWRpdG9yQmFzZSB7XG4gIHJldHVybiBuZXcgU3VydmV5UHJvcGVydHlDYWxjdWxhdGVkVmFsdWVFZGl0b3IocHJvcGVydHkpO1xufSk7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvcHJvcGVydHlFZGl0b3JzL3Byb3BlcnR5Q2FsY3VsYXRlZFZhbHVlcy50cyIsImltcG9ydCAqIGFzIGtvIGZyb20gXCJrbm9ja291dFwiO1xuaW1wb3J0ICogYXMgU3VydmV5IGZyb20gXCJzdXJ2ZXkta25vY2tvdXRcIjtcbmltcG9ydCB7IFN1cnZleVByb3BlcnR5TW9kYWxFZGl0b3IgfSBmcm9tIFwiLi9wcm9wZXJ0eU1vZGFsRWRpdG9yXCI7XG5pbXBvcnQgeyBTdXJ2ZXlQcm9wZXJ0eUVkaXRvckJhc2UgfSBmcm9tIFwiLi9wcm9wZXJ0eUVkaXRvckJhc2VcIjtcbmltcG9ydCB7IGVkaXRvckxvY2FsaXphdGlvbiB9IGZyb20gXCIuLi9lZGl0b3JMb2NhbGl6YXRpb25cIjtcbmltcG9ydCB7IFN1cnZleVByb3BlcnR5RWRpdG9yRmFjdG9yeSB9IGZyb20gXCIuL3Byb3BlcnR5RWRpdG9yRmFjdG9yeVwiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5UHJvcGVydHlDZWxsc0VkaXRvciBleHRlbmRzIFN1cnZleVByb3BlcnR5TW9kYWxFZGl0b3Ige1xuICBrb1Jvd3M6IGFueTtcbiAga29Db2x1bW5zOiBhbnk7XG4gIGtvQ2FuRWRpdDogYW55O1xuICBjb25zdHJ1Y3Rvcihwcm9wZXJ0eTogU3VydmV5Lkpzb25PYmplY3RQcm9wZXJ0eSkge1xuICAgIHN1cGVyKHByb3BlcnR5KTtcbiAgICB0aGlzLmtvUm93cyA9IGtvLm9ic2VydmFibGVBcnJheSgpO1xuICAgIHRoaXMua29Db2x1bW5zID0ga28ub2JzZXJ2YWJsZUFycmF5KCk7XG4gICAgdGhpcy5rb0NhbkVkaXQgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcbiAgfVxuICBwdWJsaWMgZ2V0VmFsdWVUZXh0KHZhbHVlOiBhbnkpOiBzdHJpbmcge1xuICAgIHZhciBzdHJOYW1lID0gIXZhbHVlID8gXCJlbXB0eVwiIDogXCJub3RFbXB0eVwiO1xuICAgIHJldHVybiBlZGl0b3JMb2NhbGl6YXRpb24uZ2V0UHJvcGVydHlJbkVkaXRvcihzdHJOYW1lKTtcbiAgfVxuICBwdWJsaWMgYmVmb3JlU2hvdygpIHtcbiAgICBzdXBlci5iZWZvcmVTaG93KCk7XG4gICAgdGhpcy5zZXR1cENlbGxzKCk7XG4gIH1cbiAgcHJvdGVjdGVkIG9uQmVmb3JlQXBwbHkoKSB7XG4gICAgaWYgKCF0aGlzLmNhbkVkaXQpIHJldHVybjtcbiAgICB2YXIgbWF0cml4ID0gbmV3IFN1cnZleS5RdWVzdGlvbk1hdHJpeChcIlwiKTtcbiAgICBtYXRyaXguc2V0U3VydmV5SW1wbCh0aGlzLm9iamVjdC5zdXJ2ZXkpO1xuICAgIG1hdHJpeC5yb3dzID0gdGhpcy5yb3dzO1xuICAgIG1hdHJpeC5jb2x1bW5zID0gdGhpcy5jb2x1bW5zO1xuICAgIG1hdHJpeC5jZWxscyA9IHRoaXMub2JqZWN0LmNlbGxzO1xuICAgIHZhciByb3dzID0gdGhpcy5rb1Jvd3MoKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJvd3MubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciByb3cgPSByb3dzW2ldO1xuICAgICAgdmFyIGNlbGxzID0gcm93LmtvQ2VsbHMoKTtcbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgbWF0cml4LmNvbHVtbnMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgaWYgKHJvdy5yb3dJbmRleCA8IDApIHtcbiAgICAgICAgICAoPGFueT5tYXRyaXgpLnNldERlZmF1bHRDZWxsVGV4dChqLCBjZWxsc1tqXS50ZXh0KCkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG1hdHJpeC5zZXRDZWxsVGV4dChyb3dzW2ldLnJvd0luZGV4LCBqLCBjZWxsc1tqXS50ZXh0KCkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGlmICghbWF0cml4LmNlbGxzLmlzRW1wdHkpIHtcbiAgICAgIHRoaXMua29WYWx1ZShtYXRyaXguY2VsbHMpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmtvVmFsdWUobnVsbCk7XG4gICAgfVxuICB9XG4gIHB1YmxpYyBnZXQgZWRpdG9yVHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBcImNlbGxzXCI7XG4gIH1cbiAgcHJvdGVjdGVkIG9uVmFsdWVDaGFuZ2VkKCkge1xuICAgIGlmICh0aGlzLmlzU2hvd2luZ01vZGFsKSB7XG4gICAgICB0aGlzLnNldHVwQ2VsbHMoKTtcbiAgICB9XG4gIH1cbiAgcHVibGljIGdldCBjYW5FZGl0KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnJvd3MubGVuZ3RoID4gMCAmJiB0aGlzLmNvbHVtbnMubGVuZ3RoID4gMDtcbiAgfVxuICBwdWJsaWMgZ2V0IHJvd3MoKTogQXJyYXk8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMub2JqZWN0ICYmIHRoaXMub2JqZWN0LnJvd3MgPyB0aGlzLm9iamVjdC5yb3dzIDogW107XG4gIH1cbiAgcHVibGljIGdldCBjb2x1bW5zKCk6IEFycmF5PGFueT4ge1xuICAgIHJldHVybiB0aGlzLm9iamVjdCAmJiB0aGlzLm9iamVjdC5jb2x1bW5zID8gdGhpcy5vYmplY3QuY29sdW1ucyA6IFtdO1xuICB9XG4gIHByb3RlY3RlZCBnZXRDZWxsVGV4dChyb3dJbmRleDogbnVtYmVyLCBjb2x1bW5JbmRleDogbnVtYmVyKTogc3RyaW5nIHtcbiAgICBpZiAocm93SW5kZXggPCAwKSByZXR1cm4gdGhpcy5vYmplY3QuZ2V0RGVmYXVsdENlbGxUZXh0KGNvbHVtbkluZGV4KTtcbiAgICByZXR1cm4gdGhpcy5vYmplY3QuZ2V0Q2VsbFRleHQocm93SW5kZXgsIGNvbHVtbkluZGV4KTtcbiAgfVxuICBwcm90ZWN0ZWQgc2V0dXBDZWxscygpIHtcbiAgICB0aGlzLmtvUm93cyhbXSk7XG4gICAgdGhpcy5rb0NvbHVtbnMoW10pO1xuICAgIHRoaXMua29DYW5FZGl0KHRoaXMuY2FuRWRpdCk7XG4gICAgaWYgKCF0aGlzLmNhbkVkaXQpIHJldHVybjtcbiAgICB2YXIgY29scyA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jb2x1bW5zLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb2xzLnB1c2godGhpcy5jb2x1bW5zW2ldLnRleHQpO1xuICAgIH1cbiAgICB2YXIgcm93cyA9IFtdO1xuICAgIHJvd3MucHVzaChcbiAgICAgIHRoaXMuY3JlYXRlUm93KC0xLCBlZGl0b3JMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKFwicGUuY2VsbHNEZWZhdWx0Um93XCIpKVxuICAgICk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnJvd3MubGVuZ3RoOyBpKyspIHtcbiAgICAgIHJvd3MucHVzaCh0aGlzLmNyZWF0ZVJvdyhpLCB0aGlzLnJvd3NbaV0udGV4dCkpO1xuICAgIH1cbiAgICB0aGlzLmtvQ29sdW1ucyhjb2xzKTtcbiAgICB0aGlzLmtvUm93cyhyb3dzKTtcbiAgfVxuICBwcm90ZWN0ZWQgY3JlYXRlUm93KHJvd0luZGV4OiBudW1iZXIsIHJvd1RleHQ6IHN0cmluZyk6IGFueSB7XG4gICAgdmFyIHJvdyA9IHtcbiAgICAgIHJvd0luZGV4OiByb3dJbmRleCxcbiAgICAgIHJvd1RleHQ6IHJvd1RleHQsXG4gICAgICBrb0NlbGxzOiBrby5vYnNlcnZhYmxlQXJyYXkoKVxuICAgIH07XG4gICAgdmFyIGNlbGxzID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmNvbHVtbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNlbGxzLnB1c2goeyB0ZXh0OiBrby5vYnNlcnZhYmxlKHRoaXMuZ2V0Q2VsbFRleHQocm93SW5kZXgsIGkpKSB9KTtcbiAgICB9XG4gICAgcm93LmtvQ2VsbHMoY2VsbHMpO1xuICAgIHJldHVybiByb3c7XG4gIH1cbn1cblN1cnZleVByb3BlcnR5RWRpdG9yRmFjdG9yeS5yZWdpc3RlckVkaXRvcihcImNlbGxzXCIsIGZ1bmN0aW9uKFxuICBwcm9wZXJ0eTogU3VydmV5Lkpzb25PYmplY3RQcm9wZXJ0eVxuKTogU3VydmV5UHJvcGVydHlFZGl0b3JCYXNlIHtcbiAgcmV0dXJuIG5ldyBTdXJ2ZXlQcm9wZXJ0eUNlbGxzRWRpdG9yKHByb3BlcnR5KTtcbn0pO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL3Byb3BlcnR5RWRpdG9ycy9wcm9wZXJ0eUNlbGxzRWRpdG9yLnRzIiwiaW1wb3J0ICogYXMga28gZnJvbSBcImtub2Nrb3V0XCI7XG5pbXBvcnQgKiBhcyBTdXJ2ZXkgZnJvbSBcInN1cnZleS1rbm9ja291dFwiO1xuaW1wb3J0IHtcbiAgU3VydmV5UHJvcGVydHlPbmVTZWxlY3RlZEVkaXRvcixcbiAgU3VydmV5UHJvcGVydHlPbmVTZWxlY3RlZEl0ZW1cbn0gZnJvbSBcIi4vcHJvcGVydHlPbmVTZWxlY3RlZEVkaXRvclwiO1xuXG5pbXBvcnQgeyBTdXJ2ZXlQcm9wZXJ0eUVkaXRvckJhc2UgfSBmcm9tIFwiLi9wcm9wZXJ0eUVkaXRvckJhc2VcIjtcbmltcG9ydCB7IFN1cnZleVF1ZXN0aW9uRWRpdG9yIH0gZnJvbSBcIi4uL3F1ZXN0aW9uRWRpdG9ycy9xdWVzdGlvbkVkaXRvclwiO1xuaW1wb3J0IHsgU3VydmV5UHJvcGVydHlFZGl0b3JGYWN0b3J5IH0gZnJvbSBcIi4vcHJvcGVydHlFZGl0b3JGYWN0b3J5XCI7XG5pbXBvcnQgeyBlZGl0b3JMb2NhbGl6YXRpb24gfSBmcm9tIFwiLi4vZW50cmllc1wiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5UHJvcGVydHlIdG1sQ29uZGl0aW9uRWRpdG9yIGV4dGVuZHMgU3VydmV5UHJvcGVydHlPbmVTZWxlY3RlZEVkaXRvciB7XG4gIGNvbnN0cnVjdG9yKHByb3BlcnR5OiBTdXJ2ZXkuSnNvbk9iamVjdFByb3BlcnR5KSB7XG4gICAgc3VwZXIocHJvcGVydHkpO1xuICB9XG4gIHB1YmxpYyBnZXQgZWRpdG9yVHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBcImh0bWxjb25kaXRpb25zXCI7XG4gIH1cbiAgcHJvdGVjdGVkIGdldE9iakNsYXNzTmFtZSgpIHtcbiAgICByZXR1cm4gXCJodG1sY29uZGl0aW9uaXRlbVwiO1xuICB9XG4gIHByb3RlY3RlZCBjcmVhdGVPbmVTZWxlY3RlZEl0ZW0ob2JqOiBhbnkpOiBTdXJ2ZXlQcm9wZXJ0eU9uZVNlbGVjdGVkSXRlbSB7XG4gICAgcmV0dXJuIG5ldyBTdXJ2ZXlQcm9wZXJ0eUh0bWxDb25kaXRpb25JdGVtKG9iaik7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFN1cnZleVByb3BlcnR5SHRtbENvbmRpdGlvbkl0ZW0gZXh0ZW5kcyBTdXJ2ZXlQcm9wZXJ0eU9uZVNlbGVjdGVkSXRlbSB7XG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBvYmo6IFN1cnZleS5CYXNlKSB7XG4gICAgc3VwZXIob2JqKTtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgb2JqLnJlZ2lzdGVyRnVuY3Rpb25PblByb3BlcnR5VmFsdWVDaGFuZ2VkKFwiZXhwcmVzc2lvblwiLCBmdW5jdGlvbigpIHtcbiAgICAgIHNlbGYub2JqZWN0Q2hhbmdlZCgpO1xuICAgIH0pO1xuICB9XG4gIHB1YmxpYyBnZXRUZXh0KCkge1xuICAgIHZhciBleHByZXNzaW9uID0gdGhpcy5vYmpbXCJleHByZXNzaW9uXCJdO1xuICAgIHJldHVybiAoXG4gICAgICBlZGl0b3JMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKFwiZWQuY29tcGxldGVkSHRtbE9uQ29uZGl0aW9uSXRlbVRleHRcIikgK1xuICAgICAgXCIgXCIgK1xuICAgICAgKCEhZXhwcmVzc2lvbiA/IGV4cHJlc3Npb24gOiBcIj9cIilcbiAgICApO1xuICB9XG59XG5cblN1cnZleVByb3BlcnR5RWRpdG9yRmFjdG9yeS5yZWdpc3RlckVkaXRvcihcImh0bWxjb25kaXRpb25zXCIsIGZ1bmN0aW9uKFxuICBwcm9wZXJ0eTogU3VydmV5Lkpzb25PYmplY3RQcm9wZXJ0eVxuKTogU3VydmV5UHJvcGVydHlFZGl0b3JCYXNlIHtcbiAgcmV0dXJuIG5ldyBTdXJ2ZXlQcm9wZXJ0eUh0bWxDb25kaXRpb25FZGl0b3IocHJvcGVydHkpO1xufSk7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvcHJvcGVydHlFZGl0b3JzL3Byb3BlcnR5SHRtbENvbmRpdGlvbkVkaXRvci50cyIsImltcG9ydCAqIGFzIGtvIGZyb20gXCJrbm9ja291dFwiO1xuaW1wb3J0ICogYXMgU3VydmV5IGZyb20gXCJzdXJ2ZXkta25vY2tvdXRcIjtcbmltcG9ydCB7IFN1cnZleVByb3BlcnR5SXRlbXNFZGl0b3IgfSBmcm9tIFwiLi9wcm9wZXJ0eUl0ZW1zRWRpdG9yXCI7XG5pbXBvcnQge1xuICBTdXJ2ZXlQcm9wZXJ0eUVkaXRvckJhc2UsXG4gIElTdXJ2ZXlPYmplY3RFZGl0b3JPcHRpb25zXG59IGZyb20gXCIuL3Byb3BlcnR5RWRpdG9yQmFzZVwiO1xuaW1wb3J0IHsgZWRpdG9yTG9jYWxpemF0aW9uIH0gZnJvbSBcIi4uL2VkaXRvckxvY2FsaXphdGlvblwiO1xuaW1wb3J0IHsgU3VydmV5T2JqZWN0UHJvcGVydHkgfSBmcm9tIFwiLi4vb2JqZWN0UHJvcGVydHlcIjtcbmltcG9ydCB7IFN1cnZleVByb3BlcnR5RWRpdG9yRmFjdG9yeSB9IGZyb20gXCIuL3Byb3BlcnR5RWRpdG9yRmFjdG9yeVwiO1xuaW1wb3J0IHsgZ2V0TmV4dFZhbHVlIH0gZnJvbSBcIi4uL3V0aWxzL3V0aWxzXCI7XG5pbXBvcnQgeyBTdXJ2ZXlRdWVzdGlvbkVkaXRvckRlZmluaXRpb24gfSBmcm9tIFwiLi4vcXVlc3Rpb25FZGl0b3JzL3F1ZXN0aW9uRWRpdG9yRGVmaW5pdGlvblwiO1xuaW1wb3J0IHtcbiAgU3VydmV5TmVzdGVkUHJvcGVydHlFZGl0b3IsXG4gIFN1cnZleU5lc3RlZFByb3BlcnR5RWRpdG9ySXRlbSxcbiAgU3VydmV5TmVzdGVkUHJvcGVydHlFZGl0b3JDb2x1bW5cbn0gZnJvbSBcIi4vcHJvcGVydHlOZXN0ZWRQcm9wZXJ0eUVkaXRvclwiO1xuaW1wb3J0IHsgU3VydmV5UXVlc3Rpb25FZGl0b3IgfSBmcm9tIFwiLi4vcXVlc3Rpb25FZGl0b3JzL3F1ZXN0aW9uRWRpdG9yXCI7XG5pbXBvcnQgeyBTdXJ2ZXlQcm9wZXJ0eU1vZGFsRWRpdG9yIH0gZnJvbSBcIi4uL2VudHJpZXNcIjtcblxuZXhwb3J0IGNsYXNzIFN1cnZleVByb3BlcnR5SXRlbVZhbHVlc0VkaXRvciBleHRlbmRzIFN1cnZleU5lc3RlZFByb3BlcnR5RWRpdG9yIHtcbiAgcHJpdmF0ZSBkZXRhaWxEZWZpbml0aW9uOiBhbnk7XG4gIHByaXZhdGUgb3B0aW9uc1Nob3dUZXh0VmlldzogYm9vbGVhbiA9IHRydWU7XG4gIGtvSXRlbXNUZXh0OiBhbnk7XG4gIGtvU2hvd1RleHRWaWV3OiBhbnk7XG4gIGtvSGFzRGV0YWlsczogYW55O1xuICBjaGFuZ2VUb1RleHRWaWV3Q2xpY2s6IGFueTtcbiAgY2hhbmdlVG9Gb3JtVmlld0NsaWNrOiBhbnk7XG4gIGNvbnN0cnVjdG9yKHByb3BlcnR5OiBTdXJ2ZXkuSnNvbk9iamVjdFByb3BlcnR5KSB7XG4gICAgc3VwZXIocHJvcGVydHkpO1xuICAgIHRoaXMua29TaG93VGV4dFZpZXcgPSBrby5vYnNlcnZhYmxlKHRydWUpO1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICBpZiAocHJvcGVydHkpIHtcbiAgICAgIHRoaXMuZGV0YWlsRGVmaW5pdGlvbiA9XG4gICAgICAgIFN1cnZleVF1ZXN0aW9uRWRpdG9yRGVmaW5pdGlvbi5kZWZpbml0aW9uW3RoaXMuZ2V0SXRlbVZhbHVlQ2xhc3NOYW1lKCldO1xuICAgIH1cbiAgICB0aGlzLmtvSXRlbXNUZXh0ID0ga28ub2JzZXJ2YWJsZShcIlwiKTtcbiAgICB0aGlzLmtvSGFzRGV0YWlscyA9IGtvLm9ic2VydmFibGUodHJ1ZSk7XG4gICAgdGhpcy5rb0FjdGl2ZVZpZXcuc3Vic2NyaWJlKGZ1bmN0aW9uKG5ld1ZhbHVlKSB7XG4gICAgICBpZiAobmV3VmFsdWUgPT0gXCJmb3JtXCIpIHNlbGYudXBkYXRlSXRlbXMoc2VsZi5rb0l0ZW1zVGV4dCgpKTtcbiAgICAgIGVsc2Ugc2VsZi5rb0l0ZW1zVGV4dChzZWxmLmdldEl0ZW1zVGV4dCgpKTtcbiAgICB9KTtcbiAgICB0aGlzLmNoYW5nZVRvVGV4dFZpZXdDbGljayA9IGZ1bmN0aW9uKCkge1xuICAgICAgc2VsZi5rb0FjdGl2ZVZpZXcoXCJ0ZXh0XCIpO1xuICAgIH07XG4gICAgdGhpcy5jaGFuZ2VUb0Zvcm1WaWV3Q2xpY2sgPSBmdW5jdGlvbigpIHtcbiAgICAgIHNlbGYua29BY3RpdmVWaWV3KFwiZm9ybVwiKTtcbiAgICB9O1xuXG4gICAgdGhpcy5tb2RhbE5hbWUgPVxuICAgICAgXCJtb2RlbEVkaXRvclwiICsgXCJpdGVtdmFsdWVzXCIgKyBTdXJ2ZXlQcm9wZXJ0eU1vZGFsRWRpdG9yLmlkQ291bnRlcjtcbiAgICBTdXJ2ZXlQcm9wZXJ0eU1vZGFsRWRpdG9yLmlkQ291bnRlcisrO1xuICAgIHRoaXMubW9kYWxOYW1lVGFyZ2V0ID0gXCIjXCIgKyB0aGlzLm1vZGFsTmFtZTtcbiAgfVxuICBwdWJsaWMgZ2V0IGVkaXRvclR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCJpdGVtdmFsdWVbXVwiO1xuICB9XG4gIHB1YmxpYyBnZXQgZWRpdG9yVHlwZVRlbXBsYXRlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFwiaXRlbXZhbHVlc1wiO1xuICB9XG4gIHB1YmxpYyBnZXQgaGFzRGV0YWlsQnV0dG9uKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIXRoaXMuZGV0YWlsRGVmaW5pdGlvbjtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0SXRlbVZhbHVlQ2xhc3NOYW1lKCkge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnR5ID8gdGhpcy5lZGl0b3JUeXBlICsgXCJAXCIgKyB0aGlzLnByb3BlcnR5Lm5hbWUgOiBcIlwiO1xuICB9XG4gIHByb3RlY3RlZCBnZXRFZGl0b3JOYW1lKCk6IHN0cmluZyB7XG4gICAgaWYgKCF0aGlzLmtvRWRpdEl0ZW0oKSB8fCAhdGhpcy5rb0VkaXRJdGVtKCkuaXRlbSkgcmV0dXJuIFwiXCI7XG4gICAgcmV0dXJuIGVkaXRvckxvY2FsaXphdGlvblxuICAgICAgLmdldFN0cmluZyhcInBlLml0ZW1FZGl0XCIpXG4gICAgICBbXCJmb3JtYXRcIl0odGhpcy5rb0VkaXRJdGVtKCkuaXRlbS52YWx1ZSk7XG4gIH1cbiAgcHVibGljIGJlZm9yZVNob3coKSB7XG4gICAgc3VwZXIuYmVmb3JlU2hvdygpO1xuICAgIHZhciBwcm9wcyA9IHRoaXMuZ2V0RGVmaW5lZFByb3BlcnRpZXMoKTtcbiAgICBpZiAoISFwcm9wcyAmJiBwcm9wcy5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLmNyZWF0ZUNvbHVtbnMoKTtcbiAgICB9XG4gICAgdGhpcy5rb0hhc0RldGFpbHModGhpcy5oYXNEZXRhaWxzUHJvcGVydGllcygpKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0UHJvcGVydGllcygpOiBBcnJheTxTdXJ2ZXkuSnNvbk9iamVjdFByb3BlcnR5PiB7XG4gICAgdmFyIHByb3BzID0gdGhpcy5nZXREZWZpbmVkUHJvcGVydGllcygpO1xuICAgIGlmICghIXByb3BzICYmIHByb3BzLmxlbmd0aCA+IDApIHJldHVybiBwcm9wcztcbiAgICByZXR1cm4gdGhpcy5nZXREZWZhdWx0UHJvcGVydGllcygpO1xuICB9XG4gIHByb3RlY3RlZCBnZXREZWZpbmVkUHJvcGVydGllcygpOiBBcnJheTxhbnk+IHtcbiAgICBpZiAoIXRoaXMucHJvcGVydHkgfHwgIXRoaXMub2JqZWN0IHx8ICF0aGlzLm9iamVjdC5nZXRUeXBlKSByZXR1cm4gW107XG4gICAgdmFyIHByb3BlcnRpZXMgPSBTdXJ2ZXlRdWVzdGlvbkVkaXRvckRlZmluaXRpb24uZ2V0UHJvcGVydGllcyhcbiAgICAgIHRoaXMub2JqZWN0LmdldFR5cGUoKSArIFwiQFwiICsgdGhpcy5wcm9wZXJ0eS5uYW1lXG4gICAgKTtcbiAgICBpZiAocHJvcGVydGllcyAmJiBwcm9wZXJ0aWVzLmxlbmd0aCA+IDApIHtcbiAgICAgIHJldHVybiB0aGlzLmdldFByb3BlcnRpZXNCeU5hbWVzKHRoaXMucHJvcGVydHkuY2xhc3NOYW1lLCBwcm9wZXJ0aWVzKTtcbiAgICB9XG4gICAgcmV0dXJuIFtdO1xuICB9XG4gIHByb3RlY3RlZCBnZXREZWZhdWx0UHJvcGVydGllcygpOiBBcnJheTxTdXJ2ZXkuSnNvbk9iamVjdFByb3BlcnR5PiB7XG4gICAgdmFyIHByb3BlcnRpZXMgPSBTdXJ2ZXkuU2VyaWFsaXplci5nZXRQcm9wZXJ0aWVzKHRoaXMucHJvcGVydHkuY2xhc3NOYW1lKTtcbiAgICB2YXIgcmVzID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoIXByb3BlcnRpZXNbaV0udmlzaWJsZSkgY29udGludWU7XG4gICAgICByZXMucHVzaChwcm9wZXJ0aWVzW2ldKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuICBwcm90ZWN0ZWQgY3JlYXRlRWRpdG9yT3B0aW9ucygpOiBhbnkge1xuICAgIHZhciBvcHRpb25zID0gc3VwZXIuY3JlYXRlRWRpdG9yT3B0aW9ucygpO1xuICAgIG9wdGlvbnMuc2hvd1RleHRWaWV3ID0gdHJ1ZTtcbiAgICBvcHRpb25zLml0ZW1zRW50cnlUeXBlID1cbiAgICAgICh0aGlzLm9wdGlvbnNbXCJvcHRpb25zXCJdICYmXG4gICAgICAgIHRoaXMub3B0aW9uc1tcIm9wdGlvbnNcIl0uaXRlbVZhbHVlc0VkaXRvckVudHJ5VHlwZSkgfHxcbiAgICAgIFwiZm9ybVwiO1xuICAgIHJldHVybiBvcHRpb25zO1xuICB9XG4gIHByb3RlY3RlZCBvblNldEVkaXRvck9wdGlvbnMoZWRpdG9yT3B0aW9uczogYW55KSB7XG4gICAgc3VwZXIub25TZXRFZGl0b3JPcHRpb25zKGVkaXRvck9wdGlvbnMpO1xuICAgIHRoaXMub3B0aW9uc1Nob3dUZXh0VmlldyA9IGVkaXRvck9wdGlvbnMuc2hvd1RleHRWaWV3O1xuICAgIHRoaXMudXBkYXRlU2hvd1RleHRWaWV3VmlzaWJpbGl0eSgpO1xuICAgIHRoaXMua29BY3RpdmVWaWV3KGVkaXRvck9wdGlvbnMuaXRlbXNFbnRyeVR5cGUgfHwgXCJmb3JtXCIpO1xuICB9XG4gIHByb3RlY3RlZCBjcmVhdGVOZXdFZGl0b3JJdGVtKCk6IGFueSB7XG4gICAgdmFyIG5leHRWYWx1ZSA9IG51bGw7XG4gICAgdmFyIHZhbHVlcyA9IHRoaXMua29JdGVtcygpLm1hcChmdW5jdGlvbihpdGVtKSB7XG4gICAgICByZXR1cm4gaXRlbS5pdGVtLml0ZW1WYWx1ZTtcbiAgICB9KTtcbiAgICB2YXIgaXRlbVRleHQgPSB0aGlzLnByb3BlcnR5LmdldEJhc2VWYWx1ZSgpO1xuICAgIGlmICghaXRlbVRleHQpIHtcbiAgICAgIGl0ZW1UZXh0ID0gU3VydmV5LnN1cnZleUxvY2FsaXphdGlvbi5nZXRTdHJpbmcoXCJjaG9pY2VzX0l0ZW1cIik7XG4gICAgfVxuICAgIG5leHRWYWx1ZSA9IGdldE5leHRWYWx1ZShpdGVtVGV4dCwgdmFsdWVzKTtcblxuICAgIHZhciBpdGVtVmFsdWUgPSB0aGlzLmNyZWF0ZUVkaXRvckl0ZW1WYWx1ZUNvcmUobmV4dFZhbHVlKTtcbiAgICBpZiAodGhpcy5vcHRpb25zKSB7XG4gICAgICB0aGlzLm9wdGlvbnMub25JdGVtVmFsdWVBZGRlZENhbGxiYWNrKFxuICAgICAgICB0aGlzLm9iamVjdCxcbiAgICAgICAgdGhpcy5lZGl0YWJsZVByb3BlcnR5TmFtZSxcbiAgICAgICAgaXRlbVZhbHVlLFxuICAgICAgICB2YWx1ZXNcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBuZXcgU3VydmV5UHJvcGVydHlJdGVtVmFsdWVzRWRpdG9ySXRlbShcbiAgICAgIGl0ZW1WYWx1ZSxcbiAgICAgICgpID0+IHRoaXMuY29sdW1ucyxcbiAgICAgIHRoaXMub3B0aW9ucyxcbiAgICAgIHRoaXMuZ2V0SXRlbVZhbHVlQ2xhc3NOYW1lKClcbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCBjcmVhdGVFZGl0b3JJdGVtKGl0ZW06IGFueSk6IGFueSB7XG4gICAgdmFyIGl0ZW1WYWx1ZSA9IHRoaXMuY3JlYXRlRWRpdG9ySXRlbVZhbHVlQ29yZShudWxsKTtcbiAgICBpdGVtVmFsdWUuc2V0RGF0YShpdGVtKTtcbiAgICByZXR1cm4gbmV3IFN1cnZleVByb3BlcnR5SXRlbVZhbHVlc0VkaXRvckl0ZW0oXG4gICAgICBpdGVtVmFsdWUsXG4gICAgICAoKSA9PiB0aGlzLmNvbHVtbnMsXG4gICAgICB0aGlzLm9wdGlvbnMsXG4gICAgICB0aGlzLmdldEl0ZW1WYWx1ZUNsYXNzTmFtZSgpXG4gICAgKTtcbiAgfVxuICBwcml2YXRlIGNyZWF0ZUVkaXRvckl0ZW1WYWx1ZUNvcmUoaXRlbTogYW55KSB7XG4gICAgdmFyIGl0ZW1WYWx1ZSA9IFN1cnZleS5TZXJpYWxpemVyLmNyZWF0ZUNsYXNzKHRoaXMucHJvcGVydHkuY2xhc3NOYW1lKTtcbiAgICBpdGVtVmFsdWUuc2V0RGF0YShpdGVtKTtcblxuICAgIGlmICh0aGlzLm9iamVjdCkge1xuICAgICAgaXRlbVZhbHVlW1wic3VydmV5XCJdID0gdGhpcy5vYmplY3Quc3VydmV5O1xuICAgICAgaXRlbVZhbHVlW1wib2JqZWN0XCJdID0gdGhpcy5vYmplY3Q7XG4gICAgfVxuICAgIGl0ZW1WYWx1ZS5sb2NPd25lciA9IHRoaXM7XG4gICAgcmV0dXJuIGl0ZW1WYWx1ZTtcbiAgfVxuICBwcm90ZWN0ZWQgY3JlYXRlSXRlbUZyb21FZGl0b3JJdGVtKGVkaXRvckl0ZW06IGFueSkge1xuICAgIHZhciBpdGVtID0gZWRpdG9ySXRlbS5pdGVtO1xuICAgIHZhciBhbHdheVNhdmVUZXh0SW5Qcm9wZXJ0eUVkaXRvcnMgPVxuICAgICAgdGhpcy5vcHRpb25zICYmIHRoaXMub3B0aW9ucy5hbHdheVNhdmVUZXh0SW5Qcm9wZXJ0eUVkaXRvcnM7XG4gICAgaWYgKFxuICAgICAgIWFsd2F5U2F2ZVRleHRJblByb3BlcnR5RWRpdG9ycyAmJlxuICAgICAgaXRlbS50ZXh0ID09IGl0ZW0udmFsdWUgJiZcbiAgICAgICF0aGlzLmlzVGV4dExvY2FsaXplZChpdGVtKVxuICAgICkge1xuICAgICAgaXRlbS50ZXh0ID0gbnVsbDtcbiAgICB9XG4gICAgdmFyIGl0ZW1WYWx1ZSA9IFN1cnZleS5TZXJpYWxpemVyLmNyZWF0ZUNsYXNzKGl0ZW0uZ2V0VHlwZSgpKTtcbiAgICBpdGVtVmFsdWUuc2V0RGF0YShpdGVtKTtcbiAgICBkZWxldGUgaXRlbVZhbHVlW1wic3VydmV5XCJdO1xuICAgIGRlbGV0ZSBpdGVtVmFsdWVbXCJvYmplY3RcIl07XG4gICAgcmV0dXJuIGl0ZW1WYWx1ZTtcbiAgfVxuICBwcml2YXRlIGlzVGV4dExvY2FsaXplZChpdGVtKSB7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKGl0ZW0ubG9jVGV4dC52YWx1ZXMpLmxlbmd0aCA+IDE7XG4gIH1cbiAgcHJvdGVjdGVkIG9uVmFsdWVDaGFuZ2VkKCkge1xuICAgIHN1cGVyLm9uVmFsdWVDaGFuZ2VkKCk7XG4gICAgaWYgKHRoaXMuaXNTaG93aW5nTW9kYWwpIHtcbiAgICAgIGlmICh0aGlzLmtvQWN0aXZlVmlldygpICE9PSBcImZvcm1cIikge1xuICAgICAgICB0aGlzLmtvSXRlbXNUZXh0KHRoaXMuZ2V0SXRlbXNUZXh0KCkpO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLnVwZGF0ZVNob3dUZXh0Vmlld1Zpc2liaWxpdHkoKTtcbiAgfVxuICBwcm90ZWN0ZWQgb25CZWZvcmVBcHBseSgpIHtcbiAgICBpZiAodGhpcy5rb0FjdGl2ZVZpZXcoKSAhPT0gXCJmb3JtXCIpIHtcbiAgICAgIHRoaXMudXBkYXRlSXRlbXModGhpcy5rb0l0ZW1zVGV4dCgpKTtcbiAgICB9XG4gICAgc3VwZXIub25CZWZvcmVBcHBseSgpO1xuICB9XG4gIHByb3RlY3RlZCBvbkxpc3REZXRhaWxWaWV3Q2hhbmdlZCgpIHtcbiAgICBzdXBlci5vbkxpc3REZXRhaWxWaWV3Q2hhbmdlZCgpO1xuICAgIHRoaXMudXBkYXRlU2hvd1RleHRWaWV3VmlzaWJpbGl0eSgpO1xuICB9XG4gIHByb3RlY3RlZCB1cGRhdGVJdGVtcyh0ZXh0OiBzdHJpbmcpIHtcbiAgICB2YXIgaXRlbXMgPSBbXTtcbiAgICBpZiAodGV4dCkge1xuICAgICAgdmFyIHByb3BlcnRpZXMgPSB0aGlzLmdldFByb3BlcnRpZXMoKTtcbiAgICAgIHZhciB0ZXh0cyA9IHRleHQuc3BsaXQoXCJcXG5cIik7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRleHRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmICghdGV4dHNbaV0pIGNvbnRpbnVlO1xuICAgICAgICB2YXIgZWxlbWVudHMgPSB0ZXh0c1tpXS5zcGxpdChTdXJ2ZXkuSXRlbVZhbHVlLlNlcGFyYXRvcik7XG4gICAgICAgIHZhciB2YWx1ZUl0ZW0gPSBTdXJ2ZXkuU2VyaWFsaXplci5jcmVhdGVDbGFzcyh0aGlzLnByb3BlcnR5LmNsYXNzTmFtZSk7XG4gICAgICAgIHByb3BlcnRpZXMuZm9yRWFjaCgocCwgaSkgPT4ge1xuICAgICAgICAgIHZhbHVlSXRlbVtwLm5hbWVdID0gZWxlbWVudHNbaV07XG4gICAgICAgIH0pO1xuICAgICAgICBpdGVtcy5wdXNoKHZhbHVlSXRlbSk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMua29JdGVtcyh0aGlzLmdldEl0ZW1zRnJvbVZhbHVlKGl0ZW1zKSk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldEl0ZW1zVGV4dCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmtvSXRlbXMoKVxuICAgICAgLmZpbHRlcihpdGVtID0+ICFpdGVtLmNlbGxzWzBdLmhhc0Vycm9yKVxuICAgICAgLm1hcChpdGVtID0+XG4gICAgICAgIGl0ZW0uY2VsbHNcbiAgICAgICAgICAubWFwKGNlbGwgPT4gY2VsbC52YWx1ZSB8fCBcIlwiKVxuICAgICAgICAgIC5qb2luKFN1cnZleS5JdGVtVmFsdWUuU2VwYXJhdG9yKVxuICAgICAgICAgIC5yZXBsYWNlKC9cXHwkLywgXCJcIilcbiAgICAgIClcbiAgICAgIC5qb2luKFwiXFxuXCIpO1xuICB9XG4gIHByaXZhdGUgdXBkYXRlU2hvd1RleHRWaWV3VmlzaWJpbGl0eSgpIHtcbiAgICBpZiAoIXRoaXMua29TaG93VGV4dFZpZXcpIHJldHVybjtcbiAgICBpZiAoIXRoaXMub3B0aW9uc1Nob3dUZXh0VmlldyB8fCB0aGlzLmNvbHVtbnMubGVuZ3RoID09IDApIHtcbiAgICAgIHRoaXMua29TaG93VGV4dFZpZXcoZmFsc2UpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMua29TaG93VGV4dFZpZXcoXG4gICAgICB0aGlzLmlzVmFsdWVQcm9wZXJ0eVZpc2libGUoKSAmJlxuICAgICAgICAhdGhpcy5oYXNWaXNpYmxlSWZPckVuYWJsZUlmKCkgJiZcbiAgICAgICAgIXRoaXMuaGFzTXVsdGlwbGVMYW5ndWFnZSgpXG4gICAgKTtcbiAgfVxuICBwcml2YXRlIGhhc011bHRpcGxlTGFuZ3VhZ2UoKTogYm9vbGVhbiB7XG4gICAgdmFyIGl0ZW1zID0gdGhpcy5rb0l0ZW1zKCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpdGVtcy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKGl0ZW1zW2ldLml0ZW0ubG9jVGV4dC5oYXNOb25EZWZhdWx0VGV4dCgpKSByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHByaXZhdGUgaXNWYWx1ZVByb3BlcnR5VmlzaWJsZSgpOiBib29sZWFuIHtcbiAgICB2YXIgdmFsdWVQcm9wID0gU3VydmV5LlNlcmlhbGl6ZXIuZmluZFByb3BlcnR5KFwiaXRlbXZhbHVlXCIsIFwidmFsdWVcIik7XG4gICAgcmV0dXJuICEhdmFsdWVQcm9wICYmIHZhbHVlUHJvcC52aXNpYmxlICYmICF2YWx1ZVByb3AucmVhZE9ubHk7XG4gIH1cbiAgcHJpdmF0ZSBoYXNWaXNpYmxlSWZPckVuYWJsZUlmKCk6IGJvb2xlYW4ge1xuICAgIHZhciBpdGVtcyA9IHRoaXMua29JdGVtcygpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaXRlbXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICghIWl0ZW1zW2ldLml0ZW0udmlzaWJsZUlmIHx8IGl0ZW1zW2ldLml0ZW0uZW5hYmxlSWYpIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcHJpdmF0ZSBoYXNEZXRhaWxzUHJvcGVydGllcygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgU3VydmV5UHJvcGVydHlJdGVtVmFsdWVzRWRpdG9ySXRlbSBleHRlbmRzIFN1cnZleU5lc3RlZFByb3BlcnR5RWRpdG9ySXRlbSB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBpdGVtOiBTdXJ2ZXkuSXRlbVZhbHVlLFxuICAgIGdldENvbHVtbnM6ICgpID0+IEFycmF5PFN1cnZleU5lc3RlZFByb3BlcnR5RWRpdG9yQ29sdW1uPixcbiAgICBvcHRpb25zOiBJU3VydmV5T2JqZWN0RWRpdG9yT3B0aW9ucyxcbiAgICBwcml2YXRlIGNsYXNzTmFtZTogc3RyaW5nID0gXCJcIlxuICApIHtcbiAgICBzdXBlcihpdGVtLCBnZXRDb2x1bW5zLCBvcHRpb25zKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0Q2xhc3NOYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuICEhdGhpcy5jbGFzc05hbWUgPyB0aGlzLmNsYXNzTmFtZSA6IHRoaXMub2JqLmdldFR5cGUoKTtcbiAgfVxufVxuXG5TdXJ2ZXlQcm9wZXJ0eUVkaXRvckZhY3RvcnkucmVnaXN0ZXJFZGl0b3IoXG4gIFwiaXRlbXZhbHVlW11cIixcbiAgZnVuY3Rpb24ocHJvcGVydHk6IFN1cnZleS5Kc29uT2JqZWN0UHJvcGVydHkpOiBTdXJ2ZXlQcm9wZXJ0eUVkaXRvckJhc2Uge1xuICAgIHJldHVybiBuZXcgU3VydmV5UHJvcGVydHlJdGVtVmFsdWVzRWRpdG9yKHByb3BlcnR5KTtcbiAgfSxcbiAgXCJpdGVtdmFsdWVcIlxuKTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9wcm9wZXJ0eUVkaXRvcnMvcHJvcGVydHlJdGVtVmFsdWVzRWRpdG9yLnRzIiwiaW1wb3J0ICogYXMga28gZnJvbSBcImtub2Nrb3V0XCI7XG5pbXBvcnQgKiBhcyBTdXJ2ZXkgZnJvbSBcInN1cnZleS1rbm9ja291dFwiO1xuaW1wb3J0IHtcbiAgU3VydmV5UHJvcGVydHlFZGl0b3JCYXNlLFxuICBJU3VydmV5T2JqZWN0RWRpdG9yT3B0aW9uc1xufSBmcm9tIFwiLi9wcm9wZXJ0eUVkaXRvckJhc2VcIjtcbmltcG9ydCB7IFN1cnZleVF1ZXN0aW9uRWRpdG9yIH0gZnJvbSBcIi4uL3F1ZXN0aW9uRWRpdG9ycy9xdWVzdGlvbkVkaXRvclwiO1xuaW1wb3J0IHsgZWRpdG9yTG9jYWxpemF0aW9uIH0gZnJvbSBcIi4uL2VkaXRvckxvY2FsaXphdGlvblwiO1xuaW1wb3J0IHtcbiAgU3VydmV5TmVzdGVkUHJvcGVydHlFZGl0b3IsXG4gIFN1cnZleU5lc3RlZFByb3BlcnR5RWRpdG9ySXRlbSxcbiAgU3VydmV5TmVzdGVkUHJvcGVydHlFZGl0b3JDb2x1bW5cbn0gZnJvbSBcIi4vcHJvcGVydHlOZXN0ZWRQcm9wZXJ0eUVkaXRvclwiO1xuaW1wb3J0IHsgU3VydmV5UHJvcGVydHlFZGl0b3JGYWN0b3J5IH0gZnJvbSBcIi4vcHJvcGVydHlFZGl0b3JGYWN0b3J5XCI7XG5pbXBvcnQgeyBnZXROZXh0VmFsdWUgfSBmcm9tIFwiLi4vdXRpbHMvdXRpbHNcIjtcblxuZXhwb3J0IGNsYXNzIFN1cnZleVByb3BlcnR5RHJvcGRvd25Db2x1bW5zRWRpdG9yIGV4dGVuZHMgU3VydmV5TmVzdGVkUHJvcGVydHlFZGl0b3Ige1xuICBjb25zdHJ1Y3Rvcihwcm9wZXJ0eTogU3VydmV5Lkpzb25PYmplY3RQcm9wZXJ0eSkge1xuICAgIHN1cGVyKHByb3BlcnR5KTtcbiAgfVxuICBwdWJsaWMgZ2V0IGVkaXRvclR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCJtYXRyaXhkcm9wZG93bmNvbHVtbnNcIjtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0RWRpdG9yTmFtZSgpOiBzdHJpbmcge1xuICAgIGlmICghdGhpcy5rb0VkaXRJdGVtKCkpIHJldHVybiBcIlwiO1xuICAgIHJldHVybiBlZGl0b3JMb2NhbGl6YXRpb25cbiAgICAgIC5nZXRTdHJpbmcoXCJwZS5jb2x1bW5FZGl0XCIpXG4gICAgICBbXCJmb3JtYXRcIl0odGhpcy5rb0VkaXRJdGVtKCkuY29sdW1uLm5hbWUpO1xuICB9XG4gIHByb3RlY3RlZCBjcmVhdGVOZXdFZGl0b3JJdGVtKCk6IGFueSB7XG4gICAgdmFyIG5ld0NvbHVtbiA9IHRoaXMuY3JlYXRlRWRpdG9yQ29sdW1uSXRlbUNvcmUobnVsbCk7XG4gICAgbmV3Q29sdW1uLm5hbWUgPSBnZXROZXh0VmFsdWUoXCJcIiwgdGhpcy5nZXRDb2x1bW5OYW1lcygpKTtcbiAgICB2YXIgY29sdW1ucyA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5rb0l0ZW1zKCkubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbHVtbnMucHVzaCh0aGlzLmtvSXRlbXMoKVtpXS5jb2x1bW4pO1xuICAgIH1cbiAgICBjb2x1bW5zLnB1c2gobmV3Q29sdW1uKTtcbiAgICBpZiAodGhpcy5vcHRpb25zKSB7XG4gICAgICB0aGlzLm9wdGlvbnMub25NYXRyaXhEcm9wZG93bkNvbHVtbkFkZGVkQ2FsbGJhY2soXG4gICAgICAgIHRoaXMub2JqZWN0LFxuICAgICAgICBuZXdDb2x1bW4sXG4gICAgICAgIGNvbHVtbnNcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBuZXcgU3VydmV5UHJvcGVydHlNYXRyaXhEcm9wZG93bkNvbHVtbnNJdGVtKFxuICAgICAgbmV3Q29sdW1uLFxuICAgICAgKCkgPT4gdGhpcy5jb2x1bW5zLFxuICAgICAgdGhpcy5vcHRpb25zXG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgY3JlYXRlRWRpdG9ySXRlbShpdGVtOiBhbnkpIHtcbiAgICB2YXIgbmV3Q29sdW1uID0gdGhpcy5jcmVhdGVFZGl0b3JDb2x1bW5JdGVtQ29yZShpdGVtKTtcbiAgICByZXR1cm4gbmV3IFN1cnZleVByb3BlcnR5TWF0cml4RHJvcGRvd25Db2x1bW5zSXRlbShcbiAgICAgIG5ld0NvbHVtbixcbiAgICAgICgpID0+IHRoaXMuY29sdW1ucyxcbiAgICAgIHRoaXMub3B0aW9uc1xuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIGNyZWF0ZUl0ZW1Gcm9tRWRpdG9ySXRlbShlZGl0b3JJdGVtOiBhbnkpIHtcbiAgICB2YXIgbmV3Q29sdW1uID0gbmV3IFN1cnZleS5NYXRyaXhEcm9wZG93bkNvbHVtbihcIlwiKTtcbiAgICB2YXIganNvbiA9IG5ldyBTdXJ2ZXkuSnNvbk9iamVjdCgpLnRvSnNvbk9iamVjdChlZGl0b3JJdGVtLmNvbHVtbik7XG4gICAgbmV3IFN1cnZleS5Kc29uT2JqZWN0KCkudG9PYmplY3QoanNvbiwgbmV3Q29sdW1uKTtcbiAgICByZXR1cm4gbmV3Q29sdW1uO1xuICB9XG4gIHByb3RlY3RlZCBjcmVhdGVFZGl0b3JDb2x1bW5JdGVtQ29yZShpdGVtOiBhbnkpOiBTdXJ2ZXkuTWF0cml4RHJvcGRvd25Db2x1bW4ge1xuICAgIHZhciBuZXdDb2x1bW4gPSBuZXcgU3VydmV5Lk1hdHJpeERyb3Bkb3duQ29sdW1uKFwiXCIpO1xuICAgIG5ld0NvbHVtbltcIm9iamVjdFwiXSA9IHRoaXMub2JqZWN0O1xuICAgIG5ld0NvbHVtbi5jb2xPd25lciA9IHRoaXMub2JqZWN0O1xuICAgIGlmIChpdGVtKSB7XG4gICAgICB2YXIganNvbiA9IG5ldyBTdXJ2ZXkuSnNvbk9iamVjdCgpLnRvSnNvbk9iamVjdChpdGVtKTtcbiAgICAgIG5ldyBTdXJ2ZXkuSnNvbk9iamVjdCgpLnRvT2JqZWN0KGpzb24sIG5ld0NvbHVtbik7XG4gICAgfVxuICAgIHJldHVybiBuZXdDb2x1bW47XG4gIH1cbiAgcHJvdGVjdGVkIGdldFByb3BlcnRpZXMoKTogQXJyYXk8U3VydmV5Lkpzb25PYmplY3RQcm9wZXJ0eT4ge1xuICAgIHZhciBuYW1lcyA9IHRoaXMuZ2V0UHJvcGVydGllc05hbWVzKFwibWF0cml4ZHJvcGRvd25jb2x1bW5cIiwgW1xuICAgICAgXCJpc1JlcXVpcmVkXCIsXG4gICAgICBcImNlbGxUeXBlXCIsXG4gICAgICBcIm5hbWVcIixcbiAgICAgIFwidGl0bGVcIlxuICAgIF0pO1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnRpZXNCeU5hbWVzKFwibWF0cml4ZHJvcGRvd25jb2x1bW5cIiwgbmFtZXMpO1xuICB9XG4gIHByaXZhdGUgZ2V0Q29sdW1uTmFtZXMoKTogQXJyYXk8c3RyaW5nPiB7XG4gICAgdmFyIHJlcyA9IFtdO1xuICAgIHZhciBpdGVtcyA9IHRoaXMua29JdGVtcygpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaXRlbXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBuYW1lID0gaXRlbXNbaV0uY29sdW1uLm5hbWU7XG4gICAgICBpZiAoISFuYW1lKSB7XG4gICAgICAgIHJlcy5wdXNoKG5hbWUpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlQcm9wZXJ0eU1hdHJpeERyb3Bkb3duQ29sdW1uc0l0ZW0gZXh0ZW5kcyBTdXJ2ZXlOZXN0ZWRQcm9wZXJ0eUVkaXRvckl0ZW0ge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgY29sdW1uOiBTdXJ2ZXkuTWF0cml4RHJvcGRvd25Db2x1bW4sXG4gICAgZ2V0Q29sdW1uczogKCkgPT4gQXJyYXk8U3VydmV5TmVzdGVkUHJvcGVydHlFZGl0b3JDb2x1bW4+LFxuICAgIG9wdGlvbnM6IElTdXJ2ZXlPYmplY3RFZGl0b3JPcHRpb25zID0gbnVsbFxuICApIHtcbiAgICBzdXBlcihjb2x1bW4sIGdldENvbHVtbnMsIG9wdGlvbnMpO1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICBjb2x1bW4ucmVnaXN0ZXJGdW5jdGlvbk9uUHJvcGVydHlWYWx1ZUNoYW5nZWQoXG4gICAgICBcImNlbGxUeXBlXCIsXG4gICAgICBmdW5jdGlvbigpIHtcbiAgICAgICAgc2VsZi5yZXNldFN1cnZleVF1ZXN0aW9uRWRpdG9yKCk7XG4gICAgICB9LFxuICAgICAgXCJjb2xFZGl0XCJcbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCBnZXRDbGFzc05hbWUoKTogc3RyaW5nIHtcbiAgICB2YXIgYmFzZTogc3RyaW5nID0gXCJtYXRyaXhkcm9wZG93bmNvbHVtbkBcIjtcbiAgICBpZiAoIXRoaXMuY29sdW1uW1wib2JqZWN0XCJdIHx8IHRoaXMub2JqLmNlbGxUeXBlICE9PSBcImRlZmF1bHRcIikge1xuICAgICAgcmV0dXJuIGJhc2UgKyB0aGlzLm9iai5jZWxsVHlwZTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICByZXR1cm4gYmFzZSArIHRoaXMuY29sdW1uW1wib2JqZWN0XCJdLmNlbGxUeXBlO1xuICAgIH1cbiAgfVxufVxuXG5TdXJ2ZXlQcm9wZXJ0eUVkaXRvckZhY3RvcnkucmVnaXN0ZXJFZGl0b3IoXCJtYXRyaXhkcm9wZG93bmNvbHVtbnNcIiwgZnVuY3Rpb24oXG4gIHByb3BlcnR5OiBTdXJ2ZXkuSnNvbk9iamVjdFByb3BlcnR5XG4pOiBTdXJ2ZXlQcm9wZXJ0eUVkaXRvckJhc2Uge1xuICByZXR1cm4gbmV3IFN1cnZleVByb3BlcnR5RHJvcGRvd25Db2x1bW5zRWRpdG9yKHByb3BlcnR5KTtcbn0pO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL3Byb3BlcnR5RWRpdG9ycy9wcm9wZXJ0eU1hdHJpeERyb3Bkb3duQ29sdW1uc0VkaXRvci50cyIsImltcG9ydCAqIGFzIGtvIGZyb20gXCJrbm9ja291dFwiO1xuaW1wb3J0ICogYXMgU3VydmV5IGZyb20gXCJzdXJ2ZXkta25vY2tvdXRcIjtcbmltcG9ydCB7IFN1cnZleVByb3BlcnR5TW9kYWxFZGl0b3IgfSBmcm9tIFwiLi9wcm9wZXJ0eU1vZGFsRWRpdG9yXCI7XG5pbXBvcnQgeyBTdXJ2ZXlQcm9wZXJ0eUVkaXRvckJhc2UgfSBmcm9tIFwiLi9wcm9wZXJ0eUVkaXRvckJhc2VcIjtcbmltcG9ydCB7IGVkaXRvckxvY2FsaXphdGlvbiB9IGZyb20gXCIuLi9lZGl0b3JMb2NhbGl6YXRpb25cIjtcbmltcG9ydCB7IFN1cnZleVByb3BlcnR5RWRpdG9yRmFjdG9yeSB9IGZyb20gXCIuL3Byb3BlcnR5RWRpdG9yRmFjdG9yeVwiO1xuXG5pbnRlcmZhY2UgSU11bHRpcGxlVmFsdWVzQ2F0ZWdvcnkge1xuICBrb0NhdGVnb3J5OiBhbnk7XG4gIGtvVGl0bGVWaXNpYmxlOiBhbnk7XG4gIGtvSXRlbXM6IGFueTtcbn1cblxuZXhwb3J0IGNsYXNzIFN1cnZleVByb3BlcnR5TXVsdGlwbGVWYWx1ZXNFZGl0b3IgZXh0ZW5kcyBTdXJ2ZXlQcm9wZXJ0eU1vZGFsRWRpdG9yIHtcbiAgcHVibGljIGl0ZW1zOiBBcnJheTxTdXJ2ZXkuSXRlbVZhbHVlPiA9IFtdO1xuICBrb0NhdGVnb3JpZXM6IGFueTtcbiAga29FZGl0aW5nVmFsdWU6IGFueTtcbiAgY29uc3RydWN0b3IocHJvcGVydHk6IFN1cnZleS5Kc29uT2JqZWN0UHJvcGVydHkpIHtcbiAgICBzdXBlcihwcm9wZXJ0eSk7XG4gICAgdGhpcy5rb0VkaXRpbmdWYWx1ZSA9IGtvLm9ic2VydmFibGVBcnJheSgpO1xuICAgIHRoaXMua29DYXRlZ29yaWVzID0ga28ub2JzZXJ2YWJsZUFycmF5KCk7XG4gICAgdGhpcy5rb0NhdGVnb3JpZXMgPSBrby5vYnNlcnZhYmxlQXJyYXkoKTtcbiAgICB0aGlzLnVwZGF0ZUNob2ljZXMoKTtcbiAgfVxuICBwdWJsaWMgZ2V0VmFsdWVUZXh0KHZhbHVlOiBhbnkpOiBzdHJpbmcge1xuICAgIGlmICghdmFsdWUpIHJldHVybiBlZGl0b3JMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKFwicGUuZW1wdHlcIik7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHZhbHVlKSkgdmFsdWUgPSBbdmFsdWVdO1xuICAgIHZhciBzdHIgPSBcIltcIjtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZhbHVlLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoaSA+IDApIHN0ciArPSBcIiwgXCI7XG4gICAgICBzdHIgKz0gdGhpcy5nZXRUZXh0QnlJdGVtVmFsdWUodmFsdWVbaV0pO1xuICAgIH1cbiAgICBzdHIgKz0gXCJdXCI7XG4gICAgcmV0dXJuIHN0cjtcbiAgfVxuICBwdWJsaWMgc2V0T2JqZWN0KHZhbHVlOiBhbnkpIHtcbiAgICBzdXBlci5zZXRPYmplY3QodmFsdWUpO1xuICAgIHRoaXMudXBkYXRlQ2hvaWNlcygpO1xuICAgIHRoaXMuc2V0RWRpdGluZ1ZhbHVlKCk7XG4gIH1cbiAgcHJvdGVjdGVkIHVwZGF0ZVZhbHVlKCkge1xuICAgIHN1cGVyLnVwZGF0ZVZhbHVlKCk7XG4gICAgdGhpcy5zZXRFZGl0aW5nVmFsdWUoKTtcbiAgfVxuICBwcm90ZWN0ZWQgb25CZWZvcmVBcHBseSgpIHtcbiAgICB0aGlzLmtvVmFsdWUoW10uY29uY2F0KHRoaXMua29FZGl0aW5nVmFsdWUoKSkpO1xuICB9XG4gIHB1YmxpYyBnZXQgZWRpdG9yVHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBcIm11bHRpcGxldmFsdWVzXCI7XG4gIH1cbiAgcHVibGljIGdldEJhY2tncm91bmRDbHModmFsdWUpIHtcbiAgICByZXR1cm4gdGhpcy5rb0VkaXRpbmdWYWx1ZSgpLmluZGV4T2YoXCJcIiArIHZhbHVlKSA9PT0gLTFcbiAgICAgID8gXCJzdmQtbGlnaHQtYmFja2dyb3VuZC1jb2xvclwiXG4gICAgICA6IFwic3ZkLW1haW4tYmFja2dyb3VuZC1jb2xvclwiO1xuICB9XG4gIHB1YmxpYyB1cGRhdGVEeW5hbWljUHJvcGVydGllcygpIHtcbiAgICBzdXBlci51cGRhdGVEeW5hbWljUHJvcGVydGllcygpO1xuICAgIHRoaXMudXBkYXRlQ2hvaWNlcygpO1xuICB9XG4gIHByaXZhdGUgc2V0Q2hvaWNlcyhjaG9pY2VzOiBBcnJheTxTdXJ2ZXkuSXRlbVZhbHVlPikge1xuICAgIGlmICghY2hvaWNlcyB8fCAhQXJyYXkuaXNBcnJheShjaG9pY2VzKSB8fCAhY2hvaWNlcy5sZW5ndGgpIHJldHVybjtcbiAgICBTdXJ2ZXkuSXRlbVZhbHVlLnNldERhdGEodGhpcy5pdGVtcywgY2hvaWNlcyk7XG4gICAgdGhpcy5zZXRDYXRlZ29yaWVzKGNob2ljZXMpO1xuICAgIHRoaXMuaXRlbXMuc29ydChmdW5jdGlvbihhLCBiKSB7XG4gICAgICB2YXIgY2EgPSAhIWEuY2F0ZWdvcnkgPyBhLmNhdGVnb3J5IDogXCJcIjtcbiAgICAgIHZhciBjYiA9ICEhYi5jYXRlZ29yeSA/IGIuY2F0ZWdvcnkgOiBcIlwiO1xuICAgICAgaWYgKGNhICE9IGNiKSByZXR1cm4gY2EgPCBjYiA/IC0xIDogMTtcbiAgICAgIGNhID0gISFhLnRleHQgPyBhLnRleHQgOiBcIlwiO1xuICAgICAgY2IgPSAhIWIudGV4dCA/IGIudGV4dCA6IFwiXCI7XG4gICAgICBpZiAoY2EgIT0gY2IpIHJldHVybiBjYSA8IGNiID8gLTEgOiAxO1xuICAgICAgaWYgKGNhLnZhbHVlIDwgY2IudmFsdWUpIHJldHVybiAtMTtcbiAgICAgIGlmIChjYS52YWx1ZSA+IGNiLnZhbHVlKSByZXR1cm4gMTtcbiAgICAgIHJldHVybiAwO1xuICAgIH0pO1xuICAgIHRoaXMua29DYXRlZ29yaWVzKHRoaXMuYnVpbGRDYXRlZ29yaWVzKCkpO1xuICB9XG4gIHByaXZhdGUgdXBkYXRlQ2hvaWNlcygpIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgdmFyIGNob2ljZXMgPSAoPGFueT50aGlzLnByb3BlcnR5W1wiZ2V0Q2hvaWNlc1wiXSkodGhpcy5vYmplY3QsIGZ1bmN0aW9uKFxuICAgICAgY2hvaWNlczogYW55XG4gICAgKSB7XG4gICAgICBzZWxmLnNldENob2ljZXMoY2hvaWNlcyk7XG4gICAgfSk7XG4gICAgdGhpcy5zZXRDaG9pY2VzKGNob2ljZXMpO1xuICB9XG4gIHByaXZhdGUgZ2V0VGV4dEJ5SXRlbVZhbHVlKHZhbDogYW55KSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLml0ZW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAodGhpcy5pdGVtc1tpXS52YWx1ZSA9PSB2YWwpIHJldHVybiB0aGlzLml0ZW1zW2ldLnRleHQ7XG4gICAgfVxuICAgIHJldHVybiB2YWw7XG4gIH1cbiAgcHJpdmF0ZSBzZXRFZGl0aW5nVmFsdWUoKSB7XG4gICAgdmFyIHZhbCA9IHRoaXMua29WYWx1ZSgpO1xuICAgIGlmICh2YWwgPT0gbnVsbCB8fCB2YWwgPT0gdW5kZWZpbmVkKSB2YWwgPSBbXTtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkodmFsKSkgdmFsID0gW3ZhbF07XG4gICAgdGhpcy5rb0VkaXRpbmdWYWx1ZSh2YWwpO1xuICB9XG4gIHByaXZhdGUgc2V0Q2F0ZWdvcmllcyhjaG9pY2VzOiBBcnJheTxTdXJ2ZXkuSXRlbVZhbHVlPikge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5pdGVtcy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKCEhY2hvaWNlc1tpXS5jYXRlZ29yeSkge1xuICAgICAgICB0aGlzLml0ZW1zW2ldLmNhdGVnb3J5ID0gY2hvaWNlc1tpXS5jYXRlZ29yeTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBidWlsZENhdGVnb3JpZXMoKTogQXJyYXk8SU11bHRpcGxlVmFsdWVzQ2F0ZWdvcnk+IHtcbiAgICB2YXIgcmVzID0gW107XG4gICAgdmFyIGN1ckNhdGVnb3J5ID0gXCJcIjtcbiAgICB2YXIgY2F0ZWdvcnkgPSBudWxsO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5pdGVtcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGl0ZW0gPSB0aGlzLml0ZW1zW2ldO1xuICAgICAgdmFyIGl0ZW1DYXRlZ29yeSA9ICEhaXRlbS5jYXRlZ29yeSA/IGl0ZW0uY2F0ZWdvcnkgOiBcIlwiO1xuICAgICAgaWYgKGNhdGVnb3J5ID09IG51bGwgfHwgY3VyQ2F0ZWdvcnkgIT0gaXRlbUNhdGVnb3J5KSB7XG4gICAgICAgIGN1ckNhdGVnb3J5ID0gaXRlbUNhdGVnb3J5O1xuICAgICAgICBjYXRlZ29yeSA9IHtcbiAgICAgICAgICBrb1RpdGxlVmlzaWJsZToga28ub2JzZXJ2YWJsZShjdXJDYXRlZ29yeSAhPSBcIlwiKSxcbiAgICAgICAgICBrb0NhdGVnb3J5OiBrby5vYnNlcnZhYmxlKGN1ckNhdGVnb3J5KSxcbiAgICAgICAgICBrb0l0ZW1zOiBrby5vYnNlcnZhYmxlQXJyYXkoKSxcbiAgICAgICAgICBlZGl0b3I6IHRoaXNcbiAgICAgICAgfTtcbiAgICAgICAgcmVzLnB1c2goY2F0ZWdvcnkpO1xuICAgICAgfVxuICAgICAgY2F0ZWdvcnkua29JdGVtcy5wdXNoKGl0ZW0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzO1xuICB9XG59XG5TdXJ2ZXlQcm9wZXJ0eUVkaXRvckZhY3RvcnkucmVnaXN0ZXJFZGl0b3IoXCJtdWx0aXBsZXZhbHVlc1wiLCBmdW5jdGlvbihcbiAgcHJvcGVydHk6IFN1cnZleS5Kc29uT2JqZWN0UHJvcGVydHlcbik6IFN1cnZleVByb3BlcnR5RWRpdG9yQmFzZSB7XG4gIHJldHVybiBuZXcgU3VydmV5UHJvcGVydHlNdWx0aXBsZVZhbHVlc0VkaXRvcihwcm9wZXJ0eSk7XG59KTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9wcm9wZXJ0eUVkaXRvcnMvcHJvcGVydHlNdWx0aXBsZVZhbHVlc0VkaXRvci50cyIsImltcG9ydCAqIGFzIGtvIGZyb20gXCJrbm9ja291dFwiO1xuaW1wb3J0ICogYXMgU3VydmV5IGZyb20gXCJzdXJ2ZXkta25vY2tvdXRcIjtcbmltcG9ydCB7IFN1cnZleVByb3BlcnR5TW9kYWxFZGl0b3IgfSBmcm9tIFwiLi9wcm9wZXJ0eU1vZGFsRWRpdG9yXCI7XG5pbXBvcnQgeyBTdXJ2ZXlQcm9wZXJ0eUVkaXRvckJhc2UgfSBmcm9tIFwiLi9wcm9wZXJ0eUVkaXRvckJhc2VcIjtcbmltcG9ydCB7IGVkaXRvckxvY2FsaXphdGlvbiB9IGZyb20gXCIuLi9lZGl0b3JMb2NhbGl6YXRpb25cIjtcbmltcG9ydCB7IFN1cnZleVByb3BlcnR5RWRpdG9yRmFjdG9yeSB9IGZyb20gXCIuL3Byb3BlcnR5RWRpdG9yRmFjdG9yeVwiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5UHJvcGVydHlSZXN1bHRmdWxsRWRpdG9yIGV4dGVuZHMgU3VydmV5UHJvcGVydHlNb2RhbEVkaXRvciB7XG4gIGtvSXRlbXM6IGFueTtcbiAgcHVibGljIHN1cnZleTogU3VydmV5LlN1cnZleTtcbiAgcHVibGljIHF1ZXN0aW9uOiBTdXJ2ZXkuUXVlc3Rpb25Ecm9wZG93bjtcbiAgcHJpdmF0ZSBpdGVtczogQXJyYXk8U3VydmV5UHJvcGVydHlSZXN1bHRmdWxsRWRpdG9ySXRlbT4gPSBbXTtcblxuICBjb25zdHJ1Y3Rvcihwcm9wZXJ0eTogU3VydmV5Lkpzb25PYmplY3RQcm9wZXJ0eSkge1xuICAgIHN1cGVyKHByb3BlcnR5KTtcbiAgICB0aGlzLmtvSXRlbXMgPSBrby5vYnNlcnZhYmxlQXJyYXkoKTtcbiAgICB0aGlzLmNyZWF0ZVN1cnZleSgpO1xuICB9XG4gIHB1YmxpYyBnZXQgZWRpdG9yVHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBcInJlc3RmdWxsXCI7XG4gIH1cbiAgcHVibGljIGdldCByZXN0ZnVsbFZhbHVlKCkge1xuICAgIGlmICh0aGlzLmVkaXRpbmdPYmplY3QpIHJldHVybiB0aGlzLmVkaXRpbmdPYmplY3RbdGhpcy5wcm9wZXJ0eS5uYW1lXTtcbiAgICBpZiAodGhpcy5lZGl0aW5nVmFsdWUpIHJldHVybiB0aGlzLmVkaXRpbmdWYWx1ZTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBwdWJsaWMgZ2V0VmFsdWVUZXh0KHZhbHVlOiBhbnkpOiBzdHJpbmcge1xuICAgIGlmICghdmFsdWUgfHwgIXZhbHVlLnVybCkgcmV0dXJuIGVkaXRvckxvY2FsaXphdGlvbi5nZXRTdHJpbmcoXCJwZS5lbXB0eVwiKTtcbiAgICB2YXIgc3RyID0gdmFsdWUudXJsO1xuICAgIGlmIChzdHIubGVuZ3RoID4gMjApIHtcbiAgICAgIHN0ciA9IHN0ci5zdWJzdHIoMCwgMjApICsgXCIuLi5cIjtcbiAgICB9XG4gICAgcmV0dXJuIHN0cjtcbiAgfVxuICBwcml2YXRlIGFkZEl0ZW0ocHJvcE5hbWU6IHN0cmluZywgdmFsOiBhbnkpIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgdGhpcy5pdGVtcy5wdXNoKFxuICAgICAgbmV3IFN1cnZleVByb3BlcnR5UmVzdWx0ZnVsbEVkaXRvckl0ZW0oXG4gICAgICAgIHByb3BOYW1lLFxuICAgICAgICB2YWwgPyB2YWxbcHJvcE5hbWVdIDogXCJcIixcbiAgICAgICAgZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgICAgICBzZWxmLm9uSXRlbVZhbHVlQ2hhbmdlZChpdGVtKTtcbiAgICAgICAgfVxuICAgICAgKVxuICAgICk7XG4gIH1cbiAgcHJpdmF0ZSBvbkl0ZW1WYWx1ZUNoYW5nZWQoaXRlbTogU3VydmV5UHJvcGVydHlSZXN1bHRmdWxsRWRpdG9ySXRlbSkge1xuICAgIHRoaXMucXVlc3Rpb24uY2hvaWNlc0J5VXJsW2l0ZW0ubmFtZV0gPSBpdGVtLmtvVmFsdWUoKTtcbiAgICB0aGlzLnJ1bigpO1xuICB9XG4gIHByb3RlY3RlZCBvblZhbHVlQ2hhbmdlZCgpIHtcbiAgICB2YXIgdmFsID0gdGhpcy5yZXN0ZnVsbFZhbHVlO1xuICAgIHRoaXMuaXRlbXMgPSBbXTtcbiAgICB0aGlzLmFkZEl0ZW0oXCJ1cmxcIiwgdmFsKTtcbiAgICB0aGlzLmFkZEl0ZW0oXCJwYXRoXCIsIHZhbCk7XG4gICAgdGhpcy5hZGRJdGVtKFwidmFsdWVOYW1lXCIsIHZhbCk7XG4gICAgdGhpcy5hZGRJdGVtKFwidGl0bGVOYW1lXCIsIHZhbCk7XG4gICAgaWYgKHZhbCAmJiB2YWxbXCJnZXRDdXN0b21Qcm9wZXJ0aWVzTmFtZXNcIl0pIHtcbiAgICAgIHZhciBjdXN0b21Qcm9wZXJ0aWVzID0gdmFsW1wiZ2V0Q3VzdG9tUHJvcGVydGllc05hbWVzXCJdKCk7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGN1c3RvbVByb3BlcnRpZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIHByb3BOYW1lID0gY3VzdG9tUHJvcGVydGllc1tpXTtcbiAgICAgICAgaWYgKHByb3BOYW1lID09PSBcInZpc2libGVJZk5hbWVcIikgY29udGludWU7IC8vVE9ETyByZW1vdmUgbGF0ZXJcbiAgICAgICAgdGhpcy5hZGRJdGVtKHByb3BOYW1lLCB2YWwpO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLmtvSXRlbXModGhpcy5pdGVtcyk7XG4gIH1cbiAgcHJvdGVjdGVkIG9uQmVmb3JlQXBwbHkoKSB7XG4gICAgdmFyIHZhbCA9IG5ldyBTdXJ2ZXkuQ2hvaWNlc1Jlc3RmdWxsKCk7XG4gICAgdmFsW1wib3duZXJcIl0gPSB0aGlzLmVkaXRpbmdPYmplY3Q7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLml0ZW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgaXRlbSA9IHRoaXMuaXRlbXNbaV07XG4gICAgICB2YWxbaXRlbS5uYW1lXSA9IGl0ZW0ua29WYWx1ZSgpO1xuICAgIH1cbiAgICB0aGlzLnNldFZhbHVlQ29yZSh2YWwpO1xuICB9XG4gIHByaXZhdGUgcnVuKCkge1xuICAgIHRoaXMucXVlc3Rpb24uY2hvaWNlc0J5VXJsLnJ1bigpO1xuICB9XG4gIHByaXZhdGUgY3JlYXRlU3VydmV5KCkge1xuICAgIHRoaXMuc3VydmV5ID0gISF0aGlzLm9wdGlvbnMgPyB0aGlzLm9wdGlvbnMuY3JlYXRlU3VydmV5KHt9LCBcInJlc3RmdWxFZGl0b3JcIikgOiBuZXcgU3VydmV5LlN1cnZleSgpO1xuICAgIHRoaXMuc3VydmV5LnNob3dOYXZpZ2F0aW9uQnV0dG9ucyA9IGZhbHNlO1xuICAgIHRoaXMuc3VydmV5LnNob3dRdWVzdGlvbk51bWJlcnMgPSBcIm9mZlwiO1xuICAgIHZhciBwYWdlID0gdGhpcy5zdXJ2ZXkuYWRkTmV3UGFnZShcInBhZ2UxXCIpO1xuICAgIHRoaXMucXVlc3Rpb24gPSA8U3VydmV5LlF1ZXN0aW9uRHJvcGRvd24+cGFnZS5hZGROZXdRdWVzdGlvbihcbiAgICAgIFwiZHJvcGRvd25cIixcbiAgICAgIFwicTFcIlxuICAgICk7XG4gICAgdGhpcy5xdWVzdGlvbi50aXRsZSA9IGVkaXRvckxvY2FsaXphdGlvbi5nZXRTdHJpbmcoXCJwZS50ZXN0U2VydmljZVwiKTtcbiAgICB0aGlzLnF1ZXN0aW9uLmNob2ljZXMgPSBbXTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgU3VydmV5UHJvcGVydHlSZXN1bHRmdWxsRWRpdG9ySXRlbSB7XG4gIHB1YmxpYyBrb1ZhbHVlOiBhbnk7XG4gIHByaXZhdGUgaXNTZXR0dGluZ1ZhbHVlOiBib29sZWFuID0gZmFsc2U7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBuYW1lOiBzdHJpbmcsXG4gICAgdmFsOiBzdHJpbmcsXG4gICAgcHVibGljIG9uVmFsdWVDaGFuZ2VkOiAoaXRlbTogU3VydmV5UHJvcGVydHlSZXN1bHRmdWxsRWRpdG9ySXRlbSkgPT4gYW55XG4gICkge1xuICAgIHRoaXMua29WYWx1ZSA9IGtvLm9ic2VydmFibGUodmFsID8gdmFsIDogXCJcIik7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIHRoaXMua29WYWx1ZS5zdWJzY3JpYmUoZnVuY3Rpb24gKG5ld1ZhbHVlKSB7XG4gICAgICBpZiAoIXNlbGYuaXNTZXR0dGluZ1ZhbHVlKSB7XG4gICAgICAgIHNlbGYub25WYWx1ZUNoYW5nZWQoc2VsZik7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbiAgcHVibGljIHNldFZhbHVlKHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5pc1NldHR0aW5nVmFsdWUgPSB0cnVlO1xuICAgIHRoaXMua29WYWx1ZSh2YWwpO1xuICAgIHRoaXMuaXNTZXR0dGluZ1ZhbHVlID0gZmFsc2U7XG4gIH1cbn1cblxuU3VydmV5UHJvcGVydHlFZGl0b3JGYWN0b3J5LnJlZ2lzdGVyRWRpdG9yKFwicmVzdGZ1bGxcIiwgZnVuY3Rpb24gKFxuICBwcm9wZXJ0eTogU3VydmV5Lkpzb25PYmplY3RQcm9wZXJ0eVxuKTogU3VydmV5UHJvcGVydHlFZGl0b3JCYXNlIHtcbiAgcmV0dXJuIG5ldyBTdXJ2ZXlQcm9wZXJ0eVJlc3VsdGZ1bGxFZGl0b3IocHJvcGVydHkpO1xufSk7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvcHJvcGVydHlFZGl0b3JzL3Byb3BlcnR5UmVzdGZ1bGxFZGl0b3IudHMiLCJpbXBvcnQgKiBhcyBrbyBmcm9tIFwia25vY2tvdXRcIjtcbmltcG9ydCAqIGFzIFN1cnZleSBmcm9tIFwic3VydmV5LWtub2Nrb3V0XCI7XG5pbXBvcnQgeyBTdXJ2ZXlQcm9wZXJ0eUl0ZW1zRWRpdG9yIH0gZnJvbSBcIi4vcHJvcGVydHlJdGVtc0VkaXRvclwiO1xuaW1wb3J0IHtcbiAgU3VydmV5UHJvcGVydHlFZGl0b3JCYXNlLFxuICBJU3VydmV5T2JqZWN0RWRpdG9yT3B0aW9uc1xufSBmcm9tIFwiLi9wcm9wZXJ0eUVkaXRvckJhc2VcIjtcbmltcG9ydCB7IFN1cnZleUhlbHBlciB9IGZyb20gXCIuLi9zdXJ2ZXlIZWxwZXJcIjtcbmltcG9ydCB7IGVkaXRvckxvY2FsaXphdGlvbiB9IGZyb20gXCIuLi9lZGl0b3JMb2NhbGl6YXRpb25cIjtcbmltcG9ydCB7IFN1cnZleVF1ZXN0aW9uRWRpdG9yIH0gZnJvbSBcIi4uL3F1ZXN0aW9uRWRpdG9ycy9xdWVzdGlvbkVkaXRvclwiO1xuaW1wb3J0IHtcbiAgU3VydmV5TmVzdGVkUHJvcGVydHlFZGl0b3IsXG4gIFN1cnZleU5lc3RlZFByb3BlcnR5RWRpdG9ySXRlbSxcbiAgU3VydmV5TmVzdGVkUHJvcGVydHlFZGl0b3JDb2x1bW5cbn0gZnJvbSBcIi4vcHJvcGVydHlOZXN0ZWRQcm9wZXJ0eUVkaXRvclwiO1xuaW1wb3J0IHsgU3VydmV5UHJvcGVydHlFZGl0b3JGYWN0b3J5IH0gZnJvbSBcIi4vcHJvcGVydHlFZGl0b3JGYWN0b3J5XCI7XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlQcm9wZXJ0eVRleHRJdGVtc0VkaXRvciBleHRlbmRzIFN1cnZleU5lc3RlZFByb3BlcnR5RWRpdG9yIHtcbiAgY29uc3RydWN0b3IocHJvcGVydHk6IFN1cnZleS5Kc29uT2JqZWN0UHJvcGVydHkpIHtcbiAgICBzdXBlcihwcm9wZXJ0eSk7XG4gIH1cbiAgcHVibGljIGdldCBlZGl0b3JUeXBlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFwidGV4dGl0ZW1zXCI7XG4gIH1cbiAgcHJvdGVjdGVkIGdldEVkaXRvck5hbWUoKTogc3RyaW5nIHtcbiAgICBpZiAoIXRoaXMua29FZGl0SXRlbSgpKSByZXR1cm4gXCJcIjtcbiAgICByZXR1cm4gdGhpcy5rb0VkaXRJdGVtKCkudGV4dDtcbiAgfVxuICBwcm90ZWN0ZWQgY3JlYXRlTmV3RWRpdG9ySXRlbSgpOiBhbnkge1xuICAgIHZhciBuZXdJdGVtID0gbmV3IFN1cnZleS5NdWx0aXBsZVRleHRJdGVtKHRoaXMuZ2V0TmV3TmFtZSgpKTtcbiAgICBuZXdJdGVtW1wib2JqZWN0XCJdID0gdGhpcy5vYmplY3Q7XG4gICAgLy9uZXdDb2x1bW4uY29sT3duZXIgPSBUT0RPIHNldCBjb2xPd25lci5cbiAgICByZXR1cm4gbmV3IFN1cnZleVByb3BlcnR5VGV4dEl0ZW1zSXRlbShcbiAgICAgIG5ld0l0ZW0sXG4gICAgICAoKSA9PiB0aGlzLmNvbHVtbnMsXG4gICAgICB0aGlzLm9wdGlvbnNcbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCBjcmVhdGVFZGl0b3JJdGVtKGl0ZW06IGFueSkge1xuICAgIHJldHVybiBuZXcgU3VydmV5UHJvcGVydHlUZXh0SXRlbXNJdGVtKFxuICAgICAgaXRlbSxcbiAgICAgICgpID0+IHRoaXMuY29sdW1ucyxcbiAgICAgIHRoaXMub3B0aW9uc1xuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIGNyZWF0ZUl0ZW1Gcm9tRWRpdG9ySXRlbShlZGl0b3JJdGVtOiBhbnkpIHtcbiAgICB2YXIgbmV3SXRlbSA9IG5ldyBTdXJ2ZXkuTXVsdGlwbGVUZXh0SXRlbSgpO1xuICAgIHZhciBqc29uID0gbmV3IFN1cnZleS5Kc29uT2JqZWN0KCkudG9Kc29uT2JqZWN0KGVkaXRvckl0ZW0uaXRlbSk7XG4gICAgbmV3IFN1cnZleS5Kc29uT2JqZWN0KCkudG9PYmplY3QoanNvbiwgbmV3SXRlbSk7XG4gICAgcmV0dXJuIG5ld0l0ZW07XG4gIH1cbiAgcHJvdGVjdGVkIGdldFByb3BlcnRpZXMoKTogQXJyYXk8U3VydmV5Lkpzb25PYmplY3RQcm9wZXJ0eT4ge1xuICAgIHZhciBuYW1lcyA9IHRoaXMuZ2V0UHJvcGVydGllc05hbWVzKFwibXVsdGlwbGV0ZXh0QGl0ZW1zXCIsIFtcbiAgICAgIFwiaXNSZXF1aXJlZFwiLFxuICAgICAgXCJuYW1lXCIsXG4gICAgICBcInRpdGxlXCJcbiAgICBdKTtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0aWVzQnlOYW1lcyhcIm11bHRpcGxldGV4dGl0ZW1cIiwgbmFtZXMpO1xuICB9XG4gIHByaXZhdGUgZ2V0TmV3TmFtZSgpOiBzdHJpbmcge1xuICAgIHZhciBvYmpzID0gW107XG4gICAgdmFyIGl0ZW1zID0gdGhpcy5rb0l0ZW1zKCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpdGVtcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGl0ZW0gPSBpdGVtc1tpXS5pdGVtO1xuICAgICAgaWYgKCEhaXRlbSkge1xuICAgICAgICBvYmpzLnB1c2goeyBuYW1lOiBpdGVtLm5hbWUgfSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBTdXJ2ZXlIZWxwZXIuZ2V0TmV3TmFtZShcbiAgICAgIG9ianMsXG4gICAgICBlZGl0b3JMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKFwiZWQubmV3VGV4dEl0ZW1OYW1lXCIpXG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgU3VydmV5UHJvcGVydHlUZXh0SXRlbXNJdGVtIGV4dGVuZHMgU3VydmV5TmVzdGVkUHJvcGVydHlFZGl0b3JJdGVtIHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIGl0ZW06IFN1cnZleS5NdWx0aXBsZVRleHRJdGVtLFxuICAgIGdldENvbHVtbnM6ICgpID0+IEFycmF5PFN1cnZleU5lc3RlZFByb3BlcnR5RWRpdG9yQ29sdW1uPixcbiAgICBvcHRpb25zOiBJU3VydmV5T2JqZWN0RWRpdG9yT3B0aW9uc1xuICApIHtcbiAgICBzdXBlcihpdGVtLCBnZXRDb2x1bW5zLCBvcHRpb25zKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0Q2xhc3NOYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFwibXVsdGlwbGV0ZXh0aXRlbVwiO1xuICB9XG4gIHB1YmxpYyBnZXQgdGV4dCgpOiBzdHJpbmcge1xuICAgIHJldHVybiBlZGl0b3JMb2NhbGl6YXRpb25cbiAgICAgIC5nZXRTdHJpbmcoXCJwZS5jb2x1bW5FZGl0XCIpXG4gICAgICBbXCJmb3JtYXRcIl0odGhpcy5pdGVtLm5hbWUpO1xuICB9XG59XG5cblN1cnZleVByb3BlcnR5RWRpdG9yRmFjdG9yeS5yZWdpc3RlckVkaXRvcihcInRleHRpdGVtc1wiLCBmdW5jdGlvbihcbiAgcHJvcGVydHk6IFN1cnZleS5Kc29uT2JqZWN0UHJvcGVydHlcbik6IFN1cnZleVByb3BlcnR5RWRpdG9yQmFzZSB7XG4gIHJldHVybiBuZXcgU3VydmV5UHJvcGVydHlUZXh0SXRlbXNFZGl0b3IocHJvcGVydHkpO1xufSk7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvcHJvcGVydHlFZGl0b3JzL3Byb3BlcnR5VGV4dEl0ZW1zRWRpdG9yLnRzIiwiaW1wb3J0ICogYXMga28gZnJvbSBcImtub2Nrb3V0XCI7XG5pbXBvcnQgKiBhcyBTdXJ2ZXkgZnJvbSBcInN1cnZleS1rbm9ja291dFwiO1xuaW1wb3J0IHtcbiAgU3VydmV5UHJvcGVydHlPbmVTZWxlY3RlZEVkaXRvcixcbiAgU3VydmV5UHJvcGVydHlPbmVTZWxlY3RlZEl0ZW1cbn0gZnJvbSBcIi4vcHJvcGVydHlPbmVTZWxlY3RlZEVkaXRvclwiO1xuaW1wb3J0IHsgU3VydmV5UHJvcGVydHlFZGl0b3JCYXNlIH0gZnJvbSBcIi4vcHJvcGVydHlFZGl0b3JCYXNlXCI7XG5pbXBvcnQgeyBlZGl0b3JMb2NhbGl6YXRpb24gfSBmcm9tIFwiLi4vZWRpdG9yTG9jYWxpemF0aW9uXCI7XG5pbXBvcnQgeyBTdXJ2ZXlQcm9wZXJ0eUVkaXRvckZhY3RvcnkgfSBmcm9tIFwiLi9wcm9wZXJ0eUVkaXRvckZhY3RvcnlcIjtcblxuZXhwb3J0IGNsYXNzIFN1cnZleVByb3BlcnR5VmFsaWRhdG9yc0VkaXRvciBleHRlbmRzIFN1cnZleVByb3BlcnR5T25lU2VsZWN0ZWRFZGl0b3Ige1xuICBjb25zdHJ1Y3Rvcihwcm9wZXJ0eTogU3VydmV5Lkpzb25PYmplY3RQcm9wZXJ0eSkge1xuICAgIHN1cGVyKHByb3BlcnR5KTtcbiAgfVxuICBwdWJsaWMgZ2V0IGVkaXRvclR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCJ2YWxpZGF0b3JzXCI7XG4gIH1cbiAgcHJvdGVjdGVkIGNyZWF0ZU9uZVNlbGVjdGVkSXRlbShvYmo6IGFueSk6IFN1cnZleVByb3BlcnR5T25lU2VsZWN0ZWRJdGVtIHtcbiAgICByZXR1cm4gbmV3IFN1cnZleVByb3BlcnR5VmFsaWRhdG9ySXRlbShvYmopO1xuICB9XG4gIHByb3RlY3RlZCBnZXRBdmFpbGFibGVDbGFzc2VzKCk6IEFycmF5PGFueT4ge1xuICAgIHZhciBjbGFzc2VzID0gU3VydmV5LlNlcmlhbGl6ZXIuZ2V0Q2hpbGRyZW5DbGFzc2VzKFwic3VydmV5dmFsaWRhdG9yXCIsIHRydWUpO1xuICAgIHZhciByZXMgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNsYXNzZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBuYW1lID0gY2xhc3Nlc1tpXS5uYW1lO1xuICAgICAgcmVzLnB1c2goe1xuICAgICAgICB2YWx1ZTogbmFtZSxcbiAgICAgICAgdGV4dDogZWRpdG9yTG9jYWxpemF0aW9uLmdldFZhbGlkYXRvck5hbWUobmFtZSlcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlQcm9wZXJ0eVZhbGlkYXRvckl0ZW0gZXh0ZW5kcyBTdXJ2ZXlQcm9wZXJ0eU9uZVNlbGVjdGVkSXRlbSB7XG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBvYmo6IFN1cnZleS5CYXNlKSB7XG4gICAgc3VwZXIob2JqKTtcbiAgfVxuICBwdWJsaWMgZ2V0VGV4dCgpIHtcbiAgICByZXR1cm4gZWRpdG9yTG9jYWxpemF0aW9uLmdldFZhbGlkYXRvck5hbWUodGhpcy5vYmouZ2V0VHlwZSgpKTtcbiAgfVxufVxuXG5TdXJ2ZXlQcm9wZXJ0eUVkaXRvckZhY3RvcnkucmVnaXN0ZXJFZGl0b3IoXCJ2YWxpZGF0b3JzXCIsIGZ1bmN0aW9uKFxuICBwcm9wZXJ0eTogU3VydmV5Lkpzb25PYmplY3RQcm9wZXJ0eVxuKTogU3VydmV5UHJvcGVydHlFZGl0b3JCYXNlIHtcbiAgcmV0dXJuIG5ldyBTdXJ2ZXlQcm9wZXJ0eVZhbGlkYXRvcnNFZGl0b3IocHJvcGVydHkpO1xufSk7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvcHJvcGVydHlFZGl0b3JzL3Byb3BlcnR5VmFsaWRhdG9yc0VkaXRvci50cyIsImltcG9ydCAqIGFzIGtvIGZyb20gXCJrbm9ja291dFwiO1xuXG5pbXBvcnQgXCIuL2FjY29yZGlvbi5zY3NzXCI7XG5pbXBvcnQgeyBpc1ZhciB9IGZyb20gXCJiYWJlbC10eXBlc1wiO1xudmFyIHRlbXBsYXRlID0gcmVxdWlyZShcImh0bWwtbG9hZGVyP2ludGVycG9sYXRlIXZhbC1sb2FkZXIhLi9hY2NvcmRpb24uaHRtbFwiKTtcblxuZXhwb3J0IGludGVyZmFjZSBJQWNjb3JkaW9uSXRlbURhdGEge1xuICBuYW1lOiBzdHJpbmcgfCBhbnk7XG4gIHRpdGxlOiBzdHJpbmcgfCBhbnk7XG4gIG9uRXhwYW5kOiAoKSA9PiB2b2lkO1xufVxuXG5leHBvcnQgY2xhc3MgQWNjb3JkaW9uSXRlbU1vZGVsIHtcbiAgY29uc3RydWN0b3IocHVibGljIGRhdGE6IElBY2NvcmRpb25JdGVtRGF0YSwgcHVibGljIHRlbXBsYXRlOiBzdHJpbmcpIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgZGF0YS5vbkV4cGFuZCA9IGZ1bmN0aW9uKCkge1xuICAgICAgc2VsZi5jb2xsYXBzZWQoZmFsc2UpO1xuICAgIH07XG4gIH1cbiAgY29sbGFwc2VkID0ga28ub2JzZXJ2YWJsZSh0cnVlKTtcbiAgdG9nZ2xlID0gKCkgPT4ge1xuICAgIHRoaXMuY29sbGFwc2VkKCF0aGlzLmNvbGxhcHNlZCgpKTtcbiAgICBpZiAoIXRoaXMuY29sbGFwc2VkKCkgJiYgISFkb2N1bWVudCkge1xuICAgICAgdmFyIGVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJlZGl0b3JfdGFiX2lkX1wiICsgdGhpcy5kYXRhLm5hbWUpO1xuICAgICAgaWYgKCEhZWwpIHtcbiAgICAgICAgZWwuc2Nyb2xsSW50b1ZpZXcoZmFsc2UpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcbiAgZ2V0IHRpdGxlKCkge1xuICAgIHJldHVybiB0aGlzLmRhdGEudGl0bGU7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEFjY29yZGlvbk1vZGVsIHtcbiAgY29uc3RydWN0b3IocGFyYW1zKSB7XG4gICAgdGhpcy50YWJzID0ga28uY29tcHV0ZWQ8QWNjb3JkaW9uSXRlbU1vZGVsPigoKSA9PiB7XG4gICAgICB2YXIgcmVzID0ga29cbiAgICAgICAgLnVud3JhcChwYXJhbXMudGFicylcbiAgICAgICAgLm1hcChcbiAgICAgICAgICB0YWJEYXRhID0+IG5ldyBBY2NvcmRpb25JdGVtTW9kZWwodGFiRGF0YSwga28udW53cmFwKHBhcmFtcy50ZW1wbGF0ZSkpXG4gICAgICAgICk7XG4gICAgICBpZiAocmVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgcmVzWzBdLmNvbGxhcHNlZChmYWxzZSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzO1xuICAgIH0pO1xuICAgIHRoaXMuc2hvd0hlYWRlciA9IGtvLmNvbXB1dGVkPGJvb2xlYW4+KCgpID0+IHtcbiAgICAgIHJldHVybiBwYXJhbXMudGFicygpLmxlbmd0aCA+IDE7XG4gICAgfSk7XG4gIH1cbiAgdGFiczogYW55O1xuICBzaG93SGVhZGVyOiBhbnk7XG59XG5cbmtvLmNvbXBvbmVudHMucmVnaXN0ZXIoXCJzdmQtYWNjb3JkaW9uXCIsIHtcbiAgdmlld01vZGVsOiBBY2NvcmRpb25Nb2RlbCxcbiAgdGVtcGxhdGU6IHRlbXBsYXRlXG59KTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy91dGlscy9hY2NvcmRpb24udHMiLCJpbXBvcnQgKiBhcyBrbyBmcm9tIFwia25vY2tvdXRcIjtcblxuaW1wb3J0IFwiLi9zcGxpdHRlci5zY3NzXCI7XG5cbmV4cG9ydCBjbGFzcyBTcGxpdHRlckNvbXBvbmVudFZpZXdNb2RlbCB7XG4gIGNvbnN0cnVjdG9yKHBhcmFtczogeyBtaW5MZWZ0OiBudW1iZXI7IG1pblJpZ2h0OiBudW1iZXIgfSwgY29tcG9uZW50SW5mbykge1xuICAgIHZhciBzcGxpdHRlckVsZW1lbnQgPSBjb21wb25lbnRJbmZvLmVsZW1lbnQ7XG4gICAgdmFyIGNvbnRhaW5lciA9IGNvbXBvbmVudEluZm8uZWxlbWVudC5wYXJlbnRFbGVtZW50O1xuICAgIHZhciBzaWJsaW5ncyA9IFtdO1xuICAgIHZhciBtaW5MZWZ0ID0gcGFyYW1zLm1pbkxlZnQgfHwgMTA7XG4gICAgdmFyIG1pblJpZ2h0ID0gcGFyYW1zLm1pblJpZ2h0IHx8IDEwO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY29udGFpbmVyLmNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgICBzaWJsaW5ncy5wdXNoKGNvbnRhaW5lci5jaGlsZHJlbltpXSk7XG4gICAgfVxuICAgIHZhciBzcGxpdHRlckVsZW1lbnRJbmRleCA9IHNpYmxpbmdzLmluZGV4T2Yoc3BsaXR0ZXJFbGVtZW50KTtcbiAgICB2YXIgbGVmdEVsZW1lbnQgPSBzaWJsaW5nc1tzcGxpdHRlckVsZW1lbnRJbmRleCAtIDFdO1xuICAgIHZhciByaWdodEVsZW1lbnQgPSBzaWJsaW5nc1tzcGxpdHRlckVsZW1lbnRJbmRleCArIDFdO1xuXG4gICAgdmFyIG9ucmVzaXplID0gKCkgPT4ge1xuICAgICAgc3BsaXR0ZXJFbGVtZW50LnN0eWxlLmxlZnQgPVxuICAgICAgICBzaWJsaW5nc1xuICAgICAgICAgIC5zbGljZSgwLCBzcGxpdHRlckVsZW1lbnRJbmRleClcbiAgICAgICAgICAucmVkdWNlKCh3LCBzKSA9PiB3ICsgcy5vZmZzZXRXaWR0aCwgMCkgLVxuICAgICAgICBzcGxpdHRlckVsZW1lbnQub2Zmc2V0V2lkdGggK1xuICAgICAgICBcInB4XCI7XG4gICAgfTtcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcInJlc2l6ZVwiLCBvbnJlc2l6ZSk7XG4gICAgb25yZXNpemUoKTtcblxuICAgIHZhciBvbm1vdXNlbW92ZSA9IGV2ZW50ID0+IHtcbiAgICAgIHZhciBuZXdMZWZ0ID0gbGVmdEVsZW1lbnQub2Zmc2V0V2lkdGggKyBldmVudC5tb3ZlbWVudFg7XG4gICAgICB2YXIgbmV3UmlnaHQgPSByaWdodEVsZW1lbnQub2Zmc2V0V2lkdGggLSBldmVudC5tb3ZlbWVudFg7XG4gICAgICBpZiAobmV3TGVmdCA+IG1pbkxlZnQgJiYgbmV3UmlnaHQgPiBtaW5SaWdodCkge1xuICAgICAgICBzcGxpdHRlckVsZW1lbnQuc3R5bGUubGVmdCA9XG4gICAgICAgICAgc3BsaXR0ZXJFbGVtZW50Lm9mZnNldExlZnQgKyBldmVudC5tb3ZlbWVudFggKyBcInB4XCI7XG4gICAgICAgIHZhciBsZWZ0V2lkdGggPSAobmV3TGVmdCAvIGNvbnRhaW5lci5vZmZzZXRXaWR0aCkgKiAxMDAgKyBcIiVcIjtcbiAgICAgICAgdmFyIHJpZ2h0V2lkdGggPSAobmV3UmlnaHQgLyBjb250YWluZXIub2Zmc2V0V2lkdGgpICogMTAwICsgXCIlXCI7XG4gICAgICAgIGxlZnRFbGVtZW50LnN0eWxlLndpZHRoID0gbGVmdFdpZHRoO1xuICAgICAgICBsZWZ0RWxlbWVudC5zdHlsZS5tYXhXaWR0aCA9IGxlZnRXaWR0aDtcbiAgICAgICAgbGVmdEVsZW1lbnQuc3R5bGUuZmxleEJhc2lzID0gbGVmdFdpZHRoO1xuICAgICAgICByaWdodEVsZW1lbnQuc3R5bGUud2lkdGggPSByaWdodFdpZHRoO1xuICAgICAgICByaWdodEVsZW1lbnQuc3R5bGUubWF4V2lkdGggPSByaWdodFdpZHRoO1xuICAgICAgICByaWdodEVsZW1lbnQuc3R5bGUuZmxleEJhc2lzID0gcmlnaHRXaWR0aDtcbiAgICAgIH1cbiAgICB9O1xuICAgIHZhciBvbm1vdXNldXAgPSAoKSA9PiB7XG4gICAgICBzcGxpdHRlckVsZW1lbnQuY2xhc3NOYW1lID0gc3BsaXR0ZXJFbGVtZW50LmNsYXNzTmFtZS5yZXBsYWNlKFxuICAgICAgICAvXFxzc3ZkLWFjdGl2ZS1zcGxpdHRlci9nLFxuICAgICAgICBcIlwiXG4gICAgICApO1xuICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1vdXNlbW92ZVwiLCBvbm1vdXNlbW92ZSk7XG4gICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwibW91c2VsZWF2ZVwiLCBvbm1vdXNldXApO1xuICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1vdXNldXBcIiwgb25tb3VzZXVwKTtcbiAgICB9O1xuXG4gICAgc3BsaXR0ZXJFbGVtZW50Lm9ubW91c2Vkb3duID0gKCkgPT4ge1xuICAgICAgc3BsaXR0ZXJFbGVtZW50LmNsYXNzTmFtZSArPSBcIiBzdmQtYWN0aXZlLXNwbGl0dGVyXCI7XG4gICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwibW91c2Vtb3ZlXCIsIG9ubW91c2Vtb3ZlKTtcbiAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZWxlYXZlXCIsIG9ubW91c2V1cCk7XG4gICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwibW91c2V1cFwiLCBvbm1vdXNldXApO1xuICAgIH07XG4gIH1cbn1cblxua28uY29tcG9uZW50cy5yZWdpc3RlcihcInN2ZC1zcGxpdHRlclwiLCB7XG4gIHZpZXdNb2RlbDoge1xuICAgIGNyZWF0ZVZpZXdNb2RlbDogKHBhcmFtcywgY29tcG9uZW50SW5mbykgPT4ge1xuICAgICAgcmV0dXJuIG5ldyBTcGxpdHRlckNvbXBvbmVudFZpZXdNb2RlbChwYXJhbXMsIGNvbXBvbmVudEluZm8pO1xuICAgIH1cbiAgfSxcbiAgdGVtcGxhdGU6ICc8ZGl2IGNsYXNzPVwic3ZkLXNwbGl0dGVyXCI+PC9kaXY+J1xufSk7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvdXRpbHMvc3BsaXR0ZXIudHMiLCIvLyByZW1vdmVkIGJ5IGV4dHJhY3QtdGV4dC13ZWJwYWNrLXBsdWdpblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vc3JjL2Fkb3JuZXJzL2Zsb3dwYW5lbC1hY3Rpb25zLnNjc3Ncbi8vIG1vZHVsZSBpZCA9IDgyXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIi8vIHJlbW92ZWQgYnkgZXh0cmFjdC10ZXh0LXdlYnBhY2stcGx1Z2luXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9zcmMvYWRvcm5lcnMvaW1hZ2UtaXRlbXMuc2Nzc1xuLy8gbW9kdWxlIGlkID0gODNcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiLy8gcmVtb3ZlZCBieSBleHRyYWN0LXRleHQtd2VicGFjay1wbHVnaW5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL3NyYy9hZG9ybmVycy9pdGVtLWVkaXRvci5zY3NzXG4vLyBtb2R1bGUgaWQgPSA4NFxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIvLyByZW1vdmVkIGJ5IGV4dHJhY3QtdGV4dC13ZWJwYWNrLXBsdWdpblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vc3JjL2Fkb3JuZXJzL2xhYmVsLWVkaXRvci5zY3NzXG4vLyBtb2R1bGUgaWQgPSA4NVxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIvLyByZW1vdmVkIGJ5IGV4dHJhY3QtdGV4dC13ZWJwYWNrLXBsdWdpblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vc3JjL2Fkb3JuZXJzL3F1ZXN0aW9uLWFjdGlvbnMuc2Nzc1xuLy8gbW9kdWxlIGlkID0gODZcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiLy8gcmVtb3ZlZCBieSBleHRyYWN0LXRleHQtd2VicGFjay1wbHVnaW5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL3NyYy9hZG9ybmVycy9yYXRpbmctaXRlbS1lZGl0b3Iuc2Nzc1xuLy8gbW9kdWxlIGlkID0gODdcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiLy8gcmVtb3ZlZCBieSBleHRyYWN0LXRleHQtd2VicGFjay1wbHVnaW5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL3NyYy9hZG9ybmVycy9zZWxlY3QtaXRlbXMtZWRpdG9yLnNjc3Ncbi8vIG1vZHVsZSBpZCA9IDg4XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIi8vIHJlbW92ZWQgYnkgZXh0cmFjdC10ZXh0LXdlYnBhY2stcGx1Z2luXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9zcmMvYWRvcm5lcnMvdGl0bGUtZWRpdG9yLnNjc3Ncbi8vIG1vZHVsZSBpZCA9IDg5XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIi8vIHJlbW92ZWQgYnkgZXh0cmFjdC10ZXh0LXdlYnBhY2stcGx1Z2luXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9zcmMvc2ltdWxhdG9yLnNjc3Ncbi8vIG1vZHVsZSBpZCA9IDkwXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIi8vIHJlbW92ZWQgYnkgZXh0cmFjdC10ZXh0LXdlYnBhY2stcGx1Z2luXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9zcmMvdXRpbHMvYWNjb3JkaW9uLnNjc3Ncbi8vIG1vZHVsZSBpZCA9IDkxXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIi8vIHJlbW92ZWQgYnkgZXh0cmFjdC10ZXh0LXdlYnBhY2stcGx1Z2luXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9zcmMvdXRpbHMvc3BsaXR0ZXIuc2Nzc1xuLy8gbW9kdWxlIGlkID0gOTJcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwibW9kdWxlLmV4cG9ydHMgPSBcIjxzdmcgc3R5bGU9XFxcImRpc3BsYXk6bm9uZTtcXFwiPjxkZWZzPjxyZWN0IGlkPVxcXCJkZXZpY2UtbC1iXFxcIiB3aWR0aD1cXFwiMzMwXFxcIiBoZWlnaHQ9XFxcIjY1MVxcXCIgeD1cXFwiNzE5LjVcXFwiIHk9XFxcIjI5OC41XFxcIiByeD1cXFwiMjBcXFwiPiA8L3JlY3Q+PGZpbHRlciBpZD1cXFwiZGV2aWNlLWwtYVxcXCIgd2lkdGg9XFxcIjE0NS41JVxcXCIgaGVpZ2h0PVxcXCIxMjMlXFxcIiB4PVxcXCItMjIuNyVcXFwiIHk9XFxcIi0xMS41JVxcXCIgZmlsdGVyVW5pdHM9XFxcIm9iamVjdEJvdW5kaW5nQm94XFxcIj4gPGZlT2Zmc2V0IGluPVxcXCJTb3VyY2VBbHBoYVxcXCIgcmVzdWx0PVxcXCJzaGFkb3dPZmZzZXRPdXRlcjFcXFwiPjwvZmVPZmZzZXQ+PGZlR2F1c3NpYW5CbHVyIHN0ZERldmlhdGlvbj1cXFwiMjVcXFwiIGluPVxcXCJzaGFkb3dPZmZzZXRPdXRlcjFcXFwiIHJlc3VsdD1cXFwic2hhZG93Qmx1ck91dGVyMVxcXCI+PC9mZUdhdXNzaWFuQmx1cj48ZmVDb2xvck1hdHJpeCB2YWx1ZXM9XFxcIjAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAuMSAwXFxcIiBpbj1cXFwic2hhZG93Qmx1ck91dGVyMVxcXCI+PC9mZUNvbG9yTWF0cml4PjwvZmlsdGVyPjxyZWN0IGlkPVxcXCJkZXZpY2UtcC1iXFxcIiB3aWR0aD1cXFwiMzMwXFxcIiBoZWlnaHQ9XFxcIjY1MVxcXCIgeD1cXFwiMTIwXFxcIiB5PVxcXCI0NThcXFwiIHJ4PVxcXCIyMFxcXCI+IDwvcmVjdD48ZmlsdGVyIGlkPVxcXCJkZXZpY2UtcC1hXFxcIiB3aWR0aD1cXFwiMTQ1LjUlXFxcIiBoZWlnaHQ9XFxcIjEyMyVcXFwiIHg9XFxcIi0yMi43JVxcXCIgeT1cXFwiLTExLjUlXFxcIiBmaWx0ZXJVbml0cz1cXFwib2JqZWN0Qm91bmRpbmdCb3hcXFwiPiA8ZmVPZmZzZXQgaW49XFxcIlNvdXJjZUFscGhhXFxcIiByZXN1bHQ9XFxcInNoYWRvd09mZnNldE91dGVyMVxcXCI+PC9mZU9mZnNldD48ZmVHYXVzc2lhbkJsdXIgc3RkRGV2aWF0aW9uPVxcXCIyNVxcXCIgaW49XFxcInNoYWRvd09mZnNldE91dGVyMVxcXCIgcmVzdWx0PVxcXCJzaGFkb3dCbHVyT3V0ZXIxXFxcIj48L2ZlR2F1c3NpYW5CbHVyPjxmZUNvbG9yTWF0cml4IHZhbHVlcz1cXFwiMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMC4xIDBcXFwiIGluPVxcXCJzaGFkb3dCbHVyT3V0ZXIxXFxcIj48L2ZlQ29sb3JNYXRyaXg+PC9maWx0ZXI+PC9kZWZzPjxzeW1ib2wgdmlld0JveD1cXFwiMCAwIDE2IDE2XFxcIiBpZD1cXFwiaWNvbi1hY3Rpb25hZGR0b3Rvb2xib3hcXFwiPjxwYXRoIGQ9XFxcIk03LjMgOEgxdjJoNS4yYy4yLS43LjYtMS40IDEuMS0yek0xMCA2LjJWNUgxdjJoNy4zYy41LS4zIDEuMS0uNiAxLjctLjh6TTEgMmg5djJIMXpNMTEuNSA3QzkgNyA3IDkgNyAxMS41UzkgMTYgMTEuNSAxNnM0LjUtMiA0LjUtNC41UzE0IDcgMTEuNSA3em0yLjUgNWgtMnYyaC0xdi0ySDl2LTFoMlY5aDF2MmgydjF6XFxcIj48L3BhdGg+PC9zeW1ib2w+PHN5bWJvbCB2aWV3Qm94PVxcXCIwIDAgMTYgMTZcXFwiIGlkPVxcXCJpY29uLWFjdGlvbmJvbGRcXFwiPjxwYXRoIGQ9XFxcIk0xIDF2NWgyVjRoM3Y4SDR2Mmg3di0ySDlWNGgzdjJoMlYxelxcXCI+PC9wYXRoPjwvc3ltYm9sPjxzeW1ib2wgdmlld0JveD1cXFwiMCAwIDE2IDE2XFxcIiBpZD1cXFwiaWNvbi1hY3Rpb25jb252ZXJ0dG9cXFwiPjxwYXRoIGQ9XFxcIk0zIDEwTDAgN2g2ek0xMyA3bDMgM2gtNnpcXFwiPjwvcGF0aD48cGF0aCBkPVxcXCJNOCA0YzEuNSAwIDIuOC44IDMuNCAyaDIuMmMtLjgtMi4zLTMtNC01LjctNEM0LjcgMiAyIDQuNyAyIDhoMmMwLTIuMiAxLjgtNCA0LTR6TTExLjkgOWMtLjQgMS43LTIgMy0zLjkgMy0xIDAtMS45LS40LTIuNi0xSDIuOGMxIDEuOCAzIDMgNS4yIDMgMyAwIDUuNC0yLjIgNS45LTVoLTJ6XFxcIj48L3BhdGg+PC9zeW1ib2w+PHN5bWJvbCB2aWV3Qm94PVxcXCIwIDAgMTYgMTZcXFwiIGlkPVxcXCJpY29uLWFjdGlvbmNvcHlcXFwiPjxwYXRoIGQ9XFxcIk0yIDZoOXY5SDJ6XFxcIj48L3BhdGg+PHBhdGggZD1cXFwiTTUgM3YyaDd2N2gyVjN6XFxcIj48L3BhdGg+PC9zeW1ib2w+PHN5bWJvbCB2aWV3Qm94PVxcXCIwIDAgMTYgMTZcXFwiIGlkPVxcXCJpY29uLWFjdGlvbmRlbGV0ZVxcXCI+PHBhdGggZD1cXFwiTTggMkM0LjcgMiAyIDQuNyAyIDhzMi43IDYgNiA2IDYtMi43IDYtNi0yLjctNi02LTZ6bTMgOGwtMSAxLTItMi0yIDItMS0xIDItMi0yLTIgMS0xIDIgMiAyLTIgMSAxLTIgMiAyIDJ6XFxcIj48L3BhdGg+PC9zeW1ib2w+PHN5bWJvbCB2aWV3Qm94PVxcXCIwIDAgMzIgMzJcXFwiIGlkPVxcXCJpY29uLWFjdGlvbmRyYWdlbGVtZW50XFxcIj48cGF0aCBkPVxcXCJNNCAxMGgyNGEyIDIgMCAwIDAgMC00SDRhMiAyIDAgMCAwIDAgNHptMjQgNEg0YTIgMiAwIDAgMCAwIDRoMjRhMiAyIDAgMCAwIDAtNHptMCA4SDRhMiAyIDAgMCAwIDAgNGgyNGEyIDIgMCAwIDAgMC00elxcXCI+PC9wYXRoPjwvc3ltYm9sPjxzeW1ib2wgdmlld0JveD1cXFwiMCAwIDE2IDE2XFxcIiBpZD1cXFwiaWNvbi1hY3Rpb25lZGl0ZWxlbWVudFxcXCI+PHBhdGggZD1cXFwiTTEgMTVoNGwtNC00ek03IDVsLTUgNSA0IDQgNS01ek0xNCA2bC00LTQtMiAyIDQgNHpNOSAxNGg1djFIOXpcXFwiPjwvcGF0aD48L3N5bWJvbD48c3ltYm9sIHZpZXdCb3g9XFxcIjAgMCAxNiAxNlxcXCIgaWQ9XFxcImljb24tYWN0aW9uZm9udGxhcmdlclxcXCI+PHBhdGggZD1cXFwiTTcgNkg1bC0zIDhIMXYxaDR2LTFINGwuNjctMmgyLjY3TDggMTRIN3YxaDR2LTFoLTFMNyA2em0tMiA1bDEtMyAxIDNINXpNMTUgM2gtMlYxaC0ydjJIOXYyaDJ2MmgyVjVoMnpcXFwiPjwvcGF0aD48L3N5bWJvbD48c3ltYm9sIHZpZXdCb3g9XFxcIjAgMCAxNiAxNlxcXCIgaWQ9XFxcImljb24tYWN0aW9uZm9udHNtYWxsZXJcXFwiPjxwYXRoIGQ9XFxcIk03IDVINWwtMyA4SDF2MWg0di0xSDRsLjY3LTJoMi42N0w4IDEzSDd2MWg0di0xaC0xTDcgNXptLTIgNWwxLTMgMSAzSDV6TTkgMmg2djJIOXpcXFwiPjwvcGF0aD48L3N5bWJvbD48c3ltYm9sIHZpZXdCb3g9XFxcIjAgMCAxNiAxNlxcXCIgaWQ9XFxcImljb24tYWN0aW9uaGlkZXRpdGxlXFxcIj48cGF0aCBkPVxcXCJNMTUuNyA3LjdjLS4xLS4xLTEuNS0xLjctMy40LTNMMTUgMmwtMS0xLTIuOSAyLjlDMTAuMSAzLjQgOSAzIDggMyA0LjMgMyAuNCA3LjUuMyA3LjdMMCA4bC4zLjNjLjEuMSAxLjUgMS43IDMuNCAzTDEgMTRsMSAxIDIuOS0yLjljMSAuNSAyLjEuOSAzLjEuOSAzLjcgMCA3LjYtNC41IDcuNy00LjdMMTYgOGwtLjMtLjN6TTIgOGMuOC0uOCAzLjQtMyA2LTMgLjYgMCAuNiAwIDAgMC0xLjcgMC0zIDEuMy0zIDMgMCAuNi4yIDEuMS40IDEuNmwtLjYuNkMzLjUgOS40IDIuNSA4LjUgMiA4em02IDNjLS42IDAtLjYgMCAwIDAgMS43IDAgMy0xLjMgMy0zIDAtLjYtLjItMS4xLS40LTEuNmwuNi0uNmMxLjMuOCAyLjMgMS43IDIuOCAyLjItLjguOC0zLjQgMy02IDN6XFxcIj48L3BhdGg+PC9zeW1ib2w+PHN5bWJvbCB2aWV3Qm94PVxcXCIwIDAgMTYgMTZcXFwiIGlkPVxcXCJpY29uLWFjdGlvbmlzcmVxdWlyZWRcXFwiPjxjaXJjbGUgY3g9XFxcIjcuNVxcXCIgY3k9XFxcIjEzLjVcXFwiIHI9XFxcIjEuNVxcXCI+PC9jaXJjbGU+PHBhdGggZD1cXFwiTTggMTBsMS05SDZsMSA5elxcXCI+PC9wYXRoPjwvc3ltYm9sPjxzeW1ib2wgdmlld0JveD1cXFwiMCAwIDE2IDE2XFxcIiBpZD1cXFwiaWNvbi1hY3Rpb25pdGFsaWNcXFwiPjxwYXRoIGQ9XFxcIk0xNCAxSDJMMSA0aDFsLjMzLTFIN0w1IDEzSDN2MWg2di0xSDdMOSAzaDQuMzNMMTMgNGgxbDEtM3pcXFwiPjwvcGF0aD48L3N5bWJvbD48c3ltYm9sIHZpZXdCb3g9XFxcIjAgMCAxNiAxNlxcXCIgaWQ9XFxcImljb24tYWN0aW9ubm90cmVxdWlyZWRcXFwiPjxwYXRoIGQ9XFxcIk0xNCAxTDguNCA2LjYgOSAxSDZsLjggNy4yTDEgMTRsMSAxTDE1IDJ6XFxcIj48L3BhdGg+PGNpcmNsZSBjeD1cXFwiNy41XFxcIiBjeT1cXFwiMTMuNVxcXCIgcj1cXFwiMS41XFxcIj48L2NpcmNsZT48L3N5bWJvbD48c3ltYm9sIHZpZXdCb3g9XFxcIjAgMCAxMiAxMlxcXCIgaWQ9XFxcImljb24tYWN0aW9ucmVkb1xcXCI+PHBhdGggZD1cXFwiTTYgMGMxLjY2IDAgMy4xNC42OSA0LjIzIDEuNzhMMTIgLjAxVjVIN2wxLjgyLTEuODJBMy45NzUgMy45NzUgMCAwIDAgNiAyQzMuNzkgMiAyIDMuNzkgMiA2czEuNzkgNCA0IDRhNC4wMSA0LjAxIDAgMCAwIDMuNzEtMi41MkwxMS40IDguNkE1Ljk5NCA1Ljk5NCAwIDAgMSA2IDEyYy0zLjMxIDAtNi0yLjY5LTYtNnMyLjY5LTYgNi02elxcXCI+PC9wYXRoPjwvc3ltYm9sPjxzeW1ib2wgdmlld0JveD1cXFwiMCAwIDEyIDEyXFxcIiBpZD1cXFwiaWNvbi1hY3Rpb25zZXR0aW5nc1xcXCI+PHBhdGggZD1cXFwiTTEyIDdWNUg5Ljg2Yy0uMS0uMzYtLjI0LS43LS40My0xLjAybDEuNTItMS41Mi0xLjQxLTEuNDEtMS41MiAxLjUyYy0uMzItLjE4LS42Ni0uMzMtMS4wMi0uNDJWMEg1djIuMTVjLS4zNi4wOS0uNy4yNC0xLjAyLjQyTDIuNDYgMS4wNSAxLjA1IDIuNDZsMS41MiAxLjUyYy0uMTkuMzItLjMzLjY2LS40MyAxLjAySDB2MmgyLjE0Yy4wOS4zNi4yNC43MS40MiAxLjAyTDEuMDUgOS41NGwxLjQxIDEuNDEgMS41MS0xLjUxYy4zMi4xOS42Ni4zMyAxLjAzLjQzVjEyaDJWOS44N2MuMzctLjA5LjcxLS4yNCAxLjAyLS40M2wxLjUxIDEuNTEgMS40MS0xLjQxLTEuNS0xLjUyYy4xOC0uMzEuMzMtLjY2LjQyLTEuMDJIMTJ6TTYgOC4wMWMtMS4xIDAtMi0uOS0yLTJzLjktMiAyLTIgMiAuOSAyIDItLjkgMi0yIDJ6XFxcIj48L3BhdGg+PC9zeW1ib2w+PHN5bWJvbCB2aWV3Qm94PVxcXCIwIDAgMTYgMTZcXFwiIGlkPVxcXCJpY29uLWFjdGlvbnNob3d0aXRsZVxcXCI+PHBhdGggZD1cXFwiTTE1LjcgNy43QzE1LjYgNy41IDExLjcgMyA4IDNTLjQgNy41LjMgNy43TDAgOGwuMy4zYy4xLjIgNCA0LjcgNy43IDQuN3M3LjYtNC41IDcuNy00LjdMMTYgOGwtLjMtLjN6TTggMTFjLTIuNiAwLTUuMi0yLjItNi0zIC44LS44IDMuNC0zIDYtM3M1LjIgMi4yIDYgM2MtLjguOC0zLjQgMy02IDN6XFxcIj48L3BhdGg+PGNpcmNsZSBjeD1cXFwiOFxcXCIgY3k9XFxcIjhcXFwiIHI9XFxcIjNcXFwiPjwvY2lyY2xlPjwvc3ltYm9sPjxzeW1ib2wgdmlld0JveD1cXFwiMCAwIDE2IDE2XFxcIiBpZD1cXFwiaWNvbi1hY3Rpb251bmRlcmxpbmVcXFwiPjxwYXRoIGNsYXNzPVxcXCJzdDBcXFwiIGQ9XFxcIk0yIDEzaDEydjFIMnpcXFwiPjwvcGF0aD48cGF0aCBkPVxcXCJNMTMgMUgydjNoMVYzaDR2OEg1djFoNnYtMUg5VjNoNHYxaDFWMXpcXFwiPjwvcGF0aD48L3N5bWJvbD48c3ltYm9sIHZpZXdCb3g9XFxcIjAgMCAxMiAxMlxcXCIgaWQ9XFxcImljb24tYWN0aW9udW5kb1xcXCI+PHBhdGggZD1cXFwiTTYgMEM0LjM0IDAgMi44Ni42OSAxLjc3IDEuNzhMMCAuMDFWNWg1TDMuMTggMy4xOUMzLjkgMi40NiA0Ljg5IDIgNiAyYzIuMjEgMCA0IDEuNzkgNCA0cy0xLjc5IDQtNCA0YTQuMDEgNC4wMSAwIDAgMS0zLjcxLTIuNTJMLjYgOC42QzEuNTcgMTAuNjEgMy42MiAxMiA2IDEyYzMuMzEgMCA2LTIuNjkgNi02UzkuMzEgMCA2IDB6XFxcIj48L3BhdGg+PC9zeW1ib2w+PHN5bWJvbCB2aWV3Qm94PVxcXCIwIDAgMTYgMTZcXFwiIGlkPVxcXCJpY29uLWFkZFxcXCI+PHBhdGggZD1cXFwiTTE0IDdoLTRWM0g3djRIM3YzaDR2NGgzdi00aDR6XFxcIj48L3BhdGg+PC9zeW1ib2w+PHN5bWJvbCB2aWV3Qm94PVxcXCIwIDAgMTAgMTBcXFwiIGlkPVxcXCJpY29uLWFycm93X2Rvd25fMTB4MTBcXFwiPjxwYXRoIGQ9XFxcIk0yIDJMMCA0bDUgNSA1LTUtMi0yLTMgM3pcXFwiPjwvcGF0aD48L3N5bWJvbD48c3ltYm9sIHZpZXdCb3g9XFxcIjAgMCAxMCAxMFxcXCIgaWQ9XFxcImljb24tYXJyb3dfdXBfMTB4MTBcXFwiPjxwYXRoIGQ9XFxcIk04IDlsMi0yLTUtNS01IDUgMiAyIDMtM3pcXFwiPjwvcGF0aD48L3N5bWJvbD48c3ltYm9sIHZpZXdCb3g9XFxcIjAgMCAzNCAzNFxcXCIgaWQ9XFxcImljb24tYXJyb3dkb3duXzM0eDM0XFxcIj48c3R5bGU+PCFbQ0RBVEFbLnN0MHtmaWxsOiNmZmZ9XV0+PC9zdHlsZT48cGF0aCBjbGFzcz1cXFwic3QwXFxcIiBkPVxcXCJNMTIgMTZsMi0yIDMgMyAzLTMgMiAyLTUgNXpcXFwiPjwvcGF0aD48L3N5bWJvbD48c3ltYm9sIHZpZXdCb3g9XFxcIjAgMCAyNCAyNFxcXCIgaWQ9XFxcImljb24tY2xvdWRfMjR4MjRcXFwiPjxzdHlsZT48IVtDREFUQVsuc3Qwe2ZpbGw6IzFhYjM5NH1dXT48L3N0eWxlPjxwYXRoIGNsYXNzPVxcXCJzdDBcXFwiIGQ9XFxcIk03NSA2LjVDNzUgNC42IDczLjQgMyA3MS41IDNTNjggNC42IDY4IDYuNWMwIDEuNC44IDIuNiAyIDMuMi0uMiAxLS43IDEuOC0xLjcgMi4zLS40LjItLjkuNC0xLjMuNi0uOC4zLTEuNy42LTIuNS45LS4yLjEtLjMuMS0uNS4ydi02YzEuMi0uNiAyLTEuOCAyLTMuMkM2NiAyLjYgNjQuNCAxIDYyLjUgMVM1OSAyLjYgNTkgNC41YzAgMS40LjggMi42IDIgMy4ydjkuN2MtMS4yLjYtMiAxLjgtMiAzLjIgMCAxLjggMS42IDMuNCAzLjUgMy40czMuNS0xLjYgMy41LTMuNWMwLTEuNC0uOC0yLjYtMi0zLjIuMS0uNS40LTEgLjktMS4yLjMtLjEuNi0uMyAxLS40IDEuMS0uNCAyLjEtLjcgMy4yLTEuMiAxLjQtLjYgMi41LTEuNSAzLjEtMi45LjItLjQuMy0xLjEuNC0xLjhDNzQgOS4zIDc1IDguMSA3NSA2LjV6TTYyLjUgM2MuOCAwIDEuNS43IDEuNSAxLjVTNjMuMyA2IDYyLjUgNiA2MSA1LjMgNjEgNC41IDYxLjcgMyA2Mi41IDN6bTAgMTljLS44IDAtMS41LS43LTEuNS0xLjVzLjctMS41IDEuNS0xLjUgMS41LjcgMS41IDEuNS0uNyAxLjUtMS41IDEuNXpNNzAgNi41YzAtLjguNy0xLjUgMS41LTEuNXMxLjUuNyAxLjUgMS41UzcyLjMgOCA3MS41IDggNzAgNy4zIDcwIDYuNXpNOSAxOGwxIDEgMi0ydjZoMnYtNmwyIDIgMS0xLTQtNHpcXFwiPjwvcGF0aD48cGF0aCBjbGFzcz1cXFwic3QwXFxcIiBkPVxcXCJNMjAuOSA3LjljLjEtLjMuMS0uNi4xLS45IDAtMi44LTIuMi01LTUtNS0yLjYgMC00LjcgMS45LTQuOSA0LjRDMTAuMyA1LjYgOS4yIDUgOCA1IDUuOCA1IDQgNi44IDQgOXYuMmMtMS43LjQtMyAxLjMtMyAzLjggMCAyLjMgMi40IDMgNCAzaDNsNS01IDUgNWMyLjggMCA1LTEuMiA1LTQgMC0xLjctLjgtMy4xLTIuMS00LjF6XFxcIj48L3BhdGg+PC9zeW1ib2w+PHN5bWJvbCB2aWV3Qm94PVxcXCIwIDAgMTYgMTZcXFwiIGlkPVxcXCJpY29uLWF1dG9jb21wbGV0ZVxcXCI+PHN0eWxlPjwhW0NEQVRBWy5zdDB7ZmlsbDojM2Q0ZDVkfV1dPjwvc3R5bGU+PHBhdGggY2xhc3M9XFxcInN0MFxcXCIgZD1cXFwiTTE1IDZIN3YxMGg5di0xSDh2LTJoN3YyaDFWNmgtMXptMCA2SDh2LTJoN3Yyem0wLTNIOFY3aDd2MnpNMyAxMEgxVjRoMlYzSDB2OGgzek0xNCA1aDFWM0g2djFoOHpNNSAxaDFWMEgzdjFoMXYxMUgzdjFoM3YtMUg1elxcXCI+PC9wYXRoPjwvc3ltYm9sPjxzeW1ib2wgdmlld0JveD1cXFwiMCAwIDE2IDE2XFxcIiBpZD1cXFwiaWNvbi1iYXJyYXRpbmdcXFwiPjxzdHlsZT48IVtDREFUQVsuc3Qwe2ZpbGw6IzNkNGQ1ZH1dXT48L3N0eWxlPjxwYXRoIGNsYXNzPVxcXCJzdDBcXFwiIGQ9XFxcIk0xMi4xIDE1bC00LjYtMi40TDIuOSAxNWwuOS01LjFMMCA2LjNsNS4yLS43TDcuNSAxbDIuMyA0LjYgNS4yLjctMy44IDMuNi45IDUuMXpcXFwiPjwvcGF0aD48L3N5bWJvbD48c3ltYm9sIHZpZXdCb3g9XFxcIjAgMCAxNiAxNlxcXCIgaWQ9XFxcImljb24tZGF0ZXBpY2tlclxcXCI+PHN0eWxlPjwhW0NEQVRBWy5zdDB7ZmlsbDojM2Q0ZDVkfV1dPjwvc3R5bGU+PHBhdGggY2xhc3M9XFxcInN0MFxcXCIgZD1cXFwiTTMgN2gydjJIM3pNNyAxMWgydjJIN3pNMyAxMWgydjJIM3pNMTEgMTFoMnYyaC0yek0xMSA3aDJ2MmgtMnpNMTAgNkg2djRoNFY2ek05IDlIN1Y3aDJ2MnpNNCAwaDF2M0g0ek0xMSAwaDF2M2gtMXpcXFwiPjwvcGF0aD48cGF0aCBjbGFzcz1cXFwic3QwXFxcIiBkPVxcXCJNMTMgMnYyaC0zVjJINnYySDNWMkgwdjE0aDE2VjJoLTN6bTIgMTNIMVY1aDE0djEwelxcXCI+PC9wYXRoPjwvc3ltYm9sPjxzeW1ib2wgdmlld0JveD1cXFwiMCAwIDE2IDE2XFxcIiBpZD1cXFwiaWNvbi1lZGl0b3JcXFwiPjxzdHlsZT48IVtDREFUQVsuc3Qwe2ZpbGw6IzNkNGQ1ZH1dXT48L3N0eWxlPjxwYXRoIGNsYXNzPVxcXCJzdDBcXFwiIGQ9XFxcIk0xIDNoMnY1SDJ2MWg0VjhINVYzaDJ2MWgxVjFIMHYzaDF6TTEwIDVoNnYxaC02ek0xMCA4aDZ2MWgtNnpNMCAxMWgxNnYxSDB6TTAgMTRoMTZ2MUgwelxcXCI+PC9wYXRoPjwvc3ltYm9sPjxzeW1ib2wgdmlld0JveD1cXFwiMCAwIDE2IDE2XFxcIiBpZD1cXFwiaWNvbi1taWNyb3Bob25lXFxcIj48c3R5bGU+PCFbQ0RBVEFbLnN0MHtmaWxsOiMzZDRkNWR9XV0+PC9zdHlsZT48cGF0aCBjbGFzcz1cXFwic3QwXFxcIiBkPVxcXCJNMTEgMy40QzExIDIuMSA5LjkgMSA4LjYgMWgtLjJDNy4xIDEgNiAyLjEgNiAzLjRWNWg1VjMuNHpNOC40IDEwaC4zQzkuOSAxMCAxMSA4LjkgMTEgNy42VjZINnYxLjZDNiA4LjkgNy4xIDEwIDguNCAxMHpcXFwiPjwvcGF0aD48cGF0aCBjbGFzcz1cXFwic3QwXFxcIiBkPVxcXCJNMTIgNnYuOWMwIDIuMi0xLjYgNC4xLTMuNSA0LjFTNSA5LjEgNSA2LjlWNkg0djFjMCAyLjUgMS44IDQuNiA0IDQuOVYxNEg2djFoNXYtMUg5di0yLjFjMi4yLS4zIDQtMi40IDQtNC45VjZoLTF6XFxcIj48L3BhdGg+PC9zeW1ib2w+PHN5bWJvbCB2aWV3Qm94PVxcXCIwIDAgMTYgMTZcXFwiIGlkPVxcXCJpY29uLW5vdWlzbGlkZXJcXFwiPjxzdHlsZT48IVtDREFUQVsuc3Qwe2ZpbGw6IzNkNGQ1ZH1dXT48L3N0eWxlPjxwYXRoIGNsYXNzPVxcXCJzdDBcXFwiIGQ9XFxcIk0wIDEwaDE2djJIMHpNMiA0djNsMiAyIDItMlY0ek0xMCA0djNsMiAyIDItMlY0elxcXCI+PC9wYXRoPjwvc3ltYm9sPjxzeW1ib2wgdmlld0JveD1cXFwiMCAwIDE2IDE2XFxcIiBpZD1cXFwiaWNvbi1zaWduYXR1cmVwYWRcXFwiPjxzdHlsZT48IVtDREFUQVsuc3Qwe2ZpbGw6IzNkNGQ1ZH1dXT48L3N0eWxlPjxwYXRoIGNsYXNzPVxcXCJzdDBcXFwiIGQ9XFxcIk0wIDB2MTVoMTZWMEgwem0xNSAxNEgxVjFoMTR2MTN6XFxcIj48L3BhdGg+PHBhdGggY2xhc3M9XFxcInN0MFxcXCIgZD1cXFwiTTIuNiAxMC4yYy4xLjEuMS4yLjIuMy0uMi4zLS40LjYtLjcuOGwuNy43Yy4yLS4zLjUtLjYuNy0uOWguMWMuMi4xLjkuMSAxLjEuMSAxLjUtLjEgMi4zLS41IDIuOC0uOGguMWwuNi4zaC42Yy43LS4xIDEuOS0uOCAyLjUtMS4yLjItLjEuNS0uMy41LS4zdi4yYzAgLjIgMCAuMy4xLjUuMS4zLjMuNC42LjUuMiAwIC40IDAgLjUtLjEuMS0uMy44LTEgMS0xLjNWOGMtLjEuMS0uMy4yLS40LjQtLjIuMi0uNS40LS44LjZsLS4xLjF2LS4zYzAtLjIgMC0uNC0uMS0uNS0uMS0uNC0uNS0uNi0uOS0uNC0uMS4xLS40LjItLjYuNC0uOS42LTIgMS4yLTIuMiAxLjMtLjEgMC0uMi4xLS40LjFsLjEtLjFjLjMtLjMuNy0uNi45LTEgLjItLjMuMy0uNi4zLS45IDAtLjQgMC0uNy0uMi0xLjEtLjEtLjMtLjQtLjYtLjgtLjctLjItLjEtLjQtLjEtLjcgMC0uMi4xLS41LjItLjcuNC0uMy4zLS41LjYtLjYgMS0uMS4yLS4xLjUtLjEuNyAwIC40IDAgLjcuMSAxLjEgMCAuMi4xLjMuMi41LS42LjMtMS41LjctMi44LjZ2LS4xYzAtLjEuMS0uMy4yLS40LjQtLjcuNy0xLjQuOS0yLjEuMi0uNi4zLTEuMy4zLTEuOVY0LjNjMC0uMy0uMS0uNi0uMy0uOC0uMi0uNC0uNi0uNi0xLS41LS4zLjEtLjUuMi0uNy40LS4zLjItLjYuNS0uOC45LS4yLjUtLjQgMS0uNiAxLjYtLjEuNS0uMiAxLS4yIDEuNXMwIDEgLjEgMS40Yy4xLjYuMyAxIC41IDEuNHptNS0yLjVjLjEtLjIuMi0uNS40LS42LjItLjIuNC0uMi43LS4yLjEgMCAuMi4xLjIuMi4xLjMuMS42LS4xLjgtLjIuMy0uNC42LS42LjgtLjIuMi0uMy4zLS41LjQtLjEtLjEtLjEtLjItLjEtLjR2LTF6TTMgNi43Yy4xLS42LjMtMS4zLjYtMS44LjEtLjMuMy0uNS41LS44LjEgMCAuMi0uMS4yLS4xLjEtLjEuMiAwIC4zLjEuMS4xLjEuMy4xLjQgMCAuNC4xLjkgMCAxLjMgMCAuOC0uMiAxLjYtLjUgMi4zLS4zLjUtLjUgMS0uOCAxLjUtLjEgMC0uMi0uMS0uMi0uMi0uMi0uNi0uMy0xLjItLjMtMS44IDAtLjMuMS0uNi4xLS45elxcXCI+PC9wYXRoPjwvc3ltYm9sPjxzeW1ib2wgdmlld0JveD1cXFwiMCAwIDE2IDE2XFxcIiBpZD1cXFwiaWNvbi1zb3J0YWJsZWpzXFxcIj48c3R5bGU+PCFbQ0RBVEFbLnN0MHtmaWxsOiMzZDRkNWR9XV0+PC9zdHlsZT48cGF0aCBjbGFzcz1cXFwic3QwXFxcIiBkPVxcXCJNNyAxaDl2Mkg3ek05IDZoN3YySDl6TTExIDExaDV2MmgtNXpNNSAxMGwxIDFjLTIuMiAwLTQtMS44LTQtNCAwLTEuOSAxLjMtMy40IDMtMy45di0yQzIuMiAxLjUgMCA0IDAgN2MwIDMuMyAyLjcgNiA1LjkgNkg2bC0xIDEgMSAxIDMtMy0zLTMtMSAxelxcXCI+PC9wYXRoPjwvc3ltYm9sPjxzeW1ib2wgdmlld0JveD1cXFwiMCAwIDE2IDE2XFxcIiBpZD1cXFwiaWNvbi10YWdib3hcXFwiPjxzdHlsZT48IVtDREFUQVsuc3Qwe2ZpbGw6IzNkNGQ1ZH1dXT48L3N0eWxlPjxwYXRoIGNsYXNzPVxcXCJzdDBcXFwiIGQ9XFxcIk0xNSAxMUgwVjVoMTV2NnpNMSAxMGgxM1Y2SDF2NHpcXFwiPjwvcGF0aD48cGF0aCBjbGFzcz1cXFwic3QwXFxcIiBkPVxcXCJNMiA3aDR2Mkgyek03IDdoNHYySDd6XFxcIj48L3BhdGg+PC9zeW1ib2w+PHN5bWJvbCB2aWV3Qm94PVxcXCIwIDAgMjQgMjRcXFwiIGlkPVxcXCJpY29uLWRlbGV0ZV8yNHgyNFxcXCI+PHBhdGggZmlsbC1ydWxlPVxcXCJldmVub2RkXFxcIiBjbGlwLXJ1bGU9XFxcImV2ZW5vZGRcXFwiIGZpbGw9XFxcIiMxQUIzOTRcXFwiIGQ9XFxcIk02IDhsMi0yIDQgNCA0LTQgMiAyLTQgNCA0IDQtMiAyLTQtNC00IDQtMi0yIDQtNC00LTR6XFxcIj48L3BhdGg+PC9zeW1ib2w+PHN5bWJvbCB2aWV3Qm94PVxcXCIwIDAgMjQgMjRcXFwiIGlkPVxcXCJpY29uLWVkaXRcXFwiPjxnIGZpbGwtcnVsZT1cXFwiZXZlbm9kZFxcXCIgY2xpcC1ydWxlPVxcXCJldmVub2RkXFxcIj48cGF0aCBkPVxcXCJNMTkgNGwtOSA5IDQgNCA5LTktNC00ek04IDE1djRoNGwtNC00ek0xIDE3djJoNHYtMkgxelxcXCI+PC9wYXRoPjwvZz48L3N5bWJvbD48c3ltYm9sIHZpZXdCb3g9XFxcIjAgMCAxNiAxNlxcXCIgaWQ9XFxcImljb24tYm9vbGVhblxcXCI+PHBhdGggZD1cXFwiTTAgMTZoMTBWNkgwdjEwem0yLTZsMiAyIDQtNCAxIDEtNSA1LTMtMyAxLTF6XFxcIj48L3BhdGg+PHBhdGggZD1cXFwiTTUgMXY0aDFWMmg4djhoLTN2MWg0VjF6XFxcIj48L3BhdGg+PC9zeW1ib2w+PHN5bWJvbCB2aWV3Qm94PVxcXCIwIDAgMTYgMTZcXFwiIGlkPVxcXCJpY29uLWNoZWNrYm94XFxcIj48cGF0aCBkPVxcXCJNMSAxdjE0aDE0VjFIMXptNiAxMEw0IDhsMS0xIDIgMiA0LTQgMSAxLTUgNXpcXFwiPjwvcGF0aD48L3N5bWJvbD48c3ltYm9sIHZpZXdCb3g9XFxcIjAgMCAxNiAxNlxcXCIgaWQ9XFxcImljb24tY29tbWVudFxcXCI+PHBhdGggZD1cXFwiTTggMkM0LjEgMiAxIDQuMiAxIDdjMCAxLjkgMS41IDMuNiAzLjggNC40QzQuNiAxMy4xIDMgMTQgMyAxNHMxLjUtLjIgMi43LS45Yy40LS4yLjktLjggMS4zLTEuMi4zLjEuNi4xIDEgLjEgMy45IDAgNy0yLjIgNy01cy0zLjEtNS03LTV6TTQgOGMtLjYgMC0xLS40LTEtMXMuNC0xIDEtMSAxIC40IDEgMS0uNCAxLTEgMXptNCAwYy0uNiAwLTEtLjQtMS0xcy40LTEgMS0xIDEgLjQgMSAxLS40IDEtMSAxem00IDBjLS42IDAtMS0uNC0xLTFzLjQtMSAxLTEgMSAuNCAxIDEtLjQgMS0xIDF6XFxcIj48L3BhdGg+PC9zeW1ib2w+PHN5bWJvbCB2aWV3Qm94PVxcXCIwIDAgMTYgMTZcXFwiIGlkPVxcXCJpY29uLWRlZmF1bHRcXFwiPjxwYXRoIGQ9XFxcIk0wIDRoNFYwSDB2NHptNiAwaDRWMEg2djR6bTYtNHY0aDRWMGgtNHpNMCAxMGg0VjZIMHY0em02IDBoNFY2SDZ2NHptNiAwaDRWNmgtNHY0ek0wIDE2aDR2LTRIMHY0em02IDBoNHYtNEg2djR6bTYgMGg0di00aC00djR6XFxcIj48L3BhdGg+PC9zeW1ib2w+PHN5bWJvbCB2aWV3Qm94PVxcXCIwIDAgMTYgMTZcXFwiIGlkPVxcXCJpY29uLWRyb3Bkb3duXFxcIj48cGF0aCBkPVxcXCJNMSAxdjZoMTRWMUgxem0xMCA1TDggM2wxLTEgMiAyIDItMiAxIDEtMyAzem0tOCA1aDEyVjlIM3Yyem0wIDRoMTJ2LTJIM3YyelxcXCI+PC9wYXRoPjwvc3ltYm9sPjxzeW1ib2wgdmlld0JveD1cXFwiMCAwIDE2IDE2XFxcIiBpZD1cXFwiaWNvbi1leHByZXNzaW9uXFxcIj48cGF0aCBkPVxcXCJNMTUgOWwtNCA0LTItMi0xIDEgMyAzIDUtNXpNNCA0djFoMnYxSDN2M2g0VjRINHptMiA0SDRWN2gydjF6TTggOGgxdjFIOHpcXFwiPjwvcGF0aD48cGF0aCBkPVxcXCJNMSAxaDEzdjdsMS0xVjBIMHYxMmg2bDEtMUgxelxcXCI+PC9wYXRoPjxwYXRoIGQ9XFxcIk0xMCA0aDF2MWgtMXpNOSA1aDF2MUg5ek0xMSA1aDF2MWgtMXpNMTEgM2gxdjFoLTF6TTkgM2gxdjFIOXpcXFwiPjwvcGF0aD48L3N5bWJvbD48c3ltYm9sIHZpZXdCb3g9XFxcIjAgMCAxNiAxNlxcXCIgaWQ9XFxcImljb24tZmlsZVxcXCI+PHBhdGggZD1cXFwiTTkgMHY1aDV6XFxcIj48L3BhdGg+PHBhdGggZD1cXFwiTTggMEgydjE2aDEyVjZIOHpcXFwiPjwvcGF0aD48L3N5bWJvbD48c3ltYm9sIHZpZXdCb3g9XFxcIjAgMCAxNiAxNlxcXCIgaWQ9XFxcImljb24tZmxvd3BhbmVsXFxcIj48cGF0aCBkPVxcXCJNMTQgNGgydjFoLTJ6TTAgNGgydjFIMHpNMTQgNmgydjFoLTJ6TTAgNmgydjFIMHpNMTQgOGgydjFoLTJ6TTAgOGgydjFIMHpNMTQgMTBoMnYxaC0yek0wIDEwaDJ2MUgwek0wIDJoMTZ2MUgwek0wIDBoMTZ2MUgwek0wIDEyaDE2djFIMHpNMCAxNGgxNnYxSDB6TTExIDRMNyA4IDUgNiA0IDdsMyAzIDUtNXpcXFwiPjwvcGF0aD48L3N5bWJvbD48c3ltYm9sIHZpZXdCb3g9XFxcIjAgMCAxNiAxNlxcXCIgaWQ9XFxcImljb24taHRtbFxcXCI+PHBhdGggZD1cXFwiTTQgNEwwIDhsNCA0IDEtMS0zLTMgMy0zek0xMSA0bC0xIDEgMyAzLTMgMyAxIDEgNC00elxcXCI+PC9wYXRoPjwvc3ltYm9sPjxzeW1ib2wgdmlld0JveD1cXFwiMCAwIDE2IDE2XFxcIiBpZD1cXFwiaWNvbi1pbWFnZXBpY2tlclxcXCI+PHN0eWxlPjwhW0NEQVRBWy5zdDB7ZmlsbDojM2Q0ZDVkfV1dPjwvc3R5bGU+PHBhdGggY2xhc3M9XFxcInN0MFxcXCIgZD1cXFwiTTE1IDE0SDBWMWgxNXYxM3pNMSAxM2gxM1YySDF2MTF6XFxcIj48L3BhdGg+PHBhdGggY2xhc3M9XFxcInN0MFxcXCIgZD1cXFwiTTIgM3Y5aDExVjNIMnptNCAxYy42IDAgMSAuNCAxIDFzLS40IDEtMSAxLTEtLjQtMS0xIC40LTEgMS0xem0tMyA3bDItMyAxIDEgMi0zIDQgNUgzelxcXCI+PC9wYXRoPjwvc3ltYm9sPjxzeW1ib2wgdmlld0JveD1cXFwiMCAwIDE2IDE2XFxcIiBpZD1cXFwiaWNvbi1tYXRyaXhcXFwiPjxwYXRoIGQ9XFxcIk00IDFDMi4zIDEgMSAyLjMgMSA0czEuMyAzIDMgMyAzLTEuMyAzLTMtMS4zLTMtMy0zem0wIDVjLTEuMSAwLTItLjktMi0ycy45LTIgMi0yIDIgLjkgMiAyLS45IDItMiAyelxcXCI+PC9wYXRoPjxjaXJjbGUgY3g9XFxcIjRcXFwiIGN5PVxcXCI0XFxcIiByPVxcXCIxXFxcIj48L2NpcmNsZT48cGF0aCBkPVxcXCJNMTIgN2MxLjcgMCAzLTEuMyAzLTNzLTEuMy0zLTMtMy0zIDEuMy0zIDMgMS4zIDMgMyAzem0wLTVjMS4xIDAgMiAuOSAyIDJzLS45IDItMiAyLTItLjktMi0yIC45LTIgMi0yek00IDljLTEuNyAwLTMgMS4zLTMgM3MxLjMgMyAzIDMgMy0xLjMgMy0zLTEuMy0zLTMtM3ptMCA1Yy0xLjEgMC0yLS45LTItMnMuOS0yIDItMiAyIC45IDIgMi0uOSAyLTIgMnpNMTIgOWMtMS43IDAtMyAxLjMtMyAzczEuMyAzIDMgMyAzLTEuMyAzLTMtMS4zLTMtMy0zem0wIDVjLTEuMSAwLTItLjktMi0ycy45LTIgMi0yIDIgLjkgMiAyLS45IDItMiAyelxcXCI+PC9wYXRoPjwvc3ltYm9sPjxzeW1ib2wgdmlld0JveD1cXFwiMCAwIDE2IDE2XFxcIiBpZD1cXFwiaWNvbi1tYXRyaXhkcm9wZG93blxcXCI+PHBhdGggZD1cXFwiTTQgMUMyLjMgMSAxIDIuMyAxIDRzMS4zIDMgMyAzIDMtMS4zIDMtMy0xLjMtMy0zLTN6bTAgNWMtMS4xIDAtMi0uOS0yLTJzLjktMiAyLTIgMiAuOSAyIDItLjkgMi0yIDJ6XFxcIj48L3BhdGg+PGNpcmNsZSBjeD1cXFwiNFxcXCIgY3k9XFxcIjRcXFwiIHI9XFxcIjFcXFwiPjwvY2lyY2xlPjxwYXRoIGQ9XFxcIk0xMiA3YzEuNyAwIDMtMS4zIDMtM3MtMS4zLTMtMy0zLTMgMS4zLTMgMyAxLjMgMyAzIDN6bTAtNWMxLjEgMCAyIC45IDIgMnMtLjkgMi0yIDItMi0uOS0yLTIgLjktMiAyLTJ6TTQgOWMtMS43IDAtMyAxLjMtMyAzczEuMyAzIDMgMyAzLTEuMyAzLTMtMS4zLTMtMy0zem0wIDVjLTEuMSAwLTItLjktMi0ycy45LTIgMi0yIDIgLjkgMiAyLS45IDItMiAyelxcXCI+PC9wYXRoPjxjaXJjbGUgY3g9XFxcIjRcXFwiIGN5PVxcXCIxMlxcXCIgcj1cXFwiMVxcXCI+PC9jaXJjbGU+PHBhdGggZD1cXFwiTTEyIDljLTEuNyAwLTMgMS4zLTMgM3MxLjMgMyAzIDMgMy0xLjMgMy0zLTEuMy0zLTMtM3ptMCA1Yy0xLjEgMC0yLS45LTItMnMuOS0yIDItMiAyIC45IDIgMi0uOSAyLTIgMnpcXFwiPjwvcGF0aD48L3N5bWJvbD48c3ltYm9sIHZpZXdCb3g9XFxcIjAgMCAxNiAxNlxcXCIgaWQ9XFxcImljb24tbWF0cml4ZHluYW1pY1xcXCI+PHBhdGggZD1cXFwiTTMgMUMxLjMgMSAwIDIuMyAwIDRzMS4zIDMgMyAzIDMtMS4zIDMtMy0xLjMtMy0zLTN6bTAgNWMtMS4xIDAtMi0uOS0yLTJzLjktMiAyLTIgMiAuOSAyIDItLjkgMi0yIDJ6XFxcIj48L3BhdGg+PGNpcmNsZSBjeD1cXFwiM1xcXCIgY3k9XFxcIjRcXFwiIHI9XFxcIjFcXFwiPjwvY2lyY2xlPjxwYXRoIGQ9XFxcIk0xMSA3YzEuNyAwIDMtMS4zIDMtM3MtMS4zLTMtMy0zLTMgMS4zLTMgMyAxLjMgMyAzIDN6bTAtNWMxLjEgMCAyIC45IDIgMnMtLjkgMi0yIDItMi0uOS0yLTIgLjktMiAyLTJ6TTMgOWMtMS43IDAtMyAxLjMtMyAzczEuMyAzIDMgMyAzLTEuMyAzLTMtMS4zLTMtMy0zem0wIDVjLTEuMSAwLTItLjktMi0ycy45LTIgMi0yIDIgLjkgMiAyLS45IDItMiAyek04IDE1aDJsLTItMnpNOS4wMyAxMS45OWw0LjAzLTQuMDMgMS45OCAxLjk4LTQuMDMgNC4wM3pcXFwiPjwvcGF0aD48L3N5bWJvbD48c3ltYm9sIHZpZXdCb3g9XFxcIjAgMCAxNiAxNlxcXCIgaWQ9XFxcImljb24tbXVsdGlwbGV0ZXh0XFxcIj48cGF0aCBkPVxcXCJNMCAydjEyaDE2VjJIMHptNSA5SDJWOWgzdjJ6bTAtNEgyVjVoM3Yyem05IDRIN1Y5aDd2MnptMC00SDdWNWg3djJ6XFxcIj48L3BhdGg+PC9zeW1ib2w+PHN5bWJvbCB2aWV3Qm94PVxcXCIwIDAgMTYgMTZcXFwiIGlkPVxcXCJpY29uLXBhbmVsX2R5bmFtaWNcXFwiPjxwYXRoIGQ9XFxcIk0yIDhoMTB2MUgyek0yIDExaDhsMS0xSDJ6TTkgMTZoMmwtMi0yek0xNCA5bC00IDQgMiAyIDQtNHpNMyAzdjJIMmwyIDIgMi0ySDVWM3pNMTEgNVYzSDl2Mkg4bDIgMiAyLTJ6XFxcIj48L3BhdGg+PHBhdGggZD1cXFwiTTEgMWgxMnY3bDEtMVYwSDB2MTRoN2wxLTFIMXpcXFwiPjwvcGF0aD48L3N5bWJvbD48c3ltYm9sIHZpZXdCb3g9XFxcIjAgMCAxNiAxNlxcXCIgaWQ9XFxcImljb24tcGFuZWxcXFwiPjxwYXRoIGQ9XFxcIk0wIDB2MTZoMTZWMEgwem0xNSAxNUgxVjFoMTR2MTR6XFxcIj48L3BhdGg+PHBhdGggZD1cXFwiTTIgMTJoMTJ2Mkgyek0yIDloMTJ2Mkgyek0xMSA4TDggNWgyVjJoMnYzaDJ6TTUgOEwyIDVoMlYyaDJ2M2gyelxcXCI+PC9wYXRoPjwvc3ltYm9sPjxzeW1ib2wgdmlld0JveD1cXFwiMCAwIDE2IDE2XFxcIiBpZD1cXFwiaWNvbi1wYW5lbGR5bmFtaWNcXFwiPjxwYXRoIGQ9XFxcIk0yIDhoMTB2MUgyek0yIDExaDhsMS0xSDJ6TTkgMTZoMmwtMi0yek0xNCA5bC00IDQgMiAyIDQtNHpNMyAzdjJIMmwyIDIgMi0ySDVWM3pNMTEgNVYzSDl2Mkg4bDIgMiAyLTJ6XFxcIj48L3BhdGg+PHBhdGggZD1cXFwiTTEgMWgxMnY3bDEtMVYwSDB2MTRoN2wxLTFIMXpcXFwiPjwvcGF0aD48L3N5bWJvbD48c3ltYm9sIHZpZXdCb3g9XFxcIjAgMCAxNiAxNlxcXCIgaWQ9XFxcImljb24tcmFkaW9ncm91cFxcXCI+PHBhdGggZD1cXFwiTTMgMUMxLjMgMSAwIDIuMyAwIDRzMS4zIDMgMyAzIDMtMS4zIDMtMy0xLjMtMy0zLTN6bTAgNGMtLjYgMC0xLS40LTEtMXMuNC0xIDEtMSAxIC40IDEgMS0uNCAxLTEgMXptMCA0Yy0xLjcgMC0zIDEuMy0zIDNzMS4zIDMgMyAzIDMtMS4zIDMtMy0xLjMtMy0zLTN6bTAgNGMtLjYgMC0xLS40LTEtMXMuNC0xIDEtMSAxIC40IDEgMS0uNCAxLTEgMXpNOCAzdjJoOFYzSDh6bTAgMTBoOHYtMkg4djJ6XFxcIj48L3BhdGg+PC9zeW1ib2w+PHN5bWJvbCB2aWV3Qm94PVxcXCIwIDAgMTYgMTZcXFwiIGlkPVxcXCJpY29uLXJhdGluZ1xcXCI+PHBhdGggZD1cXFwiTTAgN2gxbDEtMXY1aDFWNUgyTDAgN3ptNSA1aDVWNEg1djh6bTEtNWgyVjZINlY1aDN2M0g3djJoMnYxSDZWN3ptNi0ydjFoMnYxaC0ydjFoMnYyaC0ydjFoM1Y1aC0zelxcXCI+PC9wYXRoPjwvc3ltYm9sPjxzeW1ib2wgdmlld0JveD1cXFwiMCAwIDE2IDE2XFxcIiBpZD1cXFwiaWNvbi10ZXh0XFxcIj48cGF0aCBkPVxcXCJNMiAxdjNoMVYzaDR2MTBINXYxaDZ2LTFIOVYzaDR2MWgxVjFIMnpcXFwiPjwvcGF0aD48L3N5bWJvbD48c3ltYm9sIHZpZXdCb3g9XFxcIjAgMCAyNCAyNFxcXCIgaWQ9XFxcImljb24tZm9ya18yNHgyNFxcXCI+PHBhdGggb3BhY2l0eT1cXFwiLjlcXFwiIGQ9XFxcIk0tNDAtMjBjLTEuMiAwLTItLjktMi0ydi0yYzAtMS4xLjktMiAyLTJoLjFjMS4xIDAgMiAuOSAyIDJ2Mi4xYy0uMSAxLTEgMS45LTIuMSAxLjl6XFxcIj48L3BhdGg+PHBhdGggb3BhY2l0eT1cXFwiLjVcXFwiIGQ9XFxcIk0tNDAtMmMtMS4yIDAtMi0uOS0yLTJ2LTJjMC0xLjEuOS0yIDItMmguMWMxLjEgMCAyIC45IDIgMnYyYy0uMSAxLjEtMSAyLTIuMSAyelxcXCI+PC9wYXRoPjxwYXRoIG9wYWNpdHk9XFxcIi4yXFxcIiBkPVxcXCJNLTUyLTE0YzAtMS4yLjktMiAyLTJoMi4xYzEuMSAwIDIgLjkgMiAydi4xYzAgMS4xLS45IDItMiAySC01MGMtMS4xLS4xLTItMS0yLTIuMXpcXFwiPjwvcGF0aD48cGF0aCBvcGFjaXR5PVxcXCIuN1xcXCIgZD1cXFwiTS0zNC0xNGMwLTEuMi45LTIgMi0yaDIuMWMxLjEgMCAyIC45IDIgMnYuMWMwIDEuMS0uOSAyLTIgMkgtMzJjLTEuMS0uMS0yLTEtMi0yLjF6XFxcIj48L3BhdGg+PHBhdGggb3BhY2l0eT1cXFwiLjFcXFwiIGQ9XFxcIk0tNDQuNS0xOC42Yy0uOC44LTIuMS44LTIuOC4xbC0xLjItMS4yYy0uOC0uOC0uOC0yIDAtMi44bC4xLS4xYy44LS44IDItLjggMi44IDBsMS4yIDEuMmMuNy44LjcgMi4xLS4xIDIuOHpcXFwiPjwvcGF0aD48cGF0aCBvcGFjaXR5PVxcXCIuNlxcXCIgZD1cXFwiTS0zMS41LTUuNWMtLjguOC0yLjEuOC0yLjguMWwtMS4yLTEuMmMtLjgtLjgtLjgtMiAwLTIuOGwuMS0uMWMuOC0uOCAyLS44IDIuOCAwbDEuMiAxLjJjLjcuOC43IDItLjEgMi44elxcXCI+PC9wYXRoPjxwYXRoIG9wYWNpdHk9XFxcIi4zXFxcIiBkPVxcXCJNLTQ4LjUtNS41Yy0uOC0uOC0uOC0yLjEtLjEtMi44bDEuMi0xLjJjLjgtLjggMi0uOCAyLjggMGwuMS4xYy44LjguOCAyIDAgMi44bC0xLjIgMS4yYy0uNy43LTIgLjctMi44LS4xelxcXCI+PC9wYXRoPjxwYXRoIG9wYWNpdHk9XFxcIi44XFxcIiBkPVxcXCJNLTM1LjQtMTguNWMtLjgtLjgtLjgtMi4xLS4xLTIuOGwxLjItMS4yYy44LS44IDItLjggMi44IDBsLjEuMWMuOC44LjggMiAwIDIuOGwtMS4yIDEuMmMtLjguNy0yLjEuNy0yLjgtLjF6XFxcIj48L3BhdGg+PHBhdGggb3BhY2l0eT1cXFwiLjlcXFwiIGZpbGw9XFxcIiM5RDlGQTFcXFwiIGQ9XFxcIk0tMjItMTNsMi0yIDQgNCA5LTkgMiAyLTExIDExelxcXCI+PC9wYXRoPjxwYXRoIGQ9XFxcIk00MS0xOWgtMS4yYy0uMi0uNy0uNC0xLjMtLjgtMS45bC44LS44Yy40LS40LjQtMSAwLTEuNGwtLjctLjdjLS40LS40LTEtLjQtMS40IDBsLS44LjhjLS42LS40LTEuMi0uNi0xLjktLjhWLTI1YzAtLjUtLjUtMS0xLTFoLTFjLS41IDAtMSAuNS0xIDF2MS4yYy0uNy4yLTEuMy40LTEuOS44bC0uOC0uOGMtLjQtLjQtMS0uNC0xLjQgMGwtLjcuN2MtLjQuNC0uNCAxIDAgMS40bC44LjhjLS40LjYtLjYgMS4yLS44IDEuOUgyNmMtLjUgMC0xIC41LTEgMXYxYzAgLjUuNSAxIDEgMWgxLjJjLjIuNy40IDEuMy44IDEuOWwtLjguOGMtLjQuNC0uNCAxIDAgMS40bC43LjdjLjQuNCAxIC40IDEuNCAwbC44LS44Yy42LjQgMS4yLjYgMS45Ljh2MS4yYzAgLjUuNSAxIDEgMWgxYy41IDAgMS0uNSAxLTF2LTEuMmMuNy0uMiAxLjMtLjQgMS45LS44bC44LjhjLjQuNCAxIC40IDEuNCAwbC43LS43Yy40LS40LjQtMSAwLTEuNGwtLjgtLjhjLjQtLjYuNi0xLjIuOC0xLjlINDFjLjUgMCAxLS41IDEtMXYtMWMwLS41LS41LTEtMS0xem0tNy41IDUuNWMtMi4yIDAtNC0xLjgtNC00czEuOC00IDQtNCA0IDEuOCA0IDQtMS44IDQtNCA0elxcXCI+PC9wYXRoPjxwYXRoIG9wYWNpdHk9XFxcIi45XFxcIiBmaWxsPVxcXCIjOUQ5RkExXFxcIiBkPVxcXCJNMTMtMTV2LTNoLTEuMmMtLjEtLjQtLjMtLjgtLjUtMS4ybC45LS45LTIuMi0yLS45LjljLS40LS4yLS44LS40LTEuMi0uNVYtMjNINXYxLjJjLS40LjEtLjguMy0xLjIuNWwtLjgtLjhMLjgtMjBsLjkuOWMtLjIuNC0uNC44LS41IDEuMkgwdjNoMS4yYy4xLjQuMy44LjUgMS4ybC0uOS43TDMtMTAuOGwuOS0uOWMuNC4yLjguNCAxLjIuNXYxLjJoM3YtMS4yYy40LS4xLjgtLjMgMS4yLS41bC45LjkgMi4xLTIuMS0uOS0uOWMuMi0uNC40LS44LjUtMS4ySDEzem0tNi41IDEuNWMtMS43IDAtMy0xLjMtMy0zczEuMy0zIDMtMyAzIDEuMyAzIDMtMS4zIDMtMyAzelxcXCI+PC9wYXRoPjxwYXRoIG9wYWNpdHk9XFxcIi42XFxcIiBmaWxsPVxcXCIjOUQ5RkExXFxcIiBkPVxcXCJNMjMtOXYtMmgtMS4xYy0uMS0uNC0uMi0uNy0uNC0xbC44LS44LTEuNC0xLjQtLjkuOGMtLjMtLjItLjctLjMtMS0uNFYtMTVoLTJ2MS4xYy0uNC4xLS43LjItMSAuNGwtLjgtLjgtMS40IDEuNC44LjhjLS4yLjMtLjMuNy0uNCAxSDEzdjJoMS4xYy4xLjQuMi43LjQgMWwtLjguOCAxLjQgMS40LjktLjdjLjMuMi43LjMgMSAuNFYtNWgydi0xLjFjLjQtLjEuNy0uMiAxLS40bC44LjggMS40LTEuNC0uOC0uOWMuMi0uMy4zLS43LjQtMUgyM3ptLTUgMWMtMS4xIDAtMi0uOS0yLTJzLjktMiAyLTIgMiAuOSAyIDItLjkgMi0yIDJ6XFxcIj48L3BhdGg+PHBhdGggb3BhY2l0eT1cXFwiLjVcXFwiIGZpbGw9XFxcIiM5RDlGQTFcXFwiIGQ9XFxcIk0tNjktN2gzdjVoLTN6XFxcIj48L3BhdGg+PHBhdGggb3BhY2l0eT1cXFwiLjlcXFwiIGZpbGw9XFxcIiM5RDlGQTFcXFwiIGQ9XFxcIk0tNjktMjNoM3Y1aC0zelxcXCI+PC9wYXRoPjxwYXRoIG9wYWNpdHk9XFxcIi4yXFxcIiBmaWxsPVxcXCIjOUQ5RkExXFxcIiBkPVxcXCJNLTcyLjk5My0xMy45OTN2M2gtNXYtM3pcXFwiPjwvcGF0aD48cGF0aCBvcGFjaXR5PVxcXCIuN1xcXCIgZmlsbD1cXFwiIzlEOUZBMVxcXCIgZD1cXFwiTS01Ni45OTMtMTMuOTkzdjNoLTV2LTN6XFxcIj48L3BhdGg+PHBhdGggb3BhY2l0eT1cXFwiLjZcXFwiIGZpbGw9XFxcIiM5RDlGQTFcXFwiIGQ9XFxcIk0tNjQuNjE1LTcuNTQ5bDIuMTIxLTIuMTIgMy41MzYgMy41MzUtMi4xMjIgMi4xMjF6XFxcIj48L3BhdGg+PHBhdGggb3BhY2l0eT1cXFwiLjFcXFwiIGZpbGw9XFxcIiM5RDlGQTFcXFwiIGQ9XFxcIk0tNzUuOTgtMTguNzkxbDIuMTIxLTIuMTIyIDMuNTM2IDMuNTM2LTIuMTIyIDIuMTIxelxcXCI+PC9wYXRoPjxwYXRoIG9wYWNpdHk9XFxcIi4zXFxcIiBmaWxsPVxcXCIjOUQ5RkExXFxcIiBkPVxcXCJNLTcyLjUwNS05LjY2OWwyLjEyMSAyLjEyMS0zLjUzNSAzLjUzNi0yLjEyMi0yLjEyMXpcXFwiPjwvcGF0aD48cGF0aCBvcGFjaXR5PVxcXCIuOFxcXCIgZmlsbD1cXFwiIzlEOUZBMVxcXCIgZD1cXFwiTS02MS4xNC0yMC45MTJsMi4xMjEgMi4xMjEtMy41MzUgMy41MzYtMi4xMjItMi4xMjF6XFxcIj48L3BhdGg+PHBhdGggZmlsbD1cXFwiIzFBQjM5NFxcXCIgZD1cXFwiTTIxIDYuNUMyMSA0LjYgMTkuNCAzIDE3LjUgM1MxNCA0LjYgMTQgNi41YzAgMS40LjggMi42IDIgMy4yLS4yIDEtLjcgMS44LTEuNyAyLjMtLjQuMi0uOS40LTEuMy42LS44LjMtMS43LjYtMi41LjktLjIuMS0uMy4xLS41LjJ2LTZjMS4yLS42IDItMS44IDItMy4yQzEyIDIuNiAxMC40IDEgOC41IDFTNSAyLjYgNSA0LjVjMCAxLjQuOCAyLjYgMiAzLjJ2OS43Yy0xLjIuNi0yIDEuOC0yIDMuMkM1IDIyLjQgNi42IDI0IDguNSAyNHMzLjUtMS42IDMuNS0zLjVjMC0xLjQtLjgtMi42LTItMy4yLjEtLjUuNC0xIC45LTEuMi4zLS4xLjYtLjMgMS0uNCAxLjEtLjQgMi4xLS43IDMuMi0xLjIgMS40LS42IDIuNS0xLjUgMy4xLTIuOS4yLS40LjMtMS4xLjQtMS44QzIwIDkuMyAyMSA4LjEgMjEgNi41ek04LjUgM2MuOCAwIDEuNS43IDEuNSAxLjVTOS4zIDYgOC41IDYgNyA1LjMgNyA0LjUgNy43IDMgOC41IDN6bTAgMTljLS44IDAtMS41LS43LTEuNS0xLjVTNy43IDE5IDguNSAxOXMxLjUuNyAxLjUgMS41UzkuMyAyMiA4LjUgMjJ6TTE2IDYuNWMwLS44LjctMS41IDEuNS0xLjVzMS41LjcgMS41IDEuNVMxOC4zIDggMTcuNSA4IDE2IDcuMyAxNiA2LjV6XFxcIj48L3BhdGg+PC9zeW1ib2w+PHN5bWJvbCB2aWV3Qm94PVxcXCIwIDAgMTIgMTJcXFwiIGlkPVxcXCJpY29uLWdlYXJcXFwiPjxwYXRoIGQ9XFxcIk0xMiA3VjVIOS45Yy0uMS0uNC0uMy0uNy0uNS0xbDEuNS0xLjUtMS40LTEuNEw4IDIuNmMtLjMtLjItLjYtLjQtMS0uNVYwSDV2Mi4xYy0uNC4xLS43LjMtMSAuNUwyLjUgMS4xIDEuMSAyLjUgMi42IDRjLS4yLjMtLjQuNi0uNSAxSDB2MmgyLjFjLjEuNC4yLjcuNCAxTDEuMSA5LjVsMS40IDEuNEw0IDkuNGMuMy4yLjcuMyAxIC40VjEyaDJWOS45Yy40LS4xLjctLjIgMS0uNEw5LjUgMTFsMS40LTEuNEw5LjQgOGMuMi0uMy4zLS43LjQtMUgxMnpNNiA4Yy0xLjEgMC0yLS45LTItMnMuOS0yIDItMiAyIC45IDIgMi0uOSAyLTIgMnpcXFwiPjwvcGF0aD48L3N5bWJvbD48c3ltYm9sIHZpZXdCb3g9XFxcIjAgMCAxMiAxMlxcXCIgaWQ9XFxcImljb24tZ2VhcmFjdGl2ZVxcXCI+PHBhdGggZD1cXFwiTTEyIDdWNUg5LjljLS4xLS40LS4zLS43LS41LTFsMS41LTEuNS0xLjQtMS40TDggMi42Yy0uMy0uMi0uNi0uNC0xLS41VjBINXYyLjFjLS40LjEtLjcuMy0xIC41TDIuNSAxLjEgMS4xIDIuNSAyLjYgNGMtLjIuMy0uNC42LS41IDFIMHYyaDIuMWMuMS40LjIuNy40IDFMMS4xIDkuNWwxLjQgMS40TDQgOS40Yy4zLjIuNy4zIDEgLjRWMTJoMlY5LjljLjQtLjEuNy0uMiAxLS40TDkuNSAxMWwxLjQtMS40TDkuNCA4Yy4yLS4zLjMtLjcuNC0xSDEyek02IDhjLTEuMSAwLTItLjktMi0ycy45LTIgMi0yIDIgLjkgMiAyLS45IDItMiAyelxcXCI+PC9wYXRoPjwvc3ltYm9sPjxzeW1ib2wgdmlld0JveD1cXFwiMCAwIDEyIDEyXFxcIiBpZD1cXFwiaWNvbi1pbnBsYWNlY2hlY2tcXFwiPjxwYXRoIGQ9XFxcIk0yIDdsMS0xIDIgMiA1LTUgMSAxLTYgNnpcXFwiPjwvcGF0aD48L3N5bWJvbD48c3ltYm9sIHZpZXdCb3g9XFxcIjAgMCAxMiAxMlxcXCIgaWQ9XFxcImljb24taW5wbGFjZWRlbGV0ZVxcXCI+PHBhdGggZD1cXFwiTTMgMkwyIDNsMyAzLTMgMyAxIDEgMy0zIDMgMyAxLTEtMy0zIDMtMy0xLTEtMyAzelxcXCI+PC9wYXRoPjwvc3ltYm9sPjxzeW1ib2wgdmlld0JveD1cXFwiMCAwIDEyIDEyXFxcIiBpZD1cXFwiaWNvbi1pbnBsYWNlZHJhZ2dhYmxlXFxcIj48cGF0aCBkPVxcXCJNMCA0aDd2N0gwelxcXCI+PC9wYXRoPjxwYXRoIGQ9XFxcIk0yIDNoNnY2aDFWMkgyelxcXCI+PC9wYXRoPjxwYXRoIGQ9XFxcIk00IDFoNnY2aDFWMEg0elxcXCI+PC9wYXRoPjwvc3ltYm9sPjxzeW1ib2wgdmlld0JveD1cXFwiMCAwIDEyIDEyXFxcIiBpZD1cXFwiaWNvbi1pbnBsYWNlZWRpdFxcXCI+PHBhdGggZD1cXFwiTTEgMTFoM0wxIDh6TTYgM0wyIDdsMyAzIDQtNHpNMTEgNEw4IDEgNyAybDMgM3pNNyAxMGg1djFIN3pcXFwiPjwvcGF0aD48L3N5bWJvbD48c3ltYm9sIHZpZXdCb3g9XFxcIjAgMCAxMiAxMlxcXCIgaWQ9XFxcImljb24taW5wbGFjZXBsdXNcXFwiPjxwYXRoIGQ9XFxcIk0xMSA1SDdWMUg1djRIMXYyaDR2NGgyVjdoNHpcXFwiPjwvcGF0aD48L3N5bWJvbD48c3ltYm9sIHZpZXdCb3g9XFxcIjAgMCAxNiAxNlxcXCIgaWQ9XFxcImljb24tbGVmdFxcXCI+PHBhdGggZD1cXFwiTTExIDEybC0yIDItNi02IDYtNiAyIDItNCA0elxcXCI+PC9wYXRoPjwvc3ltYm9sPjxzeW1ib2wgdmlld0JveD1cXFwiMCAwIDI0IDI0XFxcIiBpZD1cXFwiaWNvbi1uZXdfMjR4MjRcXFwiPjxwYXRoIGZpbGw9XFxcIiMxQUIzOTRcXFwiIGQ9XFxcIk0xOCAxMWgtNVY2aC0zdjVINXYzaDV2NWgzdi01aDV6XFxcIj48L3BhdGg+PC9zeW1ib2w+PHN5bWJvbCB2aWV3Qm94PVxcXCIwIDAgMjAgMjBcXFwiIGlkPVxcXCJpY29uLW5vbmNvbW1lcmNpYWxcXFwiPjxwYXRoIGQ9XFxcIk0xMCAwQzQuNSAwIDAgNC41IDAgMTBzNC41IDEwIDEwIDEwIDEwLTQuNSAxMC0xMFMxNS41IDAgMTAgMHpNMiAxMGMwLTEuNC40LTIuOCAxLjEtMy45bDcuNiA3LjZjLS4zLjEtLjYuMi0uOS4yLTEuMSAwLTIuMS0uNC0zLTEuMWwtMSAxLjhjLjIuMi41LjUuOS43cy45LjQgMS40LjVjLjMuMS42LjEuOS4ydjFoMnYtMS4zYy41LS4xLjktLjMgMS4yLS41bDEuNyAxLjdjLTEuMS43LTIuNSAxLjEtMy45IDEuMS00LjQgMC04LTMuNi04LTh6bTE0LjEgNS4xbC0yLjQtMi40di0uM2MwLS42LS4xLTEuMi0uMy0xLjZzLS41LS43LS44LS45Yy0uMy0uMi0uNy0uNC0xLjEtLjVsLTEuMi0uM2MtLjEtLjEtLjItLjEtLjQtLjJMOC40IDcuNGMwLS4zLjItLjYuNC0uOC4zLS4yLjctLjMgMS4zLS4zLjggMCAxLjYuMyAyLjQgMWwuOS0xLjhjLS41LS40LTEtLjctMS42LS45LS4zLS4xLS42LS4yLS45LS4yVjNIOXYxLjRjLS43LjEtMS4zLjMtMS43LjctLjIuMi0uNC40LS41LjdMNC45IDMuOUM2LjMgMi43IDggMiAxMCAyYzQuNCAwIDggMy42IDggOCAwIDItLjcgMy43LTEuOSA1LjF6XFxcIj48L3BhdGg+PC9zeW1ib2w+PHN5bWJvbCB2aWV3Qm94PVxcXCIwIDAgMTYgMTZcXFwiIGlkPVxcXCJpY29uLXJpZ2h0XFxcIj48cGF0aCBkPVxcXCJNNSA0bDItMiA2IDYtNiA2LTItMiA0LTR6XFxcIj48L3BhdGg+PC9zeW1ib2w+PHN5bWJvbCBpZD1cXFwiaWNvbi1kZXZpY2UtbFxcXCI+PGcgZmlsbD1cXFwibm9uZVxcXCIgZmlsbC1ydWxlPVxcXCJldmVub2RkXFxcIiB0cmFuc2Zvcm09XFxcInRyYW5zbGF0ZSgtNTA5IC00MDkpXFxcIj48ZyB0cmFuc2Zvcm09XFxcInJvdGF0ZSgtOTAgODg0LjUgNjI0KVxcXCI+PHVzZSBmaWxsPVxcXCIjMDAwXFxcIiBmaWx0ZXI9XFxcInVybCgjZGV2aWNlLWwtYSlcXFwiIHhsaW5rOmhyZWY9XFxcIiNkZXZpY2UtbC1iXFxcIj48L3VzZT48dXNlIGZpbGw9XFxcIiNGRkZcXFwiIHhsaW5rOmhyZWY9XFxcIiNkZXZpY2UtbC1iXFxcIj48L3VzZT48L2c+PHJlY3Qgd2lkdGg9XFxcIjcwXFxcIiBoZWlnaHQ9XFxcIjhcXFwiIHg9XFxcIjU0MFxcXCIgeT1cXFwiNjI4XFxcIiBmaWxsPVxcXCIjRjRGNEY0XFxcIiBmaWxsLXJ1bGU9XFxcIm5vbnplcm9cXFwiIHRyYW5zZm9ybT1cXFwicm90YXRlKC05MCA1NzUgNjMyKVxcXCIgcng9XFxcIjRcXFwiPjwvcmVjdD48Y2lyY2xlIGN4PVxcXCI1NzVcXFwiIGN5PVxcXCI1ODVcXFwiIHI9XFxcIjRcXFwiIGZpbGw9XFxcIiNGNEY0RjRcXFwiIGZpbGwtcnVsZT1cXFwibm9uemVyb1xcXCIgdHJhbnNmb3JtPVxcXCJyb3RhdGUoLTkwIDU3NSA1ODUpXFxcIj48L2NpcmNsZT48cGF0aCBmaWxsPVxcXCIjRjRGNEY0XFxcIiBmaWxsLXJ1bGU9XFxcIm5vbnplcm9cXFwiIGQ9XFxcIk01OTIgNzg0VjQ2NGg1Njh2MzIwelxcXCI+PC9wYXRoPjxwYXRoIGZpbGw9XFxcIiNFN0U3RTdcXFwiIGZpbGwtcnVsZT1cXFwibm9uemVyb1xcXCIgZD1cXFwiTTU5MiA0NjR2MzIwaDU2OFY0NjRINTkyem01NjktMXYzMjJINTkxVjQ2M2g1NzB6XFxcIj48L3BhdGg+PGNpcmNsZSBjeD1cXFwiMTE4NlxcXCIgY3k9XFxcIjYyNFxcXCIgcj1cXFwiMTVcXFwiIGZpbGw9XFxcIiNGNEY0RjRcXFwiPjwvY2lyY2xlPjwvZz48L3N5bWJvbD48c3ltYm9sIGlkPVxcXCJpY29uLWRldmljZS1wXFxcIj48ZyBmaWxsPVxcXCJub25lXFxcIiBmaWxsLXJ1bGU9XFxcImV2ZW5vZGRcXFwiIHRyYW5zZm9ybT1cXFwidHJhbnNsYXRlKC03MCAtNDA4KVxcXCI+PHVzZSBmaWxsPVxcXCIjMDAwXFxcIiBmaWx0ZXI9XFxcInVybCgjZGV2aWNlLXAtYSlcXFwiIHhsaW5rOmhyZWY9XFxcIiNkZXZpY2UtcC1iXFxcIj48L3VzZT48dXNlIGZpbGw9XFxcIiNGRkZcXFwiIHhsaW5rOmhyZWY9XFxcIiNkZXZpY2UtcC1iXFxcIj48L3VzZT48cmVjdCB3aWR0aD1cXFwiNzBcXFwiIGhlaWdodD1cXFwiOFxcXCIgeD1cXFwiMjQyXFxcIiB5PVxcXCI0NzBcXFwiIGZpbGw9XFxcIiNGNEY0RjRcXFwiIGZpbGwtcnVsZT1cXFwibm9uemVyb1xcXCIgcng9XFxcIjRcXFwiPjwvcmVjdD48Y2lyY2xlIGN4PVxcXCIzMjRcXFwiIGN5PVxcXCI0NzRcXFwiIHI9XFxcIjRcXFwiIGZpbGw9XFxcIiNGNEY0RjRcXFwiIGZpbGwtcnVsZT1cXFwibm9uemVyb1xcXCI+PC9jaXJjbGU+PHBhdGggZmlsbD1cXFwiI0U3RTdFN1xcXCIgZmlsbC1ydWxlPVxcXCJub256ZXJvXFxcIiBkPVxcXCJNMTI0IDQ5MGgzMjJ2NTcwSDEyNFY0OTB6bTEgMXY1NjhoMzIwVjQ5MUgxMjV6XFxcIj48L3BhdGg+PHBhdGggZmlsbD1cXFwiI0Y0RjRGNFxcXCIgZmlsbC1ydWxlPVxcXCJub256ZXJvXFxcIiBkPVxcXCJNMTI1IDQ5MWgzMjB2NTY4SDEyNXpcXFwiPjwvcGF0aD48Y2lyY2xlIGN4PVxcXCIyODVcXFwiIGN5PVxcXCIxMDg0XFxcIiByPVxcXCIxNVxcXCIgZmlsbD1cXFwiI0Y0RjRGNFxcXCI+PC9jaXJjbGU+PC9nPjwvc3ltYm9sPjxzeW1ib2wgdmlld0JveD1cXFwiMCAwIDI0IDI0XFxcIiBpZD1cXFwiaWNvbi1tb2RpZmllZFxcXCI+PHBhdGggb3BhY2l0eT1cXFwiLjlcXFwiIGQ9XFxcIk0xNCAxMVY4aC0xLjJjLS4xLS40LS4zLS44LS41LTEuMmwuOS0uOEwxMSAzLjhsLS45LjljLS4zLS4yLS43LS40LTEuMS0uNVYzSDZ2MS4yYy0uNC4xLS44LjMtMS4yLjVMNCAzLjggMS44IDZsLjkuOWMtLjIuMy0uNC43LS41IDEuMUgxdjNoMS4yYy4xLjQuMy44LjUgMS4ybC0uOS44TDQgMTUuMmwuOS0uOWMuNC4yLjguNCAxLjIuNVYxNmgzdi0xLjJjLjQtLjEuOC0uMyAxLjItLjVsLjkuOSAyLjEtMi4xLS45LS45Yy4yLS40LjQtLjguNS0xLjJIMTR6bS02LjUgMS41Yy0xLjcgMC0zLTEuMy0zLTNzMS4zLTMgMy0zIDMgMS4zIDMgMy0xLjMgMy0zIDN6XFxcIj48L3BhdGg+PHBhdGggb3BhY2l0eT1cXFwiLjZcXFwiIGQ9XFxcIk0yNCAxN3YtMmgtMS4xYy0uMS0uNC0uMi0uNy0uNC0xbC44LS44LTEuNC0xLjQtLjkuOGMtLjMtLjItLjctLjMtMS0uNFYxMWgtMnYxLjFjLS40LjEtLjcuMi0xIC40bC0uOC0uOC0xLjQgMS40LjguOGMtLjIuMy0uMy43LS40IDFIMTR2MmgxLjFjLjEuNC4yLjcuNCAxbC0uOC44IDEuNCAxLjQuOC0uOGMuMy4yLjcuMyAxIC40VjIxaDJ2LTEuMWMuNC0uMS43LS4yIDEtLjRsLjguOCAxLjQtMS40LS43LS45Yy4yLS4zLjMtLjcuNC0xSDI0em0tNSAxYy0xLjEgMC0yLS45LTItMnMuOS0yIDItMiAyIC45IDIgMi0uOSAyLTIgMnpcXFwiPjwvcGF0aD48L3N5bWJvbD48c3ltYm9sIHZpZXdCb3g9XFxcIjAgMCAyNCAyNFxcXCIgaWQ9XFxcImljb24tc2F2ZWRcXFwiPjxwYXRoIG9wYWNpdHk9XFxcIi45XFxcIiBkPVxcXCJNNCAxM2wyLTIgNCA0IDktOSAyIDItMTEgMTF6XFxcIj48L3BhdGg+PC9zeW1ib2w+PHN5bWJvbCB2aWV3Qm94PVxcXCIwIDAgMjQgMjRcXFwiIGlkPVxcXCJpY29uLXNhdmluZ1xcXCI+PHBhdGggb3BhY2l0eT1cXFwiLjVcXFwiIGQ9XFxcIk0xMCAxN2gzdjVoLTN6XFxcIj48L3BhdGg+PHBhdGggb3BhY2l0eT1cXFwiLjlcXFwiIGQ9XFxcIk0xMCAxaDN2NWgtM3pcXFwiPjwvcGF0aD48cGF0aCBvcGFjaXR5PVxcXCIuMlxcXCIgZD1cXFwiTTYgMTB2M0gxdi0zelxcXCI+PC9wYXRoPjxwYXRoIG9wYWNpdHk9XFxcIi43XFxcIiBkPVxcXCJNMjIgMTB2M2gtNXYtM3pcXFwiPjwvcGF0aD48cGF0aCBvcGFjaXR5PVxcXCIuNlxcXCIgZD1cXFwiTTE0LjM5IDE2LjQ1bDIuMTItMi4xMjEgMy41MzYgMy41MzUtMi4xMjEgMi4xMjF6XFxcIj48L3BhdGg+PHBhdGggb3BhY2l0eT1cXFwiLjFcXFwiIGQ9XFxcIk0yLjk1NCA1LjEzNmwyLjEyMS0yLjEyMUw4LjYxIDYuNTUgNi40OSA4LjY3MnpcXFwiPjwvcGF0aD48cGF0aCBvcGFjaXR5PVxcXCIuM1xcXCIgZD1cXFwiTTYuNDkgMTQuMzI4bDIuMTIgMi4xMjItMy41MzUgMy41MzUtMi4xMjEtMi4xMjF6XFxcIj48L3BhdGg+PHBhdGggb3BhY2l0eT1cXFwiLjhcXFwiIGQ9XFxcIk0xNy45MjUgMy4wMTVsMi4xMjEgMi4xMi0zLjUzNSAzLjUzNi0yLjEyMi0yLjEyelxcXCI+PC9wYXRoPjwvc3ltYm9sPjwvc3ZnPlwiO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vc3JjL3N2Z2J1bmRsZS5odG1sXG4vLyBtb2R1bGUgaWQgPSA5M1xuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJtb2R1bGUuZXhwb3J0cyA9IFwiPHNjcmlwdCB0eXBlPVxcXCJ0ZXh0L2h0bWxcXFwiIGlkPVxcXCJjb252ZXJ0LWFjdGlvblxcXCI+XFxuICA8c3BhbiBjbGFzcz1cXFwic3ZkYV9xdWVzdGlvbl9hY3Rpb25cXFwiPlxcbiAgICAgIDwhLS0ga28gaWY6IGFsbG93Q2hhbmdlVHlwZSAtLT5cXG4gICAgICA8c2VsZWN0IG9ubW91c2V3aGVlbD1cXFwicmV0dXJuIGZhbHNlO1xcXCIgY2xhc3M9XFxcInN2ZGFfY3VycmVudF90eXBlIHN2ZC1tYWluLWNvbG9yIHN2ZC1saWdodC1iZy1jb2xvclxcXCIgZGF0YS1iaW5kPVxcXCJmb3JlYWNoOiBhdmFpbGFibGVUeXBlcywgZXZlbnQ6IHsgY2hhbmdlOiBvbkNvbnZlcnRUeXBlIH0sIGF0dHI6IHt0aXRsZTogdGl0bGV9XFxcIj5cXG4gICAgICAgICAgPG9wdGlvbiBjbGFzcz1cXFwic3ZkLWxpZ2h0LWJnLWNvbG9yXFxcIiBkYXRhLWJpbmQ9XFxcInRleHQ6ICRkYXRhLm5hbWUsIHZhbHVlOiAkZGF0YS52YWx1ZSwgYXR0cjp7c2VsZWN0ZWQ6ICRkYXRhLnZhbHVlID09PSAkcGFyZW50LnR5cGUgPyAnc2VsZWN0ZWQnOiBudWxsfVxcXCI+PC9vcHRpb24+XFxuICAgICAgPC9zZWxlY3Q+XFxuICAgICAgPCEtLSAva28gLS0+XFxuICAgICAgPCEtLSBrbyBpZm5vdDogYWxsb3dDaGFuZ2VUeXBlIC0tPlxcbiAgICAgIDxzcGFuIGRhdGEtYmluZD1cXFwidGV4dDogdGV4dFxcXCIgY2xhc3M9XFxcInN2ZGFfY3VycmVudF90eXBlIHN2ZC1tYWluLWNvbG9yXFxcIj4gPC9zcGFuPlxcbiAgICAgIDwhLS0gL2tvIC0tPlxcbiAgPC9zcGFuPlxcbjwvc2NyaXB0PlxcblxcbjxzY3JpcHQgdHlwZT1cXFwidGV4dC9odG1sXFxcIiBpZD1cXFwiYWN0aW9uLXNlcGFyYXRvclxcXCI+XFxuICA8c3BhbiBjbGFzcz1cXFwic3ZkYV9hY3Rpb25fc2VwYXJhdG9yIHN2ZC1kYXJrLWJvcmRlci1jb2xvclxcXCI+XFxuICA8L3NwYW4+XFxuPC9zY3JpcHQ+XFxuXFxuPHNjcmlwdCB0eXBlPVxcXCJ0ZXh0L2h0bWxcXFwiIGlkPVxcXCJmcC1hZGQtcXVlc3Rpb25cXFwiPlxcbiAgPHNwYW4gY2xhc3M9XFxcInN2ZGFfcXVlc3Rpb25fYWN0aW9uXFxcIj5cXG4gICAgICA8c2VsZWN0IG9ubW91c2V3aGVlbD1cXFwicmV0dXJuIGZhbHNlO1xcXCIgY2xhc3M9XFxcInN2ZGFfY3VycmVudF90eXBlIHN2ZC1tYWluLWNvbG9yIHN2ZC1saWdodC1iZy1jb2xvclxcXCIgZGF0YS1iaW5kPVxcXCJldmVudDogeyBjaGFuZ2U6IG9uQWRkUXVlc3Rpb24gfSwgYXR0cjoge3RpdGxlOiB0aXRsZX1cXFwiPlxcbiAgICAgICAgPG9wdGlvbiBjbGFzcz1cXFwic3ZkLWxpZ2h0LWJnLWNvbG9yXFxcIiBkYXRhLWJpbmQ9XFxcInRleHQ6IHRpdGxlLCB2YWx1ZTogdW5kZWZpbmVkXFxcIj48L29wdGlvbj5cXG4gICAgICAgIDwhLS0ga28gZm9yZWFjaDogYXZhaWxhYmxlVHlwZXMgLS0+XFxuICAgICAgICAgIDxvcHRpb24gY2xhc3M9XFxcInN2ZC1saWdodC1iZy1jb2xvclxcXCIgZGF0YS1iaW5kPVxcXCJ0ZXh0OiAkZGF0YS5uYW1lIHx8ICRkYXRhLCB2YWx1ZTogJGRhdGEudmFsdWUgfHwgJGRhdGFcXFwiPjwvb3B0aW9uPlxcbiAgICAgICAgPCEtLSAva28gLS0+XFxuICAgIDwvc2VsZWN0PlxcbiAgPC9zcGFuPlxcbjwvc2NyaXB0PlxcblwiO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vc3JjL3RlbXBsYXRlcy9jb252ZXJ0LWFjdGlvbi5odG1sXG4vLyBtb2R1bGUgaWQgPSA5NFxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJtb2R1bGUuZXhwb3J0cyA9IFwiPGRpdiBjbGFzcz1cXFwic3ZkX2NvbnRhaW5lciBzdmQtbGlnaHQtYmctY29sb3JcXFwiIGRhdGEtYmluZD1cXFwiY3NzOiB0aGVtZUNzc1xcXCI+XFxuICA8IS0tIGtvIGlmbm90OiBoYXZlQ29tbWVyY2lhbExpY2Vuc2UgLS0+XFxuICA8ZGl2IGNsYXNzPVxcXCJzdmRfY29tbWVyY2lhbF9jb250YWluZXJcXFwiPlxcbiAgICA8YVxcbiAgICAgIGNsYXNzPVxcXCJzdmRfY29tbWVyY2lhbF90ZXh0XFxcIlxcbiAgICAgIGhyZWY9XFxcImh0dHBzOi8vc3VydmV5anMuaW8vTGljZW5zZXMjQnVpbGRTdXJ2ZXlcXFwiXFxuICAgICAgdGFyZ2V0PVxcXCJfYmxhbmtcXFwiXFxuICAgID5cXG4gICAgICA8c3Bhbj5cXG4gICAgICAgIDxzdmctaWNvblxcbiAgICAgICAgICBjbGFzcz1cXFwic3ZkLXByaW1hcnktaWNvblxcXCJcXG4gICAgICAgICAgcGFyYW1zPVxcXCJpY29uTmFtZTogJ2ljb24tbm9uY29tbWVyY2lhbCcsIHNpemU6IDIwXFxcIlxcbiAgICAgICAgPjwvc3ZnLWljb24+XFxuICAgICAgPC9zcGFuPlxcbiAgICAgIDxzcGFuIGNsYXNzPVxcXCJzdmRfY29tbWVyY2lhbF9wcm9kdWN0IHN2ZC1tYWluLWNvbG9yXFxcIlxcbiAgICAgICAgPlN1cnZleUpTIENyZWF0b3I8L3NwYW5cXG4gICAgICA+XFxuICAgICAgPHNwYW4gY2xhc3M9XFxcInN2ZF9ub25jb21tZXJjaWFsX3VzZSBzdmQtbGlnaHQtdGV4dC1jb2xvclxcXCJcXG4gICAgICAgID5mb3Igbm9uLWNvbW1lcmNpYWwgdXNlIG9ubHk8L3NwYW5cXG4gICAgICA+XFxuICAgIDwvYT5cXG4gIDwvZGl2PlxcbiAgPCEtLSAva28gIC0tPlxcbiAgPHVsXFxuICAgIGNsYXNzPVxcXCJuYXZiYXItZGVmYXVsdCBjb250YWluZXItZmx1aWQgbmF2IG5hdi10YWJzIGVkaXRvci10YWJzIHN2ZC1saWdodC1iZy1jb2xvclxcXCJcXG4gID5cXG4gICAgPCEtLSBrbyBmb3JlYWNoOiB0YWJzIC0tPlxcbiAgICA8bGlcXG4gICAgICBjbGFzcz1cXFwibmF2LWl0ZW1cXFwiXFxuICAgICAgZGF0YS1iaW5kPVxcXCJjc3M6IHthY3RpdmU6ICRwYXJlbnQua29WaWV3VHlwZSgpID09IG5hbWV9XFxcIlxcbiAgICA+XFxuICAgICAgPGEgY2xhc3M9XFxcIm5hdi1saW5rXFxcIiBocmVmPVxcXCIjXFxcIiBkYXRhLWJpbmQ9XFxcImNsaWNrOiBhY3Rpb24sIHRleHQ6IHRpdGxlXFxcIj48L2E+XFxuICAgIDwvbGk+XFxuICAgIDwhLS0gL2tvIC0tPlxcbiAgPC91bD5cXG4gIDxkaXYgY2xhc3M9XFxcInBhbmVsIGNhcmQgc3ZkX2NvbnRlbnQgc3ZkLWRhcmstYmctY29sb3JcXFwiPlxcbiAgICA8IS0tIGtvIGZvcmVhY2g6IHRhYnMgLS0+XFxuICAgIDxkaXYgZGF0YS1iaW5kPVxcXCJ2aXNpYmxlOiAkcGFyZW50LmtvVmlld1R5cGUoKSA9PSBuYW1lXFxcIj5cXG4gICAgICA8IS0tIGtvIHRlbXBsYXRlOiB7IG5hbWU6IHRlbXBsYXRlLCBkYXRhOiBkYXRhLCBhZnRlclJlbmRlcjogZnVuY3Rpb24oZWxlbWVudCwgbW9kZWwpIHsgJHBhcmVudC5vbkVkaXRvclRhYlJlbmRlcmVkQ2FsbGJhY2sobmFtZSwgZWxlbWVudCwgbW9kZWwsICRkYXRhKTsgfSB9IC0tPlxcbiAgICAgIDwhLS0gL2tvIC0tPlxcbiAgICA8L2Rpdj5cXG4gICAgPCEtLSAva28gLS0+XFxuICA8L2Rpdj5cXG4gIDxkaXZcXG4gICAgZGF0YS1iaW5kPVxcXCJ0ZW1wbGF0ZTogeyBuYW1lOiAncXVlc3Rpb25lZGl0b3InLCBkYXRhOiBxdWVzdGlvbkVkaXRvcldpbmRvdyB9XFxcIlxcbiAgPjwvZGl2PlxcbjwvZGl2PlxcblwiO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vc3JjL3RlbXBsYXRlcy9pbmRleC5odG1sXG4vLyBtb2R1bGUgaWQgPSA5NVxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJtb2R1bGUuZXhwb3J0cyA9IFwiPHNjcmlwdCB0eXBlPVxcXCJ0ZXh0L2h0bWxcXFwiIGlkPVxcXCJqc29uZWRpdG9yXFxcIj5cXG4gICAgPGRpdiBkYXRhLWJpbmQ9XFxcInZpc2libGU6ICFoYXNBY2VFZGl0b3JcXFwiPlxcbiAgICAgICAgPHRleHRhcmVhIGNsYXNzPVxcXCJzdmRfanNvbl9lZGl0b3JfYXJlYVxcXCIgZGF0YS1iaW5kPVxcXCJ0ZXh0SW5wdXQ6a29UZXh0LCBkaXNhYmxlOiByZWFkT25seVxcXCI+PC90ZXh0YXJlYT5cXG4gICAgICAgIDwhLS0ga28gZm9yZWFjaDoga29FcnJvcnMgLS0+XFxuICAgICAgICA8ZGl2PlxcbiAgICAgICAgICAgIDxzcGFuPkVycm9yOiA8L3NwYW4+PHNwYW4gZGF0YS1iaW5kPVxcXCJ0ZXh0OiB0ZXh0XFxcIj48L3NwYW4+XFxuICAgICAgICA8L2Rpdj5cXG4gICAgICAgIDwhLS0gL2tvICAtLT5cXG4gICAgPC9kaXY+XFxuICAgIDxkaXYgaWQ9XFxcInN1cnZleWpzSlNPTkVkaXRvclxcXCIgY2xhc3M9XFxcInN2ZF9qc29uX2VkaXRvclxcXCI+PC9kaXY+XFxuPC9zY3JpcHQ+XCI7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9zcmMvdGVtcGxhdGVzL2pzb25lZGl0b3IuaHRtbFxuLy8gbW9kdWxlIGlkID0gOTZcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwibW9kdWxlLmV4cG9ydHMgPSBcIjxzY3JpcHQgdHlwZT1cXFwidGV4dC9odG1sXFxcIiBpZD1cXFwic3VydmV5cy1tYW5hZ2VcXFwiPlxcbiAgICA8ZGl2IGNsYXNzPVxcXCJzdmQtbWFuYWdlXFxcIj5cXG4gICAgICAgIDxkaXYgY2xhc3M9XFxcInN2ZC1tYW5hZ2UtbWFza1xcXCIgZGF0YS1iaW5kPVxcXCJ2aXNpYmxlOiBpc0xvYWRpbmdcXFwiPjwvZGl2PlxcbiAgICAgICAgPGRpdiBjbGFzcz1cXFwic3ZkLW1hbmFnZS1jb250cm9sIHN2ZC1saWdodC1ib3JkZXItY29sb3JcXFwiPlxcbiAgICAgICAgICAgIDxzZWxlY3Qgb25tb3VzZXdoZWVsPVxcXCJyZXR1cm4gZmFsc2U7XFxcIiBjbGFzcz1cXFwic3ZkLW1hbmFnZS1zZWxlY3RcXFwiIGRhdGEtYmluZD1cXFwidmlzaWJsZTogIWlzRWRpdE1vZGUoKSwgb3B0aW9uczogc3VydmV5cyxcXG4gICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zVGV4dDogJ25hbWUnLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBjdXJyZW50U3VydmV5LFxcbiAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnNDYXB0aW9uOiAnQ2hvb3NlIHN1cnZleSB0byBlZGl0IG9yIHN0YXJ0IGVkaXRpbmcgYW5kIHN1cnZleSB3aWxsIGJlIHNhdmVkIGF1dG9tYXRpY2FsbHkuLi4nXFxcIj48L3NlbGVjdD5cXG4gICAgICAgICAgICA8aW5wdXQgdHlwZT1cXFwidGV4dFxcXCIgY2xhc3M9XFxcInN2ZC1tYW5hZ2UtbmFtZVxcXCIgZGF0YS1iaW5kPVxcXCJ2aXNpYmxlOiBpc0VkaXRNb2RlLCB2YWx1ZTogY3VycmVudFN1cnZleU5hbWUsIGV2ZW50OiB7IGtleXVwOiBuYW1lRWRpdG9yS2V5cHJlc3MgfVxcXCJcXG4gICAgICAgICAgICAvPlxcbiAgICAgICAgPC9kaXY+XFxuICAgICAgICA8ZGl2IGNsYXNzPVxcXCJzdmQtbWFuYWdlLWJ1dHRvbnNcXFwiPlxcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVxcXCJpY29uXFxcIiBkYXRhLWJpbmQ9XFxcInZpc2libGU6IGN1cnJlbnRTdXJ2ZXksIGNsaWNrOiBlZGl0LCBjc3M6IGNzc0VkaXQsIGF0dHI6IHsgdGl0bGU6IHRpdGxlRWRpdCB9XFxcIj48L3NwYW4+XFxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XFxcImljb25cXFwiIGRhdGEtYmluZD1cXFwidmlzaWJsZTogIWlzRWRpdE1vZGUoKSwgY2xpY2s6IGFkZCwgY3NzOiBjc3NBZGQsIGF0dHI6IHsgdGl0bGU6IHRpdGxlQWRkIH1cXFwiPjwvc3Bhbj5cXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cXFwiaWNvbiBpY29uLWRlbGV0ZVxcXCIgdGl0bGU9XFxcIkRlbGV0ZSBjdXJyZW50IHN1cnZleVxcXCIgZGF0YS1iaW5kPVxcXCJ2aXNpYmxlOiAhaXNFZGl0TW9kZSgpICYmICFzdXJ2ZXlJZCgpICYmIGN1cnJlbnRTdXJ2ZXkoKSwgY2xpY2s6cmVtb3ZlXFxcIj48L3NwYW4+XFxuICAgICAgICA8L2Rpdj5cXG4gICAgPC9kaXY+XFxuPC9zY3JpcHQ+XFxuPHNjcmlwdCB0eXBlPVxcXCJ0ZXh0L2h0bWxcXFwiIGlkPVxcXCJhdHRhY2gtc3VydmV5XFxcIj5cXG4gICAgPGEgdGFyZ2V0PVxcXCJfYmxhbmtcXFwiIGhyZWY9XFxcIiNcXFwiIGRhdGEtYmluZD1cXFwiYXR0cjogeyBocmVmOiBhY3Rpb24sIHRpdGxlOiB0aXRsZSB9XFxcIj5cXG4gICAgICAgIDxzcGFuIGNsYXNzPVxcXCJpY29uXFxcIiBkYXRhLWJpbmQ9XFxcImNzczogaW5uZXJDc3NcXFwiPjwvc3Bhbj5cXG4gICAgICAgIDxzcGFuIGRhdGEtYmluZD1cXFwidGV4dDogdGl0bGVcXFwiPjwvc3Bhbj5cXG4gICAgPC9hPlxcbjwvc2NyaXB0PlwiO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vc3JjL3RlbXBsYXRlcy9tYW5hZ2UuaHRtbFxuLy8gbW9kdWxlIGlkID0gOTdcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwibW9kdWxlLmV4cG9ydHMgPSBcIjxzY3JpcHQgdHlwZT1cXFwidGV4dC9odG1sXFxcIiBpZD1cXFwib2JqZWN0ZWRpdG9yXFxcIj5cXG4gIDx0YWJsZSBjbGFzcz1cXFwidGFibGUgc3ZkX3RhYmxlLW5vd3JhcCBzdmRfcHJvcGVydGllc19ncmlkXFxcIj5cXG4gICAgICA8dGJvZHkgZGF0YS1iaW5kPVxcXCJmb3JlYWNoOiBrb1Byb3BlcnRpZXNcXFwiPlxcbiAgICAgICAgICA8IS0tIGtvIHRlbXBsYXRlOiB7IG5hbWU6ICdvYmplY3RlZGl0b3Jwcm9wZXJ0eScsIGFmdGVyUmVuZGVyOiAkcGFyZW50LmtvQWZ0ZXJSZW5kZXIgfSAtLT5cXG4gICAgICAgICAgPCEtLSAva28gLS0+XFxuICAgICAgPC90Ym9keT5cXG4gIDwvdGFibGU+XFxuPC9zY3JpcHQ+XFxuPHNjcmlwdCB0eXBlPVxcXCJ0ZXh0L2h0bWxcXFwiIGlkPVxcXCJvYmplY3RlZGl0b3Jwcm9wZXJ0eVxcXCI+XFxuICA8dHIgZGF0YS1iaW5kPVxcXCJ2aXNpYmxlOiBrb1Zpc2libGUsIGNsaWNrOiAkcGFyZW50LmNoYW5nZUFjdGl2ZVByb3BlcnR5KCRkYXRhKSwgY3NzOiB7J2FjdGl2ZSc6ICRwYXJlbnQua29BY3RpdmVQcm9wZXJ0eSgpID09ICRkYXRhfSwgYXR0cjogeyAnZGF0YS1wcm9wZXJ0eSc6IG5hbWUgfVxcXCI+XFxuICAgICAgPHRkIHdpZHRoPVxcXCI1MCVcXFwiPlxcbiAgICAgICAgICA8c3BhbiBkYXRhLWJpbmQ9XFxcInRleHQ6IGRpc3BsYXlOYW1lLCBhdHRyOiB7dGl0bGU6IHRpdGxlIHx8IGRpc3BsYXlOYW1lfVxcXCI+PC9zcGFuPlxcbiAgICAgIDwvdGQ+XFxuICAgICAgPHRkIGNsYXNzPVxcXCJzdmQtbGlnaHQtdGV4dC1jb2xvciBmb3JtLWdyb3VwXFxcIiB3aWR0aD1cXFwiNTAlXFxcIj5cXG4gICAgICAgICAgPGRpdiBkYXRhLWJpbmQ9XFxcImV2ZW50OiB7IGtleWRvd246ICRkYXRhLmVkaXRvci5rZXlEb3duSGFuZGxlciB9XFxcIj5cXG4gICAgICAgICAgICAgIDwhLS0ga28gdGVtcGxhdGU6IHsgbmFtZTogJ3Byb3BlcnR5ZWRpdG9yLScgKyBlZGl0b3JUeXBlVGVtcGxhdGUsIGRhdGE6ICRkYXRhLmVkaXRvciB9IC0tPlxcbiAgICAgICAgICAgICAgPCEtLSAva28gLS0+XFxuICAgICAgICAgIDwvZGl2PlxcbiAgICAgIDwvdGQ+XFxuICA8L3RyPlxcbjwvc2NyaXB0PlxcblwiO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vc3JjL3RlbXBsYXRlcy9vYmplY3RlZGl0b3IuaHRtbFxuLy8gbW9kdWxlIGlkID0gOThcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwibW9kdWxlLmV4cG9ydHMgPSBcIjxzY3JpcHQgdHlwZT1cXFwidGV4dC9odG1sXFxcIiBpZD1cXFwic3ZkLXBhZ2Utc2VsZWN0b3ItdGVtcGxhdGVcXFwiPlxcbiAgPGRpdiBjbGFzcz1cXFwic3ZkLXBhZ2Utc2VsZWN0b3Igc3ZkX2N1c3RvbV9zZWxlY3Qgc3ZkLWxpZ2h0LWJnLWNvbG9yIHN2ZC1saWdodC1ib3JkZXItY29sb3JcXFwiPlxcbiAgICAgIDxzZWxlY3Qgb25tb3VzZXdoZWVsPVxcXCJyZXR1cm4gZmFsc2U7XFxcIiBkYXRhLWJpbmQ9XFxcIm9wdGlvbnM6IHBhZ2VzU2VsZWN0aW9uLCB2YWx1ZTogcGFnZVNlbGVjdGlvbiwgb3B0aW9uc1RleHQ6IGdldERpc3BsYXlUZXh0XFxcIj48L3NlbGVjdD5cXG4gIDwvZGl2PlxcbiAgPGRpdiB0YWJpbmRleD1cXFwiMFxcXCIgY2xhc3M9XFxcInN2ZC1wYWdlLXNjcm9sbGVyLWFycm93XFxcIiBkYXRhLWJpbmQ9XFxcImtleTJjbGljaywgY2xpY2tOb0ZvY3VzOiBtb3ZlTGVmdCwgYXR0cjoge3RpdGxlOiBnZXRMb2NTdHJpbmcoJ2VkLm1vdmVMZWZ0Jyl9XFxcIj5cXG4gICAgICA8c3Bhbj5cXG4gICAgICAgICAgPHN2Zy1pY29uIGNsYXNzPVxcXCJzdmQtc2Vjb25kYXJ5LWljb25cXFwiIHBhcmFtcz1cXFwiaWNvbk5hbWU6ICdpY29uLWxlZnQnXFxcIj48L3N2Zy1pY29uPlxcbiAgICAgIDwvc3Bhbj5cXG4gIDwvZGl2PlxcblxcbiAgPGRpdiBjbGFzcz1cXFwic3ZkLXBhZ2VzXFxcIiBkYXRhLWJpbmQ9XFxcInNvcnRhYmxlOiB7Zm9yZWFjaDogZWRpdG9yLnBhZ2VzLCBvcHRpb25zOiBzb3J0YWJsZU9wdGlvbnN9LCBldmVudDoge3doZWVsOiBvbldoZWVsfVxcXCI+XFxuICAgICAgPGRpdiB0YWJpbmRleD1cXFwiMFxcXCIgY2xhc3M9XFxcInN2ZC1wYWdlIHN2ZC1saWdodC1ib3JkZXItY29sb3JcXFwiIGRhdGEtYmluZD1cXFwia2V5MmNsaWNrLCBjc3M6ICRwYXJlbnQuZ2V0UGFnZUNsYXNzKCRkYXRhKSwgY2xpY2tOb0ZvY3VzOiAkcGFyZW50Lm9uUGFnZUNsaWNrXFxcIj5cXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XFxcInN2ZC1wYWdlLW5hbWVcXFwiIGRhdGEtYmluZD1cXFwidGV4dDogJHBhcmVudC5nZXREaXNwbGF5VGV4dCgkZGF0YSlcXFwiPjwvc3Bhbj5cXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XFxcInN2ZC1wYWdlLWFjdGlvbnMtY29udGFpbmVyXFxcIj5cXG4gICAgICAgICAgICAgIDxzdmctaWNvbiBkYXRhLWJpbmQ9XFxcImNzczogJHBhcmVudC5nZXRQYWdlTWVudUljb25DbGFzcygkZGF0YSlcXFwiIHBhcmFtcz1cXFwiaWNvbk5hbWU6ICRwYXJlbnQuZ2V0UGFnZU1lbnVJY29uQ2xhc3MoJGRhdGEpLCBzaXplOiAxMlxcXCI+PC9zdmctaWNvbj5cXG4gICAgICAgICAgICAgIDwhLS0ga28gaWZub3Q6ICRwYXJlbnQucmVhZE9ubHkgLS0+XFxuICAgICAgICAgICAgICA8ZGl2IHN0eWxlPVxcXCJwb3NpdGlvbjogc3RhdGljXFxcIj5cXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJzdmQtcGFnZS1hY3Rpb25zIHN2ZC1kYXJrLWJvcmRlci1jb2xvciBzdmQtbGlnaHQtYmctY29sb3JcXFwiIGRhdGEtYmluZD1cXFwidmlzaWJsZTogJHBhcmVudC5zaG93QWN0aW9ucygkZGF0YSlcXFwiPlxcbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cXFwic3ZkLXBhZ2UtYWN0aW9uXFxcIiBkYXRhLWJpbmQ9XFxcImNsaWNrOiBmdW5jdGlvbihtb2RlbCwgZXZlbnQpIHskcGFyZW50LnNob3dQYWdlU2V0dGluZ3MoJGRhdGEpOyBldmVudC5zdG9wUHJvcGFnYXRpb24oKTt9LCBhdHRyOiB7dGl0bGU6ICRwYXJlbnQuZ2V0TG9jU3RyaW5nKCdlZC5lZGl0UGFnZScpfVxcXCI+XFxuICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnLWljb24gY2xhc3M9XFxcInN2ZC1wcmltYXJ5LWljb25cXFwiIHBhcmFtcz1cXFwiaWNvbk5hbWU6ICdpY29uLWFjdGlvbmVkaXRlbGVtZW50J1xcXCI+PC9zdmctaWNvbj5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVxcXCJzdmQtbWFpbi1jb2xvclxcXCIgZGF0YS1iaW5kPVxcXCJ0ZXh0OiAkcGFyZW50LmdldExvY1N0cmluZygnZWQuZWRpdCcpXFxcIj48L3NwYW4+XFxuICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cXG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XFxcInN2ZC1wYWdlLWFjdGlvblxcXCIgZGF0YS1iaW5kPVxcXCJjbGljazogZnVuY3Rpb24obW9kZWwsIGV2ZW50KSB7JHBhcmVudC5kZWxldGVQYWdlKCRkYXRhKTsgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7fSwgYXR0cjoge3RpdGxlOiAkcGFyZW50LmdldExvY1N0cmluZygnZWQuZGVsZXRlUGFnZScpfSwgdmlzaWJsZTogISRwYXJlbnQuaXNMYXN0UGFnZSgpXFxcIj5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmctaWNvbiBjbGFzcz1cXFwic3ZkLXByaW1hcnktaWNvblxcXCIgcGFyYW1zPVxcXCJpY29uTmFtZTogJ2ljb24tYWN0aW9uZGVsZXRlJ1xcXCI+PC9zdmctaWNvbj5cXG4gICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxcbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cXFwic3ZkYV9hY3Rpb25fc2VwYXJhdG9yIHN2ZC1kYXJrLWJvcmRlci1jb2xvclxcXCIgZGF0YS1iaW5kPVxcXCJ2aXNpYmxlOiAhJHBhcmVudC5pc0xhc3RQYWdlKClcXFwiPjwvc3Bhbj5cXG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XFxcInN2ZC1wYWdlLWFjdGlvblxcXCIgZGF0YS1iaW5kPVxcXCJjbGljazogZnVuY3Rpb24obW9kZWwsIGV2ZW50KSB7JHBhcmVudC5jb3B5UGFnZSgkZGF0YSk7IGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO30sIGF0dHI6IHt0aXRsZTogJHBhcmVudC5nZXRMb2NTdHJpbmcoJ3N1cnZleS5Db3B5Jyl9XFxcIj5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmctaWNvbiBjbGFzcz1cXFwic3ZkLXByaW1hcnktaWNvblxcXCIgcGFyYW1zPVxcXCJpY29uTmFtZTogJ2ljb24tYWN0aW9uY29weSdcXFwiPjwvc3ZnLWljb24+XFxuICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cXG4gICAgICAgICAgICAgIDwvZGl2PlxcbiAgICAgICAgICAgICAgPCEtLSAva28gLS0+XFxuICAgICAgICAgIDwvc3Bhbj5cXG4gICAgICA8L2Rpdj5cXG4gIDwvZGl2PlxcbiAgPGRpdiB0YWJpbmRleD1cXFwiMFxcXCIgY2xhc3M9XFxcInN2ZC1wYWdlLXNjcm9sbGVyLWFycm93XFxcIiBkYXRhLWJpbmQ9XFxcImtleTJjbGljaywgY2xpY2tOb0ZvY3VzOiBtb3ZlUmlnaHQsIGF0dHI6IHt0aXRsZTogZ2V0TG9jU3RyaW5nKCdlZC5tb3ZlUmlnaHQnKX1cXFwiPlxcbiAgICAgIDxzcGFuPlxcbiAgICAgICAgICA8c3ZnLWljb24gY2xhc3M9XFxcInN2ZC1zZWNvbmRhcnktaWNvblxcXCIgcGFyYW1zPVxcXCJpY29uTmFtZTogJ2ljb24tcmlnaHQnXFxcIj48L3N2Zy1pY29uPlxcbiAgICAgIDwvc3Bhbj5cXG4gIDwvZGl2PlxcbiAgPCEtLSBrbyBpZm5vdDogcmVhZE9ubHkgLS0+XFxuICA8ZGl2IHRhYmluZGV4PVxcXCIwXFxcIiBjbGFzcz1cXFwic3ZkLXBhZ2UtYWRkXFxcIiBkYXRhLWJpbmQ9XFxcImtleTJjbGljaywgY2xpY2tOb0ZvY3VzOiBhZGRQYWdlLCBhdHRyOiB7dGl0bGU6IGdldExvY1N0cmluZygnZWQuYWRkTmV3UGFnZScpfVxcXCI+XFxuICAgICAgPHNwYW4+XFxuICAgICAgICAgIDxzdmctaWNvbiBjbGFzcz1cXFwic3ZkLXNlY29uZGFyeS1pY29uXFxcIiBwYXJhbXM9XFxcImljb25OYW1lOiAnaWNvbi1hZGQnXFxcIj48L3N2Zy1pY29uPlxcbiAgICAgIDwvc3Bhbj5cXG4gIDwvZGl2PlxcbiAgPCEtLSAva28gLS0+XFxuPC9zY3JpcHQ+XFxuXCI7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9zcmMvdGVtcGxhdGVzL3BhZ2VlZGl0b3IuaHRtbFxuLy8gbW9kdWxlIGlkID0gOTlcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwibW9kdWxlLmV4cG9ydHMgPSBcIjxzY3JpcHQgdHlwZT1cXFwidGV4dC9odG1sXFxcIiBpZD1cXFwiZWxlbWVudHNlbGVjdG9yXFxcIj5cXG4gICAgICA8IS0tIGtvIHRlbXBsYXRlOiB7bmFtZTogJ3Byb3BlcnR5ZWRpdG9yLWVycm9yJywgZGF0YTogJGRhdGF9IC0tPjwhLS0gL2tvIC0tPlxcbiAgICAgIDxkaXYgY2xhc3M9XFxcImZvcm0tY29udHJvbCBzdmRfY3VzdG9tX3NlbGVjdFxcXCI+XFxuICAgICAgPHNlbGVjdCBvbm1vdXNld2hlZWw9XFxcInJldHVybiBmYWxzZTtcXFwiIGRhdGEtYmluZD1cXFwiaWY6IHRydWUsIHZhbHVlOiBrb1ZhbHVlLCBvcHRpb25zQ2FwdGlvbjogb3B0aW9uc0NhcHRpb24sIHZhbHVlQWxsb3dVbnNldDogdHJ1ZSwgaGFzRm9jdXM6IGtvSGFzRm9jdXNcXFwiPlxcbiAgICAgICAgPG9wdGlvbiB2YWx1ZT1cXFwiXFxcIiBkYXRhLWJpbmQ9XFxcInRleHQ6IG9wdGlvbnNDYXB0aW9uXFxcIj48L29wdGlvbj5cXG4gICAgICAgIDwhLS0ga28gZm9yZWFjaDoga29FbGVtZW50cyAtLT5cXG4gICAgICAgIDxvcHRpb24gZGF0YS1iaW5kPVxcXCJhdHRyOiB7IGRpc2FibGVkOiBrb0Rpc2FibGVkLCB2YWx1ZTogbmFtZSB9LCB0ZXh0OnRleHRcXFwiPjwvb3B0aW9uPlxcbiAgICAgICAgPCEtLSAva28gLS0+XFxuICAgICAgPC9zZWxlY3Q+XFxuICA8L2Rpdj5cXG48L3NjcmlwdD5cXG5cIjtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL3NyYy90ZW1wbGF0ZXMvcHJvcGVydHlFZGl0b3JzL2VsZW1lbnRzZWxlY3Rvci5odG1sXG4vLyBtb2R1bGUgaWQgPSAxMDBcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwibW9kdWxlLmV4cG9ydHMgPSBcIjxzY3JpcHQgdHlwZT1cXFwidGV4dC9odG1sXFxcIiBpZD1cXFwicHJvcGVydHllZGl0b3ItYm9vbGVhblxcXCI+XFxuICAgIDxkaXYgY2xhc3M9XFxcInNqcy1jYi13cmFwcGVyXFxcIj5cXG4gICAgICAgIDxsYWJlbD5cXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJzanMtY2ItY29udGFpbmVyXFxcIj5cXG4gICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVxcXCJzdmRfZWRpdG9yX2NvbnRyb2xcXFwiIHR5cGU9XFxcImNoZWNrYm94XFxcIiBkYXRhLWJpbmQ9XFxcImNoZWNrZWQ6IGtvVmFsdWUsIGRpc2FibGU6ICRkYXRhLnJlYWRPbmx5XFxcIj5cXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XFxcImNoZWNrbWFya1xcXCIgZGF0YS1iaW5kPVxcXCJjc3M6IHsgJ3N2ZC1tYWluLWJhY2tncm91bmQtY29sb3InOiBrb1ZhbHVlLCAnc3ZkLWxpZ2h0LWJhY2tncm91bmQtY29sb3InOiAha29WYWx1ZSgpIH1cXFwiPjwvc3Bhbj5cXG4gICAgICAgICAgICAgICAgPCEtLSBrbyBpZjogJGRhdGEuaXNEaXBsYXlOYW1lVmlzaWJsZSAtLT5cXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XFxcInNqcy1jYi1sYWJlbFxcXCIgZGF0YS1iaW5kPVxcXCJ0ZXh0OiAkZGF0YS5kaXNwbGF5TmFtZVxcXCI+PC9zcGFuPlxcbiAgICAgICAgICAgICAgICA8IS0tIC9rbyAtLT5cXG4gICAgICAgICAgICA8L2Rpdj5cXG4gICAgICAgIDwvbGFiZWw+XFxuICAgIDwvZGl2Plxcbjwvc2NyaXB0PlwiO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vc3JjL3RlbXBsYXRlcy9wcm9wZXJ0eUVkaXRvcnMvcHJvcGVydHllZGl0b3ItYm9vbGVhbi5odG1sXG4vLyBtb2R1bGUgaWQgPSAxMDFcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwibW9kdWxlLmV4cG9ydHMgPSBcIjxzY3JpcHQgdHlwZT1cXFwidGV4dC9odG1sXFxcIiBpZD1cXFwicHJvcGVydHllZGl0b3ItY2VsbHNcXFwiPlxcbiAgICA8IS0tIGtvIHRlbXBsYXRlOiB7IG5hbWU6ICdwcm9wZXJ0eWVkaXRvci1tb2RhbCcsIGRhdGE6ICRkYXRhIH0gLS0+XFxuICAgIDwhLS0gL2tvIC0tPlxcbjwvc2NyaXB0PlxcbjxzY3JpcHQgdHlwZT1cXFwidGV4dC9odG1sXFxcIiBpZD1cXFwicHJvcGVydHllZGl0b3Jjb250ZW50LWNlbGxzXFxcIj5cXG4gICAgPGRpdiBjbGFzcz1cXFwicGFuZWwgY2FyZFxcXCI+XFxuICAgICAgICA8ZGl2IGRhdGEtYmluZD1cXFwidmlzaWJsZToha29DYW5FZGl0KCksIHRleHQ6ICRyb290LmdldExvY1N0cmluZygncGUuY2VsbHNFbXB0eVJvd3NDb2x1bW5zJylcXFwiPjwvZGl2PlxcbiAgICAgICAgPGRpdiAgZGF0YS1iaW5kPVxcXCJ2aXNpYmxlOiBrb0NhbkVkaXRcXFwiIHN0eWxlPVxcXCJvdmVyZmxvdzphdXRvXFxcIj5cXG4gICAgICAgICAgICA8dGFibGUgY2xhc3M9XFxcInRhYmxlXFxcIj5cXG4gICAgICAgICAgICAgICAgPHRoZWFkPlxcbiAgICAgICAgICAgICAgICAgICAgPHRyPlxcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0aD48L3RoPlxcbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0ga28gZm9yZWFjaDoga29Db2x1bW5zIC0tPlxcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0aD5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gZGF0YS1iaW5kPVxcXCJ0ZXh0OiRkYXRhXFxcIj48L3NwYW4+XFxuICAgICAgICAgICAgICAgICAgICAgICAgPC90aD5cXG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tIC9rbyAtLT5cXG4gICAgICAgICAgICAgICAgICAgIDwvdHI+XFxuICAgICAgICAgICAgICAgIDwvdGhlYWQ+XFxuICAgICAgICAgICAgICAgIDx0Ym9keT5cXG4gICAgICAgICAgICAgICAgICAgIDwhLS0ga28gZm9yZWFjaDoga29Sb3dzICAtLT5cXG4gICAgICAgICAgICAgICAgICAgIDx0cj5cXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQ+XFxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gZGF0YS1iaW5kPVxcXCJ0ZXh0OnJvd1RleHRcXFwiPjwvc3Bhbj5cXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxcbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0ga28gZm9yZWFjaDoga29DZWxscyAtLT5cXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQgc3R5bGU9XFxcIm1pbi13aWR0aDoxMjBweFxcXCIgY2xhc3M9XFxcImZvcm0tZ3JvdXBcXFwiPlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGV4dGFyZWEgcm93cz1cXFwiMlxcXCIgY29scz1cXFwiMjVcXFwiIGNsYXNzPVxcXCJmb3JtLWNvbnRyb2xcXFwiIGRhdGEtYmluZD1cXFwidGV4dElucHV0OnRleHRcXFwiPjwvdGV4dGFyZWE+XFxuICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cXG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tIC9rbyAtLT5cXG4gICAgICAgICAgICAgICAgICAgIDwvdHI+XFxuICAgICAgICAgICAgICAgICAgICA8IS0tIC9rbyAtLT5cXG4gICAgICAgICAgICAgICAgPC90Ym9keT5cXG4gICAgICAgICAgICA8L3RhYmxlPlxcbiAgICAgICAgPC9kaXY+XFxuICAgIDwvZGl2Plxcbjwvc2NyaXB0PlwiO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vc3JjL3RlbXBsYXRlcy9wcm9wZXJ0eUVkaXRvcnMvcHJvcGVydHllZGl0b3ItY2VsbHMuaHRtbFxuLy8gbW9kdWxlIGlkID0gMTAyXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIm1vZHVsZS5leHBvcnRzID0gXCI8c2NyaXB0IHR5cGU9XFxcInRleHQvaHRtbFxcXCIgaWQ9XFxcInByb3BlcnR5ZWRpdG9yLWNvbmRpdGlvblxcXCI+XFxuICA8IS0tIGtvIHRlbXBsYXRlOiB7IG5hbWU6ICdwcm9wZXJ0eWVkaXRvci1tb2RhbCcsIGRhdGE6ICRkYXRhIH0gLS0+XFxuICA8IS0tIC9rbyAtLT5cXG48L3NjcmlwdD5cXG5cXG48c2NyaXB0IHR5cGU9XFxcInRleHQvaHRtbFxcXCIgaWQ9XFxcInByb3BlcnR5ZWRpdG9yY29udGVudC1jb25kaXRpb25cXFwiPlxcbiAgPGRpdiBjbGFzcz1cXFwicHJvcGVydHllZGl0b3ItY29uZGl0aW9uXFxcIj5cXG4gICAgICA8ZGl2IGNsYXNzPVxcXCJmb3JtLWlubGluZSBmb3JtLWdyb3VwXFxcIj5cXG4gICAgICAgICAgPGRpdiBjbGFzcz1cXFwiZm9ybS1jb250cm9sIHN2ZF9jdXN0b21fc2VsZWN0XFxcIj5cXG4gICAgICAgICAgICAgIDxzZWxlY3Qgb25tb3VzZXdoZWVsPVxcXCJyZXR1cm4gZmFsc2U7XFxcIiBzdHlsZT1cXFwibWF4LXdpZHRoOjIwMHB4XFxcIiBkYXRhLWJpbmQ9XFxcImlmOiB0cnVlLCB2YWx1ZToga29BZGRDb25kaXRpb25RdWVzdGlvblxcXCI+XFxuICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XFxcIlxcXCIgZGF0YS1iaW5kPVxcXCJ0ZXh0OiBhZGRDb25kaXRpb25RdWVzdGlvbk9wdGlvbnMsIGF0dHI6IHt0aXRsZTogYWRkQ29uZGl0aW9uUXVlc3Rpb25PcHRpb25zfVxcXCIgPjwvb3B0aW9uPlxcbiAgICAgICAgICAgICAgICA8IS0tIGtvIGZvcmVhY2g6IGtvQWRkQ29uZGl0aW9uUXVlc3Rpb25zIC0tPlxcbiAgICAgICAgICAgICAgICA8b3B0aW9uIGRhdGEtYmluZD1cXFwidmFsdWU6IG5hbWUsIHRleHQ6ICh0ZXh0IHx8ICcnKS5zdWJzdHJpbmcoMCwgODApLCBhdHRyOiB7dGl0bGU6IHRleHR9XFxcIiA+PC9vcHRpb24+XFxuICAgICAgICAgICAgICAgIDwhLS0gL2tvIC0tPlxcbiAgICAgICAgICAgICAgPC9zZWxlY3Q+XFxuICAgICAgICAgIDwvZGl2PlxcbiAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJmb3JtLWNvbnRyb2wgc3ZkX2N1c3RvbV9zZWxlY3RcXFwiPlxcbiAgICAgICAgICAgICAgPHNlbGVjdCBvbm1vdXNld2hlZWw9XFxcInJldHVybiBmYWxzZTtcXFwiIGRhdGEtYmluZD1cXFwib3B0aW9uczphdmFpbGFibGVPcGVyYXRvcnMsIG9wdGlvbnNWYWx1ZTogJ25hbWUnLCBvcHRpb25zVGV4dDogJ3RleHQnLCB2YWx1ZTprb0FkZENvbmRpdGlvbk9wZXJhdG9yXFxcIj48L3NlbGVjdD5cXG4gICAgICAgICAgPC9kaXY+XFxuICAgICAgICAgIDxpbnB1dCBjbGFzcz1cXFwiZm9ybS1jb250cm9sXFxcIiB0eXBlPVxcXCJ0ZXh0XFxcIiBkYXRhLWJpbmQ9XFxcInRleHRJbnB1dDprb0FkZENvbmRpdGlvblZhbHVlLCBlbmFibGU6IGtvQWRkQ29udGlvblZhbHVlRW5hYmxlZFxcXCIgc3R5bGU9XFxcIndpZHRoOjEyMHB4XFxcIlxcbiAgICAgICAgICAvPlxcbiAgICAgICAgICA8aW5wdXQgdHlwZT1cXFwiYnV0dG9uXFxcIiBjbGFzcz1cXFwiZm9ybS1jb250cm9sIGJ0biBidG4tcHJpbWFyeVxcXCIgZGF0YS1iaW5kPVxcXCJlbmFibGU6IGtvQ2FuQWRkQ29uZGl0aW9uKCkgJiYgIXJlYWRPbmx5KCksIGNsaWNrOiBvbkNvbmRpdGlvbkFkZENsaWNrLCB2YWx1ZToga29BZGRDb25kaXRpb25CdXR0b25UZXh0XFxcIlxcbiAgICAgICAgICAvPlxcbiAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJzdmRfd3JhcF9lbGVtZW50c1xcXCIgZGF0YS1iaW5kPVxcXCJ2aXNpYmxlOmtvSGFzVmFsdWVTdXJ2ZXlcXFwiPlxcbiAgICAgICAgICAgICAgPHN1cnZleS13aWRnZXQgcGFyYW1zPVxcXCJzdXJ2ZXk6IGtvVmFsdWVTdXJ2ZXlcXFwiPjwvc3VydmV5LXdpZGdldD5cXG4gICAgICAgICAgPC9kaXY+XFxuICAgICAgPC9kaXY+XFxuICAgICAgPCEtLSBrbyBpZjogJHBhcmVudC5oYXNBY2VFZGl0b3IgLS0+XFxuICAgICAgPHNwYW4gZGF0YS1iaW5kPVxcXCJ0ZXh0OiRkYXRhLmdldExvY1N0cmluZygncGUuYWNlRWRpdG9ySGVscCcpXFxcIj48L3NwYW4+XFxuICAgICAgPGRpdiBpZD1cXFwiZXhwcmVzc2lvbi1hY2UtZWRpdG9yXFxcIiBzdHlsZT1cXFwiaGVpZ2h0OiAxNTBweDsgd2lkdGg6IDEwMCU7XFxcIiBkYXRhLWJpbmQ9XFxcInZhbHVlOmtvVmFsdWUsIGFjZUVkaXRvcjp7cXVlc3Rpb25zOiAkcGFyZW50LmF2YWlsYWJsZVF1ZXN0aW9ucywgcXVlc3Rpb246ICRkYXRhLmVkaXRpbmdPYmplY3QsIGVkaXRvcjogJHBhcmVudH1cXFwiPjwvZGl2PlxcbiAgICAgIDwhLS0gL2tvIC0tPlxcblxcbiAgICAgIDwhLS0ga28gaWY6ICEkcGFyZW50Lmhhc0FjZUVkaXRvciAtLT5cXG4gICAgICA8dGV4dGFyZWEgY2xhc3M9XFxcInN2ZC1kYXJrLWJvcmRlci1jb2xvclxcXCIgZGF0YS1iaW5kPVxcXCJ2YWx1ZTprb1RleHRWYWx1ZSwgZGlzYWJsZTogcmVhZE9ubHlcXFwiIHJvd3M9XFxcIjNcXFwiIGF1dG9mb2N1cz1cXFwiYXV0b2ZvY3VzXFxcIj48L3RleHRhcmVhPlxcbiAgICAgIDwhLS0gL2tvIC0tPlxcblxcbiAgICAgIDwhLS0gPGRpdiBjbGFzcz1cXFwiYXNzaXN0YW50XFxcIj5cXG4gICAgICAgICAgPGRpdiBjbGFzcz1cXFwiYXNzaXN0YW50LXRpdGxlXFxcIiBkYXRhLWJpbmQ9XFxcInRleHQ6JGRhdGEuZ2V0TG9jU3RyaW5nKCdwZS5hc3Npc3RhbnRUaXRsZScpXFxcIj48L2Rpdj5cXG4gICAgICAgICAgPGRpdiBjbGFzcz1cXFwiYXNzaXN0YW50LWNvbnRlbnRcXFwiIGRhdGEtYmluZD1cXFwiZm9yZWFjaDphdmFpbGFibGVRdWVzdGlvbnNcXFwiPlxcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwiYXNzaXN0YW50LWl0ZW1cXFwiIGRhdGEtYmluZD1cXFwiIHRleHQ6bmFtZSwgY2xpY2s6ZnVuY3Rpb24gKCkgeyAkcGFyZW50Lmluc2VydFF1ZXN0aW9uKCRkYXRhLCAkZWxlbWVudCk7IH0gXFxcIj48L2Rpdj5cXG4gICAgICAgICAgPC9kaXY+XFxuICAgICAgPC9kaXY+IC0tPlxcbiAgICAgIDwhLS0ga28gaWY6IHNob3dIZWxwVGV4dCAtLT5cXG4gICAgICA8c3BhbiBkYXRhLWJpbmQ9XFxcInRleHQ6JGRhdGEuZ2V0TG9jU3RyaW5nKCdwZS5jb25kaXRpb25IZWxwJylcXFwiIHN0eWxlPVxcXCJ3aGl0ZS1zcGFjZTpub3JtYWwgXFxcIj48L3NwYW4+XFxuICAgICAgPGRpdiBkYXRhLWJpbmQ9XFxcInZpc2libGU6ICRkYXRhLmhhc0xvY1N0cmluZygncGUuY29uZGl0aW9uU2hvd01vcmVVcmwnKVxcXCI+XFxuICAgICAgICAgIDxhIGRhdGEtYmluZD1cXFwiYXR0cjogeyBocmVmOiAkZGF0YS5nZXRMb2NTdHJpbmcoJ3BlLmNvbmRpdGlvblNob3dNb3JlVXJsJyl9LCB0ZXh0OiRkYXRhLmdldExvY1N0cmluZygncGUuc2hvd01vcmUnKVxcXCIgdGFyZ2V0PVxcXCJfYmxhbmtcXFwiPjwvYT5cXG4gICAgICA8L2Rpdj5cXG4gICAgICA8IS0tIC9rbyAtLT5cXG4gIDwvZGl2Plxcbjwvc2NyaXB0PlxcblwiO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vc3JjL3RlbXBsYXRlcy9wcm9wZXJ0eUVkaXRvcnMvcHJvcGVydHllZGl0b3ItY29uZGl0aW9uLmh0bWxcbi8vIG1vZHVsZSBpZCA9IDEwM1xuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJtb2R1bGUuZXhwb3J0cyA9IFwiPHNjcmlwdCB0eXBlPVxcXCJ0ZXh0L2h0bWxcXFwiIGlkPVxcXCJwcm9wZXJ0eWVkaXRvci1jdXN0b21cXFwiPlxcbiAgICA8IS0tIGtvIHRlbXBsYXRlOiB7IG5hbWU6IFxcXCJwcm9wZXJ0eWVkaXRvci1jdXN0b21jb250ZW50XFxcIiwgZGF0YTogJGRhdGEsIGFmdGVyUmVuZGVyOiAkZGF0YS5rb0FmdGVyUmVuZGVyIH0gLS0+PCEtLSAva28gLS0+XFxuPC9zY3JpcHQ+XFxuPHNjcmlwdCB0eXBlPVxcXCJ0ZXh0L2h0bWxcXFwiIGlkPVxcXCJwcm9wZXJ0eWVkaXRvci1jdXN0b21jb250ZW50XFxcIj48ZGl2PjwvZGl2Pjwvc2NyaXB0PlwiO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vc3JjL3RlbXBsYXRlcy9wcm9wZXJ0eUVkaXRvcnMvcHJvcGVydHllZGl0b3ItY3VzdG9tLmh0bWxcbi8vIG1vZHVsZSBpZCA9IDEwNFxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJtb2R1bGUuZXhwb3J0cyA9IFwiPHNjcmlwdCB0eXBlPVxcXCJ0ZXh0L2h0bWxcXFwiIGlkPVxcXCJwcm9wZXJ0eWVkaXRvci12YWx1ZVxcXCI+XFxuICAgIDwhLS0ga28gdGVtcGxhdGU6IHsgbmFtZTogJ3Byb3BlcnR5ZWRpdG9yLW1vZGFsJywgZGF0YTogJGRhdGEgfSAtLT5cXG4gICAgPCEtLSAva28gLS0+XFxuPC9zY3JpcHQ+XFxuXFxuPHNjcmlwdCB0eXBlPVxcXCJ0ZXh0L2h0bWxcXFwiIGlkPVxcXCJwcm9wZXJ0eWVkaXRvcmNvbnRlbnQtdmFsdWVcXFwiPlxcbiAgICA8Zm9ybT5cXG4gICAgICAgIDxkaXYgY2xhc3M9XFxcInN2ZF93cmFwX2VsZW1lbnRzXFxcIj5cXG4gICAgICAgICAgICA8c3VydmV5LXdpZGdldCBwYXJhbXM9XFxcInN1cnZleToga29TdXJ2ZXlcXFwiPjwvc3VydmV5LXdpZGdldD5cXG4gICAgICAgIDwvZGl2PlxcbiAgICA8L2Zvcm0+XFxuICAgIDxidXR0b24gdHlwZT1cXFwiYnV0dG9uXFxcIiBjbGFzcz1cXFwiYnRuIGJ0bi1zbSBidG4tZGFuZ2VyXFxcIiBkYXRhLWJpbmQ9XFxcImNsaWNrOiByZXNldFZhbHVlLCB0ZXh0OiByZXNldFRleHQoKVxcXCI+PC9idXR0b24+XFxuPC9zY3JpcHQ+XCI7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9zcmMvdGVtcGxhdGVzL3Byb3BlcnR5RWRpdG9ycy9wcm9wZXJ0eWVkaXRvci1kZWZhdWx0dmFsdWUuaHRtbFxuLy8gbW9kdWxlIGlkID0gMTA1XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIm1vZHVsZS5leHBvcnRzID0gXCI8c2NyaXB0IHR5cGU9XFxcInRleHQvaHRtbFxcXCIgaWQ9XFxcInByb3BlcnR5ZWRpdG9yLWRyb3Bkb3duXFxcIj5cXG4gIDxkaXYgY2xhc3M9XFxcInN2ZF9jdXN0b21fc2VsZWN0IHN2ZF9wcm9wZXJ0eV9lZGl0b3JfZHJvcGRvd25cXFwiPlxcbiAgICAgIDxzZWxlY3Qgb25tb3VzZXdoZWVsPVxcXCJyZXR1cm4gZmFsc2U7XFxcIiBjbGFzcz1cXFwiZm9ybS1jb250cm9sIHN2ZF9lZGl0b3JfY29udHJvbFxcXCIgZGF0YS1iaW5kPVxcXCJ2YWx1ZToga29WYWx1ZSwgZGlzYWJsZTogcmVhZE9ubHksIG9wdGlvbnM6IGtvQ2hvaWNlcywgIG9wdGlvbnNWYWx1ZTogJ3ZhbHVlJywgIG9wdGlvbnNUZXh0OiAndGV4dCcsIHZhbHVlQWxsb3dVbnNldDogdHJ1ZSwgIGhhc0ZvY3VzOiBrb0hhc0ZvY3VzXFxcIiAgc3R5bGU9XFxcIndpZHRoOjEwMCVcXFwiPjwvc2VsZWN0PlxcbiAgPC9kaXY+XFxuPC9zY3JpcHQ+XFxuXCI7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9zcmMvdGVtcGxhdGVzL3Byb3BlcnR5RWRpdG9ycy9wcm9wZXJ0eWVkaXRvci1kcm9wZG93bi5odG1sXG4vLyBtb2R1bGUgaWQgPSAxMDZcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwibW9kdWxlLmV4cG9ydHMgPSBcIjxzY3JpcHQgdHlwZT1cXFwidGV4dC9odG1sXFxcIiBpZD1cXFwicHJvcGVydHllZGl0b3ItZXJyb3JcXFwiPlxcbiAgICA8ZGl2IGNsYXNzPVxcXCJhbGVydCBhbGVydC1kYW5nZXJcXFwiIHJvbGU9XFxcImFsZXJ0XFxcIiBkYXRhLWJpbmQ9XFxcInZpc2libGU6a29EaXNwbGF5RXJyb3JcXFwiPlxcbiAgICAgICAgPHNwYW4gY2xhc3M9XFxcImdseXBoaWNvbiBnbHlwaGljb24tZXhjbGFtYXRpb24tc2lnblxcXCIgYXJpYS1oaWRkZW49XFxcInRydWVcXFwiPjwvc3Bhbj5cXG4gICAgICAgIDxzcGFuIGNsYXNzPVxcXCJzci1vbmx5XFxcIj5FcnJvcjo8L3NwYW4+XFxuICAgICAgICA8c3BhbiBkYXRhLWJpbmQ9XFxcInRleHQ6a29FcnJvclRleHRcXFwiPjwvc3Bhbj5cXG4gICAgPC9kaXY+XFxuPC9zY3JpcHQ+XCI7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9zcmMvdGVtcGxhdGVzL3Byb3BlcnR5RWRpdG9ycy9wcm9wZXJ0eWVkaXRvci1lcnJvci5odG1sXG4vLyBtb2R1bGUgaWQgPSAxMDdcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwibW9kdWxlLmV4cG9ydHMgPSBcIjxzY3JpcHQgdHlwZT1cXFwidGV4dC9odG1sXFxcIiBpZD1cXFwicHJvcGVydHllZGl0b3ItZXhwcmVzc2lvblxcXCI+XFxuICA8IS0tIGtvIHRlbXBsYXRlOiB7IG5hbWU6ICdwcm9wZXJ0eWVkaXRvci1tb2RhbCcsIGRhdGE6ICRkYXRhIH0gLS0+XFxuICA8IS0tIC9rbyAtLT5cXG48L3NjcmlwdD5cXG5cXG48c2NyaXB0IHR5cGU9XFxcInRleHQvaHRtbFxcXCIgaWQ9XFxcInByb3BlcnR5ZWRpdG9yY29udGVudC1leHByZXNzaW9uXFxcIj5cXG4gIDxkaXYgY2xhc3M9XFxcInByb3BlcnR5ZWRpdG9yLWV4cHJlc3Npb25cXFwiPlxcbiAgICAgIDwhLS0ga28gaWY6ICRwYXJlbnQuaGFzQWNlRWRpdG9yIC0tPlxcbiAgICAgIDxzcGFuIGRhdGEtYmluZD1cXFwidGV4dDokcm9vdC5nZXRMb2NTdHJpbmcoJ3BlLmFjZUVkaXRvckhlbHAnKVxcXCI+PC9zcGFuPlxcbiAgICAgIDxkaXYgaWQ9XFxcImV4cHJlc3Npb24tYWNlLWVkaXRvclxcXCIgc3R5bGU9XFxcImhlaWdodDogMTUwcHg7IHdpZHRoOiAxMDAlO1xcXCIgZGF0YS1iaW5kPVxcXCJ2YWx1ZTprb1ZhbHVlLCBhY2VFZGl0b3I6IHtxdWVzdGlvbnM6ICRwYXJlbnQuYXZhaWxhYmxlUXVlc3Rpb25zLCBxdWVzdGlvbjogJGRhdGEuZWRpdGluZ09iamVjdCwgZWRpdG9yOiAkcGFyZW50fVxcXCI+PC9kaXY+XFxuICAgICAgPCEtLSAva28gLS0+XFxuXFxuICAgICAgPCEtLSBrbyBpZjogISRwYXJlbnQuaGFzQWNlRWRpdG9yIC0tPlxcbiAgICAgIDx0ZXh0YXJlYSBjbGFzcz1cXFwic3ZkLWRhcmstYm9yZGVyLWNvbG9yXFxcIiBkYXRhLWJpbmQ9XFxcInZhbHVlOmtvVGV4dFZhbHVlXFxcIiByb3dzPVxcXCIzXFxcIiBhdXRvZm9jdXM9XFxcImF1dG9mb2N1c1xcXCI+PC90ZXh0YXJlYT5cXG4gICAgICA8IS0tIC9rbyAtLT5cXG4gICAgICA8IS0tIDxkaXYgY2xhc3M9XFxcImFzc2lzdGFudFxcXCI+XFxuICAgICAgICAgIDxkaXYgY2xhc3M9XFxcImFzc2lzdGFudC10aXRsZVxcXCIgZGF0YS1iaW5kPVxcXCJ0ZXh0OiRyb290LmdldExvY1N0cmluZygncGUuYXNzaXN0YW50VGl0bGUnKVxcXCI+PC9kaXY+XFxuICAgICAgICAgIDxkaXYgY2xhc3M9XFxcImFzc2lzdGFudC1jb250ZW50XFxcIiBkYXRhLWJpbmQ9XFxcImZvcmVhY2g6YXZhaWxhYmxlUXVlc3Rpb25zXFxcIj5cXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcImFzc2lzdGFudC1pdGVtXFxcIiBkYXRhLWJpbmQ9XFxcInRleHQ6bmFtZSwgY2xpY2s6ZnVuY3Rpb24gKCkgeyAkcGFyZW50Lmluc2VydFF1ZXN0aW9uKCRkYXRhLCAkZWxlbWVudCk7IH0gXFxcIj48L2Rpdj5cXG4gICAgICAgICAgPC9kaXY+XFxuICAgICAgPC9kaXY+IC0tPlxcbiAgICAgIDwhLS0ga28gaWY6IHNob3dIZWxwVGV4dCAtLT5cXG4gICAgICAgICAgPHNwYW4gZGF0YS1iaW5kPVxcXCJ0ZXh0OiRyb290LmdldExvY1N0cmluZygncGUuZXhwcmVzc2lvbkhlbHAnKVxcXCIgc3R5bGU9XFxcIndoaXRlLXNwYWNlOm5vcm1hbFxcXCI+PC9zcGFuPlxcbiAgICAgICAgICA8IS0tIDxkaXY+XFxuICAgICAgICAgICAgICA8YSBkYXRhLWJpbmQ9XFxcInRleHQ6JHJvb3QuZ2V0TG9jU3RyaW5nKCdwZS5zaG93TW9yZScpXFxcIiB0YXJnZXQ9XFxcIl9ibGFua1xcXCIgaHJlZj1cXFwiaHR0cHM6Ly9zdXJ2ZXlqcy5pby9Eb2N1bWVudGF0aW9uL0xpYnJhcnlQYXJhbWV0ZXI/aWQ9UXVlc3Rpb24mcGFyYW1ldGVyPXZpc2libGVJZlxcXCI+PC9hPlxcbiAgICAgICAgICA8L2Rpdj4gLS0+XFxuICAgICAgPCEtLSAva28gLS0+XFxuICA8L2Rpdj5cXG48L3NjcmlwdD5cXG5cIjtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL3NyYy90ZW1wbGF0ZXMvcHJvcGVydHlFZGl0b3JzL3Byb3BlcnR5ZWRpdG9yLWV4cHJlc3Npb24uaHRtbFxuLy8gbW9kdWxlIGlkID0gMTA4XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIm1vZHVsZS5leHBvcnRzID0gXCI8c2NyaXB0IHR5cGU9XFxcInRleHQvaHRtbFxcXCIgaWQ9XFxcInByb3BlcnR5ZWRpdG9yLWh0bWxcXFwiPlxcbiAgPCEtLSBrbyB0ZW1wbGF0ZTogeyBuYW1lOiAncHJvcGVydHllZGl0b3ItbW9kYWwnLCBkYXRhOiAkZGF0YSB9IC0tPjwhLS0gL2tvIC0tPlxcbjwvc2NyaXB0PlxcblxcbjxzY3JpcHQgdHlwZT1cXFwidGV4dC9odG1sXFxcIiBpZD1cXFwicHJvcGVydHllZGl0b3Jjb250ZW50LWh0bWxcXFwiPlxcbiAgPHRleHRhcmVhIGNsYXNzPVxcXCJmb3JtLWNvbnRyb2xcXFwiIGRhdGEtYmluZD1cXFwidmFsdWU6a29WYWx1ZSwgZGlzYWJsZTogcmVhZE9ubHlcXFwiIHN0eWxlPVxcXCJ3aWR0aDoxMDAlO2hlaWdodDphdXRvXFxcIiByb3dzPVxcXCIxMFxcXCIgYXV0b2ZvY3VzPVxcXCJhdXRvZm9jdXNcXFwiPjwvdGV4dGFyZWE+XFxuPC9zY3JpcHQ+XFxuXCI7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9zcmMvdGVtcGxhdGVzL3Byb3BlcnR5RWRpdG9ycy9wcm9wZXJ0eWVkaXRvci1odG1sLmh0bWxcbi8vIG1vZHVsZSBpZCA9IDEwOVxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJtb2R1bGUuZXhwb3J0cyA9IFwiPHNjcmlwdCB0eXBlPVxcXCJ0ZXh0L2h0bWxcXFwiIGlkPVxcXCJwcm9wZXJ0eWVkaXRvci1pdGVtdmFsdWVzXFxcIj5cXG4gICAgPCEtLSBrbyB0ZW1wbGF0ZTogeyBuYW1lOiAncHJvcGVydHllZGl0b3ItbW9kYWwnIH0gLS0+XFxuICAgIDwhLS0gL2tvIC0tPlxcbjwvc2NyaXB0PlxcbjxzY3JpcHQgdHlwZT1cXFwidGV4dC9odG1sXFxcIiBpZD1cXFwicHJvcGVydHllZGl0b3Jjb250ZW50LWl0ZW12YWx1ZXNcXFwiPlxcbiAgICA8ZGl2IHN0eWxlPVxcXCJtYXJnaW4tYm90dG9tOjNweFxcXCIgZGF0YS1iaW5kPVxcXCJ2aXNpYmxlOiBrb0lzTGlzdCgpICYmIGtvU2hvd1RleHRWaWV3KClcXFwiPlxcbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cXFwiYnRuIGJ0bi1zbSBidG4teHNcXFwiIGRhdGEtYmluZD1cXFwiY3NzOiB7J2J0bi1wcmltYXJ5Jzoga29BY3RpdmVWaWV3KCkgPT09ICdmb3JtJywgJ2J0bi1saW5rJzoga29BY3RpdmVWaWV3KCkgIT09ICdmb3JtJ30sIGNsaWNrOmNoYW5nZVRvRm9ybVZpZXdDbGljaywgdGV4dDogJHJvb3QuZ2V0TG9jU3RyaW5nKCdwZS5mb3JtRW50cnknKVxcXCI+PC9idXR0b24+XFxuICAgICAgICA8YnV0dG9uIGNsYXNzPVxcXCJidG4gYnRuLXNtIGJ0bi14c1xcXCIgZGF0YS1iaW5kPVxcXCJjc3M6IHsnYnRuLXByaW1hcnknOiBrb0FjdGl2ZVZpZXcoKSAhPT0gJ2Zvcm0nLCAnYnRuLWxpbmsnOiBrb0FjdGl2ZVZpZXcoKSA9PT0gJ2Zvcm0nfSwgY2xpY2s6Y2hhbmdlVG9UZXh0Vmlld0NsaWNrLCB0ZXh0OiAkcm9vdC5nZXRMb2NTdHJpbmcoJ3BlLmZhc3RFbnRyeScpXFxcIj48L2J1dHRvbj5cXG4gICAgPC9kaXY+XFxuICAgIDxkaXYgZGF0YS1iaW5kPVxcXCJ2aXNpYmxlOiBrb0FjdGl2ZVZpZXcoKSA9PSAnZm9ybSdcXFwiPlxcbiAgICAgICAgPCEtLSBrbyB0ZW1wbGF0ZTogeyBuYW1lOiAncHJvcGVydHllZGl0b3Jjb250ZW50LW5lc3RlZGl0ZW1zJywgZGF0YTogJGRhdGEgfSAtLT5cXG4gICAgICAgIDwhLS0gL2tvIC0tPlxcbiAgICA8L2Rpdj5cXG4gICAgPGRpdiBkYXRhLWJpbmQ9XFxcInZpc2libGU6a29Jc0xpc3QoKSAmJiBrb0FjdGl2ZVZpZXcoKSAhPSAnZm9ybSdcXFwiPlxcbiAgICAgICAgPHRleHRhcmVhIGNsYXNzPVxcXCJmb3JtLWNvbnRyb2xcXFwiIGRhdGEtYmluZD1cXFwidGV4dElucHV0OiBrb0l0ZW1zVGV4dFxcXCIgc3R5bGU9XFxcIm92ZXJmbG93LXk6IGF1dG87IG92ZXJmbG93LXg6aGlkZGVuOyBtYXgtaGVpZ2h0OjQwMHB4OyBtaW4taGVpZ2h0OjI1MHB4OyB3aWR0aDoxMDAlXFxcIj48L3RleHRhcmVhPlxcbiAgICA8L2Rpdj5cXG48L3NjcmlwdD5cIjtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL3NyYy90ZW1wbGF0ZXMvcHJvcGVydHlFZGl0b3JzL3Byb3BlcnR5ZWRpdG9yLWl0ZW12YWx1ZXMuaHRtbFxuLy8gbW9kdWxlIGlkID0gMTEwXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIm1vZHVsZS5leHBvcnRzID0gXCI8c2NyaXB0IHR5cGU9XFxcInRleHQvaHRtbFxcXCIgaWQ9XFxcInByb3BlcnR5ZWRpdG9yLW1hdHJpeGRyb3Bkb3duY29sdW1uc1xcXCI+XFxuICAgIDwhLS0ga28gdGVtcGxhdGU6IHsgbmFtZTogJ3Byb3BlcnR5ZWRpdG9yLW1vZGFsJywgZGF0YTogJGRhdGEgfSAtLT5cXG4gICAgPCEtLSAva28gLS0+XFxuPC9zY3JpcHQ+XFxuPHNjcmlwdCB0eXBlPVxcXCJ0ZXh0L2h0bWxcXFwiIGlkPVxcXCJwcm9wZXJ0eWVkaXRvcmNvbnRlbnQtbWF0cml4ZHJvcGRvd25jb2x1bW5zXFxcIj5cXG4gICAgPCEtLSBrbyB0ZW1wbGF0ZTogeyBuYW1lOiAncHJvcGVydHllZGl0b3Jjb250ZW50LW5lc3RlZGl0ZW1zJywgZGF0YTogJGRhdGEgfSAtLT5cXG4gICAgPCEtLSAva28gLS0+XFxuPC9zY3JpcHQ+XCI7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9zcmMvdGVtcGxhdGVzL3Byb3BlcnR5RWRpdG9ycy9wcm9wZXJ0eWVkaXRvci1tYXRyaXhkcm9wZG93bmNvbHVtbnMuaHRtbFxuLy8gbW9kdWxlIGlkID0gMTExXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIm1vZHVsZS5leHBvcnRzID0gXCI8c2NyaXB0IHR5cGU9XFxcInRleHQvaHRtbFxcXCIgaWQ9XFxcInByb3BlcnR5ZWRpdG9yLW1vZGFsXFxcIj5cXG4gIDxkaXYgY2xhc3M9XFxcImlucHV0LWdyb3VwIGZvcm0tZ3JvdXBcXFwiIGRhdGEtYmluZD1cXFwidmlzaWJsZTohJGRhdGEuaXNFZGl0YWJsZVxcXCI+XFxuICAgICAgPGEgdGFiaW5kZXg9XFxcIjBcXFwiIGNsYXNzPVxcXCJmb3JtLWNvbnRyb2xcXFwiIGRhdGEtYmluZD1cXFwia2V5MmNsaWNrLCBjbGljazogJGRhdGEub25TaG93TW9kYWwsIGF0dHI6IHsnZGF0YS10YXJnZXQnIDogbW9kYWxOYW1lVGFyZ2V0fVxcXCI+XFxuICAgICAgICAgIDxzcGFuIGRhdGEtYmluZD1cXFwidGV4dDoga29UZXh0XFxcIj48L3NwYW4+XFxuICAgICAgPC9hPlxcbiAgICAgIDxkaXYgY2xhc3M9XFxcImlucHV0LWdyb3VwLWFkZG9uXFxcIj5cXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XFxcImdseXBoaWNvbiBnbHlwaGljb24tZWRpdFxcXCIgYXJpYS1oaWRkZW49XFxcInRydWVcXFwiIGRhdGEtYmluZD1cXFwiY2xpY2s6ICRkYXRhLm9uU2hvd01vZGFsLCBhdHRyOiB7J2RhdGEtdGFyZ2V0JyA6IG1vZGFsTmFtZVRhcmdldH0sIHRleHQ6ICRyb290LmdldExvY1N0cmluZygncGUuZWRpdCcpXFxcIj48L3NwYW4+XFxuICAgICAgPC9kaXY+XFxuICA8L2Rpdj5cXG4gIDxkaXYgY2xhc3M9XFxcImlucHV0LWdyb3VwIGZvcm0tZ3JvdXBcXFwiIGRhdGEtYmluZD1cXFwidmlzaWJsZTokZGF0YS5pc0VkaXRhYmxlXFxcIj5cXG4gICAgICA8aW5wdXQgY2xhc3M9XFxcImZvcm0tY29udHJvbCBzdmRfZWRpdG9yX2NvbnRyb2xcXFwiIHR5cGU9XFxcInRleHRcXFwiIGRhdGEtYmluZD1cXFwidmFsdWU6IGtvVmFsdWUsIGRpc2FibGU6IHJlYWRPbmx5XFxcIiAvPlxcbiAgICAgIDxkaXYgY2xhc3M9XFxcImlucHV0LWdyb3VwLWFkZG9uXFxcIj5cXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XFxcImdseXBoaWNvbiBnbHlwaGljb24tZWRpdFxcXCIgYXJpYS1oaWRkZW49XFxcInRydWVcXFwiIGRhdGEtYmluZD1cXFwiY2xpY2s6ICRkYXRhLm9uU2hvd01vZGFsLCBhdHRyOiB7J2RhdGEtdGFyZ2V0JyA6IG1vZGFsTmFtZVRhcmdldH0sIHRleHQ6ICRyb290LmdldExvY1N0cmluZygncGUuZWRpdCcpXFxcIj48L3NwYW4+XFxuICAgICAgPC9kaXY+XFxuICA8L2Rpdj5cXG5cXG4gIDxkaXYgZGF0YS1iaW5kPVxcXCJhdHRyOiB7aWQgOiBtb2RhbE5hbWV9XFxcIiBjbGFzcz1cXFwibW9kYWxcXFwiIHJvbGU9XFxcImRpYWxvZ1xcXCI+XFxuICAgICAgPGRpdiBjbGFzcz1cXFwibW9kYWwtZGlhbG9nXFxcIj5cXG4gICAgICAgICAgPGRpdiBjbGFzcz1cXFwibW9kYWwtY29udGVudFxcXCI+XFxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtb2RhbC1oZWFkZXJcXFwiPlxcbiAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cXFwiYnV0dG9uXFxcIiBjbGFzcz1cXFwiY2xvc2VcXFwiIGRhdGEtYmluZD1cXFwiY2xpY2s6IG9uUmVzZXRDbGlja1xcXCI+JnRpbWVzOzwvYnV0dG9uPlxcbiAgICAgICAgICAgICAgICAgIDxoNCBjbGFzcz1cXFwibW9kYWwtdGl0bGVcXFwiIGRhdGEtYmluZD1cXFwidGV4dDokZGF0YS5rb1RpdGxlQ2FwdGlvblxcXCI+PC9oND5cXG4gICAgICAgICAgICAgIDwvZGl2PlxcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibW9kYWwtYm9keSBzdmRfbm90b3Bib3R0b21wYWRkaW5nc1xcXCI+XFxuICAgICAgICAgICAgICAgICAgPCEtLSBrbyB0ZW1wbGF0ZToge25hbWU6ICdwcm9wZXJ0eWVkaXRvci1lcnJvcicsIGRhdGE6ICRkYXRhfSAtLT5cXG4gICAgICAgICAgICAgICAgICA8IS0tIC9rbyAtLT5cXG4gICAgICAgICAgICAgICAgICA8IS0tIGtvIHRlbXBsYXRlOiB7IG5hbWU6ICdwcm9wZXJ0eWVkaXRvci1tb2RhbGNvbnRlbnQnLCBkYXRhOiAkZGF0YSB9IC0tPlxcbiAgICAgICAgICAgICAgICAgIDwhLS0gL2tvIC0tPlxcbiAgICAgICAgICAgICAgPC9kaXY+XFxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtb2RhbC1mb290ZXJcXFwiPlxcbiAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVxcXCJidXR0b25cXFwiIGNsYXNzPVxcXCJidG4gYnRuLXByaW1hcnlcXFwiIGRhdGEtYmluZD1cXFwidmlzaWJsZTogJGRhdGEua29TaG93QXBwbHlCdXR0b24sIGRpc2FibGU6IHJlYWRPbmx5LCBjbGljazogJGRhdGEub25BcHBseUNsaWNrLCB2YWx1ZTogJHJvb3QuZ2V0TG9jU3RyaW5nKCdwZS5hcHBseScpXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cXFwid2lkdGg6MTAwcHhcXFwiIC8+XFxuICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XFxcImJ1dHRvblxcXCIgY2xhc3M9XFxcImJ0biBidG4tZGVmYXVsdCBidG4tc2Vjb25kYXJ5XFxcIiBkYXRhLWJpbmQ9XFxcImNsaWNrOiAkZGF0YS5vbk9rQ2xpY2ssIGRpc2FibGU6IHJlYWRPbmx5LCB2YWx1ZTogJHJvb3QuZ2V0TG9jU3RyaW5nKCdwZS5vaycpXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cXFwid2lkdGg6MTAwcHhcXFwiIC8+XFxuICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XFxcImJ1dHRvblxcXCIgY2xhc3M9XFxcImJ0biBidG4tcHJpbWFyeVxcXCIgZGF0YS1iaW5kPVxcXCJjbGljazogJGRhdGEub25SZXNldENsaWNrLCB2YWx1ZTogJHJvb3QuZ2V0TG9jU3RyaW5nKCdwZS5jYW5jZWwnKVxcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XFxcIndpZHRoOjEwMHB4XFxcIiAvPlxcbiAgICAgICAgICAgICAgPC9kaXY+XFxuICAgICAgICAgIDwvZGl2PlxcbiAgICAgIDwvZGl2PlxcbiAgPC9kaXY+XFxuPC9zY3JpcHQ+XFxuXCI7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9zcmMvdGVtcGxhdGVzL3Byb3BlcnR5RWRpdG9ycy9wcm9wZXJ0eWVkaXRvci1tb2RhbC5odG1sXG4vLyBtb2R1bGUgaWQgPSAxMTJcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwibW9kdWxlLmV4cG9ydHMgPSBcIjxzY3JpcHQgdHlwZT1cXFwidGV4dC9odG1sXFxcIiBpZD1cXFwicHJvcGVydHllZGl0b3ItbW9kYWxjb250ZW50XFxcIj5cXG4gICAgPGRpdiBkYXRhLWJpbmQ9XFxcImh0bWw6ICRkYXRhLmtvSHRtbFRvcFxcXCI+PC9kaXY+XFxuICAgIDwhLS0ga28gdGVtcGxhdGU6IHsgbmFtZTogJ3Byb3BlcnR5ZWRpdG9yY29udGVudC0nICsgZWRpdG9yVHlwZVRlbXBsYXRlLCBkYXRhOiAkZGF0YSwgYWZ0ZXJSZW5kZXI6ICRkYXRhLmtvQWZ0ZXJSZW5kZXIgfSAtLT5cXG4gICAgPCEtLSAva28gLS0+XFxuICAgIDxkaXYgZGF0YS1iaW5kPVxcXCJodG1sOiAkZGF0YS5rb0h0bWxCb3R0b21cXFwiPjwvZGl2Plxcbjwvc2NyaXB0PlwiO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vc3JjL3RlbXBsYXRlcy9wcm9wZXJ0eUVkaXRvcnMvcHJvcGVydHllZGl0b3ItbW9kYWxjb250ZW50Lmh0bWxcbi8vIG1vZHVsZSBpZCA9IDExM1xuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJtb2R1bGUuZXhwb3J0cyA9IFwiPHNjcmlwdCB0eXBlPVxcXCJ0ZXh0L2h0bWxcXFwiIGlkPVxcXCJwcm9wZXJ0eWVkaXRvci1tdWx0aXBsZXZhbHVlc1xcXCI+XFxuICA8IS0tIGtvIHRlbXBsYXRlOiB7IG5hbWU6ICdwcm9wZXJ0eWVkaXRvci1tb2RhbCcsIGRhdGE6ICRkYXRhIH0gLS0+XFxuICA8IS0tIC9rbyAtLT5cXG48L3NjcmlwdD5cXG48c2NyaXB0XFxuICB0eXBlPVxcXCJ0ZXh0L2h0bWxcXFwiXFxuICBjbGFzcz1cXFwiYnRuLXhzXFxcIlxcbiAgaWQ9XFxcInByb3BlcnR5ZWRpdG9yY29udGVudC1tdWx0aXBsZXZhbHVlc1xcXCJcXG4+XFxuICA8ZGl2IHN0eWxlPVxcXCJ3aGl0ZS1zcGFjZTogbm9ybWFsXFxcIj5cXG4gICAgICA8IS0tIGtvIGZvcmVhY2g6IHsgZGF0YToga29DYXRlZ29yaWVzLCBhczogJ2NhdCd9ICAtLT5cXG4gICAgICA8ZGl2IGNsYXNzPVxcXCJzdmQtbG9naWMtaXRlbS1oZWFkZXJcXFwiIGRhdGEtYmluZD1cXFwidmlzaWJsZTogY2F0LmtvVGl0bGVWaXNpYmxlXFxcIj48c3BhbiBkYXRhLWJpbmQ9XFxcInRleHQ6IGNhdC5rb0NhdGVnb3J5KClcXFwiPjwvc3Bhbj48L2Rpdj5cXG4gICAgICA8IS0tIGtvIGZvcmVhY2g6IHsgZGF0YTogY2F0LmtvSXRlbXMsIGFzOiAnaXRlbSd9ICAtLT5cXG4gICAgICA8ZGl2IGNsYXNzPVxcXCJzanMtY2Itd3JhcHBlclxcXCIgc3R5bGU9XFxcImRpc3BsYXk6IGlubGluZS1ibG9jaztcXFwiPlxcbiAgICAgICAgICA8bGFiZWw+XFxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJzanMtY2ItY29udGFpbmVyXFxcIj5cXG4gICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cXFwiY2hlY2tib3hcXFwiIGRhdGEtYmluZD1cXFwiYXR0cjoge3ZhbHVlOiBpdGVtLnZhbHVlfSwgY2hlY2tlZDogY2F0LmVkaXRvci5rb0VkaXRpbmdWYWx1ZVxcXCIgLz5cXG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cXFwiY2hlY2ttYXJrXFxcIiBkYXRhLWJpbmQ9XFxcImNzczogY2F0LmVkaXRvci5nZXRCYWNrZ3JvdW5kQ2xzKGl0ZW0udmFsdWUpXFxcIj5cXG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XFxcImNoZWNrXFxcIj48L3NwYW4+XFxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxcbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVxcXCJzanMtY2ItbGFiZWxcXFwiIHN0eWxlPVxcXCJwb3NpdGlvbjogc3RhdGljO1xcXCIgZGF0YS1iaW5kPVxcXCJ0ZXh0OiBpdGVtLnRleHRcXFwiPjwvc3Bhbj5cXG4gICAgICAgICAgICAgIDwvZGl2PlxcbiAgICAgICAgICA8L2xhYmVsPlxcbiAgICAgIDwvZGl2PlxcbiAgICAgIDwhLS0gL2tvIC0tPlxcbiAgICAgIDwhLS0gL2tvIC0tPlxcbiAgPC9kaXY+XFxuPC9zY3JpcHQ+XFxuXCI7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9zcmMvdGVtcGxhdGVzL3Byb3BlcnR5RWRpdG9ycy9wcm9wZXJ0eWVkaXRvci1tdWx0aXBsZXZhbHVlcy5odG1sXG4vLyBtb2R1bGUgaWQgPSAxMTRcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwibW9kdWxlLmV4cG9ydHMgPSBcIjxzY3JpcHQgdHlwZT1cXFwidGV4dC9odG1sXFxcIiBpZD1cXFwicHJvcGVydHllZGl0b3Jjb250ZW50LW5lc3RlZFxcXCI+XFxuICAgIDxkaXYgc3R5bGU9XFxcInBhZGRpbmctbGVmdDogMTBweDtcXFwiPlxcbiAgICAgICAgPGJ1dHRvbiB0eXBlPVxcXCJidXR0b25cXFwiIGNsYXNzPVxcXCJidG4gYnRuLXNtIGJ0bi1zZWNvbmRhcnlcXFwiIGRhdGEtYmluZD1cXFwiY2xpY2s6IG9uQ2FuY2VsRWRpdEl0ZW1DbGlja1xcXCI+XFxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XFxcImdseXBoaWNvbiBnbHlwaGljb24tbGlzdC1hbHRcXFwiPjwvc3Bhbj5cXG4gICAgICAgIDwvYnV0dG9uPlxcbiAgICAgICAgPHNwYW4gZGF0YS1iaW5kPVxcXCJ0ZXh0OiBrb0VkaXRvck5hbWVcXFwiPjwvc3Bhbj5cXG4gICAgICA8IS0tIGtvIHRlbXBsYXRlOiB7IG5hbWU6IFxcXCJxdWVzdGlvbmVkaXRvci1jb250ZW50XFxcIiwgZGF0YToga29FZGl0SXRlbSgpLml0ZW1FZGl0b3IgfSAtLT5cXG4gICAgICA8IS0tIC9rbyAtLT5cXG4gIDwvZGl2Plxcbjwvc2NyaXB0PlxcblwiO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vc3JjL3RlbXBsYXRlcy9wcm9wZXJ0eUVkaXRvcnMvcHJvcGVydHllZGl0b3ItbmVzdGVkLmh0bWxcbi8vIG1vZHVsZSBpZCA9IDExNVxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJtb2R1bGUuZXhwb3J0cyA9IFwiPHNjcmlwdCB0eXBlPVxcXCJ0ZXh0L2h0bWxcXFwiIGlkPVxcXCJwcm9wZXJ0eWVkaXRvcmNvbnRlbnQtbmVzdGVkaXRlbXNcXFwiPlxcbiAgPGRpdiBkYXRhLWJpbmQ9XFxcInZpc2libGU6IGtvSXNMaXN0XFxcIiAgc3R5bGU9XFxcIm92ZXJmbG93LXk6IGF1dG87IG92ZXJmbG93LXg6aGlkZGVuOyBtYXgtaGVpZ2h0OjQwMHB4O21pbi1oZWlnaHQ6MjAwcHhcXFwiPlxcbiAgICAgIDx0YWJsZSBjbGFzcz1cXFwic3ZkX2l0ZW1zX3RhYmxlXFxcIj5cXG4gICAgICAgICAgPHRoZWFkPlxcbiAgICAgICAgICAgICAgPHRyPlxcbiAgICAgICAgICAgICAgICAgIDx0aD48L3RoPlxcbiAgICAgICAgICAgICAgICAgIDwhLS0ga28gZm9yZWFjaDogY29sdW1ucyAtLT5cXG4gICAgICAgICAgICAgICAgICA8dGggZGF0YS1iaW5kPVxcXCJ0ZXh0OiB0ZXh0XFxcIj48L3RoPlxcbiAgICAgICAgICAgICAgICAgIDwhLS0gL2tvIC0tPlxcbiAgICAgICAgICAgICAgICAgIDx0aD48L3RoPlxcbiAgICAgICAgICAgICAgPC90cj5cXG4gICAgICAgICAgPC90aGVhZD5cXG4gICAgICAgICAgPHRib2R5IGRhdGEtYmluZD1cXFwic29ydGFibGU6IHsgZm9yZWFjaDoga29JdGVtcywgb3B0aW9uczogeyBoYW5kbGU6ICcuc3ZkLWRyYWctaGFuZGxlJywgYW5pbWF0aW9uOiAxNTAgfSB9XFxcIj5cXG4gICAgICAgICAgICAgIDx0cj5cXG4gICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XFxcInN2ZC1pdGVtdmFsdWUtYWN0aW9ucy1jb250YWluZXJcXFwiPlxcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJzdmQtZHJhZy1oYW5kbGUgc3ZkLWl0ZW12YWx1ZS1hY3Rpb25cXFwiPlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAg4piwXFxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxcbiAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XFxcImJ1dHRvblxcXCIgY2xhc3M9XFxcImJ0biBidG4tZGVmYXVsdCBidG4tc2Vjb25kYXJ5IHN2ZC10ZXh0aXRlbXMtZWRpdCBzdmQtaXRlbXZhbHVlLWFjdGlvblxcXCIgZGF0YS1iaW5kPVxcXCJ2aXNpYmxlOiAkZGF0YS5rb0hhc0RldGFpbHMsIGNsaWNrOiAkcGFyZW50Lm9uRWRpdEl0ZW1DbGlja1xcXCI+XFxuICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cXFwiZ2x5cGhpY29uIGdseXBoaWNvbi1lZGl0XFxcIiBkYXRhLWJpbmQ9XFxcInRleHQ6ICRyb290LmdldExvY1N0cmluZygncGUuZWRpdCcpXFxcIj48L3NwYW4+XFxuICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxcbiAgICAgICAgICAgICAgICAgIDwvdGQ+XFxuICAgICAgICAgICAgICAgICAgPCEtLSBrbyBmb3JlYWNoOiBjZWxscyAtLT5cXG4gICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XFxcImZvcm0tZ3JvdXBcXFwiPlxcbiAgICAgICAgICAgICAgICAgICAgICA8IS0tIGtvIHRlbXBsYXRlOiB7IG5hbWU6ICdwcm9wZXJ0eWVkaXRvcicsIGRhdGE6IG9iamVjdFByb3BlcnR5LmVkaXRvciB9IC0tPlxcbiAgICAgICAgICAgICAgICAgICAgICA8IS0tIC9rbyAtLT5cXG4gICAgICAgICAgICAgICAgICA8L3RkPlxcbiAgICAgICAgICAgICAgICAgIDwhLS0gL2tvIC0tPlxcbiAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cXFwic3ZkLXRleHRpdGVtcy1jb2x1bW5cXFwiPlxcbiAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XFxcImJ1dHRvblxcXCIgY2xhc3M9XFxcImJ0biBidG4tc20gYnRuLWRhbmdlclxcXCIgZGF0YS1iaW5kPVxcXCJ2aXNpYmxlOiAkcGFyZW50LmtvQWxsb3dBZGRSZW1vdmVJdGVtcywgY2xpY2s6ICRwYXJlbnQub25EZWxldGVDbGlja1xcXCI+XFxuICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cXFwiZ2x5cGhpY29uIGdseXBoaWNvbi1yZW1vdmVcXFwiIGFyaWEtaGlkZGVuPVxcXCJ0cnVlXFxcIj48L3NwYW4+XFxuICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxcbiAgICAgICAgICAgICAgICAgIDwvdGQ+XFxuICAgICAgICAgICAgICA8L3RyPlxcbiAgICAgICAgICA8L3Rib2R5PlxcbiAgICAgIDwvdGFibGU+XFxuICAgICAgPGRpdiBjbGFzcz1cXFwic3ZkLWl0ZW1zLWNvbnRyb2wtZm9vdGVyXFxcIiBkYXRhLWJpbmQ9XFxcInZpc2libGU6IGtvQWxsb3dBZGRSZW1vdmVJdGVtc1xcXCI+XFxuICAgICAgICAgIDxpbnB1dCB0eXBlPVxcXCJidXR0b25cXFwiIGNsYXNzPVxcXCJidG4gYnRuLXByaW1hcnlcXFwiIGRhdGEtYmluZD1cXFwiY2xpY2s6IG9uQWRkQ2xpY2ssIHZhbHVlOiAkcm9vdC5nZXRMb2NTdHJpbmcoJ3BlLmFkZE5ldycpXFxcIiAvPlxcbiAgICAgICAgICA8aW5wdXQgdHlwZT1cXFwiYnV0dG9uXFxcIiBjbGFzcz1cXFwiYnRuIGJ0bi1kYW5nZXJcXFwiIGRhdGEtYmluZD1cXFwiY2xpY2s6IG9uQ2xlYXJDbGljaywgdmFsdWU6ICRyb290LmdldExvY1N0cmluZygncGUucmVtb3ZlQWxsJylcXFwiIC8+XFxuICAgICAgPC9kaXY+XFxuICA8L2Rpdj5cXG4gIDwhLS0ga28gaWY6ICFrb0lzTGlzdCgpIC0tPlxcbiAgPCEtLSBrbyB0ZW1wbGF0ZTogeyBuYW1lOiBcXFwicHJvcGVydHllZGl0b3Jjb250ZW50LW5lc3RlZFxcXCIsIGRhdGE6ICRkYXRhIH0gLS0+XFxuICA8IS0tIC9rbyAtLT5cXG4gIDwhLS0gL2tvIC0tPlxcbjwvc2NyaXB0PlxcblwiO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vc3JjL3RlbXBsYXRlcy9wcm9wZXJ0eUVkaXRvcnMvcHJvcGVydHllZGl0b3ItbmVzdGVkaXRlbXMuaHRtbFxuLy8gbW9kdWxlIGlkID0gMTE2XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIm1vZHVsZS5leHBvcnRzID0gXCI8c2NyaXB0IHR5cGU9XFxcInRleHQvaHRtbFxcXCIgaWQ9XFxcInByb3BlcnR5ZWRpdG9yLW51bWJlclxcXCI+XFxuICA8aW5wdXQgY2xhc3M9XFxcImZvcm0tY29udHJvbCBzdmRfZWRpdG9yX2NvbnRyb2xcXFwiIHR5cGU9XFxcIm51bWJlclxcXCIgZGF0YS1iaW5kPVxcXCJ2YWx1ZToga29WYWx1ZSwgZGlzYWJsZTogcmVhZE9ubHksIGF0dHI6IHttYXg6IGtvTWF4VmFsdWUsIG1pbjoga29NaW5WYWx1ZX1cXFwiIHN0eWxlPVxcXCJ3aWR0aDoxMDAlXFxcIiAvPlxcbjwvc2NyaXB0PlxcblwiO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vc3JjL3RlbXBsYXRlcy9wcm9wZXJ0eUVkaXRvcnMvcHJvcGVydHllZGl0b3ItbnVtYmVyLmh0bWxcbi8vIG1vZHVsZSBpZCA9IDExN1xuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJtb2R1bGUuZXhwb3J0cyA9IFwiPHNjcmlwdCB0eXBlPVxcXCJ0ZXh0L2h0bWxcXFwiIGlkPVxcXCJwcm9wZXJ0eWVkaXRvci1vbmVzZWxlY3RlZFxcXCI+XFxuICA8IS0tIGtvIHRlbXBsYXRlOiB7IG5hbWU6ICdwcm9wZXJ0eWVkaXRvci1tb2RhbCcsIGRhdGE6ICRkYXRhIH0gLS0+XFxuICA8IS0tIC9rbyAtLT5cXG48L3NjcmlwdD5cXG48c2NyaXB0IHR5cGU9XFxcInRleHQvaHRtbFxcXCIgaWQ9XFxcInByb3BlcnR5ZWRpdG9yY29udGVudC1vbmVzZWxlY3RlZFxcXCI+XFxuICA8ZGl2IGNsYXNzPVxcXCJwcm9wZXJ0eWVkaXRvci12YWxpZGF0b3JzXFxcIj5cXG4gICAgICA8ZGl2IGNsYXNzPVxcXCJpbnB1dC1ncm91cCBmb3JtLWdyb3VwXFxcIj5cXG4gICAgICAgICAgPCEtLSBrbyBpZjoga29BdmFpbGFibGVDbGFzc2VzKCkubGVuZ3RoID09IDAgLS0+XFxuICAgICAgICAgIDxzcGFuIGNsYXNzPVxcXCJpbnB1dC1ncm91cC1hZGRvbiBmaXJzdC1hZGRvblxcXCIgZGF0YS1iaW5kPVxcXCJ2aXNpYmxlOiBrb0FsbG93QWRkUmVtb3ZlSXRlbXMoKSAmJiAhcmVhZE9ubHkoKSwgY2xpY2s6IG9uQWRkQ2xpY2tcXFwiPlxcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XFxcImdseXBoaWNvbiBnbHlwaGljb24tcGx1c1xcXCIgZGF0YS1iaW5kPVxcXCJjbGljazogZnVuY3Rpb24oKSB7ICRlbGVtZW50LnBhcmVudEVsZW1lbnQuZm9jdXMoKTsgfVxcXCI+PC9zcGFuPlxcbiAgICAgICAgICA8L3NwYW4+XFxuICAgICAgICAgIDwhLS0gL2tvICAtLT5cXG4gICAgICAgICAgPCEtLSBrbyBpZjoga29BdmFpbGFibGVDbGFzc2VzKCkubGVuZ3RoID4gMCAtLT5cXG4gICAgICAgICAgPGRpdiBjbGFzcz1cXFwiaW5wdXQtZ3JvdXAtYWRkb24gZmlyc3QtYWRkb25cXFwiIGRhdGEtYmluZD1cXFwidmlzaWJsZToga29BbGxvd0FkZFJlbW92ZUl0ZW1zKCkgJiYgIXJlYWRPbmx5KClcXFwiPlxcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwiZGRtZW51LWNvbnRhaW5lclxcXCI+XFxuICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT1cXFwiLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOnJnYmEoMCwwLDAsMClcXFwiIGRhdGEtYmluZD1cXFwidHJ1ZWNsaWNrXFxcIj48L2Rpdj5cXG5cXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJkZG1lbnVcXFwiPlxcbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiB0YWJpbmRleD1cXFwiMFxcXCI+XFxuICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cXFwiZ2x5cGhpY29uIGdseXBoaWNvbi1wbHVzIHN2ZC1tYWluLWNvbG9yXFxcIiBkYXRhLWJpbmQ9XFxcImNsaWNrOiBmdW5jdGlvbigpIHsgJGVsZW1lbnQucGFyZW50RWxlbWVudC5mb2N1cygpOyB9XFxcIj48L3NwYW4+XFxuICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cXG5cXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiB0YWJpbmRleD1cXFwiMFxcXCIgZGF0YS1iaW5kPVxcXCJ0cnVlY2xpY2tcXFwiPjwvZGl2PlxcbiAgICAgICAgICAgICAgICAgICAgICA8dWwgY2xhc3M9XFxcInN2ZC1saWdodC1iZy1jb2xvclxcXCI+XFxuICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIGtvIGZvcmVhY2g6IGtvQXZhaWxhYmxlQ2xhc3NlcyAtLT5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxsaT5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPVxcXCIjXFxcIiBkYXRhLWJpbmQ9XFxcImNsaWNrOiAkcGFyZW50Lm9uQWRkQ2xpY2tcXFwiPlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBkYXRhLWJpbmQ9XFxcInRleHQ6JGRhdGEudGV4dFxcXCI+PC9zcGFuPlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+XFxuICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIC9rbyAgLS0+XFxuICAgICAgICAgICAgICAgICAgICAgIDwvdWw+XFxuICAgICAgICAgICAgICAgICAgPC9kaXY+XFxuICAgICAgICAgICAgICA8L2Rpdj5cXG4gICAgICAgICAgPC9kaXY+XFxuICAgICAgICAgIDwhLS0gL2tvICAtLT5cXG4gICAgICAgICAgPGRpdiBjbGFzcz1cXFwiZm9ybS1jb250cm9sIHN2ZF9jdXN0b21fc2VsZWN0XFxcIj5cXG4gICAgICAgICAgICAgIDxzZWxlY3Qgb25tb3VzZXdoZWVsPVxcXCJyZXR1cm4gZmFsc2U7XFxcIiBkYXRhLWJpbmQ9XFxcIm9wdGlvbnM6IGtvSXRlbXMsIG9wdGlvbnNUZXh0OiAna29UZXh0JywgdmFsdWU6IGtvU2VsZWN0ZWRcXFwiPjwvc2VsZWN0PlxcbiAgICAgICAgICA8L2Rpdj5cXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XFxcImlucHV0LWdyb3VwLWFkZG9uIGJ0bi1kYW5nZXJcXFwiIGRhdGEtYmluZD1cXFwidmlzaWJsZToga29BbGxvd0FkZFJlbW92ZUl0ZW1zLCBlbmFibGU6IGtvU2VsZWN0ZWQoKSAhPSBudWxsLCBjbGljazogb25EZWxldGVDbGlja1xcXCI+XFxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cXFwiZ2x5cGhpY29uIGdseXBoaWNvbi1yZW1vdmVcXFwiPjwvc3Bhbj5cXG4gICAgICAgICAgPC9zcGFuPlxcbiAgICAgIDwvZGl2PlxcbiAgICA8IS0tIGtvIGlmOiBzZWxlY3RlZE9iamVjdEVkaXRvcigpICE9IG51bGwgLS0+XFxuICAgICAgPCEtLSBrbyB0ZW1wbGF0ZTogeyBuYW1lOiBcXFwicXVlc3Rpb25lZGl0b3ItY29udGVudFxcXCIsIGRhdGE6IHNlbGVjdGVkT2JqZWN0RWRpdG9yKCkgfSAtLT48IS0tIC9rbyAtLT5cXG4gICAgPCEtLSAva28gLS0+XFxuICA8L2Rpdj5cXG48L3NjcmlwdD5cXG5cIjtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL3NyYy90ZW1wbGF0ZXMvcHJvcGVydHlFZGl0b3JzL3Byb3BlcnR5ZWRpdG9yLW9uZXNlbGVjdGVkLmh0bWxcbi8vIG1vZHVsZSBpZCA9IDExOFxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJtb2R1bGUuZXhwb3J0cyA9IFwiPHNjcmlwdCB0eXBlPVxcXCJ0ZXh0L2h0bWxcXFwiIGlkPVxcXCJwcm9wZXJ0eWVkaXRvci1yZXN0ZnVsbFxcXCI+XFxuICA8IS0tIGtvIHRlbXBsYXRlOiB7IG5hbWU6ICdwcm9wZXJ0eWVkaXRvci1tb2RhbCcsIGRhdGE6ICRkYXRhIH0gLS0+XFxuICA8IS0tIC9rbyAtLT5cXG48L3NjcmlwdD5cXG5cXG48c2NyaXB0IHR5cGU9XFxcInRleHQvaHRtbFxcXCIgaWQ9XFxcInByb3BlcnR5ZWRpdG9yY29udGVudC1yZXN0ZnVsbFxcXCI+XFxuICA8Zm9ybT5cXG4gICAgICA8ZGl2IGNsYXNzPVxcXCJmb3JtLWdyb3VwXFxcIiBkYXRhLWJpbmQ9XFxcImZvcmVhY2g6IGtvSXRlbXNcXFwiPlxcbiAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJmb3JtLWdyb3VwXFxcIj5cXG4gICAgICAgICAgICAgIDxsYWJlbCBkYXRhLWJpbmQ9XFxcImF0dHI6IHtmb3I6IG5hbWV9LCB0ZXh0OiAkcm9vdC5nZXRMb2NTdHJpbmcoJ3BlLicrbmFtZSlcXFwiPjwvbGFiZWw+XFxuICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cXFwidGV4dFxcXCIgZGF0YS1iaW5kPVxcXCJhdHRyOiB7aWQ6IG5hbWV9LCB2YWx1ZTprb1ZhbHVlXFxcIiBjbGFzcz1cXFwiZm9ybS1jb250cm9sXFxcIj48L2lucHV0PlxcbiAgICAgICAgICA8L2Rpdj5cXG4gICAgICA8L2Rpdj5cXG4gICAgICA8ZGl2IGNsYXNzPVxcXCJmb3JtLWdyb3VwXFxcIj5cXG4gICAgICAgICAgPGxhYmVsIGZvcj1cXFwidGl0bGVOYW1lXFxcIj5cXG4gICAgICAgICAgICAgIDxzcGFuIGRhdGEtYmluZD1cXFwidGV4dDokcm9vdC5nZXRMb2NTdHJpbmcoJ3BlLnRlc3RTZXJ2aWNlJylcXFwiPjwvc3Bhbj5cXG4gICAgICAgICAgPC9sYWJlbD5cXG4gICAgICAgICAgPGRpdiBjbGFzcz1cXFwiZm9ybS1jb250cm9sIHN2ZF9jdXN0b21fc2VsZWN0XFxcIiBzdHlsZT1cXFwiZGlzcGxheTogYmxvY2s7XFxcIj5cXG4gICAgICAgICAgICAgIDxzZWxlY3Qgb25tb3VzZXdoZWVsPVxcXCJyZXR1cm4gZmFsc2U7XFxcIiBkYXRhLWJpbmQ9XFxcIm9wdGlvbnM6IHF1ZXN0aW9uLnZpc2libGVDaG9pY2VzLCBvcHRpb25zVGV4dDogJ3RleHQnLCBvcHRpb25zVmFsdWU6ICd2YWx1ZScsIG9wdGlvbnNDYXB0aW9uOiBxdWVzdGlvbi5vcHRpb25zQ2FwdGlvblxcXCI+PC9zZWxlY3Q+XFxuICAgICAgICAgIDwvZGl2PlxcbiAgICAgIDwvZGl2PlxcbiAgPC9mb3JtPlxcbjwvc2NyaXB0PlxcblwiO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vc3JjL3RlbXBsYXRlcy9wcm9wZXJ0eUVkaXRvcnMvcHJvcGVydHllZGl0b3ItcmVzdGZ1bGwuaHRtbFxuLy8gbW9kdWxlIGlkID0gMTE5XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIm1vZHVsZS5leHBvcnRzID0gXCI8c2NyaXB0IHR5cGU9XFxcInRleHQvaHRtbFxcXCIgaWQ9XFxcInByb3BlcnR5ZWRpdG9yLXN0cmluZ1xcXCI+XFxuICA8aW5wdXQgY2xhc3M9XFxcImZvcm0tY29udHJvbCBzdmRfZWRpdG9yX2NvbnRyb2xcXFwiIHR5cGU9XFxcInRleHRcXFwiIGRhdGEtYmluZD1cXFwidmFsdWU6IGtvVmFsdWUsIGRpc2FibGU6IHJlYWRPbmx5LCBhdHRyOiB7cGxhY2Vob2xkZXI6IGRlZmF1bHRWYWx1ZSwgbWF4TGVuZ3RoOiBrb01heExlbmd0aH1cXFwiIHN0eWxlPVxcXCJ3aWR0aDoxMDAlXFxcIiAvPlxcbjwvc2NyaXB0PlxcblwiO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vc3JjL3RlbXBsYXRlcy9wcm9wZXJ0eUVkaXRvcnMvcHJvcGVydHllZGl0b3Itc3RyaW5nLmh0bWxcbi8vIG1vZHVsZSBpZCA9IDEyMFxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJtb2R1bGUuZXhwb3J0cyA9IFwiPHNjcmlwdCB0eXBlPVxcXCJ0ZXh0L2h0bWxcXFwiIGlkPVxcXCJwcm9wZXJ0eWVkaXRvci10ZXh0XFxcIj5cXG4gIDwhLS0ga28gdGVtcGxhdGU6IHsgbmFtZTogJ3Byb3BlcnR5ZWRpdG9yLW1vZGFsJywgZGF0YTogJGRhdGEgfSAtLT48IS0tIC9rbyAtLT5cXG48L3NjcmlwdD5cXG5cXG48c2NyaXB0IHR5cGU9XFxcInRleHQvaHRtbFxcXCIgaWQ9XFxcInByb3BlcnR5ZWRpdG9yY29udGVudC10ZXh0XFxcIj5cXG4gIDx0ZXh0YXJlYSBjbGFzcz1cXFwiZm9ybS1jb250cm9sXFxcIiBkYXRhLWJpbmQ9XFxcInZhbHVlOmtvVmFsdWUsIGRpc2FibGU6IHJlYWRPbmx5LCBhdHRyOiB7cm93czogaXNEaXBsYXlOYW1lVmlzaWJsZSA/ICcyJyA6ICc1JywgbWF4TGVuZ3RoOiBrb01heExlbmd0aH1cXFwiIHN0eWxlPVxcXCJ3aWR0aDoxMDAlO2hlaWdodDphdXRvXFxcIiBhdXRvZm9jdXM9XFxcImF1dG9mb2N1c1xcXCI+PC90ZXh0YXJlYT5cXG48L3NjcmlwdD5cXG5cIjtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL3NyYy90ZW1wbGF0ZXMvcHJvcGVydHlFZGl0b3JzL3Byb3BlcnR5ZWRpdG9yLXRleHQuaHRtbFxuLy8gbW9kdWxlIGlkID0gMTIxXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIm1vZHVsZS5leHBvcnRzID0gXCI8c2NyaXB0IHR5cGU9XFxcInRleHQvaHRtbFxcXCIgaWQ9XFxcInByb3BlcnR5ZWRpdG9yLXRleHRpdGVtc1xcXCI+XFxuICAgIDwhLS0ga28gdGVtcGxhdGU6IHsgbmFtZTogJ3Byb3BlcnR5ZWRpdG9yLW1vZGFsJywgZGF0YTogJGRhdGEgfSAtLT5cXG4gICAgPCEtLSAva28gLS0+XFxuPC9zY3JpcHQ+XFxuPHNjcmlwdCB0eXBlPVxcXCJ0ZXh0L2h0bWxcXFwiIGlkPVxcXCJwcm9wZXJ0eWVkaXRvcmNvbnRlbnQtdGV4dGl0ZW1zXFxcIj5cXG4gICAgPCEtLSBrbyB0ZW1wbGF0ZTogeyBuYW1lOiAncHJvcGVydHllZGl0b3Jjb250ZW50LW5lc3RlZGl0ZW1zJywgZGF0YTogJGRhdGEgfSAtLT5cXG4gICAgPCEtLSAva28gLS0+XFxuPC9zY3JpcHQ+XCI7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9zcmMvdGVtcGxhdGVzL3Byb3BlcnR5RWRpdG9ycy9wcm9wZXJ0eWVkaXRvci10ZXh0aXRlbXMuaHRtbFxuLy8gbW9kdWxlIGlkID0gMTIyXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIm1vZHVsZS5leHBvcnRzID0gXCI8c2NyaXB0IHR5cGU9XFxcInRleHQvaHRtbFxcXCIgaWQ9XFxcInByb3BlcnR5ZWRpdG9yLXRyaWdnZXJzXFxcIj5cXG4gIDwhLS0ga28gdGVtcGxhdGU6IHsgbmFtZTogJ3Byb3BlcnR5ZWRpdG9yLW1vZGFsJywgZGF0YTogJGRhdGEgfSAtLT5cXG4gIDwhLS0gL2tvIC0tPlxcbjwvc2NyaXB0PlxcbjxzY3JpcHQgdHlwZT1cXFwidGV4dC9odG1sXFxcIiBpZD1cXFwicHJvcGVydHllZGl0b3Jjb250ZW50LXRyaWdnZXJzXFxcIj5cXG4gIDxkaXYgY2xhc3M9XFxcInByb3BlcnR5ZWRpdG9yLXRyaWdnZXJzXFxcIj5cXG4gICAgICA8ZGl2IGNsYXNzPVxcXCJpbnB1dC1ncm91cCBmb3JtLWdyb3VwXFxcIj5cXG4gICAgICAgICAgPGRpdiBjbGFzcz1cXFwiaW5wdXQtZ3JvdXAtYWRkb24gZmlyc3QtYWRkb25cXFwiIGRhdGEtYmluZD1cXFwidmlzaWJsZToga29BbGxvd0FkZFJlbW92ZUl0ZW1zKCkgJiYgIXJlYWRPbmx5KClcXFwiPlxcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwiZGRtZW51LWNvbnRhaW5lclxcXCI+XFxuICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT1cXFwiLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOnJnYmEoMCwwLDAsMClcXFwiIGRhdGEtYmluZD1cXFwidHJ1ZWNsaWNrXFxcIj48L2Rpdj5cXG5cXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJkZG1lbnVcXFwiPlxcbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiB0YWJpbmRleD1cXFwiMFxcXCIgZGF0YS1iaW5kPVxcXCJhdHRyOiB7IHRpdGxlOiAkcm9vdC5nZXRMb2NTdHJpbmcoJ3BlLmFkZE5ldycpIH1cXFwiPlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XFxcImdseXBoaWNvbiBnbHlwaGljb24tcGx1cyBzdmQtbWFpbi1jb2xvclxcXCIgZGF0YS1iaW5kPVxcXCJjbGljazogZnVuY3Rpb24oKSB7ICRlbGVtZW50LnBhcmVudEVsZW1lbnQuZm9jdXMoKTsgfVxcXCI+PC9zcGFuPlxcbiAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XFxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgdGFiaW5kZXg9XFxcIjBcXFwiIGRhdGEtYmluZD1cXFwidHJ1ZWNsaWNrXFxcIj48L2Rpdj5cXG4gICAgICAgICAgICAgICAgICAgICAgPHVsIGNsYXNzPVxcXCJzdmQtbGlnaHQtYmctY29sb3JcXFwiPlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBrbyBmb3JlYWNoOiBrb1RyaWdnZXJzIC0tPlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpPlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGRhdGEtYmluZD1cXFwiY2xpY2s6ICRwYXJlbnQub25BZGRDbGljaywgdGV4dDokZGF0YS50ZXh0XFxcIj48L2E+XFxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSAva28gIC0tPlxcbiAgICAgICAgICAgICAgICAgICAgICA8L3VsPlxcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxcbiAgICAgICAgICAgICAgPC9kaXY+XFxuICAgICAgICAgIDwvZGl2PlxcbiAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJmb3JtLWNvbnRyb2wgc3ZkX2N1c3RvbV9zZWxlY3RcXFwiPlxcbiAgICAgICAgICAgICAgPHNlbGVjdCBvbm1vdXNld2hlZWw9XFxcInJldHVybiBmYWxzZTtcXFwiIGRhdGEtYmluZD1cXFwib3B0aW9uczoga29JdGVtcywgb3B0aW9uc1RleHQ6ICdrb1RleHQnLCB2YWx1ZToga29TZWxlY3RlZFxcXCI+PC9zZWxlY3Q+XFxuICAgICAgICAgIDwvZGl2PlxcbiAgICAgICAgICA8c3BhbiBkYXRhLWJpbmQ9XFxcInZpc2libGU6IGtvQWxsb3dBZGRSZW1vdmVJdGVtcywgYXR0cjogeyB0aXRsZTogJHJvb3QuZ2V0TG9jU3RyaW5nKCdwZS5kZWxldGUnKSB9LCBlbmFibGU6IGtvU2VsZWN0ZWQoKSAhPSBudWxsICYmICFyZWFkT25seSgpLCBjbGljazogb25EZWxldGVDbGlja1xcXCJcXG4gICAgICAgICAgICAgIGNsYXNzPVxcXCJpbnB1dC1ncm91cC1hZGRvbiBidG4tZGFuZ2VyXFxcIj5cXG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVxcXCJnbHlwaGljb24gZ2x5cGhpY29uLXJlbW92ZVxcXCI+PC9zcGFuPlxcbiAgICAgICAgICA8L3NwYW4+XFxuICAgICAgPC9kaXY+XFxuICAgICAgPGRpdiBkYXRhLWJpbmQ9XFxcInZpc2libGU6IGtvU2VsZWN0ZWQoKSA9PSBudWxsXFxcIj5cXG4gICAgICAgICAgPGRpdiBkYXRhLWJpbmQ9XFxcInZpc2libGU6IGtvUXVlc3Rpb25zKCkubGVuZ3RoID09IDAsIHRleHQ6ICRyb290LmdldExvY1N0cmluZygncGUubm9xdWVzdGlvbnMnKVxcXCI+PC9kaXY+XFxuICAgICAgICAgIDxkaXYgZGF0YS1iaW5kPVxcXCJ2aXNpYmxlOiBrb1F1ZXN0aW9ucygpLmxlbmd0aCA+IDAsIHRleHQ6ICRyb290LmdldExvY1N0cmluZygncGUuY3JlYXRldHJpZ2dlcicpXFxcIj48L2Rpdj5cXG4gICAgICA8L2Rpdj5cXG4gICAgICA8ZGl2IGRhdGEtYmluZD1cXFwidmlzaWJsZToga29TZWxlY3RlZCgpICE9IG51bGxcXFwiPlxcbiAgICAgICAgICA8ZGl2IGRhdGEtYmluZD1cXFwid2l0aDoga29TZWxlY3RlZFxcXCI+XFxuICAgICAgICAgICAgPCEtLSBrbyB0ZW1wbGF0ZTogeyBuYW1lOiAncHJvcGVydHllZGl0b3Jjb250ZW50LWNvbmRpdGlvbicsIGRhdGE6IGNvbmRpdGlvbkVkaXRvciB9IC0tPlxcbiAgICAgICAgICAgIDwhLS0gL2tvIC0tPlxcbiAgICAgICAgICAgIDwhLS0ga28gdGVtcGxhdGU6IHsgbmFtZTogJ3Byb3BlcnR5ZWRpdG9yY29udGVudC10cmlnZ2VyLWNvbnRlbnQnLCBkYXRhOiAkZGF0YSB9IC0tPlxcbiAgICAgICAgICAgIDwhLS0gL2tvIC0tPlxcbiAgICAgICAgICA8L2Rpdj5cXG4gICAgICA8L2Rpdj5cXG4gIDwvZGl2Plxcbjwvc2NyaXB0PlxcbjxzY3JpcHQgdHlwZT1cXFwidGV4dC9odG1sXFxcIiBpZD1cXFwicHJvcGVydHllZGl0b3Jjb250ZW50LXRyaWdnZXItY29udGVudFxcXCI+XFxuICAgICAgPCEtLSBrbyBpZjoga29UeXBlKCkgPT0gJ3Zpc2libGV0cmlnZ2VyJyAtLT5cXG4gICAgICA8ZGl2IGNsYXNzPVxcXCJyb3dcXFwiPlxcbiAgICAgIDxkaXYgY2xhc3M9XFxcImNvbC1sZy02IGNvbC1zbS02XFxcIj5cXG4gICAgICAgICAgPCEtLSBrbyB0ZW1wbGF0ZTogeyBuYW1lOiAncHJvcGVydHllZGl0b3ItdHJpZ2dlcnNpdGVtcycsIGRhdGE6IHBhZ2VzIH0gLS0+XFxuICAgICAgICAgIDwhLS0gL2tvIC0tPlxcbiAgICAgIDwvZGl2PlxcbiAgICAgIDxkaXYgY2xhc3M9XFxcImNvbC1sZy02IGNvbC1zbS02XFxcIj5cXG4gICAgICAgICAgPCEtLSBrbyB0ZW1wbGF0ZTogeyBuYW1lOiAncHJvcGVydHllZGl0b3ItdHJpZ2dlcnNpdGVtcycsIGRhdGE6IHF1ZXN0aW9ucyB9IC0tPlxcbiAgICAgICAgICA8IS0tIC9rbyAtLT5cXG4gICAgICA8L2Rpdj5cXG4gIDwvZGl2PlxcbiAgPCEtLSAva28gLS0+XFxuICA8IS0tIGtvIGlmOiBrb1R5cGUoKSA9PSAnY29tcGxldGV0cmlnZ2VyJyAtLT5cXG4gIDxkaXYgY2xhc3M9XFxcInJvd1xcXCI+XFxuICAgICAgPGRpdiBzdHlsZT1cXFwibWFyZ2luOiAxMHB4XFxcIiBkYXRhLWJpbmQ9XFxcInRleHQ6ICRyb290LmdldExvY1N0cmluZygncGUudHJpZ2dlckNvbXBsZXRlVGV4dCcpXFxcIj48L2Rpdj5cXG4gIDwvZGl2PlxcbiAgPCEtLSAva28gLS0+XFxuICA8IS0tIGtvIGlmOiBrb1R5cGUoKSA9PSAnc2V0dmFsdWV0cmlnZ2VyJyAtLT5cXG4gIDxkaXYgY2xhc3M9XFxcInJvdyBjb2wtbGctMTIgY29sLXNtLTEyXFxcIj5cXG4gICAgICA8ZGl2IGRhdGEtYmluZD1cXFwidGV4dDogJHJvb3QuZ2V0TG9jU3RyaW5nKCdwZS50cmlnZ2VyU2V0VG9OYW1lJylcXFwiPjwvZGl2PlxcbiAgPC9kaXY+XFxuICA8ZGl2IGNsYXNzPVxcXCJyb3dcXFwiPlxcbiAgICAgIDxkaXYgY2xhc3M9XFxcImNvbC1sZy0xMiBjb2wtc20tMTJcXFwiPlxcbiAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJmb3JtLWdyb3VwXFxcIj5cXG4gICAgICAgICAgICAgIDwhLS0ga28gdGVtcGxhdGU6IHsgbmFtZTogXFxcImVsZW1lbnRzZWxlY3RvclxcXCIsIGRhdGE6IHNldFRvTmFtZVNlbGVjdG9yIH0gLS0+PCEtLSAva28gLS0+XFxuICAgICAgICAgIDwvZGl2PlxcbiAgICAgIDwvZGl2PlxcbiAgICAgIDxkaXYgY2xhc3M9XFxcImNvbC1sZy0xMiBjb2wtc20tMTJcXFwiPlxcbiAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJmb3JtLWdyb3VwXFxcIiBkYXRhLWJpbmQ9XFxcInZpc2libGU6a29IYXNTdXJ2ZXlcXFwiPlxcbiAgICAgICAgICAgICAgPHN1cnZleS13aWRnZXQgcGFyYW1zPVxcXCJzdXJ2ZXk6IGtvU3VydmV5XFxcIj48L3N1cnZleS13aWRnZXQ+XFxuICAgICAgICAgIDwvZGl2PlxcbiAgICAgIDwvZGl2PlxcbiAgPC9kaXY+XFxuICA8IS0tIC9rbyAtLT5cXG4gIDwhLS0ga28gaWY6IGtvVHlwZSgpID09ICdjb3B5dmFsdWV0cmlnZ2VyJyAtLT5cXG4gIDxkaXYgY2xhc3M9XFxcInJvd1xcXCI+XFxuICAgICAgPGRpdiBjbGFzcz1cXFwiY29sLWxnLTYgY29sLXNtLTZcXFwiPlxcbiAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJmb3JtLWdyb3VwXFxcIj5cXG4gICAgICAgICAgICAgIDxkaXYgZGF0YS1iaW5kPVxcXCJ0ZXh0OiAkcm9vdC5nZXRMb2NTdHJpbmcoJ3BlLnRyaWdnZXJTZXRUb05hbWUnKVxcXCI+PC9kaXY+XFxuICAgICAgICAgICAgICA8IS0tIGtvIHRlbXBsYXRlOiB7IG5hbWU6IFxcXCJlbGVtZW50c2VsZWN0b3JcXFwiLCBkYXRhOiBzZXRUb05hbWVTZWxlY3RvciB9IC0tPjwhLS0gL2tvIC0tPlxcbiAgICAgICAgICA8L2Rpdj5cXG4gICAgICA8L2Rpdj5cXG4gICAgICA8ZGl2IGNsYXNzPVxcXCJjb2wtbGctNiBjb2wtc20tNlxcXCI+XFxuICAgICAgICAgIDxkaXYgY2xhc3M9XFxcImZvcm0tZ3JvdXBcXFwiPlxcbiAgICAgICAgICAgICAgPGRpdiBkYXRhLWJpbmQ9XFxcInRleHQ6ICRyb290LmdldExvY1N0cmluZygncGUudHJpZ2dlckZyb21OYW1lJylcXFwiPjwvZGl2PlxcbiAgICAgICAgICAgICAgPCEtLSBrbyB0ZW1wbGF0ZTogeyBuYW1lOiBcXFwiZWxlbWVudHNlbGVjdG9yXFxcIiwgZGF0YTogZnJvbU5hbWVTZWxlY3RvciB9IC0tPjwhLS0gL2tvIC0tPlxcbiAgICAgICAgICA8L2Rpdj5cXG4gICAgICA8L2Rpdj5cXG4gIDwvZGl2PlxcbiAgPCEtLSAva28gLS0+XFxuICA8IS0tIGtvIGlmOiBrb1R5cGUoKSA9PSAnc2tpcHRyaWdnZXInIC0tPlxcbiAgPGRpdiBjbGFzcz1cXFwicm93XFxcIj5cXG4gICAgPGRpdiBjbGFzcz1cXFwiZm9ybS1ncm91cCBjb2wtbGctMTIgY29sLXNtLTEyXFxcIj5cXG4gICAgICAgIDxkaXYgZGF0YS1iaW5kPVxcXCJ0ZXh0OiAkcm9vdC5nZXRMb2NTdHJpbmcoJ3BlLnRyaWdnZXJHb3RvTmFtZScpXFxcIj48L2Rpdj5cXG4gICAgICAgIDwhLS0ga28gdGVtcGxhdGU6IHsgbmFtZTogXFxcImVsZW1lbnRzZWxlY3RvclxcXCIsIGRhdGE6IGdvdG9OYW1lU2VsZWN0b3IgfSAtLT48IS0tIC9rbyAtLT5cXG4gICAgPC9kaXY+XFxuICA8L2Rpdj5cXG4gIDwhLS0gL2tvIC0tPlxcbiAgICA8IS0tIGtvIGlmOiBrb1R5cGUoKSA9PSAncnVuZXhwcmVzc2lvbnRyaWdnZXInIC0tPlxcbiAgPGRpdiBjbGFzcz1cXFwicm93XFxcIj5cXG4gICAgICA8ZGl2IGNsYXNzPVxcXCJmb3JtLWdyb3VwIGNvbC1sZy0xMiBjb2wtc20tMTJcXFwiPlxcbiAgICAgICAgICA8ZGl2IGRhdGEtYmluZD1cXFwidGV4dDogJHJvb3QuZ2V0TG9jU3RyaW5nKCdwZS50cmlnZ2VyU2V0VG9OYW1lJylcXFwiPjwvZGl2PlxcbiAgICAgICAgICA8IS0tIGtvIHRlbXBsYXRlOiB7IG5hbWU6IFxcXCJlbGVtZW50c2VsZWN0b3JcXFwiLCBkYXRhOiBzZXRUb05hbWVTZWxlY3RvciB9IC0tPjwhLS0gL2tvIC0tPlxcbiAgICAgICAgICA8ZGl2IGRhdGEtYmluZD1cXFwidGV4dDogJHJvb3QuZ2V0TG9jU3RyaW5nKCdwZS50cmlnZ2VyUnVuRXhwcmVzc2lvbicpXFxcIj48L2Rpdj5cXG4gICAgICAgICAgPCEtLSBrbyB0ZW1wbGF0ZToge25hbWU6ICdwcm9wZXJ0eWVkaXRvci1lcnJvcicsIGRhdGE6ICRkYXRhfSAtLT48IS0tIC9rbyAtLT5cXG4gICAgICAgICAgPHRleHRhcmVhIGNsYXNzPVxcXCJmb3JtLWNvbnRyb2xcXFwiIHR5cGU9XFxcInRleHRcXFwiIGRhdGEtYmluZD1cXFwidmFsdWU6a29ydW5FeHByZXNzaW9uXFxcIiByb3dzPVxcXCIzXFxcIj48L3RleHRhcmVhPlxcbiAgICAgIDwvZGl2PlxcbiAgPC9kaXY+XFxuICA8IS0tIC9rbyAtLT5cXG48L3NjcmlwdD5cXG5cIjtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL3NyYy90ZW1wbGF0ZXMvcHJvcGVydHlFZGl0b3JzL3Byb3BlcnR5ZWRpdG9yLXRyaWdnZXJzLmh0bWxcbi8vIG1vZHVsZSBpZCA9IDEyM1xuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJtb2R1bGUuZXhwb3J0cyA9IFwiPHNjcmlwdCB0eXBlPVxcXCJ0ZXh0L2h0bWxcXFwiIGlkPVxcXCJwcm9wZXJ0eWVkaXRvci10cmlnZ2Vyc2l0ZW1zXFxcIj5cXG4gIDxkaXY+XFxuICAgICAgPGRpdiBjbGFzcz1cXFwiZm9ybS1ncm91cFxcXCIgZGF0YS1iaW5kPVxcXCJ0ZXh0OiB0aXRsZVxcXCI+PC9kaXY+XFxuICAgICAgPGRpdiBjbGFzcz1cXFwiZm9ybS1ncm91cCBpbnB1dC1ncm91cFxcXCI+XFxuICAgICAgICAgIDxzZWxlY3Qgb25tb3VzZXdoZWVsPVxcXCJyZXR1cm4gZmFsc2U7XFxcIiBjbGFzcz1cXFwiZm9ybS1jb250cm9sXFxcIiBtdWx0aXBsZT1cXFwibXVsdGlwbGVcXFwiIGRhdGEtYmluZD1cXFwib3B0aW9uczprb0Nob29zZW4sIHZhbHVlOiBrb0Nob29zZW5TZWxlY3RlZCwgb3B0aW9uc1RleHQ6ICd0ZXh0J1xcXCI+PC9zZWxlY3Q+XFxuICAgICAgICAgIDxzcGFuIGNsYXNzPVxcXCJpbnB1dC1ncm91cC1hZGRvbiBidG4tZGFuZ2VyXFxcIiBkYXRhLWJpbmQ9XFxcImNsaWNrOiBkZWxldGVJdGVtXFxcIj5cXG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVxcXCJnbHlwaGljb24gZ2x5cGhpY29uLXJlbW92ZVxcXCI+PC9zcGFuPlxcbiAgICAgICAgICA8L3NwYW4+XFxuICAgICAgPC9kaXY+XFxuICAgICAgPGRpdiBjbGFzcz1cXFwiZm9ybS1ncm91cCBpbnB1dC1ncm91cFxcXCI+XFxuICAgICAgICAgIDxkaXYgY2xhc3M9XFxcImZvcm0tY29udHJvbCBzdmRfY3VzdG9tX3NlbGVjdFxcXCI+XFxuICAgICAgICAgICAgICA8c2VsZWN0IG9ubW91c2V3aGVlbD1cXFwicmV0dXJuIGZhbHNlO1xcXCIgZGF0YS1iaW5kPVxcXCJvcHRpb25zOmtvT2JqZWN0cywgdmFsdWU6IGtvU2VsZWN0ZWQsIG9wdGlvbnNUZXh0OiAndGV4dCdcXFwiPjwvc2VsZWN0PlxcbiAgICAgICAgICA8L2Rpdj5cXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XFxcImlucHV0LWdyb3VwLWFkZG9uIGJ0bi1kZWZhdWx0XFxcIiBkYXRhLWJpbmQ9XFxcImNsaWNrOiBhZGRJdGVtXFxcIj5cXG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVxcXCJnbHlwaGljb24gZ2x5cGhpY29uLXBsdXMgc3ZkLW1haW4tY29sb3JcXFwiPjwvc3Bhbj5cXG4gICAgICAgICAgPC9zcGFuPlxcbiAgICAgIDwvZGl2PlxcbiAgPC9kaXY+XFxuPC9zY3JpcHQ+XFxuXCI7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9zcmMvdGVtcGxhdGVzL3Byb3BlcnR5RWRpdG9ycy9wcm9wZXJ0eWVkaXRvci10cmlnZ2Vyc2l0ZW1zLmh0bWxcbi8vIG1vZHVsZSBpZCA9IDEyNFxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJtb2R1bGUuZXhwb3J0cyA9IFwiPHNjcmlwdCB0eXBlPVxcXCJ0ZXh0L2h0bWxcXFwiIGlkPVxcXCJwcm9wZXJ0eWVkaXRvclxcXCI+XFxuICAgIDxsYWJlbCBkYXRhLWJpbmQ9XFxcInRleHQ6ZGlzcGxheU5hbWUsIHZpc2libGU6IHNob3dEaXNwbGF5TmFtZU9uVG9wXFxcIj48L2xhYmVsPlxcbiAgICA8IS0tIGtvIHRlbXBsYXRlOiB7bmFtZTogJ3Byb3BlcnR5ZWRpdG9yLWVycm9yJywgZGF0YTogJGRhdGF9IC0tPlxcbiAgICA8IS0tIC9rbyAtLT5cXG4gICAgPCEtLSBrbyB0ZW1wbGF0ZToge25hbWU6ICRkYXRhLmNvbnRlbnRUZW1wbGF0ZU5hbWUsIGRhdGE6ICRkYXRhfSAtLT5cXG4gICAgPCEtLSAva28gLS0+XFxuPC9zY3JpcHQ+XCI7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9zcmMvdGVtcGxhdGVzL3Byb3BlcnR5RWRpdG9ycy9wcm9wZXJ0eWVkaXRvci5odG1sXG4vLyBtb2R1bGUgaWQgPSAxMjVcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwibW9kdWxlLmV4cG9ydHMgPSBcIjxzY3JpcHQgdHlwZT1cXFwidGV4dC9odG1sXFxcIiBpZD1cXFwicXVlc3Rpb25lZGl0b3ItY29udGVudFxcXCI+XFxuICAgIDwhLS0ga28gaWY6ICRkYXRhLnVzZVRhYnNJbkVsZW1lbnRFZGl0b3IgLS0+XFxuICAgIDx1bCBjbGFzcz1cXFwibmF2IG5hdi10YWJzIG1vZGFsLXRhYnNcXFwiIGRhdGEtYmluZD1cXFwiZm9yZWFjaDoga29UYWJzXFxcIj5cXG4gICAgICAgIDxsaSBjbGFzcz1cXFwibmF2LWl0ZW1cXFwiIHJvbGU9XFxcInByZXNlbnRhdGlvblxcXCIgZGF0YS1iaW5kPVxcXCJjc3M6IHthY3RpdmU6ICRwYXJlbnQua29BY3RpdmVUYWIoKSA9PSAkZGF0YS5uYW1lfSwgY2xpY2s6ICRwYXJlbnQub25UYWJDbGlja1xcXCI+XFxuICAgICAgICAgICAgPGEgY2xhc3M9XFxcIm5hdi1saW5rXFxcIiBkYXRhLWJpbmQ9XFxcImNzczoge2FjdGl2ZTogJHBhcmVudC5rb0FjdGl2ZVRhYigpID09ICRkYXRhLm5hbWV9XFxcIj5cXG4gICAgICAgICAgICAgICAgPHNwYW4gZGF0YS1iaW5kPVxcXCJ0ZXh0OiRkYXRhLnRpdGxlXFxcIj48L3NwYW4+XFxuICAgICAgICAgICAgPC9hPlxcbiAgICAgICAgPC9saT5cXG4gICAgPC91bD5cXG4gICAgPCEtLSBrbyBmb3JlYWNoOiBrb1RhYnMgLS0+XFxuICAgIDxkaXYgZGF0YS1iaW5kPVxcXCJpZjogJHBhcmVudC5rb0FjdGl2ZVRhYigpID09PSAkZGF0YS5uYW1lXFxcIiBzdHlsZT1cXFwibWFyZ2luLXRvcDo1cHhcXFwiPlxcbiAgICAgICAgPCEtLSBrbyB0ZW1wbGF0ZTogeyBuYW1lOiAkZGF0YS5odG1sVGVtcGxhdGUsIGRhdGE6ICRkYXRhLnRlbXBsYXRlT2JqZWN0LCBhZnRlclJlbmRlcjogJGRhdGEua29BZnRlclJlbmRlciB9IC0tPlxcbiAgICAgICAgPCEtLSAva28gLS0+XFxuICAgIDwvZGl2PlxcbiAgICA8IS0tIC9rbyAgLS0+XFxuICAgIDwhLS0gL2tvICAtLT5cXG4gICAgPCEtLSBrbyBpZm5vdDogJGRhdGEudXNlVGFic0luRWxlbWVudEVkaXRvciAtLT5cXG4gICAgPHN2ZC1hY2NvcmRpb24gcGFyYW1zPVxcXCJ0YWJzOiBrb1RhYnMsIHRlbXBsYXRlOiAnc3ZkLWVkaXRvci10YWItdGVtcGxhdGUnXFxcIj48L3N2ZC1hY2NvcmRpb24+XFxuICAgIDwhLS0gL2tvICAtLT5cXG48L3NjcmlwdD5cXG5cXG48c2NyaXB0IHR5cGU9XFxcInRleHQvaHRtbFxcXCIgaWQ9XFxcInN2ZC1lZGl0b3ItdGFiLXRlbXBsYXRlXFxcIj5cXG4gICAgPCEtLSBrbyB0ZW1wbGF0ZTogeyBuYW1lOiAkZGF0YS5odG1sVGVtcGxhdGUsIGRhdGE6ICRkYXRhLnRlbXBsYXRlT2JqZWN0LCBhZnRlclJlbmRlcjogJGRhdGEua29BZnRlclJlbmRlciB9IC0tPlxcbiAgICA8IS0tIC9rbyAtLT5cXG48L3NjcmlwdD5cIjtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL3NyYy90ZW1wbGF0ZXMvcXVlc3Rpb25FZGl0b3JzL3F1ZXN0aW9uZWRpdG9yLWNvbnRlbnQuaHRtbFxuLy8gbW9kdWxlIGlkID0gMTI2XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIm1vZHVsZS5leHBvcnRzID0gXCI8c2NyaXB0IHR5cGU9XFxcInRleHQvaHRtbFxcXCIgaWQ9XFxcInF1ZXN0aW9uZWRpdG9yXFxcIj5cXG4gIDxkaXYgaWQ9XFxcInN1cnZleXF1ZXN0aW9uZWRpdG9yd2luZG93XFxcIiBjbGFzcz1cXFwibW9kYWxcXFwiIGRhdGEtYmluZD1cXFwid2l0aDprb0VkaXRvclxcXCI+XFxuICAgICAgPGRpdiBjbGFzcz1cXFwibW9kYWwtZGlhbG9nXFxcIj5cXG4gICAgICAgICAgPGRpdiBjbGFzcz1cXFwibW9kYWwtY29udGVudFxcXCI+XFxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtb2RhbC1oZWFkZXJcXFwiPlxcbiAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cXFwiYnV0dG9uXFxcIiBjbGFzcz1cXFwiY2xvc2VcXFwiIGRhdGEtYmluZD1cXFwiY2xpY2s6IG9uUmVzZXRDbGlja1xcXCI+JnRpbWVzOzwvYnV0dG9uPlxcbiAgICAgICAgICAgICAgICAgIDxoNCBjbGFzcz1cXFwibW9kYWwtdGl0bGVcXFwiIGRhdGEtYmluZD1cXFwidGV4dDprb1RpdGxlXFxcIj48L2g0PlxcbiAgICAgICAgICAgICAgPC9kaXY+XFxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtb2RhbC1ib2R5IHN2ZF9ub3RvcGJvdHRvbXBhZGRpbmdzXFxcIj5cXG4gICAgICAgICAgICAgICAgICA8IS0tIGtvIHRlbXBsYXRlOiB7IG5hbWU6IFxcXCJxdWVzdGlvbmVkaXRvci1jb250ZW50XFxcIiwgZGF0YTogJGRhdGEgfSAtLT5cXG4gICAgICAgICAgICAgICAgICA8IS0tIC9rbyAtLT5cXG4gICAgICAgICAgICAgIDwvZGl2PlxcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibW9kYWwtZm9vdGVyXFxcIj5cXG4gICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cXFwiYnV0dG9uXFxcIiBjbGFzcz1cXFwiYnRuIGJ0bi1wcmltYXJ5XFxcIiBkYXRhLWJpbmQ9XFxcInZpc2libGU6IGtvU2hvd0FwcGx5QnV0dG9uLCBkaXNhYmxlOiByZWFkT25seSwgY2xpY2s6IG9uQXBwbHlDbGljaywgdmFsdWU6ICRyb290LmdldExvY1N0cmluZygncGUuYXBwbHknKVxcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XFxcIndpZHRoOjEwMHB4XFxcIiAvPlxcbiAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVxcXCJidXR0b25cXFwiIGNsYXNzPVxcXCJidG4gYnRuLWRlZmF1bHQgYnRuLXNlY29uZGFyeVxcXCIgZGF0YS1iaW5kPVxcXCJjbGljazogb25Pa0NsaWNrLCBkaXNhYmxlOiByZWFkT25seSwgdmFsdWU6ICRyb290LmdldExvY1N0cmluZygncGUub2snKVxcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XFxcIndpZHRoOjEwMHB4XFxcIiAvPlxcbiAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVxcXCJidXR0b25cXFwiIGNsYXNzPVxcXCJidG4gYnRuLXByaW1hcnlcXFwiIGRhdGEtYmluZD1cXFwiY2xpY2s6IG9uUmVzZXRDbGljaywgdmFsdWU6ICRyb290LmdldExvY1N0cmluZygncGUuY2FuY2VsJylcXFwiIHN0eWxlPVxcXCJ3aWR0aDoxMDBweFxcXCJcXG4gICAgICAgICAgICAgICAgICAvPlxcbiAgICAgICAgICAgICAgPC9kaXY+XFxuICAgICAgICAgIDwvZGl2PlxcbiAgICAgIDwvZGl2PlxcbiAgPC9kaXY+XFxuPC9zY3JpcHQ+XFxuXCI7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9zcmMvdGVtcGxhdGVzL3F1ZXN0aW9uRWRpdG9ycy9xdWVzdGlvbmVkaXRvci5odG1sXG4vLyBtb2R1bGUgaWQgPSAxMjdcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwibW9kdWxlLmV4cG9ydHMgPSBcIjxzY3JpcHQgdHlwZT1cXFwidGV4dC9odG1sXFxcIiBpZD1cXFwicXVlc3Rpb25lZGl0b3J0YWJcXFwiPlxcbiAgPGRpdiBjbGFzcz1cXFwicm93XFxcIiBkYXRhLWJpbmQ9XFxcImNzczogJ3N2ZC1wb3B1cC1lZGl0b3ItdGFiLScgKyBuYW1lLCBhdHRyOiB7aWQ6ICdlZGl0b3JfdGFiX2lkXycgKyBuYW1lfVxcXCI+XFxuICAgICAgPGRpdiBjbGFzcz1cXFwiY29sLXNtLTEyXFxcIj5cXG4gICAgICAgICAgPCEtLSBrbyBmb3JlYWNoOiBwcm9wZXJ0aWVzLnJvd3MgLS0+XFxuICAgICAgICAgIDxkaXYgY2xhc3M9XFxcImZvcm0tZ3JvdXBcXFwiPlxcbiAgICAgICAgICAgICAgPCEtLSBrbyBmb3JlYWNoOiBwcm9wZXJ0aWVzIC0tPlxcbiAgICAgICAgICAgICAgICAgIDxkaXYgZGF0YS1iaW5kPVxcXCJ2aXNpYmxlOiBvYmplY3RQcm9wZXJ0eS5rb1Zpc2libGUsIGV2ZW50OiB7IGtleWRvd246IG9iamVjdFByb3BlcnR5LmVkaXRvci5rZXlEb3duSGFuZGxlciB9LCBhdHRyOiB7ICdkYXRhLXByb3BlcnR5JzogcHJvcGVydHkubmFtZSB9XFxcIj5cXG4gICAgICAgICAgICAgICAgICA8IS0tIGtvIHRlbXBsYXRlOiB7IG5hbWU6ICdwcm9wZXJ0eWVkaXRvcicsIGRhdGE6IG9iamVjdFByb3BlcnR5LmVkaXRvciB9IC0tPjwhLS0gL2tvIC0tPlxcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxcbiAgICAgICAgICAgICAgPCEtLSAva28gIC0tPlxcbiAgICAgICAgICA8L2Rpdj5cXG4gICAgICAgICAgPCEtLSAva28gIC0tPlxcbiAgICAgIDwvZGl2PlxcbiAgPC9kaXY+XFxuPC9zY3JpcHQ+XFxuXCI7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9zcmMvdGVtcGxhdGVzL3F1ZXN0aW9uRWRpdG9ycy9xdWVzdGlvbmVkaXRvcnRhYi5odG1sXG4vLyBtb2R1bGUgaWQgPSAxMjhcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwibW9kdWxlLmV4cG9ydHMgPSBcIjxzY3JpcHQgdHlwZT1cXFwidGV4dC9odG1sXFxcIiBpZD1cXFwic3VydmV5ZW1iZWRpbmdcXFwiPlxcbiAgICA8ZGl2IGNsYXNzPVxcXCJyb3dcXFwiPlxcbiAgICAgICAgPGRpdiBjbGFzcz1cXFwiZm9ybS1jb250cm9sIHN2ZF9jdXN0b21fc2VsZWN0IHN2ZF9lbWJlZF90YWJcXFwiPlxcbiAgICAgICAgICAgIDxzZWxlY3Qgb25tb3VzZXdoZWVsPVxcXCJyZXR1cm4gZmFsc2U7XFxcIiBkYXRhLWJpbmQ9XFxcImlmOiB0cnVlLCB2YWx1ZTprb0xpYnJhcnlWZXJzaW9uXFxcIj5cXG4gICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cXFwiYW5ndWxhclxcXCIgZGF0YS1iaW5kPVxcXCJ0ZXh0OiAkcm9vdC5nZXRMb2NTdHJpbmcoJ2V3LmFuZ3VsYXInKVxcXCI+PC9vcHRpb24+XFxuICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XFxcImpxdWVyeVxcXCIgZGF0YS1iaW5kPVxcXCJ0ZXh0OiAkcm9vdC5nZXRMb2NTdHJpbmcoJ2V3LmpxdWVyeScpXFxcIj48L29wdGlvbj5cXG4gICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cXFwia25vY2tvdXRcXFwiIGRhdGEtYmluZD1cXFwidGV4dDogJHJvb3QuZ2V0TG9jU3RyaW5nKCdldy5rbm9ja291dCcpXFxcIj48L29wdGlvbj5cXG4gICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cXFwicmVhY3RcXFwiIGRhdGEtYmluZD1cXFwidGV4dDogJHJvb3QuZ2V0TG9jU3RyaW5nKCdldy5yZWFjdCcpXFxcIj48L29wdGlvbj5cXG4gICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cXFwidnVlXFxcIiBkYXRhLWJpbmQ9XFxcInRleHQ6ICRyb290LmdldExvY1N0cmluZygnZXcudnVlJylcXFwiPjwvb3B0aW9uPlxcbiAgICAgICAgICAgIDwvc2VsZWN0PlxcbiAgICAgICAgPC9kaXY+XFxuICAgICAgICA8ZGl2IGNsYXNzPVxcXCJmb3JtLWNvbnRyb2wgc3ZkX2N1c3RvbV9zZWxlY3Qgc3ZkX2VtYmVkX3RhYlxcXCI+XFxuICAgICAgICAgICAgPHNlbGVjdCBvbm1vdXNld2hlZWw9XFxcInJldHVybiBmYWxzZTtcXFwiIGRhdGEtYmluZD1cXFwiaWY6IHRydWUsIHZhbHVlOmtvU2NyaXB0VXNpbmdcXFwiPlxcbiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVxcXCJib290c3RyYXBcXFwiIGRhdGEtYmluZD1cXFwidGV4dDogJHJvb3QuZ2V0TG9jU3RyaW5nKCdldy5ib290c3RyYXAnKVxcXCI+PC9vcHRpb24+XFxuICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XFxcInN0YW5kYXJkXFxcIiBkYXRhLWJpbmQ9XFxcInRleHQ6ICRyb290LmdldExvY1N0cmluZygnZXcuc3RhbmRhcmQnKVxcXCI+PC9vcHRpb24+XFxuICAgICAgICAgICAgPC9zZWxlY3Q+XFxuICAgICAgICA8L2Rpdj5cXG4gICAgICAgIDxkaXYgY2xhc3M9XFxcImZvcm0tY29udHJvbCBzdmRfY3VzdG9tX3NlbGVjdCBzdmRfZW1iZWRfdGFiXFxcIj5cXG4gICAgICAgICAgICA8c2VsZWN0IG9ubW91c2V3aGVlbD1cXFwicmV0dXJuIGZhbHNlO1xcXCIgZGF0YS1iaW5kPVxcXCJpZjogdHJ1ZSwgdmFsdWU6a29TaG93QXNXaW5kb3dcXFwiPlxcbiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVxcXCJwYWdlXFxcIiBkYXRhLWJpbmQ9XFxcInRleHQ6ICRyb290LmdldExvY1N0cmluZygnZXcuc2hvd09uUGFnZScpXFxcIj48L29wdGlvbj5cXG4gICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cXFwid2luZG93XFxcIiBkYXRhLWJpbmQ9XFxcInRleHQ6ICRyb290LmdldExvY1N0cmluZygnZXcuc2hvd0luV2luZG93JylcXFwiPjwvb3B0aW9uPlxcbiAgICAgICAgICAgIDwvc2VsZWN0PlxcbiAgICAgICAgPC9kaXY+XFxuICAgICAgICA8bGFiZWwgY2xhc3M9XFxcImNoZWNrYm94LWlubGluZSBmb3JtLWNoZWNrLWxhYmVsXFxcIiBkYXRhLWJpbmQ9XFxcInZpc2libGU6a29IYXNJZHNcXFwiPlxcbiAgICAgICAgICAgIDxpbnB1dCB0eXBlPVxcXCJjaGVja2JveFxcXCIgZGF0YS1iaW5kPVxcXCJjaGVja2VkOmtvTG9hZFN1cnZleVxcXCIgLz5cXG4gICAgICAgICAgICA8c3BhbiBkYXRhLWJpbmQ9XFxcInRleHQ6ICRyb290LmdldExvY1N0cmluZygnZXcubG9hZEZyb21TZXJ2ZXInKVxcXCI+PC9zcGFuPlxcbiAgICAgICAgPC9sYWJlbD5cXG4gICAgPC9kaXY+XFxuICAgIDxkaXYgY2xhc3M9XFxcInBhbmVsIGNhcmRcXFwiPlxcbiAgICAgICAgPGRpdiBjbGFzcz1cXFwicGFuZWwtaGVhZGluZyBjYXJkLWhlYWRlclxcXCIgZGF0YS1iaW5kPVxcXCJ0ZXh0OiAkcm9vdC5nZXRMb2NTdHJpbmcoJ2V3LnRpdGxlU2NyaXB0JylcXFwiPjwvZGl2PlxcbiAgICAgICAgPGRpdiBkYXRhLWJpbmQ9XFxcInZpc2libGU6aGFzQWNlRWRpdG9yXFxcIj5cXG4gICAgICAgICAgICA8ZGl2IGlkPVxcXCJzdXJ2ZXlFbWJlZGluZ0hlYWRcXFwiIHN0eWxlPVxcXCJoZWlnaHQ6NzBweDt3aWR0aDoxMDAlXFxcIj48L2Rpdj5cXG4gICAgICAgIDwvZGl2PlxcbiAgICAgICAgPHRleHRhcmVhIGRhdGEtYmluZD1cXFwidmlzaWJsZTohaGFzQWNlRWRpdG9yLCB0ZXh0OiBrb0hlYWRUZXh0XFxcIiBzdHlsZT1cXFwiaGVpZ2h0OjcwcHg7d2lkdGg6MTAwJVxcXCI+PC90ZXh0YXJlYT5cXG4gICAgPC9kaXY+XFxuICAgIDxkaXYgY2xhc3M9XFxcInBhbmVsIGNhcmRcXFwiIGRhdGEtYmluZD1cXFwidmlzaWJsZToga29WaXNpYmxlSHRtbFxcXCI+XFxuICAgICAgICA8ZGl2IGNsYXNzPVxcXCJwYW5lbC1oZWFkaW5nIGNhcmQtaGVhZGVyXFxcIiBkYXRhLWJpbmQ9XFxcInRleHQ6ICRyb290LmdldExvY1N0cmluZygnZXcudGl0bGVIdG1sJylcXFwiPjwvZGl2PlxcbiAgICAgICAgPGRpdiBkYXRhLWJpbmQ9XFxcInZpc2libGU6aGFzQWNlRWRpdG9yXFxcIj5cXG4gICAgICAgICAgICA8ZGl2IGlkPVxcXCJzdXJ2ZXlFbWJlZGluZ0JvZHlcXFwiIHN0eWxlPVxcXCJoZWlnaHQ6MzBweDt3aWR0aDoxMDAlXFxcIj48L2Rpdj5cXG4gICAgICAgIDwvZGl2PlxcbiAgICAgICAgPHRleHRhcmVhIGRhdGEtYmluZD1cXFwidmlzaWJsZTohaGFzQWNlRWRpdG9yLCB0ZXh0OiBrb0JvZHlUZXh0XFxcIiBzdHlsZT1cXFwiaGVpZ2h0OjMwcHg7d2lkdGg6MTAwJVxcXCI+PC90ZXh0YXJlYT5cXG4gICAgPC9kaXY+XFxuICAgIDxkaXYgY2xhc3M9XFxcInBhbmVsIGNhcmRcXFwiPlxcbiAgICAgICAgPGRpdiBjbGFzcz1cXFwicGFuZWwtaGVhZGluZyBjYXJkLWhlYWRlclxcXCIgZGF0YS1iaW5kPVxcXCJ0ZXh0OiAkcm9vdC5nZXRMb2NTdHJpbmcoJ2V3LnRpdGxlSmF2YVNjcmlwdCcpXFxcIj48L2Rpdj5cXG4gICAgICAgIDxkaXYgZGF0YS1iaW5kPVxcXCJ2aXNpYmxlOmhhc0FjZUVkaXRvclxcXCI+XFxuICAgICAgICAgICAgPGRpdiBpZD1cXFwic3VydmV5RW1iZWRpbmdKYXZhXFxcIiBzdHlsZT1cXFwiaGVpZ2h0OjMwMHB4O3dpZHRoOjEwMCVcXFwiPjwvZGl2PlxcbiAgICAgICAgPC9kaXY+XFxuICAgICAgICA8dGV4dGFyZWEgZGF0YS1iaW5kPVxcXCJ2aXNpYmxlOiFoYXNBY2VFZGl0b3IsIHRleHQ6IGtvSmF2YVRleHRcXFwiIHN0eWxlPVxcXCJoZWlnaHQ6MzAwcHg7d2lkdGg6MTAwJVxcXCI+PC90ZXh0YXJlYT5cXG4gICAgPC9kaXY+XFxuPC9zY3JpcHQ+XCI7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9zcmMvdGVtcGxhdGVzL3N1cnZleWVtYmVkaW5nLmh0bWxcbi8vIG1vZHVsZSBpZCA9IDEyOVxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJtb2R1bGUuZXhwb3J0cyA9IFwiPHNjcmlwdCB0eXBlPVxcXCJ0ZXh0L2h0bWxcXFwiIGlkPVxcXCJzdXJ2ZXlsaXZlXFxcIj5cXG4gICAgPGRpdiBkYXRhLWJpbmQ9XFxcInZpc2libGU6IGtvSXNSdW5uaW5nKClcXFwiPlxcbiAgICAgICAgPHNwYW4gZGF0YS1iaW5kPVxcXCJ2aXNpYmxlOiBrb1BhZ2VzKCkubGVuZ3RoID4gMSAmJiBrb1Nob3dQYWdlc0luVGVzdFN1cnZleVRhYigpXFxcIj5cXG4gICAgICAgICAgICA8bGFiZWwgIGZvcj1cXFwidGVzdFN1cnZleVBhZ2VDaGFuZ2VkXFxcIiBkYXRhLWJpbmQ9XFxcInRleHQ6IHNlbGVjdFBhZ2VUZXh0XFxcIj48L2xhYmVsPlxcbiAgICAgICAgICAgIDxzcGFuIGlkPVxcXCJ0ZXN0U3VydmV5UGFnZUNoYW5nZWRcXFwiPlxcbiAgICAgICAgICAgICAgICA8c2VsZWN0IG9ubW91c2V3aGVlbD1cXFwicmV0dXJuIGZhbHNlO1xcXCIgY2xhc3M9XFxcImZvcm0tY29udHJvbFxcXCIgZGF0YS1iaW5kPVxcXCJvcHRpb25zOiBrb1BhZ2VzLCBvcHRpb25zVGV4dDogJ3RpdGxlJywgb3B0aW9uc1ZhbHVlOiAncGFnZScsIHZhbHVlOiBrb0FjdGl2ZVBhZ2UsIG9wdGlvbnNBZnRlclJlbmRlcjogc2V0UGFnZURpc2FibGVcXFwiPjwvc2VsZWN0PlxcbiAgICAgICAgICAgIDwvc3Bhbj5cXG4gICAgICAgIDwvc3Bhbj5cXG4gICAgICAgIDxzcGFuIGRhdGEtYmluZD1cXFwidmlzaWJsZToga29TaG93RGVmYXVsdExhbmd1YWdlSW5UZXN0U3VydmV5VGFiXFxcIj5cXG4gICAgICAgICAgICA8bGFiZWwgIGZvcj1cXFwidGVzdFN1cnZleUxvY2FsZVxcXCIgZGF0YS1iaW5kPVxcXCJ0ZXh0OiBsb2NhbGVUZXh0XFxcIj48L2xhYmVsPlxcbiAgICAgICAgICAgIDxzcGFuIGlkPVxcXCJ0ZXN0U3VydmV5TG9jYWxlXFxcIj5cXG4gICAgICAgICAgICAgICAgPHNlbGVjdCBvbm1vdXNld2hlZWw9XFxcInJldHVybiBmYWxzZTtcXFwiIGNsYXNzPVxcXCJmb3JtLWNvbnRyb2xcXFwiIGRhdGEtYmluZD1cXFwib3B0aW9uczoga29MYW5ndWFnZXMsIHZhbHVlOiBrb0FjdGl2ZUxhbmd1YWdlLCBvcHRpb25zVGV4dDondGV4dCcsIG9wdGlvbnNWYWx1ZTogJ3ZhbHVlJ1xcXCI+PC9zZWxlY3Q+XFxuICAgICAgICAgICAgPC9zcGFuPlxcbiAgICAgICAgPC9zcGFuPlxcbiAgICAgICAgPGxhYmVsIGlkPVxcXCJ0ZXN0U2hvd0ludmlzaWJsZUVsZW1lbnRzXFxcIiBkYXRhLWJpbmQ9XFxcInZpc2libGU6IGtvU2hvd0ludmlzaWJsZUVsZW1lbnRzSW5UZXN0U3VydmV5VGFiXFxcIj5cXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJzanMtY2ItY29udGFpbmVyXFxcIj5cXG4gICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVxcXCJzdmRfZWRpdG9yX2NvbnRyb2xcXFwiIHR5cGU9XFxcImNoZWNrYm94XFxcIiBkYXRhLWJpbmQ9XFxcImNoZWNrZWQ6IGtvU2hvd0ludmlzaWJsZUVsZW1lbnRzXFxcIj5cXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XFxcImNoZWNrbWFya1xcXCIgZGF0YS1iaW5kPVxcXCJjc3M6IHsgJ3N2ZC1tYWluLWJhY2tncm91bmQtY29sb3InOiBrb1Nob3dJbnZpc2libGVFbGVtZW50cygpLCAnc3ZkLWxpZ2h0LWJhY2tncm91bmQtY29sb3InOiAha29TaG93SW52aXNpYmxlRWxlbWVudHMoKSB9XFxcIj48L3NwYW4+XFxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVxcXCJzanMtY2ItbGFiZWxcXFwiIGRhdGEtYmluZD1cXFwidGV4dDogc2hvd0ludmlzaWJsZUVsZW1lbnRzVGV4dFxcXCI+PC9zcGFuPlxcbiAgICAgICAgICAgIDwvZGl2PlxcbiAgICAgICAgPC9sYWJlbD5cXG4gICAgICAgIDwhLS0ga28gaWY6IHNpbXVsYXRvckVuYWJsZWQgLS0+XFxuICAgICAgICA8c3Bhbj5cXG4gICAgICAgICAgPGxhYmVsIGZvcj1cXFwidGVzdERldmljZVNlbGVjdG9yXFxcIiBkYXRhLWJpbmQ9XFxcInRleHQ6IHNpbXVsYXRvclRleHRcXFwiPjwvbGFiZWw+XFxuICAgICAgICAgIDxzcGFuIGlkPVxcXCJ0ZXN0RGV2aWNlU2VsZWN0b3JcXFwiPlxcbiAgICAgICAgICAgICAgPHNlbGVjdCBvbm1vdXNld2hlZWw9XFxcInJldHVybiBmYWxzZTtcXFwiIGNsYXNzPVxcXCJmb3JtLWNvbnRyb2xcXFwiIGRhdGEtYmluZD1cXFwib3B0aW9uczoga29EZXZpY2VzLCB2YWx1ZToga29BY3RpdmVEZXZpY2UsIG9wdGlvbnNUZXh0Oid0ZXh0Jywgb3B0aW9uc1ZhbHVlOiAndmFsdWUnXFxcIj48L3NlbGVjdD5cXG4gICAgICAgICAgPC9zcGFuPlxcbiAgICAgICAgPC9zcGFuPlxcbiAgICAgICAgPCEtLSAva28gLS0+XFxuICAgICAgICA8IS0tIGtvIGlmOiBrb0hhc0ZyYW1lIC0tPlxcbiAgICAgICAgPGxhYmVsIGZvcj1cXFwidGVzdERldmljZU9yaWVudGF0aW9uXFxcIj5cXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJzanMtY2ItY29udGFpbmVyXFxcIj5cXG4gICAgICAgICAgICAgICAgPGlucHV0IGlkPVxcXCJ0ZXN0RGV2aWNlT3JpZW50YXRpb25cXFwiIGNsYXNzPVxcXCJzdmRfZWRpdG9yX2NvbnRyb2xcXFwiIHR5cGU9XFxcImNoZWNrYm94XFxcIiBkYXRhLWJpbmQ9XFxcImNoZWNrZWQ6IGtvTGFuZHNjYXBlT3JpZW50YXRpb25cXFwiPlxcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cXFwiY2hlY2ttYXJrXFxcIiBkYXRhLWJpbmQ9XFxcImNzczogeyAnc3ZkLW1haW4tYmFja2dyb3VuZC1jb2xvcic6IGtvTGFuZHNjYXBlT3JpZW50YXRpb24oKSwgJ3N2ZC1saWdodC1iYWNrZ3JvdW5kLWNvbG9yJzogIWtvTGFuZHNjYXBlT3JpZW50YXRpb24oKSB9XFxcIj48L3NwYW4+XFxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVxcXCJzanMtY2ItbGFiZWxcXFwiIGRhdGEtYmluZD1cXFwidGV4dDogbGFuZHNjYXBlT3JpZW50YXRpb25UZXh0XFxcIj48L3NwYW4+XFxuICAgICAgICAgICAgPC9kaXY+XFxuICAgICAgICA8L2xhYmVsPlxcbiAgICAgICAgPCEtLSAva28gLS0+XFxuICA8L2Rpdj5cXG4gICAgPCEtLSBrbyB0ZW1wbGF0ZTogXFxcInN1cnZleS1zaW11bGF0b3JcXFwiIC0tPlxcbiAgICA8IS0tIC9rbyAtLT5cXG4gICAgPCEtLSBrbyBpZm5vdDoga29Jc1J1bm5pbmcgLS0+XFxuICAgIDxkaXYgY2xhc3M9XFxcInN2ZF90ZXN0X3Jlc3VsdHNcXFwiPlxcbiAgICAgICAgPGRpdiBjbGFzcz1cXFwic3ZkX3Jlc3VsdHNfaGVhZGVyXFxcIj5cXG4gICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVxcXCJidG4gYnRuLXByaW1hcnlcXFwiIGRhdGEtYmluZD1cXFwiY2xpY2s6IHNlbGVjdFRlc3RDbGljaywgdGV4dDogdGVzdFN1cnZleUFnYWluVGV4dFxcXCI+PC9idXR0b24+XFxuICAgICAgICAgICAgPGgyIGRhdGEtYmluZD1cXFwidGV4dDogc3VydmV5UmVzdWx0c1RleHRcXFwiPjwvaDI+XFxuICAgICAgICA8L2Rpdj5cXG4gICAgICAgIDx1bCBjbGFzcz1cXFwibmF2YmFyLWRlZmF1bHQgY29udGFpbmVyLWZsdWlkIG5hdiBuYXYtdGFicyBlZGl0b3ItdGFic1xcXCI+XFxuICAgICAgICAgICAgPGxpIGNsYXNzPVxcXCJuYXYtaXRlbSBhY3RpdmVcXFwiIGRhdGEtYmluZD1cXFwiY3NzOiB7YWN0aXZlOiBrb1Jlc3VsdFZpZXdUeXBlKCkgPT09ICd0YWJsZSd9XFxcIj5cXG4gICAgICAgICAgICAgICAgPGEgY2xhc3M9XFxcIm5hdi1saW5rXFxcIiBocmVmPVxcXCIjXFxcIiBkYXRhLWJpbmQ9XFxcImNsaWNrOiBzZWxlY3RUYWJsZUNsaWNrLCB0ZXh0OiAkcm9vdC5nZXRMb2NTdHJpbmcoJ2VkLnN1cnZleVJlc3VsdHNUYWJsZScpXFxcIj48L2E+XFxuICAgICAgICAgICAgPC9saT5cXG4gICAgICAgICAgICA8bGkgY2xhc3M9XFxcIm5hdi1pdGVtXFxcIiBkYXRhLWJpbmQ9XFxcImNzczoge2FjdGl2ZToga29SZXN1bHRWaWV3VHlwZSgpID09PSAndGV4dCd9XFxcIj5cXG4gICAgICAgICAgICAgICAgPGEgY2xhc3M9XFxcIm5hdi1saW5rXFxcIiBocmVmPVxcXCIjXFxcIiBkYXRhLWJpbmQ9XFxcImNsaWNrOiBzZWxlY3RKc29uQ2xpY2ssIHRleHQ6ICRyb290LmdldExvY1N0cmluZygnZWQuc3VydmV5UmVzdWx0c0pzb24nKVxcXCI+PC9hPlxcbiAgICAgICAgICAgIDwvbGk+XFxuICAgICAgICA8L3VsPlxcbiAgICAgICAgPGRpdiBjbGFzcz1cXFwic3ZkX3Jlc3VsdHNfdGV4dCBzdmQtbGlnaHQtYmctY29sb3JcXFwiIGRhdGEtYmluZD1cXFwidmlzaWJsZToga29SZXN1bHRWaWV3VHlwZSgpID09PSAndGV4dCdcXFwiPlxcbiAgICAgICAgICAgIDxkaXYgZGF0YS1iaW5kPVxcXCJ0ZXh0OiBrb1Jlc3VsdFRleHRcXFwiPjwvZGl2PlxcbiAgICAgICAgPC9kaXY+XFxuICAgICAgICA8ZGl2IGNsYXNzPVxcXCJzdmRfcmVzdWx0c190YWJsZSBzdmQtbGlnaHQtYmctY29sb3JcXFwiIGRhdGEtYmluZD1cXFwidmlzaWJsZToga29SZXN1bHRWaWV3VHlwZSgpID09PSAndGFibGUnXFxcIj5cXG4gICAgICAgICAgICA8dGFibGU+XFxuICAgICAgICAgICAgICAgIDx0aGVhZD5cXG4gICAgICAgICAgICAgICAgICAgIDx0ciBjbGFzcz1cXFwic3ZkLWxpZ2h0LWJhY2tncm91bmQtY29sb3JcXFwiPlxcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cXFwic3ZkLWRhcmstYm9yZGVyLWNvbG9yXFxcIiBkYXRhLWJpbmQ9XFxcInRleHQ6IHJlc3VsdHNUaXRsZVxcXCI+PC90aD5cXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9XFxcInN2ZC1kYXJrLWJvcmRlci1jb2xvclxcXCIgZGF0YS1iaW5kPVxcXCJ0ZXh0OiByZXN1bHRzTmFtZVxcXCI+PC90aD5cXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9XFxcInN2ZC1kYXJrLWJvcmRlci1jb2xvclxcXCIgZGF0YS1iaW5kPVxcXCJ0ZXh0OiByZXN1bHRzVmFsdWVcXFwiPjwvdGg+XFxuICAgICAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPVxcXCJzdmQtZGFyay1ib3JkZXItY29sb3JcXFwiIGRhdGEtYmluZD1cXFwidGV4dDogcmVzdWx0c0Rpc3BsYXlWYWx1ZVxcXCI+PC90aD5cXG4gICAgICAgICAgICAgICAgICAgIDwvdHI+XFxuICAgICAgICAgICAgICAgIDwvdGhlYWQ+XFxuICAgICAgICAgICAgICAgIDx0Ym9keT5cXG4gICAgICAgICAgICAgICAgICAgIDwhLS0ga28gZm9yZWFjaDoga29SZXN1bHREYXRhIC0tPlxcbiAgICAgICAgICAgICAgICAgICAgPCEtLSBrbyB0ZW1wbGF0ZTogXFxcInN1cnZleS1yZXN1bHQtdGFibGUtcm93XFxcIiAtLT5cXG4gICAgICAgICAgICAgICAgICAgIDwhLS0gL2tvIC0tPlxcbiAgICAgICAgICAgICAgICAgICAgPCEtLSAva28gLS0+XFxuICAgICAgICAgICAgICAgIDwvdGJvZHk+XFxuICAgICAgICAgICAgPC90YWJsZT5cXG4gICAgICAgIDwvZGl2PlxcbiAgICA8L2Rpdj5cXG4gICAgPCEtLSAva28gLS0+XFxuPC9zY3JpcHQ+XFxuPHNjcmlwdCB0eXBlPVxcXCJ0ZXh0L2h0bWxcXFwiIGlkPVxcXCJzdXJ2ZXktcmVzdWx0LXRhYmxlLXJvd1xcXCI+XFxuICA8dHIgZGF0YS1iaW5kPVxcXCJjbGljazogZnVuY3Rpb24oKSB7IGlzTm9kZSAmJiBjb2xsYXBzZWQoIWNvbGxhcHNlZCgpKTsgfVxcXCI+XFxuICAgICAgPHRkIGNsYXNzPVxcXCJzdmQtZGFyay1ib3JkZXItY29sb3JcXFwiPlxcbiAgICAgICAgICA8IS0tIGtvIGlmOiBpc05vZGUgLS0+XFxuICAgICAgICAgIDxzcGFuIGNsYXNzPVxcXCJzdXJ2ZXktcmVzdWx0LW1hcmtlclxcXCIgZGF0YS1iaW5kPVxcXCJjc3M6IHsgJ3N1cnZleS1yZXN1bHQtbWFya2VyLS1leHBhbmRlZCc6ICFjb2xsYXBzZWQoKSB9XFxcIj7ilrY8L3NwYW4+XFxuICAgICAgICAgIDwhLS0gL2tvIC0tPlxcbiAgICAgICAgICA8c3BhbiBkYXRhLWJpbmQ9XFxcInRleHQ6IHRpdGxlXFxcIj48L3NwYW4+PC90ZD5cXG4gICAgICA8dGQgY2xhc3M9XFxcInN2ZC1kYXJrLWJvcmRlci1jb2xvclxcXCIgZGF0YS1iaW5kPVxcXCJ0ZXh0OiBuYW1lXFxcIj48L3RkPlxcbiAgICAgIDx0ZCBjbGFzcz1cXFwic3ZkLWRhcmstYm9yZGVyLWNvbG9yXFxcIj48ZGl2IGNsYXNzPVxcXCJzdXJ2ZXktcmVzdWx0LXZhbHVlXFxcIiBkYXRhLWJpbmQ9XFxcInRleHQ6IGdldFN0cmluZyh2YWx1ZSlcXFwiPjwvZGl2PjwvdGQ+XFxuICAgICAgPHRkIGNsYXNzPVxcXCJzdmQtZGFyay1ib3JkZXItY29sb3JcXFwiIGRhdGEtYmluZD1cXFwidGV4dDogZ2V0U3RyaW5nKGRpc3BsYXlWYWx1ZSlcXFwiPjwvdGQ+XFxuICA8L3RyPlxcbiAgPCEtLSBrbyBpZjogaXNOb2RlICYmICFjb2xsYXBzZWQoKSAtLT5cXG4gIDwhLS0ga28gZm9yZWFjaDogZGF0YSAtLT5cXG4gIDwhLS0ga28gdGVtcGxhdGU6IFxcXCJzdXJ2ZXktcmVzdWx0LXRhYmxlLXJvd1xcXCIgLS0+XFxuICA8IS0tIC9rbyAtLT5cXG4gIDwhLS0gL2tvIC0tPlxcbiAgPCEtLSAva28gLS0+XFxuPC9zY3JpcHQ+XFxuXFxuPHNjcmlwdCB0eXBlPVxcXCJ0ZXh0L2h0bWxcXFwiIGlkPVxcXCJzdXJ2ZXktc2ltdWxhdG9yXFxcIj5cXG4gICAgPGRpdiBjbGFzcz1cXFwic3ZkLXNpbXVsYXRvci1tYWluXFxcIj5cXG4gICAgICA8IS0tIGtvIGlmOiBrb0hhc0ZyYW1lIC0tPlxcbiAgICAgIDxkaXYgY2xhc3M9XFxcInN2ZC1zaW11bGF0b3Itd3JhcHBlclxcXCIgZGF0YS1iaW5kPVxcXCJzdHlsZTogeyB3aWR0aDoga29TaW11bGF0b3JGcmFtZSgpLmZyYW1lV2lkdGggKyAncHgnLCBoZWlnaHQ6IGtvU2ltdWxhdG9yRnJhbWUoKS5mcmFtZUhlaWdodCArICdweCcgfVxcXCI+XFxuICAgICAgICA8aW1nIGNsYXNzPVxcXCJzdmQtc2ltdWxhdG9yLWZyYW1lXFxcIiBkYXRhLWJpbmQ9XFxcInZpc2libGU6ICFrb0xhbmRzY2FwZU9yaWVudGF0aW9uKClcXFwiIHNyYz1cXFwiXCIgKyByZXF1aXJlKFwiLi4vaW1hZ2VzL3NpbXVsYXRvci9kZXZpY2UtcC5zdmdcIikgKyBcIlxcXCIvPlxcbiAgICAgICAgPGltZyBjbGFzcz1cXFwic3ZkLXNpbXVsYXRvci1mcmFtZVxcXCIgZGF0YS1iaW5kPVxcXCJ2aXNpYmxlOiBrb0xhbmRzY2FwZU9yaWVudGF0aW9uXFxcIiBzcmM9XFxcIlwiICsgcmVxdWlyZShcIi4uL2ltYWdlcy9zaW11bGF0b3IvZGV2aWNlLWwuc3ZnXCIpICsgXCJcXFwiLz5cXG4gICAgICAgIDxkaXYgY2xhc3M9XFxcInN2ZC1zaW11bGF0b3JcXFwiIGRhdGEtYmluZD1cXFwic3R5bGU6IHsgd2lkdGg6IGtvU2ltdWxhdG9yRnJhbWUoKS53aWR0aCAvIGtvU2ltdWxhdG9yRnJhbWUoKS5zY2FsZSArICdweCcsIGhlaWdodDoga29TaW11bGF0b3JGcmFtZSgpLmhlaWdodCAvIGtvU2ltdWxhdG9yRnJhbWUoKS5zY2FsZSArICdweCcsIHRvcDoga29TaW11bGF0b3JGcmFtZSgpLmZyYW1lWSArICdweCcsIGxlZnQ6IGtvU2ltdWxhdG9yRnJhbWUoKS5mcmFtZVggKyAncHgnLCB0cmFuc2Zvcm06ICdzY2FsZSgnICsga29TaW11bGF0b3JGcmFtZSgpLnNjYWxlICsgJyknIH1cXFwiPlxcbiAgICAgICAgICA8c3VydmV5LXdpZGdldCBjbGFzcz1cXFwic3ZkLXNpbXVsYXRvci1jb250ZW50XFxcIiBwYXJhbXM9XFxcInN1cnZleToga29TdXJ2ZXlcXFwiPjwvc3VydmV5LXdpZGdldD5cXG4gICAgICAgIDwvZGl2PlxcbiAgICAgIDwvZGl2PlxcbiAgICAgIDwhLS0gL2tvIC0tPlxcbiAgICAgIDwhLS0ga28gaWZub3Q6IGtvSGFzRnJhbWUgLS0+XFxuICAgICAgPHN1cnZleS13aWRnZXQgY2xhc3M9XFxcInN2ZC1zaW11bGF0b3ItY29udGVudFxcXCIgcGFyYW1zPVxcXCJzdXJ2ZXk6IGtvU3VydmV5XFxcIj48L3N1cnZleS13aWRnZXQ+XFxuICAgICAgPCEtLSAva28gLS0+XFxuICA8L2Rpdj5cXG48L3NjcmlwdD5cXG5cIjtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL3NyYy90ZW1wbGF0ZXMvc3VydmV5bGl2ZS5odG1sXG4vLyBtb2R1bGUgaWQgPSAxMzBcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwibW9kdWxlLmV4cG9ydHMgPSBcIjxzY3JpcHQgdHlwZT1cXFwidGV4dC9odG1sXFxcIiBpZD1cXFwic3VydmV5bG9naWNcXFwiPlxcbiAgPGRpdiBkYXRhLWJpbmQ9XFxcInZpc2libGU6IGtvTW9kZSgpID09ICd2aWV3J1xcXCI+XFxuICAgIDxpbnB1dCB0eXBlPVxcXCJidXR0b25cXFwiIGNsYXNzPVxcXCJidG4gYnRuLXByaW1hcnlcXFwiIGRhdGEtYmluZD1cXFwidmlzaWJsZTogIWtvUmVhZE9ubHkoKSwgY2xpY2s6ICRkYXRhLmtvQWRkTmV3LCB2YWx1ZTogJHJvb3QuZ2V0TG9jU3RyaW5nKCdwZS5hZGROZXcnKVxcXCIgLz5cXG4gICAgPCEtLSBrbyBmb3JlYWNoOiB7ZGF0YTogJGRhdGEua29JdGVtcywgYXM6ICdpdGVtJyB9IC0tPlxcbiAgICAgIDxkaXYgY2xhc3M9XFxcInN2ZC1sb2dpYy1pdGVtLWhlYWRlclxcXCI+XFxuICAgICAgICAgIDxzcGFuIGNsYXNzPVxcXCJzdmQtbG9naWMtaGVhZGVyLWl0ZW0taWNvbiBzdmQtbWFpbi1jb2xvclxcXCIgZGF0YS1iaW5kPVxcXCJ2aXNpYmxlOiAhJGRhdGEuaXNSZWFkT25seSwga2V5MmNsaWNrLCBjbGlja05vRm9jdXM6ICRkYXRhLmVkaXQsIGF0dHI6IHt0aXRsZTogJGRhdGEuZWRpdFRleHQgfVxcXCI+XFxuICAgICAgICAgICAgPHN2Zy1pY29uIGNsYXNzPVxcXCJzdmQtcHJpbWFyeS1pY29uXFxcIiBwYXJhbXM9XFxcImljb25OYW1lOiAnaWNvbi1hY3Rpb25lZGl0ZWxlbWVudCdcXFwiPjwvc3ZnLWljb24+XFxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XFxcInN2ZC1sb2dpYy1oZWFkZXItaWNvbi10ZXh0XFxcIiBkYXRhLWJpbmQ9XFxcInRleHQ6ICRkYXRhLmVkaXRUZXh0XFxcIj48L3NwYW4+XFxuICAgICAgICAgIDwvc3Bhbj5cXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XFxcInN2ZC1sb2dpYy1oZWFkZXItaXRlbS1pY29uIHN2ZC1tYWluLWNvbG9yXFxcIiBkYXRhLWJpbmQ9XFxcInZpc2libGU6ICEkZGF0YS5pc1JlYWRPbmx5LCBrZXkyY2xpY2ssIGNsaWNrTm9Gb2N1czogJGRhdGEucmVtb3ZlLCBhdHRyOiB7dGl0bGU6ICRkYXRhLmRlbGV0ZVRleHQgfVxcXCI+XFxuICAgICAgICAgICAgPHN2Zy1pY29uIGNsYXNzPVxcXCJzdmQtcHJpbWFyeS1pY29uXFxcIiBwYXJhbXM9XFxcImljb25OYW1lOiAnaWNvbi1hY3Rpb25kZWxldGUnXFxcIj48L3N2Zy1pY29uPlxcbiAgICAgICAgICA8L3NwYW4+XFxuICAgICAgICAgIDxzcGFuIGNsYXNzPVxcXCJzdmRhX2FjdGlvbl9zZXBhcmF0b3Igc3ZkLWRhcmstYm9yZGVyLWNvbG9yXFxcIj48L3NwYW4+XFxuICAgICAgICAgIDxzcGFuIGNsYXNzPVxcXCJzdmQtbG9naWMtaGVhZGVyLWl0ZW0tdGV4dFxcXCIgZGF0YS1iaW5kPVxcXCJ0ZXh0OiBpdGVtLnRpdGxlXFxcIj48L3NwYW4+XFxuICAgICAgPC9kaXY+XFxuICAgICAgPGRpdj5cXG4gICAgICAgICAgPHNwYW4gZGF0YS1iaW5kPVxcXCJ0ZXh0OiBpdGVtLmV4cHJlc3Npb25UZXh0XFxcIj48L3NwYW4+XFxuICAgICAgICAgIDwhLS0ga28gZm9yZWFjaDoge2RhdGE6ICRkYXRhLmtvT3BlcmF0aW9ucywgYXM6ICdvcCcgfSAtLT5cXG4gICAgICAgICAgPGRpdj5cXG4gICAgICAgICAgICA8c3BhbiBkYXRhLWJpbmQ9XFxcInRleHQ6IG9wLnRleHRcXFwiPjwvc3Bhbj5cXG4gICAgICAgICAgPC9kaXY+XFxuICAgICAgICA8IS0tIC9rbyAtLT5cXG4gICAgICA8L2Rpdj5cXG4gICAgPCEtLSAva28gLS0+XFxuICA8L2Rpdj5cXG4gIDxkaXYgZGF0YS1iaW5kPVxcXCJ2aXNpYmxlOiBrb01vZGUoKSA9PSAnbmV3JyB8fCBrb01vZGUoKSA9PSAnZWRpdCdcXFwiPlxcbiAgICA8ZGl2PlxcbiAgICAgIDxpbnB1dCB0eXBlPVxcXCJidXR0b25cXFwiIGNsYXNzPVxcXCJidG4gYnRuLXByaW1hcnlcXFwiIGRhdGEtYmluZD1cXFwiY2xpY2s6JGRhdGEua29TYXZlQW5kU2hvd1ZpZXcsIHZhbHVlOiAkcm9vdC5nZXRMb2NTdHJpbmcoJ3BlLnNhdmVBbmRCYWNrJylcXFwiIC8+XFxuICAgICAgPGlucHV0IHR5cGU9XFxcImJ1dHRvblxcXCIgY2xhc3M9XFxcImJ0biBidG4tcHJpbWFyeVxcXCIgZGF0YS1iaW5kPVxcXCJjbGljazogJGRhdGEua29TYXZlRWRpdGFibGVJdGVtLCB2YWx1ZTogJHJvb3QuZ2V0TG9jU3RyaW5nKCdwZS5zYXZlJylcXFwiLz5cXG4gICAgICA8aW5wdXQgdHlwZT1cXFwiYnV0dG9uXFxcIiBjbGFzcz1cXFwiYnRuIGJ0bi1wcmltYXJ5XFxcIiBkYXRhLWJpbmQ9XFxcImNsaWNrOiAkZGF0YS5rb1Nob3dWaWV3LCB2YWx1ZTogJHJvb3QuZ2V0TG9jU3RyaW5nKCdwZS5iYWNrJylcXFwiLz5cXG4gIDwvZGl2PlxcbiAgICA8ZGl2PlxcbiAgICAgIDwhLS0ga28gdGVtcGxhdGU6IHtuYW1lOiAncHJvcGVydHllZGl0b3ItZXJyb3InLCBkYXRhOiAkZGF0YX0gLS0+PCEtLSAva28gLS0+XFxuICAgIDwvZGl2PlxcbiAgICA8IS0tIGtvIHRlbXBsYXRlOiB7IG5hbWU6ICdwcm9wZXJ0eWVkaXRvcicsIGRhdGE6ICRkYXRhLmV4cHJlc3Npb25FZGl0b3IgfSAtLT48IS0tIC9rbyAtLT5cXG4gICAgPCEtLWtvIGlmOiAkZGF0YS5rb0VkaXRhYmxlSXRlbSgpICE9IG51bGwgLS0+XFxuICAgIDwhLS0ga28gZm9yZWFjaDoge2RhdGE6ICRkYXRhLmtvRWRpdGFibGVJdGVtKCkua29PcGVyYXRpb25zLCBhczogJ29wJyB9IC0tPlxcbiAgICA8ZGl2IGRhdGEtYmluZD1cXFwidmlzaWJsZTogb3AudGVtcGxhdGVPYmplY3QgIT09IG51bGxcXFwiPlxcbiAgICAgICAgPGRpdiBjbGFzcz1cXFwic3ZkLWxvZ2ljLWl0ZW0taGVhZGVyXFxcIj5cXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XFxcInN2ZC1sb2dpYy1oZWFkZXItaXRlbS1pY29uIHN2ZC1tYWluLWNvbG9yXFxcIiBkYXRhLWJpbmQ9XFxcImtleTJjbGljaywgY2xpY2tOb0ZvY3VzOiAkcGFyZW50LmtvUmVtb3ZlT3BlcmF0aW9uLCBhdHRyOiB7dGl0bGU6ICRkYXRhLmRlbGV0ZU9wZXJhdGlvblRleHQgfVxcXCI+XFxuICAgICAgICAgICAgPHNwYW4+XFxuICAgICAgICAgICAgICAgIDxzdmctaWNvbiBjbGFzcz1cXFwic3ZkLXByaW1hcnktaWNvblxcXCIgcGFyYW1zPVxcXCJpY29uTmFtZTogJ2ljb24tYWN0aW9uZGVsZXRlJ1xcXCI+PC9zdmctaWNvbj5cXG4gICAgICAgICAgICA8L3NwYW4+XFxuICAgICAgICAgIDwvc3Bhbj5cXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XFxcInN2ZGFfYWN0aW9uX3NlcGFyYXRvciBzdmQtZGFyay1ib3JkZXItY29sb3JcXFwiPjwvc3Bhbj5cXG4gICAgICAgICAgPHNwYW4gZGF0YS1iaW5kPVxcXCJ0ZXh0OiBvcC5uYW1lXFxcIj48L3NwYW4+XFxuICAgICAgICA8L2Rpdj5cXG4gICAgICAgIDwhLS0ga28gdGVtcGxhdGU6IHsgbmFtZTogb3AudGVtcGxhdGUsIGRhdGE6IG9wLnRlbXBsYXRlT2JqZWN0IH0gLS0+PCEtLSAva28gLS0+XFxuICAgIDwvZGl2PlxcbiAgICA8IS0tIC9rbyAtLT5cXG4gICAgPCEtLSAva28gLS0+XFxuICAgIDxkaXYgY2xhc3M9XFxcInN2ZC1sb2dpYy1pdGVtLWhlYWRlclxcXCI+PHNwYW4gZGF0YS1iaW5kPVxcXCJ0ZXh0OiRkYXRhLmFkZE5ld09wZXJhdGlvblRleHRcXFwiPjwvc3Bhbj48L2Rpdj5cXG4gICAgPCEtLSBrbyBmb3JlYWNoOiB7ZGF0YTogJGRhdGEua29Mb2dpY1R5cGVzLCBhczogJ2l0ZW0nIH0gLS0+XFxuICAgIDxkaXYgZGF0YS1iaW5kPVxcXCJ2aXNpYmxlOiBpdGVtLmtvVmlzaWJsZVxcXCI+XFxuICAgICAgICA8aW5wdXQgdHlwZT1cXFwiYnV0dG9uXFxcIiBjbGFzcz1cXFwiYnRuIGJ0bi1wcmltYXJ5XFxcIiBkYXRhLWJpbmQ9XFxcImNsaWNrOiRwYXJlbnQua29BZGROZXdPcGVyYXRpb24sIHZhbHVlOiBpdGVtLmRpc3BsYXlOYW1lXFxcIiAvPlxcbiAgICAgICAgPHA+XFxuICAgICAgICA8c3BhbiBkYXRhLWJpbmQ9XFxcInRleHQ6aXRlbS5kZXNjcmlwdGlvblxcXCI+PC9zcGFuPlxcbiAgICAgICAgPC9wPlxcbiAgICAgICAgPGhyIC8+XFxuICAgIDwvZGl2PlxcbiAgICA8IS0tIC9rbyAtLT5cXG4gIDwvZGl2Plxcbjwvc2NyaXB0PlxcblwiO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vc3JjL3RlbXBsYXRlcy9zdXJ2ZXlsb2dpYy5odG1sXG4vLyBtb2R1bGUgaWQgPSAxMzFcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwibW9kdWxlLmV4cG9ydHMgPSBcIjxzY3JpcHQgdHlwZT1cXFwidGV4dC9odG1sXFxcIiBpZD1cXFwic2UtdGFiLWRlc2lnbmVyXFxcIj5cXG4gICAgPGRpdlxcbiAgICBjbGFzcz1cXFwicm93IHN2ZF9zdXJ2ZXlfZGVzaWduZXJcXFwiXFxuICA+XFxuICAgIDxkaXYgZGF0YS1iaW5kPVxcXCJ2aXNpYmxlOiBrb1Nob3dUb29sYm94XFxcIlxcbiAgICAgIGNsYXNzPVxcXCJjb2wtbGctMiBjb2wtbWQtMiBjb2wtc20tMSBjb2wteHMtMSBzdmRfdG9vbGJveCBzdmQtZGFyay1iZy1jb2xvclxcXCJcXG4gICAgPlxcbiAgICAgIDwhLS0ga28gaWY6IHRvb2xib3gua29IYXNDYXRlZ29yaWVzIC0tPlxcbiAgICAgIDxkaXZcXG4gICAgICAgIGNsYXNzPVxcXCJwYW5lbC1ncm91cFxcXCJcXG4gICAgICAgIHJvbGU9XFxcInRhYmxpc3RcXFwiXFxuICAgICAgICBkYXRhLWJpbmQ9XFxcImZvcmVhY2g6IHRvb2xib3gua29DYXRlZ29yaWVzXFxcIlxcbiAgICAgID5cXG4gICAgICAgIDxkaXYgY2xhc3M9XFxcInBhbmVsIHBhbmVsLWluZm9cXFwiPlxcbiAgICAgICAgICA8ZGl2XFxuICAgICAgICAgICAgY2xhc3M9XFxcInN2ZC10b29sYm94LWNhdGVnb3J5LWhlYWRlclxcXCJcXG4gICAgICAgICAgICByb2xlPVxcXCJ0YWJcXFwiXFxuICAgICAgICAgICAgZGF0YS1iaW5kPVxcXCJjbGljazogZXhwYW5kXFxcIlxcbiAgICAgICAgICA+XFxuICAgICAgICAgICAgPHNwYW5cXG4gICAgICAgICAgICAgIGRhdGEtYmluZD1cXFwiY3NzOiB7ICdzdmQtbWFpbi1jb2xvcic6ICFrb0NvbGxhcHNlZCgpIH0sIHRleHQ6IG5hbWVcXFwiXFxuICAgICAgICAgICAgPjwvc3Bhbj5cXG4gICAgICAgICAgICA8IS0ta28gaWY6ICRwYXJlbnQua29DYW5Db2xsYXBzZUNhdGVnb3JpZXMgLS0+XFxuICAgICAgICAgICAgPCEtLSBrbyBpZjoga29Db2xsYXBzZWQgLS0+XFxuICAgICAgICAgICAgPHN2Zy1pY29uXFxuICAgICAgICAgICAgICBjbGFzcz1cXFwiaWNvbi10b29sYm94LWFycm93XFxcIlxcbiAgICAgICAgICAgICAgcGFyYW1zPVxcXCJpY29uTmFtZTogJ2ljb24tYXJyb3dfZG93bl8xMHgxMCcsIHNpemU6IDEwXFxcIlxcbiAgICAgICAgICAgID48L3N2Zy1pY29uPlxcbiAgICAgICAgICAgIDwhLS0gL2tvIC0tPlxcbiAgICAgICAgICAgIDwhLS0ga28gaWZub3Q6IGtvQ29sbGFwc2VkIC0tPlxcbiAgICAgICAgICAgIDxzdmctaWNvblxcbiAgICAgICAgICAgICAgY2xhc3M9XFxcImljb24tdG9vbGJveC1hcnJvdyBzdmQtcHJpbWFyeS1pY29uXFxcIlxcbiAgICAgICAgICAgICAgcGFyYW1zPVxcXCJpY29uTmFtZTogJ2ljb24tYXJyb3dfdXBfMTB4MTAnLCBzaXplOiAxMFxcXCJcXG4gICAgICAgICAgICA+PC9zdmctaWNvbj5cXG4gICAgICAgICAgICA8IS0tIC9rbyAtLT5cXG4gICAgICAgICAgICA8IS0tIC9rbyAtLT5cXG4gICAgICAgICAgPC9kaXY+XFxuICAgICAgICAgIDxkaXZcXG4gICAgICAgICAgICByb2xlPVxcXCJ0YWJwYW5lbFxcXCJcXG4gICAgICAgICAgICBkYXRhLWJpbmQ9XFxcImNzczogeyAncGFuZWwtY29sbGFwc2UgY29sbGFwc2UnOiBrb0NvbGxhcHNlZH1cXFwiXFxuICAgICAgICAgID5cXG4gICAgICAgICAgICA8IS0tIGtvIGZvcmVhY2g6IGl0ZW1zIC0tPlxcbiAgICAgICAgICAgICAgPCEtLSBrbyB0ZW1wbGF0ZTogeyBuYW1lOiAnc2UtdGFiLWRlc2lnbmVyLWl0ZW0nLCBkYXRhOiAkZGF0YSB9IC0tPjwhLS0gL2tvIC0tPlxcbiAgICAgICAgICAgIDwhLS0gL2tvICAtLT5cXG4gICAgICAgICAgPC9kaXY+XFxuICAgICAgICA8L2Rpdj5cXG4gICAgICA8L2Rpdj5cXG4gICAgICA8IS0tIC9rbyAgLS0+XFxuICAgICAgPCEtLSBrbyBpZjogIXRvb2xib3gua29IYXNDYXRlZ29yaWVzKCkgLS0+XFxuICAgICAgPGRpdlxcbiAgICAgICAgY2xhc3M9XFxcInN2ZF90b29sYm94X3RpdGxlIGhpZGRlbi1zbSBoaWRkZW4teHNcXFwiXFxuICAgICAgICBkYXRhLWJpbmQ9XFxcInRleHQ6ICRyb290LmdldExvY1N0cmluZygnZWQudG9vbGJveCcpXFxcIlxcbiAgICAgID48L2Rpdj5cXG4gICAgICA8IS0tIGtvIGZvcmVhY2g6IHRvb2xib3gua29JdGVtcyAtLT5cXG4gICAgICAgIDwhLS0ga28gdGVtcGxhdGU6IHsgbmFtZTogJ3NlLXRhYi1kZXNpZ25lci1pdGVtJywgZGF0YTogJGRhdGEgfSAtLT48IS0tIC9rbyAtLT5cXG4gICAgICA8IS0tIC9rbyAgLS0+XFxuICAgICAgPCEtLSAva28gIC0tPlxcbiAgICA8L2Rpdj5cXG4gICAgPCEtLSBrbyBpZjoga29TaG93VG9vbGJveCAtLT5cXG4gICAgPHN2ZC1zcGxpdHRlciBwYXJhbXM9XFxcIm1pbkxlZnQ6IDEwMCwgbWluUmlnaHQ6IDYwMFxcXCI+PC9zdmQtc3BsaXR0ZXI+XFxuICAgIDwhLS0gL2tvICAtLT5cXG4gICAgPGRpdlxcbiAgICAgIGNsYXNzPVxcXCJjb2wteHMtMTEgc3ZkX2VkaXRvcnNcXFwiXFxuICAgICAgZGF0YS1iaW5kPVxcXCJjc3M6IHsnY29sLWxnLTcgY29sLW1kLTcgY29sLXNtLTggY29sLXhzLTgnOiAha29IaWRlQWR2YW5jZWRTZXR0aW5ncygpICYmIGtvU2hvd1Rvb2xib3goKSwgJ2NvbC1sZy05IGNvbC1tZC05IGNvbC1zbS05IGNvbC14cy05JzogIWtvSGlkZUFkdmFuY2VkU2V0dGluZ3MoKSAmJiAha29TaG93VG9vbGJveCgpLCAnY29sLWxnLTEwIGNvbC1tZC0xMCBjb2wtc20tMTEgY29sLXhzLTExJzoga29IaWRlQWR2YW5jZWRTZXR0aW5ncygpICYmIGtvU2hvd1Rvb2xib3goKSwgJ2NvbC1sZy0xMiBjb2wtbWQtMTIgY29sLXNtLTEyIGNvbC14cy0xMic6IGtvSGlkZUFkdmFuY2VkU2V0dGluZ3MoKSAmJiAha29TaG93VG9vbGJveCgpLCAnc3ZkX3dpZGUnOiBrb0hpZGVBZHZhbmNlZFNldHRpbmdzfVxcXCJcXG4gICAgPlxcbiAgICAgIDxkaXYgY2xhc3M9XFxcInN2ZF90b29sYmFyXFxcIj5cXG4gICAgICAgIDwhLS0ga28gaWY6IGtvU2hvd1Byb3BlcnR5R3JpZCgpICYmIGtvSGlkZUFkdmFuY2VkU2V0dGluZ3MoKSAgLS0+XFxuICAgICAgICA8ZGl2IGNsYXNzPVxcXCJzdmQtcHJvcGVydHktZ3JpZF9faGVhZGVyXFxcIiBkYXRhLWJpbmQ9XFxcImNsaWNrOiBmdW5jdGlvbigpIHsga29IaWRlQWR2YW5jZWRTZXR0aW5ncyhmYWxzZSk7IH0sIGF0dHI6IHsgdGl0bGU6IGdldExvY1N0cmluZygnZWQuc2hvd09iamVjdFByb3BlcnRpZXMnKSB9XFxcIj5cXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cXFwic3ZkLXByb3BlcnR5LWdyaWRfX2hlYWRlci10aXRsZVxcXCIgZGF0YS1iaW5kPVxcXCJ0ZXh0OiBnZXRMb2NTdHJpbmcoJ2VkLm9wamVjdFByb3BlcnRpZXNIZWFkZXInKVxcXCI+PC9zcGFuPlxcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVxcXCJzdmQtcHJvcGVydHktZ3JpZF9faGVhZGVyLWhpZGUtYnV0dG9uIHN2ZC1oZWFkZXItc2hvdy1idXR0b25cXFwiPjxzdmctaWNvbiBjbGFzcz1cXFwic3ZkLXNlY29uZGFyeS1pY29uXFxcIiBwYXJhbXM9XFxcImljb25OYW1lOiAnaWNvbi1sZWZ0J1xcXCI+PC9zdmctaWNvbj48L3NwYW4+XFxuICAgICAgICA8L2Rpdj5cXG4gICAgICAgIDwhLS0gL2tvIC0tPlxcbiAgICAgICAgPCEtLSBrbyBmb3JlYWNoOiB0b29sYmFySXRlbXMgLS0+XFxuICAgICAgICA8c3BhblxcbiAgICAgICAgICB0YWJpbmRleD1cXFwiMFxcXCJcXG4gICAgICAgICAgY2xhc3M9XFxcInN2ZF9hY3Rpb25cXFwiXFxuICAgICAgICAgIGRhdGEtYmluZD1cXFwiY3NzOiAkZGF0YS5jc3MsIHZpc2libGU6IHZpc2libGUsIGF0dHI6IHsgaWQ6IGlkIH1cXFwiXFxuICAgICAgICA+XFxuICAgICAgICAgIDwhLS0ga28gdGVtcGxhdGU6IHsgbmFtZTogJGRhdGEudGVtcGxhdGUgfHwgJ3N2ZC10b29sYmFyLWJ1dHRvbicsIGRhdGE6ICRkYXRhLmRhdGEgfHwgJGRhdGEgfSAtLT5cXG4gICAgICAgICAgPCEtLSAva28gLS0+XFxuICAgICAgICA8L3NwYW4+XFxuICAgICAgICA8IS0tIC9rbyAtLT5cXG4gICAgICA8L2Rpdj5cXG4gICAgICA8cGFnZXMtZWRpdG9yIHBhcmFtcz1cXFwiZWRpdG9yOiRkYXRhXFxcIiBkYXRhLWJpbmQ9XFxcInZpc2libGU6IGtvU2hvd1BhZ2VzVG9vbGJveFxcXCI+XFxuICAgICAgPC9wYWdlcy1lZGl0b3I+XFxuICAgICAgPGRpdlxcbiAgICAgICAgY2xhc3M9XFxcInN2ZF9xdWVzdGlvbnNfZWRpdG9yIHN2ZC1saWdodC1iZy1jb2xvclxcXCJcXG4gICAgICAgIGlkPVxcXCJzY3JvbGxhYmxlRGl2XFxcIlxcbiAgICAgICAgZGF0YS1iaW5kPVxcXCJzdHlsZTogeyBoZWlnaHQ6IGtvRGVzaWduZXJIZWlnaHQgfSwgZXZlbnQ6IHsgZHJhZ292ZXI6IGRyYWdPdmVyUXVlc3Rpb25zRWRpdG9yLCBkcm9wOiBkcm9wT25RdWVzdGlvbnNFZGl0b3IgfVxcXCJcXG4gICAgICA+XFxuICAgICAgICA8ZGl2IGlkPVxcXCJzdXJ2ZXlqc1xcXCI+PC9kaXY+XFxuICAgICAgICA8IS0tIGtvIGlmOiBpc0N1cnJlbnRQYWdlRW1wdHkgLS0+XFxuICAgICAgICA8IS0tIGtvIHRlbXBsYXRlOiBcXFwic2UtZW1wdHktcGxhY2Vob2xkZXJcXFwiIC0tPlxcbiAgICAgICAgPCEtLSAva28gLS0+XFxuICAgICAgICA8IS0tIC9rbyAtLT5cXG4gICAgICA8L2Rpdj5cXG4gICAgPC9kaXY+XFxuICAgIDxzdmQtc3BsaXR0ZXIgcGFyYW1zPVxcXCJtaW5MZWZ0OiA2MDAsIG1pblJpZ2h0OiAxNTBcXFwiPjwvc3ZkLXNwbGl0dGVyPlxcbiAgICA8ZGl2XFxuICAgICAgY2xhc3M9XFxcImNvbC1sZy0zIGNvbC1tZC0zIGNvbC1zbS0zIGhpZGRlbi14cyBzdmRfcHJvcGVydGllcyBzdmQtbGlnaHQtYm9yZGVyLWNvbG9yIHN2ZC1kYXJrLWJnLWNvbG9yXFxcIlxcbiAgICAgIGRhdGEtYmluZD1cXFwidmlzaWJsZTogIWtvSGlkZUFkdmFuY2VkU2V0dGluZ3MoKVxcXCJcXG4gICAgPlxcbiAgICAgIDxkaXYgY2xhc3M9XFxcInN2ZC1wcm9wZXJ0eS1ncmlkX19oZWFkZXJcXFwiPlxcbiAgICAgICAgPHNwYW4gY2xhc3M9XFxcInN2ZC1wcm9wZXJ0eS1ncmlkX19oZWFkZXItdGl0bGVcXFwiIGRhdGEtYmluZD1cXFwidGV4dDogZ2V0TG9jU3RyaW5nKCdlZC5vcGplY3RQcm9wZXJ0aWVzSGVhZGVyJylcXFwiPjwvc3Bhbj5cXG4gICAgICAgIDxzcGFuIGNsYXNzPVxcXCJzdmQtcHJvcGVydHktZ3JpZF9faGVhZGVyLWhpZGUtYnV0dG9uIHN2ZC1oZWFkZXItaGlkZS1idXR0b25cXFwiIGRhdGEtYmluZD1cXFwiY2xpY2s6IGZ1bmN0aW9uKCkgeyBrb0hpZGVBZHZhbmNlZFNldHRpbmdzKHRydWUpOyB9LCBhdHRyOiB7IHRpdGxlOiAkcm9vdC5nZXRMb2NTdHJpbmcoJ2VkLmhpZGVPYmplY3RQcm9wZXJ0aWVzJykgfVxcXCI+PHN2Zy1pY29uIGNsYXNzPVxcXCJzdmQtc2Vjb25kYXJ5LWljb25cXFwiIHBhcmFtcz1cXFwiaWNvbk5hbWU6ICdpY29uLXJpZ2h0J1xcXCI+PC9zdmctaWNvbj48L3NwYW4+XFxuICAgICAgPC9kaXY+XFxuICAgICAgPGRpdiBjbGFzcz1cXFwic3ZkX29iamVjdF9zZWxlY3RvciBzdmQtbGlnaHQtYm9yZGVyLWNvbG9yXFxcIj5cXG4gICAgICAgIDxkaXYgY2xhc3M9XFxcInN2ZF9jdXN0b21fc2VsZWN0XFxcIj5cXG4gICAgICAgICAgPHNlbGVjdFxcbiAgICAgICAgICAgIG9ubW91c2V3aGVlbD1cXFwicmV0dXJuIGZhbHNlO1xcXCJcXG4gICAgICAgICAgICBpZD1cXFwib2JqZWN0U2VsZWN0b3JcXFwiXFxuICAgICAgICAgICAgY2xhc3M9XFxcImZvcm0tY29udHJvbFxcXCJcXG4gICAgICAgICAgICBkYXRhLWJpbmQ9XFxcIm9wdGlvbnM6IGtvT2JqZWN0cywgb3B0aW9uc1RleHQ6ICd0ZXh0JywgdmFsdWU6IGtvU2VsZWN0ZWRPYmplY3RcXFwiXFxuICAgICAgICAgID48L3NlbGVjdD5cXG4gICAgICAgIDwvZGl2PlxcbiAgICAgICAgPHNwYW5cXG4gICAgICAgICAgZGF0YS1iaW5kPVxcXCJjbGljazogZWRpdEN1cnJlbnRPYmplY3QsIGF0dHI6IHsgdGl0bGU6ICRyb290LmdldExvY1N0cmluZygnZWQuZWRpdFNlbE9iamVjdCcpfVxcXCJcXG4gICAgICAgID5cXG4gICAgICAgICAgPHN2Zy1pY29uXFxuICAgICAgICAgICAgY2xhc3M9XFxcInN2ZC1wcmltYXJ5LWljb24gaWNvbi1lZGl0XFxcIlxcbiAgICAgICAgICAgIHBhcmFtcz1cXFwiaWNvbk5hbWU6ICdpY29uLWVkaXQnLCBzaXplOjI0XFxcIlxcbiAgICAgICAgICA+PC9zdmctaWNvbj5cXG4gICAgICAgIDwvc3Bhbj5cXG4gICAgICA8L2Rpdj5cXG4gICAgICA8ZGl2XFxuICAgICAgICBjbGFzcz1cXFwic3ZkX29iamVjdF9lZGl0b3JcXFwiXFxuICAgICAgICBkYXRhLWJpbmQ9XFxcInN0eWxlOiB7aGVpZ2h0OiBrb0Rlc2lnbmVySGVpZ2h0fVxcXCJcXG4gICAgICA+XFxuICAgICAgICA8ZGl2XFxuICAgICAgICAgIGRhdGEtYmluZD1cXFwidGVtcGxhdGU6IHsgbmFtZTogJ29iamVjdGVkaXRvcicsIGRhdGE6IHNlbGVjdGVkT2JqZWN0RWRpdG9yIH1cXFwiXFxuICAgICAgICA+PC9kaXY+XFxuICAgICAgPC9kaXY+XFxuICAgIDwvZGl2PlxcbiAgPC9kaXY+XFxuPC9zY3JpcHQ+XFxuPHNjcmlwdCB0eXBlPVxcXCJ0ZXh0L2h0bWxcXFwiIGlkPVxcXCJzZS10YWItdGVzdFxcXCI+XFxuICA8ZGl2IGRhdGEtYmluZD1cXFwic3R5bGU6IHt3aWR0aDoga29UZXN0U3VydmV5V2lkdGh9XFxcIj5cXG4gICAgPGRpdiBpZD1cXFwic3VydmV5anNFeGFtcGxlXFxcIiBkYXRhLWJpbmQ9XFxcInRlbXBsYXRlOiB7IG5hbWU6ICdzdXJ2ZXlsaXZlJywgZGF0YTogc3VydmV5TGl2ZSB9XFxcIj48L2Rpdj5cXG4gIDwvZGl2Plxcbjwvc2NyaXB0PlxcbjxzY3JpcHQgdHlwZT1cXFwidGV4dC9odG1sXFxcIiBpZD1cXFwic2UtZW1wdHktcGxhY2Vob2xkZXJcXFwiPlxcbiAgPGRpdiBjbGFzcz1cXFwic3ZkLXN1cnZleS1wbGFjZWhvbGRlci1yb290XFxcIj5cXG4gICAgPGRpdiBjbGFzcz1cXFwic3ZkLXN1cnZleS1wbGFjZWhvbGRlclxcXCI+XFxuICAgICAgPCEtLSBrbyBpZjogc2hvd0V4dGVybmFsSGVscExpbmsgLS0+XFxuICAgICAgPGRpdiBjbGFzcz1cXFwic3ZkLXN1cnZleS1nYWxsZXJ5XFxcIj5cXG4gICAgICAgIDxhIGRhdGEtYmluZD1cXFwiYXR0cjogeyBocmVmOiAkcm9vdC5nZXRMb2NTdHJpbmcoJ3N1cnZleS5leHRlcm5hbEhlbHBMaW5rVXJsJykgfVxcXCI+XFxuICAgICAgICAgIDxpbWcgc3JjPVxcXCJcIiArIHJlcXVpcmUoXCIuLi9pbWFnZXMvWW91VHViZS5wbmdcIikgKyBcIlxcXCIvPlxcbiAgICAgICAgICA8c3BhbiBkYXRhLWJpbmQ9XFxcInRleHQ6ICRyb290LmdldExvY1N0cmluZygnc3VydmV5LmV4dGVybmFsSGVscExpbmsnKVxcXCI+PC9zcGFuPlxcbiAgICAgICAgPC9hPlxcbiAgICAgIDwvZGl2PlxcbiAgICAgIDwhLS0gL2tvIC0tPlxcbiAgICAgIDxkaXYgY2xhc3M9XFxcImVtcHR5LW1lc3NhZ2VcXFwiIGRhdGEtYmluZD1cXFwidGV4dDogJHJvb3QuZ2V0TG9jU3RyaW5nKCdzdXJ2ZXkuZHJvcFF1ZXN0aW9uJylcXFwiPjwvZGl2PlxcbiAgICA8L2Rpdj5cXG4gIDwvZGl2Plxcbjwvc2NyaXB0PlxcbjxzY3JpcHQgdHlwZT1cXFwidGV4dC9odG1sXFxcIiBpZD1cXFwic2UtdGFiLWRlc2lnbmVyLWl0ZW1cXFwiPlxcbiAgICA8ZGl2XFxuICAgIHRhYmluZGV4PVxcXCIwXFxcIlxcbiAgICBkcmFnZ2FibGU9XFxcInRydWVcXFwiXFxuICAgIGNsYXNzPVxcXCJzdmRfdG9vbGJveF9pdGVtIHN2ZC1saWdodC1ib3JkZXItY29sb3JcXFwiXFxuICAgIGRhdGEtYmluZD1cXFwiYXR0cjoge3RpdGxlOiAgdG9vbHRpcH0sIGNzczogJ3N2ZF90b29sYm94X2l0ZW1fJyArIGljb25OYW1lLCBrZXkyY2xpY2ssIGNsaWNrTm9Gb2N1czogJHJvb3QuY2xpY2tUb29sYm94SXRlbSwgZXZlbnQ6e2RyYWdzdGFydDogZnVuY3Rpb24oZWwsIGUpIHsgJHJvb3QuZHJhZ2dpbmdUb29sYm94SXRlbSgkZGF0YSwgZSk7IHJldHVybiB0cnVlO30sIGRyYWdlbmQ6IGZ1bmN0aW9uKGVsLCBlKSB7ICRyb290LmRyYWdFbmQoKTsgfX1cXFwiXFxuICA+XFxuICAgIDxzcGFuPlxcbiAgICAgIDxzdmctaWNvbiBwYXJhbXM9XFxcImljb25OYW1lOiBpY29uTmFtZVxcXCI+PC9zdmctaWNvbj5cXG4gICAgPC9zcGFuPlxcbiAgICA8c3BhblxcbiAgICAgIGNsYXNzPVxcXCJzdmRfdG9vbGJveF9pdGVtX3RleHQgaGlkZGVuLXNtIGhpZGRlbi14c1xcXCJcXG4gICAgICBkYXRhLWJpbmQ9XFxcInRleHQ6dGl0bGVcXFwiXFxuICAgID48L3NwYW4+XFxuICA8L2Rpdj5cXG48L3NjcmlwdD5cXG5cIjtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL3NyYy90ZW1wbGF0ZXMvdGFicy5odG1sXG4vLyBtb2R1bGUgaWQgPSAxMzJcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwibW9kdWxlLmV4cG9ydHMgPSBcIjxzY3JpcHQgdHlwZT1cXFwidGV4dC9odG1sXFxcIiBpZD1cXFwic3ZkLXRvb2xiYXItYnV0dG9uXFxcIj5cXG4gICAgPGJ1dHRvbiB0eXBlPVxcXCJidXR0b25cXFwiIGNsYXNzPVxcXCJidG4gYnRuLXByaW1hcnlcXFwiIGRhdGEtYmluZD1cXFwiZW5hYmxlOiAkZGF0YS5lbmFibGVkIHx8IHRydWUsIGNsaWNrOiBhY3Rpb24sIGNzczogJGRhdGEuaW5uZXJDc3NcXFwiPlxcbiAgICAgICAgPCEtLSBrbyBpZjogJGRhdGEuaWNvbiAtLT5cXG4gICAgICAgIDxkaXYgY2xhc3M9XFxcInN2ZC10b29sYmFyLWJ1dHRvbl9faW1hZ2VcXFwiPlxcbiAgICAgICAgICAgIDxzdmctaWNvbiBjbGFzcz1cXFwic3ZkLXN2Zy1pY29uIGljb24td2hpdGVcXFwiIHBhcmFtcz1cXFwiaWNvbk5hbWU6IGljb24sIHNpemU6IDEyXFxcIj48L3N2Zy1pY29uPlxcbiAgICAgICAgPC9kaXY+XFxuICAgICAgICA8IS0tIC9rbyAtLT5cXG4gICAgICAgIDwhLS0ga28gaWY6ICRkYXRhLnNob3dUaXRsZSA9PT0gdW5kZWZpbmVkIHx8ICghISRkYXRhLmljb24gJiYgIWtvLnVud3JhcCgkZGF0YS5zaG93VGl0bGUpKSAtLT5cXG4gICAgICAgIDxkaXYgY2xhc3M9XFxcInN2ZC10b29sYmFyLWJ1dHRvbl9fdGl0bGVcXFwiPlxcbiAgICAgICAgICAgIDxzcGFuIGRhdGEtYmluZD1cXFwidGV4dDogdGl0bGVcXFwiPjwvc3Bhbj5cXG4gICAgICAgIDwvZGl2PlxcbiAgICAgICAgPCEtLSAva28gLS0+XFxuICAgIDwvYnV0dG9uPlxcbjwvc2NyaXB0PlxcbjxzY3JpcHQgdHlwZT1cXFwidGV4dC9odG1sXFxcIiBpZD1cXFwic3ZkLXRvb2xiYXItb3B0aW9uc1xcXCI+XFxuICAgIDxkaXYgY2xhc3M9XFxcImRkbWVudS1jb250YWluZXIgdG9vbGJhci1vcHRpb25zIGJ0bi1ncm91cCBpbmxpbmVcXFwiPlxcbiAgICAgICAgPGRpdiBzdHlsZT1cXFwiLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOnJnYmEoMCwwLDAsMClcXFwiIGRhdGEtYmluZD1cXFwidHJ1ZWNsaWNrXFxcIj48L2Rpdj5cXG5cXG4gICAgICAgIDxkaXYgY2xhc3M9XFxcImRkbWVudVxcXCI+XFxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XFxcImJ0biBidG4tcHJpbWFyeVxcXCIgdGFiaW5kZXg9XFxcIjBcXFwiPlxcbiAgICAgICAgICAgICAgICA8c3BhbiBkYXRhLWJpbmQ9XFxcInRleHQ6IHRpdGxlXFxcIj48L3NwYW4+XFxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVxcXCJjYXJldFxcXCI+PC9zcGFuPlxcbiAgICAgICAgICAgIDwvc3Bhbj5cXG4gICAgICAgICAgICA8ZGl2IHRhYmluZGV4PVxcXCIwXFxcIiBkYXRhLWJpbmQ9XFxcInRydWVjbGlja1xcXCI+PC9kaXY+XFxuICAgICAgICAgICAgPHVsIGNsYXNzPVxcXCJzdmQtbGlnaHQtYmctY29sb3JcXFwiPlxcbiAgICAgICAgICAgICAgICA8IS0tIGtvIGZvcmVhY2g6IGl0ZW1zIC0tPlxcbiAgICAgICAgICAgICAgICA8bGkgZGF0YS1iaW5kPVxcXCJjc3M6ICRkYXRhLmNzc1xcXCI+XFxuICAgICAgICAgICAgICAgICAgICA8YSBocmVmPVxcXCIjXFxcIiBkYXRhLWJpbmQ9XFxcImNsaWNrOiBhY3Rpb24sIHRleHQ6IHRpdGxlXFxcIj48L2E+XFxuICAgICAgICAgICAgICAgIDwvbGk+XFxuICAgICAgICAgICAgICAgIDwhLS0gL2tvIC0tPlxcbiAgICAgICAgICAgIDwvdWw+XFxuICAgICAgICA8L2Rpdj5cXG4gICAgPC9kaXY+XFxuPC9zY3JpcHQ+XFxuPHNjcmlwdCB0eXBlPVxcXCJ0ZXh0L2h0bWxcXFwiIGlkPVxcXCJzdmQtdG9vbGJhci1zdGF0ZVxcXCI+XFxuICAgIDxzcGFuIGNsYXNzPVxcXCJpY29uXFxcIj5cXG4gICAgICAgIDxzdmctaWNvbiBjbGFzcz1cXFwiaWNvbi1zdGF0dXNcXFwiIHBhcmFtcz1cXFwiaWNvbk5hbWU6IGlubmVyQ3NzLCBzaXplOiAyNFxcXCI+PC9zdmctaWNvbj5cXG4gICAgPC9zcGFuPlxcbiAgICA8c3BhbiBjbGFzcz1cXFwic3ZkLWxpZ2h0LXRleHQtY29sb3JcXFwiIGRhdGEtYmluZD1cXFwidGV4dDogdGl0bGVcXFwiPjwvc3Bhbj5cXG48L3NjcmlwdD5cIjtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL3NyYy90ZW1wbGF0ZXMvdG9vbGJhci5odG1sXG4vLyBtb2R1bGUgaWQgPSAxMzNcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwibW9kdWxlLmV4cG9ydHMgPSBcIjxzY3JpcHQgdHlwZT1cXFwidGV4dC9odG1sXFxcIiBpZD1cXFwidHJhbnNsYXRpb25cXFwiPlxcbiAgPGRpdiBjbGFzcz1cXFwiZm9ybS1ncm91cCBzdmQtdHJhbnNsYXRpb24tdGFiXFxcIj5cXG4gICAgICA8ZGl2IGNsYXNzPVxcXCJmb3JtLWdyb3VwIHN2ZC1sYW5ndWFnZS1zZWxlY3RcXFwiPlxcbiAgICAgIDxkaXYgY2xhc3M9XFxcInN2ZF9jdXN0b21fc2VsZWN0IHN2ZC1saWdodC1iZy1jb2xvciBzdmQtbGlnaHQtYm9yZGVyLWNvbG9yXFxcIj5cXG4gICAgICAgICAgPHNlbGVjdCBvbm1vdXNld2hlZWw9XFxcInJldHVybiBmYWxzZTtcXFwiIGRhdGEtYmluZD1cXFwib3B0aW9uczoga29BdmFpbGFibGVMYW5ndWFnZXMsIHZhbHVlOiBrb1NlbGVjdGVkTGFuZ3VhZ2VUb0FkZCwgb3B0aW9uc1RleHQ6J3RleHQnLCBvcHRpb25zQ2FwdGlvbjogJGRhdGEuc2VsZWN0TGFuZ3VhZ2VPcHRpb25zQ2FwdGlvblxcXCI+PC9zZWxlY3Q+XFxuICAgICAgPC9kaXY+XFxuICAgICAgPGRpdiBjbGFzcz1cXFwic3ZkLXRyYW5zbGF0aW9uLXRhYi1zaG93LWFsbC1zdHJpbmdzLWNvbnRhaW5lclxcXCI+XFxuICAgICAgPCEtLSBrbyB0ZW1wbGF0ZTogeyBuYW1lOiAncHJvcGVydHllZGl0b3ItYm9vbGVhbicsIGRhdGE6IHsgIGtvVmFsdWU6IGtvU2hvd0FsbFN0cmluZ3MsIGRpc3BsYXlOYW1lOiAkZGF0YS5zaG93QWxsU3RyaW5nc1RleHQsIGlzRGlwbGF5TmFtZVZpc2libGU6IHRydWUgfSB9IC0tPlxcbiAgICAgIDwhLS0gL2tvIC0tPlxcbiAgICAgIDwvZGl2PlxcbiAgICAgIDxkaXYgY2xhc3M9XFxcInN2ZF9jdXN0b21fc2VsZWN0IHN2ZC1saWdodC1iZy1jb2xvciBzdmQtbGlnaHQtYm9yZGVyLWNvbG9yXFxcIj5cXG4gICAgICAgICAgPHNlbGVjdCBvbm1vdXNld2hlZWw9XFxcInJldHVybiBmYWxzZTtcXFwiIGRhdGEtYmluZD1cXFwib3B0aW9uczoga29GaWx0ZXJlZFBhZ2VzLCB2YWx1ZToga29GaWx0ZXJlZFBhZ2UsIG9wdGlvbnNWYWx1ZTogJ3ZhbHVlJywgb3B0aW9uc1RleHQ6J3RleHQnXFxcIj48L3NlbGVjdD5cXG4gICAgICA8L2Rpdj5cXG4gICAgICA8L2Rpdj5cXG4gICAgICA8ZGl2PlxcbiAgICAgIDwhLS0ga28gZm9yZWFjaDoge2RhdGE6ICRkYXRhLmtvTG9jYWxlcywgYXM6ICdpdGVtJyB9IC0tPlxcbiAgICAgIDxsYWJlbCBkYXRhLWJpbmQ9XFxcInZpc2libGU6ICEhaXRlbS5sb2NhbGUgJiYgaXRlbS5rb0VuYWJsZWQoKVxcXCI+XFxuICAgICAgPCEtLSBrbyB0ZW1wbGF0ZTogeyBuYW1lOiAncHJvcGVydHllZGl0b3ItYm9vbGVhbicsIGRhdGE6IHsgIGtvVmFsdWU6IGl0ZW0ua29WaXNpYmxlLCBkaXNwbGF5TmFtZTogJHBhcmVudC5nZXRMb2NhbGVOYW1lKCRkYXRhLmxvY2FsZSksIGlzRGlwbGF5TmFtZVZpc2libGU6IHRydWUgfSB9IC0tPlxcbiAgICAgIDwhLS0gL2tvIC0tPlxcbiAgICAgIDwvbGFiZWw+XFxuICAgICAgPCEtLSAva28gLS0+XFxuICAgICAgPC9kaXY+XFxuICAgICAgPGRpdiBjbGFzcz1cXFwiZm9ybS1ncm91cFxcXCI+XFxuICAgICAgICAgIDxidXR0b24gY2xhc3M9XFxcImJ0biBidG4tcHJpbWFyeVxcXCIgIHR5cGU9XFxcImJ1dHRvblxcXCIgZGF0YS1iaW5kPVxcXCJ2aXNpYmxlOiRkYXRhLmtvQ2FuTWVyZ2VMb2NhbGVXaXRoRGVmYXVsdCwgdGV4dDokZGF0YS5rb01lcmdlTG9jYWxlV2l0aERlZmF1bHRUZXh0LCBjbGljazokZGF0YS5rb01lcmdlTG9jYWxlV2l0aERlZmF1bHRcXFwiPjwvYnV0dG9uPlxcbiAgICAgICAgICA8YnV0dG9uIGNsYXNzPVxcXCJidG4gYnRuLXByaW1hcnlcXFwiICB0eXBlPVxcXCJidXR0b25cXFwiIGRhdGEtYmluZD1cXFwidGV4dDokZGF0YS5leHBvcnRUb0NTVlRleHQsIGNsaWNrOiRkYXRhLmtvRXhwb3J0VG9TQ1ZGaWxlXFxcIj48L2J1dHRvbj5cXG4gICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cXFwiYnRuIGJ0bi1wcmltYXJ5XFxcIiAgdHlwZT1cXFwiYnV0dG9uXFxcIiBvbmNsaWNrPVxcXCJ0aGlzLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdpbnB1dCcpWzBdLmNsaWNrKCk7XFxcIj5cXG4gICAgICAgICAgPGlucHV0IHR5cGU9XFxcImZpbGVcXFwiIHN0eWxlPVxcXCJkaXNwbGF5Om5vbmU7XFxcIiBhY2NlcHQ9XFxcIi5jc3ZcXFwiIGRhdGEtYmluZD1cXFwiZXZlbnQ6IHsgY2hhbmdlOiBmdW5jdGlvbigpIHsgJGRhdGEua29JbXBvcnRGcm9tU0NWRmlsZSgkZWxlbWVudCkgfSB9XFxcIiAvPlxcbiAgICAgICAgICA8c3BhbiBkYXRhLWJpbmQ9XFxcInRleHQ6JGRhdGEuaW1wb3J0RnJvbUNTVlRleHRcXFwiPjwvc3Bhbj5cXG4gICAgICAgICAgPC9idXR0b24+XFxuICAgICAgPC9kaXY+XFxuICAgICAgPGRpdiBjbGFzcz1cXFwic3ZkLXRyYW5zbGF0aW9uLW5vLXN0cmluZ3Mgc3ZkLWxpZ2h0LXRleHQtY29sb3JcXFwiIGRhdGEtYmluZD1cXFwidmlzaWJsZTokZGF0YS5rb0lzRW1wdHlcXFwiPlxcbiAgICAgICAgICA8c3BhbiBkYXRhLWJpbmQ9XFxcInRleHQ6JGRhdGEubm9TdHJpbmdzVGV4dFxcXCI+PC9zcGFuPlxcbiAgICAgIDwvZGl2PlxcbiAgICAgIDwhLS0ga28gaWZub3Q6ICRkYXRhLmtvSXNFbXB0eSAtLT5cXG4gICAgICA8IS0tIGtvIHRlbXBsYXRlOiB7IG5hbWU6IFxcXCJ0cmFuc2xhdGlvbi1ncm91cFxcXCIsIGRhdGE6ICRkYXRhLmtvUm9vdCB9IC0tPlxcbiAgICAgIDwhLS0gL2tvIC0tPlxcbiAgICAgIDwhLS0gL2tvIC0tPlxcbiAgPC9kaXY+XFxuPC9zY3JpcHQ+XFxuPHNjcmlwdCB0eXBlPVxcXCJ0ZXh0L2h0bWxcXFwiIGlkPVxcXCJ0cmFuc2xhdGlvbi1ncm91cFxcXCI+XFxuICA8ZGl2IGNsYXNzPVxcXCJzdmQtdHJhbnNsYXRpb24tc3RyaW5ncyBzdmQtbGlnaHQtYm9yZGVyLWNvbG9yIHN2ZC1saWdodC1iZy1jb2xvclxcXCI+XFxuICAgICAgPHRhYmxlIGNsYXNzPVxcXCJzdmRfaXRlbXNfdGFibGVcXFwiIGRhdGEtYmluZD1cXFwidmlzaWJsZTogJGRhdGEubG9jSXRlbXMubGVuZ3RoID4gMFxcXCI+XFxuICAgICAgICAgIDx0aGVhZD5cXG4gICAgICAgICAgICAgIDx0cj5cXG4gICAgICAgICAgICAgICAgICA8dGg+PC90aD5cXG4gICAgICAgICAgICAgICAgICA8IS0tIGtvIGZvcmVhY2g6ICRkYXRhLmtvTG9jYWxlcyAtLT5cXG4gICAgICAgICAgICAgICAgICA8dGggZGF0YS1iaW5kPVxcXCJ2aXNpYmxlOiAkZGF0YS5rb1Zpc2libGUsIHRleHQ6ICRwYXJlbnQuZ2V0TG9jYWxlTmFtZSgkZGF0YS5sb2NhbGUpLCBzdHlsZToge3dpZHRoOiAkcGFyZW50LmxvY1dpZHRofVxcXCI+PC90aD5cXG4gICAgICAgICAgICAgICAgICA8IS0tIC9rbyAtLT5cXG4gICAgICAgICAgICAgIDwvdHI+XFxuICAgICAgICAgIDwvdGhlYWQ+XFxuICAgICAgICAgIDx0Ym9keSBkYXRhLWJpbmQ9XFxcImZvcmVhY2g6IHtkYXRhOiAkZGF0YS5sb2NJdGVtcywgYXM6ICdpdGVtJyB9XFxcIj5cXG4gICAgICAgICAgICAgIDx0cj5cXG4gICAgICAgICAgICAgICAgICA8dGQgc3R5bGU9XFxcIm1heC13aWR0aDogMjAwcHg7IG1pbi13aWR0aDoxMDBweFxcXCI+PHNwYW4gZGF0YS1iaW5kPVxcXCJ0ZXh0Oml0ZW0udGV4dFxcXCI+PC9zcGFuPjwvdGQ+XFxuICAgICAgICAgICAgICAgICAgPCEtLSBrbyBmb3JlYWNoOiAkcGFyZW50LmtvTG9jYWxlcyAtLT5cXG4gICAgICAgICAgICAgICAgICA8dGQgZGF0YS1iaW5kPVxcXCJ2aXNpYmxlOiAkZGF0YS5rb1Zpc2libGUsIHN0eWxlOiB7d2lkdGg6ICRkYXRhLmtvVmlzaWJsZSA/ICRwYXJlbnQubG9jV2lkdGggOiAnMHB4J31cXFwiPlxcbiAgICAgICAgICAgICAgICAgICAgICA8dGV4dGFyZWEgY2xhc3M9XFxcImZvcm0tY29udHJvbFxcXCIgc3R5bGU9XFxcIndpZHRoOjEwMCVcXFwiIGRhdGEtYmluZD1cXFwidmlzaWJsZTogJGRhdGEua29WaXNpYmxlLCB2YWx1ZTppdGVtLmtvVmFsdWUoJGRhdGEubG9jYWxlKSwgYXR0cjoge3BsYWNlaG9sZGVyOiAhJGRhdGEubG9jYWxlPyBpdGVtLmRlZmF1bHRWYWx1ZSA6ICcnfVxcXCI+PC90ZXh0YXJlYT5cXG4gICAgICAgICAgICAgICAgICA8L3RkPlxcbiAgICAgICAgICAgICAgICAgIDwhLS0gL2tvIC0tPlxcbiAgICAgICAgICAgICAgPC90cj5cXG4gICAgICAgICAgPC90Ym9keT5cXG4gICAgICA8L3RhYmxlPlxcblxcbiAgICAgIDxkaXYgY2xhc3M9XFxcInN2ZC10cmFuc2xhdGlvbi1wYW5lbC1zdHJpbmdzXFxcIiBkYXRhLWJpbmQ9XFxcImZvcmVhY2g6IHtkYXRhOiAkZGF0YS5ncm91cHMsIGFzOiAnZ3JvdXAnIH1cXFwiPlxcbiAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJzdmQtdG9vbGJveC1jYXRlZ29yeS1oZWFkZXJcXFwiIHJvbGU9XFxcInRhYlxcXCIgZGF0YS1iaW5kPVxcXCJjbGljazogZnVuY3Rpb24oKXsgZ3JvdXAua29FeHBhbmRlZCghZ3JvdXAua29FeHBhbmRlZCgpKX1cXFwiPlxcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XFxcInN2ZC10cmFuc2xhdGlvbi1wYW5lbC1zdHJpbmdzLXRpdGxlXFxcImRhdGEtYmluZD1cXFwiY3NzOiB7ICdzdmQtbWFpbi1jb2xvcic6IGdyb3VwLmtvRXhwYW5kZWQoKSB9LCB0ZXh0OiBncm91cC5uYW1lXFxcIj48L3NwYW4+XFxuICAgICAgICAgICAgICA8IS0tIGtvIGlmbm90OiBrb0V4cGFuZGVkIC0tPlxcbiAgICAgICAgICAgICAgPHN2Zy1pY29uIGNsYXNzPVxcXCJpY29uLXRvb2xib3gtYXJyb3dcXFwiIHBhcmFtcz1cXFwiaWNvbk5hbWU6ICdpY29uLWFycm93X2Rvd25fMTB4MTAnLCBzaXplOiAxMFxcXCI+PC9zdmctaWNvbj5cXG4gICAgICAgICAgICAgIDwhLS0gL2tvIC0tPlxcbiAgICAgICAgICAgICAgPCEtLSBrbyBpZjoga29FeHBhbmRlZCAtLT5cXG4gICAgICAgICAgICAgIDxzdmctaWNvbiBjbGFzcz1cXFwiaWNvbi10b29sYm94LWFycm93IHN2ZC1wcmltYXJ5LWljb25cXFwiIHBhcmFtcz1cXFwiaWNvbk5hbWU6ICdpY29uLWFycm93X3VwXzEweDEwJywgc2l6ZTogMTBcXFwiPjwvc3ZnLWljb24+XFxuICAgICAgICAgICAgICA8IS0tIC9rbyAtLT5cXG4gICAgICAgICAgPC9kaXY+XFxuICAgICAgICAgIDxkaXYgZGF0YS1iaW5kPVxcXCJ2aXNpYmxlOiBrb0V4cGFuZGVkXFxcIj5cXG4gICAgICAgICAgPCEtLSBrbyB0ZW1wbGF0ZTogeyBuYW1lOiBcXFwidHJhbnNsYXRpb24tZ3JvdXBcXFwiLCBkYXRhOiBncm91cCB9IC0tPlxcbiAgICAgICAgICA8IS0tIC9rbyAtLT5cXG4gICAgICAgICAgPGRpdj5cXG4gICAgICA8L2Rpdj5cXG4gIDwvZGl2Plxcbjwvc2NyaXB0PlxcblwiO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vc3JjL3RlbXBsYXRlcy90cmFuc2xhdGlvbi5odG1sXG4vLyBtb2R1bGUgaWQgPSAxMzRcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwibW9kdWxlLmV4cG9ydHMgPSBcIjxkaXY+XFxuICAgIDwhLS0ga28gZm9yZWFjaDogYWN0aW9ucyAtLT5cXG4gICAgPCEtLSBrbyBpZjogISRkYXRhLnRlbXBsYXRlIC0tPlxcbiAgICA8c3BhbiBjbGFzcz1cXFwic3ZkYV9xdWVzdGlvbl9hY3Rpb24gc3ZkLW1haW4tY29sb3JcXFwiIGRhdGEtYmluZD1cXFwia2V5MmNsaWNrLCBjbGlja05vRm9jdXM6IGZ1bmN0aW9uKCkgeyBvbkNsaWNrKCRwYXJlbnQucXVlc3Rpb24pOyB9LCBhdHRyOiB7dGl0bGU6IHRleHQsIHRhYmluZGV4OiAkZGF0YS5uZWVkRm9jdXMgPT09IHVuZGVmaW5lZCB8fCAhISRkYXRhLm5lZWRGb2N1cyA/IDAgOiB1bmRlZmluZWQgfVxcXCI+XFxuICAgICAgICA8c3Bhbj5cXG4gICAgICAgICAgICA8c3ZnLWljb24gY2xhc3M9XFxcInN2ZC1wcmltYXJ5LWljb25cXFwiIGRhdGEtYmluZD1cXFwiY3NzOiAkcGFyZW50LmdldFN0eWxlKCRkYXRhKVxcXCIgcGFyYW1zPVxcXCJpY29uTmFtZTogJHBhcmVudC5nZXRTdHlsZSgkZGF0YSlcXFwiPjwvc3ZnLWljb24+XFxuICAgICAgICA8L3NwYW4+XFxuICAgICAgICA8c3BhbiBkYXRhLWJpbmQ9XFxcInRleHQ6ICRkYXRhLmhhc1RpdGxlID8gdGV4dDogJydcXFwiPjwvc3Bhbj5cXG4gICAgPC9zcGFuPlxcbiAgICA8IS0tIC9rbyAtLT5cXG4gICAgPCEtLSBrbyBpZjogISEkZGF0YS50ZW1wbGF0ZSAtLT5cXG4gICAgPCEtLSBrbyB0ZW1wbGF0ZTogdGVtcGxhdGUgLS0+XFxuICAgIDwhLS0gL2tvIC0tPlxcbiAgICA8IS0tIC9rbyAtLT5cXG4gICAgPCEtLSAva28gLS0+XFxuPC9kaXY+XCI7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2h0bWwtbG9hZGVyP2ludGVycG9sYXRlIS4vfi92YWwtbG9hZGVyIS4vc3JjL2Fkb3JuZXJzL2Zsb3dwYW5lbC1hY3Rpb25zLmh0bWxcbi8vIG1vZHVsZSBpZCA9IDEzNVxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJtb2R1bGUuZXhwb3J0cyA9IFwiPGRpdiBjbGFzcz1cXFwic3ZkYS1jb250ZW50XFxcIj5cXG4gIDxzcGFuIGNsYXNzPVxcXCJzdmRhLWltYWdlLWVkaXRvclxcXCI+XFxuICAgIDxzcGFuXFxuICAgICAgY2xhc3M9XFxcImVkaXQtaW1hZ2UtaXRlbVxcXCJcXG4gICAgICBkYXRhLWJpbmQ9XFxcImNsaWNrOiBjaG9vc2VJbWFnZSwgY2xpY2tCdWJibGU6IGZhbHNlLCBhdHRyOiB7IHRpdGxlOiBnZXRMb2NTdHJpbmcoJ3BlLmVkaXQnKSB9XFxcIlxcbiAgICA+XFxuICAgICAgPHN2Zy1pY29uXFxuICAgICAgICBjbGFzcz1cXFwic3ZkLXByaW1hcnktaWNvblxcXCJcXG4gICAgICAgIHBhcmFtcz1cXFwiaWNvbk5hbWU6ICdpY29uLWlucGxhY2VlZGl0Jywgc2l6ZTogMTJcXFwiXFxuICAgICAgPjwvc3ZnLWljb24+XFxuICAgIDwvc3Bhbj5cXG4gIDwvc3Bhbj5cXG4gIDxzcGFuXFxuICAgIGNsYXNzPVxcXCJzdmRhLWRyYWctaGFuZGxlXFxcIlxcbiAgICBkYXRhLWJpbmQ9XFxcImF0dHI6IHsgdGl0bGU6IGdldExvY1N0cmluZygncGUubW92ZScpIH1cXFwiXFxuICA+XFxuICAgIDxzdmctaWNvblxcbiAgICAgIGNsYXNzPVxcXCJzdmQtcHJpbWFyeS1pY29uXFxcIlxcbiAgICAgIHBhcmFtcz1cXFwiaWNvbk5hbWU6ICdpY29uLWlucGxhY2VkcmFnZ2FibGUnLCBzaXplOiAxMlxcXCJcXG4gICAgPjwvc3ZnLWljb24+XFxuICA8L3NwYW4+XFxuICA8IS0ta28gaWZub3Q6IGlzTGFzdEl0ZW0gLS0+XFxuICA8c3BhblxcbiAgICBjbGFzcz1cXFwic3ZkYS1kZWxldGUtaXRlbVxcXCJcXG4gICAgZGF0YS1iaW5kPVxcXCJjbGljazogZGVsZXRlSXRlbSwgYXR0cjogeyB0aXRsZTogZ2V0TG9jU3RyaW5nKCdwZS5kZWxldGUnKSB9XFxcIlxcbiAgPlxcbiAgICA8c3ZnLWljb25cXG4gICAgICBjbGFzcz1cXFwic3ZkLXByaW1hcnktaWNvblxcXCJcXG4gICAgICBwYXJhbXM9XFxcImljb25OYW1lOiAnaWNvbi1pbnBsYWNlZGVsZXRlJywgc2l6ZTogMTJcXFwiXFxuICAgID48L3N2Zy1pY29uPlxcbiAgPC9zcGFuPlxcbiAgPCEtLSAva28gLS0+XFxuPC9kaXY+XFxuXCI7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2h0bWwtbG9hZGVyP2ludGVycG9sYXRlIS4vfi92YWwtbG9hZGVyIS4vc3JjL2Fkb3JuZXJzL2ltYWdlLWl0ZW1zLmh0bWxcbi8vIG1vZHVsZSBpZCA9IDEzNlxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJtb2R1bGUuZXhwb3J0cyA9IFwiPGRpdiBjbGFzcz1cXFwic3ZkYS1jb250ZW50XFxcIj5cXG4gIDxzcGFuXFxuICAgIGNsYXNzPVxcXCJzdmRhLXRpdGxlLWVkaXRvci1jb250ZW50XFxcIlxcbiAgICBkYXRhLWJpbmQ9XFxcInZpc2libGU6IGlzRWRpdGluZ1xcXCJcXG4gICAgc3R5bGU9XFxcImRpc3BsYXk6IG5vbmU7XFxcIlxcbiAgPlxcbiAgICA8aW5wdXRcXG4gICAgICBkYXRhLXN2ZC1pbmZvPVxcXCJhZG9ybmVyXFxcIlxcbiAgICAgIGRhdGEtYmluZD1cXFwidGV4dElucHV0OiBlZGl0aW5nTmFtZSwgZXZlbnQ6IHsga2V5dXA6IG5hbWVFZGl0b3JLZXlwcmVzcywgYmx1cjogcG9zdEVkaXQgfVxcXCJcXG4gICAgICBzdHlsZT1cXFwiYm9yZGVyLXRvcDogbm9uZTsgYm9yZGVyLWxlZnQ6IG5vbmU7IGJvcmRlci1yaWdodDogbm9uZTsgb3V0bGluZTogbm9uZTsgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7IGRpc3BsYXk6IGlubGluZS1ibG9jaztcXFwiXFxuICAgIC8+XFxuICAgIDxzcGFuXFxuICAgICAgY2xhc3M9XFxcInN2ZGEtZWRpdC1idXR0b25cXFwiXFxuICAgICAgZGF0YS1iaW5kPVxcXCJjbGljazogcG9zdEVkaXQsIGVuYWJsZTogZWRpdGluZ05hbWUoKSAhPSAnJ1xcXCJcXG4gICAgPlxcbiAgICAgIDxzdmctaWNvblxcbiAgICAgICAgY2xhc3M9XFxcInN2ZC1wcmltYXJ5LWljb25cXFwiXFxuICAgICAgICBwYXJhbXM9XFxcImljb25OYW1lOiAnaWNvbi1pbnBsYWNlY2hlY2snLCBzaXplOiAxMlxcXCJcXG4gICAgICA+PC9zdmctaWNvbj5cXG4gICAgPC9zcGFuPlxcbiAgICA8IS0tIDxzcGFuIGNsYXNzPVxcXCJzdmRhLWVkaXQtYnV0dG9uXFxcIiBkYXRhLWJpbmQ9XFxcImNsaWNrOiBjYW5jZWxFZGl0XFxcIj7inJU8L3NwYW4+IC0tPlxcbiAgPC9zcGFuPlxcbiAgPHNwYW5cXG4gICAgY2xhc3M9XFxcInN2ZGEtdGl0bGUtZWRpdG9yLWNvbnRlbnQgc3ZkYS10aXRsZS1lZGl0b3Itc3RhcnRcXFwiXFxuICAgIGRhdGEtYmluZD1cXFwidmlzaWJsZTogIWlzRWRpdGluZygpXFxcIlxcbiAgPlxcbiAgICA8c3BhbiBzdHlsZT1cXFwiZGlzcGxheTogbm9uZTtcXFwiIGRhdGEtYmluZD1cXFwidGV4dDogZWRpdGluZ05hbWVcXFwiPjwvc3Bhbj5cXG4gICAgPHNwYW5cXG4gICAgICBjbGFzcz1cXFwiZWRpdC1zdXJ2ZXktbmFtZVxcXCJcXG4gICAgICBkYXRhLWJpbmQ9XFxcImNsaWNrOiBzdGFydEVkaXQsIGF0dHI6IHsgdGl0bGU6IGdldExvY1N0cmluZygncGUuZWRpdCcpIH1cXFwiXFxuICAgID5cXG4gICAgICA8c3ZnLWljb25cXG4gICAgICAgIGNsYXNzPVxcXCJzdmQtcHJpbWFyeS1pY29uXFxcIlxcbiAgICAgICAgcGFyYW1zPVxcXCJpY29uTmFtZTogJ2ljb24taW5wbGFjZWVkaXQnLCBzaXplOiAxMlxcXCJcXG4gICAgICA+PC9zdmctaWNvbj5cXG4gICAgPC9zcGFuPlxcbiAgPC9zcGFuPlxcbiAgPCEtLSBrbyBpZjogaXNEcmFnZ2FibGUgLS0+XFxuICA8c3BhblxcbiAgICBjbGFzcz1cXFwic3ZkYS1kcmFnLWhhbmRsZVxcXCJcXG4gICAgZGF0YS1iaW5kPVxcXCJhdHRyOiB7IHRpdGxlOiBnZXRMb2NTdHJpbmcoJ3BlLm1vdmUnKSB9LCB2aXNpYmxlOiAhaXNFZGl0aW5nKClcXFwiXFxuICA+XFxuICAgIDxzdmctaWNvblxcbiAgICAgIGNsYXNzPVxcXCJzdmQtcHJpbWFyeS1pY29uXFxcIlxcbiAgICAgIHBhcmFtcz1cXFwiaWNvbk5hbWU6ICdpY29uLWlucGxhY2VkcmFnZ2FibGUnLCBzaXplOiAxMlxcXCJcXG4gICAgPjwvc3ZnLWljb24+XFxuICA8L3NwYW4+XFxuICA8IS0tIC9rbyAtLT5cXG4gIDwhLS1rbyBpZm5vdDogaXNMYXN0SXRlbSAtLT5cXG4gIDxzcGFuXFxuICAgIGNsYXNzPVxcXCJzdmRhLWRlbGV0ZS1pdGVtXFxcIlxcbiAgICBkYXRhLWJpbmQ9XFxcImNsaWNrOiBkZWxldGVJdGVtLCBhdHRyOiB7IHRpdGxlOiBnZXRMb2NTdHJpbmcoJ3BlLmRlbGV0ZScpIH0sIHZpc2libGU6ICFpc0VkaXRpbmcoKVxcXCJcXG4gID5cXG4gICAgPHN2Zy1pY29uXFxuICAgICAgY2xhc3M9XFxcInN2ZC1wcmltYXJ5LWljb25cXFwiXFxuICAgICAgcGFyYW1zPVxcXCJpY29uTmFtZTogJ2ljb24taW5wbGFjZWRlbGV0ZScsIHNpemU6IDEyXFxcIlxcbiAgICA+PC9zdmctaWNvbj5cXG4gIDwvc3Bhbj5cXG4gIDwhLS0gL2tvIC0tPlxcbjwvZGl2PlxcblwiO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9odG1sLWxvYWRlcj9pbnRlcnBvbGF0ZSEuL34vdmFsLWxvYWRlciEuL3NyYy9hZG9ybmVycy9pdGVtLWVkaXRvci5odG1sXG4vLyBtb2R1bGUgaWQgPSAxMzdcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwibW9kdWxlLmV4cG9ydHMgPSBcIjxkaXY+XFxuICAgIDwhLS0ga28gZm9yZWFjaDogYWN0aW9ucyAtLT5cXG4gICAgPCEtLSBrbyBpZjogISRkYXRhLnRlbXBsYXRlIC0tPlxcbiAgICA8c3BhbiBjbGFzcz1cXFwic3ZkYV9xdWVzdGlvbl9hY3Rpb24gc3ZkLW1haW4tY29sb3JcXFwiIGRhdGEtYmluZD1cXFwia2V5MmNsaWNrLCBjbGlja05vRm9jdXM6IGZ1bmN0aW9uKCkgeyBvbkNsaWNrKCRwYXJlbnQucXVlc3Rpb24pOyB9LCBhdHRyOiB7dGl0bGU6IHRleHQsIHRhYmluZGV4OiAkZGF0YS5uZWVkRm9jdXMgPT09IHVuZGVmaW5lZCB8fCAhISRkYXRhLm5lZWRGb2N1cyA/IDAgOiB1bmRlZmluZWQgfVxcXCI+XFxuICAgICAgICA8c3Bhbj5cXG4gICAgICAgICAgICA8c3ZnLWljb24gY2xhc3M9XFxcInN2ZC1wcmltYXJ5LWljb25cXFwiIGRhdGEtYmluZD1cXFwiY3NzOiAkcGFyZW50LmdldFN0eWxlKCRkYXRhKVxcXCIgcGFyYW1zPVxcXCJpY29uTmFtZTogJHBhcmVudC5nZXRTdHlsZSgkZGF0YSlcXFwiPjwvc3ZnLWljb24+XFxuICAgICAgICA8L3NwYW4+XFxuICAgICAgICA8c3BhbiBkYXRhLWJpbmQ9XFxcInRleHQ6ICRkYXRhLmhhc1RpdGxlID8gdGV4dDogJydcXFwiPjwvc3Bhbj5cXG4gICAgPC9zcGFuPlxcbiAgICA8IS0tIC9rbyAtLT5cXG4gICAgPCEtLSBrbyBpZjogISEkZGF0YS50ZW1wbGF0ZSAtLT5cXG4gICAgPCEtLSBrbyB0ZW1wbGF0ZTogdGVtcGxhdGUgLS0+XFxuICAgIDwhLS0gL2tvIC0tPlxcbiAgICA8IS0tIC9rbyAtLT5cXG4gICAgPCEtLSAva28gLS0+XFxuPC9kaXY+XCI7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2h0bWwtbG9hZGVyP2ludGVycG9sYXRlIS4vfi92YWwtbG9hZGVyIS4vc3JjL2Fkb3JuZXJzL3F1ZXN0aW9uLWFjdGlvbnMuaHRtbFxuLy8gbW9kdWxlIGlkID0gMTM4XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIm1vZHVsZS5leHBvcnRzID0gXCI8ZGl2IGNsYXNzPVxcXCJzdmRhLWNvbnRlbnRcXFwiPlxcbiAgPHNwYW5cXG4gICAgY2xhc3M9XFxcInN2ZGEtdGl0bGUtZWRpdG9yLWNvbnRlbnRcXFwiXFxuICAgIGRhdGEtYmluZD1cXFwidmlzaWJsZTogaXNFZGl0aW5nXFxcIlxcbiAgICBzdHlsZT1cXFwiZGlzcGxheTogbm9uZTtcXFwiXFxuICA+XFxuICAgIDxpbnB1dFxcbiAgICAgIGRhdGEtc3ZkLWluZm89XFxcImFkb3JuZXJcXFwiXFxuICAgICAgZGF0YS1iaW5kPVxcXCJ0ZXh0SW5wdXQ6IGVkaXRpbmdOYW1lLCBldmVudDogeyBrZXl1cDogbmFtZUVkaXRvcktleXByZXNzLCBibHVyOiBwb3N0RWRpdCB9XFxcIlxcbiAgICAgIHN0eWxlPVxcXCJib3JkZXItdG9wOiBub25lOyBib3JkZXItbGVmdDogbm9uZTsgYm9yZGVyLXJpZ2h0OiBub25lOyBvdXRsaW5lOiBub25lOyBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsgZGlzcGxheTogaW5saW5lLWJsb2NrOyBtYXJnaW46IC02cHg7XFxcIlxcbiAgICAvPlxcbiAgICA8c3BhblxcbiAgICAgIGNsYXNzPVxcXCJzdmRhLWVkaXQtYnV0dG9uXFxcIlxcbiAgICAgIGRhdGEtYmluZD1cXFwiY2xpY2s6IHBvc3RFZGl0LCBlbmFibGU6IGVkaXRpbmdOYW1lKCkgIT0gJydcXFwiXFxuICAgID5cXG4gICAgICA8c3ZnLWljb25cXG4gICAgICAgIGNsYXNzPVxcXCJzdmQtcHJpbWFyeS1pY29uXFxcIlxcbiAgICAgICAgcGFyYW1zPVxcXCJpY29uTmFtZTogJ2ljb24taW5wbGFjZWNoZWNrJywgc2l6ZTogMTJcXFwiXFxuICAgICAgPjwvc3ZnLWljb24+XFxuICAgIDwvc3Bhbj5cXG4gICAgPCEtLSA8c3BhbiBjbGFzcz1cXFwic3ZkYS1lZGl0LWJ1dHRvblxcXCIgZGF0YS1iaW5kPVxcXCJjbGljazogY2FuY2VsRWRpdFxcXCI+4pyVPC9zcGFuPiAtLT5cXG4gIDwvc3Bhbj5cXG4gIDxzcGFuXFxuICAgIGNsYXNzPVxcXCJzdmRhLXRpdGxlLWVkaXRvci1jb250ZW50IHN2ZGEtdGl0bGUtZWRpdG9yLXN0YXJ0XFxcIlxcbiAgICBkYXRhLWJpbmQ9XFxcInZpc2libGU6ICFpc0VkaXRpbmcoKVxcXCJcXG4gID5cXG4gICAgPHNwYW4gc3R5bGU9XFxcImRpc3BsYXk6IG5vbmU7XFxcIiBkYXRhLWJpbmQ9XFxcInRleHQ6IGVkaXRpbmdOYW1lXFxcIj48L3NwYW4+XFxuICAgIDxzcGFuXFxuICAgICAgY2xhc3M9XFxcImVkaXQtc3VydmV5LW5hbWVcXFwiXFxuICAgICAgZGF0YS1iaW5kPVxcXCJjbGljazogc3RhcnRFZGl0LCBhdHRyOiB7IHRpdGxlOiBnZXRMb2NTdHJpbmcoJ3BlLmVkaXQnKSB9XFxcIlxcbiAgICA+XFxuICAgICAgPHN2Zy1pY29uXFxuICAgICAgICBjbGFzcz1cXFwic3ZkLXByaW1hcnktaWNvblxcXCJcXG4gICAgICAgIHBhcmFtcz1cXFwiaWNvbk5hbWU6ICdpY29uLWlucGxhY2VlZGl0Jywgc2l6ZTogMTJcXFwiXFxuICAgICAgPjwvc3ZnLWljb24+XFxuICAgIDwvc3Bhbj5cXG4gIDwvc3Bhbj5cXG4gIDwhLS1rbyBpZm5vdDogaXNMYXN0SXRlbSAtLT5cXG4gIDxzcGFuXFxuICAgIGNsYXNzPVxcXCJzdmRhLWRlbGV0ZS1pdGVtXFxcIlxcbiAgICBkYXRhLWJpbmQ9XFxcImNsaWNrOiBkZWxldGVJdGVtLCBhdHRyOiB7IHRpdGxlOiBnZXRMb2NTdHJpbmcoJ3BlLmRlbGV0ZScpIH0sIHZpc2libGU6ICFpc0VkaXRpbmcoKVxcXCJcXG4gID5cXG4gICAgPHN2Zy1pY29uXFxuICAgICAgY2xhc3M9XFxcInN2ZC1wcmltYXJ5LWljb25cXFwiXFxuICAgICAgcGFyYW1zPVxcXCJpY29uTmFtZTogJ2ljb24taW5wbGFjZWRlbGV0ZScsIHNpemU6IDEyXFxcIlxcbiAgICA+PC9zdmctaWNvbj5cXG4gIDwvc3Bhbj5cXG4gIDwhLS0gL2tvIC0tPlxcbjwvZGl2PlxcblwiO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9odG1sLWxvYWRlcj9pbnRlcnBvbGF0ZSEuL34vdmFsLWxvYWRlciEuL3NyYy9hZG9ybmVycy9yYXRpbmctaXRlbS1lZGl0b3IuaHRtbFxuLy8gbW9kdWxlIGlkID0gMTM5XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIm1vZHVsZS5leHBvcnRzID0gXCI8ZGl2IGNsYXNzPVxcXCJzdmRhLXNlbGVjdC1pdGVtcy1lZGl0b3JcXFwiPlxcbiAgPGRpdiBjbGFzcz1cXFwic3ZkYS1zZWxlY3QtaXRlbXMtdGl0bGVcXFwiIGRhdGEtYmluZD1cXFwiY2xpY2s6IHRvZ2dsZVxcXCI+XFxuICAgIDxzcGFuXFxuICAgICAgY2xhc3M9XFxcInN2ZC1tYWluLWNvbG9yXFxcIlxcbiAgICAgIGRhdGEtYmluZD1cXFwidGV4dDogZ2V0TG9jU3RyaW5nKCdwZS5lZGl0Q2hvaWNlcycpXFxcIlxcbiAgICA+PC9zcGFuPlxcbiAgPC9kaXY+XFxuICA8ZGl2XFxuICAgIGNsYXNzPVxcXCJzdmRhLXNlbGVjdC1pdGVtcy1jb250ZW50IHN2ZC1kYXJrLWJvcmRlci1jb2xvciBzdmQtbGlnaHQtYmctY29sb3JcXFwiXFxuICAgIGRhdGEtYmluZD1cXFwidmlzaWJsZTogaXNFeHBhbmRlZFxcXCJcXG4gID5cXG4gICAgPGRpdiBjbGFzcz1cXFwic3ZkYS1zZWxlY3QtaXRlbXMtY29sbGVjdGlvblxcXCI+XFxuICAgICAgPCEtLSBrbyBmb3JlYWNoOiB7IGRhdGE6IGNob2ljZXMsIGFmdGVyUmVuZGVyOiBjaG9pY2VzUmVuZGVyZWQgfSAtLT5cXG4gICAgICA8ZGl2IGNsYXNzPVxcXCJpdGVtX2VkaXRhYmxlIGl0ZW1fZHJhZ2dhYmxlXFxcIj5cXG4gICAgICAgIDxzcGFuIGRhdGEtYmluZD1cXFwidGV4dDogdGV4dFxcXCI+PC9zcGFuPlxcbiAgICAgICAgPHNwYW4+XFxuICAgICAgICAgIDxpdGVtLWVkaXRvclxcbiAgICAgICAgICAgIHBhcmFtcz1cXFwibmFtZTogJHBhcmVudC52YWx1ZU5hbWUsIHZhbHVlQ2hhbmdlZDogJHBhcmVudC52YWx1ZUNoYW5nZWQsIHRhcmdldDogJGRhdGEsIG1vZGVsOiAkZGF0YSwgaXRlbTogJGRhdGEsIHF1ZXN0aW9uOiAkcGFyZW50LnF1ZXN0aW9uLCBlZGl0b3I6ICRwYXJlbnQuZWRpdG9yXFxcIlxcbiAgICAgICAgICA+XFxuICAgICAgICAgIDwvaXRlbS1lZGl0b3I+XFxuICAgICAgICA8L3NwYW4+XFxuICAgICAgPC9kaXY+XFxuICAgICAgPCEtLSAva28gLS0+XFxuICAgIDwvZGl2PlxcbiAgICA8IS0tIGtvIGlmOiBxdWVzdGlvbi5oYXNPdGhlciAtLT5cXG4gICAgPGRpdiBjbGFzcz1cXFwiaXRlbV9lZGl0YWJsZVxcXCI+XFxuICAgICAgPHNwYW4gZGF0YS1iaW5kPVxcXCJ0ZXh0OiBvdGhlclRleHRcXFwiPjwvc3Bhbj5cXG4gICAgICA8c3Bhbj5cXG4gICAgICAgIDxpdGVtLWVkaXRvclxcbiAgICAgICAgICBwYXJhbXM9J25hbWU6IFxcXCJvdGhlclRleHRcXFwiLCB0YXJnZXQ6IHF1ZXN0aW9uLCBtb2RlbDogcXVlc3Rpb24sIHZhbHVlQ2hhbmdlZDogb3RoZXJWYWx1ZUNoYW5nZWQsIGl0ZW06IHF1ZXN0aW9uLm90aGVySXRlbSwgcXVlc3Rpb246IHF1ZXN0aW9uLCBlZGl0b3I6IGVkaXRvcidcXG4gICAgICAgID5cXG4gICAgICAgIDwvaXRlbS1lZGl0b3I+XFxuICAgICAgPC9zcGFuPlxcbiAgICA8L2Rpdj5cXG4gICAgPCEtLSAva28gLS0+XFxuICAgIDxkaXZcXG4gICAgICBjbGFzcz1cXFwic3ZfdGVjaG5pY2FsIHN2ZGEtYWRkLW5ldy1pdGVtXFxcIlxcbiAgICAgIGRhdGEtYmluZD1cXFwiY2xpY2s6IGFkZEl0ZW0sIGF0dHI6IHsgdGl0bGU6IGdldExvY1N0cmluZygncGUuYWRkSXRlbScpIH1cXFwiXFxuICAgID5cXG4gICAgICA8c3ZnLWljb25cXG4gICAgICAgIGNsYXNzPVxcXCJzdmQtcHJpbWFyeS1pY29uXFxcIlxcbiAgICAgICAgcGFyYW1zPVxcXCJpY29uTmFtZTogJ2ljb24taW5wbGFjZXBsdXMnLCBzaXplOiAxMlxcXCJcXG4gICAgICA+PC9zdmctaWNvbj5cXG4gICAgPC9kaXY+XFxuICAgIDxkaXZcXG4gICAgICBjbGFzcz1cXFwic3ZfdGVjaG5pY2FsIHN2ZGEtYWRkLW5ldy1pdGVtIHN2ZGEtYWRkLWN1c3RvbS1pdGVtXFxcIlxcbiAgICAgIGRhdGEtYmluZD1cXFwiY2xpY2s6IGFkZE90aGVyLCBhdHRyOiB7IHRpdGxlOiBnZXRMb2NTdHJpbmcoJ3BlLmFkZE90aGVyJykgfVxcXCJcXG4gICAgPlxcbiAgICAgIDxzcGFuIGRhdGEtYmluZD1cXFwidGV4dDogZ2V0TG9jU3RyaW5nKCdwZS5hZGRPdGhlcicpXFxcIj48L3NwYW4+XFxuICAgIDwvZGl2PlxcbiAgPC9kaXY+XFxuPC9kaXY+XFxuXCI7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2h0bWwtbG9hZGVyP2ludGVycG9sYXRlIS4vfi92YWwtbG9hZGVyIS4vc3JjL2Fkb3JuZXJzL3NlbGVjdC1pdGVtcy1lZGl0b3IuaHRtbFxuLy8gbW9kdWxlIGlkID0gMTQwXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIm1vZHVsZS5leHBvcnRzID0gXCI8ZGl2IGNsYXNzPVxcXCJzdmRhLWNvbnRlbnRcXFwiPlxcbiAgPHNwYW5cXG4gICAgY2xhc3M9XFxcInN2ZGEtdGl0bGUtZWRpdG9yLWNvbnRlbnRcXFwiXFxuICAgIGRhdGEtYmluZD1cXFwidmlzaWJsZTogaXNFZGl0aW5nXFxcIlxcbiAgICBzdHlsZT1cXFwiZGlzcGxheTogbm9uZTtcXFwiXFxuICA+XFxuICAgIDxpbnB1dFxcbiAgICAgIGRhdGEtc3ZkLWluZm89XFxcImFkb3JuZXJcXFwiXFxuICAgICAgZGF0YS1iaW5kPVxcXCJ0ZXh0SW5wdXQ6IGVkaXRpbmdOYW1lLCBldmVudDogeyBrZXl1cDogbmFtZUVkaXRvcktleXByZXNzLCBibHVyOiBwb3N0RWRpdCB9XFxcIlxcbiAgICAgIHN0eWxlPVxcXCJib3JkZXItdG9wOiBub25lOyBib3JkZXItbGVmdDogbm9uZTsgYm9yZGVyLXJpZ2h0OiBub25lOyBvdXRsaW5lOiBub25lOyBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsgZGlzcGxheTogaW5saW5lLWJsb2NrO1xcXCJcXG4gICAgLz5cXG4gICAgPHNwYW5cXG4gICAgICBjbGFzcz1cXFwic3ZkYS1lZGl0LWJ1dHRvblxcXCJcXG4gICAgICBkYXRhLWJpbmQ9XFxcImNsaWNrOiBwb3N0RWRpdCwgZW5hYmxlOiBlZGl0aW5nTmFtZSgpICE9ICcnXFxcIlxcbiAgICA+XFxuICAgICAgPHN2Zy1pY29uXFxuICAgICAgICBjbGFzcz1cXFwic3ZkLXByaW1hcnktaWNvblxcXCJcXG4gICAgICAgIHBhcmFtcz1cXFwiaWNvbk5hbWU6ICdpY29uLWlucGxhY2VjaGVjaycsIHNpemU6IDEyXFxcIlxcbiAgICAgID48L3N2Zy1pY29uPlxcbiAgICA8L3NwYW4+XFxuICAgIDwhLS0gPHNwYW4gY2xhc3M9XFxcInN2ZGEtZWRpdC1idXR0b25cXFwiIGRhdGEtYmluZD1cXFwiY2xpY2s6IGNhbmNlbEVkaXRcXFwiPuKclTwvc3Bhbj4gLS0+XFxuICA8L3NwYW4+XFxuICA8c3BhblxcbiAgICBjbGFzcz1cXFwic3ZkYS10aXRsZS1lZGl0b3ItY29udGVudCBzdmRhLXRpdGxlLWVkaXRvci1zdGFydFxcXCJcXG4gICAgZGF0YS1iaW5kPVxcXCJ2aXNpYmxlOiAhaXNFZGl0aW5nKClcXFwiXFxuICA+XFxuICAgIDxzcGFuIHN0eWxlPVxcXCJkaXNwbGF5OiBub25lO1xcXCIgZGF0YS1iaW5kPVxcXCJ0ZXh0OiBlZGl0aW5nTmFtZVxcXCI+PC9zcGFuPlxcbiAgICA8c3BhblxcbiAgICAgIGNsYXNzPVxcXCJlZGl0LXN1cnZleS1uYW1lXFxcIlxcbiAgICAgIGRhdGEtYmluZD1cXFwiY2xpY2s6IHN0YXJ0RWRpdCwgYXR0cjogeyB0aXRsZTogZ2V0TG9jU3RyaW5nKCdwZS5lZGl0JykgfVxcXCJcXG4gICAgPlxcbiAgICAgIDxzdmctaWNvblxcbiAgICAgICAgY2xhc3M9XFxcInN2ZC1wcmltYXJ5LWljb25cXFwiXFxuICAgICAgICBwYXJhbXM9XFxcImljb25OYW1lOiAnaWNvbi1pbnBsYWNlZWRpdCcsIHNpemU6IDEyXFxcIlxcbiAgICAgID48L3N2Zy1pY29uPlxcbiAgICA8L3NwYW4+XFxuICA8L3NwYW4+XFxuPC9kaXY+XFxuXCI7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2h0bWwtbG9hZGVyP2ludGVycG9sYXRlIS4vfi92YWwtbG9hZGVyIS4vc3JjL2Fkb3JuZXJzL3RpdGxlLWVkaXRvci5odG1sXG4vLyBtb2R1bGUgaWQgPSAxNDFcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwibW9kdWxlLmV4cG9ydHMgPSBcIlwiICsgcmVxdWlyZSgnLi9pbmRleC5odG1sJykgKyBcIiBcIiArIHJlcXVpcmUoJy4vanNvbmVkaXRvci5odG1sJykgKyBcIlxcblwiICsgcmVxdWlyZSgnLi9vYmplY3RlZGl0b3IuaHRtbCcpICsgXCIgXCIgKyByZXF1aXJlKCcuL3BhZ2VlZGl0b3IuaHRtbCcpICsgXCJcXG5cIiArIHJlcXVpcmUoJy4vc3VydmV5bGl2ZS5odG1sJykgKyBcIiBcIiArIHJlcXVpcmUoJy4vc3VydmV5ZW1iZWRpbmcuaHRtbCcpICsgXCJcXG5cIiArIHJlcXVpcmUoJy4vdHJhbnNsYXRpb24uaHRtbCcpICsgXCIgXCIgKyByZXF1aXJlKCcuL3N1cnZleWxvZ2ljLmh0bWwnKSArIFwiXFxuXCIgKyByZXF1aXJlKCcuL3F1ZXN0aW9uRWRpdG9ycy9xdWVzdGlvbmVkaXRvci5odG1sJykgKyBcIlxcblwiICsgcmVxdWlyZSgnLi9xdWVzdGlvbkVkaXRvcnMvcXVlc3Rpb25lZGl0b3ItY29udGVudC5odG1sJykgKyBcIlxcblwiICsgcmVxdWlyZSgnLi9xdWVzdGlvbkVkaXRvcnMvcXVlc3Rpb25lZGl0b3J0YWIuaHRtbCcpICsgXCJcXG5cIiArIHJlcXVpcmUoJy4vcHJvcGVydHlFZGl0b3JzL2VsZW1lbnRzZWxlY3Rvci5odG1sJykgKyBcIlxcblwiICsgcmVxdWlyZSgnLi9wcm9wZXJ0eUVkaXRvcnMvcHJvcGVydHllZGl0b3IuaHRtbCcpICsgXCJcXG5cIiArIHJlcXVpcmUoJy4vcHJvcGVydHlFZGl0b3JzL3Byb3BlcnR5ZWRpdG9yLWJvb2xlYW4uaHRtbCcpICsgXCJcXG5cIiArIHJlcXVpcmUoJy4vcHJvcGVydHlFZGl0b3JzL3Byb3BlcnR5ZWRpdG9yLWRyb3Bkb3duLmh0bWwnKSArIFwiXFxuXCIgKyByZXF1aXJlKCcuL3Byb3BlcnR5RWRpdG9ycy9wcm9wZXJ0eWVkaXRvci1odG1sLmh0bWwnKSArIFwiXFxuXCIgKyByZXF1aXJlKCcuL3Byb3BlcnR5RWRpdG9ycy9wcm9wZXJ0eWVkaXRvci1jb25kaXRpb24uaHRtbCcpICsgXCJcXG5cIiArIHJlcXVpcmUoJy4vcHJvcGVydHlFZGl0b3JzL3Byb3BlcnR5ZWRpdG9yLWV4cHJlc3Npb24uaHRtbCcpICsgXCJcXG5cIiArIHJlcXVpcmUoJy4vcHJvcGVydHlFZGl0b3JzL3Byb3BlcnR5ZWRpdG9yLWl0ZW12YWx1ZXMuaHRtbCcpICsgXCJcXG5cIiArIHJlcXVpcmUoJy4vcHJvcGVydHlFZGl0b3JzL3Byb3BlcnR5ZWRpdG9yLW11bHRpcGxldmFsdWVzLmh0bWwnKSArIFwiXFxuXCIgKyByZXF1aXJlKCcuL3Byb3BlcnR5RWRpdG9ycy9wcm9wZXJ0eWVkaXRvci1uZXN0ZWQuaHRtbCcpICsgXCJcXG5cIiArIHJlcXVpcmUoJy4vcHJvcGVydHlFZGl0b3JzL3Byb3BlcnR5ZWRpdG9yLW1hdHJpeGRyb3Bkb3duY29sdW1ucy5odG1sJykgKyBcIlxcblwiICsgcmVxdWlyZSgnLi9wcm9wZXJ0eUVkaXRvcnMvcHJvcGVydHllZGl0b3ItbW9kYWwuaHRtbCcpICsgXCJcIiArIHJlcXVpcmUoJy4vcHJvcGVydHlFZGl0b3JzL3Byb3BlcnR5ZWRpdG9yLW1vZGFsY29udGVudC5odG1sJykgKyBcIlxcblwiICsgcmVxdWlyZSgnLi9wcm9wZXJ0eUVkaXRvcnMvcHJvcGVydHllZGl0b3ItbnVtYmVyLmh0bWwnKSArIFwiXFxuXCIgKyByZXF1aXJlKCcuL3Byb3BlcnR5RWRpdG9ycy9wcm9wZXJ0eWVkaXRvci1yZXN0ZnVsbC5odG1sJykgKyBcIlxcblwiICsgcmVxdWlyZSgnLi9wcm9wZXJ0eUVkaXRvcnMvcHJvcGVydHllZGl0b3ItZGVmYXVsdHZhbHVlLmh0bWwnKSArIFwiXFxuXCIgKyByZXF1aXJlKCcuL3Byb3BlcnR5RWRpdG9ycy9wcm9wZXJ0eWVkaXRvci1zdHJpbmcuaHRtbCcpICsgXCJcXG5cIiArIHJlcXVpcmUoJy4vcHJvcGVydHlFZGl0b3JzL3Byb3BlcnR5ZWRpdG9yLXRleHQuaHRtbCcpICsgXCJcXG5cIiArIHJlcXVpcmUoJy4vcHJvcGVydHlFZGl0b3JzL3Byb3BlcnR5ZWRpdG9yLWNlbGxzLmh0bWwnKSArIFwiXFxuXCIgKyByZXF1aXJlKCcuL3Byb3BlcnR5RWRpdG9ycy9wcm9wZXJ0eWVkaXRvci10ZXh0aXRlbXMuaHRtbCcpICsgXCJcXG5cIiArIHJlcXVpcmUoJy4vcHJvcGVydHlFZGl0b3JzL3Byb3BlcnR5ZWRpdG9yLXRyaWdnZXJzLmh0bWwnKSArIFwiXFxuXCIgKyByZXF1aXJlKCcuL3Byb3BlcnR5RWRpdG9ycy9wcm9wZXJ0eWVkaXRvci10cmlnZ2Vyc2l0ZW1zLmh0bWwnKSArIFwiXFxuXCIgKyByZXF1aXJlKCcuL3Byb3BlcnR5RWRpdG9ycy9wcm9wZXJ0eWVkaXRvci1jdXN0b20uaHRtbCcpICsgXCJcXG5cIiArIHJlcXVpcmUoJy4vbWFuYWdlLmh0bWwnKSArIFwiIFwiICsgcmVxdWlyZSgnLi90b29sYmFyLmh0bWwnKSArIFwiXFxuXCIgKyByZXF1aXJlKCcuL2NvbnZlcnQtYWN0aW9uLmh0bWwnKSArIFwiXFxuXCIgKyByZXF1aXJlKCcuL3Byb3BlcnR5RWRpdG9ycy9wcm9wZXJ0eWVkaXRvci1uZXN0ZWRpdGVtcy5odG1sJykgKyBcIlwiICsgcmVxdWlyZSgnLi9wcm9wZXJ0eUVkaXRvcnMvcHJvcGVydHllZGl0b3ItZXJyb3IuaHRtbCcpICsgXCJcXG5cIiArIHJlcXVpcmUoJy4vcHJvcGVydHlFZGl0b3JzL3Byb3BlcnR5ZWRpdG9yLW9uZXNlbGVjdGVkLmh0bWwnKSArIFwiXFxuXCIgKyByZXF1aXJlKCcuLi9zdmdidW5kbGUuaHRtbCcpICsgXCIgXCIgKyByZXF1aXJlKCcuL3RhYnMuaHRtbCcpICsgXCJcXG5cIjtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vaHRtbC1sb2FkZXI/aW50ZXJwb2xhdGUhLi9+L3ZhbC1sb2FkZXIhLi9zcmMvdGVtcGxhdGVzL2VudHJ5Lmh0bWxcbi8vIG1vZHVsZSBpZCA9IDE0MlxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJtb2R1bGUuZXhwb3J0cyA9IFwiPGRpdj5cXG4gIDwhLS0ga28gZm9yZWFjaDogdGFicyAtLT5cXG4gIDxkaXZcXG4gICAgY2xhc3M9XFxcInN2ZC1hY2NvcmRpb24tdGFiLWhlYWRlclxcXCJcXG4gICAgcm9sZT1cXFwidGFiXFxcIlxcbiAgICBkYXRhLWJpbmQ9XFxcImNsaWNrOiB0b2dnbGUsIHZpc2libGU6ICRwYXJlbnQuc2hvd0hlYWRlclxcXCJcXG4gID5cXG4gICAgPHNwYW5cXG4gICAgICBkYXRhLWJpbmQ9XFxcImNzczogeyAnc3ZkLW1haW4tY29sb3InOiAhY29sbGFwc2VkKCkgfSwgdGV4dDogdGl0bGVcXFwiXFxuICAgID48L3NwYW4+XFxuICAgIDwhLS0ga28gaWY6IGNvbGxhcHNlZCAtLT5cXG4gICAgPHN2Zy1pY29uXFxuICAgICAgY2xhc3M9XFxcImljb24tdG9vbGJveC1hcnJvd1xcXCJcXG4gICAgICBwYXJhbXM9XFxcImljb25OYW1lOiAnaWNvbi1hcnJvd19kb3duXzEweDEwJywgc2l6ZTogMTBcXFwiXFxuICAgID48L3N2Zy1pY29uPlxcbiAgICA8IS0tIC9rbyAtLT5cXG4gICAgPCEtLSBrbyBpZm5vdDogY29sbGFwc2VkIC0tPlxcbiAgICA8c3ZnLWljb25cXG4gICAgICBjbGFzcz1cXFwiaWNvbi10b29sYm94LWFycm93IHN2ZC1wcmltYXJ5LWljb25cXFwiXFxuICAgICAgcGFyYW1zPVxcXCJpY29uTmFtZTogJ2ljb24tYXJyb3dfdXBfMTB4MTAnLCBzaXplOiAxMFxcXCJcXG4gICAgPjwvc3ZnLWljb24+XFxuICAgIDwhLS0gL2tvIC0tPlxcbiAgPC9kaXY+XFxuICA8ZGl2XFxuICAgIGNsYXNzPVxcXCJzdmQtYWNjb3JkaW9uLXRhYi1jb250ZW50XFxcIlxcbiAgICByb2xlPVxcXCJ0YWJcXFwiXFxuICAgIGRhdGEtYmluZD1cXFwiaWZub3Q6IGNvbGxhcHNlZFxcXCJcXG4gID5cXG4gICAgPCEtLSBrbyB0ZW1wbGF0ZTogeyBuYW1lOiB0ZW1wbGF0ZSwgZGF0YTogZGF0YSB9IC0tPlxcbiAgICA8IS0tIC9rbyAtLT5cXG4gIDwvZGl2PlxcbiAgPCEtLSAva28gLS0+XFxuPC9kaXY+XFxuXCI7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2h0bWwtbG9hZGVyP2ludGVycG9sYXRlIS4vfi92YWwtbG9hZGVyIS4vc3JjL3V0aWxzL2FjY29yZGlvbi5odG1sXG4vLyBtb2R1bGUgaWQgPSAxNDNcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiaW1wb3J0ICogYXMga28gZnJvbSBcImtub2Nrb3V0XCI7XG5pbXBvcnQgeyBTdXJ2ZXlUZXh0V29ya2VyIH0gZnJvbSBcIi4vdGV4dFdvcmtlclwiO1xuaW1wb3J0ICogYXMgU3VydmV5IGZyb20gXCJzdXJ2ZXkta25vY2tvdXRcIjtcblxuZXhwb3J0IGNsYXNzIFN1cnZleUpTT05FZGl0b3Ige1xuICBwdWJsaWMgc3RhdGljIHVwZGF0ZVRleHRUaW1lb3V0OiBudW1iZXIgPSAxMDAwO1xuXG4gIHByaXZhdGUgaXNQcm9jZXNzaW5nSW1tZWRpYXRlbHk6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHJpdmF0ZSBhY2VFZGl0b3I6IEFjZUFqYXguRWRpdG9yO1xuICBwcml2YXRlIHRleHRXb3JrZXI6IFN1cnZleVRleHRXb3JrZXI7XG4gIGtvVGV4dDogYW55O1xuICBrb0Vycm9yczogYW55O1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMua29UZXh0ID0ga28ub2JzZXJ2YWJsZShcIlwiKTtcbiAgICB0aGlzLmtvRXJyb3JzID0ga28ub2JzZXJ2YWJsZUFycmF5KCk7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIHRoaXMua29UZXh0LnN1YnNjcmliZShmdW5jdGlvbihuZXdWYWx1ZSkge1xuICAgICAgc2VsZi5vbkpzb25FZGl0b3JDaGFuZ2VkKCk7XG4gICAgfSk7XG4gIH1cbiAgcHVibGljIGluaXQoZWRpdG9yRWxlbWVudDogSFRNTEVsZW1lbnQpIHtcbiAgICBpZiAoIXRoaXMuaGFzQWNlRWRpdG9yKSByZXR1cm47XG4gICAgdGhpcy5hY2VFZGl0b3IgPSBhY2UuZWRpdChlZGl0b3JFbGVtZW50KTtcbiAgICB0aGlzLmFjZUVkaXRvci5zZXRSZWFkT25seSh0aGlzLnJlYWRPbmx5KTtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgLy9UT0RPIGFkZCBldmVudCB0byBjaGFuZ2UgYWNlIHRoZW1lIGFuZCBtb2RlXG4gICAgLy90aGlzLmFjZUVkaXRvci5zZXRUaGVtZShcImFjZS90aGVtZS9tb25va2FpXCIpO1xuICAgIC8vdGhpcy5hY2VFZGl0b3Iuc2Vzc2lvbi5zZXRNb2RlKFwiYWNlL21vZGUvanNvblwiKTtcbiAgICB0aGlzLmFjZUVkaXRvci5zZXRTaG93UHJpbnRNYXJnaW4oZmFsc2UpO1xuICAgIHRoaXMuYWNlRWRpdG9yLmdldFNlc3Npb24oKS5vbihcImNoYW5nZVwiLCBmdW5jdGlvbigpIHtcbiAgICAgIHNlbGYub25Kc29uRWRpdG9yQ2hhbmdlZCgpO1xuICAgIH0pO1xuICAgIHRoaXMuYWNlRWRpdG9yLmdldFNlc3Npb24oKS5zZXRVc2VXb3JrZXIodHJ1ZSk7XG4gICAgU3VydmV5VGV4dFdvcmtlci5uZXdMaW5lQ2hhciA9IHRoaXMuYWNlRWRpdG9yLnNlc3Npb24uZG9jLmdldE5ld0xpbmVDaGFyYWN0ZXIoKTtcbiAgfVxuICBwdWJsaWMgZ2V0IGhhc0FjZUVkaXRvcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHlwZW9mIGFjZSAhPT0gXCJ1bmRlZmluZWRcIjtcbiAgfVxuICBwdWJsaWMgZ2V0IHRleHQoKTogc3RyaW5nIHtcbiAgICBpZiAoIXRoaXMuaGFzQWNlRWRpdG9yKSByZXR1cm4gdGhpcy5rb1RleHQoKTtcbiAgICByZXR1cm4gdGhpcy5hY2VFZGl0b3IuZ2V0VmFsdWUoKTtcbiAgfVxuICBwdWJsaWMgc2V0IHRleHQodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuaXNQcm9jZXNzaW5nSW1tZWRpYXRlbHkgPSB0cnVlO1xuICAgIHRoaXMua29UZXh0KHZhbHVlKTtcbiAgICBpZiAodGhpcy5hY2VFZGl0b3IpIHtcbiAgICAgIHRoaXMuYWNlRWRpdG9yLnNldFZhbHVlKHZhbHVlKTtcbiAgICAgIHRoaXMuYWNlRWRpdG9yLnJlbmRlcmVyLnVwZGF0ZUZ1bGwodHJ1ZSk7XG4gICAgfVxuICAgIHRoaXMucHJvY2Vzc0pzb24odmFsdWUpO1xuICAgIHRoaXMuaXNQcm9jZXNzaW5nSW1tZWRpYXRlbHkgPSBmYWxzZTtcbiAgfVxuICBwdWJsaWMgc2hvdyh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy50ZXh0ID0gdmFsdWU7XG4gICAgaWYgKHRoaXMuYWNlRWRpdG9yKSB7XG4gICAgICB0aGlzLmFjZUVkaXRvci5mb2N1cygpO1xuICAgIH1cbiAgfVxuICBwdWJsaWMgZ2V0IGlzSnNvbkNvcnJlY3QoKTogYm9vbGVhbiB7XG4gICAgdGhpcy50ZXh0V29ya2VyID0gbmV3IFN1cnZleVRleHRXb3JrZXIodGhpcy50ZXh0KTtcbiAgICByZXR1cm4gdGhpcy50ZXh0V29ya2VyLmlzSnNvbkNvcnJlY3Q7XG4gIH1cbiAgcHVibGljIGdldCBzdXJ2ZXkoKTogU3VydmV5LlN1cnZleSB7XG4gICAgcmV0dXJuIHRoaXMudGV4dFdvcmtlci5zdXJ2ZXk7XG4gIH1cbiAgcHJpdmF0ZSB0aW1lb3V0SWQ6IG51bWJlciA9IC0xO1xuICBwcml2YXRlIG9uSnNvbkVkaXRvckNoYW5nZWQoKTogYW55IHtcbiAgICBpZiAodGhpcy50aW1lb3V0SWQgPiAtMSkge1xuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMudGltZW91dElkKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuaXNQcm9jZXNzaW5nSW1tZWRpYXRlbHkpIHtcbiAgICAgIHRoaXMudGltZW91dElkID0gLTE7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBzZWxmID0gdGhpcztcbiAgICAgIHRoaXMudGltZW91dElkID0gd2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICAgIHNlbGYudGltZW91dElkID0gLTE7XG4gICAgICAgIHNlbGYucHJvY2Vzc0pzb24oc2VsZi50ZXh0KTtcbiAgICAgIH0sIFN1cnZleUpTT05FZGl0b3IudXBkYXRlVGV4dFRpbWVvdXQpO1xuICAgIH1cbiAgfVxuICBwcml2YXRlIHByb2Nlc3NKc29uKHRleHQ6IHN0cmluZyk6IGFueSB7XG4gICAgdGhpcy50ZXh0V29ya2VyID0gbmV3IFN1cnZleVRleHRXb3JrZXIodGV4dCk7XG4gICAgaWYgKHRoaXMuYWNlRWRpdG9yKSB7XG4gICAgICB0aGlzLmFjZUVkaXRvclxuICAgICAgICAuZ2V0U2Vzc2lvbigpXG4gICAgICAgIC5zZXRBbm5vdGF0aW9ucyh0aGlzLmNyZWF0ZUFubm90YXRpb25zKHRleHQsIHRoaXMudGV4dFdvcmtlci5lcnJvcnMpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5rb0Vycm9ycyh0aGlzLnRleHRXb3JrZXIuZXJyb3JzKTtcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBjcmVhdGVBbm5vdGF0aW9ucyh0ZXh0OiBzdHJpbmcsIGVycm9yczogYW55W10pOiBBY2VBamF4LkFubm90YXRpb25bXSB7XG4gICAgdmFyIGFubm90YXRpb25zID0gbmV3IEFycmF5PEFjZUFqYXguQW5ub3RhdGlvbj4oKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVycm9ycy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGVycm9yID0gZXJyb3JzW2ldO1xuICAgICAgdmFyIGFubm90YXRpb246IEFjZUFqYXguQW5ub3RhdGlvbiA9IHtcbiAgICAgICAgcm93OiBlcnJvci5wb3NpdGlvbi5zdGFydC5yb3csXG4gICAgICAgIGNvbHVtbjogZXJyb3IucG9zaXRpb24uc3RhcnQuY29sdW1uLFxuICAgICAgICB0ZXh0OiBlcnJvci50ZXh0LFxuICAgICAgICB0eXBlOiBcImVycm9yXCJcbiAgICAgIH07XG4gICAgICBhbm5vdGF0aW9ucy5wdXNoKGFubm90YXRpb24pO1xuICAgIH1cbiAgICByZXR1cm4gYW5ub3RhdGlvbnM7XG4gIH1cbiAgcHJpdmF0ZSBfcmVhZE9ubHkgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcbiAgLyoqXG4gICAqIEEgYm9vbGVhbiBwcm9wZXJ0eSwgZmFsc2UgYnkgZGVmYXVsdC4gU2V0IGl0IHRvIHRydWUgdG8gZGVueSBlZGl0aW5nLlxuICAgKi9cbiAgcHVibGljIGdldCByZWFkT25seSgpIHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHkoKTtcbiAgfVxuICBwdWJsaWMgc2V0IHJlYWRPbmx5KG5ld1ZhbCkge1xuICAgIHRoaXMuX3JlYWRPbmx5KG5ld1ZhbCk7XG4gIH1cbn1cblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9zdXJ2ZXlKU09ORWRpdG9yLnRzIiwibW9kdWxlLmV4cG9ydHMgPSBcImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBRThBQUFBU0NBWUFBQUFhSklPdkFBQUFHWFJGV0hSVGIyWjBkMkZ5WlFCQlpHOWlaU0JKYldGblpWSmxZV1I1Y2NsbFBBQUFBeVpwVkZoMFdFMU1PbU52YlM1aFpHOWlaUzU0YlhBQUFBQUFBRHcvZUhCaFkydGxkQ0JpWldkcGJqMGk3N3UvSWlCcFpEMGlWelZOTUUxd1EyVm9hVWg2Y21WVGVrNVVZM3ByWXpsa0lqOCtJRHg0T25odGNHMWxkR0VnZUcxc2JuTTZlRDBpWVdSdlltVTZibk02YldWMFlTOGlJSGc2ZUcxd2RHczlJa0ZrYjJKbElGaE5VQ0JEYjNKbElEVXVOaTFqTVRReUlEYzVMakUyTURreU5Dd2dNakF4Tnk4d055OHhNeTB3TVRvd05qb3pPU0FnSUNBZ0lDQWdJajRnUEhKa1pqcFNSRVlnZUcxc2JuTTZjbVJtUFNKb2RIUndPaTh2ZDNkM0xuY3pMbTl5Wnk4eE9UazVMekF5THpJeUxYSmtaaTF6ZVc1MFlYZ3Ribk1qSWo0Z1BISmtaanBFWlhOamNtbHdkR2x2YmlCeVpHWTZZV0p2ZFhROUlpSWdlRzFzYm5NNmVHMXdQU0pvZEhSd09pOHZibk11WVdSdlltVXVZMjl0TDNoaGNDOHhMakF2SWlCNGJXeHVjenA0YlhCTlRUMGlhSFIwY0RvdkwyNXpMbUZrYjJKbExtTnZiUzk0WVhBdk1TNHdMMjF0THlJZ2VHMXNibk02YzNSU1pXWTlJbWgwZEhBNkx5OXVjeTVoWkc5aVpTNWpiMjB2ZUdGd0x6RXVNQzl6Vkhsd1pTOVNaWE52ZFhKalpWSmxaaU1pSUhodGNEcERjbVZoZEc5eVZHOXZiRDBpUVdSdlltVWdVR2h2ZEc5emFHOXdJRU5ESURJd01UZ2dLRmRwYm1SdmQzTXBJaUI0YlhCTlRUcEpibk4wWVc1alpVbEVQU0o0YlhBdWFXbGtPa1EzUlVVd05EUTROalJFUmpFeFJUbEJNVEpCT0RjeE9VRXpSamhFUTBFMUlpQjRiWEJOVFRwRWIyTjFiV1Z1ZEVsRVBTSjRiWEF1Wkdsa09rUTNSVVV3TkRRNU5qUkVSakV4UlRsQk1USkJPRGN4T1VFelJqaEVRMEUxSWo0Z1BIaHRjRTFOT2tSbGNtbDJaV1JHY205dElITjBVbVZtT21sdWMzUmhibU5sU1VROUluaHRjQzVwYVdRNlJEZEZSVEEwTkRZMk5FUkdNVEZGT1VFeE1rRTROekU1UVROR09FUkRRVFVpSUhOMFVtVm1PbVJ2WTNWdFpXNTBTVVE5SW5odGNDNWthV1E2UkRkRlJUQTBORGMyTkVSR01URkZPVUV4TWtFNE56RTVRVE5HT0VSRFFUVWlMejRnUEM5eVpHWTZSR1Z6WTNKcGNIUnBiMjQrSUR3dmNtUm1PbEpFUmo0Z1BDOTRPbmh0Y0cxbGRHRStJRHcvZUhCaFkydGxkQ0JsYm1ROUluSWlQejRFZ0Z5QUFBQUhOVWxFUVZSNDJyeFlXMnhVVlJROWMrZk9nK0tVdnNZV2FTcWxMUllGVVpFZk5FZ0VQa3lKdFNZb1VXTEFHSldZSmdqaWh5WkdOQmoxQTRRUVREQUlST0tIRWtVZU1XbzBNVnJBMkNnVWF3UWNwSVJTUUpoUzJqS2QxNzJ1ZFdlZmVxbnRUSXVVazZ5Wjh6NzdyTDNQUHZzZWo2MzZVejF3SHpBQktBWUtnYkdDQU9BSFRNQUFPQ3dGSklBNGNBWG9CVHFCS05BQkhBYTJjZUx2UWlGVlgxT2pLaElKWmFmVHlqQU0xZHJhNml3NmRlcFVaVm1XQXlhUHg2UGNLWlZLS2EvWHEyemJkc0QyZ1gxeUpYZC9QWStyN1hiOGpSZlpmM0gzNDdvSnlKeUd6SUZBd0pHUnNoT3NNNlh2RHVCSmRmM1RTdUNCeWtRaVdwUk1xaXUyWFJPMDdYVVFMQllPaDErRjRNZGtNODhqUHgvL1IwSFdLMXA0MHpRSEpVcVQ2RW9MZ1NlQU5HQnBYZ0N2S1BLRkxESytDOVFCUnpGbnJadHdnc29iU2xra3IyR1VpSE1NQzFoZEdZODNQdGpSb2JZVkZGeW9OYzA2YnI2MHRIUS90SGVNbW9XRzM0UTJTMUQrak5wMUUrZTJrc0VzU2RJamdxRlNOdkl1eS84bFBiZTJNT1lkQ3pQTlFRY2FPUmE5SG1rMmYrYkE4cFRmMzJsYjFrNEtsVXdtcDhkaU1SNkxFalNYaUFWdW9LQit2OTg1TXNNOWlranZBRThEendGOXJ0TzBGSGhVSzJEZ2taV1UxaDVDazBWa1VkUlY1RlhrM0g2T2plUkk5S0htSGJDd1FnZ0ZCL2tOTndETnppSkJFRzQ2dFN3K3M0bGExejV1c09NNldCM1FndXhXWUxQNFlNNjdHNkRQL1Z4Yjh4RGtHMUkyMlMvYk1SMk12T0tjdmZMemxWcXpScW1xcW1zaHJ3Z0lUd1o1RlNBbEhReCtKVDZyaGhZR1M1c3NCRFNCeEJSUWdVMnN4NWlEd0M1YURqZERRdEZXanp4OTFBcVplNHBZM2R0QUh1RFRaTWlGeDdSY3hqd3VKRFZJK1NVaEtjWWZyQm1CeGQwTmViNUcvVjVVVGROSEdMTGxJZjhlMWo5Q0JhUDhzak1YOUhFUy83Zm1PQ09jSFFZT2MxNjFTcWwxNjBaS0lEZjV4N3p5Y3ZWVE1LZ21lTDBuUUVZbGptNDFoRm9HZ1ZmaStDNkJvTnRCS0gzUE9MRkdKM1YxZFRXZ3o2NVFLUFFGTE9OaHVSUzg0cXQzU0xjeTRKejRzQkRtWFlKTmJwZUlnS1QrZ1BKc0lhWk9yQlpGendaa0cxV0dCOTY2QVNHVmM1V0pUMjRHWmd3NEFhOFpvckhzaVoyUEg4OGMzN1ZybFdyQktWbXdZQ1RrT1d0VXdPL0ZNa2R5dDFqQkl2emRTMkZBM0VjZ3FBR2tqVU45SjRndGgrQ2JTQ0lJZlVPczgwK1o3K2dBWjY4a2RCcDRxdHg5VDhuL2Fmay9ycDJTV05oRXJEa1grV2VFbkZKWVloRGxjc2cxQSsxOThYaWNsOXFMY3BFOWEwajhsanU1YjV4cDA1VGFzMGVwNW1hbFpzNGN6bWhxWGsyRTVkb2dBNExzNTNHQVVFdUIreUZRMU9meldjZ3ZaRDJFTzRLNmRxQ1paY1JZdFhsNWVSelhOWW9YMjM1WVZ4T3d6K1ZMUzFDZUxtN21MMVJmaE9VZkZNVVhtUDlydVlLQ3Ewbk5ZcnVPNVRFRUFRbit2cjRtM0xxODFhcW9SVmpYYnZFN0ZmS2ZvaitFMEQ0Sm5uMHlUM3cwV0pPQTJMRlVXSi9QZFdIY3hGMEtlWmRGcHZOaW1UNE9TQTVyaFpUclZKeUVlMWk4V0tucWFxVU9IQmpPYUdlTkNmQWZRU0FKcTRJQWgxMkI2SmRpY1ZvVGhwQnFxQnVVSUk4aFVZRDk3MkV6KzRsRTIyVGt0Nkw5UTJrT21QSnBsVHZoODhwSnExZG5idDVrY2lTeU9UZGFHY21MeDFVZmhNd3pqTDBRaEVjaURhRytGUUd0YkdHSnR1QWJtTnd4U3lGa1dpSjVIdUVla3RlZGM0cEMzUG9iTnlxMVpZdFNodzZOV0trNmVvZG5WajZZdm85V1psbG5oYUE0L04wbHlYdmszeEtuYkEyeG1SR1RpUGx5anBHdkNwOE9rbkVhTE5hSlRDMk1TYlZTS1IvSnU1Qno1Vzd3MjloNHJkcUw2alY2SVFqRC8yQkdnREY2WDR5amNMTjJROUFlZm1GQVpvOEV5eW41VkxJWjV5RWZGT0ZUY2tOZXpCTFEydTdiRklRa012Rys5L0lRVmgyRHYzUENGeWhUaWYvamJkN05Sd0VTS21FTEU0L3VSZE4xZFEvUDM0MDhuZEZoQk1sTDBKZjkxeXBNc1RTR0QvT0FXaUdsVWdMazA0ejgwWjR2bGxDS012M2kzQ3prR1RLbi9qeGk2QkhBWEhNR1dyVW9ZZ29RUnZFaDhYME1rYzd3QXBFK2s2VDdmTFE5cFY5VjlvN2l3d0RUenpwekRsWkZBbzJNNXZXWERTM1E1RTBHNFRkRDhHVVFkRHh3QmZreHRMak96czROSksrb3FPaDMyWGdwNnRQWXhDbjlsQ1ZCTTFOSS9zY2JtYkNvbGM0ZS9ldFE3a081WGU2aDIzUndMWlo0TTJRNEwyTm9hUkZZR2kwL2dyb0lUa1FWTEpEakF4Sm1mZUI5WGFuZk1QQWUxMlRYTTdXTFloeS8rbjVKaWZwMTdGaFZESzJCaEhFU0Nod0JNVHVEd1dBaUhBNmY3ZTN0UFF6aHl0Qk9xenNGSWRlM3RiVzkxZFBUdzJQVGduaHZFdXJ5c2JrVGFDY2h2ZGc4UTVpUEpaVGhTMDRiMnZieDFRWTRpRDR6QUIvVytSUjRETWZ5TG94cFJoOCtVaFFEWkhNNTZuNEU3dVFKUVA5RndOOTh2RUQ3SjFqekZ0UlhvcTRkYzJ5Q01sYTR2U2pmdzJiSlEwR3hhREFvWHdlbUJOT0c2ekhVa2hBa0tVTFRuZlhJbytKWk9sajVVTysva09yeGJmeDlLT1NFTE80YkZaRzdZaEFNOGxSSFI0ZmpYK1JiMW5rT2lrUWlDcVE2ZmFzUkh0RUhjVk5zcDM5eU8zSDNDd3JuRVN0eElENnRmNHlPaE53UG4vb0JsbXV3WHpRYWRjWkN1ZjFqS0MvYi9oRmdBSXAzMndzaGpOa3RBQUFBQUVsRlRrU3VRbUNDXCJcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL3NyYy9pbWFnZXMvWW91VHViZS5wbmdcbi8vIG1vZHVsZSBpZCA9IDE0NVxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJtb2R1bGUuZXhwb3J0cyA9IFwiZGF0YTppbWFnZS9zdmcreG1sO2Jhc2U2NCxQSE4yWnlCNGJXeHVjejBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01DOXpkbWNpSUhkcFpIUm9QU0kzTlRFaUlHaGxhV2RvZEQwaU5ETXdJaUI0Yld4dWN6cDRiR2x1YXowaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1UazVPUzk0YkdsdWF5SStQR1JsWm5NK0NqeHlaV04wSUdsa1BTSmlJaUIzYVdSMGFEMGlNek13SWlCb1pXbG5hSFE5SWpZMU1TSWdlRDBpTnpFNUxqVWlJSGs5SWpJNU9DNDFJaUJ5ZUQwaU1qQWlMejQ4Wm1sc2RHVnlJR2xrUFNKaElpQjNhV1IwYUQwaU1UUTFMalVsSWlCb1pXbG5hSFE5SWpFeU15VWlJSGc5SWkweU1pNDNKU0lnZVQwaUxURXhMalVsSWlCbWFXeDBaWEpWYm1sMGN6MGliMkpxWldOMFFtOTFibVJwYm1kQ2IzZ2lQZ284Wm1WUFptWnpaWFFnYVc0OUlsTnZkWEpqWlVGc2NHaGhJaUJ5WlhOMWJIUTlJbk5vWVdSdmQwOW1abk5sZEU5MWRHVnlNU0l2UGp4bVpVZGhkWE56YVdGdVFteDFjaUJ6ZEdSRVpYWnBZWFJwYjI0OUlqSTFJaUJwYmowaWMyaGhaRzkzVDJabWMyVjBUM1YwWlhJeElpQnlaWE4xYkhROUluTm9ZV1J2ZDBKc2RYSlBkWFJsY2pFaUx6NEtQR1psUTI5c2IzSk5ZWFJ5YVhnZ2RtRnNkV1Z6UFNJd0lEQWdNQ0F3SURBZ01DQXdJREFnTUNBd0lEQWdNQ0F3SURBZ01DQXdJREFnTUNBd0xqRWdNQ0lnYVc0OUluTm9ZV1J2ZDBKc2RYSlBkWFJsY2pFaUx6NDhMMlpwYkhSbGNqNDhMMlJsWm5NK0NqeG5JR1pwYkd3OUltNXZibVVpSUdacGJHd3RjblZzWlQwaVpYWmxibTlrWkNJZ2RISmhibk5tYjNKdFBTSjBjbUZ1YzJ4aGRHVW9MVFV3T1NBdE5EQTVLU0krUEdjZ2RISmhibk5tYjNKdFBTSnliM1JoZEdVb0xUa3dJRGc0TkM0MUlEWXlOQ2tpUGdvOGRYTmxJR1pwYkd3OUlpTXdNREFpSUdacGJIUmxjajBpZFhKc0tDTmhLU0lnZUd4cGJtczZhSEpsWmowaUkySWlMejQ4ZFhObElHWnBiR3c5SWlOR1JrWWlJSGhzYVc1ck9taHlaV1k5SWlOaUlpOCtQQzluUGdvOGNtVmpkQ0IzYVdSMGFEMGlOekFpSUdobGFXZG9kRDBpT0NJZ2VEMGlOVFF3SWlCNVBTSTJNamdpSUdacGJHdzlJaU5HTkVZMFJqUWlJR1pwYkd3dGNuVnNaVDBpYm05dWVtVnlieUlnZEhKaGJuTm1iM0p0UFNKeWIzUmhkR1VvTFRrd0lEVTNOU0EyTXpJcElpQnllRDBpTkNJdlBnbzhZMmx5WTJ4bElHTjRQU0kxTnpVaUlHTjVQU0kxT0RVaUlISTlJalFpSUdacGJHdzlJaU5HTkVZMFJqUWlJR1pwYkd3dGNuVnNaVDBpYm05dWVtVnlieUlnZEhKaGJuTm1iM0p0UFNKeWIzUmhkR1VvTFRrd0lEVTNOU0ExT0RVcElpOCtDanh3WVhSb0lHWnBiR3c5SWlOR05FWTBSalFpSUdacGJHd3RjblZzWlQwaWJtOXVlbVZ5YnlJZ1pEMGlUVFU1TWlBM09EUldORFkwYURVMk9IWXpNakI2SWk4K1BIQmhkR2dnWm1sc2JEMGlJMFUzUlRkRk55SWdabWxzYkMxeWRXeGxQU0p1YjI1NlpYSnZJaUJrUFNKTk5Ua3lJRFEyTkhZek1qQm9OVFk0VmpRMk5FZzFPVEo2YlRVMk9TMHhkak15TWtnMU9URldORFl6YURVM01Ib2lMejRLUEdOcGNtTnNaU0JqZUQwaU1URTROaUlnWTNrOUlqWXlOQ0lnY2owaU1UVWlJR1pwYkd3OUlpTkdORVkwUmpRaUx6NDhMMmMrUEM5emRtYytcIlxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vc3JjL2ltYWdlcy9zaW11bGF0b3IvZGV2aWNlLWwuc3ZnXG4vLyBtb2R1bGUgaWQgPSAxNDZcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwibW9kdWxlLmV4cG9ydHMgPSBcImRhdGE6aW1hZ2Uvc3ZnK3htbDtiYXNlNjQsUEhOMlp5QjRiV3h1Y3owaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNQzl6ZG1jaUlIZHBaSFJvUFNJME16QWlJR2hsYVdkb2REMGlOelV4SWlCNGJXeHVjenA0YkdsdWF6MGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNVGs1T1M5NGJHbHVheUkrUEdSbFpuTStQSEpsWTNRZ2FXUTlJbUlpSUhkcFpIUm9QU0l6TXpBaUlHaGxhV2RvZEQwaU5qVXhJaUI0UFNJeE1qQWlJSGs5SWpRMU9DSWdjbmc5SWpJd0lpOCtQR1pwYkhSbGNpQnBaRDBpWVNJZ2QybGtkR2c5SWpFME5TNDFKU0lnYUdWcFoyaDBQU0l4TWpNbElpQjRQU0l0TWpJdU55VWlJSGs5SWkweE1TNDFKU0lnWm1sc2RHVnlWVzVwZEhNOUltOWlhbVZqZEVKdmRXNWthVzVuUW05NElqNDhabVZQWm1aelpYUWdhVzQ5SWxOdmRYSmpaVUZzY0doaElpQnlaWE4xYkhROUluTm9ZV1J2ZDA5bVpuTmxkRTkxZEdWeU1TSXZQanhtWlVkaGRYTnphV0Z1UW14MWNpQnpkR1JFWlhacFlYUnBiMjQ5SWpJMUlpQnBiajBpYzJoaFpHOTNUMlptYzJWMFQzVjBaWEl4SWlCeVpYTjFiSFE5SW5Ob1lXUnZkMEpzZFhKUGRYUmxjakVpTHo0OFptVkRiMnh2Y2sxaGRISnBlQ0IyWVd4MVpYTTlJakFnTUNBd0lEQWdNQ0F3SURBZ01DQXdJREFnTUNBd0lEQWdNQ0F3SURBZ01DQXdJREF1TVNBd0lpQnBiajBpYzJoaFpHOTNRbXgxY2s5MWRHVnlNU0l2UGp3dlptbHNkR1Z5UGp3dlpHVm1jejQ4WnlCbWFXeHNQU0p1YjI1bElpQm1hV3hzTFhKMWJHVTlJbVYyWlc1dlpHUWlJSFJ5WVc1elptOXliVDBpZEhKaGJuTnNZWFJsS0MwM01DQXROREE0S1NJK1BIVnpaU0JtYVd4c1BTSWpNREF3SWlCbWFXeDBaWEk5SW5WeWJDZ2pZU2tpSUhoc2FXNXJPbWh5WldZOUlpTmlJaTgrUEhWelpTQm1hV3hzUFNJalJrWkdJaUI0YkdsdWF6cG9jbVZtUFNJallpSXZQanh5WldOMElIZHBaSFJvUFNJM01DSWdhR1ZwWjJoMFBTSTRJaUI0UFNJeU5ESWlJSGs5SWpRM01DSWdabWxzYkQwaUkwWTBSalJHTkNJZ1ptbHNiQzF5ZFd4bFBTSnViMjU2WlhKdklpQnllRDBpTkNJdlBqeGphWEpqYkdVZ1kzZzlJak15TkNJZ1kzazlJalEzTkNJZ2NqMGlOQ0lnWm1sc2JEMGlJMFkwUmpSR05DSWdabWxzYkMxeWRXeGxQU0p1YjI1NlpYSnZJaTgrUEhCaGRHZ2dabWxzYkQwaUkwVTNSVGRGTnlJZ1ptbHNiQzF5ZFd4bFBTSnViMjU2WlhKdklpQmtQU0pOTVRJMElEUTVNR2d6TWpKMk5UY3dTREV5TkZZME9UQjZiVEVnTVhZMU5qaG9Nekl3VmpRNU1VZ3hNalY2SWk4K1BIQmhkR2dnWm1sc2JEMGlJMFkwUmpSR05DSWdabWxzYkMxeWRXeGxQU0p1YjI1NlpYSnZJaUJrUFNKTk1USTFJRFE1TVdnek1qQjJOVFk0U0RFeU5Yb2lMejQ4WTJseVkyeGxJR040UFNJeU9EVWlJR041UFNJeE1EZzBJaUJ5UFNJeE5TSWdabWxzYkQwaUkwWTBSalJHTkNJdlBqd3ZaejQ4TDNOMlp6ND1cIlxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vc3JjL2ltYWdlcy9zaW11bGF0b3IvZGV2aWNlLXAuc3ZnXG4vLyBtb2R1bGUgaWQgPSAxNDdcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiLyogZm9yayBvZiB0aGUgaHR0cHM6Ly9naXRodWIuY29tL1NvcnRhYmxlSlMva25vY2tvdXQtc29ydGFibGVqcyBiZWNhdXNlIG9mIGVzIG1vZHVsZXMgYnVpbGQgZXJyb3IgXG4gICAgd2FpdGluZyBmb3IgYXBwcm92ZSBwdWxscmVxdWVzdHM6XG4gICAgICogaHR0cHM6Ly9naXRodWIuY29tL1NvcnRhYmxlSlMva25vY2tvdXQtc29ydGFibGVqcy9wdWxsLzkpXG4gICAgICogaHR0cHM6Ly9naXRodWIuY29tL1NvcnRhYmxlSlMva25vY2tvdXQtc29ydGFibGVqcy9wdWxsLzEvZmlsZXNcbiovXG5cbi8qZ2xvYmFsIGtvKi9cblxuKGZ1bmN0aW9uKGZhY3RvcnkpIHtcbiAgXCJ1c2Ugc3RyaWN0XCI7XG4gIC8vZ2V0IGtvIHJlZiB2aWEgZ2xvYmFsIG9yIHJlcXVpcmVcbiAgdmFyIGtvUmVmO1xuICBpZiAodHlwZW9mIGtvICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgLy9nbG9iYWwgcmVmIGFscmVhZHkgZGVmaW5lZFxuICAgIGtvUmVmID0ga287XG4gIH0gZWxzZSBpZiAoXG4gICAgdHlwZW9mIHJlcXVpcmUgPT09IFwiZnVuY3Rpb25cIiAmJlxuICAgIHR5cGVvZiBleHBvcnRzID09PSBcIm9iamVjdFwiICYmXG4gICAgdHlwZW9mIG1vZHVsZSA9PT0gXCJvYmplY3RcIlxuICApIHtcbiAgICAvL2NvbW1vbmpzIC8gbm9kZS5qc1xuICAgIGtvUmVmID0gcmVxdWlyZShcImtub2Nrb3V0XCIpO1xuICB9XG4gIC8vZ2V0IHNvcnRhYmxlIHJlZiB2aWEgZ2xvYmFsIG9yIHJlcXVpcmVcbiAgdmFyIHNvcnRhYmxlUmVmO1xuICBpZiAodHlwZW9mIFNvcnRhYmxlICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgLy9nbG9iYWwgcmVmIGFscmVhZHkgZGVmaW5lZFxuICAgIHNvcnRhYmxlUmVmID0gU29ydGFibGU7XG4gIH0gZWxzZSBpZiAoXG4gICAgdHlwZW9mIHJlcXVpcmUgPT09IFwiZnVuY3Rpb25cIiAmJlxuICAgIHR5cGVvZiBleHBvcnRzID09PSBcIm9iamVjdFwiICYmXG4gICAgdHlwZW9mIG1vZHVsZSA9PT0gXCJvYmplY3RcIlxuICApIHtcbiAgICAvL2NvbW1vbmpzIC8gbm9kZS5qc1xuICAgIHNvcnRhYmxlUmVmID0gcmVxdWlyZShcInNvcnRhYmxlanNcIik7XG4gIH1cbiAgLy91c2UgcmVmZXJlbmNlcyBpZiB3ZSBmb3VuZCB0aGVtXG4gIGlmIChrb1JlZiAhPT0gdW5kZWZpbmVkICYmIHNvcnRhYmxlUmVmICE9PSB1bmRlZmluZWQpIHtcbiAgICBmYWN0b3J5KGtvUmVmLCBzb3J0YWJsZVJlZik7XG4gIH0gZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQpIHtcbiAgICAvL2lmIGJvdGggcmVmZXJlbmNlcyBhcmVuJ3QgZm91bmQgeWV0LCBnZXQgdmlhIEFNRCBpZiBhdmFpbGFibGVcbiAgICAvL3dlIG1heSBoYXZlIGEgcmVmZXJlbmNlIHRvIG9ubHkgMSwgb3Igbm9uZVxuICAgIGlmIChrb1JlZiAhPT0gdW5kZWZpbmVkICYmIHNvcnRhYmxlUmVmID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGRlZmluZShbXCJzb3J0YWJsZWpzXCJdLCBmdW5jdGlvbihhbWRTb3J0YWJsZVJlZikge1xuICAgICAgICBmYWN0b3J5KGtvUmVmLCBhbWRTb3J0YWJsZVJlZik7XG4gICAgICB9KTtcbiAgICB9IGVsc2UgaWYgKGtvUmVmID09PSB1bmRlZmluZWQgJiYgc29ydGFibGVSZWYgIT09IHVuZGVmaW5lZCkge1xuICAgICAgZGVmaW5lKFtcImtub2Nrb3V0XCJdLCBmdW5jdGlvbihhbWRLbm9ja291dCkge1xuICAgICAgICBmYWN0b3J5KGFtZEtub2Nrb3V0LCBzb3J0YWJsZVJlZik7XG4gICAgICB9KTtcbiAgICB9IGVsc2UgaWYgKGtvUmVmID09PSB1bmRlZmluZWQgJiYgc29ydGFibGVSZWYgPT09IHVuZGVmaW5lZCkge1xuICAgICAgZGVmaW5lKFtcImtub2Nrb3V0XCIsIFwic29ydGFibGVqc1wiXSwgZmFjdG9yeSk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vbm8gbW9yZSByb3V0ZXMgdG8gZ2V0IHJlZmVyZW5jZXNcbiAgICAvL3JlcG9ydCBzcGVjaWZpYyBlcnJvclxuICAgIGlmIChrb1JlZiAhPT0gdW5kZWZpbmVkICYmIHNvcnRhYmxlUmVmID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcImtub2Nrb3V0LXNvcnRhYmxlIGNvdWxkIG5vdCBnZXQgcmVmZXJlbmNlIHRvIFNvcnRhYmxlXCIpO1xuICAgIH0gZWxzZSBpZiAoa29SZWYgPT09IHVuZGVmaW5lZCAmJiBzb3J0YWJsZVJlZiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJrbm9ja291dC1zb3J0YWJsZSBjb3VsZCBub3QgZ2V0IHJlZmVyZW5jZSB0byBLbm9ja291dFwiKTtcbiAgICB9IGVsc2UgaWYgKGtvUmVmID09PSB1bmRlZmluZWQgJiYgc29ydGFibGVSZWYgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBcImtub2Nrb3V0LXNvcnRhYmxlIGNvdWxkIG5vdCBnZXQgcmVmZXJlbmNlIHRvIEtub2Nrb3V0IG9yIFNvcnRhYmxlXCJcbiAgICAgICk7XG4gICAgfVxuICB9XG59KShmdW5jdGlvbihrbywgU29ydGFibGUpIHtcbiAgXCJ1c2Ugc3RyaWN0XCI7XG5cbiAgdmFyIGluaXQgPSBmdW5jdGlvbihcbiAgICAgIGVsZW1lbnQsXG4gICAgICB2YWx1ZUFjY2Vzc29yLFxuICAgICAgYWxsQmluZGluZ3MsXG4gICAgICB2aWV3TW9kZWwsXG4gICAgICBiaW5kaW5nQ29udGV4dCxcbiAgICAgIHNvcnRhYmxlT3B0aW9uc1xuICAgICkge1xuICAgICAgdmFyIG9wdGlvbnMgPSBidWlsZE9wdGlvbnModmFsdWVBY2Nlc3Nvciwgc29ydGFibGVPcHRpb25zKTtcblxuICAgICAgLy8gSXQncyBzZWVtcyB0aGF0IHdlIGNhbm5vdCB1cGRhdGUgdGhlIGV2ZW50aGFuZGxlcnMgYWZ0ZXIgd2UndmUgY3JlYXRlZFxuICAgICAgLy8gdGhlIHNvcnRhYmxlLCBzbyBkZWZpbmUgdGhlbSBpbiBpbml0IGluc3RlYWQgb2YgdXBkYXRlXG4gICAgICBbXG4gICAgICAgIFwib25TdGFydFwiLFxuICAgICAgICBcIm9uRW5kXCIsXG4gICAgICAgIFwib25SZW1vdmVcIixcbiAgICAgICAgXCJvbkFkZFwiLFxuICAgICAgICBcIm9uVXBkYXRlXCIsXG4gICAgICAgIFwib25Tb3J0XCIsXG4gICAgICAgIFwib25GaWx0ZXJcIixcbiAgICAgICAgXCJvbk1vdmVcIixcbiAgICAgICAgXCJvbkNsb25lXCJcbiAgICAgIF0uZm9yRWFjaChmdW5jdGlvbihlKSB7XG4gICAgICAgIGlmIChvcHRpb25zW2VdIHx8IGV2ZW50SGFuZGxlcnNbZV0pXG4gICAgICAgICAgb3B0aW9uc1tlXSA9IGZ1bmN0aW9uKFxuICAgICAgICAgICAgZXZlbnRUeXBlLFxuICAgICAgICAgICAgcGFyZW50Vk0sXG4gICAgICAgICAgICBwYXJlbnRCaW5kaW5ncyxcbiAgICAgICAgICAgIGhhbmRsZXIsXG4gICAgICAgICAgICBlXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICB2YXIgaXRlbVZNID0ga28uZGF0YUZvcihlLml0ZW0pLFxuICAgICAgICAgICAgICAvLyBBbGwgb2YgdGhlIGJpbmRpbmdzIG9uIHRoZSBwYXJlbnQgZWxlbWVudFxuICAgICAgICAgICAgICBiaW5kaW5ncyA9IGtvLnV0aWxzLnBlZWtPYnNlcnZhYmxlKHBhcmVudEJpbmRpbmdzKCkpLFxuICAgICAgICAgICAgICAvLyBUaGUgYmluZGluZyBvcHRpb25zIGZvciB0aGUgZHJhZ2dhYmxlL3NvcnRhYmxlIGJpbmRpbmcgb2YgdGhlIHBhcmVudCBlbGVtZW50XG4gICAgICAgICAgICAgIGJpbmRpbmdIYW5kbGVyQmluZGluZyA9IGJpbmRpbmdzLnNvcnRhYmxlIHx8IGJpbmRpbmdzLmRyYWdnYWJsZSxcbiAgICAgICAgICAgICAgLy8gVGhlIGNvbGxlY3Rpb24gdGhhdCB3ZSBzaG91bGQgbW9kaWZ5XG4gICAgICAgICAgICAgIGNvbGxlY3Rpb24gPVxuICAgICAgICAgICAgICAgIGJpbmRpbmdIYW5kbGVyQmluZGluZy5jb2xsZWN0aW9uIHx8XG4gICAgICAgICAgICAgICAgYmluZGluZ0hhbmRsZXJCaW5kaW5nLmZvcmVhY2g7XG4gICAgICAgICAgICBpZiAoaGFuZGxlcikgaGFuZGxlcihlLCBpdGVtVk0sIHBhcmVudFZNLCBjb2xsZWN0aW9uLCBiaW5kaW5ncyk7XG4gICAgICAgICAgICBpZiAoZXZlbnRIYW5kbGVyc1tldmVudFR5cGVdKVxuICAgICAgICAgICAgICBldmVudEhhbmRsZXJzW2V2ZW50VHlwZV0oXG4gICAgICAgICAgICAgICAgZSxcbiAgICAgICAgICAgICAgICBpdGVtVk0sXG4gICAgICAgICAgICAgICAgcGFyZW50Vk0sXG4gICAgICAgICAgICAgICAgY29sbGVjdGlvbixcbiAgICAgICAgICAgICAgICBiaW5kaW5nc1xuICAgICAgICAgICAgICApO1xuICAgICAgICAgIH0uYmluZCh1bmRlZmluZWQsIGUsIHZpZXdNb2RlbCwgYWxsQmluZGluZ3MsIG9wdGlvbnNbZV0pO1xuICAgICAgfSk7XG5cbiAgICAgIHZhciBzb3J0YWJsZUVsZW1lbnQgPSBTb3J0YWJsZS5jcmVhdGUoZWxlbWVudCwgb3B0aW9ucyk7XG5cbiAgICAgIC8vIERlc3Ryb3kgdGhlIHNvcnRhYmxlIGlmIGtub2Nrb3V0IGRpc3Bvc2VzIHRoZSBlbGVtZW50IGl0J3MgY29ubmVjdGVkIHRvXG4gICAgICBrby51dGlscy5kb21Ob2RlRGlzcG9zYWwuYWRkRGlzcG9zZUNhbGxiYWNrKGVsZW1lbnQsIGZ1bmN0aW9uKCkge1xuICAgICAgICBzb3J0YWJsZUVsZW1lbnQuZGVzdHJveSgpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4ga28uYmluZGluZ0hhbmRsZXJzLnRlbXBsYXRlLmluaXQoZWxlbWVudCwgdmFsdWVBY2Nlc3Nvcik7XG4gICAgfSxcbiAgICB1cGRhdGUgPSBmdW5jdGlvbihcbiAgICAgIGVsZW1lbnQsXG4gICAgICB2YWx1ZUFjY2Vzc29yLFxuICAgICAgYWxsQmluZGluZ3MsXG4gICAgICB2aWV3TW9kZWwsXG4gICAgICBiaW5kaW5nQ29udGV4dCxcbiAgICAgIHNvcnRhYmxlT3B0aW9uc1xuICAgICkge1xuICAgICAgLy8gVGhlcmUgc2VlbXMgdG8gYmUgc29tZSBwcm9ibGVtcyB3aXRoIHVwZGF0aW5nIHRoZSBvcHRpb25zIG9mIGEgc29ydGFibGVcbiAgICAgIC8vIFRlc3RlZCB0byBjaGFuZ2UgZXZlbnRoYW5kbGVycyBhbmQgdGhlIGdyb3VwIG9wdGlvbnMgd2l0aG91dCBhbnkgbHVja1xuXG4gICAgICByZXR1cm4ga28uYmluZGluZ0hhbmRsZXJzLnRlbXBsYXRlLnVwZGF0ZShcbiAgICAgICAgZWxlbWVudCxcbiAgICAgICAgdmFsdWVBY2Nlc3NvcixcbiAgICAgICAgYWxsQmluZGluZ3MsXG4gICAgICAgIHZpZXdNb2RlbCxcbiAgICAgICAgYmluZGluZ0NvbnRleHRcbiAgICAgICk7XG4gICAgfSxcbiAgICBldmVudEhhbmRsZXJzID0gKGZ1bmN0aW9uKGhhbmRsZXJzKSB7XG4gICAgICB2YXIgbW92ZU9wZXJhdGlvbnMgPSBbXSxcbiAgICAgICAgdHJ5TW92ZU9wZXJhdGlvbiA9IGZ1bmN0aW9uKFxuICAgICAgICAgIGUsXG4gICAgICAgICAgaXRlbVZNLFxuICAgICAgICAgIHBhcmVudFZNLFxuICAgICAgICAgIGNvbGxlY3Rpb24sXG4gICAgICAgICAgcGFyZW50QmluZGluZ3NcbiAgICAgICAgKSB7XG4gICAgICAgICAgLy8gQSBtb3ZlIG9wZXJhdGlvbiBpcyB0aGUgY29tYmluYXRpb24gb2YgYSBhZGQgYW5kIHJlbW92ZSBldmVudCxcbiAgICAgICAgICAvLyB0aGlzIGlzIHRvIG1ha2Ugc3VyZSB0aGF0IHdlIGhhdmUgYm90aCB0aGUgdGFyZ2V0IGFuZCBvcmlnaW4gY29sbGVjdGlvbnNcbiAgICAgICAgICB2YXIgY3VycmVudE9wZXJhdGlvbiA9IHtcbiAgICAgICAgICAgICAgZXZlbnQ6IGUsXG4gICAgICAgICAgICAgIGl0ZW1WTTogaXRlbVZNLFxuICAgICAgICAgICAgICBwYXJlbnRWTTogcGFyZW50Vk0sXG4gICAgICAgICAgICAgIGNvbGxlY3Rpb246IGNvbGxlY3Rpb24sXG4gICAgICAgICAgICAgIHBhcmVudEJpbmRpbmdzOiBwYXJlbnRCaW5kaW5nc1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGV4aXN0aW5nT3BlcmF0aW9uID0gbW92ZU9wZXJhdGlvbnMuZmlsdGVyKGZ1bmN0aW9uKG9wKSB7XG4gICAgICAgICAgICAgIHJldHVybiBvcC5pdGVtVk0gPT09IGN1cnJlbnRPcGVyYXRpb24uaXRlbVZNO1xuICAgICAgICAgICAgfSlbMF07XG5cbiAgICAgICAgICBpZiAoIWV4aXN0aW5nT3BlcmF0aW9uKSB7XG4gICAgICAgICAgICBtb3ZlT3BlcmF0aW9ucy5wdXNoKGN1cnJlbnRPcGVyYXRpb24pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBXZSdyZSBmaW5pc2hpbmcgdGhlIG9wZXJhdGlvbiBhbmQgYWxyZWFkeSBoYXZlIGEgaGFuZGxlIG9uXG4gICAgICAgICAgICAvLyB0aGUgb3BlcmF0aW9uIGl0ZW0gbWVhbmluZyB0aGF0IGl0J3Mgc2FmZSB0byByZW1vdmUgaXRcbiAgICAgICAgICAgIG1vdmVPcGVyYXRpb25zLnNwbGljZShtb3ZlT3BlcmF0aW9ucy5pbmRleE9mKGV4aXN0aW5nT3BlcmF0aW9uKSwgMSk7XG5cbiAgICAgICAgICAgIHZhciByZW1vdmVPcGVyYXRpb24gPVxuICAgICAgICAgICAgICAgIGN1cnJlbnRPcGVyYXRpb24uZXZlbnQudHlwZSA9PT0gXCJyZW1vdmVcIlxuICAgICAgICAgICAgICAgICAgPyBjdXJyZW50T3BlcmF0aW9uXG4gICAgICAgICAgICAgICAgICA6IGV4aXN0aW5nT3BlcmF0aW9uLFxuICAgICAgICAgICAgICBhZGRPcGVyYXRpb24gPVxuICAgICAgICAgICAgICAgIGN1cnJlbnRPcGVyYXRpb24uZXZlbnQudHlwZSA9PT0gXCJhZGRcIlxuICAgICAgICAgICAgICAgICAgPyBjdXJyZW50T3BlcmF0aW9uXG4gICAgICAgICAgICAgICAgICA6IGV4aXN0aW5nT3BlcmF0aW9uO1xuXG4gICAgICAgICAgICBtb3ZlSXRlbShcbiAgICAgICAgICAgICAgaXRlbVZNLFxuICAgICAgICAgICAgICByZW1vdmVPcGVyYXRpb24uY29sbGVjdGlvbixcbiAgICAgICAgICAgICAgYWRkT3BlcmF0aW9uLmNvbGxlY3Rpb24sXG4gICAgICAgICAgICAgIGFkZE9wZXJhdGlvbi5ldmVudC5jbG9uZSxcbiAgICAgICAgICAgICAgYWRkT3BlcmF0aW9uLmV2ZW50XG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgLy8gTW92ZXMgYW4gaXRlbSBmcm9tIHRoZSBcImZyb21cIiBjb2xsZWN0aW9uIHRvIHRoZSBcInRvXCIgY29sbGVjdGlvbiwgdGhlc2VcbiAgICAgICAgLy8gY2FuIGJlIHJlZmVyZW5jZXMgdG8gdGhlIHNhbWUgY29sbGVjdGlvbiB3aGljaCBtZWFucyBpdCdzIGEgc29ydC5cbiAgICAgICAgLy8gY2xvbmUgaW5kaWNhdGVzIGlmIHdlIHNob3VsZCBtb3ZlIG9yIGNvcHkgdGhlIGl0ZW0gaW50byB0aGUgbmV3IGNvbGxlY3Rpb25cbiAgICAgICAgbW92ZUl0ZW0gPSBmdW5jdGlvbihpdGVtVk0sIGZyb20sIHRvLCBjbG9uZSwgZSkge1xuICAgICAgICAgIC8vIFVud3JhcHBpbmcgdGhpcyBhbGxvd3MgdXMgdG8gbWFuaXB1bGF0ZSB0aGUgYWN0dWFsIGFycmF5XG4gICAgICAgICAgdmFyIGZyb21BcnJheSA9IGZyb20oKSxcbiAgICAgICAgICAgIC8vIEl0J3Mgbm90IGNlcnRhaW4gdGhhdCB0aGUgaXRlbXMgYWN0dWFsIGluZGV4IGlzIHRoZSBzYW1lXG4gICAgICAgICAgICAvLyBhcyB0aGUgaW5kZXggcmVwb3J0ZWQgYnkgc29ydGFibGUgZHVlIHRvIGZpbHRlcmluZyBldGMuXG4gICAgICAgICAgICBvcmlnaW5hbEluZGV4ID0gZnJvbUFycmF5LmluZGV4T2YoaXRlbVZNKSxcbiAgICAgICAgICAgIG5ld0luZGV4ID0gZS5uZXdJbmRleDtcblxuICAgICAgICAgIC8vIFdlIGhhdmUgdG8gZmluZCBvdXQgdGhlIGFjdHVhbCBkZXNpcmVkIGluZGV4IG9mIHRoZSB0byBhcnJheSxcbiAgICAgICAgICAvLyBhcyB0aGlzIG1pZ2h0IGJlIGEgY29tcHV0ZWQgYXJyYXkuIFdlIGNvdWxkIG90aGVyd2lzZSBwb3RlbnRpYWxseVxuICAgICAgICAgIC8vIGRyb3AgYW4gaXRlbSBhYm92ZSB0aGUgM3JkIHZpc2libGUgaXRlbSwgYnV0IHRoZSAybmQgdmlzaWJsZSBpdGVtXG4gICAgICAgICAgLy8gaGFzIGFuIGFjdHVhbCBpbmRleCBvZiA1LlxuICAgICAgICAgIGlmIChlLml0ZW0ucHJldmlvdXNFbGVtZW50U2libGluZykge1xuICAgICAgICAgICAgbmV3SW5kZXggPSB0bygpLmluZGV4T2Yoa28uZGF0YUZvcihlLml0ZW0ucHJldmlvdXNFbGVtZW50U2libGluZykpO1xuICAgICAgICAgICAgbmV3SW5kZXggKz0gbmV3SW5kZXggPiBvcmlnaW5hbEluZGV4ID8gMCA6IDE7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gUmVtb3ZlIHNvcnRhYmxlcyBcInVuYm91bmRcIiBlbGVtZW50XG4gICAgICAgICAgZS5pdGVtLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZS5pdGVtKTtcblxuICAgICAgICAgIC8vIFRoaXMgc3BsaWNlIGlzIG5lY2Vzc2FyeSBmb3IgYm90aCBjbG9uZSBhbmQgbW92ZS9zb3J0XG4gICAgICAgICAgLy8gSW4gc29ydC9tb3ZlIHNpbmNlIGl0IHNob3VsZG4ndCBiZSBhdCB0aGlzIGluZGV4L2luIHRoaXMgYXJyYXkgYW55bW9yZVxuICAgICAgICAgIC8vIEluIGNsb25lIHNpbmNlIHdlIGhhdmUgdG8gd29yayBhcm91bmQga25vY2tvdXRzIHZhbHVIYXNNdXRhdGVkXG4gICAgICAgICAgLy8gd2hlbiBtYW5pcHVsYXRpbmcgYXJyYXlzIGFuZCBhdm9pZCBhIFwidW5ib3VuZFwiIGl0ZW0gYWRkZWQgYnkgc29ydGFibGVcbiAgICAgICAgICBmcm9tQXJyYXkuc3BsaWNlKG9yaWdpbmFsSW5kZXgsIDEpO1xuICAgICAgICAgIC8vIFVwZGF0ZSB0aGUgYXJyYXksIHRoaXMgd2lsbCBhbHNvIHJlbW92ZSBzb3J0YWJsZXMgXCJ1bmJvdW5kXCIgY2xvbmVcbiAgICAgICAgICBmcm9tLnZhbHVlSGFzTXV0YXRlZCgpO1xuICAgICAgICAgIGlmIChjbG9uZSAmJiBmcm9tICE9PSB0bykge1xuICAgICAgICAgICAgLy8gUmVhZCB0aGUgaXRlbVxuICAgICAgICAgICAgZnJvbUFycmF5LnNwbGljZShvcmlnaW5hbEluZGV4LCAwLCBpdGVtVk0pO1xuICAgICAgICAgICAgLy8gRm9yY2Uga25vY2tvdXQgdG8gdXBkYXRlXG4gICAgICAgICAgICBmcm9tLnZhbHVlSGFzTXV0YXRlZCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBGb3JjZSBkZWZlcnJlZCB0YXNrcyB0byBydW4gbm93LCByZWdpc3RlcmluZyB0aGUgcmVtb3ZhbFxuICAgICAgICAgICEha28udGFza3MgJiYga28udGFza3MucnVuRWFybHkoKTtcbiAgICAgICAgICAvLyBJbnNlcnQgdGhlIGl0ZW0gb24gaXRzIG5ldyBwb3NpdGlvblxuICAgICAgICAgIHRvKCkuc3BsaWNlKG5ld0luZGV4LCAwLCBpdGVtVk0pO1xuICAgICAgICAgIC8vIE1ha2Ugc3VyZSB0byB0ZWxsIGtub2Nrb3V0IHRoYXQgd2UndmUgbW9kaWZpZWQgdGhlIGFjdHVhbCBhcnJheS5cbiAgICAgICAgICB0by52YWx1ZUhhc011dGF0ZWQoKTtcbiAgICAgICAgfTtcblxuICAgICAgaGFuZGxlcnMub25SZW1vdmUgPSB0cnlNb3ZlT3BlcmF0aW9uO1xuICAgICAgaGFuZGxlcnMub25BZGQgPSB0cnlNb3ZlT3BlcmF0aW9uO1xuICAgICAgaGFuZGxlcnMub25VcGRhdGUgPSBmdW5jdGlvbihcbiAgICAgICAgZSxcbiAgICAgICAgaXRlbVZNLFxuICAgICAgICBwYXJlbnRWTSxcbiAgICAgICAgY29sbGVjdGlvbixcbiAgICAgICAgcGFyZW50QmluZGluZ3NcbiAgICAgICkge1xuICAgICAgICAvLyBUaGlzIHdpbGwgYmUgcGVyZm9ybWVkIGFzIGEgc29ydCBzaW5jZSB0aGUgdG8vZnJvbSBjb2xsZWN0aW9uc1xuICAgICAgICAvLyByZWZlcmVuY2UgdGhlIHNhbWUgY29sbGVjdGlvbiBhbmQgY2xvbmUgaXMgc2V0IHRvIGZhbHNlXG4gICAgICAgIG1vdmVJdGVtKGl0ZW1WTSwgY29sbGVjdGlvbiwgY29sbGVjdGlvbiwgZmFsc2UsIGUpO1xuICAgICAgfTtcblxuICAgICAgcmV0dXJuIGhhbmRsZXJzO1xuICAgIH0pKHt9KSxcbiAgICAvLyBiaW5kaW5nT3B0aW9ucyBhcmUgdGhlIG9wdGlvbnMgc2V0IGluIHRoZSBcImRhdGEtYmluZFwiIGF0dHJpYnV0ZSBpbiB0aGUgdWkuXG4gICAgLy8gb3B0aW9ucyBhcmUgY3VzdG9tIG9wdGlvbnMsIGZvciBpbnN0YW5jZSBkcmFnZ2FibGUvc29ydGFibGUgc3BlY2lmaWMgb3B0aW9uc1xuICAgIGJ1aWxkT3B0aW9ucyA9IGZ1bmN0aW9uKGJpbmRpbmdPcHRpb25zLCBvcHRpb25zKSB7XG4gICAgICAvLyBkZWVwIGNsb25lL2NvcHkgb2YgcHJvcGVydGllcyBmcm9tIHRoZSBcImZyb21cIiBhcmd1bWVudCBvbnRvXG4gICAgICAvLyB0aGUgXCJpbnRvXCIgYXJndW1lbnQgYW5kIHJldHVybnMgdGhlIG1vZGlmaWVkIFwiaW50b1wiXG4gICAgICB2YXIgbWVyZ2UgPSBmdW5jdGlvbihpbnRvLCBmcm9tKSB7XG4gICAgICAgICAgZm9yICh2YXIgcHJvcCBpbiBmcm9tKSB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChmcm9tW3Byb3BdKSA9PT0gXCJbb2JqZWN0IE9iamVjdF1cIlxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoaW50b1twcm9wXSkgIT09IFwiW29iamVjdCBPYmplY3RdXCJcbiAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgaW50b1twcm9wXSA9IHt9O1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGludG9bcHJvcF0gPSBtZXJnZShpbnRvW3Byb3BdLCBmcm9tW3Byb3BdKTtcbiAgICAgICAgICAgIH0gZWxzZSBpbnRvW3Byb3BdID0gZnJvbVtwcm9wXTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gaW50bztcbiAgICAgICAgfSxcbiAgICAgICAgLy8gdW53cmFwIHRoZSBzdXBwbGllZCBvcHRpb25zXG4gICAgICAgIHVud3JhcHBlZE9wdGlvbnMgPVxuICAgICAgICAgIGtvLnV0aWxzLnBlZWtPYnNlcnZhYmxlKGJpbmRpbmdPcHRpb25zKCkpLm9wdGlvbnMgfHwge307XG5cbiAgICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHdlIGRvbid0IG1vZGlmeSB0aGUgcHJvdmlkZWQgc2V0dGluZ3Mgb2JqZWN0XG4gICAgICBvcHRpb25zID0gbWVyZ2Uoe30sIG9wdGlvbnMpO1xuXG4gICAgICAvLyBncm91cCBpcyBoYW5kbGVkIGRpZmZlcmVudGx5IHNpbmNlIHdlIHNob3VsZCBib3RoIGFsbG93IHRvIGNoYW5nZVxuICAgICAgLy8gYSBkcmFnZ2FibGUgdG8gYSBzb3J0YWJsZSAoYW5kIHZpY2UgdmVyc2EpLCBidXQgc3RpbGwgYmUgYWJsZSB0byBzZXRcbiAgICAgIC8vIGEgbmFtZSBvbiBhIGRyYWdnYWJsZSB3aXRob3V0IGl0IGJlY29taW5nIGEgZHJvcCB0YXJnZXQuXG4gICAgICBpZiAoXG4gICAgICAgIHVud3JhcHBlZE9wdGlvbnMuZ3JvdXAgJiZcbiAgICAgICAgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHVud3JhcHBlZE9wdGlvbnMuZ3JvdXApICE9PVxuICAgICAgICAgIFwiW29iamVjdCBPYmplY3RdXCJcbiAgICAgICkge1xuICAgICAgICAvLyBncm91cCBwcm9wZXJ0eSBpcyBhIG5hbWUgc3RyaW5nIGRlY2xhcmF0aW9uLCBjb252ZXJ0IHRvIG9iamVjdC5cbiAgICAgICAgdW53cmFwcGVkT3B0aW9ucy5ncm91cCA9IHsgbmFtZTogdW53cmFwcGVkT3B0aW9ucy5ncm91cCB9O1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbWVyZ2Uob3B0aW9ucywgdW53cmFwcGVkT3B0aW9ucyk7XG4gICAgfTtcblxuICBrby5iaW5kaW5nSGFuZGxlcnMuZHJhZ2dhYmxlID0ge1xuICAgIHNvcnRhYmxlT3B0aW9uczoge1xuICAgICAgZ3JvdXA6IHsgcHVsbDogXCJjbG9uZVwiLCBwdXQ6IGZhbHNlIH0sXG4gICAgICBzb3J0OiBmYWxzZVxuICAgIH0sXG4gICAgaW5pdDogZnVuY3Rpb24oXG4gICAgICBlbGVtZW50LFxuICAgICAgdmFsdWVBY2Nlc3NvcixcbiAgICAgIGFsbEJpbmRpbmdzLFxuICAgICAgdmlld01vZGVsLFxuICAgICAgYmluZGluZ0NvbnRleHRcbiAgICApIHtcbiAgICAgIHJldHVybiBpbml0KFxuICAgICAgICBlbGVtZW50LFxuICAgICAgICB2YWx1ZUFjY2Vzc29yLFxuICAgICAgICBhbGxCaW5kaW5ncyxcbiAgICAgICAgdmlld01vZGVsLFxuICAgICAgICBiaW5kaW5nQ29udGV4dCxcbiAgICAgICAga28uYmluZGluZ0hhbmRsZXJzLmRyYWdnYWJsZS5zb3J0YWJsZU9wdGlvbnNcbiAgICAgICk7XG4gICAgfSxcbiAgICB1cGRhdGU6IGZ1bmN0aW9uKFxuICAgICAgZWxlbWVudCxcbiAgICAgIHZhbHVlQWNjZXNzb3IsXG4gICAgICBhbGxCaW5kaW5ncyxcbiAgICAgIHZpZXdNb2RlbCxcbiAgICAgIGJpbmRpbmdDb250ZXh0XG4gICAgKSB7XG4gICAgICByZXR1cm4gdXBkYXRlKFxuICAgICAgICBlbGVtZW50LFxuICAgICAgICB2YWx1ZUFjY2Vzc29yLFxuICAgICAgICBhbGxCaW5kaW5ncyxcbiAgICAgICAgdmlld01vZGVsLFxuICAgICAgICBiaW5kaW5nQ29udGV4dCxcbiAgICAgICAga28uYmluZGluZ0hhbmRsZXJzLmRyYWdnYWJsZS5zb3J0YWJsZU9wdGlvbnNcbiAgICAgICk7XG4gICAgfVxuICB9O1xuXG4gIGtvLmJpbmRpbmdIYW5kbGVycy5zb3J0YWJsZSA9IHtcbiAgICBzb3J0YWJsZU9wdGlvbnM6IHtcbiAgICAgIGdyb3VwOiB7IHB1bGw6IHRydWUsIHB1dDogdHJ1ZSB9XG4gICAgfSxcbiAgICBpbml0OiBmdW5jdGlvbihcbiAgICAgIGVsZW1lbnQsXG4gICAgICB2YWx1ZUFjY2Vzc29yLFxuICAgICAgYWxsQmluZGluZ3MsXG4gICAgICB2aWV3TW9kZWwsXG4gICAgICBiaW5kaW5nQ29udGV4dFxuICAgICkge1xuICAgICAgcmV0dXJuIGluaXQoXG4gICAgICAgIGVsZW1lbnQsXG4gICAgICAgIHZhbHVlQWNjZXNzb3IsXG4gICAgICAgIGFsbEJpbmRpbmdzLFxuICAgICAgICB2aWV3TW9kZWwsXG4gICAgICAgIGJpbmRpbmdDb250ZXh0LFxuICAgICAgICBrby5iaW5kaW5nSGFuZGxlcnMuc29ydGFibGUuc29ydGFibGVPcHRpb25zXG4gICAgICApO1xuICAgIH0sXG4gICAgdXBkYXRlOiBmdW5jdGlvbihcbiAgICAgIGVsZW1lbnQsXG4gICAgICB2YWx1ZUFjY2Vzc29yLFxuICAgICAgYWxsQmluZGluZ3MsXG4gICAgICB2aWV3TW9kZWwsXG4gICAgICBiaW5kaW5nQ29udGV4dFxuICAgICkge1xuICAgICAgcmV0dXJuIHVwZGF0ZShcbiAgICAgICAgZWxlbWVudCxcbiAgICAgICAgdmFsdWVBY2Nlc3NvcixcbiAgICAgICAgYWxsQmluZGluZ3MsXG4gICAgICAgIHZpZXdNb2RlbCxcbiAgICAgICAgYmluZGluZ0NvbnRleHQsXG4gICAgICAgIGtvLmJpbmRpbmdIYW5kbGVycy5zb3J0YWJsZS5zb3J0YWJsZU9wdGlvbnNcbiAgICAgICk7XG4gICAgfVxuICB9O1xufSk7XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL3ZlbmRvci9rbm9ja291dC1zb3J0YWJsZS5qc1xuLy8gbW9kdWxlIGlkID0gMTQ4XG4vLyBtb2R1bGUgY2h1bmtzID0gMCJdLCJzb3VyY2VSb290IjoiIn0=
| ver. 1.4 |
Github
|
.
| PHP 7.2.34 | Generation time: 1.62 |
proxy
|
phpinfo
|
Settings