survey-creator-react 1.9.52 → 1.9.53
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/survey-creator-react.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* SurveyJS Creator React v1.9.
|
|
2
|
+
* SurveyJS Creator React v1.9.53
|
|
3
3
|
* (c) 2015-2022 Devsoft Baltic OÜ - http://surveyjs.io/
|
|
4
4
|
* Github: https://github.com/surveyjs/survey-creator
|
|
5
5
|
* License: https://surveyjs.io/Licenses#SurveyCreator
|
|
@@ -1405,6 +1405,10 @@ var SurveyLocStringEditor = /** @class */ (function (_super) {
|
|
|
1405
1405
|
// document.execCommand('selectAll', false, null);
|
|
1406
1406
|
}
|
|
1407
1407
|
};
|
|
1408
|
+
SurveyLocStringEditor.prototype.componentDidUpdate = function (prevProps, prevState) {
|
|
1409
|
+
_super.prototype.componentDidUpdate.call(this, prevProps, prevState);
|
|
1410
|
+
this.baseModel.afterRender();
|
|
1411
|
+
};
|
|
1408
1412
|
SurveyLocStringEditor.prototype.componentWillUnmount = function () {
|
|
1409
1413
|
_super.prototype.componentWillUnmount.call(this);
|
|
1410
1414
|
if (!this.locString)
|
|
@@ -1442,12 +1446,12 @@ var SurveyLocStringEditor = /** @class */ (function (_super) {
|
|
|
1442
1446
|
var control = null;
|
|
1443
1447
|
if (this.locString.hasHtml) {
|
|
1444
1448
|
var htmlValue = { __html: this.baseModel.focused && this.baseModel.editAsText && this.locString.text || this.locString.renderedHtml };
|
|
1445
|
-
control = (react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("span", { role: "textbox", ref: this.svStringEditorRef, className: "sv-string-editor", contentEditable: this.contentEditable, spellCheck: false, "aria-placeholder": this.placeholder, suppressContentEditableWarning: true,
|
|
1449
|
+
control = (react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("span", { role: "textbox", ref: this.svStringEditorRef, className: "sv-string-editor", contentEditable: this.contentEditable, spellCheck: false, "aria-placeholder": this.placeholder, "aria-label": this.placeholder || "content editable", suppressContentEditableWarning: true,
|
|
1446
1450
|
// style={this.style}
|
|
1447
1451
|
dangerouslySetInnerHTML: htmlValue, onBlur: this.onBlur, onFocus: this.onFocus, onKeyDown: this.onKeyDown, onMouseUp: this.onMouseUp, onClick: this.edit }));
|
|
1448
1452
|
}
|
|
1449
1453
|
else {
|
|
1450
|
-
control = (react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("span", { role: "textbox", ref: this.svStringEditorRef, className: "sv-string-editor", contentEditable: this.contentEditable, spellCheck: false, "aria-placeholder": this.placeholder, suppressContentEditableWarning: true,
|
|
1454
|
+
control = (react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("span", { role: "textbox", ref: this.svStringEditorRef, className: "sv-string-editor", contentEditable: this.contentEditable, spellCheck: false, "aria-placeholder": this.placeholder, "aria-label": this.placeholder || "content editable", suppressContentEditableWarning: true,
|
|
1451
1455
|
// style={this.style}
|
|
1452
1456
|
onBlur: this.onBlur, onInput: this.onInput, onCompositionStart: this.onCompositionStart, onCompositionEnd: this.onCompositionEnd, onFocus: this.onFocus, onKeyDown: this.onKeyDown, onKeyUp: this.onKeyUp, onMouseUp: this.onMouseUp, onClick: this.edit }, this.locString.renderedHtml));
|
|
1453
1457
|
}
|
|
@@ -2271,7 +2275,7 @@ var QuestionDropdownAdornerComponent = /** @class */ (function (_super) {
|
|
|
2271
2275
|
var _this = this;
|
|
2272
2276
|
var textStyle = this.question.textStyle;
|
|
2273
2277
|
return (react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", { className: "svc-question__dropdown-choices--wrapper" },
|
|
2274
|
-
react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", { className: "svc-question__dropdown-choices" }, (this.dropdownModel.getRenderedItems() || []).map(function (item, index) { return (react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", { className: _this.dropdownModel.getChoiceCss(), key: "editable_choice_".concat(index) }, survey_react_ui__WEBPACK_IMPORTED_MODULE_3__["ReactSurveyElementsWrapper"].wrapItemValue(_this.question.survey, survey_react_ui__WEBPACK_IMPORTED_MODULE_3__["ReactElementFactory"].Instance.createElement(
|
|
2278
|
+
react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", { className: "svc-question__dropdown-choices" }, (this.dropdownModel.getRenderedItems() || []).map(function (item, index) { return (react__WEBPACK_IMPORTED_MODULE_1___default.a.createElement("div", { className: _this.dropdownModel.getChoiceCss(), key: "editable_choice_".concat(index) }, survey_react_ui__WEBPACK_IMPORTED_MODULE_3__["ReactSurveyElementsWrapper"].wrapItemValue(_this.question.survey, survey_react_ui__WEBPACK_IMPORTED_MODULE_3__["ReactElementFactory"].Instance.createElement(_this.dropdownModel.itemComponent, {
|
|
2275
2279
|
question: _this.question,
|
|
2276
2280
|
cssClasses: _this.question.cssClasses,
|
|
2277
2281
|
isDisplayMode: true,
|
|
@@ -2859,8 +2863,10 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
2859
2863
|
|
|
2860
2864
|
/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "StylesManager", function() { return survey_creator_core__WEBPACK_IMPORTED_MODULE_44__["StylesManager"]; });
|
|
2861
2865
|
|
|
2866
|
+
/* harmony import */ var survey_core__WEBPACK_IMPORTED_MODULE_45__ = __webpack_require__(/*! survey-core */ "survey-core");
|
|
2867
|
+
/* harmony import */ var survey_core__WEBPACK_IMPORTED_MODULE_45___default = /*#__PURE__*/__webpack_require__.n(survey_core__WEBPACK_IMPORTED_MODULE_45__);
|
|
2862
2868
|
var Version;
|
|
2863
|
-
Version = "".concat("1.9.
|
|
2869
|
+
Version = "".concat("1.9.53");
|
|
2864
2870
|
// import "@survey/creator/survey-creator-core.css";
|
|
2865
2871
|
|
|
2866
2872
|
|
|
@@ -2913,6 +2919,8 @@ Version = "".concat("1.9.52");
|
|
|
2913
2919
|
|
|
2914
2920
|
|
|
2915
2921
|
|
|
2922
|
+
|
|
2923
|
+
Object(survey_core__WEBPACK_IMPORTED_MODULE_45__["checkLibraryVersion"])("".concat("1.9.53"), "survey-creator-react");
|
|
2916
2924
|
|
|
2917
2925
|
|
|
2918
2926
|
/***/ }),
|
|
@@ -4187,4 +4195,4 @@ module.exports = __WEBPACK_EXTERNAL_MODULE_survey_react_ui__;
|
|
|
4187
4195
|
|
|
4188
4196
|
/******/ });
|
|
4189
4197
|
});
|
|
4190
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yL3dlYnBhY2svdW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbiIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yL3dlYnBhY2svYm9vdHN0cmFwIiwid2VicGFjazovL1N1cnZleUNyZWF0b3IvLi9zcmMvQWN0aW9uQnV0dG9uLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yLy4vc3JjL0ltYWdlSXRlbVZhbHVlV3JhcHBlci50c3giLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci8uL3NyYy9JdGVtVmFsdWVXcmFwcGVyLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yLy4vc3JjL0xvZ29JbWFnZS50c3giLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci8uL3NyYy9NYXRyaXhDZWxsV3JhcHBlci50c3giLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci8uL3NyYy9Nb2RlbEVsZW1lbnQudHN4Iiwid2VicGFjazovL1N1cnZleUNyZWF0b3IvLi9zcmMvTmF2aWdhdGlvbi50c3giLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci8uL3NyYy9Ob3RpZmllci50c3giLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci8uL3NyYy9PYmplY3RTZWxlY3Rvci50c3giLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci8uL3NyYy9QYWdlTmF2aWdhdG9yLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yLy4vc3JjL1Byb3BlcnR5R3JpZC50c3giLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci8uL3NyYy9RdWVzdGlvbkVkaXRvckNvbnRlbnQudHN4Iiwid2VicGFjazovL1N1cnZleUNyZWF0b3IvLi9zcmMvUXVlc3Rpb25FbWJlZGRlZFN1cnZleS50c3giLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci8uL3NyYy9RdWVzdGlvbkxpbmtWYWx1ZS50c3giLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci8uL3NyYy9SZXN1bHRzLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yLy4vc3JjL1NpZGVCYXIudHN4Iiwid2VicGFjazovL1N1cnZleUNyZWF0b3IvLi9zcmMvU3RyaW5nRWRpdG9yLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yLy4vc3JjL1N1cnZleUNyZWF0b3IudHN4Iiwid2VicGFjazovL1N1cnZleUNyZWF0b3IvLi9zcmMvU3ZnQnVuZGxlLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yLy4vc3JjL1RhYmJlZE1lbnUudHN4Iiwid2VicGFjazovL1N1cnZleUNyZWF0b3IvLi9zcmMvYWRvcm5lcnMvQ2VsbFF1ZXN0aW9uLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yLy4vc3JjL2Fkb3JuZXJzL0NlbGxRdWVzdGlvbkRyb3Bkb3duLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yLy4vc3JjL2Fkb3JuZXJzL1BhZ2UudHN4Iiwid2VicGFjazovL1N1cnZleUNyZWF0b3IvLi9zcmMvYWRvcm5lcnMvUGFuZWwudHN4Iiwid2VicGFjazovL1N1cnZleUNyZWF0b3IvLi9zcmMvYWRvcm5lcnMvUXVlc3Rpb24udHN4Iiwid2VicGFjazovL1N1cnZleUNyZWF0b3IvLi9zcmMvYWRvcm5lcnMvUXVlc3Rpb25Ecm9wZG93bi50c3giLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci8uL3NyYy9hZG9ybmVycy9RdWVzdGlvbkZvb3Rlci50c3giLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci8uL3NyYy9hZG9ybmVycy9RdWVzdGlvbkhlYWRlci50c3giLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci8uL3NyYy9hZG9ybmVycy9RdWVzdGlvbkltYWdlLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yLy4vc3JjL2Fkb3JuZXJzL1F1ZXN0aW9uUmF0aW5nLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yLy4vc3JjL2Fkb3JuZXJzL1F1ZXN0aW9uV2lkZ2V0LnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yLy4vc3JjL2Fkb3JuZXJzL1Jvdy50c3giLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci8uL3NyYy9lbnRyaWVzL2hlbHBlcnMudHMiLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci8uL3NyYy9lbnRyaWVzL2luZGV4LnRzIiwid2VicGFjazovL1N1cnZleUNyZWF0b3IvLi9zcmMvZXZlbnRzLnRzIiwid2VicGFjazovL1N1cnZleUNyZWF0b3IvLi9zcmMvdGFicy9EZXNpZ25lci50c3giLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci8uL3NyYy90YWJzL0VtYmVkLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yLy4vc3JjL3RhYnMvSnNvbkVkaXRvckFjZS50c3giLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci8uL3NyYy90YWJzL0pzb25FZGl0b3JUZXh0YXJlYS50c3giLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci8uL3NyYy90YWJzL0xvZ2ljLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yLy4vc3JjL3RhYnMvUHJldmlldy50c3giLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci8uL3NyYy90YWJzL1N1cnZleVNpbXVsYXRvci50c3giLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci8uL3NyYy90YWJzL1RyYW5zbGF0aW9uLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yLy4vc3JjL3RhYnMvVHJhbnNsYXRpb25MaW5lU2tlbGV0b24udHN4Iiwid2VicGFjazovL1N1cnZleUNyZWF0b3IvLi9zcmMvdGFicy9sb2dpYy1vcGVyYXRvci50c3giLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci8uL3NyYy90b29sYm94L0FkYXB0aXZlVG9vbGJveC50c3giLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci8uL3NyYy90b29sYm94L1Rvb2xib3gudHN4Iiwid2VicGFjazovL1N1cnZleUNyZWF0b3IvLi9zcmMvdG9vbGJveC9Ub29sYm94Q2F0ZWdvcnkudHN4Iiwid2VicGFjazovL1N1cnZleUNyZWF0b3IvLi9zcmMvdG9vbGJveC9Ub29sYm94SXRlbS50c3giLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci9leHRlcm5hbCB7XCJyb290XCI6XCJSZWFjdFwiLFwiY29tbW9uanMyXCI6XCJyZWFjdFwiLFwiY29tbW9uanNcIjpcInJlYWN0XCIsXCJhbWRcIjpcInJlYWN0XCJ9Iiwid2VicGFjazovL1N1cnZleUNyZWF0b3IvZXh0ZXJuYWwge1wicm9vdFwiOlwiUmVhY3RET01cIixcImNvbW1vbmpzMlwiOlwicmVhY3QtZG9tXCIsXCJjb21tb25qc1wiOlwicmVhY3QtZG9tXCIsXCJhbWRcIjpcInJlYWN0LWRvbVwifSIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yL2V4dGVybmFsIHtcInJvb3RcIjpcIlN1cnZleVwiLFwiY29tbW9uanMyXCI6XCJzdXJ2ZXktY29yZVwiLFwiY29tbW9uanNcIjpcInN1cnZleS1jb3JlXCIsXCJhbWRcIjpcInN1cnZleS1jb3JlXCJ9Iiwid2VicGFjazovL1N1cnZleUNyZWF0b3IvZXh0ZXJuYWwge1wicm9vdFwiOlwiU3VydmV5Q3JlYXRvckNvcmVcIixcImNvbW1vbmpzMlwiOlwic3VydmV5LWNyZWF0b3ItY29yZVwiLFwiY29tbW9uanNcIjpcInN1cnZleS1jcmVhdG9yLWNvcmVcIixcImFtZFwiOlwic3VydmV5LWNyZWF0b3ItY29yZVwifSIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yL2V4dGVybmFsIHtcInJvb3RcIjpcIlN1cnZleVJlYWN0XCIsXCJjb21tb25qczJcIjpcInN1cnZleS1yZWFjdC11aVwiLFwiY29tbW9uanNcIjpcInN1cnZleS1yZWFjdC11aVwiLFwiYW1kXCI6XCJzdXJ2ZXktcmVhY3QtdWlcIn0iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNELE87UUNWQTtRQUNBOztRQUVBO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNB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QyxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQztBQUN6RCxDQUFDO0FBRU0sSUFBSSxjQUFjLEdBQUc7SUFDMUIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEdBQUcsU0FBUyxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRTtRQUFFLENBQUMsSUFBSSxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO0lBQ3BGLEtBQUssSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRTtRQUM5QyxLQUFLLElBQUksQ0FBQyxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFO1lBQy9ELENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDaEIsT0FBTyxDQUFDLENBQUM7QUFDWCxDQUFDLENBQUM7Ozs7Ozs7Ozs7Ozs7QUN0REY7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQU8sSUFBSSxPQUFlLENBQUM7QUFDM0IsT0FBTyxHQUFHLFVBQUcsUUFBbUIsQ0FBRSxDQUFDO0FBRW5DLG9EQUFvRDtBQUVuQjtBQUVEO0FBQ0s7QUFDTTtBQUNBO0FBQ0U7QUFDSDtBQUNDO0FBQ0E7QUFDRjtBQUNRO0FBQ2hCO0FBQ0M7QUFFTDtBQUNRO0FBQ0s7QUFDRDtBQUNMO0FBQ0s7QUFDSjtBQUNWO0FBQ1k7QUFDSTtBQUNSO0FBQ1E7QUFDYjtBQUNGO0FBQ0U7QUFDSDtBQUNxQjtBQUNoQjtBQUNBO0FBRU87QUFDTjtBQUNIO0FBQ1E7QUFDSztBQUNiO0FBQ0U7QUFDSTtBQUNJO0FBRWQ7QUFDUTtBQUNGO0FBRXVDO0FBQ3hCO0FBQ0M7QUFDaUI7QUFDSTtBQUVvQjtBQUNyQzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDM0RwRDtJQUNFLHlCQUFtQixLQUFtRDtRQUFuRCxVQUFLLEdBQUwsS0FBSyxDQUE4QztJQUFHLENBQUM7SUFDMUUseUNBQWUsR0FBZjtRQUNFLElBQUksQ0FBQyxLQUFLLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDN0IsMkNBQTJDO1FBQzNDLG9EQUFvRDtJQUN0RCxDQUFDO0lBQ0Qsd0NBQWMsR0FBZDtRQUNFLElBQUksQ0FBQyxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDNUIsMENBQTBDO0lBQzVDLENBQUM7SUFDRCxzQkFBSSx5Q0FBWTthQUFoQjtZQUNFLGlDQUFpQztZQUNqQyxPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7YUFDRCxVQUFpQixLQUFjO1lBQzdCLGtDQUFrQztRQUNwQyxDQUFDOzs7T0FIQTtJQUlELHNCQUFJLG1DQUFNO2FBQVY7WUFDRSxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDO1FBQzNCLENBQUM7OztPQUFBO0lBQ0Qsc0JBQUksMENBQWE7YUFBakI7WUFDRSxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDO1FBQ2xDLENBQUM7OztPQUFBO0lBQ0Qsc0JBQUksb0NBQU87YUFBWDtZQUNFLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUM7UUFDNUIsQ0FBQzs7O09BQUE7SUFDRCxzQkFBSSxvQ0FBTzthQUFYO1lBQ0UsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQztRQUM1QixDQUFDOzs7T0FBQTtJQUNELHNCQUFJLG9DQUFPO2FBQVg7WUFDRSxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQztRQUN4QyxDQUFDOzs7T0FBQTtJQUNELHNCQUFJLG9DQUFPO2FBQVg7WUFDRSxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQztRQUN4QyxDQUFDOzs7T0FBQTtJQUNILHNCQUFDO0FBQUQsQ0FBQzs7QUFFRDtJQUFvQyxnRkFBZTtJQUVqRCx3QkFBbUIsS0FBc0M7UUFBekQsWUFDRSxrQkFBTSxLQUFLLENBQUMsU0FDYjtRQUZrQixXQUFLLEdBQUwsS0FBSyxDQUFpQzs7SUFFekQsQ0FBQztJQUVELHNCQUFJLHdDQUFZO2FBQWhCO1lBQ0UsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQztRQUNqQyxDQUFDOzs7T0FBQTtJQUNILHFCQUFDO0FBQUQsQ0FBQyxDQVRtQyxlQUFlLEdBU2xEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNqRHlCO0FBTUQ7QUFFOEI7QUFDTjtBQU1qRDtJQUEwQyxzRkFBa0Q7SUFBNUY7UUFBQSxxRUE0S0M7UUFwS1MsZ0JBQVUsR0FBRztZQUNuQixLQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztRQUM3QixDQUFDO1FBRU8saUJBQVcsR0FBRztZQUNwQixLQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztRQUM5QixDQUFDO1FBRU8sdUJBQWlCLEdBQUc7WUFDMUIsS0FBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLEtBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUMvQyxLQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsS0FBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ2pELENBQUM7UUFFTyx5QkFBbUIsR0FBRztZQUM1QixLQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsS0FBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ2xELEtBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxLQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDcEQsQ0FBQztRQWlCTyx3QkFBa0IsR0FBUSxFQUFFLENBQUM7O0lBbUl2QyxDQUFDO0lBM0tDLHNCQUFZLHVDQUFLO2FBQWpCO1lBQ0UsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQztRQUN6QixDQUFDOzs7T0FBQTtJQUNELHNCQUFjLHlDQUFPO2FBQXJCO1lBQ0UsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQztRQUM1QixDQUFDOzs7T0FBQTtJQW9CRCxnREFBaUIsR0FBakI7UUFDRSxpQkFBTSxpQkFBaUIsV0FBRSxDQUFDO1FBQzFCLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFFRCxtREFBb0IsR0FBcEI7UUFDRSxpQkFBTSxvQkFBb0IsV0FBRSxDQUFDO1FBQzdCLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1FBQzNCLGlCQUFNLG9CQUFvQixXQUFFLENBQUM7SUFDL0IsQ0FBQztJQUVTLCtDQUFnQixHQUExQjtRQUNFLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsZUFBZSxDQUFDLENBQUM7SUFDckUsQ0FBQztJQUdTLCtDQUFnQixHQUExQjtRQUFBLGlCQWtDQztRQWpDQyxJQUFJLElBQUksQ0FBQyxvQkFBb0IsS0FBSyxPQUFPLEVBQUU7WUFDekMsSUFBSSxDQUFDLGtCQUFrQixHQUFHLEVBQUUsQ0FBQztTQUM5QjtRQUNELElBQU0sYUFBYSxHQUFHLEVBQUUsQ0FBQztRQUV6QixJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxLQUFLLFFBQVEsRUFBRTtZQUMxQyxJQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7WUFFeEMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxVQUFDLElBQUksRUFBRSxLQUFLO2dCQUN4QixJQUFJLFVBQVUsR0FBRyxLQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUNsRCxJQUFJLENBQUMsVUFBVSxFQUFFO29CQUNmLFVBQVUsR0FBRyxLQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO29CQUNsRCxLQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLFVBQVUsQ0FBQztpQkFDL0M7Z0JBQ0QsYUFBYSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUNqQyxDQUFDLENBQUMsQ0FBQztZQUVILElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLEVBQUU7Z0JBQzFCLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsRUFBRSxHQUFHLGlCQUFpQixDQUFDLENBQUMsQ0FBQzthQUMvRjtTQUNGO2FBQU07WUFDTCxJQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxZQUFZLENBQUM7WUFDN0QsSUFBRyxDQUFDLENBQUMsWUFBWSxFQUFFO2dCQUNqQixJQUFJLFVBQVUsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUMxRCxJQUFJLENBQUMsVUFBVSxFQUFFO29CQUNmLFVBQVUsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsWUFBWSxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztvQkFDNUQsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsR0FBRyxVQUFVLENBQUM7aUJBQ3ZEO2dCQUNELGFBQWEsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7YUFDaEM7U0FDRjtRQUVELE9BQU8sYUFBYSxDQUFDO0lBQ3ZCLENBQUM7SUFDUyxpREFBa0IsR0FBNUIsVUFBNkIsSUFBZSxFQUFFLEtBQWEsRUFBRSxXQUFxQjtRQUNoRixPQUFPLENBQ0wsb0VBQ0UsU0FBUyxFQUFFLFVBQVUsOEJBQ0ssSUFBSSxDQUFDLElBQUksd0NBQ0MsV0FBVyxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQzVFLEdBQUcsRUFBRSxJQUFJLENBQUMsRUFBRSxHQUFHLEdBQUcsR0FBRyxLQUFLLElBRXpCLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQ2xCLENBQ1AsQ0FBQztJQUNKLENBQUM7SUFDTyw0Q0FBYSxHQUFyQixVQUFzQixTQUFpQixFQUFFLEdBQWdCO1FBQWhCLDhCQUFnQjtRQUN2RCxPQUFPLENBQ0wsMkRBQUMsNENBQUssQ0FBQyxRQUFRLElBQUMsR0FBRyxFQUFFLEdBQUc7WUFDdEIsb0VBQ0UsU0FBUyxFQUFFLFNBQVMsd0NBQ2dCLGNBQWMsSUFFakQsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FDOUQsQ0FDUyxDQUFDLENBQUM7SUFDdkIsQ0FBQztJQUNTLHlDQUFVLEdBQXBCLFVBQXFCLEtBQWdCO1FBQ25DLE9BQU8sbUVBQW1CLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxVQUFVLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7SUFDckksQ0FBQztJQUNELDRDQUFhLEdBQWI7UUFBQSxpQkFlQztRQWRDLElBQU0sb0JBQW9CLEdBQUcsbUJBQW1CLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUUzRSxPQUFPLENBQ0wsMkRBQUMsNENBQUssQ0FBQyxRQUFRO1lBQ2Isb0VBQUssU0FBUyxFQUFDLGlCQUFpQixJQUM3QixJQUFJLENBQUMsS0FBSyxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxtRUFBbUIsQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLHNCQUFzQixFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQzdIO1lBQ04sb0VBQUssU0FBUyxFQUFFLG9CQUFvQixFQUFFLE9BQU8sRUFBRSxjQUFNLFlBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxFQUFFLEVBQTFCLENBQTBCO2dCQUM3RSxvRUFBSyxTQUFTLEVBQUMsMEJBQTBCLElBQ3RDLElBQUksQ0FBQyxLQUFLLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQzVFLENBQ0YsQ0FDUyxDQUNsQixDQUFDO0lBQ0osQ0FBQztJQUVELDJDQUFZLEdBQVosVUFBYSxTQUFrQjtRQUM3QixJQUFJLENBQUMsU0FBUztZQUFFLE9BQU8sSUFBSSxDQUFDO1FBRTVCLElBQU0sTUFBTSxHQUFnQixJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQztRQUNoRCxPQUFPLENBQUMsMkRBQUMsNENBQUssQ0FBQyxRQUFRO1lBQ3JCLG9FQUFLLFNBQVMsRUFBQyxxQkFBcUI7Z0JBQ2xDLDJEQUFDLDREQUFZLElBQUMsTUFBTSxFQUFFLE1BQU0sR0FBaUIsQ0FDekMsQ0FDUyxDQUFDLENBQUM7SUFDckIsQ0FBQztJQUNELGdEQUFpQixHQUFqQjtRQUNFLElBQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxvQkFBb0IsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLHVCQUF1QixDQUFDLENBQUM7UUFFbEgsT0FBTyxDQUFDLDJEQUFDLDRDQUFLLENBQUMsUUFBUTtZQUNwQixZQUFZO1lBQ2Isb0VBQUssU0FBUyxFQUFDLHFDQUFxQyx3Q0FBcUMsY0FBYztnQkFDcEcsSUFBSSxDQUFDLHdCQUF3QixFQUFFO2dCQUMvQixJQUFJLENBQUMsYUFBYSxDQUFDLCtCQUErQixDQUFDLENBQ2hELENBQ1MsQ0FBQyxDQUFDO0lBQ3JCLENBQUM7SUFDRCx1REFBd0IsR0FBeEI7UUFDRSxPQUFPLHFFQUFNLFNBQVMsRUFBQyx5REFBeUQsSUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBUSxDQUFDO0lBQ3ZILENBQUM7SUFDRCwrQ0FBZ0IsR0FBaEI7UUFDRSxJQUFNLE1BQU0sR0FBZ0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUM7UUFDaEQsSUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLG9CQUFvQixDQUFDLENBQUM7UUFDMUUsSUFBTSxLQUFLLEdBQVEsRUFBRSxDQUFDO1FBQ3RCLElBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUU7WUFDakIsS0FBSyxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUMsYUFBYSxDQUFDO1lBQ25DLEtBQUssQ0FBQyxRQUFRLEdBQUcsTUFBTSxDQUFDLGFBQWEsQ0FBQztTQUN2QztRQUVELE9BQU8sQ0FBQywyREFBQyw0Q0FBSyxDQUFDLFFBQVE7WUFDckIsb0VBQUssU0FBUyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsY0FBYyxFQUFFLEVBQUUsS0FBSyxFQUFFLEtBQUs7Z0JBQ3RELFlBQVk7Z0JBQ2IsMkRBQUMsNERBQWdCLElBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUMsS0FBSyxHQUFHO2dCQUNsRCxJQUFJLENBQUMsZ0JBQWdCLEVBQUU7Z0JBQ3hCLDJEQUFDLDREQUFnQixJQUNmLE1BQU0sRUFBRSxNQUFNLEVBQ2QsUUFBUSxFQUFDLFFBQVEsRUFDakIsR0FBRyxFQUFFLE1BQU0sQ0FBQyxHQUFHLEdBQ2YsQ0FDRTtZQUNMLElBQUksQ0FBQyxPQUFPLENBQUMsaUJBQWlCLENBQUMsQ0FBQztnQkFDL0Isb0VBQUssU0FBUyxFQUFDLGtDQUFrQztvQkFBQywyREFBQyxrRUFBbUIsSUFDcEUsZUFBZSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsZUFBZSxFQUFFLFlBQVksRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxZQUFZLEdBQ3JFLENBQU07Z0JBQzdCLENBQUMsQ0FBQyxJQUFJLENBRU8sQ0FBQyxDQUFDO0lBQ3JCLENBQUM7SUFDSCwyQkFBQztBQUFELENBQUMsQ0E1S3lDLGlFQUFpQixHQTRLMUQ7O0FBRUQsbUVBQW1CLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQyxrQkFBa0IsRUFBRSxVQUFDLEtBQUs7SUFDckUsT0FBTyw0Q0FBSyxDQUFDLGFBQWEsQ0FDeEIsb0JBQW9CLEVBQ3BCLEtBQW1DLENBQ3BDLENBQUM7QUFDSixDQUFDLENBQUMsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDbE11QjtBQU1EO0FBT3pCO0lBQXVDLG1GQUd0QztJQUhEOztJQWlCQSxDQUFDO0lBYkMsc0JBQVksb0NBQUs7YUFBakI7WUFDRSxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDO1FBQ3pCLENBQUM7OztPQUFBO0lBQ1MsMkNBQWUsR0FBekI7UUFDRSxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUM7SUFDcEIsQ0FBQztJQUNELHlDQUFhLEdBQWI7UUFDRSxPQUFPLENBQ0wsb0VBQUssU0FBUyxFQUFDLGlEQUFpRCxJQUM3RCxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsMkRBQUMsc0RBQU0sSUFBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQVcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUNuRSxDQUNQLENBQUM7SUFDSixDQUFDO0lBQ0gsd0JBQUM7QUFBRCxDQUFDLENBakJzQyxpRUFBaUIsR0FpQnZEOztBQUVELG1FQUFtQixDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQzFDLGVBQWUsRUFDZixVQUFDLEtBQThCO0lBQzdCLE9BQU8sNENBQUssQ0FBQyxhQUFhLENBQUMsaUJBQWlCLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDdkQsQ0FBQyxDQUNGLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ3JDd0I7QUFFK0M7QUFPekU7SUFBK0MsMkZBRzlDO0lBRUMsbUNBQVksS0FBc0M7UUFBbEQsWUFDRSxrQkFBTSxLQUFLLENBQUMsU0FFYjtRQURDLEtBQUksQ0FBQyxhQUFhLEdBQUcsNENBQUssQ0FBQyxTQUFTLEVBQUUsQ0FBQzs7SUFDekMsQ0FBQztJQUNTLG1EQUFlLEdBQXpCO1FBQ0UsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDO0lBQ3BCLENBQUM7SUFDRCxzQkFBWSw0Q0FBSzthQUFqQjtZQUNFLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUM7UUFDekIsQ0FBQzs7O09BQUE7SUFDRCxxREFBaUIsR0FBakI7UUFDRSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBc0IsQ0FBQyxDQUFDLENBQUM7SUFDdkUsQ0FBQztJQUNELGlEQUFhLEdBQWI7UUFDRSxPQUFPLENBQ0wsb0VBQUssU0FBUyxFQUFDLDBCQUEwQjtZQUN2QyxvRUFBSyxTQUFTLEVBQUMsOEJBQThCO2dCQUMzQyxvRUFDRSxTQUFTLEVBQUMsaUNBQWlDLEVBQzNDLEdBQUcsRUFBRSxJQUFJLENBQUMsYUFBYSxHQUNsQixDQUNILENBQ0YsQ0FDUCxDQUFDO0lBQ0osQ0FBQztJQUNILGdDQUFDO0FBQUQsQ0FBQyxDQTlCOEMsaUVBQWlCLEdBOEIvRDs7QUFFRCxtRUFBbUIsQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUMxQyx5QkFBeUIsRUFDekIsVUFBQyxLQUFzQztJQUNyQyxPQUFPLDRDQUFLLENBQUMsYUFBYSxDQUFDLHlCQUF5QixFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQy9ELENBQUMsQ0FDRixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUM5Q3lDO0FBRThCO0FBT3pFO0lBQW9ELGdHQUduRDtJQUNDLHdDQUFZLEtBQUs7UUFBakIsWUFDRSxrQkFBTSxLQUFLLENBQUMsU0FFYjtRQURDLEtBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQzs7SUFDbkMsQ0FBQztJQUNTLHdEQUFlLEdBQXpCO1FBQ0UsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDO0lBQ3BCLENBQUM7SUFDRCxzQkFBWSxpREFBSzthQUFqQjtZQUNFLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUM7UUFDekIsQ0FBQzs7O09BQUE7SUFDRCxzREFBYSxHQUFiO1FBQUEsaUJBaUNDO1FBaENDLElBQU0sTUFBTSxHQUFrQixFQUFFLENBQUM7UUFDakMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDO1FBQ1osSUFBTSxrQkFBa0IsR0FBVSxJQUFJLENBQUMsS0FBSyxDQUFDLGtCQUFrQixDQUFDO1FBQ2hFLEtBQUssSUFBSSxDQUFDLEdBQVcsQ0FBQyxFQUFFLENBQUMsR0FBRyxrQkFBa0IsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDMUQsTUFBTSxDQUFDLElBQUksQ0FBQyxxRUFBTSxHQUFHLEVBQUUsR0FBRztnQkFBRSxnRkFBYyxDQUFPLENBQUMsQ0FBQztZQUNuRCxHQUFHLEVBQUUsQ0FBQztZQUNOLE1BQU0sQ0FBQyxJQUFJLENBQUMscUVBQU0sR0FBRyxFQUFFLEdBQUcsSUFBRyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsQ0FBUSxDQUFDLENBQUM7WUFDNUQsR0FBRyxFQUFFLENBQUM7U0FDUDtRQUNELE9BQU8sQ0FDTCxvRUFBSyxTQUFTLEVBQUMsMEJBQTBCO1lBQ3ZDLG9FQUFLLFNBQVMsRUFBQyw4QkFBOEI7Z0JBQzNDLHlFQUNFLFNBQVMsRUFBQyxtQ0FBbUMsRUFDN0MsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUN0QixRQUFRLEVBQUUsVUFBQyxDQUFtQzt3QkFDNUMsUUFBQyxLQUFJLENBQUMsS0FBSyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQztvQkFBbEMsQ0FBa0MsRUFFcEMsU0FBUyxFQUFFLFVBQUMsQ0FBQyxJQUFLLFlBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBekIsQ0FBeUIsRUFDM0MsUUFBUSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxnQkFDakIsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLEdBQ3RCO2dCQUNYLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQztvQkFDaEIsdUVBQVEsSUFBSSxFQUFDLFFBQVEsRUFBQyxTQUFTLEVBQUMsb0NBQW9DLEVBQUMsT0FBTyxFQUFFLGNBQU0sWUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQUUsRUFBekIsQ0FBeUIsSUFDMUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxlQUFlLENBQ3BCO2dCQUVWLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxJQUFJLG9FQUFLLFNBQVMsRUFBQyxxQ0FBcUMsSUFBRSxNQUFNLENBQU8sQ0FFNUYsQ0FDRixDQUNQLENBQUM7SUFDSixDQUFDO0lBQ0gscUNBQUM7QUFBRCxDQUFDLENBaERtRCxpRUFBaUIsR0FnRHBFOztBQUVELG1FQUFtQixDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQzFDLDhCQUE4QixFQUM5QixVQUFDLEtBQTJDO0lBQzFDLE9BQU8sNENBQUssQ0FBQyxhQUFhLENBQUMsOEJBQThCLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDcEUsQ0FBQyxDQUNGLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNoRXNDO0FBRTBEO0FBR2xHO0lBQWdELDRGQUEyQjtJQUEzRTs7SUF3QkEsQ0FBQztJQXZCQyxzQkFBWSw2Q0FBSzthQUFqQjtZQUNFLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUM7UUFDM0IsQ0FBQzs7O09BQUE7SUFDUyxvREFBZSxHQUF6QjtRQUNFLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQztJQUNwQixDQUFDO0lBRUQsa0RBQWEsR0FBYjtRQUFBLGlCQWVDO1FBZEMsSUFBTSxlQUFlLEdBQUcsdUNBQXVDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxLQUFLLFNBQVMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLDBDQUEwQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNoTCxPQUFPLHVFQUFlLENBQUMsb0VBQ3JCLElBQUksRUFBQyxRQUFRLEVBQ2IsT0FBTyxFQUFFLFVBQUMsQ0FBQztnQkFDVCxDQUFDLENBQUMsZUFBZSxFQUFFLENBQUM7Z0JBQ3BCLEtBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDdEIsQ0FBQyxFQUNELFNBQVMsRUFBRSxlQUFlLEVBQzFCLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUs7WUFFdkIscUVBQU0sU0FBUyxFQUFDLDBDQUEwQyxJQUN2RCxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FDWixDQUNILENBQUMsQ0FBQztJQUNWLENBQUM7SUFDSCxpQ0FBQztBQUFELENBQUMsQ0F4QitDLGlFQUFpQixHQXdCaEU7O0FBQ0QsbUVBQW1CLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQywwQkFBMEIsRUFBRSxVQUFDLEtBQUs7SUFDN0UsT0FBTyw0Q0FBSyxDQUFDLGFBQWEsQ0FBQywwQkFBMEIsRUFBRSxLQUFLLENBQUMsQ0FBQztBQUNoRSxDQUFDLENBQUMsQ0FBQztBQUVIO0lBQXVDLG1GQUEyQjtJQUFsRTs7SUE4QkEsQ0FBQztJQTdCQyxzQkFBWSxvQ0FBSzthQUFqQjtZQUNFLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUM7UUFDekIsQ0FBQzs7O09BQUE7SUFDUywyQ0FBZSxHQUF6QjtRQUNFLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQztJQUNwQixDQUFDO0lBRUQseUNBQWEsR0FBYjtRQUNFLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7UUFDdkIsSUFBSSxTQUFTLEdBQUcsMEJBQTBCLENBQUM7UUFDM0MsSUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDdkMsT0FBTyxvRUFBSyxTQUFTLEVBQUUsU0FBUyxJQUFHLE9BQU8sQ0FBTyxDQUFDO0lBQ3BELENBQUM7SUFDTyw2Q0FBaUIsR0FBekI7UUFDRSxJQUFNLGlCQUFpQixHQUFHLGlEQUFpRCxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsc0JBQXNCLENBQUMsQ0FBQztRQUNsSSxJQUFNLFFBQVEsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQywyREFBQywwQkFBMEIsSUFBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLEdBQUksQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO1FBQ3BILE9BQU8sQ0FDTCwyREFBQyw4Q0FBUTtZQUNQLG9FQUFLLFNBQVMsRUFBRSxpQkFBaUI7Z0JBQy9CLDJEQUFDLHNEQUFNLElBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxHQUFXO2dCQUMvQyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUM1QixvRUFBSyxTQUFTLEVBQUMsOEJBQThCO29CQUMzQyxxRUFBTSxTQUFTLEVBQUMsVUFBVSxJQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsbUJBQW1CLENBQVEsQ0FDOUQsQ0FBQztnQkFDUixRQUFRLENBQ0wsQ0FDRyxDQUNaLENBQUM7SUFDSixDQUFDO0lBQ0gsd0JBQUM7QUFBRCxDQUFDLENBOUJzQyxpRUFBaUIsR0E4QnZEOztBQUNELG1FQUFtQixDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUMsZUFBZSxFQUFFLFVBQUMsS0FBSztJQUNsRSxPQUFPLDRDQUFLLENBQUMsYUFBYSxDQUFDLGlCQUFpQixFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ3ZELENBQUMsQ0FBQyxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNuRXVCO0FBT0Q7QUFFMkI7QUFDVDtBQUUzQztJQUF3RCxvR0FBMkI7SUFBbkY7O0lBd0JBLENBQUM7SUF2QkMsc0JBQVkscURBQUs7YUFBakI7WUFDRSxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDO1FBQzNCLENBQUM7OztPQUFBO0lBQ1MsNERBQWUsR0FBekI7UUFDRSxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUM7SUFDcEIsQ0FBQztJQUVELDBEQUFhLEdBQWI7UUFBQSxpQkFlQztRQWRDLElBQU0sZUFBZSxHQUFHLGlDQUFpQyxDQUFDO1FBQzFELE9BQU8sdUVBQWUsQ0FBQyxvRUFDckIsSUFBSSxFQUFDLFFBQVEsRUFDYixPQUFPLEVBQUUsVUFBQyxDQUFDO2dCQUNULENBQUMsQ0FBQyxlQUFlLEVBQUUsQ0FBQztnQkFDcEIsS0FBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUN0QixDQUFDLEVBQ0QsU0FBUyxFQUFFLGVBQWUsRUFDMUIsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSztZQUV2QixxRUFBTSxTQUFTLEVBQUMsMENBQTBDLElBQ3ZELElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUNaLENBQ0gsQ0FBQyxDQUFDO0lBQ1YsQ0FBQztJQUNILHlDQUFDO0FBQUQsQ0FBQyxDQXhCdUQsaUVBQWlCLEdBd0J4RTs7QUFDRCxtRUFBbUIsQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDLDRCQUE0QixFQUFFLFVBQUMsS0FBSztJQUMvRSxPQUFPLDRDQUFLLENBQUMsYUFBYSxDQUFDLGtDQUFrQyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ3hFLENBQUMsQ0FBQyxDQUFDO0FBRUg7SUFBK0MsMkZBQTJCO0lBQTFFOztJQWdDQSxDQUFDO0lBL0JDLHNCQUFZLDRDQUFLO2FBQWpCO1lBQ0UsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQztRQUN6QixDQUFDOzs7T0FBQTtJQUNTLG1EQUFlLEdBQXpCO1FBQ0UsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDO0lBQ3BCLENBQUM7SUFFRCxpREFBYSxHQUFiO1FBQ0UsSUFBTSxtQkFBbUIsR0FBRyxnREFBZ0QsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxDQUFDLHlDQUF5QyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNsSyxPQUFPLENBQ0wsb0VBQUssU0FBUyxFQUFFLG1CQUFtQjtZQUNqQyxvRUFBSyxTQUFTLEVBQUMseUJBQXlCO2dCQUN0QywyREFBQyxnRUFBZSxJQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsR0FBb0I7Z0JBQy9ELENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLDJEQUFDLGtDQUFrQyxJQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLGVBQWUsR0FBSSxDQUFDLENBQUMsQ0FBQyxJQUFJO2dCQUN6RyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQywyREFBQyxzREFBYSxJQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxNQUFNLEdBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUNsRjtZQUNMLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUNwQixDQUNQLENBQUM7SUFDSixDQUFDO0lBQ0Qsb0RBQWdCLEdBQWhCO1FBQ0UsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLG9CQUFvQixFQUFFO1lBQ25DLE9BQU8sQ0FDTCxvRUFBSyxTQUFTLEVBQUMsK0JBQStCO2dCQUM1QywyREFBQywrREFBZSxJQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBb0IsQ0FDeEQsQ0FDUCxDQUFDO1NBQ0g7YUFBTTtZQUNMLE9BQU8sSUFBSSxDQUFDO1NBQ2I7SUFDSCxDQUFDO0lBQ0gsZ0NBQUM7QUFBRCxDQUFDLENBaEM4QyxpRUFBaUIsR0FnQy9EOztBQUVELG1FQUFtQixDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUMsY0FBYyxFQUFFLFVBQUMsS0FBSztJQUNqRSxPQUFPLDRDQUFLLENBQUMsYUFBYSxDQUFDLHlCQUF5QixFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQy9ELENBQUMsQ0FBQyxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUM1RXlEO0FBRWxDO0FBRTFCO0lBQXFDLGlGQUEyQjtJQUFoRTs7SUF5RUEsQ0FBQztJQXhFQyxzQkFBWSxrQ0FBSzthQUFqQjtZQUNFLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUM7UUFDMUIsQ0FBQzs7O09BQUE7SUFFUyx5Q0FBZSxHQUF6QjtRQUNFLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQztJQUNwQixDQUFDO0lBRUQsdUNBQWEsR0FBYjtRQUFBLGlCQStEQztRQTlEQyxJQUFNLGtCQUFrQixHQUFHLG9CQUFvQjtZQUM3QyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsOEJBQThCLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzFFLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRTtZQUN0QixPQUFPLG9FQUFLLFNBQVMsRUFBRSxrQkFBa0IsR0FBUSxDQUFDO1NBQ25EO1FBQ0QsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRTtZQUN2QixPQUFPLENBQ0wsb0VBQ0UsU0FBUyxFQUFFLGtCQUFrQixHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLHFCQUFxQixFQUN0RSxTQUFTLEVBQUUsV0FBQyxJQUFJLFlBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBMUIsQ0FBMEIsRUFDMUMsWUFBWSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksRUFDOUUsWUFBWSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLGNBQWM7Z0JBRWhGLG9FQUNFLFNBQVMsRUFBQyx1QkFBdUIsRUFDakMsRUFBRSxFQUFDLHVCQUF1QixFQUMxQixLQUFLLEVBQUU7d0JBQ0wsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLFVBQVUsR0FBRyxJQUFJO3dCQUNsRCxNQUFNLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsV0FBVyxHQUFHLElBQUk7cUJBQ3JEO29CQUVELG9FQUNFLFNBQVMsRUFDUCxzQkFBc0IsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxRQUFRLEVBRTdELEtBQUssRUFBRTs0QkFDTCxLQUFLLEVBQ0gsSUFBSSxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsb0JBQW9CLEdBQUcsSUFBSTs0QkFDdkQsTUFBTSxFQUNKLElBQUksQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLHFCQUFxQixHQUFHLElBQUk7eUJBQ3pELEdBQ0k7b0JBQ1Asb0VBQ0UsU0FBUyxFQUFDLGVBQWUsRUFDekIsS0FBSyxFQUFFOzRCQUNMLEtBQUssRUFDSCxJQUFJLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxXQUFXLEdBQUcsSUFBSTs0QkFDOUMsTUFBTSxFQUNKLElBQUksQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLFlBQVksR0FBRyxJQUFJOzRCQUMvQyxTQUFTLEVBQ1AsUUFBUTtnQ0FDUixJQUFJLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxLQUFLO2dDQUMvQix5QkFBeUI7eUJBQzVCO3dCQUVELG9FQUFLLFNBQVMsRUFBQyx1QkFBdUI7NEJBQ3BDLDJEQUFDLHNEQUFNLElBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFXLENBQ3ZDLENBQ0YsQ0FDRixDQUNGLENBQ1AsQ0FBQztTQUNIO2FBQU07WUFDTCxPQUFPLENBQ0wsb0VBQ0UsU0FBUyxFQUFFLGtCQUFrQjtnQkFDN0Isb0VBQUssU0FBUyxFQUFDLHVCQUF1QjtvQkFDcEMsMkRBQUMsc0RBQU0sSUFBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQVcsQ0FDdkMsQ0FDRixDQUNQLENBQUM7U0FDSDtJQUNILENBQUM7SUFDSCxzQkFBQztBQUFELENBQUMsQ0F6RW9DLGlFQUFpQixHQXlFckQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUM5RXlCO0FBTUQ7QUFHekI7SUFBNkMseUZBQTJCO0lBQXhFOztJQXFDQSxDQUFDO0lBcENDLHNCQUFZLDBDQUFLO2FBQWpCO1lBQ0UsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQztRQUN6QixDQUFDOzs7T0FBQTtJQUNTLGlEQUFlLEdBQXpCO1FBQ0UsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDO0lBQ3BCLENBQUM7SUFDRCwrQ0FBYSxHQUFiO1FBQ0UsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLO1lBQUUsT0FBTyxJQUFJLENBQUM7UUFDN0IsT0FBTyxDQUNMLG9FQUFLLFNBQVMsRUFBQyw4Q0FBOEMsSUFDMUQsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQ3hCLENBQ1AsQ0FBQztJQUNKLENBQUM7SUFDRCxzREFBb0IsR0FBcEI7UUFDRSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFO1lBQ3RCLE9BQU8sQ0FDTCxvRUFBSyxTQUFTLEVBQUMsZUFBZTtnQkFDNUIseUVBQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQVEsQ0FDbkMsQ0FDUCxDQUFDO1NBQ0g7YUFBTTtZQUNMLE9BQU8sQ0FDTCxvRUFBSyxTQUFTLEVBQUMsWUFBWTtnQkFDekIsb0VBQUssU0FBUyxFQUFDLG9DQUFvQztvQkFDakQsb0VBQUssU0FBUyxFQUFDLGdDQUFnQzt3QkFDN0MsMkRBQUMsc0RBQU0sSUFBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxtQkFBbUIsR0FBVyxDQUNwRDtvQkFDTixvRUFBSyxTQUFTLEVBQUMsaURBQWlEO3dCQUM5RCwyREFBQyxzREFBTSxJQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsR0FBVyxDQUM5QyxDQUNGLENBQ0YsQ0FDUCxDQUFDO1NBQ0g7SUFDSCxDQUFDO0lBQ0gsOEJBQUM7QUFBRCxDQUFDLENBckM0QyxpRUFBaUIsR0FxQzdEOztBQUVELG1FQUFtQixDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUMscUJBQXFCLEVBQUUsVUFBQyxLQUFLO0lBQ3hFLE9BQU8sNENBQUssQ0FBQyxhQUFhLENBQUMsdUJBQXVCLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDN0QsQ0FBQyxDQUFDLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ2xEdUI7QUFDNEI7QUFFdEQ7SUFBNkMseUZBQXlCO0lBQXRFOztJQU9BLENBQUM7SUFOQyx3Q0FBTSxHQUFOO1FBQ0UsT0FBTyxDQUNMLG9FQUFLLFNBQVMsRUFBQyw4QkFBOEIsR0FDdkMsQ0FDUCxDQUFDO0lBQ0osQ0FBQztJQUNILDhCQUFDO0FBQUQsQ0FBQyxDQVA0Qyw0Q0FBSyxDQUFDLFNBQVMsR0FPM0Q7O0FBRUQsbUVBQW1CLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQyw4QkFBOEIsRUFBRSxVQUFDLEtBQVU7SUFDdEYsT0FBTyw0Q0FBSyxDQUFDLGFBQWEsQ0FBQyx1QkFBdUIsRUFBRSxLQUFLLENBQUMsQ0FBQztBQUM3RCxDQUFDLENBQUMsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ2Q0QjtBQUNzQztBQUNiO0FBQ3VCO0FBRS9FO0lBQXdDLG9GQUFzQjtJQUM1RCw0QkFBWSxLQUFVO2VBQ3BCLGtCQUFNLEtBQUssQ0FBQztJQUNkLENBQUM7SUFFUyx3Q0FBVyxHQUFyQjtRQUNFLElBQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFpQyxDQUFDO1FBQ2pELDZFQUFpQixDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3JCLElBQU0sSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUV4RixPQUFPLENBQUMsNkRBQ04sRUFBRSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUN6QixTQUFTLEVBQUUsQ0FBQyxDQUFDLGVBQWUsRUFBRSxFQUM5QixRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUN2RCxPQUFPLEVBQUUsSUFBSSxDQUFDLEtBQUs7WUFDbkIsNkRBQTZEO1lBQzdELGFBQWE7WUFDYixRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxlQUFlLEVBQ3ZDLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFDbEMsUUFBUSxFQUFFLElBQUksQ0FBQyxrQkFBa0IsRUFDakMsT0FBTyxFQUFFLElBQUksQ0FBQyxrQkFBa0IsRUFDaEMsT0FBTyxFQUFFLElBQUksQ0FBQyxVQUFVLEVBQ3hCLElBQUksRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsbUJBQ2IsSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLGdCQUM3QixJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsa0JBQ3JCLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxzQkFDckIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxlQUFlO1lBRS9DLDZEQUFLLFNBQVMsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxZQUFZO2dCQUNsRCxJQUFJO2dCQUNMLGlFQUFNLENBQUMsQ0FBQyxZQUFZLENBQU8sQ0FDdkI7WUFDTCxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FDckIsQ0FBQyxDQUFDO0lBQ1YsQ0FBQztJQUNILHlCQUFDO0FBQUQsQ0FBQyxDQW5DdUMsc0VBQXNCLEdBbUM3RDs7QUFFRCxvRUFBb0IsQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsbUJBQW1CLEVBQUUsVUFBQyxLQUFLO0lBQ3hFLE9BQU8sbURBQW1CLENBQUMsa0JBQWtCLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDeEQsQ0FBQyxDQUFDLENBQUM7QUFFSCwyREFBZSxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVLEVBQUUsZUFBZSxFQUFFLG1CQUFtQixDQUFDLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQzlDbEU7QUFDZ0M7QUFDSjtBQUNVO0FBRWhFO0lBQXFDLGlGQUFPO0lBSTFDLHlCQUFZLEtBQWlDO1FBQTdDLFlBQ0Usa0JBQU0sS0FBSyxDQUFDLFNBRWI7UUFEQyxLQUFJLENBQUMsT0FBTyxHQUFHLDRDQUFLLENBQUMsU0FBUyxFQUFFLENBQUM7O0lBQ25DLENBQUM7SUFFRCwyQ0FBaUIsR0FBakI7UUFDRSxpQkFBTSxpQkFBaUIsV0FBRSxDQUFDO1FBQzFCLElBQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxTQUFTO1lBQUUsT0FBTztRQUN2QixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksdUVBQTJCLENBQzVDLFNBQVMsRUFDVCxJQUFJLENBQUMsT0FBTyxFQUNaLGtDQUFrQyxDQUNuQyxDQUFDO0lBQ0osQ0FBQztJQUNELDhDQUFvQixHQUFwQjtRQUNFLElBQUksQ0FBQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7UUFDekMsaUJBQU0sb0JBQW9CLFdBQUUsQ0FBQztJQUMvQixDQUFDO0lBQ0QsZ0NBQU0sR0FBTjtRQUNFLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVU7WUFBRSxPQUFPLElBQUksQ0FBQztRQUUxQyxJQUFNLFNBQVMsR0FBRyxhQUFhLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsdUJBQXVCLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzFGLE9BQU8sQ0FDTCxvRUFBSyxHQUFHLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxTQUFTLEVBQUUsU0FBUztZQUMxQyxvRUFBSyxTQUFTLEVBQUMsd0JBQXdCLElBQ3BDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDO2dCQUNwRyxDQUFDLG9FQUFLLFNBQVMsRUFBQyx1QkFBdUIsSUFDcEMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLGVBQWUsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUNuRSxDQUFDO2dCQUNQLENBQUMsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FFdkIsQ0FDRixDQUNQLENBQUM7SUFDSixDQUFDO0lBQ0gsc0JBQUM7QUFBRCxDQUFDLENBeENvQyxnREFBTyxHQXdDM0M7O0FBRUQsbUVBQW1CLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQyxzQkFBc0IsRUFBRSxVQUFDLEtBQUs7SUFDekUsT0FBTyw0Q0FBSyxDQUFDLGFBQWEsQ0FBQyxlQUFlLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDckQsQ0FBQyxDQUFDLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDakR1QjtBQUUrQztBQUVoQjtBQUNRO0FBTWpFO0lBQTZCLHlFQUFrRDtJQUEvRTs7SUF1Q0EsQ0FBQztJQXRDQyxzQkFBVyw0QkFBTzthQUFsQjtZQUNFLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUM7UUFDMUIsQ0FBQzs7O09BQUE7SUFDRCxzQkFBVyw0QkFBTzthQUFsQjtZQUNFLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUM7UUFDOUIsQ0FBQzs7O09BQUE7SUFDUyxpQ0FBZSxHQUF6QjtRQUNFLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUN0QixDQUFDO0lBRUQsd0JBQU0sR0FBTjtRQUNFLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVU7WUFBRSxPQUFPLElBQUksQ0FBQztRQUUxQyxPQUFPLENBQ0wsb0VBQUssU0FBUyxFQUFDLGFBQWE7WUFDMUIsb0VBQUssU0FBUyxFQUFDLHdCQUF3QixJQUNwQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQztnQkFDMUUsQ0FBQyxvRUFBSyxTQUFTLEVBQUMsdUJBQXVCLElBQ3BDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0FDMUMsQ0FBQztnQkFDUCxDQUFDLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBRXZCLENBQ0YsQ0FDUCxDQUFDO0lBQ0osQ0FBQztJQUVELDZCQUFXLEdBQVgsVUFBWSxLQUFpQixFQUFFLFNBQWlCO1FBQWhELGlCQUlDO1FBSjhCLDZDQUFpQjtRQUM5QyxPQUFPLEtBQUssQ0FBQyxHQUFHLENBQUMsVUFBQyxJQUFJLEVBQUUsU0FBUztZQUMvQixrRUFBQyxxRUFBd0IsSUFBQyxJQUFJLEVBQUcsSUFBWSxFQUFFLE9BQU8sRUFBRSxLQUFJLENBQUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sR0FBRyxTQUFTLEdBQThCO1FBQWpKLENBQWlKLENBQ2xKLENBQUM7SUFDSixDQUFDO0lBRUQsa0NBQWdCLEdBQWhCO1FBQUEsaUJBSUM7UUFIQyxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxVQUFDLFFBQVEsRUFBRSxLQUFLO1lBQ2pELE9BQU8sMkRBQUMsNkVBQTRCLElBQUMsUUFBUSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsS0FBSSxDQUFDLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxHQUFHLEtBQUssR0FBa0MsQ0FBQztRQUN4SSxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFDSCxjQUFDO0FBQUQsQ0FBQyxDQXZDNEIsaUVBQWlCLEdBdUM3Qzs7QUFFRCxtRUFBbUIsQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDLGFBQWEsRUFBRSxVQUFDLEtBQUs7SUFDaEUsT0FBTyw0Q0FBSyxDQUFDLGFBQWEsQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDN0MsQ0FBQyxDQUFDLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUN0RHVCO0FBRXlFO0FBRTFDO0FBT3pEO0lBQWtELDhGQUEwRDtJQUE1Rzs7SUE0REEsQ0FBQztJQTFEQyxzQkFBVyxrREFBUTthQUFuQjtZQUNFLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUM7UUFDN0IsQ0FBQzs7O09BQUE7SUFDRCxzQkFBVyxpREFBTzthQUFsQjtZQUNFLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUM7UUFDNUIsQ0FBQzs7O09BQUE7SUFDRCxzQkFBVywrQ0FBSzthQUFoQjtZQUNFLE9BQU8sdUJBQXVCLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsbUNBQW1DLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3hHLENBQUM7OztPQUFBO0lBRVMsc0RBQWUsR0FBekI7UUFDRSxPQUFRLElBQUksQ0FBQyxRQUFnQixDQUFDO0lBQ2hDLENBQUM7SUFFRCw2Q0FBTSxHQUFOO1FBQ0UsSUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7UUFDM0MsSUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7UUFDM0MsT0FBTyxDQUNMLG9FQUFLLFNBQVMsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUk7WUFDaEQsTUFBTTtZQUNOLEtBQUssQ0FDRixDQUNQLENBQUM7SUFDSixDQUFDO0lBRUQsMkRBQW9CLEdBQXBCO1FBQUEsaUJBV0M7UUFWQyxJQUFJLFNBQVMsR0FBRyw4QkFBOEIsQ0FBQztRQUMvQyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMscUJBQXFCLEVBQUU7WUFDdEMsU0FBUyxJQUFJLDBDQUEwQyxDQUFDO1NBQ3pEO1FBQ0QsT0FBTyx1RUFBZSxDQUNwQixvRUFBSyxTQUFTLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxXQUFDLElBQUksWUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLEVBQUUsRUFBM0IsQ0FBMkI7WUFDbEUscUVBQU0sU0FBUyxFQUFDLDZCQUE2QixJQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFRO1lBQ3hFLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FDaEIsQ0FDUCxDQUFDO0lBQ0osQ0FBQztJQUVELG1EQUFZLEdBQVo7UUFDRSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxxQkFBcUI7WUFBRSxPQUFPLElBQUksQ0FBQztRQUVyRCxJQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUM7UUFDckUsSUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDO1FBQ25FLElBQU0sZ0JBQWdCLEdBQUcsa0VBQWtFLEdBQUcsVUFBVSxDQUFDO1FBQ3pHLE9BQU8sQ0FBQyxvRUFBSyxTQUFTLEVBQUMsd0NBQXdDO1lBQzdELDJEQUFDLHVEQUFPLElBQUMsU0FBUyxFQUFFLGdCQUFnQixFQUFFLFFBQVEsRUFBRSxPQUFPLEdBQUcsUUFBUSxFQUFFLElBQUksRUFBRSxFQUFFLEdBQVksQ0FDcEYsQ0FBQyxDQUFDO0lBQ1YsQ0FBQztJQUVTLDREQUFxQixHQUEvQjtRQUNFLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQy9DLENBQUM7SUFFRCxrREFBVyxHQUFYLFVBQVksS0FBaUIsRUFBRSxTQUFpQjtRQUFoRCxpQkFJQztRQUo4Qiw2Q0FBaUI7UUFDOUMsT0FBTyxLQUFLLENBQUMsR0FBRyxDQUFDLFVBQUMsSUFBSSxFQUFFLFNBQVM7WUFDL0Isa0VBQUMscUVBQXdCLElBQUMsSUFBSSxFQUFHLElBQVksRUFBRSxPQUFPLEVBQUUsS0FBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxHQUFHLFNBQVMsR0FBOEI7UUFBekosQ0FBeUosQ0FDMUosQ0FBQztJQUNKLENBQUM7SUFDSCxtQ0FBQztBQUFELENBQUMsQ0E1RGlELGlFQUFpQixHQTREbEU7O0FBRUQsbUVBQW1CLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQyxzQkFBc0IsRUFBRSxVQUFDLEtBQUs7SUFDekUsT0FBTyw0Q0FBSyxDQUFDLGFBQWEsQ0FBQyw0QkFBNEIsRUFBRSxLQUFLLENBQUMsQ0FBQztBQUNsRSxDQUFDLENBQUMsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ3ZFMEI7QUFDZ0I7QUFDYztBQVVsQztBQUM2QjtBQVF0RDtJQUE4QywwRkFHN0M7SUFHQyxrQ0FBWSxLQUFLO2VBQ2Ysa0JBQU0sS0FBSyxDQUFDO0lBQ2QsQ0FBQztJQUNTLDhDQUFXLEdBQXJCO1FBQ0UsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLHdFQUFvQixDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUN2RSxDQUFDO0lBQ1MsdURBQW9CLEdBQTlCO1FBQ0UsT0FBTyxDQUFDLFNBQVMsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUM3QixDQUFDO0lBQ0Qsc0JBQVcsMENBQUk7YUFBZjtZQUNFLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUM7UUFDekIsQ0FBQzs7O09BQUE7SUFDRCxzQkFBVyw2Q0FBTzthQUFsQjtZQUNFLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUM7UUFDNUIsQ0FBQzs7O09BQUE7SUFDRCxzQkFBVywrQ0FBUzthQUFwQjtZQUNFLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUM7UUFDOUIsQ0FBQzs7O09BQUE7SUFFUyxrREFBZSxHQUF6QjtRQUNFLE9BQVEsSUFBSSxDQUFDLElBQVksQ0FBQztJQUM1QixDQUFDO0lBRUQseUNBQU0sR0FBTjtRQUFBLGlCQTBCQztRQXpCQyxJQUFNLElBQUksR0FBSyxJQUFJLENBQUMsSUFBdUIsQ0FBQztRQUM1QyxJQUFNLFNBQVMsR0FBRyxvQkFBb0IsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1FBQ2pHLElBQU0sYUFBYSxHQUFHLG1FQUFtQixDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQzlELElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxJQUFJLGtCQUFrQixFQUN6QztZQUNFLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSTtZQUNmLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTztZQUNyQixTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVM7U0FDMUIsQ0FDRixDQUFDO1FBQ0YsT0FBTyxDQUNMLG9FQUFLLFNBQVMsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxFQUFFLEVBQ3JDLGFBQWEsRUFBRSxVQUFDLEtBQVU7Z0JBQ3hCLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQztnQkFDaEIsS0FBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDbEMsQ0FBQztZQUVELG9FQUFLLFNBQVMsRUFBQyxvQkFBb0I7Z0JBQ2hDLENBQUMsSUFBSSxDQUFDLGFBQWEsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQ2xFLG9FQUFLLFNBQVMsRUFBQyxpQ0FBaUMsR0FBTyxDQUN4RCxDQUFDLENBQUMsQ0FBQyxJQUFJO2dCQUNQLGFBQWEsQ0FDVixDQUNGLENBQ1AsQ0FBQztJQUNKLENBQUM7SUFDSCwrQkFBQztBQUFELENBQUMsQ0F4RDZDLGlFQUFtQixHQXdEaEU7O0FBRUQ7SUFBOEMsMEZBRzdDO0lBRUMsa0NBQVksS0FBSztlQUNmLGtCQUFNLEtBQUssQ0FBQztJQUNkLENBQUM7SUFDUyw4Q0FBVyxHQUFyQjtRQUNFLElBQU0sV0FBVyxHQUF5QixJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQztRQUMxRCxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksd0VBQW9CLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDekUsQ0FBQztJQUNTLHVEQUFvQixHQUE5QjtRQUNFLE9BQU8sQ0FBQyxTQUFTLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDN0IsQ0FBQztJQUNELHNCQUFXLDBDQUFJO2FBQWY7WUFDRSxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDO1FBQ3pCLENBQUM7OztPQUFBO0lBQ0Qsc0JBQVcsNkNBQU87YUFBbEI7WUFDRSxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDO1FBQzVCLENBQUM7OztPQUFBO0lBQ1Msa0RBQWUsR0FBekI7UUFDRSxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUM7SUFDcEIsQ0FBQztJQUNELHlDQUFNLEdBQU47UUFBQSxpQkE0QkM7UUEzQkMsSUFBTSxTQUFTLEdBQ2IsdUNBQXVDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUM7UUFDL0QsSUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEdBQUcsR0FBRyxHQUFHLHNFQUFrQixDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsR0FBRyxPQUFPLENBQUM7UUFDOUYsT0FBTyx1RUFBZSxDQUNwQixvRUFDRSxTQUFTLEVBQUUsU0FBUyxFQUNwQixRQUFRLEVBQUUsQ0FBQyxFQUNYLElBQUksRUFBQyxRQUFRLGdCQUNELFNBQVMsRUFDckIsT0FBTyxFQUFFLFVBQUMsS0FBVTtnQkFDbEIsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUNoQixLQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUMxQixDQUFDO1lBRUQscUVBQU0sU0FBUyxFQUFDLDZCQUE2QjtnQkFDM0MsMkRBQUMsdURBQU8sSUFBQyxJQUFJLEVBQUUsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxLQUFLLEVBQUUsU0FBUyxHQUFZLENBQ3hFO1lBQ04sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO2dCQUN0QixxRUFBTSxTQUFTLEVBQUMsMkNBQTJDO29CQUN6RCwyREFBQyx1REFBTyxJQUFDLElBQUksRUFBRSxFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLFNBQVMsRUFBQyx3QkFBd0IsRUFBQyxLQUFLLEVBQUUsU0FBUyxHQUFZO29CQUNoSCxxRUFBTSxTQUFTLEVBQUMseUJBQXlCLElBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQVEsQ0FDN0Q7Z0JBQ1AsQ0FBQztvQkFDRCxxRUFBTSxTQUFTLEVBQUMseUJBQXlCLElBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQVEsQ0FDbkUsQ0FDRyxDQUNQLENBQUM7SUFDSixDQUFDO0lBQ0gsK0JBQUM7QUFBRCxDQUFDLENBckQ2QyxpRUFBbUIsR0FxRGhFOztBQUVELG1FQUFtQixDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUMsa0JBQWtCLEVBQUUsVUFBQyxLQUFLO0lBQ3JFLE9BQU8sNENBQUssQ0FBQyxhQUFhLENBQUMsd0JBQXdCLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDOUQsQ0FBQyxDQUFDLENBQUM7Ozs7Ozs7Ozs7OztBQzVJSCxtRDs7Ozs7Ozs7Ozs7QUNBQSx1RDs7Ozs7Ozs7Ozs7QUNBQSx5RDs7Ozs7Ozs7Ozs7QUNBQSxpRTs7Ozs7Ozs7Ozs7QUNBQSw2RCIsImZpbGUiOiJzdXJ2ZXktY3JlYXRvci1yZWFjdC5qcyIsInNvdXJjZXNDb250ZW50IjpbIihmdW5jdGlvbiB3ZWJwYWNrVW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbihyb290LCBmYWN0b3J5KSB7XG5cdGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlID09PSAnb2JqZWN0Jylcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkocmVxdWlyZShcInJlYWN0XCIpLCByZXF1aXJlKFwicmVhY3QtZG9tXCIpLCByZXF1aXJlKFwic3VydmV5LWNvcmVcIiksIHJlcXVpcmUoXCJzdXJ2ZXktY3JlYXRvci1jb3JlXCIpLCByZXF1aXJlKFwic3VydmV5LXJlYWN0LXVpXCIpKTtcblx0ZWxzZSBpZih0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpXG5cdFx0ZGVmaW5lKFwiU3VydmV5Q3JlYXRvclwiLCBbXCJyZWFjdFwiLCBcInJlYWN0LWRvbVwiLCBcInN1cnZleS1jb3JlXCIsIFwic3VydmV5LWNyZWF0b3ItY29yZVwiLCBcInN1cnZleS1yZWFjdC11aVwiXSwgZmFjdG9yeSk7XG5cdGVsc2UgaWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnKVxuXHRcdGV4cG9ydHNbXCJTdXJ2ZXlDcmVhdG9yXCJdID0gZmFjdG9yeShyZXF1aXJlKFwicmVhY3RcIiksIHJlcXVpcmUoXCJyZWFjdC1kb21cIiksIHJlcXVpcmUoXCJzdXJ2ZXktY29yZVwiKSwgcmVxdWlyZShcInN1cnZleS1jcmVhdG9yLWNvcmVcIiksIHJlcXVpcmUoXCJzdXJ2ZXktcmVhY3QtdWlcIikpO1xuXHRlbHNlXG5cdFx0cm9vdFtcIlN1cnZleUNyZWF0b3JcIl0gPSBmYWN0b3J5KHJvb3RbXCJSZWFjdFwiXSwgcm9vdFtcIlJlYWN0RE9NXCJdLCByb290W1wiU3VydmV5XCJdLCByb290W1wiU3VydmV5Q3JlYXRvckNvcmVcIl0sIHJvb3RbXCJTdXJ2ZXlSZWFjdFwiXSk7XG59KSh0aGlzLCBmdW5jdGlvbihfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFX3JlYWN0X18sIF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfcmVhY3RfZG9tX18sIF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfc3VydmV5X2NvcmVfXywgX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV9zdXJ2ZXlfY3JlYXRvcl9jb3JlX18sIF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfc3VydmV5X3JlYWN0X3VpX18pIHtcbnJldHVybiAiLCIgXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuXG4gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXG4gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSkge1xuIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuIFx0XHR9XG4gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcbiBcdFx0XHRpOiBtb2R1bGVJZCxcbiBcdFx0XHRsOiBmYWxzZSxcbiBcdFx0XHRleHBvcnRzOiB7fVxuIFx0XHR9O1xuXG4gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4gXHRcdG1vZHVsZS5sID0gdHJ1ZTtcblxuIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4gXHR9XG5cblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuXG4gXHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9uIGZvciBoYXJtb255IGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uZCA9IGZ1bmN0aW9uKGV4cG9ydHMsIG5hbWUsIGdldHRlcikge1xuIFx0XHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIG5hbWUpKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBnZXR0ZXIgfSk7XG4gXHRcdH1cbiBcdH07XG5cbiBcdC8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uciA9IGZ1bmN0aW9uKGV4cG9ydHMpIHtcbiBcdFx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG4gXHRcdH1cbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiBcdH07XG5cbiBcdC8vIGNyZWF0ZSBhIGZha2UgbmFtZXNwYWNlIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDE6IHZhbHVlIGlzIGEgbW9kdWxlIGlkLCByZXF1aXJlIGl0XG4gXHQvLyBtb2RlICYgMjogbWVyZ2UgYWxsIHByb3BlcnRpZXMgb2YgdmFsdWUgaW50byB0aGUgbnNcbiBcdC8vIG1vZGUgJiA0OiByZXR1cm4gdmFsdWUgd2hlbiBhbHJlYWR5IG5zIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDh8MTogYmVoYXZlIGxpa2UgcmVxdWlyZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy50ID0gZnVuY3Rpb24odmFsdWUsIG1vZGUpIHtcbiBcdFx0aWYobW9kZSAmIDEpIHZhbHVlID0gX193ZWJwYWNrX3JlcXVpcmVfXyh2YWx1ZSk7XG4gXHRcdGlmKG1vZGUgJiA4KSByZXR1cm4gdmFsdWU7XG4gXHRcdGlmKChtb2RlICYgNCkgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAmJiB2YWx1ZS5fX2VzTW9kdWxlKSByZXR1cm4gdmFsdWU7XG4gXHRcdHZhciBucyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18ucihucyk7XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShucywgJ2RlZmF1bHQnLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2YWx1ZSB9KTtcbiBcdFx0aWYobW9kZSAmIDIgJiYgdHlwZW9mIHZhbHVlICE9ICdzdHJpbmcnKSBmb3IodmFyIGtleSBpbiB2YWx1ZSkgX193ZWJwYWNrX3JlcXVpcmVfXy5kKG5zLCBrZXksIGZ1bmN0aW9uKGtleSkgeyByZXR1cm4gdmFsdWVba2V5XTsgfS5iaW5kKG51bGwsIGtleSkpO1xuIFx0XHRyZXR1cm4gbnM7XG4gXHR9O1xuXG4gXHQvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5uID0gZnVuY3Rpb24obW9kdWxlKSB7XG4gXHRcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuIFx0XHRcdGZ1bmN0aW9uIGdldERlZmF1bHQoKSB7IHJldHVybiBtb2R1bGVbJ2RlZmF1bHQnXTsgfSA6XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0TW9kdWxlRXhwb3J0cygpIHsgcmV0dXJuIG1vZHVsZTsgfTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpO1xuIFx0XHRyZXR1cm4gZ2V0dGVyO1xuIFx0fTtcblxuIFx0Ly8gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5KSB7IHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSk7IH07XG5cbiBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcIlwiO1xuXG5cbiBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gXCIuL3NyYy9lbnRyaWVzL2luZGV4LnRzXCIpO1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgYXR0YWNoS2V5MmNsaWNrLCBTdXJ2ZXlFbGVtZW50QmFzZSwgfSBmcm9tIFwic3VydmV5LXJlYWN0LXVpXCI7XG5cbmV4cG9ydCBjbGFzcyBBY3Rpb25CdXR0b24gZXh0ZW5kcyBTdXJ2ZXlFbGVtZW50QmFzZTxhbnksIGFueT4ge1xuICByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICBsZXQgY2xhc3NlcyA9IHRoaXMucHJvcHMuY2xhc3NlcyArIFwiIHN2Yy1hY3Rpb24tYnV0dG9uXCI7XG4gICAgaWYgKHRoaXMucHJvcHMuc2VsZWN0ZWQpIHtcbiAgICAgIGNsYXNzZXMgKz0gXCIgc3ZjLWFjdGlvbi1idXR0b24tLXNlbGVjdGVkXCI7XG4gICAgfVxuICAgIGlmICh0aGlzLnByb3BzLmRpc2FibGVkKSB7XG4gICAgICBjbGFzc2VzICs9IFwiIHN2Yy1hY3Rpb24tYnV0dG9uLS1kaXNhYmxlZFwiO1xuICAgICAgcmV0dXJuIDxzcGFuIGNsYXNzTmFtZT17Y2xhc3Nlc30+e3RoaXMucHJvcHMudGV4dH08L3NwYW4+O1xuICAgIH1cbiAgICByZXR1cm4gKFxuICAgICAgPD5cbiAgICAgICAge2F0dGFjaEtleTJjbGljayhcbiAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgcm9sZT1cImJ1dHRvblwiXG4gICAgICAgICAgICBjbGFzc05hbWU9e2NsYXNzZXN9XG4gICAgICAgICAgICBvbkNsaWNrPXsoZSkgPT4ge1xuICAgICAgICAgICAgICBpZiAoIXRoaXMucHJvcHMuYWxsb3dCdWJibGUpIHtcbiAgICAgICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHRoaXMucHJvcHMuY2xpY2soKTtcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgICB0aXRsZT17dGhpcy5wcm9wcy50aXRsZX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICB7dGhpcy5wcm9wcy50ZXh0fVxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgKX1cbiAgICAgIDwvPlxuICAgICk7XG4gIH1cbn1cbiIsImltcG9ydCB7IEltYWdlSXRlbVZhbHVlV3JhcHBlclZpZXdNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY3JlYXRvci1jb3JlXCI7XG5pbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBRdWVzdGlvblNlbGVjdEJhc2UsIEJhc2UsIEltYWdlSXRlbVZhbHVlLCBRdWVzdGlvbkltYWdlUGlja2VyTW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFJlYWN0RWxlbWVudEZhY3RvcnksIFN2Z0ljb24gfSBmcm9tIFwic3VydmV5LXJlYWN0LXVpXCI7XG5pbXBvcnQge1xuICBhdHRhY2hLZXkyY2xpY2ssXG59IGZyb20gXCJzdXJ2ZXktcmVhY3QtdWlcIjtcbmltcG9ydCB7IENyZWF0b3JNb2RlbEVsZW1lbnQgfSBmcm9tIFwiLi9Nb2RlbEVsZW1lbnRcIjtcblxuaW50ZXJmYWNlIEltYWdlSXRlbVZhbHVlQWRvcm5lckNvbXBvbmVudFByb3BzIHtcbiAgZWxlbWVudDogSlNYLkVsZW1lbnQ7XG4gIGNvbXBvbmVudERhdGE6IGFueTtcbiAgcXVlc3Rpb246IFF1ZXN0aW9uU2VsZWN0QmFzZTtcbiAgaXRlbTogSW1hZ2VJdGVtVmFsdWU7XG59XG5cbmV4cG9ydCBjbGFzcyBJbWFnZUl0ZW1WYWx1ZUFkb3JuZXJDb21wb25lbnQgZXh0ZW5kcyBDcmVhdG9yTW9kZWxFbGVtZW50PFxuICBJbWFnZUl0ZW1WYWx1ZUFkb3JuZXJDb21wb25lbnRQcm9wcyxcbiAgYW55XG4+IHtcbiAgbW9kZWw6IEltYWdlSXRlbVZhbHVlV3JhcHBlclZpZXdNb2RlbDtcbiAgcHJpdmF0ZSByb290UmVmOiBSZWFjdC5SZWZPYmplY3Q8SFRNTERpdkVsZW1lbnQ+O1xuXG4gIGNvbnN0cnVjdG9yKHByb3BzOiBJbWFnZUl0ZW1WYWx1ZUFkb3JuZXJDb21wb25lbnRQcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLnJvb3RSZWYgPSBSZWFjdC5jcmVhdGVSZWYoKTtcbiAgfVxuICBwcm90ZWN0ZWQgY3JlYXRlTW9kZWwoKTogdm9pZCB7XG4gICAgdGhpcy5tb2RlbCA9IG5ldyBJbWFnZUl0ZW1WYWx1ZVdyYXBwZXJWaWV3TW9kZWwoXG4gICAgICB0aGlzLnByb3BzLmNvbXBvbmVudERhdGEuY3JlYXRvcixcbiAgICAgIHRoaXMucHJvcHMucXVlc3Rpb24sXG4gICAgICB0aGlzLnByb3BzLml0ZW0sXG4gICAgICBudWxsLFxuICAgICAgbnVsbFxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFVwZGF0ZWRNb2RlbFByb3BzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gW1wicXVlc3Rpb25cIiwgXCJpdGVtXCJdO1xuICB9XG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnQoKTogQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMubW9kZWw7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0IHF1ZXN0aW9uKCk6IFF1ZXN0aW9uSW1hZ2VQaWNrZXJNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMucXVlc3Rpb24gYXMgUXVlc3Rpb25JbWFnZVBpY2tlck1vZGVsO1xuICB9XG5cbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgc3VwZXIuY29tcG9uZW50RGlkTW91bnQoKTtcbiAgICB0aGlzLm1vZGVsLml0ZW1zUm9vdCA9IHRoaXMucm9vdFJlZi5jdXJyZW50O1xuICB9XG5cbiAgY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wcywgcHJldlN0YXRlKSB7XG4gICAgc3VwZXIuY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wcywgcHJldlN0YXRlKTtcbiAgICB0aGlzLm1vZGVsLml0ZW1zUm9vdCA9IHRoaXMucm9vdFJlZi5jdXJyZW50O1xuICB9XG5cbiAgcHJldmVudERyYWdIYW5kbGVyID0gKGUpID0+IHtcbiAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gIH1cblxuICByZW5kZXIoKTogSlNYLkVsZW1lbnQge1xuICAgIC8vIGlmICh0aGlzLm1vZGVsLnF1ZXN0aW9uLmlzRHJhZ2dlZCkge1xuICAgIC8vICAgcmV0dXJuIG51bGw7XG4gICAgLy8gfVxuICAgIHRoaXMubW9kZWwuaXRlbSA9IHRoaXMucHJvcHMuaXRlbTtcbiAgICBjb25zdCBpc05ldyA9ICF0aGlzLnByb3BzLnF1ZXN0aW9uLmlzSXRlbUluTGlzdCh0aGlzLnByb3BzLml0ZW0pO1xuICAgIHRoaXMubW9kZWwuaXNOZXcgPSBpc05ldztcbiAgICBjb25zdCBpbWFnZVN0eWxlID0gIXRoaXMubW9kZWwuZ2V0SXNOZXdJdGVtU2luZ2xlKCkgPyB7IHdpZHRoOiB0aGlzLnF1ZXN0aW9uLnJlbmRlcmVkSW1hZ2VXaWR0aCwgaGVpZ2h0OiB0aGlzLnF1ZXN0aW9uLnJlbmRlcmVkSW1hZ2VIZWlnaHQgfSA6IG51bGw7XG5cbiAgICBsZXQgY29udGVudCA9IG51bGw7XG4gICAgaWYgKGlzTmV3KSB7XG4gICAgICBjb250ZW50ID0gKDw+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLWltYWdlLWl0ZW0tdmFsdWVfX2l0ZW1cIlxuICAgICAgICAgIG9uRHJvcD17dGhpcy5tb2RlbC5vbkRyb3B9IG9uRHJhZ092ZXI9e3RoaXMubW9kZWwub25EcmFnT3Zlcn0gb25EcmFnTGVhdmU9e3RoaXMubW9kZWwub25EcmFnTGVhdmV9PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic2QtaW1hZ2VwaWNrZXJfX2l0ZW0gc2QtaW1hZ2VwaWNrZXJfX2l0ZW0tLWlubGluZVwiPlxuICAgICAgICAgICAgPGxhYmVsIGNsYXNzTmFtZT1cInNkLWltYWdlcGlja2VyX19sYWJlbFwiPlxuICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXtpbWFnZVN0eWxlfSBjbGFzc05hbWU9XCJzZC1pbWFnZXBpY2tlcl9faW1hZ2VcIj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy1pbWFnZS1pdGVtLXZhbHVlLWNvbnRyb2xzXCI+XG4gICAgICAgICAge3RoaXMubW9kZWwuYWxsb3dBZGQgPyBhdHRhY2hLZXkyY2xpY2soPHNwYW4gY2xhc3NOYW1lPVwic3ZjLWltYWdlLWl0ZW0tdmFsdWUtY29udHJvbHNfX2J1dHRvbiBzdmMtaW1hZ2UtaXRlbS12YWx1ZS1jb250cm9sc19fYWRkXCIgb25DbGljaz17KCkgPT4gdGhpcy5tb2RlbC5jaG9vc2VOZXdGaWxlKHRoaXMubW9kZWwpfT5cbiAgICAgICAgICAgIDxTdmdJY29uIHNpemU9ezI0fSBpY29uTmFtZT17XCJpY29uLWFkZC1sZ1wifT48L1N2Z0ljb24+XG4gICAgICAgICAgPC9zcGFuPikgOiBudWxsfVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvPik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnRlbnQgPSAoXG4gICAgICAgIDw+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e1wic3ZjLWltYWdlLWl0ZW0tdmFsdWVfX2l0ZW1cIn0+XG4gICAgICAgICAgICB7dGhpcy5wcm9wcy5lbGVtZW50fVxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwic3ZjLWltYWdlLWl0ZW0tdmFsdWUtY29udHJvbHNfX2J1dHRvbiBzdmMtaW1hZ2UtaXRlbS12YWx1ZS1jb250cm9sc19fZHJhZy1hcmVhLWluZGljYXRvclwiXG4gICAgICAgICAgICBvblBvaW50ZXJEb3duPXsoZXZlbnQ6IGFueSkgPT4gdGhpcy5tb2RlbC5vblBvaW50ZXJEb3duKGV2ZW50KX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8U3ZnSWNvbiBzaXplPXsyNH0gaWNvbk5hbWU9e1wiaWNvbi1kcmFnLWFyZWEtaW5kaWNhdG9yXCJ9PjwvU3ZnSWNvbj5cbiAgICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy1pbWFnZS1pdGVtLXZhbHVlLWNvbnRyb2xzXCI+XG4gICAgICAgICAgICB7dGhpcy5tb2RlbC5hbGxvd1JlbW92ZSA/IGF0dGFjaEtleTJjbGljayg8c3BhblxuICAgICAgICAgICAgICBjbGFzc05hbWU9XCJzdmMtaW1hZ2UtaXRlbS12YWx1ZS1jb250cm9sc19fYnV0dG9uIHN2Yy1pbWFnZS1pdGVtLXZhbHVlLWNvbnRyb2xzX19jaG9vc2UtZmlsZVwiXG4gICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHRoaXMubW9kZWwuY2hvb3NlRmlsZSh0aGlzLm1vZGVsKX1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPFN2Z0ljb24gc2l6ZT17MjR9IGljb25OYW1lPXtcImljb24tZmlsZVwifT48L1N2Z0ljb24+XG4gICAgICAgICAgICA8L3NwYW4+KSA6IG51bGx9XG4gICAgICAgICAgICB7dGhpcy5tb2RlbC5hbGxvd1JlbW92ZSA/IGF0dGFjaEtleTJjbGljayg8c3BhblxuICAgICAgICAgICAgICBjbGFzc05hbWU9XCJzdmMtaW1hZ2UtaXRlbS12YWx1ZS1jb250cm9sc19fYnV0dG9uIHN2Yy1pbWFnZS1pdGVtLXZhbHVlLWNvbnRyb2xzX19yZW1vdmVcIlxuICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB0aGlzLm1vZGVsLnJlbW92ZSh0aGlzLm1vZGVsKX1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPFN2Z0ljb24gc2l6ZT17MjR9IGljb25OYW1lPXtcImljb24tZGVsZXRlXCJ9PjwvU3ZnSWNvbj5cbiAgICAgICAgICAgIDwvc3Bhbj4pIDogbnVsbH1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC8+XG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiAoXG4gICAgICA8ZGl2XG4gICAgICAgIHJlZj17dGhpcy5yb290UmVmfVxuICAgICAgICBjbGFzc05hbWU9e3RoaXMubW9kZWwuZ2V0Um9vdENzcygpfVxuICAgICAgICBrZXk9e3RoaXMucHJvcHMuZWxlbWVudC5rZXl9XG4gICAgICAgIGRhdGEtc3YtZHJvcC10YXJnZXQtaXRlbS12YWx1ZT17XG4gICAgICAgICAgdGhpcy5tb2RlbC5pc0RyYWdnYWJsZSA/IHRoaXMubW9kZWwuaXRlbS52YWx1ZSA6IHVuZGVmaW5lZFxuICAgICAgICB9XG4gICAgICAgIG9uUG9pbnRlckRvd249eyhldmVudDogYW55KSA9PiB0aGlzLm1vZGVsLm9uUG9pbnRlckRvd24oZXZlbnQpfVxuICAgICAgICBvbkRyYWdTdGFydD17dGhpcy5wcmV2ZW50RHJhZ0hhbmRsZXJ9XG4gICAgICA+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtcInN2Yy1pbWFnZS1pdGVtLXZhbHVlLXdyYXBwZXJfX2dob3N0XCJ9IHN0eWxlPXtpbWFnZVN0eWxlfT48L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e1wic3ZjLWltYWdlLWl0ZW0tdmFsdWUtd3JhcHBlcl9fY29udGVudFwifT5cbiAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgIHR5cGU9XCJmaWxlXCJcbiAgICAgICAgICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiXG4gICAgICAgICAgICB0YWJJbmRleD17LTF9XG4gICAgICAgICAgICBhY2NlcHQ9XCJpbWFnZS8qXCJcbiAgICAgICAgICAgIGNsYXNzTmFtZT1cInN2Yy1jaG9vc2UtZmlsZS1pbnB1dFwiXG4gICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICBwb3NpdGlvbjogXCJhYnNvbHV0ZVwiLFxuICAgICAgICAgICAgICBvcGFjaXR5OiAwLFxuICAgICAgICAgICAgICB3aWR0aDogXCIxcHhcIixcbiAgICAgICAgICAgICAgaGVpZ2h0OiBcIjFweFwiLFxuICAgICAgICAgICAgICBvdmVyZmxvdzogXCJoaWRkZW5cIlxuICAgICAgICAgICAgfX1cbiAgICAgICAgICAvPlxuICAgICAgICAgIHtjb250ZW50fVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXG4gIFwic3ZjLWltYWdlLWl0ZW0tdmFsdWVcIixcbiAgKHByb3BzOiBJbWFnZUl0ZW1WYWx1ZUFkb3JuZXJDb21wb25lbnRQcm9wcykgPT4ge1xuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KEltYWdlSXRlbVZhbHVlQWRvcm5lckNvbXBvbmVudCwgcHJvcHMpO1xuICB9XG4pO1xuIiwiaW1wb3J0IHsgZ2V0TG9jU3RyaW5nLCBJdGVtVmFsdWVXcmFwcGVyVmlld01vZGVsIH0gZnJvbSBcInN1cnZleS1jcmVhdG9yLWNvcmVcIjtcbmltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFJlYWN0RHJhZ0V2ZW50IH0gZnJvbSBcInNyYy9ldmVudHNcIjtcbmltcG9ydCB7IFF1ZXN0aW9uU2VsZWN0QmFzZSwgQmFzZSwgSXRlbVZhbHVlIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQge1xuICBhdHRhY2hLZXkyY2xpY2ssXG4gIFJlYWN0RWxlbWVudEZhY3RvcnksXG4gIFN2Z0ljb25cbn0gZnJvbSBcInN1cnZleS1yZWFjdC11aVwiO1xuaW1wb3J0IHsgQ3JlYXRvck1vZGVsRWxlbWVudCB9IGZyb20gXCIuL01vZGVsRWxlbWVudFwiO1xuXG5pbnRlcmZhY2UgSXRlbVZhbHVlQWRvcm5lckNvbXBvbmVudFByb3BzIHtcbiAgZWxlbWVudDogSlNYLkVsZW1lbnQ7XG4gIGNvbXBvbmVudERhdGE6IGFueTtcbiAgcXVlc3Rpb246IFF1ZXN0aW9uU2VsZWN0QmFzZTtcbiAgaXRlbTogSXRlbVZhbHVlO1xufVxuXG5leHBvcnQgY2xhc3MgSXRlbVZhbHVlQWRvcm5lckNvbXBvbmVudCBleHRlbmRzIENyZWF0b3JNb2RlbEVsZW1lbnQ8XG4gIEl0ZW1WYWx1ZUFkb3JuZXJDb21wb25lbnRQcm9wcyxcbiAgYW55XG4+IHtcbiAgbW9kZWw6IEl0ZW1WYWx1ZVdyYXBwZXJWaWV3TW9kZWw7XG4gIHByb3RlY3RlZCBjcmVhdGVNb2RlbCgpOiB2b2lkIHtcbiAgICB0aGlzLm1vZGVsID0gbmV3IEl0ZW1WYWx1ZVdyYXBwZXJWaWV3TW9kZWwoXG4gICAgICB0aGlzLnByb3BzLmNvbXBvbmVudERhdGEuY3JlYXRvcixcbiAgICAgIHRoaXMucHJvcHMucXVlc3Rpb24sXG4gICAgICB0aGlzLnByb3BzLml0ZW1cbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCBnZXRVcGRhdGVkTW9kZWxQcm9wcygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIFtcInF1ZXN0aW9uXCIsIFwiaXRlbVwiXTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCk6IEJhc2Uge1xuICAgIHJldHVybiB0aGlzLm1vZGVsO1xuICB9XG5cbiAgcmVuZGVyKCk6IEpTWC5FbGVtZW50IHtcbiAgICAvLyBpZiAodGhpcy5tb2RlbC5xdWVzdGlvbi5pc0RyYWdnZWQpIHtcbiAgICAvLyAgIHJldHVybiBudWxsO1xuICAgIC8vIH1cbiAgICB0aGlzLm1vZGVsLml0ZW0gPSB0aGlzLnByb3BzLml0ZW07XG4gICAgY29uc3QgYnV0dG9uID0gdGhpcy5tb2RlbC5hbGxvd0FkZCA/IChcbiAgICAgIGF0dGFjaEtleTJjbGljayg8c3BhblxuICAgICAgICBjbGFzc05hbWU9XCJzdmMtaXRlbS12YWx1ZS1jb250cm9sc19fYnV0dG9uIHN2Yy1pdGVtLXZhbHVlLWNvbnRyb2xzX19hZGRcIlxuICAgICAgICBhcmlhLWxhYmVsPXt0aGlzLm1vZGVsLnRvb2x0aXB9XG4gICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICB0aGlzLm1vZGVsLmFkZCh0aGlzLm1vZGVsKTtcbiAgICAgICAgICB0aGlzLm1vZGVsLmlzTmV3ID0gZmFsc2U7XG4gICAgICAgIH19XG4gICAgICA+XG4gICAgICAgIDxTdmdJY29uIHNpemU9ezE2fSBpY29uTmFtZT17XCJpY29uLWFkZF8xNngxNlwifSB0aXRsZT17dGhpcy5tb2RlbC50b29sdGlwfT48L1N2Z0ljb24+XG4gICAgICA8L3NwYW4+KVxuICAgICkgOiAoXG4gICAgICA8PlxuICAgICAgICB7XCIgXCJ9XG4gICAgICAgIHt0aGlzLm1vZGVsLmlzRHJhZ2dhYmxlID8gKFxuICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICBjbGFzc05hbWU9XCJzdmMtaXRlbS12YWx1ZS1jb250cm9sc19fYnV0dG9uIHN2Yy1pdGVtLXZhbHVlLWNvbnRyb2xzX19kcmFnXCJcbiAgICAgICAgICAgIGFyaWEtbGFiZWw9e3RoaXMubW9kZWwuZHJhZ1Rvb2x0aXB9XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPFN2Z0ljb24gY2xhc3NOYW1lPVwic3ZjLWl0ZW0tdmFsdWUtY29udHJvbHNfX2RyYWctaWNvblwiIHNpemU9ezI0fSBpY29uTmFtZT17XCJpY29uLWRyYWctYXJlYS1pbmRpY2F0b3JcIn0gdGl0bGU9e3RoaXMubW9kZWwuZHJhZ1Rvb2x0aXB9PjwvU3ZnSWNvbj5cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICkgOiBudWxsfVxuICAgICAgICB7dGhpcy5tb2RlbC5hbGxvd1JlbW92ZSA/IGF0dGFjaEtleTJjbGljayg8c3BhblxuICAgICAgICAgIGNsYXNzTmFtZT1cInN2Yy1pdGVtLXZhbHVlLWNvbnRyb2xzX19idXR0b24gc3ZjLWl0ZW0tdmFsdWUtY29udHJvbHNfX3JlbW92ZVwiXG4gICAgICAgICAgYXJpYS1sYWJlbD17dGhpcy5tb2RlbC50b29sdGlwfVxuICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHRoaXMubW9kZWwucmVtb3ZlKHRoaXMubW9kZWwpfVxuICAgICAgICA+XG4gICAgICAgICAgPFN2Z0ljb24gc2l6ZT17MTZ9IGljb25OYW1lPXtcImljb24tcmVtb3ZlXzE2eDE2XCJ9IHRpdGxlPXt0aGlzLm1vZGVsLnRvb2x0aXB9PjwvU3ZnSWNvbj5cbiAgICAgICAgPC9zcGFuPikgOiBudWxsfVxuICAgICAgPC8+XG4gICAgKTtcblxuICAgIHJldHVybiAoXG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzTmFtZT17XG4gICAgICAgICAgXCJzdmMtaXRlbS12YWx1ZS13cmFwcGVyXCIgK1xuICAgICAgICAgICh0aGlzLm1vZGVsLmFsbG93QWRkID8gXCIgc3ZjLWl0ZW0tdmFsdWUtLW5ld1wiIDogXCJcIikgK1xuICAgICAgICAgICh0aGlzLm1vZGVsLmlzRHJhZ2dpbmcgPyBcIiBzdmMtaXRlbS12YWx1ZS0tZHJhZ2dpbmdcIiA6IFwiXCIpICtcbiAgICAgICAgICAodGhpcy5tb2RlbC5pc0RyYWdEcm9wR2hvc3QgPyBcIiBzdmMtaXRlbS12YWx1ZS0tZ2hvc3RcIiA6IFwiXCIpICtcbiAgICAgICAgICAodGhpcy5tb2RlbC5pc0RyYWdEcm9wTW92ZURvd24gPyBcIiBzdmMtaXRlbS12YWx1ZS0tbW92ZWRvd25cIiA6IFwiXCIpICtcbiAgICAgICAgICAodGhpcy5tb2RlbC5pc0RyYWdEcm9wTW92ZVVwID8gXCIgc3ZjLWl0ZW0tdmFsdWUtLW1vdmV1cFwiIDogXCJcIilcbiAgICAgICAgfVxuICAgICAgICBrZXk9e3RoaXMucHJvcHMuZWxlbWVudC5rZXl9XG4gICAgICAgIGRhdGEtc3YtZHJvcC10YXJnZXQtaXRlbS12YWx1ZT17XG4gICAgICAgICAgdGhpcy5tb2RlbC5pc0RyYWdnYWJsZSA/IHRoaXMubW9kZWwuaXRlbS52YWx1ZSA6IHVuZGVmaW5lZFxuICAgICAgICB9XG4gICAgICAgIG9uUG9pbnRlckRvd249eyhldmVudDogYW55KSA9PiB0aGlzLm1vZGVsLm9uUG9pbnRlckRvd24oZXZlbnQpfVxuICAgICAgPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy1pdGVtLXZhbHVlX19naG9zdFwiPjwvZGl2PlxuXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLWl0ZW0tdmFsdWUtY29udHJvbHNcIj57YnV0dG9ufTwvZGl2PlxuXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtcInN2Yy1pdGVtLXZhbHVlX19pdGVtXCJ9IG9uQ2xpY2s9eyhldmVudCkgPT4gdGhpcy5tb2RlbC5zZWxlY3QodGhpcy5tb2RlbCwgZXZlbnQpfT57dGhpcy5wcm9wcy5lbGVtZW50fTwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxufVxuXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcbiAgXCJzdmMtaXRlbS12YWx1ZVwiLFxuICAocHJvcHM6IEl0ZW1WYWx1ZUFkb3JuZXJDb21wb25lbnRQcm9wcykgPT4ge1xuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KEl0ZW1WYWx1ZUFkb3JuZXJDb21wb25lbnQsIHByb3BzKTtcbiAgfVxuKTtcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IEJhc2UsIFN1cnZleU1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBSZWFjdEVsZW1lbnRGYWN0b3J5LCBMb2dvSW1hZ2UsIFN2Z0ljb24sIGF0dGFjaEtleTJjbGljayB9IGZyb20gXCJzdXJ2ZXktcmVhY3QtdWlcIjtcbmltcG9ydCB7IENyZWF0b3JCYXNlLCBMb2dvSW1hZ2VWaWV3TW9kZWwgfSBmcm9tIFwic3VydmV5LWNyZWF0b3ItY29yZVwiO1xuaW1wb3J0IHsgQ3JlYXRvck1vZGVsRWxlbWVudCB9IGZyb20gXCIuL01vZGVsRWxlbWVudFwiO1xuXG5pbnRlcmZhY2UgSUxvZ29JbWFnZUNvbXBvbmVudFByb3BzIHtcbiAgZGF0YTogQ3JlYXRvckJhc2U7XG59XG5cbmV4cG9ydCBjbGFzcyBMb2dvSW1hZ2VDb21wb25lbnQgZXh0ZW5kcyBDcmVhdG9yTW9kZWxFbGVtZW50PElMb2dvSW1hZ2VDb21wb25lbnRQcm9wcywgYW55PiB7XG4gIHByaXZhdGUgbW9kZWw6IExvZ29JbWFnZVZpZXdNb2RlbDtcbiAgcHJpdmF0ZSByb290UmVmOiBSZWFjdC5SZWZPYmplY3Q8SFRNTERpdkVsZW1lbnQ+O1xuICBjb25zdHJ1Y3Rvcihwcm9wczogSUxvZ29JbWFnZUNvbXBvbmVudFByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMucm9vdFJlZiA9IFJlYWN0LmNyZWF0ZVJlZigpO1xuICB9XG4gIHByb3RlY3RlZCBjcmVhdGVNb2RlbCgpOiB2b2lkIHtcbiAgICB0aGlzLm1vZGVsID0gbmV3IExvZ29JbWFnZVZpZXdNb2RlbCh0aGlzLnByb3BzLmRhdGEsIG51bGwpO1xuICB9XG4gIHByb3RlY3RlZCBnZXRVcGRhdGVkTW9kZWxQcm9wcygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIFtcImRhdGFcIl07XG4gIH1cbiAgcHJvdGVjdGVkIGdldFN0YXRlRWxlbWVudCgpOiBCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5tb2RlbDtcbiAgfVxuICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICBzdXBlci5jb21wb25lbnREaWRNb3VudCgpO1xuICAgIHRoaXMubW9kZWwucm9vdCA9IHRoaXMucm9vdFJlZi5jdXJyZW50O1xuICB9XG4gIHJlbmRlcigpOiBKU1guRWxlbWVudCB7XG4gICAgbGV0IGNvbnRlbnQ6IEpTWC5FbGVtZW50ID0gbnVsbDtcbiAgICBpZiAodGhpcy5tb2RlbC5zdXJ2ZXkubG9jTG9nby5yZW5kZXJlZEh0bWwpIHtcbiAgICAgIGNvbnRlbnQgPSBhdHRhY2hLZXkyY2xpY2soPGRpdiBjbGFzc05hbWU9eyB0aGlzLm1vZGVsLmNvbnRhaW5lckNzcyB9IG9uQ2xpY2s9eygpID0+IHRoaXMubW9kZWwuY2hvb3NlRmlsZSh0aGlzLm1vZGVsKX0+XG4gICAgICAgIDxMb2dvSW1hZ2UgZGF0YT17dGhpcy5wcm9wcy5kYXRhLnN1cnZleX0+PC9Mb2dvSW1hZ2U+XG4gICAgICA8L2Rpdj4pO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGNvbnRlbnQgPSB0aGlzLm1vZGVsLmFsbG93RWRpdCA/IGF0dGFjaEtleTJjbGljayg8ZGl2IGNsYXNzTmFtZT1cInN2Yy1sb2dvLWltYWdlLXBsYWNlaG9sZGVyXCIgb25DbGljaz17KCkgPT4gdGhpcy5tb2RlbC5jaG9vc2VGaWxlKHRoaXMubW9kZWwpfT48c3ZnPjx1c2UgeGxpbmtIcmVmPVwiI2ljb24tbG9nb1wiPjwvdXNlPjwvc3ZnPjwvZGl2PikgOiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiByZWY9e3RoaXMucm9vdFJlZn0gY2xhc3NOYW1lPVwic3ZjLWxvZ28taW1hZ2VcIj5cbiAgICAgICAgPGlucHV0IGFyaWEtaGlkZGVuPVwidHJ1ZVwiIHR5cGU9XCJmaWxlXCIgdGFiSW5kZXg9ey0xfSBhY2NlcHQ9XCJpbWFnZS8qXCIgY2xhc3NOYW1lPVwic3ZjLWNob29zZS1maWxlLWlucHV0XCIgLz5cbiAgICAgICAge2NvbnRlbnR9XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59XG5cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFwic3ZjLWxvZ28taW1hZ2VcIixcbiAgKHByb3BzOiBJTG9nb0ltYWdlQ29tcG9uZW50UHJvcHMpID0+IHtcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChMb2dvSW1hZ2VDb21wb25lbnQsIHByb3BzKTtcbiAgfVxuKTsiLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBRdWVzdGlvblNlbGVjdEJhc2UsIEJhc2UsIEl0ZW1WYWx1ZSwgU3VydmV5TW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IE1hdHJpeENlbGxXcmFwcGVyVmlld01vZGVsLCB0b2dnbGVIb3ZlcmVkIH0gZnJvbSBcInN1cnZleS1jcmVhdG9yLWNvcmVcIjtcbmltcG9ydCB7XG4gIGF0dGFjaEtleTJjbGljayxcbiAgUmVhY3RFbGVtZW50RmFjdG9yeSxcbiAgU3ZnSWNvblxufSBmcm9tIFwic3VydmV5LXJlYWN0LXVpXCI7XG5pbXBvcnQgeyBDcmVhdG9yTW9kZWxFbGVtZW50IH0gZnJvbSBcIi4vTW9kZWxFbGVtZW50XCI7XG5cbmludGVyZmFjZSBNYXRyaXhDZWxsQWRvcm5lckNvbXBvbmVudFByb3BzIHtcbiAgZWxlbWVudDogSlNYLkVsZW1lbnQ7XG4gIGNvbXBvbmVudERhdGE6IGFueTtcbiAgcXVlc3Rpb246IFF1ZXN0aW9uU2VsZWN0QmFzZTtcbiAgY2VsbDogYW55O1xufVxuXG5leHBvcnQgY2xhc3MgTWF0cml4Q2VsbEFkb3JuZXJDb21wb25lbnQgZXh0ZW5kcyBDcmVhdG9yTW9kZWxFbGVtZW50PFxuICBNYXRyaXhDZWxsQWRvcm5lckNvbXBvbmVudFByb3BzLFxuICBhbnlcbj4ge1xuICBtb2RlbDogTWF0cml4Q2VsbFdyYXBwZXJWaWV3TW9kZWw7XG4gIHByb3RlY3RlZCBjcmVhdGVNb2RlbCgpOiB2b2lkIHtcbiAgICBjb25zdCBkYXRhID0gdGhpcy5wcm9wcy5jb21wb25lbnREYXRhO1xuICAgIHRoaXMubW9kZWwgPSBuZXcgTWF0cml4Q2VsbFdyYXBwZXJWaWV3TW9kZWwoXG4gICAgICBkYXRhLmNyZWF0b3IsXG4gICAgICBkYXRhLmVsZW1lbnQsXG4gICAgICBkYXRhLnF1ZXN0aW9uLFxuICAgICAgZGF0YS5yb3csXG4gICAgICBkYXRhLmNvbHVtbixcbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCBnZXRVcGRhdGVkTW9kZWxQcm9wcygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIFtcImNvbXBvbmVudERhdGFcIl07XG4gIH1cbiAgY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wczogYW55LCBwcmV2U3RhdGU6IGFueSkge1xuICAgIHN1cGVyLmNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHMsIHByZXZTdGF0ZSk7XG4gICAgY29uc3QgZGF0YSA9IHRoaXMucHJvcHMuY29tcG9uZW50RGF0YTtcbiAgICB0aGlzLm1vZGVsLnRlbXBsYXRlRGF0YSA9IGRhdGEuZWxlbWVudDtcbiAgICB0aGlzLm1vZGVsLnJvdyA9IGRhdGEucm93O1xuICAgIHRoaXMubW9kZWwuY29sdW1uID0gZGF0YS5jb2x1bW47XG4gICAgdGhpcy5tb2RlbC5xdWVzdGlvbiA9IGRhdGEucXVlc3Rpb247XG4gIH1cbiAgcHJvdGVjdGVkIGdldFN0YXRlRWxlbWVudCgpOiBCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5tb2RlbDtcbiAgfVxuXG4gIHJlbmRlcigpOiBKU1guRWxlbWVudCB7XG4gICAgbGV0IGNvbnRyb2xzID0gbnVsbDtcbiAgICBpZiAoISF0aGlzLm1vZGVsLnF1ZXN0aW9uKSB7XG4gICAgICBjb250cm9scyA9IDxkaXYgY2xhc3NOYW1lPVwic3ZjLW1hdHJpeC1jZWxsX19xdWVzdGlvbi1jb250cm9sc1wiPlxuICAgICAgICB7YXR0YWNoS2V5MmNsaWNrKDxzcGFuIGNsYXNzTmFtZT1cInN2Yy1tYXRyaXgtY2VsbF9fcXVlc3Rpb24tY29udHJvbHMtYnV0dG9uXCIgb25DbGljaz17KCkgPT4gdGhpcy5tb2RlbC5lZGl0UXVlc3Rpb24odGhpcy5tb2RlbCl9PlxuICAgICAgICAgIDxTdmdJY29uIHNpemU9ezI0fSBpY29uTmFtZT17XCJpY29uLWVkaXRcIn0+PC9TdmdJY29uPlxuICAgICAgICA8L3NwYW4+KX1cbiAgICAgIDwvZGl2PjtcbiAgICB9XG5cbiAgICByZXR1cm4gKFxuICAgICAgPGRpdlxuICAgICAgICBjbGFzc05hbWU9e1wic3ZjLW1hdHJpeC1jZWxsXCJ9XG4gICAgICAgIGtleT17dGhpcy5wcm9wcy5lbGVtZW50LmtleX1cbiAgICAgICAgb25DbGljaz17KGU6IGFueSkgPT4gIXRoaXMucHJvcHMucXVlc3Rpb24gJiYgdGhpcy5tb2RlbC5zZWxlY3RDb250ZXh0KHRoaXMubW9kZWwsIGUpfVxuICAgICAgICBvbk1vdXNlT3V0PXtlID0+IHRoaXMubW9kZWwuaG92ZXIoZS5uYXRpdmVFdmVudCwgZS5jdXJyZW50VGFyZ2V0KX1cbiAgICAgICAgb25Nb3VzZU92ZXI9e2UgPT4gdGhpcy5tb2RlbC5ob3ZlcihlLm5hdGl2ZUV2ZW50LCBlLmN1cnJlbnRUYXJnZXQpfVxuICAgICAgPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17XCJzdmMtbWF0cml4LWNlbGwtLXNlbGVjdGVkXCIgKyAodGhpcy5tb2RlbC5pc1NlbGVjdGVkID8gXCIgc3ZjLXZpc2libGVcIiA6IFwiXCIpfT48L2Rpdj5cblxuICAgICAgICB7dGhpcy5wcm9wcy5lbGVtZW50fVxuXG4gICAgICAgIHtjb250cm9sc31cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXG4gIFwic3ZjLW1hdHJpeC1jZWxsXCIsXG4gIChwcm9wczogTWF0cml4Q2VsbEFkb3JuZXJDb21wb25lbnRQcm9wcykgPT4ge1xuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KE1hdHJpeENlbGxBZG9ybmVyQ29tcG9uZW50LCBwcm9wcyk7XG4gIH1cbik7XG4iLCJpbXBvcnQgeyBTdXJ2ZXlFbGVtZW50QmFzZSB9IGZyb20gXCJzdXJ2ZXktcmVhY3QtdWlcIjtcblxuZXhwb3J0IGNsYXNzIENyZWF0b3JNb2RlbEVsZW1lbnQ8UCwgUz4gZXh0ZW5kcyBTdXJ2ZXlFbGVtZW50QmFzZTxQLCBTPiB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBQKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMuY3JlYXRlTW9kZWwoKTtcbiAgfVxuICBjb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzOiBhbnksIHByZXZTdGF0ZTogYW55KTogdm9pZCB7XG4gICAgc3VwZXIuY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wcywgcHJldlN0YXRlKTtcbiAgICBpZih0aGlzLm5lZWRVcGRhdGVNb2RlbChwcmV2UHJvcHMpKSB7XG4gICAgICB0aGlzLmNyZWF0ZU1vZGVsKCk7XG4gICAgfVxuICB9XG4gIHByb3RlY3RlZCBjcmVhdGVNb2RlbCgpOiB2b2lkIHt9XG4gIHByb3RlY3RlZCBuZWVkVXBkYXRlTW9kZWwocHJldlByb3BzOiBhbnkpOiBib29sZWFuIHtcbiAgICBjb25zdCBuYW1lcyA9IHRoaXMuZ2V0VXBkYXRlZE1vZGVsUHJvcHMoKTtcbiAgICBpZighQXJyYXkuaXNBcnJheShuYW1lcykpIHJldHVybiB0cnVlO1xuICAgIGZvcih2YXIgaSA9IDA7IGkgPCBuYW1lcy5sZW5ndGg7IGkgKyspIHtcbiAgICAgIGNvbnN0IGtleSA9IG5hbWVzW2ldO1xuICAgICAgaWYodGhpcy5wcm9wc1trZXldICE9PSBwcmV2UHJvcHNba2V5XSkgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0VXBkYXRlZE1vZGVsUHJvcHMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbn0iLCJpbXBvcnQgeyBTdXJ2ZXlNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgUmVhY3RFbGVtZW50RmFjdG9yeSwgU3VydmV5RWxlbWVudEJhc2UgfSBmcm9tIFwic3VydmV5LXJlYWN0LXVpXCI7XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlOYXZpZ2F0aW9uIGV4dGVuZHMgU3VydmV5RWxlbWVudEJhc2U8YW55LCBhbnk+IHtcbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgc3VwZXIuY29tcG9uZW50RGlkTW91bnQoKTtcbiAgICB0aGlzLnNldEhhbmRsZXIoKTtcbiAgfVxuICBjb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzOiBhbnksIHByZXZTdGF0ZTogYW55KSB7XG4gICAgc3VwZXIuY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wcywgcHJldlN0YXRlKTtcbiAgICB0aGlzLnNldEhhbmRsZXIoKTtcbiAgfVxuICBwcml2YXRlIHNldEhhbmRsZXIoKSB7XG4gICAgaWYgKFxuICAgICAgIXRoaXMuc3VydmV5IHx8XG4gICAgICAgIHRoaXMuc3VydmV5Lm9uUHJvcGVydHlDaGFuZ2VkLmhhc0Z1bmModGhpcy5vblByb3BDaGFuZ2VkSGFuZGxlcilcbiAgICApXG4gICAgICByZXR1cm47XG4gICAgdGhpcy5zdXJ2ZXkub25Qcm9wZXJ0eUNoYW5nZWQuYWRkKHRoaXMub25Qcm9wQ2hhbmdlZEhhbmRsZXIpO1xuICB9XG4gICAgcHJpdmF0ZSBvblByb3BDaGFuZ2VkSGFuZGxlciA9IChzZW5kZXI6IGFueSwgb3B0aW9uczogYW55KTogYW55ID0+IHtcbiAgICAgIGlmICh0aGlzLmlzUmVuZGVyaW5nKSByZXR1cm47XG4gICAgICBjb25zdCByZWFjdGl2ZVByb3BzID0gW1xuICAgICAgICBcInNob3dQcm9ncmVzc0JhclwiLFxuICAgICAgICBcInByb2dyZXNzQmFyVHlwZVwiLFxuICAgICAgICBcImN1cnJlbnRQYWdlVmFsdWVcIlxuICAgICAgXTtcbiAgICAgIGlmIChyZWFjdGl2ZVByb3BzLmluZGV4T2Yob3B0aW9ucy5uYW1lKSA8IDApIHJldHVybjtcbiAgICAgIHZhciB2YWw6IGFueSA9IHt9O1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByZWFjdGl2ZVByb3BzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBwcm9wTmFtZSA9IHJlYWN0aXZlUHJvcHNbaV07XG4gICAgICAgIHZhbFtwcm9wTmFtZV0gPSB0aGlzLnN1cnZleVtwcm9wTmFtZV07XG4gICAgICB9XG4gICAgICB0aGlzLnNldFN0YXRlKHZhbCk7XG4gICAgfTtcbiAgICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICAgIHN1cGVyLmNvbXBvbmVudFdpbGxVbm1vdW50KCk7XG4gICAgICBpZiAodGhpcy5zdXJ2ZXkpIHtcbiAgICAgICAgdGhpcy5zdXJ2ZXkub25Qcm9wZXJ0eUNoYW5nZWQucmVtb3ZlKHRoaXMub25Qcm9wQ2hhbmdlZEhhbmRsZXIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHByb3RlY3RlZCBnZXQgc3VydmV5KCk6IFN1cnZleU1vZGVsIHtcbiAgICAgIHJldHVybiB0aGlzLnByb3BzLnN1cnZleTtcbiAgICB9XG4gICAgcHJvdGVjdGVkIGdldCBsb2NhdGlvbigpOiBzdHJpbmcge1xuICAgICAgcmV0dXJuIHRoaXMucHJvcHMubG9jYXRpb247XG4gICAgfVxuICAgIHByb3RlY3RlZCBnZXQgaXNUb3AoKTogYm9vbGVhbiB7XG4gICAgICByZXR1cm4gdGhpcy5sb2NhdGlvbiA9PSBcInRvcFwiO1xuICAgIH1cbiAgICBwcm90ZWN0ZWQgY2FuUmVuZGVyKCk6IGJvb2xlYW4ge1xuICAgICAgcmV0dXJuIHRoaXMuaXNUb3BcbiAgICAgICAgPyB0aGlzLnN1cnZleS5pc1Nob3dQcm9ncmVzc0Jhck9uVG9wXG4gICAgICAgIDogdGhpcy5zdXJ2ZXkuaXNTaG93UHJvZ3Jlc3NCYXJPbkJvdHRvbTtcbiAgICB9XG4gICAgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgICByZXR1cm4gUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5jcmVhdGVFbGVtZW50KFxuICAgICAgICBcInN2LXByb2dyZXNzLVwiICsgdGhpcy5zdXJ2ZXkucHJvZ3Jlc3NCYXJUeXBlLnRvTG93ZXJDYXNlKCksXG4gICAgICAgIHsgc3VydmV5OiB0aGlzLnN1cnZleSwgY3NzOiB0aGlzLnN1cnZleS5jc3MsIGlzVG9wOiB0aGlzLmlzVG9wIH1cbiAgICAgICk7XG4gICAgfVxufVxuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgQmFzZSwgU3VydmV5TW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFN1cnZleUVsZW1lbnRCYXNlLCB9IGZyb20gXCJzdXJ2ZXktcmVhY3QtdWlcIjtcbmltcG9ydCB7IENyZWF0b3JCYXNlLCBOb3RpZmllciB9IGZyb20gXCJzdXJ2ZXktY3JlYXRvci1jb3JlXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTm90aWZpZXJDb21wb25lbnRQcm9wcyB7XG4gIGNyZWF0b3I6IENyZWF0b3JCYXNlO1xuICBub3RpZmllcjogTm90aWZpZXI7XG59XG5cbmV4cG9ydCBjbGFzcyBOb3RpZmllckNvbXBvbmVudCBleHRlbmRzIFN1cnZleUVsZW1lbnRCYXNlPE5vdGlmaWVyQ29tcG9uZW50UHJvcHMsIGFueT4ge1xuICBnZXQgbm90aWZpZXIoKSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMubm90aWZpZXI7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFN0YXRlRWxlbWVudCgpOiBCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5ub3RpZmllcjtcbiAgfVxuICByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICBpZiAoIXRoaXMubm90aWZpZXIuYWN0aXZlKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPXt0aGlzLm5vdGlmaWVyLmNzc30+XG4gICAgICAgIDxzcGFuPnt0aGlzLm5vdGlmaWVyLm1lc3NhZ2V9PC9zcGFuPlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxufVxuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgT2JqZWN0U2VsZWN0b3JNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY3JlYXRvci1jb3JlXCI7XG5pbXBvcnQgeyBCYXNlIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBSZWFjdEVsZW1lbnRGYWN0b3J5LCBTdXJ2ZXlFbGVtZW50QmFzZSwgTGlzdCB9IGZyb20gXCJzdXJ2ZXktcmVhY3QtdWlcIjtcblxuaW50ZXJmYWNlIElPYmplY3RTZWxlY3RvckNvbXBvbmVudFByb3BzIHtcbiAgbW9kZWw6IE9iamVjdFNlbGVjdG9yTW9kZWw7XG59XG5jbGFzcyBPYmplY3RTZWxlY3RvckNvbXBvbmVudCBleHRlbmRzIFN1cnZleUVsZW1lbnRCYXNlPElPYmplY3RTZWxlY3RvckNvbXBvbmVudFByb3BzLCBhbnk+IHtcbiAgcHJvdGVjdGVkIGdldCBtb2RlbCgpOiBPYmplY3RTZWxlY3Rvck1vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5tb2RlbDtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCk6IEJhc2Uge1xuICAgIHJldHVybiB0aGlzLm1vZGVsO1xuICB9XG4gIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIGlmICghdGhpcy5tb2RlbC5pc1Zpc2libGUpIHJldHVybiBudWxsO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLW9iamVjdC1zZWxlY3RvclwiPlxuICAgICAgICA8TGlzdCBtb2RlbD17dGhpcy5tb2RlbC5saXN0fT48L0xpc3Q+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59XG5cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFwic3ZjLW9iamVjdC1zZWxlY3RvclwiLCAocHJvcHMpID0+IHtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXG4gICAgT2JqZWN0U2VsZWN0b3JDb21wb25lbnQsXG4gICAgcHJvcHMgYXMgSU9iamVjdFNlbGVjdG9yQ29tcG9uZW50UHJvcHNcbiAgKTtcbn0pO1xuIiwiaW1wb3J0IHtcbiAgQmFzZSxcbiAgSUFjdGlvbixcbiAgdW53cmFwXG59IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHtcbiAgU3ZnSWNvbixcbiAgUG9wdXAsXG4gIGF0dGFjaEtleTJjbGlja1xufSBmcm9tIFwic3VydmV5LXJlYWN0LXVpXCI7XG5pbXBvcnQgeyBQYWdlTmF2aWdhdG9yVmlld01vZGVsLCBQYWdlc0NvbnRyb2xsZXIgfSBmcm9tIFwic3VydmV5LWNyZWF0b3ItY29yZVwiO1xuaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgQ3JlYXRvck1vZGVsRWxlbWVudCB9IGZyb20gXCIuL01vZGVsRWxlbWVudFwiO1xuXG5pbnRlcmZhY2UgSVN1cnZleVBhZ2VOYXZpZ2F0b3JQcm9wcyB7XG4gIHBhZ2VzQ29udHJvbGxlcjogUGFnZXNDb250cm9sbGVyO1xuICBwYWdlRWRpdE1vZGU6IHN0cmluZztcbn1cblxuZXhwb3J0IGNsYXNzIFN1cnZleVBhZ2VOYXZpZ2F0b3IgZXh0ZW5kcyBDcmVhdG9yTW9kZWxFbGVtZW50PFxuICBJU3VydmV5UGFnZU5hdmlnYXRvclByb3BzLFxuICBhbnlcbj4ge1xuICBwcml2YXRlIG1vZGVsOiBQYWdlTmF2aWdhdG9yVmlld01vZGVsO1xuICBwcml2YXRlIGNvbnRhaW5lclJlZjogUmVhY3QuUmVmT2JqZWN0PEhUTUxEaXZFbGVtZW50PjtcblxuICBjb25zdHJ1Y3Rvcihwcm9wczogSVN1cnZleVBhZ2VOYXZpZ2F0b3JQcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLmNvbnRhaW5lclJlZiA9IFJlYWN0LmNyZWF0ZVJlZigpO1xuICB9XG4gIHByb3RlY3RlZCBjcmVhdGVNb2RlbCgpOiB2b2lkIHtcbiAgICB0aGlzLm1vZGVsID0gbmV3IFBhZ2VOYXZpZ2F0b3JWaWV3TW9kZWwoXG4gICAgICB0aGlzLnByb3BzLnBhZ2VzQ29udHJvbGxlcixcbiAgICAgIHRoaXMucHJvcHMucGFnZUVkaXRNb2RlXG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0VXBkYXRlZE1vZGVsUHJvcHMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBbXCJwYWdlc0NvbnRyb2xsZXJcIiwgXCJwYWdlRWRpdE1vZGVcIl07XG4gIH1cbiAgcHJvdGVjdGVkIGdldFN0YXRlRWxlbWVudCgpOiBCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5tb2RlbDtcbiAgfVxuICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICBzdXBlci5jb21wb25lbnREaWRNb3VudCgpO1xuICAgIGlmICh0aGlzLnByb3BzLnBhZ2VFZGl0TW9kZSAhPT0gXCJieXBhZ2VcIikge1xuICAgICAgY29uc3QgZWwgPSB0aGlzLmNvbnRhaW5lclJlZi5jdXJyZW50IGFzIEhUTUxEaXZFbGVtZW50O1xuICAgICAgaWYgKCEhZWwpIHtcbiAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgICAgIGVsLnBhcmVudEVsZW1lbnQucGFyZW50RWxlbWVudC5wYXJlbnRFbGVtZW50Lm9uc2Nyb2xsID0gZnVuY3Rpb24gKHRoaXM6IEdsb2JhbEV2ZW50SGFuZGxlcnMsIGV2OiBFdmVudCkge1xuICAgICAgICAgIHJldHVybiBzZWxmLm1vZGVsLm9uQ29udGFpbmVyU2Nyb2xsKGV2LmN1cnJlbnRUYXJnZXQgYXMgSFRNTERpdkVsZW1lbnQpO1xuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICBzdXBlci5jb21wb25lbnRXaWxsVW5tb3VudCgpO1xuICAgIGNvbnN0IGVsID0gdGhpcy5jb250YWluZXJSZWYuY3VycmVudDtcbiAgICBpZiAoISFlbCkge1xuICAgICAgZWwucGFyZW50RWxlbWVudC5wYXJlbnRFbGVtZW50LnBhcmVudEVsZW1lbnQub25zY3JvbGwgPSB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHRoaXMubW9kZWwuZGlzcG9zZSgpO1xuICB9XG4gIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIGxldCBjbGFzc05hbWUgPSBcInN2Yy1wYWdlLW5hdmlnYXRvcl9fc2VsZWN0b3JcIjtcbiAgICBpZiAodGhpcy5tb2RlbC5pc1BvcHVwT3BlbmVkKVxuICAgICAgY2xhc3NOYW1lICs9IFwiIHN2Yy1wYWdlLW5hdmlnYXRvcl9fc2VsZWN0b3ItLW9wZW5lZFwiO1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy1wYWdlLW5hdmlnYXRvclwiIHJlZj17dGhpcy5jb250YWluZXJSZWZ9IHN0eWxlPXt7IGRpc3BsYXk6IHRoaXMubW9kZWwudmlzaWJsZSA/IFwiZmxleFwiIDogXCJub25lXCIgfX0+XG4gICAgICAgIHthdHRhY2hLZXkyY2xpY2soPGRpdlxuICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3NOYW1lfVxuICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHRoaXMubW9kZWwudG9nZ2xlUGFnZVNlbGVjdG9yKCl9XG4gICAgICAgICAgdGl0bGU9e3RoaXMubW9kZWwucGFnZVNlbGVjdG9yQ2FwdGlvbn1cbiAgICAgICAgPlxuICAgICAgICAgIDxTdmdJY29uXG4gICAgICAgICAgICBjbGFzc05hbWU9XCJzdmMtcGFnZS1uYXZpZ2F0b3JfX25hdmlnYXRvci1pY29uXCJcbiAgICAgICAgICAgIGljb25OYW1lPXt0aGlzLm1vZGVsLmljb259XG4gICAgICAgICAgICBzaXplPXsyNH1cbiAgICAgICAgICAgIHRpdGxlPXt0aGlzLm1vZGVsLnBhZ2VTZWxlY3RvckNhcHRpb259XG4gICAgICAgICAgPjwvU3ZnSWNvbj5cblxuICAgICAgICAgIDxQb3B1cFxuICAgICAgICAgICAgbW9kZWw9e3RoaXMubW9kZWwucG9wdXBNb2RlbH1cbiAgICAgICAgICAvL2NsYXNzTmFtZT1cInN2Yy1wYWdlLW5hdmlnYXRvcl9fcG9wdXBcIlxuICAgICAgICAgID48L1BvcHVwPlxuICAgICAgICA8L2Rpdj4pfVxuICAgICAgICB7dGhpcy5tb2RlbC5pdGVtcy5tYXAoKGl0ZW0pID0+IChcbiAgICAgICAgICA8U3VydmV5UGFnZU5hdmlnYXRvckl0ZW1cbiAgICAgICAgICAgIGtleT17aXRlbS5pZH1cbiAgICAgICAgICAgIGl0ZW09e2l0ZW19XG4gICAgICAgICAgPjwvU3VydmV5UGFnZU5hdmlnYXRvckl0ZW0+XG4gICAgICAgICkpfVxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxufVxuZXhwb3J0IGNsYXNzIFN1cnZleVBhZ2VOYXZpZ2F0b3JJdGVtIGV4dGVuZHMgQ3JlYXRvck1vZGVsRWxlbWVudDxhbnksIGFueT4ge1xuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCk6IEJhc2Uge1xuICAgIHJldHVybiB0aGlzLnByb3BzLml0ZW0gYXMgQmFzZTtcbiAgfVxuICByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICBjb25zdCBpdGVtID0gdGhpcy5wcm9wcy5pdGVtO1xuICAgIGxldCBjbGFzc05hbWU6IHN0cmluZyA9IFwic3ZjLXBhZ2UtbmF2aWdhdG9yLWl0ZW0tY29udGVudFwiO1xuICAgIGlmICh1bndyYXAoaXRlbS5hY3RpdmUpKSB7XG4gICAgICBjbGFzc05hbWUgKz0gXCIgc3ZjLXBhZ2UtbmF2aWdhdG9yLWl0ZW0tLXNlbGVjdGVkXCI7XG4gICAgfVxuICAgIGlmICh1bndyYXAoaXRlbS5kaXNhYmxlZCkpIHtcbiAgICAgIGNsYXNzTmFtZSArPSBcIiBzdmMtcGFnZS1uYXZpZ2F0b3ItaXRlbS0tZGlzYWJsZWRcIjtcbiAgICB9XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLXBhZ2UtbmF2aWdhdG9yLWl0ZW1cIj5cbiAgICAgICAge2F0dGFjaEtleTJjbGljayg8ZGl2XG4gICAgICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWV9XG4gICAgICAgICAgb25DbGljaz17KGUpID0+IHtcbiAgICAgICAgICAgIGl0ZW0uYWN0aW9uKGl0ZW0pO1xuICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICB9fVxuICAgICAgICA+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtcGFnZS1uYXZpZ2F0b3ItaXRlbV9fZG90XCIgdGl0bGU9e2l0ZW0udGl0bGV9PjwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLXBhZ2UtbmF2aWdhdG9yLWl0ZW1fX2Jhbm5lciBzdmMtaXRlbV9fYmFubmVyXCI+XG4gICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJzdmMtdGV4dCBzdmMtdGV4dC0tc21hbGwgc3ZjLXRleHQtLWJvbGRcIj57aXRlbS50aXRsZX08L3NwYW4+XG4gICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJzdmMtcGFnZS1uYXZpZ2F0b3ItaXRlbV9fZG90XCI+PC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj4pfVxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxufVxuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgUHJvcGVydHlHcmlkVmlld01vZGVsIH0gZnJvbSBcInN1cnZleS1jcmVhdG9yLWNvcmVcIjtcbmltcG9ydCB7IEJhc2UsIFN1cnZleU1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBTdXJ2ZXksIFN1cnZleUVsZW1lbnRCYXNlLCBSZWFjdFF1ZXN0aW9uRmFjdG9yeSwgU3VydmV5UXVlc3Rpb25CdXR0b25Hcm91cCwgUmVhY3RFbGVtZW50RmFjdG9yeSB9IGZyb20gXCJzdXJ2ZXktcmVhY3QtdWlcIjtcblxuaW50ZXJmYWNlIElQcm9wZXJ0eUdyaWRDb21wb25lbnRQcm9wcyB7XG4gIG1vZGVsOiBQcm9wZXJ0eUdyaWRWaWV3TW9kZWw7XG59XG5cbmV4cG9ydCBjbGFzcyBQcm9wZXJ0eUdyaWRDb21wb25lbnQgZXh0ZW5kcyBTdXJ2ZXlFbGVtZW50QmFzZTxJUHJvcGVydHlHcmlkQ29tcG9uZW50UHJvcHMsIGFueT4ge1xuXG4gIGdldCBtb2RlbCgpOiBQcm9wZXJ0eUdyaWRWaWV3TW9kZWwge1xuICAgIHJldHVybiB0aGlzLnByb3BzLm1vZGVsO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldFN0YXRlRWxlbWVudCgpOiBCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5tb2RlbDtcbiAgfVxuXG4gIHB1YmxpYyBjYW5SZW5kZXIoKTogYm9vbGVhbiB7XG4gICAgaWYgKCF0aGlzLm1vZGVsKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIHN1cGVyLmNhblJlbmRlcigpO1xuICB9XG5cbiAgcmVuZGVyRWxlbWVudCgpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPFN1cnZleSBtb2RlbD17dGhpcy5tb2RlbC5zdXJ2ZXl9PjwvU3VydmV5PlxuICAgICk7XG4gIH1cbn1cblxuUmVhY3RRdWVzdGlvbkZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJRdWVzdGlvbihcImJ1dHRvbmdyb3VwXCIsIChwcm9wcykgPT4ge1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdXJ2ZXlRdWVzdGlvbkJ1dHRvbkdyb3VwLCBwcm9wcyk7XG59KTtcblxuZXhwb3J0IGRlZmF1bHQgUHJvcGVydHlHcmlkQ29tcG9uZW50O1xuXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcInN2Yy1wcm9wZXJ0eS1ncmlkXCIsIChwcm9wcykgPT4ge1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChQcm9wZXJ0eUdyaWRDb21wb25lbnQsIHByb3BzKTtcbn0pO1xuIiwiaW1wb3J0IHsgQmFzZSwgUXVlc3Rpb24sIFN1cnZleUVycm9yLCBTdXJ2ZXlNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgSVN1cnZleUNyZWF0b3IsIFJlYWN0RWxlbWVudEZhY3RvcnksIFJlYWN0UXVlc3Rpb25GYWN0b3J5LCBTdXJ2ZXlRdWVzdGlvbiB9IGZyb20gXCJzdXJ2ZXktcmVhY3QtdWlcIjtcbmltcG9ydCB7IENyZWF0b3JCYXNlIH0gZnJvbSBcInN1cnZleS1jcmVhdG9yLWNvcmVcIjtcbmltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcblxuaW50ZXJmYWNlIElRdWVzdGlvbkVkaXRvckNvbnRlbnRDb21wb25lbnRQcm9wcyB7XG4gIGNyZWF0b3I6IENyZWF0b3JCYXNlO1xuICBzdXJ2ZXk6IFN1cnZleU1vZGVsO1xufVxuXG5leHBvcnQgY2xhc3MgUXVlc3Rpb25FZGl0b3JDb250ZW50Q29tcG9uZW50IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50PFxuICBJUXVlc3Rpb25FZGl0b3JDb250ZW50Q29tcG9uZW50UHJvcHMsXG4gIGFueVxuPiBpbXBsZW1lbnRzIElTdXJ2ZXlDcmVhdG9yIHtcbiAgZ2V0IHN1cnZleSgpIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5zdXJ2ZXk7XG4gIH1cbiAgcHVibGljIGNyZWF0ZVF1ZXN0aW9uRWxlbWVudChxdWVzdGlvbjogUXVlc3Rpb24pOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuIFJlYWN0UXVlc3Rpb25GYWN0b3J5Lkluc3RhbmNlLmNyZWF0ZVF1ZXN0aW9uKFxuICAgICAgIXF1ZXN0aW9uLmlzRGVmYXVsdFJlbmRlcmluZyB8fCBxdWVzdGlvbi5pc0RlZmF1bHRSZW5kZXJpbmcoKVxuICAgICAgICA/IHF1ZXN0aW9uLmdldFRlbXBsYXRlKClcbiAgICAgICAgOiBxdWVzdGlvbi5nZXRDb21wb25lbnROYW1lKCksXG4gICAgICB7XG4gICAgICAgIHF1ZXN0aW9uOiBxdWVzdGlvbixcbiAgICAgICAgaXNEaXNwbGF5TW9kZTogcXVlc3Rpb24uaXNJbnB1dFJlYWRPbmx5LFxuICAgICAgICBjcmVhdG9yOiB0aGlzLFxuICAgICAgfVxuICAgICk7XG4gIH1cbiAgcHVibGljIHF1ZXN0aW9uVGl0bGVMb2NhdGlvbigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnN1cnZleS5xdWVzdGlvblRpdGxlTG9jYXRpb247XG4gIH1cbiAgcHVibGljIHF1ZXN0aW9uRXJyb3JMb2NhdGlvbigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnN1cnZleS5xdWVzdGlvbkVycm9yTG9jYXRpb247XG4gIH1cbiAgcmVuZGVyRXJyb3Ioa2V5OiBzdHJpbmcsIGVycm9yOiBTdXJ2ZXlFcnJvciwgY3NzQ2xhc3NlczogYW55KTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcmVuZGVyKCk6IEpTWC5FbGVtZW50IHtcbiAgICBjb25zdCBxdWVzdGlvbiA9IHRoaXMuc3VydmV5LmdldEFsbFF1ZXN0aW9ucygpWzBdO1xuICAgIHJldHVybiAoXG4gICAgICA8PlxuICAgICAgICA8U3VydmV5UXVlc3Rpb24gY3JlYXRvcj17dGhpc30gZWxlbWVudD17cXVlc3Rpb259PjwvU3VydmV5UXVlc3Rpb24+XG4gICAgICA8Lz5cbiAgICApO1xuICB9XG59XG5cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFxuICBcInN2Yy1xdWVzdGlvbi1lZGl0b3ItY29udGVudFwiLFxuICAocHJvcHM6IElRdWVzdGlvbkVkaXRvckNvbnRlbnRDb21wb25lbnRQcm9wcykgPT4ge1xuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFF1ZXN0aW9uRWRpdG9yQ29udGVudENvbXBvbmVudCwgcHJvcHMpO1xuICB9XG4pO1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgUmVhY3RRdWVzdGlvbkZhY3RvcnksIFN1cnZleVBhZ2UsIElTdXJ2ZXlDcmVhdG9yLCBTdXJ2ZXlRdWVzdGlvbkVsZW1lbnRCYXNlIH0gZnJvbSBcInN1cnZleS1yZWFjdC11aVwiO1xuaW1wb3J0IHsgUXVlc3Rpb25FbWJlZGRlZFN1cnZleU1vZGVsIH0gZnJvbSBcInN1cnZleS1jcmVhdG9yLWNvcmVcIjtcblxuZXhwb3J0IGNsYXNzIFN1cnZleUVsZW1lbnRFbWJlZGRlZFN1cnZleSBleHRlbmRzIFN1cnZleVF1ZXN0aW9uRWxlbWVudEJhc2Uge1xuICBwcm90ZWN0ZWQgZ2V0IGVtYmVkZGVkU3VydmV5KCk6IFF1ZXN0aW9uRW1iZWRkZWRTdXJ2ZXlNb2RlbCB7XG4gICAgcmV0dXJuICh0aGlzLnByb3BzLmVsZW1lbnQgfHwgdGhpcy5wcm9wcy5xdWVzdGlvbikgYXMgUXVlc3Rpb25FbWJlZGRlZFN1cnZleU1vZGVsO1xuICB9XG4gIHByb3RlY3RlZCBnZXQgY3JlYXRvcigpOiBJU3VydmV5Q3JlYXRvciB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuY3JlYXRvcjtcbiAgfVxuICBwdWJsaWMgcmVuZGVyKCk6IEpTWC5FbGVtZW50IHtcbiAgICBpZiAoIXRoaXMuZW1iZWRkZWRTdXJ2ZXkpIHJldHVybiBudWxsO1xuICAgIGNvbnN0IHN1cnZleSA9IHRoaXMuZW1iZWRkZWRTdXJ2ZXkuZW1iZWRkZWRTdXJ2ZXk7XG4gICAgaWYgKCFzdXJ2ZXkgfHwgIXN1cnZleS5jdXJyZW50UGFnZSkgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIDxTdXJ2ZXlQYWdlXG4gICAgICBzdXJ2ZXk9e3N1cnZleX1cbiAgICAgIHBhZ2U9e3N1cnZleS5jdXJyZW50UGFnZX1cbiAgICAgIGNzcz17c3VydmV5LmNzc31cbiAgICAgIGNyZWF0b3I9e3RoaXMuY3JlYXRvcn1cbiAgICAvPjtcblxuICB9XG59XG5cblJlYWN0UXVlc3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyUXVlc3Rpb24oXCJlbWJlZGRlZHN1cnZleVwiLCAocHJvcHMpID0+IHtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3VydmV5RWxlbWVudEVtYmVkZGVkU3VydmV5LCBwcm9wcyk7XG59KTtcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7XG4gIFJlYWN0UXVlc3Rpb25GYWN0b3J5LFxuICBTdXJ2ZXlRdWVzdGlvbkVsZW1lbnRCYXNlXG59IGZyb20gXCJzdXJ2ZXktcmVhY3QtdWlcIjtcbmltcG9ydCB7IGVkaXRvckxvY2FsaXphdGlvbiwgUXVlc3Rpb25MaW5rVmFsdWVNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY3JlYXRvci1jb3JlXCI7XG5pbXBvcnQgeyBBY3Rpb25CdXR0b24gfSBmcm9tIFwiLi9BY3Rpb25CdXR0b25cIjtcblxuZXhwb3J0IGNsYXNzIFN1cnZleVF1ZXN0aW9uTGlua1ZhbHVlIGV4dGVuZHMgU3VydmV5UXVlc3Rpb25FbGVtZW50QmFzZSB7XG4gIHByb3RlY3RlZCBnZXQgcXVlc3Rpb24oKTogUXVlc3Rpb25MaW5rVmFsdWVNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMucXVlc3Rpb25CYXNlIGFzIFF1ZXN0aW9uTGlua1ZhbHVlTW9kZWw7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckNsZWFyKCk6IEpTWC5FbGVtZW50IHtcbiAgICBjb25zdCBzaG93Q2xlYXIgPSAodGhpcy5xdWVzdGlvbkJhc2UgYXMgYW55KS5zaG93Q2xlYXI7XG4gICAgaWYgKCF0aGlzLnF1ZXN0aW9uQmFzZS5pc1JlYWRPbmx5ICYmIHNob3dDbGVhcikge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPEFjdGlvbkJ1dHRvblxuICAgICAgICAgIGNsYXNzZXM9e3RoaXMucXVlc3Rpb24ubGlua0NsZWFyQnV0dG9uQ3NzQ2xhc3Nlc31cbiAgICAgICAgICBjbGljaz17KCkgPT4gdGhpcy5xdWVzdGlvbi5kb0NsZWFyQ2xpY2soKX1cbiAgICAgICAgICBzZWxlY3RlZD17dGhpcy5xdWVzdGlvbi5pc1NlbGVjdGVkfVxuICAgICAgICAgIHRleHQ9e2VkaXRvckxvY2FsaXphdGlvbi5nZXRTdHJpbmcoXCJwZS5jbGVhclwiKX1cbiAgICAgICAgPjwvQWN0aW9uQnV0dG9uPlxuICAgICAgKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiAoXG4gICAgICA8PlxuICAgICAgICA8QWN0aW9uQnV0dG9uXG4gICAgICAgICAgY2xhc3Nlcz17dGhpcy5xdWVzdGlvbi5saW5rU2V0QnV0dG9uQ3NzQ2xhc3Nlc31cbiAgICAgICAgICBjbGljaz17KCkgPT4gdGhpcy5xdWVzdGlvbi5kb0xpbmtDbGljaygpfVxuICAgICAgICAgIHNlbGVjdGVkPXt0aGlzLnF1ZXN0aW9uLmlzU2VsZWN0ZWR9XG4gICAgICAgICAgZGlzYWJsZWQ9e3RoaXMucXVlc3Rpb24uaXNSZWFkT25seX1cbiAgICAgICAgICB0ZXh0PXt0aGlzLnF1ZXN0aW9uLmxpbmtWYWx1ZVRleHR9XG4gICAgICAgICAgdGl0bGU9e3RoaXMucXVlc3Rpb24udG9vbHRpcH1cbiAgICAgICAgPjwvQWN0aW9uQnV0dG9uPlxuICAgICAgICB7dGhpcy5yZW5kZXJDbGVhcigpfVxuICAgICAgPC8+XG4gICAgKTtcbiAgfVxufVxuXG5SZWFjdFF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlclF1ZXN0aW9uKFwibGlua3ZhbHVlXCIsIChwcm9wcykgPT4ge1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdXJ2ZXlRdWVzdGlvbkxpbmtWYWx1ZSwgcHJvcHMpO1xufSk7XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBCYXNlLCBTdXJ2ZXlNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgU3VydmV5UmVzdWx0c0l0ZW1Nb2RlbCwgU3VydmV5UmVzdWx0c01vZGVsIH0gZnJvbSBcInN1cnZleS1jcmVhdG9yLWNvcmVcIjtcbmltcG9ydCB7IGF0dGFjaEtleTJjbGljaywgU3ZnSWNvbiB9IGZyb20gXCJzdXJ2ZXktcmVhY3QtdWlcIjtcbmltcG9ydCB7IEFjdGlvbkJ1dHRvbiB9IGZyb20gXCIuL0FjdGlvbkJ1dHRvblwiO1xuaW1wb3J0IHsgQ3JlYXRvck1vZGVsRWxlbWVudCB9IGZyb20gXCIuL01vZGVsRWxlbWVudFwiO1xuXG5pbnRlcmZhY2UgSVN1cnZleVJlc3VsdHNQcm9wcyB7XG4gIHN1cnZleTogU3VydmV5TW9kZWw7XG59XG5leHBvcnQgY2xhc3MgU3VydmV5UmVzdWx0cyBleHRlbmRzIENyZWF0b3JNb2RlbEVsZW1lbnQ8XG4gIElTdXJ2ZXlSZXN1bHRzUHJvcHMsXG4gIGFueVxuPiB7XG4gIG1vZGVsOiBTdXJ2ZXlSZXN1bHRzTW9kZWw7XG4gIHByb3RlY3RlZCBjcmVhdGVNb2RlbCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5wcm9wcy5zdXJ2ZXkpIHtcbiAgICAgIHRoaXMubW9kZWwgPSBuZXcgU3VydmV5UmVzdWx0c01vZGVsKHRoaXMucHJvcHMuc3VydmV5KTtcbiAgICB9XG4gIH1cbiAgcHJvdGVjdGVkIGdldFVwZGF0ZWRNb2RlbFByb3BzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gW1wic3VydmV5XCJdO1xuICB9XG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnQoKTogQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMubW9kZWw7XG4gIH1cbiAgcmVuZGVyKCk6IEpTWC5FbGVtZW50IHtcbiAgICBpZiAoIXRoaXMubW9kZWwpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmQtdGVzdC1yZXN1bHRzXCI+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZkLXRlc3QtcmVzdWx0c19faGVhZGVyXCI+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmQtdGVzdC1yZXN1bHRzX19oZWFkZXItdGV4dFwiPnt0aGlzLm1vZGVsLnN1cnZleVJlc3VsdHNUZXh0fTwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZkLXRlc3QtcmVzdWx0c19faGVhZGVyLXR5cGVzXCI+XG4gICAgICAgICAgICA8QWN0aW9uQnV0dG9uXG4gICAgICAgICAgICAgIGNsaWNrPXsoKSA9PiB0aGlzLm1vZGVsLnNlbGVjdFRhYmxlQ2xpY2soKX1cbiAgICAgICAgICAgICAgdGV4dD17dGhpcy5tb2RlbC5nZXRMb2NTdHJpbmcoXCJlZC5zdXJ2ZXlSZXN1bHRzVGFibGVcIil9XG4gICAgICAgICAgICAgIHNlbGVjdGVkPXt0aGlzLm1vZGVsLmlzVGFibGVTZWxlY3RlZH1cbiAgICAgICAgICAgICAgZGlzYWJsZWQ9e2ZhbHNlfVxuICAgICAgICAgICAgPjwvQWN0aW9uQnV0dG9uPlxuICAgICAgICAgICAgPEFjdGlvbkJ1dHRvblxuICAgICAgICAgICAgICBjbGljaz17KCkgPT4gdGhpcy5tb2RlbC5zZWxlY3RKc29uQ2xpY2soKX1cbiAgICAgICAgICAgICAgdGV4dD17dGhpcy5tb2RlbC5nZXRMb2NTdHJpbmcoXCJlZC5zdXJ2ZXlSZXN1bHRzSnNvblwiKX1cbiAgICAgICAgICAgICAgc2VsZWN0ZWQ9e3RoaXMubW9kZWwuaXNKc29uU2VsZWN0ZWR9XG4gICAgICAgICAgICAgIGRpc2FibGVkPXtmYWxzZX1cbiAgICAgICAgICAgID48L0FjdGlvbkJ1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIHt0aGlzLnJlbmRlclJlc3VsdEFzVGV4dCgpfVxuICAgICAgICB7dGhpcy5yZW5kZXJSZXN1bHRBc1RhYmxlKCl9XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG4gIHJlbmRlclJlc3VsdEFzVGV4dCgpOiBKU1guRWxlbWVudCB7XG4gICAgaWYgKHRoaXMubW9kZWwucmVzdWx0Vmlld1R5cGUgIT09IFwidGV4dFwiKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZkLXRlc3QtcmVzdWx0c19fdGV4dCBzdmQtbGlnaHQtYmctY29sb3JcIj5cbiAgICAgICAgPGRpdj57dGhpcy5tb2RlbC5yZXN1bHRUZXh0fTwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuICByZW5kZXJSZXN1bHRBc1RhYmxlKCk6IEpTWC5FbGVtZW50IHtcbiAgICBpZiAodGhpcy5tb2RlbC5yZXN1bHRWaWV3VHlwZSAhPT0gXCJ0YWJsZVwiKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZkLXRlc3QtcmVzdWx0c19fdGFibGUgc3ZkLWxpZ2h0LWJnLWNvbG9yXCI+XG4gICAgICAgIDx0YWJsZT5cbiAgICAgICAgICA8dGhlYWQ+XG4gICAgICAgICAgICA8dHIgY2xhc3NOYW1lPVwic3ZkLWxpZ2h0LWJhY2tncm91bmQtY29sb3JcIj5cbiAgICAgICAgICAgICAgPHRoIGtleT17MX0gY2xhc3NOYW1lPVwic3ZkLWRhcmstYm9yZGVyLWNvbG9yXCI+XG4gICAgICAgICAgICAgICAge3RoaXMubW9kZWwucmVzdWx0c1RpdGxlfVxuICAgICAgICAgICAgICA8L3RoPlxuICAgICAgICAgICAgICA8dGgga2V5PXsyfSBjbGFzc05hbWU9XCJzdmQtZGFyay1ib3JkZXItY29sb3JcIj5cbiAgICAgICAgICAgICAgICB7dGhpcy5tb2RlbC5yZXN1bHRzRGlzcGxheVZhbHVlfVxuICAgICAgICAgICAgICA8L3RoPlxuICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICA8L3RoZWFkPlxuICAgICAgICAgIDx0Ym9keT57U3VydmV5UmVzdWx0cy5yZW5kZXJSb3dzKHRoaXMubW9kZWwucmVzdWx0RGF0YSl9PC90Ym9keT5cbiAgICAgICAgPC90YWJsZT5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbiAgc3RhdGljIHJlbmRlclJvd3MoZGF0YTogQXJyYXk8YW55Pik6IEFycmF5PEpTWC5FbGVtZW50PiB7XG4gICAgY29uc3Qgcm93cyA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZGF0YS5sZW5ndGg7IGkrKykge1xuICAgICAgcm93cy5wdXNoKDxTdXJ2ZXlSZXN1bHRzQnlSb3cga2V5PXtpICsgMX0gcm93PXtkYXRhW2ldfSAvPik7XG4gICAgfVxuICAgIHJldHVybiByb3dzO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlSZXN1bHRzQnlSb3cgZXh0ZW5kcyBDcmVhdG9yTW9kZWxFbGVtZW50PGFueSwgYW55PiB7XG4gIHByaXZhdGUgZ2V0IHJvdygpOiBTdXJ2ZXlSZXN1bHRzSXRlbU1vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5yb3c7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCk6IEJhc2Uge1xuICAgIHJldHVybiB0aGlzLnJvdztcbiAgfVxuXG4gIHJlbmRlcigpOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuIChcbiAgICAgIDw+XG4gICAgICAgIHthdHRhY2hLZXkyY2xpY2soPHRyIG9uQ2xpY2s9eygpID0+IHRoaXMucm93LnRvZ2dsZSgpfT5cbiAgICAgICAgICA8dGQga2V5PXsxfVxuICAgICAgICAgICAgc3R5bGU9e3sgcGFkZGluZ0xlZnQ6IHRoaXMucm93LnRleHRNYXJnaW4gfX1cbiAgICAgICAgICAgIGNsYXNzTmFtZT1cInN2ZC1kYXJrLWJvcmRlci1jb2xvclwiPlxuXG4gICAgICAgICAgICB7dGhpcy5yb3cuaXNOb2RlID8gKFxuICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgIHN0eWxlPXt7IGxlZnQ6IHRoaXMucm93Lm1hcmtlck1hcmdpbiB9fVxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17XCJzdmQtdGVzdC1yZXN1bHRzX19tYXJrZXIgXCIgKyAodGhpcy5yb3cuY29sbGFwc2VkID8gXCJcIiA6IFwic3ZkLXRlc3QtcmVzdWx0c19fbWFya2VyLS1leHBhbmRlZFwiKX0+XG4gICAgICAgICAgICAgICAgPFN2Z0ljb25cbiAgICAgICAgICAgICAgICAgIGljb25OYW1lPXtcImljb24tZXhwYW5kXzE2eDE2XCJ9XG4gICAgICAgICAgICAgICAgICBzaXplPXsxNn1cbiAgICAgICAgICAgICAgICA+PC9TdmdJY29uPlxuICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICApIDogbnVsbH1cblxuICAgICAgICAgICAgPHNwYW4+e3RoaXMucm93LnRpdGxlfTwvc3Bhbj5cbiAgICAgICAgICA8L3RkPlxuICAgICAgICAgIDx0ZCBrZXk9ezJ9IGNsYXNzTmFtZT17dGhpcy5yb3cuaXNOb2RlID8gXCJzdmQtdGVzdC1yZXN1bHRzX19ub2RlLXZhbHVlXCIgOiBcInN2ZC1kYXJrLWJvcmRlci1jb2xvclwifT5cbiAgICAgICAgICAgIHt0aGlzLnJvdy5nZXRTdHJpbmcodGhpcy5yb3cuZGlzcGxheVZhbHVlKX1cbiAgICAgICAgICA8L3RkPlxuICAgICAgICA8L3RyPil9XG4gICAgICAgIHt0aGlzLnJvdy5pc05vZGUgJiYgIXRoaXMucm93LmNvbGxhcHNlZCA/IFN1cnZleVJlc3VsdHMucmVuZGVyUm93cyh0aGlzLnJvdy5kYXRhKSA6IG51bGx9XG4gICAgICA8Lz5cbiAgICApO1xuICB9XG59XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBTaWRlYmFyVGFiTW9kZWwsIFNpZGViYXJNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY3JlYXRvci1jb3JlXCI7XG5pbXBvcnQgeyBCYXNlIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBTdXJ2ZXlFbGVtZW50QmFzZSwgU3VydmV5QWN0aW9uQmFyLCBSZWFjdFF1ZXN0aW9uRmFjdG9yeSwgUmVhY3RFbGVtZW50RmFjdG9yeSB9IGZyb20gXCJzdXJ2ZXktcmVhY3QtdWlcIjtcblxuaW50ZXJmYWNlIElTaWRlYmFyQ29tcG9uZW50UHJvcHMge1xuICBtb2RlbDogU2lkZWJhck1vZGVsO1xufVxuXG5leHBvcnQgY2xhc3MgU2lkZWJhckNvbXBvbmVudCBleHRlbmRzIFN1cnZleUVsZW1lbnRCYXNlPElTaWRlYmFyQ29tcG9uZW50UHJvcHMsIGFueT4ge1xuICBwcml2YXRlIGNvbnRhaW5lclJlZjogUmVhY3QuUmVmT2JqZWN0PEhUTUxEaXZFbGVtZW50PjtcblxuICBnZXQgbW9kZWwoKTogU2lkZWJhck1vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5tb2RlbDtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHByb3BzOiBJU2lkZWJhckNvbXBvbmVudFByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMuY29udGFpbmVyUmVmID0gUmVhY3QuY3JlYXRlUmVmKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCk6IEJhc2Uge1xuICAgIHJldHVybiB0aGlzLm1vZGVsO1xuICB9XG5cbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgc3VwZXIuY29tcG9uZW50RGlkTW91bnQoKTtcbiAgICB0aGlzLm1vZGVsLmluaXRSZXNpemVNYW5hZ2VyKHRoaXMuY29udGFpbmVyUmVmLmN1cnJlbnQpO1xuICB9XG4gIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgIHN1cGVyLmNvbXBvbmVudFdpbGxVbm1vdW50KCk7XG4gICAgdGhpcy5tb2RlbC5yZXNldFJlc2l6ZU1hbmFnZXIoKTtcbiAgfVxuICBwdWJsaWMgY2FuUmVuZGVyKCk6IGJvb2xlYW4ge1xuICAgIGlmICghdGhpcy5tb2RlbCkgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiBzdXBlci5jYW5SZW5kZXIoKTtcbiAgfVxuICByZW5kZXJFbGVtZW50KCkge1xuICAgIGNvbnN0IHN0eWxlID0geyBkaXNwbGF5OiAhdGhpcy5tb2RlbC52aXNpYmxlID8gXCJub25lXCIgOiBcIlwiIH07XG4gICAgY29uc3QgY2xhc3NOYW1lID0gXCJzdmMtc2lkZS1iYXJcIiArICh0aGlzLm1vZGVsLmZseW91dFBhbmVsTW9kZSA/IFwiIHN2Yy1mbHlvdXQtc2lkZS1iYXJcIiA6IFwiXCIpO1xuICAgIGNvbnN0IGl0ZW1zID0gdGhpcy5tb2RlbC50YWJzLm1hcCgoaXRlbSkgPT4gPFNpZGViYXJUYWIgaXRlbT17aXRlbX0ga2V5PXtpdGVtLmlkfSAvPik7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtjbGFzc05hbWV9IHN0eWxlPXt7IGRpc3BsYXk6ICF0aGlzLm1vZGVsLmhhc1Zpc2libGVUYWJzID8gXCJub25lXCIgOiBcIlwiIH19PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy1zaWRlLWJhcl9fc2hhZG93XCIgb25DbGljaz17KCkgPT4gdGhpcy5tb2RlbC5jb2xsYXBzZVNpZGViYXIoKX0+PC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLWZsZXgtY29sdW1uIHN2Yy1zaWRlLWJhcl9fd3JhcHBlclwiPlxuICAgICAgICAgIDxkaXYgcmVmPXt0aGlzLmNvbnRhaW5lclJlZn0gc3R5bGU9e3N0eWxlfSBjbGFzc05hbWU9XCJzdmMtc2lkZS1iYXJfX2NvbnRhaW5lclwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtc2lkZS1iYXJfX2NvbnRhaW5lci1oZWFkZXJcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtc2lkZS1iYXJfX2NvbnRhaW5lci1hY3Rpb25zXCI+XG4gICAgICAgICAgICAgICAgPFN1cnZleUFjdGlvbkJhciBtb2RlbD17dGhpcy5tb2RlbC50b29sYmFyfT48L1N1cnZleUFjdGlvbkJhcj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIHsoISF0aGlzLm1vZGVsLmhlYWRlclRleHQgP1xuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLXNpZGUtYmFyX19jb250YWluZXItdGl0bGVcIj5cbiAgICAgICAgICAgICAgICAgIHt0aGlzLm1vZGVsLmhlYWRlclRleHR9XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgOiBudWxsKX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtc2lkZS1iYXJfX2NvbnRhaW5lci1jb250ZW50XCI+XG4gICAgICAgICAgICAgIHtpdGVtc31cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtc2lkZS1iYXJfX2NvbnRhaW5lci1jbG9zZVwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInNkLWJ0biBzZC1idG4tLWFjdGlvbiBzdmMtc2lkZS1iYXJfX2NvbnRhaW5lci1jbG9zZS1idXR0b25cIiBvbkNsaWNrPXsoKSA9PiB0aGlzLm1vZGVsLmNvbGxhcHNlU2lkZWJhcigpfT4ge3RoaXMubW9kZWwuY2xvc2VUZXh0fSA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbn1cblxuY2xhc3MgU2lkZWJhclRhYiBleHRlbmRzIFN1cnZleUVsZW1lbnRCYXNlPGFueSwgYW55PiB7XG4gIHByaXZhdGUgZ2V0IGl0ZW0oKTogU2lkZWJhclRhYk1vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5pdGVtO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldFN0YXRlRWxlbWVudCgpOiBCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5pdGVtO1xuICB9XG5cbiAgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgaWYgKCF0aGlzLml0ZW0udmlzaWJsZSkgcmV0dXJuIG51bGw7XG5cbiAgICBjb25zdCBjb21wb25lbnQgPSBSZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLmNyZWF0ZUVsZW1lbnQodGhpcy5pdGVtLmNvbXBvbmVudE5hbWUsIHsgbW9kZWw6IHRoaXMuaXRlbS5tb2RlbCB9KTtcblxuICAgIHJldHVybiBjb21wb25lbnQ7XG4gIH1cbn1cblxuUmVhY3RRdWVzdGlvbkZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJRdWVzdGlvbihcInN2Yy1zaWRlLWJhci10YWJcIiwgKHByb3BzKSA9PiB7XG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFNpZGViYXJUYWIsIHByb3BzKTtcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBTaWRlYmFyQ29tcG9uZW50O1xuXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcInN2Yy1zaWRlLWJhclwiLCAocHJvcHMpID0+IHtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU2lkZWJhckNvbXBvbmVudCwgcHJvcHMpO1xufSk7IiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgTG9jYWxpemFibGVTdHJpbmcsIFNlcmlhbGl6ZXIsIEpzb25PYmplY3RQcm9wZXJ0eSwgQmFzZSB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgUmVhY3RFbGVtZW50RmFjdG9yeSwgU3VydmV5RWxlbWVudEJhc2UsIFN2Z0ljb24gfSBmcm9tIFwic3VydmV5LXJlYWN0LXVpXCI7XG5pbXBvcnQgeyBDcmVhdG9yQmFzZSwgU3RyaW5nRWRpdG9yVmlld01vZGVsQmFzZSwgZWRpdGFibGVTdHJpbmdSZW5kZXJlck5hbWUgfSBmcm9tIFwic3VydmV5LWNyZWF0b3ItY29yZVwiO1xuaW1wb3J0IHsgQ3JlYXRvck1vZGVsRWxlbWVudCB9IGZyb20gXCIuL01vZGVsRWxlbWVudFwiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5TG9jU3RyaW5nRWRpdG9yIGV4dGVuZHMgQ3JlYXRvck1vZGVsRWxlbWVudDxhbnksIGFueT4ge1xuICBwcml2YXRlIGJhc2VNb2RlbDogU3RyaW5nRWRpdG9yVmlld01vZGVsQmFzZTtcbiAgcHJpdmF0ZSBzdlN0cmluZ0VkaXRvclJlZjogUmVhY3QuUmVmT2JqZWN0PEhUTUxEaXZFbGVtZW50PjtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLnN0YXRlID0geyBjaGFuZ2VkOiAwIH07XG4gICAgdGhpcy5zdlN0cmluZ0VkaXRvclJlZiA9IFJlYWN0LmNyZWF0ZVJlZigpO1xuICAgIHRoaXMuYmFzZU1vZGVsLmdldEVkaXRvckVsZW1lbnQgPSAoKSA9PiB0aGlzLnN2U3RyaW5nRWRpdG9yUmVmLmN1cnJlbnQ7XG4gIH1cbiAgcHJvdGVjdGVkIGNyZWF0ZU1vZGVsKCk6IHZvaWQge1xuICAgIHRoaXMuYmFzZU1vZGVsID0gbmV3IFN0cmluZ0VkaXRvclZpZXdNb2RlbEJhc2UodGhpcy5sb2NTdHJpbmcsIHRoaXMuY3JlYXRvcik7XG4gICAgdGhpcy5iYXNlTW9kZWwuYmx1ckVkaXRvciA9ICgpID0+IHtcbiAgICAgIHRoaXMuc3ZTdHJpbmdFZGl0b3JSZWYuY3VycmVudC5ibHVyKCk7XG4gICAgICB0aGlzLnN2U3RyaW5nRWRpdG9yUmVmLmN1cnJlbnQuc3BlbGxjaGVjayA9IGZhbHNlO1xuICAgIH07XG4gIH1cbiAgcHJvdGVjdGVkIGdldFVwZGF0ZWRNb2RlbFByb3BzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gW1wiY3JlYXRvclwiLCBcImxvY1N0cmluZ1wiXTtcbiAgfVxuICBwcml2YXRlIGdldCBsb2NTdHJpbmcoKTogTG9jYWxpemFibGVTdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BzLmxvY1N0ci5sb2NTdHI7XG4gIH1cbiAgcHJpdmF0ZSBnZXQgY3JlYXRvcigpOiBDcmVhdG9yQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMubG9jU3RyLmNyZWF0b3I7XG4gIH1cbiAgcHJpdmF0ZSBnZXQgc3R5bGUoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5zdHlsZTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnQoKTogQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMuYmFzZU1vZGVsO1xuICB9XG5cbiAgcHVibGljIGdldCBlcnJvclRleHQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5iYXNlTW9kZWwuZXJyb3JUZXh0O1xuICB9XG4gIHByaXZhdGUgb25DaGFuZ2VkSGFuZGxlciA9IChzZW5kZXI6IGFueSwgb3B0aW9uczogYW55KSA9PiB7XG4gICAgdGhpcy5zZXRTdGF0ZSh7IGNoYW5nZWQ6ICEhdGhpcy5zdGF0ZSAmJiB0aGlzLnN0YXRlLmNoYW5nZWQgPyB0aGlzLnN0YXRlLmNoYW5nZWQgKyAxIDogMSB9KTtcbiAgfVxuICBwdWJsaWMgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgc3VwZXIuY29tcG9uZW50RGlkTW91bnQoKTtcbiAgICBpZiAoIXRoaXMubG9jU3RyaW5nKSByZXR1cm47XG4gICAgY29uc3Qgc2VsZjogU3VydmV5TG9jU3RyaW5nRWRpdG9yID0gdGhpcztcbiAgICB0aGlzLmJhc2VNb2RlbC5hZnRlclJlbmRlcigpO1xuICAgIHRoaXMubG9jU3RyaW5nLm9uU3RyaW5nQ2hhbmdlZC5hZGQodGhpcy5vbkNoYW5nZWRIYW5kbGVyKTtcbiAgICBpZiAodGhpcy5sb2NTdHJpbmdbXCJfX2lzRWRpdGluZ1wiXSkge1xuICAgICAgdGhpcy5zdlN0cmluZ0VkaXRvclJlZi5jdXJyZW50LmZvY3VzKCk7XG4gICAgICAvLyBkb2N1bWVudC5leGVjQ29tbWFuZCgnc2VsZWN0QWxsJywgZmFsc2UsIG51bGwpO1xuICAgIH1cbiAgfVxuICBwdWJsaWMgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgc3VwZXIuY29tcG9uZW50V2lsbFVubW91bnQoKTtcbiAgICBpZiAoIXRoaXMubG9jU3RyaW5nKSByZXR1cm47XG4gICAgdGhpcy5sb2NTdHJpbmcub25TdHJpbmdDaGFuZ2VkLnJlbW92ZSh0aGlzLm9uQ2hhbmdlZEhhbmRsZXIpO1xuICB9XG4gIHByaXZhdGUgZ2V0IHBsYWNlaG9sZGVyKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuYmFzZU1vZGVsLnBsYWNlaG9sZGVyO1xuICB9XG4gIHByaXZhdGUgZ2V0IGNvbnRlbnRFZGl0YWJsZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5iYXNlTW9kZWwuY29udGVudEVkaXRhYmxlO1xuICB9XG4gIHByaXZhdGUgb25CbHVyID0gKGV2ZW50OiBhbnkpID0+IHtcbiAgICB0aGlzLnN2U3RyaW5nRWRpdG9yUmVmLmN1cnJlbnQuc3BlbGxjaGVjayA9IGZhbHNlO1xuICAgIHRoaXMubG9jU3RyaW5nW1wiX19pc0VkaXRpbmdcIl0gPSBmYWxzZTtcbiAgICB0aGlzLmp1c3RGb2N1c2VkID0gZmFsc2U7XG4gICAgdGhpcy5iYXNlTW9kZWwub25CbHVyKGV2ZW50Lm5hdGl2ZUV2ZW50KTtcbiAgICByZXR1cm4gdGhpcy5iYXNlTW9kZWwuZXJyb3JUZXh0O1xuICB9O1xuICBwcml2YXRlIG9uQ29tcG9zaXRpb25TdGFydCA9IChldmVudDogYW55KSA9PiB7XG4gICAgdGhpcy5iYXNlTW9kZWwub25Db21wb3NpdGlvblN0YXJ0KGV2ZW50Lm5hdGl2ZUV2ZW50KTtcbiAgfTtcbiAgcHJpdmF0ZSBvbkNvbXBvc2l0aW9uRW5kID0gKGV2ZW50OiBhbnkpID0+IHtcbiAgICB0aGlzLmJhc2VNb2RlbC5vbkNvbXBvc2l0aW9uRW5kKGV2ZW50Lm5hdGl2ZUV2ZW50KTtcbiAgfTtcbiAgcHJpdmF0ZSBvbklucHV0ID0gKGV2ZW50OiBhbnkpID0+IHtcbiAgICB0aGlzLmJhc2VNb2RlbC5vbklucHV0KGV2ZW50Lm5hdGl2ZUV2ZW50KTtcbiAgfTtcbiAgcHJpdmF0ZSBqdXN0Rm9jdXNlZCA9IGZhbHNlO1xuICBwcml2YXRlIG9uRm9jdXMgPSAoZXZlbnQ6IGFueSkgPT4ge1xuICAgIHRoaXMuYmFzZU1vZGVsLm9uRm9jdXMoZXZlbnQubmF0aXZlRXZlbnQpO1xuICAgIHRoaXMuanVzdEZvY3VzZWQgPSB0cnVlO1xuICB9O1xuICBwcml2YXRlIG9uS2V5RG93biA9IChldmVudDogUmVhY3QuS2V5Ym9hcmRFdmVudDxIVE1MU3BhbkVsZW1lbnQ+KSA9PiB7XG4gICAgcmV0dXJuIHRoaXMuYmFzZU1vZGVsLm9uS2V5RG93bihldmVudC5uYXRpdmVFdmVudCk7XG4gIH07XG4gIHByaXZhdGUgb25LZXlVcCA9IChldmVudDogUmVhY3QuS2V5Ym9hcmRFdmVudDxIVE1MU3BhbkVsZW1lbnQ+KSA9PiB7XG4gICAgcmV0dXJuIHRoaXMuYmFzZU1vZGVsLm9uS2V5VXAoZXZlbnQubmF0aXZlRXZlbnQpO1xuICB9O1xuICBwcml2YXRlIG9uTW91c2VVcCA9IChldmVudDogUmVhY3QuTW91c2VFdmVudDxIVE1MU3BhbkVsZW1lbnQ+KTogYm9vbGVhbiA9PiB7XG4gICAgcmV0dXJuIHRoaXMuYmFzZU1vZGVsLm9uTW91c2VVcChldmVudC5uYXRpdmVFdmVudCk7XG4gIH07XG4gIHByaXZhdGUgZG9uZSA9IChldmVudDogYW55KSA9PiB7XG4gICAgdGhpcy5iYXNlTW9kZWwuZG9uZShldmVudCk7XG4gICAgdGhpcy5sb2NTdHJpbmdbXCJfX2lzRWRpdGluZ1wiXSA9IGZhbHNlO1xuICB9O1xuICBwcml2YXRlIGVkaXQgPSAoZXZlbnQ6IGFueSkgPT4ge1xuICAgIHRoaXMuc3ZTdHJpbmdFZGl0b3JSZWYuY3VycmVudC5mb2N1cygpO1xuICAgIC8vIGRvY3VtZW50LmV4ZWNDb21tYW5kKCdzZWxlY3RBbGwnLCBmYWxzZSwgbnVsbCk7XG4gICAgdGhpcy5sb2NTdHJpbmdbXCJfX2lzRWRpdGluZ1wiXSA9IHRydWU7XG4gICAgdGhpcy5iYXNlTW9kZWwub25DbGljayhldmVudCk7XG4gIH07XG4gIHByaXZhdGUgZ2V0IGNsYXNzTmFtZSgpIHtcbiAgICByZXR1cm4gdGhpcy5iYXNlTW9kZWwuY2xhc3NOYW1lKHRoaXMubG9jU3RyaW5nLnJlbmRlcmVkSHRtbCk7XG4gIH1cbiAgcHVibGljIHJlbmRlcigpOiBKU1guRWxlbWVudCB7XG4gICAgaWYgKCF0aGlzLmxvY1N0cmluZykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgdGhpcy5iYXNlTW9kZWwuc2V0TG9jU3RyaW5nKHRoaXMubG9jU3RyaW5nKTtcbiAgICB9XG4gICAgbGV0IGNvbnRyb2wgPSBudWxsO1xuICAgIGlmICh0aGlzLmxvY1N0cmluZy5oYXNIdG1sKSB7XG4gICAgICBjb25zdCBodG1sVmFsdWUgPSB7IF9faHRtbDogdGhpcy5iYXNlTW9kZWwuZm9jdXNlZCAmJiB0aGlzLmJhc2VNb2RlbC5lZGl0QXNUZXh0ICYmIHRoaXMubG9jU3RyaW5nLnRleHQgfHwgdGhpcy5sb2NTdHJpbmcucmVuZGVyZWRIdG1sIH07XG4gICAgICBjb250cm9sID0gKFxuICAgICAgICA8c3BhblxuICAgICAgICAgIHJvbGU9XCJ0ZXh0Ym94XCJcbiAgICAgICAgICByZWY9e3RoaXMuc3ZTdHJpbmdFZGl0b3JSZWZ9XG4gICAgICAgICAgY2xhc3NOYW1lPVwic3Ytc3RyaW5nLWVkaXRvclwiXG4gICAgICAgICAgY29udGVudEVkaXRhYmxlPXt0aGlzLmNvbnRlbnRFZGl0YWJsZX1cbiAgICAgICAgICBzcGVsbENoZWNrPXtmYWxzZX1cbiAgICAgICAgICBhcmlhLXBsYWNlaG9sZGVyPXt0aGlzLnBsYWNlaG9sZGVyfVxuICAgICAgICAgIHN1cHByZXNzQ29udGVudEVkaXRhYmxlV2FybmluZz17dHJ1ZX1cbiAgICAgICAgICAvLyBzdHlsZT17dGhpcy5zdHlsZX1cbiAgICAgICAgICBkYW5nZXJvdXNseVNldElubmVySFRNTD17aHRtbFZhbHVlfVxuICAgICAgICAgIG9uQmx1cj17dGhpcy5vbkJsdXJ9XG4gICAgICAgICAgb25Gb2N1cz17dGhpcy5vbkZvY3VzfVxuICAgICAgICAgIG9uS2V5RG93bj17dGhpcy5vbktleURvd259XG4gICAgICAgICAgb25Nb3VzZVVwPXt0aGlzLm9uTW91c2VVcH1cbiAgICAgICAgICBvbkNsaWNrPXt0aGlzLmVkaXR9XG4gICAgICAgIC8+XG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb250cm9sID0gKFxuICAgICAgICA8c3BhblxuICAgICAgICAgIHJvbGU9XCJ0ZXh0Ym94XCJcbiAgICAgICAgICByZWY9e3RoaXMuc3ZTdHJpbmdFZGl0b3JSZWZ9XG4gICAgICAgICAgY2xhc3NOYW1lPVwic3Ytc3RyaW5nLWVkaXRvclwiXG4gICAgICAgICAgY29udGVudEVkaXRhYmxlPXt0aGlzLmNvbnRlbnRFZGl0YWJsZX1cbiAgICAgICAgICBzcGVsbENoZWNrPXtmYWxzZX1cbiAgICAgICAgICBhcmlhLXBsYWNlaG9sZGVyPXt0aGlzLnBsYWNlaG9sZGVyfVxuICAgICAgICAgIHN1cHByZXNzQ29udGVudEVkaXRhYmxlV2FybmluZz17dHJ1ZX1cbiAgICAgICAgICAvLyBzdHlsZT17dGhpcy5zdHlsZX1cbiAgICAgICAgICBvbkJsdXI9e3RoaXMub25CbHVyfVxuICAgICAgICAgIG9uSW5wdXQ9e3RoaXMub25JbnB1dH1cbiAgICAgICAgICBvbkNvbXBvc2l0aW9uU3RhcnQ9e3RoaXMub25Db21wb3NpdGlvblN0YXJ0fVxuICAgICAgICAgIG9uQ29tcG9zaXRpb25FbmQ9e3RoaXMub25Db21wb3NpdGlvbkVuZH1cbiAgICAgICAgICBvbkZvY3VzPXt0aGlzLm9uRm9jdXN9XG4gICAgICAgICAgb25LZXlEb3duPXt0aGlzLm9uS2V5RG93bn1cbiAgICAgICAgICBvbktleVVwPXt0aGlzLm9uS2V5VXB9XG4gICAgICAgICAgb25Nb3VzZVVwPXt0aGlzLm9uTW91c2VVcH1cbiAgICAgICAgICBvbkNsaWNrPXt0aGlzLmVkaXR9XG4gICAgICAgID5cbiAgICAgICAgICB7dGhpcy5sb2NTdHJpbmcucmVuZGVyZWRIdG1sfVxuICAgICAgICA8L3NwYW4+XG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gKFxuICAgICAgPHNwYW4gY2xhc3NOYW1lPXt0aGlzLmNsYXNzTmFtZX0+XG4gICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInN2Yy1zdHJpbmctZWRpdG9yX19jb250ZW50XCI+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtc3RyaW5nLWVkaXRvcl9fYm9yZGVyXCJcbiAgICAgICAgICAgIG9uQ2xpY2s9e3RoaXMuZWRpdH1cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8U3ZnSWNvblxuICAgICAgICAgICAgICBjbGFzc05hbWU9XCJzdmMtc3RyaW5nLWVkaXRvcl9fYnV0dG9uIHN2Yy1zdHJpbmctZWRpdG9yX19idXR0b24tLWVkaXRcIlxuICAgICAgICAgICAgICBzaXplPXsxNn1cbiAgICAgICAgICAgICAgaWNvbk5hbWU9e1wiaWNvbi1lZGl0XCJ9XG4gICAgICAgICAgICA+PC9TdmdJY29uPlxuXG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAge2NvbnRyb2x9XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtc3RyaW5nLWVkaXRvcl9fY29udHJvbHNcIlxuICAgICAgICAgICAgb25DbGljaz17dGhpcy5lZGl0fT5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9zcGFuPlxuICAgICAgICB7dGhpcy5lcnJvclRleHQgPyA8c3BhbiBjbGFzc05hbWU9XCJzdmMtc3RyaW5nLWVkaXRvcl9fZXJyb3JcIj57dGhpcy5lcnJvclRleHR9PC9zcGFuPiA6IFwiXCJ9XG4gICAgICA8L3NwYW4+XG4gICAgKTtcbiAgfVxufVxuXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcbiAgZWRpdGFibGVTdHJpbmdSZW5kZXJlck5hbWUsXG4gIChwcm9wcykgPT4ge1xuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFN1cnZleUxvY1N0cmluZ0VkaXRvciwgcHJvcHMpO1xuICB9XG4pO1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IFJlYWN0RE9NIGZyb20gXCJyZWFjdC1kb21cIjtcblxuaW1wb3J0IHtcbiAgQmFzZSxcbiAgUXVlc3Rpb24sXG4gIFN1cnZleUVycm9yLFxuICBTdXJ2ZXlNb2RlbFxufSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7XG4gIFN1cnZleUFjdGlvbkJhcixcbiAgUmVhY3RFbGVtZW50RmFjdG9yeSxcbiAgUmVhY3RRdWVzdGlvbkZhY3RvcnksXG4gIFN1cnZleUVsZW1lbnRCYXNlLFxuICBTdXJ2ZXlMb2NTdHJpbmdWaWV3ZXIsXG4gIFN1cnZleVxufSBmcm9tIFwic3VydmV5LXJlYWN0LXVpXCI7XG5pbXBvcnQge1xuICBJQ3JlYXRvck9wdGlvbnMsXG4gIENyZWF0b3JCYXNlLFxuICBJVGFiYmVkTWVudUl0ZW1cbn0gZnJvbSBcInN1cnZleS1jcmVhdG9yLWNvcmVcIjtcbmltcG9ydCB7IFRhYmJlZE1lbnVDb21wb25lbnQgfSBmcm9tIFwiLi9UYWJiZWRNZW51XCI7XG5pbXBvcnQgeyBOb3RpZmllckNvbXBvbmVudCB9IGZyb20gXCIuL05vdGlmaWVyXCI7XG5pbXBvcnQgeyBTdmdCdW5kbGVDb21wb25lbnQgfSBmcm9tIFwiLi9TdmdCdW5kbGVcIjtcblxuaW50ZXJmYWNlIElTdXJ2ZXlDcmVhdG9yQ29tcG9uZW50UHJvcHMge1xuICBjcmVhdG9yOiBTdXJ2ZXlDcmVhdG9yO1xuICBzdHlsZT86IGFueTtcbn1cblxuZXhwb3J0IGNsYXNzIFN1cnZleUNyZWF0b3JDb21wb25lbnQgZXh0ZW5kcyBTdXJ2ZXlFbGVtZW50QmFzZTxcbiAgSVN1cnZleUNyZWF0b3JDb21wb25lbnRQcm9wcyxcbiAgYW55XG4+IHtcbiAgY29uc3RydWN0b3IocHJvcHM6IElTdXJ2ZXlDcmVhdG9yQ29tcG9uZW50UHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5yb290Tm9kZSA9IFJlYWN0LmNyZWF0ZVJlZigpO1xuICB9XG4gIGdldCBjcmVhdG9yKCk6IENyZWF0b3JCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5jcmVhdG9yO1xuICB9XG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnQoKTogQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuY3JlYXRvcjtcbiAgfVxuICBnZXQgc3R5bGUoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5zdHlsZTtcbiAgfVxuICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICBzdXBlci5jb21wb25lbnREaWRNb3VudCgpO1xuICAgIHRoaXMuY3JlYXRvci5pbml0S2V5Ym9hcmRTaG9ydGN1dHModGhpcy5yb290Tm9kZS5jdXJyZW50KTtcbiAgICB0aGlzLmNyZWF0b3IuaW5pdFJlc3BvbnNpdml0eU1hbmFnZXIodGhpcy5yb290Tm9kZS5jdXJyZW50KTtcbiAgfVxuICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICBzdXBlci5jb21wb25lbnRXaWxsVW5tb3VudCgpO1xuICAgIHRoaXMuY3JlYXRvci5yZW1vdmVLZXlib2FyZFNob3J0Y3V0cyh0aGlzLnJvb3ROb2RlLmN1cnJlbnQpO1xuICAgIHRoaXMuY3JlYXRvci5yZXNldFJlc3BvbnNpdml0eU1hbmFnZXIoKTtcbiAgfVxuICBwcml2YXRlIHJvb3ROb2RlOiBSZWFjdC5SZWZPYmplY3Q8SFRNTERpdkVsZW1lbnQ+O1xuXG4gIHJlbmRlckVsZW1lbnQoKSB7XG4gICAgY29uc3QgY3JlYXRvcjogQ3JlYXRvckJhc2UgPSB0aGlzLnByb3BzLmNyZWF0b3I7XG4gICAgaWYgKGNyZWF0b3IuaXNDcmVhdG9yRGlzcG9zZWQpIHJldHVybiBudWxsO1xuICAgIGNvbnN0IGNyZWF0b3JDbGFzc05hbWUgPSBcInN2Yy1jcmVhdG9yXCIgKyAodGhpcy5wcm9wcy5jcmVhdG9yLmlzTW9iaWxlVmlldyA/IFwiIHN2Yy1jcmVhdG9yLS1tb2JpbGVcIiA6IFwiXCIpO1xuICAgIGNvbnN0IGFyZWFDbGFzc05hbWUgPSBcInN2Yy1mdWxsLWNvbnRhaW5lciBzdmMtY3JlYXRvcl9fYXJlYSBzdmMtZmxleC1jb2x1bW5cIiArICh0aGlzLnByb3BzLmNyZWF0b3IuaGF2ZUNvbW1lcmNpYWxMaWNlbnNlID8gXCJcIiA6IFwiIHN2Yy1jcmVhdG9yX19hcmVhLS13aXRoLWJhbm5lclwiKTtcbiAgICBjb25zdCBjb250ZW50V3JhcHBlckNsYXNzTmFtZSA9IFwic3ZjLWNyZWF0b3JfX2NvbnRlbnQtd3JhcHBlciBzdmMtZmxleC1yb3dcIiArICh0aGlzLnByb3BzLmNyZWF0b3IuaXNNb2JpbGVWaWV3ID8gXCIgc3ZjLWNyZWF0b3JfX2NvbnRlbnQtd3JhcHBlci0tZm9vdGVyLXRvb2xiYXJcIiA6IFwiXCIpO1xuICAgIGNvbnN0IGZ1bGxDb250YWluZXJDbGFzc05hbWUgPSBcInN2Yy1mbGV4LXJvdyBzdmMtZnVsbC1jb250YWluZXJcIiArIChcIiBzdmMtY3JlYXRvcl9fc2lkZS1iYXItLVwiICsgdGhpcy5jcmVhdG9yLnNpZGViYXJMb2NhdGlvbik7XG4gICAgbGV0IGxpY2Vuc2VCYW5uZXIgPSBudWxsO1xuICAgIGlmICghdGhpcy5wcm9wcy5jcmVhdG9yLmhhdmVDb21tZXJjaWFsTGljZW5zZSkge1xuICAgICAgbGljZW5zZUJhbm5lciA9IChcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtY3JlYXRvcl9fYmFubmVyXCI+XG4gICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwic3ZjLWNyZWF0b3JfX25vbi1jb21tZXJjaWFsLXRleHRcIj5cbiAgICAgICAgICAgIDxhIGhyZWY9XCJodHRwczovL3N1cnZleWpzLmlvL2J1eVwiPlxuICAgICAgICAgICAgICB7dGhpcy5wcm9wcy5jcmVhdG9yLmxpY2Vuc2VUZXh0fVxuICAgICAgICAgICAgPC9hPlxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICApO1xuICAgIH1cbiAgICAvL0FNOiB3aWR0aCB1bnJlY29nbml6ZWQgYnkgcmVhY3RcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9e2NyZWF0b3JDbGFzc05hbWV9IHJlZj17dGhpcy5yb290Tm9kZX0gc3R5bGU9e3RoaXMuc3R5bGV9PlxuICAgICAgICA8U3ZnQnVuZGxlQ29tcG9uZW50PjwvU3ZnQnVuZGxlQ29tcG9uZW50PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17YXJlYUNsYXNzTmFtZX0+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2Z1bGxDb250YWluZXJDbGFzc05hbWV9PlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtZmxleC1jb2x1bW4gc3ZjLWZsZXgtcm93X19lbGVtZW50IHN2Yy1mbGV4LXJvd19fZWxlbWVudC0tZ3Jvd2luZ1wiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy10b3AtYmFyXCI+XG4gICAgICAgICAgICAgICAgeyhjcmVhdG9yLnNob3dUYWJzID9cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLXRhYmJlZC1tZW51LXdyYXBwZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgPFRhYmJlZE1lbnVDb21wb25lbnQgbW9kZWw9e2NyZWF0b3IudGFiYmVkTWVudX0+PC9UYWJiZWRNZW51Q29tcG9uZW50PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+IDogbnVsbCl9XG4gICAgICAgICAgICAgICAgeyhjcmVhdG9yLnNob3dUb29sYmFyID9cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLXRvb2xiYXItd3JhcHBlclwiPlxuICAgICAgICAgICAgICAgICAgICA8U3VydmV5QWN0aW9uQmFyIG1vZGVsPXtjcmVhdG9yLnRvb2xiYXJ9PjwvU3VydmV5QWN0aW9uQmFyPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA6IG51bGwpfVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2NvbnRlbnRXcmFwcGVyQ2xhc3NOYW1lfT5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy1jcmVhdG9yX19jb250ZW50LWhvbGRlciBzdmMtZmxleC1jb2x1bW5cIj5cbiAgICAgICAgICAgICAgICAgIHt0aGlzLnJlbmRlckFjdGl2ZVRhYigpfVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtZm9vdGVyLWJhclwiPlxuICAgICAgICAgICAgICAgIHsoY3JlYXRvci5pc01vYmlsZVZpZXcgP1xuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtdG9vbGJhci13cmFwcGVyXCI+XG4gICAgICAgICAgICAgICAgICAgIDxTdXJ2ZXlBY3Rpb25CYXIgbW9kZWw9e2NyZWF0b3IuZm9vdGVyVG9vbGJhcn0+PC9TdXJ2ZXlBY3Rpb25CYXI+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDogbnVsbCl9XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICB7dGhpcy5yZW5kZXJTaWRlYmFyKCl9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAge2xpY2Vuc2VCYW5uZXJ9XG4gICAgICAgICAgPE5vdGlmaWVyQ29tcG9uZW50XG4gICAgICAgICAgICBjcmVhdG9yPXtjcmVhdG9yfVxuICAgICAgICAgICAgbm90aWZpZXI9e2NyZWF0b3Iubm90aWZpZXJ9XG4gICAgICAgICAgPjwvTm90aWZpZXJDb21wb25lbnQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuICByZW5kZXJBY3RpdmVUYWIoKSB7XG4gICAgY29uc3QgY3JlYXRvcjogQ3JlYXRvckJhc2UgPSB0aGlzLnByb3BzLmNyZWF0b3I7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjcmVhdG9yLnRhYnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChjcmVhdG9yLnRhYnNbaV0uaWQgPT09IGNyZWF0b3IuYWN0aXZlVGFiKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlbmRlckNyZWF0b3JUYWIoY3JlYXRvci50YWJzW2ldKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgcmVuZGVyQ3JlYXRvclRhYih0YWI6IElUYWJiZWRNZW51SXRlbSkge1xuICAgIGlmICh0YWIudmlzaWJsZSA9PT0gZmFsc2UpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBjb25zdCBjcmVhdG9yOiBDcmVhdG9yQmFzZSA9IHRoaXMucHJvcHMuY3JlYXRvcjtcbiAgICBjb25zdCBjb21wb25lbnQgPSAhIXRhYi5yZW5kZXJUYWJcbiAgICAgID8gdGFiLnJlbmRlclRhYigpXG4gICAgICA6IFJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UuY3JlYXRlRWxlbWVudCh0YWIuY29tcG9uZW50Q29udGVudCwge1xuICAgICAgICBjcmVhdG9yOiBjcmVhdG9yLFxuICAgICAgICBzdXJ2ZXk6IGNyZWF0b3Iuc3VydmV5LFxuICAgICAgICBkYXRhOiB0YWIuZGF0YS5tb2RlbFxuICAgICAgfSk7XG4gICAgY29uc3QgY2xhc3NOYW1lID0gXCJzdmMtY3JlYXRvci10YWJcIiArIChjcmVhdG9yLnRvb2xib3hMb2NhdGlvbiA9PSBcInJpZ2h0XCIgPyBcIiBzdmMtY3JlYXRvcl9fdG9vbGJveC0tcmlnaHRcIiA6IFwiXCIpO1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2XG4gICAgICAgIGtleT17dGFiLmlkfVxuICAgICAgICBpZD17XCJzY3JvbGxhYmxlRGl2LVwiICsgdGFiLmlkfVxuICAgICAgICBjbGFzc05hbWU9e2NsYXNzTmFtZX1cbiAgICAgID5cbiAgICAgICAge2NvbXBvbmVudH1cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbiAgcmVuZGVyU2lkZWJhcigpIHtcbiAgICBpZiAoISF0aGlzLmNyZWF0b3Iuc2lkZWJhcikge1xuICAgICAgY29uc3QgY2xhc3NOYW1lID0gdGhpcy5jcmVhdG9yLmlzTW9iaWxlVmlldyA/IFwic3YtbW9iaWxlLXNpZGUtYmFyXCIgOiBcIlwiO1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e2NsYXNzTmFtZX0+XG4gICAgICAgICAge1JlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UuY3JlYXRlRWxlbWVudChcInN2Yy1zaWRlLWJhclwiLCB7IG1vZGVsOiB0aGlzLmNyZWF0b3Iuc2lkZWJhciB9KX1cbiAgICAgICAgPC9kaXY+KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlDcmVhdG9yIGV4dGVuZHMgQ3JlYXRvckJhc2Uge1xuICBjb25zdHJ1Y3RvcihvcHRpb25zOiBJQ3JlYXRvck9wdGlvbnMgPSB7fSwgb3B0aW9uczI/OiBJQ3JlYXRvck9wdGlvbnMpIHtcbiAgICBzdXBlcihvcHRpb25zLCBvcHRpb25zMik7XG4gIH1cbiAgcHVibGljIHJlbmRlcih0YXJnZXQ6IHN0cmluZyB8IEhUTUxFbGVtZW50KSB7XG4gICAgbGV0IG5vZGU6IEhUTUxFbGVtZW50ID0gdGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xuICAgIGlmICh0eXBlb2YgdGFyZ2V0ID09PSBcInN0cmluZ1wiKSB7XG4gICAgICBub2RlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGFyZ2V0KTtcbiAgICB9XG4gICAgUmVhY3RET00udW5tb3VudENvbXBvbmVudEF0Tm9kZShub2RlKTtcbiAgICBSZWFjdERPTS5yZW5kZXIoXG4gICAgICA8UmVhY3QuU3RyaWN0TW9kZT5cbiAgICAgICAgPFN1cnZleUNyZWF0b3JDb21wb25lbnQgY3JlYXRvcj17dGhpc30gLz5cbiAgICAgIDwvUmVhY3QuU3RyaWN0TW9kZT4sXG4gICAgICBub2RlXG4gICAgKTtcbiAgfVxuXG4gIC8vSVN1cnZleUNyZWF0b3JcbiAgcHVibGljIGNyZWF0ZVF1ZXN0aW9uRWxlbWVudChxdWVzdGlvbjogUXVlc3Rpb24pOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuIFJlYWN0UXVlc3Rpb25GYWN0b3J5Lkluc3RhbmNlLmNyZWF0ZVF1ZXN0aW9uKFxuICAgICAgcXVlc3Rpb24uaXNEZWZhdWx0UmVuZGVyaW5nKClcbiAgICAgICAgPyBxdWVzdGlvbi5nZXRUZW1wbGF0ZSgpXG4gICAgICAgIDogcXVlc3Rpb24uZ2V0Q29tcG9uZW50TmFtZSgpLFxuICAgICAge1xuICAgICAgICBxdWVzdGlvbjogcXVlc3Rpb24sXG4gICAgICAgIGlzRGlzcGxheU1vZGU6IHF1ZXN0aW9uLmlzUmVhZE9ubHksXG4gICAgICAgIGNyZWF0b3I6IHRoaXNcbiAgICAgIH1cbiAgICApO1xuICB9XG4gIHB1YmxpYyByZW5kZXJFcnJvcihcbiAgICBrZXk6IHN0cmluZyxcbiAgICBlcnJvcjogU3VydmV5RXJyb3IsXG4gICAgY3NzQ2xhc3NlczogYW55XG4gICk6IEpTWC5FbGVtZW50IHtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBrZXk9e2tleX0+XG4gICAgICAgIDxzcGFuIGNsYXNzTmFtZT17Y3NzQ2xhc3Nlcy5lcnJvci5pY29ufSBhcmlhLWhpZGRlbj1cInRydWVcIiAvPlxuICAgICAgICA8c3BhbiBjbGFzc05hbWU9e2Nzc0NsYXNzZXMuZXJyb3IuaXRlbX0+XG4gICAgICAgICAgPFN1cnZleUxvY1N0cmluZ1ZpZXdlciBsb2NTdHI9e2Vycm9yLmxvY1RleHR9IC8+XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbiAgcHVibGljIHF1ZXN0aW9uVGl0bGVMb2NhdGlvbigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnN1cnZleS5xdWVzdGlvblRpdGxlTG9jYXRpb247XG4gIH1cbiAgcHVibGljIHF1ZXN0aW9uRXJyb3JMb2NhdGlvbigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnN1cnZleS5xdWVzdGlvbkVycm9yTG9jYXRpb247XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXCJzdXJ2ZXktd2lkZ2V0XCIsIChwcm9wcykgPT4ge1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdXJ2ZXksIHByb3BzKTtcbn0pO1xuIiwiXG5pbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBTdmdSZWdpc3RyeSB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgc3ZnQnVuZGxlIH0gZnJvbSBcInN1cnZleS1jcmVhdG9yLWNvcmVcIjtcbmltcG9ydCB7IFJlYWN0RWxlbWVudEZhY3RvcnkgfSBmcm9tIFwic3VydmV5LXJlYWN0LXVpXCI7XG5cbmV4cG9ydCBjbGFzcyBTdmdCdW5kbGVDb21wb25lbnQgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICBwcml2YXRlIGNvbnRhaW5lclJlZjogUmVhY3QuUmVmT2JqZWN0PFNWR1NWR0VsZW1lbnQ+O1xuXG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5jb250YWluZXJSZWYgPSBSZWFjdC5jcmVhdGVSZWYoKTtcbiAgfVxuICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICBpZiAoISF0aGlzLmNvbnRhaW5lclJlZi5jdXJyZW50KSB7XG4gICAgICB0aGlzLmNvbnRhaW5lclJlZi5jdXJyZW50LmlubmVySFRNTCA9IFN2Z1JlZ2lzdHJ5Lmljb25zUmVuZGVyZWRIdG1sKCk7XG4gICAgfVxuICB9XG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCBzdmdTdHlsZSA9IHtcbiAgICAgIGRpc3BsYXk6IFwibm9uZVwiXG4gICAgfTtcbiAgICByZXR1cm4gPHN2ZyBzdHlsZT17c3ZnU3R5bGV9IGlkPVwic3YtaWNvbi1ob2xkZXItZ2xvYmFsLWNvbnRhaW5lclwiIHJlZj17dGhpcy5jb250YWluZXJSZWZ9Pjwvc3ZnPjtcbiAgfVxufVxuXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcInN2Yy1zdmctYnVuZGxlXCIsIChwcm9wcykgPT4ge1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdmdCdW5kbGVDb21wb25lbnQsIHByb3BzKTtcbn0pOyIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IENTU1Byb3BlcnRpZXMgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IElUYWJiZWRNZW51SXRlbSwgVGFiYmVkTWVudUl0ZW0sIFRhYmJlZE1lbnVDb250YWluZXIgfSBmcm9tIFwic3VydmV5LWNyZWF0b3ItY29yZVwiO1xuaW1wb3J0IHtcbiAgQmFzZSxcbiAgSUFjdGlvbixcbiAgQWN0aW9uLFxuICBSZXNwb25zaXZpdHlNYW5hZ2VyLFxuICBBZGFwdGl2ZUFjdGlvbkNvbnRhaW5lclxufSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IGF0dGFjaEtleTJjbGljaywgUmVhY3RFbGVtZW50RmFjdG9yeSwgU3VydmV5RWxlbWVudEJhc2UgfSBmcm9tIFwic3VydmV5LXJlYWN0LXVpXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVRhYmJlZE1lbnVDb21wb25lbnRQcm9wcyB7XG4gIG1vZGVsOiBUYWJiZWRNZW51Q29udGFpbmVyO1xufVxuXG5leHBvcnQgY2xhc3MgVGFiYmVkTWVudUNvbXBvbmVudCBleHRlbmRzIFN1cnZleUVsZW1lbnRCYXNlPFxuICBJVGFiYmVkTWVudUNvbXBvbmVudFByb3BzLFxuICBhbnlcbj4ge1xuICBwcml2YXRlIG1hbmFnZXI6IFJlc3BvbnNpdml0eU1hbmFnZXI7XG4gIHByaXZhdGUgcm9vdFJlZjogUmVhY3QuUmVmT2JqZWN0PEhUTUxEaXZFbGVtZW50PjtcblxuICBwcml2YXRlIGdldCBtb2RlbCgpIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5tb2RlbDtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnQoKTogQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMubW9kZWw7XG4gIH1cblxuICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLnJvb3RSZWYgPSBSZWFjdC5jcmVhdGVSZWYoKTtcbiAgfVxuXG4gIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIGNvbnN0IGl0ZW1zID0gdGhpcy5tb2RlbC5yZW5kZXJlZEFjdGlvbnMubWFwKChpdGVtKSA9PiA8VGFiYmVkTWVudUl0ZW1XcmFwcGVyIGl0ZW09e2l0ZW19IGtleT17aXRlbS5pZH0gLz4pO1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IHJlZj17dGhpcy5yb290UmVmfSBjbGFzc05hbWU9XCJzdmMtdGFiYmVkLW1lbnVcIj5cbiAgICAgICAge2l0ZW1zfVxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuXG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIHN1cGVyLmNvbXBvbmVudERpZE1vdW50KCk7XG4gICAgY29uc3QgY29udGFpbmVyOiBIVE1MRGl2RWxlbWVudCA9IHRoaXMucm9vdFJlZi5jdXJyZW50O1xuICAgIGlmICghY29udGFpbmVyKSByZXR1cm47XG4gICAgdGhpcy5tYW5hZ2VyID0gbmV3IFJlc3BvbnNpdml0eU1hbmFnZXIoXG4gICAgICBjb250YWluZXIsXG4gICAgICB0aGlzLm1vZGVsLFxuICAgICAgXCIuc3ZjLXRhYmJlZC1tZW51LWl0ZW0tY29udGFpbmVyOm5vdCguc3YtZG90cyk+LnN2LWFjdGlvbl9fY29udGVudFwiXG4gICAgKTtcbiAgfVxuICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICB0aGlzLm1hbmFnZXIgJiYgKHRoaXMubWFuYWdlci5kaXNwb3NlKCkpO1xuICAgIHN1cGVyLmNvbXBvbmVudFdpbGxVbm1vdW50KCk7XG4gIH1cbn1cblxuY2xhc3MgVGFiYmVkTWVudUl0ZW1XcmFwcGVyIGV4dGVuZHMgU3VydmV5RWxlbWVudEJhc2U8XG4gIGFueSxcbiAgYW55XG4+IHtcblxuICBwcml2YXRlIGdldCBpdGVtKCkge1xuICAgIHJldHVybiB0aGlzLnByb3BzLml0ZW07XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCk6IEJhc2Uge1xuICAgIHJldHVybiB0aGlzLml0ZW07XG4gIH1cblxuICByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICBsZXQgY3NzOiBzdHJpbmcgPSBcInN2Yy10YWJiZWQtbWVudS1pdGVtLWNvbnRhaW5lclwiO1xuICAgIGlmICh0aGlzLml0ZW0uY3NzKSB7XG4gICAgICBjc3MgKz0gXCIgXCIgKyB0aGlzLml0ZW0uY3NzO1xuICAgIH1cbiAgICBjc3MgKz0gKCF0aGlzLml0ZW0uaXNWaXNpYmxlID8gXCIgc3YtYWN0aW9uLS1oaWRkZW5cIiA6IFwiXCIpO1xuXG4gICAgY29uc3QgY29tcG9uZW50ID0gUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5jcmVhdGVFbGVtZW50KFxuICAgICAgdGhpcy5pdGVtLmNvbXBvbmVudCB8fCBcInN2Yy10YWJiZWQtbWVudS1pdGVtXCIsXG4gICAgICB7IGl0ZW06IHRoaXMuaXRlbSB9XG4gICAgKTtcblxuICAgIHJldHVybiAoXG4gICAgICA8c3BhbiBrZXk9e3RoaXMuaXRlbS5pZH0gY2xhc3NOYW1lPXtjc3N9PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2LWFjdGlvbl9fY29udGVudFwiPlxuICAgICAgICAgIHtjb21wb25lbnR9XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9zcGFuPlxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBJVGFiYmVkTWVudUl0ZW1Db21wb25lbnRQcm9wcyB7XG4gIGl0ZW06IEFjdGlvbjtcbn1cbmV4cG9ydCBjbGFzcyBUYWJiZWRNZW51SXRlbUNvbXBvbmVudCBleHRlbmRzIFN1cnZleUVsZW1lbnRCYXNlPFxuICBJVGFiYmVkTWVudUl0ZW1Db21wb25lbnRQcm9wcyxcbiAgYW55XG4+IHtcbiAgZ2V0IGl0ZW0oKTogQWN0aW9uIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5pdGVtO1xuICB9XG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnQoKTogQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMuaXRlbTtcbiAgfVxuXG4gIHJlbmRlcigpOiBKU1guRWxlbWVudCB7XG4gICAgY29uc3QgaXRlbSA9IHRoaXMuaXRlbTtcbiAgICBsZXQgY2xhc3NOYW1lOiBzdHJpbmcgPSBcInN2Yy10YWJiZWQtbWVudS1pdGVtXCI7XG4gICAgaWYgKGl0ZW0uYWN0aXZlKSBjbGFzc05hbWUgKz0gXCIgc3ZjLXRhYmJlZC1tZW51LWl0ZW0tLXNlbGVjdGVkXCI7XG4gICAgaWYgKGl0ZW0uZW5hYmxlZCAhPT0gdW5kZWZpbmVkICYmICFpdGVtLmVuYWJsZWQpXG4gICAgICBjbGFzc05hbWUgKz0gXCIgc3ZjLXRhYmJlZC1tZW51LWl0ZW0tLWRpc2FibGVkXCI7XG4gICAgbGV0IHRpdGxlQ2xhc3NOYW1lOiBzdHJpbmcgPVxuICAgICAgXCJzdmMtdGV4dCBzdmMtdGFiYmVkLW1lbnUtaXRlbV9fdGV4dCBzdmMtdGV4dC0tbm9ybWFsXCI7XG4gICAgaWYgKGl0ZW0uYWN0aXZlKSB0aXRsZUNsYXNzTmFtZSArPSBcIiBzdmMtdGV4dC0tYm9sZFwiO1xuXG4gICAgcmV0dXJuIChhdHRhY2hLZXkyY2xpY2soXG4gICAgICA8ZGl2IGNsYXNzTmFtZT17Y2xhc3NOYW1lfSBvbkNsaWNrPXsoKSA9PiBpdGVtLmFjdGlvbihpdGVtKX0+XG4gICAgICAgIDxzcGFuIGNsYXNzTmFtZT17dGl0bGVDbGFzc05hbWV9PntpdGVtLnRpdGxlfTwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgIClcbiAgICApO1xuICB9XG59XG5cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFxuICBcInN2Yy10YWJiZWQtbWVudS1pdGVtXCIsXG4gIChwcm9wcykgPT4ge1xuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFRhYmJlZE1lbnVJdGVtQ29tcG9uZW50LCBwcm9wcyk7XG4gIH1cbik7XG5leHBvcnQgZGVmYXVsdCBUYWJiZWRNZW51Q29tcG9uZW50O1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgQmFzZSwgUXVlc3Rpb24gfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7XG4gIGF0dGFjaEtleTJjbGljayxcbiAgUmVhY3RFbGVtZW50RmFjdG9yeVxufSBmcm9tIFwic3VydmV5LXJlYWN0LXVpXCI7XG5pbXBvcnQgeyBDcmVhdG9yTW9kZWxFbGVtZW50IH0gZnJvbSBcIi4uL01vZGVsRWxlbWVudFwiO1xuaW1wb3J0IHsgUXVlc3Rpb25BZG9ybmVyVmlld01vZGVsLCB0b2dnbGVIb3ZlcmVkIH0gZnJvbSBcInN1cnZleS1jcmVhdG9yLWNvcmVcIjtcbmltcG9ydCB7IFJlYWN0RHJhZ0V2ZW50LCBSZWFjdE1vdXNlRXZlbnQgfSBmcm9tIFwiLi4vZXZlbnRzXCI7XG5pbXBvcnQgeyBRdWVzdGlvbkFkb3JuZXJDb21wb25lbnRQcm9wcyB9IGZyb20gXCIuL1F1ZXN0aW9uXCI7XG5cbmV4cG9ydCBjbGFzcyBDZWxsUXVlc3Rpb25BZG9ybmVyQ29tcG9uZW50IGV4dGVuZHMgQ3JlYXRvck1vZGVsRWxlbWVudDxcbiAgUXVlc3Rpb25BZG9ybmVyQ29tcG9uZW50UHJvcHMsXG4gIGFueVxuPiB7XG4gIG1vZGVsOiBRdWVzdGlvbkFkb3JuZXJWaWV3TW9kZWw7XG4gIHByb3RlY3RlZCBjcmVhdGVNb2RlbCgpOiB2b2lkIHtcbiAgICB0aGlzLm1vZGVsID0gbmV3IFF1ZXN0aW9uQWRvcm5lclZpZXdNb2RlbChcbiAgICAgIHRoaXMucHJvcHMuY29tcG9uZW50RGF0YSxcbiAgICAgIHRoaXMucHJvcHMucXVlc3Rpb24sXG4gICAgICBudWxsXG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCk6IEJhc2Uge1xuICAgIHJldHVybiB0aGlzLm1vZGVsO1xuICB9XG4gIHByb3RlY3RlZCBnZXRVcGRhdGVkTW9kZWxQcm9wcygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIFtcInF1ZXN0aW9uXCIsIFwiY29tcG9uZW50RGF0YVwiXTtcbiAgfVxuICByZW5kZXIoKTogSlNYLkVsZW1lbnQge1xuICAgIGlmICh0aGlzLm1vZGVsLmlzRHJhZ2dlZCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIChcbiAgICAgIDxSZWFjdC5GcmFnbWVudD5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGRhdGEtc3YtZHJvcC10YXJnZXQtc3VydmV5LWVsZW1lbnQ9e3RoaXMubW9kZWwuZWxlbWVudC5uYW1lfVxuICAgICAgICAgIGNsYXNzTmFtZT17XCJzdmMtcXVlc3Rpb25fX2Fkb3JuZXJcIn1cbiAgICAgICAgPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtcIiBzdmMtcXVlc3Rpb25fX2NvbnRlbnQtLXNlbGVjdGVkLW5vLWJvcmRlciBzdmMtcXVlc3Rpb25fX2NvbnRlbnRcIn0+XG4gICAgICAgICAgICB7dGhpcy5wcm9wcy5lbGVtZW50fVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvUmVhY3QuRnJhZ21lbnQ+XG4gICAgKTtcbiAgfVxufVxuXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcbiAgXCJzdmMtY2VsbC1xdWVzdGlvblwiLFxuICAocHJvcHM6IFF1ZXN0aW9uQWRvcm5lckNvbXBvbmVudFByb3BzKSA9PiB7XG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoQ2VsbFF1ZXN0aW9uQWRvcm5lckNvbXBvbmVudCwgcHJvcHMpO1xuICB9XG4pO1xuIiwiaW1wb3J0IHsgUXVlc3Rpb25BZG9ybmVyVmlld01vZGVsLCB0b2dnbGVIb3ZlcmVkIH0gZnJvbSBcInN1cnZleS1jcmVhdG9yLWNvcmVcIjtcbmltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFJlYWN0RHJhZ0V2ZW50LCBSZWFjdE1vdXNlRXZlbnQgfSBmcm9tIFwiLi4vZXZlbnRzXCI7XG5pbXBvcnQgeyBCYXNlLCBJdGVtVmFsdWUsIFF1ZXN0aW9uU2VsZWN0QmFzZSwgU3VydmV5TW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFJlYWN0RWxlbWVudEZhY3RvcnksIFJlYWN0U3VydmV5RWxlbWVudHNXcmFwcGVyIH0gZnJvbSBcInN1cnZleS1yZWFjdC11aVwiO1xuaW1wb3J0IHsgUXVlc3Rpb25BZG9ybmVyQ29tcG9uZW50UHJvcHMgfSBmcm9tIFwiLi9RdWVzdGlvblwiO1xuaW1wb3J0IHsgQ3JlYXRvck1vZGVsRWxlbWVudCB9IGZyb20gXCIuLi9Nb2RlbEVsZW1lbnRcIjtcbmltcG9ydCB7IGF0dGFjaEtleTJjbGljayB9IGZyb20gXCJzdXJ2ZXktcmVhY3QtdWlcIjtcblxuZXhwb3J0IGNsYXNzIENlbGxRdWVzdGlvbkRyb3Bkb3duQWRvcm5lckNvbXBvbmVudCBleHRlbmRzIENyZWF0b3JNb2RlbEVsZW1lbnQ8XG4gIFF1ZXN0aW9uQWRvcm5lckNvbXBvbmVudFByb3BzLFxuICBhbnlcbj4ge1xuICBtb2RlbDogUXVlc3Rpb25BZG9ybmVyVmlld01vZGVsO1xuICBwcm90ZWN0ZWQgY3JlYXRlTW9kZWwoKTogdm9pZCB7XG4gICAgdGhpcy5tb2RlbCA9IG5ldyBRdWVzdGlvbkFkb3JuZXJWaWV3TW9kZWwoXG4gICAgICB0aGlzLnByb3BzLmNvbXBvbmVudERhdGEsXG4gICAgICB0aGlzLnByb3BzLnF1ZXN0aW9uLFxuICAgICAgbnVsbFxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFVwZGF0ZWRNb2RlbFByb3BzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gW1wicXVlc3Rpb25cIiwgXCJjb21wb25lbnREYXRhXCJdO1xuICB9XG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnQoKTogQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMubW9kZWw7XG4gIH1cbiAgcmVuZGVyKCk6IEpTWC5FbGVtZW50IHtcbiAgICBpZiAodGhpcy5tb2RlbC5pc0RyYWdnZWQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBjb25zdCBxdWVzdGlvbiA9IHRoaXMucHJvcHMucXVlc3Rpb24gYXMgUXVlc3Rpb25TZWxlY3RCYXNlO1xuICAgIGNvbnN0IHRleHRTdHlsZSA9ICh0aGlzLnByb3BzLnF1ZXN0aW9uIGFzIGFueSkudGV4dFN0eWxlO1xuICAgIHJldHVybiAoXG4gICAgICA8UmVhY3QuRnJhZ21lbnQ+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBkYXRhLXN2LWRyb3AtdGFyZ2V0LXN1cnZleS1lbGVtZW50PXt0aGlzLm1vZGVsLmVsZW1lbnQubmFtZX1cbiAgICAgICAgICBjbGFzc05hbWU9e1wic3ZjLXF1ZXN0aW9uX19hZG9ybmVyXCJ9XG4gICAgICAgID5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17XCIgc3ZjLXF1ZXN0aW9uX19jb250ZW50LS1zZWxlY3RlZC1uby1ib3JkZXIgc3ZjLXF1ZXN0aW9uX19jb250ZW50XCJ9PlxuICAgICAgICAgICAge3RoaXMucHJvcHMuZWxlbWVudH1cblxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtcXVlc3Rpb25fX2Ryb3Bkb3duLWNob2ljZXNcIj5cbiAgICAgICAgICAgICAge3F1ZXN0aW9uLnZpc2libGVDaG9pY2VzLm1hcChcbiAgICAgICAgICAgICAgICAoaXRlbTogSXRlbVZhbHVlLCBpbmRleDogbnVtYmVyKSA9PiAoXG4gICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInN2Yy1xdWVzdGlvbl9fZHJvcGRvd24tY2hvaWNlXCJcbiAgICAgICAgICAgICAgICAgICAga2V5PXtgZWRpdGFibGVfY2hvaWNlXyR7aW5kZXh9YH1cbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAge1JlYWN0U3VydmV5RWxlbWVudHNXcmFwcGVyLndyYXBJdGVtVmFsdWUocXVlc3Rpb24uc3VydmV5IGFzIFN1cnZleU1vZGVsLFxuICAgICAgICAgICAgICAgICAgICAgIFJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UuY3JlYXRlRWxlbWVudChcbiAgICAgICAgICAgICAgICAgICAgICAgIFwic3VydmV5LXJhZGlvZ3JvdXAtaXRlbVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBxdWVzdGlvbjogcXVlc3Rpb24sXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNzc0NsYXNzZXM6IHF1ZXN0aW9uLmNzc0NsYXNzZXMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlzRGlzcGxheU1vZGU6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW06IGl0ZW0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRTdHlsZTogdGV4dFN0eWxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleDogaW5kZXgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlzQ2hlY2tlZDogcXVlc3Rpb24udmFsdWUgPT09IGl0ZW0udmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgIGl0ZW1cbiAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvUmVhY3QuRnJhZ21lbnQ+XG4gICAgKTtcbiAgfVxufVxuXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcbiAgXCJzdmMtY2VsbC1kcm9wZG93bi1xdWVzdGlvblwiLFxuICAocHJvcHM6IFF1ZXN0aW9uQWRvcm5lckNvbXBvbmVudFByb3BzKSA9PiB7XG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoQ2VsbFF1ZXN0aW9uRHJvcGRvd25BZG9ybmVyQ29tcG9uZW50LCBwcm9wcyk7XG4gIH1cbik7XG4iLCJpbXBvcnQgeyBCYXNlLCBQYWdlTW9kZWwsIFN1cnZleU1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQge1xuICBhdHRhY2hLZXkyY2xpY2ssXG4gIFBvcHVwLFxuICBTdXJ2ZXlBY3Rpb25CYXIsXG4gIFJlYWN0RWxlbWVudEZhY3RvcnksXG4gIFN1cnZleVBhZ2UsXG4gIFN2Z0ljb25cbn0gZnJvbSBcInN1cnZleS1yZWFjdC11aVwiO1xuaW1wb3J0IHsgQ3JlYXRvck1vZGVsRWxlbWVudCB9IGZyb20gXCIuLi9Nb2RlbEVsZW1lbnRcIjtcbmltcG9ydCB7XG4gIENyZWF0b3JCYXNlLFxuICBQYWdlQWRvcm5lcixcbiAgU3VydmV5SGVscGVyLFxuICB0b2dnbGVIb3ZlcmVkXG59IGZyb20gXCJzdXJ2ZXktY3JlYXRvci1jb3JlXCI7XG5pbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBSZWFjdE1vdXNlRXZlbnQgfSBmcm9tIFwiLi4vZXZlbnRzXCI7XG5cbmludGVyZmFjZSBJQ3JlYXRvclN1cnZleVBhZ2VDb21wb25lbnRQcm9wcyB7XG4gIGNyZWF0b3I6IENyZWF0b3JCYXNlO1xuICBzdXJ2ZXk6IFN1cnZleU1vZGVsO1xuICBwYWdlOiBQYWdlTW9kZWw7XG59XG5cbmV4cG9ydCBjbGFzcyBDcmVhdG9yU3VydmV5UGFnZUNvbXBvbmVudCBleHRlbmRzIENyZWF0b3JNb2RlbEVsZW1lbnQ8XG4gIElDcmVhdG9yU3VydmV5UGFnZUNvbXBvbmVudFByb3BzLFxuICBhbnlcbj4ge1xuICBwcml2YXRlIG1vZGVsOiBQYWdlQWRvcm5lcjtcbiAgcHJpdmF0ZSByb290UmVmOiBSZWFjdC5SZWZPYmplY3Q8SFRNTERpdkVsZW1lbnQ+O1xuICBjb25zdHJ1Y3Rvcihwcm9wczogSUNyZWF0b3JTdXJ2ZXlQYWdlQ29tcG9uZW50UHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5yb290UmVmID0gUmVhY3QuY3JlYXRlUmVmKCk7XG4gIH1cbiAgcHJvdGVjdGVkIGNyZWF0ZU1vZGVsKCk6IHZvaWQge1xuICAgIHRoaXMubW9kZWwgPSBuZXcgUGFnZUFkb3JuZXIoXG4gICAgICB0aGlzLnByb3BzLmNyZWF0b3IsXG4gICAgICB0aGlzLnByb3BzLnBhZ2VcbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCBnZXRVcGRhdGVkTW9kZWxQcm9wcygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIFtcImNyZWF0b3JcIiwgXCJwYWdlXCJdO1xuICB9XG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnQoKTogQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMubW9kZWw7XG4gIH1cbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgc3VwZXIuY29tcG9uZW50RGlkTW91bnQoKTtcbiAgICB0aGlzLm1vZGVsLm9uUGFnZVNlbGVjdGVkQ2FsbGJhY2sgPSAoKSA9PiB7XG4gICAgICBpZiAoISF0aGlzLnJvb3RSZWYuY3VycmVudCkge1xuICAgICAgICBTdXJ2ZXlIZWxwZXIuc2Nyb2xsSW50b1ZpZXdJZk5lZWRlZCh0aGlzLnJvb3RSZWYuY3VycmVudCk7XG4gICAgICB9XG4gICAgfTtcbiAgfVxuICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICBzdXBlci5jb21wb25lbnRXaWxsVW5tb3VudCgpO1xuICAgIHRoaXMubW9kZWwuZGlzcG9zZSgpO1xuICB9XG4gIHByb3RlY3RlZCBjYW5SZW5kZXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgICEhdGhpcy5tb2RlbCAmJlxuICAgICAgdGhpcy5tb2RlbC5pc1BhZ2VMaXZlICYmXG4gICAgICAhIXRoaXMubW9kZWwucGFnZSAmJlxuICAgICAgISF0aGlzLm1vZGVsLnBhZ2Uuc3VydmV5XG4gICAgKTtcbiAgfVxuICByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICBpZiAoIXRoaXMucHJvcHMucGFnZSkgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIChcbiAgICAgIGF0dGFjaEtleTJjbGljayg8ZGl2XG4gICAgICAgIHJlZj17dGhpcy5yb290UmVmfVxuICAgICAgICBjbGFzc05hbWU9e1wic3ZjLXBhZ2VfX2NvbnRlbnQgXCIgKyB0aGlzLm1vZGVsLmNzc31cbiAgICAgICAgaWQ9e3RoaXMucHJvcHMucGFnZS5pZH1cbiAgICAgICAgb25DbGljaz17KGUpID0+IHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5tb2RlbC5zZWxlY3QodGhpcy5tb2RlbCwgbmV3IFJlYWN0TW91c2VFdmVudChlKSk7XG4gICAgICAgIH19XG4gICAgICAgIG9uTW91c2VMZWF2ZT17KGUpID0+IHRoaXMubW9kZWwuaG92ZXIoZS5uYXRpdmVFdmVudCwgZS5jdXJyZW50VGFyZ2V0KX1cbiAgICAgICAgb25Nb3VzZU92ZXI9eyhlKSA9PiB0aGlzLm1vZGVsLmhvdmVyKGUubmF0aXZlRXZlbnQsIGUuY3VycmVudFRhcmdldCl9XG4gICAgICA+XG4gICAgICAgIHt0aGlzLnJlbmRlckhlYWRlcigpfVxuICAgICAgICB7dGhpcy5yZW5kZXJDb250ZW50KCl9XG4gICAgICAgIHt0aGlzLnJlbmRlckZvb3RlcigpfVxuICAgICAgPC9kaXY+KVxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckNvbnRlbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiAoPFN1cnZleVBhZ2UgcGFnZT17dGhpcy5wcm9wcy5wYWdlfSBzdXJ2ZXk9e3RoaXMucHJvcHMuc3VydmV5fSBjcmVhdG9yPXt0aGlzLnByb3BzLmNyZWF0b3J9IGNzcz17dGhpcy5tb2RlbC5jc3N9PjwvU3VydmV5UGFnZT4pO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJIZWFkZXIoKTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiAoPGRpdiBjbGFzc05hbWU9XCJzdmMtcGFnZV9fY29udGVudC1hY3Rpb25zXCI+XG4gICAgICA8U3VydmV5QWN0aW9uQmFyIG1vZGVsPXt0aGlzLm1vZGVsLmFjdGlvbkNvbnRhaW5lcn0+PC9TdXJ2ZXlBY3Rpb25CYXI+XG4gICAgPC9kaXY+KTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyRm9vdGVyKCk6IEpTWC5FbGVtZW50IHtcbiAgICBpZiAoIXRoaXMubW9kZWwuc2hvd0FkZFF1ZXN0aW9uQnV0dG9uKSByZXR1cm4gbnVsbDtcbiAgICBjb25zdCBxdWVzdGlvblR5cGVTZWxlY3Rvck1vZGVsID0gdGhpcy5tb2RlbC5xdWVzdGlvblR5cGVTZWxlY3Rvck1vZGVsO1xuICAgIHJldHVybiBhdHRhY2hLZXkyY2xpY2soPGRpdlxuICAgICAgY2xhc3NOYW1lPVwic3ZjLXBhZ2VfX2FkZC1uZXctcXVlc3Rpb24gc3ZjLWJ0blwiXG4gICAgICBvbkNsaWNrPXsoZSkgPT4ge1xuICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICB0aGlzLm1vZGVsLmFkZE5ld1F1ZXN0aW9uKHRoaXMubW9kZWwsIG5ldyBSZWFjdE1vdXNlRXZlbnQoZSkpO1xuICAgICAgfX1cbiAgICAgIG9uTW91c2VPdmVyPXsoZSkgPT4gdGhpcy5tb2RlbC5ob3ZlclN0b3BwZXIoZS5uYXRpdmVFdmVudCwgZS5jdXJyZW50VGFyZ2V0KX1cbiAgICA+XG4gICAgICA8c3BhbiBjbGFzc05hbWU9XCJzdmMtdGV4dCBzdmMtdGV4dC0tbm9ybWFsIHN2Yy10ZXh0LS1ib2xkXCI+XG4gICAgICAgIHt0aGlzLm1vZGVsLmFkZE5ld1F1ZXN0aW9uVGV4dH1cbiAgICAgIDwvc3Bhbj5cblxuICAgICAge2F0dGFjaEtleTJjbGljayg8YnV0dG9uXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICBvbkNsaWNrPXsoZSkgPT4ge1xuICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgcXVlc3Rpb25UeXBlU2VsZWN0b3JNb2RlbC5hY3Rpb24oKTtcbiAgICAgICAgfX1cbiAgICAgICAgY2xhc3NOYW1lPVwic3ZjLXBhZ2VfX3F1ZXN0aW9uLXR5cGUtc2VsZWN0b3JcIlxuICAgICAgICB0aXRsZT17dGhpcy5tb2RlbC5hZGROZXdRdWVzdGlvblRleHR9XG4gICAgICA+XG4gICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInN2Yy1wYWdlX19xdWVzdGlvbi10eXBlLXNlbGVjdG9yLWljb25cIj5cbiAgICAgICAgICA8U3ZnSWNvblxuICAgICAgICAgICAgaWNvbk5hbWU9e3F1ZXN0aW9uVHlwZVNlbGVjdG9yTW9kZWwuaWNvbk5hbWV9XG4gICAgICAgICAgICBzaXplPXsyNH1cbiAgICAgICAgICAgIHRpdGxlPXt0aGlzLm1vZGVsLmFkZE5ld1F1ZXN0aW9uVGV4dH1cbiAgICAgICAgICA+PC9TdmdJY29uPlxuICAgICAgICA8L3NwYW4+XG4gICAgICAgIDxQb3B1cCBtb2RlbD17cXVlc3Rpb25UeXBlU2VsZWN0b3JNb2RlbC5wb3B1cE1vZGVsfT48L1BvcHVwPlxuICAgICAgPC9idXR0b24+KX1cbiAgICA8L2Rpdj4pO1xuICB9XG59XG5cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFwic3ZjLXBhZ2VcIiwgKHByb3BzKSA9PiB7XG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KENyZWF0b3JTdXJ2ZXlQYWdlQ29tcG9uZW50LCBwcm9wcyk7XG59KTtcbiIsImltcG9ydCB7IFF1ZXN0aW9uQWRvcm5lclZpZXdNb2RlbCwgdG9nZ2xlSG92ZXJlZCB9IGZyb20gXCJzdXJ2ZXktY3JlYXRvci1jb3JlXCI7XG5pbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBSZWFjdERyYWdFdmVudCwgUmVhY3RNb3VzZUV2ZW50IH0gZnJvbSBcIi4uL2V2ZW50c1wiO1xuaW1wb3J0IHsgQmFzZSwgUXVlc3Rpb24gfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7XG4gIFN1cnZleUFjdGlvbkJhcixcbiAgUmVhY3RFbGVtZW50RmFjdG9yeSxcbiAgU3VydmV5RWxlbWVudEJhc2UsXG4gIFN1cnZleVF1ZXN0aW9uLFxuICBhdHRhY2hLZXkyY2xpY2ssXG4gIFN2Z0ljb24sXG4gIFBvcHVwXG59IGZyb20gXCJzdXJ2ZXktcmVhY3QtdWlcIjtcbmltcG9ydCB7IFF1ZXN0aW9uQWRvcm5lckNvbXBvbmVudCwgUXVlc3Rpb25BZG9ybmVyQ29tcG9uZW50UHJvcHMgfSBmcm9tIFwiLi9RdWVzdGlvblwiO1xuXG5leHBvcnQgY2xhc3MgUGFuZWxBZG9ybmVyQ29tcG9uZW50IGV4dGVuZHMgUXVlc3Rpb25BZG9ybmVyQ29tcG9uZW50IHtcbiAgcmVuZGVyRWxlbWVudFBsYWNlaG9sZGVyKCk6IEpTWC5FbGVtZW50IHtcbiAgICBpZiAoIXRoaXMubW9kZWwuaXNFbXB0eUVsZW1lbnQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtcGFuZWxfX3BsYWNlaG9sZGVyX2ZyYW1lXCI+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLXBhbmVsX19wbGFjZWhvbGRlclwiPlxuICAgICAgICAgIHt0aGlzLm1vZGVsLnBsYWNlaG9sZGVyVGV4dH1cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIHt0aGlzLm1vZGVsLnNob3dBZGRRdWVzdGlvbkJ1dHRvbiA/IGF0dGFjaEtleTJjbGljayg8ZGl2XG4gICAgICAgICAgY2xhc3NOYW1lPVwic3ZjLXBhbmVsX19hZGQtbmV3LXF1ZXN0aW9uIHN2Yy1hY3Rpb24tYnV0dG9uXCJcbiAgICAgICAgICBvbkNsaWNrPXsoZSkgPT4ge1xuICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgIHRoaXMubW9kZWwuYWRkTmV3UXVlc3Rpb24oKTtcbiAgICAgICAgICB9fVxuICAgICAgICA+XG4gICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwic3ZjLXRleHQgc3ZjLXRleHQtLW5vcm1hbCBzdmMtdGV4dC0tYm9sZFwiPlxuICAgICAgICAgICAge3RoaXMubW9kZWwuYWRkTmV3UXVlc3Rpb25UZXh0fVxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9kaXY+KSA6IG51bGx9XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJGb290ZXIoKTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiAoPFJlYWN0LkZyYWdtZW50PlxuICAgICAgeyF0aGlzLm1vZGVsLmlzRW1wdHlFbGVtZW50ICYmIHRoaXMubW9kZWwuZWxlbWVudC5pc1BhbmVsICYmIHRoaXMubW9kZWwuc2hvd0FkZFF1ZXN0aW9uQnV0dG9uID8gYXR0YWNoS2V5MmNsaWNrKFxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy1wYW5lbF9fYWRkLW5ldy1xdWVzdGlvbi1jb250YWluZXJcIj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzc05hbWU9XCJzdmMtcGFuZWxfX2FkZC1uZXctcXVlc3Rpb24gc3ZjLWFjdGlvbi1idXR0b25cIlxuICAgICAgICAgICAgb25DbGljaz17KGUpID0+IHtcbiAgICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgICAgdGhpcy5tb2RlbC5hZGROZXdRdWVzdGlvbigpO1xuICAgICAgICAgICAgfX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJzdmMtdGV4dCBzdmMtdGV4dC0tbm9ybWFsIHN2Yy10ZXh0LS1ib2xkXCI+XG4gICAgICAgICAgICAgIHt0aGlzLm1vZGVsLmFkZE5ld1F1ZXN0aW9uVGV4dH1cbiAgICAgICAgICAgIDwvc3Bhbj5cblxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIHthdHRhY2hLZXkyY2xpY2soPGJ1dHRvblxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICBvbkNsaWNrPXsoZSkgPT4ge1xuICAgICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgICB0aGlzLm1vZGVsLnF1ZXN0aW9uVHlwZVNlbGVjdG9yTW9kZWwuYWN0aW9uKCk7XG4gICAgICAgICAgICB9fVxuICAgICAgICAgICAgY2xhc3NOYW1lPVwic3ZjLXBhbmVsX19xdWVzdGlvbi10eXBlLXNlbGVjdG9yXCJcbiAgICAgICAgICAgIHRpdGxlPXt0aGlzLm1vZGVsLmFkZE5ld1F1ZXN0aW9uVGV4dH1cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJzdmMtcGFuZWxfX3F1ZXN0aW9uLXR5cGUtc2VsZWN0b3ItaWNvblwiPlxuICAgICAgICAgICAgICA8U3ZnSWNvblxuICAgICAgICAgICAgICAgIGljb25OYW1lPXt0aGlzLm1vZGVsLnF1ZXN0aW9uVHlwZVNlbGVjdG9yTW9kZWwuaWNvbk5hbWV9XG4gICAgICAgICAgICAgICAgc2l6ZT17MjR9XG4gICAgICAgICAgICAgID48L1N2Z0ljb24+XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8UG9wdXAgbW9kZWw9e3RoaXMubW9kZWwucXVlc3Rpb25UeXBlU2VsZWN0b3JNb2RlbC5wb3B1cE1vZGVsfT48L1BvcHVwPlxuICAgICAgICAgIDwvYnV0dG9uPil9XG4gICAgICAgIDwvZGl2PikgOiBudWxsfVxuXG4gICAgICB7c3VwZXIucmVuZGVyRm9vdGVyKCl9XG4gICAgPC9SZWFjdC5GcmFnbWVudD4pO1xuICB9XG59XG5cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFxuICBcInN2Yy1wYW5lbFwiLFxuICAocHJvcHM6IFF1ZXN0aW9uQWRvcm5lckNvbXBvbmVudFByb3BzKSA9PiB7XG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoUGFuZWxBZG9ybmVyQ29tcG9uZW50LCBwcm9wcyk7XG4gIH1cbik7XG4iLCJpbXBvcnQgeyBRdWVzdGlvbkFkb3JuZXJWaWV3TW9kZWwsIHRvZ2dsZUhvdmVyZWQgfSBmcm9tIFwic3VydmV5LWNyZWF0b3ItY29yZVwiO1xuaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgUmVhY3REcmFnRXZlbnQsIFJlYWN0TW91c2VFdmVudCB9IGZyb20gXCIuLi9ldmVudHNcIjtcbmltcG9ydCB7IEJhc2UsIFF1ZXN0aW9uIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQge1xuICBTdXJ2ZXlBY3Rpb25CYXIsXG4gIFJlYWN0RWxlbWVudEZhY3RvcnksXG4gIFN1cnZleVF1ZXN0aW9uLFxuICBhdHRhY2hLZXkyY2xpY2ssXG4gIFN2Z0ljb24sXG4gIFBvcHVwXG59IGZyb20gXCJzdXJ2ZXktcmVhY3QtdWlcIjtcbmltcG9ydCB7IENyZWF0b3JNb2RlbEVsZW1lbnQgfSBmcm9tIFwiLi4vTW9kZWxFbGVtZW50XCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUXVlc3Rpb25BZG9ybmVyQ29tcG9uZW50UHJvcHMge1xuICBlbGVtZW50OiBKU1guRWxlbWVudDtcbiAgcXVlc3Rpb246IFF1ZXN0aW9uO1xuICBjb21wb25lbnREYXRhOiBhbnk7XG59XG5cbmV4cG9ydCBjbGFzcyBRdWVzdGlvbkFkb3JuZXJDb21wb25lbnQgZXh0ZW5kcyBDcmVhdG9yTW9kZWxFbGVtZW50PFxuICBRdWVzdGlvbkFkb3JuZXJDb21wb25lbnRQcm9wcyxcbiAgYW55XG4+IHtcbiAgcHJpdmF0ZSBtb2RlbFZhbHVlOiBRdWVzdGlvbkFkb3JuZXJWaWV3TW9kZWw7XG4gIHByb3RlY3RlZCByb290UmVmOiBSZWFjdC5SZWZPYmplY3Q8SFRNTERpdkVsZW1lbnQ+O1xuXG4gIHByb3RlY3RlZCBjcmVhdGVNb2RlbCgpOiB2b2lkIHtcbiAgICB0aGlzLm1vZGVsVmFsdWUgPSB0aGlzLmNyZWF0ZVF1ZXN0aW9uVmlld01vZGVsKCk7XG4gIH1cbiAgcHJvdGVjdGVkIGNyZWF0ZVF1ZXN0aW9uVmlld01vZGVsKCk6IFF1ZXN0aW9uQWRvcm5lclZpZXdNb2RlbCB7XG4gICAgcmV0dXJuIG5ldyBRdWVzdGlvbkFkb3JuZXJWaWV3TW9kZWwoXG4gICAgICB0aGlzLnByb3BzLmNvbXBvbmVudERhdGEsXG4gICAgICB0aGlzLnByb3BzLnF1ZXN0aW9uLFxuICAgICAgbnVsbFxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFVwZGF0ZWRNb2RlbFByb3BzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gW1wicXVlc3Rpb25cIiwgXCJjb21wb25lbnREYXRhXCJdO1xuICB9XG4gIHB1YmxpYyBnZXQgbW9kZWwoKTogUXVlc3Rpb25BZG9ybmVyVmlld01vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5tb2RlbFZhbHVlO1xuICB9XG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnQoKTogQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMubW9kZWw7XG4gIH1cbiAgcHJvdGVjdGVkIGNhblJlbmRlcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gc3VwZXIuY2FuUmVuZGVyKCkgJiYgIXRoaXMubW9kZWwuaXNEcmFnZ2VkO1xuICB9XG5cbiAgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgY29uc3QgYWxsb3dJbnRlcmFjdGlvbnMgPSB0aGlzLm1vZGVsLmVsZW1lbnRcbiAgICAgIC5pc0ludGVyYWN0aXZlRGVzaWduRWxlbWVudDtcbiAgICBjb25zdCBjb250ZW50ID0gdGhpcy5yZW5kZXJDb250ZW50KGFsbG93SW50ZXJhY3Rpb25zKTtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdlxuICAgICAgICByZWY9e3RoaXMucm9vdFJlZn1cbiAgICAgICAgZGF0YS1zdi1kcm9wLXRhcmdldC1zdXJ2ZXktZWxlbWVudD17dGhpcy5tb2RlbC5lbGVtZW50Lm5hbWUgfHwgbnVsbH1cbiAgICAgICAgY2xhc3NOYW1lPXtcInN2Yy1xdWVzdGlvbl9fYWRvcm5lclwiICsgdGhpcy5tb2RlbC5yb290Q3NzKCl9XG4gICAgICAgIG9uTW91c2VPdXQ9e2UgPT4gYWxsb3dJbnRlcmFjdGlvbnMgJiYgdGhpcy5tb2RlbC5ob3ZlcihlLm5hdGl2ZUV2ZW50LCBlLmN1cnJlbnRUYXJnZXQpfVxuICAgICAgICBvbk1vdXNlT3Zlcj17ZSA9PiBhbGxvd0ludGVyYWN0aW9ucyAmJiB0aGlzLm1vZGVsLmhvdmVyKGUubmF0aXZlRXZlbnQsIGUuY3VycmVudFRhcmdldCl9XG4gICAgICA+XG4gICAgICAgIHtjb250ZW50fVxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyQ29udGVudChhbGxvd0ludGVyYWN0aW9uczogYm9vbGVhbik6IEpTWC5FbGVtZW50IHtcbiAgICB2YXIgY29udGVudCA9IHRoaXMucmVuZGVyRWxlbWVudENvbnRlbnQoKTtcbiAgICBpZiAoIWFsbG93SW50ZXJhY3Rpb25zKSByZXR1cm4gPD57IGNvbnRlbnQgfXt0aGlzLnJlbmRlckZvb3RlcigpfTwvPjtcbiAgICByZXR1cm4gYXR0YWNoS2V5MmNsaWNrKFxuICAgICAgPGRpdlxuICAgICAgICBjbGFzc05hbWU9e1wic3ZjLXF1ZXN0aW9uX19jb250ZW50IFwiICsgdGhpcy5tb2RlbC5jc3MoKX1cbiAgICAgICAgb25DbGljaz17KGUpID0+IHRoaXMubW9kZWwuc2VsZWN0KHRoaXMubW9kZWwsIG5ldyBSZWFjdE1vdXNlRXZlbnQoZSkpfVxuICAgICAgPlxuICAgICAgICB7dGhpcy5yZW5kZXJIZWFkZXIoKX1cbiAgICAgICAge2NvbnRlbnR9XG4gICAgICAgIHt0aGlzLnJlbmRlckZvb3RlcigpfVxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVySGVhZGVyKCk6IEpTWC5FbGVtZW50IHtcbiAgICByZXR1cm4gUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5jcmVhdGVFbGVtZW50KFwic3ZjLXF1ZXN0aW9uLWhlYWRlclwiLCB7IG1vZGVsOiB0aGlzLm1vZGVsIH0pO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJGb290ZXIoKTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiBSZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLmNyZWF0ZUVsZW1lbnQoXCJzdmMtcXVlc3Rpb24tZm9vdGVyXCIsIHsgY2xhc3NOYW1lOiBcInN2Yy1xdWVzdGlvbl9fY29udGVudC1hY3Rpb25zXCIsIG1vZGVsOiB0aGlzLm1vZGVsIH0pO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJFbGVtZW50Q29udGVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuIChcbiAgICAgIDw+XG4gICAgICAgIHt0aGlzLnByb3BzLmVsZW1lbnR9XG4gICAgICAgIHt0aGlzLnJlbmRlckVsZW1lbnRQbGFjZWhvbGRlcigpfVxuICAgICAgPC8+XG4gICAgKTtcbiAgfVxuICByZW5kZXJFbGVtZW50UGxhY2Vob2xkZXIoKTogSlNYLkVsZW1lbnQge1xuICAgIGlmICghdGhpcy5tb2RlbC5pc0VtcHR5RWxlbWVudCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy1wYW5lbF9fcGxhY2Vob2xkZXJfZnJhbWVcIj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtcGFuZWxfX3BsYWNlaG9sZGVyXCI+XG4gICAgICAgICAge3RoaXMubW9kZWwucGxhY2Vob2xkZXJUZXh0fVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXG4gIFwic3ZjLXF1ZXN0aW9uXCIsXG4gIChwcm9wczogUXVlc3Rpb25BZG9ybmVyQ29tcG9uZW50UHJvcHMpID0+IHtcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChRdWVzdGlvbkFkb3JuZXJDb21wb25lbnQsIHByb3BzKTtcbiAgfVxuKTtcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFF1ZXN0aW9uRHJvcGRvd25BZG9ybmVyVmlld01vZGVsIH0gZnJvbSBcInN1cnZleS1jcmVhdG9yLWNvcmVcIjtcbmltcG9ydCB7IEl0ZW1WYWx1ZSwgUXVlc3Rpb25Ecm9wZG93bk1vZGVsLCBRdWVzdGlvblNlbGVjdEJhc2UsIFN1cnZleU1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBSZWFjdEVsZW1lbnRGYWN0b3J5LCBSZWFjdFN1cnZleUVsZW1lbnRzV3JhcHBlciB9IGZyb20gXCJzdXJ2ZXktcmVhY3QtdWlcIjtcbmltcG9ydCB7XG4gIFF1ZXN0aW9uQWRvcm5lckNvbXBvbmVudCxcbiAgUXVlc3Rpb25BZG9ybmVyQ29tcG9uZW50UHJvcHNcbn0gZnJvbSBcIi4vUXVlc3Rpb25cIjtcbmltcG9ydCB7IEFjdGlvbkJ1dHRvbiB9IGZyb20gXCIuLi9BY3Rpb25CdXR0b25cIjtcblxuZXhwb3J0IGNsYXNzIFF1ZXN0aW9uRHJvcGRvd25BZG9ybmVyQ29tcG9uZW50IGV4dGVuZHMgUXVlc3Rpb25BZG9ybmVyQ29tcG9uZW50IHtcbiAgY29uc3RydWN0b3IocHJvcHM6IFF1ZXN0aW9uQWRvcm5lckNvbXBvbmVudFByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICB9XG4gIHByb3RlY3RlZCBjcmVhdGVRdWVzdGlvblZpZXdNb2RlbCgpOiBRdWVzdGlvbkRyb3Bkb3duQWRvcm5lclZpZXdNb2RlbCB7XG4gICAgcmV0dXJuIG5ldyBRdWVzdGlvbkRyb3Bkb3duQWRvcm5lclZpZXdNb2RlbChcbiAgICAgIHRoaXMucHJvcHMuY29tcG9uZW50RGF0YSxcbiAgICAgIHRoaXMucHJvcHMucXVlc3Rpb24gYXMgUXVlc3Rpb25Ecm9wZG93bk1vZGVsLFxuICAgICAgbnVsbFxuICAgICk7XG4gIH1cbiAgcHVibGljIGdldCBkcm9wZG93bk1vZGVsKCk6IFF1ZXN0aW9uRHJvcGRvd25BZG9ybmVyVmlld01vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5tb2RlbCBhcyBRdWVzdGlvbkRyb3Bkb3duQWRvcm5lclZpZXdNb2RlbDtcbiAgfVxuICBwdWJsaWMgZ2V0IHF1ZXN0aW9uKCk6IFF1ZXN0aW9uU2VsZWN0QmFzZSB7XG4gICAgcmV0dXJuIHRoaXMuZHJvcGRvd25Nb2RlbC5xdWVzdGlvbiBhcyBRdWVzdGlvblNlbGVjdEJhc2U7XG4gIH1cblxuICByZW5kZXJFbGVtZW50UGxhY2Vob2xkZXIoKTogSlNYLkVsZW1lbnQge1xuICAgIGNvbnN0IHRleHRTdHlsZSA9ICh0aGlzLnF1ZXN0aW9uIGFzIGFueSkudGV4dFN0eWxlO1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzTmFtZT1cInN2Yy1xdWVzdGlvbl9fZHJvcGRvd24tY2hvaWNlcy0td3JhcHBlclwiPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy1xdWVzdGlvbl9fZHJvcGRvd24tY2hvaWNlc1wiPlxuICAgICAgICAgIHsodGhpcy5kcm9wZG93bk1vZGVsLmdldFJlbmRlcmVkSXRlbXMoKSB8fCBbXSkubWFwKFxuICAgICAgICAgICAgKGl0ZW06IEl0ZW1WYWx1ZSwgaW5kZXg6IG51bWJlcikgPT4gKFxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPXt0aGlzLmRyb3Bkb3duTW9kZWwuZ2V0Q2hvaWNlQ3NzKCl9XG4gICAgICAgICAgICAgICAga2V5PXtgZWRpdGFibGVfY2hvaWNlXyR7aW5kZXh9YH1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHtSZWFjdFN1cnZleUVsZW1lbnRzV3JhcHBlci53cmFwSXRlbVZhbHVlKHRoaXMucXVlc3Rpb24uc3VydmV5IGFzIFN1cnZleU1vZGVsLFxuICAgICAgICAgICAgICAgICAgUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgICAgICAgICAgICBcInN1cnZleS1yYWRpb2dyb3VwLWl0ZW1cIixcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uOiB0aGlzLnF1ZXN0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgIGNzc0NsYXNzZXM6IHRoaXMucXVlc3Rpb24uY3NzQ2xhc3NlcyxcbiAgICAgICAgICAgICAgICAgICAgICBpc0Rpc3BsYXlNb2RlOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgIGl0ZW06IGl0ZW0sXG4gICAgICAgICAgICAgICAgICAgICAgdGV4dFN0eWxlOiB0ZXh0U3R5bGUsXG4gICAgICAgICAgICAgICAgICAgICAgaW5kZXg6IGluZGV4LFxuICAgICAgICAgICAgICAgICAgICAgIGlzQ2hlY2tlZDogdGhpcy5xdWVzdGlvbi52YWx1ZSA9PT0gaXRlbS52YWx1ZVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgdGhpcy5xdWVzdGlvbixcbiAgICAgICAgICAgICAgICAgIGl0ZW1cbiAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIClcbiAgICAgICAgICApfVxuICAgICAgICA8L2Rpdj5cbiAgICAgICAge3RoaXMuZHJvcGRvd25Nb2RlbC5uZWVkVG9Db2xsYXBzZSA/XG4gICAgICAgICAgPEFjdGlvbkJ1dHRvblxuICAgICAgICAgICAgY2xpY2s9e3RoaXMuZHJvcGRvd25Nb2RlbC5zd2l0Y2hDb2xsYXBzZX1cbiAgICAgICAgICAgIHRleHQ9e3RoaXMuZHJvcGRvd25Nb2RlbC5nZXRCdXR0b25UZXh0KCl9XG4gICAgICAgICAgICBhbGxvd0J1YmJsZT17dHJ1ZX1cbiAgICAgICAgICA+PC9BY3Rpb25CdXR0b24+IDpcbiAgICAgICAgICBudWxsXG4gICAgICAgIH1cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXG4gIFwic3ZjLWRyb3Bkb3duLXF1ZXN0aW9uXCIsXG4gIChwcm9wczogUXVlc3Rpb25BZG9ybmVyQ29tcG9uZW50UHJvcHMpID0+IHtcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChRdWVzdGlvbkRyb3Bkb3duQWRvcm5lckNvbXBvbmVudCwgcHJvcHMpO1xuICB9XG4pO1xuIiwiaW1wb3J0IHsgUXVlc3Rpb25BZG9ybmVyVmlld01vZGVsLCB0b2dnbGVIb3ZlcmVkIH0gZnJvbSBcInN1cnZleS1jcmVhdG9yLWNvcmVcIjtcbmltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFJlYWN0RHJhZ0V2ZW50LCBSZWFjdE1vdXNlRXZlbnQgfSBmcm9tIFwiLi4vZXZlbnRzXCI7XG5pbXBvcnQgeyBCYXNlLCBRdWVzdGlvbiB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHtcbiAgU3VydmV5QWN0aW9uQmFyLFxuICBSZWFjdEVsZW1lbnRGYWN0b3J5LFxuICBTdXJ2ZXlFbGVtZW50QmFzZSxcbiAgU3VydmV5UXVlc3Rpb24sXG4gIGF0dGFjaEtleTJjbGljayxcbiAgU3ZnSWNvbixcbiAgUG9wdXBcbn0gZnJvbSBcInN1cnZleS1yZWFjdC11aVwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFF1ZXN0aW9uV3JhcHBlckZvb3RlclByb3BzIHtcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICBtb2RlbDogUXVlc3Rpb25BZG9ybmVyVmlld01vZGVsO1xufVxuZXhwb3J0IGNsYXNzIFF1ZXN0aW9uV3JhcHBlckZvb3RlciBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDxRdWVzdGlvbldyYXBwZXJGb290ZXJQcm9wcywgYW55PiB7XG4gIHJlbmRlcigpOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuICg8ZGl2IGNsYXNzTmFtZT17dGhpcy5wcm9wcy5jbGFzc05hbWV9PlxuICAgICAgPFN1cnZleUFjdGlvbkJhciBtb2RlbD17dGhpcy5wcm9wcy5tb2RlbC5hY3Rpb25Db250YWluZXJ9IGhhbmRsZUNsaWNrPXtmYWxzZX0+PC9TdXJ2ZXlBY3Rpb25CYXI+XG4gICAgPC9kaXY+KTtcbiAgfVxufVxuXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcbiAgXCJzdmMtcXVlc3Rpb24tZm9vdGVyXCIsXG4gIChwcm9wczogUXVlc3Rpb25XcmFwcGVyRm9vdGVyUHJvcHMpID0+IHtcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChRdWVzdGlvbldyYXBwZXJGb290ZXIsIHByb3BzKTtcbiAgfVxuKTtcblxuIiwiaW1wb3J0IHsgUXVlc3Rpb25BZG9ybmVyVmlld01vZGVsLCB0b2dnbGVIb3ZlcmVkIH0gZnJvbSBcInN1cnZleS1jcmVhdG9yLWNvcmVcIjtcbmltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFJlYWN0RHJhZ0V2ZW50LCBSZWFjdE1vdXNlRXZlbnQgfSBmcm9tIFwiLi4vZXZlbnRzXCI7XG5pbXBvcnQgeyBCYXNlLCBRdWVzdGlvbiB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHtcbiAgU3VydmV5QWN0aW9uQmFyLFxuICBSZWFjdEVsZW1lbnRGYWN0b3J5LFxuICBTdXJ2ZXlFbGVtZW50QmFzZSxcbiAgU3VydmV5UXVlc3Rpb24sXG4gIGF0dGFjaEtleTJjbGljayxcbiAgU3ZnSWNvbixcbiAgUG9wdXBcbn0gZnJvbSBcInN1cnZleS1yZWFjdC11aVwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFF1ZXN0aW9uV3JhcHBlckhlYWRlclByb3BzIHtcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICBtb2RlbDogUXVlc3Rpb25BZG9ybmVyVmlld01vZGVsO1xufVxuXG5leHBvcnQgY2xhc3MgUXVlc3Rpb25XcmFwcGVySGVhZGVyIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50PFF1ZXN0aW9uV3JhcHBlckhlYWRlclByb3BzLCBhbnk+IHtcbiAgcmVuZGVyKCk6IEpTWC5FbGVtZW50IHtcbiAgICBpZiAoIXRoaXMucHJvcHMubW9kZWwuYWxsb3dEcmFnZ2luZykgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtcInN2Yy1xdWVzdGlvbl9fZHJhZy1hcmVhXCJ9XG4gICAgICAgIG9uUG9pbnRlckRvd249eyhldmVudDogYW55KSA9PlxuICAgICAgICAgIHRoaXMucHJvcHMubW9kZWwub25Qb2ludGVyRG93bihldmVudClcbiAgICAgICAgfVxuICAgICAgPlxuICAgICAgICA8U3ZnSWNvbiBjbGFzc05hbWU9XCJzdmMtcXVlc3Rpb25fX2RyYWctZWxlbWVudFwiIHNpemU9ezI0fSBpY29uTmFtZT17XCJpY29uLWRyYWctYXJlYS1pbmRpY2F0b3JfMjR4MTZcIn0+PC9TdmdJY29uPlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxufVxuXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcbiAgXCJzdmMtcXVlc3Rpb24taGVhZGVyXCIsXG4gIChwcm9wczogUXVlc3Rpb25XcmFwcGVySGVhZGVyUHJvcHMpID0+IHtcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChRdWVzdGlvbldyYXBwZXJIZWFkZXIsIHByb3BzKTtcbiAgfVxuKTtcbiIsImltcG9ydCB7XG4gIFF1ZXN0aW9uSW1hZ2VBZG9ybmVyVmlld01vZGVsLFxuICBRdWVzdGlvbkFkb3JuZXJWaWV3TW9kZWxcbn0gZnJvbSBcInN1cnZleS1jcmVhdG9yLWNvcmVcIjtcbmltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IGF0dGFjaEtleTJjbGljaywgUmVhY3RFbGVtZW50RmFjdG9yeSwgU3ZnSWNvbiB9IGZyb20gXCJzdXJ2ZXktcmVhY3QtdWlcIjtcbmltcG9ydCB7XG4gIFF1ZXN0aW9uQWRvcm5lckNvbXBvbmVudCxcbiAgUXVlc3Rpb25BZG9ybmVyQ29tcG9uZW50UHJvcHNcbn0gZnJvbSBcIi4vUXVlc3Rpb25cIjtcblxuZXhwb3J0IGNsYXNzIFF1ZXN0aW9uSW1hZ2VBZG9ybmVyQ29tcG9uZW50IGV4dGVuZHMgUXVlc3Rpb25BZG9ybmVyQ29tcG9uZW50IHtcbiAgY29uc3RydWN0b3IocHJvcHM6IFF1ZXN0aW9uQWRvcm5lckNvbXBvbmVudFByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMucm9vdFJlZiA9IFJlYWN0LmNyZWF0ZVJlZigpO1xuICB9XG4gIHByb3RlY3RlZCBjcmVhdGVRdWVzdGlvblZpZXdNb2RlbCgpOiBRdWVzdGlvbkFkb3JuZXJWaWV3TW9kZWwge1xuICAgIHJldHVybiBuZXcgUXVlc3Rpb25JbWFnZUFkb3JuZXJWaWV3TW9kZWwoXG4gICAgICB0aGlzLnByb3BzLmNvbXBvbmVudERhdGEsXG4gICAgICB0aGlzLnByb3BzLnF1ZXN0aW9uIGFzIGFueSxcbiAgICAgIG51bGwsXG4gICAgICBudWxsXG4gICAgKTtcbiAgfVxuICBwdWJsaWMgZ2V0IGltYWdlTW9kZWwoKTogUXVlc3Rpb25JbWFnZUFkb3JuZXJWaWV3TW9kZWwge1xuICAgIHJldHVybiB0aGlzLm1vZGVsIGFzIFF1ZXN0aW9uSW1hZ2VBZG9ybmVyVmlld01vZGVsO1xuICB9XG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIHN1cGVyLmNvbXBvbmVudERpZE1vdW50KCk7XG4gICAgdGhpcy5pbWFnZU1vZGVsLnF1ZXN0aW9uUm9vdCA9IHRoaXMucm9vdFJlZi5jdXJyZW50O1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJIZWFkZXIoKTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiAoPFJlYWN0LkZyYWdtZW50PlxuICAgICAgPGlucHV0XG4gICAgICAgIHR5cGU9XCJmaWxlXCJcbiAgICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgICAgICAgdGFiSW5kZXg9ey0xfVxuICAgICAgICBhY2NlcHQ9XCJpbWFnZS8qXCJcbiAgICAgICAgY2xhc3NOYW1lPVwic3ZjLWNob29zZS1maWxlLWlucHV0XCJcbiAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICBwb3NpdGlvbjogXCJhYnNvbHV0ZVwiLFxuICAgICAgICAgIG9wYWNpdHk6IDAsXG4gICAgICAgICAgd2lkdGg6IFwiMXB4XCIsXG4gICAgICAgICAgaGVpZ2h0OiBcIjFweFwiLFxuICAgICAgICAgIG92ZXJmbG93OiBcImhpZGRlblwiXG4gICAgICAgIH19XG4gICAgICAvPlxuXG4gICAgICB7c3VwZXIucmVuZGVySGVhZGVyKCl9XG4gICAgPC9SZWFjdC5GcmFnbWVudD4pO1xuICB9XG4gIHJlbmRlckVsZW1lbnRQbGFjZWhvbGRlcigpOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLWltYWdlLXF1ZXN0aW9uLWNvbnRyb2xzXCI+XG4gICAgICAgIHt0aGlzLm1vZGVsLmFsbG93RWRpdCA/IGF0dGFjaEtleTJjbGljayg8c3BhblxuICAgICAgICAgIGNsYXNzTmFtZT1cInN2Yy1pbWFnZS1xdWVzdGlvbi1jb250cm9sc19fYnV0dG9uIHN2Yy1pbWFnZS1xdWVzdGlvbi1jb250cm9sc19fY2hvb3NlLWZpbGVcIlxuICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHRoaXMuaW1hZ2VNb2RlbC5jaG9vc2VGaWxlKHRoaXMuaW1hZ2VNb2RlbCl9XG4gICAgICAgID5cbiAgICAgICAgICA8U3ZnSWNvbiBzaXplPXsyNH0gaWNvbk5hbWU9e1wiaWNvbi1maWxlXCJ9PjwvU3ZnSWNvbj5cbiAgICAgICAgPC9zcGFuPikgOiBudWxsfVxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxufVxuXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcbiAgXCJzdmMtaW1hZ2UtcXVlc3Rpb25cIixcbiAgKHByb3BzOiBRdWVzdGlvbkFkb3JuZXJDb21wb25lbnRQcm9wcykgPT4ge1xuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFF1ZXN0aW9uSW1hZ2VBZG9ybmVyQ29tcG9uZW50LCBwcm9wcyk7XG4gIH1cbik7XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBCYXNlIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBRdWVzdGlvblJhdGluZ0Fkb3JuZXJWaWV3TW9kZWwgfSBmcm9tIFwic3VydmV5LWNyZWF0b3ItY29yZVwiO1xuaW1wb3J0IHsgYXR0YWNoS2V5MmNsaWNrLCBSZWFjdEVsZW1lbnRGYWN0b3J5LCBTdmdJY29uIH0gZnJvbSBcInN1cnZleS1yZWFjdC11aVwiO1xuaW1wb3J0IHsgUXVlc3Rpb25BZG9ybmVyQ29tcG9uZW50UHJvcHMgfSBmcm9tIFwiLi9RdWVzdGlvblwiO1xuaW1wb3J0IHsgQ3JlYXRvck1vZGVsRWxlbWVudCB9IGZyb20gXCIuLi9Nb2RlbEVsZW1lbnRcIjtcblxuZXhwb3J0IGNsYXNzIFF1ZXN0aW9uUmF0aW5nQWRvcm5lckNvbXBvbmVudCBleHRlbmRzIENyZWF0b3JNb2RlbEVsZW1lbnQ8UXVlc3Rpb25BZG9ybmVyQ29tcG9uZW50UHJvcHMsIGFueT4ge1xuICBwcml2YXRlIG1vZGVsVmFsdWU6IFF1ZXN0aW9uUmF0aW5nQWRvcm5lclZpZXdNb2RlbDtcblxuICBwcm90ZWN0ZWQgY3JlYXRlTW9kZWwoKTogdm9pZCB7XG4gICAgdGhpcy5tb2RlbFZhbHVlID0gdGhpcy5jcmVhdGVRdWVzdGlvblZpZXdNb2RlbCgpO1xuICB9XG4gIHByb3RlY3RlZCBjcmVhdGVRdWVzdGlvblZpZXdNb2RlbCgpOiBRdWVzdGlvblJhdGluZ0Fkb3JuZXJWaWV3TW9kZWwge1xuICAgIHJldHVybiBuZXcgUXVlc3Rpb25SYXRpbmdBZG9ybmVyVmlld01vZGVsKFxuICAgICAgdGhpcy5wcm9wcy5jb21wb25lbnREYXRhLFxuICAgICAgdGhpcy5wcm9wcy5xdWVzdGlvbiBhcyBhbnksXG4gICAgICBudWxsXG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0VXBkYXRlZE1vZGVsUHJvcHMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBbXCJxdWVzdGlvblwiLCBcImNvbXBvbmVudERhdGFcIl07XG4gIH1cbiAgcHVibGljIGdldCByYXRpbmdNb2RlbCgpOiBRdWVzdGlvblJhdGluZ0Fkb3JuZXJWaWV3TW9kZWwge1xuICAgIHJldHVybiB0aGlzLm1vZGVsIGFzIFF1ZXN0aW9uUmF0aW5nQWRvcm5lclZpZXdNb2RlbDtcbiAgfVxuICBwdWJsaWMgZ2V0IG1vZGVsKCk6IFF1ZXN0aW9uUmF0aW5nQWRvcm5lclZpZXdNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMubW9kZWxWYWx1ZTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCk6IEJhc2Uge1xuICAgIHJldHVybiB0aGlzLm1vZGVsO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICBjb25zdCBtb2RlbCA9IHRoaXMucmF0aW5nTW9kZWw7XG4gICAgcmV0dXJuICg8PlxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtcmF0aW5nLXF1ZXN0aW9uLWNvbnRlbnRcIj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtcmF0aW5nLXF1ZXN0aW9uLWNvbnRyb2xzIHN2Yy1pdGVtLXZhbHVlLWNvbnRyb2xzXCI+XG4gICAgICAgICAge21vZGVsLmFsbG93UmVtb3ZlID8gYXR0YWNoS2V5MmNsaWNrKDxzcGFuXG4gICAgICAgICAgICBjbGFzc05hbWU9XCJzdmMtaXRlbS12YWx1ZS1jb250cm9sc19fYnV0dG9uIHN2Yy1pdGVtLXZhbHVlLWNvbnRyb2xzX19yZW1vdmVcIlxuICAgICAgICAgICAgYXJpYS1sYWJlbD17bW9kZWwucmVtb3ZlVG9vbHRpcH1cbiAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IG1vZGVsLnJlbW92ZUl0ZW0obW9kZWwpfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxTdmdJY29uIHNpemU9ezE2fSBpY29uTmFtZT17XCJpY29uLXJlbW92ZV8xNngxNlwifSB0aXRsZT17bW9kZWwucmVtb3ZlVG9vbHRpcH0+PC9TdmdJY29uPlxuICAgICAgICAgIDwvc3Bhbj4pIDogbnVsbH1cbiAgICAgICAgICB7bW9kZWwuYWxsb3dBZGQgPyBhdHRhY2hLZXkyY2xpY2soPHNwYW5cbiAgICAgICAgICAgIGNsYXNzTmFtZT1cInN2Yy1pdGVtLXZhbHVlLWNvbnRyb2xzX19idXR0b24gc3ZjLWl0ZW0tdmFsdWUtY29udHJvbHNfX2FkZFwiXG4gICAgICAgICAgICBhcmlhLWxhYmVsPXttb2RlbC5hZGRUb29sdGlwfVxuICAgICAgICAgICAgb25DbGljaz17KCkgPT4gbW9kZWwuYWRkSXRlbShtb2RlbCl9XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPFN2Z0ljb24gc2l6ZT17MTZ9IGljb25OYW1lPXtcImljb24tYWRkXzE2eDE2XCJ9IHRpdGxlPXttb2RlbC5hZGRUb29sdGlwfT48L1N2Z0ljb24+XG4gICAgICAgICAgPC9zcGFuPikgOiBudWxsfVxuICAgICAgICA8L2Rpdj5cbiAgICAgICAge3RoaXMucHJvcHMuZWxlbWVudH1cbiAgICAgIDwvZGl2PlxuICAgIDwvPik7XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXG4gIFwic3ZjLXJhdGluZy1xdWVzdGlvblwiLFxuICAocHJvcHM6IFF1ZXN0aW9uQWRvcm5lckNvbXBvbmVudFByb3BzKSA9PiB7XG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoUXVlc3Rpb25SYXRpbmdBZG9ybmVyQ29tcG9uZW50LCBwcm9wcyk7XG4gIH1cbik7XG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcbiAgXCJzdmMtcmF0aW5nLXF1ZXN0aW9uLWNvbnRlbnRcIixcbiAgKHByb3BzOiBRdWVzdGlvbkFkb3JuZXJDb21wb25lbnRQcm9wcykgPT4ge1xuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFF1ZXN0aW9uUmF0aW5nQWRvcm5lckNvbXBvbmVudCwgcHJvcHMpO1xuICB9XG4pO1xuIiwiaW1wb3J0IHtcbiAgUXVlc3Rpb25BZG9ybmVyVmlld01vZGVsXG59IGZyb20gXCJzdXJ2ZXktY3JlYXRvci1jb3JlXCI7XG5pbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQge1xuICBRdWVzdGlvbkFkb3JuZXJDb21wb25lbnQsXG4gIFF1ZXN0aW9uQWRvcm5lckNvbXBvbmVudFByb3BzXG59IGZyb20gXCIuL1F1ZXN0aW9uXCI7XG5pbXBvcnQgeyBhdHRhY2hLZXkyY2xpY2ssIFJlYWN0RWxlbWVudEZhY3RvcnksIFN2Z0ljb24gfSBmcm9tIFwic3VydmV5LXJlYWN0LXVpXCI7XG5cbmV4cG9ydCBjbGFzcyBRdWVzdGlvbldpZGdldEFkb3JuZXJDb21wb25lbnQgZXh0ZW5kcyBRdWVzdGlvbkFkb3JuZXJDb21wb25lbnQge1xuICBwcm90ZWN0ZWQgY3JlYXRlUXVlc3Rpb25WaWV3TW9kZWwoKTogUXVlc3Rpb25BZG9ybmVyVmlld01vZGVsIHtcbiAgICByZXR1cm4gbmV3IFF1ZXN0aW9uQWRvcm5lclZpZXdNb2RlbChcbiAgICAgIHRoaXMucHJvcHMuY29tcG9uZW50RGF0YSxcbiAgICAgIHRoaXMucHJvcHMucXVlc3Rpb24gYXMgYW55LFxuICAgICAgbnVsbFxuICAgICk7XG4gIH1cbiAgcHVibGljIGdldCB3aWRnZXRNb2RlbCgpOiBRdWVzdGlvbkFkb3JuZXJWaWV3TW9kZWwge1xuICAgIHJldHVybiB0aGlzLm1vZGVsIGFzIFF1ZXN0aW9uQWRvcm5lclZpZXdNb2RlbDtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyRWxlbWVudENvbnRlbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzTmFtZT17XCJzdmMtd2lkZ2V0X19jb250ZW50XCJ9XG4gICAgICA+XG4gICAgICAgIHt0aGlzLnByb3BzLmVsZW1lbnR9XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59XG5cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFxuICBcInN2Yy13aWRnZXQtcXVlc3Rpb25cIixcbiAgKHByb3BzOiBRdWVzdGlvbkFkb3JuZXJDb21wb25lbnRQcm9wcykgPT4ge1xuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFF1ZXN0aW9uV2lkZ2V0QWRvcm5lckNvbXBvbmVudCwgcHJvcHMpO1xuICB9XG4pO1xuIiwiaW1wb3J0IHsgUm93Vmlld01vZGVsIH0gZnJvbSBcInN1cnZleS1jcmVhdG9yLWNvcmVcIjtcbmltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IEJhc2UsIFF1ZXN0aW9uUm93TW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFJlYWN0RWxlbWVudEZhY3RvcnkgfSBmcm9tIFwic3VydmV5LXJlYWN0LXVpXCI7XG5pbXBvcnQgeyBDcmVhdG9yTW9kZWxFbGVtZW50IH0gZnJvbSBcIi4uL01vZGVsRWxlbWVudFwiO1xuXG5pbnRlcmZhY2UgUm93V3JhcHBlckNvbXBvbmVudFByb3BzIHtcbiAgZWxlbWVudDogSlNYLkVsZW1lbnQ7XG4gIGNvbXBvbmVudERhdGE6IGFueTtcbiAgcm93OiBRdWVzdGlvblJvd01vZGVsO1xufVxuXG5leHBvcnQgY2xhc3MgUm93V3JhcHBlciBleHRlbmRzIENyZWF0b3JNb2RlbEVsZW1lbnQ8XG4gIFJvd1dyYXBwZXJDb21wb25lbnRQcm9wcyxcbiAgYW55XG4+IHtcbiAgbW9kZWw6IFJvd1ZpZXdNb2RlbDtcbiAgY29uc3RydWN0b3IocHJvcHM6IFJvd1dyYXBwZXJDb21wb25lbnRQcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgfVxuICBwcm90ZWN0ZWQgY3JlYXRlTW9kZWwoKTogdm9pZCB7XG4gICAgdGhpcy5tb2RlbCA9IG5ldyBSb3dWaWV3TW9kZWwoXG4gICAgICB0aGlzLnByb3BzLmNvbXBvbmVudERhdGEuY3JlYXRvcixcbiAgICAgIHRoaXMucHJvcHMucm93LFxuICAgICAgbnVsbFxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFVwZGF0ZWRNb2RlbFByb3BzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gW1wicm93XCIsIFwiY29tcG9uZW50RGF0YVwiXTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCk6IEJhc2Uge1xuICAgIHJldHVybiB0aGlzLm1vZGVsO1xuICB9XG5cbiAgcmVuZGVyKCk6IEpTWC5FbGVtZW50IHtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdlxuICAgICAgICBrZXk9e1wic3ZjLXJvdy1cIiArIHRoaXMucHJvcHMucm93LmlkfVxuICAgICAgICBjbGFzc05hbWU9e3RoaXMubW9kZWwuY3NzQ2xhc3Nlc31cbiAgICAgID5cbiAgICAgICAge3RoaXMucHJvcHMuZWxlbWVudH1cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXG4gIFwic3ZjLXJvd1wiLFxuICAocHJvcHM6IFJvd1dyYXBwZXJDb21wb25lbnRQcm9wcykgPT4ge1xuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFJvd1dyYXBwZXIsIHByb3BzKTtcbiAgfVxuKTtcbiIsImRlY2xhcmUgdmFyIFJlZmxlY3Q6YW55O1xuXG5leHBvcnQgdmFyIF9fZGVjb3JhdGUgPSBmdW5jdGlvbihcbiAgZGVjb3JhdG9yczogYW55LFxuICB0YXJnZXQ6IGFueSxcbiAga2V5OiBhbnksXG4gIGRlc2M6IGFueVxuKSB7XG4gIHZhciBjID0gYXJndW1lbnRzLmxlbmd0aCxcbiAgICByID1cbiAgICAgIGMgPCAzXG4gICAgICAgID8gdGFyZ2V0XG4gICAgICAgIDogZGVzYyA9PT0gbnVsbFxuICAgICAgICAgID8gKGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KSlcbiAgICAgICAgICA6IGRlc2MsXG4gICAgZDtcbiAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0LmRlY29yYXRlID09PSBcImZ1bmN0aW9uXCIpXG4gICAgciA9IFJlZmxlY3QuZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpO1xuICBlbHNlXG4gICAgZm9yICh2YXIgaSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pXG4gICAgICBpZiAoKGQgPSBkZWNvcmF0b3JzW2ldKSlcbiAgICAgICAgciA9IChjIDwgMyA/IGQocikgOiBjID4gMyA/IGQodGFyZ2V0LCBrZXksIHIpIDogZCh0YXJnZXQsIGtleSkpIHx8IHI7XG4gIHJldHVybiBjID4gMyAmJiByICYmIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgciksIHI7XG59O1xuXG5leHBvcnQgdmFyIF9fYXNzaWduID1cbiAgT2JqZWN0W1wiYXNzaWduXCJdIHx8XG4gIGZ1bmN0aW9uKHRhcmdldCkge1xuICAgIGZvciAodmFyIHMsIGkgPSAxLCBuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IG47IGkrKykge1xuICAgICAgcyA9IGFyZ3VtZW50c1tpXTtcbiAgICAgIGZvciAodmFyIHAgaW4gcylcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSkgdGFyZ2V0W3BdID0gc1twXTtcbiAgICB9XG4gICAgcmV0dXJuIHRhcmdldDtcbiAgfTtcblxuZXhwb3J0IGZ1bmN0aW9uIF9fZXh0ZW5kcyh0aGlzQ2xhc3MsIGJhc2VDbGFzcykge1xuICBmb3IgKHZhciBwIGluIGJhc2VDbGFzcylcbiAgICBpZiAoYmFzZUNsYXNzLmhhc093blByb3BlcnR5KHApKSB0aGlzQ2xhc3NbcF0gPSBiYXNlQ2xhc3NbcF07XG4gIGZ1bmN0aW9uIF9fKCkge1xuICAgIHRoaXMuY29uc3RydWN0b3IgPSB0aGlzQ2xhc3M7XG4gIH1cbiAgdGhpc0NsYXNzLnByb3RvdHlwZSA9XG4gICAgYmFzZUNsYXNzID09PSBudWxsXG4gICAgICA/IE9iamVjdC5jcmVhdGUoYmFzZUNsYXNzKVxuICAgICAgOiAoKF9fLnByb3RvdHlwZSA9IGJhc2VDbGFzcy5wcm90b3R5cGUpLCBuZXcgX18oKSk7XG59XG5cbmV4cG9ydCB2YXIgX19zcHJlYWRBcnJheXMgPSBmdW5jdGlvbiAoKSB7XG4gIGZvciAodmFyIHMgPSAwLCBpID0gMCwgaWwgPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgaWw7IGkrKykgcyArPSBhcmd1bWVudHNbaV0ubGVuZ3RoO1xuICBmb3IgKHZhciByID0gQXJyYXkocyksIGsgPSAwLCBpID0gMDsgaSA8IGlsOyBpKyspXG4gICAgZm9yICh2YXIgYSA9IGFyZ3VtZW50c1tpXSwgaiA9IDAsIGpsID0gYS5sZW5ndGg7IGogPCBqbDsgaisrLCBrKyspXG4gICAgICByW2tdID0gYVtqXTtcbiAgcmV0dXJuIHI7XG59O1xuIiwiZXhwb3J0IGxldCBWZXJzaW9uOiBzdHJpbmc7XG5WZXJzaW9uID0gYCR7cHJvY2Vzcy5lbnYuVkVSU0lPTn1gO1xuXG4vLyBpbXBvcnQgXCJAc3VydmV5L2NyZWF0b3Ivc3VydmV5LWNyZWF0b3ItY29yZS5jc3NcIjtcblxuZXhwb3J0ICogZnJvbSBcIi4uL1N1cnZleUNyZWF0b3JcIjtcblxuZXhwb3J0ICogZnJvbSBcIi4uL2Fkb3JuZXJzL1Jvd1wiO1xuZXhwb3J0ICogZnJvbSBcIi4uL2Fkb3JuZXJzL1F1ZXN0aW9uXCI7XG5leHBvcnQgKiBmcm9tIFwiLi4vYWRvcm5lcnMvUXVlc3Rpb25IZWFkZXJcIjtcbmV4cG9ydCAqIGZyb20gXCIuLi9hZG9ybmVycy9RdWVzdGlvbkZvb3RlclwiO1xuZXhwb3J0ICogZnJvbSBcIi4uL2Fkb3JuZXJzL1F1ZXN0aW9uRHJvcGRvd25cIjtcbmV4cG9ydCAqIGZyb20gXCIuLi9hZG9ybmVycy9RdWVzdGlvbkltYWdlXCI7XG5leHBvcnQgKiBmcm9tIFwiLi4vYWRvcm5lcnMvUXVlc3Rpb25SYXRpbmdcIjtcbmV4cG9ydCAqIGZyb20gXCIuLi9hZG9ybmVycy9RdWVzdGlvbldpZGdldFwiO1xuZXhwb3J0ICogZnJvbSBcIi4uL2Fkb3JuZXJzL0NlbGxRdWVzdGlvblwiO1xuZXhwb3J0ICogZnJvbSBcIi4uL2Fkb3JuZXJzL0NlbGxRdWVzdGlvbkRyb3Bkb3duXCI7XG5leHBvcnQgKiBmcm9tIFwiLi4vYWRvcm5lcnMvUGFnZVwiO1xuZXhwb3J0ICogZnJvbSBcIi4uL2Fkb3JuZXJzL1BhbmVsXCI7XG5cbmV4cG9ydCAqIGZyb20gXCIuLi9Mb2dvSW1hZ2VcIjtcbmV4cG9ydCAqIGZyb20gXCIuLi9RdWVzdGlvbkxpbmtWYWx1ZVwiO1xuZXhwb3J0ICogZnJvbSBcIi4uL1F1ZXN0aW9uRW1iZWRkZWRTdXJ2ZXlcIjtcbmV4cG9ydCAqIGZyb20gXCIuLi9RdWVzdGlvbkVkaXRvckNvbnRlbnRcIjtcbmV4cG9ydCAqIGZyb20gXCIuLi9JdGVtVmFsdWVXcmFwcGVyXCI7XG5leHBvcnQgKiBmcm9tIFwiLi4vSW1hZ2VJdGVtVmFsdWVXcmFwcGVyXCI7XG5leHBvcnQgKiBmcm9tIFwiLi4vTWF0cml4Q2VsbFdyYXBwZXJcIjtcbmV4cG9ydCAqIGZyb20gXCIuLi9SZXN1bHRzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi4vdG9vbGJveC9Ub29sYm94SXRlbVwiO1xuZXhwb3J0ICogZnJvbSBcIi4uL3Rvb2xib3gvVG9vbGJveENhdGVnb3J5XCI7XG5leHBvcnQgKiBmcm9tIFwiLi4vdG9vbGJveC9Ub29sYm94XCI7XG5leHBvcnQgKiBmcm9tIFwiLi4vdG9vbGJveC9BZGFwdGl2ZVRvb2xib3hcIjtcbmV4cG9ydCAqIGZyb20gXCIuLi9UYWJiZWRNZW51XCI7XG5leHBvcnQgKiBmcm9tIFwiLi4vTm90aWZpZXJcIjtcbmV4cG9ydCAqIGZyb20gXCIuLi9OYXZpZ2F0aW9uXCI7XG5leHBvcnQgKiBmcm9tIFwiLi4vU2lkZUJhclwiO1xuZXhwb3J0ICogZnJvbSBcIi4uL3RhYnMvVHJhbnNsYXRpb25MaW5lU2tlbGV0b25cIjtcbmV4cG9ydCAqIGZyb20gXCIuLi9BY3Rpb25CdXR0b25cIjtcbmV4cG9ydCAqIGZyb20gXCIuLi9TdHJpbmdFZGl0b3JcIjtcblxuZXhwb3J0ICogZnJvbSBcIi4uL3RhYnMvbG9naWMtb3BlcmF0b3JcIjtcbmV4cG9ydCAqIGZyb20gXCIuLi90YWJzL0Rlc2lnbmVyXCI7XG5leHBvcnQgKiBmcm9tIFwiLi4vdGFicy9FbWJlZFwiO1xuZXhwb3J0ICogZnJvbSBcIi4uL3RhYnMvSnNvbkVkaXRvckFjZVwiO1xuZXhwb3J0ICogZnJvbSBcIi4uL3RhYnMvSnNvbkVkaXRvclRleHRhcmVhXCI7XG5leHBvcnQgKiBmcm9tIFwiLi4vdGFicy9Mb2dpY1wiO1xuZXhwb3J0ICogZnJvbSBcIi4uL3RhYnMvUHJldmlld1wiO1xuZXhwb3J0ICogZnJvbSBcIi4uL3RhYnMvVHJhbnNsYXRpb25cIjtcbmV4cG9ydCAqIGZyb20gXCIuLi90YWJzL1N1cnZleVNpbXVsYXRvclwiO1xuXG5leHBvcnQgKiBmcm9tIFwiLi4vZXZlbnRzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi4vT2JqZWN0U2VsZWN0b3JcIjtcbmV4cG9ydCAqIGZyb20gXCIuLi9Qcm9wZXJ0eUdyaWRcIjtcblxuZXhwb3J0IHsgZWRpdG9yTG9jYWxpemF0aW9uLCBsb2NhbGl6YXRpb24gfSBmcm9tIFwic3VydmV5LWNyZWF0b3ItY29yZVwiO1xuZXhwb3J0IHsgc2V0dGluZ3MgfSBmcm9tIFwic3VydmV5LWNyZWF0b3ItY29yZVwiO1xuZXhwb3J0IHsgc3ZnQnVuZGxlIH0gZnJvbSBcInN1cnZleS1jcmVhdG9yLWNvcmVcIjtcbmV4cG9ydCB7IFN1cnZleUxvZ2ljLCBTdXJ2ZXlMb2dpY1VJIH0gZnJvbSBcInN1cnZleS1jcmVhdG9yLWNvcmVcIjtcbmV4cG9ydCB7IFN1cnZleVF1ZXN0aW9uRWRpdG9yRGVmaW5pdGlvbiB9IGZyb20gXCJzdXJ2ZXktY3JlYXRvci1jb3JlXCI7XG5leHBvcnQgeyBJU3VydmV5Q3JlYXRvck9wdGlvbnMsIElQcm9wZXJ0eUdyaWRFZGl0b3IgfSBmcm9tIFwic3VydmV5LWNyZWF0b3ItY29yZVwiO1xuZXhwb3J0IHsgVG9vbGJveFRvb2xWaWV3TW9kZWwsIFByb3BlcnR5R3JpZEVkaXRvckNvbGxlY3Rpb24gfSBmcm9tIFwic3VydmV5LWNyZWF0b3ItY29yZVwiO1xuZXhwb3J0IHsgU3R5bGVzTWFuYWdlciB9IGZyb20gXCJzdXJ2ZXktY3JlYXRvci1jb3JlXCI7IiwiaW1wb3J0IHsgSVBvcnRhYmxlRHJhZ0V2ZW50LCBJUG9ydGFibGVNb3VzZUV2ZW50IH0gZnJvbSBcInN1cnZleS1jcmVhdG9yLWNvcmVcIjtcblxuZXhwb3J0IGNsYXNzIFJlYWN0TW91c2VFdmVudCBpbXBsZW1lbnRzIElQb3J0YWJsZU1vdXNlRXZlbnQge1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgZXZlbnQ6IFJlYWN0Lk1vdXNlRXZlbnQ8SFRNTERpdkVsZW1lbnQsIE1vdXNlRXZlbnQ+KSB7fVxuICBzdG9wUHJvcGFnYXRpb24oKSB7XG4gICAgdGhpcy5ldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAvL3RoaXMuZXZlbnQubmF0aXZlRXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgLy90aGlzLmV2ZW50Lm5hdGl2ZUV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuICB9XG4gIHByZXZlbnREZWZhdWx0KCkge1xuICAgIHRoaXMuZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAvL3RoaXMuZXZlbnQubmF0aXZlRXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgfVxuICBnZXQgY2FuY2VsQnViYmxlKCk6IGJvb2xlYW4ge1xuICAgIC8vcmV0dXJuIHRoaXMuZXZlbnQuY2FuY2VsQnViYmxlO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBzZXQgY2FuY2VsQnViYmxlKHZhbHVlOiBib29sZWFuKSB7XG4gICAgLy90aGlzLmV2ZW50LmNhbmNlbEJ1YmJsZSA9IHZhbHVlO1xuICB9XG4gIGdldCB0YXJnZXQoKTogRXZlbnRUYXJnZXQgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5ldmVudC50YXJnZXQ7XG4gIH1cbiAgZ2V0IGN1cnJlbnRUYXJnZXQoKTogRXZlbnRUYXJnZXQgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5ldmVudC5jdXJyZW50VGFyZ2V0O1xuICB9XG4gIGdldCBjbGllbnRYKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuZXZlbnQuY2xpZW50WDtcbiAgfVxuICBnZXQgY2xpZW50WSgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmV2ZW50LmNsaWVudFk7XG4gIH1cbiAgZ2V0IG9mZnNldFgoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5ldmVudC5uYXRpdmVFdmVudC5vZmZzZXRYO1xuICB9XG4gIGdldCBvZmZzZXRZKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuZXZlbnQubmF0aXZlRXZlbnQub2Zmc2V0WTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgUmVhY3REcmFnRXZlbnQgZXh0ZW5kcyBSZWFjdE1vdXNlRXZlbnRcbiAgaW1wbGVtZW50cyBJUG9ydGFibGVEcmFnRXZlbnQge1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgZXZlbnQ6IFJlYWN0LkRyYWdFdmVudDxIVE1MRGl2RWxlbWVudD4pIHtcbiAgICBzdXBlcihldmVudCk7XG4gIH1cblxuICBnZXQgZGF0YVRyYW5zZmVyKCk6IERhdGFUcmFuc2ZlciB7XG4gICAgcmV0dXJuIHRoaXMuZXZlbnQuZGF0YVRyYW5zZmVyO1xuICB9XG59XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBCYXNlLCBTdXJ2ZXlNb2RlbCwgUGFnZU1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQge1xuICBSZWFjdEVsZW1lbnRGYWN0b3J5LFxuICBTdXJ2ZXlFbGVtZW50QmFzZSxcbiAgU3VydmV5SGVhZGVyXG59IGZyb20gXCJzdXJ2ZXktcmVhY3QtdWlcIjtcbmltcG9ydCB7IENyZWF0b3JCYXNlLCBUYWJEZXNpZ25lclZpZXdNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY3JlYXRvci1jb3JlXCI7XG5pbXBvcnQgeyBTdXJ2ZXlQYWdlTmF2aWdhdG9yIH0gZnJvbSBcIi4uL1BhZ2VOYXZpZ2F0b3JcIjtcbmltcG9ydCB7IFN1cnZleU5hdmlnYXRpb24gfSBmcm9tIFwiLi4vTmF2aWdhdGlvblwiO1xuXG5pbnRlcmZhY2UgSVRhYkRlc2lnbmVyQ29tcG9uZW50UHJvcHMge1xuICBkYXRhOiBUYWJEZXNpZ25lclZpZXdNb2RlbDtcbn1cblxuZXhwb3J0IGNsYXNzIFRhYkRlc2lnbmVyQ29tcG9uZW50IGV4dGVuZHMgU3VydmV5RWxlbWVudEJhc2U8SVRhYkRlc2lnbmVyQ29tcG9uZW50UHJvcHMsIGFueT4ge1xuICBwcml2YXRlIGdldCBtb2RlbCgpOiBUYWJEZXNpZ25lclZpZXdNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuZGF0YTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IGNyZWF0b3IoKTogQ3JlYXRvckJhc2Uge1xuICAgIHJldHVybiB0aGlzLm1vZGVsLmNyZWF0b3I7XG4gIH1cblxuICBwcml2YXRlIGRlbnlVcGRhdGUgPSAoKSA9PiB7XG4gICAgdGhpcy5kZW55Q29tcG9uZW50VXBkYXRlKCk7XG4gIH1cblxuICBwcml2YXRlIGFsbG93VXBkYXRlID0gKCkgPT4ge1xuICAgIHRoaXMuYWxsb3dDb21wb25lbnRVcGRhdGUoKTtcbiAgfVxuXG4gIHByaXZhdGUgYWRkRHJhZ0Ryb3BFdmVudHMgPSAoKSA9PiB7XG4gICAgdGhpcy5jcmVhdG9yLm9uQmVmb3JlRHJvcC5hZGQodGhpcy5kZW55VXBkYXRlKTtcbiAgICB0aGlzLmNyZWF0b3Iub25BZnRlckRyb3AuYWRkKHRoaXMuYWxsb3dVcGRhdGUpO1xuICB9XG5cbiAgcHJpdmF0ZSBjbGVhckRyYWdEcm9wRXZlbnRzID0gKCkgPT4ge1xuICAgIHRoaXMuY3JlYXRvci5vbkJlZm9yZURyb3AucmVtb3ZlKHRoaXMuZGVueVVwZGF0ZSk7XG4gICAgdGhpcy5jcmVhdG9yLm9uQWZ0ZXJEcm9wLnJlbW92ZSh0aGlzLmFsbG93VXBkYXRlKTtcbiAgfVxuXG4gIGNvbXBvbmVudERpZE1vdW50KCk6IHZvaWQge1xuICAgIHN1cGVyLmNvbXBvbmVudERpZE1vdW50KCk7XG4gICAgdGhpcy5hZGREcmFnRHJvcEV2ZW50cygpO1xuICB9XG5cbiAgY29tcG9uZW50V2lsbFVubW91bnQoKTogdm9pZCB7XG4gICAgc3VwZXIuY29tcG9uZW50V2lsbFVubW91bnQoKTtcbiAgICB0aGlzLmNsZWFyRHJhZ0Ryb3BFdmVudHMoKTtcbiAgICBzdXBlci5jb21wb25lbnRXaWxsVW5tb3VudCgpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldFN0YXRlRWxlbWVudHMoKTogQXJyYXk8QmFzZT4ge1xuICAgIHJldHVybiBbdGhpcy5tb2RlbCwgdGhpcy5tb2RlbC5zdXJ2ZXksIHRoaXMubW9kZWwucGFnZXNDb250cm9sbGVyXTtcbiAgfVxuXG4gIHByaXZhdGUgcmVuZGVyZWRQYWdlc0NhY2hlOiBhbnkgPSB7fTtcbiAgcHJvdGVjdGVkIGdldFJlbmRlcmVkUGFnZXMoKTogSlNYLkVsZW1lbnRbXSB7XG4gICAgaWYgKHRoaXMuY2hhbmdlZFN0YXRlUHJvcE5hbWUgIT09IFwicGFnZXNcIikge1xuICAgICAgdGhpcy5yZW5kZXJlZFBhZ2VzQ2FjaGUgPSB7fTtcbiAgICB9XG4gICAgY29uc3QgcmVuZGVyZWRQYWdlcyA9IFtdO1xuXG4gICAgaWYgKHRoaXMuY3JlYXRvci5wYWdlRWRpdE1vZGUgIT09IFwiYnlwYWdlXCIpIHtcbiAgICAgIGNvbnN0IHBhZ2VzID0gdGhpcy5jcmVhdG9yLnN1cnZleS5wYWdlcztcblxuICAgICAgcGFnZXMuZm9yRWFjaCgocGFnZSwgaW5kZXgpID0+IHtcbiAgICAgICAgbGV0IGNhY2hlZFBhZ2UgPSB0aGlzLnJlbmRlcmVkUGFnZXNDYWNoZVtwYWdlLmlkXTtcbiAgICAgICAgaWYgKCFjYWNoZWRQYWdlKSB7XG4gICAgICAgICAgY2FjaGVkUGFnZSA9IHRoaXMuY3JlYXRlUmVuZGVyZWRQYWdlKHBhZ2UsIGluZGV4KTtcbiAgICAgICAgICB0aGlzLnJlbmRlcmVkUGFnZXNDYWNoZVtwYWdlLmlkXSA9IGNhY2hlZFBhZ2U7XG4gICAgICAgIH1cbiAgICAgICAgcmVuZGVyZWRQYWdlcy5wdXNoKGNhY2hlZFBhZ2UpO1xuICAgICAgfSk7XG5cbiAgICAgIGlmICh0aGlzLm1vZGVsLnNob3dOZXdQYWdlKSB7XG4gICAgICAgIHJlbmRlcmVkUGFnZXMucHVzaCh0aGlzLnJlbmRlck5ld1BhZ2UoXCJzdmMtcGFnZVwiLCB0aGlzLm1vZGVsLm5ld1BhZ2UuaWQgKyBcIi1naG9zdC1uZXctcGFnZVwiKSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHBhZ2UyRGlzcGxheSA9IHRoaXMubW9kZWwucGFnZXNDb250cm9sbGVyLnBhZ2UyRGlzcGxheTtcbiAgICAgIGlmKCEhcGFnZTJEaXNwbGF5KSB7XG4gICAgICAgIGxldCBjYWNoZWRQYWdlID0gdGhpcy5yZW5kZXJlZFBhZ2VzQ2FjaGVbcGFnZTJEaXNwbGF5LmlkXTtcbiAgICAgICAgaWYgKCFjYWNoZWRQYWdlKSB7XG4gICAgICAgICAgY2FjaGVkUGFnZSA9IHRoaXMuY3JlYXRlUmVuZGVyZWRQYWdlKHBhZ2UyRGlzcGxheSwgMCwgdHJ1ZSk7XG4gICAgICAgICAgdGhpcy5yZW5kZXJlZFBhZ2VzQ2FjaGVbcGFnZTJEaXNwbGF5LmlkXSA9IGNhY2hlZFBhZ2U7XG4gICAgICAgIH1cbiAgICAgICAgcmVuZGVyZWRQYWdlcy5wdXNoKGNhY2hlZFBhZ2UpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiByZW5kZXJlZFBhZ2VzO1xuICB9XG4gIHByb3RlY3RlZCBjcmVhdGVSZW5kZXJlZFBhZ2UocGFnZTogUGFnZU1vZGVsLCBpbmRleDogbnVtYmVyLCBpc0dob3N0UGFnZT86IGJvb2xlYW4pOiBhbnkge1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzTmFtZT17XCJzdmMtcGFnZVwifVxuICAgICAgICBkYXRhLXN2LWRyb3AtdGFyZ2V0LXBhZ2U9e3BhZ2UubmFtZX1cbiAgICAgICAgZGF0YS1zdi1kcm9wLXRhcmdldC1zdXJ2ZXktZWxlbWVudD17aXNHaG9zdFBhZ2UgPyBcIm5ld0dob3N0UGFnZVwiIDogcGFnZS5uYW1lfVxuICAgICAgICBrZXk9e3BhZ2UuaWQgKyBcIi1cIiArIGluZGV4fVxuICAgICAgPlxuICAgICAgICB7dGhpcy5yZW5kZXJQYWdlKHBhZ2UpfVxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuICBwcml2YXRlIHJlbmRlck5ld1BhZ2UoY2xhc3NOYW1lOiBzdHJpbmcsIGtleTogc3RyaW5nID0gXCJcIikge1xuICAgIHJldHVybiAoXG4gICAgICA8UmVhY3QuRnJhZ21lbnQga2V5PXtrZXl9PlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWV9XG4gICAgICAgICAgZGF0YS1zdi1kcm9wLXRhcmdldC1zdXJ2ZXktZWxlbWVudD17XCJuZXdHaG9zdFBhZ2VcIn1cbiAgICAgICAgPlxuICAgICAgICAgIHshIXRoaXMubW9kZWwubmV3UGFnZSA/IHRoaXMucmVuZGVyUGFnZSh0aGlzLm1vZGVsLm5ld1BhZ2UpIDogbnVsbH1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L1JlYWN0LkZyYWdtZW50Pik7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlclBhZ2UocGFnZVY6IFBhZ2VNb2RlbCk6IEpTWC5FbGVtZW50IHtcbiAgICByZXR1cm4gUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5jcmVhdGVFbGVtZW50KFwic3ZjLXBhZ2VcIiwgeyBzdXJ2ZXk6IHRoaXMuY3JlYXRvci5zdXJ2ZXksIHBhZ2U6IHBhZ2VWLCBjcmVhdG9yOiB0aGlzLmNyZWF0b3IgfSk7XG4gIH1cbiAgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgY29uc3QgZGVzaWduZXJUYWJDbGFzc05hbWUgPSBcInN2Yy10YWItZGVzaWduZXIgXCIgKyB0aGlzLm1vZGVsLmdldFJvb3RDc3MoKTtcblxuICAgIHJldHVybiAoXG4gICAgICA8UmVhY3QuRnJhZ21lbnQ+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLWZsZXgtY29sdW1uXCI+XG4gICAgICAgICAge3RoaXMubW9kZWwuaXNUb29sYm94VmlzaWJsZSA/IFJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UuY3JlYXRlRWxlbWVudChcInN2Yy1hZGFwdGl2ZS10b29sYm94XCIsIHsgbW9kZWw6IHRoaXMuY3JlYXRvciB9KSA6IG51bGx9XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17ZGVzaWduZXJUYWJDbGFzc05hbWV9IG9uQ2xpY2s9eygpID0+IHRoaXMubW9kZWwuY2xpY2tEZXNpZ25lcigpfT5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy10YWItZGVzaWduZXJfY29udGVudFwiPlxuICAgICAgICAgICAge3RoaXMubW9kZWwuc2hvd1BsYWNlaG9sZGVyID8gdGhpcy5yZW5kZXJQbGFjZUhvbGRlcigpIDogdGhpcy5yZW5kZXJUYWJDb250ZW50KCl9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9SZWFjdC5GcmFnbWVudD5cbiAgICApO1xuICB9XG5cbiAgcmVuZGVySGVhZGVyKGNvbmRpdGlvbjogYm9vbGVhbik6IEpTWC5FbGVtZW50IHtcbiAgICBpZiAoIWNvbmRpdGlvbikgcmV0dXJuIG51bGw7XG5cbiAgICBjb25zdCBzdXJ2ZXk6IFN1cnZleU1vZGVsID0gdGhpcy5jcmVhdG9yLnN1cnZleTtcbiAgICByZXR1cm4gKDxSZWFjdC5GcmFnbWVudD5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLWRlc2lnbmVyLWhlYWRlclwiPlxuICAgICAgICA8U3VydmV5SGVhZGVyIHN1cnZleT17c3VydmV5fT48L1N1cnZleUhlYWRlcj5cbiAgICAgIDwvZGl2PlxuICAgIDwvUmVhY3QuRnJhZ21lbnQ+KTtcbiAgfVxuICByZW5kZXJQbGFjZUhvbGRlcigpOiBKU1guRWxlbWVudCB7XG4gICAgY29uc3Qgc3VydmV5SGVhZGVyID0gdGhpcy5yZW5kZXJIZWFkZXIodGhpcy5jcmVhdG9yLmFsbG93RWRpdFN1cnZleVRpdGxlICYmIHRoaXMuY3JlYXRvci5zaG93SGVhZGVySW5FbXB0eVN1cnZleSk7XG5cbiAgICByZXR1cm4gKDxSZWFjdC5GcmFnbWVudD5cbiAgICAgIHtzdXJ2ZXlIZWFkZXJ9XG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy1kZXNpZ25lcl9fcGxhY2Vob2xkZXItY29udGFpbmVyXCIgZGF0YS1zdi1kcm9wLXRhcmdldC1zdXJ2ZXktZWxlbWVudD17XCJuZXdHaG9zdFBhZ2VcIn0+XG4gICAgICAgIHt0aGlzLnJlbmRlclBsYWNlSG9sZGVyQ29udGVudCgpfVxuICAgICAgICB7dGhpcy5yZW5kZXJOZXdQYWdlKFwic3ZjLWRlc2lnbmVyLXBsYWNlaG9sZGVyLXBhZ2VcIil9XG4gICAgICA8L2Rpdj5cbiAgICA8L1JlYWN0LkZyYWdtZW50Pik7XG4gIH1cbiAgcmVuZGVyUGxhY2VIb2xkZXJDb250ZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICByZXR1cm4gPHNwYW4gY2xhc3NOYW1lPVwic3ZjLWRlc2lnbmVyLXBsYWNlaG9sZGVyLXRleHQgc3ZjLXRleHQgc3ZjLXRleHQtLW5vcm1hbFwiPnt0aGlzLm1vZGVsLnBsYWNlaG9sZGVyVGV4dH08L3NwYW4+O1xuICB9XG4gIHJlbmRlclRhYkNvbnRlbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIGNvbnN0IHN1cnZleTogU3VydmV5TW9kZWwgPSB0aGlzLmNyZWF0b3Iuc3VydmV5O1xuICAgIGNvbnN0IHN1cnZleUhlYWRlciA9IHRoaXMucmVuZGVySGVhZGVyKHRoaXMuY3JlYXRvci5hbGxvd0VkaXRTdXJ2ZXlUaXRsZSk7XG4gICAgY29uc3Qgc3R5bGU6IGFueSA9IHt9O1xuICAgIGlmKCEhc3VydmV5LndpZHRoKSB7XG4gICAgICBzdHlsZS53aWR0aCA9IHN1cnZleS5yZW5kZXJlZFdpZHRoO1xuICAgICAgc3R5bGUubWF4V2lkdGggPSBzdXJ2ZXkucmVuZGVyZWRXaWR0aDtcbiAgICB9XG5cbiAgICByZXR1cm4gKDxSZWFjdC5GcmFnbWVudD5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPXt0aGlzLm1vZGVsLmdldERlc2lnbmVyQ3NzKCl9IHN0eWxlPXtzdHlsZX0+XG4gICAgICAgIHtzdXJ2ZXlIZWFkZXJ9XG4gICAgICAgIDxTdXJ2ZXlOYXZpZ2F0aW9uIHN1cnZleT17c3VydmV5fSBsb2NhdGlvbj1cInRvcFwiIC8+XG4gICAgICAgIHt0aGlzLmdldFJlbmRlcmVkUGFnZXMoKX1cbiAgICAgICAgPFN1cnZleU5hdmlnYXRpb25cbiAgICAgICAgICBzdXJ2ZXk9e3N1cnZleX1cbiAgICAgICAgICBsb2NhdGlvbj1cImJvdHRvbVwiXG4gICAgICAgICAgY3NzPXtzdXJ2ZXkuY3NzfVxuICAgICAgICAvPlxuICAgICAgPC9kaXY+XG4gICAgICB7dGhpcy5jcmVhdG9yLnNob3dQYWdlTmF2aWdhdG9yID9cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtdGFiLWRlc2lnbmVyX19wYWdlLW5hdmlnYXRvclwiPjxTdXJ2ZXlQYWdlTmF2aWdhdG9yXG4gICAgICAgICAgcGFnZXNDb250cm9sbGVyPXt0aGlzLm1vZGVsLnBhZ2VzQ29udHJvbGxlcn0gcGFnZUVkaXRNb2RlPXt0aGlzLm1vZGVsLmNyZWF0b3IucGFnZUVkaXRNb2RlfVxuICAgICAgICA+PC9TdXJ2ZXlQYWdlTmF2aWdhdG9yPjwvZGl2PlxuICAgICAgICA6IG51bGxcbiAgICAgIH1cbiAgICA8L1JlYWN0LkZyYWdtZW50Pik7XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXCJzdmMtdGFiLWRlc2lnbmVyXCIsIChwcm9wcykgPT4ge1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChcbiAgICBUYWJEZXNpZ25lckNvbXBvbmVudCxcbiAgICBwcm9wcyBhcyBJVGFiRGVzaWduZXJDb21wb25lbnRQcm9wc1xuICApO1xufSk7XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBCYXNlIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQge1xuICBSZWFjdEVsZW1lbnRGYWN0b3J5LFxuICBTdXJ2ZXksXG4gIFN1cnZleUVsZW1lbnRCYXNlXG59IGZyb20gXCJzdXJ2ZXktcmVhY3QtdWlcIjtcbmltcG9ydCB7IEVtYmVkTW9kZWwgfSBmcm9tIFwic3VydmV5LWNyZWF0b3ItY29yZVwiO1xuXG5pbnRlcmZhY2UgSVRhYkVtYmVkQ29tcG9uZW50UHJvcHMge1xuICBkYXRhOiBFbWJlZE1vZGVsO1xufVxuXG5leHBvcnQgY2xhc3MgVGFiRW1iZWRDb21wb25lbnQgZXh0ZW5kcyBTdXJ2ZXlFbGVtZW50QmFzZTxcbiAgSVRhYkVtYmVkQ29tcG9uZW50UHJvcHMsXG4gIGFueVxuPiB7XG4gIHByaXZhdGUgZ2V0IG1vZGVsKCk6IEVtYmVkTW9kZWwge1xuICAgIHJldHVybiB0aGlzLnByb3BzLmRhdGE7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFN0YXRlRWxlbWVudCgpOiBCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5tb2RlbDtcbiAgfVxuICByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtY3JlYXRvci10YWJfX2NvbnRlbnQgc3ZjLWVtYmVkLXRhYl9fY29udGVudFwiPlxuICAgICAgICB7dGhpcy5tb2RlbC5zdXJ2ZXkgPyA8U3VydmV5IG1vZGVsPXt0aGlzLm1vZGVsLnN1cnZleX0+PC9TdXJ2ZXk+IDogbnVsbH1cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXG4gIFwic3ZjLXRhYi1lbWJlZFwiLFxuICAocHJvcHM6IElUYWJFbWJlZENvbXBvbmVudFByb3BzKSA9PiB7XG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoVGFiRW1iZWRDb21wb25lbnQsIHByb3BzKTtcbiAgfVxuKTtcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IEJhc2UgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFJlYWN0RWxlbWVudEZhY3RvcnksIFN1cnZleUVsZW1lbnRCYXNlIH0gZnJvbSBcInN1cnZleS1yZWFjdC11aVwiO1xuaW1wb3J0IHsgQWNlSnNvbkVkaXRvck1vZGVsIH0gZnJvbSBcInN1cnZleS1jcmVhdG9yLWNvcmVcIjtcblxuaW50ZXJmYWNlIElUYWJKc29uRWRpdG9yQWNlQ29tcG9uZW50UHJvcHMge1xuICBkYXRhOiBBY2VKc29uRWRpdG9yTW9kZWw7XG59XG5cbmV4cG9ydCBjbGFzcyBUYWJKc29uRWRpdG9yQWNlQ29tcG9uZW50IGV4dGVuZHMgU3VydmV5RWxlbWVudEJhc2U8XG4gIElUYWJKc29uRWRpdG9yQWNlQ29tcG9uZW50UHJvcHMsXG4gIGFueVxuPiB7XG4gIHByaXZhdGUgYWNlRWRpdG9yclJlZjogUmVhY3QuUmVmT2JqZWN0PEhUTUxEaXZFbGVtZW50PjtcbiAgY29uc3RydWN0b3IocHJvcHM6IElUYWJKc29uRWRpdG9yQWNlQ29tcG9uZW50UHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5hY2VFZGl0b3JyUmVmID0gUmVhY3QuY3JlYXRlUmVmKCk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFN0YXRlRWxlbWVudCgpOiBCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5tb2RlbDtcbiAgfVxuICBwcml2YXRlIGdldCBtb2RlbCgpOiBBY2VKc29uRWRpdG9yTW9kZWwge1xuICAgIHJldHVybiB0aGlzLnByb3BzLmRhdGE7XG4gIH1cbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgdGhpcy5tb2RlbC5pbml0KGFjZS5lZGl0KHRoaXMuYWNlRWRpdG9yclJlZi5jdXJyZW50IGFzIEhUTUxFbGVtZW50KSk7XG4gIH1cbiAgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLWNyZWF0b3ItdGFiX19jb250ZW50XCI+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLWpzb24tZWRpdG9yLXRhYl9fY29udGVudFwiPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzTmFtZT1cInN2Yy1qc29uLWVkaXRvci10YWJfX2FjZS1lZGl0b3JcIlxuICAgICAgICAgICAgcmVmPXt0aGlzLmFjZUVkaXRvcnJSZWZ9XG4gICAgICAgICAgPjwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXG4gIFwic3ZjLXRhYi1qc29uLWVkaXRvci1hY2VcIixcbiAgKHByb3BzOiBJVGFiSnNvbkVkaXRvckFjZUNvbXBvbmVudFByb3BzKSA9PiB7XG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoVGFiSnNvbkVkaXRvckFjZUNvbXBvbmVudCwgcHJvcHMpO1xuICB9XG4pO1xuIiwiaW1wb3J0IFJlYWN0LCB7IENoYW5nZUV2ZW50IH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBCYXNlIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBSZWFjdEVsZW1lbnRGYWN0b3J5LCBTdXJ2ZXlFbGVtZW50QmFzZSB9IGZyb20gXCJzdXJ2ZXktcmVhY3QtdWlcIjtcbmltcG9ydCB7IFRleHRhcmVhSnNvbkVkaXRvck1vZGVsIH0gZnJvbSBcInN1cnZleS1jcmVhdG9yLWNvcmVcIjtcblxuaW50ZXJmYWNlIElUYWJKc29uRWRpdG9yVGV4dGFyZWFDb21wb25lbnRQcm9wcyB7XG4gIGRhdGE6IFRleHRhcmVhSnNvbkVkaXRvck1vZGVsO1xufVxuXG5leHBvcnQgY2xhc3MgVGFiSnNvbkVkaXRvclRleHRhcmVhQ29tcG9uZW50IGV4dGVuZHMgU3VydmV5RWxlbWVudEJhc2U8XG4gIElUYWJKc29uRWRpdG9yVGV4dGFyZWFDb21wb25lbnRQcm9wcyxcbiAgYW55XG4+IHtcbiAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5tb2RlbC5jYW5TaG93RXJyb3JzID0gZmFsc2U7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFN0YXRlRWxlbWVudCgpOiBCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5tb2RlbDtcbiAgfVxuICBwcml2YXRlIGdldCBtb2RlbCgpOiBUZXh0YXJlYUpzb25FZGl0b3JNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuZGF0YTtcbiAgfVxuICByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICBjb25zdCBlcnJvcnM6IEpTWC5FbGVtZW50W10gPSBbXTtcbiAgICB2YXIga2V5ID0gMTtcbiAgICBjb25zdCB1c2VyRnJpZW5kbHlFcnJvcnM6IGFueVtdID0gdGhpcy5tb2RlbC51c2VyRnJpZW5kbHlFcnJvcnM7XG4gICAgZm9yIChsZXQgaTogbnVtYmVyID0gMDsgaSA8IHVzZXJGcmllbmRseUVycm9ycy5sZW5ndGg7IGkrKykge1xuICAgICAgZXJyb3JzLnB1c2goPHNwYW4ga2V5PXtrZXl9PjxiPkVycm9yOiA8L2I+PC9zcGFuPik7XG4gICAgICBrZXkrKztcbiAgICAgIGVycm9ycy5wdXNoKDxzcGFuIGtleT17a2V5fT57dXNlckZyaWVuZGx5RXJyb3JzW2ldfTwvc3Bhbj4pO1xuICAgICAga2V5Kys7XG4gICAgfVxuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy1jcmVhdG9yLXRhYl9fY29udGVudFwiPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy1qc29uLWVkaXRvci10YWJfX2NvbnRlbnRcIj5cbiAgICAgICAgICA8dGV4dGFyZWFcbiAgICAgICAgICAgIGNsYXNzTmFtZT1cInN2Yy1qc29uLWVkaXRvci10YWJfX2NvbnRlbnQtYXJlYVwiXG4gICAgICAgICAgICB2YWx1ZT17dGhpcy5tb2RlbC50ZXh0fVxuICAgICAgICAgICAgb25DaGFuZ2U9eyhlOiBDaGFuZ2VFdmVudDxIVE1MVGV4dEFyZWFFbGVtZW50PikgPT5cbiAgICAgICAgICAgICAgKHRoaXMubW9kZWwudGV4dCA9IGUudGFyZ2V0LnZhbHVlKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgb25LZXlEb3duPXsoZSkgPT4gdGhpcy5tb2RlbC5jaGVja0tleShlLCBlKX1cbiAgICAgICAgICAgIGRpc2FibGVkPXt0aGlzLm1vZGVsLnJlYWRPbmx5fVxuICAgICAgICAgICAgYXJpYS1sYWJlbD17dGhpcy5tb2RlbC5hcmlhTGFiZWx9XG4gICAgICAgICAgPjwvdGV4dGFyZWE+XG4gICAgICAgICAge2Vycm9ycy5sZW5ndGggPiAwICYmXG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzc05hbWU9XCJzdmMtanNvbi1lZGl0b3ItdGFiX19lcnJyb3NfYnV0dG9uXCIgb25DbGljaz17KCkgPT4gdGhpcy5tb2RlbC50b2dnbGVFcnJvcnMoKX0+XG4gICAgICAgICAgICAgIHt0aGlzLm1vZGVsLmVycm9yQnV0dG9uVGV4dH1cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIH1cbiAgICAgICAgICB7dGhpcy5tb2RlbC5jYW5TaG93RXJyb3JzICYmIDxkaXYgY2xhc3NOYW1lPVwic3ZjLWpzb24tZWRpdG9yLXRhYl9fY29udGVudC1lcnJvcnNcIj57ZXJyb3JzfTwvZGl2PlxuICAgICAgICAgIH1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59XG5cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFxuICBcInN2Yy10YWItanNvbi1lZGl0b3ItdGV4dGFyZWFcIixcbiAgKHByb3BzOiBJVGFiSnNvbkVkaXRvclRleHRhcmVhQ29tcG9uZW50UHJvcHMpID0+IHtcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChUYWJKc29uRWRpdG9yVGV4dGFyZWFDb21wb25lbnQsIHByb3BzKTtcbiAgfVxuKTtcbiIsImltcG9ydCBSZWFjdCwgeyBGcmFnbWVudCB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgQWN0aW9uLCBCYXNlIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBSZWFjdEVsZW1lbnRGYWN0b3J5LCBTdXJ2ZXlFbGVtZW50QmFzZSwgU3VydmV5LCBhdHRhY2hLZXkyY2xpY2sgfSBmcm9tIFwic3VydmV5LXJlYWN0LXVpXCI7XG5pbXBvcnQgeyBTdXJ2ZXlMb2dpY1VJIH0gZnJvbSBcInN1cnZleS1jcmVhdG9yLWNvcmVcIjtcblxuZXhwb3J0IGNsYXNzIFRhYkxvZ2ljQWRkQnV0dG9uQ29tcG9uZW50IGV4dGVuZHMgU3VydmV5RWxlbWVudEJhc2U8YW55LCBhbnk+IHtcbiAgcHJpdmF0ZSBnZXQgbW9kZWwoKTogQWN0aW9uIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5idXR0b247XG4gIH1cbiAgcHJvdGVjdGVkIGdldFN0YXRlRWxlbWVudCgpOiBCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5tb2RlbDtcbiAgfVxuXG4gIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIGNvbnN0IGJ1dHRvbkNsYXNzTmFtZSA9IFwic3ZjLWxvZ2ljLXRhYl9fY29udGVudC1hY3Rpb24gc3ZjLWJ0blwiICsgKCh0aGlzLm1vZGVsLmVuYWJsZWQgIT09IHVuZGVmaW5lZCAmJiAhdGhpcy5tb2RlbC5lbmFibGVkKSA/IFwiIHN2Yy1sb2dpYy10YWJfX2NvbnRlbnQtYWN0aW9uLS1kaXNhYmxlZFwiIDogXCJcIik7XG4gICAgcmV0dXJuIGF0dGFjaEtleTJjbGljayg8ZGl2XG4gICAgICByb2xlPVwiYnV0dG9uXCJcbiAgICAgIG9uQ2xpY2s9eyhlKSA9PiB7XG4gICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIHRoaXMubW9kZWwuYWN0aW9uKCk7XG4gICAgICB9fVxuICAgICAgY2xhc3NOYW1lPXtidXR0b25DbGFzc05hbWV9XG4gICAgICB0aXRsZT17dGhpcy5tb2RlbC50aXRsZX1cbiAgICA+XG4gICAgICA8c3BhbiBjbGFzc05hbWU9XCJzdmMtdGV4dCBzdmMtdGV4dC0tbm9ybWFsIHN2Yy10ZXh0LS1ib2xkXCI+XG4gICAgICAgIHt0aGlzLm1vZGVsLnRpdGxlfVxuICAgICAgPC9zcGFuPlxuICAgIDwvZGl2Pik7XG4gIH1cbn1cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFwic3ZjLXRhYi1sb2dpYy1hZGQtYnV0dG9uXCIsIChwcm9wcykgPT4ge1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChUYWJMb2dpY0FkZEJ1dHRvbkNvbXBvbmVudCwgcHJvcHMpO1xufSk7XG5cbmV4cG9ydCBjbGFzcyBUYWJMb2dpY0NvbXBvbmVudCBleHRlbmRzIFN1cnZleUVsZW1lbnRCYXNlPGFueSwgYW55PiB7XG4gIHByaXZhdGUgZ2V0IG1vZGVsKCk6IFN1cnZleUxvZ2ljVUkge1xuICAgIHJldHVybiB0aGlzLnByb3BzLmRhdGE7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFN0YXRlRWxlbWVudCgpOiBCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5tb2RlbDtcbiAgfVxuXG4gIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIHZhciBsb2dpYyA9IHRoaXMubW9kZWw7XG4gICAgdmFyIHJvb3RDbGFzcyA9IFwic3ZjLWNyZWF0b3ItdGFiX19jb250ZW50XCI7XG4gICAgdmFyIGNvbnRlbnQgPSB0aGlzLnJlbmRlclZpZXdDb250ZW50KCk7XG4gICAgcmV0dXJuIDxkaXYgY2xhc3NOYW1lPXtyb290Q2xhc3N9Pntjb250ZW50fTwvZGl2PjtcbiAgfVxuICBwcml2YXRlIHJlbmRlclZpZXdDb250ZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICBjb25zdCBsb2dpY1RhYkNsYXNzTmFtZSA9IFwic3ZjLXBsdWdpbi10YWJfX2NvbnRlbnQgc3ZjLWxvZ2ljLXRhYl9fY29udGVudCBcIiArICh0aGlzLm1vZGVsLmhhc0l0ZW1zID8gXCJcIiA6IFwic3ZjLWxvZ2ljLXRhYl9fZW1wdHlcIik7XG4gICAgY29uc3QgYWRkTG9naWMgPSAhdGhpcy5tb2RlbC5yZWFkT25seSA/IDxUYWJMb2dpY0FkZEJ1dHRvbkNvbXBvbmVudCBidXR0b249e3RoaXMubW9kZWwuYWRkTmV3QnV0dG9ufSAvPiA6IHVuZGVmaW5lZDtcbiAgICByZXR1cm4gKFxuICAgICAgPEZyYWdtZW50PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17bG9naWNUYWJDbGFzc05hbWV9PlxuICAgICAgICAgIDxTdXJ2ZXkgbW9kZWw9e3RoaXMubW9kZWwuaXRlbXNTdXJ2ZXl9PjwvU3VydmV5PlxuICAgICAgICAgIHt0aGlzLm1vZGVsLmhhc0l0ZW1zID8gbnVsbCA6IChcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLWxvZ2ljLXRhYl9fY29udGVudC1lbXB0eVwiID5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwic3ZjLXRleHRcIj57dGhpcy5tb2RlbC5lbXB0eVRhYlBsYWNlSG9sZGVyfTwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2Pil9XG4gICAgICAgICAge2FkZExvZ2ljfVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvRnJhZ21lbnQ+XG4gICAgKTtcbiAgfVxufVxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXCJzdmMtdGFiLWxvZ2ljXCIsIChwcm9wcykgPT4ge1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChUYWJMb2dpY0NvbXBvbmVudCwgcHJvcHMpO1xufSk7XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBBY3Rpb24sIEJhc2UgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7XG4gIFN1cnZleUFjdGlvbkJhcixcbiAgUmVhY3RFbGVtZW50RmFjdG9yeSxcbiAgU3VydmV5RWxlbWVudEJhc2UsXG4gIGF0dGFjaEtleTJjbGlja1xufSBmcm9tIFwic3VydmV5LXJlYWN0LXVpXCI7XG5pbXBvcnQgeyBUZXN0U3VydmV5VGFiVmlld01vZGVsIH0gZnJvbSBcInN1cnZleS1jcmVhdG9yLWNvcmVcIjtcbmltcG9ydCB7IFN1cnZleVNpbXVsYXRvciB9IGZyb20gXCIuL1N1cnZleVNpbXVsYXRvclwiO1xuaW1wb3J0IHsgU3VydmV5UmVzdWx0cyB9IGZyb20gXCIuLi9SZXN1bHRzXCI7XG5cbmV4cG9ydCBjbGFzcyBUYWJQcmV2aWV3VGVzdFN1cnZleUFnYWluQ29tcG9uZW50IGV4dGVuZHMgU3VydmV5RWxlbWVudEJhc2U8YW55LCBhbnk+IHtcbiAgcHJpdmF0ZSBnZXQgbW9kZWwoKTogQWN0aW9uIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5idXR0b247XG4gIH1cbiAgcHJvdGVjdGVkIGdldFN0YXRlRWxlbWVudCgpOiBCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5tb2RlbDtcbiAgfVxuXG4gIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIGNvbnN0IGJ1dHRvbkNsYXNzTmFtZSA9IFwic3ZjLXByZXZpZXdfX3Rlc3QtYWdhaW4gc3ZjLWJ0blwiO1xuICAgIHJldHVybiBhdHRhY2hLZXkyY2xpY2soPGRpdlxuICAgICAgcm9sZT1cImJ1dHRvblwiXG4gICAgICBvbkNsaWNrPXsoZSkgPT4ge1xuICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICB0aGlzLm1vZGVsLmFjdGlvbigpO1xuICAgICAgfX1cbiAgICAgIGNsYXNzTmFtZT17YnV0dG9uQ2xhc3NOYW1lfVxuICAgICAgdGl0bGU9e3RoaXMubW9kZWwudGl0bGV9XG4gICAgPlxuICAgICAgPHNwYW4gY2xhc3NOYW1lPVwic3ZjLXRleHQgc3ZjLXRleHQtLW5vcm1hbCBzdmMtdGV4dC0tYm9sZFwiPlxuICAgICAgICB7dGhpcy5tb2RlbC50aXRsZX1cbiAgICAgIDwvc3Bhbj5cbiAgICA8L2Rpdj4pO1xuICB9XG59XG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcInN2Yy10YWItcHJldmlldy10ZXN0LWFnYWluXCIsIChwcm9wcykgPT4ge1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChUYWJQcmV2aWV3VGVzdFN1cnZleUFnYWluQ29tcG9uZW50LCBwcm9wcyk7XG59KTtcblxuZXhwb3J0IGNsYXNzIFRhYlByZXZpZXdTdXJ2ZXlDb21wb25lbnQgZXh0ZW5kcyBTdXJ2ZXlFbGVtZW50QmFzZTxhbnksIGFueT4ge1xuICBwcml2YXRlIGdldCBtb2RlbCgpOiBUZXN0U3VydmV5VGFiVmlld01vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5kYXRhO1xuICB9XG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnQoKTogQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMubW9kZWw7XG4gIH1cblxuICByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICBjb25zdCB0YWJDb250ZW50Q2xhc3NOYW1lID0gXCJzdmMtY3JlYXRvci10YWJfX2NvbnRlbnQgc3ZjLXRlc3QtdGFiX19jb250ZW50XCIgKyAodGhpcy5tb2RlbC5pc1BhZ2VUb29sYmFyVmlzaWJsZSA/IFwiIHN2Yy1jcmVhdG9yLXRhYl9fY29udGVudC0td2l0aC10b29sYmFyXCIgOiBcIlwiKTtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9e3RhYkNvbnRlbnRDbGFzc05hbWV9PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy1wbHVnaW4tdGFiX19jb250ZW50XCI+XG4gICAgICAgICAgPFN1cnZleVNpbXVsYXRvciBtb2RlbD17dGhpcy5tb2RlbC5zaW11bGF0b3J9PjwvU3VydmV5U2ltdWxhdG9yPlxuICAgICAgICAgIHshdGhpcy5tb2RlbC5pc1J1bm5pbmcgPyA8VGFiUHJldmlld1Rlc3RTdXJ2ZXlBZ2FpbkNvbXBvbmVudCBidXR0b249e3RoaXMubW9kZWwudGVzdEFnYWluQWN0aW9ufSAvPiA6IG51bGx9XG4gICAgICAgICAgeyF0aGlzLm1vZGVsLmlzUnVubmluZyA/IDxTdXJ2ZXlSZXN1bHRzIHN1cnZleT17dGhpcy5tb2RlbC5zaW11bGF0b3Iuc3VydmV5fSAvPiA6IG51bGx9XG4gICAgICAgIDwvZGl2PlxuICAgICAgICB7dGhpcy5nZXRCb3R0b21Ub29sYmFyKCl9XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG4gIGdldEJvdHRvbVRvb2xiYXIoKTogSlNYLkVsZW1lbnQge1xuICAgIGlmICh0aGlzLm1vZGVsLmlzUGFnZVRvb2xiYXJWaXNpYmxlKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy10ZXN0LXRhYl9fY29udGVudC1hY3Rpb25zXCI+XG4gICAgICAgICAgPFN1cnZleUFjdGlvbkJhciBtb2RlbD17dGhpcy5tb2RlbC5wYWdlc30+PC9TdXJ2ZXlBY3Rpb25CYXI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG59XG5cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFwic3ZjLXRhYi10ZXN0XCIsIChwcm9wcykgPT4ge1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChUYWJQcmV2aWV3U3VydmV5Q29tcG9uZW50LCBwcm9wcyk7XG59KTtcbiIsImltcG9ydCB7IEJhc2UgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFN1cnZleSwgU3VydmV5RWxlbWVudEJhc2UgfSBmcm9tIFwic3VydmV5LXJlYWN0LXVpXCI7XG5pbXBvcnQgeyBTdXJ2ZXlTaW11bGF0b3JNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY3JlYXRvci1jb3JlXCI7XG5pbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlTaW11bGF0b3IgZXh0ZW5kcyBTdXJ2ZXlFbGVtZW50QmFzZTxhbnksIGFueT4ge1xuICBwcml2YXRlIGdldCBtb2RlbCgpOiBTdXJ2ZXlTaW11bGF0b3JNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMubW9kZWw7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCk6IEJhc2Uge1xuICAgIHJldHVybiB0aGlzLm1vZGVsO1xuICB9XG5cbiAgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgY29uc3QgbWFpblNpbXVsYXRvckNsYXNzID0gXCJzdmQtc2ltdWxhdG9yLW1haW5cIiArXG4gICAgICAodGhpcy5tb2RlbC5kZXZpY2UgPT09IFwiZGVza3RvcFwiID8gXCIgc3ZkLXNpbXVsYXRvci1tYWluLS1kZXNrdG9wXCIgOiBcIlwiKTtcbiAgICBpZiAoIXRoaXMubW9kZWwuc3VydmV5KSB7XG4gICAgICByZXR1cm4gPGRpdiBjbGFzc05hbWU9e21haW5TaW11bGF0b3JDbGFzc30+PC9kaXY+O1xuICAgIH1cbiAgICBpZiAodGhpcy5tb2RlbC5oYXNGcmFtZSkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzTmFtZT17bWFpblNpbXVsYXRvckNsYXNzICsgXCIgXCIgKyB0aGlzLm1vZGVsLnNpbXVsYXRvck1haW5Dc3NDbGFzc31cbiAgICAgICAgICBvbktleURvd249e2UgPT4gdGhpcy5tb2RlbC50cnlUb1pvb20oZSwgZSl9XG4gICAgICAgICAgb25Nb3VzZUVudGVyPXt0aGlzLm1vZGVsLmRldmljZSA9PT0gXCJkZXNrdG9wXCIgPyBudWxsIDogdGhpcy5tb2RlbC5hY3RpdmF0ZVpvb219XG4gICAgICAgICAgb25Nb3VzZUxlYXZlPXt0aGlzLm1vZGVsLmRldmljZSA9PT0gXCJkZXNrdG9wXCIgPyBudWxsIDogdGhpcy5tb2RlbC5kZWFjdGl2YXRlWm9vbX1cbiAgICAgICAgPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzTmFtZT1cInN2ZC1zaW11bGF0b3Itd3JhcHBlclwiXG4gICAgICAgICAgICBpZD1cInN2ZC1zaW11bGF0b3Itd3JhcHBlclwiXG4gICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICB3aWR0aDogdGhpcy5tb2RlbC5zaW11bGF0b3JGcmFtZS5mcmFtZVdpZHRoICsgXCJweFwiLFxuICAgICAgICAgICAgICBoZWlnaHQ6IHRoaXMubW9kZWwuc2ltdWxhdG9yRnJhbWUuZnJhbWVIZWlnaHQgKyBcInB4XCJcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjbGFzc05hbWU9e1xuICAgICAgICAgICAgICAgIFwic3ZkLXNpbXVsYXRvci1mcmFtZSBcIiArIHRoaXMubW9kZWwuc2ltdWxhdG9yRnJhbWUuY3NzQ2xhc3NcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICAgIHdpZHRoOlxuICAgICAgICAgICAgICAgICAgdGhpcy5tb2RlbC5zaW11bGF0b3JGcmFtZS5sYW5kc2NhcGVkRnJhbWVXaWR0aCArIFwicHhcIixcbiAgICAgICAgICAgICAgICBoZWlnaHQ6XG4gICAgICAgICAgICAgICAgICB0aGlzLm1vZGVsLnNpbXVsYXRvckZyYW1lLmxhbmRzY2FwZWRGcmFtZUhlaWdodCArIFwicHhcIlxuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgPjwvZGl2PlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjbGFzc05hbWU9XCJzdmQtc2ltdWxhdG9yXCJcbiAgICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICB3aWR0aDpcbiAgICAgICAgICAgICAgICAgIHRoaXMubW9kZWwuc2ltdWxhdG9yRnJhbWUuZGV2aWNlV2lkdGggKyBcInB4XCIsXG4gICAgICAgICAgICAgICAgaGVpZ2h0OlxuICAgICAgICAgICAgICAgICAgdGhpcy5tb2RlbC5zaW11bGF0b3JGcmFtZS5kZXZpY2VIZWlnaHQgKyBcInB4XCIsXG4gICAgICAgICAgICAgICAgdHJhbnNmb3JtOlxuICAgICAgICAgICAgICAgICAgXCJzY2FsZShcIiArXG4gICAgICAgICAgICAgICAgICB0aGlzLm1vZGVsLnNpbXVsYXRvckZyYW1lLnNjYWxlICtcbiAgICAgICAgICAgICAgICAgIFwiKSB0cmFuc2xhdGUoLTUwJSwgLTUwJSlcIlxuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2ZC1zaW11bGF0b3ItY29udGVudFwiPlxuICAgICAgICAgICAgICAgIDxTdXJ2ZXkgbW9kZWw9e3RoaXMubW9kZWwuc3VydmV5fT48L1N1cnZleT5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3NOYW1lPXttYWluU2ltdWxhdG9yQ2xhc3N9PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZkLXNpbXVsYXRvci1jb250ZW50XCI+XG4gICAgICAgICAgICA8U3VydmV5IG1vZGVsPXt0aGlzLm1vZGVsLnN1cnZleX0+PC9TdXJ2ZXk+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgKTtcbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IEJhc2UgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7XG4gIFJlYWN0RWxlbWVudEZhY3RvcnksXG4gIFN1cnZleUVsZW1lbnRCYXNlLFxuICBTdXJ2ZXlcbn0gZnJvbSBcInN1cnZleS1yZWFjdC11aVwiO1xuaW1wb3J0IHsgVHJhbnNsYXRpb24gfSBmcm9tIFwic3VydmV5LWNyZWF0b3ItY29yZVwiO1xuXG5leHBvcnQgY2xhc3MgVGFiVHJhbnNsYXRpb25Db21wb25lbnQgZXh0ZW5kcyBTdXJ2ZXlFbGVtZW50QmFzZTxhbnksIGFueT4ge1xuICBwcml2YXRlIGdldCBtb2RlbCgpOiBUcmFuc2xhdGlvbiB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuZGF0YTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCk6IEJhc2Uge1xuICAgIHJldHVybiB0aGlzLm1vZGVsO1xuICB9XG4gIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIGlmICghdGhpcy5tb2RlbCkgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLWNyZWF0b3ItdGFiX19jb250ZW50IHN2Yy10cmFuc2xhdGlvbi10YWJcIj5cbiAgICAgICAge3RoaXMucmVuZGVyRWxlbWVudENvbnRlbnQoKX1cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbiAgcmVuZGVyRWxlbWVudENvbnRlbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIGlmICh0aGlzLm1vZGVsLmlzRW1wdHkpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3Qtbm8tc3RyaW5nc1wiPlxuICAgICAgICAgIDxzcGFuPnt0aGlzLm1vZGVsLm5vU3RyaW5nc1RleHR9PC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3QtY29udGVudFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLWZsZXgtY29sdW1uIHN0LXN0cmluZ3Mtd3JhcHBlclwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtZmxleC1yb3cgc3Qtc3RyaW5ncy1oZWFkZXJcIj5cbiAgICAgICAgICAgICAgPFN1cnZleSBtb2RlbD17dGhpcy5tb2RlbC5zdHJpbmdzSGVhZGVyU3VydmV5fT48L1N1cnZleT5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtZmxleC1yb3cgc3ZjLXBsdWdpbi10YWJfX2NvbnRlbnQgc3Qtc3RyaW5nc1wiPlxuICAgICAgICAgICAgICA8U3VydmV5IG1vZGVsPXt0aGlzLm1vZGVsLnN0cmluZ3NTdXJ2ZXl9PjwvU3VydmV5PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgKTtcbiAgICB9XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXCJzdmMtdGFiLXRyYW5zbGF0aW9uXCIsIChwcm9wcykgPT4ge1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChUYWJUcmFuc2xhdGlvbkNvbXBvbmVudCwgcHJvcHMpO1xufSk7XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBSZWFjdEVsZW1lbnRGYWN0b3J5IH0gZnJvbSBcInN1cnZleS1yZWFjdC11aVwiO1xuXG5leHBvcnQgY2xhc3MgVHJhbnNsYXRpb25MaW5lU2tlbGV0b24gZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQ8YW55LCBhbnk+IHtcbiAgcmVuZGVyKCkge1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cInNkLXRyYW5zbGF0aW9uLWxpbmUtc2tlbGV0b25cIj5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXCJzZC10cmFuc2xhdGlvbi1saW5lLXNrZWxldG9uXCIsIChwcm9wczogYW55KSA9PiB7XG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFRyYW5zbGF0aW9uTGluZVNrZWxldG9uLCBwcm9wcyk7XG59KTtcbiIsImltcG9ydCAqIGFzIFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgUXVlc3Rpb25Ecm9wZG93bk1vZGVsLCBSZW5kZXJlckZhY3RvcnkgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IGluaXRMb2dpY09wZXJhdG9yIH0gZnJvbSBcInN1cnZleS1jcmVhdG9yLWNvcmVcIjtcbmltcG9ydCB7IFN1cnZleVF1ZXN0aW9uRHJvcGRvd24sIFJlYWN0UXVlc3Rpb25GYWN0b3J5IH0gZnJvbSBcInN1cnZleS1yZWFjdC11aVwiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5TG9naWNPcGVydG9yIGV4dGVuZHMgU3VydmV5UXVlc3Rpb25Ecm9wZG93biB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgcmVuZGVySW5wdXQoKTogSlNYLkVsZW1lbnQge1xuICAgIGNvbnN0IHEgPSB0aGlzLnF1ZXN0aW9uIGFzIFF1ZXN0aW9uRHJvcGRvd25Nb2RlbDtcbiAgICBpbml0TG9naWNPcGVyYXRvcihxKTtcbiAgICBjb25zdCB0ZXh0ID0gKHEuc2VsZWN0ZWRJdGVtTG9jVGV4dCkgPyB0aGlzLnJlbmRlckxvY1N0cmluZyhxLnNlbGVjdGVkSXRlbUxvY1RleHQpIDogXCJcIjtcblxuICAgIHJldHVybiAoPGRpdlxuICAgICAgaWQ9e3RoaXMucXVlc3Rpb24uaW5wdXRJZH1cbiAgICAgIGNsYXNzTmFtZT17cS5nZXRDb250cm9sQ2xhc3MoKX1cbiAgICAgIHRhYkluZGV4PXt0aGlzLnF1ZXN0aW9uLmlzSW5wdXRSZWFkT25seSA/IHVuZGVmaW5lZCA6IDB9XG4gICAgICBvbkNsaWNrPXt0aGlzLmNsaWNrfVxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgZGlzYWJsZWQ9e3RoaXMucXVlc3Rpb24uaXNJbnB1dFJlYWRPbmx5fVxuICAgICAgcmVxdWlyZWQ9e3RoaXMucXVlc3Rpb24uaXNSZXF1aXJlZH1cbiAgICAgIG9uQ2hhbmdlPXt0aGlzLnVwZGF0ZVZhbHVlT25FdmVudH1cbiAgICAgIG9uSW5wdXQ9e3RoaXMudXBkYXRlVmFsdWVPbkV2ZW50fVxuICAgICAgb25LZXlVcD17dGhpcy5rZXloYW5kbGVyfVxuICAgICAgcm9sZT17dGhpcy5xdWVzdGlvbi5hcmlhUm9sZX1cbiAgICAgIGFyaWEtcmVxdWlyZWQ9e3RoaXMucXVlc3Rpb24uYXJpYVJlcXVpcmVkfVxuICAgICAgYXJpYS1sYWJlbD17dGhpcy5xdWVzdGlvbi5hcmlhTGFiZWx9XG4gICAgICBhcmlhLWludmFsaWQ9e3RoaXMucXVlc3Rpb24uYXJpYUludmFsaWR9XG4gICAgICBhcmlhLWRlc2NyaWJlZGJ5PXt0aGlzLnF1ZXN0aW9uLmFyaWFEZXNjcmliZWRCeX1cbiAgICA+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLmNvbnRyb2xWYWx1ZX0+XG4gICAgICAgIHt0ZXh0fVxuICAgICAgICA8ZGl2PntxLnJlYWRPbmx5VGV4dH08L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAge3RoaXMuY3JlYXRlQ2xlYXJCdXR0b24oKX1cbiAgICA8L2Rpdj4pO1xuICB9XG59XG5cblJlYWN0UXVlc3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyUXVlc3Rpb24oXCJzdi1sb2dpYy1vcGVyYXRvclwiLCAocHJvcHMpID0+IHtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3VydmV5TG9naWNPcGVydG9yLCBwcm9wcyk7XG59KTtcblxuUmVuZGVyZXJGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyUmVuZGVyZXIoXCJkcm9wZG93blwiLCBcImxvZ2ljb3BlcmF0b3JcIiwgXCJzdi1sb2dpYy1vcGVyYXRvclwiKTsiLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBWZXJ0aWNhbFJlc3BvbnNpdml0eU1hbmFnZXIgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFJlYWN0RWxlbWVudEZhY3RvcnkgfSBmcm9tIFwic3VydmV5LXJlYWN0LXVpXCI7XG5pbXBvcnQgeyBJU3VydmV5Q3JlYXRvclRvb2xib3hQcm9wcywgVG9vbGJveCB9IGZyb20gXCIuL1Rvb2xib3hcIjtcblxuZXhwb3J0IGNsYXNzIEFkYXB0aXZlVG9vbGJveCBleHRlbmRzIFRvb2xib3gge1xuICBwcml2YXRlIG1hbmFnZXI6IFZlcnRpY2FsUmVzcG9uc2l2aXR5TWFuYWdlcjtcbiAgcHJpdmF0ZSByb290UmVmOiBSZWFjdC5SZWZPYmplY3Q8SFRNTERpdkVsZW1lbnQ+O1xuXG4gIGNvbnN0cnVjdG9yKHByb3BzOiBJU3VydmV5Q3JlYXRvclRvb2xib3hQcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLnJvb3RSZWYgPSBSZWFjdC5jcmVhdGVSZWYoKTtcbiAgfVxuXG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIHN1cGVyLmNvbXBvbmVudERpZE1vdW50KCk7XG4gICAgY29uc3QgY29udGFpbmVyID0gdGhpcy5yb290UmVmLmN1cnJlbnQ7XG4gICAgaWYgKCFjb250YWluZXIpIHJldHVybjtcbiAgICB0aGlzLm1hbmFnZXIgPSBuZXcgVmVydGljYWxSZXNwb25zaXZpdHlNYW5hZ2VyKFxuICAgICAgY29udGFpbmVyLFxuICAgICAgdGhpcy50b29sYm94LFxuICAgICAgXCIuc3ZjLXRvb2xib3hfX3Rvb2w6bm90KC5zdi1kb3RzKVwiXG4gICAgKTtcbiAgfVxuICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICB0aGlzLm1hbmFnZXIgJiYgKHRoaXMubWFuYWdlci5kaXNwb3NlKCkpO1xuICAgIHN1cGVyLmNvbXBvbmVudFdpbGxVbm1vdW50KCk7XG4gIH1cbiAgcmVuZGVyKCk6IEpTWC5FbGVtZW50IHtcbiAgICBpZiAoIXRoaXMudG9vbGJveC5oYXNBY3Rpb25zKSByZXR1cm4gbnVsbDtcblxuICAgIGNvbnN0IGNsYXNzTmFtZSA9IFwic3ZjLXRvb2xib3hcIiArICh0aGlzLnRvb2xib3guaXNDb21wYWN0ID8gXCIgc3ZjLXRvb2xib3gtLWNvbXBhY3RcIiA6IFwiXCIpO1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IHJlZj17dGhpcy5yb290UmVmfSBjbGFzc05hbWU9e2NsYXNzTmFtZX0+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLXRvb2xib3hfX2NvbnRhaW5lclwiPlxuICAgICAgICAgIHsodGhpcy50b29sYm94LmlzQ29tcGFjdCB8fCB0aGlzLnRvb2xib3guY2F0ZWdvcmllcy5sZW5ndGggPT0gMSB8fCAhdGhpcy50b29sYm94LnNob3dDYXRlZ29yeVRpdGxlcykgP1xuICAgICAgICAgICAgKDxkaXYgY2xhc3NOYW1lPVwic3ZjLXRvb2xib3hfX2NhdGVnb3J5XCI+XG4gICAgICAgICAgICAgIHt0aGlzLnJlbmRlckl0ZW1zKHRoaXMudG9vbGJveC5yZW5kZXJlZEFjdGlvbnMsIHRoaXMudG9vbGJveC5pc0NvbXBhY3QpfVxuICAgICAgICAgICAgPC9kaXY+KVxuICAgICAgICAgICAgOiB0aGlzLnJlbmRlckNhdGVnb3JpZXMoKVxuICAgICAgICAgIH1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59XG5cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFwic3ZjLWFkYXB0aXZlLXRvb2xib3hcIiwgKHByb3BzKSA9PiB7XG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KEFkYXB0aXZlVG9vbGJveCwgcHJvcHMpO1xufSk7XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBCYXNlIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBSZWFjdEVsZW1lbnRGYWN0b3J5LCBTdXJ2ZXlFbGVtZW50QmFzZSB9IGZyb20gXCJzdXJ2ZXktcmVhY3QtdWlcIjtcbmltcG9ydCB7IENyZWF0b3JCYXNlIH0gZnJvbSBcInN1cnZleS1jcmVhdG9yLWNvcmVcIjtcbmltcG9ydCB7IFN1cnZleUNyZWF0b3JUb29sYm94VG9vbCB9IGZyb20gXCIuL1Rvb2xib3hJdGVtXCI7XG5pbXBvcnQgeyBTdXJ2ZXlDcmVhdG9yVG9vbGJveENhdGVnb3J5IH0gZnJvbSBcIi4vVG9vbGJveENhdGVnb3J5XCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVN1cnZleUNyZWF0b3JUb29sYm94UHJvcHMge1xuICBtb2RlbDogQ3JlYXRvckJhc2U7XG59XG5cbmV4cG9ydCBjbGFzcyBUb29sYm94IGV4dGVuZHMgU3VydmV5RWxlbWVudEJhc2U8SVN1cnZleUNyZWF0b3JUb29sYm94UHJvcHMsIGFueT4ge1xuICBwdWJsaWMgZ2V0IGNyZWF0b3IoKSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMubW9kZWw7XG4gIH1cbiAgcHVibGljIGdldCB0b29sYm94KCkge1xuICAgIHJldHVybiB0aGlzLmNyZWF0b3IudG9vbGJveDtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCk6IEJhc2Uge1xuICAgIHJldHVybiB0aGlzLnRvb2xib3g7XG4gIH1cblxuICByZW5kZXIoKTogSlNYLkVsZW1lbnQge1xuICAgIGlmICghdGhpcy50b29sYm94Lmhhc0FjdGlvbnMpIHJldHVybiBudWxsO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLXRvb2xib3hcIj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtdG9vbGJveF9fY29udGFpbmVyXCI+XG4gICAgICAgICAgeyh0aGlzLnRvb2xib3guY2F0ZWdvcmllcy5sZW5ndGggPT0gMSB8fCAhdGhpcy50b29sYm94LnNob3dDYXRlZ29yeVRpdGxlcykgP1xuICAgICAgICAgICAgKDxkaXYgY2xhc3NOYW1lPVwic3ZjLXRvb2xib3hfX2NhdGVnb3J5XCI+XG4gICAgICAgICAgICAgIHt0aGlzLnJlbmRlckl0ZW1zKHRoaXMudG9vbGJveC52aXNpYmxlQWN0aW9ucyl9XG4gICAgICAgICAgICA8L2Rpdj4pXG4gICAgICAgICAgICA6IHRoaXMucmVuZGVyQ2F0ZWdvcmllcygpXG4gICAgICAgICAgfVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cblxuICByZW5kZXJJdGVtcyhpdGVtczogQXJyYXk8YW55PiwgaXNDb21wYWN0ID0gZmFsc2UpIHtcbiAgICByZXR1cm4gaXRlbXMubWFwKChpdGVtLCBpdGVtSW5kZXgpID0+XG4gICAgICA8U3VydmV5Q3JlYXRvclRvb2xib3hUb29sIGl0ZW09eyhpdGVtIGFzIGFueSl9IGNyZWF0b3I9e3RoaXMuY3JlYXRvcn0gaXNDb21wYWN0PXtpc0NvbXBhY3R9IGtleT17XCJpdGVtXCIgKyBpdGVtSW5kZXh9ID48L1N1cnZleUNyZWF0b3JUb29sYm94VG9vbD5cbiAgICApO1xuICB9XG5cbiAgcmVuZGVyQ2F0ZWdvcmllcygpIHtcbiAgICByZXR1cm4gdGhpcy50b29sYm94LmNhdGVnb3JpZXMubWFwKChjYXRlZ29yeSwgaW5kZXgpID0+IHtcbiAgICAgIHJldHVybiA8U3VydmV5Q3JlYXRvclRvb2xib3hDYXRlZ29yeSBjYXRlZ29yeT17Y2F0ZWdvcnl9IHRvb2xib3g9e3RoaXMudG9vbGJveH0ga2V5PXtcIml0ZW1cIiArIGluZGV4fSA+PC9TdXJ2ZXlDcmVhdG9yVG9vbGJveENhdGVnb3J5PjtcbiAgICB9KTtcbiAgfVxufVxuXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcInN2Yy10b29sYm94XCIsIChwcm9wcykgPT4ge1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChUb29sYm94LCBwcm9wcyk7XG59KTtcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IEJhc2UgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IGF0dGFjaEtleTJjbGljaywgUmVhY3RFbGVtZW50RmFjdG9yeSwgU3VydmV5RWxlbWVudEJhc2UsIFN2Z0ljb24gfSBmcm9tIFwic3VydmV5LXJlYWN0LXVpXCI7XG5pbXBvcnQgeyBRdWVzdGlvblRvb2xib3gsIFF1ZXN0aW9uVG9vbGJveENhdGVnb3J5IH0gZnJvbSBcInN1cnZleS1jcmVhdG9yLWNvcmVcIjtcbmltcG9ydCB7IFN1cnZleUNyZWF0b3JUb29sYm94VG9vbCB9IGZyb20gXCIuL1Rvb2xib3hJdGVtXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVN1cnZleUNyZWF0b3JUb29sYm94Q2F0ZWdvcnlQcm9wcyB7XG4gIGNhdGVnb3J5OiBRdWVzdGlvblRvb2xib3hDYXRlZ29yeTtcbiAgdG9vbGJveDogUXVlc3Rpb25Ub29sYm94O1xufVxuXG5leHBvcnQgY2xhc3MgU3VydmV5Q3JlYXRvclRvb2xib3hDYXRlZ29yeSBleHRlbmRzIFN1cnZleUVsZW1lbnRCYXNlPElTdXJ2ZXlDcmVhdG9yVG9vbGJveENhdGVnb3J5UHJvcHMsIGFueT4ge1xuXG4gIHB1YmxpYyBnZXQgY2F0ZWdvcnkoKSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuY2F0ZWdvcnk7XG4gIH1cbiAgcHVibGljIGdldCB0b29sYm94KCkge1xuICAgIHJldHVybiB0aGlzLnByb3BzLnRvb2xib3g7XG4gIH1cbiAgcHVibGljIGdldCBjbGFzcygpIHtcbiAgICByZXR1cm4gXCJzdmMtdG9vbGJveF9fY2F0ZWdvcnlcIiArICh0aGlzLmNhdGVnb3J5LmNvbGxhcHNlZCA/IFwiIHN2Yy10b29sYm94X19jYXRlZ29yeS0tY29sbGFwc2VkXCIgOiBcIlwiKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnQoKTogQmFzZSB7XG4gICAgcmV0dXJuICh0aGlzLmNhdGVnb3J5IGFzIGFueSk7XG4gIH1cblxuICByZW5kZXIoKTogSlNYLkVsZW1lbnQge1xuICAgIGNvbnN0IGhlYWRlciA9IHRoaXMucmVuZGVyQ2F0ZWdvcnlIZWFkZXIoKTtcbiAgICBjb25zdCBpdGVtcyA9IHRoaXMucmVuZGVyQ2F0ZWdvcnlDb250ZW50KCk7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPXt0aGlzLmNsYXNzfSBrZXk9e3RoaXMuY2F0ZWdvcnkubmFtZX0+XG4gICAgICAgIHtoZWFkZXJ9XG4gICAgICAgIHtpdGVtc31cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cblxuICByZW5kZXJDYXRlZ29yeUhlYWRlcigpOiBKU1guRWxlbWVudCB7XG4gICAgbGV0IGNsYXNzTmFtZSA9IFwic3ZjLXRvb2xib3hfX2NhdGVnb3J5LWhlYWRlclwiO1xuICAgIGlmICh0aGlzLnRvb2xib3guY2FuQ29sbGFwc2VDYXRlZ29yaWVzKSB7XG4gICAgICBjbGFzc05hbWUgKz0gXCIgc3ZjLXRvb2xib3hfX2NhdGVnb3J5LWhlYWRlci0tY29sbGFwc2VkXCI7XG4gICAgfVxuICAgIHJldHVybiBhdHRhY2hLZXkyY2xpY2soXG4gICAgICA8ZGl2IGNsYXNzTmFtZT17Y2xhc3NOYW1lfSBvbkNsaWNrPXtlID0+IHRoaXMuY2F0ZWdvcnkudG9nZ2xlU3RhdGUoKX0+XG4gICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInN2Yy10b29sYm94X19jYXRlZ29yeS10aXRsZVwiPnt0aGlzLmNhdGVnb3J5Lm5hbWV9PC9zcGFuPlxuICAgICAgICB7dGhpcy5yZW5kZXJCdXR0b24oKX1cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cblxuICByZW5kZXJCdXR0b24oKTogSlNYLkVsZW1lbnQge1xuICAgIGlmICghdGhpcy50b29sYm94LmNhbkNvbGxhcHNlQ2F0ZWdvcmllcykgcmV0dXJuIG51bGw7XG5cbiAgICBjb25zdCBpY29uTmFtZSA9IHRoaXMuY2F0ZWdvcnkuY29sbGFwc2VkID8gXCJhcnJvdy1kb3duXCIgOiBcImFycm93LXVwXCI7XG4gICAgY29uc3Qgc3VmZml4TmFtZSA9IHRoaXMuY2F0ZWdvcnkuY29sbGFwc2VkID8gXCJleHBhbmRcIiA6IFwiY29sbGFwc2VcIjtcbiAgICBjb25zdCBzdmdJY29uQ2xhc3NOYW1lID0gXCJzdmMtdG9vbGJveF9fY2F0ZWdvcnktaGVhZGVyX19idXR0b24gc3ZjLXN0cmluZy1lZGl0b3JfX2J1dHRvbi0tXCIgKyBzdWZmaXhOYW1lO1xuICAgIHJldHVybiAoPGRpdiBjbGFzc05hbWU9XCJzdmMtdG9vbGJveF9fY2F0ZWdvcnktaGVhZGVyX19jb250cm9sc1wiPlxuICAgICAgPFN2Z0ljb24gY2xhc3NOYW1lPXtzdmdJY29uQ2xhc3NOYW1lfSBpY29uTmFtZT17XCJpY29uLVwiICsgaWNvbk5hbWV9IHNpemU9ezI0fT48L1N2Z0ljb24+XG4gICAgPC9kaXY+KTtcbiAgfVxuXG4gIHByb3RlY3RlZCByZW5kZXJDYXRlZ29yeUNvbnRlbnQoKTogQXJyYXk8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMucmVuZGVySXRlbXModGhpcy5jYXRlZ29yeS5pdGVtcyk7XG4gIH1cblxuICByZW5kZXJJdGVtcyhpdGVtczogQXJyYXk8YW55PiwgaXNDb21wYWN0ID0gZmFsc2UpIHtcbiAgICByZXR1cm4gaXRlbXMubWFwKChpdGVtLCBpdGVtSW5kZXgpID0+XG4gICAgICA8U3VydmV5Q3JlYXRvclRvb2xib3hUb29sIGl0ZW09eyhpdGVtIGFzIGFueSl9IGNyZWF0b3I9e3RoaXMudG9vbGJveC5jcmVhdG9yfSBpc0NvbXBhY3Q9e2lzQ29tcGFjdH0ga2V5PXtcIml0ZW1cIiArIGl0ZW1JbmRleH0gPjwvU3VydmV5Q3JlYXRvclRvb2xib3hUb29sPlxuICAgICk7XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXCJzdmMtdG9vbGJveC1jYXRlZ29yeVwiLCAocHJvcHMpID0+IHtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3VydmV5Q3JlYXRvclRvb2xib3hDYXRlZ29yeSwgcHJvcHMpO1xufSk7IiwiaW1wb3J0IHtcbiAgQ3JlYXRvckJhc2UsXG4gIGVkaXRvckxvY2FsaXphdGlvbixcbiAgSVF1ZXN0aW9uVG9vbGJveEl0ZW1cbn0gZnJvbSBcInN1cnZleS1jcmVhdG9yLWNvcmVcIjtcbmltcG9ydCBSZWFjdCwgeyBDU1NQcm9wZXJ0aWVzIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBUb29sYm94VG9vbFZpZXdNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY3JlYXRvci1jb3JlXCI7XG5pbXBvcnQge1xuICBBY3Rpb24sXG4gIEJhc2UsXG4gIFN1cnZleU1vZGVsXG59IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHtcbiAgYXR0YWNoS2V5MmNsaWNrLFxuICBSZWFjdEVsZW1lbnRGYWN0b3J5LFxuICBTdmdJY29uXG59IGZyb20gXCJzdXJ2ZXktcmVhY3QtdWlcIjtcbmltcG9ydCB7IENyZWF0b3JNb2RlbEVsZW1lbnQgfSBmcm9tIFwiLi4vTW9kZWxFbGVtZW50XCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVN1cnZleUNyZWF0b3JUb29sYm94SXRlbVByb3BzIHtcbiAgaXRlbTogSVF1ZXN0aW9uVG9vbGJveEl0ZW07XG4gIGNyZWF0b3I6IENyZWF0b3JCYXNlO1xuICBpc0NvbXBhY3Q6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlDcmVhdG9yVG9vbGJveFRvb2wgZXh0ZW5kcyBDcmVhdG9yTW9kZWxFbGVtZW50PFxuICBJU3VydmV5Q3JlYXRvclRvb2xib3hJdGVtUHJvcHMsXG4gIGFueVxuPiB7XG4gIG1vZGVsOiBUb29sYm94VG9vbFZpZXdNb2RlbDtcblxuICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgfVxuICBwcm90ZWN0ZWQgY3JlYXRlTW9kZWwoKTogdm9pZCB7XG4gICAgdGhpcy5tb2RlbCA9IG5ldyBUb29sYm94VG9vbFZpZXdNb2RlbCh0aGlzLml0ZW0sIHRoaXMucHJvcHMuY3JlYXRvcik7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFVwZGF0ZWRNb2RlbFByb3BzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gW1wiY3JlYXRvclwiLCBcIml0ZW1cIl07XG4gIH1cbiAgcHVibGljIGdldCBpdGVtKCkge1xuICAgIHJldHVybiB0aGlzLnByb3BzLml0ZW07XG4gIH1cbiAgcHVibGljIGdldCBjcmVhdG9yKCkge1xuICAgIHJldHVybiB0aGlzLnByb3BzLmNyZWF0b3I7XG4gIH1cbiAgcHVibGljIGdldCBpc0NvbXBhY3QoKSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuaXNDb21wYWN0O1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldFN0YXRlRWxlbWVudCgpOiBCYXNlIHtcbiAgICByZXR1cm4gKHRoaXMuaXRlbSBhcyBhbnkpO1xuICB9XG5cbiAgcmVuZGVyKCk6IEpTWC5FbGVtZW50IHtcbiAgICBjb25zdCBpdGVtID0gKCh0aGlzLml0ZW0gYXMgYW55KSBhcyBBY3Rpb24pO1xuICAgIGNvbnN0IGNsYXNzTmFtZSA9IFwic3ZjLXRvb2xib3hfX3Rvb2wgXCIgKyBpdGVtLmNzcyArIChpdGVtLmlzVmlzaWJsZSA/IFwiXCIgOiBcIiBzdi1hY3Rpb24tLWhpZGRlblwiKTtcbiAgICBjb25zdCBpdGVtQ29tcG9uZW50ID0gUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5jcmVhdGVFbGVtZW50KFxuICAgICAgdGhpcy5pdGVtLmNvbXBvbmVudCB8fCBcInN2Yy10b29sYm94LWl0ZW1cIixcbiAgICAgIHtcbiAgICAgICAgaXRlbTogdGhpcy5pdGVtLFxuICAgICAgICBjcmVhdG9yOiB0aGlzLmNyZWF0b3IsXG4gICAgICAgIGlzQ29tcGFjdDogdGhpcy5pc0NvbXBhY3RcbiAgICAgIH1cbiAgICApO1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT17Y2xhc3NOYW1lfSBrZXk9e2l0ZW0uaWR9XG4gICAgICAgIG9uUG9pbnRlckRvd249eyhldmVudDogYW55KSA9PiB7XG4gICAgICAgICAgZXZlbnQucGVyc2lzdCgpO1xuICAgICAgICAgIHRoaXMubW9kZWwub25Qb2ludGVyRG93bihldmVudCk7XG4gICAgICAgIH19XG4gICAgICA+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3YtYWN0aW9uX19jb250ZW50XCI+XG4gICAgICAgICAgeyhpdGVtLm5lZWRTZXBhcmF0b3IgJiYgIXRoaXMuY3JlYXRvci50b29sYm94LnNob3dDYXRlZ29yeVRpdGxlcykgPyAoXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy10b29sYm94X19jYXRlZ29yeS1zZXBhcmF0b3JcIj48L2Rpdj5cbiAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICB7aXRlbUNvbXBvbmVudH1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlDcmVhdG9yVG9vbGJveEl0ZW0gZXh0ZW5kcyBDcmVhdG9yTW9kZWxFbGVtZW50PFxuICBJU3VydmV5Q3JlYXRvclRvb2xib3hJdGVtUHJvcHMsXG4gIGFueVxuPiB7XG4gIG1vZGVsOiBUb29sYm94VG9vbFZpZXdNb2RlbDtcbiAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gIH1cbiAgcHJvdGVjdGVkIGNyZWF0ZU1vZGVsKCk6IHZvaWQge1xuICAgIGNvbnN0IHRvb2xib3hJdGVtOiBJUXVlc3Rpb25Ub29sYm94SXRlbSA9IHRoaXMucHJvcHMuaXRlbTtcbiAgICB0aGlzLm1vZGVsID0gbmV3IFRvb2xib3hUb29sVmlld01vZGVsKHRvb2xib3hJdGVtLCB0aGlzLnByb3BzLmNyZWF0b3IpO1xuICB9XG4gIHByb3RlY3RlZCBnZXRVcGRhdGVkTW9kZWxQcm9wcygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIFtcImNyZWF0b3JcIiwgXCJpdGVtXCJdO1xuICB9XG4gIHB1YmxpYyBnZXQgaXRlbSgpIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5pdGVtO1xuICB9XG4gIHB1YmxpYyBnZXQgY3JlYXRvcigpIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5jcmVhdG9yO1xuICB9XG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnQoKTogQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMubW9kZWw7XG4gIH1cbiAgcmVuZGVyKCk6IEpTWC5FbGVtZW50IHtcbiAgICBjb25zdCBjbGFzc05hbWUgPVxuICAgICAgXCJzdmMtdG9vbGJveF9faXRlbSBzdmMtdG9vbGJveF9faXRlbS0tXCIgKyB0aGlzLml0ZW0uaWNvbk5hbWU7XG4gICAgY29uc3QgYXJpYUxhYmVsID0gdGhpcy5pdGVtLnRvb2x0aXAgKyBcIiBcIiArIGVkaXRvckxvY2FsaXphdGlvbi5nZXRTdHJpbmcoXCJ0b29sYm94XCIpICsgXCIgaXRlbVwiO1xuICAgIHJldHVybiBhdHRhY2hLZXkyY2xpY2soXG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzTmFtZT17Y2xhc3NOYW1lfVxuICAgICAgICB0YWJJbmRleD17MH1cbiAgICAgICAgcm9sZT1cImJ1dHRvblwiXG4gICAgICAgIGFyaWEtbGFiZWw9e2FyaWFMYWJlbH1cbiAgICAgICAgb25DbGljaz17KGV2ZW50OiBhbnkpID0+IHtcbiAgICAgICAgICBldmVudC5wZXJzaXN0KCk7XG4gICAgICAgICAgdGhpcy5tb2RlbC5jbGljayhldmVudCk7XG4gICAgICAgIH19XG4gICAgICA+XG4gICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInN2Yy10b29sYm94X19pdGVtLWNvbnRhaW5lclwiPlxuICAgICAgICAgIDxTdmdJY29uIHNpemU9ezI0fSBpY29uTmFtZT17dGhpcy5pdGVtLmljb25OYW1lfSB0aXRsZT17YXJpYUxhYmVsfT48L1N2Z0ljb24+XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICAgeyh0aGlzLnByb3BzLmlzQ29tcGFjdCA/XG4gICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwic3ZjLXRvb2xib3hfX2l0ZW0tYmFubmVyIHN2Yy1pdGVtX19iYW5uZXJcIj5cbiAgICAgICAgICAgIDxTdmdJY29uIHNpemU9ezI0fSBpY29uTmFtZT17dGhpcy5pdGVtLmljb25OYW1lfSBjbGFzc05hbWU9XCJzdmMtdG9vbGJveF9faXRlbS1pY29uXCIgdGl0bGU9e2FyaWFMYWJlbH0+PC9TdmdJY29uPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwic3ZjLXRvb2xib3hfX2l0ZW0tdGl0bGVcIj57dGhpcy5pdGVtLnRpdGxlfTwvc3Bhbj5cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgOlxuICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInN2Yy10b29sYm94X19pdGVtLXRpdGxlXCI+e3RoaXMuaXRlbS50aXRsZX08L3NwYW4+XG4gICAgICAgICl9XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59XG5cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFwic3ZjLXRvb2xib3gtaXRlbVwiLCAocHJvcHMpID0+IHtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3VydmV5Q3JlYXRvclRvb2xib3hJdGVtLCBwcm9wcyk7XG59KTtcbiIsIm1vZHVsZS5leHBvcnRzID0gX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV9yZWFjdF9fOyIsIm1vZHVsZS5leHBvcnRzID0gX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV9yZWFjdF9kb21fXzsiLCJtb2R1bGUuZXhwb3J0cyA9IF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfc3VydmV5X2NvcmVfXzsiLCJtb2R1bGUuZXhwb3J0cyA9IF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfc3VydmV5X2NyZWF0b3JfY29yZV9fOyIsIm1vZHVsZS5leHBvcnRzID0gX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV9zdXJ2ZXlfcmVhY3RfdWlfXzsiXSwic291cmNlUm9vdCI6IiJ9
|
|
4198
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yL3dlYnBhY2svdW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbiIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yL3dlYnBhY2svYm9vdHN0cmFwIiwid2VicGFjazovL1N1cnZleUNyZWF0b3IvLi9zcmMvQWN0aW9uQnV0dG9uLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yLy4vc3JjL0ltYWdlSXRlbVZhbHVlV3JhcHBlci50c3giLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci8uL3NyYy9JdGVtVmFsdWVXcmFwcGVyLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yLy4vc3JjL0xvZ29JbWFnZS50c3giLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci8uL3NyYy9NYXRyaXhDZWxsV3JhcHBlci50c3giLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci8uL3NyYy9Nb2RlbEVsZW1lbnQudHN4Iiwid2VicGFjazovL1N1cnZleUNyZWF0b3IvLi9zcmMvTmF2aWdhdGlvbi50c3giLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci8uL3NyYy9Ob3RpZmllci50c3giLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci8uL3NyYy9PYmplY3RTZWxlY3Rvci50c3giLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci8uL3NyYy9QYWdlTmF2aWdhdG9yLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yLy4vc3JjL1Byb3BlcnR5R3JpZC50c3giLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci8uL3NyYy9RdWVzdGlvbkVkaXRvckNvbnRlbnQudHN4Iiwid2VicGFjazovL1N1cnZleUNyZWF0b3IvLi9zcmMvUXVlc3Rpb25FbWJlZGRlZFN1cnZleS50c3giLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci8uL3NyYy9RdWVzdGlvbkxpbmtWYWx1ZS50c3giLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci8uL3NyYy9SZXN1bHRzLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yLy4vc3JjL1NpZGVCYXIudHN4Iiwid2VicGFjazovL1N1cnZleUNyZWF0b3IvLi9zcmMvU3RyaW5nRWRpdG9yLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yLy4vc3JjL1N1cnZleUNyZWF0b3IudHN4Iiwid2VicGFjazovL1N1cnZleUNyZWF0b3IvLi9zcmMvU3ZnQnVuZGxlLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yLy4vc3JjL1RhYmJlZE1lbnUudHN4Iiwid2VicGFjazovL1N1cnZleUNyZWF0b3IvLi9zcmMvYWRvcm5lcnMvQ2VsbFF1ZXN0aW9uLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yLy4vc3JjL2Fkb3JuZXJzL0NlbGxRdWVzdGlvbkRyb3Bkb3duLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yLy4vc3JjL2Fkb3JuZXJzL1BhZ2UudHN4Iiwid2VicGFjazovL1N1cnZleUNyZWF0b3IvLi9zcmMvYWRvcm5lcnMvUGFuZWwudHN4Iiwid2VicGFjazovL1N1cnZleUNyZWF0b3IvLi9zcmMvYWRvcm5lcnMvUXVlc3Rpb24udHN4Iiwid2VicGFjazovL1N1cnZleUNyZWF0b3IvLi9zcmMvYWRvcm5lcnMvUXVlc3Rpb25Ecm9wZG93bi50c3giLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci8uL3NyYy9hZG9ybmVycy9RdWVzdGlvbkZvb3Rlci50c3giLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci8uL3NyYy9hZG9ybmVycy9RdWVzdGlvbkhlYWRlci50c3giLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci8uL3NyYy9hZG9ybmVycy9RdWVzdGlvbkltYWdlLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yLy4vc3JjL2Fkb3JuZXJzL1F1ZXN0aW9uUmF0aW5nLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yLy4vc3JjL2Fkb3JuZXJzL1F1ZXN0aW9uV2lkZ2V0LnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yLy4vc3JjL2Fkb3JuZXJzL1Jvdy50c3giLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci8uL3NyYy9lbnRyaWVzL2hlbHBlcnMudHMiLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci8uL3NyYy9lbnRyaWVzL2luZGV4LnRzIiwid2VicGFjazovL1N1cnZleUNyZWF0b3IvLi9zcmMvZXZlbnRzLnRzIiwid2VicGFjazovL1N1cnZleUNyZWF0b3IvLi9zcmMvdGFicy9EZXNpZ25lci50c3giLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci8uL3NyYy90YWJzL0VtYmVkLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yLy4vc3JjL3RhYnMvSnNvbkVkaXRvckFjZS50c3giLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci8uL3NyYy90YWJzL0pzb25FZGl0b3JUZXh0YXJlYS50c3giLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci8uL3NyYy90YWJzL0xvZ2ljLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yLy4vc3JjL3RhYnMvUHJldmlldy50c3giLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci8uL3NyYy90YWJzL1N1cnZleVNpbXVsYXRvci50c3giLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci8uL3NyYy90YWJzL1RyYW5zbGF0aW9uLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yLy4vc3JjL3RhYnMvVHJhbnNsYXRpb25MaW5lU2tlbGV0b24udHN4Iiwid2VicGFjazovL1N1cnZleUNyZWF0b3IvLi9zcmMvdGFicy9sb2dpYy1vcGVyYXRvci50c3giLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci8uL3NyYy90b29sYm94L0FkYXB0aXZlVG9vbGJveC50c3giLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci8uL3NyYy90b29sYm94L1Rvb2xib3gudHN4Iiwid2VicGFjazovL1N1cnZleUNyZWF0b3IvLi9zcmMvdG9vbGJveC9Ub29sYm94Q2F0ZWdvcnkudHN4Iiwid2VicGFjazovL1N1cnZleUNyZWF0b3IvLi9zcmMvdG9vbGJveC9Ub29sYm94SXRlbS50c3giLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci9leHRlcm5hbCB7XCJyb290XCI6XCJSZWFjdFwiLFwiY29tbW9uanMyXCI6XCJyZWFjdFwiLFwiY29tbW9uanNcIjpcInJlYWN0XCIsXCJhbWRcIjpcInJlYWN0XCJ9Iiwid2VicGFjazovL1N1cnZleUNyZWF0b3IvZXh0ZXJuYWwge1wicm9vdFwiOlwiUmVhY3RET01cIixcImNvbW1vbmpzMlwiOlwicmVhY3QtZG9tXCIsXCJjb21tb25qc1wiOlwicmVhY3QtZG9tXCIsXCJhbWRcIjpcInJlYWN0LWRvbVwifSIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yL2V4dGVybmFsIHtcInJvb3RcIjpcIlN1cnZleVwiLFwiY29tbW9uanMyXCI6XCJzdXJ2ZXktY29yZVwiLFwiY29tbW9uanNcIjpcInN1cnZleS1jb3JlXCIsXCJhbWRcIjpcInN1cnZleS1jb3JlXCJ9Iiwid2VicGFjazovL1N1cnZleUNyZWF0b3IvZXh0ZXJuYWwge1wicm9vdFwiOlwiU3VydmV5Q3JlYXRvckNvcmVcIixcImNvbW1vbmpzMlwiOlwic3VydmV5LWNyZWF0b3ItY29yZVwiLFwiY29tbW9uanNcIjpcInN1cnZleS1jcmVhdG9yLWNvcmVcIixcImFtZFwiOlwic3VydmV5LWNyZWF0b3ItY29yZVwifSIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yL2V4dGVybmFsIHtcInJvb3RcIjpcIlN1cnZleVJlYWN0XCIsXCJjb21tb25qczJcIjpcInN1cnZleS1yZWFjdC11aVwiLFwiY29tbW9uanNcIjpcInN1cnZleS1yZWFjdC11aVwiLFwiYW1kXCI6XCJzdXJ2ZXktcmVhY3QtdWlcIn0iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNELE87UUNWQTtRQUNBOztRQUVBO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNB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QTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBTyxJQUFJLE9BQWUsQ0FBQztBQUMzQixPQUFPLEdBQUcsVUFBRyxRQUFtQixDQUFFLENBQUM7QUFFbkMsb0RBQW9EO0FBRW5CO0FBRUQ7QUFDSztBQUNNO0FBQ0E7QUFDRTtBQUNIO0FBQ0M7QUFDQTtBQUNGO0FB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Q0FDRyxDQUNQLENBQUM7SUFDSixDQUFDO0lBQ0gsK0JBQUM7QUFBRCxDQUFDLENBckQ2QyxpRUFBbUIsR0FxRGhFOztBQUVELG1FQUFtQixDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUMsa0JBQWtCLEVBQUUsVUFBQyxLQUFLO0lBQ3JFLE9BQU8sNENBQUssQ0FBQyxhQUFhLENBQUMsd0JBQXdCLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDOUQsQ0FBQyxDQUFDLENBQUM7Ozs7Ozs7Ozs7OztBQzVJSCxtRDs7Ozs7Ozs7Ozs7QUNBQSx1RDs7Ozs7Ozs7Ozs7QUNBQSx5RDs7Ozs7Ozs7Ozs7QUNBQSxpRTs7Ozs7Ozs7Ozs7QUNBQSw2RCIsImZpbGUiOiJzdXJ2ZXktY3JlYXRvci1yZWFjdC5qcyIsInNvdXJjZXNDb250ZW50IjpbIihmdW5jdGlvbiB3ZWJwYWNrVW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbihyb290LCBmYWN0b3J5KSB7XG5cdGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlID09PSAnb2JqZWN0Jylcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkocmVxdWlyZShcInJlYWN0XCIpLCByZXF1aXJlKFwicmVhY3QtZG9tXCIpLCByZXF1aXJlKFwic3VydmV5LWNvcmVcIiksIHJlcXVpcmUoXCJzdXJ2ZXktY3JlYXRvci1jb3JlXCIpLCByZXF1aXJlKFwic3VydmV5LXJlYWN0LXVpXCIpKTtcblx0ZWxzZSBpZih0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpXG5cdFx0ZGVmaW5lKFwiU3VydmV5Q3JlYXRvclwiLCBbXCJyZWFjdFwiLCBcInJlYWN0LWRvbVwiLCBcInN1cnZleS1jb3JlXCIsIFwic3VydmV5LWNyZWF0b3ItY29yZVwiLCBcInN1cnZleS1yZWFjdC11aVwiXSwgZmFjdG9yeSk7XG5cdGVsc2UgaWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnKVxuXHRcdGV4cG9ydHNbXCJTdXJ2ZXlDcmVhdG9yXCJdID0gZmFjdG9yeShyZXF1aXJlKFwicmVhY3RcIiksIHJlcXVpcmUoXCJyZWFjdC1kb21cIiksIHJlcXVpcmUoXCJzdXJ2ZXktY29yZVwiKSwgcmVxdWlyZShcInN1cnZleS1jcmVhdG9yLWNvcmVcIiksIHJlcXVpcmUoXCJzdXJ2ZXktcmVhY3QtdWlcIikpO1xuXHRlbHNlXG5cdFx0cm9vdFtcIlN1cnZleUNyZWF0b3JcIl0gPSBmYWN0b3J5KHJvb3RbXCJSZWFjdFwiXSwgcm9vdFtcIlJlYWN0RE9NXCJdLCByb290W1wiU3VydmV5XCJdLCByb290W1wiU3VydmV5Q3JlYXRvckNvcmVcIl0sIHJvb3RbXCJTdXJ2ZXlSZWFjdFwiXSk7XG59KSh0aGlzLCBmdW5jdGlvbihfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFX3JlYWN0X18sIF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfcmVhY3RfZG9tX18sIF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfc3VydmV5X2NvcmVfXywgX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV9zdXJ2ZXlfY3JlYXRvcl9jb3JlX18sIF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfc3VydmV5X3JlYWN0X3VpX18pIHtcbnJldHVybiAiLCIgXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuXG4gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXG4gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSkge1xuIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuIFx0XHR9XG4gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcbiBcdFx0XHRpOiBtb2R1bGVJZCxcbiBcdFx0XHRsOiBmYWxzZSxcbiBcdFx0XHRleHBvcnRzOiB7fVxuIFx0XHR9O1xuXG4gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4gXHRcdG1vZHVsZS5sID0gdHJ1ZTtcblxuIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4gXHR9XG5cblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuXG4gXHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9uIGZvciBoYXJtb255IGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uZCA9IGZ1bmN0aW9uKGV4cG9ydHMsIG5hbWUsIGdldHRlcikge1xuIFx0XHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIG5hbWUpKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBnZXR0ZXIgfSk7XG4gXHRcdH1cbiBcdH07XG5cbiBcdC8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uciA9IGZ1bmN0aW9uKGV4cG9ydHMpIHtcbiBcdFx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG4gXHRcdH1cbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiBcdH07XG5cbiBcdC8vIGNyZWF0ZSBhIGZha2UgbmFtZXNwYWNlIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDE6IHZhbHVlIGlzIGEgbW9kdWxlIGlkLCByZXF1aXJlIGl0XG4gXHQvLyBtb2RlICYgMjogbWVyZ2UgYWxsIHByb3BlcnRpZXMgb2YgdmFsdWUgaW50byB0aGUgbnNcbiBcdC8vIG1vZGUgJiA0OiByZXR1cm4gdmFsdWUgd2hlbiBhbHJlYWR5IG5zIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDh8MTogYmVoYXZlIGxpa2UgcmVxdWlyZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy50ID0gZnVuY3Rpb24odmFsdWUsIG1vZGUpIHtcbiBcdFx0aWYobW9kZSAmIDEpIHZhbHVlID0gX193ZWJwYWNrX3JlcXVpcmVfXyh2YWx1ZSk7XG4gXHRcdGlmKG1vZGUgJiA4KSByZXR1cm4gdmFsdWU7XG4gXHRcdGlmKChtb2RlICYgNCkgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAmJiB2YWx1ZS5fX2VzTW9kdWxlKSByZXR1cm4gdmFsdWU7XG4gXHRcdHZhciBucyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18ucihucyk7XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShucywgJ2RlZmF1bHQnLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2YWx1ZSB9KTtcbiBcdFx0aWYobW9kZSAmIDIgJiYgdHlwZW9mIHZhbHVlICE9ICdzdHJpbmcnKSBmb3IodmFyIGtleSBpbiB2YWx1ZSkgX193ZWJwYWNrX3JlcXVpcmVfXy5kKG5zLCBrZXksIGZ1bmN0aW9uKGtleSkgeyByZXR1cm4gdmFsdWVba2V5XTsgfS5iaW5kKG51bGwsIGtleSkpO1xuIFx0XHRyZXR1cm4gbnM7XG4gXHR9O1xuXG4gXHQvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5uID0gZnVuY3Rpb24obW9kdWxlKSB7XG4gXHRcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuIFx0XHRcdGZ1bmN0aW9uIGdldERlZmF1bHQoKSB7IHJldHVybiBtb2R1bGVbJ2RlZmF1bHQnXTsgfSA6XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0TW9kdWxlRXhwb3J0cygpIHsgcmV0dXJuIG1vZHVsZTsgfTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpO1xuIFx0XHRyZXR1cm4gZ2V0dGVyO1xuIFx0fTtcblxuIFx0Ly8gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5KSB7IHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSk7IH07XG5cbiBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcIlwiO1xuXG5cbiBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gXCIuL3NyYy9lbnRyaWVzL2luZGV4LnRzXCIpO1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgYXR0YWNoS2V5MmNsaWNrLCBTdXJ2ZXlFbGVtZW50QmFzZSwgfSBmcm9tIFwic3VydmV5LXJlYWN0LXVpXCI7XG5cbmV4cG9ydCBjbGFzcyBBY3Rpb25CdXR0b24gZXh0ZW5kcyBTdXJ2ZXlFbGVtZW50QmFzZTxhbnksIGFueT4ge1xuICByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICBsZXQgY2xhc3NlcyA9IHRoaXMucHJvcHMuY2xhc3NlcyArIFwiIHN2Yy1hY3Rpb24tYnV0dG9uXCI7XG4gICAgaWYgKHRoaXMucHJvcHMuc2VsZWN0ZWQpIHtcbiAgICAgIGNsYXNzZXMgKz0gXCIgc3ZjLWFjdGlvbi1idXR0b24tLXNlbGVjdGVkXCI7XG4gICAgfVxuICAgIGlmICh0aGlzLnByb3BzLmRpc2FibGVkKSB7XG4gICAgICBjbGFzc2VzICs9IFwiIHN2Yy1hY3Rpb24tYnV0dG9uLS1kaXNhYmxlZFwiO1xuICAgICAgcmV0dXJuIDxzcGFuIGNsYXNzTmFtZT17Y2xhc3Nlc30+e3RoaXMucHJvcHMudGV4dH08L3NwYW4+O1xuICAgIH1cbiAgICByZXR1cm4gKFxuICAgICAgPD5cbiAgICAgICAge2F0dGFjaEtleTJjbGljayhcbiAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgcm9sZT1cImJ1dHRvblwiXG4gICAgICAgICAgICBjbGFzc05hbWU9e2NsYXNzZXN9XG4gICAgICAgICAgICBvbkNsaWNrPXsoZSkgPT4ge1xuICAgICAgICAgICAgICBpZiAoIXRoaXMucHJvcHMuYWxsb3dCdWJibGUpIHtcbiAgICAgICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHRoaXMucHJvcHMuY2xpY2soKTtcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgICB0aXRsZT17dGhpcy5wcm9wcy50aXRsZX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICB7dGhpcy5wcm9wcy50ZXh0fVxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgKX1cbiAgICAgIDwvPlxuICAgICk7XG4gIH1cbn1cbiIsImltcG9ydCB7IEltYWdlSXRlbVZhbHVlV3JhcHBlclZpZXdNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY3JlYXRvci1jb3JlXCI7XG5pbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBRdWVzdGlvblNlbGVjdEJhc2UsIEJhc2UsIEltYWdlSXRlbVZhbHVlLCBRdWVzdGlvbkltYWdlUGlja2VyTW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFJlYWN0RWxlbWVudEZhY3RvcnksIFN2Z0ljb24gfSBmcm9tIFwic3VydmV5LXJlYWN0LXVpXCI7XG5pbXBvcnQge1xuICBhdHRhY2hLZXkyY2xpY2ssXG59IGZyb20gXCJzdXJ2ZXktcmVhY3QtdWlcIjtcbmltcG9ydCB7IENyZWF0b3JNb2RlbEVsZW1lbnQgfSBmcm9tIFwiLi9Nb2RlbEVsZW1lbnRcIjtcblxuaW50ZXJmYWNlIEltYWdlSXRlbVZhbHVlQWRvcm5lckNvbXBvbmVudFByb3BzIHtcbiAgZWxlbWVudDogSlNYLkVsZW1lbnQ7XG4gIGNvbXBvbmVudERhdGE6IGFueTtcbiAgcXVlc3Rpb246IFF1ZXN0aW9uU2VsZWN0QmFzZTtcbiAgaXRlbTogSW1hZ2VJdGVtVmFsdWU7XG59XG5cbmV4cG9ydCBjbGFzcyBJbWFnZUl0ZW1WYWx1ZUFkb3JuZXJDb21wb25lbnQgZXh0ZW5kcyBDcmVhdG9yTW9kZWxFbGVtZW50PFxuICBJbWFnZUl0ZW1WYWx1ZUFkb3JuZXJDb21wb25lbnRQcm9wcyxcbiAgYW55XG4+IHtcbiAgbW9kZWw6IEltYWdlSXRlbVZhbHVlV3JhcHBlclZpZXdNb2RlbDtcbiAgcHJpdmF0ZSByb290UmVmOiBSZWFjdC5SZWZPYmplY3Q8SFRNTERpdkVsZW1lbnQ+O1xuXG4gIGNvbnN0cnVjdG9yKHByb3BzOiBJbWFnZUl0ZW1WYWx1ZUFkb3JuZXJDb21wb25lbnRQcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLnJvb3RSZWYgPSBSZWFjdC5jcmVhdGVSZWYoKTtcbiAgfVxuICBwcm90ZWN0ZWQgY3JlYXRlTW9kZWwoKTogdm9pZCB7XG4gICAgdGhpcy5tb2RlbCA9IG5ldyBJbWFnZUl0ZW1WYWx1ZVdyYXBwZXJWaWV3TW9kZWwoXG4gICAgICB0aGlzLnByb3BzLmNvbXBvbmVudERhdGEuY3JlYXRvcixcbiAgICAgIHRoaXMucHJvcHMucXVlc3Rpb24sXG4gICAgICB0aGlzLnByb3BzLml0ZW0sXG4gICAgICBudWxsLFxuICAgICAgbnVsbFxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFVwZGF0ZWRNb2RlbFByb3BzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gW1wicXVlc3Rpb25cIiwgXCJpdGVtXCJdO1xuICB9XG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnQoKTogQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMubW9kZWw7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0IHF1ZXN0aW9uKCk6IFF1ZXN0aW9uSW1hZ2VQaWNrZXJNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMucXVlc3Rpb24gYXMgUXVlc3Rpb25JbWFnZVBpY2tlck1vZGVsO1xuICB9XG5cbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgc3VwZXIuY29tcG9uZW50RGlkTW91bnQoKTtcbiAgICB0aGlzLm1vZGVsLml0ZW1zUm9vdCA9IHRoaXMucm9vdFJlZi5jdXJyZW50O1xuICB9XG5cbiAgY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wcywgcHJldlN0YXRlKSB7XG4gICAgc3VwZXIuY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wcywgcHJldlN0YXRlKTtcbiAgICB0aGlzLm1vZGVsLml0ZW1zUm9vdCA9IHRoaXMucm9vdFJlZi5jdXJyZW50O1xuICB9XG5cbiAgcHJldmVudERyYWdIYW5kbGVyID0gKGUpID0+IHtcbiAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gIH1cblxuICByZW5kZXIoKTogSlNYLkVsZW1lbnQge1xuICAgIC8vIGlmICh0aGlzLm1vZGVsLnF1ZXN0aW9uLmlzRHJhZ2dlZCkge1xuICAgIC8vICAgcmV0dXJuIG51bGw7XG4gICAgLy8gfVxuICAgIHRoaXMubW9kZWwuaXRlbSA9IHRoaXMucHJvcHMuaXRlbTtcbiAgICBjb25zdCBpc05ldyA9ICF0aGlzLnByb3BzLnF1ZXN0aW9uLmlzSXRlbUluTGlzdCh0aGlzLnByb3BzLml0ZW0pO1xuICAgIHRoaXMubW9kZWwuaXNOZXcgPSBpc05ldztcbiAgICBjb25zdCBpbWFnZVN0eWxlID0gIXRoaXMubW9kZWwuZ2V0SXNOZXdJdGVtU2luZ2xlKCkgPyB7IHdpZHRoOiB0aGlzLnF1ZXN0aW9uLnJlbmRlcmVkSW1hZ2VXaWR0aCwgaGVpZ2h0OiB0aGlzLnF1ZXN0aW9uLnJlbmRlcmVkSW1hZ2VIZWlnaHQgfSA6IG51bGw7XG5cbiAgICBsZXQgY29udGVudCA9IG51bGw7XG4gICAgaWYgKGlzTmV3KSB7XG4gICAgICBjb250ZW50ID0gKDw+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLWltYWdlLWl0ZW0tdmFsdWVfX2l0ZW1cIlxuICAgICAgICAgIG9uRHJvcD17dGhpcy5tb2RlbC5vbkRyb3B9IG9uRHJhZ092ZXI9e3RoaXMubW9kZWwub25EcmFnT3Zlcn0gb25EcmFnTGVhdmU9e3RoaXMubW9kZWwub25EcmFnTGVhdmV9PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic2QtaW1hZ2VwaWNrZXJfX2l0ZW0gc2QtaW1hZ2VwaWNrZXJfX2l0ZW0tLWlubGluZVwiPlxuICAgICAgICAgICAgPGxhYmVsIGNsYXNzTmFtZT1cInNkLWltYWdlcGlja2VyX19sYWJlbFwiPlxuICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXtpbWFnZVN0eWxlfSBjbGFzc05hbWU9XCJzZC1pbWFnZXBpY2tlcl9faW1hZ2VcIj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy1pbWFnZS1pdGVtLXZhbHVlLWNvbnRyb2xzXCI+XG4gICAgICAgICAge3RoaXMubW9kZWwuYWxsb3dBZGQgPyBhdHRhY2hLZXkyY2xpY2soPHNwYW4gY2xhc3NOYW1lPVwic3ZjLWltYWdlLWl0ZW0tdmFsdWUtY29udHJvbHNfX2J1dHRvbiBzdmMtaW1hZ2UtaXRlbS12YWx1ZS1jb250cm9sc19fYWRkXCIgb25DbGljaz17KCkgPT4gdGhpcy5tb2RlbC5jaG9vc2VOZXdGaWxlKHRoaXMubW9kZWwpfT5cbiAgICAgICAgICAgIDxTdmdJY29uIHNpemU9ezI0fSBpY29uTmFtZT17XCJpY29uLWFkZC1sZ1wifT48L1N2Z0ljb24+XG4gICAgICAgICAgPC9zcGFuPikgOiBudWxsfVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvPik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnRlbnQgPSAoXG4gICAgICAgIDw+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e1wic3ZjLWltYWdlLWl0ZW0tdmFsdWVfX2l0ZW1cIn0+XG4gICAgICAgICAgICB7dGhpcy5wcm9wcy5lbGVtZW50fVxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwic3ZjLWltYWdlLWl0ZW0tdmFsdWUtY29udHJvbHNfX2J1dHRvbiBzdmMtaW1hZ2UtaXRlbS12YWx1ZS1jb250cm9sc19fZHJhZy1hcmVhLWluZGljYXRvclwiXG4gICAgICAgICAgICBvblBvaW50ZXJEb3duPXsoZXZlbnQ6IGFueSkgPT4gdGhpcy5tb2RlbC5vblBvaW50ZXJEb3duKGV2ZW50KX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8U3ZnSWNvbiBzaXplPXsyNH0gaWNvbk5hbWU9e1wiaWNvbi1kcmFnLWFyZWEtaW5kaWNhdG9yXCJ9PjwvU3ZnSWNvbj5cbiAgICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy1pbWFnZS1pdGVtLXZhbHVlLWNvbnRyb2xzXCI+XG4gICAgICAgICAgICB7dGhpcy5tb2RlbC5hbGxvd1JlbW92ZSA/IGF0dGFjaEtleTJjbGljayg8c3BhblxuICAgICAgICAgICAgICBjbGFzc05hbWU9XCJzdmMtaW1hZ2UtaXRlbS12YWx1ZS1jb250cm9sc19fYnV0dG9uIHN2Yy1pbWFnZS1pdGVtLXZhbHVlLWNvbnRyb2xzX19jaG9vc2UtZmlsZVwiXG4gICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHRoaXMubW9kZWwuY2hvb3NlRmlsZSh0aGlzLm1vZGVsKX1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPFN2Z0ljb24gc2l6ZT17MjR9IGljb25OYW1lPXtcImljb24tZmlsZVwifT48L1N2Z0ljb24+XG4gICAgICAgICAgICA8L3NwYW4+KSA6IG51bGx9XG4gICAgICAgICAgICB7dGhpcy5tb2RlbC5hbGxvd1JlbW92ZSA/IGF0dGFjaEtleTJjbGljayg8c3BhblxuICAgICAgICAgICAgICBjbGFzc05hbWU9XCJzdmMtaW1hZ2UtaXRlbS12YWx1ZS1jb250cm9sc19fYnV0dG9uIHN2Yy1pbWFnZS1pdGVtLXZhbHVlLWNvbnRyb2xzX19yZW1vdmVcIlxuICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB0aGlzLm1vZGVsLnJlbW92ZSh0aGlzLm1vZGVsKX1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPFN2Z0ljb24gc2l6ZT17MjR9IGljb25OYW1lPXtcImljb24tZGVsZXRlXCJ9PjwvU3ZnSWNvbj5cbiAgICAgICAgICAgIDwvc3Bhbj4pIDogbnVsbH1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC8+XG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiAoXG4gICAgICA8ZGl2XG4gICAgICAgIHJlZj17dGhpcy5yb290UmVmfVxuICAgICAgICBjbGFzc05hbWU9e3RoaXMubW9kZWwuZ2V0Um9vdENzcygpfVxuICAgICAgICBrZXk9e3RoaXMucHJvcHMuZWxlbWVudC5rZXl9XG4gICAgICAgIGRhdGEtc3YtZHJvcC10YXJnZXQtaXRlbS12YWx1ZT17XG4gICAgICAgICAgdGhpcy5tb2RlbC5pc0RyYWdnYWJsZSA/IHRoaXMubW9kZWwuaXRlbS52YWx1ZSA6IHVuZGVmaW5lZFxuICAgICAgICB9XG4gICAgICAgIG9uUG9pbnRlckRvd249eyhldmVudDogYW55KSA9PiB0aGlzLm1vZGVsLm9uUG9pbnRlckRvd24oZXZlbnQpfVxuICAgICAgICBvbkRyYWdTdGFydD17dGhpcy5wcmV2ZW50RHJhZ0hhbmRsZXJ9XG4gICAgICA+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtcInN2Yy1pbWFnZS1pdGVtLXZhbHVlLXdyYXBwZXJfX2dob3N0XCJ9IHN0eWxlPXtpbWFnZVN0eWxlfT48L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e1wic3ZjLWltYWdlLWl0ZW0tdmFsdWUtd3JhcHBlcl9fY29udGVudFwifT5cbiAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgIHR5cGU9XCJmaWxlXCJcbiAgICAgICAgICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiXG4gICAgICAgICAgICB0YWJJbmRleD17LTF9XG4gICAgICAgICAgICBhY2NlcHQ9XCJpbWFnZS8qXCJcbiAgICAgICAgICAgIGNsYXNzTmFtZT1cInN2Yy1jaG9vc2UtZmlsZS1pbnB1dFwiXG4gICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICBwb3NpdGlvbjogXCJhYnNvbHV0ZVwiLFxuICAgICAgICAgICAgICBvcGFjaXR5OiAwLFxuICAgICAgICAgICAgICB3aWR0aDogXCIxcHhcIixcbiAgICAgICAgICAgICAgaGVpZ2h0OiBcIjFweFwiLFxuICAgICAgICAgICAgICBvdmVyZmxvdzogXCJoaWRkZW5cIlxuICAgICAgICAgICAgfX1cbiAgICAgICAgICAvPlxuICAgICAgICAgIHtjb250ZW50fVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXG4gIFwic3ZjLWltYWdlLWl0ZW0tdmFsdWVcIixcbiAgKHByb3BzOiBJbWFnZUl0ZW1WYWx1ZUFkb3JuZXJDb21wb25lbnRQcm9wcykgPT4ge1xuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KEltYWdlSXRlbVZhbHVlQWRvcm5lckNvbXBvbmVudCwgcHJvcHMpO1xuICB9XG4pO1xuIiwiaW1wb3J0IHsgZ2V0TG9jU3RyaW5nLCBJdGVtVmFsdWVXcmFwcGVyVmlld01vZGVsIH0gZnJvbSBcInN1cnZleS1jcmVhdG9yLWNvcmVcIjtcbmltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFJlYWN0RHJhZ0V2ZW50IH0gZnJvbSBcInNyYy9ldmVudHNcIjtcbmltcG9ydCB7IFF1ZXN0aW9uU2VsZWN0QmFzZSwgQmFzZSwgSXRlbVZhbHVlIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQge1xuICBhdHRhY2hLZXkyY2xpY2ssXG4gIFJlYWN0RWxlbWVudEZhY3RvcnksXG4gIFN2Z0ljb25cbn0gZnJvbSBcInN1cnZleS1yZWFjdC11aVwiO1xuaW1wb3J0IHsgQ3JlYXRvck1vZGVsRWxlbWVudCB9IGZyb20gXCIuL01vZGVsRWxlbWVudFwiO1xuXG5pbnRlcmZhY2UgSXRlbVZhbHVlQWRvcm5lckNvbXBvbmVudFByb3BzIHtcbiAgZWxlbWVudDogSlNYLkVsZW1lbnQ7XG4gIGNvbXBvbmVudERhdGE6IGFueTtcbiAgcXVlc3Rpb246IFF1ZXN0aW9uU2VsZWN0QmFzZTtcbiAgaXRlbTogSXRlbVZhbHVlO1xufVxuXG5leHBvcnQgY2xhc3MgSXRlbVZhbHVlQWRvcm5lckNvbXBvbmVudCBleHRlbmRzIENyZWF0b3JNb2RlbEVsZW1lbnQ8XG4gIEl0ZW1WYWx1ZUFkb3JuZXJDb21wb25lbnRQcm9wcyxcbiAgYW55XG4+IHtcbiAgbW9kZWw6IEl0ZW1WYWx1ZVdyYXBwZXJWaWV3TW9kZWw7XG4gIHByb3RlY3RlZCBjcmVhdGVNb2RlbCgpOiB2b2lkIHtcbiAgICB0aGlzLm1vZGVsID0gbmV3IEl0ZW1WYWx1ZVdyYXBwZXJWaWV3TW9kZWwoXG4gICAgICB0aGlzLnByb3BzLmNvbXBvbmVudERhdGEuY3JlYXRvcixcbiAgICAgIHRoaXMucHJvcHMucXVlc3Rpb24sXG4gICAgICB0aGlzLnByb3BzLml0ZW1cbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCBnZXRVcGRhdGVkTW9kZWxQcm9wcygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIFtcInF1ZXN0aW9uXCIsIFwiaXRlbVwiXTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCk6IEJhc2Uge1xuICAgIHJldHVybiB0aGlzLm1vZGVsO1xuICB9XG5cbiAgcmVuZGVyKCk6IEpTWC5FbGVtZW50IHtcbiAgICAvLyBpZiAodGhpcy5tb2RlbC5xdWVzdGlvbi5pc0RyYWdnZWQpIHtcbiAgICAvLyAgIHJldHVybiBudWxsO1xuICAgIC8vIH1cbiAgICB0aGlzLm1vZGVsLml0ZW0gPSB0aGlzLnByb3BzLml0ZW07XG4gICAgY29uc3QgYnV0dG9uID0gdGhpcy5tb2RlbC5hbGxvd0FkZCA/IChcbiAgICAgIGF0dGFjaEtleTJjbGljayg8c3BhblxuICAgICAgICBjbGFzc05hbWU9XCJzdmMtaXRlbS12YWx1ZS1jb250cm9sc19fYnV0dG9uIHN2Yy1pdGVtLXZhbHVlLWNvbnRyb2xzX19hZGRcIlxuICAgICAgICBhcmlhLWxhYmVsPXt0aGlzLm1vZGVsLnRvb2x0aXB9XG4gICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICB0aGlzLm1vZGVsLmFkZCh0aGlzLm1vZGVsKTtcbiAgICAgICAgICB0aGlzLm1vZGVsLmlzTmV3ID0gZmFsc2U7XG4gICAgICAgIH19XG4gICAgICA+XG4gICAgICAgIDxTdmdJY29uIHNpemU9ezE2fSBpY29uTmFtZT17XCJpY29uLWFkZF8xNngxNlwifSB0aXRsZT17dGhpcy5tb2RlbC50b29sdGlwfT48L1N2Z0ljb24+XG4gICAgICA8L3NwYW4+KVxuICAgICkgOiAoXG4gICAgICA8PlxuICAgICAgICB7XCIgXCJ9XG4gICAgICAgIHt0aGlzLm1vZGVsLmlzRHJhZ2dhYmxlID8gKFxuICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICBjbGFzc05hbWU9XCJzdmMtaXRlbS12YWx1ZS1jb250cm9sc19fYnV0dG9uIHN2Yy1pdGVtLXZhbHVlLWNvbnRyb2xzX19kcmFnXCJcbiAgICAgICAgICAgIGFyaWEtbGFiZWw9e3RoaXMubW9kZWwuZHJhZ1Rvb2x0aXB9XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPFN2Z0ljb24gY2xhc3NOYW1lPVwic3ZjLWl0ZW0tdmFsdWUtY29udHJvbHNfX2RyYWctaWNvblwiIHNpemU9ezI0fSBpY29uTmFtZT17XCJpY29uLWRyYWctYXJlYS1pbmRpY2F0b3JcIn0gdGl0bGU9e3RoaXMubW9kZWwuZHJhZ1Rvb2x0aXB9PjwvU3ZnSWNvbj5cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICkgOiBudWxsfVxuICAgICAgICB7dGhpcy5tb2RlbC5hbGxvd1JlbW92ZSA/IGF0dGFjaEtleTJjbGljayg8c3BhblxuICAgICAgICAgIGNsYXNzTmFtZT1cInN2Yy1pdGVtLXZhbHVlLWNvbnRyb2xzX19idXR0b24gc3ZjLWl0ZW0tdmFsdWUtY29udHJvbHNfX3JlbW92ZVwiXG4gICAgICAgICAgYXJpYS1sYWJlbD17dGhpcy5tb2RlbC50b29sdGlwfVxuICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHRoaXMubW9kZWwucmVtb3ZlKHRoaXMubW9kZWwpfVxuICAgICAgICA+XG4gICAgICAgICAgPFN2Z0ljb24gc2l6ZT17MTZ9IGljb25OYW1lPXtcImljb24tcmVtb3ZlXzE2eDE2XCJ9IHRpdGxlPXt0aGlzLm1vZGVsLnRvb2x0aXB9PjwvU3ZnSWNvbj5cbiAgICAgICAgPC9zcGFuPikgOiBudWxsfVxuICAgICAgPC8+XG4gICAgKTtcblxuICAgIHJldHVybiAoXG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzTmFtZT17XG4gICAgICAgICAgXCJzdmMtaXRlbS12YWx1ZS13cmFwcGVyXCIgK1xuICAgICAgICAgICh0aGlzLm1vZGVsLmFsbG93QWRkID8gXCIgc3ZjLWl0ZW0tdmFsdWUtLW5ld1wiIDogXCJcIikgK1xuICAgICAgICAgICh0aGlzLm1vZGVsLmlzRHJhZ2dpbmcgPyBcIiBzdmMtaXRlbS12YWx1ZS0tZHJhZ2dpbmdcIiA6IFwiXCIpICtcbiAgICAgICAgICAodGhpcy5tb2RlbC5pc0RyYWdEcm9wR2hvc3QgPyBcIiBzdmMtaXRlbS12YWx1ZS0tZ2hvc3RcIiA6IFwiXCIpICtcbiAgICAgICAgICAodGhpcy5tb2RlbC5pc0RyYWdEcm9wTW92ZURvd24gPyBcIiBzdmMtaXRlbS12YWx1ZS0tbW92ZWRvd25cIiA6IFwiXCIpICtcbiAgICAgICAgICAodGhpcy5tb2RlbC5pc0RyYWdEcm9wTW92ZVVwID8gXCIgc3ZjLWl0ZW0tdmFsdWUtLW1vdmV1cFwiIDogXCJcIilcbiAgICAgICAgfVxuICAgICAgICBrZXk9e3RoaXMucHJvcHMuZWxlbWVudC5rZXl9XG4gICAgICAgIGRhdGEtc3YtZHJvcC10YXJnZXQtaXRlbS12YWx1ZT17XG4gICAgICAgICAgdGhpcy5tb2RlbC5pc0RyYWdnYWJsZSA/IHRoaXMubW9kZWwuaXRlbS52YWx1ZSA6IHVuZGVmaW5lZFxuICAgICAgICB9XG4gICAgICAgIG9uUG9pbnRlckRvd249eyhldmVudDogYW55KSA9PiB0aGlzLm1vZGVsLm9uUG9pbnRlckRvd24oZXZlbnQpfVxuICAgICAgPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy1pdGVtLXZhbHVlX19naG9zdFwiPjwvZGl2PlxuXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLWl0ZW0tdmFsdWUtY29udHJvbHNcIj57YnV0dG9ufTwvZGl2PlxuXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtcInN2Yy1pdGVtLXZhbHVlX19pdGVtXCJ9IG9uQ2xpY2s9eyhldmVudCkgPT4gdGhpcy5tb2RlbC5zZWxlY3QodGhpcy5tb2RlbCwgZXZlbnQpfT57dGhpcy5wcm9wcy5lbGVtZW50fTwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxufVxuXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcbiAgXCJzdmMtaXRlbS12YWx1ZVwiLFxuICAocHJvcHM6IEl0ZW1WYWx1ZUFkb3JuZXJDb21wb25lbnRQcm9wcykgPT4ge1xuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KEl0ZW1WYWx1ZUFkb3JuZXJDb21wb25lbnQsIHByb3BzKTtcbiAgfVxuKTtcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IEJhc2UsIFN1cnZleU1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBSZWFjdEVsZW1lbnRGYWN0b3J5LCBMb2dvSW1hZ2UsIFN2Z0ljb24sIGF0dGFjaEtleTJjbGljayB9IGZyb20gXCJzdXJ2ZXktcmVhY3QtdWlcIjtcbmltcG9ydCB7IENyZWF0b3JCYXNlLCBMb2dvSW1hZ2VWaWV3TW9kZWwgfSBmcm9tIFwic3VydmV5LWNyZWF0b3ItY29yZVwiO1xuaW1wb3J0IHsgQ3JlYXRvck1vZGVsRWxlbWVudCB9IGZyb20gXCIuL01vZGVsRWxlbWVudFwiO1xuXG5pbnRlcmZhY2UgSUxvZ29JbWFnZUNvbXBvbmVudFByb3BzIHtcbiAgZGF0YTogQ3JlYXRvckJhc2U7XG59XG5cbmV4cG9ydCBjbGFzcyBMb2dvSW1hZ2VDb21wb25lbnQgZXh0ZW5kcyBDcmVhdG9yTW9kZWxFbGVtZW50PElMb2dvSW1hZ2VDb21wb25lbnRQcm9wcywgYW55PiB7XG4gIHByaXZhdGUgbW9kZWw6IExvZ29JbWFnZVZpZXdNb2RlbDtcbiAgcHJpdmF0ZSByb290UmVmOiBSZWFjdC5SZWZPYmplY3Q8SFRNTERpdkVsZW1lbnQ+O1xuICBjb25zdHJ1Y3Rvcihwcm9wczogSUxvZ29JbWFnZUNvbXBvbmVudFByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMucm9vdFJlZiA9IFJlYWN0LmNyZWF0ZVJlZigpO1xuICB9XG4gIHByb3RlY3RlZCBjcmVhdGVNb2RlbCgpOiB2b2lkIHtcbiAgICB0aGlzLm1vZGVsID0gbmV3IExvZ29JbWFnZVZpZXdNb2RlbCh0aGlzLnByb3BzLmRhdGEsIG51bGwpO1xuICB9XG4gIHByb3RlY3RlZCBnZXRVcGRhdGVkTW9kZWxQcm9wcygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIFtcImRhdGFcIl07XG4gIH1cbiAgcHJvdGVjdGVkIGdldFN0YXRlRWxlbWVudCgpOiBCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5tb2RlbDtcbiAgfVxuICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICBzdXBlci5jb21wb25lbnREaWRNb3VudCgpO1xuICAgIHRoaXMubW9kZWwucm9vdCA9IHRoaXMucm9vdFJlZi5jdXJyZW50O1xuICB9XG4gIHJlbmRlcigpOiBKU1guRWxlbWVudCB7XG4gICAgbGV0IGNvbnRlbnQ6IEpTWC5FbGVtZW50ID0gbnVsbDtcbiAgICBpZiAodGhpcy5tb2RlbC5zdXJ2ZXkubG9jTG9nby5yZW5kZXJlZEh0bWwpIHtcbiAgICAgIGNvbnRlbnQgPSBhdHRhY2hLZXkyY2xpY2soPGRpdiBjbGFzc05hbWU9eyB0aGlzLm1vZGVsLmNvbnRhaW5lckNzcyB9IG9uQ2xpY2s9eygpID0+IHRoaXMubW9kZWwuY2hvb3NlRmlsZSh0aGlzLm1vZGVsKX0+XG4gICAgICAgIDxMb2dvSW1hZ2UgZGF0YT17dGhpcy5wcm9wcy5kYXRhLnN1cnZleX0+PC9Mb2dvSW1hZ2U+XG4gICAgICA8L2Rpdj4pO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGNvbnRlbnQgPSB0aGlzLm1vZGVsLmFsbG93RWRpdCA/IGF0dGFjaEtleTJjbGljayg8ZGl2IGNsYXNzTmFtZT1cInN2Yy1sb2dvLWltYWdlLXBsYWNlaG9sZGVyXCIgb25DbGljaz17KCkgPT4gdGhpcy5tb2RlbC5jaG9vc2VGaWxlKHRoaXMubW9kZWwpfT48c3ZnPjx1c2UgeGxpbmtIcmVmPVwiI2ljb24tbG9nb1wiPjwvdXNlPjwvc3ZnPjwvZGl2PikgOiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiByZWY9e3RoaXMucm9vdFJlZn0gY2xhc3NOYW1lPVwic3ZjLWxvZ28taW1hZ2VcIj5cbiAgICAgICAgPGlucHV0IGFyaWEtaGlkZGVuPVwidHJ1ZVwiIHR5cGU9XCJmaWxlXCIgdGFiSW5kZXg9ey0xfSBhY2NlcHQ9XCJpbWFnZS8qXCIgY2xhc3NOYW1lPVwic3ZjLWNob29zZS1maWxlLWlucHV0XCIgLz5cbiAgICAgICAge2NvbnRlbnR9XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59XG5cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFwic3ZjLWxvZ28taW1hZ2VcIixcbiAgKHByb3BzOiBJTG9nb0ltYWdlQ29tcG9uZW50UHJvcHMpID0+IHtcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChMb2dvSW1hZ2VDb21wb25lbnQsIHByb3BzKTtcbiAgfVxuKTsiLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBRdWVzdGlvblNlbGVjdEJhc2UsIEJhc2UsIEl0ZW1WYWx1ZSwgU3VydmV5TW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IE1hdHJpeENlbGxXcmFwcGVyVmlld01vZGVsLCB0b2dnbGVIb3ZlcmVkIH0gZnJvbSBcInN1cnZleS1jcmVhdG9yLWNvcmVcIjtcbmltcG9ydCB7XG4gIGF0dGFjaEtleTJjbGljayxcbiAgUmVhY3RFbGVtZW50RmFjdG9yeSxcbiAgU3ZnSWNvblxufSBmcm9tIFwic3VydmV5LXJlYWN0LXVpXCI7XG5pbXBvcnQgeyBDcmVhdG9yTW9kZWxFbGVtZW50IH0gZnJvbSBcIi4vTW9kZWxFbGVtZW50XCI7XG5cbmludGVyZmFjZSBNYXRyaXhDZWxsQWRvcm5lckNvbXBvbmVudFByb3BzIHtcbiAgZWxlbWVudDogSlNYLkVsZW1lbnQ7XG4gIGNvbXBvbmVudERhdGE6IGFueTtcbiAgcXVlc3Rpb246IFF1ZXN0aW9uU2VsZWN0QmFzZTtcbiAgY2VsbDogYW55O1xufVxuXG5leHBvcnQgY2xhc3MgTWF0cml4Q2VsbEFkb3JuZXJDb21wb25lbnQgZXh0ZW5kcyBDcmVhdG9yTW9kZWxFbGVtZW50PFxuICBNYXRyaXhDZWxsQWRvcm5lckNvbXBvbmVudFByb3BzLFxuICBhbnlcbj4ge1xuICBtb2RlbDogTWF0cml4Q2VsbFdyYXBwZXJWaWV3TW9kZWw7XG4gIHByb3RlY3RlZCBjcmVhdGVNb2RlbCgpOiB2b2lkIHtcbiAgICBjb25zdCBkYXRhID0gdGhpcy5wcm9wcy5jb21wb25lbnREYXRhO1xuICAgIHRoaXMubW9kZWwgPSBuZXcgTWF0cml4Q2VsbFdyYXBwZXJWaWV3TW9kZWwoXG4gICAgICBkYXRhLmNyZWF0b3IsXG4gICAgICBkYXRhLmVsZW1lbnQsXG4gICAgICBkYXRhLnF1ZXN0aW9uLFxuICAgICAgZGF0YS5yb3csXG4gICAgICBkYXRhLmNvbHVtbixcbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCBnZXRVcGRhdGVkTW9kZWxQcm9wcygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIFtcImNvbXBvbmVudERhdGFcIl07XG4gIH1cbiAgY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wczogYW55LCBwcmV2U3RhdGU6IGFueSkge1xuICAgIHN1cGVyLmNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHMsIHByZXZTdGF0ZSk7XG4gICAgY29uc3QgZGF0YSA9IHRoaXMucHJvcHMuY29tcG9uZW50RGF0YTtcbiAgICB0aGlzLm1vZGVsLnRlbXBsYXRlRGF0YSA9IGRhdGEuZWxlbWVudDtcbiAgICB0aGlzLm1vZGVsLnJvdyA9IGRhdGEucm93O1xuICAgIHRoaXMubW9kZWwuY29sdW1uID0gZGF0YS5jb2x1bW47XG4gICAgdGhpcy5tb2RlbC5xdWVzdGlvbiA9IGRhdGEucXVlc3Rpb247XG4gIH1cbiAgcHJvdGVjdGVkIGdldFN0YXRlRWxlbWVudCgpOiBCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5tb2RlbDtcbiAgfVxuXG4gIHJlbmRlcigpOiBKU1guRWxlbWVudCB7XG4gICAgbGV0IGNvbnRyb2xzID0gbnVsbDtcbiAgICBpZiAoISF0aGlzLm1vZGVsLnF1ZXN0aW9uKSB7XG4gICAgICBjb250cm9scyA9IDxkaXYgY2xhc3NOYW1lPVwic3ZjLW1hdHJpeC1jZWxsX19xdWVzdGlvbi1jb250cm9sc1wiPlxuICAgICAgICB7YXR0YWNoS2V5MmNsaWNrKDxzcGFuIGNsYXNzTmFtZT1cInN2Yy1tYXRyaXgtY2VsbF9fcXVlc3Rpb24tY29udHJvbHMtYnV0dG9uXCIgb25DbGljaz17KCkgPT4gdGhpcy5tb2RlbC5lZGl0UXVlc3Rpb24odGhpcy5tb2RlbCl9PlxuICAgICAgICAgIDxTdmdJY29uIHNpemU9ezI0fSBpY29uTmFtZT17XCJpY29uLWVkaXRcIn0+PC9TdmdJY29uPlxuICAgICAgICA8L3NwYW4+KX1cbiAgICAgIDwvZGl2PjtcbiAgICB9XG5cbiAgICByZXR1cm4gKFxuICAgICAgPGRpdlxuICAgICAgICBjbGFzc05hbWU9e1wic3ZjLW1hdHJpeC1jZWxsXCJ9XG4gICAgICAgIGtleT17dGhpcy5wcm9wcy5lbGVtZW50LmtleX1cbiAgICAgICAgb25DbGljaz17KGU6IGFueSkgPT4gIXRoaXMucHJvcHMucXVlc3Rpb24gJiYgdGhpcy5tb2RlbC5zZWxlY3RDb250ZXh0KHRoaXMubW9kZWwsIGUpfVxuICAgICAgICBvbk1vdXNlT3V0PXtlID0+IHRoaXMubW9kZWwuaG92ZXIoZS5uYXRpdmVFdmVudCwgZS5jdXJyZW50VGFyZ2V0KX1cbiAgICAgICAgb25Nb3VzZU92ZXI9e2UgPT4gdGhpcy5tb2RlbC5ob3ZlcihlLm5hdGl2ZUV2ZW50LCBlLmN1cnJlbnRUYXJnZXQpfVxuICAgICAgPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17XCJzdmMtbWF0cml4LWNlbGwtLXNlbGVjdGVkXCIgKyAodGhpcy5tb2RlbC5pc1NlbGVjdGVkID8gXCIgc3ZjLXZpc2libGVcIiA6IFwiXCIpfT48L2Rpdj5cblxuICAgICAgICB7dGhpcy5wcm9wcy5lbGVtZW50fVxuXG4gICAgICAgIHtjb250cm9sc31cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXG4gIFwic3ZjLW1hdHJpeC1jZWxsXCIsXG4gIChwcm9wczogTWF0cml4Q2VsbEFkb3JuZXJDb21wb25lbnRQcm9wcykgPT4ge1xuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KE1hdHJpeENlbGxBZG9ybmVyQ29tcG9uZW50LCBwcm9wcyk7XG4gIH1cbik7XG4iLCJpbXBvcnQgeyBTdXJ2ZXlFbGVtZW50QmFzZSB9IGZyb20gXCJzdXJ2ZXktcmVhY3QtdWlcIjtcblxuZXhwb3J0IGNsYXNzIENyZWF0b3JNb2RlbEVsZW1lbnQ8UCwgUz4gZXh0ZW5kcyBTdXJ2ZXlFbGVtZW50QmFzZTxQLCBTPiB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBQKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMuY3JlYXRlTW9kZWwoKTtcbiAgfVxuICBjb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzOiBhbnksIHByZXZTdGF0ZTogYW55KTogdm9pZCB7XG4gICAgc3VwZXIuY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wcywgcHJldlN0YXRlKTtcbiAgICBpZih0aGlzLm5lZWRVcGRhdGVNb2RlbChwcmV2UHJvcHMpKSB7XG4gICAgICB0aGlzLmNyZWF0ZU1vZGVsKCk7XG4gICAgfVxuICB9XG4gIHByb3RlY3RlZCBjcmVhdGVNb2RlbCgpOiB2b2lkIHt9XG4gIHByb3RlY3RlZCBuZWVkVXBkYXRlTW9kZWwocHJldlByb3BzOiBhbnkpOiBib29sZWFuIHtcbiAgICBjb25zdCBuYW1lcyA9IHRoaXMuZ2V0VXBkYXRlZE1vZGVsUHJvcHMoKTtcbiAgICBpZighQXJyYXkuaXNBcnJheShuYW1lcykpIHJldHVybiB0cnVlO1xuICAgIGZvcih2YXIgaSA9IDA7IGkgPCBuYW1lcy5sZW5ndGg7IGkgKyspIHtcbiAgICAgIGNvbnN0IGtleSA9IG5hbWVzW2ldO1xuICAgICAgaWYodGhpcy5wcm9wc1trZXldICE9PSBwcmV2UHJvcHNba2V5XSkgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0VXBkYXRlZE1vZGVsUHJvcHMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbn0iLCJpbXBvcnQgeyBTdXJ2ZXlNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgUmVhY3RFbGVtZW50RmFjdG9yeSwgU3VydmV5RWxlbWVudEJhc2UgfSBmcm9tIFwic3VydmV5LXJlYWN0LXVpXCI7XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlOYXZpZ2F0aW9uIGV4dGVuZHMgU3VydmV5RWxlbWVudEJhc2U8YW55LCBhbnk+IHtcbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgc3VwZXIuY29tcG9uZW50RGlkTW91bnQoKTtcbiAgICB0aGlzLnNldEhhbmRsZXIoKTtcbiAgfVxuICBjb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzOiBhbnksIHByZXZTdGF0ZTogYW55KSB7XG4gICAgc3VwZXIuY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wcywgcHJldlN0YXRlKTtcbiAgICB0aGlzLnNldEhhbmRsZXIoKTtcbiAgfVxuICBwcml2YXRlIHNldEhhbmRsZXIoKSB7XG4gICAgaWYgKFxuICAgICAgIXRoaXMuc3VydmV5IHx8XG4gICAgICAgIHRoaXMuc3VydmV5Lm9uUHJvcGVydHlDaGFuZ2VkLmhhc0Z1bmModGhpcy5vblByb3BDaGFuZ2VkSGFuZGxlcilcbiAgICApXG4gICAgICByZXR1cm47XG4gICAgdGhpcy5zdXJ2ZXkub25Qcm9wZXJ0eUNoYW5nZWQuYWRkKHRoaXMub25Qcm9wQ2hhbmdlZEhhbmRsZXIpO1xuICB9XG4gICAgcHJpdmF0ZSBvblByb3BDaGFuZ2VkSGFuZGxlciA9IChzZW5kZXI6IGFueSwgb3B0aW9uczogYW55KTogYW55ID0+IHtcbiAgICAgIGlmICh0aGlzLmlzUmVuZGVyaW5nKSByZXR1cm47XG4gICAgICBjb25zdCByZWFjdGl2ZVByb3BzID0gW1xuICAgICAgICBcInNob3dQcm9ncmVzc0JhclwiLFxuICAgICAgICBcInByb2dyZXNzQmFyVHlwZVwiLFxuICAgICAgICBcImN1cnJlbnRQYWdlVmFsdWVcIlxuICAgICAgXTtcbiAgICAgIGlmIChyZWFjdGl2ZVByb3BzLmluZGV4T2Yob3B0aW9ucy5uYW1lKSA8IDApIHJldHVybjtcbiAgICAgIHZhciB2YWw6IGFueSA9IHt9O1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByZWFjdGl2ZVByb3BzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBwcm9wTmFtZSA9IHJlYWN0aXZlUHJvcHNbaV07XG4gICAgICAgIHZhbFtwcm9wTmFtZV0gPSB0aGlzLnN1cnZleVtwcm9wTmFtZV07XG4gICAgICB9XG4gICAgICB0aGlzLnNldFN0YXRlKHZhbCk7XG4gICAgfTtcbiAgICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICAgIHN1cGVyLmNvbXBvbmVudFdpbGxVbm1vdW50KCk7XG4gICAgICBpZiAodGhpcy5zdXJ2ZXkpIHtcbiAgICAgICAgdGhpcy5zdXJ2ZXkub25Qcm9wZXJ0eUNoYW5nZWQucmVtb3ZlKHRoaXMub25Qcm9wQ2hhbmdlZEhhbmRsZXIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHByb3RlY3RlZCBnZXQgc3VydmV5KCk6IFN1cnZleU1vZGVsIHtcbiAgICAgIHJldHVybiB0aGlzLnByb3BzLnN1cnZleTtcbiAgICB9XG4gICAgcHJvdGVjdGVkIGdldCBsb2NhdGlvbigpOiBzdHJpbmcge1xuICAgICAgcmV0dXJuIHRoaXMucHJvcHMubG9jYXRpb247XG4gICAgfVxuICAgIHByb3RlY3RlZCBnZXQgaXNUb3AoKTogYm9vbGVhbiB7XG4gICAgICByZXR1cm4gdGhpcy5sb2NhdGlvbiA9PSBcInRvcFwiO1xuICAgIH1cbiAgICBwcm90ZWN0ZWQgY2FuUmVuZGVyKCk6IGJvb2xlYW4ge1xuICAgICAgcmV0dXJuIHRoaXMuaXNUb3BcbiAgICAgICAgPyB0aGlzLnN1cnZleS5pc1Nob3dQcm9ncmVzc0Jhck9uVG9wXG4gICAgICAgIDogdGhpcy5zdXJ2ZXkuaXNTaG93UHJvZ3Jlc3NCYXJPbkJvdHRvbTtcbiAgICB9XG4gICAgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgICByZXR1cm4gUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5jcmVhdGVFbGVtZW50KFxuICAgICAgICBcInN2LXByb2dyZXNzLVwiICsgdGhpcy5zdXJ2ZXkucHJvZ3Jlc3NCYXJUeXBlLnRvTG93ZXJDYXNlKCksXG4gICAgICAgIHsgc3VydmV5OiB0aGlzLnN1cnZleSwgY3NzOiB0aGlzLnN1cnZleS5jc3MsIGlzVG9wOiB0aGlzLmlzVG9wIH1cbiAgICAgICk7XG4gICAgfVxufVxuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgQmFzZSwgU3VydmV5TW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFN1cnZleUVsZW1lbnRCYXNlLCB9IGZyb20gXCJzdXJ2ZXktcmVhY3QtdWlcIjtcbmltcG9ydCB7IENyZWF0b3JCYXNlLCBOb3RpZmllciB9IGZyb20gXCJzdXJ2ZXktY3JlYXRvci1jb3JlXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTm90aWZpZXJDb21wb25lbnRQcm9wcyB7XG4gIGNyZWF0b3I6IENyZWF0b3JCYXNlO1xuICBub3RpZmllcjogTm90aWZpZXI7XG59XG5cbmV4cG9ydCBjbGFzcyBOb3RpZmllckNvbXBvbmVudCBleHRlbmRzIFN1cnZleUVsZW1lbnRCYXNlPE5vdGlmaWVyQ29tcG9uZW50UHJvcHMsIGFueT4ge1xuICBnZXQgbm90aWZpZXIoKSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMubm90aWZpZXI7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFN0YXRlRWxlbWVudCgpOiBCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5ub3RpZmllcjtcbiAgfVxuICByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICBpZiAoIXRoaXMubm90aWZpZXIuYWN0aXZlKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPXt0aGlzLm5vdGlmaWVyLmNzc30+XG4gICAgICAgIDxzcGFuPnt0aGlzLm5vdGlmaWVyLm1lc3NhZ2V9PC9zcGFuPlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxufVxuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgT2JqZWN0U2VsZWN0b3JNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY3JlYXRvci1jb3JlXCI7XG5pbXBvcnQgeyBCYXNlIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBSZWFjdEVsZW1lbnRGYWN0b3J5LCBTdXJ2ZXlFbGVtZW50QmFzZSwgTGlzdCB9IGZyb20gXCJzdXJ2ZXktcmVhY3QtdWlcIjtcblxuaW50ZXJmYWNlIElPYmplY3RTZWxlY3RvckNvbXBvbmVudFByb3BzIHtcbiAgbW9kZWw6IE9iamVjdFNlbGVjdG9yTW9kZWw7XG59XG5jbGFzcyBPYmplY3RTZWxlY3RvckNvbXBvbmVudCBleHRlbmRzIFN1cnZleUVsZW1lbnRCYXNlPElPYmplY3RTZWxlY3RvckNvbXBvbmVudFByb3BzLCBhbnk+IHtcbiAgcHJvdGVjdGVkIGdldCBtb2RlbCgpOiBPYmplY3RTZWxlY3Rvck1vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5tb2RlbDtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCk6IEJhc2Uge1xuICAgIHJldHVybiB0aGlzLm1vZGVsO1xuICB9XG4gIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIGlmICghdGhpcy5tb2RlbC5pc1Zpc2libGUpIHJldHVybiBudWxsO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLW9iamVjdC1zZWxlY3RvclwiPlxuICAgICAgICA8TGlzdCBtb2RlbD17dGhpcy5tb2RlbC5saXN0fT48L0xpc3Q+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59XG5cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFwic3ZjLW9iamVjdC1zZWxlY3RvclwiLCAocHJvcHMpID0+IHtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXG4gICAgT2JqZWN0U2VsZWN0b3JDb21wb25lbnQsXG4gICAgcHJvcHMgYXMgSU9iamVjdFNlbGVjdG9yQ29tcG9uZW50UHJvcHNcbiAgKTtcbn0pO1xuIiwiaW1wb3J0IHtcbiAgQmFzZSxcbiAgSUFjdGlvbixcbiAgdW53cmFwXG59IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHtcbiAgU3ZnSWNvbixcbiAgUG9wdXAsXG4gIGF0dGFjaEtleTJjbGlja1xufSBmcm9tIFwic3VydmV5LXJlYWN0LXVpXCI7XG5pbXBvcnQgeyBQYWdlTmF2aWdhdG9yVmlld01vZGVsLCBQYWdlc0NvbnRyb2xsZXIgfSBmcm9tIFwic3VydmV5LWNyZWF0b3ItY29yZVwiO1xuaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgQ3JlYXRvck1vZGVsRWxlbWVudCB9IGZyb20gXCIuL01vZGVsRWxlbWVudFwiO1xuXG5pbnRlcmZhY2UgSVN1cnZleVBhZ2VOYXZpZ2F0b3JQcm9wcyB7XG4gIHBhZ2VzQ29udHJvbGxlcjogUGFnZXNDb250cm9sbGVyO1xuICBwYWdlRWRpdE1vZGU6IHN0cmluZztcbn1cblxuZXhwb3J0IGNsYXNzIFN1cnZleVBhZ2VOYXZpZ2F0b3IgZXh0ZW5kcyBDcmVhdG9yTW9kZWxFbGVtZW50PFxuICBJU3VydmV5UGFnZU5hdmlnYXRvclByb3BzLFxuICBhbnlcbj4ge1xuICBwcml2YXRlIG1vZGVsOiBQYWdlTmF2aWdhdG9yVmlld01vZGVsO1xuICBwcml2YXRlIGNvbnRhaW5lclJlZjogUmVhY3QuUmVmT2JqZWN0PEhUTUxEaXZFbGVtZW50PjtcblxuICBjb25zdHJ1Y3Rvcihwcm9wczogSVN1cnZleVBhZ2VOYXZpZ2F0b3JQcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLmNvbnRhaW5lclJlZiA9IFJlYWN0LmNyZWF0ZVJlZigpO1xuICB9XG4gIHByb3RlY3RlZCBjcmVhdGVNb2RlbCgpOiB2b2lkIHtcbiAgICB0aGlzLm1vZGVsID0gbmV3IFBhZ2VOYXZpZ2F0b3JWaWV3TW9kZWwoXG4gICAgICB0aGlzLnByb3BzLnBhZ2VzQ29udHJvbGxlcixcbiAgICAgIHRoaXMucHJvcHMucGFnZUVkaXRNb2RlXG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0VXBkYXRlZE1vZGVsUHJvcHMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBbXCJwYWdlc0NvbnRyb2xsZXJcIiwgXCJwYWdlRWRpdE1vZGVcIl07XG4gIH1cbiAgcHJvdGVjdGVkIGdldFN0YXRlRWxlbWVudCgpOiBCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5tb2RlbDtcbiAgfVxuICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICBzdXBlci5jb21wb25lbnREaWRNb3VudCgpO1xuICAgIGlmICh0aGlzLnByb3BzLnBhZ2VFZGl0TW9kZSAhPT0gXCJieXBhZ2VcIikge1xuICAgICAgY29uc3QgZWwgPSB0aGlzLmNvbnRhaW5lclJlZi5jdXJyZW50IGFzIEhUTUxEaXZFbGVtZW50O1xuICAgICAgaWYgKCEhZWwpIHtcbiAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgICAgIGVsLnBhcmVudEVsZW1lbnQucGFyZW50RWxlbWVudC5wYXJlbnRFbGVtZW50Lm9uc2Nyb2xsID0gZnVuY3Rpb24gKHRoaXM6IEdsb2JhbEV2ZW50SGFuZGxlcnMsIGV2OiBFdmVudCkge1xuICAgICAgICAgIHJldHVybiBzZWxmLm1vZGVsLm9uQ29udGFpbmVyU2Nyb2xsKGV2LmN1cnJlbnRUYXJnZXQgYXMgSFRNTERpdkVsZW1lbnQpO1xuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICBzdXBlci5jb21wb25lbnRXaWxsVW5tb3VudCgpO1xuICAgIGNvbnN0IGVsID0gdGhpcy5jb250YWluZXJSZWYuY3VycmVudDtcbiAgICBpZiAoISFlbCkge1xuICAgICAgZWwucGFyZW50RWxlbWVudC5wYXJlbnRFbGVtZW50LnBhcmVudEVsZW1lbnQub25zY3JvbGwgPSB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHRoaXMubW9kZWwuZGlzcG9zZSgpO1xuICB9XG4gIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIGxldCBjbGFzc05hbWUgPSBcInN2Yy1wYWdlLW5hdmlnYXRvcl9fc2VsZWN0b3JcIjtcbiAgICBpZiAodGhpcy5tb2RlbC5pc1BvcHVwT3BlbmVkKVxuICAgICAgY2xhc3NOYW1lICs9IFwiIHN2Yy1wYWdlLW5hdmlnYXRvcl9fc2VsZWN0b3ItLW9wZW5lZFwiO1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy1wYWdlLW5hdmlnYXRvclwiIHJlZj17dGhpcy5jb250YWluZXJSZWZ9IHN0eWxlPXt7IGRpc3BsYXk6IHRoaXMubW9kZWwudmlzaWJsZSA/IFwiZmxleFwiIDogXCJub25lXCIgfX0+XG4gICAgICAgIHthdHRhY2hLZXkyY2xpY2soPGRpdlxuICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3NOYW1lfVxuICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHRoaXMubW9kZWwudG9nZ2xlUGFnZVNlbGVjdG9yKCl9XG4gICAgICAgICAgdGl0bGU9e3RoaXMubW9kZWwucGFnZVNlbGVjdG9yQ2FwdGlvbn1cbiAgICAgICAgPlxuICAgICAgICAgIDxTdmdJY29uXG4gICAgICAgICAgICBjbGFzc05hbWU9XCJzdmMtcGFnZS1uYXZpZ2F0b3JfX25hdmlnYXRvci1pY29uXCJcbiAgICAgICAgICAgIGljb25OYW1lPXt0aGlzLm1vZGVsLmljb259XG4gICAgICAgICAgICBzaXplPXsyNH1cbiAgICAgICAgICAgIHRpdGxlPXt0aGlzLm1vZGVsLnBhZ2VTZWxlY3RvckNhcHRpb259XG4gICAgICAgICAgPjwvU3ZnSWNvbj5cblxuICAgICAgICAgIDxQb3B1cFxuICAgICAgICAgICAgbW9kZWw9e3RoaXMubW9kZWwucG9wdXBNb2RlbH1cbiAgICAgICAgICAvL2NsYXNzTmFtZT1cInN2Yy1wYWdlLW5hdmlnYXRvcl9fcG9wdXBcIlxuICAgICAgICAgID48L1BvcHVwPlxuICAgICAgICA8L2Rpdj4pfVxuICAgICAgICB7dGhpcy5tb2RlbC5pdGVtcy5tYXAoKGl0ZW0pID0+IChcbiAgICAgICAgICA8U3VydmV5UGFnZU5hdmlnYXRvckl0ZW1cbiAgICAgICAgICAgIGtleT17aXRlbS5pZH1cbiAgICAgICAgICAgIGl0ZW09e2l0ZW19XG4gICAgICAgICAgPjwvU3VydmV5UGFnZU5hdmlnYXRvckl0ZW0+XG4gICAgICAgICkpfVxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxufVxuZXhwb3J0IGNsYXNzIFN1cnZleVBhZ2VOYXZpZ2F0b3JJdGVtIGV4dGVuZHMgQ3JlYXRvck1vZGVsRWxlbWVudDxhbnksIGFueT4ge1xuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCk6IEJhc2Uge1xuICAgIHJldHVybiB0aGlzLnByb3BzLml0ZW0gYXMgQmFzZTtcbiAgfVxuICByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICBjb25zdCBpdGVtID0gdGhpcy5wcm9wcy5pdGVtO1xuICAgIGxldCBjbGFzc05hbWU6IHN0cmluZyA9IFwic3ZjLXBhZ2UtbmF2aWdhdG9yLWl0ZW0tY29udGVudFwiO1xuICAgIGlmICh1bndyYXAoaXRlbS5hY3RpdmUpKSB7XG4gICAgICBjbGFzc05hbWUgKz0gXCIgc3ZjLXBhZ2UtbmF2aWdhdG9yLWl0ZW0tLXNlbGVjdGVkXCI7XG4gICAgfVxuICAgIGlmICh1bndyYXAoaXRlbS5kaXNhYmxlZCkpIHtcbiAgICAgIGNsYXNzTmFtZSArPSBcIiBzdmMtcGFnZS1uYXZpZ2F0b3ItaXRlbS0tZGlzYWJsZWRcIjtcbiAgICB9XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLXBhZ2UtbmF2aWdhdG9yLWl0ZW1cIj5cbiAgICAgICAge2F0dGFjaEtleTJjbGljayg8ZGl2XG4gICAgICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWV9XG4gICAgICAgICAgb25DbGljaz17KGUpID0+IHtcbiAgICAgICAgICAgIGl0ZW0uYWN0aW9uKGl0ZW0pO1xuICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICB9fVxuICAgICAgICA+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtcGFnZS1uYXZpZ2F0b3ItaXRlbV9fZG90XCIgdGl0bGU9e2l0ZW0udGl0bGV9PjwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLXBhZ2UtbmF2aWdhdG9yLWl0ZW1fX2Jhbm5lciBzdmMtaXRlbV9fYmFubmVyXCI+XG4gICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJzdmMtdGV4dCBzdmMtdGV4dC0tc21hbGwgc3ZjLXRleHQtLWJvbGRcIj57aXRlbS50aXRsZX08L3NwYW4+XG4gICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJzdmMtcGFnZS1uYXZpZ2F0b3ItaXRlbV9fZG90XCI+PC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj4pfVxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxufVxuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgUHJvcGVydHlHcmlkVmlld01vZGVsIH0gZnJvbSBcInN1cnZleS1jcmVhdG9yLWNvcmVcIjtcbmltcG9ydCB7IEJhc2UsIFN1cnZleU1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBTdXJ2ZXksIFN1cnZleUVsZW1lbnRCYXNlLCBSZWFjdFF1ZXN0aW9uRmFjdG9yeSwgU3VydmV5UXVlc3Rpb25CdXR0b25Hcm91cCwgUmVhY3RFbGVtZW50RmFjdG9yeSB9IGZyb20gXCJzdXJ2ZXktcmVhY3QtdWlcIjtcblxuaW50ZXJmYWNlIElQcm9wZXJ0eUdyaWRDb21wb25lbnRQcm9wcyB7XG4gIG1vZGVsOiBQcm9wZXJ0eUdyaWRWaWV3TW9kZWw7XG59XG5cbmV4cG9ydCBjbGFzcyBQcm9wZXJ0eUdyaWRDb21wb25lbnQgZXh0ZW5kcyBTdXJ2ZXlFbGVtZW50QmFzZTxJUHJvcGVydHlHcmlkQ29tcG9uZW50UHJvcHMsIGFueT4ge1xuXG4gIGdldCBtb2RlbCgpOiBQcm9wZXJ0eUdyaWRWaWV3TW9kZWwge1xuICAgIHJldHVybiB0aGlzLnByb3BzLm1vZGVsO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldFN0YXRlRWxlbWVudCgpOiBCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5tb2RlbDtcbiAgfVxuXG4gIHB1YmxpYyBjYW5SZW5kZXIoKTogYm9vbGVhbiB7XG4gICAgaWYgKCF0aGlzLm1vZGVsKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIHN1cGVyLmNhblJlbmRlcigpO1xuICB9XG5cbiAgcmVuZGVyRWxlbWVudCgpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPFN1cnZleSBtb2RlbD17dGhpcy5tb2RlbC5zdXJ2ZXl9PjwvU3VydmV5PlxuICAgICk7XG4gIH1cbn1cblxuUmVhY3RRdWVzdGlvbkZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJRdWVzdGlvbihcImJ1dHRvbmdyb3VwXCIsIChwcm9wcykgPT4ge1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdXJ2ZXlRdWVzdGlvbkJ1dHRvbkdyb3VwLCBwcm9wcyk7XG59KTtcblxuZXhwb3J0IGRlZmF1bHQgUHJvcGVydHlHcmlkQ29tcG9uZW50O1xuXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcInN2Yy1wcm9wZXJ0eS1ncmlkXCIsIChwcm9wcykgPT4ge1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChQcm9wZXJ0eUdyaWRDb21wb25lbnQsIHByb3BzKTtcbn0pO1xuIiwiaW1wb3J0IHsgQmFzZSwgUXVlc3Rpb24sIFN1cnZleUVycm9yLCBTdXJ2ZXlNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgSVN1cnZleUNyZWF0b3IsIFJlYWN0RWxlbWVudEZhY3RvcnksIFJlYWN0UXVlc3Rpb25GYWN0b3J5LCBTdXJ2ZXlRdWVzdGlvbiB9IGZyb20gXCJzdXJ2ZXktcmVhY3QtdWlcIjtcbmltcG9ydCB7IENyZWF0b3JCYXNlIH0gZnJvbSBcInN1cnZleS1jcmVhdG9yLWNvcmVcIjtcbmltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcblxuaW50ZXJmYWNlIElRdWVzdGlvbkVkaXRvckNvbnRlbnRDb21wb25lbnRQcm9wcyB7XG4gIGNyZWF0b3I6IENyZWF0b3JCYXNlO1xuICBzdXJ2ZXk6IFN1cnZleU1vZGVsO1xufVxuXG5leHBvcnQgY2xhc3MgUXVlc3Rpb25FZGl0b3JDb250ZW50Q29tcG9uZW50IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50PFxuICBJUXVlc3Rpb25FZGl0b3JDb250ZW50Q29tcG9uZW50UHJvcHMsXG4gIGFueVxuPiBpbXBsZW1lbnRzIElTdXJ2ZXlDcmVhdG9yIHtcbiAgZ2V0IHN1cnZleSgpIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5zdXJ2ZXk7XG4gIH1cbiAgcHVibGljIGNyZWF0ZVF1ZXN0aW9uRWxlbWVudChxdWVzdGlvbjogUXVlc3Rpb24pOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuIFJlYWN0UXVlc3Rpb25GYWN0b3J5Lkluc3RhbmNlLmNyZWF0ZVF1ZXN0aW9uKFxuICAgICAgIXF1ZXN0aW9uLmlzRGVmYXVsdFJlbmRlcmluZyB8fCBxdWVzdGlvbi5pc0RlZmF1bHRSZW5kZXJpbmcoKVxuICAgICAgICA/IHF1ZXN0aW9uLmdldFRlbXBsYXRlKClcbiAgICAgICAgOiBxdWVzdGlvbi5nZXRDb21wb25lbnROYW1lKCksXG4gICAgICB7XG4gICAgICAgIHF1ZXN0aW9uOiBxdWVzdGlvbixcbiAgICAgICAgaXNEaXNwbGF5TW9kZTogcXVlc3Rpb24uaXNJbnB1dFJlYWRPbmx5LFxuICAgICAgICBjcmVhdG9yOiB0aGlzLFxuICAgICAgfVxuICAgICk7XG4gIH1cbiAgcHVibGljIHF1ZXN0aW9uVGl0bGVMb2NhdGlvbigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnN1cnZleS5xdWVzdGlvblRpdGxlTG9jYXRpb247XG4gIH1cbiAgcHVibGljIHF1ZXN0aW9uRXJyb3JMb2NhdGlvbigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnN1cnZleS5xdWVzdGlvbkVycm9yTG9jYXRpb247XG4gIH1cbiAgcmVuZGVyRXJyb3Ioa2V5OiBzdHJpbmcsIGVycm9yOiBTdXJ2ZXlFcnJvciwgY3NzQ2xhc3NlczogYW55KTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcmVuZGVyKCk6IEpTWC5FbGVtZW50IHtcbiAgICBjb25zdCBxdWVzdGlvbiA9IHRoaXMuc3VydmV5LmdldEFsbFF1ZXN0aW9ucygpWzBdO1xuICAgIHJldHVybiAoXG4gICAgICA8PlxuICAgICAgICA8U3VydmV5UXVlc3Rpb24gY3JlYXRvcj17dGhpc30gZWxlbWVudD17cXVlc3Rpb259PjwvU3VydmV5UXVlc3Rpb24+XG4gICAgICA8Lz5cbiAgICApO1xuICB9XG59XG5cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFxuICBcInN2Yy1xdWVzdGlvbi1lZGl0b3ItY29udGVudFwiLFxuICAocHJvcHM6IElRdWVzdGlvbkVkaXRvckNvbnRlbnRDb21wb25lbnRQcm9wcykgPT4ge1xuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFF1ZXN0aW9uRWRpdG9yQ29udGVudENvbXBvbmVudCwgcHJvcHMpO1xuICB9XG4pO1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgUmVhY3RRdWVzdGlvbkZhY3RvcnksIFN1cnZleVBhZ2UsIElTdXJ2ZXlDcmVhdG9yLCBTdXJ2ZXlRdWVzdGlvbkVsZW1lbnRCYXNlIH0gZnJvbSBcInN1cnZleS1yZWFjdC11aVwiO1xuaW1wb3J0IHsgUXVlc3Rpb25FbWJlZGRlZFN1cnZleU1vZGVsIH0gZnJvbSBcInN1cnZleS1jcmVhdG9yLWNvcmVcIjtcblxuZXhwb3J0IGNsYXNzIFN1cnZleUVsZW1lbnRFbWJlZGRlZFN1cnZleSBleHRlbmRzIFN1cnZleVF1ZXN0aW9uRWxlbWVudEJhc2Uge1xuICBwcm90ZWN0ZWQgZ2V0IGVtYmVkZGVkU3VydmV5KCk6IFF1ZXN0aW9uRW1iZWRkZWRTdXJ2ZXlNb2RlbCB7XG4gICAgcmV0dXJuICh0aGlzLnByb3BzLmVsZW1lbnQgfHwgdGhpcy5wcm9wcy5xdWVzdGlvbikgYXMgUXVlc3Rpb25FbWJlZGRlZFN1cnZleU1vZGVsO1xuICB9XG4gIHByb3RlY3RlZCBnZXQgY3JlYXRvcigpOiBJU3VydmV5Q3JlYXRvciB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuY3JlYXRvcjtcbiAgfVxuICBwdWJsaWMgcmVuZGVyKCk6IEpTWC5FbGVtZW50IHtcbiAgICBpZiAoIXRoaXMuZW1iZWRkZWRTdXJ2ZXkpIHJldHVybiBudWxsO1xuICAgIGNvbnN0IHN1cnZleSA9IHRoaXMuZW1iZWRkZWRTdXJ2ZXkuZW1iZWRkZWRTdXJ2ZXk7XG4gICAgaWYgKCFzdXJ2ZXkgfHwgIXN1cnZleS5jdXJyZW50UGFnZSkgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIDxTdXJ2ZXlQYWdlXG4gICAgICBzdXJ2ZXk9e3N1cnZleX1cbiAgICAgIHBhZ2U9e3N1cnZleS5jdXJyZW50UGFnZX1cbiAgICAgIGNzcz17c3VydmV5LmNzc31cbiAgICAgIGNyZWF0b3I9e3RoaXMuY3JlYXRvcn1cbiAgICAvPjtcblxuICB9XG59XG5cblJlYWN0UXVlc3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyUXVlc3Rpb24oXCJlbWJlZGRlZHN1cnZleVwiLCAocHJvcHMpID0+IHtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3VydmV5RWxlbWVudEVtYmVkZGVkU3VydmV5LCBwcm9wcyk7XG59KTtcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7XG4gIFJlYWN0UXVlc3Rpb25GYWN0b3J5LFxuICBTdXJ2ZXlRdWVzdGlvbkVsZW1lbnRCYXNlXG59IGZyb20gXCJzdXJ2ZXktcmVhY3QtdWlcIjtcbmltcG9ydCB7IGVkaXRvckxvY2FsaXphdGlvbiwgUXVlc3Rpb25MaW5rVmFsdWVNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY3JlYXRvci1jb3JlXCI7XG5pbXBvcnQgeyBBY3Rpb25CdXR0b24gfSBmcm9tIFwiLi9BY3Rpb25CdXR0b25cIjtcblxuZXhwb3J0IGNsYXNzIFN1cnZleVF1ZXN0aW9uTGlua1ZhbHVlIGV4dGVuZHMgU3VydmV5UXVlc3Rpb25FbGVtZW50QmFzZSB7XG4gIHByb3RlY3RlZCBnZXQgcXVlc3Rpb24oKTogUXVlc3Rpb25MaW5rVmFsdWVNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMucXVlc3Rpb25CYXNlIGFzIFF1ZXN0aW9uTGlua1ZhbHVlTW9kZWw7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckNsZWFyKCk6IEpTWC5FbGVtZW50IHtcbiAgICBjb25zdCBzaG93Q2xlYXIgPSAodGhpcy5xdWVzdGlvbkJhc2UgYXMgYW55KS5zaG93Q2xlYXI7XG4gICAgaWYgKCF0aGlzLnF1ZXN0aW9uQmFzZS5pc1JlYWRPbmx5ICYmIHNob3dDbGVhcikge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPEFjdGlvbkJ1dHRvblxuICAgICAgICAgIGNsYXNzZXM9e3RoaXMucXVlc3Rpb24ubGlua0NsZWFyQnV0dG9uQ3NzQ2xhc3Nlc31cbiAgICAgICAgICBjbGljaz17KCkgPT4gdGhpcy5xdWVzdGlvbi5kb0NsZWFyQ2xpY2soKX1cbiAgICAgICAgICBzZWxlY3RlZD17dGhpcy5xdWVzdGlvbi5pc1NlbGVjdGVkfVxuICAgICAgICAgIHRleHQ9e2VkaXRvckxvY2FsaXphdGlvbi5nZXRTdHJpbmcoXCJwZS5jbGVhclwiKX1cbiAgICAgICAgPjwvQWN0aW9uQnV0dG9uPlxuICAgICAgKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiAoXG4gICAgICA8PlxuICAgICAgICA8QWN0aW9uQnV0dG9uXG4gICAgICAgICAgY2xhc3Nlcz17dGhpcy5xdWVzdGlvbi5saW5rU2V0QnV0dG9uQ3NzQ2xhc3Nlc31cbiAgICAgICAgICBjbGljaz17KCkgPT4gdGhpcy5xdWVzdGlvbi5kb0xpbmtDbGljaygpfVxuICAgICAgICAgIHNlbGVjdGVkPXt0aGlzLnF1ZXN0aW9uLmlzU2VsZWN0ZWR9XG4gICAgICAgICAgZGlzYWJsZWQ9e3RoaXMucXVlc3Rpb24uaXNSZWFkT25seX1cbiAgICAgICAgICB0ZXh0PXt0aGlzLnF1ZXN0aW9uLmxpbmtWYWx1ZVRleHR9XG4gICAgICAgICAgdGl0bGU9e3RoaXMucXVlc3Rpb24udG9vbHRpcH1cbiAgICAgICAgPjwvQWN0aW9uQnV0dG9uPlxuICAgICAgICB7dGhpcy5yZW5kZXJDbGVhcigpfVxuICAgICAgPC8+XG4gICAgKTtcbiAgfVxufVxuXG5SZWFjdFF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlclF1ZXN0aW9uKFwibGlua3ZhbHVlXCIsIChwcm9wcykgPT4ge1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdXJ2ZXlRdWVzdGlvbkxpbmtWYWx1ZSwgcHJvcHMpO1xufSk7XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBCYXNlLCBTdXJ2ZXlNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgU3VydmV5UmVzdWx0c0l0ZW1Nb2RlbCwgU3VydmV5UmVzdWx0c01vZGVsIH0gZnJvbSBcInN1cnZleS1jcmVhdG9yLWNvcmVcIjtcbmltcG9ydCB7IGF0dGFjaEtleTJjbGljaywgU3ZnSWNvbiB9IGZyb20gXCJzdXJ2ZXktcmVhY3QtdWlcIjtcbmltcG9ydCB7IEFjdGlvbkJ1dHRvbiB9IGZyb20gXCIuL0FjdGlvbkJ1dHRvblwiO1xuaW1wb3J0IHsgQ3JlYXRvck1vZGVsRWxlbWVudCB9IGZyb20gXCIuL01vZGVsRWxlbWVudFwiO1xuXG5pbnRlcmZhY2UgSVN1cnZleVJlc3VsdHNQcm9wcyB7XG4gIHN1cnZleTogU3VydmV5TW9kZWw7XG59XG5leHBvcnQgY2xhc3MgU3VydmV5UmVzdWx0cyBleHRlbmRzIENyZWF0b3JNb2RlbEVsZW1lbnQ8XG4gIElTdXJ2ZXlSZXN1bHRzUHJvcHMsXG4gIGFueVxuPiB7XG4gIG1vZGVsOiBTdXJ2ZXlSZXN1bHRzTW9kZWw7XG4gIHByb3RlY3RlZCBjcmVhdGVNb2RlbCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5wcm9wcy5zdXJ2ZXkpIHtcbiAgICAgIHRoaXMubW9kZWwgPSBuZXcgU3VydmV5UmVzdWx0c01vZGVsKHRoaXMucHJvcHMuc3VydmV5KTtcbiAgICB9XG4gIH1cbiAgcHJvdGVjdGVkIGdldFVwZGF0ZWRNb2RlbFByb3BzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gW1wic3VydmV5XCJdO1xuICB9XG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnQoKTogQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMubW9kZWw7XG4gIH1cbiAgcmVuZGVyKCk6IEpTWC5FbGVtZW50IHtcbiAgICBpZiAoIXRoaXMubW9kZWwpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmQtdGVzdC1yZXN1bHRzXCI+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZkLXRlc3QtcmVzdWx0c19faGVhZGVyXCI+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmQtdGVzdC1yZXN1bHRzX19oZWFkZXItdGV4dFwiPnt0aGlzLm1vZGVsLnN1cnZleVJlc3VsdHNUZXh0fTwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZkLXRlc3QtcmVzdWx0c19faGVhZGVyLXR5cGVzXCI+XG4gICAgICAgICAgICA8QWN0aW9uQnV0dG9uXG4gICAgICAgICAgICAgIGNsaWNrPXsoKSA9PiB0aGlzLm1vZGVsLnNlbGVjdFRhYmxlQ2xpY2soKX1cbiAgICAgICAgICAgICAgdGV4dD17dGhpcy5tb2RlbC5nZXRMb2NTdHJpbmcoXCJlZC5zdXJ2ZXlSZXN1bHRzVGFibGVcIil9XG4gICAgICAgICAgICAgIHNlbGVjdGVkPXt0aGlzLm1vZGVsLmlzVGFibGVTZWxlY3RlZH1cbiAgICAgICAgICAgICAgZGlzYWJsZWQ9e2ZhbHNlfVxuICAgICAgICAgICAgPjwvQWN0aW9uQnV0dG9uPlxuICAgICAgICAgICAgPEFjdGlvbkJ1dHRvblxuICAgICAgICAgICAgICBjbGljaz17KCkgPT4gdGhpcy5tb2RlbC5zZWxlY3RKc29uQ2xpY2soKX1cbiAgICAgICAgICAgICAgdGV4dD17dGhpcy5tb2RlbC5nZXRMb2NTdHJpbmcoXCJlZC5zdXJ2ZXlSZXN1bHRzSnNvblwiKX1cbiAgICAgICAgICAgICAgc2VsZWN0ZWQ9e3RoaXMubW9kZWwuaXNKc29uU2VsZWN0ZWR9XG4gICAgICAgICAgICAgIGRpc2FibGVkPXtmYWxzZX1cbiAgICAgICAgICAgID48L0FjdGlvbkJ1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIHt0aGlzLnJlbmRlclJlc3VsdEFzVGV4dCgpfVxuICAgICAgICB7dGhpcy5yZW5kZXJSZXN1bHRBc1RhYmxlKCl9XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG4gIHJlbmRlclJlc3VsdEFzVGV4dCgpOiBKU1guRWxlbWVudCB7XG4gICAgaWYgKHRoaXMubW9kZWwucmVzdWx0Vmlld1R5cGUgIT09IFwidGV4dFwiKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZkLXRlc3QtcmVzdWx0c19fdGV4dCBzdmQtbGlnaHQtYmctY29sb3JcIj5cbiAgICAgICAgPGRpdj57dGhpcy5tb2RlbC5yZXN1bHRUZXh0fTwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuICByZW5kZXJSZXN1bHRBc1RhYmxlKCk6IEpTWC5FbGVtZW50IHtcbiAgICBpZiAodGhpcy5tb2RlbC5yZXN1bHRWaWV3VHlwZSAhPT0gXCJ0YWJsZVwiKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZkLXRlc3QtcmVzdWx0c19fdGFibGUgc3ZkLWxpZ2h0LWJnLWNvbG9yXCI+XG4gICAgICAgIDx0YWJsZT5cbiAgICAgICAgICA8dGhlYWQ+XG4gICAgICAgICAgICA8dHIgY2xhc3NOYW1lPVwic3ZkLWxpZ2h0LWJhY2tncm91bmQtY29sb3JcIj5cbiAgICAgICAgICAgICAgPHRoIGtleT17MX0gY2xhc3NOYW1lPVwic3ZkLWRhcmstYm9yZGVyLWNvbG9yXCI+XG4gICAgICAgICAgICAgICAge3RoaXMubW9kZWwucmVzdWx0c1RpdGxlfVxuICAgICAgICAgICAgICA8L3RoPlxuICAgICAgICAgICAgICA8dGgga2V5PXsyfSBjbGFzc05hbWU9XCJzdmQtZGFyay1ib3JkZXItY29sb3JcIj5cbiAgICAgICAgICAgICAgICB7dGhpcy5tb2RlbC5yZXN1bHRzRGlzcGxheVZhbHVlfVxuICAgICAgICAgICAgICA8L3RoPlxuICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICA8L3RoZWFkPlxuICAgICAgICAgIDx0Ym9keT57U3VydmV5UmVzdWx0cy5yZW5kZXJSb3dzKHRoaXMubW9kZWwucmVzdWx0RGF0YSl9PC90Ym9keT5cbiAgICAgICAgPC90YWJsZT5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbiAgc3RhdGljIHJlbmRlclJvd3MoZGF0YTogQXJyYXk8YW55Pik6IEFycmF5PEpTWC5FbGVtZW50PiB7XG4gICAgY29uc3Qgcm93cyA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZGF0YS5sZW5ndGg7IGkrKykge1xuICAgICAgcm93cy5wdXNoKDxTdXJ2ZXlSZXN1bHRzQnlSb3cga2V5PXtpICsgMX0gcm93PXtkYXRhW2ldfSAvPik7XG4gICAgfVxuICAgIHJldHVybiByb3dzO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlSZXN1bHRzQnlSb3cgZXh0ZW5kcyBDcmVhdG9yTW9kZWxFbGVtZW50PGFueSwgYW55PiB7XG4gIHByaXZhdGUgZ2V0IHJvdygpOiBTdXJ2ZXlSZXN1bHRzSXRlbU1vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5yb3c7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCk6IEJhc2Uge1xuICAgIHJldHVybiB0aGlzLnJvdztcbiAgfVxuXG4gIHJlbmRlcigpOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuIChcbiAgICAgIDw+XG4gICAgICAgIHthdHRhY2hLZXkyY2xpY2soPHRyIG9uQ2xpY2s9eygpID0+IHRoaXMucm93LnRvZ2dsZSgpfT5cbiAgICAgICAgICA8dGQga2V5PXsxfVxuICAgICAgICAgICAgc3R5bGU9e3sgcGFkZGluZ0xlZnQ6IHRoaXMucm93LnRleHRNYXJnaW4gfX1cbiAgICAgICAgICAgIGNsYXNzTmFtZT1cInN2ZC1kYXJrLWJvcmRlci1jb2xvclwiPlxuXG4gICAgICAgICAgICB7dGhpcy5yb3cuaXNOb2RlID8gKFxuICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgIHN0eWxlPXt7IGxlZnQ6IHRoaXMucm93Lm1hcmtlck1hcmdpbiB9fVxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17XCJzdmQtdGVzdC1yZXN1bHRzX19tYXJrZXIgXCIgKyAodGhpcy5yb3cuY29sbGFwc2VkID8gXCJcIiA6IFwic3ZkLXRlc3QtcmVzdWx0c19fbWFya2VyLS1leHBhbmRlZFwiKX0+XG4gICAgICAgICAgICAgICAgPFN2Z0ljb25cbiAgICAgICAgICAgICAgICAgIGljb25OYW1lPXtcImljb24tZXhwYW5kXzE2eDE2XCJ9XG4gICAgICAgICAgICAgICAgICBzaXplPXsxNn1cbiAgICAgICAgICAgICAgICA+PC9TdmdJY29uPlxuICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICApIDogbnVsbH1cblxuICAgICAgICAgICAgPHNwYW4+e3RoaXMucm93LnRpdGxlfTwvc3Bhbj5cbiAgICAgICAgICA8L3RkPlxuICAgICAgICAgIDx0ZCBrZXk9ezJ9IGNsYXNzTmFtZT17dGhpcy5yb3cuaXNOb2RlID8gXCJzdmQtdGVzdC1yZXN1bHRzX19ub2RlLXZhbHVlXCIgOiBcInN2ZC1kYXJrLWJvcmRlci1jb2xvclwifT5cbiAgICAgICAgICAgIHt0aGlzLnJvdy5nZXRTdHJpbmcodGhpcy5yb3cuZGlzcGxheVZhbHVlKX1cbiAgICAgICAgICA8L3RkPlxuICAgICAgICA8L3RyPil9XG4gICAgICAgIHt0aGlzLnJvdy5pc05vZGUgJiYgIXRoaXMucm93LmNvbGxhcHNlZCA/IFN1cnZleVJlc3VsdHMucmVuZGVyUm93cyh0aGlzLnJvdy5kYXRhKSA6IG51bGx9XG4gICAgICA8Lz5cbiAgICApO1xuICB9XG59XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBTaWRlYmFyVGFiTW9kZWwsIFNpZGViYXJNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY3JlYXRvci1jb3JlXCI7XG5pbXBvcnQgeyBCYXNlIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBTdXJ2ZXlFbGVtZW50QmFzZSwgU3VydmV5QWN0aW9uQmFyLCBSZWFjdFF1ZXN0aW9uRmFjdG9yeSwgUmVhY3RFbGVtZW50RmFjdG9yeSB9IGZyb20gXCJzdXJ2ZXktcmVhY3QtdWlcIjtcblxuaW50ZXJmYWNlIElTaWRlYmFyQ29tcG9uZW50UHJvcHMge1xuICBtb2RlbDogU2lkZWJhck1vZGVsO1xufVxuXG5leHBvcnQgY2xhc3MgU2lkZWJhckNvbXBvbmVudCBleHRlbmRzIFN1cnZleUVsZW1lbnRCYXNlPElTaWRlYmFyQ29tcG9uZW50UHJvcHMsIGFueT4ge1xuICBwcml2YXRlIGNvbnRhaW5lclJlZjogUmVhY3QuUmVmT2JqZWN0PEhUTUxEaXZFbGVtZW50PjtcblxuICBnZXQgbW9kZWwoKTogU2lkZWJhck1vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5tb2RlbDtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHByb3BzOiBJU2lkZWJhckNvbXBvbmVudFByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMuY29udGFpbmVyUmVmID0gUmVhY3QuY3JlYXRlUmVmKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCk6IEJhc2Uge1xuICAgIHJldHVybiB0aGlzLm1vZGVsO1xuICB9XG5cbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgc3VwZXIuY29tcG9uZW50RGlkTW91bnQoKTtcbiAgICB0aGlzLm1vZGVsLmluaXRSZXNpemVNYW5hZ2VyKHRoaXMuY29udGFpbmVyUmVmLmN1cnJlbnQpO1xuICB9XG4gIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgIHN1cGVyLmNvbXBvbmVudFdpbGxVbm1vdW50KCk7XG4gICAgdGhpcy5tb2RlbC5yZXNldFJlc2l6ZU1hbmFnZXIoKTtcbiAgfVxuICBwdWJsaWMgY2FuUmVuZGVyKCk6IGJvb2xlYW4ge1xuICAgIGlmICghdGhpcy5tb2RlbCkgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiBzdXBlci5jYW5SZW5kZXIoKTtcbiAgfVxuICByZW5kZXJFbGVtZW50KCkge1xuICAgIGNvbnN0IHN0eWxlID0geyBkaXNwbGF5OiAhdGhpcy5tb2RlbC52aXNpYmxlID8gXCJub25lXCIgOiBcIlwiIH07XG4gICAgY29uc3QgY2xhc3NOYW1lID0gXCJzdmMtc2lkZS1iYXJcIiArICh0aGlzLm1vZGVsLmZseW91dFBhbmVsTW9kZSA/IFwiIHN2Yy1mbHlvdXQtc2lkZS1iYXJcIiA6IFwiXCIpO1xuICAgIGNvbnN0IGl0ZW1zID0gdGhpcy5tb2RlbC50YWJzLm1hcCgoaXRlbSkgPT4gPFNpZGViYXJUYWIgaXRlbT17aXRlbX0ga2V5PXtpdGVtLmlkfSAvPik7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtjbGFzc05hbWV9IHN0eWxlPXt7IGRpc3BsYXk6ICF0aGlzLm1vZGVsLmhhc1Zpc2libGVUYWJzID8gXCJub25lXCIgOiBcIlwiIH19PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy1zaWRlLWJhcl9fc2hhZG93XCIgb25DbGljaz17KCkgPT4gdGhpcy5tb2RlbC5jb2xsYXBzZVNpZGViYXIoKX0+PC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLWZsZXgtY29sdW1uIHN2Yy1zaWRlLWJhcl9fd3JhcHBlclwiPlxuICAgICAgICAgIDxkaXYgcmVmPXt0aGlzLmNvbnRhaW5lclJlZn0gc3R5bGU9e3N0eWxlfSBjbGFzc05hbWU9XCJzdmMtc2lkZS1iYXJfX2NvbnRhaW5lclwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtc2lkZS1iYXJfX2NvbnRhaW5lci1oZWFkZXJcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtc2lkZS1iYXJfX2NvbnRhaW5lci1hY3Rpb25zXCI+XG4gICAgICAgICAgICAgICAgPFN1cnZleUFjdGlvbkJhciBtb2RlbD17dGhpcy5tb2RlbC50b29sYmFyfT48L1N1cnZleUFjdGlvbkJhcj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIHsoISF0aGlzLm1vZGVsLmhlYWRlclRleHQgP1xuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLXNpZGUtYmFyX19jb250YWluZXItdGl0bGVcIj5cbiAgICAgICAgICAgICAgICAgIHt0aGlzLm1vZGVsLmhlYWRlclRleHR9XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgOiBudWxsKX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtc2lkZS1iYXJfX2NvbnRhaW5lci1jb250ZW50XCI+XG4gICAgICAgICAgICAgIHtpdGVtc31cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtc2lkZS1iYXJfX2NvbnRhaW5lci1jbG9zZVwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInNkLWJ0biBzZC1idG4tLWFjdGlvbiBzdmMtc2lkZS1iYXJfX2NvbnRhaW5lci1jbG9zZS1idXR0b25cIiBvbkNsaWNrPXsoKSA9PiB0aGlzLm1vZGVsLmNvbGxhcHNlU2lkZWJhcigpfT4ge3RoaXMubW9kZWwuY2xvc2VUZXh0fSA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbn1cblxuY2xhc3MgU2lkZWJhclRhYiBleHRlbmRzIFN1cnZleUVsZW1lbnRCYXNlPGFueSwgYW55PiB7XG4gIHByaXZhdGUgZ2V0IGl0ZW0oKTogU2lkZWJhclRhYk1vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5pdGVtO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldFN0YXRlRWxlbWVudCgpOiBCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5pdGVtO1xuICB9XG5cbiAgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgaWYgKCF0aGlzLml0ZW0udmlzaWJsZSkgcmV0dXJuIG51bGw7XG5cbiAgICBjb25zdCBjb21wb25lbnQgPSBSZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLmNyZWF0ZUVsZW1lbnQodGhpcy5pdGVtLmNvbXBvbmVudE5hbWUsIHsgbW9kZWw6IHRoaXMuaXRlbS5tb2RlbCB9KTtcblxuICAgIHJldHVybiBjb21wb25lbnQ7XG4gIH1cbn1cblxuUmVhY3RRdWVzdGlvbkZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJRdWVzdGlvbihcInN2Yy1zaWRlLWJhci10YWJcIiwgKHByb3BzKSA9PiB7XG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFNpZGViYXJUYWIsIHByb3BzKTtcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBTaWRlYmFyQ29tcG9uZW50O1xuXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcInN2Yy1zaWRlLWJhclwiLCAocHJvcHMpID0+IHtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU2lkZWJhckNvbXBvbmVudCwgcHJvcHMpO1xufSk7IiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgTG9jYWxpemFibGVTdHJpbmcsIFNlcmlhbGl6ZXIsIEpzb25PYmplY3RQcm9wZXJ0eSwgQmFzZSB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgUmVhY3RFbGVtZW50RmFjdG9yeSwgU3VydmV5RWxlbWVudEJhc2UsIFN2Z0ljb24gfSBmcm9tIFwic3VydmV5LXJlYWN0LXVpXCI7XG5pbXBvcnQgeyBDcmVhdG9yQmFzZSwgU3RyaW5nRWRpdG9yVmlld01vZGVsQmFzZSwgZWRpdGFibGVTdHJpbmdSZW5kZXJlck5hbWUgfSBmcm9tIFwic3VydmV5LWNyZWF0b3ItY29yZVwiO1xuaW1wb3J0IHsgQ3JlYXRvck1vZGVsRWxlbWVudCB9IGZyb20gXCIuL01vZGVsRWxlbWVudFwiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5TG9jU3RyaW5nRWRpdG9yIGV4dGVuZHMgQ3JlYXRvck1vZGVsRWxlbWVudDxhbnksIGFueT4ge1xuICBwcml2YXRlIGJhc2VNb2RlbDogU3RyaW5nRWRpdG9yVmlld01vZGVsQmFzZTtcbiAgcHJpdmF0ZSBzdlN0cmluZ0VkaXRvclJlZjogUmVhY3QuUmVmT2JqZWN0PEhUTUxEaXZFbGVtZW50PjtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLnN0YXRlID0geyBjaGFuZ2VkOiAwIH07XG4gICAgdGhpcy5zdlN0cmluZ0VkaXRvclJlZiA9IFJlYWN0LmNyZWF0ZVJlZigpO1xuICAgIHRoaXMuYmFzZU1vZGVsLmdldEVkaXRvckVsZW1lbnQgPSAoKSA9PiB0aGlzLnN2U3RyaW5nRWRpdG9yUmVmLmN1cnJlbnQ7XG4gIH1cbiAgcHJvdGVjdGVkIGNyZWF0ZU1vZGVsKCk6IHZvaWQge1xuICAgIHRoaXMuYmFzZU1vZGVsID0gbmV3IFN0cmluZ0VkaXRvclZpZXdNb2RlbEJhc2UodGhpcy5sb2NTdHJpbmcsIHRoaXMuY3JlYXRvcik7XG4gICAgdGhpcy5iYXNlTW9kZWwuYmx1ckVkaXRvciA9ICgpID0+IHtcbiAgICAgIHRoaXMuc3ZTdHJpbmdFZGl0b3JSZWYuY3VycmVudC5ibHVyKCk7XG4gICAgICB0aGlzLnN2U3RyaW5nRWRpdG9yUmVmLmN1cnJlbnQuc3BlbGxjaGVjayA9IGZhbHNlO1xuICAgIH07XG4gIH1cbiAgcHJvdGVjdGVkIGdldFVwZGF0ZWRNb2RlbFByb3BzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gW1wiY3JlYXRvclwiLCBcImxvY1N0cmluZ1wiXTtcbiAgfVxuICBwcml2YXRlIGdldCBsb2NTdHJpbmcoKTogTG9jYWxpemFibGVTdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BzLmxvY1N0ci5sb2NTdHI7XG4gIH1cbiAgcHJpdmF0ZSBnZXQgY3JlYXRvcigpOiBDcmVhdG9yQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMubG9jU3RyLmNyZWF0b3I7XG4gIH1cbiAgcHJpdmF0ZSBnZXQgc3R5bGUoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5zdHlsZTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnQoKTogQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMuYmFzZU1vZGVsO1xuICB9XG5cbiAgcHVibGljIGdldCBlcnJvclRleHQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5iYXNlTW9kZWwuZXJyb3JUZXh0O1xuICB9XG4gIHByaXZhdGUgb25DaGFuZ2VkSGFuZGxlciA9IChzZW5kZXI6IGFueSwgb3B0aW9uczogYW55KSA9PiB7XG4gICAgdGhpcy5zZXRTdGF0ZSh7IGNoYW5nZWQ6ICEhdGhpcy5zdGF0ZSAmJiB0aGlzLnN0YXRlLmNoYW5nZWQgPyB0aGlzLnN0YXRlLmNoYW5nZWQgKyAxIDogMSB9KTtcbiAgfVxuICBwdWJsaWMgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgc3VwZXIuY29tcG9uZW50RGlkTW91bnQoKTtcbiAgICBpZiAoIXRoaXMubG9jU3RyaW5nKSByZXR1cm47XG4gICAgY29uc3Qgc2VsZjogU3VydmV5TG9jU3RyaW5nRWRpdG9yID0gdGhpcztcbiAgICB0aGlzLmJhc2VNb2RlbC5hZnRlclJlbmRlcigpO1xuICAgIHRoaXMubG9jU3RyaW5nLm9uU3RyaW5nQ2hhbmdlZC5hZGQodGhpcy5vbkNoYW5nZWRIYW5kbGVyKTtcbiAgICBpZiAodGhpcy5sb2NTdHJpbmdbXCJfX2lzRWRpdGluZ1wiXSkge1xuICAgICAgdGhpcy5zdlN0cmluZ0VkaXRvclJlZi5jdXJyZW50LmZvY3VzKCk7XG4gICAgICAvLyBkb2N1bWVudC5leGVjQ29tbWFuZCgnc2VsZWN0QWxsJywgZmFsc2UsIG51bGwpO1xuICAgIH1cbiAgfVxuICBwdWJsaWMgY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wczogYW55LCBwcmV2U3RhdGU6IGFueSk6IHZvaWQge1xuICAgIHN1cGVyLmNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHMsIHByZXZTdGF0ZSk7XG4gICAgdGhpcy5iYXNlTW9kZWwuYWZ0ZXJSZW5kZXIoKTtcbiAgfVxuICBwdWJsaWMgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgc3VwZXIuY29tcG9uZW50V2lsbFVubW91bnQoKTtcbiAgICBpZiAoIXRoaXMubG9jU3RyaW5nKSByZXR1cm47XG4gICAgdGhpcy5sb2NTdHJpbmcub25TdHJpbmdDaGFuZ2VkLnJlbW92ZSh0aGlzLm9uQ2hhbmdlZEhhbmRsZXIpO1xuICB9XG4gIHByaXZhdGUgZ2V0IHBsYWNlaG9sZGVyKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuYmFzZU1vZGVsLnBsYWNlaG9sZGVyO1xuICB9XG4gIHByaXZhdGUgZ2V0IGNvbnRlbnRFZGl0YWJsZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5iYXNlTW9kZWwuY29udGVudEVkaXRhYmxlO1xuICB9XG4gIHByaXZhdGUgb25CbHVyID0gKGV2ZW50OiBhbnkpID0+IHtcbiAgICB0aGlzLnN2U3RyaW5nRWRpdG9yUmVmLmN1cnJlbnQuc3BlbGxjaGVjayA9IGZhbHNlO1xuICAgIHRoaXMubG9jU3RyaW5nW1wiX19pc0VkaXRpbmdcIl0gPSBmYWxzZTtcbiAgICB0aGlzLmp1c3RGb2N1c2VkID0gZmFsc2U7XG4gICAgdGhpcy5iYXNlTW9kZWwub25CbHVyKGV2ZW50Lm5hdGl2ZUV2ZW50KTtcbiAgICByZXR1cm4gdGhpcy5iYXNlTW9kZWwuZXJyb3JUZXh0O1xuICB9O1xuICBwcml2YXRlIG9uQ29tcG9zaXRpb25TdGFydCA9IChldmVudDogYW55KSA9PiB7XG4gICAgdGhpcy5iYXNlTW9kZWwub25Db21wb3NpdGlvblN0YXJ0KGV2ZW50Lm5hdGl2ZUV2ZW50KTtcbiAgfTtcbiAgcHJpdmF0ZSBvbkNvbXBvc2l0aW9uRW5kID0gKGV2ZW50OiBhbnkpID0+IHtcbiAgICB0aGlzLmJhc2VNb2RlbC5vbkNvbXBvc2l0aW9uRW5kKGV2ZW50Lm5hdGl2ZUV2ZW50KTtcbiAgfTtcbiAgcHJpdmF0ZSBvbklucHV0ID0gKGV2ZW50OiBhbnkpID0+IHtcbiAgICB0aGlzLmJhc2VNb2RlbC5vbklucHV0KGV2ZW50Lm5hdGl2ZUV2ZW50KTtcbiAgfTtcbiAgcHJpdmF0ZSBqdXN0Rm9jdXNlZCA9IGZhbHNlO1xuICBwcml2YXRlIG9uRm9jdXMgPSAoZXZlbnQ6IGFueSkgPT4ge1xuICAgIHRoaXMuYmFzZU1vZGVsLm9uRm9jdXMoZXZlbnQubmF0aXZlRXZlbnQpO1xuICAgIHRoaXMuanVzdEZvY3VzZWQgPSB0cnVlO1xuICB9O1xuICBwcml2YXRlIG9uS2V5RG93biA9IChldmVudDogUmVhY3QuS2V5Ym9hcmRFdmVudDxIVE1MU3BhbkVsZW1lbnQ+KSA9PiB7XG4gICAgcmV0dXJuIHRoaXMuYmFzZU1vZGVsLm9uS2V5RG93bihldmVudC5uYXRpdmVFdmVudCk7XG4gIH07XG4gIHByaXZhdGUgb25LZXlVcCA9IChldmVudDogUmVhY3QuS2V5Ym9hcmRFdmVudDxIVE1MU3BhbkVsZW1lbnQ+KSA9PiB7XG4gICAgcmV0dXJuIHRoaXMuYmFzZU1vZGVsLm9uS2V5VXAoZXZlbnQubmF0aXZlRXZlbnQpO1xuICB9O1xuICBwcml2YXRlIG9uTW91c2VVcCA9IChldmVudDogUmVhY3QuTW91c2VFdmVudDxIVE1MU3BhbkVsZW1lbnQ+KTogYm9vbGVhbiA9PiB7XG4gICAgcmV0dXJuIHRoaXMuYmFzZU1vZGVsLm9uTW91c2VVcChldmVudC5uYXRpdmVFdmVudCk7XG4gIH07XG4gIHByaXZhdGUgZG9uZSA9IChldmVudDogYW55KSA9PiB7XG4gICAgdGhpcy5iYXNlTW9kZWwuZG9uZShldmVudCk7XG4gICAgdGhpcy5sb2NTdHJpbmdbXCJfX2lzRWRpdGluZ1wiXSA9IGZhbHNlO1xuICB9O1xuICBwcml2YXRlIGVkaXQgPSAoZXZlbnQ6IGFueSkgPT4ge1xuICAgIHRoaXMuc3ZTdHJpbmdFZGl0b3JSZWYuY3VycmVudC5mb2N1cygpO1xuICAgIC8vIGRvY3VtZW50LmV4ZWNDb21tYW5kKCdzZWxlY3RBbGwnLCBmYWxzZSwgbnVsbCk7XG4gICAgdGhpcy5sb2NTdHJpbmdbXCJfX2lzRWRpdGluZ1wiXSA9IHRydWU7XG4gICAgdGhpcy5iYXNlTW9kZWwub25DbGljayhldmVudCk7XG4gIH07XG4gIHByaXZhdGUgZ2V0IGNsYXNzTmFtZSgpIHtcbiAgICByZXR1cm4gdGhpcy5iYXNlTW9kZWwuY2xhc3NOYW1lKHRoaXMubG9jU3RyaW5nLnJlbmRlcmVkSHRtbCk7XG4gIH1cbiAgcHVibGljIHJlbmRlcigpOiBKU1guRWxlbWVudCB7XG4gICAgaWYgKCF0aGlzLmxvY1N0cmluZykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgdGhpcy5iYXNlTW9kZWwuc2V0TG9jU3RyaW5nKHRoaXMubG9jU3RyaW5nKTtcbiAgICB9XG4gICAgbGV0IGNvbnRyb2wgPSBudWxsO1xuICAgIGlmICh0aGlzLmxvY1N0cmluZy5oYXNIdG1sKSB7XG4gICAgICBjb25zdCBodG1sVmFsdWUgPSB7IF9faHRtbDogdGhpcy5iYXNlTW9kZWwuZm9jdXNlZCAmJiB0aGlzLmJhc2VNb2RlbC5lZGl0QXNUZXh0ICYmIHRoaXMubG9jU3RyaW5nLnRleHQgfHwgdGhpcy5sb2NTdHJpbmcucmVuZGVyZWRIdG1sIH07XG4gICAgICBjb250cm9sID0gKFxuICAgICAgICA8c3BhblxuICAgICAgICAgIHJvbGU9XCJ0ZXh0Ym94XCJcbiAgICAgICAgICByZWY9e3RoaXMuc3ZTdHJpbmdFZGl0b3JSZWZ9XG4gICAgICAgICAgY2xhc3NOYW1lPVwic3Ytc3RyaW5nLWVkaXRvclwiXG4gICAgICAgICAgY29udGVudEVkaXRhYmxlPXt0aGlzLmNvbnRlbnRFZGl0YWJsZX1cbiAgICAgICAgICBzcGVsbENoZWNrPXtmYWxzZX1cbiAgICAgICAgICBhcmlhLXBsYWNlaG9sZGVyPXt0aGlzLnBsYWNlaG9sZGVyfVxuICAgICAgICAgIGFyaWEtbGFiZWw9e3RoaXMucGxhY2Vob2xkZXIgfHwgXCJjb250ZW50IGVkaXRhYmxlXCJ9XG4gICAgICAgICAgc3VwcHJlc3NDb250ZW50RWRpdGFibGVXYXJuaW5nPXt0cnVlfVxuICAgICAgICAgIC8vIHN0eWxlPXt0aGlzLnN0eWxlfVxuICAgICAgICAgIGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MPXtodG1sVmFsdWV9XG4gICAgICAgICAgb25CbHVyPXt0aGlzLm9uQmx1cn1cbiAgICAgICAgICBvbkZvY3VzPXt0aGlzLm9uRm9jdXN9XG4gICAgICAgICAgb25LZXlEb3duPXt0aGlzLm9uS2V5RG93bn1cbiAgICAgICAgICBvbk1vdXNlVXA9e3RoaXMub25Nb3VzZVVwfVxuICAgICAgICAgIG9uQ2xpY2s9e3RoaXMuZWRpdH1cbiAgICAgICAgLz5cbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnRyb2wgPSAoXG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgcm9sZT1cInRleHRib3hcIlxuICAgICAgICAgIHJlZj17dGhpcy5zdlN0cmluZ0VkaXRvclJlZn1cbiAgICAgICAgICBjbGFzc05hbWU9XCJzdi1zdHJpbmctZWRpdG9yXCJcbiAgICAgICAgICBjb250ZW50RWRpdGFibGU9e3RoaXMuY29udGVudEVkaXRhYmxlfVxuICAgICAgICAgIHNwZWxsQ2hlY2s9e2ZhbHNlfVxuICAgICAgICAgIGFyaWEtcGxhY2Vob2xkZXI9e3RoaXMucGxhY2Vob2xkZXJ9XG4gICAgICAgICAgYXJpYS1sYWJlbD17dGhpcy5wbGFjZWhvbGRlciB8fCBcImNvbnRlbnQgZWRpdGFibGVcIn1cbiAgICAgICAgICBzdXBwcmVzc0NvbnRlbnRFZGl0YWJsZVdhcm5pbmc9e3RydWV9XG4gICAgICAgICAgLy8gc3R5bGU9e3RoaXMuc3R5bGV9XG4gICAgICAgICAgb25CbHVyPXt0aGlzLm9uQmx1cn1cbiAgICAgICAgICBvbklucHV0PXt0aGlzLm9uSW5wdXR9XG4gICAgICAgICAgb25Db21wb3NpdGlvblN0YXJ0PXt0aGlzLm9uQ29tcG9zaXRpb25TdGFydH1cbiAgICAgICAgICBvbkNvbXBvc2l0aW9uRW5kPXt0aGlzLm9uQ29tcG9zaXRpb25FbmR9XG4gICAgICAgICAgb25Gb2N1cz17dGhpcy5vbkZvY3VzfVxuICAgICAgICAgIG9uS2V5RG93bj17dGhpcy5vbktleURvd259XG4gICAgICAgICAgb25LZXlVcD17dGhpcy5vbktleVVwfVxuICAgICAgICAgIG9uTW91c2VVcD17dGhpcy5vbk1vdXNlVXB9XG4gICAgICAgICAgb25DbGljaz17dGhpcy5lZGl0fVxuICAgICAgICA+XG4gICAgICAgICAge3RoaXMubG9jU3RyaW5nLnJlbmRlcmVkSHRtbH1cbiAgICAgICAgPC9zcGFuPlxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIChcbiAgICAgIDxzcGFuIGNsYXNzTmFtZT17dGhpcy5jbGFzc05hbWV9PlxuICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJzdmMtc3RyaW5nLWVkaXRvcl9fY29udGVudFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLXN0cmluZy1lZGl0b3JfX2JvcmRlclwiXG4gICAgICAgICAgICBvbkNsaWNrPXt0aGlzLmVkaXR9XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPFN2Z0ljb25cbiAgICAgICAgICAgICAgY2xhc3NOYW1lPVwic3ZjLXN0cmluZy1lZGl0b3JfX2J1dHRvbiBzdmMtc3RyaW5nLWVkaXRvcl9fYnV0dG9uLS1lZGl0XCJcbiAgICAgICAgICAgICAgc2l6ZT17MTZ9XG4gICAgICAgICAgICAgIGljb25OYW1lPXtcImljb24tZWRpdFwifVxuICAgICAgICAgICAgPjwvU3ZnSWNvbj5cblxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIHtjb250cm9sfVxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLXN0cmluZy1lZGl0b3JfX2NvbnRyb2xzXCJcbiAgICAgICAgICAgIG9uQ2xpY2s9e3RoaXMuZWRpdH0+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICAge3RoaXMuZXJyb3JUZXh0ID8gPHNwYW4gY2xhc3NOYW1lPVwic3ZjLXN0cmluZy1lZGl0b3JfX2Vycm9yXCI+e3RoaXMuZXJyb3JUZXh0fTwvc3Bhbj4gOiBcIlwifVxuICAgICAgPC9zcGFuPlxuICAgICk7XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXG4gIGVkaXRhYmxlU3RyaW5nUmVuZGVyZXJOYW1lLFxuICAocHJvcHMpID0+IHtcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdXJ2ZXlMb2NTdHJpbmdFZGl0b3IsIHByb3BzKTtcbiAgfVxuKTtcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBSZWFjdERPTSBmcm9tIFwicmVhY3QtZG9tXCI7XG5cbmltcG9ydCB7XG4gIEJhc2UsXG4gIFF1ZXN0aW9uLFxuICBTdXJ2ZXlFcnJvcixcbiAgU3VydmV5TW9kZWxcbn0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQge1xuICBTdXJ2ZXlBY3Rpb25CYXIsXG4gIFJlYWN0RWxlbWVudEZhY3RvcnksXG4gIFJlYWN0UXVlc3Rpb25GYWN0b3J5LFxuICBTdXJ2ZXlFbGVtZW50QmFzZSxcbiAgU3VydmV5TG9jU3RyaW5nVmlld2VyLFxuICBTdXJ2ZXlcbn0gZnJvbSBcInN1cnZleS1yZWFjdC11aVwiO1xuaW1wb3J0IHtcbiAgSUNyZWF0b3JPcHRpb25zLFxuICBDcmVhdG9yQmFzZSxcbiAgSVRhYmJlZE1lbnVJdGVtXG59IGZyb20gXCJzdXJ2ZXktY3JlYXRvci1jb3JlXCI7XG5pbXBvcnQgeyBUYWJiZWRNZW51Q29tcG9uZW50IH0gZnJvbSBcIi4vVGFiYmVkTWVudVwiO1xuaW1wb3J0IHsgTm90aWZpZXJDb21wb25lbnQgfSBmcm9tIFwiLi9Ob3RpZmllclwiO1xuaW1wb3J0IHsgU3ZnQnVuZGxlQ29tcG9uZW50IH0gZnJvbSBcIi4vU3ZnQnVuZGxlXCI7XG5cbmludGVyZmFjZSBJU3VydmV5Q3JlYXRvckNvbXBvbmVudFByb3BzIHtcbiAgY3JlYXRvcjogU3VydmV5Q3JlYXRvcjtcbiAgc3R5bGU/OiBhbnk7XG59XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlDcmVhdG9yQ29tcG9uZW50IGV4dGVuZHMgU3VydmV5RWxlbWVudEJhc2U8XG4gIElTdXJ2ZXlDcmVhdG9yQ29tcG9uZW50UHJvcHMsXG4gIGFueVxuPiB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBJU3VydmV5Q3JlYXRvckNvbXBvbmVudFByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMucm9vdE5vZGUgPSBSZWFjdC5jcmVhdGVSZWYoKTtcbiAgfVxuICBnZXQgY3JlYXRvcigpOiBDcmVhdG9yQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuY3JlYXRvcjtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCk6IEJhc2Uge1xuICAgIHJldHVybiB0aGlzLnByb3BzLmNyZWF0b3I7XG4gIH1cbiAgZ2V0IHN0eWxlKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuc3R5bGU7XG4gIH1cbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgc3VwZXIuY29tcG9uZW50RGlkTW91bnQoKTtcbiAgICB0aGlzLmNyZWF0b3IuaW5pdEtleWJvYXJkU2hvcnRjdXRzKHRoaXMucm9vdE5vZGUuY3VycmVudCk7XG4gICAgdGhpcy5jcmVhdG9yLmluaXRSZXNwb25zaXZpdHlNYW5hZ2VyKHRoaXMucm9vdE5vZGUuY3VycmVudCk7XG4gIH1cbiAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgc3VwZXIuY29tcG9uZW50V2lsbFVubW91bnQoKTtcbiAgICB0aGlzLmNyZWF0b3IucmVtb3ZlS2V5Ym9hcmRTaG9ydGN1dHModGhpcy5yb290Tm9kZS5jdXJyZW50KTtcbiAgICB0aGlzLmNyZWF0b3IucmVzZXRSZXNwb25zaXZpdHlNYW5hZ2VyKCk7XG4gIH1cbiAgcHJpdmF0ZSByb290Tm9kZTogUmVhY3QuUmVmT2JqZWN0PEhUTUxEaXZFbGVtZW50PjtcblxuICByZW5kZXJFbGVtZW50KCkge1xuICAgIGNvbnN0IGNyZWF0b3I6IENyZWF0b3JCYXNlID0gdGhpcy5wcm9wcy5jcmVhdG9yO1xuICAgIGlmIChjcmVhdG9yLmlzQ3JlYXRvckRpc3Bvc2VkKSByZXR1cm4gbnVsbDtcbiAgICBjb25zdCBjcmVhdG9yQ2xhc3NOYW1lID0gXCJzdmMtY3JlYXRvclwiICsgKHRoaXMucHJvcHMuY3JlYXRvci5pc01vYmlsZVZpZXcgPyBcIiBzdmMtY3JlYXRvci0tbW9iaWxlXCIgOiBcIlwiKTtcbiAgICBjb25zdCBhcmVhQ2xhc3NOYW1lID0gXCJzdmMtZnVsbC1jb250YWluZXIgc3ZjLWNyZWF0b3JfX2FyZWEgc3ZjLWZsZXgtY29sdW1uXCIgKyAodGhpcy5wcm9wcy5jcmVhdG9yLmhhdmVDb21tZXJjaWFsTGljZW5zZSA/IFwiXCIgOiBcIiBzdmMtY3JlYXRvcl9fYXJlYS0td2l0aC1iYW5uZXJcIik7XG4gICAgY29uc3QgY29udGVudFdyYXBwZXJDbGFzc05hbWUgPSBcInN2Yy1jcmVhdG9yX19jb250ZW50LXdyYXBwZXIgc3ZjLWZsZXgtcm93XCIgKyAodGhpcy5wcm9wcy5jcmVhdG9yLmlzTW9iaWxlVmlldyA/IFwiIHN2Yy1jcmVhdG9yX19jb250ZW50LXdyYXBwZXItLWZvb3Rlci10b29sYmFyXCIgOiBcIlwiKTtcbiAgICBjb25zdCBmdWxsQ29udGFpbmVyQ2xhc3NOYW1lID0gXCJzdmMtZmxleC1yb3cgc3ZjLWZ1bGwtY29udGFpbmVyXCIgKyAoXCIgc3ZjLWNyZWF0b3JfX3NpZGUtYmFyLS1cIiArIHRoaXMuY3JlYXRvci5zaWRlYmFyTG9jYXRpb24pO1xuICAgIGxldCBsaWNlbnNlQmFubmVyID0gbnVsbDtcbiAgICBpZiAoIXRoaXMucHJvcHMuY3JlYXRvci5oYXZlQ29tbWVyY2lhbExpY2Vuc2UpIHtcbiAgICAgIGxpY2Vuc2VCYW5uZXIgPSAoXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLWNyZWF0b3JfX2Jhbm5lclwiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInN2Yy1jcmVhdG9yX19ub24tY29tbWVyY2lhbC10ZXh0XCI+XG4gICAgICAgICAgICA8YSBocmVmPVwiaHR0cHM6Ly9zdXJ2ZXlqcy5pby9idXlcIj5cbiAgICAgICAgICAgICAge3RoaXMucHJvcHMuY3JlYXRvci5saWNlbnNlVGV4dH1cbiAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgKTtcbiAgICB9XG4gICAgLy9BTTogd2lkdGggdW5yZWNvZ25pemVkIGJ5IHJlYWN0XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtjcmVhdG9yQ2xhc3NOYW1lfSByZWY9e3RoaXMucm9vdE5vZGV9IHN0eWxlPXt0aGlzLnN0eWxlfT5cbiAgICAgICAgPFN2Z0J1bmRsZUNvbXBvbmVudD48L1N2Z0J1bmRsZUNvbXBvbmVudD5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e2FyZWFDbGFzc05hbWV9PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtmdWxsQ29udGFpbmVyQ2xhc3NOYW1lfT5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLWZsZXgtY29sdW1uIHN2Yy1mbGV4LXJvd19fZWxlbWVudCBzdmMtZmxleC1yb3dfX2VsZW1lbnQtLWdyb3dpbmdcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtdG9wLWJhclwiPlxuICAgICAgICAgICAgICAgIHsoY3JlYXRvci5zaG93VGFicyA/XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy10YWJiZWQtbWVudS13cmFwcGVyXCI+XG4gICAgICAgICAgICAgICAgICAgIDxUYWJiZWRNZW51Q29tcG9uZW50IG1vZGVsPXtjcmVhdG9yLnRhYmJlZE1lbnV9PjwvVGFiYmVkTWVudUNvbXBvbmVudD5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PiA6IG51bGwpfVxuICAgICAgICAgICAgICAgIHsoY3JlYXRvci5zaG93VG9vbGJhciA/XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy10b29sYmFyLXdyYXBwZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgPFN1cnZleUFjdGlvbkJhciBtb2RlbD17Y3JlYXRvci50b29sYmFyfT48L1N1cnZleUFjdGlvbkJhcj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgOiBudWxsKX1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtjb250ZW50V3JhcHBlckNsYXNzTmFtZX0+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtY3JlYXRvcl9fY29udGVudC1ob2xkZXIgc3ZjLWZsZXgtY29sdW1uXCI+XG4gICAgICAgICAgICAgICAgICB7dGhpcy5yZW5kZXJBY3RpdmVUYWIoKX1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLWZvb3Rlci1iYXJcIj5cbiAgICAgICAgICAgICAgICB7KGNyZWF0b3IuaXNNb2JpbGVWaWV3ID9cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLXRvb2xiYXItd3JhcHBlclwiPlxuICAgICAgICAgICAgICAgICAgICA8U3VydmV5QWN0aW9uQmFyIG1vZGVsPXtjcmVhdG9yLmZvb3RlclRvb2xiYXJ9PjwvU3VydmV5QWN0aW9uQmFyPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA6IG51bGwpfVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAge3RoaXMucmVuZGVyU2lkZWJhcigpfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIHtsaWNlbnNlQmFubmVyfVxuICAgICAgICAgIDxOb3RpZmllckNvbXBvbmVudFxuICAgICAgICAgICAgY3JlYXRvcj17Y3JlYXRvcn1cbiAgICAgICAgICAgIG5vdGlmaWVyPXtjcmVhdG9yLm5vdGlmaWVyfVxuICAgICAgICAgID48L05vdGlmaWVyQ29tcG9uZW50PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbiAgcmVuZGVyQWN0aXZlVGFiKCkge1xuICAgIGNvbnN0IGNyZWF0b3I6IENyZWF0b3JCYXNlID0gdGhpcy5wcm9wcy5jcmVhdG9yO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY3JlYXRvci50YWJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoY3JlYXRvci50YWJzW2ldLmlkID09PSBjcmVhdG9yLmFjdGl2ZVRhYikge1xuICAgICAgICByZXR1cm4gdGhpcy5yZW5kZXJDcmVhdG9yVGFiKGNyZWF0b3IudGFic1tpXSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHJlbmRlckNyZWF0b3JUYWIodGFiOiBJVGFiYmVkTWVudUl0ZW0pIHtcbiAgICBpZiAodGFiLnZpc2libGUgPT09IGZhbHNlKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgY29uc3QgY3JlYXRvcjogQ3JlYXRvckJhc2UgPSB0aGlzLnByb3BzLmNyZWF0b3I7XG4gICAgY29uc3QgY29tcG9uZW50ID0gISF0YWIucmVuZGVyVGFiXG4gICAgICA/IHRhYi5yZW5kZXJUYWIoKVxuICAgICAgOiBSZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLmNyZWF0ZUVsZW1lbnQodGFiLmNvbXBvbmVudENvbnRlbnQsIHtcbiAgICAgICAgY3JlYXRvcjogY3JlYXRvcixcbiAgICAgICAgc3VydmV5OiBjcmVhdG9yLnN1cnZleSxcbiAgICAgICAgZGF0YTogdGFiLmRhdGEubW9kZWxcbiAgICAgIH0pO1xuICAgIGNvbnN0IGNsYXNzTmFtZSA9IFwic3ZjLWNyZWF0b3ItdGFiXCIgKyAoY3JlYXRvci50b29sYm94TG9jYXRpb24gPT0gXCJyaWdodFwiID8gXCIgc3ZjLWNyZWF0b3JfX3Rvb2xib3gtLXJpZ2h0XCIgOiBcIlwiKTtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdlxuICAgICAgICBrZXk9e3RhYi5pZH1cbiAgICAgICAgaWQ9e1wic2Nyb2xsYWJsZURpdi1cIiArIHRhYi5pZH1cbiAgICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWV9XG4gICAgICA+XG4gICAgICAgIHtjb21wb25lbnR9XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG4gIHJlbmRlclNpZGViYXIoKSB7XG4gICAgaWYgKCEhdGhpcy5jcmVhdG9yLnNpZGViYXIpIHtcbiAgICAgIGNvbnN0IGNsYXNzTmFtZSA9IHRoaXMuY3JlYXRvci5pc01vYmlsZVZpZXcgPyBcInN2LW1vYmlsZS1zaWRlLWJhclwiIDogXCJcIjtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtjbGFzc05hbWV9PlxuICAgICAgICAgIHtSZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLmNyZWF0ZUVsZW1lbnQoXCJzdmMtc2lkZS1iYXJcIiwgeyBtb2RlbDogdGhpcy5jcmVhdG9yLnNpZGViYXIgfSl9XG4gICAgICAgIDwvZGl2Pik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgU3VydmV5Q3JlYXRvciBleHRlbmRzIENyZWF0b3JCYXNlIHtcbiAgY29uc3RydWN0b3Iob3B0aW9uczogSUNyZWF0b3JPcHRpb25zID0ge30sIG9wdGlvbnMyPzogSUNyZWF0b3JPcHRpb25zKSB7XG4gICAgc3VwZXIob3B0aW9ucywgb3B0aW9uczIpO1xuICB9XG4gIHB1YmxpYyByZW5kZXIodGFyZ2V0OiBzdHJpbmcgfCBIVE1MRWxlbWVudCkge1xuICAgIGxldCBub2RlOiBIVE1MRWxlbWVudCA9IHRhcmdldCBhcyBIVE1MRWxlbWVudDtcbiAgICBpZiAodHlwZW9mIHRhcmdldCA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgbm9kZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRhcmdldCk7XG4gICAgfVxuICAgIFJlYWN0RE9NLnVubW91bnRDb21wb25lbnRBdE5vZGUobm9kZSk7XG4gICAgUmVhY3RET00ucmVuZGVyKFxuICAgICAgPFJlYWN0LlN0cmljdE1vZGU+XG4gICAgICAgIDxTdXJ2ZXlDcmVhdG9yQ29tcG9uZW50IGNyZWF0b3I9e3RoaXN9IC8+XG4gICAgICA8L1JlYWN0LlN0cmljdE1vZGU+LFxuICAgICAgbm9kZVxuICAgICk7XG4gIH1cblxuICAvL0lTdXJ2ZXlDcmVhdG9yXG4gIHB1YmxpYyBjcmVhdGVRdWVzdGlvbkVsZW1lbnQocXVlc3Rpb246IFF1ZXN0aW9uKTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiBSZWFjdFF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS5jcmVhdGVRdWVzdGlvbihcbiAgICAgIHF1ZXN0aW9uLmlzRGVmYXVsdFJlbmRlcmluZygpXG4gICAgICAgID8gcXVlc3Rpb24uZ2V0VGVtcGxhdGUoKVxuICAgICAgICA6IHF1ZXN0aW9uLmdldENvbXBvbmVudE5hbWUoKSxcbiAgICAgIHtcbiAgICAgICAgcXVlc3Rpb246IHF1ZXN0aW9uLFxuICAgICAgICBpc0Rpc3BsYXlNb2RlOiBxdWVzdGlvbi5pc1JlYWRPbmx5LFxuICAgICAgICBjcmVhdG9yOiB0aGlzXG4gICAgICB9XG4gICAgKTtcbiAgfVxuICBwdWJsaWMgcmVuZGVyRXJyb3IoXG4gICAga2V5OiBzdHJpbmcsXG4gICAgZXJyb3I6IFN1cnZleUVycm9yLFxuICAgIGNzc0NsYXNzZXM6IGFueVxuICApOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYga2V5PXtrZXl9PlxuICAgICAgICA8c3BhbiBjbGFzc05hbWU9e2Nzc0NsYXNzZXMuZXJyb3IuaWNvbn0gYXJpYS1oaWRkZW49XCJ0cnVlXCIgLz5cbiAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXtjc3NDbGFzc2VzLmVycm9yLml0ZW19PlxuICAgICAgICAgIDxTdXJ2ZXlMb2NTdHJpbmdWaWV3ZXIgbG9jU3RyPXtlcnJvci5sb2NUZXh0fSAvPlxuICAgICAgICA8L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG4gIHB1YmxpYyBxdWVzdGlvblRpdGxlTG9jYXRpb24oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5zdXJ2ZXkucXVlc3Rpb25UaXRsZUxvY2F0aW9uO1xuICB9XG4gIHB1YmxpYyBxdWVzdGlvbkVycm9yTG9jYXRpb24oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5zdXJ2ZXkucXVlc3Rpb25FcnJvckxvY2F0aW9uO1xuICB9XG59XG5cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFwic3VydmV5LXdpZGdldFwiLCAocHJvcHMpID0+IHtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3VydmV5LCBwcm9wcyk7XG59KTtcbiIsIlxuaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgU3ZnUmVnaXN0cnkgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IHN2Z0J1bmRsZSB9IGZyb20gXCJzdXJ2ZXktY3JlYXRvci1jb3JlXCI7XG5pbXBvcnQgeyBSZWFjdEVsZW1lbnRGYWN0b3J5IH0gZnJvbSBcInN1cnZleS1yZWFjdC11aVwiO1xuXG5leHBvcnQgY2xhc3MgU3ZnQnVuZGxlQ29tcG9uZW50IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgcHJpdmF0ZSBjb250YWluZXJSZWY6IFJlYWN0LlJlZk9iamVjdDxTVkdTVkdFbGVtZW50PjtcblxuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMuY29udGFpbmVyUmVmID0gUmVhY3QuY3JlYXRlUmVmKCk7XG4gIH1cbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgaWYgKCEhdGhpcy5jb250YWluZXJSZWYuY3VycmVudCkge1xuICAgICAgdGhpcy5jb250YWluZXJSZWYuY3VycmVudC5pbm5lckhUTUwgPSBTdmdSZWdpc3RyeS5pY29uc1JlbmRlcmVkSHRtbCgpO1xuICAgIH1cbiAgfVxuICByZW5kZXIoKSB7XG4gICAgY29uc3Qgc3ZnU3R5bGUgPSB7XG4gICAgICBkaXNwbGF5OiBcIm5vbmVcIlxuICAgIH07XG4gICAgcmV0dXJuIDxzdmcgc3R5bGU9e3N2Z1N0eWxlfSBpZD1cInN2LWljb24taG9sZGVyLWdsb2JhbC1jb250YWluZXJcIiByZWY9e3RoaXMuY29udGFpbmVyUmVmfT48L3N2Zz47XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXCJzdmMtc3ZnLWJ1bmRsZVwiLCAocHJvcHMpID0+IHtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3ZnQnVuZGxlQ29tcG9uZW50LCBwcm9wcyk7XG59KTsiLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBDU1NQcm9wZXJ0aWVzIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBJVGFiYmVkTWVudUl0ZW0sIFRhYmJlZE1lbnVJdGVtLCBUYWJiZWRNZW51Q29udGFpbmVyIH0gZnJvbSBcInN1cnZleS1jcmVhdG9yLWNvcmVcIjtcbmltcG9ydCB7XG4gIEJhc2UsXG4gIElBY3Rpb24sXG4gIEFjdGlvbixcbiAgUmVzcG9uc2l2aXR5TWFuYWdlcixcbiAgQWRhcHRpdmVBY3Rpb25Db250YWluZXJcbn0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBhdHRhY2hLZXkyY2xpY2ssIFJlYWN0RWxlbWVudEZhY3RvcnksIFN1cnZleUVsZW1lbnRCYXNlIH0gZnJvbSBcInN1cnZleS1yZWFjdC11aVwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIElUYWJiZWRNZW51Q29tcG9uZW50UHJvcHMge1xuICBtb2RlbDogVGFiYmVkTWVudUNvbnRhaW5lcjtcbn1cblxuZXhwb3J0IGNsYXNzIFRhYmJlZE1lbnVDb21wb25lbnQgZXh0ZW5kcyBTdXJ2ZXlFbGVtZW50QmFzZTxcbiAgSVRhYmJlZE1lbnVDb21wb25lbnRQcm9wcyxcbiAgYW55XG4+IHtcbiAgcHJpdmF0ZSBtYW5hZ2VyOiBSZXNwb25zaXZpdHlNYW5hZ2VyO1xuICBwcml2YXRlIHJvb3RSZWY6IFJlYWN0LlJlZk9iamVjdDxIVE1MRGl2RWxlbWVudD47XG5cbiAgcHJpdmF0ZSBnZXQgbW9kZWwoKSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMubW9kZWw7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCk6IEJhc2Uge1xuICAgIHJldHVybiB0aGlzLm1vZGVsO1xuICB9XG5cbiAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5yb290UmVmID0gUmVhY3QuY3JlYXRlUmVmKCk7XG4gIH1cblxuICByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICBjb25zdCBpdGVtcyA9IHRoaXMubW9kZWwucmVuZGVyZWRBY3Rpb25zLm1hcCgoaXRlbSkgPT4gPFRhYmJlZE1lbnVJdGVtV3JhcHBlciBpdGVtPXtpdGVtfSBrZXk9e2l0ZW0uaWR9IC8+KTtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiByZWY9e3RoaXMucm9vdFJlZn0gY2xhc3NOYW1lPVwic3ZjLXRhYmJlZC1tZW51XCI+XG4gICAgICAgIHtpdGVtc31cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cblxuICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICBzdXBlci5jb21wb25lbnREaWRNb3VudCgpO1xuICAgIGNvbnN0IGNvbnRhaW5lcjogSFRNTERpdkVsZW1lbnQgPSB0aGlzLnJvb3RSZWYuY3VycmVudDtcbiAgICBpZiAoIWNvbnRhaW5lcikgcmV0dXJuO1xuICAgIHRoaXMubWFuYWdlciA9IG5ldyBSZXNwb25zaXZpdHlNYW5hZ2VyKFxuICAgICAgY29udGFpbmVyLFxuICAgICAgdGhpcy5tb2RlbCxcbiAgICAgIFwiLnN2Yy10YWJiZWQtbWVudS1pdGVtLWNvbnRhaW5lcjpub3QoLnN2LWRvdHMpPi5zdi1hY3Rpb25fX2NvbnRlbnRcIlxuICAgICk7XG4gIH1cbiAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgdGhpcy5tYW5hZ2VyICYmICh0aGlzLm1hbmFnZXIuZGlzcG9zZSgpKTtcbiAgICBzdXBlci5jb21wb25lbnRXaWxsVW5tb3VudCgpO1xuICB9XG59XG5cbmNsYXNzIFRhYmJlZE1lbnVJdGVtV3JhcHBlciBleHRlbmRzIFN1cnZleUVsZW1lbnRCYXNlPFxuICBhbnksXG4gIGFueVxuPiB7XG5cbiAgcHJpdmF0ZSBnZXQgaXRlbSgpIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5pdGVtO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldFN0YXRlRWxlbWVudCgpOiBCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5pdGVtO1xuICB9XG5cbiAgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgbGV0IGNzczogc3RyaW5nID0gXCJzdmMtdGFiYmVkLW1lbnUtaXRlbS1jb250YWluZXJcIjtcbiAgICBpZiAodGhpcy5pdGVtLmNzcykge1xuICAgICAgY3NzICs9IFwiIFwiICsgdGhpcy5pdGVtLmNzcztcbiAgICB9XG4gICAgY3NzICs9ICghdGhpcy5pdGVtLmlzVmlzaWJsZSA/IFwiIHN2LWFjdGlvbi0taGlkZGVuXCIgOiBcIlwiKTtcblxuICAgIGNvbnN0IGNvbXBvbmVudCA9IFJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UuY3JlYXRlRWxlbWVudChcbiAgICAgIHRoaXMuaXRlbS5jb21wb25lbnQgfHwgXCJzdmMtdGFiYmVkLW1lbnUtaXRlbVwiLFxuICAgICAgeyBpdGVtOiB0aGlzLml0ZW0gfVxuICAgICk7XG5cbiAgICByZXR1cm4gKFxuICAgICAgPHNwYW4ga2V5PXt0aGlzLml0ZW0uaWR9IGNsYXNzTmFtZT17Y3NzfT5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdi1hY3Rpb25fX2NvbnRlbnRcIj5cbiAgICAgICAgICB7Y29tcG9uZW50fVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvc3Bhbj5cbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVRhYmJlZE1lbnVJdGVtQ29tcG9uZW50UHJvcHMge1xuICBpdGVtOiBBY3Rpb247XG59XG5leHBvcnQgY2xhc3MgVGFiYmVkTWVudUl0ZW1Db21wb25lbnQgZXh0ZW5kcyBTdXJ2ZXlFbGVtZW50QmFzZTxcbiAgSVRhYmJlZE1lbnVJdGVtQ29tcG9uZW50UHJvcHMsXG4gIGFueVxuPiB7XG4gIGdldCBpdGVtKCk6IEFjdGlvbiB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuaXRlbTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCk6IEJhc2Uge1xuICAgIHJldHVybiB0aGlzLml0ZW07XG4gIH1cblxuICByZW5kZXIoKTogSlNYLkVsZW1lbnQge1xuICAgIGNvbnN0IGl0ZW0gPSB0aGlzLml0ZW07XG4gICAgbGV0IGNsYXNzTmFtZTogc3RyaW5nID0gXCJzdmMtdGFiYmVkLW1lbnUtaXRlbVwiO1xuICAgIGlmIChpdGVtLmFjdGl2ZSkgY2xhc3NOYW1lICs9IFwiIHN2Yy10YWJiZWQtbWVudS1pdGVtLS1zZWxlY3RlZFwiO1xuICAgIGlmIChpdGVtLmVuYWJsZWQgIT09IHVuZGVmaW5lZCAmJiAhaXRlbS5lbmFibGVkKVxuICAgICAgY2xhc3NOYW1lICs9IFwiIHN2Yy10YWJiZWQtbWVudS1pdGVtLS1kaXNhYmxlZFwiO1xuICAgIGxldCB0aXRsZUNsYXNzTmFtZTogc3RyaW5nID1cbiAgICAgIFwic3ZjLXRleHQgc3ZjLXRhYmJlZC1tZW51LWl0ZW1fX3RleHQgc3ZjLXRleHQtLW5vcm1hbFwiO1xuICAgIGlmIChpdGVtLmFjdGl2ZSkgdGl0bGVDbGFzc05hbWUgKz0gXCIgc3ZjLXRleHQtLWJvbGRcIjtcblxuICAgIHJldHVybiAoYXR0YWNoS2V5MmNsaWNrKFxuICAgICAgPGRpdiBjbGFzc05hbWU9e2NsYXNzTmFtZX0gb25DbGljaz17KCkgPT4gaXRlbS5hY3Rpb24oaXRlbSl9PlxuICAgICAgICA8c3BhbiBjbGFzc05hbWU9e3RpdGxlQ2xhc3NOYW1lfT57aXRlbS50aXRsZX08L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICApXG4gICAgKTtcbiAgfVxufVxuXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcbiAgXCJzdmMtdGFiYmVkLW1lbnUtaXRlbVwiLFxuICAocHJvcHMpID0+IHtcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChUYWJiZWRNZW51SXRlbUNvbXBvbmVudCwgcHJvcHMpO1xuICB9XG4pO1xuZXhwb3J0IGRlZmF1bHQgVGFiYmVkTWVudUNvbXBvbmVudDtcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IEJhc2UsIFF1ZXN0aW9uIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQge1xuICBhdHRhY2hLZXkyY2xpY2ssXG4gIFJlYWN0RWxlbWVudEZhY3Rvcnlcbn0gZnJvbSBcInN1cnZleS1yZWFjdC11aVwiO1xuaW1wb3J0IHsgQ3JlYXRvck1vZGVsRWxlbWVudCB9IGZyb20gXCIuLi9Nb2RlbEVsZW1lbnRcIjtcbmltcG9ydCB7IFF1ZXN0aW9uQWRvcm5lclZpZXdNb2RlbCwgdG9nZ2xlSG92ZXJlZCB9IGZyb20gXCJzdXJ2ZXktY3JlYXRvci1jb3JlXCI7XG5pbXBvcnQgeyBSZWFjdERyYWdFdmVudCwgUmVhY3RNb3VzZUV2ZW50IH0gZnJvbSBcIi4uL2V2ZW50c1wiO1xuaW1wb3J0IHsgUXVlc3Rpb25BZG9ybmVyQ29tcG9uZW50UHJvcHMgfSBmcm9tIFwiLi9RdWVzdGlvblwiO1xuXG5leHBvcnQgY2xhc3MgQ2VsbFF1ZXN0aW9uQWRvcm5lckNvbXBvbmVudCBleHRlbmRzIENyZWF0b3JNb2RlbEVsZW1lbnQ8XG4gIFF1ZXN0aW9uQWRvcm5lckNvbXBvbmVudFByb3BzLFxuICBhbnlcbj4ge1xuICBtb2RlbDogUXVlc3Rpb25BZG9ybmVyVmlld01vZGVsO1xuICBwcm90ZWN0ZWQgY3JlYXRlTW9kZWwoKTogdm9pZCB7XG4gICAgdGhpcy5tb2RlbCA9IG5ldyBRdWVzdGlvbkFkb3JuZXJWaWV3TW9kZWwoXG4gICAgICB0aGlzLnByb3BzLmNvbXBvbmVudERhdGEsXG4gICAgICB0aGlzLnByb3BzLnF1ZXN0aW9uLFxuICAgICAgbnVsbFxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFN0YXRlRWxlbWVudCgpOiBCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5tb2RlbDtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0VXBkYXRlZE1vZGVsUHJvcHMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBbXCJxdWVzdGlvblwiLCBcImNvbXBvbmVudERhdGFcIl07XG4gIH1cbiAgcmVuZGVyKCk6IEpTWC5FbGVtZW50IHtcbiAgICBpZiAodGhpcy5tb2RlbC5pc0RyYWdnZWQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiAoXG4gICAgICA8UmVhY3QuRnJhZ21lbnQ+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBkYXRhLXN2LWRyb3AtdGFyZ2V0LXN1cnZleS1lbGVtZW50PXt0aGlzLm1vZGVsLmVsZW1lbnQubmFtZX1cbiAgICAgICAgICBjbGFzc05hbWU9e1wic3ZjLXF1ZXN0aW9uX19hZG9ybmVyXCJ9XG4gICAgICAgID5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17XCIgc3ZjLXF1ZXN0aW9uX19jb250ZW50LS1zZWxlY3RlZC1uby1ib3JkZXIgc3ZjLXF1ZXN0aW9uX19jb250ZW50XCJ9PlxuICAgICAgICAgICAge3RoaXMucHJvcHMuZWxlbWVudH1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L1JlYWN0LkZyYWdtZW50PlxuICAgICk7XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXG4gIFwic3ZjLWNlbGwtcXVlc3Rpb25cIixcbiAgKHByb3BzOiBRdWVzdGlvbkFkb3JuZXJDb21wb25lbnRQcm9wcykgPT4ge1xuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KENlbGxRdWVzdGlvbkFkb3JuZXJDb21wb25lbnQsIHByb3BzKTtcbiAgfVxuKTtcbiIsImltcG9ydCB7IFF1ZXN0aW9uQWRvcm5lclZpZXdNb2RlbCwgdG9nZ2xlSG92ZXJlZCB9IGZyb20gXCJzdXJ2ZXktY3JlYXRvci1jb3JlXCI7XG5pbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBSZWFjdERyYWdFdmVudCwgUmVhY3RNb3VzZUV2ZW50IH0gZnJvbSBcIi4uL2V2ZW50c1wiO1xuaW1wb3J0IHsgQmFzZSwgSXRlbVZhbHVlLCBRdWVzdGlvblNlbGVjdEJhc2UsIFN1cnZleU1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBSZWFjdEVsZW1lbnRGYWN0b3J5LCBSZWFjdFN1cnZleUVsZW1lbnRzV3JhcHBlciB9IGZyb20gXCJzdXJ2ZXktcmVhY3QtdWlcIjtcbmltcG9ydCB7IFF1ZXN0aW9uQWRvcm5lckNvbXBvbmVudFByb3BzIH0gZnJvbSBcIi4vUXVlc3Rpb25cIjtcbmltcG9ydCB7IENyZWF0b3JNb2RlbEVsZW1lbnQgfSBmcm9tIFwiLi4vTW9kZWxFbGVtZW50XCI7XG5pbXBvcnQgeyBhdHRhY2hLZXkyY2xpY2sgfSBmcm9tIFwic3VydmV5LXJlYWN0LXVpXCI7XG5cbmV4cG9ydCBjbGFzcyBDZWxsUXVlc3Rpb25Ecm9wZG93bkFkb3JuZXJDb21wb25lbnQgZXh0ZW5kcyBDcmVhdG9yTW9kZWxFbGVtZW50PFxuICBRdWVzdGlvbkFkb3JuZXJDb21wb25lbnRQcm9wcyxcbiAgYW55XG4+IHtcbiAgbW9kZWw6IFF1ZXN0aW9uQWRvcm5lclZpZXdNb2RlbDtcbiAgcHJvdGVjdGVkIGNyZWF0ZU1vZGVsKCk6IHZvaWQge1xuICAgIHRoaXMubW9kZWwgPSBuZXcgUXVlc3Rpb25BZG9ybmVyVmlld01vZGVsKFxuICAgICAgdGhpcy5wcm9wcy5jb21wb25lbnREYXRhLFxuICAgICAgdGhpcy5wcm9wcy5xdWVzdGlvbixcbiAgICAgIG51bGxcbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCBnZXRVcGRhdGVkTW9kZWxQcm9wcygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIFtcInF1ZXN0aW9uXCIsIFwiY29tcG9uZW50RGF0YVwiXTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCk6IEJhc2Uge1xuICAgIHJldHVybiB0aGlzLm1vZGVsO1xuICB9XG4gIHJlbmRlcigpOiBKU1guRWxlbWVudCB7XG4gICAgaWYgKHRoaXMubW9kZWwuaXNEcmFnZ2VkKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgY29uc3QgcXVlc3Rpb24gPSB0aGlzLnByb3BzLnF1ZXN0aW9uIGFzIFF1ZXN0aW9uU2VsZWN0QmFzZTtcbiAgICBjb25zdCB0ZXh0U3R5bGUgPSAodGhpcy5wcm9wcy5xdWVzdGlvbiBhcyBhbnkpLnRleHRTdHlsZTtcbiAgICByZXR1cm4gKFxuICAgICAgPFJlYWN0LkZyYWdtZW50PlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgZGF0YS1zdi1kcm9wLXRhcmdldC1zdXJ2ZXktZWxlbWVudD17dGhpcy5tb2RlbC5lbGVtZW50Lm5hbWV9XG4gICAgICAgICAgY2xhc3NOYW1lPXtcInN2Yy1xdWVzdGlvbl9fYWRvcm5lclwifVxuICAgICAgICA+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e1wiIHN2Yy1xdWVzdGlvbl9fY29udGVudC0tc2VsZWN0ZWQtbm8tYm9yZGVyIHN2Yy1xdWVzdGlvbl9fY29udGVudFwifT5cbiAgICAgICAgICAgIHt0aGlzLnByb3BzLmVsZW1lbnR9XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLXF1ZXN0aW9uX19kcm9wZG93bi1jaG9pY2VzXCI+XG4gICAgICAgICAgICAgIHtxdWVzdGlvbi52aXNpYmxlQ2hvaWNlcy5tYXAoXG4gICAgICAgICAgICAgICAgKGl0ZW06IEl0ZW1WYWx1ZSwgaW5kZXg6IG51bWJlcikgPT4gKFxuICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJzdmMtcXVlc3Rpb25fX2Ryb3Bkb3duLWNob2ljZVwiXG4gICAgICAgICAgICAgICAgICAgIGtleT17YGVkaXRhYmxlX2Nob2ljZV8ke2luZGV4fWB9XG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIHtSZWFjdFN1cnZleUVsZW1lbnRzV3JhcHBlci53cmFwSXRlbVZhbHVlKHF1ZXN0aW9uLnN1cnZleSBhcyBTdXJ2ZXlNb2RlbCxcbiAgICAgICAgICAgICAgICAgICAgICBSZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICAgICAgICAgICAgICAgICBcInN1cnZleS1yYWRpb2dyb3VwLWl0ZW1cIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcXVlc3Rpb246IHF1ZXN0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBjc3NDbGFzc2VzOiBxdWVzdGlvbi5jc3NDbGFzc2VzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBpc0Rpc3BsYXlNb2RlOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtOiBpdGVtLFxuICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0U3R5bGU6IHRleHRTdHlsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXg6IGluZGV4LFxuICAgICAgICAgICAgICAgICAgICAgICAgICBpc0NoZWNrZWQ6IHF1ZXN0aW9uLnZhbHVlID09PSBpdGVtLnZhbHVlXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICBxdWVzdGlvbixcbiAgICAgICAgICAgICAgICAgICAgICBpdGVtXG4gICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L1JlYWN0LkZyYWdtZW50PlxuICAgICk7XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXG4gIFwic3ZjLWNlbGwtZHJvcGRvd24tcXVlc3Rpb25cIixcbiAgKHByb3BzOiBRdWVzdGlvbkFkb3JuZXJDb21wb25lbnRQcm9wcykgPT4ge1xuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KENlbGxRdWVzdGlvbkRyb3Bkb3duQWRvcm5lckNvbXBvbmVudCwgcHJvcHMpO1xuICB9XG4pO1xuIiwiaW1wb3J0IHsgQmFzZSwgUGFnZU1vZGVsLCBTdXJ2ZXlNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHtcbiAgYXR0YWNoS2V5MmNsaWNrLFxuICBQb3B1cCxcbiAgU3VydmV5QWN0aW9uQmFyLFxuICBSZWFjdEVsZW1lbnRGYWN0b3J5LFxuICBTdXJ2ZXlQYWdlLFxuICBTdmdJY29uXG59IGZyb20gXCJzdXJ2ZXktcmVhY3QtdWlcIjtcbmltcG9ydCB7IENyZWF0b3JNb2RlbEVsZW1lbnQgfSBmcm9tIFwiLi4vTW9kZWxFbGVtZW50XCI7XG5pbXBvcnQge1xuICBDcmVhdG9yQmFzZSxcbiAgUGFnZUFkb3JuZXIsXG4gIFN1cnZleUhlbHBlcixcbiAgdG9nZ2xlSG92ZXJlZFxufSBmcm9tIFwic3VydmV5LWNyZWF0b3ItY29yZVwiO1xuaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgUmVhY3RNb3VzZUV2ZW50IH0gZnJvbSBcIi4uL2V2ZW50c1wiO1xuXG5pbnRlcmZhY2UgSUNyZWF0b3JTdXJ2ZXlQYWdlQ29tcG9uZW50UHJvcHMge1xuICBjcmVhdG9yOiBDcmVhdG9yQmFzZTtcbiAgc3VydmV5OiBTdXJ2ZXlNb2RlbDtcbiAgcGFnZTogUGFnZU1vZGVsO1xufVxuXG5leHBvcnQgY2xhc3MgQ3JlYXRvclN1cnZleVBhZ2VDb21wb25lbnQgZXh0ZW5kcyBDcmVhdG9yTW9kZWxFbGVtZW50PFxuICBJQ3JlYXRvclN1cnZleVBhZ2VDb21wb25lbnRQcm9wcyxcbiAgYW55XG4+IHtcbiAgcHJpdmF0ZSBtb2RlbDogUGFnZUFkb3JuZXI7XG4gIHByaXZhdGUgcm9vdFJlZjogUmVhY3QuUmVmT2JqZWN0PEhUTUxEaXZFbGVtZW50PjtcbiAgY29uc3RydWN0b3IocHJvcHM6IElDcmVhdG9yU3VydmV5UGFnZUNvbXBvbmVudFByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMucm9vdFJlZiA9IFJlYWN0LmNyZWF0ZVJlZigpO1xuICB9XG4gIHByb3RlY3RlZCBjcmVhdGVNb2RlbCgpOiB2b2lkIHtcbiAgICB0aGlzLm1vZGVsID0gbmV3IFBhZ2VBZG9ybmVyKFxuICAgICAgdGhpcy5wcm9wcy5jcmVhdG9yLFxuICAgICAgdGhpcy5wcm9wcy5wYWdlXG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0VXBkYXRlZE1vZGVsUHJvcHMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBbXCJjcmVhdG9yXCIsIFwicGFnZVwiXTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCk6IEJhc2Uge1xuICAgIHJldHVybiB0aGlzLm1vZGVsO1xuICB9XG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIHN1cGVyLmNvbXBvbmVudERpZE1vdW50KCk7XG4gICAgdGhpcy5tb2RlbC5vblBhZ2VTZWxlY3RlZENhbGxiYWNrID0gKCkgPT4ge1xuICAgICAgaWYgKCEhdGhpcy5yb290UmVmLmN1cnJlbnQpIHtcbiAgICAgICAgU3VydmV5SGVscGVyLnNjcm9sbEludG9WaWV3SWZOZWVkZWQodGhpcy5yb290UmVmLmN1cnJlbnQpO1xuICAgICAgfVxuICAgIH07XG4gIH1cbiAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgc3VwZXIuY29tcG9uZW50V2lsbFVubW91bnQoKTtcbiAgICB0aGlzLm1vZGVsLmRpc3Bvc2UoKTtcbiAgfVxuICBwcm90ZWN0ZWQgY2FuUmVuZGVyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICAhIXRoaXMubW9kZWwgJiZcbiAgICAgIHRoaXMubW9kZWwuaXNQYWdlTGl2ZSAmJlxuICAgICAgISF0aGlzLm1vZGVsLnBhZ2UgJiZcbiAgICAgICEhdGhpcy5tb2RlbC5wYWdlLnN1cnZleVxuICAgICk7XG4gIH1cbiAgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgaWYgKCF0aGlzLnByb3BzLnBhZ2UpIHJldHVybiBudWxsO1xuICAgIHJldHVybiAoXG4gICAgICBhdHRhY2hLZXkyY2xpY2soPGRpdlxuICAgICAgICByZWY9e3RoaXMucm9vdFJlZn1cbiAgICAgICAgY2xhc3NOYW1lPXtcInN2Yy1wYWdlX19jb250ZW50IFwiICsgdGhpcy5tb2RlbC5jc3N9XG4gICAgICAgIGlkPXt0aGlzLnByb3BzLnBhZ2UuaWR9XG4gICAgICAgIG9uQ2xpY2s9eyhlKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMubW9kZWwuc2VsZWN0KHRoaXMubW9kZWwsIG5ldyBSZWFjdE1vdXNlRXZlbnQoZSkpO1xuICAgICAgICB9fVxuICAgICAgICBvbk1vdXNlTGVhdmU9eyhlKSA9PiB0aGlzLm1vZGVsLmhvdmVyKGUubmF0aXZlRXZlbnQsIGUuY3VycmVudFRhcmdldCl9XG4gICAgICAgIG9uTW91c2VPdmVyPXsoZSkgPT4gdGhpcy5tb2RlbC5ob3ZlcihlLm5hdGl2ZUV2ZW50LCBlLmN1cnJlbnRUYXJnZXQpfVxuICAgICAgPlxuICAgICAgICB7dGhpcy5yZW5kZXJIZWFkZXIoKX1cbiAgICAgICAge3RoaXMucmVuZGVyQ29udGVudCgpfVxuICAgICAgICB7dGhpcy5yZW5kZXJGb290ZXIoKX1cbiAgICAgIDwvZGl2PilcbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJDb250ZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICByZXR1cm4gKDxTdXJ2ZXlQYWdlIHBhZ2U9e3RoaXMucHJvcHMucGFnZX0gc3VydmV5PXt0aGlzLnByb3BzLnN1cnZleX0gY3JlYXRvcj17dGhpcy5wcm9wcy5jcmVhdG9yfSBjc3M9e3RoaXMubW9kZWwuY3NzfT48L1N1cnZleVBhZ2U+KTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVySGVhZGVyKCk6IEpTWC5FbGVtZW50IHtcbiAgICByZXR1cm4gKDxkaXYgY2xhc3NOYW1lPVwic3ZjLXBhZ2VfX2NvbnRlbnQtYWN0aW9uc1wiPlxuICAgICAgPFN1cnZleUFjdGlvbkJhciBtb2RlbD17dGhpcy5tb2RlbC5hY3Rpb25Db250YWluZXJ9PjwvU3VydmV5QWN0aW9uQmFyPlxuICAgIDwvZGl2Pik7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckZvb3RlcigpOiBKU1guRWxlbWVudCB7XG4gICAgaWYgKCF0aGlzLm1vZGVsLnNob3dBZGRRdWVzdGlvbkJ1dHRvbikgcmV0dXJuIG51bGw7XG4gICAgY29uc3QgcXVlc3Rpb25UeXBlU2VsZWN0b3JNb2RlbCA9IHRoaXMubW9kZWwucXVlc3Rpb25UeXBlU2VsZWN0b3JNb2RlbDtcbiAgICByZXR1cm4gYXR0YWNoS2V5MmNsaWNrKDxkaXZcbiAgICAgIGNsYXNzTmFtZT1cInN2Yy1wYWdlX19hZGQtbmV3LXF1ZXN0aW9uIHN2Yy1idG5cIlxuICAgICAgb25DbGljaz17KGUpID0+IHtcbiAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgdGhpcy5tb2RlbC5hZGROZXdRdWVzdGlvbih0aGlzLm1vZGVsLCBuZXcgUmVhY3RNb3VzZUV2ZW50KGUpKTtcbiAgICAgIH19XG4gICAgICBvbk1vdXNlT3Zlcj17KGUpID0+IHRoaXMubW9kZWwuaG92ZXJTdG9wcGVyKGUubmF0aXZlRXZlbnQsIGUuY3VycmVudFRhcmdldCl9XG4gICAgPlxuICAgICAgPHNwYW4gY2xhc3NOYW1lPVwic3ZjLXRleHQgc3ZjLXRleHQtLW5vcm1hbCBzdmMtdGV4dC0tYm9sZFwiPlxuICAgICAgICB7dGhpcy5tb2RlbC5hZGROZXdRdWVzdGlvblRleHR9XG4gICAgICA8L3NwYW4+XG5cbiAgICAgIHthdHRhY2hLZXkyY2xpY2soPGJ1dHRvblxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgb25DbGljaz17KGUpID0+IHtcbiAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgIHF1ZXN0aW9uVHlwZVNlbGVjdG9yTW9kZWwuYWN0aW9uKCk7XG4gICAgICAgIH19XG4gICAgICAgIGNsYXNzTmFtZT1cInN2Yy1wYWdlX19xdWVzdGlvbi10eXBlLXNlbGVjdG9yXCJcbiAgICAgICAgdGl0bGU9e3RoaXMubW9kZWwuYWRkTmV3UXVlc3Rpb25UZXh0fVxuICAgICAgPlxuICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJzdmMtcGFnZV9fcXVlc3Rpb24tdHlwZS1zZWxlY3Rvci1pY29uXCI+XG4gICAgICAgICAgPFN2Z0ljb25cbiAgICAgICAgICAgIGljb25OYW1lPXtxdWVzdGlvblR5cGVTZWxlY3Rvck1vZGVsLmljb25OYW1lfVxuICAgICAgICAgICAgc2l6ZT17MjR9XG4gICAgICAgICAgICB0aXRsZT17dGhpcy5tb2RlbC5hZGROZXdRdWVzdGlvblRleHR9XG4gICAgICAgICAgPjwvU3ZnSWNvbj5cbiAgICAgICAgPC9zcGFuPlxuICAgICAgICA8UG9wdXAgbW9kZWw9e3F1ZXN0aW9uVHlwZVNlbGVjdG9yTW9kZWwucG9wdXBNb2RlbH0+PC9Qb3B1cD5cbiAgICAgIDwvYnV0dG9uPil9XG4gICAgPC9kaXY+KTtcbiAgfVxufVxuXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcInN2Yy1wYWdlXCIsIChwcm9wcykgPT4ge1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChDcmVhdG9yU3VydmV5UGFnZUNvbXBvbmVudCwgcHJvcHMpO1xufSk7XG4iLCJpbXBvcnQgeyBRdWVzdGlvbkFkb3JuZXJWaWV3TW9kZWwsIHRvZ2dsZUhvdmVyZWQgfSBmcm9tIFwic3VydmV5LWNyZWF0b3ItY29yZVwiO1xuaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgUmVhY3REcmFnRXZlbnQsIFJlYWN0TW91c2VFdmVudCB9IGZyb20gXCIuLi9ldmVudHNcIjtcbmltcG9ydCB7IEJhc2UsIFF1ZXN0aW9uIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQge1xuICBTdXJ2ZXlBY3Rpb25CYXIsXG4gIFJlYWN0RWxlbWVudEZhY3RvcnksXG4gIFN1cnZleUVsZW1lbnRCYXNlLFxuICBTdXJ2ZXlRdWVzdGlvbixcbiAgYXR0YWNoS2V5MmNsaWNrLFxuICBTdmdJY29uLFxuICBQb3B1cFxufSBmcm9tIFwic3VydmV5LXJlYWN0LXVpXCI7XG5pbXBvcnQgeyBRdWVzdGlvbkFkb3JuZXJDb21wb25lbnQsIFF1ZXN0aW9uQWRvcm5lckNvbXBvbmVudFByb3BzIH0gZnJvbSBcIi4vUXVlc3Rpb25cIjtcblxuZXhwb3J0IGNsYXNzIFBhbmVsQWRvcm5lckNvbXBvbmVudCBleHRlbmRzIFF1ZXN0aW9uQWRvcm5lckNvbXBvbmVudCB7XG4gIHJlbmRlckVsZW1lbnRQbGFjZWhvbGRlcigpOiBKU1guRWxlbWVudCB7XG4gICAgaWYgKCF0aGlzLm1vZGVsLmlzRW1wdHlFbGVtZW50KSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLXBhbmVsX19wbGFjZWhvbGRlcl9mcmFtZVwiPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy1wYW5lbF9fcGxhY2Vob2xkZXJcIj5cbiAgICAgICAgICB7dGhpcy5tb2RlbC5wbGFjZWhvbGRlclRleHR9XG4gICAgICAgIDwvZGl2PlxuICAgICAgICB7dGhpcy5tb2RlbC5zaG93QWRkUXVlc3Rpb25CdXR0b24gPyBhdHRhY2hLZXkyY2xpY2soPGRpdlxuICAgICAgICAgIGNsYXNzTmFtZT1cInN2Yy1wYW5lbF9fYWRkLW5ldy1xdWVzdGlvbiBzdmMtYWN0aW9uLWJ1dHRvblwiXG4gICAgICAgICAgb25DbGljaz17KGUpID0+IHtcbiAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICB0aGlzLm1vZGVsLmFkZE5ld1F1ZXN0aW9uKCk7XG4gICAgICAgICAgfX1cbiAgICAgICAgPlxuICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInN2Yy10ZXh0IHN2Yy10ZXh0LS1ub3JtYWwgc3ZjLXRleHQtLWJvbGRcIj5cbiAgICAgICAgICAgIHt0aGlzLm1vZGVsLmFkZE5ld1F1ZXN0aW9uVGV4dH1cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvZGl2PikgOiBudWxsfVxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyRm9vdGVyKCk6IEpTWC5FbGVtZW50IHtcbiAgICByZXR1cm4gKDxSZWFjdC5GcmFnbWVudD5cbiAgICAgIHshdGhpcy5tb2RlbC5pc0VtcHR5RWxlbWVudCAmJiB0aGlzLm1vZGVsLmVsZW1lbnQuaXNQYW5lbCAmJiB0aGlzLm1vZGVsLnNob3dBZGRRdWVzdGlvbkJ1dHRvbiA/IGF0dGFjaEtleTJjbGljayhcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtcGFuZWxfX2FkZC1uZXctcXVlc3Rpb24tY29udGFpbmVyXCI+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3NOYW1lPVwic3ZjLXBhbmVsX19hZGQtbmV3LXF1ZXN0aW9uIHN2Yy1hY3Rpb24tYnV0dG9uXCJcbiAgICAgICAgICAgIG9uQ2xpY2s9eyhlKSA9PiB7XG4gICAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICAgIHRoaXMubW9kZWwuYWRkTmV3UXVlc3Rpb24oKTtcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwic3ZjLXRleHQgc3ZjLXRleHQtLW5vcm1hbCBzdmMtdGV4dC0tYm9sZFwiPlxuICAgICAgICAgICAgICB7dGhpcy5tb2RlbC5hZGROZXdRdWVzdGlvblRleHR9XG4gICAgICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICB7YXR0YWNoS2V5MmNsaWNrKDxidXR0b25cbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgb25DbGljaz17KGUpID0+IHtcbiAgICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgICAgdGhpcy5tb2RlbC5xdWVzdGlvblR5cGVTZWxlY3Rvck1vZGVsLmFjdGlvbigpO1xuICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIGNsYXNzTmFtZT1cInN2Yy1wYW5lbF9fcXVlc3Rpb24tdHlwZS1zZWxlY3RvclwiXG4gICAgICAgICAgICB0aXRsZT17dGhpcy5tb2RlbC5hZGROZXdRdWVzdGlvblRleHR9XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwic3ZjLXBhbmVsX19xdWVzdGlvbi10eXBlLXNlbGVjdG9yLWljb25cIj5cbiAgICAgICAgICAgICAgPFN2Z0ljb25cbiAgICAgICAgICAgICAgICBpY29uTmFtZT17dGhpcy5tb2RlbC5xdWVzdGlvblR5cGVTZWxlY3Rvck1vZGVsLmljb25OYW1lfVxuICAgICAgICAgICAgICAgIHNpemU9ezI0fVxuICAgICAgICAgICAgICA+PC9TdmdJY29uPlxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPFBvcHVwIG1vZGVsPXt0aGlzLm1vZGVsLnF1ZXN0aW9uVHlwZVNlbGVjdG9yTW9kZWwucG9wdXBNb2RlbH0+PC9Qb3B1cD5cbiAgICAgICAgICA8L2J1dHRvbj4pfVxuICAgICAgICA8L2Rpdj4pIDogbnVsbH1cblxuICAgICAge3N1cGVyLnJlbmRlckZvb3RlcigpfVxuICAgIDwvUmVhY3QuRnJhZ21lbnQ+KTtcbiAgfVxufVxuXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcbiAgXCJzdmMtcGFuZWxcIixcbiAgKHByb3BzOiBRdWVzdGlvbkFkb3JuZXJDb21wb25lbnRQcm9wcykgPT4ge1xuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFBhbmVsQWRvcm5lckNvbXBvbmVudCwgcHJvcHMpO1xuICB9XG4pO1xuIiwiaW1wb3J0IHsgUXVlc3Rpb25BZG9ybmVyVmlld01vZGVsLCB0b2dnbGVIb3ZlcmVkIH0gZnJvbSBcInN1cnZleS1jcmVhdG9yLWNvcmVcIjtcbmltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFJlYWN0RHJhZ0V2ZW50LCBSZWFjdE1vdXNlRXZlbnQgfSBmcm9tIFwiLi4vZXZlbnRzXCI7XG5pbXBvcnQgeyBCYXNlLCBRdWVzdGlvbiB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHtcbiAgU3VydmV5QWN0aW9uQmFyLFxuICBSZWFjdEVsZW1lbnRGYWN0b3J5LFxuICBTdXJ2ZXlRdWVzdGlvbixcbiAgYXR0YWNoS2V5MmNsaWNrLFxuICBTdmdJY29uLFxuICBQb3B1cFxufSBmcm9tIFwic3VydmV5LXJlYWN0LXVpXCI7XG5pbXBvcnQgeyBDcmVhdG9yTW9kZWxFbGVtZW50IH0gZnJvbSBcIi4uL01vZGVsRWxlbWVudFwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFF1ZXN0aW9uQWRvcm5lckNvbXBvbmVudFByb3BzIHtcbiAgZWxlbWVudDogSlNYLkVsZW1lbnQ7XG4gIHF1ZXN0aW9uOiBRdWVzdGlvbjtcbiAgY29tcG9uZW50RGF0YTogYW55O1xufVxuXG5leHBvcnQgY2xhc3MgUXVlc3Rpb25BZG9ybmVyQ29tcG9uZW50IGV4dGVuZHMgQ3JlYXRvck1vZGVsRWxlbWVudDxcbiAgUXVlc3Rpb25BZG9ybmVyQ29tcG9uZW50UHJvcHMsXG4gIGFueVxuPiB7XG4gIHByaXZhdGUgbW9kZWxWYWx1ZTogUXVlc3Rpb25BZG9ybmVyVmlld01vZGVsO1xuICBwcm90ZWN0ZWQgcm9vdFJlZjogUmVhY3QuUmVmT2JqZWN0PEhUTUxEaXZFbGVtZW50PjtcblxuICBwcm90ZWN0ZWQgY3JlYXRlTW9kZWwoKTogdm9pZCB7XG4gICAgdGhpcy5tb2RlbFZhbHVlID0gdGhpcy5jcmVhdGVRdWVzdGlvblZpZXdNb2RlbCgpO1xuICB9XG4gIHByb3RlY3RlZCBjcmVhdGVRdWVzdGlvblZpZXdNb2RlbCgpOiBRdWVzdGlvbkFkb3JuZXJWaWV3TW9kZWwge1xuICAgIHJldHVybiBuZXcgUXVlc3Rpb25BZG9ybmVyVmlld01vZGVsKFxuICAgICAgdGhpcy5wcm9wcy5jb21wb25lbnREYXRhLFxuICAgICAgdGhpcy5wcm9wcy5xdWVzdGlvbixcbiAgICAgIG51bGxcbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCBnZXRVcGRhdGVkTW9kZWxQcm9wcygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIFtcInF1ZXN0aW9uXCIsIFwiY29tcG9uZW50RGF0YVwiXTtcbiAgfVxuICBwdWJsaWMgZ2V0IG1vZGVsKCk6IFF1ZXN0aW9uQWRvcm5lclZpZXdNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMubW9kZWxWYWx1ZTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCk6IEJhc2Uge1xuICAgIHJldHVybiB0aGlzLm1vZGVsO1xuICB9XG4gIHByb3RlY3RlZCBjYW5SZW5kZXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHN1cGVyLmNhblJlbmRlcigpICYmICF0aGlzLm1vZGVsLmlzRHJhZ2dlZDtcbiAgfVxuXG4gIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIGNvbnN0IGFsbG93SW50ZXJhY3Rpb25zID0gdGhpcy5tb2RlbC5lbGVtZW50XG4gICAgICAuaXNJbnRlcmFjdGl2ZURlc2lnbkVsZW1lbnQ7XG4gICAgY29uc3QgY29udGVudCA9IHRoaXMucmVuZGVyQ29udGVudChhbGxvd0ludGVyYWN0aW9ucyk7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXZcbiAgICAgICAgcmVmPXt0aGlzLnJvb3RSZWZ9XG4gICAgICAgIGRhdGEtc3YtZHJvcC10YXJnZXQtc3VydmV5LWVsZW1lbnQ9e3RoaXMubW9kZWwuZWxlbWVudC5uYW1lIHx8IG51bGx9XG4gICAgICAgIGNsYXNzTmFtZT17XCJzdmMtcXVlc3Rpb25fX2Fkb3JuZXJcIiArIHRoaXMubW9kZWwucm9vdENzcygpfVxuICAgICAgICBvbk1vdXNlT3V0PXtlID0+IGFsbG93SW50ZXJhY3Rpb25zICYmIHRoaXMubW9kZWwuaG92ZXIoZS5uYXRpdmVFdmVudCwgZS5jdXJyZW50VGFyZ2V0KX1cbiAgICAgICAgb25Nb3VzZU92ZXI9e2UgPT4gYWxsb3dJbnRlcmFjdGlvbnMgJiYgdGhpcy5tb2RlbC5ob3ZlcihlLm5hdGl2ZUV2ZW50LCBlLmN1cnJlbnRUYXJnZXQpfVxuICAgICAgPlxuICAgICAgICB7Y29udGVudH1cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckNvbnRlbnQoYWxsb3dJbnRlcmFjdGlvbnM6IGJvb2xlYW4pOiBKU1guRWxlbWVudCB7XG4gICAgdmFyIGNvbnRlbnQgPSB0aGlzLnJlbmRlckVsZW1lbnRDb250ZW50KCk7XG4gICAgaWYgKCFhbGxvd0ludGVyYWN0aW9ucykgcmV0dXJuIDw+eyBjb250ZW50IH17dGhpcy5yZW5kZXJGb290ZXIoKX08Lz47XG4gICAgcmV0dXJuIGF0dGFjaEtleTJjbGljayhcbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3NOYW1lPXtcInN2Yy1xdWVzdGlvbl9fY29udGVudCBcIiArIHRoaXMubW9kZWwuY3NzKCl9XG4gICAgICAgIG9uQ2xpY2s9eyhlKSA9PiB0aGlzLm1vZGVsLnNlbGVjdCh0aGlzLm1vZGVsLCBuZXcgUmVhY3RNb3VzZUV2ZW50KGUpKX1cbiAgICAgID5cbiAgICAgICAge3RoaXMucmVuZGVySGVhZGVyKCl9XG4gICAgICAgIHtjb250ZW50fVxuICAgICAgICB7dGhpcy5yZW5kZXJGb290ZXIoKX1cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckhlYWRlcigpOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuIFJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UuY3JlYXRlRWxlbWVudChcInN2Yy1xdWVzdGlvbi1oZWFkZXJcIiwgeyBtb2RlbDogdGhpcy5tb2RlbCB9KTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyRm9vdGVyKCk6IEpTWC5FbGVtZW50IHtcbiAgICByZXR1cm4gUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5jcmVhdGVFbGVtZW50KFwic3ZjLXF1ZXN0aW9uLWZvb3RlclwiLCB7IGNsYXNzTmFtZTogXCJzdmMtcXVlc3Rpb25fX2NvbnRlbnQtYWN0aW9uc1wiLCBtb2RlbDogdGhpcy5tb2RlbCB9KTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyRWxlbWVudENvbnRlbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiAoXG4gICAgICA8PlxuICAgICAgICB7dGhpcy5wcm9wcy5lbGVtZW50fVxuICAgICAgICB7dGhpcy5yZW5kZXJFbGVtZW50UGxhY2Vob2xkZXIoKX1cbiAgICAgIDwvPlxuICAgICk7XG4gIH1cbiAgcmVuZGVyRWxlbWVudFBsYWNlaG9sZGVyKCk6IEpTWC5FbGVtZW50IHtcbiAgICBpZiAoIXRoaXMubW9kZWwuaXNFbXB0eUVsZW1lbnQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtcGFuZWxfX3BsYWNlaG9sZGVyX2ZyYW1lXCI+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLXBhbmVsX19wbGFjZWhvbGRlclwiPlxuICAgICAgICAgIHt0aGlzLm1vZGVsLnBsYWNlaG9sZGVyVGV4dH1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59XG5cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFxuICBcInN2Yy1xdWVzdGlvblwiLFxuICAocHJvcHM6IFF1ZXN0aW9uQWRvcm5lckNvbXBvbmVudFByb3BzKSA9PiB7XG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoUXVlc3Rpb25BZG9ybmVyQ29tcG9uZW50LCBwcm9wcyk7XG4gIH1cbik7XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBRdWVzdGlvbkRyb3Bkb3duQWRvcm5lclZpZXdNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY3JlYXRvci1jb3JlXCI7XG5pbXBvcnQgeyBJdGVtVmFsdWUsIFF1ZXN0aW9uRHJvcGRvd25Nb2RlbCwgUXVlc3Rpb25TZWxlY3RCYXNlLCBTdXJ2ZXlNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgUmVhY3RFbGVtZW50RmFjdG9yeSwgUmVhY3RTdXJ2ZXlFbGVtZW50c1dyYXBwZXIgfSBmcm9tIFwic3VydmV5LXJlYWN0LXVpXCI7XG5pbXBvcnQge1xuICBRdWVzdGlvbkFkb3JuZXJDb21wb25lbnQsXG4gIFF1ZXN0aW9uQWRvcm5lckNvbXBvbmVudFByb3BzXG59IGZyb20gXCIuL1F1ZXN0aW9uXCI7XG5pbXBvcnQgeyBBY3Rpb25CdXR0b24gfSBmcm9tIFwiLi4vQWN0aW9uQnV0dG9uXCI7XG5cbmV4cG9ydCBjbGFzcyBRdWVzdGlvbkRyb3Bkb3duQWRvcm5lckNvbXBvbmVudCBleHRlbmRzIFF1ZXN0aW9uQWRvcm5lckNvbXBvbmVudCB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBRdWVzdGlvbkFkb3JuZXJDb21wb25lbnRQcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgfVxuICBwcm90ZWN0ZWQgY3JlYXRlUXVlc3Rpb25WaWV3TW9kZWwoKTogUXVlc3Rpb25Ecm9wZG93bkFkb3JuZXJWaWV3TW9kZWwge1xuICAgIHJldHVybiBuZXcgUXVlc3Rpb25Ecm9wZG93bkFkb3JuZXJWaWV3TW9kZWwoXG4gICAgICB0aGlzLnByb3BzLmNvbXBvbmVudERhdGEsXG4gICAgICB0aGlzLnByb3BzLnF1ZXN0aW9uIGFzIFF1ZXN0aW9uRHJvcGRvd25Nb2RlbCxcbiAgICAgIG51bGxcbiAgICApO1xuICB9XG4gIHB1YmxpYyBnZXQgZHJvcGRvd25Nb2RlbCgpOiBRdWVzdGlvbkRyb3Bkb3duQWRvcm5lclZpZXdNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMubW9kZWwgYXMgUXVlc3Rpb25Ecm9wZG93bkFkb3JuZXJWaWV3TW9kZWw7XG4gIH1cbiAgcHVibGljIGdldCBxdWVzdGlvbigpOiBRdWVzdGlvblNlbGVjdEJhc2Uge1xuICAgIHJldHVybiB0aGlzLmRyb3Bkb3duTW9kZWwucXVlc3Rpb24gYXMgUXVlc3Rpb25TZWxlY3RCYXNlO1xuICB9XG5cbiAgcmVuZGVyRWxlbWVudFBsYWNlaG9sZGVyKCk6IEpTWC5FbGVtZW50IHtcbiAgICBjb25zdCB0ZXh0U3R5bGUgPSAodGhpcy5xdWVzdGlvbiBhcyBhbnkpLnRleHRTdHlsZTtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdlxuICAgICAgICBjbGFzc05hbWU9XCJzdmMtcXVlc3Rpb25fX2Ryb3Bkb3duLWNob2ljZXMtLXdyYXBwZXJcIj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtcXVlc3Rpb25fX2Ryb3Bkb3duLWNob2ljZXNcIj5cbiAgICAgICAgICB7KHRoaXMuZHJvcGRvd25Nb2RlbC5nZXRSZW5kZXJlZEl0ZW1zKCkgfHwgW10pLm1hcChcbiAgICAgICAgICAgIChpdGVtOiBJdGVtVmFsdWUsIGluZGV4OiBudW1iZXIpID0+IChcbiAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17dGhpcy5kcm9wZG93bk1vZGVsLmdldENob2ljZUNzcygpfVxuICAgICAgICAgICAgICAgIGtleT17YGVkaXRhYmxlX2Nob2ljZV8ke2luZGV4fWB9XG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7UmVhY3RTdXJ2ZXlFbGVtZW50c1dyYXBwZXIud3JhcEl0ZW1WYWx1ZSh0aGlzLnF1ZXN0aW9uLnN1cnZleSBhcyBTdXJ2ZXlNb2RlbCxcbiAgICAgICAgICAgICAgICAgIFJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UuY3JlYXRlRWxlbWVudChcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kcm9wZG93bk1vZGVsLml0ZW1Db21wb25lbnQsXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICBxdWVzdGlvbjogdGhpcy5xdWVzdGlvbixcbiAgICAgICAgICAgICAgICAgICAgICBjc3NDbGFzc2VzOiB0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMsXG4gICAgICAgICAgICAgICAgICAgICAgaXNEaXNwbGF5TW9kZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICBpdGVtOiBpdGVtLFxuICAgICAgICAgICAgICAgICAgICAgIHRleHRTdHlsZTogdGV4dFN0eWxlLFxuICAgICAgICAgICAgICAgICAgICAgIGluZGV4OiBpbmRleCxcbiAgICAgICAgICAgICAgICAgICAgICBpc0NoZWNrZWQ6IHRoaXMucXVlc3Rpb24udmFsdWUgPT09IGl0ZW0udmFsdWVcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgIHRoaXMucXVlc3Rpb24sXG4gICAgICAgICAgICAgICAgICBpdGVtXG4gICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICApXG4gICAgICAgICAgKX1cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIHt0aGlzLmRyb3Bkb3duTW9kZWwubmVlZFRvQ29sbGFwc2UgP1xuICAgICAgICAgIDxBY3Rpb25CdXR0b25cbiAgICAgICAgICAgIGNsaWNrPXt0aGlzLmRyb3Bkb3duTW9kZWwuc3dpdGNoQ29sbGFwc2V9XG4gICAgICAgICAgICB0ZXh0PXt0aGlzLmRyb3Bkb3duTW9kZWwuZ2V0QnV0dG9uVGV4dCgpfVxuICAgICAgICAgICAgYWxsb3dCdWJibGU9e3RydWV9XG4gICAgICAgICAgPjwvQWN0aW9uQnV0dG9uPiA6XG4gICAgICAgICAgbnVsbFxuICAgICAgICB9XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59XG5cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFxuICBcInN2Yy1kcm9wZG93bi1xdWVzdGlvblwiLFxuICAocHJvcHM6IFF1ZXN0aW9uQWRvcm5lckNvbXBvbmVudFByb3BzKSA9PiB7XG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoUXVlc3Rpb25Ecm9wZG93bkFkb3JuZXJDb21wb25lbnQsIHByb3BzKTtcbiAgfVxuKTtcbiIsImltcG9ydCB7IFF1ZXN0aW9uQWRvcm5lclZpZXdNb2RlbCwgdG9nZ2xlSG92ZXJlZCB9IGZyb20gXCJzdXJ2ZXktY3JlYXRvci1jb3JlXCI7XG5pbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBSZWFjdERyYWdFdmVudCwgUmVhY3RNb3VzZUV2ZW50IH0gZnJvbSBcIi4uL2V2ZW50c1wiO1xuaW1wb3J0IHsgQmFzZSwgUXVlc3Rpb24gfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7XG4gIFN1cnZleUFjdGlvbkJhcixcbiAgUmVhY3RFbGVtZW50RmFjdG9yeSxcbiAgU3VydmV5RWxlbWVudEJhc2UsXG4gIFN1cnZleVF1ZXN0aW9uLFxuICBhdHRhY2hLZXkyY2xpY2ssXG4gIFN2Z0ljb24sXG4gIFBvcHVwXG59IGZyb20gXCJzdXJ2ZXktcmVhY3QtdWlcIjtcblxuZXhwb3J0IGludGVyZmFjZSBRdWVzdGlvbldyYXBwZXJGb290ZXJQcm9wcyB7XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgbW9kZWw6IFF1ZXN0aW9uQWRvcm5lclZpZXdNb2RlbDtcbn1cbmV4cG9ydCBjbGFzcyBRdWVzdGlvbldyYXBwZXJGb290ZXIgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQ8UXVlc3Rpb25XcmFwcGVyRm9vdGVyUHJvcHMsIGFueT4ge1xuICByZW5kZXIoKTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiAoPGRpdiBjbGFzc05hbWU9e3RoaXMucHJvcHMuY2xhc3NOYW1lfT5cbiAgICAgIDxTdXJ2ZXlBY3Rpb25CYXIgbW9kZWw9e3RoaXMucHJvcHMubW9kZWwuYWN0aW9uQ29udGFpbmVyfSBoYW5kbGVDbGljaz17ZmFsc2V9PjwvU3VydmV5QWN0aW9uQmFyPlxuICAgIDwvZGl2Pik7XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXG4gIFwic3ZjLXF1ZXN0aW9uLWZvb3RlclwiLFxuICAocHJvcHM6IFF1ZXN0aW9uV3JhcHBlckZvb3RlclByb3BzKSA9PiB7XG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoUXVlc3Rpb25XcmFwcGVyRm9vdGVyLCBwcm9wcyk7XG4gIH1cbik7XG5cbiIsImltcG9ydCB7IFF1ZXN0aW9uQWRvcm5lclZpZXdNb2RlbCwgdG9nZ2xlSG92ZXJlZCB9IGZyb20gXCJzdXJ2ZXktY3JlYXRvci1jb3JlXCI7XG5pbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBSZWFjdERyYWdFdmVudCwgUmVhY3RNb3VzZUV2ZW50IH0gZnJvbSBcIi4uL2V2ZW50c1wiO1xuaW1wb3J0IHsgQmFzZSwgUXVlc3Rpb24gfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7XG4gIFN1cnZleUFjdGlvbkJhcixcbiAgUmVhY3RFbGVtZW50RmFjdG9yeSxcbiAgU3VydmV5RWxlbWVudEJhc2UsXG4gIFN1cnZleVF1ZXN0aW9uLFxuICBhdHRhY2hLZXkyY2xpY2ssXG4gIFN2Z0ljb24sXG4gIFBvcHVwXG59IGZyb20gXCJzdXJ2ZXktcmVhY3QtdWlcIjtcblxuZXhwb3J0IGludGVyZmFjZSBRdWVzdGlvbldyYXBwZXJIZWFkZXJQcm9wcyB7XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgbW9kZWw6IFF1ZXN0aW9uQWRvcm5lclZpZXdNb2RlbDtcbn1cblxuZXhwb3J0IGNsYXNzIFF1ZXN0aW9uV3JhcHBlckhlYWRlciBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDxRdWVzdGlvbldyYXBwZXJIZWFkZXJQcm9wcywgYW55PiB7XG4gIHJlbmRlcigpOiBKU1guRWxlbWVudCB7XG4gICAgaWYgKCF0aGlzLnByb3BzLm1vZGVsLmFsbG93RHJhZ2dpbmcpIHJldHVybiBudWxsO1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT17XCJzdmMtcXVlc3Rpb25fX2RyYWctYXJlYVwifVxuICAgICAgICBvblBvaW50ZXJEb3duPXsoZXZlbnQ6IGFueSkgPT5cbiAgICAgICAgICB0aGlzLnByb3BzLm1vZGVsLm9uUG9pbnRlckRvd24oZXZlbnQpXG4gICAgICAgIH1cbiAgICAgID5cbiAgICAgICAgPFN2Z0ljb24gY2xhc3NOYW1lPVwic3ZjLXF1ZXN0aW9uX19kcmFnLWVsZW1lbnRcIiBzaXplPXsyNH0gaWNvbk5hbWU9e1wiaWNvbi1kcmFnLWFyZWEtaW5kaWNhdG9yXzI0eDE2XCJ9PjwvU3ZnSWNvbj5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXG4gIFwic3ZjLXF1ZXN0aW9uLWhlYWRlclwiLFxuICAocHJvcHM6IFF1ZXN0aW9uV3JhcHBlckhlYWRlclByb3BzKSA9PiB7XG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoUXVlc3Rpb25XcmFwcGVySGVhZGVyLCBwcm9wcyk7XG4gIH1cbik7XG4iLCJpbXBvcnQge1xuICBRdWVzdGlvbkltYWdlQWRvcm5lclZpZXdNb2RlbCxcbiAgUXVlc3Rpb25BZG9ybmVyVmlld01vZGVsXG59IGZyb20gXCJzdXJ2ZXktY3JlYXRvci1jb3JlXCI7XG5pbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBhdHRhY2hLZXkyY2xpY2ssIFJlYWN0RWxlbWVudEZhY3RvcnksIFN2Z0ljb24gfSBmcm9tIFwic3VydmV5LXJlYWN0LXVpXCI7XG5pbXBvcnQge1xuICBRdWVzdGlvbkFkb3JuZXJDb21wb25lbnQsXG4gIFF1ZXN0aW9uQWRvcm5lckNvbXBvbmVudFByb3BzXG59IGZyb20gXCIuL1F1ZXN0aW9uXCI7XG5cbmV4cG9ydCBjbGFzcyBRdWVzdGlvbkltYWdlQWRvcm5lckNvbXBvbmVudCBleHRlbmRzIFF1ZXN0aW9uQWRvcm5lckNvbXBvbmVudCB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBRdWVzdGlvbkFkb3JuZXJDb21wb25lbnRQcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLnJvb3RSZWYgPSBSZWFjdC5jcmVhdGVSZWYoKTtcbiAgfVxuICBwcm90ZWN0ZWQgY3JlYXRlUXVlc3Rpb25WaWV3TW9kZWwoKTogUXVlc3Rpb25BZG9ybmVyVmlld01vZGVsIHtcbiAgICByZXR1cm4gbmV3IFF1ZXN0aW9uSW1hZ2VBZG9ybmVyVmlld01vZGVsKFxuICAgICAgdGhpcy5wcm9wcy5jb21wb25lbnREYXRhLFxuICAgICAgdGhpcy5wcm9wcy5xdWVzdGlvbiBhcyBhbnksXG4gICAgICBudWxsLFxuICAgICAgbnVsbFxuICAgICk7XG4gIH1cbiAgcHVibGljIGdldCBpbWFnZU1vZGVsKCk6IFF1ZXN0aW9uSW1hZ2VBZG9ybmVyVmlld01vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5tb2RlbCBhcyBRdWVzdGlvbkltYWdlQWRvcm5lclZpZXdNb2RlbDtcbiAgfVxuICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICBzdXBlci5jb21wb25lbnREaWRNb3VudCgpO1xuICAgIHRoaXMuaW1hZ2VNb2RlbC5xdWVzdGlvblJvb3QgPSB0aGlzLnJvb3RSZWYuY3VycmVudDtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVySGVhZGVyKCk6IEpTWC5FbGVtZW50IHtcbiAgICByZXR1cm4gKDxSZWFjdC5GcmFnbWVudD5cbiAgICAgIDxpbnB1dFxuICAgICAgICB0eXBlPVwiZmlsZVwiXG4gICAgICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiXG4gICAgICAgIHRhYkluZGV4PXstMX1cbiAgICAgICAgYWNjZXB0PVwiaW1hZ2UvKlwiXG4gICAgICAgIGNsYXNzTmFtZT1cInN2Yy1jaG9vc2UtZmlsZS1pbnB1dFwiXG4gICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgcG9zaXRpb246IFwiYWJzb2x1dGVcIixcbiAgICAgICAgICBvcGFjaXR5OiAwLFxuICAgICAgICAgIHdpZHRoOiBcIjFweFwiLFxuICAgICAgICAgIGhlaWdodDogXCIxcHhcIixcbiAgICAgICAgICBvdmVyZmxvdzogXCJoaWRkZW5cIlxuICAgICAgICB9fVxuICAgICAgLz5cblxuICAgICAge3N1cGVyLnJlbmRlckhlYWRlcigpfVxuICAgIDwvUmVhY3QuRnJhZ21lbnQ+KTtcbiAgfVxuICByZW5kZXJFbGVtZW50UGxhY2Vob2xkZXIoKTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy1pbWFnZS1xdWVzdGlvbi1jb250cm9sc1wiPlxuICAgICAgICB7dGhpcy5tb2RlbC5hbGxvd0VkaXQgPyBhdHRhY2hLZXkyY2xpY2soPHNwYW5cbiAgICAgICAgICBjbGFzc05hbWU9XCJzdmMtaW1hZ2UtcXVlc3Rpb24tY29udHJvbHNfX2J1dHRvbiBzdmMtaW1hZ2UtcXVlc3Rpb24tY29udHJvbHNfX2Nob29zZS1maWxlXCJcbiAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB0aGlzLmltYWdlTW9kZWwuY2hvb3NlRmlsZSh0aGlzLmltYWdlTW9kZWwpfVxuICAgICAgICA+XG4gICAgICAgICAgPFN2Z0ljb24gc2l6ZT17MjR9IGljb25OYW1lPXtcImljb24tZmlsZVwifT48L1N2Z0ljb24+XG4gICAgICAgIDwvc3Bhbj4pIDogbnVsbH1cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXG4gIFwic3ZjLWltYWdlLXF1ZXN0aW9uXCIsXG4gIChwcm9wczogUXVlc3Rpb25BZG9ybmVyQ29tcG9uZW50UHJvcHMpID0+IHtcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChRdWVzdGlvbkltYWdlQWRvcm5lckNvbXBvbmVudCwgcHJvcHMpO1xuICB9XG4pO1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgQmFzZSB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgUXVlc3Rpb25SYXRpbmdBZG9ybmVyVmlld01vZGVsIH0gZnJvbSBcInN1cnZleS1jcmVhdG9yLWNvcmVcIjtcbmltcG9ydCB7IGF0dGFjaEtleTJjbGljaywgUmVhY3RFbGVtZW50RmFjdG9yeSwgU3ZnSWNvbiB9IGZyb20gXCJzdXJ2ZXktcmVhY3QtdWlcIjtcbmltcG9ydCB7IFF1ZXN0aW9uQWRvcm5lckNvbXBvbmVudFByb3BzIH0gZnJvbSBcIi4vUXVlc3Rpb25cIjtcbmltcG9ydCB7IENyZWF0b3JNb2RlbEVsZW1lbnQgfSBmcm9tIFwiLi4vTW9kZWxFbGVtZW50XCI7XG5cbmV4cG9ydCBjbGFzcyBRdWVzdGlvblJhdGluZ0Fkb3JuZXJDb21wb25lbnQgZXh0ZW5kcyBDcmVhdG9yTW9kZWxFbGVtZW50PFF1ZXN0aW9uQWRvcm5lckNvbXBvbmVudFByb3BzLCBhbnk+IHtcbiAgcHJpdmF0ZSBtb2RlbFZhbHVlOiBRdWVzdGlvblJhdGluZ0Fkb3JuZXJWaWV3TW9kZWw7XG5cbiAgcHJvdGVjdGVkIGNyZWF0ZU1vZGVsKCk6IHZvaWQge1xuICAgIHRoaXMubW9kZWxWYWx1ZSA9IHRoaXMuY3JlYXRlUXVlc3Rpb25WaWV3TW9kZWwoKTtcbiAgfVxuICBwcm90ZWN0ZWQgY3JlYXRlUXVlc3Rpb25WaWV3TW9kZWwoKTogUXVlc3Rpb25SYXRpbmdBZG9ybmVyVmlld01vZGVsIHtcbiAgICByZXR1cm4gbmV3IFF1ZXN0aW9uUmF0aW5nQWRvcm5lclZpZXdNb2RlbChcbiAgICAgIHRoaXMucHJvcHMuY29tcG9uZW50RGF0YSxcbiAgICAgIHRoaXMucHJvcHMucXVlc3Rpb24gYXMgYW55LFxuICAgICAgbnVsbFxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFVwZGF0ZWRNb2RlbFByb3BzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gW1wicXVlc3Rpb25cIiwgXCJjb21wb25lbnREYXRhXCJdO1xuICB9XG4gIHB1YmxpYyBnZXQgcmF0aW5nTW9kZWwoKTogUXVlc3Rpb25SYXRpbmdBZG9ybmVyVmlld01vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5tb2RlbCBhcyBRdWVzdGlvblJhdGluZ0Fkb3JuZXJWaWV3TW9kZWw7XG4gIH1cbiAgcHVibGljIGdldCBtb2RlbCgpOiBRdWVzdGlvblJhdGluZ0Fkb3JuZXJWaWV3TW9kZWwge1xuICAgIHJldHVybiB0aGlzLm1vZGVsVmFsdWU7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFN0YXRlRWxlbWVudCgpOiBCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5tb2RlbDtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgY29uc3QgbW9kZWwgPSB0aGlzLnJhdGluZ01vZGVsO1xuICAgIHJldHVybiAoPD5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLXJhdGluZy1xdWVzdGlvbi1jb250ZW50XCI+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLXJhdGluZy1xdWVzdGlvbi1jb250cm9scyBzdmMtaXRlbS12YWx1ZS1jb250cm9sc1wiPlxuICAgICAgICAgIHttb2RlbC5hbGxvd1JlbW92ZSA/IGF0dGFjaEtleTJjbGljayg8c3BhblxuICAgICAgICAgICAgY2xhc3NOYW1lPVwic3ZjLWl0ZW0tdmFsdWUtY29udHJvbHNfX2J1dHRvbiBzdmMtaXRlbS12YWx1ZS1jb250cm9sc19fcmVtb3ZlXCJcbiAgICAgICAgICAgIGFyaWEtbGFiZWw9e21vZGVsLnJlbW92ZVRvb2x0aXB9XG4gICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBtb2RlbC5yZW1vdmVJdGVtKG1vZGVsKX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8U3ZnSWNvbiBzaXplPXsxNn0gaWNvbk5hbWU9e1wiaWNvbi1yZW1vdmVfMTZ4MTZcIn0gdGl0bGU9e21vZGVsLnJlbW92ZVRvb2x0aXB9PjwvU3ZnSWNvbj5cbiAgICAgICAgICA8L3NwYW4+KSA6IG51bGx9XG4gICAgICAgICAge21vZGVsLmFsbG93QWRkID8gYXR0YWNoS2V5MmNsaWNrKDxzcGFuXG4gICAgICAgICAgICBjbGFzc05hbWU9XCJzdmMtaXRlbS12YWx1ZS1jb250cm9sc19fYnV0dG9uIHN2Yy1pdGVtLXZhbHVlLWNvbnRyb2xzX19hZGRcIlxuICAgICAgICAgICAgYXJpYS1sYWJlbD17bW9kZWwuYWRkVG9vbHRpcH1cbiAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IG1vZGVsLmFkZEl0ZW0obW9kZWwpfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxTdmdJY29uIHNpemU9ezE2fSBpY29uTmFtZT17XCJpY29uLWFkZF8xNngxNlwifSB0aXRsZT17bW9kZWwuYWRkVG9vbHRpcH0+PC9TdmdJY29uPlxuICAgICAgICAgIDwvc3Bhbj4pIDogbnVsbH1cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIHt0aGlzLnByb3BzLmVsZW1lbnR9XG4gICAgICA8L2Rpdj5cbiAgICA8Lz4pO1xuICB9XG59XG5cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFxuICBcInN2Yy1yYXRpbmctcXVlc3Rpb25cIixcbiAgKHByb3BzOiBRdWVzdGlvbkFkb3JuZXJDb21wb25lbnRQcm9wcykgPT4ge1xuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFF1ZXN0aW9uUmF0aW5nQWRvcm5lckNvbXBvbmVudCwgcHJvcHMpO1xuICB9XG4pO1xuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXG4gIFwic3ZjLXJhdGluZy1xdWVzdGlvbi1jb250ZW50XCIsXG4gIChwcm9wczogUXVlc3Rpb25BZG9ybmVyQ29tcG9uZW50UHJvcHMpID0+IHtcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChRdWVzdGlvblJhdGluZ0Fkb3JuZXJDb21wb25lbnQsIHByb3BzKTtcbiAgfVxuKTtcbiIsImltcG9ydCB7XG4gIFF1ZXN0aW9uQWRvcm5lclZpZXdNb2RlbFxufSBmcm9tIFwic3VydmV5LWNyZWF0b3ItY29yZVwiO1xuaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHtcbiAgUXVlc3Rpb25BZG9ybmVyQ29tcG9uZW50LFxuICBRdWVzdGlvbkFkb3JuZXJDb21wb25lbnRQcm9wc1xufSBmcm9tIFwiLi9RdWVzdGlvblwiO1xuaW1wb3J0IHsgYXR0YWNoS2V5MmNsaWNrLCBSZWFjdEVsZW1lbnRGYWN0b3J5LCBTdmdJY29uIH0gZnJvbSBcInN1cnZleS1yZWFjdC11aVwiO1xuXG5leHBvcnQgY2xhc3MgUXVlc3Rpb25XaWRnZXRBZG9ybmVyQ29tcG9uZW50IGV4dGVuZHMgUXVlc3Rpb25BZG9ybmVyQ29tcG9uZW50IHtcbiAgcHJvdGVjdGVkIGNyZWF0ZVF1ZXN0aW9uVmlld01vZGVsKCk6IFF1ZXN0aW9uQWRvcm5lclZpZXdNb2RlbCB7XG4gICAgcmV0dXJuIG5ldyBRdWVzdGlvbkFkb3JuZXJWaWV3TW9kZWwoXG4gICAgICB0aGlzLnByb3BzLmNvbXBvbmVudERhdGEsXG4gICAgICB0aGlzLnByb3BzLnF1ZXN0aW9uIGFzIGFueSxcbiAgICAgIG51bGxcbiAgICApO1xuICB9XG4gIHB1YmxpYyBnZXQgd2lkZ2V0TW9kZWwoKTogUXVlc3Rpb25BZG9ybmVyVmlld01vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5tb2RlbCBhcyBRdWVzdGlvbkFkb3JuZXJWaWV3TW9kZWw7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckVsZW1lbnRDb250ZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdlxuICAgICAgICBjbGFzc05hbWU9e1wic3ZjLXdpZGdldF9fY29udGVudFwifVxuICAgICAgPlxuICAgICAgICB7dGhpcy5wcm9wcy5lbGVtZW50fVxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxufVxuXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcbiAgXCJzdmMtd2lkZ2V0LXF1ZXN0aW9uXCIsXG4gIChwcm9wczogUXVlc3Rpb25BZG9ybmVyQ29tcG9uZW50UHJvcHMpID0+IHtcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChRdWVzdGlvbldpZGdldEFkb3JuZXJDb21wb25lbnQsIHByb3BzKTtcbiAgfVxuKTtcbiIsImltcG9ydCB7IFJvd1ZpZXdNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY3JlYXRvci1jb3JlXCI7XG5pbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBCYXNlLCBRdWVzdGlvblJvd01vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBSZWFjdEVsZW1lbnRGYWN0b3J5IH0gZnJvbSBcInN1cnZleS1yZWFjdC11aVwiO1xuaW1wb3J0IHsgQ3JlYXRvck1vZGVsRWxlbWVudCB9IGZyb20gXCIuLi9Nb2RlbEVsZW1lbnRcIjtcblxuaW50ZXJmYWNlIFJvd1dyYXBwZXJDb21wb25lbnRQcm9wcyB7XG4gIGVsZW1lbnQ6IEpTWC5FbGVtZW50O1xuICBjb21wb25lbnREYXRhOiBhbnk7XG4gIHJvdzogUXVlc3Rpb25Sb3dNb2RlbDtcbn1cblxuZXhwb3J0IGNsYXNzIFJvd1dyYXBwZXIgZXh0ZW5kcyBDcmVhdG9yTW9kZWxFbGVtZW50PFxuICBSb3dXcmFwcGVyQ29tcG9uZW50UHJvcHMsXG4gIGFueVxuPiB7XG4gIG1vZGVsOiBSb3dWaWV3TW9kZWw7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBSb3dXcmFwcGVyQ29tcG9uZW50UHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gIH1cbiAgcHJvdGVjdGVkIGNyZWF0ZU1vZGVsKCk6IHZvaWQge1xuICAgIHRoaXMubW9kZWwgPSBuZXcgUm93Vmlld01vZGVsKFxuICAgICAgdGhpcy5wcm9wcy5jb21wb25lbnREYXRhLmNyZWF0b3IsXG4gICAgICB0aGlzLnByb3BzLnJvdyxcbiAgICAgIG51bGxcbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCBnZXRVcGRhdGVkTW9kZWxQcm9wcygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIFtcInJvd1wiLCBcImNvbXBvbmVudERhdGFcIl07XG4gIH1cbiAgcHJvdGVjdGVkIGdldFN0YXRlRWxlbWVudCgpOiBCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5tb2RlbDtcbiAgfVxuXG4gIHJlbmRlcigpOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXZcbiAgICAgICAga2V5PXtcInN2Yy1yb3ctXCIgKyB0aGlzLnByb3BzLnJvdy5pZH1cbiAgICAgICAgY2xhc3NOYW1lPXt0aGlzLm1vZGVsLmNzc0NsYXNzZXN9XG4gICAgICA+XG4gICAgICAgIHt0aGlzLnByb3BzLmVsZW1lbnR9XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59XG5cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFxuICBcInN2Yy1yb3dcIixcbiAgKHByb3BzOiBSb3dXcmFwcGVyQ29tcG9uZW50UHJvcHMpID0+IHtcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChSb3dXcmFwcGVyLCBwcm9wcyk7XG4gIH1cbik7XG4iLCJkZWNsYXJlIHZhciBSZWZsZWN0OmFueTtcblxuZXhwb3J0IHZhciBfX2RlY29yYXRlID0gZnVuY3Rpb24oXG4gIGRlY29yYXRvcnM6IGFueSxcbiAgdGFyZ2V0OiBhbnksXG4gIGtleTogYW55LFxuICBkZXNjOiBhbnlcbikge1xuICB2YXIgYyA9IGFyZ3VtZW50cy5sZW5ndGgsXG4gICAgciA9XG4gICAgICBjIDwgM1xuICAgICAgICA/IHRhcmdldFxuICAgICAgICA6IGRlc2MgPT09IG51bGxcbiAgICAgICAgICA/IChkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGtleSkpXG4gICAgICAgICAgOiBkZXNjLFxuICAgIGQ7XG4gIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZSA9PT0gXCJmdW5jdGlvblwiKVxuICAgIHIgPSBSZWZsZWN0LmRlY29yYXRlKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKTtcbiAgZWxzZVxuICAgIGZvciAodmFyIGkgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKVxuICAgICAgaWYgKChkID0gZGVjb3JhdG9yc1tpXSkpXG4gICAgICAgIHIgPSAoYyA8IDMgPyBkKHIpIDogYyA+IDMgPyBkKHRhcmdldCwga2V5LCByKSA6IGQodGFyZ2V0LCBrZXkpKSB8fCByO1xuICByZXR1cm4gYyA+IDMgJiYgciAmJiBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHIpLCByO1xufTtcblxuZXhwb3J0IHZhciBfX2Fzc2lnbiA9XG4gIE9iamVjdFtcImFzc2lnblwiXSB8fFxuICBmdW5jdGlvbih0YXJnZXQpIHtcbiAgICBmb3IgKHZhciBzLCBpID0gMSwgbiA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBuOyBpKyspIHtcbiAgICAgIHMgPSBhcmd1bWVudHNbaV07XG4gICAgICBmb3IgKHZhciBwIGluIHMpXG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkpIHRhcmdldFtwXSA9IHNbcF07XG4gICAgfVxuICAgIHJldHVybiB0YXJnZXQ7XG4gIH07XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2V4dGVuZHModGhpc0NsYXNzLCBiYXNlQ2xhc3MpIHtcbiAgZm9yICh2YXIgcCBpbiBiYXNlQ2xhc3MpXG4gICAgaWYgKGJhc2VDbGFzcy5oYXNPd25Qcm9wZXJ0eShwKSkgdGhpc0NsYXNzW3BdID0gYmFzZUNsYXNzW3BdO1xuICBmdW5jdGlvbiBfXygpIHtcbiAgICB0aGlzLmNvbnN0cnVjdG9yID0gdGhpc0NsYXNzO1xuICB9XG4gIHRoaXNDbGFzcy5wcm90b3R5cGUgPVxuICAgIGJhc2VDbGFzcyA9PT0gbnVsbFxuICAgICAgPyBPYmplY3QuY3JlYXRlKGJhc2VDbGFzcylcbiAgICAgIDogKChfXy5wcm90b3R5cGUgPSBiYXNlQ2xhc3MucHJvdG90eXBlKSwgbmV3IF9fKCkpO1xufVxuXG5leHBvcnQgdmFyIF9fc3ByZWFkQXJyYXlzID0gZnVuY3Rpb24gKCkge1xuICBmb3IgKHZhciBzID0gMCwgaSA9IDAsIGlsID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IGlsOyBpKyspIHMgKz0gYXJndW1lbnRzW2ldLmxlbmd0aDtcbiAgZm9yICh2YXIgciA9IEFycmF5KHMpLCBrID0gMCwgaSA9IDA7IGkgPCBpbDsgaSsrKVxuICAgIGZvciAodmFyIGEgPSBhcmd1bWVudHNbaV0sIGogPSAwLCBqbCA9IGEubGVuZ3RoOyBqIDwgamw7IGorKywgaysrKVxuICAgICAgcltrXSA9IGFbal07XG4gIHJldHVybiByO1xufTtcbiIsImV4cG9ydCBsZXQgVmVyc2lvbjogc3RyaW5nO1xuVmVyc2lvbiA9IGAke3Byb2Nlc3MuZW52LlZFUlNJT059YDtcblxuLy8gaW1wb3J0IFwiQHN1cnZleS9jcmVhdG9yL3N1cnZleS1jcmVhdG9yLWNvcmUuY3NzXCI7XG5cbmV4cG9ydCAqIGZyb20gXCIuLi9TdXJ2ZXlDcmVhdG9yXCI7XG5cbmV4cG9ydCAqIGZyb20gXCIuLi9hZG9ybmVycy9Sb3dcIjtcbmV4cG9ydCAqIGZyb20gXCIuLi9hZG9ybmVycy9RdWVzdGlvblwiO1xuZXhwb3J0ICogZnJvbSBcIi4uL2Fkb3JuZXJzL1F1ZXN0aW9uSGVhZGVyXCI7XG5leHBvcnQgKiBmcm9tIFwiLi4vYWRvcm5lcnMvUXVlc3Rpb25Gb290ZXJcIjtcbmV4cG9ydCAqIGZyb20gXCIuLi9hZG9ybmVycy9RdWVzdGlvbkRyb3Bkb3duXCI7XG5leHBvcnQgKiBmcm9tIFwiLi4vYWRvcm5lcnMvUXVlc3Rpb25JbWFnZVwiO1xuZXhwb3J0ICogZnJvbSBcIi4uL2Fkb3JuZXJzL1F1ZXN0aW9uUmF0aW5nXCI7XG5leHBvcnQgKiBmcm9tIFwiLi4vYWRvcm5lcnMvUXVlc3Rpb25XaWRnZXRcIjtcbmV4cG9ydCAqIGZyb20gXCIuLi9hZG9ybmVycy9DZWxsUXVlc3Rpb25cIjtcbmV4cG9ydCAqIGZyb20gXCIuLi9hZG9ybmVycy9DZWxsUXVlc3Rpb25Ecm9wZG93blwiO1xuZXhwb3J0ICogZnJvbSBcIi4uL2Fkb3JuZXJzL1BhZ2VcIjtcbmV4cG9ydCAqIGZyb20gXCIuLi9hZG9ybmVycy9QYW5lbFwiO1xuXG5leHBvcnQgKiBmcm9tIFwiLi4vTG9nb0ltYWdlXCI7XG5leHBvcnQgKiBmcm9tIFwiLi4vUXVlc3Rpb25MaW5rVmFsdWVcIjtcbmV4cG9ydCAqIGZyb20gXCIuLi9RdWVzdGlvbkVtYmVkZGVkU3VydmV5XCI7XG5leHBvcnQgKiBmcm9tIFwiLi4vUXVlc3Rpb25FZGl0b3JDb250ZW50XCI7XG5leHBvcnQgKiBmcm9tIFwiLi4vSXRlbVZhbHVlV3JhcHBlclwiO1xuZXhwb3J0ICogZnJvbSBcIi4uL0ltYWdlSXRlbVZhbHVlV3JhcHBlclwiO1xuZXhwb3J0ICogZnJvbSBcIi4uL01hdHJpeENlbGxXcmFwcGVyXCI7XG5leHBvcnQgKiBmcm9tIFwiLi4vUmVzdWx0c1wiO1xuZXhwb3J0ICogZnJvbSBcIi4uL3Rvb2xib3gvVG9vbGJveEl0ZW1cIjtcbmV4cG9ydCAqIGZyb20gXCIuLi90b29sYm94L1Rvb2xib3hDYXRlZ29yeVwiO1xuZXhwb3J0ICogZnJvbSBcIi4uL3Rvb2xib3gvVG9vbGJveFwiO1xuZXhwb3J0ICogZnJvbSBcIi4uL3Rvb2xib3gvQWRhcHRpdmVUb29sYm94XCI7XG5leHBvcnQgKiBmcm9tIFwiLi4vVGFiYmVkTWVudVwiO1xuZXhwb3J0ICogZnJvbSBcIi4uL05vdGlmaWVyXCI7XG5leHBvcnQgKiBmcm9tIFwiLi4vTmF2aWdhdGlvblwiO1xuZXhwb3J0ICogZnJvbSBcIi4uL1NpZGVCYXJcIjtcbmV4cG9ydCAqIGZyb20gXCIuLi90YWJzL1RyYW5zbGF0aW9uTGluZVNrZWxldG9uXCI7XG5leHBvcnQgKiBmcm9tIFwiLi4vQWN0aW9uQnV0dG9uXCI7XG5leHBvcnQgKiBmcm9tIFwiLi4vU3RyaW5nRWRpdG9yXCI7XG5cbmV4cG9ydCAqIGZyb20gXCIuLi90YWJzL2xvZ2ljLW9wZXJhdG9yXCI7XG5leHBvcnQgKiBmcm9tIFwiLi4vdGFicy9EZXNpZ25lclwiO1xuZXhwb3J0ICogZnJvbSBcIi4uL3RhYnMvRW1iZWRcIjtcbmV4cG9ydCAqIGZyb20gXCIuLi90YWJzL0pzb25FZGl0b3JBY2VcIjtcbmV4cG9ydCAqIGZyb20gXCIuLi90YWJzL0pzb25FZGl0b3JUZXh0YXJlYVwiO1xuZXhwb3J0ICogZnJvbSBcIi4uL3RhYnMvTG9naWNcIjtcbmV4cG9ydCAqIGZyb20gXCIuLi90YWJzL1ByZXZpZXdcIjtcbmV4cG9ydCAqIGZyb20gXCIuLi90YWJzL1RyYW5zbGF0aW9uXCI7XG5leHBvcnQgKiBmcm9tIFwiLi4vdGFicy9TdXJ2ZXlTaW11bGF0b3JcIjtcblxuZXhwb3J0ICogZnJvbSBcIi4uL2V2ZW50c1wiO1xuZXhwb3J0ICogZnJvbSBcIi4uL09iamVjdFNlbGVjdG9yXCI7XG5leHBvcnQgKiBmcm9tIFwiLi4vUHJvcGVydHlHcmlkXCI7XG5cbmV4cG9ydCB7IGVkaXRvckxvY2FsaXphdGlvbiwgbG9jYWxpemF0aW9uIH0gZnJvbSBcInN1cnZleS1jcmVhdG9yLWNvcmVcIjtcbmV4cG9ydCB7IHNldHRpbmdzIH0gZnJvbSBcInN1cnZleS1jcmVhdG9yLWNvcmVcIjtcbmV4cG9ydCB7IHN2Z0J1bmRsZSB9IGZyb20gXCJzdXJ2ZXktY3JlYXRvci1jb3JlXCI7XG5leHBvcnQgeyBTdXJ2ZXlMb2dpYywgU3VydmV5TG9naWNVSSB9IGZyb20gXCJzdXJ2ZXktY3JlYXRvci1jb3JlXCI7XG5leHBvcnQgeyBTdXJ2ZXlRdWVzdGlvbkVkaXRvckRlZmluaXRpb24gfSBmcm9tIFwic3VydmV5LWNyZWF0b3ItY29yZVwiO1xuZXhwb3J0IHsgSVN1cnZleUNyZWF0b3JPcHRpb25zLCBJUHJvcGVydHlHcmlkRWRpdG9yIH0gZnJvbSBcInN1cnZleS1jcmVhdG9yLWNvcmVcIjtcbmV4cG9ydCB7IFRvb2xib3hUb29sVmlld01vZGVsLCBQcm9wZXJ0eUdyaWRFZGl0b3JDb2xsZWN0aW9uIH0gZnJvbSBcInN1cnZleS1jcmVhdG9yLWNvcmVcIjtcbmV4cG9ydCB7IFN0eWxlc01hbmFnZXIgfSBmcm9tIFwic3VydmV5LWNyZWF0b3ItY29yZVwiO1xuXG5pbXBvcnQgeyBjaGVja0xpYnJhcnlWZXJzaW9uIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5jaGVja0xpYnJhcnlWZXJzaW9uKGAke3Byb2Nlc3MuZW52LlZFUlNJT059YCwgXCJzdXJ2ZXktY3JlYXRvci1yZWFjdFwiKTsiLCJpbXBvcnQgeyBJUG9ydGFibGVEcmFnRXZlbnQsIElQb3J0YWJsZU1vdXNlRXZlbnQgfSBmcm9tIFwic3VydmV5LWNyZWF0b3ItY29yZVwiO1xuXG5leHBvcnQgY2xhc3MgUmVhY3RNb3VzZUV2ZW50IGltcGxlbWVudHMgSVBvcnRhYmxlTW91c2VFdmVudCB7XG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBldmVudDogUmVhY3QuTW91c2VFdmVudDxIVE1MRGl2RWxlbWVudCwgTW91c2VFdmVudD4pIHt9XG4gIHN0b3BQcm9wYWdhdGlvbigpIHtcbiAgICB0aGlzLmV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIC8vdGhpcy5ldmVudC5uYXRpdmVFdmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAvL3RoaXMuZXZlbnQubmF0aXZlRXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG4gIH1cbiAgcHJldmVudERlZmF1bHQoKSB7XG4gICAgdGhpcy5ldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIC8vdGhpcy5ldmVudC5uYXRpdmVFdmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICB9XG4gIGdldCBjYW5jZWxCdWJibGUoKTogYm9vbGVhbiB7XG4gICAgLy9yZXR1cm4gdGhpcy5ldmVudC5jYW5jZWxCdWJibGU7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHNldCBjYW5jZWxCdWJibGUodmFsdWU6IGJvb2xlYW4pIHtcbiAgICAvL3RoaXMuZXZlbnQuY2FuY2VsQnViYmxlID0gdmFsdWU7XG4gIH1cbiAgZ2V0IHRhcmdldCgpOiBFdmVudFRhcmdldCB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLmV2ZW50LnRhcmdldDtcbiAgfVxuICBnZXQgY3VycmVudFRhcmdldCgpOiBFdmVudFRhcmdldCB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLmV2ZW50LmN1cnJlbnRUYXJnZXQ7XG4gIH1cbiAgZ2V0IGNsaWVudFgoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5ldmVudC5jbGllbnRYO1xuICB9XG4gIGdldCBjbGllbnRZKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuZXZlbnQuY2xpZW50WTtcbiAgfVxuICBnZXQgb2Zmc2V0WCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmV2ZW50Lm5hdGl2ZUV2ZW50Lm9mZnNldFg7XG4gIH1cbiAgZ2V0IG9mZnNldFkoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5ldmVudC5uYXRpdmVFdmVudC5vZmZzZXRZO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBSZWFjdERyYWdFdmVudCBleHRlbmRzIFJlYWN0TW91c2VFdmVudFxuICBpbXBsZW1lbnRzIElQb3J0YWJsZURyYWdFdmVudCB7XG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBldmVudDogUmVhY3QuRHJhZ0V2ZW50PEhUTUxEaXZFbGVtZW50Pikge1xuICAgIHN1cGVyKGV2ZW50KTtcbiAgfVxuXG4gIGdldCBkYXRhVHJhbnNmZXIoKTogRGF0YVRyYW5zZmVyIHtcbiAgICByZXR1cm4gdGhpcy5ldmVudC5kYXRhVHJhbnNmZXI7XG4gIH1cbn1cbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IEJhc2UsIFN1cnZleU1vZGVsLCBQYWdlTW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7XG4gIFJlYWN0RWxlbWVudEZhY3RvcnksXG4gIFN1cnZleUVsZW1lbnRCYXNlLFxuICBTdXJ2ZXlIZWFkZXJcbn0gZnJvbSBcInN1cnZleS1yZWFjdC11aVwiO1xuaW1wb3J0IHsgQ3JlYXRvckJhc2UsIFRhYkRlc2lnbmVyVmlld01vZGVsIH0gZnJvbSBcInN1cnZleS1jcmVhdG9yLWNvcmVcIjtcbmltcG9ydCB7IFN1cnZleVBhZ2VOYXZpZ2F0b3IgfSBmcm9tIFwiLi4vUGFnZU5hdmlnYXRvclwiO1xuaW1wb3J0IHsgU3VydmV5TmF2aWdhdGlvbiB9IGZyb20gXCIuLi9OYXZpZ2F0aW9uXCI7XG5cbmludGVyZmFjZSBJVGFiRGVzaWduZXJDb21wb25lbnRQcm9wcyB7XG4gIGRhdGE6IFRhYkRlc2lnbmVyVmlld01vZGVsO1xufVxuXG5leHBvcnQgY2xhc3MgVGFiRGVzaWduZXJDb21wb25lbnQgZXh0ZW5kcyBTdXJ2ZXlFbGVtZW50QmFzZTxJVGFiRGVzaWduZXJDb21wb25lbnRQcm9wcywgYW55PiB7XG4gIHByaXZhdGUgZ2V0IG1vZGVsKCk6IFRhYkRlc2lnbmVyVmlld01vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5kYXRhO1xuICB9XG4gIHByb3RlY3RlZCBnZXQgY3JlYXRvcigpOiBDcmVhdG9yQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMubW9kZWwuY3JlYXRvcjtcbiAgfVxuXG4gIHByaXZhdGUgZGVueVVwZGF0ZSA9ICgpID0+IHtcbiAgICB0aGlzLmRlbnlDb21wb25lbnRVcGRhdGUoKTtcbiAgfVxuXG4gIHByaXZhdGUgYWxsb3dVcGRhdGUgPSAoKSA9PiB7XG4gICAgdGhpcy5hbGxvd0NvbXBvbmVudFVwZGF0ZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBhZGREcmFnRHJvcEV2ZW50cyA9ICgpID0+IHtcbiAgICB0aGlzLmNyZWF0b3Iub25CZWZvcmVEcm9wLmFkZCh0aGlzLmRlbnlVcGRhdGUpO1xuICAgIHRoaXMuY3JlYXRvci5vbkFmdGVyRHJvcC5hZGQodGhpcy5hbGxvd1VwZGF0ZSk7XG4gIH1cblxuICBwcml2YXRlIGNsZWFyRHJhZ0Ryb3BFdmVudHMgPSAoKSA9PiB7XG4gICAgdGhpcy5jcmVhdG9yLm9uQmVmb3JlRHJvcC5yZW1vdmUodGhpcy5kZW55VXBkYXRlKTtcbiAgICB0aGlzLmNyZWF0b3Iub25BZnRlckRyb3AucmVtb3ZlKHRoaXMuYWxsb3dVcGRhdGUpO1xuICB9XG5cbiAgY29tcG9uZW50RGlkTW91bnQoKTogdm9pZCB7XG4gICAgc3VwZXIuY29tcG9uZW50RGlkTW91bnQoKTtcbiAgICB0aGlzLmFkZERyYWdEcm9wRXZlbnRzKCk7XG4gIH1cblxuICBjb21wb25lbnRXaWxsVW5tb3VudCgpOiB2b2lkIHtcbiAgICBzdXBlci5jb21wb25lbnRXaWxsVW5tb3VudCgpO1xuICAgIHRoaXMuY2xlYXJEcmFnRHJvcEV2ZW50cygpO1xuICAgIHN1cGVyLmNvbXBvbmVudFdpbGxVbm1vdW50KCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50cygpOiBBcnJheTxCYXNlPiB7XG4gICAgcmV0dXJuIFt0aGlzLm1vZGVsLCB0aGlzLm1vZGVsLnN1cnZleSwgdGhpcy5tb2RlbC5wYWdlc0NvbnRyb2xsZXJdO1xuICB9XG5cbiAgcHJpdmF0ZSByZW5kZXJlZFBhZ2VzQ2FjaGU6IGFueSA9IHt9O1xuICBwcm90ZWN0ZWQgZ2V0UmVuZGVyZWRQYWdlcygpOiBKU1guRWxlbWVudFtdIHtcbiAgICBpZiAodGhpcy5jaGFuZ2VkU3RhdGVQcm9wTmFtZSAhPT0gXCJwYWdlc1wiKSB7XG4gICAgICB0aGlzLnJlbmRlcmVkUGFnZXNDYWNoZSA9IHt9O1xuICAgIH1cbiAgICBjb25zdCByZW5kZXJlZFBhZ2VzID0gW107XG5cbiAgICBpZiAodGhpcy5jcmVhdG9yLnBhZ2VFZGl0TW9kZSAhPT0gXCJieXBhZ2VcIikge1xuICAgICAgY29uc3QgcGFnZXMgPSB0aGlzLmNyZWF0b3Iuc3VydmV5LnBhZ2VzO1xuXG4gICAgICBwYWdlcy5mb3JFYWNoKChwYWdlLCBpbmRleCkgPT4ge1xuICAgICAgICBsZXQgY2FjaGVkUGFnZSA9IHRoaXMucmVuZGVyZWRQYWdlc0NhY2hlW3BhZ2UuaWRdO1xuICAgICAgICBpZiAoIWNhY2hlZFBhZ2UpIHtcbiAgICAgICAgICBjYWNoZWRQYWdlID0gdGhpcy5jcmVhdGVSZW5kZXJlZFBhZ2UocGFnZSwgaW5kZXgpO1xuICAgICAgICAgIHRoaXMucmVuZGVyZWRQYWdlc0NhY2hlW3BhZ2UuaWRdID0gY2FjaGVkUGFnZTtcbiAgICAgICAgfVxuICAgICAgICByZW5kZXJlZFBhZ2VzLnB1c2goY2FjaGVkUGFnZSk7XG4gICAgICB9KTtcblxuICAgICAgaWYgKHRoaXMubW9kZWwuc2hvd05ld1BhZ2UpIHtcbiAgICAgICAgcmVuZGVyZWRQYWdlcy5wdXNoKHRoaXMucmVuZGVyTmV3UGFnZShcInN2Yy1wYWdlXCIsIHRoaXMubW9kZWwubmV3UGFnZS5pZCArIFwiLWdob3N0LW5ldy1wYWdlXCIpKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgcGFnZTJEaXNwbGF5ID0gdGhpcy5tb2RlbC5wYWdlc0NvbnRyb2xsZXIucGFnZTJEaXNwbGF5O1xuICAgICAgaWYoISFwYWdlMkRpc3BsYXkpIHtcbiAgICAgICAgbGV0IGNhY2hlZFBhZ2UgPSB0aGlzLnJlbmRlcmVkUGFnZXNDYWNoZVtwYWdlMkRpc3BsYXkuaWRdO1xuICAgICAgICBpZiAoIWNhY2hlZFBhZ2UpIHtcbiAgICAgICAgICBjYWNoZWRQYWdlID0gdGhpcy5jcmVhdGVSZW5kZXJlZFBhZ2UocGFnZTJEaXNwbGF5LCAwLCB0cnVlKTtcbiAgICAgICAgICB0aGlzLnJlbmRlcmVkUGFnZXNDYWNoZVtwYWdlMkRpc3BsYXkuaWRdID0gY2FjaGVkUGFnZTtcbiAgICAgICAgfVxuICAgICAgICByZW5kZXJlZFBhZ2VzLnB1c2goY2FjaGVkUGFnZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlbmRlcmVkUGFnZXM7XG4gIH1cbiAgcHJvdGVjdGVkIGNyZWF0ZVJlbmRlcmVkUGFnZShwYWdlOiBQYWdlTW9kZWwsIGluZGV4OiBudW1iZXIsIGlzR2hvc3RQYWdlPzogYm9vbGVhbik6IGFueSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3NOYW1lPXtcInN2Yy1wYWdlXCJ9XG4gICAgICAgIGRhdGEtc3YtZHJvcC10YXJnZXQtcGFnZT17cGFnZS5uYW1lfVxuICAgICAgICBkYXRhLXN2LWRyb3AtdGFyZ2V0LXN1cnZleS1lbGVtZW50PXtpc0dob3N0UGFnZSA/IFwibmV3R2hvc3RQYWdlXCIgOiBwYWdlLm5hbWV9XG4gICAgICAgIGtleT17cGFnZS5pZCArIFwiLVwiICsgaW5kZXh9XG4gICAgICA+XG4gICAgICAgIHt0aGlzLnJlbmRlclBhZ2UocGFnZSl9XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG4gIHByaXZhdGUgcmVuZGVyTmV3UGFnZShjbGFzc05hbWU6IHN0cmluZywga2V5OiBzdHJpbmcgPSBcIlwiKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxSZWFjdC5GcmFnbWVudCBrZXk9e2tleX0+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzc05hbWU9e2NsYXNzTmFtZX1cbiAgICAgICAgICBkYXRhLXN2LWRyb3AtdGFyZ2V0LXN1cnZleS1lbGVtZW50PXtcIm5ld0dob3N0UGFnZVwifVxuICAgICAgICA+XG4gICAgICAgICAgeyEhdGhpcy5tb2RlbC5uZXdQYWdlID8gdGhpcy5yZW5kZXJQYWdlKHRoaXMubW9kZWwubmV3UGFnZSkgOiBudWxsfVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvUmVhY3QuRnJhZ21lbnQ+KTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyUGFnZShwYWdlVjogUGFnZU1vZGVsKTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiBSZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLmNyZWF0ZUVsZW1lbnQoXCJzdmMtcGFnZVwiLCB7IHN1cnZleTogdGhpcy5jcmVhdG9yLnN1cnZleSwgcGFnZTogcGFnZVYsIGNyZWF0b3I6IHRoaXMuY3JlYXRvciB9KTtcbiAgfVxuICByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICBjb25zdCBkZXNpZ25lclRhYkNsYXNzTmFtZSA9IFwic3ZjLXRhYi1kZXNpZ25lciBcIiArIHRoaXMubW9kZWwuZ2V0Um9vdENzcygpO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxSZWFjdC5GcmFnbWVudD5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtZmxleC1jb2x1bW5cIj5cbiAgICAgICAgICB7dGhpcy5tb2RlbC5pc1Rvb2xib3hWaXNpYmxlID8gUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5jcmVhdGVFbGVtZW50KFwic3ZjLWFkYXB0aXZlLXRvb2xib3hcIiwgeyBtb2RlbDogdGhpcy5jcmVhdG9yIH0pIDogbnVsbH1cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtkZXNpZ25lclRhYkNsYXNzTmFtZX0gb25DbGljaz17KCkgPT4gdGhpcy5tb2RlbC5jbGlja0Rlc2lnbmVyKCl9PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLXRhYi1kZXNpZ25lcl9jb250ZW50XCI+XG4gICAgICAgICAgICB7dGhpcy5tb2RlbC5zaG93UGxhY2Vob2xkZXIgPyB0aGlzLnJlbmRlclBsYWNlSG9sZGVyKCkgOiB0aGlzLnJlbmRlclRhYkNvbnRlbnQoKX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L1JlYWN0LkZyYWdtZW50PlxuICAgICk7XG4gIH1cblxuICByZW5kZXJIZWFkZXIoY29uZGl0aW9uOiBib29sZWFuKTogSlNYLkVsZW1lbnQge1xuICAgIGlmICghY29uZGl0aW9uKSByZXR1cm4gbnVsbDtcblxuICAgIGNvbnN0IHN1cnZleTogU3VydmV5TW9kZWwgPSB0aGlzLmNyZWF0b3Iuc3VydmV5O1xuICAgIHJldHVybiAoPFJlYWN0LkZyYWdtZW50PlxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtZGVzaWduZXItaGVhZGVyXCI+XG4gICAgICAgIDxTdXJ2ZXlIZWFkZXIgc3VydmV5PXtzdXJ2ZXl9PjwvU3VydmV5SGVhZGVyPlxuICAgICAgPC9kaXY+XG4gICAgPC9SZWFjdC5GcmFnbWVudD4pO1xuICB9XG4gIHJlbmRlclBsYWNlSG9sZGVyKCk6IEpTWC5FbGVtZW50IHtcbiAgICBjb25zdCBzdXJ2ZXlIZWFkZXIgPSB0aGlzLnJlbmRlckhlYWRlcih0aGlzLmNyZWF0b3IuYWxsb3dFZGl0U3VydmV5VGl0bGUgJiYgdGhpcy5jcmVhdG9yLnNob3dIZWFkZXJJbkVtcHR5U3VydmV5KTtcblxuICAgIHJldHVybiAoPFJlYWN0LkZyYWdtZW50PlxuICAgICAge3N1cnZleUhlYWRlcn1cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLWRlc2lnbmVyX19wbGFjZWhvbGRlci1jb250YWluZXJcIiBkYXRhLXN2LWRyb3AtdGFyZ2V0LXN1cnZleS1lbGVtZW50PXtcIm5ld0dob3N0UGFnZVwifT5cbiAgICAgICAge3RoaXMucmVuZGVyUGxhY2VIb2xkZXJDb250ZW50KCl9XG4gICAgICAgIHt0aGlzLnJlbmRlck5ld1BhZ2UoXCJzdmMtZGVzaWduZXItcGxhY2Vob2xkZXItcGFnZVwiKX1cbiAgICAgIDwvZGl2PlxuICAgIDwvUmVhY3QuRnJhZ21lbnQ+KTtcbiAgfVxuICByZW5kZXJQbGFjZUhvbGRlckNvbnRlbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiA8c3BhbiBjbGFzc05hbWU9XCJzdmMtZGVzaWduZXItcGxhY2Vob2xkZXItdGV4dCBzdmMtdGV4dCBzdmMtdGV4dC0tbm9ybWFsXCI+e3RoaXMubW9kZWwucGxhY2Vob2xkZXJUZXh0fTwvc3Bhbj47XG4gIH1cbiAgcmVuZGVyVGFiQ29udGVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgY29uc3Qgc3VydmV5OiBTdXJ2ZXlNb2RlbCA9IHRoaXMuY3JlYXRvci5zdXJ2ZXk7XG4gICAgY29uc3Qgc3VydmV5SGVhZGVyID0gdGhpcy5yZW5kZXJIZWFkZXIodGhpcy5jcmVhdG9yLmFsbG93RWRpdFN1cnZleVRpdGxlKTtcbiAgICBjb25zdCBzdHlsZTogYW55ID0ge307XG4gICAgaWYoISFzdXJ2ZXkud2lkdGgpIHtcbiAgICAgIHN0eWxlLndpZHRoID0gc3VydmV5LnJlbmRlcmVkV2lkdGg7XG4gICAgICBzdHlsZS5tYXhXaWR0aCA9IHN1cnZleS5yZW5kZXJlZFdpZHRoO1xuICAgIH1cblxuICAgIHJldHVybiAoPFJlYWN0LkZyYWdtZW50PlxuICAgICAgPGRpdiBjbGFzc05hbWU9e3RoaXMubW9kZWwuZ2V0RGVzaWduZXJDc3MoKX0gc3R5bGU9e3N0eWxlfT5cbiAgICAgICAge3N1cnZleUhlYWRlcn1cbiAgICAgICAgPFN1cnZleU5hdmlnYXRpb24gc3VydmV5PXtzdXJ2ZXl9IGxvY2F0aW9uPVwidG9wXCIgLz5cbiAgICAgICAge3RoaXMuZ2V0UmVuZGVyZWRQYWdlcygpfVxuICAgICAgICA8U3VydmV5TmF2aWdhdGlvblxuICAgICAgICAgIHN1cnZleT17c3VydmV5fVxuICAgICAgICAgIGxvY2F0aW9uPVwiYm90dG9tXCJcbiAgICAgICAgICBjc3M9e3N1cnZleS5jc3N9XG4gICAgICAgIC8+XG4gICAgICA8L2Rpdj5cbiAgICAgIHt0aGlzLmNyZWF0b3Iuc2hvd1BhZ2VOYXZpZ2F0b3IgP1xuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy10YWItZGVzaWduZXJfX3BhZ2UtbmF2aWdhdG9yXCI+PFN1cnZleVBhZ2VOYXZpZ2F0b3JcbiAgICAgICAgICBwYWdlc0NvbnRyb2xsZXI9e3RoaXMubW9kZWwucGFnZXNDb250cm9sbGVyfSBwYWdlRWRpdE1vZGU9e3RoaXMubW9kZWwuY3JlYXRvci5wYWdlRWRpdE1vZGV9XG4gICAgICAgID48L1N1cnZleVBhZ2VOYXZpZ2F0b3I+PC9kaXY+XG4gICAgICAgIDogbnVsbFxuICAgICAgfVxuICAgIDwvUmVhY3QuRnJhZ21lbnQ+KTtcbiAgfVxufVxuXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcInN2Yy10YWItZGVzaWduZXJcIiwgKHByb3BzKSA9PiB7XG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFxuICAgIFRhYkRlc2lnbmVyQ29tcG9uZW50LFxuICAgIHByb3BzIGFzIElUYWJEZXNpZ25lckNvbXBvbmVudFByb3BzXG4gICk7XG59KTtcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IEJhc2UgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7XG4gIFJlYWN0RWxlbWVudEZhY3RvcnksXG4gIFN1cnZleSxcbiAgU3VydmV5RWxlbWVudEJhc2Vcbn0gZnJvbSBcInN1cnZleS1yZWFjdC11aVwiO1xuaW1wb3J0IHsgRW1iZWRNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY3JlYXRvci1jb3JlXCI7XG5cbmludGVyZmFjZSBJVGFiRW1iZWRDb21wb25lbnRQcm9wcyB7XG4gIGRhdGE6IEVtYmVkTW9kZWw7XG59XG5cbmV4cG9ydCBjbGFzcyBUYWJFbWJlZENvbXBvbmVudCBleHRlbmRzIFN1cnZleUVsZW1lbnRCYXNlPFxuICBJVGFiRW1iZWRDb21wb25lbnRQcm9wcyxcbiAgYW55XG4+IHtcbiAgcHJpdmF0ZSBnZXQgbW9kZWwoKTogRW1iZWRNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuZGF0YTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCk6IEJhc2Uge1xuICAgIHJldHVybiB0aGlzLm1vZGVsO1xuICB9XG4gIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy1jcmVhdG9yLXRhYl9fY29udGVudCBzdmMtZW1iZWQtdGFiX19jb250ZW50XCI+XG4gICAgICAgIHt0aGlzLm1vZGVsLnN1cnZleSA/IDxTdXJ2ZXkgbW9kZWw9e3RoaXMubW9kZWwuc3VydmV5fT48L1N1cnZleT4gOiBudWxsfVxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxufVxuXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcbiAgXCJzdmMtdGFiLWVtYmVkXCIsXG4gIChwcm9wczogSVRhYkVtYmVkQ29tcG9uZW50UHJvcHMpID0+IHtcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChUYWJFbWJlZENvbXBvbmVudCwgcHJvcHMpO1xuICB9XG4pO1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgQmFzZSB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgUmVhY3RFbGVtZW50RmFjdG9yeSwgU3VydmV5RWxlbWVudEJhc2UgfSBmcm9tIFwic3VydmV5LXJlYWN0LXVpXCI7XG5pbXBvcnQgeyBBY2VKc29uRWRpdG9yTW9kZWwgfSBmcm9tIFwic3VydmV5LWNyZWF0b3ItY29yZVwiO1xuXG5pbnRlcmZhY2UgSVRhYkpzb25FZGl0b3JBY2VDb21wb25lbnRQcm9wcyB7XG4gIGRhdGE6IEFjZUpzb25FZGl0b3JNb2RlbDtcbn1cblxuZXhwb3J0IGNsYXNzIFRhYkpzb25FZGl0b3JBY2VDb21wb25lbnQgZXh0ZW5kcyBTdXJ2ZXlFbGVtZW50QmFzZTxcbiAgSVRhYkpzb25FZGl0b3JBY2VDb21wb25lbnRQcm9wcyxcbiAgYW55XG4+IHtcbiAgcHJpdmF0ZSBhY2VFZGl0b3JyUmVmOiBSZWFjdC5SZWZPYmplY3Q8SFRNTERpdkVsZW1lbnQ+O1xuICBjb25zdHJ1Y3Rvcihwcm9wczogSVRhYkpzb25FZGl0b3JBY2VDb21wb25lbnRQcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLmFjZUVkaXRvcnJSZWYgPSBSZWFjdC5jcmVhdGVSZWYoKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCk6IEJhc2Uge1xuICAgIHJldHVybiB0aGlzLm1vZGVsO1xuICB9XG4gIHByaXZhdGUgZ2V0IG1vZGVsKCk6IEFjZUpzb25FZGl0b3JNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuZGF0YTtcbiAgfVxuICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICB0aGlzLm1vZGVsLmluaXQoYWNlLmVkaXQodGhpcy5hY2VFZGl0b3JyUmVmLmN1cnJlbnQgYXMgSFRNTEVsZW1lbnQpKTtcbiAgfVxuICByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtY3JlYXRvci10YWJfX2NvbnRlbnRcIj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtanNvbi1lZGl0b3ItdGFiX19jb250ZW50XCI+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3NOYW1lPVwic3ZjLWpzb24tZWRpdG9yLXRhYl9fYWNlLWVkaXRvclwiXG4gICAgICAgICAgICByZWY9e3RoaXMuYWNlRWRpdG9yclJlZn1cbiAgICAgICAgICA+PC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxufVxuXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcbiAgXCJzdmMtdGFiLWpzb24tZWRpdG9yLWFjZVwiLFxuICAocHJvcHM6IElUYWJKc29uRWRpdG9yQWNlQ29tcG9uZW50UHJvcHMpID0+IHtcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChUYWJKc29uRWRpdG9yQWNlQ29tcG9uZW50LCBwcm9wcyk7XG4gIH1cbik7XG4iLCJpbXBvcnQgUmVhY3QsIHsgQ2hhbmdlRXZlbnQgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IEJhc2UgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFJlYWN0RWxlbWVudEZhY3RvcnksIFN1cnZleUVsZW1lbnRCYXNlIH0gZnJvbSBcInN1cnZleS1yZWFjdC11aVwiO1xuaW1wb3J0IHsgVGV4dGFyZWFKc29uRWRpdG9yTW9kZWwgfSBmcm9tIFwic3VydmV5LWNyZWF0b3ItY29yZVwiO1xuXG5pbnRlcmZhY2UgSVRhYkpzb25FZGl0b3JUZXh0YXJlYUNvbXBvbmVudFByb3BzIHtcbiAgZGF0YTogVGV4dGFyZWFKc29uRWRpdG9yTW9kZWw7XG59XG5cbmV4cG9ydCBjbGFzcyBUYWJKc29uRWRpdG9yVGV4dGFyZWFDb21wb25lbnQgZXh0ZW5kcyBTdXJ2ZXlFbGVtZW50QmFzZTxcbiAgSVRhYkpzb25FZGl0b3JUZXh0YXJlYUNvbXBvbmVudFByb3BzLFxuICBhbnlcbj4ge1xuICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLm1vZGVsLmNhblNob3dFcnJvcnMgPSBmYWxzZTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCk6IEJhc2Uge1xuICAgIHJldHVybiB0aGlzLm1vZGVsO1xuICB9XG4gIHByaXZhdGUgZ2V0IG1vZGVsKCk6IFRleHRhcmVhSnNvbkVkaXRvck1vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5kYXRhO1xuICB9XG4gIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIGNvbnN0IGVycm9yczogSlNYLkVsZW1lbnRbXSA9IFtdO1xuICAgIHZhciBrZXkgPSAxO1xuICAgIGNvbnN0IHVzZXJGcmllbmRseUVycm9yczogYW55W10gPSB0aGlzLm1vZGVsLnVzZXJGcmllbmRseUVycm9ycztcbiAgICBmb3IgKGxldCBpOiBudW1iZXIgPSAwOyBpIDwgdXNlckZyaWVuZGx5RXJyb3JzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBlcnJvcnMucHVzaCg8c3BhbiBrZXk9e2tleX0+PGI+RXJyb3I6IDwvYj48L3NwYW4+KTtcbiAgICAgIGtleSsrO1xuICAgICAgZXJyb3JzLnB1c2goPHNwYW4ga2V5PXtrZXl9Pnt1c2VyRnJpZW5kbHlFcnJvcnNbaV19PC9zcGFuPik7XG4gICAgICBrZXkrKztcbiAgICB9XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLWNyZWF0b3ItdGFiX19jb250ZW50XCI+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLWpzb24tZWRpdG9yLXRhYl9fY29udGVudFwiPlxuICAgICAgICAgIDx0ZXh0YXJlYVxuICAgICAgICAgICAgY2xhc3NOYW1lPVwic3ZjLWpzb24tZWRpdG9yLXRhYl9fY29udGVudC1hcmVhXCJcbiAgICAgICAgICAgIHZhbHVlPXt0aGlzLm1vZGVsLnRleHR9XG4gICAgICAgICAgICBvbkNoYW5nZT17KGU6IENoYW5nZUV2ZW50PEhUTUxUZXh0QXJlYUVsZW1lbnQ+KSA9PlxuICAgICAgICAgICAgICAodGhpcy5tb2RlbC50ZXh0ID0gZS50YXJnZXQudmFsdWUpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvbktleURvd249eyhlKSA9PiB0aGlzLm1vZGVsLmNoZWNrS2V5KGUsIGUpfVxuICAgICAgICAgICAgZGlzYWJsZWQ9e3RoaXMubW9kZWwucmVhZE9ubHl9XG4gICAgICAgICAgICBhcmlhLWxhYmVsPXt0aGlzLm1vZGVsLmFyaWFMYWJlbH1cbiAgICAgICAgICA+PC90ZXh0YXJlYT5cbiAgICAgICAgICB7ZXJyb3JzLmxlbmd0aCA+IDAgJiZcbiAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzTmFtZT1cInN2Yy1qc29uLWVkaXRvci10YWJfX2VycnJvc19idXR0b25cIiBvbkNsaWNrPXsoKSA9PiB0aGlzLm1vZGVsLnRvZ2dsZUVycm9ycygpfT5cbiAgICAgICAgICAgICAge3RoaXMubW9kZWwuZXJyb3JCdXR0b25UZXh0fVxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgfVxuICAgICAgICAgIHt0aGlzLm1vZGVsLmNhblNob3dFcnJvcnMgJiYgPGRpdiBjbGFzc05hbWU9XCJzdmMtanNvbi1lZGl0b3ItdGFiX19jb250ZW50LWVycm9yc1wiPntlcnJvcnN9PC9kaXY+XG4gICAgICAgICAgfVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXG4gIFwic3ZjLXRhYi1qc29uLWVkaXRvci10ZXh0YXJlYVwiLFxuICAocHJvcHM6IElUYWJKc29uRWRpdG9yVGV4dGFyZWFDb21wb25lbnRQcm9wcykgPT4ge1xuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFRhYkpzb25FZGl0b3JUZXh0YXJlYUNvbXBvbmVudCwgcHJvcHMpO1xuICB9XG4pO1xuIiwiaW1wb3J0IFJlYWN0LCB7IEZyYWdtZW50IH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBBY3Rpb24sIEJhc2UgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFJlYWN0RWxlbWVudEZhY3RvcnksIFN1cnZleUVsZW1lbnRCYXNlLCBTdXJ2ZXksIGF0dGFjaEtleTJjbGljayB9IGZyb20gXCJzdXJ2ZXktcmVhY3QtdWlcIjtcbmltcG9ydCB7IFN1cnZleUxvZ2ljVUkgfSBmcm9tIFwic3VydmV5LWNyZWF0b3ItY29yZVwiO1xuXG5leHBvcnQgY2xhc3MgVGFiTG9naWNBZGRCdXR0b25Db21wb25lbnQgZXh0ZW5kcyBTdXJ2ZXlFbGVtZW50QmFzZTxhbnksIGFueT4ge1xuICBwcml2YXRlIGdldCBtb2RlbCgpOiBBY3Rpb24ge1xuICAgIHJldHVybiB0aGlzLnByb3BzLmJ1dHRvbjtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCk6IEJhc2Uge1xuICAgIHJldHVybiB0aGlzLm1vZGVsO1xuICB9XG5cbiAgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgY29uc3QgYnV0dG9uQ2xhc3NOYW1lID0gXCJzdmMtbG9naWMtdGFiX19jb250ZW50LWFjdGlvbiBzdmMtYnRuXCIgKyAoKHRoaXMubW9kZWwuZW5hYmxlZCAhPT0gdW5kZWZpbmVkICYmICF0aGlzLm1vZGVsLmVuYWJsZWQpID8gXCIgc3ZjLWxvZ2ljLXRhYl9fY29udGVudC1hY3Rpb24tLWRpc2FibGVkXCIgOiBcIlwiKTtcbiAgICByZXR1cm4gYXR0YWNoS2V5MmNsaWNrKDxkaXZcbiAgICAgIHJvbGU9XCJidXR0b25cIlxuICAgICAgb25DbGljaz17KGUpID0+IHtcbiAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgdGhpcy5tb2RlbC5hY3Rpb24oKTtcbiAgICAgIH19XG4gICAgICBjbGFzc05hbWU9e2J1dHRvbkNsYXNzTmFtZX1cbiAgICAgIHRpdGxlPXt0aGlzLm1vZGVsLnRpdGxlfVxuICAgID5cbiAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInN2Yy10ZXh0IHN2Yy10ZXh0LS1ub3JtYWwgc3ZjLXRleHQtLWJvbGRcIj5cbiAgICAgICAge3RoaXMubW9kZWwudGl0bGV9XG4gICAgICA8L3NwYW4+XG4gICAgPC9kaXY+KTtcbiAgfVxufVxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXCJzdmMtdGFiLWxvZ2ljLWFkZC1idXR0b25cIiwgKHByb3BzKSA9PiB7XG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFRhYkxvZ2ljQWRkQnV0dG9uQ29tcG9uZW50LCBwcm9wcyk7XG59KTtcblxuZXhwb3J0IGNsYXNzIFRhYkxvZ2ljQ29tcG9uZW50IGV4dGVuZHMgU3VydmV5RWxlbWVudEJhc2U8YW55LCBhbnk+IHtcbiAgcHJpdmF0ZSBnZXQgbW9kZWwoKTogU3VydmV5TG9naWNVSSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuZGF0YTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCk6IEJhc2Uge1xuICAgIHJldHVybiB0aGlzLm1vZGVsO1xuICB9XG5cbiAgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgdmFyIGxvZ2ljID0gdGhpcy5tb2RlbDtcbiAgICB2YXIgcm9vdENsYXNzID0gXCJzdmMtY3JlYXRvci10YWJfX2NvbnRlbnRcIjtcbiAgICB2YXIgY29udGVudCA9IHRoaXMucmVuZGVyVmlld0NvbnRlbnQoKTtcbiAgICByZXR1cm4gPGRpdiBjbGFzc05hbWU9e3Jvb3RDbGFzc30+e2NvbnRlbnR9PC9kaXY+O1xuICB9XG4gIHByaXZhdGUgcmVuZGVyVmlld0NvbnRlbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIGNvbnN0IGxvZ2ljVGFiQ2xhc3NOYW1lID0gXCJzdmMtcGx1Z2luLXRhYl9fY29udGVudCBzdmMtbG9naWMtdGFiX19jb250ZW50IFwiICsgKHRoaXMubW9kZWwuaGFzSXRlbXMgPyBcIlwiIDogXCJzdmMtbG9naWMtdGFiX19lbXB0eVwiKTtcbiAgICBjb25zdCBhZGRMb2dpYyA9ICF0aGlzLm1vZGVsLnJlYWRPbmx5ID8gPFRhYkxvZ2ljQWRkQnV0dG9uQ29tcG9uZW50IGJ1dHRvbj17dGhpcy5tb2RlbC5hZGROZXdCdXR0b259IC8+IDogdW5kZWZpbmVkO1xuICAgIHJldHVybiAoXG4gICAgICA8RnJhZ21lbnQ+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtsb2dpY1RhYkNsYXNzTmFtZX0+XG4gICAgICAgICAgPFN1cnZleSBtb2RlbD17dGhpcy5tb2RlbC5pdGVtc1N1cnZleX0+PC9TdXJ2ZXk+XG4gICAgICAgICAge3RoaXMubW9kZWwuaGFzSXRlbXMgPyBudWxsIDogKFxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtbG9naWMtdGFiX19jb250ZW50LWVtcHR5XCIgPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJzdmMtdGV4dFwiPnt0aGlzLm1vZGVsLmVtcHR5VGFiUGxhY2VIb2xkZXJ9PC9zcGFuPlxuICAgICAgICAgICAgPC9kaXY+KX1cbiAgICAgICAgICB7YWRkTG9naWN9XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9GcmFnbWVudD5cbiAgICApO1xuICB9XG59XG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcInN2Yy10YWItbG9naWNcIiwgKHByb3BzKSA9PiB7XG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFRhYkxvZ2ljQ29tcG9uZW50LCBwcm9wcyk7XG59KTtcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IEFjdGlvbiwgQmFzZSB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHtcbiAgU3VydmV5QWN0aW9uQmFyLFxuICBSZWFjdEVsZW1lbnRGYWN0b3J5LFxuICBTdXJ2ZXlFbGVtZW50QmFzZSxcbiAgYXR0YWNoS2V5MmNsaWNrXG59IGZyb20gXCJzdXJ2ZXktcmVhY3QtdWlcIjtcbmltcG9ydCB7IFRlc3RTdXJ2ZXlUYWJWaWV3TW9kZWwgfSBmcm9tIFwic3VydmV5LWNyZWF0b3ItY29yZVwiO1xuaW1wb3J0IHsgU3VydmV5U2ltdWxhdG9yIH0gZnJvbSBcIi4vU3VydmV5U2ltdWxhdG9yXCI7XG5pbXBvcnQgeyBTdXJ2ZXlSZXN1bHRzIH0gZnJvbSBcIi4uL1Jlc3VsdHNcIjtcblxuZXhwb3J0IGNsYXNzIFRhYlByZXZpZXdUZXN0U3VydmV5QWdhaW5Db21wb25lbnQgZXh0ZW5kcyBTdXJ2ZXlFbGVtZW50QmFzZTxhbnksIGFueT4ge1xuICBwcml2YXRlIGdldCBtb2RlbCgpOiBBY3Rpb24ge1xuICAgIHJldHVybiB0aGlzLnByb3BzLmJ1dHRvbjtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCk6IEJhc2Uge1xuICAgIHJldHVybiB0aGlzLm1vZGVsO1xuICB9XG5cbiAgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgY29uc3QgYnV0dG9uQ2xhc3NOYW1lID0gXCJzdmMtcHJldmlld19fdGVzdC1hZ2FpbiBzdmMtYnRuXCI7XG4gICAgcmV0dXJuIGF0dGFjaEtleTJjbGljayg8ZGl2XG4gICAgICByb2xlPVwiYnV0dG9uXCJcbiAgICAgIG9uQ2xpY2s9eyhlKSA9PiB7XG4gICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIHRoaXMubW9kZWwuYWN0aW9uKCk7XG4gICAgICB9fVxuICAgICAgY2xhc3NOYW1lPXtidXR0b25DbGFzc05hbWV9XG4gICAgICB0aXRsZT17dGhpcy5tb2RlbC50aXRsZX1cbiAgICA+XG4gICAgICA8c3BhbiBjbGFzc05hbWU9XCJzdmMtdGV4dCBzdmMtdGV4dC0tbm9ybWFsIHN2Yy10ZXh0LS1ib2xkXCI+XG4gICAgICAgIHt0aGlzLm1vZGVsLnRpdGxlfVxuICAgICAgPC9zcGFuPlxuICAgIDwvZGl2Pik7XG4gIH1cbn1cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFwic3ZjLXRhYi1wcmV2aWV3LXRlc3QtYWdhaW5cIiwgKHByb3BzKSA9PiB7XG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFRhYlByZXZpZXdUZXN0U3VydmV5QWdhaW5Db21wb25lbnQsIHByb3BzKTtcbn0pO1xuXG5leHBvcnQgY2xhc3MgVGFiUHJldmlld1N1cnZleUNvbXBvbmVudCBleHRlbmRzIFN1cnZleUVsZW1lbnRCYXNlPGFueSwgYW55PiB7XG4gIHByaXZhdGUgZ2V0IG1vZGVsKCk6IFRlc3RTdXJ2ZXlUYWJWaWV3TW9kZWwge1xuICAgIHJldHVybiB0aGlzLnByb3BzLmRhdGE7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFN0YXRlRWxlbWVudCgpOiBCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5tb2RlbDtcbiAgfVxuXG4gIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIGNvbnN0IHRhYkNvbnRlbnRDbGFzc05hbWUgPSBcInN2Yy1jcmVhdG9yLXRhYl9fY29udGVudCBzdmMtdGVzdC10YWJfX2NvbnRlbnRcIiArICh0aGlzLm1vZGVsLmlzUGFnZVRvb2xiYXJWaXNpYmxlID8gXCIgc3ZjLWNyZWF0b3ItdGFiX19jb250ZW50LS13aXRoLXRvb2xiYXJcIiA6IFwiXCIpO1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT17dGFiQ29udGVudENsYXNzTmFtZX0+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLXBsdWdpbi10YWJfX2NvbnRlbnRcIj5cbiAgICAgICAgICA8U3VydmV5U2ltdWxhdG9yIG1vZGVsPXt0aGlzLm1vZGVsLnNpbXVsYXRvcn0+PC9TdXJ2ZXlTaW11bGF0b3I+XG4gICAgICAgICAgeyF0aGlzLm1vZGVsLmlzUnVubmluZyA/IDxUYWJQcmV2aWV3VGVzdFN1cnZleUFnYWluQ29tcG9uZW50IGJ1dHRvbj17dGhpcy5tb2RlbC50ZXN0QWdhaW5BY3Rpb259IC8+IDogbnVsbH1cbiAgICAgICAgICB7IXRoaXMubW9kZWwuaXNSdW5uaW5nID8gPFN1cnZleVJlc3VsdHMgc3VydmV5PXt0aGlzLm1vZGVsLnNpbXVsYXRvci5zdXJ2ZXl9IC8+IDogbnVsbH1cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIHt0aGlzLmdldEJvdHRvbVRvb2xiYXIoKX1cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbiAgZ2V0Qm90dG9tVG9vbGJhcigpOiBKU1guRWxlbWVudCB7XG4gICAgaWYgKHRoaXMubW9kZWwuaXNQYWdlVG9vbGJhclZpc2libGUpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLXRlc3QtdGFiX19jb250ZW50LWFjdGlvbnNcIj5cbiAgICAgICAgICA8U3VydmV5QWN0aW9uQmFyIG1vZGVsPXt0aGlzLm1vZGVsLnBhZ2VzfT48L1N1cnZleUFjdGlvbkJhcj5cbiAgICAgICAgPC9kaXY+XG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXCJzdmMtdGFiLXRlc3RcIiwgKHByb3BzKSA9PiB7XG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFRhYlByZXZpZXdTdXJ2ZXlDb21wb25lbnQsIHByb3BzKTtcbn0pO1xuIiwiaW1wb3J0IHsgQmFzZSB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgU3VydmV5LCBTdXJ2ZXlFbGVtZW50QmFzZSB9IGZyb20gXCJzdXJ2ZXktcmVhY3QtdWlcIjtcbmltcG9ydCB7IFN1cnZleVNpbXVsYXRvck1vZGVsIH0gZnJvbSBcInN1cnZleS1jcmVhdG9yLWNvcmVcIjtcbmltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcblxuZXhwb3J0IGNsYXNzIFN1cnZleVNpbXVsYXRvciBleHRlbmRzIFN1cnZleUVsZW1lbnRCYXNlPGFueSwgYW55PiB7XG4gIHByaXZhdGUgZ2V0IG1vZGVsKCk6IFN1cnZleVNpbXVsYXRvck1vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5tb2RlbDtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnQoKTogQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMubW9kZWw7XG4gIH1cblxuICByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICBjb25zdCBtYWluU2ltdWxhdG9yQ2xhc3MgPSBcInN2ZC1zaW11bGF0b3ItbWFpblwiICtcbiAgICAgICh0aGlzLm1vZGVsLmRldmljZSA9PT0gXCJkZXNrdG9wXCIgPyBcIiBzdmQtc2ltdWxhdG9yLW1haW4tLWRlc2t0b3BcIiA6IFwiXCIpO1xuICAgIGlmICghdGhpcy5tb2RlbC5zdXJ2ZXkpIHtcbiAgICAgIHJldHVybiA8ZGl2IGNsYXNzTmFtZT17bWFpblNpbXVsYXRvckNsYXNzfT48L2Rpdj47XG4gICAgfVxuICAgIGlmICh0aGlzLm1vZGVsLmhhc0ZyYW1lKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3NOYW1lPXttYWluU2ltdWxhdG9yQ2xhc3MgKyBcIiBcIiArIHRoaXMubW9kZWwuc2ltdWxhdG9yTWFpbkNzc0NsYXNzfVxuICAgICAgICAgIG9uS2V5RG93bj17ZSA9PiB0aGlzLm1vZGVsLnRyeVRvWm9vbShlLCBlKX1cbiAgICAgICAgICBvbk1vdXNlRW50ZXI9e3RoaXMubW9kZWwuZGV2aWNlID09PSBcImRlc2t0b3BcIiA/IG51bGwgOiB0aGlzLm1vZGVsLmFjdGl2YXRlWm9vbX1cbiAgICAgICAgICBvbk1vdXNlTGVhdmU9e3RoaXMubW9kZWwuZGV2aWNlID09PSBcImRlc2t0b3BcIiA/IG51bGwgOiB0aGlzLm1vZGVsLmRlYWN0aXZhdGVab29tfVxuICAgICAgICA+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3NOYW1lPVwic3ZkLXNpbXVsYXRvci13cmFwcGVyXCJcbiAgICAgICAgICAgIGlkPVwic3ZkLXNpbXVsYXRvci13cmFwcGVyXCJcbiAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgIHdpZHRoOiB0aGlzLm1vZGVsLnNpbXVsYXRvckZyYW1lLmZyYW1lV2lkdGggKyBcInB4XCIsXG4gICAgICAgICAgICAgIGhlaWdodDogdGhpcy5tb2RlbC5zaW11bGF0b3JGcmFtZS5mcmFtZUhlaWdodCArIFwicHhcIlxuICAgICAgICAgICAgfX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNsYXNzTmFtZT17XG4gICAgICAgICAgICAgICAgXCJzdmQtc2ltdWxhdG9yLWZyYW1lIFwiICsgdGhpcy5tb2RlbC5zaW11bGF0b3JGcmFtZS5jc3NDbGFzc1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgd2lkdGg6XG4gICAgICAgICAgICAgICAgICB0aGlzLm1vZGVsLnNpbXVsYXRvckZyYW1lLmxhbmRzY2FwZWRGcmFtZVdpZHRoICsgXCJweFwiLFxuICAgICAgICAgICAgICAgIGhlaWdodDpcbiAgICAgICAgICAgICAgICAgIHRoaXMubW9kZWwuc2ltdWxhdG9yRnJhbWUubGFuZHNjYXBlZEZyYW1lSGVpZ2h0ICsgXCJweFwiXG4gICAgICAgICAgICAgIH19XG4gICAgICAgICAgICA+PC9kaXY+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNsYXNzTmFtZT1cInN2ZC1zaW11bGF0b3JcIlxuICAgICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICAgIHdpZHRoOlxuICAgICAgICAgICAgICAgICAgdGhpcy5tb2RlbC5zaW11bGF0b3JGcmFtZS5kZXZpY2VXaWR0aCArIFwicHhcIixcbiAgICAgICAgICAgICAgICBoZWlnaHQ6XG4gICAgICAgICAgICAgICAgICB0aGlzLm1vZGVsLnNpbXVsYXRvckZyYW1lLmRldmljZUhlaWdodCArIFwicHhcIixcbiAgICAgICAgICAgICAgICB0cmFuc2Zvcm06XG4gICAgICAgICAgICAgICAgICBcInNjYWxlKFwiICtcbiAgICAgICAgICAgICAgICAgIHRoaXMubW9kZWwuc2ltdWxhdG9yRnJhbWUuc2NhbGUgK1xuICAgICAgICAgICAgICAgICAgXCIpIHRyYW5zbGF0ZSgtNTAlLCAtNTAlKVwiXG4gICAgICAgICAgICAgIH19XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZkLXNpbXVsYXRvci1jb250ZW50XCI+XG4gICAgICAgICAgICAgICAgPFN1cnZleSBtb2RlbD17dGhpcy5tb2RlbC5zdXJ2ZXl9PjwvU3VydmV5PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzc05hbWU9e21haW5TaW11bGF0b3JDbGFzc30+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmQtc2ltdWxhdG9yLWNvbnRlbnRcIj5cbiAgICAgICAgICAgIDxTdXJ2ZXkgbW9kZWw9e3RoaXMubW9kZWwuc3VydmV5fT48L1N1cnZleT5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICApO1xuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgQmFzZSB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHtcbiAgUmVhY3RFbGVtZW50RmFjdG9yeSxcbiAgU3VydmV5RWxlbWVudEJhc2UsXG4gIFN1cnZleVxufSBmcm9tIFwic3VydmV5LXJlYWN0LXVpXCI7XG5pbXBvcnQgeyBUcmFuc2xhdGlvbiB9IGZyb20gXCJzdXJ2ZXktY3JlYXRvci1jb3JlXCI7XG5cbmV4cG9ydCBjbGFzcyBUYWJUcmFuc2xhdGlvbkNvbXBvbmVudCBleHRlbmRzIFN1cnZleUVsZW1lbnRCYXNlPGFueSwgYW55PiB7XG4gIHByaXZhdGUgZ2V0IG1vZGVsKCk6IFRyYW5zbGF0aW9uIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5kYXRhO1xuICB9XG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnQoKTogQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMubW9kZWw7XG4gIH1cbiAgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgaWYgKCF0aGlzLm1vZGVsKSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtY3JlYXRvci10YWJfX2NvbnRlbnQgc3ZjLXRyYW5zbGF0aW9uLXRhYlwiPlxuICAgICAgICB7dGhpcy5yZW5kZXJFbGVtZW50Q29udGVudCgpfVxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuICByZW5kZXJFbGVtZW50Q29udGVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgaWYgKHRoaXMubW9kZWwuaXNFbXB0eSkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdC1uby1zdHJpbmdzXCI+XG4gICAgICAgICAgPHNwYW4+e3RoaXMubW9kZWwubm9TdHJpbmdzVGV4dH08L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdC1jb250ZW50XCI+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtZmxleC1jb2x1bW4gc3Qtc3RyaW5ncy13cmFwcGVyXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy1mbGV4LXJvdyBzdC1zdHJpbmdzLWhlYWRlclwiPlxuICAgICAgICAgICAgICA8U3VydmV5IG1vZGVsPXt0aGlzLm1vZGVsLnN0cmluZ3NIZWFkZXJTdXJ2ZXl9PjwvU3VydmV5PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy1mbGV4LXJvdyBzdmMtcGx1Z2luLXRhYl9fY29udGVudCBzdC1zdHJpbmdzXCI+XG4gICAgICAgICAgICAgIDxTdXJ2ZXkgbW9kZWw9e3RoaXMubW9kZWwuc3RyaW5nc1N1cnZleX0+PC9TdXJ2ZXk+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICApO1xuICAgIH1cbiAgfVxufVxuXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcInN2Yy10YWItdHJhbnNsYXRpb25cIiwgKHByb3BzKSA9PiB7XG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFRhYlRyYW5zbGF0aW9uQ29tcG9uZW50LCBwcm9wcyk7XG59KTtcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFJlYWN0RWxlbWVudEZhY3RvcnkgfSBmcm9tIFwic3VydmV5LXJlYWN0LXVpXCI7XG5cbmV4cG9ydCBjbGFzcyBUcmFuc2xhdGlvbkxpbmVTa2VsZXRvbiBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDxhbnksIGFueT4ge1xuICByZW5kZXIoKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwic2QtdHJhbnNsYXRpb24tbGluZS1za2VsZXRvblwiPlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxufVxuXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcInNkLXRyYW5zbGF0aW9uLWxpbmUtc2tlbGV0b25cIiwgKHByb3BzOiBhbnkpID0+IHtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoVHJhbnNsYXRpb25MaW5lU2tlbGV0b24sIHByb3BzKTtcbn0pO1xuIiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBRdWVzdGlvbkRyb3Bkb3duTW9kZWwsIFJlbmRlcmVyRmFjdG9yeSB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgaW5pdExvZ2ljT3BlcmF0b3IgfSBmcm9tIFwic3VydmV5LWNyZWF0b3ItY29yZVwiO1xuaW1wb3J0IHsgU3VydmV5UXVlc3Rpb25Ecm9wZG93biwgUmVhY3RRdWVzdGlvbkZhY3RvcnkgfSBmcm9tIFwic3VydmV5LXJlYWN0LXVpXCI7XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlMb2dpY09wZXJ0b3IgZXh0ZW5kcyBTdXJ2ZXlRdWVzdGlvbkRyb3Bkb3duIHtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgfVxuXG4gIHByb3RlY3RlZCByZW5kZXJJbnB1dCgpOiBKU1guRWxlbWVudCB7XG4gICAgY29uc3QgcSA9IHRoaXMucXVlc3Rpb24gYXMgUXVlc3Rpb25Ecm9wZG93bk1vZGVsO1xuICAgIGluaXRMb2dpY09wZXJhdG9yKHEpO1xuICAgIGNvbnN0IHRleHQgPSAocS5zZWxlY3RlZEl0ZW1Mb2NUZXh0KSA/IHRoaXMucmVuZGVyTG9jU3RyaW5nKHEuc2VsZWN0ZWRJdGVtTG9jVGV4dCkgOiBcIlwiO1xuXG4gICAgcmV0dXJuICg8ZGl2XG4gICAgICBpZD17dGhpcy5xdWVzdGlvbi5pbnB1dElkfVxuICAgICAgY2xhc3NOYW1lPXtxLmdldENvbnRyb2xDbGFzcygpfVxuICAgICAgdGFiSW5kZXg9e3RoaXMucXVlc3Rpb24uaXNJbnB1dFJlYWRPbmx5ID8gdW5kZWZpbmVkIDogMH1cbiAgICAgIG9uQ2xpY2s9e3RoaXMuY2xpY2t9XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgICBkaXNhYmxlZD17dGhpcy5xdWVzdGlvbi5pc0lucHV0UmVhZE9ubHl9XG4gICAgICByZXF1aXJlZD17dGhpcy5xdWVzdGlvbi5pc1JlcXVpcmVkfVxuICAgICAgb25DaGFuZ2U9e3RoaXMudXBkYXRlVmFsdWVPbkV2ZW50fVxuICAgICAgb25JbnB1dD17dGhpcy51cGRhdGVWYWx1ZU9uRXZlbnR9XG4gICAgICBvbktleVVwPXt0aGlzLmtleWhhbmRsZXJ9XG4gICAgICByb2xlPXt0aGlzLnF1ZXN0aW9uLmFyaWFSb2xlfVxuICAgICAgYXJpYS1yZXF1aXJlZD17dGhpcy5xdWVzdGlvbi5hcmlhUmVxdWlyZWR9XG4gICAgICBhcmlhLWxhYmVsPXt0aGlzLnF1ZXN0aW9uLmFyaWFMYWJlbH1cbiAgICAgIGFyaWEtaW52YWxpZD17dGhpcy5xdWVzdGlvbi5hcmlhSW52YWxpZH1cbiAgICAgIGFyaWEtZGVzY3JpYmVkYnk9e3RoaXMucXVlc3Rpb24uYXJpYURlc2NyaWJlZEJ5fVxuICAgID5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMuY29udHJvbFZhbHVlfT5cbiAgICAgICAge3RleHR9XG4gICAgICAgIDxkaXY+e3EucmVhZE9ubHlUZXh0fTwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICB7dGhpcy5jcmVhdGVDbGVhckJ1dHRvbigpfVxuICAgIDwvZGl2Pik7XG4gIH1cbn1cblxuUmVhY3RRdWVzdGlvbkZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJRdWVzdGlvbihcInN2LWxvZ2ljLW9wZXJhdG9yXCIsIChwcm9wcykgPT4ge1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdXJ2ZXlMb2dpY09wZXJ0b3IsIHByb3BzKTtcbn0pO1xuXG5SZW5kZXJlckZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJSZW5kZXJlcihcImRyb3Bkb3duXCIsIFwibG9naWNvcGVyYXRvclwiLCBcInN2LWxvZ2ljLW9wZXJhdG9yXCIpOyIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFZlcnRpY2FsUmVzcG9uc2l2aXR5TWFuYWdlciB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgUmVhY3RFbGVtZW50RmFjdG9yeSB9IGZyb20gXCJzdXJ2ZXktcmVhY3QtdWlcIjtcbmltcG9ydCB7IElTdXJ2ZXlDcmVhdG9yVG9vbGJveFByb3BzLCBUb29sYm94IH0gZnJvbSBcIi4vVG9vbGJveFwiO1xuXG5leHBvcnQgY2xhc3MgQWRhcHRpdmVUb29sYm94IGV4dGVuZHMgVG9vbGJveCB7XG4gIHByaXZhdGUgbWFuYWdlcjogVmVydGljYWxSZXNwb25zaXZpdHlNYW5hZ2VyO1xuICBwcml2YXRlIHJvb3RSZWY6IFJlYWN0LlJlZk9iamVjdDxIVE1MRGl2RWxlbWVudD47XG5cbiAgY29uc3RydWN0b3IocHJvcHM6IElTdXJ2ZXlDcmVhdG9yVG9vbGJveFByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMucm9vdFJlZiA9IFJlYWN0LmNyZWF0ZVJlZigpO1xuICB9XG5cbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgc3VwZXIuY29tcG9uZW50RGlkTW91bnQoKTtcbiAgICBjb25zdCBjb250YWluZXIgPSB0aGlzLnJvb3RSZWYuY3VycmVudDtcbiAgICBpZiAoIWNvbnRhaW5lcikgcmV0dXJuO1xuICAgIHRoaXMubWFuYWdlciA9IG5ldyBWZXJ0aWNhbFJlc3BvbnNpdml0eU1hbmFnZXIoXG4gICAgICBjb250YWluZXIsXG4gICAgICB0aGlzLnRvb2xib3gsXG4gICAgICBcIi5zdmMtdG9vbGJveF9fdG9vbDpub3QoLnN2LWRvdHMpXCJcbiAgICApO1xuICB9XG4gIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgIHRoaXMubWFuYWdlciAmJiAodGhpcy5tYW5hZ2VyLmRpc3Bvc2UoKSk7XG4gICAgc3VwZXIuY29tcG9uZW50V2lsbFVubW91bnQoKTtcbiAgfVxuICByZW5kZXIoKTogSlNYLkVsZW1lbnQge1xuICAgIGlmICghdGhpcy50b29sYm94Lmhhc0FjdGlvbnMpIHJldHVybiBudWxsO1xuXG4gICAgY29uc3QgY2xhc3NOYW1lID0gXCJzdmMtdG9vbGJveFwiICsgKHRoaXMudG9vbGJveC5pc0NvbXBhY3QgPyBcIiBzdmMtdG9vbGJveC0tY29tcGFjdFwiIDogXCJcIik7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgcmVmPXt0aGlzLnJvb3RSZWZ9IGNsYXNzTmFtZT17Y2xhc3NOYW1lfT5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtdG9vbGJveF9fY29udGFpbmVyXCI+XG4gICAgICAgICAgeyh0aGlzLnRvb2xib3guaXNDb21wYWN0IHx8IHRoaXMudG9vbGJveC5jYXRlZ29yaWVzLmxlbmd0aCA9PSAxIHx8ICF0aGlzLnRvb2xib3guc2hvd0NhdGVnb3J5VGl0bGVzKSA/XG4gICAgICAgICAgICAoPGRpdiBjbGFzc05hbWU9XCJzdmMtdG9vbGJveF9fY2F0ZWdvcnlcIj5cbiAgICAgICAgICAgICAge3RoaXMucmVuZGVySXRlbXModGhpcy50b29sYm94LnJlbmRlcmVkQWN0aW9ucywgdGhpcy50b29sYm94LmlzQ29tcGFjdCl9XG4gICAgICAgICAgICA8L2Rpdj4pXG4gICAgICAgICAgICA6IHRoaXMucmVuZGVyQ2F0ZWdvcmllcygpXG4gICAgICAgICAgfVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXCJzdmMtYWRhcHRpdmUtdG9vbGJveFwiLCAocHJvcHMpID0+IHtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoQWRhcHRpdmVUb29sYm94LCBwcm9wcyk7XG59KTtcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IEJhc2UgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFJlYWN0RWxlbWVudEZhY3RvcnksIFN1cnZleUVsZW1lbnRCYXNlIH0gZnJvbSBcInN1cnZleS1yZWFjdC11aVwiO1xuaW1wb3J0IHsgQ3JlYXRvckJhc2UgfSBmcm9tIFwic3VydmV5LWNyZWF0b3ItY29yZVwiO1xuaW1wb3J0IHsgU3VydmV5Q3JlYXRvclRvb2xib3hUb29sIH0gZnJvbSBcIi4vVG9vbGJveEl0ZW1cIjtcbmltcG9ydCB7IFN1cnZleUNyZWF0b3JUb29sYm94Q2F0ZWdvcnkgfSBmcm9tIFwiLi9Ub29sYm94Q2F0ZWdvcnlcIjtcblxuZXhwb3J0IGludGVyZmFjZSBJU3VydmV5Q3JlYXRvclRvb2xib3hQcm9wcyB7XG4gIG1vZGVsOiBDcmVhdG9yQmFzZTtcbn1cblxuZXhwb3J0IGNsYXNzIFRvb2xib3ggZXh0ZW5kcyBTdXJ2ZXlFbGVtZW50QmFzZTxJU3VydmV5Q3JlYXRvclRvb2xib3hQcm9wcywgYW55PiB7XG4gIHB1YmxpYyBnZXQgY3JlYXRvcigpIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5tb2RlbDtcbiAgfVxuICBwdWJsaWMgZ2V0IHRvb2xib3goKSB7XG4gICAgcmV0dXJuIHRoaXMuY3JlYXRvci50b29sYm94O1xuICB9XG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnQoKTogQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMudG9vbGJveDtcbiAgfVxuXG4gIHJlbmRlcigpOiBKU1guRWxlbWVudCB7XG4gICAgaWYgKCF0aGlzLnRvb2xib3guaGFzQWN0aW9ucykgcmV0dXJuIG51bGw7XG5cbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtdG9vbGJveFwiPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy10b29sYm94X19jb250YWluZXJcIj5cbiAgICAgICAgICB7KHRoaXMudG9vbGJveC5jYXRlZ29yaWVzLmxlbmd0aCA9PSAxIHx8ICF0aGlzLnRvb2xib3guc2hvd0NhdGVnb3J5VGl0bGVzKSA/XG4gICAgICAgICAgICAoPGRpdiBjbGFzc05hbWU9XCJzdmMtdG9vbGJveF9fY2F0ZWdvcnlcIj5cbiAgICAgICAgICAgICAge3RoaXMucmVuZGVySXRlbXModGhpcy50b29sYm94LnZpc2libGVBY3Rpb25zKX1cbiAgICAgICAgICAgIDwvZGl2PilcbiAgICAgICAgICAgIDogdGhpcy5yZW5kZXJDYXRlZ29yaWVzKClcbiAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuXG4gIHJlbmRlckl0ZW1zKGl0ZW1zOiBBcnJheTxhbnk+LCBpc0NvbXBhY3QgPSBmYWxzZSkge1xuICAgIHJldHVybiBpdGVtcy5tYXAoKGl0ZW0sIGl0ZW1JbmRleCkgPT5cbiAgICAgIDxTdXJ2ZXlDcmVhdG9yVG9vbGJveFRvb2wgaXRlbT17KGl0ZW0gYXMgYW55KX0gY3JlYXRvcj17dGhpcy5jcmVhdG9yfSBpc0NvbXBhY3Q9e2lzQ29tcGFjdH0ga2V5PXtcIml0ZW1cIiArIGl0ZW1JbmRleH0gPjwvU3VydmV5Q3JlYXRvclRvb2xib3hUb29sPlxuICAgICk7XG4gIH1cblxuICByZW5kZXJDYXRlZ29yaWVzKCkge1xuICAgIHJldHVybiB0aGlzLnRvb2xib3guY2F0ZWdvcmllcy5tYXAoKGNhdGVnb3J5LCBpbmRleCkgPT4ge1xuICAgICAgcmV0dXJuIDxTdXJ2ZXlDcmVhdG9yVG9vbGJveENhdGVnb3J5IGNhdGVnb3J5PXtjYXRlZ29yeX0gdG9vbGJveD17dGhpcy50b29sYm94fSBrZXk9e1wiaXRlbVwiICsgaW5kZXh9ID48L1N1cnZleUNyZWF0b3JUb29sYm94Q2F0ZWdvcnk+O1xuICAgIH0pO1xuICB9XG59XG5cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFwic3ZjLXRvb2xib3hcIiwgKHByb3BzKSA9PiB7XG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFRvb2xib3gsIHByb3BzKTtcbn0pO1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgQmFzZSB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgYXR0YWNoS2V5MmNsaWNrLCBSZWFjdEVsZW1lbnRGYWN0b3J5LCBTdXJ2ZXlFbGVtZW50QmFzZSwgU3ZnSWNvbiB9IGZyb20gXCJzdXJ2ZXktcmVhY3QtdWlcIjtcbmltcG9ydCB7IFF1ZXN0aW9uVG9vbGJveCwgUXVlc3Rpb25Ub29sYm94Q2F0ZWdvcnkgfSBmcm9tIFwic3VydmV5LWNyZWF0b3ItY29yZVwiO1xuaW1wb3J0IHsgU3VydmV5Q3JlYXRvclRvb2xib3hUb29sIH0gZnJvbSBcIi4vVG9vbGJveEl0ZW1cIjtcblxuZXhwb3J0IGludGVyZmFjZSBJU3VydmV5Q3JlYXRvclRvb2xib3hDYXRlZ29yeVByb3BzIHtcbiAgY2F0ZWdvcnk6IFF1ZXN0aW9uVG9vbGJveENhdGVnb3J5O1xuICB0b29sYm94OiBRdWVzdGlvblRvb2xib3g7XG59XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlDcmVhdG9yVG9vbGJveENhdGVnb3J5IGV4dGVuZHMgU3VydmV5RWxlbWVudEJhc2U8SVN1cnZleUNyZWF0b3JUb29sYm94Q2F0ZWdvcnlQcm9wcywgYW55PiB7XG5cbiAgcHVibGljIGdldCBjYXRlZ29yeSgpIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5jYXRlZ29yeTtcbiAgfVxuICBwdWJsaWMgZ2V0IHRvb2xib3goKSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMudG9vbGJveDtcbiAgfVxuICBwdWJsaWMgZ2V0IGNsYXNzKCkge1xuICAgIHJldHVybiBcInN2Yy10b29sYm94X19jYXRlZ29yeVwiICsgKHRoaXMuY2F0ZWdvcnkuY29sbGFwc2VkID8gXCIgc3ZjLXRvb2xib3hfX2NhdGVnb3J5LS1jb2xsYXBzZWRcIiA6IFwiXCIpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldFN0YXRlRWxlbWVudCgpOiBCYXNlIHtcbiAgICByZXR1cm4gKHRoaXMuY2F0ZWdvcnkgYXMgYW55KTtcbiAgfVxuXG4gIHJlbmRlcigpOiBKU1guRWxlbWVudCB7XG4gICAgY29uc3QgaGVhZGVyID0gdGhpcy5yZW5kZXJDYXRlZ29yeUhlYWRlcigpO1xuICAgIGNvbnN0IGl0ZW1zID0gdGhpcy5yZW5kZXJDYXRlZ29yeUNvbnRlbnQoKTtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9e3RoaXMuY2xhc3N9IGtleT17dGhpcy5jYXRlZ29yeS5uYW1lfT5cbiAgICAgICAge2hlYWRlcn1cbiAgICAgICAge2l0ZW1zfVxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuXG4gIHJlbmRlckNhdGVnb3J5SGVhZGVyKCk6IEpTWC5FbGVtZW50IHtcbiAgICBsZXQgY2xhc3NOYW1lID0gXCJzdmMtdG9vbGJveF9fY2F0ZWdvcnktaGVhZGVyXCI7XG4gICAgaWYgKHRoaXMudG9vbGJveC5jYW5Db2xsYXBzZUNhdGVnb3JpZXMpIHtcbiAgICAgIGNsYXNzTmFtZSArPSBcIiBzdmMtdG9vbGJveF9fY2F0ZWdvcnktaGVhZGVyLS1jb2xsYXBzZWRcIjtcbiAgICB9XG4gICAgcmV0dXJuIGF0dGFjaEtleTJjbGljayhcbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtjbGFzc05hbWV9IG9uQ2xpY2s9e2UgPT4gdGhpcy5jYXRlZ29yeS50b2dnbGVTdGF0ZSgpfT5cbiAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwic3ZjLXRvb2xib3hfX2NhdGVnb3J5LXRpdGxlXCI+e3RoaXMuY2F0ZWdvcnkubmFtZX08L3NwYW4+XG4gICAgICAgIHt0aGlzLnJlbmRlckJ1dHRvbigpfVxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuXG4gIHJlbmRlckJ1dHRvbigpOiBKU1guRWxlbWVudCB7XG4gICAgaWYgKCF0aGlzLnRvb2xib3guY2FuQ29sbGFwc2VDYXRlZ29yaWVzKSByZXR1cm4gbnVsbDtcblxuICAgIGNvbnN0IGljb25OYW1lID0gdGhpcy5jYXRlZ29yeS5jb2xsYXBzZWQgPyBcImFycm93LWRvd25cIiA6IFwiYXJyb3ctdXBcIjtcbiAgICBjb25zdCBzdWZmaXhOYW1lID0gdGhpcy5jYXRlZ29yeS5jb2xsYXBzZWQgPyBcImV4cGFuZFwiIDogXCJjb2xsYXBzZVwiO1xuICAgIGNvbnN0IHN2Z0ljb25DbGFzc05hbWUgPSBcInN2Yy10b29sYm94X19jYXRlZ29yeS1oZWFkZXJfX2J1dHRvbiBzdmMtc3RyaW5nLWVkaXRvcl9fYnV0dG9uLS1cIiArIHN1ZmZpeE5hbWU7XG4gICAgcmV0dXJuICg8ZGl2IGNsYXNzTmFtZT1cInN2Yy10b29sYm94X19jYXRlZ29yeS1oZWFkZXJfX2NvbnRyb2xzXCI+XG4gICAgICA8U3ZnSWNvbiBjbGFzc05hbWU9e3N2Z0ljb25DbGFzc05hbWV9IGljb25OYW1lPXtcImljb24tXCIgKyBpY29uTmFtZX0gc2l6ZT17MjR9PjwvU3ZnSWNvbj5cbiAgICA8L2Rpdj4pO1xuICB9XG5cbiAgcHJvdGVjdGVkIHJlbmRlckNhdGVnb3J5Q29udGVudCgpOiBBcnJheTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5yZW5kZXJJdGVtcyh0aGlzLmNhdGVnb3J5Lml0ZW1zKTtcbiAgfVxuXG4gIHJlbmRlckl0ZW1zKGl0ZW1zOiBBcnJheTxhbnk+LCBpc0NvbXBhY3QgPSBmYWxzZSkge1xuICAgIHJldHVybiBpdGVtcy5tYXAoKGl0ZW0sIGl0ZW1JbmRleCkgPT5cbiAgICAgIDxTdXJ2ZXlDcmVhdG9yVG9vbGJveFRvb2wgaXRlbT17KGl0ZW0gYXMgYW55KX0gY3JlYXRvcj17dGhpcy50b29sYm94LmNyZWF0b3J9IGlzQ29tcGFjdD17aXNDb21wYWN0fSBrZXk9e1wiaXRlbVwiICsgaXRlbUluZGV4fSA+PC9TdXJ2ZXlDcmVhdG9yVG9vbGJveFRvb2w+XG4gICAgKTtcbiAgfVxufVxuXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcInN2Yy10b29sYm94LWNhdGVnb3J5XCIsIChwcm9wcykgPT4ge1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdXJ2ZXlDcmVhdG9yVG9vbGJveENhdGVnb3J5LCBwcm9wcyk7XG59KTsiLCJpbXBvcnQge1xuICBDcmVhdG9yQmFzZSxcbiAgZWRpdG9yTG9jYWxpemF0aW9uLFxuICBJUXVlc3Rpb25Ub29sYm94SXRlbVxufSBmcm9tIFwic3VydmV5LWNyZWF0b3ItY29yZVwiO1xuaW1wb3J0IFJlYWN0LCB7IENTU1Byb3BlcnRpZXMgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFRvb2xib3hUb29sVmlld01vZGVsIH0gZnJvbSBcInN1cnZleS1jcmVhdG9yLWNvcmVcIjtcbmltcG9ydCB7XG4gIEFjdGlvbixcbiAgQmFzZSxcbiAgU3VydmV5TW9kZWxcbn0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQge1xuICBhdHRhY2hLZXkyY2xpY2ssXG4gIFJlYWN0RWxlbWVudEZhY3RvcnksXG4gIFN2Z0ljb25cbn0gZnJvbSBcInN1cnZleS1yZWFjdC11aVwiO1xuaW1wb3J0IHsgQ3JlYXRvck1vZGVsRWxlbWVudCB9IGZyb20gXCIuLi9Nb2RlbEVsZW1lbnRcIjtcblxuZXhwb3J0IGludGVyZmFjZSBJU3VydmV5Q3JlYXRvclRvb2xib3hJdGVtUHJvcHMge1xuICBpdGVtOiBJUXVlc3Rpb25Ub29sYm94SXRlbTtcbiAgY3JlYXRvcjogQ3JlYXRvckJhc2U7XG4gIGlzQ29tcGFjdDogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGNsYXNzIFN1cnZleUNyZWF0b3JUb29sYm94VG9vbCBleHRlbmRzIENyZWF0b3JNb2RlbEVsZW1lbnQ8XG4gIElTdXJ2ZXlDcmVhdG9yVG9vbGJveEl0ZW1Qcm9wcyxcbiAgYW55XG4+IHtcbiAgbW9kZWw6IFRvb2xib3hUb29sVmlld01vZGVsO1xuXG4gIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICB9XG4gIHByb3RlY3RlZCBjcmVhdGVNb2RlbCgpOiB2b2lkIHtcbiAgICB0aGlzLm1vZGVsID0gbmV3IFRvb2xib3hUb29sVmlld01vZGVsKHRoaXMuaXRlbSwgdGhpcy5wcm9wcy5jcmVhdG9yKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0VXBkYXRlZE1vZGVsUHJvcHMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBbXCJjcmVhdG9yXCIsIFwiaXRlbVwiXTtcbiAgfVxuICBwdWJsaWMgZ2V0IGl0ZW0oKSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuaXRlbTtcbiAgfVxuICBwdWJsaWMgZ2V0IGNyZWF0b3IoKSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuY3JlYXRvcjtcbiAgfVxuICBwdWJsaWMgZ2V0IGlzQ29tcGFjdCgpIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5pc0NvbXBhY3Q7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCk6IEJhc2Uge1xuICAgIHJldHVybiAodGhpcy5pdGVtIGFzIGFueSk7XG4gIH1cblxuICByZW5kZXIoKTogSlNYLkVsZW1lbnQge1xuICAgIGNvbnN0IGl0ZW0gPSAoKHRoaXMuaXRlbSBhcyBhbnkpIGFzIEFjdGlvbik7XG4gICAgY29uc3QgY2xhc3NOYW1lID0gXCJzdmMtdG9vbGJveF9fdG9vbCBcIiArIGl0ZW0uY3NzICsgKGl0ZW0uaXNWaXNpYmxlID8gXCJcIiA6IFwiIHN2LWFjdGlvbi0taGlkZGVuXCIpO1xuICAgIGNvbnN0IGl0ZW1Db21wb25lbnQgPSBSZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLmNyZWF0ZUVsZW1lbnQoXG4gICAgICB0aGlzLml0ZW0uY29tcG9uZW50IHx8IFwic3ZjLXRvb2xib3gtaXRlbVwiLFxuICAgICAge1xuICAgICAgICBpdGVtOiB0aGlzLml0ZW0sXG4gICAgICAgIGNyZWF0b3I6IHRoaXMuY3JlYXRvcixcbiAgICAgICAgaXNDb21wYWN0OiB0aGlzLmlzQ29tcGFjdFxuICAgICAgfVxuICAgICk7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtjbGFzc05hbWV9IGtleT17aXRlbS5pZH1cbiAgICAgICAgb25Qb2ludGVyRG93bj17KGV2ZW50OiBhbnkpID0+IHtcbiAgICAgICAgICBldmVudC5wZXJzaXN0KCk7XG4gICAgICAgICAgdGhpcy5tb2RlbC5vblBvaW50ZXJEb3duKGV2ZW50KTtcbiAgICAgICAgfX1cbiAgICAgID5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdi1hY3Rpb25fX2NvbnRlbnRcIj5cbiAgICAgICAgICB7KGl0ZW0ubmVlZFNlcGFyYXRvciAmJiAhdGhpcy5jcmVhdG9yLnRvb2xib3guc2hvd0NhdGVnb3J5VGl0bGVzKSA/IChcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLXRvb2xib3hfX2NhdGVnb3J5LXNlcGFyYXRvclwiPjwvZGl2PlxuICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgIHtpdGVtQ29tcG9uZW50fVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFN1cnZleUNyZWF0b3JUb29sYm94SXRlbSBleHRlbmRzIENyZWF0b3JNb2RlbEVsZW1lbnQ8XG4gIElTdXJ2ZXlDcmVhdG9yVG9vbGJveEl0ZW1Qcm9wcyxcbiAgYW55XG4+IHtcbiAgbW9kZWw6IFRvb2xib3hUb29sVmlld01vZGVsO1xuICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgfVxuICBwcm90ZWN0ZWQgY3JlYXRlTW9kZWwoKTogdm9pZCB7XG4gICAgY29uc3QgdG9vbGJveEl0ZW06IElRdWVzdGlvblRvb2xib3hJdGVtID0gdGhpcy5wcm9wcy5pdGVtO1xuICAgIHRoaXMubW9kZWwgPSBuZXcgVG9vbGJveFRvb2xWaWV3TW9kZWwodG9vbGJveEl0ZW0sIHRoaXMucHJvcHMuY3JlYXRvcik7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFVwZGF0ZWRNb2RlbFByb3BzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gW1wiY3JlYXRvclwiLCBcIml0ZW1cIl07XG4gIH1cbiAgcHVibGljIGdldCBpdGVtKCkge1xuICAgIHJldHVybiB0aGlzLnByb3BzLml0ZW07XG4gIH1cbiAgcHVibGljIGdldCBjcmVhdG9yKCkge1xuICAgIHJldHVybiB0aGlzLnByb3BzLmNyZWF0b3I7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFN0YXRlRWxlbWVudCgpOiBCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5tb2RlbDtcbiAgfVxuICByZW5kZXIoKTogSlNYLkVsZW1lbnQge1xuICAgIGNvbnN0IGNsYXNzTmFtZSA9XG4gICAgICBcInN2Yy10b29sYm94X19pdGVtIHN2Yy10b29sYm94X19pdGVtLS1cIiArIHRoaXMuaXRlbS5pY29uTmFtZTtcbiAgICBjb25zdCBhcmlhTGFiZWwgPSB0aGlzLml0ZW0udG9vbHRpcCArIFwiIFwiICsgZWRpdG9yTG9jYWxpemF0aW9uLmdldFN0cmluZyhcInRvb2xib3hcIikgKyBcIiBpdGVtXCI7XG4gICAgcmV0dXJuIGF0dGFjaEtleTJjbGljayhcbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWV9XG4gICAgICAgIHRhYkluZGV4PXswfVxuICAgICAgICByb2xlPVwiYnV0dG9uXCJcbiAgICAgICAgYXJpYS1sYWJlbD17YXJpYUxhYmVsfVxuICAgICAgICBvbkNsaWNrPXsoZXZlbnQ6IGFueSkgPT4ge1xuICAgICAgICAgIGV2ZW50LnBlcnNpc3QoKTtcbiAgICAgICAgICB0aGlzLm1vZGVsLmNsaWNrKGV2ZW50KTtcbiAgICAgICAgfX1cbiAgICAgID5cbiAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwic3ZjLXRvb2xib3hfX2l0ZW0tY29udGFpbmVyXCI+XG4gICAgICAgICAgPFN2Z0ljb24gc2l6ZT17MjR9IGljb25OYW1lPXt0aGlzLml0ZW0uaWNvbk5hbWV9IHRpdGxlPXthcmlhTGFiZWx9PjwvU3ZnSWNvbj5cbiAgICAgICAgPC9zcGFuPlxuICAgICAgICB7KHRoaXMucHJvcHMuaXNDb21wYWN0ID9cbiAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJzdmMtdG9vbGJveF9faXRlbS1iYW5uZXIgc3ZjLWl0ZW1fX2Jhbm5lclwiPlxuICAgICAgICAgICAgPFN2Z0ljb24gc2l6ZT17MjR9IGljb25OYW1lPXt0aGlzLml0ZW0uaWNvbk5hbWV9IGNsYXNzTmFtZT1cInN2Yy10b29sYm94X19pdGVtLWljb25cIiB0aXRsZT17YXJpYUxhYmVsfT48L1N2Z0ljb24+XG4gICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJzdmMtdG9vbGJveF9faXRlbS10aXRsZVwiPnt0aGlzLml0ZW0udGl0bGV9PC9zcGFuPlxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA6XG4gICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwic3ZjLXRvb2xib3hfX2l0ZW0tdGl0bGVcIj57dGhpcy5pdGVtLnRpdGxlfTwvc3Bhbj5cbiAgICAgICAgKX1cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXCJzdmMtdG9vbGJveC1pdGVtXCIsIChwcm9wcykgPT4ge1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdXJ2ZXlDcmVhdG9yVG9vbGJveEl0ZW0sIHByb3BzKTtcbn0pO1xuIiwibW9kdWxlLmV4cG9ydHMgPSBfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFX3JlYWN0X187IiwibW9kdWxlLmV4cG9ydHMgPSBfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFX3JlYWN0X2RvbV9fOyIsIm1vZHVsZS5leHBvcnRzID0gX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV9zdXJ2ZXlfY29yZV9fOyIsIm1vZHVsZS5leHBvcnRzID0gX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV9zdXJ2ZXlfY3JlYXRvcl9jb3JlX187IiwibW9kdWxlLmV4cG9ydHMgPSBfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFX3N1cnZleV9yZWFjdF91aV9fOyJdLCJzb3VyY2VSb290IjoiIn0=
|